Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXhmikosR <xhmikosr@gmail.com>2017-07-16 17:09:40 +0300
committerXhmikosR <xhmikosr@gmail.com>2017-07-16 17:09:40 +0300
commit73813e5b7bcabe4e8bcd516ecbc73138adec9170 (patch)
tree28656cfd6e3b4555a4054418ed54e79bf64041f1
parent46ce9d630e7891230c9648afb0c17088681573e6 (diff)
parent7fae792e2203acfbe1876c27a328848b0de2df8f (diff)
Merge branch 'release-1.7.12'1.7.12
-rw-r--r--.gitignore9
-rw-r--r--.gitmodules40
-rw-r--r--CONTRIBUTING.md6
-rw-r--r--Readme.md101
-rwxr-xr-xbuild.bat253
-rw-r--r--build/About.txt1
-rw-r--r--build/BuildConfig.vcxproj46
-rw-r--r--common.bat168
-rw-r--r--contrib/astyle.ini17
-rwxr-xr-xcontrib/coverity.bat98
-rw-r--r--contrib/mpc-hc.cppcheck4
-rw-r--r--contrib/pre-commit.sh8
-rwxr-xr-xcontrib/run_astyle.bat17
-rwxr-xr-xcontrib/sign.bat55
-rw-r--r--distrib/Languages/Arabic.isl13
-rw-r--r--distrib/Languages/Armenian.islu332
-rw-r--r--distrib/Languages/Belarusian.isl464
-rw-r--r--distrib/Languages/Bengali.islu12
-rw-r--r--distrib/Languages/Bosnian.isl329
-rw-r--r--distrib/Languages/Croatian.isl3
-rw-r--r--distrib/Languages/Indonesian.isl340
-rw-r--r--distrib/Languages/Lithuanian.isl339
-rw-r--r--distrib/Languages/Thai.isl38
-rw-r--r--distrib/Languages/Vietnamese.isl467
-rw-r--r--distrib/custom_messages.iss3
-rw-r--r--distrib/custom_messages_translated.iss371
-rw-r--r--distrib/mpc-hc_setup.iss56
-rw-r--r--docs/Authors.txt37
-rw-r--r--docs/Changelog.txt90
-rw-r--r--docs/Changelog_old.txt358
-rw-r--r--docs/Compilation.md93
-rw-r--r--docs/Compilation.txt74
-rw-r--r--docs/Readme.txt56
-rw-r--r--docs/Release.md47
-rw-r--r--docs/Release.txt15
-rw-r--r--docs/Submodules.md33
-rw-r--r--docs/Submodules.txt30
-rw-r--r--docs/Todo.md28
-rw-r--r--docs/Todo.txt22
-rw-r--r--include/MediaInfoDLL.h622
-rw-r--r--include/SubRenderIntf.h67
-rw-r--r--include/dx/d3d.h1688
-rw-r--r--include/dx/d3dcaps.h601
-rw-r--r--include/dx/d3dtypes.h2119
-rw-r--r--include/inttypes.h306
-rw-r--r--include/moreuuids.h37
-rw-r--r--include/mpc-hc_config.h18
-rw-r--r--include/mvrInterfaces.h485
-rw-r--r--include/unrar.h24
-rw-r--r--include/version.h21
-rw-r--r--mpc-hc.sln365
-rw-r--r--mpciconlib.sln4
-rw-r--r--mpcresources.sln230
-rw-r--r--src/CmdUI/CmdUI.vcxproj52
-rw-r--r--src/CmdUI/CmdUI.vcxproj.filters2
-rw-r--r--src/DSUtil/AudioTools.h4
-rw-r--r--src/DSUtil/DSMPropertyBag.cpp6
-rw-r--r--src/DSUtil/DSUtil.cpp848
-rw-r--r--src/DSUtil/DSUtil.h76
-rw-r--r--src/DSUtil/DSUtil.vcxproj74
-rw-r--r--src/DSUtil/DSUtil.vcxproj.filters14
-rw-r--r--src/DSUtil/FileVersionInfo.cpp2
-rw-r--r--src/DSUtil/FontInstaller.h4
-rw-r--r--src/DSUtil/HdmvClipInfo.cpp8
-rw-r--r--src/DSUtil/HdmvClipInfo.h3
-rw-r--r--src/DSUtil/ISOLang.cpp762
-rw-r--r--src/DSUtil/ISOLang.h58
-rw-r--r--src/DSUtil/MediaTypeEx.cpp50
-rw-r--r--src/DSUtil/MediaTypeEx.h4
-rw-r--r--src/DSUtil/MediaTypes.cpp13
-rw-r--r--src/DSUtil/MediaTypes.h8
-rw-r--r--src/DSUtil/MhookHelper.h (renamed from src/thirdparty/LAVFilters/GCCInfo.c)18
-rw-r--r--src/DSUtil/Mpeg2Def.h18
-rw-r--r--src/DSUtil/NullRenderers.cpp76
-rw-r--r--src/DSUtil/PathUtils.cpp78
-rw-r--r--src/DSUtil/PathUtils.h8
-rw-r--r--src/DSUtil/SharedInclude.h6
-rw-r--r--src/DSUtil/SysVersion.cpp12
-rw-r--r--src/DSUtil/SysVersion.h4
-rw-r--r--src/DSUtil/WinAPIUtils.cpp57
-rw-r--r--src/DSUtil/WinAPIUtils.h7
-rw-r--r--src/DSUtil/WinapiFunc.h22
-rw-r--r--src/DSUtil/deinterlace.cpp2
-rw-r--r--src/DSUtil/text.cpp16
-rw-r--r--src/DSUtil/text.h15
-rw-r--r--src/DSUtil/vd.cpp56
-rw-r--r--src/DSUtil/vd.h1
-rw-r--r--src/DeCSS/CSSscramble.cpp22
-rw-r--r--src/DeCSS/CSSscramble.h10
-rw-r--r--src/DeCSS/DeCSS.vcxproj55
-rw-r--r--src/DeCSS/DeCSS.vcxproj.filters2
-rw-r--r--src/DeCSS/DeCSSInputPin.cpp5
-rw-r--r--src/DeCSS/VobFile.cpp162
-rw-r--r--src/DeCSS/VobFile.h7
-rw-r--r--src/DeCSS/udf.cpp2
-rw-r--r--src/MPCTestAPI/MPCTestAPI.sln4
-rw-r--r--src/MPCTestAPI/MPCTestAPI.vcxproj71
-rw-r--r--src/MPCTestAPI/MPCTestAPI.vcxproj.filters2
-rw-r--r--src/MPCTestAPI/MPCTestAPIDlg.cpp8
-rw-r--r--src/MPCTestAPI/res/MPCTestAPI.exe.manifest1
-rw-r--r--src/MathLibFix/MathLibFix.cpp35
-rw-r--r--src/MathLibFix/MathLibFix.vcxproj124
-rw-r--r--src/MathLibFix/MathLibFix.vcxproj.filters23
-rw-r--r--src/SubPic/CoordGeom.cpp40
-rw-r--r--src/SubPic/CoordGeom.h10
-rw-r--r--src/SubPic/DX7SubPic.cpp304
-rw-r--r--src/SubPic/DX7SubPic.h65
-rw-r--r--src/SubPic/ISubPic.h14
-rw-r--r--src/SubPic/ISubRender.h57
-rw-r--r--src/SubPic/MemSubPic.cpp184
-rw-r--r--src/SubPic/MemSubPic.h23
-rw-r--r--src/SubPic/SubPic.vcxproj57
-rw-r--r--src/SubPic/SubPic.vcxproj.filters8
-rw-r--r--src/SubPic/SubPicAllocatorPresenterImpl.cpp186
-rw-r--r--src/SubPic/SubPicAllocatorPresenterImpl.h18
-rw-r--r--src/SubPic/SubPicImpl.cpp31
-rw-r--r--src/SubPic/SubPicImpl.h8
-rw-r--r--src/SubPic/SubPicQueueImpl.cpp22
-rw-r--r--src/SubPic/SubPicQueueSettings.h4
-rw-r--r--src/SubPic/XySubPicProvider.cpp11
-rw-r--r--src/Subtitles/CCDecoder.cpp6
-rw-r--r--src/Subtitles/ColorConvTable.cpp883
-rw-r--r--src/Subtitles/ColorConvTable.h69
-rw-r--r--src/Subtitles/CompositionObject.cpp36
-rw-r--r--src/Subtitles/CompositionObject.h5
-rw-r--r--src/Subtitles/DVBSub.cpp151
-rw-r--r--src/Subtitles/DVBSub.h172
-rw-r--r--src/Subtitles/Ellipse.cpp16
-rw-r--r--src/Subtitles/PGSSub.cpp70
-rw-r--r--src/Subtitles/PGSSub.h25
-rw-r--r--src/Subtitles/RLECodedSubtitle.cpp40
-rw-r--r--src/Subtitles/RLECodedSubtitle.h22
-rw-r--r--src/Subtitles/RTS.cpp313
-rw-r--r--src/Subtitles/RTS.h11
-rw-r--r--src/Subtitles/Rasterizer.cpp130
-rw-r--r--src/Subtitles/Rasterizer.h10
-rw-r--r--src/Subtitles/RealTextParser.cpp26
-rw-r--r--src/Subtitles/RenderingCache.cpp50
-rw-r--r--src/Subtitles/RenderingCache.h6
-rw-r--r--src/Subtitles/STS.cpp285
-rw-r--r--src/Subtitles/STS.h46
-rw-r--r--src/Subtitles/SeparableFilter.h7
-rw-r--r--src/Subtitles/SubtitleHelpers.cpp102
-rw-r--r--src/Subtitles/SubtitleHelpers.h15
-rw-r--r--src/Subtitles/SubtitleInputPin.cpp40
-rw-r--r--src/Subtitles/SubtitleInputPin.h7
-rw-r--r--src/Subtitles/Subtitles.vcxproj57
-rw-r--r--src/Subtitles/Subtitles.vcxproj.filters8
-rw-r--r--src/Subtitles/TextFile.cpp4
-rw-r--r--src/Subtitles/USFSubtitles.cpp54
-rw-r--r--src/Subtitles/VobSubFile.cpp66
-rw-r--r--src/Subtitles/VobSubFile.h6
-rw-r--r--src/Subtitles/VobSubFileRipper.cpp23
-rw-r--r--src/Subtitles/VobSubImage.cpp120
-rw-r--r--src/Subtitles/stdafx.h6
-rwxr-xr-xsrc/YASM.bat13
-rw-r--r--src/common-3rd-party.props9
-rw-r--r--src/common.props28
-rw-r--r--src/filters/FilterApp.cpp5
-rw-r--r--src/filters/Filters.h3
-rw-r--r--src/filters/Filters.vcxproj60
-rw-r--r--src/filters/Filters.vcxproj.filters2
-rw-r--r--src/filters/PinInfoWnd.cpp51
-rw-r--r--src/filters/PinInfoWnd.h11
-rw-r--r--src/filters/muxer/BaseMuxer/BaseMuxer.cpp15
-rw-r--r--src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj55
-rw-r--r--src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj.filters2
-rw-r--r--src/filters/muxer/BaseMuxer/BaseMuxerInputPin.cpp11
-rw-r--r--src/filters/muxer/BaseMuxer/BaseMuxerOutputPin.cpp14
-rw-r--r--src/filters/muxer/BaseMuxer/BitStream.cpp2
-rw-r--r--src/filters/muxer/BaseMuxer/stdafx.h4
-rw-r--r--src/filters/muxer/DSMMuxer/DSMMuxer.cpp6
-rw-r--r--src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj136
-rw-r--r--src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj.filters2
-rw-r--r--src/filters/muxer/MatroskaMuxer/MatroskaFile.cpp14
-rw-r--r--src/filters/muxer/MatroskaMuxer/MatroskaMuxer.cpp65
-rw-r--r--src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj136
-rw-r--r--src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj.filters2
-rw-r--r--src/filters/muxer/WavDest/WavDest.cpp4
-rw-r--r--src/filters/muxer/WavDest/WavDest.vcxproj133
-rw-r--r--src/filters/muxer/WavDest/WavDest.vcxproj.filters2
-rw-r--r--src/filters/parser/BaseSplitter/BaseSplitter.cpp50
-rw-r--r--src/filters/parser/BaseSplitter/BaseSplitter.h8
-rw-r--r--src/filters/parser/BaseSplitter/BaseSplitter.vcxproj55
-rw-r--r--src/filters/parser/BaseSplitter/BaseSplitter.vcxproj.filters2
-rw-r--r--src/filters/parser/BaseSplitter/BaseSplitterFile.cpp8
-rw-r--r--src/filters/parser/BaseSplitter/MultiFiles.cpp8
-rw-r--r--src/filters/parser/DSMSplitter/DSMSplitter.cpp16
-rw-r--r--src/filters/parser/DSMSplitter/DSMSplitter.vcxproj136
-rw-r--r--src/filters/parser/DSMSplitter/DSMSplitter.vcxproj.filters2
-rw-r--r--src/filters/parser/StreamDriveThru/StreamDriveThru.cpp11
-rw-r--r--src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj136
-rw-r--r--src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj.filters2
-rw-r--r--src/filters/reader/CDDAReader/CDDAReader.cpp216
-rw-r--r--src/filters/reader/CDDAReader/CDDAReader.h7
-rw-r--r--src/filters/reader/CDDAReader/CDDAReader.vcxproj138
-rw-r--r--src/filters/reader/CDDAReader/CDDAReader.vcxproj.filters2
-rw-r--r--src/filters/reader/CDXAReader/CDXAReader.cpp8
-rw-r--r--src/filters/reader/CDXAReader/CDXAReader.vcxproj138
-rw-r--r--src/filters/reader/CDXAReader/CDXAReader.vcxproj.filters2
-rw-r--r--src/filters/reader/VTSReader/VTSReader.vcxproj136
-rw-r--r--src/filters/reader/VTSReader/VTSReader.vcxproj.filters2
-rw-r--r--src/filters/renderer/MpcAudioRenderer/IMpcAudioRendererFilter.h34
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.cpp1321
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.def5
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.h161
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.vcxproj259
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.vcxproj.filters58
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.cpp141
-rw-r--r--src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.h61
-rw-r--r--src/filters/renderer/MpcAudioRenderer/resource.h19
-rw-r--r--src/filters/renderer/MpcAudioRenderer/stdafx.cpp21
-rw-r--r--src/filters/renderer/MpcAudioRenderer/stdafx.h34
-rw-r--r--src/filters/renderer/SyncClock/SyncClock.cpp10
-rw-r--r--src/filters/renderer/SyncClock/SyncClock.h4
-rw-r--r--src/filters/renderer/SyncClock/SyncClock.vcxproj55
-rw-r--r--src/filters/renderer/SyncClock/SyncClock.vcxproj.filters2
-rw-r--r--src/filters/renderer/VideoRenderers/AllocatorCommon.cpp3
-rw-r--r--src/filters/renderer/VideoRenderers/AllocatorCommon7.cpp77
-rw-r--r--src/filters/renderer/VideoRenderers/AllocatorCommon7.h41
-rw-r--r--src/filters/renderer/VideoRenderers/AsyncCallback.h71
-rw-r--r--src/filters/renderer/VideoRenderers/D3DFont.cpp4
-rw-r--r--src/filters/renderer/VideoRenderers/DX7AllocatorPresenter.cpp486
-rw-r--r--src/filters/renderer/VideoRenderers/DX7AllocatorPresenter.h71
-rw-r--r--src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp653
-rw-r--r--src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h22
-rw-r--r--src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp38
-rw-r--r--src/filters/renderer/VideoRenderers/DX9RenderingEngine.h3
-rw-r--r--src/filters/renderer/VideoRenderers/DXRAllocatorPresenter.cpp37
-rw-r--r--src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.cpp677
-rw-r--r--src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.h73
-rw-r--r--src/filters/renderer/VideoRenderers/FocusThread.cpp31
-rw-r--r--src/filters/renderer/VideoRenderers/FocusThread.h9
-rw-r--r--src/filters/renderer/VideoRenderers/IPinHook.cpp425
-rw-r--r--src/filters/renderer/VideoRenderers/IPinHook.h5
-rw-r--r--src/filters/renderer/VideoRenderers/PixelShaderCache.cpp242
-rw-r--r--src/filters/renderer/VideoRenderers/PixelShaderCache.h67
-rw-r--r--src/filters/renderer/VideoRenderers/PixelShaderCompiler.cpp15
-rw-r--r--src/filters/renderer/VideoRenderers/PixelShaderCompiler.h6
-rw-r--r--src/filters/renderer/VideoRenderers/QT7AllocatorPresenter.cpp159
-rw-r--r--src/filters/renderer/VideoRenderers/QT7AllocatorPresenter.h57
-rw-r--r--src/filters/renderer/VideoRenderers/QT9AllocatorPresenter.cpp5
-rw-r--r--src/filters/renderer/VideoRenderers/RM7AllocatorPresenter.cpp264
-rw-r--r--src/filters/renderer/VideoRenderers/RM7AllocatorPresenter.h68
-rw-r--r--src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.cpp5
-rw-r--r--src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.h6
-rw-r--r--src/filters/renderer/VideoRenderers/RenderersSettings.cpp54
-rw-r--r--src/filters/renderer/VideoRenderers/RenderersSettings.h18
-rw-r--r--src/filters/renderer/VideoRenderers/SyncRenderer.cpp1203
-rw-r--r--src/filters/renderer/VideoRenderers/SyncRenderer.h69
-rw-r--r--src/filters/renderer/VideoRenderers/VMR7AllocatorPresenter.cpp393
-rw-r--r--src/filters/renderer/VideoRenderers/VMR7AllocatorPresenter.h82
-rw-r--r--src/filters/renderer/VideoRenderers/VMR9AllocatorPresenter.cpp13
-rw-r--r--src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj83
-rw-r--r--src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj.filters41
-rw-r--r--src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.cpp160
-rw-r--r--src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.h115
-rw-r--r--src/filters/source/BaseSource/BaseSource.cpp4
-rw-r--r--src/filters/source/BaseSource/BaseSource.vcxproj55
-rw-r--r--src/filters/source/BaseSource/BaseSource.vcxproj.filters2
-rw-r--r--src/filters/source/SubtitleSource/SubtitleSource.cpp2
-rw-r--r--src/filters/source/SubtitleSource/SubtitleSource.vcxproj138
-rw-r--r--src/filters/source/SubtitleSource/SubtitleSource.vcxproj.filters2
-rw-r--r--src/filters/switcher/AudioSwitcher/Audio.cpp12
-rw-r--r--src/filters/switcher/AudioSwitcher/AudioSwitcher.cpp8
-rw-r--r--src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj138
-rw-r--r--src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj.filters2
-rw-r--r--src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp10
-rw-r--r--src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.cpp42
-rw-r--r--src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj135
-rw-r--r--src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj.filters2
-rw-r--r--src/filters/transform/BaseVideoFilter/BaseVideoFilter.cpp7
-rw-r--r--src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj55
-rw-r--r--src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj.filters2
-rw-r--r--src/filters/transform/BufferFilter/BufferFilter.vcxproj135
-rw-r--r--src/filters/transform/BufferFilter/BufferFilter.vcxproj.filters2
-rw-r--r--src/filters/transform/DeCSSFilter/DeCSSFilter.cpp5
-rw-r--r--src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj135
-rw-r--r--src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj.filters2
-rw-r--r--src/filters/transform/VSFilter/Copy.cpp17
-rw-r--r--src/filters/transform/VSFilter/DirectVobSub.cpp18
-rw-r--r--src/filters/transform/VSFilter/DirectVobSub.h5
-rw-r--r--src/filters/transform/VSFilter/DirectVobSubFilter.cpp90
-rw-r--r--src/filters/transform/VSFilter/DirectVobSubPropPage.cpp6
-rw-r--r--src/filters/transform/VSFilter/StyleEditorDialog.cpp5
-rw-r--r--src/filters/transform/VSFilter/VSFilter.cpp16
-rw-r--r--src/filters/transform/VSFilter/VSFilter.h5
-rw-r--r--src/filters/transform/VSFilter/VSFilter.vcxproj93
-rw-r--r--src/filters/transform/VSFilter/VSFilter.vcxproj.filters2
-rwxr-xr-xsrc/filters/transform/VSFilter/installer/build_installer.bat45
-rw-r--r--src/filters/transform/VSFilter/installer/vsfilter_setup.iss10
-rw-r--r--src/filters/transform/VSFilter/plugins.cpp10
-rw-r--r--src/filters/transform/VSFilter/res/VSFilter.manifest1
-rw-r--r--src/mpc-hc/AboutDlg.cpp45
-rw-r--r--src/mpc-hc/AppSettings.cpp986
-rw-r--r--src/mpc-hc/AppSettings.h225
-rw-r--r--src/mpc-hc/AuthDlg.cpp30
-rw-r--r--src/mpc-hc/ChildView.cpp54
-rw-r--r--src/mpc-hc/ChildView.h7
-rw-r--r--src/mpc-hc/CmdLineHelpDlg.cpp24
-rw-r--r--src/mpc-hc/CoverArt.cpp86
-rw-r--r--src/mpc-hc/CoverArt.h30
-rw-r--r--src/mpc-hc/CrashReporter.cpp130
-rw-r--r--src/mpc-hc/CrashReporter.h (renamed from src/MathLibFix/MathLibFix.h)10
-rw-r--r--src/mpc-hc/CrashReporterDialog/CrashReporterDialog.cpp186
-rw-r--r--src/mpc-hc/CrashReporterDialog/CrashReporterDialog.def3
-rw-r--r--src/mpc-hc/CrashReporterDialog/CrashReporterDialog.h53
-rw-r--r--src/mpc-hc/CrashReporterDialog/CrashReporterDialog.rc (renamed from src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.rc)213
-rw-r--r--src/mpc-hc/CrashReporterDialog/CrashReporterDialog.vcxproj82
-rw-r--r--src/mpc-hc/CrashReporterDialog/CrashReporterDialog.vcxproj.filters37
-rw-r--r--src/mpc-hc/DVBChannel.cpp187
-rw-r--r--src/mpc-hc/DVBChannel.h114
-rw-r--r--src/mpc-hc/DebugShadersDlg.cpp22
-rw-r--r--src/mpc-hc/DebugShadersDlg.h5
-rw-r--r--src/mpc-hc/DeinterlacerFilter.cpp5
-rw-r--r--src/mpc-hc/DpiHelper.cpp66
-rw-r--r--src/mpc-hc/DpiHelper.h49
-rw-r--r--src/mpc-hc/DropTarget.cpp122
-rw-r--r--src/mpc-hc/DropTarget.h49
-rw-r--r--src/mpc-hc/EditListEditor.cpp8
-rw-r--r--src/mpc-hc/EventDispatcher.h8
-rw-r--r--src/mpc-hc/FGFilter.cpp134
-rw-r--r--src/mpc-hc/FGFilter.h4
-rw-r--r--src/mpc-hc/FGFilterLAV.cpp100
-rw-r--r--src/mpc-hc/FGFilterLAV.h11
-rw-r--r--src/mpc-hc/FGManager.cpp214
-rw-r--r--src/mpc-hc/FGManagerBDA.cpp292
-rw-r--r--src/mpc-hc/FGManagerBDA.h57
-rw-r--r--src/mpc-hc/FakeFilterMapper2.cpp76
-rw-r--r--src/mpc-hc/FakeFilterMapper2.h6
-rw-r--r--src/mpc-hc/FavoriteAddDlg.cpp3
-rw-r--r--src/mpc-hc/FavoriteOrganizeDlg.cpp28
-rw-r--r--src/mpc-hc/FavoriteOrganizeDlg.h3
-rw-r--r--src/mpc-hc/FileAssoc.cpp40
-rw-r--r--src/mpc-hc/FileAssoc.h5
-rw-r--r--src/mpc-hc/FileDropTarget.cpp73
-rw-r--r--src/mpc-hc/FileDropTarget.h72
-rw-r--r--src/mpc-hc/FilterEnum.h18
-rw-r--r--src/mpc-hc/FloatEdit.cpp19
-rw-r--r--src/mpc-hc/FreeviewEPGDecode.cpp5
-rw-r--r--src/mpc-hc/FullscreenWnd.cpp43
-rw-r--r--src/mpc-hc/FullscreenWnd.h19
-rw-r--r--src/mpc-hc/GoToDlg.cpp30
-rw-r--r--src/mpc-hc/GraphThread.cpp7
-rw-r--r--src/mpc-hc/IGraphBuilder2.h8
-rw-r--r--src/mpc-hc/ISDb.cpp140
-rw-r--r--src/mpc-hc/ISDb.h72
-rw-r--r--src/mpc-hc/Ifo.cpp4
-rw-r--r--src/mpc-hc/Ifo.h4
-rw-r--r--src/mpc-hc/ImageGrayer.cpp137
-rw-r--r--src/mpc-hc/ImageGrayer.h26
-rw-r--r--src/mpc-hc/InternalFiltersConfig.h30
-rw-r--r--src/mpc-hc/LcdSupport.cpp17
-rw-r--r--src/mpc-hc/LcdSupport.h3
-rw-r--r--src/mpc-hc/Logger.h104
-rw-r--r--src/mpc-hc/MPCPngImage.cpp22
-rw-r--r--src/mpc-hc/MPCPngImage.h6
-rw-r--r--src/mpc-hc/MainFrm.cpp3812
-rw-r--r--src/mpc-hc/MainFrm.h265
-rw-r--r--src/mpc-hc/MainFrmControls.cpp34
-rw-r--r--src/mpc-hc/MainFrmControls.h6
-rw-r--r--src/mpc-hc/MediaFormats.cpp107
-rw-r--r--src/mpc-hc/MediaPositionList.h4
-rw-r--r--src/mpc-hc/MediaTypesDlg.cpp4
-rw-r--r--src/mpc-hc/MiniDump.cpp161
-rw-r--r--src/mpc-hc/MiniDump.h35
-rw-r--r--src/mpc-hc/MouseTouch.cpp47
-rw-r--r--src/mpc-hc/MouseTouch.h90
-rw-r--r--src/mpc-hc/MpcApi.h10
-rw-r--r--src/mpc-hc/Mpeg2SectionData.cpp356
-rw-r--r--src/mpc-hc/Mpeg2SectionData.h8
-rw-r--r--src/mpc-hc/OpenDirHelper.cpp28
-rw-r--r--src/mpc-hc/OpenDirHelper.h4
-rw-r--r--src/mpc-hc/OpenDlg.cpp77
-rw-r--r--src/mpc-hc/OpenDlg.h37
-rw-r--r--src/mpc-hc/OpenFileDlg.cpp30
-rw-r--r--src/mpc-hc/PPageAccelTbl.cpp31
-rw-r--r--src/mpc-hc/PPageAdvanced.cpp120
-rw-r--r--src/mpc-hc/PPageAdvanced.h26
-rw-r--r--src/mpc-hc/PPageAudioRenderer.cpp235
-rw-r--r--src/mpc-hc/PPageAudioRenderer.h61
-rw-r--r--src/mpc-hc/PPageAudioSwitcher.cpp45
-rw-r--r--src/mpc-hc/PPageBase.cpp5
-rw-r--r--src/mpc-hc/PPageCapture.cpp33
-rw-r--r--src/mpc-hc/PPageDVD.cpp7
-rw-r--r--src/mpc-hc/PPageExternalFilters.cpp213
-rw-r--r--src/mpc-hc/PPageExternalFilters.h22
-rw-r--r--src/mpc-hc/PPageFileInfoClip.cpp112
-rw-r--r--src/mpc-hc/PPageFileInfoClip.h29
-rw-r--r--src/mpc-hc/PPageFileInfoDetails.cpp268
-rw-r--r--src/mpc-hc/PPageFileInfoDetails.h31
-rw-r--r--src/mpc-hc/PPageFileInfoRes.cpp76
-rw-r--r--src/mpc-hc/PPageFileInfoRes.h13
-rw-r--r--src/mpc-hc/PPageFileInfoSheet.cpp46
-rw-r--r--src/mpc-hc/PPageFileMediaInfo.cpp246
-rw-r--r--src/mpc-hc/PPageFileMediaInfo.h34
-rw-r--r--src/mpc-hc/PPageFormats.cpp16
-rw-r--r--src/mpc-hc/PPageFullscreen.cpp44
-rw-r--r--src/mpc-hc/PPageFullscreen.h5
-rw-r--r--src/mpc-hc/PPageInternalFilters.cpp111
-rw-r--r--src/mpc-hc/PPageInternalFilters.h7
-rw-r--r--src/mpc-hc/PPageLogo.cpp4
-rw-r--r--src/mpc-hc/PPageLogo.h3
-rw-r--r--src/mpc-hc/PPageMisc.cpp9
-rw-r--r--src/mpc-hc/PPageOutput.cpp234
-rw-r--r--src/mpc-hc/PPageOutput.h11
-rw-r--r--src/mpc-hc/PPagePlayback.cpp55
-rw-r--r--src/mpc-hc/PPagePlayback.h8
-rw-r--r--src/mpc-hc/PPagePlayer.cpp6
-rw-r--r--src/mpc-hc/PPageShaders.cpp3
-rw-r--r--src/mpc-hc/PPageShaders.h3
-rw-r--r--src/mpc-hc/PPageSheet.cpp12
-rw-r--r--src/mpc-hc/PPageSheet.h13
-rw-r--r--src/mpc-hc/PPageSubMisc.cpp278
-rw-r--r--src/mpc-hc/PPageSubMisc.h40
-rw-r--r--src/mpc-hc/PPageSubStyle.cpp11
-rw-r--r--src/mpc-hc/PPageSubtitles.cpp14
-rw-r--r--src/mpc-hc/PPageSubtitles.h3
-rw-r--r--src/mpc-hc/PPageTweaks.cpp26
-rw-r--r--src/mpc-hc/PPageTweaks.h4
-rw-r--r--src/mpc-hc/PPageWebServer.cpp66
-rw-r--r--src/mpc-hc/PPageWebServer.h6
-rw-r--r--src/mpc-hc/PlayerBar.cpp59
-rw-r--r--src/mpc-hc/PlayerBar.h5
-rw-r--r--src/mpc-hc/PlayerCaptureBar.cpp3
-rw-r--r--src/mpc-hc/PlayerCaptureBar.h2
-rw-r--r--src/mpc-hc/PlayerCaptureDialog.cpp87
-rw-r--r--src/mpc-hc/PlayerCaptureDialog.h15
-rw-r--r--src/mpc-hc/PlayerInfoBar.cpp42
-rw-r--r--src/mpc-hc/PlayerInfoBar.h9
-rw-r--r--src/mpc-hc/PlayerListCtrl.cpp14
-rw-r--r--src/mpc-hc/PlayerListCtrl.h3
-rw-r--r--src/mpc-hc/PlayerNavigationBar.cpp10
-rw-r--r--src/mpc-hc/PlayerNavigationBar.h5
-rw-r--r--src/mpc-hc/PlayerNavigationDialog.cpp260
-rw-r--r--src/mpc-hc/PlayerNavigationDialog.h47
-rw-r--r--src/mpc-hc/PlayerPlaylistBar.cpp298
-rw-r--r--src/mpc-hc/PlayerPlaylistBar.h23
-rw-r--r--src/mpc-hc/PlayerSeekBar.cpp30
-rw-r--r--src/mpc-hc/PlayerSeekBar.h6
-rw-r--r--src/mpc-hc/PlayerStatusBar.cpp115
-rw-r--r--src/mpc-hc/PlayerStatusBar.h13
-rw-r--r--src/mpc-hc/PlayerSubresyncBar.cpp387
-rw-r--r--src/mpc-hc/PlayerSubresyncBar.h43
-rw-r--r--src/mpc-hc/PlayerToolBar.cpp132
-rw-r--r--src/mpc-hc/PlayerToolBar.h11
-rw-r--r--src/mpc-hc/Playlist.cpp185
-rw-r--r--src/mpc-hc/Playlist.h41
-rw-r--r--src/mpc-hc/PnSPresetsDlg.cpp3
-rw-r--r--src/mpc-hc/QuicktimeGraph.cpp43
-rw-r--r--src/mpc-hc/QuicktimeGraph.h9
-rw-r--r--src/mpc-hc/RealMediaGraph.cpp46
-rw-r--r--src/mpc-hc/RealMediaGraph.h21
-rw-r--r--src/mpc-hc/RealMediaWindowlessSite.cpp18
-rw-r--r--src/mpc-hc/RealMediaWindowlessSite.h26
-rw-r--r--src/mpc-hc/RegFilterChooserDlg.cpp10
-rw-r--r--src/mpc-hc/RegFilterChooserDlg.h3
-rw-r--r--src/mpc-hc/SVGImage.cpp85
-rw-r--r--src/mpc-hc/SVGImage.h32
-rw-r--r--src/mpc-hc/SaveImageDialog.cpp12
-rw-r--r--src/mpc-hc/SaveSubtitlesFileDialog.cpp8
-rw-r--r--src/mpc-hc/SaveThumbnailsDialog.cpp30
-rw-r--r--src/mpc-hc/SettingsDefines.h38
-rw-r--r--src/mpc-hc/ShockwaveGraph.cpp2
-rw-r--r--src/mpc-hc/SkypeMoodMsgHandler.cpp4
-rw-r--r--src/mpc-hc/StatusLabel.cpp21
-rw-r--r--src/mpc-hc/StatusLabel.h7
-rw-r--r--src/mpc-hc/SubtitleDlDlg.cpp893
-rw-r--r--src/mpc-hc/SubtitleDlDlg.h145
-rw-r--r--src/mpc-hc/SubtitleUpDlg.cpp546
-rw-r--r--src/mpc-hc/SubtitleUpDlg.h90
-rw-r--r--src/mpc-hc/SubtitlesProvider.cpp1139
-rw-r--r--src/mpc-hc/SubtitlesProvider.h143
-rw-r--r--src/mpc-hc/SubtitlesProviders.cpp932
-rw-r--r--src/mpc-hc/SubtitlesProviders.h444
-rw-r--r--src/mpc-hc/SubtitlesProvidersUtils.cpp814
-rw-r--r--src/mpc-hc/SubtitlesProvidersUtils.h97
-rw-r--r--src/mpc-hc/TextPassThruFilter.cpp3
-rw-r--r--src/mpc-hc/Translations.cpp160
-rw-r--r--src/mpc-hc/Translations.h17
-rw-r--r--src/mpc-hc/TunerScanDlg.cpp152
-rw-r--r--src/mpc-hc/TunerScanDlg.h6
-rw-r--r--src/mpc-hc/UpdateChecker.cpp11
-rw-r--r--src/mpc-hc/VMROSD.cpp30
-rw-r--r--src/mpc-hc/VMROSD.h9
-rw-r--r--src/mpc-hc/VersionInfo.cpp20
-rw-r--r--src/mpc-hc/VersionInfo.h29
-rw-r--r--src/mpc-hc/VolumeCtrl.cpp22
-rw-r--r--src/mpc-hc/VolumeCtrl.h3
-rw-r--r--src/mpc-hc/WebClientSocket.cpp223
-rw-r--r--src/mpc-hc/WebClientSocket.h5
-rw-r--r--src/mpc-hc/WebServer.cpp18
-rw-r--r--src/mpc-hc/WinHotkeyCtrl.cpp4
-rw-r--r--src/mpc-hc/mpc-hc.rc841
-rw-r--r--src/mpc-hc/mpc-hc.vcxproj387
-rw-r--r--src/mpc-hc/mpc-hc.vcxproj.filters1048
-rw-r--r--src/mpc-hc/mpciconlib/mpciconlib.cpp6
-rw-r--r--src/mpc-hc/mpciconlib/mpciconlib.vcxproj34
-rw-r--r--src/mpc-hc/mpciconlib/mpciconlib.vcxproj.filters2
-rw-r--r--src/mpc-hc/mpcresources/BuildAll.vcxproj170
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ar.dialogs.po239
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ar.menus.po133
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ar.strings.po1001
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.be.dialogs.po658
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.be.menus.po299
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.be.strings.po1868
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.bn.dialogs.po249
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.bn.menus.po401
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.bn.strings.po1125
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.dialogs.po1795
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.menus.po711
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.strings.po3970
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ca.dialogs.po750
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ca.menus.po353
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ca.strings.po1901
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.cs.dialogs.po228
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.cs.menus.po192
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.cs.strings.po938
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.da.dialogs.po1801
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.da.menus.po712
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.da.strings.po3973
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.de.dialogs.po328
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.de.menus.po182
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.de.strings.po1480
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.dialogs.pot182
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.el.dialogs.po240
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.el.menus.po257
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.el.strings.po986
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.dialogs.po222
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.menus.po128
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.strings.po998
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.es.dialogs.po489
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.es.menus.po221
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.es.strings.po1600
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.eu.dialogs.po226
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.eu.menus.po132
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.eu.strings.po990
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.fi.dialogs.po1798
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.fi.menus.po714
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.fi.strings.po3973
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.fr.dialogs.po225
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.fr.menus.po127
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.fr.strings.po954
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.gl.dialogs.po252
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.gl.menus.po255
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.gl.strings.po1112
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.he.dialogs.po216
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.he.menus.po126
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.he.strings.po948
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.hr.dialogs.po306
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.hr.menus.po178
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.hr.strings.po1695
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.hu.dialogs.po229
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.hu.menus.po129
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.hu.strings.po1004
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.hy.dialogs.po382
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.hy.menus.po138
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.hy.strings.po1200
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.id.dialogs.po1803
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.id.menus.po715
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.id.strings.po3986
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.ar.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.be.strings.po39
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.bn.strings.po24
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.bs_BA.strings.po79
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.ca.strings.po42
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.cs.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.da.strings.po80
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.de.strings.po42
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.el.strings.po19
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.en_GB.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.es.strings.po29
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.eu.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.fi.strings.po79
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.fr.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.gl.strings.po24
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.he.strings.po12
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.hr.strings.po16
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.hu.strings.po18
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.hy.strings.po20
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.id.strings.po81
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.it.strings.po18
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.ja.strings.po26
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.ko.strings.po23
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.lt.strings.po79
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.ms_MY.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.nl.strings.po35
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.pa.strings.po78
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.pl.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.pt_BR.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.ro.strings.po33
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.ru.strings.po37
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.sk.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.sl.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.sr.strings.po80
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.strings.pot8
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.sv.strings.po12
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.th_TH.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.tr.strings.po20
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.tt.strings.po12
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.uk.strings.po14
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.vi.strings.po20
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_CN.strings.po19
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_TW.strings.po21
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.it.dialogs.po224
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.it.menus.po129
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.it.strings.po980
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ja.dialogs.po332
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ja.menus.po166
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ja.strings.po1237
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ko.dialogs.po315
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ko.menus.po127
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ko.strings.po1067
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.lt.dialogs.po1795
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.lt.menus.po712
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.lt.strings.po3975
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.menus.pot96
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.dialogs.po216
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.menus.po124
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.strings.po966
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.nl.dialogs.po390
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.nl.menus.po257
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.nl.strings.po1861
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.pa.dialogs.po1794
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.pa.menus.po710
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.pa.strings.po3970
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.pl.dialogs.po219
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.pl.menus.po127
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.pl.strings.po970
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.dialogs.po252
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.menus.po132
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.strings.po979
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ro.dialogs.po378
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ro.menus.po232
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ro.strings.po1418
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ru.dialogs.po532
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ru.menus.po336
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.ru.strings.po1666
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sk.dialogs.po218
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sk.menus.po126
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sk.strings.po974
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sl.dialogs.po220
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sl.menus.po126
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sl.strings.po959
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sr.dialogs.po1797
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sr.menus.po713
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sr.strings.po3973
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.strings.pot896
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sv.dialogs.po288
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sv.menus.po175
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.sv.strings.po1074
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.dialogs.po220
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.menus.po128
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.strings.po966
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.tr.dialogs.po231
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.tr.menus.po138
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.tr.strings.po983
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.tt.dialogs.po218
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.tt.menus.po126
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.tt.strings.po952
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.uk.dialogs.po232
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.uk.menus.po124
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.uk.strings.po997
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.vi.dialogs.po244
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.vi.menus.po130
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.vi.strings.po1056
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.dialogs.po270
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.menus.po139
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.strings.po1069
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.dialogs.po386
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.menus.po311
-rw-r--r--src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.strings.po1163
-rw-r--r--src/mpc-hc/mpcresources/SyncTranslations.vcxproj34
-rw-r--r--src/mpc-hc/mpcresources/TranslationData.py5
-rw-r--r--src/mpc-hc/mpcresources/TranslationDataIS.py8
-rw-r--r--src/mpc-hc/mpcresources/UpdateIS.py18
-rw-r--r--src/mpc-hc/mpcresources/UpdateISPO.py14
-rw-r--r--src/mpc-hc/mpcresources/UpdateISPOT.py10
-rw-r--r--src/mpc-hc/mpcresources/UpdatePO.py14
-rw-r--r--src/mpc-hc/mpcresources/UpdatePOT.py10
-rw-r--r--src/mpc-hc/mpcresources/UpdateRC.py19
-rw-r--r--src/mpc-hc/mpcresources/cfg/mpc-hc.bn.cfg2
-rw-r--r--src/mpc-hc/mpcresources/cfg/mpc-hc.bs_BA.cfg8
-rw-r--r--src/mpc-hc/mpcresources/cfg/mpc-hc.da.cfg8
-rw-r--r--src/mpc-hc/mpcresources/cfg/mpc-hc.fi.cfg8
-rw-r--r--src/mpc-hc/mpcresources/cfg/mpc-hc.id.cfg8
-rw-r--r--src/mpc-hc/mpcresources/cfg/mpc-hc.lt.cfg8
-rw-r--r--src/mpc-hc/mpcresources/cfg/mpc-hc.pa.cfg9
-rw-r--r--src/mpc-hc/mpcresources/cfg/mpc-hc.sr.cfg8
-rwxr-xr-xsrc/mpc-hc/mpcresources/common_python.bat18
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.ar.rcbin344990 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.be.rcbin355994 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.bn.rcbin370902 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.ca.rcbin366890 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.cs.rcbin358858 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.de.rcbin364782 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.el.rcbin373034 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.en_GB.rcbin351088 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.es.rcbin370502 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.eu.rcbin361722 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.fr.rcbin376868 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.gl.rcbin368342 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.he.rcbin344946 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.hr.rcbin358756 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.hu.rcbin365412 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.hy.rcbin356228 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.it.rcbin361914 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.ja.rcbin322840 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.ko.rcbin326558 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.ms_MY.rcbin356900 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.nl.rcbin356984 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.pl.rcbin370072 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.pt_BR.rcbin364992 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.ro.rcbin370066 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.ru.rcbin360776 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.sk.rcbin364138 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.sl.rcbin360384 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.sv.rcbin357158 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.th_TH.rcbin348036 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.tr.rcbin357040 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.tt.rcbin358956 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.uk.rcbin362404 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.vi.rcbin354542 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.zh_CN.rcbin306808 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpc-hc.zh_TW.rcbin309980 -> 0 bytes
-rw-r--r--src/mpc-hc/mpcresources/mpcresources.vcxproj96
-rw-r--r--src/mpc-hc/mpcresources/mpcresources.vcxproj.filters23
-rwxr-xr-xsrc/mpc-hc/mpcresources/sync.bat30
-rw-r--r--src/mpc-hc/mpcresources/sync.py66
-rwxr-xr-xsrc/mpc-hc/mpcresources/syncIS.bat16
-rw-r--r--src/mpc-hc/mpcresources/syncIS.py62
-rw-r--r--src/mpc-hc/mplayerc.cpp188
-rw-r--r--src/mpc-hc/mplayerc.h30
-rw-r--r--src/mpc-hc/res/logo.0.pngbin82 -> 67 bytes
-rw-r--r--src/mpc-hc/res/logo.1.pngbin9547 -> 9538 bytes
-rw-r--r--src/mpc-hc/res/logo.1_x64.pngbin10204 -> 10161 bytes
-rw-r--r--src/mpc-hc/res/logo.2.pngbin50308 -> 50289 bytes
-rw-r--r--src/mpc-hc/res/logo.2_x64.pngbin51225 -> 51149 bytes
-rw-r--r--src/mpc-hc/res/logo.3.pngbin7823 -> 7760 bytes
-rw-r--r--src/mpc-hc/res/logo.3_x64.pngbin8699 -> 8632 bytes
-rw-r--r--src/mpc-hc/res/mpc-hc.exe.manifest.conf3
-rw-r--r--src/mpc-hc/res/mpc-hc.rc215
-rw-r--r--src/mpc-hc/res/subtitles/favicon_napisy24.icobin0 -> 1150 bytes
-rw-r--r--src/mpc-hc/res/subtitles/favicon_opensubtitles.icobin0 -> 1150 bytes
-rw-r--r--src/mpc-hc/res/subtitles/favicon_podnapisi.icobin0 -> 1150 bytes
-rw-r--r--src/mpc-hc/res/subtitles/favicon_subdb.icobin0 -> 1150 bytes
-rw-r--r--src/mpc-hc/res/subtitles/favicon_titlovi.icobin0 -> 1150 bytes
-rw-r--r--src/mpc-hc/res/subtitles/favicon_tvsubtitles.icobin0 -> 1150 bytes
-rw-r--r--src/mpc-hc/res/subtitles/favicon_ysubs.icobin0 -> 1150 bytes
-rw-r--r--src/mpc-hc/res/tickcross.pngbin1024 -> 949 bytes
-rw-r--r--src/mpc-hc/res/toolbar-unminified.svg433
-rw-r--r--src/mpc-hc/res/toolbar.svg14
-rw-r--r--src/mpc-hc/res/toolbarw7.pngbin811 -> 764 bytes
-rw-r--r--src/mpc-hc/res/web/404.html5
-rw-r--r--src/mpc-hc/res/web/browser.html5
-rw-r--r--src/mpc-hc/res/web/controls.html5
-rw-r--r--src/mpc-hc/res/web/default.css58
-rw-r--r--src/mpc-hc/res/web/img/1pix.pngbin95 -> 68 bytes
-rw-r--r--src/mpc-hc/res/web/img/controlback.pngbin87 -> 74 bytes
-rw-r--r--src/mpc-hc/res/web/img/controlbuttonplay.pngbin120 -> 118 bytes
-rw-r--r--src/mpc-hc/res/web/img/controlbuttonskipback.pngbin119 -> 114 bytes
-rw-r--r--src/mpc-hc/res/web/img/controlbuttonskipforward.pngbin128 -> 124 bytes
-rw-r--r--src/mpc-hc/res/web/img/controlbuttonstep.pngbin122 -> 121 bytes
-rw-r--r--src/mpc-hc/res/web/img/controlbuttonstop.pngbin109 -> 106 bytes
-rw-r--r--src/mpc-hc/res/web/img/controlvolumebar.pngbin146 -> 145 bytes
-rw-r--r--src/mpc-hc/res/web/img/controlvolumegrip.pngbin106 -> 93 bytes
-rw-r--r--src/mpc-hc/res/web/img/controlvolumeoff.pngbin276 -> 272 bytes
-rw-r--r--src/mpc-hc/res/web/img/headerclose.pngbin1347 -> 1320 bytes
-rw-r--r--src/mpc-hc/res/web/img/headericon.pngbin756 -> 682 bytes
-rw-r--r--src/mpc-hc/res/web/img/leftbottomside.pngbin122 -> 106 bytes
-rw-r--r--src/mpc-hc/res/web/img/leftside.pngbin91 -> 78 bytes
-rw-r--r--src/mpc-hc/res/web/img/seekbargrip.pngbin128 -> 121 bytes
-rw-r--r--src/mpc-hc/res/web/img/seekbarleft.pngbin94 -> 85 bytes
-rw-r--r--src/mpc-hc/res/web/img/seekbarright.pngbin90 -> 81 bytes
-rw-r--r--src/mpc-hc/res/web/img/slidergrip.pngbin157 -> 154 bytes
-rw-r--r--src/mpc-hc/res/web/img/vbs.pngbin105 -> 91 bytes
-rw-r--r--src/mpc-hc/res/web/index.html5
-rw-r--r--src/mpc-hc/res/web/info.html7
-rw-r--r--src/mpc-hc/res/web/javascript.js11
-rw-r--r--src/mpc-hc/res/web/player.html9
-rw-r--r--src/mpc-hc/res/web/variables.html8
-rw-r--r--src/mpc-hc/resource.h233
-rw-r--r--src/mpc-hc/stdafx.h42
-rw-r--r--src/platform.props6
-rw-r--r--src/thirdparty/AsyncReader/AsyncReader.vcxproj57
-rw-r--r--src/thirdparty/AsyncReader/AsyncReader.vcxproj.filters2
-rw-r--r--src/thirdparty/AsyncReader/asyncio.cpp12
-rw-r--r--src/thirdparty/AsyncReader/asyncrdr.cpp5
-rw-r--r--src/thirdparty/BaseClasses/BaseClasses.vcxproj69
-rw-r--r--src/thirdparty/BaseClasses/BaseClasses.vcxproj.filters2
-rw-r--r--src/thirdparty/BaseClasses/amfilter.cpp14
-rw-r--r--src/thirdparty/BaseClasses/ctlutil.cpp3
-rw-r--r--src/thirdparty/BaseClasses/pullpin.cpp6
-rw-r--r--src/thirdparty/BaseClasses/refclock.cpp5
-rw-r--r--src/thirdparty/BaseClasses/schedule.h14
-rw-r--r--src/thirdparty/BaseClasses/strmctl.cpp3
-rw-r--r--src/thirdparty/BaseClasses/vtrans.cpp1
-rw-r--r--src/thirdparty/BaseClasses/vtrans.h2
-rw-r--r--src/thirdparty/BaseClasses/winutil.cpp11
-rw-r--r--src/thirdparty/BaseClasses/winutil.h2
-rw-r--r--src/thirdparty/BaseClasses/wxdebug.cpp2
-rw-r--r--src/thirdparty/BaseClasses/wxlist.h6
-rw-r--r--src/thirdparty/BaseClasses/wxutil.cpp6
-rw-r--r--src/thirdparty/BaseClasses/wxutil.h2
-rw-r--r--src/thirdparty/DoctorDump/CrashRpt.h670
-rw-r--r--src/thirdparty/DoctorDump/DoctorDump.filters17
-rw-r--r--src/thirdparty/DoctorDump/DoctorDump.vcxproj58
-rw-r--r--src/thirdparty/DoctorDump/deploy.bat49
-rw-r--r--src/thirdparty/LAVFilters/LAVFilters.vcxproj49
-rw-r--r--src/thirdparty/LAVFilters/LAVFilters.vcxproj.filters2
-rwxr-xr-xsrc/thirdparty/LAVFilters/build_ffmpeg.sh103
-rwxr-xr-xsrc/thirdparty/LAVFilters/build_lavfilters.bat125
m---------src/thirdparty/LAVFilters/src0
-rw-r--r--src/thirdparty/LCDUI/LCDConnection.cpp3
-rw-r--r--src/thirdparty/LCDUI/LCDStreamingText.h1
-rw-r--r--src/thirdparty/LCDUI/LCDUI.vcxproj77
-rw-r--r--src/thirdparty/LCDUI/LCDUI.vcxproj.filters2
-rw-r--r--src/thirdparty/MediaInfo/License.html80
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_7z.cpp78
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_7z.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Ace.cpp79
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Ace.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Bzip2.cpp78
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Bzip2.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Elf.cpp234
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Elf.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Gzip.cpp84
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Gzip.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Iso9660.cpp109
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Iso9660.h44
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Mz.cpp165
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Mz.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Rar.cpp322
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Rar.h67
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Tar.cpp96
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Tar.h38
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Zip.cpp477
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Archive/File_Zip.h59
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac.cpp768
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac.h371
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio.cpp1432
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio.h2837
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr.cpp753
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr.h715
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr_Ps.cpp97
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr_Ps.h136
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_Main.cpp1143
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_Others.cpp459
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ac3.cpp2483
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ac3.h157
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Adpcm.cpp76
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Adpcm.h42
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Als.cpp144
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Als.h54
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amr.cpp262
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amr.h64
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amv.cpp46
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amv.h38
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ape.cpp210
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ape.h54
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Au.cpp176
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Au.h39
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Celt.cpp151
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Celt.h51
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_ChannelGrouping.cpp389
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_ChannelGrouping.h133
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_DolbyE.cpp969
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_DolbyE.h72
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Dts.cpp1407
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Dts.h108
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_ExtendedModule.cpp107
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_ExtendedModule.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Flac.cpp252
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Flac.h83
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_ImpulseTracker.cpp127
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_ImpulseTracker.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_La.cpp147
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_La.h55
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Midi.cpp46
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Midi.h38
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Module.cpp103
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Module.h42
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpc.cpp213
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpc.h50
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_MpcSv8.cpp246
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_MpcSv8.h65
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpega.cpp1658
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpega.h113
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_OpenMG.cpp233
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_OpenMG.h50
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Opus.cpp187
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Opus.h51
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm.cpp417
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm.h66
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_M2ts.cpp184
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_M2ts.h50
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_Vob.cpp221
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_Vob.h50
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ps2Audio.cpp122
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ps2Audio.h39
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Rkau.cpp144
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Rkau.h55
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_ScreamTracker3.cpp125
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_ScreamTracker3.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0302.cpp307
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0302.h58
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0331.cpp227
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0331.h52
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0337.cpp1324
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0337.h88
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Speex.cpp154
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Speex.h49
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tak.cpp303
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tak.h66
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tta.cpp134
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tta.h53
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_TwinVQ.cpp203
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_TwinVQ.h59
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Vorbis.cpp250
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Vorbis.h43
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Wvpk.cpp723
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Audio/File_Wvpk.h85
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate_MpegTs.cpp481
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate_MpegTs.h143
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Base.cpp40
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Base.h36
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Writer.cpp156
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Writer.h65
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Export/Export_EbuCore.cpp1192
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Export/Export_EbuCore.h35
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Export/Export_Mpeg7.cpp1548
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Export/Export_Mpeg7.h35
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Export/Export_PBCore.cpp336
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Export/Export_PBCore.h35
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Export/Export_reVTMD.cpp9
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Export/Export_reVTMD.h1
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File_Dummy.cpp313
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File_Dummy.h49
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File_Other.cpp182
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File_Other.h40
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File_Unknown.cpp53
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File_Unknown.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Analyse_Automatic.h1408
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Analyze.cpp3828
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Analyze.h1514
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Buffer.cpp2500
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Buffer_MinimizeSize.cpp1704
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Analyze_MinimizeSize.h1342
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Streams.cpp2739
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Streams_Finish.cpp858
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Base.cpp214
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Base.h119
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Duplicate.cpp89
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__Duplicate.h48
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__MultipleParsing.cpp837
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/File__MultipleParsing.h54
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_ArriRaw.cpp143
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_ArriRaw.h57
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Bmp.cpp264
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Bmp.h46
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Dds.cpp184
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Dds.h66
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Dpx.cpp848
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Dpx.h82
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Exr.cpp339
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Exr.h77
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Gif.cpp105
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Gif.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Ico.cpp149
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Ico.h65
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Jpeg.cpp1149
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Jpeg.h172
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Pcx.cpp136
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Pcx.h44
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Png.cpp313
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Png.h70
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Psd.cpp117
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Psd.h44
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Rle.cpp75
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Rle.h44
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Tga.cpp306
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Tga.h69
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Tiff.cpp565
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Image/File_Tiff.h70
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo.cpp229
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo.h252
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfoList.cpp246
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfoList.h226
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfoList_Internal.cpp468
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfoList_Internal.h80
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config.cpp2321
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config.h350
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_Automatic.cpp5824
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_MediaInfo.cpp2554
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_MediaInfo.h522
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_PerPackage.cpp135
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_PerPackage.h88
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Const.h132
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Events.h752
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Events_Internal.h119
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_File.cpp1100
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Inform.cpp630
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal.cpp1361
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal.h184
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal_Const.h137
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Aaf.cpp656
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Aaf.h164
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ancillary.cpp935
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ancillary.h101
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Bdmv.cpp1631
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Bdmv.h83
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Cdxa.cpp308
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Cdxa.h62
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DashMpd.cpp694
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DashMpd.h61
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpAm.cpp269
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpAm.h58
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpCpl.cpp416
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpCpl.h60
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpPkl.cpp254
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpPkl.h60
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dpg.cpp190
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dpg.h61
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif.cpp1853
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif.h351
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif_Analysis.cpp1616
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dvdv.cpp1579
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dvdv.h117
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dxw.cpp210
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dxw.h58
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Flv.cpp1700
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Flv.h116
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf.cpp1665
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf.h177
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf_TimeCode.cpp353
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf_TimeCode.h61
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_HdsF4m.cpp160
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_HdsF4m.h61
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Hls.cpp238
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Hls.h58
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi.cpp907
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi.h91
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi_Creation.cpp565
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi_Creation.h125
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ism.cpp199
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ism.h58
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ivf.cpp132
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ivf.h45
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Lxf.cpp1860
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Lxf.h163
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mk.cpp3597
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mk.h347
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4.cpp2150
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4.h522
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Descriptors.cpp1001
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Descriptors.h134
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Elements.cpp7086
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_TimeCode.cpp109
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_TimeCode.h47
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegPs.cpp4858
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegPs.h306
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs.cpp3321
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs.h167
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs_Duplicate.cpp348
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.cpp3454
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.h858
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.cpp2625
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.h169
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mxf.cpp12966
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mxf.h970
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Nut.cpp289
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Nut.h48
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg.cpp393
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg.h98
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg_SubElement.cpp900
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg_SubElement.h92
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_P2_Clip.cpp465
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_P2_Clip.h58
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Pmp.cpp137
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Pmp.h44
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ptx.cpp640
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ptx.h61
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff.cpp1023
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff.h333
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff_Elements.cpp3786
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Rm.cpp805
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Rm.h68
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_SequenceInfo.cpp246
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_SequenceInfo.h58
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Skm.cpp188
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Skm.h72
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Swf.cpp694
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Swf.h119
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Umf.cpp240
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Umf.h51
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm.cpp246
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm.h177
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm_Elements.cpp1748
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Xdcam_Clip.cpp161
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Xdcam_Clip.h39
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.cpp1826
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.h184
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/PreComp.cpp15
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/PreComp.h28
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_Directory.cpp231
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_Directory.h57
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_File.cpp785
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_File.h86
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader__Base.h45
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl.cpp863
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl.h52
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl_Include.h975
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libmms.cpp162
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libmms.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Setup.h804
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_ApeTag.cpp201
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_ApeTag.h49
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3.cpp130
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3.h38
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3v2.cpp1414
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3v2.h237
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3.cpp86
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3.h45
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3v2.cpp224
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3v2.h62
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_VorbisCom.cpp344
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_VorbisCom.h64
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Xmp.cpp118
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File_Xmp.h38
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File__Tags.cpp655
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Tag/File__Tags.h97
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_AribStdB24B37.cpp1483
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_AribStdB24B37.h174
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Cdp.cpp589
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Cdp.h102
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Cmml.cpp111
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Cmml.h43
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_DtvccTransport.cpp375
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_DtvccTransport.h83
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_DvbSubtitle.cpp468
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_DvbSubtitle.h105
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia608.cpp1102
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia608.h143
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia708.cpp1415
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia708.h182
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Kate.cpp147
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Kate.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_N19.cpp442
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_N19.h59
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_OtherText.cpp182
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_OtherText.h37
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Pdf.cpp683
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Pdf.h117
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Pgs.cpp64
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Pgs.h41
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Scc.cpp275
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Scc.h60
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Scte20.cpp278
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Scte20.h82
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_SubRip.cpp256
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_SubRip.h61
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Teletext.cpp88
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Teletext.h46
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_TimedText.cpp108
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_TimedText.h48
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Ttml.cpp239
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Text/File_Ttml.h60
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/TimeCode.cpp229
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/TimeCode.h99
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_AfdBarData.cpp355
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_AfdBarData.h91
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Aic.cpp112
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Aic.h47
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc.cpp3840
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc.h564
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc_Duplicate.cpp263
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_AvsV.cpp827
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_AvsV.h111
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Canopus.cpp179
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Canopus.h46
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Dirac.cpp889
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Dirac.h103
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Ffv1.cpp491
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Ffv1.h109
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Flic.cpp137
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Flic.h38
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Fraps.cpp138
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Fraps.h50
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_H263.cpp421
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_H263.h72
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Hevc.cpp2702
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Hevc.h446
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_HuffYuv.cpp309
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_HuffYuv.h53
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Lagarith.cpp93
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Lagarith.h45
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpeg4v.cpp1864
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpeg4v.h193
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpegv.cpp4068
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpegv.h362
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_ProRes.cpp246
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_ProRes.h45
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Theora.cpp134
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Theora.h43
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc1.cpp1222
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc1.h162
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc3.cpp551
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc3.h81
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Vp8.cpp114
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Vp8.h53
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Y4m.cpp229
-rw-r--r--src/thirdparty/MediaInfo/MediaInfo/Video/File_Y4m.h51
-rw-r--r--src/thirdparty/MediaInfo/MediaInfoLib.vcxproj830
-rw-r--r--src/thirdparty/MediaInfo/MediaInfoLib.vcxproj.filters866
-rw-r--r--src/thirdparty/MediaInfo/ThirdParty/base64/base64.h158
-rw-r--r--src/thirdparty/MediaInfo/ThirdParty/md5/md5.c253
-rw-r--r--src/thirdparty/MediaInfo/ThirdParty/md5/md5.h21
-rw-r--r--src/thirdparty/MediaInfo/ThirdParty/tinyxml2/tinyxml2.cpp2212
-rw-r--r--src/thirdparty/MediaInfo/ThirdParty/tinyxml2/tinyxml2.h2076
m---------src/thirdparty/MediaInfo/library0
-rw-r--r--src/thirdparty/RARFileSource/RARFileSource.vcxproj243
-rw-r--r--src/thirdparty/RARFileSource/RARFileSource.vcxproj.filters2
-rw-r--r--src/thirdparty/ResizableLib/ResizableLayout.h5
-rw-r--r--src/thirdparty/ResizableLib/ResizableLib.vcxproj57
-rw-r--r--src/thirdparty/ResizableLib/ResizableLib.vcxproj.filters2
-rw-r--r--src/thirdparty/SoundTouch/SoundTouch.vcxproj80
-rw-r--r--src/thirdparty/SoundTouch/include/BPMDetect.h164
-rw-r--r--src/thirdparty/SoundTouch/include/FIFOSampleBuffer.h184
-rw-r--r--src/thirdparty/SoundTouch/include/FIFOSamplePipe.h234
-rw-r--r--src/thirdparty/SoundTouch/include/STTypes.h202
-rw-r--r--src/thirdparty/SoundTouch/include/SoundTouch.h277
m---------src/thirdparty/SoundTouch/soundtouch0
-rw-r--r--src/thirdparty/SoundTouch/source/AAFilter.cpp236
-rw-r--r--src/thirdparty/SoundTouch/source/AAFilter.h100
-rw-r--r--src/thirdparty/SoundTouch/source/BPMDetect.cpp370
-rw-r--r--src/thirdparty/SoundTouch/source/FIFOSampleBuffer.cpp274
-rw-r--r--src/thirdparty/SoundTouch/source/FIRFilter.cpp322
-rw-r--r--src/thirdparty/SoundTouch/source/FIRFilter.h146
-rw-r--r--src/thirdparty/SoundTouch/source/InterpolateCubic.cpp200
-rw-r--r--src/thirdparty/SoundTouch/source/InterpolateCubic.h67
-rw-r--r--src/thirdparty/SoundTouch/source/InterpolateLinear.cpp299
-rw-r--r--src/thirdparty/SoundTouch/source/InterpolateLinear.h92
-rw-r--r--src/thirdparty/SoundTouch/source/InterpolateShannon.cpp186
-rw-r--r--src/thirdparty/SoundTouch/source/InterpolateShannon.h72
-rw-r--r--src/thirdparty/SoundTouch/source/PeakFinder.cpp276
-rw-r--r--src/thirdparty/SoundTouch/source/PeakFinder.h97
-rw-r--r--src/thirdparty/SoundTouch/source/RateTransposer.cpp302
-rw-r--r--src/thirdparty/SoundTouch/source/RateTransposer.h179
-rw-r--r--src/thirdparty/SoundTouch/source/SoundTouch.cpp502
-rw-r--r--src/thirdparty/SoundTouch/source/SoundTouch.vcxproj143
-rw-r--r--src/thirdparty/SoundTouch/source/SoundTouch.vcxproj.filters104
-rw-r--r--src/thirdparty/SoundTouch/source/TDStretch.cpp947
-rw-r--r--src/thirdparty/SoundTouch/source/TDStretch.h272
-rw-r--r--src/thirdparty/SoundTouch/source/cpu_detect.h62
-rw-r--r--src/thirdparty/SoundTouch/source/cpu_detect_x86.cpp138
-rw-r--r--src/thirdparty/SoundTouch/source/mmx_optimized.cpp384
-rw-r--r--src/thirdparty/SoundTouch/source/sse_optimized.cpp370
-rw-r--r--src/thirdparty/TreePropSheet/PropPageFrameDefault.cpp4
-rw-r--r--src/thirdparty/TreePropSheet/TreePropSheet.cpp27
-rw-r--r--src/thirdparty/TreePropSheet/TreePropSheet.vcxproj57
-rw-r--r--src/thirdparty/TreePropSheet/TreePropSheet.vcxproj.filters2
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj58
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj.filters2
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp2
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp2
-rw-r--r--src/thirdparty/VirtualDub/h/vd2/Kasumi/pixmaputils.h2
-rw-r--r--src/thirdparty/VirtualDub/h/vd2/system/VDString.h4
-rw-r--r--src/thirdparty/VirtualDub/system/system.vcxproj70
-rw-r--r--src/thirdparty/VirtualDub/system/system.vcxproj.filters2
m---------src/thirdparty/XmlRpc4Win0
-rw-r--r--src/thirdparty/ZenLib/ZenLib.vcxproj176
-rw-r--r--src/thirdparty/ZenLib/ZenLib.vcxproj.filters113
-rw-r--r--src/thirdparty/ZenLib/ZenLib/BitStream.h352
-rw-r--r--src/thirdparty/ZenLib/ZenLib/BitStream_Fast.h420
-rw-r--r--src/thirdparty/ZenLib/ZenLib/BitStream_LE.h133
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Conf.cpp43
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Conf.h346
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Conf_Internal.h24
-rw-r--r--src/thirdparty/ZenLib/ZenLib/CriticalSection.cpp187
-rw-r--r--src/thirdparty/ZenLib/ZenLib/CriticalSection.h70
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Dir.cpp269
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Dir.h55
-rw-r--r--src/thirdparty/ZenLib/ZenLib/File.cpp886
-rw-r--r--src/thirdparty/ZenLib/ZenLib/File.h98
-rw-r--r--src/thirdparty/ZenLib/ZenLib/FileName.cpp216
-rw-r--r--src/thirdparty/ZenLib/ZenLib/FileName.h66
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Handler.cpp53
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Handler.h72
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Request.cpp63
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Request.h56
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Cookies.cpp104
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Cookies.h73
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Handler.cpp54
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Handler.h69
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Request.cpp245
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Request.h63
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Utils.cpp241
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Utils.h68
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client.cpp123
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client.h49
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClient.c3646
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClient.h306
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientAuth.c664
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientAuth.h89
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientCommon.h120
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientString.c422
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientString.h23
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientWrapper.c348
-rw-r--r--src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientWrapper.h111
-rw-r--r--src/thirdparty/ZenLib/ZenLib/InfoMap.cpp159
-rw-r--r--src/thirdparty/ZenLib/ZenLib/InfoMap.h57
-rw-r--r--src/thirdparty/ZenLib/ZenLib/MemoryDebug.cpp186
-rw-r--r--src/thirdparty/ZenLib/ZenLib/MemoryDebug.h115
-rw-r--r--src/thirdparty/ZenLib/ZenLib/MemoryUtils.h262
-rw-r--r--src/thirdparty/ZenLib/ZenLib/OS_Utils.cpp183
-rw-r--r--src/thirdparty/ZenLib/ZenLib/OS_Utils.h37
-rw-r--r--src/thirdparty/ZenLib/ZenLib/PreComp.cpp9
-rw-r--r--src/thirdparty/ZenLib/ZenLib/PreComp.h34
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Thread.cpp637
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Thread.h91
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Trace.h64
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Translation.cpp151
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Translation.h59
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Utils.cpp1024
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Utils.h305
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Ztring.cpp2411
-rw-r--r--src/thirdparty/ZenLib/ZenLib/Ztring.h369
-rw-r--r--src/thirdparty/ZenLib/ZenLib/ZtringList.cpp357
-rw-r--r--src/thirdparty/ZenLib/ZenLib/ZtringList.h89
-rw-r--r--src/thirdparty/ZenLib/ZenLib/ZtringListList.cpp582
-rw-r--r--src/thirdparty/ZenLib/ZenLib/ZtringListList.h132
-rw-r--r--src/thirdparty/ZenLib/ZenLib/ZtringListListF.cpp370
-rw-r--r--src/thirdparty/ZenLib/ZenLib/ZtringListListF.h77
-rw-r--r--src/thirdparty/ZenLib/ZenLib/int128s.cpp408
-rw-r--r--src/thirdparty/ZenLib/ZenLib/int128s.h191
-rw-r--r--src/thirdparty/ZenLib/ZenLib/int128u.cpp390
-rw-r--r--src/thirdparty/ZenLib/ZenLib/int128u.h186
m---------src/thirdparty/ZenLib/library0
-rw-r--r--src/thirdparty/bs2b/bs2b.vcxproj58
m---------src/thirdparty/bs2b/libbs2b0
-rw-r--r--src/thirdparty/lcms2/lcms2.vcxproj63
-rw-r--r--src/thirdparty/lcms2/lcms2.vcxproj.filters5
m---------src/thirdparty/lcms2/library0
-rw-r--r--src/thirdparty/mhook/disasm-lib/cpu.c93
-rw-r--r--src/thirdparty/mhook/disasm-lib/cpu.h277
-rw-r--r--src/thirdparty/mhook/disasm-lib/disasm.c122
-rw-r--r--src/thirdparty/mhook/disasm-lib/disasm.h578
-rw-r--r--src/thirdparty/mhook/disasm-lib/disasm_x86.c4662
-rw-r--r--src/thirdparty/mhook/disasm-lib/disasm_x86.h837
-rw-r--r--src/thirdparty/mhook/disasm-lib/disasm_x86_tables.h3654
-rw-r--r--src/thirdparty/mhook/disasm-lib/misc.c185
-rw-r--r--src/thirdparty/mhook/disasm-lib/misc.h52
-rw-r--r--src/thirdparty/mhook/mhook-lib/mhook.cpp813
-rw-r--r--src/thirdparty/mhook/mhook-lib/mhook.h31
-rw-r--r--src/thirdparty/mhook/mhook.vcxproj114
-rw-r--r--src/thirdparty/mhook/mhook.vcxproj.filters50
m---------src/thirdparty/minhook/minhook0
-rw-r--r--src/thirdparty/minhook/minhook.vcxproj73
-rw-r--r--src/thirdparty/minhook/minhook.vcxproj.filters55
m---------src/thirdparty/nanosvg0
m---------src/thirdparty/rapidjson0
m---------src/thirdparty/sanear/sanear0
-rw-r--r--src/thirdparty/sanear/sanear-platform.props4
-rw-r--r--src/thirdparty/sanear/sanear.props9
-rw-r--r--src/thirdparty/sizecbar/scbarg.cpp24
-rw-r--r--src/thirdparty/sizecbar/sizecbar.cpp41
-rw-r--r--src/thirdparty/sizecbar/sizecbar.vcxproj57
-rw-r--r--src/thirdparty/sizecbar/sizecbar.vcxproj.filters2
m---------src/thirdparty/soxr/libsoxr0
-rw-r--r--src/thirdparty/soxr/soxr-config.h13
-rw-r--r--src/thirdparty/soxr/soxr.vcxproj69
-rw-r--r--src/thirdparty/soxr/soxr.vcxproj.filters53
m---------src/thirdparty/tinyxml2/library0
-rw-r--r--src/thirdparty/tinyxml2/tinyxml2.vcxproj57
-rw-r--r--src/thirdparty/tinyxml2/tinyxml2.vcxproj.filters21
-rw-r--r--src/thirdparty/unrar/arccmt.cpp12
-rw-r--r--src/thirdparty/unrar/archive.cpp23
-rw-r--r--src/thirdparty/unrar/archive.hpp15
-rw-r--r--src/thirdparty/unrar/arcread.cpp120
-rw-r--r--src/thirdparty/unrar/array.hpp32
-rw-r--r--src/thirdparty/unrar/blake2s.cpp8
-rw-r--r--src/thirdparty/unrar/blake2s_sse.cpp2
-rw-r--r--src/thirdparty/unrar/cmddata.cpp209
-rw-r--r--src/thirdparty/unrar/cmddata.hpp9
-rw-r--r--src/thirdparty/unrar/consio.cpp99
-rw-r--r--src/thirdparty/unrar/consio.hpp2
-rw-r--r--src/thirdparty/unrar/crc.cpp22
-rw-r--r--src/thirdparty/unrar/crypt.cpp42
-rw-r--r--src/thirdparty/unrar/crypt.hpp39
-rw-r--r--src/thirdparty/unrar/crypt1.cpp9
-rw-r--r--src/thirdparty/unrar/crypt2.cpp104
-rw-r--r--src/thirdparty/unrar/crypt3.cpp57
-rw-r--r--src/thirdparty/unrar/crypt5.cpp120
-rw-r--r--src/thirdparty/unrar/dll.cpp24
-rw-r--r--src/thirdparty/unrar/dll.hpp24
-rw-r--r--src/thirdparty/unrar/dll.rc12
-rw-r--r--src/thirdparty/unrar/errhnd.cpp37
-rw-r--r--src/thirdparty/unrar/errhnd.hpp7
-rw-r--r--src/thirdparty/unrar/extinfo.cpp84
-rw-r--r--src/thirdparty/unrar/extinfo.hpp3
-rw-r--r--src/thirdparty/unrar/extract.cpp2241
-rw-r--r--src/thirdparty/unrar/extract.hpp6
-rw-r--r--src/thirdparty/unrar/filcreat.cpp22
-rw-r--r--src/thirdparty/unrar/filcreat.hpp2
-rw-r--r--src/thirdparty/unrar/file.cpp126
-rw-r--r--src/thirdparty/unrar/file.hpp18
-rw-r--r--src/thirdparty/unrar/filefn.cpp102
-rw-r--r--src/thirdparty/unrar/filefn.hpp8
-rw-r--r--src/thirdparty/unrar/filestr.cpp230
-rw-r--r--src/thirdparty/unrar/find.cpp31
-rw-r--r--src/thirdparty/unrar/getbits.cpp2
-rw-r--r--src/thirdparty/unrar/getbits.hpp6
-rw-r--r--src/thirdparty/unrar/hash.cpp21
-rw-r--r--src/thirdparty/unrar/hash.hpp2
-rw-r--r--src/thirdparty/unrar/headers.cpp3
-rw-r--r--src/thirdparty/unrar/headers.hpp4
-rw-r--r--src/thirdparty/unrar/headers5.hpp1
-rw-r--r--src/thirdparty/unrar/isnt.cpp2
-rw-r--r--src/thirdparty/unrar/isnt.hpp4
-rw-r--r--src/thirdparty/unrar/list.cpp69
-rw-r--r--src/thirdparty/unrar/loclang.hpp36
-rw-r--r--src/thirdparty/unrar/match.cpp10
-rw-r--r--src/thirdparty/unrar/options.hpp15
-rw-r--r--src/thirdparty/unrar/os.hpp29
-rw-r--r--src/thirdparty/unrar/pathfn.cpp102
-rw-r--r--src/thirdparty/unrar/pathfn.hpp10
-rw-r--r--src/thirdparty/unrar/rar.cpp14
-rw-r--r--src/thirdparty/unrar/rar.hpp12
-rw-r--r--src/thirdparty/unrar/rardefs.hpp8
-rw-r--r--src/thirdparty/unrar/raros.hpp2
-rw-r--r--src/thirdparty/unrar/rartypes.hpp32
-rw-r--r--src/thirdparty/unrar/rarvm.cpp943
-rw-r--r--src/thirdparty/unrar/rarvm.hpp77
-rw-r--r--src/thirdparty/unrar/rarvmtbl.cpp53
-rw-r--r--src/thirdparty/unrar/rawint.hpp122
-rw-r--r--src/thirdparty/unrar/rawread.cpp4
-rw-r--r--src/thirdparty/unrar/rawread.hpp64
-rw-r--r--src/thirdparty/unrar/rdwrfn.cpp23
-rw-r--r--src/thirdparty/unrar/rdwrfn.hpp11
-rw-r--r--src/thirdparty/unrar/recvol.cpp73
-rw-r--r--src/thirdparty/unrar/recvol.hpp7
-rw-r--r--src/thirdparty/unrar/recvol3.cpp101
-rw-r--r--src/thirdparty/unrar/recvol5.cpp79
-rw-r--r--src/thirdparty/unrar/rijndael.cpp103
-rw-r--r--src/thirdparty/unrar/rs16.cpp3
-rw-r--r--src/thirdparty/unrar/rs16.hpp2
-rw-r--r--src/thirdparty/unrar/scantree.cpp169
-rw-r--r--src/thirdparty/unrar/scantree.hpp23
-rw-r--r--src/thirdparty/unrar/secpassword.cpp26
-rw-r--r--src/thirdparty/unrar/secpassword.hpp6
-rw-r--r--src/thirdparty/unrar/sha1.cpp357
-rw-r--r--src/thirdparty/unrar/sha1.hpp12
-rw-r--r--src/thirdparty/unrar/sha256.cpp89
-rw-r--r--src/thirdparty/unrar/sha256.hpp5
-rw-r--r--src/thirdparty/unrar/smallfn.cpp10
-rw-r--r--src/thirdparty/unrar/strfn.cpp116
-rw-r--r--src/thirdparty/unrar/strfn.hpp11
-rw-r--r--src/thirdparty/unrar/suballoc.cpp2
-rw-r--r--src/thirdparty/unrar/suballoc.hpp1
-rw-r--r--src/thirdparty/unrar/system.cpp72
-rw-r--r--src/thirdparty/unrar/system.hpp7
-rw-r--r--src/thirdparty/unrar/threadmisc.cpp28
-rw-r--r--src/thirdparty/unrar/threadpool.hpp4
-rw-r--r--src/thirdparty/unrar/timefn.cpp158
-rw-r--r--src/thirdparty/unrar/timefn.hpp37
-rw-r--r--src/thirdparty/unrar/ui.cpp3
-rw-r--r--src/thirdparty/unrar/ui.hpp22
-rw-r--r--src/thirdparty/unrar/uicommon.cpp7
-rw-r--r--src/thirdparty/unrar/uiconsole.cpp38
-rw-r--r--src/thirdparty/unrar/ulinks.cpp38
-rw-r--r--src/thirdparty/unrar/ulinks.hpp9
-rw-r--r--src/thirdparty/unrar/unicode.cpp48
-rw-r--r--src/thirdparty/unrar/unicode.hpp7
-rw-r--r--src/thirdparty/unrar/unpack.cpp39
-rw-r--r--src/thirdparty/unrar/unpack.hpp27
-rw-r--r--src/thirdparty/unrar/unpack15.cpp8
-rw-r--r--src/thirdparty/unrar/unpack30.cpp167
-rw-r--r--src/thirdparty/unrar/unpack50.cpp41
-rw-r--r--src/thirdparty/unrar/unpack50mt.cpp25
-rw-r--r--src/thirdparty/unrar/unpackinline.cpp5
-rw-r--r--src/thirdparty/unrar/unrar.vcxproj65
-rw-r--r--src/thirdparty/unrar/unrar.vcxproj.filters14
-rw-r--r--src/thirdparty/unrar/version.hpp10
-rw-r--r--src/thirdparty/unrar/volume.cpp9
-rw-r--r--src/thirdparty/unrar/win32acl.cpp2
-rw-r--r--src/thirdparty/unrar/win32lnk.cpp48
-rw-r--r--src/thirdparty/unrar/win32stm.cpp11
-rw-r--r--src/thirdparty/versions.txt26
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler.vcxproj59
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/AUTHORS1
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/COPYING674
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/INSTALL31
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/README45
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/apps/Makefile73
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/apps/audiofile.cc270
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/apps/audiofile.h119
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/apps/dither.cc126
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/apps/dither.h58
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/apps/zresample.180
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/apps/zresample.cc272
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/apps/zretune.173
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/apps/zretune.cc257
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/docs/filt1.pngbin0 -> 9528 bytes
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/docs/filt2.pngbin0 -> 3117 bytes
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/docs/inpdist.pngbin0 -> 14940 bytes
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/docs/resampler.html574
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/docs/src-1kHz.pngbin0 -> 34429 bytes
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/docs/zita-1kHz.pngbin0 -> 34459 bytes
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/docs/zitadocs.css18
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/libs/Makefile68
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/libs/resampler-table.cc161
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/libs/resampler.cc263
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/libs/vresampler.cc269
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/resampler-table.h86
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/resampler.h76
-rw-r--r--src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/vresampler.h83
-rw-r--r--src/thirdparty/zlib/ChangeLog55
-rw-r--r--src/thirdparty/zlib/README6
-rw-r--r--src/thirdparty/zlib/adler32.c21
-rw-r--r--src/thirdparty/zlib/compress.c42
-rw-r--r--src/thirdparty/zlib/crc32.c41
-rw-r--r--src/thirdparty/zlib/deflate.c802
-rw-r--r--src/thirdparty/zlib/deflate.h35
-rw-r--r--src/thirdparty/zlib/gzguts.h23
-rw-r--r--src/thirdparty/zlib/gzlib.c31
-rw-r--r--src/thirdparty/zlib/gzread.c156
-rw-r--r--src/thirdparty/zlib/gzwrite.c332
-rw-r--r--src/thirdparty/zlib/infback.c4
-rw-r--r--src/thirdparty/zlib/inffast.c85
-rw-r--r--src/thirdparty/zlib/inflate.c123
-rw-r--r--src/thirdparty/zlib/inflate.h11
-rw-r--r--src/thirdparty/zlib/inftrees.c26
-rw-r--r--src/thirdparty/zlib/minizip/crypt.h131
-rw-r--r--src/thirdparty/zlib/minizip/ioapi.c247
-rw-r--r--src/thirdparty/zlib/minizip/ioapi.h208
-rw-r--r--src/thirdparty/zlib/minizip/iowin32.c462
-rw-r--r--src/thirdparty/zlib/minizip/iowin32.h28
-rw-r--r--src/thirdparty/zlib/minizip/unzip.c2125
-rw-r--r--src/thirdparty/zlib/minizip/unzip.h437
-rw-r--r--src/thirdparty/zlib/minizip/zip.c2007
-rw-r--r--src/thirdparty/zlib/minizip/zip.h362
-rw-r--r--src/thirdparty/zlib/trees.c99
-rw-r--r--src/thirdparty/zlib/uncompr.c98
-rw-r--r--src/thirdparty/zlib/zconf.h41
-rw-r--r--src/thirdparty/zlib/zlib.h452
-rw-r--r--src/thirdparty/zlib/zlib.vcxproj63
-rw-r--r--src/thirdparty/zlib/zlib.vcxproj.filters8
-rw-r--r--src/thirdparty/zlib/zutil.c49
-rw-r--r--src/thirdparty/zlib/zutil.h52
-rwxr-xr-xupdate_version.bat25
-rwxr-xr-xversion.sh63
1551 files changed, 131844 insertions, 289341 deletions
diff --git a/.gitignore b/.gitignore
index 38c8b7ef1..be2de54b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
*.aps
*.db
*.old
+*.opendb
*.opensdf
*.psess
*.pyc
@@ -16,17 +17,19 @@
/build.user.bat
/contrib/[Aa][Ss]tyle.exe
/contrib/cov-int
-/contrib/MPC-HC.lzma
+/contrib/cov_upload.log
+/contrib/MPC-HC.tar.xz
/contrib/MPC-HC.tar
/contrib/MPC-HC.tgz
-/contrib/warn-about-64-bit-msbuild.txt
/distrib/*.exe
-/include/version_rev.h
+/build/version_rev.h
/signinfo.txt
/src/filters/transform/VSFilter/installer/*.exe
/src/mpc-hc/mpcresources/backup
+/src/mpc-hc/mpcresources/*.rc
/src/mpc-hc/mpcresources/tx.exe
/src/mpc-hc/res/mpc-hc.exe.manifest
/src/MPCTestAPI/bin
+/src/thirdparty/DoctorDump/obj
/src/thirdparty/LAVFilters/obj
ipch
diff --git a/.gitmodules b/.gitmodules
index 241895d3a..e344b3a55 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,9 +1,43 @@
+[submodule "bs2b"]
+ path = src/thirdparty/bs2b/libbs2b
+ url = https://github.com/alexmarsev/libbs2b.git
+[submodule "LAVFilters"]
+ path = src/thirdparty/LAVFilters/src
+ url = https://github.com/mpc-hc/LAVFilters.git
[submodule "lcms2"]
path = src/thirdparty/lcms2/library
url = https://github.com/mm2/Little-CMS.git
+[submodule "MediaInfoLib"]
+ path = src/thirdparty/MediaInfo/library
+ url = https://github.com/MediaArea/MediaInfoLib.git
+[submodule "NanoSVG"]
+ path = src/thirdparty/nanosvg
+ url = https://github.com/memononen/nanosvg.git
+[submodule "rapidjson"]
+ path = src/thirdparty/rapidjson
+ url = https://github.com/miloyip/rapidjson.git
[submodule "RARFileSource"]
path = src/thirdparty/RARFileSource/library
url = https://github.com/mpc-hc/rarfilesource.git
-[submodule "LAVFilters"]
- path = src/thirdparty/LAVFilters/src
- url = https://github.com/mpc-hc/LAVFilters.git
+[submodule "sanear"]
+ path = src/thirdparty/sanear/sanear
+ url = https://github.com/alexmarsev/sanear.git
+ branch = core
+[submodule "soundtouch"]
+ path = src/thirdparty/SoundTouch/soundtouch
+ url = https://github.com/alexmarsev/soundtouch.git
+[submodule "soxr"]
+ path = src/thirdparty/soxr/libsoxr
+ url = https://github.com/alexmarsev/soxr.git
+[submodule "tinyxml2"]
+ path = src/thirdparty/tinyxml2/library
+ url = https://github.com/leethomason/tinyxml2.git
+[submodule "XmlRpc4Win"]
+ path = src/thirdparty/XmlRpc4Win
+ url = https://github.com/drtimcooper/XmlRpc4Win.git
+[submodule "ZenLib"]
+ path = src/thirdparty/ZenLib/library
+ url = https://github.com/MediaArea/ZenLib.git
+[submodule "src/thirdparty/minhook/minhook"]
+ path = src/thirdparty/minhook/minhook
+ url = https://github.com/TsudaKageyu/minhook.git
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 07bfda608..e871990f0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,8 +6,8 @@
[OpenID authentication](https://trac.mpc-hc.org/openidlogin) is available).
2. Please search our [Trac](https://trac.mpc-hc.org/report/1)
for your problem since there's a good chance that someone has already reported it.
-3. In case you found a match, please try to provide as much info as you can
- so we have better picture about what the real problem is and how to fix it ASAP.
+3. If you find a match, please try to provide as much info as you can,
+ so that we have a better picture about what the real problem is and how to fix it ASAP.
4. If you didn't find any tickets with a problem similar to yours then please open a
[new ticket](https://trac.mpc-hc.org/ticket/newticket)
* Be descriptive as much as you can
@@ -19,7 +19,7 @@ If you want to help, here's what you need to do:
1. Make sure you have a [GitHub account](https://github.com/signup/free).
2. [Fork](https://github.com/mpc-hc/mpc-hc/fork) our repository.
-3. Create a new topic branch to contain your feature, change, or fix.
+3. Create a new topic branch (based on the `develop` branch) to contain your feature, change, or fix.
4. Set `core.autocrlf` to true: `git config core.autocrlf true`.
5. Make sure you have enabled the pre-commit hook - **[pre-commit.sh](/contrib/pre-commit.sh)**.
6. Make sure that your changes adhere to the current coding conventions used
diff --git a/Readme.md b/Readme.md
index 8b6e3f72a..0b94d3e94 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,60 +1,61 @@
# Media Player Classic - Home Cinema
-[![GitHub version](https://badge.fury.io/gh/mpc-hc%2Fmpc-hc.svg)](http://badge.fury.io/gh/mpc-hc%2Fmpc-hc)
-[![Coverity Scan Build Status](https://scan.coverity.com/projects/259/badge.svg)](https://scan.coverity.com/projects/259)
+[![GitHub Tag](https://img.shields.io/github/tag/mpc-hc/mpc-hc.svg?label=version)](https://github.com/mpc-hc/mpc-hc)
+[![Coverity Scan Build Status](https://img.shields.io/coverity/scan/259.svg)](https://scan.coverity.com/projects/259)
-Media Player Classic - Home Cinema (MPC-HC) is a free and open source (OSS) video
+Media Player Classic - Home Cinema (MPC-HC) is a free and open-source (OSS) video
and audio player for Windows. MPC-HC is based on the original Guliverkli project
-and contains a lot of additional features and bug fixes.
+and contains many additional features and bug fixes.
We are in dire need of new developers of any kind. If you can code a little, or you can create
logos for the player and images for the file associations, or you can create/maintain the main
website, please join our IRC channel and talk to us. Any help is always appreciated.
-Find some easy ticket on our trac page, fix the problem, send a [pull request](https://github.com/mpc-hc/mpc-hc/pulls),
-or post the patch on [trac](https://trac.mpc-hc.org) or come on IRC and we'll review it for you.
+Find some easy ticket on our Trac, fix the problem, send a [pull request](https://github.com/mpc-hc/mpc-hc/pulls),
+or post the patch on [Trac](https://trac.mpc-hc.org/) or come on IRC and we'll review it for you.
See [CONTRIBUTING.md](/CONTRIBUTING.md) for more info.
*We care about keeping an open project open and free for contributions wherever they may come from.*
-## Main Features:
-* Option to remove [tearing](http://en.wikipedia.org/wiki/Screen_tearing)
+## Main Features
+
+* Option to remove [tearing](https://en.wikipedia.org/wiki/Screen_tearing)
* Support for Windows Vista/7/8, including a 64-bit build
-* Support for [EVR/EVR CP](http://en.wikipedia.org/wiki/Media_Foundation#Enhanced_Video_Renderer) (Enhanced Video Renderer)
-* Supports most types of [subtitles](http://en.wikipedia.org/wiki/Subtitle_%28captioning%29#Subtitle_formats)
- including [BluRay](http://en.wikipedia.org/wiki/Blu-ray_Disc) .sup files
+* Support for [EVR/EVR CP](https://en.wikipedia.org/wiki/Media_Foundation#Enhanced_Video_Renderer) (Enhanced Video Renderer)
+* Supports most types of [subtitles](https://en.wikipedia.org/wiki/Subtitle_%28captioning%29#Subtitle_formats)
+ including [BluRay](https://en.wikipedia.org/wiki/Blu-ray_Disc) .sup files
* Playback and recording of television programs, if a supported
- [TV tuner card](http://en.wikipedia.org/wiki/TV_tuner_card) is installed
-* [OSD info (On Screen Display)](http://en.wikipedia.org/wiki/On-screen_display)
+ [TV tuner card](https://en.wikipedia.org/wiki/TV_tuner_card) is installed
+* [OSD info (On Screen Display)](https://en.wikipedia.org/wiki/On-screen_display)
* Multi-Monitor support
-* Various [pixel shaders](http://en.wikipedia.org/wiki/Shader#Pixel_shaders)
-* [Color management](http://en.wikipedia.org/wiki/Color_management)
-* 35 translations available
+* Various [pixel shaders](https://en.wikipedia.org/wiki/Shader#Pixel_shaders)
+* [Color management](https://en.wikipedia.org/wiki/Color_management)
+* 42 translations available
+
+
+## System Requirements
+* An SSE2 capable CPU
+* Windows XP SP3, Vista, 7, 8, 8.1, 10 32-bit/64-bit
-## System Requirements:
-* An SSE capable CPU
-* Windows XP SP3, Vista, 7, 8, 8.1 32-bit/64-bit
+## Links
-## Links:
-* [Website](http://mpc-hc.org)
+* [Website](https://mpc-hc.org/)
* [Source code](https://github.com/mpc-hc)
-* [Support Trac](https://trac.mpc-hc.org)
-* IRC Channel: [#mpc-hc](http://webchat.freenode.net/?randomnick=1&channels=mpc-hc&prompt=1&uio=d4)
- / [#mpc-hc-dev](http://webchat.freenode.net/?randomnick=1&channels=mpc-hc-dev&prompt=1&uio=d4) at [Freenode](http://freenode.net/)
-* [Donations](http://mpc-hc.org/donate/)
+* [Support Trac](https://trac.mpc-hc.org/)
+* IRC Channel: [#mpc-hc](https://webchat.freenode.net/?randomnick=1&channels=mpc-hc&prompt=1&uio=d4)
+ / [#mpc-hc-dev](https://webchat.freenode.net/?randomnick=1&channels=mpc-hc-dev&prompt=1&uio=d4) at [Freenode](https://freenode.net/)
+* [Donations](https://mpc-hc.org/donate/)
-For the people involved in the development, see
-[Authors.txt](/docs/Authors.txt).
+For the people involved in the development, see [Authors.txt](/docs/Authors.txt).
MPC-HC's code is licensed under [GPL v3](/COPYING.txt).
-Translations are done by various translators (see
-[Authors.txt](/docs/Authors.txt)).
+Translations are done by various translators (see [Authors.txt](/docs/Authors.txt)).
## Third-party code
@@ -63,22 +64,30 @@ MPC-HC makes use of the following third-party code:
| Project | License | Website |
| ----------------- | ------------------------- | ----------------- |
-| CSizingControlBar | - | http://www.datamekanix.com/sizecbar/ |
-| LAV Filters | GPLv2+ | http://code.google.com/p/lavfilters/ |
-| libdivide | zlib License | http://libdivide.com/ |
-| Little CMS | MIT License | http://www.littlecms.com/ |
+| bs2b | MIT License | <http://bs2b.sourceforge.net> |
+| CSizingControlBar | - | <http://www.datamekanix.com/sizecbar/> |
+| LAV Filters | GPLv2+ | <https://github.com/Nevcairiel/LAVFilters> |
+| libdivide | zlib License | <http://libdivide.com/> |
+| Little CMS | MIT License | <http://www.littlecms.com/> |
| Logitech SDK | - | - |
-| MediaInfoLib | Simplified BSD License | http://mediaarea.net/MediaInfo |
-| Mhook | MIT License | https://github.com/martona/mhook |
-| MultiMon | CPOL | http://www.codeproject.com/Articles/3690/ |
-| QuickTime SDK | - | http://developer.apple.com/quicktime/ |
-| RARFileSource | GPLv2+ | http://www.v12pwr.com/RARFileSource/ |
+| MediaInfoLib | Simplified BSD License | <https://mediaarea.net/MediaInfo> |
+| MinHook | Simplified BSD License | <https://github.com/TsudaKageyu/minhook> |
+| MultiMon | CPOL | <https://www.codeproject.com/Articles/3690/> |
+| NanoSVG | zlib License | <https://github.com/memononen/nanosvg> |
+| QuickTime SDK | - | <https://developer.apple.com/quicktime/> |
+| RapidJSON | MIT License | <https://github.com/miloyip/rapidjson> |
+| RARFileSource | GPLv2+ | <http://www.v12pwr.com/RARFileSource/> |
| RealMedia SDK | - | - |
-| ResizableLib | Artistic License | http://sourceforge.net/projects/resizablelib/ |
-| Silk Icons | CC Attribution 2.5 | http://www.famfamfam.com/lab/icons/silk/ |
-| SoundTouch | LGPLv2.1 | http://www.surina.net/soundtouch/ |
-| TreePropSheet | - | http://www.codeproject.com/Articles/3709/ |
-| UnRAR | freeware | http://www.rarlab.com/rar_add.htm |
-| VirtualDub | GPLv2+ | http://www.virtualdub.org/ |
-| ZenLib | zlib License | http://sourceforge.net/projects/zenlib/ |
-| zlib | zlib License | http://zlib.net/ |
+| ResizableLib | Artistic License | <https://github.com/ppescher/resizablelib> |
+| sanear | LGPLv2.1 | <https://github.com/alexmarsev/sanear> |
+| Silk Icons | CC Attribution 2.5 | <http://www.famfamfam.com/lab/icons/silk/> |
+| SoundTouch | LGPLv2.1 | <http://www.surina.net/soundtouch/> |
+| soxr | LGPLv2.1+ | <https://sourceforge.net/projects/soxr/> |
+| tinyxml2 | zlib License | <http://www.grinninglizard.com/tinyxml2/> |
+| TreePropSheet | - | <https://www.codeproject.com/Articles/3709/> |
+| UnRAR | freeware | <http://www.rarlab.com/rar_add.htm> |
+| VirtualDub | GPLv2+ | <http://www.virtualdub.org/> |
+| XmlRpc4Win | MIT License | <https://github.com/drtimcooper/XmlRpc4Win> |
+| ZenLib | zlib License | <https://github.com/MediaArea/ZenLib> |
+| zita-resampler | GPLv3 | <http://kokkinizita.linuxaudio.org/linuxaudio/> |
+| zlib | zlib License | <http://zlib.net/> |
diff --git a/build.bat b/build.bat
index 715e345bc..98d35d6db 100755
--- a/build.bat
+++ b/build.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2009-2014 see Authors.txt
+REM (C) 2009-2016 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -18,20 +18,6 @@ REM along with this program. If not, see <http://www.gnu.org/licenses/>.
SETLOCAL
-CD /D %~dp0
-
-REM pre-build checks
-IF EXIST "build.user.bat" (
- CALL "build.user.bat"
-) ELSE (
- IF DEFINED MINGW32 (SET MPCHC_MINGW32=%MINGW32%) ELSE (GOTO MissingVar)
- IF DEFINED MINGW64 (SET MPCHC_MINGW64=%MINGW64%) ELSE (GOTO MissingVar)
- IF DEFINED MSYS (SET MPCHC_MSYS=%MSYS%) ELSE (GOTO MissingVar)
-)
-
-IF NOT EXIST "%MPCHC_MINGW32%" GOTO MissingVar
-IF NOT EXIST "%MPCHC_MINGW64%" GOTO MissingVar
-IF NOT EXIST "%MPCHC_MSYS%" GOTO MissingVar
SET ARG=/%*
SET ARG=%ARG:/=%
@@ -48,9 +34,7 @@ IF /I "%ARG%" == "?" GOTO ShowHelp
FOR %%G IN (%ARG%) DO (
IF /I "%%G" == "help" GOTO ShowHelp
- IF /I "%%G" == "GetVersion" ENDLOCAL & SET "FORCE_VER_UPDATE=True" & CALL :SubGetVersion & EXIT /B
- IF /I "%%G" == "CopyDXDll" ENDLOCAL & CALL :SubCopyDXDll x86 & CALL :SubCopyDXDll x64 & EXIT /B
- IF /I "%%G" == "CopyDX" ENDLOCAL & CALL :SubCopyDXDll x86 & CALL :SubCopyDXDll x64 & EXIT /B
+ IF /I "%%G" == "GetVersion" ENDLOCAL & SET "FORCE_VER_UPDATE=True" & CALL "%~dp0common.bat" :SubGetVersion & EXIT /B
IF /I "%%G" == "Build" SET "BUILDTYPE=Build" & SET /A ARGB+=1
IF /I "%%G" == "Clean" SET "BUILDTYPE=Clean" & SET /A ARGB+=1 & SET "NO_INST=True" & SET /A "NO_ZIP=True" & SET "NO_LAV=True"
IF /I "%%G" == "Rebuild" SET "BUILDTYPE=Rebuild" & SET /A ARGB+=1 & SET "NO_LAV=True"
@@ -58,8 +42,8 @@ FOR %%G IN (%ARG%) DO (
IF /I "%%G" == "Win32" SET "PPLATFORM=Win32" & SET /A ARGPL+=1
IF /I "%%G" == "x86" SET "PPLATFORM=Win32" & SET /A ARGPL+=1
IF /I "%%G" == "x64" SET "PPLATFORM=x64" & SET /A ARGPL+=1
- IF /I "%%G" == "All" SET "CONFIG=All" & SET /A ARGC+=1
- IF /I "%%G" == "Main" SET "CONFIG=Main" & SET /A ARGC+=1 & SET "NO_INST=True" & SET "NO_ZIP=True"
+ IF /I "%%G" == "All" SET "CONFIG=All" & SET /A ARGC+=1 & SET "NO_LITE=True"
+ IF /I "%%G" == "Main" SET "CONFIG=Main" & SET /A ARGC+=1 & SET "NO_INST=True" & SET "NO_ZIP=True"
IF /I "%%G" == "Filters" SET "CONFIG=Filters" & SET /A ARGC+=1 & SET "NO_INST=True" & SET "NO_LITE=True"
IF /I "%%G" == "Filter" SET "CONFIG=Filters" & SET /A ARGC+=1 & SET "NO_INST=True" & SET "NO_LITE=True"
IF /I "%%G" == "API" SET "CONFIG=API" & SET /A ARGC+=1 & SET "NO_INST=True" & SET "NO_ZIP=True" & SET "NO_LITE=True"
@@ -71,7 +55,7 @@ FOR %%G IN (%ARG%) DO (
IF /I "%%G" == "Translations" SET "CONFIG=Translation" & SET /A ARGC+=1 & SET "NO_INST=True" & SET "NO_ZIP=True" & SET "NO_LITE=True"
IF /I "%%G" == "Debug" SET "BUILDCFG=Debug" & SET /A ARGBC+=1 & SET "NO_INST=True"
IF /I "%%G" == "Release" SET "BUILDCFG=Release" & SET /A ARGBC+=1
- IF /I "%%G" == "VS2013" SET "COMPILER=VS2013" & SET /A ARGCOMP+=1
+ IF /I "%%G" == "VS2015" SET "COMPILER=VS2015" & SET /A ARGCOMP+=1
IF /I "%%G" == "Packages" SET "PACKAGES=True" & SET /A VALID+=1
IF /I "%%G" == "Installer" SET "INSTALLER=True" & SET /A VALID+=1
IF /I "%%G" == "7z" SET "ZIP=True" & SET /A VALID+=1
@@ -82,6 +66,14 @@ FOR %%G IN (%ARG%) DO (
IF /I "%%G" == "Analyze" SET "ANALYZE=True" & SET /A VALID+=1
)
+SET "FILE_DIR=%~dp0"
+PUSHD "%FILE_DIR%"
+
+SET "COMMON=%FILE_DIR%\common.bat"
+
+CALL "%COMMON%" :SubPreBuild
+IF %ERRORLEVEL% NEQ 0 GOTO MissingVar
+
FOR %%G IN (%*) DO SET /A INPUT+=1
SET /A VALID+=%ARGB%+%ARGPL%+%ARGC%+%ARGBC%+%ARGCOMP%
IF %VALID% NEQ %INPUT% GOTO UnsupportedSwitch
@@ -90,7 +82,7 @@ IF %ARGB% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGB% == 0 (SET "BUILDTY
IF %ARGPL% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGPL% == 0 (SET "PPLATFORM=Both")
IF %ARGC% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGC% == 0 (SET "CONFIG=MPCHC")
IF %ARGBC% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGBC% == 0 (SET "BUILDCFG=Release")
-IF %ARGCOMP% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGCOMP% == 0 (SET "COMPILER=VS2013")
+IF %ARGCOMP% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGCOMP% == 0 (SET "COMPILER=VS2015")
IF /I "%PACKAGES%" == "True" SET "INSTALLER=True" & SET "ZIP=True"
@@ -99,11 +91,11 @@ IF /I "%ZIP%" == "True" IF "%NO_ZIP%" == "True" GOTO UnsupportedSwitch
IF /I "%MPCHC_LITE%" == "True" IF "%NO_LITE%" == "True" GOTO UnsupportedSwitch
IF /I "%CLEAN%" == "LAVFilters" IF "%NO_LAV%" == "True" GOTO UnsupportedSwitch
-IF NOT DEFINED VS120COMNTOOLS GOTO MissingVar
-SET "TOOLSET=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat"
+IF NOT DEFINED VS140COMNTOOLS GOTO MissingVar
+SET "TOOLSET=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat"
SET "BIN_DIR=bin"
-IF EXIST "%~dp0signinfo.txt" (
+IF EXIST "%FILE_DIR%signinfo.txt" (
IF /I "%INSTALLER%" == "True" SET "SIGN=True"
IF /I "%ZIP%" == "True" SET "SIGN=True"
)
@@ -185,8 +177,8 @@ EXIT /B
IF %ERRORLEVEL% NEQ 0 EXIT /B
TITLE Compiling MPC-HC %COMPILER% [FINISHED]
SET END_TIME=%TIME%
-CALL :SubGetDuration
-CALL :SubMsg "INFO" "Compilation started on %START_DATE%-%START_TIME% and completed on %DATE%-%END_TIME% [%DURATION%]"
+CALL "%COMMON%" :SubGetDuration
+CALL "%COMMON%" :SubMsg "INFO" "Compilation started on %START_DATE%-%START_TIME% and completed on %DATE%-%END_TIME% [%DURATION%]"
ENDLOCAL
EXIT /B
@@ -203,10 +195,10 @@ MSBuild.exe mpc-hc.sln %MSBUILD_SWITCHES%^
/flp1:LogFile=%LOG_DIR%\filters_errors_%BUILDCFG%_%1.log;errorsonly;Verbosity=diagnostic^
/flp2:LogFile=%LOG_DIR%\filters_warnings_%BUILDCFG%_%1.log;warningsonly;Verbosity=diagnostic
IF %ERRORLEVEL% NEQ 0 (
- CALL :SubMsg "ERROR" "mpc-hc.sln %BUILDCFG% Filter %1 - Compilation failed!"
+ CALL "%COMMON%" :SubMsg "ERROR" "mpc-hc.sln %BUILDCFG% Filter %1 - Compilation failed!"
EXIT /B
) ELSE (
- CALL :SubMsg "INFO" "mpc-hc.sln %BUILDCFG% Filter %1 compiled successfully"
+ CALL "%COMMON%" :SubMsg "INFO" "mpc-hc.sln %BUILDCFG% Filter %1 compiled successfully"
)
IF /I "%SIGN%" == "True" CALL :SubSign Filters *.ax
IF /I "%SIGN%" == "True" CALL :SubSign Filters VSFilter.dll
@@ -222,14 +214,15 @@ MSBuild.exe mpc-hc.sln %MSBUILD_SWITCHES%^
/flp1:LogFile="%LOG_DIR%\mpc-hc_errors_%BUILDCFG%_%1.log";errorsonly;Verbosity=diagnostic^
/flp2:LogFile="%LOG_DIR%\mpc-hc_warnings_%BUILDCFG%_%1.log";warningsonly;Verbosity=diagnostic
IF %ERRORLEVEL% NEQ 0 (
- CALL :SubMsg "ERROR" "mpc-hc.sln %BUILDCFG% %1 - Compilation failed!"
+ CALL "%COMMON%" :SubMsg "ERROR" "mpc-hc.sln %BUILDCFG% %1 - Compilation failed!"
EXIT /B
) ELSE (
- CALL :SubMsg "INFO" "mpc-hc.sln %BUILDCFG% %1 compiled successfully"
+ CALL "%COMMON%" :SubMsg "INFO" "mpc-hc.sln %BUILDCFG% %1 compiled successfully"
)
IF /I "%SIGN%" == "True" CALL :SubSign MPC-HC mpc-hc*.exe
IF /I "%SIGN%" == "True" CALL :SubSign MPC-HC *.dll %LAVFILTERSDIR%
IF /I "%SIGN%" == "True" CALL :SubSign MPC-HC *.ax %LAVFILTERSDIR%
+IF /I "%SIGN%" == "True" CALL :SubSign MPC-HC CrashReporterDialog.dll CrashReporter
EXIT /B
@@ -238,14 +231,14 @@ EXIT /B
IF %ERRORLEVEL% NEQ 0 EXIT /B
IF /I "%BUILDCFG%" == "Debug" (
- CALL :SubMsg "WARNING" "/debug was used, resources will not be built"
+ CALL "%COMMON%" :SubMsg "WARNING" "/debug was used, resources will not be built"
EXIT /B
)
CALL :SubMPCIconLib %1
IF DEFINED MPCHC_LITE (
- CALL :SubMsg "WARNING" "/lite was used, translations will not be built"
+ CALL "%COMMON%" :SubMsg "WARNING" "/lite was used, translations will not be built"
EXIT /B
)
@@ -260,10 +253,10 @@ TITLE Compiling mpciconlib %COMPILER% - Release^|%1...
MSBuild.exe mpciconlib.sln %MSBUILD_SWITCHES%^
/target:%BUILDTYPE% /property:Configuration=Release;Platform=%1
IF %ERRORLEVEL% NEQ 0 (
- CALL :SubMsg "ERROR" "mpciconlib.sln %1 - Compilation failed!"
+ CALL "%COMMON%" :SubMsg "ERROR" "mpciconlib.sln %1 - Compilation failed!"
EXIT /B
) ELSE (
- CALL :SubMsg "INFO" "mpciconlib.sln %1 compiled successfully"
+ CALL "%COMMON%" :SubMsg "INFO" "mpciconlib.sln %1 compiled successfully"
)
IF /I "%SIGN%" == "True" CALL :SubSign MPC-HC mpciconlib.dll
@@ -280,18 +273,10 @@ EXIT /B
:SubMPCRresources
IF %ERRORLEVEL% NEQ 0 EXIT /B
-FOR %%G IN (
- "Arabic" "Armenian" "Basque" "Belarusian" "Bengali" "Catalan" "Chinese Simplified"
- "Chinese Traditional" "Croatian" "Czech" "Dutch" "English (British)" "French"
- "Galician" "German" "Greek" "Hebrew" "Hungarian" "Italian" "Japanese" "Korean"
- "Malay" "Polish" "Portuguese (Brazil)" "Romanian" "Russian" "Slovak" "Slovenian"
- "Spanish" "Swedish" "Tatar" "Thai" "Turkish" "Ukrainian" "Vietnamese"
-) DO (
- TITLE Compiling mpcresources %COMPILER% - %%~G^|%1...
- MSBuild.exe mpcresources.sln %MSBUILD_SWITCHES%^
- /target:%BUILDTYPE% /property:Configuration="Release %%~G";Platform=%1
- IF %ERRORLEVEL% NEQ 0 CALL :SubMsg "ERROR" "Compilation failed!" & EXIT /B
-)
+TITLE Compiling mpcresources %COMPILER%...
+MSBuild.exe mpcresources.sln %MSBUILD_SWITCHES%^
+ /target:%BUILDTYPE% /property:Configuration="Release";Platform=%1
+IF %ERRORLEVEL% NEQ 0 CALL "%COMMON%" :SubMsg "ERROR" "Compilation failed!" & EXIT /B
IF /I "%SIGN%" == "True" CALL :SubSign MPC-HC mpcresources.??.dll Lang
IF /I "%SIGN%" == "True" CALL :SubSign MPC-HC mpcresources.??_??.dll Lang
EXIT /B
@@ -305,10 +290,10 @@ TITLE Compiling MPCTestAPI %COMPILER% - %BUILDCFG%^|%1...
MSBuild.exe MPCTestAPI.sln %MSBUILD_SWITCHES%^
/target:%BUILDTYPE% /property:Configuration=%BUILDCFG%;Platform=%1
IF %ERRORLEVEL% NEQ 0 (
- CALL :SubMsg "ERROR" "MPCTestAPI.sln %1 - Compilation failed!"
+ CALL "%COMMON%" :SubMsg "ERROR" "MPCTestAPI.sln %1 - Compilation failed!"
EXIT /B
) ELSE (
- CALL :SubMsg "INFO" "MPCTestAPI.sln %1 compiled successfully"
+ CALL "%COMMON%" :SubMsg "INFO" "MPCTestAPI.sln %1 compiled successfully"
)
POPD
EXIT /B
@@ -324,9 +309,9 @@ IF /I "%PPLATFORM%" == "Win32" PUSHD "%BIN_DIR%\%~1_x86\%3"
IF /I "%PPLATFORM%" == "x64" PUSHD "%BIN_DIR%\%~1_x64\%3"
FOR /F "delims=" %%A IN ('DIR "%2" /b') DO (
- CALL "%~dp0contrib\sign.bat" "%%A" || (CALL :SubMsg "ERROR" "Problem signing %%A" & GOTO Break)
+ CALL "%FILE_DIR%contrib\sign.bat" "%%A" || (CALL "%COMMON%" :SubMsg "ERROR" "Problem signing %%A" & GOTO Break)
)
-CALL :SubMsg "INFO" "%2 signed successfully."
+CALL "%COMMON%" :SubMsg "INFO" "%2 signed successfully."
:Break
POPD
@@ -337,9 +322,9 @@ EXIT /B
IF /I "%BUILDCFG%" == "Debug" EXIT /B
PUSHD "%BIN_DIR%"
EXPAND "%DXSDK_DIR%\Redist\Jun2010_D3DCompiler_43_%~1.cab" -F:D3DCompiler_43.dll "mpc-hc_%~1%~2"
-IF %ERRORLEVEL% NEQ 0 CALL :SubMsg "ERROR" "Problem when extracting %DXSDK_DIR%\Redist\Jun2010_D3DCompiler_43_%~1.cab" & EXIT /B
+IF %ERRORLEVEL% NEQ 0 CALL "%COMMON%" :SubMsg "ERROR" "Problem when extracting %DXSDK_DIR%\Redist\Jun2010_D3DCompiler_43_%~1.cab" & EXIT /B
EXPAND "%DXSDK_DIR%\Redist\Jun2010_d3dx9_43_%~1.cab" -F:d3dx9_43.dll "mpc-hc_%~1%~2"
-IF %ERRORLEVEL% NEQ 0 CALL :SubMsg "ERROR" "Problem when extracting Jun2010_d3dx9_43_%~1.cab" & EXIT /B
+IF %ERRORLEVEL% NEQ 0 CALL "%COMMON%" :SubMsg "ERROR" "Problem when extracting Jun2010_d3dx9_43_%~1.cab" & EXIT /B
POPD
EXIT /B
@@ -356,22 +341,22 @@ IF /I "%~1" == "x64" (
IF DEFINED MPCHC_LITE (
SET MPCHC_INNO_DEF=%MPCHC_INNO_DEF% /DMPCHC_LITE
SET MPCHC_COPY_DX_DLL_ARGS=%MPCHC_COPY_DX_DLL_ARGS% " Lite"
-)
+)
CALL :SubCopyDXDll %MPCHC_COPY_DX_DLL_ARGS%
-CALL :SubDetectInnoSetup
+CALL "%COMMON%" :SubDetectInnoSetup
IF NOT DEFINED InnoSetupPath (
- CALL :SubMsg "WARNING" "Inno Setup wasn't found, the %1 installer wasn't built"
+ CALL "%COMMON%" :SubMsg "WARNING" "Inno Setup wasn't found, the %1 installer wasn't built"
EXIT /B
)
TITLE Compiling %1 %COMPILER% installer...
-"%InnoSetupPath%" /SMySignTool="cmd /c "%~dp0contrib\sign.bat" $f" /Q /O"%BIN_DIR%"^
+"%InnoSetupPath%" /SMySignTool="cmd /c "%FILE_DIR%contrib\sign.bat" $f" /Q /O"%BIN_DIR%"^
"distrib\mpc-hc_setup.iss" %MPCHC_INNO_DEF%
-IF %ERRORLEVEL% NEQ 0 CALL :SubMsg "ERROR" "Compilation failed!" & EXIT /B
-CALL :SubMsg "INFO" "%1 installer successfully built"
+IF %ERRORLEVEL% NEQ 0 CALL "%COMMON%" :SubMsg "ERROR" "Compilation failed!" & EXIT /B
+CALL "%COMMON%" :SubMsg "INFO" "%1 installer successfully built"
EXIT /B
@@ -379,11 +364,11 @@ EXIT /B
:SubCreatePackages
IF %ERRORLEVEL% NEQ 0 EXIT /B
-CALL :SubDetectSevenzipPath
-CALL :SubGetVersion
+CALL "%COMMON%" :SubDetectSevenzipPath
+CALL "%COMMON%" :SubGetVersion
IF NOT DEFINED SEVENZIP (
- CALL :SubMsg "WARNING" "7-Zip wasn't found, the %1 %2 package wasn't built"
+ CALL "%COMMON%" :SubMsg "WARNING" "7-Zip wasn't found, the %1 %2 package wasn't built"
EXIT /B
)
@@ -396,7 +381,7 @@ IF /I "%~2" == "Win32" (
IF DEFINED MPCHC_LITE (
CALL :SubCopyDXDll %ARCH% " Lite"
-) ELSE (
+) ELSE IF /I "%NAME%" == "MPC-HC" (
CALL :SubCopyDXDll %ARCH%
)
@@ -424,9 +409,10 @@ REM Compress the pdb file for mpc-hc only
IF /I "%NAME%" == "MPC-HC" (
PUSHD "%VS_OUT_DIR%"
TITLE Creating archive %PCKG_NAME%.pdb.7z...
- START "7z" /B /WAIT "%SEVENZIP%" a -t7z "%PCKG_NAME%.pdb.7z" %PDB_FILES% -m0=LZMA -mx9 -ms=on
- IF %ERRORLEVEL% NEQ 0 CALL :SubMsg "ERROR" "Unable to create %PCKG_NAME%.pdb.7z!" & EXIT /B
- CALL :SubMsg "INFO" "%PCKG_NAME%.pdb.7z successfully created"
+ START "7z" /B /WAIT "%SEVENZIP%" a -t7z "%PCKG_NAME%.pdb.7z" %PDB_FILES% -m0=LZMA2^
+ -mmt=%NUMBER_OF_PROCESSORS% -mx9 -ms=on
+ IF %ERRORLEVEL% NEQ 0 CALL "%COMMON%" :SubMsg "ERROR" "Unable to create %PCKG_NAME%.pdb.7z!" & EXIT /B
+ CALL "%COMMON%" :SubMsg "INFO" "%PCKG_NAME%.pdb.7z successfully created"
IF EXIST "%PCKG_NAME%.pdb.7z" MOVE /Y "%PCKG_NAME%.pdb.7z" ".." >NUL
POPD
)
@@ -458,6 +444,13 @@ IF /I "%NAME%" == "MPC-HC" (
COPY /Y /V "%VS_OUT_DIR%\d3dx9_43.dll" "%PCKG_NAME%\d3dx9_43.dll" >NUL
IF NOT EXIST "%PCKG_NAME%\Shaders" MD "%PCKG_NAME%\Shaders"
COPY /Y /V "..\src\mpc-hc\res\shaders\external\*.hlsl" "%PCKG_NAME%\Shaders" >NUL
+ IF /I "%BUILDCFG%" NEQ "Debug" IF /I "%BUILDCFG%" NEQ "Debug Lite" IF EXIST "%VS_OUT_DIR%\CrashReporter\crashrpt.dll" (
+ IF NOT EXIST "%PCKG_NAME%\CrashReporter" MD "%PCKG_NAME%\CrashReporter"
+ COPY /Y /V "%VS_OUT_DIR%\CrashReporter\crashrpt.dll" "%PCKG_NAME%\CrashReporter"
+ COPY /Y /V "%VS_OUT_DIR%\CrashReporter\dbghelp.dll" "%PCKG_NAME%\CrashReporter"
+ COPY /Y /V "%VS_OUT_DIR%\CrashReporter\sendrpt.exe" "%PCKG_NAME%\CrashReporter"
+ COPY /Y /V "%VS_OUT_DIR%\CrashReporter\CrashReporterDialog.dll" "%PCKG_NAME%\CrashReporter"
+ )
) ELSE (
COPY /Y /V "%VS_OUT_DIR%\*.ax" "%PCKG_NAME%\*.ax" >NUL
COPY /Y /V "%VS_OUT_DIR%\VSFilter.dll" "%PCKG_NAME%\VSFilter.dll" >NUL
@@ -469,10 +462,10 @@ COPY /Y /V "..\docs\Changelog.txt" "%PCKG_NAME%" >NUL
COPY /Y /V "..\docs\Readme.txt" "%PCKG_NAME%" >NUL
TITLE Creating archive %PCKG_NAME%.7z...
-START "7z" /B /WAIT "%SEVENZIP%" a -t7z "%PCKG_NAME%.7z" "%PCKG_NAME%"^
- -m0=LZMA -mx9 -ms=on
-IF %ERRORLEVEL% NEQ 0 CALL :SubMsg "ERROR" "Unable to create %PCKG_NAME%.7z!" & EXIT /B
-CALL :SubMsg "INFO" "%PCKG_NAME%.7z successfully created"
+START "7z" /B /WAIT "%SEVENZIP%" a -t7z "%PCKG_NAME%.7z" "%PCKG_NAME%" -m0=LZMA2^
+ -mmt=%NUMBER_OF_PROCESSORS% -mx9 -ms=on
+IF %ERRORLEVEL% NEQ 0 CALL "%COMMON%" :SubMsg "ERROR" "Unable to create %PCKG_NAME%.7z!" & EXIT /B
+CALL "%COMMON%" :SubMsg "INFO" "%PCKG_NAME%.7z successfully created"
IF EXIST "%PCKG_NAME%" RD /Q /S "%PCKG_NAME%"
@@ -480,66 +473,18 @@ POPD
EXIT /B
-:SubGetVersion
-REM Get the version
-IF NOT EXIST "include\version_rev.h" SET "FORCE_VER_UPDATE=True"
-IF /I "%FORCE_VER_UPDATE%" == "True" CALL "update_version.bat" && SET "FORCE_VER_UPDATE=False"
-
-FOR /F "tokens=2,3" %%A IN ('FINDSTR /R /C:"define MPC_VERSION_[M,P]" "include\version.h"') DO (
- SET "%%A=%%B"
-)
-
-FOR /F "tokens=2,3" %%A IN ('FINDSTR /R /C:"define MPC" "include\version_rev.h"') DO (
- SET "%%A=%%B"
-)
-
-IF "%MPC_VERSION_REV%" NEQ "0" (SET "MPCHC_NIGHTLY=1") ELSE (SET "MPCHC_NIGHTLY=0")
-
-SET "MPCHC_HASH=%MPCHC_HASH:~4,-2%"
-IF DEFINED MPCHC_BRANCH (
- SET "MPCHC_BRANCH=%MPCHC_BRANCH:~4,-2%"
-)
-
-IF "%MPCHC_NIGHTLY%" NEQ "0" (
- SET "MPCHC_VER=%MPC_VERSION_MAJOR%.%MPC_VERSION_MINOR%.%MPC_VERSION_PATCH%.%MPC_VERSION_REV%"
-) ELSE (
- SET "MPCHC_VER=%MPC_VERSION_MAJOR%.%MPC_VERSION_MINOR%.%MPC_VERSION_PATCH%"
-)
-EXIT /B
-
-
-:SubDetectInnoSetup
-FOR /F "tokens=5*" %%A IN (
- 'REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1" /v "Inno Setup: App Path" 2^>NUL ^| FIND "REG_SZ" ^|^|
- REG QUERY "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1" /v "Inno Setup: App Path" 2^>NUL ^| FIND "REG_SZ"') DO SET "InnoSetupPath=%%B\ISCC.exe"
-EXIT /B
-
-
-:SubDetectSevenzipPath
-FOR %%G IN (7z.exe) DO (SET "SEVENZIP_PATH=%%~$PATH:G")
-IF EXIST "%SEVENZIP_PATH%" (SET "SEVENZIP=%SEVENZIP_PATH%" & EXIT /B)
-
-FOR %%G IN (7za.exe) DO (SET "SEVENZIP_PATH=%%~$PATH:G")
-IF EXIST "%SEVENZIP_PATH%" (SET "SEVENZIP=%SEVENZIP_PATH%" & EXIT /B)
-
-FOR /F "tokens=2*" %%A IN (
- 'REG QUERY "HKLM\SOFTWARE\7-Zip" /v "Path" 2^>NUL ^| FIND "REG_SZ" ^|^|
- REG QUERY "HKLM\SOFTWARE\Wow6432Node\7-Zip" /v "Path" 2^>NUL ^| FIND "REG_SZ"') DO SET "SEVENZIP=%%B\7z.exe"
-EXIT /B
-
-
:ShowHelp
TITLE %~nx0 Help
ECHO.
ECHO Usage:
-ECHO %~nx0 [Clean^|Build^|Rebuild] [x86^|x64^|Both] [Main^|Resources^|MPCHC^|IconLib^|Translations^|Filters^|API^|All] [Debug^|Release] [Lite] [Packages^|Installer^|7z] [LAVFilters] [VS2013] [Analyze]
+ECHO %~nx0 [Clean^|Build^|Rebuild] [x86^|x64^|Both] [Main^|Resources^|MPCHC^|IconLib^|Translations^|Filters^|API^|All] [Debug^|Release] [Lite] [Packages^|Installer^|7z] [LAVFilters] [VS2015] [Analyze]
ECHO.
ECHO Notes: You can also prefix the commands with "-", "--" or "/".
ECHO Debug only applies to mpc-hc.sln.
ECHO The arguments are not case sensitive and can be ommitted.
ECHO. & ECHO.
ECHO Executing %~nx0 without any arguments will use the default ones:
-ECHO "%~nx0 Build Both MPCHC Release VS2013"
+ECHO "%~nx0 Build Both MPCHC Release VS2015"
ECHO. & ECHO.
ECHO Examples:
ECHO %~nx0 x86 Resources -Builds the x86 resources
@@ -561,7 +506,7 @@ TITLE Compiling MPC-HC %COMPILER% [ERROR]
ECHO Not all build dependencies were found.
ECHO.
ECHO See "docs\Compilation.txt" for more information.
-CALL :SubMsg "ERROR" "Compilation failed!" & EXIT /B
+CALL "%COMMON%" :SubMsg "ERROR" "Compilation failed!" & EXIT /B
:UnsupportedSwitch
@@ -571,68 +516,4 @@ ECHO.
ECHO "%~nx0 %*"
ECHO.
ECHO Run "%~nx0 help" for details about the commandline switches.
-CALL :SubMsg "ERROR" "Compilation failed!" & EXIT /B
-
-
-:SubMsg
-ECHO. & ECHO ------------------------------
-IF /I "%~1" == "ERROR" (
- CALL :SubColorText "0C" "[%~1]" "%~2"
-) ELSE IF /I "%~1" == "INFO" (
- CALL :SubColorText "0A" "[%~1]" "%~2"
-) ELSE IF /I "%~1" == "WARNING" (
- CALL :SubColorText "0E" "[%~1]" "%~2"
-)
-ECHO ------------------------------ & ECHO.
-IF /I "%~1" == "ERROR" (
- IF NOT DEFINED SILENT (
- ECHO Press any key to exit...
- PAUSE >NUL
- )
- ENDLOCAL
- EXIT /B 1
-) ELSE (
- EXIT /B
-)
-
-
-:SubColorText
-IF DEFINED NOCOLORS ECHO %~2 %~3 & EXIT /B
-FOR /F "tokens=1,2 delims=#" %%G IN (
- '"PROMPT #$H#$E# & ECHO ON & FOR %%H IN (1) DO REM"') DO (
- SET "DEL=%%G")
-<NUL SET /p ".=%DEL%" > "%~2"
-FINDSTR /v /a:%1 /R ".18" "%~2" NUL
-DEL "%~2" > NUL 2>&1
-REM The space in the following ECHO is intentional
-ECHO %~3
-EXIT /B
-
-
-:SubGetDuration
-SET START_TIME=%START_TIME: =%
-SET END_TIME=%END_TIME: =%
-
-FOR /F "tokens=1-4 delims=:.," %%G IN ("%START_TIME%") DO (
- SET /A "STARTTIME=(100%%G %% 100) * 360000 + (100%%H %% 100) * 6000 + (100%%I %% 100) * 100 + (100%%J %% 100)"
-)
-
-FOR /F "tokens=1-4 delims=:.," %%G IN ("%END_TIME%") DO (
- SET /A "ENDTIME=(100%%G %% 100) * 360000 + (100%%H %% 100) * 6000 + (100%%I %% 100) * 100 + (100%%J %% 100)"
-)
-
-SET /A DURATION=%ENDTIME%-%STARTTIME%
-IF %ENDTIME% LSS %STARTTIME% SET /A "DURATION+=24 * 360000"
-
-SET /A DURATIONH=%DURATION% / 360000
-SET /A DURATIONM=(%DURATION% - %DURATIONH%*360000) / 6000
-SET /A DURATIONS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000) / 100
-SET /A DURATIONHS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000 - %DURATIONS%*100)*10
-
-IF %DURATIONH% EQU 0 (SET DURATIONH=) ELSE (SET DURATIONH=%DURATIONH%h )
-IF %DURATIONM% EQU 0 (SET DURATIONM=) ELSE (SET DURATIONM=%DURATIONM%m )
-IF %DURATIONS% EQU 0 (SET DURATIONS=) ELSE (SET DURATIONS=%DURATIONS%s )
-IF %DURATIONHS% EQU 0 (SET DURATIONHS=) ELSE (SET DURATIONHS=%DURATIONHS%ms)
-
-SET "DURATION=%DURATIONH%%DURATIONM%%DURATIONS%%DURATIONHS%"
-EXIT /B
+CALL "%COMMON%" :SubMsg "ERROR" "Compilation failed!" & EXIT /B
diff --git a/build/About.txt b/build/About.txt
new file mode 100644
index 000000000..887dd7fbe
--- /dev/null
+++ b/build/About.txt
@@ -0,0 +1 @@
+Generates git-describe and environment info through custom nmake command.
diff --git a/build/BuildConfig.vcxproj b/build/BuildConfig.vcxproj
new file mode 100644
index 000000000..e7631a9bb
--- /dev/null
+++ b/build/BuildConfig.vcxproj
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <Text Include="About.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="version_rev.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <Manifest Include="..\src\mpc-hc\res\mpc-hc.exe.manifest" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{981574AE-5A5E-4F27-BDF1-1B841E374CFF}</ProjectGuid>
+ <ProjectName>BuildConfig</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\src\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\src\common.props" />
+ </ImportGroup>
+ <PropertyGroup>
+ <BaseIntermediateOutputPath>$(IntDir)</BaseIntermediateOutputPath>
+ <NMakeBuildCommandLine>..\update_version.bat --quiet</NMakeBuildCommandLine>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/common.bat b/common.bat
new file mode 100644
index 000000000..24a4210b8
--- /dev/null
+++ b/common.bat
@@ -0,0 +1,168 @@
+@ECHO OFF
+REM (C) 2015 see Authors.txt
+REM
+REM This file is part of MPC-HC.
+REM
+REM MPC-HC is free software; you can redistribute it and/or modify
+REM it under the terms of the GNU General Public License as published by
+REM the Free Software Foundation; either version 3 of the License, or
+REM (at your option) any later version.
+REM
+REM MPC-HC is distributed in the hope that it will be useful,
+REM but WITHOUT ANY WARRANTY; without even the implied warranty of
+REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+REM GNU General Public License for more details.
+REM
+REM You should have received a copy of the GNU General Public License
+REM along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+IF "%1" == "" CALL :SubMsg "ERROR" "%~nx0, No argument was provided." & EXIT /B
+PUSHD %~dp0
+CALL %*
+POPD
+EXIT /B
+
+:SubPreBuild
+IF EXIST "build.user.bat" CALL "build.user.bat"
+
+IF NOT DEFINED MPCHC_MINGW32 IF DEFINED MINGW32 (SET "MPCHC_MINGW32=%MINGW32%") ELSE (EXIT /B 1)
+IF NOT DEFINED MPCHC_MINGW64 IF DEFINED MINGW64 (SET "MPCHC_MINGW64=%MINGW64%") ELSE (EXIT /B 1)
+IF NOT DEFINED MPCHC_MSYS IF DEFINED MSYS (SET "MPCHC_MSYS=%MSYS%") ELSE (EXIT /B 1)
+
+IF NOT EXIST "%MPCHC_MINGW32%" EXIT /B 1
+IF NOT EXIST "%MPCHC_MINGW64%" EXIT /B 1
+IF NOT EXIST "%MPCHC_MSYS%" EXIT /B 1
+EXIT /B
+
+:SubSetPath
+CALL :SubPreBuild
+IF %ERRORLEVEL% NEQ 0 EXIT /B 1
+SET "PATH=%MPCHC_MSYS%\usr\bin;%MPCHC_MSYS%\bin;%MPCHC_MINGW32%\bin;%PATH%"
+EXIT /B
+
+:SubDoesExist
+FOR %%G IN (%~1) DO (SET FOUND=%%~$PATH:G)
+IF NOT DEFINED FOUND EXIT /B 1
+EXIT /B
+
+:SubGetVersion
+REM Get the version
+IF NOT EXIST "include\version_rev.h" SET "FORCE_VER_UPDATE=True"
+IF /I "%FORCE_VER_UPDATE%" == "True" CALL "update_version.bat" && SET "FORCE_VER_UPDATE=False"
+
+FOR /F "tokens=2,3" %%A IN ('FINDSTR /R /C:"define MPC_VERSION_[M,P]" "include\version.h"') DO (
+ SET "%%A=%%B"
+)
+
+FOR /F "tokens=2,3" %%A IN ('FINDSTR /R /C:"define MPC" "build\version_rev.h"') DO (
+ SET "%%A=%%B"
+)
+
+IF "%MPC_VERSION_REV%" NEQ "0" (SET "MPCHC_NIGHTLY=1") ELSE (SET "MPCHC_NIGHTLY=0")
+
+SET "MPCHC_HASH=%MPCHC_HASH:~4,-2%"
+IF DEFINED MPCHC_BRANCH (
+ SET "MPCHC_BRANCH=%MPCHC_BRANCH:~4,-2%"
+)
+
+IF "%MPCHC_NIGHTLY%" NEQ "0" (
+ SET "MPCHC_VER=%MPC_VERSION_MAJOR%.%MPC_VERSION_MINOR%.%MPC_VERSION_PATCH%.%MPC_VERSION_REV%"
+) ELSE (
+ SET "MPCHC_VER=%MPC_VERSION_MAJOR%.%MPC_VERSION_MINOR%.%MPC_VERSION_PATCH%"
+)
+EXIT /B
+
+:SubDetectCurl
+IF EXIST curl.exe (SET "CURL=curl.exe" & EXIT /B)
+IF EXIST "%CURL_PATH%\curl.exe" (SET "CURL=%CURL_PATH%\curl.exe" & EXIT /B)
+IF EXIST "%CURL_PATH%\bin\curl.exe" (SET "CURL=%CURL_PATH%\bin\curl.exe" & EXIT /B)
+FOR %%G IN (curl.exe) DO (SET "CURL_PATH=%%~$PATH:G")
+IF EXIST "%CURL_PATH%" (SET "CURL=%CURL_PATH%" & EXIT /B)
+EXIT /B
+
+:SubDetectTar
+IF EXIST tar.exe (SET "TAR=tar.exe" & EXIT /B)
+IF EXIST "%TAR_PATH%\tar.exe" (SET "TAR=%TAR_PATH%\tar.exe" & EXIT /B)
+FOR %%G IN (tar.exe) DO (SET "TAR_PATH=%%~$PATH:G")
+IF EXIST "%TAR_PATH%" (SET "TAR=%TAR_PATH%" & EXIT /B)
+EXIT /B
+
+:SubDetectInnoSetup
+FOR /F "tokens=5*" %%A IN (
+ 'REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1" /v "Inno Setup: App Path" 2^>NUL ^| FIND "REG_SZ" ^|^|
+ REG QUERY "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1" /v "Inno Setup: App Path" 2^>NUL ^| FIND "REG_SZ"') DO SET "InnoSetupPath=%%B\ISCC.exe"
+EXIT /B
+
+:SubDetectSevenzipPath
+FOR %%G IN (7z.exe) DO (SET "SEVENZIP_PATH=%%~$PATH:G")
+IF EXIST "%SEVENZIP_PATH%" (SET "SEVENZIP=%SEVENZIP_PATH%" & EXIT /B)
+
+FOR %%G IN (7za.exe) DO (SET "SEVENZIP_PATH=%%~$PATH:G")
+IF EXIST "%SEVENZIP_PATH%" (SET "SEVENZIP=%SEVENZIP_PATH%" & EXIT /B)
+
+FOR /F "tokens=2*" %%A IN (
+ 'REG QUERY "HKLM\SOFTWARE\7-Zip" /v "Path" 2^>NUL ^| FIND "REG_SZ" ^|^|
+ REG QUERY "HKLM\SOFTWARE\Wow6432Node\7-Zip" /v "Path" 2^>NUL ^| FIND "REG_SZ"') DO SET "SEVENZIP=%%B\7z.exe"
+EXIT /B
+
+:SubMsg
+ECHO. & ECHO ------------------------------
+IF /I "%~1" == "ERROR" (
+ CALL :SubColorText "0C" "[%~1]" "%~2"
+) ELSE IF /I "%~1" == "INFO" (
+ CALL :SubColorText "0A" "[%~1]" "%~2"
+) ELSE IF /I "%~1" == "WARNING" (
+ CALL :SubColorText "0E" "[%~1]" "%~2"
+)
+ECHO ------------------------------ & ECHO.
+IF /I "%~1" == "ERROR" (
+ IF NOT DEFINED SILENT (
+ ECHO Press any key to exit...
+ PAUSE >NUL
+ )
+ ENDLOCAL
+ EXIT /B 1
+) ELSE (
+ EXIT /B
+)
+
+:SubColorText
+IF DEFINED NOCOLORS ECHO %~2 %~3 & EXIT /B
+FOR /F "tokens=1,2 delims=#" %%G IN (
+ '"PROMPT #$H#$E# & ECHO ON & FOR %%H IN (1) DO REM"') DO (
+ SET "DEL=%%G")
+<NUL SET /p ".=%DEL%" > "%~2"
+FINDSTR /v /a:%1 /R ".18" "%~2" NUL
+DEL "%~2" > NUL 2>&1
+REM The space in the following ECHO is intentional
+ECHO %~3
+EXIT /B
+
+:SubGetDuration
+SET START_TIME=%START_TIME: =%
+SET END_TIME=%END_TIME: =%
+
+FOR /F "tokens=1-4 delims=:.," %%G IN ("%START_TIME%") DO (
+ SET /A "STARTTIME=(100%%G %% 100) * 360000 + (100%%H %% 100) * 6000 + (100%%I %% 100) * 100 + (100%%J %% 100)"
+)
+
+FOR /F "tokens=1-4 delims=:.," %%G IN ("%END_TIME%") DO (
+ SET /A "ENDTIME=(100%%G %% 100) * 360000 + (100%%H %% 100) * 6000 + (100%%I %% 100) * 100 + (100%%J %% 100)"
+)
+
+SET /A DURATION=%ENDTIME%-%STARTTIME%
+IF %ENDTIME% LSS %STARTTIME% SET /A "DURATION+=24 * 360000"
+
+SET /A DURATIONH=%DURATION% / 360000
+SET /A DURATIONM=(%DURATION% - %DURATIONH%*360000) / 6000
+SET /A DURATIONS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000) / 100
+SET /A DURATIONHS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000 - %DURATIONS%*100)*10
+
+IF %DURATIONH% EQU 0 (SET DURATIONH=) ELSE (SET DURATIONH=%DURATIONH%h )
+IF %DURATIONM% EQU 0 (SET DURATIONM=) ELSE (SET DURATIONM=%DURATIONM%m )
+IF %DURATIONS% EQU 0 (SET DURATIONS=) ELSE (SET DURATIONS=%DURATIONS%s )
+IF %DURATIONHS% EQU 0 (SET DURATIONHS=) ELSE (SET DURATIONHS=%DURATIONHS%ms)
+
+SET "DURATION=%DURATIONH%%DURATIONM%%DURATIONS%%DURATIONHS%"
+EXIT /B
diff --git a/contrib/astyle.ini b/contrib/astyle.ini
index 5442879d3..f3cb4528b 100644
--- a/contrib/astyle.ini
+++ b/contrib/astyle.ini
@@ -1,4 +1,4 @@
-# (C) 2012-2013 see Authors.txt
+# (C) 2012-2015 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -20,12 +20,12 @@
--indent=spaces=4 --style=kr
--indent-switches --indent-namespaces --indent-col1-comments
#--indent-preproc-cond
+--max-instatement-indent=65
--attach-inlines
--pad-header --pad-oper --unpad-paren
--align-pointer=type --align-reference=type
--close-templates
--add-brackets
---keep-one-line-blocks
--convert-tabs
--lineend=windows --preserve-date
--suffix=none
@@ -34,17 +34,18 @@
# directories
--exclude=bin
+--exclude=cov-int
--exclude=thirdparty
# common files
--exclude=resource.h
# include dir
---exclude=atl --exclude=avisynth --exclude=dx --exclude=lglcd
---exclude=qt --exclude=realmedia --exclude=vd2 --exclude=winddk
---exclude=inttypes.h --exclude=libdivide.h --exclude=MediaInfoDLL.h
---exclude=mvrInterfaces.h --exclude=SubRenderIntf.h --exclude=unrar.h
---exclude=Utf8.h --exclude=version_rev.h
+--exclude=avisynth --exclude=dx --exclude=lglcd --exclude=qt
+--exclude=realmedia --exclude=vd2 --exclude=winddk --exclude=libdivide.h
+--exclude=MediaInfoDLL.h --exclude=mvrInterfaces.h --exclude=SubRenderIntf.h
+--exclude=unrar.h --exclude=Utf8.h --exclude=version_rev.h --exclude=ISubRender.h
+--exclude=ISubPic.h
# src/DeCSS
--exclude=CSSauth.cpp --exclude=CSSauth.h --exclude=CSSscramble.cpp --exclude=CSSscramble.h
@@ -54,7 +55,7 @@
--exclude=deinterlace.cpp --exclude=vd_asm.cpp --exclude=vd_asm.h --exclude=vd.cpp --exclude=vd.h
# src/mpc-hc
---exclude=LineNumberEdit.cpp --exclude=LineNumberEdit.h --exclude=Struct.h
+--exclude=Struct.h
# src/MPCTestAPI
--exclude=HScrollListBox.cpp --exclude=HScrollListBox.h
diff --git a/contrib/coverity.bat b/contrib/coverity.bat
index d65f2094c..3dcd21c61 100755
--- a/contrib/coverity.bat
+++ b/contrib/coverity.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2013-2014 see Authors.txt
+REM (C) 2013-2015 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -18,29 +18,22 @@ REM along with this program. If not, see <http://www.gnu.org/licenses/>.
SETLOCAL
+SET "FILE_DIR=%~dp0"
+PUSHD "%FILE_DIR%"
-PUSHD %~dp0
-
-IF NOT DEFINED COVDIR SET "COVDIR=H:\progs\thirdparty\cov-analysis-win64-7.5.0"
-IF DEFINED COVDIR IF NOT EXIST "%COVDIR%" (
- ECHO.
- ECHO ERROR: Coverity not found in "%COVDIR%"
- GOTO End
-)
+SET "COMMON=%FILE_DIR%..\common.bat"
+IF EXIST "..\build.user.bat" CALL "..\build.user.bat"
-CALL "%VS120COMNTOOLS%\vsvars32.bat"
-IF %ERRORLEVEL% NEQ 0 (
- ECHO vsvars32.bat call failed.
- GOTO End
-)
+IF NOT EXIST "%COV_PATH%" (CALL "%COMMON%" :SubMsg "ERROR" "Coverity not found in '%COV_PATH%'" & EXIT /B)
:Cleanup
IF EXIST "cov-int" RD /q /s "cov-int"
-IF EXIST "MPC-HC.lzma" DEL "MPC-HC.lzma"
-IF EXIST "MPC-HC.tar" DEL "MPC-HC.tar"
-IF EXIST "MPC-HC.tgz" DEL "MPC-HC.tgz"
+IF EXIST "MPC-HC.tar.xz" DEL "MPC-HC.tar.xz"
+IF EXIST "MPC-HC.tar" DEL "MPC-HC.tar"
+IF EXIST "MPC-HC.tgz" DEL "MPC-HC.tgz"
+IF EXIST "cov_upload.log" DEL "cov_upload.log"
:Main
@@ -48,47 +41,62 @@ CALL "..\build.bat" clean Lite Both Main Release silent
CALL "..\build.bat" clean Filters Both Release silent
CALL "..\build.bat" clean IconLib Both Release silent
CALL "..\build.bat" clean Api Both Release silent
-"%COVDIR%\bin\cov-build.exe" --dir cov-int "..\build.bat" Build Lite Both Main Release silent
-"%COVDIR%\bin\cov-build.exe" --dir cov-int "..\build.bat" Build Filters Both Release silent
-"%COVDIR%\bin\cov-build.exe" --dir cov-int "..\build.bat" Build IconLib Both Release silent
-"%COVDIR%\bin\cov-build.exe" --dir cov-int "..\build.bat" Build Api Both Release silent
+"%COV_PATH%\bin\cov-build.exe" --dir cov-int "..\build.bat" Build Lite Both Main Release silent
+"%COV_PATH%\bin\cov-build.exe" --dir cov-int "..\build.bat" Build Filters Both Release silent
+"%COV_PATH%\bin\cov-build.exe" --dir cov-int "..\build.bat" Build IconLib Both Release silent
+"%COV_PATH%\bin\cov-build.exe" --dir cov-int "..\build.bat" Build Api Both Release silent
+IF %ERRORLEVEL% NEQ 0 (CALL "%COMMON%" :SubMsg "ERROR" "Build failed." & EXIT /B)
:tar
-tar --version 1>&2 2>NUL || (ECHO. & ECHO ERROR: tar not found & GOTO SevenZip)
-tar caf "MPC-HC.lzma" "cov-int"
-GOTO End
+CALL "%COMMON%" :SubDetectTar
+IF NOT EXIST "%TAR%" (CALL "%COMMON%" :SubMsg "WARNING" "tar not found. Trying 7-zip..." & GOTO SevenZip)
+SET "FILE_NAME=MPC-HC.tar.xz"
+SET "XZ_OPT=-9e"
+REM You can add -T{N} where {N} stands for count of threads to use. 0 will use all available threads.
+REM Pay attention to memory usage, -9eT4 uses over 5GB of RAM, but -9eT1 uses 700MB in my test.
+REM Lowering compression preset will also decrease memory usage significantly.
-:SevenZip
-CALL :SubDetectSevenzipPath
-
-rem Coverity is totally bogus with lzma...
-rem And since I cannot replicate the arguments with 7-Zip, just use tar/gzip.
-IF EXIST "%SEVENZIP%" (
- "%SEVENZIP%" a -ttar "MPC-HC.tar" "cov-int"
- "%SEVENZIP%" a -tgzip "MPC-HC.tgz" "MPC-HC.tar"
- IF EXIST "MPC-HC.tar" DEL "MPC-HC.tar"
- GOTO End
+%TAR% cJf %FILE_NAME% cov-int
+IF %ERRORLEVEL% NEQ 0 (
+ REM Fallback for 32-bit version of xz.
+ CALL "%COMMON%" :SubMsg "WARNING" "Fallback for 32-bit xz. Trying again with 'XZ_OPT=-7e'..."
+ SET "XZ_OPT=-7e"
+ %TAR% cJf %FILE_NAME% cov-int
)
+IF %ERRORLEVEL% NEQ 0 (CALL "%COMMON%" :SubMsg "WARNING" "tar failed. Trying 7-zip..." & GOTO SevenZip)
+GOTO Upload
-:SubDetectSevenzipPath
-FOR %%G IN (7z.exe) DO (SET "SEVENZIP_PATH=%%~$PATH:G")
-IF EXIST "%SEVENZIP_PATH%" (SET "SEVENZIP=%SEVENZIP_PATH%" & EXIT /B)
-
-FOR %%G IN (7za.exe) DO (SET "SEVENZIP_PATH=%%~$PATH:G")
-IF EXIST "%SEVENZIP_PATH%" (SET "SEVENZIP=%SEVENZIP_PATH%" & EXIT /B)
-FOR /F "tokens=2*" %%A IN (
- 'REG QUERY "HKLM\SOFTWARE\7-Zip" /v "Path" 2^>NUL ^| FIND "REG_SZ" ^|^|
- REG QUERY "HKLM\SOFTWARE\Wow6432Node\7-Zip" /v "Path" 2^>NUL ^| FIND "REG_SZ"') DO SET "SEVENZIP=%%B\7z.exe"
-EXIT /B
+:SevenZip
+CALL "%COMMON%" :SubDetectSevenzipPath
+IF NOT EXIST "%SEVENZIP%" (CALL "%COMMON%" :SubMsg "ERROR" "7-zip not found." & EXIT /B)
+
+SET "FILE_NAME=MPC-HC.tgz"
+REM 7-Zip doesn't support tarball compliant LZMA2 archives, just use tar/gzip.
+"%SEVENZIP%" a -ttar "MPC-HC.tar" "cov-int"
+IF %ERRORLEVEL% NEQ 0 (CALL "%COMMON%" :SubMsg "ERROR" "7-zip failed." & EXIT /B)
+"%SEVENZIP%" a -tgzip "%FILE_NAME%" "MPC-HC.tar"
+IF %ERRORLEVEL% NEQ 0 (CALL "%COMMON%" :SubMsg "ERROR" "7-zip failed." & EXIT /B)
+IF EXIST "MPC-HC.tar" DEL "MPC-HC.tar"
+GOTO Upload
+
+
+:Upload
+CALL "..\build.bat" GetVersion
+CALL "%COMMON%" :SubDetectCurl
+IF NOT EXIST "%CURL%" (CALL "%COMMON%" :SubMsg "WARNING" "curl not found. Upload aborted." & GOTO End)
+IF NOT DEFINED COV_TOKEN (CALL "%COMMON%" :SubMsg "WARNING" "COV_TOKEN not defined. Upload aborted." & GOTO End)
+IF NOT DEFINED COV_EMAIL (CALL "%COMMON%" :SubMsg "WARNING" "COV_EMAIL not defined. Upload aborted." & GOTO End)
+%CURL% --form token=%COV_TOKEN% --form email=%COV_EMAIL% --form file=@%FILE_NAME% --form version=%MPCHC_HASH% https://scan.coverity.com/builds?project=MPC-HC -o cov_upload.log
+GOTO End
:End
POPD
-ECHO. & ECHO Press any key to close this window...
+CALL "%COMMON%" :SubMsg "INFO" "Done. Press any key to exit..."
PAUSE >NUL
ENDLOCAL
EXIT /B
diff --git a/contrib/mpc-hc.cppcheck b/contrib/mpc-hc.cppcheck
index 1bf6c57ef..4367061f7 100644
--- a/contrib/mpc-hc.cppcheck
+++ b/contrib/mpc-hc.cppcheck
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="1">
<root name="."/>
+ <importproject>../mpc-hc.sln</importproject>
<includedir>
<dir name="include/"/>
</includedir>
@@ -15,9 +16,8 @@
</libraries>
<suppressions>
<suppression>cstyleCast</suppression>
+ <suppression>noExplicitConstructor</suppression>
<suppression>redundantAssignment</suppression>
- <suppression>unreadVariable</suppression>
- <suppression>unusedPrivateFunction</suppression>
<suppression>variableScope</suppression>
</suppressions>
</project>
diff --git a/contrib/pre-commit.sh b/contrib/pre-commit.sh
index d98edbbde..3236810f6 100644
--- a/contrib/pre-commit.sh
+++ b/contrib/pre-commit.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# (C) 2013-2014 see Authors.txt
+# (C) 2013-2015 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -35,12 +35,12 @@ astyle_ignore_excluded=y
astyle_ignore_stashed=n
# internal variables
-versioncheck_version=4
+versioncheck_version=6
versioncheck_path=contrib/pre-commit.sh
astyle_config=contrib/astyle.ini
astyle_extensions=(cpp h)
-astyle_version='Artistic Style Version 2.04'
-checkyear_extensions=(bat cpp h hlsl iss py sh)
+astyle_version='Artistic Style Version 2.05.1'
+checkyear_extensions=(bat cpp h hlsl iss po py sh)
checkyear_pattern1='\(C\) (([0-9][0-9][0-9][0-9]-)?[0-9][0-9][0-9][0-9](, )?)+ see Authors.txt'
year=$(date +%Y)
checkyear_pattern2=''"$year"' see Authors.txt'
diff --git a/contrib/run_astyle.bat b/contrib/run_astyle.bat
index b08b32a83..08e4b05d5 100755
--- a/contrib/run_astyle.bat
+++ b/contrib/run_astyle.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2012-2013 see Authors.txt
+REM (C) 2012-2016 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -18,19 +18,20 @@ REM along with this program. If not, see <http://www.gnu.org/licenses/>.
SETLOCAL
+SET "FILE_DIR=%~dp0"
+PUSHD "%FILE_DIR%"
-PUSHD %~dp0
-
-SET "AStyleVerMin=2.04"
+SET "AStyleVerReq=2.05.1"
astyle --version 2>NUL || (ECHO. & ECHO ERROR: AStyle not found & GOTO End)
CALL :SubCheckVer || GOTO End
:Start
-TITLE Running astyle using %~dp0astyle.ini
+TITLE Running astyle using %FILE_DIR%astyle.ini
IF "%~1" == "" (
- astyle -r --options=astyle.ini ..\*.h ..\*.cpp
+ astyle -r --options=astyle.ini ..\*.cpp
+ astyle -r --options=astyle.ini --keep-one-line-blocks ..\*.h
) ELSE (
FOR %%G IN (%*) DO astyle --options=astyle.ini %%G
)
@@ -52,8 +53,8 @@ FOR /F "tokens=4 delims= " %%A IN ('astyle --version 2^>^&1 NUL') DO (
SET "AStyleVer=%%A"
)
-IF %AStyleVer% LSS %AStyleVerMin% (
- ECHO. & ECHO ERROR: AStyle v%AStyleVer% is too old, please update AStyle to v%AStyleVerMin% or newer.
+IF %AStyleVer% NEQ %AStyleVerReq% (
+ ECHO. & ECHO ERROR: AStyle v%AStyleVerReq% is required.
EXIT /B 1
)
EXIT /B
diff --git a/contrib/sign.bat b/contrib/sign.bat
index d5711b41f..006e26fb6 100755
--- a/contrib/sign.bat
+++ b/contrib/sign.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2013 see Authors.txt
+REM (C) 2013, 2015-2016 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -18,6 +18,7 @@ REM along with this program. If not, see <http://www.gnu.org/licenses/>.
SETLOCAL
+SET "FILE_DIR=%~dp0"
IF "%~1" == "" (
ECHO %~nx0: No input specified!
@@ -25,47 +26,27 @@ IF "%~1" == "" (
GOTO END
)
-IF NOT DEFINED VS120COMNTOOLS (
- ECHO %~nx0: Visual Studio 2013 does not seem to be installed...
+IF NOT DEFINED VS140COMNTOOLS (
+ ECHO %~nx0: Visual Studio 2015 does not seem to be installed...
SET SIGN_ERROR=True
GOTO END
)
-IF NOT EXIST "%~dp0..\signinfo.txt" (
- ECHO %~nx0: %~dp0..\signinfo.txt is not present!
+IF NOT EXIST "%FILE_DIR%..\signinfo.txt" (
+ ECHO %~nx0: %FILE_DIR%..\signinfo.txt is not present!
SET SIGN_ERROR=True
GOTO END
)
-SET SIGN_CMD=
-SET /P SIGN_CMD=<%~dp0..\signinfo.txt
-
-TITLE Signing "%~1"...
-ECHO. & ECHO Signing "%~1"...
-
-signtool /? 2>NUL || CALL "%VS120COMNTOOLS%..\..\VC\vcvarsall.bat" 2>NUL
+signtool /? 2>NUL || CALL "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" 2>NUL
IF %ERRORLEVEL% NEQ 0 (
ECHO vcvarsall.bat call failed.
GOTO End
)
REM Repeat n times when signing fails
-SET REPEAT=3
-SET TRY=0
-
-:SIGN
-signtool sign %SIGN_CMD% "%~1"
-SET /A TRY+=1
-IF %ERRORLEVEL% NEQ 0 (
- IF TRY LSS REPEAT (
- REM Wait 5 seconds before next try
- PING -n 5 127.0.0.1 >NUL
- GOTO SIGN
- )
- SET SIGN_ERROR=True
- GOTO END
-)
-
+SET REPEAT=5
+FOR /F "delims=" %%A IN (%FILE_DIR%..\signinfo.txt) DO (SET "SIGN_CMD=%%A" && CALL :START_SIGN %1)
:END
IF /I "%SIGN_ERROR%" == "True" (
@@ -75,3 +56,21 @@ IF /I "%SIGN_ERROR%" == "True" (
)
ENDLOCAL
EXIT /B
+
+:START_SIGN
+IF /I "%SIGN_ERROR%" == "True" EXIT /B
+REM %1 is name of the file to sign
+TITLE Signing "%~1"...
+ECHO. & ECHO Signing "%~1"...
+SET TRY=0
+
+:SIGN
+SET /A TRY+=1
+signtool sign %SIGN_CMD% %1
+IF %ERRORLEVEL% EQU 0 EXIT /B
+IF %TRY% LSS %REPEAT% (
+ REM Wait 5 seconds before next try
+ PING -n 5 127.0.0.1 > NUL
+ GOTO SIGN
+)
+SET SIGN_ERROR=True
diff --git a/distrib/Languages/Arabic.isl b/distrib/Languages/Arabic.isl
index 8460585f2..ec0533ac4 100644
--- a/distrib/Languages/Arabic.isl
+++ b/distrib/Languages/Arabic.isl
@@ -1,7 +1,6 @@
; *** Inno Setup version 5.5.3+ Arabic messages ***
;
-; Translated by Ahmad Alani (Ahmadalani75@hotmail.com)
-; To download user-contributed translations of this file, go to:
+; Translated by Awadh Al-Ghaamdi (awadh_al_ghaamdi@hotmail.com)
; http://www.jrsoftware.org/files/istrans/
;
; Note: When translating this text, do not add periods (.) to the end of
@@ -70,8 +69,8 @@ ErrorTooManyFilesInDir= "%1"%n
; *** Setup common messages
ExitSetupTitle=
-ExitSetupMessage=. . %n%n . %n%n
-AboutSetupMenuItem=...&
+ExitSetupMessage= . .%n%n .%n%n ̿
+AboutSetupMenuItem=& ...
AboutSetupTitle=
AboutSetupMessage=%1 %2%n%3%n%n%1 :%n%4
AboutSetupNote=
@@ -97,7 +96,7 @@ SelectLanguageTitle=
SelectLanguageLabel= :
; *** Common wizard text
-ClickNext= %n%n :
+ClickNext= %n%n
BeveledLabel=
BrowseDialogTitle=
BrowseDialogLabel= ,
@@ -208,7 +207,7 @@ ApplicationsFound=
ApplicationsFound2= . ʡ
CloseApplications=&
DontCloseApplications=&
-ErrorCloseApplications= . .
+ErrorCloseApplications= .
; *** "Installing" wizard page
WizardInstalling=
@@ -227,7 +226,7 @@ NoRadio=&
; used for example as 'Run MyProg.exe'
RunEntryExec= %1
; used for example as 'View Readme.txt'
-RunEntryShellExec= %1
+RunEntryShellExec= %1
; *** "Setup Needs the Next Disk" stuff
ChangeDiskTitle=
diff --git a/distrib/Languages/Armenian.islu b/distrib/Languages/Armenian.islu
deleted file mode 100644
index 3aa9a6503..000000000
--- a/distrib/Languages/Armenian.islu
+++ /dev/null
@@ -1,332 +0,0 @@
-; *** Inno Setup version 5.5.3+ Armenian messages ***
-;
-; Armenian translation by Hrant Ohanyan
-; E-mail: hrantohanyan@mail.am
-; Translation home page: http://www.haysoft.org
-; Last modification date: 2013-02-01
-;
-[LangOptions]
-LanguageName=Armenian
-LanguageID=$042B
-LanguageCodePage=0
-; If the language you are translating to requires special font faces or
-; sizes, uncomment any of the following entries and change them accordingly.
-;DialogFontName=
-;DialogFontSize=8
-;WelcomeFontName=Verdana
-;WelcomeFontSize=12
-;TitleFontName=Arial
-;TitleFontSize=29
-;CopyrightFontName=Arial
-;CopyrightFontSize=8
-
-[Messages]
-
-; *** Application titles
-SetupAppTitle=Տեղակայում
-SetupWindowTitle=%1-ի տեղակայում
-UninstallAppTitle=Ջնջում
-UninstallAppFullTitle=%1-ի ջնջում
-
-; *** Misc. common
-InformationTitle=Տեղեկություն
-ConfirmTitle=Հաստատեք
-ErrorTitle=Սխալ
-
-; *** SetupLdr messages
-SetupLdrStartupMessage=Այս ծրագիրը կտեղակայի %1-ը Ձեր համակարգչում։ Շարունակե՞լ։
-LdrCannotCreateTemp=Հնարավոր չէ ստեղծել ժամանակավոր ֆայլ։ Տեղակայումը ընդհատվել է
-LdrCannotExecTemp=Հնարավոր չէ ֆայլ բացել ժամանակավոր թղթապանակից։ Տեղակայումը ընդհատվել է
-
-; *** Startup error messages
-LastErrorMessage=%1.%n%nՍխալ %2: %3
-SetupFileMissing=%1 ֆայլը բացակայում է տեղակայման թղթապանակից։ Վերացրեք խնդիրը կամ բեռնեք ծրագրի նոր տարբերակը։
-SetupFileCorrupt=Տեղակայման ֆայլերը վնասված են։
-SetupFileCorruptOrWrongVer=Տեղակայման այս ֆայլերը վնասված են կամ անհամատեղելի են տեղակայիչի այս տարբերակի հետ։
-InvalidParameter=Հրամանի տողում նշված է սխալ հրաման.%n%n%1
-SetupAlreadyRunning=Տեղակայիչը արդեն աշխատում է։
-WindowsVersionNotSupported=Ծրագիրը չի աջակցում այս համակարգչում տեղակայված Windows-ի տարբերակը։
-WindowsServicePackRequired=Ծրագիրը պահանջում է %1 Service Pack %2 կամ ավելի բարձր։
-NotOnThisPlatform=Այս ծրագիրը չի աշխատի %1-ում։
-OnlyOnThisPlatform=Այս ծրագիրւ հնարավոր է բացել միայն %1-ում։
-OnlyOnTheseArchitectures=Այս ծրագրի տեղակյաւոմը հնարավոր է միայն Windows-ի հետևյալ կառուցվածքներում՝ %n%n%1
-MissingWOW64APIs=Windows Ձեր տարբերակում բացակայում են 64 բիթանոց տեղակայման համար պահանջվող ֆունկցիաները։ Դրա համար Դուք պետք է տեղակայաեք թարմացումների հետևյալ փաթեթը՝ (Service Pack) %1։
-WinVersionTooLowError=Այս ծրագիրը պահանջում է %1 տարբերակը %2 կամ ավելի բարձր։
-WinVersionTooHighError=Ծրագիրը չի կարող տեղակայվել %1-ի %2 տարբերակում կամ ավելի բարձր։
-AdminPrivilegesRequired=Այս ծրագիրը տեղակայելու համար պահանջվում են Ադմինի իրավունքներ։
-PowerUserPrivilegesRequired=Այս ծրագիրը տեղակայելու համար պետք է մուտք գործել համակարգ որպես Ադմին կամ «Փորձառու օգտագործող» (Power Users).
-SetupAppRunningError=Նկատվել է %1-ի բացված օրինակ։ %n%nԽնդրում ենք փակել և սեղմել «ԼԱՎ»՝ շարունակելու համար, կամ «Մերժել»՝ փակելու համար։
-UninstallAppRunningError=Ջնջող ծրագիրը գտել է %1-ի բաց օրինակ։%n%nՓակեք այն և սեղմեք «ԼԱՎ»՝ շարունակելու համար, կամ «Մերժել»՝ փակելու համար։
-
-; *** Misc. errors
-ErrorCreatingDir=Հնարավոր չէ ստեղծել "%1" թղթապանակը
-ErrorTooManyFilesInDir=Հնարավոր չէ ստեղծել ֆայլ "%1" թղթապանակում, նրանում կան չափից ավելի շատ ֆայլեր
-
-; *** Setup common messages
-ExitSetupTitle=Տեղակայման ընդհատում
-ExitSetupMessage=Տեղակայումը չի ավարատվել։ Եթե ընդհատեք, ապա ծրագիրը չի տեղակայվի։%n%nԱվարտե՞լ։
-AboutSetupMenuItem=&Ծրագրի մասին...
-AboutSetupTitle=Ծրագրի մասին
-AboutSetupMessage=%1, տարբերակը %2%n%3%n%nՎեբ կայքը %1:%n%4
-AboutSetupNote=
-TranslatorNote=Armenian translation by Hrant Ohanyan »»» http://www.haysoft.org
-
-; *** Buttons
-ButtonBack=« &Նախորդը
-ButtonNext=&Հաջորդը »
-ButtonInstall=&Տեղակայել
-ButtonOK=ԼԱՎ
-ButtonCancel=Մերժել
-ButtonYes=&Այո
-ButtonYesToAll=Այո բոլորի &համար
-ButtonNo=&Ոչ
-ButtonNoToAll=Ո&չ բոլորի համար
-ButtonFinish=&Ավարտել
-ButtonBrowse=&Ընտրել...
-ButtonWizardBrowse=&Ընտրել...
-ButtonNewFolder=&Ստեղծել թղթապանակ
-
-; *** "Select Language" dialog messages
-SelectLanguageTitle=Ընտրեք տեղակայիչի լեզուն
-SelectLanguageLabel=Ընտրեք այն լեզուն, որը օգտագործվելու է տեղակայման ընթացքում.
-
-; *** Common wizard text
-ClickNext=Սեղմեք «Հաջորդը»՝ շարունակելու համար կամ «Մերժել»՝ տեղակայիչ ծրագրիը փակելու համար։
-BeveledLabel=
-BrowseDialogTitle=Ընտրեք թղթապանակը
-BrowseDialogLabel=Ընտրեք թղթապանակը ցանկից և սեղմեք «ԼԱՎ»։
-NewFolderName=Նոր թղթապանակ
-
-; *** "Welcome" wizard page
-WelcomeLabel1=Ձեզ ողջունում է [name]-ի տեղակայման վարպետը
-WelcomeLabel2=Ծրագիրը կտեղակայի [name/ver]-ը Ձեր համակարգչում։%n%nՇարունակելուց առաջ խորհուրդ ենք տալիս փակել բոլոր աշխատող ծրագրերը։
-
-; *** "Password" wizard page
-WizardPassword=Գաղտնաբառը
-PasswordLabel1=Ծրագիրը պաշտպանված է գաղտնաբառով։
-PasswordLabel3=Մուտքագրեք գաղտնաբառը և սեղմեք «Հաջորդը»։
-PasswordEditLabel=&Գաղտնաբառը.
-IncorrectPassword=Մուտքագրված գաղտնաբառը սխալ է, կրկին փորձեք։
-
-; *** "License Agreement" wizard page
-WizardLicense=Արտոնագրային համաձայնություն
-LicenseLabel=Խնդրում ենք շարունակելուց առաջ կարդալ հետևյալ տեղեկությունը։
-LicenseLabel3=Կարդացեք այս արտոնագրային համաձայնությունը։ Շարունակելուց առաջ Դուք պետք է ընդունեք նշված պայմանները։
-LicenseAccepted=Ես &ընդունում եմ արտոնագրային համաձայնությունը
-LicenseNotAccepted=Ես &չեմ ընդունում արտոնագրային համաձայնությունը
-
-; *** "Information" wizard pages
-WizardInfoBefore=Տեղեկություն
-InfoBeforeLabel=Շարունակելուց առաջ կարդացեք այս տեղեկությունը։
-InfoBeforeClickLabel=Եթե պատրաստ եք սեղմեք «Հաջորդը»։
-WizardInfoAfter=Տեղեկություն
-InfoAfterLabel=Շարունակելուց առաջ կարդացեք այս տեղեկությունը։
-InfoAfterClickLabel=Երբ պատրաստ լինեք շարունակելու սեղմեք «Հաջորդը»։
-
-; *** "User Information" wizard page
-WizardUserInfo=Տեղեկություն օգտվողի մասին
-UserInfoDesc=Գրեք տվյալներ Ձեր մասին
-UserInfoName=&Օօգտվողի անունը և ազգանունը.
-UserInfoOrg=&Կազմակերպությունը.
-UserInfoSerial=&Հերթական համարը.
-UserInfoNameRequired=Պետք է գրեք Ձեր անունը։
-
-; *** "Select Destination Location" wizard page
-WizardSelectDir=Ընտրեք տեղակայման թղթապանակը
-SelectDirDesc=Ո՞ր թղթապանակում տեղակայել [name]-ը։
-SelectDirLabel3=Ծրագիրը կտեղակայի [name]-ը հետևյալ թղթապանակում։
-SelectDirBrowseLabel=Սեղմեք «Հաջորդը»՝ շարունակելու համար։ Եթե ցանկանում եք ընտրել այլ թղթապանակ սեղմեք «Ընտրել»։
-DiskSpaceMBLabel=Պահանջվում է առնվազն [mb] ՄԲ ազատ տեղ։
-CannotInstallToNetworkDrive=Հնարավոր չէ տեղակայել Ցանցային պնակում։
-CannotInstallToUNCPath=Հնարավոր չէ տեղակայել UNC տեղում։
-InvalidPath=Պետք է նշեք ամբողջական ճանապարհը պնակի տառով, օրինակ՝%n%nC:\APP%n%nկամ UNC ձևով՝ %n%n\\սպասարկիչի_անունը\ռեսուրսի_անունը
-InvalidDrive=Ընտրված պնակը կամ ցանցային ճանապարհը գոյություն չունի կամ անհասանելի է։ Ընտրեք այլ ճանապարհ։
-DiskSpaceWarningTitle=Չկա պահանջվող ծավալի ազատ տեղ
-DiskSpaceWarning=Պահանջվում է ոչ քիչ քան %1 ԿԲ ազատ տեղ, մինչդեռ հասանելի է ընդամենը %2 ԿԲ։%n%nԱյնուհանդերձ, շարունակե՞լ։
-DirNameTooLong=Թղթապանակի անունը կամ ճանապարհը գերազանցում են հասանելի երկարությունը։
-InvalidDirName=Թղթապանակի նշված անունը անընդունելի է։
-BadDirName32=Անվան մեջ չպետք է լինեն նշաններ՝ %n%n%1
-DirExistsTitle=Թղթապանակը գոյություն ունի
-DirExists=Հետևյալ թղթապանակը՝ %n%n%1%n%n արդեն գոյություն ունի։ Այնուհանդերձ, տեղակայե՞լ այստեղ։
-DirDoesntExistTitle=Թղթապանակ գոյություն չունի
-DirDoesntExist=Հետևյալ թղթապանակը՝ %n%n%1%n%n, գոյություն չունի։ Ստեղծե՞լ այն։
-
-; *** "Select Components" wizard page
-WizardSelectComponents=Ընտրեք բաղադրիչները
-SelectComponentsDesc=Ո՞ր ֆայլերը պետք է տեղակայվեն։
-SelectComponentsLabel2=Ընտրեք այն ֆայլերը, որոնք պետք է տեղակայվեն, հանեք ընտրության նշանը այն ֆայլերից, որոնք չպետք է տեղակայվեն։ Սեղմեք «Հաջորդը»՝ շարունակելու համար։
-FullInstallation=Ամբողջական տեղակայում
-; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
-CompactInstallation=Ընդհանուր տեղակայում
-CustomInstallation=Ընտրովի տեղակայում
-NoUninstallWarningTitle=Տեղակայվող ֆայլերը
-NoUninstallWarning=Տեղակայիչ ծրագիրը հայտնաբերել է, որ հետևյալ բաղադրիչները արդեն տեղակայված են Ձեր համակարգչում։ %n%n%1%n%nԱյս բաղադրիչների ընտրության ետարկումը չի ջնջի դրանք։%n%nՇարունակե՞լ։
-ComponentSize1=%1 ԿԲ
-ComponentSize2=%1 ՄԲ
-ComponentsDiskSpaceMBLabel=Տվյալ ընտրությունը պահանջում է ամենաքիչը [mb] ՄԲ տեղ պնակի վրա։
-
-; *** "Select Additional Tasks" wizard page
-WizardSelectTasks=Լրացուցիչ առաջադրանքներ
-SelectTasksDesc=Ի՞նչ լրացուցիչ առաջադրանքներ պետք է կատարվեն։
-SelectTasksLabel2=Ընտրեք լրացուցիչ առաջադրանքները, որոնք պետք է կատարվեն [name]-ի տեղակայման ընթացքում, ապա սեղմեք «Առաջ».
-
-; *** "Select Start Menu Folder" wizard page
-WizardSelectProgramGroup=Ընտրեք «Start» ընտրացանկի թղթապանակը
-SelectStartMenuFolderDesc=Որտե՞ղ ստեղծել պիտակներ.
-SelectStartMenuFolderLabel3=Ծրագիրը կստեղծի պիտակներ «Start» ընտրացանկի հետևյալ թղթապանակում։
-SelectStartMenuFolderBrowseLabel=Սեղմեք «Հաջորդը»՝ շարունակելու համար։ Եթե ցանկանում եք ընտրեք այլ թղթապանակ սեղմեք «Ընտրել»։
-MustEnterGroupName=Պետք է գրեք թղթապանակի անունը։
-GroupNameTooLong=Անունը շատ է երկար։
-InvalidGroupName=Նշված անունը անընդունելի է։
-BadGroupName=Անվան մեջ չպետք է լինեն նշաններ՝ %n%n%1
-NoProgramGroupCheck2=&Չստեղծել թղթապանակ «Start» ընտրացանկում
-
-; *** "Ready to Install" wizard page
-WizardReady=Պատրաստ է տեղակայման
-ReadyLabel1=Տեղակայիչ ծրագիրը պատրաստ է սկսելու [name]-ի տեղակայումը։
-ReadyLabel2a=Սեղմեք «Տեղակայել»՝ շարունակելու համար կամ «Նախորդը»՝ եթե ցանկանում եք դիտել կամ փոփոխել տեղակայման ընտրանքները։
-ReadyLabel2b=Սեղմեք «Տեղակայել»՝ շարունակելու համար։
-ReadyMemoUserInfo=Տեղեկություն օգվողի մասին.
-ReadyMemoDir=Տեղակայման թղթապանակը.
-ReadyMemoType=Տեղակայման ձևը.
-ReadyMemoComponents=Ընտրեք բաղադրիչները.
-ReadyMemoGroup=Թղթապանակ «Start» ընտրացանկում.
-ReadyMemoTasks=Լրացուցիչ պիտակներ.
-
-; *** "Preparing to Install" wizard page
-WizardPreparing=Պատրաստվում է տեղակայման
-PreparingDesc=Տեղակայման ծրագիրը պատրաստվում է [name]-ի տեղակայմանը։
-PreviousInstallNotCompleted=Նախորդ տեղակայումը կամ ջնջումը չեն ավարտվել։ Այն ավարտելու համար պետք է վերագործարկեք համակարգիչը։%n%nՎերագործարկումից հետո կրկին բացեք տեղակայման փաթեթը՝ [name]-ի տեղակայումը ավարտելու համար։
-CannotContinue=Հնարավոր չէ շարունակել։ Սեղմեք «Մերժել»՝ ծրագրիը փակելու համար։
-ApplicationsFound=Հետևյալ ծրագրերը օգտագործում են ֆայլեր, որոնք պետք է թարմացվեն տեղակայիչի կողմից։ Թույլատրեք տեղակայիչին փակելու այս ծրագրերը։
-ApplicationsFound2=Հետևյալ ծրագրերը օգտագործում են ֆայլեր, որոնք պետք է թարմացվեն տեղակայիչի կողմից։ Թույլատրեք տեղակայիչին փակելու այս ծրագրերը։ Տեղակայումը ավարտելուց հետո տեղակայիչը կփորձի վերամեկնարկել այս ծրագրերը։
-CloseApplications=&Միանգամից փակել ծրագրերը
-DontCloseApplications=&Չփակել ծրագրերը
-ErrorCloseApplications=Տեղակայիչը չի կարողանում փակել բոլոր ծրագրերը։ Փակեք բոլոր ֆայլերը, որոնք կարող են օգտագործել այն ֆայլերը, որոնք թարմացվելու են տեղակայիչի կողմից։
-
-; *** "Installing" wizard page
-WizardInstalling=Տեղակայվում է...
-InstallingLabel=Խնդրում ենք սպասել մինչ [name]-ը կտեղակայվի Ձեր համակարգչում։
-
-; *** "Setup Completed" wizard page
-FinishedHeadingLabel=[name]-ի տեղակայման ավարտը
-FinishedLabelNoIcons=[name] ծրագիրը տեղակայվել է Ձեր համակարգչում։
-FinishedLabel=[name] ծրագիրը տեղակայվել է Ձեր համակարգչում։
-ClickFinish=Սեղմեք «Ավարտել»՝ տեղակայիչ ծրագիրը փակելու համար։
-FinishedRestartLabel=[name]-ի տեղակայումը ավարտելու համար վերագործարկեք համակարգիչը։ Վերագործարկե՞լ։
-FinishedRestartMessage=[name]-ի տեղակայումը ավարտելու համար վերագործարկեք համակարգիչը։ %n%nՎերագործարկե՞լ։
-ShowReadmeCheck=Դիտել README ֆայլը։
-YesRadio=&Այո, վերագործարկել
-NoRadio=&Ոչ, ես հետո վերագործարկեմ
-; used for example as 'Run MyProg.exe'
-RunEntryExec=Բացել %1-ը
-; used for example as 'View Readme.txt'
-RunEntryShellExec=Կարդալ %1-ը
-
-; *** "Setup Needs the Next Disk" stuff
-ChangeDiskTitle=Անհրաժեշտ է տեղադրել հաջորդ պնակը
-SelectDiskLabel2=Տեղադրեք %1 պնակը և սեղմեք «ԼԱՎ»։ %n%nԵթե ֆայլերի ճանապարհը այլ է, ընտրեք ճիշտ ճանապարհը և սեղմեք «Ընտրել»։
-PathLabel=&Ճանապարհը.
-FileNotInDir2="%1" ֆայլը չի գտնվել "%2"-ում։ Տեղադրեք պնակը կամ ընտրեք թղթապանակը։
-SelectDirectoryLabel=Խնդրում ենք նշել ճանապարհը։
-
-; *** Installation phase messages
-SetupAborted=Տեղակայումը չի ավարտվել։ %n%nԼուծեք խնդիրը և նորից փորձեք։
-EntryAbortRetryIgnore=Սեղմեք «Կրկնել»՝ նորից փորձելու համար, «Բաց թողնել»՝ ֆայլը բաց թողնելու համար, կամ «Հրաժարվել»՝ տեղակայումը կանգնեցնելու համար։
-
-; *** Installation status messages
-StatusClosingApplications=Ծրագրերի փակում...
-StatusCreateDirs=Ստեղծվում են թղթապանակներ...
-StatusExtractFiles=Ֆայլերը բացվում են...
-StatusCreateIcons=Ստեղծվում են թղթապանակի պիտակները...
-StatusCreateIniEntries=INI ֆայլերի ստեղծում...
-StatusCreateRegistryEntries=Գրանցատեղի գրանցումների ստեղծում...
-StatusRegisterFiles=Ֆայլերի գրանցում...
-StatusSavingUninstall=Պահպանվում է ջնջման համար տեղեկությունը...
-StatusRunProgram=Տեղակայումը ավարտվում է...
-StatusRestartingApplications=Ծրագրի վերամեկնարկում...
-StatusRollback=Փոփոխությունները ետարկվում են...
-
-; *** Misc. errors
-ErrorInternal2=Ներքին սխալ %1
-ErrorFunctionFailedNoCode=%1. վթար
-ErrorFunctionFailed=%1. վթար, կոդը %2
-ErrorFunctionFailedWithMessage=%1. վթար, կոդը %2.%n%3
-ErrorExecutingProgram=Հնարավոր չէ կատարել %n%1 ֆայլը
-
-; *** Registry errors
-ErrorRegOpenKey=Գրանցատեղի բանալին բացելու սխալ՝ %n%1\%2
-ErrorRegCreateKey=Գրանցատեղի բանալին ստեղծելու սխալ՝ %n%1\%2
-ErrorRegWriteKey=Գրանցատեղի բանալում գրանցում անելու սխալ՝ %n%1\%2
-
-; *** INI errors
-ErrorIniEntry=Սխալ՝ "%1" INI ֆայլում գրառում կատարելիս։
-
-; *** File copying errors
-FileAbortRetryIgnore=Սեղմեք «Կրկնել»՝ կրկնելու համար, «Բաց թողնել»՝ ֆայլը բաց թողնելու համար (խորհուրդ չի տրվում) կամ «Հրաժարվել»՝ փակելու համար։
-FileAbortRetryIgnore2=Սեղմեք «Կրկնել»՝ կրկնելու համար, «Բաց թողնել»՝ սխալը անտեսելու համար (խորհուրդ չի տրվում) կամ «Հրաժարվել»՝ փակելու համար։
-SourceIsCorrupted=Գործող ֆայլը վնասված է։
-SourceDoesntExist=Գործող "%1" ֆայլը գոյություն չունի
-ExistingFileReadOnly=Գոյություն ունեցող ֆայլը նշված է «միայն կարդալու համար»։%n%nՍեղմեք «Կրկնել»՝ ջնջելու համար «միայն կարդալու համար» հատկանիշը, «Բաց թողնել»՝ ֆայլը բաց թողնելու համար «Հրաժարվել»՝ փակելու համար։
-ErrorReadingExistingDest=Սխալ՝ ֆայլը կարդալիս.
-FileExists=Ֆայլը գոյություն չունի։%n%nՎերագրե՞լ։
-ExistingFileNewer=Առկա ֆայլը ավելի նոր է, քան տեղակայվողը։ Խորհուրդ ենք տալիս պահպանել գործողը։ %n%nՊահպանե՞լ գործող ֆայլը։
-ErrorChangingAttr=Սխալ՝ ընթացիկ ֆայլի հատկանիշները փոխելիս.
-ErrorCreatingTemp=Սխալ՝ նշված թղթապանակում ֆայլ ստեղծելիս.
-ErrorReadingSource=Սխալ ֆայլը կարդալիս.
-ErrorCopying=Սխալ ֆայլը պատճենելիս.
-ErrorReplacingExistingFile=Սխալ՝ գոյություն ունեցող ֆայլը փոխելիս.
-ErrorRestartReplace=RestartReplace սխալ.
-ErrorRenamingTemp=Սխալ նշանակման թղթապանակում՝ ֆայլը անվանափոխելիս.
-ErrorRegisterServer=Հնարավոր չէ գրանցել DLL/OCX-ը. %1
-ErrorRegSvr32Failed=Սխալ՝ RegSvr32-ը կատարելիս, կոդը՝ %1
-ErrorRegisterTypeLib=Հնարավոր չէ գրանցել գրադարանները (Type Library)՝ %1
-
-; *** Post-installation errors
-ErrorOpeningReadme=Սխալ՝ README ֆայլը բացելիս։
-ErrorRestartingComputer=Հնարավոր չեղավ վերագործարկել համակարգիչը։ Ինքներդ փորձեք։
-
-; *** Uninstaller messages
-UninstallNotFound="%1" ֆայլը գոյություն չունի։ Հնարավոր չէ ջնջել։
-UninstallOpenError=Հնարավոր չէ բացել "%1" ֆայլը։ Հնարավոր չէ ջնջել
-UninstallUnsupportedVer="%1"-ի ջնջման գրառումները չեն ճանաչվել ջնջող ծրագրի կողմից։ Հնարավոր չէ ջնջել
-UninstallUnknownEntry=Անհայտ կետ(%1)՝ ջնջման ֆայլի գրառումներում
-ConfirmUninstall=Ջնջե՞լ %1-ը և նրա բոլոր բաղադրիչները։
-UninstallOnlyOnWin64=Այս ծրագիրը կարելի է ջնջել միայն 64 բիթանոց Windows-ում։
-OnlyAdminCanUninstall=Այս ծրագիրը կարող է ջնջվել միայն Ադմինի իրավունքներով։
-UninstallStatusLabel=Խնդրում ենք սպասել մինչ %1-ը ջնջվում է Ձեր համակարգչից։
-UninstalledAll=%1 ծրագիրը ամբողջությամբ ջնջվել է համակարգչից։
-UninstalledMost=%1-ը ջնջվեց Ձեր համակարգչից։%n%nՈրոշ ֆայլեր հնարավոր չեղավ ջնջել։ Ինքներդ ջնջեք դրանք։
-UninstalledAndNeedsRestart=%1-ի ջնջումը ավարտելու համար պետք է վերագործարկել համակարգիչը։%n%nՎերագործարկե՞լ։
-UninstallDataCorrupted="%1" ֆայլը վնասված է։ Հնարավոր չէ ջնջել
-
-; *** Uninstallation phase messages
-ConfirmDeleteSharedFileTitle=Ջնջե՞լ համատեղ օգտագործվող ֆայլը։
-ConfirmDeleteSharedFile2=Համակարգը նշում է, որ հետևյալ համատեղ օգտագործվող ֆայլը այլևս չի օգտագործվում այլ ծրագրի կողմից։ Ջնջե՞լ այն։ %n%nԵթե համոզված չեք սեղմեք «Ոչ»։
-SharedFileNameLabel=Ֆայլի անունը.
-SharedFileLocationLabel=Տեղը.
-WizardUninstalling=Ջնջման դրությունը
-StatusUninstalling=%1-ի ջնջում...
-
-; *** Shutdown block reasons
-ShutdownBlockReasonInstallingApp=%1-ի տեղակայում։
-ShutdownBlockReasonUninstallingApp=%1-ի ջնջում։
-
-; The custom messages below aren't used by Setup itself, but if you make
-; use of them in your scripts, you'll want to translate them.
-
-[CustomMessages]
-
-NameAndVersion=%1, տարբերակը %2
-AdditionalIcons=Լրացուցիչ պիտակներ
-CreateDesktopIcon=Ստեղծել պիտակը &Աշխատաշրջանում
-CreateQuickLaunchIcon=Ստեղծել պիտակը &Արագ բացման վահանակում
-ProgramOnTheWeb=%1-ի վեբ կայքը
-UninstallProgram=Ջնջել %1-ը
-LaunchProgram=Բացել %1-ը
-AssocFileExtension=Ասո&ցիացնել %1-ը %2 ֆայլերի հետ։
-AssocingFileExtension=Ասոցիացվում են %1-երը %2 ֆայլերի հետ...
-AutoStartProgramGroupDescription=Բացումը.
-AutoStartProgram=Միանգամից բացել %1
-AddonHostProgramNotFound=%1 չի կարող տեղադրվել Ձեր ընտրած թղթապանակում։%n%nՇարունակե՞լ։
-
diff --git a/distrib/Languages/Belarusian.isl b/distrib/Languages/Belarusian.isl
index 584417331..25f616df8 100644
--- a/distrib/Languages/Belarusian.isl
+++ b/distrib/Languages/Belarusian.isl
@@ -1,337 +1,319 @@
-;Paval Shalamitski
-; *** Inno Setup version 5.5.0+ Belarusian (classical orthography) messages ***
-; Translated from English in 2012 by Paval 'Klyok' Shalamitski (i.kliok@gmail.com)
+; *** Inno Setup version 5.5.3+ Belarusian messages ***
;
-; To download user-contributed translations of this file, go to:
-; http://www.jrsoftware.org/files/istrans/
-;
-; Note: When translating this text, do not add periods (.) to the end of
-; messages that didn't have them already, because on those messages Inno
-; Setup adds the periods automatically (appending a period would result in
-; two periods being displayed).
+; Translated by Aleg Azarousky, http://belazar.info/belsoft/
+; E-mail: olegtut@tut.by
[LangOptions]
-; The following three entries are very important. Be sure to read and
-; understand the '[LangOptions] section' topic in the help file.
LanguageName=<0411><0435><043B><0430><0440><0443><0441><043A><0430><044F>
LanguageID=$0423
LanguageCodePage=1251
-; If the language you are translating to requires special font faces or
-; sizes, uncomment any of the following entries and change them accordingly.
-;DialogFontName=
-;DialogFontSize=8
-;WelcomeFontName=Verdana
-;WelcomeFontSize=12
-;TitleFontName=Arial
-;TitleFontSize=29
-;CopyrightFontName=Arial
-;CopyrightFontSize=8
[Messages]
; *** Application titles
-SetupAppTitle=
-SetupWindowTitle= %1
-UninstallAppTitle=
-UninstallAppFullTitle= %1
+SetupAppTitle=
+SetupWindowTitle= %1
+UninstallAppTitle=
+UninstallAppFullTitle= %1
; *** Misc. common
-InformationTitle=
-ConfirmTitle=
-ErrorTitle=
+InformationTitle=
+ConfirmTitle=
+ErrorTitle=
; *** SetupLdr messages
-SetupLdrStartupMessage=븢 %1. ֳ ?
-LdrCannotCreateTemp= . 븢
-LdrCannotExecTemp= 븴. 븢
+SetupLdrStartupMessage= %1. ?
+LdrCannotCreateTemp= .
+LdrCannotExecTemp= . 븢
; *** Startup error messages
-LastErrorMessage=%1.%n%n %2: %3
-SetupFileMissing= 븴, 븢 , %1. .
-SetupFileCorrupt=, 븢 , . .
-SetupFileCorruptOrWrongVer=, 븢 , . .
-InvalidParameter= :%n%n%1
-SetupAlreadyRunning= .
-WindowsVersionNotSupported= Windows.
-WindowsServicePackRequired= %1 %2 .
-NotOnThisPlatform= %1.
-OnlyOnThisPlatform= %1.
-OnlyOnTheseArchitectures= Windows :%n%n%1
-MissingWOW64APIs= Windows, , 븢 64- . , (Service Pack) %1.
-WinVersionTooLowError= %1 %2 .
-WinVersionTooHighError= %1 %2 .
-AdminPrivilegesRequired= , ().
-PowerUserPrivilegesRequired= , () 곻.
-SetupAppRunningError= , %1.%n%n %1 , . , .
-UninstallAppRunningError= , %1.%n%n %1 , . , .
+LastErrorMessage=%1.%n%n %2: %3
+SetupFileMissing= %1 . , , .
+SetupFileCorrupt= 븢 . , .
+SetupFileCorruptOrWrongVer= 븢 븢. , , .
+InvalidParameter= :%n%n%1
+SetupAlreadyRunning= .
+WindowsVersionNotSupported= Windows .
+WindowsServicePackRequired= %1 Service Pack %2 .
+NotOnThisPlatform= %1.
+OnlyOnThisPlatform= %1.
+OnlyOnTheseArchitectures= Windows :%n%n%1
+MissingWOW64APIs= Windows 64- . , (Service Pack) %1.
+WinVersionTooLowError= %1 %2 .
+WinVersionTooHighError= %1 %2 .
+AdminPrivilegesRequired= , .
+PowerUserPrivilegesRequired= , .
+SetupAppRunningError=, %1!%n%n , , - .
+UninstallAppRunningError=, %1!%n%n , , , - .
; *** Misc. errors
-ErrorCreatingDir= 븴 %1
-ErrorTooManyFilesInDir= 븴 %1: 븴
+ErrorCreatingDir= %1
+ErrorTooManyFilesInDir= %1,
; *** Setup common messages
-ExitSetupTitle=
-ExitSetupMessage= 븢. , .%n%n .%n%nֳ ?
-AboutSetupMenuItem=&
-AboutSetupTitle=
-AboutSetupMessage=%1 %2%n%3%n%n %1%n%4
+ExitSetupTitle=
+ExitSetupMessage= . , .%n%n 븢 , .%n%n 븢?
+AboutSetupMenuItem= ...
+AboutSetupTitle=
+AboutSetupMessage=%1, %2%n%3%n%n %1:%n%4
AboutSetupNote=
-TranslatorNote=
+TranslatorNote=Belarusian translation by Aleg Azarousky, http://belazar.info/belsoft/
; *** Buttons
-ButtonBack=< &
-ButtonNext=& >
+ButtonBack=< &
+ButtonNext=& >
ButtonInstall=&
ButtonOK=
-ButtonCancel=
+ButtonCancel=
ButtonYes=&
-ButtonYesToAll= &
+ButtonYesToAll= &
ButtonNo=&
-ButtonNoToAll= &
-ButtonFinish=&
-ButtonBrowse=&dz
-ButtonWizardBrowse=&
-ButtonNewFolder=& 븴
+ButtonNoToAll=&
+ButtonFinish=
+ButtonBrowse=&...
+ButtonWizardBrowse=&...
+ButtonNewFolder=&
; *** "Select Language" dialog messages
-SelectLanguageTitle=
-SelectLanguageLabel= , :
+SelectLanguageTitle= 븢
+SelectLanguageLabel= :
; *** Common wizard text
-ClickNext= , . , .
-BeveledLabel=
-BrowseDialogTitle=dz 븴
-BrowseDialogLabel= 븴 , .
-NewFolderName= 븴
+ClickNext= , - .
+BeveledLabel=InnoSetup
+BrowseDialogTitle=
+BrowseDialogLabel= .
+NewFolderName=
; *** "Welcome" wizard page
-WelcomeLabel1=³ 븢 [name]
-WelcomeLabel2= [name/ver].%n%n , 븢, .
+WelcomeLabel1= [name]
+WelcomeLabel2= [name/ver] .%n%n , .
; *** "Password" wizard page
WizardPassword=
-PasswordLabel1= , .
-PasswordLabel3= , . ( ).
+PasswordLabel1=븢 .
+PasswordLabel3= , . .
PasswordEditLabel=&:
-IncorrectPassword= . .
+IncorrectPassword=ճ . .
; *** "License Agreement" wizard page
-WizardLicense=˳
-LicenseLabel= , , .
-LicenseLabel3= . , .
-LicenseAccepted= &
-LicenseNotAccepted= &
+WizardLicense=˳
+LicenseLabel= , , .
+LicenseLabel3= , . .
+LicenseAccepted= &
+LicenseNotAccepted= &
; *** "Information" wizard pages
-WizardInfoBefore=
-InfoBeforeLabel= , , .
-InfoBeforeClickLabel= , , 븢.
-WizardInfoAfter=
-InfoAfterLabel= , , .
-InfoAfterClickLabel= , , 븢.
+WizardInfoBefore=
+InfoBeforeLabel= .
+InfoBeforeClickLabel= , .
+WizardInfoAfter=
+InfoAfterLabel= .
+InfoAfterClickLabel= , .
; *** "User Information" wizard page
-WizardUserInfo=
-UserInfoDesc= .
-UserInfoName=& :
-UserInfoOrg=&:
-UserInfoSerial=& :
-UserInfoNameRequired= .
+WizardUserInfo=
+UserInfoDesc= , .
+UserInfoName= :
+UserInfoOrg=&:
+UserInfoSerial=& :
+UserInfoNameRequired= .
; *** "Select Destination Location" wizard page
-WizardSelectDir=
-SelectDirDesc= [name]?
-SelectDirLabel3=[name] 븴.
-SelectDirBrowseLabel= , . 븴, dz.
-DiskSpaceMBLabel= [mb] .
-CannotInstallToNetworkDrive= 븢 .
-CannotInstallToUNCPath= 븢 븴 UNC.
-InvalidPath= , :%n%nC:\%n%n UNC :%n%n\\\
-InvalidDrive= 븴 UNC , . .
-DiskSpaceWarningTitle= .
-DiskSpaceWarning= 븢, %1 , %2 .%n%nֳ ?
-DirNameTooLong= 븴 .
-InvalidDirName=ճ 븴.
-BadDirName32= 븴 :%n%n%1
-DirExistsTitle=븴
-DirExists=븴:%n%n%1%n%n . ֳ ?
-DirDoesntExistTitle=븴 .
-DirDoesntExist=븴:%n%n%1%n%n . ֳ ?
+WizardSelectDir=
+SelectDirDesc= [name]?
+SelectDirLabel3= [name] :
+SelectDirBrowseLabel= . , .
+DiskSpaceMBLabel= [mb] .
+CannotInstallToNetworkDrive= .
+CannotInstallToUNCPath= UNC-.
+InvalidPath= , :%n%nC:\APP%n%n UNC:%n%n\\\
+InvalidDrive= . , .
+DiskSpaceWarningTitle=
+DiskSpaceWarning=븢 %1 , %2 .%n%n ?
+DirNameTooLong= .
+InvalidDirName= .
+BadDirName32= :%n%n%1
+DirExistsTitle=
+DirExists=:%n%n%1%n%n . ?
+DirDoesntExistTitle=
+DirDoesntExist=:%n%n%1%n%n . ?
; *** "Select Components" wizard page
-WizardSelectComponents=
+WizardSelectComponents=
SelectComponentsDesc= ?
-SelectComponentsLabel2= , ; , 븢. , .
+SelectComponentsLabel2= , 븢; . , .
FullInstallation=
; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
-CompactInstallation=
-CustomInstallation=, 븢
-NoUninstallWarningTitle=
-NoUninstallWarning=, :%n%n%1%n%n , .%n%nֳ ?
-ComponentSize1=%1
-ComponentSize2=%1
-ComponentsDiskSpaceMBLabel= [mb] .
+CompactInstallation=
+CustomInstallation=
+NoUninstallWarningTitle=
+NoUninstallWarning=, :%n%n%1%n%n , .%n%n ?
+ComponentSize1=%1
+ComponentSize2=%1
+ComponentsDiskSpaceMBLabel= [mb] .
; *** "Select Additional Tasks" wizard page
-WizardSelectTasks=
-SelectTasksDesc= ?
-SelectTasksLabel2= , , 븢 [name], .
+WizardSelectTasks=
+SelectTasksDesc= ?
+SelectTasksLabel2= , [name], .
; *** "Select Start Menu Folder" wizard page
-WizardSelectProgramGroup= 븴
-SelectStartMenuFolderDesc= ?
-SelectStartMenuFolderLabel3= 븴 .
-SelectStartMenuFolderBrowseLabel= , . 븴, dz.
-MustEnterGroupName= 븴.
-GroupNameTooLong= 븴 .
-InvalidGroupName=ճ 븴.
-BadGroupName= 븴 :%n%n%1
-NoProgramGroupCheck2=& 븴
+WizardSelectProgramGroup=
+SelectStartMenuFolderDesc= , .
+SelectStartMenuFolderLabel3= .
+SelectStartMenuFolderBrowseLabel= - . - .
+MustEnterGroupName= .
+GroupNameTooLong= .
+InvalidGroupName= .
+BadGroupName= :%n%n%1
+NoProgramGroupCheck2=&
; *** "Ready to Install" wizard page
-WizardReady= 븢
-ReadyLabel1= 븢 [name] .
-ReadyLabel2a= , . , .
-ReadyLabel2b= 븢, .
-ReadyMemoUserInfo= :
-ReadyMemoDir= :
-ReadyMemoType= 븢:
+WizardReady=
+ReadyLabel1= [name] .
+ReadyLabel2a= , - .
+ReadyLabel2b= .
+ReadyMemoUserInfo= :
+ReadyMemoDir= :
+ReadyMemoType= 븢:
ReadyMemoComponents= :
-ReadyMemoGroup= :
-ReadyMemoTasks= :
+ReadyMemoGroup= :
+ReadyMemoTasks= :
; *** "Preparing to Install" wizard page
-WizardPreparing= 븢
-PreparingDesc=[name] .
-PreviousInstallNotCompleted= 븢 븢 . 븢, .%n%n , [name].
-CannotContinue= 븢. , .
-ApplicationsFound= , . .
-ApplicationsFound2= , . . , 븢.
-CloseApplications=&
-DontCloseApplications=&
+WizardPreparing=
+PreparingDesc= [name] .
+PreviousInstallNotCompleted= . , .%n%n 븢 , [name].
+CannotContinue= . .
+ApplicationsFound= , 븢 . 븢 .
+ApplicationsFound2= , 븢 . 븢 . , 븢 .
+CloseApplications=&
+DontCloseApplications=&
+ErrorCloseApplications=븢 . , , .
; *** "Installing" wizard page
-WizardInstalling=븢
-InstallingLabel= , , [name] 븢 .
+WizardInstalling=
+InstallingLabel=, [name] 븢 .
; *** "Setup Completed" wizard page
-FinishedHeadingLabel= 븢 [name]
-FinishedLabelNoIcons= 븢 [name] .
-FinishedLabel= 븢 [name] . ().
-ClickFinish= , .
-FinishedRestartLabel= 븢 [name], . ֳ ?
-FinishedRestartMessage= 븢 [name], .%n%nֳ ?
-ShowReadmeCheck=,
-YesRadio=&,
-NoRadio=&,
+FinishedHeadingLabel= [name].
+FinishedLabelNoIcons= [name] .
+FinishedLabel= [name] . .
+ClickFinish= , 븢.
+FinishedRestartLabel= [name] . ?
+FinishedRestartMessage= [name] .%n%n ?
+ShowReadmeCheck=
+YesRadio=&,
+NoRadio=&,
; used for example as 'Run MyProg.exe'
-RunEntryExec= %1
+RunEntryExec= %1
; used for example as 'View Readme.txt'
RunEntryShellExec= %1
; *** "Setup Needs the Next Disk" stuff
-ChangeDiskTitle= 븢,
-SelectDiskLabel2= %1 .%n%n 븴, , dz.
+ChangeDiskTitle=
+SelectDiskLabel2= %1 .%n%n , , , .
PathLabel=&:
-FileNotInDir2= %2 %1. 븴.
-SelectDirectoryLabel= .
+FileNotInDir2= %1 %2. .
+SelectDirectoryLabel= .
; *** Installation phase messages
-SetupAborted= 븢 .%n%n 븢 .
-EntryAbortRetryIgnore= , . , ( ). 븢, .
+SetupAborted= .%n%n , 븢
+EntryAbortRetryIgnore= , , - , - .
; *** Installation status messages
-StatusClosingApplications=
-StatusCreateDirs= 븴
-StatusExtractFiles=
-StatusCreateIcons= 곅
-StatusCreateIniEntries= INI
-StatusCreateRegistryEntries=
-StatusRegisterFiles= ࢅ
-StatusSavingUninstall= 븢
-StatusRunProgram= 븢
-StatusRestartingApplications=
-StatusRollback=
+StatusClosingApplications= ...
+StatusCreateDirs= ...
+StatusExtractFiles= ...
+StatusCreateIcons= ...
+StatusCreateIniEntries= INI-...
+StatusCreateRegistryEntries= ...
+StatusRegisterFiles= ...
+StatusSavingUninstall= ...
+StatusRunProgram= ...
+StatusRestartingApplications= ...
+StatusRollback= ...
; *** Misc. errors
-ErrorInternal2= : %1
-ErrorFunctionFailedNoCode= %1
-ErrorFunctionFailed= %1; %2
-ErrorFunctionFailedWithMessage= %1; %2.%n%3
-ErrorExecutingProgram= :%n%1
+ErrorInternal2= %1
+ErrorFunctionFailedNoCode=%1:
+ErrorFunctionFailed=%1: ; %2
+ErrorFunctionFailedWithMessage=%1: ; %2.%n%3
+ErrorExecutingProgram= :%n%1
; *** Registry errors
-ErrorRegOpenKey= :%n%1\%2
-ErrorRegCreateKey= :%n%1\%2
-ErrorRegWriteKey= :%n%1\%2
+ErrorRegOpenKey= :%n%1\%2
+ErrorRegCreateKey= :%n%1\%2
+ErrorRegWriteKey= :%n%1\%2
; *** INI errors
-ErrorIniEntry= INI %1.
+ErrorIniEntry= INI- %1.
; *** File copying errors
-FileAbortRetryIgnore= , . , ( ). 븢, .
-FileAbortRetryIgnore2= , . , . 븢, .
-SourceIsCorrupted=
-SourceDoesntExist= %1
-ExistingFileReadOnly= .%n%n , . , . 븢 , .
-ErrorReadingExistingDest= :
-FileExists= .%n%nֳ ?
-ExistingFileNewer= , . .%n%nֳ ?
-ErrorChangingAttr= :
-ErrorCreatingTemp= 븴:
-ErrorReadingSource= :
-ErrorCopying= :
-ErrorReplacingExistingFile= :
-ErrorRestartReplace= :
-ErrorRenamingTemp= 븴:
-ErrorRegisterServer= DLL OCX: %1
-ErrorRegSvr32Failed=RegSvr32 %1
-ErrorRegisterTypeLib= : %1
+FileAbortRetryIgnore= , , - ( ), - .
+FileAbortRetryIgnore2= , , - ( ), - .
+SourceIsCorrupted= .
+SourceDoesntExist= %1 .
+ExistingFileReadOnly= .%n%n , , - , - .
+ErrorReadingExistingDest= :
+FileExists= .%n%n ?
+ExistingFileNewer= , 븢. .%n%n ?
+ErrorChangingAttr= :
+ErrorCreatingTemp= :
+ErrorReadingSource= :
+ErrorCopying= :
+ErrorReplacingExistingFile= :
+ErrorRestartReplace= :
+ErrorRenamingTemp= :
+ErrorRegisterServer= DLL/OCX: %1
+ErrorRegSvr32Failed= RegSvr32, %1
+ErrorRegisterTypeLib= : %1
; *** Post-installation errors
-ErrorOpeningReadme= .
-ErrorRestartingComputer= . .
+ErrorOpeningReadme= README:
+ErrorRestartingComputer=븢 . .
; *** Uninstaller messages
-UninstallNotFound= %1 . .
-UninstallOpenError= %1 .
-UninstallUnsupportedVer= %1.
-UninstallUnknownEntry= ﳢ (%1)
-ConfirmUninstall=ֳ , %1 ?
-UninstallOnlyOnWin64= 64- Windows.
-OnlyAdminCanUninstall= .
-UninstallStatusLabel=, %1 .
-UninstalledAll=%1 .
-UninstalledMost=%1 .%n%n . .
-UninstalledAndNeedsRestart= 븢 %1, .%n%nֳ ?
-UninstallDataCorrupted= %1 .
+UninstallNotFound= %1 , .
+UninstallOpenError= %1, .
+UninstallUnsupportedVer= %1 븢. .
+UninstallUnknownEntry= (%1)
+ConfirmUninstall= %1 ?
+UninstallOnlyOnWin64= 64- Windows.
+OnlyAdminCanUninstall= .
+UninstallStatusLabel=, %1 .
+UninstalledAll= %1 .
+UninstalledMost= %1 .%n%n . .
+UninstalledAndNeedsRestart= %1, .%n%nֳ ?
+UninstallDataCorrupted= %1 . .
; *** Uninstallation phase messages
-ConfirmDeleteSharedFileTitle=ֳ ?
-ConfirmDeleteSharedFile2= , . ֳ ?%n%n , , . , . , .
+ConfirmDeleteSharedFileTitle= ?
+ConfirmDeleteSharedFile2=ѳ , . ?%n%n , , . - . .
SharedFileNameLabel= :
-SharedFileLocationLabel=:
-WizardUninstalling=
-StatusUninstalling=븢 %1
+SharedFileLocationLabel=:
+WizardUninstalling=
+StatusUninstalling= %1...
; *** Shutdown block reasons
-ShutdownBlockReasonInstallingApp=븢 %1
-ShutdownBlockReasonUninstallingApp=븢 %1.
+ShutdownBlockReasonInstallingApp= %1.
+ShutdownBlockReasonUninstallingApp= %1.
; The custom messages below aren't used by Setup itself, but if you make
; use of them in your scripts, you'll want to translate them.
[CustomMessages]
-NameAndVersion=%1 %2
-AdditionalIcons= :
-CreateDesktopIcon= &
-CreateQuickLaunchIcon= &
-ProgramOnTheWeb=%1
-UninstallProgram= %1
-LaunchProgram= %1
-AssocFileExtension=& %1 %2
-AssocingFileExtension=%1 %2
-AutoStartProgramGroupDescription=:
-AutoStartProgram= %1
-AddonHostProgramNotFound= 븴 %1.%n%nֳ ?
+NameAndVersion=%1, %2
+AdditionalIcons= :
+CreateDesktopIcon= &
+CreateQuickLaunchIcon= &
+ProgramOnTheWeb= %1
+UninstallProgram= %1
+LaunchProgram= %1
+AssocFileExtension=& %1 %2
+AssocingFileExtension= %1 %2...
+AutoStartProgramGroupDescription=:
+AutoStartProgram= %1
+AddonHostProgramNotFound=%1 .%n%n ?
diff --git a/distrib/Languages/Bengali.islu b/distrib/Languages/Bengali.islu
index 58f84daf5..082a84dd2 100644
--- a/distrib/Languages/Bengali.islu
+++ b/distrib/Languages/Bengali.islu
@@ -1,5 +1,5 @@
-; *** Inno Setup version 5.5.3+ Bangla messages ***
-;; Translated by Mehedi Shanto [ mehediDshanto@gmail.com ]
+; *** Inno Setup version 5.5.3+ Bengali messages ***
+; Translated by Mehedi Shanto [ mehediDshanto@gmail.com ]
; To download user-contributed translations of this file, go to:
; http://www.jrsoftware.org/files/istrans/
;
@@ -74,7 +74,7 @@ AboutSetupMenuItem=সেটআপ বিষয়ক...(&A)
AboutSetupTitle=সেটআপ বিষয়ক
AboutSetupMessage=%1এর সংস্করণ %2%n%3%n%n%1 হোম পেইজ:%n%4
AboutSetupNote=
-TranslatorNote=বাংলা অনুবাদ সম্পাদিত করেছে মেহেদী শান্ত
+TranslatorNote=বাংলা অনুবাদটি সম্পাদনা করেছে মেহেদী শান্ত
; *** Buttons
ButtonBack=< পূর্ববর্তী(&B)
@@ -149,7 +149,7 @@ InvalidDrive=আপনি যে ড্রাইভ বা UNC shareটি ন
DiskSpaceWarningTitle=নির্ধারিত ড্রাইভে পর্যাপ্ত জায়গা নেই
DiskSpaceWarning=ইনস্টল করতে সেটআপের কমপক্ষে %1 KB খালি জায়গা থাকতে হবে, কিন্তু নির্ধারিত ড্রাইভে রয়েছে মাত্র %2 KB।%n%nআপনি কি যাই হোক প্রক্রিয়াটি চলমান রাখতে চান?
DirNameTooLong=নির্ধারিত ফোল্ডারটির নাম অথবা অবস্থান অত্যন্ত দীর্ঘ।
-InvalidDirName=নির্ধারিত ফোল্ডারের নামটি সঠিক নয়।
+InvalidDirName=নির্ধারিত ফোল্ডারের নামটি অগ্রহণযোগ্য।
BadDirName32=ফোল্ডারের নামে নিম্নোক্ত ক্যারেক্টারসমূহ ব্যবহার করা যাবে না:%n%n%1
DirExistsTitle=ফোল্ডারটি বিদ্যমান রয়েছে
DirExists=নিম্নোক্ত ফোল্ডার:%n%n%1%n%nইতিমধ্যে বিদ্যমান রয়েছে। আপনি কি যাই হোক এই ফোল্ডারটিতেই ইনস্টল করতে চান?
@@ -163,7 +163,7 @@ SelectComponentsLabel2=যে সকল উপাদানসমূহ আপন
FullInstallation=সম্পূর্ণ ইনস্টল প্রক্রিয়া
; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
CompactInstallation=ঘনবিন্যস্ত ইনস্টল প্রক্রিয়া
-CustomInstallation=নির্ধারণযোগ্য ইনস্টল প্রক্রিয়া
+CustomInstallation=ব্যক্তি-নির্ধারিত ইনস্টল প্রক্রিয়া
NoUninstallWarningTitle=উপাদানসমূহ বিদ্যমান রয়েছে
NoUninstallWarning=সেটআপ সনাক্ত করেছে যে নিম্নোক্ত উপাদানসমূহ ইতিমধ্যে আপনার কম্পিউটারে ইনস্টল করা রয়েছে:%n%n%1%n%nএই উপাদানসমূহ অনির্ধারণ করে দিলে তা আনইনস্টল হবে না।%n%nআপনি কি যাই হোক প্রক্রিয়াটি চলমান রাখতে চান?
ComponentSize1=%1 KB
@@ -182,7 +182,7 @@ SelectStartMenuFolderLabel3=সেটআপ প্রোগ্রামটির
SelectStartMenuFolderBrowseLabel=প্রক্রিয়াটি চলমান রাখতে, "পরবর্তী" ক্লিক করুন। ভিন্ন ফোল্ডার নির্ধারণ করতে চাইলে "ব্রাউজ করি" ক্লিক করুন।
MustEnterGroupName=আপনাকে অবশ্যই একটি ফোল্ডারের নাম প্রবেশ করতে হবে।
GroupNameTooLong=নির্ধারিত ফোল্ডারটির নাম অথবা অবস্থান অত্যন্ত দীর্ঘ।
-InvalidGroupName=নির্ধারিত ফোল্ডারের নামটি সঠিক নয়।
+InvalidGroupName=নির্ধারিত ফোল্ডারের নামটি অগ্রহণযোগ্য।
BadGroupName=ফোল্ডারের নামে নিম্নোক্ত ক্যারেক্টারসমূহ ব্যবহার করা যাবে না:%n%n%1
NoProgramGroupCheck2=স্টার্ট মেন্যুতে ফোল্ডার তৈরি করা হবে না(&D)
diff --git a/distrib/Languages/Bosnian.isl b/distrib/Languages/Bosnian.isl
new file mode 100644
index 000000000..d25d690fc
--- /dev/null
+++ b/distrib/Languages/Bosnian.isl
@@ -0,0 +1,329 @@
+; *** Inno Setup version 5.5.3+ Bosnian messages ***
+;
+; Bosnian translation by Kenan Dervisevic (kenan3008@gmail.com)
+;
+
+[LangOptions]
+LanguageName=Bosanski
+LanguageID=$141a
+LanguageCodePage=1250
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Instalacija
+SetupWindowTitle=Instalacija - %1
+UninstallAppTitle=Deinstalacija
+UninstallAppFullTitle=%1 Deinstalacija
+
+; *** Misc. common
+InformationTitle=Informacija
+ConfirmTitle=Potvrda
+ErrorTitle=Greka
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Zapoeli ste instalaciju programa %1. elite li nastaviti?
+LdrCannotCreateTemp=Ne mogu kreirati privremenu datoteku. Instalacija prekinuta
+LdrCannotExecTemp=Ne mogu izvriti datoteku u privremenom folderu. Instalacija prekinuta
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nGreka %2: %3
+SetupFileMissing=Datoteka %1 se ne nalazi u instalacijskom folderu. Molimo vas da rijeite problem ili nabavite novu kopiju programa.
+SetupFileCorrupt=Instalacijske datoteke sadre greku. Molimo vas da nabavite novu kopiju programa.
+SetupFileCorruptOrWrongVer=Instalacijske datoteke sadre greku, ili nisu kompatibilne sa ovom verzijom instalacije. Molimo vas rijeite problem ili nabavite novu kopiju programa.
+InvalidParameter=Neispravan parametar je proslijeen komandnoj liniji:%n%n%1
+SetupAlreadyRunning=Instalacija je ve pokrenuta.
+WindowsVersionNotSupported=Ovaj program ne podrava verziju Windowsa koja je instalirana na ovom raunaru.
+WindowsServicePackRequired=Ovaj program zahtjeva %1 Service Pack %2 ili noviji.
+NotOnThisPlatform=Ovaj program ne radi na %1.
+OnlyOnThisPlatform=Ovaj program se mora pokrenuti na %1.
+OnlyOnTheseArchitectures=Ovaj program se moe instalirati samo na verzijama Windowsa napravljenim za sljedee arhitekture procesora:%n%n%1
+MissingWOW64APIs=Verzija Windowsa koju koristite ne sadri funkcionalnosti potrebne da bi instalacijski program mogao instalirati 64-bitnu verziju. Da bi ispravili taj problem, molimo instalirajte Service Pack %1.
+WinVersionTooLowError=Ovaj program zahtjeva %1 verzije %2 ili noviju.
+WinVersionTooHighError=Ovaj program se ne moe instalirati na %1 verziji %2 ili novijoj.
+AdminPrivilegesRequired=Morate imati administratorska prava pri instaliranju ovog programa.
+PowerUserPrivilegesRequired=Morate imati administratorska prava ili biti lan grupe Power Users prilikom instaliranja ovog programa.
+SetupAppRunningError=Instalacija je detektovala da je %1 pokrenut.%n%nMolimo zatvorite program i sve njegove kopije i potom kliknite Dalje za nastavak ili Odustani za prekid.
+UninstallAppRunningError=Deinstalacija je detektovala da je %1 trenutno pokrenut.%n%nMolimo zatvorite program i sve njegove kopije i potom kliknite Dalje za nastavak ili Odustani za prekid.
+
+; *** Misc. errors
+ErrorCreatingDir=Instalacija nije mogla kreirati folder "%1"
+ErrorTooManyFilesInDir=Instalacija nije mogla kreirati datoteku u folderu "%1" zato to on sadri previe datoteka
+
+; *** Setup common messages
+ExitSetupTitle=Prekid instalacije
+ExitSetupMessage=Instalacija nije zavrena. Ako sada izaete, program nee biti instaliran.%n%nInstalaciju moete pokrenuti kasnije u sluaju da je elite zavriti.%n%nPrekid instalacije?
+AboutSetupMenuItem=&O instalaciji...
+AboutSetupTitle=O instalaciji
+AboutSetupMessage=%1 verzija %2%n%3%n%n%1 poetna stranica:%n%4
+AboutSetupNote=
+TranslatorNote=
+
+; *** Buttons
+ButtonBack=< Na&zad
+ButtonNext=Da&lje >
+ButtonInstall=&Instaliraj
+ButtonOK=U redu
+ButtonCancel=Otkai
+ButtonYes=&Da
+ButtonYesToAll=Da za &sve
+ButtonNo=&Ne
+ButtonNoToAll=N&e za sve
+ButtonFinish=&Zavri
+ButtonBrowse=&Izaberi...
+ButtonWizardBrowse=Iza&beri...
+ButtonNewFolder=&Napravi novi folder
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Izaberite jezik instalacije
+SelectLanguageLabel=Izaberite jezik koji elite koristiti pri instalaciji:
+
+; *** Common wizard text
+ClickNext=Kliknite na Dalje za nastavak ili Otkai za prekid instalacije.
+BeveledLabel=
+BrowseDialogTitle=Izaberite folder
+BrowseDialogLabel=Izaberite folder iz liste ispod, pa onda kliknite na U redu.
+NewFolderName=Novi folder
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Dobro doli u instalaciju programa [name]
+WelcomeLabel2=Ovaj program e instalirati [name/ver] na va raunar.%n%nPreporuujemo da zatvorite sve druge programe prije nastavka i da privremeno onemoguite va antivirus i firewall.
+
+; *** "Password" wizard page
+WizardPassword=ifra
+PasswordLabel1=Instalacija je zatiena ifrom.
+PasswordLabel3=Upiite ifru i kliknite Dalje za nastavak. ifre su osjetljive na mala i velika slova.
+PasswordEditLabel=&ifra:
+IncorrectPassword=Upisali ste pogrenu ifru. Pokuajte ponovo.
+
+; *** "License Agreement" wizard page
+WizardLicense=Ugovor o koritenju
+LicenseLabel=Molimo vas da, prije nastavka, paljivo proitajte sljedee informacije.
+LicenseLabel3=Molimo vas da paljivo proitate Ugovor o koritenju. Morate prihvatiti uslove ugovora kako biste mogli nastaviti s instalacijom.
+LicenseAccepted=&Prihvatam ugovor
+LicenseNotAccepted=&Ne prihvatam ugovor
+
+; *** "Information" wizard pages
+WizardInfoBefore=Informacija
+InfoBeforeLabel=Molimo vas da, prije nastavka, proitate sljedee informacije.
+InfoBeforeClickLabel=Kada budete spremni nastaviti instalaciju, kliknite na Dalje.
+WizardInfoAfter=Informacija
+InfoAfterLabel=Molimo vas da, prije nastavka, proitate sljedee informacije.
+InfoAfterClickLabel=Kada budete spremni nastaviti instalaciju, kliknite na Dalje.
+
+; *** "User Information" wizard page
+WizardUserInfo=Informacije o korisniku
+UserInfoDesc=Upiite vae line informacije.
+UserInfoName=&Ime korisnika:
+UserInfoOrg=&Organizacija:
+UserInfoSerial=&Serijski broj:
+UserInfoNameRequired=Morate upisati ime.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Odaberite odredini folder
+SelectDirDesc=Gdje elite da instalirate [name]?
+SelectDirLabel3=Instalacija e instalirati [name] u sljedei folder.
+SelectDirBrowseLabel=Za nastavak, kliknite Dalje. Ako elite izabrati drugi folder, kliknite Izaberi.
+DiskSpaceMBLabel=Ovaj program zahtjeva najmanje [mb] MB slobodnog prostora na disku.
+CannotInstallToNetworkDrive=Instalacija nije mogua na mrenom disku.
+CannotInstallToUNCPath=Instalacija nije mogua za UNC putanju.
+InvalidPath=Morate unijeti punu putanju zajedno sa slovom diska; npr:%n%nC:\APP%n%nili UNC putanju u obliku:%n%n\\server\share
+InvalidDrive=Disk ili UNC share koji ste odabrali ne postoji ili je nedostupan. Odaberite neki drugi.
+DiskSpaceWarningTitle=Nedovoljno prostora na disku
+DiskSpaceWarning=Instalacija zahtjeva bar %1 KB slobodnog prostora, a odabrani disk ima samo %2 KB na raspolaganju.%n%nDa li elite nastaviti?
+DirNameTooLong=Naziv ili putanja do foldera su predugi.
+InvalidDirName=Naziv foldera nije ispravan.
+BadDirName32=Naziv foldera ne smije sadravati niti jedan od sljedeih znakova:%n%n%1
+DirExistsTitle=Folder postoji
+DirExists=Folder:%n%n%1%n%nve postoji. elite li i dalje izvriti instalaciju u njega?
+DirDoesntExistTitle=Folder ne postoji
+DirDoesntExist=Folder:%n%n%1%n%nne postoji. elite li ga napraviti?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Odaberite komponente
+SelectComponentsDesc=Koje komponente elite instalirati?
+SelectComponentsLabel2=Odaberite komponente koje elite instalirati ili uklonite kvaicu pored komponenti koje ne elite. Kliknite Dalje kad budete spremni da nastavite.
+FullInstallation=Puna instalacija
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Kompaktna instalacija
+CustomInstallation=Instalacija prema elji
+NoUninstallWarningTitle=Komponente postoje
+NoUninstallWarning=Instalacija je detektovala da na vaem raunaru ve postoje sljedee komponente:%n%n%1%n%nAko ove komponente ne odaberete, nee doi do njihove deinstalacije.%n%nelite li ipak nastaviti?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceMBLabel=Trenutni izbor zahtjeva bar [mb] MB prostora na disku.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Izaberite dodatne radnje
+SelectTasksDesc=Koje dodatne radnje elite da se izvre?
+SelectTasksLabel2=Izaberite radnje koje e se izvriti tokom instalacije programa [name], onda kliknite Dalje.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Izaberite programsku grupu
+SelectStartMenuFolderDesc=Gdje instalacija treba da napravi preice?
+SelectStartMenuFolderLabel3=Izaberite folder iz Start menija u koji elite da instalacija kreira preicu, a zatim kliknite na Dalje.
+SelectStartMenuFolderBrowseLabel=Za nastavak, kliknite Dalje. Ako elite da izaberete drugi folder, kliknite Izaberi.
+MustEnterGroupName=Morate unijeti ime programske grupe.
+GroupNameTooLong=Naziv foldera ili putanje je predug.
+InvalidGroupName=Naziv foldera nije ispravan.
+BadGroupName=Naziv foldera ne smije sadravati niti jedan od sljedeih znakova:%n%n%1
+NoProgramGroupCheck2=&Ne kreiraj programsku grupu
+
+; *** "Ready to Install" wizard page
+WizardReady=Spreman za instalaciju
+ReadyLabel1=Sada smo spremni za instalaciju [name] na va raunar.
+ReadyLabel2a=Kliknite na Instaliraj ako elite instalirati program ili na Nazad ako elite pregledati ili promjeniti postavke.
+ReadyLabel2b=Kliknite na Instaliraj ako elite nastaviti sa instalacijom programa.
+ReadyMemoUserInfo=Informacije o korisniku:
+ReadyMemoDir=Odredini folder:
+ReadyMemoType=Tip instalacije:
+ReadyMemoComponents=Odabrane komponente:
+ReadyMemoGroup=Programska grupa:
+ReadyMemoTasks=Dodatne radnje:
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Pripremam instalaciju
+PreparingDesc=Pripreme za instalaciju [name] na va raunar.
+PreviousInstallNotCompleted=Instalacija/deinstalacija prethodnog programa nije zavrena. Morate restartovati va raunar kako bi zavrili tu instalaciju.%n%nNakon toga, ponovno pokrenite ovaj program kako bi dovrili instalaciju za [name].
+CannotContinue=Instalacija ne moe nastaviti. Molimo vas da kliknete na Odustani za izlaz.
+ApplicationsFound=Sljedee aplikacije koriste datoteke koje ova instalacija treba da nadogradi. Preporuujemo vam da omoguite instalaciji da automatski zatvori ove aplikacije.
+ApplicationsFound2=Sljedee aplikacije koriste datoteke koje ova instalacija treba da nadogradi. Preporuujemo vam da omoguite instalaciji da automatski zatvori ove aplikacije. Nakon to se sve zavri, bit e izvren pokuaj ponovnog pokretanja ovih aplikacija.
+CloseApplications=&Automatski zatvori aplikacije
+DontCloseApplications=&Ne zatvaraj aplikacije
+ErrorCloseApplications=Instalacija nije mogla automatski zatvoriti sve aplikacije. Prije nego nastavite, preporuujemo vam da zatvorite sve aplikacije koje koriste datoteke koje e ova instalacija trebati da aurira.
+
+; *** "Installing" wizard page
+WizardInstalling=Instaliram
+InstallingLabel=Priekajte dok se ne zavri instalacija programa [name] na va raunar.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Zavravam instalaciju [name]
+FinishedLabelNoIcons=Instalacija programa [name] je zavrena.
+FinishedLabel=Instalacija programa [name] je zavrena. Program moete pokrenuti koristei instalirane ikone.
+ClickFinish=Kliknite na Zavri da biste izali iz instalacije.
+FinishedRestartLabel=Da biste instalaciju programa [name] zavrili, potrebno je restartovati raunar. elite li to sada uiniti?
+FinishedRestartMessage=Zavretak instalacije programa [name] zahtjeva restart vaeg raunara.%n%nelite li to sada uiniti?
+ShowReadmeCheck=Da, elim proitati README datoteku.
+YesRadio=&Da, restartuj raunar sada
+NoRadio=&Ne, restartovat u raunar kasnije
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Pokreni %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Proitaj %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Instalacija treba sljedei disk
+SelectDiskLabel2=Molimo ubacite Disk %1 i kliknite U redu.%n%nAko se datoteke na ovom disku nalaze u drugom folderu a ne u onom prikazanom ispod, unesite ispravnu putanju ili kliknite na Izaberi.
+PathLabel=&Putanja:
+FileNotInDir2=Datoteka "%1" ne postoji u "%2". Molimo vas ubacite odgovorajui disk ili odaberete drugi folder.
+SelectDirectoryLabel=Molimo odaberite lokaciju sljedeeg diska.
+
+; *** Installation phase messages
+SetupAborted=Instalacija nije zavrena.%n%nMolimo vas da rijeite problem i opet pokrenete instalaciju.
+EntryAbortRetryIgnore=Kliknite na Retry da pokuate opet, Ignore da nastavite, ili Abort da prekinete instalaciju.
+
+; *** Installation status messages
+StatusClosingApplications=Zatvaram aplikacije...
+StatusCreateDirs=Kreiram foldere...
+StatusExtractFiles=Raspakujem datoteke...
+StatusCreateIcons=Kreiram preice...
+StatusCreateIniEntries=Kreiram INI datoteke...
+StatusCreateRegistryEntries=Kreiram podatke za registracijsku bazu...
+StatusRegisterFiles=Registrujem datoteke...
+StatusSavingUninstall=Snimam deinstalacijske informacije...
+StatusRunProgram=Zavravam instalaciju...
+StatusRestartingApplications=Restartujem aplikaciju...
+StatusRollback=Ponitavam promjene...
+
+; *** Misc. errors
+ErrorInternal2=Interna greka: %1
+ErrorFunctionFailedNoCode=%1 nije uspjelo
+ErrorFunctionFailed=%1 nije uspjelo; kod %2
+ErrorFunctionFailedWithMessage=%1 nije uspjelo; kod %2.%n%3
+ErrorExecutingProgram=Ne mogu pokrenuti datoteku:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Greka pri otvaranju registracijskog kljua:%n%1\%2
+ErrorRegCreateKey=Greka pri kreiranju registracijskog kljua:%n%1\%2
+ErrorRegWriteKey=Greka pri zapisivanju registracijskog kljua:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Greka pri kreiranju INI podataka u datoteci "%1".
+
+; *** File copying errors
+FileAbortRetryIgnore=Kliknite Retry da pokuate ponovo, Ignore da preskoite ovu datoteku (nije preporueno), ili Abort da prekinete instalaciju.
+FileAbortRetryIgnore2=Kliknite Retry da pokuate ponovo, Ignore da preskoite ovu datoteku (nije preporueno), ili Abort da prekinete instalaciju.
+SourceIsCorrupted=Izvorna datoteka je oteena
+SourceDoesntExist=Izvorna datoteka "%1" ne postoji
+ExistingFileReadOnly=Postojea datoteka je oznaena kao samo za itanje.%n%nKliknite Retry da uklonite ovu oznaku i pokuate ponovo, Ignore da preskoite ovu datoteku, ili Abort da prekinete instalaciju.
+ErrorReadingExistingDest=Dolo je do greke prilikom pokuaja itanja postojee datoteke:
+FileExists=Datoteka ve postoji.%n%nelite li pisati preko nje?
+ExistingFileNewer=Postojea datoteka je novija od one koju pokuavate instalirati. Preporuujemo vam da zadrite postojeu datoteku.%n%nelite li zadrati postojeu datoteku?
+ErrorChangingAttr=Pojavila se greka prilikom pokuaja promjene atributa postojee datoteke:
+ErrorCreatingTemp=Pojavila se greka prilikom pokuaja kreiranja datoteke u odredinom folderu:
+ErrorReadingSource=Pojavila se greka prilikom pokuaja itanja izvorne datoteke:
+ErrorCopying=Pojavila se greka prilikom pokuaja kopiranja datoteke:
+ErrorReplacingExistingFile=Pojavila se greka prilikom pokuaja zamjene datoteke:
+ErrorRestartReplace=Ponovno pokretanje i zamjena nije uspjela:
+ErrorRenamingTemp=Pojavila se greka prilikom pokuaja preimenovanja datoteke u odredinom folderu:
+ErrorRegisterServer=Ne mogu registrovati DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 nije ispravno izvren, kod na kraju izvravanja %1
+ErrorRegisterTypeLib=Ne mogu registrovati tip biblioteke: %1
+
+; *** Post-installation errors
+ErrorOpeningReadme=Pojavila se greka prilikom pokuaja otvaranja README datoteke.
+ErrorRestartingComputer=Instalacija ne moe restartovati va raunar. Molimo vas da to uinite runo.
+
+; *** Uninstaller messages
+UninstallNotFound=Datoteka "%1" ne postoji. Deinstalacija prekinuta.
+UninstallOpenError=Datoteka "%1" se ne moe otvoriti. Deinstalacija nije mogua
+UninstallUnsupportedVer=Deinstalacijska log datoteka "%1" je u formatu koji nije prepoznat od ove verzije deinstalera. Nije mogua deinstalacija
+UninstallUnknownEntry=Nepoznat zapis (%1) je pronadjen u deinstalacijskoj log datoteci
+ConfirmUninstall=Da li ste sigurni da elite ukloniti %1 i sve njegove komponente?
+UninstallOnlyOnWin64=Ovaj program se moe deinstalirati samo na 64-bitnom Windowsu.
+OnlyAdminCanUninstall=Ova instalacija moe biti uklonjena samo od korisnika sa administratorskim privilegijama.
+UninstallStatusLabel=Molimo priekajte dok %1 ne bude uklonjen s vaeg raunara.
+UninstalledAll=Program %1 je uspjeno uklonjen sa vaeg raunara.
+UninstalledMost=Deinstalacija programa %1 je zavrena.%n%nNeke elemente nije bilo mogue ukloniti. Molimo vas da to uinite runo.
+UninstalledAndNeedsRestart=Da bi zavrili deinstalaciju %1, Va raunar morate restartati%n%nelite li to uiniti sada?
+UninstallDataCorrupted="%1" datoteka je oteena. Deinstalacija nije mogua.
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Ukloni dijeljenu datoteku
+ConfirmDeleteSharedFile2=Sistem smatra da sljedee dijeljene datoteke ne koristi nijedan drugi program. elite li ukloniti te dijeljene datoteke?%n%nAko neki programi i dalje koriste ove datoteke, a one se obriu, ti programi nee raditi ispravno. Ako niste sigurni, odaberite Ne. Ostavljanje datoteka nee uzrokovati tetu vaem sistemu.
+SharedFileNameLabel=Datoteka:
+SharedFileLocationLabel=Putanja:
+WizardUninstalling=Status deinstalacije
+StatusUninstalling=Deinstaliram %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Instaliram %1.
+ShutdownBlockReasonUninstallingApp=Deinstaliram %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 verzija %2
+AdditionalIcons=Dodatne ikone:
+CreateDesktopIcon=Kreiraj &desktop ikonu
+CreateQuickLaunchIcon=Kreiraj ikonu za &brzo pokretanje
+ProgramOnTheWeb=%1 na webu
+UninstallProgram=Deinstaliraj %1
+LaunchProgram=Pokreni %1
+AssocFileExtension=&Asociraj %1 sa %2 ekstenzijom
+AssocingFileExtension=Asociram %1 sa %2 ekstenzijom...
+AutoStartProgramGroupDescription=Pokretanje:
+AutoStartProgram=Automatski pokrei %1
+AddonHostProgramNotFound=%1 nije mogao biti pronaen u folderu koji ste odabrali.%n%nDa li i dalje elite nastaviti s ovom akcijom?
diff --git a/distrib/Languages/Croatian.isl b/distrib/Languages/Croatian.isl
index 75d4c6f83..e05ba3c27 100644
--- a/distrib/Languages/Croatian.isl
+++ b/distrib/Languages/Croatian.isl
@@ -145,7 +145,7 @@ SelectDirLabel3=Instalacija e instalirati [name] u sljedeu mapu
SelectDirBrowseLabel=Za nastavak kliknite na Nastavak. Ako elite odabrati drugu mapu kliknite na Odaberi.
DiskSpaceMBLabel=Ovaj program zahtjeva minimalno [mb] MB slobodnog prostora na disku.
CannotInstallToNetworkDrive=Instalacija ne moe instalirati na mrenu jedinicu.
-CannotInstallToUNCPathname=Instalacija ne moe instalirati na UNC putanju.
+CannotInstallToUNCPath=Instalacija ne moe instalirati na UNC putanju.
InvalidPath=Morate unijeti punu stazu zajedno sa slovom diska (npr.%n%nC:\APP%n%nili stazu u obliku%n%n\\server\share)
InvalidDrive=Disk koji ste odabrali ne postoji. Odaberite neki drugi.
DiskSpaceWarningTitle=Nedovoljno prostora na disku
@@ -325,6 +325,7 @@ ShutdownBlockReasonUninstallingApp=Deinstaliram %1.
; use of them in your scripts, you'll want to translate them.
[CustomMessages]
+
NameAndVersion=%1 verzija %2
AdditionalIcons=Dodatne ikone:
CreateDesktopIcon=Kreiraj ikonu na &Desktopu
diff --git a/distrib/Languages/Indonesian.isl b/distrib/Languages/Indonesian.isl
new file mode 100644
index 000000000..c0a811926
--- /dev/null
+++ b/distrib/Languages/Indonesian.isl
@@ -0,0 +1,340 @@
+; *** Inno Setup versi 5.5.3+ Bahasa Indonesia ***
+;
+; Untuk mengunduh terjemahan kontribusi-pemakai dari berkas ini, buka:
+; http://www.jrsoftware.org/files/istrans/
+;
+; Alih bahasa oleh: Muchammad Ulil Wafa (mozaik.tm@gmail.com)
+; http://muchammadulilwafa.blogspot.com/
+; http://mozaik-tkj.blogspot.com/
+; http://smadaver.com/profile/?u=84302
+;
+; Catatan: Ketika menterjemahkan teks ini, jangan masukkan titik (.) di akhir
+; pesan yang memang tidak memiliki titik, karena Inno Setup memasukkan titik
+; secara otomatis (menambahkan titik dapat menyebabkan tampilnya dua titik)
+
+[LangOptions]
+; Tiga baris di bawah ini sangat penting. Pastikan membaca dan mengerti
+; topik bagian '[LangOptions]' pada berkas bantuan.
+LanguageName=Indonesian
+LanguageID=$0421
+LanguageCodePage=0
+; Jika bahasa yang anda terjemahkan membutuhkan huruf atau ukuran khusus,
+; hapus tanda titik koma pada entri di bawah dan ubah sesuai kebutuhan.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Judul aplikasi
+SetupAppTitle=Instalasi
+SetupWindowTitle=Instalasi - %1
+UninstallAppTitle=Penghapusan
+UninstallAppFullTitle=Penghapusan %1
+
+; *** Jenis jenis umum
+InformationTitle=Informasi
+ConfirmTitle=Konfirmasi
+ErrorTitle=Kesalahan
+
+; *** Pesan SetupLdr
+SetupLdrStartupMessage=Program ini akan memasang %1. Lanjutkan?
+LdrCannotCreateTemp=Tidak dapat membuat berkas sementara. Instalasi dibatalkan
+LdrCannotExecTemp=Tidak dapat mengeksekusi berkas di direktori sementara. Instalasi dibatalkan
+;
+; *** Pesan eror saat Startup
+LastErrorMessage=%1.%n%nError %2: %3
+SetupFileMissing=Berkas %1 hilang dari direktori instalasi. Harap selesaikan masalah ini atau dapatkan salinan instalasi yang baru.
+SetupFileCorrupt=Berkas instalasi telah rusak. Harap dapatkan salinan instalasi yang baru.
+SetupFileCorruptOrWrongVer=Berkas instalasi telah rusak, atau tidak cocok dengan versi instalasi ini. Harap selesaikan masalah atau dapatkan salinan instalasi yang baru.
+InvalidParameter=Parameter tidak sah ditemukan di perintah:%n%n%1
+SetupAlreadyRunning=Instalasi sudah berjalan.
+WindowsVersionNotSupported=Versi program ini tidak mendukung versi Windows yang anda gunakan.
+WindowsServicePackRequired=Program ini memebutuhkan %1 Service Pack %2 atau yang terbaru.
+NotOnThisPlatform=Program ini tidak berjalan di %1.
+OnlyOnThisPlatform=Program ini harus dijalankan di %1.
+OnlyOnTheseArchitectures=Program ini hanya bisa dipasang di Windows yang mendukung arsitektur prosesor:%n%n1
+MissingWOW64APIs=Versi Windows yang anda gunakan tidak memiliki fungsi yang yang diperlukan untuk instalasi 64-bit. Untuk memperbaiki masalah ini, harap pasang Service Pack %1.
+WinVersionTooLowError=Program ini membutuhkan %1 versi %2 atau yang terbaru.
+WinVersionTooHighError=Program ini tidak dapat dipasang pada %1 versi %2 atau yang terbaru.
+AdminPrivilegesRequired=Anda harus masuk sebagai Administrator ketika memasang program ini.
+PowerUserPrivilegesRequired=Anda harus masuk sebagai Administrator atau sebagai salah satu anggota grup Super Users ketika memasang program ini.
+SetupAppRunningError=Instalasi mendeteksi bahwa %1 sedang berjalan.%n%nHarap tutup semua aplikasi ini sekarang, kemudian klik OK untuk melanjutkan, atau Cancel untuk keluar.
+UninstallAppRunningError=Instalasi mendeteksi bahwa %1 sedang berjalan.%n%nHarap tutup semua aplikasi ini sekarang, kemudian klik OK untuk melanjutkan, atau Cancel untuk keluar.
+
+; *** Beberapa pesan kesalahan
+ErrorCreatingDir=Instalasi tidak dapat membuat direktori "%1"
+ErrorTooManyFilesInDir=Tidak dapat membuat berkas di direktori "%1" karena berisi terlalu banyak berkas
+
+; *** Pesan instalasi biasa
+ExitSetupTitle=Keluar Instalasi
+ExitSetupMessage=Instalasi tidak lengkap. Jika anda keluar sekarang, program ini tidak akan terpasang.%n%nAnda dapat memasang kembali di lain waktu untuk melengkapi instalasi.%n%nKeluar dari Instalasi?
+AboutSetupMenuItem=&Tentang Instalasi...
+AboutSetupTitle=Tentang Instalasi
+AboutSetupMessage=%1 versi %2%n%3%n%nHalaman web %1:%n%4
+AboutSetupNote=
+TranslatorNote=
+
+; *** Tombol
+ButtonBack=< &Kembali
+ButtonNext=&Lanjut >
+ButtonInstall=&Pasang
+ButtonOK=OK
+ButtonCancel=Batal
+ButtonYes=&Ya
+ButtonYesToAll=Ya semua
+ButtonNo=&Tidak
+ButtonNoToAll=&Tidak semua
+ButtonFinish=&Selesai
+ButtonBrowse=&Jelajahi...
+ButtonWizardBrowse=J&elajahi...
+ButtonNewFolder=&Buat Folder Baru
+
+; *** Pesan dialog "Pilih Bahasa"
+SelectLanguageTitle=Pilih Bahasa Instalasi
+SelectLanguageLabel=Pilih bahasa yang digunakan selama instalasi:
+
+; *** Teks wizard biasa
+ClickNext=Klik Lanjut untuk melanjutkan, atau klik Batal untuk keluar dari Instalasi.
+BeveledLabel=
+BrowseDialogTitle=Jelajahi Folder
+BrowseDialogLabel=Pilih sebuah folder di bawah, lalu klik OK.
+NewFolderName=Folder Baru
+
+; *** Halaman "Selamat Datang"
+WelcomeLabel1=Selamat datang di Instalasi [name]
+WelcomeLabel2=Program ini akan memasang [name/ver] di komputer anda.%n%nDisarankan untuk menutup semua aplikasi yang berjalan sebelum melanjutkan.
+
+; *** Halaman "Kata Sandi"
+WizardPassword=Kata Sandi
+PasswordLabel1=Instalasi ini dilindungi kata sandi.
+PasswordLabel3=Harap masukkan kata sandi, klik Lanjut untuk melanjutkan. Kata sandi bersifat sensitif.
+PasswordEditLabel=&Kata Sandi:
+IncorrectPassword=Kata sandi yang anda masukkan salah. Silahkan coba lagi.
+
+; *** "License Agreement" wizard page
+WizardLicense=Persetujuan Lisensi
+LicenseLabel=Harap baca informasi penting berikut sebelum melanjutkan.
+LicenseLabel3=Harap baca Persetujuan Lisensi berikut. Anda harus setuju dengan persetujuan lisensi ini sebelum melanjutkan instalasi.
+LicenseAccepted=&Ya, saya setuju
+LicenseNotAccepted=&Tidak, saya tidak setuju
+
+; *** Halaman "Informasi"
+WizardInfoBefore=Informasi
+InfoBeforeLabel=Harap baca informasi penting berikut sebelum melanjutkan.
+InfoBeforeClickLabel=Jika anda siap melanjutkan, klik Lanjut.
+WizardInfoAfter=Informasi
+InfoAfterLabel=Harap baca informasi penting berikut sebelum melanjutkan.
+InfoAfterClickLabel=Jika anda siap melanjutkan, klik Lanjut.
+
+; *** Halaman "Informasi Pengguna"
+WizardUserInfo=Infornasi pengguna
+UserInfoDesc=Masukkan informasi anda.
+UserInfoName=&Nama Pengguna:
+UserInfoOrg=&Organisasi:
+UserInfoSerial=&Nomor Seri:
+UserInfoNameRequired=Anda harus memasukkan nama.
+
+; *** Halaman "Pilih Lokasi Instalasi"
+WizardSelectDir=Pilih Lokasi Instalasi
+SelectDirDesc=Dimana [name] akan dipasang?
+SelectDirLabel3=Program akan memasang [name] di folder yang dipilih.
+SelectDirBrowseLabel=Untuk melanjutkan, klik Lanjut. Jika anda ingin memilik folder lain, klik Jelajahi.
+DiskSpaceMBLabel=Dibutuhkan setidaknya [mb] MB ruang bebas.
+CannotInstallToNetworkDrive=Tidak dapat memasang di drive jaringan.
+CannotInstallToUNCPath=Tidak dapat memasang di UNC path.
+InvalidPath=Anda harus memasukkan alamat beserta lokasi drive; contoh:%n%nC:\APP%n%maupun sebuah lokasi UNC:%n%n\\server\share
+InvalidDrive=Drive atau UNC yang anda pilih tidak ada atau tidak dapat diakses. Harap pilih yang lain.
+DiskSpaceWarningTitle=Ruang Bebas Tidak Cukup
+DiskSpaceWarning=Program membutuhkan setidaknya %1 KB untuk instalasi, tetapi drive yang anda pilih hanya memiliki %2 yang tersedia.%n%nApakah anda tetap ingin melanjutkan?
+DirNameTooLong=Nama folder atau lokasi terlalu panjang.
+InvalidDirName=Nama folder tidak sah.
+BadDirName32=Nama folder tidak boleh berisi karakter berikut:%n%n%1
+DirExistsTitle=Folder Sudah Ada
+DirExists=Folder:%n%n%1%n%nsudah ada. Apakah anda tetap ingin melanjutkan?
+DirDoesntExistTitle=Folder Tidak Ada
+DirDoesntExist=Folder:%n%n%1%n%ntidak ada. Apakah anda ingin membuatnya?
+
+; *** Halaman "Pilih Komponen"
+WizardSelectComponents=Pilih Komponen
+SelectComponentsDesc=Komponen mana saja yang akan dipasang?
+SelectComponentsLabel2=Pilih komponen yang ingin anda pasang; bersihkan komponen yang tidak ingin anda pasang. Klik Lanjut jika anda sudah siap melanjutkan.
+FullInstallation=Instalasi Penuh
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Instalasi Padat
+CustomInstallation=Instalasi Kustom
+NoUninstallWarningTitle=Komponen Sudah Ada
+NoUninstallWarning=Instalasi mendeteksi komponen berikut telah terpasang di komputer anda:%n%n%1%n%nMembatalkan pilihan komponen ini tidak akan menghapusnya.%n%nTetap lanjutkan?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceMBLabel=Pilihan ini membutuhkan setidaknya [mb] MB ruang bebas.
+
+; *** Halaman "Pilih Perintah Tambahan"
+WizardSelectTasks=Pilih Perintah Tambahan
+SelectTasksDesc=Perintah tambahan mana saja yang harus dilakukan?
+SelectTasksLabel2=Pilih perintah tambahan yang anda ingin lakukan saat memasang [name], lalu klik Lanjut.
+
+; *** Halaman "Pilih Folder Start Menu"
+WizardSelectProgramGroup=Pilih Folder Start Menu
+SelectStartMenuFolderDesc=Dimana Instalasi harus meletakkan jalan pintas program?
+SelectStartMenuFolderLabel3=Instalasi akan membuat jalan pintas program di folder Start Menu berikut.
+SelectStartMenuFolderBrowseLabel=Untuk melanjutkan, klik Lanjut. Jika anda ingin memilih folder lain, klik Jelajahi.
+MustEnterGroupName=Anda harus memasukkan nama folder.
+GroupNameTooLong=nama folder atau lokasi terlalu panjang.
+InvalidGroupName=Nama folder tidak sah.
+BadGroupName=Nama folder tidak boleh berisi karakter berikut:%n%n%1
+NoProgramGroupCheck2=&Jangan buat folder Start Menu
+
+; *** Halaman "Siap Memasang"
+WizardReady=Siap Memasang
+ReadyLabel1=Sekarang Instalasi siap memasang [name] di komputer anda.
+ReadyLabel2a=Klik Pasang untuk melanjutkan instalasi, atau klik Kembali jika anda ingin melihat atau mengubah pilihan.
+ReadyLabel2b=Klik Pasang untuk melanjutkan instalasi.
+ReadyMemoUserInfo=Informasi Pengguna:
+ReadyMemoDir=Lokasi instalasi:
+ReadyMemoType=Tipe instalasi:
+ReadyMemoComponents=Komponen terpilih:
+ReadyMemoGroup=Folder Start Menu:
+ReadyMemoTasks=Perintah tambahan:
+
+; *** Halaman "Bersiap Memasang"
+WizardPreparing=Bersiap Memasang
+PreparingDesc=Sedang bersiap untuk memasang [name] di komputer anda.
+PreviousInstallNotCompleted=Instalasi/penghapusan sebelumnya tidak lengkap. Anda mungkin harus memulai ulang komputer anda untuk melengkapi instalasi.%n%nSetelah memulai ulang komputer anda, jalankan Instalasi kembali untuk melengkapi instalasi [name]
+CannotContinue=Tidak dapat melanjutkan. Klik Batal untuk keluar.
+ApplicationsFound=Aplikasi berikut sedang menggunakan berkas yang harus diperbarui. Direkomendasikan untuk membiarkan Instalasi untuk menutup aplikasi ini secara otomatis.
+ApplicationsFound2=Aplikasi berikut sedang menggunakan berkas yang harus diperbarui. Direkomendasikan untuk membiarkan Instalasi untuk menutup aplikasi ini secara otomatis. Setelah pemasangan selesai, Instalasi akan berusaha menjalankan kembali aplikasi tersebut.
+CloseApplications=&Otomatis tutup semua aplikasi
+DontCloseApplications=&Jangan tutup aplikasi tersebut
+ErrorCloseApplications=Instalasi tidak dapat menutup aplikasi secara otomatis. Anda disarankan untuk menutup aplikasi yang sedang menggunakan berkas yang perlu diperbarui oleh Instalasi sebelum melanjutkan.
+
+; *** Halaman "Memasang"
+WizardInstalling=Memasang
+InstallingLabel=Harap tunggu sementara Instalasi memasang [name] di komputer anda.
+
+; *** Halaman "Instalasi Lengkap"
+FinishedHeadingLabel=Melengkapi instalasi [name]
+FinishedLabelNoIcons=Berhasil memasang [name] di komputer anda.
+FinishedLabel=Instalasi berhasil memasang [name] di komputer anda. Aplikasi tersebut dapat dijalankan dengan memilih jalan pintas yang terpasang.
+ClickFinish=Klik Selesai untuk keluar.
+FinishedRestartLabel=Untuk melengkapi pemasangan [name], Instalasi harus memulai ulang komputer anda. Lakukan sekarang?
+FinishedRestartMessage=Untuk melengkapi pemasangan [name], Instalasi harus memulai ulang komputer anda.%n%nLakukan sekarang?
+ShowReadmeCheck=Ya, baca berkas README sekarang
+YesRadio=&Ya, mulai ulang komputer sekarang
+NoRadio=&Tidak, saya akan memulai ulang nanti
+; Contoh penggunaan: 'Run MyProg.exe'
+RunEntryExec=Jalankan %1
+; Contoh penggunaan: 'View Readme.txt'
+RunEntryShellExec=Lihat %1
+
+; *** Isian "Instalasi Membutuhkan Diska Lanjutan"
+ChangeDiskTitle=Instalasi Membuthkan Diska Lanjutan
+SelectDiskLabel2=Harap masukan Diska %1 dan klik OK.%n%nJika berkas dalam diska ini dapat ditemukan di folder lain yang ditampilkan di bawah, masukkan lokasi yang benar atau klik Jelajahi.
+PathLabel=&Lokasi:
+FileNotInDir2=Berkas "%1" tidak dapat ditemukan di "%2". Harap masukkan diska yang benar atau pilih folder lain.
+SelectDirectoryLabel=Harap masukkan lokasi dari diska lanjutan.
+
+; *** Pesan proses instalasi
+SetupAborted=Instalasi tidak lengkap.%n%nHarap perbaiki masalah dan jalankan Instalasi kembali.
+EntryAbortRetryIgnore=Klik Retry untuk mencoba lagi, Ignore untuk mengabaikan, atau Abort untuk membatalkan instalasi.
+
+; *** Pesan status instalasi
+StatusClosingApplications=Menutup aplikasi...
+StatusCreateDirs=Membuat direktori...
+StatusExtractFiles=Mengekstrak berkas...
+StatusCreateIcons=Membuat jalan pintas...
+StatusCreateIniEntries=Membuat entri INI...
+StatusCreateRegistryEntries=Membuat entri registry...
+StatusRegisterFiles=Meregistrasi berkas...
+StatusSavingUninstall=Menyimpan informasi penghapusan...
+StatusRunProgram=Mengakhiri instalasi...
+StatusRestartingApplications=Menjalankan ulang aplikasi...
+StatusRollback=Membatalkan perubahan...
+
+; *** Macam macam kesalahan
+ErrorInternal2=Kesalahan internal: %1
+ErrorFunctionFailedNoCode=%1 failedgagal
+ErrorFunctionFailed=%1 gagal; kode %2
+ErrorFunctionFailedWithMessage=%1 gagal; kode %2.%n%3
+ErrorExecutingProgram=Tidak dapat mengeksekusi berkas:%n%1
+
+; *** Kesalahan Registry
+ErrorRegOpenKey=Gagal menbuka kunci registry:%n%1\%2
+ErrorRegCreateKey=Gagal membuat kunci registry:%n%1\%2
+ErrorRegWriteKey=Gagal menulis isi registry:%n%1\%2
+
+; *** Kesalahan INI
+ErrorIniEntry=Gagal membuat entri INI pada berkas "%1".
+
+; *** Kesalahan salin berkas
+FileAbortRetryIgnore=Klik Retry untuk mencoba lagi, Ignore untuk mengabaikan berkas (tidak disarankan), atau Abort untuk membatalkan instalasi.
+FileAbortRetryIgnore2=Klik Retry untuk mencoba lagi, Ignore untuk mengabaikan berkas (tidak disarankan), atau Abort untuk membatalkan instalasi.
+SourceIsCorrupted=Berkas asal telah rusak
+SourceDoesntExist=Berkas asal "%1" tidak ada
+ExistingFileReadOnly=Berkas yang sudah ada diatur menjadi hanya-baca.%n%nClick Retry untuk menghapus atribut hanya-baca dan mencoba lagi, Ignore untuk mengabaikan berkas, atau Abort untuk membatalkan instalasi.
+ErrorReadingExistingDest=Kesalahan terjadi saat mencoba membaca berkas:
+FileExists=Berkas sudah ada.%n%nApakah anda ingin Instalasi menimpanya?
+ExistingFileNewer=Berkas yang sudah ada lebih baru dari yang Instalasi coba pasang. Disarankan untuk membiarkan berkas tersebut.%n%nApa anda ingin membiar berkas tersebut?
+ErrorChangingAttr=Kesalahan terjadi saat mencoba mengubah atribut berkas:
+ErrorCreatingTemp=Kesalahan terjadi saat mencoba membuat berkas di lokasi instalasi:
+ErrorReadingSource=Kesalahan terjadi saat mencoba membaca berkas sumber:
+ErrorCopying=Kesalahan terjadi saat mencoba menyalin berkas:
+ErrorReplacingExistingFile=Kesalahan terjadi saat mencoba menimpa berkas:
+ErrorRestartReplace=RestartReplace gagal:
+ErrorRenamingTemp=Kesalahan terjadi saat mencoba mengubah nama berkas di lokasi instalasi:
+ErrorRegisterServer=Tidak dapat meregistrasi DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 gagal dengan kode %1
+ErrorRegisterTypeLib=Tidak dapat meregistrasi berkas: %1
+
+; *** Kesalahan setelah instalasi
+ErrorOpeningReadme=Kesalahan terjadi saat mencoba membuka berkas README.
+ErrorRestartingComputer=Program instalasi tidak dapat memulai ulang komputer. Harap lakukan secara manual.
+
+; *** Pesan Penghapusan
+UninstallNotFound=Berkas "%1" tidak ada. Tidak dapat menghapus.
+UninstallOpenError=Berkas "%1" tidak dapat dibuka. Tidak dapat menghapus.
+UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognized by this version of the uninstaller. Cannot uninstall
+UninstallUnknownEntry=Entri tidak dikenal (%1) ditemukan di catatan penghapusan
+ConfirmUninstall=Apakah anda yakin ingin menghapus seluruh %1 dan semua komponennya?
+UninstallOnlyOnWin64=Instalasi ini hanya bisa dihapus di Windows 64-bit.
+OnlyAdminCanUninstall=Instalasi ini hanya bisa dihapus oleh pengguna dengan ijin administrator.
+UninstallStatusLabel=Mohon tunggu sementara %1 dihapus dari komputer anda.
+UninstalledAll=%1 berhasil dihapus dari komputer anda.
+UninstalledMost=Penghapusan %1 telah selesai.%n%nBeberapa berkas tidak dapat dihapus. Anda dapat menghapusnya secara manual.
+UninstalledAndNeedsRestart=Untuk melengkapi penghapusan %1, komputer anda harus dimulai ulang.%n%nMulai ulang sekarang?
+UninstallDataCorrupted=Berkas "%1" telah rusak. Tidak dapat memasang
+
+; *** Pesan proses penghapusan
+ConfirmDeleteSharedFileTitle=Hapus berbagi berkas?
+ConfirmDeleteSharedFile2=Sistem mendeteksi bahwa berkas yang dibagikan tidak digunakan oleh program manapun. Apakah anda ingin Penghapus untuk menghapus berkas yang dibagikan ini?%n%nJika ada aplikasi yang masih memerlukan berkas ini dan berkas ini dihapus, aplikasi tersebut mungkin tidak bisa bekerja dengan semestinya. Jika anda tidak yakin, pilih No. Meninggalkan berkas ini di komputer anda tidak membahayakan sistem anda.
+SharedFileNameLabel=Nama berkas:
+SharedFileLocationLabel=Lokasi:
+WizardUninstalling=Status penghapusan
+StatusUninstalling=Menghapus %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Memasang %1.
+ShutdownBlockReasonUninstallingApp=Menghapus %1.
+
+; Pesan kustom di bawah ini tidak digunakan oleh Instalasi itu sendiri,
+; tetapi jika anda membuatnya diperlukan di skrip anda, anda perlu menterjemahkannya
+
+[CustomMessages]
+
+NameAndVersion=%1 versi %2
+AdditionalIcons=Jalan pintas tambahan:
+CreateDesktopIcon=Buat jalan pintas di &Desktop
+CreateQuickLaunchIcon=Buat jalan pintah di &Quick Launch
+ProgramOnTheWeb=%1 di Web
+UninstallProgram=Hapus %1
+LaunchProgram=Jalankan %1
+AssocFileExtension=&Hubungkan %1 dengan berkas berekstensi %2
+AssocingFileExtension=Menghubungkan %1 dengan ekstensi berkas %2...
+AutoStartProgramGroupDescription=Startup:
+AutoStartProgram=Jalankan %1 secara otomatis
+AddonHostProgramNotFound=%1 tidak dapat diletakkan di folder yang anda pilih.%n%nApakah anda tetap ingin melanjutkan?
diff --git a/distrib/Languages/Lithuanian.isl b/distrib/Languages/Lithuanian.isl
new file mode 100644
index 000000000..667c50627
--- /dev/null
+++ b/distrib/Languages/Lithuanian.isl
@@ -0,0 +1,339 @@
+; *** Inno Setup version 5.5.3+ Lithuanian messages ***
+;
+; To download user-contributed translations of this file, go to:
+; http://www.jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+; Translated by Robertas Rimas (Loptar AT takas DOT lt)
+; Corrected and updated by Rolandas Rudomanskis (rolandasr AT gmail DOT com)
+; Corrected and updated to version 5.5.3+ by Dalius Guzauskas (d DOT guzauskas AT gmail DOT com)
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=Lietuvi<0173>
+LanguageID=$0427
+LanguageCodePage=1257
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Diegimas
+SetupWindowTitle=Diegimas - %1
+UninstallAppTitle=Paalinimas
+UninstallAppFullTitle=%1 paalinimas
+
+; *** Misc. common
+InformationTitle=Informacija
+ConfirmTitle=Patvirtinimas
+ErrorTitle=Klaida
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=%1 diegimas. Ar norite tsti?
+LdrCannotCreateTemp=Negaliu sukurti laikinosios bylos. Diegimas nutraukiamas.
+LdrCannotExecTemp=Negaliu vykdyti bylos laikinajame kataloge. Diegimas nutraukiamas.
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nKlaida %2: %3
+SetupFileMissing=Diegimo kataloge nerasta byla %1. Praome itaisyti i problem arba sigyti nauj programos kopij.
+SetupFileCorrupt=diegiamos bylos sugadintos. sigykite nauj programos kopij.
+SetupFileCorruptOrWrongVer=diegiamos bylos yra sugadintos arba nesuderinamos su diegimo programa. Itaisykite problem arba sigykite nauj programos kopij.
+InvalidParameter=Klaidingas parametras buvo gautas i komandins eiluts:%n%n%1
+SetupAlreadyRunning=Diegimo programa jau yra paleista.
+WindowsVersionNotSupported=i programa nesuderinama su Js kompiuteryje diegta Windows versija.
+WindowsServicePackRequired=i programa reikalauja %1 Service Pack %2 ar vlesns versijos.
+NotOnThisPlatform=i programa negali bti paleista %1 aplinkoje.
+OnlyOnThisPlatform=i programa turi bti leidiama %1 aplinkoje.
+OnlyOnTheseArchitectures=i programa gali bti diegta tik Windows versijose, turiniose ias procesoriaus architektras:%n%n%1
+MissingWOW64APIs=Windows versija, kuri Js naudojate, neturi funkcij, reikaling atlikti 64 bit diegimams. Tam, kad isprstumte i problem, diekite Service Pack %1.
+WinVersionTooLowError=i programa reikalauja %1 %2 ar vlesns versijos.
+WinVersionTooHighError=i programa negali bti diegta %1 %2 ar vlesns versijos aplinkoje.
+AdminPrivilegesRequired=ios programos diegimui privalote bti prisijungs Administratoriaus teismis.
+PowerUserPrivilegesRequired=ios programos diegimui privalote bti prisijungs Administratoriaus arba Power Users grups nario teismis.
+SetupAppRunningError=Diegimo programa aptiko, kad yra paleista %1.%n%nUdarykite visas paleistas ios programos kopijas ir, jei norite tsti, paspauskite Gerai arba Ataukti, jei norite nutraukti diegim.
+UninstallAppRunningError=Paalinimo programa aptiko, kad yra paleista %1.%n%nUdarykite visas paleistas ios programos kopijas ir, jei norite tsti, paspauskite Gerai arba Ataukti, jei norite nutraukti diegim.
+
+; *** Misc. errors
+ErrorCreatingDir=Diegimo programa negali sukurti katalogo %1
+ErrorTooManyFilesInDir=Nemanoma sukurti bylos kataloge %1, nes jame per daug byl
+
+; *** Setup common messages
+ExitSetupTitle=Udaryti diegimo program
+ExitSetupMessage=Diegimas nebaigtas. Jei baigsite dabar, programa nebus diegta.%n%nJs galite paleisti diegimo program kit kart, kad pabaigtumte diegim.%n%nUdaryti diegimo program?
+AboutSetupMenuItem=&Apie diegimo program...
+AboutSetupTitle=Apie diegimo program
+AboutSetupMessage=%1 versija %2%n%3%n%n%1 puslapis internete:%n%4
+AboutSetupNote=
+TranslatorNote=
+
+; *** Buttons
+ButtonBack=< &Atgal
+ButtonNext=&Pirmyn >
+ButtonInstall=&diegti
+ButtonOK=Gerai
+ButtonCancel=Ataukti
+ButtonYes=&Taip
+ButtonYesToAll=Taip &visk
+ButtonNo=&Ne
+ButtonNoToAll=N&e nieko
+ButtonFinish=&Pabaiga
+ButtonBrowse=&Nurodyti...
+ButtonWizardBrowse=Nu&rodyti...
+ButtonNewFolder=&Naujas katalogas
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Nurodykite diegimo programos kalb
+SelectLanguageLabel=Nurodykite diegimo metu naudojam kalb:
+
+; *** Common wizard text
+ClickNext=Paspauskite Pirmyn, jei norite tsti, arba Ataukti, jei norite ieiti i diegimo programos.
+BeveledLabel=
+BrowseDialogTitle=Nurodykite katalog
+BrowseDialogLabel=Pasirinkite katalog i srao ir paspauskite Gerai.
+NewFolderName=Naujas katalogas
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Sveiki! ia [name] diegimo programa.
+WelcomeLabel2=Diegimo programa diegs [name] Js kompiuteryje.%n%nPrie tsiant diegim, rekomenduojama udaryti visas nereikalingas programas.
+
+; *** "Password" wizard page
+WizardPassword=Slaptaodis
+PasswordLabel1=is diegimas yra apsaugotas slaptaodiu.
+PasswordLabel3=veskite slaptaod ir spauskite Pirmyn, jei norite tsti diegim. Atkreipkite dmes: didiosios ir maosios raids vertinamos skirtingai (case sensitive).
+PasswordEditLabel=&Slaptaodis:
+IncorrectPassword=vestas slaptaodis yra neteisingas. Praome bandyti i naujo.
+
+; *** "License Agreement" wizard page
+WizardLicense=Licencin sutartis
+LicenseLabel=Praome perskaityti i informacij prie tsdami diegim.
+LicenseLabel3=Praome perskaityti Licencijos sutart. Prie tsdami diegim Js turite sutikti su reikalavimais.
+LicenseAccepted=A &sutinku su reikalavimais
+LicenseNotAccepted=A &nesutinku su reikalavimais
+
+; *** "Information" wizard pages
+WizardInfoBefore=Informacija
+InfoBeforeLabel=Praome perskaityti i informacij prie tsiant diegim.
+InfoBeforeClickLabel=Kai bsite pasiruos tsti diegim, spauskite Pirmyn.
+WizardInfoAfter=Informacija
+InfoAfterLabel=Praome perskaityti i informacij prie tsiant diegim.
+InfoAfterClickLabel=Kai bsite pasiruos tsti diegim, spauskite Pirmyn.
+
+; *** "User Information" wizard page
+WizardUserInfo=Informacija apie vartotoj
+UserInfoDesc=Praome vesti vartotojo duomenis.
+UserInfoName=&Vartotojo vardas:
+UserInfoOrg=&Organizacija:
+UserInfoSerial=&Serijinis numeris:
+UserInfoNameRequired=Js privalote vesti vard.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Pasirinkite diegimo katalog
+SelectDirDesc=Kur turi bti diegta [name]?
+SelectDirLabel3=Diegimo programa diegs [name] nurodyt katalog.
+SelectDirBrowseLabel=Nordami tsti diegim spauskite Pirmyn. Jei norite pasirinkti kit katalog, spauskite Nurodyti.
+DiskSpaceMBLabel=Reikia maiausiai [mb] MB laisvos vietos kietajame diske.
+CannotInstallToNetworkDrive=Diegimo programa negali diegti tinklin disk.
+CannotInstallToUNCPath=Diegimo programa negali diegti UNC tipo katalog.
+InvalidPath=Js privalote rayti piln keli su disko raide; pavyzdiui:%n%nC:\APP%n% ir negalima nurodyti UNC tipo katalog:%n%n\\Serveris\share
+InvalidDrive=Diskas, kur nurodte, neegzistuoja arba yra neprieinamas. Praome nurodyti kit disk ir/arba katalog.
+DiskSpaceWarningTitle=Nepakanka laisvos vietos diske
+DiskSpaceWarning=Diegimui reikia bent %1 KB laisvos vietos, bet nurodytame diske yra tik %2 KB laisvos vietos.%n%nAr Js vis tiek norite tsti?
+DirNameTooLong=Katalogo pavadinimas ar kelias iki jo per ilgas.
+InvalidDirName=Nekorektikas katalogo pavadinimas.
+BadDirName32=Katalogo pavadinime neturi bti simboli:%n%n%1
+DirExistsTitle=Toks katalogas egzistuoja
+DirExists=Katalogas:%n%n%1%n%n jau egzistuoja. Ar vistiek norite diegti program tame kataloge?
+DirDoesntExistTitle=Toks katalogas neegzistuoja.
+DirDoesntExist=Katalogas:%n%n%1%n%n neegzistuoja. Ar norite kad katalogas bt sukurtas?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Komponent pasirinkimas
+SelectComponentsDesc=Kurie komponentai turi bti diegti?
+SelectComponentsLabel2=Paymkite komponentus, kuriuos norite diegti; nuimkite ymes nuo komponent, kuri nenorite diegti. Kai bsite pasiruos tsti, spauskite Pirmyn.
+FullInstallation=Pilnas vis komponent diegimas
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Glaustas diegimas
+CustomInstallation=Pasirinktinis diegimas
+NoUninstallWarningTitle=Komponentai egzistuoja
+NoUninstallWarning=Diegimo programa aptiko, kad ie komponentai jau diegti Js kompiuteryje:%n%n%1%n%nJei nuimsite ymes nuo i komponent, jie vis tiek nebus itrinti.%n%nAr vis tiek norite tsti diegim?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceMBLabel=Dabartinis Js pasirinkimas reikalauja [mb] MB laisvos vietos diske.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Nurodykite papildomus veiksmus
+SelectTasksDesc=Kokius papildomus veiksmus reikia atlikti?
+SelectTasksLabel2=Nurodykite papildomus veiksmus, kuriuos diegimo programa turs atlikti [name] diegimo metu. Kai bsite pasiruos tsti diegim, spauskite Pirmyn.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Nurodykite Start Menu katalog
+SelectStartMenuFolderDesc=Kur diegimo programa turt sukurti nuorodas?
+SelectStartMenuFolderLabel3=Nuorodos bus sukurtos iame Start Menu kataloge.
+SelectStartMenuFolderBrowseLabel=Nordami tsti diegim spauskite Pirmyn. Jei norite parinkti kit katalog, spauskite Nurodyti.
+MustEnterGroupName=Js privalote vesti katalogo pavadinim.
+GroupNameTooLong=Katalogo pavadinimas ar kelias iki jo per ilgas.
+InvalidGroupName=Katalogo pavadinimas yra nekorektikas.
+BadGroupName=Katalogo pavadinime neturi bti simboli:%n%n%1
+NoProgramGroupCheck2=&Nekurti Start Menu katalogo
+
+; *** "Ready to Install" wizard page
+WizardReady=Pasirengta diegimui
+ReadyLabel1=Diegimo programa pasirengusi diegti [name] Js kompiuteryje.
+ReadyLabel2a=Spauskite diegti, jei norite tsti diegim, arba Atgal, jeigu norite perirti nustatymus arba juos pakeisti.
+ReadyLabel2b=Spauskite diegti, jei norite tsti diegim.
+ReadyMemoUserInfo=Vartotojo informacija:
+ReadyMemoDir=Katalogas diegimui:
+ReadyMemoType=Diegimo tipas:
+ReadyMemoComponents=Pasirinkti komponentai:
+ReadyMemoGroup=Start Menu katalogas:
+ReadyMemoTasks=Papildomi veiksmai:
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Pasirengimas diegimui
+PreparingDesc=Diegimo programa pasirengusi [name] diegimui Js kompiuteryje.
+PreviousInstallNotCompleted=Ankstesns programos diegimas/alinimas buvo neubaigtas. Jums reikt perkrauti kompiuter, kad ubaigtumte diegim.%n%nKai perkrausite kompiuter, paleiskite diegimo program dar kart, kad pabaigtumte [name] diegim.
+CannotContinue=Diegimas negali bti tsiamas. Praome paspausti Ataukti, kad baigtumte diegim.
+ApplicationsFound=ios programos naudoja bylas, kurios turi bti perraytos diegimo metu. Rekomenduojama leisti diegimo programai automatikai udaryti ias programas.
+ApplicationsFound2=ios programos naudoja bylas, kurios turi bti perraytos diegimo metu. Rekomenduojama leisti diegimo programai automatikai udaryti ias programas. Po to, kai diegimas bus baigtas, diegimo programa bandys i naujo paleisti ias programas.
+CloseApplications=&Automatikai udaryti programas
+DontCloseApplications=&Neudarinti program
+ErrorCloseApplications=Diegimo programai nepavyko automatikai udaryti vis program. Prie tsiant diegim, rekomeduojama udaryti visas programas, naudojanias bylas, kurios turi bti perraytos diegimo metu.
+
+; *** "Installing" wizard page
+WizardInstalling=Vyksta diegimas
+InstallingLabel=Praau palaukti kol diegimo programa diegs [name] Js kompiuteryje.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=[name] diegimas baigtas
+FinishedLabelNoIcons=Diegimo programa baig [name] diegim Js kompiuteryje.
+FinishedLabel=Diegimo programa baig [name] diegim Js kompiuteryje. Programa gali bti paleista pasirinkus atitinkamas nuorodas.
+ClickFinish=Spauskite Pabaiga, kad udarytumte diegimo program.
+FinishedRestartLabel=Skmingam [name] diegimui, reikt perkrauti kompiuter. Ar norite perkrauti j dabar?
+FinishedRestartMessage=Skmingam [name] diegimui, reikt perkrauti kompiuter.%n%nAr norite perkrauti j dabar?
+ShowReadmeCheck=Taip, a noriau perskaityti README byl
+YesRadio=&Taip, a noriu perkrauti kompiuter dabar
+NoRadio=&Ne, a perkrausiu kompiuter vliau
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Vykdyti %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Perirti %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Diegimo programai reikia kito diskelio
+SelectDiskLabel2=Idkite diskel %1 ir spauskite Gerai.%n%nJeigu reikiamos bylos gali bti rastos kitame kataloge, nei pavaizduota emiau, veskite teising keli arba spauskite Nurodyti.
+PathLabel=&Katalogas:
+FileNotInDir2=Byla %1 nerasta kataloge %2. Praome dti teising diskel arba nurodyti teising keli.
+SelectDirectoryLabel=Praome nurodyti kito diskelio viet.
+
+; *** Installation phase messages
+SetupAborted=Diegimas nebuvo baigtas.%n%nPraome isprsti problem ir paleisti diegimo program vliau.
+EntryAbortRetryIgnore=Spauskite Retry, jeigu norite bandyti vl, Ignore - tsti vistiek arba Abort, kad nutrauktumte diegim.
+
+; *** Installation status messages
+StatusClosingApplications=Udaromos programos...
+StatusCreateDirs=Kuriami katalogai...
+StatusExtractFiles=Ipakuojamos bylos...
+StatusCreateIcons=Kuriamos nuorodos...
+StatusCreateIniEntries=Kuriami INI raai...
+StatusCreateRegistryEntries=Kuriami registro raai...
+StatusRegisterFiles=Registruojamos bylos...
+StatusSavingUninstall=Isaugoma informacija programos paalinimui...
+StatusRunProgram=Baigiamas diegimas...
+StatusRestartingApplications=I naujo paleidiamos programos...
+StatusRollback=Anuliuojami pakeitimai...
+
+; *** Misc. errors
+ErrorInternal2=Vidin klaida: %1
+ErrorFunctionFailedNoCode=%1 nepavyko
+ErrorFunctionFailed=%1 nepavyko; kodas %2
+ErrorFunctionFailedWithMessage=%1 nepavyko; kodas %2.%n%3
+ErrorExecutingProgram=Nepavyko paleisti bylos:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Klaida skaitant registro ra:%n%1\%2
+ErrorRegCreateKey=Klaida sukuriant registro ra:%n%1\%2
+ErrorRegWriteKey=Klaida raant registro ra:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Klaida raant INI ra byloje %1.
+
+; *** File copying errors
+FileAbortRetryIgnore=Spauskite Retry, jeigu norite bandyti dar kart, Ignore - praleisti byl (nerekomenduojama) arba Abort - nutraukti diegim.
+FileAbortRetryIgnore2=Spauskite Retry, jeigu norite bandyti dar kart, Ignore - tsti vistiek (nerekomenduojama) arba Abort - nutraukti diegim.
+SourceIsCorrupted=Byla sugadinta
+SourceDoesntExist=Byla %1 neegzistuoja
+ExistingFileReadOnly=Egzistuojanti byla turi tik skaitymo atributus.%n%nSpauskite Retry io atributo itrynimui ir bandyti vl, Ignore - praleisti byl arba Abort - nutraukti diegim.
+ErrorReadingExistingDest=Klaida vyko skaitant byl:
+FileExists=Tokia byla jau egzistuoja.%n%nAr norite, kad diegimo programa perrayt byl?
+ExistingFileNewer=Egzistuojanti byla yra naujesn u t, kuri diegimo programa bando rayti. Rekomenduojama palikti esani naujesn byl.%n%nAr norite palikti naujesn byl?
+ErrorChangingAttr=Klaida vyko keiiant bylos atributus:
+ErrorCreatingTemp=Klaida vyko kuriant byl pasirinktame kataloge:
+ErrorReadingSource=Klaida vyko skaitant diegiamj byl:
+ErrorCopying=Klaida vyko kopijuojant byl:
+ErrorReplacingExistingFile=Klaida vyko perraant egzistuojani byl:
+ErrorRestartReplace=Perkrovimas/Perraymas nepavyko:
+ErrorRenamingTemp=Klaida vyko pervadinant byl pasirinktame kataloge:
+ErrorRegisterServer=Nepavyko uregistruoti DLL/OCX bibliotekos: %1
+ErrorRegSvr32Failed=RegSvr32 registracijos klaida %1
+ErrorRegisterTypeLib=Nepavyko uregistruoti tip bibliotekos: %1
+
+; *** Post-installation errors
+ErrorOpeningReadme=Klaida vyko bandant atidaryti README byl.
+ErrorRestartingComputer=Diegimo programa negali perkrauti kompiuterio. Praome perkrauti kompiuter prastu bdu.
+
+; *** Uninstaller messages
+UninstallNotFound=Byla %1 neegzistuoja. Paalinti nemanoma.
+UninstallOpenError=Byla %1 negali bti atidaryta. Paalinti nemanoma.
+UninstallUnsupportedVer=Paalinimo log byla %1 yra formato, kurio nesupranta paalinimo programa. Paalinti nemanoma.
+UninstallUnknownEntry=Neinomas raas (%1) rastas paalinimo log byloje
+ConfirmUninstall=Ar esate tikri, kad norite paalinti %1 ir visus priklausanius komponentus?
+UninstallOnlyOnWin64=is diegimas gali bti paalintas tik 64 bit Windows sistemose.
+OnlyAdminCanUninstall=Tik administratoriaus teises turintis vartotojas gali paalinti program.
+UninstallStatusLabel=Praome palaukti, kol %1 bus paalinta i Js kompiuterio.
+UninstalledAll=%1 buvo skmingai paalinta i Js kompiuterio.
+UninstalledMost=%1 paalinimas skmingai baigtas.%n%nKai kurie elementai nebuvo itrinti - juos galite paalinti rankiniu bdu.
+UninstalledAndNeedsRestart=%1 paalinimui ubaigti Js kompiuteris turi bti perkrautas.%n%nAr norite perkrauti j dabar?
+UninstallDataCorrupted=%1 byla yra sugadinta. Programos paalinti nemanoma.
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Itrinti bendrsias bylas?
+ConfirmDeleteSharedFile2=Aptikta, kad jokia programa nenaudoja bendrj byl. Ar norite itrinti bendrsias bylas? %n%nJeigu kurios nors programos naudoja ias bylas, ir jos bus itrintos, tos programos gali veikti neteisingai. Jeigu nesate tikras - spauskite Ne. Bylos palikimas Js kompiuteryje nesukels joki problem.
+SharedFileNameLabel=Bylos pavadinimas:
+SharedFileLocationLabel=Vieta:
+WizardUninstalling=Paalinimo eiga
+StatusUninstalling=alinama %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Diegiama %1.
+ShutdownBlockReasonUninstallingApp=alinama %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 versija %2
+AdditionalIcons=Papildomos piktogramos:
+CreateDesktopIcon=Rodyti piktogram &Darbalaukyje
+CreateQuickLaunchIcon=Rodyti Spariosios &Paleisties piktogram
+ProgramOnTheWeb=%1 iniatinklyje
+UninstallProgram=Paalinti %1
+LaunchProgram=Paleisti %1
+AssocFileExtension=&Susieti %1 program su bylos pltiniu %2
+AssocingFileExtension=%1 programa susiejama su bylos pltiniu %2...
+AutoStartProgramGroupDescription=Atomatin paleistis:
+AutoStartProgram=Atomatikai paleisti %1
+AddonHostProgramNotFound=%1 nerasta Js nurodytame kataloge.%n%nAr Js vis tiek norite tsti?
diff --git a/distrib/Languages/Thai.isl b/distrib/Languages/Thai.isl
index 71de6e07f..a5d4abead 100644
--- a/distrib/Languages/Thai.isl
+++ b/distrib/Languages/Thai.isl
@@ -1,9 +1,9 @@
; Translation made with Stonevoice Translator 2.2 (http://www.stonevoice.com/auto/translator)
; $Translator:NL=%n:TB=%t
-; Suwat Yangfuang
-; suwat.yang@gmail.com
+; Suwat Yangfuang, Ekachai Omkaew
+; suwat.yang@gmail.com, ekaomk@gmail.com
;
-; *** Inno Setup version 5.1.11+ English messages ***
+; *** Inno Setup version 5.5.3+ Thai messages ***
;
; To download user-contributed translations of this file, go to:
; http://www.jrsoftware.org/files/istrans/
@@ -53,6 +53,10 @@ LastErrorMessage=%1.%n%nԴҴͧ %2: %3
SetupFileMissing= %1 Դó سõԴ駷ó
SetupFileCorrupt=õԴ سõԴ駷ó
SetupFileCorruptOrWrongVer=õԴ١ͧ سõԴ駷ó
+InvalidParameter=ԴҴش:%n%n%1
+SetupAlreadyRunning=õԴ駡ѧԹ
+WindowsVersionNotSupported=ͧѺѹͧԹǹسҹ
+WindowsServicePackRequired=ͧ %1 Service Pack %2 .
NotOnThisPlatform=ӧҹ к %1.
OnlyOnThisPlatform= ͧӧҹк %1.
OnlyOnTheseArchitectures=öԴ Windows 蹷͡ẺѺʶһѵ¡ͧ˹»żŴѧ仹:%n%n%1
@@ -143,7 +147,8 @@ SelectDirDesc=Դ [name] ?
SelectDirLabel3=õԴ駨еԴ [name] ŧ仹
SelectDirBrowseLabel=Թõԡ ӵ > Ҥسͧ͡ԡ ͡...
DiskSpaceMBLabel=õԴ駵ͧͷҧ¡ [mb] MB
-ToUNCPathname=õԴö UNC pathname Ҥسͧ map network drive ͵Դ
+CannotInstallToNetworkDrive=õԴöԴѧ͢
+CannotInstallToUNCPath=öԴŧѧ˹ UNC
InvalidPath=سͧ full path with drive letter; ҧ:%nC:\APP
InvalidDrive=س͡ س͡
DiskSpaceWarningTitle=ͷҧ㹴ʡ§
@@ -203,6 +208,11 @@ WizardPreparing= еԴ
PreparingDesc= ѧ ͵Դ [name] ͧͧس
PreviousInstallNotCompleted=õԴ Ͷʹ͹ ó سͧ restart ͧ õԴ ١ͧó%n%nѧҡ restart ͧ ¡ Setup ա õԴ [name] ١ͧó
CannotContinue=Դöӧҹ سҤԡ ¡ԡ ͡ҡ
+ApplicationsFound=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications.
+ApplicationsFound2=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. After the installation has completed, Setup will attempt to restart the applications.
+CloseApplications=&Automatically close the applications
+DontCloseApplications=&Do not close the applications
+ErrorCloseApplications=Setup was unable to automatically close all applications. It is recommended that you close all applications using files that need to be updated by Setup before continuing.
; *** "Installing" wizard page
WizardInstalling=õԴ
@@ -235,6 +245,7 @@ SetupAborted=õԴó%n%nس¡ õԴ ա˹
EntryAbortRetryIgnore=ԡ Retry ͧӧҹա, ԡ Ignore ͢÷ӧҹԴҴ, ԡ Abort ¡ԡõԴ
; *** Installation status messages
+StatusClosingApplications=ѧԴͻपѹ...
StatusCreateDirs=ҧ ..
StatusExtractFiles=â ҧ...
StatusCreateIcons=ҧ Program icons...
@@ -243,6 +254,7 @@ StatusCreateRegistryEntries=ҧ registry entries...
StatusRegisterFiles= Registering ҧ...
StatusSavingUninstall=úѹ֡ ¡ԡõԴ...
StatusRunProgram= õԴ...
+StatusRestartingApplications=ѧʵͻपѹ...
StatusRollback=¡׹ 䢷...
; *** Misc. errors
@@ -304,19 +316,23 @@ ConfirmDeleteSharedFile2=ź Ҩ ҹ%nسͧ
SharedFileNameLabel= :
SharedFileLocationLabel=˹:
WizardUninstalling=ʶҹ ¡ԡ
-StatusUninstalling=¡ԡ %1...
+StatusUninstalling=ѧ¡ԡ %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=ѧԴ %1.
+ShutdownBlockReasonUninstallingApp=ѧ¡ԡ %1.
; The custom messages below aren't used by Setup itself, but if you make
; use of them in your scripts, you'll want to translate them.
[CustomMessages]
-NameAndVersion=%1 version %2
+NameAndVersion=%1 ѹ %2
AdditionalIcons=Additional icons:
-CreateDesktopIcon=Create a &desktop icon
-CreateQuickLaunchIcon=Create a &Quick Launch icon
-ProgramOnTheWeb=%1 on the Web
-UninstallProgram=Uninstall %1
-LaunchProgram=Launch %1
+CreateDesktopIcon=ҧ &ͤ͹ʷͻ
+CreateQuickLaunchIcon=ҧ &ͤ͹ᶺǹ
+ProgramOnTheWeb=%1
+UninstallProgram=¡ԡ %1
+LaunchProgram=Դ %1
AssocFileExtension=&Associate %1 with the %2 file extension
AssocingFileExtension=Associating %1 with the %2 file extension...
diff --git a/distrib/Languages/Vietnamese.isl b/distrib/Languages/Vietnamese.isl
index 1451c47db..67ae9c9fe 100644
--- a/distrib/Languages/Vietnamese.isl
+++ b/distrib/Languages/Vietnamese.isl
@@ -1,8 +1,6 @@
-; Language: Vietnamese
-; Full name: Phung Tien Duong
-; Email: phungtienduong@yahoo.com
-
-; *** Inno Setup version 5.1.11+ English messages ***
+; *** Inno Setup version 5.5.3+ Vietnamese messages ***
+;Transtator: Duy Quang Le (Hanoi, Vietnam)
+;Email: leduyquang753@gmail.com
;
; To download user-contributed translations of this file, go to:
; http://www.jrsoftware.org/files/istrans/
@@ -15,14 +13,14 @@
[LangOptions]
; The following three entries are very important. Be sure to read and
; understand the '[LangOptions] section' topic in the help file.
-LanguageName=Vietnam
+LanguageName=Vietnamese (Tieng Viet)
LanguageID=$042A
-LanguageCodePage=1258
+LanguageCodePage=0
; If the language you are translating to requires special font faces or
; sizes, uncomment any of the following entries and change them accordingly.
-DialogFontName=Arial
-DialogFontSize=8
-WelcomeFontName=Arial
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
;WelcomeFontSize=12
;TitleFontName=Arial
;TitleFontSize=29
@@ -32,290 +30,305 @@ WelcomeFontName=Arial
[Messages]
; *** Application titles
-SetupAppTitle=Cai t
-SetupWindowTitle=Cai t - %1
-UninstallAppTitle=G bo
-UninstallAppFullTitle=%1 G bo
+SetupAppTitle=Cai dat
+SetupWindowTitle=Cai dat - %1
+UninstallAppTitle=Go cai dat
+UninstallAppFullTitle=Go cai dat %1
; *** Misc. common
-InformationTitle=Thng tin
-ConfirmTitle=Xac nhn
-ErrorTitle=Li
+InformationTitle=Thong tin
+ConfirmTitle=Chung nhan
+ErrorTitle=Loi
; *** SetupLdr messages
-SetupLdrStartupMessage=%1 se c cai t. Ban co mun tip tuc ?
-LdrCannotCreateTemp=Khng th tao tp tin tam. Cai t bi huy
-LdrCannotExecTemp=Khng th thc thi tp tin trong th muc tam. Cai t bi huy
-
+SetupLdrStartupMessage=Chuong trinh nay se cai dat %1. Ban co muon tiep tuc?
+LdrCannotCreateTemp=Khong the tao tep tam thoi. Cai dat bi huy bo
+LdrCannotExecTemp=Khong the chay tep trong thu muc tam thoi. Cai dat bi huy bo
; *** Startup error messages
-LastErrorMessage=%1.%n%nLi %2: %3
-SetupFileMissing=Tp tin %1 khng co trong th muc cai t. Hay xem lai vn nay hoc dung b cai t khac
-SetupFileCorrupt=Cac tp tin cai t bi h. nghi tim b cai t khac.
-SetupFileCorruptOrWrongVer=Cac tp tin cai t bi h, hoc khng tng thich vi phin ban nay. Hay xem lai vn nay hoc dung b cai t khac.
-NotOnThisPlatform=Chng trinh nay se khng chay trn %1.
-OnlyOnThisPlatform=Chng trinh nay phai c chay trn %1.
-OnlyOnTheseArchitectures=Chng trinh nay chi co th c cai t trn phin ban cua Windows c thit k cho cac CPU sau:%n%n%1
-MissingWOW64APIs=Phin ban Windows ang chay khng co chc nng cn thit cho b cai t cai t ng dung 64 bit. khc phuc, nghi cai t ban va %1.
-WinVersionTooLowError=Chng trinh nay yu cu %1 phin ban %2 hoc mi hn.
-WinVersionTooHighError=Chng trinh nay khng th c cai t trn %1 phin ban %2 hoc mi hn.
-AdminPrivilegesRequired=Ban phai ng nhp vi quyn quan tri khi cai t chng trinh nay.
-PowerUserPrivilegesRequired=Ban phai ng nhp vi quyn quan tri hoc la thanh vin cua nhom Power Users khi cai t chng trinh nay.
-SetupAppRunningError=Trinh cai t phat hin %1 ang chay.%n%n nghi ong tt ca lai, ri nhn ng y tip tuc, hoc Huy ngng cai t.
-UninstallAppRunningError=Trinh g bo phat hin %1 ang chay.%n%n nghi ong tt ca lai, ri nhn ng y tip tuc, hoc Huy ngng cai t.
-
+LastErrorMessage=%1.%n%nLoi %2: %3
+SetupFileMissing=Tep %1 khong duoc tim thay trong thu muc cai dat. Hay sua loi hoac tim ban khac cua chuong trinh.
+SetupFileCorrupt=Tep cai dat co hong hoc. Hay tim ban khac cua chuong trinh.
+SetupFileCorruptOrWrongVer=Tep cai dat co hong hoc, hoac khong tuong thich voi phien ban cai dat nay. Hay sua loi hoac tim ban khac cua chuong trinh.
+InvalidParameter=Mot con tro khong hop le da di qua tren dong lenh:%n%n%1
+SetupAlreadyRunning=Cai dat hien dang chay.
+WindowsVersionNotSupported=Chuong trinh nay khong ho tro cho phien ban Windows ma ban dang chay.
+WindowsServicePackRequired=Chuong trinh nay yeu cau %1 Goi An ninh %2 hoac moi hon.
+NotOnThisPlatform=Chuong trinh nay se khong chay tren %1.
+OnlyOnThisPlatform=Chuong trinh nay phai chay tren %1.
+OnlyOnTheseArchitectures=Chuong trinh nay chi co the cai dat tren nhung phien ban cua Windows duoc thiet ke cho nhung bo vi xu ly sau:%n%n%1
+MissingWOW64APIs=Phien ban Windows ban dang chay khong bao gom cac kha nangduoc yeu cau boi cai dat de thuc hien mot su cai dat chuong trinh 64-bit. De sua loi nay, please install Service Hay cai dat Goi An ninh%1.
+WinVersionTooLowError=Chuong trinh nay yeu cau %1 phien ban %2 hoac moi hon.
+WinVersionTooHighError=Chuong trinh nay khong the duoc cai dat tren %1 phien ban %2 hoac moi hon.
+AdminPrivilegesRequired=Ban phai la Adminstrator de cai dat chuong trinh nay.
+PowerUserPrivilegesRequired=Ban phai la Adminstrator hoac mot thanh vien cua nhom nguoi dung quyen luc de cai dat chuong trinh nay.
+SetupAppRunningError=Viec cai dat bi gian doan vi %1 dang chay.%n%nHay dong chung lai, roi click OK de tiep tuc, hoac Huy de thoat.
+UninstallAppRunningError=Viec go cai dat bi gian doan vi %1 dang chay.%n%nHay dong chung lai, roi click OK de tiep tuc, hoac Huy de thoat.
; *** Misc. errors
-ErrorCreatingDir=Trinh cai t khng th tao th muc "%1"
-ErrorTooManyFilesInDir=Khng th tao tp tin trong th muc "%1" vi no cha qua nhiu tp tin
-
+ErrorCreatingDir=Cai dat khong the tao thu muc "%1"
+ErrorTooManyFilesInDir=Khong the tao tep trong thu muc "%1" vi no chua qua nhieu tep
; *** Setup common messages
-ExitSetupTitle=Ngng cai t
-ExitSetupMessage=Trinh cai t cha hoan tt. Nu ban ngng lai, chng trinh se khng c cai t.%n%nBan co th chay trinh cai t vao luc khac hoan tt vic cai t.%n%nBan tht s mun ngng cai t ?
-AboutSetupMenuItem=&Gii thiu trinh cai t...
-AboutSetupTitle=Gii thiu trinh cai t
-AboutSetupMessage=%1 phin ban %2%n%3%n%n%1 trang chu:%n%4
-AboutSetupNote=
-TranslatorNote=
+ExitSetupTitle=Thoat cai dat
+ExitSetupMessage=Viec cai dat chua hoan thanh. Neu ban thoat bay gio, chuong trinh se khong duoc cai dat.%n%nBan co the phai chay Cai dat mot lan khac de hoan thanh cai dat.%n%nThoat cai dat?
+AboutSetupMenuItem=&Ve cai dat...
+AboutSetupTitle=Ve cai dat
+AboutSetupMessage=%1 phien ban %2%n%3%n%n%1 trang chu:%n%4
+AboutSetupNote=Phien ban ngon ngu goc: Tieng Anh
+TranslatorNote=Nguoi dich: Le Duy Quang
; *** Buttons
-ButtonBack=< &Lui lai
-ButtonNext=i &tip >
-ButtonInstall=&Cai t
-ButtonOK=ng y
-ButtonCancel=Huy
-ButtonYes=&ng y
-ButtonYesToAll=ng y &tt
-ButtonNo=&Khng
-ButtonNoToAll=Khn&g tt
-ButtonFinish=&Hoan tt
-ButtonBrowse=&Duyt...
-ButtonWizardBrowse=&Duyt...
-ButtonNewFolder=&Tao th muc mi
+ButtonBack=< &Truoc
+ButtonNext=T&iep >
+ButtonInstall=&Cai dat
+ButtonOK=OK
+ButtonCancel=Huy
+ButtonYes=C&o
+ButtonYesToAll=Co c&ho tat ca
+ButtonNo=&Khong
+ButtonNoToAll=Kho&ng cho tat ca
+ButtonFinish=Ho&an thanh
+ButtonBrowse=Ti&m...
+ButtonWizardBrowse=Tim&...
+ButtonNewFolder=Tao th&u muc moi
; *** "Select Language" dialog messages
-SelectLanguageTitle=Chon ngn ng cai t
-SelectLanguageLabel=Chon ngn ng dung trong khi cai t:
+SelectLanguageTitle=Lua chon ngon ngu cai dat
+SelectLanguageLabel=Lua chon ngon ngu de hien thi khi cai dat:
; *** Common wizard text
-ClickNext=Nhn i tip tip tuc, hoc Huy ngng cai t.
+ClickNext=Click Tiep de tiep tuc, hoac Huy de thoat cai dat.
BeveledLabel=
-BrowseDialogTitle=Duyt th muc
-BrowseDialogLabel=Chon th muc trong danh sach di y, ri nhn ng y.
-NewFolderName=Th muc mi
+BrowseDialogTitle=Tim thu muc
+BrowseDialogLabel=Chon mot thu muc trong danh sach duoi day, roi click OK.
+NewFolderName=Thu muc moi
; *** "Welcome" wizard page
-WelcomeLabel1=Chao mng n vi trinh cai t [name]
-WelcomeLabel2=[name/ver] se c cai t trn may tinh cua ban.%n%nBan nn ong cac ng dung ang chay trc khi tip tuc.
+WelcomeLabel1=Chao mung toi trinh cai dat [name]
+WelcomeLabel2=No se cai dat [name/ver] tren may tinh cua ban.%n%nBan can phai dong tat ca chuong trinh co lien quan truoc khi tiep tuc.
; *** "Password" wizard page
-WizardPassword=Mt ma
-PasswordLabel1=B cai t nay c bao v bi mt ma.
-PasswordLabel3= nghi cung cp mt ma, ri nhn i tip tip tuc. Mt ma co phn bit ch hoa.
-PasswordEditLabel=&Mt ma:
-IncorrectPassword=Mt ma ban nhp vao khng ung. nghi th lai.
+WizardPassword=Mat khau
+PasswordLabel1=Viec cai dat duoc bao ve bang mat khau.
+PasswordLabel3=Hay nhap mat khau, roi click Tiep de tiep tuc. Can nhap chinh xac 100% (phan biet chu hoa va chu thuong).
+PasswordEditLabel=&Mat khau:
+IncorrectPassword=Mat khau ban vua nhap vao khong dung. Hay thu lai.
; *** "License Agreement" wizard page
-WizardLicense=Thoa thun giy phep
-LicenseLabel= nghi oc ky thng tin quan trong sau y trc khi cai t.
-LicenseLabel3= nghi oc ky thoa thun giy phep. Ban phai chp nhn cac iu khoan trong thoa thun nay trc khi tip tuc cai t.
-LicenseAccepted=Ti &chp nhn thoa thun nay
-LicenseNotAccepted=Ti &khng chp nhn thoa thun nay
+WizardLicense=Hop dong Chuyen giao
+LicenseLabel=Hay doc nhung thong tin quan trong sau truoc khi tiep tuc.
+LicenseLabel3=Hay doc hop dong Chuyen giao sau day. Ban PHAI chap nhan cac dieu khoan truoc khi tiep tuc.
+LicenseAccepted=Toi &chap nhan cac dieu khoan
+LicenseNotAccepted=Toi k&hong chap nhan cac dieu khoan
; *** "Information" wizard pages
-WizardInfoBefore=Thng tin
-InfoBeforeLabel= nghi oc ky thng tin quan trong sau y trc khi cai t.
-InfoBeforeClickLabel=Khi a sn sang tip tuc cai t, nhn i tip.
-WizardInfoAfter=Thng tin
-InfoAfterLabel= nghi oc ky thng tin quan trong sau y trc khi cai t.
-InfoAfterClickLabel=Khi a sn sang tip tuc cai t, nhn i tip.
+WizardInfoBefore=Thong tin
+InfoBeforeLabel=Hay doc nhung thong tin quan trong sau truoc khi tiep tuc.
+InfoBeforeClickLabel=Khi ban da san sang tiep tuc voi Cai dat, click Tiep.
+WizardInfoAfter=Thong tin
+InfoAfterLabel=Hay doc nhung thong tin quan trong sau truoc khi tiep tuc.
+InfoAfterClickLabel=Khi ban da san sang tiep tuc voi Cai dat, click Tiep.
; *** "User Information" wizard page
-WizardUserInfo=Thng tin ngi dung
-UserInfoDesc= nghi nhp thng tin cua ban.
-UserInfoName=&Ho tn:
-UserInfoOrg=&T chc:
-UserInfoSerial=&S serial:
-UserInfoNameRequired=Ban phai nhp tn.
+WizardUserInfo=Thong tin nguoi dung
+UserInfoDesc=Hay nhap thong tin cua ban.
+UserInfoName=T&en nguoi dung:
+UserInfoOrg=T&o chuc:
+UserInfoSerial=&Serial:
+UserInfoNameRequired=Ban phai dien vao mot ten.
; *** "Select Destination Location" wizard page
-WizardSelectDir=Chon vi tri cai t
-SelectDirDesc=[name] se c cai t u ?
-SelectDirLabel3=Trinh cai t se cai t [name] vao th muc sau.
-SelectDirBrowseLabel= tip tuc, nhn i tip. Nu ban mun chon th muc khac, nhn Duyt.
-DiskSpaceMBLabel=Cn ti thiu [mb] MB trng trn ia cng.
-ToUNCPathname=Trinh cai t khng th cai t ln ng dn UNC. Nu mun cai t ln mang, ban phai tao ia mang.
-InvalidPath=Ban phai nhp tn ng dn y u kem theo tn ia; thi du:%n%nC:\APP%n%nhoc ng dn UNC di dang:%n%n\\server\share
-InvalidDrive= ia hoc ng dn UNC ban chon khng tn tai hoc khng th truy xut. nghi chon cai khac.
-DiskSpaceWarningTitle=Khng u ia trng
-DiskSpaceWarning=Trinh cai t cn it nht %1 KB ia trng cai t, nhng ia c chon chi co %2 KB trng.%n%nBan vn mun tip tuc ?
-DirNameTooLong=Tn th muc hoc ng dn qua dai.
-InvalidDirName=Tn th muc khng hp l.
-BadDirName32=Tn th muc khng c cha cac ky t sau:%n%n%1
-DirExistsTitle=Th muc a co
-DirExists=Th muc:%n%n%1%n%na co. Ban vn mun cai t ln th muc o ?
-DirDoesntExistTitle=Th muc cha co
-DirDoesntExist=Th muc:%n%n%1%n%nkhng co. Ban mun tao th muc mi ?
+WizardSelectDir=Lua chon thu muc dich
+SelectDirDesc=[name] nen duoc cai dat o dau?
+SelectDirLabel3=Cai dat se cai [name] vao thu muc sau.
+SelectDirBrowseLabel=De tiep tuc, click Tiep. Neu ban muon chon thu muc khac, click Tim.
+DiskSpaceMBLabel=It nhat [mb] MB o dia trong duoc yeu cau.
+CannotInstallToNetworkDrive=Cai dat khong the cai vao mang luoi.
+CannotInstallToUNCPath=Cai dat khong the cai vao dia chi UNC.
+InvalidPath=Ban phai nhap duong dan day du voi chu cai cua o dia; vi du:%n%nC:\APP%n%nhoac mot duong dan UNC theo mau:%n%n\\server\share
+InvalidDrive=O dia hoac UNC share ban da chon khong ton tai hoac khong the truy cap. Hay chon khac.
+DiskSpaceWarningTitle=Khong du dung luong dia trong
+DiskSpaceWarning=Cai dat can it nhat %1 KB o dia trong de cai dat, nhung o dia da chon chi co %2 KB.%n%nBan co muon tiep tuc?
+DirNameTooLong=Ten thu muc hoac duong dan qua dai.
+InvalidDirName=Ten thu muc khong hop le.
+BadDirName32=Ten thu muc khong duoc co cac ki tu sau:%n%n%1
+DirExistsTitle=Thu muc da ton tai
+DirExists=Thu muc:%n%n%1%n%nda ton tai. Ban co muon cai thu muc nay?
+DirDoesntExistTitle=Thu muc khong ton tai
+DirDoesntExist=Thu muc:%n%n%1%n%nkhong ton tai. Ban co muon tao thu muc nay?
; *** "Select Components" wizard page
-WizardSelectComponents=Chon thanh phn
-SelectComponentsDesc=Ban mun cai t thanh phn nao ?
-SelectComponentsLabel2=Chon thanh phn ban mun cai t; khng chon thanh phn ban khng mun cai t. Nhn i tip tip tuc.
-FullInstallation=Cai t y u
+WizardSelectComponents=Lua chon phan phu tro
+SelectComponentsDesc=Nhung phan phu tro nao nen duoc cai dat?
+SelectComponentsLabel2=Lua chon nhung phan phu tro ban muon cai dat; xoa nhung cai ban khong muon. Click Tiep khi ban da san sang tiep tuc.
+FullInstallation=Cai dat day du
; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
-CompactInstallation=Cai t ti thiu
-CustomInstallation=Cai t tuy chon
-NoUninstallWarningTitle=Thanh phn a co
-NoUninstallWarning=Trinh cai t phat hin thanh phn sau y a c cai t trn may tinh cua ban:%n%n%1%n%nKhng la chon cac thanh phn nay se khng g bo chung.%n%nBan vn mun tip tuc ?
+CompactInstallation=Cai dat co ban
+CustomInstallation=Cai dat theo y thich
+NoUninstallWarningTitle=Phan phu tro da ton tai
+NoUninstallWarning=Cai dat bi gian doan vi nhung thanh phan phu tro sau da duoc cai dat vao may tinh cua ban:%n%n%1%n%nBo chon nhung cai nay se khong cai dat chung.%n%nBan co muon tiep tuc?
ComponentSize1=%1 KB
ComponentSize2=%1 MB
-ComponentsDiskSpaceMBLabel=La chon hin tai cn ti thiu [mb] MB ia trng.
+ComponentsDiskSpaceMBLabel=Lua chon nay can it nhat [mb] MB o dia trong.
; *** "Select Additional Tasks" wizard page
-WizardSelectTasks=Chon cac tac vu b sung
-SelectTasksDesc=Tac vu b sung nao cn thc hin ?
-SelectTasksLabel2=Chon cac tac vu b sung ban mun trinh cai t thc hin trong khi cai t [name], ri nhn i tip.
+WizardSelectTasks=Lua chon hanh dong bo sung
+SelectTasksDesc=Nhung hanh dong nao can duoc bo sung?
+SelectTasksLabel2=Lua chon nhung hanh dong ma ban muon Cai dat bo sung khi cai dat [name], sau do click Tiep.
; *** "Select Start Menu Folder" wizard page
-WizardSelectProgramGroup=Chon th muc Start Menu
-SelectStartMenuFolderDesc=Trinh cai t tao shortcut cua chng trinh u ?
-SelectStartMenuFolderLabel3=Trinh cai t se tao shortcut cua chng trinh trong th muc sau cua Start Menu.
-SelectStartMenuFolderBrowseLabel= tip tuc, nhn i tip. Nu ban mun chon th muc khac, nhn Duyt.
-MustEnterGroupName=Ban phai nhp tn th muc.
-GroupNameTooLong=Tn th muc hoc ng dn qua dai.
-InvalidGroupName=Tn th muc khng hp l.
-BadGroupName=Tn th muc khng c cha cac ky t sau:%n%n%1
-NoProgramGroupCheck2=&Khng tao c th muc Start Menu
+WizardSelectProgramGroup=ua chon thu muc trong menu Start
+SelectStartMenuFolderDesc=Loi tat cua chuong trinh nen duoc dat o dau trong menu Start?
+SelectStartMenuFolderLabel3=Cai dat se tao loi tat cua chuong trinh trong thu muc sau cua menu Start.
+SelectStartMenuFolderBrowseLabel=De tiep tuc, click Tiep. Neu ban muon chon thu muc khac, click Tim.
+MustEnterGroupName=Ban phai nhap ten mot thu muc.
+GroupNameTooLong=Ten thu muc hoac duong dan qua dai.
+InvalidGroupName=Ten thu muc khong hop le.
+BadGroupName=Ten thu muc khong duoc chua cac ki tu sau:%n%n%1
+NoProgramGroupCheck2=&Khong tao mot thu muc trong menu Start
; *** "Ready to Install" wizard page
-WizardReady=Sn sang cai t
-ReadyLabel1=Trinh cai t a sn sang cai t [name] ln may tinh cua ban.
-ReadyLabel2a=Nhn Cai t tip tuc cai t, hoc nhn Lui lai nu ban mun xem lai hoc thay i bt c thit lp nao.
-ReadyLabel2b=Nhn Cai t tip tuc cai t.
-ReadyMemoUser=Thng tin ngi dung:
-ReadyMemoDir=Vi tri cai t:
-ReadyMemoType=Kiu cai t:
-ReadyMemoComponents=Cac thanh phn c chon:
-ReadyMemoGroup=Th muc Start Menu:
-ReadyMemoTasks=Cac tac vu b sung:
+WizardReady=San sang cai dat
+ReadyLabel1=Cai dat da san sang cai [name] tren may tinh cua ban.
+ReadyLabel2a=Click Cai dat de tiep tuc cai dat, hoac click Truoc neu ban muon xem lai hoac thay doi mot so cai dat.
+ReadyLabel2b=Click Cai dat de tiep tuc cai dat.
+ReadyMemoUserInfo=Thong tin nguoi dung:
+ReadyMemoDir=Thu muc dich:
+ReadyMemoType=Kieu cai dat:
+ReadyMemoComponents=Nhung thanh phan phu tro da chon:
+ReadyMemoGroup=Thu muc trong menu Start:
+ReadyMemoTasks=Nhung hanh dong bo sung:
; *** "Preparing to Install" wizard page
-WizardPreparing=ang chun bi cai t
-PreparingDesc=Trinh cai t ang chun bi cai t [name] ln may tinh cua ban.
-PreviousInstallNotCompleted=Vic cai t/g bo cua chng trinh trc cha hoan tt. Ban cn khi ng lai may tinh hoan tt qua trinh cai t.%n%nSau khi khi ng lai may tinh, chay trinh cai t ln na hoan tt qua trinh cai t [name].
-CannotContinue=Trinh cai t khng th tip tuc. nghi nhn Huy ngng cai t.
+WizardPreparing=Chuan bi cai dat
+PreparingDesc=Cai dat dang chuan bi cai [name] tren may tinh cua ban.
+PreviousInstallNotCompleted=Viec (go) cai dat chuong trinh cu khong hoan thanh. Ban se can phai khoi dong lai may tinh de hoan thanh cai dat.%n%nSau khi khoi dong lai, hay chay Cai dat mot lan nua de hoan thanh cai dat [name].
+CannotContinue=Cai dat khong the tiep tuc. Click Huy de thoat.
+ApplicationsFound=Nhung chuong trinh sau su dung cac tep can duoc cap nhat boi Cai dat. Dieu can thiet la ban phai chap nhan Cai dat dong cac chuong trinh nay.
+ApplicationsFound2=Nhung chuong trinh sau su dung cac tep can duoc cap nhat boi Cai dat. Dieu can thiet la ban phai chap nhan Cai dat dong cac chuong trinh nay. Sau khi cai dat hoan thanh, Cai dat se co mo lai chung.
+CloseApplications=T&u dong dong nhung chuong trinh nay
+DontCloseApplications=&Khong dong nhung chuong trinh nay
+ErrorCloseApplications=Cai dat khong the dong tat ca cac chuong trinh. Dieu can thiet la ban phai dong cac chuong trinh su dung tep can duoc cap nhat boi Cai dat truoc khi tiep tuc.
; *** "Installing" wizard page
-WizardInstalling=ang cai t
-InstallingLabel= nghi ch trong khi cai t [name] ln may tinh cua ban.
+WizardInstalling=Dang cai dat
+InstallingLabel=Hay doi khi Cai dat dang cai [name] tren may tinh cua ban.
; *** "Setup Completed" wizard page
-FinishedHeadingLabel=a hoan tt cai t [name]
-FinishedLabelNoIcons=Trinh cai t a hoan tt vic cai t [name] ln may tinh cua ban.
-FinishedLabel=Trinh cai t a hoan tt vic cai t [name] ln may tinh cua ban. ng dung se c thc thi khi chon biu tng a c cai t.
-ClickFinish=Nhn Hoan tt thoat khoi trinh cai t.
-FinishedRestartLabel= hoan tt vic cai t [name], trinh cai t cn phai khi ng lai may tinh. Ban mun khi ng lai by gi ?
-FinishedRestartMessage= hoan tt vic cai t [name], trinh cai t cn phai khi ng lai may tinh.%n%nBan mun khi ng lai by gi ?
-ShowReadmeCheck=Vng, ti mun xem tp tin README
-YesRadio=&Vng, khi ng lai may tinh by gi
-NoRadio=&Khng, ti se khi ng lai may tinh sau
+FinishedHeadingLabel=Hoan thanh cai dat [name]
+FinishedLabelNoIcons=Da cai dat thanh cong [name] tren may tinh cua ban.
+FinishedLabel=Da cai dat thanh cong [name] tren may tinh cua ban. No co the duoc chay bang cach click vao bieu tuong cua no.
+ClickFinish=Click Hoan thnah de thoat Cai dat.
+FinishedRestartLabel=De hoan thanh cai dat [name], may tinh cua ban phai duoc khoi dong lai. Ban co muon khoi dong lai khong?
+FinishedRestartMessage=De hoan thanh cai dat [name], may tinh cua ban phai duoc khoi dong lai.%n%nBan co muon khoi dong lai khong?
+ShowReadmeCheck=Co, to muon xem tep README
+YesRadio=&Co, khoi dong lai may tinh ngay bay gio
+NoRadio=&Khong, toi se khoi dong lai may tinh sau
; used for example as 'Run MyProg.exe'
-RunEntryExec=Chay %1
+RunEntryExec=Chay %1
; used for example as 'View Readme.txt'
-RunEntryShellExec=Xem %1
+RunEntryShellExec=Hien thi %1
; *** "Setup Needs the Next Disk" stuff
-ChangeDiskTitle=Trinh cai t cn ia tip theo
-SelectDiskLabel2= nghi a ia %1 va nhn ng y.%n%nNu cac tp tin trn ia nay co trong th muc khac vi th muc ang hin thi di y, nhp ng dn chinh xac hoc nhn Duyt.
-PathLabel=ng &dn:
-FileNotInDir2=Tp tin "%1" khng c tim thy trong "%2". nghi a ung ia hoc chon th muc khac.
-SelectDirectoryLabel= nghi chi vi tri cua ia tip theo.
+ChangeDiskTitle=Cai dat can dia tiep theo
+SelectDiskLabel2=Hay chen dia %1 va click OK.%n%nNeu nhung tep tren dia do co the tim o noi khac voi duoc hien thi duoi day, nhap duong dan dung hoac click Tim.
+PathLabel=&Path:
+FileNotInDir2=Tep "%1" khong duoc dat trong "%2". Hay chen dia dung hoac chon thu muc khac.
+SelectDirectoryLabel=Hay xac dinh vi tri cua dia tiep theo.
; *** Installation phase messages
-SetupAborted=Trinh cai t cha hoan tt.%n%n nghi xem lai va chay lai ln na.
-EntryAbortRetryIgnore=Nhn Retry th lai, Ignore bo qua, hoc Abort huy qua trinh cai t.
+SetupAborted=Cai dat khong duoc hoan thanh.%n%nHay sua loi va chay Cai dat lai.
+EntryAbortRetryIgnore=Click Thu lai de thu lai, Bo qua de tiep tuc (nhay qua loi), hoac Tu choi de huy cai dat.
; *** Installation status messages
-StatusCreateDirs=ang tao th muc...
-StatusExtractFiles=ang tach cac tp tin...
-StatusCreateIcons=ang tao shortcuts...
-StatusCreateIniEntries=ang tao cac dong INI...
-StatusCreateRegistryEntries=ang tao cac dong registry...
-StatusRegisterFiles=ang ng ky cac tp tin...
-StatusSavingUninstall=ang lu cac thng tin cho trinh g bo...
-StatusRunProgram=ang hoan tt qua trinh cai t...
-StatusRollback=ang hoan lai nhng thay i...
+StatusClosingApplications=Dang dong cac chuong trinh...
+StatusCreateDirs=Dang tao thu muc...
+StatusExtractFiles=Dang giai nen cac tep...
+StatusCreateIcons=Dang tao loi tat...
+StatusCreateIniEntries=Dang tao dau vao INI...
+StatusCreateRegistryEntries=Dang tao dau vao Registry...
+StatusRegisterFiles=Dang xac minh cac tep...
+StatusSavingUninstall=Dang luu thong tin go cai dat...
+StatusRunProgram=Dang hoan thanh cai dat...
+StatusRestartingApplications=Dang khoi dong lai cac chuong trinh...
+StatusRollback=Dang reset lai cac thay doi...
; *** Misc. errors
-ErrorInternal2=Li bn trong: %1
-ErrorFunctionFailedNoCode=%1 bi h
-ErrorFunctionFailed=%1 bi h; ma %2
-ErrorFunctionFailedWithMessage=%1 bi h; ma %2.%n%3
-ErrorExecutingProgram=Khng th thc thi tp tin:%n%1
+ErrorInternal2=Loi: %1
+ErrorFunctionFailedNoCode=%1 that bai
+ErrorFunctionFailed=%1 that bai; ma %2
+ErrorFunctionFailedWithMessage=%1 that bai; ma %2.%n%3
+ErrorExecutingProgram=hong the giai nen tep:%n%1
; *** Registry errors
-ErrorRegOpenKey=Li khi m khoa registry:%n%1\%2
-ErrorRegCreateKey=Li khi tao khoa registry:%n%1\%2
-ErrorRegWriteKey=Li khi ghi khoa v registry:%n%1\%2
+ErrorRegOpenKey=Loi mo chia khoa xac thuc:%n%1\%2
+ErrorRegCreateKey=Loi tao chia khoa xac thuc:%n%1\%2
+ErrorRegWriteKey=Loi viet chia khoa xac thuc:%n%1\%2
; *** INI errors
-ErrorIniEntry=Li khi tao dong INI trong tp tin "%1".
+ErrorIniEntry=Loi tao dau vao INI trong tep "%1".
; *** File copying errors
-FileAbortRetryIgnore=Nhn Retry th lai, Ignore bo qua tp tin nay (khng nn), hoc Abort huy qua trinh cai t.
-FileAbortRetryIgnore2=Nhn Retry th lai, Ignore tip tuc (khng nn), hoc Abort huy qua trinh cai t.
-SourceIsCorrupted=Tp tin ngun bi h
-SourceDoesntExist=Tp tin ngun "%1" khng tn tai
-ExistingFileReadOnly=Tp tin ang co bi anh du chi oc.%n%nNhn Retry bo thuc tinh chi oc va th lai, Ignore bo qua tp tin nay, hoc Abort huy qua trinh cai t.
-ErrorReadingExistingDest=Co li xut hin khi oc tp tin hin co:
-FileExists=Tp tin a co.%n%nBan co mun trinh cai t ghi e ln no ?
-ExistingFileNewer=Tp tin hin co mi hn tp tin ma trinh cai t sp cai vao. Ban nn gi lai tp tin hin co.%n%nBan co mun gi lai tp tin hin co ?
-ErrorChangingAttr=Co li xay ra khi thay i thuc tinh cua tp tin hin co:
-ErrorCreatingTemp=Co li xay ra khi tao mt tp tin trong th muc ich:
-ErrorReadingSource=Co li xay ra khi oc tp tin ngun:
-ErrorCopying=Co li xay ra khi sao chep tp tin:
-ErrorReplacingExistingFile=Co li xay ra khi thay th tp tin hin co:
-ErrorRestartReplace=Thay th bi h:
-ErrorRenamingTemp=Co li xay ra khi i tn tp tin trong th muc ich:
-ErrorRegisterServer=Khng th ng ky DLL/OCX: %1
-ErrorRegSvr32Failed=RegSvr32 tht bai vi ma li %1
-ErrorRegisterTypeLib=Khng th ng ky th vin kiu: %1
+FileAbortRetryIgnore=Click thu lai de thu lai, Bo qua de bo qua tep nay (khong khuyen nghi), hoac Tu choi de huy cai dat.
+FileAbortRetryIgnore2=Click thu lai de thu lai, Bo qua de bo qua loi (khong khuyen nghi), hoac Tu choi de huy cai dat.
+SourceIsCorrupted=Tep nguon bi hu hong
+SourceDoesntExist=Tep nguon "%1" khong ton tai
+ExistingFileReadOnly=Tep nay da duoc danh dau Chi doc.%n%nClick Thu lai de bo danh dau Chi doc va thu lai, Bo qua de bo qua tep nay, hoac Tu choi de huy cai dat.
+ErrorReadingExistingDest=Co loi khi doc tep:
+FileExists=Tep da ton tai.%n%nBan co muon thay the?
+ExistingFileNewer=Tep nay moi hon tep ma Cai dat muon cai vao. Dieu can thiet la ban giu lai tep nay.%n%nBan co muon giu lai?
+ErrorChangingAttr=Co van de khi thay doi thuoc tinh tep:
+ErrorCreatingTemp=Co van de khi tao tep trong thu muc dich:
+ErrorReadingSource=Co van de khi doc tep nguon:
+ErrorCopying=Co van de khi co copy tep:
+ErrorReplacingExistingFile=Co van de khi co thay the tep:
+ErrorRestartReplace=Thay the khoi dong lai that bai:
+ErrorRenamingTemp=Co van de khi co doi ten tep trong thu muc dich:
+ErrorRegisterServer=Khong the xac thuc DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 that bai voi ma thoat %1
+ErrorRegisterTypeLib=Khong the xac thuc thu vien kieu: %1
; *** Post-installation errors
-ErrorOpeningReadme=Co li xay ra khi m tp tin README.
-ErrorRestartingComputer=Trinh cai t khng th khi ng lai may tinh. nghi ban t khi ng lai.
+ErrorOpeningReadme=Co van de khi co mo tep README.
+ErrorRestartingComputer=Cai dat khong the khoi dong lai may tinh. Hay lam thu cong.
; *** Uninstaller messages
-UninstallNotFound=Tp tin "%1" khng co. Khng th g bo.
-UninstallOpenError=Tp tin "%1" khng th m c. Khng th g bo
-UninstallUnsupportedVer=Tp tin nht ky cua trinh g bo "%1" co inh dang ma phin ban cua trinh g bo nay khng hiu. Khng th g bo
-UninstallUnknownEntry=Co dong la (%1) c tim thy trong nht ky cua trinh g bo
-ConfirmUninstall=Ban co mun g bo hoan toan %1 va tt ca cac thanh phn cua no ?
-UninstallOnlyOnWin64=Cai t nay chi co th c g bo trn Windows 64 bit.
-OnlyAdminCanUninstall=Cai t nay chi co th c g bo bi ngi dung co quyn quan tri.
-UninstallStatusLabel= nghi ch trong khi %1 c g bo khoi may tinh cua ban.
-UninstalledAll=%1 a c g bo thanh cng trn may tinh cua ban.
-UninstalledMost=%1 a c g bo hoan toan.%n%nMt vai phn t co th cha c g bo va co th c lam bng tay.
-UninstalledAndNeedsRestart= hoan tt qua trinh g bo %1, may tinh cua ban phai c khi ng lai.%n%nBan co mun khi ng lai by gi ?
-UninstallDataCorrupted=Tp tin "%1" bi h. Khng th g bo
-
+UninstallNotFound=Tep "%1" hong ton tai. Khong the go cai dat
+UninstallOpenError=Khong the mo tep "%1". Khong the go cai dat
+UninstallUnsupportedVer=Tep dang nhap go cai dat "%1" thuoc kieu tep khong duoc ho tro. Khong the go cai dat
+UninstallUnknownEntry=Mot dau vao khong ro rang (%1) duoc ke den trong dang nhap go cai dat
+ConfirmUninstall=Ban co thuc su muon go %1 va toan bo thanh phan lien quan?
+UninstallOnlyOnWin64=Viec cai dat nay chi co the go tren phien ban Windows 64-bit.
+OnlyAdminCanUninstall=Viec cai dat nay chi co the go khi ban la Adminstrator.
+UninstallStatusLabel=Hay doi khi %1 duoc go khoi may tinh cua ban.
+UninstalledAll=%1 da duoc go thanh cong khoi may tinh cua ban.
+UninstalledMost=Go cai dat %1 hoan thanh.%n%nMot so thanh phan khong the go. Chung co the duoc go thu cong.
+UninstalledAndNeedsRestart=De hoan thanh go cai dat %1, phai khoi dong lai may tinh.%n%nBan co muon khoi dong lai?
+UninstallDataCorrupted=Tep "%1" bi hu hong. Khong the go cai dat
; *** Uninstallation phase messages
-ConfirmDeleteSharedFileTitle=G bo tp tin chia se?
-ConfirmDeleteSharedFile2=H thng cho bit tp tin chia se di y khng con c dung bi bt c chng trinh nao na. Ban co mun trinh g bo xoa tp tin nay khng ?%n%nNu co chng trinh nao con s dung tp tin nay ma no bi xoa i thi chng trinh o se khng hoat ng ung c. Nu ban khng chc, chon No. Vic lai tp tin nay cung khng gy anh hng n h thng cua ban.
-SharedFileNameLabel=Tn tp tin:
-SharedFileLocationLabel=Vi tri:
-WizardUninstalling=Trang thai g bo
-StatusUninstalling=ang g bo %1...
+ConfirmDeleteSharedFileTitle=Go tep da chia se?
+ConfirmDeleteSharedFile2=He thong da chi ra tep da chia se sau khong duoc dung boi bat cu chuong trinh nao khac. Ban co muon go chung?%n%nNeu mot so chuong trinh van con dung tep nay ma no da bi go, chung co the khong hoat dong tot. Neu ban khong hai long, chon Khong. Go bo chung tren he thong cua ban se khong gay ra bat cu thiet hai nao.
+SharedFileNameLabel=Ten tep:
+SharedFileLocationLabel=Vi tri:
+WizardUninstalling=Tinh trang go
+StatusUninstalling=Dang go cai dat %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Dang cai dat %1.
+ShutdownBlockReasonUninstallingApp=Dang go cai dat %1.
; The custom messages below aren't used by Setup itself, but if you make
; use of them in your scripts, you'll want to translate them.
[CustomMessages]
-NameAndVersion=%1 phin ban %2
-AdditionalIcons=Biu tng b sung:
-CreateDesktopIcon=Tao biu tng &desktop
-CreateQuickLaunchIcon=Tao biu tng &Quick Launch
-ProgramOnTheWeb=%1 trn Web
-UninstallProgram=G bo %1
-LaunchProgram=Thc thi %1
-AssocFileExtension=&Gn %1 vi phn m rng %2
-AssocingFileExtension=ang gn %1 vi phn m rng %2...
+NameAndVersion=%1 phien ban %2
+AdditionalIcons=Nhung loi tat bo sung:
+CreateDesktopIcon=Tao mot loi tat &Desktop
+CreateQuickLaunchIcon=Tao mot loi tat Khoi dong nh&anh
+ProgramOnTheWeb=%1 tren Web
+UninstallProgram=Go cai dat %1
+LaunchProgram=Khoi chay %1
+AssocFileExtension=&Gan ket %1 voi su mo rong tep cua %2
+AssocingFileExtension=Dang gan ket %1 voi su mo rong tep cua %2...
+AutoStartProgramGroupDescription=Khoi dong:
+AutoStartProgram=Tu dong khoi dong %1
+AddonHostProgramNotFound=%1 khong the duoc dat vao thu muc ban da chon.%n%nBan co muon tiep tuc?
diff --git a/distrib/custom_messages.iss b/distrib/custom_messages.iss
index 584253ed6..7355e77f3 100644
--- a/distrib/custom_messages.iss
+++ b/distrib/custom_messages.iss
@@ -1,4 +1,4 @@
-; (C) 2009-2014 see Authors.txt
+; (C) 2009-2015 see Authors.txt
;
; This file is part of MPC-HC.
;
@@ -37,7 +37,6 @@ en.langid=00000000
en.comp_mpciconlib=Icon Library
en.comp_mpcresources=Translations
en.msg_DeleteSettings=Do you also want to delete MPC-HC settings?%n%nIf you plan on installing MPC-HC again then you do not have to delete them.
-en.msg_SetupIsRunningWarning=MPC-HC setup is already running!
#if defined(sse_required)
en.msg_simd_sse=This build of MPC-HC requires a CPU with SSE extension support.%n%nYour CPU does not have those capabilities.
#elif defined(sse2_required)
diff --git a/distrib/custom_messages_translated.iss b/distrib/custom_messages_translated.iss
index c8a7ec602..a0f1afa81 100644
--- a/distrib/custom_messages_translated.iss
+++ b/distrib/custom_messages_translated.iss
@@ -1,4 +1,4 @@
-; (C) 2009-2014 see Authors.txt
+; (C) 2009-2015 see Authors.txt
;
; This file is part of MPC-HC.
;
@@ -30,24 +30,32 @@ ar.WelcomeLabel2=سوف يتم تثبيت [name] على جهازك.%n%nيستح
ar.WinVersionTooLowError=يتطلب [name] نظام تشغيل windows XP Service Pack 3 أو إصدار أحدث منه.
; Belarusian
-be.WelcomeLabel2=Зараз будзе ўстаноўлена [name].%n%nРэкамендуецца закрыць усе прыкладанні перад працягам.
-be.WinVersionTooLowError=[name] патрабуецца Windows XP Service Pack 3 або навей.
+be.WelcomeLabel2=Зараз на ваш камп'ютар будзе ўсталявана праграма [name].%n%nПерш чым працягнуць, рэкамендуецца закрыць усе астатнія праграмы.
+be.WinVersionTooLowError=Для запуску [name] патрабуецца Windows XP SP3 або навейшая.
; Bengali
bn.WelcomeLabel2=এর মাধ্যমে আপনার কম্পিউটারে [name] ইনস্টল করা হবে। %n%nপ্রক্রিয়াটি চালিয়ে যাওয়ার পূর্বে অন্যান্য সকল অ্যাপ্লিকেশন বন্ধ করার পরামর্শ দেয়া যাচ্ছে।
-bn.WinVersionTooLowError=[name] চালানোর জন্য Windows XP Service Pack 3 অথবা ঊর্ধ্বতন সংস্করণ প্রয়োজন।
+bn.WinVersionTooLowError=[NAME] চালানোর জন্য Windows XP Service Pack 3 অথবা ঊর্ধ্বতন সংস্করণ প্রয়োজন।
+
+; Bosnian
+bs_BA.WelcomeLabel2=Ovo će instalirati [name] na vaš računar.%n%nPreporučljivo je da, prije nastavka, zatvorite sve ostale programe.
+bs_BA.WinVersionTooLowError=[name] za pokretanje zahtijeva Windows XP Service Pack 3 ili noviji.
; Catalan
-ca.WelcomeLabel2=Aquest auxiliar instal·larà el [name] al vostre ordinador%n%nEs recomana tancar totes les aplicacions abans de continuar.
-ca.WinVersionTooLowError=[name] requereix Windows XP Service Pack 3 o superior per funcionar.
+ca.WelcomeLabel2=Aquest auxiliar instal·larà el [name] al vostre ordinador.%n%nSe recomana tancar totes les aplicacions abans de continuar.
+ca.WinVersionTooLowError=[name] requereix Windows XP Service Pack 3 o superior perquè funcioni.
; Czech
cs.WelcomeLabel2=Produkt [name] bude nainstalován na Váš počítač.%n%nDříve než budete pokračovat, doporučuje se ukončit veškeré spuštěné aplikace.
cs.WinVersionTooLowError=[name] vyžaduje Windows XP Service Pack 3 nebo novější.
+; Danish
+da.WelcomeLabel2=Dette vil installere [name] på din computer.%n%nDet anbefales, at du lukker alle andre programmer, inden du fortsætter.
+da.WinVersionTooLowError=[name] kræver Windows XP Service Pack 3 eller nyere for at køre.
+
; German (Neutral)
-de.WelcomeLabel2=Dieses Programm installiert [name] auf Ihrem Computer.%n%nEs wird empfohlen, alle laufenden Programme zu beenden, bevor Sie mit der Installation fortfahren.
-de.WinVersionTooLowError=[name] benötigt Windows XP Service Pack 3 oder höher.
+de.WelcomeLabel2=Hiermit wird der [name] installiert. Bitte alle anderen Anwendungen schließen, bevor Sie mit der Installation fortfahren.
+de.WinVersionTooLowError=Mindestvoraussetzung ist Windows XP mit Service Pack 3.
; Greek (Greece)
el.WelcomeLabel2=Θα γίνει εγκατάσταση του [name] στον υπολογιστή σας.%n%nΣας συνιστούμε να κλείσετε κάθε άλλη εφαρμογή πριν συνεχίσετε.
@@ -58,19 +66,23 @@ en_GB.WelcomeLabel2=This will install [name] on your computer.%n%nIt is recommen
en_GB.WinVersionTooLowError=[name] requires Windows XP Service Pack 3 or newer to run.
; Spanish
-es.WelcomeLabel2=Este programa instalará [name] en el equipo.%n%nSe recomienda que cierre el resto de las aplicaciones antes de continuar.
+es.WelcomeLabel2=Esto instalará [name] en el equipo.%n%nSe recomienda que cierre el resto de las aplicaciones antes de continuar.
es.WinVersionTooLowError=[name] requiere Windows XP Service Pack 3 o posterior para funcionar.
; Basque
eu.WelcomeLabel2=Honek [name] zure ordenagailuan ezarriko du.%n%nGomendatzen da beste aplikazio guztiak istea jarraitu aurretik.
eu.WinVersionTooLowError=[name] Windows XP Service Pack 3 edo berriagoa behar du lan egiteko.
+; Finnish
+fi.WelcomeLabel2=Tämä asentaa [name] tietokoneellesi.%n%nOn suositeltavaa, että suljet kaikki muut ohjelmat ennen kuin jatkat.
+fi.WinVersionTooLowError=[name] vaatii toimiakseen Windows XP Service Pack 3 tai uudemman.
+
; French (France)
fr.WelcomeLabel2=Vous allez installer [name] sur votre ordinateur.%n%nIl est recommandé de fermer toutes les autres applications avant de continuer.
fr.WinVersionTooLowError=[name] nécessite Windows XP Service Pack 3 ou plus récent pour fonctionner.
; Galician
-gl.WelcomeLabel2=Isto intalará [name] no teu ordenador.%n%nRecomendase que peches todas as aplicacións antes de seguir.
+gl.WelcomeLabel2=Isto instalará [name] no teu ordenador.%n%nRecoméndase que peches todas as aplicacións antes de seguir.
gl.WinVersionTooLowError=[name] require Windows XP Service Pack 3 ou posterior.
; Hebrew (Israel)
@@ -82,24 +94,32 @@ hr.WelcomeLabel2=Ovo će instalirati [name] na vaše računalo.%n%nPreporučeno
hr.WinVersionTooLowError=Da bi se pokrenuo [name] potrebno je imati Windows XP Service Pack 3 ili novije.
; Hungarian
-hu.WelcomeLabel2=Ez telepíteni fogja a(z) [name]-t a számítógépére.%nAjánlott, hogy minden más alkalmazást zárjon be a folytatás előtt.
+hu.WelcomeLabel2=Ez telepíteni fogja a(z) [name]-t a számítógépére.%n%nAjánlott, hogy minden más alkalmazást zárjon be a folytatás előtt.
hu.WinVersionTooLowError=Windows XP Service Pack 3 vagy újabb szükséges a(z) [name] futtatásához.
; Armenian (Armenia)
hy.WelcomeLabel2=[name]-ը կտեղադրվի ձեր համակարգչում։%n%nԽորհուրդ ենք տալիս փակել մյուս բոլոր ծրագրերը։
hy.WinVersionTooLowError=[name]-ը պահանջում է Windows XP Service Pack 3 կամ ավելի բարձր։
+; Indonesian
+id.WelcomeLabel2=Ini akan memasang [name] di komputer Anda.%n%nSangat disarankan untuk menutup semua aplikasi lain sebelum melanjutkan.
+id.WinVersionTooLowError=[name] membutuhkan Windows XP Service Pack 3 atau yang lebih baru agar bisa dijalankan.
+
; Italian
-it.WelcomeLabel2=Questo installerà [name] sul tuo computer.%nE' consigliato chiudere tutte le altre applicazioni prima di continuare.
+it.WelcomeLabel2=Questo installerà [name] sul tuo computer.%n%nE' consigliato chiudere tutte le altre applicazioni prima di continuare.
it.WinVersionTooLowError=[name] richiede Windows XP Service Pack 3 o successivo per funzionare.
; Japanese
-ja.WelcomeLabel2=このプログラムはあなたのコンピュータ上に [name] をインストールします。%n%nセットアップを続行する前に他のすべてのアプリケーションを閉じることが推奨されます。
-ja.WinVersionTooLowError=[name] を実行する為には Windows XP Service Pack 3 以降が必要です。
+ja.WelcomeLabel2=このプログラムはご使用のコンピュータ上に [name] をインストールします。%n%nセットアップを続行する前に他のすべてのアプリケーションを閉じることを推奨します。
+ja.WinVersionTooLowError=[name] を実行するためには Windows XP Service Pack 3 以降が必要です。
; Korean
-ko.WelcomeLabel2=이 설치프로그램은 [name] 를(을) 당신의 컴퓨터에 설치합니다.%n%n설치를 계속하기 전에 다른 모든 프로그램을 종료하는 것을 권장합니다.
-ko.WinVersionTooLowError=[name] 는(은) Windows XP Service Pack 3 또는 그 이상의 버전에서만 설치할 수 있습니다.
+ko.WelcomeLabel2=이것은 [name] 를(을) 당신의 컴퓨터에 설치합니다.%n%n설치를 계속하기 전에 다른 모든 프로그램을 종료하는 것을 권장합니다.
+ko.WinVersionTooLowError=[name] 는(은) Windows XP Service Pack 3 또는 그 이상의 버전에서만 설치할 수 있습니다.
+
+; Lithuanian
+lt.WelcomeLabel2=Ši programa įdiegs [name] į jūsų kompiuterį.%n%nRekomenduojama išjungti visas kitas programas, prieš pradedant diegimą.
+lt.WinVersionTooLowError=[name] veikimui reikalingas Windows XP su 3-čiu pakeitimų paketu arba naujesne versija.
; Malay (Malaysia)
ms_MY.WelcomeLabel2=Ini akan memasang [name] ke dalam komputer anda.%n%nDisarankan anda tutup semua aplikasi lain sebelum diteruskan.
@@ -107,7 +127,7 @@ ms_MY.WinVersionTooLowError=[name] memerlukan Windows XP Service Pack 3 atau yg
; Dutch (Neutral)
nl.WelcomeLabel2=Dit programma zal [name] op uw computer installeren.%n%nHet is aanbevolen dat u alle andere toepassingen sluit voordat u verder gaat.
-nl.WinVersionTooLowError=[name] vereist Windows XP Service Pack 3 of hoger om uit te voeren.
+nl.WinVersionTooLowError=[name] vereist Windows XP Service Pack 3 of hoger om te voeren werken.
; Polish
pl.WelcomeLabel2=Zostanie zainstalowane [name] na Twoim komputerze.%n%nZaleca się zamknięcie wszystkich innych aplikacji przed kontynuowaniem.
@@ -118,12 +138,12 @@ pt_BR.WelcomeLabel2=Isto instalará o [name] no seu computador.%n%nÉ recomendá
pt_BR.WinVersionTooLowError=[name] requer o Windows XP Service Pack 3 ou superior para ser executado.
; Romanian
-ro.WelcomeLabel2=Se va instala [name] pe calculatorul dumneavoastră.%n%nEste recomandat să închideţi toate celelalte aplicaţii înainte de a continua.
+ro.WelcomeLabel2=Se va instala [name] pe calculatorul dumneavoastră.%n%nEste recomandat să închideți toate celelalte aplicații înainte de a continua.
ro.WinVersionTooLowError=[name] necesită Windows XP Service Pack 3 sau mai nou pentru a rula.
; Russian
-ru.WelcomeLabel2=Программа установит [name] на ваш компьютер.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.
-ru.WinVersionTooLowError=[name] Эта программа требует Windows XP Service Pack 3 или выше.
+ru.WelcomeLabel2=Эта программа установит [name] на ваш компьютер.%n%nПеред тем, как продолжить, рекомендуется закрыть все прочие приложения.
+ru.WinVersionTooLowError=[name] требует Windows XP Service Pack 3 или новее.
; Slovak
sk.WelcomeLabel2=Teraz sa nainštaluje [name] do Vášho počítača.%n%nPredtým než budete pokračovať, odporúčame ukončiť všetky ostatné programy.
@@ -133,6 +153,10 @@ sk.WinVersionTooLowError=[name] vyžaduje pre svoje fungovanie systém Windows X
sl.WelcomeLabel2=[name] bo nameščen na tem računalniku.%n%nPriporočamo, da zaprete vse ostale programa pred nadaljevanjem.
sl.WinVersionTooLowError=[name] zahteva za delovanje Windows XP Service Pack 3 ali novejše
+; Serbian (Cyrillic)
+sr.WelcomeLabel2=Овај програм ће инсталирати [name] на ваш рачунар.%n%nПре него што наставите, препоручује се да затворите све друге програме.
+sr.WinVersionTooLowError=[name] захтева Windows XP Service Pack 3 или новији.
+
; Swedish
sv.WelcomeLabel2=Detta kommer att installera [name] på din dator.%n%nDet rekommenderas att du stänger alla andra program innan du fortsätter.
sv.WinVersionTooLowError=[name] kräver Windows XP Service Pack 3 eller senare.
@@ -143,7 +167,7 @@ th_TH.WinVersionTooLowError=[name] ต้องการ Windows XP Service Pack
; Turkish
tr.WelcomeLabel2=[name] medya oynatıcısı programı bilgisayarınıza kurulacaktır.%n%nKuruluma geçmeden önce tüm açık uygulamaları kapatmanızı öneriyoruz.
-tr.WinVersionTooLowError=[name] kurulumu, Windows XP Servis Paketi 3 veya daha yenisi ile çalışabilir.
+tr.WinVersionTooLowError=[name] kurulumu, ancak Windows XP Servis Paketi 3 veya daha yenisi ile çalışabilir.
; Tatar
tt.WelcomeLabel2=Программа сезнең санакка [name] урнаштырачак.%n%nДәвам итү алдыннан барлык башка эшлекле кушымталарны ябарга кирәк.
@@ -154,7 +178,7 @@ uk.WelcomeLabel2=На ваш комп'ютер буде встановлено [
uk.WinVersionTooLowError=[name] вимагає використання ОС Windows XP Service Pack 3 або пізнішої версії.
; Vietnamese
-vi.WelcomeLabel2=Chuẩn bị cài [name] vào máy tính của bạn.%n%nĐề nghị bạn đóng tất cả các ứng dụng khác trước khi tiếp tục.
+vi.WelcomeLabel2=Chuẩn bị cài đặt [name] vào máy tính của bạn.%n%nĐề nghị bạn đóng tất cả các ứng dụng khác trước khi tiếp tục.
vi.WinVersionTooLowError=Để cài đặt, [name] yêu cầu Windows XP Service Pack 3 hoặc mới hơn.
; Chinese (P.R.C.)
@@ -162,7 +186,7 @@ zh_CN.WelcomeLabel2=这将安装 [name] 到您的计算机中。%n%n建议您在
zh_CN.WinVersionTooLowError=[name] 要求 Windows XP Service Pack 3 或更高版本。
; Chinese (Taiwan)
-zh_TW.WelcomeLabel2=這將會安裝 [name] 在你的電腦中。%n%n建議您關閉所有其它應用程序後再繼續。
+zh_TW.WelcomeLabel2=這將會安裝 [name] 在您的電腦中。%n%n建議您關閉所有其它應用程式後再繼續。
zh_TW.WinVersionTooLowError=執行 [name] 需要 Windows XP Service Pack 3 或更新的版本。
@@ -172,7 +196,6 @@ ar.langid=00001025
ar.comp_mpciconlib=مكتبة الأيقونات
ar.comp_mpcresources=الترجمة
ar.msg_DeleteSettings=هل تريد حذف إعدادات ضبظ البرنامج؟ %n%nإذا كنت تنوي تثبيت البرنامج مرة أخرى، فلا يلزمك حذفها.
-ar.msg_SetupIsRunningWarning=ملف تثبيت البرنامج يعمل حالياً!
#if defined(sse_required)
ar.msg_simd_sse=هذه النسخة من البرنامج تتطلب معالج يدعم خاصية SSE.%n%nمعالج جهازك لايحمل هذه المتطلبات.
#elif defined(sse2_required)
@@ -191,28 +214,26 @@ ar.ViewChangelog=عرض سجل التغيرات
be.langid=00001059
be.comp_mpciconlib=Бібліятэка значкоў
be.comp_mpcresources=Пераклады
-be.msg_DeleteSettings=Ці хочаце таксама выдаліць налады MPC-HC?%n%nКалі вы збіраецеся зноў усталяваць MPC-HC, тады іх можна пакінуць.
-be.msg_SetupIsRunningWarning=Праграма ўсталявання MPC-HC ужо працуе!
+be.msg_DeleteSettings=Ці выдаліць налады MPC-HC?%n%nКалі вы збіраецеся ўсталяваць MPC-HC зноў, выдаляць іх не трэба.
#if defined(sse_required)
-be.msg_simd_sse=Гэтая будова MPC-HC вымагае працэсар, здольны выконваць інструкцыі SSE.%n%nВаш працэсар гэтага не ўмее.
+be.msg_simd_sse=Гэта зборка MPC-HC патрабуе працэсар, з падтрымкай SSE-інструкцый.%n%nВаш працэсар не адпавядае патрабаванням.
#elif defined(sse2_required)
-be.msg_simd_sse2=Гэтая будова MPC-HC вымагае працэсар, здольны выконваць інструкцыі SSE2.%n%nВаш працэсар гэтага не ўмее.
+be.msg_simd_sse2=Гэта зборка MPC-HC патрабуе працэсар, з падтрымкай SSE2-інструкцый.%n%nВаш працэсар не адпавядае патрабаванням.
#endif
-be.run_DownloadToolbarImages=Visit our Wiki page to download toolbar images
+be.run_DownloadToolbarImages=Наведаць нашу Wiki-старонку каб спампаваць выявы для панэлі навігацыі
be.tsk_AllUsers=Для ўсіх карыстальнікаў
-be.tsk_CurrentUser=Толькі для дзейнага карыстальніка
+be.tsk_CurrentUser=Толькі для гэтага карыстальніка
be.tsk_Other=Іншыя заданні:
-be.tsk_ResetSettings=Вярнуць налады
-be.types_DefaultInstallation=Перадвызначанае ўсталяванне
-be.types_CustomInstallation=Адмысловае ўсталяванне
-be.ViewChangelog=Спіс зменаў
+be.tsk_ResetSettings=Скінуць налады
+be.types_DefaultInstallation=Усталяванне па змаўчанні
+be.types_CustomInstallation=Адвольнае ўсталяванне
+be.ViewChangelog=Праглядзець спіс зменаў
; Bengali
bn.langid=00001093
bn.comp_mpciconlib=আইকন লাইব্রেরি
bn.comp_mpcresources=অনুবাদসমূহ
bn.msg_DeleteSettings=আপনি কি MPC-HCএর সেটিংসমূহও মুছে ফেলতে চান?%n%nআপনার যদি পুনরায় MPC-HC ইনস্টল করার পরিকল্পনা থাকে, তাহলে এসব মুছে ফেলতে হবে না।
-bn.msg_SetupIsRunningWarning=MPC-HCএর সেটআপ ইতিমধ্যে চলমান রয়েছে!
#if defined(sse_required)
bn.msg_simd_sse=MPC-HCএর এই নির্মাণটির জন্য SSE এক্সটেনশন সমর্থন করে এমন একটি CPUর প্রয়োজন।%n%nআপনার CPUর সেই কর্মক্ষমতা নেই।
#elif defined(sse2_required)
@@ -223,36 +244,53 @@ bn.tsk_AllUsers=সকল ব্যবহারকারীর জন্য
bn.tsk_CurrentUser=শুধুমাত্র বর্তমান ব্যবহারকারীর জন্য
bn.tsk_Other=অন্যান্য কাজসমূহ:
bn.tsk_ResetSettings=সেটিংসমূহ পুনর্বিন্যাস
-bn.types_DefaultInstallation=নির্ধারিত ইনস্টল প্রক্রিয়া
-bn.types_CustomInstallation=নির্ধারণযোগ্য ইনস্টল প্রক্রিয়া
+bn.types_DefaultInstallation=ডিফল্ট ইনস্টল প্রক্রিয়া
+bn.types_CustomInstallation=ব্যক্তি-নির্ধারিত ইনস্টল প্রক্রিয়া
bn.ViewChangelog=পরিবর্তনতালিকা দেখুন
+; Bosnian
+bs_BA.langid=00005146
+bs_BA.comp_mpciconlib=Biblioteka Ikonica
+bs_BA.comp_mpcresources=Prijevodi
+bs_BA.msg_DeleteSettings=Da li želite izbrisati i MPC-HC podešenja?%n%nAko planirate ponovo instalirati MPC-HC onda ih ne trebate brisati.
+#if defined(sse_required)
+bs_BA.msg_simd_sse=Ova verzija MPC-HC zahtijeva CPU sa SSE podrškom.%n%nVaš CPU nema te mogućnosti.
+#elif defined(sse2_required)
+bs_BA.msg_simd_sse2=Ova verzija MPC-HC zahtijeva CPU sa SSE2 podrškom.%n%nVaš CPU nema te mogućnosti.
+#endif
+bs_BA.run_DownloadToolbarImages=Posjetite našu Wiki stranicu da preuzmete slike alatne trake
+bs_BA.tsk_AllUsers=Za sve korisnike
+bs_BA.tsk_CurrentUser=Samo za trenutnog korisnika
+bs_BA.tsk_Other=Drugi zadaci:
+bs_BA.tsk_ResetSettings=Resetuj podešavanja
+bs_BA.types_DefaultInstallation=Podrazumijevana instalacija
+bs_BA.types_CustomInstallation=Instalacija po želji
+bs_BA.ViewChangelog=Pogledaj listu izmjena
+
; Catalan
ca.langid=00001027
ca.comp_mpciconlib=Col·lecció d’icones
ca.comp_mpcresources=Traduccions
-ca.msg_DeleteSettings=Voleu suprimir les preferències del MPC-HC?%n%nSi planegeu instal·lar-ho un altre cop no cal eliminar-les.
-ca.msg_SetupIsRunningWarning=La instal·lació del MPC-HC ja s’està executant.
+ca.msg_DeleteSettings=Voleu suprimir les preferències de l'MPC-HC?%n%nSi planegeu tornar-lo a instal·lar no cal que les elimineu.
#if defined(sse_required)
-ca.msg_simd_sse=Aquesta versió de MPC-HC requereix una CPU amb suport d'extensions SSE.%n%nLa teva CPU no cumpleix aquestes característiques.
+ca.msg_simd_sse=Aquesta versió de l'MPC-HC necessita una CPU amb suport d'extensions SSE.%n%nLa vostra CPU no compleix aquesta característica.
#elif defined(sse2_required)
-ca.msg_simd_sse2=Aquesta versió de MPC-HC requereix una CPU amb suport d'extensions SSE2.%n%nLa teva CPU no cumpleix aquestes característiques.
+ca.msg_simd_sse2=Aquesta versió de l'MPC-HC requereix una CPU amb suport d'extensions SSE2.%n%nLa vostra CPU no compleix aquesta característica.
#endif
-ca.run_DownloadToolbarImages=Visita la nostra pàgina de Wiki per descarregar imatges per la barra d'eines
-ca.tsk_AllUsers=Per tots els usuaris
+ca.run_DownloadToolbarImages=Visita la nostra pàgina Wiki per descarregar imatges de la barra d'eines
+ca.tsk_AllUsers=Per a tots els usuaris
ca.tsk_CurrentUser=Només per l'usuari actual
ca.tsk_Other=Altres tasques:
-ca.tsk_ResetSettings=Reiniciar preferències
+ca.tsk_ResetSettings=Reinicia la configuració
ca.types_DefaultInstallation=Instal·lació per defecte
ca.types_CustomInstallation=Instal·lació personalitzada
-ca.ViewChangelog=Veure registre de canvis
+ca.ViewChangelog=Visualitza el Registre de canvis
; Czech
cs.langid=00001029
cs.comp_mpciconlib=Ikony typů souborů
cs.comp_mpcresources=Jazykové soubory
cs.msg_DeleteSettings=Chcete smazat také nastavení MPC-HC?%n%nPokud plánujete MPC-HC znovu nainstalovat, mazat je nemusíte.
-cs.msg_SetupIsRunningWarning=Instalační program MPC-HC je již spuštěn!
#if defined(sse_required)
cs.msg_simd_sse=Toto sestavení MPC-HC vyžaduje procesor s podporou rozšíření SSE.%n%nVáš procesor tato rozšíření nepodporuje.
#elif defined(sse2_required)
@@ -267,32 +305,49 @@ cs.types_DefaultInstallation=Standardní instalace
cs.types_CustomInstallation=Volitelná instalace
cs.ViewChangelog=Zobrazit seznam změn
+; Danish
+da.langid=00001030
+da.comp_mpciconlib=Ikon-bibliotek
+da.comp_mpcresources=Oversættelser
+da.msg_DeleteSettings=Vil du også slette MPC-HC indstillinger?%n%nHvis du har tænkt dig at installere MPC-HC igen, så behøves du ikke slette dem.
+#if defined(sse_required)
+da.msg_simd_sse=Denne version af MPC-HC kræver en CPU der understøtter SSE CPU-anvisninger.%n%nDin CPU understøtter det ikke.
+#elif defined(sse2_required)
+da.msg_simd_sse2=Denne version af MPC-HC kræver en CPU der understøtter SSE2 CPU-anvisninger.%n%nDin CPU understøtter det ikke.
+#endif
+da.run_DownloadToolbarImages=Besøg vores wiki-side for at downloade værktøjslinjebilleder
+da.tsk_AllUsers=For alle brugere
+da.tsk_CurrentUser=Kun for denne bruger
+da.tsk_Other=Andre opgaver:
+da.tsk_ResetSettings=Nulstil indstillinger
+da.types_DefaultInstallation=Standardinstallation
+da.types_CustomInstallation=Brugerdefineret installation
+da.ViewChangelog=Vis ændringslog
+
; German (Neutral)
de.langid=00001031
-de.comp_mpciconlib=Dateisymbole für verknüpfte Mediendateien
-de.comp_mpcresources=Sprachdateien (darunter Deutsch)
-de.msg_DeleteSettings=Wollen Sie auch die Programmeinstellungen löschen?%n%nWenn Sie den MPC-HC wieder installieren möchten, dann müssen Sie diese nicht unbedingt löschen.
-de.msg_SetupIsRunningWarning=MPC-HC Setup wird bereits ausgeführt!
+de.comp_mpciconlib=Icon-Bibliothek
+de.comp_mpcresources=Übersetzungen (u.a. deutsch)
+de.msg_DeleteSettings=Bei Neuinstallation des MPC-HC können verbliebene Einstellungen problemlos übernommen werden.%n%nEinstellungen auch entfernen?
#if defined(sse_required)
-de.msg_simd_sse=Dieses MPC-HC-Build benötigt einen Prozessor mit SSE-Unterstützung.%n%nIhr Prozessor besitzt nicht diese Eigenschaft.
+de.msg_simd_sse=Die verwendete CPU muss SSE unterstützen.
#elif defined(sse2_required)
-de.msg_simd_sse2=Dieses MPC-HC-Build benötigt einen Prozessor mit SSE2-Unterstützung.%n%nIhr Prozessor besitzt nicht diese Eigenschaft.
+de.msg_simd_sse2=Die verwendete CPU muss SSE2 unterstützen.
#endif
-de.run_DownloadToolbarImages=Toolbar-Bilder von der Wiki-Seite herunterladen
+de.run_DownloadToolbarImages=Wiki für Toolbar-Bilder öffnen
de.tsk_AllUsers=Für alle Benutzer
-de.tsk_CurrentUser=Nur für den aktuellen Benutzer
-de.tsk_Other=Andere Aufgaben:
-de.tsk_ResetSettings=Programmeinstellungen zurücksetzen
-de.types_DefaultInstallation=Standard Installation
+de.tsk_CurrentUser=Für den aktuellen Benutzer
+de.tsk_Other=Weitere Aufgaben:
+de.tsk_ResetSettings=Einstellungen zurücksetzen
+de.types_DefaultInstallation=Standard-Installation
de.types_CustomInstallation=Benutzerdefinierte Installation
-de.ViewChangelog=Änderungsprotokoll zeigen
+de.ViewChangelog=Changelog anzeigen
; Greek (Greece)
el.langid=00001032
el.comp_mpciconlib=Βιβλιοθήκη εικονιδίων
el.comp_mpcresources=Μεταφράσεις
el.msg_DeleteSettings=Θέλετε να διαγράψετε τις ρυθμίσεις του MPC-HC;%n%nΑν σκοπεύετε να εγκαταστήσετε το MPC-HC ξανά, τότε δεν χρειάζεται να τις διαγράψετε.
-el.msg_SetupIsRunningWarning=Η εγκατάσταση του MPC-HC εκτελείται ήδη!
#if defined(sse_required)
el.msg_simd_sse=Αυτή η έκδοση του MPC-HC απαιτεί επεξεργαστή με υποστήριξη SSE.%n%nΟ επεξεργαστής σας δεν έχει αυτές τις δυνατότητες.
#elif defined(sse2_required)
@@ -305,14 +360,13 @@ el.tsk_Other=Επιπλέον ενέργειες:
el.tsk_ResetSettings=Επαναφορά ρυθμίσεων
el.types_DefaultInstallation=Προκαθορισμένη εγκατάσταση
el.types_CustomInstallation=Προσαρμοσμένη εγκατάσταση
-el.ViewChangelog=Εμφάνιση λίστας αλλαγών
+el.ViewChangelog=Εμφάνιση μητρώου αλλαγών
; English (United Kingdom)
en_GB.langid=00002057
en_GB.comp_mpciconlib=Icon Library
en_GB.comp_mpcresources=Translations
en_GB.msg_DeleteSettings=Do you also want to delete MPC-HC settings?%n%nIf you plan on installing MPC-HC again then you do not have to delete them.
-en_GB.msg_SetupIsRunningWarning=MPC-HC setup is already running!
#if defined(sse_required)
en_GB.msg_simd_sse=This build of MPC-HC requires a CPU with SSE extension support.%n%nYour CPU does not have those capabilities.
#elif defined(sse2_required)
@@ -332,15 +386,14 @@ es.langid=00003082
es.comp_mpciconlib=Colección de iconos
es.comp_mpcresources=Traducciones
es.msg_DeleteSettings=¿Quiere eliminar también las preferencias de MPC-HC?%n%nSi planea instalar de nuevo MPC-HC no necesita eliminarlas.
-es.msg_SetupIsRunningWarning=La instalación de MPC-HC ya está en ejecución.
#if defined(sse_required)
-es.msg_simd_sse=Esta versión de MPC-HC requiere una CPU compatible con extensiones SSE.%n%nSu CPU carece de esta característica.
+es.msg_simd_sse=Esta versión de MPC-HC requiere una CPU que soporte instrucciones SSE.%n%nSu CPU carece de esta característica.
#elif defined(sse2_required)
-es.msg_simd_sse2=Esta versión de MPC-HC requiere una CPU compatible con extensiones SSE2.%n%nSu CPU carece de esta característica.
+es.msg_simd_sse2=Esta versión de MPC-HC requiere una CPU que soporte instrucciones SSE2.%n%nSu CPU carece de esta característica.
#endif
-es.run_DownloadToolbarImages=Visite nuestra página de wiki para descargar imágenes de la barra de herramientas
+es.run_DownloadToolbarImages=Visite nuestra página wiki para descargar imágenes de barra de herramientas
es.tsk_AllUsers=Para todos los usuarios
-es.tsk_CurrentUser=Solo para el usuario actual
+es.tsk_CurrentUser=Sólo para el usuario actual
es.tsk_Other=Otras tareas:
es.tsk_ResetSettings=Restablecer configuración
es.types_DefaultInstallation=Instalación predeterminada
@@ -352,7 +405,6 @@ eu.langid=00001069
eu.comp_mpciconlib=Ikur Liburutegia
eu.comp_mpcresources=Itzulpenak
eu.msg_DeleteSettings=MPC-HC ezarpenak kentzea ere nahi dituzu?%n%nMPC-HC berriro ezartzeko asmoa baduzu ez dituzu ezabatu behar.
-eu.msg_SetupIsRunningWarning=MPC-HC ezarpena jadanik ekinean dago!
#if defined(sse_required)
eu.msg_simd_sse=MPC-HC eraiketa honek SSE hedapen sostengua duen CPU bat behar du.%n%nZure CPU-ak ez ditu gaitasun hauek.
#elif defined(sse2_required)
@@ -367,12 +419,30 @@ eu.types_DefaultInstallation=Berezko ezarpena
eu.types_CustomInstallation=Norbere ezarpena
eu.ViewChangelog=Ikusi Aldaketa-oharra
+; Finnish
+fi.langid=00001035
+fi.comp_mpciconlib=Ikonikirjasto
+fi.comp_mpcresources=Käännökset
+fi.msg_DeleteSettings=Haluatko poistaa myöskin MPC-HC:n asetukset?%n%nJos aiot asentaa MPC-HC:n uudelleen, niitä ei tarvitse poistaa.
+#if defined(sse_required)
+fi.msg_simd_sse=MPC-HC:n tämä versio edellyttää CPU:lta SSE-laajennusten tukea.%n%nProsessorissasi ei ole niitä ominaisuuksia.
+#elif defined(sse2_required)
+fi.msg_simd_sse2=MPC-HC:n tämä versio edellyttää CPU:lta SSE2-laajennusten tukea.%n%nProsessorissasi ei ole niitä ominaisuuksia.
+#endif
+fi.run_DownloadToolbarImages=Vieraile Wiki-sivustollamme ladataksesi työkalupalkin kuvat
+fi.tsk_AllUsers=Kaikille käyttäjille
+fi.tsk_CurrentUser=Vain nykyiselle käyttäjälle
+fi.tsk_Other=Muut tehtävät:
+fi.tsk_ResetSettings=Palauta asetukset
+fi.types_DefaultInstallation=Oletusasennus
+fi.types_CustomInstallation=Mukautettu asennus
+fi.ViewChangelog=Näytä muutosloki
+
; French (France)
fr.langid=00001036
fr.comp_mpciconlib=Bibliothèque d'icônes
fr.comp_mpcresources=Traductions
fr.msg_DeleteSettings=Souhaitez-vous également supprimer les paramètres de MPC-HC ?%n%nSi vous prévoyez de réinstaller MPC-HC, il est conseillé de ne pas les supprimer.
-fr.msg_SetupIsRunningWarning=L'installation de MPC-HC est déjà en cours d'exécution !
#if defined(sse_required)
fr.msg_simd_sse=Cette version de MPC-HC nécessite un CPU avec support des instructions SSE.%n%nVotre processeur ne supporte pas cette fonctionnalité.
#elif defined(sse2_required)
@@ -391,12 +461,11 @@ fr.ViewChangelog=Voir la liste des changements
gl.langid=00001110
gl.comp_mpciconlib=Biblioteca de iconas
gl.comp_mpcresources=Traducións
-gl.msg_DeleteSettings= Tamén queres eliminar os axustes de MPC-HC?%n%nSe te plantexas instalar MPC-HC outra vez entón non o tes que eliminar.
-gl.msg_SetupIsRunningWarning=O instalador de MPC-HC xa está correndo!
+gl.msg_DeleteSettings=Ques eliminar tamén os axustes de MPC-HC?%n%nSe pensas instalar MPC-HC de novo entón non o tes que eliminalos.
#if defined(sse_required)
-gl.msg_simd_sse=Esta versión de MPC-HC require unha CPU con soporte para a extensión SSE .%n%nO seu CPU non ten estas capacidades.
+gl.msg_simd_sse=Esta versión de MPC-HC require unha CPU con soporte para a extensión SSE .%n%nA súa CPU non ten estas capacidades.
#elif defined(sse2_required)
-gl.msg_simd_sse2=Esta versión de MPC-HC require unha CPU con soporte para a extensión SSE2 .%n%nO seu CPU non ten estas capacidades.
+gl.msg_simd_sse2=Esta versión de MPC-HC require unha CPU con soporte para a extensión SSE2 .%n%nA súa CPU non ten estas capacidades.
#endif
gl.run_DownloadToolbarImages=Visite a nosa Wiki para descargar imaxes da barra de ferramentas
gl.tsk_AllUsers=Para todos os usuarios
@@ -412,7 +481,6 @@ he.langid=00001037
he.comp_mpciconlib=ספריית אייקונים
he.comp_mpcresources=תרגומים
he.msg_DeleteSettings=האם ברצונך גם למחוק את ההגדרות של MPC-HC?%n%nאם אתה מתכנן להתקין את MPC-HC בשנית, אינך חייב להסירן.
-he.msg_SetupIsRunningWarning=ההתקנה של MPC-HC כבר רצה!
#if defined(sse_required)
he.msg_simd_sse=גרסה זו של MPC-HC דורשת מעבד עם תמיכה בהרחבת SSE.%n%nהמעבד שברשותך אינו תומך בכך.
#elif defined(sse2_required)
@@ -432,7 +500,6 @@ hr.langid=00001050
hr.comp_mpciconlib=Biblioteka ikona
hr.comp_mpcresources=Prijevodi
hr.msg_DeleteSettings=Želite li obrisati postavke od MPC-HC?%n%nAko planirate ponovno instalirati MPC-HC, ne morate ih brisati.
-hr.msg_SetupIsRunningWarning=MPC-HC instalacija je već pokrenuta!
#if defined(sse_required)
hr.msg_simd_sse=Ova verzija MPC-HC zahtijeva procesor sa SSE podrškom.%n%nVaš procesor nema te mogućnosti.
#elif defined(sse2_required)
@@ -443,7 +510,7 @@ hr.tsk_AllUsers=Za sve korisnike
hr.tsk_CurrentUser=Samo za trenutnog korisnika
hr.tsk_Other=Ostali zadaci:
hr.tsk_ResetSettings=Vrati na početne postavke programa
-hr.types_DefaultInstallation=Standarnda instalacija
+hr.types_DefaultInstallation=Standardna instalacija
hr.types_CustomInstallation=Prilagođena instalacija
hr.ViewChangelog=Pogledaj popis promjena
@@ -452,7 +519,6 @@ hu.langid=00001038
hu.comp_mpciconlib=Ikon Gyűjtemény
hu.comp_mpcresources=Fordítások
hu.msg_DeleteSettings=Az MPC-HC beállításokat is törölni szeretné?%n%nHa azt tervezi, hogy újratelepíti az MPC-HC-t, akkor nem kell törölnie őket.
-hu.msg_SetupIsRunningWarning=Az MPC-HC telepítő már fut!
#if defined(sse_required)
hu.msg_simd_sse=Az MPC-HC jelen változatához SSE támogatással bíró CPU-ra van szüksége.%n%nAz ön CPU-ja nem rendelkezik ilyen támogatással.
#elif defined(sse2_required)
@@ -464,7 +530,7 @@ hu.tsk_CurrentUser=Csak a jelenlegi felhasználónak
hu.tsk_Other=Egyéb feladatok:
hu.tsk_ResetSettings=Beállítások alaphelyzetbe állítása
hu.types_DefaultInstallation=Szokásos telepítés
-hu.types_CustomInstallation=Egyedi telepítés
+hu.types_CustomInstallation=Egyéni telepítés
hu.ViewChangelog=Verziótörténet megtekintése
; Armenian (Armenia)
@@ -472,27 +538,44 @@ hy.langid=00001067
hy.comp_mpciconlib=Պատկերների գրադարան
hy.comp_mpcresources=Թարգմանություններ
hy.msg_DeleteSettings=Ջնջե՞լ MPC-HC-ի կարգավորումները։%n%nԵթե նախատեսում եք վերատեղադրել MPC-HC, ապա պետք է չէ դրանք ջնջել։.
-hy.msg_SetupIsRunningWarning=MPC-HC-ի տեղակայիչը արդեն բացված է!
#if defined(sse_required)
hy.msg_simd_sse=MPC-HC-ի այս տարբերակը պահանջում է CPU՝ SSE-ի աջակցմամբ։%n%nՁեր CPU-ն այն չի աջակցում։
#elif defined(sse2_required)
hy.msg_simd_sse2=MPC-HC-ի այս տարբերակը պահանջում է CPU՝ SSE2-ի աջակցմամբ։%n%nՁեր CPU-ն այն չի աջակցում։
#endif
-hy.run_DownloadToolbarImages=Visit our Wiki page to download toolbar images
+hy.run_DownloadToolbarImages=Այցելեք մեր Wiki էջը՝ ներբեռնելու համար գործիքագոտու պատկերներ
hy.tsk_AllUsers=Բոլորի համար
-hy.tsk_CurrentUser=Միայն ձեզ համար
+hy.tsk_CurrentUser=Միայն ընթացիկ օգտվողի համար
hy.tsk_Other=Լրացուցիչ.
-hy.tsk_ResetSettings=Ետարկել կարգավորումները
-hy.types_DefaultInstallation=Տեղադրել ըստ ծրագրայինի
+hy.tsk_ResetSettings=Վերակայել կարգավորումները
+hy.types_DefaultInstallation=Տեղադրել ըստ լռելյայն
hy.types_CustomInstallation=Հարմարեցված տեղակայում
hy.ViewChangelog=Փոփոխությունների ցանկը
+; Indonesian
+id.langid=00001057
+id.comp_mpciconlib=Pustaka Ikon
+id.comp_mpcresources=Terjemahan
+id.msg_DeleteSettings=Apakah Anda juga ingin menghapus pengaturan MPC-HC?%n%nJika Anda berencana untuk memasang MPC-HC lagi maka Anda tidak perlu menghapusnya.
+#if defined(sse_required)
+id.msg_simd_sse=Versi MPC-HC ini membutuhkan CPU dengan dukungan ekstensi SSE.%n%nCPU Anda tidak memiliki kemampuan tersebut.
+#elif defined(sse2_required)
+id.msg_simd_sse2=Versi MPC-HC ini membutuhkan CPU dengan dukungan ekstensi SSE2.%n%nCPU Anda tidak memiliki kemampuan tersebut.
+#endif
+id.run_DownloadToolbarImages=Kunjungi halaman Wiki kami untuk mengunduh gambar bilah alat
+id.tsk_AllUsers=Untuk semua pengguna
+id.tsk_CurrentUser=Hanya untuk pengguna ini saja
+id.tsk_Other=Tugas lain:
+id.tsk_ResetSettings=Setel ulang pengaturan
+id.types_DefaultInstallation=Pemasangan bawaan
+id.types_CustomInstallation=Pemasangan ubahsuai
+id.ViewChangelog=Lihat Catatan Perubahan
+
; Italian
it.langid=00001040
it.comp_mpciconlib=Icona Libreria
it.comp_mpcresources=Traduzioni
it.msg_DeleteSettings=Vuoi eliminare anche le impostazioni di MPC-HC?%n%nSe pensi di reinstallare MPC-HC in seguito non dovresti eliminarle.
-it.msg_SetupIsRunningWarning=L'installazione di MPC-HC è già in corso!
#if defined(sse_required)
it.msg_simd_sse=Questa build di MPC-HC richiede una CPU con il supporto alle estensioni SSE.%n%nLa tua CPU non dispone di questa caratteristica.
#elif defined(sse2_required)
@@ -512,16 +595,15 @@ ja.langid=00001041
ja.comp_mpciconlib=アイコン ライブラリ
ja.comp_mpcresources=翻訳
ja.msg_DeleteSettings=MPC-HC の設定を削除してもよろしいですか?%n%nMPC-HC を再度インストールする場合、設定を削除する必要はありません。
-ja.msg_SetupIsRunningWarning=MPC-HC のセットアップは既に実行されています!
#if defined(sse_required)
-ja.msg_simd_sse=このバージョンの MPC-HC には CPU の SSE 拡張サポートが必要です。%n%nお使いの CPU はこれらの機能を満たしていません。
+ja.msg_simd_sse=MPC-HC のこのビルドには SSE 拡張機能をサポートする CPU が必要です。%n%nご使用の CPU はこれらの機能を備えていません。
#elif defined(sse2_required)
-ja.msg_simd_sse2=このバージョンの MPC-HC には CPU の SSE2 拡張サポートが必要です。%n%nお使いの CPU はこれらの機能を満たしていません。
+ja.msg_simd_sse2=MPC-HC のこのビルドには SSE2 拡張機能をサポートする CPU が必要です。%n%nご使用の CPU はこれらの機能を備えていません。
#endif
-ja.run_DownloadToolbarImages=Wiki ページに移動してツールバーの画像をダウンロードする
+ja.run_DownloadToolbarImages=Wiki ページに移動してツール バーの画像をダウンロードする
ja.tsk_AllUsers=すべてのユーザーにインストールする
ja.tsk_CurrentUser=現在実行しているユーザーにのみインストールする
-ja.tsk_Other=他のタスク:
+ja.tsk_Other=その他のタスク:
ja.tsk_ResetSettings=設定をリセットする
ja.types_DefaultInstallation=既定のインストール
ja.types_CustomInstallation=カスタム インストール
@@ -531,28 +613,45 @@ ja.ViewChangelog=変更履歴を表示する
ko.langid=00001042
ko.comp_mpciconlib=아이콘 라이브러리
ko.comp_mpcresources=번역
-ko.msg_DeleteSettings=MPC-HC 의 설정도 삭제하시겠습니까?%n%nMPC-HC 를 다시 설치할 계획이라면 설정들을 삭제할 필요가 없습니다.
-ko.msg_SetupIsRunningWarning=MPC-HC 설치프로그램이 이미 실행중입니다!
+ko.msg_DeleteSettings=MPC-HC 의 설정도 삭제 하시겠습니까?%n%nMPC-HC 를 다시 설치할 계획이라면 설정들을 삭제할 필요가 없습니다.
#if defined(sse_required)
ko.msg_simd_sse=이 버전의 MPC-HC 는 SSE 기술을 지원하는 CPU가 필요합니다.%n%n이 컴퓨터의 CPU는 이 기술을 지원하지않습니다.
#elif defined(sse2_required)
ko.msg_simd_sse2=이 버전의 MPC-HC 는 SSE2 기술을 지원하는 CPU가 필요합니다.%n%n이 컴퓨터의 CPU는 이 기술을 지원하지않습니다.
#endif
-ko.run_DownloadToolbarImages=Visit our Wiki page to download toolbar images
+ko.run_DownloadToolbarImages=툴바 이미지들을 다운로드하기 위해 위키 페이지로 방문.
ko.tsk_AllUsers=모든 사용자
ko.tsk_CurrentUser=현재 사용자만
ko.tsk_Other=다른 작업:
ko.tsk_ResetSettings=설정 초기화
ko.types_DefaultInstallation=기본 설치
-ko.types_CustomInstallation=사용자정의 설치
+ko.types_CustomInstallation=사용자 정의 설치
ko.ViewChangelog=버전 변경사항 보기
+; Lithuanian
+lt.langid=00001063
+lt.comp_mpciconlib=Piktogramų biblioteka
+lt.comp_mpcresources=Vertimai
+lt.msg_DeleteSettings=Ar norite taip pat ištrinti MPC-HC nuostatas?%n%nJei planuojate vėl diegti MPC-HC, tada jų trinti nebūtina.
+#if defined(sse_required)
+lt.msg_simd_sse=Šiai MPC-HC versijai reikalingas centrinis procesorius su SSE plėtinio palaikymu.%n%nJūsų procesorius neturi šių galimybių.
+#elif defined(sse2_required)
+lt.msg_simd_sse2=Šiai MPC-HC versijai reikalingas centrinis CPU su SSE2 plėtinio palaikymu.%n%nJūsų procesorius neturi šių galimybių.
+#endif
+lt.run_DownloadToolbarImages=Aplankykite mūsų Wiki puslapį įrankių juostos paveikslėliams atsisiųsti
+lt.tsk_AllUsers=Visiems naudotojams
+lt.tsk_CurrentUser=Dabartiniam naudotojui
+lt.tsk_Other=Kitos užduotys:
+lt.tsk_ResetSettings=Atstatyti nustatymus
+lt.types_DefaultInstallation=Numatytasis diegimas
+lt.types_CustomInstallation=Pasirinktinis diegimas
+lt.ViewChangelog=Peržiūrėti pokyčių žurnalą
+
; Malay (Malaysia)
ms_MY.langid=00001086
ms_MY.comp_mpciconlib=Pustaka Ikon
ms_MY.comp_mpcresources=Terjemahan
ms_MY.msg_DeleteSettings=Anda mahu padam tetapan MPC-HC?%n%nJika anda bercadang untuk memasang MPC-HC lagi, maka anda tidak perlu memadamnya.
-ms_MY.msg_SetupIsRunningWarning=Persediaan MPC-HC sedia dijalankan!
#if defined(sse_required)
ms_MY.msg_simd_sse=Binaan MPC-HC ini memerlukan CPU dengan sokongan sambungan SSE.%n%nCPU anda tidak mempunyai keupayaan tersebut.
#elif defined(sse2_required)
@@ -569,30 +668,28 @@ ms_MY.ViewChangelog=Lihat Log Perubahan
; Dutch (Neutral)
nl.langid=00001043
-nl.comp_mpciconlib=Iconen voor mediabestanden
-nl.comp_mpcresources=Taal
+nl.comp_mpciconlib=Iconen bibliotheek
+nl.comp_mpcresources=Talen
nl.msg_DeleteSettings=Wilt u ook de instellingen van MPC-HC verwijderen?%n%nAls u van plan bent MPC-HC opnieuw te gaan installeren is dit niet nodig.
-nl.msg_SetupIsRunningWarning=MPC-HC installatie is al gestart!
#if defined(sse_required)
-nl.msg_simd_sse=Deze versie van MPC-HC heeft een processor nodig die SSE ondersteunt.%n%nUw processor ondersteund dit niet.
+nl.msg_simd_sse=Deze versie van MPC-HC heeft een processor nodig die SSE ondersteunt.%n%nUw processor ondersteunt dit niet.
#elif defined(sse2_required)
-nl.msg_simd_sse2=Deze versie van MPC-HC heeft een processor nodig die SSE2 ondersteunt.%n%nUw processor ondersteund dit niet.
+nl.msg_simd_sse2=Deze versie van MPC-HC heeft een processor nodig die SSE2 ondersteunt.%n%nUw processor ondersteunt dit niet.
#endif
-nl.run_DownloadToolbarImages=Visit our Wiki page to download toolbar images
+nl.run_DownloadToolbarImages=Bezoek onze wiki om de werkbalkafbeeldingen op te halen
nl.tsk_AllUsers=Voor alle gebruikers
-nl.tsk_CurrentUser=Allen voor de huidige gebruiker
+nl.tsk_CurrentUser=Alleen voor de huidige gebruiker
nl.tsk_Other=Andere taken:
nl.tsk_ResetSettings=Instellingen resetten
nl.types_DefaultInstallation=Standaard installatie
nl.types_CustomInstallation=Aangepaste installatie
-nl.ViewChangelog=Bekijk Wijzigingsoverzicht
+nl.ViewChangelog=Toon wijziging geschiedenis
; Polish
pl.langid=00001045
pl.comp_mpciconlib=Ikony plików multimedialnych
pl.comp_mpcresources=Tłumaczenia
pl.msg_DeleteSettings=Czy chcesz usunąć ustawienia MPC-HC?%n%nJeśli planujesz ponownie zainstalować MPC-HC, nie musisz ich usuwać.
-pl.msg_SetupIsRunningWarning=Instalator MPC-HC jest już uruchomiony!
#if defined(sse_required)
pl.msg_simd_sse=Ta kompilacja MPC-HC wymaga procesora z obsługą zestawu instrukcji SSE.%n%nTwój procesor ich nie obsługuje.
#elif defined(sse2_required)
@@ -612,7 +709,6 @@ pt_BR.langid=00001046
pt_BR.comp_mpciconlib=Biblioteca de ícones
pt_BR.comp_mpcresources=Traduções
pt_BR.msg_DeleteSettings=Gostaria de excluir as configurações do MPC-HC?%n%nSe planeja instalar o MPC-HC novamente, você não precisa excluí-las.
-pt_BR.msg_SetupIsRunningWarning=A instalação do MPC-HC ja está sendo executada!
#if defined(sse_required)
pt_BR.msg_simd_sse=Esta versão do MPC-HC necessita uma CPU com suporte a extensões SSE.%n%nSua CPU não tem esse suporte.
#elif defined(sse2_required)
@@ -631,18 +727,17 @@ pt_BR.ViewChangelog=Ver registro de alterações
ro.langid=00001048
ro.comp_mpciconlib=Bibliotecă de pictograme
ro.comp_mpcresources=Traduceri
-ro.msg_DeleteSettings=Doriţi de asemenea să ştergeţi setările MPC-HC?%n%nDacă doriţi a reinstala MPC-HC, atunci nu este necesar să le ştergeţi.
-ro.msg_SetupIsRunningWarning=Instalatorul MPC-HC rulează deja!
+ro.msg_DeleteSettings=Doriți de asemenea să ștergeți stabilirile MPC-HC?%n%nDacă doriți să reinstalați MPC-HC, atunci nu este necesar să le ștergeți.
#if defined(sse_required)
-ro.msg_simd_sse=Această versiune de MPC-HC necesită un procesor cu suport pentru extensii SSE.%n%nProcesorul dumneavoastră nu are aceste capacităţi.
+ro.msg_simd_sse=Această versiune de MPC-HC necesită un procesor cu sprijin pentru extensii SSE.%n%nProcesorul dumneavoastră nu are aceste capacități.
#elif defined(sse2_required)
-ro.msg_simd_sse2=Această versiune de MPC-HC necesită un procesor cu suport pentru extensii SSE2.%n%nProcesorul dumneavoastră nu are aceste capacităţi.
+ro.msg_simd_sse2=Această versiune de MPC-HC necesită un procesor cu sprijin pentru extensii SSE2.%n%nProcesorul dumneavoastră nu are aceste capacități.
#endif
ro.run_DownloadToolbarImages=Vizitați pagina noastră Wiki pentru a descărca imagini pentru bara de instrumente
-ro.tsk_AllUsers=Pentru toţi utilizatorii
-ro.tsk_CurrentUser=Doar pentru utilizatorul curent
-ro.tsk_Other=Alte activităţi:
-ro.tsk_ResetSettings=Resetează setările
+ro.tsk_AllUsers=Pentru toți utilizatorii
+ro.tsk_CurrentUser=Doar pentru utilizatorul actual
+ro.tsk_Other=Alte activități:
+ro.tsk_ResetSettings=Restabilește stabilirile
ro.types_DefaultInstallation=Instalare implicită
ro.types_CustomInstallation=Instalare personalizată
ro.ViewChangelog=Vezi istoricul modificărilor
@@ -651,28 +746,26 @@ ro.ViewChangelog=Vezi istoricul modificărilor
ru.langid=00001049
ru.comp_mpciconlib=Библиотека значков
ru.comp_mpcresources=Локализации
-ru.msg_DeleteSettings=Удалить также настроенные параметры MPC-HC?%n%nЕсли запланирована переустановка MPC-HC, эти параметры не нужно удалять.
-ru.msg_SetupIsRunningWarning=Программа установки MPC-HC уже запущена!
+ru.msg_DeleteSettings=Желаете ли вы также удалить настройки MPC-HC?%n%nЕсли вы собираетесь установить MPC-HC повторно, их не нужно удалять.
#if defined(sse_required)
-ru.msg_simd_sse=Для этой сборки MPC-HC требуется процессор с поддержкой SSE-инструкций.%n%nВ данном процессоре они не поддерживаются.
+ru.msg_simd_sse=Для этой сборки MPC-HC необходим процессор с поддержкой SSE-инструкций.%n%nВаш процессор не соответствует данным требованиям.
#elif defined(sse2_required)
-ru.msg_simd_sse2=Для этой сборки MPC-HC требуется процессор с поддержкой SSE2-инструкций.%n%nВ данном процессоре они не поддерживаются.
+ru.msg_simd_sse2=Для этой сборки MPC-HC необходим процессор с поддержкой SSE2-инструкций.%n%nВаш процессор не соответствует данным требованиям.
#endif
-ru.run_DownloadToolbarImages=Посетите нашу Вики, чтобы скачать темы для панели управления
-ru.tsk_AllUsers=Для всех пользователей данного компьютера
+ru.run_DownloadToolbarImages=Посетить нашу вики для загрузии темы панели инструментов
+ru.tsk_AllUsers=Для всех пользователей
ru.tsk_CurrentUser=Только для текущего пользователя
ru.tsk_Other=Другие задачи:
-ru.tsk_ResetSettings=Восстановить параметры по умолчанию
+ru.tsk_ResetSettings=Восстановить настройки по умолчанию
ru.types_DefaultInstallation=Установка по умолчанию
ru.types_CustomInstallation=Выборочная установка
-ru.ViewChangelog=Просмотреть журнал изменений
+ru.ViewChangelog=Посмотреть список изменений
; Slovak
sk.langid=00001051
sk.comp_mpciconlib=Knižnica ikon
sk.comp_mpcresources=Preklady
sk.msg_DeleteSettings=Chcete vymazať aj nastavenia programu MPC-HC?%n%nAk plánujete opätovnú inštaláciu programu MPC-HC, tak nie je potrebné ich vymazávať.
-sk.msg_SetupIsRunningWarning=Inštalácia programu MPC-HC je už spustená!
#if defined(sse_required)
sk.msg_simd_sse=Toto zostavenie MPC-HC vyžaduje procesor s podporou inštrukcií SSE.%n%nVáš procesor ich nepodporuje.
#elif defined(sse2_required)
@@ -692,7 +785,6 @@ sl.langid=00001060
sl.comp_mpciconlib=Knjižnica ikon
sl.comp_mpcresources=Prevodi
sl.msg_DeleteSettings=Želite izbrisati nastavitve MPC-HC?%n%nČe nameravate spet namestiti MPC-HC, potem vam jih ni potrebno izbrisati.
-sl.msg_SetupIsRunningWarning=Namestitev MPC-HC je že zagnana!
#if defined(sse_required)
sl.msg_simd_sse=Ta različica MPC-HC zahteva procesor s podporo SSE razširitvam.%n%nVaš procesor nima teh zmožnosti.
#elif defined(sse2_required)
@@ -707,12 +799,30 @@ sl.types_DefaultInstallation=Privzeta namestitev
sl.types_CustomInstallation=Namestitev po meri
sl.ViewChangelog=Poglej dnevnik sprememb
+; Serbian (Cyrillic)
+sr.langid=00003098
+sr.comp_mpciconlib=Библиотека са иконама
+sr.comp_mpcresources=Преводи
+sr.msg_DeleteSettings=Желите ли да избришете и поставке MPC-HC-а?%n%nНе морате их брисати ако планирате поново да инсталирате MPC-HC.
+#if defined(sse_required)
+sr.msg_simd_sse=Ова верзија MPC-HC-а захтева процесор са подршком за SSE проширења.%n%nВаш процесор нема те могућности.
+#elif defined(sse2_required)
+sr.msg_simd_sse2=За ову верзију MPC-HC-а је потребан процесор са подршком за SSE2 инструкције.%n%nВаш процесор не испуњава тај захтев.
+#endif
+sr.run_DownloadToolbarImages=Посети наш вики ради преузимања тема траке са алаткама
+sr.tsk_AllUsers=За све кориснике
+sr.tsk_CurrentUser=Само за тренутног корисника
+sr.tsk_Other=Други задаци:
+sr.tsk_ResetSettings=Врати подразумеване поставке
+sr.types_DefaultInstallation=Уобичајена инсталација
+sr.types_CustomInstallation=Прилагођена инсталација
+sr.ViewChangelog=Погледај евиденцију промена
+
; Swedish
sv.langid=00001053
sv.comp_mpciconlib=Ikonbibliotek
sv.comp_mpcresources=Översättningar
sv.msg_DeleteSettings=Vill du också ta bort inställningarna för MPC-HC?%n%nOm du planerar att installera MPC-HC igen så behöver du inte ta bort dem.
-sv.msg_SetupIsRunningWarning=Konfigurering av MPC-HC pågår redan!
#if defined(sse_required)
sv.msg_simd_sse=Denna version av MPC-HC kräver en processor med stöd för SSE.%n%nDin processor saknar detta stöd.
#elif defined(sse2_required)
@@ -732,7 +842,6 @@ th_TH.langid=00001054
th_TH.comp_mpciconlib=คลังไอคอน
th_TH.comp_mpcresources=การแปลภาษา
th_TH.msg_DeleteSettings=คุณต้องการลบการตั้งค่า MPC-HC ด้วยหรือไม่?%n%nหากคุณวางแผนจะติดตั้ง MPC-HC อีกครั้ง คุณไม่จำเป็นต้องลบมันออก
-th_TH.msg_SetupIsRunningWarning=การติดตั้ง MPC-HC กำลังดำเนินการอยู่!
#if defined(sse_required)
th_TH.msg_simd_sse=MPC-HC รุ่นนี้ ต้องการ CPU ที่สนับสนุนส่วนเสริม SSE%n%nCPU ของคุณไม่มีความสามารถนั้น
#elif defined(sse2_required)
@@ -752,11 +861,10 @@ tr.langid=00001055
tr.comp_mpciconlib=Simge Kütüphanesi
tr.comp_mpcresources=Çeviriler
tr.msg_DeleteSettings=MPC-HC ayarlarını da silmek istiyor musunuz?%n%nMPC-HC 'yi tekrar yüklemeyi planlıyorsanız, bu ayarları silmemenizi öneririz.
-tr.msg_SetupIsRunningWarning=MPC-HC kurulumu zaten çalışıyor!
#if defined(sse_required)
-tr.msg_simd_sse=Bu MPC-HC sürümü, SSE eklentisi destekleyen bir işlemci gerektirmektedir.%n%nİşlemciniz bu özelliği desteklemiyor.
+tr.msg_simd_sse=Bu MPC-HC sürümü, SSE eklentisi destekleyen bir işlemci gerektirmektedir.%n%nİşlemciniz malesef bu özelliği desteklemiyor.
#elif defined(sse2_required)
-tr.msg_simd_sse2=Bu MPC-HC sürümü, SSE2 eklentisi destekleyen bir işlemci gerektirmektedir.%n%nİşlemciniz bu özelliği desteklemiyor.
+tr.msg_simd_sse2=Bu MPC-HC sürümü, SSE2 eklentisi destekleyen bir işlemci gerektirmektedir.%n%nİşlemciniz malesef bu özelliği desteklemiyor.
#endif
tr.run_DownloadToolbarImages=Araç çubuğu simgelerini indirmek için Wiki sayfamızı ziyaret edebilirsiniz
tr.tsk_AllUsers=Tüm kullanıcılar için
@@ -772,7 +880,6 @@ tt.langid=00001092
tt.comp_mpciconlib=Билгечекләр китапханәсе
tt.comp_mpcresources=Телләштерү
tt.msg_DeleteSettings=Шулай ук көйләнгән MPC-HC шартларын да бетерергәме?%n%nӘгәр ниятләнгән киредән MPC-HC урнаштыру булса, бу шартларны бетерергә кирәк түгел.
-tt.msg_SetupIsRunningWarning=MPC-HC урнаштыру программасы инде кабызылган!
#if defined(sse_required)
tt.msg_simd_sse=Бу MPC-HC бөрмәсе өчен SSE-кагыйдәләрен кулланган процессор кирәк.%n%nӘлеге процессорда алар кулланылмый.
#elif defined(sse2_required)
@@ -792,7 +899,6 @@ uk.langid=00001058
uk.comp_mpciconlib=Бібліотека іконок
uk.comp_mpcresources=Локалізації
uk.msg_DeleteSettings=Чи хочете ви видалити налаштування MPC-HC?%n%nЯкщо ви плануєте просто повторно встановити MPC-HC, то вам не потрібно їх видаляти.
-uk.msg_SetupIsRunningWarning=Встановлення MPC-HC вже запущено!
#if defined(sse_required)
uk.msg_simd_sse=Для використання даної версії MPC-HC необхідно, щоб ваш процесор підтримував SSE розширення.%n%nАле ваш процесор не підтримує їх.
#elif defined(sse2_required)
@@ -812,7 +918,6 @@ vi.langid=00001066
vi.comp_mpciconlib=Thư viện biểu tượng
vi.comp_mpcresources=Các gói ngôn ngữ
vi.msg_DeleteSettings=Bạn cũng muốn xóa các thiết lập của MPC-HC?%n%nNếu bạn dự định cài đặt lại MPC-HC thì bạn không cần phải xóa chúng.
-vi.msg_SetupIsRunningWarning=MPC-HC đang được cài đặt!
#if defined(sse_required)
vi.msg_simd_sse=Phiên bản MPC-HC này yêu cầu CPU có hỗ trợ phần mở rộng SSE.%n%nCPU của bạn không đáp ứng được yêu cầu này.
#elif defined(sse2_required)
@@ -832,7 +937,6 @@ zh_CN.langid=00002052
zh_CN.comp_mpciconlib=图标库
zh_CN.comp_mpcresources=翻译
zh_CN.msg_DeleteSettings=是否同时删除 MPC-HC 设置?%n%n如果您打算再次安装 MPC-HC 则不必删除。
-zh_CN.msg_SetupIsRunningWarning=MPC-HC 安装程序已在运行中!
#if defined(sse_required)
zh_CN.msg_simd_sse=此 MPC-HC 编译版本要求 CPU 支持 SSE 指令集。%n%n您的 CPU 不具备该能力。
#elif defined(sse2_required)
@@ -843,8 +947,8 @@ zh_CN.tsk_AllUsers=为所有用户安装
zh_CN.tsk_CurrentUser=仅为当前用户安装
zh_CN.tsk_Other=其他任务:
zh_CN.tsk_ResetSettings=重置设置
-zh_CN.types_DefaultInstallation=默认安装
-zh_CN.types_CustomInstallation=自定义安装
+zh_CN.types_DefaultInstallation=默认安装方案
+zh_CN.types_CustomInstallation=自定义安装方案
zh_CN.ViewChangelog=查看更新日志
; Chinese (Taiwan)
@@ -852,13 +956,12 @@ zh_TW.langid=00001028
zh_TW.comp_mpciconlib=圖示庫
zh_TW.comp_mpcresources=翻譯
zh_TW.msg_DeleteSettings=您是否也要刪除 MPC-HC 設定?%n%n如果您打算再次安裝 MPC-HC 則無需刪除。
-zh_TW.msg_SetupIsRunningWarning=已在執行 MPC-HC 安裝程式!
#if defined(sse_required)
zh_TW.msg_simd_sse=此版的 MPC-HC 需要有支援 SSE 延伸指令集的 CPU。%n%n您的 CPU 並未相容這些功能。
#elif defined(sse2_required)
zh_TW.msg_simd_sse2=此版的 MPC-HC 須要有支援 SSE2 延伸指令集的 CPU。%n%n您的 CPU 並未相容這些功能。
#endif
-zh_TW.run_DownloadToolbarImages=Visit our Wiki page to download toolbar images
+zh_TW.run_DownloadToolbarImages=參觀我們的 Wiki 頁面以下載工具列圖示
zh_TW.tsk_AllUsers=安裝給所有使用者
zh_TW.tsk_CurrentUser=僅安裝給目前使用者
zh_TW.tsk_Other=其它工作:
diff --git a/distrib/mpc-hc_setup.iss b/distrib/mpc-hc_setup.iss
index 8958ae504..85cf877dc 100644
--- a/distrib/mpc-hc_setup.iss
+++ b/distrib/mpc-hc_setup.iss
@@ -1,4 +1,4 @@
-; (C) 2009-2014 see Authors.txt
+; (C) 2009-2017 see Authors.txt
;
; This file is part of MPC-HC.
;
@@ -20,8 +20,8 @@
; Inno Setup Unicode: http://www.jrsoftware.org/isdl.php
-#if VER < EncodeVer(5,5,5)
- #error Update your Inno Setup version (5.5.5 or newer)
+#if VER < EncodeVer(5,5,9)
+ #error Update your Inno Setup version (5.5.9 or newer)
#endif
#ifndef UNICODE
@@ -40,7 +40,7 @@
#define localize = "true"
#endif
#endif
-#define sse_required
+#define sse2_required
; From now on you shouldn't need to change anything
@@ -80,6 +80,8 @@
#define bindir = bindir + " Lite"
#endif
+#define crashreporter_dir = AddBackslash(bindir) + "CrashReporter"
+
#ifnexist AddBackslash(bindir) + mpchc_exe
#error Compile MPC-HC first
#endif
@@ -152,7 +154,7 @@ CloseApplications = true
#ifexist "..\signinfo.txt"
SignTool = MySignTool
#endif
-
+SetupMutex = 'mpchc_setup_mutex'
[Languages]
Name: en; MessagesFile: compiler:Default.isl
@@ -161,22 +163,27 @@ Name: en; MessagesFile: compiler:Default.isl
Name: ar; MessagesFile: Languages\Arabic.isl
Name: be; MessagesFile: Languages\Belarusian.isl
Name: bn; MessagesFile: Languages\Bengali.islu
+Name: bs_BA; MessagesFile: Languages\Bosnian.isl
Name: ca; MessagesFile: compiler:Languages\Catalan.isl
Name: cs; MessagesFile: compiler:Languages\Czech.isl
+Name: da; MessagesFile: compiler:Languages\Danish.isl
Name: de; MessagesFile: compiler:Languages\German.isl
Name: el; MessagesFile: compiler:Languages\Greek.isl
Name: en_GB; MessagesFile: Languages\EnglishBritish.isl
Name: es; MessagesFile: compiler:Languages\Spanish.isl
Name: eu; MessagesFile: Languages\Basque.isl
+Name: fi; MessagesFile: compiler:Languages\Finnish.isl
Name: fr; MessagesFile: compiler:Languages\French.isl
Name: gl; MessagesFile: Languages\Galician.isl
Name: he; MessagesFile: compiler:Languages\Hebrew.isl
Name: hr; MessagesFile: Languages\Croatian.isl
Name: hu; MessagesFile: compiler:Languages\Hungarian.isl
-Name: hy; MessagesFile: Languages\Armenian.islu
+Name: hy; MessagesFile: compiler:Languages\Armenian.islu
+Name: id; MessagesFile: Languages\Indonesian.isl
Name: it; MessagesFile: compiler:Languages\Italian.isl
Name: ja; MessagesFile: compiler:Languages\Japanese.isl
Name: ko; MessagesFile: Languages\Korean.isl
+Name: lt; MessagesFile: Languages\Lithuanian.isl
Name: ms_MY; MessagesFile: Languages\Malaysian.isl
Name: nl; MessagesFile: compiler:Languages\Dutch.isl
Name: pl; MessagesFile: compiler:Languages\Polish.isl
@@ -185,6 +192,7 @@ Name: ro; MessagesFile: Languages\Romanian.isl
Name: ru; MessagesFile: compiler:Languages\Russian.isl
Name: sk; MessagesFile: Languages\Slovak.isl
Name: sl; MessagesFile: compiler:Languages\Slovenian.isl
+Name: sr; MessagesFile: compiler:Languages\SerbianCyrillic.isl
Name: sv; MessagesFile: Languages\Swedish.isl
Name: th_TH; MessagesFile: Languages\Thai.isl
Name: tt; MessagesFile: Languages\Tatar.isl
@@ -243,6 +251,12 @@ Source: ..\docs\Authors.txt; DestDir: {app}; Components: main
Source: ..\docs\Changelog.txt; DestDir: {app}; Components: main; Flags: ignoreversion
Source: ..\docs\Readme.txt; DestDir: {app}; Components: main; Flags: ignoreversion
Source: ..\src\mpc-hc\res\shaders\external\*.hlsl; DestDir: {app}\Shaders; Components: main; Flags: ignoreversion
+#ifexist AddBackslash(crashreporter_dir) + "crashrpt.dll"
+Source: {#crashreporter_dir}\crashrpt.dll; DestDir: {app}\CrashReporter; Components: main; Flags: ignoreversion
+Source: {#crashreporter_dir}\dbghelp.dll; DestDir: {app}\CrashReporter; Components: main; Flags: ignoreversion
+Source: {#crashreporter_dir}\sendrpt.exe; DestDir: {app}\CrashReporter; Components: main; Flags: ignoreversion
+Source: {#crashreporter_dir}\CrashReporterDialog.dll; DestDir: {app}\CrashReporter; Components: main; Flags: ignoreversion
+#endif
[Icons]
@@ -353,8 +367,6 @@ function IsProcessorFeaturePresent(Feature: Integer): Boolean;
external 'IsProcessorFeaturePresent@kernel32.dll stdcall';
#endif
-const installer_mutex = 'mpchc_setup_mutex';
-
function GetInstallFolder(Default: String): String;
var
@@ -424,6 +436,7 @@ end;
procedure CleanUpSettingsAndFiles();
begin
DeleteFile(ExpandConstant('{app}\{#mpchc_ini}'));
+ DelTree(ExpandConstant('{userappdata}\MPC-HC\ShaderCache'), True, True, True);
DeleteFile(ExpandConstant('{userappdata}\MPC-HC\default.mpcpl'));
RemoveDir(ExpandConstant('{userappdata}\MPC-HC'));
RegDeleteKeyIncludingSubkeys(HKCU, 'Software\MPC-HC\Filters');
@@ -445,6 +458,12 @@ begin
end;
+procedure InitializeWizard();
+begin
+ WizardForm.LicenseAcceptedRadio.Checked := True;
+end;
+
+
procedure CurStepChanged(CurStep: TSetupStep);
var
iLanguage: Integer;
@@ -486,14 +505,7 @@ end;
function InitializeSetup(): Boolean;
begin
- // Create a mutex for the installer and if it's already running display a message and stop installation
- if CheckForMutexes(installer_mutex) and not WizardSilent() then begin
- SuppressibleMsgBox(CustomMessage('msg_SetupIsRunningWarning'), mbError, MB_OK, MB_OK);
- Result := False;
- end
- else begin
Result := True;
- CreateMutex(installer_mutex);
#if defined(sse2_required)
if not Is_SSE2_Supported() then begin
@@ -507,18 +519,4 @@ begin
end;
#endif
- end;
-end;
-
-
-function InitializeUninstall(): Boolean;
-begin
- if CheckForMutexes(installer_mutex) then begin
- SuppressibleMsgBox(CustomMessage('msg_SetupIsRunningWarning'), mbError, MB_OK, MB_OK);
- Result := False;
- end
- else begin
- Result := True;
- CreateMutex(installer_mutex);
- end;
end;
diff --git a/docs/Authors.txt b/docs/Authors.txt
index 3d267227c..344d62e0f 100644
--- a/docs/Authors.txt
+++ b/docs/Authors.txt
@@ -1,19 +1,17 @@
-Active (sorted by name):
-------------------------
-alexmarsev <alexmarsev@users.sourceforge.net> Code
-Armada <armada651@users.sourceforge.net> Code
+Active (sorted by name)
+-----------------------
Goran 'vBm' Džaferi <thevbm@users.sourceforge.net> New website, Trac moderator, IRC
JellyFrog - Server and Trac admin, Swedish
kasper93 <kasper93@users.sourceforge.net> Trac moderator, Polish, Code
-nevcairiel <nevcairiel@users.sourceforge.net> Code, LAVFilters maintainer
-Underground78 <underground78@users.sourceforge.net> Code, French, Project manager
-XhmikosR <xhmikosr@users.sourceforge.net> Various stuff, Project manager
+XhmikosR <xhmikosr@gmail.com> Various stuff, Project manager
-Inactive:
----------
+Inactive
+--------
_xxl <drevil_xxl@users.sourceforge.net> FFmpeg
Alexander Wild <alexwild@users.sourceforge.net> Code, German
+alexmarsev <alexmarsev@users.sourceforge.net> Code
+Armada <armada651@users.sourceforge.net> Code
Arto Jarvinen <ar-jar@users.sourceforge.net> Code
Attila T. Afra <attila.afra@gmail.com> Code
Beliyaal <beliyaal@users.sourceforge.net> Code
@@ -28,21 +26,23 @@ KindDragon <kinddragon@users.sourceforge.net> Code
Martin Panayotov <mvpsoft@users.sourceforge.net> Old website
MatMaul <matmaul@users.sourceforge.net> Code
namaiki <namaiki@users.sourceforge.net> Trac moderator
+nevcairiel <nevcairiel@users.sourceforge.net> Code, LAVFilters maintainer
spec-chum <spec-chum@users.sourceforge.net> Code
tetsuo55 <tetsuo55@users.sourceforge.net> Project manager
Tomas Sen <tomasen@users.sourceforge.net> Code
+Underground78 <underground78@users.sourceforge.net> Code, French, Project manager
v0lt <v0lt@users.sourceforge.net> Code, Russian
Vodyannikov Aleksandr <aleksoid@users.sourceforge.net> Code, Russian
xpc1000 <xpc1000@users.sourceforge.net> Code
-Translators:
-------------
+Translators
+-----------
Translations are now handled using Transifex, a web-based translation platform. An up-to-date list
-of translators involved for each language can be found on https://www.transifex.com/projects/p/mpc-hc/.
+of translators involved for each language can be found on https://www.transifex.com/mpc-hc/mpc-hc/.
-Translators (pre-Transifex era):
-------------
+Translators (pre-Transifex era)
+-------------------------------
Armenian hrant77 <hrant77@users.sourceforge.net>
Basque Xabier Aramendi <azpidatziak@users.sourceforge.net>
Belarusian Mister-sh <mister-sh@users.sourceforge.net>
@@ -77,14 +77,13 @@ Ukrainian arestarh <arestarh1986@users.sourceforge.
Ukrainian Ihor Bobalo <ibobalo@users.sourceforge.net> (http://www.eleks.com)
-Contributors:
--------------
-Alexx999, foxx1337, heksesang, judelaw, m0viefreak, madshi, mtrz, nielsm,
-skaarj1, VSFilterMod Team, X-Dron
+Contributors
+------------
+Alexx999, foxx1337, heksesang, judelaw, m0viefreak, madshi, mtrz, nielsm, skaarj1, VSFilterMod Team, X-Dron
https://github.com/mpc-hc/mpc-hc/graphs/contributors
-http://www.openhub.net/p/mpc-hc/contributors?query=&sort=commits
+https://www.openhub.net/p/mpc-hc/contributors?query=&sort=commits
If you think you should be listed in this document and we don't do it already, please, contact us.
diff --git a/docs/Changelog.txt b/docs/Changelog.txt
index dd62361b1..beff86273 100644
--- a/docs/Changelog.txt
+++ b/docs/Changelog.txt
@@ -8,82 +8,14 @@ Legend:
! Fixed
-1.7.7 - 05 October 2014
-=======================
-+ Accept loading more than one subtitle file at a time using the "Load subtitle" dialog or drag-and-drop
-+ Add advanced settings page
-+ Add Arabic and Thai translations
-+ Completely reworked subtitle queue:
- - The queue should be quite faster than the older one for a similar number of buffered subpictures.
- It should also work much better when the number of subpictures becomes important
- - Subtitle animation can now be disabled even when using no buffering
- - Add the ability to choose at which state (in percentage of the full animation) an animated subtitle
- will be rendered when the animation is turned off
- - Add the ability to control the rate of the animation (in percentage of the movie frame rate)
- - Add the ability to control whether the subtitle queue is allowed to drop some subpictures in case
- subtitle rendering is too slow
-+ Add option to set jpg quality when saving images (default quality is increased from 75% to 90%)
-+ Ticket #353, Allow to control minimum file duration for remember position feature
-+ Ticket #1287, Add after playback command to turn off the monitor.
-+ Ticket #1407/#2425, Add an advanced option to control the number of recent files. Those files are shown
- in the "Recent Files" menu. It is also the files for which a position is potentially saved
-+ Ticket #1531, Show cover-art while playing audio files
-+ Ticket #2194, Show drive label when playing DVD
-+ Ticket #3393, Allow to disable remember position feature for audio files
-+ Ticket #4345, Text subtitles: Add a mode that automatically chooses the rendering target based on the
- subtitle type, ASS/SSA subtitles will be rendered on the video frame while other text subtitles will
- be rendered on the full window
-+ Ticket #4690, Internal filters: Support v210/v410 raw video formats
-* Text subtitles: Faster subtitle parsing (up to 4 times faster for ASS/SSA subtitles)
-* Text subtitles: Improved subtitle renderer for faster rendering of complex subtitle scripts (often twice faster or more)
-* Text subtitles: Much faster subtitle opening in the Subresync bar
-* Ticket #325, Move after playback commands to options and add an option to close and restore logo.
-* Ticket #1663, Improved command line help dialog
-* Ticket #2834, Increase limit on subtitles override placement feature.
-* Ticket #4428, Improve the clarity of the error message when opening a subtitle file fails
-* Ticket #4687, Reworked "Formats" option page. It is now possible to clear all associations
-* Ticket #4865, Subtitles option page: Clarify the "Delay interval" setting
-* Updated Little CMS to v2.6 (git 9c075b3)
-* Updated Unrar to v5.1.7
-* Updated MediaInfoLib to v0.7.70
-* Updated ZenLib to v0.4.29 r481
-* Updated LAV Filters to stable version 0.63.0:
- - LAV Video: HEVC decoding is up to 100% faster
- - LAV Video: Fix potential artifacts when decoding x264 lossless streams
- - LAV Splitter: Support for playing AES encrypted HLS streams
- - LAV Splitter: Advanced Subtitle selection allows selecting subtitles by a string match on the stream title
- - Ticket #3608, LAV Splitter: Fix stuttering with some (m2)ts files
- - Ticket #4322, LAV Audio: Improve the estimated duration for some MP3 files
- - Ticket #4539, LAV Video: Fix a crash with DVD subtitles on 64-bit builds when using software decoding
- - Ticket #4639, LAV Splitter: Fix incorrect colors for VobSub tracks in MP4
- - Ticket #4783, LAV Video: Experimental support for hardware (CUVID and DXVA2) assisted decoding of HEVC streams (disabled by default)
- - Ticket #4879, LAV Audio and LAV Splitter: Fix TrueHD streams with a Dolby Atmos sub-stream
- The full changelog can be found at https://raw.githubusercontent.com/Nevcairiel/LAVFilters/0.63/CHANGELOG.txt
-* Updated Armenian, Basque, Belarusian, Bengali, British English, Catalan, Chinese (Simplified and Traditional),
- Croatian, Czech, Dutch, French, Galician, German, Greek, Hebrew, Hungarian, Italian, Japanese, Korean, Malay,
- Polish, Portuguese (Brazil), Romanian, Russian, Slovak, Slovenian, Spanish, Swedish, Tatar, Turkish, Ukrainian
- and Vietnamese translations
-! Work around corrupted display with NVIDIA drivers v344.11 when using EVR, EVR-CP or Sync renderers
-! "Load subtitle" dialog: Fix the file filters on Windows Vista+
-! "Resources" tab: The resource saved wasn't always matching the selection
-! Ticket #3930, Fix a possible crash with embedded subtitles when the subtitle queue is disabled
-! Ticket #4207, Taskbar preview wasn't scaled correctly
-! Ticket #4504, ASS/SSA subtitles: Support floating point values in drawing commands
-! Ticket #4505, Embedded text subtitles: Fix a possible crash related to the Subresync bar
-! Ticket #4536, ASS/SSA subtitles: Fix the parsing of \fs tags when the value was negative
-! Ticket #4665, Ensure that the icon shown in the status bar and the property dialog
- matches the icon currently associated to the format
-! Ticket #4678/#4856, Use internal filters for GIF format
-! Ticket #4684, Clicking on the some parts of the volume slider had no effect
-! Ticket #4707, EVR-CP: Screenshots were corrupted when "Force 10-bit input" was used
-! Ticket #4730, MediaInfo: Ensure the MediaInfo tab gives the same information as the official GUI
-! Ticket #4744, Some subtitles could cause a crash or produce artifacts
-! Ticket #4752, Monitors connected to secondary graphic card were not detected
-! Ticket #4758, Adjust width of the groupbox headers to avoid empty space
-! Ticket #4778, Fix optical drive detection when its letter is A or B.
-! Ticket #4782, Backward frame step led to jumping to the wrong position in certain situations
-! Ticket #4825, Tracks matching a preferred language weren't always selected correctly
-! Ticket #4827, Initial window size could be wrong for anamorphic video
-! Ticket #4831, Fix a rare issue with animated subtitles starting at timecode 0
-! Ticket #4857, The timings of some subtitles could be wrong when using Sync Renderer
-! Ticket #4863, MPC-HC could crash when opening a file through the QuickTime engine
+1.7.12 - 16 July 2017
+=====================
+* Switched from mhook to MinHook since it's more actively maintained
+* Require a CPU processor with SSE2 instructions
+* Ticket #5865, Add context menu option to copy subtitle URL
+* Updated LAV Filters to v0.70.1
+* Updated Little CMS to v2.8 (d41071e)
+* Updated MediaInfoLib to v0.7.97
+* Updated ZenLib to v0.4.35
+* Updated Unrar to v5.5.6
+! Scale MediaInfo properties tab text properly on high DPI
diff --git a/docs/Changelog_old.txt b/docs/Changelog_old.txt
index 2a6a3a129..decf554ee 100644
--- a/docs/Changelog_old.txt
+++ b/docs/Changelog_old.txt
@@ -4,6 +4,364 @@ Legend:
! Fixed
+1.7.11 - 06 March 2017
+======================
++ Ability to control playback repeat mode
++ Add a cache to avoid recompiling pixel shaders when possible
++ Add SVG support for custom toolbars
++ Add Bosnian translation
++ Option to set audio delay values for each display mode
+* Updated Little CMS to v2.8 (1272acb)
+* Updated tinyxml2 to v4.0.1
+* Updated MediaInfoLib to v0.7.92
+* Updated ZenLib to v0.4.34
+* Updated Unrar to v5.4.5
+* Updated zlib to v1.2.11
+* Updated LAV Filters to v0.69:
+ - LAV Splitter: Support HTTPS protocol
+ - LAV Splitter: Switch back to an improved version of the old ASF demuxer
+ - LAV Splitter: Support demuxing H264 MVC
+ - Ticket #5815, LAV Splitter: Improve the detection of the forced flag for some MP4 subtitle tracks
+ - LAV Video Decoder: Add experimental support for VP9 DXVA2 decoding (disabled by default)
+ - LAV Video Decoder: Enable hardware decoding for HEVC and 4K/UHD by default
+ - LAV Video Decoder: Add a basic H264 MVC decoder based on Intel MediaSDK.
+ Note that for now the Intel MediaSDK library is not distributed with MPC-HC.
+ If you want to use this new decoder, you have to download the library
+ - 32-bit: http://files.1f0.de/lavf/plugins/libmfxsw32-v1.7z
+ - 64-bit: http://files.1f0.de/lavf/plugins/libmfxsw64-v1.7z
+ and decompress it to the LAVFilters(64) folder.
+ - LAV Video Decoder: Offer Weston Three Field Deinterlacing (w3fdif) as an alternative to YADIF
+ - Ticket #3974, LAV Video Decoder: Fix DXVA decoding of interlaced H.264 videos on some Intel GPU
+ - Ticket #5666, LAV Video Decoder: YADIF deinterlacing sometimes caused black screen in DVD menus
+ - LAV Audio Decoder: Fix a possible crash when using bitstreaming
+* Old DirectX 7 renderers have been removed. Settings will be updated automatically to use the corresponding VMR-9 renderers.
+ If you really want to use a renderer similar to VMR-7 (windowed), use Overlay mixer or the "system default" renderer
+* Make Video Renderer statistics scalable to window size and unify graph look for EVR Sync and other renderers
+* "Replace currently loaded subtitles" option no longer removes subtitles provided by splitter
+* Change Pan&Scan logic:
+ - PnS Rotate Y- now flips horizontally
+ - PnS Rotate X- now flips vertically
+ - PnS Rotate Z- now rotates 90 degrees (counter-clockwise)
+ - The postive rotate functions still do 1 degree rotation around their axis
+* Hide the infobar in normal view preset. This makes it equal to default view
+* Ticket #2022/#4779: Rewrite subtitles downloading framework
+ - Support for multiple subtitle providers including the default OpenSubtitles as well as
+ podnapisi, titlovi, SubDB, ysubs and Napisy24 which can be enabled in Options (Subtitles -> Misc)
+ - Ticket #5193, Ability to upload subtitles to OpenSubtitles and SubDB
+ - Ability to login into OpenSubtitles
+ - Ticket #5406, Ability to filter subtitle list by selected languages
+ - Option to automatically search and download subtitles at the beginning of playback without user interaction
+ - Prioritize subtitles for hearing impaired where indicated
+* Ticket #5472, Append language code when saving the subtitles file
+* Updated Arabic, Armenian, Basque, Belarusian, Bengali, British English, Catalan, Chinese (Simplified and Traditional),
+ Croatian, Czech, Danish, Dutch, Finnish, French, Galician, German, Greek, Hebrew, Hungarian, Indonesian, Italian,
+ Japanese, Korean, Lithuanian, Malay, Polish, Portuguese (Brazil), Punjabi, Romanian, Russian, Serbian, Slovak,
+ Slovenian, Swedish, Spanish, Tatar, Thai, Turkish, Ukrainian and Vietnamese translations
+! Window position and/or size could be wrong when exiting fullscreen mode for the first time and
+ "Launch files in fullscreen" option is enabled
+! Ticket #2202, Automatically rotate MP4/MOV/FLV files when the rotation info is available
+! Ticket #5557, Show the correct language name for Serbian subtitles. They used to show as Croatian
+! Ticket #5748, Track selection menus did not work when using DVB capture
+! Ticket #5828, Update seekbar position when generating thumbnails
+! Ticket #5829, Creating thumbnails while the video was stopped left the player in an undefined state. The stopped state
+ is now properly restored after creating the thumbnails
+
+
+1.7.10 - 14 November 2015
+=========================
++ Add Indonesian, Lithuanian and Punjabi translations
++ Ticket #5411, Add an option to disable the preview in the web interface. This option is
+ disabled by default since it must be used only on a properly secured private network
+* Completely new Internal Audio Renderer:
+ - Uses sanear project as backend
+ - Requires Windows Vista or newer
+ - Outputs sound through WASAPI (shared or exclusive)
+ - Employs automatic channel downmixing
+ - Provides stereo crossfeed processing option (for headphones)
+ - Tries to preserve signal pitch when playing at custom rate (time stretching)
+ - Supports bitstreaming
+ - Fixes tickets #203, #1961, #2731, #3653, #4047, #5267
+* Ticket #3356, Initial support for per-monitor DPI scaling
+* Use internal audio decoder by default for Opus decoding
+* Ticket #5450/#5479, Improved crash reporting dialog for better stability and user experience
+* Ticket #5472, Make it easier to input value to the "Audio time shift" field in options
+* OGM stream switching hotkeys were unified with generic ones
+* Updated MediaInfoLib to v0.7.75
+* Updated Little CMS to v2.7 (git 07da965)
+* Updated LAV Filters to stable version 0.66.0:
+ - LAV Splitter: New ASF/WMV demuxer
+ - Ticket #5548, LAV Splitter: Fix some rare deadlocks at startup
+ - LAV Video Decoder: Allow hardware decoding of UHD video with AMD cards
+* Updated Arabic, Armenian, Basque, Bengali, British English, Catalan, Chinese (Simplified and Traditional),
+ Croatian, Czech, Danish, Dutch, French, Galician, German, Greek, Hungarian, Japanese, Korean, Malay,
+ Polish, Portuguese (Brazil), Romanian, Russian, Slovenian, Slovak, Spanish, Swedish, Thai, Turkish,
+ Ukrainian and Vietnamese translations
+! Fix a rare crash when exiting DVB mode
+! QuickTime: Fix a crash when using system default renderer
+! Fix "snap to desktop edge" and "autofit zoom" on Windows 10
+! Fix reliability and stability of the D3D Fullscreen mode
+! Ticket #4086, Logitech LCD: Correctly initialize the volume at start-up
+! Ticket #5248, Adjust mouse behavior for Windows 10
+! Ticket #5454, Deleting an item from the playlist sometimes did not work when shuffle mode was enabled
+! Ticket #5464, If the main window was minimized while the D3D Fullscreen window was displayed on another screen,
+ it was impossible to use the mouse buttons to play, pause, exit fullscreen, etc.
+! Ticket #5488, Suggested filename was wrong when saving subtitles in specific cases
+! Ticket #5496, Subtitle downloader dialog: the preferred languages were sometimes not displayed first
+! Ticket #5515, Blu-ray (PGS) subtitles were sometimes not displayed
+! Ticket #5519, SRT subtitles: Support parsing files with negative timecodes
+! Ticket #5573, /monitor command line was ignored when remember window position was enabled
+! Ticket #5573, The window could return to the wrong monitor when started fullscreen using the command line
+ `/monitor N /fullscreen` if "remember window size" was enabled and "remember window position" was disabled
+! Ticket #5643, Stream selection did not work when using external audio file in specific cases
+! Ticket #5647, Drag&Drop was not starting playback if source folder was read only
+
+
+1.7.9 - 01 June 2015
+====================
++ Internal Subtitle Renderer: Convert colorspace of subtitles to match video.
++ Append files to the playlist on drag&drop while holding "Control" key
++ Enable Press and Hold gesture to make easier access to context menu on touch devices
++ Add Danish translation
++ Add ability to disable every time after playback event for current session by selecting
+ "Do nothing" event in context menu.
++ Ticket #3051, Support DTS Music Disc
++ Ticket #5147, Add /randomize command-line switch for playlist randomization
++ Ticket #5334, Allow to enable high precision timer also when Subresync bar is hidden.
+ Right click on timer shows menu with options.
++ Ticket #5356, DVB: Support HEVC broadcasts
++ Ticket #5386, OSD: Add the ability to display the file name using a menu item and a hotkey ('N' by default)
+* Subtitle renderer: Better compatibility with ASS/SSA subtitle files that are slightly violating the specs
+* Rename "Display Stats" and "Reset Display Stats" features to "OSD: Display Renderer Statistics" and
+ "OSD: Reset Renderer Statistics" so that their meaning is clearer in the "Keys" option panel. Also
+ rename "Display Stats" to "Display Statistics" in the "Renderer Settings" menu
+* Ticket #5294, Use internal LAV Splitter for demuxing WTV files
+* Ticket #5336/#5380, Replace the minidump creation by Doctor Dump, a more advanced crash reporter.
+ The new crash reporter is able to send the report automatically after the user's approval and can
+ warn the user if the problem has already been fixed in a newer version. It should also be generally
+ more reliable than the old method
+* Ticket #5416, Rename "Remaining Time" feature to "Display Current Time" in the "Renderer Settings" menu
+ and to "OSD: Display Current Time" in the "Keys" option panel so that it describes the feature accurately
+* Updated Little CMS to v2.7 (git 6e33faa)
+* Updated Unrar to v5.2.7
+* Updated MediaInfoLib to v0.7.73
+* Updated ZenLib to v0.4.31
+* Updated SoundTouch to v1.9.0
+* Updated LAV Filters to v0.65.0.9:
+ - LAV Video Decoder: Faster DXVA decoding in copy-back mode (direct output mode)
+ - LAV Video Decoder: Support for HEVC Main10 DXVA2 decoding in copy-back mode
+ - LAV Audio Decoder: Support for native DTS-HD decoding using libdcadec
+ - Ticket #5299, LAV Video Decoder: Fix corrupted decoding of some HEVC files
+ - Ticket #5330, LAV Video Decoder: Improve DVD subtitles timeout in some cases
+ - Ticket #5333, LAV Splitter: Fix handling of some Blu-Ray playlist
+* Updated Basque, British English, Catalan, Chinese (Simplified), Croatian, Czech, Dutch, Finnish, French,
+ Galician, German, Greek, Hungarian, Italian, Japanese, Korean, Malay, Polish, Portuguese (Brazil), Romanian,
+ Russian, Serbian, Slovak, Slovenian, Spanish, Swedish, Thai, Turkish, Ukrainian and Vietnamese translations
+! EVR-CP/Sync renderers could produce wrong colors
+! Do not mirror the status bar and the time indicator when using an RTL layout
+! DVBSub: Fix a possible infinite loop when rendering corrupted subtitles
+! Subfolders were sometimes parsed multiple times when drag-and-dropping a folder
+! Haali Renderer: Fix XySubFilter support
+! Cover image were sometimes incorrectly displayed
+! Logitech LCD: MPC-HC crashed when the media duration was unknown
+! PGS subtitles: MPC-HC could crash when rendering broken subtitles
+! Playlist: Fix and improve the shuffle mode:
+ - Ticket #80, Playback stopped after playing the last playlist item even if not all tracks had been played
+ - Ticket #3028, If the playlist was cleared and then the items readded, pressing next caused a crash
+ - Ticket #3128, The first item to play was always the first one in the playlist
+ - Ticket #4442, Going to the previous file used the playlist order instead of the shuffled order
+ - Ticket #4616, No tracks will be repeated unless all tracks have been played at least once
+! Ticket #2167, Prevent the task bar buttons from being RTLed when Windows is configured to use RTL layout
+! Ticket #2516, VSFilter: Fix PGS/DVB subtitles with different size than video frame
+! Ticket #5028, Display OSD message for every time after playback event if once event is disabled
+! Ticket #5183, Fix a rare crash when processing after playback event
+! Ticket #5239, Fix a crash when specifying a non-existent monitor in the command line (/monitor)
+! Ticket #5241, Improve the handling of RTL layout for dockable bars (Playlist, Subresync, etc.)
+! Ticket #5247, "Information" panel was not showing new lines until window resize
+! Ticket #5259, The auto fit factor could not be modified unless auto fit was used as auto-zoom
+! Ticket #5262, The "Go to next/previous subtitle" feature did not work for some subtitles
+! Ticket #5274, Dockable bars: Improve reloading of saved state
+! Ticket #5280, The /nofocus command line option did nothing when starting MPC-HC
+! Ticket #5314, If an explicit start time was set (for example from the command line or a favorite),
+ the saved position wrongly overwrote the position of the previously opened file
+! Ticket #5324, Use more common "kb/s" instead of "Kb/s" as bitrate unit
+! Ticket #5326, Prevent the main window from stealing the mouse focus from the D3D fullscreen window
+ when using always on top. It could cause unintentional mouse clicks in the hidden main
+ window and prevented the mouse pointer from being correctly hidden
+! Ticket #5345, Fix opening of shortcuts pointing on directories
+! Ticket #5348, VobSub: The latest subtitle entry was sometimes not rendered
+! Ticket #5360, Fix: The "Turn off monitor" after playback event did not work
+! Ticket #5378, Fix the "DVD Menu Activate" hotkey
+! Ticket #5392, the Internal Subtitle Renderer did not work properly when the maximum texture resolution
+ was set to "Video" and the renderer was madVR
+! Ticket #5401, Remote commands (WinLIRC, uICE) were incorrectly bounded to actions
+! Ticket #5418, Fast seek (to key-frame) did not work when an external audio track was loaded
+
+
+1.7.8 - 25 January 2015
+=======================
++ DVB: Show current event time in the status bar
++ DVB: Add context menu to the navigation dialog
++ Add Finnish and Serbian translations
++ Ticket #907, Enable "Properties" dialog for DVD and DVB playback modes
++ Ticket #1091, Support MediaInfo analyse for DVD
++ Ticket #1494, Add tooltip in the "Organize Favorites" dialog with path of the item
++ Ticket #2438, Keep history of recently opened DVD directories
++ Ticket #3647, Internal LAV Video Decoder: Support Cinepack and QPEG in low-merit mode
++ Ticket #4941, Support embedded cover-art
+* DVB: Improve channel switching speed
+* The "Properties" dialog should open faster being that the MediaInfo analysis is now done asynchronously
+* Make double-click tolerance consistent with system settings
+* Ticket #4978, Execute "once" after playback event when playlist ends, regardless of the loop count
+* Ticket #4991, Text subtitles: "opaque box" outlines will now always be drawn even if the border width is set to 0.
+ The size of the text is independent of the border width so there is no reason not to draw that part
+* Ticket #5056, Position the text subtitles relative to the video frame by default
+* Updated MediaInfoLib to v0.7.71
+* Updated ZenLib to v0.4.29 r498
+* Updated SoundTouch to v1.8.0 r201
+* Updated Little CMS to v2.7 (git 8174681)
+* Updated Unrar to v5.2.3
+* Updated LAV Filters to v0.63.0.52:
+ - LAV Video Decoder: Fix a crash when the video height is not a multiple of 2
+ - Ticket #3144, LAV Splitter: Support librtmp parameters for RTMP streams
+ - Ticket #4407, LAV Video Decoder: Fix a rare crash when checking the compatibility with hardware decoding
+ - Ticket #5030, LAV Video Decoder: The video timestamps could be wrong in some cases when using H264 DXVA decoding.
+ This could lead to synchronization issue with the audio
+ - Ticket #5047, LAV Splitter: Fix missing tracks in (m2)ts files
+ - Ticket #5116, LAV Video Decoder: Fix aspect ratio for some MPEG2 streams
+* Updated Arabic, Armenian, Basque, Belarusian, Bengali, British English, Catalan, Chinese (Simplified and Traditional),
+ Croatian, Czech, Dutch, French, Galician, German, Greek, Hebrew, Hungarian, Italian, Japanese, Korean, Malay,
+ Polish, Portuguese (Brazil), Romanian, Russian, Slovak, Slovenian, Spanish, Swedish, Tatar, Thai, Turkish,
+ Ukrainian and Vietnamese translations
+! XySubFilter: Always preserve subtitle frame aspect ratio
+! Properties dialog: The creation time did not account for the local timezone
+! Properties dialog: More consistent UI for the "Resources" tab
+! PGSSub: Subtitles could have opaque background instead of transparent one
+! Audio CDROMs with extra content could not be played
+! Ticket #2420, Improve the reliability of the DirectShow hooks
+! Ticket #2626, Fix some rare crashes when another application prevents MPC-HC from rendering the video
+! Ticket #2953, DVB: Fix crash when closing window right after switching channel
+! Ticket #3324, Some applications could interfere with Skype API and prevent MPC-HC from running
+ when "Display "Now Playing" information in Skype's mood message" was enabled
+! Ticket #3666, DVB: Don't clear the channel list on saving new scan result
+! Ticket #3742, Sync Renderer: Fix rare crashes when using Sync Renderer with "synchronize video to display" option enabled
+! Ticket #3864, Video renderers: Fix a possible crash caused by a race condition
+! Ticket #3991, Video renderers: Fix a possible crash when the D3D device cannot be created
+! Ticket #4029, Fix a rare crash when right-clicking on the playlist panel
+! Ticket #4436, DVB: Improve compatibility with certain tuners
+! Ticket #4551, Fix a possible crash when saving the current frame
+! Ticket #4721, Audio CD playback could hang and stutter with some drives
+! Ticket #4933, ASS/SSA subtitles: Fix a crash for elements with no horizontal border but a vertical one
+! Ticket #4937, Prevent showing black bars when window size after scale exceed current work area
+! Ticket #4938, Fix resetting the settings from the "Options" dialog: some settings were (randomly) not
+ restored to their default value
+! Ticket #4954, Open dialog: Support quoted paths
+! Ticket #4956, Improve Play/Pause mouse click responsiveness
+! Ticket #4957/#4982, Do not adjust window width in audio mode if no cover-art/logo is loaded or its size
+ is limited to zero
+! Ticket #4969, DVD playback could fail with an error related to copy protection on some systems
+! Ticket #4971, Bring back "Play next file in the folder" event in single time events menu
+! Ticket #4975, Unrelated images could be loaded as cover-art when no author information was available
+ in the audio file
+! Ticket #4991, Text subtitles: "opaque box" outlines were scaled twice
+! Ticket #4992, DVB: Enabling the "Information" panel using the "Info" button on the "Navigation" dialog
+ would reduce the size of the main window when hiding the panel from the "View" menu
+! Ticket #4993, DVB: The content of the "Information" panel was lost when changing the UI language
+! Ticket #4994, The "Channels" sub-menu was not translated
+! Ticket #4995, Some context menus weren't properly positioned when opened by App key
+! Ticket #5010, Text subtitles: Fix a crash in case of memory allocation failure
+! Ticket #5055, True/False strings were not translated in value column on advanced page
+! Ticket #5067/#5203, Fix RealText subtitle parsing: the parser did not work at all and could even crash
+! Ticket #5127, Improve the behavior of MPC-HC when doing the MediaInfo analysis when playing from
+ an optical drive. Playback will now be paused during the analysis to avoid concurrent accesses to
+ the disk that might hang playback
+! Ticket #5130, Lock the player when the scan dialog is opened. Double-clicking on a media file will
+ always open a new instance of MPC-HC in this case. This avoids interrupting the scan accidentally
+ and fixes the issues which used to arise when doing that
+! Ticket #5130, Remove the information corresponding to the previously playing channel during the DVB scan
+! Ticket #5131, DVD playback could stutter on some systems
+
+
+1.7.7 - 05 October 2014
+=======================
++ Allow loading more than one subtitle file at a time using the "Load subtitle" dialog or drag-and-drop
++ Add advanced settings page
++ Add Arabic and Thai translations
++ Completely reworked subtitle queue:
+ - The queue should be much faster than the older one for a similar number of buffered subpictures.
+ It should also work much better when the number of subpictures becomes important
+ - Subtitle animation can now be disabled even when using no buffering
+ - Add the ability to choose at which state (in percentage of the full animation) an animated subtitle
+ will be rendered when the animation is turned off
+ - Add the ability to control the rate of the animation (in percentage of the movie frame rate)
+ - Add the ability to control whether the subtitle queue is allowed to drop some subpictures in case
+ subtitle rendering is too slow
++ Add an option to set JPEG quality when saving images (default quality is increased from 75% to 90%)
++ Ticket #353, Allow to control minimum file duration for remember position feature
++ Ticket #1287, Add after playback command to turn off the monitor
++ Ticket #1407/#2425, Add an advanced option to control the number of recent files. Those files are shown
+ in the "Recent Files" menu. It is also the files for which a position is potentially saved
++ Ticket #1531, Show cover-art while playing audio files
++ Ticket #2194, Show drive label when playing DVD
++ Ticket #3393, Allow to disable remember position feature for audio files
++ Ticket #4345, Text subtitles: Add a mode that automatically chooses the rendering target based on the
+ subtitle type, ASS/SSA subtitles will be rendered on the video frame while other text subtitles will
+ be rendered on the full window
++ Ticket #4690, Internal filters: Support v210/v410 raw video formats
+* Text subtitles: Faster subtitle parsing (up to 4 times faster for ASS/SSA subtitles)
+* Text subtitles: Improved subtitle renderer for faster rendering of complex subtitle scripts (often twice faster or more)
+* Text subtitles: Much faster subtitle opening in the Subresync bar
+* Ticket #325, Move after playback commands to options and add an option to close and restore logo
+* Ticket #1663, Improved command line help dialog
+* Ticket #2834, Increase limit on subtitles override placement feature
+* Ticket #4428, Improve the clarity of the error message when opening a subtitle file fails
+* Ticket #4687, Reworked "Formats" option page. It is now possible to clear all file associations
+* Ticket #4865, Subtitles option page: Clarify the "Delay interval" setting
+* Updated Little CMS to v2.6 (git 9c075b3)
+* Updated Unrar to v5.1.7
+* Updated MediaInfoLib to v0.7.70
+* Updated ZenLib to v0.4.29 r481
+* Updated LAV Filters to stable version 0.63.0:
+ - LAV Video: HEVC decoding is up to 100% faster
+ - LAV Video: Fix potential artifacts when decoding x264 lossless streams
+ - LAV Splitter: Support for playing AES encrypted HLS streams
+ - LAV Splitter: Advanced Subtitle selection allows selecting subtitles by a string match on the stream title
+ - Ticket #3608, LAV Splitter: Fix stuttering with some (m2)ts files
+ - Ticket #4322, LAV Audio: Improve the estimated duration for some MP3 files
+ - Ticket #4539, LAV Video: Fix a crash with DVD subtitles on 64-bit builds when using software decoding
+ - Ticket #4639, LAV Splitter: Fix incorrect colors for VobSub tracks in MP4
+ - Ticket #4783, LAV Video: Experimental support for hardware (CUVID and DXVA2) assisted decoding of HEVC streams (disabled by default)
+ - Ticket #4879, LAV Audio and LAV Splitter: Fix TrueHD streams with a Dolby Atmos sub-stream
+ The full changelog can be found at https://raw.githubusercontent.com/Nevcairiel/LAVFilters/0.63/CHANGELOG.txt
+* Updated Armenian, Basque, Belarusian, Bengali, British English, Catalan, Chinese (Simplified and Traditional),
+ Croatian, Czech, Dutch, French, Galician, German, Greek, Hebrew, Hungarian, Italian, Japanese, Korean, Malay,
+ Polish, Portuguese (Brazil), Romanian, Russian, Slovak, Slovenian, Spanish, Swedish, Tatar, Turkish, Ukrainian
+ and Vietnamese translations
+! Work around corrupted display with NVIDIA drivers v344.11 when using EVR, EVR-CP or Sync renderers
+! "Load subtitle" dialog: Fix the file filters on Windows Vista+
+! "Resources" tab: The resource saved wasn't always matching the selection
+! Ticket #3930, Fix a possible crash with embedded subtitles when the subtitle queue is disabled
+! Ticket #4207, Taskbar preview wasn't scaled correctly
+! Ticket #4504, ASS/SSA subtitles: Support floating point values in drawing commands
+! Ticket #4505, Embedded text subtitles: Fix a possible crash related to the Subresync bar
+! Ticket #4536, ASS/SSA subtitles: Fix the parsing of \fs tags when the value was negative
+! Ticket #4665, Ensure that the icon shown in the status bar and the property dialog
+ matches the icon currently associated to the format
+! Ticket #4678/#4856, Use internal filters for GIF format
+! Ticket #4684, Clicking on the some parts of the volume slider had no effect
+! Ticket #4707, EVR-CP: Screenshots were corrupted when "Force 10-bit input" was used
+! Ticket #4730, MediaInfo: Ensure the MediaInfo tab gives the same information as the official GUI
+! Ticket #4744, Some subtitles could cause a crash or produce artifacts
+! Ticket #4752, Monitors connected to secondary graphic card were not detected
+! Ticket #4758, Adjust width of the groupbox headers to avoid empty space
+! Ticket #4778, Fix optical drive detection when its letter is A or B
+! Ticket #4782, Backward frame step led to jumping to the wrong position in certain situations
+! Ticket #4825, Tracks matching a preferred language weren't always selected correctly
+! Ticket #4827, Initial window size could be wrong for anamorphic video
+! Ticket #4831, Fix a rare issue with animated subtitles starting at timecode 0
+! Ticket #4857, The timings of some subtitles could be wrong when using Sync Renderer
+! Ticket #4863, MPC-HC could crash when opening a file through the QuickTime engine
+
+
1.7.6 - 05 July 2014
====================
+ ISR: Add an option to control subtitle renderer behavior regarding anamorphic video
diff --git a/docs/Compilation.md b/docs/Compilation.md
new file mode 100644
index 000000000..b0d498c8a
--- /dev/null
+++ b/docs/Compilation.md
@@ -0,0 +1,93 @@
+# Compilation instructions
+
+For up to date instructions on how to compile mpc-hc visit the wiki page: <https://trac.mpc-hc.org/wiki/How_to_compile_the_MPC>
+
+
+## Part A: Preparing the Visual Studio environment
+
+### Visual Studio 2015
+
+1. Install Visual C++ 2015, part of Visual Studio 2015 (any edition will work fine)
+2. Make sure you have installed all available updates from Microsoft Update
+3. Install the DirectX SDK (June 2010) → <https://go.microsoft.com/fwlink/?LinkID=71193>
+
+
+## Part B: Preparing the GCC environment
+
+1. Download and extract **MSYS_MinGW-w64_GCC_710_x86-x64.7z** to **C:\MSYS** → <http://xhmikosr.1f0.de/tools/msys/MSYS_MinGW-w64_GCC_710_x86-x64.7z>.
+ For the components and their version see <http://xhmikosr.1f0.de/tools/msys/MSYS_MinGW-w64_GCC_710_x86-x64_components.txt>
+2. Create a file named **build.user.bat** in **C:\mpc-hc** containing the following entries, adapted for your system:
+
+ ```bat
+ @ECHO OFF
+ SET "MPCHC_MSYS=C:\MSYS"
+ SET "MPCHC_MINGW32=%MPCHC_MSYS%\mingw"
+ SET "MPCHC_MINGW64=%MPCHC_MINGW32%"
+ REM Git is optional to set if you chose to add it in PATH when installing it
+ SET "MPCHC_GIT=C:\Program Files\Git"
+ REM Optional, if you plan to modify the translations, install Python 2.7 or set the variable to its path
+ SET "MPCHC_PYTHON=C:\Python27"
+ ```
+
+### NOTES
+
+* If you installed the MSYS/MinGW package in another directory you will have to use that path in the previous steps.
+* If you don't have Git installed then the revision number will be a hard-coded one, like 1.6.3.0.
+
+
+## Part C: Downloading and compiling the MPC-HC source
+
+1. Use Git to clone MPC-HC's repository to **C:\mpc-hc** (or anywhere else you like).
+
+ 1. Download Git from <https://git-for-windows.github.io/>
+ 2. Run:
+
+ ```text
+ git clone --recursive https://github.com/mpc-hc/mpc-hc.git
+ ```
+
+ or
+
+ ```text
+ git clone https://github.com/mpc-hc/mpc-hc.git
+ git submodule update --init --recursive
+ ```
+
+ If a submodule update fails, try running:
+
+ ```text
+ git submodule foreach --recursive git fetch --tags
+ ```
+
+ then run the update again
+
+ ```text
+ git submodule update --init --recursive
+ ```
+
+ Note that you can add `-b master` to the `git clone` command if you want to get the latest
+ stable version instead of the latest development version
+2. Open the solution file **C:\mpc-hc\mpc-hc.sln**.
+ Change the solution's configuration to **Release** (in the toolbar).
+3. Press **F7** to build the solution.
+4. You now have **mpc-hc.exe** under **C:\mpc-hc\bin\mpc-hc_x86**
+5. Open the solution file **C:\mpc-hc\mpciconlib.sln**
+6. Press **F7** to build the solution.
+7. You now have **mpciconlib.dll** under **C:\mpc-hc\bin\mpc-hc_x86**
+8. Open the solution file **C:\mpc-hc\mpcresources.sln**
+9. Build **BuildAll** project.
+10. You now have **mpcresources.XX.dll** under **C:\mpc-hc\bin\mpc-hc_x86\Lang**
+
+Alternatively, you can use **build.bat** that can build everything for you (run: `build.bat help` for more info)
+
+
+## Part D: Building the installer
+
+Download Inno Setup Unicode v5.5.9 or newer from <http://www.jrsoftware.org/isdl.php>.
+Install everything and then go to **C:\mpc-hc\distrib**, open **mpc-hc_setup.iss** with Inno Setup,
+read the first comments in the script and compile it.
+
+### NOTES
+
+* **build.bat** can build the installer by using the **installer** or the **packages** switch.
+* Use Inno Setup's built-in IDE if you want to edit the iss file.
diff --git a/docs/Compilation.txt b/docs/Compilation.txt
deleted file mode 100644
index 652a90bc4..000000000
--- a/docs/Compilation.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-For up to date instructions on how to compile mpc-hc visit the wiki page:
-
-https://trac.mpc-hc.org/wiki/How_to_compile_the_MPC
-
-
-Part A: Preparing the Visual Studio environment
-
- Visual Studio 2013
- 1. Install Visual C++ 2013, part of Visual Studio 2013 Professional (Express won't work, other editions work fine)
- 2. Make sure you install all available updates from Microsoft Update
- 3. Install the DirectX SDK (June 2010) -> http://go.microsoft.com/fwlink/?LinkID=71193
-
-
-Part B: Preparing the GCC environment
- NOTES:
- * If you installed the MSYS/MinGW package in an other directory you will have to use that path in the following steps.
- * If you don't have Git installed then the revision number will be a hard-coded one, like 1.6.3.0.
-
- 1. Download and extract MSYS_MinGW-w64_GCC_491_x86-x64.7z to "C:\MSYS" -> http://xhmikosr.1f0.de/tools/msys/MSYS_MinGW-w64_GCC_491_x86-x64.7z
- For the components and their version see: http://xhmikosr.1f0.de/tools/msys/MSYS_MinGW-w64_GCC_491_x86-x64_components.txt
- 2. Edit the "fstab" file in "C:\MSYS\etc" to specify your MinGW path. This is optional.
- Add this to it: C:\MSYS\mingw \mingw
- Note the tab-space between "mingw" and "\mingw"
- 3. Create a file named "build.user.bat" in "C:\mpc-hc" containing the following entries, adapted for your system:
-
-@ECHO OFF
-SET "MPCHC_MSYS=C:\MSYS"
-SET "MPCHC_MINGW32=%MPCHC_MSYS%\mingw"
-SET "MPCHC_MINGW64=%MPCHC_MINGW32%"
-REM Git is optional to set if you chose to add it in PATH when installing it
-SET "MPCHC_GIT=C:\Program Files (x86)\Git"
-REM Optional, if you plan to modify the translations, install Python 2.7 or set the variable to its path
-SET "MPCHC_PYTHON=C:\Python27"
-
-
-Part C: Downloading and compiling the MPC-HC source
-
-1. Use Git to clone MPC-HC's repository to "C:\mpc-hc" (or anywhere else you like)
- Download Git from http://msysgit.github.io/
- Run:
- git clone --recursive https://github.com/mpc-hc/mpc-hc.git
-
- or
-
- git clone https://github.com/mpc-hc/mpc-hc.git
- git submodule update --init --recursive
-
- If a submodule update fails, try running:
- git submodule foreach --recursive git fetch --tags
- then run the update again
- git submodule update --init --recursive
-2. Open the solution file "C:\mpc-hc\mpc-hc.sln"
- Change the solution's configuration to "Release" (in the toolbar).
-3. Press F7 to build the solution.
-4. You now have "mpc-hc.exe" under "C:\mpc-hc\bin\mpc-hc_x86"
-5. Open the solution file "C:\mpc-hc\mpciconlib.sln"
-6. Press F7 to build the solution.
-7. You now have "mpciconlib.dll" under "C:\mpc-hc\bin\mpc-hc_x86"
-8. Open the solution file "C:\mpc-hc\mpcresources.sln"
- In Visual Studio go to Build->Batch Build->Press Select All->Press Build
-9. You now have "mpcresources.XX.dll" under "C:\mpc-hc\bin\mpc-hc_x86\Lang"
-
-Alternatively, you can use "build.bat" which can build everything for you
-(run: build.bat help for more info)
-
-
-Part D: Building the installer
-
-Download Inno Setup Unicode v5.5.5 or newer from: http://www.jrsoftware.org/isdl.php
-Install everything and then go to "C:\mpc-hc\distrib", open "mpc-hc_setup.iss" with Inno Setup,
-read the first comments in the script and compile it.
-Notes:
-* "build.bat" can build the installer by using the "installer" or the "packages" switch.
-* Use Inno Setup's built-in IDE if you want to edit the iss file.
diff --git a/docs/Readme.txt b/docs/Readme.txt
index dd8784e6c..f34c27006 100644
--- a/docs/Readme.txt
+++ b/docs/Readme.txt
@@ -1,20 +1,20 @@
-Media Player Classic - Home Cinema (MPC-HC) is a free and open source audio
+Media Player Classic - Home Cinema (MPC-HC) is a free and open-source audio
and video player for Windows. MPC-HC is based on the original Guliverkli project
-and contains a lot of additional features and bug fixes.
+and contains many additional features and bug fixes.
We are in dire need of new developers of any kind. If you can code a little,
or you can create logos for the player and images for the file associations,
or you can create/maintain the main website, please join our IRC channel
-and talk to us. Find some easy ticket on our trac page, fix the problem,
-post the patch on trac or come on IRC and we'll review it for you.
+and talk to us. Find some easy ticket on our Trac, fix the problem,
+post the patch on Trac or come on IRC and we'll review it for you.
Any help is always appreciated.
We care about keeping an open project open and free for contributions
wherever they may come from.
-Main Features:
---------------
+Main Features
+-------------
* Option to remove tearing
* Better support for Windows Vista/7, including a 64-bit build
* Support for EVR/EVR CP (Enhanced Video Renderer)
@@ -24,22 +24,22 @@ Main Features:
* Multi-Monitor support
* Various pixel shaders
* Color management
-* 35 translations available
+* 42 translations available
-System Requirements:
---------------------
-* An SSE capable CPU
-* Windows XP SP3, Vista, 7, 8, 8.1 32-bit/64-bit
+System Requirements
+-------------------
+* An SSE2 capable CPU
+* Windows XP SP3, Vista, 7, 8, 8.1, 10 32-bit/64-bit
-Links:
-------
-Website: http://mpc-hc.org
+Links
+-----
+Website: https://mpc-hc.org/
Source code: https://github.com/mpc-hc
-Support Trac: https://trac.mpc-hc.org
-IRC Channel: #mpc-hc / #mpc-hc-dev at Freenode (http://webchat.freenode.net/)
-Donations: http://mpc-hc.org/donate/
+Support Trac: https://trac.mpc-hc.org/
+IRC Channel: #mpc-hc / #mpc-hc-dev at Freenode (https://webchat.freenode.net/)
+Donations: https://mpc-hc.org/donate/
For the people involved in the development, see Authors.txt.
@@ -52,22 +52,30 @@ MPC-HC makes use of the following third-party code:
Project License Website
--------------------------------------------------------------------
+bs2b MIT License http://bs2b.sourceforge.net
CSizingControlBar - http://www.datamekanix.com/sizecbar/
-LAV Filters GPLv2+ http://code.google.com/p/lavfilters/
+LAV Filters GPLv2+ https://github.com/Nevcairiel/LAVFilters
libdivide zlib License http://libdivide.com/
Little CMS MIT License http://www.littlecms.com/
Logitech SDK - -
-MediaInfoLib Simplified BSD License http://mediaarea.net/MediaInfo
-Mhook MIT License https://github.com/martona/mhook
-MultiMon CPOL http://www.codeproject.com/Articles/3690/
+MediaInfoLib Simplified BSD License https://mediaarea.net/MediaInfo
+MinHook Simplified BSD License https://github.com/TsudaKageyu/minhook
+MultiMon CPOL https://www.codeproject.com/Articles/3690/
+NanoSVG zlib License https://github.com/memononen/nanosvg
QuickTime SDK - http://developer.apple.com/quicktime/
+RapidJSON MIT License https://github.com/miloyip/rapidjson
RARFileSource GPLv2+ http://www.v12pwr.com/RARFileSource/
RealMedia SDK - -
-ResizableLib Artistic License http://sourceforge.net/projects/resizablelib/
+ResizableLib Artistic License https://github.com/ppescher/resizablelib
+sanear LGPLv2.1 https://github.com/alexmarsev/sanear
Silk Icons CC Attribution 2.5 http://www.famfamfam.com/lab/icons/silk/
SoundTouch LGPLv2.1 http://www.surina.net/soundtouch/
-TreePropSheet - http://www.codeproject.com/Articles/3709/
+soxr LGPLv2.1+ https://sourceforge.net/projects/soxr/
+tinyxml2 zlib License http://www.grinninglizard.com/tinyxml2/
+TreePropSheet - https://www.codeproject.com/Articles/3709/
UnRAR freeware http://www.rarlab.com/rar_add.htm
VirtualDub GPLv2+ http://www.virtualdub.org/
-ZenLib zlib License http://sourceforge.net/projects/zenlib/
+XmlRpc4Win MIT License https://github.com/drtimcooper/XmlRpc4Win
+ZenLib zlib License https://github.com/MediaArea/ZenLib
+zita-resampler GPLv3 http://kokkinizita.linuxaudio.org/linuxaudio/
zlib zlib License http://zlib.net/
diff --git a/docs/Release.md b/docs/Release.md
new file mode 100644
index 000000000..3dc557bc4
--- /dev/null
+++ b/docs/Release.md
@@ -0,0 +1,47 @@
+# Release procedure for stable builds
+
+We use a Git workflow based on <http://nvie.com/posts/a-successful-git-branching-model/>.
+
+The main idea is that the development takes place in a branch named `develop` instead of `master`.
+All pull requests and more generally all "feature" branches must originate from `develop` and be
+merged back into it. When a release is planned, a new temporary branch `release-X.Y.Z` is created
+from `develop` and finally merged into `master` when the release is ready to be published. The only
+difference with the workflow proposed on nvie.com is that we merge `master` into `develop` after
+`release-X.Y.Z` has been merged instead of directly merging `release-X.Y.Z` into `develop`. This
+ensures the release tags are visible from the `develop` branch to have a proper numbering of the
+nightly builds. In case a hotfix is needed, a new temporary `hotfix-X.Y.Z` branch is created from
+the head of the `master` branch and merged back into `master`. `master` is then merged into `develop`.
+
+Here is a quick how-to release a new stable build:
+
+1. Create a new branch `release-X.Y.Z` from the commit on `develop` branch you want to use as a base
+ for the next stable release (you don't have to always use the latest commit from `develop`)
+2. Do everything you want to prepare the release on this newly created branch. New commits can still
+ be added on the `develop` branch if they aren't to be included in the release.
+3. When you are ready to release, make sure to:
+
+ * Update version in **include/version.h**
+ * Update **thirdparty/versions.txt** and the version/release date in **Changelog.txt**
+ * Commit those changes
+
+4. Merge the `release-X.Y.Z` branch into `master`. Use `git merge --no-ff release-X.Y.Z` to make sure
+ the branch history is correctly saved. The temporary branch `release-X.Y.Z` can now be removed using
+ `git branch -d release-X.Y.Z`
+5. Tag the merge commit for the new release: `git tag -a X.Y.Z -m "Tag vX.Y.Z"`
+6. Merge back the `master` branch into `develop`. Use `git merge --no-ff --no-commit master` since it's
+ likely that some manually editing of the merge commit is needed to merge the changelog correctly. Try
+ to give the merge commit an informative commit log, mentioning the release and its version number
+7. Checkout the `master` branch and make sure you have a clean source tree, no modified files, or unpushed commits
+8. Compile MPC-HC and the standalone filters:
+
+ 1. `CALL "build.bat" Clean All Both Release`
+ 2. `CALL "build.bat" Build All Both Release Packages`
+
+9. Keep the PDB files of all the filters and MPC-HC builds
+10. Upload the PDB files and the corresponding binary files to DrDump server. Use the same command
+ as the nightly builds with the version set to `X.Y.Z.0`
+11. Upload the binary packages on MaxCDN following the directory and the packages names scheme
+ (upload the PDB files too, use 7-zip to create the 7z packages)
+12. Upload the old stable release on <stable.mpc-hc.org>
+13. Update the website with the new version number, changelog and download links
+14. Update the milestone and the changelog on Trac
diff --git a/docs/Release.txt b/docs/Release.txt
deleted file mode 100644
index 51d2555eb..000000000
--- a/docs/Release.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-Here is a quick how-to release a new stable build:
-
-1) Update version in "include/version.h"
-2) Update "thirdparty/versions.txt" and the version/release date in "Changelog.txt"
-3) Commit the changes
-4) Create a git tag for the new release: `git tag -a 1.7.5 -m "Tag v1.7.5"`
-5) Make sure you have a clean source tree, no modified files, or unpushed commits
-6) Compile MPC-HC and the standalone filters:
- a. CALL "build.bat" Clean All Both Release
- b. CALL "build.bat" Build All Both Release Packages
-7) Keep the PDB files of all the filters and MPC-HC builds
-8) Upload the binary packages on SourceForge following the directory and the packages names scheme
- (upload the PDB files too, use 7zip for creating the 7z packages)
-9) Update the website with the new download links, changelog and version.txt with
- the new version number
diff --git a/docs/Submodules.md b/docs/Submodules.md
new file mode 100644
index 000000000..775c5494d
--- /dev/null
+++ b/docs/Submodules.md
@@ -0,0 +1,33 @@
+# Updating submodules
+
+## Prerequisites
+
+Add a new remote to LAV Filters and FFmpeg submodules:
+
+* for LAV Filters, `git remote add upstream https://github.com/Nevcairiel/LAVFilters.git` in **src/thirdparty/LAVFilters/src**
+* for FFmpeg, `git remote add upstream git://git.1f0.de/ffmpeg.git` in **src/thirdparty/LAVFilters/src/ffmpeg**
+
+**Warning:** Before updating LAV Filters always makes sure that no update is required on MPC-HC side.
+If there are some changes in LAV Filters interfaces or settings, some changes are likely
+to be needed in MPC-HC. If the update breaks compatibility with older LAV Filters versions,
+remember to update the version check in **FGFilterLAV.cpp**.
+
+## How to update LAV Filters
+
+1. Checkout the master branch in FFmpeg submodule (**src/thirdparty/LAVFilters/src/ffmpeg**)
+2. Do `git remote update` to update remotes
+3. Do `git reset origin/master --hard` to clean up local repository (beware that you will lose all local commits)
+4. Do `git rebase upstream/master` to update FFmpeg
+5. Apply new custom patches, if any
+6. Do `git tag mpc-hc-X.Y.Z-N` where X.Y.Z is the latest MPC-HC version
+ and N is the number of LAV Filters updates since that release
+7. Do `git push --force --tags origin master` to update our FFmpeg repository
+8. Checkout the master branch in LAV Filters submodule (src/thirdparty/LAVFilters/src)
+9. Do `git remote update` to update remotes
+10. Do `git reset origin/master --hard` to clean up local repository (beware you will lose all local commits)
+11. Do `git rebase upstream/master` to update LAV Filters
+12. Apply new custom patches if any
+13. Do `git tag mpc-hc-X.Y.Z-N` where X.Y.Z is the latest MPC-HC version
+ and N is the number of LAV Filters updates since that release
+14. Do `git push --force --tags origin master` to update our LAV Filters repository
+15. Commit the submodule update in MPC-HC repository
diff --git a/docs/Submodules.txt b/docs/Submodules.txt
deleted file mode 100644
index 2d551e9da..000000000
--- a/docs/Submodules.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-Prerequisites
-Add a new remote to LAV Filters and FFmpeg submodules:
- - for LAV Filters, "git remote add upstream https://github.com/Nevcairiel/LAVFilters.git" in src/thirdparty/LAVFilters/src
- - for FFmpeg, "git remote add upstream git://git.1f0.de/ffmpeg.git" in src/thirdparty/LAVFilters/src/ffmpeg
-
-Warning:
-Before updating LAV Filters always makes sure that no update is required on MPC-HC side.
-If there are some changes in LAV Filters interfaces or settings, some changes are likely
-to be needed in MPC-HC. If the update breaks compatibility with older LAV Filters versions,
-remember to update the version check in FGFilterLAV.cpp.
-
-How to update LAV Filters
- 1) Checkout the master branch in FFmpeg submodule (src/thirdparty/LAVFilters/src/ffmpeg)
- 2) Do "git remote update" to update remotes
- 3) Do "git reset origin/master --hard" to cleanup local repository (beware you will lose all local commits)
- 4) Do "git rebase upstream/master" to update FFmpeg
- 5) Apply new custom patches if any
- 6) Do "git tag mpc-hc-X.Y.Z-N" where X.Y.Z is the latest MPC-HC version
- and N is the number of LAV Filters updates since that release
- 7) Do "git push --force --tags origin master" to update our FFmpeg repository
- 8) Checkout the master branch in LAV Filters submodule (src/thirdparty/LAVFilters/src)
- 9) Do "git remote update" to update remotes
-10) Do "git reset origin/master --hard" to cleanup local repository (beware you will lose all local commits)
-11) Do "git rebase upstream/master" to update LAV Filters
-12) Apply new custom patches if any
-13) Do "git tag mpc-hc-X.Y.Z-N" where X.Y.Z is the latest MPC-HC version
- and N is the number of LAV Filters updates since that release
-14) Do "git push --force --tags origin master" to update our LAV Filters repository
-15) Update LAV Filters version in versions.txt
-16) Commit the submodule update in MPC-HC repository
diff --git a/docs/Todo.md b/docs/Todo.md
new file mode 100644
index 000000000..5f0644968
--- /dev/null
+++ b/docs/Todo.md
@@ -0,0 +1,28 @@
+# To-do
+
+Patches are always welcome. :)
+
+## MPC-HC
+
+1. Remove support for unneeded/obsolete renderers
+2. Drop XP support after its EOL
+
+## MPCIconLib
+
+1. Replace the file association icons with better looking ones
+
+## WebServer
+
+1. Update the images for player.html using a css sprite
+2. Add an alternative web interface if possible
+
+## Installer
+
+1. Add file association tasks, see <https://trac.mpc-hc.org/ticket/2207>
+
+## VSFilter
+
+1. Use the defines from version.h for `MPC_COPYRIGHT_STR` in VSFilter
+2. Define VSFilter's version numbers in a place accessible by its installer and VSFilter itself
+3. Backport a few useful patches from those VSFilter forks; we need individual patches for that
+ and we have to make sure that everything works right for mpc-hc itself
diff --git a/docs/Todo.txt b/docs/Todo.txt
deleted file mode 100644
index 6c016e5f7..000000000
--- a/docs/Todo.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Patches are always welcome. :)
-
-MPC-HC:
-1) Remove support for unneeded/obsolete renderers
-2) Drop XP support after its EOL
-3) Replace the default old looking toolbar with a more modern one
-
-MPCIconLib:
-1) Replace the file association icons with better looking ones
-
-WebServer:
-1) Update the images for player.html using a css sprite
-2) Add an alternative web interface if possible
-
-Installer:
-1) Add file association tasks, see https://trac.mpc-hc.org/ticket/2207
-
-VSFilter:
-1) Use the defines from version.h for MPC_COPYRIGHT_STR in VSFilter
-2) Define VSFilter's version numbers in a place accessible by its installer and VSFilter itself
-3) Backport a few useful patches from those VSFilter forks; we need individual patches for that
- and we have to make sure that everything works right for mpc-hc itself
diff --git a/include/MediaInfoDLL.h b/include/MediaInfoDLL.h
deleted file mode 100644
index ec2634524..000000000
--- a/include/MediaInfoDLL.h
+++ /dev/null
@@ -1,622 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Public DLL interface implementation
-// Wrapper for MediaInfo Library
-// See MediaInfo.h for help
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
-
-#ifndef MediaInfoDLLH
-#define MediaInfoDLLH
-
-//***************************************************************************
-// Platforms (from libzen)
-//***************************************************************************
-
-/*---------------------------------------------------------------------------*/
-/*Win32*/
-#if defined(__NT__) || defined(_WIN32) || defined(WIN32)
- #ifndef WIN32
- #define WIN32
- #endif
- #ifndef _WIN32
- #define _WIN32
- #endif
- #ifndef __WIN32__
- #define __WIN32__ 1
- #endif
-#endif
-
-/*---------------------------------------------------------------------------*/
-/*Win64*/
-#if defined(_WIN64) || defined(WIN64)
- #ifndef WIN64
- #define WIN64
- #endif
- #ifndef _WIN64
- #define _WIN64
- #endif
- #ifndef __WIN64__
- #define __WIN64__ 1
- #endif
-#endif
-
-/*---------------------------------------------------------------------------*/
-/*Windows*/
-#if defined(WIN32) || defined(WIN64)
- #ifndef WINDOWS
- #define WINDOWS
- #endif
- #ifndef _WINDOWS
- #define _WINDOWS
- #endif
- #ifndef __WINDOWS__
- #define __WINDOWS__ 1
- #endif
-#endif
-
-/*---------------------------------------------------------------------------*/
-/*Unix (Linux, HP, Sun, BeOS...)*/
-#if defined(UNIX) || defined(_UNIX) || defined(__UNIX__) \
- || defined(__unix) || defined(__unix__) \
- || defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) \
- || defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) \
- || defined(__EMX__) || defined(__VMS) || defined(__BEOS__)
- #ifndef UNIX
- #define UNIX
- #endif
- #ifndef _UNIX
- #define _UNIX
- #endif
- #ifndef __UNIX__
- #define __UNIX__ 1
- #endif
-#endif
-
-/*---------------------------------------------------------------------------*/
-/*MacOS Classic*/
-#if defined(macintosh)
- #ifndef MACOS
- #define MACOS
- #endif
- #ifndef _MACOS
- #define _MACOS
- #endif
- #ifndef __MACOS__
- #define __MACOS__ 1
- #endif
-#endif
-
-/*---------------------------------------------------------------------------*/
-/*MacOS X*/
-#if defined(__APPLE__) && defined(__MACH__)
- #ifndef MACOSX
- #define MACOSX
- #endif
- #ifndef _MACOSX
- #define _MACOSX
- #endif
- #ifndef __MACOSX__
- #define __MACOSX__ 1
- #endif
-#endif
-
-/*Test of targets*/
-#if defined(WINDOWS) && defined(UNIX) && defined(MACOS) && defined(MACOSX)
- #pragma message Multiple platforms???
-#endif
-
-#if !defined(WIN32) && !defined(UNIX) && !defined(MACOS) && !defined(MACOSX)
- #pragma message No known platforms, assume default
-#endif
-
-/*-------------------------------------------------------------------------*/
-#if defined(_WIN32) || defined(WIN32)
- #ifdef _UNICODE
- #define MEDIAINFODLL_NAME L"MediaInfo.dll"
- #else //_UNICODE
- #define MEDIAINFODLL_NAME "MediaInfo.dll"
- #endif //_UNICODE
-#elif defined(__APPLE__) && defined(__MACH__)
- #define MEDIAINFODLL_NAME "libmediainfo.0.dylib"
- #define __stdcall
- #ifdef __cplusplus
- #include <new> //for size_t
- #else /* __cplusplus */
- #include <stddef.h> //for size_t
- #endif /* __cplusplus */
-#else
- #define MEDIAINFODLL_NAME "libmediainfo.so.0"
- #define __stdcall
-#endif //!defined(_WIN32) || defined(WIN32)
-
-/*-------------------------------------------------------------------------*/
-/*Char types */
-#undef __T
-#define __T(__x) __T(__x)
-#if defined(UNICODE) || defined(_UNICODE)
- typedef wchar_t MediaInfo_Char;
- #undef __T
- #define __T(__x) L ## __x
- #define MEDIAINFO_Ansi ""
-#else
- typedef char MediaInfo_Char;
- #undef __T
- #define __T(__x) __x
- #define MEDIAINFO_Ansi "A"
-#endif
-/*-------------------------------------------------------------------------*/
-
-/*-------------------------------------------------------------------------*/
-/*8-bit int */
-typedef unsigned char MediaInfo_int8u;
-/*-------------------------------------------------------------------------*/
-
-/*-------------------------------------------------------------------------*/
-/*64-bit int */
-#if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__UNIX__) || defined(__MACOSX__)
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 64
- typedef unsigned long long MediaInfo_int64u;
-#elif defined(__WIN32__) || defined(_WIN32)
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 64
- typedef unsigned __int64 MediaInfo_int64u;
-#else
- #pragma message This machine has no 64-bit integer type?
-#endif
-/*-------------------------------------------------------------------------*/
-
-/*-------------------------------------------------------------------------*/
-/*NULL */
-#ifndef NULL
- #define NULL 0
-#endif
-/*-------------------------------------------------------------------------*/
-
-/** @brief Kinds of Stream */
-typedef enum MediaInfo_stream_t {
- MediaInfo_Stream_General,
- MediaInfo_Stream_Video,
- MediaInfo_Stream_Audio,
- MediaInfo_Stream_Text,
- MediaInfo_Stream_Other,
- MediaInfo_Stream_Image,
- MediaInfo_Stream_Menu,
- MediaInfo_Stream_Max
-} MediaInfo_stream_C;
-
-/** @brief Kinds of Info */
-typedef enum MediaInfo_info_t {
- MediaInfo_Info_Name,
- MediaInfo_Info_Text,
- MediaInfo_Info_Measure,
- MediaInfo_Info_Options,
- MediaInfo_Info_Name_Text,
- MediaInfo_Info_Measure_Text,
- MediaInfo_Info_Info,
- MediaInfo_Info_HowTo,
- MediaInfo_Info_Max
-} MediaInfo_info_C;
-
-/** @brief Option if InfoKind = Info_Options */
-typedef enum MediaInfo_infooptions_t {
- MediaInfo_InfoOption_ShowInInform,
- MediaInfo_InfoOption_Reserved,
- MediaInfo_InfoOption_ShowInSupported,
- MediaInfo_InfoOption_TypeOfValue,
- MediaInfo_InfoOption_Max
-} MediaInfo_infooptions_C;
-
-/** @brief File opening options */
-typedef enum MediaInfo_fileoptions_t {
- MediaInfo_FileOption_Nothing = 0x00,
- MediaInfo_FileOption_NoRecursive = 0x01,
- MediaInfo_FileOption_CloseAll = 0x02,
- MediaInfo_FileOption_Max = 0x04
-} MediaInfo_fileoptions_C;
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#ifdef MEDIAINFO_GLIBC
- #include <gmodule.h>
- static GModule* MediaInfo_Module = NULL;
-#elif defined(_WIN32) || defined(WIN32)
- #include <windows.h>
- static HMODULE MediaInfo_Module = NULL;
-#else
- #ifdef MACOSX
- #include <CoreFoundation/CFBundle.h>
- #endif
-
- #include <dlfcn.h>
- static void* MediaInfo_Module = NULL;
-#endif
- static size_t Module_Count = 0;
-
-#ifdef MEDIAINFO_GLIBC
-#define MEDIAINFO_ASSIGN(_Name,_Name2) \
- if (!g_module_symbol (MediaInfo_Module, "MediaInfo" MEDIAINFO_Ansi "_" _Name2, (gpointer*)&MediaInfo_##_Name)) \
- Errors++;
-#define MEDIAINFOLIST_ASSIGN(_Name,_Name2) \
- if (!g_module_symbol (MediaInfo_Module, "MediaInfoList" MEDIAINFO_Ansi "_" _Name2, (gpointer*)&MediaInfoList_##_Name)) \
- Errors++;
-#elif defined(_WIN32) || defined(WIN32)
-#define MEDIAINFO_ASSIGN(_Name,_Name2) \
- MediaInfo_##_Name=(MEDIAINFO_##_Name)GetProcAddress(MediaInfo_Module, "MediaInfo" MEDIAINFO_Ansi "_" _Name2); \
- if (MediaInfo_##_Name==NULL) Errors++;
-#define MEDIAINFOLIST_ASSIGN(_Name,_Name2) \
- MediaInfoList_##_Name=(MEDIAINFOLIST_##_Name)GetProcAddress(MediaInfo_Module, "MediaInfoList" MEDIAINFO_Ansi "_" _Name2); \
- if (MediaInfoList_##_Name==NULL) Errors++;
-#else
-#define MEDIAINFO_ASSIGN(_Name,_Name2) \
- MediaInfo_##_Name=(MEDIAINFO_##_Name)dlsym(MediaInfo_Module, "MediaInfo" MEDIAINFO_Ansi "_" _Name2); \
- if (MediaInfo_##_Name==NULL) Errors++;
-#define MEDIAINFOLIST_ASSIGN(_Name,_Name2) \
- MediaInfoList_##_Name=(MEDIAINFOLIST_##_Name)dlsym(MediaInfo_Module, "MediaInfoList" MEDIAINFO_Ansi "_" _Name2); \
- if (MediaInfoList_##_Name==NULL) Errors++;
-#endif
-
- typedef void* (__stdcall *MEDIAINFO_New)();
- static MEDIAINFO_New MediaInfo_New;
- typedef void* (__stdcall *MEDIAINFOLIST_New)();
- static MEDIAINFOLIST_New MediaInfoList_New;
- typedef void (__stdcall *MEDIAINFO_Delete)(void*);
- static MEDIAINFO_Delete MediaInfo_Delete;
- typedef void (__stdcall *MEDIAINFOLIST_Delete)(void*);
- static MEDIAINFOLIST_Delete MediaInfoList_Delete;
- typedef size_t (__stdcall *MEDIAINFO_Open)(void*, const MediaInfo_Char*);
- static MEDIAINFO_Open MediaInfo_Open;
- typedef size_t (__stdcall *MEDIAINFOLIST_Open)(void*, const MediaInfo_Char*, const MediaInfo_fileoptions_C);
- static MEDIAINFOLIST_Open MediaInfoList_Open;
- typedef size_t (__stdcall *MEDIAINFO_Open_Buffer_Init)(void*, MediaInfo_int64u File_Size, MediaInfo_int64u File_Offset);
- static MEDIAINFO_Open_Buffer_Init MediaInfo_Open_Buffer_Init;
- typedef size_t (__stdcall *MEDIAINFO_Open_Buffer_Continue)(void*, MediaInfo_int8u* Buffer, size_t Buffer_Size);
- static MEDIAINFO_Open_Buffer_Continue MediaInfo_Open_Buffer_Continue;
- typedef MediaInfo_int64u(__stdcall *MEDIAINFO_Open_Buffer_Continue_GoTo_Get)(void*);
- static MEDIAINFO_Open_Buffer_Continue_GoTo_Get MediaInfo_Open_Buffer_Continue_GoTo_Get;
- typedef size_t (__stdcall *MEDIAINFO_Open_Buffer_Finalize)(void*);
- static MEDIAINFO_Open_Buffer_Finalize MediaInfo_Open_Buffer_Finalize;
- typedef size_t (__stdcall *MEDIAINFO_Open_NextPacket)(void*);
- static MEDIAINFO_Open_NextPacket MediaInfo_Open_NextPacket;
- typedef void (__stdcall *MEDIAINFO_Close)(void*);
- static MEDIAINFO_Close MediaInfo_Close;
- typedef void (__stdcall *MEDIAINFOLIST_Close)(void*, size_t);
- static MEDIAINFOLIST_Close MediaInfoList_Close;
- typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_Inform)(void*, size_t Reserved);
- static MEDIAINFO_Inform MediaInfo_Inform;
- typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_Inform)(void*, size_t, size_t Reserved);
- static MEDIAINFOLIST_Inform MediaInfoList_Inform;
- typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_GetI)(void*, MediaInfo_stream_C StreamKind, size_t StreamNumber, size_t Parameter, MediaInfo_info_C KindOfInfo);
- static MEDIAINFO_GetI MediaInfo_GetI;
- typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_GetI)(void*, size_t, MediaInfo_stream_C StreamKind, size_t StreamNumber, size_t Parameter, MediaInfo_info_C KindOfInfo);
- static MEDIAINFOLIST_GetI MediaInfoList_GetI;
- typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_Get)(void*, MediaInfo_stream_C StreamKind, size_t StreamNumber, const MediaInfo_Char* Parameter, MediaInfo_info_C KindOfInfo, MediaInfo_info_C KindOfSearch);
- static MEDIAINFO_Get MediaInfo_Get;
- typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_Get)(void*, size_t, MediaInfo_stream_C StreamKind, size_t StreamNumber, const MediaInfo_Char* Parameter, MediaInfo_info_C KindOfInfo, MediaInfo_info_C KindOfSearch);
- static MEDIAINFOLIST_Get MediaInfoList_Get;
- typedef size_t (__stdcall *MEDIAINFO_Output_Buffer_Get)(void*, const MediaInfo_Char* Parameter);
- static MEDIAINFO_Output_Buffer_Get MediaInfo_Output_Buffer_Get;
- typedef size_t (__stdcall *MEDIAINFO_Output_Buffer_GetI)(void*, size_t Pos);
- static MEDIAINFO_Output_Buffer_GetI MediaInfo_Output_Buffer_GetI;
- typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_Option)(void*, const MediaInfo_Char* Parameter, const MediaInfo_Char* Value);
- static MEDIAINFO_Option MediaInfo_Option;
- typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_Option)(void*, const MediaInfo_Char* Parameter, const MediaInfo_Char* Value);
- static MEDIAINFOLIST_Option MediaInfoList_Option;
- typedef size_t (__stdcall *MEDIAINFO_State_Get)(void*);
- static MEDIAINFO_State_Get MediaInfo_State_Get;
- typedef size_t (__stdcall *MEDIAINFOLIST_State_Get)(void*);
- static MEDIAINFOLIST_State_Get MediaInfoList_State_Get;
- typedef size_t (__stdcall *MEDIAINFO_Count_Get)(void*, MediaInfo_stream_C StreamKind, size_t StreamNumber);
- static MEDIAINFO_Count_Get MediaInfo_Count_Get;
- typedef size_t (__stdcall *MEDIAINFOLIST_Count_Get)(void*, size_t, MediaInfo_stream_C StreamKind, size_t StreamNumber);
- static MEDIAINFOLIST_Count_Get MediaInfoList_Count_Get;
- typedef size_t (__stdcall *MEDIAINFO_Count_Get_Files)(void*);
- static MEDIAINFO_Count_Get_Files MediaInfo_Count_Get_Files;
- typedef size_t (__stdcall *MEDIAINFOLIST_Count_Get_Files)(void*);
- static MEDIAINFOLIST_Count_Get_Files MediaInfoList_Count_Get_Files;
-
- static size_t MediaInfoDLL_Load()
- {
- size_t Errors = 0;
-
- if (Module_Count > 0) {
- Module_Count++;
- return 1;
- }
-
- /* Load library */
- #ifdef MEDIAINFO_GLIBC
- MediaInfo_Module = g_module_open(MEDIAINFODLL_NAME, G_MODULE_BIND_LAZY);
- #elif defined(_WIN32) || defined(WIN32)
- MediaInfo_Module = LoadLibrary(MEDIAINFODLL_NAME);
- #else
- #ifdef MACOSX
- MediaInfo_Module = dlopen("@executable_path/" MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!MediaInfo_Module)
- {
- CFBundleRef mainBundle = CFBundleGetMainBundle();
-
- // get full app path and delete app name
- CFURLRef app_url = CFBundleCopyExecutableURL(mainBundle);
- CFURLRef app_path_url = CFURLCreateCopyDeletingLastPathComponent(NULL, app_url);
-
- CFStringRef app_path = CFURLCopyFileSystemPath(app_path_url, kCFURLPOSIXPathStyle);
-
- CFMutableStringRef mut_app_path = CFStringCreateMutableCopy(NULL, NULL, app_path);
- CFStringAppend(mut_app_path, CFSTR("/"));
- CFStringAppend(mut_app_path, CFSTR(MEDIAINFODLL_NAME));
- CFStringEncoding encodingMethod = CFStringGetSystemEncoding();
- const char *fullPath = CFStringGetCStringPtr(mut_app_path, encodingMethod);
-
- MediaInfo_Module = dlopen(fullPath, RTLD_LAZY);
-
- CFRelease(app_url);
- CFRelease(app_path_url);
- CFRelease(app_path);
- CFRelease(mut_app_path);
- }
- #endif /* MACOSX*/
-
- if (!MediaInfo_Module)
- MediaInfo_Module = dlopen(MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!MediaInfo_Module)
- MediaInfo_Module = dlopen("./" MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!MediaInfo_Module)
- MediaInfo_Module = dlopen("/usr/local/lib/" MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!MediaInfo_Module)
- MediaInfo_Module = dlopen("/usr/local/lib64/" MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!MediaInfo_Module)
- MediaInfo_Module = dlopen("/usr/lib/" MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!MediaInfo_Module)
- MediaInfo_Module = dlopen("/usr/lib64/" MEDIAINFODLL_NAME, RTLD_LAZY);
- #endif
- if (!MediaInfo_Module)
- return (size_t) - 1;
-
- /* Load methods */
- MEDIAINFO_ASSIGN(New, "New")
- MEDIAINFOLIST_ASSIGN(New, "New")
- MEDIAINFO_ASSIGN(Delete, "Delete")
- MEDIAINFOLIST_ASSIGN(Delete, "Delete")
- MEDIAINFO_ASSIGN(Open, "Open")
- MEDIAINFOLIST_ASSIGN(Open, "Open")
- MEDIAINFO_ASSIGN(Open_Buffer_Init, "Open_Buffer_Init")
- MEDIAINFO_ASSIGN(Open_Buffer_Continue, "Open_Buffer_Continue")
- MEDIAINFO_ASSIGN(Open_Buffer_Continue_GoTo_Get, "Open_Buffer_Continue_GoTo_Get")
- MEDIAINFO_ASSIGN(Open_Buffer_Finalize, "Open_Buffer_Finalize")
- MEDIAINFO_ASSIGN(Open_NextPacket, "Open_NextPacket")
- MEDIAINFO_ASSIGN(Close, "Close")
- MEDIAINFOLIST_ASSIGN(Close, "Close")
- MEDIAINFO_ASSIGN(Inform, "Inform")
- MEDIAINFOLIST_ASSIGN(Inform, "Inform")
- MEDIAINFO_ASSIGN(GetI, "GetI")
- MEDIAINFOLIST_ASSIGN(GetI, "GetI")
- MEDIAINFO_ASSIGN(Get, "Get")
- MEDIAINFOLIST_ASSIGN(Get, "Get")
- MEDIAINFO_ASSIGN(Output_Buffer_Get, "Output_Buffer_Get")
- MEDIAINFO_ASSIGN(Output_Buffer_GetI, "Output_Buffer_GetI")
- MEDIAINFO_ASSIGN(Option, "Option")
- MEDIAINFOLIST_ASSIGN(Option, "Option")
- MEDIAINFO_ASSIGN(State_Get, "State_Get")
- MEDIAINFOLIST_ASSIGN(State_Get, "State_Get")
- MEDIAINFO_ASSIGN(Count_Get, "Count_Get")
- MEDIAINFOLIST_ASSIGN(Count_Get, "Count_Get")
- MEDIAINFOLIST_ASSIGN(Count_Get_Files, "Count_Get_Files")
- if (Errors > 0) {
- // Unload DLL with errors
- #ifdef MEDIAINFO_GLIBC
- g_module_close(MediaInfo_Module);
- #elif defined(_WIN32) || defined(WIN32)
- FreeLibrary(MediaInfo_Module);
- #else
- dlclose(MediaInfo_Module);
- #endif
- MediaInfo_Module = NULL;
- return (size_t) - 1;
- }
-
- Module_Count++;
- return (size_t)1;
- }
-
- static size_t MediaInfoDLL_IsLoaded()
- {
- if (MediaInfo_Module)
- return 1;
- else
- return 0;
- }
-
- static void MediaInfoDLL_UnLoad()
- {
- Module_Count--;
- if (Module_Count > 0)
- return;
-
- #ifdef MEDIAINFO_GLIBC
- g_module_close(MediaInfo_Module);
- #elif defined(_WIN32) || defined(WIN32)
- FreeLibrary(MediaInfo_Module);
- #else
- dlclose(MediaInfo_Module);
- #endif
- MediaInfo_Module = NULL;
- }
-
-#ifdef __cplusplus
-}
-#endif /*__cplusplus*/
-
-/***************************************************************************/
-/***************************************************************************/
-/***************************************************************************/
-
-#ifdef __cplusplus
-//DLL C++ wrapper for C functions
-
-//---------------------------------------------------------------------------
-#include <string>
-#include <sstream>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoDLL
-{
-
- //---------------------------------------------------------------------------
- //MediaInfo_Char types
-#undef __T
-#define __T(__x) __T(__x)
-#if defined(UNICODE) || defined(_UNICODE)
- typedef wchar_t Char;
- #undef __T
- #define __T(__x) L ## __x
-#else
- typedef char Char;
- #undef __T
- #define __T(__x) __x
-#endif
- typedef std::basic_string<Char> String;
- typedef std::basic_stringstream<Char> StringStream;
- typedef std::basic_istringstream<Char> iStringStream;
- typedef std::basic_ostringstream<Char> oStringStream;
- typedef std::basic_istringstream<Char> tiStringStream; // Legacy
- typedef std::basic_ostringstream<Char> toStringStream; //Legacy
- const size_t Error = (size_t)(-1);
- //---------------------------------------------------------------------------
-
- //---------------------------------------------------------------------------
- /// @brief Kinds of Stream
- enum stream_t {
- Stream_General, ///< StreamKind = General
- Stream_Video, ///< StreamKind = Video
- Stream_Audio, ///< StreamKind = Audio
- Stream_Text, ///< StreamKind = Text
- Stream_Other, ///< StreamKind = Other
- Stream_Image, ///< StreamKind = Image
- Stream_Menu, ///< StreamKind = Menu
- Stream_Max
- };
-
- /// @brief Kind of information
- enum info_t {
- Info_Name, ///< InfoKind = Unique name of parameter
- Info_Text, ///< InfoKind = Value of parameter
- Info_Measure, ///< InfoKind = Unique name of measure unit of parameter
- Info_Options, ///< InfoKind = See infooptions_t
- Info_Name_Text, ///< InfoKind = Translated name of parameter
- Info_Measure_Text, ///< InfoKind = Translated name of measure unit
- Info_Info, ///< InfoKind = More information about the parameter
- Info_HowTo, ///< InfoKind = Information : how data is found
- Info_Max
- };
-
- /// Get(...)[infooptions_t] return a string like "YNYN..." \n
- /// Use this enum to know at what correspond the Y (Yes) or N (No)
- /// If Get(...)[0]==Y, then :
- /// @brief Option if InfoKind = Info_Options
- enum infooptions_t {
- InfoOption_ShowInInform, ///< Show this parameter in Inform()
- InfoOption_Reserved, ///<
- InfoOption_ShowInSupported, ///< Internal use only (info : Must be showed in Info_Capacities() )
- InfoOption_TypeOfValue, ///< Value return by a standard Get() can be : T (Text), I (Integer, warning up to 64 bits), F (Float), D (Date), B (Binary datas coded Base64) (Numbers are in Base 10)
- InfoOption_Max
- };
-
- /// @brief File opening options
- enum fileoptions_t {
- FileOption_Nothing = 0x00,
- FileOption_NoRecursive = 0x01, ///< Do not browse folders recursively
- FileOption_CloseAll = 0x02, ///< Close all files before open
- FileOption_Max = 0x04
- };
-
- const String Unable_Load_DLL = __T("Unable to load ")MEDIAINFODLL_NAME;
-#define MEDIAINFO_TEST_VOID \
- if (!MediaInfo_Module) {MediaInfoDLL_Load(); if (!MediaInfo_Module) return;}
-#define MEDIAINFO_TEST_INT \
- if (!MediaInfo_Module) {MediaInfoDLL_Load(); if (!MediaInfo_Module) return 0;}
-#define MEDIAINFO_TEST_STRING \
- if (!MediaInfo_Module) {MediaInfoDLL_Load(); if (!MediaInfo_Module) return Unable_Load_DLL;}
-#define MEDIAINFO_TEST_STRING_STATIC \
- if (!MediaInfo_Module) {MediaInfoDLL_Load(); if (!MediaInfo_Module) return Unable_Load_DLL;}
-
- //---------------------------------------------------------------------------
- class MediaInfo
- {
- public :
- MediaInfo() {if (!MediaInfo_Module) MediaInfoDLL_Load(); if (!MediaInfo_Module) {Handle = NULL; return;}; Handle = MediaInfo_New();};
- ~MediaInfo() {MEDIAINFO_TEST_VOID; MediaInfo_Delete(Handle);};
-
- //File
- size_t Open(const String &File) {MEDIAINFO_TEST_INT; return MediaInfo_Open(Handle, File.c_str());};
- size_t Open_Buffer_Init(MediaInfo_int64u File_Size = (MediaInfo_int64u) - 1, MediaInfo_int64u File_Offset = 0) {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Init(Handle, File_Size, File_Offset);};
- size_t Open_Buffer_Continue(MediaInfo_int8u* Buffer, size_t Buffer_Size) {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Continue(Handle, Buffer, Buffer_Size);};
- MediaInfo_int64u Open_Buffer_Continue_GoTo_Get() {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Continue_GoTo_Get(Handle);};
- size_t Open_Buffer_Finalize() {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Finalize(Handle);};
- size_t Open_NextPacket() {MEDIAINFO_TEST_INT; return MediaInfo_Open_NextPacket(Handle);};
- //size_t Save () {MEDIAINFO_TEST_INT; return MediaInfo_Save(Handle);};
- void Close() {MEDIAINFO_TEST_VOID; return MediaInfo_Close(Handle);};
-
- //General information
- String Inform() {MEDIAINFO_TEST_STRING; return MediaInfo_Inform(Handle, 0);};
- String Get(stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t InfoKind = Info_Text) {MEDIAINFO_TEST_STRING; return MediaInfo_GetI(Handle, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter, (MediaInfo_info_C)InfoKind);};
- String Get(stream_t StreamKind, size_t StreamNumber, const String &Parameter, info_t InfoKind = Info_Text, info_t SearchKind = Info_Name) {MEDIAINFO_TEST_STRING; return MediaInfo_Get(Handle, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter.c_str(), (MediaInfo_info_C)InfoKind, (MediaInfo_info_C)SearchKind);};
- //size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue=__T("")) {MEDIAINFO_TEST_INT; return MediaInfo_SetI (Handle, ToSet.c_str(), (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter, OldValue.c_str());};
- //size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue=__T("")) {MEDIAINFO_TEST_INT; return MediaInfo_Set (Handle, ToSet.c_str(), (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter.c_str(), OldValue.c_str());};
- size_t Output_Buffer_Get(const String &Value) {return MediaInfo_Output_Buffer_Get(Handle, Value.c_str());}
- size_t Output_Buffer_Get(size_t Pos) {return MediaInfo_Output_Buffer_GetI(Handle, Pos);}
- String Option(const String &Option, const String &Value = __T("")) {MEDIAINFO_TEST_STRING; return MediaInfo_Option(Handle, Option.c_str(), Value.c_str());};
- static String Option_Static(const String &Option, const String &Value = __T("")) {if (!MediaInfo_Module) MediaInfoDLL_Load(); MEDIAINFO_TEST_STRING_STATIC; return MediaInfo_Option(NULL, Option.c_str(), Value.c_str());};
- size_t State_Get() {MEDIAINFO_TEST_INT; return MediaInfo_State_Get(Handle);};
- size_t Count_Get(stream_t StreamKind, size_t StreamNumber = (size_t) - 1) {MEDIAINFO_TEST_INT; return MediaInfo_Count_Get(Handle, (MediaInfo_stream_C)StreamKind, StreamNumber);};
-
- bool IsReady() {return (Handle && MediaInfo_Module) ? true : false;}
-
- private :
- void* Handle;
- };
-
- class MediaInfoList
- {
- public :
- MediaInfoList() {MediaInfoDLL_Load(); if (!MediaInfoDLL_IsLoaded()) {Handle = NULL; return;}; Handle = MediaInfoList_New();};
- ~MediaInfoList() {MEDIAINFO_TEST_VOID; MediaInfoList_Delete(Handle); MediaInfoDLL_UnLoad();};
-
- //File
- size_t Open(const String &File, const fileoptions_t Options = FileOption_Nothing) {MEDIAINFO_TEST_INT; return MediaInfoList_Open(Handle, File.c_str(), (MediaInfo_fileoptions_C)Options);};
- //size_t Save (size_t FilePos) {MEDIAINFO_TEST_INT; return MediaInfoList_Save(Handle, FilePos);};
- void Close(size_t FilePos = (size_t) - 1) {MEDIAINFO_TEST_VOID; return MediaInfoList_Close(Handle, FilePos);};
-
- //General information
- String Inform(size_t FilePos = (size_t) - 1) {MEDIAINFO_TEST_STRING; return MediaInfoList_Inform(Handle, FilePos, 0);};
- String Get(size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t InfoKind = Info_Text) {MEDIAINFO_TEST_STRING; return MediaInfoList_GetI(Handle, FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter, (MediaInfo_info_C)InfoKind);};
- String Get(size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, info_t InfoKind = Info_Text, info_t SearchKind = Info_Name) {MEDIAINFO_TEST_STRING; return MediaInfoList_Get(Handle, FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter.c_str(), (MediaInfo_info_C)InfoKind, (MediaInfo_info_C)SearchKind);};
- //size_t Set (const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue=__T("")) {MEDIAINFO_TEST_INT; return MediaInfoList_SetI (Handle, ToSet.c_str(), FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter, OldValue.c_str());};
- //size_t Set (const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue=__T("")) {MEDIAINFO_TEST_INT; return MediaInfoList_Set (Handle, ToSet.c_str(), FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter.c_str(), OldValue.c_str());};
- String Option(const String &Option, const String &Value = __T("")) {MEDIAINFO_TEST_STRING; return MediaInfoList_Option(Handle, Option.c_str(), Value.c_str());};
- static String Option_Static(const String &Option, const String &Value = __T("")) {MEDIAINFO_TEST_STRING_STATIC; return MediaInfoList_Option(NULL, Option.c_str(), Value.c_str());};
- size_t State_Get() {MEDIAINFO_TEST_INT; return MediaInfoList_State_Get(Handle);};
- size_t Count_Get(size_t FilePos, stream_t StreamKind, size_t StreamNumber = (size_t) - 1) {MEDIAINFO_TEST_INT; return MediaInfoList_Count_Get(Handle, FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber);};
- size_t Count_Get() {MEDIAINFO_TEST_INT; return MediaInfoList_Count_Get_Files(Handle);};
-
- bool IsReady() {return (Handle && MediaInfo_Module) ? true : false;}
-
- private :
- void* Handle;
- };
-
-} //NameSpace
-#endif /*__cplusplus*/
-
-#endif
diff --git a/include/SubRenderIntf.h b/include/SubRenderIntf.h
index d248795a9..f9493c257 100644
--- a/include/SubRenderIntf.h
+++ b/include/SubRenderIntf.h
@@ -1,9 +1,10 @@
// ***************************************************************
-// SubRenderIntf.h version: 1.0.8 - date: 2014-03-06
+// SubRenderIntf.h version: 1.0.9 - date: 2015-10-10
// -------------------------------------------------------------
-// Copyright (C) 2011-2014, BSD license
+// Copyright (C) 2011-2015, BSD license
// ***************************************************************
+// 2015-10-10 1.0.9 added some optional information fields
// 2014-03-06 1.0.8 added ISubRenderConsumer2::Clear() interface/method
// 2014-03-05 1.0.7 auto-loading is now the provider's own responsibility
// 2013-07-01 1.0.6 added support for TV level subtitle transport
@@ -183,8 +184,9 @@ interface ISubRenderFrame;
// Base interface for both ISubRenderConsumer and ISubRenderProvider.
-[uuid("7CFD3728-235E-4430-9A2D-9F25F426BD70")]
-interface ISubRenderOptions : public IUnknown
+//[uuid("7CFD3728-235E-4430-9A2D-9F25F426BD70")]
+//interface ISubRenderOptions : public IUnknown
+DECLARE_INTERFACE_IID_(ISubRenderOptions, IUnknown, "7CFD3728-235E-4430-9A2D-9F25F426BD70")
{
// Allows one party to get information from the other party.
// The memory for strings and binary data is allocated by the callee
@@ -216,28 +218,33 @@ interface ISubRenderOptions : public IUnknown
// "field" must be zero terminated
// mandatory fields for consumers:
- // "name", LPWSTR, info, read only, get name / description of the consumer
- // "version", LPWSTR, info, read only, get version number of the consumer
- // "originalVideoSize", SIZE, info, read only, size of the video before scaling and AR adjustments
- // "arAdjustedVideoSize", SIZE, info, read only, size of the video after AR adjustments
- // "videoOutputRect", RECT, info, read only, final pos/size of the video after all scaling operations
- // "subtitleTargetRect", RECT, info, read only, consumer wish for where to place the subtitles
- // "frameRate", ULONGLONG, info, read only, frame rate of the video after deinterlacing (REFERENCE_TIME)
- // "refreshRate", double, info, read only, display refresh rate (0, if unknown)
+ // "name", LPWSTR, info, read only, get name / description of the consumer
+ // "version", LPWSTR, info, read only, get version number of the consumer
+ // "originalVideoSize", SIZE, info, read only, size of the video before scaling and AR adjustments
+ // "arAdjustedVideoSize", SIZE, info, read only, size of the video after AR adjustments
+ // "videoOutputRect", RECT, info, read only, final pos/size of the video after all scaling operations
+ // "subtitleTargetRect", RECT, info, read only, consumer wish for where to place the subtitles
+ // "frameRate", ULONGLONG, info, read only, frame rate of the video after deinterlacing (REFERENCE_TIME)
+ // "refreshRate", double, info, read only, display refresh rate (0, if unknown)
// mandatory fields for providers:
- // "name", LPWSTR, info, read only, get name / description of the provider
- // "version", LPWSTR, info, read only, get version number of the provider
- // "yuvMatrix", LPWSTR, info, read only, RGB Subtitles: "None" (fullrange); YCbCr Subtitles: "Levels.Matrix", Levels: TV|PC, Matrix: 601|709|240M|FCC|2020
- // "combineBitmaps", bool, option, write/read, must the provider combine all bitmaps into one? (default: false)
+ // "name", LPWSTR, info, read only, get name / description of the provider
+ // "version", LPWSTR, info, read only, get version number of the provider
+ // "yuvMatrix", LPWSTR, info, read only, RGB Subtitles: "None" (fullrange); YCbCr Subtitles: "Levels.Matrix", Levels: TV|PC, Matrix: 601|709|240M|FCC|2020
+ // "combineBitmaps", bool, option, write/read, must the provider combine all bitmaps into one? (default: false)
// optional fields for consumers:
- // "displayModeSize", SIZE, info, read only, display mode width/height
- // "yuvMatrix", LPWSTR, info, read only, RGB Video: "None" (fullrange); YCbCr Video: "Levels.Matrix", Levels: TV|PC, Matrix: 601|709|240M|FCC|2020
- // "supportedLevels", int, info, read only, 0: PC only (default); 1: PC+TV, no preference; 2: PC+TV, PC preferred; 3: PC+TV, TV preferred
+ // "videoCropRect", RECT, info, read only, crops "originalVideoSize" down, e.g. because of detected black bars
+ // croppedVideoOutputRect, RECT, info, read only, final pos/size of the "videoCropRect", after all scaling operations
+ // fullscreenRect, RECT, info, read only, for fullscreen drawing, this is the rect you want to stay in (left/top can be non-zero!)
+ // "displayModeSize", SIZE, info, read only, display mode width/height
+ // "yuvMatrix", LPWSTR, info, read only, RGB Video: "None" (fullrange); YCbCr Video: "Levels.Matrix", Levels: TV|PC, Matrix: 601|709|240M|FCC|2020
+ // "supportedLevels", int, info, read only, 0: PC only (default); 1: PC+TV, no preference; 2: PC+TV, PC preferred; 3: PC+TV, TV preferred
// optional fields for providers:
- // "outputLevels", LPWSTR, info, read only, are subtitles rendered/output in RGB "PC" (default) or "TV" levels?
+ // "outputLevels", LPWSTR, info, read only, are subtitles rendered/output in RGB "PC" (default) or "TV" levels?
+ // "isBitmap", bool, info, read only, are the subtitles bitmap based or text based?
+ // "isMovable", bool, info, read only, can the subtitles be repositioned safely?
};
// ---------------------------------------------------------------------------
@@ -246,8 +253,9 @@ interface ISubRenderOptions : public IUnknown
// This interface is exposed by every subtitle consumer.
-[uuid("9DF90966-FE9F-4F0E-881E-DAF8A572D900")]
-interface ISubRenderConsumer : public ISubRenderOptions
+//[uuid("9DF90966-FE9F-4F0E-881E-DAF8A572D900")]
+//interface ISubRenderConsumer : public ISubRenderOptions
+DECLARE_INTERFACE_IID_(ISubRenderConsumer, ISubRenderOptions, "9DF90966-FE9F-4F0E-881E-DAF8A572D900")
{
// Called by the subtitle renderer to ask the merit of the consumer.
// Recommended merits:
@@ -289,8 +297,9 @@ interface ISubRenderConsumer : public ISubRenderOptions
STDMETHOD(DeliverFrame)(REFERENCE_TIME start, REFERENCE_TIME stop, LPVOID context, ISubRenderFrame *subtitleFrame) = 0;
};
-[uuid("1A1737C8-2BF8-4BEA-97EA-3AB4FA8F7AC9")]
-interface ISubRenderConsumer2 : public ISubRenderConsumer
+//[uuid("1A1737C8-2BF8-4BEA-97EA-3AB4FA8F7AC9")]
+//interface ISubRenderConsumer2 : public ISubRenderConsumer
+DECLARE_INTERFACE_IID_(ISubRenderConsumer2, ISubRenderConsumer, "1A1737C8-2BF8-4BEA-97EA-3AB4FA8F7AC9")
{
// Called by the subtitle renderer e.g. when the user switches to a
// different subtitle track. The consumer should immediately release
@@ -306,8 +315,9 @@ interface ISubRenderConsumer2 : public ISubRenderConsumer
// The subtitle renderer provides the consumer with this interface, when
// calling the "ISubRenderConsumer.Connect()" method.
-[uuid("20752113-C883-455A-BA7B-ABA4E9115CA8")]
-interface ISubRenderProvider : public ISubRenderOptions
+//[uuid("20752113-C883-455A-BA7B-ABA4E9115CA8")]
+//interface ISubRenderProvider : public ISubRenderOptions
+DECLARE_INTERFACE_IID_(ISubRenderProvider, ISubRenderOptions, "20752113-C883-455A-BA7B-ABA4E9115CA8")
{
// Called by the consumer to request a rendered subtitle frame.
// The subtitle renderer will deliver the frame when it is completed, by
@@ -335,8 +345,9 @@ interface ISubRenderProvider : public ISubRenderOptions
// This interface is the reply to a consumer's frame render request.
-[uuid("81746AB5-9407-4B43-A014-1FAAC340F973")]
-interface ISubRenderFrame : public IUnknown
+//[uuid("81746AB5-9407-4B43-A014-1FAAC340F973")]
+//interface ISubRenderFrame : public IUnknown
+DECLARE_INTERFACE_IID_(ISubRenderFrame, IUnknown, "81746AB5-9407-4B43-A014-1FAAC340F973")
{
// "GetOutputRect()" specifies for which video rect the subtitles were
// rendered. If the subtitle renderer doesn't scale the subtitles at all,
diff --git a/include/dx/d3d.h b/include/dx/d3d.h
deleted file mode 100644
index 1cb8a966a..000000000
--- a/include/dx/d3d.h
+++ /dev/null
@@ -1,1688 +0,0 @@
-/*==========================================================================;
- *
- * Copyright (C) Microsoft Corporation. All Rights Reserved.
- *
- * File: d3d.h
- * Content: Direct3D include file
- *
- ****************************************************************************/
-
-#ifndef _D3D_H_
-#define _D3D_H_
-
-#ifndef DIRECT3D_VERSION
-#define DIRECT3D_VERSION 0x0700
-#endif
-
-// include this file content only if compiling for <=DX7 interfaces
-#if(DIRECT3D_VERSION < 0x0800)
-
-
-#include <stdlib.h>
-
-#define COM_NO_WINDOWS_H
-#include <objbase.h>
-
-#define D3DAPI WINAPI
-
-/*
- * Interface IID's
- */
-#if defined( _WIN32 ) && !defined( _NO_COM)
-DEFINE_GUID( IID_IDirect3D, 0x3BBA0080,0x2421,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 );
-#if(DIRECT3D_VERSION >= 0x0500)
-DEFINE_GUID( IID_IDirect3D2, 0x6aae1ec1,0x662a,0x11d0,0x88,0x9d,0x00,0xaa,0x00,0xbb,0xb7,0x6a);
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-#if(DIRECT3D_VERSION >= 0x0600)
-DEFINE_GUID( IID_IDirect3D3, 0xbb223240,0xe72b,0x11d0,0xa9,0xb4,0x00,0xaa,0x00,0xc0,0x99,0x3e);
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#if(DIRECT3D_VERSION >= 0x0700)
-DEFINE_GUID( IID_IDirect3D7, 0xf5049e77,0x4861,0x11d2,0xa4,0x7,0x0,0xa0,0xc9,0x6,0x29,0xa8);
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#if(DIRECT3D_VERSION >= 0x0500)
-DEFINE_GUID( IID_IDirect3DRampDevice, 0xF2086B20,0x259F,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 );
-DEFINE_GUID( IID_IDirect3DRGBDevice, 0xA4665C60,0x2673,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 );
-DEFINE_GUID( IID_IDirect3DHALDevice, 0x84E63dE0,0x46AA,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );
-DEFINE_GUID( IID_IDirect3DMMXDevice, 0x881949a1,0xd6f3,0x11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29 );
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-DEFINE_GUID( IID_IDirect3DRefDevice, 0x50936643, 0x13e9, 0x11d1, 0x89, 0xaa, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);
-DEFINE_GUID( IID_IDirect3DNullDevice, 0x8767df22, 0xbacc, 0x11d1, 0x89, 0x69, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#if(DIRECT3D_VERSION >= 0x0700)
-DEFINE_GUID( IID_IDirect3DTnLHalDevice, 0xf5049e78, 0x4861, 0x11d2, 0xa4, 0x7, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-/*
- * Internal Guid to distinguish requested MMX from MMX being used as an RGB rasterizer
- */
-
-DEFINE_GUID( IID_IDirect3DDevice, 0x64108800,0x957d,0X11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29 );
-#if(DIRECT3D_VERSION >= 0x0500)
-DEFINE_GUID( IID_IDirect3DDevice2, 0x93281501, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-#if(DIRECT3D_VERSION >= 0x0600)
-DEFINE_GUID( IID_IDirect3DDevice3, 0xb0ab3b60, 0x33d7, 0x11d1, 0xa9, 0x81, 0x0, 0xc0, 0x4f, 0xd7, 0xb1, 0x74);
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#if(DIRECT3D_VERSION >= 0x0700)
-DEFINE_GUID( IID_IDirect3DDevice7, 0xf5049e79, 0x4861, 0x11d2, 0xa4, 0x7, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-DEFINE_GUID( IID_IDirect3DTexture, 0x2CDCD9E0,0x25A0,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 );
-#if(DIRECT3D_VERSION >= 0x0500)
-DEFINE_GUID( IID_IDirect3DTexture2, 0x93281502, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-DEFINE_GUID( IID_IDirect3DLight, 0x4417C142,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );
-
-DEFINE_GUID( IID_IDirect3DMaterial, 0x4417C144,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );
-#if(DIRECT3D_VERSION >= 0x0500)
-DEFINE_GUID( IID_IDirect3DMaterial2, 0x93281503, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-#if(DIRECT3D_VERSION >= 0x0600)
-DEFINE_GUID( IID_IDirect3DMaterial3, 0xca9c46f4, 0xd3c5, 0x11d1, 0xb7, 0x5a, 0x0, 0x60, 0x8, 0x52, 0xb3, 0x12);
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-DEFINE_GUID( IID_IDirect3DExecuteBuffer,0x4417C145,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );
-DEFINE_GUID( IID_IDirect3DViewport, 0x4417C146,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );
-#if(DIRECT3D_VERSION >= 0x0500)
-DEFINE_GUID( IID_IDirect3DViewport2, 0x93281500, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-#if(DIRECT3D_VERSION >= 0x0600)
-DEFINE_GUID( IID_IDirect3DViewport3, 0xb0ab3b61, 0x33d7, 0x11d1, 0xa9, 0x81, 0x0, 0xc0, 0x4f, 0xd7, 0xb1, 0x74);
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#if(DIRECT3D_VERSION >= 0x0600)
-DEFINE_GUID( IID_IDirect3DVertexBuffer, 0x7a503555, 0x4a83, 0x11d1, 0xa5, 0xdb, 0x0, 0xa0, 0xc9, 0x3, 0x67, 0xf8);
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#if(DIRECT3D_VERSION >= 0x0700)
-DEFINE_GUID( IID_IDirect3DVertexBuffer7, 0xf5049e7d, 0x4861, 0x11d2, 0xa4, 0x7, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-#endif
-
-#ifdef __cplusplus
-struct IDirect3D;
-struct IDirect3DDevice;
-struct IDirect3DLight;
-struct IDirect3DMaterial;
-struct IDirect3DExecuteBuffer;
-struct IDirect3DTexture;
-struct IDirect3DViewport;
-typedef struct IDirect3D *LPDIRECT3D;
-typedef struct IDirect3DDevice *LPDIRECT3DDEVICE;
-typedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER;
-typedef struct IDirect3DLight *LPDIRECT3DLIGHT;
-typedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL;
-typedef struct IDirect3DTexture *LPDIRECT3DTEXTURE;
-typedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT;
-
-#if(DIRECT3D_VERSION >= 0x0500)
-struct IDirect3D2;
-struct IDirect3DDevice2;
-struct IDirect3DMaterial2;
-struct IDirect3DTexture2;
-struct IDirect3DViewport2;
-typedef struct IDirect3D2 *LPDIRECT3D2;
-typedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2;
-typedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2;
-typedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2;
-typedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2;
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-struct IDirect3D3;
-struct IDirect3DDevice3;
-struct IDirect3DMaterial3;
-struct IDirect3DViewport3;
-struct IDirect3DVertexBuffer;
-typedef struct IDirect3D3 *LPDIRECT3D3;
-typedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3;
-typedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3;
-typedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3;
-typedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER;
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION >= 0x0700)
-struct IDirect3D7;
-struct IDirect3DDevice7;
-struct IDirect3DVertexBuffer7;
-typedef struct IDirect3D7 *LPDIRECT3D7;
-typedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7;
-typedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7;
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#else
-
-typedef struct IDirect3D *LPDIRECT3D;
-typedef struct IDirect3DDevice *LPDIRECT3DDEVICE;
-typedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER;
-typedef struct IDirect3DLight *LPDIRECT3DLIGHT;
-typedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL;
-typedef struct IDirect3DTexture *LPDIRECT3DTEXTURE;
-typedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT;
-
-#if(DIRECT3D_VERSION >= 0x0500)
-typedef struct IDirect3D2 *LPDIRECT3D2;
-typedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2;
-typedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2;
-typedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2;
-typedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2;
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-typedef struct IDirect3D3 *LPDIRECT3D3;
-typedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3;
-typedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3;
-typedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3;
-typedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER;
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION >= 0x0700)
-typedef struct IDirect3D7 *LPDIRECT3D7;
-typedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7;
-typedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7;
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#endif
-
-#include "d3dtypes.h"
-#include "d3dcaps.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Direct3D interfaces
- */
-#undef INTERFACE
-#define INTERFACE IDirect3D
-
-DECLARE_INTERFACE_(IDirect3D, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3D methods ***/
- STDMETHOD(Initialize)(THIS_ REFCLSID) PURE;
- STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK,LPVOID) PURE;
- STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT*,IUnknown*) PURE;
- STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL*,IUnknown*) PURE;
- STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT*,IUnknown*) PURE;
- STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT) PURE;
-};
-
-typedef struct IDirect3D *LPDIRECT3D;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3D_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
-#define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)
-#define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)
-#define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
-#define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
-#define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)
-#else
-#define IDirect3D_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3D_AddRef(p) (p)->AddRef()
-#define IDirect3D_Release(p) (p)->Release()
-#define IDirect3D_Initialize(p,a) (p)->Initialize(a)
-#define IDirect3D_EnumDevices(p,a,b) (p)->EnumDevices(a,b)
-#define IDirect3D_CreateLight(p,a,b) (p)->CreateLight(a,b)
-#define IDirect3D_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
-#define IDirect3D_CreateViewport(p,a,b) (p)->CreateViewport(a,b)
-#define IDirect3D_FindDevice(p,a,b) (p)->FindDevice(a,b)
-#endif
-
-#if(DIRECT3D_VERSION >= 0x0500)
-#undef INTERFACE
-#define INTERFACE IDirect3D2
-
-DECLARE_INTERFACE_(IDirect3D2, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3D2 methods ***/
- STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK,LPVOID) PURE;
- STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT*,IUnknown*) PURE;
- STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL2*,IUnknown*) PURE;
- STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT2*,IUnknown*) PURE;
- STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT) PURE;
- STDMETHOD(CreateDevice)(THIS_ REFCLSID,LPDIRECTDRAWSURFACE,LPDIRECT3DDEVICE2*) PURE;
-};
-
-typedef struct IDirect3D2 *LPDIRECT3D2;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3D2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3D2_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3D2_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3D2_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)
-#define IDirect3D2_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)
-#define IDirect3D2_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
-#define IDirect3D2_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
-#define IDirect3D2_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)
-#define IDirect3D2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
-#else
-#define IDirect3D2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3D2_AddRef(p) (p)->AddRef()
-#define IDirect3D2_Release(p) (p)->Release()
-#define IDirect3D2_EnumDevices(p,a,b) (p)->EnumDevices(a,b)
-#define IDirect3D2_CreateLight(p,a,b) (p)->CreateLight(a,b)
-#define IDirect3D2_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
-#define IDirect3D2_CreateViewport(p,a,b) (p)->CreateViewport(a,b)
-#define IDirect3D2_FindDevice(p,a,b) (p)->FindDevice(a,b)
-#define IDirect3D2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-#undef INTERFACE
-#define INTERFACE IDirect3D3
-
-DECLARE_INTERFACE_(IDirect3D3, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3D3 methods ***/
- STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK,LPVOID) PURE;
- STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT*,LPUNKNOWN) PURE;
- STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL3*,LPUNKNOWN) PURE;
- STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT3*,LPUNKNOWN) PURE;
- STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT) PURE;
- STDMETHOD(CreateDevice)(THIS_ REFCLSID,LPDIRECTDRAWSURFACE4,LPDIRECT3DDEVICE3*,LPUNKNOWN) PURE;
- STDMETHOD(CreateVertexBuffer)(THIS_ LPD3DVERTEXBUFFERDESC,LPDIRECT3DVERTEXBUFFER*,DWORD,LPUNKNOWN) PURE;
- STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID,LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE;
- STDMETHOD(EvictManagedTextures)(THIS) PURE;
-};
-
-typedef struct IDirect3D3 *LPDIRECT3D3;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3D3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3D3_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3D3_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3D3_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)
-#define IDirect3D3_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)
-#define IDirect3D3_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
-#define IDirect3D3_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
-#define IDirect3D3_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)
-#define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->lpVtbl->CreateDevice(p,a,b,c,d)
-#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d)
-#define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)
-#define IDirect3D3_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p)
-#else
-#define IDirect3D3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3D3_AddRef(p) (p)->AddRef()
-#define IDirect3D3_Release(p) (p)->Release()
-#define IDirect3D3_EnumDevices(p,a,b) (p)->EnumDevices(a,b)
-#define IDirect3D3_CreateLight(p,a,b) (p)->CreateLight(a,b)
-#define IDirect3D3_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
-#define IDirect3D3_CreateViewport(p,a,b) (p)->CreateViewport(a,b)
-#define IDirect3D3_FindDevice(p,a,b) (p)->FindDevice(a,b)
-#define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->CreateDevice(a,b,c,d)
-#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->CreateVertexBuffer(a,b,c,d)
-#define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c)
-#define IDirect3D3_EvictManagedTextures(p) (p)->EvictManagedTextures()
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION >= 0x0700)
-#undef INTERFACE
-#define INTERFACE IDirect3D7
-
-DECLARE_INTERFACE_(IDirect3D7, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3D7 methods ***/
- STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK7,LPVOID) PURE;
- STDMETHOD(CreateDevice)(THIS_ REFCLSID,LPDIRECTDRAWSURFACE7,LPDIRECT3DDEVICE7*) PURE;
- STDMETHOD(CreateVertexBuffer)(THIS_ LPD3DVERTEXBUFFERDESC,LPDIRECT3DVERTEXBUFFER7*,DWORD) PURE;
- STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID,LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE;
- STDMETHOD(EvictManagedTextures)(THIS) PURE;
-};
-
-typedef struct IDirect3D7 *LPDIRECT3D7;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3D7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3D7_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3D7_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3D7_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)
-#define IDirect3D7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
-#define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c)
-#define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)
-#define IDirect3D7_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p)
-#else
-#define IDirect3D7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3D7_AddRef(p) (p)->AddRef()
-#define IDirect3D7_Release(p) (p)->Release()
-#define IDirect3D7_EnumDevices(p,a,b) (p)->EnumDevices(a,b)
-#define IDirect3D7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
-#define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->CreateVertexBuffer(a,b,c)
-#define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c)
-#define IDirect3D7_EvictManagedTextures(p) (p)->EvictManagedTextures()
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-/*
- * Direct3D Device interfaces
- */
-#undef INTERFACE
-#define INTERFACE IDirect3DDevice
-
-DECLARE_INTERFACE_(IDirect3DDevice, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DDevice methods ***/
- STDMETHOD(Initialize)(THIS_ LPDIRECT3D,LPGUID,LPD3DDEVICEDESC) PURE;
- STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC,LPD3DDEVICEDESC) PURE;
- STDMETHOD(SwapTextureHandles)(THIS_ LPDIRECT3DTEXTURE,LPDIRECT3DTEXTURE) PURE;
- STDMETHOD(CreateExecuteBuffer)(THIS_ LPD3DEXECUTEBUFFERDESC,LPDIRECT3DEXECUTEBUFFER*,IUnknown*) PURE;
- STDMETHOD(GetStats)(THIS_ LPD3DSTATS) PURE;
- STDMETHOD(Execute)(THIS_ LPDIRECT3DEXECUTEBUFFER,LPDIRECT3DVIEWPORT,DWORD) PURE;
- STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT) PURE;
- STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT) PURE;
- STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT,LPDIRECT3DVIEWPORT*,DWORD) PURE;
- STDMETHOD(Pick)(THIS_ LPDIRECT3DEXECUTEBUFFER,LPDIRECT3DVIEWPORT,DWORD,LPD3DRECT) PURE;
- STDMETHOD(GetPickRecords)(THIS_ LPDWORD,LPD3DPICKRECORD) PURE;
- STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK,LPVOID) PURE;
- STDMETHOD(CreateMatrix)(THIS_ LPD3DMATRIXHANDLE) PURE;
- STDMETHOD(SetMatrix)(THIS_ D3DMATRIXHANDLE,const LPD3DMATRIX) PURE;
- STDMETHOD(GetMatrix)(THIS_ D3DMATRIXHANDLE,LPD3DMATRIX) PURE;
- STDMETHOD(DeleteMatrix)(THIS_ D3DMATRIXHANDLE) PURE;
- STDMETHOD(BeginScene)(THIS) PURE;
- STDMETHOD(EndScene)(THIS) PURE;
- STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D*) PURE;
-};
-
-typedef struct IDirect3DDevice *LPDIRECT3DDEVICE;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DDevice_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DDevice_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
-#define IDirect3DDevice_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
-#define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b)
-#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->lpVtbl->CreateExecuteBuffer(p,a,b,c)
-#define IDirect3DDevice_GetStats(p,a) (p)->lpVtbl->GetStats(p,a)
-#define IDirect3DDevice_Execute(p,a,b,c) (p)->lpVtbl->Execute(p,a,b,c)
-#define IDirect3DDevice_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a)
-#define IDirect3DDevice_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a)
-#define IDirect3DDevice_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c)
-#define IDirect3DDevice_Pick(p,a,b,c,d) (p)->lpVtbl->Pick(p,a,b,c,d)
-#define IDirect3DDevice_GetPickRecords(p,a,b) (p)->lpVtbl->GetPickRecords(p,a,b)
-#define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)
-#define IDirect3DDevice_CreateMatrix(p,a) (p)->lpVtbl->CreateMatrix(p,a)
-#define IDirect3DDevice_SetMatrix(p,a,b) (p)->lpVtbl->SetMatrix(p,a,b)
-#define IDirect3DDevice_GetMatrix(p,a,b) (p)->lpVtbl->GetMatrix(p,a,b)
-#define IDirect3DDevice_DeleteMatrix(p,a) (p)->lpVtbl->DeleteMatrix(p,a)
-#define IDirect3DDevice_BeginScene(p) (p)->lpVtbl->BeginScene(p)
-#define IDirect3DDevice_EndScene(p) (p)->lpVtbl->EndScene(p)
-#define IDirect3DDevice_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
-#else
-#define IDirect3DDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DDevice_AddRef(p) (p)->AddRef()
-#define IDirect3DDevice_Release(p) (p)->Release()
-#define IDirect3DDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
-#define IDirect3DDevice_GetCaps(p,a,b) (p)->GetCaps(a,b)
-#define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b)
-#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->CreateExecuteBuffer(a,b,c)
-#define IDirect3DDevice_GetStats(p,a) (p)->GetStats(a)
-#define IDirect3DDevice_Execute(p,a,b,c) (p)->Execute(a,b,c)
-#define IDirect3DDevice_AddViewport(p,a) (p)->AddViewport(a)
-#define IDirect3DDevice_DeleteViewport(p,a) (p)->DeleteViewport(a)
-#define IDirect3DDevice_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c)
-#define IDirect3DDevice_Pick(p,a,b,c,d) (p)->Pick(a,b,c,d)
-#define IDirect3DDevice_GetPickRecords(p,a,b) (p)->GetPickRecords(a,b)
-#define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)
-#define IDirect3DDevice_CreateMatrix(p,a) (p)->CreateMatrix(a)
-#define IDirect3DDevice_SetMatrix(p,a,b) (p)->SetMatrix(a,b)
-#define IDirect3DDevice_GetMatrix(p,a,b) (p)->GetMatrix(a,b)
-#define IDirect3DDevice_DeleteMatrix(p,a) (p)->DeleteMatrix(a)
-#define IDirect3DDevice_BeginScene(p) (p)->BeginScene()
-#define IDirect3DDevice_EndScene(p) (p)->EndScene()
-#define IDirect3DDevice_GetDirect3D(p,a) (p)->GetDirect3D(a)
-#endif
-
-#if(DIRECT3D_VERSION >= 0x0500)
-#undef INTERFACE
-#define INTERFACE IDirect3DDevice2
-
-DECLARE_INTERFACE_(IDirect3DDevice2, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DDevice2 methods ***/
- STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC,LPD3DDEVICEDESC) PURE;
- STDMETHOD(SwapTextureHandles)(THIS_ LPDIRECT3DTEXTURE2,LPDIRECT3DTEXTURE2) PURE;
- STDMETHOD(GetStats)(THIS_ LPD3DSTATS) PURE;
- STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT2) PURE;
- STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT2) PURE;
- STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT2,LPDIRECT3DVIEWPORT2*,DWORD) PURE;
- STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK,LPVOID) PURE;
- STDMETHOD(BeginScene)(THIS) PURE;
- STDMETHOD(EndScene)(THIS) PURE;
- STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D2*) PURE;
- STDMETHOD(SetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT2) PURE;
- STDMETHOD(GetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT2 *) PURE;
- STDMETHOD(SetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE,DWORD) PURE;
- STDMETHOD(GetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE *) PURE;
- STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,DWORD) PURE;
- STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,DWORD) PURE;
- STDMETHOD(Vertex)(THIS_ LPVOID) PURE;
- STDMETHOD(Index)(THIS_ WORD) PURE;
- STDMETHOD(End)(THIS_ DWORD) PURE;
- STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,LPDWORD) PURE;
- STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE;
- STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE,LPDWORD) PURE;
- STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE,DWORD) PURE;
- STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;
- STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;
- STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;
- STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,DWORD) PURE;
- STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,LPWORD,DWORD,DWORD) PURE;
- STDMETHOD(SetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;
- STDMETHOD(GetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;
-};
-
-typedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DDevice2_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DDevice2_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DDevice2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
-#define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b)
-#define IDirect3DDevice2_GetStats(p,a) (p)->lpVtbl->GetStats(p,a)
-#define IDirect3DDevice2_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a)
-#define IDirect3DDevice2_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a)
-#define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c)
-#define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)
-#define IDirect3DDevice2_BeginScene(p) (p)->lpVtbl->BeginScene(p)
-#define IDirect3DDevice2_EndScene(p) (p)->lpVtbl->EndScene(p)
-#define IDirect3DDevice2_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
-#define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a)
-#define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a)
-#define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
-#define IDirect3DDevice2_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)
-#define IDirect3DDevice2_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c)
-#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)
-#define IDirect3DDevice2_Vertex(p,a) (p)->lpVtbl->Vertex(p,a)
-#define IDirect3DDevice2_Index(p,a) (p)->lpVtbl->Index(p,a)
-#define IDirect3DDevice2_End(p,a) (p)->lpVtbl->End(p,a)
-#define IDirect3DDevice2_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
-#define IDirect3DDevice2_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
-#define IDirect3DDevice2_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b)
-#define IDirect3DDevice2_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b)
-#define IDirect3DDevice2_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
-#define IDirect3DDevice2_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
-#define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
-#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)
-#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)
-#define IDirect3DDevice2_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
-#define IDirect3DDevice2_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
-#else
-#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DDevice2_AddRef(p) (p)->AddRef()
-#define IDirect3DDevice2_Release(p) (p)->Release()
-#define IDirect3DDevice2_GetCaps(p,a,b) (p)->GetCaps(a,b)
-#define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b)
-#define IDirect3DDevice2_GetStats(p,a) (p)->GetStats(a)
-#define IDirect3DDevice2_AddViewport(p,a) (p)->AddViewport(a)
-#define IDirect3DDevice2_DeleteViewport(p,a) (p)->DeleteViewport(a)
-#define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c)
-#define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)
-#define IDirect3DDevice2_BeginScene(p) (p)->BeginScene()
-#define IDirect3DDevice2_EndScene(p) (p)->EndScene()
-#define IDirect3DDevice2_GetDirect3D(p,a) (p)->GetDirect3D(a)
-#define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a)
-#define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a)
-#define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
-#define IDirect3DDevice2_GetRenderTarget(p,a) (p)->GetRenderTarget(a)
-#define IDirect3DDevice2_Begin(p,a,b,c) (p)->Begin(a,b,c)
-#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e)
-#define IDirect3DDevice2_Vertex(p,a) (p)->Vertex(a)
-#define IDirect3DDevice2_Index(p,a) (p)->Index(a)
-#define IDirect3DDevice2_End(p,a) (p)->End(a)
-#define IDirect3DDevice2_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
-#define IDirect3DDevice2_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
-#define IDirect3DDevice2_GetLightState(p,a,b) (p)->GetLightState(a,b)
-#define IDirect3DDevice2_SetLightState(p,a,b) (p)->SetLightState(a,b)
-#define IDirect3DDevice2_SetTransform(p,a,b) (p)->SetTransform(a,b)
-#define IDirect3DDevice2_GetTransform(p,a,b) (p)->GetTransform(a,b)
-#define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
-#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e)
-#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)
-#define IDirect3DDevice2_SetClipStatus(p,a) (p)->SetClipStatus(a)
-#define IDirect3DDevice2_GetClipStatus(p,a) (p)->GetClipStatus(a)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-#undef INTERFACE
-#define INTERFACE IDirect3DDevice3
-
-DECLARE_INTERFACE_(IDirect3DDevice3, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DDevice3 methods ***/
- STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC,LPD3DDEVICEDESC) PURE;
- STDMETHOD(GetStats)(THIS_ LPD3DSTATS) PURE;
- STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT3) PURE;
- STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT3) PURE;
- STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT3,LPDIRECT3DVIEWPORT3*,DWORD) PURE;
- STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE;
- STDMETHOD(BeginScene)(THIS) PURE;
- STDMETHOD(EndScene)(THIS) PURE;
- STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D3*) PURE;
- STDMETHOD(SetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT3) PURE;
- STDMETHOD(GetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT3 *) PURE;
- STDMETHOD(SetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE4,DWORD) PURE;
- STDMETHOD(GetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE4 *) PURE;
- STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE,DWORD,DWORD) PURE;
- STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD) PURE;
- STDMETHOD(Vertex)(THIS_ LPVOID) PURE;
- STDMETHOD(Index)(THIS_ WORD) PURE;
- STDMETHOD(End)(THIS_ DWORD) PURE;
- STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,LPDWORD) PURE;
- STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE;
- STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE,LPDWORD) PURE;
- STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE,DWORD) PURE;
- STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;
- STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;
- STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;
- STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD) PURE;
- STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,LPWORD,DWORD,DWORD) PURE;
- STDMETHOD(SetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;
- STDMETHOD(GetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;
- STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,DWORD) PURE;
- STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPWORD,DWORD,DWORD) PURE;
- STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER,DWORD,DWORD,DWORD) PURE;
- STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER,LPWORD,DWORD,DWORD) PURE;
- STDMETHOD(ComputeSphereVisibility)(THIS_ LPD3DVECTOR,LPD3DVALUE,DWORD,DWORD,LPDWORD) PURE;
- STDMETHOD(GetTexture)(THIS_ DWORD,LPDIRECT3DTEXTURE2 *) PURE;
- STDMETHOD(SetTexture)(THIS_ DWORD,LPDIRECT3DTEXTURE2) PURE;
- STDMETHOD(GetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,LPDWORD) PURE;
- STDMETHOD(SetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,DWORD) PURE;
- STDMETHOD(ValidateDevice)(THIS_ LPDWORD) PURE;
-};
-
-typedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DDevice3_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DDevice3_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DDevice3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
-#define IDirect3DDevice3_GetStats(p,a) (p)->lpVtbl->GetStats(p,a)
-#define IDirect3DDevice3_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a)
-#define IDirect3DDevice3_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a)
-#define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c)
-#define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)
-#define IDirect3DDevice3_BeginScene(p) (p)->lpVtbl->BeginScene(p)
-#define IDirect3DDevice3_EndScene(p) (p)->lpVtbl->EndScene(p)
-#define IDirect3DDevice3_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
-#define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a)
-#define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a)
-#define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
-#define IDirect3DDevice3_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)
-#define IDirect3DDevice3_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c)
-#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)
-#define IDirect3DDevice3_Vertex(p,a) (p)->lpVtbl->Vertex(p,a)
-#define IDirect3DDevice3_Index(p,a) (p)->lpVtbl->Index(p,a)
-#define IDirect3DDevice3_End(p,a) (p)->lpVtbl->End(p,a)
-#define IDirect3DDevice3_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
-#define IDirect3DDevice3_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
-#define IDirect3DDevice3_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b)
-#define IDirect3DDevice3_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b)
-#define IDirect3DDevice3_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
-#define IDirect3DDevice3_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
-#define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
-#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)
-#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)
-#define IDirect3DDevice3_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
-#define IDirect3DDevice3_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
-#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)
-#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)
-#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)
-#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e)
-#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)
-#define IDirect3DDevice3_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
-#define IDirect3DDevice3_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
-#define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
-#define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
-#define IDirect3DDevice3_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
-#else
-#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DDevice3_AddRef(p) (p)->AddRef()
-#define IDirect3DDevice3_Release(p) (p)->Release()
-#define IDirect3DDevice3_GetCaps(p,a,b) (p)->GetCaps(a,b)
-#define IDirect3DDevice3_GetStats(p,a) (p)->GetStats(a)
-#define IDirect3DDevice3_AddViewport(p,a) (p)->AddViewport(a)
-#define IDirect3DDevice3_DeleteViewport(p,a) (p)->DeleteViewport(a)
-#define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c)
-#define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)
-#define IDirect3DDevice3_BeginScene(p) (p)->BeginScene()
-#define IDirect3DDevice3_EndScene(p) (p)->EndScene()
-#define IDirect3DDevice3_GetDirect3D(p,a) (p)->GetDirect3D(a)
-#define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a)
-#define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a)
-#define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
-#define IDirect3DDevice3_GetRenderTarget(p,a) (p)->GetRenderTarget(a)
-#define IDirect3DDevice3_Begin(p,a,b,c) (p)->Begin(a,b,c)
-#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e)
-#define IDirect3DDevice3_Vertex(p,a) (p)->Vertex(a)
-#define IDirect3DDevice3_Index(p,a) (p)->Index(a)
-#define IDirect3DDevice3_End(p,a) (p)->End(a)
-#define IDirect3DDevice3_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
-#define IDirect3DDevice3_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
-#define IDirect3DDevice3_GetLightState(p,a,b) (p)->GetLightState(a,b)
-#define IDirect3DDevice3_SetLightState(p,a,b) (p)->SetLightState(a,b)
-#define IDirect3DDevice3_SetTransform(p,a,b) (p)->SetTransform(a,b)
-#define IDirect3DDevice3_GetTransform(p,a,b) (p)->GetTransform(a,b)
-#define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
-#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e)
-#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)
-#define IDirect3DDevice3_SetClipStatus(p,a) (p)->SetClipStatus(a)
-#define IDirect3DDevice3_GetClipStatus(p,a) (p)->GetClipStatus(a)
-#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e)
-#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)
-#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e)
-#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e)
-#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e)
-#define IDirect3DDevice3_GetTexture(p,a,b) (p)->GetTexture(a,b)
-#define IDirect3DDevice3_SetTexture(p,a,b) (p)->SetTexture(a,b)
-#define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
-#define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
-#define IDirect3DDevice3_ValidateDevice(p,a) (p)->ValidateDevice(a)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION >= 0x0700)
-#undef INTERFACE
-#define INTERFACE IDirect3DDevice7
-
-DECLARE_INTERFACE_(IDirect3DDevice7, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DDevice7 methods ***/
- STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC7) PURE;
- STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE;
- STDMETHOD(BeginScene)(THIS) PURE;
- STDMETHOD(EndScene)(THIS) PURE;
- STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D7*) PURE;
- STDMETHOD(SetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE7,DWORD) PURE;
- STDMETHOD(GetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE7 *) PURE;
- STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD,D3DCOLOR,D3DVALUE,DWORD) PURE;
- STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;
- STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;
- STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT7) PURE;
- STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;
- STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT7) PURE;
- STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL7) PURE;
- STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL7) PURE;
- STDMETHOD(SetLight)(THIS_ DWORD,LPD3DLIGHT7) PURE;
- STDMETHOD(GetLight)(THIS_ DWORD,LPD3DLIGHT7) PURE;
- STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE;
- STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,LPDWORD) PURE;
- STDMETHOD(BeginStateBlock)(THIS) PURE;
- STDMETHOD(EndStateBlock)(THIS_ LPDWORD) PURE;
- STDMETHOD(PreLoad)(THIS_ LPDIRECTDRAWSURFACE7) PURE;
- STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD) PURE;
- STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,LPWORD,DWORD,DWORD) PURE;
- STDMETHOD(SetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;
- STDMETHOD(GetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;
- STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,DWORD) PURE;
- STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPWORD,DWORD,DWORD) PURE;
- STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER7,DWORD,DWORD,DWORD) PURE;
- STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER7,DWORD,DWORD,LPWORD,DWORD,DWORD) PURE;
- STDMETHOD(ComputeSphereVisibility)(THIS_ LPD3DVECTOR,LPD3DVALUE,DWORD,DWORD,LPDWORD) PURE;
- STDMETHOD(GetTexture)(THIS_ DWORD,LPDIRECTDRAWSURFACE7 *) PURE;
- STDMETHOD(SetTexture)(THIS_ DWORD,LPDIRECTDRAWSURFACE7) PURE;
- STDMETHOD(GetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,LPDWORD) PURE;
- STDMETHOD(SetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,DWORD) PURE;
- STDMETHOD(ValidateDevice)(THIS_ LPDWORD) PURE;
- STDMETHOD(ApplyStateBlock)(THIS_ DWORD) PURE;
- STDMETHOD(CaptureStateBlock)(THIS_ DWORD) PURE;
- STDMETHOD(DeleteStateBlock)(THIS_ DWORD) PURE;
- STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE,LPDWORD) PURE;
- STDMETHOD(Load)(THIS_ LPDIRECTDRAWSURFACE7,LPPOINT,LPDIRECTDRAWSURFACE7,LPRECT,DWORD) PURE;
- STDMETHOD(LightEnable)(THIS_ DWORD,BOOL) PURE;
- STDMETHOD(GetLightEnable)(THIS_ DWORD,BOOL*) PURE;
- STDMETHOD(SetClipPlane)(THIS_ DWORD,D3DVALUE*) PURE;
- STDMETHOD(GetClipPlane)(THIS_ DWORD,D3DVALUE*) PURE;
- STDMETHOD(GetInfo)(THIS_ DWORD,LPVOID,DWORD) PURE;
-};
-
-typedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DDevice7_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DDevice7_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DDevice7_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
-#define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)
-#define IDirect3DDevice7_BeginScene(p) (p)->lpVtbl->BeginScene(p)
-#define IDirect3DDevice7_EndScene(p) (p)->lpVtbl->EndScene(p)
-#define IDirect3DDevice7_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
-#define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
-#define IDirect3DDevice7_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)
-#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
-#define IDirect3DDevice7_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
-#define IDirect3DDevice7_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
-#define IDirect3DDevice7_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
-#define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
-#define IDirect3DDevice7_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
-#define IDirect3DDevice7_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
-#define IDirect3DDevice7_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
-#define IDirect3DDevice7_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
-#define IDirect3DDevice7_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)
-#define IDirect3DDevice7_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
-#define IDirect3DDevice7_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
-#define IDirect3DDevice7_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)
-#define IDirect3DDevice7_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)
-#define IDirect3DDevice7_PreLoad(p,a) (p)->lpVtbl->PreLoad(p,a)
-#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)
-#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)
-#define IDirect3DDevice7_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
-#define IDirect3DDevice7_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
-#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)
-#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)
-#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)
-#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g)
-#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)
-#define IDirect3DDevice7_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
-#define IDirect3DDevice7_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
-#define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
-#define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
-#define IDirect3DDevice7_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
-#define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a)
-#define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a)
-#define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a)
-#define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)
-#define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)
-#define IDirect3DDevice7_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)
-#define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)
-#define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)
-#define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)
-#define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c)
-#else
-#define IDirect3DDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DDevice7_AddRef(p) (p)->AddRef()
-#define IDirect3DDevice7_Release(p) (p)->Release()
-#define IDirect3DDevice7_GetCaps(p,a) (p)->GetCaps(a)
-#define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)
-#define IDirect3DDevice7_BeginScene(p) (p)->BeginScene()
-#define IDirect3DDevice7_EndScene(p) (p)->EndScene()
-#define IDirect3DDevice7_GetDirect3D(p,a) (p)->GetDirect3D(a)
-#define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
-#define IDirect3DDevice7_GetRenderTarget(p,a) (p)->GetRenderTarget(a)
-#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)
-#define IDirect3DDevice7_SetTransform(p,a,b) (p)->SetTransform(a,b)
-#define IDirect3DDevice7_GetTransform(p,a,b) (p)->GetTransform(a,b)
-#define IDirect3DDevice7_SetViewport(p,a) (p)->SetViewport(a)
-#define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
-#define IDirect3DDevice7_GetViewport(p,a) (p)->GetViewport(a)
-#define IDirect3DDevice7_SetMaterial(p,a) (p)->SetMaterial(a)
-#define IDirect3DDevice7_GetMaterial(p,a) (p)->GetMaterial(a)
-#define IDirect3DDevice7_SetLight(p,a,b) (p)->SetLight(a,b)
-#define IDirect3DDevice7_GetLight(p,a,b) (p)->GetLight(a,b)
-#define IDirect3DDevice7_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
-#define IDirect3DDevice7_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
-#define IDirect3DDevice7_BeginStateBlock(p) (p)->BeginStateBlock()
-#define IDirect3DDevice7_EndStateBlock(p,a) (p)->EndStateBlock(a)
-#define IDirect3DDevice7_PreLoad(p,a) (p)->PreLoad(a)
-#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e)
-#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)
-#define IDirect3DDevice7_SetClipStatus(p,a) (p)->SetClipStatus(a)
-#define IDirect3DDevice7_GetClipStatus(p,a) (p)->GetClipStatus(a)
-#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e)
-#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)
-#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e)
-#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e,f,g)
-#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e)
-#define IDirect3DDevice7_GetTexture(p,a,b) (p)->GetTexture(a,b)
-#define IDirect3DDevice7_SetTexture(p,a,b) (p)->SetTexture(a,b)
-#define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
-#define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
-#define IDirect3DDevice7_ValidateDevice(p,a) (p)->ValidateDevice(a)
-#define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a)
-#define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a)
-#define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a)
-#define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)
-#define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)
-#define IDirect3DDevice7_LightEnable(p,a,b) (p)->LightEnable(a,b)
-#define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)
-#define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)
-#define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)
-#define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-/*
- * Execute Buffer interface
- */
-#undef INTERFACE
-#define INTERFACE IDirect3DExecuteBuffer
-
-DECLARE_INTERFACE_(IDirect3DExecuteBuffer, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DExecuteBuffer methods ***/
- STDMETHOD(Initialize)(THIS_ LPDIRECT3DDEVICE,LPD3DEXECUTEBUFFERDESC) PURE;
- STDMETHOD(Lock)(THIS_ LPD3DEXECUTEBUFFERDESC) PURE;
- STDMETHOD(Unlock)(THIS) PURE;
- STDMETHOD(SetExecuteData)(THIS_ LPD3DEXECUTEDATA) PURE;
- STDMETHOD(GetExecuteData)(THIS_ LPD3DEXECUTEDATA) PURE;
- STDMETHOD(Validate)(THIS_ LPDWORD,LPD3DVALIDATECALLBACK,LPVOID,DWORD) PURE;
- STDMETHOD(Optimize)(THIS_ DWORD) PURE;
-};
-
-typedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DExecuteBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DExecuteBuffer_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
-#define IDirect3DExecuteBuffer_Lock(p,a) (p)->lpVtbl->Lock(p,a)
-#define IDirect3DExecuteBuffer_Unlock(p) (p)->lpVtbl->Unlock(p)
-#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->lpVtbl->SetExecuteData(p,a)
-#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->lpVtbl->GetExecuteData(p,a)
-#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->lpVtbl->Validate(p,a,b,c,d)
-#define IDirect3DExecuteBuffer_Optimize(p,a) (p)->lpVtbl->Optimize(p,a)
-#else
-#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DExecuteBuffer_AddRef(p) (p)->AddRef()
-#define IDirect3DExecuteBuffer_Release(p) (p)->Release()
-#define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->Initialize(a,b)
-#define IDirect3DExecuteBuffer_Lock(p,a) (p)->Lock(a)
-#define IDirect3DExecuteBuffer_Unlock(p) (p)->Unlock()
-#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->SetExecuteData(a)
-#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->GetExecuteData(a)
-#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->Validate(a,b,c,d)
-#define IDirect3DExecuteBuffer_Optimize(p,a) (p)->Optimize(a)
-#endif
-
-/*
- * Light interfaces
- */
-#undef INTERFACE
-#define INTERFACE IDirect3DLight
-
-DECLARE_INTERFACE_(IDirect3DLight, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DLight methods ***/
- STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;
- STDMETHOD(SetLight)(THIS_ LPD3DLIGHT) PURE;
- STDMETHOD(GetLight)(THIS_ LPD3DLIGHT) PURE;
-};
-
-typedef struct IDirect3DLight *LPDIRECT3DLIGHT;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DLight_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DLight_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DLight_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DLight_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
-#define IDirect3DLight_SetLight(p,a) (p)->lpVtbl->SetLight(p,a)
-#define IDirect3DLight_GetLight(p,a) (p)->lpVtbl->GetLight(p,a)
-#else
-#define IDirect3DLight_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DLight_AddRef(p) (p)->AddRef()
-#define IDirect3DLight_Release(p) (p)->Release()
-#define IDirect3DLight_Initialize(p,a) (p)->Initialize(a)
-#define IDirect3DLight_SetLight(p,a) (p)->SetLight(a)
-#define IDirect3DLight_GetLight(p,a) (p)->GetLight(a)
-#endif
-
-/*
- * Material interfaces
- */
-#undef INTERFACE
-#define INTERFACE IDirect3DMaterial
-
-DECLARE_INTERFACE_(IDirect3DMaterial, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DMaterial methods ***/
- STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;
- STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL) PURE;
- STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL) PURE;
- STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE,LPD3DMATERIALHANDLE) PURE;
- STDMETHOD(Reserve)(THIS) PURE;
- STDMETHOD(Unreserve)(THIS) PURE;
-};
-
-typedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DMaterial_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DMaterial_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DMaterial_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
-#define IDirect3DMaterial_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
-#define IDirect3DMaterial_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
-#define IDirect3DMaterial_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
-#define IDirect3DMaterial_Reserve(p) (p)->lpVtbl->Reserve(p)
-#define IDirect3DMaterial_Unreserve(p) (p)->lpVtbl->Unreserve(p)
-#else
-#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DMaterial_AddRef(p) (p)->AddRef()
-#define IDirect3DMaterial_Release(p) (p)->Release()
-#define IDirect3DMaterial_Initialize(p,a) (p)->Initialize(a)
-#define IDirect3DMaterial_SetMaterial(p,a) (p)->SetMaterial(a)
-#define IDirect3DMaterial_GetMaterial(p,a) (p)->GetMaterial(a)
-#define IDirect3DMaterial_GetHandle(p,a,b) (p)->GetHandle(a,b)
-#define IDirect3DMaterial_Reserve(p) (p)->Reserve()
-#define IDirect3DMaterial_Unreserve(p) (p)->Unreserve()
-#endif
-
-#if(DIRECT3D_VERSION >= 0x0500)
-#undef INTERFACE
-#define INTERFACE IDirect3DMaterial2
-
-DECLARE_INTERFACE_(IDirect3DMaterial2, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DMaterial2 methods ***/
- STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL) PURE;
- STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL) PURE;
- STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE2,LPD3DMATERIALHANDLE) PURE;
-};
-
-typedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DMaterial2_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DMaterial2_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DMaterial2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
-#define IDirect3DMaterial2_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
-#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
-#else
-#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DMaterial2_AddRef(p) (p)->AddRef()
-#define IDirect3DMaterial2_Release(p) (p)->Release()
-#define IDirect3DMaterial2_SetMaterial(p,a) (p)->SetMaterial(a)
-#define IDirect3DMaterial2_GetMaterial(p,a) (p)->GetMaterial(a)
-#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->GetHandle(a,b)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-#undef INTERFACE
-#define INTERFACE IDirect3DMaterial3
-
-DECLARE_INTERFACE_(IDirect3DMaterial3, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DMaterial3 methods ***/
- STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL) PURE;
- STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL) PURE;
- STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE3,LPD3DMATERIALHANDLE) PURE;
-};
-
-typedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DMaterial3_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DMaterial3_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DMaterial3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
-#define IDirect3DMaterial3_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
-#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
-#else
-#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DMaterial3_AddRef(p) (p)->AddRef()
-#define IDirect3DMaterial3_Release(p) (p)->Release()
-#define IDirect3DMaterial3_SetMaterial(p,a) (p)->SetMaterial(a)
-#define IDirect3DMaterial3_GetMaterial(p,a) (p)->GetMaterial(a)
-#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->GetHandle(a,b)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-/*
- * Texture interfaces
- */
-#undef INTERFACE
-#define INTERFACE IDirect3DTexture
-
-DECLARE_INTERFACE_(IDirect3DTexture, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DTexture methods ***/
- STDMETHOD(Initialize)(THIS_ LPDIRECT3DDEVICE,LPDIRECTDRAWSURFACE) PURE;
- STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE,LPD3DTEXTUREHANDLE) PURE;
- STDMETHOD(PaletteChanged)(THIS_ DWORD,DWORD) PURE;
- STDMETHOD(Load)(THIS_ LPDIRECT3DTEXTURE) PURE;
- STDMETHOD(Unload)(THIS) PURE;
-};
-
-typedef struct IDirect3DTexture *LPDIRECT3DTEXTURE;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DTexture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DTexture_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DTexture_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DTexture_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
-#define IDirect3DTexture_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
-#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)
-#define IDirect3DTexture_Load(p,a) (p)->lpVtbl->Load(p,a)
-#define IDirect3DTexture_Unload(p) (p)->lpVtbl->Unload(p)
-#else
-#define IDirect3DTexture_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DTexture_AddRef(p) (p)->AddRef()
-#define IDirect3DTexture_Release(p) (p)->Release()
-#define IDirect3DTexture_Initialize(p,a,b) (p)->Initialize(a,b)
-#define IDirect3DTexture_GetHandle(p,a,b) (p)->GetHandle(a,b)
-#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)
-#define IDirect3DTexture_Load(p,a) (p)->Load(a)
-#define IDirect3DTexture_Unload(p) (p)->Unload()
-#endif
-
-#if(DIRECT3D_VERSION >= 0x0500)
-#undef INTERFACE
-#define INTERFACE IDirect3DTexture2
-
-DECLARE_INTERFACE_(IDirect3DTexture2, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DTexture2 methods ***/
- STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE2,LPD3DTEXTUREHANDLE) PURE;
- STDMETHOD(PaletteChanged)(THIS_ DWORD,DWORD) PURE;
- STDMETHOD(Load)(THIS_ LPDIRECT3DTEXTURE2) PURE;
-};
-
-typedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DTexture2_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DTexture2_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DTexture2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
-#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)
-#define IDirect3DTexture2_Load(p,a) (p)->lpVtbl->Load(p,a)
-#else
-#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DTexture2_AddRef(p) (p)->AddRef()
-#define IDirect3DTexture2_Release(p) (p)->Release()
-#define IDirect3DTexture2_GetHandle(p,a,b) (p)->GetHandle(a,b)
-#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)
-#define IDirect3DTexture2_Load(p,a) (p)->Load(a)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-/*
- * Viewport interfaces
- */
-#undef INTERFACE
-#define INTERFACE IDirect3DViewport
-
-DECLARE_INTERFACE_(IDirect3DViewport, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DViewport methods ***/
- STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;
- STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT) PURE;
- STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT) PURE;
- STDMETHOD(TransformVertices)(THIS_ DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD) PURE;
- STDMETHOD(LightElements)(THIS_ DWORD,LPD3DLIGHTDATA) PURE;
- STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE) PURE;
- STDMETHOD(GetBackground)(THIS_ LPD3DMATERIALHANDLE,LPBOOL) PURE;
- STDMETHOD(SetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
- STDMETHOD(GetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*,LPBOOL) PURE;
- STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD) PURE;
- STDMETHOD(AddLight)(THIS_ LPDIRECT3DLIGHT) PURE;
- STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DLIGHT) PURE;
- STDMETHOD(NextLight)(THIS_ LPDIRECT3DLIGHT,LPDIRECT3DLIGHT*,DWORD) PURE;
-};
-
-typedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DViewport_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DViewport_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DViewport_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DViewport_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
-#define IDirect3DViewport_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
-#define IDirect3DViewport_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
-#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)
-#define IDirect3DViewport_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b)
-#define IDirect3DViewport_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a)
-#define IDirect3DViewport_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b)
-#define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a)
-#define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b)
-#define IDirect3DViewport_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c)
-#define IDirect3DViewport_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)
-#define IDirect3DViewport_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)
-#define IDirect3DViewport_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c)
-#else
-#define IDirect3DViewport_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DViewport_AddRef(p) (p)->AddRef()
-#define IDirect3DViewport_Release(p) (p)->Release()
-#define IDirect3DViewport_Initialize(p,a) (p)->Initialize(a)
-#define IDirect3DViewport_GetViewport(p,a) (p)->GetViewport(a)
-#define IDirect3DViewport_SetViewport(p,a) (p)->SetViewport(a)
-#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)
-#define IDirect3DViewport_LightElements(p,a,b) (p)->LightElements(a,b)
-#define IDirect3DViewport_SetBackground(p,a) (p)->SetBackground(a)
-#define IDirect3DViewport_GetBackground(p,a,b) (p)->GetBackground(a,b)
-#define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a)
-#define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b)
-#define IDirect3DViewport_Clear(p,a,b,c) (p)->Clear(a,b,c)
-#define IDirect3DViewport_AddLight(p,a) (p)->AddLight(a)
-#define IDirect3DViewport_DeleteLight(p,a) (p)->DeleteLight(a)
-#define IDirect3DViewport_NextLight(p,a,b,c) (p)->NextLight(a,b,c)
-#endif
-
-#if(DIRECT3D_VERSION >= 0x0500)
-#undef INTERFACE
-#define INTERFACE IDirect3DViewport2
-
-DECLARE_INTERFACE_(IDirect3DViewport2, IDirect3DViewport)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DViewport methods ***/
- STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;
- STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT) PURE;
- STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT) PURE;
- STDMETHOD(TransformVertices)(THIS_ DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD) PURE;
- STDMETHOD(LightElements)(THIS_ DWORD,LPD3DLIGHTDATA) PURE;
- STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE) PURE;
- STDMETHOD(GetBackground)(THIS_ LPD3DMATERIALHANDLE,LPBOOL) PURE;
- STDMETHOD(SetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
- STDMETHOD(GetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*,LPBOOL) PURE;
- STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD) PURE;
- STDMETHOD(AddLight)(THIS_ LPDIRECT3DLIGHT) PURE;
- STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DLIGHT) PURE;
- STDMETHOD(NextLight)(THIS_ LPDIRECT3DLIGHT,LPDIRECT3DLIGHT*,DWORD) PURE;
- STDMETHOD(GetViewport2)(THIS_ LPD3DVIEWPORT2) PURE;
- STDMETHOD(SetViewport2)(THIS_ LPD3DVIEWPORT2) PURE;
-};
-
-typedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DViewport2_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DViewport2_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DViewport2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
-#define IDirect3DViewport2_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
-#define IDirect3DViewport2_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
-#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)
-#define IDirect3DViewport2_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b)
-#define IDirect3DViewport2_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a)
-#define IDirect3DViewport2_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b)
-#define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a)
-#define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b)
-#define IDirect3DViewport2_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c)
-#define IDirect3DViewport2_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)
-#define IDirect3DViewport2_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)
-#define IDirect3DViewport2_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c)
-#define IDirect3DViewport2_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)
-#define IDirect3DViewport2_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)
-#else
-#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DViewport2_AddRef(p) (p)->AddRef()
-#define IDirect3DViewport2_Release(p) (p)->Release()
-#define IDirect3DViewport2_Initialize(p,a) (p)->Initialize(a)
-#define IDirect3DViewport2_GetViewport(p,a) (p)->GetViewport(a)
-#define IDirect3DViewport2_SetViewport(p,a) (p)->SetViewport(a)
-#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)
-#define IDirect3DViewport2_LightElements(p,a,b) (p)->LightElements(a,b)
-#define IDirect3DViewport2_SetBackground(p,a) (p)->SetBackground(a)
-#define IDirect3DViewport2_GetBackground(p,a,b) (p)->GetBackground(a,b)
-#define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a)
-#define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b)
-#define IDirect3DViewport2_Clear(p,a,b,c) (p)->Clear(a,b,c)
-#define IDirect3DViewport2_AddLight(p,a) (p)->AddLight(a)
-#define IDirect3DViewport2_DeleteLight(p,a) (p)->DeleteLight(a)
-#define IDirect3DViewport2_NextLight(p,a,b,c) (p)->NextLight(a,b,c)
-#define IDirect3DViewport2_GetViewport2(p,a) (p)->GetViewport2(a)
-#define IDirect3DViewport2_SetViewport2(p,a) (p)->SetViewport2(a)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-
-#undef INTERFACE
-#define INTERFACE IDirect3DViewport3
-
-DECLARE_INTERFACE_(IDirect3DViewport3, IDirect3DViewport2)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DViewport2 methods ***/
- STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;
- STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT) PURE;
- STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT) PURE;
- STDMETHOD(TransformVertices)(THIS_ DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD) PURE;
- STDMETHOD(LightElements)(THIS_ DWORD,LPD3DLIGHTDATA) PURE;
- STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE) PURE;
- STDMETHOD(GetBackground)(THIS_ LPD3DMATERIALHANDLE,LPBOOL) PURE;
- STDMETHOD(SetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
- STDMETHOD(GetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*,LPBOOL) PURE;
- STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD) PURE;
- STDMETHOD(AddLight)(THIS_ LPDIRECT3DLIGHT) PURE;
- STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DLIGHT) PURE;
- STDMETHOD(NextLight)(THIS_ LPDIRECT3DLIGHT,LPDIRECT3DLIGHT*,DWORD) PURE;
- STDMETHOD(GetViewport2)(THIS_ LPD3DVIEWPORT2) PURE;
- STDMETHOD(SetViewport2)(THIS_ LPD3DVIEWPORT2) PURE;
- STDMETHOD(SetBackgroundDepth2)(THIS_ LPDIRECTDRAWSURFACE4) PURE;
- STDMETHOD(GetBackgroundDepth2)(THIS_ LPDIRECTDRAWSURFACE4*,LPBOOL) PURE;
- STDMETHOD(Clear2)(THIS_ DWORD,LPD3DRECT,DWORD,D3DCOLOR,D3DVALUE,DWORD) PURE;
-};
-
-typedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DViewport3_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DViewport3_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DViewport3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
-#define IDirect3DViewport3_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
-#define IDirect3DViewport3_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
-#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)
-#define IDirect3DViewport3_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b)
-#define IDirect3DViewport3_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a)
-#define IDirect3DViewport3_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b)
-#define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a)
-#define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b)
-#define IDirect3DViewport3_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c)
-#define IDirect3DViewport3_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)
-#define IDirect3DViewport3_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)
-#define IDirect3DViewport3_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c)
-#define IDirect3DViewport3_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)
-#define IDirect3DViewport3_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)
-#define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->lpVtbl->SetBackgroundDepth2(p,a)
-#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->lpVtbl->GetBackgroundDepth2(p,a,b)
-#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->lpVtbl->Clear2(p,a,b,c,d,e,f)
-#else
-#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DViewport3_AddRef(p) (p)->AddRef()
-#define IDirect3DViewport3_Release(p) (p)->Release()
-#define IDirect3DViewport3_Initialize(p,a) (p)->Initialize(a)
-#define IDirect3DViewport3_GetViewport(p,a) (p)->GetViewport(a)
-#define IDirect3DViewport3_SetViewport(p,a) (p)->SetViewport(a)
-#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)
-#define IDirect3DViewport3_LightElements(p,a,b) (p)->LightElements(a,b)
-#define IDirect3DViewport3_SetBackground(p,a) (p)->SetBackground(a)
-#define IDirect3DViewport3_GetBackground(p,a,b) (p)->GetBackground(a,b)
-#define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a)
-#define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b)
-#define IDirect3DViewport3_Clear(p,a,b,c) (p)->Clear(a,b,c)
-#define IDirect3DViewport3_AddLight(p,a) (p)->AddLight(a)
-#define IDirect3DViewport3_DeleteLight(p,a) (p)->DeleteLight(a)
-#define IDirect3DViewport3_NextLight(p,a,b,c) (p)->NextLight(a,b,c)
-#define IDirect3DViewport3_GetViewport2(p,a) (p)->GetViewport2(a)
-#define IDirect3DViewport3_SetViewport2(p,a) (p)->SetViewport2(a)
-#define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->SetBackgroundDepth2(a)
-#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->GetBackgroundDepth2(a,b)
-#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->Clear2(a,b,c,d,e,f)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-#undef INTERFACE
-#define INTERFACE IDirect3DVertexBuffer
-
-DECLARE_INTERFACE_(IDirect3DVertexBuffer, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DVertexBuffer methods ***/
- STDMETHOD(Lock)(THIS_ DWORD,LPVOID*,LPDWORD) PURE;
- STDMETHOD(Unlock)(THIS) PURE;
- STDMETHOD(ProcessVertices)(THIS_ DWORD,DWORD,DWORD,LPDIRECT3DVERTEXBUFFER,DWORD,LPDIRECT3DDEVICE3,DWORD) PURE;
- STDMETHOD(GetVertexBufferDesc)(THIS_ LPD3DVERTEXBUFFERDESC) PURE;
- STDMETHOD(Optimize)(THIS_ LPDIRECT3DDEVICE3,DWORD) PURE;
-};
-
-typedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DVertexBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DVertexBuffer_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c)
-#define IDirect3DVertexBuffer_Unlock(p) (p)->lpVtbl->Unlock(p)
-#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)
-#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a)
-#define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b)
-#else
-#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DVertexBuffer_AddRef(p) (p)->AddRef()
-#define IDirect3DVertexBuffer_Release(p) (p)->Release()
-#define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->Lock(a,b,c)
-#define IDirect3DVertexBuffer_Unlock(p) (p)->Unlock()
-#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g)
-#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a)
-#define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->Optimize(a,b)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION >= 0x0700)
-#undef INTERFACE
-#define INTERFACE IDirect3DVertexBuffer7
-
-DECLARE_INTERFACE_(IDirect3DVertexBuffer7, IUnknown)
-{
- /*** IUnknown methods ***/
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- /*** IDirect3DVertexBuffer7 methods ***/
- STDMETHOD(Lock)(THIS_ DWORD,LPVOID*,LPDWORD) PURE;
- STDMETHOD(Unlock)(THIS) PURE;
- STDMETHOD(ProcessVertices)(THIS_ DWORD,DWORD,DWORD,LPDIRECT3DVERTEXBUFFER7,DWORD,LPDIRECT3DDEVICE7,DWORD) PURE;
- STDMETHOD(GetVertexBufferDesc)(THIS_ LPD3DVERTEXBUFFERDESC) PURE;
- STDMETHOD(Optimize)(THIS_ LPDIRECT3DDEVICE7,DWORD) PURE;
- STDMETHOD(ProcessVerticesStrided)(THIS_ DWORD,DWORD,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPDIRECT3DDEVICE7,DWORD) PURE;
-};
-
-typedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7;
-
-#if !defined(__cplusplus) || defined(CINTERFACE)
-#define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirect3DVertexBuffer7_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirect3DVertexBuffer7_Release(p) (p)->lpVtbl->Release(p)
-#define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c)
-#define IDirect3DVertexBuffer7_Unlock(p) (p)->lpVtbl->Unlock(p)
-#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)
-#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a)
-#define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b)
-#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVerticesStrided(p,a,b,c,d,e,f,g)
-#else
-#define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
-#define IDirect3DVertexBuffer7_AddRef(p) (p)->AddRef()
-#define IDirect3DVertexBuffer7_Release(p) (p)->Release()
-#define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->Lock(a,b,c)
-#define IDirect3DVertexBuffer7_Unlock(p) (p)->Unlock()
-#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g)
-#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a)
-#define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->Optimize(a,b)
-#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->ProcessVerticesStrided(a,b,c,d,e,f,g)
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#if(DIRECT3D_VERSION >= 0x0500)
-/****************************************************************************
- *
- * Flags for IDirect3DDevice::NextViewport
- *
- ****************************************************************************/
-
-/*
- * Return the next viewport
- */
-#define D3DNEXT_NEXT 0x00000001l
-
-/*
- * Return the first viewport
- */
-#define D3DNEXT_HEAD 0x00000002l
-
-/*
- * Return the last viewport
- */
-#define D3DNEXT_TAIL 0x00000004l
-
-
-/****************************************************************************
- *
- * Flags for DrawPrimitive/DrawIndexedPrimitive
- * Also valid for Begin/BeginIndexed
- * Also valid for VertexBuffer::CreateVertexBuffer
- ****************************************************************************/
-
-/*
- * Wait until the device is ready to draw the primitive
- * This will cause DP to not return DDERR_WASSTILLDRAWING
- */
-#define D3DDP_WAIT 0x00000001l
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if (DIRECT3D_VERSION == 0x0500)
-/*
- * Hint that it is acceptable to render the primitive out of order.
- */
-#define D3DDP_OUTOFORDER 0x00000002l
-#endif
-
-
-#if(DIRECT3D_VERSION >= 0x0500)
-/*
- * Hint that the primitives have been clipped by the application.
- */
-#define D3DDP_DONOTCLIP 0x00000004l
-
-/*
- * Hint that the extents need not be updated.
- */
-#define D3DDP_DONOTUPDATEEXTENTS 0x00000008l
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-
-/*
- * Hint that the lighting should not be applied on vertices.
- */
-
-#define D3DDP_DONOTLIGHT 0x00000010l
-
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-/*
- * Direct3D Errors
- * DirectDraw error codes are used when errors not specified here.
- */
-#define D3D_OK DD_OK
-#define D3DERR_BADMAJORVERSION MAKE_DDHRESULT(700)
-#define D3DERR_BADMINORVERSION MAKE_DDHRESULT(701)
-
-#if(DIRECT3D_VERSION >= 0x0500)
-/*
- * An invalid device was requested by the application.
- */
-#define D3DERR_INVALID_DEVICE MAKE_DDHRESULT(705)
-#define D3DERR_INITFAILED MAKE_DDHRESULT(706)
-
-/*
- * SetRenderTarget attempted on a device that was
- * QI'd off the render target.
- */
-#define D3DERR_DEVICEAGGREGATED MAKE_DDHRESULT(707)
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#define D3DERR_EXECUTE_CREATE_FAILED MAKE_DDHRESULT(710)
-#define D3DERR_EXECUTE_DESTROY_FAILED MAKE_DDHRESULT(711)
-#define D3DERR_EXECUTE_LOCK_FAILED MAKE_DDHRESULT(712)
-#define D3DERR_EXECUTE_UNLOCK_FAILED MAKE_DDHRESULT(713)
-#define D3DERR_EXECUTE_LOCKED MAKE_DDHRESULT(714)
-#define D3DERR_EXECUTE_NOT_LOCKED MAKE_DDHRESULT(715)
-
-#define D3DERR_EXECUTE_FAILED MAKE_DDHRESULT(716)
-#define D3DERR_EXECUTE_CLIPPED_FAILED MAKE_DDHRESULT(717)
-
-#define D3DERR_TEXTURE_NO_SUPPORT MAKE_DDHRESULT(720)
-#define D3DERR_TEXTURE_CREATE_FAILED MAKE_DDHRESULT(721)
-#define D3DERR_TEXTURE_DESTROY_FAILED MAKE_DDHRESULT(722)
-#define D3DERR_TEXTURE_LOCK_FAILED MAKE_DDHRESULT(723)
-#define D3DERR_TEXTURE_UNLOCK_FAILED MAKE_DDHRESULT(724)
-#define D3DERR_TEXTURE_LOAD_FAILED MAKE_DDHRESULT(725)
-#define D3DERR_TEXTURE_SWAP_FAILED MAKE_DDHRESULT(726)
-#define D3DERR_TEXTURE_LOCKED MAKE_DDHRESULT(727)
-#define D3DERR_TEXTURE_NOT_LOCKED MAKE_DDHRESULT(728)
-#define D3DERR_TEXTURE_GETSURF_FAILED MAKE_DDHRESULT(729)
-
-#define D3DERR_MATRIX_CREATE_FAILED MAKE_DDHRESULT(730)
-#define D3DERR_MATRIX_DESTROY_FAILED MAKE_DDHRESULT(731)
-#define D3DERR_MATRIX_SETDATA_FAILED MAKE_DDHRESULT(732)
-#define D3DERR_MATRIX_GETDATA_FAILED MAKE_DDHRESULT(733)
-#define D3DERR_SETVIEWPORTDATA_FAILED MAKE_DDHRESULT(734)
-
-#if(DIRECT3D_VERSION >= 0x0500)
-#define D3DERR_INVALIDCURRENTVIEWPORT MAKE_DDHRESULT(735)
-#define D3DERR_INVALIDPRIMITIVETYPE MAKE_DDHRESULT(736)
-#define D3DERR_INVALIDVERTEXTYPE MAKE_DDHRESULT(737)
-#define D3DERR_TEXTURE_BADSIZE MAKE_DDHRESULT(738)
-#define D3DERR_INVALIDRAMPTEXTURE MAKE_DDHRESULT(739)
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#define D3DERR_MATERIAL_CREATE_FAILED MAKE_DDHRESULT(740)
-#define D3DERR_MATERIAL_DESTROY_FAILED MAKE_DDHRESULT(741)
-#define D3DERR_MATERIAL_SETDATA_FAILED MAKE_DDHRESULT(742)
-#define D3DERR_MATERIAL_GETDATA_FAILED MAKE_DDHRESULT(743)
-
-#if(DIRECT3D_VERSION >= 0x0500)
-#define D3DERR_INVALIDPALETTE MAKE_DDHRESULT(744)
-
-#define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY MAKE_DDHRESULT(745)
-#define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY MAKE_DDHRESULT(746)
-#define D3DERR_SURFACENOTINVIDMEM MAKE_DDHRESULT(747)
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#define D3DERR_LIGHT_SET_FAILED MAKE_DDHRESULT(750)
-#if(DIRECT3D_VERSION >= 0x0500)
-#define D3DERR_LIGHTHASVIEWPORT MAKE_DDHRESULT(751)
-#define D3DERR_LIGHTNOTINTHISVIEWPORT MAKE_DDHRESULT(752)
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#define D3DERR_SCENE_IN_SCENE MAKE_DDHRESULT(760)
-#define D3DERR_SCENE_NOT_IN_SCENE MAKE_DDHRESULT(761)
-#define D3DERR_SCENE_BEGIN_FAILED MAKE_DDHRESULT(762)
-#define D3DERR_SCENE_END_FAILED MAKE_DDHRESULT(763)
-
-#if(DIRECT3D_VERSION >= 0x0500)
-#define D3DERR_INBEGIN MAKE_DDHRESULT(770)
-#define D3DERR_NOTINBEGIN MAKE_DDHRESULT(771)
-#define D3DERR_NOVIEWPORTS MAKE_DDHRESULT(772)
-#define D3DERR_VIEWPORTDATANOTSET MAKE_DDHRESULT(773)
-#define D3DERR_VIEWPORTHASNODEVICE MAKE_DDHRESULT(774)
-#define D3DERR_NOCURRENTVIEWPORT MAKE_DDHRESULT(775)
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-#define D3DERR_INVALIDVERTEXFORMAT MAKE_DDHRESULT(2048)
-
-/*
- * Attempted to CreateTexture on a surface that had a color key
- */
-#define D3DERR_COLORKEYATTACHED MAKE_DDHRESULT(2050)
-
-#define D3DERR_VERTEXBUFFEROPTIMIZED MAKE_DDHRESULT(2060)
-#define D3DERR_VBUF_CREATE_FAILED MAKE_DDHRESULT(2061)
-#define D3DERR_VERTEXBUFFERLOCKED MAKE_DDHRESULT(2062)
-#define D3DERR_VERTEXBUFFERUNLOCKFAILED MAKE_DDHRESULT(2063)
-
-#define D3DERR_ZBUFFER_NOTPRESENT MAKE_DDHRESULT(2070)
-#define D3DERR_STENCILBUFFER_NOTPRESENT MAKE_DDHRESULT(2071)
-
-#define D3DERR_WRONGTEXTUREFORMAT MAKE_DDHRESULT(2072)
-#define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_DDHRESULT(2073)
-#define D3DERR_UNSUPPORTEDCOLORARG MAKE_DDHRESULT(2074)
-#define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_DDHRESULT(2075)
-#define D3DERR_UNSUPPORTEDALPHAARG MAKE_DDHRESULT(2076)
-#define D3DERR_TOOMANYOPERATIONS MAKE_DDHRESULT(2077)
-#define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_DDHRESULT(2078)
-#define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_DDHRESULT(2079)
-#define D3DERR_CONFLICTINGRENDERSTATE MAKE_DDHRESULT(2081)
-#define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_DDHRESULT(2082)
-#define D3DERR_TOOMANYPRIMITIVES MAKE_DDHRESULT(2083)
-#define D3DERR_INVALIDMATRIX MAKE_DDHRESULT(2084)
-#define D3DERR_TOOMANYVERTICES MAKE_DDHRESULT(2085)
-#define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_DDHRESULT(2086)
-
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION >= 0x0700)
-#define D3DERR_INVALIDSTATEBLOCK MAKE_DDHRESULT(2100)
-#define D3DERR_INBEGINSTATEBLOCK MAKE_DDHRESULT(2101)
-#define D3DERR_NOTINBEGINSTATEBLOCK MAKE_DDHRESULT(2102)
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* (DIRECT3D_VERSION < 0x0800) */
-#endif /* _D3D_H_ */
-
diff --git a/include/dx/d3dcaps.h b/include/dx/d3dcaps.h
deleted file mode 100644
index 701bf9c13..000000000
--- a/include/dx/d3dcaps.h
+++ /dev/null
@@ -1,601 +0,0 @@
-/*==========================================================================;
- *
- * Copyright (C) Microsoft Corporation. All Rights Reserved.
- *
- * File: d3dcaps.h
- * Content: Direct3D capabilities include file
- *
- ***************************************************************************/
-
-#ifndef _D3DCAPS_H
-#define _D3DCAPS_H
-
-/*
- * Pull in DirectDraw include file automatically:
- */
-#include "ddraw.h"
-
-#ifndef DIRECT3D_VERSION
-#define DIRECT3D_VERSION 0x0700
-#endif
-
-#if defined(_X86_) || defined(_IA64_)
-#pragma pack(4)
-#endif
-
-/* Description of capabilities of transform */
-
-typedef struct _D3DTRANSFORMCAPS {
- DWORD dwSize;
- DWORD dwCaps;
-} D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS;
-
-#define D3DTRANSFORMCAPS_CLIP 0x00000001L /* Will clip whilst transforming */
-
-/* Description of capabilities of lighting */
-
-typedef struct _D3DLIGHTINGCAPS {
- DWORD dwSize;
- DWORD dwCaps; /* Lighting caps */
- DWORD dwLightingModel; /* Lighting model - RGB or mono */
- DWORD dwNumLights; /* Number of lights that can be handled */
-} D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS;
-
-#define D3DLIGHTINGMODEL_RGB 0x00000001L
-#define D3DLIGHTINGMODEL_MONO 0x00000002L
-
-#define D3DLIGHTCAPS_POINT 0x00000001L /* Point lights supported */
-#define D3DLIGHTCAPS_SPOT 0x00000002L /* Spot lights supported */
-#define D3DLIGHTCAPS_DIRECTIONAL 0x00000004L /* Directional lights supported */
-#if(DIRECT3D_VERSION < 0x700)
-#define D3DLIGHTCAPS_PARALLELPOINT 0x00000008L /* Parallel point lights supported */
-#endif
-#if(DIRECT3D_VERSION < 0x500)
-#define D3DLIGHTCAPS_GLSPOT 0x00000010L /* GL syle spot lights supported */
-#endif
-
-/* Description of capabilities for each primitive type */
-
-typedef struct _D3DPrimCaps {
- DWORD dwSize;
- DWORD dwMiscCaps; /* Capability flags */
- DWORD dwRasterCaps;
- DWORD dwZCmpCaps;
- DWORD dwSrcBlendCaps;
- DWORD dwDestBlendCaps;
- DWORD dwAlphaCmpCaps;
- DWORD dwShadeCaps;
- DWORD dwTextureCaps;
- DWORD dwTextureFilterCaps;
- DWORD dwTextureBlendCaps;
- DWORD dwTextureAddressCaps;
- DWORD dwStippleWidth; /* maximum width and height of */
- DWORD dwStippleHeight; /* of supported stipple (up to 32x32) */
-} D3DPRIMCAPS, *LPD3DPRIMCAPS;
-
-/* D3DPRIMCAPS dwMiscCaps */
-
-#define D3DPMISCCAPS_MASKPLANES 0x00000001L
-#define D3DPMISCCAPS_MASKZ 0x00000002L
-#define D3DPMISCCAPS_LINEPATTERNREP 0x00000004L
-#define D3DPMISCCAPS_CONFORMANT 0x00000008L
-#define D3DPMISCCAPS_CULLNONE 0x00000010L
-#define D3DPMISCCAPS_CULLCW 0x00000020L
-#define D3DPMISCCAPS_CULLCCW 0x00000040L
-
-/* D3DPRIMCAPS dwRasterCaps */
-
-#define D3DPRASTERCAPS_DITHER 0x00000001L
-#define D3DPRASTERCAPS_ROP2 0x00000002L
-#define D3DPRASTERCAPS_XOR 0x00000004L
-#define D3DPRASTERCAPS_PAT 0x00000008L
-#define D3DPRASTERCAPS_ZTEST 0x00000010L
-#define D3DPRASTERCAPS_SUBPIXEL 0x00000020L
-#define D3DPRASTERCAPS_SUBPIXELX 0x00000040L
-#define D3DPRASTERCAPS_FOGVERTEX 0x00000080L
-#define D3DPRASTERCAPS_FOGTABLE 0x00000100L
-#define D3DPRASTERCAPS_STIPPLE 0x00000200L
-#if(DIRECT3D_VERSION >= 0x0500)
-#define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT 0x00000400L
-#define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT 0x00000800L
-#define D3DPRASTERCAPS_ANTIALIASEDGES 0x00001000L
-#define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000L
-#define D3DPRASTERCAPS_ZBIAS 0x00004000L
-#define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000L
-#define D3DPRASTERCAPS_FOGRANGE 0x00010000L
-#define D3DPRASTERCAPS_ANISOTROPY 0x00020000L
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-#if(DIRECT3D_VERSION >= 0x0600)
-#define D3DPRASTERCAPS_WBUFFER 0x00040000L
-#define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT 0x00080000L
-#define D3DPRASTERCAPS_WFOG 0x00100000L
-#define D3DPRASTERCAPS_ZFOG 0x00200000L
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-/* D3DPRIMCAPS dwZCmpCaps, dwAlphaCmpCaps */
-
-#define D3DPCMPCAPS_NEVER 0x00000001L
-#define D3DPCMPCAPS_LESS 0x00000002L
-#define D3DPCMPCAPS_EQUAL 0x00000004L
-#define D3DPCMPCAPS_LESSEQUAL 0x00000008L
-#define D3DPCMPCAPS_GREATER 0x00000010L
-#define D3DPCMPCAPS_NOTEQUAL 0x00000020L
-#define D3DPCMPCAPS_GREATEREQUAL 0x00000040L
-#define D3DPCMPCAPS_ALWAYS 0x00000080L
-
-/* D3DPRIMCAPS dwSourceBlendCaps, dwDestBlendCaps */
-
-#define D3DPBLENDCAPS_ZERO 0x00000001L
-#define D3DPBLENDCAPS_ONE 0x00000002L
-#define D3DPBLENDCAPS_SRCCOLOR 0x00000004L
-#define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008L
-#define D3DPBLENDCAPS_SRCALPHA 0x00000010L
-#define D3DPBLENDCAPS_INVSRCALPHA 0x00000020L
-#define D3DPBLENDCAPS_DESTALPHA 0x00000040L
-#define D3DPBLENDCAPS_INVDESTALPHA 0x00000080L
-#define D3DPBLENDCAPS_DESTCOLOR 0x00000100L
-#define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200L
-#define D3DPBLENDCAPS_SRCALPHASAT 0x00000400L
-#define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800L
-#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000L
-
-/* D3DPRIMCAPS dwShadeCaps */
-
-#define D3DPSHADECAPS_COLORFLATMONO 0x00000001L
-#define D3DPSHADECAPS_COLORFLATRGB 0x00000002L
-#define D3DPSHADECAPS_COLORGOURAUDMONO 0x00000004L
-#define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008L
-#define D3DPSHADECAPS_COLORPHONGMONO 0x00000010L
-#define D3DPSHADECAPS_COLORPHONGRGB 0x00000020L
-
-#define D3DPSHADECAPS_SPECULARFLATMONO 0x00000040L
-#define D3DPSHADECAPS_SPECULARFLATRGB 0x00000080L
-#define D3DPSHADECAPS_SPECULARGOURAUDMONO 0x00000100L
-#define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200L
-#define D3DPSHADECAPS_SPECULARPHONGMONO 0x00000400L
-#define D3DPSHADECAPS_SPECULARPHONGRGB 0x00000800L
-
-#define D3DPSHADECAPS_ALPHAFLATBLEND 0x00001000L
-#define D3DPSHADECAPS_ALPHAFLATSTIPPLED 0x00002000L
-#define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000L
-#define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED 0x00008000L
-#define D3DPSHADECAPS_ALPHAPHONGBLEND 0x00010000L
-#define D3DPSHADECAPS_ALPHAPHONGSTIPPLED 0x00020000L
-
-#define D3DPSHADECAPS_FOGFLAT 0x00040000L
-#define D3DPSHADECAPS_FOGGOURAUD 0x00080000L
-#define D3DPSHADECAPS_FOGPHONG 0x00100000L
-
-/* D3DPRIMCAPS dwTextureCaps */
-
-/*
- * Perspective-correct texturing is supported
- */
-#define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001L
-
-/*
- * Power-of-2 texture dimensions are required
- */
-#define D3DPTEXTURECAPS_POW2 0x00000002L
-
-/*
- * Alpha in texture pixels is supported
- */
-#define D3DPTEXTURECAPS_ALPHA 0x00000004L
-
-/*
- * Color-keyed textures are supported
- */
-#define D3DPTEXTURECAPS_TRANSPARENCY 0x00000008L
-
-/*
- * obsolete, see D3DPTADDRESSCAPS_BORDER
- */
-#define D3DPTEXTURECAPS_BORDER 0x00000010L
-
-/*
- * Only square textures are supported
- */
-#define D3DPTEXTURECAPS_SQUAREONLY 0x00000020L
-
-#if(DIRECT3D_VERSION >= 0x0600)
-/*
- * Texture indices are not scaled by the texture size prior
- * to interpolation.
- */
-#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L
-
-/*
- * Device can draw alpha from texture palettes
- */
-#define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080L
-
-/*
- * Device can use non-POW2 textures if:
- * 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage
- * 2) D3DRS_WRAP(N) is zero for this texture's coordinates
- * 3) mip mapping is not enabled (use magnification filter only)
- */
-#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100L
-
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#if(DIRECT3D_VERSION >= 0x0700)
-
-// 0x00000200L unused
-
-/*
- * Device can divide transformed texture coordinates by the
- * COUNTth texture coordinate (can do D3DTTFF_PROJECTED)
- */
-#define D3DPTEXTURECAPS_PROJECTED 0x00000400L
-
-/*
- * Device can do cubemap textures
- */
-#define D3DPTEXTURECAPS_CUBEMAP 0x00000800L
-
-#define D3DPTEXTURECAPS_COLORKEYBLEND 0x00001000L
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-/* D3DPRIMCAPS dwTextureFilterCaps */
-
-#define D3DPTFILTERCAPS_NEAREST 0x00000001L
-#define D3DPTFILTERCAPS_LINEAR 0x00000002L
-#define D3DPTFILTERCAPS_MIPNEAREST 0x00000004L
-#define D3DPTFILTERCAPS_MIPLINEAR 0x00000008L
-#define D3DPTFILTERCAPS_LINEARMIPNEAREST 0x00000010L
-#define D3DPTFILTERCAPS_LINEARMIPLINEAR 0x00000020L
-
-#if(DIRECT3D_VERSION >= 0x0600)
-/* Device3 Min Filter */
-#define D3DPTFILTERCAPS_MINFPOINT 0x00000100L
-#define D3DPTFILTERCAPS_MINFLINEAR 0x00000200L
-#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400L
-
-/* Device3 Mip Filter */
-#define D3DPTFILTERCAPS_MIPFPOINT 0x00010000L
-#define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000L
-
-/* Device3 Mag Filter */
-#define D3DPTFILTERCAPS_MAGFPOINT 0x01000000L
-#define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000L
-#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000L
-#define D3DPTFILTERCAPS_MAGFAFLATCUBIC 0x08000000L
-#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000L
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-/* D3DPRIMCAPS dwTextureBlendCaps */
-
-#define D3DPTBLENDCAPS_DECAL 0x00000001L
-#define D3DPTBLENDCAPS_MODULATE 0x00000002L
-#define D3DPTBLENDCAPS_DECALALPHA 0x00000004L
-#define D3DPTBLENDCAPS_MODULATEALPHA 0x00000008L
-#define D3DPTBLENDCAPS_DECALMASK 0x00000010L
-#define D3DPTBLENDCAPS_MODULATEMASK 0x00000020L
-#define D3DPTBLENDCAPS_COPY 0x00000040L
-#if(DIRECT3D_VERSION >= 0x0500)
-#define D3DPTBLENDCAPS_ADD 0x00000080L
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-/* D3DPRIMCAPS dwTextureAddressCaps */
-#define D3DPTADDRESSCAPS_WRAP 0x00000001L
-#define D3DPTADDRESSCAPS_MIRROR 0x00000002L
-#define D3DPTADDRESSCAPS_CLAMP 0x00000004L
-#if(DIRECT3D_VERSION >= 0x0500)
-#define D3DPTADDRESSCAPS_BORDER 0x00000008L
-#define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010L
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-
-/* D3DDEVICEDESC dwStencilCaps */
-
-#define D3DSTENCILCAPS_KEEP 0x00000001L
-#define D3DSTENCILCAPS_ZERO 0x00000002L
-#define D3DSTENCILCAPS_REPLACE 0x00000004L
-#define D3DSTENCILCAPS_INCRSAT 0x00000008L
-#define D3DSTENCILCAPS_DECRSAT 0x00000010L
-#define D3DSTENCILCAPS_INVERT 0x00000020L
-#define D3DSTENCILCAPS_INCR 0x00000040L
-#define D3DSTENCILCAPS_DECR 0x00000080L
-
-/* D3DDEVICEDESC dwTextureOpCaps */
-
-#define D3DTEXOPCAPS_DISABLE 0x00000001L
-#define D3DTEXOPCAPS_SELECTARG1 0x00000002L
-#define D3DTEXOPCAPS_SELECTARG2 0x00000004L
-#define D3DTEXOPCAPS_MODULATE 0x00000008L
-#define D3DTEXOPCAPS_MODULATE2X 0x00000010L
-#define D3DTEXOPCAPS_MODULATE4X 0x00000020L
-#define D3DTEXOPCAPS_ADD 0x00000040L
-#define D3DTEXOPCAPS_ADDSIGNED 0x00000080L
-#define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100L
-#define D3DTEXOPCAPS_SUBTRACT 0x00000200L
-#define D3DTEXOPCAPS_ADDSMOOTH 0x00000400L
-#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800L
-#define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000L
-#define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000L
-#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000L
-#define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000L
-#define D3DTEXOPCAPS_PREMODULATE 0x00010000L
-#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000L
-#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000L
-#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000L
-#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000L
-#define D3DTEXOPCAPS_BUMPENVMAP 0x00200000L
-#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000L
-#define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000L
-
-/* D3DDEVICEDESC dwFVFCaps flags */
-
-#define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000ffffL /* mask for texture coordinate count field */
-#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000L /* Device prefers that vertex elements not be stripped */
-
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-/*
- * Description for a device.
- * This is used to describe a device that is to be created or to query
- * the current device.
- */
-typedef struct _D3DDeviceDesc {
- DWORD dwSize; /* Size of D3DDEVICEDESC structure */
- DWORD dwFlags; /* Indicates which fields have valid data */
- D3DCOLORMODEL dcmColorModel; /* Color model of device */
- DWORD dwDevCaps; /* Capabilities of device */
- D3DTRANSFORMCAPS dtcTransformCaps; /* Capabilities of transform */
- BOOL bClipping; /* Device can do 3D clipping */
- D3DLIGHTINGCAPS dlcLightingCaps; /* Capabilities of lighting */
- D3DPRIMCAPS dpcLineCaps;
- D3DPRIMCAPS dpcTriCaps;
- DWORD dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */
- DWORD dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */
- DWORD dwMaxBufferSize; /* Maximum execute buffer size */
- DWORD dwMaxVertexCount; /* Maximum vertex count */
-#if(DIRECT3D_VERSION >= 0x0500)
- // *** New fields for DX5 *** //
-
- // Width and height caps are 0 for legacy HALs.
- DWORD dwMinTextureWidth, dwMinTextureHeight;
- DWORD dwMaxTextureWidth, dwMaxTextureHeight;
- DWORD dwMinStippleWidth, dwMaxStippleWidth;
- DWORD dwMinStippleHeight, dwMaxStippleHeight;
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
- // New fields for DX6
- DWORD dwMaxTextureRepeat;
- DWORD dwMaxTextureAspectRatio;
- DWORD dwMaxAnisotropy;
-
- // Guard band that the rasterizer can accommodate
- // Screen-space vertices inside this space but outside the viewport
- // will get clipped properly.
- D3DVALUE dvGuardBandLeft;
- D3DVALUE dvGuardBandTop;
- D3DVALUE dvGuardBandRight;
- D3DVALUE dvGuardBandBottom;
-
- D3DVALUE dvExtentsAdjust;
- DWORD dwStencilCaps;
-
- DWORD dwFVFCaps;
- DWORD dwTextureOpCaps;
- WORD wMaxTextureBlendStages;
- WORD wMaxSimultaneousTextures;
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-} D3DDEVICEDESC, *LPD3DDEVICEDESC;
-
-#if(DIRECT3D_VERSION >= 0x0700)
-typedef struct _D3DDeviceDesc7 {
- DWORD dwDevCaps; /* Capabilities of device */
- D3DPRIMCAPS dpcLineCaps;
- D3DPRIMCAPS dpcTriCaps;
- DWORD dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */
- DWORD dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */
-
- DWORD dwMinTextureWidth, dwMinTextureHeight;
- DWORD dwMaxTextureWidth, dwMaxTextureHeight;
-
- DWORD dwMaxTextureRepeat;
- DWORD dwMaxTextureAspectRatio;
- DWORD dwMaxAnisotropy;
-
- D3DVALUE dvGuardBandLeft;
- D3DVALUE dvGuardBandTop;
- D3DVALUE dvGuardBandRight;
- D3DVALUE dvGuardBandBottom;
-
- D3DVALUE dvExtentsAdjust;
- DWORD dwStencilCaps;
-
- DWORD dwFVFCaps;
- DWORD dwTextureOpCaps;
- WORD wMaxTextureBlendStages;
- WORD wMaxSimultaneousTextures;
-
- DWORD dwMaxActiveLights;
- D3DVALUE dvMaxVertexW;
- GUID deviceGUID;
-
- WORD wMaxUserClipPlanes;
- WORD wMaxVertexBlendMatrices;
-
- DWORD dwVertexProcessingCaps;
-
- DWORD dwReserved1;
- DWORD dwReserved2;
- DWORD dwReserved3;
- DWORD dwReserved4;
-} D3DDEVICEDESC7, *LPD3DDEVICEDESC7;
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC))
-#define D3DDEVICEDESC7SIZE (sizeof(D3DDEVICEDESC7))
-
-typedef HRESULT (CALLBACK * LPD3DENUMDEVICESCALLBACK)(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID);
-
-#if(DIRECT3D_VERSION >= 0x0700)
-typedef HRESULT (CALLBACK * LPD3DENUMDEVICESCALLBACK7)(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC7, LPVOID);
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-/* D3DDEVICEDESC dwFlags indicating valid fields */
-
-#define D3DDD_COLORMODEL 0x00000001L /* dcmColorModel is valid */
-#define D3DDD_DEVCAPS 0x00000002L /* dwDevCaps is valid */
-#define D3DDD_TRANSFORMCAPS 0x00000004L /* dtcTransformCaps is valid */
-#define D3DDD_LIGHTINGCAPS 0x00000008L /* dlcLightingCaps is valid */
-#define D3DDD_BCLIPPING 0x00000010L /* bClipping is valid */
-#define D3DDD_LINECAPS 0x00000020L /* dpcLineCaps is valid */
-#define D3DDD_TRICAPS 0x00000040L /* dpcTriCaps is valid */
-#define D3DDD_DEVICERENDERBITDEPTH 0x00000080L /* dwDeviceRenderBitDepth is valid */
-#define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100L /* dwDeviceZBufferBitDepth is valid */
-#define D3DDD_MAXBUFFERSIZE 0x00000200L /* dwMaxBufferSize is valid */
-#define D3DDD_MAXVERTEXCOUNT 0x00000400L /* dwMaxVertexCount is valid */
-
-/* D3DDEVICEDESC dwDevCaps flags */
-
-#define D3DDEVCAPS_FLOATTLVERTEX 0x00000001L /* Device accepts floating point */
- /* for post-transform vertex data */
-#define D3DDEVCAPS_SORTINCREASINGZ 0x00000002L /* Device needs data sorted for increasing Z */
-#define D3DDEVCAPS_SORTDECREASINGZ 0X00000004L /* Device needs data sorted for decreasing Z */
-#define D3DDEVCAPS_SORTEXACT 0x00000008L /* Device needs data sorted exactly */
-
-#define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010L /* Device can use execute buffers from system memory */
-#define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020L /* Device can use execute buffers from video memory */
-#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */
-#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080L /* Device can use TL buffers from video memory */
-#define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100L /* Device can texture from system memory */
-#define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200L /* Device can texture from device memory */
-#if(DIRECT3D_VERSION >= 0x0500)
-#define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400L /* Device can draw TLVERTEX primitives */
-#define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800L /* Device can render without waiting for flip to complete */
-#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-#if(DIRECT3D_VERSION >= 0x0600)
-#define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000L /* Device can support DrawPrimitives2 */
-#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */
-#define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000L /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#if(DIRECT3D_VERSION >= 0x0700)
-#define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */
-#define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */
-#define D3DDEVCAPS_HWRASTERIZATION 0x00080000L /* Device has HW acceleration for rasterization */
-
-/*
- * These are the flags in the D3DDEVICEDESC7.dwVertexProcessingCaps field
- */
-
-/* device can do texgen */
-#define D3DVTXPCAPS_TEXGEN 0x00000001L
-/* device can do IDirect3DDevice7 colormaterialsource ops */
-#define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002L
-/* device can do vertex fog */
-#define D3DVTXPCAPS_VERTEXFOG 0x00000004L
-/* device can do directional lights */
-#define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008L
-/* device can do positional lights (includes point and spot) */
-#define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010L
-/* device can do local viewer */
-#define D3DVTXPCAPS_LOCALVIEWER 0x00000020L
-
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#define D3DFDS_COLORMODEL 0x00000001L /* Match color model */
-#define D3DFDS_GUID 0x00000002L /* Match guid */
-#define D3DFDS_HARDWARE 0x00000004L /* Match hardware/software */
-#define D3DFDS_TRIANGLES 0x00000008L /* Match in triCaps */
-#define D3DFDS_LINES 0x00000010L /* Match in lineCaps */
-#define D3DFDS_MISCCAPS 0x00000020L /* Match primCaps.dwMiscCaps */
-#define D3DFDS_RASTERCAPS 0x00000040L /* Match primCaps.dwRasterCaps */
-#define D3DFDS_ZCMPCAPS 0x00000080L /* Match primCaps.dwZCmpCaps */
-#define D3DFDS_ALPHACMPCAPS 0x00000100L /* Match primCaps.dwAlphaCmpCaps */
-#define D3DFDS_SRCBLENDCAPS 0x00000200L /* Match primCaps.dwSourceBlendCaps */
-#define D3DFDS_DSTBLENDCAPS 0x00000400L /* Match primCaps.dwDestBlendCaps */
-#define D3DFDS_SHADECAPS 0x00000800L /* Match primCaps.dwShadeCaps */
-#define D3DFDS_TEXTURECAPS 0x00001000L /* Match primCaps.dwTextureCaps */
-#define D3DFDS_TEXTUREFILTERCAPS 0x00002000L /* Match primCaps.dwTextureFilterCaps */
-#define D3DFDS_TEXTUREBLENDCAPS 0x00004000L /* Match primCaps.dwTextureBlendCaps */
-#define D3DFDS_TEXTUREADDRESSCAPS 0x00008000L /* Match primCaps.dwTextureBlendCaps */
-
-/*
- * FindDevice arguments
- */
-typedef struct _D3DFINDDEVICESEARCH {
- DWORD dwSize;
- DWORD dwFlags;
- BOOL bHardware;
- D3DCOLORMODEL dcmColorModel;
- GUID guid;
- DWORD dwCaps;
- D3DPRIMCAPS dpcPrimCaps;
-} D3DFINDDEVICESEARCH, *LPD3DFINDDEVICESEARCH;
-
-typedef struct _D3DFINDDEVICERESULT {
- DWORD dwSize;
- GUID guid; /* guid which matched */
- D3DDEVICEDESC ddHwDesc; /* hardware D3DDEVICEDESC */
- D3DDEVICEDESC ddSwDesc; /* software D3DDEVICEDESC */
-} D3DFINDDEVICERESULT, *LPD3DFINDDEVICERESULT;
-
-/*
- * Description of execute buffer.
- */
-typedef struct _D3DExecuteBufferDesc {
- DWORD dwSize; /* size of this structure */
- DWORD dwFlags; /* flags indicating which fields are valid */
- DWORD dwCaps; /* capabilities of execute buffer */
- DWORD dwBufferSize; /* size of execute buffer data */
- LPVOID lpData; /* pointer to actual data */
-} D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC;
-
-/* D3DEXECUTEBUFFER dwFlags indicating valid fields */
-
-#define D3DDEB_BUFSIZE 0x00000001l /* buffer size valid */
-#define D3DDEB_CAPS 0x00000002l /* caps valid */
-#define D3DDEB_LPDATA 0x00000004l /* lpData valid */
-
-/* D3DEXECUTEBUFFER dwCaps */
-
-#define D3DDEBCAPS_SYSTEMMEMORY 0x00000001l /* buffer in system memory */
-#define D3DDEBCAPS_VIDEOMEMORY 0x00000002l /* buffer in device memory */
-#define D3DDEBCAPS_MEM (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY)
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-#if(DIRECT3D_VERSION >= 0x0700)
-typedef struct _D3DDEVINFO_TEXTUREMANAGER {
- BOOL bThrashing; /* indicates if thrashing */
- DWORD dwApproxBytesDownloaded; /* Approximate number of bytes downloaded by texture manager */
- DWORD dwNumEvicts; /* number of textures evicted */
- DWORD dwNumVidCreates; /* number of textures created in video memory */
- DWORD dwNumTexturesUsed; /* number of textures used */
- DWORD dwNumUsedTexInVid; /* number of used textures present in video memory */
- DWORD dwWorkingSet; /* number of textures in video memory */
- DWORD dwWorkingSetBytes; /* number of bytes in video memory */
- DWORD dwTotalManaged; /* total number of managed textures */
- DWORD dwTotalBytes; /* total number of bytes of managed textures */
- DWORD dwLastPri; /* priority of last texture evicted */
-} D3DDEVINFO_TEXTUREMANAGER, *LPD3DDEVINFO_TEXTUREMANAGER;
-
-typedef struct _D3DDEVINFO_TEXTURING {
- DWORD dwNumLoads; /* counts Load() API calls */
- DWORD dwApproxBytesLoaded; /* Approximate number bytes loaded via Load() */
- DWORD dwNumPreLoads; /* counts PreLoad() API calls */
- DWORD dwNumSet; /* counts SetTexture() API calls */
- DWORD dwNumCreates; /* counts texture creates */
- DWORD dwNumDestroys; /* counts texture destroys */
- DWORD dwNumSetPriorities; /* counts SetPriority() API calls */
- DWORD dwNumSetLODs; /* counts SetLOD() API calls */
- DWORD dwNumLocks; /* counts number of texture locks */
- DWORD dwNumGetDCs; /* counts number of GetDCs to textures */
-} D3DDEVINFO_TEXTURING, *LPD3DDEVINFO_TEXTURING;
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-#pragma pack()
-
-
-#endif /* _D3DCAPS_H_ */
-
diff --git a/include/dx/d3dtypes.h b/include/dx/d3dtypes.h
deleted file mode 100644
index d1759dcd2..000000000
--- a/include/dx/d3dtypes.h
+++ /dev/null
@@ -1,2119 +0,0 @@
-/*==========================================================================;
- *
- * Copyright (C) Microsoft Corporation. All Rights Reserved.
- *
- * File: d3dtypes.h
- * Content: Direct3D types include file
- *
- ***************************************************************************/
-
-#ifndef _D3DTYPES_H_
-#define _D3DTYPES_H_
-
-#ifndef DIRECT3D_VERSION
-#define DIRECT3D_VERSION 0x0700
-#endif
-
-#if (DIRECT3D_VERSION >= 0x0800)
-#pragma message("should not include d3dtypes.h when compiling for DX8 or newer interfaces")
-#endif
-
-#include <windows.h>
-
-#include <float.h>
-#include "ddraw.h"
-
-#pragma warning(disable:4201) // anonymous unions warning
-#if defined(_X86_) || defined(_IA64_)
-#pragma pack(4)
-#endif
-
-
-/* D3DVALUE is the fundamental Direct3D fractional data type */
-
-#define D3DVALP(val, prec) ((float)(val))
-#define D3DVAL(val) ((float)(val))
-
-#ifndef DX_SHARED_DEFINES
-
-/*
- * This definition is shared with other DirectX components whose header files
- * might already have defined it. Therefore, we don't define this type if
- * someone else already has (as indicated by the definition of
- * DX_SHARED_DEFINES). We don't set DX_SHARED_DEFINES here as there are
- * other types in this header that are also shared. The last of these
- * shared defines in this file will set DX_SHARED_DEFINES.
- */
-typedef float D3DVALUE, *LPD3DVALUE;
-
-#endif /* DX_SHARED_DEFINES */
-
-#define D3DDivide(a, b) (float)((double) (a) / (double) (b))
-#define D3DMultiply(a, b) ((a) * (b))
-
-typedef LONG D3DFIXED;
-
-#ifndef RGB_MAKE
-/*
- * Format of CI colors is
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * | alpha | color index | fraction |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
-#define CI_GETALPHA(ci) ((ci) >> 24)
-#define CI_GETINDEX(ci) (((ci) >> 8) & 0xffff)
-#define CI_GETFRACTION(ci) ((ci) & 0xff)
-#define CI_ROUNDINDEX(ci) CI_GETINDEX((ci) + 0x80)
-#define CI_MASKALPHA(ci) ((ci) & 0xffffff)
-#define CI_MAKE(a, i, f) (((a) << 24) | ((i) << 8) | (f))
-
-/*
- * Format of RGBA colors is
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * | alpha | red | green | blue |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
-#define RGBA_GETALPHA(rgb) ((rgb) >> 24)
-#define RGBA_GETRED(rgb) (((rgb) >> 16) & 0xff)
-#define RGBA_GETGREEN(rgb) (((rgb) >> 8) & 0xff)
-#define RGBA_GETBLUE(rgb) ((rgb) & 0xff)
-#define RGBA_MAKE(r, g, b, a) ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
-
-/* D3DRGB and D3DRGBA may be used as initialisers for D3DCOLORs
- * The float values must be in the range 0..1
- */
-#define D3DRGB(r, g, b) \
- (0xff000000L | ( ((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255))
-#define D3DRGBA(r, g, b, a) \
- ( (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) \
- | (((long)((g) * 255)) << 8) | (long)((b) * 255) \
- )
-
-/*
- * Format of RGB colors is
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * | ignored | red | green | blue |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
-#define RGB_GETRED(rgb) (((rgb) >> 16) & 0xff)
-#define RGB_GETGREEN(rgb) (((rgb) >> 8) & 0xff)
-#define RGB_GETBLUE(rgb) ((rgb) & 0xff)
-#define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
-#define RGB_MAKE(r, g, b) ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b)))
-#define RGBA_TORGB(rgba) ((D3DCOLOR) ((rgba) & 0xffffff))
-#define RGB_TORGBA(rgb) ((D3DCOLOR) ((rgb) | 0xff000000))
-
-#endif
-
-/*
- * Flags for Enumerate functions
- */
-
-/*
- * Stop the enumeration
- */
-#define D3DENUMRET_CANCEL DDENUMRET_CANCEL
-
-/*
- * Continue the enumeration
- */
-#define D3DENUMRET_OK DDENUMRET_OK
-
-typedef HRESULT (CALLBACK* LPD3DVALIDATECALLBACK)(LPVOID lpUserArg, DWORD dwOffset);
-typedef HRESULT (CALLBACK* LPD3DENUMTEXTUREFORMATSCALLBACK)(LPDDSURFACEDESC lpDdsd, LPVOID lpContext);
-typedef HRESULT (CALLBACK* LPD3DENUMPIXELFORMATSCALLBACK)(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext);
-
-#ifndef DX_SHARED_DEFINES
-
-/*
- * This definition is shared with other DirectX components whose header files
- * might already have defined it. Therefore, we don't define this type if
- * someone else already has (as indicated by the definition of
- * DX_SHARED_DEFINES). We don't set DX_SHARED_DEFINES here as there are
- * other types in this header that are also shared. The last of these
- * shared defines in this file will set DX_SHARED_DEFINES.
- */
-#ifndef D3DCOLOR_DEFINED
-typedef DWORD D3DCOLOR;
-#define D3DCOLOR_DEFINED
-#endif
-typedef DWORD *LPD3DCOLOR;
-
-#endif /* DX_SHARED_DEFINES */
-
-typedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE;
-typedef DWORD D3DTEXTUREHANDLE, *LPD3DTEXTUREHANDLE;
-typedef DWORD D3DMATRIXHANDLE, *LPD3DMATRIXHANDLE;
-
-#ifndef D3DCOLORVALUE_DEFINED
-typedef struct _D3DCOLORVALUE {
- union {
- D3DVALUE r;
- D3DVALUE dvR;
- };
- union {
- D3DVALUE g;
- D3DVALUE dvG;
- };
- union {
- D3DVALUE b;
- D3DVALUE dvB;
- };
- union {
- D3DVALUE a;
- D3DVALUE dvA;
- };
-} D3DCOLORVALUE;
-#define D3DCOLORVALUE_DEFINED
-#endif
-typedef struct _D3DCOLORVALUE *LPD3DCOLORVALUE;
-
-#ifndef D3DRECT_DEFINED
-typedef struct _D3DRECT {
- union {
- LONG x1;
- LONG lX1;
- };
- union {
- LONG y1;
- LONG lY1;
- };
- union {
- LONG x2;
- LONG lX2;
- };
- union {
- LONG y2;
- LONG lY2;
- };
-} D3DRECT;
-#define D3DRECT_DEFINED
-#endif
-typedef struct _D3DRECT *LPD3DRECT;
-
-#ifndef DX_SHARED_DEFINES
-
-/*
- * This definition is shared with other DirectX components whose header files
- * might already have defined it. Therefore, we don't define this type if
- * someone else already has (as indicated by the definition of
- * DX_SHARED_DEFINES).
- */
-
-#ifndef D3DVECTOR_DEFINED
-typedef struct _D3DVECTOR {
- union {
- D3DVALUE x;
- D3DVALUE dvX;
- };
- union {
- D3DVALUE y;
- D3DVALUE dvY;
- };
- union {
- D3DVALUE z;
- D3DVALUE dvZ;
- };
-#if(DIRECT3D_VERSION >= 0x0500)
-#if (defined __cplusplus) && (defined D3D_OVERLOADS)
-
-public:
-
- // =====================================
- // Constructors
- // =====================================
-
- _D3DVECTOR() { }
- _D3DVECTOR(D3DVALUE f);
- _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z);
- _D3DVECTOR(const D3DVALUE f[3]);
-
- // =====================================
- // Access grants
- // =====================================
-
- const D3DVALUE&operator[](int i) const;
- D3DVALUE&operator[](int i);
-
- // =====================================
- // Assignment operators
- // =====================================
-
- _D3DVECTOR& operator += (const _D3DVECTOR& v);
- _D3DVECTOR& operator -= (const _D3DVECTOR& v);
- _D3DVECTOR& operator *= (const _D3DVECTOR& v);
- _D3DVECTOR& operator /= (const _D3DVECTOR& v);
- _D3DVECTOR& operator *= (D3DVALUE s);
- _D3DVECTOR& operator /= (D3DVALUE s);
-
- // =====================================
- // Unary operators
- // =====================================
-
- friend _D3DVECTOR operator + (const _D3DVECTOR& v);
- friend _D3DVECTOR operator - (const _D3DVECTOR& v);
-
-
- // =====================================
- // Binary operators
- // =====================================
-
- // Addition and subtraction
- friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
- friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
- // Scalar multiplication and division
- friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s);
- friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v);
- friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s);
- // Memberwise multiplication and division
- friend _D3DVECTOR operator * (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
- friend _D3DVECTOR operator / (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
-
- // Vector dominance
- friend int operator < (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
- friend int operator <= (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
-
- // Bitwise equality
- friend int operator == (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
-
- // Length-related functions
- friend D3DVALUE SquareMagnitude (const _D3DVECTOR& v);
- friend D3DVALUE Magnitude (const _D3DVECTOR& v);
-
- // Returns vector with same direction and unit length
- friend _D3DVECTOR Normalize (const _D3DVECTOR& v);
-
- // Return min/max component of the input vector
- friend D3DVALUE Min (const _D3DVECTOR& v);
- friend D3DVALUE Max (const _D3DVECTOR& v);
-
- // Return memberwise min/max of input vectors
- friend _D3DVECTOR Minimize (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
- friend _D3DVECTOR Maximize (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
-
- // Dot and cross product
- friend D3DVALUE DotProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
- friend _D3DVECTOR CrossProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
-
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DVECTOR;
-#define D3DVECTOR_DEFINED
-#endif
-typedef struct _D3DVECTOR *LPD3DVECTOR;
-
-/*
- * As this is the last of the shared defines to be defined we now set
- * D3D_SHARED_DEFINES to flag that fact that this header has defined these
- * types.
- */
-#define DX_SHARED_DEFINES
-
-#endif /* DX_SHARED_DEFINES */
-
-/*
- * Vertex data types supported in an ExecuteBuffer.
- */
-
-/*
- * Homogeneous vertices
- */
-
-typedef struct _D3DHVERTEX {
- DWORD dwFlags; /* Homogeneous clipping flags */
- union {
- D3DVALUE hx;
- D3DVALUE dvHX;
- };
- union {
- D3DVALUE hy;
- D3DVALUE dvHY;
- };
- union {
- D3DVALUE hz;
- D3DVALUE dvHZ;
- };
-} D3DHVERTEX, *LPD3DHVERTEX;
-
-/*
- * Transformed/lit vertices
- */
-typedef struct _D3DTLVERTEX {
- union {
- D3DVALUE sx; /* Screen coordinates */
- D3DVALUE dvSX;
- };
- union {
- D3DVALUE sy;
- D3DVALUE dvSY;
- };
- union {
- D3DVALUE sz;
- D3DVALUE dvSZ;
- };
- union {
- D3DVALUE rhw; /* Reciprocal of homogeneous w */
- D3DVALUE dvRHW;
- };
- union {
- D3DCOLOR color; /* Vertex color */
- D3DCOLOR dcColor;
- };
- union {
- D3DCOLOR specular; /* Specular component of vertex */
- D3DCOLOR dcSpecular;
- };
- union {
- D3DVALUE tu; /* Texture coordinates */
- D3DVALUE dvTU;
- };
- union {
- D3DVALUE tv;
- D3DVALUE dvTV;
- };
-#if(DIRECT3D_VERSION >= 0x0500)
-#if (defined __cplusplus) && (defined D3D_OVERLOADS)
- _D3DTLVERTEX() { }
- _D3DTLVERTEX(const D3DVECTOR& v, float _rhw,
- D3DCOLOR _color, D3DCOLOR _specular,
- float _tu, float _tv)
- { sx = v.x; sy = v.y; sz = v.z; rhw = _rhw;
- color = _color; specular = _specular;
- tu = _tu; tv = _tv;
- }
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DTLVERTEX, *LPD3DTLVERTEX;
-
-/*
- * Untransformed/lit vertices
- */
-typedef struct _D3DLVERTEX {
- union {
- D3DVALUE x; /* Homogeneous coordinates */
- D3DVALUE dvX;
- };
- union {
- D3DVALUE y;
- D3DVALUE dvY;
- };
- union {
- D3DVALUE z;
- D3DVALUE dvZ;
- };
- DWORD dwReserved;
- union {
- D3DCOLOR color; /* Vertex color */
- D3DCOLOR dcColor;
- };
- union {
- D3DCOLOR specular; /* Specular component of vertex */
- D3DCOLOR dcSpecular;
- };
- union {
- D3DVALUE tu; /* Texture coordinates */
- D3DVALUE dvTU;
- };
- union {
- D3DVALUE tv;
- D3DVALUE dvTV;
- };
-#if(DIRECT3D_VERSION >= 0x0500)
-#if (defined __cplusplus) && (defined D3D_OVERLOADS)
- _D3DLVERTEX() { }
- _D3DLVERTEX(const D3DVECTOR& v,
- D3DCOLOR _color, D3DCOLOR _specular,
- float _tu, float _tv)
- { x = v.x; y = v.y; z = v.z; dwReserved = 0;
- color = _color; specular = _specular;
- tu = _tu; tv = _tv;
- }
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DLVERTEX, *LPD3DLVERTEX;
-
-/*
- * Untransformed/unlit vertices
- */
-
-typedef struct _D3DVERTEX {
- union {
- D3DVALUE x; /* Homogeneous coordinates */
- D3DVALUE dvX;
- };
- union {
- D3DVALUE y;
- D3DVALUE dvY;
- };
- union {
- D3DVALUE z;
- D3DVALUE dvZ;
- };
- union {
- D3DVALUE nx; /* Normal */
- D3DVALUE dvNX;
- };
- union {
- D3DVALUE ny;
- D3DVALUE dvNY;
- };
- union {
- D3DVALUE nz;
- D3DVALUE dvNZ;
- };
- union {
- D3DVALUE tu; /* Texture coordinates */
- D3DVALUE dvTU;
- };
- union {
- D3DVALUE tv;
- D3DVALUE dvTV;
- };
-#if(DIRECT3D_VERSION >= 0x0500)
-#if (defined __cplusplus) && (defined D3D_OVERLOADS)
- _D3DVERTEX() { }
- _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv)
- { x = v.x; y = v.y; z = v.z;
- nx = n.x; ny = n.y; nz = n.z;
- tu = _tu; tv = _tv;
- }
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DVERTEX, *LPD3DVERTEX;
-
-
-/*
- * Matrix, viewport, and tranformation structures and definitions.
- */
-
-#ifndef D3DMATRIX_DEFINED
-typedef struct _D3DMATRIX {
-#if(DIRECT3D_VERSION >= 0x0500)
-#if (defined __cplusplus) && (defined D3D_OVERLOADS)
- union {
- struct {
-#endif
-
-#endif /* DIRECT3D_VERSION >= 0x0500 */
- D3DVALUE _11, _12, _13, _14;
- D3DVALUE _21, _22, _23, _24;
- D3DVALUE _31, _32, _33, _34;
- D3DVALUE _41, _42, _43, _44;
-
-#if(DIRECT3D_VERSION >= 0x0500)
-#if (defined __cplusplus) && (defined D3D_OVERLOADS)
- };
- D3DVALUE m[4][4];
- };
- _D3DMATRIX() { }
- _D3DMATRIX( D3DVALUE _m00, D3DVALUE _m01, D3DVALUE _m02, D3DVALUE _m03,
- D3DVALUE _m10, D3DVALUE _m11, D3DVALUE _m12, D3DVALUE _m13,
- D3DVALUE _m20, D3DVALUE _m21, D3DVALUE _m22, D3DVALUE _m23,
- D3DVALUE _m30, D3DVALUE _m31, D3DVALUE _m32, D3DVALUE _m33
- )
- {
- m[0][0] = _m00; m[0][1] = _m01; m[0][2] = _m02; m[0][3] = _m03;
- m[1][0] = _m10; m[1][1] = _m11; m[1][2] = _m12; m[1][3] = _m13;
- m[2][0] = _m20; m[2][1] = _m21; m[2][2] = _m22; m[2][3] = _m23;
- m[3][0] = _m30; m[3][1] = _m31; m[3][2] = _m32; m[3][3] = _m33;
- }
-
- D3DVALUE& operator()(int iRow, int iColumn) { return m[iRow][iColumn]; }
- const D3DVALUE& operator()(int iRow, int iColumn) const { return m[iRow][iColumn]; }
-#if(DIRECT3D_VERSION >= 0x0600)
- friend _D3DMATRIX operator* (const _D3DMATRIX&, const _D3DMATRIX&);
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#endif
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DMATRIX;
-#define D3DMATRIX_DEFINED
-#endif
-typedef struct _D3DMATRIX *LPD3DMATRIX;
-
-#if (defined __cplusplus) && (defined D3D_OVERLOADS)
-#include "d3dvec.inl"
-#endif
-
-typedef struct _D3DVIEWPORT {
- DWORD dwSize;
- DWORD dwX;
- DWORD dwY; /* Top left */
- DWORD dwWidth;
- DWORD dwHeight; /* Dimensions */
- D3DVALUE dvScaleX; /* Scale homogeneous to screen */
- D3DVALUE dvScaleY; /* Scale homogeneous to screen */
- D3DVALUE dvMaxX; /* Min/max homogeneous x coord */
- D3DVALUE dvMaxY; /* Min/max homogeneous y coord */
- D3DVALUE dvMinZ;
- D3DVALUE dvMaxZ; /* Min/max homogeneous z coord */
-} D3DVIEWPORT, *LPD3DVIEWPORT;
-
-#if(DIRECT3D_VERSION >= 0x0500)
-typedef struct _D3DVIEWPORT2 {
- DWORD dwSize;
- DWORD dwX;
- DWORD dwY; /* Viewport Top left */
- DWORD dwWidth;
- DWORD dwHeight; /* Viewport Dimensions */
- D3DVALUE dvClipX; /* Top left of clip volume */
- D3DVALUE dvClipY;
- D3DVALUE dvClipWidth; /* Clip Volume Dimensions */
- D3DVALUE dvClipHeight;
- D3DVALUE dvMinZ; /* Min/max of clip Volume */
- D3DVALUE dvMaxZ;
-} D3DVIEWPORT2, *LPD3DVIEWPORT2;
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0700)
-typedef struct _D3DVIEWPORT7 {
- DWORD dwX;
- DWORD dwY; /* Viewport Top left */
- DWORD dwWidth;
- DWORD dwHeight; /* Viewport Dimensions */
- D3DVALUE dvMinZ; /* Min/max of clip Volume */
- D3DVALUE dvMaxZ;
-} D3DVIEWPORT7, *LPD3DVIEWPORT7;
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-/*
- * Values for clip fields.
- */
-
-#if(DIRECT3D_VERSION >= 0x0700)
-
-// Max number of user clipping planes, supported in D3D.
-#define D3DMAXUSERCLIPPLANES 32
-
-// These bits could be ORed together to use with D3DRENDERSTATE_CLIPPLANEENABLE
-//
-#define D3DCLIPPLANE0 (1 << 0)
-#define D3DCLIPPLANE1 (1 << 1)
-#define D3DCLIPPLANE2 (1 << 2)
-#define D3DCLIPPLANE3 (1 << 3)
-#define D3DCLIPPLANE4 (1 << 4)
-#define D3DCLIPPLANE5 (1 << 5)
-
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#define D3DCLIP_LEFT 0x00000001L
-#define D3DCLIP_RIGHT 0x00000002L
-#define D3DCLIP_TOP 0x00000004L
-#define D3DCLIP_BOTTOM 0x00000008L
-#define D3DCLIP_FRONT 0x00000010L
-#define D3DCLIP_BACK 0x00000020L
-#define D3DCLIP_GEN0 0x00000040L
-#define D3DCLIP_GEN1 0x00000080L
-#define D3DCLIP_GEN2 0x00000100L
-#define D3DCLIP_GEN3 0x00000200L
-#define D3DCLIP_GEN4 0x00000400L
-#define D3DCLIP_GEN5 0x00000800L
-
-/*
- * Values for d3d status.
- */
-#define D3DSTATUS_CLIPUNIONLEFT D3DCLIP_LEFT
-#define D3DSTATUS_CLIPUNIONRIGHT D3DCLIP_RIGHT
-#define D3DSTATUS_CLIPUNIONTOP D3DCLIP_TOP
-#define D3DSTATUS_CLIPUNIONBOTTOM D3DCLIP_BOTTOM
-#define D3DSTATUS_CLIPUNIONFRONT D3DCLIP_FRONT
-#define D3DSTATUS_CLIPUNIONBACK D3DCLIP_BACK
-#define D3DSTATUS_CLIPUNIONGEN0 D3DCLIP_GEN0
-#define D3DSTATUS_CLIPUNIONGEN1 D3DCLIP_GEN1
-#define D3DSTATUS_CLIPUNIONGEN2 D3DCLIP_GEN2
-#define D3DSTATUS_CLIPUNIONGEN3 D3DCLIP_GEN3
-#define D3DSTATUS_CLIPUNIONGEN4 D3DCLIP_GEN4
-#define D3DSTATUS_CLIPUNIONGEN5 D3DCLIP_GEN5
-
-#define D3DSTATUS_CLIPINTERSECTIONLEFT 0x00001000L
-#define D3DSTATUS_CLIPINTERSECTIONRIGHT 0x00002000L
-#define D3DSTATUS_CLIPINTERSECTIONTOP 0x00004000L
-#define D3DSTATUS_CLIPINTERSECTIONBOTTOM 0x00008000L
-#define D3DSTATUS_CLIPINTERSECTIONFRONT 0x00010000L
-#define D3DSTATUS_CLIPINTERSECTIONBACK 0x00020000L
-#define D3DSTATUS_CLIPINTERSECTIONGEN0 0x00040000L
-#define D3DSTATUS_CLIPINTERSECTIONGEN1 0x00080000L
-#define D3DSTATUS_CLIPINTERSECTIONGEN2 0x00100000L
-#define D3DSTATUS_CLIPINTERSECTIONGEN3 0x00200000L
-#define D3DSTATUS_CLIPINTERSECTIONGEN4 0x00400000L
-#define D3DSTATUS_CLIPINTERSECTIONGEN5 0x00800000L
-#define D3DSTATUS_ZNOTVISIBLE 0x01000000L
-/* Do not use 0x80000000 for any status flags in future as it is reserved */
-
-#define D3DSTATUS_CLIPUNIONALL ( \
- D3DSTATUS_CLIPUNIONLEFT | \
- D3DSTATUS_CLIPUNIONRIGHT | \
- D3DSTATUS_CLIPUNIONTOP | \
- D3DSTATUS_CLIPUNIONBOTTOM | \
- D3DSTATUS_CLIPUNIONFRONT | \
- D3DSTATUS_CLIPUNIONBACK | \
- D3DSTATUS_CLIPUNIONGEN0 | \
- D3DSTATUS_CLIPUNIONGEN1 | \
- D3DSTATUS_CLIPUNIONGEN2 | \
- D3DSTATUS_CLIPUNIONGEN3 | \
- D3DSTATUS_CLIPUNIONGEN4 | \
- D3DSTATUS_CLIPUNIONGEN5 \
- )
-
-#define D3DSTATUS_CLIPINTERSECTIONALL ( \
- D3DSTATUS_CLIPINTERSECTIONLEFT | \
- D3DSTATUS_CLIPINTERSECTIONRIGHT | \
- D3DSTATUS_CLIPINTERSECTIONTOP | \
- D3DSTATUS_CLIPINTERSECTIONBOTTOM | \
- D3DSTATUS_CLIPINTERSECTIONFRONT | \
- D3DSTATUS_CLIPINTERSECTIONBACK | \
- D3DSTATUS_CLIPINTERSECTIONGEN0 | \
- D3DSTATUS_CLIPINTERSECTIONGEN1 | \
- D3DSTATUS_CLIPINTERSECTIONGEN2 | \
- D3DSTATUS_CLIPINTERSECTIONGEN3 | \
- D3DSTATUS_CLIPINTERSECTIONGEN4 | \
- D3DSTATUS_CLIPINTERSECTIONGEN5 \
- )
-
-#define D3DSTATUS_DEFAULT ( \
- D3DSTATUS_CLIPINTERSECTIONALL | \
- D3DSTATUS_ZNOTVISIBLE)
-
-
-/*
- * Options for direct transform calls
- */
-#define D3DTRANSFORM_CLIPPED 0x00000001l
-#define D3DTRANSFORM_UNCLIPPED 0x00000002l
-
-typedef struct _D3DTRANSFORMDATA {
- DWORD dwSize;
- LPVOID lpIn; /* Input vertices */
- DWORD dwInSize; /* Stride of input vertices */
- LPVOID lpOut; /* Output vertices */
- DWORD dwOutSize; /* Stride of output vertices */
- LPD3DHVERTEX lpHOut; /* Output homogeneous vertices */
- DWORD dwClip; /* Clipping hint */
- DWORD dwClipIntersection;
- DWORD dwClipUnion; /* Union of all clip flags */
- D3DRECT drExtent; /* Extent of transformed vertices */
-} D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA;
-
-/*
- * Structure defining position and direction properties for lighting.
- */
-typedef struct _D3DLIGHTINGELEMENT {
- D3DVECTOR dvPosition; /* Lightable point in model space */
- D3DVECTOR dvNormal; /* Normalised unit vector */
-} D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT;
-
-/*
- * Structure defining material properties for lighting.
- */
-typedef struct _D3DMATERIAL {
- DWORD dwSize;
- union {
- D3DCOLORVALUE diffuse; /* Diffuse color RGBA */
- D3DCOLORVALUE dcvDiffuse;
- };
- union {
- D3DCOLORVALUE ambient; /* Ambient color RGB */
- D3DCOLORVALUE dcvAmbient;
- };
- union {
- D3DCOLORVALUE specular; /* Specular 'shininess' */
- D3DCOLORVALUE dcvSpecular;
- };
- union {
- D3DCOLORVALUE emissive; /* Emissive color RGB */
- D3DCOLORVALUE dcvEmissive;
- };
- union {
- D3DVALUE power; /* Sharpness if specular highlight */
- D3DVALUE dvPower;
- };
- D3DTEXTUREHANDLE hTexture; /* Handle to texture map */
- DWORD dwRampSize;
-} D3DMATERIAL, *LPD3DMATERIAL;
-
-#if(DIRECT3D_VERSION >= 0x0700)
-
-typedef struct _D3DMATERIAL7 {
- union {
- D3DCOLORVALUE diffuse; /* Diffuse color RGBA */
- D3DCOLORVALUE dcvDiffuse;
- };
- union {
- D3DCOLORVALUE ambient; /* Ambient color RGB */
- D3DCOLORVALUE dcvAmbient;
- };
- union {
- D3DCOLORVALUE specular; /* Specular 'shininess' */
- D3DCOLORVALUE dcvSpecular;
- };
- union {
- D3DCOLORVALUE emissive; /* Emissive color RGB */
- D3DCOLORVALUE dcvEmissive;
- };
- union {
- D3DVALUE power; /* Sharpness if specular highlight */
- D3DVALUE dvPower;
- };
-} D3DMATERIAL7, *LPD3DMATERIAL7;
-
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-typedef enum _D3DLIGHTTYPE {
- D3DLIGHT_POINT = 1,
- D3DLIGHT_SPOT = 2,
- D3DLIGHT_DIRECTIONAL = 3,
-// Note: The following light type (D3DLIGHT_PARALLELPOINT)
-// is no longer supported from D3D for DX7 onwards.
- D3DLIGHT_PARALLELPOINT = 4,
-#if(DIRECT3D_VERSION < 0x0500) // For backward compatible headers
- D3DLIGHT_GLSPOT = 5,
-#endif
- D3DLIGHT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-} D3DLIGHTTYPE;
-
-#else
-typedef enum _D3DLIGHTTYPE D3DLIGHTTYPE;
-#define D3DLIGHT_PARALLELPOINT (D3DLIGHTTYPE)4
-#define D3DLIGHT_GLSPOT (D3DLIGHTTYPE)5
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-/*
- * Structure defining a light source and its properties.
- */
-typedef struct _D3DLIGHT {
- DWORD dwSize;
- D3DLIGHTTYPE dltType; /* Type of light source */
- D3DCOLORVALUE dcvColor; /* Color of light */
- D3DVECTOR dvPosition; /* Position in world space */
- D3DVECTOR dvDirection; /* Direction in world space */
- D3DVALUE dvRange; /* Cutoff range */
- D3DVALUE dvFalloff; /* Falloff */
- D3DVALUE dvAttenuation0; /* Constant attenuation */
- D3DVALUE dvAttenuation1; /* Linear attenuation */
- D3DVALUE dvAttenuation2; /* Quadratic attenuation */
- D3DVALUE dvTheta; /* Inner angle of spotlight cone */
- D3DVALUE dvPhi; /* Outer angle of spotlight cone */
-} D3DLIGHT, *LPD3DLIGHT;
-
-#if(DIRECT3D_VERSION >= 0x0700)
-
-typedef struct _D3DLIGHT7 {
- D3DLIGHTTYPE dltType; /* Type of light source */
- D3DCOLORVALUE dcvDiffuse; /* Diffuse color of light */
- D3DCOLORVALUE dcvSpecular; /* Specular color of light */
- D3DCOLORVALUE dcvAmbient; /* Ambient color of light */
- D3DVECTOR dvPosition; /* Position in world space */
- D3DVECTOR dvDirection; /* Direction in world space */
- D3DVALUE dvRange; /* Cutoff range */
- D3DVALUE dvFalloff; /* Falloff */
- D3DVALUE dvAttenuation0; /* Constant attenuation */
- D3DVALUE dvAttenuation1; /* Linear attenuation */
- D3DVALUE dvAttenuation2; /* Quadratic attenuation */
- D3DVALUE dvTheta; /* Inner angle of spotlight cone */
- D3DVALUE dvPhi; /* Outer angle of spotlight cone */
-} D3DLIGHT7, *LPD3DLIGHT7;
-
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#if(DIRECT3D_VERSION >= 0x0500)
-/*
- * Structure defining a light source and its properties.
- */
-
-/* flags bits */
-#define D3DLIGHT_ACTIVE 0x00000001
-#define D3DLIGHT_NO_SPECULAR 0x00000002
-#define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR)
-
-/* maximum valid light range */
-#define D3DLIGHT_RANGE_MAX ((float)sqrt(FLT_MAX))
-
-typedef struct _D3DLIGHT2 {
- DWORD dwSize;
- D3DLIGHTTYPE dltType; /* Type of light source */
- D3DCOLORVALUE dcvColor; /* Color of light */
- D3DVECTOR dvPosition; /* Position in world space */
- D3DVECTOR dvDirection; /* Direction in world space */
- D3DVALUE dvRange; /* Cutoff range */
- D3DVALUE dvFalloff; /* Falloff */
- D3DVALUE dvAttenuation0; /* Constant attenuation */
- D3DVALUE dvAttenuation1; /* Linear attenuation */
- D3DVALUE dvAttenuation2; /* Quadratic attenuation */
- D3DVALUE dvTheta; /* Inner angle of spotlight cone */
- D3DVALUE dvPhi; /* Outer angle of spotlight cone */
- DWORD dwFlags;
-} D3DLIGHT2, *LPD3DLIGHT2;
-
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-typedef struct _D3DLIGHTDATA {
- DWORD dwSize;
- LPD3DLIGHTINGELEMENT lpIn; /* Input positions and normals */
- DWORD dwInSize; /* Stride of input elements */
- LPD3DTLVERTEX lpOut; /* Output colors */
- DWORD dwOutSize; /* Stride of output colors */
-} D3DLIGHTDATA, *LPD3DLIGHTDATA;
-
-#if(DIRECT3D_VERSION >= 0x0500)
-/*
- * Before DX5, these values were in an enum called
- * D3DCOLORMODEL. This was not correct, since they are
- * bit flags. A driver can surface either or both flags
- * in the dcmColorModel member of D3DDEVICEDESC.
- */
-#define D3DCOLOR_MONO 1
-#define D3DCOLOR_RGB 2
-
-typedef DWORD D3DCOLORMODEL;
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-/*
- * Options for clearing
- */
-#define D3DCLEAR_TARGET 0x00000001l /* Clear target surface */
-#define D3DCLEAR_ZBUFFER 0x00000002l /* Clear target z buffer */
-#if(DIRECT3D_VERSION >= 0x0600)
-#define D3DCLEAR_STENCIL 0x00000004l /* Clear stencil planes */
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-/*
- * Execute buffers are allocated via Direct3D. These buffers may then
- * be filled by the application with instructions to execute along with
- * vertex data.
- */
-
-/*
- * Supported op codes for execute instructions.
- */
-typedef enum _D3DOPCODE {
- D3DOP_POINT = 1,
- D3DOP_LINE = 2,
- D3DOP_TRIANGLE = 3,
- D3DOP_MATRIXLOAD = 4,
- D3DOP_MATRIXMULTIPLY = 5,
- D3DOP_STATETRANSFORM = 6,
- D3DOP_STATELIGHT = 7,
- D3DOP_STATERENDER = 8,
- D3DOP_PROCESSVERTICES = 9,
- D3DOP_TEXTURELOAD = 10,
- D3DOP_EXIT = 11,
- D3DOP_BRANCHFORWARD = 12,
- D3DOP_SPAN = 13,
- D3DOP_SETSTATUS = 14,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DOPCODE;
-
-typedef struct _D3DINSTRUCTION {
- BYTE bOpcode; /* Instruction opcode */
- BYTE bSize; /* Size of each instruction data unit */
- WORD wCount; /* Count of instruction data units to follow */
-} D3DINSTRUCTION, *LPD3DINSTRUCTION;
-
-/*
- * Structure for texture loads
- */
-typedef struct _D3DTEXTURELOAD {
- D3DTEXTUREHANDLE hDestTexture;
- D3DTEXTUREHANDLE hSrcTexture;
-} D3DTEXTURELOAD, *LPD3DTEXTURELOAD;
-
-/*
- * Structure for picking
- */
-typedef struct _D3DPICKRECORD {
- BYTE bOpcode;
- BYTE bPad;
- DWORD dwOffset;
- D3DVALUE dvZ;
-} D3DPICKRECORD, *LPD3DPICKRECORD;
-
-/*
- * The following defines the rendering states which can be set in the
- * execute buffer.
- */
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-typedef enum _D3DSHADEMODE {
- D3DSHADE_FLAT = 1,
- D3DSHADE_GOURAUD = 2,
- D3DSHADE_PHONG = 3,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DSHADE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DSHADEMODE;
-
-typedef enum _D3DFILLMODE {
- D3DFILL_POINT = 1,
- D3DFILL_WIREFRAME = 2,
- D3DFILL_SOLID = 3,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DFILL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DFILLMODE;
-
-typedef struct _D3DLINEPATTERN {
- WORD wRepeatFactor;
- WORD wLinePattern;
-} D3DLINEPATTERN;
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-typedef enum _D3DTEXTUREFILTER {
- D3DFILTER_NEAREST = 1,
- D3DFILTER_LINEAR = 2,
- D3DFILTER_MIPNEAREST = 3,
- D3DFILTER_MIPLINEAR = 4,
- D3DFILTER_LINEARMIPNEAREST = 5,
- D3DFILTER_LINEARMIPLINEAR = 6,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DFILTER_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DTEXTUREFILTER;
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-typedef enum _D3DBLEND {
- D3DBLEND_ZERO = 1,
- D3DBLEND_ONE = 2,
- D3DBLEND_SRCCOLOR = 3,
- D3DBLEND_INVSRCCOLOR = 4,
- D3DBLEND_SRCALPHA = 5,
- D3DBLEND_INVSRCALPHA = 6,
- D3DBLEND_DESTALPHA = 7,
- D3DBLEND_INVDESTALPHA = 8,
- D3DBLEND_DESTCOLOR = 9,
- D3DBLEND_INVDESTCOLOR = 10,
- D3DBLEND_SRCALPHASAT = 11,
- D3DBLEND_BOTHSRCALPHA = 12,
- D3DBLEND_BOTHINVSRCALPHA = 13,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DBLEND;
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-typedef enum _D3DTEXTUREBLEND {
- D3DTBLEND_DECAL = 1,
- D3DTBLEND_MODULATE = 2,
- D3DTBLEND_DECALALPHA = 3,
- D3DTBLEND_MODULATEALPHA = 4,
- D3DTBLEND_DECALMASK = 5,
- D3DTBLEND_MODULATEMASK = 6,
- D3DTBLEND_COPY = 7,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DTBLEND_ADD = 8,
- D3DTBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DTEXTUREBLEND;
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-typedef enum _D3DTEXTUREADDRESS {
- D3DTADDRESS_WRAP = 1,
- D3DTADDRESS_MIRROR = 2,
- D3DTADDRESS_CLAMP = 3,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DTADDRESS_BORDER = 4,
- D3DTADDRESS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DTEXTUREADDRESS;
-
-typedef enum _D3DCULL {
- D3DCULL_NONE = 1,
- D3DCULL_CW = 2,
- D3DCULL_CCW = 3,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DCULL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DCULL;
-
-typedef enum _D3DCMPFUNC {
- D3DCMP_NEVER = 1,
- D3DCMP_LESS = 2,
- D3DCMP_EQUAL = 3,
- D3DCMP_LESSEQUAL = 4,
- D3DCMP_GREATER = 5,
- D3DCMP_NOTEQUAL = 6,
- D3DCMP_GREATEREQUAL = 7,
- D3DCMP_ALWAYS = 8,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DCMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DCMPFUNC;
-
-#if(DIRECT3D_VERSION >= 0x0600)
-typedef enum _D3DSTENCILOP {
- D3DSTENCILOP_KEEP = 1,
- D3DSTENCILOP_ZERO = 2,
- D3DSTENCILOP_REPLACE = 3,
- D3DSTENCILOP_INCRSAT = 4,
- D3DSTENCILOP_DECRSAT = 5,
- D3DSTENCILOP_INVERT = 6,
- D3DSTENCILOP_INCR = 7,
- D3DSTENCILOP_DECR = 8,
- D3DSTENCILOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-} D3DSTENCILOP;
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-typedef enum _D3DFOGMODE {
- D3DFOG_NONE = 0,
- D3DFOG_EXP = 1,
- D3DFOG_EXP2 = 2,
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DFOG_LINEAR = 3,
- D3DFOG_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DFOGMODE;
-
-#if(DIRECT3D_VERSION >= 0x0600)
-typedef enum _D3DZBUFFERTYPE {
- D3DZB_FALSE = 0,
- D3DZB_TRUE = 1, // Z buffering
- D3DZB_USEW = 2, // W buffering
- D3DZB_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-} D3DZBUFFERTYPE;
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-#if(DIRECT3D_VERSION >= 0x0500)
-typedef enum _D3DANTIALIASMODE {
- D3DANTIALIAS_NONE = 0,
- D3DANTIALIAS_SORTDEPENDENT = 1,
- D3DANTIALIAS_SORTINDEPENDENT = 2,
- D3DANTIALIAS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-} D3DANTIALIASMODE;
-
-// Vertex types supported by Direct3D
-typedef enum _D3DVERTEXTYPE {
- D3DVT_VERTEX = 1,
- D3DVT_LVERTEX = 2,
- D3DVT_TLVERTEX = 3,
- D3DVT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-} D3DVERTEXTYPE;
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-// Primitives supported by draw-primitive API
-typedef enum _D3DPRIMITIVETYPE {
- D3DPT_POINTLIST = 1,
- D3DPT_LINELIST = 2,
- D3DPT_LINESTRIP = 3,
- D3DPT_TRIANGLELIST = 4,
- D3DPT_TRIANGLESTRIP = 5,
- D3DPT_TRIANGLEFAN = 6,
- D3DPT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-} D3DPRIMITIVETYPE;
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-/*
- * Amount to add to a state to generate the override for that state.
- */
-#define D3DSTATE_OVERRIDE_BIAS 256
-
-/*
- * A state which sets the override flag for the specified state type.
- */
-#define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS))
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-typedef enum _D3DTRANSFORMSTATETYPE {
- D3DTRANSFORMSTATE_WORLD = 1,
- D3DTRANSFORMSTATE_VIEW = 2,
- D3DTRANSFORMSTATE_PROJECTION = 3,
-#if(DIRECT3D_VERSION >= 0x0700)
- D3DTRANSFORMSTATE_WORLD1 = 4, // 2nd matrix to blend
- D3DTRANSFORMSTATE_WORLD2 = 5, // 3rd matrix to blend
- D3DTRANSFORMSTATE_WORLD3 = 6, // 4th matrix to blend
- D3DTRANSFORMSTATE_TEXTURE0 = 16,
- D3DTRANSFORMSTATE_TEXTURE1 = 17,
- D3DTRANSFORMSTATE_TEXTURE2 = 18,
- D3DTRANSFORMSTATE_TEXTURE3 = 19,
- D3DTRANSFORMSTATE_TEXTURE4 = 20,
- D3DTRANSFORMSTATE_TEXTURE5 = 21,
- D3DTRANSFORMSTATE_TEXTURE6 = 22,
- D3DTRANSFORMSTATE_TEXTURE7 = 23,
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DTRANSFORMSTATE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DTRANSFORMSTATETYPE;
-
-#else
-
-//
-// legacy transform state names
-//
-typedef enum _D3DTRANSFORMSTATETYPE D3DTRANSFORMSTATETYPE;
-#define D3DTRANSFORMSTATE_WORLD (D3DTRANSFORMSTATETYPE)1
-#define D3DTRANSFORMSTATE_VIEW (D3DTRANSFORMSTATETYPE)2
-#define D3DTRANSFORMSTATE_PROJECTION (D3DTRANSFORMSTATETYPE)3
-#define D3DTRANSFORMSTATE_WORLD1 (D3DTRANSFORMSTATETYPE)4
-#define D3DTRANSFORMSTATE_WORLD2 (D3DTRANSFORMSTATETYPE)5
-#define D3DTRANSFORMSTATE_WORLD3 (D3DTRANSFORMSTATETYPE)6
-#define D3DTRANSFORMSTATE_TEXTURE0 (D3DTRANSFORMSTATETYPE)16
-#define D3DTRANSFORMSTATE_TEXTURE1 (D3DTRANSFORMSTATETYPE)17
-#define D3DTRANSFORMSTATE_TEXTURE2 (D3DTRANSFORMSTATETYPE)18
-#define D3DTRANSFORMSTATE_TEXTURE3 (D3DTRANSFORMSTATETYPE)19
-#define D3DTRANSFORMSTATE_TEXTURE4 (D3DTRANSFORMSTATETYPE)20
-#define D3DTRANSFORMSTATE_TEXTURE5 (D3DTRANSFORMSTATETYPE)21
-#define D3DTRANSFORMSTATE_TEXTURE6 (D3DTRANSFORMSTATETYPE)22
-#define D3DTRANSFORMSTATE_TEXTURE7 (D3DTRANSFORMSTATETYPE)23
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-typedef enum _D3DLIGHTSTATETYPE {
- D3DLIGHTSTATE_MATERIAL = 1,
- D3DLIGHTSTATE_AMBIENT = 2,
- D3DLIGHTSTATE_COLORMODEL = 3,
- D3DLIGHTSTATE_FOGMODE = 4,
- D3DLIGHTSTATE_FOGSTART = 5,
- D3DLIGHTSTATE_FOGEND = 6,
- D3DLIGHTSTATE_FOGDENSITY = 7,
-#if(DIRECT3D_VERSION >= 0x0600)
- D3DLIGHTSTATE_COLORVERTEX = 8,
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DLIGHTSTATE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DLIGHTSTATETYPE;
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-typedef enum _D3DRENDERSTATETYPE {
- D3DRENDERSTATE_ANTIALIAS = 2, /* D3DANTIALIASMODE */
- D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4, /* TRUE for perspective correction */
- D3DRENDERSTATE_ZENABLE = 7, /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */
- D3DRENDERSTATE_FILLMODE = 8, /* D3DFILL_MODE */
- D3DRENDERSTATE_SHADEMODE = 9, /* D3DSHADEMODE */
- D3DRENDERSTATE_LINEPATTERN = 10, /* D3DLINEPATTERN */
- D3DRENDERSTATE_ZWRITEENABLE = 14, /* TRUE to enable z writes */
- D3DRENDERSTATE_ALPHATESTENABLE = 15, /* TRUE to enable alpha tests */
- D3DRENDERSTATE_LASTPIXEL = 16, /* TRUE for last-pixel on lines */
- D3DRENDERSTATE_SRCBLEND = 19, /* D3DBLEND */
- D3DRENDERSTATE_DESTBLEND = 20, /* D3DBLEND */
- D3DRENDERSTATE_CULLMODE = 22, /* D3DCULL */
- D3DRENDERSTATE_ZFUNC = 23, /* D3DCMPFUNC */
- D3DRENDERSTATE_ALPHAREF = 24, /* D3DFIXED */
- D3DRENDERSTATE_ALPHAFUNC = 25, /* D3DCMPFUNC */
- D3DRENDERSTATE_DITHERENABLE = 26, /* TRUE to enable dithering */
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DRENDERSTATE_ALPHABLENDENABLE = 27, /* TRUE to enable alpha blending */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
- D3DRENDERSTATE_FOGENABLE = 28, /* TRUE to enable fog blending */
- D3DRENDERSTATE_SPECULARENABLE = 29, /* TRUE to enable specular */
- D3DRENDERSTATE_ZVISIBLE = 30, /* TRUE to enable z checking */
- D3DRENDERSTATE_STIPPLEDALPHA = 33, /* TRUE to enable stippled alpha (RGB device only) */
- D3DRENDERSTATE_FOGCOLOR = 34, /* D3DCOLOR */
- D3DRENDERSTATE_FOGTABLEMODE = 35, /* D3DFOGMODE */
-#if(DIRECT3D_VERSION >= 0x0700)
- D3DRENDERSTATE_FOGSTART = 36, /* Fog start (for both vertex and pixel fog) */
- D3DRENDERSTATE_FOGEND = 37, /* Fog end */
- D3DRENDERSTATE_FOGDENSITY = 38, /* Fog density */
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DRENDERSTATE_EDGEANTIALIAS = 40, /* TRUE to enable edge antialiasing */
- D3DRENDERSTATE_COLORKEYENABLE = 41, /* TRUE to enable source colorkeyed textures */
- D3DRENDERSTATE_ZBIAS = 47, /* LONG Z bias */
- D3DRENDERSTATE_RANGEFOGENABLE = 48, /* Enables range-based fog */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
- D3DRENDERSTATE_STENCILENABLE = 52, /* BOOL enable/disable stenciling */
- D3DRENDERSTATE_STENCILFAIL = 53, /* D3DSTENCILOP to do if stencil test fails */
- D3DRENDERSTATE_STENCILZFAIL = 54, /* D3DSTENCILOP to do if stencil test passes and Z test fails */
- D3DRENDERSTATE_STENCILPASS = 55, /* D3DSTENCILOP to do if both stencil and Z tests pass */
- D3DRENDERSTATE_STENCILFUNC = 56, /* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */
- D3DRENDERSTATE_STENCILREF = 57, /* Reference value used in stencil test */
- D3DRENDERSTATE_STENCILMASK = 58, /* Mask value used in stencil test */
- D3DRENDERSTATE_STENCILWRITEMASK = 59, /* Write mask applied to values written to stencil buffer */
- D3DRENDERSTATE_TEXTUREFACTOR = 60, /* D3DCOLOR used for multi-texture blend */
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-
- /*
- * 128 values [128, 255] are reserved for texture coordinate wrap flags.
- * These are constructed with the D3DWRAP_U and D3DWRAP_V macros. Using
- * a flags word preserves forward compatibility with texture coordinates
- * that are >2D.
- */
- D3DRENDERSTATE_WRAP0 = 128, /* wrap for 1st texture coord. set */
- D3DRENDERSTATE_WRAP1 = 129, /* wrap for 2nd texture coord. set */
- D3DRENDERSTATE_WRAP2 = 130, /* wrap for 3rd texture coord. set */
- D3DRENDERSTATE_WRAP3 = 131, /* wrap for 4th texture coord. set */
- D3DRENDERSTATE_WRAP4 = 132, /* wrap for 5th texture coord. set */
- D3DRENDERSTATE_WRAP5 = 133, /* wrap for 6th texture coord. set */
- D3DRENDERSTATE_WRAP6 = 134, /* wrap for 7th texture coord. set */
- D3DRENDERSTATE_WRAP7 = 135, /* wrap for 8th texture coord. set */
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-#if(DIRECT3D_VERSION >= 0x0700)
- D3DRENDERSTATE_CLIPPING = 136,
- D3DRENDERSTATE_LIGHTING = 137,
- D3DRENDERSTATE_EXTENTS = 138,
- D3DRENDERSTATE_AMBIENT = 139,
- D3DRENDERSTATE_FOGVERTEXMODE = 140,
- D3DRENDERSTATE_COLORVERTEX = 141,
- D3DRENDERSTATE_LOCALVIEWER = 142,
- D3DRENDERSTATE_NORMALIZENORMALS = 143,
- D3DRENDERSTATE_COLORKEYBLENDENABLE = 144,
- D3DRENDERSTATE_DIFFUSEMATERIALSOURCE = 145,
- D3DRENDERSTATE_SPECULARMATERIALSOURCE = 146,
- D3DRENDERSTATE_AMBIENTMATERIALSOURCE = 147,
- D3DRENDERSTATE_EMISSIVEMATERIALSOURCE = 148,
- D3DRENDERSTATE_VERTEXBLEND = 151,
- D3DRENDERSTATE_CLIPPLANEENABLE = 152,
-
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-//
-// retired renderstates - not supported for DX7 interfaces
-//
- D3DRENDERSTATE_TEXTUREHANDLE = 1, /* Texture handle for legacy interfaces (Texture,Texture2) */
- D3DRENDERSTATE_TEXTUREADDRESS = 3, /* D3DTEXTUREADDRESS */
- D3DRENDERSTATE_WRAPU = 5, /* TRUE for wrapping in u */
- D3DRENDERSTATE_WRAPV = 6, /* TRUE for wrapping in v */
- D3DRENDERSTATE_MONOENABLE = 11, /* TRUE to enable mono rasterization */
- D3DRENDERSTATE_ROP2 = 12, /* ROP2 */
- D3DRENDERSTATE_PLANEMASK = 13, /* DWORD physical plane mask */
- D3DRENDERSTATE_TEXTUREMAG = 17, /* D3DTEXTUREFILTER */
- D3DRENDERSTATE_TEXTUREMIN = 18, /* D3DTEXTUREFILTER */
- D3DRENDERSTATE_TEXTUREMAPBLEND = 21, /* D3DTEXTUREBLEND */
- D3DRENDERSTATE_SUBPIXEL = 31, /* TRUE to enable subpixel correction */
- D3DRENDERSTATE_SUBPIXELX = 32, /* TRUE to enable correction in X only */
- D3DRENDERSTATE_STIPPLEENABLE = 39, /* TRUE to enable stippling */
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DRENDERSTATE_BORDERCOLOR = 43, /* Border color for texturing w/border */
- D3DRENDERSTATE_TEXTUREADDRESSU = 44, /* Texture addressing mode for U coordinate */
- D3DRENDERSTATE_TEXTUREADDRESSV = 45, /* Texture addressing mode for V coordinate */
- D3DRENDERSTATE_MIPMAPLODBIAS = 46, /* D3DVALUE Mipmap LOD bias */
- D3DRENDERSTATE_ANISOTROPY = 49, /* Max. anisotropy. 1 = no anisotropy */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
- D3DRENDERSTATE_FLUSHBATCH = 50, /* Explicit flush for DP batching (DX5 Only) */
-#if(DIRECT3D_VERSION >= 0x0600)
- D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT=51, /* BOOL enable sort-independent transparency */
-#endif /* DIRECT3D_VERSION >= 0x0600 */
- D3DRENDERSTATE_STIPPLEPATTERN00 = 64, /* Stipple pattern 01... */
- D3DRENDERSTATE_STIPPLEPATTERN01 = 65,
- D3DRENDERSTATE_STIPPLEPATTERN02 = 66,
- D3DRENDERSTATE_STIPPLEPATTERN03 = 67,
- D3DRENDERSTATE_STIPPLEPATTERN04 = 68,
- D3DRENDERSTATE_STIPPLEPATTERN05 = 69,
- D3DRENDERSTATE_STIPPLEPATTERN06 = 70,
- D3DRENDERSTATE_STIPPLEPATTERN07 = 71,
- D3DRENDERSTATE_STIPPLEPATTERN08 = 72,
- D3DRENDERSTATE_STIPPLEPATTERN09 = 73,
- D3DRENDERSTATE_STIPPLEPATTERN10 = 74,
- D3DRENDERSTATE_STIPPLEPATTERN11 = 75,
- D3DRENDERSTATE_STIPPLEPATTERN12 = 76,
- D3DRENDERSTATE_STIPPLEPATTERN13 = 77,
- D3DRENDERSTATE_STIPPLEPATTERN14 = 78,
- D3DRENDERSTATE_STIPPLEPATTERN15 = 79,
- D3DRENDERSTATE_STIPPLEPATTERN16 = 80,
- D3DRENDERSTATE_STIPPLEPATTERN17 = 81,
- D3DRENDERSTATE_STIPPLEPATTERN18 = 82,
- D3DRENDERSTATE_STIPPLEPATTERN19 = 83,
- D3DRENDERSTATE_STIPPLEPATTERN20 = 84,
- D3DRENDERSTATE_STIPPLEPATTERN21 = 85,
- D3DRENDERSTATE_STIPPLEPATTERN22 = 86,
- D3DRENDERSTATE_STIPPLEPATTERN23 = 87,
- D3DRENDERSTATE_STIPPLEPATTERN24 = 88,
- D3DRENDERSTATE_STIPPLEPATTERN25 = 89,
- D3DRENDERSTATE_STIPPLEPATTERN26 = 90,
- D3DRENDERSTATE_STIPPLEPATTERN27 = 91,
- D3DRENDERSTATE_STIPPLEPATTERN28 = 92,
- D3DRENDERSTATE_STIPPLEPATTERN29 = 93,
- D3DRENDERSTATE_STIPPLEPATTERN30 = 94,
- D3DRENDERSTATE_STIPPLEPATTERN31 = 95,
-
-//
-// retired renderstate names - the values are still used under new naming conventions
-//
- D3DRENDERSTATE_FOGTABLESTART = 36, /* Fog table start */
- D3DRENDERSTATE_FOGTABLEEND = 37, /* Fog table end */
- D3DRENDERSTATE_FOGTABLEDENSITY = 38, /* Fog table density */
-
-#if(DIRECT3D_VERSION >= 0x0500)
- D3DRENDERSTATE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-} D3DRENDERSTATETYPE;
-
-#else
-
-typedef enum _D3DRENDERSTATETYPE D3DRENDERSTATETYPE;
-
-//
-// legacy renderstate names
-//
-#define D3DRENDERSTATE_TEXTUREPERSPECTIVE (D3DRENDERSTATETYPE)4
-#define D3DRENDERSTATE_ZENABLE (D3DRENDERSTATETYPE)7
-#define D3DRENDERSTATE_FILLMODE (D3DRENDERSTATETYPE)8
-#define D3DRENDERSTATE_SHADEMODE (D3DRENDERSTATETYPE)9
-#define D3DRENDERSTATE_LINEPATTERN (D3DRENDERSTATETYPE)10
-#define D3DRENDERSTATE_ZWRITEENABLE (D3DRENDERSTATETYPE)14
-#define D3DRENDERSTATE_ALPHATESTENABLE (D3DRENDERSTATETYPE)15
-#define D3DRENDERSTATE_LASTPIXEL (D3DRENDERSTATETYPE)16
-#define D3DRENDERSTATE_SRCBLEND (D3DRENDERSTATETYPE)19
-#define D3DRENDERSTATE_DESTBLEND (D3DRENDERSTATETYPE)20
-#define D3DRENDERSTATE_CULLMODE (D3DRENDERSTATETYPE)22
-#define D3DRENDERSTATE_ZFUNC (D3DRENDERSTATETYPE)23
-#define D3DRENDERSTATE_ALPHAREF (D3DRENDERSTATETYPE)24
-#define D3DRENDERSTATE_ALPHAFUNC (D3DRENDERSTATETYPE)25
-#define D3DRENDERSTATE_DITHERENABLE (D3DRENDERSTATETYPE)26
-#define D3DRENDERSTATE_ALPHABLENDENABLE (D3DRENDERSTATETYPE)27
-#define D3DRENDERSTATE_FOGENABLE (D3DRENDERSTATETYPE)28
-#define D3DRENDERSTATE_SPECULARENABLE (D3DRENDERSTATETYPE)29
-#define D3DRENDERSTATE_ZVISIBLE (D3DRENDERSTATETYPE)30
-#define D3DRENDERSTATE_STIPPLEDALPHA (D3DRENDERSTATETYPE)33
-#define D3DRENDERSTATE_FOGCOLOR (D3DRENDERSTATETYPE)34
-#define D3DRENDERSTATE_FOGTABLEMODE (D3DRENDERSTATETYPE)35
-#define D3DRENDERSTATE_FOGSTART (D3DRENDERSTATETYPE)36
-#define D3DRENDERSTATE_FOGEND (D3DRENDERSTATETYPE)37
-#define D3DRENDERSTATE_FOGDENSITY (D3DRENDERSTATETYPE)38
-#define D3DRENDERSTATE_EDGEANTIALIAS (D3DRENDERSTATETYPE)40
-#define D3DRENDERSTATE_ZBIAS (D3DRENDERSTATETYPE)47
-#define D3DRENDERSTATE_RANGEFOGENABLE (D3DRENDERSTATETYPE)48
-#define D3DRENDERSTATE_STENCILENABLE (D3DRENDERSTATETYPE)52
-#define D3DRENDERSTATE_STENCILFAIL (D3DRENDERSTATETYPE)53
-#define D3DRENDERSTATE_STENCILZFAIL (D3DRENDERSTATETYPE)54
-#define D3DRENDERSTATE_STENCILPASS (D3DRENDERSTATETYPE)55
-#define D3DRENDERSTATE_STENCILFUNC (D3DRENDERSTATETYPE)56
-#define D3DRENDERSTATE_STENCILREF (D3DRENDERSTATETYPE)57
-#define D3DRENDERSTATE_STENCILMASK (D3DRENDERSTATETYPE)58
-#define D3DRENDERSTATE_STENCILWRITEMASK (D3DRENDERSTATETYPE)59
-#define D3DRENDERSTATE_TEXTUREFACTOR (D3DRENDERSTATETYPE)60
-#define D3DRENDERSTATE_WRAP0 (D3DRENDERSTATETYPE)128
-#define D3DRENDERSTATE_WRAP1 (D3DRENDERSTATETYPE)129
-#define D3DRENDERSTATE_WRAP2 (D3DRENDERSTATETYPE)130
-#define D3DRENDERSTATE_WRAP3 (D3DRENDERSTATETYPE)131
-#define D3DRENDERSTATE_WRAP4 (D3DRENDERSTATETYPE)132
-#define D3DRENDERSTATE_WRAP5 (D3DRENDERSTATETYPE)133
-#define D3DRENDERSTATE_WRAP6 (D3DRENDERSTATETYPE)134
-#define D3DRENDERSTATE_WRAP7 (D3DRENDERSTATETYPE)135
-
-#define D3DRENDERSTATE_CLIPPING (D3DRENDERSTATETYPE)136
-#define D3DRENDERSTATE_LIGHTING (D3DRENDERSTATETYPE)137
-#define D3DRENDERSTATE_EXTENTS (D3DRENDERSTATETYPE)138
-#define D3DRENDERSTATE_AMBIENT (D3DRENDERSTATETYPE)139
-#define D3DRENDERSTATE_FOGVERTEXMODE (D3DRENDERSTATETYPE)140
-#define D3DRENDERSTATE_COLORVERTEX (D3DRENDERSTATETYPE)141
-#define D3DRENDERSTATE_LOCALVIEWER (D3DRENDERSTATETYPE)142
-#define D3DRENDERSTATE_NORMALIZENORMALS (D3DRENDERSTATETYPE)143
-#define D3DRENDERSTATE_COLORKEYBLENDENABLE (D3DRENDERSTATETYPE)144
-#define D3DRENDERSTATE_DIFFUSEMATERIALSOURCE (D3DRENDERSTATETYPE)145
-#define D3DRENDERSTATE_SPECULARMATERIALSOURCE (D3DRENDERSTATETYPE)146
-#define D3DRENDERSTATE_AMBIENTMATERIALSOURCE (D3DRENDERSTATETYPE)147
-#define D3DRENDERSTATE_EMISSIVEMATERIALSOURCE (D3DRENDERSTATETYPE)148
-#define D3DRENDERSTATE_VERTEXBLEND (D3DRENDERSTATETYPE)151
-#define D3DRENDERSTATE_CLIPPLANEENABLE (D3DRENDERSTATETYPE)152
-
-//
-// retired renderstates - not supported for DX7 interfaces
-//
-#define D3DRENDERSTATE_TEXTUREHANDLE (D3DRENDERSTATETYPE)1
-#define D3DRENDERSTATE_ANTIALIAS (D3DRENDERSTATETYPE)2
-#define D3DRENDERSTATE_TEXTUREADDRESS (D3DRENDERSTATETYPE)3
-#define D3DRENDERSTATE_WRAPU (D3DRENDERSTATETYPE)5
-#define D3DRENDERSTATE_WRAPV (D3DRENDERSTATETYPE)6
-#define D3DRENDERSTATE_MONOENABLE (D3DRENDERSTATETYPE)11
-#define D3DRENDERSTATE_ROP2 (D3DRENDERSTATETYPE)12
-#define D3DRENDERSTATE_PLANEMASK (D3DRENDERSTATETYPE)13
-#define D3DRENDERSTATE_TEXTUREMAG (D3DRENDERSTATETYPE)17
-#define D3DRENDERSTATE_TEXTUREMIN (D3DRENDERSTATETYPE)18
-#define D3DRENDERSTATE_TEXTUREMAPBLEND (D3DRENDERSTATETYPE)21
-#define D3DRENDERSTATE_SUBPIXEL (D3DRENDERSTATETYPE)31
-#define D3DRENDERSTATE_SUBPIXELX (D3DRENDERSTATETYPE)32
-#define D3DRENDERSTATE_STIPPLEENABLE (D3DRENDERSTATETYPE)39
-#define D3DRENDERSTATE_OLDALPHABLENDENABLE (D3DRENDERSTATETYPE)42
-#define D3DRENDERSTATE_BORDERCOLOR (D3DRENDERSTATETYPE)43
-#define D3DRENDERSTATE_TEXTUREADDRESSU (D3DRENDERSTATETYPE)44
-#define D3DRENDERSTATE_TEXTUREADDRESSV (D3DRENDERSTATETYPE)45
-#define D3DRENDERSTATE_MIPMAPLODBIAS (D3DRENDERSTATETYPE)46
-#define D3DRENDERSTATE_ANISOTROPY (D3DRENDERSTATETYPE)49
-#define D3DRENDERSTATE_FLUSHBATCH (D3DRENDERSTATETYPE)50
-#define D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT (D3DRENDERSTATETYPE)51
-#define D3DRENDERSTATE_STIPPLEPATTERN00 (D3DRENDERSTATETYPE)64
-#define D3DRENDERSTATE_STIPPLEPATTERN01 (D3DRENDERSTATETYPE)65
-#define D3DRENDERSTATE_STIPPLEPATTERN02 (D3DRENDERSTATETYPE)66
-#define D3DRENDERSTATE_STIPPLEPATTERN03 (D3DRENDERSTATETYPE)67
-#define D3DRENDERSTATE_STIPPLEPATTERN04 (D3DRENDERSTATETYPE)68
-#define D3DRENDERSTATE_STIPPLEPATTERN05 (D3DRENDERSTATETYPE)69
-#define D3DRENDERSTATE_STIPPLEPATTERN06 (D3DRENDERSTATETYPE)70
-#define D3DRENDERSTATE_STIPPLEPATTERN07 (D3DRENDERSTATETYPE)71
-#define D3DRENDERSTATE_STIPPLEPATTERN08 (D3DRENDERSTATETYPE)72
-#define D3DRENDERSTATE_STIPPLEPATTERN09 (D3DRENDERSTATETYPE)73
-#define D3DRENDERSTATE_STIPPLEPATTERN10 (D3DRENDERSTATETYPE)74
-#define D3DRENDERSTATE_STIPPLEPATTERN11 (D3DRENDERSTATETYPE)75
-#define D3DRENDERSTATE_STIPPLEPATTERN12 (D3DRENDERSTATETYPE)76
-#define D3DRENDERSTATE_STIPPLEPATTERN13 (D3DRENDERSTATETYPE)77
-#define D3DRENDERSTATE_STIPPLEPATTERN14 (D3DRENDERSTATETYPE)78
-#define D3DRENDERSTATE_STIPPLEPATTERN15 (D3DRENDERSTATETYPE)79
-#define D3DRENDERSTATE_STIPPLEPATTERN16 (D3DRENDERSTATETYPE)80
-#define D3DRENDERSTATE_STIPPLEPATTERN17 (D3DRENDERSTATETYPE)81
-#define D3DRENDERSTATE_STIPPLEPATTERN18 (D3DRENDERSTATETYPE)82
-#define D3DRENDERSTATE_STIPPLEPATTERN19 (D3DRENDERSTATETYPE)83
-#define D3DRENDERSTATE_STIPPLEPATTERN20 (D3DRENDERSTATETYPE)84
-#define D3DRENDERSTATE_STIPPLEPATTERN21 (D3DRENDERSTATETYPE)85
-#define D3DRENDERSTATE_STIPPLEPATTERN22 (D3DRENDERSTATETYPE)86
-#define D3DRENDERSTATE_STIPPLEPATTERN23 (D3DRENDERSTATETYPE)87
-#define D3DRENDERSTATE_STIPPLEPATTERN24 (D3DRENDERSTATETYPE)88
-#define D3DRENDERSTATE_STIPPLEPATTERN25 (D3DRENDERSTATETYPE)89
-#define D3DRENDERSTATE_STIPPLEPATTERN26 (D3DRENDERSTATETYPE)90
-#define D3DRENDERSTATE_STIPPLEPATTERN27 (D3DRENDERSTATETYPE)91
-#define D3DRENDERSTATE_STIPPLEPATTERN28 (D3DRENDERSTATETYPE)92
-#define D3DRENDERSTATE_STIPPLEPATTERN29 (D3DRENDERSTATETYPE)93
-#define D3DRENDERSTATE_STIPPLEPATTERN30 (D3DRENDERSTATETYPE)94
-#define D3DRENDERSTATE_STIPPLEPATTERN31 (D3DRENDERSTATETYPE)95
-
-//
-// retired renderstates - not supported for DX8 interfaces
-//
-#define D3DRENDERSTATE_COLORKEYENABLE (D3DRENDERSTATETYPE)41
-#define D3DRENDERSTATE_COLORKEYBLENDENABLE (D3DRENDERSTATETYPE)144
-
-//
-// retired renderstate names - the values are still used under new naming conventions
-//
-#define D3DRENDERSTATE_BLENDENABLE (D3DRENDERSTATETYPE)27
-#define D3DRENDERSTATE_FOGTABLESTART (D3DRENDERSTATETYPE)36
-#define D3DRENDERSTATE_FOGTABLEEND (D3DRENDERSTATETYPE)37
-#define D3DRENDERSTATE_FOGTABLEDENSITY (D3DRENDERSTATETYPE)38
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-// Values for material source
-typedef enum _D3DMATERIALCOLORSOURCE
-{
- D3DMCS_MATERIAL = 0, // Color from material is used
- D3DMCS_COLOR1 = 1, // Diffuse vertex color is used
- D3DMCS_COLOR2 = 2, // Specular vertex color is used
- D3DMCS_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
-} D3DMATERIALCOLORSOURCE;
-
-
-#if(DIRECT3D_VERSION >= 0x0500)
-// For back-compatibility with legacy compilations
-#define D3DRENDERSTATE_BLENDENABLE D3DRENDERSTATE_ALPHABLENDENABLE
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-
-#if(DIRECT3D_VERSION >= 0x0600)
-
-// Bias to apply to the texture coordinate set to apply a wrap to.
-#define D3DRENDERSTATE_WRAPBIAS 128UL
-
-/* Flags to construct the WRAP render states */
-#define D3DWRAP_U 0x00000001L
-#define D3DWRAP_V 0x00000002L
-
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION >= 0x0700)
-
-/* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */
-#define D3DWRAPCOORD_0 0x00000001L // same as D3DWRAP_U
-#define D3DWRAPCOORD_1 0x00000002L // same as D3DWRAP_V
-#define D3DWRAPCOORD_2 0x00000004L
-#define D3DWRAPCOORD_3 0x00000008L
-
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-#define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))
-
-typedef struct _D3DSTATE {
- union {
-#if(DIRECT3D_VERSION < 0x0800)
- D3DTRANSFORMSTATETYPE dtstTransformStateType;
-#endif //(DIRECT3D_VERSION < 0x0800)
- D3DLIGHTSTATETYPE dlstLightStateType;
- D3DRENDERSTATETYPE drstRenderStateType;
- };
- union {
- DWORD dwArg[1];
- D3DVALUE dvArg[1];
- };
-} D3DSTATE, *LPD3DSTATE;
-
-
-/*
- * Operation used to load matrices
- * hDstMat = hSrcMat
- */
-typedef struct _D3DMATRIXLOAD {
- D3DMATRIXHANDLE hDestMatrix; /* Destination matrix */
- D3DMATRIXHANDLE hSrcMatrix; /* Source matrix */
-} D3DMATRIXLOAD, *LPD3DMATRIXLOAD;
-
-/*
- * Operation used to multiply matrices
- * hDstMat = hSrcMat1 * hSrcMat2
- */
-typedef struct _D3DMATRIXMULTIPLY {
- D3DMATRIXHANDLE hDestMatrix; /* Destination matrix */
- D3DMATRIXHANDLE hSrcMatrix1; /* First source matrix */
- D3DMATRIXHANDLE hSrcMatrix2; /* Second source matrix */
-} D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY;
-
-/*
- * Operation used to transform and light vertices.
- */
-typedef struct _D3DPROCESSVERTICES {
- DWORD dwFlags; /* Do we transform or light or just copy? */
- WORD wStart; /* Index to first vertex in source */
- WORD wDest; /* Index to first vertex in local buffer */
- DWORD dwCount; /* Number of vertices to be processed */
- DWORD dwReserved; /* Must be zero */
-} D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES;
-
-#define D3DPROCESSVERTICES_TRANSFORMLIGHT 0x00000000L
-#define D3DPROCESSVERTICES_TRANSFORM 0x00000001L
-#define D3DPROCESSVERTICES_COPY 0x00000002L
-#define D3DPROCESSVERTICES_OPMASK 0x00000007L
-
-#define D3DPROCESSVERTICES_UPDATEEXTENTS 0x00000008L
-#define D3DPROCESSVERTICES_NOCOLOR 0x00000010L
-
-
-#if(DIRECT3D_VERSION >= 0x0600)
-
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-/*
- * State enumerants for per-stage texture processing.
- */
-typedef enum _D3DTEXTURESTAGESTATETYPE
-{
- D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */
- D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */
- D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */
- D3DTSS_ALPHAOP = 4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */
- D3DTSS_ALPHAARG1 = 5, /* D3DTA_* (texture arg) */
- D3DTSS_ALPHAARG2 = 6, /* D3DTA_* (texture arg) */
- D3DTSS_BUMPENVMAT00 = 7, /* D3DVALUE (bump mapping matrix) */
- D3DTSS_BUMPENVMAT01 = 8, /* D3DVALUE (bump mapping matrix) */
- D3DTSS_BUMPENVMAT10 = 9, /* D3DVALUE (bump mapping matrix) */
- D3DTSS_BUMPENVMAT11 = 10, /* D3DVALUE (bump mapping matrix) */
- D3DTSS_TEXCOORDINDEX = 11, /* identifies which set of texture coordinates index this texture */
- D3DTSS_ADDRESS = 12, /* D3DTEXTUREADDRESS for both coordinates */
- D3DTSS_ADDRESSU = 13, /* D3DTEXTUREADDRESS for U coordinate */
- D3DTSS_ADDRESSV = 14, /* D3DTEXTUREADDRESS for V coordinate */
- D3DTSS_BORDERCOLOR = 15, /* D3DCOLOR */
- D3DTSS_MAGFILTER = 16, /* D3DTEXTUREMAGFILTER filter to use for magnification */
- D3DTSS_MINFILTER = 17, /* D3DTEXTUREMINFILTER filter to use for minification */
- D3DTSS_MIPFILTER = 18, /* D3DTEXTUREMIPFILTER filter to use between mipmaps during minification */
- D3DTSS_MIPMAPLODBIAS = 19, /* D3DVALUE Mipmap LOD bias */
- D3DTSS_MAXMIPLEVEL = 20, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */
- D3DTSS_MAXANISOTROPY = 21, /* DWORD maximum anisotropy */
- D3DTSS_BUMPENVLSCALE = 22, /* D3DVALUE scale for bump map luminance */
- D3DTSS_BUMPENVLOFFSET = 23, /* D3DVALUE offset for bump map luminance */
-#if(DIRECT3D_VERSION >= 0x0700)
- D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */
-#endif /* DIRECT3D_VERSION >= 0x0700 */
- D3DTSS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
-} D3DTEXTURESTAGESTATETYPE;
-
-#if(DIRECT3D_VERSION >= 0x0700)
-// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position
-// and normal in the camera space) should be taken as texture coordinates
-// Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from
-//
-#define D3DTSS_TCI_PASSTHRU 0x00000000
-#define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000
-#define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000
-#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-/*
- * Enumerations for COLOROP and ALPHAOP texture blending operations set in
- * texture processing stage controls in D3DRENDERSTATE.
- */
-typedef enum _D3DTEXTUREOP
-{
-// Control
- D3DTOP_DISABLE = 1, // disables stage
- D3DTOP_SELECTARG1 = 2, // the default
- D3DTOP_SELECTARG2 = 3,
-
-// Modulate
- D3DTOP_MODULATE = 4, // multiply args together
- D3DTOP_MODULATE2X = 5, // multiply and 1 bit
- D3DTOP_MODULATE4X = 6, // multiply and 2 bits
-
-// Add
- D3DTOP_ADD = 7, // add arguments together
- D3DTOP_ADDSIGNED = 8, // add with -0.5 bias
- D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit
- D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation
- D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product
- // Arg1 + Arg2 - Arg1*Arg2
- // = Arg1 + (1-Arg1)*Arg2
-
-// Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
- D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha
- D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha
- D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRENDERSTATE_TEXTUREFACTOR
- // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
- D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha
- D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color
-
-// Specular mapping
- D3DTOP_PREMODULATE = 17, // modulate with next texture before use
- D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB
- // COLOROP only
- D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A
- // COLOROP only
- D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB
- // COLOROP only
- D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
- // COLOROP only
-
-// Bump mapping
- D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation
- D3DTOP_BUMPENVMAPLUMINANCE = 23, // with luminance channel
- // This can do either diffuse or specular bump mapping with correct input.
- // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)
- // where each component has been scaled and offset to make it signed.
- // The result is replicated into all four (including alpha) channels.
- // This is a valid COLOROP only.
- D3DTOP_DOTPRODUCT3 = 24,
-
- D3DTOP_FORCE_DWORD = 0x7fffffff,
-} D3DTEXTUREOP;
-
-/*
- * Values for COLORARG1,2 and ALPHAARG1,2 texture blending operations
- * set in texture processing stage controls in D3DRENDERSTATE.
- */
-#define D3DTA_SELECTMASK 0x0000000f // mask for arg selector
-#define D3DTA_DIFFUSE 0x00000000 // select diffuse color
-#define D3DTA_CURRENT 0x00000001 // select result of previous stage
-#define D3DTA_TEXTURE 0x00000002 // select texture color
-#define D3DTA_TFACTOR 0x00000003 // select RENDERSTATE_TEXTUREFACTOR
-#if(DIRECT3D_VERSION >= 0x0700)
-#define D3DTA_SPECULAR 0x00000004 // select specular color
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-#define D3DTA_COMPLEMENT 0x00000010 // take 1.0 - x
-#define D3DTA_ALPHAREPLICATE 0x00000020 // replicate alpha to color components
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-/*
- * IDirect3DTexture2 State Filter Types
- */
-typedef enum _D3DTEXTUREMAGFILTER
-{
- D3DTFG_POINT = 1, // nearest
- D3DTFG_LINEAR = 2, // linear interpolation
- D3DTFG_FLATCUBIC = 3, // cubic
- D3DTFG_GAUSSIANCUBIC = 4, // different cubic kernel
- D3DTFG_ANISOTROPIC = 5, //
-#if(DIRECT3D_VERSION >= 0x0700)
-#endif /* DIRECT3D_VERSION >= 0x0700 */
- D3DTFG_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
-} D3DTEXTUREMAGFILTER;
-
-typedef enum _D3DTEXTUREMINFILTER
-{
- D3DTFN_POINT = 1, // nearest
- D3DTFN_LINEAR = 2, // linear interpolation
- D3DTFN_ANISOTROPIC = 3, //
- D3DTFN_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
-} D3DTEXTUREMINFILTER;
-
-typedef enum _D3DTEXTUREMIPFILTER
-{
- D3DTFP_NONE = 1, // mipmapping disabled (use MAG filter)
- D3DTFP_POINT = 2, // nearest
- D3DTFP_LINEAR = 3, // linear interpolation
- D3DTFP_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
-} D3DTEXTUREMIPFILTER;
-
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-/*
- * Triangle flags
- */
-
-/*
- * Tri strip and fan flags.
- * START loads all three vertices
- * EVEN and ODD load just v3 with even or odd culling
- * START_FLAT contains a count from 0 to 29 that allows the
- * whole strip or fan to be culled in one hit.
- * e.g. for a quad len = 1
- */
-#define D3DTRIFLAG_START 0x00000000L
-#define D3DTRIFLAG_STARTFLAT(len) (len) /* 0 < len < 30 */
-#define D3DTRIFLAG_ODD 0x0000001eL
-#define D3DTRIFLAG_EVEN 0x0000001fL
-
-/*
- * Triangle edge flags
- * enable edges for wireframe or antialiasing
- */
-#define D3DTRIFLAG_EDGEENABLE1 0x00000100L /* v0-v1 edge */
-#define D3DTRIFLAG_EDGEENABLE2 0x00000200L /* v1-v2 edge */
-#define D3DTRIFLAG_EDGEENABLE3 0x00000400L /* v2-v0 edge */
-#define D3DTRIFLAG_EDGEENABLETRIANGLE \
- (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3)
-
-/*
- * Primitive structures and related defines. Vertex offsets are to types
- * D3DVERTEX, D3DLVERTEX, or D3DTLVERTEX.
- */
-
-/*
- * Triangle list primitive structure
- */
-typedef struct _D3DTRIANGLE {
- union {
- WORD v1; /* Vertex indices */
- WORD wV1;
- };
- union {
- WORD v2;
- WORD wV2;
- };
- union {
- WORD v3;
- WORD wV3;
- };
- WORD wFlags; /* Edge (and other) flags */
-} D3DTRIANGLE, *LPD3DTRIANGLE;
-
-/*
- * Line list structure.
- * The instruction count defines the number of line segments.
- */
-typedef struct _D3DLINE {
- union {
- WORD v1; /* Vertex indices */
- WORD wV1;
- };
- union {
- WORD v2;
- WORD wV2;
- };
-} D3DLINE, *LPD3DLINE;
-
-/*
- * Span structure
- * Spans join a list of points with the same y value.
- * If the y value changes, a new span is started.
- */
-typedef struct _D3DSPAN {
- WORD wCount; /* Number of spans */
- WORD wFirst; /* Index to first vertex */
-} D3DSPAN, *LPD3DSPAN;
-
-/*
- * Point structure
- */
-typedef struct _D3DPOINT {
- WORD wCount; /* number of points */
- WORD wFirst; /* index to first vertex */
-} D3DPOINT, *LPD3DPOINT;
-
-
-/*
- * Forward branch structure.
- * Mask is logically anded with the driver status mask
- * if the result equals 'value', the branch is taken.
- */
-typedef struct _D3DBRANCH {
- DWORD dwMask; /* Bitmask against D3D status */
- DWORD dwValue;
- BOOL bNegate; /* TRUE to negate comparison */
- DWORD dwOffset; /* How far to branch forward (0 for exit)*/
-} D3DBRANCH, *LPD3DBRANCH;
-
-/*
- * Status used for set status instruction.
- * The D3D status is initialised on device creation
- * and is modified by all execute calls.
- */
-typedef struct _D3DSTATUS {
- DWORD dwFlags; /* Do we set extents or status */
- DWORD dwStatus; /* D3D status */
- D3DRECT drExtent;
-} D3DSTATUS, *LPD3DSTATUS;
-
-#define D3DSETSTATUS_STATUS 0x00000001L
-#define D3DSETSTATUS_EXTENTS 0x00000002L
-#define D3DSETSTATUS_ALL (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS)
-
-#if(DIRECT3D_VERSION >= 0x0500)
-typedef struct _D3DCLIPSTATUS {
- DWORD dwFlags; /* Do we set 2d extents, 3D extents or status */
- DWORD dwStatus; /* Clip status */
- float minx, maxx; /* X extents */
- float miny, maxy; /* Y extents */
- float minz, maxz; /* Z extents */
-} D3DCLIPSTATUS, *LPD3DCLIPSTATUS;
-
-#define D3DCLIPSTATUS_STATUS 0x00000001L
-#define D3DCLIPSTATUS_EXTENTS2 0x00000002L
-#define D3DCLIPSTATUS_EXTENTS3 0x00000004L
-
-#endif /* DIRECT3D_VERSION >= 0x0500 */
-/*
- * Statistics structure
- */
-typedef struct _D3DSTATS {
- DWORD dwSize;
- DWORD dwTrianglesDrawn;
- DWORD dwLinesDrawn;
- DWORD dwPointsDrawn;
- DWORD dwSpansDrawn;
- DWORD dwVerticesProcessed;
-} D3DSTATS, *LPD3DSTATS;
-
-/*
- * Execute options.
- * When calling using D3DEXECUTE_UNCLIPPED all the primitives
- * inside the buffer must be contained within the viewport.
- */
-#define D3DEXECUTE_CLIPPED 0x00000001l
-#define D3DEXECUTE_UNCLIPPED 0x00000002l
-
-typedef struct _D3DEXECUTEDATA {
- DWORD dwSize;
- DWORD dwVertexOffset;
- DWORD dwVertexCount;
- DWORD dwInstructionOffset;
- DWORD dwInstructionLength;
- DWORD dwHVertexOffset;
- D3DSTATUS dsStatus; /* Status after execute */
-} D3DEXECUTEDATA, *LPD3DEXECUTEDATA;
-
-/*
- * Palette flags.
- * This are or'ed with the peFlags in the PALETTEENTRYs passed to DirectDraw.
- */
-#define D3DPAL_FREE 0x00 /* Renderer may use this entry freely */
-#define D3DPAL_READONLY 0x40 /* Renderer may not set this entry */
-#define D3DPAL_RESERVED 0x80 /* Renderer may not use this entry */
-
-
-#if(DIRECT3D_VERSION >= 0x0600)
-
-typedef struct _D3DVERTEXBUFFERDESC {
- DWORD dwSize;
- DWORD dwCaps;
- DWORD dwFVF;
- DWORD dwNumVertices;
-} D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC;
-
-#define D3DVBCAPS_SYSTEMMEMORY 0x00000800l
-#define D3DVBCAPS_WRITEONLY 0x00010000l
-#define D3DVBCAPS_OPTIMIZED 0x80000000l
-#define D3DVBCAPS_DONOTCLIP 0x00000001l
-
-/* Vertex Operations for ProcessVertices */
-#define D3DVOP_LIGHT (1 << 10)
-#define D3DVOP_TRANSFORM (1 << 0)
-#define D3DVOP_CLIP (1 << 2)
-#define D3DVOP_EXTENTS (1 << 3)
-
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-/* The maximum number of vertices user can pass to any d3d
- drawing function or to create vertex buffer with
-*/
-#define D3DMAXNUMVERTICES ((1<<16) - 1)
-/* The maximum number of primitives user can pass to any d3d
- drawing function.
-*/
-#define D3DMAXNUMPRIMITIVES ((1<<16) - 1)
-
-#if(DIRECT3D_VERSION >= 0x0700)
-
-/* Bits for dwFlags in ProcessVertices call */
-#define D3DPV_DONOTCOPYDATA (1 << 0)
-
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-//-------------------------------------------------------------------
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-// Flexible vertex format bits
-//
-#define D3DFVF_RESERVED0 0x001
-#define D3DFVF_POSITION_MASK 0x00E
-#define D3DFVF_XYZ 0x002
-#define D3DFVF_XYZRHW 0x004
-#if(DIRECT3D_VERSION >= 0x0700)
-#define D3DFVF_XYZB1 0x006
-#define D3DFVF_XYZB2 0x008
-#define D3DFVF_XYZB3 0x00a
-#define D3DFVF_XYZB4 0x00c
-#define D3DFVF_XYZB5 0x00e
-
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-#define D3DFVF_NORMAL 0x010
-#define D3DFVF_RESERVED1 0x020
-#define D3DFVF_DIFFUSE 0x040
-#define D3DFVF_SPECULAR 0x080
-
-#define D3DFVF_TEXCOUNT_MASK 0xf00
-#define D3DFVF_TEXCOUNT_SHIFT 8
-#define D3DFVF_TEX0 0x000
-#define D3DFVF_TEX1 0x100
-#define D3DFVF_TEX2 0x200
-#define D3DFVF_TEX3 0x300
-#define D3DFVF_TEX4 0x400
-#define D3DFVF_TEX5 0x500
-#define D3DFVF_TEX6 0x600
-#define D3DFVF_TEX7 0x700
-#define D3DFVF_TEX8 0x800
-
-#define D3DFVF_RESERVED2 0xf000 // 4 reserved bits
-
-#else
-#define D3DFVF_RESERVED1 0x020
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-#define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 )
-#define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \
- D3DFVF_SPECULAR | D3DFVF_TEX1 )
-#define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \
- D3DFVF_TEX1 )
-
-
-typedef struct _D3DDP_PTRSTRIDE
-{
- LPVOID lpvData;
- DWORD dwStride;
-} D3DDP_PTRSTRIDE;
-
-#define D3DDP_MAXTEXCOORD 8
-
-typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA
-{
- D3DDP_PTRSTRIDE position;
- D3DDP_PTRSTRIDE normal;
- D3DDP_PTRSTRIDE diffuse;
- D3DDP_PTRSTRIDE specular;
- D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD];
-} D3DDRAWPRIMITIVESTRIDEDDATA, *LPD3DDRAWPRIMITIVESTRIDEDDATA;
-//---------------------------------------------------------------------
-// ComputeSphereVisibility return values
-//
-#define D3DVIS_INSIDE_FRUSTUM 0
-#define D3DVIS_INTERSECT_FRUSTUM 1
-#define D3DVIS_OUTSIDE_FRUSTUM 2
-#define D3DVIS_INSIDE_LEFT 0
-#define D3DVIS_INTERSECT_LEFT (1 << 2)
-#define D3DVIS_OUTSIDE_LEFT (2 << 2)
-#define D3DVIS_INSIDE_RIGHT 0
-#define D3DVIS_INTERSECT_RIGHT (1 << 4)
-#define D3DVIS_OUTSIDE_RIGHT (2 << 4)
-#define D3DVIS_INSIDE_TOP 0
-#define D3DVIS_INTERSECT_TOP (1 << 6)
-#define D3DVIS_OUTSIDE_TOP (2 << 6)
-#define D3DVIS_INSIDE_BOTTOM 0
-#define D3DVIS_INTERSECT_BOTTOM (1 << 8)
-#define D3DVIS_OUTSIDE_BOTTOM (2 << 8)
-#define D3DVIS_INSIDE_NEAR 0
-#define D3DVIS_INTERSECT_NEAR (1 << 10)
-#define D3DVIS_OUTSIDE_NEAR (2 << 10)
-#define D3DVIS_INSIDE_FAR 0
-#define D3DVIS_INTERSECT_FAR (1 << 12)
-#define D3DVIS_OUTSIDE_FAR (2 << 12)
-
-#define D3DVIS_MASK_FRUSTUM (3 << 0)
-#define D3DVIS_MASK_LEFT (3 << 2)
-#define D3DVIS_MASK_RIGHT (3 << 4)
-#define D3DVIS_MASK_TOP (3 << 6)
-#define D3DVIS_MASK_BOTTOM (3 << 8)
-#define D3DVIS_MASK_NEAR (3 << 10)
-#define D3DVIS_MASK_FAR (3 << 12)
-
-#endif /* DIRECT3D_VERSION >= 0x0600 */
-
-#if(DIRECT3D_VERSION < 0x0800)
-
-#if(DIRECT3D_VERSION >= 0x0700)
-
-// To be used with GetInfo()
-#define D3DDEVINFOID_TEXTUREMANAGER 1
-#define D3DDEVINFOID_D3DTEXTUREMANAGER 2
-#define D3DDEVINFOID_TEXTURING 3
-
-typedef enum _D3DSTATEBLOCKTYPE
-{
- D3DSBT_ALL = 1, // capture all state
- D3DSBT_PIXELSTATE = 2, // capture pixel state
- D3DSBT_VERTEXSTATE = 3, // capture vertex state
- D3DSBT_FORCE_DWORD = 0xffffffff
-} D3DSTATEBLOCKTYPE;
-
-// The D3DVERTEXBLENDFLAGS type is used with D3DRENDERSTATE_VERTEXBLEND state.
-//
-typedef enum _D3DVERTEXBLENDFLAGS
-{
- D3DVBLEND_DISABLE = 0, // Disable vertex blending
- D3DVBLEND_1WEIGHT = 1, // blend between 2 matrices
- D3DVBLEND_2WEIGHTS = 2, // blend between 3 matrices
- D3DVBLEND_3WEIGHTS = 3, // blend between 4 matrices
-} D3DVERTEXBLENDFLAGS;
-
-typedef enum _D3DTEXTURETRANSFORMFLAGS {
- D3DTTFF_DISABLE = 0, // texture coordinates are passed directly
- D3DTTFF_COUNT1 = 1, // rasterizer should expect 1-D texture coords
- D3DTTFF_COUNT2 = 2, // rasterizer should expect 2-D texture coords
- D3DTTFF_COUNT3 = 3, // rasterizer should expect 3-D texture coords
- D3DTTFF_COUNT4 = 4, // rasterizer should expect 4-D texture coords
- D3DTTFF_PROJECTED = 256, // texcoords to be divided by COUNTth element
- D3DTTFF_FORCE_DWORD = 0x7fffffff,
-} D3DTEXTURETRANSFORMFLAGS;
-
-// Macros to set texture coordinate format bits in the FVF id
-
-#define D3DFVF_TEXTUREFORMAT2 0 // Two floating point values
-#define D3DFVF_TEXTUREFORMAT1 3 // One floating point value
-#define D3DFVF_TEXTUREFORMAT3 1 // Three floating point values
-#define D3DFVF_TEXTUREFORMAT4 2 // Four floating point values
-
-#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
-#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
-#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
-#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
-
-
-#endif /* DIRECT3D_VERSION >= 0x0700 */
-
-#else
-//
-// legacy vertex blend names
-//
-typedef enum _D3DVERTEXBLENDFLAGS D3DVERTEXBLENDFLAGS;
-#define D3DVBLEND_DISABLE (D3DVERTEXBLENDFLAGS)0
-#define D3DVBLEND_1WEIGHT (D3DVERTEXBLENDFLAGS)1
-#define D3DVBLEND_2WEIGHTS (D3DVERTEXBLENDFLAGS)2
-#define D3DVBLEND_3WEIGHTS (D3DVERTEXBLENDFLAGS)3
-
-#endif //(DIRECT3D_VERSION < 0x0800)
-
-#pragma pack()
-#pragma warning(default:4201)
-
-#endif /* _D3DTYPES_H_ */
-
diff --git a/include/inttypes.h b/include/inttypes.h
deleted file mode 100644
index dfbe45508..000000000
--- a/include/inttypes.h
+++ /dev/null
@@ -1,306 +0,0 @@
-// ISO C9x compliant inttypes.h for Microsoft Visual Studio
-// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
-//
-// Copyright (c) 2006-2013 Alexander Chemeris
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-//
-// 2. 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.
-//
-// 3. Neither the name of the product nor the names of its contributors may
-// be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _MSC_VER // [
-#error "Use this header only with Microsoft Visual C++ compilers!"
-#endif // _MSC_VER ]
-
-#ifndef _MSC_INTTYPES_H_ // [
-#define _MSC_INTTYPES_H_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#include <stdint.h>
-
-// 7.8 Format conversion of integer types
-
-typedef struct {
- intmax_t quot;
- intmax_t rem;
-} imaxdiv_t;
-
-// 7.8.1 Macros for format specifiers
-
-#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198
-
-// The fprintf macros for signed integers are:
-#define PRId8 "d"
-#define PRIi8 "i"
-#define PRIdLEAST8 "d"
-#define PRIiLEAST8 "i"
-#define PRIdFAST8 "d"
-#define PRIiFAST8 "i"
-
-#define PRId16 "hd"
-#define PRIi16 "hi"
-#define PRIdLEAST16 "hd"
-#define PRIiLEAST16 "hi"
-#define PRIdFAST16 "hd"
-#define PRIiFAST16 "hi"
-
-#define PRId32 "I32d"
-#define PRIi32 "I32i"
-#define PRIdLEAST32 "I32d"
-#define PRIiLEAST32 "I32i"
-#define PRIdFAST32 "I32d"
-#define PRIiFAST32 "I32i"
-
-#define PRId64 "I64d"
-#define PRIi64 "I64i"
-#define PRIdLEAST64 "I64d"
-#define PRIiLEAST64 "I64i"
-#define PRIdFAST64 "I64d"
-#define PRIiFAST64 "I64i"
-
-#define PRIdMAX "I64d"
-#define PRIiMAX "I64i"
-
-#define PRIdPTR "Id"
-#define PRIiPTR "Ii"
-
-// The fprintf macros for unsigned integers are:
-#define PRIo8 "o"
-#define PRIu8 "u"
-#define PRIx8 "x"
-#define PRIX8 "X"
-#define PRIoLEAST8 "o"
-#define PRIuLEAST8 "u"
-#define PRIxLEAST8 "x"
-#define PRIXLEAST8 "X"
-#define PRIoFAST8 "o"
-#define PRIuFAST8 "u"
-#define PRIxFAST8 "x"
-#define PRIXFAST8 "X"
-
-#define PRIo16 "ho"
-#define PRIu16 "hu"
-#define PRIx16 "hx"
-#define PRIX16 "hX"
-#define PRIoLEAST16 "ho"
-#define PRIuLEAST16 "hu"
-#define PRIxLEAST16 "hx"
-#define PRIXLEAST16 "hX"
-#define PRIoFAST16 "ho"
-#define PRIuFAST16 "hu"
-#define PRIxFAST16 "hx"
-#define PRIXFAST16 "hX"
-
-#define PRIo32 "I32o"
-#define PRIu32 "I32u"
-#define PRIx32 "I32x"
-#define PRIX32 "I32X"
-#define PRIoLEAST32 "I32o"
-#define PRIuLEAST32 "I32u"
-#define PRIxLEAST32 "I32x"
-#define PRIXLEAST32 "I32X"
-#define PRIoFAST32 "I32o"
-#define PRIuFAST32 "I32u"
-#define PRIxFAST32 "I32x"
-#define PRIXFAST32 "I32X"
-
-#define PRIo64 "I64o"
-#define PRIu64 "I64u"
-#define PRIx64 "I64x"
-#define PRIX64 "I64X"
-#define PRIoLEAST64 "I64o"
-#define PRIuLEAST64 "I64u"
-#define PRIxLEAST64 "I64x"
-#define PRIXLEAST64 "I64X"
-#define PRIoFAST64 "I64o"
-#define PRIuFAST64 "I64u"
-#define PRIxFAST64 "I64x"
-#define PRIXFAST64 "I64X"
-
-#define PRIoMAX "I64o"
-#define PRIuMAX "I64u"
-#define PRIxMAX "I64x"
-#define PRIXMAX "I64X"
-
-#define PRIoPTR "Io"
-#define PRIuPTR "Iu"
-#define PRIxPTR "Ix"
-#define PRIXPTR "IX"
-
-// The fscanf macros for signed integers are:
-#define SCNd8 "d"
-#define SCNi8 "i"
-#define SCNdLEAST8 "d"
-#define SCNiLEAST8 "i"
-#define SCNdFAST8 "d"
-#define SCNiFAST8 "i"
-
-#define SCNd16 "hd"
-#define SCNi16 "hi"
-#define SCNdLEAST16 "hd"
-#define SCNiLEAST16 "hi"
-#define SCNdFAST16 "hd"
-#define SCNiFAST16 "hi"
-
-#define SCNd32 "ld"
-#define SCNi32 "li"
-#define SCNdLEAST32 "ld"
-#define SCNiLEAST32 "li"
-#define SCNdFAST32 "ld"
-#define SCNiFAST32 "li"
-
-#define SCNd64 "I64d"
-#define SCNi64 "I64i"
-#define SCNdLEAST64 "I64d"
-#define SCNiLEAST64 "I64i"
-#define SCNdFAST64 "I64d"
-#define SCNiFAST64 "I64i"
-
-#define SCNdMAX "I64d"
-#define SCNiMAX "I64i"
-
-#ifdef _WIN64 // [
-# define SCNdPTR "I64d"
-# define SCNiPTR "I64i"
-#else // _WIN64 ][
-# define SCNdPTR "ld"
-# define SCNiPTR "li"
-#endif // _WIN64 ]
-
-// The fscanf macros for unsigned integers are:
-#define SCNo8 "o"
-#define SCNu8 "u"
-#define SCNx8 "x"
-#define SCNX8 "X"
-#define SCNoLEAST8 "o"
-#define SCNuLEAST8 "u"
-#define SCNxLEAST8 "x"
-#define SCNXLEAST8 "X"
-#define SCNoFAST8 "o"
-#define SCNuFAST8 "u"
-#define SCNxFAST8 "x"
-#define SCNXFAST8 "X"
-
-#define SCNo16 "ho"
-#define SCNu16 "hu"
-#define SCNx16 "hx"
-#define SCNX16 "hX"
-#define SCNoLEAST16 "ho"
-#define SCNuLEAST16 "hu"
-#define SCNxLEAST16 "hx"
-#define SCNXLEAST16 "hX"
-#define SCNoFAST16 "ho"
-#define SCNuFAST16 "hu"
-#define SCNxFAST16 "hx"
-#define SCNXFAST16 "hX"
-
-#define SCNo32 "lo"
-#define SCNu32 "lu"
-#define SCNx32 "lx"
-#define SCNX32 "lX"
-#define SCNoLEAST32 "lo"
-#define SCNuLEAST32 "lu"
-#define SCNxLEAST32 "lx"
-#define SCNXLEAST32 "lX"
-#define SCNoFAST32 "lo"
-#define SCNuFAST32 "lu"
-#define SCNxFAST32 "lx"
-#define SCNXFAST32 "lX"
-
-#define SCNo64 "I64o"
-#define SCNu64 "I64u"
-#define SCNx64 "I64x"
-#define SCNX64 "I64X"
-#define SCNoLEAST64 "I64o"
-#define SCNuLEAST64 "I64u"
-#define SCNxLEAST64 "I64x"
-#define SCNXLEAST64 "I64X"
-#define SCNoFAST64 "I64o"
-#define SCNuFAST64 "I64u"
-#define SCNxFAST64 "I64x"
-#define SCNXFAST64 "I64X"
-
-#define SCNoMAX "I64o"
-#define SCNuMAX "I64u"
-#define SCNxMAX "I64x"
-#define SCNXMAX "I64X"
-
-#ifdef _WIN64 // [
-# define SCNoPTR "I64o"
-# define SCNuPTR "I64u"
-# define SCNxPTR "I64x"
-# define SCNXPTR "I64X"
-#else // _WIN64 ][
-# define SCNoPTR "lo"
-# define SCNuPTR "lu"
-# define SCNxPTR "lx"
-# define SCNXPTR "lX"
-#endif // _WIN64 ]
-
-#endif // __STDC_FORMAT_MACROS ]
-
-// 7.8.2 Functions for greatest-width integer types
-
-// 7.8.2.1 The imaxabs function
-#define imaxabs _abs64
-
-// 7.8.2.2 The imaxdiv function
-
-// This is modified version of div() function from Microsoft's div.c found
-// in %MSVC.NET%\crt\src\div.c
-#ifdef STATIC_IMAXDIV // [
-static
-#else // STATIC_IMAXDIV ][
-_inline
-#endif // STATIC_IMAXDIV ]
-imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
-{
- imaxdiv_t result;
-
- result.quot = numer / denom;
- result.rem = numer % denom;
-
- if (numer < 0 && result.rem > 0) {
- // did division wrong; must fix up
- ++result.quot;
- result.rem -= denom;
- }
-
- return result;
-}
-
-// 7.8.2.3 The strtoimax and strtoumax functions
-#define strtoimax _strtoi64
-#define strtoumax _strtoui64
-
-// 7.8.2.4 The wcstoimax and wcstoumax functions
-#define wcstoimax _wcstoi64
-#define wcstoumax _wcstoui64
-
-
-#endif // _MSC_INTTYPES_H_ ]
diff --git a/include/moreuuids.h b/include/moreuuids.h
index 311d2c1c0..92e148765 100644
--- a/include/moreuuids.h
+++ b/include/moreuuids.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -380,7 +380,7 @@ DEFINE_GUID(MEDIASUBTYPE_ADPCM_AMV,
struct WAVEFORMATEXPS2 : public WAVEFORMATEX {
DWORD dwInterleave;
- struct WAVEFORMATEXPS2() {
+ WAVEFORMATEXPS2() {
ZeroMemory(this, sizeof(*this));
cbSize = sizeof(WAVEFORMATEXPS2) - sizeof(WAVEFORMATEX);
}
@@ -396,9 +396,6 @@ DEFINE_GUID(MEDIASUBTYPE_PS2_SUB,
DEFINE_GUID(CLSID_DXR,
0x760a8f35, 0x97e7, 0x479d, 0xaa, 0xf5, 0xda, 0x9e, 0xff, 0x95, 0xd7, 0x51);
-DEFINE_GUID(CLSID_madVR,
- 0xe1a8b82a, 0x32ce, 0x4b0d, 0xbe, 0x0d, 0xaa, 0x68, 0xc7, 0x72, 0xe4, 0x23);
-
//
// Ogg
//
@@ -1019,6 +1016,18 @@ DEFINE_GUID(MEDIASUBTYPE_MPG2,
DEFINE_GUID(MEDIASUBTYPE_FLIC,
0x434C4641, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
+// {4D415243-0000-0010-8000-00AA00389B71}
+DEFINE_GUID(MEDIASUBTYPE_CRAM,
+ MAKEFOURCC('C', 'R', 'A', 'M'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
+
+// {4D414857-0000-0010-8000-00AA00389B71}
+DEFINE_GUID(MEDIASUBTYPE_WHAM,
+ MAKEFOURCC('W', 'H', 'A', 'M'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
+
+// {4356534D-0000-0010-8000-00AA00389B71}
+DEFINE_GUID(MEDIASUBTYPE_MSVC,
+ MAKEFOURCC('M', 'S', 'V', 'C'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
+
// {30313476-0000-0010-8000-00AA00389B71}
DEFINE_GUID(MEDIASUBTYPE_v410,
MAKEFOURCC('v', '4', '1', '0'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
@@ -1052,7 +1061,7 @@ DEFINE_GUID(MEDIASUBTYPE_HDMV_LPCM_AUDIO,
struct WAVEFORMATEX_HDMV_LPCM : public WAVEFORMATEX {
BYTE channel_conf;
- struct WAVEFORMATEX_HDMV_LPCM() {
+ WAVEFORMATEX_HDMV_LPCM() {
ZeroMemory(this, sizeof(*this));
cbSize = sizeof(WAVEFORMATEX_HDMV_LPCM) - sizeof(WAVEFORMATEX);
}
@@ -1080,7 +1089,7 @@ struct WAVEFORMATEXFFMPEG {
int nCodecId;
WAVEFORMATEX wfex;
- struct WAVEFORMATEXFFMPEG() {
+ WAVEFORMATEXFFMPEG() {
nCodecId = 0;
}
};
@@ -1198,3 +1207,17 @@ DEFINE_GUID(CLSID_XySubFilter, 0x2DFCB782, 0xEC20, 0x4A7C, 0xB5, 0x30, 0x45, 0x7
// XySubFilterAutoLoader - {6B237877-902B-4C6C-92F6-E63169A5166C}
DEFINE_GUID(CLSID_XySubFilter_AutoLoader, 0x6B237877, 0x902B, 0x4C6C, 0x92, 0xF6, 0xE6, 0x31, 0x69, 0xA5, 0x16, 0x6C);
+
+// sanear (internal version)
+// SaneAudioRenderer::Factory::GetFilterGuid() is the right way do optain it,
+// but we link DSUtil to everything and consequently will have to link sanear to everything.
+DEFINE_GUID(CLSID_SANEAR_INTERNAL, 0x2AE00773, 0x819A, 0x40FB, 0xA5, 0x54, 0x54, 0x82, 0x7E, 0x11, 0x63, 0x59);
+
+// sanear (standalone version) - {DF557071-C9FD-433A-9627-81E0D3640ED9}
+DEFINE_GUID(CLSID_SANEAR, 0xdf557071, 0xc9fd, 0x433a, 0x96, 0x27, 0x81, 0xe0, 0xd3, 0x64, 0xe, 0xd9);
+
+// AssFilter - {8A3704F3-BE3B-4944-9FF3-EE8757FDBDA5}
+DEFINE_GUID(CLSID_AssFilter, 0x8A3704F3, 0xBE3B, 0x4944, 0x9F, 0xF3, 0xEE, 0x87, 0x57, 0xFD, 0xBD, 0xA5);
+
+// AssFilterAutoLoader - {8A6DFC6A-0A79-4790-85DA-0688B8093B54}
+DEFINE_GUID(CLSID_AssFilter_AutoLoader, 0x8A6DFC6A, 0x0A79, 0x4790, 0x85, 0xDA, 0x06, 0x88, 0xB8, 0x09, 0x3B, 0x54);
diff --git a/include/mpc-hc_config.h b/include/mpc-hc_config.h
index 0d1e04a51..70d152efe 100644
--- a/include/mpc-hc_config.h
+++ b/include/mpc-hc_config.h
@@ -1,6 +1,6 @@
#ifndef ISPP_INVOKED
/*
- * (C) 2013 see Authors.txt
+ * (C) 2013-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -31,9 +31,9 @@
#endif
#endif
-#define WEBSITE_URL _T("http://mpc-hc.org/")
-#define DOWNLOAD_URL _T("http://mpc-hc.org/downloads/")
-#define UPDATE_URL _T("http://mpc-hc.org/version.txt")
+#define WEBSITE_URL _T("https://mpc-hc.org/")
+#define DOWNLOAD_URL _T("https://mpc-hc.org/downloads/")
+#define UPDATE_URL _T("https://mpc-hc.org/version.txt")
#define TRAC_URL _T("https://trac.mpc-hc.org/")
#define BUGS_URL _T("https://trac.mpc-hc.org/wiki/How_to_Report_Issues")
#define TOOLBARS_URL _T("https://trac.mpc-hc.org/wiki/Toolbar_images")
@@ -47,10 +47,14 @@
#define SHADERS_DIR _T("Shaders")
#define SHADERS_EXT _T(".hlsl")
-// If you distribute your builds, please disable minidumps by defining ENABLE_MINIDUMP 0.
-#define ENABLE_MINIDUMP 1
-
// If this is enabled, the registered LAV Filters can be loaded as internal filters
#define ENABLE_LOAD_EXTERNAL_LAVF_AS_INTERNAL 0
+#define DO_MAKE_STR(x) _T(#x)
+#define MAKE_STR(x) DO_MAKE_STR(x)
+
+#define MPC_DX_SDK_MONTH _T("June")
+#define MPC_DX_SDK_YEAR 2010
+#define MPC_DX_SDK_NUMBER 43
+
#endif // MPC_HC_CONFIG_H
diff --git a/include/mvrInterfaces.h b/include/mvrInterfaces.h
index 24f63d0ac..df71751e7 100644
--- a/include/mvrInterfaces.h
+++ b/include/mvrInterfaces.h
@@ -1,11 +1,14 @@
// ***************************************************************
-// mvrInterfaces.h version: 1.0.6 date: 2013-06-04
+// mvrInterfaces.h version: 1.0.9 date: 2016-01-23
// -------------------------------------------------------------
// various interfaces exported by madVR
// -------------------------------------------------------------
-// Copyright (C) 2011 - 2013 www.madshi.net, BSD license
+// Copyright (C) 2011 - 2016 www.madshi.net, BSD license
// ***************************************************************
+// 2016-01-23 1.0.9 added EC_VIDEO_SIZE_CHANGED "lParam" values
+// 2015-06-21 1.0.8 added IMadVRCommand
+// 2014-01-18 1.0.7 added IMadVRSettings2
// 2013-06-04 1.0.6 added IMadVRInfo
// 2013-01-23 1.0.5 added IMadVRSubclassReplacement
// 2012-11-18 1.0.4 added IMadVRExternalPixelShaders
@@ -23,7 +26,70 @@
// use this CLSID to create a madVR instance
-// DEFINE_GUID(CLSID_madVR, 0xe1a8b82a, 0x32ce, 0x4b0d, 0xbe, 0x0d, 0xaa, 0x68, 0xc7, 0x72, 0xe4, 0x23);
+DEFINE_GUID(CLSID_madVR, 0xe1a8b82a, 0x32ce, 0x4b0d, 0xbe, 0x0d, 0xaa, 0x68, 0xc7, 0x72, 0xe4, 0x23);
+
+// ---------------------------------------------------------------------------
+// video size/position setup
+// ---------------------------------------------------------------------------
+
+// madVR supports "IVideoWindow" and "IBasicVideo". Both need to be used in
+// a specific way to achieve the best results. You should always use
+// IVideoWindow::SetWindowPosition() to make madVR cover the whole rendering
+// client area of your media player's window.
+
+// Some media players offer different zoom modes. Here's what madVR supports:
+// 1) touchInside:
+// The video is zoomed, maintaining the correct AR (aspect ratio), in such
+// a way that the video is displayed as large as possible, without losing
+// any image content. There may be black bars, either left/right, or
+// top/bottom.
+// 2) touchOutside:
+// The video is zoomed, maintaining the correct AR, in such a way that the
+// video is displayed as large as possible, without any black bars. Some
+// image content may be cut off.
+// 3) stretch:
+// The video is zoomed and stretched to perfectly fill the rendering
+// client area. The AR might be distorted, but there will be no black bars.
+// 4) 100% (or 50% or 200% or some other percent number):
+// The video is displayed at 100% (or 50% or ...) of the original size,
+// maintaining the correct AR.
+
+// Some media players offers different X/Y video alignments/positions. Here's
+// what madVR supports:
+// 1) left/top:
+// The video is positioned left/top aligned.
+// 2) center:
+// The video is rendered in centered positioned.
+// 3) right/bottom:
+// The video is positioned right/bottom aligned.
+
+// In addition to these zoom and alignment modes, some media players allow
+// further fine tuning the zoom/position by increasing/decreasing the zoom
+// factor, or by offsetting the image position. madVR supports that as well,
+// of course.
+
+// When using madVR, you have 3 options to setup zoom modes and positions:
+// a) You can calculate a specific target rect for the video yourself and
+// tell madVR about it by calling IBasicVideo::SetDestinationPosition().
+// b) You can use the "IMadVRCommand" interface (described in detail below)
+// to tell madVR which zoom & alignment modes to use.
+// c) Don't do anything. In that case madVR will default to "touchInside"
+// and "center" zoom/alignment modes.
+
+// In case of a) madVR will actually try to "understand" your target rect
+// and map it internally to one of the supported zoom modes. This is done
+// because madVR has complex options for the user to decide how zooming
+// should be performed exactly. In order to process these options, madVR
+// may have to dynamically adjust the target rect to things like screen
+// masking, or detected hard coded subtitles in the black bars.
+
+// Usually madVR's interpretation of your target rect works just fine. But
+// there are situations when madVR has no way to know which zoom mode is really
+// active in the media player. E.g. playing a 720p movie in a 720p window
+// would match any of the available zoom or alignment modes. Because of that
+// it is usually recommended to use options b) or c) described above.
+// If you set a specific zoom mode (option b), madVR will ignore any calls
+// to IBasicVideo::SetDestinationPosition().
// ---------------------------------------------------------------------------
// IMadVROsdServices
@@ -55,11 +121,17 @@
// if you want the mouse message to be "eaten" (instead of passed on)
typedef void (__stdcall *OSDMOUSECALLBACK)(LPCSTR name, LPVOID context, UINT message, WPARAM wParam, int posX, int posY);
+// return values for IOsdRenderCallback::ClearBackground/RenderOsd callbacks
+const static HRESULT CALLBACK_EMPTY = 4306; // the render callback didn't do anything at all
+const static HRESULT CALLBACK_INFO_DISPLAY = 0; // info display, doesn't need low latency
+const static HRESULT CALLBACK_USER_INTERFACE = 77001; // user interface, switches madVR into low latency mode
+
// when using the (2) render callbacks method, you need to provide
// madVR with an instance of the IOsdRenderCallback interface
// it contains three callbacks you have to provide
-[uuid("57FBF6DC-3E5F-4641-935A-CB62F00C9958")]
-interface IOsdRenderCallback : public IUnknown
+//[uuid("57FBF6DC-3E5F-4641-935A-CB62F00C9958")]
+//interface IOsdRenderCallback : public IUnknown
+DECLARE_INTERFACE_IID_(IOsdRenderCallback, IUnknown, "57FBF6DC-3E5F-4641-935A-CB62F00C9958")
{
// "SetDevice" is called when you register the callbacks
// it provides you with the D3D device object used by madVR
@@ -69,16 +141,24 @@ interface IOsdRenderCallback : public IUnknown
// "ClearBackground" is called after madVR cleared the render target
// "RenderOsd" is called after madVR is fully done with rendering
- // fullOutputRect = (0, 0, outputSurfaceWidth, outputSurfaceHeight)
+ // fullOutputRect = for fullscreen drawing, this is the rect you want to stay in (left/top can be non-zero!)
// activeVideoRect = active video rendering rect inside of fullOutputRect
// background area = the part of fullOutputRect which isn't covered by activeVideoRect
+ // possible return values: CALLBACK_EMPTY etc, see definitions above
STDMETHOD(ClearBackground)(LPCSTR name, REFERENCE_TIME frameStart, RECT *fullOutputRect, RECT *activeVideoRect) = 0;
STDMETHOD(RenderOsd )(LPCSTR name, REFERENCE_TIME frameStart, RECT *fullOutputRect, RECT *activeVideoRect) = 0;
};
+// flags for IMadVROsdServices::OsdSetBitmap
+const static int BITMAP_STRETCH_TO_OUTPUT = 1; // stretch OSD bitmap to video/output rect
+const static int BITMAP_INFO_DISPLAY = 2; // info display, doesn't need low latency
+const static int BITMAP_USER_INTERFACE = 4; // user interface, switches madVR into low latency mode
+const static int BITMAP_MASKING_AWARE = 8; // caller is aware of screen masking, bitmaps are positioned properly inside of "fullOutputRect"
+
// this is the main interface which madVR provides to you
-[uuid("3AE03A88-F613-4BBA-AD3E-EE236976BF9A")]
-interface IMadVROsdServices : public IUnknown
+//[uuid("3AE03A88-F613-4BBA-AD3E-EE236976BF9A")]
+//interface IMadVROsdServices : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVROsdServices, IUnknown, "3AE03A88-F613-4BBA-AD3E-EE236976BF9A")
{
// this API provides the (1) bitmap based method
STDMETHOD(OsdSetBitmap)(
@@ -91,7 +171,7 @@ interface IMadVROsdServices : public IUnknown
bool posRelativeToVideoRect = false, // draw relative to TRUE: the active video rect; FALSE: the full output rect
int zOrder = 0, // high zOrder OSD elements are drawn on top of those with smaller zOrder values
DWORD duration = 0, // how many milliseconds shall the OSD element be shown (0 = infinite)?
- DWORD flags = 0, // undefined - set to 0
+ DWORD flags = 0, // see definitions above
OSDMOUSECALLBACK callback = NULL, // optional callback for mouse events
LPVOID callbackContext = NULL, // this context is passed to the callback
LPVOID reserved = NULL // undefined - set to NULL
@@ -99,7 +179,7 @@ interface IMadVROsdServices : public IUnknown
// this API allows you to ask the current video rectangles
STDMETHOD(OsdGetVideoRects)(
- RECT *fullOutputRect, // (0, 0, outputSurfaceWidth, outputSurfaceHeight)
+ RECT *fullOutputRect, // for fullscreen drawing, this is the rect you want to stay in (left/top can be non-zero!)
RECT *activeVideoRect // active video rendering rect inside of fullOutputRect
) = 0;
@@ -110,8 +190,7 @@ interface IMadVROsdServices : public IUnknown
LPVOID reserved = NULL // undefined - set to NULL
) = 0;
- // this API allows you to force madVR to redraw the current video frame
- // useful when using the (2) render callback method, when the graph is paused
+ // this API is obselete, calling it has no effect
STDMETHOD(OsdRedrawFrame)(void) = 0;
};
@@ -126,8 +205,9 @@ interface IMadVROsdServices : public IUnknown
// There can always be only one message active at the same time, so basically
// the messages are overwriting each other.
-[uuid("ABA34FDA-DD22-4E00-9AB4-4ABF927D0B0C")]
-interface IMadVRTextOsd : public IUnknown
+//[uuid("ABA34FDA-DD22-4E00-9AB4-4ABF927D0B0C")]
+//interface IMadVRTextOsd : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRTextOsd, IUnknown, "ABA34FDA-DD22-4E00-9AB4-4ABF927D0B0C")
{
STDMETHOD(OsdDisplayMessage)(LPCWSTR text, DWORD milliseconds) = 0;
STDMETHOD(OsdClearMessage)(void) = 0;
@@ -156,41 +236,15 @@ interface IMadVRTextOsd : public IUnknown
// If you use this interface, send the messages to madVR from the same window
// that madVR would otherwise have subclassed.
-[uuid("9B517604-2D86-4FA2-A20C-ECF88301B010")]
-interface IMadVRSubclassReplacement : public IUnknown
+//[uuid("9B517604-2D86-4FA2-A20C-ECF88301B010")]
+//interface IMadVRSubclassReplacement : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRSubclassReplacement, IUnknown, "9B517604-2D86-4FA2-A20C-ECF88301B010")
{
STDMETHOD(DisableSubclassing)(void) = 0;
STDMETHOD_(BOOL, ParentWindowProc)(HWND hwnd, UINT uMsg, WPARAM *wParam, LPARAM *lParam, LRESULT *result) = 0;
};
// ---------------------------------------------------------------------------
-// IMadVRSeekbarControl
-// ---------------------------------------------------------------------------
-
-// if you draw your own seekbar and absolutely insist on disliking madVR's
-// own seekbar, you can forcefully hide it by using this interface
-// using this interface only affects the current madVR instance
-
-[uuid("D2D3A520-7CFA-46EB-BA3B-6194A028781C")]
-interface IMadVRSeekbarControl : public IUnknown
-{
- STDMETHOD(DisableSeekbar)(BOOL disable) = 0;
-};
-
-// ---------------------------------------------------------------------------
-// IMadVRExclusiveModeControl
-// ---------------------------------------------------------------------------
-
-// you can use this interface to turn madVR's automatic exclusive mode on/off
-// using this interface only affects the current madVR instance
-
-[uuid("88A69329-3CD3-47D6-ADEF-89FA23AFC7F3")]
-interface IMadVRExclusiveModeControl : public IUnknown
-{
- STDMETHOD(DisableExclusiveMode)(BOOL disable) = 0;
-};
-
-// ---------------------------------------------------------------------------
// IMadVRExclusiveModeCallback
// ---------------------------------------------------------------------------
@@ -202,44 +256,15 @@ interface IMadVRExclusiveModeControl : public IUnknown
#define ExclusiveModeWasJustLeft 4
typedef void (__stdcall *EXCLUSIVEMODECALLBACK)(LPVOID context, int event);
-[uuid("51CA9252-ACC5-4EC5-A02E-0F9F8C42B536")]
-interface IMadVRExclusiveModeCallback : public IUnknown
+//[uuid("51CA9252-ACC5-4EC5-A02E-0F9F8C42B536")]
+//interface IMadVRExclusiveModeCallback : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRExclusiveModeCallback, IUnknown, "51CA9252-ACC5-4EC5-A02E-0F9F8C42B536")
{
STDMETHOD( Register)(EXCLUSIVEMODECALLBACK exclusiveModeCallback, LPVOID context) = 0;
STDMETHOD(Unregister)(EXCLUSIVEMODECALLBACK exclusiveModeCallback, LPVOID context) = 0;
};
// ---------------------------------------------------------------------------
-// IMadVRDirect3D9Manager
-// ---------------------------------------------------------------------------
-
-// You can make madVR use your Direct3D9 device(s) instead of creating its
-// own. If you do that, madVR will not automatically switch between
-// fullscreen and windowed mode, anymore. It's your duty then to enter
-// fullscreen exclusive mode, if you want madVR to use it. madVR will still
-// reset the devices, though, if necessary (lost device etc).
-
-[uuid("1CAEE23B-D14B-4DB4-8AEA-F3528CB78922")]
-interface IMadVRDirect3D9Manager : public IUnknown
-{
- // Creating 3 different devices for scanline reading, rendering and
- // presentation can improve overall performance. If you don't like that
- // idea, just feed madVR with the same device for all tasks.
- // You can't create new devices if one device is already in fullscreen
- // exclusive mode. So if you want to provide madVR with 3 different
- // devices, while still using exclusive mode, make sure you create the
- // scanline reading and rendering devices before setting the presentation
- // device to fullscreen exclusive mode.
- STDMETHOD(UseTheseDevices)(LPDIRECT3DDEVICE9 scanlineReading, LPDIRECT3DDEVICE9 rendering, LPDIRECT3DDEVICE9 presentation) = 0;
-
- // madVR contains a display mode changer which, depending on the video
- // size and frame rate, may decide to switch display modes. If you don't
- // want madVR to change either resolution or refresh rates, you can
- // disable this functionality partially or completely.
- STDMETHOD(ConfigureDisplayModeChanger)(BOOL allowResolutionChanges, BOOL allowRefreshRateChanges) = 0;
-};
-
-// ---------------------------------------------------------------------------
// IMadVRExternalPixelShaders
// ---------------------------------------------------------------------------
@@ -248,8 +273,9 @@ interface IMadVRDirect3D9Manager : public IUnknown
#define ShaderStage_PreScale 0
#define ShaderStage_PostScale 1
-[uuid("B6A6D5D4-9637-4C7D-AAAE-BC0B36F5E433")]
-interface IMadVRExternalPixelShaders : public IUnknown
+//[uuid("B6A6D5D4-9637-4C7D-AAAE-BC0B36F5E433")]
+//interface IMadVRExternalPixelShaders : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRExternalPixelShaders, IUnknown, "B6A6D5D4-9637-4C7D-AAAE-BC0B36F5E433")
{
STDMETHOD(ClearPixelShaders)(int stage) = 0;
STDMETHOD(AddPixelShader)(LPCSTR sourceCode, LPCSTR compileProfile, int stage, LPVOID reserved) = 0;
@@ -261,8 +287,9 @@ interface IMadVRExternalPixelShaders : public IUnknown
// this interface allows you to get all kinds of information from madVR
-[uuid("8FAB7F31-06EF-444C-A798-10314E185532")]
-interface IMadVRInfo : public IUnknown
+//[uuid("8FAB7F31-06EF-444C-A798-10314E185532")]
+//interface IMadVRInfo : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRInfo, IUnknown, "8FAB7F31-06EF-444C-A798-10314E185532")
{
// The memory for strings and binary data is allocated by the callee
// by using LocalAlloc. It is the caller's responsibility to release the
@@ -283,8 +310,12 @@ interface IMadVRInfo : public IUnknown
// version, string, madVR version number
// originalVideoSize, size, size of the video before scaling and AR adjustments
// arAdjustedVideoSize, size, size of the video after AR adjustments
+// videoCropRect, rect, crops "originalVideoSize" down, e.g. because of detected black bars
// videoOutputRect, rect, final pos/size of the video after all scaling operations
+// croppedVideoOutputRect, rect, final pos/size of the "videoCropRect", after all scaling operations
// subtitleTargetRect, rect, consumer wish for where to place the subtitles
+// fullscreenRect, rect, for fullscreen drawing, this is the rect you want to stay in (left/top can be non-zero!)
+// rotation, int, current rotation of the video in degrees (0, 90, 180 or 270)
// frameRate, ulonglong, frame rate of the video after deinterlacing (REFERENCE_TIME)
// refreshRate, double, display refresh rate (0, if unknown)
// displayModeSize, size, display mode width/height
@@ -296,6 +327,48 @@ interface IMadVRInfo : public IUnknown
// dxvaScalingActive, bool, is DXVA2 scaling being used at the moment?
// ivtcActive, bool, is madVR's IVTC algorithm active at the moment?
// osdLatency, int, how much milliseconds will pass for an OSD change to become visible?
+// seekbarRect, rect, where exactly would (or does) madVR draw its seekbar?
+
+// ---------------------------------------------------------------------------
+// IMadVRCommand
+// ---------------------------------------------------------------------------
+
+// This interface allows you to give commands to madVR. These commands only
+// affect the current madVR instance. They don't change permanent settings.
+
+//[uuid("5E9599D1-C5DB-4A84-98A9-09BC5F8F1B79")]
+//interface IMadVRCommand : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRCommand, IUnknown, "5E9599D1-C5DB-4A84-98A9-09BC5F8F1B79")
+{
+ // Command names and LPWSTR values are treated case insensitive.
+ STDMETHOD(SendCommand )(LPCSTR command) = 0;
+ STDMETHOD(SendCommandBool )(LPCSTR command, bool parameter) = 0;
+ STDMETHOD(SendCommandInt )(LPCSTR command, int parameter) = 0;
+ STDMETHOD(SendCommandSize )(LPCSTR command, SIZE parameter) = 0;
+ STDMETHOD(SendCommandRect )(LPCSTR command, RECT parameter) = 0;
+ STDMETHOD(SendCommandUlonglong)(LPCSTR command, ULONGLONG parameter) = 0;
+ STDMETHOD(SendCommandDouble )(LPCSTR command, double parameter) = 0;
+ STDMETHOD(SendCommandString )(LPCSTR command, LPWSTR parameter) = 0;
+ STDMETHOD(SendCommandBin )(LPCSTR command, LPVOID parameter,
+ int size ) = 0;
+};
+
+// available commands:
+// -------------------
+// disableSeekbar, bool, turn madVR's automatic exclusive mode on/off
+// disableExclusiveMode, bool, turn madVR's automatic exclusive mode on/off
+// keyPress int, interpret as "BYTE keyPress[4]"; keyPress[0] = key code (e.g. VK_F1); keyPress[1-3] = BOOLEAN "shift/ctrl/menu" state
+// setZoomMode, LPWSTR, video target size: "autoDetect|touchInside|touchOutside|stretch|100%|10%|20%|25%|30%|33%|40%|50%|60%|66%|70%|75%|80%|90%|110%|120%|125%|130%|140%|150%|160%|170%|175%|180%|190%|200%|225%|250%|300%|350%|400%|450%|500%|600%|700%|800%"
+// setZoomFactorX, double, additional X zoom factor (applied after zoom mode), default/neutral = 1.0
+// setZoomFactorY, double, additional Y zoom factor (applied after zoom mode), default/neutral = 1.0
+// setZoomAlignX, LPWSTR, video X pos alignment: left|center|right
+// setZoomAlignY, LPWSTR, video Y pos alignment: top|center|bottom
+// setZoomOffsetX, double, additional X pos offset in percent, default/neutral = 0.0
+// setZoomOffsetY, double, additional Y pos offset in percent, default/neutral = 0.0
+// setArOverride, double, aspect ratio override (before cropping), default/neutral = 0.0
+// rotate, int, rotates the video by 90, 180 or 270 degrees (0 = no rotation)
+// redraw, forces madVR to redraw the current frame (in paused mode)
+// restoreDisplayModeNow, makes madVR immediately restore the original display mode
// ---------------------------------------------------------------------------
// IMadVRSettings
@@ -313,15 +386,16 @@ interface IMadVRInfo : public IUnknown
// setting value. E.g. the following calls will all return the same value:
// (1) GetBoolean(L"dontDither", &boolVal);
// (2) GetBoolean(L"don't use dithering", &boolVal);
-// (3) GetBoolean(L"tradeQuality\dontDither", &boolVal);
-// (4) GetBoolean(L"performanceTweaks\trade quality for performance\dontDither", &boolVal);
+// (3) GetBoolean(L"dithering\dontDither", &boolVal);
+// (4) GetBoolean(L"rendering\dithering\dontDither", &boolVal);
// Using the full path can make sense if you want to access a specific profile.
// If you don't specify a path, you automatically access the currently active
// profile.
-[uuid("6F8A566C-4E19-439E-8F07-20E46ED06DEE")]
-interface IMadVRSettings : public IUnknown
+//[uuid("6F8A566C-4E19-439E-8F07-20E46ED06DEE")]
+//interface IMadVRSettings : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRSettings, IUnknown, "6F8A566C-4E19-439E-8F07-20E46ED06DEE")
{
// returns the revision number of the settings record
// the revision number is increased by 1 every time a setting changes
@@ -351,6 +425,56 @@ interface IMadVRSettings : public IUnknown
STDMETHOD_(BOOL, SettingsGetBinary )(LPCWSTR path, LPVOID* value, int* bufLenInBytes) = 0;
};
+//[uuid("1C3E03D6-F422-4D31-9424-75936F663BF7")]
+//interface IMadVRSettings2 : public IMadVRSettings
+DECLARE_INTERFACE_IID_(IMadVRSettings2, IMadVRSettings, "1C3E03D6-F422-4D31-9424-75936F663BF7")
+{
+ // Enumerate the available settings stuff in the specified path.
+ // Simply loop from enumIndex 0 to infinite, until the enumeration returns FALSE.
+ // When enumeration is completed GetLastError returns ERROR_NO_MORE_ITEMS.
+ // The buffers must be provided by the caller and ...LenInChars set to the
+ // buffer's length (please note: 1 char -> 2 bytes). If the buffer is too small,
+ // the API fails and GetLastError returns ERROR_MORE_DATA. On return,
+ // ...LenInChars is set to the required buffer size.
+ STDMETHOD_(BOOL, SettingsEnumFolders )(LPCWSTR path, int enumIndex, LPCWSTR id, LPCWSTR name, LPCWSTR type, int* idLenInChars, int* nameLenInChars, int* typeLenInChars) = 0;
+ STDMETHOD_(BOOL, SettingsEnumValues )(LPCWSTR path, int enumIndex, LPCWSTR id, LPCWSTR name, LPCWSTR type, int* idLenInChars, int* nameLenInChars, int* typeLenInChars) = 0;
+ STDMETHOD_(BOOL, SettingsEnumProfileGroups)(LPCWSTR path, int enumIndex, LPCWSTR name, int* nameLenInChars ) = 0;
+ STDMETHOD_(BOOL, SettingsEnumProfiles )(LPCWSTR path, int enumIndex, LPCWSTR name, int* nameLenInChars ) = 0;
+
+ // Creates/deletes a profile group in the specified path.
+ // Deleting a profile group works only if there's only one profile left in the group.
+ // Example:
+ // SettingsCreateProfileGroup('scalingParent', 'imageDoubling|lumaUp', 'upscaling profiles', 'SD 24fps');
+ // SettingsDeleteProfileGroup('scalingParent\upscaling profiles');
+ STDMETHOD_(BOOL, SettingsCreateProfileGroup)(LPCWSTR path, LPCWSTR settingsPageList, LPCWSTR profileGroupName, LPCWSTR firstProfileName) = 0;
+ STDMETHOD_(BOOL, SettingsDeleteProfileGroup)(LPCWSTR path) = 0;
+
+ // SettingsAddProfile adds a new profile, using default parameters for all values.
+ // SettingsDuplicateProfile duplicates/copies a profile with all parameters.
+ // Deleting a profile works only if it isn't the only profile left in the group.
+ // Example:
+ // SettingsAddProfile('scalingParent\upscaling profiles', 'SD 60fps');
+ // SettingsDuplicateProfile('scalingParent\upscaling profiles', 'SD 60fps', 'HD 24fps');
+ // SettingsDeleteProfile('scalingParent\upscaling profiles', 'SD 60fps');
+ STDMETHOD_(BOOL, SettingsAddProfile )(LPCWSTR path, LPCWSTR newProfileName) = 0;
+ STDMETHOD_(BOOL, SettingsDuplicateProfile)(LPCWSTR path, LPCWSTR originalProfileName, LPCWSTR newProfileName) = 0;
+ STDMETHOD_(BOOL, SettingsDeleteProfile )(LPCWSTR path, LPCWSTR profileName ) = 0;
+
+ // SettingsActivateProfile activates the specified profile.
+ // It also disables automatic (rule based) profile selection.
+ // SettingsAutoselectProfile allows you to reactivate it.
+ // Example:
+ // if SettingsIsProfileActive('scalingParent\upscaling profiles', 'SD 24fps') then
+ // begin
+ // SettingsActivateProfile('scalingParent\upscaling profiles', 'SD 60fps');
+ // [...]
+ // SettingsAutoselectProfile('scalingParent\upscaling profiles');
+ STDMETHOD_(BOOL, SettingsIsProfileActive)(LPCWSTR path, LPCWSTR profileName) = 0;
+ STDMETHOD_(BOOL, SettingsActivateProfile)(LPCWSTR path, LPCWSTR profileName) = 0;
+ STDMETHOD_(BOOL, SettingsIsProfileAutoselected)(LPCWSTR path) = 0;
+ STDMETHOD_(BOOL, SettingsAutoselectProfile)(LPCWSTR path) = 0;
+};
+
// available settings: id, name, type, valid values
// ------------------------------------------------
// devices, devices
@@ -364,11 +488,15 @@ interface IMadVRSettings : public IUnknown
// levels, levels, string, TV Levels|PC Levels|Custom
// black, black, integer, 0..48
// white, white, integer, 200..255
-// displayBitdepth, native display bitdepth, integer, 6..10
+// displayBitdepth, native display bitdepth, integer, 3..10
// calibration, calibration
// calibrate, calibrate display, string, disable calibration controls for this display|this display is already calibrated|calibrate this display by using yCMS|calibrate this display by using an external 3dlut file
// disableGpuGammaRamps, disable GPU gamma ramps, boolean
-// external3dlutFile, external 3dlut file, string
+// external3dlutFile709, external 3dlut file (BT.709), string
+// external3dlutFileNtsc, external 3dlut file (SMPTE C), string
+// external3dlutFilePal, external 3dlut file (EBU/PAL), string
+// external3dlutFile2020, external 3dlut file (BT.2020), string
+// external3dlutFileDci, external 3dlut file (DCI-P3), string
// gamutMeasurements, gamut measurements, string
// gammaMeasurements, gamma measurements, string
// displayPrimaries, display primaries, string, BT.709 (HD)|BT.601 (SD)|PAL|something else
@@ -390,31 +518,44 @@ interface IMadVRSettings : public IUnknown
// currentGammaCurve, current gamma curve, string, pure power curve|BT.709/601 curve
// currentGammaValue, current gamma value, string, 1.80|1.85|1.90|1.95|2.00|2.05|2.10|2.15|2.20|2.25|2.30|2.35|2.40|2.45|2.50|2.55|2.60|2.65|2.70|2.75|2.80
// processing, processing
-// decoding, processing
-// decodeH264, decode h264, string, disable|libav|intel|hardware
-// decodeVc1, decode VC-1, string, disable|libav|intel|hardware
-// decodeMpeg2, decode MPEG2, string, disable|libav|intel|hardware
// deinterlacing, deinterlacing
// autoActivateDeinterlacing, automatically activate deinterlacing when needed, boolean
// ifInDoubtDeinterlace, if in doubt, activate deinterlacing, boolean
// contentType, source type, string, auto|film|video
// scanPartialFrame, only look at pixels in the frame center, boolean
// deinterlaceThread, perform deinterlacing in separate thread, boolean
+// artifactRemoval, artifact removal
+// debandActive, reduce banding artifacts, boolean
+// debandLevel, default debanding strength, integer, 0..2
+// debandFadeLevel, strength during fade in/out, integer, 0..2
// scalingParent, scaling algorithms
// chromaUp, chroma upscaling
-// chromaUp, chroma upsampling, string, Nearest Neighbor|Bilinear|Mitchell-Netravali|Catmull-Rom|Bicubic50|Bicubic60|Bicubic75|Bicubic100|SoftCubic50|SoftCubic60|SoftCubic70|SoftCubic80|SoftCubic100|Lanczos3|Lanczos4|Lanczos8|Spline36|Spline64|Jinc3|Jinc4|Jinc8
+// chromaUp, chroma upsampling, string, Nearest Neighbor|Bilinear|Mitchell-Netravali|Catmull-Rom|Bicubic50|Bicubic60|Bicubic75|Bicubic100|SoftCubic50|SoftCubic60|SoftCubic70|SoftCubic80|SoftCubic100|Lanczos3|Lanczos4|Lanczos8|Spline36|Spline64|Jinc3|Jinc4|Jinc8|Nnedi16|Nnedi32|Nnedi64|Nnedi128|Nnedi256
// chromaAntiRinging, activate anti-ringing filter for chroma upsampling, boolean
+// imageDoubling, image doubling
+// nnediDLEnable, use NNEDI3 to double Luma resolution, boolean
+// nnediDCEnable, use NNEDI3 to double Chroma resolution, boolean
+// nnediQLEnable, use NNEDI3 to quadruple Luma resolution, boolean
+// nnediQCEnable, use NNEDI3 to quadruple Chroma resolution, boolean
+// nnediDLScalingFactor, when to use NNEDI3 to double Luma resolution, string, 1.2x|1.5x|2.0x|always
+// nnediDCScalingFactor, when to use NNEDI3 to double Chroma resolution, string, 1.2x|1.5x|2.0x|always
+// nnediQLScalingFactor, when to use NNEDI3 to quadruple Luma resolution, string, 1.2x|1.5x|2.0x|always
+// nnediQCScalingFactor, when to use NNEDI3 to quadruple Chroma resolution, string, 1.2x|1.5x|2.0x|always
+// nnediDLQuality, NNEDI3 double Luma quality, integer, 0..4
+// nnediDLQuality, NNEDI3 double Chroma quality, integer, 0..4
+// nnediDLQuality, NNEDI3 quadruple Luma quality, integer, 0..4
+// nnediDLQuality, NNEDI3 quadruple Chroma quality, integer, 0..4
+// amdInteropHack, use alternative interop hack (not recommended, AMD only), boolean
// lumaUp, image upscaling
// lumaUp, image upscaling, string, Nearest Neighbor|Bilinear|Dxva|Mitchell-Netravali|Catmull-Rom|Bicubic50|Bicubic60|Bicubic75|Bicubic100|SoftCubic50|SoftCubic60|SoftCubic70|SoftCubic80|SoftCubic100|Lanczos3|Lanczos4|Lanczos8|Spline36|Spline64|Jinc3|Jinc4|Jinc8
// lumaUpAntiRinging, activate anti-ringing filter for luma upsampling, boolean
-// lumaUpLinear, upscale luma in linear light, boolean
+// lumaUpSigmoidal, upscale luma in sigmoidal light, boolean
// lumaDown, image downscaling
// lumaDown, image downscaling, string, Nearest Neighbor|Bilinear|Dxva|Mitchell-Netravali|Catmull-Rom|Bicubic50|Bicubic60|Bicubic75|Bicubic100|SoftCubic50|SoftCubic60|SoftCubic70|SoftCubic80|SoftCubic100|Lanczos3|Lanczos4|Lanczos8|Spline36|Spline64
// lumaDownAntiRinging, activate anti-ringing filter for luma downsampling, boolean
// lumaDownLinear, downscale luma in linear light, boolean
// rendering, rendering
// basicRendering, general settings
-// managedUpload, use managed upload textures (XP only), boolean
// uploadInRenderThread, upload frames in render thread, boolean
// delayPlaybackStart2, delay playback start until render queue is full, boolean
// delaySeek, delay playback start after seeking, too, boolean
@@ -433,13 +574,13 @@ interface IMadVRSettings : public IUnknown
// flushAfterLastStep, after last step, string, don''t flush|flush|flush & wait (sleep)|flush & wait (loop)
// flushAfterBackbuffer, after backbuffer, string, don''t flush|flush|flush & wait (sleep)|flush & wait (loop)
// flushAfterPresent, after present, string, don''t flush|flush|flush & wait (sleep)|flush & wait (loop)
+// oldWindowedPath, use old windowed rendering path, boolean
+// preRenderFramesWindowed, no of pre-presented frames, integer, 1..16
// exclusiveSettings, exclusive mode settings
// enableSeekbar, show seek bar, boolean
// exclusiveDelay, delay switch to exclusive mode by 3 seconds, boolean
-// oldExclusivePath, use old rendering path, boolean
+// oldExclusivePath, use old fse rendering path, boolean
// presentThread, run presentation in a separate thread, boolean
-// avoidGlitches, limit rendering times to avoid glitches, boolean
-// overshootMaxLatency, overshoot max frame latency (Vista and newer), boolean
// preRenderFrames, no of pre-presented frames, integer, 1..16
// backbufferCountExcl, no of backbuffers, integer, 1..8
// flushAfterRenderStepsExcl, after render steps, string, don''t flush|flush|flush & wait (sleep)|flush & wait (loop)
@@ -449,18 +590,27 @@ interface IMadVRSettings : public IUnknown
// smoothMotion, smooth motion
// smoothMotionEnabled, enable smooth motion frame rate conversion, boolean
// smoothMotionMode, smooth motion mode, string, avoidJudder|almostAlways|always
+// dithering, dithering
+// ditheringAlgo, dithering algorithm, string, random|ordered|errorDifLowNoise|errorDifMedNoise
+// dontDither, don't use dithering, boolean
+// coloredDither, use colored noise, boolean
+// dynamicDither, change dither for every frame, boolean
// tradeQuality, trade quality for performance
+// fastSubtitles, optimize subtitles for performance instead of quality, boolean
+// dxvaChromaWhenDecode, use DXVA chroma upscaling when doing native DXVA decoding boolean
+// dxvaChromaWhenDeint, use DXVA chroma upscaling when doing DXVA deinterlacing boolean
+// mayLoseBtb, lose BTB and WTW if it improves performance boolean
+// customShaders16f, store custom pixel shader results in 16bit buffer instead of 32bit, boolean
+// gammaDithering, don't use linear light for dithering, boolean
+// noGradientAngles, don't analyze gradient angles for debanding, boolean
+// dontRerenderFades, don't rerender frames when fade in/out is detected, boolean
// gammaBlending, don't use linear light for smooth motion frame blending, boolean
-// dontDither, don't use dithering, boolean
-// halfDxvaDeintFramerate, use half frame rate for DXVA deinterlacing, boolean
// 10bitChroma, use 10bit chroma buffer instead of 16bit, boolean
// 10bitLuma, use 10bit image buffer instead of 16bit, boolean
-// customShaders16f, store custom pixel shader results in 16bit buffer instead of 32bit, boolean
// customShadersTv, run custom pixel shaders in video levels instead of PC levels, boolean
-// noDeintCopyback, don't use "copyback" for DXVA deinterlacing, boolean
-// noDecodeCopyback, don't use "copyback" for DXVA decoding, boolean
// 3dlutLowerBitdepth, use lower bitdepth for yCMS 3dlut calibration, boolean
// 3dlutBitdepth, 3dlut bitdepth, integer, 6..7
+// halfDxvaDeintFramerate, use half frame rate for DXVA deinterlacing, boolean
// ui, user interface
// keys, keyboard shortcuts
// keysOnlyIfFocused, use only if media player has keyboard focus, boolean
@@ -495,6 +645,8 @@ interface IMadVRSettings : public IUnknown
// keyDeintContentTypeFilm, deinterlacing content type - set to "film", string
// keyDeintContentTypeVideo, deinterlacing content type - set to "video", string
// keyDeintContentTypeAuto, deinterlacing content type - set to "auto detect", string
+// keyDeband, debanding - toggle, string
+// keyDebandCustom, debanding custom settings - toggle, string
// keyDesiredGammaCurve, desired display gamma curve - toggle, string
// keyDesiredGammaValueInc, desired display gamma value - increase, string
// keyDesiredGammaValueDec, desired display gamma value - decrease, string
@@ -530,7 +682,7 @@ interface IMadVRSettings : public IUnknown
// keyImageUpAlgoParamInc, image upscaling algorithm parameter - increase, string
// keyImageUpAlgoParamDec, image upscaling algorithm parameter - decrease, string
// keyImageUpAntiRing, image upscaling anti-ringing filter - toggle on/off, string
-// keyImageUpLinear, image upscaling in linear light - toggle on/off, string
+// keyImageUpSigmoidal, image upscaling in sigmoidal light - toggle on/off, string
// keyImageDownAlgo, image downscaling algorithm - toggle, string
// keyImageDownAlgoNearest, image downscaling algorithm - set to "Nearest Neighbor", string
// keyImageDownAlgoBilinear, image downscaling algorithm - set to "Bilinear", string
@@ -548,6 +700,17 @@ interface IMadVRSettings : public IUnknown
// keyDisplayModeChanger, display mode switcher - toggle on/off, string
// keyDisplayBitdepth, display bitdepth - toggle, string
// keyDithering, dithering - toggle on/off, string
+// key3dlutSplitScreen, 3dlut split screen - toggle on, string
+
+// profile settings: id, name, type, valid values
+// ----------------------------------------------
+// Profile Group 1
+// keyToggleProfiles, keyboard shortcut to toggle profiles, string
+// autoselectRules, profile auto select rules, string
+// Profile 1
+// keyActivateProfile, keyboard shortcut to activate this profile, string
+// activateCmdline, command line to execute when this profile is activated, string
+// deactivateCmdline, command line to execute when this profile is deactivated, string
// ---------------------------------------------------------------------------
// ISubRender
@@ -557,27 +720,58 @@ interface IMadVRSettings : public IUnknown
// engine in MPC-HC and PotPlayer for communication with madVR and with the
// Haali Video Renderer
-// interface ISubRenderCallback; // forward
+/*
+interface ISubRenderCallback; // forward
// interface exported by madVR
-// [uuid("9CC7F9F7-3ED1-493c-AF65-527EA1D9947F")]
-// interface ISubRender : public IUnknown
-// {
-// STDMETHOD(SetCallback)(ISubRenderCallback *callback) = 0;
-// };
+//[uuid("9CC7F9F7-3ED1-493c-AF65-527EA1D9947F")]
+//interface ISubRender : public IUnknown
+DECLARE_INTERFACE_IID_(ISubRender, IUnknown, "9CC7F9F7-3ED1-493c-AF65-527EA1D9947F")
+{
+ STDMETHOD(SetCallback)(ISubRenderCallback *callback) = 0;
+};
// callback interfaces can provide madVR with
-// [uuid("CD6D2AA5-20D3-4ebe-A8A9-34D3B00CC253")]
-// interface ISubRenderCallback : public IUnknown
-// {
-// STDMETHOD(SetDevice)(IDirect3DDevice9 *device) = 0;
-// STDMETHOD(Render)(REFERENCE_TIME frameStart, int left, int top, int right, int bottom, int width, int height) = 0;
-// };
-// [uuid("E602585E-C05A-4828-AC69-AF92997F2E0C")]
-// interface ISubRenderCallback2 : public ISubRenderCallback
-// {
-// STDMETHOD(RenderEx)(REFERENCE_TIME frameStart, REFERENCE_TIME frameStop, REFERENCE_TIME avgTimePerFrame, int left, int top, int right, int bottom, int width, int height) = 0;
-// };
+//[uuid("CD6D2AA5-20D3-4ebe-A8A9-34D3B00CC253")]
+//interface ISubRenderCallback : public IUnknown
+DECLARE_INTERFACE_IID_(ISubRenderCallback, IUnknown, "CD6D2AA5-20D3-4ebe-A8A9-34D3B00CC253")
+{
+ STDMETHOD(SetDevice)(IDirect3DDevice9 *device) = 0;
+ STDMETHOD(Render)(REFERENCE_TIME frameStart, int left, int top, int right, int bottom, int width, int height) = 0;
+};
+//[uuid("E602585E-C05A-4828-AC69-AF92997F2E0C")]
+//interface ISubRenderCallback2 : public ISubRenderCallback
+DECLARE_INTERFACE_IID_(ISubRenderCallback2, ISubRenderCallback, "E602585E-C05A-4828-AC69-AF92997F2E0C")
+{
+ STDMETHOD(RenderEx)(REFERENCE_TIME frameStart, REFERENCE_TIME frameStop, REFERENCE_TIME avgTimePerFrame, int left, int top, int right, int bottom, int width, int height) = 0;
+};
+//[uuid("BAC4273A-3EAD-47F5-9710-8488E52AC618")]
+//interface ISubRenderCallback3 : public ISubRenderCallback2
+DECLARE_INTERFACE_IID_(ISubRenderCallback3, ISubRenderCallback2, "BAC4273A-3EAD-47F5-9710-8488E52AC618")
+{
+ STDMETHOD(RenderEx2)(REFERENCE_TIME frameStart, REFERENCE_TIME frameStop, REFERENCE_TIME avgTimePerFrame, RECT croppedVideoRect, RECT originalVideoRect, RECT viewportRect, const double videoStretchFactor = 1.0) = 0;
+};
+const static DWORD SUBRENDER_LEFT_EYE = 1;
+const static DWORD SUBRENDER_RIGHT_EYE = 2;
+//[uuid("C89CF1D4-29C5-4A96-8AAC-528EC6F7AF1E")]
+//interface ISubRenderCallback4 : public ISubRenderCallback3
+DECLARE_INTERFACE_IID_(ISubRenderCallback4, ISubRenderCallback3, "C89CF1D4-29C5-4A96-8AAC-528EC6F7AF1E")
+{
+ STDMETHOD(RenderEx3)(REFERENCE_TIME frameStart, REFERENCE_TIME frameStop, REFERENCE_TIME avgTimePerFrame, RECT croppedVideoRect, RECT originalVideoRect, RECT viewportRect, const double videoStretchFactor = 1.0, int xOffsetInPixels = 0, DWORD flags = 0) = 0;
+};
+*/
+
+// ---------------------------------------------------------------------------
+// EC_VIDEO_SIZE_CHANGED "lParam2" values sent by madVR
+// ---------------------------------------------------------------------------
+
+#define VIDEO_SIZE_CHANGED_INITIAL_SIZE 777 // initial size information
+#define VIDEO_SIZE_CHANGED_MEDIA_TYPE_CHANGED 778 // mediatype has changed
+#define VIDEO_SIZE_CHANGED_BLACK_BAR_DETECTION_CHANGED 779 // black bar detection has changed
+#define VIDEO_SIZE_CHANGED_DVD_AR_CHANGED 780 // DVD metadata caused an AR change
+#define VIDEO_SIZE_CHANGED_AR_OVERRIDE_CHANGED 781 // media player called SendCommandDouble("setArOverride")
+#define VIDEO_SIZE_CHANGED_ROTATION_CHANGED_KEY 782 // rotation changed - user pressed madVR keyboard shortcut
+#define VIDEO_SIZE_CHANGED_ROTATION_CHANGED_API 783 // rotation changed - media player called SendCommandInt("rotate")
// ---------------------------------------------------------------------------
// IMadVRExclusiveModeInfo (obsolete)
@@ -607,8 +801,9 @@ interface IMadVRSettings : public IUnknown
// disabled, you should still show your own seek bar, because otherwise
// the user will have no way to seek at all.
-[uuid("D6EE8031-214E-4E9E-A3A7-458925F933AB")]
-interface IMadVRExclusiveModeInfo : public IUnknown
+//[uuid("D6EE8031-214E-4E9E-A3A7-458925F933AB")]
+//interface IMadVRExclusiveModeInfo : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRExclusiveModeInfo, IUnknown, "D6EE8031-214E-4E9E-A3A7-458925F933AB")
{
STDMETHOD_(BOOL, IsExclusiveModeActive)(void) = 0;
STDMETHOD_(BOOL, IsMadVRSeekbarEnabled)(void) = 0;
@@ -623,12 +818,58 @@ interface IMadVRExclusiveModeInfo : public IUnknown
// this interface allows you to ask madVR about the detected refresh rate
-[uuid("3F6580E8-8DE9-48D0-8E4E-1F26FE02413E")]
-interface IMadVRRefreshRateInfo : public IUnknown
+//[uuid("3F6580E8-8DE9-48D0-8E4E-1F26FE02413E")]
+//interface IMadVRRefreshRateInfo : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRRefreshRateInfo, IUnknown, "3F6580E8-8DE9-48D0-8E4E-1F26FE02413E")
{
STDMETHOD(GetRefreshRate)(double *refreshRate) = 0;
};
// ---------------------------------------------------------------------------
+// IMadVRSeekbarControl (obsolete)
+// ---------------------------------------------------------------------------
+
+// CAUTION: This interface is obsolete. Use IMadVRCommand instead:
+// IMadVRCommand::SendCommandBool("disableSeekbar", true)
+
+//[uuid("D2D3A520-7CFA-46EB-BA3B-6194A028781C")]
+//interface IMadVRSeekbarControl : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRSeekbarControl, IUnknown, "D2D3A520-7CFA-46EB-BA3B-6194A028781C")
+{
+ STDMETHOD(DisableSeekbar)(BOOL disable) = 0;
+};
+
+// ---------------------------------------------------------------------------
+// IMadVRExclusiveModeControl (obsolete)
+// ---------------------------------------------------------------------------
+
+// CAUTION: This interface is obsolete. Use IMadVRCommand instead:
+// IMadVRCommand::SendCommandBool("disableExclusiveMode", true)
+
+//[uuid("88A69329-3CD3-47D6-ADEF-89FA23AFC7F3")]
+//interface IMadVRExclusiveModeControl : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRExclusiveModeControl, IUnknown, "88A69329-3CD3-47D6-ADEF-89FA23AFC7F3")
+{
+ STDMETHOD(DisableExclusiveMode)(BOOL disable) = 0;
+};
+
+// ---------------------------------------------------------------------------
+// IMadVRDirect3D9Manager (obsolete)
+// ---------------------------------------------------------------------------
+
+// CAUTION: This interface is obsolete. Instead use texture/surface sharing,
+// so that both media player and madVR can render to their own devices. You
+// can then blend the media player's GUI on top of madVR's rendered video
+// frames in madVR's OSD callback function.
+
+//[uuid("1CAEE23B-D14B-4DB4-8AEA-F3528CB78922")]
+//interface IMadVRDirect3D9Manager : public IUnknown
+DECLARE_INTERFACE_IID_(IMadVRDirect3D9Manager, IUnknown, "1CAEE23B-D14B-4DB4-8AEA-F3528CB78922")
+{
+ STDMETHOD(UseTheseDevices)(LPDIRECT3DDEVICE9 scanlineReading, LPDIRECT3DDEVICE9 rendering, LPDIRECT3DDEVICE9 presentation) = 0;
+ STDMETHOD(ConfigureDisplayModeChanger)(BOOL allowResolutionChanges, BOOL allowRefreshRateChanges) = 0;
+};
+
+// ---------------------------------------------------------------------------
#endif // __mvrInterfaces__
diff --git a/include/unrar.h b/include/unrar.h
index 160b26082..268f00a06 100644
--- a/include/unrar.h
+++ b/include/unrar.h
@@ -31,7 +31,7 @@
#define RAR_VOL_ASK 0
#define RAR_VOL_NOTIFY 1
-#define RAR_DLL_VERSION 6
+#define RAR_DLL_VERSION 8
#define RAR_HASH_NONE 0
#define RAR_HASH_CRC32 1
@@ -98,7 +98,17 @@ struct RARHeaderDataEx
unsigned int DictSize;
unsigned int HashType;
char Hash[32];
- unsigned int Reserved[1014];
+ unsigned int RedirType;
+ wchar_t *RedirName;
+ unsigned int RedirNameSize;
+ unsigned int DirTarget;
+ unsigned int MtimeLow;
+ unsigned int MtimeHigh;
+ unsigned int CtimeLow;
+ unsigned int CtimeHigh;
+ unsigned int AtimeLow;
+ unsigned int AtimeHigh;
+ unsigned int Reserved[988];
};
@@ -115,6 +125,16 @@ struct RAROpenArchiveData
typedef int (CALLBACK *UNRARCALLBACK)(UINT msg,LPARAM UserData,LPARAM P1,LPARAM P2);
+#define ROADF_VOLUME 0x0001
+#define ROADF_COMMENT 0x0002
+#define ROADF_LOCK 0x0004
+#define ROADF_SOLID 0x0008
+#define ROADF_NEWNUMBERING 0x0010
+#define ROADF_SIGNED 0x0020
+#define ROADF_RECOVERY 0x0040
+#define ROADF_ENCHEADERS 0x0080
+#define ROADF_FIRSTVOLUME 0x0100
+
struct RAROpenArchiveDataEx
{
char *ArcName;
diff --git a/include/version.h b/include/version.h
index 291e23cc5..1641847e1 100644
--- a/include/version.h
+++ b/include/version.h
@@ -1,6 +1,6 @@
#ifndef ISPP_INVOKED
/*
- * (C) 2010-2014 see Authors.txt
+ * (C) 2010-2013, 2015-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,10 +24,7 @@
everything for every revision. It's currently used in mpcresources, mpciconlib
and VideoRenderers projects.
* MPC_VERSION_ARCH is currently used in VSFilter only.
- * MPC_DX_SDK_MONTH, MPC_DX_SDK_YEAR and MPC_DX_SDK_NUMBER is the month, year and the number
- of the DirectX SDK used for compilation and it's used in the error message in mpc-hc and in
- the installer when the DX runtime is out of date.
- * MPC_DX_SDK_NUMBER is used in the installer when the DirectX runtime is out of date.
+ * MPC_DX_SDK_NUMBER is used in the installer.
*/
#endif // ISPP_INVOKED
@@ -45,15 +42,12 @@
#endif
#ifndef NO_VERSION_REV_NEEDED
-#include "version_rev.h"
+#include "../build/version_rev.h"
#endif
-#define DO_MAKE_STR(x) _T(#x)
-#define MAKE_STR(x) DO_MAKE_STR(x)
-
#define MPC_VERSION_MAJOR 1
#define MPC_VERSION_MINOR 7
-#define MPC_VERSION_PATCH 7
+#define MPC_VERSION_PATCH 12
#ifndef NO_VERSION_REV_NEEDED
@@ -66,7 +60,7 @@
#endif // NO_VERSION_REV_NEEDED
#define MPC_COMP_NAME_STR _T("MPC-HC Team")
-#define MPC_COPYRIGHT_STR _T("Copyright 2002-2014 all contributors, see Authors.txt")
+#define MPC_COPYRIGHT_STR _T("Copyright 2002-2017 all contributors, see Authors.txt")
#define MPC_VERSION_COMMENTS WEBSITE_URL
@@ -123,9 +117,4 @@
#define MPC_VERSION_ARCH _T("x86")
#endif
-#define MPC_DX_SDK_MONTH _T("June")
-#define MPC_DX_SDK_YEAR 2010
-#define MPC_DX_SDK_NUMBER 43
-
-
#endif // MPC_VERSION_H
diff --git a/mpc-hc.sln b/mpc-hc.sln
index 357e0f53f..416c25d16 100644
--- a/mpc-hc.sln
+++ b/mpc-hc.sln
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.30723.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apps", "Apps", "{A21F07E6-A891-479C-98EA-EDB58CE4EFAB}"
EndProject
@@ -76,8 +76,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDXAReader", "src\filters\r
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VTSReader", "src\filters\reader\VTSReader\VTSReader.vcxproj", "{664E726B-EEEE-403A-AC15-345D9C9E1375}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MpcAudioRenderer", "src\filters\renderer\MpcAudioRenderer\MpcAudioRenderer.vcxproj", "{D0620EF4-1313-40D5-9069-A82F6FE26994}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SyncClock", "src\filters\renderer\SyncClock\SyncClock.vcxproj", "{0B63409D-674D-47F8-A84E-87DBB7783189}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoRenderers", "src\filters\renderer\VideoRenderers\VideoRenderers.vcxproj", "{FB565A7A-50DC-4A0D-852D-5E7F74DAB82C}"
@@ -102,8 +100,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MediaInfoLib", "src\thirdpa
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZenLib", "src\thirdparty\ZenLib\ZenLib.vcxproj", "{0DA1DA7D-F393-4E7C-A7CE-CB5C6A67BC94}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "src\thirdparty\SoundTouch\source\SoundTouch.vcxproj", "{68A5DD20-7057-448B-8FE0-B6AC8D205509}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VSFilter", "src\filters\transform\VSFilter\VSFilter.vcxproj", "{F671100C-469F-4723-AAC4-B7FE4F5B8DC4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unrar", "src\thirdparty\unrar\unrar.vcxproj", "{DA8461C4-7683-4360-9372-2A9E0F1795C2}"
@@ -112,9 +108,27 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RARFileSource", "src\thirdp
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LAVFilters", "src\thirdparty\LAVFilters\LAVFilters.vcxproj", "{ED257874-E12E-4143-AF0A-0676DA3BB18C}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mhook", "src\thirdparty\mhook\mhook.vcxproj", "{F841363C-A630-4716-8941-CDDC1F32CFC3}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DoctorDump", "src\thirdparty\DoctorDump\DoctorDump.vcxproj", "{BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CrashReporterDialog", "src\mpc-hc\CrashReporterDialog\CrashReporterDialog.vcxproj", "{5DB958DD-8B25-45EF-8072-3356CAF8CCD7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Crash Reporter", "Crash Reporter", "{B161892C-93C5-4F89-8C43-7E9BE5DD4AE4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "soxr", "src\thirdparty\soxr\soxr.vcxproj", "{7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bs2b", "src\thirdparty\bs2b\bs2b.vcxproj", "{0FD9BF8F-2397-4E23-B41E-E4624F35D646}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "src\thirdparty\SoundTouch\SoundTouch.vcxproj", "{4C7A1953-CBC4-42D5-A12F-BB512C64B547}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zita-resampler", "src\thirdparty\zita-resampler\zita-resampler.vcxproj", "{F3D02050-F39A-4103-8343-09285359A495}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sanear", "src\thirdparty\sanear\sanear\sanear.vcxproj", "{BB2B61AF-734A-4DAD-9326-07F4F9EA088F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BuildConfig", "build\BuildConfig.vcxproj", "{981574AE-5A5E-4F27-BDF1-1B841E374CFF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyxml2", "src\thirdparty\tinyxml2\tinyxml2.vcxproj", "{E02F0C35-FB01-4059-90F9-9AC19DC22FBA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MathLibFix", "src\MathLibFix\MathLibFix.vcxproj", "{FC9FC17F-70BF-4ACA-8285-C24D1889BACB}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minhook", "src\thirdparty\minhook\minhook.vcxproj", "{303B855A-137D-45E9-AF6D-B7241C6E66D6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -708,30 +722,6 @@ Global
{664E726B-EEEE-403A-AC15-345D9C9E1375}.Release|Win32.Build.0 = Release|Win32
{664E726B-EEEE-403A-AC15-345D9C9E1375}.Release|x64.ActiveCfg = Release|x64
{664E726B-EEEE-403A-AC15-345D9C9E1375}.Release|x64.Build.0 = Release|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug Filter|Win32.ActiveCfg = Debug Filter|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug Filter|Win32.Build.0 = Debug Filter|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug Filter|x64.ActiveCfg = Debug Filter|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug Filter|x64.Build.0 = Debug Filter|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug Lite|Win32.ActiveCfg = Debug|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug Lite|Win32.Build.0 = Debug|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug Lite|x64.ActiveCfg = Debug|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug Lite|x64.Build.0 = Debug|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug|Win32.ActiveCfg = Debug|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug|Win32.Build.0 = Debug|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug|x64.ActiveCfg = Debug|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Debug|x64.Build.0 = Debug|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release Filter|Win32.ActiveCfg = Release Filter|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release Filter|Win32.Build.0 = Release Filter|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release Filter|x64.ActiveCfg = Release Filter|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release Filter|x64.Build.0 = Release Filter|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release Lite|Win32.ActiveCfg = Release|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release Lite|Win32.Build.0 = Release|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release Lite|x64.ActiveCfg = Release|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release Lite|x64.Build.0 = Release|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release|Win32.ActiveCfg = Release|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release|Win32.Build.0 = Release|Win32
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release|x64.ActiveCfg = Release|x64
- {D0620EF4-1313-40D5-9069-A82F6FE26994}.Release|x64.Build.0 = Release|x64
{0B63409D-674D-47F8-A84E-87DBB7783189}.Debug Filter|Win32.ActiveCfg = Debug|Win32
{0B63409D-674D-47F8-A84E-87DBB7783189}.Debug Filter|x64.ActiveCfg = Debug|x64
{0B63409D-674D-47F8-A84E-87DBB7783189}.Debug Lite|Win32.ActiveCfg = Debug|Win32
@@ -972,30 +962,6 @@ Global
{0DA1DA7D-F393-4E7C-A7CE-CB5C6A67BC94}.Release|Win32.Build.0 = Release|Win32
{0DA1DA7D-F393-4E7C-A7CE-CB5C6A67BC94}.Release|x64.ActiveCfg = Release|x64
{0DA1DA7D-F393-4E7C-A7CE-CB5C6A67BC94}.Release|x64.Build.0 = Release|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug Filter|Win32.ActiveCfg = Debug|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug Filter|Win32.Build.0 = Debug|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug Filter|x64.ActiveCfg = Debug|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug Filter|x64.Build.0 = Debug|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug Lite|Win32.ActiveCfg = Debug|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug Lite|Win32.Build.0 = Debug|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug Lite|x64.ActiveCfg = Debug|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug Lite|x64.Build.0 = Debug|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|Win32.ActiveCfg = Debug|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|Win32.Build.0 = Debug|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|x64.ActiveCfg = Debug|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|x64.Build.0 = Debug|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release Filter|Win32.ActiveCfg = Release|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release Filter|Win32.Build.0 = Release|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release Filter|x64.ActiveCfg = Release|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release Filter|x64.Build.0 = Release|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release Lite|Win32.ActiveCfg = Release|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release Lite|Win32.Build.0 = Release|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release Lite|x64.ActiveCfg = Release|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release Lite|x64.Build.0 = Release|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|Win32.ActiveCfg = Release|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|Win32.Build.0 = Release|Win32
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|x64.ActiveCfg = Release|x64
- {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|x64.Build.0 = Release|x64
{F671100C-469F-4723-AAC4-B7FE4F5B8DC4}.Debug Filter|Win32.ActiveCfg = Debug Filter|Win32
{F671100C-469F-4723-AAC4-B7FE4F5B8DC4}.Debug Filter|Win32.Build.0 = Debug Filter|Win32
{F671100C-469F-4723-AAC4-B7FE4F5B8DC4}.Debug Filter|x64.ActiveCfg = Debug Filter|x64
@@ -1070,54 +1036,230 @@ Global
{ED257874-E12E-4143-AF0A-0676DA3BB18C}.Release|Win32.Build.0 = Release|Win32
{ED257874-E12E-4143-AF0A-0676DA3BB18C}.Release|x64.ActiveCfg = Release|x64
{ED257874-E12E-4143-AF0A-0676DA3BB18C}.Release|x64.Build.0 = Release|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug Filter|Win32.ActiveCfg = Debug|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug Filter|Win32.Build.0 = Debug|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug Filter|x64.ActiveCfg = Debug|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug Filter|x64.Build.0 = Debug|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug Lite|Win32.ActiveCfg = Debug|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug Lite|Win32.Build.0 = Debug|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug Lite|x64.ActiveCfg = Debug|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug Lite|x64.Build.0 = Debug|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug|Win32.ActiveCfg = Debug|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug|Win32.Build.0 = Debug|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug|x64.ActiveCfg = Debug|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Debug|x64.Build.0 = Debug|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release Filter|Win32.ActiveCfg = Release|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release Filter|Win32.Build.0 = Release|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release Filter|x64.ActiveCfg = Release|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release Filter|x64.Build.0 = Release|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release Lite|Win32.ActiveCfg = Release|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release Lite|Win32.Build.0 = Release|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release Lite|x64.ActiveCfg = Release|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release Lite|x64.Build.0 = Release|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release|Win32.ActiveCfg = Release|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release|Win32.Build.0 = Release|Win32
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release|x64.ActiveCfg = Release|x64
- {F841363C-A630-4716-8941-CDDC1F32CFC3}.Release|x64.Build.0 = Release|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug Filter|Win32.ActiveCfg = Debug|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug Filter|Win32.Build.0 = Debug|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug Filter|x64.ActiveCfg = Debug|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug Filter|x64.Build.0 = Debug|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug Lite|Win32.ActiveCfg = Debug|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug Lite|Win32.Build.0 = Debug|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug Lite|x64.ActiveCfg = Debug|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug Lite|x64.Build.0 = Debug|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug|Win32.ActiveCfg = Debug|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug|Win32.Build.0 = Debug|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug|x64.ActiveCfg = Debug|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Debug|x64.Build.0 = Debug|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release Filter|Win32.ActiveCfg = Release|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release Filter|Win32.Build.0 = Release|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release Filter|x64.ActiveCfg = Release|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release Filter|x64.Build.0 = Release|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release Lite|Win32.ActiveCfg = Release|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release Lite|Win32.Build.0 = Release|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release Lite|x64.ActiveCfg = Release|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release Lite|x64.Build.0 = Release|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release|Win32.ActiveCfg = Release|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release|Win32.Build.0 = Release|Win32
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release|x64.ActiveCfg = Release|x64
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB}.Release|x64.Build.0 = Release|x64
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Debug Filter|Win32.ActiveCfg = Release|Win32
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Debug Filter|x64.ActiveCfg = Release|x64
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Debug Lite|Win32.ActiveCfg = Release Lite|Win32
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Debug Lite|x64.ActiveCfg = Release Lite|x64
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Debug|Win32.ActiveCfg = Release|Win32
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Debug|x64.ActiveCfg = Release|x64
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release Filter|x64.ActiveCfg = Release|x64
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release Lite|Win32.ActiveCfg = Release Lite|Win32
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release Lite|Win32.Build.0 = Release Lite|Win32
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release Lite|x64.ActiveCfg = Release Lite|x64
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release Lite|x64.Build.0 = Release Lite|x64
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release|Win32.ActiveCfg = Release|Win32
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release|Win32.Build.0 = Release|Win32
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release|x64.ActiveCfg = Release|x64
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}.Release|x64.Build.0 = Release|x64
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Debug Filter|Win32.ActiveCfg = Release|Win32
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Debug Filter|x64.ActiveCfg = Release|x64
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Debug Lite|Win32.ActiveCfg = Release Lite|Win32
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Debug Lite|x64.ActiveCfg = Release Lite|x64
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Debug|Win32.ActiveCfg = Release|Win32
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Debug|x64.ActiveCfg = Release|x64
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release Filter|x64.ActiveCfg = Release|x64
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release Lite|Win32.ActiveCfg = Release Lite|Win32
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release Lite|Win32.Build.0 = Release Lite|Win32
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release Lite|x64.ActiveCfg = Release Lite|x64
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release Lite|x64.Build.0 = Release Lite|x64
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release|Win32.ActiveCfg = Release|Win32
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release|Win32.Build.0 = Release|Win32
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release|x64.ActiveCfg = Release|x64
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7}.Release|x64.Build.0 = Release|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug Filter|Win32.ActiveCfg = Debug|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug Filter|Win32.Build.0 = Debug|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug Filter|x64.ActiveCfg = Debug|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug Filter|x64.Build.0 = Debug|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug Lite|Win32.ActiveCfg = Debug|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug Lite|Win32.Build.0 = Debug|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug Lite|x64.ActiveCfg = Debug|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug Lite|x64.Build.0 = Debug|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug|Win32.Build.0 = Debug|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug|x64.ActiveCfg = Debug|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Debug|x64.Build.0 = Debug|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release Filter|Win32.Build.0 = Release|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release Filter|x64.ActiveCfg = Release|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release Filter|x64.Build.0 = Release|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release Lite|Win32.ActiveCfg = Release|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release Lite|Win32.Build.0 = Release|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release Lite|x64.ActiveCfg = Release|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release Lite|x64.Build.0 = Release|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release|Win32.ActiveCfg = Release|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release|Win32.Build.0 = Release|Win32
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release|x64.ActiveCfg = Release|x64
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}.Release|x64.Build.0 = Release|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug Filter|Win32.ActiveCfg = Debug|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug Filter|Win32.Build.0 = Debug|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug Filter|x64.ActiveCfg = Debug|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug Filter|x64.Build.0 = Debug|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug Lite|Win32.ActiveCfg = Debug|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug Lite|Win32.Build.0 = Debug|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug Lite|x64.ActiveCfg = Debug|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug Lite|x64.Build.0 = Debug|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug|Win32.Build.0 = Debug|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug|x64.ActiveCfg = Debug|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Debug|x64.Build.0 = Debug|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release Filter|Win32.Build.0 = Release|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release Filter|x64.ActiveCfg = Release|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release Filter|x64.Build.0 = Release|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release Lite|Win32.ActiveCfg = Release|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release Lite|Win32.Build.0 = Release|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release Lite|x64.ActiveCfg = Release|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release Lite|x64.Build.0 = Release|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release|Win32.ActiveCfg = Release|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release|Win32.Build.0 = Release|Win32
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release|x64.ActiveCfg = Release|x64
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646}.Release|x64.Build.0 = Release|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug Filter|Win32.ActiveCfg = Debug|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug Filter|Win32.Build.0 = Debug|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug Filter|x64.ActiveCfg = Debug|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug Filter|x64.Build.0 = Debug|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug Lite|Win32.ActiveCfg = Debug|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug Lite|Win32.Build.0 = Debug|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug Lite|x64.ActiveCfg = Debug|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug Lite|x64.Build.0 = Debug|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug|Win32.Build.0 = Debug|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug|x64.ActiveCfg = Debug|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Debug|x64.Build.0 = Debug|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release Filter|Win32.Build.0 = Release|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release Filter|x64.ActiveCfg = Release|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release Filter|x64.Build.0 = Release|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release Lite|Win32.ActiveCfg = Release|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release Lite|Win32.Build.0 = Release|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release Lite|x64.ActiveCfg = Release|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release Lite|x64.Build.0 = Release|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release|Win32.ActiveCfg = Release|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release|Win32.Build.0 = Release|Win32
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release|x64.ActiveCfg = Release|x64
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547}.Release|x64.Build.0 = Release|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug Filter|Win32.ActiveCfg = Debug|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug Filter|Win32.Build.0 = Debug|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug Filter|x64.ActiveCfg = Debug|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug Filter|x64.Build.0 = Debug|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug Lite|Win32.ActiveCfg = Debug|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug Lite|Win32.Build.0 = Debug|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug Lite|x64.ActiveCfg = Debug|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug Lite|x64.Build.0 = Debug|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug|Win32.Build.0 = Debug|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug|x64.ActiveCfg = Debug|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Debug|x64.Build.0 = Debug|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Release Filter|Win32.Build.0 = Release|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Release Filter|x64.ActiveCfg = Release|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Release Filter|x64.Build.0 = Release|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Release Lite|Win32.ActiveCfg = Release|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Release Lite|Win32.Build.0 = Release|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Release Lite|x64.ActiveCfg = Release|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Release Lite|x64.Build.0 = Release|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Release|Win32.ActiveCfg = Release|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Release|Win32.Build.0 = Release|Win32
+ {F3D02050-F39A-4103-8343-09285359A495}.Release|x64.ActiveCfg = Release|x64
+ {F3D02050-F39A-4103-8343-09285359A495}.Release|x64.Build.0 = Release|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug Filter|Win32.ActiveCfg = Debug|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug Filter|Win32.Build.0 = Debug|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug Filter|x64.ActiveCfg = Debug|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug Filter|x64.Build.0 = Debug|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug Lite|Win32.ActiveCfg = Debug|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug Lite|Win32.Build.0 = Debug|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug Lite|x64.ActiveCfg = Debug|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug Lite|x64.Build.0 = Debug|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug|Win32.Build.0 = Debug|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug|x64.ActiveCfg = Debug|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Debug|x64.Build.0 = Debug|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release Filter|Win32.Build.0 = Release|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release Filter|x64.ActiveCfg = Release|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release Filter|x64.Build.0 = Release|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release Lite|Win32.ActiveCfg = Release|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release Lite|Win32.Build.0 = Release|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release Lite|x64.ActiveCfg = Release|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release Lite|x64.Build.0 = Release|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release|Win32.ActiveCfg = Release|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release|Win32.Build.0 = Release|Win32
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release|x64.ActiveCfg = Release|x64
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F}.Release|x64.Build.0 = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug Filter|Win32.ActiveCfg = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug Filter|Win32.Build.0 = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug Filter|x64.ActiveCfg = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug Filter|x64.Build.0 = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug Lite|Win32.ActiveCfg = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug Lite|Win32.Build.0 = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug Lite|x64.ActiveCfg = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug Lite|x64.Build.0 = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug|Win32.ActiveCfg = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug|Win32.Build.0 = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug|x64.ActiveCfg = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Debug|x64.Build.0 = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release Filter|Win32.Build.0 = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release Filter|x64.ActiveCfg = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release Filter|x64.Build.0 = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release Lite|Win32.ActiveCfg = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release Lite|Win32.Build.0 = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release Lite|x64.ActiveCfg = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release Lite|x64.Build.0 = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release|Win32.ActiveCfg = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release|Win32.Build.0 = Release|Win32
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release|x64.ActiveCfg = Release|x64
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF}.Release|x64.Build.0 = Release|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug Filter|Win32.ActiveCfg = Debug|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug Filter|Win32.Build.0 = Debug|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug Filter|x64.ActiveCfg = Debug|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug Filter|x64.Build.0 = Debug|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug Lite|Win32.ActiveCfg = Debug|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug Lite|Win32.Build.0 = Debug|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug Lite|x64.ActiveCfg = Debug|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug Lite|x64.Build.0 = Debug|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug|Win32.Build.0 = Debug|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug|x64.ActiveCfg = Debug|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Debug|x64.Build.0 = Debug|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release Filter|Win32.Build.0 = Release|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release Filter|x64.ActiveCfg = Release|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release Filter|x64.Build.0 = Release|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release Lite|Win32.ActiveCfg = Release|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release Lite|Win32.Build.0 = Release|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release Lite|x64.ActiveCfg = Release|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release Lite|x64.Build.0 = Release|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release|Win32.ActiveCfg = Release|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release|Win32.Build.0 = Release|Win32
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release|x64.ActiveCfg = Release|x64
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA}.Release|x64.Build.0 = Release|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug Filter|Win32.ActiveCfg = Debug|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug Filter|Win32.Build.0 = Debug|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug Filter|x64.ActiveCfg = Debug|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug Filter|x64.Build.0 = Debug|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug Lite|Win32.ActiveCfg = Debug|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug Lite|Win32.Build.0 = Debug|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug Lite|x64.ActiveCfg = Debug|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug Lite|x64.Build.0 = Debug|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug|Win32.Build.0 = Debug|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug|x64.ActiveCfg = Debug|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Debug|x64.Build.0 = Debug|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release Filter|Win32.ActiveCfg = Release|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release Filter|Win32.Build.0 = Release|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release Filter|x64.ActiveCfg = Release|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release Filter|x64.Build.0 = Release|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release Lite|Win32.ActiveCfg = Release|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release Lite|Win32.Build.0 = Release|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release Lite|x64.ActiveCfg = Release|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release Lite|x64.Build.0 = Release|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release|Win32.ActiveCfg = Release|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release|Win32.Build.0 = Release|Win32
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release|x64.ActiveCfg = Release|x64
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1157,7 +1299,6 @@ Global
{543D40E9-8CA6-4E4B-9936-90CBA562B268} = {4909B0ED-CC22-4509-ACD0-FB60C4FC73ED}
{4D3B4FF4-535A-4201-AB7D-9AEC1E737A95} = {4909B0ED-CC22-4509-ACD0-FB60C4FC73ED}
{664E726B-EEEE-403A-AC15-345D9C9E1375} = {4909B0ED-CC22-4509-ACD0-FB60C4FC73ED}
- {D0620EF4-1313-40D5-9069-A82F6FE26994} = {C0038E92-68BF-4491-B5AA-BEE9857A49F8}
{0B63409D-674D-47F8-A84E-87DBB7783189} = {C0038E92-68BF-4491-B5AA-BEE9857A49F8}
{FB565A7A-50DC-4A0D-852D-5E7F74DAB82C} = {C0038E92-68BF-4491-B5AA-BEE9857A49F8}
{F50E74C2-5BE7-4C9B-B1E7-6CA19CFAD34E} = {02DAA1A6-31C8-4002-89FE-50BF53752244}
@@ -1170,12 +1311,20 @@ Global
{ACF5C64B-78AA-4730-91A2-24F4910FBAD9} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
{20E0F8D6-213C-460B-B361-9C725CB375C7} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
{0DA1DA7D-F393-4E7C-A7CE-CB5C6A67BC94} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
- {68A5DD20-7057-448B-8FE0-B6AC8D205509} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
{F671100C-469F-4723-AAC4-B7FE4F5B8DC4} = {F9F42BF2-3F13-4654-82C5-E27B8879EC4E}
{DA8461C4-7683-4360-9372-2A9E0F1795C2} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
{2B7F22D7-1750-47C5-8709-1A3688B62499} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
{ED257874-E12E-4143-AF0A-0676DA3BB18C} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
- {F841363C-A630-4716-8941-CDDC1F32CFC3} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
- {FC9FC17F-70BF-4ACA-8285-C24D1889BACB} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
+ {BECEAFF9-CDCA-45EC-A1CF-658FA51818E6} = {B161892C-93C5-4F89-8C43-7E9BE5DD4AE4}
+ {5DB958DD-8B25-45EF-8072-3356CAF8CCD7} = {B161892C-93C5-4F89-8C43-7E9BE5DD4AE4}
+ {B161892C-93C5-4F89-8C43-7E9BE5DD4AE4} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
+ {7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
+ {0FD9BF8F-2397-4E23-B41E-E4624F35D646} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
+ {4C7A1953-CBC4-42D5-A12F-BB512C64B547} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
+ {F3D02050-F39A-4103-8343-09285359A495} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
+ {BB2B61AF-734A-4DAD-9326-07F4F9EA088F} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
+ {981574AE-5A5E-4F27-BDF1-1B841E374CFF} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
+ {E02F0C35-FB01-4059-90F9-9AC19DC22FBA} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
+ {303B855A-137D-45E9-AF6D-B7241C6E66D6} = {D9A0529B-9EC4-4D30-9E05-A5D533739D95}
EndGlobalSection
EndGlobal
diff --git a/mpciconlib.sln b/mpciconlib.sln
index 1fb2e3210..1deac5516 100644
--- a/mpciconlib.sln
+++ b/mpciconlib.sln
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.30723.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpciconlib", "src\mpc-hc\mpciconlib\mpciconlib.vcxproj", "{86251DC4-9298-424C-AE6C-07844F79C0B5}"
EndProject
diff --git a/mpcresources.sln b/mpcresources.sln
index 6f9909b16..256066f61 100644
--- a/mpcresources.sln
+++ b/mpcresources.sln
@@ -1,223 +1,29 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.30723.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpcresources", "src\mpc-hc\mpcresources\mpcresources.vcxproj", "{A57CBE1A-3703-4237-950A-FC5F594FDB43}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BuildAll", "src\mpc-hc\mpcresources\BuildAll.vcxproj", "{F0D412BF-C98E-48C7-A032-607AE043B0F7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SyncTranslations", "src\mpc-hc\mpcresources\SyncTranslations.vcxproj", "{904017F7-EE7A-49B6-A000-0D2FE5D5809A}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Release Arabic|Win32 = Release Arabic|Win32
- Release Arabic|x64 = Release Arabic|x64
- Release Armenian|Win32 = Release Armenian|Win32
- Release Armenian|x64 = Release Armenian|x64
- Release Basque|Win32 = Release Basque|Win32
- Release Basque|x64 = Release Basque|x64
- Release Belarusian|Win32 = Release Belarusian|Win32
- Release Belarusian|x64 = Release Belarusian|x64
- Release Bengali|Win32 = Release Bengali|Win32
- Release Bengali|x64 = Release Bengali|x64
- Release Catalan|Win32 = Release Catalan|Win32
- Release Catalan|x64 = Release Catalan|x64
- Release Chinese Simplified|Win32 = Release Chinese Simplified|Win32
- Release Chinese Simplified|x64 = Release Chinese Simplified|x64
- Release Chinese Traditional|Win32 = Release Chinese Traditional|Win32
- Release Chinese Traditional|x64 = Release Chinese Traditional|x64
- Release Croatian|Win32 = Release Croatian|Win32
- Release Croatian|x64 = Release Croatian|x64
- Release Czech|Win32 = Release Czech|Win32
- Release Czech|x64 = Release Czech|x64
- Release Dutch|Win32 = Release Dutch|Win32
- Release Dutch|x64 = Release Dutch|x64
- Release English (British)|Win32 = Release English (British)|Win32
- Release English (British)|x64 = Release English (British)|x64
- Release French|Win32 = Release French|Win32
- Release French|x64 = Release French|x64
- Release Galician|Win32 = Release Galician|Win32
- Release Galician|x64 = Release Galician|x64
- Release German|Win32 = Release German|Win32
- Release German|x64 = Release German|x64
- Release Greek|Win32 = Release Greek|Win32
- Release Greek|x64 = Release Greek|x64
- Release Hebrew|Win32 = Release Hebrew|Win32
- Release Hebrew|x64 = Release Hebrew|x64
- Release Hungarian|Win32 = Release Hungarian|Win32
- Release Hungarian|x64 = Release Hungarian|x64
- Release Italian|Win32 = Release Italian|Win32
- Release Italian|x64 = Release Italian|x64
- Release Japanese|Win32 = Release Japanese|Win32
- Release Japanese|x64 = Release Japanese|x64
- Release Korean|Win32 = Release Korean|Win32
- Release Korean|x64 = Release Korean|x64
- Release Malay|Win32 = Release Malay|Win32
- Release Malay|x64 = Release Malay|x64
- Release Polish|Win32 = Release Polish|Win32
- Release Polish|x64 = Release Polish|x64
- Release Portuguese (Brazil)|Win32 = Release Portuguese (Brazil)|Win32
- Release Portuguese (Brazil)|x64 = Release Portuguese (Brazil)|x64
- Release Romanian|Win32 = Release Romanian|Win32
- Release Romanian|x64 = Release Romanian|x64
- Release Russian|Win32 = Release Russian|Win32
- Release Russian|x64 = Release Russian|x64
- Release Slovak|Win32 = Release Slovak|Win32
- Release Slovak|x64 = Release Slovak|x64
- Release Slovenian|Win32 = Release Slovenian|Win32
- Release Slovenian|x64 = Release Slovenian|x64
- Release Spanish|Win32 = Release Spanish|Win32
- Release Spanish|x64 = Release Spanish|x64
- Release Swedish|Win32 = Release Swedish|Win32
- Release Swedish|x64 = Release Swedish|x64
- Release Tatar|Win32 = Release Tatar|Win32
- Release Tatar|x64 = Release Tatar|x64
- Release Thai|Win32 = Release Thai|Win32
- Release Thai|x64 = Release Thai|x64
- Release Turkish|Win32 = Release Turkish|Win32
- Release Turkish|x64 = Release Turkish|x64
- Release Ukrainian|Win32 = Release Ukrainian|Win32
- Release Ukrainian|x64 = Release Ukrainian|x64
- Release Vietnamese|Win32 = Release Vietnamese|Win32
- Release Vietnamese|x64 = Release Vietnamese|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Arabic|Win32.ActiveCfg = Release Arabic|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Arabic|Win32.Build.0 = Release Arabic|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Arabic|x64.ActiveCfg = Release Arabic|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Arabic|x64.Build.0 = Release Arabic|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Armenian|Win32.ActiveCfg = Release Armenian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Armenian|Win32.Build.0 = Release Armenian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Armenian|x64.ActiveCfg = Release Armenian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Armenian|x64.Build.0 = Release Armenian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Basque|Win32.ActiveCfg = Release Basque|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Basque|Win32.Build.0 = Release Basque|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Basque|x64.ActiveCfg = Release Basque|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Basque|x64.Build.0 = Release Basque|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Belarusian|Win32.ActiveCfg = Release Belarusian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Belarusian|Win32.Build.0 = Release Belarusian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Belarusian|x64.ActiveCfg = Release Belarusian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Belarusian|x64.Build.0 = Release Belarusian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Bengali|Win32.ActiveCfg = Release Bengali|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Bengali|Win32.Build.0 = Release Bengali|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Bengali|x64.ActiveCfg = Release Bengali|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Bengali|x64.Build.0 = Release Bengali|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Catalan|Win32.ActiveCfg = Release Catalan|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Catalan|Win32.Build.0 = Release Catalan|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Catalan|x64.ActiveCfg = Release Catalan|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Catalan|x64.Build.0 = Release Catalan|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Chinese Simplified|Win32.ActiveCfg = Release Chinese Simplified|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Chinese Simplified|Win32.Build.0 = Release Chinese Simplified|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Chinese Simplified|x64.ActiveCfg = Release Chinese Simplified|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Chinese Simplified|x64.Build.0 = Release Chinese Simplified|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Chinese Traditional|Win32.ActiveCfg = Release Chinese Traditional|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Chinese Traditional|Win32.Build.0 = Release Chinese Traditional|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Chinese Traditional|x64.ActiveCfg = Release Chinese Traditional|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Chinese Traditional|x64.Build.0 = Release Chinese Traditional|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Croatian|Win32.ActiveCfg = Release Croatian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Croatian|Win32.Build.0 = Release Croatian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Croatian|x64.ActiveCfg = Release Croatian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Croatian|x64.Build.0 = Release Croatian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Czech|Win32.ActiveCfg = Release Czech|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Czech|Win32.Build.0 = Release Czech|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Czech|x64.ActiveCfg = Release Czech|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Czech|x64.Build.0 = Release Czech|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Dutch|Win32.ActiveCfg = Release Dutch|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Dutch|Win32.Build.0 = Release Dutch|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Dutch|x64.ActiveCfg = Release Dutch|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Dutch|x64.Build.0 = Release Dutch|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release English (British)|Win32.ActiveCfg = Release English (British)|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release English (British)|Win32.Build.0 = Release English (British)|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release English (British)|x64.ActiveCfg = Release English (British)|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release English (British)|x64.Build.0 = Release English (British)|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release French|Win32.ActiveCfg = Release French|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release French|Win32.Build.0 = Release French|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release French|x64.ActiveCfg = Release French|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release French|x64.Build.0 = Release French|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Galician|Win32.ActiveCfg = Release Galician|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Galician|Win32.Build.0 = Release Galician|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Galician|x64.ActiveCfg = Release Galician|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Galician|x64.Build.0 = Release Galician|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release German|Win32.ActiveCfg = Release German|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release German|Win32.Build.0 = Release German|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release German|x64.ActiveCfg = Release German|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release German|x64.Build.0 = Release German|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Greek|Win32.ActiveCfg = Release Greek|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Greek|Win32.Build.0 = Release Greek|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Greek|x64.ActiveCfg = Release Greek|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Greek|x64.Build.0 = Release Greek|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Hebrew|Win32.ActiveCfg = Release Hebrew|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Hebrew|Win32.Build.0 = Release Hebrew|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Hebrew|x64.ActiveCfg = Release Hebrew|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Hebrew|x64.Build.0 = Release Hebrew|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Hungarian|Win32.ActiveCfg = Release Hungarian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Hungarian|Win32.Build.0 = Release Hungarian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Hungarian|x64.ActiveCfg = Release Hungarian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Hungarian|x64.Build.0 = Release Hungarian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Italian|Win32.ActiveCfg = Release Italian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Italian|Win32.Build.0 = Release Italian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Italian|x64.ActiveCfg = Release Italian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Italian|x64.Build.0 = Release Italian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Japanese|Win32.ActiveCfg = Release Japanese|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Japanese|Win32.Build.0 = Release Japanese|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Japanese|x64.ActiveCfg = Release Japanese|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Japanese|x64.Build.0 = Release Japanese|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Korean|Win32.ActiveCfg = Release Korean|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Korean|Win32.Build.0 = Release Korean|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Korean|x64.ActiveCfg = Release Korean|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Korean|x64.Build.0 = Release Korean|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Malay|Win32.ActiveCfg = Release Malay|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Malay|Win32.Build.0 = Release Malay|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Malay|x64.ActiveCfg = Release Malay|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Malay|x64.Build.0 = Release Malay|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Polish|Win32.ActiveCfg = Release Polish|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Polish|Win32.Build.0 = Release Polish|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Polish|x64.ActiveCfg = Release Polish|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Polish|x64.Build.0 = Release Polish|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Portuguese (Brazil)|Win32.ActiveCfg = Release Portuguese (Brazil)|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Portuguese (Brazil)|Win32.Build.0 = Release Portuguese (Brazil)|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Portuguese (Brazil)|x64.ActiveCfg = Release Portuguese (Brazil)|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Portuguese (Brazil)|x64.Build.0 = Release Portuguese (Brazil)|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Romanian|Win32.ActiveCfg = Release Romanian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Romanian|Win32.Build.0 = Release Romanian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Romanian|x64.ActiveCfg = Release Romanian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Romanian|x64.Build.0 = Release Romanian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Russian|Win32.ActiveCfg = Release Russian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Russian|Win32.Build.0 = Release Russian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Russian|x64.ActiveCfg = Release Russian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Russian|x64.Build.0 = Release Russian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Slovak|Win32.ActiveCfg = Release Slovak|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Slovak|Win32.Build.0 = Release Slovak|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Slovak|x64.ActiveCfg = Release Slovak|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Slovak|x64.Build.0 = Release Slovak|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Slovenian|Win32.ActiveCfg = Release Slovenian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Slovenian|Win32.Build.0 = Release Slovenian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Slovenian|x64.ActiveCfg = Release Slovenian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Slovenian|x64.Build.0 = Release Slovenian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Spanish|Win32.ActiveCfg = Release Spanish|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Spanish|Win32.Build.0 = Release Spanish|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Spanish|x64.ActiveCfg = Release Spanish|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Spanish|x64.Build.0 = Release Spanish|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Swedish|Win32.ActiveCfg = Release Swedish|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Swedish|Win32.Build.0 = Release Swedish|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Swedish|x64.ActiveCfg = Release Swedish|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Swedish|x64.Build.0 = Release Swedish|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Tatar|Win32.ActiveCfg = Release Tatar|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Tatar|Win32.Build.0 = Release Tatar|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Tatar|x64.ActiveCfg = Release Tatar|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Tatar|x64.Build.0 = Release Tatar|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Thai|Win32.ActiveCfg = Release Thai|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Thai|Win32.Build.0 = Release Thai|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Thai|x64.ActiveCfg = Release Thai|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Thai|x64.Build.0 = Release Thai|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Turkish|Win32.ActiveCfg = Release Turkish|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Turkish|Win32.Build.0 = Release Turkish|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Turkish|x64.ActiveCfg = Release Turkish|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Turkish|x64.Build.0 = Release Turkish|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Ukrainian|Win32.ActiveCfg = Release Ukrainian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Ukrainian|Win32.Build.0 = Release Ukrainian|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Ukrainian|x64.ActiveCfg = Release Ukrainian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Ukrainian|x64.Build.0 = Release Ukrainian|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Vietnamese|Win32.ActiveCfg = Release Vietnamese|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Vietnamese|Win32.Build.0 = Release Vietnamese|Win32
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Vietnamese|x64.ActiveCfg = Release Vietnamese|x64
- {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release Vietnamese|x64.Build.0 = Release Vietnamese|x64
+ {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release|Win32.ActiveCfg = Release Arabic|Win32
+ {A57CBE1A-3703-4237-950A-FC5F594FDB43}.Release|x64.ActiveCfg = Release Arabic|x64
+ {F0D412BF-C98E-48C7-A032-607AE043B0F7}.Release|Win32.ActiveCfg = Release|Win32
+ {F0D412BF-C98E-48C7-A032-607AE043B0F7}.Release|Win32.Build.0 = Release|Win32
+ {F0D412BF-C98E-48C7-A032-607AE043B0F7}.Release|x64.ActiveCfg = Release|x64
+ {F0D412BF-C98E-48C7-A032-607AE043B0F7}.Release|x64.Build.0 = Release|x64
+ {904017F7-EE7A-49B6-A000-0D2FE5D5809A}.Release|Win32.ActiveCfg = Release|Win32
+ {904017F7-EE7A-49B6-A000-0D2FE5D5809A}.Release|Win32.Build.0 = Release|Win32
+ {904017F7-EE7A-49B6-A000-0D2FE5D5809A}.Release|x64.ActiveCfg = Release|x64
+ {904017F7-EE7A-49B6-A000-0D2FE5D5809A}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/CmdUI/CmdUI.vcxproj b/src/CmdUI/CmdUI.vcxproj
index adb9a2e29..1f1e2449b 100644
--- a/src/CmdUI/CmdUI.vcxproj
+++ b/src/CmdUI/CmdUI.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,41 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
diff --git a/src/CmdUI/CmdUI.vcxproj.filters b/src/CmdUI/CmdUI.vcxproj.filters
index 902af82cb..7816ced3b 100644
--- a/src/CmdUI/CmdUI.vcxproj.filters
+++ b/src/CmdUI/CmdUI.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
diff --git a/src/DSUtil/AudioTools.h b/src/DSUtil/AudioTools.h
index 2232dc39d..aec430c8f 100644
--- a/src/DSUtil/AudioTools.h
+++ b/src/DSUtil/AudioTools.h
@@ -1,5 +1,5 @@
/*
- * (C) 2013 see Authors.txt
+ * (C) 2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,7 +20,7 @@
#pragma once
-#include <stdint.h>
+#include <cstdint>
#define INT24_MAX 8388607
#define INT24_MIN (-8388608)
diff --git a/src/DSUtil/DSMPropertyBag.cpp b/src/DSUtil/DSMPropertyBag.cpp
index e0fefc4c3..da29eabfd 100644
--- a/src/DSUtil/DSMPropertyBag.cpp
+++ b/src/DSUtil/DSMPropertyBag.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -161,8 +161,8 @@ CCritSec CDSMResource::m_csResources;
CAtlMap<uintptr_t, CDSMResource*> CDSMResource::m_resources;
CDSMResource::CDSMResource()
- : mime(_T("application/octet-stream"))
- , tag(0)
+ : tag(0)
+ , mime(_T("application/octet-stream"))
{
CAutoLock cAutoLock(&m_csResources);
m_resources.SetAt(reinterpret_cast<uintptr_t>(this), this);
diff --git a/src/DSUtil/DSUtil.cpp b/src/DSUtil/DSUtil.cpp
index 39b768ebb..dd6c415cd 100644
--- a/src/DSUtil/DSUtil.cpp
+++ b/src/DSUtil/DSUtil.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -26,15 +26,14 @@
#include "winddk/ntddcdrm.h"
#include "DSUtil.h"
#include "Mpeg2Def.h"
-#include "vd.h"
-#include "moreuuids.h"
#include <emmintrin.h>
-#include <math.h>
-#include <InitGuid.h>
#include <d3d9types.h>
+#include "NullRenderers.h"
+
+#include <initguid.h>
+#include "moreuuids.h"
#include <dxva.h>
#include <dxva2api.h>
-#include <intrin.h>
int CountPins(IBaseFilter* pBF, int& nIn, int& nOut, int& nInC, int& nOutC)
{
@@ -152,8 +151,13 @@ bool IsAudioWaveRenderer(IBaseFilter* pBF)
memcpy(&clsid, &GUID_NULL, sizeof(clsid));
pBF->GetClassID(&clsid);
- return (clsid == CLSID_DSoundRender || clsid == CLSID_AudioRender || clsid == CLSID_ReClock
- || clsid == __uuidof(CNullAudioRenderer) || clsid == __uuidof(CNullUAudioRenderer));
+ return clsid == CLSID_DSoundRender ||
+ clsid == CLSID_AudioRender ||
+ clsid == CLSID_ReClock ||
+ clsid == __uuidof(CNullAudioRenderer) ||
+ clsid == __uuidof(CNullUAudioRenderer) ||
+ clsid == CLSID_SANEAR_INTERNAL ||
+ clsid == CLSID_SANEAR;
}
IBaseFilter* GetUpStreamFilter(IBaseFilter* pBF, IPin* pInputPin)
@@ -346,7 +350,7 @@ IPin* AppendFilter(IPin* pPin, CString DisplayName, IGraphBuilder* pGB)
}
CComVariant var;
- if (FAILED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (FAILED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
break;
}
@@ -440,7 +444,7 @@ IPin* InsertFilter(IPin* pPin, CString DisplayName, IGraphBuilder* pGB)
}
CComVariant var;
- if (FAILED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (FAILED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
break;
}
@@ -629,10 +633,9 @@ bool IsCLSIDRegistered(const CLSID& clsid)
{
bool fRet = false;
- LPOLESTR pStr = nullptr;
+ CComHeapPtr<OLECHAR> pStr;
if (S_OK == StringFromCLSID(clsid, &pStr) && pStr) {
fRet = IsCLSIDRegistered(CString(pStr));
- CoTaskMemFree(pStr);
}
return fRet;
@@ -660,10 +663,9 @@ CString GetFilterPath(const CLSID& clsid)
{
CString path;
- LPOLESTR pStr = nullptr;
+ CComHeapPtr<OLECHAR> pStr;
if (S_OK == StringFromCLSID(clsid, &pStr) && pStr) {
path = GetFilterPath(CString(pStr));
- CoTaskMemFree(pStr);
}
return path;
@@ -721,7 +723,7 @@ CString BinToCString(const BYTE* ptr, size_t len)
return ret;
}
-static void FindFiles(CString fn, CAtlList<CString>& files)
+void FindFiles(CString fn, CAtlList<CString>& files)
{
CString path = fn;
path.Replace('/', '\\');
@@ -916,7 +918,7 @@ void memsetd(void* dst, unsigned int c, size_t nbytes)
{
size_t n = nbytes / 4;
-#ifndef _WIN64
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
if (!(g_cpuid.m_flags & g_cpuid.sse2)) { // No SSE2
__stosd((unsigned long*)dst, c, n);
return;
@@ -1117,7 +1119,7 @@ bool CreateFilter(CStringW DisplayName, IBaseFilter** ppBF, CStringW& FriendlyNa
CComPtr<IPropertyBag> pPB;
CComVariant var;
if (SUCCEEDED(pMoniker->BindToStorage(pBindCtx, 0, IID_PPV_ARGS(&pPB)))
- && SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ && SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
FriendlyName = var.bstrVal;
}
@@ -1146,7 +1148,7 @@ IBaseFilter* AppendFilter(IPin* pPin, IMoniker* pMoniker, IGraphBuilder* pGB)
}
CComVariant var;
- if (FAILED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (FAILED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
break;
}
@@ -1159,13 +1161,13 @@ IBaseFilter* AppendFilter(IPin* pPin, IMoniker* pMoniker, IGraphBuilder* pGB)
break;
}
- BeginEnumPins(pBF, pEP, pPinTo) {
+ BeginEnumPins(pBF, pEP, pPinTo2) {
PIN_DIRECTION dir2;
- if (FAILED(pPinTo->QueryDirection(&dir2)) || dir2 != PINDIR_INPUT) {
+ if (FAILED(pPinTo2->QueryDirection(&dir2)) || dir2 != PINDIR_INPUT) {
continue;
}
- if (SUCCEEDED(pGB->ConnectDirect(pPin, pPinTo, nullptr))) {
+ if (SUCCEEDED(pGB->ConnectDirect(pPin, pPinTo2, nullptr))) {
return pBF;
}
}
@@ -1190,7 +1192,7 @@ CStringW GetFriendlyName(CStringW displayName)
CComPtr<IPropertyBag> pPB;
CComVariant var;
if (SUCCEEDED(pMoniker->BindToStorage(pBindCtx, 0, IID_PPV_ARGS(&pPB)))
- && SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ && SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
friendlyName = var.bstrVal;
}
}
@@ -1480,699 +1482,6 @@ CStringW LocalToStringW(const char* S)
return str;
}
-static struct {
- LPCSTR name, iso6392, iso6391;
- LCID lcid;
-} s_isolangs[] = { // TODO : fill LCID !!!
- {"Abkhazian", "abk", "ab"},
- {"Achinese", "ace", ""},
- {"Acoli", "ach", ""},
- {"Adangme", "ada", ""},
- {"Afar", "aar", "aa"},
- {"Afrihili", "afh", ""},
- {"Afrikaans", "afr", "af", MAKELCID(MAKELANGID(LANG_AFRIKAANS, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Afro-Asiatic (Other)", "afa", ""},
- {"Akan", "aka", "ak"},
- {"Akkadian", "akk", ""},
- {"Albanian", "alb", "sq"},
- {"Albanian", "sqi", "sq", MAKELCID(MAKELANGID(LANG_ALBANIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Aleut", "ale", ""},
- {"Algonquian languages", "alg", ""},
- {"Altaic (Other)", "tut", ""},
- {"Amharic", "amh", "am"},
- {"Apache languages", "apa", ""},
- {"Arabic", "ara", "ar", MAKELCID(MAKELANGID(LANG_ARABIC, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Aragonese", "arg", "an"},
- {"Aramaic", "arc", ""},
- {"Arapaho", "arp", ""},
- {"Araucanian", "arn", ""},
- {"Arawak", "arw", ""},
- {"Armenian", "arm", "hy", MAKELCID(MAKELANGID(LANG_ARMENIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Armenian", "hye", "hy", MAKELCID(MAKELANGID(LANG_ARMENIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Artificial (Other)", "art", ""},
- {"Assamese", "asm", "as", MAKELCID(MAKELANGID(LANG_ASSAMESE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Asturian; Bable", "ast", ""},
- {"Athapascan languages", "ath", ""},
- {"Australian languages", "aus", ""},
- {"Austronesian (Other)", "map", ""},
- {"Avaric", "ava", "av"},
- {"Avestan", "ave", "ae"},
- {"Awadhi", "awa", ""},
- {"Aymara", "aym", "ay"},
- {"Azerbaijani", "aze", "az", MAKELCID(MAKELANGID(LANG_AZERI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Bable; Asturian", "ast", ""},
- {"Balinese", "ban", ""},
- {"Baltic (Other)", "bat", ""},
- {"Baluchi", "bal", ""},
- {"Bambara", "bam", "bm"},
- {"Bamileke languages", "bai", ""},
- {"Banda", "bad", ""},
- {"Bantu (Other)", "bnt", ""},
- {"Basa", "bas", ""},
- {"Bashkir", "bak", "ba", MAKELCID(MAKELANGID(LANG_BASHKIR, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Basque", "baq", "eu", MAKELCID(MAKELANGID(LANG_BASQUE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Basque", "eus", "eu", MAKELCID(MAKELANGID(LANG_BASQUE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Batak (Indonesia)", "btk", ""},
- {"Beja", "bej", ""},
- {"Belarusian", "bel", "be", MAKELCID(MAKELANGID(LANG_BELARUSIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Bemba", "bem", ""},
- {"Bengali", "ben", "bn", MAKELCID(MAKELANGID(LANG_BENGALI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Berber (Other)", "ber", ""},
- {"Bhojpuri", "bho", ""},
- {"Bihari", "bih", "bh"},
- {"Bikol", "bik", ""},
- {"Bini", "bin", ""},
- {"Bislama", "bis", "bi"},
- {"Bokmål, Norwegian; Norwegian Bokmål", "nob", "nb"},
- {"Bosnian", "bos", "bs"},
- {"Braj", "bra", ""},
- {"Brazilian", "pob", "pb"}, // unofficial codes for Brazilian Portuguese language
- {"Breton", "bre", "br", MAKELCID(MAKELANGID(LANG_BRETON, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Buginese", "bug", ""},
- {"Bulgarian", "bul", "bg", MAKELCID(MAKELANGID(LANG_BULGARIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Buriat", "bua", ""},
- {"Burmese", "bur", "my"},
- {"Burmese", "mya", "my"},
- {"Caddo", "cad", ""},
- {"Carib", "car", ""},
- {"Spanish; Castilian", "spa", "es", MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Catalan", "cat", "ca", MAKELCID(MAKELANGID(LANG_CATALAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Caucasian (Other)", "cau", ""},
- {"Cebuano", "ceb", ""},
- {"Celtic (Other)", "cel", ""},
- {"Central American Indian (Other)", "cai", ""},
- {"Chagatai", "chg", ""},
- {"Chamic languages", "cmc", ""},
- {"Chamorro", "cha", "ch"},
- {"Chechen", "che", "ce"},
- {"Cherokee", "chr", ""},
- {"Chewa; Chichewa; Nyanja", "nya", "ny"},
- {"Cheyenne", "chy", ""},
- {"Chibcha", "chb", ""},
- {"Chichewa; Chewa; Nyanja", "nya", "ny"},
- {"Chinese", "chi", "zh", MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Chinese", "zho", "zh"},
- {"Chinook jargon", "chn", ""},
- {"Chipewyan", "chp", ""},
- {"Choctaw", "cho", ""},
- {"Chuang; Zhuang", "zha", "za"},
- {"Church Slavic; Old Church Slavonic", "chu", "cu"},
- {"Old Church Slavonic; Old Slavonic; ", "chu", "cu"},
- {"Church Slavonic; Old Bulgarian; Church Slavic;", "chu", "cu"},
- {"Old Slavonic; Church Slavonic; Old Bulgarian;", "chu", "cu"},
- {"Church Slavic; Old Church Slavonic", "chu", "cu"},
- {"Chuukese", "chk", ""},
- {"Chuvash", "chv", "cv"},
- {"Coptic", "cop", ""},
- {"Cornish", "cor", "kw"},
- {"Corsican", "cos", "co", MAKELCID(MAKELANGID(LANG_CORSICAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Cree", "cre", "cr"},
- {"Creek", "mus", ""},
- {"Creoles and pidgins (Other)", "crp", ""},
- {"Creoles and pidgins,", "cpe", ""},
- // {"English-based (Other)", "", ""},
- {"Creoles and pidgins,", "cpf", ""},
- // {"French-based (Other)", "", ""},
- {"Creoles and pidgins,", "cpp", ""},
- // {"Portuguese-based (Other)", "", ""},
- {"Croatian", "scr", "hr", MAKELCID(MAKELANGID(LANG_CROATIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Croatian", "hrv", "hr", MAKELCID(MAKELANGID(LANG_CROATIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Cushitic (Other)", "cus", ""},
- {"Czech", "cze", "cs", MAKELCID(MAKELANGID(LANG_CZECH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Czech", "ces", "cs", MAKELCID(MAKELANGID(LANG_CZECH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Dakota", "dak", ""},
- {"Danish", "dan", "da", MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Dargwa", "dar", ""},
- {"Dayak", "day", ""},
- {"Delaware", "del", ""},
- {"Dinka", "din", ""},
- {"Divehi", "div", "dv", MAKELCID(MAKELANGID(LANG_DIVEHI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Dogri", "doi", ""},
- {"Dogrib", "dgr", ""},
- {"Dravidian (Other)", "dra", ""},
- {"Duala", "dua", ""},
- {"Dutch; Flemish", "dut", "nl", MAKELCID(MAKELANGID(LANG_DUTCH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Dutch; Flemish", "nld", "nl", MAKELCID(MAKELANGID(LANG_DUTCH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Dutch, Middle (ca. 1050-1350)", "dum", ""},
- {"Dyula", "dyu", ""},
- {"Dzongkha", "dzo", "dz"},
- {"Efik", "efi", ""},
- {"Egyptian (Ancient)", "egy", ""},
- {"Ekajuk", "eka", ""},
- {"Elamite", "elx", ""},
- {"English", "eng", "en", MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"English, Middle (1100-1500)", "enm", ""},
- {"English, Old (ca.450-1100)", "ang", ""},
- {"Esperanto", "epo", "eo"},
- {"Estonian", "est", "et", MAKELCID(MAKELANGID(LANG_ESTONIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Ewe", "ewe", "ee"},
- {"Ewondo", "ewo", ""},
- {"Fang", "fan", ""},
- {"Fanti", "fat", ""},
- {"Faroese", "fao", "fo", MAKELCID(MAKELANGID(LANG_FAEROESE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Fijian", "fij", "fj"},
- {"Finnish", "fin", "fi", MAKELCID(MAKELANGID(LANG_FINNISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Finno-Ugrian (Other)", "fiu", ""},
- {"Flemish; Dutch", "dut", "nl"},
- {"Flemish; Dutch", "nld", "nl"},
- {"Fon", "fon", ""},
- {"French", "fre", "fr", MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"French", "fra*", "fr", MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"French", "fra", "fr", MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"French, Middle (ca.1400-1600)", "frm", ""},
- {"French, Old (842-ca.1400)", "fro", ""},
- {"Frisian", "fry", "fy", MAKELCID(MAKELANGID(LANG_FRISIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Friulian", "fur", ""},
- {"Fulah", "ful", "ff"},
- {"Ga", "gaa", ""},
- {"Gaelic; Scottish Gaelic", "gla", "gd", MAKELCID(MAKELANGID(LANG_GALICIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Gallegan", "glg", "gl"},
- {"Ganda", "lug", "lg"},
- {"Gayo", "gay", ""},
- {"Gbaya", "gba", ""},
- {"Geez", "gez", ""},
- {"Georgian", "geo", "ka", MAKELCID(MAKELANGID(LANG_GEORGIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Georgian", "kat", "ka", MAKELCID(MAKELANGID(LANG_GEORGIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"German", "ger", "de", MAKELCID(MAKELANGID(LANG_GERMAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"German", "deu", "de", MAKELCID(MAKELANGID(LANG_GERMAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"German, Low; Saxon, Low; Low German; Low Saxon", "nds", ""},
- {"German, Middle High (ca.1050-1500)", "gmh", ""},
- {"German, Old High (ca.750-1050)", "goh", ""},
- {"Germanic (Other)", "gem", ""},
- {"Gikuyu; Kikuyu", "kik", "ki"},
- {"Gilbertese", "gil", ""},
- {"Gondi", "gon", ""},
- {"Gorontalo", "gor", ""},
- {"Gothic", "got", ""},
- {"Grebo", "grb", ""},
- {"Greek, Ancient (to 1453)", "grc", "", MAKELCID(MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Greek, Modern (1453-)", "gre", "el", MAKELCID(MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Greek, Modern (1453-)", "ell", "el", MAKELCID(MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Greenlandic; Kalaallisut", "kal", "kl", MAKELCID(MAKELANGID(LANG_GREENLANDIC, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Guarani", "grn", "gn"},
- {"Gujarati", "guj", "gu", MAKELCID(MAKELANGID(LANG_GUJARATI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Gwich’in", "gwi", ""},
- {"Haida", "hai", ""},
- {"Hausa", "hau", "ha", MAKELCID(MAKELANGID(LANG_HAUSA, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Hawaiian", "haw", ""},
- {"Hebrew", "heb", "he", MAKELCID(MAKELANGID(LANG_HEBREW, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Herero", "her", "hz"},
- {"Hiligaynon", "hil", ""},
- {"Himachali", "him", ""},
- {"Hindi", "hin", "hi", MAKELCID(MAKELANGID(LANG_HINDI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Hiri Motu", "hmo", "ho"},
- {"Hittite", "hit", ""},
- {"Hmong", "hmn", ""},
- {"Hungarian", "hun", "hu", MAKELCID(MAKELANGID(LANG_HUNGARIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Hupa", "hup", ""},
- {"Iban", "iba", ""},
- {"Icelandic", "ice", "is", MAKELCID(MAKELANGID(LANG_ICELANDIC, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Icelandic", "isl", "is", MAKELCID(MAKELANGID(LANG_ICELANDIC, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Ido", "ido", "io"},
- {"Igbo", "ibo", "ig", MAKELCID(MAKELANGID(LANG_IGBO, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Ijo", "ijo", ""},
- {"Iloko", "ilo", ""},
- {"Inari Sami", "smn", ""},
- {"Indic (Other)", "inc", ""},
- {"Indo-European (Other)", "ine", ""},
- {"Indonesian", "ind", "id", MAKELCID(MAKELANGID(LANG_INDONESIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Ingush", "inh", ""},
- {"Interlingua (International", "ina", "ia"},
- // {"Auxiliary Language Association)", "", ""},
- {"Interlingue", "ile", "ie"},
- {"Inuktitut", "iku", "iu", MAKELCID(MAKELANGID(LANG_INUKTITUT, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Inupiaq", "ipk", "ik"},
- {"Iranian (Other)", "ira", ""},
- {"Irish", "gle", "ga", MAKELCID(MAKELANGID(LANG_IRISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Irish, Middle (900-1200)", "mga", "", MAKELCID(MAKELANGID(LANG_IRISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Irish, Old (to 900)", "sga", "", MAKELCID(MAKELANGID(LANG_IRISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Iroquoian languages", "iro", ""},
- {"Italian", "ita", "it", MAKELCID(MAKELANGID(LANG_ITALIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Japanese", "jpn", "ja", MAKELCID(MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Javanese", "jav", "jv"},
- {"Judeo-Arabic", "jrb", ""},
- {"Judeo-Persian", "jpr", ""},
- {"Kabardian", "kbd", ""},
- {"Kabyle", "kab", ""},
- {"Kachin", "kac", ""},
- {"Kalaallisut; Greenlandic", "kal", "kl"},
- {"Kamba", "kam", ""},
- {"Kannada", "kan", "kn", MAKELCID(MAKELANGID(LANG_KANNADA, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Kanuri", "kau", "kr"},
- {"Kara-Kalpak", "kaa", ""},
- {"Karen", "kar", ""},
- {"Kashmiri", "kas", "ks", MAKELCID(MAKELANGID(LANG_KASHMIRI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Kawi", "kaw", ""},
- {"Kazakh", "kaz", "kk", MAKELCID(MAKELANGID(LANG_KAZAK, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Khasi", "kha", ""},
- {"Khmer", "khm", "km", MAKELCID(MAKELANGID(LANG_KHMER, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Khoisan (Other)", "khi", ""},
- {"Khotanese", "kho", ""},
- {"Kikuyu; Gikuyu", "kik", "ki"},
- {"Kimbundu", "kmb", ""},
- {"Kinyarwanda", "kin", "rw", MAKELCID(MAKELANGID(LANG_KINYARWANDA, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Kirghiz", "kir", "ky"},
- {"Komi", "kom", "kv"},
- {"Kongo", "kon", "kg"},
- {"Konkani", "kok", "", MAKELCID(MAKELANGID(LANG_KONKANI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Korean", "kor", "ko", MAKELCID(MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Kosraean", "kos", ""},
- {"Kpelle", "kpe", ""},
- {"Kru", "kro", ""},
- {"Kuanyama; Kwanyama", "kua", "kj"},
- {"Kumyk", "kum", ""},
- {"Kurdish", "kur", "ku"},
- {"Kurukh", "kru", ""},
- {"Kutenai", "kut", ""},
- {"Kwanyama, Kuanyama", "kua", "kj"},
- {"Ladino", "lad", ""},
- {"Lahnda", "lah", ""},
- {"Lamba", "lam", ""},
- {"Lao", "lao", "lo", MAKELCID(MAKELANGID(LANG_LAO, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Latin", "lat", "la"},
- {"Latvian", "lav", "lv", MAKELCID(MAKELANGID(LANG_LATVIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Letzeburgesch; Luxembourgish", "ltz", "lb"},
- {"Lezghian", "lez", ""},
- {"Limburgan; Limburger; Limburgish", "lim", "li"},
- {"Limburger; Limburgan; Limburgish;", "lim", "li"},
- {"Limburgish; Limburger; Limburgan", "lim", "li"},
- {"Lingala", "lin", "ln"},
- {"Lithuanian", "lit", "lt", MAKELCID(MAKELANGID(LANG_LITHUANIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Low German; Low Saxon; German, Low; Saxon, Low", "nds", ""},
- {"Low Saxon; Low German; Saxon, Low; German, Low", "nds", ""},
- {"Lozi", "loz", ""},
- {"Luba-Katanga", "lub", "lu"},
- {"Luba-Lulua", "lua", ""},
- {"Luiseno", "lui", ""},
- {"Lule Sami", "smj", ""},
- {"Lunda", "lun", ""},
- {"Luo (Kenya and Tanzania)", "luo", ""},
- {"Lushai", "lus", ""},
- {"Luxembourgish; Letzeburgesch", "ltz", "lb", MAKELCID(MAKELANGID(LANG_LUXEMBOURGISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Macedonian", "mac", "mk", MAKELCID(MAKELANGID(LANG_MACEDONIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Macedonian", "mkd", "mk", MAKELCID(MAKELANGID(LANG_MACEDONIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Madurese", "mad", ""},
- {"Magahi", "mag", ""},
- {"Maithili", "mai", ""},
- {"Makasar", "mak", ""},
- {"Malagasy", "mlg", "mg"},
- {"Malay", "may", "ms", MAKELCID(MAKELANGID(LANG_MALAY, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Malay", "msa", "ms", MAKELCID(MAKELANGID(LANG_MALAY, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Malayalam", "mal", "ml", MAKELCID(MAKELANGID(LANG_MALAYALAM, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Maltese", "mlt", "mt", MAKELCID(MAKELANGID(LANG_MALTESE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Manchu", "mnc", ""},
- {"Mandar", "mdr", ""},
- {"Mandingo", "man", ""},
- {"Manipuri", "mni", "", MAKELCID(MAKELANGID(LANG_MANIPURI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Manobo languages", "mno", ""},
- {"Manx", "glv", "gv"},
- {"Maori", "mao", "mi", MAKELCID(MAKELANGID(LANG_MAORI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Maori", "mri", "mi", MAKELCID(MAKELANGID(LANG_MAORI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Marathi", "mar", "mr", MAKELCID(MAKELANGID(LANG_MARATHI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Mari", "chm", ""},
- {"Marshallese", "mah", "mh"},
- {"Marwari", "mwr", ""},
- {"Masai", "mas", ""},
- {"Mayan languages", "myn", ""},
- {"Mende", "men", ""},
- {"Micmac", "mic", ""},
- {"Minangkabau", "min", ""},
- {"Miscellaneous languages", "mis", ""},
- {"Mohawk", "moh", "", MAKELCID(MAKELANGID(LANG_MOHAWK, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Moldavian", "mol", "mo"},
- {"Mon-Khmer (Other)", "mkh", ""},
- {"Mongo", "lol", ""},
- {"Mongolian", "mon", "mn", MAKELCID(MAKELANGID(LANG_MONGOLIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Mossi", "mos", ""},
- {"Multiple languages", "mul", ""},
- {"Munda languages", "mun", ""},
- {"Nahuatl", "nah", ""},
- {"Nauru", "nau", "na"},
- {"Navaho, Navajo", "nav", "nv"},
- {"Navajo; Navaho", "nav", "nv"},
- {"Ndebele, North", "nde", "nd"},
- {"Ndebele, South", "nbl", "nr"},
- {"Ndonga", "ndo", "ng"},
- {"Neapolitan", "nap", ""},
- {"Nepali", "nep", "ne", MAKELCID(MAKELANGID(LANG_NEPALI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Newari", "new", ""},
- {"Nias", "nia", ""},
- {"Niger-Kordofanian (Other)", "nic", ""},
- {"Nilo-Saharan (Other)", "ssa", ""},
- {"Niuean", "niu", ""},
- {"Norse, Old", "non", ""},
- {"North American Indian (Other)", "nai", ""},
- {"Northern Sami", "sme", "se"},
- {"North Ndebele", "nde", "nd"},
- {"Norwegian", "nor", "no", MAKELCID(MAKELANGID(LANG_NORWEGIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Norwegian Bokmål; Bokmål, Norwegian", "nob", "nb", MAKELCID(MAKELANGID(LANG_NORWEGIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Norwegian Nynorsk; Nynorsk, Norwegian", "nno", "nn", MAKELCID(MAKELANGID(LANG_NORWEGIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Nubian languages", "nub", ""},
- {"Nyamwezi", "nym", ""},
- {"Nyanja; Chichewa; Chewa", "nya", "ny"},
- {"Nyankole", "nyn", ""},
- {"Nynorsk, Norwegian; Norwegian Nynorsk", "nno", "nn"},
- {"Nyoro", "nyo", ""},
- {"Nzima", "nzi", ""},
- {"Occitan (post 1500},; Provençal", "oci", "oc", MAKELCID(MAKELANGID(LANG_OCCITAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Ojibwa", "oji", "oj"},
- {"Old Bulgarian; Old Slavonic; Church Slavonic;", "chu", "cu"},
- {"Oriya", "ori", "or"},
- {"Oromo", "orm", "om"},
- {"Osage", "osa", ""},
- {"Ossetian; Ossetic", "oss", "os"},
- {"Ossetic; Ossetian", "oss", "os"},
- {"Otomian languages", "oto", ""},
- {"Pahlavi", "pal", ""},
- {"Palauan", "pau", ""},
- {"Pali", "pli", "pi"},
- {"Pampanga", "pam", ""},
- {"Pangasinan", "pag", ""},
- {"Panjabi", "pan", "pa"},
- {"Papiamento", "pap", ""},
- {"Papuan (Other)", "paa", ""},
- {"Persian", "per", "fa", MAKELCID(MAKELANGID(LANG_PERSIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Persian", "fas", "fa", MAKELCID(MAKELANGID(LANG_PERSIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Persian, Old (ca.600-400 B.C.)", "peo", ""},
- {"Philippine (Other)", "phi", ""},
- {"Phoenician", "phn", ""},
- {"Pohnpeian", "pon", ""},
- {"Polish", "pol", "pl", MAKELCID(MAKELANGID(LANG_POLISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Portuguese", "por", "pt", MAKELCID(MAKELANGID(LANG_PORTUGUESE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Prakrit languages", "pra", ""},
- {"Provençal; Occitan (post 1500)", "oci", "oc"},
- {"Provençal, Old (to 1500)", "pro", ""},
- {"Pushto", "pus", "ps"},
- {"Quechua", "que", "qu", MAKELCID(MAKELANGID(LANG_QUECHUA, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Raeto-Romance", "roh", "rm"},
- {"Rajasthani", "raj", ""},
- {"Rapanui", "rap", ""},
- {"Rarotongan", "rar", ""},
- {"Reserved for local use", "qaa-qtz", ""},
- {"Romance (Other)", "roa", ""},
- {"Romanian", "rum", "ro", MAKELCID(MAKELANGID(LANG_ROMANIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Romanian", "ron", "ro", MAKELCID(MAKELANGID(LANG_ROMANIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Romany", "rom", ""},
- {"Rundi", "run", "rn"},
- {"Russian", "rus", "ru", MAKELCID(MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Salishan languages", "sal", ""},
- {"Samaritan Aramaic", "sam", ""},
- {"Sami languages (Other)", "smi", ""},
- {"Samoan", "smo", "sm"},
- {"Sandawe", "sad", ""},
- {"Sango", "sag", "sg"},
- {"Sanskrit", "san", "sa", MAKELCID(MAKELANGID(LANG_SANSKRIT, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Santali", "sat", ""},
- {"Sardinian", "srd", "sc"},
- {"Sasak", "sas", ""},
- {"Saxon, Low; German, Low; Low Saxon; Low German", "nds", ""},
- {"Scots", "sco", ""},
- {"Scottish Gaelic; Gaelic", "gla", "gd"},
- {"Selkup", "sel", ""},
- {"Semitic (Other)", "sem", ""},
- {"Serbian", "scc", "sr", MAKELCID(MAKELANGID(LANG_SERBIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Serbian", "srp", "sr", MAKELCID(MAKELANGID(LANG_SERBIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Serer", "srr", ""},
- {"Shan", "shn", ""},
- {"Shona", "sna", "sn"},
- {"Sichuan Yi", "iii", "ii"},
- {"Sidamo", "sid", ""},
- {"Sign languages", "sgn", ""},
- {"Siksika", "bla", ""},
- {"Sindhi", "snd", "sd", MAKELCID(MAKELANGID(LANG_SINDHI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Sinhalese", "sin", "si", MAKELCID(MAKELANGID(LANG_SINHALESE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Sino-Tibetan (Other)", "sit", ""},
- {"Siouan languages", "sio", ""},
- {"Skolt Sami", "sms", ""},
- {"Slave (Athapascan)", "den", ""},
- {"Slavic (Other)", "sla", ""},
- {"Slovak", "slo", "sk", MAKELCID(MAKELANGID(LANG_SLOVAK, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Slovak", "slk", "sk", MAKELCID(MAKELANGID(LANG_SLOVAK, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Slovenian", "slv", "sl", MAKELCID(MAKELANGID(LANG_SLOVENIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Sogdian", "sog", ""},
- {"Somali", "som", "so"},
- {"Songhai", "son", ""},
- {"Soninke", "snk", ""},
- {"Sorbian languages", "wen", ""},
- {"Sotho, Northern", "nso", "", MAKELCID(MAKELANGID(LANG_SOTHO, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Sotho, Southern", "sot", "st", MAKELCID(MAKELANGID(LANG_SOTHO, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"South American Indian (Other)", "sai", ""},
- {"Southern Sami", "sma", ""},
- {"South Ndebele", "nbl", "nr"},
- {"Spanish; Castilian", "spa", "es", MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Sukuma", "suk", ""},
- {"Sumerian", "sux", ""},
- {"Sundanese", "sun", "su"},
- {"Susu", "sus", ""},
- {"Swahili", "swa", "sw", MAKELCID(MAKELANGID(LANG_SWAHILI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Swati", "ssw", "ss"},
- {"Swedish", "swe", "sv", MAKELCID(MAKELANGID(LANG_SWEDISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Syriac", "syr", "", MAKELCID(MAKELANGID(LANG_SYRIAC, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Tagalog", "tgl", "tl"},
- {"Tahitian", "tah", "ty"},
- {"Tai (Other)", "tai", ""},
- {"Tajik", "tgk", "tg", MAKELCID(MAKELANGID(LANG_TAJIK, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Tamashek", "tmh", ""},
- {"Tamil", "tam", "ta", MAKELCID(MAKELANGID(LANG_TAMIL, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Tatar", "tat", "tt", MAKELCID(MAKELANGID(LANG_TATAR, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Telugu", "tel", "te", MAKELCID(MAKELANGID(LANG_TELUGU, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Tereno", "ter", ""},
- {"Tetum", "tet", ""},
- {"Thai", "tha", "th", MAKELCID(MAKELANGID(LANG_THAI, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Tibetan", "tib", "bo", MAKELCID(MAKELANGID(LANG_TIBETAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Tibetan", "bod", "bo", MAKELCID(MAKELANGID(LANG_TIBETAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Tigre", "tig", ""},
- {"Tigrinya", "tir", "ti", MAKELCID(MAKELANGID(LANG_TIGRIGNA, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Timne", "tem", ""},
- {"Tiv", "tiv", ""},
- {"Tlingit", "tli", ""},
- {"Tok Pisin", "tpi", ""},
- {"Tokelau", "tkl", ""},
- {"Tonga (Nyasa)", "tog", ""},
- {"Tonga (Tonga Islands)", "ton", "to"},
- {"Tsimshian", "tsi", ""},
- {"Tsonga", "tso", "ts"},
- {"Tswana", "tsn", "tn", MAKELCID(MAKELANGID(LANG_TSWANA, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Tumbuka", "tum", ""},
- {"Tupi languages", "tup", ""},
- {"Turkish", "tur", "tr", MAKELCID(MAKELANGID(LANG_TURKISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Turkish, Ottoman (1500-1928)", "ota", "", MAKELCID(MAKELANGID(LANG_TURKISH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Turkmen", "tuk", "tk", MAKELCID(MAKELANGID(LANG_TURKMEN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Tuvalu", "tvl", ""},
- {"Tuvinian", "tyv", ""},
- {"Twi", "twi", "tw"},
- {"Ugaritic", "uga", ""},
- {"Uighur", "uig", "ug", MAKELCID(MAKELANGID(LANG_UIGHUR, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Ukrainian", "ukr", "uk", MAKELCID(MAKELANGID(LANG_UKRAINIAN, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Umbundu", "umb", ""},
- {"Undetermined", "und", ""},
- {"Urdu", "urd", "ur", MAKELCID(MAKELANGID(LANG_URDU, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Uzbek", "uzb", "uz", MAKELCID(MAKELANGID(LANG_UZBEK, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Vai", "vai", ""},
- {"Venda", "ven", "ve"},
- {"Vietnamese", "vie", "vi", MAKELCID(MAKELANGID(LANG_VIETNAMESE, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Volapuk", "vol", "vo"},
- {"Votic", "vot", ""},
- {"Wakashan languages", "wak", ""},
- {"Walamo", "wal", ""},
- {"Walloon", "wln", "wa"},
- {"Waray", "war", ""},
- {"Washo", "was", ""},
- {"Welsh", "wel", "cy", MAKELCID(MAKELANGID(LANG_WELSH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Welsh", "cym", "cy", MAKELCID(MAKELANGID(LANG_WELSH, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Wolof", "wol", "wo", MAKELCID(MAKELANGID(LANG_WOLOF, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Xhosa", "xho", "xh", MAKELCID(MAKELANGID(LANG_XHOSA, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Yakut", "sah", "", MAKELCID(MAKELANGID(LANG_YAKUT, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Yao", "yao", ""},
- {"Yapese", "yap", ""},
- {"Yiddish", "yid", "yi"},
- {"Yoruba", "yor", "yo", MAKELCID(MAKELANGID(LANG_YORUBA, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Yupik languages", "ypk", ""},
- {"Zande", "znd", ""},
- {"Zapotec", "zap", ""},
- {"Zenaga", "zen", ""},
- {"Zhuang; Chuang", "zha", "za"},
- {"Zulu", "zul", "zu", MAKELCID(MAKELANGID(LANG_ZULU, SUBLANG_DEFAULT), SORT_DEFAULT)},
- {"Zuni", "zun", ""},
- {"Classical Newari", "nwc", ""},
- {"Klingon", "tlh", ""},
- {"Blin", "byn", ""},
- {"Lojban", "jbo", ""},
- {"Lower Sorbian", "dsb", ""},
- {"Upper Sorbian", "hsb", ""},
- {"Kashubian", "csb", ""},
- {"Crimean Turkish", "crh", ""},
- {"Erzya", "myv", ""},
- {"Moksha", "mdf", ""},
- {"Karachay-Balkar", "krc", ""},
- {"Adyghe", "ady", ""},
- {"Udmurt", "udm", ""},
- {"Dargwa", "dar", ""},
- {"Ingush", "inh", ""},
- {"Nogai", "nog", ""},
- {"Haitian", "hat", "ht"},
- {"Kalmyk", "xal", ""},
- {"", "", ""},
- {"No subtitles", "---", "", (LCID)LCID_NOSUBTITLES},
-};
-
-CString ISO6391ToLanguage(LPCSTR code)
-{
- CHAR tmp[2 + 1];
- strncpy_s(tmp, code, 2);
- tmp[2] = 0;
- _strlwr_s(tmp);
- for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
- if (!strcmp(s_isolangs[i].iso6391, tmp)) {
- CString ret = CString(CStringA(s_isolangs[i].name));
- int k = ret.Find(';');
- if (k > 0) {
- ret = ret.Left(k);
- }
- return ret;
- }
- }
- return _T("");
-}
-
-CString ISO6392ToLanguage(LPCSTR code)
-{
- CHAR tmp[3 + 1];
- strncpy_s(tmp, code, 3);
- tmp[3] = 0;
- _strlwr_s(tmp);
- for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
- if (!strcmp(s_isolangs[i].iso6392, tmp)) {
- CString ret = CString(CStringA(s_isolangs[i].name));
- int k = ret.Find(';');
- if (k > 0) {
- ret = ret.Left(k);
- }
- return ret;
- }
- }
- return CString(code);
-}
-
-bool IsISO639Language(LPCSTR code)
-{
- size_t nLen = strlen(code) + 1;
- LPSTR tmp = DEBUG_NEW CHAR[nLen];
- strncpy_s(tmp, nLen, code, nLen);
- _strlwr_s(tmp, nLen);
- tmp[0] = (CHAR)toupper(tmp[0]);
-
- bool bFound = false;
- for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
- if (!strcmp(s_isolangs[i].name, tmp)) {
- bFound = true;
- break;
- }
- }
-
- delete [] tmp;
-
- return bFound;
-}
-
-CString ISO639XToLanguage(LPCSTR code, bool bCheckForFullLangName /*= false*/)
-{
- CString lang;
-
- switch (size_t nLen = strlen(code)) {
- case 2:
- lang = ISO6391ToLanguage(code);
- break;
- case 3:
- lang = ISO6392ToLanguage(code);
- if (lang == code) { // When it can't find a match, ISO6392ToLanguage returns the input string
- lang.Empty();
- }
- break;
- default:
- if (bCheckForFullLangName && nLen > 3) {
- if (IsISO639Language(code)) {
- lang = code;
- }
- }
- }
-
- return lang;
-}
-
-LCID ISO6391ToLcid(LPCSTR code)
-{
- CHAR tmp[3 + 1];
- strncpy_s(tmp, code, 3);
- tmp[3] = 0;
- _strlwr_s(tmp);
- for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
- if (!strcmp(s_isolangs[i].iso6391, code)) {
- return s_isolangs[i].lcid;
- }
- }
- return 0;
-}
-
-LCID ISO6392ToLcid(LPCSTR code)
-{
- CHAR tmp[3 + 1];
- strncpy_s(tmp, code, 3);
- tmp[3] = 0;
- _strlwr_s(tmp);
- for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
- if (!strcmp(s_isolangs[i].iso6392, tmp)) {
- return s_isolangs[i].lcid;
- }
- }
- return 0;
-}
-
-CString ISO6391To6392(LPCSTR code)
-{
- CHAR tmp[2 + 1];
- strncpy_s(tmp, code, 2);
- tmp[2] = 0;
- _strlwr_s(tmp);
- for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
- if (!strcmp(s_isolangs[i].iso6391, tmp)) {
- return CString(CStringA(s_isolangs[i].iso6392));
- }
- }
- return _T("");
-}
-
-CString ISO6392To6391(LPCSTR code)
-{
- CHAR tmp[3 + 1];
- strncpy_s(tmp, code, 3);
- tmp[3] = 0;
- _strlwr_s(tmp);
- for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
- if (!strcmp(s_isolangs[i].iso6392, tmp)) {
- return CString(CStringA(s_isolangs[i].iso6391));
- }
- }
- return _T("");
-}
-
-CString LanguageToISO6392(LPCTSTR lang)
-{
- CString str = lang;
- str.MakeLower();
- for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
- CAtlList<CString> sl;
- Explode(CString(s_isolangs[i].name), sl, ';');
- POSITION pos = sl.GetHeadPosition();
- while (pos) {
- if (!str.CompareNoCase(sl.GetNext(pos))) {
- return CString(s_isolangs[i].iso6392);
- }
- }
- }
- return _T("");
-}
-
BOOL CFileGetStatus(LPCTSTR lpszFileName, CFileStatus& status)
{
try {
@@ -2418,93 +1727,12 @@ REFERENCE_TIME StringToReftime(LPCTSTR strVal)
int lMillisec = 0;
if (_stscanf_s(strVal, _T("%02d:%02d:%02d,%03d"), &lHour, &lMinute, &lSecond, &lMillisec) == 4) {
- rt = ((((lHour * 24) + lMinute) * 60 + lSecond) * MILLISECONDS + lMillisec) * (UNITS / MILLISECONDS);
+ rt = ((((lHour * 60) + lMinute) * 60 + lSecond) * MILLISECONDS + lMillisec) * (UNITS / MILLISECONDS);
}
return rt;
}
-const double Rec601_Kr = 0.299;
-const double Rec601_Kb = 0.114;
-const double Rec601_Kg = 0.587;
-
-COLORREF YCrCbToRGB_Rec601(BYTE Y, BYTE Cr, BYTE Cb, double sourceBlackLevel, double sourceWhiteLevel, double targetBlackLevel, double targetWhiteLevel)
-{
- double targetRange = targetWhiteLevel - targetBlackLevel;
- double chromaChannelRange = (sourceWhiteLevel == 235.0 ? 224.0 /* 4:2:0 */ : sourceBlackLevel == 0.0 ? 255.0 /* 4:4:4 */ : 239.0 /* 4:2:2 */) / 2.0;
- double chromaScaleFactor = targetRange / chromaChannelRange;
- double scaledY = (Y - (sourceBlackLevel - targetBlackLevel)) * (targetRange / (sourceWhiteLevel - sourceBlackLevel));
-
- double rp = scaledY + chromaScaleFactor * (Cr - 128) * (1.0 - Rec601_Kr);
- double gp = scaledY - chromaScaleFactor * (Cb - 128) * (1.0 - Rec601_Kb) * Rec601_Kb / Rec601_Kg - chromaScaleFactor * (Cr - 128) * (1.0 - Rec601_Kr) * Rec601_Kr / Rec601_Kg;
- double bp = scaledY + chromaScaleFactor * (Cb - 128) * (1.0 - Rec601_Kb);
-
- auto R = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(rp)), targetWhiteLevel));
- auto G = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(gp)), targetWhiteLevel));
- auto B = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(bp)), targetWhiteLevel));
-
- return RGB(R, G, B);
-}
-
-DWORD YCrCbToRGB_Rec601(BYTE A, BYTE Y, BYTE Cr, BYTE Cb, double sourceBlackLevel, double sourceWhiteLevel, double targetBlackLevel, double targetWhiteLevel)
-{
- double targetRange = targetWhiteLevel - targetBlackLevel;
- double chromaChannelRange = (sourceWhiteLevel == 235.0 ? 224.0 /* 4:2:0 */ : sourceBlackLevel == 0.0 ? 255.0 /* 4:4:4 */ : 239.0 /* 4:2:2 */) / 2.0;
- double chromaScaleFactor = targetRange / chromaChannelRange;
- double scaledY = (Y - (sourceBlackLevel - targetBlackLevel)) * (targetRange / (sourceWhiteLevel - sourceBlackLevel));
-
- double rp = scaledY + chromaScaleFactor * (Cr - 128) * (1.0 - Rec601_Kr);
- double gp = scaledY - chromaScaleFactor * (Cb - 128) * (1.0 - Rec601_Kb) * Rec601_Kb / Rec601_Kg - chromaScaleFactor * (Cr - 128) * (1.0 - Rec601_Kr) * Rec601_Kr / Rec601_Kg;
- double bp = scaledY + chromaScaleFactor * (Cb - 128) * (1.0 - Rec601_Kb);
-
- auto R = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(rp)), targetWhiteLevel));
- auto G = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(gp)), targetWhiteLevel));
- auto B = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(bp)), targetWhiteLevel));
-
- return D3DCOLOR_ARGB(A, R, G, B);
-}
-
-
-const double Rec709_Kr = 0.2126;
-const double Rec709_Kb = 0.0722;
-const double Rec709_Kg = 0.7152;
-
-COLORREF YCrCbToRGB_Rec709(BYTE Y, BYTE Cr, BYTE Cb, double sourceBlackLevel, double sourceWhiteLevel, double targetBlackLevel, double targetWhiteLevel)
-{
- double targetRange = targetWhiteLevel - targetBlackLevel;
- double chromaChannelRange = (sourceWhiteLevel == 235.0 ? 224.0 /* 4:2:0 */ : sourceBlackLevel == 0.0 ? 255.0 /* 4:4:4 */ : 239.0 /* 4:2:2 */) / 2.0;
- double chromaScaleFactor = targetRange / chromaChannelRange;
- double scaledY = (Y - (sourceBlackLevel - targetBlackLevel)) * (targetRange / (sourceWhiteLevel - sourceBlackLevel));
-
- double rp = scaledY + chromaScaleFactor * (Cr - 128) * (1.0 - Rec709_Kr);
- double gp = scaledY - chromaScaleFactor * (Cb - 128) * (1.0 - Rec709_Kb) * Rec709_Kb / Rec709_Kg - chromaScaleFactor * (Cr - 128) * (1.0 - Rec709_Kr) * Rec709_Kr / Rec709_Kg;
- double bp = scaledY + chromaScaleFactor * (Cb - 128) * (1.0 - Rec709_Kb);
-
- auto R = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(rp)), targetWhiteLevel));
- auto G = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(gp)), targetWhiteLevel));
- auto B = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(bp)), targetWhiteLevel));
-
- return RGB(R, G, B);
-}
-
-DWORD YCrCbToRGB_Rec709(BYTE A, BYTE Y, BYTE Cr, BYTE Cb, double sourceBlackLevel, double sourceWhiteLevel, double targetBlackLevel, double targetWhiteLevel)
-{
- double targetRange = targetWhiteLevel - targetBlackLevel;
- double chromaChannelRange = (sourceWhiteLevel == 235.0 ? 224.0 /* 4:2:0 */ : sourceBlackLevel == 0.0 ? 255.0 /* 4:4:4 */ : 239.0 /* 4:2:2 */) / 2.0;
- double chromaScaleFactor = targetRange / chromaChannelRange;
- double scaledY = (Y - (sourceBlackLevel - targetBlackLevel)) * (targetRange / (sourceWhiteLevel - sourceBlackLevel));
-
- double rp = scaledY + chromaScaleFactor * (Cr - 128) * (1.0 - Rec709_Kr);
- double gp = scaledY - chromaScaleFactor * (Cb - 128) * (1.0 - Rec709_Kb) * Rec709_Kb / Rec709_Kg - chromaScaleFactor * (Cr - 128) * (1.0 - Rec709_Kr) * Rec709_Kr / Rec709_Kg;
- double bp = scaledY + chromaScaleFactor * (Cb - 128) * (1.0 - Rec709_Kb);
-
- auto R = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(rp)), targetWhiteLevel));
- auto G = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(gp)), targetWhiteLevel));
- auto B = (BYTE)std::max(targetBlackLevel, std::min(std::abs(std::round(bp)), targetWhiteLevel));
-
- return D3DCOLOR_ARGB(A, R, G, B);
-}
-
const wchar_t* StreamTypeToName(PES_STREAM_TYPE _Type)
{
switch (_Type) {
@@ -2518,6 +1746,8 @@ const wchar_t* StreamTypeToName(PES_STREAM_TYPE _Type)
return L"MPEG-2";
case VIDEO_STREAM_H264:
return L"H264";
+ case VIDEO_STREAM_HEVC:
+ return L"HEVC";
case AUDIO_STREAM_LPCM:
return L"LPCM";
case AUDIO_STREAM_AC3:
@@ -2648,27 +1878,3 @@ void CorrectComboBoxHeaderWidth(CWnd* pComboBox)
r.right = r.left + ::GetSystemMetrics(SM_CXMENUCHECK) + ::GetSystemMetrics(SM_CXEDGE) + szText.cx + tm.tmAveCharWidth;
pComboBox->MoveWindow(r);
}
-
-CString FindCoverArt(const CString& path, const CString& author)
-{
- if (!path.IsEmpty()) {
- CAtlList<CString> files;
- FindFiles(path + _T("\\*front*.png"), files);
- FindFiles(path + _T("\\*front*.jp*g"), files);
- FindFiles(path + _T("\\*front*.bmp"), files);
- FindFiles(path + _T("\\*cover*.png"), files);
- FindFiles(path + _T("\\*cover*.jp*g"), files);
- FindFiles(path + _T("\\*cover*.bmp"), files);
- FindFiles(path + _T("\\*folder*.png"), files);
- FindFiles(path + _T("\\*folder*.jp*g"), files);
- FindFiles(path + _T("\\*folder*.bmp"), files);
- FindFiles(path + _T("\\*") + author + _T("*.png"), files);
- FindFiles(path + _T("\\*") + author + _T("*.jp*g"), files);
- FindFiles(path + _T("\\*") + author + _T("*.bmp"), files);
-
- if (!files.IsEmpty()) {
- return files.GetHead();
- }
- }
- return _T("");
-}
diff --git a/src/DSUtil/DSUtil.h b/src/DSUtil/DSUtil.h
index 1a3ef0cfe..a66f51da0 100644
--- a/src/DSUtil/DSUtil.h
+++ b/src/DSUtil/DSUtil.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,14 +21,13 @@
#pragma once
-#include <afxstr.h>
-#include <atlpath.h>
-#include "NullRenderers.h"
#include "HdmvClipInfo.h"
-#include "H264Nalu.h"
#include "MediaTypeEx.h"
-#include "vd.h"
#include "text.h"
+#include "vd.h"
+#include "BaseClasses/streams.h"
+#include <atlcoll.h>
+#include <atlpath.h>
#define LCID_NOSUBTITLES -1
@@ -66,6 +65,7 @@ extern CString GetFilterPath(LPCTSTR clsid);
extern CString GetFilterPath(const CLSID& clsid);
extern void CStringToBin(CString str, CAtlArray<BYTE>& data);
extern CString BinToCString(const BYTE* ptr, size_t len);
+extern void FindFiles(CString fn, CAtlList<CString>& files);
enum OpticalDiskType_t {
OpticalDisk_NotFound,
OpticalDisk_Audio,
@@ -103,15 +103,6 @@ extern CStringW UTF8To16(LPCSTR utf8);
extern CStringA UTF16To8(LPCWSTR utf16);
extern CStringW UTF8ToStringW(const char* S);
extern CStringW LocalToStringW(const char* S);
-extern CString ISO6391ToLanguage(LPCSTR code);
-extern CString ISO6392ToLanguage(LPCSTR code);
-extern bool IsISO639Language(LPCSTR code);
-extern CString ISO639XToLanguage(LPCSTR code, bool bCheckForFullLangName = false);
-extern LCID ISO6391ToLcid(LPCSTR code);
-extern LCID ISO6392ToLcid(LPCSTR code);
-extern CString ISO6391To6392(LPCSTR code);
-extern CString ISO6392To6391(LPCSTR code);
-extern CString LanguageToISO6392(LPCTSTR lang);
extern BOOL CFileGetStatus(LPCTSTR lpszFileName, CFileStatus& status);
extern bool DeleteRegKey(LPCTSTR pszKey, LPCTSTR pszSubkey);
extern bool SetRegKeyValue(LPCTSTR pszKey, LPCTSTR pszSubkey, LPCTSTR pszValueName, LPCTSTR pszValue);
@@ -124,10 +115,6 @@ extern CString ReftimeToString(const REFERENCE_TIME& rtVal);
extern CString ReftimeToString2(const REFERENCE_TIME& rtVal);
extern CString DVDtimeToString(const DVD_HMSF_TIMECODE& rtVal, bool bAlwaysShowHours = false);
extern REFERENCE_TIME StringToReftime(LPCTSTR strVal);
-extern COLORREF YCrCbToRGB_Rec601(BYTE Y, BYTE Cr, BYTE Cb, double sourceBlackLevel, double sourceWhiteLevel, double targetBlackLevel, double targetWhiteLevel);
-extern COLORREF YCrCbToRGB_Rec709(BYTE Y, BYTE Cr, BYTE Cb, double sourceBlackLevel, double sourceWhiteLevel, double targetBlackLevel, double targetWhiteLevel);
-extern DWORD YCrCbToRGB_Rec601(BYTE A, BYTE Y, BYTE Cr, BYTE Cb, double sourceBlackLevel, double sourceWhiteLevel, double targetBlackLevel, double targetWhiteLevel);
-extern DWORD YCrCbToRGB_Rec709(BYTE A, BYTE Y, BYTE Cr, BYTE Cb, double sourceBlackLevel, double sourceWhiteLevel, double targetBlackLevel, double targetWhiteLevel);
extern void SetThreadName(DWORD dwThreadID, LPCSTR szThreadName);
extern void CorrectComboListWidth(CComboBox& m_pComboBox);
extern void CorrectComboBoxHeaderWidth(CWnd* pComboBox);
@@ -251,13 +238,14 @@ public:
#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p) = nullptr; } }
#define SAFE_CLOSE_HANDLE(p) { if (p) { if ((p) != INVALID_HANDLE_VALUE) VERIFY(CloseHandle(p)); (p) = nullptr; } }
-#define ResStr(id) CString(MAKEINTRESOURCE(id))
+#define StrRes(id) MAKEINTRESOURCE(id)
+#define ResStr(id) CString(StrRes(id))
-template <typename T> __inline void INITDDSTRUCT(T& dd)
-{
- ZeroMemory(&dd, sizeof(dd));
- dd.dwSize = sizeof(dd);
-}
+#define UNREACHABLE_CODE() \
+ do { \
+ ASSERT(false); \
+ __assume(false); \
+ } while (false)
template <class T>
static CUnknown* WINAPI CreateInstance(LPUNKNOWN lpunk, HRESULT* phr)
@@ -290,11 +278,47 @@ typename std::enable_if<std::is_unsigned<T>::value, T>::type GCD(T a, T b)
template <class T>
typename std::enable_if<std::is_signed<T>::value, T>::type GCD(T a, T b)
{
- typedef std::make_unsigned<T>::type uT;
+ using uT = typename std::make_unsigned<T>::type;
return T(GCD(uT(std::abs(a)), uT(std::abs(b))));
}
+template<class T>
+constexpr typename std::enable_if<std::is_integral<T>::value, bool>::type IsEqual(T a, T b)
+{
+ return a == b;
+}
+
+template<class T>
+constexpr typename std::enable_if<std::is_floating_point<T>::value, bool>::type IsEqual(T a, T b)
+{
+ return std::abs(a - b) < std::numeric_limits<T>::epsilon();
+}
+
+template<class T>
+constexpr typename std::enable_if<std::is_floating_point<T>::value, bool>::type IsNearlyEqual(T a, T b, T epsilon)
+{
+ return std::abs(a - b) < epsilon;
+}
+
+template <class T>
+constexpr typename std::enable_if < std::is_integral<T>::value&& std::is_unsigned<T>::value, int >::type SGN(T n)
+{
+ return T(0) < n;
+}
+
+template <typename T>
+constexpr typename std::enable_if < std::is_integral<T>::value&& std::is_signed<T>::value, int >::type SGN(T n)
+{
+ return (T(0) < n) - (n < T(0));
+}
+
+template <typename T>
+constexpr typename std::enable_if <std::is_floating_point<T>::value, int>::type SGN(T n)
+{
+ return IsEqual(n, T(0)) ? 0 : (n > 0 ? 1 : -1);
+}
+
namespace CStringUtils
{
struct IgnoreCaseLess {
diff --git a/src/DSUtil/DSUtil.vcxproj b/src/DSUtil/DSUtil.vcxproj
index 935609f61..535800065 100644
--- a/src/DSUtil/DSUtil.vcxproj
+++ b/src/DSUtil/DSUtil.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,63 +34,20 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;..\thirdparty\VirtualDub\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;..\thirdparty\VirtualDub\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;..\thirdparty\VirtualDub\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;..\thirdparty\VirtualDub\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Lib>
<AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories Condition="'$(Platform)'=='Win32'">$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories Condition="'$(Platform)'=='x64'">$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemGroup>
@@ -118,6 +60,7 @@
<ClCompile Include="GolombBuffer.cpp" />
<ClCompile Include="H264Nalu.cpp" />
<ClCompile Include="HdmvClipInfo.cpp" />
+ <ClCompile Include="ISOLang.cpp" />
<ClCompile Include="MediaTypeEx.cpp" />
<ClCompile Include="MediaTypes.cpp" />
<ClCompile Include="NullRenderers.cpp" />
@@ -134,6 +77,7 @@
<ClCompile Include="WinAPIUtils.cpp" />
</ItemGroup>
<ItemGroup>
+ <ClInclude Include="ArrayUtils.h" />
<ClInclude Include="AudioTools.h" />
<ClInclude Include="DSMPropertyBag.h" />
<ClInclude Include="DSUtil.h" />
@@ -142,8 +86,10 @@
<ClInclude Include="GolombBuffer.h" />
<ClInclude Include="H264Nalu.h" />
<ClInclude Include="HdmvClipInfo.h" />
+ <ClInclude Include="ISOLang.h" />
<ClInclude Include="MediaTypeEx.h" />
<ClInclude Include="MediaTypes.h" />
+ <ClInclude Include="MhookHelper.h" />
<ClInclude Include="Mpeg2Def.h" />
<ClInclude Include="NullRenderers.h" />
<ClInclude Include="PathUtils.h" />
diff --git a/src/DSUtil/DSUtil.vcxproj.filters b/src/DSUtil/DSUtil.vcxproj.filters
index 5079d7b6f..6ce084b64 100644
--- a/src/DSUtil/DSUtil.vcxproj.filters
+++ b/src/DSUtil/DSUtil.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{7a9014bb-a149-4bb1-be1b-b988a38f79d0}</UniqueIdentifier>
@@ -68,6 +68,9 @@
<ClCompile Include="PathUtils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="ISOLang.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="DSMPropertyBag.h">
@@ -133,5 +136,14 @@
<ClInclude Include="WinapiFunc.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="ArrayUtils.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MhookHelper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ISOLang.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/src/DSUtil/FileVersionInfo.cpp b/src/DSUtil/FileVersionInfo.cpp
index 95e39c8a5..8b5302ac0 100644
--- a/src/DSUtil/FileVersionInfo.cpp
+++ b/src/DSUtil/FileVersionInfo.cpp
@@ -77,7 +77,7 @@ QWORD FileVersionInfo::GetFileVersionNum(LPCTSTR filePath)
CString FileVersionInfo::FormatVersionString(DWORD dwVersionNumberLow, DWORD dwVersionNumberHigh)
{
CString strFileVersion;
- strFileVersion.Format(_T("%u.%u.%u.%u"),
+ strFileVersion.Format(_T("%lu.%lu.%lu.%lu"),
(dwVersionNumberHigh & 0xFFFF0000) >> 16,
(dwVersionNumberHigh & 0x0000FFFF),
(dwVersionNumberLow & 0xFFFF0000) >> 16,
diff --git a/src/DSUtil/FontInstaller.h b/src/DSUtil/FontInstaller.h
index e92c3af15..7cacef9ce 100644
--- a/src/DSUtil/FontInstaller.h
+++ b/src/DSUtil/FontInstaller.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2012, 2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -26,8 +26,8 @@
class CFontInstaller
{
HANDLE(WINAPI* pAddFontMemResourceEx)(PVOID, DWORD, PVOID, DWORD*);
- BOOL (WINAPI* pRemoveFontMemResourceEx)(HANDLE);
int (WINAPI* pAddFontResourceEx)(LPCTSTR, DWORD, PVOID);
+ BOOL (WINAPI* pRemoveFontMemResourceEx)(HANDLE);
BOOL (WINAPI* pRemoveFontResourceEx)(LPCTSTR, DWORD, PVOID);
BOOL (WINAPI* pMoveFileEx)(LPCTSTR, LPCTSTR, DWORD);
diff --git a/src/DSUtil/HdmvClipInfo.cpp b/src/DSUtil/HdmvClipInfo.cpp
index c10d4f29b..0c387e3dc 100644
--- a/src/DSUtil/HdmvClipInfo.cpp
+++ b/src/DSUtil/HdmvClipInfo.cpp
@@ -21,8 +21,8 @@
#include "stdafx.h"
#include "HdmvClipInfo.h"
#include "DSUtil.h"
+#include "ISOLang.h"
-extern LCID ISO6392ToLcid(LPCSTR code);
CHdmvClipInfo::CHdmvClipInfo()
: SequenceInfo_start_address(0)
@@ -133,7 +133,7 @@ HRESULT CHdmvClipInfo::ReadProgramInfo()
ReadBuffer((BYTE*)m_Streams[iStream].m_LanguageCode, 3);
m_Streams[iStream].m_LanguageCode[3] = '\0';
- m_Streams[iStream].m_LCID = ISO6392ToLcid(m_Streams[iStream].m_LanguageCode);
+ m_Streams[iStream].m_LCID = ISOLang::ISO6392ToLcid(m_Streams[iStream].m_LanguageCode);
m_Streams[iStream].m_ChannelLayout = ChannelLayout;
m_Streams[iStream].m_SampleRate = SampleRate;
}
@@ -142,14 +142,14 @@ HRESULT CHdmvClipInfo::ReadProgramInfo()
case INTERACTIVE_GRAPHICS_STREAM: {
ReadBuffer((BYTE*)m_Streams[iStream].m_LanguageCode, 3);
m_Streams[iStream].m_LanguageCode[3] = '\0';
- m_Streams[iStream].m_LCID = ISO6392ToLcid(m_Streams[iStream].m_LanguageCode);
+ m_Streams[iStream].m_LCID = ISOLang::ISO6392ToLcid(m_Streams[iStream].m_LanguageCode);
}
break;
case SUBTITLE_STREAM: {
ReadByte(); // Should this really be here?
ReadBuffer((BYTE*)m_Streams[iStream].m_LanguageCode, 3);
m_Streams[iStream].m_LanguageCode[3] = '\0';
- m_Streams[iStream].m_LCID = ISO6392ToLcid(m_Streams[iStream].m_LanguageCode);
+ m_Streams[iStream].m_LCID = ISOLang::ISO6392ToLcid(m_Streams[iStream].m_LanguageCode);
}
break;
default:
diff --git a/src/DSUtil/HdmvClipInfo.h b/src/DSUtil/HdmvClipInfo.h
index 261c7c4b7..7d8f51738 100644
--- a/src/DSUtil/HdmvClipInfo.h
+++ b/src/DSUtil/HdmvClipInfo.h
@@ -1,5 +1,5 @@
/*
- * (C) 2008-2013 see Authors.txt
+ * (C) 2008-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,7 @@
#pragma once
#include "Mpeg2Def.h"
+#include <atlcoll.h>
enum BDVM_VideoFormat {
BDVM_VideoFormat_Unknown = 0,
diff --git a/src/DSUtil/ISOLang.cpp b/src/DSUtil/ISOLang.cpp
new file mode 100644
index 000000000..a324602f8
--- /dev/null
+++ b/src/DSUtil/ISOLang.cpp
@@ -0,0 +1,762 @@
+/*
+ * (C) 2016-2017 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "ISOLang.h"
+#include "DSUtil.h"
+#include "text.h"
+
+namespace
+{
+ constexpr ISOLang s_isolangs[] = { // TODO : fill LCID !!!
+ // {"Auxiliary Language Association)", "", ""},
+ // {"English-based (Other)", "", ""},
+ // {"French-based (Other)", "", ""},
+ // {"Portuguese-based (Other)", "", ""},
+ { "Abkhazian", "abk", "ab" },
+ { "Achinese", "ace", "" },
+ { "Acoli", "ach", "" },
+ { "Adangme", "ada", "" },
+ { "Adyghe", "ady", "" },
+ { "Afar", "aar", "aa" },
+ { "Afrihili", "afh", "" },
+ { "Afrikaans", "afr", "af", MAKELCID(MAKELANGID(LANG_AFRIKAANS, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Afro-Asiatic (Other)", "afa", "" },
+ { "Akan", "aka", "ak" },
+ { "Akkadian", "akk", "" },
+ { "Albanian", "alb", "sq" },
+ { "Albanian", "sqi", "sq", MAKELCID(MAKELANGID(LANG_ALBANIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Aleut", "ale", "" },
+ { "Algonquian languages", "alg", "" },
+ { "Altaic (Other)", "tut", "" },
+ { "Amharic", "amh", "am" },
+ { "Apache languages", "apa", "" },
+ { "Arabic", "ara", "ar", MAKELCID(MAKELANGID(LANG_ARABIC, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Aragonese", "arg", "an" },
+ { "Aramaic", "arc", "" },
+ { "Arapaho", "arp", "" },
+ { "Araucanian", "arn", "" },
+ { "Arawak", "arw", "" },
+ { "Armenian", "arm", "hy", MAKELCID(MAKELANGID(LANG_ARMENIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Armenian", "hye", "hy", MAKELCID(MAKELANGID(LANG_ARMENIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Artificial (Other)", "art", "" },
+ { "Assamese", "asm", "as", MAKELCID(MAKELANGID(LANG_ASSAMESE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Asturian; Bable", "ast", "at" },
+ { "Athapascan languages", "ath", "" },
+ { "Australian languages", "aus", "" },
+ { "Austronesian (Other)", "map", "" },
+ { "Avaric", "ava", "av" },
+ { "Avestan", "ave", "ae" },
+ { "Awadhi", "awa", "" },
+ { "Aymara", "aym", "ay" },
+ { "Azerbaijani", "aze", "az", MAKELCID(MAKELANGID(LANG_AZERI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Balinese", "ban", "" },
+ { "Baltic (Other)", "bat", "" },
+ { "Baluchi", "bal", "" },
+ { "Bambara", "bam", "bm" },
+ { "Bamileke languages", "bai", "" },
+ { "Banda", "bad", "" },
+ { "Bantu (Other)", "bnt", "" },
+ { "Basa", "bas", "" },
+ { "Bashkir", "bak", "ba", MAKELCID(MAKELANGID(LANG_BASHKIR, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Basque", "baq", "eu", MAKELCID(MAKELANGID(LANG_BASQUE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Basque", "eus", "eu", MAKELCID(MAKELANGID(LANG_BASQUE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Batak (Indonesia)", "btk", "" },
+ { "Beja", "bej", "" },
+ { "Belarusian", "bel", "be", MAKELCID(MAKELANGID(LANG_BELARUSIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Bemba", "bem", "" },
+ { "Bengali", "ben", "bn", MAKELCID(MAKELANGID(LANG_BENGALI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Berber (Other)", "ber", "" },
+ { "Bhojpuri", "bho", "" },
+ { "Bihari", "bih", "bh" },
+ { "Bikol", "bik", "" },
+ { "Bini", "bin", "" },
+ { "Bislama", "bis", "bi" },
+ { "Blin", "byn", "" },
+ { "Bokml, Norwegian; Norwegian Bokml", "nob", "nb" },
+ { "Bosnian", "bos", "bs" },
+ { "Braj", "bra", "" },
+ // unofficial codes for Brazilian Portuguese language
+ { "Portuguese (BR)", "pob", "pb", MAKELCID(MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN), SORT_DEFAULT) },
+ { "Breton", "bre", "br", MAKELCID(MAKELANGID(LANG_BRETON, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Buginese", "bug", "" },
+ { "Bulgarian", "bul", "bg", MAKELCID(MAKELANGID(LANG_BULGARIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Buriat", "bua", "" },
+ { "Burmese", "bur", "my" },
+ { "Burmese", "mya", "my" },
+ { "Caddo", "cad", "" },
+ { "Carib", "car", "" },
+ { "Catalan", "cat", "ca", MAKELCID(MAKELANGID(LANG_CATALAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Caucasian (Other)", "cau", "" },
+ { "Cebuano", "ceb", "" },
+ { "Celtic (Other)", "cel", "" },
+ { "Central American Indian (Other)", "cai", "" },
+ { "Chagatai", "chg", "" },
+ { "Chamic languages", "cmc", "" },
+ { "Chamorro", "cha", "ch" },
+ { "Chechen", "che", "ce" },
+ { "Cherokee", "chr", "" },
+ { "Chewa; Chichewa; Nyanja", "nya", "ny" },
+ { "Cheyenne", "chy", "" },
+ { "Chibcha", "chb", "" },
+ { "Chichewa; Chewa; Nyanja", "nya", "ny" },
+ { "Chinese (traditional)", "zht", "zt" },
+ { "Chinese bilingual", "zhe", "ze" },
+ { "Chinese (simplified)", "chi", "zh", MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Chinese", "zho", "zh" },
+ { "Chinook jargon", "chn", "" },
+ { "Chipewyan", "chp", "" },
+ { "Choctaw", "cho", "" },
+ { "Chuang; Zhuang", "zha", "za" },
+ { "Church Slavic; Old Church Slavonic", "chu", "cu" },
+ { "Church Slavic; Old Church Slavonic", "chu", "cu" },
+ { "Church Slavonic; Old Bulgarian; Church Slavic;", "chu", "cu" },
+ { "Chuukese", "chk", "" },
+ { "Chuvash", "chv", "cv" },
+ { "Classical Newari", "nwc", "" },
+ { "Coptic", "cop", "" },
+ { "Cornish", "cor", "kw" },
+ { "Corsican", "cos", "co", MAKELCID(MAKELANGID(LANG_CORSICAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Cree", "cre", "cr" },
+ { "Creek", "mus", "" },
+ { "Creoles and pidgins (Other)", "crp", "" },
+ { "Creoles and pidgins,", "cpe", "" },
+ { "Creoles and pidgins,", "cpf", "" },
+ { "Creoles and pidgins,", "cpp", "" },
+ { "Crimean Turkish", "crh", "" },
+ { "Croatian", "hrv", "hr", MAKELCID(MAKELANGID(LANG_CROATIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Croatian", "scr", "hr", MAKELCID(MAKELANGID(LANG_CROATIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Cushitic (Other)", "cus", "" },
+ { "Czech", "cze", "cs", MAKELCID(MAKELANGID(LANG_CZECH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Czech", "ces", "cs", MAKELCID(MAKELANGID(LANG_CZECH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Dakota", "dak", "" },
+ { "Danish", "dan", "da", MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Dargwa", "dar", "" },
+ { "Dayak", "day", "" },
+ { "Delaware", "del", "" },
+ { "Dinka", "din", "" },
+ { "Divehi", "div", "dv", MAKELCID(MAKELANGID(LANG_DIVEHI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Dogri", "doi", "" },
+ { "Dogrib", "dgr", "" },
+ { "Dravidian (Other)", "dra", "" },
+ { "Duala", "dua", "" },
+ { "Dutch, Middle (ca. 1050-1350)", "dum", "" },
+ { "Dutch; Flemish", "dut", "nl", MAKELCID(MAKELANGID(LANG_DUTCH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Dutch; Flemish", "nld", "nl", MAKELCID(MAKELANGID(LANG_DUTCH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Dyula", "dyu", "" },
+ { "Dzongkha", "dzo", "dz" },
+ { "Efik", "efi", "" },
+ { "Egyptian (Ancient)", "egy", "" },
+ { "Ekajuk", "eka", "" },
+ { "Elamite", "elx", "" },
+ { "English", "eng", "en", MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "English, Middle (1100-1500)", "enm", "" },
+ { "English, Old (ca.450-1100)", "ang", "" },
+ { "Erzya", "myv", "" },
+ { "Extremaduran", "ext", "ex" },
+ { "Esperanto", "epo", "eo" },
+ { "Estonian", "est", "et", MAKELCID(MAKELANGID(LANG_ESTONIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Ewe", "ewe", "ee" },
+ { "Ewondo", "ewo", "" },
+ { "Fang", "fan", "" },
+ { "Fanti", "fat", "" },
+ { "Faroese", "fao", "fo", MAKELCID(MAKELANGID(LANG_FAEROESE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Fijian", "fij", "fj" },
+ { "Finnish", "fin", "fi", MAKELCID(MAKELANGID(LANG_FINNISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Finno-Ugrian (Other)", "fiu", "" },
+ { "Flemish; Dutch", "dut", "nl" },
+ { "Flemish; Dutch", "nld", "nl" },
+ { "Fon", "fon", "" },
+ { "French", "fre", "fr", MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "French", "fra*", "fr", MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "French", "fra", "fr", MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "French, Middle (ca.1400-1600)", "frm", "" },
+ { "French, Old (842-ca.1400)", "fro", "" },
+ { "Frisian", "fry", "fy", MAKELCID(MAKELANGID(LANG_FRISIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Friulian", "fur", "" },
+ { "Fulah", "ful", "ff" },
+ { "Ga", "gaa", "" },
+ { "Gaelic; Scottish Gaelic", "gla", "gd", MAKELCID(MAKELANGID(LANG_GALICIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Galician", "glg", "gl" },
+ { "Ganda", "lug", "lg" },
+ { "Gayo", "gay", "" },
+ { "Gbaya", "gba", "" },
+ { "Geez", "gez", "" },
+ { "Georgian", "geo", "ka", MAKELCID(MAKELANGID(LANG_GEORGIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Georgian", "kat", "ka", MAKELCID(MAKELANGID(LANG_GEORGIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "German", "ger", "de", MAKELCID(MAKELANGID(LANG_GERMAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "German", "deu", "de", MAKELCID(MAKELANGID(LANG_GERMAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "German, Low; Saxon, Low; Low German; Low Saxon", "nds", "" },
+ { "German, Middle High (ca.1050-1500)", "gmh", "" },
+ { "German, Old High (ca.750-1050)", "goh", "" },
+ { "Germanic (Other)", "gem", "" },
+ { "Gikuyu; Kikuyu", "kik", "ki" },
+ { "Gilbertese", "gil", "" },
+ { "Gondi", "gon", "" },
+ { "Gorontalo", "gor", "" },
+ { "Gothic", "got", "" },
+ { "Grebo", "grb", "" },
+ { "Greek", "ell", "el", MAKELCID(MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Greek", "gre", "el", MAKELCID(MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Greek, Ancient (to 1453)", "grc", "", MAKELCID(MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Greenlandic; Kalaallisut", "kal", "kl", MAKELCID(MAKELANGID(LANG_GREENLANDIC, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Guarani", "grn", "gn" },
+ { "Gujarati", "guj", "gu", MAKELCID(MAKELANGID(LANG_GUJARATI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Gwichin", "gwi", "" },
+ { "Haida", "hai", "" },
+ { "Haitian", "hat", "ht" },
+ { "Hausa", "hau", "ha", MAKELCID(MAKELANGID(LANG_HAUSA, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Hawaiian", "haw", "" },
+ { "Hebrew", "heb", "he", MAKELCID(MAKELANGID(LANG_HEBREW, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Herero", "her", "hz" },
+ { "Hiligaynon", "hil", "" },
+ { "Himachali", "him", "" },
+ { "Hindi", "hin", "hi", MAKELCID(MAKELANGID(LANG_HINDI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Hiri Motu", "hmo", "ho" },
+ { "Hittite", "hit", "" },
+ { "Hmong", "hmn", "" },
+ { "Hungarian", "hun", "hu", MAKELCID(MAKELANGID(LANG_HUNGARIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Hupa", "hup", "" },
+ { "Iban", "iba", "" },
+ { "Icelandic", "ice", "is", MAKELCID(MAKELANGID(LANG_ICELANDIC, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Icelandic", "isl", "is", MAKELCID(MAKELANGID(LANG_ICELANDIC, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Ido", "ido", "io" },
+ { "Igbo", "ibo", "ig", MAKELCID(MAKELANGID(LANG_IGBO, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Ijo", "ijo", "" },
+ { "Iloko", "ilo", "" },
+ { "Inari Sami", "smn", "" },
+ { "Indic (Other)", "inc", "" },
+ { "Indo-European (Other)", "ine", "" },
+ { "Indonesian", "ind", "id", MAKELCID(MAKELANGID(LANG_INDONESIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Ingush", "inh", "" },
+ { "Interlingua (International", "ina", "ia" },
+ { "Interlingue", "ile", "ie" },
+ { "Inuktitut", "iku", "iu", MAKELCID(MAKELANGID(LANG_INUKTITUT, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Inupiaq", "ipk", "ik" },
+ { "Iranian (Other)", "ira", "" },
+ { "Irish", "gle", "ga", MAKELCID(MAKELANGID(LANG_IRISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Irish, Middle (900-1200)", "mga", "", MAKELCID(MAKELANGID(LANG_IRISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Irish, Old (to 900)", "sga", "", MAKELCID(MAKELANGID(LANG_IRISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Iroquoian languages", "iro", "" },
+ { "Italian", "ita", "it", MAKELCID(MAKELANGID(LANG_ITALIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Japanese", "jpn", "ja", MAKELCID(MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Javanese", "jav", "jv" },
+ { "Judeo-Arabic", "jrb", "" },
+ { "Judeo-Persian", "jpr", "" },
+ { "Kabardian", "kbd", "" },
+ { "Kabyle", "kab", "" },
+ { "Kachin", "kac", "" },
+ { "Kalaallisut; Greenlandic", "kal", "kl" },
+ { "Kalmyk", "xal", "" },
+ { "Kamba", "kam", "" },
+ { "Kannada", "kan", "kn", MAKELCID(MAKELANGID(LANG_KANNADA, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Kanuri", "kau", "kr" },
+ { "Kara-Kalpak", "kaa", "" },
+ { "Karachay-Balkar", "krc", "" },
+ { "Karen", "kar", "" },
+ { "Kashmiri", "kas", "ks", MAKELCID(MAKELANGID(LANG_KASHMIRI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Kashubian", "csb", "" },
+ { "Kawi", "kaw", "" },
+ { "Kazakh", "kaz", "kk", MAKELCID(MAKELANGID(LANG_KAZAK, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Khasi", "kha", "" },
+ { "Khmer", "khm", "km", MAKELCID(MAKELANGID(LANG_KHMER, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Khoisan (Other)", "khi", "" },
+ { "Khotanese", "kho", "" },
+ { "Kikuyu; Gikuyu", "kik", "ki" },
+ { "Kimbundu", "kmb", "" },
+ { "Kinyarwanda", "kin", "rw", MAKELCID(MAKELANGID(LANG_KINYARWANDA, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Kirghiz", "kir", "ky" },
+ { "Klingon", "tlh", "" },
+ { "Komi", "kom", "kv" },
+ { "Kongo", "kon", "kg" },
+ { "Konkani", "kok", "", MAKELCID(MAKELANGID(LANG_KONKANI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Korean", "kor", "ko", MAKELCID(MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Kosraean", "kos", "" },
+ { "Kpelle", "kpe", "" },
+ { "Kru", "kro", "" },
+ { "Kuanyama; Kwanyama", "kua", "kj" },
+ { "Kumyk", "kum", "" },
+ { "Kurdish", "kur", "ku" },
+ { "Kurukh", "kru", "" },
+ { "Kutenai", "kut", "" },
+ { "Kwanyama, Kuanyama", "kua", "kj" },
+ { "Ladino", "lad", "" },
+ { "Lahnda", "lah", "" },
+ { "Lamba", "lam", "" },
+ { "Lao", "lao", "lo", MAKELCID(MAKELANGID(LANG_LAO, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Latin", "lat", "la" },
+ { "Latvian", "lav", "lv", MAKELCID(MAKELANGID(LANG_LATVIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Lezghian", "lez", "" },
+ { "Limburgan; Limburger; Limburgish", "lim", "li" },
+ { "Limburger; Limburgan; Limburgish;", "lim", "li" },
+ { "Limburgish; Limburger; Limburgan", "lim", "li" },
+ { "Lingala", "lin", "ln" },
+ { "Lithuanian", "lit", "lt", MAKELCID(MAKELANGID(LANG_LITHUANIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Lojban", "jbo", "" },
+ { "Low German; Low Saxon; German, Low; Saxon, Low", "nds", "" },
+ { "Low Saxon; Low German; Saxon, Low; German, Low", "nds", "" },
+ { "Lower Sorbian", "dsb", "" },
+ { "Lozi", "loz", "" },
+ { "Luba-Katanga", "lub", "lu" },
+ { "Luba-Lulua", "lua", "" },
+ { "Luiseno", "lui", "" },
+ { "Lule Sami", "smj", "" },
+ { "Lunda", "lun", "" },
+ { "Luo (Kenya and Tanzania)", "luo", "" },
+ { "Lushai", "lus", "" },
+ { "Luxembourgish", "ltz", "lb", MAKELCID(MAKELANGID(LANG_LUXEMBOURGISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Macedonian", "mac", "mk", MAKELCID(MAKELANGID(LANG_MACEDONIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Macedonian", "mkd", "mk", MAKELCID(MAKELANGID(LANG_MACEDONIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Madurese", "mad", "" },
+ { "Magahi", "mag", "" },
+ { "Maithili", "mai", "" },
+ { "Makasar", "mak", "" },
+ { "Malagasy", "mlg", "mg" },
+ { "Malay", "may", "ms", MAKELCID(MAKELANGID(LANG_MALAY, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Malay", "msa", "ms", MAKELCID(MAKELANGID(LANG_MALAY, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Malayalam", "mal", "ml", MAKELCID(MAKELANGID(LANG_MALAYALAM, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Maltese", "mlt", "mt", MAKELCID(MAKELANGID(LANG_MALTESE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Manchu", "mnc", "" },
+ { "Mandar", "mdr", "" },
+ { "Mandingo", "man", "" },
+ { "Manipuri", "mni", "ma", MAKELCID(MAKELANGID(LANG_MANIPURI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Manobo languages", "mno", "" },
+ { "Manx", "glv", "gv" },
+ { "Maori", "mao", "mi", MAKELCID(MAKELANGID(LANG_MAORI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Maori", "mri", "mi", MAKELCID(MAKELANGID(LANG_MAORI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Marathi", "mar", "mr", MAKELCID(MAKELANGID(LANG_MARATHI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Mari", "chm", "" },
+ { "Marshallese", "mah", "mh" },
+ { "Marwari", "mwr", "" },
+ { "Masai", "mas", "" },
+ { "Mayan languages", "myn", "" },
+ { "Mende", "men", "" },
+ { "Micmac", "mic", "" },
+ { "Minangkabau", "min", "" },
+ { "Miscellaneous languages", "mis", "" },
+ { "Mohawk", "moh", "", MAKELCID(MAKELANGID(LANG_MOHAWK, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Moksha", "mdf", "" },
+ { "Moldavian", "mol", "mo" },
+ { "Mon-Khmer (Other)", "mkh", "" },
+ { "Mongo", "lol", "" },
+ { "Mongolian", "mon", "mn", MAKELCID(MAKELANGID(LANG_MONGOLIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Montenegrin", "mne", "me" },
+ { "Mossi", "mos", "" },
+ { "Multiple languages", "mul", "" },
+ { "Munda languages", "mun", "" },
+ { "Nahuatl", "nah", "" },
+ { "Nauru", "nau", "na" },
+ { "Navaho, Navajo", "nav", "nv" },
+ { "Navajo; Navaho", "nav", "nv" },
+ { "Ndebele, North", "nde", "nd" },
+ { "Ndebele, South", "nbl", "nr" },
+ { "Ndonga", "ndo", "ng" },
+ { "Neapolitan", "nap", "" },
+ { "Nepali", "nep", "ne", MAKELCID(MAKELANGID(LANG_NEPALI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Newari", "new", "" },
+ { "Nias", "nia", "" },
+ { "Niger-Kordofanian (Other)", "nic", "" },
+ { "Nilo-Saharan (Other)", "ssa", "" },
+ { "Niuean", "niu", "" },
+ { "Nogai", "nog", "" },
+ { "Norse, Old", "non", "" },
+ { "North American Indian (Other)", "nai", "" },
+ { "North Ndebele", "nde", "nd" },
+ { "Northern Sami", "sme", "se" },
+ { "Norwegian Bokml; Bokml, Norwegian", "nob", "nb", MAKELCID(MAKELANGID(LANG_NORWEGIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Norwegian Nynorsk; Nynorsk, Norwegian", "nno", "nn", MAKELCID(MAKELANGID(LANG_NORWEGIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Norwegian", "nor", "no", MAKELCID(MAKELANGID(LANG_NORWEGIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Nubian languages", "nub", "" },
+ { "Nyamwezi", "nym", "" },
+ { "Nyanja; Chichewa; Chewa", "nya", "ny" },
+ { "Nyankole", "nyn", "" },
+ { "Nynorsk, Norwegian; Norwegian Nynorsk", "nno", "nn" },
+ { "Nyoro", "nyo", "" },
+ { "Nzima", "nzi", "" },
+ { "Occitan (post 1500},; Provenal", "oci", "oc", MAKELCID(MAKELANGID(LANG_OCCITAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Ojibwa", "oji", "oj" },
+ { "Old Bulgarian; Old Slavonic; Church Slavonic;", "chu", "cu" },
+ { "Old Church Slavonic; Old Slavonic; ", "chu", "cu" },
+ { "Old Slavonic; Church Slavonic; Old Bulgarian;", "chu", "cu" },
+ { "Oriya", "ori", "or" },
+ { "Oromo", "orm", "om" },
+ { "Osage", "osa", "" },
+ { "Ossetian; Ossetic", "oss", "os" },
+ { "Ossetic; Ossetian", "oss", "os" },
+ { "Otomian languages", "oto", "" },
+ { "Pahlavi", "pal", "" },
+ { "Palauan", "pau", "" },
+ { "Pali", "pli", "pi" },
+ { "Pampanga", "pam", "" },
+ { "Pangasinan", "pag", "" },
+ { "Panjabi", "pan", "pa" },
+ { "Papiamento", "pap", "" },
+ { "Papuan (Other)", "paa", "" },
+ { "Persian", "per", "fa", MAKELCID(MAKELANGID(LANG_PERSIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Persian", "fas", "fa", MAKELCID(MAKELANGID(LANG_PERSIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Persian, Old (ca.600-400 B.C.)", "peo", "" },
+ { "Philippine (Other)", "phi", "" },
+ { "Phoenician", "phn", "" },
+ { "Pohnpeian", "pon", "" },
+ { "Polish", "pol", "pl", MAKELCID(MAKELANGID(LANG_POLISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Portuguese", "por", "pt", MAKELCID(MAKELANGID(LANG_PORTUGUESE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Mozambican Portuguese", "pom", "pm" }, // Custom codes compatible with OpenSubtitles database
+ { "Prakrit languages", "pra", "" },
+ { "Provenal, Old (to 1500)", "pro", "" },
+ { "Provenal; Occitan (post 1500)", "oci", "oc" },
+ { "Pushto", "pus", "ps" },
+ { "Quechua", "que", "qu", MAKELCID(MAKELANGID(LANG_QUECHUA, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Raeto-Romance", "roh", "rm" },
+ { "Rajasthani", "raj", "" },
+ { "Rapanui", "rap", "" },
+ { "Rarotongan", "rar", "" },
+ { "Reserved for local use", "qaa-qtz", "" },
+ { "Romance (Other)", "roa", "" },
+ { "Romanian", "rum", "ro", MAKELCID(MAKELANGID(LANG_ROMANIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Romanian", "ron", "ro", MAKELCID(MAKELANGID(LANG_ROMANIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Romany", "rom", "" },
+ { "Rundi", "run", "rn" },
+ { "Russian", "rus", "ru", MAKELCID(MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Salishan languages", "sal", "" },
+ { "Samaritan Aramaic", "sam", "" },
+ { "Sami languages (Other)", "smi", "" },
+ { "Samoan", "smo", "sm" },
+ { "Sandawe", "sad", "" },
+ { "Sango", "sag", "sg" },
+ { "Sanskrit", "san", "sa", MAKELCID(MAKELANGID(LANG_SANSKRIT, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Santali", "sat", "" },
+ { "Sardinian", "srd", "sc" },
+ { "Sasak", "sas", "" },
+ { "Saxon, Low; German, Low; Low Saxon; Low German", "nds", "" },
+ { "Scots", "sco", "" },
+ { "Scottish Gaelic; Gaelic", "gla", "gd" },
+ { "Selkup", "sel", "" },
+ { "Semitic (Other)", "sem", "" },
+ { "Serbian", "scc", "sr", MAKELCID(LANG_SERBIAN_NEUTRAL, SORT_DEFAULT) },
+ { "Serbian", "srp", "sr", MAKELCID(LANG_SERBIAN_NEUTRAL, SORT_DEFAULT) },
+ { "Serer", "srr", "" },
+ { "Shan", "shn", "" },
+ { "Shona", "sna", "sn" },
+ { "Sichuan Yi", "iii", "ii" },
+ { "Sidamo", "sid", "" },
+ { "Sign languages", "sgn", "" },
+ { "Siksika", "bla", "" },
+ { "Sindhi", "snd", "sd", MAKELCID(MAKELANGID(LANG_SINDHI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Sinhalese", "sin", "si", MAKELCID(MAKELANGID(LANG_SINHALESE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Sino-Tibetan (Other)", "sit", "" },
+ { "Siouan languages", "sio", "" },
+ { "Skolt Sami", "sms", "" },
+ { "Slave (Athapascan)", "den", "" },
+ { "Slavic (Other)", "sla", "" },
+ { "Slovak", "slo", "sk", MAKELCID(MAKELANGID(LANG_SLOVAK, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Slovak", "slk", "sk", MAKELCID(MAKELANGID(LANG_SLOVAK, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Slovenian", "slv", "sl", MAKELCID(MAKELANGID(LANG_SLOVENIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Sogdian", "sog", "" },
+ { "Somali", "som", "so" },
+ { "Songhai", "son", "" },
+ { "Soninke", "snk", "" },
+ { "Sorbian languages", "wen", "" },
+ { "Sotho, Northern", "nso", "", MAKELCID(MAKELANGID(LANG_SOTHO, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Sotho, Southern", "sot", "st", MAKELCID(MAKELANGID(LANG_SOTHO, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "South American Indian (Other)", "sai", "" },
+ { "South Ndebele", "nbl", "nr" },
+ { "Southern Sami", "sma", "" },
+ { "Spanish; Castilian", "spa", "es", MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Sukuma", "suk", "" },
+ { "Sumerian", "sux", "" },
+ { "Sundanese", "sun", "su" },
+ { "Susu", "sus", "" },
+ { "Swahili", "swa", "sw", MAKELCID(MAKELANGID(LANG_SWAHILI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Swati", "ssw", "ss" },
+ { "Swedish", "swe", "sv", MAKELCID(MAKELANGID(LANG_SWEDISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Syriac", "syr", "sy", MAKELCID(MAKELANGID(LANG_SYRIAC, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Tagalog", "tgl", "tl" },
+ { "Tahitian", "tah", "ty" },
+ { "Tai (Other)", "tai", "" },
+ { "Tajik", "tgk", "tg", MAKELCID(MAKELANGID(LANG_TAJIK, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Tamashek", "tmh", "" },
+ { "Tamil", "tam", "ta", MAKELCID(MAKELANGID(LANG_TAMIL, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Tatar", "tat", "tt", MAKELCID(MAKELANGID(LANG_TATAR, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Telugu", "tel", "te", MAKELCID(MAKELANGID(LANG_TELUGU, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Tereno", "ter", "" },
+ { "Tetum", "tet", "" },
+ { "Thai", "tha", "th", MAKELCID(MAKELANGID(LANG_THAI, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Tibetan", "tib", "bo", MAKELCID(MAKELANGID(LANG_TIBETAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Tibetan", "bod", "bo", MAKELCID(MAKELANGID(LANG_TIBETAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Tigre", "tig", "" },
+ { "Tigrinya", "tir", "ti", MAKELCID(MAKELANGID(LANG_TIGRIGNA, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Timne", "tem", "" },
+ { "Tiv", "tiv", "" },
+ { "Tlingit", "tli", "" },
+ { "Tok Pisin", "tpi", "" },
+ { "Tokelau", "tkl", "" },
+ { "Tonga (Nyasa)", "tog", "" },
+ { "Tonga (Tonga Islands)", "ton", "to" },
+ { "Tsimshian", "tsi", "" },
+ { "Tsonga", "tso", "ts" },
+ { "Tswana", "tsn", "tn", MAKELCID(MAKELANGID(LANG_TSWANA, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Tumbuka", "tum", "" },
+ { "Tupi languages", "tup", "" },
+ { "Turkish", "tur", "tr", MAKELCID(MAKELANGID(LANG_TURKISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Turkish, Ottoman (1500-1928)", "ota", "", MAKELCID(MAKELANGID(LANG_TURKISH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Turkmen", "tuk", "tk", MAKELCID(MAKELANGID(LANG_TURKMEN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Tuvalu", "tvl", "" },
+ { "Tuvinian", "tyv", "" },
+ { "Twi", "twi", "tw" },
+ { "Udmurt", "udm", "" },
+ { "Ugaritic", "uga", "" },
+ { "Uighur", "uig", "ug", MAKELCID(MAKELANGID(LANG_UIGHUR, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Ukrainian", "ukr", "uk", MAKELCID(MAKELANGID(LANG_UKRAINIAN, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Umbundu", "umb", "" },
+ { "Undetermined", "und", "" },
+ { "Upper Sorbian", "hsb", "" },
+ { "Urdu", "urd", "ur", MAKELCID(MAKELANGID(LANG_URDU, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Uzbek", "uzb", "uz", MAKELCID(MAKELANGID(LANG_UZBEK, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Vai", "vai", "" },
+ { "Venda", "ven", "ve" },
+ { "Vietnamese", "vie", "vi", MAKELCID(MAKELANGID(LANG_VIETNAMESE, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Volapuk", "vol", "vo" },
+ { "Votic", "vot", "" },
+ { "Wakashan languages", "wak", "" },
+ { "Walamo", "wal", "" },
+ { "Walloon", "wln", "wa" },
+ { "Waray", "war", "" },
+ { "Washo", "was", "" },
+ { "Welsh", "wel", "cy", MAKELCID(MAKELANGID(LANG_WELSH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Welsh", "cym", "cy", MAKELCID(MAKELANGID(LANG_WELSH, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Wolof", "wol", "wo", MAKELCID(MAKELANGID(LANG_WOLOF, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Xhosa", "xho", "xh", MAKELCID(MAKELANGID(LANG_XHOSA, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Yakut", "sah", "", MAKELCID(MAKELANGID(LANG_YAKUT, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Yao", "yao", "" },
+ { "Yapese", "yap", "" },
+ { "Yiddish", "yid", "yi" },
+ { "Yoruba", "yor", "yo", MAKELCID(MAKELANGID(LANG_YORUBA, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Yupik languages", "ypk", "" },
+ { "Zande", "znd", "" },
+ { "Zapotec", "zap", "" },
+ { "Zenaga", "zen", "" },
+ { "Zhuang; Chuang", "zha", "za" },
+ { "Zulu", "zul", "zu", MAKELCID(MAKELANGID(LANG_ZULU, SUBLANG_DEFAULT), SORT_DEFAULT) },
+ { "Zuni", "zun", "" },
+ { "", "", "" },
+ { "No subtitles", "---", "", (LCID)LCID_NOSUBTITLES },
+ };
+};
+
+CString ISOLang::ISO6391ToLanguage(LPCSTR code)
+{
+ CHAR tmp[2 + 1];
+ strncpy_s(tmp, code, 2);
+ tmp[2] = 0;
+ _strlwr_s(tmp);
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ if (!strcmp(s_isolangs[i].iso6391, tmp)) {
+ CString ret = CString(CStringA(s_isolangs[i].name));
+ int k = ret.Find(';');
+ if (k > 0) {
+ ret = ret.Left(k);
+ }
+ return ret;
+ }
+ }
+ return _T("");
+}
+
+CString ISOLang::ISO6392ToLanguage(LPCSTR code)
+{
+ CHAR tmp[3 + 1];
+ strncpy_s(tmp, code, 3);
+ tmp[3] = 0;
+ _strlwr_s(tmp);
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ if (!strcmp(s_isolangs[i].iso6392, tmp)) {
+ CString ret = CString(CStringA(s_isolangs[i].name));
+ int k = ret.Find(';');
+ if (k > 0) {
+ ret = ret.Left(k);
+ }
+ return ret;
+ }
+ }
+ return CString(code);
+}
+
+bool ISOLang::IsISO639Language(LPCSTR code)
+{
+ size_t nLen = strlen(code) + 1;
+ LPSTR tmp = DEBUG_NEW CHAR[nLen];
+ strncpy_s(tmp, nLen, code, nLen);
+ _strlwr_s(tmp, nLen);
+ tmp[0] = (CHAR)toupper(tmp[0]);
+
+ bool bFound = false;
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ if (!strcmp(s_isolangs[i].name, tmp)) {
+ bFound = true;
+ break;
+ }
+ }
+
+ delete[] tmp;
+
+ return bFound;
+}
+
+CString ISOLang::ISO639XToLanguage(LPCSTR code, bool bCheckForFullLangName /*= false*/)
+{
+ CString lang;
+
+ switch (size_t nLen = strlen(code)) {
+ case 2:
+ lang = ISO6391ToLanguage(code);
+ break;
+ case 3:
+ lang = ISO6392ToLanguage(code);
+ if (lang == code) { // When it can't find a match, ISO6392ToLanguage returns the input string
+ lang.Empty();
+ }
+ break;
+ default:
+ if (bCheckForFullLangName && nLen > 3) {
+ if (IsISO639Language(code)) {
+ lang = code;
+ }
+ }
+ }
+
+ return lang;
+}
+
+LCID ISOLang::ISO6391ToLcid(LPCSTR code)
+{
+ CHAR tmp[2 + 1];
+ strncpy_s(tmp, code, 2);
+ tmp[2] = 0;
+ _strlwr_s(tmp);
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ if (!strcmp(s_isolangs[i].iso6391, tmp)) {
+ return s_isolangs[i].lcid;
+ }
+ }
+ return 0;
+}
+
+LCID ISOLang::ISO6392ToLcid(LPCSTR code)
+{
+ CHAR tmp[3 + 1];
+ strncpy_s(tmp, code, 3);
+ tmp[3] = 0;
+ _strlwr_s(tmp);
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ if (!strcmp(s_isolangs[i].iso6392, tmp)) {
+ return s_isolangs[i].lcid;
+ }
+ }
+ return 0;
+}
+
+CStringA ISOLang::ISO6391To6392(LPCSTR code)
+{
+ CHAR tmp[2 + 1];
+ strncpy_s(tmp, code, 2);
+ tmp[2] = 0;
+ _strlwr_s(tmp);
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ if (!strcmp(s_isolangs[i].iso6391, tmp)) {
+ return CStringA(s_isolangs[i].iso6392);
+ }
+ }
+ return "";
+}
+
+CString ISOLang::ISO6392To6391(LPCSTR code)
+{
+ CHAR tmp[3 + 1];
+ strncpy_s(tmp, code, 3);
+ tmp[3] = 0;
+ _strlwr_s(tmp);
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ if (!strcmp(s_isolangs[i].iso6392, tmp)) {
+ return CString(s_isolangs[i].iso6391);
+ }
+ }
+ return _T("");
+}
+
+CString ISOLang::LanguageToISO6392(LPCTSTR lang)
+{
+ CString str = lang;
+ str.MakeLower();
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ CAtlList<CString> sl;
+ Explode(CString(s_isolangs[i].name), sl, _T(';'));
+ POSITION pos = sl.GetHeadPosition();
+ while (pos) {
+ if (!str.CompareNoCase(sl.GetNext(pos))) {
+ return CString(s_isolangs[i].iso6392);
+ }
+ }
+ }
+ return _T("");
+}
+
+ISOLang ISOLang::ISO6391ToISOLang(LPCSTR code)
+{
+ CHAR tmp[2 + 1];
+ strncpy_s(tmp, code, 2);
+ tmp[2] = 0;
+ _strlwr_s(tmp);
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ if (!strcmp(s_isolangs[i].iso6391, tmp)) {
+ return s_isolangs[i];
+ }
+ }
+ return ISOLang();
+}
+
+ISOLang ISOLang::ISO6392ToISOLang(LPCSTR code)
+{
+ CHAR tmp[3 + 1];
+ strncpy_s(tmp, code, 3);
+ tmp[3] = 0;
+ _strlwr_s(tmp);
+ for (size_t i = 0, cnt = _countof(s_isolangs); i < cnt; i++) {
+ if (!strcmp(s_isolangs[i].iso6392, tmp)) {
+ return s_isolangs[i];
+ }
+ }
+ return ISOLang();
+}
+
+ISOLang ISOLang::ISO639XToISOLang(LPCSTR code)
+{
+ ISOLang lang;
+
+ switch (strlen(code)) {
+ case 2:
+ lang = ISO6391ToISOLang(code);
+ break;
+ case 3:
+ lang = ISO6392ToISOLang(code);
+ break;
+ }
+
+ return lang;
+}
diff --git a/src/DSUtil/ISOLang.h b/src/DSUtil/ISOLang.h
new file mode 100644
index 000000000..6c701575c
--- /dev/null
+++ b/src/DSUtil/ISOLang.h
@@ -0,0 +1,58 @@
+/*
+ * (C) 2016-2017 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include <afxstr.h>
+
+template<typename StringType>
+struct ISOLangT {
+ StringType name, iso6392, iso6391;
+ LCID lcid;
+
+ constexpr ISOLangT(StringType name = nullptr, StringType iso6392 = nullptr, StringType iso6391 = nullptr, LCID lcid = 0)
+ : name(name), iso6392(iso6392), iso6391(iso6391), lcid(lcid)
+ {};
+
+ template<typename StringType2>
+ constexpr ISOLangT(const ISOLangT<StringType2>& isoLang)
+ : name(isoLang.name), iso6392(isoLang.iso6392), iso6391(isoLang.iso6391), lcid(isoLang.lcid)
+ {};
+
+ template<typename StringType2>
+ ISOLangT& operator=(const ISOLangT<StringType2>& isoLang) = delete;
+};
+
+struct ISOLang : public ISOLangT<LPCSTR> {
+ using ISOLangT::ISOLangT;
+
+ static CString ISO6391ToLanguage(LPCSTR code);
+ static CString ISO6392ToLanguage(LPCSTR code);
+ static bool IsISO639Language(LPCSTR code);
+ static CString ISO639XToLanguage(LPCSTR code, bool bCheckForFullLangName = false);
+ static LCID ISO6391ToLcid(LPCSTR code);
+ static LCID ISO6392ToLcid(LPCSTR code);
+ static CStringA ISO6391To6392(LPCSTR code);
+ static CString ISO6392To6391(LPCSTR code);
+ static CString LanguageToISO6392(LPCTSTR lang);
+ static ISOLang ISO6391ToISOLang(LPCSTR code);
+ static ISOLang ISO6392ToISOLang(LPCSTR code);
+ static ISOLang ISO639XToISOLang(LPCSTR code);
+};
diff --git a/src/DSUtil/MediaTypeEx.cpp b/src/DSUtil/MediaTypeEx.cpp
index 06dcce0ae..53d864f42 100644
--- a/src/DSUtil/MediaTypeEx.cpp
+++ b/src/DSUtil/MediaTypeEx.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,7 +25,6 @@
#include "MediaTypeEx.h"
#include <MMReg.h>
-#include <InitGuid.h>
#include "moreuuids.h"
#pragma pack(push, 1)
@@ -61,7 +60,7 @@ CString CMediaTypeEx::ToString(IPin* pPin)
packing = _T("MPEG2 PES");
}
- if (majortype == MEDIATYPE_Video) {
+ if (majortype == MEDIATYPE_Video || subtype == MEDIASUBTYPE_MPEG2_VIDEO) {
type = _T("Video");
BITMAPINFOHEADER bih;
@@ -121,7 +120,7 @@ CString CMediaTypeEx::ToString(IPin* pPin)
type = _T("Subtitle");
codec = _T("DVD Subpicture");
}
- } else if (majortype == MEDIATYPE_Audio) {
+ } else if (majortype == MEDIATYPE_Audio || subtype == MEDIASUBTYPE_DOLBY_AC3) {
type = _T("Audio");
if (formattype == FORMAT_WaveFormatEx) {
@@ -173,7 +172,7 @@ CString CMediaTypeEx::ToString(IPin* pPin)
}
} else if (majortype == MEDIATYPE_Text) {
type = _T("Text");
- } else if (majortype == MEDIATYPE_Subtitle) {
+ } else if (majortype == MEDIATYPE_Subtitle || subtype == MEDIASUBTYPE_DVD_SUBPICTURE) {
type = _T("Subtitle");
codec = GetSubtitleCodecName(subtype);
} else {
@@ -262,7 +261,7 @@ CString CMediaTypeEx::GetVideoCodecName(const GUID& subtype, DWORD biCompression
for (ptrdiff_t i = 0; i < 4; i++) {
if (b[i] >= 'a' && b[i] <= 'z') {
- b[i] = toupper(b[i]);
+ b[i] = (BYTE)toupper(b[i]);
}
}
@@ -443,7 +442,8 @@ CString CMediaTypeEx::GetSubtitleCodecName(const GUID& subtype)
names[MEDIASUBTYPE_ASS2] = _T("Advanced SubStation Alpha");
names[MEDIASUBTYPE_USF] = _T("Universal Subtitle Format");
names[MEDIASUBTYPE_VOBSUB] = _T("VobSub");
- // names[''] = _T("");
+ names[MEDIASUBTYPE_DVB_SUBTITLES] = _T("DVB Subtitles");
+ names[MEDIASUBTYPE_DVD_SUBPICTURE] = _T("DVD Subtitles");
}
if (names.Lookup(subtype, str)) {
@@ -468,11 +468,11 @@ void CMediaTypeEx::Dump(CAtlList<CString>& sl)
sl.AddTail(ToString() + _T("\n"));
sl.AddTail(_T("AM_MEDIA_TYPE: "));
- str.Format(_T("majortype: %s %s"), CString(GuidNames[majortype]), major);
+ str.Format(_T("majortype: %S %s"), GuidNames[majortype], major);
sl.AddTail(str);
- str.Format(_T("subtype: %s %s"), CString(GuidNames[subtype]), sub);
+ str.Format(_T("subtype: %S %s"), GuidNames[subtype], sub);
sl.AddTail(str);
- str.Format(_T("formattype: %s %s"), CString(GuidNames[formattype]), format);
+ str.Format(_T("formattype: %S %s"), GuidNames[formattype], format);
sl.AddTail(str);
str.Format(_T("bFixedSizeSamples: %d"), bFixedSizeSamples);
sl.AddTail(str);
@@ -630,36 +630,36 @@ void CMediaTypeEx::Dump(CAtlList<CString>& sl)
if (wfe.wFormatTag == WAVE_FORMAT_EXTENSIBLE && wfe.cbSize == sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX)) {
fmtsize = sizeof(WAVEFORMATEXTENSIBLE);
- WAVEFORMATEXTENSIBLE& wfe = *(WAVEFORMATEXTENSIBLE*)pbFormat;
+ WAVEFORMATEXTENSIBLE& wfextensible = *(WAVEFORMATEXTENSIBLE*)pbFormat;
sl.AddTail(_T("WAVEFORMATEXTENSIBLE:"));
- if (wfe.Format.wBitsPerSample != 0) {
- str.Format(_T("wValidBitsPerSample: %u"), wfe.Samples.wValidBitsPerSample);
+ if (wfextensible.Format.wBitsPerSample != 0) {
+ str.Format(_T("wValidBitsPerSample: %u"), wfextensible.Samples.wValidBitsPerSample);
} else {
- str.Format(_T("wSamplesPerBlock: %u"), wfe.Samples.wSamplesPerBlock);
+ str.Format(_T("wSamplesPerBlock: %u"), wfextensible.Samples.wSamplesPerBlock);
}
sl.AddTail(str);
- str.Format(_T("dwChannelMask: 0x%08x"), wfe.dwChannelMask);
+ str.Format(_T("dwChannelMask: 0x%08x"), wfextensible.dwChannelMask);
sl.AddTail(str);
- str.Format(_T("SubFormat: %s"), CStringFromGUID(wfe.SubFormat));
+ str.Format(_T("SubFormat: %s"), CStringFromGUID(wfextensible.SubFormat));
sl.AddTail(str);
sl.AddTail(_T(""));
} else if (wfe.wFormatTag == WAVE_FORMAT_DOLBY_AC3 && wfe.cbSize == sizeof(DOLBYAC3WAVEFORMAT) - sizeof(WAVEFORMATEX)) {
fmtsize = sizeof(DOLBYAC3WAVEFORMAT);
- DOLBYAC3WAVEFORMAT& wfe = *(DOLBYAC3WAVEFORMAT*)pbFormat;
+ DOLBYAC3WAVEFORMAT& dawf = *(DOLBYAC3WAVEFORMAT*)pbFormat;
sl.AddTail(_T("DOLBYAC3WAVEFORMAT:"));
- str.Format(_T("bBigEndian: %u"), wfe.bBigEndian);
+ str.Format(_T("bBigEndian: %u"), dawf.bBigEndian);
sl.AddTail(str);
- str.Format(_T("bsid: %u"), wfe.bsid);
+ str.Format(_T("bsid: %u"), dawf.bsid);
sl.AddTail(str);
- str.Format(_T("lfeon: %u"), wfe.lfeon);
+ str.Format(_T("lfeon: %u"), dawf.lfeon);
sl.AddTail(str);
- str.Format(_T("copyrightb: %u"), wfe.copyrightb);
+ str.Format(_T("copyrightb: %u"), dawf.copyrightb);
sl.AddTail(str);
- str.Format(_T("nAuxBitsCode: %u"), wfe.nAuxBitsCode);
+ str.Format(_T("nAuxBitsCode: %u"), dawf.nAuxBitsCode);
sl.AddTail(str);
sl.AddTail(_T(""));
@@ -733,12 +733,12 @@ void CMediaTypeEx::Dump(CAtlList<CString>& sl)
str += _T(" ");
}
- str += ' ';
+ str += _T(' ');
for (ptrdiff_t k = i, l = std::min(i + 16, (ptrdiff_t)cbFormat); k < l; k++) {
unsigned char c = (unsigned char)pbFormat[k];
- CStringA ch;
- ch.Format("%c", c >= 0x20 ? c : '.');
+ CString ch;
+ ch.Format(_T("%C"), c >= 0x20 ? c : '.');
str += ch;
}
diff --git a/src/DSUtil/MediaTypeEx.h b/src/DSUtil/MediaTypeEx.h
index e94b58a39..63ec7e0c1 100644
--- a/src/DSUtil/MediaTypeEx.h
+++ b/src/DSUtil/MediaTypeEx.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,8 @@
#pragma once
+#include <atlcoll.h>
+
class CMediaTypeEx : public CMediaType
{
public:
diff --git a/src/DSUtil/MediaTypes.cpp b/src/DSUtil/MediaTypes.cpp
index 9c751c86a..efa66a4c9 100644
--- a/src/DSUtil/MediaTypes.cpp
+++ b/src/DSUtil/MediaTypes.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2012, 2016-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,7 +20,6 @@
*/
#include "stdafx.h"
-#include <InitGuid.h>
#include "moreuuids.h"
#include "MediaTypes.h"
#include "DSUtil.h"
@@ -31,7 +30,7 @@
#define VIH2_BITFIELDS (sizeof(VIDEOINFOHEADER2) + 3 * sizeof(RGBQUAD))
#define BIH_SIZE (sizeof(BITMAPINFOHEADER))
-VIH vihs[] = {
+const VIH vihs[] = {
// VYUY
{
{
@@ -214,7 +213,7 @@ VIH vihs[] = {
},
};
-VIH2 vih2s[] = {
+const VIH2 vih2s[] = {
// VYUY
{
{
@@ -397,11 +396,11 @@ VIH2 vih2s[] = {
},
};
-UINT VIHSIZE = _countof(vihs);
+extern const UINT VIHSIZE = _countof(vihs);
CString VIH2String(int i)
{
- CString ret = CString(GuidNames[*vihs[i].subtype]);
+ CString ret(GuidNames[*vihs[i].subtype]);
if (!ret.Left(13).CompareNoCase(_T("MEDIASUBTYPE_"))) {
ret = ret.Mid(13);
}
@@ -416,7 +415,7 @@ CString VIH2String(int i)
CString Subtype2String(const GUID& subtype)
{
- CString ret = CString(GuidNames[subtype]);
+ CString ret(GuidNames[subtype]);
if (!ret.Left(13).CompareNoCase(_T("MEDIASUBTYPE_"))) {
ret = ret.Mid(13);
}
diff --git a/src/DSUtil/MediaTypes.h b/src/DSUtil/MediaTypes.h
index 177736712..91919bf3c 100644
--- a/src/DSUtil/MediaTypes.h
+++ b/src/DSUtil/MediaTypes.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -39,10 +39,10 @@ struct VIH2 {
};
#pragma pack(pop)
-extern VIH vihs[];
-extern VIH2 vih2s[];
+extern const VIH vihs[];
+extern const VIH2 vih2s[];
-extern UINT VIHSIZE;
+extern const UINT VIHSIZE;
extern CString VIH2String(int i), Subtype2String(const GUID& subtype);
extern void CorrectMediaType(AM_MEDIA_TYPE* pmt);
diff --git a/src/thirdparty/LAVFilters/GCCInfo.c b/src/DSUtil/MhookHelper.h
index a954ea636..3e185e181 100644
--- a/src/thirdparty/LAVFilters/GCCInfo.c
+++ b/src/DSUtil/MhookHelper.h
@@ -1,5 +1,5 @@
/*
- * (C) 2008-2013 see Authors.txt
+ * (C) 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -18,15 +18,13 @@
*
*/
-#include <_mingw.h>
+#pragma once
-#define str(s) xstr(s)
-#define xstr(s) #s
+#include "minhook/minhook/include/MinHook.h"
-#ifdef __MINGW64_VERSION_MAJOR
-#define MINGW "MinGW-w64"
-#else
-#define MINGW "MinGW"
-#endif
+template <typename T>
+inline BOOL Mhook_SetHookEx(T** ppSystemFunction, PVOID pHookFunction)
+{
+ return MH_CreateHook(*ppSystemFunction, pHookFunction, reinterpret_cast<LPVOID*>(ppSystemFunction)) == MH_OK;
-char g_Gcc_Compiler[] = MINGW " GCC " str(__GNUC__) "." str(__GNUC_MINOR__) "." str(__GNUC_PATCHLEVEL__);
+}
diff --git a/src/DSUtil/Mpeg2Def.h b/src/DSUtil/Mpeg2Def.h
index e6ff9faaa..ca6baf39f 100644
--- a/src/DSUtil/Mpeg2Def.h
+++ b/src/DSUtil/Mpeg2Def.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2013 see Authors.txt
+ * (C) 2009-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -54,6 +54,12 @@ enum PES_STREAM_TYPE {
AUXILIARY_VIDEO_STREAM = 0x1E, // Auxiliary video stream as defined in ISO/IEC 23002-3
SVC_H264 = 0x1F, // SVC video sub-bitstream of an AVC video stream conforming to one or more profiles defined in Annex G of ITU-T Rec. H.264 | ISO/IEC 14496-10
MVC_H264 = 0x20, // MVC video sub-bitstream of an AVC video stream conforming to one or more profiles defined in Annex H of ITU-T Rec. H.264 | ISO/IEC 14496-10
+ VIDEO_STREAM_JPEG2000 = 0x21, // ITU - T Rec.T.800 | ISO / IEC 15444 - 1
+ ADDITIONAL_VIEW_MPEG2 = 0x22, // ITU - T Rec.H.262 | ISO / IEC 13818 - 2 Additional view for compatible 3D
+ ADDITIONAL_VIEW_H264 = 0x23, // ITU - T Rec.H.264 | ISO / IEC 14496 - 10 Additional view for compatible 3D
+ VIDEO_STREAM_HEVC = 0x24, // ITU - T Rec.H.265 | ISO / IEC 23008 - 2 video stream
+ VIDEO_SUBSET_HEVC = 0x25, // ITU - T Rec.H.265 | ISO / IEC 23008 - 2 Annex A temporal video subset
+ MVCD_H264 = 0x26, // ITU - T Rec.H.264 | ISO / IEC 14496 - 10 Annex I MVCD video sub - bitstream
AUDIO_STREAM_LPCM = 0x80,
AUDIO_STREAM_AC3 = 0x81,
AUDIO_STREAM_DTS = 0x82,
@@ -160,4 +166,14 @@ enum MPEG_TYPES {
mpeg_pva
};
+enum SERVICE_TYPE {
+ DIGITAL_TV = 0x01,
+ DIGITAL_RADIO = 0x02,
+ AVC_DIGITAL_RADIO = 0x0A,
+ MPEG2_HD_DIGITAL_TV = 0x11,
+ AVC_SD_TV = 0x16,
+ AVC_HD_TV = 0x19,
+ HEVC_TV = 0x1F
+};
+
extern const wchar_t* StreamTypeToName(PES_STREAM_TYPE _Type);
diff --git a/src/DSUtil/NullRenderers.cpp b/src/DSUtil/NullRenderers.cpp
index 410648fbf..a745c2d0f 100644
--- a/src/DSUtil/NullRenderers.cpp
+++ b/src/DSUtil/NullRenderers.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -86,25 +86,55 @@ public:
// IMFVideoDisplayControl
- STDMETHODIMP GetNativeVideoSize(SIZE* pszVideo, SIZE* pszARVideo) { return E_NOTIMPL; };
- STDMETHODIMP GetIdealVideoSize(SIZE* pszMin, SIZE* pszMax) { return E_NOTIMPL; };
+ STDMETHODIMP GetNativeVideoSize(SIZE* pszVideo, SIZE* pszARVideo) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP GetIdealVideoSize(SIZE* pszMin, SIZE* pszMax) {
+ return E_NOTIMPL;
+ };
STDMETHODIMP SetVideoPosition(const MFVideoNormalizedRect* pnrcSource,
- const LPRECT prcDest) { return E_NOTIMPL; };
+ const LPRECT prcDest) {
+ return E_NOTIMPL;
+ };
STDMETHODIMP GetVideoPosition(MFVideoNormalizedRect* pnrcSource,
- LPRECT prcDest) { return E_NOTIMPL; };
- STDMETHODIMP SetAspectRatioMode(DWORD dwAspectRatioMode) { return E_NOTIMPL; };
- STDMETHODIMP GetAspectRatioMode(DWORD* pdwAspectRatioMode) { return E_NOTIMPL; };
- STDMETHODIMP SetVideoWindow(HWND hwndVideo) { return E_NOTIMPL; };
+ LPRECT prcDest) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP SetAspectRatioMode(DWORD dwAspectRatioMode) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP GetAspectRatioMode(DWORD* pdwAspectRatioMode) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP SetVideoWindow(HWND hwndVideo) {
+ return E_NOTIMPL;
+ };
STDMETHODIMP GetVideoWindow(HWND* phwndVideo);
- STDMETHODIMP RepaintVideo() { return E_NOTIMPL; };
+ STDMETHODIMP RepaintVideo() {
+ return E_NOTIMPL;
+ };
STDMETHODIMP GetCurrentImage(BITMAPINFOHEADER* pBih, BYTE** pDib,
- DWORD* pcbDib, LONGLONG* pTimeStamp) { return E_NOTIMPL; };
- STDMETHODIMP SetBorderColor(COLORREF Clr) { return E_NOTIMPL; };
- STDMETHODIMP GetBorderColor(COLORREF* pClr) { return E_NOTIMPL; };
- STDMETHODIMP SetRenderingPrefs(DWORD dwRenderFlags) { return E_NOTIMPL; };
- STDMETHODIMP GetRenderingPrefs(DWORD* pdwRenderFlags) { return E_NOTIMPL; };
- STDMETHODIMP SetFullscreen(BOOL fFullscreen) { return E_NOTIMPL; };
- STDMETHODIMP GetFullscreen(BOOL* pfFullscreen) { return E_NOTIMPL; };
+ DWORD* pcbDib, LONGLONG* pTimeStamp) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP SetBorderColor(COLORREF Clr) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP GetBorderColor(COLORREF* pClr) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP SetRenderingPrefs(DWORD dwRenderFlags) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP GetRenderingPrefs(DWORD* pdwRenderFlags) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP SetFullscreen(BOOL fFullscreen) {
+ return E_NOTIMPL;
+ };
+ STDMETHODIMP GetFullscreen(BOOL* pfFullscreen) {
+ return E_NOTIMPL;
+ };
private:
HMODULE m_hDXVA2Lib;
@@ -114,7 +144,7 @@ private:
CComPtr<IDirect3D9> m_pD3D;
CComPtr<IDirect3DDevice9> m_pD3DDev;
CComPtr<IDirect3DDeviceManager9> m_pD3DDeviceManager;
- UINT m_nResetTocken;
+ UINT m_nResetToken;
HANDLE m_hDevice;
HWND m_hWnd;
@@ -124,11 +154,11 @@ private:
CNullVideoRendererInputPin::CNullVideoRendererInputPin(CBaseRenderer* pRenderer, HRESULT* phr, LPCWSTR Name)
: CRendererInputPin(pRenderer, phr, Name)
, m_hDXVA2Lib(nullptr)
- , m_pD3DDev(nullptr)
- , m_pD3DDeviceManager(nullptr)
, pfDXVA2CreateDirect3DDeviceManager9(nullptr)
, pfDXVA2CreateVideoService(nullptr)
- , m_nResetTocken(0)
+ , m_pD3DDev(nullptr)
+ , m_pD3DDeviceManager(nullptr)
+ , m_nResetToken(0)
, m_hDevice(INVALID_HANDLE_VALUE)
{
CreateSurface();
@@ -137,12 +167,12 @@ CNullVideoRendererInputPin::CNullVideoRendererInputPin(CBaseRenderer* pRenderer,
if (m_hDXVA2Lib) {
pfDXVA2CreateDirect3DDeviceManager9 = reinterpret_cast<PTR_DXVA2CreateDirect3DDeviceManager9>(GetProcAddress(m_hDXVA2Lib, "DXVA2CreateDirect3DDeviceManager9"));
pfDXVA2CreateVideoService = reinterpret_cast<PTR_DXVA2CreateVideoService>(GetProcAddress(m_hDXVA2Lib, "DXVA2CreateVideoService"));
- pfDXVA2CreateDirect3DDeviceManager9(&m_nResetTocken, &m_pD3DDeviceManager);
+ pfDXVA2CreateDirect3DDeviceManager9(&m_nResetToken, &m_pD3DDeviceManager);
}
// Initialize Device Manager with DX surface
if (m_pD3DDev) {
- m_pD3DDeviceManager->ResetDevice(m_pD3DDev, m_nResetTocken);
+ m_pD3DDeviceManager->ResetDevice(m_pD3DDev, m_nResetToken);
m_pD3DDeviceManager->OpenDeviceHandle(&m_hDevice);
}
}
@@ -158,7 +188,7 @@ void CNullVideoRendererInputPin::CreateSurface()
D3DDISPLAYMODE d3ddm;
ZeroMemory(&d3ddm, sizeof(d3ddm));
- m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
+ VERIFY(SUCCEEDED(m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)));
D3DPRESENT_PARAMETERS pp;
ZeroMemory(&pp, sizeof(pp));
diff --git a/src/DSUtil/PathUtils.cpp b/src/DSUtil/PathUtils.cpp
index 1a17ba244..b46341a87 100644
--- a/src/DSUtil/PathUtils.cpp
+++ b/src/DSUtil/PathUtils.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -127,6 +127,21 @@ namespace PathUtils
return ret;
}
+ CString Unquote(LPCTSTR path)
+ {
+ return CString(path).Trim(_T("\""));
+ }
+
+ CString StripPathOrUrl(LPCTSTR path)
+ {
+ // Replacement for CPath::StripPath which works fine also for URLs
+ CString p = path;
+ p.Replace('\\', '/');
+ p.TrimRight('/');
+ p = p.Mid(p.ReverseFind('/') + 1);
+ return (p.IsEmpty() ? path : p);
+ }
+
bool IsInDir(LPCTSTR path, LPCTSTR dir)
{
return !!CPath(path).IsPrefix(dir);
@@ -164,6 +179,11 @@ namespace PathUtils
return (attr != INVALID_FILE_ATTRIBUTES) && (attr & FILE_ATTRIBUTE_DIRECTORY);
}
+ bool IsLinkFile(LPCTSTR path)
+ {
+ return !FileExt(path).CompareNoCase(_T(".lnk"));
+ }
+
bool CreateDirRecursive(LPCTSTR path)
{
bool ret = IsDir(path) || CreateDirectory(path, nullptr);
@@ -172,4 +192,60 @@ namespace PathUtils
}
return ret;
}
+
+ CString ResolveLinkFile(LPCTSTR path)
+ {
+ TCHAR buff[MAX_PATH];
+ CComPtr<IShellLink> pSL;
+ pSL.CoCreateInstance(CLSID_ShellLink);
+ CComQIPtr<IPersistFile> pPF = pSL;
+
+ if (pSL && pPF
+ && SUCCEEDED(pPF->Load(path, STGM_READ))
+ && SUCCEEDED(pSL->Resolve(nullptr, SLR_ANY_MATCH | SLR_NO_UI))
+ && SUCCEEDED(pSL->GetPath(buff, _countof(buff), nullptr, 0))) {
+ return buff;
+ }
+
+ return _T("");
+ }
+
+ void RecurseAddDir(LPCTSTR path, CAtlList<CString>& paths)
+ {
+ CFileFind finder;
+
+ BOOL bFound = finder.FindFile(PathUtils::CombinePaths(path, _T("*.*")));
+ while (bFound) {
+ bFound = finder.FindNextFile();
+
+ if (!finder.IsDots() && finder.IsDirectory()) {
+ CString folderPath = finder.GetFilePath();
+ paths.AddTail(folderPath);
+ RecurseAddDir(folderPath, paths);
+ }
+ }
+ }
+
+ void ParseDirs(CAtlList<CString>& paths)
+ {
+ POSITION pos = paths.GetHeadPosition();
+ while (pos) {
+ POSITION prevPos = pos;
+ CString fn = paths.GetNext(pos);
+ // Try to follow link files that point to a directory
+ if (IsLinkFile(fn)) {
+ fn = ResolveLinkFile(fn);
+ }
+
+ if (IsDir(fn)) {
+ CAtlList<CString> subDirs;
+ RecurseAddDir(fn, subDirs);
+ // Add the subdirectories just after their parent
+ // so that the tree is not parsed multiple times
+ while (!subDirs.IsEmpty()) {
+ paths.InsertAfter(prevPos, subDirs.RemoveTail());
+ }
+ }
+ }
+ }
}
diff --git a/src/DSUtil/PathUtils.h b/src/DSUtil/PathUtils.h
index f78c18782..f90826fc7 100644
--- a/src/DSUtil/PathUtils.h
+++ b/src/DSUtil/PathUtils.h
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -31,11 +31,17 @@ namespace PathUtils
CString GetProgramPath(bool bWithExeName = false);
CString CombinePaths(LPCTSTR dir, LPCTSTR path);
CString FilterInvalidCharsFromFileName(LPCTSTR fn, TCHAR replacementChar = _T('_'));
+ CString Unquote(LPCTSTR path);
+ CString StripPathOrUrl(LPCTSTR path);
bool IsInDir(LPCTSTR path, LPCTSTR dir);
CString ToRelative(LPCTSTR dir, const LPCTSTR path, bool* pbRelative = nullptr);
bool IsRelative(LPCTSTR path);
bool Exists(LPCTSTR path);
bool IsFile(LPCTSTR path);
bool IsDir(LPCTSTR path);
+ bool IsLinkFile(LPCTSTR path);
bool CreateDirRecursive(LPCTSTR path);
+ CString ResolveLinkFile(LPCTSTR path);
+ void RecurseAddDir(LPCTSTR path, CAtlList<CString>& sl);
+ void ParseDirs(CAtlList<CString>& pathsList);
}
diff --git a/src/DSUtil/SharedInclude.h b/src/DSUtil/SharedInclude.h
index ac2e59a98..3668639b3 100644
--- a/src/DSUtil/SharedInclude.h
+++ b/src/DSUtil/SharedInclude.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2013 see Authors.txt
+ * (C) 2009-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,6 +25,10 @@
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
+#ifndef STRICT_TYPED_ITEMIDS
+#define STRICT_TYPED_ITEMIDS
+#endif
+
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC // include Microsoft memory leak detection procedures
#include <crtdbg.h>
diff --git a/src/DSUtil/SysVersion.cpp b/src/DSUtil/SysVersion.cpp
index a1c2bf29c..6db223293 100644
--- a/src/DSUtil/SysVersion.cpp
+++ b/src/DSUtil/SysVersion.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2012-2014 see Authors.txt
+ * (C) 2012-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -90,6 +90,16 @@ bool SysVersion::Is8OrLater()
return (GetVersion() >= 0x0602);
}
+bool SysVersion::Is81OrLater()
+{
+ return (GetVersion() >= 0x0603);
+}
+
+bool SysVersion::Is10OrLater()
+{
+ return (GetVersion() >= 0x0A00);
+}
+
bool SysVersion::Is64Bit()
{
const bool bIs64Bit = InitIs64Bit();
diff --git a/src/DSUtil/SysVersion.h b/src/DSUtil/SysVersion.h
index efdc28a10..8669abe07 100644
--- a/src/DSUtil/SysVersion.h
+++ b/src/DSUtil/SysVersion.h
@@ -1,5 +1,5 @@
/*
- * (C) 2012-2014 see Authors.txt
+ * (C) 2012-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -34,6 +34,8 @@ namespace SysVersion
bool Is7OrLater();
bool Is8();
bool Is8OrLater();
+ bool Is81OrLater();
+ bool Is10OrLater();
bool Is64Bit();
};
diff --git a/src/DSUtil/WinAPIUtils.cpp b/src/DSUtil/WinAPIUtils.cpp
index 930c90757..badf20243 100644
--- a/src/DSUtil/WinAPIUtils.cpp
+++ b/src/DSUtil/WinAPIUtils.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2011-2014 see Authors.txt
+ * (C) 2011-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,6 +23,7 @@
#include <Shlobj.h>
#include "WinAPIUtils.h"
#include "SysVersion.h"
+#include "PathUtils.h"
bool SetPrivilege(LPCTSTR privilege, bool bEnable)
@@ -135,7 +136,7 @@ bool ExportRegistryKey(CStdioFile& file, HKEY hKeyRoot, CString keyName)
file.WriteString(_T("\n"));
break;
case REG_DWORD:
- buffer.Format(_T("\"%s\"=dword:%08x\n"), valueName, *((DWORD*)data));
+ buffer.Format(_T("\"%s\"=dword:%08lx\n"), valueName, *((DWORD*)data));
file.WriteString(buffer);
break;
default: {
@@ -205,30 +206,33 @@ int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX* /*lpelfe*/, NEWTEXTMETRICEX* /*lpn
return TRUE;
}
-void GetMessageFont(LOGFONT* lf)
+namespace
{
- ZeroMemory(lf, sizeof(LOGFONT));
- NONCLIENTMETRICS ncm;
- ncm.cbSize = sizeof(NONCLIENTMETRICS);
- if (!SysVersion::IsVistaOrLater()) {
- ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth);
+ void GetNonClientMetrics(NONCLIENTMETRICS* ncm)
+ {
+ ZeroMemory(ncm, sizeof(NONCLIENTMETRICS));
+ ncm->cbSize = sizeof(NONCLIENTMETRICS);
+ if (!SysVersion::IsVistaOrLater()) {
+ ncm->cbSize -= sizeof(ncm->iPaddedBorderWidth);
+ }
+ VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm->cbSize, ncm, 0));
}
+}
- SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0);
+void GetMessageFont(LOGFONT* lf)
+{
+ NONCLIENTMETRICS ncm;
+ GetNonClientMetrics(&ncm);
*lf = ncm.lfMessageFont;
+ ASSERT(lf->lfHeight);
}
void GetStatusFont(LOGFONT* lf)
{
- ZeroMemory(lf, sizeof(LOGFONT));
NONCLIENTMETRICS ncm;
- ncm.cbSize = sizeof(NONCLIENTMETRICS);
- if (!SysVersion::IsVistaOrLater()) {
- ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth);
- }
-
- SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0);
+ GetNonClientMetrics(&ncm);
*lf = ncm.lfStatusFont;
+ ASSERT(lf->lfHeight);
}
bool IsFontInstalled(LPCTSTR lpszFont)
@@ -259,7 +263,7 @@ bool ExploreToFile(LPCTSTR path)
bool success = false;
PIDLIST_ABSOLUTE pidl;
- if (FileExists(path) && SHParseDisplayName(path, nullptr, &pidl, 0, nullptr) == S_OK) {
+ if (PathUtils::Exists(path) && SHParseDisplayName(path, nullptr, &pidl, 0, nullptr) == S_OK) {
success = SUCCEEDED(SHOpenFolderAndSelectItems(pidl, 0, nullptr, 0));
CoTaskMemFree(pidl);
}
@@ -267,25 +271,6 @@ bool ExploreToFile(LPCTSTR path)
return success;
}
-bool FileExists(LPCTSTR fileName)
-{
- return (INVALID_FILE_ATTRIBUTES != ::GetFileAttributes(fileName));
-}
-
-CString GetProgramPath(bool bWithExecutableName /*= false*/)
-{
- CString path;
-
- DWORD dwLength = ::GetModuleFileName(nullptr, path.GetBuffer(MAX_PATH), MAX_PATH);
- path.ReleaseBuffer((int)dwLength);
-
- if (!bWithExecutableName) {
- path = path.Left(path.ReverseFind(_T('\\')) + 1);
- }
-
- return path;
-}
-
CoInitializeHelper::CoInitializeHelper()
{
HRESULT res = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
diff --git a/src/DSUtil/WinAPIUtils.h b/src/DSUtil/WinAPIUtils.h
index ead2bf768..6a5ce5251 100644
--- a/src/DSUtil/WinAPIUtils.h
+++ b/src/DSUtil/WinAPIUtils.h
@@ -1,5 +1,5 @@
/*
- * (C) 2011-2014 see Authors.txt
+ * (C) 2011-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,8 +20,6 @@
#pragma once
-#include <Windows.h>
-
struct IDirect3D9;
@@ -38,11 +36,8 @@ bool IsFontInstalled(LPCTSTR lpszFont);
bool ExploreToFile(LPCTSTR path);
-bool FileExists(LPCTSTR fileName);
HRESULT FileDelete(CString file, HWND hWnd, bool recycle = true);
-CString GetProgramPath(bool bWithExecutableName = false);
-
class CoInitializeHelper
{
public:
diff --git a/src/DSUtil/WinapiFunc.h b/src/DSUtil/WinapiFunc.h
index 92d5f700e..934061ef4 100644
--- a/src/DSUtil/WinapiFunc.h
+++ b/src/DSUtil/WinapiFunc.h
@@ -1,5 +1,5 @@
/*
- * (C) 2014 see Authors.txt
+ * (C) 2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,27 +24,23 @@ template <typename>
class WinapiFunc;
template <typename ReturnType, typename...Args>
-class WinapiFunc<ReturnType(Args...)> final
-{
-public:
+struct WinapiFunc<ReturnType WINAPI(Args...)> final {
typedef ReturnType(WINAPI* WinapiFuncType)(Args...);
WinapiFunc() = delete;
WinapiFunc(const WinapiFunc&) = delete;
WinapiFunc& operator=(const WinapiFunc&) = delete;
- WinapiFunc(const CString& dll, const CStringA& func) {
- ASSERT(!dll.IsEmpty());
- ASSERT(!func.IsEmpty());
- m_hLib = LoadLibrary(dll);
- m_pWinapiFunc = reinterpret_cast<WinapiFuncType>(GetProcAddress(m_hLib, func));
+ inline WinapiFunc(LPCTSTR dll, LPCSTR func)
+ : m_hLib(LoadLibrary(dll))
+ , m_pWinapiFunc(reinterpret_cast<WinapiFuncType>(GetProcAddress(m_hLib, func))) {
}
- ~WinapiFunc() {
+ inline ~WinapiFunc() {
FreeLibrary(m_hLib);
}
- explicit inline operator bool() const {
+ inline explicit operator bool() const {
return !!m_pWinapiFunc;
}
@@ -53,6 +49,6 @@ public:
}
private:
- HMODULE m_hLib = nullptr;
- WinapiFuncType m_pWinapiFunc = nullptr;
+ const HMODULE m_hLib;
+ const WinapiFuncType m_pWinapiFunc;
};
diff --git a/src/DSUtil/deinterlace.cpp b/src/DSUtil/deinterlace.cpp
index 0ec385051..7ef0dce75 100644
--- a/src/DSUtil/deinterlace.cpp
+++ b/src/DSUtil/deinterlace.cpp
@@ -1346,7 +1346,7 @@ namespace {
}
topbuf[wr+16] = topbuf[wr+17] = topbuf[wr+18] = topbuf[wr+15];
- topbuf[wr+16] = topbuf[wr+17] = botbuf[wr+18] = botbuf[wr+15];
+ botbuf[wr+16] = botbuf[wr+17] = botbuf[wr+18] = botbuf[wr+15];
ela_L8_scalar(elabuf, topbuf, botbuf, w16);
nela_L8_scalar((uint8 *)dst, elabuf, w16);
diff --git a/src/DSUtil/text.cpp b/src/DSUtil/text.cpp
index 63dc0c160..e3be087bc 100644
--- a/src/DSUtil/text.cpp
+++ b/src/DSUtil/text.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -33,7 +33,7 @@ DWORD CharSetToCodePage(DWORD dwCharSet)
}
CHARSETINFO cs;
ZeroMemory(&cs, sizeof(CHARSETINFO));
- ::TranslateCharsetInfo((DWORD*)dwCharSet, &cs, TCI_SRCCHARSET);
+ ::TranslateCharsetInfo((DWORD*)(DWORD_PTR)dwCharSet, &cs, TCI_SRCCHARSET);
return cs.ciACP;
}
@@ -176,6 +176,18 @@ CStringA HtmlSpecialChars(CStringA str, bool bQuotes /*= false*/)
return str;
}
+CStringA HtmlSpecialCharsDecode(CStringA str)
+{
+ str.Replace("&amp;", "&");
+ str.Replace("&quot;", "\"");
+ str.Replace("&#039;", "\'");
+ str.Replace("&lt;", "<");
+ str.Replace("&gt;", ">");
+ str.Replace("&rsquo;", "'");
+
+ return str;
+}
+
CAtlList<CString>& MakeLower(CAtlList<CString>& sl)
{
POSITION pos = sl.GetHeadPosition();
diff --git a/src/DSUtil/text.h b/src/DSUtil/text.h
index ea168c5ac..a0dde4cf2 100644
--- a/src/DSUtil/text.h
+++ b/src/DSUtil/text.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#pragma once
#include <atlcoll.h>
+#include <string>
template<class T, typename SEP>
T Explode(const T& str, CAtlList<T>& sl, SEP sep, size_t limit = 0)
@@ -72,8 +73,8 @@ T ExplodeEsc(T str, CAtlList<T>& sl, SEP sep, size_t limit = 0, SEP esc = _T('\\
break;
}
- // Skip this seperator if it is escaped
- if (str.GetAt(j - 1) == esc) {
+ // Skip this separator if it is escaped
+ if (j > 0 && str.GetAt(j - 1) == esc) {
// Delete the escape character
str.Delete(j - 1);
continue;
@@ -133,6 +134,7 @@ extern CStringA UrlEncode(const CStringA& strIn);
extern CStringA EscapeJSONString(const CStringA& str);
extern CStringA UrlDecode(const CStringA& strIn);
extern CStringA HtmlSpecialChars(CStringA str, bool bQuotes = false);
+extern CStringA HtmlSpecialCharsDecode(CStringA str);
extern DWORD CharSetToCodePage(DWORD dwCharSet);
extern CAtlList<CString>& MakeLower(CAtlList<CString>& sl);
extern CAtlList<CString>& MakeUpper(CAtlList<CString>& sl);
@@ -179,3 +181,10 @@ int FindOneOf(const T& str, typename T::PCXSTR pszCharSet, int iStart) throw()
T::PCXSTR psz = T::StrTraits::StringScanSet(str.GetString() + iStart, pszCharSet);
return ((psz == NULL) ? -1 : int(psz - str.GetString()));
}
+
+template<typename T>
+CString NumToCString(T num)
+{
+ static_assert(std::numeric_limits<T>::is_specialized, "NumToCString can be used only for numeric types.");
+ return std::to_string(num).c_str();
+}
diff --git a/src/DSUtil/vd.cpp b/src/DSUtil/vd.cpp
index 18647dfb0..ac15cf11d 100644
--- a/src/DSUtil/vd.cpp
+++ b/src/DSUtil/vd.cpp
@@ -262,6 +262,62 @@ bool BitBltFromRGBToRGB(int w, int h, BYTE* dst, int dstpitch, int dbpp, BYTE* s
return VDPixmapBlt(dstpxm, srcbm);
}
+bool BitBltFromRGBToRGBStretch(int dstw, int dsth, BYTE* dst, int dstpitch, int dbpp, int srcw, int srch, BYTE* src, int srcpitch, int sbpp)
+{
+ VDPixmap srcbm = {
+ src + srcpitch * (srch - 1),
+ nullptr,
+ srcw,
+ srch,
+ -srcpitch
+ };
+
+ switch (sbpp) {
+ case 8:
+ srcbm.format = nsVDPixmap::kPixFormat_Pal8;
+ break;
+ case 16:
+ srcbm.format = nsVDPixmap::kPixFormat_RGB565;
+ break;
+ case 24:
+ srcbm.format = nsVDPixmap::kPixFormat_RGB888;
+ break;
+ case 32:
+ srcbm.format = nsVDPixmap::kPixFormat_XRGB8888;
+ break;
+ default:
+ VDASSERT(false);
+ }
+
+ VDPixmap dstpxm = {
+ dst + dstpitch * (dsth - 1),
+ nullptr,
+ dstw,
+ dsth,
+ -dstpitch
+ };
+
+ switch (dbpp) {
+ case 8:
+ dstpxm.format = nsVDPixmap::kPixFormat_Pal8;
+ break;
+ case 16:
+ dstpxm.format = nsVDPixmap::kPixFormat_RGB565;
+ break;
+ case 24:
+ dstpxm.format = nsVDPixmap::kPixFormat_RGB888;
+ break;
+ case 32:
+ dstpxm.format = nsVDPixmap::kPixFormat_XRGB8888;
+ break;
+ default:
+ VDASSERT(false);
+ }
+
+ return VDPixmapStretchBltBilinear(dstpxm, srcbm);
+}
+
+
bool BitBltFromYUY2ToRGB(int w, int h, BYTE* dst, int dstpitch, int dbpp, BYTE* src, int srcpitch)
{
if (srcpitch == 0) srcpitch = w;
diff --git a/src/DSUtil/vd.h b/src/DSUtil/vd.h
index f0407dcc1..9ba810b0b 100644
--- a/src/DSUtil/vd.h
+++ b/src/DSUtil/vd.h
@@ -37,6 +37,7 @@ extern bool BitBltFromI420ToRGB(int w, int h, BYTE* dst, int dstpitch, int dbpp,
extern bool BitBltFromYUY2ToYUY2(int w, int h, BYTE* dst, int dstpitch, BYTE* src, int srcpitch);
extern bool BitBltFromYUY2ToRGB(int w, int h, BYTE* dst, int dstpitch, int dbpp, BYTE* src, int srcpitch);
extern bool BitBltFromRGBToRGB(int w, int h, BYTE* dst, int dstpitch, int dbpp, BYTE* src, int srcpitch, int sbpp);
+extern bool BitBltFromRGBToRGBStretch(int dstw, int dsth, BYTE* dst, int dstpitch, int dbpp, int srcw, int srch, BYTE* src, int srcpitch, int sbpp);
extern void DeinterlaceBlend(BYTE* dst, BYTE* src, DWORD rowbytes, DWORD h, DWORD dstpitch, DWORD srcpitch);
extern void DeinterlaceBob(BYTE* dst, BYTE* src, DWORD rowbytes, DWORD h, DWORD dstpitch, DWORD srcpitch, bool topfield);
diff --git a/src/DeCSS/CSSscramble.cpp b/src/DeCSS/CSSscramble.cpp
index c991e78e4..902c99f4f 100644
--- a/src/DeCSS/CSSscramble.cpp
+++ b/src/DeCSS/CSSscramble.cpp
@@ -1,8 +1,8 @@
#include "stdafx.h"
-unsigned int CSStab0[11]= {5,0,1,2,3,4,0,1,2,3,4};
+static const unsigned int CSStab0[11]= {5,0,1,2,3,4,0,1,2,3,4};
-static unsigned char CSStab1[256]= {
+static const unsigned char CSStab1[256]= {
0x33,0x73,0x3b,0x26,0x63,0x23,0x6b,0x76,0x3e,0x7e,0x36,0x2b,0x6e,0x2e,0x66,0x7b,
0xd3,0x93,0xdb,0x06,0x43,0x03,0x4b,0x96,0xde,0x9e,0xd6,0x0b,0x4e,0x0e,0x46,0x9b,
0x57,0x17,0x5f,0x82,0xc7,0x87,0xcf,0x12,0x5a,0x1a,0x52,0x8f,0xca,0x8a,0xc2,0x1f,
@@ -21,7 +21,7 @@ static unsigned char CSStab1[256]= {
0xb7,0xf7,0xbf,0xa2,0xe7,0xa7,0xef,0xf2,0xba,0xfa,0xb2,0xaf,0xea,0xaa,0xe2,0xff
};
-static unsigned char CSStab2[256]= {
+static const unsigned char CSStab2[256]= {
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x08,0x0b,0x0a,0x0d,0x0c,0x0f,0x0e,
0x12,0x13,0x10,0x11,0x16,0x17,0x14,0x15,0x1b,0x1a,0x19,0x18,0x1f,0x1e,0x1d,0x1c,
0x24,0x25,0x26,0x27,0x20,0x21,0x22,0x23,0x2d,0x2c,0x2f,0x2e,0x29,0x28,0x2b,0x2a,
@@ -40,7 +40,7 @@ static unsigned char CSStab2[256]= {
0xed,0xec,0xef,0xee,0xe9,0xe8,0xeb,0xea,0xe4,0xe5,0xe6,0xe7,0xe0,0xe1,0xe2,0xe3
};
-static unsigned char CSStab3[512]= {
+static const unsigned char CSStab3[512]= {
0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,
0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,
0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,
@@ -75,7 +75,7 @@ static unsigned char CSStab3[512]= {
0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff
};
-static unsigned char CSStab4[256]= {
+static const unsigned char CSStab4[256]= {
0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0,
0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,0x18,0x98,0x58,0xd8,0x38,0xb8,0x78,0xf8,
0x04,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4,0x14,0x94,0x54,0xd4,0x34,0xb4,0x74,0xf4,
@@ -94,7 +94,7 @@ static unsigned char CSStab4[256]= {
0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff
};
-static unsigned char CSStab5[256]= {
+static const unsigned char CSStab5[256]= {
0xff,0x7f,0xbf,0x3f,0xdf,0x5f,0x9f,0x1f,0xef,0x6f,0xaf,0x2f,0xcf,0x4f,0x8f,0x0f,
0xf7,0x77,0xb7,0x37,0xd7,0x57,0x97,0x17,0xe7,0x67,0xa7,0x27,0xc7,0x47,0x87,0x07,
0xfb,0x7b,0xbb,0x3b,0xdb,0x5b,0x9b,0x1b,0xeb,0x6b,0xab,0x2b,0xcb,0x4b,0x8b,0x0b,
@@ -113,7 +113,7 @@ static unsigned char CSStab5[256]= {
0xf0,0x70,0xb0,0x30,0xd0,0x50,0x90,0x10,0xe0,0x60,0xa0,0x20,0xc0,0x40,0x80,0x00
};
-void CSSdescramble(unsigned char *sec,unsigned char *tkey)
+void CSSdescramble(unsigned char *sec,const unsigned char *tkey)
{
unsigned int t1,t2,t3,t4,t5,t6;
unsigned char *end=sec+0x800;
@@ -139,7 +139,7 @@ void CSSdescramble(unsigned char *sec,unsigned char *tkey)
}
}
-void CSSdisckey(unsigned char *dkey,unsigned char *pkey)
+void CSSdisckey(unsigned char *dkey,const unsigned char *pkey)
{
unsigned int t1,t2,t3,t4,t5,t6;
unsigned char k[5];
@@ -168,7 +168,7 @@ void CSSdisckey(unsigned char *dkey,unsigned char *pkey)
}
}
-void CSStitlekey(unsigned char *tkey,unsigned char *dkey)
+void CSStitlekey(unsigned char *tkey,const unsigned char *dkey)
{
unsigned int t1,t2,t3,t4,t5,t6;
unsigned char k[5];
@@ -197,7 +197,7 @@ void CSStitlekey(unsigned char *tkey,unsigned char *dkey)
}
}
-unsigned char g_PlayerKeys[][6] = {
+extern const unsigned char g_PlayerKeys[][6] = {
// from mplayer:
{0x01, 0xaf, 0xe3, 0x12, 0x80},
{0x12, 0x11, 0xca, 0x04, 0x3b},
@@ -233,4 +233,4 @@ unsigned char g_PlayerKeys[][6] = {
// TODO: find more player keys
};
-int g_nPlayerKeys = _countof(g_PlayerKeys);
+extern const int g_nPlayerKeys = _countof(g_PlayerKeys);
diff --git a/src/DeCSS/CSSscramble.h b/src/DeCSS/CSSscramble.h
index b4c0210da..6ca6ebd30 100644
--- a/src/DeCSS/CSSscramble.h
+++ b/src/DeCSS/CSSscramble.h
@@ -1,8 +1,8 @@
#pragma once
-extern void CSSdisckey(unsigned char *dkey,unsigned char *pkey);
-extern void CSStitlekey(unsigned char *tkey,unsigned char *dkey);
-extern void CSSdescramble(unsigned char *sector,unsigned char *tkey);
+extern void CSSdisckey(unsigned char *dkey,const unsigned char *pkey);
+extern void CSStitlekey(unsigned char *tkey,const unsigned char *dkey);
+extern void CSSdescramble(unsigned char *sector,const unsigned char *tkey);
-extern unsigned char g_PlayerKeys[][6];
-extern int g_nPlayerKeys;
+extern const unsigned char g_PlayerKeys[][6];
+extern const int g_nPlayerKeys;
diff --git a/src/DeCSS/DeCSS.vcxproj b/src/DeCSS/DeCSS.vcxproj
index b5e134288..d13569ecc 100644
--- a/src/DeCSS/DeCSS.vcxproj
+++ b/src/DeCSS/DeCSS.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,44 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\include;..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/src/DeCSS/DeCSS.vcxproj.filters b/src/DeCSS/DeCSS.vcxproj.filters
index d2d9e216e..101c20ecd 100644
--- a/src/DeCSS/DeCSS.vcxproj.filters
+++ b/src/DeCSS/DeCSS.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{ad1b8b81-9c26-4439-a44f-daa5cc1dce41}</UniqueIdentifier>
diff --git a/src/DeCSS/DeCSSInputPin.cpp b/src/DeCSS/DeCSSInputPin.cpp
index c76ef19a1..15fc5885a 100644
--- a/src/DeCSS/DeCSSInputPin.cpp
+++ b/src/DeCSS/DeCSSInputPin.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -31,7 +31,6 @@
#include "CSSauth.h"
#include "CSSscramble.h"
-#include <InitGuid.h>
#include "moreuuids.h"
//
@@ -289,7 +288,7 @@ STDMETHODIMP CDeCSSInputPin::Get(REFGUID PropSet, ULONG Id, LPVOID pInstanceData
switch (Id) {
case AM_PROPERTY_DVDCOPY_CHLG_KEY: { // 1. auth: send our nonce word
AM_DVDCOPY_CHLGKEY* pChlgKey = (AM_DVDCOPY_CHLGKEY*)pPropertyData;
- for (int i = 0; i < 10; i++) {
+ for (BYTE i = 0; i < 10; i++) {
pChlgKey->ChlgKey[i] = 9 - (m_Challenge[i] = i);
}
*pBytesReturned = sizeof(AM_DVDCOPY_CHLGKEY);
diff --git a/src/DeCSS/VobFile.cpp b/src/DeCSS/VobFile.cpp
index 9e681e7de..3ef313181 100644
--- a/src/DeCSS/VobFile.cpp
+++ b/src/DeCSS/VobFile.cpp
@@ -8,6 +8,7 @@
#include "../DSUtil/GolombBuffer.h"
#include "../DSUtil/DSUtil.h"
+#include "../DSUtil/ISOLang.h"
#define AUDIO_BLOCK_SIZE 66
#define SUBTITLE_BLOCK_SIZE 194
@@ -20,8 +21,8 @@
//
CDVDSession::CDVDSession()
- : m_session(DVD_END_ALL_SESSIONS)
- , m_hDrive(INVALID_HANDLE_VALUE)
+ : m_hDrive(INVALID_HANDLE_VALUE)
+ , m_session(DVD_END_ALL_SESSIONS)
{
ZeroMemory(m_SessionKey, sizeof(m_SessionKey));
ZeroMemory(m_DiscKey, sizeof(m_DiscKey));
@@ -97,7 +98,7 @@ bool CDVDSession::Authenticate()
BYTE Challenge[10], Key[10];
- for (int i = 0; i < 10; i++) {
+ for (BYTE i = 0; i < 10; i++) {
Challenge[i] = i;
}
@@ -205,74 +206,94 @@ static void Reverse(BYTE* d, BYTE* s, int len)
bool CDVDSession::SendKey(DVD_KEY_TYPE KeyType, BYTE* pKeyData)
{
- CAutoPtr<DVD_COPY_PROTECT_KEY> key;
+ CAutoVectorPtr<BYTE> key;
+ DVD_COPY_PROTECT_KEY* pKey = nullptr;
+
+ auto allocateKey = [&](ULONG len) {
+ bool bSuccess = key.Allocate(len);
+ if (bSuccess) {
+ pKey = (DVD_COPY_PROTECT_KEY*)(BYTE*)key;
+ pKey->KeyLength = len;
+ }
+ return bSuccess;
+ };
switch (KeyType) {
case DvdChallengeKey:
- key.Attach((DVD_COPY_PROTECT_KEY*)DEBUG_NEW BYTE[DVD_CHALLENGE_KEY_LENGTH]);
- key->KeyLength = DVD_CHALLENGE_KEY_LENGTH;
- Reverse(key->KeyData, pKeyData, 10);
+ if (allocateKey(DVD_CHALLENGE_KEY_LENGTH)) {
+ Reverse(pKey->KeyData, pKeyData, 10);
+ }
break;
case DvdBusKey2:
- key.Attach((DVD_COPY_PROTECT_KEY*)DEBUG_NEW BYTE[DVD_BUS_KEY_LENGTH]);
- key->KeyLength = DVD_BUS_KEY_LENGTH;
- Reverse(key->KeyData, pKeyData, 5);
+ if (allocateKey(DVD_BUS_KEY_LENGTH)) {
+ Reverse(pKey->KeyData, pKeyData, 5);
+ }
break;
default:
break;
}
- if (!key) {
+ if (!pKey) {
return false;
}
- key->SessionId = m_session;
- key->KeyType = KeyType;
- key->KeyFlags = 0;
+ pKey->SessionId = m_session;
+ pKey->KeyType = KeyType;
+ pKey->KeyFlags = 0;
- DWORD BytesReturned;
- return !!DeviceIoControl(m_hDrive, IOCTL_DVD_SEND_KEY, key, key->KeyLength, nullptr, 0, &BytesReturned, nullptr);
+ DWORD dwBytesReturned;
+ return !!DeviceIoControl(m_hDrive, IOCTL_DVD_SEND_KEY, pKey, pKey->KeyLength, nullptr, 0, &dwBytesReturned, nullptr);
}
bool CDVDSession::ReadKey(DVD_KEY_TYPE KeyType, BYTE* pKeyData, int lba)
{
- CAutoPtr<DVD_COPY_PROTECT_KEY> key;
+ CAutoVectorPtr<BYTE> key;
+ DVD_COPY_PROTECT_KEY* pKey = nullptr;
+
+ auto allocateKey = [&](ULONG len) {
+ bool bSuccess = key.Allocate(len);
+ if (bSuccess) {
+ pKey = (DVD_COPY_PROTECT_KEY*)(BYTE*)key;
+ pKey->KeyLength = len;
+ }
+ return bSuccess;
+ };
switch (KeyType) {
case DvdChallengeKey:
- key.Attach((DVD_COPY_PROTECT_KEY*)DEBUG_NEW BYTE[DVD_CHALLENGE_KEY_LENGTH]);
- key->KeyLength = DVD_CHALLENGE_KEY_LENGTH;
- key->Parameters.TitleOffset.QuadPart = 0;
+ if (allocateKey(DVD_CHALLENGE_KEY_LENGTH)) {
+ pKey->Parameters.TitleOffset.QuadPart = 0;
+ }
break;
case DvdBusKey1:
- key.Attach((DVD_COPY_PROTECT_KEY*)DEBUG_NEW BYTE[DVD_BUS_KEY_LENGTH]);
- key->KeyLength = DVD_BUS_KEY_LENGTH;
- key->Parameters.TitleOffset.QuadPart = 0;
+ if (allocateKey(DVD_BUS_KEY_LENGTH)) {
+ pKey->Parameters.TitleOffset.QuadPart = 0;
+ }
break;
case DvdDiskKey:
- key.Attach((DVD_COPY_PROTECT_KEY*)DEBUG_NEW BYTE[DVD_DISK_KEY_LENGTH]);
- key->KeyLength = DVD_DISK_KEY_LENGTH;
- key->Parameters.TitleOffset.QuadPart = 0;
+ if (allocateKey(DVD_DISK_KEY_LENGTH)) {
+ pKey->Parameters.TitleOffset.QuadPart = 0;
+ }
break;
case DvdTitleKey:
- key.Attach((DVD_COPY_PROTECT_KEY*)DEBUG_NEW BYTE[DVD_TITLE_KEY_LENGTH]);
- key->KeyLength = DVD_TITLE_KEY_LENGTH;
- key->Parameters.TitleOffset.QuadPart = 2048i64 * lba;
+ if (allocateKey(DVD_TITLE_KEY_LENGTH)) {
+ pKey->Parameters.TitleOffset.QuadPart = 2048i64 * lba;
+ }
break;
default:
break;
}
- if (!key) {
+ if (!pKey) {
return false;
}
- key->SessionId = m_session;
- key->KeyType = KeyType;
- key->KeyFlags = 0;
+ pKey->SessionId = m_session;
+ pKey->KeyType = KeyType;
+ pKey->KeyFlags = 0;
- DWORD BytesReturned;
- if (!DeviceIoControl(m_hDrive, IOCTL_DVD_READ_KEY, key, key->KeyLength, key, key->KeyLength, &BytesReturned, nullptr)) {
+ DWORD dwBytesReturned;
+ if (!DeviceIoControl(m_hDrive, IOCTL_DVD_READ_KEY, pKey, pKey->KeyLength, pKey, pKey->KeyLength, &dwBytesReturned, nullptr)) {
DWORD err = GetLastError();
UNREFERENCED_PARAMETER(err);
return false;
@@ -280,19 +301,19 @@ bool CDVDSession::ReadKey(DVD_KEY_TYPE KeyType, BYTE* pKeyData, int lba)
switch (KeyType) {
case DvdChallengeKey:
- Reverse(pKeyData, key->KeyData, 10);
+ Reverse(pKeyData, pKey->KeyData, 10);
break;
case DvdBusKey1:
- Reverse(pKeyData, key->KeyData, 5);
+ Reverse(pKeyData, pKey->KeyData, 5);
break;
case DvdDiskKey:
- memcpy(pKeyData, key->KeyData, 2048);
+ memcpy(pKeyData, pKey->KeyData, 2048);
for (int i = 0; i < 2048 / 5; i++) {
pKeyData[i] ^= m_SessionKey[4 - (i % 5)];
}
break;
case DvdTitleKey:
- memcpy(pKeyData, key->KeyData, 5);
+ memcpy(pKeyData, pKey->KeyData, 5);
for (int i = 0; i < 5; i++) {
pKeyData[i] ^= m_SessionKey[4 - (i % 5)];
}
@@ -456,7 +477,7 @@ bool CVobFile::GetTitleInfo(LPCTSTR fn, ULONG nTitleNum, ULONG& VTSN, ULONG& TTN
return true;
}
-bool CVobFile::Open(CString fn, CAtlList<CString>& vobs, ULONG nProgNum /*= 1*/)
+bool CVobFile::Open(CString fn, CAtlList<CString>& vobs, ULONG nProgNum /*= 1*/, bool bAuthenticate /*= true*/)
{
if (!m_ifoFile.Open(fn, CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone)) {
return false;
@@ -497,7 +518,7 @@ bool CVobFile::Open(CString fn, CAtlList<CString>& vobs, ULONG nProgNum /*= 1*/)
gb.ReadBuffer((BYTE*)lang, 2);
gb.ReadDword();// skip
if (ToAdd) {
- m_pStream_Lang[ToAdd + i] = ISO6391ToLanguage(lang);
+ m_pStream_Lang[ToAdd + i] = ISOLang::ISO6391ToLanguage(lang);
}
}
@@ -511,7 +532,7 @@ bool CVobFile::Open(CString fn, CAtlList<CString>& vobs, ULONG nProgNum /*= 1*/)
char lang[2];
gb_s.ReadBuffer((BYTE*)lang, 2);
gb_s.ReadShort();
- m_pStream_Lang[0x20 + i] = ISO6391ToLanguage(lang);
+ m_pStream_Lang[0x20 + i] = ISOLang::ISO6391ToLanguage(lang);
}
// Chapters ...
@@ -533,7 +554,7 @@ bool CVobFile::Open(CString fn, CAtlList<CString>& vobs, ULONG nProgNum /*= 1*/)
int cellTableOffset = ReadShort();
REFERENCE_TIME rtDuration = 0;
m_pChapters[0] = 0;
- for (int currentProgram = 0; currentProgram < programChainPrograms; currentProgram++) {
+ for (BYTE currentProgram = 0; currentProgram < programChainPrograms; currentProgram++) {
m_ifoFile.Seek(pcgITPosition + chainOffset + programMapOffset + currentProgram, CFile::begin);
byte entryCell = ReadByte();
byte exitCell = entryCell;
@@ -613,10 +634,10 @@ bool CVobFile::Open(CString fn, CAtlList<CString>& vobs, ULONG nProgNum /*= 1*/)
}
}
- return Open(vobs, offset);
+ return Open(vobs, offset, bAuthenticate);
}
-bool CVobFile::Open(const CAtlList<CString>& vobs, int offset)
+bool CVobFile::Open(const CAtlList<CString>& vobs, int offset /*= -1*/, bool bAuthenticate /*= true*/)
{
Close();
@@ -624,11 +645,11 @@ bool CVobFile::Open(const CAtlList<CString>& vobs, int offset)
return false;
}
+ m_offsetAuth = offset;
if (vobs.GetCount() == 1) {
- offset = -1;
+ m_offsetAuth = -1;
}
-
- m_offset = offset;
+ m_offset = std::max(m_offsetAuth, 0);
POSITION pos = vobs.GetHeadPosition();
while (pos) {
@@ -650,11 +671,18 @@ bool CVobFile::Open(const CAtlList<CString>& vobs, int offset)
m_size += f.size;
}
+ return bAuthenticate ? Authenticate() : true;
+}
+
+bool CVobFile::Authenticate()
+{
+ m_fDVD = m_fHasDiscKey = m_fHasTitleKey = false;
+
if (!m_files.IsEmpty() && CDVDSession::Open(m_files[0].fn)) {
for (size_t i = 0; !m_fHasTitleKey && i < m_files.GetCount(); i++) {
if (BeginSession()) {
m_fDVD = true;
- Authenticate();
+ CDVDSession::Authenticate();
m_fHasDiscKey = GetDiscKey();
EndSession();
} else {
@@ -668,11 +696,11 @@ bool CVobFile::Open(const CAtlList<CString>& vobs, int offset)
break;
}
- if (tp_udf_file f = udf_find_file(m_hDrive, 0, CStringA(m_files[i].fn.Mid(m_files[i].fn.Find(':') + 1)))) {
+ if (tp_udf_file f = udf_find_file(m_hDrive, 0, CStringA(m_files[i].fn.Mid(m_files[i].fn.Find(_T(':')) + 1)))) {
DWORD start, end;
if (udf_get_lba(m_hDrive, f, &start, &end)) {
if (BeginSession()) {
- Authenticate();
+ CDVDSession::Authenticate();
m_fHasTitleKey = GetTitleKey(start + f->partition_lba, m_TitleKey);
EndSession();
}
@@ -682,23 +710,23 @@ bool CVobFile::Open(const CAtlList<CString>& vobs, int offset)
}
BYTE key[5];
- if (HasTitleKey(key) && i == 0 && offset >= 0) {
+ if (HasTitleKey(key) && i == 0 && m_offsetAuth >= 0) {
i++;
if (BeginSession()) {
m_fDVD = true;
- Authenticate();
+ CDVDSession::Authenticate();
m_fHasDiscKey = GetDiscKey();
EndSession();
} else {
break;
}
- if (tp_udf_file f = udf_find_file(m_hDrive, 0, CStringA(m_files[i].fn.Mid(m_files[i].fn.Find(':') + 1)))) {
+ if (tp_udf_file f = udf_find_file(m_hDrive, 0, CStringA(m_files[i].fn.Mid(m_files[i].fn.Find(_T(':')) + 1)))) {
DWORD start, end;
if (udf_get_lba(m_hDrive, f, &start, &end)) {
if (BeginSession()) {
- Authenticate();
+ CDVDSession::Authenticate();
m_fHasTitleKey = GetTitleKey(start + f->partition_lba, m_TitleKey);
EndSession();
}
@@ -714,19 +742,16 @@ bool CVobFile::Open(const CAtlList<CString>& vobs, int offset)
}
}
}
- /*
- if(!m_files.IsEmpty() && !m_fDVD)
- {
- CString fn = m_files[0].fn;
- fn.MakeLower();
- if(fn.Find(_T(":\\video_ts")) == 1 && GetDriveType(fn.Left(3)) == DRIVE_CDROM)
- {
- m_fDVD = true;
- }
+ /*if(!m_files.IsEmpty() && !m_fDVD) {
+ CString fn = m_files[0].fn;
+ fn.MakeLower();
+
+ if(fn.Find(_T(":\\video_ts")) == 1 && GetDriveType(fn.Left(3)) == DRIVE_CDROM)
+ {
+ m_fDVD = true;
}
- */
- m_offset = std::max(offset, 0);
+ }*/
return true;
}
@@ -736,7 +761,7 @@ void CVobFile::Close()
CDVDSession::Close();
m_files.RemoveAll();
m_iFile = -1;
- m_pos = m_size = m_offset = 0;
+ m_pos = m_size = m_offset = m_offsetAuth = 0;
m_file.Close();
m_fDVD = m_fHasDiscKey = m_fHasTitleKey = false;
}
@@ -830,6 +855,7 @@ BSTR CVobFile::GetTrackName(UINT aTrackIdx) const
REFERENCE_TIME CVobFile::GetChapterOffset(UINT ChapterNumber) const
{
REFERENCE_TIME rtChapterOffset = 0;
- m_pChapters.Lookup(ChapterNumber, rtChapterOffset);
+ ASSERT(ChapterNumber < BYTE_MAX);
+ m_pChapters.Lookup((BYTE)ChapterNumber, rtChapterOffset);
return rtChapterOffset;
}
diff --git a/src/DeCSS/VobFile.h b/src/DeCSS/VobFile.h
index 2a88aed1b..08ef0e2e4 100644
--- a/src/DeCSS/VobFile.h
+++ b/src/DeCSS/VobFile.h
@@ -61,7 +61,7 @@ class CVobFile : public CDVDSession
CAtlArray<file_t> m_files;
int m_iFile;
- int m_pos, m_size, m_offset;
+ int m_pos, m_size, m_offset, m_offsetAuth;
// currently opened file
CLBAFile m_file;
@@ -83,8 +83,9 @@ public:
bool HasDiscKey(BYTE* key) const;
bool HasTitleKey(BYTE* key) const;
- bool Open(CString fn, CAtlList<CString>& files /* out */, ULONG nProgNum = 1); // vts ifo
- bool Open(const CAtlList<CString>& files, int offset = -1); // vts vobs, video vob offset in lba
+ bool Open(CString fn, CAtlList<CString>& files /* out */, ULONG nProgNum = 1, bool bAuthenticate = true); // vts ifo
+ bool Open(const CAtlList<CString>& files, int offset = -1, bool bAuthenticate = true); // vts vobs, video vob offset in lba
+ bool Authenticate();
void Close();
int GetLength() const;
diff --git a/src/DeCSS/udf.cpp b/src/DeCSS/udf.cpp
index fcf6c7997..ac1e08786 100644
--- a/src/DeCSS/udf.cpp
+++ b/src/DeCSS/udf.cpp
@@ -126,7 +126,7 @@ tp_udf_file udf_get_root(const HANDLE hDrive, const WORD partition_number)
if (vol_valid) {
// extract vol->FileSetDescriptorSequence
FileDescriptorSequence_lba = vol->FileSetDescriptorSequence.Location.Location;
- DWORD FileDescriptorSequence_lba_end = FileDescriptorSequence_lba + ((vol->FileSetDescriptorSequence.Length & udf_LengthMask) - 1) / sec_size;
+ // DWORD FileDescriptorSequence_lba_end = FileDescriptorSequence_lba + ((vol->FileSetDescriptorSequence.Length & udf_LengthMask) - 1) / sec_size;
}
}
} else {
diff --git a/src/MPCTestAPI/MPCTestAPI.sln b/src/MPCTestAPI/MPCTestAPI.sln
index af7cfe83a..90832366c 100644
--- a/src/MPCTestAPI/MPCTestAPI.sln
+++ b/src/MPCTestAPI/MPCTestAPI.sln
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.30723.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MPCTestAPI", "MPCTestAPI.vcxproj", "{A1F84246-B9A1-455F-97E4-D730AB089947}"
EndProject
diff --git a/src/MPCTestAPI/MPCTestAPI.vcxproj b/src/MPCTestAPI/MPCTestAPI.vcxproj
index 9d1ecb2eb..51c325e84 100644
--- a/src/MPCTestAPI/MPCTestAPI.vcxproj
+++ b/src/MPCTestAPI/MPCTestAPI.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,61 +34,15 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\$(Configuration)_$(Platform)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\$(Configuration)_$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\obj\$(Configuration)_$(Platform)\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\obj\$(Configuration)_$(Platform)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\$(Configuration)_$(Platform)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\$(Configuration)_$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\obj\$(Configuration)_$(Platform)\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\obj\$(Configuration)_$(Platform)\</IntDir>
+ <OutDir>$(SolutionDir)bin\$(Configuration)_$(Platform)\</OutDir>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_AFX_NO_MFC_CONTROLS_IN_DIALOGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\MPCTestAPI.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_AFX_NO_MFC_CONTROLS_IN_DIALOGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\MPCTestAPI.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_AFX_NO_MFC_CONTROLS_IN_DIALOGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\MPCTestAPI.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_AFX_NO_MFC_CONTROLS_IN_DIALOGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level4</WarningLevel>
diff --git a/src/MPCTestAPI/MPCTestAPI.vcxproj.filters b/src/MPCTestAPI/MPCTestAPI.vcxproj.filters
index 15a195893..c41d5ada2 100644
--- a/src/MPCTestAPI/MPCTestAPI.vcxproj.filters
+++ b/src/MPCTestAPI/MPCTestAPI.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{964fcf6f-5fba-4c1a-a7f3-fe297436533d}</UniqueIdentifier>
diff --git a/src/MPCTestAPI/MPCTestAPIDlg.cpp b/src/MPCTestAPI/MPCTestAPIDlg.cpp
index 6ae36cc92..6a286e6e5 100644
--- a/src/MPCTestAPI/MPCTestAPIDlg.cpp
+++ b/src/MPCTestAPI/MPCTestAPIDlg.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2008-2014 see Authors.txt
+ * (C) 2008-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -100,11 +100,9 @@ END_MESSAGE_MAP()
CRegisterCopyDataDlg::CRegisterCopyDataDlg(CWnd* pParent /*=nullptr*/)
: CDialog(CRegisterCopyDataDlg::IDD, pParent)
- , m_strMPCPath(_T(""))
- , m_txtCommand(_T(""))
- , m_nCommandType(0)
- , m_hWndMPC(nullptr)
, m_RemoteWindow(nullptr)
+ , m_hWndMPC(nullptr)
+ , m_nCommandType(0)
{
//{{AFX_DATA_INIT(CRegisterCopyDataDlg)
// NOTE: the ClassWizard will add member initialization here
diff --git a/src/MPCTestAPI/res/MPCTestAPI.exe.manifest b/src/MPCTestAPI/res/MPCTestAPI.exe.manifest
index ed5fbaefa..996ed084e 100644
--- a/src/MPCTestAPI/res/MPCTestAPI.exe.manifest
+++ b/src/MPCTestAPI/res/MPCTestAPI.exe.manifest
@@ -32,6 +32,7 @@
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
diff --git a/src/MathLibFix/MathLibFix.cpp b/src/MathLibFix/MathLibFix.cpp
deleted file mode 100644
index 32154e0d0..000000000
--- a/src/MathLibFix/MathLibFix.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * (C) 2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <math.h>
-#include "MathLibFix.h"
-
-
-void WorkAroundMathLibraryBug()
-{
-#ifdef _WIN64
- // Temporary disable the use of FMA3 to work around a bug affecting the x64 math library
- // See http://connect.microsoft.com/VisualStudio/feedback/details/811093
- _set_FMA3_enable(0);
-#if (_MSC_FULL_VER > 180021005)
-#pragma message("WARNING: Check if bug http://connect.microsoft.com/VisualStudio/feedback/details/811093 is fixed")
-#endif
-#endif
-}
diff --git a/src/MathLibFix/MathLibFix.vcxproj b/src/MathLibFix/MathLibFix.vcxproj
deleted file mode 100644
index 50e39a6da..000000000
--- a/src/MathLibFix/MathLibFix.vcxproj
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{FC9FC17F-70BF-4ACA-8285-C24D1889BACB}</ProjectGuid>
- <RootNamespace>DSUtil</RootNamespace>
- <Keyword>MFCProj</Keyword>
- <ProjectName>MathLibFix</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <Import Project="..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;..\thirdparty\VirtualDub\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;..\thirdparty\VirtualDub\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;..\thirdparty\VirtualDub\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;..\thirdparty\VirtualDub\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="MathLibFix.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="MathLibFix.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/src/MathLibFix/MathLibFix.vcxproj.filters b/src/MathLibFix/MathLibFix.vcxproj.filters
deleted file mode 100644
index 000728e1f..000000000
--- a/src/MathLibFix/MathLibFix.vcxproj.filters
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{7a9014bb-a149-4bb1-be1b-b988a38f79d0}</UniqueIdentifier>
- <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{2b09c18b-87fc-47da-a366-3e14c0b9d40f}</UniqueIdentifier>
- <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="MathLibFix.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="MathLibFix.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/src/SubPic/CoordGeom.cpp b/src/SubPic/CoordGeom.cpp
index 28a6e978d..4bb5dfaaa 100644
--- a/src/SubPic/CoordGeom.cpp
+++ b/src/SubPic/CoordGeom.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,23 +20,29 @@
*/
#include "stdafx.h"
-#include <math.h>
#include "CoordGeom.h"
+#include "../DSUtil/DSUtil.h"
+#include <cmath>
+
+static bool IsZero(float d)
+{
+ return IsEqual(d, 0.0f);
+}
//
// Vector
//
-Vector::Vector(float x, float y, float z)
- : x(x), y(y), z(z)
+Vector::Vector(float _x, float _y, float _z)
+ : x(_x), y(_y), z(_z)
{
}
-void Vector::Set(float x, float y, float z)
+void Vector::Set(float _x, float _y, float _z)
{
- this->x = x;
- this->y = y;
- this->z = z;
+ x = _x;
+ y = _y;
+ z = _z;
}
float Vector::Length() const
@@ -101,11 +107,11 @@ void Vector::Angle(float& u, float& v) const
u = asin(n.y);
if (IsZero(n.z)) {
- v = (float)M_PI_2 * Sgn(n.x);
+ v = (float)M_PI_2 * SGN(n.x);
} else if (n.z > 0) {
v = atan(n.x / n.z);
} else if (n.z < 0) {
- v = IsZero(n.x) ? (float)M_PI : ((float)M_PI * Sgn(n.x) + atan(n.x / n.z));
+ v = IsZero(n.x) ? (float)M_PI : ((float)M_PI * SGN(n.x) + atan(n.x / n.z));
}
}
@@ -343,23 +349,23 @@ Vector& Vector::operator /= (const Vector& v)
// Ray
//
-Ray::Ray(const Vector& p, const Vector& d)
- : p(p)
- , d(d)
+Ray::Ray(const Vector& _p, const Vector& _d)
+ : p(_p)
+ , d(_d)
{
}
-void Ray::Set(const Vector& p, const Vector& d)
+void Ray::Set(const Vector& _p, const Vector& _d)
{
- this->p = p;
- this->d = d;
+ p = _p;
+ d = _d;
}
float Ray::GetDistanceFrom(const Ray& r) const
{
float t = (d | r.d);
if (IsZero(t)) {
- return -BIGNUMBER; // plane is parallel to the ray, return -infinite
+ return -std::numeric_limits<float>::infinity(); // plane is parallel to the ray, return -infinite
}
return (((r.p - p) | r.d) / t);
}
diff --git a/src/SubPic/CoordGeom.h b/src/SubPic/CoordGeom.h
index bc20606e0..987a30d82 100644
--- a/src/SubPic/CoordGeom.h
+++ b/src/SubPic/CoordGeom.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,15 +21,9 @@
#pragma once
-#include <math.h>
+#include <cmath>
#include <array>
-#define EPSILON (1e-7)
-#define BIGNUMBER (1e+9)
-#define IsZero(d) (fabs(d) < EPSILON)
-#define Sgn(d) (IsZero(d) ? 0 : (d) > 0 ? 1 : -1)
-//#define SgnPow(d, p) (IsZero(d) ? 0 : (pow(fabs(d), p) * Sgn(d)))
-
class Vector
{
public:
diff --git a/src/SubPic/DX7SubPic.cpp b/src/SubPic/DX7SubPic.cpp
deleted file mode 100644
index e67e744e9..000000000
--- a/src/SubPic/DX7SubPic.cpp
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include "DX7SubPic.h"
-#include <ddraw.h>
-
-//
-// CDX7SubPic
-//
-
-CDX7SubPic::CDX7SubPic(IDirect3DDevice7* pD3DDev, IDirectDrawSurface7* pSurface)
- : m_pSurface(pSurface)
- , m_pD3DDev(pD3DDev)
-{
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- if (SUCCEEDED(m_pSurface->GetSurfaceDesc(&ddsd))) {
- m_maxsize.SetSize(ddsd.dwWidth, ddsd.dwHeight);
- m_rcDirty.SetRect(0, 0, ddsd.dwWidth, ddsd.dwHeight);
- }
-}
-
-// ISubPic
-
-STDMETHODIMP_(void*) CDX7SubPic::GetObject()
-{
- return (IDirectDrawSurface7*)m_pSurface;
-}
-
-STDMETHODIMP CDX7SubPic::GetDesc(SubPicDesc& spd)
-{
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- if (FAILED(m_pSurface->GetSurfaceDesc(&ddsd))) {
- return E_FAIL;
- }
-
- spd.type = 0;
- spd.w = m_size.cx;
- spd.h = m_size.cy;
- spd.bpp = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount;
- spd.pitch = ddsd.lPitch;
- spd.bits = (BYTE*)ddsd.lpSurface; // should be NULL
- spd.vidrect = m_vidrect;
-
- return S_OK;
-}
-
-STDMETHODIMP CDX7SubPic::CopyTo(ISubPic* pSubPic)
-{
- HRESULT hr;
- if (FAILED(hr = __super::CopyTo(pSubPic))) {
- return hr;
- }
-
- CPoint p = m_rcDirty.TopLeft();
- hr = m_pD3DDev->Load((IDirectDrawSurface7*)pSubPic->GetObject(), &p, m_pSurface, m_rcDirty, 0);
-
- return SUCCEEDED(hr) ? S_OK : E_FAIL;
-}
-
-STDMETHODIMP CDX7SubPic::ClearDirtyRect(DWORD color)
-{
- if (m_rcDirty.IsRectEmpty()) {
- return S_FALSE;
- }
-
- DDBLTFX fx;
- INITDDSTRUCT(fx);
- fx.dwFillColor = color;
- m_pSurface->Blt(&m_rcDirty, nullptr, nullptr, DDBLT_WAIT | DDBLT_COLORFILL, &fx);
-
- m_rcDirty.SetRectEmpty();
-
- return S_OK;
-}
-
-STDMETHODIMP CDX7SubPic::Lock(SubPicDesc& spd)
-{
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- if (FAILED(m_pSurface->Lock(nullptr, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, nullptr))) {
- return E_FAIL;
- }
-
- spd.type = 0;
- spd.w = m_size.cx;
- spd.h = m_size.cy;
- spd.bpp = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount;
- spd.pitch = ddsd.lPitch;
- spd.bits = (BYTE*)ddsd.lpSurface;
- spd.vidrect = m_vidrect;
-
- return S_OK;
-}
-
-STDMETHODIMP CDX7SubPic::Unlock(RECT* pDirtyRect)
-{
- m_pSurface->Unlock(nullptr);
-
- if (pDirtyRect) {
- m_rcDirty = *pDirtyRect;
- m_rcDirty.InflateRect(1, 1);
- m_rcDirty &= CRect(CPoint(0, 0), m_size);
- } else {
- m_rcDirty = CRect(CPoint(0, 0), m_size);
- }
-
- return S_OK;
-}
-
-STDMETHODIMP CDX7SubPic::AlphaBlt(RECT* pSrc, RECT* pDst, SubPicDesc* pTarget)
-{
- ASSERT(pTarget == nullptr);
-
- if (!m_pD3DDev || !m_pSurface || !pSrc || !pDst) {
- return E_POINTER;
- }
-
- CRect src(*pSrc), dst(*pDst);
-
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- if (FAILED(m_pSurface->GetSurfaceDesc(&ddsd))) {
- return E_FAIL;
- }
-
- float w = (float)ddsd.dwWidth;
- float h = (float)ddsd.dwHeight;
-
- // Be careful with the code that follows. Some compilers (e.g. Visual Studio 2012) used to miscompile
- // it in some cases (namely x64 with optimizations /O2 /Ot). This bug led pVertices not to be correctly
- // initialized and thus the subtitles weren't shown.
- struct {
- float x, y, z, rhw;
- float tu, tv;
- } pVertices[] = {
- {(float)dst.left, (float)dst.top, 0.5f, 2.0f, (float)src.left / w, (float)src.top / h},
- {(float)dst.right, (float)dst.top, 0.5f, 2.0f, (float)src.right / w, (float)src.top / h},
- {(float)dst.left, (float)dst.bottom, 0.5f, 2.0f, (float)src.left / w, (float)src.bottom / h},
- {(float)dst.right, (float)dst.bottom, 0.5f, 2.0f, (float)src.right / w, (float)src.bottom / h},
- };
-
- for (size_t i = 0; i < _countof(pVertices); i++) {
- pVertices[i].x -= 0.5f;
- pVertices[i].y -= 0.5f;
- }
-
- m_pD3DDev->SetTexture(0, m_pSurface);
-
- m_pD3DDev->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE);
- m_pD3DDev->SetRenderState(D3DRENDERSTATE_LIGHTING, FALSE);
- m_pD3DDev->SetRenderState(D3DRENDERSTATE_BLENDENABLE, TRUE);
- m_pD3DDev->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); // pre-multiplied src and ...
- m_pD3DDev->SetRenderState(D3DRENDERSTATE_DESTBLEND, m_bInvAlpha ? D3DBLEND_INVSRCALPHA : D3DBLEND_SRCALPHA); // ... inverse alpha channel for dst
-
- m_pD3DDev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
- m_pD3DDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
- m_pD3DDev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
-
- if (src == dst) {
- m_pD3DDev->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTFG_POINT);
- m_pD3DDev->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTFG_POINT);
- } else {
- m_pD3DDev->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTFG_LINEAR);
- m_pD3DDev->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTFG_LINEAR);
- }
- m_pD3DDev->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTFP_NONE);
-
- m_pD3DDev->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP);
-
- /*//
- D3DDEVICEDESC7 d3ddevdesc;
- m_pD3DDev->GetCaps(&d3ddevdesc);
- if (d3ddevdesc.dpcTriCaps.dwAlphaCmpCaps & D3DPCMPCAPS_LESS)
- {
- m_pD3DDev->SetRenderState(D3DRENDERSTATE_ALPHAREF, (DWORD)0x000000FE);
- m_pD3DDev->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE, TRUE);
- m_pD3DDev->SetRenderState(D3DRENDERSTATE_ALPHAFUNC, D3DPCMPCAPS_LESS);
- }
- *///
-
- if (FAILED(m_pD3DDev->BeginScene())) {
- return E_FAIL;
- }
-
- m_pD3DDev->DrawPrimitive(D3DPT_TRIANGLESTRIP,
- D3DFVF_XYZRHW | D3DFVF_TEX1,
- pVertices, 4, D3DDP_WAIT);
- m_pD3DDev->EndScene();
-
- m_pD3DDev->SetTexture(0, nullptr);
-
- return S_OK;
-}
-
-//
-// CDX7SubPicAllocator
-//
-
-CDX7SubPicAllocator::CDX7SubPicAllocator(IDirect3DDevice7* pD3DDev, SIZE maxsize)
- : CSubPicAllocatorImpl(maxsize, true)
- , m_pD3DDev(pD3DDev)
- , m_maxsize(maxsize)
-{
-}
-
-// ISubPicAllocator
-
-STDMETHODIMP CDX7SubPicAllocator::ChangeDevice(IUnknown* pDev)
-{
- CComQIPtr<IDirect3DDevice7, &IID_IDirect3DDevice7> pD3DDev = pDev;
- CheckPointer(pD3DDev, E_NOINTERFACE);
-
- CAutoLock cAutoLock(this);
- HRESULT hr = S_FALSE;
- if (m_pD3DDev != pD3DDev) {
- m_pD3DDev = pD3DDev;
- hr = __super::ChangeDevice(pDev);
- }
-
- return hr;
-}
-
-STDMETHODIMP CDX7SubPicAllocator::SetMaxTextureSize(SIZE maxTextureSize)
-{
- CAutoLock cAutoLock(this);
- if (m_maxsize != maxTextureSize) {
- m_maxsize = maxTextureSize;
- }
-
- return SetCurSize(m_maxsize);
-}
-
-// ISubPicAllocatorImpl
-
-bool CDX7SubPicAllocator::Alloc(bool fStatic, ISubPic** ppSubPic)
-{
- if (!ppSubPic) {
- return false;
- }
-
- if (m_maxsize.cx <= 0 || m_maxsize.cy <= 0) {
- return false;
- }
-
- CAutoLock cAutoLock(this);
-
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
- ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE | (fStatic ? DDSCAPS_SYSTEMMEMORY : 0);
- ddsd.ddsCaps.dwCaps2 = fStatic ? 0 : (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_HINTSTATIC);
- ddsd.dwWidth = m_maxsize.cx;
- ddsd.dwHeight = m_maxsize.cy;
- ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
- ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS;
- ddsd.ddpfPixelFormat.dwRGBBitCount = 32;
- ddsd.ddpfPixelFormat.dwRGBAlphaBitMask = 0xFF000000;
- ddsd.ddpfPixelFormat.dwRBitMask = 0x00FF0000;
- ddsd.ddpfPixelFormat.dwGBitMask = 0x0000FF00;
- ddsd.ddpfPixelFormat.dwBBitMask = 0x000000FF;
-
- CComPtr<IDirect3D7> pD3D;
- CComQIPtr<IDirectDraw7, &IID_IDirectDraw7> pDD;
- if (FAILED(m_pD3DDev->GetDirect3D(&pD3D)) || !pD3D || !(pDD = pD3D)) {
- return false;
- }
-
- CComPtr<IDirectDrawSurface7> pSurface;
- if (FAILED(pDD->CreateSurface(&ddsd, &pSurface, nullptr))) {
- return false;
- }
-
- try {
- *ppSubPic = DEBUG_NEW CDX7SubPic(m_pD3DDev, pSurface);
- } catch (CMemoryException* e) {
- e->Delete();
- return false;
- }
-
- (*ppSubPic)->AddRef();
-
- return true;
-}
diff --git a/src/SubPic/DX7SubPic.h b/src/SubPic/DX7SubPic.h
deleted file mode 100644
index 8ea1ce7e4..000000000
--- a/src/SubPic/DX7SubPic.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include "SubPicImpl.h"
-#include "SubPicAllocatorPresenterImpl.h"
-#include "dx/d3d.h"
-
-// CDX7SubPic
-
-class CDX7SubPic : public CSubPicImpl
-{
- CComPtr<IDirect3DDevice7> m_pD3DDev;
- CComPtr<IDirectDrawSurface7> m_pSurface;
-
-protected:
- STDMETHODIMP_(void*) GetObject(); // returns IDirectDrawSurface7*
-
-public:
- CDX7SubPic(IDirect3DDevice7* pD3DDev, IDirectDrawSurface7* pSurface);
-
- // ISubPic
- STDMETHODIMP GetDesc(SubPicDesc& spd);
- STDMETHODIMP CopyTo(ISubPic* pSubPic);
- STDMETHODIMP ClearDirtyRect(DWORD color);
- STDMETHODIMP Lock(SubPicDesc& spd);
- STDMETHODIMP Unlock(RECT* pDirtyRect);
- STDMETHODIMP AlphaBlt(RECT* pSrc, RECT* pDst, SubPicDesc* pTarget);
-};
-
-// CDX7SubPicAllocator
-
-class CDX7SubPicAllocator : public CSubPicAllocatorImpl, public CCritSec
-{
- CComPtr<IDirect3DDevice7> m_pD3DDev;
- CSize m_maxsize;
-
- bool Alloc(bool fStatic, ISubPic** ppSubPic);
-
-public:
- CDX7SubPicAllocator(IDirect3DDevice7* pD3DDev, SIZE maxsize);
-
- // ISubPicAllocator
- STDMETHODIMP ChangeDevice(IUnknown* pDev);
- STDMETHODIMP SetMaxTextureSize(SIZE MaxTextureSize);
-};
diff --git a/src/SubPic/ISubPic.h b/src/SubPic/ISubPic.h
index fa89052c7..f767dc4cd 100644
--- a/src/SubPic/ISubPic.h
+++ b/src/SubPic/ISubPic.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -34,7 +34,7 @@ struct SubPicDesc {
BYTE* bitsV;
RECT vidrect; // video rectangle
- struct SubPicDesc()
+ SubPicDesc()
: type(0)
, w(0)
, h(0)
@@ -59,7 +59,7 @@ enum RelativeTo {
// ISubPic
//
-interface __declspec(uuid("449E11F3-52D1-4a27-AA61-E2733AC92CC0"))
+interface __declspec(uuid("DA3A5B51-958C-4C28-BF66-68D7947577A2"))
ISubPic :
public IUnknown {
static const REFERENCE_TIME INVALID_TIME = -1;
@@ -85,7 +85,10 @@ public IUnknown {
STDMETHOD(Unlock)(RECT* pDirtyRect /*[in]*/) PURE;
STDMETHOD(AlphaBlt)(RECT * pSrc, RECT * pDst, SubPicDesc* pTarget = nullptr /*[in]*/) PURE;
- STDMETHOD(GetSourceAndDest)(RECT rcWindow /*[in]*/, RECT rcVideo /*[in]*/, RECT* pRcSource /*[out]*/, RECT* pRcDest /*[out]*/) const PURE;
+ STDMETHOD(GetSourceAndDest)(RECT rcWindow /*[in]*/, RECT rcVideo /*[in]*/,
+ RECT* pRcSource /*[out]*/, RECT* pRcDest /*[out]*/,
+ const double videoStretchFactor = 1.0 /*[in]*/,
+ int xOffsetInPixels = 1 /*[in]*/) const PURE;
STDMETHOD(SetVirtualTextureSize)(const SIZE pSize, const POINT pTopLeft) PURE;
STDMETHOD(GetRelativeTo)(RelativeTo* pRelativeTo /*[out]*/) const PURE;
STDMETHOD(SetRelativeTo)(RelativeTo relativeTo /*[in]*/) PURE;
@@ -205,6 +208,8 @@ public ISubPicAllocatorPresenter {
STDMETHOD_(bool, IsRendering)() PURE;
STDMETHOD(SetIsRendering)(bool bIsRendering) PURE;
+
+ STDMETHOD(SetDefaultVideoAngle)(Vector v) PURE;
};
//
@@ -219,6 +224,7 @@ public IPersist {
STDMETHOD_(int, GetStream)() PURE;
STDMETHOD(SetStream)(int iStream) PURE;
STDMETHOD(Reload)() PURE;
+ STDMETHOD(SetSourceTargetInfo)(CString yuvMatrix, int targetBlackLevel, int targetWhiteLevel) PURE;
// TODO: get rid of IPersist to identify type and use only
// interface functions to modify the settings of the substream
diff --git a/src/SubPic/ISubRender.h b/src/SubPic/ISubRender.h
index ad71f59e2..f2ad2f19b 100644
--- a/src/SubPic/ISubRender.h
+++ b/src/SubPic/ISubRender.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,32 +21,53 @@
#pragma once
-#include <d3d9.h>
+#include <ObjBase.h>
+#include <strmif.h>
-interface __declspec(uuid("CD6D2AA5-20D3-4ebe-A8A9-34D3B00CC253"))
-ISubRenderCallback :
-public IUnknown {
+interface IDirect3DDevice9;
+
+DECLARE_INTERFACE_IID_(ISubRenderCallback, IUnknown, "CD6D2AA5-20D3-4ebe-A8A9-34D3B00CC253")
+{
// NULL means release current device, textures and other resources
- STDMETHOD(SetDevice)(IDirect3DDevice9 * dev) PURE;
+ STDMETHOD(SetDevice)(IDirect3DDevice9* dev) PURE;
// destination video rectangle, will be inside (0, 0)-(width, height)
// width,height is the size of the entire output window
STDMETHOD(Render)(REFERENCE_TIME rtStart,
- int left, int top, int bottom, int right,
- int width, int height) PURE;
+ int left, int top, int right, int bottom,
+ int width, int height) PURE;
};
-interface __declspec(uuid("E602585E-C05A-4828-AC69-AF92997F2E0C"))
-ISubRenderCallback2 :
-public ISubRenderCallback {
+
+DECLARE_INTERFACE_IID_(ISubRenderCallback2, ISubRenderCallback, "E602585E-C05A-4828-AC69-AF92997F2E0C")
+{
STDMETHOD(RenderEx)(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop,
- REFERENCE_TIME AvgTimePerFrame,
- int left, int top, int right, int bottom,
- int width, int height) PURE;
+ REFERENCE_TIME avgTimePerFrame,
+ int left, int top, int right, int bottom,
+ int width, int height) PURE;
+};
+
+DECLARE_INTERFACE_IID_(ISubRenderCallback3, ISubRenderCallback2, "BAC4273A-3EAD-47F5-9710-8488E52AC618")
+{
+ STDMETHOD(RenderEx2)(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop,
+ REFERENCE_TIME avgTimePerFrame, RECT croppedVideoRect,
+ RECT originalVideoRect, RECT viewportRect,
+ const double videoStretchFactor = 1.0) PURE;
+};
+
+// const static DWORD SUBRENDER_LEFT_EYE = 1;
+// const static DWORD SUBRENDER_RIGHT_EYE = 2;
+
+DECLARE_INTERFACE_IID_(ISubRenderCallback4, ISubRenderCallback3, "C89CF1D4-29C5-4A96-8AAC-528EC6F7AF1E")
+{
+ STDMETHOD(RenderEx3)(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop,
+ REFERENCE_TIME avgTimePerFrame, RECT croppedVideoRect,
+ RECT originalVideoRect, RECT viewportRect,
+ const double videoStretchFactor = 1.0,
+ int xOffsetInPixels = 0, DWORD flags = 0) PURE;
};
-interface __declspec(uuid("9CC7F9F7-3ED1-493c-AF65-527EA1D9947F"))
-ISubRender :
-public IUnknown {
- STDMETHOD(SetCallback)(ISubRenderCallback * cb) PURE;
+DECLARE_INTERFACE_IID_(ISubRender, IUnknown, "9CC7F9F7-3ED1-493c-AF65-527EA1D9947F")
+{
+ STDMETHOD(SetCallback)(ISubRenderCallback* cb) PURE;
};
diff --git a/src/SubPic/MemSubPic.cpp b/src/SubPic/MemSubPic.cpp
index 1505f4cb0..defab054d 100644
--- a/src/SubPic/MemSubPic.cpp
+++ b/src/SubPic/MemSubPic.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -62,7 +62,7 @@ void ColorConvInit()
for (int i = 0; i < 256; i++) {
clipBase[i] = 0;
- clipBase[i + 256] = i;
+ clipBase[i + 256] = BYTE(i);
clipBase[i + 512] = 255;
}
@@ -84,8 +84,9 @@ void ColorConvInit()
// CMemSubPic
//
-CMemSubPic::CMemSubPic(const SubPicDesc& spd)
- : m_spd(spd)
+CMemSubPic::CMemSubPic(const SubPicDesc& spd, CMemSubPicAllocator* pAllocator)
+ : m_pAllocator(pAllocator)
+ , m_spd(spd)
{
m_maxsize.SetSize(spd.w, spd.h);
m_rcDirty.SetRect(0, 0, spd.w, spd.h);
@@ -93,7 +94,10 @@ CMemSubPic::CMemSubPic(const SubPicDesc& spd)
CMemSubPic::~CMemSubPic()
{
- delete [] m_spd.bits;
+ m_pAllocator->FreeSpdBits(m_spd);
+ if (m_resizedSpd) {
+ m_pAllocator->FreeSpdBits(*m_resizedSpd);
+ }
}
// ISubPic
@@ -106,8 +110,8 @@ STDMETHODIMP_(void*) CMemSubPic::GetObject()
STDMETHODIMP CMemSubPic::GetDesc(SubPicDesc& spd)
{
spd.type = m_spd.type;
- spd.w = m_size.cx;
- spd.h = m_size.cy;
+ spd.w = m_spd.w;
+ spd.h = m_spd.h;
spd.bpp = m_spd.bpp;
spd.pitch = m_spd.pitch;
spd.bits = m_spd.bits;
@@ -130,6 +134,13 @@ STDMETHODIMP CMemSubPic::CopyTo(ISubPic* pSubPic)
return E_FAIL;
}
+ if (auto subPic = dynamic_cast<CMemSubPic*>(pSubPic)) {
+ ASSERT(subPic->m_pAllocator == m_pAllocator);
+ ASSERT(subPic->m_resizedSpd == nullptr);
+ // Move because we are not going to reuse it.
+ subPic->m_resizedSpd = std::move(m_resizedSpd);
+ }
+
int w = m_rcDirty.Width(), h = m_rcDirty.Height();
BYTE* s = src.bits + src.pitch * m_rcDirty.top + m_rcDirty.left * 4;
BYTE* d = dst.bits + dst.pitch * m_rcDirty.top + m_rcDirty.left * 4;
@@ -181,26 +192,61 @@ STDMETHODIMP CMemSubPic::Unlock(RECT* pDirtyRect)
return S_OK;
}
- if (m_spd.type == MSP_YUY2 || m_spd.type == MSP_YV12 || m_spd.type == MSP_IYUV || m_spd.type == MSP_AYUV) {
+ CRect r = m_spd.vidrect;
+ CRect rcDirty = m_rcDirty;
+ if (m_spd.h != r.Height() || m_spd.w != r.Width()) {
+ if (!m_resizedSpd) {
+ m_resizedSpd = std::unique_ptr<SubPicDesc>(DEBUG_NEW SubPicDesc);
+ }
+
+ m_resizedSpd->type = m_spd.type;
+ m_resizedSpd->w = r.Width();
+ m_resizedSpd->h = r.Height();
+ m_resizedSpd->pitch = r.Width() * 4;
+ m_resizedSpd->bpp = m_spd.bpp;
+
+ if (!m_resizedSpd->bits) {
+ m_pAllocator->AllocSpdBits(*m_resizedSpd);
+ }
+
+ BitBltFromRGBToRGBStretch(m_resizedSpd->w, m_resizedSpd->h, m_resizedSpd->bits, m_resizedSpd->pitch, m_resizedSpd->bpp
+ , m_spd.w, m_spd.h, m_spd.bits, m_spd.pitch, m_spd.bpp);
+ TRACE("CMemSubPic: Resized SubPic %dx%d -> %dx%d\n", m_spd.w, m_spd.h, r.Width(), r.Height());
+
+ // Set whole resized spd as dirty, we are not going to reuse it.
+ rcDirty.SetRect(0, 0, m_resizedSpd->w, m_resizedSpd->h);
+ } else if (m_resizedSpd) {
+ // Resize is not needed so release m_resizedSpd.
+ m_pAllocator->FreeSpdBits(*m_resizedSpd);
+ m_resizedSpd = nullptr;
+ }
+
+ const SubPicDesc& subPic = m_resizedSpd ? *m_resizedSpd : m_spd;
+
+ if (subPic.type == MSP_YUY2 || subPic.type == MSP_YV12 || subPic.type == MSP_IYUV || subPic.type == MSP_AYUV) {
ColorConvInit();
- if (m_spd.type == MSP_YUY2 || m_spd.type == MSP_YV12 || m_spd.type == MSP_IYUV) {
- m_rcDirty.left &= ~1;
- m_rcDirty.right = (m_rcDirty.right + 1) & ~1;
+ if (subPic.type == MSP_YUY2 || subPic.type == MSP_YV12 || subPic.type == MSP_IYUV) {
+ rcDirty.left &= ~1;
+ rcDirty.right = (rcDirty.right + 1) & ~1;
- if (m_spd.type == MSP_YV12 || m_spd.type == MSP_IYUV) {
- m_rcDirty.top &= ~1;
- m_rcDirty.bottom = (m_rcDirty.bottom + 1) & ~1;
+ if (subPic.type == MSP_YV12 || subPic.type == MSP_IYUV) {
+ rcDirty.top &= ~1;
+ rcDirty.bottom = (rcDirty.bottom + 1) & ~1;
}
}
}
- int w = m_rcDirty.Width(), h = m_rcDirty.Height();
- BYTE* top = m_spd.bits + m_spd.pitch * m_rcDirty.top + m_rcDirty.left * 4;
- BYTE* bottom = top + m_spd.pitch * h;
+ if (!m_resizedSpd) {
+ m_rcDirty = rcDirty;
+ }
+
+ int w = rcDirty.Width(), h = rcDirty.Height();
+ BYTE* top = subPic.bits + subPic.pitch * rcDirty.top + rcDirty.left * 4;
+ BYTE* bottom = top + subPic.pitch * h;
- if (m_spd.type == MSP_RGB16) {
- for (; top < bottom ; top += m_spd.pitch) {
+ if (subPic.type == MSP_RGB16) {
+ for (; top < bottom ; top += subPic.pitch) {
DWORD* s = (DWORD*)top;
DWORD* e = s + w;
for (; s < e; s++) {
@@ -208,8 +254,8 @@ STDMETHODIMP CMemSubPic::Unlock(RECT* pDirtyRect)
//*s = (*s&0xff000000)|((*s>>8)&0xf800)|((*s>>5)&0x07e0)|((*s>>3)&0x001f);
}
}
- } else if (m_spd.type == MSP_RGB15) {
- for (; top < bottom; top += m_spd.pitch) {
+ } else if (subPic.type == MSP_RGB15) {
+ for (; top < bottom; top += subPic.pitch) {
DWORD* s = (DWORD*)top;
DWORD* e = s + w;
for (; s < e; s++) {
@@ -217,14 +263,14 @@ STDMETHODIMP CMemSubPic::Unlock(RECT* pDirtyRect)
//*s = (*s&0xff000000)|((*s>>9)&0x7c00)|((*s>>6)&0x03e0)|((*s>>3)&0x001f);
}
}
- } else if (m_spd.type == MSP_YUY2 || m_spd.type == MSP_YV12 || m_spd.type == MSP_IYUV) {
- for (; top < bottom ; top += m_spd.pitch) {
+ } else if (subPic.type == MSP_YUY2 || subPic.type == MSP_YV12 || subPic.type == MSP_IYUV) {
+ for (; top < bottom ; top += subPic.pitch) {
BYTE* s = top;
BYTE* e = s + w * 4;
for (; s < e; s += 8) { // ARGB ARGB -> AxYU AxYV
if ((s[3] + s[7]) < 0x1fe) {
- s[1] = (c2y_yb[s[0]] + c2y_yg[s[1]] + c2y_yr[s[2]] + 0x108000) >> 16;
- s[5] = (c2y_yb[s[4]] + c2y_yg[s[5]] + c2y_yr[s[6]] + 0x108000) >> 16;
+ s[1] = BYTE((c2y_yb[s[0]] + c2y_yg[s[1]] + c2y_yr[s[2]] + 0x108000) >> 16);
+ s[5] = BYTE((c2y_yb[s[4]] + c2y_yg[s[5]] + c2y_yr[s[6]] + 0x108000) >> 16);
int scaled_y = (s[1] + s[5] - 32) * cy_cy2;
@@ -236,14 +282,14 @@ STDMETHODIMP CMemSubPic::Unlock(RECT* pDirtyRect)
}
}
}
- } else if (m_spd.type == MSP_AYUV) {
- for (; top < bottom ; top += m_spd.pitch) {
+ } else if (subPic.type == MSP_AYUV) {
+ for (; top < bottom ; top += subPic.pitch) {
BYTE* s = top;
BYTE* e = s + w * 4;
for (; s < e; s += 4) { // ARGB -> AYUV
if (s[3] < 0xff) {
- int y = (c2y_yb[s[0]] + c2y_yg[s[1]] + c2y_yr[s[2]] + 0x108000) >> 16;
+ auto y = BYTE((c2y_yb[s[0]] + c2y_yg[s[1]] + c2y_yr[s[2]] + 0x108000) >> 16);
int scaled_y = (y - 32) * cy_cy;
s[1] = clip[((((s[0] << 16) - scaled_y) >> 10) * c2y_cu + 0x800000 + 0x8000) >> 16];
s[0] = clip[((((s[2] << 16) - scaled_y) >> 10) * c2y_cv + 0x800000 + 0x8000) >> 16];
@@ -373,7 +419,7 @@ STDMETHODIMP CMemSubPic::AlphaBlt(RECT* pSrc, RECT* pDst, SubPicDesc* pTarget)
return E_POINTER;
}
- const SubPicDesc& src = m_spd;
+ const SubPicDesc& src = m_resizedSpd ? *m_resizedSpd : m_spd;
SubPicDesc dst = *pTarget; // copy, because we might modify it
if (src.type != dst.type) {
@@ -382,6 +428,10 @@ STDMETHODIMP CMemSubPic::AlphaBlt(RECT* pSrc, RECT* pDst, SubPicDesc* pTarget)
CRect rs(*pSrc), rd(*pDst);
+ if (m_resizedSpd) {
+ rs = rd = CRect(0, 0, m_resizedSpd->w, m_resizedSpd->h);
+ }
+
if (dst.h < 0) {
dst.h = -dst.h;
rd.bottom = dst.h - rd.bottom;
@@ -565,7 +615,7 @@ STDMETHODIMP CMemSubPic::AlphaBlt(RECT* pSrc, RECT* pDst, SubPicDesc* pTarget)
for (; s2 < s2end; s2 += 8, d2++, is2 += 8) {
unsigned int ia = (s2[3] + s2[3 + src.pitch] + is2[3] + is2[3 + src.pitch]) >> 2;
if (ia < 0xff) {
- *d2 = (((*d2 - 0x80) * ia) >> 8) + ((s2[0] + s2[src.pitch]) >> 1);
+ *d2 = BYTE((((*d2 - 0x80) * ia) >> 8) + ((s2[0] + s2[src.pitch]) >> 1));
}
}
}
@@ -586,11 +636,20 @@ CMemSubPicAllocator::CMemSubPicAllocator(int type, SIZE maxsize)
{
}
+CMemSubPicAllocator::~CMemSubPicAllocator()
+{
+ CAutoLock cAutoLock(this);
+
+ for (const auto& p : m_freeMemoryChunks) {
+ delete[] std::get<1>(p);
+ }
+}
+
// ISubPicAllocatorImpl
bool CMemSubPicAllocator::Alloc(bool fStatic, ISubPic** ppSubPic)
{
- if (!ppSubPic) {
+ if (!ppSubPic || m_maxsize.cx <= 0 || m_maxsize.cy <= 0) {
return false;
}
@@ -600,15 +659,14 @@ bool CMemSubPicAllocator::Alloc(bool fStatic, ISubPic** ppSubPic)
spd.bpp = 32;
spd.pitch = (spd.w * spd.bpp) >> 3;
spd.type = m_type;
- try {
- spd.bits = DEBUG_NEW BYTE[spd.pitch * spd.h];
- } catch (CMemoryException* e) {
- e->Delete();
+ spd.vidrect = m_curvidrect;
+
+ if (!AllocSpdBits(spd)) {
return false;
}
try {
- *ppSubPic = DEBUG_NEW CMemSubPic(spd);
+ *ppSubPic = DEBUG_NEW CMemSubPic(spd, this);
} catch (CMemoryException* e) {
e->Delete();
delete [] spd.bits;
@@ -619,3 +677,57 @@ bool CMemSubPicAllocator::Alloc(bool fStatic, ISubPic** ppSubPic)
return true;
}
+
+bool CMemSubPicAllocator::AllocSpdBits(SubPicDesc& spd)
+{
+ CAutoLock cAutoLock(this);
+
+ ASSERT(!spd.bits);
+ ASSERT(spd.pitch * spd.h > 0);
+
+ auto it = std::find_if(m_freeMemoryChunks.cbegin(), m_freeMemoryChunks.cend(), [&](const std::pair<size_t, BYTE*>& p) {
+ return std::get<0>(p) == size_t(spd.pitch) * spd.h;
+ });
+
+ if (it != m_freeMemoryChunks.cend()) {
+ spd.bits = std::get<1>(*it);
+ m_freeMemoryChunks.erase(it);
+ } else {
+ try {
+ spd.bits = DEBUG_NEW BYTE[spd.pitch * spd.h];
+ } catch (CMemoryException* e) {
+ ASSERT(FALSE);
+ e->Delete();
+ return false;
+ }
+ }
+ return true;
+}
+
+void CMemSubPicAllocator::FreeSpdBits(SubPicDesc& spd)
+{
+ CAutoLock cAutoLock(this);
+
+ ASSERT(spd.bits);
+ m_freeMemoryChunks.emplace_back(spd.pitch * spd.h, spd.bits);
+ spd.bits = nullptr;
+}
+
+STDMETHODIMP CMemSubPicAllocator::SetMaxTextureSize(SIZE maxTextureSize)
+{
+ if (m_maxsize != maxTextureSize) {
+ m_maxsize = maxTextureSize;
+ CAutoLock cAutoLock(this);
+ for (const auto& p : m_freeMemoryChunks) {
+ delete[] std::get<1>(p);
+ }
+ m_freeMemoryChunks.clear();
+ }
+ return S_OK;
+}
+
+STDMETHODIMP CMemSubPicAllocator::SetCurVidRect(RECT curvidrect)
+{
+ m_curvidrect = curvidrect;
+ return __super::SetCurVidRect(curvidrect);
+}
diff --git a/src/SubPic/MemSubPic.h b/src/SubPic/MemSubPic.h
index 091a62371..903639c02 100644
--- a/src/SubPic/MemSubPic.h
+++ b/src/SubPic/MemSubPic.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,8 @@
#pragma once
#include "SubPicImpl.h"
+#include <memory>
+#include <vector>
enum {
MSP_RGB32,
@@ -36,16 +38,19 @@ enum {
};
// CMemSubPic
-
+class CMemSubPicAllocator;
class CMemSubPic : public CSubPicImpl
{
+ CComPtr<CMemSubPicAllocator> m_pAllocator;
+
SubPicDesc m_spd;
+ std::unique_ptr<SubPicDesc> m_resizedSpd;
protected:
STDMETHODIMP_(void*) GetObject(); // returns SubPicDesc*
public:
- CMemSubPic(const SubPicDesc& spd);
+ CMemSubPic(const SubPicDesc& spd, CMemSubPicAllocator* pAllocator);
virtual ~CMemSubPic();
// ISubPic
@@ -59,13 +64,23 @@ public:
// CMemSubPicAllocator
-class CMemSubPicAllocator : public CSubPicAllocatorImpl
+class CMemSubPicAllocator : public CSubPicAllocatorImpl, public CCritSec
{
int m_type;
CSize m_maxsize;
+ CRect m_curvidrect;
+
+ std::vector<std::pair<size_t, BYTE*>> m_freeMemoryChunks;
bool Alloc(bool fStatic, ISubPic** ppSubPic);
public:
CMemSubPicAllocator(int type, SIZE maxsize);
+ virtual ~CMemSubPicAllocator();
+
+ bool AllocSpdBits(SubPicDesc& spd);
+ void FreeSpdBits(SubPicDesc& spd);
+
+ STDMETHODIMP SetMaxTextureSize(SIZE maxTextureSize) override;
+ STDMETHODIMP SetCurVidRect(RECT curvidrect) override;
};
diff --git a/src/SubPic/SubPic.vcxproj b/src/SubPic/SubPic.vcxproj
index bb6862015..82ff35e00 100644
--- a/src/SubPic/SubPic.vcxproj
+++ b/src/SubPic/SubPic.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,44 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\include;..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -94,7 +47,6 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CoordGeom.cpp" />
- <ClCompile Include="DX7SubPic.cpp" />
<ClCompile Include="DX9SubPic.cpp" />
<ClCompile Include="MemSubPic.cpp" />
<ClCompile Include="stdafx.cpp">
@@ -109,7 +61,6 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="CoordGeom.h" />
- <ClInclude Include="DX7SubPic.h" />
<ClInclude Include="DX9SubPic.h" />
<ClInclude Include="SubPicQueueSettings.h" />
<ClInclude Include="ISubPic.h" />
diff --git a/src/SubPic/SubPic.vcxproj.filters b/src/SubPic/SubPic.vcxproj.filters
index 545969aea..5970e178b 100644
--- a/src/SubPic/SubPic.vcxproj.filters
+++ b/src/SubPic/SubPic.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{bbd07979-c9e6-4936-b818-b36901e0eca8}</UniqueIdentifier>
@@ -14,9 +14,6 @@
<ClCompile Include="CoordGeom.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="DX7SubPic.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="DX9SubPic.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -49,9 +46,6 @@
<ClInclude Include="CoordGeom.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="DX7SubPic.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="DX9SubPic.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/SubPic/SubPicAllocatorPresenterImpl.cpp b/src/SubPic/SubPicAllocatorPresenterImpl.cpp
index 5e913ccf4..5f5c63999 100644
--- a/src/SubPic/SubPicAllocatorPresenterImpl.cpp
+++ b/src/SubPic/SubPicAllocatorPresenterImpl.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,7 +24,7 @@
#include "../DSUtil/DSUtil.h"
#include "../filters/renderer/VideoRenderers/RenderersSettings.h"
#include "../mpc-hc/VersionInfo.h"
-#include <math.h>
+#include <cmath>
#include "XySubPicQueueImpl.h"
#include "XySubPicProvider.h"
#include <d3d9.h>
@@ -34,23 +34,24 @@
CSubPicAllocatorPresenterImpl::CSubPicAllocatorPresenterImpl(HWND hWnd, HRESULT& hr, CString* _pError)
: CUnknown(NAME("CSubPicAllocatorPresenterImpl"), nullptr)
, m_hWnd(hWnd)
+ , m_rtSubtitleDelay(0)
, m_maxSubtitleTextureSize(0, 0)
, m_nativeVideoSize(0, 0)
, m_aspectRatio(0, 0)
, m_videoRect(0, 0, 0, 0)
, m_windowRect(0, 0, 0, 0)
+ , m_rtNow(0)
, m_fps(25.0)
, m_refreshRate(0)
- , m_rtSubtitleDelay(0)
, m_bDeviceResetRequested(false)
, m_bPendingResetDevice(false)
- , m_rtNow(0)
, m_SubtitleTextureLimit(STATIC)
+ , m_bDefaultVideoAngleSwitchAR(false)
{
if (!IsWindow(m_hWnd)) {
hr = E_INVALIDARG;
if (_pError) {
- *_pError += "Invalid window handle in ISubPicAllocatorPresenterImpl\n";
+ *_pError += _T("Invalid window handle in ISubPicAllocatorPresenterImpl\n");
}
return;
}
@@ -70,6 +71,7 @@ STDMETHODIMP CSubPicAllocatorPresenterImpl::NonDelegatingQueryInterface(REFIID r
QI(ISubPicAllocatorPresenter2)
QI(ISubRenderOptions)
QI(ISubRenderConsumer)
+ QI(ISubRenderConsumer2)
__super::NonDelegatingQueryInterface(riid, ppv);
}
@@ -116,12 +118,17 @@ void CSubPicAllocatorPresenterImpl::InitMaxSubtitleTextureSize(int maxSize, CSiz
}
}
-void CSubPicAllocatorPresenterImpl::AlphaBltSubPic(const CRect& windowRect, const CRect& videoRect, SubPicDesc* pTarget)
+void CSubPicAllocatorPresenterImpl::AlphaBltSubPic(const CRect& windowRect,
+ const CRect& videoRect,
+ SubPicDesc* pTarget /*= nullptr*/,
+ const double videoStretchFactor /*= 1.0*/,
+ int xOffsetInPixels /*= 0*/)
{
CComPtr<ISubPic> pSubPic;
if (m_pSubPicQueue->LookupSubPic(m_rtNow, !IsRendering(), pSubPic)) {
CRect rcSource, rcDest;
- if (SUCCEEDED(pSubPic->GetSourceAndDest(windowRect, videoRect, rcSource, rcDest))) {
+ if (SUCCEEDED(pSubPic->GetSourceAndDest(windowRect, videoRect, rcSource, rcDest,
+ videoStretchFactor, xOffsetInPixels))) {
pSubPic->AlphaBlt(rcSource, rcDest, pTarget);
}
}
@@ -151,13 +158,17 @@ STDMETHODIMP_(void) CSubPicAllocatorPresenterImpl::SetVideoSize(CSize szVideo, C
STDMETHODIMP_(SIZE) CSubPicAllocatorPresenterImpl::GetVideoSize(bool bCorrectAR) const
{
- CSize VideoSize(GetVisibleVideoSize());
+ CSize videoSize(GetVisibleVideoSize());
if (bCorrectAR && m_aspectRatio.cx > 0 && m_aspectRatio.cy > 0) {
- VideoSize.cx = (LONGLONG(VideoSize.cy) * LONGLONG(m_aspectRatio.cx)) / LONGLONG(m_aspectRatio.cy);
+ videoSize.cx = (LONGLONG(videoSize.cy) * LONGLONG(m_aspectRatio.cx)) / LONGLONG(m_aspectRatio.cy);
}
- return VideoSize;
+ if (m_bDefaultVideoAngleSwitchAR) {
+ std::swap(videoSize.cx, videoSize.cy);
+ }
+
+ return videoSize;
}
STDMETHODIMP_(void) CSubPicAllocatorPresenterImpl::SetPosition(RECT w, RECT v)
@@ -167,9 +178,12 @@ STDMETHODIMP_(void) CSubPicAllocatorPresenterImpl::SetPosition(RECT w, RECT v)
m_windowRect = w;
- bool bVideoRectChanged = !!(m_videoRect != v);
+ CRect videoRect(v);
+ videoRect.OffsetRect(-m_windowRect.TopLeft());
+
+ bool bVideoRectChanged = !!(m_videoRect != videoRect);
- m_videoRect = v;
+ m_videoRect = videoRect;
if (bWindowSizeChanged || bVideoRectChanged) {
if (m_pAllocator) {
@@ -183,7 +197,7 @@ STDMETHODIMP_(void) CSubPicAllocatorPresenterImpl::SetPosition(RECT w, RECT v)
}
if (bWindowPosChanged || bVideoRectChanged) {
- Paint(bWindowSizeChanged || bVideoRectChanged);
+ Paint(false);
}
}
@@ -198,7 +212,13 @@ STDMETHODIMP_(void) CSubPicAllocatorPresenterImpl::SetTime(REFERENCE_TIME rtNow)
STDMETHODIMP_(void) CSubPicAllocatorPresenterImpl::SetSubtitleDelay(int delayMs)
{
- m_rtSubtitleDelay = delayMs * 10000i64;
+ REFERENCE_TIME delay = MILLISECONDS_TO_100NS_UNITS(delayMs);
+ if (m_rtSubtitleDelay != delay) {
+ REFERENCE_TIME oldDelay = m_rtSubtitleDelay;
+ m_rtSubtitleDelay = delay;
+ SetTime(m_rtNow + oldDelay);
+ Paint(false);
+ }
}
STDMETHODIMP_(int) CSubPicAllocatorPresenterImpl::GetSubtitleDelay() const
@@ -259,17 +279,132 @@ void CSubPicAllocatorPresenterImpl::Transform(CRect r, Vector v[4])
}
}
+STDMETHODIMP CSubPicAllocatorPresenterImpl::SetDefaultVideoAngle(Vector v)
+{
+ if (m_defaultVideoAngle != v) {
+ constexpr float pi_2 = float(M_PI_2);
+
+ // In theory it should be a multiple of 90
+ int zAnglePi2 = std::lround(v.z / pi_2);
+ ASSERT(zAnglePi2 * pi_2 == v.z);
+
+ // Normalize the Z angle
+ zAnglePi2 %= 4;
+ if (zAnglePi2 < 0) {
+ zAnglePi2 += 4;
+ }
+ v.z = zAnglePi2 * pi_2;
+
+ // Check if the default rotation change the AR
+ m_bDefaultVideoAngleSwitchAR = (v.z == pi_2 || v.z == 3.0f * pi_2);
+
+ m_defaultVideoAngle = v;
+ UpdateXForm();
+ return S_OK;
+ }
+ return S_FALSE;
+}
+
STDMETHODIMP CSubPicAllocatorPresenterImpl::SetVideoAngle(Vector v)
{
- XForm xform(Ray(Vector(), v), Vector(1, 1, 1), false);
- if (m_xform != xform) {
- m_xform = xform;
- Paint(true);
+ if (m_videoAngle != v) {
+ m_videoAngle = v;
+ UpdateXForm();
return S_OK;
}
return S_FALSE;
}
+void CSubPicAllocatorPresenterImpl::UpdateXForm()
+{
+ Vector v = m_defaultVideoAngle + m_videoAngle;
+
+ auto normalizeAngle = [](float & rad) {
+ constexpr float twoPi = float(2.0 * M_PI);
+
+ while (rad < 0.0f) {
+ rad += twoPi;
+ }
+ while (rad > twoPi) {
+ rad -= twoPi;
+ }
+ };
+
+ normalizeAngle(v.x);
+ normalizeAngle(v.y);
+ normalizeAngle(v.z);
+
+ CSize AR = GetVideoSize(true);
+ float fARCorrection = m_bDefaultVideoAngleSwitchAR ? float(AR.cx) / AR.cy : 1.0f;
+
+ m_xform = XForm(Ray(Vector(), v), Vector(1.0f / fARCorrection, fARCorrection, 1.0f), false);
+
+ Paint(false);
+}
+
+HRESULT CSubPicAllocatorPresenterImpl::CreateDIBFromSurfaceData(D3DSURFACE_DESC desc, D3DLOCKED_RECT r, BYTE* lpDib) const
+{
+ bool bNeedRotation = !IsEqual(m_defaultVideoAngle.z, 0.0f);
+
+ BITMAPINFOHEADER* bih = (BITMAPINFOHEADER*)lpDib;
+ ZeroMemory(bih, sizeof(BITMAPINFOHEADER));
+ bih->biSize = sizeof(BITMAPINFOHEADER);
+ bih->biWidth = desc.Width;
+ bih->biHeight = desc.Height;
+ bih->biBitCount = 32;
+ bih->biPlanes = 1;
+ bih->biSizeImage = bih->biWidth * bih->biHeight * bih->biBitCount >> 3;
+
+ UINT* pBits;
+ if (bNeedRotation) {
+ pBits = (UINT*)malloc(bih->biSizeImage);
+ if (!pBits) {
+ return E_OUTOFMEMORY;
+ }
+ } else {
+ pBits = (UINT*)(bih + 1);
+ }
+
+ BitBltFromRGBToRGB(bih->biWidth, bih->biHeight,
+ (BYTE*)pBits, bih->biWidth * bih->biBitCount >> 3, bih->biBitCount,
+ (BYTE*)r.pBits + r.Pitch * (desc.Height - 1), -r.Pitch, 32);
+
+ if (bNeedRotation) {
+ constexpr float pi_2 = float(M_PI_2);
+
+ if (m_bDefaultVideoAngleSwitchAR) {
+ std::swap(bih->biWidth, bih->biHeight);
+ }
+
+ std::function<size_t(UINT, UINT)> convCoordinates;
+ if (IsEqual(m_defaultVideoAngle.z, pi_2)) {
+ convCoordinates = [desc](UINT x, UINT y) {
+ return x * desc.Height + desc.Height - 1 - y;
+ };
+ } else if (IsEqual(m_defaultVideoAngle.z, 2 * pi_2)) {
+ convCoordinates = [desc](UINT x, UINT y) {
+ return desc.Width - 1 - x + (desc.Height - 1 - y) * desc.Width;
+ };
+ } else {
+ ASSERT(IsEqual(m_defaultVideoAngle.z, 3 * pi_2));
+ convCoordinates = [desc](UINT x, UINT y) {
+ return (desc.Width - 1 - x) * desc.Height + y;
+ };
+ }
+
+ UINT* pBitsDest = (UINT*)(bih + 1);
+ for (UINT x = 0; x < desc.Width; x++) {
+ for (UINT y = 0; y < desc.Height; y++) {
+ pBitsDest[convCoordinates(x, y)] = pBits[x + y * desc.Width];
+ }
+ }
+
+ free(pBits);
+ }
+
+ return S_OK;
+}
+
// ISubRenderOptions
STDMETHODIMP CSubPicAllocatorPresenterImpl::GetBool(LPCSTR field, bool* value)
@@ -483,10 +618,23 @@ STDMETHODIMP CSubPicAllocatorPresenterImpl::Connect(ISubRenderProvider* subtitle
: (ISubPicQueue*)DEBUG_NEW CXySubPicQueueNoThread(m_pAllocator, &hr);
*/
+ // Lock and wait for m_pAllocator to be ready.
+ CAutoLock cAutoLock(this);
+ if (!m_pAllocator) {
+ std::mutex mutexAllocator;
+ std::unique_lock<std::mutex> lock(mutexAllocator);
+ if (!m_condAllocatorReady.wait_for(lock, std::chrono::seconds(1), [&]() {
+ return !!m_pAllocator;
+ })) {
+ // Return early, CXySubPicQueueNoThread ctor would fail anyway.
+ ASSERT(FALSE);
+ return E_FAIL;
+ }
+ }
+
CComPtr<ISubPicQueue> pSubPicQueue = (ISubPicQueue*)DEBUG_NEW CXySubPicQueueNoThread(m_pAllocator, &hr);
if (SUCCEEDED(hr)) {
- CAutoLock(this);
pSubPicQueue->SetSubPicProvider(pSubPicProvider);
m_pSubPicProvider = pSubPicProvider;
m_pSubPicQueue = pSubPicQueue;
diff --git a/src/SubPic/SubPicAllocatorPresenterImpl.h b/src/SubPic/SubPicAllocatorPresenterImpl.h
index 40ce613cf..0e1acd891 100644
--- a/src/SubPic/SubPicAllocatorPresenterImpl.h
+++ b/src/SubPic/SubPicAllocatorPresenterImpl.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,6 +23,7 @@
#include <atlbase.h>
#include <atlcoll.h>
+#include <condition_variable>
#include "ISubPic.h"
#include "CoordGeom.h"
#include "SubRenderIntf.h"
@@ -54,6 +55,8 @@ protected:
CComPtr<ISubPicAllocator> m_pAllocator;
CComPtr<ISubPicQueue> m_pSubPicQueue;
+ std::condition_variable m_condAllocatorReady;
+
bool m_bDeviceResetRequested;
bool m_bPendingResetDevice;
@@ -63,8 +66,17 @@ protected:
SubtitleTextureLimit m_SubtitleTextureLimit;
void InitMaxSubtitleTextureSize(int maxSize, CSize desktopSize);
- void AlphaBltSubPic(const CRect& windowRect, const CRect& videoRect, SubPicDesc* pTarget = nullptr);
+ void AlphaBltSubPic(const CRect& windowRect,
+ const CRect& videoRect,
+ SubPicDesc* pTarget = nullptr,
+ const double videoStretchFactor = 1.0,
+ int xOffsetInPixels = 0);
+
+ void UpdateXForm();
+ HRESULT CreateDIBFromSurfaceData(D3DSURFACE_DESC desc, D3DLOCKED_RECT r, BYTE* lpDib) const;
+ Vector m_defaultVideoAngle, m_videoAngle;
+ bool m_bDefaultVideoAngleSwitchAR;
XForm m_xform;
void Transform(CRect r, Vector v[4]);
@@ -113,6 +125,8 @@ public:
STDMETHODIMP SetIsRendering(bool bIsRendering) { return E_NOTIMPL; }
+ STDMETHODIMP SetDefaultVideoAngle(Vector v);
+
// ISubRenderOptions
STDMETHODIMP GetBool(LPCSTR field, bool* value);
diff --git a/src/SubPic/SubPicImpl.cpp b/src/SubPic/SubPicImpl.cpp
index 625283a7a..a51e5fd8d 100644
--- a/src/SubPic/SubPicImpl.cpp
+++ b/src/SubPic/SubPicImpl.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -118,20 +118,27 @@ STDMETHODIMP CSubPicImpl::GetDirtyRect(RECT* pDirtyRect) const
return S_OK;
}
-STDMETHODIMP CSubPicImpl::GetSourceAndDest(RECT rcWindow, RECT rcVideo, RECT* pRcSource, RECT* pRcDest) const
+STDMETHODIMP CSubPicImpl::GetSourceAndDest(RECT rcWindow, RECT rcVideo,
+ RECT* pRcSource, RECT* pRcDest,
+ const double videoStretchFactor /*= 1.0*/,
+ int xOffsetInPixels /*= 0*/) const
{
CheckPointer(pRcSource, E_POINTER);
CheckPointer(pRcDest, E_POINTER);
if (m_size.cx > 0 && m_size.cy > 0) {
CPoint offset(0, 0);
- double scaleX = 1.0, scaleY = 1.0;
+ double scaleX, scaleY;
// Enable best fit only for HD contents since SD contents
// are often anamorphic and thus break the auto-fit logic
if (m_relativeTo == BEST_FIT && m_virtualTextureSize.cx > 720) {
- double scaleFactor = 1.0;
- CSize szVideo = CRect(rcVideo).Size();
+ double scaleFactor;
+ CRect videoRect(rcVideo);
+ LONG stretch = lround(videoRect.Width() * (1.0 - videoStretchFactor) / 2.0);
+ videoRect.left += stretch;
+ videoRect.right -= stretch;
+ CSize szVideo = videoRect.Size();
double subtitleAR = double(m_virtualTextureSize.cx) / m_virtualTextureSize.cy;
double videoAR = double(szVideo.cx) / szVideo.cy;
@@ -148,7 +155,7 @@ STDMETHODIMP CSubPicImpl::GetSourceAndDest(RECT rcWindow, RECT rcVideo, RECT* pR
}
scaleX = scaleY = scaleFactor;
- offset += CRect(rcVideo).TopLeft();
+ offset += videoRect.TopLeft();
} else {
CRect rcTarget = (m_relativeTo == WINDOW) ? rcWindow : rcVideo;
CSize szTarget = rcTarget.Size();
@@ -160,18 +167,24 @@ STDMETHODIMP CSubPicImpl::GetSourceAndDest(RECT rcWindow, RECT rcVideo, RECT* pR
CRect rcTemp = m_rcDirty;
*pRcSource = rcTemp;
- rcTemp.OffsetRect(m_virtualTextureTopLeft);
+ rcTemp.OffsetRect(m_virtualTextureTopLeft + CPoint(xOffsetInPixels, 0));
+
rcTemp = CRect(lround(rcTemp.left * scaleX),
lround(rcTemp.top * scaleY),
lround(rcTemp.right * scaleX),
lround(rcTemp.bottom * scaleY));
rcTemp.OffsetRect(offset);
+
+ LONG stretch = lround(rcTemp.Width() * (1.0 - 1.0 / videoStretchFactor) / 2.0);
+ rcTemp.left += stretch;
+ rcTemp.right -= stretch;
+
*pRcDest = rcTemp;
return S_OK;
- } else {
- return E_INVALIDARG;
}
+
+ return E_INVALIDARG;
}
STDMETHODIMP CSubPicImpl::SetDirtyRect(const RECT* pDirtyRect)
diff --git a/src/SubPic/SubPicImpl.h b/src/SubPic/SubPicImpl.h
index febb1d08e..5d42902eb 100644
--- a/src/SubPic/SubPicImpl.h
+++ b/src/SubPic/SubPicImpl.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -96,7 +96,9 @@ public:
STDMETHODIMP AlphaBlt(RECT* pSrc, RECT* pDst, SubPicDesc* pTarget) PURE;
STDMETHODIMP SetVirtualTextureSize(const SIZE pSize, const POINT pTopLeft);
- STDMETHODIMP GetSourceAndDest(RECT rcWindow, RECT rcVideo, RECT* pRcSource, RECT* pRcDest) const;
+ STDMETHODIMP GetSourceAndDest(RECT rcWindow, RECT rcVideo, RECT* pRcSource,
+ RECT* pRcDest, const double videoStretchFactor = 1.0,
+ int xOffsetInPixels = 1) const;
STDMETHODIMP GetRelativeTo(RelativeTo* pRelativeTo) const;
STDMETHODIMP SetRelativeTo(RelativeTo relativeTo);
@@ -135,6 +137,6 @@ public:
STDMETHODIMP AllocDynamic(ISubPic** ppSubPic);
STDMETHODIMP_(bool) IsDynamicWriteOnly() const;
STDMETHODIMP ChangeDevice(IUnknown* pDev);
- STDMETHODIMP SetMaxTextureSize(SIZE maxTextureSize) { return E_NOTIMPL; };
+ STDMETHODIMP SetMaxTextureSize(SIZE maxTextureSize) PURE;
STDMETHODIMP FreeStatic();
};
diff --git a/src/SubPic/SubPicQueueImpl.cpp b/src/SubPic/SubPicQueueImpl.cpp
index f0954ba7a..87d880554 100644
--- a/src/SubPic/SubPicQueueImpl.cpp
+++ b/src/SubPic/SubPicQueueImpl.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -36,12 +36,12 @@ const double CSubPicQueueImpl::DEFAULT_FPS = 25.0;
CSubPicQueueImpl::CSubPicQueueImpl(SubPicQueueSettings settings, ISubPicAllocator* pAllocator, HRESULT* phr)
: CUnknown(NAME("CSubPicQueueImpl"), nullptr)
- , m_settings(settings)
- , m_pAllocator(pAllocator)
- , m_rtNow(0)
, m_fps(DEFAULT_FPS)
, m_rtTimePerFrame(std::llround(10000000.0 / DEFAULT_FPS))
- , m_rtTimePerSubFrame(std::llround(10000000.0 / (DEFAULT_FPS* settings.nAnimationRate / 100.0)))
+ , m_rtTimePerSubFrame(std::llround(10000000.0 / (DEFAULT_FPS * settings.nAnimationRate / 100.0)))
+ , m_rtNow(0)
+ , m_settings(settings)
+ , m_pAllocator(pAllocator)
{
if (phr) {
*phr = S_OK;
@@ -180,6 +180,9 @@ CSubPicQueue::~CSubPicQueue()
m_bExitThread = true;
SetSubPicProvider(nullptr);
CAMThread::Close();
+ if (m_pAllocator) {
+ m_pAllocator->FreeStatic();
+ }
}
// ISubPicQueue
@@ -220,7 +223,7 @@ STDMETHODIMP CSubPicQueue::SetTime(REFERENCE_TIME rtNow)
STDMETHODIMP CSubPicQueue::Invalidate(REFERENCE_TIME rtInvalidate /*= -1*/)
{
- std::unique_lock<std::mutex> lock(m_mutexQueue);
+ std::unique_lock<std::mutex> lockQueue(m_mutexQueue);
#if SUBPIC_TRACE_LEVEL > 0
TRACE(_T("Invalidate: %f\n"), double(rtInvalidate) / 10000000.0);
@@ -231,7 +234,7 @@ STDMETHODIMP CSubPicQueue::Invalidate(REFERENCE_TIME rtInvalidate /*= -1*/)
m_rtNowLast = LONGLONG_ERROR;
{
- std::lock_guard<std::mutex> lock(m_mutexSubpic);
+ std::lock_guard<std::mutex> lockSubpic(m_mutexSubpic);
if (m_pSubPic && m_pSubPic->GetStop() > rtInvalidate) {
m_pSubPic.Release();
}
@@ -253,7 +256,7 @@ STDMETHODIMP CSubPicQueue::Invalidate(REFERENCE_TIME rtInvalidate /*= -1*/)
m_rtNow = rtInvalidate;
}
- lock.unlock();
+ lockQueue.unlock();
m_condQueueFull.notify_one();
m_runQueueEvent.Set();
@@ -688,6 +691,9 @@ CSubPicQueueNoThread::CSubPicQueueNoThread(SubPicQueueSettings settings, ISubPic
CSubPicQueueNoThread::~CSubPicQueueNoThread()
{
+ if (m_pAllocator) {
+ m_pAllocator->FreeStatic();
+ }
}
// ISubPicQueue
diff --git a/src/SubPic/SubPicQueueSettings.h b/src/SubPic/SubPicQueueSettings.h
index ddaef5f29..6625d3492 100644
--- a/src/SubPic/SubPicQueueSettings.h
+++ b/src/SubPic/SubPicQueueSettings.h
@@ -1,5 +1,5 @@
/*
-* (C) 2014 see Authors.txt
+* (C) 2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,8 +20,6 @@
#pragma once
-#include "stdafx.h"
-
struct SubPicQueueSettings {
int nSize;
int nMaxRes;
diff --git a/src/SubPic/XySubPicProvider.cpp b/src/SubPic/XySubPicProvider.cpp
index deaba7154..adf4ea300 100644
--- a/src/SubPic/XySubPicProvider.cpp
+++ b/src/SubPic/XySubPicProvider.cpp
@@ -125,12 +125,11 @@ STDMETHODIMP CXySubPicProvider::Render(SubPicDesc& spd, REFERENCE_TIME rt, doubl
STDMETHODIMP CXySubPicProvider::GetTextureSize(POSITION pos, SIZE& MaxTextureSize, SIZE& VirtualSize, POINT& VirtualTopLeft)
{
- RECT outputRect, clipRect;
+ CRect outputRect, clipRect;
if (m_pSubFrame && SUCCEEDED(m_pSubFrame->GetOutputRect(&outputRect)) && SUCCEEDED(m_pSubFrame->GetClipRect(&clipRect))) {
- CRect rcOutput = outputRect, rcClip = clipRect;
- MaxTextureSize = rcOutput.Size();
- VirtualSize = rcClip.Size();
- VirtualTopLeft = rcClip.TopLeft();
+ MaxTextureSize = outputRect.Size();
+ VirtualSize = clipRect.Size();
+ VirtualTopLeft = clipRect.TopLeft();
return S_OK;
}
return E_FAIL;
@@ -138,6 +137,6 @@ STDMETHODIMP CXySubPicProvider::GetTextureSize(POSITION pos, SIZE& MaxTextureSiz
STDMETHODIMP CXySubPicProvider::GetRelativeTo(POSITION pos, RelativeTo& relativeTo)
{
- relativeTo = VIDEO;
+ relativeTo = BEST_FIT;
return S_OK;
}
diff --git a/src/Subtitles/CCDecoder.cpp b/src/Subtitles/CCDecoder.cpp
index cd89c56dc..5a54f73d1 100644
--- a/src/Subtitles/CCDecoder.cpp
+++ b/src/Subtitles/CCDecoder.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -88,7 +88,7 @@ void CCDecoder::SaveDisp(__int64 time)
if (m_disp[row][col]) {
CStringW str2(&m_disp[row][col]);
if (fNonEmptyRow) {
- str += ' ';
+ str += L' ';
}
str += str2;
col += str2.GetLength();
@@ -97,7 +97,7 @@ void CCDecoder::SaveDisp(__int64 time)
}
if (fNonEmptyRow) {
- str += '\n';
+ str += L'\n';
}
}
diff --git a/src/Subtitles/ColorConvTable.cpp b/src/Subtitles/ColorConvTable.cpp
new file mode 100644
index 000000000..245fafdac
--- /dev/null
+++ b/src/Subtitles/ColorConvTable.cpp
@@ -0,0 +1,883 @@
+/*
+* (C) 2015 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "stdafx.h"
+#include "ColorConvTable.h"
+
+/************************************
+Formula:
+Ey => [0,1]
+Eu => [-0.5,0.5]
+Ev => [-0.5,0.5]
+Er => [0,1]
+Eg => [0,1]
+Eb => [0,1]
+
+1 = Kr + Kg + Kb
+Ey = Kr * Er + Kg * Eg + Kb * Eb;
+Eu = (Eb - Ey) / (1 - Kb) / 2;
+Ev = (Er - Ey) / (1 - Kr) / 2;
+
+Quantization:
+ANY = ANY * RANGE_SIZE + BASE
+
+Range:
+TV Level
+Y => [16, 235]
+U => [16, 240]
+V => [16, 240]
+
+R => [16, 235]
+G => [16, 235]
+B => [16, 235]
+PC Level
+Y => [0,255]
+U => [0,255]
+V => [0,255]
+
+R => [0,255]
+G => [0,255]
+B => [0,255]
+************************************/
+
+//RGB to YUV
+#define DEFINE_YUV_MATRIX(Kr,Kg,Kb) { \
+ { Kr , Kg , Kb , 0},\
+ { -Kr /((1-Kb)*2), -Kg/((1-Kb)*2),(1-Kb)/((1-Kb)*2), 0},\
+ {(1-Kr)/((1-Kr)*2), -Kg/((1-Kr)*2), -Kb /((1-Kr)*2), 0} \
+}
+
+//YUV to RGB: INV stand for inverse
+#define DEFINE_YUV_MATRIX_INV(Kr,Kg,Kb) { \
+ { 1, 0 , 2*(1-Kr) , 0},\
+ { 1, -2*(1-Kb)*Kb/Kg, -2*(1-Kr)*Kr/Kg, 0},\
+ { 1, 2*(1-Kb) , 0 , 0} \
+}
+
+const float MATRIX_BT_601[3][4] = DEFINE_YUV_MATRIX(0.299f, 0.587f, 0.114f);
+const float MATRIX_BT_601_INV[3][4] = DEFINE_YUV_MATRIX_INV(0.299f, 0.587f, 0.114f);
+const float MATRIX_BT_709[3][4] = DEFINE_YUV_MATRIX(0.2126f, 0.7152f, 0.0722f);
+const float MATRIX_BT_709_INV[3][4] = DEFINE_YUV_MATRIX_INV(0.2126f, 0.7152f, 0.0722f);
+const float YUV_PC[3][4] = {
+ { 255, 0, 0, 0 },
+ { 0, 255, 0, 128 },
+ { 0, 0, 255, 128 }
+};
+const float YUV_PC_INV[3][4] = {
+ { 1 / 255.0f, 0, 0, 0 },
+ { 0, 1 / 255.0f, 0, -128 / 255.0f },
+ { 0, 0, 1 / 255.0f, -128 / 255.0f }
+};
+const float YUV_TV[3][4] = {
+ { 219, 0, 0, 16 },
+ { 0, 224, 0, 128 },
+ { 0, 0, 224, 128 }
+};
+const float YUV_TV_INV[3][4] = {
+ { 1 / 219.0f, 0, 0, -16 / 219.0f },
+ { 0, 1 / 224.0f, 0, -128 / 224.0f },
+ { 0, 0, 1 / 224.0f, -128 / 224.0f }
+};
+const float RGB_PC[3][4] = {
+ { 255, 0, 0, 0 },
+ { 0, 255, 0, 0 },
+ { 0, 0, 255, 0 }
+};
+const float RGB_PC_INV[3][4] = {
+ { 1 / 255.0f, 0, 0, 0 },
+ { 0, 1 / 255.0f, 0, 0 },
+ { 0, 0, 1 / 255.0f, 0 }
+};
+const float RGB_TV[3][4] = {
+ { 219, 0, 0, 16 },
+ { 0, 219, 0, 16 },
+ { 0, 0, 219, 16 }
+};
+const float RGB_TV_INV[3][4] = {
+ { 1 / 219.0f, 0, 0, -16 / 219.0f },
+ { 0, 1 / 219.0f, 0, -16 / 219.0f },
+ { 0, 0, 1 / 219.0f, -16 / 219.0f }
+};
+const float IDENTITY[3][4] = {
+ { 1, 0, 0, 0 },
+ { 0, 1, 0, 0 },
+ { 0, 0, 1, 0 }
+};
+
+inline int clip(int value, int upper_bound)
+{
+ value &= ~(value >> 31); //value = value > 0 ? value : 0
+ return value ^ ((value ^ upper_bound) & ((upper_bound - value) >> 31)); //value = value < upper_bound ? value : upper_bound
+}
+
+#define E(M,i,j) M[i*4+j]
+
+void MultiplyMatrix(float* lhs_in_out, const float* rhs)
+{
+ float tmp1;
+ float tmp2;
+ float tmp3;
+
+ tmp1 = E(lhs_in_out, 0, 0);
+ tmp2 = E(lhs_in_out, 0, 1);
+ tmp3 = E(lhs_in_out, 0, 2);
+
+ E(lhs_in_out, 0, 0) = tmp1 * E(rhs, 0, 0) + tmp2 * E(rhs, 1, 0) + tmp3 * E(rhs, 2, 0);
+ E(lhs_in_out, 0, 1) = tmp1 * E(rhs, 0, 1) + tmp2 * E(rhs, 1, 1) + tmp3 * E(rhs, 2, 1);
+ E(lhs_in_out, 0, 2) = tmp1 * E(rhs, 0, 2) + tmp2 * E(rhs, 1, 2) + tmp3 * E(rhs, 2, 2);
+ E(lhs_in_out, 0, 3) = tmp1 * E(rhs, 0, 3) + tmp2 * E(rhs, 1, 3) + tmp3 * E(rhs, 2, 3) + E(lhs_in_out, 0, 3);
+
+ tmp1 = E(lhs_in_out, 1, 0);
+ tmp2 = E(lhs_in_out, 1, 1);
+ tmp3 = E(lhs_in_out, 1, 2);
+
+ E(lhs_in_out, 1, 0) = tmp1 * E(rhs, 0, 0) + tmp2 * E(rhs, 1, 0) + tmp3 * E(rhs, 2, 0);
+ E(lhs_in_out, 1, 1) = tmp1 * E(rhs, 0, 1) + tmp2 * E(rhs, 1, 1) + tmp3 * E(rhs, 2, 1);
+ E(lhs_in_out, 1, 2) = tmp1 * E(rhs, 0, 2) + tmp2 * E(rhs, 1, 2) + tmp3 * E(rhs, 2, 2);
+ E(lhs_in_out, 1, 3) = tmp1 * E(rhs, 0, 3) + tmp2 * E(rhs, 1, 3) + tmp3 * E(rhs, 2, 3) + E(lhs_in_out, 1, 3);
+
+ tmp1 = E(lhs_in_out, 2, 0);
+ tmp2 = E(lhs_in_out, 2, 1);
+ tmp3 = E(lhs_in_out, 2, 2);
+
+ E(lhs_in_out, 2, 0) = tmp1 * E(rhs, 0, 0) + tmp2 * E(rhs, 1, 0) + tmp3 * E(rhs, 2, 0);
+ E(lhs_in_out, 2, 1) = tmp1 * E(rhs, 0, 1) + tmp2 * E(rhs, 1, 1) + tmp3 * E(rhs, 2, 1);
+ E(lhs_in_out, 2, 2) = tmp1 * E(rhs, 0, 2) + tmp2 * E(rhs, 1, 2) + tmp3 * E(rhs, 2, 2);
+ E(lhs_in_out, 2, 3) = tmp1 * E(rhs, 0, 3) + tmp2 * E(rhs, 1, 3) + tmp3 * E(rhs, 2, 3) + E(lhs_in_out, 2, 3);
+}
+
+class ConvMatrix
+{
+public:
+ enum LevelType {
+ LEVEL_TV,
+ LEVEL_PC,
+ LEVEL_COUNT
+ };
+ enum ColorType {
+ COLOR_YUV_601,
+ COLOR_YUV_709,
+ COLOR_RGB,
+ COLOR_COUNT
+ };
+public:
+ ConvMatrix();
+ virtual ~ConvMatrix();
+
+ bool Init();
+ DWORD Convert(int x1, int x2, int x3, int in_level, int in_type, int out_level, int out_type);
+ static DWORD DoConvert(int x1, int x2, int x3, const int* matrix);
+
+ DWORD ColorCorrection(int r8, int g8, int b8, int output_rgb_level);
+ void InitMatrix(int in_level, int in_type, int out_level, int out_type);
+ void InitColorCorrectionMatrix();
+private:
+ const float* MATRIX_DE_QUAN[LEVEL_COUNT][COLOR_COUNT];
+ const float* MATRIX_INV_TRANS[COLOR_COUNT];
+ const float* MATRIX_TRANS[COLOR_COUNT];
+ const float* MATRIX_QUAN[LEVEL_COUNT][COLOR_COUNT];
+
+ //m_matrix[in_level][in_type][out_level][out_type]
+ int* m_matrix[LEVEL_COUNT][COLOR_COUNT][LEVEL_COUNT][COLOR_COUNT];
+
+ int m_matrix_vsfilter_compact_corretion[LEVEL_COUNT][3][4];
+};
+
+ConvMatrix::ConvMatrix()
+{
+ ZeroMemory(m_matrix, LEVEL_COUNT * COLOR_COUNT * LEVEL_COUNT * COLOR_COUNT * sizeof(float*));
+ Init();
+}
+
+ConvMatrix::~ConvMatrix()
+{
+ int** p_matrix = (int**)m_matrix;
+ for (int i = 0; i < LEVEL_COUNT * COLOR_COUNT * LEVEL_COUNT * COLOR_COUNT; i++) {
+ SAFE_DELETE(p_matrix[i]);
+ }
+}
+
+bool ConvMatrix::Init()
+{
+ MATRIX_DE_QUAN[LEVEL_TV][COLOR_YUV_601] = &YUV_TV_INV[0][0];
+ MATRIX_DE_QUAN[LEVEL_TV][COLOR_YUV_709] = &YUV_TV_INV[0][0];
+ MATRIX_DE_QUAN[LEVEL_TV][COLOR_RGB] = &RGB_TV_INV[0][0];
+
+ MATRIX_DE_QUAN[LEVEL_PC][COLOR_YUV_601] = &YUV_PC_INV[0][0];
+ MATRIX_DE_QUAN[LEVEL_PC][COLOR_YUV_709] = &YUV_PC_INV[0][0];
+ MATRIX_DE_QUAN[LEVEL_PC][COLOR_RGB] = &RGB_PC_INV[0][0];
+
+ MATRIX_INV_TRANS[COLOR_YUV_601] = &MATRIX_BT_601_INV[0][0];
+ MATRIX_INV_TRANS[COLOR_YUV_709] = &MATRIX_BT_709_INV[0][0];
+ MATRIX_INV_TRANS[COLOR_RGB] = &IDENTITY[0][0];
+
+ MATRIX_TRANS[COLOR_YUV_601] = &MATRIX_BT_601[0][0];
+ MATRIX_TRANS[COLOR_YUV_709] = &MATRIX_BT_709[0][0];
+ MATRIX_TRANS[COLOR_RGB] = &IDENTITY[0][0];
+
+ MATRIX_QUAN[LEVEL_TV][COLOR_YUV_601] = &YUV_TV[0][0];
+ MATRIX_QUAN[LEVEL_TV][COLOR_YUV_709] = &YUV_TV[0][0];
+ MATRIX_QUAN[LEVEL_TV][COLOR_RGB] = &RGB_TV[0][0];
+
+ MATRIX_QUAN[LEVEL_PC][COLOR_YUV_601] = &YUV_PC[0][0];
+ MATRIX_QUAN[LEVEL_PC][COLOR_YUV_709] = &YUV_PC[0][0];
+ MATRIX_QUAN[LEVEL_PC][COLOR_RGB] = &RGB_PC[0][0];
+
+ InitColorCorrectionMatrix();
+ //InitMatrix(LEVEL_PC, COLOR_RGB, LEVEL_TV, COLOR_YUV_601);
+ //InitMatrix(LEVEL_PC, COLOR_RGB, LEVEL_TV, COLOR_YUV_709);
+ //InitMatrix(LEVEL_TV, COLOR_YUV_601, LEVEL_PC, COLOR_RGB);
+ //InitMatrix(LEVEL_TV, COLOR_YUV_709, LEVEL_PC, COLOR_RGB);
+
+ //InitMatrix(LEVEL_TV, COLOR_RGB, LEVEL_TV, COLOR_YUV_601);
+ //InitMatrix(LEVEL_TV, COLOR_RGB, LEVEL_TV, COLOR_YUV_709);
+ //InitMatrix(LEVEL_TV, COLOR_YUV_601, LEVEL_TV, COLOR_RGB);
+ //InitMatrix(LEVEL_TV, COLOR_YUV_709, LEVEL_TV, COLOR_RGB);
+ return true;
+};
+
+void ConvMatrix::InitMatrix(int in_level, int in_type, int out_level, int out_type)
+{
+ int*& out_matrix = m_matrix[in_level][in_type][out_level][out_type];
+ if (out_matrix) {
+ return;
+ }
+ out_matrix = DEBUG_NEW int[3 * 4];
+ ASSERT(out_matrix);
+
+ float matrix[3][4];
+ float* p_matrix = &matrix[0][0];
+ memcpy(p_matrix, MATRIX_QUAN[out_level][out_type], 3 * 4 * sizeof(float));
+ MultiplyMatrix(p_matrix, MATRIX_TRANS[out_type]);
+ MultiplyMatrix(p_matrix, MATRIX_INV_TRANS[in_type]);
+ MultiplyMatrix(p_matrix, MATRIX_DE_QUAN[in_level][in_type]);
+ for (int i = 0; i < 3 * 4; i++) {
+ out_matrix[i] = std::lround(p_matrix[i] * (1 << 16));
+ ASSERT(out_matrix[i] < (1 << 24));
+ }
+}
+
+void ConvMatrix::InitColorCorrectionMatrix()
+{
+ int* out_matrix = &m_matrix_vsfilter_compact_corretion[LEVEL_PC][0][0];
+
+ float matrix[3][4];
+ float* p_matrix = &matrix[0][0];
+ memcpy(p_matrix, MATRIX_INV_TRANS[COLOR_YUV_709], 3 * 4 * sizeof(float));
+ MultiplyMatrix(p_matrix, MATRIX_TRANS[COLOR_YUV_601]);
+ for (int i = 0; i < 3 * 4; i++) {
+ out_matrix[i] = std::lround(p_matrix[i] * (1 << 16));
+ ASSERT(out_matrix[i] < (1 << 24));
+ }
+
+ out_matrix = &m_matrix_vsfilter_compact_corretion[LEVEL_TV][0][0];
+ memcpy(p_matrix, MATRIX_QUAN[LEVEL_TV][COLOR_RGB], 3 * 4 * sizeof(float));
+ MultiplyMatrix(p_matrix, MATRIX_INV_TRANS[COLOR_YUV_709]);
+ MultiplyMatrix(p_matrix, MATRIX_TRANS[COLOR_YUV_601]);
+ MultiplyMatrix(p_matrix, MATRIX_DE_QUAN[LEVEL_PC][COLOR_RGB]);
+ for (int i = 0; i < 3 * 4; i++) {
+ out_matrix[i] = std::lround(p_matrix[i] * (1 << 16));
+ ASSERT(out_matrix[i] < (1 << 24));
+ }
+}
+
+DWORD ConvMatrix::Convert(int x1, int x2, int x3, int in_level, int in_type, int out_level, int out_type)
+{
+ int*& matrix_int = m_matrix[in_level][in_type][out_level][out_type];
+ if (!matrix_int) {
+ InitMatrix(in_level, in_type, out_level, out_type);
+ if (!matrix_int) {
+ ASSERT(FALSE);
+ return 0;
+ }
+ }
+ return DoConvert(x1, x2, x3, matrix_int);
+}
+
+DWORD ConvMatrix::DoConvert(int x1, int x2, int x3, const int* matrix)
+{
+ ASSERT(matrix);
+ int tmp1 = (E(matrix, 0, 0) * x1 + E(matrix, 0, 1) * x2 + E(matrix, 0, 2) * x3 + E(matrix, 0, 3) + (1 << 15)) >> 16;
+ int tmp2 = (E(matrix, 1, 0) * x1 + E(matrix, 1, 1) * x2 + E(matrix, 1, 2) * x3 + E(matrix, 1, 3) + (1 << 15)) >> 16;
+ int tmp3 = (E(matrix, 2, 0) * x1 + E(matrix, 2, 1) * x2 + E(matrix, 2, 2) * x3 + E(matrix, 2, 3) + (1 << 15)) >> 16;
+ tmp1 = clip(tmp1, 255);
+ tmp2 = clip(tmp2, 255);
+ tmp3 = clip(tmp3, 255);
+ return (tmp1 << 16) | (tmp2 << 8) | tmp3;
+}
+
+DWORD ConvMatrix::ColorCorrection(int r8, int g8, int b8, int output_rgb_level)
+{
+ ASSERT(output_rgb_level == LEVEL_PC || output_rgb_level == LEVEL_TV);
+ return DoConvert(r8, g8, b8, &m_matrix_vsfilter_compact_corretion[output_rgb_level][0][0]);
+}
+
+const int FRACTION_BITS = 16;
+const int FRACTION_SCALE = 1 << 16;
+
+struct RGBLevelInfo {
+ int low, size;
+};
+const RGBLevelInfo RGB_LVL_PC = { 0, 255 };
+const RGBLevelInfo RGB_LVL_TV = { 16, 219 };
+
+struct YUVLevelInfo {
+ int y_low, y_size;
+ int u_mid, u_size;
+};
+const YUVLevelInfo YUV_LVL_PC = { 0, 255, 128, 255 };
+const YUVLevelInfo YUV_LVL_TV = { 16, 219, 128, 224 };
+
+#define DEFINE_RGB2YUV_FUNC(func, RGB_LEVEL, YUV_LEVEL, Kr, Kg, Kb, YUV_POS) \
+DWORD func(int r8, int g8, int b8) \
+{ \
+ r8 -= RGB_LEVEL.low; \
+ g8 -= RGB_LEVEL.low; \
+ b8 -= RGB_LEVEL.low; \
+ const int INT_Kr = int(Kr*FRACTION_SCALE+0.5); \
+ const int INT_Kg = int(Kg*FRACTION_SCALE+0.5); \
+ const int INT_Kb = int(Kb*FRACTION_SCALE+0.5); \
+ const int Y_CU = int(0.5/(1-Kb)*4096+0.5); \
+ const int Y_CV = int(0.5/(1-Kr)*4096+0.5); \
+ const int Y_SCALE= int(1.0*YUV_LEVEL.y_size/RGB_LEVEL.size*4096+0.5); \
+ const int U_SCALE= int(1.0*YUV_LEVEL.u_size/RGB_LEVEL.size*4096+0.5); \
+ \
+ int y = INT_Kr*r8 + INT_Kg*g8 + INT_Kb*b8; \
+ int u = (((b8<<FRACTION_BITS) - y) >> 12) * Y_CU; \
+ int v = (((r8<<FRACTION_BITS) - y) >> 12) * Y_CV; \
+ y = Y_SCALE == 4096 ? y : (y>>12)*Y_SCALE; \
+ u = U_SCALE == 4096 ? u : (u>>12)*U_SCALE; \
+ v = U_SCALE == 4096 ? v : (v>>12)*U_SCALE; \
+ y = (y + (YUV_LEVEL.y_low*FRACTION_SCALE + FRACTION_SCALE/2))>>FRACTION_BITS; \
+ u = (u + (YUV_LEVEL.u_mid*FRACTION_SCALE + FRACTION_SCALE/2))>>FRACTION_BITS; \
+ v = (v + (YUV_LEVEL.u_mid*FRACTION_SCALE + FRACTION_SCALE/2))>>FRACTION_BITS; \
+ y = clip(y, 255); \
+ u = clip(u, 255); \
+ v = clip(v, 255); \
+ return (y<<YUV_POS.y) | (u<<YUV_POS.u) | (v<<YUV_POS.v); \
+}
+
+#define DEFINE_YUV2RGB_FUNC(func, RGB_LEVEL, YUV_LEVEL, Kr, Kg, Kb) \
+DWORD func(int y8, int u8, int v8) \
+{ \
+ const int Y_SCALE= int(1.0*RGB_LEVEL.size/YUV_LEVEL.y_size* FRACTION_SCALE +0.5);\
+ const int U_SCALE= int(1.0*RGB_LEVEL.size/YUV_LEVEL.u_size*(FRACTION_SCALE/4096)+0.5);\
+ y8 = (y8-YUV_LEVEL.y_low)*Y_SCALE; \
+ u8 = (u8-YUV_LEVEL.u_mid)*U_SCALE; \
+ v8 = (v8-YUV_LEVEL.u_mid)*U_SCALE; \
+ const int INT_RV = int( 2*(1-Kr) *4096+0.5); \
+ const int INT_GU = int(-2*(1-Kb)*Kb/Kg*4096+0.5); \
+ const int INT_GV = int(-2*(1-Kr)*Kr/Kg*4096+0.5); \
+ const int INT_BU = int( 2*(1-Kb) *4096+0.5); \
+ \
+ int r = (y8 + 0 + INT_RV*v8 + FRACTION_SCALE/2)>>FRACTION_BITS; \
+ int g = (y8 + INT_GU*u8 + INT_GV*v8 + FRACTION_SCALE/2)>>FRACTION_BITS; \
+ int b = (y8 + INT_BU*u8 + 0 + FRACTION_SCALE/2)>>FRACTION_BITS; \
+ r = clip(r, RGB_LEVEL.size); \
+ g = clip(g, RGB_LEVEL.size); \
+ b = clip(b, RGB_LEVEL.size); \
+ r += RGB_LEVEL.low; \
+ g += RGB_LEVEL.low; \
+ b += RGB_LEVEL.low; \
+ return (r<<16) | (g<<8) | b; \
+}
+
+#define DEFINE_PREMUL_ARGB2AYUV_FUNC(func, RGB_LEVEL, YUV_LEVEL, Kr, Kg, Kb, YUV_POS) \
+DWORD func(int a8, int r8, int g8, int b8) \
+{ \
+ r8 -= RGB_LEVEL.low; \
+ g8 -= RGB_LEVEL.low; \
+ b8 -= RGB_LEVEL.low; \
+ const int INT_Kr = int(Kr*FRACTION_SCALE+0.5); \
+ const int INT_Kg = int(Kg*FRACTION_SCALE+0.5); \
+ const int INT_Kb = int(Kb*FRACTION_SCALE+0.5); \
+ const int Y_CU = int(0.5/(1-Kb)*4096+0.5); \
+ const int Y_CV = int(0.5/(1-Kr)*4096+0.5); \
+ const int Y_SCALE= int(1.0*YUV_LEVEL.y_size/RGB_LEVEL.size*4096+0.5); \
+ const int U_SCALE= int(1.0*YUV_LEVEL.u_size/RGB_LEVEL.size*4096+0.5); \
+ \
+ int a = (256-a8)<<(FRACTION_BITS-8); \
+ int y = INT_Kr*r8 + INT_Kg*g8 + INT_Kb*b8; \
+ int u = (((b8<<FRACTION_BITS) - y) >> 12) * Y_CU; \
+ int v = (((r8<<FRACTION_BITS) - y) >> 12) * Y_CV; \
+ y = Y_SCALE == 4096 ? y : (y>>12)*Y_SCALE; \
+ u = U_SCALE == 4096 ? u : (u>>12)*U_SCALE; \
+ v = U_SCALE == 4096 ? v : (v>>12)*U_SCALE; \
+ y = (y + YUV_LEVEL.y_low*a + FRACTION_SCALE/2)>>FRACTION_BITS; \
+ u = (u + YUV_LEVEL.u_mid*a + FRACTION_SCALE/2)>>FRACTION_BITS; \
+ v = (v + YUV_LEVEL.u_mid*a + FRACTION_SCALE/2)>>FRACTION_BITS; \
+ y = clip(y, 255); \
+ u = clip(u, 255); \
+ v = clip(v, 255); \
+ return (y<<YUV_POS.y) | (u<<YUV_POS.u) | (v<<YUV_POS.v); \
+}
+
+#define DEFINE_RGB2Y_FUNC(func, RGB_LEVEL, YUV_LEVEL, Kr, Kg, Kb) \
+DWORD func(int r8, int g8, int b8) \
+{ \
+ const int INT_Kr = int(Kr*FRACTION_SCALE+0.5); \
+ const int INT_Kg = int(Kg*FRACTION_SCALE+0.5); \
+ const int INT_Kb = int(Kb*FRACTION_SCALE+0.5); \
+ const int Y_SCALE= int(1.0*YUV_LEVEL.y_size/RGB_LEVEL.size*4096+0.5); \
+ \
+ int y = INT_Kr*r8 + INT_Kg*g8 + INT_Kb*b8 - RGB_LEVEL.low; \
+ y = Y_SCALE == 4096 ? y : (y>>12)*Y_SCALE; \
+ y = (y + (YUV_LEVEL.y_low*FRACTION_SCALE + FRACTION_SCALE/2))>>FRACTION_BITS; \
+ y = clip(y, 255); \
+ return y; \
+}
+
+DWORD RGB_PC_TO_YUV_TV_601(int r8, int g8, int b8);
+DWORD RGB_PC_TO_YUV_PC_601(int r8, int g8, int b8);
+DWORD RGB_PC_TO_YUV_TV_709(int r8, int g8, int b8);
+DWORD RGB_PC_TO_YUV_PC_709(int r8, int g8, int b8);
+
+DWORD RGB_TV_TO_YUV_TV_601(int r8, int g8, int b8);
+DWORD RGB_TV_TO_YUV_PC_601(int r8, int g8, int b8);
+DWORD RGB_TV_TO_YUV_TV_709(int r8, int g8, int b8);
+DWORD RGB_TV_TO_YUV_PC_709(int r8, int g8, int b8);
+
+DWORD RGB_PC_TO_UYV_TV_601(int r8, int g8, int b8);
+DWORD RGB_PC_TO_UYV_PC_601(int r8, int g8, int b8);
+DWORD RGB_PC_TO_UYV_TV_709(int r8, int g8, int b8);
+DWORD RGB_PC_TO_UYV_PC_709(int r8, int g8, int b8);
+
+DWORD RGB_TV_TO_UYV_TV_601(int r8, int g8, int b8);
+DWORD RGB_TV_TO_UYV_PC_601(int r8, int g8, int b8);
+DWORD RGB_TV_TO_UYV_TV_709(int r8, int g8, int b8);
+DWORD RGB_TV_TO_UYV_PC_709(int r8, int g8, int b8);
+
+DWORD PREMUL_ARGB_PC_TO_AYUV_TV_601(int a8, int r8, int g8, int b8);
+DWORD PREMUL_ARGB_PC_TO_AYUV_PC_601(int a8, int r8, int g8, int b8);
+DWORD PREMUL_ARGB_PC_TO_AYUV_TV_709(int a8, int r8, int g8, int b8);
+DWORD PREMUL_ARGB_PC_TO_AYUV_PC_709(int a8, int r8, int g8, int b8);
+
+DWORD PREMUL_ARGB_TV_TO_AYUV_TV_601(int a8, int r8, int g8, int b8);
+DWORD PREMUL_ARGB_TV_TO_AYUV_PC_601(int a8, int r8, int g8, int b8);
+DWORD PREMUL_ARGB_TV_TO_AYUV_TV_709(int a8, int r8, int g8, int b8);
+DWORD PREMUL_ARGB_TV_TO_AYUV_PC_709(int a8, int r8, int g8, int b8);
+
+DWORD RGB_PC_TO_Y_TV_601(int r8, int g8, int b8);
+DWORD RGB_PC_TO_Y_PC_601(int r8, int g8, int b8);
+DWORD RGB_PC_TO_Y_TV_709(int r8, int g8, int b8);
+DWORD RGB_PC_TO_Y_PC_709(int r8, int g8, int b8);
+
+DWORD RGB_TV_TO_Y_TV_601(int r8, int g8, int b8);
+DWORD RGB_TV_TO_Y_PC_601(int r8, int g8, int b8);
+DWORD RGB_TV_TO_Y_TV_709(int r8, int g8, int b8);
+DWORD RGB_TV_TO_Y_PC_709(int r8, int g8, int b8);
+
+DWORD YUV_TV_TO_RGB_PC_601(int y, int u, int v);
+DWORD YUV_PC_TO_RGB_PC_601(int y, int u, int v);
+DWORD YUV_TV_TO_RGB_PC_709(int y, int u, int v);
+DWORD YUV_PC_TO_RGB_PC_709(int y, int u, int v);
+
+DWORD YUV_TV_TO_RGB_TV_601(int y, int u, int v);
+DWORD YUV_PC_TO_RGB_TV_601(int y, int u, int v);
+DWORD YUV_TV_TO_RGB_TV_709(int y, int u, int v);
+DWORD YUV_PC_TO_RGB_TV_709(int y, int u, int v);
+
+typedef ColorConvTable::YuvMatrixType YuvMatrixType;
+typedef ColorConvTable::YuvRangeType YuvRangeType;
+
+class ConvFunc
+{
+public:
+ ConvFunc(YuvMatrixType yuv_type, YuvRangeType range, bool bOutputTVRange, bool bVSFilterCorrection);
+ bool InitConvFunc(YuvMatrixType yuv_type, YuvRangeType range);
+
+ typedef DWORD(*R8G8B8ToYuvFunc)(int r8, int g8, int b8);
+ typedef DWORD(*PreMulArgbToAyuvFunc)(int a8, int r8, int g8, int b8);
+ typedef R8G8B8ToYuvFunc R8G8B8ToY;
+ typedef R8G8B8ToYuvFunc Y8U8V8ToRGBFunc;
+
+ R8G8B8ToYuvFunc r8g8b8_to_yuv_func;
+ R8G8B8ToYuvFunc r8g8b8_to_uyv_func;
+ PreMulArgbToAyuvFunc pre_mul_argb_to_ayuv_func;
+ R8G8B8ToY r8g8b8_to_y_func;
+ Y8U8V8ToRGBFunc y8u8v8_to_rgb_func;
+
+ YuvMatrixType m_eYuvType;
+ YuvRangeType m_eRangeType;
+ bool m_bOutputTVRange;
+ bool m_bVSFilterCorrection;
+
+ ConvMatrix m_convMatrix; //for YUV to YUV or other complicated conversions
+};
+
+static ConvFunc& ConvFuncInst()
+{
+ static ConvFunc s(ColorConvTable::BT601, ColorConvTable::RANGE_TV, false, false);
+ return s;
+}
+
+bool ConvFunc::InitConvFunc(YuvMatrixType yuv_type, YuvRangeType range)
+{
+ bool result = true;
+
+ if (yuv_type == ColorConvTable::BT601 && range == ColorConvTable::RANGE_TV) {
+ r8g8b8_to_yuv_func = RGB_PC_TO_YUV_TV_601;
+ r8g8b8_to_uyv_func = RGB_PC_TO_UYV_TV_601;
+ pre_mul_argb_to_ayuv_func = PREMUL_ARGB_PC_TO_AYUV_TV_601;
+ r8g8b8_to_y_func = RGB_PC_TO_Y_TV_601;
+ y8u8v8_to_rgb_func = YUV_TV_TO_RGB_PC_601;
+
+ m_eYuvType = yuv_type;
+ m_eRangeType = range;
+ } else if (yuv_type == ColorConvTable::BT709 && range == ColorConvTable::RANGE_TV) {
+ r8g8b8_to_yuv_func = RGB_PC_TO_YUV_TV_709;
+ r8g8b8_to_uyv_func = RGB_PC_TO_UYV_TV_709;
+ pre_mul_argb_to_ayuv_func = PREMUL_ARGB_PC_TO_AYUV_TV_709;
+ r8g8b8_to_y_func = RGB_PC_TO_Y_TV_709;
+ y8u8v8_to_rgb_func = YUV_TV_TO_RGB_PC_709;
+
+ m_eYuvType = yuv_type;
+ m_eRangeType = range;
+ } else if (yuv_type == ColorConvTable::BT601 && range == ColorConvTable::RANGE_PC) {
+ r8g8b8_to_yuv_func = RGB_PC_TO_YUV_PC_601;
+ r8g8b8_to_uyv_func = RGB_PC_TO_UYV_PC_601;
+ pre_mul_argb_to_ayuv_func = PREMUL_ARGB_PC_TO_AYUV_PC_601;
+ r8g8b8_to_y_func = RGB_PC_TO_Y_PC_601;
+ y8u8v8_to_rgb_func = YUV_PC_TO_RGB_PC_601;
+
+ m_eYuvType = yuv_type;
+ m_eRangeType = range;
+ } else if (yuv_type == ColorConvTable::BT709 && range == ColorConvTable::RANGE_PC) {
+ r8g8b8_to_yuv_func = RGB_PC_TO_YUV_PC_709;
+ r8g8b8_to_uyv_func = RGB_PC_TO_UYV_PC_709;
+ pre_mul_argb_to_ayuv_func = PREMUL_ARGB_PC_TO_AYUV_PC_709;
+ r8g8b8_to_y_func = RGB_PC_TO_Y_PC_709;
+ y8u8v8_to_rgb_func = YUV_PC_TO_RGB_PC_709;
+
+ m_eYuvType = yuv_type;
+ m_eRangeType = range;
+ } else {
+ r8g8b8_to_yuv_func = RGB_PC_TO_YUV_TV_601;
+ r8g8b8_to_uyv_func = RGB_PC_TO_UYV_TV_601;
+ pre_mul_argb_to_ayuv_func = PREMUL_ARGB_PC_TO_AYUV_TV_601;
+ r8g8b8_to_y_func = RGB_PC_TO_Y_TV_601;
+ y8u8v8_to_rgb_func = YUV_TV_TO_RGB_PC_601;
+
+ m_eYuvType = ColorConvTable::BT601;
+ m_eRangeType = ColorConvTable::RANGE_TV;
+ }
+
+ return result;
+}
+
+ConvFunc::ConvFunc(YuvMatrixType yuv_type, YuvRangeType range, bool bOutputTVRange, bool bVSFilterCorrection)
+ : m_bOutputTVRange(bOutputTVRange)
+ , m_bVSFilterCorrection(bVSFilterCorrection)
+{
+ m_convMatrix.InitMatrix(
+ ConvMatrix::LEVEL_TV, ConvMatrix::COLOR_YUV_601,
+ ConvMatrix::LEVEL_TV, ConvMatrix::COLOR_YUV_709);
+ m_convMatrix.InitMatrix(
+ ConvMatrix::LEVEL_TV, ConvMatrix::COLOR_YUV_601,
+ ConvMatrix::LEVEL_PC, ConvMatrix::COLOR_YUV_709);
+ m_convMatrix.InitMatrix(
+ ConvMatrix::LEVEL_PC, ConvMatrix::COLOR_YUV_601,
+ ConvMatrix::LEVEL_TV, ConvMatrix::COLOR_YUV_709);
+ m_convMatrix.InitMatrix(
+ ConvMatrix::LEVEL_PC, ConvMatrix::COLOR_YUV_601,
+ ConvMatrix::LEVEL_PC, ConvMatrix::COLOR_YUV_709);
+
+ m_convMatrix.InitMatrix(
+ ConvMatrix::LEVEL_TV, ConvMatrix::COLOR_YUV_709,
+ ConvMatrix::LEVEL_TV, ConvMatrix::COLOR_YUV_601);
+ m_convMatrix.InitMatrix(
+ ConvMatrix::LEVEL_TV, ConvMatrix::COLOR_YUV_709,
+ ConvMatrix::LEVEL_PC, ConvMatrix::COLOR_YUV_601);
+ m_convMatrix.InitMatrix(
+ ConvMatrix::LEVEL_PC, ConvMatrix::COLOR_YUV_709,
+ ConvMatrix::LEVEL_TV, ConvMatrix::COLOR_YUV_601);
+ m_convMatrix.InitMatrix(
+ ConvMatrix::LEVEL_PC, ConvMatrix::COLOR_YUV_709,
+ ConvMatrix::LEVEL_PC, ConvMatrix::COLOR_YUV_601);
+ InitConvFunc(yuv_type, range);
+}
+
+//
+// ColorConvTable
+//
+ColorConvTable::YuvMatrixType ColorConvTable::GetDefaultYUVType()
+{
+ return ConvFuncInst().m_eYuvType;
+}
+
+ColorConvTable::YuvRangeType ColorConvTable::GetDefaultRangeType()
+{
+ return ConvFuncInst().m_eRangeType;
+}
+
+void ColorConvTable::SetDefaultConvType(YuvMatrixType yuv_type, YuvRangeType range, bool bOutputTVRange, bool bVSFilterCorrection)
+{
+ if (ConvFuncInst().m_eYuvType != yuv_type || ConvFuncInst().m_eRangeType != range) {
+ ConvFuncInst().InitConvFunc(yuv_type, range);
+ }
+ ConvFuncInst().m_bOutputTVRange = bOutputTVRange;
+ ConvFuncInst().m_bVSFilterCorrection = bVSFilterCorrection;
+}
+
+DWORD ColorConvTable::Argb2Auyv(DWORD argb)
+{
+ int r = (argb & 0x00ff0000) >> 16;
+ int g = (argb & 0x0000ff00) >> 8;
+ int b = (argb & 0x000000ff);
+ return (argb & 0xff000000) | ConvFuncInst().r8g8b8_to_uyv_func(r, g, b);
+}
+
+DWORD ColorConvTable::Argb2Ayuv(DWORD argb)
+{
+ int r = (argb & 0x00ff0000) >> 16;
+ int g = (argb & 0x0000ff00) >> 8;
+ int b = (argb & 0x000000ff);
+ return (argb & 0xff000000) | ConvFuncInst().r8g8b8_to_yuv_func(r, g, b);
+}
+
+DWORD ColorConvTable::Argb2Ayuv_TV_BT601(DWORD argb)
+{
+ int r = (argb & 0x00ff0000) >> 16;
+ int g = (argb & 0x0000ff00) >> 8;
+ int b = (argb & 0x000000ff);
+ return (argb & 0xff000000) | RGB_PC_TO_YUV_TV_601(r, g, b);
+}
+
+DWORD ColorConvTable::Ayuv2Auyv(DWORD ayuv)
+{
+ int y = (ayuv & 0x00ff0000) >> 8;
+ int u = (ayuv & 0x0000ff00) << 8;
+ return (ayuv & 0xff0000ff) | u | y;
+}
+
+DWORD ColorConvTable::PreMulArgb2Ayuv(int a8, int r8, int g8, int b8)
+{
+ return ConvFuncInst().pre_mul_argb_to_ayuv_func(a8, r8, g8, b8);
+}
+
+DWORD ColorConvTable::Rgb2Y(int r8, int g8, int b8)
+{
+ return ConvFuncInst().r8g8b8_to_y_func(r8, g8, b8);
+}
+
+DWORD ColorConvTable::Ayuv2Argb_TV_BT601(DWORD ayuv)
+{
+ int y = (ayuv & 0x00ff0000) >> 16;
+ int u = (ayuv & 0x0000ff00) >> 8;
+ int v = (ayuv & 0x000000ff);
+ return (ayuv & 0xff000000) | YUV_TV_TO_RGB_PC_601(y, u, v);
+}
+
+DWORD ColorConvTable::Ayuv2Argb_TV_BT709(DWORD ayuv)
+{
+ int y = (ayuv & 0x00ff0000) >> 16;
+ int u = (ayuv & 0x0000ff00) >> 8;
+ int v = (ayuv & 0x000000ff);
+ return (ayuv & 0xff000000) | YUV_TV_TO_RGB_PC_709(y, u, v);
+}
+
+DWORD ColorConvTable::Ayuv2Argb(DWORD ayuv)
+{
+ int y = (ayuv & 0x00ff0000) >> 16;
+ int u = (ayuv & 0x0000ff00) >> 8;
+ int v = (ayuv & 0x000000ff);
+ return (ayuv & 0xff000000) | ConvFuncInst().y8u8v8_to_rgb_func(y, u, v);
+}
+
+DWORD ColorConvTable::A8Y8U8V8_To_ARGB_TV_BT601(int a8, int y8, int u8, int v8)
+{
+ return (a8 << 24) | YUV_TV_TO_RGB_PC_601(y8, u8, v8);
+}
+
+DWORD ColorConvTable::A8Y8U8V8_To_ARGB_PC_BT601(int a8, int y8, int u8, int v8)
+{
+ return (a8 << 24) | YUV_PC_TO_RGB_PC_601(y8, u8, v8);
+}
+
+DWORD ColorConvTable::A8Y8U8V8_To_ARGB_TV_BT709(int a8, int y8, int u8, int v8)
+{
+ return (a8 << 24) | YUV_TV_TO_RGB_PC_709(y8, u8, v8);
+}
+
+DWORD ColorConvTable::A8Y8U8V8_To_ARGB_PC_BT709(int a8, int y8, int u8, int v8)
+{
+ return (a8 << 24) | YUV_PC_TO_RGB_PC_709(y8, u8, v8);
+}
+
+DWORD ColorConvTable::A8Y8U8V8_PC_To_TV(int a8, int y8, int u8, int v8)
+{
+ const int YUV_MIN = 16;
+ const int cy = int(219.0 / 255 * FRACTION_SCALE + 0.5);
+ const int cuv = int(224.0 / 255 * FRACTION_SCALE + 0.5);
+ y8 = ((y8 * cy) >> 16) + YUV_MIN;
+ u8 = ((u8 * cuv) >> 16) + YUV_MIN;
+ v8 = ((v8 * cuv) >> 16) + YUV_MIN;
+ return (a8 << 24) | (y8 << 16) | (u8 << 8) | v8;
+}
+
+DWORD ColorConvTable::A8Y8U8V8_TV_To_PC(int a8, int y8, int u8, int v8)
+{
+ const int YUV_MIN = 16;
+ const int cy = int(255 / 219.0 * FRACTION_SCALE + 0.5);
+ const int cuv = int(255 / 224.0 * FRACTION_SCALE + 0.5);
+ y8 = ((y8 - YUV_MIN) * cy) >> 16;
+ u8 = ((u8 - YUV_MIN) * cuv) >> 16;
+ v8 = ((v8 - YUV_MIN) * cuv) >> 16;
+ return (a8 << 24) | (y8 << 16) | (u8 << 8) | v8;
+}
+
+DWORD ColorConvTable::RGB_PC_TO_TV(DWORD argb)
+{
+ const int MIN = 16;
+ const int SCALE = int(219.0 / 255 * FRACTION_SCALE + 0.5);
+ DWORD r = (argb & 0x00ff0000) >> 16;
+ DWORD g = (argb & 0x0000ff00) >> 8;
+ DWORD b = (argb & 0x000000ff);
+ r = ((r * SCALE) >> 16) + MIN;
+ g = ((g * SCALE) >> 16) + MIN;
+ b = ((b * SCALE) >> 16) + MIN;
+ return (argb & 0xff000000) | (r << 16) | (g << 8) | b;
+}
+
+DWORD ColorConvTable::A8Y8U8V8_TO_AYUV(int a8, int y8, int u8, int v8,
+ YuvRangeType in_range, YuvMatrixType in_type, YuvRangeType out_range, YuvMatrixType out_type)
+{
+ const int level_map[3] = {
+ ConvMatrix::LEVEL_TV,
+ ConvMatrix::LEVEL_TV,
+ ConvMatrix::LEVEL_PC
+ };
+ const int type_map[3] = {
+ ConvMatrix::COLOR_YUV_601,
+ ConvMatrix::COLOR_YUV_601,
+ ConvMatrix::COLOR_YUV_709
+
+ };
+ //level_map[ColorConvTable::RANGE_NONE] = ConvMatrix::LEVEL_TV;
+ //level_map[ColorConvTable::RANGE_TV] = ConvMatrix::LEVEL_TV;
+ //level_map[ColorConvTable::RANGE_PC] = ConvMatrix::LEVEL_PC;
+ //type_map[ColorConvTable::NONE] = ConvMatrix::COLOR_YUV_601;
+ //type_map[ColorConvTable::BT601] = ConvMatrix::COLOR_YUV_601;
+ //type_map[ColorConvTable::BT709] = ConvMatrix::COLOR_YUV_709;
+ if (in_type == out_type) {
+ if (in_range == RANGE_PC && out_range == RANGE_TV) {
+ return A8Y8U8V8_PC_To_TV(a8, y8, u8, v8);
+ } else if (in_range == RANGE_TV && out_range == RANGE_PC) {
+ return A8Y8U8V8_TV_To_PC(a8, y8, u8, v8);
+ } else {
+ return (a8 << 24) | (y8 << 16) | (u8 << 8) | v8;
+ }
+ }
+ return (a8 << 24) | ConvFuncInst().m_convMatrix.Convert(y8, u8, v8,
+ level_map[in_range], type_map[in_type], level_map[out_range], type_map[out_type]);
+}
+
+DWORD ColorConvTable::A8Y8U8V8_TO_CUR_AYUV(int a8, int y8, int u8, int v8, YuvRangeType in_range, YuvMatrixType in_type)
+{
+ return A8Y8U8V8_TO_AYUV(a8, y8, u8, v8, in_range, in_type,
+ ConvFuncInst().m_eRangeType, ConvFuncInst().m_eYuvType);
+}
+
+DWORD ColorConvTable::A8Y8U8V8_TO_ARGB(int a8, int y8, int u8, int v8, YuvMatrixType in_type)
+{
+ const ConvFunc::Y8U8V8ToRGBFunc funcs[2][2][2] = {
+ {
+ { YUV_TV_TO_RGB_TV_601, YUV_TV_TO_RGB_PC_601 },
+ { YUV_TV_TO_RGB_TV_709, YUV_TV_TO_RGB_PC_709 }
+ },
+ {
+ { YUV_PC_TO_RGB_TV_601, YUV_PC_TO_RGB_PC_601 },
+ { YUV_PC_TO_RGB_TV_709, YUV_PC_TO_RGB_PC_709 }
+ }
+ };
+ return (a8 << 24) | funcs[ConvFuncInst().m_eRangeType == RANGE_PC ? 1 : 0][in_type == BT709 ? 1 : 0][ConvFuncInst().m_bOutputTVRange ? 0 : 1](y8, u8, v8);
+}
+
+DWORD ColorConvTable::ColorCorrection(DWORD argb)
+{
+ if (ConvFuncInst().m_bVSFilterCorrection) {
+ int r = (argb & 0x00ff0000) >> 16;
+ int g = (argb & 0x0000ff00) >> 8;
+ int b = (argb & 0x000000ff);
+ return (argb & 0xff000000) |
+ ConvFuncInst().m_convMatrix.ColorCorrection(r, g, b,
+ ConvFuncInst().m_bOutputTVRange ? ConvMatrix::LEVEL_TV : ConvMatrix::LEVEL_PC);
+ }
+ return argb;
+}
+
+struct YuvPos {
+ int y;
+ int u;
+ int v;
+};
+const YuvPos POS_YUV = { 16, 8, 0 };
+const YuvPos POS_UYV = { 8, 16, 0 };
+
+
+DEFINE_RGB2YUV_FUNC(RGB_PC_TO_YUV_TV_601, RGB_LVL_PC, YUV_LVL_TV, 0.299, 0.587, 0.114, POS_YUV)
+DEFINE_RGB2YUV_FUNC(RGB_PC_TO_YUV_PC_601, RGB_LVL_PC, YUV_LVL_PC, 0.299, 0.587, 0.114, POS_YUV)
+DEFINE_RGB2YUV_FUNC(RGB_PC_TO_YUV_TV_709, RGB_LVL_PC, YUV_LVL_TV, 0.2126, 0.7152, 0.0722, POS_YUV)
+DEFINE_RGB2YUV_FUNC(RGB_PC_TO_YUV_PC_709, RGB_LVL_PC, YUV_LVL_PC, 0.2126, 0.7152, 0.0722, POS_YUV)
+
+DEFINE_RGB2YUV_FUNC(RGB_TV_TO_YUV_TV_601, RGB_LVL_TV, YUV_LVL_TV, 0.299, 0.587, 0.114, POS_YUV)
+DEFINE_RGB2YUV_FUNC(RGB_TV_TO_YUV_PC_601, RGB_LVL_TV, YUV_LVL_PC, 0.299, 0.587, 0.114, POS_YUV)
+DEFINE_RGB2YUV_FUNC(RGB_TV_TO_YUV_TV_709, RGB_LVL_TV, YUV_LVL_TV, 0.2126, 0.7152, 0.0722, POS_YUV)
+DEFINE_RGB2YUV_FUNC(RGB_TV_TO_YUV_PC_709, RGB_LVL_TV, YUV_LVL_PC, 0.2126, 0.7152, 0.0722, POS_YUV)
+
+DEFINE_RGB2YUV_FUNC(RGB_PC_TO_UYV_TV_601, RGB_LVL_PC, YUV_LVL_TV, 0.299, 0.587, 0.114, POS_UYV)
+DEFINE_RGB2YUV_FUNC(RGB_PC_TO_UYV_PC_601, RGB_LVL_PC, YUV_LVL_PC, 0.299, 0.587, 0.114, POS_UYV)
+DEFINE_RGB2YUV_FUNC(RGB_PC_TO_UYV_TV_709, RGB_LVL_PC, YUV_LVL_TV, 0.2126, 0.7152, 0.0722, POS_UYV)
+DEFINE_RGB2YUV_FUNC(RGB_PC_TO_UYV_PC_709, RGB_LVL_PC, YUV_LVL_PC, 0.2126, 0.7152, 0.0722, POS_UYV)
+
+DEFINE_RGB2YUV_FUNC(RGB_TV_TO_UYV_TV_601, RGB_LVL_TV, YUV_LVL_TV, 0.299, 0.587, 0.114, POS_UYV)
+DEFINE_RGB2YUV_FUNC(RGB_TV_TO_UYV_PC_601, RGB_LVL_TV, YUV_LVL_PC, 0.299, 0.587, 0.114, POS_UYV)
+DEFINE_RGB2YUV_FUNC(RGB_TV_TO_UYV_TV_709, RGB_LVL_TV, YUV_LVL_TV, 0.2126, 0.7152, 0.0722, POS_UYV)
+DEFINE_RGB2YUV_FUNC(RGB_TV_TO_UYV_PC_709, RGB_LVL_TV, YUV_LVL_PC, 0.2126, 0.7152, 0.0722, POS_UYV)
+
+DEFINE_YUV2RGB_FUNC(YUV_TV_TO_RGB_PC_601, RGB_LVL_PC, YUV_LVL_TV, 0.299, 0.587, 0.114)
+DEFINE_YUV2RGB_FUNC(YUV_PC_TO_RGB_PC_601, RGB_LVL_PC, YUV_LVL_PC, 0.299, 0.587, 0.114)
+DEFINE_YUV2RGB_FUNC(YUV_TV_TO_RGB_PC_709, RGB_LVL_PC, YUV_LVL_TV, 0.2126, 0.7152, 0.0722)
+DEFINE_YUV2RGB_FUNC(YUV_PC_TO_RGB_PC_709, RGB_LVL_PC, YUV_LVL_PC, 0.2126, 0.7152, 0.0722)
+
+DEFINE_YUV2RGB_FUNC(YUV_TV_TO_RGB_TV_601, RGB_LVL_TV, YUV_LVL_TV, 0.299, 0.587, 0.114)
+DEFINE_YUV2RGB_FUNC(YUV_PC_TO_RGB_TV_601, RGB_LVL_TV, YUV_LVL_PC, 0.299, 0.587, 0.114)
+DEFINE_YUV2RGB_FUNC(YUV_TV_TO_RGB_TV_709, RGB_LVL_TV, YUV_LVL_TV, 0.2126, 0.7152, 0.0722)
+DEFINE_YUV2RGB_FUNC(YUV_PC_TO_RGB_TV_709, RGB_LVL_TV, YUV_LVL_PC, 0.2126, 0.7152, 0.0722)
+
+DEFINE_PREMUL_ARGB2AYUV_FUNC(PREMUL_ARGB_PC_TO_AYUV_TV_601, RGB_LVL_PC, YUV_LVL_TV, 0.299, 0.587, 0.114, POS_YUV)
+DEFINE_PREMUL_ARGB2AYUV_FUNC(PREMUL_ARGB_PC_TO_AYUV_PC_601, RGB_LVL_PC, YUV_LVL_PC, 0.299, 0.587, 0.114, POS_YUV)
+DEFINE_PREMUL_ARGB2AYUV_FUNC(PREMUL_ARGB_PC_TO_AYUV_TV_709, RGB_LVL_PC, YUV_LVL_TV, 0.2126, 0.7152, 0.0722, POS_YUV)
+DEFINE_PREMUL_ARGB2AYUV_FUNC(PREMUL_ARGB_PC_TO_AYUV_PC_709, RGB_LVL_PC, YUV_LVL_PC, 0.2126, 0.7152, 0.0722, POS_YUV)
+
+DEFINE_PREMUL_ARGB2AYUV_FUNC(PREMUL_ARGB_TV_TO_AYUV_TV_601, RGB_LVL_TV, YUV_LVL_TV, 0.299, 0.587, 0.114, POS_YUV)
+DEFINE_PREMUL_ARGB2AYUV_FUNC(PREMUL_ARGB_TV_TO_AYUV_PC_601, RGB_LVL_TV, YUV_LVL_PC, 0.299, 0.587, 0.114, POS_YUV)
+DEFINE_PREMUL_ARGB2AYUV_FUNC(PREMUL_ARGB_TV_TO_AYUV_TV_709, RGB_LVL_TV, YUV_LVL_TV, 0.2126, 0.7152, 0.0722, POS_YUV)
+DEFINE_PREMUL_ARGB2AYUV_FUNC(PREMUL_ARGB_TV_TO_AYUV_PC_709, RGB_LVL_TV, YUV_LVL_PC, 0.2126, 0.7152, 0.0722, POS_YUV)
+
+DEFINE_RGB2Y_FUNC(RGB_PC_TO_Y_TV_601, RGB_LVL_PC, YUV_LVL_TV, 0.299, 0.587, 0.114)
+DEFINE_RGB2Y_FUNC(RGB_PC_TO_Y_PC_601, RGB_LVL_PC, YUV_LVL_PC, 0.299, 0.587, 0.114)
+DEFINE_RGB2Y_FUNC(RGB_PC_TO_Y_TV_709, RGB_LVL_PC, YUV_LVL_TV, 0.2126, 0.7152, 0.0722)
+DEFINE_RGB2Y_FUNC(RGB_PC_TO_Y_PC_709, RGB_LVL_PC, YUV_LVL_PC, 0.2126, 0.7152, 0.0722)
+
+DEFINE_RGB2Y_FUNC(RGB_TV_TO_Y_TV_601, RGB_LVL_TV, YUV_LVL_TV, 0.299, 0.587, 0.114)
+DEFINE_RGB2Y_FUNC(RGB_TV_TO_Y_PC_601, RGB_LVL_TV, YUV_LVL_PC, 0.299, 0.587, 0.114)
+DEFINE_RGB2Y_FUNC(RGB_TV_TO_Y_TV_709, RGB_LVL_TV, YUV_LVL_TV, 0.2126, 0.7152, 0.0722)
+DEFINE_RGB2Y_FUNC(RGB_TV_TO_Y_PC_709, RGB_LVL_TV, YUV_LVL_PC, 0.2126, 0.7152, 0.0722)
diff --git a/src/Subtitles/ColorConvTable.h b/src/Subtitles/ColorConvTable.h
new file mode 100644
index 000000000..36d217826
--- /dev/null
+++ b/src/Subtitles/ColorConvTable.h
@@ -0,0 +1,69 @@
+/*
+* (C) 2015 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#pragma once
+
+struct ColorConvTable {
+ enum YuvMatrixType {
+ NONE,
+ BT601,
+ BT709
+ };
+
+ enum YuvRangeType {
+ RANGE_NONE,
+ RANGE_TV,
+ RANGE_PC
+ };
+
+ static void SetDefaultConvType(YuvMatrixType yuv_type, YuvRangeType range, bool bOutputTVRange, bool bVSFilterCorrection);
+
+ static YuvMatrixType GetDefaultYUVType();
+ static YuvRangeType GetDefaultRangeType();
+
+ static DWORD Argb2Ayuv(DWORD argb);
+ static DWORD Argb2Ayuv_TV_BT601(DWORD argb);
+ static DWORD Argb2Auyv(DWORD argb);
+ static DWORD Ayuv2Auyv(DWORD ayuv);
+ static DWORD Rgb2Y(int r8, int g8, int b8);
+ static DWORD PreMulArgb2Ayuv(int a8, int r8, int g8, int b8);
+
+ static DWORD Ayuv2Argb(DWORD ayuv);
+ static DWORD Ayuv2Argb_TV_BT601(DWORD ayuv);
+ static DWORD A8Y8U8V8_To_ARGB_TV_BT601(int a8, int y8, int u8, int v8);
+ static DWORD A8Y8U8V8_To_ARGB_PC_BT601(int a8, int y8, int u8, int v8);
+ static DWORD Ayuv2Argb_TV_BT709(DWORD ayuv);
+ static DWORD A8Y8U8V8_To_ARGB_TV_BT709(int a8, int y8, int u8, int v8);
+ static DWORD A8Y8U8V8_To_ARGB_PC_BT709(int a8, int y8, int u8, int v8);
+
+ static DWORD A8Y8U8V8_PC_To_TV(int a8, int y8, int u8, int v8);
+ static DWORD A8Y8U8V8_TV_To_PC(int a8, int y8, int u8, int v8);
+
+ //should not past NONE into it
+ static DWORD A8Y8U8V8_TO_AYUV(int a8, int y8, int u8, int v8, YuvRangeType in_range, YuvMatrixType in_type, YuvRangeType out_range, YuvMatrixType out_type);
+ static DWORD A8Y8U8V8_TO_CUR_AYUV(int a8, int y8, int u8, int v8, YuvRangeType in_range, YuvMatrixType in_type);
+ static DWORD A8Y8U8V8_TO_ARGB(int a8, int y8, int u8, int v8, YuvMatrixType in_type);
+
+ static DWORD RGB_PC_TO_TV(DWORD argb);
+
+ static DWORD ColorCorrection(DWORD argb);
+
+ ColorConvTable() = delete;
+};
diff --git a/src/Subtitles/CompositionObject.cpp b/src/Subtitles/CompositionObject.cpp
index 51e2a4e2d..4993a790e 100644
--- a/src/Subtitles/CompositionObject.cpp
+++ b/src/Subtitles/CompositionObject.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,6 +20,7 @@
#include "stdafx.h"
#include "CompositionObject.h"
+#include "ColorConvTable.h"
#include "../DSUtil/GolombBuffer.h"
@@ -73,7 +74,7 @@ void CompositionObject::Init()
m_cropping_horizontal_position = m_cropping_vertical_position = 0;
m_cropping_width = m_cropping_height = 0;
- m_colors.fill(0xff000000);
+ m_colors.fill(0);
}
void CompositionObject::Reset()
@@ -82,15 +83,11 @@ void CompositionObject::Reset()
Init();
}
-void CompositionObject::SetPalette(int nNbEntry, const HDMV_PALETTE* pPalette, bool BT709, int sourceBlackLevel, int sourceWhiteLevel, int targetBlackLevel, int targetWhiteLevel)
+void CompositionObject::SetPalette(int nNbEntry, const HDMV_PALETTE* pPalette, ColorConvTable::YuvMatrixType currentMatrix)
{
m_nColorNumber = nNbEntry;
for (int i = 0; i < nNbEntry; i++) {
- if (BT709) {
- m_colors[pPalette[i].entry_id] = YCrCbToRGB_Rec709(pPalette[i].T, pPalette[i].Y, pPalette[i].Cr, pPalette[i].Cb, sourceBlackLevel, sourceWhiteLevel, targetBlackLevel, targetWhiteLevel);
- } else {
- m_colors[pPalette[i].entry_id] = YCrCbToRGB_Rec601(pPalette[i].T, pPalette[i].Y, pPalette[i].Cr, pPalette[i].Cb, sourceBlackLevel, sourceWhiteLevel, targetBlackLevel, targetWhiteLevel);
- }
+ m_colors[pPalette[i].entry_id] = ColorConvTable::A8Y8U8V8_TO_ARGB(pPalette[i].T, pPalette[i].Y, pPalette[i].Cb, pPalette[i].Cr, currentMatrix);
}
}
@@ -200,6 +197,12 @@ void CompositionObject::DvbRenderField(SubPicDesc& spd, CGolombBuffer& gb, short
short nX = nXStart;
short nY = nYStart;
size_t nEnd = gb.GetPos() + nLength;
+ if (nEnd > gb.GetSize()) {
+ // Unexpected end of data, the file is probably corrupted
+ // but try to render the subtitles anyway
+ ASSERT(FALSE);
+ nEnd = gb.GetSize();
+ }
while (gb.GetPos() < nEnd) {
BYTE bType = gb.ReadByte();
@@ -272,11 +275,6 @@ void CompositionObject::Dvb2PixelsCodeString(SubPicDesc& spd, CGolombBuffer& gb,
}
}
- if (nX + nCount > m_width) {
- ASSERT(FALSE);
- break;
- }
-
if (nCount > 0) {
FillSolidRect(spd, nX, nY, nCount, 1, m_colors[nPaletteIndex]);
nX += nCount;
@@ -330,13 +328,6 @@ void CompositionObject::Dvb4PixelsCodeString(SubPicDesc& spd, CGolombBuffer& gb,
}
}
-#if 0
- if (nX + nCount > m_width) {
- ASSERT(FALSE);
- break;
- }
-#endif
-
if (nCount > 0) {
FillSolidRect(spd, nX, nY, nCount, 1, m_colors[nPaletteIndex]);
nX += nCount;
@@ -369,11 +360,6 @@ void CompositionObject::Dvb8PixelsCodeString(SubPicDesc& spd, CGolombBuffer& gb,
}
}
- if (nX + nCount > m_width) {
- ASSERT(FALSE);
- break;
- }
-
if (nCount > 0) {
FillSolidRect(spd, nX, nY, nCount, 1, m_colors[nPaletteIndex]);
nX += nCount;
diff --git a/src/Subtitles/CompositionObject.h b/src/Subtitles/CompositionObject.h
index 1d2bf1a1b..767ef4630 100644
--- a/src/Subtitles/CompositionObject.h
+++ b/src/Subtitles/CompositionObject.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,7 @@
#pragma once
#include "Rasterizer.h"
+#include "ColorConvTable.h"
struct HDMV_PALETTE {
@@ -68,7 +69,7 @@ public:
void RenderHdmv(SubPicDesc& spd);
void RenderDvb(SubPicDesc& spd, short nX, short nY);
void WriteSeg(SubPicDesc& spd, short nX, short nY, short nCount, short nPaletteIndex);
- void SetPalette(int nNbEntry, const HDMV_PALETTE* pPalette, bool BT709, int sourceBlackLevel, int sourceWhiteLevel, int targetBlackLevel, int targetWhiteLevel);
+ void SetPalette(int nNbEntry, const HDMV_PALETTE* pPalette, ColorConvTable::YuvMatrixType currentMatrix);
bool HavePalette() const { return m_nColorNumber > 0; };
// Forbid the use of direct affectation for now, it would be dangerous because
diff --git a/src/Subtitles/DVBSub.cpp b/src/Subtitles/DVBSub.cpp
index 15b9b5175..79d1e6c81 100644
--- a/src/Subtitles/DVBSub.cpp
+++ b/src/Subtitles/DVBSub.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -34,13 +34,13 @@
CDVBSub::CDVBSub(CCritSec* pLock, const CString& name, LCID lcid)
: CRLECodedSubtitle(pLock, name, lcid)
+ , m_nBufferSize(0)
, m_nBufferReadPos(0)
, m_nBufferWritePos(0)
- , m_nBufferSize(0)
, m_pBuffer(nullptr)
{
if (m_name.IsEmpty() || m_name == _T("Unknown")) {
- m_name = "DVB Embedded Subtitle";
+ m_name = _T("DVB Embedded Subtitle");
}
}
@@ -101,40 +101,44 @@ STDMETHODIMP CDVBSub::Render(SubPicDesc& spd, REFERENCE_TIME rt, double fps, REC
if (POSITION posPage = FindPage(rt)) {
const auto& pPage = m_pages.GetAt(posPage);
- bool BT709 = m_infoSourceTarget.sourceMatrix == BT_709 ? true : m_infoSourceTarget.sourceMatrix == NONE ? (m_displayInfo.width > 720) : false;
+ m_eSourceMatrix = ColorConvTable::NONE ? (m_displayInfo.width > 720) ? ColorConvTable::BT709 : ColorConvTable::BT601 : m_eSourceMatrix;
pPage->rendered = true;
TRACE_DVB(_T("DVB - Renderer - %s - %s\n"), ReftimeToString(pPage->rtStart), ReftimeToString(pPage->rtStop));
- int nRegion = 1, nObject = 1;
- for (POSITION pos = pPage->regionsPos.GetHeadPosition(); pos; nRegion++) {
- DVB_REGION_POS regionPos = pPage->regionsPos.GetNext(pos);
-
- if (POSITION posRegion = FindRegion(pPage, regionPos.id)) {
- const auto& pRegion = pPage->regions.GetAt(posRegion);
+ size_t nRegion = 1;
+ for (const auto& regionPos : pPage->regionsPos) {
+ auto itRegion = FindRegion(pPage, regionPos.id);
+ if (itRegion != pPage->regions.cend()) {
+ const auto& pRegion = *itRegion;
+ auto itCLUT = FindClut(pPage, pRegion->CLUT_id);
- if (POSITION posCLUT = FindClut(pPage, pRegion->CLUT_id)) {
- const auto& pCLUT = pPage->CLUTs.GetAt(posCLUT);
+ if (itCLUT != pPage->CLUTs.cend()) {
+ const auto& pCLUT = *itCLUT;
- for (POSITION posO = pRegion->objects.GetHeadPosition(); posO; nObject++) {
- DVB_OBJECT objectPos = pRegion->objects.GetNext(posO);
+ size_t nObject = 1;
+ for (const auto& objectPos : pRegion->objects) {
+ auto itObject = FindObject(pPage, objectPos.object_id);
- if (POSITION posObject = FindObject(pPage, objectPos.object_id)) {
- const auto& pObject = pPage->objects.GetAt(posObject);
+ if (itObject != pPage->objects.cend()) {
+ const auto& pObject = *itObject;
short nX = regionPos.horizAddr + objectPos.object_horizontal_position;
short nY = regionPos.vertAddr + objectPos.object_vertical_position;
pObject->m_width = pRegion->width;
pObject->m_height = pRegion->height;
- pObject->SetPalette(pCLUT->size, pCLUT->palette, BT709,
- m_infoSourceTarget.sourceBlackLevel, m_infoSourceTarget.sourceWhiteLevel, m_infoSourceTarget.targetBlackLevel, m_infoSourceTarget.targetWhiteLevel);
+ pObject->SetPalette(pCLUT->size, pCLUT->palette.data(), m_eSourceMatrix);
pObject->RenderDvb(spd, nX, nY);
- TRACE_DVB(_T(" --> %d/%d - %d/%d\n"), nRegion, pPage->regionsPos.GetCount(), nObject, pRegion->objects.GetCount());
+ TRACE_DVB(_T(" --> %Iu/%Iu - %Iu/%Iu\n"), nRegion, pPage->regionsPos.size(), nObject, pRegion->objects.size());
}
+
+ nObject++;
}
}
}
+
+ nRegion++;
}
bbox.left = 0;
@@ -285,16 +289,16 @@ HRESULT CDVBSub::ParseSample(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, BYTE
// Copy data from the previous page
const auto& pPrevPage = m_pages.GetTail();
- for (POSITION pos = pPrevPage->regions.GetHeadPosition(); pos;) {
- m_pCurrentPage->regions.AddTail(CAutoPtr<DVB_REGION>(DEBUG_NEW DVB_REGION(*pPrevPage->regions.GetNext(pos))));
+ for (const auto& region : pPrevPage->regions) {
+ m_pCurrentPage->regions.emplace_back(DEBUG_NEW DVB_REGION(*region));
}
- for (POSITION pos = pPrevPage->objects.GetHeadPosition(); pos;) {
- m_pCurrentPage->objects.AddTail(CAutoPtr<CompositionObject>(DEBUG_NEW CompositionObject(*pPrevPage->objects.GetNext(pos))));
+ for (const auto& object : pPrevPage->objects) {
+ m_pCurrentPage->objects.emplace_back(DEBUG_NEW CompositionObject(*object));
}
- for (POSITION pos = pPrevPage->CLUTs.GetHeadPosition(); pos;) {
- m_pCurrentPage->CLUTs.AddTail(CAutoPtr<DVB_CLUT>(DEBUG_NEW DVB_CLUT(*pPrevPage->CLUTs.GetNext(pos))));
+ for (const auto& CLUT : pPrevPage->CLUTs) {
+ m_pCurrentPage->CLUTs.emplace_back(DEBUG_NEW DVB_CLUT(*CLUT));
}
TRACE_DVB(_T("DVB - Page started [update] %s, TimeOut = %ds\n"),
@@ -421,55 +425,34 @@ POSITION CDVBSub::FindPage(REFERENCE_TIME rt) const
return nullptr;
}
-POSITION CDVBSub::FindRegion(const CAutoPtr<DVB_PAGE>& pPage, BYTE bRegionId) const
+CDVBSub::RegionList::const_iterator CDVBSub::FindRegion(const CAutoPtr<DVB_PAGE>& pPage, BYTE bRegionId) const
{
- if (pPage != nullptr) {
- POSITION pos = pPage->regions.GetHeadPosition();
-
- while (pos) {
- POSITION currentPos = pos;
- const auto& pRegion = pPage->regions.GetNext(pos);
+ ENSURE(pPage);
- if (pRegion->id == bRegionId) {
- return currentPos;
- }
- }
- }
- return nullptr;
+ return std::find_if(pPage->regions.cbegin(), pPage->regions.cend(),
+ [bRegionId](const std::unique_ptr<DVB_REGION>& pRegion) {
+ return pRegion->id == bRegionId;
+ });
}
-POSITION CDVBSub::FindClut(const CAutoPtr<DVB_PAGE>& pPage, BYTE bClutId) const
+CDVBSub::ClutList::const_iterator CDVBSub::FindClut(const CAutoPtr<DVB_PAGE>& pPage, BYTE bClutId) const
{
- if (pPage != nullptr) {
- POSITION pos = pPage->CLUTs.GetHeadPosition();
-
- while (pos) {
- POSITION currentPos = pos;
- const auto& pCLUT = pPage->CLUTs.GetNext(pos);
+ ENSURE(pPage);
- if (pCLUT->id == bClutId) {
- return currentPos;
- }
- }
- }
- return nullptr;
+ return std::find_if(pPage->CLUTs.cbegin(), pPage->CLUTs.cend(),
+ [bClutId](const std::unique_ptr<DVB_CLUT>& pCLUT) {
+ return pCLUT->id == bClutId;
+ });
}
-POSITION CDVBSub::FindObject(const CAutoPtr<DVB_PAGE>& pPage, short sObjectId) const
+CDVBSub::CompositionObjectList::const_iterator CDVBSub::FindObject(const CAutoPtr<DVB_PAGE>& pPage, short sObjectId) const
{
- if (pPage != nullptr) {
- POSITION pos = pPage->objects.GetHeadPosition();
-
- while (pos) {
- POSITION currentPos = pos;
- const auto& pObject = pPage->objects.GetNext(pos);
+ ENSURE(pPage);
- if (pObject->m_object_id_ref == sObjectId) {
- return currentPos;
- }
- }
- }
- return nullptr;
+ return std::find_if(pPage->objects.cbegin(), pPage->objects.cend(),
+ [sObjectId](const std::unique_ptr<CompositionObject>& pObject) {
+ return pObject->m_object_id_ref == sObjectId;
+ });
}
HRESULT CDVBSub::ParsePage(CGolombBuffer& gb, WORD wSegLength, CAutoPtr<DVB_PAGE>& pPage)
@@ -477,7 +460,7 @@ HRESULT CDVBSub::ParsePage(CGolombBuffer& gb, WORD wSegLength, CAutoPtr<DVB_PAGE
size_t nExpectedSize = 2;
size_t nEnd = gb.GetPos() + wSegLength;
- pPage = CAutoPtr<DVB_PAGE>(DEBUG_NEW DVB_PAGE());
+ pPage.Attach(DEBUG_NEW DVB_PAGE());
pPage->pageTimeOut = gb.ReadByte();
pPage->pageVersionNumber = (BYTE)gb.BitRead(4);
@@ -490,7 +473,7 @@ HRESULT CDVBSub::ParsePage(CGolombBuffer& gb, WORD wSegLength, CAutoPtr<DVB_PAGE
gb.ReadByte(); // Reserved
regionPos.horizAddr = gb.ReadShort();
regionPos.vertAddr = gb.ReadShort();
- pPage->regionsPos.AddTail(regionPos);
+ pPage->regionsPos.emplace_back(std::move(regionPos));
}
return (wSegLength == nExpectedSize) ? S_OK : E_UNEXPECTED;
@@ -525,11 +508,12 @@ HRESULT CDVBSub::ParseRegion(CGolombBuffer& gb, WORD wSegLength)
size_t nEnd = gb.GetPos() + wSegLength;
BYTE id = gb.ReadByte();
- POSITION posRegion = FindRegion(m_pCurrentPage, id);
- if (!posRegion) {
- posRegion = m_pCurrentPage->regions.AddTail(CAutoPtr<DVB_REGION>(DEBUG_NEW DVB_REGION()));
+ auto itRegion = FindRegion(m_pCurrentPage, id);
+ if (itRegion == m_pCurrentPage->regions.cend()) {
+ m_pCurrentPage->regions.emplace_back(DEBUG_NEW DVB_REGION());
+ itRegion = std::prev(m_pCurrentPage->regions.cend());
}
- const auto& pRegion = m_pCurrentPage->regions.GetAt(posRegion);
+ const auto& pRegion = *itRegion;
pRegion->id = id;
pRegion->version_number = (BYTE)gb.BitRead(4);
@@ -560,7 +544,7 @@ HRESULT CDVBSub::ParseRegion(CGolombBuffer& gb, WORD wSegLength)
object.foreground_pixel_code = gb.ReadByte();
object.background_pixel_code = gb.ReadByte();
}
- pRegion->objects.AddTail(object);
+ pRegion->objects.emplace_back(std::move(object));
}
hr = (wSegLength == nExpectedSize) ? S_OK : E_UNEXPECTED;
@@ -578,11 +562,12 @@ HRESULT CDVBSub::ParseClut(CGolombBuffer& gb, WORD wSegLength)
size_t nEnd = gb.GetPos() + wSegLength;
BYTE id = gb.ReadByte();
- POSITION posClut = FindClut(m_pCurrentPage, id);
- if (!posClut) {
- posClut = m_pCurrentPage->CLUTs.AddTail(CAutoPtr<DVB_CLUT>(DEBUG_NEW DVB_CLUT()));
+ auto itClut = FindClut(m_pCurrentPage, id);
+ if (itClut == m_pCurrentPage->CLUTs.cend()) {
+ m_pCurrentPage->CLUTs.emplace_back(DEBUG_NEW DVB_CLUT());
+ itClut = std::prev(m_pCurrentPage->CLUTs.cend());
}
- const auto& pClut = m_pCurrentPage->CLUTs.GetAt(posClut);
+ const auto& pClut = *itClut;
pClut->id = id;
pClut->version_number = (BYTE)gb.BitRead(4);
@@ -635,14 +620,15 @@ HRESULT CDVBSub::ParseObject(CGolombBuffer& gb, WORD wSegLength)
if (m_pCurrentPage) {
size_t nExpectedSize = 3;
- size_t nEnd = gb.GetPos() + wSegLength;
+ // size_t nEnd = gb.GetPos() + wSegLength;
short id = gb.ReadShort();
- POSITION posObject = FindObject(m_pCurrentPage, id);
- if (!posObject) {
- posObject = m_pCurrentPage->objects.AddTail(CAutoPtr<CompositionObject>(DEBUG_NEW CompositionObject()));
+ auto itObject = FindObject(m_pCurrentPage, id);
+ if (itObject == m_pCurrentPage->objects.cend()) {
+ m_pCurrentPage->objects.emplace_back(DEBUG_NEW CompositionObject());
+ itObject = std::prev(m_pCurrentPage->objects.cend());
}
- const auto& pObject = m_pCurrentPage->objects.GetAt(posObject);
+ const auto& pObject = *itObject;
pObject->m_object_id_ref = id;
pObject->m_version_number = (BYTE)gb.BitRead(4);
@@ -658,7 +644,7 @@ HRESULT CDVBSub::ParseObject(CGolombBuffer& gb, WORD wSegLength)
hr = (wSegLength >= nExpectedSize) ? S_OK : E_UNEXPECTED;
} else {
TRACE_DVB(_T("DVB - Text subtitles are currently not supported\n"));
- m_pCurrentPage->objects.RemoveTail();
+ m_pCurrentPage->objects.pop_back();
hr = E_NOTIMPL;
}
}
@@ -704,10 +690,11 @@ void CDVBSub::RemoveOldPages(REFERENCE_TIME rt)
{
// Cleanup the old pages. We keep a 2 min buffer to play nice with the queue.
while (!m_pages.IsEmpty() && m_pages.GetHead()->rtStop + 120 * 10000000i64 < rt) {
- auto pPage = m_pages.RemoveHead();
+ const auto& pPage = m_pages.GetHead();
if (!pPage->rendered) {
TRACE_DVB(_T("DVB - remove unrendered object, %s - %s\n"),
ReftimeToString(pPage->rtStart), ReftimeToString(pPage->rtStop));
}
+ m_pages.RemoveHeadNoReturn();
}
}
diff --git a/src/Subtitles/DVBSub.h b/src/Subtitles/DVBSub.h
index e000801a7..a393c06b2 100644
--- a/src/Subtitles/DVBSub.h
+++ b/src/Subtitles/DVBSub.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,8 @@
#include "RLECodedSubtitle.h"
#include "CompositionObject.h"
+#include <list>
+#include <memory>
class CGolombBuffer;
@@ -71,141 +73,77 @@ private:
};
struct DVB_CLUT {
- BYTE id;
- BYTE version_number;
- BYTE size;
+ BYTE id = 0;
+ BYTE version_number = 0;
+ WORD size = 0;
- HDMV_PALETTE palette[256];
+ std::array<HDMV_PALETTE, 256> palette;
DVB_CLUT()
- : id(0)
- , version_number(0)
- , size(0) {
- ZeroMemory(palette, sizeof(palette));
+ : palette() {
}
};
struct DVB_DISPLAY {
- BYTE version_number;
- BYTE display_window_flag;
- short width;
- short height;
- short horizontal_position_minimun;
- short horizontal_position_maximum;
- short vertical_position_minimun;
- short vertical_position_maximum;
-
- DVB_DISPLAY()
// Default value (section 5.1.3)
- : version_number(0)
- , display_window_flag(0)
- , width(720)
- , height(576)
- , horizontal_position_minimun(0)
- , horizontal_position_maximum(0)
- , vertical_position_minimun(0)
- , vertical_position_maximum(0) {
- }
+ BYTE version_number = 0;
+ BYTE display_window_flag = 0;
+ short width = 720;
+ short height = 576;
+ short horizontal_position_minimun = 0;
+ short horizontal_position_maximum = 0;
+ short vertical_position_minimun = 0;
+ short vertical_position_maximum = 0;
};
struct DVB_OBJECT {
- short object_id;
- BYTE object_type;
- BYTE object_provider_flag;
- short object_horizontal_position;
- short object_vertical_position;
- BYTE foreground_pixel_code;
- BYTE background_pixel_code;
-
- DVB_OBJECT()
- : object_id(0xFF)
- , object_type(0)
- , object_provider_flag(0)
- , object_horizontal_position(0)
- , object_vertical_position(0)
- , foreground_pixel_code(0)
- , background_pixel_code(0) {
- }
+ short object_id = 0;
+ BYTE object_type = 0;
+ BYTE object_provider_flag = 0;
+ short object_horizontal_position = 0;
+ short object_vertical_position = 0;
+ BYTE foreground_pixel_code = 0;
+ BYTE background_pixel_code = 0;
};
struct DVB_REGION_POS {
- BYTE id;
- WORD horizAddr;
- WORD vertAddr;
-
- DVB_REGION_POS()
- : id(0)
- , horizAddr(0)
- , vertAddr(0) {
- }
+ BYTE id = 0;
+ WORD horizAddr = 0;
+ WORD vertAddr = 0;
};
struct DVB_REGION {
- BYTE id;
- BYTE version_number;
- BYTE fill_flag;
- WORD width;
- WORD height;
- BYTE level_of_compatibility;
- BYTE depth;
- BYTE CLUT_id;
- BYTE _8_bit_pixel_code;
- BYTE _4_bit_pixel_code;
- BYTE _2_bit_pixel_code;
- CAtlList<DVB_OBJECT> objects;
-
- DVB_REGION()
- : id(0)
- , version_number(0)
- , fill_flag(0)
- , width(0)
- , height(0)
- , level_of_compatibility(0)
- , depth(0)
- , CLUT_id(0)
- , _8_bit_pixel_code(0)
- , _4_bit_pixel_code(0)
- , _2_bit_pixel_code(0) {
- }
-
- DVB_REGION(const CDVBSub::DVB_REGION& region)
- : id(region.id)
- , version_number(region.version_number)
- , fill_flag(region.fill_flag)
- , width(region.width)
- , height(region.height)
- , level_of_compatibility(region.level_of_compatibility)
- , depth(region.depth)
- , CLUT_id(region.CLUT_id)
- , _8_bit_pixel_code(region._8_bit_pixel_code)
- , _4_bit_pixel_code(region._4_bit_pixel_code)
- , _2_bit_pixel_code(region._2_bit_pixel_code) {
- objects.AddHeadList(&region.objects);
- }
+ BYTE id = 0;
+ BYTE version_number = 0;
+ BYTE fill_flag = 0;
+ WORD width = 0;
+ WORD height = 0;
+ BYTE level_of_compatibility = 0;
+ BYTE depth = 0;
+ BYTE CLUT_id = 0;
+ BYTE _8_bit_pixel_code = 0;
+ BYTE _4_bit_pixel_code = 0;
+ BYTE _2_bit_pixel_code = 0;
+ std::list<DVB_OBJECT> objects;
};
+ using RegionList = std::list<std::unique_ptr<DVB_REGION>>;
+ using CompositionObjectList = std::list<std::unique_ptr<CompositionObject>>;
+ using ClutList = std::list<std::unique_ptr<DVB_CLUT>>;
+
class DVB_PAGE
{
public:
- REFERENCE_TIME rtStart;
- REFERENCE_TIME rtStop;
- BYTE pageTimeOut;
- BYTE pageVersionNumber;
- BYTE pageState;
- CAtlList<DVB_REGION_POS> regionsPos;
- CAutoPtrList<DVB_REGION> regions;
- CAutoPtrList<CompositionObject> objects;
- CAutoPtrList<DVB_CLUT> CLUTs;
- bool rendered;
-
- DVB_PAGE()
- : pageTimeOut(0)
- , pageVersionNumber(0)
- , pageState(0)
- , rendered(false)
- , rtStart(0)
- , rtStop(0) {
- }
+ REFERENCE_TIME rtStart = 0;
+ REFERENCE_TIME rtStop = 0;
+ BYTE pageTimeOut = 0;
+ BYTE pageVersionNumber = 0;
+ BYTE pageState = 0;
+ std::list<DVB_REGION_POS> regionsPos;
+ RegionList regions;
+ CompositionObjectList objects;
+ ClutList CLUTs;
+ bool rendered = false;
};
size_t m_nBufferSize;
@@ -219,9 +157,9 @@ private:
HRESULT AddToBuffer(BYTE* pData, size_t nSize);
POSITION FindPage(REFERENCE_TIME rt) const;
- POSITION FindRegion(const CAutoPtr<DVB_PAGE>& pPage, BYTE bRegionId) const;
- POSITION FindClut(const CAutoPtr<DVB_PAGE>& pPage, BYTE bClutId) const;
- POSITION FindObject(const CAutoPtr<DVB_PAGE>& pPage, short sObjectId) const;
+ RegionList::const_iterator FindRegion(const CAutoPtr<DVB_PAGE>& pPage, BYTE bRegionId) const;
+ ClutList::const_iterator FindClut(const CAutoPtr<DVB_PAGE>& pPage, BYTE bClutId) const;
+ CompositionObjectList::const_iterator FindObject(const CAutoPtr<DVB_PAGE>& pPage, short sObjectId) const;
HRESULT ParsePage(CGolombBuffer& gb, WORD wSegLength, CAutoPtr<DVB_PAGE>& pPage);
HRESULT ParseDisplay(CGolombBuffer& gb, WORD wSegLength);
diff --git a/src/Subtitles/Ellipse.cpp b/src/Subtitles/Ellipse.cpp
index 9788fd3e7..bf8b8c281 100644
--- a/src/Subtitles/Ellipse.cpp
+++ b/src/Subtitles/Ellipse.cpp
@@ -1,5 +1,5 @@
/*
-* (C) 2014 see Authors.txt
+* (C) 2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,9 +24,9 @@
CEllipse::CEllipse(int rx, int ry)
: m_rx(rx)
, m_ry(ry)
- , m_2rx(2 * m_rx)
- , m_2ry(2 * m_ry)
- , nIntersectCacheLineSize(2 * (m_rx - 1) + 1)
+ , m_2rx(2 * rx)
+ , m_2ry(2 * ry)
+ , nIntersectCacheLineSize(rx > 0 ? 2 * (rx - 1) + 1 : 0)
{
m_arc.resize(m_2ry + 1);
m_arc[m_ry] = m_rx;
@@ -106,8 +106,12 @@ void CEllipseCenterGroup::AddPoint(CAtlList<EllipseCenter>& centers, IntersectFu
void CEllipseCenterGroup::AddSpan(int y, int xLeft, int xRight)
{
- AddPoint(m_leftCenters, [this](int dx, int dy) { return m_pEllipse->GetLeftIntersect(dx, dy); }, xLeft, y);
- AddPoint(m_rightCenters, [this](int dx, int dy) { return m_pEllipse->GetRightIntersect(dx, dy); }, xRight, y);
+ AddPoint(m_leftCenters, [this](int dx, int dy) {
+ return m_pEllipse->GetLeftIntersect(dx, dy);
+ }, xLeft, y);
+ AddPoint(m_rightCenters, [this](int dx, int dy) {
+ return m_pEllipse->GetRightIntersect(dx, dy);
+ }, xRight, y);
}
CEllipseCenterGroup::Position CEllipseCenterGroup::GetRelativePosition(int xLeft, int y)
diff --git a/src/Subtitles/PGSSub.cpp b/src/Subtitles/PGSSub.cpp
index 748c2058e..047030aaa 100644
--- a/src/Subtitles/PGSSub.cpp
+++ b/src/Subtitles/PGSSub.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -41,7 +41,7 @@ CPGSSub::CPGSSub(CCritSec* pLock, const CString& name, LCID lcid)
, m_nSegSize(0)
{
if (m_name.IsEmpty() || m_name == _T("Unknown")) {
- m_name = "PGS Embedded Subtitle";
+ m_name = _T("PGS Embedded Subtitle");
}
}
@@ -216,8 +216,8 @@ void CPGSSub::Reset()
m_nCurSegment = NO_SEGMENT;
m_pCurrentPresentationSegment.Free();
m_pPresentationSegments.RemoveAll();
- for (int i = 0; i < _countof(m_compositionObjects); i++) {
- m_compositionObjects[i].Reset();
+ for (auto& compositionObject : m_compositionObjects) {
+ compositionObject.Reset();
}
}
@@ -247,7 +247,7 @@ HRESULT CPGSSub::Render(SubPicDesc& spd, REFERENCE_TIME rt, RECT& bbox, bool bRe
if (posPresentationSegment) {
const auto& pPresentationSegment = m_pPresentationSegments.GetAt(posPresentationSegment);
- bool BT709 = m_infoSourceTarget.sourceMatrix == BT_709 ? true : m_infoSourceTarget.sourceMatrix == NONE ? (pPresentationSegment->video_descriptor.nVideoWidth > 720) : false;
+ m_eSourceMatrix = ColorConvTable::NONE ? (pPresentationSegment->video_descriptor.nVideoWidth > 720) ? ColorConvTable::BT709 : ColorConvTable::BT601 : m_eSourceMatrix;
TRACE_PGSSUB(_T("CPGSSub:Render Presentation segment %d --> %s - %s\n"), pPresentationSegment->composition_descriptor.nNumber,
ReftimeToString(pPresentationSegment->rtStart),
@@ -256,14 +256,10 @@ HRESULT CPGSSub::Render(SubPicDesc& spd, REFERENCE_TIME rt, RECT& bbox, bool bRe
bbox.left = bbox.top = LONG_MAX;
bbox.right = bbox.bottom = 0;
- POSITION pos = pPresentationSegment->objects.GetHeadPosition();
- while (pos) {
- const auto& pObject = pPresentationSegment->objects.GetNext(pos);
-
+ for (const auto& pObject : pPresentationSegment->objects) {
if (pObject->GetRLEDataSize() && pObject->m_width > 0 && pObject->m_height > 0
&& spd.w >= (pObject->m_horizontal_position + pObject->m_width) && spd.h >= (pObject->m_vertical_position + pObject->m_height)) {
- pObject->SetPalette(pPresentationSegment->CLUT.size, pPresentationSegment->CLUT.palette, BT709,
- m_infoSourceTarget.sourceBlackLevel, m_infoSourceTarget.sourceWhiteLevel, m_infoSourceTarget.targetBlackLevel, m_infoSourceTarget.targetWhiteLevel);
+ pObject->SetPalette(pPresentationSegment->CLUT.size, pPresentationSegment->CLUT.palette.data(), m_eSourceMatrix);
bbox.left = std::min(pObject->m_horizontal_position, bbox.left);
bbox.top = std::min(pObject->m_vertical_position, bbox.top);
bbox.right = std::max(pObject->m_horizontal_position + pObject->m_width, bbox.right);
@@ -289,7 +285,8 @@ HRESULT CPGSSub::Render(SubPicDesc& spd, REFERENCE_TIME rt, RECT& bbox, bool bRe
int CPGSSub::ParsePresentationSegment(REFERENCE_TIME rt, CGolombBuffer* pGBuffer)
{
- m_pCurrentPresentationSegment = CAutoPtr<HDMV_PRESENTATION_SEGMENT>(DEBUG_NEW HDMV_PRESENTATION_SEGMENT());
+ m_pCurrentPresentationSegment.Free();
+ m_pCurrentPresentationSegment.Attach(DEBUG_NEW HDMV_PRESENTATION_SEGMENT());
m_pCurrentPresentationSegment->rtStart = rt;
m_pCurrentPresentationSegment->rtStop = UNKNOWN_TIME; // Unknown for now
@@ -304,9 +301,10 @@ int CPGSSub::ParsePresentationSegment(REFERENCE_TIME rt, CGolombBuffer* pGBuffer
m_pCurrentPresentationSegment->composition_descriptor.bState, m_pCurrentPresentationSegment->objectCount);
for (int i = 0; i < m_pCurrentPresentationSegment->objectCount; i++) {
- CAutoPtr<CompositionObject> pCompositionObject(DEBUG_NEW CompositionObject());
- ParseCompositionObject(pGBuffer, pCompositionObject);
- m_pCurrentPresentationSegment->objects.AddTail(pCompositionObject);
+ std::unique_ptr<CompositionObject> pCompositionObject(DEBUG_NEW CompositionObject());
+ if (ParseCompositionObject(pGBuffer, pCompositionObject)) {
+ m_pCurrentPresentationSegment->objects.emplace_back(std::move(pCompositionObject));
+ }
}
return m_pCurrentPresentationSegment->objectCount;
@@ -319,10 +317,7 @@ void CPGSSub::EnqueuePresentationSegment()
m_pCurrentPresentationSegment->CLUT = m_CLUTs[m_pCurrentPresentationSegment->CLUT.id];
// Get the objects' data
- POSITION pos = m_pCurrentPresentationSegment->objects.GetHeadPosition();
- while (pos) {
- const auto& pObject = m_pCurrentPresentationSegment->objects.GetNext(pos);
-
+ for (auto& pObject : m_pCurrentPresentationSegment->objects) {
const CompositionObject& pObjectData = m_compositionObjects[pObject->m_object_id_ref];
pObject->m_width = pObjectData.m_width;
@@ -369,9 +364,9 @@ void CPGSSub::ParsePalette(CGolombBuffer* pGBuffer, size_t nSize) // #497
CLUT.version_number = pGBuffer->ReadByte();
ASSERT((nSize - 2) % sizeof(HDMV_PALETTE) == 0);
- CLUT.size = BYTE((nSize - 2) / sizeof(HDMV_PALETTE));
+ CLUT.size = WORD((nSize - 2) / sizeof(HDMV_PALETTE));
- for (int i = 0; i < CLUT.size; i++) {
+ for (WORD i = 0; i < CLUT.size; i++) {
CLUT.palette[i].entry_id = pGBuffer->ReadByte();
CLUT.palette[i].Y = pGBuffer->ReadByte();
@@ -384,7 +379,10 @@ void CPGSSub::ParsePalette(CGolombBuffer* pGBuffer, size_t nSize) // #497
void CPGSSub::ParseObject(CGolombBuffer* pGBuffer, size_t nUnitSize) // #498
{
short object_id = pGBuffer->ReadShort();
- ASSERT(object_id < _countof(m_compositionObjects));
+ if (object_id < 0 || size_t(object_id) >= m_compositionObjects.size()) {
+ ASSERT(FALSE); // This is not supposed to happen
+ return;
+ }
CompositionObject& pObject = m_compositionObjects[object_id];
@@ -405,12 +403,17 @@ void CPGSSub::ParseObject(CGolombBuffer* pGBuffer, size_t nUnitSize) // #498
}
}
-void CPGSSub::ParseCompositionObject(CGolombBuffer* pGBuffer, const CAutoPtr<CompositionObject>& pCompositionObject)
+bool CPGSSub::ParseCompositionObject(CGolombBuffer* pGBuffer, const std::unique_ptr<CompositionObject>& pCompositionObject)
{
- BYTE bTemp;
- pCompositionObject->m_object_id_ref = pGBuffer->ReadShort();
+ short object_id_ref = pGBuffer->ReadShort();
+ if (object_id_ref < 0 || size_t(object_id_ref) >= m_compositionObjects.size()) {
+ ASSERT(FALSE); // This is not supposed to happen
+ return false;
+ }
+
+ pCompositionObject->m_object_id_ref = object_id_ref;
pCompositionObject->m_window_id_ref = pGBuffer->ReadByte();
- bTemp = pGBuffer->ReadByte();
+ BYTE bTemp = pGBuffer->ReadByte();
pCompositionObject->m_object_cropped_flag = !!(bTemp & 0x80);
pCompositionObject->m_forced_on_flag = !!(bTemp & 0x40);
pCompositionObject->m_horizontal_position = pGBuffer->ReadShort();
@@ -422,6 +425,8 @@ void CPGSSub::ParseCompositionObject(CGolombBuffer* pGBuffer, const CAutoPtr<Com
pCompositionObject->m_cropping_width = pGBuffer->ReadShort();
pCompositionObject->m_cropping_height = pGBuffer->ReadShort();
}
+
+ return true;
}
void CPGSSub::ParseVideoDescriptor(CGolombBuffer* pGBuffer, VIDEO_DESCRIPTOR* pVideoDescriptor)
@@ -459,12 +464,12 @@ void CPGSSub::RemoveOldSegments(REFERENCE_TIME rt)
while (!m_pPresentationSegments.IsEmpty()
&& m_pPresentationSegments.GetHead()->rtStop != UNKNOWN_TIME
&& m_pPresentationSegments.GetHead()->rtStop + 120 * 10000000i64 < rt) {
- auto pPresentationSegment = m_pPresentationSegments.RemoveHead();
TRACE_PGSSUB(_T("CPGSSub::RemoveOldSegments Remove presentation segment %d %s => %s (rt=%s)\n"),
- pPresentationSegment->composition_descriptor.nNumber,
- ReftimeToString(pPresentationSegment->rtStart),
- ReftimeToString(pPresentationSegment->rtStop),
+ m_pPresentationSegments.GetHead()->composition_descriptor.nNumber,
+ ReftimeToString(m_pPresentationSegments.GetHead()->rtStart),
+ ReftimeToString(m_pPresentationSegments.GetHead()->rtStop),
ReftimeToString(rt));
+ m_pPresentationSegments.RemoveHeadNoReturn();
}
}
@@ -491,8 +496,9 @@ bool CPGSSubFile::Open(CString fn, CString name /*= _T("")*/, CString videoName
{
bool bOpened = false;
+ CString guessed = Subtitle::GuessSubtitleName(fn, videoName, m_lcid, m_eHearingImpaired);
if (name.IsEmpty()) {
- m_name = Subtitle::GuessSubtitleName(fn, videoName);
+ m_name = guessed;
} else {
m_name = name;
}
@@ -536,7 +542,7 @@ void CPGSSubFile::ParseFile(CString fn)
headerBuffer.ReadByte(); // segment type
WORD wLenSegment = (WORD)headerBuffer.ReadShort();
- // Let some round to add the segment type and size
+ // Leave some room to add the segment type and size
int nLenData = nExtraSize + wLenSegment;
segBuff.resize(nLenData);
memcpy(segBuff.data(), &header[header.size() - nExtraSize], nExtraSize);
diff --git a/src/Subtitles/PGSSub.h b/src/Subtitles/PGSSub.h
index 09cf4adfa..d459048ef 100644
--- a/src/Subtitles/PGSSub.h
+++ b/src/Subtitles/PGSSub.h
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,6 +23,8 @@
#include "RLECodedSubtitle.h"
#include "CompositionObject.h"
#include <thread>
+#include <list>
+#include <memory>
class CGolombBuffer;
@@ -80,17 +82,14 @@ private:
};
struct HDMV_CLUT {
- BYTE id;
- BYTE version_number;
- BYTE size;
+ BYTE id = 0;
+ BYTE version_number = 0;
+ WORD size = 0;
- HDMV_PALETTE palette[256];
+ std::array<HDMV_PALETTE, 256> palette;
HDMV_CLUT()
- : id(0)
- , version_number(0)
- , size(0) {
- ZeroMemory(palette, sizeof(palette));
+ : palette() {
}
};
@@ -106,7 +105,7 @@ private:
int objectCount;
- CAutoPtrList<CompositionObject> objects;
+ std::list<std::unique_ptr<CompositionObject>> objects;
};
HDMV_SEGMENT_TYPE m_nCurSegment;
@@ -118,8 +117,8 @@ private:
CAutoPtr<HDMV_PRESENTATION_SEGMENT> m_pCurrentPresentationSegment;
CAutoPtrList<HDMV_PRESENTATION_SEGMENT> m_pPresentationSegments;
- HDMV_CLUT m_CLUTs[256];
- CompositionObject m_compositionObjects[64];
+ std::array<HDMV_CLUT, 256> m_CLUTs;
+ std::array<CompositionObject, 64> m_compositionObjects;
void AllocSegment(size_t nSize);
int ParsePresentationSegment(REFERENCE_TIME rt, CGolombBuffer* pGBuffer);
@@ -130,7 +129,7 @@ private:
void ParseObject(CGolombBuffer* pGBuffer, size_t nUnitSize);
void ParseVideoDescriptor(CGolombBuffer* pGBuffer, VIDEO_DESCRIPTOR* pVideoDescriptor);
void ParseCompositionDescriptor(CGolombBuffer* pGBuffer, COMPOSITION_DESCRIPTOR* pCompositionDescriptor);
- void ParseCompositionObject(CGolombBuffer* pGBuffer, const CAutoPtr<CompositionObject>& pCompositionObject);
+ bool ParseCompositionObject(CGolombBuffer* pGBuffer, const std::unique_ptr<CompositionObject>& pCompositionObject);
POSITION FindPresentationSegment(REFERENCE_TIME rt) const;
diff --git a/src/Subtitles/RLECodedSubtitle.cpp b/src/Subtitles/RLECodedSubtitle.cpp
index 0b187d765..b130b0de9 100644
--- a/src/Subtitles/RLECodedSubtitle.cpp
+++ b/src/Subtitles/RLECodedSubtitle.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2008-2014 see Authors.txt
+ * (C) 2008-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -27,8 +27,8 @@ CRLECodedSubtitle::CRLECodedSubtitle(CCritSec* pLock, const CString& name, LCID
: CSubPicProviderImpl(pLock)
, m_name(name)
, m_lcid(lcid)
+ , m_eHearingImpaired(Subtitle::HI_UNKNOWN)
{
-
}
STDMETHODIMP CRLECodedSubtitle::NonDelegatingQueryInterface(REFIID riid, void** ppv)
@@ -102,40 +102,38 @@ STDMETHODIMP CRLECodedSubtitle::Reload()
return S_OK;
}
-HRESULT CRLECodedSubtitle::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
-{
- CAutoLock cAutoLock(&m_csCritSec);
-
- Reset();
-
- return S_OK;
-}
-
STDMETHODIMP CRLECodedSubtitle::SetSourceTargetInfo(CString yuvMatrix, int targetBlackLevel, int targetWhiteLevel)
{
+ yuvMatrix.Replace(_T(".VSFilter"), _T(""));
int nPos = 0;
CString range = yuvMatrix.Tokenize(_T("."), nPos);
CString matrix = yuvMatrix.Mid(nPos);
- m_infoSourceTarget.sourceBlackLevel = 16;
- m_infoSourceTarget.sourceWhiteLevel = 235;
+ ColorConvTable::YuvRangeType sourceRange = ColorConvTable::RANGE_TV;
if (range == _T("PC")) {
- m_infoSourceTarget.sourceBlackLevel = 0;
- m_infoSourceTarget.sourceWhiteLevel = 255;
+ sourceRange = ColorConvTable::RANGE_PC;
}
if (matrix == _T("709")) {
- m_infoSourceTarget.sourceMatrix = BT_709;
+ m_eSourceMatrix = ColorConvTable::BT709;
} else if (matrix == _T("240M")) {
- m_infoSourceTarget.sourceMatrix = BT_709;
+ m_eSourceMatrix = ColorConvTable::BT709;
} else if (matrix == _T("601")) {
- m_infoSourceTarget.sourceMatrix = BT_601;
+ m_eSourceMatrix = ColorConvTable::BT601;
} else {
- m_infoSourceTarget.sourceMatrix = NONE;
+ m_eSourceMatrix = ColorConvTable::NONE;
}
- m_infoSourceTarget.targetBlackLevel = targetBlackLevel;
- m_infoSourceTarget.targetWhiteLevel = targetWhiteLevel;
+ ColorConvTable::SetDefaultConvType(ColorConvTable::BT601, sourceRange, (targetWhiteLevel < 245), false); // Matrix isn't relevant here.
+
+ return S_OK;
+}
+
+HRESULT CRLECodedSubtitle::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
+{
+ CAutoLock cAutoLock(&m_csCritSec);
+
+ Reset();
return S_OK;
}
diff --git a/src/Subtitles/RLECodedSubtitle.h b/src/Subtitles/RLECodedSubtitle.h
index ac407e54b..b71e8538c 100644
--- a/src/Subtitles/RLECodedSubtitle.h
+++ b/src/Subtitles/RLECodedSubtitle.h
@@ -1,5 +1,5 @@
/*
- * (C) 2008-2014 see Authors.txt
+ * (C) 2008-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,8 @@
#pragma once
#include "../SubPic/SubPicProviderImpl.h"
+#include "ColorConvTable.h"
+#include "SubtitleHelpers.h"
class __declspec(uuid("FCA68599-C83E-4ea5-94A3-C2E1B0E326B9"))
@@ -47,31 +49,19 @@ public:
STDMETHODIMP_(int) GetStream();
STDMETHODIMP SetStream(int iStream);
STDMETHODIMP Reload();
+ STDMETHODIMP SetSourceTargetInfo(CString yuvMatrix, int targetBlackLevel, int targetWhiteLevel);
virtual HRESULT ParseSample(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, BYTE* pData, size_t nLen) PURE;
HRESULT NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
virtual void EndOfStream() PURE;
virtual void Reset() PURE;
- STDMETHODIMP SetSourceTargetInfo(CString yuvMatrix, int targetBlackLevel, int targetWhiteLevel);
protected:
CCritSec m_csCritSec;
CString m_name;
LCID m_lcid;
+ Subtitle::HearingImpairedType m_eHearingImpaired;
- enum SOURCE_MATRIX {
- NONE,
- BT_709,
- BT_601
- };
-
- struct SourceTarget {
- int sourceBlackLevel = 16;
- int sourceWhiteLevel = 235;
- int targetBlackLevel = 0;
- int targetWhiteLevel = 255;
-
- SOURCE_MATRIX sourceMatrix = NONE;
- } m_infoSourceTarget;
+ ColorConvTable::YuvMatrixType m_eSourceMatrix = ColorConvTable::NONE;
};
diff --git a/src/Subtitles/RTS.cpp b/src/Subtitles/RTS.cpp
index ec158b73d..d52d80ea6 100644
--- a/src/Subtitles/RTS.cpp
+++ b/src/Subtitles/RTS.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,11 +20,12 @@
*/
#include "stdafx.h"
-#include <math.h>
+#include <cmath>
#include <intrin.h>
#include <algorithm>
+#include "ColorConvTable.h"
#include "RTS.h"
-#include "../DSUtil/WinAPIUtils.h"
+#include "../DSUtil/PathUtils.h"
// WARNING: this isn't very thread safe, use only one RTS a time. We should use TLS in future.
static HDC g_hDC;
@@ -39,7 +40,7 @@ static long revcolor(long c)
// CMyFont
-CMyFont::CMyFont(STSStyle& style)
+CMyFont::CMyFont(const STSStyle& style)
{
LOGFONT lf;
ZeroMemory(&lf, sizeof(lf));
@@ -65,24 +66,24 @@ CMyFont::CMyFont(STSStyle& style)
// CWord
-CWord::CWord(STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley,
+CWord::CWord(const STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley,
RenderingCaches& renderingCaches)
- : m_style(style)
+ : m_fDrawn(false)
+ , m_p(INT_MAX, INT_MAX)
+ , m_renderingCaches(renderingCaches)
+ , m_scalex(scalex)
+ , m_scaley(scaley)
, m_str(str)
- , m_width(0)
- , m_ascent(0)
- , m_descent(0)
+ , m_fWhiteSpaceChar(false)
+ , m_fLineBreak(false)
+ , m_style(style)
+ , m_pOpaqueBox(nullptr)
, m_ktype(ktype)
, m_kstart(kstart)
, m_kend(kend)
- , m_fDrawn(false)
- , m_p(INT_MAX, INT_MAX)
- , m_fLineBreak(false)
- , m_fWhiteSpaceChar(false)
- , m_pOpaqueBox(nullptr)
- , m_scalex(scalex)
- , m_scaley(scaley)
- , m_renderingCaches(renderingCaches)
+ , m_width(0)
+ , m_ascent(0)
+ , m_descent(0)
{
if (str.IsEmpty()) {
m_fWhiteSpaceChar = m_fLineBreak = true;
@@ -123,17 +124,13 @@ void CWord::Paint(const CPoint& p, const CPoint& org)
if (m_renderingCaches.overlayCache.Lookup(overlayKey, m_pOverlayData)) {
m_fDrawn = m_renderingCaches.outlineCache.Lookup(overlayKey, m_pOutlineData);
if (m_style.borderStyle == 1) {
- if (!CreateOpaqueBox()) {
- return;
- }
+ VERIFY(CreateOpaqueBox());
}
} else {
if (!m_fDrawn) {
if (m_renderingCaches.outlineCache.Lookup(overlayKey, m_pOutlineData)) {
if (m_style.borderStyle == 1) {
- if (!CreateOpaqueBox()) {
- return;
- }
+ VERIFY(CreateOpaqueBox());
}
} else {
if (!CreatePath()) {
@@ -163,9 +160,7 @@ void CWord::Paint(const CPoint& p, const CPoint& org)
return;
}
} else if (m_style.borderStyle == 1) {
- if (!CreateOpaqueBox()) {
- return;
- }
+ VERIFY(CreateOpaqueBox());
}
m_renderingCaches.outlineCache.SetAt(overlayKey, m_pOutlineData);
@@ -192,10 +187,13 @@ void CWord::Paint(const CPoint& p, const CPoint& org)
void CWord::Transform(CPoint org)
{
- if (m_bUseSSE2) { // SSE code
- Transform_SSE2(org);
- } else { // C-code
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
Transform_C(org);
+ } else
+#endif
+ {
+ Transform_SSE2(org);
}
}
@@ -207,12 +205,14 @@ bool CWord::CreateOpaqueBox()
STSStyle style = m_style;
style.borderStyle = 0;
- style.outlineWidthX = style.outlineWidthY = 0;
+ // We don't want to apply the outline and the scaling twice
+ style.outlineWidthX = style.outlineWidthY = 0.0;
+ style.fontScaleX = style.fontScaleY = 100.0;
style.colors[0] = m_style.colors[2];
style.alpha[0] = m_style.alpha[2];
- int w = (int)(m_style.outlineWidthX + 0.5);
- int h = (int)(m_style.outlineWidthY + 0.5);
+ int w = std::lround(m_style.outlineWidthX);
+ int h = std::lround(m_style.outlineWidthY);
// Convert to pixels rounding to nearest
CStringW str;
@@ -222,7 +222,12 @@ bool CWord::CreateOpaqueBox()
(m_width + w + 4) / 8, (m_ascent + m_descent + h + 4) / 8,
-(w + 4) / 8, (m_ascent + m_descent + h + 4) / 8);
- m_pOpaqueBox = DEBUG_NEW CPolygon(style, str, 0, 0, 0, 1.0, 1.0, 0, m_renderingCaches);
+ try {
+ m_pOpaqueBox = DEBUG_NEW CPolygon(style, str, 0, 0, 0, 1.0, 1.0, 0, m_renderingCaches);
+ } catch (CMemoryException* e) {
+ e->Delete();
+ m_pOpaqueBox = nullptr;
+ }
return !!m_pOpaqueBox;
}
@@ -417,7 +422,7 @@ void CWord::Transform_SSE2(const CPoint& org)
// CText
-CText::CText(STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley,
+CText::CText(const STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley,
RenderingCaches& renderingCaches)
: CWord(style, str, ktype, kstart, kend, scalex, scaley, renderingCaches)
{
@@ -528,7 +533,7 @@ bool CText::CreatePath()
// CPolygon
-CPolygon::CPolygon(STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley, int baseline,
+CPolygon::CPolygon(const STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley, int baseline,
RenderingCaches& renderingCaches)
: CWord(style, str, ktype, kstart, kend, scalex, scaley, renderingCaches)
, m_baseline(baseline)
@@ -604,14 +609,16 @@ bool CPolygon::ParseStr()
};
for (LPCWSTR str = m_str; *str;) {
- // Trim left whitespace
- while (CStringW::StrTraits::IsSpace(*str)) {
+ // Trim any leading invalid characters and whitespace
+ while (*str && !isValidAction(*str)) {
str++;
}
const WCHAR c = *str;
- do {
- str++;
- } while (isValidAction(*str));
+ if (*str) {
+ do {
+ str++;
+ } while (isValidAction(*str));
+ }
switch (c) {
case L'm':
if (!bFoundMove) {
@@ -792,9 +799,14 @@ CClipper::CClipper(CStringW str, const CSize& size, double scalex, double scaley
e->Delete();
return;
}
+ memset(m_pAlphaMask, (m_inverse ? 0x40 : 0), alphaMaskSize);
Paint(CPoint(0, 0), CPoint(0, 0));
+ if (!m_pOverlayData) {
+ return;
+ }
+
int w = m_pOverlayData->mOverlayWidth, h = m_pOverlayData->mOverlayHeight;
int x = (m_pOverlayData->mOffsetX + m_cpOffset.x + 4) >> 3, y = (m_pOverlayData->mOffsetY + m_cpOffset.y + 4) >> 3;
@@ -821,8 +833,6 @@ CClipper::CClipper(CStringW str, const CSize& size, double scalex, double scaley
return;
}
- memset(m_pAlphaMask, (m_inverse ? 0x40 : 0), alphaMaskSize);
-
const BYTE* src = m_pOverlayData->mpOverlayBufferBody + m_pOverlayData->mOverlayPitch * yo + xo;
BYTE* dst = m_pAlphaMask + m_size.cx * y + x;
@@ -957,6 +967,7 @@ CRect CLine::PaintShadow(SubPicDesc& spd, CRect& clipRect, BYTE* pAlphaMask, CPo
}
COLORREF shadow = revcolor(w->m_style.colors[3]) | (a << 24);
DWORD sw[6] = {shadow, DWORD_MAX};
+ sw[0] = ColorConvTable::ColorCorrection(sw[0]);
w->Paint(CPoint(x, y), org);
@@ -987,7 +998,7 @@ CRect CLine::PaintOutline(SubPicDesc& spd, CRect& clipRect, BYTE* pAlphaMask, CP
return bbox; // should not happen since this class is just a line of text without any breaks
}
- if (w->m_style.outlineWidthX + w->m_style.outlineWidthY > 0 && !(w->m_ktype == 2 && time < w->m_kstart)) {
+ if ((w->m_style.outlineWidthX + w->m_style.outlineWidthY > 0 || w->m_style.borderStyle == 1) && !(w->m_ktype == 2 && time < w->m_kstart)) {
int x = p.x;
int y = p.y + m_ascent - w->m_ascent;
DWORD aoutline = w->m_style.alpha[2];
@@ -996,6 +1007,7 @@ CRect CLine::PaintOutline(SubPicDesc& spd, CRect& clipRect, BYTE* pAlphaMask, CP
}
COLORREF outline = revcolor(w->m_style.colors[2]) | ((0xff - aoutline) << 24);
DWORD sw[6] = {outline, DWORD_MAX};
+ sw[0] = ColorConvTable::ColorCorrection(sw[0]);
w->Paint(CPoint(x, y), org);
@@ -1075,14 +1087,14 @@ CRect CLine::PaintBody(SubPicDesc& spd, CRect& clipRect, BYTE* pAlphaMask, CPoin
if (w->m_style.fBlur) {
bluradjust += 8;
}
- double tx = w->m_style.fontAngleZ;
- UNREFERENCED_PARAMETER(tx);
- sw[4] = sw[2];
- sw[5] = 0x00ffffff;
w->Paint(CPoint(x, y), org);
+ sw[0] = ColorConvTable::ColorCorrection(sw[0]);
+ sw[2] = ColorConvTable::ColorCorrection(sw[2]);
sw[3] = (int)(w->m_style.outlineWidthX + t * w->getOverlayWidth() + t * bluradjust) >> 3;
+ sw[4] = sw[2];
+ sw[5] = 0x00ffffff;
bbox |= w->Draw(spd, clipRect, pAlphaMask, x, y, sw, true, false);
p.x += w->m_width;
@@ -1096,19 +1108,19 @@ CRect CLine::PaintBody(SubPicDesc& spd, CRect& clipRect, BYTE* pAlphaMask, CPoin
CSubtitle::CSubtitle(RenderingCaches& renderingCaches)
: m_renderingCaches(renderingCaches)
- , m_pClipper(nullptr)
- , m_clipInverse(false)
- , m_scalex(1.0)
- , m_scaley(1.0)
, m_scrAlignment(0)
, m_wrapStyle(0)
, m_fAnimated(false)
- , m_relativeTo(STSStyle::AUTO)
+ , m_bIsAnimated(false)
+ , m_relativeTo(STSStyle::VIDEO)
+ , m_pClipper(nullptr)
, m_topborder(0)
, m_bottomborder(0)
+ , m_clipInverse(false)
+ , m_scalex(1.0)
+ , m_scaley(1.0)
{
ZeroMemory(m_effects, sizeof(Effect*)*EF_NUMBEROFEFFECTS);
- m_bIsAnimated = false;
}
CSubtitle::~CSubtitle()
@@ -1294,22 +1306,30 @@ void CSubtitle::CreateClippers(CSize size)
size.cx >>= 3;
size.cy >>= 3;
- if (m_effects[EF_BANNER] && m_effects[EF_BANNER]->param[2]) {
- int width = m_effects[EF_BANNER]->param[2];
-
- int w = size.cx, h = size.cy;
+ auto createClipper = [this](const CSize & size) {
+ ASSERT(!m_pClipper);
+ CStringW str;
+ str.Format(L"m %d %d l %d %d %d %d %d %d", 0, 0, size.cx, 0, size.cx, size.cy, 0, size.cy);
- if (!m_pClipper) {
- CStringW str;
- str.Format(L"m %d %d l %d %d %d %d %d %d", 0, 0, w, 0, w, h, 0, h);
- try {
- m_pClipper = DEBUG_NEW CClipper(str, size, 1, 1, false, CPoint(0, 0), m_renderingCaches);
- } catch (CMemoryException* e) {
- e->Delete();
- return;
+ try {
+ m_pClipper = DEBUG_NEW CClipper(str, size, 1.0, 1.0, false, CPoint(0, 0), m_renderingCaches);
+ if (!m_pClipper->m_pAlphaMask) {
+ SAFE_DELETE(m_pClipper);
}
+ } catch (CMemoryException* e) {
+ e->Delete();
}
+ return !!m_pClipper;
+ };
+
+ if (m_effects[EF_BANNER] && m_effects[EF_BANNER]->param[2]) {
+ if (!m_pClipper && !createClipper(size)) {
+ return;
+ }
+
+ int width = m_effects[EF_BANNER]->param[2];
+ int w = size.cx, h = size.cy;
int da = (64 << 8) / width;
BYTE* am = m_pClipper->m_pAlphaMask;
@@ -1318,7 +1338,7 @@ void CSubtitle::CreateClippers(CSize size)
int k = std::min(width, w);
for (ptrdiff_t i = 0; i < k; i++, a += da) {
- am[i] = (am[i] * a) >> 14;
+ am[i] = BYTE((am[i] * a) >> 14);
}
a = 0x40 << 8;
@@ -1330,26 +1350,16 @@ void CSubtitle::CreateClippers(CSize size)
}
for (ptrdiff_t i = k; i < w; i++, a -= da) {
- am[i] = (am[i] * a) >> 14;
+ am[i] = BYTE((am[i] * a) >> 14);
}
}
} else if (m_effects[EF_SCROLL] && m_effects[EF_SCROLL]->param[4]) {
- int height = m_effects[EF_SCROLL]->param[4];
-
- int w = size.cx, h = size.cy;
-
- if (!m_pClipper) {
- CStringW str;
- str.Format(L"m %d %d l %d %d %d %d %d %d", 0, 0, w, 0, w, h, 0, h);
- try {
- m_pClipper = DEBUG_NEW CClipper(str, size, 1, 1, false, CPoint(0, 0),
- m_renderingCaches);
- } catch (CMemoryException* e) {
- e->Delete();
- return;
- }
+ if (!m_pClipper && !createClipper(size)) {
+ return;
}
+ int height = m_effects[EF_SCROLL]->param[4];
+ int w = size.cx, h = size.cy;
int da = (64 << 8) / height;
int a = 0;
int k = m_effects[EF_SCROLL]->param[0] >> 3;
@@ -1369,7 +1379,7 @@ void CSubtitle::CreateClippers(CSize size)
for (ptrdiff_t j = k; j < l; j++, a += da) {
for (ptrdiff_t i = 0; i < w; i++, am++) {
- *am = ((*am) * a) >> 14;
+ *am = BYTE(((*am) * a) >> 14);
}
}
}
@@ -1392,7 +1402,7 @@ void CSubtitle::CreateClippers(CSize size)
int j = k;
for (; j < l; j++, a += da) {
for (ptrdiff_t i = 0; i < w; i++, am++) {
- *am = ((*am) * a) >> 14;
+ *am = BYTE(((*am) * a) >> 14);
}
}
@@ -1530,9 +1540,6 @@ CAtlMap<CStringW, SSATagCmd, CStringElementTraits<CStringW>> CRenderedTextSubtit
CRenderedTextSubtitle::CRenderedTextSubtitle(CCritSec* pLock)
: CSubPicProviderImpl(pLock)
- , m_bOverrideStyle(false)
- , m_bOverridePlacement(false)
- , m_overridePlacement(50, 90)
, m_time(0)
, m_delay(0)
, m_animStart(0)
@@ -1543,6 +1550,9 @@ CRenderedTextSubtitle::CRenderedTextSubtitle(CCritSec* pLock)
, m_kend(0)
, m_nPolygon(0)
, m_polygonBaselineOffset(0)
+ , m_bOverrideStyle(false)
+ , m_bOverridePlacement(false)
+ , m_overridePlacement(50, 90)
{
m_size = CSize(0, 0);
@@ -1961,8 +1971,8 @@ bool CRenderedTextSubtitle::ParseSSATag(SSATagsList& tagsList, const CStringW& s
tag.paramsInt.Add(wcstol(tag.params[0], nullptr, 10));
tag.params.RemoveAt(0);
} else if (nParams == 4) {
- for (size_t i = 0; i < nParams; i++) {
- tag.paramsInt.Add(wcstol(tag.params[i], nullptr, 10));
+ for (size_t n = 0; n < nParams; n++) {
+ tag.paramsInt.Add(wcstol(tag.params[n], nullptr, 10));
}
tag.params.RemoveAll();
}
@@ -1971,8 +1981,8 @@ bool CRenderedTextSubtitle::ParseSSATag(SSATagsList& tagsList, const CStringW& s
case SSA_fade: {
size_t nParams = tag.params.GetCount();
if (nParams == 7 || nParams == 2) {
- for (size_t i = 0; i < nParams; i++) {
- tag.paramsInt.Add(wcstol(tag.params[i], nullptr, 10));
+ for (size_t n = 0; n < nParams; n++) {
+ tag.paramsInt.Add(wcstol(tag.params[n], nullptr, 10));
}
tag.params.RemoveAll();
}
@@ -1981,11 +1991,11 @@ bool CRenderedTextSubtitle::ParseSSATag(SSATagsList& tagsList, const CStringW& s
case SSA_move: {
size_t nParams = tag.params.GetCount();
if (nParams == 4 || nParams == 6) {
- for (size_t i = 0; i < 4; i++) {
- tag.paramsReal.Add(wcstod(tag.params[i], nullptr));
+ for (size_t n = 0; n < 4; n++) {
+ tag.paramsReal.Add(wcstod(tag.params[n], nullptr));
}
- for (size_t i = 4; i < nParams; i++) {
- tag.paramsInt.Add(wcstol(tag.params[i], nullptr, 10));
+ for (size_t n = 4; n < nParams; n++) {
+ tag.paramsInt.Add(wcstol(tag.params[n], nullptr, 10));
}
tag.params.RemoveAll();
}
@@ -1995,8 +2005,8 @@ bool CRenderedTextSubtitle::ParseSSATag(SSATagsList& tagsList, const CStringW& s
case SSA_pos: {
size_t nParams = tag.params.GetCount();
if (nParams == 2) {
- for (size_t i = 0; i < nParams; i++) {
- tag.paramsReal.Add(wcstod(tag.params[i], nullptr));
+ for (size_t n = 0; n < nParams; n++) {
+ tag.paramsReal.Add(wcstod(tag.params[n], nullptr));
}
tag.params.RemoveAll();
}
@@ -2062,7 +2072,7 @@ bool CRenderedTextSubtitle::ParseSSATag(SSATagsList& tagsList, const CStringW& s
}
bool CRenderedTextSubtitle::CreateSubFromSSATag(CSubtitle* sub, const SSATagsList& tagsList,
- STSStyle& style, STSStyle& org, bool fAnimate /*= false*/)
+ STSStyle& style, STSStyle& org, bool fAnimate /*= false*/)
{
if (!sub || !tagsList) {
return false;
@@ -2844,18 +2854,20 @@ STDMETHODIMP CRenderedTextSubtitle::NonDelegatingQueryInterface(REFIID riid, voi
STDMETHODIMP_(POSITION) CRenderedTextSubtitle::GetStartPosition(REFERENCE_TIME rt, double fps)
{
int iSegment = -1;
- SearchSubs((int)(rt / 10000), fps, &iSegment, nullptr);
+ SearchSubs(rt, fps, &iSegment, nullptr);
if (iSegment < 0) {
iSegment = 0;
}
- return GetNext((POSITION)iSegment);
+ __assume((INT_PTR)iSegment >= INT_MIN && (INT_PTR)iSegment <= INT_MAX);
+ return GetNext((POSITION)(INT_PTR)iSegment);
}
STDMETHODIMP_(POSITION) CRenderedTextSubtitle::GetNext(POSITION pos)
{
- int iSegment = (int)pos;
+ __assume((INT_PTR)pos >= INT_MIN && (INT_PTR)pos <= INT_MAX);
+ int iSegment = (int)(INT_PTR)pos;
const STSSegment* stss = GetSegment(iSegment);
while (stss && stss->subs.IsEmpty()) {
@@ -2863,22 +2875,25 @@ STDMETHODIMP_(POSITION) CRenderedTextSubtitle::GetNext(POSITION pos)
stss = GetSegment(iSegment);
}
- return (stss ? (POSITION)(iSegment + 1) : nullptr);
+ return (stss ? (POSITION)(INT_PTR)(iSegment + 1) : nullptr);
}
STDMETHODIMP_(REFERENCE_TIME) CRenderedTextSubtitle::GetStart(POSITION pos, double fps)
{
- return (10000i64 * TranslateSegmentStart((int)pos - 1, fps));
+ __assume((INT_PTR)pos - 1 >= INT_MIN && (INT_PTR)pos <= INT_MAX);
+ return TranslateSegmentStart((int)(INT_PTR)pos - 1, fps);
}
STDMETHODIMP_(REFERENCE_TIME) CRenderedTextSubtitle::GetStop(POSITION pos, double fps)
{
- return (10000i64 * TranslateSegmentEnd((int)pos - 1, fps));
+ __assume((INT_PTR)pos - 1 >= INT_MIN && (INT_PTR)pos <= INT_MAX);
+ return TranslateSegmentEnd((int)(INT_PTR)pos - 1, fps);
}
STDMETHODIMP_(bool) CRenderedTextSubtitle::IsAnimated(POSITION pos)
{
- int iSegment = (int)pos - 1;
+ __assume((INT_PTR)pos - 1 >= INT_MIN && (INT_PTR)pos <= INT_MAX);
+ int iSegment = (int)(INT_PTR)pos - 1;
const STSSegment* stss = GetSegment(iSegment);
if (stss) {
@@ -2914,10 +2929,8 @@ STDMETHODIMP CRenderedTextSubtitle::Render(SubPicDesc& spd, REFERENCE_TIME rt, d
Init(CSize(spd.w, spd.h), spd.vidrect);
}
- int t = (int)(rt / 10000);
-
int segment;
- const STSSegment* stss = SearchSubs(t, fps, &segment);
+ const STSSegment* stss = SearchSubs(rt, fps, &segment);
if (!stss) {
return S_FALSE;
}
@@ -2931,7 +2944,7 @@ STDMETHODIMP CRenderedTextSubtitle::Render(SubPicDesc& spd, REFERENCE_TIME rt, d
m_subtitleCache.GetNextAssoc(pos, entry, pSub);
STSEntry& stse = GetAt(entry);
- if (stse.end < t) {
+ if (stse.end < rt) {
delete pSub;
m_subtitleCache.RemoveKey(entry);
}
@@ -2958,9 +2971,9 @@ STDMETHODIMP CRenderedTextSubtitle::Render(SubPicDesc& spd, REFERENCE_TIME rt, d
STSEntry stse = GetAt(entry);
{
- int start = TranslateStart(entry, fps);
- m_time = t - start;
- m_delay = TranslateEnd(entry, fps) - start;
+ REFERENCE_TIME start = TranslateStart(entry, fps);
+ m_time = (int)RT2MS(rt - start);
+ m_delay = (int)RT2MS(TranslateEnd(entry, fps) - start);
}
CSubtitle* s = GetSubtitle(entry);
@@ -2996,9 +3009,7 @@ STDMETHODIMP CRenderedTextSubtitle::Render(SubPicDesc& spd, REFERENCE_TIME rt, d
int t2 = s->m_effects[k]->t[1];
if (t2 < t1) {
- int t = t1;
- t1 = t2;
- t2 = t;
+ std::swap(t1, t2);
}
if (t1 <= 0 && t2 <= 0) {
@@ -3207,26 +3218,35 @@ STDMETHODIMP_(int) CRenderedTextSubtitle::GetStreamCount()
STDMETHODIMP CRenderedTextSubtitle::GetStreamInfo(int iStream, WCHAR** ppName, LCID* pLCID)
{
+ CheckPointer(ppName, E_POINTER);
if (iStream != 0) {
return E_INVALIDARG;
}
- if (ppName) {
- *ppName = (WCHAR*)CoTaskMemAlloc((m_name.GetLength() + 1) * sizeof(WCHAR));
- if (!(*ppName)) {
- return E_OUTOFMEMORY;
- }
+ if (pLCID) {
+ *pLCID = m_lcid;
+ }
- wcscpy_s(*ppName, m_name.GetLength() + 1, CStringW(m_name));
+ CString strLanguage;
+ if (m_lcid && m_lcid != LCID(-1)) {
+ int len = GetLocaleInfo(m_lcid, LOCALE_SENGLANGUAGE, strLanguage.GetBuffer(64), 64);
+ strLanguage.ReleaseBufferSetLength(std::max(len - 1, 0));
+ }
- if (pLCID) {
- *pLCID = ISO6391ToLcid(CW2A(*ppName));
- if (*pLCID == 0) {
- *pLCID = ISO6392ToLcid(CW2A(*ppName));
- }
- }
+ if (!strLanguage.IsEmpty() && m_eHearingImpaired == Subtitle::HI_YES) {
+ strLanguage = '[' + strLanguage + ']';
+ }
+ CStringW strName;
+ if (!m_provider.IsEmpty()) {
+ strName.Format(L"[%s] %s\t%s", m_provider, m_name, strLanguage);
+ } else {
+ strName.Format(L"%s\t%s", m_name, strLanguage);
}
+ *ppName = (WCHAR*)CoTaskMemAlloc((strName.GetLength() + 1) * sizeof(WCHAR));
+ CheckPointer(*ppName, E_OUTOFMEMORY);
+ wcscpy_s(*ppName, strName.GetLength() + 1, strName);
+
return S_OK;
}
@@ -3242,8 +3262,47 @@ STDMETHODIMP CRenderedTextSubtitle::SetStream(int iStream)
STDMETHODIMP CRenderedTextSubtitle::Reload()
{
- if (!FileExists(m_path)) {
+ if (!PathUtils::Exists(m_path)) {
return E_FAIL;
}
return !m_path.IsEmpty() && Open(m_path, DEFAULT_CHARSET, m_name) ? S_OK : E_FAIL;
}
+
+STDMETHODIMP CRenderedTextSubtitle::SetSourceTargetInfo(CString yuvVideoMatrix, int targetBlackLevel, int targetWhiteLevel)
+{
+ bool bIsVSFilter = !!yuvVideoMatrix.Replace(_T(".VSFilter"), _T(""));
+ ColorConvTable::YuvMatrixType yuvMatrix = ColorConvTable::BT601;
+ ColorConvTable::YuvRangeType yuvRange = ColorConvTable::RANGE_TV;
+
+ auto parseMatrixString = [&](const CString & sYuvMatrix) {
+ int nPos = 0;
+ CString range = sYuvMatrix.Tokenize(_T("."), nPos);
+ CString matrix = sYuvMatrix.Mid(nPos);
+
+ yuvRange = ColorConvTable::RANGE_TV;
+ if (range == _T("PC")) {
+ yuvRange = ColorConvTable::RANGE_PC;
+ }
+
+ if (matrix == _T("709")) {
+ yuvMatrix = ColorConvTable::BT709;
+ } else if (matrix == _T("240M")) {
+ yuvMatrix = ColorConvTable::BT709;
+ } else if (matrix == _T("601")) {
+ yuvMatrix = ColorConvTable::BT601;
+ } else {
+ yuvMatrix = ColorConvTable::NONE;
+ }
+ };
+
+ if (!m_sYCbCrMatrix.IsEmpty()) {
+ parseMatrixString(m_sYCbCrMatrix);
+ } else {
+ parseMatrixString(yuvVideoMatrix);
+ }
+
+ bool bTransformColors = !bIsVSFilter && !m_sYCbCrMatrix.IsEmpty();
+ ColorConvTable::SetDefaultConvType(yuvMatrix, yuvRange, (targetWhiteLevel < 245), bTransformColors);
+
+ return S_OK;
+}
diff --git a/src/Subtitles/RTS.h b/src/Subtitles/RTS.h
index cd350b725..0e29b97d2 100644
--- a/src/Subtitles/RTS.h
+++ b/src/Subtitles/RTS.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -66,7 +66,7 @@ class CMyFont : public CFont
public:
int m_ascent, m_descent;
- CMyFont(STSStyle& style);
+ CMyFont(const STSStyle& style);
};
struct CTextDims {
@@ -107,7 +107,7 @@ public:
int m_width, m_ascent, m_descent;
// str[0] = 0 -> m_fLineBreak = true (in this case we only need and use the height of m_font from the whole class)
- CWord(STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley,
+ CWord(const STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley,
RenderingCaches& renderingCaches);
virtual ~CWord();
@@ -125,7 +125,7 @@ protected:
virtual bool CreatePath();
public:
- CText(STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley,
+ CText(const STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley,
RenderingCaches& renderingCaches);
virtual CWord* Copy();
@@ -145,7 +145,7 @@ protected:
virtual bool CreatePath();
public:
- CPolygon(STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley, int baseline,
+ CPolygon(const STSStyle& style, CStringW str, int ktype, int kstart, int kend, double scalex, double scaley, int baseline,
RenderingCaches& renderingCaches);
CPolygon(CPolygon&); // can't use a const reference because we need to use CAtlArray::Copy which expects a non-const reference
virtual ~CPolygon();
@@ -423,4 +423,5 @@ public:
STDMETHODIMP_(int) GetStream();
STDMETHODIMP SetStream(int iStream);
STDMETHODIMP Reload();
+ STDMETHODIMP SetSourceTargetInfo(CString yuvMatrix, int targetBlackLevel, int targetWhiteLevel);
};
diff --git a/src/Subtitles/Rasterizer.cpp b/src/Subtitles/Rasterizer.cpp
index 3c64dea86..bb5b83ec3 100644
--- a/src/Subtitles/Rasterizer.cpp
+++ b/src/Subtitles/Rasterizer.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,7 +21,7 @@
#include "stdafx.h"
#include <string.h>
-#include <math.h>
+#include <cmath>
#include <vector>
#include <algorithm>
#include <intrin.h>
@@ -29,14 +29,13 @@
#include "SeparableFilter.h"
// Statics constants for use by alpha_blend_sse2
-static __m128i low_mask = _mm_set1_epi16(0xFF);
-static __m128i red_mask = _mm_set1_epi32(0xFF);
-static __m128i green_mask = _mm_set1_epi32(0xFF00);
-static __m128i blue_mask = _mm_set1_epi32(0xFF0000);
-static __m128i alpha_bit_mask = _mm_set1_epi32(0xFF000000);
-static __m128i one = _mm_set1_epi16(1);
-static __m128i inv_one = _mm_set1_epi16(0x100);
-static __m128i zero = _mm_setzero_si128();
+static const __m128i low_mask = _mm_set1_epi16(0xFF);
+static const __m128i red_mask = _mm_set1_epi32(0xFF);
+static const __m128i green_mask = _mm_set1_epi32(0xFF00);
+static const __m128i blue_mask = _mm_set1_epi32(0xFF0000);
+static const __m128i alpha_bit_mask = _mm_set1_epi32(0xFF000000);
+static const __m128i one = _mm_set1_epi16(1);
+static const __m128i inv_one = _mm_set1_epi16(0x100);
int Rasterizer::getOverlayWidth()
{
@@ -44,18 +43,20 @@ int Rasterizer::getOverlayWidth()
}
Rasterizer::Rasterizer()
- : mpPathTypes(nullptr)
+ : fFirstSet(false)
+ , mpPathTypes(nullptr)
, mpPathPoints(nullptr)
, mPathPoints(0)
- , fFirstSet(false)
, mpEdgeBuffer(nullptr)
, mEdgeHeapSize(0)
, mEdgeNext(0)
, mpScanBuffer(0)
{
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
int cpuInfo[4] = { -1 };
__cpuid(cpuInfo, 1);
m_bUseSSE2 = !!(cpuInfo[3] & (1 << 26));
+#endif
}
Rasterizer::~Rasterizer()
@@ -865,9 +866,9 @@ bool Rasterizer::Rasterize(int xsub, int ysub, int fBlur, double fGaussianBlur)
byte* dst = buffer + m_pOverlayData->mOverlayPitch * (y >> 3) + first;
if (first == last) {
- *dst += x2 - x1;
+ *dst += byte(x2 - x1);
} else {
- *dst += ((first + 1) << 3) - x1;
+ *dst += byte(((first + 1) << 3) - x1);
++dst;
while (++first < last) {
@@ -875,7 +876,7 @@ bool Rasterizer::Rasterize(int xsub, int ysub, int fBlur, double fGaussianBlur)
++dst;
}
- *dst += x2 - (last << 3);
+ *dst += byte(x2 - (last << 3));
}
}
}
@@ -894,16 +895,19 @@ bool Rasterizer::Rasterize(int xsub, int ysub, int fBlur, double fGaussianBlur)
byte* src = m_pOutlineData->mWideOutline.empty() ? m_pOverlayData->mpOverlayBufferBody : m_pOverlayData->mpOverlayBufferBorder;
- if (m_bUseSSE2) {
- SeparableFilterX_SSE2(src, tmp, m_pOverlayData->mOverlayWidth, m_pOverlayData->mOverlayHeight, pitch,
- filter.kernel, filter.width, filter.divisor);
- SeparableFilterY_SSE2(tmp, src, m_pOverlayData->mOverlayWidth, m_pOverlayData->mOverlayHeight, pitch,
- filter.kernel, filter.width, filter.divisor);
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
SeparableFilterX<1>(src, tmp, m_pOverlayData->mOverlayWidth, m_pOverlayData->mOverlayHeight, pitch,
filter.kernel, filter.width, filter.divisor);
SeparableFilterY<1>(tmp, src, m_pOverlayData->mOverlayWidth, m_pOverlayData->mOverlayHeight, pitch,
filter.kernel, filter.width, filter.divisor);
+ } else
+#endif
+ {
+ SeparableFilterX_SSE2(src, tmp, m_pOverlayData->mOverlayWidth, m_pOverlayData->mOverlayHeight, pitch,
+ filter.kernel, filter.width, filter.divisor);
+ SeparableFilterY_SSE2(tmp, src, m_pOverlayData->mOverlayWidth, m_pOverlayData->mOverlayHeight, pitch,
+ filter.kernel, filter.width, filter.divisor);
}
_aligned_free(tmp);
@@ -972,6 +976,7 @@ static __forceinline void pixmix2(DWORD* dst, DWORD color, DWORD shapealpha, DWO
// Alpha blend 8 pixels at once. This is just pixmix_sse2, but done in a more vectorized manner.
static __forceinline void alpha_blend_sse2(DWORD* dst, DWORD original_color, BYTE* s, int wt)
{
+ __m128i zero = _mm_setzero_si128();
__m128i srcR = _mm_set1_epi32(original_color & 0xFF);
__m128i srcG = _mm_set1_epi32((original_color & 0xFF00) >> 8);
__m128i srcB = _mm_set1_epi32((original_color & 0xFF0000) >> 16);
@@ -1592,18 +1597,24 @@ CRect Rasterizer::Draw(SubPicDesc& spd, CRect& clipRect, byte* pAlphaMask, int x
if (switchpts[1] == DWORD_MAX) {
// fBody is true if we're rendering a fill or a shadow.
if (fBody) {
- if (m_bUseSSE2) {
- Draw_noAlpha_spFF_Body_sse2(rnfo);
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
Draw_noAlpha_spFF_Body_0(rnfo);
+ } else
+#endif
+ {
+ Draw_noAlpha_spFF_Body_sse2(rnfo);
}
}
// Not painting body, ie. painting border without fill in it
else {
- if (m_bUseSSE2) {
- Draw_noAlpha_spFF_noBody_sse2(rnfo);
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
Draw_noAlpha_spFF_noBody_0(rnfo);
+ } else
+#endif
+ {
+ Draw_noAlpha_spFF_noBody_sse2(rnfo);
}
}
}
@@ -1613,18 +1624,24 @@ CRect Rasterizer::Draw(SubPicDesc& spd, CRect& clipRect, byte* pAlphaMask, int x
//const long *sw = switchpts;
if (fBody) {
- if (m_bUseSSE2) {
- Draw_noAlpha_sp_Body_sse2(rnfo);
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
Draw_noAlpha_sp_Body_0(rnfo);
+ } else
+#endif
+ {
+ Draw_noAlpha_sp_Body_sse2(rnfo);
}
}
// Not body
else {
- if (m_bUseSSE2) {
- Draw_noAlpha_sp_noBody_sse2(rnfo);
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
Draw_noAlpha_sp_noBody_0(rnfo);
+ } else
+#endif
+ {
+ Draw_noAlpha_sp_noBody_sse2(rnfo);
}
}
}
@@ -1633,32 +1650,44 @@ CRect Rasterizer::Draw(SubPicDesc& spd, CRect& clipRect, byte* pAlphaMask, int x
else {
if (switchpts[1] == DWORD_MAX) {
if (fBody) {
- if (m_bUseSSE2) {
- Draw_Alpha_spFF_Body_sse2(rnfo);
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
Draw_Alpha_spFF_Body_0(rnfo);
+ } else
+#endif
+ {
+ Draw_Alpha_spFF_Body_sse2(rnfo);
}
} else {
- if (m_bUseSSE2) {
- Draw_Alpha_spFF_noBody_sse2(rnfo);
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
Draw_Alpha_spFF_noBody_0(rnfo);
+ } else
+#endif
+ {
+ Draw_Alpha_spFF_noBody_sse2(rnfo);
}
}
} else {
//const long *sw = switchpts;
if (fBody) {
- if (m_bUseSSE2) {
- Draw_Alpha_sp_Body_sse2(rnfo);
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
Draw_Alpha_sp_Body_0(rnfo);
+ } else
+#endif
+ {
+ Draw_Alpha_sp_Body_sse2(rnfo);
}
} else {
- if (m_bUseSSE2) {
- Draw_Alpha_sp_noBody_sse2(rnfo);
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
Draw_Alpha_sp_noBody_0(rnfo);
+ } else
+#endif
+ {
+ Draw_Alpha_sp_noBody_sse2(rnfo);
}
}
}
@@ -1674,13 +1703,18 @@ CRect Rasterizer::Draw(SubPicDesc& spd, CRect& clipRect, byte* pAlphaMask, int x
void Rasterizer::FillSolidRect(SubPicDesc& spd, int x, int y, int nWidth, int nHeight, DWORD lColor)
{
+ ASSERT(spd.w >= x + nWidth && spd.h >= y + nHeight);
+
for (int wy = y; wy < y + nHeight; wy++) {
DWORD* dst = (DWORD*)((BYTE*)spd.bits + spd.pitch * wy) + x;
for (int wt = 0; wt < nWidth; ++wt) {
- if (m_bUseSSE2) {
- pixmix_sse2(&dst[wt], lColor, 0x40); // 0x40 because >> 6 in pixmix (to preserve tranparency)
- } else {
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
+ if (!m_bUseSSE2) {
pixmix(&dst[wt], lColor, 0x40);
+ } else
+#endif
+ {
+ pixmix_sse2(&dst[wt], lColor, 0x40); // 0x40 because >> 6 in pixmix (to preserve tranparency)
}
}
}
diff --git a/src/Subtitles/Rasterizer.h b/src/Subtitles/Rasterizer.h
index 85f414bc5..f653fa0c4 100644
--- a/src/Subtitles/Rasterizer.h
+++ b/src/Subtitles/Rasterizer.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -53,12 +53,12 @@ struct RasterizerNfo {
const DWORD* sw, byte* s, byte* srcBody, byte* srcBorder, DWORD* dst, byte* am)
: w(w)
, h(h)
- , xo(xo)
- , yo(yo)
- , overlayp(overlayp)
, spdw(spdw)
+ , overlayp(overlayp)
, pitch(pitch)
, color(color)
+ , xo(xo)
+ , yo(yo)
, sw(sw)
, s(s)
, srcBody(srcBody)
@@ -173,7 +173,9 @@ protected:
BYTE* mpPathTypes;
POINT* mpPathPoints;
int mPathPoints;
+#if defined(_M_IX86_FP) && _M_IX86_FP < 2
bool m_bUseSSE2;
+#endif
private:
enum {
diff --git a/src/Subtitles/RealTextParser.cpp b/src/Subtitles/RealTextParser.cpp
index 880ba3a10..18811c3b8 100644
--- a/src/Subtitles/RealTextParser.cpp
+++ b/src/Subtitles/RealTextParser.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2008-2014 see Authors.txt
+ * (C) 2008-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -84,6 +84,11 @@ bool CRealTextParser::ParseRealText(std::wstring p_szFile)
m_RealText.m_mapLines[pairTimecodes] = szLine;
}
+ } else if (vStartTimecodes.empty() && vEndTimecodes.empty() && m_RealText.m_mapLines.empty() && iStartTimecode > 0) {
+ // Handle first line
+ if (!szLine.empty()) {
+ m_RealText.m_mapLines[std::make_pair(0, iStartTimecode)] = szLine;
+ }
}
vStartTimecodes.push_back(iStartTimecode);
@@ -227,6 +232,9 @@ bool CRealTextParser::ExtractTag(std::wstring& p_rszLine, Tag& p_rTag)
if (p_rszLine.at(iPos) == '/') {
++iPos;
p_rTag.m_bClose = true;
+ if (iPos >= p_rszLine.length()) {
+ return false;
+ }
}
if (p_rszLine.at(iPos) == '>') {
@@ -310,7 +318,7 @@ bool CRealTextParser::GetAttributes(std::wstring& p_rszLine, unsigned int& p_riP
return false;
}
- while (p_riPos > p_rszLine.length() && p_rszLine.at(p_riPos) != '/' && p_rszLine.at(p_riPos) != '>') {
+ while (p_riPos < p_rszLine.length() && p_rszLine.at(p_riPos) != '/' && p_rszLine.at(p_riPos) != '>') {
std::wstring szName;
if (!GetString(p_rszLine, p_riPos, szName, L"\r\n\t =")) {
return false;
@@ -322,9 +330,11 @@ bool CRealTextParser::GetAttributes(std::wstring& p_rszLine, unsigned int& p_riP
if (p_rszLine.at(p_riPos) != '=') {
if (m_bTryToIgnoreErrors) {
- p_riPos = (unsigned int)p_rszLine.find_first_of('=', p_riPos);
- if (p_riPos == std::wstring::npos) {
+ size_t pos = p_rszLine.find_first_of('=', p_riPos);
+ if (pos == std::wstring::npos) {
return false;
+ } else {
+ p_riPos = (unsigned int)pos;
}
} else {
return false;
@@ -416,10 +426,10 @@ int CRealTextParser::GetTimecode(const std::wstring& p_crszTimecode)
}
std::wstring CRealTextParser::FormatTimecode(int iTimecode,
- int iMillisecondPrecision/* = 3*/,
- bool p_bPadZeroes/* = true*/,
- const std::wstring& p_crszSeparator/* = ":"*/,
- const std::wstring& p_crszMillisecondSeparator/* = "."*/)
+ int iMillisecondPrecision/* = 3*/,
+ bool p_bPadZeroes/* = true*/,
+ const std::wstring& p_crszSeparator/* = ":"*/,
+ const std::wstring& p_crszMillisecondSeparator/* = "."*/)
{
std::wostringstream ossTimecode;
diff --git a/src/Subtitles/RenderingCache.cpp b/src/Subtitles/RenderingCache.cpp
index 38737471e..53b27e3bc 100644
--- a/src/Subtitles/RenderingCache.cpp
+++ b/src/Subtitles/RenderingCache.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,12 +22,6 @@
#include "RenderingCache.h"
#include "RTS.h"
-template<typename T>
-bool NEARLY_EQ(T a, T b, T tol)
-{
- return (abs(a - b) < tol);
-}
-
CTextDimsKey::CTextDimsKey(const CStringW& str, const STSStyle& style)
: m_str(str)
, m_style(DEBUG_NEW STSStyle(style))
@@ -36,9 +30,9 @@ CTextDimsKey::CTextDimsKey(const CStringW& str, const STSStyle& style)
}
CTextDimsKey::CTextDimsKey(const CTextDimsKey& textDimsKey)
- : m_str(textDimsKey.m_str)
+ : m_hash(textDimsKey.m_hash)
+ , m_str(textDimsKey.m_str)
, m_style(DEBUG_NEW STSStyle(*textDimsKey.m_style))
- , m_hash(textDimsKey.m_hash)
{
}
@@ -68,8 +62,8 @@ bool CTextDimsKey::operator==(const CTextDimsKey& textDimsKey) const
return m_str == textDimsKey.m_str
&& m_style->charSet == textDimsKey.m_style->charSet
&& m_style->fontName == textDimsKey.m_style->fontName
- && NEARLY_EQ(m_style->fontSize, textDimsKey.m_style->fontSize, 1e-6)
- && NEARLY_EQ(m_style->fontSpacing, textDimsKey.m_style->fontSpacing, 1e-6)
+ && IsNearlyEqual(m_style->fontSize, textDimsKey.m_style->fontSize, 1e-6)
+ && IsNearlyEqual(m_style->fontSpacing, textDimsKey.m_style->fontSpacing, 1e-6)
&& m_style->fontWeight == textDimsKey.m_style->fontWeight
&& m_style->fItalic == textDimsKey.m_style->fItalic
&& m_style->fUnderline == textDimsKey.m_style->fUnderline
@@ -85,10 +79,10 @@ CPolygonPathKey::CPolygonPathKey(const CStringW& str, double scalex, double scal
}
CPolygonPathKey::CPolygonPathKey(const CPolygonPathKey& polygonPathKey)
- : m_str(polygonPathKey.m_str)
+ : m_hash(polygonPathKey.m_hash)
+ , m_str(polygonPathKey.m_str)
, m_scalex(polygonPathKey.m_scalex)
, m_scaley(polygonPathKey.m_scaley)
- , m_hash(polygonPathKey.m_hash)
{
}
@@ -104,8 +98,8 @@ void CPolygonPathKey::UpdateHash()
bool CPolygonPathKey::operator==(const CPolygonPathKey& polygonPathKey) const
{
return m_str == polygonPathKey.m_str
- && NEARLY_EQ(m_scalex, polygonPathKey.m_scalex, 1e-6)
- && NEARLY_EQ(m_scaley, polygonPathKey.m_scaley, 1e-6);
+ && IsNearlyEqual(m_scalex, polygonPathKey.m_scalex, 1e-6)
+ && IsNearlyEqual(m_scaley, polygonPathKey.m_scaley, 1e-6);
}
COutlineKey::COutlineKey(const CWord* word, CPoint org)
@@ -119,10 +113,10 @@ COutlineKey::COutlineKey(const CWord* word, CPoint org)
COutlineKey::COutlineKey(const COutlineKey& outLineKey)
: CTextDimsKey(outLineKey.m_str, *outLineKey.m_style)
+ , m_hash(outLineKey.m_hash)
, m_scalex(outLineKey.m_scalex)
, m_scaley(outLineKey.m_scaley)
, m_org(outLineKey.m_org)
- , m_hash(outLineKey.m_hash)
{
}
@@ -163,21 +157,21 @@ void COutlineKey::UpdateHash()
bool COutlineKey::operator==(const COutlineKey& outLineKey) const
{
return __super::operator==(outLineKey) // CreatePath
- && NEARLY_EQ(m_scalex, outLineKey.m_scalex, 1e-6)
- && NEARLY_EQ(m_scaley, outLineKey.m_scaley, 1e-6)
+ && IsNearlyEqual(m_scalex, outLineKey.m_scalex, 1e-6)
+ && IsNearlyEqual(m_scaley, outLineKey.m_scaley, 1e-6)
// Transform
- && NEARLY_EQ(m_style->fontScaleX, outLineKey.m_style->fontScaleX, 1e-6)
- && NEARLY_EQ(m_style->fontScaleY, outLineKey.m_style->fontScaleY, 1e-6)
- && NEARLY_EQ(m_style->fontAngleX, outLineKey.m_style->fontAngleX, 1e-6)
- && NEARLY_EQ(m_style->fontAngleY, outLineKey.m_style->fontAngleY, 1e-6)
- && NEARLY_EQ(m_style->fontAngleZ, outLineKey.m_style->fontAngleZ, 1e-6)
- && NEARLY_EQ(m_style->fontShiftX, outLineKey.m_style->fontShiftX, 1e-6)
- && NEARLY_EQ(m_style->fontShiftY, outLineKey.m_style->fontShiftY, 1e-6)
+ && IsNearlyEqual(m_style->fontScaleX, outLineKey.m_style->fontScaleX, 1e-6)
+ && IsNearlyEqual(m_style->fontScaleY, outLineKey.m_style->fontScaleY, 1e-6)
+ && IsNearlyEqual(m_style->fontAngleX, outLineKey.m_style->fontAngleX, 1e-6)
+ && IsNearlyEqual(m_style->fontAngleY, outLineKey.m_style->fontAngleY, 1e-6)
+ && IsNearlyEqual(m_style->fontAngleZ, outLineKey.m_style->fontAngleZ, 1e-6)
+ && IsNearlyEqual(m_style->fontShiftX, outLineKey.m_style->fontShiftX, 1e-6)
+ && IsNearlyEqual(m_style->fontShiftY, outLineKey.m_style->fontShiftY, 1e-6)
&& m_org == outLineKey.m_org
// CreateWidenedRegion
&& m_style->borderStyle == outLineKey.m_style->borderStyle
- && NEARLY_EQ(m_style->outlineWidthX, outLineKey.m_style->outlineWidthX, 1e-6)
- && NEARLY_EQ(m_style->outlineWidthY, outLineKey.m_style->outlineWidthY, 1e-6);
+ && IsNearlyEqual(m_style->outlineWidthX, outLineKey.m_style->outlineWidthX, 1e-6)
+ && IsNearlyEqual(m_style->outlineWidthY, outLineKey.m_style->outlineWidthY, 1e-6);
}
COverlayKey::COverlayKey(const CWord* word, CPoint p, CPoint org)
@@ -210,5 +204,5 @@ bool COverlayKey::operator==(const COverlayKey& overlayKey) const
return __super::operator==(overlayKey)
&& m_subp == overlayKey.m_subp
&& m_style->fBlur == overlayKey.m_style->fBlur
- && NEARLY_EQ(m_style->fGaussianBlur, overlayKey.m_style->fGaussianBlur, 1e-6);
+ && IsNearlyEqual(m_style->fGaussianBlur, overlayKey.m_style->fGaussianBlur, 1e-6);
}
diff --git a/src/Subtitles/RenderingCache.h b/src/Subtitles/RenderingCache.h
index 03d1b70de..218da59da 100644
--- a/src/Subtitles/RenderingCache.h
+++ b/src/Subtitles/RenderingCache.h
@@ -142,9 +142,9 @@ protected:
public:
CEllipseKey(int rx, int ry)
- : m_rx(rx)
- , m_ry(ry)
- , m_hash(ULONG((rx << 16) | (ry& WORD_MAX))) {}
+ : m_hash(ULONG((rx << 16) | (ry & WORD_MAX)))
+ , m_rx(rx)
+ , m_ry(ry) {}
ULONG GetHash() const { return m_hash; };
diff --git a/src/Subtitles/STS.cpp b/src/Subtitles/STS.cpp
index 610e85128..a7839c79b 100644
--- a/src/Subtitles/STS.cpp
+++ b/src/Subtitles/STS.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -28,13 +28,15 @@
#include <fstream>
#include "USFSubtitles.h"
-#include "../DSUtil/WinAPIUtils.h"
+#include "../DSUtil/PathUtils.h"
-static struct htmlcolor {
+struct htmlcolor {
TCHAR* name;
DWORD color;
-} htmlcolors[] = {
+}
+
+static constexpr htmlcolors[] = {
{_T("white"), 0xffffff},
{_T("whitesmoke"), 0xf5f5f5},
{_T("ghostwhite"), 0xf8f8ff},
@@ -188,11 +190,11 @@ CHtmlColorMap::CHtmlColorMap()
}
}
-CHtmlColorMap g_colors;
+const CHtmlColorMap g_colors;
//
-BYTE CharSetList[] = {
+const BYTE CharSetList[] = {
ANSI_CHARSET,
DEFAULT_CHARSET,
SYMBOL_CHARSET,
@@ -215,7 +217,7 @@ BYTE CharSetList[] = {
BALTIC_CHARSET
};
-TCHAR* CharSetNames[] = {
+const TCHAR* CharSetNames[] = {
_T("ANSI"),
_T("DEFAULT"),
_T("SYMBOL"),
@@ -238,18 +240,10 @@ TCHAR* CharSetNames[] = {
_T("BALTIC"),
};
-int CharSetLen = _countof(CharSetList);
+const int CharSetLen = _countof(CharSetList);
//
-static DWORD CharSetToCodePage(DWORD dwCharSet)
-{
- CHARSETINFO cs;
- ZeroMemory(&cs, sizeof(CHARSETINFO));
- ::TranslateCharsetInfo((DWORD*)dwCharSet, &cs, TCI_SRCCHARSET);
- return cs.ciACP;
-}
-
static int FindChar(CStringW str, WCHAR c, int pos, bool fUnicode, int CharSet)
{
if (fUnicode) {
@@ -310,7 +304,7 @@ static CStringW ToMBCS(CStringW str, DWORD CharSet)
ret += (WCHAR)(BYTE)c[k];
}
} else {
- ret += '?';
+ ret += L'?';
}
}
@@ -472,58 +466,67 @@ static CStringW SubRipper2SSA(CStringW str, int CharSet)
static bool OpenSubRipper(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet)
{
- CStringW buff;
+ CStringW buff, start, end;
while (file->ReadString(buff)) {
FastTrim(buff);
if (buff.IsEmpty()) {
continue;
}
- WCHAR sep;
int num = 0; // This one isn't really used just assigned a new value
- int hh1, mm1, ss1, ms1, hh2, mm2, ss2, ms2;
- WCHAR msStr1[5] = {0}, msStr2[5] = {0};
- int c = swscanf_s(buff, L"%d%c%d%c%d%4[^-] --> %d%c%d%c%d%4s\n",
- &hh1, &sep, 1, &mm1, &sep, 1, &ss1, msStr1, _countof(msStr1),
- &hh2, &sep, 1, &mm2, &sep, 1, &ss2, msStr2, _countof(msStr2));
- if (c == 1) { // numbering
- num = hh1;
- } else if (c >= 11) { // time info
- // Parse ms if present
- if (2 != swscanf_s(msStr1, L"%c%d", &sep, 1, &ms1)) {
- ms1 = 0;
- }
- if (2 != swscanf_s(msStr2, L"%c%d", &sep, 1, &ms2)) {
- ms2 = 0;
- }
+ WCHAR wc;
+ int c = swscanf_s(buff, L"%d%c", &num, &wc, 1);
+
+ if (c == 2) { // c == 1 would be numbering, c == 2 might be timecodes
+ int len = buff.GetLength();
+ c = swscanf_s(buff, L"%s --> %s", start.GetBuffer(len), len, end.GetBuffer(len), len);
+ start.ReleaseBuffer();
+ end.ReleaseBuffer();
+
+ auto readTimeCode = [](LPCWSTR str, int& hh, int& mm, int& ss, int& ms) {
+ WCHAR sep;
+ int c = swscanf_s(str, L"%d%c%d%c%d%c%d",
+ &hh, &sep, 1, &mm, &sep, 1, &ss, &sep, 1, &ms);
+ // Check if ms was present
+ if (c == 5) {
+ ms = 0;
+ }
+ return (c == 5 || c == 7);
+ };
- CStringW str, tmp;
+ int hh1, mm1, ss1, ms1, hh2, mm2, ss2, ms2;
- bool fFoundEmpty = false;
+ if (c == 2
+ && readTimeCode(start, hh1, mm1, ss1, ms1)
+ && readTimeCode(end, hh2, mm2, ss2, ms2)) {
+ CStringW str, tmp;
- while (file->ReadString(tmp)) {
- FastTrim(tmp);
- if (tmp.IsEmpty()) {
- fFoundEmpty = true;
- }
+ bool bFoundEmpty = false;
- int num2;
- WCHAR wc;
- if (swscanf_s(tmp, L"%d%c", &num2, &wc, 1) == 1 && fFoundEmpty) {
- num = num2;
- break;
+ while (file->ReadString(tmp)) {
+ FastTrim(tmp);
+ if (tmp.IsEmpty()) {
+ bFoundEmpty = true;
+ }
+
+ int num2;
+ if (swscanf_s(tmp, L"%d%c", &num2, &wc, 1) == 1 && bFoundEmpty) {
+ num = num2;
+ break;
+ }
+
+ str += tmp + '\n';
}
- str += tmp + '\n';
+ ret.Add(SubRipper2SSA(str, CharSet),
+ file->IsUnicode(),
+ MS2RT((((hh1 * 60i64 + mm1) * 60i64) + ss1) * 1000i64 + ms1),
+ MS2RT((((hh2 * 60i64 + mm2) * 60i64) + ss2) * 1000i64 + ms2));
+ } else {
+ return false;
}
-
- ret.Add(
- SubRipper2SSA(str, CharSet),
- file->IsUnicode(),
- (((hh1 * 60 + mm1) * 60) + ss1) * 1000 + ms1,
- (((hh2 * 60 + mm2) * 60) + ss2) * 1000 + ms2);
- } else if (c != EOF) { // might be another format
+ } else if (c != 1) { // might be another format
return false;
}
}
@@ -554,8 +557,8 @@ static bool OpenOldSubRipper(CTextFile* file, CSimpleTextSubtitle& ret, int Char
ret.Add(
buff.Mid(buff.Find('}', buff.Find('}') + 1) + 1),
file->IsUnicode(),
- (((hh1 * 60 + mm1) * 60) + ss1) * 1000,
- (((hh2 * 60 + mm2) * 60) + ss2) * 1000);
+ MS2RT((((hh1 * 60i64 + mm1) * 60i64) + ss1) * 1000i64),
+ MS2RT((((hh2 * 60i64 + mm2) * 60i64) + ss2) * 1000i64));
} else if (c != EOF) { // might be another format
return false;
}
@@ -627,8 +630,8 @@ static bool OpenSubViewer(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet
WCHAR sep;
int hh1, mm1, ss1, hs1, hh2, mm2, ss2, hs2;
int c = swscanf_s(buff, L"%d:%d:%d%c%d,%d:%d:%d%c%d\n",
- &hh1, &mm1, &ss1, &sep, sizeof(WCHAR),
- &hs1, &hh2, &mm2, &ss2, &sep, sizeof(WCHAR), &hs2);
+ &hh1, &mm1, &ss1, &sep, 1,
+ &hs1, &hh2, &mm2, &ss2, &sep, 1, &hs2);
if (c == 10) {
CStringW str;
@@ -664,8 +667,8 @@ static bool OpenSubViewer(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet
ret.Add(str,
file->IsUnicode(),
- (((hh1 * 60 + mm1) * 60) + ss1) * 1000 + hs1 * 10,
- (((hh2 * 60 + mm2) * 60) + ss2) * 1000 + hs2 * 10);
+ MS2RT((((hh1 * 60i64 + mm1) * 60i64) + ss1) * 1000i64 + hs1 * 10i64),
+ MS2RT((((hh2 * 60i64 + mm2) * 60i64) + ss2) * 1000i64 + hs2 * 10i64));
} else if (c != EOF) { // might be another format
return false;
}
@@ -818,7 +821,7 @@ static CStringW MicroDVD2SSA(CStringW str, bool fUnicode, int CharSet)
code.MakeLower();
- ret += '{';
+ ret += L'{';
if (code.Find('b') >= 0) {
ret += L"\\b1";
fRestore[BOLD] = f;
@@ -835,7 +838,7 @@ static CStringW MicroDVD2SSA(CStringW str, bool fUnicode, int CharSet)
ret += L"\\s1";
fRestore[STRIKEOUT] = f;
}
- ret += '}';
+ ret += L'}';
} else if (!_wcsnicmp(code, L"{o:", 3)) {
code.MakeLower();
@@ -911,11 +914,11 @@ static bool OpenMicroDVD(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet)
continue;
}
- int start, end;
- int c = swscanf_s(buff, L"{%d}{%d}", &start, &end);
+ LONGLONG start, end;
+ int c = swscanf_s(buff, L"{%lld}{%lld}", &start, &end);
if (c != 2) {
- c = swscanf_s(buff, L"{%d}{}", &start) + 1;
+ c = swscanf_s(buff, L"{%lld}{}", &start) + 1;
end = start + 60;
fCheck = true;
}
@@ -945,11 +948,8 @@ static bool OpenMicroDVD(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet)
fCheck2 = false;
}
- ret.Add(
- MicroDVD2SSA(buff.Mid(buff.Find('}', buff.Find('}') + 1) + 1), file->IsUnicode(), CharSet),
- file->IsUnicode(),
- start, end,
- style);
+ ret.Add(MicroDVD2SSA(buff.Mid(buff.Find('}', buff.Find('}') + 1) + 1), file->IsUnicode(), CharSet),
+ file->IsUnicode(), start, end, style);
if (fCheck) {
fCheck = false;
@@ -1122,7 +1122,7 @@ static bool OpenSami(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet)
ret.Add(
SMI2SSA(caption, CharSet),
file->IsUnicode(),
- start_time, time);
+ MS2RT(start_time), MS2RT(time));
start_time = time;
caption.Empty();
@@ -1139,7 +1139,7 @@ static bool OpenSami(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet)
ret.Add(
SMI2SSA(caption, CharSet),
file->IsUnicode(),
- start_time, MAXLONG);
+ MS2RT(start_time), LONGLONG_MAX);
return true;
}
@@ -1167,8 +1167,8 @@ static bool OpenVPlayer(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet)
CStringW str = buff.Mid(buff.Find(':', buff.Find(':', buff.Find(':') + 1) + 1) + 1);
ret.Add(str,
file->IsUnicode(),
- (((hh * 60 + mm) * 60) + ss) * 1000,
- (((hh * 60 + mm) * 60) + ss) * 1000 + 1000 + 50 * str.GetLength());
+ MS2RT((((hh * 60i64 + mm) * 60i64) + ss) * 1000i64),
+ MS2RT((((hh * 60i64 + mm) * 60i64) + ss) * 1000i64 + 1000i64 + 50i64 * str.GetLength()));
} else if (c != EOF) { // might be another format
return false;
}
@@ -1269,7 +1269,7 @@ static bool LoadFont(const CString& font)
const TCHAR* s = font;
const TCHAR* e = s + len;
for (BYTE* p = pData; s < e; s++, p++) {
- *p = *s - 33;
+ *p = BYTE(*s - 33);
}
for (ptrdiff_t i = 0, j = 0, k = len & ~3; i < k; i += 4, j += 3) {
@@ -1311,7 +1311,7 @@ static bool LoadFont(const CString& font)
CString fn;
fn.Format(_T("%sfont%08lx.ttf"), path, chksum);
- if (!FileExists(fn)) {
+ if (!PathUtils::Exists(fn)) {
CFile f;
if (f.Open(fn, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary | CFile::shareDenyNone)) {
f.Write(pData, datalen);
@@ -1428,8 +1428,8 @@ static bool OpenSubStationAlpha(CTextFile* file, CSimpleTextSubtitle& ret, int C
ret.Add(pszBuff,
file->IsUnicode(),
- (((hh1 * 60 + mm1) * 60) + ss1) * 1000 + ms1_div10 * 10,
- (((hh2 * 60 + mm2) * 60) + ss2) * 1000 + ms2_div10 * 10,
+ MS2RT((((hh1 * 60i64 + mm1) * 60i64) + ss1) * 1000i64 + ms1_div10 * 10i64),
+ MS2RT((((hh2 * 60i64 + mm2) * 60i64) + ss2) * 1000i64 + ms2_div10 * 10i64),
style, actor, effect,
marginRect,
layer);
@@ -1485,7 +1485,7 @@ static bool OpenSubStationAlpha(CTextFile* file, CSimpleTextSubtitle& ret, int C
style->colors[2] = style->colors[3]; // style->colors[2] is used for drawing the outline
alpha = std::max(std::min(alpha, 0xff), 0);
for (size_t i = 0; i < 3; i++) {
- style->alpha[i] = alpha;
+ style->alpha[i] = (BYTE)alpha;
}
style->alpha[3] = 0x80;
}
@@ -1580,6 +1580,8 @@ static bool OpenSubStationAlpha(CTextFile* file, CSimpleTextSubtitle& ret, int C
fRet = true;
} else if (entry == L"fontname") {
LoadUUEFont(file);
+ } else if (entry == L"ycbcr matrix") {
+ ret.m_sYCbCrMatrix = GetStrW(pszBuff, nBuffLength);
}
}
@@ -1645,7 +1647,7 @@ static bool OpenXombieSub(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet
style->colors[i] = (COLORREF)GetInt(pszBuff, nBuffLength);
}
for (size_t i = 0; i < 4; i++) {
- style->alpha[i] = GetInt(pszBuff, nBuffLength);
+ style->alpha[i] = (BYTE)GetInt(pszBuff, nBuffLength);
}
style->fontWeight = GetInt(pszBuff, nBuffLength) ? FW_BOLD : FW_NORMAL;
style->fItalic = GetInt(pszBuff, nBuffLength);
@@ -1712,8 +1714,8 @@ static bool OpenXombieSub(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet
ret.Add(pszBuff,
file->IsUnicode(),
- (((hh1 * 60 + mm1) * 60) + ss1) * 1000 + ms1,
- (((hh2 * 60 + mm2) * 60) + ss2) * 1000 + ms2,
+ MS2RT((((hh1 * 60i64 + mm1) * 60i64) + ss1) * 1000i64 + ms1),
+ MS2RT((((hh2 * 60i64 + mm2) * 60i64) + ss2) * 1000i64 + ms2),
style, actor, _T(""),
marginRect,
layer);
@@ -1772,7 +1774,8 @@ static bool OpenMPL2(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet)
ret.Add(
MPL22SSA(buff.Mid(buff.Find(']', buff.Find(']') + 1) + 1), file->IsUnicode(), CharSet),
file->IsUnicode(),
- start * 100, end * 100);
+ MS2RT(start * 100i64),
+ MS2RT(end * 100i64));
} else if (c != EOF) { // might be another format
return false;
}
@@ -1810,17 +1813,19 @@ static int nOpenFuncts = _countof(OpenFuncts);
//
CSimpleTextSubtitle::CSimpleTextSubtitle()
- : m_mode(TIME)
+ : m_lcid(0)
+ , m_subtitleType(Subtitle::SRT)
+ , m_mode(TIME)
+ , m_encoding(CTextFile::DEFAULT_ENCODING)
+ , m_provider(_T("Local"))
+ , m_eHearingImpaired(Subtitle::HI_UNKNOWN)
, m_dstScreenSize(CSize(0, 0))
, m_defaultWrapStyle(0)
, m_collisions(0)
, m_fScaledBAS(false)
- , m_encoding(CTextFile::DEFAULT_ENCODING)
- , m_lcid(0)
+ , m_fUsingAutoGeneratedDefaultStyle(false)
, m_ePARCompensationType(EPCTDisabled)
, m_dPARCompensation(1.0)
- , m_subtitleType(Subtitle::SRT)
- , m_fUsingAutoGeneratedDefaultStyle(false)
{
}
@@ -1857,13 +1862,15 @@ void CSimpleTextSubtitle::Copy(CSimpleTextSubtitle& sts)
m_fScaledBAS = sts.m_fScaledBAS;
m_encoding = sts.m_encoding;
m_fUsingAutoGeneratedDefaultStyle = sts.m_fUsingAutoGeneratedDefaultStyle;
+ m_provider = sts.m_provider;
+ m_eHearingImpaired = sts.m_eHearingImpaired;
CopyStyles(sts.m_styles);
m_segments.Copy(sts.m_segments);
__super::Copy(sts);
}
}
-void CSimpleTextSubtitle::Append(CSimpleTextSubtitle& sts, int timeoff)
+void CSimpleTextSubtitle::Append(CSimpleTextSubtitle& sts, REFERENCE_TIME timeoff)
{
if (timeoff < 0) {
timeoff = !IsEmpty() ? GetAt(GetCount() - 1).end : 0;
@@ -1935,12 +1942,12 @@ void CSimpleTextSubtitle::Empty()
RemoveAll();
}
-static bool SegmentCompStart(const STSSegment& segment, int start)
+static bool SegmentCompStart(const STSSegment& segment, REFERENCE_TIME start)
{
return (segment.start < start);
}
-void CSimpleTextSubtitle::Add(CStringW str, bool fUnicode, int start, int end, CString style, CString actor, CString effect, const CRect& marginRect, int layer, int readorder)
+void CSimpleTextSubtitle::Add(CStringW str, bool fUnicode, REFERENCE_TIME start, REFERENCE_TIME end, CString style, CString actor, CString effect, const CRect& marginRect, int layer, int readorder)
{
FastTrim(str);
if (str.IsEmpty() || start > end) {
@@ -2005,7 +2012,7 @@ void CSimpleTextSubtitle::Add(CStringW str, bool fUnicode, int start, int end, C
i++;
}
- int lastEnd = INT_MAX;
+ REFERENCE_TIME lastEnd = _I64_MAX;
for (; i < m_segments.GetCount() && m_segments[i].start < end; i++) {
STSSegment& s = m_segments[i];
@@ -2183,8 +2190,8 @@ void CSimpleTextSubtitle::ConvertToTimeBased(double fps)
for (size_t i = 0, j = GetCount(); i < j; i++) {
STSEntry& stse = (*this)[i];
- stse.start = (int)(stse.start * 1000.0 / fps + 0.5);
- stse.end = (int)(stse.end * 1000.0 / fps + 0.5);
+ stse.start = std::llround(stse.start * UNITS_FLOAT / fps);
+ stse.end = std::llround(stse.end * UNITS_FLOAT / fps);
}
m_mode = TIME;
@@ -2200,8 +2207,8 @@ void CSimpleTextSubtitle::ConvertToFrameBased(double fps)
for (size_t i = 0, j = GetCount(); i < j; i++) {
STSEntry& stse = (*this)[i];
- stse.start = (int)(stse.start * fps / 1000 + 0.5);
- stse.end = (int)(stse.end * fps / 1000 + 0.5);
+ stse.start = std::llround(stse.start * fps / UNITS);
+ stse.end = std::llround(stse.end * fps / UNITS);
}
m_mode = FRAME;
@@ -2209,7 +2216,7 @@ void CSimpleTextSubtitle::ConvertToFrameBased(double fps)
CreateSegments();
}
-int CSimpleTextSubtitle::SearchSub(int t, double fps)
+int CSimpleTextSubtitle::SearchSub(REFERENCE_TIME t, double fps)
{
int i = 0, j = (int)GetCount() - 1, ret = -1;
@@ -2220,7 +2227,7 @@ int CSimpleTextSubtitle::SearchSub(int t, double fps)
while (i < j) {
int mid = (i + j) >> 1;
- int midt = TranslateStart(mid, fps);
+ REFERENCE_TIME midt = TranslateStart(mid, fps);
if (t == midt) {
while (mid > 0 && t == TranslateStart(mid - 1, fps)) {
@@ -2246,7 +2253,7 @@ int CSimpleTextSubtitle::SearchSub(int t, double fps)
return ret;
}
-const STSSegment* CSimpleTextSubtitle::SearchSubs(int t, double fps, /*[out]*/ int* iSegment, int* nSegments)
+const STSSegment* CSimpleTextSubtitle::SearchSubs(REFERENCE_TIME t, double fps, /*[out]*/ int* iSegment, int* nSegments)
{
int i = 0, j = (int)m_segments.GetCount() - 1, ret = -1;
@@ -2281,7 +2288,7 @@ const STSSegment* CSimpleTextSubtitle::SearchSubs(int t, double fps, /*[out]*/ i
while (i < j) {
int mid = (i + j) >> 1;
- int midt = TranslateSegmentStart(mid, fps);
+ REFERENCE_TIME midt = TranslateSegmentStart(mid, fps);
if (t == midt) {
ret = mid;
@@ -2316,35 +2323,35 @@ const STSSegment* CSimpleTextSubtitle::SearchSubs(int t, double fps, /*[out]*/ i
return nullptr;
}
-int CSimpleTextSubtitle::TranslateStart(int i, double fps)
+REFERENCE_TIME CSimpleTextSubtitle::TranslateStart(int i, double fps)
{
return (i < 0 || GetCount() <= (size_t)i ? -1 :
m_mode == TIME ? GetAt(i).start :
- m_mode == FRAME ? (int)(GetAt(i).start * 1000 / fps) :
+ m_mode == FRAME ? std::llround(GetAt(i).start * UNITS_FLOAT / fps) :
0);
}
-int CSimpleTextSubtitle::TranslateEnd(int i, double fps)
+REFERENCE_TIME CSimpleTextSubtitle::TranslateEnd(int i, double fps)
{
return (i < 0 || GetCount() <= (size_t)i ? -1 :
m_mode == TIME ? GetAt(i).end :
- m_mode == FRAME ? (int)(GetAt(i).end * 1000 / fps) :
+ m_mode == FRAME ? std::llround(GetAt(i).end * UNITS_FLOAT / fps) :
0);
}
-int CSimpleTextSubtitle::TranslateSegmentStart(int i, double fps)
+REFERENCE_TIME CSimpleTextSubtitle::TranslateSegmentStart(int i, double fps)
{
return (i < 0 || m_segments.GetCount() <= (size_t)i ? -1 :
m_mode == TIME ? m_segments[i].start :
- m_mode == FRAME ? (int)(m_segments[i].start * 1000 / fps) :
+ m_mode == FRAME ? std::llround(m_segments[i].start * UNITS_FLOAT / fps) :
0);
}
-int CSimpleTextSubtitle::TranslateSegmentEnd(int i, double fps)
+REFERENCE_TIME CSimpleTextSubtitle::TranslateSegmentEnd(int i, double fps)
{
return (i < 0 || m_segments.GetCount() <= (size_t)i ? -1 :
m_mode == TIME ? m_segments[i].end :
- m_mode == FRAME ? (int)(m_segments[i].end * 1000 / fps) :
+ m_mode == FRAME ? std::llround(m_segments[i].end * UNITS_FLOAT / fps) :
0);
}
@@ -2429,7 +2436,7 @@ bool CSimpleTextSubtitle::GetStyle(CString styleName, STSStyle& stss)
int CSimpleTextSubtitle::GetCharSet(int i)
{
const STSStyle* stss = GetStyle(i);
- return stss->charSet;
+ return stss ? stss->charSet : DEFAULT_CHARSET;
}
bool CSimpleTextSubtitle::IsEntryUnicode(int i)
@@ -2515,7 +2522,7 @@ void CSimpleTextSubtitle::SetStr(int i, CStringW str, bool fUnicode)
static int comp1(const void* a, const void* b)
{
- int ret = ((STSEntry*)a)->start - ((STSEntry*)b)->start;
+ int ret = SGN(((STSEntry*)a)->start - ((STSEntry*)b)->start);
if (ret == 0) {
ret = ((STSEntry*)a)->layer - ((STSEntry*)b)->layer;
}
@@ -2537,10 +2544,10 @@ void CSimpleTextSubtitle::Sort(bool fRestoreReadorder)
}
struct Breakpoint {
- int t;
+ REFERENCE_TIME t;
bool isStart;
- Breakpoint(int t, bool isStart) : t(t), isStart(isStart) {};
+ Breakpoint(REFERENCE_TIME t, bool isStart) : t(t), isStart(isStart) {};
};
static int BreakpointComp(const void* e1, const void* e2)
@@ -2548,7 +2555,7 @@ static int BreakpointComp(const void* e1, const void* e2)
const Breakpoint* bp1 = (const Breakpoint*)e1;
const Breakpoint* bp2 = (const Breakpoint*)e2;
- return (bp1->t - bp2->t);
+ return SGN(bp1->t - bp2->t);
}
void CSimpleTextSubtitle::CreateSegments()
@@ -2608,14 +2615,15 @@ bool CSimpleTextSubtitle::Open(CString fn, int CharSet, CString name, CString vi
return false;
}
+ CString guessed = Subtitle::GuessSubtitleName(fn, videoName, m_lcid, m_eHearingImpaired);
if (name.IsEmpty()) {
- name = Subtitle::GuessSubtitleName(fn, videoName);
+ name = guessed;
}
return Open(&f, CharSet, name);
}
-static size_t CountLines(CTextFile* f, ULONGLONG from, ULONGLONG to, CString& s = CString())
+static size_t CountLines(CTextFile* f, ULONGLONG from, ULONGLONG to, CString s = _T(""))
{
size_t n = 0;
f->Seek(from, CFile::begin);
@@ -2675,6 +2683,16 @@ bool CSimpleTextSubtitle::Open(CTextFile* f, int CharSet, CString name)
return false;
}
+bool CSimpleTextSubtitle::Open(CString provider, BYTE* data, int len, int CharSet, CString name, Subtitle::HearingImpairedType eHearingImpaired, LCID lcid)
+{
+ bool fRet = Open(data, len, CharSet, name);
+
+ m_provider = provider;
+ m_eHearingImpaired = eHearingImpaired;
+ m_lcid = lcid;
+ return fRet;
+}
+
bool CSimpleTextSubtitle::Open(BYTE* data, int len, int CharSet, CString name)
{
TCHAR path[MAX_PATH];
@@ -2710,7 +2728,7 @@ bool CSimpleTextSubtitle::Open(BYTE* data, int len, int CharSet, CString name)
}
bool CSimpleTextSubtitle::SaveAs(CString fn, Subtitle::SubType type,
- double fps /*= -1*/, int delay /*= 0*/,
+ double fps /*= -1*/, LONGLONG delay /*= 0*/,
CTextFile::enc e /*= CTextFile::DEFAULT_ENCODING*/, bool bCreateExternalStyleFile /*= true*/)
{
LPCTSTR ext = Subtitle::GetSubtitleFileExt(type);
@@ -2759,17 +2777,15 @@ bool CSimpleTextSubtitle::SaveAs(CString fn, Subtitle::SubType type,
if (type == Subtitle::ASS && m_fScaledBAS) {
str += _T("ScaledBorderAndShadow: Yes\n");
}
- str += _T("PlayResX: %d\n");
- str += _T("PlayResY: %d\n");
+ str.AppendFormat(_T("PlayResX: %d\n"), m_dstScreenSize.cx);
+ str.AppendFormat(_T("PlayResY: %d\n"), m_dstScreenSize.cy);
str += _T("Timer: 100.0000\n");
str += _T("\n");
str += (type == Subtitle::SSA)
? _T("[V4 Styles]\nFormat: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding\n")
: _T("[V4+ Styles]\nFormat: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\n");
- CString str2;
- str2.Format(str, m_dstScreenSize.cx, m_dstScreenSize.cy);
- f.WriteString(str2);
+ f.WriteString(str);
str = (type == Subtitle::SSA)
? _T("Style: %s,%s,%d,&H%06x,&H%06x,&H%06x,&H%06x,%d,%d,%d,%.2f,%.2f,%d,%d,%d,%d,%d,%d\n")
@@ -2839,19 +2855,19 @@ bool CSimpleTextSubtitle::SaveAs(CString fn, Subtitle::SubType type,
// Sort(true);
if (m_mode == FRAME) {
- delay = int(delay * fps / 1000);
+ delay = std::lround(delay * fps / 1000.0);
}
for (int i = 0, j = (int)GetCount(), k = 0; i < j; i++) {
STSEntry& stse = GetAt(i);
- int t1 = TranslateStart(i, fps) + delay;
+ int t1 = (int)(RT2MS(TranslateStart(i, fps)) + delay);
if (t1 < 0) {
k++;
continue;
}
- int t2 = TranslateEnd(i, fps) + delay;
+ int t2 = (int)(RT2MS(TranslateEnd(i, fps)) + delay);
int hh1 = (t1 / 60 / 60 / 1000);
int mm1 = (t1 / 60 / 1000) % 60;
@@ -3036,9 +3052,9 @@ STSStyle& STSStyle::operator = (LOGFONT& lf)
return *this;
}
-LOGFONTA& operator <<= (LOGFONTA& lfa, STSStyle& s)
+LOGFONTA& operator <<= (LOGFONTA& lfa, const STSStyle& s)
{
- lfa.lfCharSet = s.charSet;
+ lfa.lfCharSet = (BYTE)s.charSet;
strncpy_s(lfa.lfFaceName, LF_FACESIZE, CStringA(s.fontName), _TRUNCATE);
HDC hDC = GetDC(nullptr);
lfa.lfHeight = -MulDiv((int)(s.fontSize + 0.5), GetDeviceCaps(hDC, LOGPIXELSY), 72);
@@ -3050,9 +3066,9 @@ LOGFONTA& operator <<= (LOGFONTA& lfa, STSStyle& s)
return lfa;
}
-LOGFONTW& operator <<= (LOGFONTW& lfw, STSStyle& s)
+LOGFONTW& operator <<= (LOGFONTW& lfw, const STSStyle& s)
{
- lfw.lfCharSet = s.charSet;
+ lfw.lfCharSet = (BYTE)s.charSet;
wcsncpy_s(lfw.lfFaceName, LF_FACESIZE, CStringW(s.fontName), _TRUNCATE);
HDC hDC = GetDC(nullptr);
lfw.lfHeight = -MulDiv((int)(s.fontSize + 0.5), GetDeviceCaps(hDC, LOGPIXELSY), 72);
@@ -3106,7 +3122,7 @@ STSStyle& operator <<= (STSStyle& s, const CString& style)
s.colors[i] = (COLORREF)GetInt(pszBuff, nBuffLength, L';');
}
for (size_t i = 0; i < 4; i++) {
- s.alpha[i] = GetInt(pszBuff, nBuffLength, L';');
+ s.alpha[i] = (BYTE)GetInt(pszBuff, nBuffLength, L';');
}
s.charSet = GetInt(pszBuff, nBuffLength, L';');
s.fontName = WToT(GetStrW(pszBuff, nBuffLength, L';'));
@@ -3143,7 +3159,12 @@ static bool OpenRealText(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet)
continue;
}
- szFile += CStringW(_T("\n")) + buff.GetBuffer();
+ // Make sure that the subtitle file starts with a <window> tag
+ if (szFile.empty() && buff.CompareNoCase(_T("<window")) < 0) {
+ return false;
+ }
+
+ szFile += _T("\n") + buff;
}
CRealTextParser RealTextParser;
@@ -3157,8 +3178,8 @@ static bool OpenRealText(CTextFile* file, CSimpleTextSubtitle& ret, int CharSet)
ret.Add(
SubRipper2SSA(i->second.c_str(), CharSet),
file->IsUnicode(),
- i->first.first,
- i->first.second);
+ MS2RT(i->first.first),
+ MS2RT(i->first.second));
}
return !ret.IsEmpty();
diff --git a/src/Subtitles/STS.h b/src/Subtitles/STS.h
index ad3614d39..cf09958b2 100644
--- a/src/Subtitles/STS.h
+++ b/src/Subtitles/STS.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,7 +23,6 @@
#include <atlcoll.h>
#include <array>
-#include "BaseClasses/wxutil.h"
#include "TextFile.h"
#include "SubtitleHelpers.h"
@@ -72,8 +71,8 @@ public:
STSStyle& operator = (LOGFONT& lf);
- friend LOGFONTA& operator <<= (LOGFONTA& lfa, STSStyle& s);
- friend LOGFONTW& operator <<= (LOGFONTW& lfw, STSStyle& s);
+ friend LOGFONTA& operator <<= (LOGFONTA& lfa, const STSStyle& s);
+ friend LOGFONTW& operator <<= (LOGFONTW& lfw, const STSStyle& s);
friend CString& operator <<= (CString& style, const STSStyle& s);
friend STSStyle& operator <<= (STSStyle& s, const CString& style);
@@ -93,20 +92,20 @@ struct STSEntry {
CString style, actor, effect;
CRect marginRect;
int layer;
- int start, end;
+ REFERENCE_TIME start, end;
int readorder;
};
class STSSegment
{
public:
- int start, end;
+ REFERENCE_TIME start, end;
CAtlArray<int> subs;
STSSegment()
: start(0)
, end(0) {}
- STSSegment(int s, int e) {
+ STSSegment(REFERENCE_TIME s, REFERENCE_TIME e) {
start = s;
end = e;
}
@@ -126,6 +125,7 @@ public:
class CSimpleTextSubtitle : public CAtlArray<STSEntry>
{
friend class CSubtitleEditorDlg;
+ friend class SubtitlesProvider;
protected:
CAtlArray<STSSegment> m_segments;
@@ -139,10 +139,15 @@ public:
CTextFile::enc m_encoding;
CString m_path;
+ CString m_provider;
+
+ Subtitle::HearingImpairedType m_eHearingImpaired;
+
CSize m_dstScreenSize;
int m_defaultWrapStyle;
int m_collisions;
bool m_fScaledBAS;
+ CString m_sYCbCrMatrix;
bool m_fUsingAutoGeneratedDefaultStyle;
@@ -169,14 +174,15 @@ public:
void Sort(bool fRestoreReadorder = false);
void CreateSegments();
- void Append(CSimpleTextSubtitle& sts, int timeoff = -1);
+ void Append(CSimpleTextSubtitle& sts, REFERENCE_TIME timeoff = -1);
bool Open(CString fn, int CharSet, CString name = _T(""), CString videoName = _T(""));
bool Open(CTextFile* f, int CharSet, CString name);
bool Open(BYTE* data, int len, int CharSet, CString name);
- bool SaveAs(CString fn, Subtitle::SubType type, double fps = -1, int delay = 0, CTextFile::enc = CTextFile::DEFAULT_ENCODING, bool bCreateExternalStyleFile = true);
+ bool Open(CString provider, BYTE* data, int len, int CharSet, CString name, Subtitle::HearingImpairedType eHearingImpaired, LCID lcid);
+ bool SaveAs(CString fn, Subtitle::SubType type, double fps = -1, LONGLONG delay = 0, CTextFile::enc e = CTextFile::DEFAULT_ENCODING, bool bCreateExternalStyleFile = true);
- void Add(CStringW str, bool fUnicode, int start, int end, CString style = _T("Default"), CString actor = _T(""), CString effect = _T(""), const CRect& marginRect = CRect(0, 0, 0, 0), int layer = 0, int readorder = -1);
+ void Add(CStringW str, bool fUnicode, REFERENCE_TIME start, REFERENCE_TIME end, CString style = _T("Default"), CString actor = _T(""), CString effect = _T(""), const CRect& marginRect = CRect(0, 0, 0, 0), int layer = 0, int readorder = -1);
STSStyle* CreateDefaultStyle(int CharSet);
void ChangeUnknownStylesToDefault();
void AddStyle(CString name, STSStyle* style); // style will be stored and freed in Empty() later
@@ -188,13 +194,13 @@ public:
void ConvertToTimeBased(double fps);
void ConvertToFrameBased(double fps);
- int TranslateStart(int i, double fps);
- int TranslateEnd(int i, double fps);
- int SearchSub(int t, double fps);
+ REFERENCE_TIME TranslateStart(int i, double fps);
+ REFERENCE_TIME TranslateEnd(int i, double fps);
+ int SearchSub(REFERENCE_TIME t, double fps);
- int TranslateSegmentStart(int i, double fps);
- int TranslateSegmentEnd(int i, double fps);
- const STSSegment* SearchSubs(int t, double fps, /*[out]*/ int* iSegment = nullptr, int* nSegments = nullptr);
+ REFERENCE_TIME TranslateSegmentStart(int i, double fps);
+ REFERENCE_TIME TranslateSegmentEnd(int i, double fps);
+ const STSSegment* SearchSubs(REFERENCE_TIME t, double fps, /*[out]*/ int* iSegment = nullptr, int* nSegments = nullptr);
const STSSegment* GetSegment(int iSegment) {
return iSegment >= 0 && iSegment < (int)m_segments.GetCount() ? &m_segments[iSegment] : nullptr;
}
@@ -214,9 +220,9 @@ public:
void SetStr(int i, CStringW str, bool fUnicode);
};
-extern BYTE CharSetList[];
-extern TCHAR* CharSetNames[];
-extern int CharSetLen;
+extern const BYTE CharSetList[];
+extern const TCHAR* CharSetNames[];
+extern const int CharSetLen;
class CHtmlColorMap : public CAtlMap<CString, DWORD, CStringElementTraits<CString>>
{
@@ -224,4 +230,4 @@ public:
CHtmlColorMap();
};
-extern CHtmlColorMap g_colors;
+extern const CHtmlColorMap g_colors;
diff --git a/src/Subtitles/SeparableFilter.h b/src/Subtitles/SeparableFilter.h
index 3334a56b4..5ecf97795 100644
--- a/src/Subtitles/SeparableFilter.h
+++ b/src/Subtitles/SeparableFilter.h
@@ -1,6 +1,6 @@
/*
* (C) 2007 Niels Martin Hansen
-* (C) 2013-2014 see Authors.txt
+* (C) 2013-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,10 +21,13 @@
#pragma once
-#include <math.h>
+#include <cmath>
#define LIBDIVIDE_USE_SSE2 1
+#pragma warning(push)
+#pragma warning(disable: 4244 4702)
#include "libdivide.h"
+#pragma warning(pop)
// Filter an image in horizontal direction with a one-dimensional filter
// PixelWidth is the distance in bytes between pixels
diff --git a/src/Subtitles/SubtitleHelpers.cpp b/src/Subtitles/SubtitleHelpers.cpp
index 8dcea6ad3..17f91e266 100644
--- a/src/Subtitles/SubtitleHelpers.cpp
+++ b/src/Subtitles/SubtitleHelpers.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,29 +20,40 @@
*/
#include "stdafx.h"
-#include <io.h>
-#include <vector>
-#include <regex>
-#include "TextFile.h"
#include "SubtitleHelpers.h"
+#include "TextFile.h"
+#include "../DSUtil/PathUtils.h"
+#include "../DSUtil/ISOLang.h"
+#include <regex>
-static const std::vector<LPCTSTR> subTypesExt = {
- _T("srt"), _T("sub"), _T("smi"), _T("psb"),
- _T("ssa"), _T("ass"), _T("idx"), _T("usf"),
- _T("xss"), _T("txt"), _T("rt"), _T("sup")
-};
+namespace
+{
+ constexpr std::array<LPCTSTR, 12> subTypesExt = {
+ _T("srt"), _T("sub"), _T("smi"), _T("psb"),
+ _T("ssa"), _T("ass"), _T("idx"), _T("usf"),
+ _T("xss"), _T("txt"), _T("rt"), _T("sup")
+ };
-static LPCTSTR separators = _T(".\\-_");
-static LPCTSTR extListVid = _T("(avi)|(mkv)|(mp4)|((m2)?ts)");
+ LPCTSTR separators = _T(".\\-_");
+ LPCTSTR extListVid = _T("(avi)|(mkv)|(mp4)|((m2)?ts)");
+
+ int SubFileCompare(const void* elem1, const void* elem2)
+ {
+ return ((Subtitle::SubFile*)elem1)->fn.CompareNoCase(((Subtitle::SubFile*)elem2)->fn);
+ }
+}
LPCTSTR Subtitle::GetSubtitleFileExt(SubType type)
{
return (type >= 0 && size_t(type) < subTypesExt.size()) ? subTypesExt[type] : nullptr;
}
-static int SubFileCompare(const void* elem1, const void* elem2)
+bool Subtitle::IsTextSubtitleFileName(CString fileName)
{
- return ((Subtitle::SubFile*)elem1)->fn.CompareNoCase(((Subtitle::SubFile*)elem2)->fn);
+ auto fileExt = PathUtils::FileExt(fileName).TrimLeft('.');
+ return std::any_of(subTypesExt.cbegin(), subTypesExt.cend(), [&](LPCTSTR ext) {
+ return fileExt == ext;
+ });
}
void Subtitle::GetSubFileNames(CString fn, const CAtlArray<CString>& paths, CAtlArray<SubFile>& ret)
@@ -94,7 +105,7 @@ void Subtitle::GetSubFileNames(CString fn, const CAtlArray<CString>& paths, CAtl
l = path.GetLength();
if (l > 0 && path[l - 1] != '/') {
- path += '/';
+ path += _T('/');
}
if (path.Find(':') == -1 && path.Find(_T("\\\\")) != 0) {
@@ -109,12 +120,12 @@ void Subtitle::GetSubFileNames(CString fn, const CAtlArray<CString>& paths, CAtl
HANDLE hFile = FindFirstFile(path + title + _T("*"), &wfd);
if (hFile != INVALID_HANDLE_VALUE) {
do {
- CString fn = path + wfd.cFileName;
+ CString fn2 = path + wfd.cFileName;
if (std::regex_match(&wfd.cFileName[titleLength], reSub)) {
- subs.AddTail(fn);
+ subs.AddTail(fn2);
} else if (std::regex_match(&wfd.cFileName[titleLength], reVid)) {
// Convert to lower-case and cut the extension for easier matching
- vids.AddTail(fn.Left(fn.ReverseFind(_T('.'))).MakeLower());
+ vids.AddTail(fn2.Left(fn2.ReverseFind(_T('.'))).MakeLower());
}
} while (FindNextFile(hFile, &wfd));
@@ -123,8 +134,8 @@ void Subtitle::GetSubFileNames(CString fn, const CAtlArray<CString>& paths, CAtl
POSITION posSub = subs.GetHeadPosition();
while (posSub) {
- CString& fn = subs.GetNext(posSub);
- CString fnlower = fn;
+ CString& fn2 = subs.GetNext(posSub);
+ CString fnlower = fn2;
fnlower.MakeLower();
// Check if there is an exact match for another video file
@@ -139,7 +150,7 @@ void Subtitle::GetSubFileNames(CString fn, const CAtlArray<CString>& paths, CAtl
if (!bMatchAnotherVid) {
SubFile f;
- f.fn = fn;
+ f.fn = fn2;
ret.Add(f);
}
}
@@ -161,10 +172,9 @@ void Subtitle::GetSubFileNames(CString fn, const CAtlArray<CString>& paths, CAtl
qsort(ret.GetData(), ret.GetCount(), sizeof(SubFile), SubFileCompare);
}
-CString Subtitle::GuessSubtitleName(CString fn, CString videoName)
+CString Subtitle::GuessSubtitleName(const CString& fn, CString videoName, LCID& lcid, HearingImpairedType& hi)
{
CString name, lang;
- bool bHearingImpaired = false;
// The filename of the subtitle file
int iExtStart = fn.ReverseFind('.');
@@ -200,10 +210,20 @@ CString Subtitle::GuessSubtitleName(CString fn, CString videoName)
if (std::regex_search((LPCTSTR)subName, mc, re)) {
ASSERT(mc.size() == 3);
ASSERT(mc[1].matched);
- lang = ISO639XToLanguage(CStringA(mc[1].str().c_str()), true);
-
- if (!lang.IsEmpty() && mc[2].matched) {
- bHearingImpaired = (CString(mc[2].str().c_str()).CompareNoCase(_T("hi")) == 0);
+ lang = ISOLang::ISO639XToLanguage(CStringA(mc[1].str().c_str()), true);
+
+ if (!lang.IsEmpty()) {
+ size_t len = mc[1].str().size();
+ if (len == 3) {
+ lcid = ISOLang::ISO6392ToLcid(CStringA(mc[1].str().c_str()));
+ } else if (len == 2) {
+ lcid = ISOLang::ISO6391ToLcid(CStringA(mc[1].str().c_str()));
+ }
+ if (mc[2].matched) {
+ if (CString(mc[2].str().c_str()).CompareNoCase(_T("hi")) == 0) {
+ hi = HI_YES;
+ }
+ }
}
}
}
@@ -216,7 +236,15 @@ CString Subtitle::GuessSubtitleName(CString fn, CString videoName)
if (std::regex_search((LPCTSTR)subName, mc, re)) {
ASSERT(mc.size() == 3);
ASSERT(mc[1].matched);
- lang = ISO639XToLanguage(CStringA(mc[1].str().c_str()), true);
+ lang = ISOLang::ISO639XToLanguage(CStringA(mc[1].str().c_str()), true);
+ if (!lang.IsEmpty()) {
+ size_t len = mc[1].str().size();
+ if (len == 3) {
+ lcid = ISOLang::ISO6392ToLcid(CStringA(mc[1].str().c_str()));
+ } else if (len == 2) {
+ lcid = ISOLang::ISO6391ToLcid(CStringA(mc[1].str().c_str()));
+ }
+ }
CStringA str;
if (mc[2].matched) {
@@ -224,9 +252,17 @@ CString Subtitle::GuessSubtitleName(CString fn, CString videoName)
}
if (!lang.IsEmpty() && str.CompareNoCase("hi") == 0) {
- bHearingImpaired = true;
+ hi = HI_YES;
} else {
- lang = ISO639XToLanguage(str, true);
+ lang = ISOLang::ISO639XToLanguage(str, true);
+ if (!lang.IsEmpty()) {
+ size_t len = str.GetLength();
+ if (len == 3) {
+ lcid = ISOLang::ISO6392ToLcid(str.GetString());
+ } else if (len == 2) {
+ lcid = ISOLang::ISO6391ToLcid(str.GetString());
+ }
+ }
}
}
}
@@ -235,12 +271,6 @@ CString Subtitle::GuessSubtitleName(CString fn, CString videoName)
if (name.GetLength() > 100) { // Cut some part of the filename if it's too long
name.Format(_T("%s...%s"), name.Left(50).TrimRight(_T(".-_ ")), name.Right(50).TrimLeft(_T(".-_ ")));
}
- if (!lang.IsEmpty()) {
- name.AppendFormat(_T(" [%s]"), lang);
- if (bHearingImpaired) {
- name.Append(_T(" [hearing impaired]"));
- }
- }
return name;
}
diff --git a/src/Subtitles/SubtitleHelpers.h b/src/Subtitles/SubtitleHelpers.h
index d004cae67..95b9beec0 100644
--- a/src/Subtitles/SubtitleHelpers.h
+++ b/src/Subtitles/SubtitleHelpers.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,6 +24,10 @@
#include <afx.h>
#include <atlcoll.h>
+#define MS2RT(t) (10000i64 * (t))
+#define RT2MS(t) ((t) / 10000)
+#define UNITS_FLOAT (10000000.0)
+
namespace Subtitle
{
enum SubType {
@@ -41,7 +45,14 @@ namespace Subtitle
SUP
};
+ enum HearingImpairedType {
+ HI_UNKNOWN = -1,
+ HI_NO = 0,
+ HI_YES = 1
+ };
+
LPCTSTR GetSubtitleFileExt(SubType type);
+ bool IsTextSubtitleFileName(CString filename);
struct SubFile {
CString fn; /*SubType type;*/
@@ -49,5 +60,5 @@ namespace Subtitle
void GetSubFileNames(CString fn, const CAtlArray<CString>& paths, CAtlArray<SubFile>& ret);
- CString GuessSubtitleName(CString fn, CString videoName);
+ CString GuessSubtitleName(const CString& fn, CString videoName, LCID& lcid, HearingImpairedType& hi);
};
diff --git a/src/Subtitles/SubtitleInputPin.cpp b/src/Subtitles/SubtitleInputPin.cpp
index 9cdcc5595..b5df02cac 100644
--- a/src/Subtitles/SubtitleInputPin.cpp
+++ b/src/Subtitles/SubtitleInputPin.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -26,9 +26,9 @@
#include "DVBSub.h"
#include "PGSSub.h"
-#include <InitGuid.h>
#include <uuids.h>
#include "moreuuids.h"
+#include "../DSUtil/ISOLang.h"
// our first format id
#define __GAB1__ "GAB1"
@@ -57,7 +57,9 @@ CSubtitleInputPin::CSubtitleInputPin(CBaseFilter* pFilter, CCritSec* pLock, CCri
, m_bStopDecoding(false)
{
m_bCanReconnectWhenActive = true;
- m_decodeThread = std::thread([this]() { DecodeSamples(); });
+ m_decodeThread = std::thread([this]() {
+ DecodeSamples();
+ });
}
CSubtitleInputPin::~CSubtitleInputPin()
@@ -101,8 +103,8 @@ HRESULT CSubtitleInputPin::CompleteConnect(IPin* pReceivePin)
if (psi != nullptr) {
dwOffset = psi->dwOffset;
- name = ISO6392ToLanguage(psi->IsoLang);
- lcid = ISO6392ToLcid(psi->IsoLang);
+ name = ISOLang::ISO6392ToLanguage(psi->IsoLang);
+ lcid = ISOLang::ISO6392ToLcid(psi->IsoLang);
CString trackName(psi->TrackName);
trackName.Trim();
@@ -275,7 +277,7 @@ STDMETHODIMP CSubtitleInputPin::Receive(IMediaSample* pSample)
{
std::unique_lock<std::mutex> lock(m_mutexQueue);
- m_sampleQueue.AddTail(CAutoPtr<SubtitleSample>(DEBUG_NEW SubtitleSample(tStart, tStop, pData, size_t(len))));
+ m_sampleQueue.emplace_back(DEBUG_NEW SubtitleSample(tStart, tStop, pData, size_t(len)));
lock.unlock();
m_condQueueReady.notify_one();
}
@@ -290,7 +292,7 @@ STDMETHODIMP CSubtitleInputPin::EndOfStream(void)
if (SUCCEEDED(hr)) {
std::unique_lock<std::mutex> lock(m_mutexQueue);
- m_sampleQueue.AddTail(CAutoPtr<SubtitleSample>(nullptr)); // nullptr means end of stream
+ m_sampleQueue.emplace_back(nullptr); // nullptr means end of stream
lock.unlock();
m_condQueueReady.notify_one();
}
@@ -318,7 +320,7 @@ void CSubtitleInputPin::DecodeSamples()
};
auto isQueueReady = [&]() {
- return !m_sampleQueue.IsEmpty() || needStopProcessing();
+ return !m_sampleQueue.empty() || needStopProcessing();
};
m_condQueueReady.wait(lock, isQueueReady);
@@ -330,8 +332,8 @@ void CSubtitleInputPin::DecodeSamples()
CAutoLock cAutoLock(m_pSubLock);
lock.lock(); // Reacquire the lock
- while (!m_sampleQueue.IsEmpty() && !needStopProcessing()) {
- auto pSample = m_sampleQueue.RemoveHead();
+ while (!m_sampleQueue.empty() && !needStopProcessing()) {
+ const auto& pSample = m_sampleQueue.front();
if (pSample) {
REFERENCE_TIME rtSampleInvalidate = DecodeSample(pSample);
@@ -344,6 +346,8 @@ void CSubtitleInputPin::DecodeSamples()
pRLECodedSubtitle->EndOfStream();
}
}
+
+ m_sampleQueue.pop_front();
}
}
@@ -355,7 +359,7 @@ void CSubtitleInputPin::DecodeSamples()
}
}
-REFERENCE_TIME CSubtitleInputPin::DecodeSample(const CAutoPtr<SubtitleSample>& pSample)
+REFERENCE_TIME CSubtitleInputPin::DecodeSample(const std::unique_ptr<SubtitleSample>& pSample)
{
bool bInvalidate = false;
@@ -375,14 +379,14 @@ REFERENCE_TIME CSubtitleInputPin::DecodeSample(const CAutoPtr<SubtitleSample>& p
ptr += 2;
if (tag == __GAB1_LANGUAGE__) {
- pRTS->m_name = CString(ptr);
+ pRTS->m_name = ptr;
} else if (tag == __GAB1_ENTRY__) {
- pRTS->Add(AToW(&ptr[8]), false, *(int*)ptr, *(int*)(ptr + 4));
+ pRTS->Add(AToW(&ptr[8]), false, MS2RT(*(int*)ptr), MS2RT(*(int*)(ptr + 4)));
bInvalidate = true;
} else if (tag == __GAB1_LANGUAGE_UNICODE__) {
pRTS->m_name = (WCHAR*)ptr;
} else if (tag == __GAB1_ENTRY_UNICODE__) {
- pRTS->Add((WCHAR*)(ptr + 8), true, *(int*)ptr, *(int*)(ptr + 4));
+ pRTS->Add((WCHAR*)(ptr + 8), true, MS2RT(*(int*)ptr), MS2RT(*(int*)(ptr + 4)));
bInvalidate = true;
}
@@ -414,7 +418,7 @@ REFERENCE_TIME CSubtitleInputPin::DecodeSample(const CAutoPtr<SubtitleSample>& p
str.Trim();
if (!str.IsEmpty()) {
- pRTS->Add(AToW(str), false, (int)(pSample->rtStart / 10000), (int)(pSample->rtStop / 10000));
+ pRTS->Add(AToW(str), false, pSample->rtStart, pSample->rtStop);
bInvalidate = true;
}
}
@@ -424,7 +428,7 @@ REFERENCE_TIME CSubtitleInputPin::DecodeSample(const CAutoPtr<SubtitleSample>& p
CStringW str = UTF8To16(CStringA((LPCSTR)pSample->data.data(), (int)pSample->data.size())).Trim();
if (!str.IsEmpty()) {
- pRTS->Add(str, true, (int)(pSample->rtStart / 10000), (int)(pSample->rtStop / 10000));
+ pRTS->Add(str, true, pSample->rtStart, pSample->rtStop);
bInvalidate = true;
}
} else if (m_mt.subtype == MEDIASUBTYPE_SSA || m_mt.subtype == MEDIASUBTYPE_ASS || m_mt.subtype == MEDIASUBTYPE_ASS2) {
@@ -454,7 +458,7 @@ REFERENCE_TIME CSubtitleInputPin::DecodeSample(const CAutoPtr<SubtitleSample>& p
}
if (!stse.str.IsEmpty()) {
- pRTS->Add(stse.str, true, (int)(pSample->rtStart / 10000), (int)(pSample->rtStop / 10000),
+ pRTS->Add(stse.str, true, pSample->rtStart, pSample->rtStop,
stse.style, stse.actor, stse.effect, stse.marginRect, stse.layer, stse.readorder);
bInvalidate = true;
}
@@ -476,7 +480,7 @@ void CSubtitleInputPin::InvalidateSamples()
m_bStopDecoding = true;
{
std::lock_guard<std::mutex> lock(m_mutexQueue);
- m_sampleQueue.RemoveAll();
+ m_sampleQueue.clear();
m_bStopDecoding = false;
}
}
diff --git a/src/Subtitles/SubtitleInputPin.h b/src/Subtitles/SubtitleInputPin.h
index 55549ad94..c94635d3e 100644
--- a/src/Subtitles/SubtitleInputPin.h
+++ b/src/Subtitles/SubtitleInputPin.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#pragma once
#include <vector>
+#include <list>
#include <memory>
#include <thread>
#include <condition_variable>
@@ -51,7 +52,7 @@ class CSubtitleInputPin : public CBaseInputPin
, data(pData, pData + len) {}
};
- CAutoPtrList<SubtitleSample> m_sampleQueue;
+ std::list<std::unique_ptr<SubtitleSample>> m_sampleQueue;
bool m_bExitDecodingThread, m_bStopDecoding;
std::thread m_decodeThread;
@@ -59,7 +60,7 @@ class CSubtitleInputPin : public CBaseInputPin
std::condition_variable m_condQueueReady;
void DecodeSamples();
- REFERENCE_TIME DecodeSample(const CAutoPtr<SubtitleSample>& pSample);
+ REFERENCE_TIME DecodeSample(const std::unique_ptr<SubtitleSample>& pSample);
void InvalidateSamples();
protected:
diff --git a/src/Subtitles/Subtitles.vcxproj b/src/Subtitles/Subtitles.vcxproj
index 6ddea0283..7cbdf9cf2 100644
--- a/src/Subtitles/Subtitles.vcxproj
+++ b/src/Subtitles/Subtitles.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,44 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\include;..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -98,6 +51,7 @@
<ClCompile Include="CCDecoder.cpp" />
<ClCompile Include="CompositionObject.cpp" />
<ClCompile Include="DVBSub.cpp" />
+ <ClCompile Include="ColorConvTable.cpp" />
<ClCompile Include="SubtitleHelpers.cpp" />
<ClCompile Include="PGSSub.cpp" />
<ClCompile Include="Rasterizer.cpp" />
@@ -119,6 +73,7 @@
<ItemGroup>
<ClInclude Include="..\..\include\Utf8.h" />
<ClInclude Include="Ellipse.h" />
+ <ClInclude Include="ColorConvTable.h" />
<ClInclude Include="RenderingCache.h" />
<ClInclude Include="CCDecoder.h" />
<ClInclude Include="CompositionObject.h" />
diff --git a/src/Subtitles/Subtitles.vcxproj.filters b/src/Subtitles/Subtitles.vcxproj.filters
index 7587cff1c..7bc333c42 100644
--- a/src/Subtitles/Subtitles.vcxproj.filters
+++ b/src/Subtitles/Subtitles.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{11712c7b-74ef-4965-a813-5290f06e30a4}</UniqueIdentifier>
@@ -71,6 +71,9 @@
<ClCompile Include="Ellipse.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="ColorConvTable.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="CCDecoder.h">
@@ -139,5 +142,8 @@
<ClInclude Include="Ellipse.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="ColorConvTable.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/src/Subtitles/TextFile.cpp b/src/Subtitles/TextFile.cpp
index dbe2d44cf..6fe78ea2a 100644
--- a/src/Subtitles/TextFile.cpp
+++ b/src/Subtitles/TextFile.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -223,7 +223,7 @@ void CTextFile::WriteString(LPCWSTR lpsz/*CStringW str*/)
__super::WriteString(WToT(str));
} else if (m_encoding == ANSI) {
str.Replace(L"\n", L"\r\n");
- CStringA stra = CStringA(CString(str)); // TODO: codepage
+ CStringA stra(str); // TODO: codepage
Write((LPCSTR)stra, stra.GetLength());
} else if (m_encoding == UTF8) {
str.Replace(L"\n", L"\r\n");
diff --git a/src/Subtitles/USFSubtitles.cpp b/src/Subtitles/USFSubtitles.cpp
index 7e50225ac..e721efbc7 100644
--- a/src/Subtitles/USFSubtitles.cpp
+++ b/src/Subtitles/USFSubtitles.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -42,8 +42,8 @@
#define BeginEnumChildren(pNode, pChild) \
{ \
- CComPtr<IXMLDOMNode> pChild, pNext; \
- for (pNode->get_firstChild(&pChild); pChild; pNext = nullptr, pChild->get_nextSibling(&pNext), pChild = pNext) {
+ CComPtr<IXMLDOMNode> pChild, pChild##Next; \
+ for (pNode->get_firstChild(&pChild); pChild; pChild##Next = nullptr, pChild->get_nextSibling(&pChild##Next), pChild = pChild##Next) {
#define EndEnumChildren }}
@@ -315,7 +315,7 @@ bool CUSFSubtitles::ConvertToSTS(CSimpleTextSubtitle& sts)
if (!s->name.CompareNoCase(L"Default") && !s->fontstyle.wrap.IsEmpty()) {
sts.m_defaultWrapStyle =
!s->fontstyle.wrap.CompareNoCase(L"no") ? 2 :
- !s->fontstyle.wrap.CompareNoCase(L"auto") ? 1 :
+ /*!s->fontstyle.wrap.CompareNoCase(L"auto") ? 1 :*/
1;
}
@@ -348,12 +348,12 @@ bool CUSFSubtitles::ConvertToSTS(CSimpleTextSubtitle& sts)
for (size_t i = 0; i < 4; i++) {
DWORD color = ColorToDWORD(s->fontstyle.color[i]);
- int alpha = (BYTE)wcstol(s->fontstyle.alpha, nullptr, 10);
+ auto alpha = (BYTE)wcstol(s->fontstyle.alpha, nullptr, 10);
stss->colors[i] = color & 0xffffff;
stss->alpha[i] = (BYTE)(color >> 24);
- stss->alpha[i] = stss->alpha[i] + (255 - stss->alpha[i]) * std::min(std::max(alpha, 0), 100) / 100;
+ stss->alpha[i] = BYTE(stss->alpha[i] + (255 - stss->alpha[i]) * std::min(std::max(alpha, 0ui8), 100ui8) / 100);
}
if (!s->fontstyle.face.IsEmpty()) {
@@ -428,7 +428,7 @@ bool CUSFSubtitles::ConvertToSTS(CSimpleTextSubtitle& sts)
if (s->name == t->style && !s->fontstyle.wrap.IsEmpty()) {
int WrapStyle =
!s->fontstyle.wrap.CompareNoCase(L"no") ? 2 :
- !s->fontstyle.wrap.CompareNoCase(L"auto") ? 1 :
+ /*!s->fontstyle.wrap.CompareNoCase(L"auto") ? 1 :*/
1;
if (WrapStyle != sts.m_defaultWrapStyle) {
@@ -458,9 +458,9 @@ bool CUSFSubtitles::ParseUSFSubtitles(CComPtr<IXMLDOMNode> pNode)
// metadata
BeginEnumChildren(pNode, pChild) {
- DeclareNameAndValue(pChild, name, val);
+ DeclareNameAndValue(pChild, childName, childVal);
- if (name == L"metadata") {
+ if (childName == L"metadata") {
ParseMetadata(pChild, metadata);
}
}
@@ -469,13 +469,13 @@ bool CUSFSubtitles::ParseUSFSubtitles(CComPtr<IXMLDOMNode> pNode)
// styles
BeginEnumChildren(pNode, pChild) {
- DeclareNameAndValue(pChild, name, val);
+ DeclareNameAndValue(pChild, childName, childVal);
- if (name == L"styles") {
+ if (childName == L"styles") {
BeginEnumChildren(pChild, pGrandChild) { // :)
- DeclareNameAndValue(pGrandChild, name, val);
+ DeclareNameAndValue(pGrandChild, grandChildName, grandChildVal);
- if (name == L"style") {
+ if (grandChildName == L"style") {
CAutoPtr<style_t> s(DEBUG_NEW style_t);
if (s) {
ParseStyle(pGrandChild, s);
@@ -491,13 +491,13 @@ bool CUSFSubtitles::ParseUSFSubtitles(CComPtr<IXMLDOMNode> pNode)
// effects
BeginEnumChildren(pNode, pChild) {
- DeclareNameAndValue(pChild, name, val);
+ DeclareNameAndValue(pChild, childName, childVal);
- if (name == L"effects") {
+ if (childName == L"effects") {
BeginEnumChildren(pChild, pGrandChild) { // :)
- DeclareNameAndValue(pGrandChild, name, val);
+ DeclareNameAndValue(pGrandChild, grandChildName, grandChildVal);
- if (name == L"effect") {
+ if (grandChildName == L"effect") {
CAutoPtr<effect_t> e(DEBUG_NEW effect_t);
if (e) {
ParseEffect(pGrandChild, e);
@@ -513,13 +513,13 @@ bool CUSFSubtitles::ParseUSFSubtitles(CComPtr<IXMLDOMNode> pNode)
// subtitles
BeginEnumChildren(pNode, pChild) {
- DeclareNameAndValue(pChild, name, val);
+ DeclareNameAndValue(pChild, childName, childVal);
- if (name == L"subtitles") {
+ if (childName == L"subtitles") {
BeginEnumChildren(pChild, pGrandChild) { // :)
- DeclareNameAndValue(pGrandChild, name, val);
+ DeclareNameAndValue(pGrandChild, grandChildName, grandChildVal);
- if (name == L"subtitle") {
+ if (grandChildName == L"subtitle") {
CStringW sstart = GetAttrib(L"start", pGrandChild);
CStringW sstop = GetAttrib(L"stop", pGrandChild);
CStringW sduration = GetAttrib(L"duration", pGrandChild);
@@ -563,13 +563,13 @@ void CUSFSubtitles::ParseMetadata(CComPtr<IXMLDOMNode> pNode, metadata_t& m)
m.comment = GetText(pNode);
} else if (name == L"author") {
BeginEnumChildren(pNode, pChild) {
- DeclareNameAndValue(pChild, name, val);
+ DeclareNameAndValue(pChild, childName, childVal);
- if (name == L"name") {
+ if (childName == L"name") {
m.author.name = GetText(pChild);
- } else if (name == L"email") {
+ } else if (childName == L"email") {
m.author.email = GetText(pChild);
- } else if (name == L"url") {
+ } else if (childName == L"url") {
m.author.url = GetText(pChild);
}
}
@@ -646,9 +646,9 @@ void CUSFSubtitles::ParseEffect(CComPtr<IXMLDOMNode> pNode, effect_t* e)
e->name = GetAttrib(L"name", pNode);
} else if (name == L"keyframes") {
BeginEnumChildren(pNode, pChild) {
- DeclareNameAndValue(pChild, name, val);
+ DeclareNameAndValue(pChild, childName, childVal);
- if (name == L"keyframe") {
+ if (childName == L"keyframe") {
CAutoPtr<keyframe_t> k(DEBUG_NEW keyframe_t);
if (k) {
ParseKeyframe(pChild, k);
diff --git a/src/Subtitles/VobSubFile.cpp b/src/Subtitles/VobSubFile.cpp
index 5ec54897c..1498489f1 100644
--- a/src/Subtitles/VobSubFile.cpp
+++ b/src/Subtitles/VobSubFile.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -32,14 +32,14 @@
#include "unrar/dll.hpp"
#endif
#include "RTS.h"
-#include "../DSUtil/WinAPIUtils.h"
+#include "../DSUtil/PathUtils.h"
//
struct lang_type {
unsigned short id;
LPCSTR lang_long;
-} lang_tbl[] = {
+} static constexpr lang_tbl[] = {
{'--', "(Not detected)"},
{'cc', "Closed Caption"},
{'aa', "Afar"},
@@ -259,8 +259,8 @@ bool CVobSubFile::Copy(CVobSubFile& vsf)
sp.filepos = m_sub.GetPosition();
BYTE buff[2048];
- vsf.m_sub.Read(buff, 2048);
- m_sub.Write(buff, 2048);
+ UINT uRead = vsf.m_sub.Read(buff, 2048);
+ m_sub.Write(buff, uRead);
WORD packetsize = (buff[buff[0x16] + 0x18] << 8) | buff[buff[0x16] + 0x19];
@@ -271,13 +271,13 @@ bool CVobSubFile::Copy(CVobSubFile& vsf)
size = std::min(sizeleft, 2048 - hsize);
if (size != sizeleft) {
- while (vsf.m_sub.Read(buff, 2048)) {
+ while ((uRead = vsf.m_sub.Read(buff, 2048)) > 0) {
if (!(buff[0x15] & 0x80) && buff[buff[0x16] + 0x17] == (i | 0x20)) {
break;
}
}
- m_sub.Write(buff, 2048);
+ m_sub.Write(buff, uRead);
}
}
@@ -598,12 +598,17 @@ bool CVobSubFile::ReadIdx(CString fn, int& ver)
}
m_nLang = (iLang < 0 && size_t(iLang) >= m_langs.size()) ? SIZE_T_ERROR : size_t(iLang);
} else if (entry == _T("palette")) {
+ // The assert guarantees that the shortcut we use will work as expected
+ static_assert(sizeof(RGBQUAD) == 4, "Packing error");
+#pragma warning(push)
+#pragma warning(disable: 4477)
if (_stscanf_s(str, _T("%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x"),
&m_orgpal[0], &m_orgpal[1], &m_orgpal[2], &m_orgpal[3],
&m_orgpal[4], &m_orgpal[5], &m_orgpal[6], &m_orgpal[7],
&m_orgpal[8], &m_orgpal[9], &m_orgpal[10], &m_orgpal[11],
&m_orgpal[12], &m_orgpal[13], &m_orgpal[14], &m_orgpal[15]
) != 16) {
+#pragma warning(pop)
bError = true;
}
} else if (entry == _T("custom colors")) {
@@ -639,7 +644,10 @@ bool CVobSubFile::ReadIdx(CString fn, int& ver)
str = str.Mid(i + (int)_tcslen(_T("colors:")));
RGBQUAD pal[4];
+#pragma warning(push)
+#pragma warning(disable: 4477)
if (_stscanf_s(str, _T("%x,%x,%x,%x"), &pal[0], &pal[1], &pal[2], &pal[3]) != 4) {
+#pragma warning(pop)
bError = true;
continue;
}
@@ -648,7 +656,7 @@ bool CVobSubFile::ReadIdx(CString fn, int& ver)
} else if (entry == _T("id")) {
str.MakeLower();
- int langid = ((str[0] & 0xff) << 8) | (str[1] & 0xff);
+ WORD langid = ((str[0] & 0xff) << 8) | (str[1] & 0xff);
i = str.Find(_T("index:"));
if (i < 0) {
@@ -690,8 +698,8 @@ bool CVobSubFile::ReadIdx(CString fn, int& ver)
} else if (id >= 0 && entry == _T("timestamp")) {
SubPos sb;
- sb.vobid = vobid;
- sb.cellid = cellid;
+ sb.vobid = (char)vobid;
+ sb.cellid = (char)cellid;
sb.celltimestamp = celltimestamp;
sb.bValid = true;
@@ -1143,13 +1151,15 @@ BYTE* CVobSubFile::GetPacket(size_t idx, size_t& packetSize, size_t& dataSize, s
break;
}
+ ASSERT(nLang < BYTE_MAX);
+
// let's check a few things to make sure...
if (*(DWORD*)&buff[0x00] != 0xba010000
|| *(DWORD*)&buff[0x0e] != 0xbd010000
|| !(buff[0x15] & 0x80)
|| (buff[0x17] & 0xf0) != 0x20
|| (buff[buff[0x16] + 0x17] & 0xe0) != 0x20
- || (buff[buff[0x16] + 0x17] & 0x1f) != nLang) {
+ || (buff[buff[0x16] + 0x17] & 0x1f) != (BYTE)nLang) {
break;
}
@@ -1225,14 +1235,11 @@ bool CVobSubFile::GetFrame(size_t idx, size_t nLang /*= SIZE_T_ERROR*/, REFERENC
}
m_img.start = sp[idx].start;
- m_img.delay = idx + 1 < sp.GetCount() ? sp[idx + 1].start - sp[idx].start : 3000;
bool ret = m_img.Decode(buff, packetSize, dataSize, rt >= 0 ? int(rt - sp[idx].start) : INT_MAX,
m_bCustomPal, m_tridx, m_orgpal, m_cuspal, true);
- if (idx + 1 < sp.GetCount()) {
- m_img.delay = std::min(m_img.delay, sp[idx + 1].start - m_img.start);
- }
+ m_img.delay = sp[idx].stop - sp[idx].start;
if (!ret) {
return false;
@@ -1360,7 +1367,7 @@ STDMETHODIMP CVobSubFile::Render(SubPicDesc& spd, REFERENCE_TIME rt, double fps,
rt /= 10000;
- if (!GetFrame(GetFrameIdxByTimeStamp(rt), -1, rt)) {
+ if (!GetFrame(GetFrameIdxByTimeStamp(rt), SIZE_T_ERROR, rt)) {
return E_FAIL;
}
@@ -1459,7 +1466,7 @@ STDMETHODIMP CVobSubFile::SetStream(int iStream)
STDMETHODIMP CVobSubFile::Reload()
{
- if (!FileExists(m_title + _T(".idx"))) {
+ if (!PathUtils::Exists(m_title + _T(".idx"))) {
return E_FAIL;
}
return !m_title.IsEmpty() && Open(m_title) ? S_OK : E_FAIL;
@@ -1496,8 +1503,8 @@ static void PixelAtBiLinear(RGBQUAD& c, int x, int y, CVobSubImage& src)
+ c21.rgbGreen * v2u1 + c22.rgbGreen * v2u2) >> 24;
c.rgbBlue = (c11.rgbBlue * v1u1 + c12.rgbBlue * v1u2
+ c21.rgbBlue * v2u1 + c22.rgbBlue * v2u2) >> 24;
- c.rgbReserved = (v1u1 + v1u2
- + v2u1 + v2u2) >> 16;
+ c.rgbReserved = BYTE((v1u1 + v1u2
+ + v2u1 + v2u2) >> 16);
}
static void StretchBlt(SubPicDesc& spd, CRect dstrect, CVobSubImage& src)
@@ -1817,7 +1824,7 @@ bool CVobSubFile::SaveWinSubMux(CString fn, int delay)
}
CString bmpfn;
- bmpfn.Format(_T("%s_%06u.bmp"), fn, i + 1);
+ bmpfn.Format(_T("%s_%06Iu.bmp"), fn, i + 1);
CString str;
str.Format(_T("%s\t%02d:%02d:%02d:%02d %02d:%02d:%02d:%02d\t%03d %03d %03d %03d %d %d %d %d\n"),
@@ -1941,7 +1948,7 @@ bool CVobSubFile::SaveScenarist(CString fn, int delay)
BITMAPINFOHEADER ihdr = {
sizeof(BITMAPINFOHEADER),
720, m_size.cy - 2, 1, 4, 0,
- 360 * (m_size.cy - 2),
+ DWORD(360 * (m_size.cy - 2)),
0, 0,
16, 4
};
@@ -1960,7 +1967,8 @@ bool CVobSubFile::SaveScenarist(CString fn, int delay)
BYTE colormap[16];
for (size_t i = 0; i < 16; i++) {
- int idx = 0, maxdif = 255 * 255 * 3 + 1;
+ BYTE idx = 0;
+ int maxdif = 255 * 255 * 3 + 1;
for (size_t j = 0; j < 16 && maxdif; j++) {
int rdif = pal[j].rgbRed - m_orgpal[i].rgbRed;
@@ -1970,7 +1978,7 @@ bool CVobSubFile::SaveScenarist(CString fn, int delay)
int dif = rdif * rdif + gdif * gdif + bdif * bdif;
if (dif < maxdif) {
maxdif = dif;
- idx = (int)j;
+ idx = (BYTE)j;
}
}
@@ -2010,7 +2018,7 @@ bool CVobSubFile::SaveScenarist(CString fn, int delay)
}
CString bmpfn;
- bmpfn.Format(_T("%s_%04u.bmp"), fn, i + 1);
+ bmpfn.Format(_T("%s_%04Iu.bmp"), fn, i + 1);
title = bmpfn.Mid(bmpfn.ReverseFind('/') + 1);
// E1, E2, P, Bg
@@ -2176,7 +2184,7 @@ bool CVobSubFile::SaveMaestro(CString fn, int delay)
BITMAPINFOHEADER ihdr = {
sizeof(BITMAPINFOHEADER),
720, m_size.cy - 2, 1, 4, 0,
- 360 * (m_size.cy - 2),
+ DWORD(360 * (m_size.cy - 2)),
0, 0,
16, 4
};
@@ -2240,7 +2248,7 @@ bool CVobSubFile::SaveMaestro(CString fn, int delay)
}
CString bmpfn;
- bmpfn.Format(_T("%s_%04u.bmp"), fn, i + 1);
+ bmpfn.Format(_T("%s_%04Iu.bmp"), fn, i + 1);
title = bmpfn.Mid(bmpfn.ReverseFind('/') + 1);
// E1, E2, P, Bg
@@ -2365,7 +2373,7 @@ void CVobSubStream::Open(CString name, BYTE* pData, int len)
m_name = name;
CAtlList<CString> lines;
- Explode(CString(CStringA((CHAR*)pData, len)), lines, '\n');
+ Explode(CString(CStringA((CHAR*)pData, len)), lines, _T('\n'));
while (lines.GetCount()) {
CAtlList<CString> sl;
Explode(lines.RemoveHead(), sl, ':', 2);
@@ -2397,10 +2405,10 @@ void CVobSubStream::Open(CString name, BYTE* pData, int len)
m_bAlign = sl.RemoveHead() == _T("ON");
CString hor = sl.GetHead(), ver = sl.GetTail();
m_alignhor = hor == _T("LEFT") ? 0 : hor == _T("CENTER") ? 1 : hor == _T("RIGHT") ? 2 : 1;
- m_alignver = ver == _T("TOP") ? 0 : ver == _T("CENTER") ? 1 : ver == _T("BOTTOM") ? 2 : 2;
+ m_alignver = ver == _T("TOP") ? 0 : ver == _T("CENTER") ? 1 : /*ver == _T("BOTTOM") ? 2 :*/ 2;
}
} else if (key == _T("fade in/out")) {
- _stscanf_s(value, _T("%d%, %d%"), &m_fadein, &m_fadeout);
+ _stscanf_s(value, _T("%d, %d"), &m_fadein, &m_fadeout);
} else if (key == _T("time offset")) {
m_toff = _tcstol(value, nullptr, 10);
} else if (key == _T("forced subs")) {
diff --git a/src/Subtitles/VobSubFile.h b/src/Subtitles/VobSubFile.h
index b3fe01a45..b1aea10e1 100644
--- a/src/Subtitles/VobSubFile.h
+++ b/src/Subtitles/VobSubFile.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -94,7 +94,7 @@ public:
};
struct SubLang {
- int id = 0;
+ WORD id = 0;
CString name, alt;
CAtlArray<SubPos> subpos;
};
@@ -163,6 +163,7 @@ public:
STDMETHODIMP_(int) GetStream();
STDMETHODIMP SetStream(int iStream);
STDMETHODIMP Reload();
+ STDMETHODIMP SetSourceTargetInfo(CString yuvMatrix, int targetBlackLevel, int targetWhiteLevel) { return E_NOTIMPL; };
};
class __declspec(uuid("D7FBFB45-2D13-494F-9B3D-FFC9557D5C45"))
@@ -208,4 +209,5 @@ public:
STDMETHODIMP_(int) GetStream();
STDMETHODIMP SetStream(int iStream);
STDMETHODIMP Reload() { return E_NOTIMPL; }
+ STDMETHODIMP SetSourceTargetInfo(CString yuvMatrix, int targetBlackLevel, int targetWhiteLevel) { return E_NOTIMPL; }
};
diff --git a/src/Subtitles/VobSubFileRipper.cpp b/src/Subtitles/VobSubFileRipper.cpp
index 031671dd4..f79ab0fa9 100644
--- a/src/Subtitles/VobSubFileRipper.cpp
+++ b/src/Subtitles/VobSubFileRipper.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -417,6 +417,8 @@ bool CVobSubFileRipper::LoadVob(CString fn)
return true;
}
+#pragma warning(push)
+#pragma warning(disable: 4702)
DWORD CVobSubFileRipper::ThreadProc()
{
SetThreadPriority(m_hThread, THREAD_PRIORITY_BELOW_NORMAL);
@@ -449,8 +451,8 @@ DWORD CVobSubFileRipper::ThreadProc()
m_bBreakThread = false;
m_bThreadActive = false;
}
-
- return 1;
+ UNREACHABLE_CODE(); // we should only exit via CMD_EXIT
+#pragma warning(pop)
}
static int SubPosSortProc(const void* e1, const void* e2)
@@ -967,7 +969,7 @@ STDMETHODIMP CVobSubFileRipper::LoadParamFile(CString fn)
if (line.Find('v') >= 0) {
int vob = 0, cell = 0;
- line += ' ';
+ line += _T(' ');
TCHAR* s = (LPTSTR)(LPCTSTR)line;
TCHAR* e = s + line.GetLength();
@@ -1013,7 +1015,7 @@ STDMETHODIMP CVobSubFileRipper::LoadParamFile(CString fn)
m_rd.bClosedCaption = true;
phase = P_OPTIONS;
} else {
- line += ' ';
+ line += _T(' ');
while (!line.IsEmpty()) {
int n = line.Find(_T(" "));
@@ -1024,18 +1026,16 @@ STDMETHODIMP CVobSubFileRipper::LoadParamFile(CString fn)
line.TrimLeft();
n = 0;
-
- int langnum;
-
if (_istdigit(lang[0])) {
+ int langnum;
n = _stscanf_s(lang, _T("%d"), &langnum);
if (n != 1) {
break;
}
- m_rd.selids[langnum] = true;
+ m_rd.selids[(BYTE)langnum] = true;
} else if (_istalpha(lang[0])) {
- n = _stscanf_s(lang, _T("%s"), langid, _countof(langid));
+ n = _stscanf_s(lang, _T("%s"), langid, UINT(_countof(langid)));
if (n != 1) {
break;
}
@@ -1045,7 +1045,8 @@ STDMETHODIMP CVobSubFileRipper::LoadParamFile(CString fn)
if (id == 'cc') {
m_rd.bClosedCaption = true;
} else {
- m_rd.selids[id] = true;
+ ASSERT(id <= BYTE_MAX);
+ m_rd.selids[(BYTE)id] = true;
}
} else {
break;
diff --git a/src/Subtitles/VobSubImage.cpp b/src/Subtitles/VobSubImage.cpp
index e0582b203..4229b0f0f 100644
--- a/src/Subtitles/VobSubImage.cpp
+++ b/src/Subtitles/VobSubImage.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,28 +22,28 @@
#include "stdafx.h"
#include "VobSubImage.h"
#include "RTS.h"
-#include <math.h>
+#include <cmath>
#include <algorithm>
CVobSubImage::CVobSubImage()
- : nLang(SIZE_T_ERROR)
- , nIdx(SIZE_T_ERROR)
- , bForced(false)
- , bAnimated(false)
- , tCurrent(-1)
- , start(0)
- , delay(0)
- , rect(CRect(0, 0, 0, 0))
- , lpPixels(nullptr)
+ : org(CSize(0, 0))
, lpTemp1(nullptr)
, lpTemp2(nullptr)
- , org(CSize(0, 0))
, nPlane(0)
, bCustomPal(false)
, bAligned(true)
, tridx(0)
, orgpal(nullptr)
, cuspal(nullptr)
+ , nLang(SIZE_T_ERROR)
+ , nIdx(SIZE_T_ERROR)
+ , bForced(false)
+ , bAnimated(false)
+ , tCurrent(-1)
+ , start(0)
+ , delay(0)
+ , rect(CRect(0, 0, 0, 0))
+ , lpPixels(nullptr)
{
ZeroMemory(&pal, sizeof(pal));
}
@@ -97,13 +97,13 @@ void CVobSubImage::Free()
lpPixels = nullptr;
}
-bool CVobSubImage::Decode(BYTE* lpData, size_t packetSize, size_t dataSize, int t,
- bool bCustomPal,
- int tridx,
- RGBQUAD* orgpal /*[16]*/, RGBQUAD* cuspal /*[4]*/,
- bool bTrim)
+bool CVobSubImage::Decode(BYTE* _lpData, size_t _packetSize, size_t _dataSize, int _t,
+ bool _bCustomPal,
+ int _tridx,
+ RGBQUAD* _orgpal /*[16]*/, RGBQUAD* _cuspal /*[4]*/,
+ bool _bTrim)
{
- GetPacketInfo(lpData, packetSize, dataSize, t);
+ GetPacketInfo(_lpData, _packetSize, _dataSize, _t);
if (!Alloc(rect.Width(), rect.Height())) {
return false;
@@ -114,22 +114,22 @@ bool CVobSubImage::Decode(BYTE* lpData, size_t packetSize, size_t dataSize, int
nPlane = 0;
bAligned = true;
- this->bCustomPal = bCustomPal;
- this->orgpal = orgpal;
- this->tridx = tridx;
- this->cuspal = cuspal;
+ bCustomPal = _bCustomPal;
+ orgpal = _orgpal;
+ tridx = _tridx;
+ cuspal = _cuspal;
CPoint p = rect.TopLeft();
- size_t end[] = { nOffset[1], dataSize };
+ size_t end[] = { nOffset[1], _dataSize };
while (nOffset[nPlane] < end[nPlane]) {
DWORD code;
- if ((code = GetNibble(lpData)) >= 0x4
- || (code = (code << 4) | GetNibble(lpData)) >= 0x10
- || (code = (code << 4) | GetNibble(lpData)) >= 0x40
- || (code = (code << 4) | GetNibble(lpData)) >= 0x100) {
+ if ((code = GetNibble(_lpData)) >= 0x4
+ || (code = (code << 4) | GetNibble(_lpData)) >= 0x10
+ || (code = (code << 4) | GetNibble(_lpData)) >= 0x40
+ || (code = (code << 4) | GetNibble(_lpData)) >= 0x100) {
DrawPixels(p, code >> 2, code & 3);
if ((p.x += code >> 2) < rect.right) {
continue;
@@ -139,7 +139,7 @@ bool CVobSubImage::Decode(BYTE* lpData, size_t packetSize, size_t dataSize, int
DrawPixels(p, rect.right - p.x, code & 3);
if (!bAligned) {
- GetNibble(lpData); // align to byte
+ GetNibble(_lpData); // align to byte
}
p.x = rect.left;
@@ -149,7 +149,7 @@ bool CVobSubImage::Decode(BYTE* lpData, size_t packetSize, size_t dataSize, int
rect.bottom = std::min(p.y, rect.bottom);
- if (bTrim) {
+ if (_bTrim) {
TrimSubImage();
}
@@ -161,7 +161,7 @@ void CVobSubImage::GetPacketInfo(const BYTE* lpData, size_t packetSize, size_t d
// delay = 0;
size_t i, nextctrlblk = dataSize;
- WORD pal = 0, tr = 0;
+ WORD _pal = 0, tr = 0;
WORD nPal = 0, nTr = 0;
do {
@@ -229,7 +229,7 @@ void CVobSubImage::GetPacketInfo(const BYTE* lpData, size_t packetSize, size_t d
delay = tCurrent;
break;
case 0x03:
- pal = (lpData[i] << 8) | lpData[i + 1];
+ _pal = (lpData[i] << 8) | lpData[i + 1];
i += 2;
nPal++;
break;
@@ -263,7 +263,7 @@ void CVobSubImage::GetPacketInfo(const BYTE* lpData, size_t packetSize, size_t d
} while (i <= nextctrlblk && i < packetSize);
for (i = 0; i < 4; i++) {
- this->pal[i].pal = (pal >> (i << 2)) & 0xf;
+ this->pal[i].pal = (_pal >> (i << 2)) & 0xf;
this->pal[i].tr = (tr >> (i << 2)) & 0xf;
}
@@ -902,13 +902,13 @@ static bool FitBezierVH(COutline& o, CPoint& p1, CPoint& p2)
return true;
}
-int CVobSubImage::GrabSegment(int start, const COutline& o, COutline& ret)
+int CVobSubImage::GrabSegment(int _start, const COutline& o, COutline& ret)
{
ret.RemoveAll();
int len = int(o.pa.GetCount());
- int cur = (start) % len, first = -1, last = -1;
+ int cur = (_start) % len, first = -1, last = -1;
int lastDir = 0;
for (ptrdiff_t i = 0; i < len; i++) {
@@ -923,19 +923,19 @@ int CVobSubImage::GrabSegment(int start, const COutline& o, COutline& ret)
}
if (lastDir == o.da[cur]) {
- CPoint startp = o.pa[first] + o.pa[start];
+ CPoint startp = o.pa[first] + o.pa[_start];
startp.x >>= 1;
startp.y >>= 1;
CPoint endp = o.pa[last] + o.pa[cur];
endp.x >>= 1;
endp.y >>= 1;
- if (first < start) {
+ if (first < _start) {
first += len;
}
- start = ((start + first) >> 1) + 1;
- if (start >= len) {
- start -= len;
+ _start = ((_start + first) >> 1) + 1;
+ if (_start >= len) {
+ _start -= len;
}
if (cur < last) {
cur += len;
@@ -947,12 +947,12 @@ int CVobSubImage::GrabSegment(int start, const COutline& o, COutline& ret)
ret.Add(startp, 0);
- while (start != cur) {
- ret.Add(o.pa[start], o.da[start]);
+ while (_start != cur) {
+ ret.Add(o.pa[_start], o.da[_start]);
- start++;
- if (start >= len) {
- start -= len;
+ _start++;
+ if (_start >= len) {
+ _start -= len;
}
}
@@ -967,7 +967,7 @@ int CVobSubImage::GrabSegment(int start, const COutline& o, COutline& ret)
ASSERT(0);
- return start;
+ return _start;
}
void CVobSubImage::SplitOutline(const COutline& o, COutline& o1, COutline& o2)
@@ -990,8 +990,8 @@ void CVobSubImage::SplitOutline(const COutline& o, COutline& o1, COutline& o2)
}
}
- size_t maxlen = 0, maxidx = -1;
- size_t maxlen2 = 0, maxidx2 = -1;
+ size_t maxlen = 0, maxidx = SIZE_T_ERROR;
+ size_t maxlen2 = 0, maxidx2 = SIZE_T_ERROR;
for (i = 0; i < la.GetCount(); i++) {
if (maxlen < la[i]) {
@@ -1005,6 +1005,8 @@ void CVobSubImage::SplitOutline(const COutline& o, COutline& o1, COutline& o2)
}
}
+ ASSERT(maxidx != SIZE_T_ERROR && maxidx2 != SIZE_T_ERROR);
+
if (maxlen == maxlen2) {
maxidx = maxidx2; // if equal choose the inner section
}
@@ -1078,8 +1080,8 @@ void CVobSubImage::AddSegment(COutline& o, CAtlArray<BYTE>& pathTypes, CAtlArray
return;
}
- int start, end;
- if (FitLine(o, start, end)) { // b-spline, line, b-spline
+ int _start, _end;
+ if (FitLine(o, _start, _end)) { // b-spline, line, b-spline
pathTypes.Add(PT_MOVETONC);
pathPoints.Add(o.pa[0] + (o.pa[0] - o.pa[1]));
@@ -1089,26 +1091,26 @@ void CVobSubImage::AddSegment(COutline& o, CAtlArray<BYTE>& pathTypes, CAtlArray
pathTypes.Add(PT_BSPLINETO);
pathPoints.Add(o.pa[1]);
- CPoint p[4], pp, d = o.pa[end] - o.pa[start];
+ CPoint p[4], pp, d = o.pa[_end] - o.pa[_start];
double l = sqrt((double)(d.x * d.x + d.y * d.y)), dx = 1.0 * d.x / l, dy = 1.0 * d.y / l;
- pp = o.pa[start] - o.pa[start - 1];
+ pp = o.pa[_start] - o.pa[_start - 1];
double l1 = abs(pp.x) + abs(pp.y);
- pp = o.pa[end] - o.pa[end + 1];
+ pp = o.pa[_end] - o.pa[_end + 1];
double l2 = abs(pp.x) + abs(pp.y);
- p[0] = CPoint((int)(1.0 * o.pa[start].x + dx * l1 + 0.5), (int)(1.0 * o.pa[start].y + dy * l1 + 0.5));
- p[1] = CPoint((int)(1.0 * o.pa[start].x + dx * l1 * 2 + 0.5), (int)(1.0 * o.pa[start].y + dy * l1 * 2 + 0.5));
- p[2] = CPoint((int)(1.0 * o.pa[end].x - dx * l2 * 2 + 0.5), (int)(1.0 * o.pa[end].y - dy * l2 * 2 + 0.5));
- p[3] = CPoint((int)(1.0 * o.pa[end].x - dx * l2 + 0.5), (int)(1.0 * o.pa[end].y - dy * l2 + 0.5));
+ p[0] = CPoint((int)(1.0 * o.pa[_start].x + dx * l1 + 0.5), (int)(1.0 * o.pa[_start].y + dy * l1 + 0.5));
+ p[1] = CPoint((int)(1.0 * o.pa[_start].x + dx * l1 * 2 + 0.5), (int)(1.0 * o.pa[_start].y + dy * l1 * 2 + 0.5));
+ p[2] = CPoint((int)(1.0 * o.pa[_end].x - dx * l2 * 2 + 0.5), (int)(1.0 * o.pa[_end].y - dy * l2 * 2 + 0.5));
+ p[3] = CPoint((int)(1.0 * o.pa[_end].x - dx * l2 + 0.5), (int)(1.0 * o.pa[_end].y - dy * l2 + 0.5));
- if (start == 1) {
+ if (_start == 1) {
pathTypes.Add(PT_BSPLINETO);
pathPoints.Add(p[0]);
} else {
pathTypes.Add(PT_BSPLINETO);
pathPoints.Add(o.pa[2]);
- for (ptrdiff_t k = 3; k <= start; k++) {
+ for (ptrdiff_t k = 3; k <= _start; k++) {
pathTypes.Add(PT_BSPLINEPATCHTO);
pathPoints.Add(o.pa[k]);
}
@@ -1132,7 +1134,7 @@ void CVobSubImage::AddSegment(COutline& o, CAtlArray<BYTE>& pathTypes, CAtlArray
pathTypes.Add(PT_BSPLINEPATCHTO);
pathPoints.Add(p[3]);
- for (i = end; i < len; i++) {
+ for (i = _end; i < len; i++) {
pathTypes.Add(PT_BSPLINEPATCHTO);
pathPoints.Add(o.pa[i]);
}
diff --git a/src/Subtitles/stdafx.h b/src/Subtitles/stdafx.h
index b6cb795fc..a2cc7e752 100644
--- a/src/Subtitles/stdafx.h
+++ b/src/Subtitles/stdafx.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -35,4 +35,8 @@
#include "../DSUtil/DSUtil.h"
#include <algorithm>
+#include <array>
#include <vector>
+#include <list>
+#include <memory>
+#include <thread>
diff --git a/src/YASM.bat b/src/YASM.bat
index dde5bc0a1..451fe036d 100755
--- a/src/YASM.bat
+++ b/src/YASM.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2012-2013 see Authors.txt
+REM (C) 2012-2013, 2015 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -17,12 +17,9 @@ REM You should have received a copy of the GNU General Public License
REM along with this program. If not, see <http://www.gnu.org/licenses/>.
-IF EXIST "%~dp0..\build.user.bat" (
- CALL "%~dp0..\build.user.bat"
-) ELSE (
- IF DEFINED MSYS SET MPCHC_MSYS=%MSYS%
-)
-
-SET PATH=%PATH%;%MPCHC_MSYS%\bin
+CALL "%~dp0..\common.bat" :SubSetPath
+IF %ERRORLEVEL% NEQ 0 EXIT /B 1
+CALL "%~dp0..\common.bat" :SubDoesExist yasm.exe
+IF %ERRORLEVEL% NEQ 0 EXIT /B 1
yasm.exe %*
diff --git a/src/common-3rd-party.props b/src/common-3rd-party.props
new file mode 100644
index 000000000..82203efb6
--- /dev/null
+++ b/src/common-3rd-party.props
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <EnablePREfast>false</EnablePREfast>
+ <WarningLevel>TurnOffAllWarnings</WarningLevel>
+ </ClCompile>
+ </ItemDefinitionGroup>
+</Project>
diff --git a/src/common.props b/src/common.props
index 3c0604aa8..425131ec9 100644
--- a/src/common.props
+++ b/src/common.props
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IntDir>$(SolutionDir)bin\obj\$(Configuration)_$(PlatformName)\$(ProjectName)\</IntDir>
<OutDir>$(SolutionDir)bin\lib\$(Configuration)_$(PlatformName)\</OutDir>
@@ -7,12 +7,12 @@
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">$(SolutionDir)bin\Filters_x64_Debug\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">$(SolutionDir)bin\Filters_x86\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">$(SolutionDir)bin\Filters_x64\</OutDir>
- <LinkIncremental Condition="'$(Configuration)'=='Debug' Or '$(Configuration)'=='Debug Filter' Or '$(Configuration)'=='Debug Lite'">true</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)'=='Release' Or '$(Configuration)'=='Release Filter' Or '$(Configuration)'=='Release Lite'">false</LinkIncremental>
+ <LinkIncremental Condition="$(Configuration.Contains('Debug'))">true</LinkIncremental>
+ <LinkIncremental Condition="$(Configuration.Contains('Release'))">false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
- <AdditionalOptions>/w34701 /w34706 /d2Zi+ %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions>/w34701 /w34706 /Zo /std:c++latest /Zc:throwingNew /Zc:rvalueCast /Gw %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions Condition="'$(ANALYZE)'=='true'">/wd4005 /wd6031 /wd6246 /wd6309 /wd6387 /wd28204 %(AdditionalOptions)</AdditionalOptions>
<EnablePREfast Condition="'$(ANALYZE)'=='true'">true</EnablePREfast>
<BufferSecurityCheck>true</BufferSecurityCheck>
@@ -26,7 +26,7 @@
<PreprocessorDefinitions Condition="'$(Configuration)'=='Debug Filter' Or '$(Configuration)'=='Release Filter'">STANDALONE_FILTER;_USRDLL;_AFX_NO_MFC_CONTROLS_IN_DIALOGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Platform)'=='Win32'">WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Platform)'=='x64'">_WIN64;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>Level3</WarningLevel>
+ <WarningLevel>Level4</WarningLevel>
</ClCompile>
<Lib>
<TargetMachine Condition="'$(Platform)'=='Win32'">MachineX86</TargetMachine>
@@ -34,11 +34,12 @@
</Lib>
<Link>
<DataExecutionPrevention>true</DataExecutionPrevention>
- <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateDebugInformation>Debug</GenerateDebugInformation>
<RandomizedBaseAddress>true</RandomizedBaseAddress>
<SubSystem>Windows</SubSystem>
<TargetMachine Condition="'$(Platform)'=='Win32'">MachineX86</TargetMachine>
<TargetMachine Condition="'$(Platform)'=='x64'">MachineX64</TargetMachine>
+ <AdditionalDependencies>notelemetry.obj;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<ResourceCompile>
<Culture>0x0409</Culture>
@@ -46,7 +47,7 @@
<PreprocessorDefinitions Condition="'$(Platform)'=='x64'">_WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug' Or '$(Configuration)'=='Debug Filter' Or '$(Configuration)'=='Debug Lite'">
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Debug'))">
<ClCompile>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<DebugInformationFormat Condition="'$(Platform)'=='Win32'">EditAndContinue</DebugInformationFormat>
@@ -60,12 +61,14 @@
</ResourceCompile>
<Link>
<ImageHasSafeExceptionHandlers Condition="'$(Platform)'=='Win32'">false</ImageHasSafeExceptionHandlers>
+ <GenerateDebugInformation>DebugFastLink</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)'=='Release' Or '$(Configuration)'=='Release Filter' Or '$(Configuration)'=='Release Lite'">
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Release'))">
<ClCompile>
+ <AdditionalOptions>/Zc:inline %(AdditionalOptions)</AdditionalOptions>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <EnableEnhancedInstructionSet Condition="'$(Platform)'=='Win32'">StreamingSIMDExtensions</EnableEnhancedInstructionSet>
+ <EnableEnhancedInstructionSet Condition="'$(Platform)'=='Win32'">StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
@@ -80,10 +83,9 @@
<LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
</Lib>
<Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <AdditionalOptions>/OPT:ICF=3 %(AdditionalOptions)</AdditionalOptions>
<LargeAddressAware Condition="'$(Platform)'=='Win32'">true</LargeAddressAware>
- <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
- <MergeSections>.rdata=.text</MergeSections>
+ <LinkTimeCodeGeneration>UseFastLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<OptimizeReferences>true</OptimizeReferences>
<SetChecksum>true</SetChecksum>
</Link>
@@ -91,4 +93,4 @@
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/src/filters/FilterApp.cpp b/src/filters/FilterApp.cpp
index a9e882a3f..b7a2c899f 100644
--- a/src/filters/FilterApp.cpp
+++ b/src/filters/FilterApp.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,7 +21,6 @@
#include "stdafx.h"
#include "FilterApp.h"
-#include "../MathLibFix/MathLibFix.h"
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
@@ -35,8 +34,6 @@ BOOL CFilterApp::InitInstance()
return FALSE;
}
- WorkAroundMathLibraryBug();
-
SetRegistryKey(_T("Gabest"));
DllEntryPoint(AfxGetInstanceHandle(), DLL_PROCESS_ATTACH, 0);
diff --git a/src/filters/Filters.h b/src/filters/Filters.h
index 2ca0a5d13..a41b41be8 100644
--- a/src/filters/Filters.h
+++ b/src/filters/Filters.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -29,7 +29,6 @@
#include "reader/CDDAReader/CDDAReader.h"
#include "reader/CDXAReader/CDXAReader.h"
#include "reader/VTSReader/VTSReader.h"
-#include "renderer/MpcAudioRenderer/MpcAudioRenderer.h"
#include "renderer/SyncClock/SyncClock.h"
#include "source/SubtitleSource/SubtitleSource.h"
#include "switcher/AudioSwitcher/AudioSwitcher.h"
diff --git a/src/filters/Filters.vcxproj b/src/filters/Filters.vcxproj
index 1c82afa6b..44fa3c0e5 100644
--- a/src/filters/Filters.vcxproj
+++ b/src/filters/Filters.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,44 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -108,8 +61,9 @@
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="..\MathLibFix\MathLibFix.vcxproj">
- <Project>{fc9fc17f-70bf-4aca-8285-c24d1889bacb}</Project>
+ <ProjectReference Include="..\..\build\BuildConfig.vcxproj">
+ <Project>{981574ae-5a5e-4f27-bdf1-1b841e374cff}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\thirdparty\BaseClasses\BaseClasses.vcxproj">
<Project>{e8a3f6fa-ae1c-4c8e-a0b6-9c8480324eaa}</Project>
diff --git a/src/filters/Filters.vcxproj.filters b/src/filters/Filters.vcxproj.filters
index 07513538f..d5e04f352 100644
--- a/src/filters/Filters.vcxproj.filters
+++ b/src/filters/Filters.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{f8b5bbc2-2fe8-4b4f-bc46-236e4ad3d92d}</UniqueIdentifier>
diff --git a/src/filters/PinInfoWnd.cpp b/src/filters/PinInfoWnd.cpp
index 8717e2ffa..6e92daa78 100644
--- a/src/filters/PinInfoWnd.cpp
+++ b/src/filters/PinInfoWnd.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,8 @@
#include "stdafx.h"
#include "PinInfoWnd.h"
#include "../DSUtil/DSUtil.h"
+#include "../mpc-hc/DpiHelper.h"
+#include "../DSUtil/MediaTypeEx.h"
//
// CPinInfoWnd
@@ -74,17 +76,23 @@ static LRESULT CALLBACK ControlProc(HWND control, UINT message, WPARAM wParam, L
bool CPinInfoWnd::OnActivate()
{
- DWORD dwStyle = WS_VISIBLE | WS_CHILD | WS_TABSTOP;
- CPoint p(10, 10);
+ m_dpi.Override(GetSafeHwnd());
- m_pin_static.Create(_T("Pin:"), dwStyle, CRect(p + CPoint(0, 3), CSize(30, m_fontheight)), this);
- m_pin_combo.Create(dwStyle | CBS_DROPDOWNLIST, CRect(p + CPoint(30, 0), CSize(450, 200)), this, IDC_PP_COMBO1);
+ DWORD dwStyle = WS_VISIBLE | WS_CHILD | WS_TABSTOP;
+ CPoint p(m_dpi.ScaleX(10), m_dpi.ScaleY(10));
+
+ m_pin_static.Create(_T("Pin:"), dwStyle,
+ CRect(p + CPoint(m_dpi.ScaleX(0), m_dpi.ScaleY(3)), CSize(m_dpi.ScaleX(30), m_fontheight)),
+ this);
+ m_pin_combo.Create(dwStyle | CBS_DROPDOWNLIST,
+ CRect(p + CPoint(m_dpi.ScaleX(30), m_dpi.ScaleY(0)), CSize(m_dpi.ScaleX(520), m_dpi.ScaleY(200))),
+ this, IDC_PP_COMBO1);
BeginEnumPins(m_pBF, pEP, pPin) {
CPinInfo pi;
if (FAILED(pPin->QueryPinInfo(&pi))) {
continue;
}
- CString str = CString(pi.achName);
+ CString str(pi.achName);
if (!str.Find(_T("Apple"))) {
str.Delete(0, 1);
}
@@ -99,7 +107,7 @@ bool CPinInfoWnd::OnActivate()
EndEnumPins;
m_pin_combo.SetCurSel(0);
- p.y += m_fontheight + 20;
+ p.y += m_fontheight + m_dpi.ScaleY(20);
m_info_edit.CreateEx(WS_EX_CLIENTEDGE,
_T("EDIT"),
@@ -109,14 +117,13 @@ bool CPinInfoWnd::OnActivate()
WS_VSCROLL |
WS_HSCROLL |
ES_MULTILINE |
- ES_AUTOHSCROLL |
ES_READONLY,
- CRect(p, CSize(480, m_fontheight * 20)),
+ CRect(p, CSize(m_dpi.ScaleX(550), m_fontheight * 30)),
this,
IDC_PP_EDIT1);
m_info_edit.SetLimitText(60000);
- OnCbnSelchangeCombo1();
+ OnSelectedPinChange();
for (CWnd* pWnd = GetWindow(GW_CHILD); pWnd; pWnd = pWnd->GetNextWindow()) {
pWnd->SetFont(&m_font, FALSE);
@@ -151,7 +158,7 @@ BOOL CPinInfoWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT*
}
BEGIN_MESSAGE_MAP(CPinInfoWnd, CInternalPropertyPageWnd)
- ON_CBN_SELCHANGE(IDC_PP_COMBO1, OnCbnSelchangeCombo1)
+ ON_CBN_SELCHANGE(IDC_PP_COMBO1, OnSelectedPinChange)
END_MESSAGE_MAP()
void CPinInfoWnd::AddLine(CString str)
@@ -162,7 +169,7 @@ void CPinInfoWnd::AddLine(CString str)
m_info_edit.ReplaceSel(str);
}
-void CPinInfoWnd::OnCbnSelchangeCombo1()
+void CPinInfoWnd::OnSelectedPinChange()
{
m_info_edit.SetWindowText(_T(""));
@@ -177,29 +184,27 @@ void CPinInfoWnd::OnCbnSelchangeCombo1()
}
CString str;
- PIN_INFO PinInfo;
+ CPinInfo pinInfo;
- if (SUCCEEDED(pPin->QueryPinInfo(&PinInfo))) {
+ if (SUCCEEDED(pPin->QueryPinInfo(&pinInfo))) {
CString strName;
- CLSID FilterClsid;
- FILTER_INFO FilterInfo;
+ CLSID filterClsid;
+ CFilterInfo filterInfo;
- if (SUCCEEDED(PinInfo.pFilter->QueryFilterInfo(&FilterInfo))) {
+ if (SUCCEEDED(pinInfo.pFilter->QueryFilterInfo(&filterInfo))) {
CRegKey key;
- PinInfo.pFilter->GetClassID(&FilterClsid);
+ pinInfo.pFilter->GetClassID(&filterClsid);
TCHAR buff[128];
ULONG len = _countof(buff);
- if (ERROR_SUCCESS == key.Open(HKEY_CLASSES_ROOT, _T("CLSID\\{083863F1-70DE-11D0-BD40-00A0C911CE86}\\Instance\\") + CStringFromGUID(FilterClsid), KEY_READ)
+ if (ERROR_SUCCESS == key.Open(HKEY_CLASSES_ROOT, _T("CLSID\\{083863F1-70DE-11D0-BD40-00A0C911CE86}\\Instance\\") + CStringFromGUID(filterClsid), KEY_READ)
&& ERROR_SUCCESS == key.QueryStringValue(_T("FriendlyName"), buff, &len)) {
strName = CString(buff);
} else {
- strName = FilterInfo.achName;
+ strName = filterInfo.achName;
}
- str.Format(_T("Filter : %s - CLSID : %s\n\n"), strName, CStringFromGUID(FilterClsid));
+ str.Format(_T("Filter : %s - CLSID : %s\n\n"), strName, CStringFromGUID(filterClsid));
AddLine(str);
- FilterInfo.pGraph->Release();
}
- PinInfo.pFilter->Release();
}
CMediaTypeEx cmt;
diff --git a/src/filters/PinInfoWnd.h b/src/filters/PinInfoWnd.h
index a92b50d30..6fa7ef346 100644
--- a/src/filters/PinInfoWnd.h
+++ b/src/filters/PinInfoWnd.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2012, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,7 +22,8 @@
#pragma once
#include "InternalPropertyPage.h"
-#include <afxcmn.h>
+#include "../mpc-hc/DpiHelper.h"
+#include <atlcoll.h>
class __declspec(uuid("A1EB391C-6089-4A87-9988-BE50872317D4"))
CPinInfoWnd : public CInternalPropertyPageWnd
@@ -38,6 +39,8 @@ class __declspec(uuid("A1EB391C-6089-4A87-9988-BE50872317D4"))
CComboBox m_pin_combo;
CEdit m_info_edit;
+ DpiHelper m_dpi;
+
void AddLine(CString str);
public:
@@ -50,11 +53,11 @@ public:
bool OnApply();
static LPCTSTR GetWindowTitle() { return _T("Pin Info"); }
- static CSize GetWindowSize() { return CSize(500, 300); }
+ static CSize GetWindowSize() { return { 0, 0 }; }
DECLARE_MESSAGE_MAP()
- void OnCbnSelchangeCombo1();
+ void OnSelectedPinChange();
protected:
virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
diff --git a/src/filters/muxer/BaseMuxer/BaseMuxer.cpp b/src/filters/muxer/BaseMuxer/BaseMuxer.cpp
index 33fc1662a..25368cbd0 100644
--- a/src/filters/muxer/BaseMuxer/BaseMuxer.cpp
+++ b/src/filters/muxer/BaseMuxer/BaseMuxer.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -114,6 +114,8 @@ HRESULT CBaseMuxerFilter::CreateRawOutput(CStringW name, CBaseMuxerRawOutputPin*
//
+#pragma warning(push)
+#pragma warning(disable: 4702)
DWORD CBaseMuxerFilter::ThreadProc()
{
SetThreadPriority(m_hThread, THREAD_PRIORITY_ABOVE_NORMAL);
@@ -158,7 +160,7 @@ DWORD CBaseMuxerFilter::ThreadProc()
continue;
}
- CAutoPtr<MuxerPacket> pPacket = GetPacket();
+ CAutoPtr<MuxerPacket> pPacket(GetPacket().Detach());
if (!pPacket) {
Sleep(1);
continue;
@@ -193,11 +195,8 @@ DWORD CBaseMuxerFilter::ThreadProc()
break;
}
}
-
- ASSERT(0); // this function should only return via CMD_EXIT
-
- CAMThread::m_hThread = nullptr;
- return 0;
+ UNREACHABLE_CODE(); // we should only exit via CMD_EXIT
+#pragma warning(pop)
}
void CBaseMuxerFilter::MuxHeaderInternal()
@@ -298,7 +297,7 @@ CAutoPtr<MuxerPacket> CBaseMuxerFilter::GetPacket()
CAutoPtr<MuxerPacket> pPacket;
if (pPinMin && i == 0) {
- pPacket = pPinMin->PopPacket();
+ pPacket.Attach(pPinMin->PopPacket().Detach());
} else {
pos = m_pActivePins.GetHeadPosition();
while (pos) {
diff --git a/src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj b/src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj
index ee23c91d5..0b774cefb 100644
--- a/src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj
+++ b/src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup>
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,44 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj.filters b/src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj.filters
index ef6d8c461..5b978fca9 100644
--- a/src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj.filters
+++ b/src/filters/muxer/BaseMuxer/BaseMuxer.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{b0dec0e2-a0fd-4979-b3c8-e2a8b7b8a7b9}</UniqueIdentifier>
diff --git a/src/filters/muxer/BaseMuxer/BaseMuxerInputPin.cpp b/src/filters/muxer/BaseMuxer/BaseMuxerInputPin.cpp
index 616dce32e..a55ade0e7 100644
--- a/src/filters/muxer/BaseMuxer/BaseMuxerInputPin.cpp
+++ b/src/filters/muxer/BaseMuxer/BaseMuxerInputPin.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,7 +24,6 @@
#include <MMReg.h>
#include "BaseMuxer.h"
#include "../../../DSUtil/DSUtil.h"
-#include <InitGuid.h>
#include "moreuuids.h"
#define MAXQUEUESIZE 100
@@ -35,11 +34,11 @@
CBaseMuxerInputPin::CBaseMuxerInputPin(LPCWSTR pName, CBaseFilter* pFilter, CCritSec* pLock, HRESULT* phr)
: CBaseInputPin(NAME("CBaseMuxerInputPin"), pFilter, pLock, phr, pName)
+ , m_rtMaxStart(_I64_MIN)
, m_rtDuration(0)
- , m_evAcceptPacket(TRUE)
- , m_iPacketIndex(0)
, m_fEOS(false)
- , m_rtMaxStart(_I64_MIN)
+ , m_iPacketIndex(0)
+ , m_evAcceptPacket(TRUE)
{
static int s_iID = 0;
m_iID = s_iID++;
@@ -95,7 +94,7 @@ CAutoPtr<MuxerPacket> CBaseMuxerInputPin::PopPacket()
CAutoLock cAutoLock(&m_csQueue);
if (m_queue.GetCount()) {
- pPacket = m_queue.RemoveHead();
+ pPacket.Attach(m_queue.RemoveHead().Detach());
}
if (m_queue.GetCount() < MAXQUEUESIZE) {
diff --git a/src/filters/muxer/BaseMuxer/BaseMuxerOutputPin.cpp b/src/filters/muxer/BaseMuxer/BaseMuxerOutputPin.cpp
index 6b38dd9e1..283478d30 100644
--- a/src/filters/muxer/BaseMuxer/BaseMuxerOutputPin.cpp
+++ b/src/filters/muxer/BaseMuxer/BaseMuxerOutputPin.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -27,8 +27,8 @@
#include <aviriff.h>
#include <atlpath.h>
-#include <InitGuid.h>
#include "moreuuids.h"
+#include "../DSUtil/ISOLang.h"
//
// CBaseMuxerOutputPin
@@ -244,8 +244,8 @@ void CBaseMuxerRawOutputPin::MuxPacket(const CMediaType& mt, const MuxerPacket*
int len = (DataSize + 7) & 0x1fff;
BYTE hdr[7] = {0xff, 0xf9};
- hdr[2] = (profile << 6) | (srate_idx << 2) | ((channels & 4) >> 2);
- hdr[3] = ((channels & 3) << 6) | (len >> 11);
+ hdr[2] = BYTE((profile << 6) | (srate_idx << 2) | ((channels & 4) >> 2));
+ hdr[3] = BYTE(((channels & 3) << 6) | (len >> 11));
hdr[4] = (len >> 3) & 0xff;
hdr[5] = ((len & 7) << 5) | 0x1f;
hdr[6] = 0xfc;
@@ -459,15 +459,15 @@ void CBaseMuxerRawOutputPin::MuxFooter(const CMediaType& mt)
fwrite(mt.Format() + si->dwOffset, mt.FormatLength() - si->dwOffset, 1, f);
- CString iso6391 = ISO6392To6391(si->IsoLang);
+ CString iso6391 = ISOLang::ISO6392To6391(si->IsoLang);
if (iso6391.IsEmpty()) {
iso6391 = _T("--");
}
- _ftprintf_s(f, _T("\nlangidx: 0\n\nid: %s, index: 0\n"), iso6391);
+ _ftprintf_s(f, _T("\nlangidx: 0\n\nid: %s, index: 0\n"), iso6391.GetString());
CString alt = CString(CStringW(si->TrackName));
if (!alt.IsEmpty()) {
- _ftprintf_s(f, _T("alt: %s\n"), alt);
+ _ftprintf_s(f, _T("alt: %s\n"), alt.GetString());
}
POSITION pos = m_idx.GetHeadPosition();
diff --git a/src/filters/muxer/BaseMuxer/BitStream.cpp b/src/filters/muxer/BaseMuxer/BitStream.cpp
index f1e6b8a04..c58c45d88 100644
--- a/src/filters/muxer/BaseMuxer/BitStream.cpp
+++ b/src/filters/muxer/BaseMuxer/BitStream.cpp
@@ -30,8 +30,8 @@ CBitStream::CBitStream(IStream* pStream, bool fThrowError)
: CUnknown(_T("CBitStream"), nullptr)
, m_pStream(pStream)
, m_fThrowError(fThrowError)
- , m_bitlen(0)
, m_bitbuff(0)
+ , m_bitlen(0)
{
ASSERT(m_pStream);
diff --git a/src/filters/muxer/BaseMuxer/stdafx.h b/src/filters/muxer/BaseMuxer/stdafx.h
index 32bc34c45..0ebf71a17 100644
--- a/src/filters/muxer/BaseMuxer/stdafx.h
+++ b/src/filters/muxer/BaseMuxer/stdafx.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -33,7 +33,5 @@
#include <atlbase.h>
#include <atlcoll.h>
-#include <dshow.h>
#include "BaseClasses/streams.h"
-#include <dvdmedia.h>
#include "../../../DSUtil/DSUtil.h"
diff --git a/src/filters/muxer/DSMMuxer/DSMMuxer.cpp b/src/filters/muxer/DSMMuxer/DSMMuxer.cpp
index 8c3584967..265bdd9bf 100644
--- a/src/filters/muxer/DSMMuxer/DSMMuxer.cpp
+++ b/src/filters/muxer/DSMMuxer/DSMMuxer.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -182,7 +182,7 @@ void CDSMMuxerFilter::MuxInit()
void CDSMMuxerFilter::MuxHeader(IBitStream* pBS)
{
CString muxer;
- muxer.Format(_T("DSM Muxer (%s)"), CString(__TIMESTAMP__));
+ muxer.Format(_T("DSM Muxer (%S)"), __TIMESTAMP__);
SetProperty(L"MUXR", CStringW(muxer));
SetProperty(L"DATE", CStringW(CTime::GetCurrentTime().FormatGmt(_T("%Y-%m-%d %H:%M:%S"))));
@@ -417,7 +417,7 @@ void CDSMMuxerFilter::IndexSyncPoint(const MuxerPacket* p, __int64 fp)
m_rtPrevSyncPoint = p->rtStart;
SyncPoint sp;
- sp.id = p->pPin->GetID();
+ sp.id = (BYTE)p->pPin->GetID();
sp.rtStart = p->rtStart;
sp.rtStop = p->pPin->IsSubtitleStream() ? p->rtStop : _I64_MAX;
sp.fp = fp;
diff --git a/src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj b/src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj
index d4c002c5c..3f17d32a7 100644
--- a/src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj
+++ b/src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,152 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>DSMMuxer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>DSMMuxer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>DSMMuxer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>DSMMuxer.def</ModuleDefinitionFile>
@@ -208,13 +92,13 @@
<ItemGroup>
<ClInclude Include="DSMMuxer.h" />
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="DSMMuxer.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj.filters b/src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj.filters
index db6d2a69b..23b96ae45 100644
--- a/src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj.filters
+++ b/src/filters/muxer/DSMMuxer/DSMMuxer.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{f2a0afa9-5123-40d6-9344-b1620d9ab714}</UniqueIdentifier>
diff --git a/src/filters/muxer/MatroskaMuxer/MatroskaFile.cpp b/src/filters/muxer/MatroskaMuxer/MatroskaFile.cpp
index 61a3b011a..f2c1e0d82 100644
--- a/src/filters/muxer/MatroskaMuxer/MatroskaFile.cpp
+++ b/src/filters/muxer/MatroskaMuxer/MatroskaFile.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -255,7 +255,7 @@ QWORD CLength::Size(bool fWithHeader)
QWORD len = 0;
for (int i = 1; i <= 8; i++) {
- if (!(m_len & (~((1i64 << (7 * i)) - 1))) && (m_len & ((1i64 << (7 * i)) - 1)) != ((1i64 << (7 * i)) - 1)) {
+ if (!(m_len & (~((QWORD(1) << (7 * i)) - 1))) && (m_len & ((QWORD(1) << (7 * i)) - 1)) != ((QWORD(1) << (7 * i)) - 1)) {
len += i;
break;
}
@@ -924,8 +924,14 @@ HRESULT Void::Write(IStream* pStream)
HeaderWrite(pStream);
BYTE buff[64];
memset(buff, 0x80, sizeof(buff));
- for (int len = (int)m_len; len > 0; len -= sizeof(buff)) {
- pStream->Write(buff, std::min<ULONG>(sizeof(buff), (ULONG)len), nullptr);
+ QWORD len = m_len;
+ for (; len >= sizeof(buff); len -= sizeof(buff)) {
+ pStream->Write(buff, sizeof(buff), nullptr);
}
+
+ if (len > 0) {
+ pStream->Write(buff, (ULONG)len, nullptr);
+ }
+
return S_OK;
}
diff --git a/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.cpp b/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.cpp
index 58ffdaf19..1d2946f62 100644
--- a/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.cpp
+++ b/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -156,7 +156,7 @@ CBasePin* CMatroskaMuxerFilter::GetPin(int n)
}
}
- if (n == m_pInputs.GetCount() && m_pOutput) {
+ if (n == (int)m_pInputs.GetCount() && m_pOutput) {
return m_pOutput;
}
@@ -359,6 +359,8 @@ ULONGLONG SetStreamPosition(IStream* pStream, ULONGLONG seekpos)
return posnew.QuadPart;
}
+#pragma warning(push)
+#pragma warning(disable: 4702)
DWORD CMatroskaMuxerFilter::ThreadProc()
{
CComQIPtr<IStream> pStream;
@@ -396,9 +398,9 @@ DWORD CMatroskaMuxerFilter::ThreadProc()
// TODO
QWORD voidlen = 100;
if (rtDur > 0) {
- voidlen += int(1.0 * rtDur / MAXCLUSTERTIME / 10000 + 0.5) * 20;
+ voidlen += QWORD(1.0 * rtDur / MAXCLUSTERTIME / 10000 + 0.5) * 20;
} else {
- voidlen += int(1.0 * 1000 * 60 * 60 * 24 / MAXCLUSTERTIME + 0.5) * 20; // when no duration is known, allocate for 24 hours (~340k)
+ voidlen += QWORD(1.0 * 1000 * 60 * 60 * 24 / MAXCLUSTERTIME + 0.5) * 20; // when no duration is known, allocate for 24 hours (~340k)
}
ULONGLONG voidpos = GetStreamPosition(pStream);
{
@@ -546,12 +548,12 @@ DWORD CMatroskaMuxerFilter::ThreadProc()
if (!fTracksWritten) {
CNode<Track> Tracks;
CAutoPtr<Track> pT(DEBUG_NEW Track());
- POSITION pos = pActivePins.GetHeadPosition();
+ pos = pActivePins.GetHeadPosition();
for (int i = 1; pos; i++) {
- CMatroskaMuxerInputPin* pPin = pActivePins.GetNext(pos);
+ CMatroskaMuxerInputPin* pActivePin = pActivePins.GetNext(pos);
CAutoPtr<TrackEntry> pTE(DEBUG_NEW TrackEntry());
- *pTE = *pPin->GetTrackEntry();
+ *pTE = *pActivePin->GetTrackEntry();
if (TrackNumber == 0 && pTE->TrackType == TrackEntry::TypeVideo) {
TrackNumber = pTE->TrackNumber;
}
@@ -573,7 +575,7 @@ DWORD CMatroskaMuxerFilter::ThreadProc()
{
CAutoLock cAutoLock(&pPin->m_csQueue);
- b = pPin->m_blocks.RemoveHead();
+ b.Attach(pPin->m_blocks.RemoveHead().Detach());
}
if (b) {
@@ -675,15 +677,15 @@ DWORD CMatroskaMuxerFilter::ThreadProc()
}
SetStreamPosition(pStream, voidpos);
- int len = (int)(voidlen - seek.Size());
+ QWORD len = voidlen - seek.Size();
ASSERT(len >= 0 && len != 1);
seek.Write(pStream);
if (len == 0) {
// nothing to do
} else if (len >= 2) {
- for (int i = 0; i < 8; i++) {
- if (len >= (1 << i * 7) - 2 && len <= (1 << (i + 1) * 7) - 2) {
+ for (QWORD i = 0; i < 8; i++) {
+ if (len >= (QWORD(1) << i * 7) - 2 && len <= (QWORD(1) << (i + 1) * 7) - 2) {
Void(len - 2 - i).Write(pStream);
break;
}
@@ -704,11 +706,8 @@ DWORD CMatroskaMuxerFilter::ThreadProc()
break;
}
}
-
- ASSERT(0); // we should only exit via CMD_EXIT
-
- CAMThread::m_hThread = nullptr;
- return 0;
+ UNREACHABLE_CODE(); // we should only exit via CMD_EXIT
+#pragma warning(pop)
}
//
@@ -718,10 +717,10 @@ DWORD CMatroskaMuxerFilter::ThreadProc()
CMatroskaMuxerInputPin::CMatroskaMuxerInputPin(LPCWSTR pName, CBaseFilter* pFilter, CCritSec* pLock, HRESULT* phr)
: CBaseInputPin(NAME("CMatroskaMuxerInputPin"), pFilter, pLock, phr, pName)
, m_fActive(false)
- , m_fEndOfStreamReceived(false)
- , m_rtDur(0)
, m_rtLastStart(0)
, m_rtLastStop(0)
+ , m_rtDur(0)
+ , m_fEndOfStreamReceived(false)
{
}
@@ -740,7 +739,7 @@ STDMETHODIMP CMatroskaMuxerInputPin::NonDelegatingQueryInterface(REFIID riid, vo
HRESULT CMatroskaMuxerInputPin::CheckMediaType(const CMediaType* pmt)
{
return pmt->majortype == MEDIATYPE_Video && (pmt->formattype == FORMAT_VideoInfo
- || pmt->formattype == FORMAT_VideoInfo2)
+ || pmt->formattype == FORMAT_VideoInfo2)
// || pmt->majortype == MEDIATYPE_Video && pmt->subtype == MEDIASUBTYPE_MPEG1Payload && pmt->formattype == FORMAT_MPEGVideo
// || pmt->majortype == MEDIATYPE_Video && pmt->subtype == MEDIASUBTYPE_MPEG2_VIDEO && pmt->formattype == FORMAT_MPEG2_VIDEO
|| pmt->majortype == MEDIATYPE_Video && pmt->subtype == MEDIASUBTYPE_DiracVideo && pmt->formattype == FORMAT_DiracVideoInfo
@@ -748,11 +747,11 @@ HRESULT CMatroskaMuxerInputPin::CheckMediaType(const CMediaType* pmt)
|| pmt->majortype == MEDIATYPE_Audio && pmt->subtype == MEDIASUBTYPE_Vorbis && pmt->formattype == FORMAT_VorbisFormat
|| pmt->majortype == MEDIATYPE_Audio && pmt->subtype == MEDIASUBTYPE_Vorbis2 && pmt->formattype == FORMAT_VorbisFormat2
|| pmt->majortype == MEDIATYPE_Audio && (pmt->subtype == MEDIASUBTYPE_14_4
- || pmt->subtype == MEDIASUBTYPE_28_8
- || pmt->subtype == MEDIASUBTYPE_ATRC
- || pmt->subtype == MEDIASUBTYPE_COOK
- || pmt->subtype == MEDIASUBTYPE_DNET
- || pmt->subtype == MEDIASUBTYPE_SIPR) && pmt->formattype == FORMAT_WaveFormatEx
+ || pmt->subtype == MEDIASUBTYPE_28_8
+ || pmt->subtype == MEDIASUBTYPE_ATRC
+ || pmt->subtype == MEDIASUBTYPE_COOK
+ || pmt->subtype == MEDIASUBTYPE_DNET
+ || pmt->subtype == MEDIASUBTYPE_SIPR) && pmt->formattype == FORMAT_WaveFormatEx
|| pmt->majortype == MEDIATYPE_Text && pmt->subtype == MEDIASUBTYPE_NULL && pmt->formattype == FORMAT_None
|| pmt->majortype == MEDIATYPE_Subtitle && pmt->formattype == FORMAT_SubtitleInfo
? S_OK
@@ -1105,7 +1104,7 @@ HRESULT CMatroskaMuxerInputPin::CompleteConnect(IPin* pPin)
*dst++ = 2;
for (int i = 0; i < 2; i++) {
for (int len2 = pvf2->HeaderSize[i]; len2 >= 0; len2 -= 255) {
- *dst++ = std::min(len2, 255);
+ *dst++ = (BYTE)std::min(len2, BYTE_MAX);
}
}
@@ -1228,7 +1227,7 @@ STDMETHODIMP CMatroskaMuxerInputPin::Receive(IMediaSample* pSample)
return hr;
}
- long len = pSample->GetActualDataLength();
+ long inputLen = pSample->GetActualDataLength();
REFERENCE_TIME rtStart = -1, rtStop = -1;
hr = pSample->GetTime(&rtStart, &rtStop);
@@ -1245,15 +1244,15 @@ STDMETHODIMP CMatroskaMuxerInputPin::Receive(IMediaSample* pSample)
TRACE(_T("Received (%u): %I64d-%I64d (c=%d, co=%dms), len=%ld, d%d p%d s%d\n"),
(static_cast<CMatroskaMuxerFilter*>(m_pFilter))->GetTrackNumber(this),
rtStart, rtStop, (int)((rtStart / 10000) / MAXCLUSTERTIME), (int)((rtStart / 10000) % MAXCLUSTERTIME),
- len,
+ inputLen,
pSample->IsDiscontinuity() == S_OK ? 1 : 0,
pSample->IsPreroll() == S_OK ? 1 : 0,
pSample->IsSyncPoint() == S_OK ? 1 : 0);
if (m_mt.subtype == MEDIASUBTYPE_Vorbis && m_pVorbisHdrs.GetCount() < 3) {
CAutoPtr<CBinary> data(DEBUG_NEW CBinary(0));
- data->SetCount(len);
- memcpy(data->GetData(), pData, len);
+ data->SetCount(inputLen);
+ memcpy(data->GetData(), pData, inputLen);
m_pVorbisHdrs.Add(data);
if (m_pVorbisHdrs.GetCount() == 3) {
@@ -1270,8 +1269,8 @@ STDMETHODIMP CMatroskaMuxerInputPin::Receive(IMediaSample* pSample)
*dst++ = 2;
for (size_t i = 0; i < 2; i++) {
- for (INT_PTR len = m_pVorbisHdrs[i]->GetCount(); len >= 0; len -= 255) {
- *dst++ = (BYTE)std::min<INT_PTR>(len, 255);
+ for (INT_PTR len2 = m_pVorbisHdrs[i]->GetCount(); len2 >= 0; len2 -= 255) {
+ *dst++ = (BYTE)std::min<INT_PTR>(len2, 255);
}
}
@@ -1315,8 +1314,8 @@ STDMETHODIMP CMatroskaMuxerInputPin::Receive(IMediaSample* pSample)
}
CAutoPtr<CBinary> data(DEBUG_NEW CBinary(0));
- data->SetCount(len);
- memcpy(data->GetData(), pData, len);
+ data->SetCount(inputLen);
+ memcpy(data->GetData(), pData, inputLen);
b->Block.BlockData.AddTail(data);
CAutoLock cAutoLock2(&m_csQueue);
diff --git a/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj b/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj
index 088585918..0bf089772 100644
--- a/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj
+++ b/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,152 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>MatroskaMuxer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>MatroskaMuxer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>MatroskaMuxer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>MatroskaMuxer.def</ModuleDefinitionFile>
@@ -210,13 +94,13 @@
<ClInclude Include="MatroskaFile.h" />
<ClInclude Include="MatroskaMuxer.h" />
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="MatroskaMuxer.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj.filters b/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj.filters
index d653d4775..3b9080e48 100644
--- a/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj.filters
+++ b/src/filters/muxer/MatroskaMuxer/MatroskaMuxer.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{5ba8ecdf-2b3a-4c43-8d71-30a1bbc63dbb}</UniqueIdentifier>
diff --git a/src/filters/muxer/WavDest/WavDest.cpp b/src/filters/muxer/WavDest/WavDest.cpp
index 1c8f29a2f..181b5cd47 100644
--- a/src/filters/muxer/WavDest/WavDest.cpp
+++ b/src/filters/muxer/WavDest/WavDest.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -72,8 +72,8 @@ CFilterApp theApp;
CWavDestFilter::CWavDestFilter(LPUNKNOWN pUnk, HRESULT* phr)
: CTransformFilter(NAME("WavDest filter"), pUnk, __uuidof(this))
- , m_cbHeader(0)
, m_cbWavData(0)
+ , m_cbHeader(0)
{
if (CWavDestOutputPin* pOut = DEBUG_NEW CWavDestOutputPin(this, phr)) {
if (SUCCEEDED(*phr)) {
diff --git a/src/filters/muxer/WavDest/WavDest.vcxproj b/src/filters/muxer/WavDest/WavDest.vcxproj
index 9665b74b7..7552a4fb8 100644
--- a/src/filters/muxer/WavDest/WavDest.vcxproj
+++ b/src/filters/muxer/WavDest/WavDest.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,149 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <ModuleDefinitionFile>WavDest.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <ModuleDefinitionFile>WavDest.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <ModuleDefinitionFile>WavDest.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<ModuleDefinitionFile>WavDest.def</ModuleDefinitionFile>
</Link>
@@ -203,14 +90,14 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
<ClInclude Include="WavDest.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="WavDest.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/muxer/WavDest/WavDest.vcxproj.filters b/src/filters/muxer/WavDest/WavDest.vcxproj.filters
index 18dd873b1..d6dec7162 100644
--- a/src/filters/muxer/WavDest/WavDest.vcxproj.filters
+++ b/src/filters/muxer/WavDest/WavDest.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4e8bc353-99a5-4a8a-8345-30fa00f8868c}</UniqueIdentifier>
diff --git a/src/filters/parser/BaseSplitter/BaseSplitter.cpp b/src/filters/parser/BaseSplitter/BaseSplitter.cpp
index 9a09a375c..d80ed7061 100644
--- a/src/filters/parser/BaseSplitter/BaseSplitter.cpp
+++ b/src/filters/parser/BaseSplitter/BaseSplitter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,7 +21,6 @@
#include "stdafx.h"
#include "../../../DSUtil/DSUtil.h"
-#include <InitGuid.h>
#include "moreuuids.h"
#include "../../switcher/AudioSwitcher/AudioSwitcher.h"
#include "BaseSplitter.h"
@@ -65,7 +64,7 @@ CAutoPtr<Packet> CPacketQueue::Remove()
{
CAutoLock cAutoLock(this);
ASSERT(__super::GetCount() > 0);
- CAutoPtr<Packet> p = RemoveHead();
+ CAutoPtr<Packet> p(RemoveHead().Detach());
if (p) {
m_size -= p->GetDataSize();
}
@@ -388,7 +387,8 @@ int CBaseSplitterOutputPin::QueueSize()
HRESULT CBaseSplitterOutputPin::QueueEndOfStream()
{
- return QueuePacket(CAutoPtr<Packet>()); // NULL means EndOfStream
+ CAutoPtr<Packet> p;
+ return QueuePacket(p); // NULL means EndOfStream
}
HRESULT CBaseSplitterOutputPin::QueuePacket(CAutoPtr<Packet> p)
@@ -480,7 +480,7 @@ DWORD CBaseSplitterOutputPin::ThreadProc()
{
CAutoLock cAutoLock(&m_queue);
if ((cnt = m_queue.GetCount()) > 0) {
- p = m_queue.Remove();
+ p.Attach(m_queue.Remove().Detach());
}
}
@@ -773,17 +773,20 @@ STDMETHODIMP CBaseSplitterOutputPin::GetPreroll(LONGLONG* pllPreroll)
CBaseSplitterFilter::CBaseSplitterFilter(LPCTSTR pName, LPUNKNOWN pUnk, HRESULT* phr, const CLSID& clsid, int QueueMaxPackets)
: CBaseFilter(pName, pUnk, this, clsid)
- , m_rtDuration(0), m_rtStart(0), m_rtStop(0), m_rtCurrent(0)
- , m_dRate(1.0)
, m_nOpenProgress(100)
, m_fAbort(false)
- , m_rtLastStart(_I64_MIN)
- , m_rtLastStop(_I64_MIN)
- , m_priority(THREAD_PRIORITY_NORMAL)
- , m_QueueMaxPackets(QueueMaxPackets)
+ , m_rtDuration(0)
+ , m_rtStart(0)
+ , m_rtStop(0)
+ , m_rtCurrent(0)
, m_rtNewStart(0)
, m_rtNewStop(0)
+ , m_dRate(1.0)
, m_fFlushing(false)
+ , m_priority(THREAD_PRIORITY_NORMAL)
+ , m_QueueMaxPackets(QueueMaxPackets)
+ , m_rtLastStart(_I64_MIN)
+ , m_rtLastStop(_I64_MIN)
{
if (phr) {
*phr = S_OK;
@@ -902,7 +905,7 @@ HRESULT CBaseSplitterFilter::DeleteOutputs()
}
while (m_pOutputs.GetCount()) {
- CAutoPtr<CBaseSplitterOutputPin> pPin = m_pOutputs.RemoveHead();
+ CAutoPtr<CBaseSplitterOutputPin> pPin(m_pOutputs.RemoveHead().Detach());
if (IPin* pPinTo = pPin->GetConnected()) {
pPinTo->Disconnect();
}
@@ -947,6 +950,8 @@ void CBaseSplitterFilter::DeliverEndFlush()
m_eEndFlush.Set();
}
+#pragma warning(push)
+#pragma warning(disable: 4702)
DWORD CBaseSplitterFilter::ThreadProc()
{
if (m_pSyncReader) {
@@ -1009,11 +1014,8 @@ DWORD CBaseSplitterFilter::ThreadProc()
m_pActivePins.GetNext(pos)->QueueEndOfStream();
}
}
-
- ASSERT(0); // we should only exit via CMD_EXIT
-
- m_hThread = nullptr;
- return 0;
+ UNREACHABLE_CODE(); // we should only exit via CMD_EXIT
+#pragma warning(pop)
}
HRESULT CBaseSplitterFilter::DeliverPacket(CAutoPtr<Packet> p)
@@ -1092,9 +1094,9 @@ bool CBaseSplitterFilter::IsAnyPinDrying()
// if (m_priority != THREAD_PRIORITY_ABOVE_NORMAL && (count < MINPACKETS/3 || size < MINPACKETSIZE/3))
if (m_priority != THREAD_PRIORITY_BELOW_NORMAL && (count < MINPACKETS / 3 || size < MINPACKETSIZE / 3)) {
// SetThreadPriority(m_hThread, m_priority = THREAD_PRIORITY_ABOVE_NORMAL);
- POSITION pos = m_pOutputs.GetHeadPosition();
- while (pos) {
- m_pOutputs.GetNext(pos)->SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL);
+ POSITION pos2 = m_pOutputs.GetHeadPosition();
+ while (pos2) {
+ m_pOutputs.GetNext(pos2)->SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL);
}
m_priority = THREAD_PRIORITY_BELOW_NORMAL;
}
@@ -1106,9 +1108,9 @@ bool CBaseSplitterFilter::IsAnyPinDrying()
if (m_priority != THREAD_PRIORITY_NORMAL && (totalcount > m_QueueMaxPackets * 2 / 3 || totalsize > MAXPACKETSIZE * 2 / 3)) {
// SetThreadPriority(m_hThread, m_priority = THREAD_PRIORITY_NORMAL);
- POSITION pos = m_pOutputs.GetHeadPosition();
- while (pos) {
- m_pOutputs.GetNext(pos)->SetThreadPriority(THREAD_PRIORITY_NORMAL);
+ POSITION pos2 = m_pOutputs.GetHeadPosition();
+ while (pos2) {
+ m_pOutputs.GetNext(pos2)->SetThreadPriority(THREAD_PRIORITY_NORMAL);
}
m_priority = THREAD_PRIORITY_NORMAL;
}
@@ -1251,7 +1253,7 @@ STDMETHODIMP CBaseSplitterFilter::Load(LPCOLESTR pszFileName, const AM_MEDIA_TYP
if (FAILED(hr)
|| FAILED(hr = DeleteOutputs())
|| FAILED(hr = CreateOutputs(pAsyncReader))) {
- m_fn = "";
+ m_fn.Empty();
return hr;
}
diff --git a/src/filters/parser/BaseSplitter/BaseSplitter.h b/src/filters/parser/BaseSplitter/BaseSplitter.h
index 55eaba8da..005737029 100644
--- a/src/filters/parser/BaseSplitter/BaseSplitter.h
+++ b/src/filters/parser/BaseSplitter/BaseSplitter.h
@@ -45,13 +45,13 @@ public:
REFERENCE_TIME rtStart, rtStop;
AM_MEDIA_TYPE* pmt;
Packet()
- : pmt(nullptr)
+ : TrackNumber(0)
, bDiscontinuity(FALSE)
- , bAppendable(FALSE)
, bSyncPoint(FALSE)
- , TrackNumber(0)
+ , bAppendable(FALSE)
, rtStart(0)
- , rtStop(0) {
+ , rtStop(0)
+ , pmt(nullptr) {
}
virtual ~Packet() {
if (pmt) {
diff --git a/src/filters/parser/BaseSplitter/BaseSplitter.vcxproj b/src/filters/parser/BaseSplitter/BaseSplitter.vcxproj
index e80062ad0..ababd13b4 100644
--- a/src/filters/parser/BaseSplitter/BaseSplitter.vcxproj
+++ b/src/filters/parser/BaseSplitter/BaseSplitter.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,44 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/src/filters/parser/BaseSplitter/BaseSplitter.vcxproj.filters b/src/filters/parser/BaseSplitter/BaseSplitter.vcxproj.filters
index d218a4b82..0d75cd1e5 100644
--- a/src/filters/parser/BaseSplitter/BaseSplitter.vcxproj.filters
+++ b/src/filters/parser/BaseSplitter/BaseSplitter.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{b95be5c7-0978-4aad-b33b-140fbdb42012}</UniqueIdentifier>
diff --git a/src/filters/parser/BaseSplitter/BaseSplitterFile.cpp b/src/filters/parser/BaseSplitter/BaseSplitterFile.cpp
index 8536e4d8c..f549c0aa6 100644
--- a/src/filters/parser/BaseSplitter/BaseSplitterFile.cpp
+++ b/src/filters/parser/BaseSplitter/BaseSplitterFile.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -29,15 +29,15 @@
CBaseSplitterFile::CBaseSplitterFile(IAsyncReader* pAsyncReader, HRESULT& hr, int cachelen, bool fRandomAccess, bool fStreaming)
: m_pAsyncReader(pAsyncReader)
+ , m_cachepos(0)
+ , m_cachelen(0)
+ , m_cachetotal(0)
, m_fStreaming(false)
, m_fRandomAccess(false)
, m_pos(0)
, m_len(0)
, m_bitbuff(0)
, m_bitlen(0)
- , m_cachepos(0)
- , m_cachelen(0)
- , m_cachetotal(0)
{
if (!m_pAsyncReader) {
hr = E_UNEXPECTED;
diff --git a/src/filters/parser/BaseSplitter/MultiFiles.cpp b/src/filters/parser/BaseSplitter/MultiFiles.cpp
index 1e263c150..d422f85ff 100644
--- a/src/filters/parser/BaseSplitter/MultiFiles.cpp
+++ b/src/filters/parser/BaseSplitter/MultiFiles.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2013 see Authors.txt
+ * (C) 2009-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -26,10 +26,10 @@
IMPLEMENT_DYNAMIC(CMultiFiles, CObject)
CMultiFiles::CMultiFiles()
- : m_hFile(INVALID_HANDLE_VALUE)
- , m_llTotalLength(0)
+ : m_pCurrentPTSOffset(nullptr)
+ , m_hFile(INVALID_HANDLE_VALUE)
, m_nCurPart(-1)
- , m_pCurrentPTSOffset(nullptr)
+ , m_llTotalLength(0)
{
}
diff --git a/src/filters/parser/DSMSplitter/DSMSplitter.cpp b/src/filters/parser/DSMSplitter/DSMSplitter.cpp
index 8bf7f9363..b799c99bd 100644
--- a/src/filters/parser/DSMSplitter/DSMSplitter.cpp
+++ b/src/filters/parser/DSMSplitter/DSMSplitter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,13 +20,14 @@
*/
#include "stdafx.h"
-#include "DSMSplitter.h"
#include "../../../DSUtil/DSUtil.h"
+#include "../../../DSUtil/ISOLang.h"
#ifdef STANDALONE_FILTER
#include <InitGuid.h>
#endif
#include "moreuuids.h"
+#include "DSMSplitter.h"
#ifdef STANDALONE_FILTER
@@ -170,9 +171,12 @@ HRESULT CDSMSplitterFilter::CreateOutputs(IAsyncReader* pAsyncReader)
if (key == "NAME") {
name = value;
}
- if (key == "LANG") if ((lang = ISO6392ToLanguage(CStringA(CString(value)))).IsEmpty()) {
+ if (key == "LANG") {
+ lang = ISOLang::ISO6392ToLanguage(CStringA(value));
+ if (lang.IsEmpty()) {
lang = value;
}
+ }
}
if (!name.IsEmpty() || !lang.IsEmpty()) {
@@ -199,9 +203,9 @@ HRESULT CDSMSplitterFilter::CreateOutputs(IAsyncReader* pAsyncReader)
for (size_t i = 0; i < m_resources.GetCount(); i++) {
const CDSMResource& r = m_resources[i];
- if (r.mime == "application/x-truetype-font" ||
- r.mime == "application/x-font-ttf" ||
- r.mime == "application/vnd.ms-opentype") {
+ if (r.mime == L"application/x-truetype-font" ||
+ r.mime == L"application/x-font-ttf" ||
+ r.mime == L"application/vnd.ms-opentype") {
//m_fontinst.InstallFont(r.data);
m_fontinst.InstallFontMemory(r.data.GetData(), (UINT)r.data.GetCount());
}
diff --git a/src/filters/parser/DSMSplitter/DSMSplitter.vcxproj b/src/filters/parser/DSMSplitter/DSMSplitter.vcxproj
index d2c52d254..baefd385d 100644
--- a/src/filters/parser/DSMSplitter/DSMSplitter.vcxproj
+++ b/src/filters/parser/DSMSplitter/DSMSplitter.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,152 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>DSMSplitter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>DSMSplitter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>DSMSplitter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>DSMSplitter.def</ModuleDefinitionFile>
@@ -210,13 +94,13 @@
<ClInclude Include="DSMSplitter.h" />
<ClInclude Include="DSMSplitterFile.h" />
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="DSMSplitter.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/parser/DSMSplitter/DSMSplitter.vcxproj.filters b/src/filters/parser/DSMSplitter/DSMSplitter.vcxproj.filters
index 8b14f9ef1..83f06422a 100644
--- a/src/filters/parser/DSMSplitter/DSMSplitter.vcxproj.filters
+++ b/src/filters/parser/DSMSplitter/DSMSplitter.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{a337cc5d-54f7-4fa2-9559-6c88116d892c}</UniqueIdentifier>
diff --git a/src/filters/parser/StreamDriveThru/StreamDriveThru.cpp b/src/filters/parser/StreamDriveThru/StreamDriveThru.cpp
index f44f808d2..3d4e7ba7f 100644
--- a/src/filters/parser/StreamDriveThru/StreamDriveThru.cpp
+++ b/src/filters/parser/StreamDriveThru/StreamDriveThru.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -105,6 +105,8 @@ STDMETHODIMP CStreamDriveThruFilter::NonDelegatingQueryInterface(REFIID riid, vo
#define PACKETSIZE 65536
+#pragma warning(push)
+#pragma warning(disable: 4702)
DWORD CStreamDriveThruFilter::ThreadProc()
{
for (;;) {
@@ -144,10 +146,9 @@ DWORD CStreamDriveThruFilter::ThreadProc()
if (CComQIPtr<IFileSinkFilter2> pFSF = GetFilterFromPin(m_pOutput->GetConnected())) {
pFSF->SetMode(AM_FILE_OVERWRITE);
- LPOLESTR pfn;
+ CComHeapPtr<OLECHAR> pfn;
if (SUCCEEDED(pFSF->GetCurFile(&pfn, nullptr))) {
pFSF->SetFileName(pfn, nullptr);
- CoTaskMemFree(pfn);
}
}
@@ -201,8 +202,8 @@ DWORD CStreamDriveThruFilter::ThreadProc()
break;
}
}
-
- return 0;
+ UNREACHABLE_CODE(); // we should only exit via CMD_EXIT
+#pragma warning(pop)
}
int CStreamDriveThruFilter::GetPinCount()
diff --git a/src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj b/src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj
index 86021d9e3..319a169a2 100644
--- a/src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj
+++ b/src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,152 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>StreamDriveThru.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>StreamDriveThru.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>StreamDriveThru.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>StreamDriveThru.def</ModuleDefinitionFile>
@@ -207,14 +91,14 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
<ClInclude Include="StreamDriveThru.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="StreamDriveThru.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj.filters b/src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj.filters
index a2d187b96..173cd5f6f 100644
--- a/src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj.filters
+++ b/src/filters/parser/StreamDriveThru/StreamDriveThru.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{28a35247-c38a-473b-8877-78de4c5a56e6}</UniqueIdentifier>
diff --git a/src/filters/reader/CDDAReader/CDDAReader.cpp b/src/filters/reader/CDDAReader/CDDAReader.cpp
index d24cc850d..8a3cd1f35 100644
--- a/src/filters/reader/CDDAReader/CDDAReader.cpp
+++ b/src/filters/reader/CDDAReader/CDDAReader.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,7 @@
#include "stdafx.h"
#include <algorithm>
+#include <vector>
#ifdef STANDALONE_FILTER
#include <InitGuid.h>
#endif
@@ -133,7 +134,7 @@ STDMETHODIMP CCDDAReader::Load(LPCOLESTR pszFileName, const AM_MEDIA_TYPE* pmt)
CMediaType mt;
mt.majortype = MEDIATYPE_Stream;
- mt.subtype = MEDIASUBTYPE_WAVE;
+ mt.subtype = m_stream.IsDTS() ? MEDIASUBTYPE_DTS : MEDIASUBTYPE_WAVE;
m_mt = mt;
return S_OK;
@@ -275,6 +276,8 @@ CCDDAStream::CCDDAStream()
m_header.frm.pcm.wf.nBlockAlign = m_header.frm.pcm.wf.nChannels * m_header.frm.pcm.wBitsPerSample / 8;
m_header.frm.pcm.wf.nAvgBytesPerSec = m_header.frm.pcm.wf.nSamplesPerSec * m_header.frm.pcm.wf.nBlockAlign;
m_header.data.hdr.chunkID = DataID;
+
+ m_bDTS = false;
}
CCDDAStream::~CCDDAStream()
@@ -334,89 +337,121 @@ bool CCDDAStream::Load(const WCHAR* fnw)
m_header.frm.pcm.wf.nChannels = 4;
}
- m_nStartSector = MSF2UINT(m_TOC.TrackData[iTrackIndex - 1].Address) - 150; //MSF2UINT(m_TOC.TrackData[0].Address);
- m_nStopSector = MSF2UINT(m_TOC.TrackData[iTrackIndex].Address) - 150;//MSF2UINT(m_TOC.TrackData[0].Address);
+ m_nStartSector = MSF2UINT(m_TOC.TrackData[iTrackIndex - 1].Address) - 150;
+ m_nStopSector = MSF2UINT(m_TOC.TrackData[iTrackIndex].Address) - 150;
m_llLength = LONGLONG(m_nStopSector - m_nStartSector) * RAW_SECTOR_SIZE;
m_header.riff.hdr.chunkSize = (long)(m_llLength + sizeof(m_header) - 8);
m_header.data.hdr.chunkSize = (long)(m_llLength);
- do {
- CDROM_READ_TOC_EX TOCEx;
- ZeroMemory(&TOCEx, sizeof(TOCEx));
- TOCEx.Format = CDROM_READ_TOC_EX_FORMAT_CDTEXT;
- TOCEx.SessionTrack = iTrackIndex;
- WORD size = 0;
- ASSERT(MINIMUM_CDROM_READ_TOC_EX_SIZE == sizeof(size));
- if (!DeviceIoControl(m_hDrive, IOCTL_CDROM_READ_TOC_EX, &TOCEx, sizeof(TOCEx), &size, sizeof(size), &BytesReturned, 0)) {
- break;
+ // Detect DTS Music Disk
+ m_bDTS = false;
+
+ // DCA syncwords
+ const DWORD DCA_MARKER_RAW_BE = 0x7FFE8001;
+ const DWORD DCA_MARKER_RAW_LE = 0xFE7F0180;
+ const DWORD DCA_MARKER_14B_BE = 0x1FFFE800;
+ const DWORD DCA_MARKER_14B_LE = 0xFF1F00E8;
+ UINT nMarkerFound = 0, nAttempt = 0;
+ DWORD marker = DWORD_MAX;
+
+ std::vector<BYTE> data(16384);
+ DWORD dwSizeRead = 0;
+ while (SUCCEEDED(Read(data.data(), (DWORD)data.size(), TRUE, &dwSizeRead)) && dwSizeRead && nAttempt < (4 + nMarkerFound)) {
+ nAttempt++;
+
+ for (DWORD i = 0; i < dwSizeRead; i++) {
+ marker = (marker << 8) | data[i];
+ if ((marker == DCA_MARKER_14B_LE && (i < dwSizeRead - 2) && (data[i + 1] & 0xF0) == 0xF0 && data[i + 2] == 0x07)
+ || (marker == DCA_MARKER_14B_BE && (i < dwSizeRead - 2) && data[i + 1] == 0x07 && (data[i + 2] & 0xF0) == 0xF0)
+ || marker == DCA_MARKER_RAW_LE || marker == DCA_MARKER_RAW_BE) {
+ nMarkerFound++;
+ }
}
+ dwSizeRead = 0;
- size = _byteswap_ushort(size) + sizeof(size);
-
- CAutoVectorPtr<BYTE> pCDTextData;
- if (!pCDTextData.Allocate(size)) {
+ if (nMarkerFound >= 4) {
+ m_bDTS = true;
break;
}
- ZeroMemory(pCDTextData, size);
+ }
+ SetPointer(0);
+
+ CDROM_READ_TOC_EX TOCEx;
+ ZeroMemory(&TOCEx, sizeof(TOCEx));
+ TOCEx.Format = CDROM_READ_TOC_EX_FORMAT_CDTEXT;
+ BYTE header[4] = { 0 };
+ static_assert(sizeof(header) >= MINIMUM_CDROM_READ_TOC_EX_SIZE, "sizeof(header) must be greater or equal to MINIMUM_CDROM_READ_TOC_EX_SIZE");
+ if (!DeviceIoControl(m_hDrive, IOCTL_CDROM_READ_TOC_EX, &TOCEx, sizeof(TOCEx), header, sizeof(header), &BytesReturned, 0)) {
+ return true;
+ }
- if (!DeviceIoControl(m_hDrive, IOCTL_CDROM_READ_TOC_EX, &TOCEx, sizeof(TOCEx), pCDTextData, size, &BytesReturned, 0)) {
- break;
- }
+ DWORD size = 2 + (WORD(header[0]) << 8) + header[1];
+ if (size <= 4) { // No cd-text information
+ return true;
+ }
- size = (WORD)(BytesReturned - sizeof(CDROM_TOC_CD_TEXT_DATA));
- CDROM_TOC_CD_TEXT_DATA_BLOCK* pDesc = ((CDROM_TOC_CD_TEXT_DATA*)(BYTE*)pCDTextData)->Descriptors;
+ CAutoVectorPtr<BYTE> pCDTextData;
+ if (!pCDTextData.Allocate(size)) {
+ return true;
+ }
+ ZeroMemory(pCDTextData, size);
- CStringArray str[16];
- for (int i = 0; i < _countof(str); i++) {
- str[i].SetSize(1 + m_TOC.LastTrack);
- }
- CString last;
+ if (!DeviceIoControl(m_hDrive, IOCTL_CDROM_READ_TOC_EX, &TOCEx, sizeof(TOCEx), pCDTextData, size, &BytesReturned, 0)) {
+ return true;
+ }
- for (int i = 0; size >= sizeof(CDROM_TOC_CD_TEXT_DATA_BLOCK); i++, size -= sizeof(CDROM_TOC_CD_TEXT_DATA_BLOCK), pDesc++) {
- if (pDesc->TrackNumber > m_TOC.LastTrack) {
- continue;
- }
+ size = (WORD)(BytesReturned - sizeof(CDROM_TOC_CD_TEXT_DATA));
+ CDROM_TOC_CD_TEXT_DATA_BLOCK* pDesc = ((CDROM_TOC_CD_TEXT_DATA*)(BYTE*)pCDTextData)->Descriptors;
- const int lenU = _countof(pDesc->Text);
- const int lenW = _countof(pDesc->WText);
+ CStringArray str[16];
+ for (int i = 0; i < _countof(str); i++) {
+ str[i].SetSize(1 + m_TOC.LastTrack);
+ }
+ CString last;
- CString text = !pDesc->Unicode
- ? CString(CStringA((CHAR*)pDesc->Text, lenU))
- : CString(CStringW((WCHAR*)pDesc->WText, lenW));
+ for (int i = 0; size >= sizeof(CDROM_TOC_CD_TEXT_DATA_BLOCK); i++, size -= sizeof(CDROM_TOC_CD_TEXT_DATA_BLOCK), pDesc++) {
+ if (pDesc->TrackNumber > m_TOC.LastTrack) {
+ continue;
+ }
- int tlen = text.GetLength();
- CString tmp = (tlen < 12 - 1)
- ? (!pDesc->Unicode
- ? CString(CStringA((CHAR*)pDesc->Text + tlen + 1, lenU - (tlen + 1)))
- : CString(CStringW((WCHAR*)pDesc->WText + tlen + 1, lenW - (tlen + 1))))
- : _T("");
+ const int lenU = _countof(pDesc->Text);
+ const int lenW = _countof(pDesc->WText);
- if (pDesc->PackType < 0x80 || pDesc->PackType >= 0x80 + 0x10) {
- continue;
- }
- pDesc->PackType -= 0x80;
-
- if (pDesc->CharacterPosition == 0) {
- str[pDesc->PackType][pDesc->TrackNumber] = text;
- } else { // pDesc->CharacterPosition <= 0xf since CharacterPosition is a 4-bit field
- if (pDesc->CharacterPosition < 0xf && !last.IsEmpty()) {
- str[pDesc->PackType][pDesc->TrackNumber] = last + text;
- } else {
- str[pDesc->PackType][pDesc->TrackNumber] += text;
- }
- }
+ CString text = !pDesc->Unicode
+ ? CString(CStringA((CHAR*)pDesc->Text, lenU))
+ : CString(CStringW((WCHAR*)pDesc->WText, lenW));
+
+ int tlen = text.GetLength();
+ CString tmp = (tlen < 12 - 1)
+ ? (!pDesc->Unicode
+ ? CString(CStringA((CHAR*)pDesc->Text + tlen + 1, lenU - (tlen + 1)))
+ : CString(CStringW((WCHAR*)pDesc->WText + tlen + 1, lenW - (tlen + 1))))
+ : _T("");
- last = tmp;
+ if (pDesc->PackType < 0x80 || pDesc->PackType >= 0x80 + 0x10) {
+ continue;
+ }
+ pDesc->PackType -= 0x80;
+
+ if (pDesc->CharacterPosition == 0) {
+ str[pDesc->PackType][pDesc->TrackNumber] = text;
+ } else { // pDesc->CharacterPosition <= 0xf since CharacterPosition is a 4-bit field
+ if (pDesc->CharacterPosition < 0xf && !last.IsEmpty()) {
+ str[pDesc->PackType][pDesc->TrackNumber] = last + text;
+ } else {
+ str[pDesc->PackType][pDesc->TrackNumber] += text;
+ }
}
- m_discTitle = str[0][0];
- m_trackTitle = str[0][iTrackIndex];
- m_discArtist = str[1][0];
- m_trackArtist = str[1][iTrackIndex];
- } while (0);
+ last = tmp;
+ }
+ m_discTitle = str[0][0];
+ m_trackTitle = str[0][iTrackIndex];
+ m_discArtist = str[1][0];
+ m_trackArtist = str[1][iTrackIndex];
return true;
}
@@ -434,41 +469,45 @@ HRESULT CCDDAStream::Read(PBYTE pbBuffer, DWORD dwBytesToRead, BOOL bAlign, LPDW
{
CAutoLock lck(&m_csLock);
- BYTE buff[RAW_SECTOR_SIZE];
-
PBYTE pbBufferOrg = pbBuffer;
LONGLONG pos = m_llPosition;
- size_t len = (size_t)dwBytesToRead;
+ size_t len = dwBytesToRead;
+
+ if (!m_bDTS) {
+ if (pos < sizeof(m_header) && len > 0) {
+ size_t l = std::min(len, size_t(sizeof(m_header) - pos));
+ memcpy(pbBuffer, &((BYTE*)&m_header)[pos], l);
+ pbBuffer += l;
+ pos += l;
+ len -= l;
+ }
- if (pos < sizeof(m_header) && len > 0) {
- size_t l = std::min(len, size_t(sizeof(m_header) - pos));
- memcpy(pbBuffer, &((BYTE*)&m_header)[pos], l);
- pbBuffer += l;
- pos += l;
- len -= l;
+ pos -= sizeof(m_header);
}
- pos -= sizeof(m_header);
-
while (pos >= 0 && pos < m_llLength && len > 0) {
RAW_READ_INFO rawreadinfo;
- rawreadinfo.SectorCount = 1;
rawreadinfo.TrackMode = CDDA;
- UINT sector = m_nStartSector + int(pos / RAW_SECTOR_SIZE);
- __int64 offset = pos % RAW_SECTOR_SIZE;
+ UINT sector = m_nStartSector + UINT(pos / RAW_SECTOR_SIZE);
+ UINT offset = pos % RAW_SECTOR_SIZE;
+
+ // Reading 20 sectors at once seems to be a good trade-off between performance and compatibility
+ rawreadinfo.SectorCount = std::min(20u, m_nStopSector - sector);
+
+ if (m_buff.size() < rawreadinfo.SectorCount * RAW_SECTOR_SIZE) {
+ m_buff.resize(rawreadinfo.SectorCount * RAW_SECTOR_SIZE);
+ }
rawreadinfo.DiskOffset.QuadPart = sector * 2048;
- DWORD BytesReturned = 0;
- BOOL b = DeviceIoControl(
- m_hDrive, IOCTL_CDROM_RAW_READ,
- &rawreadinfo, sizeof(rawreadinfo),
- buff, RAW_SECTOR_SIZE,
- &BytesReturned, 0);
- UNREFERENCED_PARAMETER(b);
+ DWORD dwBytesReturned = 0;
+ VERIFY(DeviceIoControl(m_hDrive, IOCTL_CDROM_RAW_READ,
+ &rawreadinfo, sizeof(rawreadinfo),
+ m_buff.data(), (DWORD)m_buff.size(),
+ &dwBytesReturned, 0));
- size_t l = (size_t)std::min(std::min(len, size_t(RAW_SECTOR_SIZE - offset)), size_t(m_llLength - pos));
- memcpy(pbBuffer, &buff[offset], l);
+ size_t l = std::min(std::min(len, m_buff.size() - offset), size_t(m_llLength - pos));
+ memcpy(pbBuffer, &m_buff[offset], l);
pbBuffer += l;
pos += l;
@@ -485,7 +524,10 @@ HRESULT CCDDAStream::Read(PBYTE pbBuffer, DWORD dwBytesToRead, BOOL bAlign, LPDW
LONGLONG CCDDAStream::Size(LONGLONG* pSizeAvailable)
{
- LONGLONG size = sizeof(m_header) + m_llLength;
+ LONGLONG size = m_llLength;
+ if (!m_bDTS) {
+ size += sizeof(m_header);
+ }
if (pSizeAvailable) {
*pSizeAvailable = size;
}
diff --git a/src/filters/reader/CDDAReader/CDDAReader.h b/src/filters/reader/CDDAReader/CDDAReader.h
index 6ddaed990..fb34c6722 100644
--- a/src/filters/reader/CDDAReader/CDDAReader.h
+++ b/src/filters/reader/CDDAReader/CDDAReader.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,7 @@
#pragma once
+#include <vector>
#include <atlbase.h>
#include "winddk/devioctl.h"
#include "winddk/ntddcdrm.h"
@@ -69,9 +70,11 @@ private:
HANDLE m_hDrive;
CDROM_TOC m_TOC;
UINT m_nFirstSector, m_nStartSector, m_nStopSector;
+ bool m_bDTS;
WAVEChunck m_header;
+ std::vector<BYTE> m_buff;
public:
CCDDAStream();
virtual ~CCDDAStream();
@@ -81,6 +84,8 @@ public:
bool Load(const WCHAR* fnw);
+ bool IsDTS() const { return m_bDTS; };
+
// overrides
HRESULT SetPointer(LONGLONG llPos);
HRESULT Read(PBYTE pbBuffer, DWORD dwBytesToRead, BOOL bAlign, LPDWORD pdwBytesRead);
diff --git a/src/filters/reader/CDDAReader/CDDAReader.vcxproj b/src/filters/reader/CDDAReader/CDDAReader.vcxproj
index 99c42cf64..d8a4dbe97 100644
--- a/src/filters/reader/CDDAReader/CDDAReader.vcxproj
+++ b/src/filters/reader/CDDAReader/CDDAReader.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,128 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>CDDAReader.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>CDDAReader.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>CDDAReader.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>CDDAReader.def</ModuleDefinitionFile>
@@ -172,30 +80,6 @@
<AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CDDAReader.cpp" />
<ClCompile Include="stdafx.cpp">
@@ -208,13 +92,13 @@
<ItemGroup>
<ClInclude Include="CDDAReader.h" />
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="CDDAReader.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/reader/CDDAReader/CDDAReader.vcxproj.filters b/src/filters/reader/CDDAReader/CDDAReader.vcxproj.filters
index d7904b8ac..0df042c20 100644
--- a/src/filters/reader/CDDAReader/CDDAReader.vcxproj.filters
+++ b/src/filters/reader/CDDAReader/CDDAReader.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{3251baa6-81ad-4ee0-a183-a0ace02fd96c}</UniqueIdentifier>
diff --git a/src/filters/reader/CDXAReader/CDXAReader.cpp b/src/filters/reader/CDXAReader/CDXAReader.cpp
index b27bc189f..8eee77f33 100644
--- a/src/filters/reader/CDXAReader/CDXAReader.cpp
+++ b/src/filters/reader/CDXAReader/CDXAReader.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -475,13 +475,13 @@ bool CCDXAStream::LookForMediaSubType()
_stprintf_s(number, _countof(number), _T("%d"), j);
TCHAR pattern[256 + 1];
- ULONG len = 256;
- if (ERROR_SUCCESS != subkey.QueryStringValue(number, pattern, &len)) {
+ ULONG lenValue = 256;
+ if (ERROR_SUCCESS != subkey.QueryStringValue(number, pattern, &lenValue)) {
break;
}
CString p = pattern;
- p += ',';
+ p += _T(',');
__int64 offset = 0;
DWORD cb = 0;
diff --git a/src/filters/reader/CDXAReader/CDXAReader.vcxproj b/src/filters/reader/CDXAReader/CDXAReader.vcxproj
index af0da882b..c593478c4 100644
--- a/src/filters/reader/CDXAReader/CDXAReader.vcxproj
+++ b/src/filters/reader/CDXAReader/CDXAReader.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,128 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>CDXAReader.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>CDXAReader.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>CDXAReader.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>CDXAReader.def</ModuleDefinitionFile>
@@ -172,30 +80,6 @@
<AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CDXAReader.cpp" />
<ClCompile Include="stdafx.cpp">
@@ -208,13 +92,13 @@
<ItemGroup>
<ClInclude Include="CDXAReader.h" />
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="CDXAReader.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/reader/CDXAReader/CDXAReader.vcxproj.filters b/src/filters/reader/CDXAReader/CDXAReader.vcxproj.filters
index 3c9763333..47d4a3b50 100644
--- a/src/filters/reader/CDXAReader/CDXAReader.vcxproj.filters
+++ b/src/filters/reader/CDXAReader/CDXAReader.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{bee90cb9-7ace-4e7d-b77a-1b4d710b5a25}</UniqueIdentifier>
diff --git a/src/filters/reader/VTSReader/VTSReader.vcxproj b/src/filters/reader/VTSReader/VTSReader.vcxproj
index d67e4185d..9f960ef2c 100644
--- a/src/filters/reader/VTSReader/VTSReader.vcxproj
+++ b/src/filters/reader/VTSReader/VTSReader.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,152 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>VTSReader.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>VTSReader.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>VTSReader.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>VTSReader.def</ModuleDefinitionFile>
@@ -207,14 +91,14 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
<ClInclude Include="VTSReader.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="VTSReader.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/reader/VTSReader/VTSReader.vcxproj.filters b/src/filters/reader/VTSReader/VTSReader.vcxproj.filters
index f9804422c..1f898d5d8 100644
--- a/src/filters/reader/VTSReader/VTSReader.vcxproj.filters
+++ b/src/filters/reader/VTSReader/VTSReader.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{6f84c2e5-5b7f-4a7e-8f4b-1f45a45a3078}</UniqueIdentifier>
diff --git a/src/filters/renderer/MpcAudioRenderer/IMpcAudioRendererFilter.h b/src/filters/renderer/MpcAudioRenderer/IMpcAudioRendererFilter.h
deleted file mode 100644
index a9e33ebf5..000000000
--- a/src/filters/renderer/MpcAudioRenderer/IMpcAudioRendererFilter.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * (C) 2010-2013 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-interface __declspec(uuid("495D2C66-D430-439b-9DEE-40F9B7929BBA"))
-IMpcAudioRendererFilter :
-public IUnknown {
- STDMETHOD(Apply()) PURE;
-
- STDMETHOD(SetWasapiMode(BOOL nValue)) PURE;
- STDMETHOD_(BOOL, GetWasapiMode()) PURE;
- STDMETHOD(SetMuteFastForward(BOOL nValue)) PURE;
- STDMETHOD_(BOOL, GetMuteFastForward()) PURE;
- STDMETHOD(SetSoundDevice(CString nValue)) PURE;
- STDMETHOD_(CString, GetSoundDevice()) PURE;
-};
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.cpp b/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.cpp
deleted file mode 100644
index 432b2a5fc..000000000
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.cpp
+++ /dev/null
@@ -1,1321 +0,0 @@
-/*
- * (C) 2009-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-
-#ifdef STANDALONE_FILTER
-#include <InitGuid.h>
-#endif
-#include "moreuuids.h"
-#include "../../../DSUtil/DSUtil.h"
-#include <ks.h>
-#include <ksmedia.h>
-
-#include "MpcAudioRenderer.h"
-
-
-#ifdef STANDALONE_FILTER
-
-const AMOVIESETUP_MEDIATYPE sudPinTypesIn[] = {
- {&GUID_NULL},
-};
-
-const AMOVIESETUP_PIN sudpPins[] = {
- {L"Input", FALSE, FALSE, FALSE, FALSE, &CLSID_NULL, nullptr, _countof(sudPinTypesIn), sudPinTypesIn},
-};
-
-const AMOVIESETUP_FILTER sudFilter[] = {
- {&__uuidof(CMpcAudioRenderer), MpcAudioRendererName, 0x40000001, _countof(sudpPins), sudpPins, CLSID_AudioRendererCategory},
-};
-
-CFactoryTemplate g_Templates[] = {
- {sudFilter[0].strName, &__uuidof(CMpcAudioRenderer), CreateInstance<CMpcAudioRenderer>, nullptr, &sudFilter[0]},
- {L"CMpcAudioRendererPropertyPage", &__uuidof(CMpcAudioRendererSettingsWnd), CreateInstance<CInternalPropertyPageTempl<CMpcAudioRendererSettingsWnd>>},
-};
-
-int g_cTemplates = _countof(g_Templates);
-
-STDAPI DllRegisterServer()
-{
- return AMovieDllRegisterServer2(TRUE);
-}
-
-STDAPI DllUnregisterServer()
-{
- return AMovieDllRegisterServer2(FALSE);
-}
-
-#include "../../FilterApp.h"
-
-CFilterApp theApp;
-
-#endif
-
-static GUID lpSoundGUID = {0xdef00000, 0x9c6d, 0x47ed, {0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03}}; //DSDEVID_DefaultPlayback from dsound.h
-
-bool CALLBACK DSEnumProc2(LPGUID lpGUID,
- LPCTSTR lpszDesc,
- LPCTSTR lpszDrvName,
- LPVOID lpContext)
-{
- CString* pStr = (CString*)lpContext;
- ASSERT(pStr);
- CString strGUID = *pStr;
-
- if (lpGUID != nullptr) { // nullptr only for "Primary Sound Driver".
- if (strGUID == lpszDesc) {
- memcpy((void*)&lpSoundGUID, lpGUID, sizeof(GUID));
- }
- }
-
- return TRUE;
-}
-
-CMpcAudioRenderer::CMpcAudioRenderer(LPUNKNOWN punk, HRESULT* phr)
- : CBaseRenderer(__uuidof(this), MpcAudioRendererName, punk, phr)
- , m_pDSBuffer(nullptr)
- , m_pSoundTouch(nullptr)
- , m_pDS(nullptr)
- , m_dwDSWriteOff(0)
- , m_nDSBufSize(0)
- , m_dRate(1.0)
- , m_pReferenceClock(nullptr)
- , m_pWaveFileFormat(nullptr)
- , m_pMMDevice(nullptr)
- , m_pAudioClient(nullptr)
- , m_pRenderClient(nullptr)
- , m_useWASAPI(true)
- , m_bMuteFastForward(false)
- , m_csSound_Device(_T(""))
- , m_nFramesInBuffer(0)
- , m_hnsPeriod(0)
- , m_hTask(nullptr)
- , m_bufferSize(0)
- , m_isAudioClientStarted(false)
- , m_lastBufferTime(0)
- , m_hnsActualDuration(0)
- , m_lVolume(DSBVOLUME_MIN)
- , m_pfAvSetMmThreadCharacteristicsW(nullptr)
- , m_pfAvRevertMmThreadCharacteristics(nullptr)
-{
-#ifdef STANDALONE_FILTER
- CRegKey key;
- ULONG len;
-
- if (ERROR_SUCCESS == key.Open(HKEY_CURRENT_USER, _T("Software\\MPC-HC\\Filters\\MPC-HC Audio Renderer"), KEY_READ)) {
- DWORD dw;
- TCHAR buff[256];
- if (ERROR_SUCCESS == key.QueryDWORDValue(_T("UseWasapi"), dw)) {
- m_useWASAPI = !!dw;
- }
- if (ERROR_SUCCESS == key.QueryDWORDValue(_T("MuteFastForward"), dw)) {
- m_bMuteFastForward = !!dw;
- }
- len = _countof(buff);
- ZeroMemory(buff, sizeof(buff));
- if (ERROR_SUCCESS == key.QueryStringValue(_T("SoundDevice"), buff, &len)) {
- m_csSound_Device = CString(buff);
- }
- }
-#else
- m_useWASAPI = !!AfxGetApp()->GetProfileInt(_T("Filters\\MPC-HC Audio Renderer"), _T("UseWasapi"), m_useWASAPI);
- m_bMuteFastForward = !!AfxGetApp()->GetProfileInt(_T("Filters\\MPC-HC Audio Renderer"), _T("MuteFastForward"), m_bMuteFastForward);
- m_csSound_Device = AfxGetApp()->GetProfileString(_T("Filters\\MPC-HC Audio Renderer"), _T("SoundDevice"));
-#endif
- m_useWASAPIAfterRestart = m_useWASAPI;
-
-
- // Load Vista+ specific DLLs
- m_hLibAVRT = LoadLibrary(L"avrt.dll");
- if (m_hLibAVRT != nullptr) {
- m_pfAvSetMmThreadCharacteristicsW = (PTR_AvSetMmThreadCharacteristicsW) GetProcAddress(m_hLibAVRT, "AvSetMmThreadCharacteristicsW");
- m_pfAvRevertMmThreadCharacteristics = (PTR_AvRevertMmThreadCharacteristics) GetProcAddress(m_hLibAVRT, "AvRevertMmThreadCharacteristics");
- } else {
- m_useWASAPI = false; // WASAPI is not available below Vista
- }
-
- TRACE(_T("CMpcAudioRenderer constructor\n"));
- if (!m_useWASAPI) {
- DirectSoundEnumerate((LPDSENUMCALLBACK)DSEnumProc2, (void*)&m_csSound_Device);
- m_pSoundTouch = DEBUG_NEW soundtouch::SoundTouch();
- *phr = DirectSoundCreate8(&lpSoundGUID, &m_pDS, nullptr);
- }
-}
-
-CMpcAudioRenderer::~CMpcAudioRenderer()
-{
- Stop();
-
- SAFE_DELETE(m_pSoundTouch);
- SAFE_RELEASE(m_pDSBuffer);
- SAFE_RELEASE(m_pDS);
-
- SAFE_RELEASE(m_pRenderClient);
- SAFE_RELEASE(m_pAudioClient);
- SAFE_RELEASE(m_pMMDevice);
-
- if (m_pReferenceClock) {
- SetSyncSource(nullptr);
- SAFE_RELEASE(m_pReferenceClock);
- }
-
- if (m_pWaveFileFormat) {
- BYTE* p = (BYTE*)m_pWaveFileFormat;
- SAFE_DELETE_ARRAY(p);
- }
-
- if (m_hTask != nullptr && m_pfAvRevertMmThreadCharacteristics != nullptr) {
- m_pfAvRevertMmThreadCharacteristics(m_hTask);
- }
-
- if (m_hLibAVRT) {
- FreeLibrary(m_hLibAVRT);
- }
-}
-
-HRESULT CMpcAudioRenderer::CheckInputType(const CMediaType* pmt)
-{
- return CheckMediaType(pmt);
-}
-
-HRESULT CMpcAudioRenderer::CheckMediaType(const CMediaType* pmt)
-{
- HRESULT hr = S_OK;
- if (pmt == nullptr) {
- return E_INVALIDARG;
- }
- TRACE(_T("CMpcAudioRenderer::CheckMediaType\n"));
- WAVEFORMATEX* pwfx = (WAVEFORMATEX*) pmt->Format();
-
- if (pwfx == nullptr) {
- return VFW_E_TYPE_NOT_ACCEPTED;
- }
-
- if ((pmt->majortype != MEDIATYPE_Audio) ||
- (pmt->formattype != FORMAT_WaveFormatEx)) {
- TRACE(_T("CMpcAudioRenderer::CheckMediaType Not supported\n"));
- return VFW_E_TYPE_NOT_ACCEPTED;
- }
-
- if (m_useWASAPI) {
- hr = CheckAudioClient((WAVEFORMATEX*)nullptr);
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::CheckMediaType Error on check audio client\n"));
- return hr;
- }
- if (!m_pAudioClient) {
- TRACE(_T("CMpcAudioRenderer::CheckMediaType Error, audio client not loaded\n"));
- return VFW_E_CANNOT_CONNECT;
- }
-
- if (m_pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE, pwfx, nullptr) != S_OK) {
- TRACE(_T("CMpcAudioRenderer::CheckMediaType WASAPI client refused the format\n"));
- return VFW_E_TYPE_NOT_ACCEPTED;
- }
- TRACE(_T("CMpcAudioRenderer::CheckMediaType WASAPI client accepted the format\n"));
- } else if (pwfx->wFormatTag != WAVE_FORMAT_PCM) {
- return VFW_E_TYPE_NOT_ACCEPTED;
- }
- return S_OK;
-}
-
-void CMpcAudioRenderer::OnReceiveFirstSample(IMediaSample* pMediaSample)
-{
- if (!m_useWASAPI) {
- ClearBuffer();
- }
-}
-
-BOOL CMpcAudioRenderer::ScheduleSample(IMediaSample* pMediaSample)
-{
- REFERENCE_TIME StartSample;
- REFERENCE_TIME EndSample;
-
- // Is someone pulling our leg
- if (pMediaSample == nullptr) {
- return FALSE;
- }
-
- // Get the next sample due up for rendering. If there aren't any ready
- // then GetNextSampleTimes returns an error. If there is one to be done
- // then it succeeds and yields the sample times. If it is due now then
- // it returns S_OK other if it's to be done when due it returns S_FALSE
- HRESULT hr = GetSampleTimes(pMediaSample, &StartSample, &EndSample);
- if (FAILED(hr)) {
- return FALSE;
- }
-
- // If we don't have a reference clock then we cannot set up the advise
- // time so we simply set the event indicating an image to render. This
- // will cause us to run flat out without any timing or synchronization
- if (hr == S_OK) {
- EXECUTE_ASSERT(SetEvent((HANDLE) m_RenderEvent));
- return TRUE;
- }
-
- if (m_dRate <= 1.1) {
- ASSERT(m_dwAdvise == 0);
- ASSERT(m_pClock);
- WaitForSingleObject((HANDLE)m_RenderEvent, 0);
-
- hr = m_pClock->AdviseTime((REFERENCE_TIME) m_tStart, StartSample, (HEVENT)(HANDLE) m_RenderEvent, &m_dwAdvise);
- if (SUCCEEDED(hr)) {
- return TRUE;
- }
- } else {
- DoRenderSample(pMediaSample);
- }
-
- // We could not schedule the next sample for rendering despite the fact
- // we have a valid sample here. This is a fair indication that either
- // the system clock is wrong or the time stamp for the sample is duff
- ASSERT(m_dwAdvise == 0);
-
- return FALSE;
-}
-
-HRESULT CMpcAudioRenderer::DoRenderSample(IMediaSample* pMediaSample)
-{
- if (m_useWASAPI) {
- return DoRenderSampleWasapi(pMediaSample);
- } else {
- return DoRenderSampleDirectSound(pMediaSample);
- }
-}
-
-STDMETHODIMP CMpcAudioRenderer::NonDelegatingQueryInterface(REFIID riid, void** ppv)
-{
- if (riid == IID_IReferenceClock) {
- return GetReferenceClockInterface(riid, ppv);
- } else if (riid == IID_IDispatch) {
- return GetInterface(static_cast<IDispatch*>(this), ppv);
- } else if (riid == IID_IBasicAudio) {
- return GetInterface(static_cast<IBasicAudio*>(this), ppv);
- } else if (riid == __uuidof(ISpecifyPropertyPages)) {
- return GetInterface(static_cast<ISpecifyPropertyPages*>(this), ppv);
- } else if (riid == __uuidof(ISpecifyPropertyPages2)) {
- return GetInterface(static_cast<ISpecifyPropertyPages2*>(this), ppv);
- } else if (riid == __uuidof(IMpcAudioRendererFilter)) {
- return GetInterface(static_cast<IMpcAudioRendererFilter*>(this), ppv);
- }
-
- return CBaseRenderer::NonDelegatingQueryInterface(riid, ppv);
-}
-
-HRESULT CMpcAudioRenderer::SetMediaType(const CMediaType* pmt)
-{
- CheckPointer(pmt, E_POINTER);
- TRACE(_T("CMpcAudioRenderer::SetMediaType\n"));
-
- if (m_useWASAPI) {
- // New media type set but render client already initialized => reset it
- if (m_pRenderClient != nullptr) {
- WAVEFORMATEX* pNewWf = (WAVEFORMATEX*) pmt->Format();
- TRACE(_T("CMpcAudioRenderer::SetMediaType Render client already initialized. Reinitialization...\n"));
- if (FAILED(CheckAudioClient(pNewWf))) {
- TRACE(_T("CMpcAudioRenderer::SetMediaType Error on check audio client\n"));
- return E_FAIL;
- }
- }
- }
-
- if (m_pWaveFileFormat) {
- BYTE* p = (BYTE*)m_pWaveFileFormat;
- SAFE_DELETE_ARRAY(p);
- }
- m_pWaveFileFormat = nullptr;
-
- WAVEFORMATEX* pwf = (WAVEFORMATEX*) pmt->Format();
- if (pwf != nullptr) {
- int size = sizeof(WAVEFORMATEX) + pwf->cbSize;
-
- m_pWaveFileFormat = (WAVEFORMATEX*)DEBUG_NEW BYTE[size];
- if (!m_pWaveFileFormat) {
- return E_OUTOFMEMORY;
- }
-
- memcpy(m_pWaveFileFormat, pwf, size);
-
-
- if (!m_useWASAPI && m_pSoundTouch && (pwf->nChannels <= 2)) {
- m_pSoundTouch->setSampleRate(pwf->nSamplesPerSec);
- m_pSoundTouch->setChannels(pwf->nChannels);
- m_pSoundTouch->setTempoChange(0);
- m_pSoundTouch->setPitchSemiTones(0);
- }
- }
-
- return CBaseRenderer::SetMediaType(pmt);
-}
-
-HRESULT CMpcAudioRenderer::CompleteConnect(IPin* pReceivePin)
-{
- HRESULT hr = S_OK;
- TRACE(_T("CMpcAudioRenderer::CompleteConnect\n"));
-
- if (!m_useWASAPI && !m_pDS) {
- return E_FAIL;
- }
-
- if (SUCCEEDED(hr)) {
- hr = CBaseRenderer::CompleteConnect(pReceivePin);
- }
- if (SUCCEEDED(hr)) {
- hr = InitCoopLevel();
- }
-
- if (!m_useWASAPI) {
- if (SUCCEEDED(hr)) {
- hr = CreateDSBuffer();
- }
- }
- if (SUCCEEDED(hr)) {
- TRACE(_T("CMpcAudioRenderer::CompleteConnect Success\n"));
- }
- return hr;
-}
-
-STDMETHODIMP CMpcAudioRenderer::Run(REFERENCE_TIME tStart)
-{
- HRESULT hr;
-
- if (m_State == State_Running) {
- return NOERROR;
- }
-
- if (m_useWASAPI) {
- hr = CheckAudioClient(m_pWaveFileFormat);
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::Run Error on check audio client\n"));
- return hr;
- }
- // Rather start the client at the last moment when the buffer is fed
- /*hr = pAudioClient->Start();
- if (FAILED (hr))
- {
- TRACE(_T("CMpcAudioRenderer::Run Start error"));
- return hr;
- }*/
- } else {
- if (m_pDSBuffer &&
- m_pPosition &&
- m_pWaveFileFormat &&
- SUCCEEDED(m_pPosition->GetRate(&m_dRate))) {
- if (m_dRate < 1.0) {
- hr = m_pDSBuffer->SetFrequency((long)(m_pWaveFileFormat->nSamplesPerSec * m_dRate));
- if (FAILED(hr)) {
- return hr;
- }
- } else {
- hr = m_pDSBuffer->SetFrequency((long)m_pWaveFileFormat->nSamplesPerSec);
- m_pSoundTouch->setRateChange((float)(m_dRate - 1.0) * 100);
-
- if (m_bMuteFastForward) {
- if (m_dRate == 1.0) {
- m_pDSBuffer->SetVolume(m_lVolume);
- } else {
- m_pDSBuffer->SetVolume(DSBVOLUME_MIN);
- }
- }
- }
- }
-
- ClearBuffer();
- }
- hr = CBaseRenderer::Run(tStart);
-
- return hr;
-}
-
-STDMETHODIMP CMpcAudioRenderer::Stop()
-{
- if (m_pDSBuffer) {
- m_pDSBuffer->Stop();
- }
- m_isAudioClientStarted = false;
-
- return CBaseRenderer::Stop();
-};
-
-STDMETHODIMP CMpcAudioRenderer::Pause()
-{
- if (m_pDSBuffer) {
- m_pDSBuffer->Stop();
- }
- if (m_pAudioClient && m_isAudioClientStarted) {
- m_pAudioClient->Stop();
- }
- m_isAudioClientStarted = false;
-
- return CBaseRenderer::Pause();
-};
-
-// === IDispatch
-STDMETHODIMP CMpcAudioRenderer::GetTypeInfoCount(UINT* pctinfo)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CMpcAudioRenderer::GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo** pptinfo)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CMpcAudioRenderer::GetIDsOfNames(REFIID riid, OLECHAR** rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CMpcAudioRenderer::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr)
-{
- return E_NOTIMPL;
-}
-
-// === IBasicAudio
-STDMETHODIMP CMpcAudioRenderer::put_Volume(long lVolume)
-{
- m_lVolume = lVolume;
- if (!m_useWASAPI && m_pDSBuffer) {
- return m_pDSBuffer->SetVolume(lVolume);
- }
-
- return S_OK;
-}
-
-STDMETHODIMP CMpcAudioRenderer::get_Volume(long* plVolume)
-{
- if (!m_useWASAPI && m_pDSBuffer) {
- return m_pDSBuffer->GetVolume(plVolume);
- }
-
- return S_OK;
-}
-
-STDMETHODIMP CMpcAudioRenderer::put_Balance(long lBalance)
-{
- if (!m_useWASAPI && m_pDSBuffer) {
- return m_pDSBuffer->SetPan(lBalance);
- }
-
- return S_OK;
-}
-
-STDMETHODIMP CMpcAudioRenderer::get_Balance(long* plBalance)
-{
- if (!m_useWASAPI && m_pDSBuffer) {
- return m_pDSBuffer->GetPan(plBalance);
- }
-
- return S_OK;
-}
-
-// === ISpecifyPropertyPages2
-STDMETHODIMP CMpcAudioRenderer::GetPages(CAUUID* pPages)
-{
- CheckPointer(pPages, E_POINTER);
-
- HRESULT hr = S_OK;
-
- pPages->cElems = 1;
- pPages->pElems = (GUID*)CoTaskMemAlloc(sizeof(GUID) * pPages->cElems);
- if (pPages->pElems != nullptr) {
- pPages->pElems[0] = __uuidof(CMpcAudioRendererSettingsWnd);
- } else {
- hr = E_OUTOFMEMORY;
- }
-
- return hr;
-}
-
-STDMETHODIMP CMpcAudioRenderer::CreatePage(const GUID& guid, IPropertyPage** ppPage)
-{
- CheckPointer(ppPage, E_POINTER);
-
- if (*ppPage != nullptr) {
- return E_INVALIDARG;
- }
-
- HRESULT hr;
-
- if (guid == __uuidof(CMpcAudioRendererSettingsWnd)) {
- (*ppPage = DEBUG_NEW CInternalPropertyPageTempl<CMpcAudioRendererSettingsWnd>(nullptr, &hr))->AddRef();
- }
-
- return *ppPage ? S_OK : E_FAIL;
-}
-
-// === IMpcAudioRendererFilter
-STDMETHODIMP CMpcAudioRenderer::Apply()
-{
-#ifdef STANDALONE_FILTER
- CRegKey key;
- if (ERROR_SUCCESS == key.Create(HKEY_CURRENT_USER, _T("Software\\MPC-HC\\Filters\\MPC-HC Audio Renderer"))) {
- key.SetDWORDValue(_T("UseWasapi"), m_useWASAPIAfterRestart);
- key.SetDWORDValue(_T("MuteFastForward"), m_bMuteFastForward);
- key.SetStringValue(_T("SoundDevice"), m_csSound_Device);
- }
-#else
- AfxGetApp()->WriteProfileInt(_T("Filters\\MPC-HC Audio Renderer"), _T("UseWasapi"), m_useWASAPI);
- AfxGetApp()->WriteProfileInt(_T("Filters\\MPC-HC Audio Renderer"), _T("MuteFastForward"), m_bMuteFastForward);
- AfxGetApp()->WriteProfileString(_T("Filters\\MPC-HC Audio Renderer"), _T("SoundDevice"), m_csSound_Device);
-#endif
-
- return S_OK;
-}
-
-STDMETHODIMP CMpcAudioRenderer::SetWasapiMode(BOOL nValue)
-{
- CAutoLock cAutoLock(&m_csProps);
- m_useWASAPIAfterRestart = !!nValue;
- return S_OK;
-}
-STDMETHODIMP_(BOOL) CMpcAudioRenderer::GetWasapiMode()
-{
- CAutoLock cAutoLock(&m_csProps);
- return m_useWASAPIAfterRestart;
-}
-
-STDMETHODIMP CMpcAudioRenderer::SetMuteFastForward(BOOL nValue)
-{
- CAutoLock cAutoLock(&m_csProps);
- m_bMuteFastForward = !!nValue;
- return S_OK;
-}
-STDMETHODIMP_(BOOL) CMpcAudioRenderer::GetMuteFastForward()
-{
- CAutoLock cAutoLock(&m_csProps);
- return m_bMuteFastForward;
-}
-
-STDMETHODIMP CMpcAudioRenderer::SetSoundDevice(CString nValue)
-{
- CAutoLock cAutoLock(&m_csProps);
- m_csSound_Device = nValue;
- return S_OK;
-}
-STDMETHODIMP_(CString) CMpcAudioRenderer::GetSoundDevice()
-{
- CAutoLock cAutoLock(&m_csProps);
- return m_csSound_Device;
-}
-
-HRESULT CMpcAudioRenderer::GetReferenceClockInterface(REFIID riid, void** ppv)
-{
- HRESULT hr = S_OK;
-
- if (m_pReferenceClock) {
- return m_pReferenceClock->NonDelegatingQueryInterface(riid, ppv);
- }
-
- m_pReferenceClock = DEBUG_NEW CBaseReferenceClock(NAME("MPC-HC Audio Clock"), nullptr, &hr);
- if (!m_pReferenceClock) {
- return E_OUTOFMEMORY;
- }
-
- m_pReferenceClock->AddRef();
-
- hr = SetSyncSource(m_pReferenceClock);
- if (FAILED(hr)) {
- SetSyncSource(nullptr);
- return hr;
- }
-
- return GetReferenceClockInterface(riid, ppv);
-}
-
-HRESULT CMpcAudioRenderer::EndOfStream()
-{
- if (m_pDSBuffer) {
- m_pDSBuffer->Stop();
- }
-#if !FILEWRITER
- if (m_pAudioClient && m_isAudioClientStarted) {
- m_pAudioClient->Stop();
- }
-#endif
- m_isAudioClientStarted = false;
-
- return CBaseRenderer::EndOfStream();
-}
-
-#pragma region DirectSound
-
-HRESULT CMpcAudioRenderer::CreateDSBuffer()
-{
- CheckPointer(m_pWaveFileFormat, E_POINTER);
-
- HRESULT hr = S_OK;
- LPDIRECTSOUNDBUFFER pDSBPrimary = nullptr;
- DSBUFFERDESC dsbd;
- DSBUFFERDESC cDSBufferDesc;
- DSBCAPS bufferCaps;
- DWORD dwDSBufSize = m_pWaveFileFormat->nAvgBytesPerSec * 4;
-
- ZeroMemory(&bufferCaps, sizeof(bufferCaps));
- ZeroMemory(&dsbd, sizeof(DSBUFFERDESC));
-
- dsbd.dwSize = sizeof(DSBUFFERDESC);
- dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER;
- dsbd.dwBufferBytes = 0;
- dsbd.lpwfxFormat = nullptr;
- if (SUCCEEDED(hr = m_pDS->CreateSoundBuffer(&dsbd, &pDSBPrimary, nullptr))) {
- hr = pDSBPrimary->SetFormat(m_pWaveFileFormat);
- ASSERT(SUCCEEDED(hr));
- SAFE_RELEASE(pDSBPrimary);
- }
-
-
- SAFE_RELEASE(m_pDSBuffer);
- cDSBufferDesc.dwSize = sizeof(DSBUFFERDESC);
- cDSBufferDesc.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_GETCURRENTPOSITION2 |
- DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY;
- cDSBufferDesc.dwBufferBytes = dwDSBufSize;
- cDSBufferDesc.dwReserved = 0;
- cDSBufferDesc.lpwfxFormat = m_pWaveFileFormat;
- cDSBufferDesc.guid3DAlgorithm = GUID_NULL;
-
- hr = m_pDS->CreateSoundBuffer(&cDSBufferDesc, &m_pDSBuffer, nullptr);
-
- m_nDSBufSize = 0;
- if (SUCCEEDED(hr)) {
- bufferCaps.dwSize = sizeof(bufferCaps);
- hr = m_pDSBuffer->GetCaps(&bufferCaps);
- }
- if (SUCCEEDED(hr)) {
- m_nDSBufSize = bufferCaps.dwBufferBytes;
- hr = ClearBuffer();
- m_pDSBuffer->SetFrequency((long)(m_pWaveFileFormat->nSamplesPerSec * m_dRate));
- }
-
- return hr;
-}
-
-HRESULT CMpcAudioRenderer::ClearBuffer()
-{
- HRESULT hr = S_FALSE;
- void* pDSLockedBuffer = nullptr;
- DWORD dwDSLockedSize = 0;
-
- if (m_pDSBuffer) {
- m_dwDSWriteOff = 0;
- m_pDSBuffer->SetCurrentPosition(0);
-
- hr = m_pDSBuffer->Lock(0, 0, &pDSLockedBuffer, &dwDSLockedSize, nullptr, nullptr, DSBLOCK_ENTIREBUFFER);
- if (SUCCEEDED(hr)) {
- ZeroMemory(pDSLockedBuffer, dwDSLockedSize);
- hr = m_pDSBuffer->Unlock(pDSLockedBuffer, dwDSLockedSize, nullptr, 0);
- }
- }
-
- return hr;
-}
-
-HRESULT CMpcAudioRenderer::InitCoopLevel()
-{
- HRESULT hr;
- IVideoWindow* pVideoWindow = nullptr;
- HWND hWnd = nullptr;
-
- hr = m_pGraph->QueryInterface(IID_PPV_ARGS(&pVideoWindow));
- if (SUCCEEDED(hr)) {
- pVideoWindow->get_Owner((OAHWND*)&hWnd);
- SAFE_RELEASE(pVideoWindow);
- }
- if (!hWnd) {
- hWnd = GetTopWindow(nullptr);
- }
-
- ASSERT(hWnd != nullptr);
- if (!m_useWASAPI) {
- hr = m_pDS->SetCooperativeLevel(hWnd, DSSCL_PRIORITY);
- } else if (m_hTask == nullptr) {
- // Ask MMCSS to temporarily boost the thread priority
- // to reduce glitches while the low-latency stream plays.
- DWORD taskIndex = 0;
-
- if (m_pfAvSetMmThreadCharacteristicsW) {
- m_hTask = m_pfAvSetMmThreadCharacteristicsW(_T("Pro Audio"), &taskIndex);
- TRACE(_T("CMpcAudioRenderer::InitCoopLevel Putting thread in higher priority for WASAPI mode (lowest latency)\n"));
- hr = GetLastError();
- if (m_hTask == nullptr) {
- return hr;
- }
- }
- }
-
- return hr;
-}
-
-HRESULT CMpcAudioRenderer::DoRenderSampleDirectSound(IMediaSample* pMediaSample)
-{
- HRESULT hr;
- DWORD dwStatus = 0;
- const long lSize = pMediaSample->GetActualDataLength();
- DWORD dwPlayCursor = 0;
- DWORD dwWriteCursor = 0;
-
- hr = m_pDSBuffer->GetStatus(&dwStatus);
-
- if (SUCCEEDED(hr) && (dwStatus & DSBSTATUS_BUFFERLOST)) {
- hr = m_pDSBuffer->Restore();
- }
-
- if ((SUCCEEDED(hr)) && ((dwStatus & DSBSTATUS_PLAYING) != DSBSTATUS_PLAYING)) {
- hr = m_pDSBuffer->Play(0, 0, DSBPLAY_LOOPING);
- ASSERT(SUCCEEDED(hr));
- }
-
- if (SUCCEEDED(hr)) {
- hr = m_pDSBuffer->GetCurrentPosition(&dwPlayCursor, &dwWriteCursor);
- }
-
- if (SUCCEEDED(hr)) {
- if (((dwPlayCursor < dwWriteCursor) &&
- (
- ((m_dwDSWriteOff >= dwPlayCursor) && (m_dwDSWriteOff <= dwWriteCursor))
- ||
- ((m_dwDSWriteOff < dwPlayCursor) && (m_dwDSWriteOff + lSize >= dwPlayCursor))
- )
- )
- ||
- ((dwWriteCursor < dwPlayCursor) &&
- (
- (m_dwDSWriteOff >= dwPlayCursor) || (m_dwDSWriteOff < dwWriteCursor)
- ))) {
- m_dwDSWriteOff = dwWriteCursor;
- }
-
- if (m_dwDSWriteOff >= (DWORD)m_nDSBufSize) {
- m_dwDSWriteOff = 0;
- }
- }
-
- if (SUCCEEDED(hr)) {
- hr = WriteSampleToDSBuffer(pMediaSample, nullptr);
- }
-
- return hr;
-}
-
-HRESULT CMpcAudioRenderer::WriteSampleToDSBuffer(IMediaSample* pMediaSample, bool* looped)
-{
- CheckPointer(m_pDSBuffer, E_POINTER);
-
- REFERENCE_TIME rtStart = 0;
- REFERENCE_TIME rtStop = 0;
- HRESULT hr;
- bool loop = false;
- void* pDSLockedBuffers[2] = { nullptr, nullptr };
- DWORD dwDSLockedSize[2] = { 0, 0 };
- BYTE* pMediaBuffer = nullptr;
- long lSize = pMediaSample->GetActualDataLength();
-
- hr = pMediaSample->GetPointer(&pMediaBuffer);
-
- if (m_dRate > 1.0) {
- int nBytePerSample = m_pWaveFileFormat->nChannels * (m_pWaveFileFormat->wBitsPerSample / 8);
- m_pSoundTouch->putSamples((const short*)pMediaBuffer, lSize / nBytePerSample);
- lSize = m_pSoundTouch->receiveSamples((short*)pMediaBuffer, lSize / nBytePerSample) * nBytePerSample;
- }
-
- pMediaSample->GetTime(&rtStart, &rtStop);
-
- if (rtStart < 0) {
- DWORD dwPercent = (DWORD)((-rtStart * 100) / (rtStop - rtStart));
- DWORD dwRemove = (lSize * dwPercent / 100);
-
- dwRemove = (dwRemove / m_pWaveFileFormat->nBlockAlign) * m_pWaveFileFormat->nBlockAlign;
- pMediaBuffer += dwRemove;
- lSize -= dwRemove;
- }
-
- if (SUCCEEDED(hr)) {
- hr = m_pDSBuffer->Lock(m_dwDSWriteOff, lSize, &pDSLockedBuffers[0], &dwDSLockedSize[0], &pDSLockedBuffers[1], &dwDSLockedSize[1], 0);
- }
- if (SUCCEEDED(hr)) {
- if (pDSLockedBuffers [0] != nullptr) {
- memcpy(pDSLockedBuffers[0], pMediaBuffer, dwDSLockedSize[0]);
- m_dwDSWriteOff += dwDSLockedSize[0];
- }
-
- if (pDSLockedBuffers [1] != nullptr) {
- memcpy(pDSLockedBuffers[1], &pMediaBuffer[dwDSLockedSize[0]], dwDSLockedSize[1]);
- m_dwDSWriteOff = dwDSLockedSize[1];
- loop = true;
- }
-
- hr = m_pDSBuffer->Unlock(pDSLockedBuffers[0], dwDSLockedSize[0], pDSLockedBuffers[1], dwDSLockedSize[1]);
- ASSERT(dwDSLockedSize [0] + dwDSLockedSize [1] == (DWORD)lSize);
- }
-
- if (SUCCEEDED(hr) && looped) {
- *looped = loop;
- }
-
- return hr;
-}
-
-#pragma endregion
-
-#pragma region WASAPI
-
-HRESULT CMpcAudioRenderer::DoRenderSampleWasapi(IMediaSample* pMediaSample)
-{
- HRESULT hr = S_OK;
- REFERENCE_TIME rtStart = 0;
- REFERENCE_TIME rtStop = 0;
- BYTE* pMediaBuffer = nullptr;
- BYTE* pInputBufferPointer = nullptr;
- BYTE* pInputBufferEnd = nullptr;
- BYTE* pData;
- m_bufferSize = pMediaSample->GetActualDataLength();
- const long lSize = m_bufferSize;
- pMediaSample->GetTime(&rtStart, &rtStop);
-
- AM_MEDIA_TYPE* pmt;
- if (SUCCEEDED(pMediaSample->GetMediaType(&pmt)) && pmt != nullptr) {
- CMediaType mt(*pmt);
- if ((WAVEFORMATEXTENSIBLE*)mt.Format() != nullptr) {
- hr = CheckAudioClient(&(((WAVEFORMATEXTENSIBLE*)mt.Format())->Format));
- } else {
- hr = CheckAudioClient((WAVEFORMATEX*)mt.Format());
- }
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::DoRenderSampleWasapi Error while checking audio client with input media type\n"));
- return hr;
- }
- DeleteMediaType(pmt);
- pmt = nullptr;
- }
-
- // Initialization
- hr = pMediaSample->GetPointer(&pMediaBuffer);
- if (FAILED(hr)) {
- return hr;
- }
-
- pInputBufferPointer = &pMediaBuffer[0];
- pInputBufferEnd = &pMediaBuffer[0] + lSize;
-
- WORD frameSize = m_pWaveFileFormat->nBlockAlign;
-
-
- // Sleep for half the buffer duration since last buffer feed
- DWORD currentTime = GetTickCount();
- if (m_lastBufferTime != 0 && m_hnsActualDuration != 0 && m_lastBufferTime < currentTime && (currentTime - m_lastBufferTime) < m_hnsActualDuration) {
- m_hnsActualDuration = m_hnsActualDuration - (currentTime - m_lastBufferTime);
- Sleep((DWORD)m_hnsActualDuration);
- }
-
- // Each loop fills one of the two buffers.
- while (pInputBufferPointer < pInputBufferEnd) {
- UINT32 numFramesPadding = 0;
- m_pAudioClient->GetCurrentPadding(&numFramesPadding);
- UINT32 numFramesAvailable = m_nFramesInBuffer - numFramesPadding;
-
- UINT32 nAvailableBytes = numFramesAvailable * frameSize;
- UINT32 nBytesToWrite = nAvailableBytes;
- // More room than enough in the output buffer
- if (pInputBufferPointer + nAvailableBytes > pInputBufferEnd) {
- nBytesToWrite = (UINT32)(pInputBufferEnd - pInputBufferPointer);
- numFramesAvailable = (UINT32)((float)nBytesToWrite / frameSize);
- }
-
- // Grab the next empty buffer from the audio device.
- hr = m_pRenderClient->GetBuffer(numFramesAvailable, &pData);
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::DoRenderSampleWasapi GetBuffer failed with size %ld : (error %lx)\n"), m_nFramesInBuffer, hr);
- return hr;
- }
-
- // Load the buffer with data from the audio source.
- if (pData != nullptr) {
-
- memcpy(&pData[0], pInputBufferPointer, nBytesToWrite);
- pInputBufferPointer += nBytesToWrite;
- } else {
- TRACE(_T("CMpcAudioRenderer::DoRenderSampleWasapi Output buffer is nullptr\n"));
- }
-
- hr = m_pRenderClient->ReleaseBuffer(numFramesAvailable, 0); // no flags
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::DoRenderSampleWasapi ReleaseBuffer failed with size %ld (error %lx)\n"), m_nFramesInBuffer, hr);
- return hr;
- }
-
- if (!m_isAudioClientStarted) {
- TRACE(_T("CMpcAudioRenderer::DoRenderSampleWasapi Starting audio client\n"));
- m_pAudioClient->Start();
- m_isAudioClientStarted = true;
- }
-
- if (pInputBufferPointer >= pInputBufferEnd) {
- m_lastBufferTime = GetTickCount();
- // This is the duration of the filled buffer
- m_hnsActualDuration = (REFERENCE_TIME)REFTIMES_PER_SEC * numFramesAvailable / m_pWaveFileFormat->nSamplesPerSec;
- // Sleep time is half this duration
- m_hnsActualDuration = (DWORD)(m_hnsActualDuration / REFTIMES_PER_MILLISEC / 2);
- break;
- }
-
- // Buffer not completely filled, sleep for half buffer capacity duration
- m_hnsActualDuration = (REFERENCE_TIME)REFTIMES_PER_SEC * m_nFramesInBuffer / m_pWaveFileFormat->nSamplesPerSec;
- // Sleep time is half this duration
- m_hnsActualDuration = (DWORD)(m_hnsActualDuration / REFTIMES_PER_MILLISEC / 2);
- Sleep((DWORD)m_hnsActualDuration);
- }
- return hr;
-}
-#pragma endregion
-
-HRESULT CMpcAudioRenderer::CheckAudioClient(WAVEFORMATEX* pWaveFormatEx)
-{
- HRESULT hr = S_OK;
- CAutoLock cAutoLock(&m_csCheck);
- TRACE(_T("CMpcAudioRenderer::CheckAudioClient\n"));
- if (!m_pMMDevice) {
- hr = GetAudioDevice(&m_pMMDevice);
- }
-
- // If no WAVEFORMATEX structure provided and client already exists, return it
- if (m_pAudioClient && !pWaveFormatEx) {
- return hr;
- }
-
- // Just create the audio client if no WAVEFORMATEX provided
- if (!m_pAudioClient && !pWaveFormatEx) {
- if (SUCCEEDED(hr)) {
- hr = CreateAudioClient(m_pMMDevice, &m_pAudioClient);
- }
- return hr;
- }
-
- // If we reach that point, m_pAudioClient should have been initialized
- ASSERT(m_pAudioClient);
- CheckPointer(m_pAudioClient, E_POINTER);
-
- // Compare the existing WAVEFORMATEX with the one provided
- WAVEFORMATEX* pNewWaveFormatEx = nullptr;
- if (CheckFormatChanged(pWaveFormatEx, &pNewWaveFormatEx)) {
- // Format has changed, audio client has to be reinitialized
- TRACE(_T("CMpcAudioRenderer::CheckAudioClient Format changed, reinitialize the audio client\n"));
- if (m_pWaveFileFormat) {
- BYTE* p = (BYTE*)m_pWaveFileFormat;
- SAFE_DELETE_ARRAY(p);
- }
- m_pWaveFileFormat = pNewWaveFormatEx;
- hr = m_pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE, pWaveFormatEx, nullptr);
- if (SUCCEEDED(hr)) {
- if (m_isAudioClientStarted) {
- m_pAudioClient->Stop();
- m_isAudioClientStarted = false;
- }
- SAFE_RELEASE(m_pRenderClient);
- SAFE_RELEASE(m_pAudioClient);
-
- hr = CreateAudioClient(m_pMMDevice, &m_pAudioClient);
- } else {
- TRACE(_T("CMpcAudioRenderer::CheckAudioClient New format not supported, accept it anyway\n"));
- return S_OK;
- }
- } else if (!m_pRenderClient) {
- TRACE(_T("CMpcAudioRenderer::CheckAudioClient First initialization of the audio renderer\n"));
- } else {
- return hr;
- }
-
- SAFE_RELEASE(m_pRenderClient);
- if (SUCCEEDED(hr)) {
- hr = InitAudioClient(pWaveFormatEx, m_pAudioClient, &m_pRenderClient);
- }
- return hr;
-}
-
-HRESULT CMpcAudioRenderer::GetAvailableAudioDevices(IMMDeviceCollection** ppMMDevices)
-{
- HRESULT hr;
-
- CComPtr<IMMDeviceEnumerator> enumerator;
- TRACE(_T("CMpcAudioRenderer::GetAvailableAudioDevices\n"));
- hr = enumerator.CoCreateInstance(__uuidof(MMDeviceEnumerator));
-
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::GetAvailableAudioDevices - failed to get MMDeviceEnumerator\n"));
- return S_FALSE;
- }
-
- //IMMDevice* pEndpoint = nullptr;
- //IPropertyStore* pProps = nullptr;
- //LPWSTR pwszID = nullptr;
-
- enumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, ppMMDevices);
- UINT count = 0;
- hr = (*ppMMDevices)->GetCount(&count);
- return hr;
-}
-
-HRESULT CMpcAudioRenderer::GetAudioDevice(IMMDevice** ppMMDevice)
-{
- TRACE(_T("CMpcAudioRenderer::GetAudioDevice\n"));
-
- CComPtr<IMMDeviceEnumerator> enumerator;
- IMMDeviceCollection* devices = nullptr;
- IPropertyStore* pProps = nullptr;
- HRESULT hr = enumerator.CoCreateInstance(__uuidof(MMDeviceEnumerator));
-
- if (hr != S_OK) {
- TRACE(_T("CMpcAudioRenderer::GetAudioDevice - failed to create MMDeviceEnumerator!\n"));
- return hr;
- }
-
- TRACE(_T("CMpcAudioRenderer::GetAudioDevice - Target end point: %s\n"), m_csSound_Device);
-
- if (GetAvailableAudioDevices(&devices) == S_OK && devices) {
- UINT count = 0;
- hr = devices->GetCount(&count);
- if (hr != S_OK) {
- TRACE(_T("CMpcAudioRenderer::GetAudioDevice - devices->GetCount failed: (0x%08x)\n"), hr);
- return hr;
- }
-
- for (ULONG i = 0 ; i < count ; i++) {
- LPWSTR pwszID = nullptr;
- IMMDevice* endpoint = nullptr;
- hr = devices->Item(i, &endpoint);
- if (hr == S_OK) {
- hr = endpoint->GetId(&pwszID);
- if (hr == S_OK) {
- if (endpoint->OpenPropertyStore(STGM_READ, &pProps) == S_OK) {
-
- PROPVARIANT varName;
- PropVariantInit(&varName);
-
- // Found the configured audio endpoint
- if ((pProps->GetValue(PKEY_Device_FriendlyName, &varName) == S_OK) && (m_csSound_Device == varName.pwszVal)) {
- TRACE(_T("CMpcAudioRenderer::GetAudioDevice - devices->GetId OK, num: (%u), pwszVal: %s, pwszID: %s\n"), i, varName.pwszVal, pwszID);
- enumerator->GetDevice(pwszID, ppMMDevice);
- SAFE_RELEASE(devices);
- *(ppMMDevice) = endpoint;
- CoTaskMemFree(pwszID);
- pwszID = nullptr;
- PropVariantClear(&varName);
- SAFE_RELEASE(pProps);
- return S_OK;
- } else {
- PropVariantClear(&varName);
- SAFE_RELEASE(pProps);
- SAFE_RELEASE(endpoint);
- CoTaskMemFree(pwszID);
- pwszID = nullptr;
- }
- }
- } else {
- TRACE(_T("CMpcAudioRenderer::GetAudioDevice - devices->GetId failed: (0x%08x)\n"), hr);
- }
- } else {
- TRACE(_T("CMpcAudioRenderer::GetAudioDevice - devices->Item failed: (0x%08x)\n"), hr);
- }
-
- CoTaskMemFree(pwszID);
- pwszID = nullptr;
- }
- }
-
- TRACE(_T("CMpcAudioRenderer::GetAudioDevice - Unable to find selected audio device, using the default end point!\n"));
- hr = enumerator->GetDefaultAudioEndpoint(eRender, eConsole, ppMMDevice);
-
- SAFE_RELEASE(devices);
-
- return hr;
-}
-
-bool CMpcAudioRenderer::CheckFormatChanged(const WAVEFORMATEX* pWaveFormatEx, WAVEFORMATEX** ppNewWaveFormatEx)
-{
- bool formatChanged = false;
- if (m_pWaveFileFormat == nullptr) {
- formatChanged = true;
- } else if (pWaveFormatEx->wFormatTag != m_pWaveFileFormat->wFormatTag
- || pWaveFormatEx->nChannels != m_pWaveFileFormat->nChannels
- || pWaveFormatEx->wBitsPerSample != m_pWaveFileFormat->wBitsPerSample) { // TODO : improve the checks
- formatChanged = true;
- }
-
-
- if (!formatChanged) {
- return false;
- }
-
- int size = sizeof(WAVEFORMATEX) + pWaveFormatEx->cbSize; // Always true, even for WAVEFORMATEXTENSIBLE and WAVEFORMATEXTENSIBLE_IEC61937
- *ppNewWaveFormatEx = (WAVEFORMATEX*)DEBUG_NEW BYTE[size];
- if (!*ppNewWaveFormatEx) {
- return false;
- }
- memcpy(*ppNewWaveFormatEx, pWaveFormatEx, size);
- return true;
-}
-
-HRESULT CMpcAudioRenderer::GetBufferSize(WAVEFORMATEX* pWaveFormatEx, REFERENCE_TIME* pHnsBufferPeriod)
-{
- if (pWaveFormatEx == nullptr) {
- return S_OK;
- }
- if (pWaveFormatEx->cbSize < 22) { //WAVEFORMATEX
- return S_OK;
- }
-
- WAVEFORMATEXTENSIBLE* wfext = (WAVEFORMATEXTENSIBLE*)pWaveFormatEx;
-
- if (m_bufferSize == 0)
- if (wfext->SubFormat == KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MLP) {
- m_bufferSize = 61440;
- } else if (wfext->SubFormat == KSDATAFORMAT_SUBTYPE_IEC61937_DTS_HD) {
- m_bufferSize = 32768;
- } else if (wfext->SubFormat == KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS) {
- m_bufferSize = 24576;
- } else if (wfext->Format.wFormatTag == WAVE_FORMAT_DOLBY_AC3_SPDIF) {
- m_bufferSize = 6144;
- } else {
- return S_OK;
- }
-
- *pHnsBufferPeriod = (REFERENCE_TIME)((REFERENCE_TIME)m_bufferSize * 10000 * 8 / ((REFERENCE_TIME)pWaveFormatEx->nChannels * pWaveFormatEx->wBitsPerSample *
- 1.0 * pWaveFormatEx->nSamplesPerSec) /*+ 0.5*/);
- *pHnsBufferPeriod *= 1000;
-
- TRACE(_T("CMpcAudioRenderer::GetBufferSize set a %I64d period for a %ld buffer size\n"), *pHnsBufferPeriod, m_bufferSize);
-
- return S_OK;
-}
-
-HRESULT CMpcAudioRenderer::InitAudioClient(WAVEFORMATEX* pWaveFormatEx, IAudioClient* pAudioClient, IAudioRenderClient** ppRenderClient)
-{
- TRACE(_T("CMpcAudioRenderer::InitAudioClient\n"));
-
- ASSERT(pAudioClient && ppRenderClient);
- CheckPointer(pAudioClient, E_POINTER);
- CheckPointer(ppRenderClient, E_POINTER);
-
- HRESULT hr;
- // Initialize the stream to play at the minimum latency.
- //if (SUCCEEDED (hr)) hr = pAudioClient->GetDevicePeriod(nullptr, &hnsPeriod);
- m_hnsPeriod = 500000; //50 ms is the best according to James @Slysoft
-
- hr = pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE, pWaveFormatEx, nullptr);
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::InitAudioClient not supported (0x%08x)\n"), hr);
- } else {
- TRACE(_T("CMpcAudioRenderer::InitAudioClient format supported\n"));
- }
-
- GetBufferSize(pWaveFormatEx, &m_hnsPeriod);
-
- if (SUCCEEDED(hr)) {
- hr = pAudioClient->Initialize(AUDCLNT_SHAREMODE_EXCLUSIVE, 0/*AUDCLNT_STREAMFLAGS_EVENTCALLBACK*/,
- m_hnsPeriod, m_hnsPeriod, pWaveFormatEx, nullptr);
- }
- if (FAILED(hr) && hr != AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED) {
- TRACE(_T("CMpcAudioRenderer::InitAudioClient failed (0x%08x)\n"), hr);
- return hr;
- }
-
- if (AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED == hr) {
- // if the buffer size was not aligned, need to do the alignment dance
- TRACE(_T("CMpcAudioRenderer::InitAudioClient Buffer size not aligned. Realigning\n"));
-
- // get the buffer size, which will be aligned
- hr = pAudioClient->GetBufferSize(&m_nFramesInBuffer);
-
- // throw away this IAudioClient
- SAFE_RELEASE(pAudioClient);
-
- // calculate the new aligned periodicity
- m_hnsPeriod = // hns =
- (REFERENCE_TIME)(
- 10000.0 * // (hns / ms) *
- 1000 * // (ms / s) *
- m_nFramesInBuffer / // frames /
- pWaveFormatEx->nSamplesPerSec // (frames / s)
- + 0.5 // rounding
- );
-
- if (SUCCEEDED(hr)) {
- hr = CreateAudioClient(m_pMMDevice, &pAudioClient);
- }
- TRACE(_T("CMpcAudioRenderer::InitAudioClient Trying again with periodicity of %I64u hundred-nanoseconds, or %u frames.\n"), m_hnsPeriod, m_nFramesInBuffer);
- if (SUCCEEDED(hr)) {
- hr = pAudioClient->Initialize(AUDCLNT_SHAREMODE_EXCLUSIVE, 0/*AUDCLNT_STREAMFLAGS_EVENTCALLBACK*/,
- m_hnsPeriod, m_hnsPeriod, pWaveFormatEx, nullptr);
- }
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::InitAudioClient Failed to reinitialize the audio client\n"));
- return hr;
- }
- } // if (AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED == hr)
-
- // get the buffer size, which is aligned
- if (SUCCEEDED(hr)) {
- hr = pAudioClient->GetBufferSize(&m_nFramesInBuffer);
- }
-
- // calculate the new period
- if (SUCCEEDED(hr)) {
- hr = pAudioClient->GetService(IID_PPV_ARGS(ppRenderClient));
- }
-
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::InitAudioClient service initialization failed (0x%08x)\n"), hr);
- } else {
- TRACE(_T("CMpcAudioRenderer::InitAudioClient service initialization success\n"));
- }
-
- return hr;
-}
-
-HRESULT CMpcAudioRenderer::CreateAudioClient(IMMDevice* pMMDevice, IAudioClient** ppAudioClient)
-{
- HRESULT hr = S_OK;
- m_hnsPeriod = 0;
-
- TRACE(_T("CMpcAudioRenderer::CreateAudioClient\n"));
-
- ASSERT(ppAudioClient);
- CheckPointer(ppAudioClient, E_POINTER);
-
- if (*ppAudioClient) {
- if (m_isAudioClientStarted) {
- (*ppAudioClient)->Stop();
- }
- SAFE_RELEASE(*ppAudioClient);
- m_isAudioClientStarted = false;
- }
-
- if (!pMMDevice) {
- TRACE(_T("CMpcAudioRenderer::CreateAudioClient failed, device not loaded\n"));
- return E_FAIL;
- }
-
- hr = pMMDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, nullptr, reinterpret_cast<void**>(ppAudioClient));
- if (FAILED(hr)) {
- TRACE(_T("CMpcAudioRenderer::CreateAudioClient activation failed (0x%08x)\n"), hr);
- } else {
- TRACE(_T("CMpcAudioRenderer::CreateAudioClient success\n"));
- }
- return hr;
-}
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.def b/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.def
deleted file mode 100644
index 6492e5cd6..000000000
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.def
+++ /dev/null
@@ -1,5 +0,0 @@
-EXPORTS
- DllCanUnloadNow PRIVATE
- DllGetClassObject PRIVATE
- DllRegisterServer PRIVATE
- DllUnregisterServer PRIVATE
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.h b/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.h
deleted file mode 100644
index b71c03537..000000000
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * (C) 2009-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include "BaseClasses/streams.h"
-#include <dsound.h>
-
-#include <MMReg.h> //must be before other WASAPI headers
-#include <strsafe.h>
-#include <mmdeviceapi.h>
-#include <avrt.h>
-#include <audioclient.h>
-#include <endpointvolume.h>
-#include <FunctionDiscoveryKeys_devpkey.h>
-
-#include "MpcAudioRendererSettingsWnd.h"
-#include "SoundTouch/include/SoundTouch.h"
-
-#define MpcAudioRendererName L"MPC-HC Audio Renderer"
-
-// REFERENCE_TIME time units per second and per millisecond
-#define REFTIMES_PER_SEC 10000000.0
-#define REFTIMES_PER_MILLISEC 10000.0
-
-// if you get a compilation error on AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED,
-// uncomment the #define below
-#define AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED AUDCLNT_ERR(0x019)
-
-class __declspec(uuid("601D2A2B-9CDE-40bd-8650-0485E3522727"))
- CMpcAudioRenderer : public CBaseRenderer
- , public IBasicAudio
- , public ISpecifyPropertyPages2
- , public IMpcAudioRendererFilter
-{
-public:
- CMpcAudioRenderer(LPUNKNOWN punk, HRESULT* phr);
- virtual ~CMpcAudioRenderer();
-
- static const AMOVIESETUP_FILTER sudASFilter;
-
- HRESULT CheckInputType(const CMediaType* mtIn);
- virtual HRESULT CheckMediaType(const CMediaType* pmt);
- virtual HRESULT DoRenderSample(IMediaSample* pMediaSample);
- virtual void OnReceiveFirstSample(IMediaSample* pMediaSample);
- BOOL ScheduleSample(IMediaSample* pMediaSample);
- virtual HRESULT SetMediaType(const CMediaType* pmt);
- virtual HRESULT CompleteConnect(IPin* pReceivePin);
-
- HRESULT EndOfStream();
-
-
- DECLARE_IUNKNOWN
-
- STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
-
- // === IMediaFilter
- STDMETHOD(Run)(REFERENCE_TIME tStart);
- STDMETHOD(Stop)();
- STDMETHOD(Pause)();
-
- // === IDispatch (pour IBasicAudio)
- STDMETHOD(GetTypeInfoCount)(UINT* pctinfo);
- STDMETHOD(GetTypeInfo)(UINT itinfo, LCID lcid, ITypeInfo** pptinfo);
- STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR** rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid);
- STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr);
-
- // === IBasicAudio
- STDMETHOD(put_Volume)(long lVolume);
- STDMETHOD(get_Volume)(long* plVolume);
- STDMETHOD(put_Balance)(long lBalance);
- STDMETHOD(get_Balance)(long* plBalance);
-
- // === ISpecifyPropertyPages2
- STDMETHODIMP GetPages(CAUUID* pPages);
- STDMETHODIMP CreatePage(const GUID& guid, IPropertyPage** ppPage);
-
- // === IMpcAudioRendererFilter
- STDMETHODIMP Apply();
- STDMETHODIMP SetWasapiMode(BOOL nValue);
- STDMETHODIMP_(BOOL) GetWasapiMode();
- STDMETHODIMP SetMuteFastForward(BOOL nValue);
- STDMETHODIMP_(BOOL) GetMuteFastForward();
- STDMETHODIMP SetSoundDevice(CString nValue);
- STDMETHODIMP_(CString) GetSoundDevice();
-
- // CMpcAudioRenderer
-private:
-
- HRESULT DoRenderSampleDirectSound(IMediaSample* pMediaSample);
-
- HRESULT InitCoopLevel();
- HRESULT ClearBuffer();
- HRESULT CreateDSBuffer();
- HRESULT GetReferenceClockInterface(REFIID riid, void** ppv);
- HRESULT WriteSampleToDSBuffer(IMediaSample* pMediaSample, bool* looped);
-
- LPDIRECTSOUND8 m_pDS;
- LPDIRECTSOUNDBUFFER m_pDSBuffer;
- DWORD m_dwDSWriteOff;
- WAVEFORMATEX* m_pWaveFileFormat;
- int m_nDSBufSize;
- CBaseReferenceClock* m_pReferenceClock;
- double m_dRate;
- long m_lVolume;
- soundtouch::SoundTouch* m_pSoundTouch;
- CCritSec m_csProps;
-
- // CMpcAudioRenderer WASAPI methods
- HRESULT GetAvailableAudioDevices(IMMDeviceCollection** ppMMDevices);
- HRESULT GetAudioDevice(IMMDevice** ppMMDevice);
- HRESULT CreateAudioClient(IMMDevice* pMMDevice, IAudioClient** ppAudioClient);
- HRESULT InitAudioClient(WAVEFORMATEX* pWaveFormatEx, IAudioClient* pAudioClient, IAudioRenderClient** ppRenderClient);
- HRESULT CheckAudioClient(WAVEFORMATEX* pWaveFormatEx);
- bool CheckFormatChanged(const WAVEFORMATEX* pWaveFormatEx, WAVEFORMATEX** ppNewWaveFormatEx);
- HRESULT DoRenderSampleWasapi(IMediaSample* pMediaSample);
- HRESULT GetBufferSize(WAVEFORMATEX* pWaveFormatEx, REFERENCE_TIME* pHnsBufferPeriod);
-
-
- // WASAPI variables
- bool m_useWASAPI;
- bool m_useWASAPIAfterRestart;
- bool m_bMuteFastForward;
- CString m_csSound_Device;
- IMMDevice* m_pMMDevice;
- IAudioClient* m_pAudioClient;
- IAudioRenderClient* m_pRenderClient;
- UINT32 m_nFramesInBuffer;
- REFERENCE_TIME m_hnsPeriod, m_hnsActualDuration;
- HANDLE m_hTask;
- CCritSec m_csCheck;
- UINT32 m_bufferSize;
- bool m_isAudioClientStarted;
- DWORD m_lastBufferTime;
-
- // avrt.dll (Vista or greater)
- typedef HANDLE(__stdcall* PTR_AvSetMmThreadCharacteristicsW)(LPCWSTR TaskName, LPDWORD TaskIndex);
- typedef BOOL (__stdcall* PTR_AvRevertMmThreadCharacteristics)(HANDLE AvrtHandle);
-
- HMODULE m_hLibAVRT;
- PTR_AvSetMmThreadCharacteristicsW m_pfAvSetMmThreadCharacteristicsW;
- PTR_AvRevertMmThreadCharacteristics m_pfAvRevertMmThreadCharacteristics;
-
-};
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.vcxproj b/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.vcxproj
deleted file mode 100644
index d14f4d2f9..000000000
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.vcxproj
+++ /dev/null
@@ -1,259 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug Filter|Win32">
- <Configuration>Debug Filter</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug Filter|x64">
- <Configuration>Debug Filter</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release Filter|Win32">
- <Configuration>Release Filter</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release Filter|x64">
- <Configuration>Release Filter</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{D0620EF4-1313-40D5-9069-A82F6FE26994}</ProjectGuid>
- <RootNamespace>MpcAudioRenderer</RootNamespace>
- <Keyword>MFCProj</Keyword>
- <ProjectName>MpcAudioRenderer</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>dsound.lib;Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>MpcAudioRenderer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>dsound.lib;Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>MpcAudioRenderer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>dsound.lib;Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>MpcAudioRenderer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>dsound.lib;Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>MpcAudioRenderer.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>dsound.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>dsound.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>dsound.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>dsound.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\FilterApp.cpp" />
- <ClCompile Include="MpcAudioRenderer.cpp" />
- <ClCompile Include="MpcAudioRendererSettingsWnd.cpp" />
- <ClCompile Include="stdafx.cpp">
- <PrecompiledHeader>Create</PrecompiledHeader>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <None Include="MpcAudioRenderer.def" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="IMpcAudioRendererFilter.h" />
- <ClInclude Include="MpcAudioRenderer.h" />
- <ClInclude Include="MpcAudioRendererSettingsWnd.h" />
- <ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
- </ClInclude>
- <ClInclude Include="stdafx.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="MpcAudioRenderer.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
- </ResourceCompile>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\..\DSUtil\DSUtil.vcxproj">
- <Project>{fc70988b-1ae5-4381-866d-4f405e28ac42}</Project>
- </ProjectReference>
- <ProjectReference Include="..\..\..\thirdparty\SoundTouch\source\SoundTouch.vcxproj">
- <Project>{68a5dd20-7057-448b-8fe0-b6ac8d205509}</Project>
- </ProjectReference>
- <ProjectReference Include="..\..\..\thirdparty\BaseClasses\BaseClasses.vcxproj">
- <Project>{e8a3f6fa-ae1c-4c8e-a0b6-9c8480324eaa}</Project>
- </ProjectReference>
- <ProjectReference Include="..\..\..\thirdparty\VirtualDub\Kasumi\Kasumi.vcxproj">
- <Project>{0d252872-7542-4232-8d02-53f9182aee15}</Project>
- </ProjectReference>
- <ProjectReference Include="..\..\..\thirdparty\VirtualDub\system\system.vcxproj">
- <Project>{c2082189-3ecb-4079-91fa-89d3c8a305c0}</Project>
- </ProjectReference>
- <ProjectReference Include="..\..\Filters.vcxproj">
- <Project>{273b3149-3192-4b75-a791-470320b90812}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.vcxproj.filters b/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.vcxproj.filters
deleted file mode 100644
index 02f8239d5..000000000
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.vcxproj.filters
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{9788c006-0809-4532-aa20-b51ed992525a}</UniqueIdentifier>
- <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{4d561854-929b-492e-9fba-c2cebb7cc3d4}</UniqueIdentifier>
- <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
- </Filter>
- <Filter Include="Resource Files">
- <UniqueIdentifier>{addff0d6-0d94-4e4c-b5ea-b7d5b330fd45}</UniqueIdentifier>
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\FilterApp.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="MpcAudioRenderer.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="stdafx.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="MpcAudioRendererSettingsWnd.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <None Include="MpcAudioRenderer.def">
- <Filter>Source Files</Filter>
- </None>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="MpcAudioRenderer.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="resource.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="stdafx.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="IMpcAudioRendererFilter.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="MpcAudioRendererSettingsWnd.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="MpcAudioRenderer.rc">
- <Filter>Resource Files</Filter>
- </ResourceCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.cpp b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.cpp
deleted file mode 100644
index 4b925fe97..000000000
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * (C) 2010-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include "resource.h"
-#include "MpcAudioRendererSettingsWnd.h"
-#include "../../../DSUtil/DSUtil.h"
-
-#include "../../../mpc-hc/InternalFiltersConfig.h"
-
-
-CMpcAudioRendererSettingsWnd::CMpcAudioRendererSettingsWnd()
-{
-}
-
-bool CMpcAudioRendererSettingsWnd::OnConnect(const CInterfaceList<IUnknown, &IID_IUnknown>& pUnks)
-{
- ASSERT(!m_pMAR);
-
- m_pMAR.Release();
-
- POSITION pos = pUnks.GetHeadPosition();
- while (pos && !(m_pMAR = pUnks.GetNext(pos))) {
- ;
- }
-
- if (!m_pMAR) {
- return false;
- }
-
- return true;
-}
-
-void CMpcAudioRendererSettingsWnd::OnDisconnect()
-{
- m_pMAR.Release();
-}
-
-bool CALLBACK DSEnumProc(LPGUID lpGUID,
- LPCTSTR lpszDesc,
- LPCTSTR lpszDrvName,
- LPVOID lpContext)
-{
- CComboBox* pCombo = (CComboBox*)lpContext;
- ASSERT(pCombo);
- LPGUID lpTemp = nullptr;
-
- if (lpGUID != nullptr) { // nullptr only for "Primary Sound Driver".
- if ((lpTemp = (LPGUID)malloc(sizeof(GUID))) == nullptr) {
- return TRUE;
- }
- memcpy(lpTemp, lpGUID, sizeof(GUID));
- }
- pCombo->AddString(lpszDesc);
- free(lpTemp);
- return TRUE;
-}
-
-bool CMpcAudioRendererSettingsWnd::OnActivate()
-{
- ASSERT(IPP_FONTSIZE == 13);
- DWORD dwStyle = WS_VISIBLE | WS_CHILD | WS_TABSTOP;
- CPoint p(10, 10);
-
- m_cbWasapiMode.Create(ResStr(IDS_ARS_WASAPI_MODE), dwStyle | BS_AUTOCHECKBOX | BS_LEFTTEXT, CRect(p, CSize(IPP_SCALE(320), m_fontheight)), this, IDC_PP_WASAPI_MODE);
-
- p.y += IPP_SCALE(20);
- m_cbMuteFastForward.Create(ResStr(IDS_ARS_MUTE_FAST_FORWARD), dwStyle | BS_AUTOCHECKBOX | BS_LEFTTEXT, CRect(p, CSize(IPP_SCALE(320), m_fontheight)), this, IDC_PP_MUTE_FAST_FORWARD);
-
- p.y += IPP_SCALE(25);
- m_txtSoundDevice.Create(ResStr(IDS_ARS_SOUND_DEVICE), WS_VISIBLE | WS_CHILD, CRect(p, CSize(IPP_SCALE(115), m_fontheight)), this, (UINT)IDC_STATIC);
- m_cbSoundDevice.Create(dwStyle | CBS_DROPDOWNLIST | WS_VSCROLL, CRect(p + CPoint(IPP_SCALE(120), -4), CSize(IPP_SCALE(200), 200)), this, IDC_PP_SOUND_DEVICE);
-
- SetClassLongPtr(GetDlgItem(IDC_PP_SOUND_DEVICE)->m_hWnd, GCLP_HCURSOR, (LONG_PTR)AfxGetApp()->LoadStandardCursor(IDC_HAND));
-
- DirectSoundEnumerate((LPDSENUMCALLBACK)DSEnumProc, (void*)&m_cbSoundDevice);
-
- if (m_cbSoundDevice.GetCount() > 0) {
- int idx = m_cbSoundDevice.FindString(0, m_pMAR->GetSoundDevice());
- if (idx < 0) {
- m_cbSoundDevice.SetCurSel(0);
- } else {
- m_cbSoundDevice.SetCurSel(m_cbSoundDevice.FindString(0, m_pMAR->GetSoundDevice()));
- }
- }
-
- m_cbWasapiMode.SetCheck(m_pMAR->GetWasapiMode());
- m_cbMuteFastForward.SetCheck(m_pMAR->GetMuteFastForward());
-
- for (CWnd* pWnd = GetWindow(GW_CHILD); pWnd; pWnd = pWnd->GetNextWindow()) {
- pWnd->SetFont(&m_font, FALSE);
- }
-
- CorrectComboListWidth(m_cbSoundDevice);
-
- return true;
-}
-
-void CMpcAudioRendererSettingsWnd::OnDeactivate()
-{
-}
-
-bool CMpcAudioRendererSettingsWnd::OnApply()
-{
- OnDeactivate();
-
- if (m_pMAR) {
- m_pMAR->SetWasapiMode(m_cbWasapiMode.GetCheck());
- m_pMAR->SetMuteFastForward(m_cbMuteFastForward.GetCheck());
- CString str;
- int idx = m_cbSoundDevice.GetCurSel();
- if (!(idx < 0)) {
- m_cbSoundDevice.GetLBText(idx, str);
- m_pMAR->SetSoundDevice(str);
- }
- m_pMAR->Apply();
- }
-
- return true;
-}
-
-
-BEGIN_MESSAGE_MAP(CMpcAudioRendererSettingsWnd, CInternalPropertyPageWnd)
-END_MESSAGE_MAP()
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.h b/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.h
deleted file mode 100644
index 54491b922..000000000
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRendererSettingsWnd.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * (C) 2010-2012 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include "../../InternalPropertyPage.h"
-#include "IMpcAudioRendererFilter.h"
-#include <afxcmn.h>
-
-class __declspec(uuid("1E53BA32-3BCC-4dff-9342-34E46BE3F5A5"))
- CMpcAudioRendererSettingsWnd : public CInternalPropertyPageWnd
-{
-private:
- CComQIPtr<IMpcAudioRendererFilter> m_pMAR;
-
- CStatic m_txtWasapiMode;
- CButton m_cbWasapiMode;
- CButton m_cbMuteFastForward;
-
- CStatic m_txtSoundDevice;
- CComboBox m_cbSoundDevice;
-
- enum {
- IDC_PP_WASAPI_MODE = 10000,
- IDC_PP_MUTE_FAST_FORWARD,
- IDC_PP_SOUND_DEVICE
- };
-
-public:
- CMpcAudioRendererSettingsWnd();
-
- bool OnConnect(const CInterfaceList<IUnknown, &IID_IUnknown>& pUnks);
- void OnDisconnect();
- bool OnActivate();
- void OnDeactivate();
- bool OnApply();
-
- HRESULT GetAvailableAudioDevices();
-
- static LPCTSTR GetWindowTitle() { return _T("Settings"); }
- static CSize GetWindowSize() { return CSize(340, 82); }
-
- DECLARE_MESSAGE_MAP()
-};
diff --git a/src/filters/renderer/MpcAudioRenderer/resource.h b/src/filters/renderer/MpcAudioRenderer/resource.h
deleted file mode 100644
index e813a13b9..000000000
--- a/src/filters/renderer/MpcAudioRenderer/resource.h
+++ /dev/null
@@ -1,19 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by MpcAudioRenderer.rc
-//
-#define IDS_FILTER_SETTINGS_CAPTION 7000
-#define IDS_ARS_WASAPI_MODE 7100
-#define IDS_ARS_MUTE_FAST_FORWARD 7101
-#define IDS_ARS_SOUND_DEVICE 7102
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 103
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1001
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/src/filters/renderer/MpcAudioRenderer/stdafx.cpp b/src/filters/renderer/MpcAudioRenderer/stdafx.cpp
deleted file mode 100644
index 42728ce2e..000000000
--- a/src/filters/renderer/MpcAudioRenderer/stdafx.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * (C) 2009-2012 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
diff --git a/src/filters/renderer/MpcAudioRenderer/stdafx.h b/src/filters/renderer/MpcAudioRenderer/stdafx.h
deleted file mode 100644
index 7c436e070..000000000
--- a/src/filters/renderer/MpcAudioRenderer/stdafx.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * (C) 2009-2013 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include "../../../DSUtil/SharedInclude.h"
-
-#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
-#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
-#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
-
-#include <afx.h>
-#include <afxwin.h> // MFC core and standard components
-
-#include "BaseClasses/streams.h"
-#include <dvdmedia.h>
-#include <dsound.h>
diff --git a/src/filters/renderer/SyncClock/SyncClock.cpp b/src/filters/renderer/SyncClock/SyncClock.cpp
index ff4406f32..6b2356c0c 100644
--- a/src/filters/renderer/SyncClock/SyncClock.cpp
+++ b/src/filters/renderer/SyncClock/SyncClock.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2010-2013 see Authors.txt
+ * (C) 2010-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -82,13 +82,13 @@ CBasePin* CSyncClockFilter::GetPin(int i)
// CSyncClock methods
CSyncClock::CSyncClock(LPUNKNOWN pUnk, HRESULT* phr)
: CBaseReferenceClock(NAME("SyncClock"), pUnk, phr)
- , m_pCurrentRefClock(0)
- , m_pPrevRefClock(0)
- , m_rtPrivateTime(GetTicks100ns())
- , m_rtPrevTime(m_rtPrivateTime)
, adjustment(1.0)
, bias(1.0)
+ , m_rtPrivateTime(GetTicks100ns())
, m_llPerfFrequency(0)
+ , m_rtPrevTime(m_rtPrivateTime)
+ , m_pCurrentRefClock(0)
+ , m_pPrevRefClock(0)
{
QueryPerformanceFrequency((LARGE_INTEGER*)&m_llPerfFrequency);
}
diff --git a/src/filters/renderer/SyncClock/SyncClock.h b/src/filters/renderer/SyncClock/SyncClock.h
index f7edc1943..40be493e9 100644
--- a/src/filters/renderer/SyncClock/SyncClock.h
+++ b/src/filters/renderer/SyncClock/SyncClock.h
@@ -1,5 +1,5 @@
/*
- * (C) 2010-2013 see Authors.txt
+ * (C) 2010-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,8 +20,6 @@
#pragma once
-#include <atlbase.h>
-#include <atlutil.h>
#include "Interfaces.h"
class CSyncClockFilter;
diff --git a/src/filters/renderer/SyncClock/SyncClock.vcxproj b/src/filters/renderer/SyncClock/SyncClock.vcxproj
index e2fc21f68..2d0e93dd6 100644
--- a/src/filters/renderer/SyncClock/SyncClock.vcxproj
+++ b/src/filters/renderer/SyncClock/SyncClock.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,44 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/src/filters/renderer/SyncClock/SyncClock.vcxproj.filters b/src/filters/renderer/SyncClock/SyncClock.vcxproj.filters
index 0964ef976..0703860a3 100644
--- a/src/filters/renderer/SyncClock/SyncClock.vcxproj.filters
+++ b/src/filters/renderer/SyncClock/SyncClock.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
diff --git a/src/filters/renderer/VideoRenderers/AllocatorCommon.cpp b/src/filters/renderer/VideoRenderers/AllocatorCommon.cpp
index 96962ece3..dd37cfbd2 100644
--- a/src/filters/renderer/VideoRenderers/AllocatorCommon.cpp
+++ b/src/filters/renderer/VideoRenderers/AllocatorCommon.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -19,7 +19,6 @@
*/
#include "stdafx.h"
-#include <InitGuid.h>
#include "AllocatorCommon.h"
#include "../DSUtil/DSUtil.h"
diff --git a/src/filters/renderer/VideoRenderers/AllocatorCommon7.cpp b/src/filters/renderer/VideoRenderers/AllocatorCommon7.cpp
deleted file mode 100644
index 9853d6170..000000000
--- a/src/filters/renderer/VideoRenderers/AllocatorCommon7.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include <InitGuid.h>
-#include "AllocatorCommon7.h"
-#include "../DSUtil/DSUtil.h"
-
-#include "DX7AllocatorPresenter.h"
-#include "VMR7AllocatorPresenter.h"
-#include "RM7AllocatorPresenter.h"
-#include "QT7AllocatorPresenter.h"
-
-
-bool IsVMR7InGraph(IFilterGraph* pFG)
-{
- BeginEnumFilters(pFG, pEF, pBF);
- if (CComQIPtr<IVMRWindowlessControl>(pBF)) {
- return true;
- }
- EndEnumFilters;
- return false;
-}
-
-using namespace DSObjects;
-
-//
-
-HRESULT CreateAP7(const CLSID& clsid, HWND hWnd, ISubPicAllocatorPresenter** ppAP)
-{
- CheckPointer(ppAP, E_POINTER);
-
- *ppAP = nullptr;
-
- HRESULT hr = S_OK;
-
- if (IsEqualCLSID(clsid, CLSID_VMR7AllocatorPresenter)) {
- *ppAP = DEBUG_NEW CVMR7AllocatorPresenter(hWnd, hr);
- } else if (IsEqualCLSID(clsid, CLSID_RM7AllocatorPresenter)) {
- *ppAP = DEBUG_NEW CRM7AllocatorPresenter(hWnd, hr);
- } else if (IsEqualCLSID(clsid, CLSID_QT7AllocatorPresenter)) {
- *ppAP = DEBUG_NEW CQT7AllocatorPresenter(hWnd, hr);
- } else {
- return E_FAIL;
- }
-
- if (*ppAP == nullptr) {
- return E_OUTOFMEMORY;
- }
-
- (*ppAP)->AddRef();
-
- if (FAILED(hr)) {
- (*ppAP)->Release();
- *ppAP = nullptr;
- }
-
- return hr;
-}
diff --git a/src/filters/renderer/VideoRenderers/AllocatorCommon7.h b/src/filters/renderer/VideoRenderers/AllocatorCommon7.h
deleted file mode 100644
index 49e9311f2..000000000
--- a/src/filters/renderer/VideoRenderers/AllocatorCommon7.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include "../../../SubPic/ISubPic.h"
-
-
-// {495CF191-810D-44c7-92C5-E7D46AE00F44}
-DEFINE_GUID(CLSID_VMR7AllocatorPresenter,
- 0x495cf191, 0x810d, 0x44c7, 0x92, 0xc5, 0xe7, 0xd4, 0x6a, 0xe0, 0xf, 0x44);
-
-// {97B3462E-1752-4dfb-A038-271060BC7A94}
-DEFINE_GUID(CLSID_RM7AllocatorPresenter,
- 0x97b3462e, 0x1752, 0x4dfb, 0xa0, 0x38, 0x27, 0x10, 0x60, 0xbc, 0x7a, 0x94);
-
-// {36CC5A71-441C-462a-9D10-48A19485938D}
-DEFINE_GUID(CLSID_QT7AllocatorPresenter,
- 0x36cc5a71, 0x441c, 0x462a, 0x9d, 0x10, 0x48, 0xa1, 0x94, 0x85, 0x93, 0x8d);
-
-extern HRESULT CreateAP7(const CLSID& clsid, HWND hWnd, ISubPicAllocatorPresenter** ppAP);
-
-extern bool IsVMR7InGraph(IFilterGraph* pFG);
diff --git a/src/filters/renderer/VideoRenderers/AsyncCallback.h b/src/filters/renderer/VideoRenderers/AsyncCallback.h
new file mode 100644
index 000000000..d49645582
--- /dev/null
+++ b/src/filters/renderer/VideoRenderers/AsyncCallback.h
@@ -0,0 +1,71 @@
+/*
+* (C) 2015 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#pragma once
+
+#include <mfobjects.h>
+
+// T: Type of the parent object
+template <class T>
+class AsyncCallback : public IMFAsyncCallback
+{
+public:
+ typedef HRESULT(T::*InvokeFn)(IMFAsyncResult* pAsyncResult);
+
+ AsyncCallback(T* pParent, InvokeFn fn) : m_pParent(pParent), m_pInvokeFn(fn) {}
+ virtual ~AsyncCallback() = default;
+
+ // IUnknown
+ STDMETHODIMP QueryInterface(REFIID iid, void** ppv) override {
+ if (!ppv) {
+ return E_POINTER;
+ }
+ if (iid == __uuidof(IUnknown)) {
+ *ppv = static_cast<IUnknown*>(static_cast<IMFAsyncCallback*>(this));
+ } else if (iid == __uuidof(IMFAsyncCallback)) {
+ *ppv = static_cast<IMFAsyncCallback*>(this);
+ } else {
+ *ppv = nullptr;
+ return E_NOINTERFACE;
+ }
+ AddRef();
+ return S_OK;
+ }
+
+ STDMETHODIMP_(ULONG) AddRef() override {
+ return m_pParent->AddRef();
+ }
+
+ STDMETHODIMP_(ULONG) Release() override {
+ return m_pParent->Release();
+ }
+
+ // IMFAsyncCallback
+ STDMETHODIMP GetParameters(DWORD*, DWORD*) override {
+ return E_NOTIMPL;
+ }
+
+ STDMETHODIMP Invoke(IMFAsyncResult* pAsyncResult) override {
+ return (m_pParent->*m_pInvokeFn)(pAsyncResult);
+ }
+
+ T* m_pParent;
+ InvokeFn m_pInvokeFn;
+};
diff --git a/src/filters/renderer/VideoRenderers/D3DFont.cpp b/src/filters/renderer/VideoRenderers/D3DFont.cpp
index d9ca233ec..406a3ea15 100644
--- a/src/filters/renderer/VideoRenderers/D3DFont.cpp
+++ b/src/filters/renderer/VideoRenderers/D3DFont.cpp
@@ -356,8 +356,8 @@ HRESULT CD3DFont::RestoreDeviceObjects()
// Create vertex buffer for the letters
UINT vertexSize = std::max<UINT>(sizeof(FONT2DVERTEX), sizeof(FONT3DVERTEX));
if (FAILED(hr = m_pd3dDevice->CreateVertexBuffer(MAX_NUM_VERTICES * vertexSize,
- D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC, 0,
- D3DPOOL_DEFAULT, &m_pVB, nullptr))) {
+ D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC, 0,
+ D3DPOOL_DEFAULT, &m_pVB, nullptr))) {
return hr;
}
diff --git a/src/filters/renderer/VideoRenderers/DX7AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/DX7AllocatorPresenter.cpp
deleted file mode 100644
index 6790d7e0c..000000000
--- a/src/filters/renderer/VideoRenderers/DX7AllocatorPresenter.cpp
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include "RenderersSettings.h"
-
-#include "DX7AllocatorPresenter.h"
-#include "../../../SubPic/DX7SubPic.h"
-#include "../../../SubPic/SubPicQueueImpl.h"
-
-using namespace DSObjects;
-
-//
-
-static HRESULT TextureBlt(IDirect3DDevice7* pD3DDev, IDirectDrawSurface7* pTexture, const Vector dst[4], const CRect& src)
-{
- CheckPointer(pTexture, E_POINTER);
-
- ASSERT(pD3DDev);
-
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- if (FAILED(pTexture->GetSurfaceDesc(&ddsd))) {
- return E_FAIL;
- }
-
- float w = (float)ddsd.dwWidth;
- float h = (float)ddsd.dwHeight;
-
- // Be careful with the code that follows. Some compilers (e.g. Visual Studio 2012) used to miscompile
- // it in some cases (namely x64 with optimizations /O2 /Ot). This bug led pVertices not to be correctly
- // initialized and thus the subtitles weren't shown.
- struct {
- float x, y, z, rhw;
- float tu, tv;
- } pVertices[] = {
- {(float)dst[0].x, (float)dst[0].y, (float)dst[0].z, 1.0f / (float)dst[0].z, (float)src.left / w, (float)src.top / h},
- {(float)dst[1].x, (float)dst[1].y, (float)dst[1].z, 1.0f / (float)dst[1].z, (float)src.right / w, (float)src.top / h},
- {(float)dst[2].x, (float)dst[2].y, (float)dst[2].z, 1.0f / (float)dst[2].z, (float)src.left / w, (float)src.bottom / h},
- {(float)dst[3].x, (float)dst[3].y, (float)dst[3].z, 1.0f / (float)dst[3].z, (float)src.right / w, (float)src.bottom / h},
- };
-
- for (size_t i = 0; i < _countof(pVertices); i++) {
- pVertices[i].x -= 0.5f;
- pVertices[i].y -= 0.5f;
- }
-
- pD3DDev->SetTexture(0, pTexture);
-
- pD3DDev->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE);
- pD3DDev->SetRenderState(D3DRENDERSTATE_LIGHTING, FALSE);
- pD3DDev->SetRenderState(D3DRENDERSTATE_BLENDENABLE, FALSE);
- pD3DDev->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE, FALSE);
-
- pD3DDev->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTFG_LINEAR);
- pD3DDev->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTFN_LINEAR);
- pD3DDev->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTFP_LINEAR);
-
- pD3DDev->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP);
-
- //
-
- if (FAILED(pD3DDev->BeginScene())) {
- return E_FAIL;
- }
-
- pD3DDev->DrawPrimitive(D3DPT_TRIANGLESTRIP,
- D3DFVF_XYZRHW | D3DFVF_TEX1,
- pVertices, 4, D3DDP_WAIT);
- pD3DDev->EndScene();
-
- //
-
- pD3DDev->SetTexture(0, nullptr);
-
- return S_OK;
-}
-
-//
-// CDX7AllocatorPresenter
-//
-
-typedef HRESULT(WINAPI* DirectDrawCreateExPtr)(GUID FAR* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown FAR* pUnkOuter);
-
-
-CDX7AllocatorPresenter::CDX7AllocatorPresenter(HWND hWnd, HRESULT& hr)
- : CSubPicAllocatorPresenterImpl(hWnd, hr, nullptr)
- , m_ScreenSize(0, 0)
- , m_hDDrawLib(nullptr)
- , m_bIsRendering(false)
-{
- if (FAILED(hr)) {
- return;
- }
-
- DirectDrawCreateExPtr pDirectDrawCreateEx = nullptr;
-
- m_hDDrawLib = LoadLibrary(_T("ddraw.dll"));
- if (m_hDDrawLib) {
- pDirectDrawCreateEx = (DirectDrawCreateExPtr)GetProcAddress(m_hDDrawLib, "DirectDrawCreateEx");
- }
- if (pDirectDrawCreateEx == nullptr) {
- hr = E_FAIL;
- return;
- }
-
- if (FAILED(hr = pDirectDrawCreateEx(nullptr, (void**)&m_pDD, IID_IDirectDraw7, nullptr))
- || FAILED(hr = m_pDD->SetCooperativeLevel(AfxGetMainWnd()->GetSafeHwnd(), DDSCL_NORMAL))) {
- return;
- }
-
- if (!(m_pD3D = m_pDD)) {
- hr = E_NOINTERFACE;
- return;
- }
-
- hr = CreateDevice();
- if (FAILED(hr)) {
- TRACE(_T("CreateDevice failed: 0x%08x\n"), (LONG)hr);
- }
-}
-
-CDX7AllocatorPresenter::~CDX7AllocatorPresenter()
-{
- // Release the interfaces before releasing the library
- m_pPrimary = nullptr;
- m_pBackBuffer = nullptr;
- m_pVideoTexture = nullptr;
- m_pVideoSurface = nullptr;
- m_pD3DDev = nullptr;
- m_pD3D.Release();
- m_pDD = nullptr;
- if (m_hDDrawLib) {
- FreeLibrary(m_hDDrawLib);
- }
-}
-
-HRESULT CDX7AllocatorPresenter::CreateDevice()
-{
- const CRenderersSettings& r = GetRenderersSettings();
-
- m_pD3DDev = nullptr;
- m_pPrimary = nullptr;
- m_pBackBuffer = nullptr;
-
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- if (FAILED(m_pDD->GetDisplayMode(&ddsd)) ||
- ddsd.ddpfPixelFormat.dwRGBBitCount <= 8) {
- return DDERR_INVALIDMODE;
- }
- m_refreshRate = ddsd.dwRefreshRate;
- m_ScreenSize.SetSize(ddsd.dwWidth, ddsd.dwHeight);
- CSize szDesktopSize(GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN));
-
- HRESULT hr;
-
- // m_pPrimary
-
- INITDDSTRUCT(ddsd);
- ddsd.dwFlags = DDSD_CAPS;
- ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
- if (FAILED(hr = m_pDD->CreateSurface(&ddsd, &m_pPrimary, nullptr))) {
- return hr;
- }
-
- CComPtr<IDirectDrawClipper> pcClipper;
- if (FAILED(hr = m_pDD->CreateClipper(0, &pcClipper, nullptr))) {
- return hr;
- }
- pcClipper->SetHWnd(0, m_hWnd);
- m_pPrimary->SetClipper(pcClipper);
-
- // m_pBackBuffer
-
- INITDDSTRUCT(ddsd);
- ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
- ddsd.ddsCaps.dwCaps = /*DDSCAPS_OFFSCREENPLAIN |*/ DDSCAPS_VIDEOMEMORY | DDSCAPS_3DDEVICE;
- ddsd.dwWidth = szDesktopSize.cx;
- ddsd.dwHeight = szDesktopSize.cy;
- if (FAILED(hr = m_pDD->CreateSurface(&ddsd, &m_pBackBuffer, nullptr))) {
- return hr;
- }
-
- pcClipper = nullptr;
- if (FAILED(hr = m_pDD->CreateClipper(0, &pcClipper, nullptr))) {
- return hr;
- }
- BYTE rgnDataBuffer[1024];
- HRGN hrgn = CreateRectRgn(0, 0, ddsd.dwWidth, ddsd.dwHeight);
- GetRegionData(hrgn, sizeof(rgnDataBuffer), (RGNDATA*)rgnDataBuffer);
- DeleteObject(hrgn);
- pcClipper->SetClipList((RGNDATA*)rgnDataBuffer, 0);
- m_pBackBuffer->SetClipper(pcClipper);
-
- // m_pD3DDev
-
- if (FAILED(hr = m_pD3D->CreateDevice(IID_IDirect3DHALDevice, m_pBackBuffer, &m_pD3DDev))) { // this seems to fail if the desktop size is too large (width or height >2048)
- return hr;
- }
-
- //
-
- CComPtr<ISubPicProvider> pSubPicProvider;
- if (m_pSubPicQueue) {
- m_pSubPicQueue->GetSubPicProvider(&pSubPicProvider);
- }
-
- InitMaxSubtitleTextureSize(r.subPicQueueSettings.nMaxRes, szDesktopSize);
-
- if (m_pAllocator) {
- m_pAllocator->ChangeDevice(m_pD3DDev);
- } else {
- m_pAllocator = DEBUG_NEW CDX7SubPicAllocator(m_pD3DDev, m_maxSubtitleTextureSize);
- }
-
- hr = S_OK;
- if (!m_pSubPicQueue) {
- CAutoLock(this);
- m_pSubPicQueue = r.subPicQueueSettings.nSize > 0
- ? (ISubPicQueue*)DEBUG_NEW CSubPicQueue(r.subPicQueueSettings, m_pAllocator, &hr)
- : (ISubPicQueue*)DEBUG_NEW CSubPicQueueNoThread(r.subPicQueueSettings, m_pAllocator, &hr);
- } else {
- m_pSubPicQueue->Invalidate();
- }
-
- if (SUCCEEDED(hr) && pSubPicProvider) {
- m_pSubPicQueue->SetSubPicProvider(pSubPicProvider);
- }
-
- return hr;
-}
-
-HRESULT CDX7AllocatorPresenter::AllocSurfaces()
-{
- CAutoLock cAutoLock(this);
-
- const CRenderersSettings& r = GetRenderersSettings();
-
- m_pVideoTexture = nullptr;
- m_pVideoSurface = nullptr;
-
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
- ddsd.ddsCaps.dwCaps = DDSCAPS_VIDEOMEMORY;
- ddsd.dwWidth = m_nativeVideoSize.cx;
- ddsd.dwHeight = m_nativeVideoSize.cy;
- ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
- ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
- ddsd.ddpfPixelFormat.dwRGBBitCount = 32;
- ddsd.ddpfPixelFormat.dwRBitMask = 0x00FF0000;
- ddsd.ddpfPixelFormat.dwGBitMask = 0x0000FF00;
- ddsd.ddpfPixelFormat.dwBBitMask = 0x000000FF;
-
- if (r.iAPSurfaceUsage == VIDRNDT_AP_TEXTURE2D || r.iAPSurfaceUsage == VIDRNDT_AP_TEXTURE3D) {
- ddsd.ddsCaps.dwCaps |= DDSCAPS_TEXTURE;
- //ddsd.ddpfPixelFormat.dwFlags |= DDPF_ALPHAPIXELS;
- //ddsd.ddpfPixelFormat.dwRGBAlphaBitMask = 0xFF000000;
- }
-
- HRESULT hr = m_pDD->CreateSurface(&ddsd, &m_pVideoSurface, nullptr);
- if (FAILED(hr)) {
- // FIXME: eh, dx9 has no problem creating a 32bpp surface under a 16bpp desktop, but dx7 fails here (textures are ok)
- DDSURFACEDESC2 ddsd2;
- INITDDSTRUCT(ddsd2);
- if (!(r.iAPSurfaceUsage == VIDRNDT_AP_TEXTURE2D || r.iAPSurfaceUsage == VIDRNDT_AP_TEXTURE3D)
- && SUCCEEDED(m_pDD->GetDisplayMode(&ddsd2))
- && ddsd2.ddpfPixelFormat.dwRGBBitCount == 16) {
- ddsd.ddpfPixelFormat.dwRGBBitCount = 16;
- ddsd.ddpfPixelFormat.dwRBitMask = 0x0000F800;
- ddsd.ddpfPixelFormat.dwGBitMask = 0x000007E0;
- ddsd.ddpfPixelFormat.dwBBitMask = 0x0000001F;
- hr = m_pDD->CreateSurface(&ddsd, &m_pVideoSurface, nullptr);
- }
-
- if (FAILED(hr)) {
- return hr;
- }
- }
-
- if (r.iAPSurfaceUsage == VIDRNDT_AP_TEXTURE3D) {
- m_pVideoTexture = m_pVideoSurface;
- }
-
- DDBLTFX fx;
- INITDDSTRUCT(fx);
- fx.dwFillColor = 0;
- m_pVideoSurface->Blt(nullptr, nullptr, nullptr, DDBLT_WAIT | DDBLT_COLORFILL, &fx);
-
- return S_OK;
-}
-
-void CDX7AllocatorPresenter::DeleteSurfaces()
-{
- CAutoLock cAutoLock(this);
-
- m_pVideoTexture = nullptr;
- m_pVideoSurface = nullptr;
-}
-
-// ISubPicAllocatorPresenter
-
-STDMETHODIMP CDX7AllocatorPresenter::CreateRenderer(IUnknown** ppRenderer)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP_(bool) CDX7AllocatorPresenter::Paint(bool bAll)
-{
- if (m_bPendingResetDevice) {
- SendResetRequest();
- return false;
- }
-
- CAutoLock cAutoLock(this);
-
- if (m_windowRect.right <= m_windowRect.left || m_windowRect.bottom <= m_windowRect.top
- || m_nativeVideoSize.cx <= 0 || m_nativeVideoSize.cy <= 0
- || !m_pPrimary || !m_pBackBuffer || !m_pVideoSurface) {
- return false;
- }
-
- HRESULT hr;
-
- CRect rSrcVid(CPoint(0, 0), m_nativeVideoSize);
- CRect rDstVid(m_videoRect);
-
- CRect rSrcPri(CPoint(0, 0), m_windowRect.Size());
- CRect rDstPri(m_windowRect);
-
- if (bAll) {
- // clear the backbuffer
-
- CRect rl(0, 0, rDstVid.left, rSrcPri.bottom);
- CRect rr(rDstVid.right, 0, rSrcPri.right, rSrcPri.bottom);
- CRect rt(0, 0, rSrcPri.right, rDstVid.top);
- CRect rb(0, rDstVid.bottom, rSrcPri.right, rSrcPri.bottom);
-
- DDBLTFX fx;
- INITDDSTRUCT(fx);
- fx.dwFillColor = 0;
- hr = m_pBackBuffer->Blt(nullptr, nullptr, nullptr, DDBLT_WAIT | DDBLT_COLORFILL, &fx);
-
- // paint the video on the backbuffer
-
- if (!rDstVid.IsRectEmpty()) {
- if (m_pVideoTexture) {
- Vector v[4];
- Transform(rDstVid, v);
- hr = TextureBlt(m_pD3DDev, m_pVideoTexture, v, rSrcVid);
- } else {
- hr = m_pBackBuffer->Blt(rDstVid, m_pVideoSurface, rSrcVid, DDBLT_WAIT, nullptr);
- }
- }
-
- // paint the text on the backbuffer
-
- AlphaBltSubPic(rDstPri, rDstVid);
- }
-
- // wait vsync
-
- m_pDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, nullptr);
-
- // blt to the primary surface
-
- MapWindowRect(m_hWnd, HWND_DESKTOP, &rDstPri);
- hr = m_pPrimary->Blt(rDstPri, m_pBackBuffer, rSrcPri, DDBLT_WAIT, nullptr);
-
- if (hr == DDERR_SURFACELOST) {
- m_bPendingResetDevice = true;
- SendResetRequest();
- return false;
- }
-
- return true;
-}
-
-void CDX7AllocatorPresenter::SendResetRequest()
-{
- if (!m_bDeviceResetRequested) {
- m_bDeviceResetRequested = true;
- AfxGetApp()->m_pMainWnd->PostMessage(WM_RESET_DEVICE);
- }
-}
-
-STDMETHODIMP_(bool) CDX7AllocatorPresenter::ResetDevice()
-{
- HRESULT hr;
- DeleteSurfaces();
- if (FAILED(hr = CreateDevice()) || FAILED(hr = AllocSurfaces())) {
- //DDERR_UNSUPPORTEDMODE - 0x8876024e
- TRACE(_T("ResetDevice failed: 0x%08x\n"), (LONG)hr);
- m_bDeviceResetRequested = false;
- return false;
- }
- TRACE(_T("ResetDevice\n"));
- m_bPendingResetDevice = false;
- m_bDeviceResetRequested = false;
- return true;
-}
-
-STDMETHODIMP_(bool) CDX7AllocatorPresenter::DisplayChange()
-{
- return true;
-}
-
-STDMETHODIMP CDX7AllocatorPresenter::GetDIB(BYTE* lpDib, DWORD* size)
-{
- CheckPointer(size, E_POINTER);
-
- HRESULT hr;
-
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- if (FAILED(m_pVideoSurface->GetSurfaceDesc(&ddsd))) {
- return E_FAIL;
- }
-
- if (ddsd.ddpfPixelFormat.dwRGBBitCount != 16 && ddsd.ddpfPixelFormat.dwRGBBitCount != 32) {
- return E_FAIL;
- }
-
- DWORD required = sizeof(BITMAPINFOHEADER) + (ddsd.dwWidth * ddsd.dwHeight * 32 >> 3);
- if (!lpDib) {
- *size = required;
- return S_OK;
- }
- if (*size < required) {
- return E_OUTOFMEMORY;
- }
- *size = required;
-
- INITDDSTRUCT(ddsd);
- if (FAILED(hr = m_pVideoSurface->Lock(nullptr, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR | DDLOCK_READONLY | DDLOCK_NOSYSLOCK, nullptr))) {
- // TODO
- return hr;
- }
-
- BITMAPINFOHEADER* bih = (BITMAPINFOHEADER*)lpDib;
- ZeroMemory(bih, sizeof(BITMAPINFOHEADER));
- bih->biSize = sizeof(BITMAPINFOHEADER);
- bih->biWidth = ddsd.dwWidth;
- bih->biHeight = ddsd.dwHeight;
- bih->biBitCount = 32;
- bih->biPlanes = 1;
- bih->biSizeImage = bih->biWidth * bih->biHeight * bih->biBitCount >> 3;
-
- BitBltFromRGBToRGB(
- bih->biWidth, bih->biHeight,
- (BYTE*)(bih + 1), bih->biWidth * bih->biBitCount >> 3, bih->biBitCount,
- (BYTE*)ddsd.lpSurface + ddsd.lPitch * (ddsd.dwHeight - 1), -(int)ddsd.lPitch, ddsd.ddpfPixelFormat.dwRGBBitCount);
-
- m_pVideoSurface->Unlock(nullptr);
-
- /*
- BitBltFromRGBToRGB(
- w, h,
- (BYTE*)ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRGBBitCount,
- (BYTE*)bm.bmBits, bm.bmWidthBytes, bm.bmBitsPixel);
- m_pVideoSurfaceOff->Unlock(nullptr);
- fOk = true;
- }
- */
-
- return S_OK;
-}
diff --git a/src/filters/renderer/VideoRenderers/DX7AllocatorPresenter.h b/src/filters/renderer/VideoRenderers/DX7AllocatorPresenter.h
deleted file mode 100644
index 42a8de644..000000000
--- a/src/filters/renderer/VideoRenderers/DX7AllocatorPresenter.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include "AllocatorCommon7.h"
-#include <ddraw.h>
-#include "dx/d3d.h"
-#include "../SubPic/SubPicAllocatorPresenterImpl.h"
-
-namespace DSObjects
-{
- class CDX7AllocatorPresenter
- : public CSubPicAllocatorPresenterImpl
- {
- protected:
- CSize m_ScreenSize;
-
- HMODULE m_hDDrawLib;
- CComPtr<IDirectDraw7> m_pDD;
- CComQIPtr<IDirect3D7, &IID_IDirect3D7> m_pD3D;
- CComPtr<IDirect3DDevice7> m_pD3DDev;
-
- CComPtr<IDirectDrawSurface7> m_pPrimary;
- CComPtr<IDirectDrawSurface7> m_pBackBuffer;
- CComPtr<IDirectDrawSurface7> m_pVideoTexture;
- CComPtr<IDirectDrawSurface7> m_pVideoSurface;
-
- virtual HRESULT CreateDevice();
- virtual HRESULT AllocSurfaces();
- virtual void DeleteSurfaces();
-
- void SendResetRequest();
-
- bool m_bIsRendering;
-
- public:
- CDX7AllocatorPresenter(HWND hWnd, HRESULT& hr);
- ~CDX7AllocatorPresenter();
-
- // ISubPicAllocatorPresenter
- STDMETHODIMP CreateRenderer(IUnknown** ppRenderer);
- STDMETHODIMP_(bool) Paint(bool bAll);
- STDMETHODIMP GetDIB(BYTE* lpDib, DWORD* size);
- STDMETHODIMP_(bool) ResetDevice();
- STDMETHODIMP_(bool) DisplayChange();
-
- // ISubPicAllocatorPresenter2
- STDMETHODIMP_(bool) IsRendering() {
- return m_bIsRendering;
- }
- };
-}
diff --git a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp
index d036648c2..151235b29 100644
--- a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp
+++ b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,13 +23,14 @@
#include <algorithm>
#include "RenderersSettings.h"
#include "DX9AllocatorPresenter.h"
-#include <InitGuid.h>
#include <utility>
#include "../../../SubPic/DX9SubPic.h"
#include "../../../SubPic/SubPicQueueImpl.h"
#include "IPinHook.h"
-#include "version.h"
#include "FocusThread.h"
+#include "../../../DSUtil/SysVersion.h"
+#include "../../../DSUtil/vd.h"
+#include <mpc-hc_config.h>
CCritSec g_ffdshowReceive;
bool queue_ffdshow_support = false;
@@ -39,6 +40,13 @@ bool queue_ffdshow_support = false;
#define FRAMERATE_MAX_DELTA 3000
+#define REFERENCE_WIDTH 1920
+#define FONT_HEIGHT 21
+#define BOLD_THRESHOLD 11
+#define TEXT_PADDING 2
+#define GRAPH_HEIGHT 360
+#define GRAPH_WIDTH 1000
+
using namespace DSObjects;
#pragma warning(push)
@@ -55,9 +63,21 @@ CDX9AllocatorPresenter::CDX9AllocatorPresenter(HWND hWnd, bool bFullscreen, HRES
, m_bIsFullscreen(bFullscreen)
, m_bNeedCheckSample(true)
, m_MainThreadId(0)
+ , m_bIsRendering(false)
+ , m_hDWMAPI(nullptr)
+ , m_hD3D9(nullptr)
+ , m_pDwmIsCompositionEnabled(nullptr)
+ , m_pDwmEnableComposition(nullptr)
+ , m_pDirect3DCreate9Ex(nullptr)
+ , m_pDirectDraw(nullptr)
, m_LastAdapterCheck(0)
, m_nTearingPos(0)
, m_VMR9AlphaBitmapWidthBytes(0)
+ , m_pD3DXLoadSurfaceFromMemory(nullptr)
+ , m_pD3DXLoadSurfaceFromSurface(nullptr)
+ , m_pD3DXCreateLine(nullptr)
+ , m_pD3DXCreateFont(nullptr)
+ , m_pD3DXCreateSprite(nullptr)
, m_nVMR9Surfaces(0)
, m_iVMR9Surface(0)
, m_nUsedBuffer(0)
@@ -96,7 +116,6 @@ CDX9AllocatorPresenter::CDX9AllocatorPresenter(HWND hWnd, bool bFullscreen, HRES
, m_DetectedFrameTimePos(0)
, m_bInterlaced(false)
, m_nFrameType(PICT_NONE)
- , m_TextScale(1.0)
, m_VBlankEndWait(0)
, m_VBlankStartWait(0)
, m_VBlankWaitTime(0)
@@ -132,18 +151,7 @@ CDX9AllocatorPresenter::CDX9AllocatorPresenter(HWND hWnd, bool bFullscreen, HRES
, m_LastFrameDuration(0)
, m_LastSampleTime(0)
, m_FocusThread(nullptr)
- , m_pDirectDraw(nullptr)
- , m_hDWMAPI(nullptr)
- , m_hD3D9(nullptr)
- , m_pD3DXLoadSurfaceFromMemory(nullptr)
- , m_pD3DXLoadSurfaceFromSurface(nullptr)
- , m_pD3DXCreateLine(nullptr)
- , m_pD3DXCreateFont(nullptr)
- , m_pD3DXCreateSprite(nullptr)
- , m_pDwmIsCompositionEnabled(nullptr)
- , m_pDwmEnableComposition(nullptr)
- , m_pDirect3DCreate9Ex(nullptr)
- , m_bIsRendering(false)
+ , m_hFocusWindow(nullptr)
{
ZeroMemory(&m_VMR9AlphaBitmap, sizeof(m_VMR9AlphaBitmap));
@@ -230,14 +238,8 @@ CDX9AllocatorPresenter::~CDX9AllocatorPresenter()
m_pD3D = nullptr;
m_pD3DEx = nullptr;
- if (m_hDWMAPI) {
- FreeLibrary(m_hDWMAPI);
- m_hDWMAPI = nullptr;
- }
- if (m_hD3D9) {
- FreeLibrary(m_hD3D9);
- m_hD3D9 = nullptr;
- }
+ m_pSubPicQueue = nullptr;
+ m_pAllocator = nullptr;
if (m_FocusThread) {
m_FocusThread->PostThreadMessage(WM_QUIT, 0, 0);
@@ -246,6 +248,15 @@ CDX9AllocatorPresenter::~CDX9AllocatorPresenter()
TerminateThread(m_FocusThread->m_hThread, 0xDEAD);
}
}
+
+ if (m_hDWMAPI) {
+ FreeLibrary(m_hDWMAPI);
+ m_hDWMAPI = nullptr;
+ }
+ if (m_hD3D9) {
+ FreeLibrary(m_hD3D9);
+ m_hD3D9 = nullptr;
+ }
}
void ModerateFloat(double& Value, double Target, double& ValuePrim, double ChangeSpeed);
@@ -623,8 +634,11 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
m_bCompositionEnabled = !!bCompositionEnabled;
m_bAlternativeVSync = r.m_AdvRendSets.bVMR9AlterativeVSync;
- // detect FP textures support
- rd->m_bFP16Support = SUCCEEDED(m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_QUERY_FILTER, D3DRTYPE_VOLUMETEXTURE, D3DFMT_A32B32G32R32F));
+ // detect FP16 textures support
+ rd->m_bFP16Support = SUCCEEDED(m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_QUERY_FILTER, D3DRTYPE_VOLUMETEXTURE, D3DFMT_A16B16G16R16F));
+
+ // detect FP32 textures support
+ rd->m_bFP32Support = SUCCEEDED(m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_QUERY_FILTER, D3DRTYPE_VOLUMETEXTURE, D3DFMT_A32B32G32R32F));
// detect 10-bit textures support
rd->m_b10bitSupport = SUCCEEDED(m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_QUERY_FILTER, D3DRTYPE_TEXTURE, D3DFMT_A2R10G10B10));
@@ -635,7 +649,7 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
// set settings that depend on hardware feature support
m_bForceInputHighColorResolution = r.m_AdvRendSets.bEVRForceInputHighColorResolution && m_bIsEVR && rd->m_b10bitSupport;
m_bHighColorResolution = r.m_AdvRendSets.bEVRHighColorResolution && m_bIsEVR && rd->m_b10bitSupport && bHighColorSupport;
- m_bFullFloatingPointProcessing = r.m_AdvRendSets.bVMR9FullFloatingPointProcessing && rd->m_bFP16Support;
+ m_bFullFloatingPointProcessing = r.m_AdvRendSets.bVMR9FullFloatingPointProcessing && rd->m_bFP32Support;
m_bHalfFloatingPointProcessing = r.m_AdvRendSets.bVMR9HalfFloatingPointProcessing && rd->m_bFP16Support && !m_bFullFloatingPointProcessing;
// set color formats
@@ -672,14 +686,18 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
if (r.m_AdvRendSets.bVMR9FullscreenGUISupport && !m_bHighColorResolution) {
pp.Flags |= D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
}
- m_D3DDevExError = L"No m_pD3DEx";
+ m_D3DDevExError = _T("No m_pD3DEx");
if (!m_FocusThread) {
m_FocusThread = (CFocusThread*)AfxBeginThread(RUNTIME_CLASS(CFocusThread), 0, 0, 0);
}
+ HWND hFocusWindow = m_FocusThread->GetFocusWindow();
+ bTryToReset &= m_hFocusWindow == hFocusWindow;
+ m_hFocusWindow = hFocusWindow;
+
if (m_pD3DEx) {
- m_pD3DEx->GetAdapterDisplayModeEx(m_CurrentAdapter, &DisplayMode, nullptr);
+ CHECK_HR(m_pD3DEx->GetAdapterDisplayModeEx(m_CurrentAdapter, &DisplayMode, nullptr));
DisplayMode.Format = pp.BackBufferFormat;
m_ScreenSize.SetSize(DisplayMode.Width, DisplayMode.Height);
@@ -687,21 +705,18 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
pp.BackBufferWidth = m_ScreenSize.cx;
pp.BackBufferHeight = m_ScreenSize.cy;
- if (bTryToReset) {
- if (!m_pD3DDevEx || FAILED(hr = m_pD3DDevEx->ResetEx(&pp, &DisplayMode))) {
- bTryToReset = false;
- m_pD3DDev = nullptr;
- m_pD3DDevEx = nullptr;
- }
- }
+ bTryToReset = bTryToReset && m_pD3DDevEx && SUCCEEDED(hr = m_pD3DDevEx->ResetEx(&pp, &DisplayMode));
+
if (!bTryToReset) {
+ m_pD3DDev = nullptr;
+ m_pD3DDevEx = nullptr;
hr = m_pD3DEx->CreateDeviceEx(
- m_CurrentAdapter, D3DDEVTYPE_HAL, m_FocusThread->GetFocusWindow(),
+ m_CurrentAdapter, D3DDEVTYPE_HAL, m_hFocusWindow,
GetVertexProcessing() | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED | D3DCREATE_ENABLE_PRESENTSTATS | D3DCREATE_NOWINDOWCHANGES, //D3DCREATE_MANAGED
&pp, &DisplayMode, &m_pD3DDevEx);
}
- m_D3DDevExError = GetWindowsErrorMessage(hr, m_hD3D9);
+ m_D3DDevExError = FAILED(hr) ? GetWindowsErrorMessage(hr, m_hD3D9) : _T("");
if (m_pD3DDevEx) {
m_pD3DDev = m_pD3DDevEx;
m_BackbufferType = pp.BackBufferFormat;
@@ -714,7 +729,7 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
}
}
if (!m_pD3DDev) {
- m_pD3D->GetAdapterDisplayMode(m_CurrentAdapter, &d3ddm);
+ CHECK_HR(m_pD3D->GetAdapterDisplayMode(m_CurrentAdapter, &d3ddm));
d3ddm.Format = pp.BackBufferFormat;
m_ScreenSize.SetSize(d3ddm.Width, d3ddm.Height);
pp.FullScreen_RefreshRateInHz = m_refreshRate = d3ddm.RefreshRate;
@@ -722,7 +737,7 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
pp.BackBufferHeight = m_ScreenSize.cy;
hr = m_pD3D->CreateDevice(
- m_CurrentAdapter, D3DDEVTYPE_HAL, m_FocusThread->GetFocusWindow(),
+ m_CurrentAdapter, D3DDEVTYPE_HAL, m_hFocusWindow,
GetVertexProcessing() | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED | D3DCREATE_NOWINDOWCHANGES, //D3DCREATE_MANAGED
&pp, &m_pD3DDev);
m_DisplayType = d3ddm.Format;
@@ -744,25 +759,25 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
}
+ bTryToReset &= m_hFocusWindow == m_hWnd;
+ m_hFocusWindow = m_hWnd;
+
if (m_pD3DEx) {
- m_pD3DEx->GetAdapterDisplayModeEx(m_CurrentAdapter, &DisplayMode, nullptr);
+ CHECK_HR(m_pD3DEx->GetAdapterDisplayModeEx(m_CurrentAdapter, &DisplayMode, nullptr));
m_ScreenSize.SetSize(DisplayMode.Width, DisplayMode.Height);
m_refreshRate = DisplayMode.RefreshRate;
pp.BackBufferWidth = szDesktopSize.cx;
pp.BackBufferHeight = szDesktopSize.cy;
- if (bTryToReset) {
- if (!m_pD3DDevEx || FAILED(hr = m_pD3DDevEx->ResetEx(&pp, nullptr))) {
- bTryToReset = false;
- m_pD3DDev = nullptr;
- m_pD3DDevEx = nullptr;
- }
- }
+ bTryToReset = bTryToReset && m_pD3DDevEx && SUCCEEDED(hr = m_pD3DDevEx->ResetEx(&pp, nullptr));
+
if (!bTryToReset) {
+ m_pD3DDev = nullptr;
+ m_pD3DDevEx = nullptr;
// We can get 0x8876086a here when switching from two displays to one display using Win + P (Windows 7)
// Cause: We might not reinitialize dx correctly during the switch
hr = m_pD3DEx->CreateDeviceEx(
- m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
+ m_CurrentAdapter, D3DDEVTYPE_HAL, m_hFocusWindow,
GetVertexProcessing() | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED | D3DCREATE_ENABLE_PRESENTSTATS, //D3DCREATE_MANAGED
&pp, nullptr, &m_pD3DDevEx);
}
@@ -777,14 +792,14 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
}
}
if (!m_pD3DDev) {
- m_pD3D->GetAdapterDisplayMode(m_CurrentAdapter, &d3ddm);
+ CHECK_HR(m_pD3D->GetAdapterDisplayMode(m_CurrentAdapter, &d3ddm));
m_ScreenSize.SetSize(d3ddm.Width, d3ddm.Height);
m_refreshRate = d3ddm.RefreshRate;
pp.BackBufferWidth = szDesktopSize.cx;
pp.BackBufferHeight = szDesktopSize.cy;
hr = m_pD3D->CreateDevice(
- m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
+ m_CurrentAdapter, D3DDEVTYPE_HAL, m_hFocusWindow,
GetVertexProcessing() | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED, //D3DCREATE_MANAGED
&pp, &m_pD3DDev);
m_DisplayType = d3ddm.Format;
@@ -792,22 +807,19 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
m_BackbufferType = pp.BackBufferFormat;
}
- while (hr == D3DERR_DEVICELOST) {
- TRACE(_T("D3DERR_DEVICELOST. Trying to Reset.\n"));
- hr = m_pD3DDev->TestCooperativeLevel();
- }
- if (hr == D3DERR_DEVICENOTRESET) {
- TRACE(_T("D3DERR_DEVICENOTRESET\n"));
- hr = m_pD3DDev->Reset(&pp);
- }
-
- TRACE(_T("CreateDevice: %ld\n"), (LONG)hr);
- ASSERT(SUCCEEDED(hr));
-
- m_MainThreadId = GetCurrentThreadId();
+ if (m_pD3DDev) {
+ while (hr == D3DERR_DEVICELOST) {
+ TRACE(_T("D3DERR_DEVICELOST. Trying to Reset.\n"));
+ hr = m_pD3DDev->TestCooperativeLevel();
+ }
+ if (hr == D3DERR_DEVICENOTRESET) {
+ TRACE(_T("D3DERR_DEVICENOTRESET\n"));
+ hr = m_pD3DDev->Reset(&pp);
+ }
- if (m_pD3DDevEx) {
- m_pD3DDevEx->SetGPUThreadPriority(7);
+ if (m_pD3DDevEx) {
+ m_pD3DDevEx->SetGPUThreadPriority(7);
+ }
}
if (FAILED(hr)) {
@@ -819,6 +831,15 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
return hr;
}
+ ASSERT(m_pD3DDev);
+
+ if (m_ScreenSize.cx <= 0 || m_ScreenSize.cy <= 0) {
+ _Error += L"Invalid screen size\n";
+ return E_FAIL;
+ }
+
+ m_MainThreadId = GetCurrentThreadId();
+
// Get the device caps
ZeroMemory(&m_Caps, sizeof(m_Caps));
m_pD3DDev->GetDeviceCaps(&m_Caps);
@@ -841,7 +862,7 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
hr = S_OK;
if (!m_pSubPicQueue) {
- CAutoLock(this);
+ CAutoLock cAutoLock(this);
m_pSubPicQueue = r.subPicQueueSettings.nSize > 0
? (ISubPicQueue*)DEBUG_NEW CSubPicQueue(r.subPicQueueSettings, m_pAllocator, &hr)
: (ISubPicQueue*)DEBUG_NEW CSubPicQueueNoThread(r.subPicQueueSettings, m_pAllocator, &hr);
@@ -859,34 +880,6 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString& _Error)
m_pSubPicQueue->SetSubPicProvider(pSubPicProvider);
}
- if (m_pD3DXCreateFont) {
- long MinSize = 1600;
- long CurrentSize = std::min(m_ScreenSize.cx, MinSize);
- double Scale = double(CurrentSize) / double(MinSize);
- m_TextScale = Scale;
- m_pD3DXCreateFont(m_pD3DDev, // D3D device
- (int)(-24.0 * Scale), // Height
- (UINT)(-11.0 * Scale), // Width
- CurrentSize < 800 ? FW_NORMAL : FW_BOLD, // Weight
- 0, // MipLevels, 0 = autogen mipmaps
- FALSE, // Italic
- DEFAULT_CHARSET, // CharSet
- OUT_DEFAULT_PRECIS, // OutputPrecision
- ANTIALIASED_QUALITY, // Quality
- FIXED_PITCH | FF_DONTCARE, // PitchAndFamily
- L"Lucida Console", // pFaceName
- &m_pFont); // ppFont
- }
-
- if (m_pD3DXCreateSprite) {
- m_pD3DXCreateSprite(m_pD3DDev, // D3D device
- &m_pSprite);
- }
-
- if (m_pD3DXCreateLine) {
- m_pD3DXCreateLine(m_pD3DDev, &m_pLine);
- }
-
m_LastAdapterCheck = rd->GetPerfCounter();
return S_OK;
@@ -1126,7 +1119,7 @@ bool CDX9AllocatorPresenter::WaitForVBlankRange(int& _RasterStart, int _RasterSi
if (!GetVBlank(ScanLine, InVBlank, _bMeasure)) {
break;
}
- int ScanLineDiff = long(ScanLine) - _RasterStart;
+ ScanLineDiff = long(ScanLine) - _RasterStart;
if (ScanLineDiff > m_ScreenSize.cy / 2) {
ScanLineDiff -= m_ScreenSize.cy;
} else if (ScanLineDiff < -m_ScreenSize.cy / 2) {
@@ -1188,7 +1181,7 @@ bool CDX9AllocatorPresenter::WaitForVBlankRange(int& _RasterStart, int _RasterSi
if (!GetVBlank(ScanLine, InVBlank, _bMeasure)) {
break;
}
- int ScanLineDiff = long(ScanLine) - _RasterStart;
+ ScanLineDiff = long(ScanLine) - _RasterStart;
if (ScanLineDiff > m_ScreenSize.cy / 2) {
ScanLineDiff -= m_ScreenSize.cy;
} else if (ScanLineDiff < -m_ScreenSize.cy / 2) {
@@ -1202,7 +1195,7 @@ bool CDX9AllocatorPresenter::WaitForVBlankRange(int& _RasterStart, int _RasterSi
bWaited = true;
- int ScanLineDiffLock = long(ScanLine) - D3DDevLockStart;
+ ScanLineDiffLock = long(ScanLine) - D3DDevLockStart;
if (ScanLineDiffLock > m_ScreenSize.cy / 2) {
ScanLineDiffLock -= m_ScreenSize.cy;
} else if (ScanLineDiffLock < -m_ScreenSize.cy / 2) {
@@ -1219,7 +1212,7 @@ bool CDX9AllocatorPresenter::WaitForVBlankRange(int& _RasterStart, int _RasterSi
LastLineDiffLock = ScanLineDiffLock;
- int ScanLineDiffSleep = long(ScanLine) - NoSleepStart;
+ ScanLineDiffSleep = long(ScanLine) - NoSleepStart;
if (ScanLineDiffSleep > m_ScreenSize.cy / 2) {
ScanLineDiffSleep -= m_ScreenSize.cy;
} else if (ScanLineDiffSleep < -m_ScreenSize.cy / 2) {
@@ -1412,8 +1405,8 @@ STDMETHODIMP_(bool) CDX9AllocatorPresenter::Paint(bool bAll)
if ((m_VMR9AlphaBitmap.dwFlags & VMRBITMAP_DISABLE) == 0 && (BYTE*)m_VMR9AlphaBitmapData) {
if ((m_pD3DXLoadSurfaceFromMemory != nullptr) &&
SUCCEEDED(hr = m_pD3DDev->CreateTexture(rcSrc.Width(), rcSrc.Height(), 1,
- D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8,
- D3DPOOL_DEFAULT, &m_pOSDTexture, nullptr))) {
+ D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8,
+ D3DPOOL_DEFAULT, &m_pOSDTexture, nullptr))) {
if (SUCCEEDED(hr = m_pOSDTexture->GetSurfaceLevel(0, &m_pOSDSurface))) {
hr = m_pD3DXLoadSurfaceFromMemory(m_pOSDSurface,
nullptr,
@@ -1455,19 +1448,18 @@ STDMETHODIMP_(bool) CDX9AllocatorPresenter::Paint(bool bAll)
bool bDoVSyncInPresent = (!bCompositionEnabled && !m_bAlternativeVSync) || !r.m_AdvRendSets.bVMR9VSync;
- CComPtr<IDirect3DQuery9> pEventQuery;
-
- m_pD3DDev->CreateQuery(D3DQUERYTYPE_EVENT, &pEventQuery);
- if (pEventQuery) {
- pEventQuery->Issue(D3DISSUE_END);
+ CComPtr<IDirect3DQuery9> pEventQueryFlushBeforeVSync;
+ m_pD3DDev->CreateQuery(D3DQUERYTYPE_EVENT, &pEventQueryFlushBeforeVSync);
+ if (pEventQueryFlushBeforeVSync) {
+ pEventQueryFlushBeforeVSync->Issue(D3DISSUE_END);
}
- if (r.m_AdvRendSets.bVMRFlushGPUBeforeVSync && pEventQuery) {
+ if (r.m_AdvRendSets.bVMRFlushGPUBeforeVSync && pEventQueryFlushBeforeVSync) {
LONGLONG llPerf = rd->GetPerfCounter();
BOOL Data;
//Sleep(5);
LONGLONG FlushStartTime = rd->GetPerfCounter();
- while (S_FALSE == pEventQuery->GetData(&Data, sizeof(Data), D3DGETDATA_FLUSH)) {
+ while (S_FALSE == pEventQueryFlushBeforeVSync->GetData(&Data, sizeof(Data), D3DGETDATA_FLUSH)) {
if (!r.m_AdvRendSets.bVMRFlushGPUWait) {
break;
}
@@ -1510,8 +1502,8 @@ STDMETHODIMP_(bool) CDX9AllocatorPresenter::Paint(bool bAll)
// Create a query object
{
- CComPtr<IDirect3DQuery9> pEventQuery;
- m_pD3DDev->CreateQuery(D3DQUERYTYPE_EVENT, &pEventQuery);
+ CComPtr<IDirect3DQuery9> pEventQueryFlushAfterVSync;
+ m_pD3DDev->CreateQuery(D3DQUERYTYPE_EVENT, &pEventQueryFlushAfterVSync);
LONGLONG llPerf = rd->GetPerfCounter();
CRect presentationSrcRect(rDstPri), presentationDestRect(m_windowRect);
@@ -1532,15 +1524,15 @@ STDMETHODIMP_(bool) CDX9AllocatorPresenter::Paint(bool bAll)
}
}
// Issue an End event
- if (pEventQuery) {
- pEventQuery->Issue(D3DISSUE_END);
+ if (pEventQueryFlushAfterVSync) {
+ pEventQueryFlushAfterVSync->Issue(D3DISSUE_END);
}
BOOL Data;
- if (r.m_AdvRendSets.bVMRFlushGPUAfterPresent && pEventQuery) {
+ if (r.m_AdvRendSets.bVMRFlushGPUAfterPresent && pEventQueryFlushAfterVSync) {
LONGLONG FlushStartTime = rd->GetPerfCounter();
- while (S_FALSE == pEventQuery->GetData(&Data, sizeof(Data), D3DGETDATA_FLUSH)) {
+ while (S_FALSE == pEventQueryFlushAfterVSync->GetData(&Data, sizeof(Data), D3DGETDATA_FLUSH)) {
if (!r.m_AdvRendSets.bVMRFlushGPUWait) {
break;
}
@@ -1735,24 +1727,6 @@ STDMETHODIMP_(bool) CDX9AllocatorPresenter::DisplayChange()
return true;
}
-void CDX9AllocatorPresenter::DrawText(const RECT& rc, const CString& strText, int _Priority)
-{
- if (_Priority < 1) {
- return;
- }
-
- D3DXCOLOR Color1(1.0f, 0.2f, 0.2f, 1.0f);
- D3DXCOLOR Color0(0.0f, 0.0f, 0.0f, 1.0f);
- RECT Rect1 = rc;
- RECT Rect2 = rc;
- OffsetRect(&Rect2 , 2, 2);
-
- // Draw shadow
- m_pFont->DrawText(m_pSprite, strText, -1, &Rect2, DT_NOCLIP, Color0);
- // Draw text
- m_pFont->DrawText(m_pSprite, strText, -1, &Rect1, DT_NOCLIP, Color1);
-}
-
void CDX9AllocatorPresenter::ResetStats()
{
CRenderersData* rd = GetRenderersData();
@@ -1774,12 +1748,38 @@ void CDX9AllocatorPresenter::ResetStats()
CalculateJitter(Time);
}
+void CDX9AllocatorPresenter::InitStats()
+{
+ ASSERT(m_pD3DDev);
+ static LONG currentHeight = 0;
+ int newHeight = lround(FONT_HEIGHT * (double(m_windowRect.Width()) / REFERENCE_WIDTH));
+
+ if (m_pD3DXCreateFont && (!m_pFont || currentHeight != newHeight)) {
+ m_pFont = nullptr;
+ if (newHeight <= 0) {
+ ASSERT(FALSE);
+ }
+ m_pD3DXCreateFont(m_pD3DDev, newHeight, 0, newHeight < BOLD_THRESHOLD ? FW_NORMAL : FW_BOLD,
+ 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
+ SysVersion::IsXPOrLater() ? CLEARTYPE_NATURAL_QUALITY : ANTIALIASED_QUALITY,
+ FIXED_PITCH | FF_DONTCARE, L"Lucida Console", &m_pFont);
+ currentHeight = newHeight;
+ }
+
+ if (m_pD3DXCreateSprite && !m_pSprite) {
+ m_pD3DXCreateSprite(m_pD3DDev, &m_pSprite);
+ }
+
+ if (m_pD3DXCreateLine && !m_pLine) {
+ m_pD3DXCreateLine(m_pD3DDev, &m_pLine);
+ }
+}
+
void CDX9AllocatorPresenter::DrawStats()
{
- const CRenderersSettings& r = GetRenderersSettings();
const CRenderersData* rd = GetRenderersData();
- int iDetailedStats = 2;
+ int iDetailedStats;
switch (rd->m_iDisplayStats) {
case 1:
iDetailedStats = 2;
@@ -1790,144 +1790,187 @@ void CDX9AllocatorPresenter::DrawStats()
case 3:
iDetailedStats = 0;
break;
+ default:
+ ASSERT(FALSE);
+ return;
}
- LONGLONG llMaxJitter = m_MaxJitter;
- LONGLONG llMinJitter = m_MinJitter;
- LONGLONG llMaxSyncOffset = m_MaxSyncOffset;
- LONGLONG llMinSyncOffset = m_MinSyncOffset;
- RECT rc = {40, 40, 0, 0 };
+ InitStats();
+ const float textScale = float(m_windowRect.Width()) / REFERENCE_WIDTH;
+ const int lineHeight = lround((FONT_HEIGHT + TEXT_PADDING) * textScale);
+
if (m_pFont && m_pSprite) {
+ auto drawText = [&](CRect & rc, const CString & strText) {
+ D3DXCOLOR Color1(1.0f, 0.2f, 0.2f, 1.0f);
+ D3DXCOLOR Color0(0.0f, 0.0f, 0.0f, 1.0f);
+
+ RECT shadowRect = rc;
+ OffsetRect(&shadowRect, 2, 2);
+
+ // Draw shadow
+ m_pFont->DrawText(m_pSprite, strText, -1, &shadowRect, DT_NOCLIP, Color0);
+ // Draw text
+ m_pFont->DrawText(m_pSprite, strText, -1, rc, DT_NOCLIP, Color1);
+ rc.OffsetRect(0, lineHeight);
+ };
+
+ const CRenderersSettings& r = GetRenderersSettings();
+ LONGLONG llMaxJitter = m_MaxJitter;
+ LONGLONG llMinJitter = m_MinJitter;
+ LONGLONG llMaxSyncOffset = m_MaxSyncOffset;
+ LONGLONG llMinSyncOffset = m_MinSyncOffset;
+ CRect rc(lineHeight, lineHeight, 0, 0);
+
m_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
CString strText;
- int TextHeight = int(25.0 * m_TextScale + 0.5);
- //strText.Format(L"Frame rate : %7.03f (%7.3f ms = %.03f, %s) (%7.3f ms = %.03f%s) Clock: %7.3f ms %+1.4f %% %+1.9f %+1.9f", m_fAvrFps, double(m_rtTimePerFrame) / 10000.0, 10000000.0 / (double)(m_rtTimePerFrame), m_bInterlaced ? L"I" : L"P", GetFrameTime() * 1000.0, GetFrameRate(), m_DetectedLock ? L" L" : L"", m_ClockDiff/10000.0, m_ModeratedTimeSpeed*100.0 - 100.0, m_ModeratedTimeSpeedDiff, m_ClockDiffCalc/10000.0);
if (iDetailedStats > 1) {
if (m_bIsEVR) {
if (m_nFrameType != PICT_NONE) {
- strText.Format(L"Frame rate : %7.03f (%7.3f ms = %.03f, %s) (%7.3f ms = %.03f%s, %2.03f StdDev) Clock: %1.4f %%", m_fAvrFps, double(m_rtTimePerFrame) / 10000.0, 10000000.0 / (double)(m_rtTimePerFrame), m_nFrameType == PICT_FRAME ? L"P" : L"I", GetFrameTime() * 1000.0, GetFrameRate(), m_DetectedLock ? L" L" : L"", m_DetectedFrameTimeStdDev / 10000.0, m_ModeratedTimeSpeed * 100.0);
+ strText.Format(L"Frame rate : %7.03f (%7.3f ms = %.03f, %s) (%7.3f ms = %.03f%s, %2.03f StdDev) Clock: %1.4f %%",
+ m_fAvrFps,
+ double(m_rtTimePerFrame) / 10000.0, 10000000.0 / (double)(m_rtTimePerFrame),
+ m_nFrameType == PICT_FRAME ? L"P" : L"I", GetFrameTime() * 1000.0, GetFrameRate(),
+ m_DetectedLock ? L" L" : L"", m_DetectedFrameTimeStdDev / 10000.0,
+ m_ModeratedTimeSpeed * 100.0);
} else {
- strText.Format(L"Frame rate : %7.03f (%7.3f ms = %.03f, %s) (%7.3f ms = %.03f%s, %2.03f StdDev) Clock: %1.4f %%", m_fAvrFps, double(m_rtTimePerFrame) / 10000.0, 10000000.0 / (double)(m_rtTimePerFrame), m_bInterlaced ? L"I" : L"P", GetFrameTime() * 1000.0, GetFrameRate(), m_DetectedLock ? L" L" : L"", m_DetectedFrameTimeStdDev / 10000.0, m_ModeratedTimeSpeed * 100.0);
+ strText.Format(L"Frame rate : %7.03f (%7.3f ms = %.03f, %s) (%7.3f ms = %.03f%s, %2.03f StdDev) Clock: %1.4f %%",
+ m_fAvrFps,
+ double(m_rtTimePerFrame) / 10000.0, 10000000.0 / (double)(m_rtTimePerFrame),
+ m_bInterlaced ? L"I" : L"P", GetFrameTime() * 1000.0, GetFrameRate(),
+ m_DetectedLock ? L" L" : L"", m_DetectedFrameTimeStdDev / 10000.0,
+ m_ModeratedTimeSpeed * 100.0);
}
} else {
- strText.Format(L"Frame rate : %7.03f (%7.3f ms = %.03f, %s)", m_fAvrFps, double(m_rtTimePerFrame) / 10000.0, 10000000.0 / (double)(m_rtTimePerFrame), m_bInterlaced ? L"I" : L"P");
+ strText.Format(L"Frame rate : %7.03f (%7.3f ms = %.03f, %s)",
+ m_fAvrFps,
+ double(m_rtTimePerFrame) / 10000.0, 10000000.0 / (double)(m_rtTimePerFrame),
+ m_bInterlaced ? L"I" : L"P");
}
- }
- //strText.Format(L"Frame rate : %7.03f (%7.3f ms = %.03f, %s) (%7.3f ms = %.03f%s, %2.03f StdDev)", m_fAvrFps, double(m_rtTimePerFrame) / 10000.0, 10000000.0 / (double)(m_rtTimePerFrame), m_bInterlaced ? L"I" : L"P", GetFrameTime() * 1000.0, GetFrameRate(), m_DetectedLock ? L" L" : L"", m_DetectedFrameTimeStdDev / 10000.0);
- else {
+ } else {
strText.Format(L"Frame rate : %7.03f (%.03f%s)", m_fAvrFps, GetFrameRate(), m_DetectedLock ? L" L" : L"");
}
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
if (m_nFrameType != PICT_NONE) {
- strText.Format(L"Frame type : %s", m_nFrameType == PICT_FRAME ? L"Progressive" : m_nFrameType == PICT_BOTTOM_FIELD ? L"Interlaced : Bottom field first" : L"Interlaced : Top field first");
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(L"Frame type : %s",
+ m_nFrameType == PICT_FRAME ? L"Progressive" :
+ m_nFrameType == PICT_BOTTOM_FIELD ? L"Interlaced : Bottom field first" :
+ L"Interlaced : Top field first");
+ drawText(rc, strText);
}
if (iDetailedStats > 1) {
- strText = L"Settings : ";
+ strText = _T("Settings : ");
if (m_bIsEVR) {
- strText += "EVR ";
+ strText += _T("EVR ");
} else {
- strText += "VMR9 ";
+ strText += _T("VMR9 ");
}
if (m_bIsFullscreen) {
- strText += "FS ";
+ strText += _T("FS ");
}
if (r.m_AdvRendSets.bVMR9FullscreenGUISupport) {
- strText += "FSGui ";
+ strText += _T("FSGui ");
}
if (r.m_AdvRendSets.bVMRDisableDesktopComposition) {
- strText += "DisDC ";
+ strText += _T("DisDC ");
}
if (m_bColorManagement) {
- strText += "ColorMan ";
+ strText += _T("ColorMan ");
}
if (r.m_AdvRendSets.bVMRFlushGPUBeforeVSync) {
- strText += "GPUFlushBV ";
+ strText += _T("GPUFlushBV ");
}
if (r.m_AdvRendSets.bVMRFlushGPUAfterPresent) {
- strText += "GPUFlushAP ";
+ strText += _T("GPUFlushAP ");
}
if (r.m_AdvRendSets.bVMRFlushGPUWait) {
- strText += "GPUFlushWt ";
+ strText += _T("GPUFlushWt ");
}
if (r.m_AdvRendSets.bVMR9VSync) {
- strText += "VS ";
+ strText += _T("VS ");
}
if (r.m_AdvRendSets.bVMR9AlterativeVSync) {
- strText += "AltVS ";
+ strText += _T("AltVS ");
}
if (r.m_AdvRendSets.bVMR9VSyncAccurate) {
- strText += "AccVS ";
+ strText += _T("AccVS ");
}
if (r.m_AdvRendSets.iVMR9VSyncOffset) {
- strText.AppendFormat(L"VSOfst(%d)", r.m_AdvRendSets.iVMR9VSyncOffset);
+ strText.AppendFormat(_T("VSOfst(%d)"), r.m_AdvRendSets.iVMR9VSyncOffset);
}
if (m_bFullFloatingPointProcessing) {
- strText += "FullFP ";
+ strText += _T("FullFP ");
}
if (m_bHalfFloatingPointProcessing) {
- strText += "HalfFP ";
+ strText += _T("HalfFP ");
}
if (m_bIsEVR) {
if (m_bHighColorResolution) {
- strText += "10bitOut ";
+ strText += _T("10bitOut ");
}
if (m_bForceInputHighColorResolution) {
- strText += "For10bitIn ";
+ strText += _T("For10bitIn ");
}
if (r.m_AdvRendSets.bEVREnableFrameTimeCorrection) {
- strText += "FTC ";
+ strText += _T("FTC ");
}
if (r.m_AdvRendSets.iEVROutputRange == 0) {
- strText += "0-255 ";
+ strText += _T("0-255 ");
} else if (r.m_AdvRendSets.iEVROutputRange == 1) {
- strText += "16-235 ";
+ strText += _T("16-235 ");
}
}
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
- strText.Format(L"Formats : Surface %s Backbuffer %s Display %s Device %s D3DExError: %s", GetD3DFormatStr(m_SurfaceType), GetD3DFormatStr(m_BackbufferType), GetD3DFormatStr(m_DisplayType), m_pD3DDevEx ? L"D3DDevEx" : L"D3DDev", m_D3DDevExError.GetString());
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(L"Formats : Surface %s Backbuffer %s Display %s Device %s %s",
+ GetD3DFormatStr(m_SurfaceType), GetD3DFormatStr(m_BackbufferType),
+ GetD3DFormatStr(m_DisplayType), m_pD3DDevEx ? L"D3DDevEx" : L"D3DDev",
+ m_D3DDevExError.IsEmpty() ? _T("") : _T("D3DExError: ") + m_D3DDevExError);
+ drawText(rc, strText);
if (m_bIsEVR) {
- strText.Format(L"Refresh rate : %.05f Hz SL: %4d (%3u Hz) Last Duration: %10.6f Corrected Frame Time: %s", m_DetectedRefreshRate, int(m_DetectedScanlinesPerFrame + 0.5), m_refreshRate, double(m_LastFrameDuration) / 10000.0, m_bCorrectedFrameTime ? L"Yes" : L"No");
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ if (r.m_AdvRendSets.bVMR9VSync) {
+ strText.Format(_T("Refresh rate : %.05f Hz SL: %4d (%3u Hz) "),
+ m_DetectedRefreshRate, int(m_DetectedScanlinesPerFrame + 0.5), m_refreshRate);
+ } else {
+ strText.Format(_T("Refresh rate : %3u Hz "), m_refreshRate);
+ }
+ strText.AppendFormat(_T("Last Duration: %10.6f Corrected Frame Time: %s"),
+ double(m_LastFrameDuration) / 10000.0, m_bCorrectedFrameTime ? _T("Yes") : _T("No"));
+ drawText(rc, strText);
}
}
if (m_bSyncStatsAvailable) {
if (iDetailedStats > 1) {
- strText.Format(L"Sync offset : Min = %+8.3f ms, Max = %+8.3f ms, StdDev = %7.3f ms, Avr = %7.3f ms, Mode = %d", (double(llMinSyncOffset) / 10000.0), (double(llMaxSyncOffset) / 10000.0), m_fSyncOffsetStdDev / 10000.0, m_fSyncOffsetAvr / 10000.0, m_VSyncMode);
+ strText.Format(_T("Sync offset : Min = %+8.3f ms, Max = %+8.3f ms, StdDev = %7.3f ms, Avr = %7.3f ms, Mode = %d"),
+ (double(llMinSyncOffset) / 10000.0), (double(llMaxSyncOffset) / 10000.0),
+ m_fSyncOffsetStdDev / 10000.0, m_fSyncOffsetAvr / 10000.0, m_VSyncMode);
} else {
- strText.Format(L"Sync offset : Mode = %d", m_VSyncMode);
+ strText.Format(_T("Sync offset : Mode = %d"), m_VSyncMode);
}
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
}
if (iDetailedStats > 1) {
- strText.Format(L"Jitter : Min = %+8.3f ms, Max = %+8.3f ms, StdDev = %7.3f ms", (double(llMinJitter) / 10000.0), (double(llMaxJitter) / 10000.0), m_fJitterStdDev / 10000.0);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Jitter : Min = %+8.3f ms, Max = %+8.3f ms, StdDev = %7.3f ms"),
+ (double(llMinJitter) / 10000.0),
+ (double(llMaxJitter) / 10000.0),
+ m_fJitterStdDev / 10000.0);
+ drawText(rc, strText);
}
if (m_pAllocator && iDetailedStats > 1) {
@@ -1944,76 +1987,101 @@ void CDX9AllocatorPresenter::DrawStats()
}
pAlloc->GetStats(nFree, nAlloc);
- strText.Format(L"Subtitles : Free %d Allocated %d Buffered %d QueueStart %7.3f QueueEnd %7.3f",
- nFree, nAlloc, nSubPic, (double(rtQueueStart) / 10000000.0), (double(rtQueueEnd) / 10000000.0));
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Subtitles : Free %d Allocated %d Buffered %d QueueStart %7.3f QueueEnd %7.3f"),
+ nFree, nAlloc, nSubPic, (double(rtQueueStart) / 10000000.0),
+ (double(rtQueueEnd) / 10000000.0));
+ drawText(rc, strText);
}
if (iDetailedStats > 1) {
if (m_VBlankEndPresent == -100000) {
- strText.Format(L"VBlank Wait : Start %4d End %4d Wait %7.3f ms Lock %7.3f ms Offset %4d Max %4d", m_VBlankStartWait, m_VBlankEndWait, (double(m_VBlankWaitTime) / 10000.0), (double(m_VBlankLockTime) / 10000.0), m_VBlankMin, m_VBlankMax - m_VBlankMin);
+ strText.Format(_T("VBlank Wait : Start %4d End %4d Wait %7.3f ms Lock %7.3f ms Offset %4d Max %4d"),
+ m_VBlankStartWait, m_VBlankEndWait,
+ (double(m_VBlankWaitTime) / 10000.0),
+ (double(m_VBlankLockTime) / 10000.0),
+ m_VBlankMin, m_VBlankMax - m_VBlankMin);
} else {
- strText.Format(L"VBlank Wait : Start %4d End %4d Wait %7.3f ms Lock %7.3f ms Offset %4d Max %4d EndPresent %4d", m_VBlankStartWait, m_VBlankEndWait, (double(m_VBlankWaitTime) / 10000.0), (double(m_VBlankLockTime) / 10000.0), m_VBlankMin, m_VBlankMax - m_VBlankMin, m_VBlankEndPresent);
+ strText.Format(_T("VBlank Wait : Start %4d End %4d Wait %7.3f ms Lock %7.3f ms Offset %4d Max %4d EndPresent %4d"),
+ m_VBlankStartWait, m_VBlankEndWait,
+ (double(m_VBlankWaitTime) / 10000.0),
+ (double(m_VBlankLockTime) / 10000.0),
+ m_VBlankMin,
+ m_VBlankMax - m_VBlankMin,
+ m_VBlankEndPresent);
}
} else {
if (m_VBlankEndPresent == -100000) {
- strText.Format(L"VBlank Wait : Start %4d End %4d", m_VBlankStartWait, m_VBlankEndWait);
+ strText.Format(_T("VBlank Wait : Start %4d End %4d"), m_VBlankStartWait, m_VBlankEndWait);
} else {
- strText.Format(L"VBlank Wait : Start %4d End %4d EP %4d", m_VBlankStartWait, m_VBlankEndWait, m_VBlankEndPresent);
+ strText.Format(_T("VBlank Wait : Start %4d End %4d EP %4d"), m_VBlankStartWait, m_VBlankEndWait,
+ m_VBlankEndPresent);
}
}
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
BOOL bCompositionEnabled = m_bCompositionEnabled;
bool bDoVSyncInPresent = (!bCompositionEnabled && !m_bAlternativeVSync) || !r.m_AdvRendSets.bVMR9VSync;
if (iDetailedStats > 1 && bDoVSyncInPresent) {
- strText.Format(L"Present Wait : Wait %7.3f ms Min %7.3f ms Max %7.3f ms", (double(m_PresentWaitTime) / 10000.0), (double(m_PresentWaitTimeMin) / 10000.0), (double(m_PresentWaitTimeMax) / 10000.0));
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Present Wait : Wait %7.3f ms Min %7.3f ms Max %7.3f ms"),
+ (double(m_PresentWaitTime) / 10000.0),
+ (double(m_PresentWaitTimeMin) / 10000.0),
+ (double(m_PresentWaitTimeMax) / 10000.0));
+ drawText(rc, strText);
}
if (iDetailedStats > 1) {
if (m_WaitForGPUTime) {
- strText.Format(L"Paint Time : Draw %7.3f ms Min %7.3f ms Max %7.3f ms GPU %7.3f ms", (double(m_PaintTime - m_WaitForGPUTime) / 10000.0), (double(m_PaintTimeMin) / 10000.0), (double(m_PaintTimeMax) / 10000.0), (double(m_WaitForGPUTime) / 10000.0));
+ strText.Format(_T("Paint Time : Draw %7.3f ms Min %7.3f ms Max %7.3f ms GPU %7.3f ms"),
+ (double(m_PaintTime - m_WaitForGPUTime) / 10000.0),
+ (double(m_PaintTimeMin) / 10000.0),
+ (double(m_PaintTimeMax) / 10000.0),
+ (double(m_WaitForGPUTime) / 10000.0));
} else {
- strText.Format(L"Paint Time : Draw %7.3f ms Min %7.3f ms Max %7.3f ms", (double(m_PaintTime - m_WaitForGPUTime) / 10000.0), (double(m_PaintTimeMin) / 10000.0), (double(m_PaintTimeMax) / 10000.0));
+ strText.Format(_T("Paint Time : Draw %7.3f ms Min %7.3f ms Max %7.3f ms"),
+ (double(m_PaintTime - m_WaitForGPUTime) / 10000.0),
+ (double(m_PaintTimeMin) / 10000.0),
+ (double(m_PaintTimeMax) / 10000.0));
}
} else {
if (m_WaitForGPUTime) {
- strText.Format(L"Paint Time : Draw %7.3f ms GPU %7.3f ms", (double(m_PaintTime - m_WaitForGPUTime) / 10000.0), (double(m_WaitForGPUTime) / 10000.0));
+ strText.Format(_T("Paint Time : Draw %7.3f ms GPU %7.3f ms"),
+ (double(m_PaintTime - m_WaitForGPUTime) / 10000.0),
+ (double(m_WaitForGPUTime) / 10000.0));
} else {
- strText.Format(L"Paint Time : Draw %7.3f ms", (double(m_PaintTime - m_WaitForGPUTime) / 10000.0));
+ strText.Format(_T("Paint Time : Draw %7.3f ms"),
+ (double(m_PaintTime - m_WaitForGPUTime) / 10000.0));
}
}
- DrawText(rc, strText, 2);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
if (iDetailedStats > 1 && r.m_AdvRendSets.bVMR9VSync) {
- strText.Format(L"Raster Status: Wait %7.3f ms Min %7.3f ms Max %7.3f ms", (double(m_RasterStatusWaitTime) / 10000.0), (double(m_RasterStatusWaitTimeMin) / 10000.0), (double(m_RasterStatusWaitTimeMax) / 10000.0));
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Raster Status: Wait %7.3f ms Min %7.3f ms Max %7.3f ms"),
+ (double(m_RasterStatusWaitTime) / 10000.0),
+ (double(m_RasterStatusWaitTimeMin) / 10000.0),
+ (double(m_RasterStatusWaitTimeMax) / 10000.0));
+ drawText(rc, strText);
}
if (iDetailedStats > 1) {
if (m_bIsEVR) {
- strText.Format(L"Buffering : Buffered %3ld Free %3d Current Surface %3d", m_nUsedBuffer, m_nNbDXSurface - m_nUsedBuffer, m_nCurSurface);
+ strText.Format(_T("Buffering : Buffered %3ld Free %3ld Current Surface %3d"),
+ m_nUsedBuffer, m_nNbDXSurface - m_nUsedBuffer, m_nCurSurface);
} else {
- strText.Format(L"Buffering : VMR9Surfaces %3d VMR9Surface %3d", m_nVMR9Surfaces, m_iVMR9Surface);
+ strText.Format(_T("Buffering : VMR9Surfaces %3d VMR9Surface %3d"),
+ m_nVMR9Surfaces, m_iVMR9Surface);
}
} else {
- strText.Format(L"Buffered : %3ld", m_nUsedBuffer);
+ strText.Format(_T("Buffered : %3ld"), m_nUsedBuffer);
}
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
+
if (iDetailedStats > 1) {
- strText.Format(L"Video size : %ld x %ld (AR = %ld : %ld)", m_nativeVideoSize.cx, m_nativeVideoSize.cy, m_aspectRatio.cx, m_aspectRatio.cy);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Video size : %ld x %ld (AR = %ld : %ld)"),
+ m_nativeVideoSize.cx, m_nativeVideoSize.cy, m_aspectRatio.cx, m_aspectRatio.cy);
+ drawText(rc, strText);
if (m_pVideoTexture[0] || m_pVideoSurface[0]) {
D3DSURFACE_DESC desc;
ZeroMemory(&desc, sizeof(desc));
@@ -2024,115 +2092,128 @@ void CDX9AllocatorPresenter::DrawStats()
}
if (desc.Width != (UINT)m_nativeVideoSize.cx || desc.Height != (UINT)m_nativeVideoSize.cy) {
- strText.Format(L"Texture size : %u x %u", desc.Width, desc.Height);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Texture size : %u x %u"), desc.Width, desc.Height);
+ drawText(rc, strText);
}
}
- DrawText(rc, rd->m_strDXVAInfo, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, rd->m_strDXVAInfo);
- strText.Format(L"DirectX SDK : %u", rd->GetDXSdkRelease());
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("DirectX SDK : %u"), rd->GetDXSdkRelease());
+ drawText(rc, strText);
if (!m_D3D9Device.IsEmpty()) {
- strText = "Render device: " + m_D3D9Device;
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText = _T("Render device: ") + m_D3D9Device;
+ drawText(rc, strText);
}
if (!m_Decoder.IsEmpty()) {
- strText = "Decoder : " + m_Decoder;
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText = _T("Decoder : ") + m_Decoder;
+ drawText(rc, strText);
}
for (int i = 0; i < 6; i++) {
if (m_strStatsMsg[i][0]) {
- DrawText(rc, m_strStatsMsg[i], 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, m_strStatsMsg[i]);
}
}
}
m_pSprite->End();
- OffsetRect(&rc, 0, TextHeight); // Extra "line feed"
}
if (m_pLine && iDetailedStats) {
- D3DXVECTOR2 Points[NB_JITTER];
-
- int ScaleX = 1;
- int ScaleY = 1;
- int DrawWidth = 625 * ScaleX + 50;
- int DrawHeight = 250 * ScaleY;
- int Alpha = 80;
- int StartX = m_windowRect.Width() - (DrawWidth + 20);
- int StartY = m_windowRect.Height() - (DrawHeight + 20);
-
- DrawRect(RGB(0, 0, 0), Alpha, CRect(StartX, StartY, StartX + DrawWidth, StartY + DrawHeight));
- // === Jitter Graduation
- //m_pLine->SetWidth(2.2); // Width
- //m_pLine->SetAntialias(1);
- m_pLine->SetWidth(2.5); // Width
- m_pLine->SetAntialias(1);
- //m_pLine->SetGLLines(1);
+ D3DXVECTOR2 points[NB_JITTER];
+ const float graphWidth = GRAPH_WIDTH * textScale;
+ const float graphHeight = GRAPH_HEIGHT * textScale;
+ const float topLeftX = m_windowRect.Width() - (graphWidth + lineHeight);
+ const float topLeftY = m_windowRect.Height() - (graphHeight + lineHeight);
+ const float gridStepY = graphHeight / 24.0f;
+ const float gridStepX = graphWidth / NB_JITTER;
+
+ // Draw background
+ DrawRect(RGB(0, 0, 0), 80, CRect(int(topLeftX),
+ int(topLeftY),
+ int(topLeftX + graphWidth),
+ int(topLeftY + graphHeight)));
+
+ m_pLine->SetWidth(2.5f * textScale);
+ m_pLine->SetAntialias(TRUE);
m_pLine->Begin();
- for (int i = 10; i < 250 * ScaleY; i += 10 * ScaleY) {
- Points[0].x = (float)StartX;
- Points[0].y = (float)(StartY + i);
- Points[1].x = (float)(StartX + (((i - 10) % 40) ? 50 : 625 * ScaleX));
- Points[1].y = (float)(StartY + i);
- if (i == 130) {
- Points[1].x += 50;
+ // Draw grid lines
+ for (int i = 1; i < 24; ++i) {
+ points[0].x = topLeftX;
+ points[0].y = topLeftY + i * gridStepY;
+ points[1].y = points[0].y;
+
+ float lineLength;
+ D3DCOLOR color;
+ if (i % 12 == 0) {
+ lineLength = 1.0f;
+ color = D3DCOLOR_XRGB(100, 100, 255);
+ } else if (i % 4 == 0) {
+ lineLength = 0.96f;
+ color = D3DCOLOR_XRGB(100, 100, 180);
+ } else {
+ lineLength = 0.04f;
+ color = D3DCOLOR_XRGB(100, 100, 140);
}
- m_pLine->Draw(Points, 2, D3DCOLOR_XRGB(100, 100, 255));
+ points[1].x = topLeftX + graphWidth * lineLength;
+ m_pLine->Draw(points, 2, color);
}
- // === Jitter curve
if (m_rtTimePerFrame) {
- for (int i = 0; i < NB_JITTER; i++) {
- int nIndex = (m_nNextJitter + 1 + i) % NB_JITTER;
+ // Draw jitter
+ for (int i = 1; i <= NB_JITTER; ++i) {
+ int nIndex = (m_nNextJitter + i) % NB_JITTER;
if (nIndex < 0) {
nIndex += NB_JITTER;
+ ASSERT(FALSE);
}
- double Jitter = m_pllJitter[nIndex] - m_fJitterMean;
- Points[i].x = (float)(StartX + (i * 5 * ScaleX + 5));
- Points[i].y = (float)(StartY + ((Jitter * ScaleY) / 5000.0 + 125.0 * ScaleY));
+ float jitter = float(m_pllJitter[nIndex] - m_fJitterMean);
+ points[i - 1].x = topLeftX + i * gridStepX;
+ points[i - 1].y = topLeftY + (jitter * textScale / 2000.0f + graphHeight / 2.0f);
}
- m_pLine->Draw(Points, NB_JITTER, D3DCOLOR_XRGB(255, 100, 100));
+ m_pLine->Draw(points, NB_JITTER, D3DCOLOR_XRGB(255, 100, 100));
if (m_bSyncStatsAvailable) {
- for (int i = 0; i < NB_JITTER; i++) {
- int nIndex = (m_nNextSyncOffset + 1 + i) % NB_JITTER;
+ // Draw sync offset
+ for (int i = 1; i <= NB_JITTER; ++i) {
+ int nIndex = (m_nNextSyncOffset + i) % NB_JITTER;
if (nIndex < 0) {
nIndex += NB_JITTER;
}
- Points[i].x = (float)(StartX + (i * 5 * ScaleX + 5));
- Points[i].y = (float)(StartY + ((m_pllSyncOffset[nIndex] * ScaleY) / 5000 + 125 * ScaleY));
+ points[i - 1].x = topLeftX + i * gridStepX;
+ points[i - 1].y = topLeftY + (m_pllSyncOffset[nIndex] * textScale / 2000.0f + graphHeight / 2.0f);
}
- m_pLine->Draw(Points, NB_JITTER, D3DCOLOR_XRGB(100, 200, 100));
+ m_pLine->Draw(points, NB_JITTER, D3DCOLOR_XRGB(100, 200, 100));
}
}
m_pLine->End();
}
-
- // === Text
-
}
STDMETHODIMP CDX9AllocatorPresenter::GetDIB(BYTE* lpDib, DWORD* size)
{
CheckPointer(size, E_POINTER);
+ // Keep a reference so that we can safely work on the surface
+ // without having to lock everything
+ CComPtr<IDirect3DSurface9> pVideoSurface;
+ {
+ CAutoLock cAutoLock(this);
+ CheckPointer(m_pVideoSurface[m_nCurSurface], E_FAIL);
+ pVideoSurface = m_pVideoSurface[m_nCurSurface];
+ }
+
HRESULT hr;
D3DSURFACE_DESC desc;
ZeroMemory(&desc, sizeof(desc));
- m_pVideoSurface[m_nCurSurface]->GetDesc(&desc);
+ if (FAILED(hr = pVideoSurface->GetDesc(&desc))) {
+ return hr;
+ }
DWORD required = sizeof(BITMAPINFOHEADER) + (desc.Width * desc.Height * 32 >> 3);
if (!lpDib) {
@@ -2148,11 +2229,11 @@ STDMETHODIMP CDX9AllocatorPresenter::GetDIB(BYTE* lpDib, DWORD* size)
// Convert to 8-bit when using 10-bit or full/half processing modes
if (desc.Format != D3DFMT_X8R8G8B8) {
if (FAILED(hr = m_pD3DDev->CreateOffscreenPlainSurface(desc.Width, desc.Height, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &pSurface, nullptr))
- || FAILED(hr = m_pD3DXLoadSurfaceFromSurface(pSurface, nullptr, nullptr, m_pVideoSurface[m_nCurSurface], nullptr, nullptr, D3DX_DEFAULT, 0))) {
+ || FAILED(hr = m_pD3DXLoadSurfaceFromSurface(pSurface, nullptr, nullptr, pVideoSurface, nullptr, nullptr, D3DX_DEFAULT, 0))) {
return hr;
}
} else {
- pSurface = m_pVideoSurface[m_nCurSurface];
+ pSurface = pVideoSurface;
}
D3DLOCKED_RECT r;
if (FAILED(hr = pSurface->LockRect(&r, nullptr, D3DLOCK_READONLY))) {
@@ -2166,23 +2247,11 @@ STDMETHODIMP CDX9AllocatorPresenter::GetDIB(BYTE* lpDib, DWORD* size)
}
}
- BITMAPINFOHEADER* bih = (BITMAPINFOHEADER*)lpDib;
- ZeroMemory(bih, sizeof(BITMAPINFOHEADER));
- bih->biSize = sizeof(BITMAPINFOHEADER);
- bih->biWidth = desc.Width;
- bih->biHeight = desc.Height;
- bih->biBitCount = 32;
- bih->biPlanes = 1;
- bih->biSizeImage = bih->biWidth * bih->biHeight * bih->biBitCount >> 3;
-
- BitBltFromRGBToRGB(
- bih->biWidth, bih->biHeight,
- (BYTE*)(bih + 1), bih->biWidth * bih->biBitCount >> 3, bih->biBitCount,
- (BYTE*)r.pBits + r.Pitch * (desc.Height - 1), -(int)r.Pitch, 32);
+ hr = CreateDIBFromSurfaceData(desc, r, lpDib);
pSurface->UnlockRect();
- return S_OK;
+ return hr;
}
STDMETHODIMP CDX9AllocatorPresenter::SetPixelShader(LPCSTR pSrcData, LPCSTR pTarget)
diff --git a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h
index cb4db14b5..4f7215c95 100644
--- a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h
+++ b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -56,13 +56,12 @@ namespace DSObjects
CRenderersSettings::CAdvRendererSettings m_LastRendererSettings;
- HRESULT(__stdcall* m_pDwmIsCompositionEnabled)(__out BOOL* pfEnabled);
- HRESULT(__stdcall* m_pDwmEnableComposition)(UINT uCompositionAction);
-
HMODULE m_hDWMAPI;
+ HMODULE m_hD3D9;
+ HRESULT(__stdcall* m_pDwmIsCompositionEnabled)(__out BOOL* pfEnabled);
+ HRESULT(__stdcall* m_pDwmEnableComposition)(UINT uCompositionAction);
HRESULT(__stdcall* m_pDirect3DCreate9Ex)(UINT SDKVersion, IDirect3D9Ex**);
- HMODULE m_hD3D9;
CCritSec m_RenderLock;
CComPtr<IDirectDraw> m_pDirectDraw;
@@ -156,8 +155,7 @@ namespace DSObjects
LPCWSTR pFaceName,
LPD3DXFONT* ppFont);
-
- void DrawText(const RECT& rc, const CString& strText, int _Priority);
+ void InitStats();
void ResetStats();
void DrawStats();
virtual void OnResetDevice() {};
@@ -174,9 +172,9 @@ namespace DSObjects
int m_VMR9AlphaBitmapWidthBytes;
D3DXLoadSurfaceFromMemoryPtr m_pD3DXLoadSurfaceFromMemory;
- D3DXLoadSurfaceFromSurfacePtr m_pD3DXLoadSurfaceFromSurface;
- D3DXCreateLinePtr m_pD3DXCreateLine;
- D3DXCreateFontPtr m_pD3DXCreateFont;
+ D3DXLoadSurfaceFromSurfacePtr m_pD3DXLoadSurfaceFromSurface;
+ D3DXCreateLinePtr m_pD3DXCreateLine;
+ D3DXCreateFontPtr m_pD3DXCreateFont;
HRESULT(__stdcall* m_pD3DXCreateSprite)(LPDIRECT3DDEVICE9 pDevice, LPD3DXSPRITE* ppSprite);
@@ -238,8 +236,6 @@ namespace DSObjects
int m_bInterlaced;
FF_FIELD_TYPE m_nFrameType;
- double m_TextScale;
-
int m_VBlankEndWait;
int m_VBlankStartWait;
LONGLONG m_VBlankWaitTime;
@@ -289,6 +285,8 @@ namespace DSObjects
CString m_Decoder;
CFocusThread* m_FocusThread;
+ HWND m_hFocusWindow;
+
public:
CDX9AllocatorPresenter(HWND hWnd, bool bFullscreen, HRESULT& hr, bool bIsEVR, CString& _Error);
~CDX9AllocatorPresenter();
diff --git a/src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp b/src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp
index 4a755fea1..c350d92df 100644
--- a/src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp
+++ b/src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,6 +25,9 @@
#include "Dither.h"
#include "DX9RenderingEngine.h"
+// UUID for vorpX hack
+static const IID IID_D3D9VorpVideoCaptureTexture = { 0x8a49d79, 0x8646, 0x4867, { 0xb9, 0x34, 0x13, 0x12, 0xe4, 0x4b, 0x23, 0xdb } };
+
#pragma pack(push, 1)
template<int texcoords>
struct MYD3DVERTEX {
@@ -140,12 +143,12 @@ using namespace DSObjects;
CDX9RenderingEngine::CDX9RenderingEngine(HWND hWnd, HRESULT& hr, CString* _pError)
: CSubPicAllocatorPresenterImpl(hWnd, hr, _pError)
- , m_ScreenSize(0, 0)
- , m_nNbDXSurface(1)
- , m_nCurSurface(0)
, m_CurrentAdapter(UINT_ERROR)
, m_BackbufferType(D3DFMT_UNKNOWN)
, m_DisplayType(D3DFMT_UNKNOWN)
+ , m_ScreenSize(0, 0)
+ , m_nNbDXSurface(1)
+ , m_nCurSurface(0)
, m_bHighColorResolution(false)
, m_bForceInputHighColorResolution(false)
, m_RenderingPath(RENDERING_PATH_DRAW)
@@ -227,6 +230,8 @@ HRESULT CDX9RenderingEngine::CreateVideoSurfaces()
m_pTemporaryVideoTextures[i] = nullptr;
}
+ CheckPointer(m_pD3DDev, E_POINTER);
+
if (r.iAPSurfaceUsage == VIDRNDT_AP_TEXTURE2D || r.iAPSurfaceUsage == VIDRNDT_AP_TEXTURE3D) {
int nTexturesNeeded = r.iAPSurfaceUsage == VIDRNDT_AP_TEXTURE3D ? m_nNbDXSurface : 1;
@@ -433,6 +438,10 @@ HRESULT CDX9RenderingEngine::RenderVideoDrawPath(IDirect3DSurface9* pRenderTarge
pVideoTexture = m_pTemporaryVideoTextures[src];
}
+ // Hack to send the pre-resize video texture to vorpX.
+ void* pVorpTex = pVideoTexture; // Prevent the pointer being overwritten.
+ m_pD3DDev->QueryInterface(IID_D3D9VorpVideoCaptureTexture, (void**)&pVorpTex);
+
// Resize the frame
Vector dst[4];
Transform(destRect, dst);
@@ -581,7 +590,7 @@ HRESULT CDX9RenderingEngine::InitTemporaryScreenSpaceTextures(int count)
for (int i = 0; i < count; i++) {
if (m_pTemporaryScreenSpaceTextures[i] == nullptr) {
m_TemporaryScreenSpaceTextureSize = CSize(std::min(m_ScreenSize.cx, (long)m_Caps.MaxTextureWidth),
- std::min(std::max(m_ScreenSize.cy, m_nativeVideoSize.cy), (long)m_Caps.MaxTextureHeight));
+ std::min(std::max(m_ScreenSize.cy, m_nativeVideoSize.cy), (long)m_Caps.MaxTextureHeight));
hr = m_pD3DDev->CreateTexture(
m_TemporaryScreenSpaceTextureSize.cx,
m_TemporaryScreenSpaceTextureSize.cy,
@@ -1363,22 +1372,22 @@ HRESULT CDX9RenderingEngine::CreateIccProfileLut(TCHAR* profilePath, float* lut3
return E_FAIL;
}
- unsigned short* lut3DOutput = nullptr;
- unsigned short* lut3DInput = nullptr;
+ uint16_t* lut3DOutput = nullptr;
+ uint16_t* lut3DInput = nullptr;
try {
// Create the 3D LUT input
- lut3DOutput = DEBUG_NEW unsigned short[m_Lut3DEntryCount * 3];
- lut3DInput = DEBUG_NEW unsigned short[m_Lut3DEntryCount * 3];
+ lut3DOutput = DEBUG_NEW uint16_t[m_Lut3DEntryCount * 3];
+ lut3DInput = DEBUG_NEW uint16_t[m_Lut3DEntryCount * 3];
- unsigned short* lut3DInputIterator = lut3DInput;
+ uint16_t* lut3DInputIterator = lut3DInput;
for (int b = 0; b < m_Lut3DSize; b++) {
for (int g = 0; g < m_Lut3DSize; g++) {
for (int r = 0; r < m_Lut3DSize; r++) {
- *lut3DInputIterator++ = r * 65535 / (m_Lut3DSize - 1);
- *lut3DInputIterator++ = g * 65535 / (m_Lut3DSize - 1);
- *lut3DInputIterator++ = b * 65535 / (m_Lut3DSize - 1);
+ *lut3DInputIterator++ = uint16_t(r * 65535 / (m_Lut3DSize - 1));
+ *lut3DInputIterator++ = uint16_t(g * 65535 / (m_Lut3DSize - 1));
+ *lut3DInputIterator++ = uint16_t(b * 65535 / (m_Lut3DSize - 1));
}
}
}
@@ -1395,9 +1404,6 @@ HRESULT CDX9RenderingEngine::CreateIccProfileLut(TCHAR* profilePath, float* lut3
delete [] lut3DOutput;
delete [] lut3DInput;
cmsDeleteTransform(hTransform);
-
- return S_OK;
-
} catch (...) {
// Cleanup
delete [] lut3DOutput;
diff --git a/src/filters/renderer/VideoRenderers/DX9RenderingEngine.h b/src/filters/renderer/VideoRenderers/DX9RenderingEngine.h
index f831f5d42..ab56932d0 100644
--- a/src/filters/renderer/VideoRenderers/DX9RenderingEngine.h
+++ b/src/filters/renderer/VideoRenderers/DX9RenderingEngine.h
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -69,6 +69,7 @@ namespace DSObjects
bool m_bColorManagement;
CDX9RenderingEngine(HWND hWnd, HRESULT& hr, CString* _pError);
+ virtual ~CDX9RenderingEngine() = default;
void InitRenderingEngine();
void CleanupRenderingEngine();
diff --git a/src/filters/renderer/VideoRenderers/DXRAllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/DXRAllocatorPresenter.cpp
index 3eeef0130..b5638f322 100644
--- a/src/filters/renderer/VideoRenderers/DXRAllocatorPresenter.cpp
+++ b/src/filters/renderer/VideoRenderers/DXRAllocatorPresenter.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -82,26 +82,37 @@ STDMETHODIMP CDXRAllocatorPresenter::NonDelegatingQueryInterface(REFIID riid, vo
HRESULT CDXRAllocatorPresenter::SetDevice(IDirect3DDevice9* pD3DDev)
{
- CheckPointer(pD3DDev, E_POINTER);
+ HRESULT hr = S_OK;
- const CRenderersSettings& r = GetRenderersSettings();
+ if (!pD3DDev) {
+ // release all resources
+ m_pSubPicQueue = nullptr;
+ m_pAllocator = nullptr;
+ __super::SetPosition(CRect(), CRect());
+ return hr;
+ }
+ const CRenderersSettings& r = GetRenderersSettings();
InitMaxSubtitleTextureSize(r.subPicQueueSettings.nMaxRes, m_ScreenSize);
if (m_pAllocator) {
m_pAllocator->ChangeDevice(pD3DDev);
} else {
m_pAllocator = DEBUG_NEW CDX9SubPicAllocator(pD3DDev, m_maxSubtitleTextureSize, true);
- }
-
- HRESULT hr = S_OK;
- if (!m_pSubPicQueue) {
- CAutoLock(this);
- m_pSubPicQueue = r.subPicQueueSettings.nSize > 0
- ? (ISubPicQueue*)DEBUG_NEW CSubPicQueue(r.subPicQueueSettings, m_pAllocator, &hr)
- : (ISubPicQueue*)DEBUG_NEW CSubPicQueueNoThread(r.subPicQueueSettings, m_pAllocator, &hr);
- } else {
- m_pSubPicQueue->Invalidate();
+ m_condAllocatorReady.notify_one();
+ }
+
+ {
+ // Lock before check because m_pSubPicQueue might be initialized in CSubPicAllocatorPresenterImpl::Connect
+ CAutoLock cAutoLock(this);
+ if (!m_pSubPicQueue) {
+ m_pSubPicQueue = r.subPicQueueSettings.nSize > 0
+ ? (ISubPicQueue*)DEBUG_NEW CSubPicQueue(r.subPicQueueSettings, m_pAllocator, &hr)
+ : (ISubPicQueue*)DEBUG_NEW CSubPicQueueNoThread(r.subPicQueueSettings, m_pAllocator, &hr);
+ } else {
+ this->Unlock();
+ m_pSubPicQueue->Invalidate();
+ }
}
if (SUCCEEDED(hr) && m_pSubPicProvider) {
diff --git a/src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.cpp
index 4e0ce31ea..add9ec42c 100644
--- a/src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.cpp
+++ b/src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -40,6 +40,8 @@ enum EVR_STATS_MSG {
MSG_MIXEROUT
};
+// Guid to tag IMFSample with a group id
+static const GUID GUID_GROUP_ID = { 0x309e32cc, 0x9b23, 0x4c6c, { 0x86, 0x63, 0xcd, 0xd9, 0xad, 0x49, 0x7f, 0x8a } };
// Guid to tag IMFSample with DirectX surface index
static const GUID GUID_SURFACE_INDEX = { 0x30c8e9f6, 0x415, 0x4b81, { 0xa3, 0x15, 0x1, 0xa, 0xc6, 0xa9, 0xda, 0x19 } };
@@ -67,51 +69,48 @@ using namespace DSObjects;
CEVRAllocatorPresenter::CEVRAllocatorPresenter(HWND hWnd, bool bFullscreen, HRESULT& hr, CString& _Error)
: CDX9AllocatorPresenter(hWnd, bFullscreen, hr, true, _Error)
- , m_hDXVA2Lib(nullptr)
- , m_hEVRLib(nullptr)
- , m_hAVRTLib(nullptr)
- , m_nResetToken(0)
- , m_hThread(nullptr)
- , m_hGetMixerThread(nullptr)
- , m_hVSyncThread(nullptr)
- , m_hEvtFlush(nullptr)
- , m_hEvtQuit(nullptr)
- , m_bEvtQuit(0)
- , m_bEvtFlush(0)
, m_ModeratedTime(0)
, m_ModeratedTimeLast(-1)
, m_ModeratedClockLast(-1)
, m_ModeratedTimer(0)
, m_LastClockState(MFCLOCK_STATE_INVALID)
- , m_nRenderState(Shutdown)
+ , m_pOuterEVR(nullptr)
+ , m_dwVideoAspectRatioMode(MFVideoARMode_PreservePicture)
+ , m_dwVideoRenderPrefs((MFVideoRenderPrefs)0)
+ , m_BorderColor(RGB(0, 0, 0))
+ , m_hEvtQuit(nullptr)
+ , m_bEvtQuit(0)
+ , m_hEvtFlush(nullptr)
+ , m_bEvtFlush(0)
, m_fUseInternalTimer(false)
, m_LastSetOutputRange(-1)
, m_bPendingRenegotiate(false)
, m_bPendingMediaFinished(false)
- , m_bWaitingSample(false)
- , m_pCurrentDisplaydSample(nullptr)
- , m_nStepCount(0)
- , m_dwVideoAspectRatioMode(MFVideoARMode_PreservePicture)
- , m_dwVideoRenderPrefs((MFVideoRenderPrefs)0)
- , m_BorderColor(RGB(0, 0, 0))
- , m_bSignaledStarvation(false)
- , m_StarvationClock(0)
- , m_pOuterEVR(nullptr)
+ , m_hThread(nullptr)
+ , m_hGetMixerThread(nullptr)
+ , m_hVSyncThread(nullptr)
+ , m_nRenderState(Shutdown)
+ , m_nCurrentGroupId(0)
+ , m_bLastSampleOffsetValid(false)
, m_LastScheduledSampleTime(-1)
+ , m_LastScheduledSampleTimeFP(-1)
, m_LastScheduledUncorrectedSampleTime(-1)
, m_MaxSampleDuration(0)
, m_LastSampleOffset(0)
, m_LastPredictedSync(0)
, m_VSyncOffsetHistoryPos(0)
- , m_bLastSampleOffsetValid(false)
- , m_LastScheduledSampleTimeFP(-1)
- , pfDXVA2CreateDirect3DDeviceManager9(nullptr)
- , pfMFCreateDXSurfaceBuffer(nullptr)
- , pfMFCreateVideoSampleFromSurface(nullptr)
- , pfMFCreateVideoMediaType(nullptr)
- , pfAvSetMmThreadCharacteristicsW(nullptr)
- , pfAvSetMmThreadPriority(nullptr)
- , pfAvRevertMmThreadCharacteristics(nullptr)
+ , m_nResetToken(0)
+ , m_nStepCount(0)
+ , m_bSignaledStarvation(false)
+ , m_StarvationClock(0)
+ , m_SampleFreeCallback(this, &CEVRAllocatorPresenter::OnSampleFree)
+ , fnDXVA2CreateDirect3DDeviceManager9(_T("dxva2.dll"), "DXVA2CreateDirect3DDeviceManager9")
+ , fnMFCreateDXSurfaceBuffer(_T("evr.dll"), "MFCreateDXSurfaceBuffer")
+ , fnMFCreateVideoSampleFromSurface(_T("evr.dll"), "MFCreateVideoSampleFromSurface")
+ , fnMFCreateMediaType(_T("mfplat.dll"), "MFCreateMediaType")
+ , fnAvSetMmThreadCharacteristicsW(_T("avrt.dll"), "AvSetMmThreadCharacteristicsW")
+ , fnAvSetMmThreadPriority(_T("avrt.dll"), "AvSetMmThreadPriority")
+ , fnAvRevertMmThreadCharacteristics(_T("avrt.dll"), "AvRevertMmThreadCharacteristics")
{
const CRenderersSettings& r = GetRenderersSettings();
@@ -123,62 +122,25 @@ CEVRAllocatorPresenter::CEVRAllocatorPresenter(HWND hWnd, bool bFullscreen, HRES
return;
}
- // Load EVR specific DLLs
- m_hDXVA2Lib = LoadLibrary(L"dxva2.dll");
- if (m_hDXVA2Lib) {
- pfDXVA2CreateDirect3DDeviceManager9 = (PTR_DXVA2CreateDirect3DDeviceManager9) GetProcAddress(m_hDXVA2Lib, "DXVA2CreateDirect3DDeviceManager9");
- }
-
- // Load EVR functions
- m_hEVRLib = LoadLibrary(L"evr.dll");
- if (m_hEVRLib) {
- pfMFCreateDXSurfaceBuffer = (PTR_MFCreateDXSurfaceBuffer) GetProcAddress(m_hEVRLib, "MFCreateDXSurfaceBuffer");
- pfMFCreateVideoSampleFromSurface = (PTR_MFCreateVideoSampleFromSurface) GetProcAddress(m_hEVRLib, "MFCreateVideoSampleFromSurface");
- pfMFCreateVideoMediaType = (PTR_MFCreateVideoMediaType) GetProcAddress(m_hEVRLib, "MFCreateVideoMediaType");
- }
-
- if (!pfDXVA2CreateDirect3DDeviceManager9 || !pfMFCreateDXSurfaceBuffer || !pfMFCreateVideoSampleFromSurface || !pfMFCreateVideoMediaType) {
- if (!pfDXVA2CreateDirect3DDeviceManager9) {
+ if (!fnDXVA2CreateDirect3DDeviceManager9 || !fnMFCreateDXSurfaceBuffer || !fnMFCreateVideoSampleFromSurface || !fnMFCreateMediaType) {
+ if (!fnDXVA2CreateDirect3DDeviceManager9) {
_Error += L"Could not find DXVA2CreateDirect3DDeviceManager9 (dxva2.dll)\n";
}
- if (!pfMFCreateDXSurfaceBuffer) {
+ if (!fnMFCreateDXSurfaceBuffer) {
_Error += L"Could not find MFCreateDXSurfaceBuffer (evr.dll)\n";
}
- if (!pfMFCreateVideoSampleFromSurface) {
+ if (!fnMFCreateVideoSampleFromSurface) {
_Error += L"Could not find MFCreateVideoSampleFromSurface (evr.dll)\n";
}
- if (!pfMFCreateVideoMediaType) {
- _Error += L"Could not find MFCreateVideoMediaType (evr.dll)\n";
+ if (!fnMFCreateMediaType) {
+ _Error += L"Could not find MFCreateMediaType (mfplat.dll)\n";
}
hr = E_FAIL;
return;
}
- // Load mfplat fuctions
-#if 0
- m_hMFPlatLib = LoadLibrary(L"mfplat.dll");
- if (m_hMFPlatLib) {
- (FARPROC&)pMFCreateMediaType = GetProcAddress(m_hMFPlatLib, "MFCreateMediaType");
- (FARPROC&)pMFInitMediaTypeFromAMMediaType = GetProcAddress(m_hMFPlatLib, "MFInitMediaTypeFromAMMediaType");
- (FARPROC&)pMFInitAMMediaTypeFromMFMediaType = GetProcAddress(m_hMFPlatLib, "MFInitAMMediaTypeFromMFMediaType");
- }
-
- if (!pMFCreateMediaType || !pMFInitMediaTypeFromAMMediaType || !pMFInitAMMediaTypeFromMFMediaType) {
- hr = E_FAIL;
- return;
- }
-#endif
-
- // Load Vista+ specific DLLs
- m_hAVRTLib = LoadLibrary(L"avrt.dll");
- if (m_hAVRTLib) {
- pfAvSetMmThreadCharacteristicsW = (PTR_AvSetMmThreadCharacteristicsW) GetProcAddress(m_hAVRTLib, "AvSetMmThreadCharacteristicsW");
- pfAvSetMmThreadPriority = (PTR_AvSetMmThreadPriority) GetProcAddress(m_hAVRTLib, "AvSetMmThreadPriority");
- pfAvRevertMmThreadCharacteristics = (PTR_AvRevertMmThreadCharacteristics) GetProcAddress(m_hAVRTLib, "AvRevertMmThreadCharacteristics");
- }
-
// Init DXVA manager
- hr = pfDXVA2CreateDirect3DDeviceManager9(&m_nResetToken, &m_pD3DManager);
+ hr = fnDXVA2CreateDirect3DDeviceManager9(&m_nResetToken, &m_pD3DManager);
if (SUCCEEDED(hr) && m_pD3DManager) {
hr = m_pD3DManager->ResetDevice(m_pD3DDev, m_nResetToken);
if (FAILED(hr)) {
@@ -189,7 +151,7 @@ CEVRAllocatorPresenter::CEVRAllocatorPresenter(HWND hWnd, bool bFullscreen, HRES
HANDLE hDevice;
if (SUCCEEDED(m_pD3DManager->OpenDeviceHandle(&hDevice)) &&
SUCCEEDED(m_pD3DManager->GetVideoService(hDevice, IID_PPV_ARGS(&pDecoderService)))) {
- TRACE_EVR("EVR: DXVA2 : device handle = 0x%08x", hDevice);
+ TRACE_EVR("EVR: DXVA2 : device handle = 0x%08x\n", hDevice);
HookDirectXVideoDecoderService(pDecoderService);
m_pD3DManager->CloseDeviceHandle(hDevice);
@@ -212,16 +174,6 @@ CEVRAllocatorPresenter::~CEVRAllocatorPresenter()
m_pMediaType = nullptr;
m_pClock = nullptr;
m_pD3DManager = nullptr;
-
- if (m_hDXVA2Lib) {
- FreeLibrary(m_hDXVA2Lib);
- }
- if (m_hEVRLib) {
- FreeLibrary(m_hEVRLib);
- }
- if (m_hAVRTLib) {
- FreeLibrary(m_hAVRTLib);
- }
}
void CEVRAllocatorPresenter::ResetStats()
@@ -360,6 +312,22 @@ STDMETHODIMP_(bool) CEVRAllocatorPresenter::Paint(bool bAll)
return __super::Paint(bAll);
}
+STDMETHODIMP_(bool) CEVRAllocatorPresenter::Paint(IMFSample* pMFSample)
+{
+ CAutoLock lock(&m_RenderLock);
+
+ m_pCurrentlyDisplayedSample = pMFSample;
+ pMFSample->GetUINT32(GUID_SURFACE_INDEX, (UINT32*)&m_nCurSurface);
+
+ auto sampleHasCurrentGroupId = [this](IMFSample * pSample) {
+ UINT32 nGroupId;
+ return (SUCCEEDED(pSample->GetUINT32(GUID_GROUP_ID, &nGroupId)) && nGroupId == m_nCurrentGroupId);
+ };
+ ASSERT(sampleHasCurrentGroupId(pMFSample));
+
+ return Paint(true);
+}
+
STDMETHODIMP CEVRAllocatorPresenter::NonDelegatingQueryInterface(REFIID riid, void** ppv)
{
HRESULT hr;
@@ -399,6 +367,9 @@ STDMETHODIMP CEVRAllocatorPresenter::NonDelegatingQueryInterface(REFIID riid, vo
// IMFClockStateSink
STDMETHODIMP CEVRAllocatorPresenter::OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset)
{
+ HRESULT hr;
+ CHECK_HR(CheckShutdown());
+
m_nRenderState = Started;
TRACE_EVR("EVR: OnClockStart hnsSystemTime = %I64d, llClockStartOffset = %I64d\n", hnsSystemTime, llClockStartOffset);
@@ -410,6 +381,9 @@ STDMETHODIMP CEVRAllocatorPresenter::OnClockStart(MFTIME hnsSystemTime, LONGLONG
STDMETHODIMP CEVRAllocatorPresenter::OnClockStop(MFTIME hnsSystemTime)
{
+ HRESULT hr;
+ CHECK_HR(CheckShutdown());
+
TRACE_EVR("EVR: OnClockStop hnsSystemTime = %I64d\n", hnsSystemTime);
m_nRenderState = Stopped;
@@ -420,6 +394,9 @@ STDMETHODIMP CEVRAllocatorPresenter::OnClockStop(MFTIME hnsSystemTime)
STDMETHODIMP CEVRAllocatorPresenter::OnClockPause(MFTIME hnsSystemTime)
{
+ HRESULT hr;
+ CHECK_HR(CheckShutdown());
+
TRACE_EVR("EVR: OnClockPause hnsSystemTime = %I64d\n", hnsSystemTime);
if (!m_bSignaledStarvation) {
m_nRenderState = Paused;
@@ -431,6 +408,9 @@ STDMETHODIMP CEVRAllocatorPresenter::OnClockPause(MFTIME hnsSystemTime)
STDMETHODIMP CEVRAllocatorPresenter::OnClockRestart(MFTIME hnsSystemTime)
{
+ HRESULT hr;
+ CHECK_HR(CheckShutdown());
+
m_nRenderState = Started;
m_ModeratedTimeLast = -1;
@@ -608,6 +588,7 @@ void CEVRAllocatorPresenter::CompleteFrameStep(bool bCancel)
STDMETHODIMP CEVRAllocatorPresenter::ProcessMessage(MFVP_MESSAGE_TYPE eMessage, ULONG_PTR ulParam)
{
HRESULT hr = S_OK;
+ CHECK_HR(CheckShutdown());
switch (eMessage) {
case MFVP_MESSAGE_BEGINSTREAMING: // The EVR switched from stopped to paused. The presenter should allocate resources
@@ -713,95 +694,77 @@ HRESULT CEVRAllocatorPresenter::IsMediaTypeSupported(IMFMediaType* pMixerType)
return hr;
}
-HRESULT CEVRAllocatorPresenter::CreateProposedOutputType(IMFMediaType* pMixerType, IMFMediaType** ppType)
+HRESULT CEVRAllocatorPresenter::CreateOptimalOutputType(IMFMediaType* pMixerProposedType, IMFMediaType* pMixerInputType, IMFMediaType** ppType)
{
HRESULT hr;
- AM_MEDIA_TYPE* pAMMedia = nullptr;
- LARGE_INTEGER i64Size;
- MFVIDEOFORMAT* VideoFormat;
+ IMFMediaType* pOptimalMediaType;
- CHECK_HR(pMixerType->GetRepresentation(FORMAT_MFVideoFormat, (void**)&pAMMedia));
+ CHECK_HR(fnMFCreateMediaType(&pOptimalMediaType));
+ CHECK_HR(pMixerProposedType->CopyAllItems(pOptimalMediaType));
- VideoFormat = (MFVIDEOFORMAT*)pAMMedia->pbFormat;
+ const GUID colorAttributes[] = {
+ MF_MT_VIDEO_LIGHTING,
+ MF_MT_VIDEO_PRIMARIES,
+ MF_MT_TRANSFER_FUNCTION,
+ MF_MT_YUV_MATRIX,
+ MF_MT_VIDEO_CHROMA_SITING
+ };
- IMFVideoMediaType* pMediaType;
- hr = pfMFCreateVideoMediaType(VideoFormat, &pMediaType);
+ auto copyAttribute = [](IMFAttributes * pFrom, IMFAttributes * pTo, REFGUID guidKey) {
+ PROPVARIANT val;
+ HRESULT hr = pFrom->GetItem(guidKey, &val);
-#if 0
- // This code doesn't work, use same method as VMR9 instead
- if (VideoFormat->videoInfo.FramesPerSecond.Numerator != 0) {
- switch (VideoFormat->videoInfo.InterlaceMode) {
- case MFVideoInterlace_Progressive:
- case MFVideoInterlace_MixedInterlaceOrProgressive:
- default: {
- m_rtTimePerFrame = (10000000I64 * VideoFormat->videoInfo.FramesPerSecond.Denominator) / VideoFormat->videoInfo.FramesPerSecond.Numerator;
- m_bInterlaced = false;
- }
- break;
- case MFVideoInterlace_FieldSingleUpper:
- case MFVideoInterlace_FieldSingleLower:
- case MFVideoInterlace_FieldInterleavedUpperFirst:
- case MFVideoInterlace_FieldInterleavedLowerFirst: {
- m_rtTimePerFrame = (20000000I64 * VideoFormat->videoInfo.FramesPerSecond.Denominator) / VideoFormat->videoInfo.FramesPerSecond.Numerator;
- m_bInterlaced = true;
- }
- break;
+ if (SUCCEEDED(hr)) {
+ hr = pTo->SetItem(guidKey, val);
+ PropVariantClear(&val);
+ } else if (hr == MF_E_ATTRIBUTENOTFOUND) {
+ hr = pTo->DeleteItem(guidKey);
}
- }
-#endif
+ return hr;
+ };
- CSize videoSize;
- videoSize.cx = VideoFormat->videoInfo.dwWidth;
- videoSize.cy = VideoFormat->videoInfo.dwHeight;
-
- if (SUCCEEDED(hr)) {
- i64Size.HighPart = videoSize.cx;
- i64Size.LowPart = videoSize.cy;
- pMediaType->SetUINT64(MF_MT_FRAME_SIZE, i64Size.QuadPart);
-
- pMediaType->SetUINT32(MF_MT_PAN_SCAN_ENABLED, 0);
-
- const CRenderersSettings& r = GetRenderersSettings();
-
-#if 1
- if (r.m_AdvRendSets.iEVROutputRange == 1) {
- pMediaType->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_16_235);
- } else {
- pMediaType->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_0_255);
+ for (REFGUID guidKey : colorAttributes) {
+ if (FAILED(hr = copyAttribute(pMixerInputType, pOptimalMediaType, guidKey))) {
+ TRACE_EVR(_T("Copying color attribute %s failed: 0x%08x\n"), CComBSTR(guidKey), hr);
}
+ }
- // m_pMediaType->SetUINT32 (MF_MT_TRANSFER_FUNCTION, MFVideoTransFunc_10);
-#else
-
- pMediaType->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_0_255);
- if (r.iEVROutputRange == 1) {
- pMediaType->SetUINT32(MF_MT_YUV_MATRIX, MFVideoTransferMatrix_BT601);
- } else {
- pMediaType->SetUINT32(MF_MT_YUV_MATRIX, MFVideoTransferMatrix_BT709);
- }
-#endif
+ pOptimalMediaType->SetUINT32(MF_MT_PAN_SCAN_ENABLED, 0);
+ const CRenderersSettings& r = GetRenderersSettings();
+ UINT32 nominalRange;
+ if (SUCCEEDED(pMixerInputType->GetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, &nominalRange))
+ && nominalRange == MFNominalRange_0_255) {
+ // EVR mixer always assume 16-235 input. To ensure that luminance range won't be expanded we requests 16-235 also on output.
+ // Request 16-235 to ensure untouched luminance range on output. It is the only way to pass 0-255 without changes.
+ nominalRange = MFNominalRange_16_235;
+ m_LastSetOutputRange = -1; // -1 to prevent renegotiations because of different value than this in settings.
+ } else {
+ nominalRange = (r.m_AdvRendSets.iEVROutputRange == 1) ? MFNominalRange_16_235 : MFNominalRange_0_255;
m_LastSetOutputRange = r.m_AdvRendSets.iEVROutputRange;
+ }
+ pOptimalMediaType->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, nominalRange);
- i64Size.HighPart = VideoFormat->videoInfo.PixelAspectRatio.Numerator;
- i64Size.LowPart = VideoFormat->videoInfo.PixelAspectRatio.Denominator;
- pMediaType->SetUINT64(MF_MT_PIXEL_ASPECT_RATIO, i64Size.QuadPart);
+ ULARGE_INTEGER ui64Size;
+ pOptimalMediaType->GetUINT64(MF_MT_FRAME_SIZE, &ui64Size.QuadPart);
- MFVideoArea Area = MakeArea(0, 0, videoSize.cx, videoSize.cy);
- pMediaType->SetBlob(MF_MT_GEOMETRIC_APERTURE, (UINT8*)&Area, sizeof(MFVideoArea));
+ CSize videoSize((LONG)ui64Size.HighPart, (LONG)ui64Size.LowPart);
+ MFVideoArea Area = MakeArea(0, 0, videoSize.cx, videoSize.cy);
+ pOptimalMediaType->SetBlob(MF_MT_GEOMETRIC_APERTURE, (UINT8*)&Area, sizeof(MFVideoArea));
- }
+ ULARGE_INTEGER ui64AspectRatio;
+ pOptimalMediaType->GetUINT64(MF_MT_PIXEL_ASPECT_RATIO, &ui64AspectRatio.QuadPart);
- UINT64 dwARx = UINT64(VideoFormat->videoInfo.PixelAspectRatio.Numerator) * videoSize.cx;
- UINT64 dwARy = UINT64(VideoFormat->videoInfo.PixelAspectRatio.Denominator) * videoSize.cy;
- UINT64 gcd = GCD(dwARx, dwARy);
+ UINT64 ui64ARx = UINT64(ui64AspectRatio.HighPart) * ui64Size.HighPart;
+ UINT64 ui64ARy = UINT64(ui64AspectRatio.LowPart) * ui64Size.LowPart;
+ UINT64 gcd = GCD(ui64ARx, ui64ARy);
if (gcd > 1) {
- dwARx /= gcd;
- dwARy /= gcd;
+ ui64ARx /= gcd;
+ ui64ARy /= gcd;
}
- CSize aspectRatio((LONG)dwARx, (LONG)dwARy);
+ CSize aspectRatio((LONG)ui64ARx, (LONG)ui64ARy);
if (videoSize != m_nativeVideoSize || aspectRatio != m_aspectRatio) {
SetVideoSize(videoSize, aspectRatio);
@@ -811,19 +774,35 @@ HRESULT CEVRAllocatorPresenter::CreateProposedOutputType(IMFMediaType* pMixerTyp
}
}
- pMixerType->FreeRepresentation(FORMAT_MFVideoFormat, (void*)pAMMedia);
- pMediaType->QueryInterface(IID_PPV_ARGS(ppType));
+ *ppType = pOptimalMediaType;
+ (*ppType)->AddRef();
return hr;
}
HRESULT CEVRAllocatorPresenter::SetMediaType(IMFMediaType* pType)
{
- HRESULT hr;
+ HRESULT hr = S_OK;
AM_MEDIA_TYPE* pAMMedia = nullptr;
CString strTemp, strTemp1;
- CheckPointer(pType, E_POINTER);
+ CHECK_HR(CheckShutdown());
+
+ if (!pType) {
+ // Release
+ RemoveAllSamples();
+ DeleteSurfaces();
+ CAutoLock lock(&m_MediaTypeLock);
+ m_pMediaType = nullptr;
+ return hr;
+ }
+
+ DWORD dwFlags = 0;
+ if (m_pMediaType && m_pMediaType->IsEqual(pType, &dwFlags) == S_OK) {
+ // Nothing to do
+ return hr;
+ }
+
CHECK_HR(pType->GetRepresentation(FORMAT_VideoInfo2, (void**)&pAMMedia));
hr = InitializeDevice(pType);
@@ -1000,6 +979,7 @@ HRESULT CEVRAllocatorPresenter::RenegotiateMediaType()
HRESULT hr = S_OK;
CComPtr<IMFMediaType> pMixerType;
+ CComPtr<IMFMediaType> pMixerInputType;
CComPtr<IMFMediaType> pType;
if (!m_pMixer) {
@@ -1009,13 +989,13 @@ HRESULT CEVRAllocatorPresenter::RenegotiateMediaType()
CInterfaceArray<IMFMediaType> ValidMixerTypes;
// Get the mixer's input type
- hr = m_pMixer->GetInputCurrentType(0, &pType);
+ hr = m_pMixer->GetInputCurrentType(0, &pMixerInputType);
if (SUCCEEDED(hr)) {
AM_MEDIA_TYPE* pMT;
- hr = pType->GetRepresentation(FORMAT_VideoInfo2, (void**)&pMT);
+ hr = pMixerInputType->GetRepresentation(FORMAT_VideoInfo2, (void**)&pMT);
if (SUCCEEDED(hr)) {
m_inputMediaType = *pMT;
- pType->FreeRepresentation(FORMAT_VideoInfo2, pMT);
+ pMixerInputType->FreeRepresentation(FORMAT_VideoInfo2, pMT);
}
}
@@ -1037,7 +1017,7 @@ HRESULT CEVRAllocatorPresenter::RenegotiateMediaType()
}
if (SUCCEEDED(hr)) {
- hr = CreateProposedOutputType(pMixerType, &pType);
+ hr = CreateOptimalOutputType(pMixerType, pMixerInputType, &pType);
}
// Step 4. Check if the mixer will accept this media type.
@@ -1108,7 +1088,7 @@ HRESULT CEVRAllocatorPresenter::RenegotiateMediaType()
bool CEVRAllocatorPresenter::GetImageFromMixer()
{
- MFT_OUTPUT_DATA_BUFFER Buffer;
+ MFT_OUTPUT_DATA_BUFFER dataBuffer;
HRESULT hr = S_OK;
DWORD dwStatus;
REFERENCE_TIME nsSampleTime;
@@ -1119,26 +1099,34 @@ bool CEVRAllocatorPresenter::GetImageFromMixer()
bool bDoneSomething = false;
+ auto sampleHasCurrentGroupId = [this](IMFSample * pSample) {
+ UINT32 nGroupId;
+ return (SUCCEEDED(pSample->GetUINT32(GUID_GROUP_ID, &nGroupId)) && nGroupId == m_nCurrentGroupId);
+ };
+
while (SUCCEEDED(hr)) {
CComPtr<IMFSample> pSample;
if (FAILED(GetFreeSample(&pSample))) {
- m_bWaitingSample = true;
break;
}
- ZeroMemory(&Buffer, sizeof(Buffer));
- Buffer.pSample = pSample;
+ ZeroMemory(&dataBuffer, sizeof(dataBuffer));
+ dataBuffer.pSample = pSample;
pSample->GetUINT32(GUID_SURFACE_INDEX, &dwSurface);
+ ASSERT(sampleHasCurrentGroupId(pSample));
{
llClockBefore = GetRenderersData()->GetPerfCounter();
- hr = m_pMixer->ProcessOutput(0, 1, &Buffer, &dwStatus);
+ hr = m_pMixer->ProcessOutput(0, 1, &dataBuffer, &dwStatus);
llClockAfter = GetRenderersData()->GetPerfCounter();
}
if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) {
- MoveToFreeList(pSample, false);
+ AddToFreeList(pSample, false);
+ pSample = nullptr; // The sample should not be used after being queued
+ // Important: Release any events returned from the ProcessOutput method.
+ SAFE_RELEASE(dataBuffer.pEvents);
break;
}
@@ -1169,8 +1157,17 @@ bool CEVRAllocatorPresenter::GetImageFromMixer()
TRACE_EVR("EVR: Get from Mixer : %u (%I64d) (%I64d)\n", dwSurface, nsSampleTime, m_rtTimePerFrame ? nsSampleTime / m_rtTimePerFrame : 0);
- MoveToScheduledList(pSample, false);
- bDoneSomething = true;
+ if (SUCCEEDED(TrackSample(pSample))) {
+ AddToScheduledList(pSample, false);
+ pSample = nullptr; // The sample should not be used after being queued
+ bDoneSomething = true;
+ } else {
+ ASSERT(FALSE);
+ }
+
+ // Important: Release any events returned from the ProcessOutput method.
+ SAFE_RELEASE(dataBuffer.pEvents);
+
if (m_rtTimePerFrame == 0) {
break;
}
@@ -1199,27 +1196,33 @@ STDMETHODIMP CEVRAllocatorPresenter::GetCurrentMediaType(__deref_out IMFVideoMe
// IMFTopologyServiceLookupClient
STDMETHODIMP CEVRAllocatorPresenter::InitServicePointers(/* [in] */ __in IMFTopologyServiceLookup* pLookup)
{
+ HRESULT hr = S_OK;
DWORD dwObjects = 1;
+ CAutoLock cThreadsLock(&m_ThreadsLock);
+
TRACE_EVR("EVR: CEVRAllocatorPresenter::InitServicePointers\n");
- pLookup->LookupService(MF_SERVICE_LOOKUP_GLOBAL, 0, MR_VIDEO_MIXER_SERVICE,
- IID_PPV_ARGS(&m_pMixer), &dwObjects);
+ CHECK_HR(pLookup->LookupService(MF_SERVICE_LOOKUP_GLOBAL, 0, MR_VIDEO_MIXER_SERVICE,
+ IID_PPV_ARGS(&m_pMixer), &dwObjects));
- pLookup->LookupService(MF_SERVICE_LOOKUP_GLOBAL, 0, MR_VIDEO_RENDER_SERVICE,
- IID_PPV_ARGS(&m_pSink), &dwObjects);
+ CHECK_HR(pLookup->LookupService(MF_SERVICE_LOOKUP_GLOBAL, 0, MR_VIDEO_RENDER_SERVICE,
+ IID_PPV_ARGS(&m_pSink), &dwObjects));
pLookup->LookupService(MF_SERVICE_LOOKUP_GLOBAL, 0, MR_VIDEO_RENDER_SERVICE,
IID_PPV_ARGS(&m_pClock), &dwObjects);
StartWorkerThreads();
- return S_OK;
+ return hr;
}
STDMETHODIMP CEVRAllocatorPresenter::ReleaseServicePointers()
{
TRACE_EVR("EVR: CEVRAllocatorPresenter::ReleaseServicePointers\n");
+ CAutoLock cThreadsLock(&m_ThreadsLock);
+
StopWorkerThreads();
+
m_pMixer = nullptr;
m_pSink = nullptr;
m_pClock = nullptr;
@@ -1236,8 +1239,8 @@ STDMETHODIMP CEVRAllocatorPresenter::GetDeviceID(/* [out] */ __out IID* pDevice
// IMFGetService
STDMETHODIMP CEVRAllocatorPresenter::GetService(/* [in] */ __RPC__in REFGUID guidService,
- /* [in] */ __RPC__in REFIID riid,
- /* [iid_is][out] */ __RPC__deref_out_opt LPVOID* ppvObject)
+ /* [in] */ __RPC__in REFIID riid,
+ /* [iid_is][out] */ __RPC__deref_out_opt LPVOID* ppvObject)
{
if (guidService == MR_VIDEO_RENDER_SERVICE) {
return NonDelegatingQueryInterface(riid, ppvObject);
@@ -1529,11 +1532,14 @@ STDMETHODIMP CEVRAllocatorPresenter::InitializeDevice(IMFMediaType* pMediaType)
if (SUCCEEDED(hr)) {
for (int i = 0; i < m_nNbDXSurface; i++) {
CComPtr<IMFSample> pMFSample;
- hr = pfMFCreateVideoSampleFromSurface(m_pVideoSurface[i], &pMFSample);
+ hr = fnMFCreateVideoSampleFromSurface(m_pVideoSurface[i], &pMFSample);
if (SUCCEEDED(hr)) {
+ pMFSample->SetUINT32(GUID_GROUP_ID, m_nCurrentGroupId);
pMFSample->SetUINT32(GUID_SURFACE_INDEX, i);
+ CAutoLock sampleQueueLock(&m_SampleQueueLock);
m_FreeSamples.AddTail(pMFSample);
+ pMFSample = nullptr; // The sample should not be used after being queued
}
ASSERT(SUCCEEDED(hr));
}
@@ -1558,14 +1564,6 @@ DWORD WINAPI CEVRAllocatorPresenter::PresentThread(LPVOID lpParam)
return 0;
}
-void CEVRAllocatorPresenter::CheckWaitingSampleFromMixer()
-{
- if (m_bWaitingSample) {
- m_bWaitingSample = false;
- //GetImageFromMixer(); // Do this in processing thread instead
- }
-}
-
bool ExtractInterlaced(const AM_MEDIA_TYPE* pmt)
{
if (pmt->formattype == FORMAT_VideoInfo) {
@@ -1846,7 +1844,9 @@ LONGLONG CEVRAllocatorPresenter::GetClockTime(LONGLONG PerformanceCounter)
void CEVRAllocatorPresenter::OnVBlankFinished(bool bAll, LONGLONG PerformanceCounter)
{
- if (!m_pCurrentDisplaydSample || !m_OrderedPaint || !bAll) {
+ // This function is meant to be called only from the rendering function
+ // so with the ownership on m_RenderLock.
+ if (!m_pCurrentlyDisplayedSample || !m_OrderedPaint || !bAll) {
return;
}
@@ -1865,14 +1865,14 @@ void CEVRAllocatorPresenter::OnVBlankFinished(bool bAll, LONGLONG PerformanceCou
llClockTime = m_StarvationClock;
}
- if (SUCCEEDED(m_pCurrentDisplaydSample->GetSampleDuration(&SampleDuration))) {
+ if (SUCCEEDED(m_pCurrentlyDisplayedSample->GetSampleDuration(&SampleDuration))) {
// Some filters return invalid values, ignore them
if (SampleDuration > MIN_FRAME_TIME) {
TimePerFrame = SampleDuration;
}
}
- if (FAILED(m_pCurrentDisplaydSample->GetSampleTime(&nsSampleTime))) {
+ if (FAILED(m_pCurrentlyDisplayedSample->GetSampleTime(&nsSampleTime))) {
nsSampleTime = llClockTime;
}
@@ -1904,12 +1904,13 @@ void CEVRAllocatorPresenter::OnVBlankFinished(bool bAll, LONGLONG PerformanceCou
m_fSyncOffsetAvr = MeanOffset;
m_bSyncStatsAvailable = true;
m_fSyncOffsetStdDev = StdDev;
-
}
}
STDMETHODIMP_(bool) CEVRAllocatorPresenter::ResetDevice()
{
+ CAutoLock cThreadsLock(&m_ThreadsLock);
+
StopWorkerThreads();
CAutoLock lock(this);
@@ -1922,11 +1923,14 @@ STDMETHODIMP_(bool) CEVRAllocatorPresenter::ResetDevice()
for (int i = 0; i < m_nNbDXSurface; i++) {
CComPtr<IMFSample> pMFSample;
- HRESULT hr = pfMFCreateVideoSampleFromSurface(m_pVideoSurface[i], &pMFSample);
+ HRESULT hr = fnMFCreateVideoSampleFromSurface(m_pVideoSurface[i], &pMFSample);
if (SUCCEEDED(hr)) {
+ pMFSample->SetUINT32(GUID_GROUP_ID, m_nCurrentGroupId);
pMFSample->SetUINT32(GUID_SURFACE_INDEX, i);
+ CAutoLock sampleQueueLock(&m_SampleQueueLock);
m_FreeSamples.AddTail(pMFSample);
+ pMFSample = nullptr; // The sample should not be used after being queued
}
ASSERT(SUCCEEDED(hr));
}
@@ -1986,17 +1990,28 @@ void CEVRAllocatorPresenter::RenderThread()
// Tell Multimedia Class Scheduler we are a playback thread (increase priority)
HANDLE hAvrt = 0;
- if (pfAvSetMmThreadCharacteristicsW) {
+ if (fnAvSetMmThreadCharacteristicsW) {
DWORD dwTaskIndex = 0;
- hAvrt = pfAvSetMmThreadCharacteristicsW(L"Playback", &dwTaskIndex);
- if (pfAvSetMmThreadPriority) {
- pfAvSetMmThreadPriority(hAvrt, AVRT_PRIORITY_HIGH /*AVRT_PRIORITY_CRITICAL*/);
+ hAvrt = fnAvSetMmThreadCharacteristicsW(L"Playback", &dwTaskIndex);
+ if (fnAvSetMmThreadPriority) {
+ fnAvSetMmThreadPriority(hAvrt, AVRT_PRIORITY_HIGH /*AVRT_PRIORITY_CRITICAL*/);
}
}
timeGetDevCaps(&tc, sizeof(TIMECAPS));
DWORD dwResolution = std::min(std::max(tc.wPeriodMin, 0u), tc.wPeriodMax);
- DWORD dwUser = timeBeginPeriod(dwResolution);
+ VERIFY(timeBeginPeriod(dwResolution) == 0);
+
+ auto checkPendingMediaFinished = [this]() {
+ if (m_bPendingMediaFinished) {
+ CAutoLock lock(&m_SampleQueueLock);
+ if (m_ScheduledSamples.IsEmpty()) {
+ m_bPendingMediaFinished = false;
+ m_pSink->Notify(EC_COMPLETE, 0, 0);
+ }
+ }
+ };
+
const CRenderersSettings& r = GetRenderersSettings();
int NextSleepTime = 1;
@@ -2051,29 +2066,28 @@ void CEVRAllocatorPresenter::RenderThread()
//if (WaitForMultipleObjects (_countof(hEvtsBuff), hEvtsBuff, FALSE, INFINITE) == WAIT_OBJECT_0+2)
{
CComPtr<IMFSample> pMFSample;
- LONGLONG llPerf = GetRenderersData()->GetPerfCounter();
- UNREFERENCED_PARAMETER(llPerf);
+ //LONGLONG llPerf2 = GetRenderersData()->GetPerfCounter();
+ //UNREFERENCED_PARAMETER(llPerf2);
int nSamplesLeft = 0;
if (SUCCEEDED(GetScheduledSample(&pMFSample, nSamplesLeft))) {
- //pMFSample->GetUINT32 (GUID_SURFACE_INDEX, (UINT32*)&m_nCurSurface);
- m_pCurrentDisplaydSample = pMFSample;
+ //UINT32 nSurface;
+ //pMFSample->GetUINT32(GUID_SURFACE_INDEX, (UINT32*)&nSurface);
bool bValidSampleTime = true;
- HRESULT hGetSampleTime = pMFSample->GetSampleTime(&nsSampleTime);
- if (hGetSampleTime != S_OK || nsSampleTime == 0) {
+ HRESULT hrGetSampleTime = pMFSample->GetSampleTime(&nsSampleTime);
+ if (hrGetSampleTime != S_OK || nsSampleTime == 0) {
bValidSampleTime = false;
}
// We assume that all samples have the same duration
LONGLONG SampleDuration = 0;
bool bValidSampleDuration = true;
- HRESULT hGetSampleDuration = pMFSample->GetSampleDuration(&SampleDuration);
-
+ HRESULT hrGetSampleDuration = pMFSample->GetSampleDuration(&SampleDuration);
// Some filters return invalid values, ignore them
- if (hGetSampleTime != S_OK || SampleDuration <= MIN_FRAME_TIME) {
+ if (hrGetSampleDuration != S_OK || SampleDuration <= MIN_FRAME_TIME) {
bValidSampleDuration = false;
}
- //TRACE_EVR ("EVR: RenderThread ==>> Presenting surface %d (%I64d)\n", m_nCurSurface, nsSampleTime);
+ //TRACE_EVR("EVR: RenderThread ==>> Presenting surface %d (%I64d)\n", nSurface, nsSampleTime);
bool bStepForward = false;
@@ -2085,14 +2099,13 @@ void CEVRAllocatorPresenter::RenderThread()
m_nStepCount = 0;
/*
} else if (m_nStepCount > 0) {
- pMFSample->GetUINT32(GUID_SURFACE_INDEX, (UINT32 *)&m_nCurSurface);
++m_OrderedPaint;
if (!g_bExternalSubtitleTime) {
__super::SetTime (g_tSegmentStart + nsSampleTime);
}
- Paint(true);
+ Paint(pMFSample);
m_nDroppedUpdate = 0;
- CompleteFrameStep (false);
+ CompleteFrameStep(false);
bStepForward = true;
*/
} else if (m_nRenderState == Started) {
@@ -2108,18 +2121,13 @@ void CEVRAllocatorPresenter::RenderThread()
if (!bValidSampleTime) {
// Just play as fast as possible
bStepForward = true;
- pMFSample->GetUINT32(GUID_SURFACE_INDEX, (UINT32*)&m_nCurSurface);
++m_OrderedPaint;
if (!g_bExternalSubtitleTime) {
__super::SetTime(g_tSegmentStart + nsSampleTime);
}
- Paint(true);
+ Paint(pMFSample);
} else {
LONGLONG TimePerFrame = (LONGLONG)(GetFrameTime() * 10000000.0);
- LONGLONG DrawTime = m_PaintTime * 9 / 10 - 20000; // 2 ms offset (= m_PaintTime * 0.9 - 20000)
- //if (!r.bVMR9VSync)
- DrawTime = 0;
-
LONGLONG SyncOffset = 0;
LONGLONG VSyncTime = 0;
LONGLONG TimeToNextVSync = -1;
@@ -2227,7 +2235,6 @@ void CEVRAllocatorPresenter::RenderThread()
TRACE_EVR("EVR: Normalframe\n");
m_nDroppedUpdate = 0;
bStepForward = true;
- pMFSample->GetUINT32(GUID_SURFACE_INDEX, (UINT32*)&m_nCurSurface);
m_LastFrameDuration = nsSampleTime - m_LastSampleTime;
m_LastSampleTime = nsSampleTime;
m_LastPredictedSync = VSyncOffset0;
@@ -2241,7 +2248,7 @@ void CEVRAllocatorPresenter::RenderThread()
if (!g_bExternalSubtitleTime) {
__super::SetTime(g_tSegmentStart + nsSampleTime);
}
- Paint(true);
+ Paint(pMFSample);
NextSleepTime = 0;
m_pcFramesDrawn++;
@@ -2308,18 +2315,17 @@ void CEVRAllocatorPresenter::RenderThread()
if (!g_bExternalSubtitleTime) {
__super::SetTime(g_tSegmentStart + nsSampleTime);
}
- Paint(false);
+ Paint(pMFSample);
}
NextSleepTime = int(SampleDuration / 10000 - 2);
}
- m_pCurrentDisplaydSample = nullptr;
if (bStepForward) {
- MoveToFreeList(pMFSample, true);
- CheckWaitingSampleFromMixer();
m_MaxSampleDuration = std::max(SampleDuration, m_MaxSampleDuration);
+ checkPendingMediaFinished();
} else {
- MoveToScheduledList(pMFSample, true);
+ AddToScheduledList(pMFSample, true);
+ pMFSample = nullptr; // The sample should not be used after being queued
}
bForcePaint = false;
@@ -2328,8 +2334,9 @@ void CEVRAllocatorPresenter::RenderThread()
m_pSink->Notify(EC_STARVATION, 0, 0);
m_bSignaledStarvation = true;
}
+ } else {
+ checkPendingMediaFinished();
}
- //GetImageFromMixer();
}
//else
//{
@@ -2341,8 +2348,8 @@ void CEVRAllocatorPresenter::RenderThread()
}
timeEndPeriod(dwResolution);
- if (pfAvRevertMmThreadCharacteristics) {
- pfAvRevertMmThreadCharacteristics(hAvrt);
+ if (fnAvRevertMmThreadCharacteristics) {
+ fnAvRevertMmThreadCharacteristics(hAvrt);
}
}
@@ -2418,86 +2425,87 @@ void CEVRAllocatorPresenter::VSyncThread()
WaitForVBlankRange(ScanlineEnd, 5, true, true, false, bTakenLock);
LONGLONG TimeEnd = rd->GetPerfCounter();
- double nSeconds = double(TimeEnd - TimeStart) / 10000000.0;
- LONGLONG DiffMiddle = TimeMiddle - TimeStart;
- LONGLONG DiffEnd = TimeEnd - TimeMiddle;
- double DiffDiff;
- if (DiffEnd > DiffMiddle) {
- DiffDiff = double(DiffEnd) / double(DiffMiddle);
- } else {
- DiffDiff = double(DiffMiddle) / double(DiffEnd);
- }
- if (nSeconds > 0.003 && DiffDiff < 1.3) {
- double ScanLineSeconds;
- double nScanLines;
- if (ScanLineMiddle > ScanlineEnd) {
- ScanLineSeconds = double(TimeMiddle - TimeStart) / 10000000.0;
- nScanLines = ScanLineMiddle - ScanlineStart;
- } else {
- ScanLineSeconds = double(TimeEnd - TimeMiddle) / 10000000.0;
- nScanLines = ScanlineEnd - ScanLineMiddle;
- }
-
- double ScanLineTime = ScanLineSeconds / nScanLines;
-
- int iPos = m_DetectedRefreshRatePos % 100;
- m_ldDetectedScanlineRateList[iPos] = ScanLineTime;
- if (m_DetectedScanlineTime && ScanlineStart != ScanlineEnd) {
- int Diff = ScanlineEnd - ScanlineStart;
- nSeconds -= double(Diff) * m_DetectedScanlineTime;
- }
- m_ldDetectedRefreshRateList[iPos] = nSeconds;
- double Average = 0;
- double AverageScanline = 0;
- int nPos = std::min(iPos + 1, 100);
- for (int i = 0; i < nPos; ++i) {
- Average += m_ldDetectedRefreshRateList[i];
- AverageScanline += m_ldDetectedScanlineRateList[i];
- }
-
- if (nPos) {
- Average /= double(nPos);
- AverageScanline /= double(nPos);
- } else {
- Average = 0;
- AverageScanline = 0;
- }
+ double nSeconds = (TimeEnd - TimeStart) / 10000000.0;
+ LONGLONG llDiffMiddle = TimeMiddle - TimeStart;
+ ASSERT(llDiffMiddle > 0);
+
+ if (nSeconds > 0.003 && llDiffMiddle > 0) {
+ double dDiffMiddle = double(llDiffMiddle);
+ double dDiffEnd = double(TimeEnd - TimeMiddle);
+
+ double dDiffDiff = dDiffEnd / dDiffMiddle;
+ if (dDiffDiff < 1.3 && dDiffDiff > (1 / 1.3)) {
+ double ScanLineSeconds;
+ double nScanLines;
+ if (ScanLineMiddle > ScanlineEnd) {
+ ScanLineSeconds = dDiffMiddle / 10000000.0;
+ nScanLines = ScanLineMiddle - ScanlineStart;
+ } else {
+ ScanLineSeconds = dDiffEnd / 10000000.0;
+ nScanLines = ScanlineEnd - ScanLineMiddle;
+ }
- double ThisValue = Average;
+ double ScanLineTime = ScanLineSeconds / nScanLines;
- if (Average > 0.0 && AverageScanline > 0.0) {
- CAutoLock Lock(&m_refreshRateLock);
- ++m_DetectedRefreshRatePos;
- if (m_DetectedRefreshTime == 0 || m_DetectedRefreshTime / ThisValue > 1.01 || m_DetectedRefreshTime / ThisValue < 0.99) {
- m_DetectedRefreshTime = ThisValue;
- m_DetectedRefreshTimePrim = 0;
- }
- if (_isnan(m_DetectedRefreshTime)) {
- m_DetectedRefreshTime = 0.0;
+ int iPos = m_DetectedRefreshRatePos % 100;
+ m_ldDetectedScanlineRateList[iPos] = ScanLineTime;
+ if (m_DetectedScanlineTime && ScanlineStart != ScanlineEnd) {
+ int Diff = ScanlineEnd - ScanlineStart;
+ nSeconds -= double(Diff) * m_DetectedScanlineTime;
}
- if (_isnan(m_DetectedRefreshTimePrim)) {
- m_DetectedRefreshTimePrim = 0.0;
+ m_ldDetectedRefreshRateList[iPos] = nSeconds;
+ double Average = 0;
+ double AverageScanline = 0;
+ int nPos = std::min(iPos + 1, 100);
+ for (int i = 0; i < nPos; ++i) {
+ Average += m_ldDetectedRefreshRateList[i];
+ AverageScanline += m_ldDetectedScanlineRateList[i];
}
- ModerateFloat(m_DetectedRefreshTime, ThisValue, m_DetectedRefreshTimePrim, 1.5);
- if (m_DetectedRefreshTime > 0.0) {
- m_DetectedRefreshRate = 1.0 / m_DetectedRefreshTime;
+ if (nPos) {
+ Average /= double(nPos);
+ AverageScanline /= double(nPos);
} else {
- m_DetectedRefreshRate = 0.0;
+ Average = 0;
+ AverageScanline = 0;
}
- if (m_DetectedScanlineTime == 0 || m_DetectedScanlineTime / AverageScanline > 1.01 || m_DetectedScanlineTime / AverageScanline < 0.99) {
- m_DetectedScanlineTime = AverageScanline;
- m_DetectedScanlineTimePrim = 0;
- }
- ModerateFloat(m_DetectedScanlineTime, AverageScanline, m_DetectedScanlineTimePrim, 1.5);
- if (m_DetectedScanlineTime > 0.0) {
- m_DetectedScanlinesPerFrame = m_DetectedRefreshTime / m_DetectedScanlineTime;
- } else {
- m_DetectedScanlinesPerFrame = 0;
+ double ThisValue = Average;
+
+ if (Average > 0.0 && AverageScanline > 0.0) {
+ CAutoLock Lock(&m_refreshRateLock);
+ ++m_DetectedRefreshRatePos;
+ if (m_DetectedRefreshTime == 0 || m_DetectedRefreshTime / ThisValue > 1.01 || m_DetectedRefreshTime / ThisValue < 0.99) {
+ m_DetectedRefreshTime = ThisValue;
+ m_DetectedRefreshTimePrim = 0;
+ }
+ if (_isnan(m_DetectedRefreshTime)) {
+ m_DetectedRefreshTime = 0.0;
+ }
+ if (_isnan(m_DetectedRefreshTimePrim)) {
+ m_DetectedRefreshTimePrim = 0.0;
+ }
+
+ ModerateFloat(m_DetectedRefreshTime, ThisValue, m_DetectedRefreshTimePrim, 1.5);
+ if (m_DetectedRefreshTime > 0.0) {
+ m_DetectedRefreshRate = 1.0 / m_DetectedRefreshTime;
+ } else {
+ m_DetectedRefreshRate = 0.0;
+ }
+
+ if (m_DetectedScanlineTime == 0 || m_DetectedScanlineTime / AverageScanline > 1.01 || m_DetectedScanlineTime / AverageScanline < 0.99) {
+ m_DetectedScanlineTime = AverageScanline;
+ m_DetectedScanlineTimePrim = 0;
+ }
+ ModerateFloat(m_DetectedScanlineTime, AverageScanline, m_DetectedScanlineTimePrim, 1.5);
+ if (m_DetectedScanlineTime > 0.0) {
+ m_DetectedScanlinesPerFrame = m_DetectedRefreshTime / m_DetectedScanlineTime;
+ } else {
+ m_DetectedScanlinesPerFrame = 0;
+ }
}
+ //TRACE(_T("Refresh: %f\n"), RefreshRate);
}
- //TRACE(_T("Refresh: %f\n"), RefreshRate);
}
}
} else {
@@ -2534,7 +2542,8 @@ void CEVRAllocatorPresenter::OnResetDevice()
void CEVRAllocatorPresenter::RemoveAllSamples()
{
- CAutoLock AutoLock(&m_ImageProcessingLock);
+ CAutoLock imageProcesssingLock(&m_ImageProcessingLock);
+ CAutoLock sampleQueueLock(&m_SampleQueueLock);
FlushSamples();
m_ScheduledSamples.RemoveAll();
@@ -2542,6 +2551,8 @@ void CEVRAllocatorPresenter::RemoveAllSamples()
m_LastScheduledSampleTime = -1;
m_LastScheduledUncorrectedSampleTime = -1;
m_nUsedBuffer = 0;
+ // Increment the group id to make sure old samples will really be deleted
+ m_nCurrentGroupId++;
}
HRESULT CEVRAllocatorPresenter::GetFreeSample(IMFSample** ppSample)
@@ -2549,8 +2560,8 @@ HRESULT CEVRAllocatorPresenter::GetFreeSample(IMFSample** ppSample)
CAutoLock lock(&m_SampleQueueLock);
HRESULT hr = S_OK;
- if (m_FreeSamples.GetCount() > 1) { // <= Cannot use first free buffer (can be currently displayed)
- InterlockedIncrement(&m_nUsedBuffer);
+ if (!m_FreeSamples.IsEmpty()) {
+ m_nUsedBuffer++;
*ppSample = m_FreeSamples.RemoveHead().Detach();
} else {
hr = MF_E_SAMPLEALLOCATOR_EMPTY;
@@ -2559,15 +2570,15 @@ HRESULT CEVRAllocatorPresenter::GetFreeSample(IMFSample** ppSample)
return hr;
}
-HRESULT CEVRAllocatorPresenter::GetScheduledSample(IMFSample** ppSample, int& _Count)
+HRESULT CEVRAllocatorPresenter::GetScheduledSample(IMFSample** ppSample, int& count)
{
CAutoLock lock(&m_SampleQueueLock);
HRESULT hr = S_OK;
- _Count = (int)m_ScheduledSamples.GetCount();
- if (_Count > 0) {
+ count = (int)m_ScheduledSamples.GetCount();
+ if (count > 0) {
*ppSample = m_ScheduledSamples.RemoveHead().Detach();
- --_Count;
+ --count;
} else {
hr = MF_E_SAMPLEALLOCATOR_EMPTY;
}
@@ -2575,14 +2586,11 @@ HRESULT CEVRAllocatorPresenter::GetScheduledSample(IMFSample** ppSample, int& _C
return hr;
}
-void CEVRAllocatorPresenter::MoveToFreeList(IMFSample* pSample, bool bTail)
+void CEVRAllocatorPresenter::AddToFreeList(IMFSample* pSample, bool bTail)
{
CAutoLock lock(&m_SampleQueueLock);
- InterlockedDecrement(&m_nUsedBuffer);
- if (m_bPendingMediaFinished && m_nUsedBuffer == 0) {
- m_bPendingMediaFinished = false;
- m_pSink->Notify(EC_COMPLETE, 0, 0);
- }
+
+ m_nUsedBuffer--;
if (bTail) {
m_FreeSamples.AddTail(pSample);
} else {
@@ -2590,11 +2598,11 @@ void CEVRAllocatorPresenter::MoveToFreeList(IMFSample* pSample, bool bTail)
}
}
-void CEVRAllocatorPresenter::MoveToScheduledList(IMFSample* pSample, bool _bSorted)
+void CEVRAllocatorPresenter::AddToScheduledList(IMFSample* pSample, bool bSorted)
{
+ CAutoLock lock(&m_SampleQueueLock);
- if (_bSorted) {
- CAutoLock lock(&m_SampleQueueLock);
+ if (bSorted) {
// Insert sorted
/*POSITION Iterator = m_ScheduledSamples.GetHeadPosition();
@@ -2616,9 +2624,6 @@ void CEVRAllocatorPresenter::MoveToScheduledList(IMFSample* pSample, bool _bSort
m_ScheduledSamples.AddHead(pSample);
} else {
-
- CAutoLock lock(&m_SampleQueueLock);
-
const CRenderersSettings& r = GetRenderersSettings();
double ForceFPS = 0.0;
//double ForceFPS = 59.94;
@@ -2650,7 +2655,7 @@ void CEVRAllocatorPresenter::MoveToScheduledList(IMFSample* pSample, bool _bSort
}
if (Diff < m_rtTimePerFrame * 8 && m_rtTimePerFrame && Diff2 < m_rtTimePerFrame * 8) { // Detect seeking
int iPos = (m_DetectedFrameTimePos++) % 60;
- LONGLONG Diff = Time - PrevTime;
+ Diff = Time - PrevTime;
if (PrevTime == -1) {
Diff = 0;
}
@@ -2818,7 +2823,6 @@ void CEVRAllocatorPresenter::MoveToScheduledList(IMFSample* pSample, bool _bSort
m_LastScheduledSampleTime = Time;
m_ScheduledSamples.AddTail(pSample);
-
}
}
@@ -2826,21 +2830,40 @@ void CEVRAllocatorPresenter::FlushSamples()
{
CAutoLock lock(this);
CAutoLock lock2(&m_SampleQueueLock);
+ CAutoLock lock3(&m_RenderLock);
+
+ m_pCurrentlyDisplayedSample = nullptr;
+ m_ScheduledSamples.RemoveAll();
- FlushSamplesInternal();
+ m_LastSampleOffset = 0;
+ m_bLastSampleOffsetValid = false;
+ m_bSignaledStarvation = false;
m_LastScheduledSampleTime = -1;
}
-void CEVRAllocatorPresenter::FlushSamplesInternal()
+HRESULT CEVRAllocatorPresenter::TrackSample(IMFSample* pSample)
{
- while (!m_ScheduledSamples.IsEmpty()) {
- CComPtr<IMFSample> pMFSample;
-
- pMFSample = m_ScheduledSamples.RemoveHead();
- MoveToFreeList(pMFSample, true);
+ HRESULT hr = E_FAIL;
+ if (CComQIPtr<IMFTrackedSample> pTracked = pSample) {
+ hr = pTracked->SetAllocator(&m_SampleFreeCallback, nullptr);
}
+ return hr;
+}
- m_LastSampleOffset = 0;
- m_bLastSampleOffsetValid = false;
- m_bSignaledStarvation = false;
+HRESULT CEVRAllocatorPresenter::OnSampleFree(IMFAsyncResult* pResult)
+{
+ CComPtr<IUnknown> pObject;
+ HRESULT hr = pResult->GetObject(&pObject);
+ if (SUCCEEDED(hr)) {
+ if (CComQIPtr<IMFSample> pSample = pObject) {
+ // Ignore the sample if it is from an old group
+ UINT32 nGroupId;
+ CAutoLock sampleQueueLock(&m_SampleQueueLock);
+ if (SUCCEEDED(pSample->GetUINT32(GUID_GROUP_ID, &nGroupId)) && nGroupId == m_nCurrentGroupId) {
+ AddToFreeList(pSample, true);
+ pSample = nullptr; // The sample should not be used after being queued
+ }
+ }
+ }
+ return hr;
}
diff --git a/src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.h b/src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.h
index eb70c61c5..afd74191a 100644
--- a/src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.h
+++ b/src/filters/renderer/VideoRenderers/EVRAllocatorPresenter.h
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,25 +23,11 @@
#include "DX9AllocatorPresenter.h"
#include <mfapi.h> // API Media Foundation
#include <evr9.h>
+#include "../../../DSUtil/WinapiFunc.h"
+#include "AsyncCallback.h"
namespace DSObjects
{
- // dxva.dll
- typedef HRESULT(__stdcall* PTR_DXVA2CreateDirect3DDeviceManager9)(UINT* pResetToken, IDirect3DDeviceManager9** ppDeviceManager);
-
- // mf.dll
- typedef HRESULT(__stdcall* PTR_MFCreatePresentationClock)(IMFPresentationClock** ppPresentationClock);
-
- // evr.dll
- typedef HRESULT(__stdcall* PTR_MFCreateDXSurfaceBuffer)(REFIID riid, IUnknown* punkSurface, BOOL fBottomUpWhenLinear, IMFMediaBuffer** ppBuffer);
- typedef HRESULT(__stdcall* PTR_MFCreateVideoSampleFromSurface)(IUnknown* pUnkSurface, IMFSample** ppSample);
- typedef HRESULT(__stdcall* PTR_MFCreateVideoMediaType)(const MFVIDEOFORMAT* pVideoFormat, IMFVideoMediaType** ppIVideoMediaType);
-
- // avrt.dll
- typedef HANDLE(__stdcall* PTR_AvSetMmThreadCharacteristicsW)(LPCWSTR TaskName, LPDWORD TaskIndex);
- typedef BOOL (__stdcall* PTR_AvSetMmThreadPriority)(HANDLE AvrtHandle, AVRT_PRIORITY Priority);
- typedef BOOL (__stdcall* PTR_AvRevertMmThreadCharacteristics)(HANDLE AvrtHandle);
-
class COuterEVR;
class CEVRAllocatorPresenter :
@@ -159,6 +145,7 @@ namespace DSObjects
STDMETHODIMP GetVideoService(HANDLE hDevice, REFIID riid, void** ppService);
protected:
+ STDMETHODIMP_(bool) Paint(IMFSample* pMFSample);
void OnResetDevice();
virtual void OnVBlankFinished(bool bAll, LONGLONG PerformanceCounter);
@@ -207,11 +194,12 @@ namespace DSObjects
CCritSec m_SampleQueueLock;
CCritSec m_ImageProcessingLock;
CCritSec m_MediaTypeLock;
+ CCritSec m_ThreadsLock;
- CInterfaceList<IMFSample, &IID_IMFSample> m_FreeSamples;
- CInterfaceList<IMFSample, &IID_IMFSample> m_ScheduledSamples;
- IMFSample* m_pCurrentDisplaydSample;
- bool m_bWaitingSample;
+ UINT32 m_nCurrentGroupId;
+ CInterfaceList<IMFSample> m_FreeSamples;
+ CInterfaceList<IMFSample> m_ScheduledSamples;
+ CComPtr<IMFSample> m_pCurrentlyDisplayedSample;
bool m_bLastSampleOffsetValid;
LONGLONG m_LastScheduledSampleTime;
double m_LastScheduledSampleTimeFP;
@@ -247,46 +235,39 @@ namespace DSObjects
void StopWorkerThreads();
HRESULT CheckShutdown() const;
void CompleteFrameStep(bool bCancel);
- void CheckWaitingSampleFromMixer();
static DWORD WINAPI VSyncThreadStatic(LPVOID lpParam);
void VSyncThread();
void RemoveAllSamples();
HRESULT GetFreeSample(IMFSample** ppSample);
- HRESULT GetScheduledSample(IMFSample** ppSample, int& _Count);
- void MoveToFreeList(IMFSample* pSample, bool bTail);
- void MoveToScheduledList(IMFSample* pSample, bool _bSorted);
+ HRESULT GetScheduledSample(IMFSample** ppSample, int& count);
+ void AddToFreeList(IMFSample* pSample, bool bTail);
+ void AddToScheduledList(IMFSample* pSample, bool bSorted);
void FlushSamples();
- void FlushSamplesInternal();
+
+ HRESULT TrackSample(IMFSample* pSample);
+
+ // Callback when a video sample is released.
+ HRESULT OnSampleFree(IMFAsyncResult* pResult);
+ AsyncCallback<CEVRAllocatorPresenter> m_SampleFreeCallback;
// === Media type negotiation functions
HRESULT RenegotiateMediaType();
HRESULT IsMediaTypeSupported(IMFMediaType* pMixerType);
- HRESULT CreateProposedOutputType(IMFMediaType* pMixerType, IMFMediaType** pType);
+ HRESULT CreateOptimalOutputType(IMFMediaType* pMixerProposedType, IMFMediaType* pMixerInputType, IMFMediaType** pType);
HRESULT SetMediaType(IMFMediaType* pType);
HRESULT GetMediaTypeFourCC(IMFMediaType* pType, DWORD* pFourCC);
HRESULT GetMediaTypeMerit(IMFMediaType* pType, int* pMerit);
LPCTSTR GetMediaTypeFormatDesc(IMFMediaType* pMediaType);
- // === Functions pointers on Vista+ / .NET Framework 3.5 specific library
- HMODULE m_hDXVA2Lib;
- HMODULE m_hEVRLib;
- HMODULE m_hAVRTLib;
-
- PTR_DXVA2CreateDirect3DDeviceManager9 pfDXVA2CreateDirect3DDeviceManager9;
- PTR_MFCreateDXSurfaceBuffer pfMFCreateDXSurfaceBuffer;
- PTR_MFCreateVideoSampleFromSurface pfMFCreateVideoSampleFromSurface;
- PTR_MFCreateVideoMediaType pfMFCreateVideoMediaType;
-
-#if 0
- HRESULT(__stdcall* pMFCreateMediaType)(__deref_out IMFMediaType** ppMFType);
- HRESULT(__stdcall* pMFInitMediaTypeFromAMMediaType)(__in IMFMediaType* pMFType, __in const AM_MEDIA_TYPE* pAMType);
- HRESULT(__stdcall* pMFInitAMMediaTypeFromMFMediaType)(__in IMFMediaType* pMFType, __in GUID guidFormatBlockType, __inout AM_MEDIA_TYPE* pAMType);
-#endif
-
- PTR_AvSetMmThreadCharacteristicsW pfAvSetMmThreadCharacteristicsW;
- PTR_AvSetMmThreadPriority pfAvSetMmThreadPriority;
- PTR_AvRevertMmThreadCharacteristics pfAvRevertMmThreadCharacteristics;
+ const WinapiFunc<decltype(DXVA2CreateDirect3DDeviceManager9)> fnDXVA2CreateDirect3DDeviceManager9;
+ const WinapiFunc<decltype(MFCreateDXSurfaceBuffer)> fnMFCreateDXSurfaceBuffer;
+ const WinapiFunc<decltype(MFCreateVideoSampleFromSurface)> fnMFCreateVideoSampleFromSurface;
+ const WinapiFunc<decltype(MFCreateMediaType)> fnMFCreateMediaType;
+
+ const WinapiFunc<decltype(AvSetMmThreadCharacteristicsW)> fnAvSetMmThreadCharacteristicsW;
+ const WinapiFunc<decltype(AvSetMmThreadPriority)> fnAvSetMmThreadPriority;
+ const WinapiFunc<decltype(AvRevertMmThreadCharacteristics)> fnAvRevertMmThreadCharacteristics;
};
}
diff --git a/src/filters/renderer/VideoRenderers/FocusThread.cpp b/src/filters/renderer/VideoRenderers/FocusThread.cpp
index 73620ea98..c71365d5f 100644
--- a/src/filters/renderer/VideoRenderers/FocusThread.cpp
+++ b/src/filters/renderer/VideoRenderers/FocusThread.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -39,18 +39,18 @@ CFocusThread::CFocusThread()
: m_hWnd(nullptr)
, m_hEvtInit(nullptr)
{
- WNDCLASS wndclass;
-
- wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE;
- wndclass.lpfnWndProc = FocusWndProc;
- wndclass.cbClsExtra = 0;
- wndclass.cbWndExtra = 0;
- wndclass.hInstance = nullptr;
- wndclass.hIcon = nullptr;
- wndclass.hCursor = nullptr;
- wndclass.hbrBackground = nullptr;
- wndclass.lpszMenuName = nullptr;
- wndclass.lpszClassName = _T("D3DFocusClass");
+ WNDCLASS wndclass {
+ CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE,
+ FocusWndProc,
+ 0,
+ 0,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ _T("D3DFocusClass")
+ };
if (!RegisterClass(&wndclass)) {
TRACE("Registering focus window failed");
@@ -82,6 +82,11 @@ int CFocusThread::ExitInstance()
if (m_hWnd) {
DestroyWindow(m_hWnd);
m_hWnd = nullptr;
+
+ CWnd* pMainWnd = AfxGetApp()->GetMainWnd();
+ if (pMainWnd) {
+ pMainWnd->SetActiveWindow();
+ }
}
return __super::ExitInstance();
}
diff --git a/src/filters/renderer/VideoRenderers/FocusThread.h b/src/filters/renderer/VideoRenderers/FocusThread.h
index 7d4d9f837..17701f088 100644
--- a/src/filters/renderer/VideoRenderers/FocusThread.h
+++ b/src/filters/renderer/VideoRenderers/FocusThread.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -32,13 +32,16 @@ private:
HANDLE m_hEvtInit;
protected:
- CFocusThread(void); // protected constructor used by dynamic creation
- ~CFocusThread(void);
+ CFocusThread(); // protected constructor used by dynamic creation
+ ~CFocusThread();
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
HWND GetFocusWindow();
+
+protected:
+ afx_msg void OnDestroy();
};
diff --git a/src/filters/renderer/VideoRenderers/IPinHook.cpp b/src/filters/renderer/VideoRenderers/IPinHook.cpp
index 1c44e264a..2e85648a9 100644
--- a/src/filters/renderer/VideoRenderers/IPinHook.cpp
+++ b/src/filters/renderer/VideoRenderers/IPinHook.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -29,8 +29,10 @@
#include "IPinHook.h"
#include "AllocatorCommon.h"
+#include "../../../mpc-hc/FGFilterLAV.h"
+
#define DXVA_LOGFILE_A 0 // set to 1 for logging DXVA data to a file
-#define LOG_BITSTREAM 0 // set to 1 for logging DXVA bistream data to a file
+#define LOG_BITSTREAM 0 // set to 1 for logging DXVA bitstream data to a file
#define LOG_MATRIX 0 // set to 1 for logging DXVA matrix data to a file
#if defined(_DEBUG) && DXVA_LOGFILE_A
@@ -47,6 +49,7 @@ GUID g_guidDXVADecoder = GUID_NULL;
int g_nDXVAVersion = 0;
IPinCVtbl* g_pPinCVtbl = nullptr;
+IPinCVtbl* g_pPinCVtbl10BitWorkAround = nullptr;
IMemInputPinCVtbl* g_pMemInputPinCVtbl = nullptr;
struct D3DFORMAT_TYPE {
@@ -152,12 +155,15 @@ static HRESULT(STDMETHODCALLTYPE* ReceiveConnectionOrg)(IPinC* This, /* [in] */
static HRESULT STDMETHODCALLTYPE ReceiveConnectionMine(IPinC* This, /* [in] */ IPinC* pConnector, /* [in] */ const AM_MEDIA_TYPE* pmt)
{
- // Force the renderer to always reject the P010 pixel format
- if (pmt && pmt->subtype == MEDIASUBTYPE_P010) {
- return VFW_E_TYPE_NOT_ACCEPTED;
- } else {
- return ReceiveConnectionOrg(This, pConnector, pmt);
+ // Force-reject P010 and P016 pixel formats due to Microsoft bug ...
+ if (pmt && (pmt->subtype == MEDIASUBTYPE_P010 || pmt->subtype == MEDIASUBTYPE_P016)) {
+ // ... but allow LAV Video Decoder to do that itself in order to support 10bit DXVA.
+ if (GetCLSID((IPin*)pConnector) != GUID_LAVVideo) {
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ }
}
+
+ return ReceiveConnectionOrg(This, pConnector, pmt);
}
@@ -183,46 +189,44 @@ static HRESULT STDMETHODCALLTYPE ReceiveMine(IMemInputPinC* This, IMediaSample*
return ReceiveMineI(This, pSample);
}
-void HookWorkAroundNVIDIADriverBug(IPinC* pPinC)
+void HookWorkAround10BitBug(IBaseFilter* pBF)
{
- // Work-around a bug in NVIDIA drivers v344.11: this driver mistakenly
- // accepts P010 pixel format as input for EVR so use the pin hook to
- // add our own level of verification
-#if MPC_VERSION_MAJOR > 1 || MPC_VERSION_MINOR > 7 || MPC_VERSION_PATCH > 6
-#pragma message("WARNING: Check if this bug is fixed in currently distributed driver")
-#endif
- if (ReceiveConnectionOrg == nullptr) {
- ReceiveConnectionOrg = pPinC->lpVtbl->ReceiveConnection;
- }
- pPinC->lpVtbl->ReceiveConnection = ReceiveConnectionMine;
-}
+ if (CComPtr<IPin> pPin = GetFirstPin(pBF)) {
+ IPinC* pPinC = (IPinC*)(IPin*)pPin;
-void UnhookWorkAroundNVIDIADriverBug()
-{
- if (g_pPinCVtbl->ReceiveConnection == ReceiveConnectionMine) {
- g_pPinCVtbl->ReceiveConnection = ReceiveConnectionOrg;
+ DWORD flOldProtect = 0;
+ if (VirtualProtect(pPinC->lpVtbl, sizeof(IPinCVtbl), PAGE_EXECUTE_WRITECOPY, &flOldProtect)) {
+ if (ReceiveConnectionOrg == nullptr) {
+ ReceiveConnectionOrg = pPinC->lpVtbl->ReceiveConnection;
+ }
+ pPinC->lpVtbl->ReceiveConnection = ReceiveConnectionMine;
+ FlushInstructionCache(GetCurrentProcess(), pPinC->lpVtbl, sizeof(IPinCVtbl));
+ VirtualProtect(pPinC->lpVtbl, sizeof(IPinCVtbl), flOldProtect, &flOldProtect);
+ g_pPinCVtbl10BitWorkAround = pPinC->lpVtbl;
+ } else {
+ TRACE(_T("HookWorkAroundVideoDriversBug: Could not hook the VTable"));
+ ASSERT(FALSE);
+ }
}
- ReceiveConnectionOrg = nullptr;
}
-void HookWorkAroundNVIDIADriverBug(IBaseFilter* pBF)
+void UnhookWorkAround10BitBug()
{
- DWORD flOldProtect = 0;
-
- if (g_pPinCVtbl) {
- VirtualProtect(g_pPinCVtbl, sizeof(IPinCVtbl), PAGE_WRITECOPY, &flOldProtect);
- UnhookWorkAroundNVIDIADriverBug();
- VirtualProtect(g_pPinCVtbl, sizeof(IPinCVtbl), flOldProtect, &flOldProtect);
- }
-
- if (CComPtr<IPin> pPin = GetFirstPin(pBF)) {
- IPinC* pPinC = (IPinC*)(IPin*)pPin;
-
- VirtualProtect(pPinC->lpVtbl, sizeof(IPinCVtbl), PAGE_WRITECOPY, &flOldProtect);
- HookWorkAroundNVIDIADriverBug(pPinC);
- VirtualProtect(pPinC->lpVtbl, sizeof(IPinCVtbl), flOldProtect, &flOldProtect);
-
- g_pPinCVtbl = pPinC->lpVtbl;
+ // Unhook previous VTable
+ if (g_pPinCVtbl10BitWorkAround) {
+ DWORD flOldProtect = 0;
+ if (VirtualProtect(g_pPinCVtbl10BitWorkAround, sizeof(IPinCVtbl), PAGE_EXECUTE_WRITECOPY, &flOldProtect)) {
+ if (g_pPinCVtbl10BitWorkAround->ReceiveConnection == ReceiveConnectionMine) {
+ g_pPinCVtbl10BitWorkAround->ReceiveConnection = ReceiveConnectionOrg;
+ }
+ ReceiveConnectionOrg = nullptr;
+ FlushInstructionCache(GetCurrentProcess(), g_pPinCVtbl10BitWorkAround, sizeof(IPinCVtbl));
+ VirtualProtect(g_pPinCVtbl10BitWorkAround, sizeof(IPinCVtbl), flOldProtect, &flOldProtect);
+ g_pPinCVtbl10BitWorkAround = nullptr;
+ } else {
+ TRACE(_T("UnhookWorkAroundVideoDriversBug: Could not unhook previous VTable"));
+ ASSERT(FALSE);
+ }
}
}
@@ -230,25 +234,35 @@ void UnhookNewSegmentAndReceive()
{
DWORD flOldProtect = 0;
- // Casimir666 : unhook previous VTables
- if (g_pPinCVtbl && g_pMemInputPinCVtbl) {
- VirtualProtect(g_pPinCVtbl, sizeof(IPinCVtbl), PAGE_WRITECOPY, &flOldProtect);
- if (g_pPinCVtbl->NewSegment == NewSegmentMine) {
- g_pPinCVtbl->NewSegment = NewSegmentOrg;
+ // Unhook previous VTables
+ if (g_pPinCVtbl) {
+ if (VirtualProtect(g_pPinCVtbl, sizeof(IPinCVtbl), PAGE_EXECUTE_WRITECOPY, &flOldProtect)) {
+ if (g_pPinCVtbl->NewSegment == NewSegmentMine) {
+ g_pPinCVtbl->NewSegment = NewSegmentOrg;
+ }
+ FlushInstructionCache(GetCurrentProcess(), g_pPinCVtbl, sizeof(IPinCVtbl));
+ VirtualProtect(g_pPinCVtbl, sizeof(IPinCVtbl), flOldProtect, &flOldProtect);
+ g_pPinCVtbl = nullptr;
+ NewSegmentOrg = nullptr;
+ } else {
+ TRACE(_T("UnhookNewSegmentAndReceive: Could not unhook g_pPinCVtbl VTable"));
+ ASSERT(FALSE);
}
- UnhookWorkAroundNVIDIADriverBug();
- VirtualProtect(g_pPinCVtbl, sizeof(IPinCVtbl), flOldProtect, &flOldProtect);
+ }
- VirtualProtect(g_pMemInputPinCVtbl, sizeof(IMemInputPinCVtbl), PAGE_WRITECOPY, &flOldProtect);
- if (g_pMemInputPinCVtbl->Receive == ReceiveMine) {
- g_pMemInputPinCVtbl->Receive = ReceiveOrg;
+ if (g_pMemInputPinCVtbl) {
+ if (VirtualProtect(g_pMemInputPinCVtbl, sizeof(IMemInputPinCVtbl), PAGE_EXECUTE_WRITECOPY, &flOldProtect)) {
+ if (g_pMemInputPinCVtbl->Receive == ReceiveMine) {
+ g_pMemInputPinCVtbl->Receive = ReceiveOrg;
+ }
+ FlushInstructionCache(GetCurrentProcess(), g_pMemInputPinCVtbl, sizeof(IMemInputPinCVtbl));
+ VirtualProtect(g_pMemInputPinCVtbl, sizeof(IMemInputPinCVtbl), flOldProtect, &flOldProtect);
+ g_pMemInputPinCVtbl = nullptr;
+ ReceiveOrg = nullptr;
+ } else {
+ TRACE(_T("UnhookNewSegmentAndReceive: Could not unhook g_pMemInputPinCVtbl VTable"));
+ ASSERT(FALSE);
}
- VirtualProtect(g_pMemInputPinCVtbl, sizeof(IMemInputPinCVtbl), flOldProtect, &flOldProtect);
-
- g_pPinCVtbl = nullptr;
- g_pMemInputPinCVtbl = nullptr;
- NewSegmentOrg = nullptr;
- ReceiveOrg = nullptr;
}
}
@@ -260,29 +274,40 @@ bool HookNewSegmentAndReceive(IPinC* pPinC, IMemInputPinC* pMemInputPinC)
g_tSegmentStart = 0;
g_tSampleStart = 0;
- DWORD flOldProtect = 0;
UnhookNewSegmentAndReceive();
- // Casimir666 : change sizeof(IPinC) to sizeof(IPinCVtbl) to fix crash with EVR hack on Vista!
- VirtualProtect(pPinC->lpVtbl, sizeof(IPinCVtbl), PAGE_WRITECOPY, &flOldProtect);
- if (NewSegmentOrg == nullptr) {
- NewSegmentOrg = pPinC->lpVtbl->NewSegment;
- }
- pPinC->lpVtbl->NewSegment = NewSegmentMine; // Function sets global variable(s)
- HookWorkAroundNVIDIADriverBug(pPinC);
- VirtualProtect(pPinC->lpVtbl, sizeof(IPinCVtbl), flOldProtect, &flOldProtect);
-
- // Casimir666 : change sizeof(IMemInputPinC) to sizeof(IMemInputPinCVtbl) to fix crash with EVR hack on Vista!
- VirtualProtect(pMemInputPinC->lpVtbl, sizeof(IMemInputPinCVtbl), PAGE_WRITECOPY, &flOldProtect);
- if (ReceiveOrg == nullptr) {
- ReceiveOrg = pMemInputPinC->lpVtbl->Receive;
+ DWORD flOldProtect = 0;
+
+ if (!g_pPinCVtbl) {
+ if (VirtualProtect(pPinC->lpVtbl, sizeof(IPinCVtbl), PAGE_EXECUTE_WRITECOPY, &flOldProtect)) {
+ if (NewSegmentOrg == nullptr) {
+ NewSegmentOrg = pPinC->lpVtbl->NewSegment;
+ }
+ pPinC->lpVtbl->NewSegment = NewSegmentMine; // Function sets global variable(s)
+ FlushInstructionCache(GetCurrentProcess(), pPinC->lpVtbl, sizeof(IPinCVtbl));
+ VirtualProtect(pPinC->lpVtbl, sizeof(IPinCVtbl), flOldProtect, &flOldProtect);
+ g_pPinCVtbl = pPinC->lpVtbl;
+ } else {
+ TRACE(_T("HookNewSegmentAndReceive: Could not unhook g_pPinCVtbl VTable"));
+ ASSERT(FALSE);
+ }
}
- pMemInputPinC->lpVtbl->Receive = ReceiveMine; // Function sets global variable(s)
- VirtualProtect(pMemInputPinC->lpVtbl, sizeof(IMemInputPinCVtbl), flOldProtect, &flOldProtect);
- g_pPinCVtbl = pPinC->lpVtbl;
- g_pMemInputPinCVtbl = pMemInputPinC->lpVtbl;
+ if (!g_pMemInputPinCVtbl) {
+ if (VirtualProtect(pMemInputPinC->lpVtbl, sizeof(IMemInputPinCVtbl), PAGE_EXECUTE_WRITECOPY, &flOldProtect)) {
+ if (ReceiveOrg == nullptr) {
+ ReceiveOrg = pMemInputPinC->lpVtbl->Receive;
+ }
+ pMemInputPinC->lpVtbl->Receive = ReceiveMine; // Function sets global variable(s)
+ FlushInstructionCache(GetCurrentProcess(), pMemInputPinC->lpVtbl, sizeof(IMemInputPinCVtbl));
+ VirtualProtect(pMemInputPinC->lpVtbl, sizeof(IMemInputPinCVtbl), flOldProtect, &flOldProtect);
+ g_pMemInputPinCVtbl = pMemInputPinC->lpVtbl;
+ } else {
+ TRACE(_T("HookNewSegmentAndReceive: Could not unhook g_pMemInputPinCVtbl VTable"));
+ ASSERT(FALSE);
+ }
+ }
return true;
}
@@ -292,7 +317,7 @@ bool HookNewSegmentAndReceive(IPinC* pPinC, IMemInputPinC* pMemInputPinC)
#ifdef _DEBUG
#define MAX_BUFFER_TYPE 15
-BYTE* g_ppBuffer[MAX_BUFFER_TYPE]; // Only used for debug logging
+BYTE* g_ppBuffer[MAX_BUFFER_TYPE]; // Only used for debug logging
static HRESULT(STDMETHODCALLTYPE* GetVideoAcceleratorGUIDsOrg)(IAMVideoAcceleratorC* This,/* [out][in] */ LPDWORD pdwNumGuidsSupported,/* [out][in] */ LPGUID pGuidsSupported) = nullptr;
static HRESULT(STDMETHODCALLTYPE* GetUncompFormatsSupportedOrg)(IAMVideoAcceleratorC* This,/* [in] */ const GUID* pGuid,/* [out][in] */ LPDWORD pdwNumFormatsSupported,/* [out][in] */ LPDDPIXELFORMAT pFormatsSupported) = nullptr;
@@ -463,25 +488,24 @@ static void LogDXVA_PicParams_H264(DXVA_PicParams_H264* pPic)
strRes.AppendFormat(_T("%d,"), pPic->slice_group_change_rate_minus1);
- //for (int i=0; i<810; i++)
- // strRes.AppendFormat(_T("%d,"), pPic->SliceGroupMap[i]);
- // strRes.AppendFormat(_T("%d,"), pPic->SliceGroupMap[810]);
+ //for (int i=0; i<810; i++) {
+ // strRes.AppendFormat(_T("%d,"), pPic->SliceGroupMap[i]);
+ //}
+ //strRes.AppendFormat(_T("%d"), pPic->SliceGroupMap[810]);
// SABOTAGE !!!
- //for (int i=0; i<16; i++)
- //{
- // pPic->FieldOrderCntList[i][0] = pPic->FieldOrderCntList[i][1] = 0;
- // pPic->RefFrameList[i].AssociatedFlag = 1;
- // pPic->RefFrameList[i].bPicEntry = 255;
- // pPic->RefFrameList[i].Index7Bits = 127;
+ //for (int i=0; i<16; i++) {
+ // pPic->FieldOrderCntList[i][0] = pPic->FieldOrderCntList[i][1] = 0;
+ // pPic->RefFrameList[i].AssociatedFlag = 1;
+ // pPic->RefFrameList[i].bPicEntry = 255;
+ // pPic->RefFrameList[i].Index7Bits = 127;
//}
// === Dump PicParams!
//static FILE* hPict = nullptr;
- //if (!hPict) hPict = fopen ("PicParam.bin", "wb");
- //if (hPict)
- //{
- // fwrite (pPic, sizeof (DXVA_PicParams_H264), 1, hPict);
+ //if (!hPict) { hPict = fopen ("PicParam.bin", "wb") };
+ //if (hPict) {
+ // fwrite (pPic, sizeof (DXVA_PicParams_H264), 1, hPict);
//}
LOG_TOFILE(LOG_FILE_PICTURE, strRes);
@@ -806,14 +830,12 @@ static HRESULT STDMETHODCALLTYPE GetCompBufferInfoMine(IAMVideoAcceleratorC* Thi
LOG(_T("hr = %08x"), hr);
- //if (pdwNumTypesCompBuffers)
- //{
- // LOG(_T("[out] *pdwNumTypesCompBuffers = %d"), *pdwNumTypesCompBuffers);
-
- // if (pamvaUncompDataInfo)
- // {
- // LOGUDI(_T("[out] pamvaUncompDataInfo"), pamvaUncompDataInfo, *pdwNumTypesCompBuffers);
- // }
+ //if (pdwNumTypesCompBuffers) {
+ // LOG(_T("[out] *pdwNumTypesCompBuffers = %d"), *pdwNumTypesCompBuffers);
+ //
+ // if (pamvaUncompDataInfo) {
+ // LOGUDI(_T("[out] pamvaUncompDataInfo"), pamvaUncompDataInfo, *pdwNumTypesCompBuffers);
+ // }
//}
return hr;
@@ -905,7 +927,7 @@ static HRESULT STDMETHODCALLTYPE ReleaseBufferMine(IAMVideoAcceleratorC* This, D
}
static HRESULT STDMETHODCALLTYPE ExecuteMine(IAMVideoAcceleratorC* This, DWORD dwFunction, LPVOID lpPrivateInputData, DWORD cbPrivateInputData,
- LPVOID lpPrivateOutputData, DWORD cbPrivateOutputData, DWORD dwNumBuffers, const AMVABUFFERINFO* pamvaBufferInfo)
+ LPVOID lpPrivateOutputData, DWORD cbPrivateOutputData, DWORD dwNumBuffers, const AMVABUFFERINFO* pamvaBufferInfo)
{
#ifdef _DEBUG
LOG(_T("\nExecute"));
@@ -1034,73 +1056,78 @@ void HookAMVideoAccelerator(IAMVideoAcceleratorC* pAMVideoAcceleratorC)
g_nDXVAVersion = 0;
DWORD flOldProtect = 0;
- VirtualProtect(pAMVideoAcceleratorC->lpVtbl, sizeof(IAMVideoAcceleratorC), PAGE_WRITECOPY, &flOldProtect);
+ if (VirtualProtect(pAMVideoAcceleratorC->lpVtbl, sizeof(IAMVideoAcceleratorCVtbl), PAGE_EXECUTE_WRITECOPY, &flOldProtect)) {
#ifdef _DEBUG
- if (GetVideoAcceleratorGUIDsOrg == nullptr) {
- GetVideoAcceleratorGUIDsOrg = pAMVideoAcceleratorC->lpVtbl->GetVideoAcceleratorGUIDs;
- }
- if (GetUncompFormatsSupportedOrg == nullptr) {
- GetUncompFormatsSupportedOrg = pAMVideoAcceleratorC->lpVtbl->GetUncompFormatsSupported;
- }
- if (GetInternalMemInfoOrg == nullptr) {
- GetInternalMemInfoOrg = pAMVideoAcceleratorC->lpVtbl->GetInternalMemInfo;
- }
+ if (GetVideoAcceleratorGUIDsOrg == nullptr) {
+ GetVideoAcceleratorGUIDsOrg = pAMVideoAcceleratorC->lpVtbl->GetVideoAcceleratorGUIDs;
+ }
+ if (GetUncompFormatsSupportedOrg == nullptr) {
+ GetUncompFormatsSupportedOrg = pAMVideoAcceleratorC->lpVtbl->GetUncompFormatsSupported;
+ }
+ if (GetInternalMemInfoOrg == nullptr) {
+ GetInternalMemInfoOrg = pAMVideoAcceleratorC->lpVtbl->GetInternalMemInfo;
+ }
#endif
- if (GetCompBufferInfoOrg == nullptr) {
- GetCompBufferInfoOrg = pAMVideoAcceleratorC->lpVtbl->GetCompBufferInfo;
- }
+ if (GetCompBufferInfoOrg == nullptr) {
+ GetCompBufferInfoOrg = pAMVideoAcceleratorC->lpVtbl->GetCompBufferInfo;
+ }
#ifdef _DEBUG
- if (GetInternalCompBufferInfoOrg == nullptr) {
- GetInternalCompBufferInfoOrg = pAMVideoAcceleratorC->lpVtbl->GetInternalCompBufferInfo;
- }
- if (BeginFrameOrg == nullptr) {
- BeginFrameOrg = pAMVideoAcceleratorC->lpVtbl->BeginFrame;
- }
- if (EndFrameOrg == nullptr) {
- EndFrameOrg = pAMVideoAcceleratorC->lpVtbl->EndFrame;
- }
- if (GetBufferOrg == nullptr) {
- GetBufferOrg = pAMVideoAcceleratorC->lpVtbl->GetBuffer;
- }
- if (ReleaseBufferOrg == nullptr) {
- ReleaseBufferOrg = pAMVideoAcceleratorC->lpVtbl->ReleaseBuffer;
- }
- if (ExecuteOrg == nullptr) {
- ExecuteOrg = pAMVideoAcceleratorC->lpVtbl->Execute;
- }
- if (QueryRenderStatusOrg == nullptr) {
- QueryRenderStatusOrg = pAMVideoAcceleratorC->lpVtbl->QueryRenderStatus;
- }
- if (DisplayFrameOrg == nullptr) {
- DisplayFrameOrg = pAMVideoAcceleratorC->lpVtbl->DisplayFrame;
- }
+ if (GetInternalCompBufferInfoOrg == nullptr) {
+ GetInternalCompBufferInfoOrg = pAMVideoAcceleratorC->lpVtbl->GetInternalCompBufferInfo;
+ }
+ if (BeginFrameOrg == nullptr) {
+ BeginFrameOrg = pAMVideoAcceleratorC->lpVtbl->BeginFrame;
+ }
+ if (EndFrameOrg == nullptr) {
+ EndFrameOrg = pAMVideoAcceleratorC->lpVtbl->EndFrame;
+ }
+ if (GetBufferOrg == nullptr) {
+ GetBufferOrg = pAMVideoAcceleratorC->lpVtbl->GetBuffer;
+ }
+ if (ReleaseBufferOrg == nullptr) {
+ ReleaseBufferOrg = pAMVideoAcceleratorC->lpVtbl->ReleaseBuffer;
+ }
+ if (ExecuteOrg == nullptr) {
+ ExecuteOrg = pAMVideoAcceleratorC->lpVtbl->Execute;
+ }
+ if (QueryRenderStatusOrg == nullptr) {
+ QueryRenderStatusOrg = pAMVideoAcceleratorC->lpVtbl->QueryRenderStatus;
+ }
+ if (DisplayFrameOrg == nullptr) {
+ DisplayFrameOrg = pAMVideoAcceleratorC->lpVtbl->DisplayFrame;
+ }
- pAMVideoAcceleratorC->lpVtbl->GetVideoAcceleratorGUIDs = GetVideoAcceleratorGUIDsMine;
- pAMVideoAcceleratorC->lpVtbl->GetUncompFormatsSupported = GetUncompFormatsSupportedMine;
- pAMVideoAcceleratorC->lpVtbl->GetInternalMemInfo = GetInternalMemInfoMine;
+ pAMVideoAcceleratorC->lpVtbl->GetVideoAcceleratorGUIDs = GetVideoAcceleratorGUIDsMine;
+ pAMVideoAcceleratorC->lpVtbl->GetUncompFormatsSupported = GetUncompFormatsSupportedMine;
+ pAMVideoAcceleratorC->lpVtbl->GetInternalMemInfo = GetInternalMemInfoMine;
#endif
- pAMVideoAcceleratorC->lpVtbl->GetCompBufferInfo = GetCompBufferInfoMine; // Function sets global variable(s)
+ pAMVideoAcceleratorC->lpVtbl->GetCompBufferInfo = GetCompBufferInfoMine; // Function sets global variable(s)
#ifdef _DEBUG
- pAMVideoAcceleratorC->lpVtbl->GetInternalCompBufferInfo = GetInternalCompBufferInfoMine;
- pAMVideoAcceleratorC->lpVtbl->BeginFrame = BeginFrameMine;
- pAMVideoAcceleratorC->lpVtbl->EndFrame = EndFrameMine;
- pAMVideoAcceleratorC->lpVtbl->GetBuffer = GetBufferMine;
- pAMVideoAcceleratorC->lpVtbl->ReleaseBuffer = ReleaseBufferMine;
- pAMVideoAcceleratorC->lpVtbl->Execute = ExecuteMine;
- pAMVideoAcceleratorC->lpVtbl->QueryRenderStatus = QueryRenderStatusMine;
- pAMVideoAcceleratorC->lpVtbl->DisplayFrame = DisplayFrameMine;
-
- VirtualProtect(pAMVideoAcceleratorC->lpVtbl, sizeof(IAMVideoAcceleratorC), PAGE_EXECUTE, &flOldProtect);
-
-#if DXVA_LOGFILE_A
+ pAMVideoAcceleratorC->lpVtbl->GetInternalCompBufferInfo = GetInternalCompBufferInfoMine;
+ pAMVideoAcceleratorC->lpVtbl->BeginFrame = BeginFrameMine;
+ pAMVideoAcceleratorC->lpVtbl->EndFrame = EndFrameMine;
+ pAMVideoAcceleratorC->lpVtbl->GetBuffer = GetBufferMine;
+ pAMVideoAcceleratorC->lpVtbl->ReleaseBuffer = ReleaseBufferMine;
+ pAMVideoAcceleratorC->lpVtbl->Execute = ExecuteMine;
+ pAMVideoAcceleratorC->lpVtbl->QueryRenderStatus = QueryRenderStatusMine;
+ pAMVideoAcceleratorC->lpVtbl->DisplayFrame = DisplayFrameMine;
+#endif
+
+ FlushInstructionCache(GetCurrentProcess(), pAMVideoAcceleratorC->lpVtbl, sizeof(IAMVideoAcceleratorCVtbl));
+ VirtualProtect(pAMVideoAcceleratorC->lpVtbl, sizeof(IAMVideoAcceleratorCVtbl), flOldProtect, &flOldProtect);
+ } else {
+ TRACE(_T("HookAMVideoAccelerator: Could not hook the VTable"));
+ ASSERT(FALSE);
+ }
+
+#if defined(_DEBUG) && DXVA_LOGFILE_A
::DeleteFile(LOG_FILE_DXVA);
::DeleteFile(LOG_FILE_PICTURE);
::DeleteFile(LOG_FILE_SLICELONG);
::DeleteFile(LOG_FILE_SLICESHORT);
::DeleteFile(LOG_FILE_BITSTREAM);
#endif
-#endif
}
@@ -1200,10 +1227,10 @@ public:
CString strBuffer;
LogDecodeBufferDesc(&pExecuteParams->pCompressedBuffers[i]);
- /*
- for (int j=0; j<4000 && j<pExecuteParams->pCompressedBuffers[i].DataSize; j++)
- strBuffer.AppendFormat (_T("%02x "), m_ppBuffer[pExecuteParams->pCompressedBuffers[i].CompressedBufferType][j]);
+ /*for (int j=0; j<4000 && j<pExecuteParams->pCompressedBuffers[i].DataSize; j++) {
+ strBuffer.AppendFormat (_T("%02x "), m_ppBuffer[pExecuteParams->pCompressedBuffers[i].CompressedBufferType][j]);
+ }
LOG (_T(" - Buffer type=%d, offset=%d, size=%d"),
pExecuteParams->pCompressedBuffers[i].CompressedBufferType,
pExecuteParams->pCompressedBuffers[i].DataOffset,
@@ -1350,11 +1377,11 @@ interface IDirectXVideoDecoderServiceC {
IDirectXVideoDecoderServiceCVtbl* g_pIDirectXVideoDecoderServiceCVtbl = nullptr;
static HRESULT(STDMETHODCALLTYPE* CreateVideoDecoderOrg)(IDirectXVideoDecoderServiceC* pThis,
- __in REFGUID Guid,
- __in const DXVA2_VideoDesc* pVideoDesc,
- __in const DXVA2_ConfigPictureDecode* pConfig,
- __in_ecount(NumRenderTargets)
- IDirect3DSurface9** ppDecoderRenderTargets, __in UINT NumRenderTargets, __deref_out IDirectXVideoDecoder** ppDecode) = nullptr;
+ __in REFGUID Guid,
+ __in const DXVA2_VideoDesc* pVideoDesc,
+ __in const DXVA2_ConfigPictureDecode* pConfig,
+ __in_ecount(NumRenderTargets)
+ IDirect3DSurface9** ppDecoderRenderTargets, __in UINT NumRenderTargets, __deref_out IDirectXVideoDecoder** ppDecode) = nullptr;
#ifdef _DEBUG
static HRESULT(STDMETHODCALLTYPE* GetDecoderDeviceGuidsOrg)(IDirectXVideoDecoderServiceC* pThis, __out UINT* pCount, __deref_out_ecount_opt(*pCount) GUID** pGuids) = nullptr;
static HRESULT(STDMETHODCALLTYPE* GetDecoderConfigurationsOrg)(IDirectXVideoDecoderServiceC* pThis, __in REFGUID Guid, __in const DXVA2_VideoDesc* pVideoDesc, __reserved void* pReserved, __out UINT* pCount, __deref_out_ecount_opt(*pCount) DXVA2_ConfigPictureDecode** ppConfigs) = nullptr;
@@ -1460,8 +1487,8 @@ static HRESULT STDMETHODCALLTYPE CreateVideoDecoderMine(
__in UINT NumRenderTargets,
__deref_out IDirectXVideoDecoder** ppDecode)
{
- // DebugBreak();
- // ((DXVA2_VideoDesc*)pVideoDesc)->Format = (D3DFORMAT)0x3231564E;
+ // DebugBreak();
+ // ((DXVA2_VideoDesc*)pVideoDesc)->Format = (D3DFORMAT)0x3231564E;
g_guidDXVADecoder = Guid;
g_nDXVAVersion = 2;
@@ -1504,8 +1531,8 @@ static HRESULT STDMETHODCALLTYPE CreateVideoDecoderMine(
#ifdef _DEBUG
static HRESULT STDMETHODCALLTYPE GetDecoderDeviceGuidsMine(IDirectXVideoDecoderServiceC* pThis,
- __out UINT* pCount,
- __deref_out_ecount_opt(*pCount) GUID** pGuids)
+ __out UINT* pCount,
+ __deref_out_ecount_opt(*pCount) GUID** pGuids)
{
HRESULT hr = GetDecoderDeviceGuidsOrg(pThis, pCount, pGuids);
LOG(_T("IDirectXVideoDecoderService::GetDecoderDeviceGuids hr = %08x\n"), hr);
@@ -1514,16 +1541,16 @@ static HRESULT STDMETHODCALLTYPE GetDecoderDeviceGuidsMine(IDirectXVideoDecoderS
}
static HRESULT STDMETHODCALLTYPE GetDecoderConfigurationsMine(IDirectXVideoDecoderServiceC* pThis,
- __in REFGUID Guid,
- __in const DXVA2_VideoDesc* pVideoDesc,
- __reserved void* pReserved,
- __out UINT* pCount,
- __deref_out_ecount_opt(*pCount) DXVA2_ConfigPictureDecode** ppConfigs)
+ __in REFGUID Guid,
+ __in const DXVA2_VideoDesc* pVideoDesc,
+ __reserved void* pReserved,
+ __out UINT* pCount,
+ __deref_out_ecount_opt(*pCount) DXVA2_ConfigPictureDecode** ppConfigs)
{
HRESULT hr = GetDecoderConfigurationsOrg(pThis, Guid, pVideoDesc, pReserved, pCount, ppConfigs);
// Force LongSlice decoding !
- // memcpy (&(*ppConfigs)[1], &(*ppConfigs)[0], sizeof(DXVA2_ConfigPictureDecode));
+ // memcpy (&(*ppConfigs)[1], &(*ppConfigs)[0], sizeof(DXVA2_ConfigPictureDecode));
return hr;
}
@@ -1535,29 +1562,36 @@ void HookDirectXVideoDecoderService(void* pIDirectXVideoDecoderService)
DWORD flOldProtect = 0;
- // Casimir666 : unhook previous VTables
+ // Unhook previous VTable
if (g_pIDirectXVideoDecoderServiceCVtbl) {
- VirtualProtect(g_pIDirectXVideoDecoderServiceCVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl), PAGE_WRITECOPY, &flOldProtect);
- if (g_pIDirectXVideoDecoderServiceCVtbl->CreateVideoDecoder == CreateVideoDecoderMine) {
- g_pIDirectXVideoDecoderServiceCVtbl->CreateVideoDecoder = CreateVideoDecoderOrg;
- }
+ if (VirtualProtect(g_pIDirectXVideoDecoderServiceCVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl), PAGE_EXECUTE_WRITECOPY, &flOldProtect)) {
+ if (g_pIDirectXVideoDecoderServiceCVtbl->CreateVideoDecoder == CreateVideoDecoderMine) {
+ g_pIDirectXVideoDecoderServiceCVtbl->CreateVideoDecoder = CreateVideoDecoderOrg;
+ }
#ifdef _DEBUG
- if (g_pIDirectXVideoDecoderServiceCVtbl->GetDecoderConfigurations == GetDecoderConfigurationsMine) {
- g_pIDirectXVideoDecoderServiceCVtbl->GetDecoderConfigurations = GetDecoderConfigurationsOrg;
- }
+ if (g_pIDirectXVideoDecoderServiceCVtbl->GetDecoderConfigurations == GetDecoderConfigurationsMine) {
+ g_pIDirectXVideoDecoderServiceCVtbl->GetDecoderConfigurations = GetDecoderConfigurationsOrg;
+ }
- //if (g_pIDirectXVideoDecoderServiceCVtbl->GetDecoderDeviceGuids == GetDecoderDeviceGuidsMine)
- // g_pIDirectXVideoDecoderServiceCVtbl->GetDecoderDeviceGuids = GetDecoderDeviceGuidsOrg;
+ //if (g_pIDirectXVideoDecoderServiceCVtbl->GetDecoderDeviceGuids == GetDecoderDeviceGuidsMine) {
+ // g_pIDirectXVideoDecoderServiceCVtbl->GetDecoderDeviceGuids = GetDecoderDeviceGuidsOrg;
+ //}
#endif
- VirtualProtect(g_pIDirectXVideoDecoderServiceCVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl), flOldProtect, &flOldProtect);
+ FlushInstructionCache(GetCurrentProcess(), g_pIDirectXVideoDecoderServiceCVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl));
+ VirtualProtect(g_pIDirectXVideoDecoderServiceCVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl), flOldProtect, &flOldProtect);
- g_pIDirectXVideoDecoderServiceCVtbl = nullptr;
- CreateVideoDecoderOrg = nullptr;
+ g_pIDirectXVideoDecoderServiceCVtbl = nullptr;
+ CreateVideoDecoderOrg = nullptr;
#ifdef _DEBUG
- GetDecoderConfigurationsOrg = nullptr;
+ GetDecoderConfigurationsOrg = nullptr;
#endif
+ } else {
+ TRACE(_T("HookDirectXVideoDecoderService: Could not unhook the VTable"));
+ ASSERT(FALSE);
+ }
+
g_guidDXVADecoder = GUID_NULL;
g_nDXVAVersion = 0;
}
@@ -1569,21 +1603,26 @@ void HookDirectXVideoDecoderService(void* pIDirectXVideoDecoderService)
#endif
if (!g_pIDirectXVideoDecoderServiceCVtbl && pIDirectXVideoDecoderService) {
- VirtualProtect(pIDirectXVideoDecoderServiceC->lpVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl), PAGE_WRITECOPY, &flOldProtect);
+ if (VirtualProtect(pIDirectXVideoDecoderServiceC->lpVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl), PAGE_EXECUTE_WRITECOPY, &flOldProtect)) {
- CreateVideoDecoderOrg = pIDirectXVideoDecoderServiceC->lpVtbl->CreateVideoDecoder;
- pIDirectXVideoDecoderServiceC->lpVtbl->CreateVideoDecoder = CreateVideoDecoderMine;
+ CreateVideoDecoderOrg = pIDirectXVideoDecoderServiceC->lpVtbl->CreateVideoDecoder;
+ pIDirectXVideoDecoderServiceC->lpVtbl->CreateVideoDecoder = CreateVideoDecoderMine;
#ifdef _DEBUG
- GetDecoderConfigurationsOrg = pIDirectXVideoDecoderServiceC->lpVtbl->GetDecoderConfigurations;
- pIDirectXVideoDecoderServiceC->lpVtbl->GetDecoderConfigurations = GetDecoderConfigurationsMine;
+ GetDecoderConfigurationsOrg = pIDirectXVideoDecoderServiceC->lpVtbl->GetDecoderConfigurations;
+ pIDirectXVideoDecoderServiceC->lpVtbl->GetDecoderConfigurations = GetDecoderConfigurationsMine;
- //GetDecoderDeviceGuidsOrg = pIDirectXVideoDecoderServiceC->lpVtbl->GetDecoderDeviceGuids;
- //pIDirectXVideoDecoderServiceC->lpVtbl->GetDecoderDeviceGuids = GetDecoderDeviceGuidsMine;
+ //GetDecoderDeviceGuidsOrg = pIDirectXVideoDecoderServiceC->lpVtbl->GetDecoderDeviceGuids;
+ //pIDirectXVideoDecoderServiceC->lpVtbl->GetDecoderDeviceGuids = GetDecoderDeviceGuidsMine;
#endif
- VirtualProtect(pIDirectXVideoDecoderServiceC->lpVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl), flOldProtect, &flOldProtect);
+ FlushInstructionCache(GetCurrentProcess(), pIDirectXVideoDecoderServiceC->lpVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl));
+ VirtualProtect(pIDirectXVideoDecoderServiceC->lpVtbl, sizeof(IDirectXVideoDecoderServiceCVtbl), flOldProtect, &flOldProtect);
- g_pIDirectXVideoDecoderServiceCVtbl = pIDirectXVideoDecoderServiceC->lpVtbl;
+ g_pIDirectXVideoDecoderServiceCVtbl = pIDirectXVideoDecoderServiceC->lpVtbl;
+ } else {
+ TRACE(_T("HookDirectXVideoDecoderService: Could not hook the VTable"));
+ ASSERT(FALSE);
+ }
}
}
diff --git a/src/filters/renderer/VideoRenderers/IPinHook.h b/src/filters/renderer/VideoRenderers/IPinHook.h
index 1712b3e34..7425224a9 100644
--- a/src/filters/renderer/VideoRenderers/IPinHook.h
+++ b/src/filters/renderer/VideoRenderers/IPinHook.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -76,7 +76,8 @@ extern bool HookNewSegmentAndReceive(IPinC* pPinC, IMemInputPinC* pMemInputPin);
extern void UnhookNewSegmentAndReceive();
extern REFERENCE_TIME g_tSegmentStart, g_tSampleStart, g_rtTimePerFrame;
-extern void HookWorkAroundNVIDIADriverBug(IBaseFilter* pBF);
+extern void HookWorkAround10BitBug(IBaseFilter* pBF);
+extern void UnhookWorkAround10BitBug();
//
diff --git a/src/filters/renderer/VideoRenderers/PixelShaderCache.cpp b/src/filters/renderer/VideoRenderers/PixelShaderCache.cpp
new file mode 100644
index 000000000..481d96bd5
--- /dev/null
+++ b/src/filters/renderer/VideoRenderers/PixelShaderCache.cpp
@@ -0,0 +1,242 @@
+/*
+* (C) 2016 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "stdafx.h"
+#include "PixelShaderCache.h"
+#include "RenderersSettings.h"
+#include <d3d9.h>
+
+CPixelShaderCache::CPixelShaderCache(IDirect3DDevice9* pD3DDev)
+ : m_pD3DDev(pD3DDev)
+{
+ if (IsEnabled()) {
+ LoadCache();
+ } else {
+ DestroyCache();
+ }
+}
+
+HRESULT CPixelShaderCache::CreatePixelShader(
+ LPCSTR pProfile,
+ LPCSTR pSourceData,
+ SIZE_T SourceDataSize,
+ IDirect3DPixelShader9** ppPixelShader)
+{
+ if (!IsEnabled()) {
+ return E_FAIL;
+ }
+
+ uint64_t hash = Hash(pProfile, pSourceData, SourceDataSize);
+ auto pixelShader = m_PixelShaders.PLookup(hash);
+
+ if (pixelShader) {
+ HRESULT res = m_pD3DDev->CreatePixelShader(pixelShader->value.m_p, ppPixelShader);
+
+ if (FAILED(res)) {
+ DeleteCache(hash);
+ } else {
+ CString file_path;
+ if (GetCacheFilePath(file_path, hash)) {
+ TouchFile(file_path);
+ }
+ }
+ return res;
+ }
+
+ return E_FAIL;
+}
+
+void CPixelShaderCache::SavePixelShader(
+ LPCSTR pProfile,
+ LPCSTR pSourceData,
+ SIZE_T SourceDataSize,
+ void* pCompiledData,
+ SIZE_T CompiledDataSize)
+{
+ if (!IsEnabled()) {
+ return;
+ }
+
+ uint64_t hash = Hash(pProfile, pSourceData, SourceDataSize);
+
+ CAutoVectorPtr<DWORD> buffer;
+ if (buffer.Allocate(CompiledDataSize)) {
+ memcpy(buffer.m_p, pCompiledData, CompiledDataSize);
+ m_PixelShaders.SetAt(hash, buffer);
+ }
+
+ CString cacheFilePath;
+ if (GetCacheFilePath(cacheFilePath, hash)) {
+ CFile file;
+ if (file.Open(cacheFilePath, CFile::modeWrite | CFile::typeBinary)) {
+ file.SetLength(0);
+ } else if (!file.Open(cacheFilePath, CFile::modeWrite | CFile::typeBinary | CFile::modeCreate)) {
+ return;
+ }
+
+ file.Write(&m_Version, sizeof(m_Version));
+ file.Write(&CompiledDataSize, sizeof(CompiledDataSize));
+ file.Write(pCompiledData, UINT(CompiledDataSize));
+
+ bool res = file.GetLength() == (sizeof(m_Version) + sizeof(CompiledDataSize) + CompiledDataSize);
+
+ file.Close();
+
+ if (!res) {
+ CFile::Remove(cacheFilePath);
+ }
+ }
+}
+
+void CPixelShaderCache::LoadCache()
+{
+ CString cacheFolder;
+ if (GetCacheFolder(cacheFolder)) {
+ CFileFind finder;
+ BOOL working = finder.FindFile(cacheFolder + _T("\\*"));
+
+ while (working) {
+ working = finder.FindNextFile();
+ if (!finder.IsDirectory() && !finder.IsDots()) {
+ if (!LoadCache(finder.GetFileName(), finder.GetFilePath())) {
+ CFile::Remove(finder.GetFilePath());
+ }
+ }
+ }
+ }
+}
+
+void CPixelShaderCache::DestroyCache()
+{
+ CString cacheFolder;
+ if (GetCacheFolder(cacheFolder)) {
+ SHFILEOPSTRUCT fileop = {};
+ fileop.wFunc = FO_DELETE;
+ // The last file name is terminated with a double NULL character ("\0\0") to indicate the end of the buffer.
+ // We add one char to CString. GetBufferSetLength adds NULL at the end and since previous end was also NULL
+ // returned buffer have double NULL character at the end in result.
+ fileop.pFrom = cacheFolder.GetBufferSetLength(cacheFolder.GetLength() + 1);
+ fileop.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
+ VERIFY(SHFileOperation(&fileop) == 0);
+ }
+}
+
+bool CPixelShaderCache::IsEnabled()
+{
+ return GetRenderersSettings().m_AdvRendSets.bCacheShaders;
+}
+
+void CPixelShaderCache::TouchFile(const CString& FileName) const
+{
+ CFileStatus status;
+ if (CFile::GetStatus(FileName, status)) {
+ status.m_mtime = CTime::GetCurrentTime();
+ CFile::SetStatus(FileName, status);
+ }
+}
+
+bool CPixelShaderCache::IsFileOutdated(const CString& FileName) const
+{
+ CFileStatus status;
+ if (CFile::GetStatus(FileName, status)) {
+ CTimeSpan timespan(m_CachedDaysLimit, 0, 0, 0);
+ return CTime::GetCurrentTime() - status.m_mtime > timespan;
+ }
+
+ return true;
+}
+
+bool CPixelShaderCache::LoadCache(const CString& FileName, const CString& FilePath)
+{
+ if (IsFileOutdated(FilePath)) {
+ return false;
+ }
+
+ CPath path(FileName);
+ path.RemoveExtension();
+ uint64_t hash = _tcstoui64(path, NULL, 10);
+ CFile file;
+ if (file.Open(FilePath, CFile::modeRead | CFile::typeBinary)) {
+ unsigned int version;
+ bool ret = false;
+
+ if ((file.Read(&version, sizeof(version)) == sizeof(version)) && (version == m_Version)) {
+ SIZE_T size;
+ if (file.Read(&size, sizeof(size)) == sizeof(size)) {
+ CAutoVectorPtr<DWORD> buffer;
+ if (buffer.Allocate(size)) {
+ ret = (file.Read(buffer.m_p, UINT(size)) == size);
+
+ m_PixelShaders.SetAt(hash, buffer);
+ }
+ }
+ }
+
+ file.Close();
+
+ return ret;
+ }
+ return false;
+}
+
+void CPixelShaderCache::DeleteCache(uint64_t Hash)
+{
+ m_PixelShaders.RemoveKey(Hash);
+
+ CString cacheFilePath;
+ if (GetCacheFilePath(cacheFilePath, Hash)) {
+ CFile::Remove(cacheFilePath);
+ }
+}
+
+bool CPixelShaderCache::GetCacheFilePath(CString& CacheFilePath, uint64_t Hash) const
+{
+ CString cacheFolder;
+ if (GetCacheFolder(cacheFolder)) {
+ CacheFilePath.Format(_T("\\%020llu"), Hash);
+ CacheFilePath = cacheFolder + CacheFilePath + m_Extension;
+ return true;
+ }
+ return false;
+}
+
+bool CPixelShaderCache::GetCacheFolder(CString& CacheFolder)
+{
+ CacheFolder = GetRenderersSettings().m_AdvRendSets.sShaderCachePath;
+
+ return !CacheFolder.IsEmpty() && (PathFileExists(CacheFolder) || (IsEnabled() && CreateDirectory(CacheFolder, nullptr)));
+}
+
+uint64_t CPixelShaderCache::Hash(LPCSTR pProfile, LPCSTR pSourceData, SIZE_T SourceDataSize) const
+{
+ return Hash(pProfile) + Hash(pSourceData) + (uint64_t)SourceDataSize;
+}
+
+uint64_t CPixelShaderCache::Hash(LPCSTR pStr) const
+{
+ uint64_t hash = 3074457345618258791ull;
+ LPCSTR p = pStr;
+
+ while (p && *p != 0) {
+ hash = (hash + *p) * 3074457345618258799ull;
+ ++p;
+ }
+ return hash;
+}
diff --git a/src/filters/renderer/VideoRenderers/PixelShaderCache.h b/src/filters/renderer/VideoRenderers/PixelShaderCache.h
new file mode 100644
index 000000000..37c9c020c
--- /dev/null
+++ b/src/filters/renderer/VideoRenderers/PixelShaderCache.h
@@ -0,0 +1,67 @@
+/*
+* (C) 2016 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#pragma once
+
+#include <cstdint>
+
+interface IDirect3DDevice9;
+interface IDirect3DPixelShader9;
+
+class CPixelShaderCache
+{
+ const unsigned int m_Version = 1;
+ const LONG m_CachedDaysLimit = 30;
+ const CString m_Extension = _T(".cso");
+
+ CComPtr<IDirect3DDevice9> m_pD3DDev;
+
+ CMap<uint64_t, uint64_t, CAutoVectorPtr<DWORD>, CAutoVectorPtr<DWORD>> m_PixelShaders;
+
+public:
+ CPixelShaderCache(IDirect3DDevice9* pD3DDev);
+
+ HRESULT CreatePixelShader(
+ LPCSTR pProfile,
+ LPCSTR pSourceData,
+ SIZE_T SourceDataSize,
+ IDirect3DPixelShader9** ppPixelShader);
+
+ void SavePixelShader(
+ LPCSTR pProfile,
+ LPCSTR pSourceData,
+ SIZE_T SourceDataSize,
+ void* pCompiledData,
+ SIZE_T CompiledDataSize);
+
+private:
+ void LoadCache();
+ static void DestroyCache();
+ static bool IsEnabled();
+ void TouchFile(const CString& FileName) const;
+ bool IsFileOutdated(const CString& FileName) const;
+ bool LoadCache(const CString& FileName, const CString& FilePath);
+ void DeleteCache(uint64_t Hash);
+ bool GetCacheFilePath(CString& CacheFilePath, uint64_t Hash) const;
+ static bool GetCacheFolder(CString& CacheFolder);
+
+ uint64_t Hash(LPCSTR pProfile, LPCSTR pSourceData, SIZE_T SourceDataSize) const;
+ uint64_t Hash(LPCSTR pStr) const;
+};
diff --git a/src/filters/renderer/VideoRenderers/PixelShaderCompiler.cpp b/src/filters/renderer/VideoRenderers/PixelShaderCompiler.cpp
index cafe9d121..164730b83 100644
--- a/src/filters/renderer/VideoRenderers/PixelShaderCompiler.cpp
+++ b/src/filters/renderer/VideoRenderers/PixelShaderCompiler.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,13 +22,14 @@
#include "stdafx.h"
#include "PixelShaderCompiler.h"
#include "../../../mpc-hc/resource.h"
-#include <share.h>
+#include <d3d9.h>
CPixelShaderCompiler::CPixelShaderCompiler(IDirect3DDevice9* pD3DDev, bool fStaySilent)
: m_hDll(nullptr)
- , m_pD3DDev(pD3DDev)
, m_pD3DCompile(nullptr)
, m_pD3DDisassemble(nullptr)
+ , m_pD3DDev(pD3DDev)
+ , m_Cache(pD3DDev)
{
m_hDll = LoadLibrary(D3DCOMPILER_DLL);
@@ -120,6 +121,11 @@ HRESULT CPixelShaderCompiler::InternalCompile(
} else {
defProfileVal = "-1";
}
+
+ if (ppPixelShader && SUCCEEDED(m_Cache.CreatePixelShader(defProfileVal, pSrcData, SrcDataSize, ppPixelShader))) {
+ return S_OK;
+ }
+
D3D_SHADER_MACRO macros[] = { { defProfile, defProfileVal }, { 0 } };
CComPtr<ID3DBlob> pShaderBlob, pErrorBlob;
@@ -145,6 +151,9 @@ HRESULT CPixelShaderCompiler::InternalCompile(
if (FAILED(hr)) {
return hr;
}
+
+ m_Cache.SavePixelShader(defProfileVal, pSrcData, SrcDataSize,
+ (void*)pShaderBlob->GetBufferPointer(), pShaderBlob->GetBufferSize());
}
if (pDisasm) {
diff --git a/src/filters/renderer/VideoRenderers/PixelShaderCompiler.h b/src/filters/renderer/VideoRenderers/PixelShaderCompiler.h
index fe9bd0e46..5aab64950 100644
--- a/src/filters/renderer/VideoRenderers/PixelShaderCompiler.h
+++ b/src/filters/renderer/VideoRenderers/PixelShaderCompiler.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,7 +21,7 @@
#pragma once
-#include <d3d9.h>
+#include "PixelShaderCache.h"
#include <D3Dcompiler.h>
class CPixelShaderCompiler
@@ -33,6 +33,8 @@ class CPixelShaderCompiler
CComPtr<IDirect3DDevice9> m_pD3DDev;
+ CPixelShaderCache m_Cache;
+
HRESULT InternalCompile(
LPCSTR pSrcData,
SIZE_T SrcDataSize,
diff --git a/src/filters/renderer/VideoRenderers/QT7AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/QT7AllocatorPresenter.cpp
deleted file mode 100644
index 612ef7e11..000000000
--- a/src/filters/renderer/VideoRenderers/QT7AllocatorPresenter.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include "QT7AllocatorPresenter.h"
-
-using namespace DSObjects;
-
-//
-// CQT7AllocatorPresenter
-//
-
-CQT7AllocatorPresenter::CQT7AllocatorPresenter(HWND hWnd, HRESULT& hr)
- : CDX7AllocatorPresenter(hWnd, hr)
-{
-}
-
-STDMETHODIMP CQT7AllocatorPresenter::NonDelegatingQueryInterface(REFIID riid, void** ppv)
-{
- CheckPointer(ppv, E_POINTER);
-
- return
- QI(IQTVideoSurface)
- __super::NonDelegatingQueryInterface(riid, ppv);
-}
-
-HRESULT CQT7AllocatorPresenter::AllocSurfaces()
-{
- CAutoLock cAutoLock(this);
-
- m_pVideoSurfaceOff = nullptr;
-
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
- ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
- ddsd.dwWidth = m_nativeVideoSize.cx;
- ddsd.dwHeight = m_nativeVideoSize.cy;
- ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
- ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
- ddsd.ddpfPixelFormat.dwRGBBitCount = 32;
- ddsd.ddpfPixelFormat.dwRGBAlphaBitMask = 0xFF000000;
- ddsd.ddpfPixelFormat.dwRBitMask = 0x00FF0000;
- ddsd.ddpfPixelFormat.dwGBitMask = 0x0000FF00;
- ddsd.ddpfPixelFormat.dwBBitMask = 0x000000FF;
-
- HRESULT hr = m_pDD->CreateSurface(&ddsd, &m_pVideoSurfaceOff, nullptr);
- if (FAILED(hr)) {
- return E_FAIL;
- }
-
- DDBLTFX fx;
- INITDDSTRUCT(fx);
- fx.dwFillColor = 0;
- m_pVideoSurfaceOff->Blt(nullptr, nullptr, nullptr, DDBLT_WAIT | DDBLT_COLORFILL, &fx);
-
- return __super::AllocSurfaces();
-}
-
-void CQT7AllocatorPresenter::DeleteSurfaces()
-{
- CAutoLock cAutoLock(this);
-
- m_pVideoSurfaceOff = nullptr;
-
- __super::DeleteSurfaces();
-}
-
-// IQTVideoSurface
-
-STDMETHODIMP CQT7AllocatorPresenter::BeginBlt(const BITMAP& bm)
-{
- CAutoLock cAutoLock(this);
-
- DeleteSurfaces();
-
- SetVideoSize(CSize(bm.bmWidth, abs(bm.bmHeight)));
-
- HRESULT hr;
- if (FAILED(hr = AllocSurfaces())) {
- return hr;
- }
-
- return S_OK;
-}
-
-STDMETHODIMP CQT7AllocatorPresenter::DoBlt(const BITMAP& bm)
-{
- if (!m_pVideoSurface || !m_pVideoSurfaceOff) {
- return E_FAIL;
- }
-
- bool fOk = false;
-
- DDSURFACEDESC2 ddsd;
- INITDDSTRUCT(ddsd);
- if (FAILED(m_pVideoSurfaceOff->GetSurfaceDesc(&ddsd))) {
- return E_FAIL;
- }
-
- UINT w = (UINT)bm.bmWidth;
- UINT h = abs(bm.bmHeight);
- int bpp = bm.bmBitsPixel;
-
- if ((bpp == 16 || bpp == 24 || bpp == 32) && w == ddsd.dwWidth && h == ddsd.dwHeight) {
- INITDDSTRUCT(ddsd);
- if (SUCCEEDED(m_pVideoSurfaceOff->Lock(nullptr, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY, nullptr))) {
- BitBltFromRGBToRGB(
- w, h,
- (BYTE*)ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRGBBitCount,
- (BYTE*)bm.bmBits, bm.bmWidthBytes, bm.bmBitsPixel);
- m_pVideoSurfaceOff->Unlock(nullptr);
- fOk = true;
- }
- }
-
- if (!fOk) {
- DDBLTFX fx;
- INITDDSTRUCT(fx);
- fx.dwFillColor = 0;
- m_pVideoSurfaceOff->Blt(nullptr, nullptr, nullptr, DDBLT_WAIT | DDBLT_COLORFILL, &fx);
-
- HDC hDC;
- if (SUCCEEDED(m_pVideoSurfaceOff->GetDC(&hDC))) {
- CString str;
- str.Format(_T("Sorry, this format is not supported"));
-
- SetBkColor(hDC, 0);
- SetTextColor(hDC, 0x404040);
- TextOut(hDC, 10, 10, str, str.GetLength());
-
- m_pVideoSurfaceOff->ReleaseDC(hDC);
- }
- }
-
- m_pVideoSurface->Blt(nullptr, m_pVideoSurfaceOff, nullptr, DDBLT_WAIT, nullptr);
-
- Paint(true);
-
- return S_OK;
-}
diff --git a/src/filters/renderer/VideoRenderers/QT7AllocatorPresenter.h b/src/filters/renderer/VideoRenderers/QT7AllocatorPresenter.h
deleted file mode 100644
index 5760fcd76..000000000
--- a/src/filters/renderer/VideoRenderers/QT7AllocatorPresenter.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include "DX7AllocatorPresenter.h"
-#include "IQTVideoSurface.h"
-
-namespace DSObjects
-{
-
- class CQT7AllocatorPresenter
- : public CDX7AllocatorPresenter
- , public IQTVideoSurface
- {
- CComPtr<IDirectDrawSurface7> m_pVideoSurfaceOff;
-
- protected:
- HRESULT AllocSurfaces();
- void DeleteSurfaces();
-
- public:
- CQT7AllocatorPresenter(HWND hWnd, HRESULT& hr);
-
- DECLARE_IUNKNOWN
- STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
-
- // ISubPicAllocatorPresenter2
- STDMETHODIMP SetIsRendering(bool bIsRendering) {
- m_bIsRendering = bIsRendering;
- return S_OK;
- }
-
- // IQTVideoSurface
- STDMETHODIMP BeginBlt(const BITMAP& bm);
- STDMETHODIMP DoBlt(const BITMAP& bm);
- };
-
-}
diff --git a/src/filters/renderer/VideoRenderers/QT9AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/QT9AllocatorPresenter.cpp
index 3324f44a8..bd74d8d8d 100644
--- a/src/filters/renderer/VideoRenderers/QT9AllocatorPresenter.cpp
+++ b/src/filters/renderer/VideoRenderers/QT9AllocatorPresenter.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,6 +20,7 @@
#include "stdafx.h"
#include "QT9AllocatorPresenter.h"
+#include "../../../DSUtil/vd.h"
using namespace DSObjects;
@@ -43,6 +44,8 @@ STDMETHODIMP CQT9AllocatorPresenter::NonDelegatingQueryInterface(REFIID riid, vo
HRESULT CQT9AllocatorPresenter::AllocSurfaces()
{
+ CheckPointer(m_pD3DDev, E_POINTER);
+
HRESULT hr;
m_pVideoSurfaceOff = nullptr;
diff --git a/src/filters/renderer/VideoRenderers/RM7AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/RM7AllocatorPresenter.cpp
deleted file mode 100644
index d568696a2..000000000
--- a/src/filters/renderer/VideoRenderers/RM7AllocatorPresenter.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include "RM7AllocatorPresenter.h"
-
-using namespace DSObjects;
-
-//
-// CRM7AllocatorPresenter
-//
-
-CRM7AllocatorPresenter::CRM7AllocatorPresenter(HWND hWnd, HRESULT& hr)
- : CDX7AllocatorPresenter(hWnd, hr)
-{
- ZeroMemory(&m_bitmapInfo, sizeof(m_bitmapInfo));
- ZeroMemory(&m_lastBitmapInfo, sizeof(m_lastBitmapInfo));
-}
-
-STDMETHODIMP CRM7AllocatorPresenter::NonDelegatingQueryInterface(REFIID riid, void** ppv)
-{
- CheckPointer(ppv, E_POINTER);
-
- return
- QI2(IRMAVideoSurface)
- __super::NonDelegatingQueryInterface(riid, ppv);
-}
-
-HRESULT CRM7AllocatorPresenter::AllocSurfaces()
-{
- CAutoLock cAutoLock(this);
-
- m_pVideoSurfaceOff = nullptr;
- m_pVideoSurfaceYUY2 = nullptr;
-
- DDSURFACEDESC2 ddsd;
- DDBLTFX fx;
-
- INITDDSTRUCT(ddsd);
- ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
- ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
- ddsd.dwWidth = m_nativeVideoSize.cx;
- ddsd.dwHeight = m_nativeVideoSize.cy;
- ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
- ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
- ddsd.ddpfPixelFormat.dwRGBBitCount = 32;
- ddsd.ddpfPixelFormat.dwRGBAlphaBitMask = 0xFF000000;
- ddsd.ddpfPixelFormat.dwRBitMask = 0x00FF0000;
- ddsd.ddpfPixelFormat.dwGBitMask = 0x0000FF00;
- ddsd.ddpfPixelFormat.dwBBitMask = 0x000000FF;
-
- if (FAILED(m_pDD->CreateSurface(&ddsd, &m_pVideoSurfaceOff, nullptr))) {
- return E_FAIL;
- }
-
- INITDDSTRUCT(fx);
- fx.dwFillColor = 0;
- m_pVideoSurfaceOff->Blt(nullptr, nullptr, nullptr, DDBLT_WAIT | DDBLT_COLORFILL, &fx);
-
- INITDDSTRUCT(ddsd);
- ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
- ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
- ddsd.dwWidth = m_nativeVideoSize.cx;
- ddsd.dwHeight = m_nativeVideoSize.cy;
- ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
- ddsd.ddpfPixelFormat.dwFlags = DDPF_FOURCC;
- ddsd.ddpfPixelFormat.dwYUVBitCount = 16;
- ddsd.ddpfPixelFormat.dwFourCC = '2YUY';
-
- m_pDD->CreateSurface(&ddsd, &m_pVideoSurfaceYUY2, nullptr);
-
- if (FAILED(m_pVideoSurfaceOff->Blt(nullptr, m_pVideoSurfaceYUY2, nullptr, DDBLT_WAIT, nullptr))) {
- m_pVideoSurfaceYUY2 = nullptr;
- }
-
- if (m_pVideoSurfaceYUY2) {
- INITDDSTRUCT(fx);
- fx.dwFillColor = 0x80108010;
- m_pVideoSurfaceYUY2->Blt(nullptr, nullptr, nullptr, DDBLT_WAIT | DDBLT_COLORFILL, &fx);
- }
-
- return __super::AllocSurfaces();
-}
-
-void CRM7AllocatorPresenter::DeleteSurfaces()
-{
- CAutoLock cAutoLock(this);
-
- m_pVideoSurfaceOff = nullptr;
- m_pVideoSurfaceYUY2 = nullptr;
-
- __super::DeleteSurfaces();
-}
-
-// IRMAVideoSurface
-
-STDMETHODIMP CRM7AllocatorPresenter::Blt(UCHAR* pImageData, RMABitmapInfoHeader* pBitmapInfo, REF(PNxRect) inDestRect, REF(PNxRect) inSrcRect)
-{
- if (!m_pVideoSurface || !m_pVideoSurfaceOff) {
- return E_FAIL;
- }
-
- bool fRGB = false;
- bool fYUY2 = false;
-
- CRect src((RECT*)&inSrcRect), dst((RECT*)&inDestRect), src2(CPoint(0, 0), src.Size());
- if (src.Width() > dst.Width() || src.Height() > dst.Height()) {
- return E_FAIL;
- }
-
- DDSURFACEDESC2 ddsd;
-
- if (pBitmapInfo->biCompression == '024I') {
- DWORD pitch = pBitmapInfo->biWidth;
- DWORD size = pitch * abs(pBitmapInfo->biHeight);
-
- BYTE* y = pImageData + src.top * pitch + src.left;
- BYTE* u = pImageData + size + src.top * (pitch / 2) + src.left / 2;
- BYTE* v = pImageData + size + size / 4 + src.top * (pitch / 2) + src.left / 2;
-
- if (m_pVideoSurfaceYUY2) {
- INITDDSTRUCT(ddsd);
- if (SUCCEEDED(m_pVideoSurfaceYUY2->Lock(src2, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY, nullptr))) {
- BitBltFromI420ToYUY2(src.Width(), src.Height(), (BYTE*)ddsd.lpSurface, ddsd.lPitch, y, u, v, pitch);
- m_pVideoSurfaceYUY2->Unlock(src2);
- fYUY2 = true;
- }
- } else {
- INITDDSTRUCT(ddsd);
- if (SUCCEEDED(m_pVideoSurfaceOff->Lock(src2, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY, nullptr))) {
- BitBltFromI420ToRGB(src.Width(), src.Height(), (BYTE*)ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRGBBitCount, y, u, v, pitch);
- m_pVideoSurfaceOff->Unlock(src2);
- fRGB = true;
- }
- }
- } else if (pBitmapInfo->biCompression == '2YUY') {
- DWORD w = pBitmapInfo->biWidth;
- DWORD h = abs(pBitmapInfo->biHeight);
- DWORD pitch = pBitmapInfo->biWidth * 2;
- UNREFERENCED_PARAMETER(w);
- UNREFERENCED_PARAMETER(h);
-
- BYTE* yvyu = pImageData + src.top * pitch + src.left * 2;
-
- if (m_pVideoSurfaceYUY2) {
- INITDDSTRUCT(ddsd);
- if (SUCCEEDED(m_pVideoSurfaceYUY2->Lock(src2, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY, nullptr))) {
- BitBltFromYUY2ToYUY2(src.Width(), src.Height(), (BYTE*)ddsd.lpSurface, ddsd.lPitch, yvyu, pitch);
- m_pVideoSurfaceYUY2->Unlock(src2);
- fYUY2 = true;
- }
- } else {
- INITDDSTRUCT(ddsd);
- if (SUCCEEDED(m_pVideoSurfaceOff->Lock(src2, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY, nullptr))) {
- BitBltFromYUY2ToRGB(src.Width(), src.Height(), (BYTE*)ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRGBBitCount, yvyu, pitch);
- m_pVideoSurfaceOff->Unlock(src2);
- fRGB = true;
- }
- }
- } else if (pBitmapInfo->biCompression == 0 || pBitmapInfo->biCompression == 3
- || pBitmapInfo->biCompression == 'BGRA') {
- DWORD w = pBitmapInfo->biWidth;
- DWORD h = abs(pBitmapInfo->biHeight);
- DWORD pitch = pBitmapInfo->biWidth * pBitmapInfo->biBitCount >> 3;
- UNREFERENCED_PARAMETER(w);
- UNREFERENCED_PARAMETER(h);
-
- BYTE* rgb = pImageData + src.top * pitch + src.left * (pBitmapInfo->biBitCount >> 3);
-
- INITDDSTRUCT(ddsd);
- if (SUCCEEDED(m_pVideoSurfaceOff->Lock(src2, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY, nullptr))) {
- BYTE* lpSurface = (BYTE*)ddsd.lpSurface;
- if (pBitmapInfo->biHeight > 0) {
- lpSurface += ddsd.lPitch * (src.Height() - 1);
- ddsd.lPitch = -ddsd.lPitch;
- }
- BitBltFromRGBToRGB(src.Width(), src.Height(), lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRGBBitCount, rgb, pitch, pBitmapInfo->biBitCount);
- fRGB = true;
- m_pVideoSurfaceOff->Unlock(src2);
- }
- }
-
- if (!fRGB && !fYUY2) {
- DDBLTFX fx;
- INITDDSTRUCT(fx);
- fx.dwFillColor = 0;
- m_pVideoSurfaceOff->Blt(nullptr, nullptr, nullptr, DDBLT_WAIT | DDBLT_COLORFILL, &fx);
-
- HDC hDC;
- if (SUCCEEDED(m_pVideoSurfaceOff->GetDC(&hDC))) {
- CString str;
- str.Format(_T("Sorry, this format is not supported"));
-
- SetBkColor(hDC, 0);
- SetTextColor(hDC, 0x404040);
- TextOut(hDC, 10, 10, str, str.GetLength());
-
- m_pVideoSurfaceOff->ReleaseDC(hDC);
-
- fRGB = true;
- }
- }
-
- if (fRGB) {
- m_pVideoSurface->Blt(dst, m_pVideoSurfaceOff, src2, DDBLT_WAIT, nullptr);
- }
- if (fYUY2) {
- m_pVideoSurface->Blt(dst, m_pVideoSurfaceYUY2, src2, DDBLT_WAIT, nullptr);
- }
-
- Paint(true);
-
- return PNR_OK;
-}
-
-STDMETHODIMP CRM7AllocatorPresenter::BeginOptimizedBlt(RMABitmapInfoHeader* pBitmapInfo)
-{
- CAutoLock cAutoLock(this);
- DeleteSurfaces();
- SetVideoSize(CSize(pBitmapInfo->biWidth, abs(pBitmapInfo->biHeight)));
- if (FAILED(AllocSurfaces())) {
- return E_FAIL;
- }
- return PNR_NOTIMPL;
-}
-
-STDMETHODIMP CRM7AllocatorPresenter::OptimizedBlt(UCHAR* pImageBits, REF(PNxRect) rDestRect, REF(PNxRect) rSrcRect)
-{
- return PNR_NOTIMPL;
-}
-
-STDMETHODIMP CRM7AllocatorPresenter::EndOptimizedBlt()
-{
- return PNR_NOTIMPL;
-}
-
-STDMETHODIMP CRM7AllocatorPresenter::GetOptimizedFormat(REF(RMA_COMPRESSION_TYPE) ulType)
-{
- return PNR_NOTIMPL;
-}
-
-STDMETHODIMP CRM7AllocatorPresenter::GetPreferredFormat(REF(RMA_COMPRESSION_TYPE) ulType)
-{
- ulType = RMA_I420;
- return PNR_OK;
-}
diff --git a/src/filters/renderer/VideoRenderers/RM7AllocatorPresenter.h b/src/filters/renderer/VideoRenderers/RM7AllocatorPresenter.h
deleted file mode 100644
index 14627fab6..000000000
--- a/src/filters/renderer/VideoRenderers/RM7AllocatorPresenter.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include "DX7AllocatorPresenter.h"
-#include "realmedia/pntypes.h"
-#include "realmedia/pnwintyp.h"
-#include "realmedia/pncom.h"
-#include "realmedia/rmavsurf.h"
-
-namespace DSObjects
-{
-
- class CRM7AllocatorPresenter
- : public CDX7AllocatorPresenter
- , public IRMAVideoSurface
- {
- CComPtr<IDirectDrawSurface7> m_pVideoSurfaceOff;
- CComPtr<IDirectDrawSurface7> m_pVideoSurfaceYUY2;
-
- RMABitmapInfoHeader m_bitmapInfo;
- RMABitmapInfoHeader m_lastBitmapInfo;
-
- protected:
- HRESULT AllocSurfaces();
- void DeleteSurfaces();
-
- public:
- CRM7AllocatorPresenter(HWND hWnd, HRESULT& hr);
-
- DECLARE_IUNKNOWN
- STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
-
- // ISubPicAllocatorPresenter2
- STDMETHODIMP SetIsRendering(bool bIsRendering) {
- m_bIsRendering = bIsRendering;
- return S_OK;
- }
-
- // IRMAVideoSurface
- STDMETHODIMP Blt(UCHAR* pImageData, RMABitmapInfoHeader* pBitmapInfo, REF(PNxRect) inDestRect, REF(PNxRect) inSrcRect);
- STDMETHODIMP BeginOptimizedBlt(RMABitmapInfoHeader* pBitmapInfo);
- STDMETHODIMP OptimizedBlt(UCHAR* pImageBits, REF(PNxRect) rDestRect, REF(PNxRect) rSrcRect);
- STDMETHODIMP EndOptimizedBlt();
- STDMETHODIMP GetOptimizedFormat(REF(RMA_COMPRESSION_TYPE) ulType);
- STDMETHODIMP GetPreferredFormat(REF(RMA_COMPRESSION_TYPE) ulType);
- };
-
-}
diff --git a/src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.cpp
index f7469f1e6..7f80106b9 100644
--- a/src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.cpp
+++ b/src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,6 +20,7 @@
#include "stdafx.h"
#include "RM9AllocatorPresenter.h"
+#include "../../../DSUtil/vd.h"
using namespace DSObjects;
@@ -48,6 +49,8 @@ HRESULT CRM9AllocatorPresenter::AllocSurfaces()
CAutoLock cAutoLock(this);
CAutoLock cRenderLock(&m_RenderLock);
+ CheckPointer(m_pD3DDev, E_POINTER);
+
m_pVideoSurfaceOff = nullptr;
m_pVideoSurfaceYUY2 = nullptr;
diff --git a/src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.h b/src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.h
index 35dc040cc..dac5c7b76 100644
--- a/src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.h
+++ b/src/filters/renderer/VideoRenderers/RM9AllocatorPresenter.h
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,11 +21,9 @@
#pragma once
#include "DX9AllocatorPresenter.h"
-#include "realmedia/pntypes.h"
-#include "realmedia/pnwintyp.h"
#include "realmedia/pncom.h"
+#include "realmedia/pnwintyp.h"
#include "realmedia/rmavsurf.h"
-#include "IQTVideoSurface.h"
namespace DSObjects
{
diff --git a/src/filters/renderer/VideoRenderers/RenderersSettings.cpp b/src/filters/renderer/VideoRenderers/RenderersSettings.cpp
index 89813297e..1866d029b 100644
--- a/src/filters/renderer/VideoRenderers/RenderersSettings.cpp
+++ b/src/filters/renderer/VideoRenderers/RenderersSettings.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,7 +24,6 @@
#include "../../../mpc-hc/AppSettings.h"
#include "../../../mpc-hc/mplayerc.h"
#include "../../../DSUtil/SysVersion.h"
-#include "version.h"
#include <d3dx9.h>
void CRenderersSettings::UpdateData(bool fSave)
@@ -61,6 +60,7 @@ void CRenderersSettings::CAdvRendererSettings::SetDefault()
fCycleDelta = 0.0012;
fTargetSyncOffset = 12.0;
fControlLimit = 2.0;
+ bCacheShaders = false;
}
void CRenderersSettings::CAdvRendererSettings::SetOptimal()
@@ -92,57 +92,41 @@ void CRenderersSettings::CAdvRendererSettings::SetOptimal()
fCycleDelta = 0.0012;
fTargetSyncOffset = 12.0;
fControlLimit = 2.0;
+ bCacheShaders = false;
}
/////////////////////////////////////////////////////////////////////////////
// CRenderersData construction
CRenderersData::CRenderersData()
+ : m_hD3DX9Dll(nullptr)
+ , m_nDXSdkRelease(D3DX_SDK_VERSION)
+ , m_bTearingTest(false)
+ , m_iDisplayStats(0)
+ , m_bResetStats(false)
+ // Don't disable hardware features before initializing a renderer
+ , m_bFP16Support(true)
+ , m_bFP32Support(true)
+ , m_b10bitSupport(true)
{
- m_bTearingTest = false;
- m_iDisplayStats = 0;
- m_bResetStats = false;
- m_hD3DX9Dll = nullptr;
- m_nDXSdkRelease = 0;
-
- // Don't disable hardware features before initializing a renderer
- m_bFP16Support = true;
- m_b10bitSupport = true;
+ QueryPerformanceFrequency(&llPerfFrequency);
}
LONGLONG CRenderersData::GetPerfCounter() const
{
LARGE_INTEGER i64Ticks100ns;
- LARGE_INTEGER llPerfFrequency;
- QueryPerformanceFrequency(&llPerfFrequency);
- if (llPerfFrequency.QuadPart != 0) {
- QueryPerformanceCounter(&i64Ticks100ns);
- return llMulDiv(i64Ticks100ns.QuadPart, 10000000, llPerfFrequency.QuadPart, 0);
- } else {
- // ms to 100ns units
- return LONGLONG(timeGetTime()) * 10000;
- }
+ QueryPerformanceCounter(&i64Ticks100ns);
+ return llMulDiv(i64Ticks100ns.QuadPart, 10000000, llPerfFrequency.QuadPart, 0);
}
HINSTANCE CRenderersData::GetD3X9Dll()
{
-#if D3DX_SDK_VERSION < MPC_DX_SDK_NUMBER
-#pragma message("ERROR: DirectX SDK " MPC_DX_SDK_MONTH " " MAKE_STR(MPC_DX_SDK_YEAR) " (v" MAKE_STR(MPC_DX_SDK_NUMBER) ") or newer is required to build MPC-HC")
-#endif
-
+ // D3DX9 v43 is the latest available and will not get any update. We support only this specific version.
+ static_assert(D3DX_SDK_VERSION == 43, "Different D3DX9 version?");
if (m_hD3DX9Dll == nullptr) {
- m_nDXSdkRelease = 0;
-
- // load latest compatible version of the DLL that is available
- for (UINT i = D3DX_SDK_VERSION; i >= MPC_DX_SDK_NUMBER; i--) {
- m_strD3DX9Version.Format(_T("d3dx9_%u.dll"), i);
- m_hD3DX9Dll = LoadLibrary(m_strD3DX9Version);
- if (m_hD3DX9Dll) {
- m_nDXSdkRelease = i;
- break;
- }
- }
+ m_strD3DX9Version.Format(_T("d3dx9_%u.dll"), D3DX_SDK_VERSION);
+ m_hD3DX9Dll = LoadLibrary(m_strD3DX9Version);
}
return m_hD3DX9Dll;
diff --git a/src/filters/renderer/VideoRenderers/RenderersSettings.h b/src/filters/renderer/VideoRenderers/RenderersSettings.h
index c8c9e60cc..8a74fe118 100644
--- a/src/filters/renderer/VideoRenderers/RenderersSettings.h
+++ b/src/filters/renderer/VideoRenderers/RenderersSettings.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -32,14 +32,12 @@ enum {
enum {
VIDRNDT_RM_DEFAULT,
- VIDRNDT_RM_DX7,
- VIDRNDT_RM_DX9
+ VIDRNDT_RM_DX9 = 2
};
enum {
VIDRNDT_QT_DEFAULT,
- VIDRNDT_QT_DX7,
- VIDRNDT_QT_DX9
+ VIDRNDT_QT_DX9 = 2
};
enum {
@@ -111,6 +109,10 @@ public:
double fTargetSyncOffset;
double fControlLimit;
+ // Other settings
+ bool bCacheShaders;
+ CString sShaderCachePath;
+
void SetDefault();
void SetOptimal();
};
@@ -131,8 +133,9 @@ public:
class CRenderersData
{
- HINSTANCE m_hD3DX9Dll;
- UINT m_nDXSdkRelease;
+ HINSTANCE m_hD3DX9Dll;
+ const UINT m_nDXSdkRelease;
+ LARGE_INTEGER llPerfFrequency;
public:
CRenderersData();
@@ -144,6 +147,7 @@ public:
// Hardware feature support
bool m_bFP16Support;
+ bool m_bFP32Support;
bool m_b10bitSupport;
CString m_strDXVAInfo;
diff --git a/src/filters/renderer/VideoRenderers/SyncRenderer.cpp b/src/filters/renderer/VideoRenderers/SyncRenderer.cpp
index f5bd188b4..e7357999c 100644
--- a/src/filters/renderer/VideoRenderers/SyncRenderer.cpp
+++ b/src/filters/renderer/VideoRenderers/SyncRenderer.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2010-2014 see Authors.txt
+ * (C) 2010-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -28,12 +28,10 @@
#include "../../../DSUtil/WinAPIUtils.h"
#include <strsafe.h> // Required in CGenlock
#include <videoacc.h>
-#include <InitGuid.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <vmr9.h>
#include <evr.h>
-#include <mfapi.h>
#include <Mferror.h>
#include <vector>
#include "../../../SubPic/DX9SubPic.h"
@@ -42,9 +40,21 @@
#include "MacrovisionKicker.h"
#include "IPinHook.h"
#include "PixelShaderCompiler.h"
-#include "SyncRenderer.h"
-#include "version.h"
#include "FocusThread.h"
+#include "../../../DSUtil/SysVersion.h"
+#include "../../../DSUtil/vd.h"
+#include <mpc-hc_config.h>
+
+#include <initguid.h>
+#include <mfapi.h>
+#include "SyncRenderer.h"
+
+#define REFERENCE_WIDTH 1920
+#define FONT_HEIGHT 21
+#define BOLD_THRESHOLD 11
+#define TEXT_PADDING 2
+#define GRAPH_HEIGHT 360
+#define GRAPH_WIDTH 1000
// only for debugging
//#define DISABLE_USING_D3D9EX
@@ -55,84 +65,85 @@ extern bool LoadResource(UINT resid, CStringA& str, LPCTSTR restype);
CBaseAP::CBaseAP(HWND hWnd, bool bFullscreen, HRESULT& hr, CString& _Error)
: CSubPicAllocatorPresenterImpl(hWnd, hr, &_Error)
- , m_ScreenSize(0, 0)
+ , m_hDWMAPI(nullptr)
+ , m_pDwmIsCompositionEnabled(nullptr)
+ , m_pDwmEnableComposition(nullptr)
+ , m_hD3D9(nullptr)
+ , m_pDirect3DCreate9Ex(nullptr)
+ , m_pOuterEVR(nullptr)
+ , m_SurfaceType(D3DFMT_UNKNOWN)
+ , m_BackbufferType(D3DFMT_UNKNOWN)
+ , m_DisplayType(D3DFMT_UNKNOWN)
+ , m_filter(D3DTEXF_NONE)
+ , m_LastAdapterCheck(0)
+ , m_CurrentAdapter(UINT_ERROR)
, m_bicubicA(0)
, m_nTearingPos(0)
, m_VMR9AlphaBitmapWidthBytes()
+ , m_pD3DXLoadSurfaceFromMemory(nullptr)
+ , m_pD3DXCreateLine(nullptr)
+ , m_pD3DXCreateFont(nullptr)
+ , m_pD3DXCreateSprite(nullptr)
, m_nDXSurface(1)
, m_nVMR9Surfaces(0)
, m_iVMR9Surface(0)
, m_nCurSurface(0)
- , m_bSnapToVSync(false)
- , m_rtTimePerFrame(0)
- , m_bInterlaced(false)
, m_nUsedBuffer(0)
- , m_TextScale(1.0)
- , m_dMainThreadId(0)
- , m_bNeedCheckSample(true)
- , m_bIsFullscreen(bFullscreen)
- , m_uSyncGlitches(0)
- , m_pGenlock(nullptr)
- , m_lAudioLag(0)
- , m_lAudioLagMin(10000)
- , m_lAudioLagMax(-10000)
- , m_pAudioStats(nullptr)
- , m_nNextJitter(0)
- , m_nNextSyncOffset(0)
- , m_llLastSyncTime(0)
+ , m_lNextSampleWait(1)
+ , m_bSnapToVSync(false)
+ , m_uScanLineEnteringPaint(0)
+ , m_llEstVBlankTime(0)
, m_fAvrFps(0.0)
, m_fJitterStdDev(0.0)
- , m_fSyncOffsetStdDev(0.0)
+ , m_fJitterMean(0)
, m_fSyncOffsetAvr(0.0)
- , m_llHysteresis(0)
- , m_dD3DRefreshCycle(0)
+ , m_fSyncOffsetStdDev(0.0)
+ , m_bHighColorResolution(false)
+ , m_bCompositionEnabled(false)
+ , m_bDesktopCompositionDisabled(false)
+ , m_bIsFullscreen(bFullscreen)
+ , m_bNeedCheckSample(true)
+ , m_dMainThreadId(0)
+ , m_ScreenSize(0, 0)
, m_dDetectedScanlineTime(0.0)
+ , m_dD3DRefreshCycle(0)
, m_dEstRefreshCycle(0.0)
, m_dFrameCycle(0.0)
, m_dOptimumDisplayCycle(0.0)
, m_dCycleDifference(1.0)
- , m_llEstVBlankTime(0)
- , m_LastAdapterCheck(0)
- , m_CurrentAdapter(UINT_ERROR)
- , m_FocusThread(nullptr)
- , m_lNextSampleWait(1)
- , m_MinJitter(MAXLONG64)
- , m_MaxJitter(MINLONG64)
- , m_MinSyncOffset(MAXLONG64)
- , m_MaxSyncOffset(MINLONG64)
, m_pcFramesDropped(0)
, m_pcFramesDuplicated(0)
, m_pcFramesDrawn(0)
- , m_uScanLineEnteringPaint(0)
+ , m_nNextJitter(0)
+ , m_nNextSyncOffset(0)
, m_JitterStdDev(0)
- , m_fJitterMean(0)
- , m_bHighColorResolution(false)
- , m_bCompositionEnabled(false)
- , m_bDesktopCompositionDisabled(false)
+ , m_llLastSyncTime(LONGLONG_ERROR)
+ , m_MaxJitter(MINLONG64)
+ , m_MinJitter(MAXLONG64)
+ , m_MaxSyncOffset(MINLONG64)
+ , m_MinSyncOffset(MAXLONG64)
+ , m_uSyncGlitches(0)
, m_llSampleTime(0)
, m_llLastSampleTime(0)
+ , m_llHysteresis(0)
, m_lShiftToNearest(0)
, m_lShiftToNearestPrev(0)
, m_bVideoSlowerThanDisplay(0)
+ , m_rtTimePerFrame(0)
+ , m_bInterlaced(false)
+ , m_TextScale(1.0)
+ , m_pGenlock(nullptr)
+ , m_pAudioStats(nullptr)
+ , m_lAudioLag(0)
+ , m_lAudioLagMin(10000)
+ , m_lAudioLagMax(-10000)
, m_lAudioSlaveMode(0)
- , m_pD3DXLoadSurfaceFromMemory(nullptr)
- , m_pD3DXCreateLine(nullptr)
- , m_pD3DXCreateFont(nullptr)
- , m_pD3DXCreateSprite(nullptr)
- , m_pDwmIsCompositionEnabled(nullptr)
- , m_pDwmEnableComposition(nullptr)
- , m_pDirect3DCreate9Ex(nullptr)
- , m_hDWMAPI(nullptr)
- , m_hD3D9(nullptr)
- , m_pOuterEVR(nullptr)
- , m_SurfaceType(D3DFMT_UNKNOWN)
- , m_BackbufferType(D3DFMT_UNKNOWN)
- , m_DisplayType(D3DFMT_UNKNOWN)
- , m_filter(D3DTEXF_NONE)
+ , m_FocusThread(nullptr)
+ , m_hFocusWindow(nullptr)
{
ZeroMemory(&m_VMR9AlphaBitmap, sizeof(m_VMR9AlphaBitmap));
ZeroMemory(&m_caps, sizeof(m_caps));
- ZeroMemory(&pp, sizeof(pp));
+ ZeroMemory(&m_pp, sizeof(m_pp));
if (FAILED(hr)) {
_Error += _T("ISubPicAllocatorPresenterImpl failed\n");
@@ -211,19 +222,17 @@ CBaseAP::~CBaseAP()
m_pFont = nullptr;
m_pLine = nullptr;
+ m_pSprite = nullptr;
+ m_pOSDTexture = nullptr;
+ m_pOSDSurface = nullptr;
m_pD3DDev = nullptr;
m_pD3DDevEx = nullptr;
m_pPSC.Free();
m_pD3D = nullptr;
m_pD3DEx = nullptr;
- if (m_hDWMAPI) {
- FreeLibrary(m_hDWMAPI);
- m_hDWMAPI = nullptr;
- }
- if (m_hD3D9) {
- FreeLibrary(m_hD3D9);
- m_hD3D9 = nullptr;
- }
+ m_pSubPicQueue = nullptr;
+ m_pAllocator = nullptr;
+
m_pAudioStats = nullptr;
SAFE_DELETE(m_pGenlock);
@@ -234,6 +243,15 @@ CBaseAP::~CBaseAP()
TerminateThread(m_FocusThread->m_hThread, 0xDEAD);
}
}
+
+ if (m_hDWMAPI) {
+ FreeLibrary(m_hDWMAPI);
+ m_hDWMAPI = nullptr;
+ }
+ if (m_hD3D9) {
+ FreeLibrary(m_hD3D9);
+ m_hD3D9 = nullptr;
+ }
}
template<int texcoords>
@@ -381,6 +399,7 @@ void CBaseAP::ResetStats()
m_MaxSyncOffset = MINLONG64;
m_uSyncGlitches = 0;
m_pcFramesDropped = 0;
+ m_llLastSyncTime = LONGLONG_ERROR;
}
bool CBaseAP::SettingsNeedResetDevice()
@@ -459,7 +478,8 @@ HRESULT CBaseAP::CreateDXDevice(CString& _Error)
D3DDISPLAYMODE d3ddm;
ZeroMemory(&d3ddm, sizeof(d3ddm));
- if (FAILED(m_pD3D->GetAdapterDisplayMode(m_CurrentAdapter, &d3ddm))) {
+ if (FAILED(m_pD3D->GetAdapterDisplayMode(m_CurrentAdapter, &d3ddm))
+ || d3ddm.Width <= 0 || d3ddm.Height <= 0) {
_Error += L"Can not retrieve display mode data\n";
return E_UNEXPECTED;
}
@@ -483,17 +503,17 @@ HRESULT CBaseAP::CreateDXDevice(CString& _Error)
}
m_bCompositionEnabled = bCompositionEnabled != 0;
- ZeroMemory(&pp, sizeof(pp));
+ ZeroMemory(&m_pp, sizeof(m_pp));
if (m_bIsFullscreen) { // Exclusive mode fullscreen
- pp.Windowed = FALSE;
- pp.BackBufferWidth = d3ddm.Width;
- pp.BackBufferHeight = d3ddm.Height;
- pp.hDeviceWindow = m_hWnd;
+ m_pp.Windowed = FALSE;
+ m_pp.BackBufferWidth = d3ddm.Width;
+ m_pp.BackBufferHeight = d3ddm.Height;
+ m_pp.hDeviceWindow = m_hWnd;
TRACE(_T("Wnd in CreateDXDevice: %p\n"), m_hWnd);
- pp.BackBufferCount = 3;
- pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- pp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
- pp.Flags = D3DPRESENTFLAG_VIDEO;
+ m_pp.BackBufferCount = 3;
+ m_pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
+ m_pp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
+ m_pp.Flags = D3DPRESENTFLAG_VIDEO;
m_bHighColorResolution = r.m_AdvRendSets.bEVRHighColorResolution;
if (m_bHighColorResolution) {
if (FAILED(m_pD3D->CheckDeviceType(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3ddm.Format, D3DFMT_A2R10G10B10, false))) {
@@ -503,73 +523,67 @@ HRESULT CBaseAP::CreateDXDevice(CString& _Error)
}
if (m_bHighColorResolution) {
- pp.BackBufferFormat = D3DFMT_A2R10G10B10;
+ m_pp.BackBufferFormat = D3DFMT_A2R10G10B10;
} else {
- pp.BackBufferFormat = d3ddm.Format;
+ m_pp.BackBufferFormat = d3ddm.Format;
}
if (!m_FocusThread) {
m_FocusThread = (CFocusThread*)AfxBeginThread(RUNTIME_CLASS(CFocusThread), 0, 0, 0);
}
+ HWND hFocusWindow = m_FocusThread->GetFocusWindow();
+ bTryToReset &= m_hFocusWindow == hFocusWindow;
+ m_hFocusWindow = hFocusWindow;
+
if (m_pD3DEx) {
D3DDISPLAYMODEEX DisplayMode;
ZeroMemory(&DisplayMode, sizeof(DisplayMode));
DisplayMode.Size = sizeof(DisplayMode);
m_pD3DEx->GetAdapterDisplayModeEx(m_CurrentAdapter, &DisplayMode, nullptr);
- DisplayMode.Format = pp.BackBufferFormat;
- pp.FullScreen_RefreshRateInHz = DisplayMode.RefreshRate;
+ DisplayMode.Format = m_pp.BackBufferFormat;
+ m_pp.FullScreen_RefreshRateInHz = DisplayMode.RefreshRate;
+
+ bTryToReset = bTryToReset && m_pD3DDevEx && SUCCEEDED(hr = m_pD3DDevEx->ResetEx(&m_pp, &DisplayMode));
- if (bTryToReset) {
- if (!m_pD3DDevEx || FAILED(hr = m_pD3DDevEx->ResetEx(&pp, &DisplayMode))) {
- bTryToReset = false;
- m_pD3DDev = nullptr;
- m_pD3DDevEx = nullptr;
- }
- }
if (!bTryToReset) {
- if (FAILED(hr = m_pD3DEx->CreateDeviceEx(m_CurrentAdapter, D3DDEVTYPE_HAL, m_FocusThread->GetFocusWindow(),
- D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED | D3DCREATE_ENABLE_PRESENTSTATS | D3DCREATE_NOWINDOWCHANGES,
- &pp, &DisplayMode, &m_pD3DDevEx))) {
- _Error += GetWindowsErrorMessage(hr, m_hD3D9);
- return hr;
- }
+ m_pD3DDev = nullptr;
+ m_pD3DDevEx = nullptr;
+ hr = m_pD3DEx->CreateDeviceEx(m_CurrentAdapter, D3DDEVTYPE_HAL, m_FocusThread->GetFocusWindow(),
+ D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED | D3DCREATE_ENABLE_PRESENTSTATS | D3DCREATE_NOWINDOWCHANGES,
+ &m_pp, &DisplayMode, &m_pD3DDevEx);
}
if (m_pD3DDevEx) {
m_pD3DDev = m_pD3DDevEx;
- m_BackbufferType = pp.BackBufferFormat;
+ m_BackbufferType = m_pp.BackBufferFormat;
m_DisplayType = DisplayMode.Format;
}
} else {
- if (bTryToReset) {
- if (!m_pD3DDev || FAILED(hr = m_pD3DDev->Reset(&pp))) {
- bTryToReset = false;
- }
- }
+ bTryToReset = bTryToReset && m_pD3DDev && SUCCEEDED(hr = m_pD3DDev->Reset(&m_pp));
+
if (!bTryToReset) {
- if (FAILED(hr = m_pD3D->CreateDevice(m_CurrentAdapter, D3DDEVTYPE_HAL, m_FocusThread->GetFocusWindow(),
- D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED | D3DCREATE_NOWINDOWCHANGES,
- &pp, &m_pD3DDev))) {
- _Error += GetWindowsErrorMessage(hr, m_hD3D9);
- return hr;
- }
+ m_pD3DDev = nullptr;
+ m_pD3DDevEx = nullptr;
+ hr = m_pD3D->CreateDevice(m_CurrentAdapter, D3DDEVTYPE_HAL, m_FocusThread->GetFocusWindow(),
+ D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED | D3DCREATE_NOWINDOWCHANGES,
+ &m_pp, &m_pD3DDev);
}
TRACE(_T("Created full-screen device\n"));
if (m_pD3DDev) {
- m_BackbufferType = pp.BackBufferFormat;
+ m_BackbufferType = m_pp.BackBufferFormat;
m_DisplayType = d3ddm.Format;
}
}
} else { // Windowed
- pp.Windowed = TRUE;
- pp.hDeviceWindow = m_hWnd;
- pp.SwapEffect = D3DSWAPEFFECT_COPY;
- pp.Flags = D3DPRESENTFLAG_VIDEO;
- pp.BackBufferCount = 1;
- pp.BackBufferWidth = szDesktopSize.cx;
- pp.BackBufferHeight = szDesktopSize.cy;
+ m_pp.Windowed = TRUE;
+ m_pp.hDeviceWindow = m_hWnd;
+ m_pp.SwapEffect = D3DSWAPEFFECT_COPY;
+ m_pp.Flags = D3DPRESENTFLAG_VIDEO;
+ m_pp.BackBufferCount = 1;
+ m_pp.BackBufferWidth = szDesktopSize.cx;
+ m_pp.BackBufferHeight = szDesktopSize.cy;
m_BackbufferType = d3ddm.Format;
m_DisplayType = d3ddm.Format;
m_bHighColorResolution = r.m_AdvRendSets.bEVRHighColorResolution;
@@ -582,30 +596,27 @@ HRESULT CBaseAP::CreateDXDevice(CString& _Error)
if (m_bHighColorResolution) {
m_BackbufferType = D3DFMT_A2R10G10B10;
- pp.BackBufferFormat = D3DFMT_A2R10G10B10;
+ m_pp.BackBufferFormat = D3DFMT_A2R10G10B10;
}
if (bCompositionEnabled) {
// Desktop composition presents the whole desktop
- pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
+ m_pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
} else {
- pp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
+ m_pp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
}
+
+ bTryToReset &= m_hFocusWindow == m_hWnd;
+ m_hFocusWindow = m_hWnd;
+
if (m_pD3DEx) {
- if (bTryToReset) {
- if (!m_pD3DDevEx || FAILED(hr = m_pD3DDevEx->ResetEx(&pp, nullptr))) {
- bTryToReset = false;
- m_pD3DDev = nullptr;
- m_pD3DDevEx = nullptr;
- }
- }
+ bTryToReset = bTryToReset && m_pD3DDevEx && SUCCEEDED(hr = m_pD3DDevEx->ResetEx(&m_pp, nullptr));
+
if (!bTryToReset) {
- hr = m_pD3DEx->CreateDeviceEx(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
+ m_pD3DDev = nullptr;
+ m_pD3DDevEx = nullptr;
+ hr = m_pD3DEx->CreateDeviceEx(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hFocusWindow,
D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED | D3DCREATE_ENABLE_PRESENTSTATS,
- &pp, nullptr, &m_pD3DDevEx);
- if (FAILED(hr) && hr != D3DERR_DEVICELOST && hr != D3DERR_DEVICENOTRESET) {
- _Error += GetWindowsErrorMessage(hr, m_hD3D9);
- return hr;
- }
+ &m_pp, nullptr, &m_pD3DDevEx);
}
if (m_pD3DDevEx) {
@@ -613,37 +624,38 @@ HRESULT CBaseAP::CreateDXDevice(CString& _Error)
}
} else {
if (bTryToReset) {
- if (!m_pD3DDev || FAILED(hr = m_pD3DDev->Reset(&pp))) {
+ if (!m_pD3DDev || FAILED(hr = m_pD3DDev->Reset(&m_pp))) {
bTryToReset = false;
}
}
if (!bTryToReset) {
- hr = m_pD3D->CreateDevice(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hWnd,
+ hr = m_pD3D->CreateDevice(m_CurrentAdapter, D3DDEVTYPE_HAL, m_hFocusWindow,
D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE | D3DCREATE_MULTITHREADED,
- &pp, &m_pD3DDev);
- if (FAILED(hr) && hr != D3DERR_DEVICELOST && hr != D3DERR_DEVICENOTRESET) {
- _Error += GetWindowsErrorMessage(hr, m_hD3D9);
- return hr;
- }
+ &m_pp, &m_pD3DDev);
}
TRACE(_T("Created windowed device\n"));
}
}
- while (hr == D3DERR_DEVICELOST) {
- TRACE(_T("D3DERR_DEVICELOST. Trying to Reset.\n"));
- hr = m_pD3DDev->TestCooperativeLevel();
- }
- if (hr == D3DERR_DEVICENOTRESET) {
- TRACE(_T("D3DERR_DEVICENOTRESET\n"));
- hr = m_pD3DDev->Reset(&pp);
+ if (m_pD3DDev) {
+ while (hr == D3DERR_DEVICELOST) {
+ TRACE(_T("D3DERR_DEVICELOST. Trying to Reset.\n"));
+ hr = m_pD3DDev->TestCooperativeLevel();
+ }
+ if (hr == D3DERR_DEVICENOTRESET) {
+ TRACE(_T("D3DERR_DEVICENOTRESET\n"));
+ hr = m_pD3DDev->Reset(&m_pp);
+ }
+
+ if (m_pD3DDevEx) {
+ m_pD3DDevEx->SetGPUThreadPriority(7);
+ }
}
- TRACE(_T("CreateDevice: %ld\n"), (LONG)hr);
- ASSERT(SUCCEEDED(hr));
+ if (FAILED(hr)) {
+ _Error.AppendFormat(_T("CreateDevice failed: %s\n"), GetWindowsErrorMessage(hr, m_hD3D9));
- if (m_pD3DDevEx) {
- m_pD3DDevEx->SetGPUThreadPriority(7);
+ return hr;
}
m_pPSC.Attach(DEBUG_NEW CPixelShaderCompiler(m_pD3DDev, true));
@@ -688,20 +700,6 @@ HRESULT CBaseAP::CreateDXDevice(CString& _Error)
m_pSubPicQueue->SetSubPicProvider(pSubPicProvider);
}
- if (m_pD3DXCreateFont) {
- LONG MinSize = 1600;
- LONG CurrentSize = std::min(m_ScreenSize.cx, MinSize);
- double Scale = double(CurrentSize) / double(MinSize);
- m_TextScale = Scale;
- m_pD3DXCreateFont(m_pD3DDev, (int)(-24.0 * Scale), (UINT)(-11.0 * Scale), CurrentSize < 800 ? FW_NORMAL : FW_BOLD, 0, FALSE,
- DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FIXED_PITCH | FF_DONTCARE, L"Lucida Console", &m_pFont);
- }
- if (m_pD3DXCreateSprite) {
- m_pD3DXCreateSprite(m_pD3DDev, &m_pSprite);
- }
- if (m_pD3DXCreateLine) {
- m_pD3DXCreateLine(m_pD3DDev, &m_pLine);
- }
m_LastAdapterCheck = GetRenderersData()->GetPerfCounter();
return S_OK;
}
@@ -720,14 +718,13 @@ HRESULT CBaseAP::ResetDXDevice(CString& _Error)
CComPtr<IEnumPins> rendererInputEnum;
std::vector<CComPtr<IPin>> decoderOutput;
std::vector<CComPtr<IPin>> rendererInput;
- FILTER_INFO filterInfo;
- ZeroMemory(&filterInfo, sizeof(filterInfo));
+ CFilterInfo filterInfo;
- bool disconnected = FALSE;
+ bool disconnected = false;
// Disconnect all pins to release video memory resources
if (m_pD3DDev) {
- m_pOuterEVR->QueryFilterInfo(&filterInfo); // This addref's the pGraph member
+ m_pOuterEVR->QueryFilterInfo(&filterInfo);
if (SUCCEEDED(m_pOuterEVR->EnumPins(&rendererInputEnum))) {
CComPtr<IPin> input;
CComPtr<IPin> output;
@@ -744,13 +741,15 @@ HRESULT CBaseAP::ResetDXDevice(CString& _Error)
} else {
return hr;
}
- for (DWORD i = 0; i < decoderOutput.size(); i++) {
- TRACE(_T("Disconnecting pin\n"));
- filterInfo.pGraph->Disconnect(decoderOutput.at(i).p);
- filterInfo.pGraph->Disconnect(rendererInput.at(i).p);
- TRACE(_T("Pin disconnected\n"));
+ if (filterInfo.pGraph) {
+ for (size_t i = 0; i < decoderOutput.size(); i++) {
+ TRACE(_T("Disconnecting pin\n"));
+ filterInfo.pGraph->Disconnect(decoderOutput[i].p);
+ filterInfo.pGraph->Disconnect(rendererInput[i].p);
+ TRACE(_T("Pin disconnected\n"));
+ }
+ disconnected = true;
}
- disconnected = true;
}
// Release more resources
@@ -778,7 +777,8 @@ HRESULT CBaseAP::ResetDXDevice(CString& _Error)
D3DDISPLAYMODE d3ddm;
ZeroMemory(&d3ddm, sizeof(d3ddm));
- if (FAILED(m_pD3D->GetAdapterDisplayMode(GetAdapter(m_pD3D, m_hWnd), &d3ddm))) {
+ if (FAILED(m_pD3D->GetAdapterDisplayMode(GetAdapter(m_pD3D, m_hWnd), &d3ddm))
+ || d3ddm.Width <= 0 || d3ddm.Height <= 0) {
_Error += L"Can not retrieve display mode data\n";
return E_UNEXPECTED;
}
@@ -789,8 +789,7 @@ HRESULT CBaseAP::ResetDXDevice(CString& _Error)
m_pGenlock->SetDisplayResolution(d3ddm.Width, d3ddm.Height);
CSize szDesktopSize(GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN));
- D3DPRESENT_PARAMETERS pp;
- ZeroMemory(&pp, sizeof(pp));
+ ZeroMemory(&m_pp, sizeof(m_pp));
BOOL bCompositionEnabled = false;
if (m_pDwmIsCompositionEnabled) {
@@ -800,14 +799,14 @@ HRESULT CBaseAP::ResetDXDevice(CString& _Error)
m_bHighColorResolution = r.m_AdvRendSets.bEVRHighColorResolution;
if (m_bIsFullscreen) { // Exclusive mode fullscreen
- pp.BackBufferWidth = d3ddm.Width;
- pp.BackBufferHeight = d3ddm.Height;
+ m_pp.BackBufferWidth = d3ddm.Width;
+ m_pp.BackBufferHeight = d3ddm.Height;
if (m_bHighColorResolution) {
- pp.BackBufferFormat = D3DFMT_A2R10G10B10;
+ m_pp.BackBufferFormat = D3DFMT_A2R10G10B10;
} else {
- pp.BackBufferFormat = d3ddm.Format;
+ m_pp.BackBufferFormat = d3ddm.Format;
}
- if (FAILED(m_pD3DEx->CheckDeviceType(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, pp.BackBufferFormat, pp.BackBufferFormat, false))) {
+ if (FAILED(m_pD3DEx->CheckDeviceType(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_pp.BackBufferFormat, m_pp.BackBufferFormat, false))) {
_Error += L"10 bit RGB is not supported by this graphics device in exclusive mode fullscreen.\n";
return hr;
}
@@ -817,14 +816,14 @@ HRESULT CBaseAP::ResetDXDevice(CString& _Error)
DisplayMode.Size = sizeof(DisplayMode);
if (m_pD3DDevEx) {
m_pD3DEx->GetAdapterDisplayModeEx(GetAdapter(m_pD3DEx, m_hWnd), &DisplayMode, nullptr);
- DisplayMode.Format = pp.BackBufferFormat;
- pp.FullScreen_RefreshRateInHz = DisplayMode.RefreshRate;
- if (FAILED(m_pD3DDevEx->Reset(&pp))) {
+ DisplayMode.Format = m_pp.BackBufferFormat;
+ m_pp.FullScreen_RefreshRateInHz = DisplayMode.RefreshRate;
+ if (FAILED(m_pD3DDevEx->Reset(&m_pp))) {
_Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
} else if (m_pD3DDev) {
- if (FAILED(m_pD3DDev->Reset(&pp))) {
+ if (FAILED(m_pD3DDev->Reset(&m_pp))) {
_Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
}
@@ -832,33 +831,33 @@ HRESULT CBaseAP::ResetDXDevice(CString& _Error)
_Error += L"No device.\n";
return hr;
}
- m_BackbufferType = pp.BackBufferFormat;
+ m_BackbufferType = m_pp.BackBufferFormat;
m_DisplayType = d3ddm.Format;
} else { // Windowed
- pp.BackBufferWidth = szDesktopSize.cx;
- pp.BackBufferHeight = szDesktopSize.cy;
+ m_pp.BackBufferWidth = szDesktopSize.cx;
+ m_pp.BackBufferHeight = szDesktopSize.cy;
m_BackbufferType = d3ddm.Format;
m_DisplayType = d3ddm.Format;
if (m_bHighColorResolution) {
m_BackbufferType = D3DFMT_A2R10G10B10;
- pp.BackBufferFormat = D3DFMT_A2R10G10B10;
+ m_pp.BackBufferFormat = D3DFMT_A2R10G10B10;
}
- if (FAILED(m_pD3DEx->CheckDeviceType(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, pp.BackBufferFormat, pp.BackBufferFormat, false))) {
+ if (FAILED(m_pD3DEx->CheckDeviceType(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_pp.BackBufferFormat, m_pp.BackBufferFormat, false))) {
_Error += L"10 bit RGB is not supported by this graphics device in windowed mode.\n";
return hr;
}
if (bCompositionEnabled) {
// Desktop composition presents the whole desktop
- pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
+ m_pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
} else {
- pp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
+ m_pp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
}
if (m_pD3DDevEx)
- if (FAILED(m_pD3DDevEx->Reset(&pp))) {
+ if (FAILED(m_pD3DDevEx->Reset(&m_pp))) {
_Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
} else if (m_pD3DDev)
- if (FAILED(m_pD3DDevEx->Reset(&pp))) {
+ if (FAILED(m_pD3DDevEx->Reset(&m_pp))) {
_Error += GetWindowsErrorMessage(hr, m_hD3D9);
return hr;
} else {
@@ -868,15 +867,11 @@ HRESULT CBaseAP::ResetDXDevice(CString& _Error)
}
if (disconnected) {
- for (DWORD i = 0; i < decoderOutput.size(); i++) {
- if (FAILED(filterInfo.pGraph->ConnectDirect(decoderOutput.at(i).p, rendererInput.at(i).p, nullptr))) {
+ for (size_t i = 0; i < decoderOutput.size(); i++) {
+ if (FAILED(filterInfo.pGraph->ConnectDirect(decoderOutput[i].p, rendererInput[i].p, nullptr))) {
return hr;
}
}
-
- if (filterInfo.pGraph != nullptr) {
- filterInfo.pGraph->Release();
- }
}
m_pPSC.Attach(DEBUG_NEW CPixelShaderCompiler(m_pD3DDev, true));
@@ -922,22 +917,9 @@ HRESULT CBaseAP::ResetDXDevice(CString& _Error)
}
m_pFont = nullptr;
- if (m_pD3DXCreateFont) {
- LONG MinSize = 1600;
- LONG CurrentSize = std::min(m_ScreenSize.cx, MinSize);
- double Scale = double(CurrentSize) / double(MinSize);
- m_TextScale = Scale;
- m_pD3DXCreateFont(m_pD3DDev, (int)(-24.0 * Scale), (UINT)(-11.0 * Scale), CurrentSize < 800 ? FW_NORMAL : FW_BOLD, 0, FALSE,
- DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FIXED_PITCH | FF_DONTCARE, L"Lucida Console", &m_pFont);
- }
m_pSprite = nullptr;
- if (m_pD3DXCreateSprite) {
- m_pD3DXCreateSprite(m_pD3DDev, &m_pSprite);
- }
m_pLine = nullptr;
- if (m_pD3DXCreateLine) {
- m_pD3DXCreateLine(m_pD3DDev, &m_pLine);
- }
+
return S_OK;
}
@@ -946,6 +928,8 @@ HRESULT CBaseAP::AllocSurfaces(D3DFORMAT Format)
CAutoLock cAutoLock(this);
CAutoLock cRenderLock(&m_allocatorLock);
+ CheckPointer(m_pD3DDev, E_POINTER);
+
const CRenderersSettings& r = GetRenderersSettings();
for (int i = 0; i < m_nDXSurface + 2; i++) {
@@ -1468,6 +1452,10 @@ HRESULT CBaseAP::AlphaBlt(RECT* pSrc, const RECT* pDst, IDirect3DTexture9* pText
// Update the array m_pllJitter with a new vsync period. Calculate min, max and stddev.
void CBaseAP::SyncStats(LONGLONG syncTime)
{
+ if (m_llLastSyncTime == LONGLONG_ERROR) {
+ m_llLastSyncTime = syncTime;
+ }
+
m_nNextJitter = (m_nNextJitter + 1) % NB_JITTER;
LONGLONG jitter = syncTime - m_llLastSyncTime;
m_pllJitter[m_nNextJitter] = jitter;
@@ -1723,7 +1711,7 @@ STDMETHODIMP_(bool) CBaseAP::Paint(bool bAll)
hr = m_pD3DDev->SetPixelShaderConstantF(0, (float*)fConstData, _countof(fConstData));
- int src = 1, dst = 0;
+ int srcTexture = 1, dstTexture = 0;
POSITION pos = m_pPixelShadersScreenSpace.GetHeadPosition();
while (pos) {
@@ -1731,7 +1719,7 @@ STDMETHODIMP_(bool) CBaseAP::Paint(bool bAll)
m_pD3DDev->SetRenderTarget(0, pBackBuffer);
} else {
CComPtr<IDirect3DSurface9> pRT;
- hr = m_pScreenSizeTemporaryTexture[dst]->GetSurfaceLevel(0, &pRT);
+ hr = m_pScreenSizeTemporaryTexture[dstTexture]->GetSurfaceLevel(0, &pRT);
m_pD3DDev->SetRenderTarget(0, pRT);
}
@@ -1740,9 +1728,9 @@ STDMETHODIMP_(bool) CBaseAP::Paint(bool bAll)
Shader.Compile(m_pPSC);
}
hr = m_pD3DDev->SetPixelShader(Shader.m_pPixelShader);
- TextureCopy(m_pScreenSizeTemporaryTexture[src]);
+ TextureCopy(m_pScreenSizeTemporaryTexture[srcTexture]);
- std::swap(src, dst);
+ std::swap(srcTexture, dstTexture);
}
hr = m_pD3DDev->SetPixelShader(nullptr);
@@ -1949,70 +1937,97 @@ STDMETHODIMP_(bool) CBaseAP::DisplayChange()
return true;
}
-void CBaseAP::DrawText(const RECT& rc, const CString& strText, int _Priority)
+void CBaseAP::InitStats()
{
- if (_Priority < 1) {
- return;
+ ASSERT(m_pD3DDev);
+ static LONG currentHeight = 0;
+ int newHeight = lround(FONT_HEIGHT * (double(m_windowRect.Width()) / REFERENCE_WIDTH));
+
+ if (m_pD3DXCreateFont && (!m_pFont || currentHeight != newHeight)) {
+ m_pFont = nullptr;
+ if (newHeight <= 0) {
+ ASSERT(FALSE);
+ }
+ m_pD3DXCreateFont(m_pD3DDev, newHeight, 0, newHeight < BOLD_THRESHOLD ? FW_NORMAL : FW_BOLD,
+ 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
+ SysVersion::IsXPOrLater() ? CLEARTYPE_NATURAL_QUALITY : ANTIALIASED_QUALITY,
+ FIXED_PITCH | FF_DONTCARE, L"Lucida Console", &m_pFont);
+ currentHeight = newHeight;
}
- D3DXCOLOR Color1(1.0f, 0.2f, 0.2f, 1.0f);
- D3DXCOLOR Color0(0.0f, 0.0f, 0.0f, 1.0f);
- RECT Rect1 = rc;
- RECT Rect2 = rc;
- OffsetRect(&Rect2, 2, 2);
+ if (m_pD3DXCreateSprite && !m_pSprite) {
+ m_pD3DXCreateSprite(m_pD3DDev, &m_pSprite);
+ }
- // Draw shadow
- m_pFont->DrawText(m_pSprite, strText, -1, &Rect2, DT_NOCLIP, Color0);
- // Draw text
- m_pFont->DrawText(m_pSprite, strText, -1, &Rect1, DT_NOCLIP, Color1);
+ if (m_pD3DXCreateLine && !m_pLine) {
+ m_pD3DXCreateLine(m_pD3DDev, &m_pLine);
+ }
}
void CBaseAP::DrawStats()
{
- const CRenderersSettings& r = GetRenderersSettings();
const CRenderersData* rd = GetRenderersData();
- LONGLONG llMaxJitter = m_MaxJitter;
- LONGLONG llMinJitter = m_MinJitter;
+ InitStats();
+ const float textScale = float(m_windowRect.Width()) / REFERENCE_WIDTH;
+ const int lineHeight = lround((FONT_HEIGHT + TEXT_PADDING) * textScale);
- RECT rc = {20, 20, 520, 520 };
// pApp->m_iDisplayStats = 1 for full stats, 2 for little less, 3 for basic, 0 for no stats
if (m_pFont && m_pSprite) {
+ auto drawText = [&](CRect & rc, const CString & strText) {
+ D3DXCOLOR Color1(1.0f, 0.2f, 0.2f, 1.0f);
+ D3DXCOLOR Color0(0.0f, 0.0f, 0.0f, 1.0f);
+
+ RECT shadowRect = rc;
+ OffsetRect(&shadowRect, 2, 2);
+
+ // Draw shadow
+ m_pFont->DrawText(m_pSprite, strText, -1, &shadowRect, DT_NOCLIP, Color0);
+ // Draw text
+ m_pFont->DrawText(m_pSprite, strText, -1, rc, DT_NOCLIP, Color1);
+ rc.OffsetRect(0, lineHeight);
+ };
+
+ const CRenderersSettings& r = GetRenderersSettings();
+ LONGLONG llMaxJitter = m_MaxJitter;
+ LONGLONG llMinJitter = m_MinJitter;
+ CRect rc(lineHeight, lineHeight, 0, 0);
+
m_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
CString strText;
- int TextHeight = (int)(25.0 * m_TextScale + 0.5);
- strText.Format(L"Frames drawn from stream start: %u | Sample time stamp: %ld ms", m_pcFramesDrawn, (LONG)(m_llSampleTime / 10000));
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Frames drawn from stream start: %u | Sample time stamp: %ld ms"),
+ m_pcFramesDrawn, (LONG)(m_llSampleTime / 10000));
+ drawText(rc, strText);
if (rd->m_iDisplayStats == 1) {
- strText.Format(L"Frame cycle : %.3f ms [%.3f ms, %.3f ms] Actual %+5.3f ms [%+.3f ms, %+.3f ms]", m_dFrameCycle, m_pGenlock->minFrameCycle, m_pGenlock->maxFrameCycle, m_fJitterMean / 10000.0, (double(llMinJitter) / 10000.0), (double(llMaxJitter) / 10000.0));
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Frame cycle : %.3f ms [%.3f ms, %.3f ms] Actual %+5.3f ms [%+.3f ms, %+.3f ms]"),
+ m_dFrameCycle, m_pGenlock->minFrameCycle, m_pGenlock->maxFrameCycle,
+ m_fJitterMean / 10000.0, (double(llMinJitter) / 10000.0),
+ (double(llMaxJitter) / 10000.0));
+ drawText(rc, strText);
- strText.Format(L"Display cycle: Measured closest match %.3f ms Measured base %.3f ms", m_dOptimumDisplayCycle, m_dEstRefreshCycle);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Display cycle: Measured closest match %.3f ms Measured base %.3f ms"),
+ m_dOptimumDisplayCycle, m_dEstRefreshCycle);
+ drawText(rc, strText);
- strText.Format(L"Frame rate : %.3f fps Actual frame rate: %.3f fps", 1000.0 / m_dFrameCycle, 10000000.0 / m_fJitterMean);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Frame rate : %.3f fps Actual frame rate: %.3f fps"),
+ 1000.0 / m_dFrameCycle, 10000000.0 / m_fJitterMean);
+ drawText(rc, strText);
- strText.Format(L"Windows : Display cycle %.3f ms Display refresh rate %u Hz", m_dD3DRefreshCycle, m_refreshRate);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Windows : Display cycle %.3f ms Display refresh rate %u Hz"),
+ m_dD3DRefreshCycle, m_refreshRate);
+ drawText(rc, strText);
if (m_pGenlock->powerstripTimingExists) {
- strText.Format(L"Powerstrip : Display cycle %.3f ms Display refresh rate %.3f Hz", 1000.0 / m_pGenlock->curDisplayFreq, m_pGenlock->curDisplayFreq);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Powerstrip : Display cycle %.3f ms Display refresh rate %.3f Hz"),
+ 1000.0 / m_pGenlock->curDisplayFreq, m_pGenlock->curDisplayFreq);
+ drawText(rc, strText);
}
if ((m_caps.Caps & D3DCAPS_READ_SCANLINE) == 0) {
- strText = L"Scan line err: Graphics device does not support scan line access. No sync is possible";
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText = _T("Scan line err: Graphics device does not support scan line access. No sync is possible");
+ drawText(rc, strText);
}
#ifdef _DEBUG
@@ -2024,175 +2039,184 @@ void CBaseAP::DrawStats()
D3DPRESENTSTATS stats;
hr = pSCEx->GetPresentStats(&stats);
if (SUCCEEDED(hr)) {
- strText = L"Graphics device present stats:";
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText = _T("Graphics device present stats:");
+ drawText(rc, strText);
- strText.Format(L" PresentCount %u PresentRefreshCount %u SyncRefreshCount %u",
+ strText.Format(_T(" PresentCount %u PresentRefreshCount %u SyncRefreshCount %u"),
stats.PresentCount, stats.PresentRefreshCount, stats.SyncRefreshCount);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
LARGE_INTEGER Freq;
QueryPerformanceFrequency(&Freq);
Freq.QuadPart /= 1000;
- strText.Format(L" SyncQPCTime %dms SyncGPUTime %dms",
- stats.SyncQPCTime.QuadPart / Freq.QuadPart, stats.SyncGPUTime.QuadPart / Freq.QuadPart);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T(" SyncQPCTime %dms SyncGPUTime %dms"),
+ stats.SyncQPCTime.QuadPart / Freq.QuadPart,
+ stats.SyncGPUTime.QuadPart / Freq.QuadPart);
+ drawText(rc, strText);
} else {
strText = L"Graphics device does not support present stats";
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
}
}
}
#endif
- strText.Format(L"Video size : %ld x %ld (AR = %ld : %ld) Display resolution %ld x %ld ", m_nativeVideoSize.cx, m_nativeVideoSize.cy, m_aspectRatio.cx, m_aspectRatio.cy, m_ScreenSize.cx, m_ScreenSize.cy);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Video size : %ld x %ld (AR = %ld : %ld) Display resolution %ld x %ld "),
+ m_nativeVideoSize.cx, m_nativeVideoSize.cy, m_aspectRatio.cx, m_aspectRatio.cy,
+ m_ScreenSize.cx, m_ScreenSize.cy);
+ drawText(rc, strText);
if (r.m_AdvRendSets.bSynchronizeDisplay || r.m_AdvRendSets.bSynchronizeVideo) {
if (r.m_AdvRendSets.bSynchronizeDisplay && !m_pGenlock->PowerstripRunning()) {
- strText = L"Sync error : PowerStrip is not running. No display sync is possible.";
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText = _T("Sync error : PowerStrip is not running. No display sync is possible.");
+ drawText(rc, strText);
} else {
- strText.Format(L"Sync adjust : %d | # of adjustments: %u", m_pGenlock->adjDelta, (m_pGenlock->clockAdjustmentsMade + m_pGenlock->displayAdjustmentsMade) / 2);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Sync adjust : %d | # of adjustments: %u"),
+ m_pGenlock->adjDelta,
+ (m_pGenlock->clockAdjustmentsMade + m_pGenlock->displayAdjustmentsMade) / 2);
+ drawText(rc, strText);
}
}
}
- strText.Format(L"Sync offset : Average %3.1f ms [%.1f ms, %.1f ms] Target %3.1f ms", m_pGenlock->syncOffsetAvg, m_pGenlock->minSyncOffset, m_pGenlock->maxSyncOffset, r.m_AdvRendSets.fTargetSyncOffset);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Sync offset : Average %3.1f ms [%.1f ms, %.1f ms] Target %3.1f ms"),
+ m_pGenlock->syncOffsetAvg, m_pGenlock->minSyncOffset,
+ m_pGenlock->maxSyncOffset, r.m_AdvRendSets.fTargetSyncOffset);
+ drawText(rc, strText);
- strText.Format(L"Sync status : glitches %u, display-frame cycle mismatch: %7.3f %%, dropped frames %u", m_uSyncGlitches, 100 * m_dCycleDifference, m_pcFramesDropped);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Sync status : glitches %u, display-frame cycle mismatch: %7.3f %%, dropped frames %u"),
+ m_uSyncGlitches, 100 * m_dCycleDifference, m_pcFramesDropped);
+ drawText(rc, strText);
if (rd->m_iDisplayStats == 1) {
if (m_pAudioStats && r.m_AdvRendSets.bSynchronizeVideo) {
- strText.Format(L"Audio lag : %3lu ms [%ld ms, %ld ms] | %s", m_lAudioLag, m_lAudioLagMin, m_lAudioLagMax, (m_lAudioSlaveMode == 4) ? _T("Audio renderer is matching rate (for analog sound output)") : _T("Audio renderer is not matching rate"));
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Audio lag : %3lu ms [%ld ms, %ld ms] | %s"),
+ m_lAudioLag, m_lAudioLagMin, m_lAudioLagMax,
+ (m_lAudioSlaveMode == 4) ?
+ _T("Audio renderer is matching rate (for analog sound output)") :
+ _T("Audio renderer is not matching rate"));
+ drawText(rc, strText);
}
- strText.Format(L"Sample time : waiting %3ld ms", m_lNextSampleWait);
+ strText.Format(_T("Sample time : waiting %3ld ms"), m_lNextSampleWait);
if (r.m_AdvRendSets.bSynchronizeNearest) {
CString temp;
- temp.Format(L" paint time correction: %3ld ms Hysteresis: %I64d", m_lShiftToNearest, m_llHysteresis / 10000);
+ temp.Format(_T(" paint time correction: %3ld ms Hysteresis: %I64d"),
+ m_lShiftToNearest, m_llHysteresis / 10000);
strText += temp;
}
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
- strText.Format(L"Buffering : Buffered %3ld Free %3d Current Surface %3d", m_nUsedBuffer, m_nDXSurface - m_nUsedBuffer, m_nCurSurface);
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ strText.Format(_T("Buffering : Buffered %3ld Free %3ld Current Surface %3d"),
+ m_nUsedBuffer, m_nDXSurface - m_nUsedBuffer, m_nCurSurface);
+ drawText(rc, strText);
- strText = L"Settings : ";
+ strText = _T("Settings : ");
if (m_bIsFullscreen) {
- strText += "D3DFS ";
+ strText += _T("D3DFS ");
}
if (r.m_AdvRendSets.bVMRDisableDesktopComposition) {
- strText += "DisDC ";
+ strText += _T("DisDC ");
}
if (r.m_AdvRendSets.bSynchronizeVideo) {
- strText += "SyncVideo ";
+ strText += _T("SyncVideo ");
}
if (r.m_AdvRendSets.bSynchronizeDisplay) {
- strText += "SyncDisplay ";
+ strText += _T("SyncDisplay ");
}
if (r.m_AdvRendSets.bSynchronizeNearest) {
- strText += "SyncNearest ";
+ strText += _T("SyncNearest ");
}
if (m_bHighColorResolution) {
- strText += "10 bit ";
+ strText += _T("10 bit ");
}
if (r.m_AdvRendSets.iEVROutputRange == 0) {
- strText += "0-255 ";
+ strText += _T("0-255 ");
} else if (r.m_AdvRendSets.iEVROutputRange == 1) {
- strText += "16-235 ";
+ strText += _T("16-235 ");
}
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
-
- DrawText(rc, rd->m_strDXVAInfo, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
+ drawText(rc, rd->m_strDXVAInfo);
strText.Format(L"DirectX SDK : %u", rd->GetDXSdkRelease());
- DrawText(rc, strText, 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, strText);
for (int i = 0; i < 6; i++) {
if (m_strStatsMsg[i][0]) {
- DrawText(rc, m_strStatsMsg[i], 1);
- OffsetRect(&rc, 0, TextHeight);
+ drawText(rc, m_strStatsMsg[i]);
}
}
}
- OffsetRect(&rc, 0, TextHeight); // Extra "line feed"
m_pSprite->End();
}
if (m_pLine && (rd->m_iDisplayStats < 3)) {
- D3DXVECTOR2 Points[NB_JITTER];
- int nIndex;
-
- int DrawWidth = 625;
- int DrawHeight = 250;
- int Alpha = 80;
- int StartX = m_windowRect.Width() - (DrawWidth + 20);
- int StartY = m_windowRect.Height() - (DrawHeight + 20);
-
- DrawRect(RGB(0, 0, 0), Alpha, CRect(StartX, StartY, StartX + DrawWidth, StartY + DrawHeight));
- m_pLine->SetWidth(2.5);
- m_pLine->SetAntialias(1);
+ D3DXVECTOR2 points[NB_JITTER];
+ const float graphWidth = GRAPH_WIDTH * textScale;
+ const float graphHeight = GRAPH_HEIGHT * textScale;
+ const float topLeftX = m_windowRect.Width() - (graphWidth + lineHeight);
+ const float topLeftY = m_windowRect.Height() - (graphHeight + lineHeight);
+ const float gridStepY = graphHeight / 24.0f;
+ const float gridStepX = graphWidth / NB_JITTER;
+
+ // Draw background
+ DrawRect(RGB(0, 0, 0), 80, CRect(int(topLeftX),
+ int(topLeftY),
+ int(topLeftX + graphWidth),
+ int(topLeftY + graphHeight)));
+
+ m_pLine->SetWidth(2.5f * textScale);
+ m_pLine->SetAntialias(TRUE);
m_pLine->Begin();
- for (int i = 0; i <= DrawHeight; i += 5) {
- Points[0].x = (float)StartX;
- Points[0].y = (float)(StartY + i);
- Points[1].x = (float)(StartX + (((i + 25) % 25) ? 50 : 625));
- Points[1].y = (float)(StartY + i);
- m_pLine->Draw(Points, 2, D3DCOLOR_XRGB(100, 100, 255));
- }
-
- for (int i = 0; i < DrawWidth; i += 125) { // Every 25:th sample
- Points[0].x = (float)(StartX + i);
- Points[0].y = (float)(StartY + DrawHeight / 2);
- Points[1].x = (float)(StartX + i);
- Points[1].y = (float)(StartY + DrawHeight / 2 + 10);
- m_pLine->Draw(Points, 2, D3DCOLOR_XRGB(100, 100, 255));
+ // Draw grid lines
+ for (int i = 1; i < 24; ++i) {
+ points[0].x = topLeftX;
+ points[0].y = topLeftY + i * gridStepY;
+ points[1].y = points[0].y;
+
+ float lineLength;
+ D3DCOLOR color;
+ if (i % 12 == 0) {
+ lineLength = 1.0f;
+ color = D3DCOLOR_XRGB(100, 100, 255);
+ } else if (i % 4 == 0) {
+ lineLength = 0.96f;
+ color = D3DCOLOR_XRGB(100, 100, 180);
+ } else {
+ lineLength = 0.04f;
+ color = D3DCOLOR_XRGB(100, 100, 140);
+ }
+ points[1].x = topLeftX + graphWidth * lineLength;
+ m_pLine->Draw(points, 2, color);
}
- for (int i = 0; i < NB_JITTER; i++) {
- nIndex = (m_nNextJitter + 1 + i) % NB_JITTER;
+ // Draw jitter
+ for (int i = 1; i <= NB_JITTER; ++i) {
+ int nIndex = (m_nNextJitter + i) % NB_JITTER;
if (nIndex < 0) {
nIndex += NB_JITTER;
+ ASSERT(FALSE);
}
- double Jitter = m_pllJitter[nIndex] - m_fJitterMean;
- Points[i].x = (float)(StartX + (i * 5));
- Points[i].y = (float)(StartY + (Jitter / 2000.0 + 125.0));
+ float jitter = float(m_pllJitter[nIndex] - m_fJitterMean);
+ points[i - 1].x = topLeftX + i * gridStepX;
+ points[i - 1].y = topLeftY + (jitter * textScale / 2000.0f + graphHeight / 2.0f);
}
- m_pLine->Draw(Points, NB_JITTER, D3DCOLOR_XRGB(255, 100, 100));
+ m_pLine->Draw(points, NB_JITTER, D3DCOLOR_XRGB(255, 100, 100));
if (rd->m_iDisplayStats == 1) { // Full on-screen statistics
- for (int i = 0; i < NB_JITTER; i++) {
- nIndex = (m_nNextSyncOffset + 1 + i) % NB_JITTER;
+ // Draw sync offset
+ for (int i = 1; i <= NB_JITTER; ++i) {
+ int nIndex = (m_nNextSyncOffset + i) % NB_JITTER;
if (nIndex < 0) {
nIndex += NB_JITTER;
}
- Points[i].x = (float)(StartX + (i * 5));
- Points[i].y = (float)(StartY + ((m_pllSyncOffset[nIndex]) / 2000 + 125));
+ points[i - 1].x = topLeftX + i * gridStepX;
+ points[i - 1].y = topLeftY + (m_pllSyncOffset[nIndex] * textScale / 2000.0f + graphHeight / 2.0f);
}
- m_pLine->Draw(Points, NB_JITTER, D3DCOLOR_XRGB(100, 200, 100));
+ m_pLine->Draw(points, NB_JITTER, D3DCOLOR_XRGB(100, 200, 100));
}
m_pLine->End();
}
@@ -2308,11 +2332,22 @@ STDMETHODIMP CBaseAP::GetDIB(BYTE* lpDib, DWORD* size)
{
CheckPointer(size, E_POINTER);
+ // Keep a reference so that we can safely work on the surface
+ // without having to lock everything
+ CComPtr<IDirect3DSurface9> pVideoSurface;
+ {
+ CAutoLock cAutoLock(this);
+ CheckPointer(m_pVideoSurface[m_nCurSurface], E_FAIL);
+ pVideoSurface = m_pVideoSurface[m_nCurSurface];
+ }
+
HRESULT hr;
D3DSURFACE_DESC desc;
ZeroMemory(&desc, sizeof(desc));
- m_pVideoSurface[m_nCurSurface]->GetDesc(&desc);
+ if (FAILED(hr = pVideoSurface->GetDesc(&desc))) {
+ return hr;
+ }
DWORD required = sizeof(BITMAPINFOHEADER) + (desc.Width * desc.Height * 32 >> 3);
if (!lpDib) {
@@ -2324,34 +2359,22 @@ STDMETHODIMP CBaseAP::GetDIB(BYTE* lpDib, DWORD* size)
}
*size = required;
- CComPtr<IDirect3DSurface9> pSurface = m_pVideoSurface[m_nCurSurface];
+ CComPtr<IDirect3DSurface9> pSurface = pVideoSurface;
D3DLOCKED_RECT r;
if (FAILED(hr = pSurface->LockRect(&r, nullptr, D3DLOCK_READONLY))) {
pSurface = nullptr;
if (FAILED(hr = m_pD3DDev->CreateOffscreenPlainSurface(desc.Width, desc.Height, desc.Format, D3DPOOL_SYSTEMMEM, &pSurface, nullptr))
- || FAILED(hr = m_pD3DDev->GetRenderTargetData(m_pVideoSurface[m_nCurSurface], pSurface))
+ || FAILED(hr = m_pD3DDev->GetRenderTargetData(pVideoSurface, pSurface))
|| FAILED(hr = pSurface->LockRect(&r, nullptr, D3DLOCK_READONLY))) {
return hr;
}
}
- BITMAPINFOHEADER* bih = (BITMAPINFOHEADER*)lpDib;
- ZeroMemory(bih, sizeof(BITMAPINFOHEADER));
- bih->biSize = sizeof(BITMAPINFOHEADER);
- bih->biWidth = desc.Width;
- bih->biHeight = desc.Height;
- bih->biBitCount = 32;
- bih->biPlanes = 1;
- bih->biSizeImage = bih->biWidth * bih->biHeight * bih->biBitCount >> 3;
-
- BitBltFromRGBToRGB(
- bih->biWidth, bih->biHeight,
- (BYTE*)(bih + 1), bih->biWidth * bih->biBitCount >> 3, bih->biBitCount,
- (BYTE*)r.pBits + r.Pitch * (desc.Height - 1), -(int)r.Pitch, 32);
+ hr = CreateDIBFromSurfaceData(desc, r, lpDib);
pSurface->UnlockRect();
- return S_OK;
+ return hr;
}
STDMETHODIMP CBaseAP::SetPixelShader(LPCSTR pSrcData, LPCSTR pTarget)
@@ -2398,38 +2421,36 @@ STDMETHODIMP CBaseAP::SetPixelShader2(LPCSTR pSrcData, LPCSTR pTarget, bool bScr
CSyncAP::CSyncAP(HWND hWnd, bool bFullscreen, HRESULT& hr, CString& _Error)
: CBaseAP(hWnd, bFullscreen, hr, _Error)
- , m_hDXVA2Lib(nullptr)
- , m_hEVRLib(nullptr)
- , m_hAVRTLib(nullptr)
- , m_nResetToken(0)
- , m_hRenderThread(nullptr)
- , m_hMixerThread(nullptr)
- , m_hEvtFlush(nullptr)
+ , m_LastClockState(MFCLOCK_STATE_INVALID)
+ , m_dwVideoAspectRatioMode(MFVideoARMode_PreservePicture)
+ , m_dwVideoRenderPrefs((MFVideoRenderPrefs)0)
+ , m_BorderColor(RGB(0, 0, 0))
, m_hEvtQuit(nullptr)
- , m_hEvtSkip(nullptr)
, m_bEvtQuit(0)
+ , m_hEvtFlush(nullptr)
, m_bEvtFlush(0)
- , m_nRenderState(Shutdown)
- , m_bStepping(false)
+ , m_hEvtSkip(nullptr)
+ , m_bEvtSkip(false)
, m_bUseInternalTimer(false)
, m_LastSetOutputRange(-1)
, m_bPendingRenegotiate(false)
, m_bPendingMediaFinished(false)
- , m_pCurrentDisplaydSample(nullptr)
- , m_nStepCount(0)
- , m_dwVideoAspectRatioMode(MFVideoARMode_PreservePicture)
- , m_dwVideoRenderPrefs((MFVideoRenderPrefs)0)
- , m_BorderColor(RGB(0, 0, 0))
, m_bPrerolled(false)
- , m_LastClockState(MFCLOCK_STATE_INVALID)
- , m_bEvtSkip(false)
- , pfDXVA2CreateDirect3DDeviceManager9(nullptr)
- , pfMFCreateDXSurfaceBuffer(nullptr)
- , pfMFCreateVideoSampleFromSurface(nullptr)
- , pfMFCreateVideoMediaType(nullptr)
- , pfAvSetMmThreadCharacteristicsW(nullptr)
- , pfAvSetMmThreadPriority(nullptr)
- , pfAvRevertMmThreadCharacteristics(nullptr)
+ , m_hRenderThread(nullptr)
+ , m_hMixerThread(nullptr)
+ , m_nRenderState(Shutdown)
+ , m_bStepping(false)
+ , m_nCurrentGroupId(0)
+ , m_nResetToken(0)
+ , m_nStepCount(0)
+ , m_SampleFreeCallback(this, &CSyncAP::OnSampleFree)
+ , fnDXVA2CreateDirect3DDeviceManager9(_T("dxva2.dll"), "DXVA2CreateDirect3DDeviceManager9")
+ , fnMFCreateDXSurfaceBuffer(_T("evr.dll"), "MFCreateDXSurfaceBuffer")
+ , fnMFCreateVideoSampleFromSurface(_T("evr.dll"), "MFCreateVideoSampleFromSurface")
+ , fnMFCreateMediaType(_T("mfplat.dll"), "MFCreateMediaType")
+ , fnAvSetMmThreadCharacteristicsW(_T("avrt.dll"), "AvSetMmThreadCharacteristicsW")
+ , fnAvSetMmThreadPriority(_T("avrt.dll"), "AvSetMmThreadPriority")
+ , fnAvRevertMmThreadCharacteristics(_T("avrt.dll"), "AvRevertMmThreadCharacteristics")
{
const CRenderersSettings& r = GetRenderersSettings();
@@ -2438,47 +2459,25 @@ CSyncAP::CSyncAP(HWND hWnd, bool bFullscreen, HRESULT& hr, CString& _Error)
return;
}
- // Load EVR specific DLLs
- m_hDXVA2Lib = LoadLibrary(L"dxva2.dll");
- if (m_hDXVA2Lib) {
- pfDXVA2CreateDirect3DDeviceManager9 = (PTR_DXVA2CreateDirect3DDeviceManager9) GetProcAddress(m_hDXVA2Lib, "DXVA2CreateDirect3DDeviceManager9");
- }
-
- // Load EVR functions
- m_hEVRLib = LoadLibrary(L"evr.dll");
- if (m_hEVRLib) {
- pfMFCreateDXSurfaceBuffer = (PTR_MFCreateDXSurfaceBuffer)GetProcAddress(m_hEVRLib, "MFCreateDXSurfaceBuffer");
- pfMFCreateVideoSampleFromSurface = (PTR_MFCreateVideoSampleFromSurface)GetProcAddress(m_hEVRLib, "MFCreateVideoSampleFromSurface");
- pfMFCreateVideoMediaType = (PTR_MFCreateVideoMediaType)GetProcAddress(m_hEVRLib, "MFCreateVideoMediaType");
- }
-
- if (!pfDXVA2CreateDirect3DDeviceManager9 || !pfMFCreateDXSurfaceBuffer || !pfMFCreateVideoSampleFromSurface || !pfMFCreateVideoMediaType) {
- if (!pfDXVA2CreateDirect3DDeviceManager9) {
+ if (!fnDXVA2CreateDirect3DDeviceManager9 || !fnMFCreateDXSurfaceBuffer || !fnMFCreateVideoSampleFromSurface || !fnMFCreateMediaType) {
+ if (!fnDXVA2CreateDirect3DDeviceManager9) {
_Error += L"Could not find DXVA2CreateDirect3DDeviceManager9 (dxva2.dll)\n";
}
- if (!pfMFCreateDXSurfaceBuffer) {
+ if (!fnMFCreateDXSurfaceBuffer) {
_Error += L"Could not find MFCreateDXSurfaceBuffer (evr.dll)\n";
}
- if (!pfMFCreateVideoSampleFromSurface) {
+ if (!fnMFCreateVideoSampleFromSurface) {
_Error += L"Could not find MFCreateVideoSampleFromSurface (evr.dll)\n";
}
- if (!pfMFCreateVideoMediaType) {
- _Error += L"Could not find MFCreateVideoMediaType (evr.dll)\n";
+ if (!fnMFCreateMediaType) {
+ _Error += L"Could not find MFCreateMediaType (mfplat.dll)\n";
}
hr = E_FAIL;
return;
}
- // Load Vista+ specific DLLs
- m_hAVRTLib = LoadLibrary(L"avrt.dll");
- if (m_hAVRTLib) {
- pfAvSetMmThreadCharacteristicsW = (PTR_AvSetMmThreadCharacteristicsW) GetProcAddress(m_hAVRTLib, "AvSetMmThreadCharacteristicsW");
- pfAvSetMmThreadPriority = (PTR_AvSetMmThreadPriority) GetProcAddress(m_hAVRTLib, "AvSetMmThreadPriority");
- pfAvRevertMmThreadCharacteristics = (PTR_AvRevertMmThreadCharacteristics) GetProcAddress(m_hAVRTLib, "AvRevertMmThreadCharacteristics");
- }
-
// Init DXVA manager
- hr = pfDXVA2CreateDirect3DDeviceManager9(&m_nResetToken, &m_pD3DManager);
+ hr = fnDXVA2CreateDirect3DDeviceManager9(&m_nResetToken, &m_pD3DManager);
if (SUCCEEDED(hr) && m_pD3DManager) {
hr = m_pD3DManager->ResetDevice(m_pD3DDev, m_nResetToken);
if (FAILED(hr)) {
@@ -2512,16 +2511,6 @@ CSyncAP::~CSyncAP()
m_pMediaType = nullptr;
m_pClock = nullptr;
m_pD3DManager = nullptr;
-
- if (m_hDXVA2Lib) {
- FreeLibrary(m_hDXVA2Lib);
- }
- if (m_hEVRLib) {
- FreeLibrary(m_hEVRLib);
- }
- if (m_hAVRTLib) {
- FreeLibrary(m_hAVRTLib);
- }
}
HRESULT CSyncAP::CheckShutdown() const
@@ -2641,6 +2630,20 @@ STDMETHODIMP_(bool) CSyncAP::Paint(bool bAll)
return __super::Paint(bAll);
}
+STDMETHODIMP_(bool) CSyncAP::Paint(IMFSample* pMFSample)
+{
+ m_pCurrentlyDisplayedSample = pMFSample;
+ pMFSample->GetUINT32(GUID_SURFACE_INDEX, (UINT32*)&m_nCurSurface);
+
+ auto sampleHasCurrentGroupId = [this](IMFSample * pSample) {
+ UINT32 nGroupId;
+ return (SUCCEEDED(pSample->GetUINT32(GUID_GROUP_ID, &nGroupId)) && nGroupId == m_nCurrentGroupId);
+ };
+ ASSERT(sampleHasCurrentGroupId(pMFSample));
+
+ return Paint(true);
+}
+
STDMETHODIMP CSyncAP::NonDelegatingQueryInterface(REFIID riid, void** ppv)
{
HRESULT hr;
@@ -2680,24 +2683,32 @@ STDMETHODIMP CSyncAP::NonDelegatingQueryInterface(REFIID riid, void** ppv)
// IMFClockStateSink
STDMETHODIMP CSyncAP::OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset)
{
+ HRESULT hr;
+ CHECK_HR(CheckShutdown());
m_nRenderState = Started;
return S_OK;
}
STDMETHODIMP CSyncAP::OnClockStop(MFTIME hnsSystemTime)
{
+ HRESULT hr;
+ CHECK_HR(CheckShutdown());
m_nRenderState = Stopped;
return S_OK;
}
STDMETHODIMP CSyncAP::OnClockPause(MFTIME hnsSystemTime)
{
+ HRESULT hr;
+ CHECK_HR(CheckShutdown());
m_nRenderState = Paused;
return S_OK;
}
STDMETHODIMP CSyncAP::OnClockRestart(MFTIME hnsSystemTime)
{
+ HRESULT hr;
+ CHECK_HR(CheckShutdown());
m_nRenderState = Started;
return S_OK;
}
@@ -2867,6 +2878,7 @@ void CSyncAP::CompleteFrameStep(bool bCancel)
STDMETHODIMP CSyncAP::ProcessMessage(MFVP_MESSAGE_TYPE eMessage, ULONG_PTR ulParam)
{
HRESULT hr = S_OK;
+ CHECK_HR(CheckShutdown());
switch (eMessage) {
case MFVP_MESSAGE_BEGINSTREAMING:
@@ -2937,52 +2949,78 @@ HRESULT CSyncAP::IsMediaTypeSupported(IMFMediaType* pMixerType)
return hr;
}
-HRESULT CSyncAP::CreateProposedOutputType(IMFMediaType* pMixerType, IMFMediaType** ppType)
+HRESULT CSyncAP::CreateOptimalOutputType(IMFMediaType* pMixerProposedType, IMFMediaType* pMixerInputType, IMFMediaType** ppType)
{
HRESULT hr;
- AM_MEDIA_TYPE* pAMMedia = nullptr;
- LARGE_INTEGER i64Size;
- MFVIDEOFORMAT* VideoFormat;
+ IMFMediaType* pOptimalMediaType;
- CHECK_HR(pMixerType->GetRepresentation(FORMAT_MFVideoFormat, (void**)&pAMMedia));
+ CHECK_HR(fnMFCreateMediaType(&pOptimalMediaType));
+ CHECK_HR(pMixerProposedType->CopyAllItems(pOptimalMediaType));
- VideoFormat = (MFVIDEOFORMAT*)pAMMedia->pbFormat;
- hr = pfMFCreateVideoMediaType(VideoFormat, &m_pMediaType);
+ const GUID colorAttributes[] = {
+ MF_MT_VIDEO_LIGHTING,
+ MF_MT_VIDEO_PRIMARIES,
+ MF_MT_TRANSFER_FUNCTION,
+ MF_MT_YUV_MATRIX,
+ MF_MT_VIDEO_CHROMA_SITING
+ };
- CSize videoSize;
- videoSize.cx = VideoFormat->videoInfo.dwWidth;
- videoSize.cy = VideoFormat->videoInfo.dwHeight;
+ auto copyAttribute = [](IMFAttributes * pFrom, IMFAttributes * pTo, REFGUID guidKey) {
+ PROPVARIANT val;
+ HRESULT hr = pFrom->GetItem(guidKey, &val);
- if (SUCCEEDED(hr)) {
- i64Size.HighPart = videoSize.cx;
- i64Size.LowPart = videoSize.cy;
- m_pMediaType->SetUINT64(MF_MT_FRAME_SIZE, i64Size.QuadPart);
- m_pMediaType->SetUINT32(MF_MT_PAN_SCAN_ENABLED, 0);
- const CRenderersSettings& r = GetRenderersSettings();
+ if (SUCCEEDED(hr)) {
+ hr = pTo->SetItem(guidKey, val);
+ PropVariantClear(&val);
+ } else if (hr == MF_E_ATTRIBUTENOTFOUND) {
+ hr = pTo->DeleteItem(guidKey);
+ }
+ return hr;
+ };
- if (r.m_AdvRendSets.iEVROutputRange == 1) {
- m_pMediaType->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_16_235);
- } else {
- m_pMediaType->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_0_255);
+ for (REFGUID guidKey : colorAttributes) {
+ if (FAILED(hr = copyAttribute(pMixerInputType, pOptimalMediaType, guidKey))) {
+ TRACE(_T("Copying color attribute %s failed: 0x%08x\n"), CComBSTR(guidKey), hr);
}
+ }
- m_LastSetOutputRange = r.m_AdvRendSets.iEVROutputRange;
- i64Size.HighPart = VideoFormat->videoInfo.PixelAspectRatio.Numerator;
- i64Size.LowPart = VideoFormat->videoInfo.PixelAspectRatio.Denominator;
- m_pMediaType->SetUINT64(MF_MT_PIXEL_ASPECT_RATIO, i64Size.QuadPart);
+ pOptimalMediaType->SetUINT32(MF_MT_PAN_SCAN_ENABLED, 0);
+
+ const CRenderersSettings& r = GetRenderersSettings();
- MFVideoArea Area = GetArea(0, 0, videoSize.cx, videoSize.cy);
- m_pMediaType->SetBlob(MF_MT_GEOMETRIC_APERTURE, (UINT8*)&Area, sizeof(MFVideoArea));
+ UINT32 nominalRange;
+ if (SUCCEEDED(pMixerInputType->GetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, &nominalRange))
+ && nominalRange == MFNominalRange_0_255) {
+ // EVR mixer always assume 16-235 input. To ensure that luminance range won't be expanded we requests 16-235 also on output.
+ // Request 16-235 to ensure untouched luminance range on output. It is the only way to pass 0-255 without changes.
+ nominalRange = MFNominalRange_16_235;
+ m_LastSetOutputRange = -1; // -1 to prevent renegotiations because of different value than this in settings.
+ } else {
+ nominalRange = (r.m_AdvRendSets.iEVROutputRange == 1) ? MFNominalRange_16_235 : MFNominalRange_0_255;
+ m_LastSetOutputRange = r.m_AdvRendSets.iEVROutputRange;
}
+ pOptimalMediaType->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, nominalRange);
- UINT64 dwARx = UINT64(VideoFormat->videoInfo.PixelAspectRatio.Numerator) * videoSize.cx;
- UINT64 dwARy = UINT64(VideoFormat->videoInfo.PixelAspectRatio.Denominator) * videoSize.cy;
- UINT64 gcd = GCD(dwARx, dwARy);
+ m_LastSetOutputRange = r.m_AdvRendSets.iEVROutputRange;
+
+ ULARGE_INTEGER ui64Size;
+ pOptimalMediaType->GetUINT64(MF_MT_FRAME_SIZE, &ui64Size.QuadPart);
+
+ CSize videoSize((LONG)ui64Size.HighPart, (LONG)ui64Size.LowPart);
+ MFVideoArea Area = GetArea(0, 0, videoSize.cx, videoSize.cy);
+ pOptimalMediaType->SetBlob(MF_MT_GEOMETRIC_APERTURE, (UINT8*)&Area, sizeof(MFVideoArea));
+
+ ULARGE_INTEGER ui64AspectRatio;
+ pOptimalMediaType->GetUINT64(MF_MT_PIXEL_ASPECT_RATIO, &ui64AspectRatio.QuadPart);
+
+ UINT64 ui64ARx = UINT64(ui64AspectRatio.HighPart) * ui64Size.HighPart;
+ UINT64 ui64ARy = UINT64(ui64AspectRatio.LowPart) * ui64Size.LowPart;
+ UINT64 gcd = GCD(ui64ARx, ui64ARy);
if (gcd > 1) {
- dwARx /= gcd;
- dwARy /= gcd;
+ ui64ARx /= gcd;
+ ui64ARy /= gcd;
}
- CSize aspectRatio((LONG)dwARx, (LONG)dwARy);
+ CSize aspectRatio((LONG)ui64ARx, (LONG)ui64ARy);
if (videoSize != m_nativeVideoSize || aspectRatio != m_aspectRatio) {
SetVideoSize(videoSize, aspectRatio);
@@ -2993,23 +3031,42 @@ HRESULT CSyncAP::CreateProposedOutputType(IMFMediaType* pMixerType, IMFMediaType
}
}
- pMixerType->FreeRepresentation(FORMAT_MFVideoFormat, (void*)pAMMedia);
- m_pMediaType->QueryInterface(IID_PPV_ARGS(ppType));
+ *ppType = pOptimalMediaType;
+ (*ppType)->AddRef();
return hr;
}
HRESULT CSyncAP::SetMediaType(IMFMediaType* pType)
{
- HRESULT hr;
+ HRESULT hr = S_OK;
AM_MEDIA_TYPE* pAMMedia = nullptr;
CString strTemp;
- CheckPointer(pType, E_POINTER);
+ CHECK_HR(CheckShutdown());
+
+ if (pType == nullptr) {
+ // Release
+ RemoveAllSamples();
+ DeleteSurfaces();
+ CAutoLock lock(this);
+ m_pMediaType = nullptr;
+ return hr;
+ }
+
+ DWORD dwFlags = 0;
+ if (m_pMediaType && m_pMediaType->IsEqual(pType, &dwFlags) == S_OK) {
+ // Nothing to do
+ return hr;
+ }
+
CHECK_HR(pType->GetRepresentation(FORMAT_VideoInfo2, (void**)&pAMMedia));
hr = InitializeDevice(pAMMedia);
if (SUCCEEDED(hr)) {
+ CAutoLock lock(this);
+ m_pMediaType = pType;
+
strTemp = GetMediaTypeName(pAMMedia->subtype);
strTemp.Replace(L"MEDIASUBTYPE_", L"");
m_strStatsMsg[MSG_MIXEROUT].Format(L"Mixer output : %s", strTemp);
@@ -3063,6 +3120,7 @@ HRESULT CSyncAP::RenegotiateMediaType()
HRESULT hr = S_OK;
CComPtr<IMFMediaType> pMixerType;
+ CComPtr<IMFMediaType> pMixerInputType;
CComPtr<IMFMediaType> pType;
if (!m_pMixer) {
@@ -3070,13 +3128,13 @@ HRESULT CSyncAP::RenegotiateMediaType()
}
// Get the mixer's input type
- hr = m_pMixer->GetInputCurrentType(0, &pType);
+ hr = m_pMixer->GetInputCurrentType(0, &pMixerInputType);
if (SUCCEEDED(hr)) {
AM_MEDIA_TYPE* pMT;
- hr = pType->GetRepresentation(FORMAT_VideoInfo2, (void**)&pMT);
+ hr = pMixerInputType->GetRepresentation(FORMAT_VideoInfo2, (void**)&pMT);
if (SUCCEEDED(hr)) {
m_inputMediaType = *pMT;
- pType->FreeRepresentation(FORMAT_VideoInfo2, pMT);
+ pMixerInputType->FreeRepresentation(FORMAT_VideoInfo2, pMT);
}
}
@@ -3086,7 +3144,6 @@ HRESULT CSyncAP::RenegotiateMediaType()
while ((hr != MF_E_NO_MORE_TYPES)) {
pMixerType = nullptr;
pType = nullptr;
- m_pMediaType = nullptr;
// Step 1. Get the next media type supported by mixer.
hr = m_pMixer->GetOutputAvailableType(0, iTypeIndex++, &pMixerType);
@@ -3098,7 +3155,7 @@ HRESULT CSyncAP::RenegotiateMediaType()
hr = IsMediaTypeSupported(pMixerType);
}
if (SUCCEEDED(hr)) {
- hr = CreateProposedOutputType(pMixerType, &pType);
+ hr = CreateOptimalOutputType(pMixerType, pMixerInputType, &pType);
}
// Step 4. Check if the mixer will accept this media type.
if (SUCCEEDED(hr)) {
@@ -3148,7 +3205,7 @@ HRESULT CSyncAP::RenegotiateMediaType()
bool CSyncAP::GetSampleFromMixer()
{
- MFT_OUTPUT_DATA_BUFFER Buffer;
+ MFT_OUTPUT_DATA_BUFFER dataBuffer;
HRESULT hr = S_OK;
DWORD dwStatus;
LONGLONG llClockBefore = 0;
@@ -3158,26 +3215,36 @@ bool CSyncAP::GetSampleFromMixer()
UINT dwSurface;
bool newSample = false;
+ auto sampleHasCurrentGroupId = [this](IMFSample * pSample) {
+ UINT32 nGroupId;
+ return (SUCCEEDED(pSample->GetUINT32(GUID_GROUP_ID, &nGroupId)) && nGroupId == m_nCurrentGroupId);
+ };
+
while (SUCCEEDED(hr)) { // Get as many frames as there are and that we have samples for
CComPtr<IMFSample> pSample;
- CComPtr<IMFSample> pNewSample;
if (FAILED(GetFreeSample(&pSample))) { // All samples are taken for the moment. Better luck next time
break;
}
- ZeroMemory(&Buffer, sizeof(Buffer));
- Buffer.pSample = pSample;
+ ZeroMemory(&dataBuffer, sizeof(dataBuffer));
+ dataBuffer.pSample = pSample;
pSample->GetUINT32(GUID_SURFACE_INDEX, &dwSurface);
+ ASSERT(sampleHasCurrentGroupId(pSample));
+
{
llClockBefore = GetRenderersData()->GetPerfCounter();
- hr = m_pMixer->ProcessOutput(0 , 1, &Buffer, &dwStatus);
+ hr = m_pMixer->ProcessOutput(0 , 1, &dataBuffer, &dwStatus);
llClockAfter = GetRenderersData()->GetPerfCounter();
}
if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) { // There are no samples left in the mixer
- MoveToFreeList(pSample, false);
+ AddToFreeList(pSample, false);
+ pSample = nullptr; // The sample should not be used after being queued
+ // Important: Release any events returned from the ProcessOutput method.
+ SAFE_RELEASE(dataBuffer.pEvents);
break;
}
+
if (m_pSink) {
llMixerLatency = llClockAfter - llClockBefore;
m_pSink->Notify(EC_PROCESSING_LATENCY, (LONG_PTR)&llMixerLatency, 0);
@@ -3199,7 +3266,16 @@ bool CSyncAP::GetSampleFromMixer()
m_pD3DDev->ColorFill(m_pVideoSurface[dwSurface], &rcTearing, D3DCOLOR_ARGB(255, 255, 0, 0));
m_nTearingPos = (m_nTearingPos + 7) % m_nativeVideoSize.cx;
}
- MoveToScheduledList(pSample, false); // Schedule, then go back to see if there is more where that came from
+
+ if (SUCCEEDED(TrackSample(pSample))) {
+ AddToScheduledList(pSample, false); // Schedule, then go back to see if there is more where that came from
+ pSample = nullptr; // The sample should not be used after being queued
+ } else {
+ ASSERT(FALSE);
+ }
+
+ // Important: Release any events returned from the ProcessOutput method.
+ SAFE_RELEASE(dataBuffer.pEvents);
}
return newSample;
}
@@ -3529,10 +3605,13 @@ STDMETHODIMP CSyncAP::InitializeDevice(AM_MEDIA_TYPE* pMediaType)
for (int i = 0; i < m_nDXSurface; i++) {
CComPtr<IMFSample> pMFSample;
- hr = pfMFCreateVideoSampleFromSurface(m_pVideoSurface[i], &pMFSample);
+ hr = fnMFCreateVideoSampleFromSurface(m_pVideoSurface[i], &pMFSample);
if (SUCCEEDED(hr)) {
+ pMFSample->SetUINT32(GUID_GROUP_ID, m_nCurrentGroupId);
pMFSample->SetUINT32(GUID_SURFACE_INDEX, i);
+ CAutoLock sampleQueueLock(&m_SampleQueueLock);
m_FreeSamples.AddTail(pMFSample);
+ pMFSample = nullptr; // The sample should not be used after being queued
}
ASSERT(SUCCEEDED(hr));
}
@@ -3610,23 +3689,32 @@ void CSyncAP::RenderThread()
HANDLE hEvts[] = {m_hEvtQuit, m_hEvtFlush, m_hEvtSkip};
bool bQuit = false;
TIMECAPS tc;
- CComPtr<IMFSample>pNewSample = nullptr; // The sample next in line to be presented
+ CComPtr<IMFSample> pNewSample; // The sample next in line to be presented
// Tell Multimedia Class Scheduler we are doing threaded playback (increase priority)
HANDLE hAvrt = 0;
- if (pfAvSetMmThreadCharacteristicsW) {
+ if (fnAvSetMmThreadCharacteristicsW) {
DWORD dwTaskIndex = 0;
- hAvrt = pfAvSetMmThreadCharacteristicsW(L"Playback", &dwTaskIndex);
- if (pfAvSetMmThreadPriority) {
- pfAvSetMmThreadPriority(hAvrt, AVRT_PRIORITY_HIGH);
+ hAvrt = fnAvSetMmThreadCharacteristicsW(L"Playback", &dwTaskIndex);
+ if (fnAvSetMmThreadPriority) {
+ fnAvSetMmThreadPriority(hAvrt, AVRT_PRIORITY_HIGH);
}
}
// Set timer resolution
timeGetDevCaps(&tc, sizeof(TIMECAPS));
DWORD dwResolution = std::min(std::max(tc.wPeriodMin, 0u), tc.wPeriodMax);
- DWORD dwUser = timeBeginPeriod(dwResolution);
- pNewSample = nullptr;
+ VERIFY(timeBeginPeriod(dwResolution) == 0);
+
+ auto checkPendingMediaFinished = [this]() {
+ if (m_bPendingMediaFinished) {
+ CAutoLock lock(&m_SampleQueueLock);
+ if (m_ScheduledSamples.IsEmpty()) {
+ m_bPendingMediaFinished = false;
+ m_pSink->Notify(EC_COMPLETE, 0, 0);
+ }
+ }
+ };
while (!bQuit) {
m_lNextSampleWait = 1; // Default value for running this loop
@@ -3647,7 +3735,7 @@ void CSyncAP::RenderThread()
m_lNextSampleWait = 0; // Present immediately
} else if (SUCCEEDED(pNewSample->GetSampleTime(&m_llSampleTime))) { // Get zero-based sample due time
if (m_llLastSampleTime == m_llSampleTime) { // In the rare case there are duplicate frames in the movie. There really shouldn't be but it happens.
- MoveToFreeList(pNewSample, true);
+ checkPendingMediaFinished();
pNewSample = nullptr;
m_lNextSampleWait = 0;
} else {
@@ -3724,6 +3812,8 @@ void CSyncAP::RenderThread()
}
}
} // if got new sample
+ } else {
+ checkPendingMediaFinished();
}
}
// Wait for the next presentation time (m_lNextSampleWait) or some other event.
@@ -3734,9 +3824,7 @@ void CSyncAP::RenderThread()
break;
case WAIT_OBJECT_0 + 1: // Flush
- if (pNewSample) {
- MoveToFreeList(pNewSample, true);
- }
+ checkPendingMediaFinished();
pNewSample = nullptr;
FlushSamples();
m_bEvtFlush = false;
@@ -3756,9 +3844,7 @@ void CSyncAP::RenderThread()
case WAIT_TIMEOUT: // Time to show the sample or something
if (m_LastSetOutputRange != -1 && m_LastSetOutputRange != r.m_AdvRendSets.iEVROutputRange || m_bPendingRenegotiate) {
- if (pNewSample) {
- MoveToFreeList(pNewSample, true);
- }
+ checkPendingMediaFinished();
pNewSample = nullptr;
FlushSamples();
RenegotiateMediaType();
@@ -3766,9 +3852,7 @@ void CSyncAP::RenderThread()
}
if (m_bPendingResetDevice) {
- if (pNewSample) {
- MoveToFreeList(pNewSample, true);
- }
+ checkPendingMediaFinished();
pNewSample = nullptr;
SendResetRequest();
} else if (m_nStepCount < 0) {
@@ -3776,37 +3860,29 @@ void CSyncAP::RenderThread()
m_pcFramesDropped++;
stepForward = true;
} else if (pNewSample && (m_nStepCount > 0)) {
- pNewSample->GetUINT32(GUID_SURFACE_INDEX, (UINT32*)&m_nCurSurface);
- if (!g_bExternalSubtitleTime) {
- __super::SetTime(g_tSegmentStart + m_llSampleTime);
- }
- Paint(true);
+ Paint(pNewSample);
CompleteFrameStep(false);
m_pcFramesDrawn++;
stepForward = true;
} else if (pNewSample && !m_bStepping) { // When a stepped frame is shown, a new one is fetched that we don't want to show here while stepping
- pNewSample->GetUINT32(GUID_SURFACE_INDEX, (UINT32*)&m_nCurSurface);
if (!g_bExternalSubtitleTime) {
__super::SetTime(g_tSegmentStart + m_llSampleTime);
}
- Paint(true);
+ Paint(pNewSample);
m_pcFramesDrawn++;
stepForward = true;
}
break;
} // switch
- if (pNewSample && stepForward) {
- MoveToFreeList(pNewSample, true);
+ if (stepForward) {
+ checkPendingMediaFinished();
pNewSample = nullptr;
}
} // while
- if (pNewSample) {
- MoveToFreeList(pNewSample, true);
- pNewSample = nullptr;
- }
+ pNewSample = nullptr;
timeEndPeriod(dwResolution);
- if (pfAvRevertMmThreadCharacteristics) {
- pfAvRevertMmThreadCharacteristics(hAvrt);
+ if (fnAvRevertMmThreadCharacteristics) {
+ fnAvRevertMmThreadCharacteristics(hAvrt);
}
}
@@ -3815,16 +3891,20 @@ STDMETHODIMP_(bool) CSyncAP::ResetDevice()
CAutoLock lock(this);
CAutoLock lock2(&m_ImageProcessingLock);
CAutoLock cRenderLock(&m_allocatorLock);
+
RemoveAllSamples();
bool bResult = __super::ResetDevice();
for (int i = 0; i < m_nDXSurface; i++) {
CComPtr<IMFSample> pMFSample;
- HRESULT hr = pfMFCreateVideoSampleFromSurface(m_pVideoSurface[i], &pMFSample);
+ HRESULT hr = fnMFCreateVideoSampleFromSurface(m_pVideoSurface[i], &pMFSample);
if (SUCCEEDED(hr)) {
+ pMFSample->SetUINT32(GUID_GROUP_ID, m_nCurrentGroupId);
pMFSample->SetUINT32(GUID_SURFACE_INDEX, i);
+ CAutoLock sampleQueueLock(&m_SampleQueueLock);
m_FreeSamples.AddTail(pMFSample);
+ pMFSample = nullptr; // The sample should not be used after being queued
}
ASSERT(SUCCEEDED(hr));
}
@@ -3846,11 +3926,15 @@ void CSyncAP::OnResetDevice()
void CSyncAP::RemoveAllSamples()
{
- CAutoLock AutoLock(&m_ImageProcessingLock);
+ CAutoLock imageProcesssingLock(&m_ImageProcessingLock);
+ CAutoLock sampleQueueLock(&m_SampleQueueLock);
+
FlushSamples();
m_ScheduledSamples.RemoveAll();
m_FreeSamples.RemoveAll();
m_nUsedBuffer = 0;
+ // Increment the group id to make sure old samples will really be deleted
+ m_nCurrentGroupId++;
}
HRESULT CSyncAP::GetFreeSample(IMFSample** ppSample)
@@ -3858,8 +3942,8 @@ HRESULT CSyncAP::GetFreeSample(IMFSample** ppSample)
CAutoLock lock(&m_SampleQueueLock);
HRESULT hr = S_OK;
- if (m_FreeSamples.GetCount() > 1) { // Cannot use first free buffer (can be currently displayed)
- InterlockedIncrement(&m_nUsedBuffer);
+ if (!m_FreeSamples.IsEmpty()) {
+ m_nUsedBuffer++;
*ppSample = m_FreeSamples.RemoveHead().Detach();
} else {
hr = MF_E_SAMPLEALLOCATOR_EMPTY;
@@ -3868,15 +3952,15 @@ HRESULT CSyncAP::GetFreeSample(IMFSample** ppSample)
return hr;
}
-HRESULT CSyncAP::GetScheduledSample(IMFSample** ppSample, int& _Count)
+HRESULT CSyncAP::GetScheduledSample(IMFSample** ppSample, int& count)
{
CAutoLock lock(&m_SampleQueueLock);
HRESULT hr = S_OK;
- _Count = (int)m_ScheduledSamples.GetCount();
- if (_Count > 0) {
+ count = (int)m_ScheduledSamples.GetCount();
+ if (count > 0) {
*ppSample = m_ScheduledSamples.RemoveHead().Detach();
- --_Count;
+ --count;
} else {
hr = MF_E_SAMPLEALLOCATOR_EMPTY;
}
@@ -3884,14 +3968,11 @@ HRESULT CSyncAP::GetScheduledSample(IMFSample** ppSample, int& _Count)
return hr;
}
-void CSyncAP::MoveToFreeList(IMFSample* pSample, bool bTail)
+void CSyncAP::AddToFreeList(IMFSample* pSample, bool bTail)
{
CAutoLock lock(&m_SampleQueueLock);
- InterlockedDecrement(&m_nUsedBuffer);
- if (m_bPendingMediaFinished && m_nUsedBuffer == 0) {
- m_bPendingMediaFinished = false;
- m_pSink->Notify(EC_COMPLETE, 0, 0);
- }
+
+ m_nUsedBuffer--;
if (bTail) {
m_FreeSamples.AddTail(pSample);
} else {
@@ -3899,13 +3980,13 @@ void CSyncAP::MoveToFreeList(IMFSample* pSample, bool bTail)
}
}
-void CSyncAP::MoveToScheduledList(IMFSample* pSample, bool _bSorted)
+void CSyncAP::AddToScheduledList(IMFSample* pSample, bool bSorted)
{
- if (_bSorted) {
- CAutoLock lock(&m_SampleQueueLock);
+ CAutoLock lock(&m_SampleQueueLock);
+
+ if (bSorted) {
m_ScheduledSamples.AddHead(pSample);
} else {
- CAutoLock lock(&m_SampleQueueLock);
m_ScheduledSamples.AddTail(pSample);
}
}
@@ -3914,17 +3995,37 @@ void CSyncAP::FlushSamples()
{
CAutoLock lock(this);
CAutoLock lock2(&m_SampleQueueLock);
- FlushSamplesInternal();
+
+ m_bPrerolled = false;
+ m_pCurrentlyDisplayedSample = nullptr;
+ m_ScheduledSamples.RemoveAll();
}
-void CSyncAP::FlushSamplesInternal()
+HRESULT CSyncAP::TrackSample(IMFSample* pSample)
{
- m_bPrerolled = false;
- while (!m_ScheduledSamples.IsEmpty()) {
- CComPtr<IMFSample> pMFSample;
- pMFSample = m_ScheduledSamples.RemoveHead();
- MoveToFreeList(pMFSample, true);
+ HRESULT hr = E_FAIL;
+ if (CComQIPtr<IMFTrackedSample> pTracked = pSample) {
+ hr = pTracked->SetAllocator(&m_SampleFreeCallback, nullptr);
+ }
+ return hr;
+}
+
+HRESULT CSyncAP::OnSampleFree(IMFAsyncResult* pResult)
+{
+ CComPtr<IUnknown> pObject;
+ HRESULT hr = pResult->GetObject(&pObject);
+ if (SUCCEEDED(hr)) {
+ if (CComQIPtr<IMFSample> pSample = pObject) {
+ // Ignore the sample if it is from an old group
+ UINT32 nGroupId;
+ CAutoLock sampleQueueLock(&m_SampleQueueLock);
+ if (SUCCEEDED(pSample->GetUINT32(GUID_GROUP_ID, &nGroupId)) && nGroupId == m_nCurrentGroupId) {
+ AddToFreeList(pSample, true);
+ pSample = nullptr; // The sample should not be used after being queued
+ }
+ }
}
+ return hr;
}
HRESULT CSyncAP::AdviseSyncClock(ISyncClock* sC)
@@ -3938,10 +4039,9 @@ HRESULT CSyncAP::BeginStreaming()
m_pcFramesDrawn = 0;
CComPtr<IBaseFilter> pEVR;
- FILTER_INFO filterInfo;
- ZeroMemory(&filterInfo, sizeof(filterInfo));
+ CFilterInfo filterInfo;
m_pOuterEVR->QueryInterface(IID_PPV_ARGS(&pEVR));
- pEVR->QueryFilterInfo(&filterInfo); // This addref's the pGraph member
+ pEVR->QueryFilterInfo(&filterInfo);
BeginEnumFilters(filterInfo.pGraph, pEF, pBF);
if (CComQIPtr<IAMAudioRendererStats> pAS = pBF) {
@@ -3950,9 +4050,6 @@ HRESULT CSyncAP::BeginStreaming()
EndEnumFilters;
pEVR->GetSyncSource(&m_pRefClock);
- if (filterInfo.pGraph) {
- filterInfo.pGraph->Release();
- }
m_pGenlock->SetMonitor(GetAdapter(m_pD3D, m_hWnd));
m_pGenlock->GetTiming();
@@ -4166,30 +4263,20 @@ STDMETHODIMP CSyncRenderer::NonDelegatingQueryInterface(REFIID riid, void** ppv)
}
CGenlock::CGenlock(double target, double limit, int lineD, int colD, double clockD, UINT mon)
- : targetSyncOffset(target) // Target sync offset, typically around 10 ms
- , controlLimit(limit) // How much sync offset is allowed to drift from target sync offset before control kicks in
- , lineDelta(lineD) // Number of rows used in display frequency adjustment, typically 1 (one)
- , columnDelta(colD) // Number of columns used in display frequency adjustment, typically 1 - 2
- , cycleDelta(clockD) // Delta used in clock speed adjustment. In fractions of 1.0. Typically around 0.001
- , monitor(mon) // The monitor to be adjusted if the display refresh rate is the controlled parameter
- , lowSyncOffset(target - limit)
- , highSyncOffset(target + limit)
- , adjDelta(0)
+ : powerstripTimingExists(false)
+ , liveSource(false)
+ , adjDelta(0) // Number of rows used in display frequency adjustment, typically 1 (one)
+ , lineDelta(lineD) // Number of columns used in display frequency adjustment, typically 1 - 2
+ , columnDelta(colD) // Delta used in clock speed adjustment. In fractions of 1.0. Typically around 0.001
+ , cycleDelta(clockD) // The monitor to be adjusted if the display refresh rate is the controlled parameter
, displayAdjustmentsMade(0)
, clockAdjustmentsMade(0)
- , displayFreqCruise(0.0)
- , displayFreqFaster(0.0)
- , displayFreqSlower(0.0)
- , curDisplayFreq(0.0)
- , psWnd(nullptr)
- , liveSource(false)
- , powerstripTimingExists(false)
- , syncOffsetFifo(64)
- , frameCycleFifo(4)
, totalLines(0)
, totalColumns(0)
, visibleLines(0)
, visibleColumns(0)
+ , syncOffsetFifo(64)
+ , frameCycleFifo(4)
, minSyncOffset(DBL_MAX)
, maxSyncOffset(DBL_MIN)
, syncOffsetAvg(0.0)
@@ -4197,8 +4284,18 @@ CGenlock::CGenlock(double target, double limit, int lineD, int colD, double cloc
, maxFrameCycle(DBL_MIN)
, frameCycleAvg(0.0)
, pixelClock(0)
+ , displayFreqCruise(0.0)
+ , displayFreqSlower(0.0)
+ , displayFreqFaster(0.0)
+ , curDisplayFreq(0.0)
+ , controlLimit(limit) // How much sync offset is allowed to drift from target sync offset before control kicks in
+ , monitor(mon)
+ , psWnd(nullptr)
, displayTiming()
, displayTimingSave()
+ , lowSyncOffset(target - limit)
+ , targetSyncOffset(target) // Target sync offset, typically around 10 ms
+ , highSyncOffset(target + limit)
{
ZeroMemory(faster, MAX_LOADSTRING);
ZeroMemory(cruise, MAX_LOADSTRING);
diff --git a/src/filters/renderer/VideoRenderers/SyncRenderer.h b/src/filters/renderer/VideoRenderers/SyncRenderer.h
index fca1d67dd..44778e177 100644
--- a/src/filters/renderer/VideoRenderers/SyncRenderer.h
+++ b/src/filters/renderer/VideoRenderers/SyncRenderer.h
@@ -1,5 +1,5 @@
/*
- * (C) 2010-2014 see Authors.txt
+ * (C) 2010-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,10 +25,12 @@
#include "SyncAllocatorPresenter.h"
#include "AllocatorCommon.h"
#include <dxva2api.h>
+#include "../../../DSUtil/WinapiFunc.h"
#define VMRBITMAP_UPDATE 0x80000000
#define MAX_PICTURE_SLOTS (60 + 2) // Last 2 for pixels shader!
#define NB_JITTER 126
+#include "AsyncCallback.h"
extern bool g_bNoDuration; // Defined in MainFrm.cpp
extern bool g_bExternalSubtitleTime;
@@ -67,6 +69,8 @@ class CFocusThread;
#define PIXELCLOCK 8
#define UNKNOWN 9
+// Guid to tag IMFSample with a group id
+static const GUID GUID_GROUP_ID = { 0x309e32cc, 0x9b23, 0x4c6c, { 0x86, 0x63, 0xcd, 0xd9, 0xad, 0x49, 0x7f, 0x8a } };
// Guid to tag IMFSample with DirectX surface index
static const GUID GUID_SURFACE_INDEX = { 0x30c8e9f6, 0x415, 0x4b81, { 0xa3, 0x15, 0x1, 0xa, 0xc6, 0xa9, 0xda, 0x19 } };
@@ -153,7 +157,7 @@ namespace GothSync
D3DFORMAT m_DisplayType;
D3DTEXTUREFILTERTYPE m_filter;
D3DCAPS9 m_caps;
- D3DPRESENT_PARAMETERS pp;
+ D3DPRESENT_PARAMETERS m_pp;
bool SettingsNeedResetDevice();
void SendResetRequest();
@@ -171,7 +175,7 @@ namespace GothSync
// Functions to trace timing performance
void SyncStats(LONGLONG syncTime);
void SyncOffsetStats(LONGLONG syncOffset);
- void DrawText(const RECT& rc, const CString& strText, int _Priority);
+ void InitStats();
void DrawStats();
template<int texcoords>
@@ -314,6 +318,8 @@ namespace GothSync
bool ExtractInterlaced(const AM_MEDIA_TYPE* pmt);
CFocusThread* m_FocusThread;
+ HWND m_hFocusWindow;
+
public:
CBaseAP(HWND hWnd, bool bFullscreen, HRESULT& hr, CString& _Error);
~CBaseAP();
@@ -445,23 +451,11 @@ namespace GothSync
STDMETHODIMP GetD3DFullscreen(bool* pfEnabled);
protected:
+ STDMETHODIMP_(bool) Paint(IMFSample* pMFSample);
void OnResetDevice();
MFCLOCK_STATE m_LastClockState;
private:
- // dxva.dll
- typedef HRESULT(__stdcall* PTR_DXVA2CreateDirect3DDeviceManager9)(UINT* pResetToken, IDirect3DDeviceManager9** ppDeviceManager);
- // mf.dll
- typedef HRESULT(__stdcall* PTR_MFCreatePresentationClock)(IMFPresentationClock** ppPresentationClock);
- // evr.dll
- typedef HRESULT(__stdcall* PTR_MFCreateDXSurfaceBuffer)(REFIID riid, IUnknown* punkSurface, BOOL fBottomUpWhenLinear, IMFMediaBuffer** ppBuffer);
- typedef HRESULT(__stdcall* PTR_MFCreateVideoSampleFromSurface)(IUnknown* pUnkSurface, IMFSample** ppSample);
- typedef HRESULT(__stdcall* PTR_MFCreateVideoMediaType)(const MFVIDEOFORMAT* pVideoFormat, IMFVideoMediaType** ppIVideoMediaType);
- // avrt.dll
- typedef HANDLE(__stdcall* PTR_AvSetMmThreadCharacteristicsW)(LPCWSTR TaskName, LPDWORD TaskIndex);
- typedef BOOL (__stdcall* PTR_AvSetMmThreadPriority)(HANDLE AvrtHandle, AVRT_PRIORITY Priority);
- typedef BOOL (__stdcall* PTR_AvRevertMmThreadCharacteristics)(HANDLE AvrtHandle);
-
enum RENDER_STATE {
Started = State_Running,
Stopped = State_Stopped,
@@ -473,7 +467,7 @@ namespace GothSync
CComPtr<IDirect3DDeviceManager9> m_pD3DManager;
CComPtr<IMFTransform> m_pMixer;
CComPtr<IMediaEventSink> m_pSink;
- CComPtr<IMFVideoMediaType> m_pMediaType;
+ CComPtr<IMFMediaType> m_pMediaType;
MFVideoAspectRatioMode m_dwVideoAspectRatioMode;
MFVideoRenderPrefs m_dwVideoRenderPrefs;
COLORREF m_BorderColor;
@@ -499,9 +493,10 @@ namespace GothSync
CCritSec m_SampleQueueLock;
CCritSec m_ImageProcessingLock;
- CInterfaceList<IMFSample, &IID_IMFSample> m_FreeSamples;
- CInterfaceList<IMFSample, &IID_IMFSample> m_ScheduledSamples;
- IMFSample* m_pCurrentDisplaydSample;
+ UINT32 m_nCurrentGroupId;
+ CInterfaceList<IMFSample> m_FreeSamples;
+ CInterfaceList<IMFSample> m_ScheduledSamples;
+ CComPtr<IMFSample> m_pCurrentlyDisplayedSample;
UINT m_nResetToken;
int m_nStepCount;
@@ -520,31 +515,31 @@ namespace GothSync
STDMETHODIMP AdviseSyncClock(ISyncClock* sC);
HRESULT BeginStreaming();
HRESULT GetFreeSample(IMFSample** ppSample);
- HRESULT GetScheduledSample(IMFSample** ppSample, int& _Count);
- void MoveToFreeList(IMFSample* pSample, bool bTail);
- void MoveToScheduledList(IMFSample* pSample, bool _bSorted);
+ HRESULT GetScheduledSample(IMFSample** ppSample, int& count);
+ void AddToFreeList(IMFSample* pSample, bool bTail);
+ void AddToScheduledList(IMFSample* pSample, bool bSorted);
void FlushSamples();
- void FlushSamplesInternal();
+
+ HRESULT TrackSample(IMFSample* pSample);
+
+ // Callback when a video sample is released.
+ HRESULT OnSampleFree(IMFAsyncResult* pResult);
+ AsyncCallback<CSyncAP> m_SampleFreeCallback;
LONGLONG GetMediaTypeMerit(IMFMediaType* pMediaType);
HRESULT RenegotiateMediaType();
HRESULT IsMediaTypeSupported(IMFMediaType* pMixerType);
- HRESULT CreateProposedOutputType(IMFMediaType* pMixerType, IMFMediaType** pType);
+ HRESULT CreateOptimalOutputType(IMFMediaType* pMixerProposedType, IMFMediaType* pMixerInputType, IMFMediaType** ppType);
HRESULT SetMediaType(IMFMediaType* pType);
- // Functions pointers for Vista+ / .NET Framework 3.5 specific library
- HMODULE m_hDXVA2Lib;
- HMODULE m_hEVRLib;
- HMODULE m_hAVRTLib;
-
- PTR_DXVA2CreateDirect3DDeviceManager9 pfDXVA2CreateDirect3DDeviceManager9;
- PTR_MFCreateDXSurfaceBuffer pfMFCreateDXSurfaceBuffer;
- PTR_MFCreateVideoSampleFromSurface pfMFCreateVideoSampleFromSurface;
- PTR_MFCreateVideoMediaType pfMFCreateVideoMediaType;
+ const WinapiFunc<decltype(DXVA2CreateDirect3DDeviceManager9)> fnDXVA2CreateDirect3DDeviceManager9;
+ const WinapiFunc<decltype(MFCreateDXSurfaceBuffer)> fnMFCreateDXSurfaceBuffer;
+ const WinapiFunc<decltype(MFCreateVideoSampleFromSurface)> fnMFCreateVideoSampleFromSurface;
+ const WinapiFunc<decltype(MFCreateMediaType)> fnMFCreateMediaType;
- PTR_AvSetMmThreadCharacteristicsW pfAvSetMmThreadCharacteristicsW;
- PTR_AvSetMmThreadPriority pfAvSetMmThreadPriority;
- PTR_AvRevertMmThreadCharacteristics pfAvRevertMmThreadCharacteristics;
+ const WinapiFunc<decltype(AvSetMmThreadCharacteristicsW)> fnAvSetMmThreadCharacteristicsW;
+ const WinapiFunc<decltype(AvSetMmThreadPriority)> fnAvSetMmThreadPriority;
+ const WinapiFunc<decltype(AvRevertMmThreadCharacteristics)> fnAvRevertMmThreadCharacteristics;
};
class CSyncRenderer:
diff --git a/src/filters/renderer/VideoRenderers/VMR7AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/VMR7AllocatorPresenter.cpp
deleted file mode 100644
index ed2876070..000000000
--- a/src/filters/renderer/VideoRenderers/VMR7AllocatorPresenter.cpp
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include "RenderersSettings.h"
-
-#include "VMR7AllocatorPresenter.h"
-#include "IPinHook.h"
-
-extern bool g_bNoDuration; // Defined in MainFrm.cpp
-extern bool g_bExternalSubtitleTime;
-
-using namespace DSObjects;
-
-//
-// CVMR7AllocatorPresenter
-//
-
-#define MY_USER_ID 0x6ABE51
-
-CVMR7AllocatorPresenter::CVMR7AllocatorPresenter(HWND hWnd, HRESULT& hr)
- : CDX7AllocatorPresenter(hWnd, hr)
- , m_fUseInternalTimer(false)
-{
- if (FAILED(hr)) {
- return;
- }
-
- if (FAILED(hr = m_pSA.CoCreateInstance(CLSID_AllocPresenter))) {
- hr = E_FAIL;
- return;
- }
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::NonDelegatingQueryInterface(REFIID riid, void** ppv)
-{
- CheckPointer(ppv, E_POINTER);
-
- return
- QI(IVMRSurfaceAllocator)
- QI(IVMRImagePresenter)
- QI(IVMRWindowlessControl)
- __super::NonDelegatingQueryInterface(riid, ppv);
-}
-
-HRESULT CVMR7AllocatorPresenter::CreateDevice()
-{
- HRESULT hr = __super::CreateDevice();
- if (FAILED(hr)) {
- return hr;
- }
-
- if (m_pIVMRSurfAllocNotify) {
- HMONITOR hMonitor = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
- if (FAILED(hr = m_pIVMRSurfAllocNotify->ChangeDDrawDevice(m_pDD, hMonitor))) {
- return hr; //return false;
- }
- }
-
- return hr;
-}
-
-void CVMR7AllocatorPresenter::DeleteSurfaces()
-{
- CAutoLock cAutoLock(this);
-
- m_pSA->FreeSurface(MY_USER_ID);
-
- __super::DeleteSurfaces();
-}
-
-// ISubPicAllocatorPresenter
-
-STDMETHODIMP CVMR7AllocatorPresenter::CreateRenderer(IUnknown** ppRenderer)
-{
- CheckPointer(ppRenderer, E_POINTER);
-
- *ppRenderer = nullptr;
- CComPtr<IBaseFilter> pBF;
-
- if (FAILED(pBF.CoCreateInstance(CLSID_VideoMixingRenderer))) {
- return E_FAIL;
- }
-
- CComQIPtr<IVMRFilterConfig> pConfig = pBF;
- if (!pConfig) {
- return E_FAIL;
- }
-
- if (FAILED(pConfig->SetRenderingMode(VMRMode_Renderless))) {
- return E_FAIL;
- }
-
- CComQIPtr<IVMRSurfaceAllocatorNotify> pSAN = pBF;
- if (!pSAN) {
- return E_FAIL;
- }
-
- if (FAILED(pSAN->AdviseSurfaceAllocator(MY_USER_ID, static_cast<IVMRSurfaceAllocator*>(this)))
- || FAILED(AdviseNotify(pSAN))) {
- return E_FAIL;
- }
-
- CComPtr<IPin> pPin = GetFirstPin(pBF);
- CComQIPtr<IMemInputPin> pMemInputPin = pPin;
- m_fUseInternalTimer = HookNewSegmentAndReceive((IPinC*)(IPin*)pPin, (IMemInputPinC*)(IMemInputPin*)pMemInputPin);
-
- *ppRenderer = (IUnknown*)pBF.Detach();
-
- return S_OK;
-}
-
-STDMETHODIMP_(void) CVMR7AllocatorPresenter::SetTime(REFERENCE_TIME rtNow)
-{
- __super::SetTime(rtNow);
- // m_fUseInternalTimer = false;
-}
-
-// IVMRSurfaceAllocator
-
-STDMETHODIMP CVMR7AllocatorPresenter::AllocateSurface(DWORD_PTR dwUserID, VMRALLOCATIONINFO* lpAllocInfo, DWORD* lpdwBuffer, LPDIRECTDRAWSURFACE7* lplpSurface)
-{
- if (!lpAllocInfo || !lpdwBuffer || !lplpSurface) {
- return E_POINTER;
- }
-
- if (!m_pIVMRSurfAllocNotify) {
- return E_FAIL;
- }
-
- HRESULT hr;
-
- DeleteSurfaces();
-
- // HACK: yv12 will fail to blt onto the backbuffer anyway, but if we first
- // allocate it and then let our FreeSurface callback call m_pSA->FreeSurface,
- // then that might stall for about 30 seconds because of some unknown buggy code
- // behind <ddraw surface>->Release()
-
- if (lpAllocInfo->lpHdr->biBitCount < 16) {
- return E_FAIL;
- }
-
- hr = m_pSA->AllocateSurface(dwUserID, lpAllocInfo, lpdwBuffer, lplpSurface);
- if (FAILED(hr)) {
- return hr;
- }
-
- CSize VideoSize(abs(lpAllocInfo->lpHdr->biWidth), abs(lpAllocInfo->lpHdr->biHeight));
- CSize AspectRatio(lpAllocInfo->szAspectRatio.cx, lpAllocInfo->szAspectRatio.cy);
- SetVideoSize(VideoSize, AspectRatio);
-
- if (FAILED(hr = AllocSurfaces())) {
- return hr;
- }
-
- // test if the colorspace is acceptable
- if (FAILED(hr = m_pVideoSurface->Blt(nullptr, *lplpSurface, nullptr, DDBLT_WAIT, nullptr))) {
- DeleteSurfaces();
- return hr;
- }
-
- DDBLTFX fx;
- INITDDSTRUCT(fx);
- fx.dwFillColor = 0;
- m_pVideoSurface->Blt(nullptr, nullptr, nullptr, DDBLT_WAIT | DDBLT_COLORFILL, &fx);
-
- return hr;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::FreeSurface(DWORD_PTR dwUserID)
-{
- DeleteSurfaces();
- return S_OK;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::PrepareSurface(DWORD_PTR dwUserID, IDirectDrawSurface7* lpSurface, DWORD dwSurfaceFlags)
-{
- SetThreadName(DWORD(-1), "CVMR7AllocatorPresenter");
-
- CheckPointer(lpSurface, E_POINTER);
-
- // FIXME: sometimes the msmpeg4/divx3/wmv decoder wants to reuse our
- // surface (expects it to point to the same mem every time), and to avoid
- // problems we can't call m_pSA->PrepareSurface (flips? clears?).
- return S_OK;
- /*
- return m_pSA->PrepareSurface(dwUserID, lpSurface, dwSurfaceFlags);
- */
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::AdviseNotify(IVMRSurfaceAllocatorNotify* lpIVMRSurfAllocNotify)
-{
- CAutoLock cAutoLock(this);
-
- m_pIVMRSurfAllocNotify = lpIVMRSurfAllocNotify;
- HRESULT hr;
- HMONITOR hMonitor = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
-
- if (FAILED(hr = m_pIVMRSurfAllocNotify->SetDDrawDevice(m_pDD, hMonitor))) {
- return hr;
- }
-
- return m_pSA->AdviseNotify(lpIVMRSurfAllocNotify);
-}
-
-// IVMRImagePresenter
-
-STDMETHODIMP CVMR7AllocatorPresenter::StartPresenting(DWORD_PTR dwUserID)
-{
- if (!m_bPendingResetDevice) {
- ASSERT(m_pD3DDev);
- }
-
- CAutoLock cAutoLock(this);
-
- m_bIsRendering = true;
-
- return m_pD3DDev ? S_OK : E_FAIL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::StopPresenting(DWORD_PTR dwUserID)
-{
- m_bIsRendering = false;
-
- return S_OK;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::PresentImage(DWORD_PTR dwUserID, VMRPRESENTATIONINFO* lpPresInfo)
-{
- if (!lpPresInfo || !lpPresInfo->lpSurf) {
- return E_POINTER;
- }
-
- CAutoLock cAutoLock(this);
-
- if (!m_bPendingResetDevice) {
- m_pVideoSurface->Blt(nullptr, lpPresInfo->lpSurf, nullptr, DDBLT_WAIT, nullptr);
- }
-
- if (lpPresInfo->rtEnd > lpPresInfo->rtStart) {
- REFERENCE_TIME rtTimePerFrame = lpPresInfo->rtEnd - lpPresInfo->rtStart;
- m_fps = 10000000.0 / rtTimePerFrame;
- } else {
- TRACE(_T("VMR7: Invalid frame timestamps (%s - %s), not setting the FPS. The timestamp from the pin hook will be used anyway (%s).\n"),
- ReftimeToString(lpPresInfo->rtStart), ReftimeToString(lpPresInfo->rtEnd), ReftimeToString(g_tSampleStart));
- }
-
- if (m_pSubPicQueue) {
- m_pSubPicQueue->SetFPS(m_fps);
-
- if (m_fUseInternalTimer && !g_bExternalSubtitleTime) {
- __super::SetTime(g_tSegmentStart + g_tSampleStart);
- }
- }
-
- CSize VideoSize = m_nativeVideoSize;
- int arx = lpPresInfo->szAspectRatio.cx, ary = lpPresInfo->szAspectRatio.cy;
- if (arx > 0 && ary > 0) {
- VideoSize.cx = VideoSize.cy * arx / ary;
- }
- if (VideoSize != GetVideoSize()) {
- SetVideoSize(m_nativeVideoSize, CSize(lpPresInfo->szAspectRatio));
- AfxGetApp()->m_pMainWnd->PostMessage(WM_REARRANGERENDERLESS);
- }
-
- Paint(true);
-
- return S_OK;
-}
-
-// IVMRWindowlessControl
-//
-// It is only implemented (partially) for the dvd navigator's
-// menu handling, which needs to know a few things about the
-// location of our window.
-
-STDMETHODIMP CVMR7AllocatorPresenter::GetNativeVideoSize(LONG* lpWidth, LONG* lpHeight, LONG* lpARWidth, LONG* lpARHeight)
-{
- CSize VideoSize = GetVideoSize(); // DVD Nav. bug workaround fix
-
- if (lpWidth) {
- *lpWidth = VideoSize.cx;
- }
- if (lpHeight) {
- *lpHeight = VideoSize.cy;
- }
- if (lpARWidth) {
- *lpARWidth = m_aspectRatio.cx;
- }
- if (lpARHeight) {
- *lpARHeight = m_aspectRatio.cy;
- }
- return S_OK;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::GetMinIdealVideoSize(LONG* lpWidth, LONG* lpHeight)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::GetMaxIdealVideoSize(LONG* lpWidth, LONG* lpHeight)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::SetVideoPosition(const LPRECT lpSRCRect, const LPRECT lpDSTRect)
-{
- return E_NOTIMPL; // we have our own method for this
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::GetVideoPosition(LPRECT lpSRCRect, LPRECT lpDSTRect)
-{
- CopyRect(lpSRCRect, CRect(CPoint(0, 0), m_nativeVideoSize));
- CopyRect(lpDSTRect, &m_videoRect);
- // DVD Nav. bug workaround fix
- GetNativeVideoSize(&lpSRCRect->right, &lpSRCRect->bottom, nullptr, nullptr);
- return S_OK;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::GetAspectRatioMode(DWORD* lpAspectRatioMode)
-{
- if (lpAspectRatioMode) {
- *lpAspectRatioMode = AM_ARMODE_STRETCHED;
- }
- return S_OK;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::SetAspectRatioMode(DWORD AspectRatioMode)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::SetVideoClippingWindow(HWND hwnd)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::RepaintVideo(HWND hwnd, HDC hdc)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::DisplayModeChanged()
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::GetCurrentImage(BYTE** lpDib)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::SetBorderColor(COLORREF Clr)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::GetBorderColor(COLORREF* lpClr)
-{
- if (lpClr) {
- *lpClr = 0;
- }
- return S_OK;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::SetColorKey(COLORREF Clr)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP CVMR7AllocatorPresenter::GetColorKey(COLORREF* lpClr)
-{
- return E_NOTIMPL;
-}
diff --git a/src/filters/renderer/VideoRenderers/VMR7AllocatorPresenter.h b/src/filters/renderer/VideoRenderers/VMR7AllocatorPresenter.h
deleted file mode 100644
index fe9a8b7a1..000000000
--- a/src/filters/renderer/VideoRenderers/VMR7AllocatorPresenter.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include "DX7AllocatorPresenter.h"
-
-namespace DSObjects
-{
-
- class CVMR7AllocatorPresenter
- : public CDX7AllocatorPresenter
- , public IVMRSurfaceAllocator
- , public IVMRImagePresenter
- , public IVMRWindowlessControl
- {
- CComPtr<IVMRSurfaceAllocatorNotify> m_pIVMRSurfAllocNotify;
- CComPtr<IVMRSurfaceAllocator> m_pSA;
-
- HRESULT CreateDevice();
- void DeleteSurfaces();
-
- bool m_fUseInternalTimer;
-
- public:
- CVMR7AllocatorPresenter(HWND hWnd, HRESULT& hr);
-
- DECLARE_IUNKNOWN
- STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
-
- // ISubPicAllocatorPresenter
- STDMETHODIMP CreateRenderer(IUnknown** ppRenderer);
- STDMETHODIMP_(void) SetTime(REFERENCE_TIME rtNow);
-
- // IVMRSurfaceAllocator
- STDMETHODIMP AllocateSurface(DWORD_PTR dwUserID, VMRALLOCATIONINFO* lpAllocInfo, DWORD* lpdwBuffer, LPDIRECTDRAWSURFACE7* lplpSurface);
- STDMETHODIMP FreeSurface(DWORD_PTR dwUserID);
- STDMETHODIMP PrepareSurface(DWORD_PTR dwUserID, IDirectDrawSurface7* lpSurface, DWORD dwSurfaceFlags);
- STDMETHODIMP AdviseNotify(IVMRSurfaceAllocatorNotify* lpIVMRSurfAllocNotify);
-
- // IVMRImagePresenter
- STDMETHODIMP StartPresenting(DWORD_PTR dwUserID);
- STDMETHODIMP StopPresenting(DWORD_PTR dwUserID);
- STDMETHODIMP PresentImage(DWORD_PTR dwUserID, VMRPRESENTATIONINFO* lpPresInfo);
-
- // IVMRWindowlessControl
- STDMETHODIMP GetNativeVideoSize(LONG* lpWidth, LONG* lpHeight, LONG* lpARWidth, LONG* lpARHeight);
- STDMETHODIMP GetMinIdealVideoSize(LONG* lpWidth, LONG* lpHeight);
- STDMETHODIMP GetMaxIdealVideoSize(LONG* lpWidth, LONG* lpHeight);
- STDMETHODIMP SetVideoPosition(const LPRECT lpSRCRect, const LPRECT lpDSTRect);
- STDMETHODIMP GetVideoPosition(LPRECT lpSRCRect, LPRECT lpDSTRect);
- STDMETHODIMP GetAspectRatioMode(DWORD* lpAspectRatioMode);
- STDMETHODIMP SetAspectRatioMode(DWORD AspectRatioMode);
- STDMETHODIMP SetVideoClippingWindow(HWND hwnd);
- STDMETHODIMP RepaintVideo(HWND hwnd, HDC hdc);
- STDMETHODIMP DisplayModeChanged();
- STDMETHODIMP GetCurrentImage(BYTE** lpDib);
- STDMETHODIMP SetBorderColor(COLORREF Clr);
- STDMETHODIMP GetBorderColor(COLORREF* lpClr);
- STDMETHODIMP SetColorKey(COLORREF Clr);
- STDMETHODIMP GetColorKey(COLORREF* lpClr);
- };
-
-}
diff --git a/src/filters/renderer/VideoRenderers/VMR9AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/VMR9AllocatorPresenter.cpp
index a8b32264f..5a1e43c92 100644
--- a/src/filters/renderer/VideoRenderers/VMR9AllocatorPresenter.cpp
+++ b/src/filters/renderer/VideoRenderers/VMR9AllocatorPresenter.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -422,14 +422,9 @@ STDMETHODIMP CVMR9AllocatorPresenter::PresentImage(DWORD_PTR dwUserID, VMR9Prese
}
}
- CSize VideoSize = GetVisibleVideoSize();
- int arx = lpPresInfo->szAspectRatio.cx;
- int ary = lpPresInfo->szAspectRatio.cy;
- if (arx > 0 && ary > 0) {
- VideoSize.cx = VideoSize.cy * arx / ary;
- }
- if (VideoSize != GetVideoSize()) {
- SetVideoSize(m_nativeVideoSize, CSize(arx, ary));
+ CSize ar(lpPresInfo->szAspectRatio.cx, lpPresInfo->szAspectRatio.cy);
+ if (ar != m_aspectRatio) {
+ SetVideoSize(m_nativeVideoSize, ar);
AfxGetApp()->m_pMainWnd->PostMessage(WM_REARRANGERENDERLESS);
}
diff --git a/src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj b/src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj
index 017d4186e..a08743f1c 100644
--- a/src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj
+++ b/src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,71 +34,26 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;NO_VERSION_REV_NEEDED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;NO_VERSION_REV_NEEDED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;NO_VERSION_REV_NEEDED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;NO_VERSION_REV_NEEDED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Lib>
<AdditionalDependencies>d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories Condition="'$(Platform)'=='Win32'">$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories Condition="'$(Platform)'=='x64'">$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="AllocatorCommon.cpp" />
- <ClCompile Include="AllocatorCommon7.cpp" />
<ClCompile Include="D3DFont.cpp" />
<ClCompile Include="Dither.cpp" />
- <ClCompile Include="DX7AllocatorPresenter.cpp" />
<ClCompile Include="DX9AllocatorPresenter.cpp" />
<ClCompile Include="DX9RenderingEngine.cpp" />
<ClCompile Include="DXRAllocatorPresenter.cpp" />
@@ -124,25 +64,22 @@
<ClCompile Include="madVRAllocatorPresenter.cpp" />
<ClCompile Include="OuterEVR.cpp" />
<ClCompile Include="OuterVMR.cpp" />
+ <ClCompile Include="PixelShaderCache.cpp" />
<ClCompile Include="PixelShaderCompiler.cpp" />
- <ClCompile Include="QT7AllocatorPresenter.cpp" />
<ClCompile Include="QT9AllocatorPresenter.cpp" />
<ClCompile Include="RenderersSettings.cpp" />
- <ClCompile Include="RM7AllocatorPresenter.cpp" />
<ClCompile Include="RM9AllocatorPresenter.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="SyncRenderer.cpp" />
- <ClCompile Include="VMR7AllocatorPresenter.cpp" />
<ClCompile Include="VMR9AllocatorPresenter.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="AllocatorCommon.h" />
- <ClInclude Include="AllocatorCommon7.h" />
+ <ClInclude Include="AsyncCallback.h" />
<ClInclude Include="D3DFont.h" />
<ClInclude Include="Dither.h" />
- <ClInclude Include="DX7AllocatorPresenter.h" />
<ClInclude Include="DX9AllocatorPresenter.h" />
<ClInclude Include="DX9RenderingEngine.h" />
<ClInclude Include="DXRAllocatorPresenter.h" />
@@ -154,16 +91,14 @@
<ClInclude Include="madVRAllocatorPresenter.h" />
<ClInclude Include="OuterEVR.h" />
<ClInclude Include="OuterVMR.h" />
+ <ClInclude Include="PixelShaderCache.h" />
<ClInclude Include="PixelShaderCompiler.h" />
- <ClInclude Include="QT7AllocatorPresenter.h" />
<ClInclude Include="QT9AllocatorPresenter.h" />
<ClInclude Include="RenderersSettings.h" />
- <ClInclude Include="RM7AllocatorPresenter.h" />
<ClInclude Include="RM9AllocatorPresenter.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="SyncAllocatorPresenter.h" />
<ClInclude Include="SyncRenderer.h" />
- <ClInclude Include="VMR7AllocatorPresenter.h" />
<ClInclude Include="VMR9AllocatorPresenter.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
diff --git a/src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj.filters b/src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj.filters
index 9a21a9b7d..98c44fd6a 100644
--- a/src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj.filters
+++ b/src/filters/renderer/VideoRenderers/VideoRenderers.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{91abd446-f660-4356-a9fe-c6f7f9dee6cb}</UniqueIdentifier>
@@ -14,15 +14,9 @@
<ClCompile Include="AllocatorCommon.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="AllocatorCommon7.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="D3DFont.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="DX7AllocatorPresenter.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="DX9AllocatorPresenter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -44,18 +38,12 @@
<ClCompile Include="PixelShaderCompiler.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="QT7AllocatorPresenter.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="QT9AllocatorPresenter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RenderersSettings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="RM7AllocatorPresenter.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="RM9AllocatorPresenter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -65,9 +53,6 @@
<ClCompile Include="SyncRenderer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="VMR7AllocatorPresenter.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="VMR9AllocatorPresenter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -86,20 +71,17 @@
<ClCompile Include="FocusThread.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="PixelShaderCache.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="AllocatorCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="AllocatorCommon7.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="D3DFont.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="DX7AllocatorPresenter.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="DX9AllocatorPresenter.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -121,18 +103,12 @@
<ClInclude Include="PixelShaderCompiler.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="QT7AllocatorPresenter.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="QT9AllocatorPresenter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="RenderersSettings.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="RM7AllocatorPresenter.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="RM9AllocatorPresenter.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -145,9 +121,6 @@
<ClInclude Include="SyncRenderer.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="VMR7AllocatorPresenter.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="VMR9AllocatorPresenter.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -169,5 +142,11 @@
<ClInclude Include="FocusThread.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="AsyncCallback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="PixelShaderCache.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.cpp
index 899aeba1e..bce285688 100644
--- a/src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.cpp
+++ b/src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,23 +23,16 @@
#include "../../../SubPic/DX9SubPic.h"
#include "../../../SubPic/SubPicQueueImpl.h"
#include "RenderersSettings.h"
-#include "moreuuids.h"
+#include <initguid.h>
+#include <mvrInterfaces.h>
-using namespace DSObjects;
-#define ShaderStage_PreScale 0
-#define ShaderStage_PostScale 1
+using namespace DSObjects;
extern bool g_bExternalSubtitleTime;
-//
-// CmadVRAllocatorPresenter
-//
-
CmadVRAllocatorPresenter::CmadVRAllocatorPresenter(HWND hWnd, HRESULT& hr, CString& _Error)
: CSubPicAllocatorPresenterImpl(hWnd, hr, &_Error)
- , m_ScreenSize(0, 0)
- , m_bIsFullscreen(false)
{
if (FAILED(hr)) {
_Error += L"ISubPicAllocatorPresenterImpl failed\n";
@@ -51,53 +44,47 @@ CmadVRAllocatorPresenter::CmadVRAllocatorPresenter(HWND hWnd, HRESULT& hr, CStri
CmadVRAllocatorPresenter::~CmadVRAllocatorPresenter()
{
- if (m_pSRCB) {
- // nasty, but we have to let it know about our death somehow
- ((CSubRenderCallback*)(ISubRenderCallback2*)m_pSRCB)->SetDXRAP(nullptr);
- }
-
// the order is important here
m_pSubPicQueue = nullptr;
m_pAllocator = nullptr;
- m_pDXR = nullptr;
+ m_pMVR = nullptr;
}
STDMETHODIMP CmadVRAllocatorPresenter::NonDelegatingQueryInterface(REFIID riid, void** ppv)
{
- /*
- if (riid == __uuidof(IVideoWindow))
- return GetInterface((IVideoWindow*)this, ppv);
- if (riid == __uuidof(IBasicVideo))
- return GetInterface((IBasicVideo*)this, ppv);
- if (riid == __uuidof(IBasicVideo2))
- return GetInterface((IBasicVideo2*)this, ppv);
- */
- /*
- if (riid == __uuidof(IVMRWindowlessControl))
- return GetInterface((IVMRWindowlessControl*)this, ppv);
- */
-
- if (riid != IID_IUnknown && m_pDXR) {
- if (SUCCEEDED(m_pDXR->QueryInterface(riid, ppv))) {
+ if (riid != IID_IUnknown && m_pMVR) {
+ if (SUCCEEDED(m_pMVR->QueryInterface(riid, ppv))) {
return S_OK;
}
}
- return __super::NonDelegatingQueryInterface(riid, ppv);
+ return QI(ISubRenderCallback)
+ QI(ISubRenderCallback2)
+ QI(ISubRenderCallback3)
+ QI(ISubRenderCallback4)
+ __super::NonDelegatingQueryInterface(riid, ppv);
}
+// ISubRenderCallback
+
HRESULT CmadVRAllocatorPresenter::SetDevice(IDirect3DDevice9* pD3DDev)
{
- const CRenderersSettings& r = GetRenderersSettings();
-
if (!pD3DDev) {
// release all resources
m_pSubPicQueue = nullptr;
m_pAllocator = nullptr;
+ __super::SetPosition(CRect(), CRect());
return S_OK;
}
- InitMaxSubtitleTextureSize(r.subPicQueueSettings.nMaxRes, m_ScreenSize);
+ CSize screenSize;
+ MONITORINFO mi = { sizeof(MONITORINFO) };
+ if (GetMonitorInfo(MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST), &mi)) {
+ screenSize.SetSize(mi.rcMonitor.right - mi.rcMonitor.left, mi.rcMonitor.bottom - mi.rcMonitor.top);
+ }
+
+ const CRenderersSettings& r = GetRenderersSettings();
+ InitMaxSubtitleTextureSize(r.subPicQueueSettings.nMaxRes, screenSize);
if (m_pAllocator) {
m_pAllocator->ChangeDevice(pD3DDev);
@@ -107,7 +94,7 @@ HRESULT CmadVRAllocatorPresenter::SetDevice(IDirect3DDevice9* pD3DDev)
HRESULT hr = S_OK;
if (!m_pSubPicQueue) {
- CAutoLock(this);
+ CAutoLock cAutoLock(this);
m_pSubPicQueue = r.subPicQueueSettings.nSize > 0
? (ISubPicQueue*)DEBUG_NEW CSubPicQueue(r.subPicQueueSettings, m_pAllocator, &hr)
: (ISubPicQueue*)DEBUG_NEW CSubPicQueueNoThread(r.subPicQueueSettings, m_pAllocator, &hr);
@@ -122,21 +109,28 @@ HRESULT CmadVRAllocatorPresenter::SetDevice(IDirect3DDevice9* pD3DDev)
return hr;
}
-HRESULT CmadVRAllocatorPresenter::Render(
- REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, REFERENCE_TIME atpf,
- int left, int top, int right, int bottom, int width, int height)
+// ISubRenderCallback3
+
+HRESULT CmadVRAllocatorPresenter::RenderEx3(REFERENCE_TIME rtStart,
+ REFERENCE_TIME /*rtStop*/,
+ REFERENCE_TIME atpf,
+ RECT croppedVideoRect,
+ RECT /*originalVideoRect*/,
+ RECT viewportRect,
+ const double videoStretchFactor /*= 1.0*/,
+ int xOffsetInPixels /*= 0*/, DWORD flags /*= 0*/)
{
- CRect wndRect(0, 0, width, height);
- CRect videoRect(left, top, right, bottom);
- __super::SetPosition(wndRect, videoRect); // needed? should be already set by the player
+ CheckPointer(m_pSubPicQueue, E_UNEXPECTED);
+
+ __super::SetPosition(viewportRect, croppedVideoRect);
if (!g_bExternalSubtitleTime) {
SetTime(rtStart);
}
- if (atpf > 0 && m_pSubPicQueue) {
+ if (atpf > 0) {
m_fps = 10000000.0 / atpf;
m_pSubPicQueue->SetFPS(m_fps);
}
- AlphaBltSubPic(wndRect, videoRect);
+ AlphaBltSubPic(viewportRect, croppedVideoRect, nullptr, videoStretchFactor, xOffsetInPixels);
return S_OK;
}
@@ -145,60 +139,47 @@ HRESULT CmadVRAllocatorPresenter::Render(
STDMETHODIMP CmadVRAllocatorPresenter::CreateRenderer(IUnknown** ppRenderer)
{
CheckPointer(ppRenderer, E_POINTER);
+ ASSERT(!m_pMVR);
- if (m_pDXR) {
- return E_UNEXPECTED;
- }
- m_pDXR.CoCreateInstance(CLSID_madVR, GetOwner());
- if (!m_pDXR) {
- return E_FAIL;
- }
+ HRESULT hr = S_FALSE;
- CComQIPtr<ISubRender> pSR = m_pDXR;
- if (!pSR) {
- m_pDXR = nullptr;
- return E_FAIL;
- }
+ CHECK_HR(m_pMVR.CoCreateInstance(CLSID_madVR, GetOwner()));
- m_pSRCB = DEBUG_NEW CSubRenderCallback(this);
- if (FAILED(pSR->SetCallback(m_pSRCB))) {
- m_pDXR = nullptr;
- return E_FAIL;
+ if (CComQIPtr<ISubRender> pSR = m_pMVR) {
+ VERIFY(SUCCEEDED(pSR->SetCallback(this)));
}
(*ppRenderer = (IUnknown*)(INonDelegatingUnknown*)(this))->AddRef();
- MONITORINFO mi;
- mi.cbSize = sizeof(MONITORINFO);
- if (GetMonitorInfo(MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST), &mi)) {
- m_ScreenSize.SetSize(mi.rcMonitor.right - mi.rcMonitor.left, mi.rcMonitor.bottom - mi.rcMonitor.top);
- }
-
return S_OK;
}
STDMETHODIMP_(void) CmadVRAllocatorPresenter::SetPosition(RECT w, RECT v)
{
- if (CComQIPtr<IBasicVideo> pBV = m_pDXR) {
+ if (CComQIPtr<IBasicVideo> pBV = m_pMVR) {
pBV->SetDefaultSourcePosition();
pBV->SetDestinationPosition(v.left, v.top, v.right - v.left, v.bottom - v.top);
}
- if (CComQIPtr<IVideoWindow> pVW = m_pDXR) {
+ if (CComQIPtr<IVideoWindow> pVW = m_pMVR) {
pVW->SetWindowPosition(w.left, w.top, w.right - w.left, w.bottom - w.top);
}
+
+ SetVideoSize(GetVideoSize(), GetVideoSize(true));
}
STDMETHODIMP_(SIZE) CmadVRAllocatorPresenter::GetVideoSize(bool bCorrectAR) const
{
- SIZE size = {0, 0};
+ CSize size;
if (!bCorrectAR) {
- if (CComQIPtr<IBasicVideo> pBV = m_pDXR) {
+ if (CComQIPtr<IBasicVideo> pBV = m_pMVR) {
+ // Final size of the video, after all scaling and cropping operations
+ // This is also aspect ratio adjusted
pBV->GetVideoSize(&size.cx, &size.cy);
}
} else {
- if (CComQIPtr<IBasicVideo2> pBV2 = m_pDXR) {
+ if (CComQIPtr<IBasicVideo2> pBV2 = m_pMVR) {
pBV2->GetPreferredAspectRatio(&size.cx, &size.cy);
}
}
@@ -206,42 +187,47 @@ STDMETHODIMP_(SIZE) CmadVRAllocatorPresenter::GetVideoSize(bool bCorrectAR) cons
return size;
}
-STDMETHODIMP_(bool) CmadVRAllocatorPresenter::Paint(bool bAll)
+STDMETHODIMP_(bool) CmadVRAllocatorPresenter::Paint(bool /*bAll*/)
{
- return false; // TODO
+ if (CComQIPtr<IMadVRCommand> pMVRC = m_pMVR) {
+ return SUCCEEDED(pMVRC->SendCommand("redraw"));
+ }
+ return false;
}
STDMETHODIMP CmadVRAllocatorPresenter::GetDIB(BYTE* lpDib, DWORD* size)
{
HRESULT hr = E_NOTIMPL;
- if (CComQIPtr<IBasicVideo> pBV = m_pDXR) {
+ if (CComQIPtr<IBasicVideo> pBV = m_pMVR) {
hr = pBV->GetCurrentImage((long*)size, (long*)lpDib);
}
return hr;
}
-STDMETHODIMP CmadVRAllocatorPresenter::SetPixelShader(LPCSTR pSrcData, LPCSTR pTarget)
+STDMETHODIMP CmadVRAllocatorPresenter::SetPixelShader2(LPCSTR pSrcData, LPCSTR pTarget, bool bScreenSpace)
{
HRESULT hr = E_NOTIMPL;
- if (CComQIPtr<IMadVRExternalPixelShaders> pEPS = m_pDXR) {
+
+ if (CComQIPtr<IMadVRExternalPixelShaders> pMVREPS = m_pMVR) {
if (!pSrcData && !pTarget) {
- hr = pEPS->ClearPixelShaders(false);
+ hr = pMVREPS->ClearPixelShaders(bScreenSpace ? ShaderStage_PostScale : ShaderStage_PreScale);
} else {
- hr = pEPS->AddPixelShader(pSrcData, pTarget, ShaderStage_PreScale, nullptr);
+ hr = pMVREPS->AddPixelShader(pSrcData, pTarget, bScreenSpace ? ShaderStage_PostScale : ShaderStage_PreScale, nullptr);
}
}
+
return hr;
}
-STDMETHODIMP CmadVRAllocatorPresenter::SetPixelShader2(LPCSTR pSrcData, LPCSTR pTarget, bool bScreenSpace)
+// ISubPicAllocatorPresenter2
+
+STDMETHODIMP_(bool) CmadVRAllocatorPresenter::IsRendering()
{
- HRESULT hr = E_NOTIMPL;
- if (CComQIPtr<IMadVRExternalPixelShaders> pEPS = m_pDXR) {
- if (!pSrcData && !pTarget) {
- hr = pEPS->ClearPixelShaders(bScreenSpace);
- } else {
- hr = pEPS->AddPixelShader(pSrcData, pTarget, bScreenSpace ? ShaderStage_PostScale : ShaderStage_PreScale, nullptr);
+ if (CComQIPtr<IMadVRInfo> pMVRI = m_pMVR) {
+ int playbackState;
+ if (SUCCEEDED(pMVRI->GetInt("playbackState", &playbackState))) {
+ return playbackState == State_Running;
}
}
- return hr;
+ return false;
}
diff --git a/src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.h b/src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.h
index b72901034..436fa635e 100644
--- a/src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.h
+++ b/src/filters/renderer/VideoRenderers/madVRAllocatorPresenter.h
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,89 +20,64 @@
#pragma once
-#include "AllocatorCommon.h"
-#include "../../../SubPic/SubPicAllocatorPresenterImpl.h"
-#include "../../../SubPic/ISubRender.h"
-
-#include <mvrInterfaces.h>
+#include "../SubPic/SubPicAllocatorPresenterImpl.h"
+#include "../SubPic/ISubRender.h"
namespace DSObjects
{
- class CmadVRAllocatorPresenter
- : public CSubPicAllocatorPresenterImpl
+ class CmadVRAllocatorPresenter : public CSubPicAllocatorPresenterImpl, ISubRenderCallback4
{
- class CSubRenderCallback : public CUnknown, public ISubRenderCallback2, public CCritSec
- {
- CmadVRAllocatorPresenter* m_pDXRAP;
-
- public:
- CSubRenderCallback(CmadVRAllocatorPresenter* pDXRAP)
- : CUnknown(_T("CSubRender"), nullptr)
- , m_pDXRAP(pDXRAP) {
- }
-
- DECLARE_IUNKNOWN
- STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv) {
- return
- QI(ISubRenderCallback)
- QI(ISubRenderCallback2)
- __super::NonDelegatingQueryInterface(riid, ppv);
- }
-
- void SetDXRAP(CmadVRAllocatorPresenter* pDXRAP) {
- CAutoLock cAutoLock(this);
- m_pDXRAP = pDXRAP;
- }
-
- // ISubRenderCallback
-
- STDMETHODIMP SetDevice(IDirect3DDevice9* pD3DDev) {
- CAutoLock cAutoLock(this);
- return m_pDXRAP ? m_pDXRAP->SetDevice(pD3DDev) : E_UNEXPECTED;
- }
-
- STDMETHODIMP Render(REFERENCE_TIME rtStart, int left, int top, int right, int bottom, int width, int height) {
- CAutoLock cAutoLock(this);
- return m_pDXRAP ? m_pDXRAP->Render(rtStart, 0, 0, left, top, right, bottom, width, height) : E_UNEXPECTED;
- }
-
- // ISubRendererCallback2
-
- STDMETHODIMP RenderEx(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, REFERENCE_TIME AvgTimePerFrame, int left, int top, int right, int bottom, int width, int height) {
- CAutoLock cAutoLock(this);
- return m_pDXRAP ? m_pDXRAP->Render(rtStart, rtStop, AvgTimePerFrame, left, top, right, bottom, width, height) : E_UNEXPECTED;
- }
- };
-
- CComPtr<IUnknown> m_pDXR;
- CComPtr<ISubRenderCallback2> m_pSRCB;
- CSize m_ScreenSize;
- bool m_bIsFullscreen;
+ CComPtr<IUnknown> m_pMVR;
public:
CmadVRAllocatorPresenter(HWND hWnd, HRESULT& hr, CString& _Error);
virtual ~CmadVRAllocatorPresenter();
DECLARE_IUNKNOWN
- STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
+ STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv) override;
- HRESULT SetDevice(IDirect3DDevice9* pD3DDev);
- HRESULT Render(
- REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, REFERENCE_TIME atpf,
- int left, int top, int bottom, int right, int width, int height);
+ // ISubRenderCallback
+ STDMETHODIMP SetDevice(IDirect3DDevice9* pD3DDev) override;
+ STDMETHODIMP Render(REFERENCE_TIME rtStart, int left, int top, int right,
+ int bottom, int width, int height) override {
+ return RenderEx(rtStart, 0, 0, left, top, right, bottom, width, height);
+ }
+
+ // ISubRenderCallback2
+ STDMETHODIMP RenderEx(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, REFERENCE_TIME atpf,
+ int left, int top, int right, int bottom, int width, int height) override {
+ return RenderEx2(rtStart, rtStop, atpf, { left, top, right, bottom },
+ { left, top, right, bottom }, { 0, 0, width, height });
+ }
+
+ // ISubRenderCallback3
+ STDMETHODIMP RenderEx2(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop,
+ REFERENCE_TIME atpf, RECT croppedVideoRect,
+ RECT originalVideoRect, RECT viewportRect,
+ const double videoStretchFactor = 1.0) override {
+ return RenderEx3(std::move(rtStart), std::move(rtStop), std::move(atpf), std::move(croppedVideoRect),
+ std::move(originalVideoRect), std::move(viewportRect), std::move(videoStretchFactor));
+ }
+
+ // ISubRenderCallback4
+ STDMETHODIMP RenderEx3(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop,
+ REFERENCE_TIME atpf, RECT croppedVideoRect,
+ RECT originalVideoRect, RECT viewportRect,
+ const double videoStretchFactor = 1.0,
+ int xOffsetInPixels = 0, DWORD flags = 0) override;
// ISubPicAllocatorPresenter
- STDMETHODIMP CreateRenderer(IUnknown** ppRenderer);
- STDMETHODIMP_(void) SetPosition(RECT w, RECT v);
- STDMETHODIMP_(SIZE) GetVideoSize(bool bCorrectAR) const;
- STDMETHODIMP_(bool) Paint(bool bAll);
- STDMETHODIMP GetDIB(BYTE* lpDib, DWORD* size);
- STDMETHODIMP SetPixelShader(LPCSTR pSrcData, LPCSTR pTarget);
- STDMETHODIMP SetPixelShader2(LPCSTR pSrcData, LPCSTR pTarget, bool bScreenSpace);
+ STDMETHODIMP CreateRenderer(IUnknown** ppRenderer) override;
+ STDMETHODIMP_(void) SetPosition(RECT w, RECT v) override;
+ STDMETHODIMP_(SIZE) GetVideoSize(bool bCorrectAR = true) const override;
+ STDMETHODIMP_(bool) Paint(bool bAll) override;
+ STDMETHODIMP GetDIB(BYTE* lpDib, DWORD* size) override;
+ STDMETHODIMP SetPixelShader(LPCSTR pSrcData, LPCSTR pTarget) override {
+ return SetPixelShader2(pSrcData, pTarget, false);
+ }
+ STDMETHODIMP SetPixelShader2(LPCSTR pSrcData, LPCSTR pTarget, bool bScreenSpace) override;
// ISubPicAllocatorPresenter2
- STDMETHODIMP_(bool) IsRendering() {
- return false; // For testing
- }
+ STDMETHODIMP_(bool) IsRendering() override;
};
}
diff --git a/src/filters/source/BaseSource/BaseSource.cpp b/src/filters/source/BaseSource/BaseSource.cpp
index a9a4d8f78..df2549943 100644
--- a/src/filters/source/BaseSource/BaseSource.cpp
+++ b/src/filters/source/BaseSource/BaseSource.cpp
@@ -34,11 +34,11 @@
CBaseStream::CBaseStream(TCHAR* name, CSource* pParent, HRESULT* phr)
: CSourceStream(name, phr, pParent, L"Output")
, CSourceSeeking(name, (IPin*)this, phr, &m_cSharedState)
- , m_bDiscontinuity(FALSE)
- , m_bFlushing(FALSE)
, m_AvgTimePerFrame(0)
, m_rtSampleTime(0)
, m_rtPosition(0)
+ , m_bDiscontinuity(FALSE)
+ , m_bFlushing(FALSE)
{
CAutoLock cAutoLock(&m_cSharedState);
m_rtDuration = m_rtStop = 0;
diff --git a/src/filters/source/BaseSource/BaseSource.vcxproj b/src/filters/source/BaseSource/BaseSource.vcxproj
index a9d3bac4d..22eb871f7 100644
--- a/src/filters/source/BaseSource/BaseSource.vcxproj
+++ b/src/filters/source/BaseSource/BaseSource.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,44 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/src/filters/source/BaseSource/BaseSource.vcxproj.filters b/src/filters/source/BaseSource/BaseSource.vcxproj.filters
index 82f2cf98f..5bb15a894 100644
--- a/src/filters/source/BaseSource/BaseSource.vcxproj.filters
+++ b/src/filters/source/BaseSource/BaseSource.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{d55d7ca3-f025-4f7c-bfa1-01bb4db7f6cd}</UniqueIdentifier>
diff --git a/src/filters/source/SubtitleSource/SubtitleSource.cpp b/src/filters/source/SubtitleSource/SubtitleSource.cpp
index 88fa45ef7..0a8983818 100644
--- a/src/filters/source/SubtitleSource/SubtitleSource.cpp
+++ b/src/filters/source/SubtitleSource/SubtitleSource.cpp
@@ -228,9 +228,9 @@ STDMETHODIMP CSubtitleSource::QueryFilterInfo(FILTER_INFO* pInfo)
CSubtitleStream::CSubtitleStream(const WCHAR* wfn, CSubtitleSource* pParent, HRESULT* phr)
: CSourceStream(NAME("SubtitleStream"), phr, pParent, L"Output")
, CSourceSeeking(NAME("SubtitleStream"), (IPin*)this, phr, &m_cSharedState)
+ , m_nPosition(0)
, m_bDiscontinuity(FALSE)
, m_bFlushing(FALSE)
- , m_nPosition(0)
, m_rts(nullptr)
{
CAutoLock cAutoLock(&m_cSharedState);
diff --git a/src/filters/source/SubtitleSource/SubtitleSource.vcxproj b/src/filters/source/SubtitleSource/SubtitleSource.vcxproj
index 1c894b69c..ddb6d1b87 100644
--- a/src/filters/source/SubtitleSource/SubtitleSource.vcxproj
+++ b/src/filters/source/SubtitleSource/SubtitleSource.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,128 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>SubtitleSource.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>SubtitleSource.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>SubtitleSource.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>SubtitleSource.def</ModuleDefinitionFile>
@@ -172,30 +80,6 @@
<AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
@@ -207,14 +91,14 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
<ClInclude Include="SubtitleSource.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="SubtitleSource.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/source/SubtitleSource/SubtitleSource.vcxproj.filters b/src/filters/source/SubtitleSource/SubtitleSource.vcxproj.filters
index b7c00be75..1e69995e6 100644
--- a/src/filters/source/SubtitleSource/SubtitleSource.vcxproj.filters
+++ b/src/filters/source/SubtitleSource/SubtitleSource.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{02ec0f4b-6c0b-4d12-b1f0-0cbc16c2b813}</UniqueIdentifier>
diff --git a/src/filters/switcher/AudioSwitcher/Audio.cpp b/src/filters/switcher/AudioSwitcher/Audio.cpp
index b53f4bd08..1313d82ea 100644
--- a/src/filters/switcher/AudioSwitcher/Audio.cpp
+++ b/src/filters/switcher/AudioSwitcher/Audio.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -178,14 +178,14 @@ static void make_downsample_filter(long* filter_bank, int filter_width, long sam
}
AudioStreamResampler::AudioStreamResampler(int bps, long orig_rate, long new_rate, bool fHighQuality)
- : samp_frac(0x80000)
- , bps(bps)
+ : ptsampleRout(audio_pointsample_16)
+ , dnsampleRout(audio_downsample_mono16)
+ , samp_frac(0x80000)
+ , accum(0)
, holdover(0)
, filter_bank(nullptr)
, filter_width(1)
- , accum(0)
- , ptsampleRout(audio_pointsample_16)
- , dnsampleRout(audio_downsample_mono16)
+ , bps(bps)
{
if (bps == 1) {
ptsampleRout = audio_pointsample_8;
diff --git a/src/filters/switcher/AudioSwitcher/AudioSwitcher.cpp b/src/filters/switcher/AudioSwitcher/AudioSwitcher.cpp
index a652ff940..8e6dd1c27 100644
--- a/src/filters/switcher/AudioSwitcher/AudioSwitcher.cpp
+++ b/src/filters/switcher/AudioSwitcher/AudioSwitcher.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -86,13 +86,13 @@ CAudioSwitcherFilter::CAudioSwitcherFilter(LPUNKNOWN lpunk, HRESULT* phr)
, m_fCustomChannelMapping(false)
, m_fDownSampleTo441(false)
, m_rtAudioTimeShift(0)
- , m_rtNextStart(0)
- , m_rtNextStop(1)
, m_fNormalize(false)
, m_fNormalizeRecover(false)
, m_nMaxNormFactor(4.0)
, m_boostFactor(1.0)
, m_normalizeFactor(m_nMaxNormFactor)
+ , m_rtNextStart(0)
+ , m_rtNextStop(1)
{
ZeroMemory(m_pSpeakerToChannelMap, sizeof(m_pSpeakerToChannelMap));
@@ -504,7 +504,7 @@ CMediaType CAudioSwitcherFilter::CreateNewOutputMediaType(CMediaType mt, long& c
DWORD mask = DWORD((__int64(1) << wfe->nChannels) - 1);
for (int i = 0; i < AS_MAX_CHANNELS; i++) {
if (m_pSpeakerToChannelMap[wfe->nChannels - 1][i]&mask) {
- ChMap cm = {1 << i, m_pSpeakerToChannelMap[wfe->nChannels - 1][i]};
+ ChMap cm = {1u << i, m_pSpeakerToChannelMap[wfe->nChannels - 1][i]};
m_chs[wfe->nChannels - 1].Add(cm);
}
}
diff --git a/src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj b/src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj
index 655c87b8a..c3f3dde56 100644
--- a/src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj
+++ b/src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,128 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>AudioSwitcher.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>AudioSwitcher.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>AudioSwitcher.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<AdditionalDependencies>Vfw32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>AudioSwitcher.def</ModuleDefinitionFile>
@@ -172,30 +80,6 @@
<AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Audio.cpp" />
<ClCompile Include="AudioSwitcher.cpp" />
@@ -211,14 +95,14 @@
<ClInclude Include="Audio.h" />
<ClInclude Include="AudioSwitcher.h" />
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
<ClInclude Include="StreamSwitcher.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="AudioSwitcher.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj.filters b/src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj.filters
index a1df243af..0e4f0567c 100644
--- a/src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj.filters
+++ b/src/filters/switcher/AudioSwitcher/AudioSwitcher.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{5d72cb26-7cb5-4089-8afe-a1675cca05bd}</UniqueIdentifier>
diff --git a/src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp b/src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp
index 03dc69479..a267f45c2 100644
--- a/src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp
+++ b/src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -1301,12 +1301,12 @@ HRESULT CStreamSwitcherFilter::CompleteConnect(PIN_DIRECTION dir, CBasePin* pPin
name.Format(L"Channel %ld", ++m_PinVersion);
HRESULT hr = S_OK;
- CStreamSwitcherInputPin* pPin = DEBUG_NEW CStreamSwitcherInputPin(this, &hr, name);
- if (!pPin || FAILED(hr)) {
- delete pPin;
+ CStreamSwitcherInputPin* pInputPin = DEBUG_NEW CStreamSwitcherInputPin(this, &hr, name);
+ if (!pInputPin || FAILED(hr)) {
+ delete pInputPin;
return E_FAIL;
}
- m_pInputs.AddTail(pPin);
+ m_pInputs.AddTail(pInputPin);
}
}
diff --git a/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.cpp b/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.cpp
index 7bd077e9e..513199edd 100644
--- a/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.cpp
+++ b/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -144,34 +144,34 @@ HRESULT CAVI2AC3Filter::Transform(IMediaSample* pSample, IMediaSample* pOutSampl
int curlen = std::min(len - pos, 2013l);
pos += 2013;
- CComPtr<IMediaSample> pOutSample;
- hr = InitializeOutputSample(pSample, &pOutSample);
+ CComPtr<IMediaSample> pNewOutSample;
+ hr = InitializeOutputSample(pSample, &pNewOutSample);
if (fDiscontinuity) {
if (fHasTime) {
rtStop = rtStart + (rtStop - rtStart) * curlen / len;
- pOutSample->SetTime(&rtStart, &rtStop);
+ pNewOutSample->SetTime(&rtStart, &rtStop);
}
fDiscontinuity = false;
} else {
- pOutSample->SetTime(nullptr, nullptr);
- pOutSample->SetDiscontinuity(FALSE);
+ pNewOutSample->SetTime(nullptr, nullptr);
+ pNewOutSample->SetDiscontinuity(FALSE);
}
- BYTE* pOut = nullptr;
- if (FAILED(hr = pOutSample->GetPointer(&pOut))) {
+ BYTE* pNewOut = nullptr;
+ if (FAILED(hr = pNewOutSample->GetPointer(&pNewOut))) {
return hr;
}
- BYTE* pOutOrg = pOut;
+ BYTE* pNewOutOrg = pNewOut;
- long size = pOutSample->GetSize();
+ long newSize = pNewOutSample->GetSize();
const GUID* majortype = &m_pOutput->CurrentMediaType().majortype;
const GUID* subtype = &m_pOutput->CurrentMediaType().subtype;
if (*majortype == MEDIATYPE_DVD_ENCRYPTED_PACK) {
- if (size < curlen + 32 + 3) {
+ if (newSize < curlen + 32 + 3) {
return E_FAIL;
}
@@ -181,14 +181,14 @@ HRESULT CAVI2AC3Filter::Transform(IMediaSample* pSample, IMediaSample* pOutSampl
0x01, 0x89, 0xC3, 0xF8, // mux rate (1260000 bytes/sec, 22bits), marker (2bits), reserved (~0, 5bits), stuffing (0, 3bits)
};
- memcpy(pOut, &PESHeader, sizeof(PESHeader));
- pOut += sizeof(PESHeader);
+ memcpy(pNewOut, &PESHeader, sizeof(PESHeader));
+ pNewOut += sizeof(PESHeader);
majortype = &MEDIATYPE_MPEG2_PES;
}
if (*majortype == MEDIATYPE_MPEG2_PES) {
- if (size < curlen + 20 + 3) {
+ if (newSize < curlen + 20 + 3) {
return E_FAIL;
}
@@ -232,24 +232,24 @@ HRESULT CAVI2AC3Filter::Transform(IMediaSample* pSample, IMediaSample* pOutSampl
}
}
- memcpy(pOut, &Private1Header, sizeof(Private1Header));
- pOut += sizeof(Private1Header);
+ memcpy(pNewOut, &Private1Header, sizeof(Private1Header));
+ pNewOut += sizeof(Private1Header);
majortype = &MEDIATYPE_Audio;
}
if (*majortype == MEDIATYPE_Audio) {
- if (size < curlen) {
+ if (newSize < curlen) {
return E_FAIL;
}
- memcpy(pOut, pIn, curlen);
+ memcpy(pNewOut, pIn, curlen);
pIn += curlen;
- pOut += curlen;
+ pNewOut += curlen;
}
- pOutSample->SetActualDataLength(long(pOut - pOutOrg));
+ pNewOutSample->SetActualDataLength(long(pNewOut - pNewOutOrg));
- m_pOutput->Deliver(pOutSample);
+ m_pOutput->Deliver(pNewOutSample);
}
return S_FALSE;
diff --git a/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj b/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj
index 693d9bd47..c3ca52f5a 100644
--- a/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj
+++ b/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,114 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
- <Link>
- <ModuleDefinitionFile>AVI2AC3Filter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
- <Link>
- <ModuleDefinitionFile>AVI2AC3Filter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<ModuleDefinitionFile>AVI2AC3Filter.def</ModuleDefinitionFile>
</Link>
@@ -157,41 +79,6 @@
<AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <ModuleDefinitionFile>AVI2AC3Filter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="AVI2AC3Filter.cpp" />
<ClCompile Include="stdafx.cpp">
@@ -204,13 +91,13 @@
<ItemGroup>
<ClInclude Include="AVI2AC3Filter.h" />
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="AVI2AC3Filter.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj.filters b/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj.filters
index 255fb9ad8..801dac214 100644
--- a/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj.filters
+++ b/src/filters/transform/AVI2AC3Filter/AVI2AC3Filter.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{00cf5f87-ccb3-495d-aa71-5c96741443af}</UniqueIdentifier>
diff --git a/src/filters/transform/BaseVideoFilter/BaseVideoFilter.cpp b/src/filters/transform/BaseVideoFilter/BaseVideoFilter.cpp
index 1cdedbb20..4e309adc3 100644
--- a/src/filters/transform/BaseVideoFilter/BaseVideoFilter.cpp
+++ b/src/filters/transform/BaseVideoFilter/BaseVideoFilter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,8 +25,11 @@
#include "../../../DSUtil/DSUtil.h"
#include "../../../DSUtil/MediaTypes.h"
-#include <InitGuid.h>
#include "moreuuids.h"
+// Even if we don't use this, it is needed for mvrInterfaces.h
+typedef interface IDirect3DDevice9* LPDIRECT3DDEVICE9;
+#include <initguid.h>
+#include <mvrInterfaces.h>
//
// CBaseVideoFilter
diff --git a/src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj b/src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj
index 27dcb0122..75ea8b02c 100644
--- a/src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj
+++ b/src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,44 +34,12 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj.filters b/src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj.filters
index 061e1cc2f..6a3df21c4 100644
--- a/src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj.filters
+++ b/src/filters/transform/BaseVideoFilter/BaseVideoFilter.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{a11bf24b-08b5-4cf3-84cf-dcb0e13c32a9}</UniqueIdentifier>
diff --git a/src/filters/transform/BufferFilter/BufferFilter.vcxproj b/src/filters/transform/BufferFilter/BufferFilter.vcxproj
index 602005e99..e4b8547f3 100644
--- a/src/filters/transform/BufferFilter/BufferFilter.vcxproj
+++ b/src/filters/transform/BufferFilter/BufferFilter.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,114 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
- <Link>
- <ModuleDefinitionFile>BufferFilter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
- <Link>
- <ModuleDefinitionFile>BufferFilter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<ModuleDefinitionFile>BufferFilter.def</ModuleDefinitionFile>
</Link>
@@ -157,41 +79,6 @@
<AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <ModuleDefinitionFile>BufferFilter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="BufferFilter.cpp" />
<ClCompile Include="stdafx.cpp">
@@ -204,13 +91,13 @@
<ItemGroup>
<ClInclude Include="BufferFilter.h" />
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="BufferFilter.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/transform/BufferFilter/BufferFilter.vcxproj.filters b/src/filters/transform/BufferFilter/BufferFilter.vcxproj.filters
index 35fe7ed0a..06d3f156d 100644
--- a/src/filters/transform/BufferFilter/BufferFilter.vcxproj.filters
+++ b/src/filters/transform/BufferFilter/BufferFilter.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{9b46af16-2931-44b3-981b-5a22b3ba715b}</UniqueIdentifier>
diff --git a/src/filters/transform/DeCSSFilter/DeCSSFilter.cpp b/src/filters/transform/DeCSSFilter/DeCSSFilter.cpp
index 8111c0ce5..d12772bd0 100644
--- a/src/filters/transform/DeCSSFilter/DeCSSFilter.cpp
+++ b/src/filters/transform/DeCSSFilter/DeCSSFilter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -28,6 +28,9 @@
#ifdef STANDALONE_FILTER
+#include <initguid.h>
+#include "moreuuids.h"
+
const AMOVIESETUP_MEDIATYPE sudPinTypesIn[] = {
{&MEDIATYPE_DVD_ENCRYPTED_PACK, &MEDIASUBTYPE_NULL},
};
diff --git a/src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj b/src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj
index 8ee84325d..7b5f000b9 100644
--- a/src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj
+++ b/src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -42,114 +42,36 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
+ <PropertyGroup Condition="$(Configuration.Contains('Filter'))" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">.ax</TargetExt>
- <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">.ax</TargetExt>
+ <TargetExt Condition="$(Configuration.Contains('Filter'))">.ax</TargetExt>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
- <Link>
- <ModuleDefinitionFile>DeCSSFilter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Filter'))">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
- <Link>
- <ModuleDefinitionFile>DeCSSFilter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Filter'))">
<Link>
<ModuleDefinitionFile>DeCSSFilter.def</ModuleDefinitionFile>
</Link>
@@ -157,41 +79,6 @@
<AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <ModuleDefinitionFile>DeCSSFilter.def</ModuleDefinitionFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="DeCSSFilter.cpp" />
<ClCompile Include="stdafx.cpp">
@@ -204,13 +91,13 @@
<ItemGroup>
<ClInclude Include="DeCSSFilter.h" />
<ClInclude Include="resource.h">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="DeCSSFilter.rc">
- <ExcludedFromBuild Condition="'$(Configuration)'=='Debug' or '$(Configuration)'=='Release'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="!$(Configuration.Contains('Filter'))">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
diff --git a/src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj.filters b/src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj.filters
index 39c10af14..f5eda4594 100644
--- a/src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj.filters
+++ b/src/filters/transform/DeCSSFilter/DeCSSFilter.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{8b808ee2-0f72-4075-8ecb-82a22d4466ae}</UniqueIdentifier>
diff --git a/src/filters/transform/VSFilter/Copy.cpp b/src/filters/transform/VSFilter/Copy.cpp
index 3d9293b0e..383c3f986 100644
--- a/src/filters/transform/VSFilter/Copy.cpp
+++ b/src/filters/transform/VSFilter/Copy.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -27,7 +27,6 @@
#include "../../../DSUtil/DSUtil.h"
#include "../../../DSUtil/MediaTypes.h"
-#include <InitGuid.h>
#include "moreuuids.h"
extern int c2y_yb[256];
@@ -44,7 +43,7 @@ void BltLineRGB32(DWORD* d, BYTE* sub, int w, const GUID& subtype)
for (; db < dbtend; sub += 4, db++) {
if (sub[3] < 0xff) {
int y = (c2y_yb[sub[0]] + c2y_yg[sub[1]] + c2y_yr[sub[2]] + 0x108000) >> 16;
- *db = y; // w/o colors
+ *db = BYTE(y); // w/o colors
}
}
} else if (subtype == MEDIASUBTYPE_YUY2) {
@@ -54,7 +53,7 @@ void BltLineRGB32(DWORD* d, BYTE* sub, int w, const GUID& subtype)
for (; ds < dstend; sub += 4, ds++) {
if (sub[3] < 0xff) {
int y = (c2y_yb[sub[0]] + c2y_yg[sub[1]] + c2y_yr[sub[2]] + 0x108000) >> 16;
- *ds = 0x8000 | y; // w/o colors
+ *ds = WORD(0x8000 | y); // w/o colors
}
}
} else if (subtype == MEDIASUBTYPE_RGB555) {
@@ -184,10 +183,10 @@ void CDirectVobSubFilter::PrintMessages(BYTE* pOut)
bihOut.biWidth, bihOut.biHeight,
Subtype2String(m_pOutput->CurrentMediaType().subtype));
- msg.AppendFormat(_T("real fps: %.3f, current fps: %.3f\nmedia time: %d, subtitle time: %I64d [ms]\nframe number: %d (calculated)\nrate: %.4lf\n"),
+ msg.AppendFormat(_T("real fps: %.3f, current fps: %.3f\nmedia time: %I64d, subtitle time: %I64d [ms]\nframe number: %I64d (calculated)\nrate: %.4lf\n"),
m_fps, m_fMediaFPSEnabled ? m_MediaFPS : fabs(m_fps),
- m_tPrev.Millisecs(), CalcCurrentTime() / 10000,
- (int)(m_tPrev.m_time * m_fps / 10000000),
+ RT2MS(m_tPrev.GetUnits()), RT2MS(CalcCurrentTime()),
+ std::llround(m_tPrev.m_time * m_fps / UNITS_FLOAT),
m_pInput->CurrentRate());
CAutoLock cAutoLock(&m_csQueueLock);
@@ -196,11 +195,11 @@ void CDirectVobSubFilter::PrintMessages(BYTE* pOut)
int nSubPics = -1;
REFERENCE_TIME rtNow = -1, rtStart = -1, rtStop = -1;
m_pSubPicQueue->GetStats(nSubPics, rtNow, rtStart, rtStop);
- msg.AppendFormat(_T("queue stats: %I64d - %I64d [ms]\n"), rtStart / 10000, rtStop / 10000);
+ msg.AppendFormat(_T("queue stats: %I64d - %I64d [ms]\n"), RT2MS(rtStart), RT2MS(rtStop));
for (int i = 0; i < nSubPics; i++) {
m_pSubPicQueue->GetStats(i, rtStart, rtStop);
- msg.AppendFormat(_T("%d: %I64d - %I64d [ms]\n"), i, rtStart / 10000, rtStop / 10000);
+ msg.AppendFormat(_T("%d: %I64d - %I64d [ms]\n"), i, RT2MS(rtStart), RT2MS(rtStop));
}
}
diff --git a/src/filters/transform/VSFilter/DirectVobSub.cpp b/src/filters/transform/VSFilter/DirectVobSub.cpp
index e9fb9ead8..e264644a2 100644
--- a/src/filters/transform/VSFilter/DirectVobSub.cpp
+++ b/src/filters/transform/VSFilter/DirectVobSub.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -55,6 +55,10 @@ CDirectVobSub::CDirectVobSub()
m_fMediaFPSEnabled = !!theApp.GetProfileInt(ResStr(IDS_R_TIMING), ResStr(IDS_RTM_MEDIAFPSENABLED), FALSE);
m_ePARCompensationType = static_cast<CSimpleTextSubtitle::EPARCompensationType>(theApp.GetProfileInt(ResStr(IDS_R_TEXT), ResStr(IDS_RT_AUTOPARCOMPENSATION), 0));
+ int gcd = GCD(m_SubtitleSpeedMul, m_SubtitleSpeedDiv);
+ m_SubtitleSpeedNormalizedMul = m_SubtitleSpeedMul / gcd;
+ m_SubtitleSpeedNormalizedDiv = m_SubtitleSpeedDiv / gcd;
+
BYTE* pData = nullptr;
UINT nSize;
if (theApp.GetProfileBinary(ResStr(IDS_R_TIMING), ResStr(IDS_RTM_MEDIAFPS), &pData, &nSize) && pData) {
@@ -300,12 +304,12 @@ STDMETHODIMP CDirectVobSub::get_TextSettings(void* lf, int lflen, COLORREF* colo
return E_INVALIDARG;
}
- ((LOGFONT*)lf)->lfCharSet = m_defStyle.charSet;
- ((LOGFONT*)lf)->lfItalic = m_defStyle.fItalic;
+ ((LOGFONT*)lf)->lfCharSet = (BYTE)m_defStyle.charSet;
+ ((LOGFONT*)lf)->lfItalic = (BYTE)m_defStyle.fItalic;
((LOGFONT*)lf)->lfHeight = (LONG)m_defStyle.fontSize;
((LOGFONT*)lf)->lfWeight = m_defStyle.fontWeight;
- ((LOGFONT*)lf)->lfStrikeOut = m_defStyle.fStrikeOut;
- ((LOGFONT*)lf)->lfUnderline = m_defStyle.fUnderline;
+ ((LOGFONT*)lf)->lfStrikeOut = (BYTE)m_defStyle.fStrikeOut;
+ ((LOGFONT*)lf)->lfUnderline = (BYTE)m_defStyle.fUnderline;
}
if (color) {
@@ -459,6 +463,10 @@ STDMETHODIMP CDirectVobSub::put_SubtitleTiming(int delay, int speedmul, int spee
m_SubtitleSpeedDiv = speeddiv;
}
+ int gcd = GCD(m_SubtitleSpeedMul, m_SubtitleSpeedDiv);
+ m_SubtitleSpeedNormalizedMul = m_SubtitleSpeedMul / gcd;
+ m_SubtitleSpeedNormalizedDiv = m_SubtitleSpeedDiv / gcd;
+
return S_OK;
}
diff --git a/src/filters/transform/VSFilter/DirectVobSub.h b/src/filters/transform/VSFilter/DirectVobSub.h
index 6282020c3..9321f6ae9 100644
--- a/src/filters/transform/VSFilter/DirectVobSub.h
+++ b/src/filters/transform/VSFilter/DirectVobSub.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -49,6 +49,9 @@ protected:
bool m_fOSD;
int m_nReloaderDisableCount;
int m_SubtitleDelay, m_SubtitleSpeedMul, m_SubtitleSpeedDiv;
+ // User could specify any values for m_SubtitleSpeedMul and m_SubtitleSpeedDiv.
+ // We want to normalize the user input to minimize the chance of overflow later when we do calculations.
+ int m_SubtitleSpeedNormalizedMul, m_SubtitleSpeedNormalizedDiv;
bool m_fMediaFPSEnabled;
double m_MediaFPS;
bool m_fSaveFullPath;
diff --git a/src/filters/transform/VSFilter/DirectVobSubFilter.cpp b/src/filters/transform/VSFilter/DirectVobSubFilter.cpp
index db2d287ac..e3b2a87fe 100644
--- a/src/filters/transform/VSFilter/DirectVobSubFilter.cpp
+++ b/src/filters/transform/VSFilter/DirectVobSubFilter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015, 2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -34,7 +34,6 @@
#include "../../../Subtitles/RLECodedSubtitle.h"
#include "../../../Subtitles/PGSSub.h"
-#include <InitGuid.h>
#include <d3d9.h>
#include <dxva2api.h>
#include "moreuuids.h"
@@ -518,7 +517,7 @@ HRESULT CDirectVobSubFilter::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tS
REFERENCE_TIME CDirectVobSubFilter::CalcCurrentTime()
{
REFERENCE_TIME rt = m_pSubClock ? m_pSubClock->GetTime() : m_tPrev;
- return (rt - 10000i64 * m_SubtitleDelay) * m_SubtitleSpeedMul / m_SubtitleSpeedDiv; // no, it won't overflow if we use normal parameters (__int64 is enough for about 2000 hours if we multiply it by the max: 65536 as m_SubtitleSpeedMul)
+ return (rt - 10000i64 * m_SubtitleDelay) * m_SubtitleSpeedNormalizedMul / m_SubtitleSpeedNormalizedDiv; // no, it won't overflow if we use normal parameters (__int64 is enough for about 2000 hours if we multiply it by the max: 65536 as m_SubtitleSpeedMul)
}
void CDirectVobSubFilter::InitSubPicQueue()
@@ -743,7 +742,7 @@ void CDirectVobSubFilter::UpdatePreferedLanguages(CString l)
// move "Hide subtitles" to the last position if it wasn't our selection
- CString hidesubs = ResStr(IDS_M_HIDESUBTITLES);
+ CString hidesubs(StrRes(IDS_M_HIDESUBTITLES));
for (k = 1; k < j; k++) {
if (!langs[k].CompareNoCase(hidesubs)) {
@@ -1352,21 +1351,27 @@ bool CDirectVobSubFilter2::IsAppBlackListed()
{
// all entries must be lowercase!
TCHAR* blacklistedapps[] = {
- _T("wm8eutil."), // wmp8 encoder's dummy renderer releases the outputted media sample after calling Receive on its input pin (yes, even when dvobsub isn't registered at all)
- _T("explorer."), // as some users reported thumbnail preview loads dvobsub, I've never experienced this yet...
- _T("producer."), // this is real's producer
- _T("googledesktopindex."), // Google Desktop
- _T("googledesktopdisplay."), // Google Desktop
- _T("googledesktopcrawl."), // Google Desktop
- _T("subtitleworkshop."), // Subtitle Workshop
- _T("subtitleworkshop4."),
- _T("darksouls."), // Dark Souls (Game)
- _T("rometw."), // Rome Total War (Game)
- _T("everquest2."), // EverQuest II (Game)
- _T("yso_win."), // Ys Origin (Game)
- _T("launcher_main."), // Logitech WebCam Software
- _T("webcamdell2."), // Dell WebCam Software
- _T("data."), // Dark Souls 1 (Game)
+ _T("wm8eutil."), // wmp8 encoder's dummy renderer releases the outputted media sample after calling Receive on its input pin (yes, even when dvobsub isn't registered at all)
+ _T("explorer."), // as some users reported thumbnail preview loads dvobsub, I've never experienced this yet...
+ _T("producer."), // this is real's producer
+ _T("googledesktop"), // Google Desktop
+ _T("subtitleworkshop"), // Subtitle Workshop
+ _T("darksouls."), // Dark Souls (Game)
+ _T("rometw."), // Rome Total War (Game)
+ _T("everquest2."), // EverQuest II (Game)
+ _T("yso_win."), // Ys Origin (Game)
+ _T("launcher_main."), // Logitech WebCam Software
+ _T("webcamdell"), // Dell WebCam Software
+ _T("data."), // Dark Souls 1 (Game)
+ _T("unravel"), // Unravel (Game)
+ _T("mshta"), // MS Scripting Host
+ _T("origin.exe"), // Origin
+ _T("train.exe"), // Train Simulator (Game)
+#if WIN64
+ _T("ridex64.exe"), // Ride (Game)
+#else
+ _T("ride.exe"), // Ride (Game)
+#endif
};
for (size_t i = 0; i < _countof(blacklistedapps); i++) {
@@ -1592,10 +1597,10 @@ void CDirectVobSubFilter::UpdateSubtitle()
void CDirectVobSubFilter::SetSubtitle(ISubStream* pSubStream)
{
- CAutoLock cAutolock(&m_csQueueLock);
+ CAutoLock cQueueLock(&m_csQueueLock);
if (pSubStream) {
- CAutoLock cAutolock(&m_csSubLock);
+ CAutoLock cSubLock(&m_csSubLock);
CLSID clsid;
pSubStream->GetClassID(&clsid);
@@ -1622,31 +1627,30 @@ void CDirectVobSubFilter::SetSubtitle(ISubStream* pSubStream)
pRTS->SetAlignment(m_fOverridePlacement, m_PlacementXperc, m_PlacementYperc);
pRTS->Deinit();
- } else if (clsid == __uuidof(CRLECodedSubtitle)) {
- CRLECodedSubtitle* pRHS = (CRLECodedSubtitle*)pSubStream;
+ }
- DXVA2_ExtendedFormat extFormat;
- extFormat.value = m_cf;
- CString yuvMatrix = (extFormat.NominalRange == DXVA2_NominalRange_Normal) ? _T("PC.") : _T("TV.");
+ DXVA2_ExtendedFormat extFormat;
+ extFormat.value = m_cf;
+ CString yuvMatrix = (extFormat.NominalRange == DXVA2_NominalRange_Normal) ? _T("PC.") : _T("TV.");
- switch (extFormat.VideoTransferMatrix) {
- case DXVA2_VideoTransferMatrix_BT601:
- yuvMatrix.Append(_T("601"));
- break;
- case DXVA2_VideoTransferMatrix_BT709:
- yuvMatrix.Append(_T("709"));
- break;
- case DXVA2_VideoTransferMatrix_SMPTE240M:
- yuvMatrix.Append(_T("240M"));
- break;
- default:
- yuvMatrix = _T("None");
- break;
- }
-
- // Actually VSFilter expect full range (A)RGB frames to work with.
- pRHS->SetSourceTargetInfo(yuvMatrix, 0, 255);
+ switch (extFormat.VideoTransferMatrix) {
+ case DXVA2_VideoTransferMatrix_BT601:
+ yuvMatrix.Append(_T("601"));
+ break;
+ case DXVA2_VideoTransferMatrix_BT709:
+ yuvMatrix.Append(_T("709"));
+ break;
+ case DXVA2_VideoTransferMatrix_SMPTE240M:
+ yuvMatrix.Append(_T("240M"));
+ break;
+ default:
+ yuvMatrix = _T("None");
+ break;
}
+
+ yuvMatrix.Append(_T(".VSFilter"));
+ // Actually VSFilter expect full range (A)RGB frames to work with.
+ pSubStream->SetSourceTargetInfo(yuvMatrix, 0, 255);
}
int i = 0;
diff --git a/src/filters/transform/VSFilter/DirectVobSubPropPage.cpp b/src/filters/transform/VSFilter/DirectVobSubPropPage.cpp
index 0811d48cc..ff115406a 100644
--- a/src/filters/transform/VSFilter/DirectVobSubPropPage.cpp
+++ b/src/filters/transform/VSFilter/DirectVobSubPropPage.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -122,9 +122,9 @@ STDMETHODIMP CDVSBasePPage::Activate(HWND hwndParent, LPCRECT pRect, BOOL fModal
CDVSBasePPage::CDVSBasePPage(TCHAR* pName, LPUNKNOWN lpunk, int DialogId, int TitleId)
: CBasePropertyPage(pName, lpunk, DialogId, TitleId)
+ , m_fDisableInstantUpdate(false)
, m_bIsInitialized(FALSE)
, m_fAttached(false)
- , m_fDisableInstantUpdate(false)
{
}
@@ -297,9 +297,9 @@ void CDVSBasePPage::BindControl(UINT id, CWnd& control)
CDVSMainPPage::CDVSMainPPage(LPUNKNOWN pUnk, HRESULT* phr)
: CDVSBasePPage(NAME("VSFilter Property Page (main)"), pUnk, IDD_DVSMAINPAGE, IDD_DVSMAINPAGE)
, m_fn()
+ , m_iSelectedLanguage(0)
, m_nLangs(0)
, m_ppLangs(nullptr)
- , m_iSelectedLanguage(0)
, m_fOverridePlacement(false)
, m_PlacementXperc(50)
, m_PlacementYperc(90)
diff --git a/src/filters/transform/VSFilter/StyleEditorDialog.cpp b/src/filters/transform/VSFilter/StyleEditorDialog.cpp
index 806e6cff5..3e4e47734 100644
--- a/src/filters/transform/VSFilter/StyleEditorDialog.cpp
+++ b/src/filters/transform/VSFilter/StyleEditorDialog.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -193,7 +193,8 @@ void CStyleEditorDialog::OnOK()
m_stss.marginRect = m_margin;
for (size_t i = 0; i < m_alpha.size(); i++) {
- m_stss.alpha[i] = BYTE_MAX - m_alpha[i];
+ ASSERT(m_alpha[i] <= BYTE_MAX);
+ m_stss.alpha[i] = BYTE_MAX - BYTE(m_alpha[i]);
}
__super::OnOK();
diff --git a/src/filters/transform/VSFilter/VSFilter.cpp b/src/filters/transform/VSFilter/VSFilter.cpp
index 13e39ce41..b5e740b8e 100644
--- a/src/filters/transform/VSFilter/VSFilter.cpp
+++ b/src/filters/transform/VSFilter/VSFilter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,9 +24,7 @@
#include "DirectVobSubPropPage.h"
#include "VSFilter.h"
#include "../../../DSUtil/MediaTypes.h"
-#include "../../../MathLibFix/MathLibFix.h"
-#include <InitGuid.h>
#include "moreuuids.h"
/////////////////////////////////////////////////////////////////////////////
@@ -47,8 +45,6 @@ BOOL CVSFilterApp::InitInstance()
return FALSE;
}
- WorkAroundMathLibraryBug();
-
SetRegistryKey(_T("MPC-HC"));
DllEntryPoint(AfxGetInstanceHandle(), DLL_PROCESS_ATTACH, 0); // "DllMain" of the dshow baseclasses
@@ -70,16 +66,6 @@ int CVSFilterApp::ExitInstance()
return CWinApp::ExitInstance();
}
-HINSTANCE CVSFilterApp::LoadAppLangResourceDLL()
-{
- CString fn;
- fn.ReleaseBufferSetLength(::GetModuleFileName(m_hInstance, fn.GetBuffer(MAX_PATH), MAX_PATH));
- fn = fn.Mid(fn.ReverseFind('\\') + 1);
- fn = fn.Left(fn.ReverseFind('.') + 1);
- fn = fn + _T("lang");
- return ::LoadLibrary(fn);
-}
-
CVSFilterApp theApp;
//////////////////////////////////////////////////////////////////////////
diff --git a/src/filters/transform/VSFilter/VSFilter.h b/src/filters/transform/VSFilter/VSFilter.h
index 16df82263..e614c6b59 100644
--- a/src/filters/transform/VSFilter/VSFilter.h
+++ b/src/filters/transform/VSFilter/VSFilter.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2012,2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -29,9 +29,6 @@ public:
CVSFilterApp();
CString m_AppName;
-protected:
- HINSTANCE LoadAppLangResourceDLL();
-
public:
BOOL InitInstance();
BOOL ExitInstance();
diff --git a/src/filters/transform/VSFilter/VSFilter.vcxproj b/src/filters/transform/VSFilter/VSFilter.vcxproj
index ff7c49aaa..f6667556a 100644
--- a/src/filters/transform/VSFilter/VSFilter.vcxproj
+++ b/src/filters/transform/VSFilter/VSFilter.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Filter|Win32">
<Configuration>Debug Filter</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,75 +34,18 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>VSFilter.def</ModuleDefinitionFile>
- </Link>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\VSFilter.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Filter|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>VSFilter.def</ModuleDefinitionFile>
- </Link>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\VSFilter.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>Vfw32.lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>VSFilter.def</ModuleDefinitionFile>
- </Link>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\VSFilter.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Filter|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
+ <!--
+ Remove /Zc:threadSafeInit- once Windows XP in no longer supported. TLS doesn't work on this system with dynamically loaded libraries.
+ And it will not be fixed. https://connect.microsoft.com/VisualStudio/feedback/details/1789709
+ -->
+ <AdditionalOptions>/Zc:threadSafeInit- %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>ISOLATION_AWARE_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
@@ -182,9 +110,6 @@
<ProjectReference Include="..\..\..\DSUtil\DSUtil.vcxproj">
<Project>{fc70988b-1ae5-4381-866d-4f405e28ac42}</Project>
</ProjectReference>
- <ProjectReference Include="..\..\..\MathLibFix\MathLibFix.vcxproj">
- <Project>{fc9fc17f-70bf-4aca-8285-c24d1889bacb}</Project>
- </ProjectReference>
<ProjectReference Include="..\..\..\SubPic\SubPic.vcxproj">
<Project>{d514ea4d-eafb-47a9-a437-a582ca571251}</Project>
</ProjectReference>
diff --git a/src/filters/transform/VSFilter/VSFilter.vcxproj.filters b/src/filters/transform/VSFilter/VSFilter.vcxproj.filters
index 0c975605b..e1d250d9e 100644
--- a/src/filters/transform/VSFilter/VSFilter.vcxproj.filters
+++ b/src/filters/transform/VSFilter/VSFilter.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{6d1c2595-a734-4727-a302-743496e0d217}</UniqueIdentifier>
diff --git a/src/filters/transform/VSFilter/installer/build_installer.bat b/src/filters/transform/VSFilter/installer/build_installer.bat
index 13314751a..c397f3ec8 100755
--- a/src/filters/transform/VSFilter/installer/build_installer.bat
+++ b/src/filters/transform/VSFilter/installer/build_installer.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2012-2013 see Authors.txt
+REM (C) 2012-2013, 2015 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -18,17 +18,14 @@ REM along with this program. If not, see <http://www.gnu.org/licenses/>.
SETLOCAL
-PUSHD %~dp0
-
-REM You can set here the Inno Setup path if for example you have Inno Setup Unicode
-REM installed and you want to use the ANSI Inno Setup which is in another location
-IF NOT DEFINED InnoSetupPath SET "InnoSetupPath=H:\progs\thirdparty\isetup"
+SET "FILE_DIR=%~dp0"
+PUSHD "%FILE_DIR%"
SET ROOT_DIR=..\..\..\..\..
SET "BIN_DIR=%ROOT_DIR%\bin"
-CALL :SubDetectInnoSetup
-IF EXIST "%~dp0%ROOT_DIR%\signinfo.txt" (
+CALL "%FILE_DIR%%ROOT_DIR%\common.bat" :SubDetectInnoSetup
+IF EXIST "%FILE_DIR%%ROOT_DIR%\signinfo.txt" (
CALL :SubSign VSFilter.dll x86
CALL :SubSign VSFilter.dll x64
)
@@ -48,7 +45,7 @@ REM %1 is name of the file to sign
REM %2 is the platform
PUSHD "%BIN_DIR%\Filters_%~2\"
-CALL "%~dp0%ROOT_DIR%\contrib\sign.bat" "%1" || (ECHO Problem signing %1 & GOTO Break)
+CALL "%FILE_DIR%%ROOT_DIR%\contrib\sign.bat" "%1" || (ECHO Problem signing %1 & GOTO Break)
ECHO %1 signed successfully.
:Break
@@ -60,7 +57,7 @@ EXIT /B
IF %ERRORLEVEL% NEQ 0 GOTO EndWithError
ECHO.
TITLE Building VSFilter installer...
-"%InnoSetupPath%\ISCC.exe" /SMySignTool="cmd /c "%~dp0%ROOT_DIR%\contrib\sign.bat" $f" /Q^
+"%InnoSetupPath%\ISCC.exe" /SMySignTool="cmd /c "%FILE_DIR%%ROOT_DIR%\contrib\sign.bat" $f" /Q^
"vsfilter_setup.iss" /D%~1
IF %ERRORLEVEL% NEQ 0 GOTO EndWithError
IF /I "%~1%" == "x64Build" (
@@ -71,34 +68,6 @@ IF /I "%~1%" == "x64Build" (
EXIT /B
-:SubDetectInnoSetup
-REM Detect if we are running on 64bit Windows and use Wow6432Node since Inno Setup is
-REM a 32-bit application, and set the registry key of Inno Setup accordingly
-IF DEFINED PROGRAMFILES(x86) (
- SET "U_=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
-) ELSE (
- SET "U_=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
-)
-
-IF DEFINED InnoSetupPath IF NOT EXIST "%InnoSetupPath%" (
- ECHO "%InnoSetupPath%" wasn't found on this machine! I will try to detect Inno Setup's path from the registry...
-)
-
-IF NOT EXIST "%InnoSetupPath%" (
- FOR /F "delims=" %%a IN (
- 'REG QUERY "%U_%\Inno Setup 5_is1" /v "Inno Setup: App Path"2^>Nul^|FIND "REG_SZ"') DO (
- SET "InnoSetupPath=%%a" & CALL :SubInnoSetupPath %%InnoSetupPath:*Z=%%)
-)
-
-IF NOT EXIST "%InnoSetupPath%" ECHO Inno Setup wasn't found! & GOTO EndWithError
-EXIT /B
-
-
-:SubInnoSetupPath
-SET "InnoSetupPath=%*"
-EXIT /B
-
-
:EndWithError
Title Building VSFilter installer [ERROR]
COLOR 0C
diff --git a/src/filters/transform/VSFilter/installer/vsfilter_setup.iss b/src/filters/transform/VSFilter/installer/vsfilter_setup.iss
index f5ab2980d..ffa192b7e 100644
--- a/src/filters/transform/VSFilter/installer/vsfilter_setup.iss
+++ b/src/filters/transform/VSFilter/installer/vsfilter_setup.iss
@@ -1,4 +1,4 @@
-; (C) 2012-2014 see Authors.txt
+; (C) 2012-2017 see Authors.txt
;
; This file is part of MPC-HC.
;
@@ -20,12 +20,12 @@
; Inno Setup: http://www.jrsoftware.org/isdl.php
-#if VER < EncodeVer(5,5,4)
- #error Update your Inno Setup version (5.5.4 or newer)
+#if VER < EncodeVer(5,5,9)
+ #error Update your Inno Setup version (5.5.9 or newer)
#endif
; If you want to compile the 64-bit version define "x64Build" (uncomment the define below or use build.bat)
-#define sse_required
+#define sse2_required
;#define x64Build
@@ -36,7 +36,7 @@
#include AddBackslash(top_dir) + "include\mpc-hc_config.h"
#include AddBackslash(top_dir) + "include\version.h"
-#define copyright_str "2001-2014"
+#define copyright_str "2001-2017"
#define app_name "VSFilter"
#define app_version str(VerMajor) + "." + str(VerMinor) + "." + str(MPC_VERSION_REV)
diff --git a/src/filters/transform/VSFilter/plugins.cpp b/src/filters/transform/VSFilter/plugins.cpp
index b42a46d67..c1d4ac0aa 100644
--- a/src/filters/transform/VSFilter/plugins.cpp
+++ b/src/filters/transform/VSFilter/plugins.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -571,7 +571,7 @@ namespace Plugin
bool FssProc(VDXFilterActivation* fa, const VDXFilterFunctions* ff, char* buf, int buflen) {
CStringA fn(GetFileName());
fn.Replace("\\", "\\\\");
- _snprintf_s(buf, buflen, buflen, "Config(\"%s\")", fn);
+ _snprintf_s(buf, buflen, buflen, "Config(\"%s\")", fn.GetString());
return true;
}
};
@@ -610,7 +610,7 @@ namespace Plugin
void StringProc(const VDXFilterActivation* fa, const VDXFilterFunctions* ff, char* str) {
if (!GetFileName().IsEmpty()) {
- sprintf_s(str, STRING_PROC_BUFFER_SIZE, " (%s, %d)", CStringA(GetFileName()), GetCharSet());
+ sprintf_s(str, STRING_PROC_BUFFER_SIZE, " (%s, %d)", CStringA(GetFileName()).GetString(), GetCharSet());
} else {
sprintf_s(str, STRING_PROC_BUFFER_SIZE, " (empty)");
}
@@ -619,7 +619,7 @@ namespace Plugin
bool FssProc(VDXFilterActivation* fa, const VDXFilterFunctions* ff, char* buf, int buflen) {
CStringA fn(GetFileName());
fn.Replace("\\", "\\\\");
- _snprintf_s(buf, buflen, buflen, "Config(\"%s\", %d)", fn, GetCharSet());
+ _snprintf_s(buf, buflen, buflen, "Config(\"%s\", %d)", fn.GetString(), GetCharSet());
return true;
}
};
@@ -1068,7 +1068,7 @@ UINT_PTR CALLBACK OpenHookProc(HWND hDlg, UINT uiMsg, WPARAM wParam, LPARAM lPar
for (ptrdiff_t i = 0; i < CharSetLen; i++) {
CString s;
- s.Format(_T("%s (%d)"), CharSetNames[i], CharSetList[i]);
+ s.Format(_T("%s (%u)"), CharSetNames[i], CharSetList[i]);
SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)s);
if (CharSetList[i] == (int)((OPENFILENAME*)lParam)->lCustData) {
SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_SETCURSEL, i, 0);
diff --git a/src/filters/transform/VSFilter/res/VSFilter.manifest b/src/filters/transform/VSFilter/res/VSFilter.manifest
index ad2b2bf1a..d5def26e8 100644
--- a/src/filters/transform/VSFilter/res/VSFilter.manifest
+++ b/src/filters/transform/VSFilter/res/VSFilter.manifest
@@ -32,6 +32,7 @@
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
diff --git a/src/mpc-hc/AboutDlg.cpp b/src/mpc-hc/AboutDlg.cpp
index ca1bd1bfd..73dcd1810 100644
--- a/src/mpc-hc/AboutDlg.cpp
+++ b/src/mpc-hc/AboutDlg.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2012-2014 see Authors.txt
+ * (C) 2012-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -28,22 +28,14 @@
#include "FileVersionInfo.h"
#include "VersionInfo.h"
#include "SysVersion.h"
-#include "WinAPIUtils.h"
+#include "PathUtils.h"
#include <afxole.h>
-extern "C" char g_Gcc_Compiler[];
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- , m_appname(_T(""))
- , m_strBuildNumber(_T(""))
- , m_MPCCompiler(_T(""))
- , m_LAVFilters(_T(""))
-#ifndef MPCHC_LITE
- , m_LAVFiltersVersion(_T(""))
-#endif
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
@@ -84,9 +76,9 @@ BOOL CAboutDlg::OnInitDialog()
#endif
// Build the path to Authors.txt
- m_AuthorsPath = GetProgramPath() + _T("Authors.txt");
+ m_AuthorsPath = PathUtils::CombinePaths(PathUtils::GetProgramPath(), _T("Authors.txt"));
// Check if the file exists
- if (FileExists(m_AuthorsPath)) {
+ if (PathUtils::Exists(m_AuthorsPath)) {
// If it does, we make the filename clickable
m_credits.Replace(_T("Authors.txt"), _T("<a>Authors.txt</a>"));
}
@@ -102,24 +94,31 @@ BOOL CAboutDlg::OnInitDialog()
#error Compiler is not supported!
#endif
#elif defined(_MSC_VER)
-#if (_MSC_VER == 1800) // 2013
-#if (_MSC_FULL_VER == 180030723)
- m_MPCCompiler = _T("MSVC 2013 Update 3");
-#elif (_MSC_FULL_VER == 180030501)
- m_MPCCompiler = _T("MSVC 2013 Update 2");
-#elif (_MSC_FULL_VER < 180021005)
- m_MPCCompiler = _T("MSVC 2013 Preview/Beta/RC");
+#if (_MSC_VER == 1900) // 2015
+#if (_MSC_FULL_VER == 190024210)
+ m_MPCCompiler = _T("MSVC 2015 Update 3");
+#elif (_MSC_FULL_VER == 190023918)
+ m_MPCCompiler = _T("MSVC 2015 Update 2");
+#elif (_MSC_FULL_VER == 190023506)
+ m_MPCCompiler = _T("MSVC 2015 Update 1");
+#elif (_MSC_FULL_VER == 190023026)
+ m_MPCCompiler = _T("MSVC 2015");
#else
- m_MPCCompiler = _T("MSVC 2013");
+ m_MPCCompiler.Format(_T("MSVC v%.2d.%.2d.%.5d"), _MSC_VER / 100, _MSC_VER % 100, _MSC_FULL_VER % 100000);
+#if _MSC_BUILD
+ m_MPCCompiler.AppendFormat(_T(".%.2d"), _MSC_BUILD);
+#endif
#endif
-#elif (_MSC_VER <= 1700)
+#elif (_MSC_VER <= 1800)
#error Compiler is not supported!
#endif
#else
#error Please add support for your compiler
#endif
-#if (__AVX__)
+#if (__AVX2__)
+ m_MPCCompiler += _T(" (AVX2)");
+#elif (__AVX__)
m_MPCCompiler += _T(" (AVX)");
#elif (__SSSE3__)
m_MPCCompiler += _T(" (SSSE3)");
@@ -221,7 +220,7 @@ void CAboutDlg::OnCopyToClipboard()
info += _T(" LAV Splitter: ") + CFGFilterLAV::GetVersion(CFGFilterLAV::SPLITTER) + _T("\r\n");
info += _T(" LAV Video: ") + CFGFilterLAV::GetVersion(CFGFilterLAV::VIDEO_DECODER) + _T("\r\n");
info += _T(" LAV Audio: ") + CFGFilterLAV::GetVersion(CFGFilterLAV::AUDIO_DECODER) + _T("\r\n");
- info += _T(" FFmpeg compiler: ") + CString(g_Gcc_Compiler) + _T("\r\n\r\n");
+ info += _T(" FFmpeg compiler: ") + VersionInfo::GetGCCVersion() + _T("\r\n\r\n");
#endif
info += _T("Operating system:\r\n");
info += _T(" Name: ") + m_OSName + _T("\r\n");
diff --git a/src/mpc-hc/AppSettings.cpp b/src/mpc-hc/AppSettings.cpp
index e2183d72a..17143da07 100644
--- a/src/mpc-hc/AppSettings.cpp
+++ b/src/mpc-hc/AppSettings.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,122 +20,32 @@
*/
#include "stdafx.h"
-#include "mplayerc.h"
#include "AppSettings.h"
+#include "CrashReporter.h"
#include "FGFilter.h"
+#include "FakeFilterMapper2.h"
#include "FileAssoc.h"
-#include "MiniDump.h"
-#include "VersionInfo.h"
#include "SysVersion.h"
-#include "WinAPIUtils.h"
+#include "PathUtils.h"
#include "Translations.h"
#include "UpdateChecker.h"
+#include "WinAPIUtils.h"
#include "moreuuids.h"
-
+#include "mplayerc.h"
+#include <mvrInterfaces.h>
+#include "../thirdparty/sanear/sanear/src/Factory.h"
#pragma warning(push)
#pragma warning(disable: 4351) // new behavior: elements of array 'array' will be default initialized
CAppSettings::CAppSettings()
- : fInitialized(false)
- , hAccel(nullptr)
- , nCmdlnWebServerPort(-1)
- , fShowDebugInfo(false)
- , hMasterWnd(nullptr)
+ : bInitialized(false)
, nCLSwitches(0)
- , iMonitor(0)
- , fMute(false)
- , fPreventMinimize(false)
- , fUseWin7TaskBar(true)
- , fUseSearchInFolder(false)
- , fUseTimeTooltip(true)
- , nTimeTooltipPosition(TIME_TOOLTIP_ABOVE_SEEKBAR)
- , nOSDSize(0)
- , nSpeakerChannels(2)
- , fRemainingTime(false)
- , nUpdaterAutoCheck(-1)
- , nUpdaterDelay(7)
- , fBDAUseOffset(false)
- , iBDABandwidth(8)
- , iBDAOffset(166)
- , iBDAScanFreqStart(474000)
- , iBDAScanFreqEnd(858000)
- , fBDAIgnoreEncryptedChannels(false)
- , nDVBLastChannel(1)
- , nDVBStopFilterGraph(DVB_STOP_FG_WHEN_SWITCHING)
- , nDVBRebuildFilterGraph(DVB_REBUILD_FG_WHEN_SWITCHING)
- , fEnableAudioSwitcher(true)
- , fAudioNormalize(false)
- , fAudioNormalizeRecover(true)
- , nAudioBoost(0)
- , fDownSampleTo441(false)
- , fAudioTimeShift(false)
- , iAudioTimeShift(0)
- , fCustomChannelMapping(false)
- , fOverridePlacement(false)
- , nHorPos(50)
- , nVerPos(90)
- , bSubtitleARCompensation(true)
- , nSubDelayStep(500)
- , fPrioritizeExternalSubtitles(true)
- , fDisableInternalSubtitles(true)
- , bPreferDefaultForcedSubtitles(true)
- , nJumpDistS(DEFAULT_JUMPDISTANCE_1)
- , nJumpDistM(DEFAULT_JUMPDISTANCE_2)
- , nJumpDistL(DEFAULT_JUMPDISTANCE_3)
- , bFastSeek(true)
- , eFastSeekMethod(FASTSEEK_NEAREST_KEYFRAME)
- , fShowChapters(true)
- , fLCDSupport(false)
- , iBrightness(0)
- , iContrast(0)
- , iHue(0)
- , iSaturation(0)
- , eCaptionMenuMode(MODE_SHOWCAPTIONMENU)
- , fHideNavigation(false)
- , nCS(CS_SEEKBAR | CS_TOOLBAR | CS_STATUSBAR)
- , language(LANGID(-1))
- , fEnableSubtitles(true)
- , fUseDefaultSubtitlesStyle(false)
- , iDefaultVideoSize(DVS_FROMINSIDE)
- , fKeepAspectRatio(true)
- , fCompMonDeskARDiff(false)
- , iOnTop(0)
- , bFavRememberPos(true)
- , bFavRelativeDrive(false)
- , iThumbRows(4)
- , iThumbCols(4)
- , iThumbWidth(1024)
- , bSubSaveExternalStyleFile(false)
- , bShufflePlaylistItems(false)
- , bHidePlaylistFullScreen(false)
- , nLastWindowType(SIZE_RESTORED)
- , nLastUsedPage(0)
- , fLastFullScreen(false)
- , fIntRealMedia(false)
- , fEnableEDLEditor(false)
- , bNotifySkype(false)
- , nAudioMaxNormFactor(400)
- , bAllowOverridingExternalSplitterChoice(false)
- , iAnalogCountry(1)
- , iDefaultCaptureDevice(0)
- , fExitFullScreenAtTheEnd(true)
- , fLaunchfullscreen(false)
- , fD3DFullscreen(false)
- , iDSVideoRendererType(VIDRNDT_DS_DEFAULT)
- , iRMVideoRendererType(VIDRNDT_RM_DEFAULT)
- , iQTVideoRendererType(VIDRNDT_QT_DEFAULT)
- , fClosedCaptions(false)
- , idMenuLang(0)
- , idAudioLang(0)
- , idSubtitlesLang(0)
- , nVolumeStep(5)
- , nSpeedStep(0)
- , eAfterPlayback(AfterPlayback::DO_NOTHING)
- , fUseDVDPath(false)
, rtShift(0)
, rtStart(0)
, lDVDTitle(0)
, lDVDChapter(0)
+ , iMonitor(0)
+ , fShowDebugInfo(false)
, iAdminOption(0)
, fAllowMultipleInst(false)
, fTrayIcon(false)
@@ -163,6 +73,7 @@ CAppSettings::CAppSettings()
, dZoomX(1.0)
, dZoomY(1.0)
, fAssociatedWithIcons(true)
+ , hAccel(nullptr)
, fWinLirc(false)
, fUIce(false)
, fGlobalMedia(true)
@@ -170,33 +81,136 @@ CAppSettings::CAppSettings()
, fLogoExternal(false)
, fEnableWebServer(false)
, nWebServerPort(13579)
+ , nCmdlnWebServerPort(-1)
, fWebServerUseCompression(true)
, fWebServerLocalhostOnly(false)
+ , bWebUIEnablePreview(false)
, fWebServerPrintDebugInfo(false)
, nVolume(100)
+ , fMute(false)
, nBalance(0)
, nLoops(1)
, fLoopForever(false)
+ , eLoopMode(LoopMode::PLAYLIST)
, fRememberZoomLevel(true)
, nAutoFitFactor(75)
, iZoomLevel(1)
, fEnableWorkerThreadForOpening(true)
, fReportFailedPins(true)
, fAutoloadAudio(true)
- , fAutoloadSubtitles(true)
, fBlockVSFilter(true)
- , pSpeakerToChannelMap()
- , TraFilters()
- , SrcFilters()
+ , nVolumeStep(5)
+ , nSpeedStep(0)
+ , nDefaultToolbarSize(24)
+ , eAfterPlayback(AfterPlayback::DO_NOTHING)
+ , fUseDVDPath(false)
+ , idMenuLang(0)
+ , idAudioLang(0)
+ , idSubtitlesLang(0)
+ , fClosedCaptions(false)
+ , iDSVideoRendererType(VIDRNDT_DS_DEFAULT)
+ , iRMVideoRendererType(VIDRNDT_RM_DEFAULT)
+ , iQTVideoRendererType(VIDRNDT_QT_DEFAULT)
+ , fD3DFullscreen(false)
+ , fLaunchfullscreen(false)
, bHideFullscreenControls(true)
, eHideFullscreenControlsPolicy(HideFullscreenControlsPolicy::SHOW_WHEN_HOVERED)
, uHideFullscreenControlsDelay(0)
, bHideFullscreenDockedPanels(true)
- , bHideWindowedControls(false)
+ , fExitFullScreenAtTheEnd(true)
+ , iDefaultCaptureDevice(0)
+ , iAnalogCountry(1)
+ , iBDAScanFreqStart(474000)
+ , iBDAScanFreqEnd(858000)
+ , iBDABandwidth(8)
+ , fBDAUseOffset(false)
+ , iBDAOffset(166)
+ , fBDAIgnoreEncryptedChannels(false)
+ , nDVBLastChannel(INT_ERROR)
+ , nDVBRebuildFilterGraph(DVB_REBUILD_FG_WHEN_SWITCHING)
+ , nDVBStopFilterGraph(DVB_STOP_FG_WHEN_SWITCHING)
+ , SrcFilters()
+ , TraFilters()
+ , fEnableAudioSwitcher(true)
+ , fAudioNormalize(false)
+ , nAudioMaxNormFactor(400)
+ , fAudioNormalizeRecover(true)
+ , nAudioBoost(0)
+ , fDownSampleTo441(false)
+ , fAudioTimeShift(false)
+ , iAudioTimeShift(0)
+ , fCustomChannelMapping(false)
+ , nSpeakerChannels(2)
+ , pSpeakerToChannelMap()
+ , fOverridePlacement(false)
+ , nHorPos(50)
+ , nVerPos(90)
+ , bSubtitleARCompensation(true)
+ , nSubDelayStep(500)
+ , bPreferDefaultForcedSubtitles(true)
+ , fPrioritizeExternalSubtitles(true)
+ , fDisableInternalSubtitles(true)
+ , bAllowOverridingExternalSplitterChoice(false)
+ , bAutoDownloadSubtitles(false)
+ , nAutoDownloadScoreMovies(0x16)
+ , nAutoDownloadScoreSeries(0x18)
+ , bAutoUploadSubtitles(false)
+ , bPreferHearingImpairedSubtitles(false)
+ , nJumpDistS(DEFAULT_JUMPDISTANCE_1)
+ , nJumpDistM(DEFAULT_JUMPDISTANCE_2)
+ , nJumpDistL(DEFAULT_JUMPDISTANCE_3)
+ , bFastSeek(true)
+ , eFastSeekMethod(FASTSEEK_NEAREST_KEYFRAME)
+ , fShowChapters(true)
+ , bNotifySkype(false)
+ , fPreventMinimize(false)
+ , bUseEnhancedTaskBar(true)
+ , fLCDSupport(false)
+ , fUseSearchInFolder(false)
+ , fUseTimeTooltip(true)
+ , nTimeTooltipPosition(TIME_TOOLTIP_ABOVE_SEEKBAR)
+ , nOSDSize(0)
, bHideWindowedMousePointer(true)
+ , iBrightness(0)
+ , iContrast(0)
+ , iHue(0)
+ , iSaturation(0)
+ , nUpdaterAutoCheck(-1)
+ , nUpdaterDelay(7)
+ , eCaptionMenuMode(MODE_SHOWCAPTIONMENU)
+ , fHideNavigation(false)
+ , nCS(CS_SEEKBAR | CS_TOOLBAR | CS_STATUSBAR)
+ , language(LANGID(-1))
+ , fEnableSubtitles(true)
+ , fUseDefaultSubtitlesStyle(false)
+ , iDefaultVideoSize(DVS_FROMINSIDE)
+ , fKeepAspectRatio(true)
+ , fCompMonDeskARDiff(false)
+ , iOnTop(0)
+ , bFavRememberPos(true)
+ , bFavRelativeDrive(false)
+ , iThumbRows(4)
+ , iThumbCols(4)
+ , iThumbWidth(1024)
+ , bSubSaveExternalStyleFile(false)
+ , bShufflePlaylistItems(false)
+ , bHidePlaylistFullScreen(false)
+ , nLastWindowType(SIZE_RESTORED)
+ , nLastUsedPage(0)
+ , fRemainingTime(false)
+ , bHighPrecisionTimer(false)
+ , fLastFullScreen(false)
+ , fIntRealMedia(false)
+ , fEnableEDLEditor(false)
+ , hMasterWnd(nullptr)
+ , bHideWindowedControls(false)
, nJpegQuality(90)
, bEnableCoverArt(true)
, nCoverArtSizeLimit(600)
+ , bEnableLogging(false)
+ , bUseLegacyToolbar(false)
+ , iLAVGPUDevice(DWORD_MAX)
+ , eSubtitleRenderer(SubtitleRenderer::INTERNAL)
{
// Internal source filter
#if INTERNAL_SOURCEFILTER_CDDA
@@ -211,8 +225,11 @@ CAppSettings::CAppSettings()
#if INTERNAL_SOURCEFILTER_FLIC
SrcFiltersKeys[SRC_FLIC] = FilterKey(_T("SRC_FLIC"), true);
#endif
-#if INTERNAL_SOURCEFILTER_DTSAC3
- SrcFiltersKeys[SRC_DTSAC3] = FilterKey(_T("SRC_DTSAC3"), true);
+#if INTERNAL_SOURCEFILTER_AC3
+ SrcFiltersKeys[SRC_AC3] = FilterKey(_T("SRC_AC3"), true);
+#endif
+#if INTERNAL_SOURCEFILTER_DTS
+ SrcFiltersKeys[SRC_DTS] = FilterKey(_T("SRC_DTS"), true);
#endif
#if INTERNAL_SOURCEFILTER_MATROSKA
SrcFiltersKeys[SRC_MATROSKA] = FilterKey(_T("SRC_MATROSKA"), true);
@@ -269,6 +286,9 @@ CAppSettings::CAppSettings()
#if INTERNAL_SOURCEFILTER_ASF
SrcFiltersKeys[SRC_ASF] = FilterKey(_T("SRC_ASF"), false);
#endif
+#if INTERNAL_SOURCEFILTER_WTV
+ SrcFiltersKeys[SRC_WTV] = FilterKey(_T("SRC_WTV"), true);
+#endif
#if INTERNAL_SOURCEFILTER_FLAC
SrcFiltersKeys[SRC_FLAC] = FilterKey(_T("SRC_FLAC"), true);
#endif
@@ -325,6 +345,9 @@ CAppSettings::CAppSettings()
#if INTERNAL_DECODER_AMR
TraFiltersKeys[TRA_AMR] = FilterKey(_T("TRA_AMR"), true);
#endif
+#if INTERNAL_DECODER_OPUS
+ TraFiltersKeys[TRA_OPUS] = FilterKey(_T("TRA_OPUS"), true);
+#endif
#if INTERNAL_DECODER_PCM
TraFiltersKeys[TRA_PCM] = FilterKey(_T("TRA_PCM"), true);
#endif
@@ -385,204 +408,215 @@ CAppSettings::CAppSettings()
#if INTERNAL_DECODER_FLIC
TraFiltersKeys[TRA_FLIC] = FilterKey(_T("TRA_FLIC"), true);
#endif
+#if INTERNAL_DECODER_MSVIDEO
+ TraFiltersKeys[TRA_MSVIDEO] = FilterKey(_T("TRA_MSVIDEO"), true);
+#endif
#if INTERNAL_DECODER_V210_V410
TraFiltersKeys[TRA_V210_V410] = FilterKey(_T("TRA_V210_V410"), false);
#endif
ZeroMemory(&DVDPosition, sizeof(DVDPosition));
+
+ ENSURE(SUCCEEDED(SaneAudioRenderer::Factory::CreateSettings(&sanear)));
}
#pragma warning(pop)
+static constexpr wmcmd_base default_wmcmds[] = {
+ { ID_FILE_OPENQUICK, 'Q', FVIRTKEY | FCONTROL | FNOINVERT, IDS_MPLAYERC_0 },
+ { ID_FILE_OPENMEDIA, 'O', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_OPEN_FILE },
+ { ID_FILE_OPENDVDBD, 'D', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_OPEN_DVD },
+ { ID_FILE_OPENDEVICE, 'V', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_OPEN_DEVICE },
+ { ID_FILE_REOPEN, 'E', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_REOPEN },
+ { ID_FILE_RECYCLE, 0, FVIRTKEY | FNOINVERT, IDS_FILE_RECYCLE },
+
+ { ID_FILE_SAVE_COPY, 0, FVIRTKEY | FNOINVERT, IDS_AG_SAVE_COPY },
+ { ID_FILE_SAVE_IMAGE, 'I', FVIRTKEY | FALT | FNOINVERT, IDS_AG_SAVE_IMAGE },
+ { ID_FILE_SAVE_IMAGE_AUTO, VK_F5, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_6 },
+ { ID_FILE_SAVE_THUMBNAILS, 0, FVIRTKEY | FNOINVERT, IDS_FILE_SAVE_THUMBNAILS },
+
+ { ID_FILE_SUBTITLES_LOAD, 'L', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_LOAD_SUBTITLES },
+ { ID_FILE_SUBTITLES_SAVE, 'S', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_SAVE_SUBTITLES },
+ { ID_FILE_SUBTITLES_DOWNLOAD, 'D', FVIRTKEY | FNOINVERT, IDS_SUBTITLES_DOWNLOAD },
+ { ID_FILE_SUBTITLES_UPLOAD, 'U', FVIRTKEY | FNOINVERT, IDS_SUBTITLES_UPLOAD },
+ { ID_FILE_CLOSE_AND_RESTORE, 'C', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_CLOSE },
+ { ID_FILE_PROPERTIES, VK_F10, FVIRTKEY | FSHIFT | FNOINVERT, IDS_AG_PROPERTIES },
+ { ID_FILE_EXIT, 'X', FVIRTKEY | FALT | FNOINVERT, IDS_AG_EXIT },
+ { ID_PLAY_PLAYPAUSE, VK_SPACE, FVIRTKEY | FNOINVERT, IDS_AG_PLAYPAUSE, APPCOMMAND_MEDIA_PLAY_PAUSE, wmcmd::LUP, wmcmd::LUP },
+ { ID_PLAY_PLAY, 0, FVIRTKEY | FNOINVERT, IDS_AG_PLAY, APPCOMMAND_MEDIA_PLAY },
+ { ID_PLAY_PAUSE, 0, FVIRTKEY | FNOINVERT, IDS_AG_PAUSE, APPCOMMAND_MEDIA_PAUSE },
+ { ID_PLAY_STOP, VK_OEM_PERIOD, FVIRTKEY | FNOINVERT, IDS_AG_STOP, APPCOMMAND_MEDIA_STOP },
+ { ID_PLAY_FRAMESTEP, VK_RIGHT, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_FRAMESTEP },
+ { ID_PLAY_FRAMESTEPCANCEL, VK_LEFT, FVIRTKEY | FCONTROL | FNOINVERT, IDS_MPLAYERC_16 },
+ { ID_NAVIGATE_GOTO, 'G', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_GO_TO },
+ { ID_PLAY_INCRATE, VK_UP, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_INCREASE_RATE },
+ { ID_PLAY_DECRATE, VK_DOWN, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_DECREASE_RATE },
+ { ID_PLAY_RESETRATE, 'R', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_RESET_RATE },
+ { ID_PLAY_INCAUDDELAY, VK_ADD, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_21 },
+ { ID_PLAY_DECAUDDELAY, VK_SUBTRACT, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_22 },
+ { ID_PLAY_SEEKFORWARDSMALL, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_23 },
+ { ID_PLAY_SEEKBACKWARDSMALL, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_24 },
+ { ID_PLAY_SEEKFORWARDMED, VK_RIGHT, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_25 },
+ { ID_PLAY_SEEKBACKWARDMED, VK_LEFT, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_26 },
+ { ID_PLAY_SEEKFORWARDLARGE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_27 },
+ { ID_PLAY_SEEKBACKWARDLARGE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_28 },
+ { ID_PLAY_SEEKKEYFORWARD, VK_RIGHT, FVIRTKEY | FSHIFT | FNOINVERT, IDS_MPLAYERC_29 },
+ { ID_PLAY_SEEKKEYBACKWARD, VK_LEFT, FVIRTKEY | FSHIFT | FNOINVERT, IDS_MPLAYERC_30 },
+ { ID_PLAY_SEEKSET, VK_HOME, FVIRTKEY | FNOINVERT, IDS_AG_SEEKSET },
+ { ID_PLAY_REPEAT_FOREVER, 0, FVIRTKEY | FNOINVERT, IDS_PLAYLOOP_FOREVER },
+ { ID_PLAY_REPEAT_ONEFILE, 0, FVIRTKEY | FNOINVERT, IDS_PLAYLOOPMODE_FILE },
+ { ID_PLAY_REPEAT_WHOLEPLAYLIST, 0, FVIRTKEY | FNOINVERT, IDS_PLAYLOOPMODE_PLAYLIST },
+ { ID_NAVIGATE_SKIPFORWARD, VK_NEXT, FVIRTKEY | FNOINVERT, IDS_AG_NEXT, APPCOMMAND_MEDIA_NEXTTRACK, wmcmd::X2DOWN, wmcmd::X2DOWN },
+ { ID_NAVIGATE_SKIPBACK, VK_PRIOR, FVIRTKEY | FNOINVERT, IDS_AG_PREVIOUS, APPCOMMAND_MEDIA_PREVIOUSTRACK, wmcmd::X1DOWN, wmcmd::X1DOWN },
+ { ID_NAVIGATE_SKIPFORWARDFILE, VK_NEXT, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_NEXT_FILE },
+ { ID_NAVIGATE_SKIPBACKFILE, VK_PRIOR, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PREVIOUS_FILE },
+ { ID_NAVIGATE_TUNERSCAN, 'T', FVIRTKEY | FSHIFT | FNOINVERT, IDS_NAVIGATE_TUNERSCAN },
+ { ID_FAVORITES_QUICKADDFAVORITE, 'Q', FVIRTKEY | FSHIFT | FNOINVERT, IDS_FAVORITES_QUICKADDFAVORITE },
+ { ID_VIEW_CAPTIONMENU, '0', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_CAPTION },
+ { ID_VIEW_SEEKER, '1', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_SEEKER },
+ { ID_VIEW_CONTROLS, '2', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_CONTROLS },
+ { ID_VIEW_INFORMATION, '3', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_INFO },
+ { ID_VIEW_STATISTICS, '4', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_STATS },
+ { ID_VIEW_STATUS, '5', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_STATUS },
+ { ID_VIEW_SUBRESYNC, '6', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_SUBRESYNC },
+ { ID_VIEW_PLAYLIST, '7', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_PLAYLIST },
+ { ID_VIEW_CAPTURE, '8', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_CAPTURE },
+ { ID_VIEW_NAVIGATION, '9', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_NAVIGATION },
+ { ID_VIEW_DEBUGSHADERS, 0, FVIRTKEY | FNOINVERT, IDS_AG_TOGGLE_DEBUGSHADERS },
+ { ID_VIEW_PRESETS_MINIMAL, '1', FVIRTKEY | FNOINVERT, IDS_AG_VIEW_MINIMAL },
+ { ID_VIEW_PRESETS_COMPACT, '2', FVIRTKEY | FNOINVERT, IDS_AG_VIEW_COMPACT },
+ { ID_VIEW_PRESETS_NORMAL, '3', FVIRTKEY | FNOINVERT, IDS_AG_VIEW_NORMAL },
+ { ID_VIEW_FULLSCREEN, VK_RETURN, FVIRTKEY | FALT | FNOINVERT, IDS_AG_FULLSCREEN, 0, wmcmd::LDBLCLK, wmcmd::LDBLCLK },
+ { ID_VIEW_FULLSCREEN_SECONDARY, VK_F11, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_39 },
+ { ID_VIEW_ZOOM_50, '1', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_50 },
+ { ID_VIEW_ZOOM_100, '2', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_100 },
+ { ID_VIEW_ZOOM_200, '3', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_200 },
+ { ID_VIEW_ZOOM_AUTOFIT, '4', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_AUTO_FIT },
+ { ID_VIEW_ZOOM_AUTOFIT_LARGER, '5', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_AUTO_FIT_LARGER },
+ { ID_ASPECTRATIO_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_AG_NEXT_AR_PRESET },
+ { ID_VIEW_VF_HALF, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_HALF },
+ { ID_VIEW_VF_NORMAL, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_NORMAL },
+ { ID_VIEW_VF_DOUBLE, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_DOUBLE },
+ { ID_VIEW_VF_STRETCH, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_STRETCH },
+ { ID_VIEW_VF_FROMINSIDE, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_INSIDE },
+ { ID_VIEW_VF_ZOOM1, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_ZOOM1 },
+ { ID_VIEW_VF_ZOOM2, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_ZOOM2 },
+ { ID_VIEW_VF_FROMOUTSIDE, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_OUTSIDE },
+ { ID_VIEW_VF_SWITCHZOOM, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_SWITCHZOOM },
+ { ID_ONTOP_ALWAYS, 'A', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_ALWAYS_ON_TOP },
+ { ID_VIEW_RESET, VK_NUMPAD5, FVIRTKEY | FNOINVERT, IDS_AG_PNS_RESET },
+ { ID_VIEW_INCSIZE, VK_NUMPAD9, FVIRTKEY | FNOINVERT, IDS_AG_PNS_INC_SIZE },
+ { ID_VIEW_INCWIDTH, VK_NUMPAD6, FVIRTKEY | FNOINVERT, IDS_AG_PNS_INC_WIDTH },
+ { ID_VIEW_INCHEIGHT, VK_NUMPAD8, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_47 },
+ { ID_VIEW_DECSIZE, VK_NUMPAD1, FVIRTKEY | FNOINVERT, IDS_AG_PNS_DEC_SIZE },
+ { ID_VIEW_DECWIDTH, VK_NUMPAD4, FVIRTKEY | FNOINVERT, IDS_AG_PNS_DEC_WIDTH },
+ { ID_VIEW_DECHEIGHT, VK_NUMPAD2, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_50 },
+ { ID_PANSCAN_CENTER, VK_NUMPAD5, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_CENTER },
+ { ID_PANSCAN_MOVELEFT, VK_NUMPAD4, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_LEFT },
+ { ID_PANSCAN_MOVERIGHT, VK_NUMPAD6, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_RIGHT },
+ { ID_PANSCAN_MOVEUP, VK_NUMPAD8, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_UP },
+ { ID_PANSCAN_MOVEDOWN, VK_NUMPAD2, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_DOWN },
+ { ID_PANSCAN_MOVEUPLEFT, VK_NUMPAD7, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_UPLEFT },
+ { ID_PANSCAN_MOVEUPRIGHT, VK_NUMPAD9, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_UPRIGHT },
+ { ID_PANSCAN_MOVEDOWNLEFT, VK_NUMPAD1, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_DOWNLEFT },
+ { ID_PANSCAN_MOVEDOWNRIGHT, VK_NUMPAD3, FVIRTKEY | FCONTROL | FNOINVERT, IDS_MPLAYERC_59 },
+ { ID_PANSCAN_ROTATEXP, VK_NUMPAD8, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEX_P },
+ { ID_PANSCAN_ROTATEXM, VK_NUMPAD2, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEX_M },
+ { ID_PANSCAN_ROTATEYP, VK_NUMPAD4, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEY_P },
+ { ID_PANSCAN_ROTATEYM, VK_NUMPAD6, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEY_M },
+ { ID_PANSCAN_ROTATEZP, VK_NUMPAD1, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEZ_P },
+ { ID_PANSCAN_ROTATEZM, VK_NUMPAD3, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEZ_M },
+ { ID_VOLUME_UP, VK_UP, FVIRTKEY | FNOINVERT, IDS_AG_VOLUME_UP, 0, wmcmd::WUP, wmcmd::WUP },
+ { ID_VOLUME_DOWN, VK_DOWN, FVIRTKEY | FNOINVERT, IDS_AG_VOLUME_DOWN, 0, wmcmd::WDOWN, wmcmd::WDOWN },
+ { ID_VOLUME_MUTE, 'M', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_VOLUME_MUTE, 0 },
+ { ID_VOLUME_BOOST_INC, 0, FVIRTKEY | FNOINVERT, IDS_VOLUME_BOOST_INC },
+ { ID_VOLUME_BOOST_DEC, 0, FVIRTKEY | FNOINVERT, IDS_VOLUME_BOOST_DEC },
+ { ID_VOLUME_BOOST_MIN, 0, FVIRTKEY | FNOINVERT, IDS_VOLUME_BOOST_MIN },
+ { ID_VOLUME_BOOST_MAX, 0, FVIRTKEY | FNOINVERT, IDS_VOLUME_BOOST_MAX },
+ { ID_CUSTOM_CHANNEL_MAPPING, 0, FVIRTKEY | FNOINVERT, IDS_CUSTOM_CHANNEL_MAPPING },
+ { ID_NORMALIZE, 0, FVIRTKEY | FNOINVERT, IDS_NORMALIZE },
+ { ID_REGAIN_VOLUME, 0, FVIRTKEY | FNOINVERT, IDS_REGAIN_VOLUME },
+ { ID_COLOR_BRIGHTNESS_INC, 0, FVIRTKEY | FNOINVERT, IDS_BRIGHTNESS_INC },
+ { ID_COLOR_BRIGHTNESS_DEC, 0, FVIRTKEY | FNOINVERT, IDS_BRIGHTNESS_DEC },
+ { ID_COLOR_CONTRAST_INC, 0, FVIRTKEY | FNOINVERT, IDS_CONTRAST_INC },
+ { ID_COLOR_CONTRAST_DEC, 0, FVIRTKEY | FNOINVERT, IDS_CONTRAST_DEC },
+ { ID_COLOR_HUE_INC, 0, FVIRTKEY | FNOINVERT, IDS_HUE_INC },
+ { ID_COLOR_HUE_DEC, 0, FVIRTKEY | FNOINVERT, IDS_HUE_DEC },
+ { ID_COLOR_SATURATION_INC, 0, FVIRTKEY | FNOINVERT, IDS_SATURATION_INC },
+ { ID_COLOR_SATURATION_DEC, 0, FVIRTKEY | FNOINVERT, IDS_SATURATION_DEC },
+ { ID_COLOR_RESET, 0, FVIRTKEY | FNOINVERT, IDS_RESET_COLOR },
+ { ID_NAVIGATE_TITLEMENU, 'T', FVIRTKEY | FALT | FNOINVERT, IDS_MPLAYERC_63 },
+ { ID_NAVIGATE_ROOTMENU, 'R', FVIRTKEY | FALT | FNOINVERT, IDS_AG_DVD_ROOT_MENU },
+ { ID_NAVIGATE_SUBPICTUREMENU, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_65 },
+ { ID_NAVIGATE_AUDIOMENU, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_66 },
+ { ID_NAVIGATE_ANGLEMENU, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_67 },
+ { ID_NAVIGATE_CHAPTERMENU, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_68 },
+ { ID_NAVIGATE_MENU_LEFT, VK_LEFT, FVIRTKEY | FALT | FNOINVERT, IDS_AG_DVD_MENU_LEFT },
+ { ID_NAVIGATE_MENU_RIGHT, VK_RIGHT, FVIRTKEY | FALT | FNOINVERT, IDS_MPLAYERC_70 },
+ { ID_NAVIGATE_MENU_UP, VK_UP, FVIRTKEY | FALT | FNOINVERT, IDS_AG_DVD_MENU_UP },
+ { ID_NAVIGATE_MENU_DOWN, VK_DOWN, FVIRTKEY | FALT | FNOINVERT, IDS_AG_DVD_MENU_DOWN },
+ { ID_NAVIGATE_MENU_ACTIVATE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_73 },
+ { ID_NAVIGATE_MENU_BACK, 0, FVIRTKEY | FNOINVERT, IDS_AG_DVD_MENU_BACK },
+ { ID_NAVIGATE_MENU_LEAVE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_75 },
+ { ID_BOSS, 'B', FVIRTKEY | FNOINVERT, IDS_AG_BOSS_KEY },
+ { ID_MENU_PLAYER_SHORT, VK_APPS, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_77, 0, wmcmd::RUP, wmcmd::RUP },
+ { ID_MENU_PLAYER_LONG, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_78 },
+ { ID_MENU_FILTERS, 0, FVIRTKEY | FNOINVERT, IDS_AG_FILTERS_MENU },
+ { ID_VIEW_OPTIONS, 'O', FVIRTKEY | FNOINVERT, IDS_AG_OPTIONS },
+ { ID_STREAM_AUDIO_NEXT, 'A', FVIRTKEY | FNOINVERT, IDS_AG_NEXT_AUDIO },
+ { ID_STREAM_AUDIO_PREV, 'A', FVIRTKEY | FSHIFT | FNOINVERT, IDS_AG_PREV_AUDIO },
+ { ID_STREAM_SUB_NEXT, 'S', FVIRTKEY | FNOINVERT, IDS_AG_NEXT_SUBTITLE },
+ { ID_STREAM_SUB_PREV, 'S', FVIRTKEY | FSHIFT | FNOINVERT, IDS_AG_PREV_SUBTITLE },
+ { ID_STREAM_SUB_ONOFF, 'W', FVIRTKEY | FNOINVERT, IDS_MPLAYERC_85 },
+ { ID_SUBTITLES_SUBITEM_START + 2, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_86 },
+ { ID_DVD_ANGLE_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_91 },
+ { ID_DVD_ANGLE_PREV, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_92 },
+ { ID_DVD_AUDIO_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_93 },
+ { ID_DVD_AUDIO_PREV, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_94 },
+ { ID_DVD_SUB_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_95 },
+ { ID_DVD_SUB_PREV, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_96 },
+ { ID_DVD_SUB_ONOFF, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_97 },
+ { ID_VIEW_TEARING_TEST, 'T', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TEARING_TEST },
+ { ID_VIEW_OSD_DISPLAY_TIME, 'I', FVIRTKEY | FCONTROL | FNOINVERT, IDS_OSD_DISPLAY_CURRENT_TIME },
+ { ID_VIEW_OSD_SHOW_FILENAME, 'N', FVIRTKEY | FNOINVERT, IDS_OSD_SHOW_FILENAME },
+ { ID_SHADERS_PRESET_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_AG_SHADERS_PRESET_NEXT },
+ { ID_SHADERS_PRESET_PREV, 0, FVIRTKEY | FNOINVERT, IDS_AG_SHADERS_PRESET_PREV },
+ { ID_D3DFULLSCREEN_TOGGLE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_99 },
+ { ID_GOTO_PREV_SUB, 'Y', FVIRTKEY | FNOINVERT, IDS_MPLAYERC_100 },
+ { ID_GOTO_NEXT_SUB, 'U', FVIRTKEY | FNOINVERT, IDS_MPLAYERC_101 },
+ { ID_SHIFT_SUB_DOWN, VK_NEXT, FVIRTKEY | FALT | FNOINVERT, IDS_MPLAYERC_102 },
+ { ID_SHIFT_SUB_UP, VK_PRIOR, FVIRTKEY | FALT | FNOINVERT, IDS_MPLAYERC_103 },
+ { ID_VIEW_DISPLAY_RENDERER_STATS, 'J', FVIRTKEY | FCONTROL | FNOINVERT, IDS_OSD_DISPLAY_RENDERER_STATS },
+ { ID_VIEW_RESET_RENDERER_STATS, 'R', FVIRTKEY | FCONTROL | FALT | FNOINVERT, IDS_OSD_RESET_RENDERER_STATS },
+ { ID_VIEW_VSYNC, 'V', FVIRTKEY | FNOINVERT, IDS_AG_VSYNC },
+ { ID_VIEW_ENABLEFRAMETIMECORRECTION, 0, FVIRTKEY | FNOINVERT, IDS_AG_ENABLEFRAMETIMECORRECTION },
+ { ID_VIEW_VSYNCACCURATE, 'V', FVIRTKEY | FCONTROL | FALT | FNOINVERT, IDS_AG_VSYNCACCURATE },
+ { ID_VIEW_VSYNCOFFSET_DECREASE, VK_UP, FVIRTKEY | FCONTROL | FALT | FNOINVERT, IDS_AG_VSYNCOFFSET_DECREASE },
+ { ID_VIEW_VSYNCOFFSET_INCREASE, VK_DOWN, FVIRTKEY | FCONTROL | FALT | FNOINVERT, IDS_AG_VSYNCOFFSET_INCREASE },
+ { ID_SUB_DELAY_DOWN, VK_F1, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_104 },
+ { ID_SUB_DELAY_UP, VK_F2, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_105 },
+
+ { ID_AFTERPLAYBACK_DONOTHING, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_DONOTHING },
+ { ID_AFTERPLAYBACK_PLAYNEXT, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_PLAYNEXT },
+ { ID_AFTERPLAYBACK_MONITOROFF, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_MONITOROFF },
+ { ID_AFTERPLAYBACK_EXIT, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_EXIT },
+ { ID_AFTERPLAYBACK_STANDBY, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_STANDBY },
+ { ID_AFTERPLAYBACK_HIBERNATE, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_HIBERNATE },
+ { ID_AFTERPLAYBACK_SHUTDOWN, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_SHUTDOWN },
+ { ID_AFTERPLAYBACK_LOGOFF, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_LOGOFF },
+ { ID_AFTERPLAYBACK_LOCK, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_LOCK },
+
+ { ID_VIEW_EDITLISTEDITOR, 0, FVIRTKEY | FNOINVERT, IDS_AG_TOGGLE_EDITLISTEDITOR },
+ { ID_EDL_IN, 0, FVIRTKEY | FNOINVERT, IDS_AG_EDL_IN },
+ { ID_EDL_OUT, 0, FVIRTKEY | FNOINVERT, IDS_AG_EDL_OUT },
+ { ID_EDL_NEWCLIP, 0, FVIRTKEY | FNOINVERT, IDS_AG_EDL_NEW_CLIP },
+ { ID_EDL_SAVE, 0, FVIRTKEY | FNOINVERT, IDS_AG_EDL_SAVE }
+};
+
void CAppSettings::CreateCommands()
{
-#define ADDCMD(cmd) wmcmds.AddTail(wmcmd##cmd)
- ADDCMD((ID_FILE_OPENQUICK, 'Q', FVIRTKEY | FCONTROL | FNOINVERT, IDS_MPLAYERC_0));
- ADDCMD((ID_FILE_OPENMEDIA, 'O', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_OPEN_FILE));
- ADDCMD((ID_FILE_OPENDVDBD, 'D', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_OPEN_DVD));
- ADDCMD((ID_FILE_OPENDEVICE, 'V', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_OPEN_DEVICE));
- ADDCMD((ID_FILE_REOPEN, 'E', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_REOPEN));
- ADDCMD((ID_FILE_RECYCLE, 0, FVIRTKEY | FNOINVERT, IDS_FILE_RECYCLE));
-
- ADDCMD((ID_FILE_SAVE_COPY, 0, FVIRTKEY | FNOINVERT, IDS_AG_SAVE_COPY));
- ADDCMD((ID_FILE_SAVE_IMAGE, 'I', FVIRTKEY | FALT | FNOINVERT, IDS_AG_SAVE_IMAGE));
- ADDCMD((ID_FILE_SAVE_IMAGE_AUTO, VK_F5, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_6));
- ADDCMD((ID_FILE_SAVE_THUMBNAILS, 0, FVIRTKEY | FNOINVERT, IDS_FILE_SAVE_THUMBNAILS));
-
- ADDCMD((ID_FILE_LOAD_SUBTITLE, 'L', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_LOAD_SUBTITLE));
- ADDCMD((ID_FILE_SAVE_SUBTITLE, 'S', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_SAVE_SUBTITLE));
- ADDCMD((ID_FILE_CLOSE_AND_RESTORE, 'C', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_CLOSE));
- ADDCMD((ID_FILE_PROPERTIES, VK_F10, FVIRTKEY | FSHIFT | FNOINVERT, IDS_AG_PROPERTIES));
- ADDCMD((ID_FILE_EXIT, 'X', FVIRTKEY | FALT | FNOINVERT, IDS_AG_EXIT));
- ADDCMD((ID_PLAY_PLAYPAUSE, VK_SPACE, FVIRTKEY | FNOINVERT, IDS_AG_PLAYPAUSE, APPCOMMAND_MEDIA_PLAY_PAUSE, wmcmd::LUP, wmcmd::LUP));
- ADDCMD((ID_PLAY_PLAY, 0, FVIRTKEY | FNOINVERT, IDS_AG_PLAY, APPCOMMAND_MEDIA_PLAY));
- ADDCMD((ID_PLAY_PAUSE, 0, FVIRTKEY | FNOINVERT, IDS_AG_PAUSE, APPCOMMAND_MEDIA_PAUSE));
- ADDCMD((ID_PLAY_STOP, VK_OEM_PERIOD, FVIRTKEY | FNOINVERT, IDS_AG_STOP, APPCOMMAND_MEDIA_STOP));
- ADDCMD((ID_PLAY_FRAMESTEP, VK_RIGHT, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_FRAMESTEP));
- ADDCMD((ID_PLAY_FRAMESTEPCANCEL, VK_LEFT, FVIRTKEY | FCONTROL | FNOINVERT, IDS_MPLAYERC_16));
- ADDCMD((ID_NAVIGATE_GOTO, 'G', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_GO_TO));
- ADDCMD((ID_PLAY_INCRATE, VK_UP, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_INCREASE_RATE));
- ADDCMD((ID_PLAY_DECRATE, VK_DOWN, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_DECREASE_RATE));
- ADDCMD((ID_PLAY_RESETRATE, 'R', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_RESET_RATE));
- ADDCMD((ID_PLAY_INCAUDDELAY, VK_ADD, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_21));
- ADDCMD((ID_PLAY_DECAUDDELAY, VK_SUBTRACT, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_22));
- ADDCMD((ID_PLAY_SEEKFORWARDSMALL, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_23));
- ADDCMD((ID_PLAY_SEEKBACKWARDSMALL, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_24));
- ADDCMD((ID_PLAY_SEEKFORWARDMED, VK_RIGHT, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_25));
- ADDCMD((ID_PLAY_SEEKBACKWARDMED, VK_LEFT, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_26));
- ADDCMD((ID_PLAY_SEEKFORWARDLARGE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_27));
- ADDCMD((ID_PLAY_SEEKBACKWARDLARGE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_28));
- ADDCMD((ID_PLAY_SEEKKEYFORWARD, VK_RIGHT, FVIRTKEY | FSHIFT | FNOINVERT, IDS_MPLAYERC_29));
- ADDCMD((ID_PLAY_SEEKKEYBACKWARD, VK_LEFT, FVIRTKEY | FSHIFT | FNOINVERT, IDS_MPLAYERC_30));
- ADDCMD((ID_PLAY_SEEKSET, VK_HOME, FVIRTKEY | FNOINVERT, IDS_AG_SEEKSET));
- ADDCMD((ID_NAVIGATE_SKIPFORWARD, VK_NEXT, FVIRTKEY | FNOINVERT, IDS_AG_NEXT, APPCOMMAND_MEDIA_NEXTTRACK, wmcmd::X2DOWN, wmcmd::X2DOWN));
- ADDCMD((ID_NAVIGATE_SKIPBACK, VK_PRIOR, FVIRTKEY | FNOINVERT, IDS_AG_PREVIOUS, APPCOMMAND_MEDIA_PREVIOUSTRACK, wmcmd::X1DOWN, wmcmd::X1DOWN));
- ADDCMD((ID_NAVIGATE_SKIPFORWARDFILE, VK_NEXT, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_NEXT_FILE));
- ADDCMD((ID_NAVIGATE_SKIPBACKFILE, VK_PRIOR, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PREVIOUS_FILE));
- ADDCMD((ID_NAVIGATE_TUNERSCAN, 'T', FVIRTKEY | FSHIFT | FNOINVERT, IDS_NAVIGATE_TUNERSCAN));
- ADDCMD((ID_FAVORITES_QUICKADDFAVORITE, 'Q', FVIRTKEY | FSHIFT | FNOINVERT, IDS_FAVORITES_QUICKADDFAVORITE));
- ADDCMD((ID_VIEW_CAPTIONMENU, '0', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_CAPTION));
- ADDCMD((ID_VIEW_SEEKER, '1', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_SEEKER));
- ADDCMD((ID_VIEW_CONTROLS, '2', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_CONTROLS));
- ADDCMD((ID_VIEW_INFORMATION, '3', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_INFO));
- ADDCMD((ID_VIEW_STATISTICS, '4', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_STATS));
- ADDCMD((ID_VIEW_STATUS, '5', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_STATUS));
- ADDCMD((ID_VIEW_SUBRESYNC, '6', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_SUBRESYNC));
- ADDCMD((ID_VIEW_PLAYLIST, '7', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_PLAYLIST));
- ADDCMD((ID_VIEW_CAPTURE, '8', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_CAPTURE));
- ADDCMD((ID_VIEW_NAVIGATION, '9', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TOGGLE_NAVIGATION));
- ADDCMD((ID_VIEW_DEBUGSHADERS, 0, FVIRTKEY | FNOINVERT, IDS_AG_TOGGLE_DEBUGSHADERS));
- ADDCMD((ID_VIEW_PRESETS_MINIMAL, '1', FVIRTKEY | FNOINVERT, IDS_AG_VIEW_MINIMAL));
- ADDCMD((ID_VIEW_PRESETS_COMPACT, '2', FVIRTKEY | FNOINVERT, IDS_AG_VIEW_COMPACT));
- ADDCMD((ID_VIEW_PRESETS_NORMAL, '3', FVIRTKEY | FNOINVERT, IDS_AG_VIEW_NORMAL));
- ADDCMD((ID_VIEW_FULLSCREEN, VK_RETURN, FVIRTKEY | FALT | FNOINVERT, IDS_AG_FULLSCREEN, 0, wmcmd::LDBLCLK, wmcmd::LDBLCLK));
- ADDCMD((ID_VIEW_FULLSCREEN_SECONDARY, VK_F11, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_39));
- ADDCMD((ID_VIEW_ZOOM_50, '1', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_50));
- ADDCMD((ID_VIEW_ZOOM_100, '2', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_100));
- ADDCMD((ID_VIEW_ZOOM_200, '3', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_200));
- ADDCMD((ID_VIEW_ZOOM_AUTOFIT, '4', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_AUTO_FIT));
- ADDCMD((ID_VIEW_ZOOM_AUTOFIT_LARGER, '5', FVIRTKEY | FALT | FNOINVERT, IDS_AG_ZOOM_AUTO_FIT_LARGER));
- ADDCMD((ID_ASPECTRATIO_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_AG_NEXT_AR_PRESET));
- ADDCMD((ID_VIEW_VF_HALF, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_HALF));
- ADDCMD((ID_VIEW_VF_NORMAL, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_NORMAL));
- ADDCMD((ID_VIEW_VF_DOUBLE, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_DOUBLE));
- ADDCMD((ID_VIEW_VF_STRETCH, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_STRETCH));
- ADDCMD((ID_VIEW_VF_FROMINSIDE, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_INSIDE));
- ADDCMD((ID_VIEW_VF_ZOOM1, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_ZOOM1));
- ADDCMD((ID_VIEW_VF_ZOOM2, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_ZOOM2));
- ADDCMD((ID_VIEW_VF_FROMOUTSIDE, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_OUTSIDE));
- ADDCMD((ID_VIEW_VF_SWITCHZOOM, 0, FVIRTKEY | FNOINVERT, IDS_AG_VIDFRM_SWITCHZOOM));
- ADDCMD((ID_ONTOP_ALWAYS, 'A', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_ALWAYS_ON_TOP));
- ADDCMD((ID_VIEW_RESET, VK_NUMPAD5, FVIRTKEY | FNOINVERT, IDS_AG_PNS_RESET));
- ADDCMD((ID_VIEW_INCSIZE, VK_NUMPAD9, FVIRTKEY | FNOINVERT, IDS_AG_PNS_INC_SIZE));
- ADDCMD((ID_VIEW_INCWIDTH, VK_NUMPAD6, FVIRTKEY | FNOINVERT, IDS_AG_PNS_INC_WIDTH));
- ADDCMD((ID_VIEW_INCHEIGHT, VK_NUMPAD8, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_47));
- ADDCMD((ID_VIEW_DECSIZE, VK_NUMPAD1, FVIRTKEY | FNOINVERT, IDS_AG_PNS_DEC_SIZE));
- ADDCMD((ID_VIEW_DECWIDTH, VK_NUMPAD4, FVIRTKEY | FNOINVERT, IDS_AG_PNS_DEC_WIDTH));
- ADDCMD((ID_VIEW_DECHEIGHT, VK_NUMPAD2, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_50));
- ADDCMD((ID_PANSCAN_CENTER, VK_NUMPAD5, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_CENTER));
- ADDCMD((ID_PANSCAN_MOVELEFT, VK_NUMPAD4, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_LEFT));
- ADDCMD((ID_PANSCAN_MOVERIGHT, VK_NUMPAD6, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_RIGHT));
- ADDCMD((ID_PANSCAN_MOVEUP, VK_NUMPAD8, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_UP));
- ADDCMD((ID_PANSCAN_MOVEDOWN, VK_NUMPAD2, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_DOWN));
- ADDCMD((ID_PANSCAN_MOVEUPLEFT, VK_NUMPAD7, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_UPLEFT));
- ADDCMD((ID_PANSCAN_MOVEUPRIGHT, VK_NUMPAD9, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_UPRIGHT));
- ADDCMD((ID_PANSCAN_MOVEDOWNLEFT, VK_NUMPAD1, FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_PNS_DOWNLEFT));
- ADDCMD((ID_PANSCAN_MOVEDOWNRIGHT, VK_NUMPAD3, FVIRTKEY | FCONTROL | FNOINVERT, IDS_MPLAYERC_59));
- ADDCMD((ID_PANSCAN_ROTATEXP, VK_NUMPAD8, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEX_P));
- ADDCMD((ID_PANSCAN_ROTATEXM, VK_NUMPAD2, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEX_M));
- ADDCMD((ID_PANSCAN_ROTATEYP, VK_NUMPAD4, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEY_P));
- ADDCMD((ID_PANSCAN_ROTATEYM, VK_NUMPAD6, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEY_M));
- ADDCMD((ID_PANSCAN_ROTATEZP, VK_NUMPAD1, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEZ_P));
- ADDCMD((ID_PANSCAN_ROTATEZM, VK_NUMPAD3, FVIRTKEY | FALT | FNOINVERT, IDS_AG_PNS_ROTATEZ_M));
- ADDCMD((ID_VOLUME_UP, VK_UP, FVIRTKEY | FNOINVERT, IDS_AG_VOLUME_UP, 0, wmcmd::WUP, wmcmd::WUP));
- ADDCMD((ID_VOLUME_DOWN, VK_DOWN, FVIRTKEY | FNOINVERT, IDS_AG_VOLUME_DOWN, 0, wmcmd::WDOWN, wmcmd::WDOWN));
- ADDCMD((ID_VOLUME_MUTE, 'M', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_VOLUME_MUTE, 0));
- ADDCMD((ID_VOLUME_BOOST_INC, 0, FVIRTKEY | FNOINVERT, IDS_VOLUME_BOOST_INC));
- ADDCMD((ID_VOLUME_BOOST_DEC, 0, FVIRTKEY | FNOINVERT, IDS_VOLUME_BOOST_DEC));
- ADDCMD((ID_VOLUME_BOOST_MIN, 0, FVIRTKEY | FNOINVERT, IDS_VOLUME_BOOST_MIN));
- ADDCMD((ID_VOLUME_BOOST_MAX, 0, FVIRTKEY | FNOINVERT, IDS_VOLUME_BOOST_MAX));
- ADDCMD((ID_CUSTOM_CHANNEL_MAPPING, 0, FVIRTKEY | FNOINVERT, IDS_CUSTOM_CHANNEL_MAPPING));
- ADDCMD((ID_NORMALIZE, 0, FVIRTKEY | FNOINVERT, IDS_NORMALIZE));
- ADDCMD((ID_REGAIN_VOLUME, 0, FVIRTKEY | FNOINVERT, IDS_REGAIN_VOLUME));
- ADDCMD((ID_COLOR_BRIGHTNESS_INC, 0, FVIRTKEY | FNOINVERT, IDS_BRIGHTNESS_INC));
- ADDCMD((ID_COLOR_BRIGHTNESS_DEC, 0, FVIRTKEY | FNOINVERT, IDS_BRIGHTNESS_DEC));
- ADDCMD((ID_COLOR_CONTRAST_INC, 0, FVIRTKEY | FNOINVERT, IDS_CONTRAST_INC));
- ADDCMD((ID_COLOR_CONTRAST_DEC, 0, FVIRTKEY | FNOINVERT, IDS_CONTRAST_DEC));
- ADDCMD((ID_COLOR_HUE_INC, 0, FVIRTKEY | FNOINVERT, IDS_HUE_INC));
- ADDCMD((ID_COLOR_HUE_DEC, 0, FVIRTKEY | FNOINVERT, IDS_HUE_DEC));
- ADDCMD((ID_COLOR_SATURATION_INC, 0, FVIRTKEY | FNOINVERT, IDS_SATURATION_INC));
- ADDCMD((ID_COLOR_SATURATION_DEC, 0, FVIRTKEY | FNOINVERT, IDS_SATURATION_DEC));
- ADDCMD((ID_COLOR_RESET, 0, FVIRTKEY | FNOINVERT, IDS_RESET_COLOR));
- ADDCMD((ID_NAVIGATE_TITLEMENU, 'T', FVIRTKEY | FALT | FNOINVERT, IDS_MPLAYERC_63));
- ADDCMD((ID_NAVIGATE_ROOTMENU, 'R', FVIRTKEY | FALT | FNOINVERT, IDS_AG_DVD_ROOT_MENU));
- ADDCMD((ID_NAVIGATE_SUBPICTUREMENU, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_65));
- ADDCMD((ID_NAVIGATE_AUDIOMENU, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_66));
- ADDCMD((ID_NAVIGATE_ANGLEMENU, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_67));
- ADDCMD((ID_NAVIGATE_CHAPTERMENU, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_68));
- ADDCMD((ID_NAVIGATE_MENU_LEFT, VK_LEFT, FVIRTKEY | FALT | FNOINVERT, IDS_AG_DVD_MENU_LEFT));
- ADDCMD((ID_NAVIGATE_MENU_RIGHT, VK_RIGHT, FVIRTKEY | FALT | FNOINVERT, IDS_MPLAYERC_70));
- ADDCMD((ID_NAVIGATE_MENU_UP, VK_UP, FVIRTKEY | FALT | FNOINVERT, IDS_AG_DVD_MENU_UP));
- ADDCMD((ID_NAVIGATE_MENU_DOWN, VK_DOWN, FVIRTKEY | FALT | FNOINVERT, IDS_AG_DVD_MENU_DOWN));
- ADDCMD((ID_NAVIGATE_MENU_ACTIVATE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_73));
- ADDCMD((ID_NAVIGATE_MENU_BACK, 0, FVIRTKEY | FNOINVERT, IDS_AG_DVD_MENU_BACK));
- ADDCMD((ID_NAVIGATE_MENU_LEAVE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_75));
- ADDCMD((ID_BOSS, 'B', FVIRTKEY | FNOINVERT, IDS_AG_BOSS_KEY));
- ADDCMD((ID_MENU_PLAYER_SHORT, VK_APPS, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_77, 0, wmcmd::RUP, wmcmd::RUP));
- ADDCMD((ID_MENU_PLAYER_LONG, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_78));
- ADDCMD((ID_MENU_FILTERS, 0, FVIRTKEY | FNOINVERT, IDS_AG_FILTERS_MENU));
- ADDCMD((ID_VIEW_OPTIONS, 'O', FVIRTKEY | FNOINVERT, IDS_AG_OPTIONS));
- ADDCMD((ID_STREAM_AUDIO_NEXT, 'A', FVIRTKEY | FNOINVERT, IDS_AG_NEXT_AUDIO));
- ADDCMD((ID_STREAM_AUDIO_PREV, 'A', FVIRTKEY | FSHIFT | FNOINVERT, IDS_AG_PREV_AUDIO));
- ADDCMD((ID_STREAM_SUB_NEXT, 'S', FVIRTKEY | FNOINVERT, IDS_AG_NEXT_SUBTITLE));
- ADDCMD((ID_STREAM_SUB_PREV, 'S', FVIRTKEY | FSHIFT | FNOINVERT, IDS_AG_PREV_SUBTITLE));
- ADDCMD((ID_STREAM_SUB_ONOFF, 'W', FVIRTKEY | FNOINVERT, IDS_MPLAYERC_85));
- ADDCMD((ID_SUBTITLES_SUBITEM_START + 2, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_86));
- ADDCMD((ID_FILE_ISDB_DOWNLOAD, 'D', FVIRTKEY | FNOINVERT, IDS_DOWNLOAD_SUBS));
- ADDCMD((ID_OGM_AUDIO_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_87));
- ADDCMD((ID_OGM_AUDIO_PREV, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_88));
- ADDCMD((ID_OGM_SUB_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_89));
- ADDCMD((ID_OGM_SUB_PREV, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_90));
- ADDCMD((ID_DVD_ANGLE_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_91));
- ADDCMD((ID_DVD_ANGLE_PREV, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_92));
- ADDCMD((ID_DVD_AUDIO_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_93));
- ADDCMD((ID_DVD_AUDIO_PREV, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_94));
- ADDCMD((ID_DVD_SUB_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_95));
- ADDCMD((ID_DVD_SUB_PREV, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_96));
- ADDCMD((ID_DVD_SUB_ONOFF, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_97));
- ADDCMD((ID_VIEW_TEARING_TEST, 'T', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_TEARING_TEST));
- ADDCMD((ID_VIEW_REMAINING_TIME, 'I', FVIRTKEY | FCONTROL | FNOINVERT, IDS_MPLAYERC_98));
- ADDCMD((ID_SHADERS_PRESET_NEXT, 0, FVIRTKEY | FNOINVERT, IDS_AG_SHADERS_PRESET_NEXT));
- ADDCMD((ID_SHADERS_PRESET_PREV, 0, FVIRTKEY | FNOINVERT, IDS_AG_SHADERS_PRESET_PREV));
- ADDCMD((ID_D3DFULLSCREEN_TOGGLE, 0, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_99));
- ADDCMD((ID_GOTO_PREV_SUB, 'Y', FVIRTKEY | FNOINVERT, IDS_MPLAYERC_100));
- ADDCMD((ID_GOTO_NEXT_SUB, 'U', FVIRTKEY | FNOINVERT, IDS_MPLAYERC_101));
- ADDCMD((ID_SHIFT_SUB_DOWN, VK_NEXT, FVIRTKEY | FALT | FNOINVERT, IDS_MPLAYERC_102));
- ADDCMD((ID_SHIFT_SUB_UP, VK_PRIOR, FVIRTKEY | FALT | FNOINVERT, IDS_MPLAYERC_103));
- ADDCMD((ID_VIEW_DISPLAYSTATS, 'J', FVIRTKEY | FCONTROL | FNOINVERT, IDS_AG_DISPLAY_STATS));
- ADDCMD((ID_VIEW_RESETSTATS, 'R', FVIRTKEY | FCONTROL | FALT | FNOINVERT, IDS_AG_RESET_STATS));
- ADDCMD((ID_VIEW_VSYNC, 'V', FVIRTKEY | FNOINVERT, IDS_AG_VSYNC));
- ADDCMD((ID_VIEW_ENABLEFRAMETIMECORRECTION, 0, FVIRTKEY | FNOINVERT, IDS_AG_ENABLEFRAMETIMECORRECTION));
- ADDCMD((ID_VIEW_VSYNCACCURATE, 'V', FVIRTKEY | FCONTROL | FALT | FNOINVERT, IDS_AG_VSYNCACCURATE));
- ADDCMD((ID_VIEW_VSYNCOFFSET_DECREASE, VK_UP, FVIRTKEY | FCONTROL | FALT | FNOINVERT, IDS_AG_VSYNCOFFSET_DECREASE));
- ADDCMD((ID_VIEW_VSYNCOFFSET_INCREASE, VK_DOWN, FVIRTKEY | FCONTROL | FALT | FNOINVERT, IDS_AG_VSYNCOFFSET_INCREASE));
- ADDCMD((ID_SUB_DELAY_DOWN, VK_F1, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_104));
- ADDCMD((ID_SUB_DELAY_UP, VK_F2, FVIRTKEY | FNOINVERT, IDS_MPLAYERC_105));
-
- ADDCMD((ID_AFTERPLAYBACK_CLOSE, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_CLOSE));
- ADDCMD((ID_AFTERPLAYBACK_STANDBY, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_STANDBY));
- ADDCMD((ID_AFTERPLAYBACK_HIBERNATE, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_HIBERNATE));
- ADDCMD((ID_AFTERPLAYBACK_SHUTDOWN, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_SHUTDOWN));
- ADDCMD((ID_AFTERPLAYBACK_LOGOFF, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_LOGOFF));
- ADDCMD((ID_AFTERPLAYBACK_LOCK, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_LOCK));
- ADDCMD((ID_AFTERPLAYBACK_MONITOROFF, 0, FVIRTKEY | FNOINVERT, IDS_AFTERPLAYBACK_MONITOROFF));
-
- ADDCMD((ID_VIEW_EDITLISTEDITOR, 0, FVIRTKEY | FNOINVERT, IDS_AG_TOGGLE_EDITLISTEDITOR));
- ADDCMD((ID_EDL_IN, 0, FVIRTKEY | FNOINVERT, IDS_AG_EDL_IN));
- ADDCMD((ID_EDL_OUT, 0, FVIRTKEY | FNOINVERT, IDS_AG_EDL_OUT));
- ADDCMD((ID_EDL_NEWCLIP, 0, FVIRTKEY | FNOINVERT, IDS_AG_EDL_NEW_CLIP));
- ADDCMD((ID_EDL_SAVE, 0, FVIRTKEY | FNOINVERT, IDS_AG_EDL_SAVE));
-
-#undef ADDCMD
+ for (const auto& wc : default_wmcmds) {
+ wmcmds.AddTail(wmcmd(wc));
+ }
}
CAppSettings::~CAppSettings()
@@ -603,26 +637,77 @@ bool CAppSettings::IsD3DFullscreen() const
}
}
-bool CAppSettings::IsISRAvailable() const
+bool CAppSettings::IsISRAutoLoadEnabled() const
{
- return (iDSVideoRendererType == VIDRNDT_DS_VMR7RENDERLESS ||
- iDSVideoRendererType == VIDRNDT_DS_VMR9RENDERLESS ||
- iDSVideoRendererType == VIDRNDT_DS_EVR_CUSTOM ||
- iDSVideoRendererType == VIDRNDT_DS_DXR ||
- iDSVideoRendererType == VIDRNDT_DS_SYNC ||
- iDSVideoRendererType == VIDRNDT_DS_MADVR);
+ return eSubtitleRenderer == SubtitleRenderer::INTERNAL &&
+ IsSubtitleRendererSupported(eSubtitleRenderer, iDSVideoRendererType);
}
-bool CAppSettings::IsISRAutoLoadEnabled() const
+CAppSettings::SubtitleRenderer CAppSettings::GetSubtitleRenderer() const
{
- return fAutoloadSubtitles && IsISRAvailable();
+ if (IsSubtitleRendererSupported(SubtitleRenderer::INTERNAL, iDSVideoRendererType) ||
+ IsSubtitleRendererSupported(SubtitleRenderer::XY_SUB_FILTER, iDSVideoRendererType) ||
+ IsSubtitleRendererSupported(SubtitleRenderer::ASS_FILTER, iDSVideoRendererType)) {
+ return eSubtitleRenderer;
+ }
+ return SubtitleRenderer::VS_FILTER;
+}
+
+bool CAppSettings::IsSubtitleRendererRegistered(SubtitleRenderer eSubtitleRenderer)
+{
+ switch (eSubtitleRenderer) {
+ case SubtitleRenderer::INTERNAL:
+ return true;
+ case SubtitleRenderer::VS_FILTER:
+ return IsCLSIDRegistered(CLSID_VSFilter);
+ case SubtitleRenderer::XY_SUB_FILTER:
+ return IsCLSIDRegistered(CLSID_XySubFilter);
+ case SubtitleRenderer::ASS_FILTER:
+ return IsCLSIDRegistered(CLSID_AssFilter);
+ default:
+ ASSERT(FALSE);
+ return false;
+ }
+}
+
+bool CAppSettings::IsSubtitleRendererSupported(SubtitleRenderer eSubtitleRenderer, int videoRenderer)
+{
+ switch (eSubtitleRenderer) {
+ case SubtitleRenderer::INTERNAL:
+ switch (videoRenderer) {
+ case VIDRNDT_DS_VMR9RENDERLESS:
+ case VIDRNDT_DS_EVR_CUSTOM:
+ case VIDRNDT_DS_DXR:
+ case VIDRNDT_DS_SYNC:
+ case VIDRNDT_DS_MADVR:
+ return true;
+ }
+ break;
+
+ case SubtitleRenderer::VS_FILTER:
+ return true;
+
+ case SubtitleRenderer::XY_SUB_FILTER:
+ case SubtitleRenderer::ASS_FILTER:
+ switch (videoRenderer) {
+ case VIDRNDT_DS_VMR9RENDERLESS:
+ case VIDRNDT_DS_EVR_CUSTOM:
+ case VIDRNDT_DS_SYNC:
+ case VIDRNDT_DS_MADVR:
+ return true;
+ }
+ break;
+
+ default:
+ ASSERT(FALSE);
+ }
+
+ return false;
}
bool CAppSettings::IsVideoRendererAvailable(int iVideoRendererType)
{
switch (iVideoRendererType) {
- case VIDRNDT_DS_VMR7RENDERLESS:
- return !VersionInfo::Is64Bit() && GetSystemMetrics(SM_CXVIRTUALSCREEN) < 2048 && GetSystemMetrics(SM_CYVIRTUALSCREEN) < 2048;
case VIDRNDT_DS_DXR:
return IsCLSIDRegistered(CLSID_DXR);
case VIDRNDT_DS_EVR:
@@ -636,6 +721,11 @@ bool CAppSettings::IsVideoRendererAvailable(int iVideoRendererType)
}
}
+bool CAppSettings::IsInitialized() const
+{
+ return bInitialized;
+}
+
CString CAppSettings::SelectedAudioRenderer() const
{
CString strResult;
@@ -653,7 +743,7 @@ void CAppSettings::SaveSettings()
CMPlayerCApp* pApp = AfxGetMyApp();
ASSERT(pApp);
- if (!fInitialized) {
+ if (!bInitialized) {
return;
}
@@ -670,6 +760,7 @@ void CAppSettings::SaveSettings()
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_MUTE, fMute);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_LOOPNUM, nLoops);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_LOOP, fLoopForever);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_LOOPMODE, static_cast<int>(eLoopMode));
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_ZOOM, iZoomLevel);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_MULTIINST, fAllowMultipleInst);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_TITLEBARTEXTSTYLE, iTitleBarTextStyle);
@@ -726,7 +817,6 @@ void CAppSettings::SaveSettings()
pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_AUDIORENDERERTYPE, CString(strAudioRendererDisplayName));
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_AUTOLOADAUDIO, fAutoloadAudio);
- pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_AUTOLOADSUBTITLES, fAutoloadSubtitles);
pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_SUBTITLESLANGORDER, CString(strSubtitlesLanguageOrder));
pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_AUDIOSLANGORDER, CString(strAudiosLanguageOrder));
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_BLOCKVSFILTER, fBlockVSFilter);
@@ -750,6 +840,14 @@ void CAppSettings::SaveSettings()
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_PRIORITIZEEXTERNALSUBTITLES, fPrioritizeExternalSubtitles);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_DISABLEINTERNALSUBTITLES, fDisableInternalSubtitles);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_ALLOW_OVERRIDING_EXT_SPLITTER, bAllowOverridingExternalSplitterChoice);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_AUTODOWNLOADSUBTITLES, bAutoDownloadSubtitles);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_AUTODOWNLOADSCOREMOVIES, nAutoDownloadScoreMovies);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_AUTODOWNLOADSCORESERIES, nAutoDownloadScoreSeries);
+ pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_AUTODOWNLOADSUBTITLESEXCLUDE, strAutoDownloadSubtitlesExclude);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_AUTOUPLOADSUBTITLES, bAutoUploadSubtitles);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_PREFERHEARINGIMPAIREDSUBTITLES, bPreferHearingImpairedSubtitles);
+ pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_SUBTITLESPROVIDERS, strSubtitlesProviders);
+
pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_SUBTITLEPATHS, strSubtitlePaths);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_USEDEFAULTSUBTITLESSTYLE, fUseDefaultSubtitlesStyle);
@@ -770,7 +868,7 @@ void CAppSettings::SaveSettings()
pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_FULLSCREENMONITOR, CString(strFullScreenMonitor));
// Prevent Minimize when in Fullscreen mode on non default monitor
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_PREVENT_MINIMIZE, fPreventMinimize);
- pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_WIN7TASKBAR, fUseWin7TaskBar);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_ENHANCED_TASKBAR, bUseEnhancedTaskBar);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_SEARCH_IN_FOLDER, fUseSearchInFolder);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_USE_TIME_TOOLTIP, fUseTimeTooltip);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_TIME_TOOLTIP_POSITION, nTimeTooltipPosition);
@@ -823,14 +921,10 @@ void CAppSettings::SaveSettings()
pApp->WriteProfileInt(IDS_R_DVB, IDS_RS_DVB_REBUILD_FG, nDVBRebuildFilterGraph);
pApp->WriteProfileInt(IDS_R_DVB, IDS_RS_DVB_STOP_FG, nDVBStopFilterGraph);
- int iChannel = 0;
- POSITION pos = m_DVBChannels.GetHeadPosition();
- while (pos) {
- CString strTemp2;
- CDVBChannel& Channel = m_DVBChannels.GetNext(pos);
- strTemp2.Format(_T("%d"), iChannel);
- pApp->WriteProfileString(IDS_R_DVB, strTemp2, Channel.ToString());
- iChannel++;
+ for (size_t i = 0; i < m_DVBChannels.size(); i++) {
+ CString numChannel;
+ numChannel.Format(_T("%Iu"), i);
+ pApp->WriteProfileString(IDS_R_DVB, numChannel, m_DVBChannels[i].ToString());
}
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_DVDPOS, fRememberDVDPos);
@@ -859,17 +953,16 @@ void CAppSettings::SaveSettings()
}
pApp->WriteProfileString(IDS_R_COMMANDS, nullptr, nullptr);
- pos = wmcmds.GetHeadPosition();
+ POSITION pos = wmcmds.GetHeadPosition();
for (int i = 0; pos;) {
- wmcmd& wc = wmcmds.GetNext(pos);
+ const wmcmd& wc = wmcmds.GetNext(pos);
if (wc.IsModified()) {
CString str;
str.Format(_T("CommandMod%d"), i);
CString str2;
- str2.Format(_T("%u %x %x %s %d %u %u %u"),
- wc.cmd, wc.fVirt, wc.key,
- _T("\"") + CString(wc.rmcmd) + _T("\""), wc.rmrepcnt,
- wc.mouse, wc.appcmd, wc.mouseFS);
+ str2.Format(_T("%hu %hx %hx \"%S\" %d %hhu %u %hhu"),
+ wc.cmd, (WORD)wc.fVirt, wc.key, wc.rmcmd,
+ wc.rmrepcnt, wc.mouse, wc.appcmd, wc.mouseFS);
pApp->WriteProfileString(IDS_R_COMMANDS, str, str2);
i++;
}
@@ -909,9 +1002,10 @@ void CAppSettings::SaveSettings()
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_ENABLEWEBSERVER, fEnableWebServer);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERPORT, nWebServerPort);
- pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERPRINTDEBUGINFO, fWebServerPrintDebugInfo);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERUSECOMPRESSION, fWebServerUseCompression);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERLOCALHOSTONLY, fWebServerLocalhostOnly);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_WEBUI_ENABLE_PREVIEW, bWebUIEnablePreview);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERPRINTDEBUGINFO, fWebServerPrintDebugInfo);
pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_WEBROOT, strWebRoot);
pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_WEBDEFINDEX, strWebDefIndex);
pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_WEBSERVERCGI, strWebServerCGI);
@@ -924,9 +1018,6 @@ void CAppSettings::SaveSettings()
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_THUMBWIDTH, iThumbWidth);
VERIFY(pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_SUBSAVEEXTERNALSTYLEFILE, bSubSaveExternalStyleFile));
-
- pApp->WriteProfileString(IDS_R_SETTINGS, IDS_RS_ISDB, strISDb);
-
{
// Save the list of extra (non-default) shader files
VERIFY(pApp->WriteProfileString(IDS_R_SHADERS, IDS_RS_SHADERS_EXTRA, m_ShadersExtraList.ToString()));
@@ -953,6 +1044,7 @@ void CAppSettings::SaveSettings()
}
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_REMAINING_TIME, fRemainingTime);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_HIGH_PRECISION_TIMER, bHighPrecisionTimer);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_UPDATER_AUTO_CHECK, nUpdaterAutoCheck);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_UPDATER_DELAY, nUpdaterDelay);
@@ -964,6 +1056,38 @@ void CAppSettings::SaveSettings()
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_COVER_ART, bEnableCoverArt);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_COVER_ART_SIZE_LIMIT, nCoverArtSizeLimit);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_LOGGING, bEnableLogging);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_USE_LEGACY_TOOLBAR, bUseLegacyToolbar);
+
+ VERIFY(pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_SUBTITLE_RENDERER,
+ static_cast<int>(eSubtitleRenderer)));
+
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_DEFAULTTOOLBARSIZE, nDefaultToolbarSize);
+
+ {
+ CComHeapPtr<WCHAR> pDeviceId;
+ BOOL bExclusive;
+ UINT32 uBufferDuration;
+ if (SUCCEEDED(sanear->GetOuputDevice(&pDeviceId, &bExclusive, &uBufferDuration))) {
+ pApp->WriteProfileString(IDS_R_SANEAR, IDS_RS_SANEAR_DEVICE_ID, pDeviceId);
+ pApp->WriteProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_DEVICE_EXCLUSIVE, bExclusive);
+ pApp->WriteProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_DEVICE_BUFFER, uBufferDuration);
+ }
+
+ BOOL bAllowBitstreaming;
+ sanear->GetAllowBitstreaming(&bAllowBitstreaming);
+ pApp->WriteProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_ALLOW_BITSTREAMING, bAllowBitstreaming);
+
+ BOOL bCrossfeedEnabled;
+ sanear->GetCrossfeedEnabled(&bCrossfeedEnabled);
+ pApp->WriteProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_CROSSFEED_ENABLED, bCrossfeedEnabled);
+
+ UINT32 uCutoffFrequency, uCrossfeedLevel;
+ sanear->GetCrossfeedSettings(&uCutoffFrequency, &uCrossfeedLevel);
+ pApp->WriteProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_CROSSFEED_CUTOFF_FREQ, uCutoffFrequency);
+ pApp->WriteProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_CROSSFEED_LEVEL, uCrossfeedLevel);
+ }
+
pApp->FlushProfile();
}
@@ -1161,6 +1285,7 @@ void CAppSettings::SaveSettingsAutoChangeFullScreenMode()
VERIFY(pApp->WriteProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_CHECKED, mode.bChecked));
VERIFY(pApp->WriteProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_FRAMERATESTART, std::lround(mode.dFrameRateStart * 1000000)));
VERIFY(pApp->WriteProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_FRAMERATESTOP, std::lround(mode.dFrameRateStop * 1000000)));
+ VERIFY(pApp->WriteProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_AUDIODELAY, mode.msAudioDelay));
VERIFY(pApp->WriteProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_DM_BPP, mode.dm.bpp));
VERIFY(pApp->WriteProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_DM_FREQ, mode.dm.freq));
VERIFY(pApp->WriteProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_DM_SIZEX, mode.dm.size.cx));
@@ -1177,7 +1302,7 @@ void CAppSettings::LoadSettings()
UINT len;
BYTE* ptr = nullptr;
- if (fInitialized) {
+ if (bInitialized) {
return;
}
@@ -1189,11 +1314,14 @@ void CAppSettings::LoadSettings()
if (language <= 23) {
// We must be updating from a really old version, use the default language
language = Translations::SetDefaultLanguage();
- } else if (!Translations::SetLanguage(Translations::GetLanguageResourceByLocaleID(language))) {
+ } else if (!Translations::SetLanguage(language)) {
// In case of error, reset the language to English
language = 0;
}
}
+ if (language && CrashReporter::IsEnabled()) {
+ CrashReporter::Enable(Translations::GetLanguageResourceByLocaleID(language).dllPath);
+ }
CreateCommands();
@@ -1208,9 +1336,10 @@ void CAppSettings::LoadSettings()
fMute = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_MUTE, FALSE);
nLoops = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_LOOPNUM, 1);
fLoopForever = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_LOOP, FALSE);
+ eLoopMode = static_cast<LoopMode>(pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_LOOPMODE, static_cast<int>(LoopMode::PLAYLIST)));
iZoomLevel = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_ZOOM, 1);
iDSVideoRendererType = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_DSVIDEORENDERERTYPE,
- SysVersion::IsVistaOrLater() ? (IsVideoRendererAvailable(VIDRNDT_DS_EVR_CUSTOM) ? VIDRNDT_DS_EVR_CUSTOM : VIDRNDT_DS_VMR9RENDERLESS) : VIDRNDT_DS_VMR7RENDERLESS);
+ (SysVersion::IsVistaOrLater() && IsVideoRendererAvailable(VIDRNDT_DS_EVR_CUSTOM)) ? VIDRNDT_DS_EVR_CUSTOM : VIDRNDT_DS_VMR9RENDERLESS);
iRMVideoRendererType = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_RMVIDEORENDERERTYPE, VIDRNDT_RM_DEFAULT);
iQTVideoRendererType = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_QTVIDEORENDERERTYPE, VIDRNDT_QT_DEFAULT);
nVolumeStep = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_VOLUMESTEP, 5);
@@ -1220,7 +1349,6 @@ void CAppSettings::LoadSettings()
strAudioRendererDisplayName = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_AUDIORENDERERTYPE);
fAutoloadAudio = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUTOLOADAUDIO, TRUE);
- fAutoloadSubtitles = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUTOLOADSUBTITLES, TRUE);
strSubtitlesLanguageOrder = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_SUBTITLESLANGORDER);
strAudiosLanguageOrder = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_AUDIOSLANGORDER);
fBlockVSFilter = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_BLOCKVSFILTER, TRUE);
@@ -1248,7 +1376,7 @@ void CAppSettings::LoadSettings()
strFullScreenMonitor = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_FULLSCREENMONITOR);
// Prevent Minimize when in fullscreen mode on non default monitor
fPreventMinimize = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_PREVENT_MINIMIZE, FALSE);
- fUseWin7TaskBar = SysVersion::Is7OrLater() ? !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_WIN7TASKBAR, TRUE) : FALSE;
+ bUseEnhancedTaskBar = SysVersion::Is7OrLater() ? !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_ENHANCED_TASKBAR, TRUE) : FALSE;
fUseSearchInFolder = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_SEARCH_IN_FOLDER, TRUE);
fUseTimeTooltip = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_USE_TIME_TOOLTIP, TRUE);
nTimeTooltipPosition = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_TIME_TOOLTIP_POSITION, TIME_TOOLTIP_ABOVE_SEEKBAR);
@@ -1266,6 +1394,9 @@ void CAppSettings::LoadSettings()
// Last Open Dir
strLastOpenDir = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_LAST_OPEN_DIR, _T("C:\\"));
+ fAudioTimeShift = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_ENABLEAUDIOTIMESHIFT, FALSE);
+ iAudioTimeShift = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUDIOTIMESHIFT, 0);
+
// Auto-change fullscreen mode
autoChangeFSMode.bEnabled = !!pApp->GetProfileInt(IDS_R_SETTINGS_FULLSCREEN_AUTOCHANGE_MODE, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_ENABLE, FALSE);
autoChangeFSMode.bApplyDefaultModeAtFSExit = !!pApp->GetProfileInt(IDS_R_SETTINGS_FULLSCREEN_AUTOCHANGE_MODE, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_APPLYDEFMODEATFSEXIT, TRUE);
@@ -1284,6 +1415,7 @@ void CAppSettings::LoadSettings()
double dFrameRateStart = pApp->GetProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_FRAMERATESTART, 0) / 1000000.0;
double dFrameRateStop = pApp->GetProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_FRAMERATESTOP, 0) / 1000000.0;
+ int msAudioDelay = pApp->GetProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_AUDIODELAY, fAudioTimeShift ? iAudioTimeShift : 0);
DisplayMode dm;
dm.bValid = true;
dm.bpp = (int)pApp->GetProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_DM_BPP, 0);
@@ -1292,7 +1424,7 @@ void CAppSettings::LoadSettings()
dm.size.cy = (LONG)pApp->GetProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_DM_SIZEY, 0);
dm.dwDisplayFlags = pApp->GetProfileInt(section, IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_DM_FLAGS, 0);
- autoChangeFSMode.modes.emplace_back(!!iChecked, dFrameRateStart, dFrameRateStop, dm);
+ autoChangeFSMode.modes.emplace_back(!!iChecked, dFrameRateStart, dFrameRateStop, msAudioDelay, std::move(dm));
}
fExitFullScreenAtTheEnd = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_EXITFULLSCREENATTHEEND, TRUE);
@@ -1348,8 +1480,8 @@ void CAppSettings::LoadSettings()
{
CString temp = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_SPSTYLE);
subtitlesDefStyle <<= temp;
- if (temp.IsEmpty()) {
- subtitlesDefStyle.relativeTo = STSStyle::AUTO; // default to auto mode
+ if (temp.IsEmpty()) { // Position the text subtitles relative to the video frame by default
+ subtitlesDefStyle.relativeTo = STSStyle::VIDEO;
}
}
fOverridePlacement = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_SPOVERRIDEPLACEMENT, FALSE);
@@ -1363,11 +1495,16 @@ void CAppSettings::LoadSettings()
fPrioritizeExternalSubtitles = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_PRIORITIZEEXTERNALSUBTITLES, TRUE);
fDisableInternalSubtitles = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_DISABLEINTERNALSUBTITLES, FALSE);
bAllowOverridingExternalSplitterChoice = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_ALLOW_OVERRIDING_EXT_SPLITTER, FALSE);
+ bAutoDownloadSubtitles = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUTODOWNLOADSUBTITLES, FALSE);
+ nAutoDownloadScoreMovies = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUTODOWNLOADSCOREMOVIES, 0x16);
+ nAutoDownloadScoreSeries = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUTODOWNLOADSCORESERIES, 0x18);
+ strAutoDownloadSubtitlesExclude = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_AUTODOWNLOADSUBTITLESEXCLUDE);
+ bAutoUploadSubtitles = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUTOUPLOADSUBTITLES, FALSE);
+ bPreferHearingImpairedSubtitles = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_PREFERHEARINGIMPAIREDSUBTITLES, FALSE);
+ strSubtitlesProviders = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_SUBTITLESPROVIDERS, _T("<|OpenSubtitles|||1|1|>"));
strSubtitlePaths = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_SUBTITLEPATHS, DEFAULT_SUBTITLE_PATHS);
fUseDefaultSubtitlesStyle = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_USEDEFAULTSUBTITLESSTYLE, FALSE);
fEnableAudioSwitcher = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_ENABLEAUDIOSWITCHER, TRUE);
- fAudioTimeShift = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_ENABLEAUDIOTIMESHIFT, FALSE);
- iAudioTimeShift = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUDIOTIMESHIFT, 0);
fDownSampleTo441 = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_DOWNSAMPLETO441, FALSE);
fCustomChannelMapping = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_CUSTOMCHANNELMAPPING, FALSE);
@@ -1449,29 +1586,35 @@ void CAppSettings::LoadSettings()
if (str2.IsEmpty()) {
break;
}
- int cmd, fVirt, key, repcnt;
- UINT mouse, mouseFS, appcmd;
- TCHAR buff[128];
+
+ wmcmd tmp;
int n;
- if (5 > (n = _stscanf_s(str2, _T("%d %x %x %s %d %u %u %u"), &cmd, &fVirt, &key, buff, _countof(buff), &repcnt, &mouse, &appcmd, &mouseFS))) {
+ int fVirt = 0;
+ if (5 > (n = _stscanf_s(str2, _T("%hu %x %hx %S %d %hhu %u %hhu"),
+ &tmp.cmd, &fVirt, &tmp.key, tmp.rmcmd.GetBuffer(128), 128,
+ &tmp.rmrepcnt, &tmp.mouse, &tmp.appcmd, &tmp.mouseFS))) {
break;
}
- if (POSITION pos = wmcmds.Find(cmd)) {
+ tmp.rmcmd.ReleaseBuffer();
+ if (n >= 2) {
+ tmp.fVirt = (BYTE)fVirt;
+ }
+ if (POSITION pos = wmcmds.Find(tmp)) {
wmcmd& wc = wmcmds.GetAt(pos);
- wc.cmd = cmd;
- wc.fVirt = fVirt;
- wc.key = key;
+ wc.cmd = tmp.cmd;
+ wc.fVirt = tmp.fVirt;
+ wc.key = tmp.key;
if (n >= 6) {
- wc.mouse = mouse;
+ wc.mouse = tmp.mouse;
}
if (n >= 7) {
- wc.appcmd = appcmd;
+ wc.appcmd = tmp.appcmd;
}
// If there is no distinct bindings for windowed and
// fullscreen modes we use the same for both.
- wc.mouseFS = (n >= 8) ? mouseFS : wc.mouse;
- wc.rmcmd = CStringA(buff).Trim('\"');
- wc.rmrepcnt = repcnt;
+ wc.mouseFS = (n >= 8) ? tmp.mouseFS : wc.mouse;
+ wc.rmcmd = tmp.rmcmd.Trim('\"');
+ wc.rmrepcnt = tmp.rmrepcnt;
}
}
@@ -1516,9 +1659,10 @@ void CAppSettings::LoadSettings()
fEnableWebServer = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_ENABLEWEBSERVER, FALSE);
nWebServerPort = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERPORT, 13579);
- fWebServerPrintDebugInfo = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERPRINTDEBUGINFO, FALSE);
fWebServerUseCompression = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERUSECOMPRESSION, TRUE);
fWebServerLocalhostOnly = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERLOCALHOSTONLY, FALSE);
+ bWebUIEnablePreview = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_WEBUI_ENABLE_PREVIEW, FALSE);
+ fWebServerPrintDebugInfo = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_WEBSERVERPRINTDEBUGINFO, FALSE);
strWebRoot = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_WEBROOT, _T("*./webroot"));
strWebDefIndex = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_WEBDEFINDEX, _T("index.html;index.php"));
strWebServerCGI = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_WEBSERVERCGI);
@@ -1530,9 +1674,9 @@ void CAppSettings::LoadSettings()
// if (!SHGetSpecialFolderPath(nullptr, MyPictures.GetBufferSetLength(MAX_PATH), CSIDL_MYPICTURES, TRUE)) MyPictures.Empty();
// else MyPictures.ReleaseBuffer();
if (ERROR_SUCCESS == key.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"), KEY_READ)) {
- ULONG len = MAX_PATH;
- if (ERROR_SUCCESS == key.QueryStringValue(_T("My Pictures"), MyPictures.GetBuffer(MAX_PATH), &len)) {
- MyPictures.ReleaseBufferSetLength(len);
+ ULONG lenValue = MAX_PATH;
+ if (ERROR_SUCCESS == key.QueryStringValue(_T("My Pictures"), MyPictures.GetBuffer(MAX_PATH), &lenValue)) {
+ MyPictures.ReleaseBufferSetLength(lenValue);
} else {
MyPictures.Empty();
}
@@ -1545,10 +1689,7 @@ void CAppSettings::LoadSettings()
iThumbWidth = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_THUMBWIDTH, 1024);
bSubSaveExternalStyleFile = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_SUBSAVEEXTERNALSTYLEFILE, FALSE);
-
- strISDb = pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_ISDB, _T("www.opensubtitles.org/isdb"));
-
- nLastUsedPage = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_LASTUSEDPAGE, 0);
+ nLastUsedPage = WORD(pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_LASTUSEDPAGE, 0));
{
// Load the list of extra (non-default) shader files
@@ -1610,21 +1751,24 @@ void CAppSettings::LoadSettings()
fBDAUseOffset = !!pApp->GetProfileInt(IDS_R_DVB, IDS_RS_BDA_USE_OFFSET, FALSE);
iBDAOffset = pApp->GetProfileInt(IDS_R_DVB, IDS_RS_BDA_OFFSET, 166);
fBDAIgnoreEncryptedChannels = !!pApp->GetProfileInt(IDS_R_DVB, IDS_RS_BDA_IGNORE_ENCRYPTED_CHANNELS, FALSE);
- nDVBLastChannel = pApp->GetProfileInt(IDS_R_DVB, IDS_RS_DVB_LAST_CHANNEL, 1);
+ nDVBLastChannel = pApp->GetProfileInt(IDS_R_DVB, IDS_RS_DVB_LAST_CHANNEL, INT_ERROR);
nDVBRebuildFilterGraph = (DVB_RebuildFilterGraph) pApp->GetProfileInt(IDS_R_DVB, IDS_RS_DVB_REBUILD_FG, DVB_REBUILD_FG_WHEN_SWITCHING);
nDVBStopFilterGraph = (DVB_StopFilterGraph) pApp->GetProfileInt(IDS_R_DVB, IDS_RS_DVB_STOP_FG, DVB_STOP_FG_WHEN_SWITCHING);
for (int iChannel = 0; ; iChannel++) {
CString strTemp;
- CString strChannel;
- CDVBChannel channel;
strTemp.Format(_T("%d"), iChannel);
- strChannel = pApp->GetProfileString(IDS_R_DVB, strTemp);
+ CString strChannel = pApp->GetProfileString(IDS_R_DVB, strTemp);
if (strChannel.IsEmpty()) {
break;
}
- if (channel.FromString(strChannel)) {
- m_DVBChannels.AddTail(channel);
+ try {
+ m_DVBChannels.emplace_back(strChannel);
+ } catch (CException* e) {
+ // The tokenisation can fail if the input string was invalid
+ TRACE(_T("Failed to parse a DVB channel from string \"%s\""), strChannel);
+ ASSERT(FALSE);
+ e->Delete();
}
}
@@ -1641,6 +1785,7 @@ void CAppSettings::LoadSettings()
fLastFullScreen = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_LASTFULLSCREEN, FALSE);
fRemainingTime = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_REMAINING_TIME, FALSE);
+ bHighPrecisionTimer = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_HIGH_PRECISION_TIMER, FALSE);
nUpdaterAutoCheck = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_UPDATER_AUTO_CHECK, AUTOUPDATE_UNKNOWN);
nUpdaterDelay = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_UPDATER_DELAY, 7);
@@ -1658,11 +1803,33 @@ void CAppSettings::LoadSettings()
bEnableCoverArt = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_COVER_ART, TRUE);
nCoverArtSizeLimit = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_COVER_ART_SIZE_LIMIT, 600);
+ bEnableLogging = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_LOGGING, FALSE);
+ bUseLegacyToolbar = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_USE_LEGACY_TOOLBAR, FALSE);
+
+ eSubtitleRenderer = static_cast<SubtitleRenderer>(pApp->GetProfileInt(IDS_R_SETTINGS,
+ IDS_RS_SUBTITLE_RENDERER, static_cast<int>(SubtitleRenderer::INTERNAL)));
+
+ nDefaultToolbarSize = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_DEFAULTTOOLBARSIZE, 24);
+
if (fLaunchfullscreen) {
nCLSwitches |= CLSW_FULLSCREEN;
}
- fInitialized = true;
+ sanear->SetOuputDevice(pApp->GetProfileString(IDS_R_SANEAR, IDS_RS_SANEAR_DEVICE_ID),
+ pApp->GetProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_DEVICE_EXCLUSIVE, FALSE),
+ pApp->GetProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_DEVICE_BUFFER,
+ SaneAudioRenderer::ISettings::OUTPUT_DEVICE_BUFFER_DEFAULT_MS));
+
+ sanear->SetAllowBitstreaming(pApp->GetProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_ALLOW_BITSTREAMING, TRUE));
+
+ sanear->SetCrossfeedEnabled(pApp->GetProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_CROSSFEED_ENABLED, FALSE));
+
+ sanear->SetCrossfeedSettings(pApp->GetProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_CROSSFEED_CUTOFF_FREQ,
+ SaneAudioRenderer::ISettings::CROSSFEED_CUTOFF_FREQ_CMOY),
+ pApp->GetProfileInt(IDS_R_SANEAR, IDS_RS_SANEAR_CROSSFEED_LEVEL,
+ SaneAudioRenderer::ISettings::CROSSFEED_LEVEL_CMOY));
+
+ bInitialized = true;
}
bool CAppSettings::GetAllowMultiInst() const
@@ -1715,6 +1882,8 @@ void CAppSettings::UpdateRenderersData(bool fSave)
pApp->WriteProfileBinary(IDS_R_SETTINGS, _T("TargetSyncOffset"), (LPBYTE) & (ars.fTargetSyncOffset), sizeof(ars.fTargetSyncOffset));
pApp->WriteProfileBinary(IDS_R_SETTINGS, _T("ControlLimit"), (LPBYTE) & (ars.fControlLimit), sizeof(ars.fControlLimit));
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_CACHESHADERS, ars.bCacheShaders);
+
pApp->WriteProfileInt(IDS_R_SETTINGS, _T("ResetDevice"), r.fResetDevice);
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_SPCSIZE, r.subPicQueueSettings.nSize);
@@ -1779,6 +1948,11 @@ void CAppSettings::UpdateRenderersData(bool fSave)
delete [] dPtr;
}
+ ars.bCacheShaders = !!pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_CACHESHADERS, DefaultSettings.bCacheShaders);
+ if (AfxGetMyApp()->GetAppSavePath(ars.sShaderCachePath)) {
+ ars.sShaderCachePath = PathUtils::CombinePaths(ars.sShaderCachePath, IDS_R_SHADER_CACHE);
+ }
+
r.fResetDevice = !!pApp->GetProfileInt(IDS_R_SETTINGS, _T("ResetDevice"), !SysVersion::IsVistaOrLater());
r.subPicQueueSettings.nSize = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_SPCSIZE, 10);
@@ -1860,7 +2034,7 @@ CString CAppSettings::ParseFileName(CString const& param)
if (param.Find(_T(":")) < 0) {
fullPathName.ReleaseBuffer(GetFullPathName(param, MAX_PATH, fullPathName.GetBuffer(MAX_PATH), nullptr));
- if (!fullPathName.IsEmpty() && FileExists(fullPathName)) {
+ if (!fullPathName.IsEmpty() && PathUtils::Exists(fullPathName)) {
return fullPathName;
}
}
@@ -1929,6 +2103,8 @@ void CAppSettings::ParseCommandLine(CAtlList<CString>& cmdln)
nCLSwitches |= CLSW_DEVICE;
} else if (sw == _T("add")) {
nCLSwitches |= CLSW_ADD;
+ } else if (sw == _T("randomize")) {
+ nCLSwitches |= CLSW_RANDOMIZE;
} else if (sw == _T("regvid")) {
nCLSwitches |= CLSW_REGEXTVID;
} else if (sw == _T("regaud")) {
@@ -1994,8 +2170,8 @@ void CAppSettings::ParseCommandLine(CAtlList<CString>& cmdln)
}
} else if (sw == _T("debug")) {
fShowDebugInfo = true;
- } else if (sw == _T("nominidump")) {
- CMiniDump::Disable();
+ } else if (sw == _T("nocrashreporter")) {
+ CrashReporter::Disable();
} else if (sw == _T("audiorenderer") && pos) {
SetAudioRenderer(_ttoi(cmdln.GetNext(pos)));
} else if (sw == _T("shaderpreset") && pos) {
@@ -2004,6 +2180,10 @@ void CAppSettings::ParseCommandLine(CAtlList<CString>& cmdln)
nCLSwitches |= CLSW_RESET;
} else if (sw == _T("monitoroff")) {
nCLSwitches |= CLSW_MONITOROFF;
+ } else if (sw == _T("playnext")) {
+ nCLSwitches |= CLSW_PLAYNEXT;
+ } else if (sw == _T("hwgpu") && pos) {
+ iLAVGPUDevice = _tcstol(cmdln.GetNext(pos), nullptr, 10);
} else {
nCLSwitches |= CLSW_HELP | CLSW_UNRECOGNIZEDSWITCH;
}
@@ -2091,21 +2271,17 @@ void CAppSettings::AddFav(favtype ft, CString s)
CDVBChannel* CAppSettings::FindChannelByPref(int nPrefNumber)
{
- POSITION pos = m_DVBChannels.GetHeadPosition();
- while (pos) {
- CDVBChannel& Channel = m_DVBChannels.GetNext(pos);
- if (Channel.GetPrefNumber() == nPrefNumber) {
- return &Channel;
- }
- }
+ auto it = find_if(m_DVBChannels.begin(), m_DVBChannels.end(), [&](CDVBChannel const & channel) {
+ return channel.GetPrefNumber() == nPrefNumber;
+ });
- return nullptr;
+ return it != m_DVBChannels.end() ? &(*it) : nullptr;
}
// Settings::CRecentFileAndURLList
CAppSettings::CRecentFileAndURLList::CRecentFileAndURLList(UINT nStart, LPCTSTR lpszSection,
- LPCTSTR lpszEntryFormat, int nSize,
- int nMaxDispLen)
+ LPCTSTR lpszEntryFormat, int nSize,
+ int nMaxDispLen)
: CRecentFileList(nStart, lpszSection, lpszEntryFormat, nSize, nMaxDispLen)
{
}
@@ -2207,18 +2383,18 @@ void CAppSettings::UpdateSettings()
// so that all incremental updates are applied.
switch (version) {
case 0: {
- UINT nAudioBoost = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUDIOBOOST, -1);
- if (nAudioBoost == UINT(-1)) {
+ UINT nAudioBoostTmp = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_AUDIOBOOST, -1);
+ if (nAudioBoostTmp == UINT(-1)) {
double dAudioBoost_dB = _tstof(pApp->GetProfileString(IDS_R_SETTINGS, IDS_RS_AUDIOBOOST, _T("0")));
if (dAudioBoost_dB < 0 || dAudioBoost_dB > 10) {
dAudioBoost_dB = 0;
}
- nAudioBoost = UINT(100 * pow(10.0, dAudioBoost_dB / 20.0) + 0.5) - 100;
+ nAudioBoostTmp = UINT(100 * pow(10.0, dAudioBoost_dB / 20.0) + 0.5) - 100;
}
- if (nAudioBoost > 300) { // Max boost is 300%
- nAudioBoost = 300;
+ if (nAudioBoostTmp > 300) { // Max boost is 300%
+ nAudioBoostTmp = 300;
}
- pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_AUDIOBOOST, nAudioBoost);
+ pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_AUDIOBOOST, nAudioBoostTmp);
ConvertOldExternalFiltersList();
}
@@ -2351,7 +2527,7 @@ void CAppSettings::UpdateSettings()
dm.freq = modeOld.dmFSRes.freq;
dm.dwDisplayFlags = modeOld.dmFSRes.dmDisplayFlags & DM_INTERLACED;
- autoChangeFSMode.modes.emplace_back(modeOld.fChecked, modeOld.vfr_from, modeOld.vfr_to, dm);
+ autoChangeFSMode.modes.emplace_back(modeOld.fChecked, modeOld.vfr_from, modeOld.vfr_to, 0, std::move(dm));
}
}
@@ -2376,6 +2552,44 @@ void CAppSettings::UpdateSettings()
VERIFY(pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_DISABLE_SUBTITLE_ANIMATION, bDisableSubtitleAnimation));
}
// no break
+ case 5:
+ copyInt(IDS_R_INTERNAL_FILTERS, _T("SRC_DTSAC3"), IDS_R_INTERNAL_FILTERS, _T("SRC_DTS"));
+ copyInt(IDS_R_INTERNAL_FILTERS, _T("SRC_DTSAC3"), IDS_R_INTERNAL_FILTERS, _T("SRC_AC3"));
+ // no break
+ case 6: {
+ SubtitleRenderer subrenderer = SubtitleRenderer::INTERNAL;
+ if (!pApp->GetProfileInt(IDS_R_SETTINGS, _T("AutoloadSubtitles"), TRUE)) {
+ if (IsSubtitleRendererRegistered(SubtitleRenderer::VS_FILTER)) {
+ subrenderer = SubtitleRenderer::VS_FILTER;
+ }
+ if (IsSubtitleRendererRegistered(SubtitleRenderer::XY_SUB_FILTER)) {
+ int renderer = (SysVersion::IsVistaOrLater() && IsVideoRendererAvailable(VIDRNDT_DS_EVR_CUSTOM)) ? VIDRNDT_DS_EVR_CUSTOM : VIDRNDT_DS_VMR9RENDERLESS;
+ renderer = pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_DSVIDEORENDERERTYPE, renderer);
+ if (IsSubtitleRendererSupported(SubtitleRenderer::XY_SUB_FILTER, renderer)) {
+ subrenderer = SubtitleRenderer::XY_SUB_FILTER;
+ }
+ }
+ }
+ VERIFY(pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_SUBTITLE_RENDERER, static_cast<int>(subrenderer)));
+ }
+ // no break
+ case 7:
+ // Update the settings after the removal of DirectX 7 renderers
+ switch (pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_DSVIDEORENDERERTYPE, VIDRNDT_DS_DEFAULT)) {
+ case 3: // VIDRNDT_DS_VMR7WINDOWED
+ VERIFY(pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_DSVIDEORENDERERTYPE, VIDRNDT_DS_VMR9WINDOWED));
+ break;
+ case 5: // VIDRNDT_DS_VMR7RENDERLESS
+ VERIFY(pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_DSVIDEORENDERERTYPE, VIDRNDT_DS_VMR9RENDERLESS));
+ break;
+ }
+ if (pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_RMVIDEORENDERERTYPE, VIDRNDT_RM_DEFAULT) == 1) { // VIDRNDT_RM_DX7
+ VERIFY(pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_RMVIDEORENDERERTYPE, VIDRNDT_RM_DX9));
+ }
+ if (pApp->GetProfileInt(IDS_R_SETTINGS, IDS_RS_QTVIDEORENDERERTYPE, VIDRNDT_QT_DEFAULT) == 1) { // VIDRNDT_QT_DX7
+ VERIFY(pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_QTVIDEORENDERERTYPE, VIDRNDT_QT_DX9));
+ }
+ // no break
default:
pApp->WriteProfileInt(IDS_R_SETTINGS, IDS_R_VERSION, APPSETTINGS_VERSION);
}
diff --git a/src/mpc-hc/AppSettings.h b/src/mpc-hc/AppSettings.h
index fbe6c33e1..d6ad5f1d3 100644
--- a/src/mpc-hc/AppSettings.h
+++ b/src/mpc-hc/AppSettings.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,21 +21,23 @@
#pragma once
-#include "SettingsDefines.h"
-#include "FilterEnum.h"
-#include "RenderersSettings.h"
#include "../Subtitles/STS.h"
-#include "MediaFormats.h"
+#include "../filters/switcher/AudioSwitcher/AudioSwitcher.h"
+#include "../thirdparty/sanear/sanear/src/Interfaces.h"
#include "DVBChannel.h"
+#include "FileAssoc.h"
+#include "FilterEnum.h"
+#include "MediaFormats.h"
#include "MediaPositionList.h"
-#include "../filters/switcher/AudioSwitcher/AudioSwitcher.h"
+#include "RenderersSettings.h"
+#include "SettingsDefines.h"
#include "Shaders.h"
-#include "FileAssoc.h"
-#include "FakeFilterMapper2.h"
#include <afxadv.h>
#include <afxsock.h>
+class FilterOverride;
+
// flags for CAppSettings::nCS
enum {
CS_NONE = 0,
@@ -58,15 +60,18 @@ enum : UINT64 {
CLSW_LOGOFF = CLSW_SHUTDOWN << 1,
CLSW_LOCK = CLSW_LOGOFF << 1,
CLSW_MONITOROFF = CLSW_LOCK << 1,
- CLSW_AFTERPLAYBACK_MASK = CLSW_CLOSE | CLSW_STANDBY | CLSW_SHUTDOWN | CLSW_HIBERNATE | CLSW_LOGOFF | CLSW_LOCK | CLSW_MONITOROFF,
- CLSW_FULLSCREEN = CLSW_MONITOROFF << 1,
+ CLSW_PLAYNEXT = CLSW_MONITOROFF << 1,
+ CLSW_DONOTHING = CLSW_PLAYNEXT << 1,
+ CLSW_AFTERPLAYBACK_MASK = CLSW_CLOSE | CLSW_STANDBY | CLSW_SHUTDOWN | CLSW_HIBERNATE | CLSW_LOGOFF | CLSW_LOCK | CLSW_MONITOROFF | CLSW_PLAYNEXT | CLSW_DONOTHING,
+ CLSW_FULLSCREEN = CLSW_DONOTHING << 1,
CLSW_NEW = CLSW_FULLSCREEN << 1,
CLSW_HELP = CLSW_NEW << 1,
CLSW_DVD = CLSW_HELP << 1,
CLSW_CD = CLSW_DVD << 1,
CLSW_DEVICE = CLSW_CD << 1,
CLSW_ADD = CLSW_DEVICE << 1,
- CLSW_MINIMIZED = CLSW_ADD << 1,
+ CLSW_RANDOMIZE = CLSW_ADD << 1,
+ CLSW_MINIMIZED = CLSW_RANDOMIZE << 1,
CLSW_REGEXTVID = CLSW_MINIMIZED << 1,
CLSW_REGEXTAUD = CLSW_REGEXTVID << 1,
CLSW_REGEXTPL = CLSW_REGEXTAUD << 1,
@@ -81,7 +86,7 @@ enum : UINT64 {
CLSW_SLAVE = CLSW_ADMINOPTION << 1,
CLSW_AUDIORENDERER = CLSW_SLAVE << 1,
CLSW_RESET = CLSW_AUDIORENDERER << 1,
- CLSW_UNRECOGNIZEDSWITCH = CLSW_RESET << 1, // 32
+ CLSW_UNRECOGNIZEDSWITCH = CLSW_RESET << 1 // 35
};
enum MpcCaptionState {
@@ -96,10 +101,8 @@ enum {
VIDRNDT_DS_DEFAULT,
VIDRNDT_DS_OLDRENDERER,
VIDRNDT_DS_OVERLAYMIXER,
- VIDRNDT_DS_VMR7WINDOWED,
- VIDRNDT_DS_VMR9WINDOWED,
- VIDRNDT_DS_VMR7RENDERLESS,
- VIDRNDT_DS_VMR9RENDERLESS,
+ VIDRNDT_DS_VMR9WINDOWED = 4,
+ VIDRNDT_DS_VMR9RENDERLESS = 6,
VIDRNDT_DS_DXR,
VIDRNDT_DS_NULL_COMP,
VIDRNDT_DS_NULL_UNCOMP,
@@ -136,7 +139,7 @@ enum MCE_RAW_INPUT {
#define AUDRNDT_NULL_COMP _T("Null Audio Renderer (Any)")
#define AUDRNDT_NULL_UNCOMP _T("Null Audio Renderer (Uncompressed)")
-#define AUDRNDT_MPC _T("MPC-HC Audio Renderer")
+#define AUDRNDT_INTERNAL _T("Internal Audio Renderer")
#define DEFAULT_SUBTITLE_PATHS _T(".;.\\subtitles;.\\subs")
#define DEFAULT_JUMPDISTANCE_1 1000
@@ -215,16 +218,18 @@ struct DisplayMode {
};
struct AutoChangeMode {
- AutoChangeMode(bool bChecked, double dFrameRateStart, double dFrameRateStop, DisplayMode dm)
- : bChecked(bChecked)
- , dFrameRateStart(dFrameRateStart)
- , dFrameRateStop(dFrameRateStop)
- , dm(dm) {
- };
+ AutoChangeMode(bool _bChecked, double _dFrameRateStart, double _dFrameRateStop, int _msAudioDelay, DisplayMode _dm)
+ : bChecked(_bChecked)
+ , dFrameRateStart(_dFrameRateStart)
+ , dFrameRateStop(_dFrameRateStop)
+ , msAudioDelay(_msAudioDelay)
+ , dm(std::move(_dm)) {
+ }
bool bChecked;
double dFrameRateStart;
double dFrameRateStop;
+ int msAudioDelay;
DisplayMode dm;
};
@@ -236,17 +241,13 @@ struct AutoChangeFullscreenMode {
unsigned uDelay = 0u;
};
-class wmcmd : public ACCEL
-{
- ACCEL backup;
- UINT appcmdorg;
- UINT mouseorg;
- UINT mouseFSorg;
-
-public:
+struct wmcmd_base : public ACCEL {
+ BYTE mouse;
+ BYTE mouseFS;
DWORD dwname;
UINT appcmd;
- enum {
+
+ enum : BYTE {
NONE,
LDOWN,
LUP,
@@ -267,60 +268,69 @@ public:
WDOWN,
LAST
};
- UINT mouse;
- UINT mouseFS;
+
+ wmcmd_base()
+ : ACCEL( { 0, 0, 0 })
+ , dwname(0)
+ , appcmd(0)
+ , mouse(NONE)
+ , mouseFS(NONE) {}
+
+ constexpr wmcmd_base(WORD _cmd, WORD _key, BYTE _fVirt, DWORD _dwname, UINT _appcmd = 0, BYTE _mouse = NONE, BYTE _mouseFS = NONE)
+ : ACCEL{ _fVirt, _key, _cmd }
+ , dwname(_dwname)
+ , appcmd(_appcmd)
+ , mouse(_mouse)
+ , mouseFS(_mouseFS) {}
+
+ constexpr wmcmd_base(const wmcmd_base&) = default;
+ constexpr wmcmd_base(wmcmd_base&&) = default;
+ wmcmd_base& operator=(const wmcmd_base&) = default;
+ wmcmd_base& operator=(wmcmd_base&&) = default;
+};
+
+class wmcmd : public wmcmd_base
+{
+ const wmcmd_base* default_cmd = nullptr;
+
+public:
CStringA rmcmd;
- int rmrepcnt;
-
- wmcmd(WORD cmd = 0)
- : appcmd(0)
- , appcmdorg(0)
- , dwname(0)
- , mouse(NONE)
- , mouseorg(NONE)
- , mouseFS(NONE)
- , mouseFSorg(NONE)
- , rmcmd("")
- , rmrepcnt(0) {
- this->cmd = cmd;
- this->key = 0;
- this->fVirt = 0;
- ZeroMemory(&backup, sizeof(backup));
- }
+ int rmrepcnt = 5;
+
+ wmcmd() = default;
+ wmcmd& operator=(const wmcmd&) = default;
+ wmcmd& operator=(wmcmd&&) = default;
- wmcmd(WORD cmd, WORD key, BYTE fVirt, DWORD dwname, UINT appcmd = 0, UINT mouse = NONE, UINT mouseFS = NONE, LPCSTR rmcmd = "", int rmrepcnt = 5)
- : appcmd(appcmd)
- , appcmdorg(appcmd)
- , dwname(dwname)
- , mouse(mouse)
- , mouseorg(mouse)
- , mouseFS(mouseFS)
- , mouseFSorg(mouseFS)
- , rmcmd(rmcmd)
- , rmrepcnt(rmrepcnt) {
- this->cmd = cmd;
- this->key = key;
- this->fVirt = fVirt;
- backup = *this;
+ explicit wmcmd(const wmcmd_base& cmd)
+ : wmcmd_base(cmd)
+ , default_cmd(&cmd)
+ , rmrepcnt(5) {
}
bool operator == (const wmcmd& wc) const {
- return (cmd > 0 && cmd == wc.cmd);
+ return cmd > 0 && cmd == wc.cmd;
}
CString GetName() const { return ResStr(dwname); }
void Restore() {
- *(ACCEL*)this = backup;
- appcmd = appcmdorg;
- mouse = mouseorg;
- mouseFS = mouseFSorg;
+ ASSERT(default_cmd);
+ *static_cast<ACCEL*>(this) = *static_cast<const ACCEL*>(default_cmd);
+ appcmd = default_cmd->appcmd;
+ mouse = default_cmd->mouse;
+ mouseFS = default_cmd->mouseFS;
rmcmd.Empty();
rmrepcnt = 5;
}
bool IsModified() const {
- return (memcmp((const ACCEL*)this, &backup, sizeof(ACCEL)) || appcmd != appcmdorg || mouse != mouseorg || mouseFS != mouseFSorg || !rmcmd.IsEmpty() || rmrepcnt != 5);
+ ASSERT(default_cmd);
+ return memcmp(static_cast<const ACCEL*>(this), static_cast<const ACCEL*>(default_cmd), sizeof(ACCEL)) ||
+ appcmd != default_cmd->appcmd ||
+ mouse != default_cmd->mouse ||
+ mouseFS != default_cmd->mouseFS ||
+ !rmcmd.IsEmpty() ||
+ rmrepcnt != 5;
}
};
@@ -370,11 +380,11 @@ public:
CUIceClient();
};
-#define APPSETTINGS_VERSION 5
+#define APPSETTINGS_VERSION 8
class CAppSettings
{
- bool fInitialized;
+ bool bInitialized;
class CRecentFileAndURLList : public CRecentFileList
{
@@ -467,6 +477,7 @@ public:
int nCmdlnWebServerPort;
bool fWebServerUseCompression;
bool fWebServerLocalhostOnly;
+ bool bWebUIEnablePreview;
bool fWebServerPrintDebugInfo;
CString strWebRoot, strWebDefIndex;
CString strWebServerCGI;
@@ -477,6 +488,12 @@ public:
int nBalance;
int nLoops;
bool fLoopForever;
+
+ enum class LoopMode {
+ FILE,
+ PLAYLIST
+ } eLoopMode;
+
bool fRememberZoomLevel;
int nAutoFitFactor;
int iZoomLevel;
@@ -485,13 +502,12 @@ public:
bool fEnableWorkerThreadForOpening;
bool fReportFailedPins;
bool fAutoloadAudio;
- bool fAutoloadSubtitles;
bool fBlockVSFilter;
UINT nVolumeStep;
UINT nSpeedStep;
+ int nDefaultToolbarSize;
- enum class AfterPlayback
- {
+ enum class AfterPlayback {
DO_NOTHING,
PLAY_NEXT,
REWIND,
@@ -518,8 +534,7 @@ public:
// Fullscreen
bool fLaunchfullscreen;
bool bHideFullscreenControls;
- enum class HideFullscreenControlsPolicy
- {
+ enum class HideFullscreenControlsPolicy {
SHOW_NEVER,
SHOW_WHEN_HOVERED,
SHOW_WHEN_CURSOR_MOVED,
@@ -547,8 +562,8 @@ public:
bool fBDAUseOffset;
int iBDAOffset;
bool fBDAIgnoreEncryptedChannels;
- UINT nDVBLastChannel;
- CAtlList<CDVBChannel> m_DVBChannels;
+ int nDVBLastChannel;
+ std::vector<CDVBChannel> m_DVBChannels;
DVB_RebuildFilterGraph nDVBRebuildFilterGraph;
DVB_StopFilterGraph nDVBStopFilterGraph;
@@ -586,8 +601,14 @@ public:
bool fPrioritizeExternalSubtitles;
bool fDisableInternalSubtitles;
bool bAllowOverridingExternalSplitterChoice;
+ bool bAutoDownloadSubtitles;
+ int nAutoDownloadScoreMovies;
+ int nAutoDownloadScoreSeries;
+ CString strAutoDownloadSubtitlesExclude;
+ bool bAutoUploadSubtitles;
+ bool bPreferHearingImpairedSubtitles;
+ CString strSubtitlesProviders;
CString strSubtitlePaths;
- CString strISDb;
// Tweaks
int nJumpDistS;
@@ -598,7 +619,7 @@ public:
bool fShowChapters;
bool bNotifySkype;
bool fPreventMinimize;
- bool fUseWin7TaskBar;
+ bool bUseEnhancedTaskBar;
bool fLCDSupport;
bool fUseSearchInFolder;
bool fUseTimeTooltip;
@@ -628,7 +649,6 @@ public:
// Video Frame
int iDefaultVideoSize;
bool fKeepAspectRatio;
- CSize sizeAspectRatio;
bool fCompMonDeskARDiff;
// Pan&Scan
CString strPnSPreset;
@@ -656,8 +676,9 @@ public:
// OTHER STATES
CStringW strLastOpenDir;
UINT nLastWindowType;
- UINT nLastUsedPage;
+ WORD nLastUsedPage;
bool fRemainingTime;
+ bool bHighPrecisionTimer;
bool fLastFullScreen;
bool fIntRealMedia;
@@ -672,14 +693,41 @@ public:
bool bEnableCoverArt;
int nCoverArtSizeLimit;
+ bool bEnableLogging;
+ bool bUseLegacyToolbar;
+
bool IsD3DFullscreen() const;
CString SelectedAudioRenderer() const;
bool IsISRAutoLoadEnabled() const;
- bool IsISRAvailable() const;
+ bool IsInitialized() const;
static bool IsVideoRendererAvailable(int iVideoRendererType);
CFileAssoc fileAssoc;
+ CComPtr<SaneAudioRenderer::ISettings> sanear;
+
+ DWORD iLAVGPUDevice;
+
+ enum class SubtitleRenderer {
+ INTERNAL,
+ VS_FILTER,
+ XY_SUB_FILTER,
+ ASS_FILTER,
+ };
+
+ SubtitleRenderer GetSubtitleRenderer() const;
+ void SetSubtitleRenderer(SubtitleRenderer renderer) { eSubtitleRenderer = renderer; }
+
+ static bool IsSubtitleRendererRegistered(SubtitleRenderer eSubtitleRenderer);
+
+ static bool IsSubtitleRendererSupported(SubtitleRenderer eSubtitleRenderer, int videoRenderer);
+
+ CSize GetAspectRatioOverride() const {
+ ASSERT(fKeepAspectRatio && "Keep Aspect Ratio option have to be enabled if override value is used.");
+ return sizeAspectRatio;
+ };
+ void SetAspectRatioOverride(const CSize& ar) { sizeAspectRatio = ar; }
+
private:
struct FilterKey {
CString name;
@@ -713,6 +761,9 @@ private:
void UpdateRenderersData(bool fSave);
friend void CRenderersSettings::UpdateData(bool bSave);
+ SubtitleRenderer eSubtitleRenderer;
+ CSize sizeAspectRatio;
+
public:
CAppSettings();
CAppSettings(const CAppSettings&) = delete;
@@ -722,9 +773,11 @@ public:
void SaveSettings();
void LoadSettings();
- void SaveExternalFilters() { if (fInitialized) { SaveExternalFilters(m_filters); } };
+ void SaveExternalFilters() { if (bInitialized) { SaveExternalFilters(m_filters); } };
void UpdateSettings();
+ void SetAsUninitialized() { bInitialized = false; };
+
void GetFav(favtype ft, CAtlList<CString>& sl) const;
void SetFav(favtype ft, CAtlList<CString>& sl);
void AddFav(favtype ft, CString s);
diff --git a/src/mpc-hc/AuthDlg.cpp b/src/mpc-hc/AuthDlg.cpp
index 421568cf7..6c0b2af2d 100644
--- a/src/mpc-hc/AuthDlg.cpp
+++ b/src/mpc-hc/AuthDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,7 +22,7 @@
#include "stdafx.h"
#include "AuthDlg.h"
#include "SysVersion.h"
-#include "version.h"
+#include "VersionInfo.h"
// We need to dynamically link to the functions provided by CredUI.lib in order
// to be able to use the features available to the OS.
@@ -42,14 +42,14 @@ HRESULT PromptForCredentials(HWND hWnd, const CString& strCaptionText, const CSt
if (SysVersion::IsVistaOrLater()) {
// Define CredUI.dll functions for Windows Vista+
- const WinapiFunc<BOOL(DWORD, LPWSTR, LPWSTR, PBYTE, DWORD*)>
- fnCredPackAuthenticationBufferW = { "CREDUI.DLL", "CredPackAuthenticationBufferW" };
+ const WinapiFunc<decltype(CredPackAuthenticationBufferW)>
+ fnCredPackAuthenticationBufferW = { _T("CREDUI.DLL"), "CredPackAuthenticationBufferW" };
- const WinapiFunc<DWORD(PCREDUI_INFOW, DWORD, ULONG*, LPCVOID, ULONG, LPVOID*, ULONG*, BOOL*, DWORD)>
- fnCredUIPromptForWindowsCredentialsW = { "CREDUI.DLL", "CredUIPromptForWindowsCredentialsW" };
+ const WinapiFunc<decltype(CredUIPromptForWindowsCredentialsW)>
+ fnCredUIPromptForWindowsCredentialsW = { _T("CREDUI.DLL"), "CredUIPromptForWindowsCredentialsW" };
- const WinapiFunc<BOOL(DWORD, PVOID, DWORD, LPWSTR, DWORD*, LPWSTR, DWORD*, LPWSTR, DWORD*)>
- fnCredUnPackAuthenticationBufferW = { "CREDUI.DLL", "CredUnPackAuthenticationBufferW" };
+ const WinapiFunc<decltype(CredUnPackAuthenticationBufferW)>
+ fnCredUnPackAuthenticationBufferW = { _T("CREDUI.DLL"), "CredUnPackAuthenticationBufferW" };
if (fnCredPackAuthenticationBufferW && fnCredUIPromptForWindowsCredentialsW && fnCredUnPackAuthenticationBufferW) {
PVOID pvInAuthBlob = nullptr;
@@ -92,22 +92,22 @@ HRESULT PromptForCredentials(HWND hWnd, const CString& strCaptionText, const CSt
}
} else if (SysVersion::IsXPOrLater()) {
// Define CredUI.dll functions for Windows XP
- const WinapiFunc<DWORD(PCREDUI_INFOW, PCWSTR, PCtxtHandle, DWORD, PCWSTR, ULONG, PCWSTR, ULONG, PBOOL, DWORD)>
- fnCredUIPromptForCredentialsW = { "CREDUI.DLL", "CredUIPromptForCredentialsW" };
+ const WinapiFunc<decltype(CredUIPromptForCredentialsW)>
+ fnCredUIPromptForCredentialsW = { _T("CREDUI.DLL"), "CredUIPromptForCredentialsW" };
- const WinapiFunc<DWORD(PCWSTR, PWSTR, ULONG, PWSTR, ULONG)>
- fnCredUIParseUserNameW = { "CREDUI.DLL", "CredUIParseUserNameW" };
+ const WinapiFunc<decltype(CredUIParseUserNameW)>
+ fnCredUIParseUserNameW = { _T("CREDUI.DLL"), "CredUIParseUserNameW" };
if (fnCredUIPromptForCredentialsW && fnCredUIParseUserNameW) {
const DWORD dwAuthError = 0;
const DWORD dwFlags = CREDUI_FLAGS_ALWAYS_SHOW_UI | CREDUI_FLAGS_GENERIC_CREDENTIALS/* | CREDUI_FLAGS_EXPECT_CONFIRMATION*/ | CREDUI_FLAGS_COMPLETE_USERNAME | CREDUI_FLAGS_DO_NOT_PERSIST | (bSave ? CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX : 0);
CString strUserDomain(strUsername);
if (!strDomain.GetLength()) {
- strDomain = _T("mpc-hc/") MPC_VERSION_STR;
+ strDomain = _T("mpc-hc/") + VersionInfo::GetVersionString();
}
DWORD dwResult = fnCredUIPromptForCredentialsW(&info, strDomain.Left(dwDomain), nullptr, dwAuthError,
- strUserDomain.GetBufferSetLength(dwUsername), dwUsername, strPassword.GetBufferSetLength(dwPassword), dwPassword, bSave, dwFlags);
+ strUserDomain.GetBufferSetLength(dwUsername), dwUsername, strPassword.GetBufferSetLength(dwPassword), dwPassword, bSave, dwFlags);
strUserDomain.ReleaseBuffer();
strPassword.ReleaseBuffer();
@@ -116,7 +116,7 @@ HRESULT PromptForCredentials(HWND hWnd, const CString& strCaptionText, const CSt
strDomain.ReleaseBuffer();
//dwResult = CredUIConfirmCredentials(szDomain.Left(cchDomain), TRUE);
- if (strDomain == _T("mpc-hc/") MPC_VERSION_STR) {
+ if (strDomain == _T("mpc-hc/") + VersionInfo::GetVersionString()) {
strDomain.Empty();
}
diff --git a/src/mpc-hc/ChildView.cpp b/src/mpc-hc/ChildView.cpp
index 5aed6e423..1e4d28580 100644
--- a/src/mpc-hc/ChildView.cpp
+++ b/src/mpc-hc/ChildView.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -116,15 +116,34 @@ void CChildView::SetVideoRect(const CRect& r)
void CChildView::LoadImg(const CString& imagePath)
{
+ CMPCPngImage img;
+
+ if (!imagePath.IsEmpty()) {
+ img.LoadFromFile(imagePath);
+ }
+
+ LoadImgInternal(img.Detach());
+}
+
+void CChildView::LoadImg(std::vector<BYTE> buffer)
+{
+ CMPCPngImage img;
+
+ if (!buffer.empty()) {
+ img.LoadFromBuffer(buffer.data(), (UINT)buffer.size());
+ }
+
+ LoadImgInternal(img.Detach());
+}
+
+void CChildView::LoadImgInternal(HGDIOBJ hImg)
+{
CAppSettings& s = AfxGetAppSettings();
bool bHaveLogo = false;
- m_bCustomImgLoaded = false;
m_img.DeleteObject();
-
- if (!imagePath.IsEmpty()) {
- m_bCustomImgLoaded = !!m_img.LoadFromFile(imagePath);
- }
+ m_resizedImg.Destroy();
+ m_bCustomImgLoaded = !!m_img.Attach(hImg);
if (!m_bCustomImgLoaded && s.fLogoExternal) {
bHaveLogo = !!m_img.LoadFromFile(s.strLogoFileName);
@@ -146,10 +165,7 @@ void CChildView::LoadImg(const CString& imagePath)
CSize CChildView::GetLogoSize()
{
- BITMAP bitmap;
- ZeroMemory(&bitmap, sizeof(BITMAP));
- m_img.GetBitmap(&bitmap);
- return CSize(bitmap.bmWidth, bitmap.bmHeight);
+ return m_img.GetSize();
}
IMPLEMENT_DYNAMIC(CChildView, CMouseWnd)
@@ -205,10 +221,20 @@ BOOL CChildView::OnEraseBkgnd(CDC* pDC)
r = CRect(CPoint(x, y), CSize(std::lround(dImgWidth), std::lround(dImgHeight)));
- int oldmode = pDC->SetStretchBltMode(STRETCH_HALFTONE);
- img.StretchBlt(*pDC, r, CRect(0, 0, img.GetWidth(), img.GetHeight()));
- pDC->SetStretchBltMode(oldmode);
- pDC->ExcludeClipRect(r);
+ if (!r.IsRectEmpty()) {
+ if (m_resizedImg.IsNull() || r.Width() != m_resizedImg.GetWidth() || r.Height() != m_resizedImg.GetHeight() || img.GetBPP() != m_resizedImg.GetBPP()) {
+ m_resizedImg.Destroy();
+ m_resizedImg.Create(r.Width(), r.Height(), std::max(img.GetBPP(), 24));
+
+ HDC hDC = m_resizedImg.GetDC();
+ SetStretchBltMode(hDC, STRETCH_HALFTONE);
+ img.StretchBlt(hDC, 0, 0, r.Width(), r.Height(), SRCCOPY);
+ m_resizedImg.ReleaseDC();
+ }
+
+ m_resizedImg.BitBlt(*pDC, r.TopLeft());
+ pDC->ExcludeClipRect(r);
+ }
}
img.Detach();
diff --git a/src/mpc-hc/ChildView.h b/src/mpc-hc/ChildView.h
index b71fd3acd..1be07c44c 100644
--- a/src/mpc-hc/ChildView.h
+++ b/src/mpc-hc/ChildView.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -29,6 +29,7 @@ class CChildView : public CMouseWnd
CRect m_vrect;
CMPCPngImage m_img;
+ CImage m_resizedImg;
CMainFrame* m_pMainFrame;
@@ -40,6 +41,8 @@ class CChildView : public CMouseWnd
void EventCallback(MpcEvent ev);
+ void LoadImgInternal(HGDIOBJ hImg);
+
public:
CChildView(CMainFrame* pMainFrm);
virtual ~CChildView();
@@ -50,7 +53,9 @@ public:
CRect GetVideoRect() const { return m_vrect; }
void LoadImg(const CString& imagePath = _T(""));
+ void LoadImg(std::vector<BYTE> buffer);
CSize GetLogoSize();
+ bool IsCustomImgLoaded() const { return m_bCustomImgLoaded; };
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
diff --git a/src/mpc-hc/CmdLineHelpDlg.cpp b/src/mpc-hc/CmdLineHelpDlg.cpp
index 5cac04c8e..12f605626 100644
--- a/src/mpc-hc/CmdLineHelpDlg.cpp
+++ b/src/mpc-hc/CmdLineHelpDlg.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2014 see Authors.txt
+ * (C) 2014, 2016-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,7 @@
#include "stdafx.h"
#include "CmdLineHelpDlg.h"
+#include "SettingsDefines.h"
CmdLineHelpDlg::CmdLineHelpDlg(const CString& cmdLine /*= _T("")*/)
: CResizableDialog(CmdLineHelpDlg::IDD)
@@ -50,10 +51,27 @@ BOOL CmdLineHelpDlg::OnInitDialog()
m_icon.SetIcon(LoadIcon(nullptr, IDI_INFORMATION));
if (!m_cmdLine.IsEmpty()) {
- m_text = ResStr(IDS_UNKNOWN_SWITCH);
+ m_text.LoadString(IDS_UNKNOWN_SWITCH);
m_text.AppendFormat(_T("%s\n\n"), m_cmdLine);
}
- m_text.Append(ResStr(IDS_USAGE));
+ m_text.AppendFormat(_T("%s\n"), ResStr(IDS_USAGE));
+
+ constexpr int cmdArgs[] = {
+ IDS_CMD_PATHNAME, IDS_CMD_DUB, IDS_CMD_DUBDELAY, IDS_CMD_D3DFS, IDS_CMD_SUB,
+ IDS_CMD_FILTER, IDS_CMD_DVD, IDS_CMD_DVDPOS_TC, IDS_CMD_DVDPOS_TIME, IDS_CMD_CD,
+ IDS_CMD_DEVICE, IDS_CMD_OPEN, IDS_CMD_PLAY, IDS_CMD_CLOSE, IDS_CMD_SHUTDOWN,
+ IDS_CMD_STANDBY, IDS_CMD_HIBERNATE, IDS_CMD_LOGOFF, IDS_CMD_LOCK, IDS_CMD_MONITOROFF,
+ IDS_CMD_PLAYNEXT, IDS_CMD_FULLSCREEN, IDS_CMD_MINIMIZED, IDS_CMD_NEW, IDS_CMD_ADD,
+ IDS_CMD_RANDOMIZE, IDS_CMD_REGVID, IDS_CMD_REGAUD, IDS_CMD_REGPL, IDS_CMD_REGALL,
+ IDS_CMD_UNREGALL, IDS_CMD_START, IDS_CMD_STARTPOS, IDS_CMD_FIXEDSIZE, IDS_CMD_MONITOR,
+ IDS_CMD_AUDIORENDERER, IDS_CMD_SHADERPRESET, IDS_CMD_PNS, IDS_CMD_ICONASSOC,
+ IDS_CMD_NOFOCUS, IDS_CMD_WEBPORT, IDS_CMD_DEBUG, IDS_CMD_NOCRASHREPORTER,
+ IDS_CMD_SLAVE, IDS_CMD_HWGPU, IDS_CMD_RESET, IDS_CMD_HELP
+ };
+
+ for (const auto& cmdArg : cmdArgs) {
+ m_text.AppendFormat(_T("\n%s"), ResStr(cmdArg).GetString());
+ }
m_text.Replace(_T("\n"), _T("\r\n"));
UpdateData(FALSE);
diff --git a/src/mpc-hc/CoverArt.cpp b/src/mpc-hc/CoverArt.cpp
new file mode 100644
index 000000000..c167ab2df
--- /dev/null
+++ b/src/mpc-hc/CoverArt.cpp
@@ -0,0 +1,86 @@
+/*
+* (C) 2014 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "stdafx.h"
+#include "DSUtil.h"
+#include "CoverArt.h"
+#include "DSMPropertyBag.h"
+
+CString CoverArt::FindExternal(const CString& path, const CString& author)
+{
+ if (!path.IsEmpty()) {
+ CAtlList<CString> files;
+ FindFiles(path + _T("\\*front*.png"), files);
+ FindFiles(path + _T("\\*front*.jp*g"), files);
+ FindFiles(path + _T("\\*front*.bmp"), files);
+ FindFiles(path + _T("\\*cover*.png"), files);
+ FindFiles(path + _T("\\*cover*.jp*g"), files);
+ FindFiles(path + _T("\\*cover*.bmp"), files);
+ FindFiles(path + _T("\\*folder*.png"), files);
+ FindFiles(path + _T("\\*folder*.jp*g"), files);
+ FindFiles(path + _T("\\*folder*.bmp"), files);
+ if (!author.IsEmpty()) {
+ FindFiles(path + _T("\\*") + author + _T("*.png"), files);
+ FindFiles(path + _T("\\*") + author + _T("*.jp*g"), files);
+ FindFiles(path + _T("\\*") + author + _T("*.bmp"), files);
+ }
+
+ if (!files.IsEmpty()) {
+ return files.GetHead();
+ }
+ }
+ return _T("");
+}
+
+bool CoverArt::FindEmbedded(CComPtr<IFilterGraph> pFilterGraph, std::vector<BYTE>& internalCover)
+{
+ internalCover.clear();
+
+ bool bGoodMatch = false;
+ BeginEnumFilters(pFilterGraph, pEF, pBF) {
+ if (CComQIPtr<IDSMResourceBag> pRB = pBF) {
+ for (DWORD j = 0; j < pRB->ResGetCount(); j++) {
+ CComBSTR name, desc, mime;
+ BYTE* pData = nullptr;
+ DWORD len = 0;
+
+ if (SUCCEEDED(pRB->ResGet(j, &name, &desc, &mime, &pData, &len, nullptr)) && len > 0) {
+ if (name == _T("EmbeddedCover.jpg")) { // Embedded cover as exported by our custom internal LAV Splitter
+ internalCover.assign(pData, pData + len);
+ break; // Always preferred
+ } else if (!bGoodMatch && CString(mime).MakeLower().Find(_T("image")) != -1) {
+ // Check if we have a good match
+ CString nameLower = CString(name).MakeLower();
+ bGoodMatch = nameLower.Find(_T("cover")) || nameLower.Find(_T("front"));
+ // Override the previous match only if we think this one is better
+ if (bGoodMatch || internalCover.empty()) {
+ internalCover.assign(pData, pData + len);
+ }
+ // Keep looking for a better match
+ }
+ CoTaskMemFree(pData);
+ }
+ }
+ }
+ }
+ EndEnumFilters;
+
+ return !internalCover.empty();
+}
diff --git a/src/mpc-hc/CoverArt.h b/src/mpc-hc/CoverArt.h
new file mode 100644
index 000000000..3e4190437
--- /dev/null
+++ b/src/mpc-hc/CoverArt.h
@@ -0,0 +1,30 @@
+/*
+* (C) 2014, 2016 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#pragma once
+
+#include <vector>
+
+namespace CoverArt
+{
+ CString FindExternal(const CString& path, const CString& author);
+
+ bool FindEmbedded(CComPtr<IFilterGraph> pFilterGraph, std::vector<BYTE>& internalCover);
+}
diff --git a/src/mpc-hc/CrashReporter.cpp b/src/mpc-hc/CrashReporter.cpp
new file mode 100644
index 000000000..57b773357
--- /dev/null
+++ b/src/mpc-hc/CrashReporter.cpp
@@ -0,0 +1,130 @@
+/*
+ * (C) 2015-2016 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "CrashReporter.h"
+#ifndef _DEBUG
+#include "VersionInfo.h"
+#include "mpc-hc_config.h"
+#include "DoctorDump/CrashRpt.h"
+#include "mplayerc.h"
+
+
+using namespace crash_rpt;
+
+namespace CrashReporter
+{
+ static bool g_bEnabled = false;
+ static CrashRpt g_crashReporter(L"CrashReporter\\crashrpt.dll");
+
+ static CrashProcessingCallbackResult CALLBACK CrashProcessingCallback(CrashProcessingCallbackStage stage,
+ ExceptionInfo* pExceptionInfo,
+ LPVOID pUserData);
+}
+#endif
+
+void CrashReporter::Enable(LPCTSTR langDll /*= nullptr*/)
+{
+#ifndef _DEBUG
+ crash_rpt::ApplicationInfo appInfo = {
+ sizeof(appInfo),
+ "31c48823-ce52-401b-8425-888388161757",
+ "mpc-hc",
+ L"MPC-HC",
+ L"MPC-HC Team",
+ {
+ USHORT(VersionInfo::GetMajorNumber()),
+ USHORT(VersionInfo::GetMinorNumber()),
+ USHORT(VersionInfo::GetPatchNumber()),
+ USHORT(VersionInfo::GetRevisionNumber()),
+ },
+ 0,
+ nullptr
+ };
+
+ const MINIDUMP_TYPE dumpType = MINIDUMP_TYPE(
+#if ENABLE_FULLDUMP
+ MiniDumpWithFullMemory |
+ MiniDumpWithTokenInformation |
+#else
+ MiniDumpWithIndirectlyReferencedMemory |
+ MiniDumpWithDataSegs |
+#endif // ENABLE_FULLDUMP
+ MiniDumpWithHandleData |
+ MiniDumpWithThreadInfo |
+ MiniDumpWithProcessThreadData |
+ MiniDumpWithFullMemoryInfo |
+ MiniDumpWithUnloadedModules |
+ MiniDumpIgnoreInaccessibleMemory
+ );
+
+ crash_rpt::custom_data_collection::Settings dataCollectionSettings = {
+ sizeof(dataCollectionSettings),
+ _T("CrashReporter\\CrashReporterDialog.dll"), // Path of the DLL
+ "CreateCrashDialog", // Function name
+ (LPBYTE)langDll, // No user-defined data
+ langDll ? DWORD(_tcslen(langDll) + 1)* sizeof(TCHAR) : 0 // Size of user-defined data
+ };
+
+ crash_rpt::HandlerSettings handlerSettings = {
+ sizeof(handlerSettings),
+ FALSE, // Don't keep the dumps
+ FALSE, // Don't open the problem page in the browser
+ FALSE, // Don't use WER (for now)
+ 0, // Anonymous submitter
+ FALSE, // Ask before sending additional info
+ TRUE, // Override the "full" dump settings
+ dumpType, // "Full" dump custom settings
+ nullptr, // No lang file (for now)
+ nullptr, // Default path for SendRpt
+ nullptr, // Default path for DbgHelp
+ CrashProcessingCallback, // Callback function
+ nullptr, // No user defined parameter for the callback function
+ &dataCollectionSettings // Use our custom dialog
+ };
+
+ g_bEnabled = g_crashReporter.InitCrashRpt(&appInfo, &handlerSettings);
+#endif
+}
+
+void CrashReporter::Disable()
+{
+#ifndef _DEBUG
+ g_bEnabled = false;
+#endif
+}
+
+bool CrashReporter::IsEnabled()
+{
+#ifndef _DEBUG
+ return g_bEnabled;
+#else
+ return false;
+#endif
+}
+
+#ifndef _DEBUG
+CrashProcessingCallbackResult CALLBACK CrashReporter::CrashProcessingCallback(CrashProcessingCallbackStage stage,
+ ExceptionInfo* pExceptionInfo,
+ LPVOID pUserData)
+{
+ return g_bEnabled ? DoDefaultActions : SkipSendReportReturnDefaultResult;
+}
+#endif
diff --git a/src/MathLibFix/MathLibFix.h b/src/mpc-hc/CrashReporter.h
index 76d3c07cb..796a07fb5 100644
--- a/src/MathLibFix/MathLibFix.h
+++ b/src/mpc-hc/CrashReporter.h
@@ -1,5 +1,5 @@
/*
- * (C) 2014 see Authors.txt
+ * (C) 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,5 +20,9 @@
#pragma once
-
-void WorkAroundMathLibraryBug();
+namespace CrashReporter
+{
+ void Enable(LPCTSTR langDll = nullptr);
+ void Disable();
+ bool IsEnabled();
+};
diff --git a/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.cpp b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.cpp
new file mode 100644
index 000000000..8f38f28f8
--- /dev/null
+++ b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.cpp
@@ -0,0 +1,186 @@
+/*
+* (C) 2015 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "CrashReporterDialog.h"
+
+#include "DoctorDump/CrashRpt.h"
+#include "../resource.h"
+#include <Psapi.h>
+#include <sstream>
+
+
+using namespace crash_rpt::custom_data_collection;
+
+Result CALLBACK CreateCrashDialog(const ExceptionInfo& exceptionInfo, IDataBag* dataBag)
+{
+ Result res = Result::CancelUpload;
+
+ TCHAR exePath[MAX_PATH];
+ if (!GetModuleFileNameEx(exceptionInfo.Process, nullptr, exePath, _countof(exePath))) {
+#ifdef _WIN64
+ _tcscpy_s(exePath, _T("..\\mpc-hc64.exe"));
+#else
+ _tcscpy_s(exePath, _T("..\\mpc-hc.exe"));
+#endif
+ }
+
+ CCrashReporterDialog dlg(exePath, (LPCTSTR)exceptionInfo.UserData);
+
+ if (dlg.DoModal() != IDCANCEL && dlg.GetSendCrashReport()) {
+ res = Result::DoUpload;
+ if (LPCTSTR email = dlg.GetEmail()) {
+ dataBag->AddUserInfoToReport(L"email", email);
+ }
+ if (LPCTSTR description = dlg.GetDescription()) {
+ dataBag->AddUserInfoToReport(L"description", description);
+ }
+ }
+
+ return res;
+}
+
+CCrashReporterDialog::CCrashReporterDialog(LPCTSTR exePath, LPCTSTR langDll /*= nullptr*/)
+ : m_exePath(exePath)
+{
+ m_hModuleExe = LoadLibrary(exePath);
+
+ if (langDll) {
+ std::wostringstream langDllPath;
+ langDllPath << _T("..\\") << langDll;
+ m_hModuleRes = LoadLibrary(langDllPath.str().c_str());
+ }
+}
+
+CCrashReporterDialog::~CCrashReporterDialog()
+{
+ FreeLibrary(m_hModuleExe);
+ FreeLibrary(m_hModuleRes);
+}
+
+INT_PTR CCrashReporterDialog::DoModal()
+{
+ return DialogBoxParam(m_hModuleRes ? m_hModuleRes : m_hModuleExe, MAKEINTRESOURCE(IDD_CRASH_REPORTER),
+ GetDesktopWindow(), DialogProc, (LPARAM)this);
+}
+
+INT_PTR CALLBACK CCrashReporterDialog::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ INT_PTR res = FALSE;
+
+ switch (uMsg) {
+ case WM_INITDIALOG: {
+ // Attach the window handle to the object
+ CCrashReporterDialog* dlg = (CCrashReporterDialog*)lParam;
+ dlg->m_hWnd = hwndDlg;
+ SetWindowLongPtr(hwndDlg, DWLP_USER, lParam);
+ dlg->OnInitDialog();
+ res = TRUE;
+ }
+ break;
+ case WM_COMMAND: {
+ CCrashReporterDialog* dlg = (CCrashReporterDialog*)GetWindowLongPtr(hwndDlg, DWLP_USER);
+
+ switch (LOWORD(wParam)) {
+ case IDC_CHECK1:
+ if (HIWORD(wParam) == BN_CLICKED) {
+ dlg->OnCheckBoxClicked();
+ }
+ break;
+ case IDC_BUTTON1: // Restart
+ ShellExecute(nullptr, _T("open"), dlg->m_exePath.c_str(), nullptr, nullptr, SW_SHOWNORMAL);
+ // No break
+ case IDC_BUTTON2: // Quit
+ dlg->OnOK();
+ // No break
+ case IDCANCEL: // Escape
+ EndDialog(hwndDlg, wParam);
+ res = TRUE;
+ break;
+ }
+ }
+ break;
+ }
+
+ return res;
+}
+
+void CCrashReporterDialog::OnInitDialog()
+{
+ // Set the icon
+ HICON hIcon = (HICON)LoadImage(m_hModuleExe, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON,
+ GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
+ if (hIcon) { // Since LR_SHARED is used, there is no need to explicitly destroy the icon
+ SendMessage(m_hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
+ }
+
+ // Center the dialog window
+ RECT rcDlg;
+ GetWindowRect(m_hWnd, &rcDlg);
+ MONITORINFO monitorInfo;
+ monitorInfo.cbSize = sizeof(monitorInfo);
+ GetMonitorInfo(MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST), &monitorInfo);
+ SIZE offset;
+ offset.cx = ((monitorInfo.rcWork.right - monitorInfo.rcWork.left) - (rcDlg.right - rcDlg.left)) / 2;
+ offset.cy = ((monitorInfo.rcWork.bottom - monitorInfo.rcWork.top) - (rcDlg.bottom - rcDlg.top)) / 2;
+ SetWindowPos(m_hWnd, nullptr,
+ monitorInfo.rcWork.left + offset.cx, monitorInfo.rcWork.top + offset.cy,
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER);
+
+ // Check "send a bug report" by default
+ SendDlgItemMessage(m_hWnd, IDC_CHECK1, BM_SETCHECK, BST_CHECKED, 0);
+}
+
+void CCrashReporterDialog::OnOK()
+{
+ auto getText = [this](int nID, std::vector<TCHAR>& str) {
+ HWND hwndField = GetDlgItem(m_hWnd, nID);
+ if (hwndField) {
+ int nLenght = GetWindowTextLength(hwndField);
+ if (nLenght > 0) {
+ nLenght++; // Account for the null char
+ str.resize(nLenght);
+ if (!GetWindowText(hwndField, str.data(), nLenght)) {
+ str[0] = _T('\0');
+ }
+ }
+ }
+ return str;
+ };
+
+ m_bSendCrashReport = (SendDlgItemMessage(m_hWnd, IDC_CHECK1, BM_GETCHECK, 0, 0) == BST_CHECKED);
+ getText(IDC_EDIT1, m_email);
+ getText(IDC_EDIT2, m_description);
+}
+
+void CCrashReporterDialog::OnCheckBoxClicked()
+{
+ auto enableDlgItem = [this](int nID, bool bEnable) {
+ EnableWindow(GetDlgItem(m_hWnd, nID), bEnable);
+ };
+
+ bool bEnable = (SendDlgItemMessage(m_hWnd, IDC_CHECK1, BM_GETCHECK, 0, 0) == BST_CHECKED);
+ enableDlgItem(IDC_STATIC1, bEnable);
+ enableDlgItem(IDC_STATIC2, bEnable);
+ enableDlgItem(IDC_EDIT1, bEnable);
+ enableDlgItem(IDC_STATIC3, bEnable);
+ enableDlgItem(IDC_STATIC4, bEnable);
+ enableDlgItem(IDC_EDIT2, bEnable);
+}
diff --git a/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.def b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.def
new file mode 100644
index 000000000..dfba52c86
--- /dev/null
+++ b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.def
@@ -0,0 +1,3 @@
+LIBRARY "CrashReporterDialog"
+EXPORTS
+ CreateCrashDialog
diff --git a/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.h b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.h
new file mode 100644
index 000000000..0c7c7f103
--- /dev/null
+++ b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.h
@@ -0,0 +1,53 @@
+/*
+* (C) 2015 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include <Windows.h>
+#include <tchar.h>
+#include <string>
+#include <vector>
+
+
+class CCrashReporterDialog
+{
+private:
+ HWND m_hWnd = nullptr;
+ std::wstring m_exePath;
+ HMODULE m_hModuleExe = nullptr;
+ HMODULE m_hModuleRes = nullptr;
+ bool m_bSendCrashReport = true;
+ std::vector<TCHAR> m_email;
+ std::vector<TCHAR> m_description;
+
+ static INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+ void OnInitDialog();
+ void OnOK();
+ void OnCheckBoxClicked();
+
+public:
+ CCrashReporterDialog(LPCTSTR exePath, LPCTSTR langDll = nullptr);
+ ~CCrashReporterDialog();
+
+ INT_PTR DoModal();
+
+ bool GetSendCrashReport() const { return m_bSendCrashReport; };
+ LPCTSTR GetEmail() const { return m_email.data(); };
+ LPCTSTR GetDescription() const { return m_description.data(); };
+};
diff --git a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.rc b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.rc
index 78030895a..0d54f566b 100644
--- a/src/filters/renderer/MpcAudioRenderer/MpcAudioRenderer.rc
+++ b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.rc
@@ -1,110 +1,103 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-#include "version.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (United States) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION MPC_VERSION_NUM
- PRODUCTVERSION MPC_VERSION_NUM
- FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
-#ifdef _DEBUG
- FILEFLAGS VS_FF_DEBUG
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS_NT_WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE VFT2_UNKNOWN
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "Comments", MPC_VERSION_COMMENTS
- VALUE "CompanyName", MPC_COMP_NAME_STR
- VALUE "FileDescription", "Audio Renderer, based on SoundTouch"
- VALUE "FileVersion", MPC_VERSION_STR_FULL
- VALUE "InternalName", "MpcAudioRenderer Filter"
- VALUE "LegalCopyright", MPC_COPYRIGHT_STR
- VALUE "OriginalFilename", "MpcAudioRenderer.ax"
- VALUE "ProductName", "MpcAudioRenderer Filter"
- VALUE "ProductVersion", MPC_VERSION_STR_FULL
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-STRINGTABLE
-BEGIN
- IDS_FILTER_SETTINGS_CAPTION "Settings"
- IDS_ARS_WASAPI_MODE "Use WASAPI (restart playback)"
- IDS_ARS_MUTE_FAST_FORWARD "Mute on fast forward"
- IDS_ARS_SOUND_DEVICE "Sound Device:"
-END
-
-#endif // English (United States) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
+// Microsoft Visual C++ generated resource script.
+//
+#include "CrashReporterDialog.h"
+#include "version.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (United States) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "CrashReporterDialog.h\0"
+ "version.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION MPC_VERSION_NUM
+ PRODUCTVERSION MPC_VERSION_NUM
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+#ifdef _DEBUG
+ FILEFLAGS VS_FF_DEBUG
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS VOS_NT_WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE VFT2_UNKNOWN
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "Comments", "MPC-HC Crash Reporter Dialog helper DLL"
+ VALUE "CompanyName", MPC_COMP_NAME_STR
+ VALUE "FileDescription", "MPC-HC Crash Reporter Dialog helper DLL"
+ VALUE "FileVersion", MPC_VERSION_STR
+ VALUE "InternalName", "CrashReporterDialog"
+ VALUE "LegalCopyright", MPC_COPYRIGHT_STR
+ VALUE "OriginalFilename", "CrashReporterDialog.dll"
+ VALUE "ProductName", "MPC-HC Crash Reporter Dialog helper DLL"
+ VALUE "ProductVersion", MPC_VERSION_STR
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+#endif // English (United States) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.vcxproj b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.vcxproj
new file mode 100644
index 000000000..7823eaba8
--- /dev/null
+++ b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.vcxproj
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release Lite|Win32">
+ <Configuration>Release Lite</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Lite|x64">
+ <Configuration>Release Lite</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{5DB958DD-8B25-45EF-8072-3356CAF8CCD7}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>CrashReporterDialog</RootNamespace>
+ <ProjectName>CrashReporterDialog</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\mpc-hc_x86\CrashReporter\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Lite|Win32'">$(SolutionDir)bin\mpc-hc_x86 Lite\CrashReporter\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\mpc-hc_x64\CrashReporter\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Lite|x64'">$(SolutionDir)bin\mpc-hc_x64 Lite\CrashReporter\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <AdditionalIncludeDirectories>..\..\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <NoEntryPoint>false</NoEntryPoint>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <ModuleDefinitionFile>CrashReporterDialog.def</ModuleDefinitionFile>
+ <AdditionalDependencies>Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="CrashReporterDialog.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="CrashReporterDialog.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="CrashReporterDialog.def" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="CrashReporterDialog.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\build\BuildConfig.vcxproj">
+ <Project>{981574ae-5a5e-4f27-bdf1-1b841e374cff}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.vcxproj.filters b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.vcxproj.filters
new file mode 100644
index 000000000..b0e7b309e
--- /dev/null
+++ b/src/mpc-hc/CrashReporterDialog/CrashReporterDialog.vcxproj.filters
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{ee8489ea-968c-44c9-ae3a-35eb518513d2}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="CrashReporterDialog.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="CrashReporterDialog.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="CrashReporterDialog.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="CrashReporterDialog.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/mpc-hc/DVBChannel.cpp b/src/mpc-hc/DVBChannel.cpp
index 1d79addae..393d35c77 100644
--- a/src/mpc-hc/DVBChannel.cpp
+++ b/src/mpc-hc/DVBChannel.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,112 +21,97 @@
#include "stdafx.h"
#include "DVBChannel.h"
+#include "ISOLang.h"
+#include "mplayerc.h"
-CDVBChannel::CDVBChannel()
- : m_ulFrequency(0)
- , m_nPrefNumber(0)
- , m_nOriginNumber(0)
- , m_bEncrypted(false)
- , m_bNowNextFlag(false)
- , m_ulONID(0)
- , m_ulTSID(0)
- , m_ulSID(0)
- , m_ulPMT(0)
- , m_ulPCR(0)
- , m_ulVideoPID(0)
- , m_nVideoType(DVB_MPV)
- , m_nVideoFps(DVB_FPS_25_0)
- , m_nVideoChroma(DVB_Chroma_4_2_0)
- , m_nVideoWidth(0)
- , m_nVideoHeight(0)
- , m_nVideoAR(DVB_AR_NULL)
- , m_nAudioCount(0)
- , m_nDefaultAudio(0)
- , m_nSubtitleCount(0)
- , m_nDefaultSubtitle(-1)
+LCID DVBStreamInfo::GetLCID() const
{
-}
+ return ISOLang::ISO6392ToLcid(CStringA(sLanguage));
+};
-CDVBChannel::~CDVBChannel()
+CDVBChannel::CDVBChannel(CString strChannel)
{
+ FromString(strChannel);
}
-bool CDVBChannel::FromString(CString strValue)
+void CDVBChannel::FromString(CString strValue)
{
- try {
- int i = 0;
-
- int nVersion = _tstol(strValue.Tokenize(_T("|"), i));
- // We don't try to parse versions newer than the one we support
- if (nVersion > FORMAT_VERSION_CURRENT) {
- return false;
- }
+ int i = 0;
- m_strName = strValue.Tokenize(_T("|"), i);
- m_ulFrequency = _tstol(strValue.Tokenize(_T("|"), i));
- m_nPrefNumber = _tstol(strValue.Tokenize(_T("|"), i));
- m_nOriginNumber = _tstol(strValue.Tokenize(_T("|"), i));
- if (nVersion > FORMAT_VERSION_0) {
- m_bEncrypted = !!_tstol(strValue.Tokenize(_T("|"), i));
- }
- if (nVersion > FORMAT_VERSION_1) {
- m_bNowNextFlag = !!_tstol(strValue.Tokenize(_T("|"), i));
- }
- m_ulONID = _tstol(strValue.Tokenize(_T("|"), i));
- m_ulTSID = _tstol(strValue.Tokenize(_T("|"), i));
- m_ulSID = _tstol(strValue.Tokenize(_T("|"), i));
- m_ulPMT = _tstol(strValue.Tokenize(_T("|"), i));
- m_ulPCR = _tstol(strValue.Tokenize(_T("|"), i));
- m_ulVideoPID = _tstol(strValue.Tokenize(_T("|"), i));
- m_nVideoType = (DVB_STREAM_TYPE) _tstol(strValue.Tokenize(_T("|"), i));
- m_nAudioCount = _tstol(strValue.Tokenize(_T("|"), i));
- if (nVersion > FORMAT_VERSION_1) {
- m_nDefaultAudio = _tstol(strValue.Tokenize(_T("|"), i));
- }
- m_nSubtitleCount = _tstol(strValue.Tokenize(_T("|"), i));
- if (nVersion > FORMAT_VERSION_2) {
- m_nDefaultSubtitle = _tstol(strValue.Tokenize(_T("|"), i));
- }
+ int nVersion = _tstol(strValue.Tokenize(_T("|"), i));
+ // We don't try to parse versions newer than the one we support
+ if (nVersion > FORMAT_VERSION_CURRENT) {
+ AfxThrowInvalidArgException();
+ }
- for (int j = 0; j < m_nAudioCount; j++) {
- m_Audios[j].PID = _tstol(strValue.Tokenize(_T("|"), i));
- m_Audios[j].Type = (DVB_STREAM_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
- m_Audios[j].PesType = (PES_STREAM_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
- m_Audios[j].Language = strValue.Tokenize(_T("|"), i);
- }
+ m_strName = strValue.Tokenize(_T("|"), i);
+ m_ulFrequency = _tstol(strValue.Tokenize(_T("|"), i));
+ m_ulBandwidth = (nVersion > FORMAT_VERSION_4) ? _tstol(strValue.Tokenize(_T("|"), i))
+ : AfxGetAppSettings().iBDABandwidth * 1000;
+ m_nPrefNumber = _tstol(strValue.Tokenize(_T("|"), i));
+ m_nOriginNumber = _tstol(strValue.Tokenize(_T("|"), i));
+ if (nVersion > FORMAT_VERSION_0) {
+ m_bEncrypted = !!_tstol(strValue.Tokenize(_T("|"), i));
+ }
+ if (nVersion > FORMAT_VERSION_1) {
+ m_bNowNextFlag = !!_tstol(strValue.Tokenize(_T("|"), i));
+ }
+ m_ulONID = _tstol(strValue.Tokenize(_T("|"), i));
+ m_ulTSID = _tstol(strValue.Tokenize(_T("|"), i));
+ m_ulSID = _tstol(strValue.Tokenize(_T("|"), i));
+ m_ulPMT = _tstol(strValue.Tokenize(_T("|"), i));
+ m_ulPCR = _tstol(strValue.Tokenize(_T("|"), i));
+ m_ulVideoPID = _tstol(strValue.Tokenize(_T("|"), i));
+ m_nVideoType = (DVB_STREAM_TYPE) _tstol(strValue.Tokenize(_T("|"), i));
+ m_nAudioCount = _tstol(strValue.Tokenize(_T("|"), i));
+ if (nVersion > FORMAT_VERSION_1) {
+ m_nDefaultAudio = _tstol(strValue.Tokenize(_T("|"), i));
+ }
+ m_nSubtitleCount = _tstol(strValue.Tokenize(_T("|"), i));
+ if (nVersion > FORMAT_VERSION_2) {
+ m_nDefaultSubtitle = _tstol(strValue.Tokenize(_T("|"), i));
+ }
- for (int j = 0; j < m_nSubtitleCount; j++) {
- m_Subtitles[j].PID = _tstol(strValue.Tokenize(_T("|"), i));
- m_Subtitles[j].Type = (DVB_STREAM_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
- m_Subtitles[j].PesType = (PES_STREAM_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
- m_Subtitles[j].Language = strValue.Tokenize(_T("|"), i);
- }
+ for (int j = 0; j < m_nAudioCount; j++) {
+ m_Audios[j].ulPID = _tstol(strValue.Tokenize(_T("|"), i));
+ m_Audios[j].nType = (DVB_STREAM_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
+ m_Audios[j].nPesType = (PES_STREAM_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
+ m_Audios[j].sLanguage = strValue.Tokenize(_T("|"), i);
+ }
- if (nVersion > FORMAT_VERSION_3) {
- m_nVideoFps = (DVB_FPS_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
- m_nVideoChroma = (DVB_CHROMA_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
- m_nVideoWidth = _tstol(strValue.Tokenize(_T("|"), i));
- m_nVideoHeight = _tstol(strValue.Tokenize(_T("|"), i));
- m_nVideoAR = (DVB_AspectRatio_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
- }
- } catch (CException* e) {
- // The tokenisation can fail if the input string was invalid
- TRACE(_T("Failed to parse a DVB channel from string \"%s\""), strValue);
- e->Delete();
- return false;
+ for (int j = 0; j < m_nSubtitleCount; j++) {
+ m_Subtitles[j].ulPID = _tstol(strValue.Tokenize(_T("|"), i));
+ m_Subtitles[j].nType = (DVB_STREAM_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
+ m_Subtitles[j].nPesType = (PES_STREAM_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
+ m_Subtitles[j].sLanguage = strValue.Tokenize(_T("|"), i);
}
- return true;
+ if (nVersion > FORMAT_VERSION_3) {
+ m_nVideoFps = (DVB_FPS_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
+ m_nVideoChroma = (DVB_CHROMA_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
+ m_nVideoWidth = _tstol(strValue.Tokenize(_T("|"), i));
+ m_nVideoHeight = _tstol(strValue.Tokenize(_T("|"), i));
+ m_nVideoAR = (DVB_AspectRatio_TYPE)_tstol(strValue.Tokenize(_T("|"), i));
+ }
}
-CString CDVBChannel::ToString()
+CString CDVBChannel::ToString() const
{
+ auto substituteEmpty = [](const CString & lang) -> CString {
+ if (lang.IsEmpty())
+ {
+ return _T(" ");
+ }
+ return lang;
+ };
+
CString strValue;
- strValue.AppendFormat(_T("%d|%s|%lu|%d|%d|%d|%d|%lu|%lu|%lu|%lu|%lu|%lu|%d|%d|%d|%d|%d"),
+ strValue.AppendFormat(_T("%d|%s|%lu|%lu|%d|%d|%d|%d|%lu|%lu|%lu|%lu|%lu|%lu|%d|%d|%d|%d|%d"),
FORMAT_VERSION_CURRENT,
- m_strName,
+ m_strName.GetString(),
m_ulFrequency,
+ m_ulBandwidth,
m_nPrefNumber,
m_nOriginNumber,
m_bEncrypted,
@@ -144,17 +129,11 @@ CString CDVBChannel::ToString()
m_nDefaultSubtitle);
for (int i = 0; i < m_nAudioCount; i++) {
- if (m_Audios[i].Language.IsEmpty()) {
- m_Audios[i].Language = " ";
- }
- strValue.AppendFormat(_T("|%lu|%d|%d|%s"), m_Audios[i].PID, m_Audios[i].Type, m_Audios[i].PesType, m_Audios[i].Language);
+ strValue.AppendFormat(_T("|%lu|%d|%d|%s"), m_Audios[i].ulPID, m_Audios[i].nType, m_Audios[i].nPesType, substituteEmpty(m_Audios[i].sLanguage));
}
for (int i = 0; i < m_nSubtitleCount; i++) {
- if (m_Subtitles[i].Language.IsEmpty()) {
- m_Subtitles[i].Language = " ";
- }
- strValue.AppendFormat(_T("|%lu|%d|%d|%s"), m_Subtitles[i].PID, m_Subtitles[i].Type, m_Subtitles[i].PesType, m_Subtitles[i].Language);
+ strValue.AppendFormat(_T("|%lu|%d|%d|%s"), m_Subtitles[i].ulPID, m_Subtitles[i].nType, m_Subtitles[i].nPesType, substituteEmpty(m_Subtitles[i].sLanguage));
}
strValue.AppendFormat(_T("|%d|%d|%lu|%lu|%d"),
@@ -163,6 +142,7 @@ CString CDVBChannel::ToString()
m_nVideoWidth,
m_nVideoHeight,
m_nVideoAR);
+
return strValue;
}
@@ -180,6 +160,7 @@ void CDVBChannel::AddStreamInfo(ULONG ulPID, DVB_STREAM_TYPE nType, PES_STREAM_T
switch (nType) {
case DVB_MPV:
case DVB_H264:
+ case DVB_HEVC:
m_ulVideoPID = ulPID;
m_nVideoType = nType;
break;
@@ -188,19 +169,19 @@ void CDVBChannel::AddStreamInfo(ULONG ulPID, DVB_STREAM_TYPE nType, PES_STREAM_T
case DVB_EAC3:
case DVB_LATM:
if (m_nAudioCount < DVB_MAX_AUDIO) {
- m_Audios[m_nAudioCount].PID = ulPID;
- m_Audios[m_nAudioCount].Type = nType;
- m_Audios[m_nAudioCount].PesType = nPesType;
- m_Audios[m_nAudioCount].Language = strLanguage;
+ m_Audios[m_nAudioCount].ulPID = ulPID;
+ m_Audios[m_nAudioCount].nType = nType;
+ m_Audios[m_nAudioCount].nPesType = nPesType;
+ m_Audios[m_nAudioCount].sLanguage = strLanguage;
m_nAudioCount++;
}
break;
case DVB_SUBTITLE:
if (m_nSubtitleCount < DVB_MAX_SUBTITLE) {
- m_Subtitles[m_nSubtitleCount].PID = ulPID;
- m_Subtitles[m_nSubtitleCount].Type = nType;
- m_Subtitles[m_nSubtitleCount].PesType = nPesType;
- m_Subtitles[m_nSubtitleCount].Language = strLanguage;
+ m_Subtitles[m_nSubtitleCount].ulPID = ulPID;
+ m_Subtitles[m_nSubtitleCount].nType = nType;
+ m_Subtitles[m_nSubtitleCount].nPesType = nPesType;
+ m_Subtitles[m_nSubtitleCount].sLanguage = strLanguage;
m_nSubtitleCount++;
}
break;
diff --git a/src/mpc-hc/DVBChannel.h b/src/mpc-hc/DVBChannel.h
index 98f273f3e..7cc4ea276 100644
--- a/src/mpc-hc/DVBChannel.h
+++ b/src/mpc-hc/DVBChannel.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,11 +20,15 @@
#pragma once
+#include <vector>
+#include <array>
+
#define FORMAT_VERSION_0 0
#define FORMAT_VERSION_1 1
#define FORMAT_VERSION_2 2
#define FORMAT_VERSION_3 3
-#define FORMAT_VERSION_CURRENT 4
+#define FORMAT_VERSION_4 4
+#define FORMAT_VERSION_CURRENT 5
#define DVB_MAX_AUDIO 10
#define DVB_MAX_SUBTITLE 10
@@ -32,21 +36,14 @@
struct EventDescriptor {
CString eventName;
CString eventDesc;
- time_t startTime;
- time_t duration;
+ time_t startTime = 0;
+ time_t duration = 0;
CString strStartTime;
CString strEndTime;
- CArray<CString> extendedDescriptorsItemsDesc;
- CArray<CString> extendedDescriptorsItemsContent;
- CStringList extendedDescriptorsTexts;
- int parentalRating;
+ std::vector<std::pair<CString, CString>> extendedDescriptorsItems;
+ CString extendedDescriptorsText;
+ int parentalRating = -1;
CString content;
-
- EventDescriptor()
- : startTime(0)
- , duration(0)
- , parentalRating(-1)
- {};
};
enum DVB_STREAM_TYPE {
@@ -55,6 +52,7 @@ enum DVB_STREAM_TYPE {
DVB_MPA = 0x02,
DVB_AC3 = 0x03,
DVB_EAC3 = 0x04,
+ DVB_HEVC = 0x05,
DVB_LATM = 0x11,
DVB_PSI = 0x80,
DVB_TIF = 0x81,
@@ -93,22 +91,22 @@ enum DVB_AspectRatio_TYPE {
};
struct DVBStreamInfo {
- ULONG PID;
- DVB_STREAM_TYPE Type;
- PES_STREAM_TYPE PesType;
- CString Language;
+ ULONG ulPID = 0;
+ DVB_STREAM_TYPE nType = DVB_UNKNOWN;
+ PES_STREAM_TYPE nPesType = INVALID;
+ CString sLanguage;
- LCID GetLCID() { return ISO6392ToLcid(CStringA(Language)); };
+ LCID GetLCID() const;
};
class CDVBChannel
{
public:
- CDVBChannel();
- ~CDVBChannel();
+ CDVBChannel() = default;
+ CDVBChannel(CString strChannel);
+ ~CDVBChannel() = default;
- bool FromString(CString strValue);
- CString ToString();
+ CString ToString() const;
/**
* @brief Output a JSON representation of a DVB channel.
* @note The object contains two elements : "index", which corresponds to
@@ -120,6 +118,7 @@ public:
LPCTSTR GetName() const { return m_strName; };
ULONG GetFrequency() const { return m_ulFrequency; };
+ ULONG GetBandwidth() const { return m_ulBandwidth; }
int GetPrefNumber() const { return m_nPrefNumber; };
int GetOriginNumber() const { return m_nOriginNumber; };
ULONG GetONID() const { return m_ulONID; };
@@ -137,9 +136,9 @@ public:
DWORD GetVideoARx();
DWORD GetVideoARy();
DVB_STREAM_TYPE GetVideoType() const { return m_nVideoType; }
- ULONG GetDefaultAudioPID() const { return m_Audios[GetDefaultAudio()].PID; };
- DVB_STREAM_TYPE GetDefaultAudioType() const { return m_Audios[GetDefaultAudio()].Type; }
- ULONG GetDefaultSubtitlePID() const { return m_Subtitles[GetDefaultSubtitle()].PID; };
+ ULONG GetDefaultAudioPID() const { return m_Audios[GetDefaultAudio()].ulPID; };
+ DVB_STREAM_TYPE GetDefaultAudioType() const { return m_Audios[GetDefaultAudio()].nType; }
+ ULONG GetDefaultSubtitlePID() const { return m_Subtitles[GetDefaultSubtitle()].ulPID; };
int GetAudioCount() const { return m_nAudioCount; };
int GetDefaultAudio() const { return m_nDefaultAudio; };
int GetSubtitleCount() const { return m_nSubtitleCount; };
@@ -155,8 +154,9 @@ public:
void SetName(LPCTSTR Value) { m_strName = Value; };
void SetFrequency(ULONG Value) { m_ulFrequency = Value; };
+ void SetBandwidth(ULONG ulBandwidth) { m_ulBandwidth = ulBandwidth; }
void SetPrefNumber(int Value) { m_nPrefNumber = Value; };
- void SetOriginNumber(int Value) { m_nOriginNumber = m_nPrefNumber = Value; };
+ void SetOriginNumber(int Value) { m_nOriginNumber = Value; };
void SetEncrypted(bool Value) { m_bEncrypted = Value; };
void SetNowNextFlag(bool Value) { m_bNowNextFlag = Value; };
void SetONID(ULONG Value) { m_ulONID = Value; };
@@ -175,29 +175,43 @@ public:
void AddStreamInfo(ULONG ulPID, DVB_STREAM_TYPE nType, PES_STREAM_TYPE nPesType, LPCTSTR strLanguage);
+ bool operator < (CDVBChannel const& channel) const {
+ int aOriginNumber = GetOriginNumber();
+ int bOriginNumber = channel.GetOriginNumber();
+ return (aOriginNumber == 0 && bOriginNumber == 0) ? GetPrefNumber() < channel.GetPrefNumber() : (aOriginNumber == 0 || bOriginNumber == 0) ? bOriginNumber == 0 : aOriginNumber < bOriginNumber;
+ }
+
+ // Returns true for channels with the same place, doesn't necessarily need to be equal (i.e if internal streams were updated)
+ bool operator==(CDVBChannel const& channel) const {
+ return GetPMT() == channel.GetPMT() && GetFrequency() == channel.GetFrequency();
+ }
+
private:
CString m_strName;
- ULONG m_ulFrequency;
- int m_nPrefNumber;
- int m_nOriginNumber;
- bool m_bEncrypted;
- bool m_bNowNextFlag;
- ULONG m_ulONID;
- ULONG m_ulTSID;
- ULONG m_ulSID;
- ULONG m_ulPMT;
- ULONG m_ulPCR;
- ULONG m_ulVideoPID;
- DVB_STREAM_TYPE m_nVideoType;
- DVB_FPS_TYPE m_nVideoFps;
- DVB_CHROMA_TYPE m_nVideoChroma;
- ULONG m_nVideoWidth;
- ULONG m_nVideoHeight;
- DVB_AspectRatio_TYPE m_nVideoAR;
- int m_nAudioCount;
- int m_nDefaultAudio;
- int m_nSubtitleCount;
- int m_nDefaultSubtitle;
- DVBStreamInfo m_Audios[DVB_MAX_AUDIO];
- DVBStreamInfo m_Subtitles[DVB_MAX_SUBTITLE];
+ ULONG m_ulFrequency = 0;
+ ULONG m_ulBandwidth = 0;
+ int m_nPrefNumber = 0;
+ int m_nOriginNumber = 0;
+ bool m_bEncrypted = false;
+ bool m_bNowNextFlag = false;
+ ULONG m_ulONID = 0;
+ ULONG m_ulTSID = 0;
+ ULONG m_ulSID = 0;
+ ULONG m_ulPMT = 0;
+ ULONG m_ulPCR = 0;
+ ULONG m_ulVideoPID = 0;
+ DVB_STREAM_TYPE m_nVideoType = DVB_MPV;
+ DVB_FPS_TYPE m_nVideoFps = DVB_FPS_25_0;
+ DVB_CHROMA_TYPE m_nVideoChroma = DVB_Chroma_4_2_0;
+ ULONG m_nVideoWidth = 0;
+ ULONG m_nVideoHeight = 0;
+ DVB_AspectRatio_TYPE m_nVideoAR = DVB_AR_NULL;
+ int m_nAudioCount = 0;
+ int m_nDefaultAudio = 0;
+ int m_nSubtitleCount = 0;
+ int m_nDefaultSubtitle = -1;
+ std::array<DVBStreamInfo, DVB_MAX_AUDIO> m_Audios;
+ std::array<DVBStreamInfo, DVB_MAX_SUBTITLE> m_Subtitles;
+
+ void FromString(CString strValue);
};
diff --git a/src/mpc-hc/DebugShadersDlg.cpp b/src/mpc-hc/DebugShadersDlg.cpp
index 698cfebc9..6ad165c24 100644
--- a/src/mpc-hc/DebugShadersDlg.cpp
+++ b/src/mpc-hc/DebugShadersDlg.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,8 @@
#include "DebugShadersDlg.h"
#include "mplayerc.h"
#include "PathUtils.h"
+#include "SettingsDefines.h"
+#include "AppSettings.h"
CModelessDialog::CModelessDialog(UINT nIDTemplate)
: CResizableDialog(nIDTemplate)
@@ -50,8 +52,8 @@ void CModelessDialog::OnOK()
CDebugShadersDlg::CDebugShadersDlg()
: CModelessDialog(IDD)
- , m_Compiler(nullptr)
, m_timerOneTime(this, TIMER_ONETIME_START, TIMER_ONETIME_END - TIMER_ONETIME_START + 1)
+ , m_Compiler(nullptr)
{
EventRouter::EventSelection receives;
receives.insert(MpcEvent::SHADER_LIST_CHANGED);
@@ -64,7 +66,7 @@ CDebugShadersDlg::CDebugShadersDlg()
SetSizeGripVisibility(FALSE);
SetMinTrackSize(CSize(360, 100));
AddAnchor(IDC_COMBO1, TOP_LEFT, TOP_RIGHT);
- AddAnchor(IDC_STATIC, TOP_LEFT, BOTTOM_RIGHT);
+ AddAnchor((UINT)IDC_STATIC, TOP_LEFT, BOTTOM_RIGHT);
AddAnchor(IDC_EDIT1, TOP_LEFT, BOTTOM_RIGHT);
AddAnchor(IDC_RADIO1, TOP_RIGHT);
AddAnchor(IDC_RADIO2, TOP_RIGHT);
@@ -249,16 +251,16 @@ void CDebugShadersDlg::OnRecompileShader()
profile = "ps_2_0";
break;
}
- CString disasm, msg;
+ CString disasm, compilerMsg;
if (SUCCEEDED(m_Compiler.CompileShaderFromFile(shader.filePath, "main", profile,
- D3DXSHADER_DEBUG, nullptr, &disasm, &msg))) {
- if (!msg.IsEmpty()) {
- msg += _T("\n");
+ D3DCOMPILE_DEBUG, nullptr, &disasm, &compilerMsg))) {
+ if (!compilerMsg.IsEmpty()) {
+ compilerMsg += _T("\n");
}
- msg += disasm;
+ compilerMsg += disasm;
}
- msg.Replace(_T("\n"), _T("\r\n"));
- m_DebugInfo.SetWindowText(msg);
+ compilerMsg.Replace(_T("\n"), _T("\r\n"));
+ m_DebugInfo.SetWindowText(compilerMsg);
} else {
m_DebugInfo.SetWindowText(_T("File not found"));
}
diff --git a/src/mpc-hc/DebugShadersDlg.h b/src/mpc-hc/DebugShadersDlg.h
index bd8ef5c91..ab06cc7cb 100644
--- a/src/mpc-hc/DebugShadersDlg.h
+++ b/src/mpc-hc/DebugShadersDlg.h
@@ -1,5 +1,5 @@
/*
- * (C) 2013 see Authors.txt
+ * (C) 2013-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -47,8 +47,7 @@ public:
private:
enum { WM_APP_RECOMPILE_SHADER = WM_APP + 100 };
- enum class TimerOneTimeSubscriber
- {
+ enum class TimerOneTimeSubscriber {
SELECTED_SHADER_CHANGE_COOLDOWN,
};
OneTimeTimerPool<TimerOneTimeSubscriber> m_timerOneTime;
diff --git a/src/mpc-hc/DeinterlacerFilter.cpp b/src/mpc-hc/DeinterlacerFilter.cpp
index 028cf7e09..fcd1d31ea 100644
--- a/src/mpc-hc/DeinterlacerFilter.cpp
+++ b/src/mpc-hc/DeinterlacerFilter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -92,9 +92,8 @@ HRESULT CDeinterlacerFilter::Transform(IMediaSample* pIn, IMediaSample* pOut)
int bppOut = !(bihOut.biBitCount & 7) ? bihOut.biBitCount : 8;
int pitchIn = bihIn.biWidth * bppIn >> 3;
int pitchOut = bihOut.biWidth * bppOut >> 3;
- BYTE* pDataOut2 = pDataOut;
+
if (fFlip) {
- pDataOut2 += pitchOut * (bihIn.biHeight - 1);
pitchOut = -pitchOut;
}
diff --git a/src/mpc-hc/DpiHelper.cpp b/src/mpc-hc/DpiHelper.cpp
new file mode 100644
index 000000000..7eb135d9f
--- /dev/null
+++ b/src/mpc-hc/DpiHelper.cpp
@@ -0,0 +1,66 @@
+/*
+ * (C) 2015-2016 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "DpiHelper.h"
+
+#include "WinapiFunc.h"
+
+namespace
+{
+ typedef enum MONITOR_DPI_TYPE {
+ MDT_EFFECTIVE_DPI = 0,
+ MDT_ANGULAR_DPI = 1,
+ MDT_RAW_DPI = 2,
+ MDT_DEFAULT = MDT_EFFECTIVE_DPI
+ } MONITOR_DPI_TYPE;
+
+ HRESULT WINAPI GetDpiForMonitor(HMONITOR hmonitor, MONITOR_DPI_TYPE dpiType, UINT* dpiX, UINT* dpiY);
+}
+
+DpiHelper::DpiHelper()
+{
+ HDC hDC = ::GetDC(nullptr);
+ m_sdpix = GetDeviceCaps(hDC, LOGPIXELSX);
+ m_sdpiy = GetDeviceCaps(hDC, LOGPIXELSY);
+ ::ReleaseDC(nullptr, hDC);
+ m_dpix = m_sdpix;
+ m_dpiy = m_sdpiy;
+}
+
+void DpiHelper::Override(HWND hWindow)
+{
+ const WinapiFunc<decltype(GetDpiForMonitor)>
+ fnGetDpiForMonitor = { _T("Shcore.dll"), "GetDpiForMonitor" };
+
+ if (hWindow && fnGetDpiForMonitor) {
+ if (fnGetDpiForMonitor(MonitorFromWindow(hWindow, MONITOR_DEFAULTTONULL),
+ MDT_EFFECTIVE_DPI, (UINT*)&m_dpix, (UINT*)&m_dpiy) != S_OK) {
+ m_dpix = m_sdpix;
+ m_dpiy = m_sdpiy;
+ }
+ }
+}
+
+void DpiHelper::Override(int dpix, int dpiy)
+{
+ m_dpix = dpix;
+ m_dpiy = dpiy;
+}
diff --git a/src/mpc-hc/DpiHelper.h b/src/mpc-hc/DpiHelper.h
new file mode 100644
index 000000000..34e0dc857
--- /dev/null
+++ b/src/mpc-hc/DpiHelper.h
@@ -0,0 +1,49 @@
+/*
+ * (C) 2015-2016 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+class DpiHelper final
+{
+public:
+
+ DpiHelper();
+
+ void Override(HWND hWindow);
+ void Override(int dpix, int dpiy);
+
+ inline double ScaleFactorX() const { return m_dpix / 96.0; }
+ inline double ScaleFactorY() const { return m_dpiy / 96.0; }
+
+ inline int ScaleFloorX(int x) const { return x * m_dpix / 96; }
+ inline int ScaleFloorY(int y) const { return y * m_dpiy / 96; }
+ inline int ScaleX(int x) const { return MulDiv(x, m_dpix, 96); }
+ inline int ScaleY(int y) const { return MulDiv(y, m_dpiy, 96); }
+ inline int TransposeScaledX(int x) const { return MulDiv(x, m_dpiy, m_dpix); }
+ inline int TransposeScaledY(int y) const { return MulDiv(y, m_dpix, m_dpiy); }
+
+ inline int ScaleSystemToOverrideX(int x) const { return MulDiv(x, m_dpix, m_sdpix); }
+ inline int ScaleSystemToOverrideY(int y) const { return MulDiv(y, m_dpiy, m_sdpiy); }
+
+private:
+
+ int m_dpix, m_dpiy;
+ int m_sdpix, m_sdpiy;
+};
diff --git a/src/mpc-hc/DropTarget.cpp b/src/mpc-hc/DropTarget.cpp
new file mode 100644
index 000000000..aae9c4613
--- /dev/null
+++ b/src/mpc-hc/DropTarget.cpp
@@ -0,0 +1,122 @@
+/*
+ * (C) 2003-2006 Gabest
+ * (C) 2006-2012, 2015 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "DropTarget.h"
+
+CDropTarget::CDropTarget()
+{
+ m_pDropHelper.CoCreateInstance(CLSID_DragDropHelper, nullptr, CLSCTX_INPROC_SERVER);
+};
+
+DROPEFFECT CDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
+{
+ DROPEFFECT dropEffect = DROPEFFECT_NONE;
+
+ auto pClient = dynamic_cast<CDropClient*>(pWnd);
+ if (pClient && (pDataObject->IsDataAvailable(CF_HDROP) || pDataObject->IsDataAvailable(CF_URL))) {
+ dropEffect = pClient->OnDropAccept(pDataObject, dwKeyState, point);
+ }
+
+ if (m_pDropHelper) {
+ m_pDropHelper->DragEnter(pWnd->GetSafeHwnd(), pDataObject->GetIDataObject(FALSE), &point, dropEffect);
+ }
+
+ return dropEffect;
+}
+
+DROPEFFECT CDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
+{
+ DROPEFFECT dropEffect = DROPEFFECT_NONE;
+
+ auto pClient = dynamic_cast<CDropClient*>(pWnd);
+ if (pClient && (pDataObject->IsDataAvailable(CF_HDROP) || pDataObject->IsDataAvailable(CF_URL))) {
+ dropEffect = pClient->OnDropAccept(pDataObject, dwKeyState, point);
+ }
+
+ if (m_pDropHelper) {
+ m_pDropHelper->DragOver(&point, dropEffect);
+ }
+
+ return dropEffect;
+}
+
+BOOL CDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point)
+{
+ BOOL bResult = FALSE;
+ CAtlList<CString> slFiles;
+
+ if (auto pClient = dynamic_cast<CDropClient*>(pWnd)) {
+ if (pDataObject->IsDataAvailable(CF_HDROP)) {
+ if (HGLOBAL hGlobal = pDataObject->GetGlobalData(CF_HDROP)) {
+ if (HDROP hDrop = static_cast<HDROP>(GlobalLock(hGlobal))) {
+ UINT nFiles = ::DragQueryFile(hDrop, UINT_MAX, nullptr, 0);
+ for (UINT iFile = 0; iFile < nFiles; iFile++) {
+ CString fn;
+ fn.ReleaseBuffer(::DragQueryFile(hDrop, iFile, fn.GetBuffer(MAX_PATH), MAX_PATH));
+ slFiles.AddTail(fn);
+ }
+ ::DragFinish(hDrop);
+ pClient->OnDropFiles(slFiles, dropEffect);
+ bResult = TRUE;
+ }
+ GlobalUnlock(hGlobal);
+ }
+ } else if (pDataObject->IsDataAvailable(CF_URL)) {
+ FORMATETC fmt = { CF_URL, nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
+ if (HGLOBAL hGlobal = pDataObject->GetGlobalData(CF_URL, &fmt)) {
+ LPCSTR pText = static_cast<LPCSTR>(GlobalLock(hGlobal));
+ if (AfxIsValidString(pText)) {
+ slFiles.AddTail(pText);
+ pClient->OnDropFiles(slFiles, dropEffect);
+ GlobalUnlock(hGlobal);
+ bResult = TRUE;
+ }
+ }
+ }
+ }
+
+ if (m_pDropHelper) {
+ m_pDropHelper->Drop(pDataObject->GetIDataObject(FALSE), &point, dropEffect);
+ }
+
+ return bResult;
+}
+
+DROPEFFECT CDropTarget::OnDropEx(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point)
+{
+ if (OnDrop(pWnd, pDataObject, dropDefault, point)) {
+ return dropDefault;
+ }
+ return DROPEFFECT_NONE;
+}
+
+void CDropTarget::OnDragLeave(CWnd* pWnd)
+{
+ if (m_pDropHelper) {
+ m_pDropHelper->DragLeave();
+ }
+}
+
+DROPEFFECT CDropTarget::OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point)
+{
+ return DROPEFFECT_NONE;
+}
diff --git a/src/mpc-hc/DropTarget.h b/src/mpc-hc/DropTarget.h
new file mode 100644
index 000000000..aaead03a8
--- /dev/null
+++ b/src/mpc-hc/DropTarget.h
@@ -0,0 +1,49 @@
+/*
+ * (C) 2003-2006 Gabest
+ * (C) 2006-2012, 2015 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include <afxole.h>
+
+#define DROPEFFECT_APPEND 16
+
+struct CDropClient {
+ virtual void OnDropFiles(CAtlList<CString>& slFiles, DROPEFFECT dropEffect) PURE;
+ virtual DROPEFFECT OnDropAccept(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) PURE;
+};
+
+class CDropTarget : public COleDropTarget
+{
+ const CLIPFORMAT CF_URL = static_cast<CLIPFORMAT>(RegisterClipboardFormat(_T("UniformResourceLocator")));
+ CComPtr<IDropTargetHelper> m_pDropHelper;
+
+public:
+ CDropTarget();
+ virtual ~CDropTarget() = default;
+
+protected:
+ DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) override;
+ DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) override;
+ BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point) override;
+ DROPEFFECT OnDropEx(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point) override;
+ void OnDragLeave(CWnd* pWnd) override;
+ DROPEFFECT OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point) override;
+};
diff --git a/src/mpc-hc/EditListEditor.cpp b/src/mpc-hc/EditListEditor.cpp
index 5b729f4ef..abdd56c59 100644
--- a/src/mpc-hc/EditListEditor.cpp
+++ b/src/mpc-hc/EditListEditor.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -72,11 +72,11 @@ CString CClip::GetOut() const
IMPLEMENT_DYNAMIC(CEditListEditor, CPlayerBar)
CEditListEditor::CEditListEditor()
- : m_pDragImage(nullptr)
- , m_curPos(nullptr)
+ : m_curPos(nullptr)
, m_bDragging(FALSE)
, m_nDragIndex(-1)
, m_nDropIndex(-1)
+ , m_pDragImage(nullptr)
, m_bFileOpen(false)
{
}
@@ -202,7 +202,7 @@ void CEditListEditor::CloseFile()
m_editList.RemoveAll();
m_list.DeleteAllItems();
m_curPos = nullptr;
- m_strFileName = "";
+ m_strFileName.Empty();
m_bFileOpen = false;
m_cbHotFolders.SetCurSel(0);
}
diff --git a/src/mpc-hc/EventDispatcher.h b/src/mpc-hc/EventDispatcher.h
index 438ad13e4..033c7ef7d 100644
--- a/src/mpc-hc/EventDispatcher.h
+++ b/src/mpc-hc/EventDispatcher.h
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,8 +25,7 @@
#include <memory>
#include <set>
-enum class MpcEvent
-{
+enum class MpcEvent {
SWITCHING_TO_FULLSCREEN,
SWITCHED_TO_FULLSCREEN,
SWITCHING_FROM_FULLSCREEN,
@@ -45,6 +44,9 @@ enum class MpcEvent
SYSTEM_MENU_POPUP_INITIALIZED,
SYSTEM_MENU_POPUP_UNINITIALIZED,
CHANGING_UI_LANGUAGE,
+ STREAM_POS_UPDATE_REQUEST,
+ DPI_CHANGED,
+ DEFAULT_TOOLBAR_SIZE_CHANGED,
};
class EventClient;
diff --git a/src/mpc-hc/FGFilter.cpp b/src/mpc-hc/FGFilter.cpp
index de49fdef6..c4f544e55 100644
--- a/src/mpc-hc/FGFilter.cpp
+++ b/src/mpc-hc/FGFilter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,11 +24,13 @@
#include "FGFilter.h"
#include "MainFrm.h"
#include "DSUtil.h"
-#include "AllocatorCommon7.h"
-#include "AllocatorCommon.h"
-#include "SyncAllocatorPresenter.h"
#include "IPinHook.h" // For the NVIDIA driver bug work-around
#include "moreuuids.h"
+#include <mvrInterfaces.h>
+
+#include <initguid.h>
+#include "AllocatorCommon.h"
+#include "SyncAllocatorPresenter.h"
//
@@ -104,12 +106,11 @@ CFGFilterRegistry::CFGFilterRegistry(IMoniker* pMoniker, UINT64 merit)
return;
}
- LPOLESTR str = nullptr;
+ CComHeapPtr<OLECHAR> str;
if (FAILED(m_pMoniker->GetDisplayName(0, 0, &str))) {
return;
}
m_DisplayName = m_name = str;
- CoTaskMemFree(str), str = nullptr;
QueryProperties();
@@ -147,17 +148,17 @@ void CFGFilterRegistry::QueryProperties()
CComPtr<IPropertyBag> pPB;
if (SUCCEEDED(m_pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB)))) {
CComVariant var;
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
m_name = var.bstrVal;
var.Clear();
}
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("CLSID")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("CLSID"), &var, nullptr))) {
CLSIDFromString(var.bstrVal, &m_clsid);
var.Clear();
}
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FilterData")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FilterData"), &var, nullptr))) {
BSTR* pstr;
if (SUCCEEDED(SafeArrayAccessData(var.parray, (void**)&pstr))) {
ExtractFilterData((BYTE*)pstr, var.parray->cbElements * (var.parray->rgsabound[0].cElements));
@@ -204,9 +205,10 @@ CFGFilterRegistry::CFGFilterRegistry(const CLSID& clsid, UINT64 merit)
DWORD len = _countof(buff);
for (DWORD i = 0; ERROR_SUCCESS == catkey.EnumKey(i, buff, &len, &ft); i++, len = _countof(buff)) {
if (ERROR_SUCCESS == key.Open(catkey, buff, KEY_READ)) {
- TCHAR clsid[256];
- len = _countof(clsid);
- if (ERROR_SUCCESS == key.QueryStringValue(_T("CLSID"), clsid, &len) && GUIDFromCString(clsid) == m_clsid) {
+ TCHAR clsidString[256];
+ len = _countof(clsidString);
+ if (ERROR_SUCCESS == key.QueryStringValue(_T("CLSID"), clsidString, &len)
+ && GUIDFromCString(clsidString) == m_clsid) {
break;
}
@@ -365,7 +367,7 @@ void CFGFilterRegistry::ExtractFilterData(BYTE* p, UINT len)
p += 12;
while (nTypes-- > 0) {
ChkLen(1)
- BYTE n = *p - 0x30;
+ n = *p - 0x30;
p++;
UNREFERENCED_PARAMETER(n);
@@ -376,7 +378,7 @@ void CFGFilterRegistry::ExtractFilterData(BYTE* p, UINT len)
UNREFERENCED_PARAMETER(ty);
ChkLen(5)
- BYTE x33 = *p;
+ x33 = *p;
p++;
ASSERT(x33 == 0x33);
UNREFERENCED_PARAMETER(x33);
@@ -427,69 +429,91 @@ HRESULT CFGFilterFile::Create(IBaseFilter** ppBF, CInterfaceList<IUnknown, &IID_
CFGFilterVideoRenderer::CFGFilterVideoRenderer(HWND hWnd, const CLSID& clsid, CStringW name, UINT64 merit)
: CFGFilter(clsid, name, merit)
, m_hWnd(hWnd)
+ , m_bHas10BitWorkAround(false)
{
AddType(MEDIATYPE_Video, MEDIASUBTYPE_NULL);
}
+CFGFilterVideoRenderer::~CFGFilterVideoRenderer()
+{
+ if (m_bHas10BitWorkAround) {
+ UnhookWorkAround10BitBug();
+ }
+}
+
HRESULT CFGFilterVideoRenderer::Create(IBaseFilter** ppBF, CInterfaceList<IUnknown, &IID_IUnknown>& pUnks)
{
TRACE(_T("--> CFGFilterVideoRenderer::Create on thread: %lu\n"), GetCurrentThreadId());
CheckPointer(ppBF, E_POINTER);
- HRESULT hr = S_OK;
-
+ HRESULT hr;
CComPtr<ISubPicAllocatorPresenter> pCAP;
- if (m_clsid == CLSID_VMR7AllocatorPresenter
- || m_clsid == CLSID_VMR9AllocatorPresenter
- || m_clsid == CLSID_DXRAllocatorPresenter
- || m_clsid == CLSID_madVRAllocatorPresenter
- || m_clsid == CLSID_EVRAllocatorPresenter
- || m_clsid == CLSID_SyncAllocatorPresenter) {
- bool bFullscreen = (AfxGetApp()->m_pMainWnd != nullptr) && (((CMainFrame*)AfxGetApp()->m_pMainWnd)->IsD3DFullScreenMode());
- if (SUCCEEDED(CreateAP7(m_clsid, m_hWnd, &pCAP))
- || SUCCEEDED(CreateAP9(m_clsid, m_hWnd, bFullscreen, &pCAP))
- || SUCCEEDED(CreateEVR(m_clsid, m_hWnd, bFullscreen, &pCAP))
- || SUCCEEDED(CreateSyncRenderer(m_clsid, m_hWnd, bFullscreen, &pCAP))) {
- CComPtr<IUnknown> pRenderer;
- if (SUCCEEDED(hr = pCAP->CreateRenderer(&pRenderer))) {
- *ppBF = CComQIPtr<IBaseFilter>(pRenderer).Detach();
- pUnks.AddTail(pCAP);
- if (CComQIPtr<ISubPicAllocatorPresenter2> pCAP2 = pCAP) {
- pUnks.AddTail(pCAP2);
- }
- // madVR supports calling IVideoWindow::put_Owner before the pins are connected
- if (m_clsid == CLSID_madVRAllocatorPresenter) {
- if (CComQIPtr<IVideoWindow> pVW = pCAP) {
- pVW->put_Owner((OAHWND)m_hWnd);
- }
- }
- }
+ auto isD3DFullScreenMode = []() {
+ auto pMainFrame = dynamic_cast<const CMainFrame*>(AfxGetApp()->m_pMainWnd);
+ ASSERT(pMainFrame);
+ return pMainFrame && pMainFrame->IsD3DFullScreenMode();
+ };
+
+ if (m_clsid == CLSID_EVRAllocatorPresenter) {
+ CheckNoLog(CreateEVR(m_clsid, m_hWnd, isD3DFullScreenMode(), &pCAP));
+ } else if (m_clsid == CLSID_SyncAllocatorPresenter) {
+ CheckNoLog(CreateSyncRenderer(m_clsid, m_hWnd, isD3DFullScreenMode(), &pCAP));
+ } else if (m_clsid == CLSID_madVRAllocatorPresenter) {
+ CheckNoLog(CreateAP9(m_clsid, m_hWnd, isD3DFullScreenMode(), &pCAP));
+
+ if (CComQIPtr<IMadVRSubclassReplacement> pMVRSR = pCAP) {
+ VERIFY(SUCCEEDED(pMVRSR->DisableSubclassing()));
+ }
+ // madVR supports calling IVideoWindow::put_Owner before the pins are connected
+ if (CComQIPtr<IVideoWindow> pVW = pCAP) {
+ VERIFY(SUCCEEDED(pVW->put_Owner((OAHWND)m_hWnd)));
}
+ } else if (m_clsid == CLSID_VMR9AllocatorPresenter || m_clsid == CLSID_DXRAllocatorPresenter) {
+ CheckNoLog(CreateAP9(m_clsid, m_hWnd, isD3DFullScreenMode(), &pCAP));
} else {
CComPtr<IBaseFilter> pBF;
- if (SUCCEEDED(pBF.CoCreateInstance(m_clsid))) {
- if (m_clsid == CLSID_EnhancedVideoRenderer) {
- CComQIPtr<IEVRFilterConfig> pConfig = pBF;
- pConfig->SetNumberOfStreams(3);
+ CheckNoLog(pBF.CoCreateInstance(m_clsid));
- HookWorkAroundNVIDIADriverBug(pBF);
- }
+ if (m_clsid == CLSID_EnhancedVideoRenderer) {
+ CComQIPtr<IEVRFilterConfig> pConfig = pBF;
+ pConfig->SetNumberOfStreams(3);
- BeginEnumPins(pBF, pEP, pPin) {
- if (CComQIPtr<IMixerPinConfig, &IID_IMixerPinConfig> pMPC = pPin) {
- pUnks.AddTail(pMPC);
- break;
+ if (CComQIPtr<IMFGetService> pMFGS = pBF) {
+ CComPtr<IMFVideoDisplayControl> pMFVDC;
+ if (SUCCEEDED(pMFGS->GetService(MR_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&pMFVDC)))) {
+ pMFVDC->SetVideoWindow(m_hWnd);
}
}
- EndEnumPins;
+ }
- *ppBF = pBF.Detach();
+ BeginEnumPins(pBF, pEP, pPin) {
+ if (CComQIPtr<IMixerPinConfig, &IID_IMixerPinConfig> pMPC = pPin) {
+ pUnks.AddTail(pMPC);
+ break;
+ }
+ }
+ EndEnumPins;
+
+ *ppBF = pBF.Detach();
+ }
+
+ if (pCAP) {
+ CComPtr<IUnknown> pRenderer;
+ CheckNoLog(pCAP->CreateRenderer(&pRenderer));
+
+ *ppBF = CComQIPtr<IBaseFilter>(pRenderer).Detach();
+ pUnks.AddTail(pCAP);
+ if (CComQIPtr<ISubPicAllocatorPresenter2> pCAP2 = pCAP) {
+ pUnks.AddTail(pCAP2);
}
}
- if (!*ppBF) {
- hr = E_FAIL;
+ CheckPointer(*ppBF, E_FAIL);
+
+ if (m_clsid != CLSID_madVRAllocatorPresenter) {
+ HookWorkAround10BitBug(*ppBF);
+ m_bHas10BitWorkAround = true;
}
return hr;
diff --git a/src/mpc-hc/FGFilter.h b/src/mpc-hc/FGFilter.h
index 5d3f73123..a0c035bab 100644
--- a/src/mpc-hc/FGFilter.h
+++ b/src/mpc-hc/FGFilter.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -124,9 +124,11 @@ class CFGFilterVideoRenderer : public CFGFilter
{
protected:
HWND m_hWnd;
+ bool m_bHas10BitWorkAround;
public:
CFGFilterVideoRenderer(HWND hWnd, const CLSID& clsid, CStringW name = L"", UINT64 merit = MERIT64_DO_USE);
+ virtual ~CFGFilterVideoRenderer();
HRESULT Create(IBaseFilter** ppBF, CInterfaceList<IUnknown, &IID_IUnknown>& pUnks);
};
diff --git a/src/mpc-hc/FGFilterLAV.cpp b/src/mpc-hc/FGFilterLAV.cpp
index 9648e433b..58f1c7291 100644
--- a/src/mpc-hc/FGFilterLAV.cpp
+++ b/src/mpc-hc/FGFilterLAV.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -19,24 +19,20 @@
*/
#include "stdafx.h"
-#include <mpconfig.h>
-#include "FGFilterLAV.h"
-#include "MainFrm.h"
-#include "DSUtil.h"
-#include "FileVersionInfo.h"
-#include "WinAPIUtils.h"
+#include "mplayerc.h"
+#include "PathUtils.h"
#include "SysVersion.h"
-#include "AllocatorCommon7.h"
-#include "AllocatorCommon.h"
-#include "SyncAllocatorPresenter.h"
-#include "moreuuids.h"
#include "../filters/InternalPropertyPage.h"
#include "../filters/PinInfoWnd.h"
+#include <FileVersionInfo.h>
+
+#include <initguid.h>
+#include "FGFilterLAV.h"
#define LAV_FILTERS_VERSION_MAJOR 0
-#define LAV_FILTERS_VERSION_MINOR 62
+#define LAV_FILTERS_VERSION_MINOR 67
#define LAV_FILTERS_VERSION_REVISION 0
-#define LAV_FILTERS_VERSION_COMMIT_NUM 0
+#define LAV_FILTERS_VERSION_COMMIT_NUM 82
#define LAV_FILTERS_VERSION ((QWORD)LAV_FILTERS_VERSION_MAJOR << 48 | (QWORD)LAV_FILTERS_VERSION_MINOR << 32 | (QWORD)LAV_FILTERS_VERSION_REVISION << 16 | LAV_FILTERS_VERSION_COMMIT_NUM)
#define IDS_R_INTERNAL_LAVSPLITTER IDS_R_INTERNAL_FILTERS _T("\\LAVSplitter")
@@ -65,21 +61,21 @@ CFGFilterLAV::CFGFilterLAV(const CLSID& clsid, CString path, CStringW name, bool
CString CFGFilterLAV::GetFilterPath(LAVFILTER_TYPE filterType)
{
// Default path
- CString filterPath = GetProgramPath() + LAVFILTERS_DIR;
+ CString filterPath = PathUtils::CombinePaths(PathUtils::GetProgramPath(), LAVFILTERS_DIR);
CLSID filterCLSID;
switch (filterType) {
case SPLITTER:
case SPLITTER_SOURCE:
- filterPath += CFGFilterLAVSplitterBase::filename;
+ filterPath = PathUtils::CombinePaths(filterPath, CFGFilterLAVSplitterBase::filename);
filterCLSID = GUID_LAVSplitter;
break;
case VIDEO_DECODER:
- filterPath += CFGFilterLAVVideo::filename;
+ filterPath = PathUtils::CombinePaths(filterPath, CFGFilterLAVVideo::filename);
filterCLSID = GUID_LAVVideo;
break;
case AUDIO_DECODER:
- filterPath += CFGFilterLAVAudio::filename;
+ filterPath = PathUtils::CombinePaths(filterPath, CFGFilterLAVAudio::filename);
filterCLSID = GUID_LAVAudio;
break;
default:
@@ -207,7 +203,7 @@ HRESULT CFGFilterLAV::PropertyPageCallback(IBaseFilter* pBF)
{
CheckPointer(pBF, E_POINTER);
- CComPropertySheet ps(ResStr(IDS_PROPSHEET_PROPERTIES), AfxGetMyApp()->GetMainWnd());
+ CComPropertySheet ps(IDS_PROPSHEET_PROPERTIES, AfxGetMyApp()->GetMainWnd());
// Find out which internal filter we are opening the property page for
CFGFilterLAV::LAVFILTER_TYPE LAVFilterType = CFGFilterLAV::INVALID;
@@ -231,14 +227,14 @@ HRESULT CFGFilterLAV::PropertyPageCallback(IBaseFilter* pBF)
if (settings.GetSettings(pLAVFSettings)) { // Get current settings from LAVSplitter
settings.SaveSettings(); // Save them to the registry/ini
}
- } else if (CComQIPtr<ILAVVideoSettings> pLAVFSettings = pBF) {
+ } else if (CComQIPtr<ILAVVideoSettings> pLAVVideoSettings = pBF) {
CFGFilterLAVVideo::Settings settings;
- if (settings.GetSettings(pLAVFSettings)) { // Get current settings from LAVVideo
+ if (settings.GetSettings(pLAVVideoSettings)) { // Get current settings from LAVVideo
settings.SaveSettings(); // Save them to the registry/ini
}
- } else if (CComQIPtr<ILAVAudioSettings> pLAVFSettings = pBF) {
+ } else if (CComQIPtr<ILAVAudioSettings> pLAVAudioSettings = pBF) {
CFGFilterLAVAudio::Settings settings;
- if (settings.GetSettings(pLAVFSettings)) { // Get current settings from LAVAudio
+ if (settings.GetSettings(pLAVAudioSettings)) { // Get current settings from LAVAudio
settings.SaveSettings(); // Save them to the registry/ini
}
}
@@ -356,7 +352,9 @@ void CFGFilterLAVSplitterBase::Settings::LoadSettings()
bImpairedAudio = pApp->GetProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("ImpairedAudio"), bImpairedAudio);
- dwQueueMaxSize = pApp->GetProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("QueueMaxSize"), dwQueueMaxSize);
+ dwQueueMaxMemSize = pApp->GetProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("QueueMaxSize"), dwQueueMaxMemSize);
+
+ dwQueueMaxPackets = pApp->GetProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("QueueMaxPackets"), dwQueueMaxPackets);
dwNetworkAnalysisDuration = pApp->GetProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("NetworkAnalysisDuration"), dwNetworkAnalysisDuration);
}
@@ -390,7 +388,9 @@ void CFGFilterLAVSplitterBase::Settings::SaveSettings()
pApp->WriteProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("ImpairedAudio"), bImpairedAudio);
- pApp->WriteProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("QueueMaxSize"), dwQueueMaxSize);
+ pApp->WriteProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("QueueMaxSize"), dwQueueMaxMemSize);
+
+ pApp->WriteProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("QueueMaxPackets"), dwQueueMaxPackets);
pApp->WriteProfileInt(IDS_R_INTERNAL_LAVSPLITTER, _T("NetworkAnalysisDuration"), dwNetworkAnalysisDuration);
}
@@ -441,7 +441,9 @@ bool CFGFilterLAVSplitterBase::Settings::GetSettings(CComQIPtr<ILAVFSettings> pL
bPreferHighQualityAudio = pLAVFSettings->GetPreferHighQualityAudioStreams();
- dwQueueMaxSize = pLAVFSettings->GetMaxQueueMemSize();
+ dwQueueMaxMemSize = pLAVFSettings->GetMaxQueueMemSize();
+
+ dwQueueMaxPackets = pLAVFSettings->GetMaxQueueSize();
dwNetworkAnalysisDuration = pLAVFSettings->GetNetworkStreamAnalysisDuration();
@@ -478,7 +480,9 @@ bool CFGFilterLAVSplitterBase::Settings::SetSettings(CComQIPtr<ILAVFSettings> pL
pLAVFSettings->SetPreferHighQualityAudioStreams(bPreferHighQualityAudio);
- pLAVFSettings->SetMaxQueueMemSize(dwQueueMaxSize);
+ pLAVFSettings->SetMaxQueueMemSize(dwQueueMaxMemSize);
+
+ pLAVFSettings->SetMaxQueueSize(dwQueueMaxPackets);
pLAVFSettings->SetNetworkStreamAnalysisDuration(dwNetworkAnalysisDuration);
@@ -556,11 +560,12 @@ void CFGFilterLAVVideo::ShowPropertyPages(CWnd* pParendWnd)
LPCTSTR CFGFilterLAVVideo::GetUserFriendlyDecoderName(const CString& decoderName)
{
static std::pair<LPCTSTR, LPCTSTR> userFriendlyDecoderNames[] = {
- make_pair(_T("avcodec"), _T("FFmpeg")),
- make_pair(_T("dxva2n"), _T("DXVA2 Native")),
- make_pair(_T("dxva2cb"), _T("DXVA2 Copy-back")),
- make_pair(_T("cuvid"), _T("NVIDIA CUVID")),
- make_pair(_T("quicksync"), _T("Intel QuickSync"))
+ std::make_pair(_T("avcodec"), _T("FFmpeg")),
+ std::make_pair(_T("dxva2n"), _T("DXVA2 Native")),
+ std::make_pair(_T("dxva2cb"), _T("DXVA2 Copy-back")),
+ std::make_pair(_T("dxva2cb direct"), _T("DXVA2 Copy-back (Direct)")),
+ std::make_pair(_T("cuvid"), _T("NVIDIA CUVID")),
+ std::make_pair(_T("quicksync"), _T("Intel QuickSync"))
};
for (int i = 0; i < _countof(userFriendlyDecoderNames); i++) {
@@ -604,8 +609,6 @@ void CFGFilterLAVVideo::Settings::LoadSettings()
for (int i = 0; i < LAVOutPixFmt_NB; ++i) {
bPixFmts[i] = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_OUTPUTFORMAT, pixFmtSettingsMap[i], bPixFmts[i]);
}
- // Force disable, for future use
- bPixFmts[LAVOutPixFmt_YV16] = FALSE;
dwHWAccel = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWAccel"), -1);
if (dwHWAccel == DWORD(-1)) {
@@ -642,13 +645,17 @@ void CFGFilterLAVVideo::Settings::LoadSettings()
bHWFormats[HWCodec_HEVC] = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("hevc"), bHWFormats[HWCodec_HEVC]);
+ bHWFormats[HWCodec_VP9] = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("vp9"), bHWFormats[HWCodec_VP9]);
+
dwHWAccelResFlags = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWResFlags"), dwHWAccelResFlags);
dwHWDeintMode = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWDeintMode"), dwHWDeintMode);
dwHWDeintOutput = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWDeintOutput"), dwHWDeintOutput);
- bHWDeintHQ = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWDeintHQ"), bHWDeintHQ);
+ dwHWAccelDeviceDXVA2 = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWAccelDeviceDXVA2"), dwHWAccelDeviceDXVA2);
+
+ dwHWAccelDeviceDXVA2Desc = pApp->GetProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWAccelDeviceDXVA2Desc"), dwHWAccelDeviceDXVA2Desc);
}
void CFGFilterLAVVideo::Settings::SaveSettings()
@@ -692,13 +699,17 @@ void CFGFilterLAVVideo::Settings::SaveSettings()
pApp->WriteProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("hevc"), bHWFormats[HWCodec_HEVC]);
+ pApp->WriteProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("vp9"), bHWFormats[HWCodec_VP9]);
+
pApp->WriteProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWResFlags"), dwHWAccelResFlags);
pApp->WriteProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWDeintMode"), dwHWDeintMode);
pApp->WriteProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWDeintOutput"), dwHWDeintOutput);
- pApp->WriteProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWDeintHQ"), bHWDeintHQ);
+ pApp->WriteProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWAccelDeviceDXVA2"), dwHWAccelDeviceDXVA2);
+
+ pApp->WriteProfileInt(IDS_R_INTERNAL_LAVVIDEO_HWACCEL, _T("HWAccelDeviceDXVA2Desc"), dwHWAccelDeviceDXVA2Desc);
}
bool CFGFilterLAVVideo::Settings::GetSettings(CComQIPtr<ILAVVideoSettings> pLAVFSettings)
@@ -741,7 +752,7 @@ bool CFGFilterLAVVideo::Settings::GetSettings(CComQIPtr<ILAVVideoSettings> pLAVF
dwHWDeintOutput = pLAVFSettings->GetHWAccelDeintOutput();
- bHWDeintHQ = pLAVFSettings->GetHWAccelDeintHQ();
+ dwHWAccelDeviceDXVA2 = pLAVFSettings->GetHWAccelDeviceIndex(HWAccel_DXVA2CopyBack, &dwHWAccelDeviceDXVA2Desc);
return true;
}
@@ -786,17 +797,24 @@ bool CFGFilterLAVVideo::Settings::SetSettings(CComQIPtr<ILAVVideoSettings> pLAVF
pLAVFSettings->SetHWAccelDeintOutput((LAVDeintOutput)dwHWDeintOutput);
- pLAVFSettings->SetHWAccelDeintHQ(bHWDeintHQ);
+ pLAVFSettings->SetHWAccelDeviceIndex(HWAccel_DXVA2CopyBack, dwHWAccelDeviceDXVA2, dwHWAccelDeviceDXVA2Desc);
// Force RV1/2 and v210/v410 enabled, the user can control it from our own options
pLAVFSettings->SetFormatConfiguration(Codec_RV12, TRUE);
pLAVFSettings->SetFormatConfiguration(Codec_v210, TRUE);
+ // Enable Cinepack and QPEG so that they can be used in low-merit mode
+ pLAVFSettings->SetFormatConfiguration(Codec_Cinepak, TRUE);
+ pLAVFSettings->SetFormatConfiguration(Codec_QPEG, TRUE);
// Custom interface available only in patched build, will be removed after it's upstreamed
if (CComQIPtr<ILAVVideoSettingsMPCHCCustom> pLAVFSettingsMPCHCCustom = pLAVFSettings) {
pLAVFSettingsMPCHCCustom->SetPropertyPageCallback(PropertyPageCallback);
}
+ if (AfxGetAppSettings().iLAVGPUDevice != DWORD_MAX) {
+ pLAVFSettings->SetGPUDeviceIndex(AfxGetAppSettings().iLAVGPUDevice);
+ }
+
return true;
}
@@ -875,6 +893,8 @@ void CFGFilterLAVAudio::Settings::LoadSettings()
bOutputStandardLayout = pApp->GetProfileInt(IDS_R_INTERNAL_LAVAUDIO, _T("OutputStandardLayout"), bOutputStandardLayout);
+ bOutput51Legacy = pApp->GetProfileInt(IDS_R_INTERNAL_LAVAUDIO, _T("Output51Legacy"), bOutput51Legacy);
+
bMixingEnabled = pApp->GetProfileInt(IDS_R_INTERNAL_LAVAUDIO, _T("Mixing"), bMixingEnabled);
dwMixingLayout = pApp->GetProfileInt(IDS_R_INTERNAL_LAVAUDIO, _T("MixingLayout"), dwMixingLayout);
@@ -927,6 +947,8 @@ void CFGFilterLAVAudio::Settings::SaveSettings()
pApp->WriteProfileInt(IDS_R_INTERNAL_LAVAUDIO, _T("OutputStandardLayout"), bOutputStandardLayout);
+ pApp->WriteProfileInt(IDS_R_INTERNAL_LAVAUDIO, _T("Output51Legacy"), bOutput51Legacy);
+
pApp->WriteProfileInt(IDS_R_INTERNAL_LAVAUDIO, _T("Mixing"), bMixingEnabled);
pApp->WriteProfileInt(IDS_R_INTERNAL_LAVAUDIO, _T("MixingLayout"), dwMixingLayout);
@@ -978,6 +1000,8 @@ bool CFGFilterLAVAudio::Settings::GetSettings(CComQIPtr<ILAVAudioSettings> pLAVF
bOutputStandardLayout = pLAVFSettings->GetOutputStandardLayout();
+ bOutput51Legacy = pLAVFSettings->GetOutput51LegacyLayout();
+
bMixingEnabled = pLAVFSettings->GetMixingEnabled();
dwMixingLayout = pLAVFSettings->GetMixingLayout();
@@ -1023,6 +1047,8 @@ bool CFGFilterLAVAudio::Settings::SetSettings(CComQIPtr<ILAVAudioSettings> pLAVF
pLAVFSettings->SetOutputStandardLayout(bOutputStandardLayout);
+ pLAVFSettings->SetOutput51LegacyLayout(bOutput51Legacy);
+
pLAVFSettings->SetMixingEnabled(bMixingEnabled);
pLAVFSettings->SetMixingLayout(dwMixingLayout);
diff --git a/src/mpc-hc/FGFilterLAV.h b/src/mpc-hc/FGFilterLAV.h
index dd5a708de..bb979ba42 100644
--- a/src/mpc-hc/FGFilterLAV.h
+++ b/src/mpc-hc/FGFilterLAV.h
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -71,7 +71,7 @@ public:
if (SUCCEEDED(pLAVFilter->Create(&pBF, pUnks))) {
if (CComQIPtr<ISpecifyPropertyPages> pSPP = pBF) {
- CComPropertySheet ps(ResStr(IDS_PROPSHEET_PROPERTIES), pParendWnd);
+ CComPropertySheet ps(IDS_PROPSHEET_PROPERTIES, pParendWnd);
ps.AddPages(pSPP, iIgnoredPage);
ps.DoModal();
@@ -115,7 +115,8 @@ public:
BOOL bStreamSwitchRemoveAudio;
BOOL bImpairedAudio;
BOOL bPreferHighQualityAudio;
- DWORD dwQueueMaxSize;
+ DWORD dwQueueMaxPackets;
+ DWORD dwQueueMaxMemSize;
DWORD dwNetworkAnalysisDuration;
void LoadSettings();
@@ -166,12 +167,13 @@ public:
DWORD dwHWAccelResFlags;
DWORD dwHWDeintMode;
DWORD dwHWDeintOutput;
- BOOL bHWDeintHQ;
DWORD dwDeintFieldOrder;
LAVDeintMode deintMode;
DWORD dwSWDeintMode;
DWORD dwSWDeintOutput;
DWORD dwDitherMode;
+ DWORD dwHWAccelDeviceDXVA2;
+ DWORD dwHWAccelDeviceDXVA2Desc;
void LoadSettings();
void SaveSettings();
@@ -204,6 +206,7 @@ public:
BOOL bExpandMono;
BOOL bExpand61;
BOOL bOutputStandardLayout;
+ BOOL bOutput51Legacy;
BOOL bAllowRawSPDIF;
BOOL bSampleFormats[SampleFormat_NB];
BOOL bSampleConvertDither;
diff --git a/src/mpc-hc/FGManager.cpp b/src/mpc-hc/FGManager.cpp
index 853e73075..065239447 100644
--- a/src/mpc-hc/FGManager.cpp
+++ b/src/mpc-hc/FGManager.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,33 +20,38 @@
*/
#include "stdafx.h"
-#include <mpconfig.h>
-#include "mplayerc.h"
#include "FGManager.h"
-#include "DSUtil.h"
-#include "FileVersionInfo.h"
-#include "WinAPIUtils.h"
+#include "../DeCSS/VobFile.h"
#include "../filters/Filters.h"
-#include "AllocatorCommon7.h"
#include "AllocatorCommon.h"
-#include "SyncAllocatorPresenter.h"
-#include "madVRAllocatorPresenter.h"
#include "DeinterlacerFilter.h"
-#include "../DeCSS/VobFile.h"
-#include <InitGuid.h>
-#include <dmodshow.h>
+#include "FakeFilterMapper2.h"
+#include "FileVersionInfo.h"
+#include "IPinHook.h"
+#include "NullRenderers.h"
+#include "PathUtils.h"
+#include "SyncAllocatorPresenter.h"
+#include "mplayerc.h"
+#include "sanear/sanear/src/Factory.h"
#include <d3d9.h>
-#include <vmr9.h>
#include <evr.h>
#include <evr9.h>
+#include <vmr9.h>
+#include <ks.h>
#include <ksproxy.h>
-#include "IPinHook.h"
+#include <mpconfig.h>
+#include <mvrInterfaces.h>
+
+#include <initguid.h>
#include "moreuuids.h"
+#include <dmodshow.h>
//
// CFGManager
//
+class CNullAudioRenderer;
+
CFGManager::CFGManager(LPCTSTR pName, LPUNKNOWN pUnk)
: CUnknown(pName, pUnk)
, m_dwRegister(0)
@@ -154,7 +159,7 @@ bool CFGManager::CheckBytes(HANDLE hFile, CString chkbytes)
// LAME
while (maskstr.GetLength() < valstr.GetLength()) {
- maskstr += 'F';
+ maskstr += _T('F');
}
CAtlArray<BYTE> mask, val;
@@ -208,20 +213,13 @@ HRESULT CFGManager::EnumSourceFilters(LPCWSTR lpcwstrFileName, CFGFilterList& fl
if (protocol.GetLength() <= 1 || protocol == L"file") {
hFile = CreateFile(CString(fn), GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE)nullptr);
- if (hFile == INVALID_HANDLE_VALUE) {
+ // In case of audio CDs with extra content, the audio tracks
+ // cannot be accessed directly so we have to try opening it
+ if (hFile == INVALID_HANDLE_VALUE && ext != L".cda") {
return VFW_E_NOT_FOUND;
}
}
- // exceptions first
-
- if (ext == _T(".dvr-ms") || ext == _T(".wtv")) { // doh, this is stupid
- fl.Insert(LookupFilterRegistry(CLSID_StreamBufferSource, m_override, MERIT64_PREFERRED), 0);
- }
-
- TCHAR buff[256];
- ULONG len;
-
if (hFile == INVALID_HANDLE_VALUE) {
// internal / protocol
@@ -273,6 +271,9 @@ HRESULT CFGManager::EnumSourceFilters(LPCWSTR lpcwstrFileName, CFGFilterList& fl
}
}
+ TCHAR buff[256];
+ ULONG len;
+
if (hFile == INVALID_HANDLE_VALUE) {
// protocol
@@ -350,7 +351,7 @@ HRESULT CFGManager::EnumSourceFilters(LPCWSTR lpcwstrFileName, CFGFilterList& fl
CRegKey key;
if (ERROR_SUCCESS == key.Open(HKEY_CLASSES_ROOT, _T("Media Type\\Extensions\\") + CString(ext), KEY_READ)) {
- ULONG len = _countof(buff);
+ len = _countof(buff);
ZeroMemory(buff, sizeof(buff));
LONG ret = key.QueryStringValue(_T("Source Filter"), buff, &len); // QueryStringValue can return ERROR_INVALID_DATA on bogus strings (radlight mpc v1003, fixed in v1004)
if (ERROR_SUCCESS == ret || ERROR_INVALID_DATA == ret && GUIDFromCString(buff) != GUID_NULL) {
@@ -429,7 +430,7 @@ HRESULT CFGManager::AddSourceFilter(CFGFilter* pFGF, LPCWSTR lpcwstrFileName, LP
}
// doh :P
- BeginEnumMediaTypes(GetFirstPin(pBF, PINDIR_OUTPUT), pEMT, pmt) {
+ BeginEnumMediaTypes(GetFirstPin(pBF, PINDIR_OUTPUT), pEMT, pmt2) {
static const GUID guid1 =
{ 0x640999A0, 0xA946, 0x11D0, { 0xA5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } };
static const GUID guid2 =
@@ -437,7 +438,7 @@ HRESULT CFGManager::AddSourceFilter(CFGFilter* pFGF, LPCWSTR lpcwstrFileName, LP
static const GUID guid3 =
{ 0xD51BD5AE, 0x7548, 0x11CF, { 0xA5, 0x20, 0x00, 0x80, 0xC7, 0x7E, 0xF5, 0x8A } };
- if (pmt->subtype == guid1 || pmt->subtype == guid2 || pmt->subtype == guid3) {
+ if (pmt2->subtype == guid1 || pmt2->subtype == guid2 || pmt2->subtype == guid3) {
RemoveFilter(pBF);
pFGF = DEBUG_NEW CFGFilterRegistry(CLSID_NetShowSource);
hr = AddSourceFilter(pFGF, lpcwstrFileName, lpcwstrFilterName, ppBF);
@@ -445,7 +446,7 @@ HRESULT CFGManager::AddSourceFilter(CFGFilter* pFGF, LPCWSTR lpcwstrFileName, LP
return hr;
}
}
- EndEnumMediaTypes(pmt);
+ EndEnumMediaTypes(pmt2);
*ppBF = pBF.Detach();
@@ -794,9 +795,9 @@ HRESULT CFGManager::Connect(IPin* pPinOut, IPin* pPinIn, bool bContinueRender)
// maybe the application should do this...
- POSITION pos = pUnks.GetHeadPosition();
- while (pos) {
- if (CComQIPtr<IMixerPinConfig, &IID_IMixerPinConfig> pMPC = pUnks.GetNext(pos)) {
+ POSITION posInterface = pUnks.GetHeadPosition();
+ while (posInterface) {
+ if (CComQIPtr<IMixerPinConfig, &IID_IMixerPinConfig> pMPC = pUnks.GetNext(posInterface)) {
pMPC->SetAspectRatioMode(AM_ARMODE_STRETCHED);
}
}
@@ -1235,7 +1236,7 @@ STDMETHODIMP CFGManager::NukeDownstream(IUnknown* pUnk)
CComPtr<IPin> pPinTo;
if (S_OK == IsPinDirection(pPin, PINDIR_OUTPUT)
&& SUCCEEDED(pPin->ConnectedTo(&pPinTo)) && pPinTo) {
- if (CComPtr<IBaseFilter> pBF = GetFilterFromPin(pPinTo)) {
+ if (pBF = GetFilterFromPin(pPinTo)) {
if (GetCLSID(pBF) == CLSID_EnhancedVideoRenderer) {
// GetFilterFromPin() returns pointer to the Base EVR,
// but we need to remove Outer EVR from the graph.
@@ -1471,6 +1472,13 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
}
#endif
+#if INTERNAL_SOURCEFILTER_WTV
+ if (src[SRC_WTV]) {
+ pFGLAVSplitterSource->m_extensions.AddTail(_T(".wtv"));
+ pFGLAVSplitterSource->AddEnabledFormat("wtv");
+ }
+#endif
+
#if INTERNAL_SOURCEFILTER_MATROSKA
if (src[SRC_MATROSKA]) {
pFGLAVSplitterSource->m_chkbytes.AddTail(_T("0,4,,1A45DFA3"));
@@ -1527,20 +1535,27 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
}
#endif
-#if INTERNAL_SOURCEFILTER_DTSAC3
- if (src[SRC_DTSAC3]) {
- pFGLAVSplitterSource->m_chkbytes.AddTail(_T("0,4,,7FFE8001")); // DTS
- pFGLAVSplitterSource->m_chkbytes.AddTail(_T("0,4,,fE7f0180")); // DTS LE
+#if INTERNAL_SOURCEFILTER_AC3
+ if (src[SRC_AC3]) {
pFGLAVSplitterSource->m_chkbytes.AddTail(_T("0,2,,0B77")); // AC3, E-AC3
- pFGLAVSplitterSource->m_chkbytes.AddTail(_T("0,4,,52494646,8,8,,57415645666D7420"));// RIFFxxxxWAVEfmt_ for DTSWAV
pFGLAVSplitterSource->m_chkbytes.AddTail(_T("4,4,,F8726FBB")); // MLP
pFGLAVSplitterSource->m_extensions.AddTail(_T(".ac3"));
- pFGLAVSplitterSource->m_extensions.AddTail(_T(".dts"));
pFGLAVSplitterSource->m_extensions.AddTail(_T(".eac3"));
pFGLAVSplitterSource->AddEnabledFormat("ac3");
+ pFGLAVSplitterSource->AddEnabledFormat("eac3");
+ }
+#endif
+
+#if INTERNAL_SOURCEFILTER_DTS
+ if (src[SRC_DTS]) {
+ pFGLAVSplitterSource->m_chkbytes.AddTail(_T("0,4,,7FFE8001")); // DTS
+ pFGLAVSplitterSource->m_chkbytes.AddTail(_T("0,4,,fE7f0180")); // DTS LE
+ pFGLAVSplitterSource->m_chkbytes.AddTail(_T("0,4,,52494646,8,8,,57415645666D7420"));// RIFFxxxxWAVEfmt_ for DTSWAV
+ pFGLAVSplitterSource->m_extensions.AddTail(_T(".dts"));
+ pFGLAVSplitterSource->m_extensions.AddTail(_T(".dtshd"));
+ pFGLAVSplitterSource->m_extensions.AddTail(_T(".dtsma"));
pFGLAVSplitterSource->AddEnabledFormat("dts");
pFGLAVSplitterSource->AddEnabledFormat("dtshd");
- pFGLAVSplitterSource->AddEnabledFormat("eac3");
}
#endif
@@ -1555,6 +1570,7 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
#if INTERNAL_SOURCEFILTER_HTTP
if (src[SRC_HTTP]) {
pFGLAVSplitterSource->m_protocols.AddTail(_T("http"));
+ pFGLAVSplitterSource->m_protocols.AddTail(_T("https"));
pFGLAVSplitterSource->m_protocols.AddTail(_T("icyx"));
pFGLAVSplitterSource->AddEnabledFormat("http");
}
@@ -1677,6 +1693,26 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
}
#endif
+#if INTERNAL_SOURCEFILTER_AC3
+ if (src[SRC_AC3]) {
+ pFGLAVSplitter->AddType(MEDIATYPE_Stream, MEDIASUBTYPE_DOLBY_AC3);
+ pFGLAVSplitter->AddType(MEDIATYPE_Stream, MEDIASUBTYPE_DOLBY_TRUEHD);
+ pFGLAVSplitter->AddType(MEDIATYPE_Stream, MEDIASUBTYPE_DOLBY_DDPLUS);
+ pFGLAVSplitter->AddType(MEDIATYPE_Stream, MEDIASUBTYPE_MLP);
+ pFGLAVSplitter->AddEnabledFormat("ac3");
+ pFGLAVSplitter->AddEnabledFormat("eac3");
+ }
+#endif
+
+#if INTERNAL_SOURCEFILTER_DTS
+ if (src[SRC_DTS]) {
+ pFGLAVSplitter->AddType(MEDIATYPE_Stream, MEDIASUBTYPE_DTS);
+ pFGLAVSplitter->AddType(MEDIATYPE_Stream, MEDIASUBTYPE_DTS_HD);
+ pFGLAVSplitter->AddEnabledFormat("dts");
+ pFGLAVSplitter->AddEnabledFormat("dtshd");
+ }
+#endif
+
#if INTERNAL_SOURCEFILTER_MPEGAUDIO
if (src[SRC_MPA]) {
pFGLAVSplitter->AddType(MEDIATYPE_Stream, MEDIASUBTYPE_MPEG1Audio);
@@ -1774,6 +1810,7 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
pFGF->AddType(MEDIATYPE_MPEG2_PACK, MEDIASUBTYPE_DTS);
pFGF->AddType(MEDIATYPE_MPEG2_PES, MEDIASUBTYPE_DTS);
pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_DTS);
+ pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_DTS_HD);
pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_WAVE_DTS);
#endif
@@ -1847,8 +1884,14 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_ALS);
#endif
+#if INTERNAL_DECODER_OPUS
+ pFGF = tra[TRA_OPUS] ? pFGLAVAudio : pFGLAVAudioLM;
+ pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_OPUS);
+#endif
+
#if INTERNAL_DECODER_PCM
pFGF = tra[TRA_PCM] ? pFGLAVAudio : pFGLAVAudioLM;
+ pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_PCM);
pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_PCM_NONE);
pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_PCM_RAW);
pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_PCM_TWOS);
@@ -2079,6 +2122,12 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
pFGF = tra[TRA_FLIC] ? pFGLAVVideo : pFGLAVVideoLM;
pFGF->AddType(MEDIATYPE_Video, MEDIASUBTYPE_FLIC);
#endif
+#if INTERNAL_DECODER_MSVIDEO
+ pFGF = tra[TRA_MSVIDEO] ? pFGLAVVideo : pFGLAVVideoLM;
+ pFGF->AddType(MEDIATYPE_Video, MEDIASUBTYPE_CRAM);
+ pFGF->AddType(MEDIATYPE_Video, MEDIASUBTYPE_WHAM);
+ pFGF->AddType(MEDIATYPE_Video, MEDIASUBTYPE_MSVC);
+#endif
#if INTERNAL_DECODER_V210_V410
pFGF = tra[TRA_V210_V410] ? pFGLAVVideo : pFGLAVVideoLM;
pFGF->AddType(MEDIATYPE_Video, MEDIASUBTYPE_v210);
@@ -2161,14 +2210,35 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
// mainconcept color space converter
m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(GUIDFromCString(_T("{272D77A0-A852-4851-ADA4-9091FEAD4C86}")), MERIT64_DO_NOT_USE));
- // VSFilter blocking routines
- if (s.fBlockVSFilter && s.IsISRAutoLoadEnabled()) {
- // Prevent VSFilter from connecting while the ISR is active
- m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_VSFilter, MERIT64_DO_NOT_USE));
- // Prevent XySubFilter from connecting while the ISR is active
- m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_XySubFilter, MERIT64_DO_NOT_USE));
- // Prevent XySubFilter's loader from connecting while the ISR is active
- m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_XySubFilter_AutoLoader, MERIT64_DO_NOT_USE));
+ if (s.fBlockVSFilter) {
+ switch (s.GetSubtitleRenderer()) {
+ case CAppSettings::SubtitleRenderer::INTERNAL:
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_VSFilter, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_XySubFilter, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_XySubFilter_AutoLoader, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_AssFilter, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_AssFilter_AutoLoader, MERIT64_DO_NOT_USE));
+ break;
+ case CAppSettings::SubtitleRenderer::VS_FILTER:
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_XySubFilter, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_XySubFilter_AutoLoader, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_AssFilter, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_AssFilter_AutoLoader, MERIT64_DO_NOT_USE));
+ break;
+ case CAppSettings::SubtitleRenderer::XY_SUB_FILTER:
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_VSFilter, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_AssFilter, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_AssFilter_AutoLoader, MERIT64_DO_NOT_USE));
+ break;
+ case CAppSettings::SubtitleRenderer::ASS_FILTER:
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_VSFilter, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_XySubFilter, MERIT64_DO_NOT_USE));
+ m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_XySubFilter_AutoLoader, MERIT64_DO_NOT_USE));
+ break;
+ default:
+ ASSERT(FALSE);
+ break;
+ }
}
// Blacklist Accusoft PICVideo M-JPEG Codec 2.1 since causes a DEP crash
@@ -2186,7 +2256,7 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
bOverrideBroadcom = true;
}
- if (fo->fDisabled || fo->type == FilterOverride::EXTERNAL && !CPath(MakeFullPath(fo->path)).FileExists()) {
+ if (fo->fDisabled || fo->type == FilterOverride::EXTERNAL && !PathUtils::Exists(MakeFullPath(fo->path))) {
continue;
}
@@ -2197,7 +2267,7 @@ CFGManagerCustom::CFGManagerCustom(LPCTSTR pName, LPUNKNOWN pUnk)
merit += merit_low++;
- CFGFilter* pFGF = nullptr;
+ pFGF = nullptr;
if (fo->type == FilterOverride::REGISTERED) {
pFGF = DEBUG_NEW CFGFilterRegistry(fo->dispname, merit);
@@ -2255,7 +2325,7 @@ STDMETHODIMP CFGManagerCustom::AddFilter(IBaseFilter* pBF, LPCWSTR pName)
if (GetCLSID(pBF) == CLSID_DMOWrapperFilter) {
if (CComQIPtr<IPropertyBag> pPB = pBF) {
CComVariant var(true);
- pPB->Write(CComBSTR(L"_HIRESOUTPUT"), &var);
+ pPB->Write(_T("_HIRESOUTPUT"), &var);
}
}
@@ -2290,7 +2360,7 @@ CFGManagerPlayer::CFGManagerPlayer(LPCTSTR pName, LPUNKNOWN pUnk, HWND hWnd)
GUID guidsVideo[] = {MEDIATYPE_Video, MEDIASUBTYPE_NULL};
if (SUCCEEDED(m_pFM->EnumMatchingFilters(&pEM, 0, FALSE, MERIT_DO_NOT_USE + 1,
- TRUE, 1, guidsVideo, nullptr, nullptr, TRUE, FALSE, 0, nullptr, nullptr, nullptr))) {
+ TRUE, 1, guidsVideo, nullptr, nullptr, TRUE, FALSE, 0, nullptr, nullptr, nullptr))) {
for (CComPtr<IMoniker> pMoniker; S_OK == pEM->Next(1, &pMoniker, nullptr); pMoniker = nullptr) {
CFGFilterRegistry f(pMoniker);
// RDP DShow Redirection Filter's merit is so high that it flaws the graph building process so we ignore it.
@@ -2309,7 +2379,7 @@ CFGManagerPlayer::CFGManagerPlayer(LPCTSTR pName, LPUNKNOWN pUnk, HWND hWnd)
GUID guidsAudio[] = {MEDIATYPE_Audio, MEDIASUBTYPE_NULL};
if (SUCCEEDED(m_pFM->EnumMatchingFilters(&pEM, 0, FALSE, MERIT_DO_NOT_USE + 1,
- TRUE, 1, guidsAudio, nullptr, nullptr, TRUE, FALSE, 0, nullptr, nullptr, nullptr))) {
+ TRUE, 1, guidsAudio, nullptr, nullptr, TRUE, FALSE, 0, nullptr, nullptr, nullptr))) {
for (CComPtr<IMoniker> pMoniker; S_OK == pEM->Next(1, &pMoniker, nullptr); pMoniker = nullptr) {
CFGFilterRegistry f(pMoniker);
// Use the same RDP DShow Redirection Filter hack with audio, too
@@ -2346,42 +2416,36 @@ CFGManagerPlayer::CFGManagerPlayer(LPCTSTR pName, LPUNKNOWN pUnk, HWND hWnd)
m_transform.AddTail(DEBUG_NEW CFGFilterRegistry(CLSID_VideoRenderer, m_vrmerit));
break;
case VIDRNDT_DS_OVERLAYMIXER:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_OverlayMixer, ResStr(IDS_PPAGE_OUTPUT_OVERLAYMIXER), m_vrmerit));
- break;
- case VIDRNDT_DS_VMR7WINDOWED:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_VideoMixingRenderer, ResStr(IDS_PPAGE_OUTPUT_VMR7WINDOWED), m_vrmerit));
+ m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_OverlayMixer, StrRes(IDS_PPAGE_OUTPUT_OVERLAYMIXER), m_vrmerit));
break;
case VIDRNDT_DS_VMR9WINDOWED:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_VideoMixingRenderer9, ResStr(IDS_PPAGE_OUTPUT_VMR9WINDOWED), m_vrmerit));
- break;
- case VIDRNDT_DS_VMR7RENDERLESS:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_VMR7AllocatorPresenter, ResStr(IDS_PPAGE_OUTPUT_VMR7RENDERLESS), m_vrmerit));
+ m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_VideoMixingRenderer9, StrRes(IDS_PPAGE_OUTPUT_VMR9WINDOWED), m_vrmerit));
break;
case VIDRNDT_DS_VMR9RENDERLESS:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_VMR9AllocatorPresenter, ResStr(IDS_PPAGE_OUTPUT_VMR9RENDERLESS), m_vrmerit));
+ m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_VMR9AllocatorPresenter, StrRes(IDS_PPAGE_OUTPUT_VMR9RENDERLESS), m_vrmerit));
break;
case VIDRNDT_DS_EVR:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_EnhancedVideoRenderer, ResStr(IDS_PPAGE_OUTPUT_EVR), m_vrmerit));
+ m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_EnhancedVideoRenderer, StrRes(IDS_PPAGE_OUTPUT_EVR), m_vrmerit));
break;
case VIDRNDT_DS_EVR_CUSTOM:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_EVRAllocatorPresenter, ResStr(IDS_PPAGE_OUTPUT_EVR_CUSTOM), m_vrmerit));
+ m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_EVRAllocatorPresenter, StrRes(IDS_PPAGE_OUTPUT_EVR_CUSTOM), m_vrmerit));
break;
case VIDRNDT_DS_DXR:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_DXRAllocatorPresenter, ResStr(IDS_PPAGE_OUTPUT_DXR), m_vrmerit));
+ m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_DXRAllocatorPresenter, StrRes(IDS_PPAGE_OUTPUT_DXR), m_vrmerit));
break;
case VIDRNDT_DS_MADVR:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_madVRAllocatorPresenter, ResStr(IDS_PPAGE_OUTPUT_MADVR), m_vrmerit));
+ m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_madVRAllocatorPresenter, StrRes(IDS_PPAGE_OUTPUT_MADVR), m_vrmerit));
break;
case VIDRNDT_DS_SYNC:
- m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_SyncAllocatorPresenter, ResStr(IDS_PPAGE_OUTPUT_SYNC), m_vrmerit));
+ m_transform.AddTail(DEBUG_NEW CFGFilterVideoRenderer(m_hWnd, CLSID_SyncAllocatorPresenter, StrRes(IDS_PPAGE_OUTPUT_SYNC), m_vrmerit));
break;
case VIDRNDT_DS_NULL_COMP:
- pFGF = DEBUG_NEW CFGFilterInternal<CNullVideoRenderer>(ResStr(IDS_PPAGE_OUTPUT_NULL_COMP), MERIT64_ABOVE_DSHOW + 2);
+ pFGF = DEBUG_NEW CFGFilterInternal<CNullVideoRenderer>(StrRes(IDS_PPAGE_OUTPUT_NULL_COMP), MERIT64_ABOVE_DSHOW + 2);
pFGF->AddType(MEDIATYPE_Video, MEDIASUBTYPE_NULL);
m_transform.AddTail(pFGF);
break;
case VIDRNDT_DS_NULL_UNCOMP:
- pFGF = DEBUG_NEW CFGFilterInternal<CNullUVideoRenderer>(ResStr(IDS_PPAGE_OUTPUT_NULL_UNCOMP), MERIT64_ABOVE_DSHOW + 2);
+ pFGF = DEBUG_NEW CFGFilterInternal<CNullUVideoRenderer>(StrRes(IDS_PPAGE_OUTPUT_NULL_UNCOMP), MERIT64_ABOVE_DSHOW + 2);
pFGF->AddType(MEDIATYPE_Video, MEDIASUBTYPE_NULL);
m_transform.AddTail(pFGF);
break;
@@ -2396,8 +2460,16 @@ CFGManagerPlayer::CFGManagerPlayer(LPCTSTR pName, LPUNKNOWN pUnk, HWND hWnd)
pFGF = DEBUG_NEW CFGFilterInternal<CNullUAudioRenderer>(AUDRNDT_NULL_UNCOMP, MERIT64_ABOVE_DSHOW + 2);
pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_NULL);
m_transform.AddTail(pFGF);
- } else if (SelAudioRenderer == AUDRNDT_MPC) {
- pFGF = DEBUG_NEW CFGFilterInternal<CMpcAudioRenderer>(AUDRNDT_MPC, MERIT64_ABOVE_DSHOW + 2);
+ } else if (SelAudioRenderer == AUDRNDT_INTERNAL) {
+ struct SaneAudioRendererFilter : CFGFilter {
+ SaneAudioRendererFilter(CStringW name, UINT64 merit) :
+ CFGFilter(SaneAudioRenderer::Factory::GetFilterGuid(), name, merit) {}
+
+ HRESULT Create(IBaseFilter** ppBF, CInterfaceList<IUnknown, &IID_IUnknown>&) override {
+ return SaneAudioRenderer::Factory::CreateFilter(AfxGetAppSettings().sanear, ppBF);
+ }
+ };
+ pFGF = DEBUG_NEW SaneAudioRendererFilter(AUDRNDT_INTERNAL, m_armerit + 0x99);
pFGF->AddType(MEDIATYPE_Audio, MEDIASUBTYPE_NULL);
m_transform.AddTail(pFGF);
} else if (!SelAudioRenderer.IsEmpty()) {
diff --git a/src/mpc-hc/FGManagerBDA.cpp b/src/mpc-hc/FGManagerBDA.cpp
index a576b3a1e..0c48d65c4 100644
--- a/src/mpc-hc/FGManagerBDA.cpp
+++ b/src/mpc-hc/FGManagerBDA.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -19,26 +19,21 @@
*/
#include "stdafx.h"
-
-#include <ks.h>
-#include <ksmedia.h>
-#include "BaseClasses/streams.h"
-#include <mpeg2data.h>
-#include <tuner.h>
-#include <time.h>
-#include <dvbsiparser.h>
-
-#include "DSUtil.h"
-#include "GolombBuffer.h"
-#include "../filters/switcher/AudioSwitcher/AudioSwitcher.h"
-#include "moreuuids.h"
-#include "mplayerc.h"
#include "FGManagerBDA.h"
-#include "DVBChannel.h"
#include "Mpeg2SectionData.h"
#include "MainFrm.h"
-#include "SysVersion.h"
+#include "Logger.h"
+#include <ISOLang.h>
+#include <SysVersion.h>
+#include <moreuuids.h>
+#include <dvdmedia.h>
+#include <ks.h>
+#include <ksmedia.h>
+#include <bdamedia.h>
+#define LOG(...) MPCHC_LOG(BDA, __VA_ARGS__)
+#define CheckAndLogBDA(x, msg) hr = ##x; if (FAILED(hr)) { LOG(msg _T(": 0x%08x\n"), hr); return hr; }
+#define CheckAndLogBDANoRet(x, msg) hr = ##x; if (FAILED(hr)) { LOG(msg _T(": 0x%08x\n"), hr); }
/// Format, Video MPEG2
static VIDEOINFOHEADER2 sMpv_fmt = {
@@ -66,7 +61,7 @@ static VIDEOINFOHEADER2 sMpv_fmt = {
};
/// Media type, Video MPEG2
-static AM_MEDIA_TYPE mt_Mpv = {
+static const AM_MEDIA_TYPE mt_Mpv = {
MEDIATYPE_Video, // majortype
MEDIASUBTYPE_MPEG2_VIDEO, // subtype
FALSE, // bFixedSizeSamples
@@ -78,8 +73,6 @@ static AM_MEDIA_TYPE mt_Mpv = {
(LPBYTE)& sMpv_fmt // pbFormat
};
-#define FCC_h264 MAKEFOURCC('h', '2', '6', '4')
-
/// Format, Video H264
static VIDEOINFOHEADER2 vih2_H264 = {
{0, 0, 0, 0}, // rcSource
@@ -95,20 +88,18 @@ static VIDEOINFOHEADER2 vih2_H264 = {
0, // dwReserved2
{
// bmiHeader
- sizeof(BITMAPINFOHEADER), // biSize
- //720, // biWidth
- //576, // biHeight
- 1920, // biWidth
- 1080, // biHeight
- 1, // biPlanes
- 0, // biBitCount
- FCC_h264 // biCompression
+ sizeof(BITMAPINFOHEADER), // biSize
+ 720, // biWidth
+ 576, // biHeight
+ 1, // biPlanes
+ 0, // biBitCount
+ MAKEFOURCC('h', '2', '6', '4') // biCompression
}
// implicitly sets the others fields to 0
};
/// Media type, Video H264
-static AM_MEDIA_TYPE mt_H264 = {
+static const AM_MEDIA_TYPE mt_H264 = {
MEDIATYPE_Video, // majortype
MEDIASUBTYPE_H264, // subtype
FALSE, // bFixedSizeSamples
@@ -120,15 +111,81 @@ static AM_MEDIA_TYPE mt_H264 = {
(LPBYTE)& vih2_H264 // pbFormat
};
-/// Format, Audio (common)
-static const WAVEFORMATEX wf_Audio = {
- WAVE_FORMAT_PCM, // wFormatTag
- 2, // nChannels
- 48000, // nSamplesPerSec
- 4 * 48000, // nAvgBytesPerSec
- 4, // nBlockAlign
- 16, // wBitsPerSample
- 0 // cbSize
+/// Format, Video HEVC
+static VIDEOINFOHEADER2 vih2_HEVC = {
+ {0, 0, 0, 0}, // rcSource
+ {0, 0, 0, 0}, // rcTarget
+ 0, // dwBitRate,
+ 0, // dwBitErrorRate
+ 0, // AvgTimePerFrame
+ 0, // dwInterlaceFlags
+ 0, // dwCopyProtectFlags
+ 0, // dwPictAspectRatioX
+ 0, // dwPictAspectRatioY
+ {0}, // dwControlFlag & dwReserved1
+ 0, // dwReserved2
+ {
+ // bmiHeader
+ sizeof(BITMAPINFOHEADER), // biSize
+ 720, // biWidth
+ 576, // biHeight
+ 1, // biPlanes
+ 0, // biBitCount
+ MAKEFOURCC('H', 'E', 'V', 'C') // biCompression
+ }
+ // implicitly sets the others fields to 0
+};
+
+/// Media type, Video HEVC
+static const AM_MEDIA_TYPE mt_HEVC = {
+ MEDIATYPE_Video, // majortype
+ MEDIASUBTYPE_HEVC, // subtype
+ FALSE, // bFixedSizeSamples
+ TRUE, // bTemporalCompression
+ 0, // lSampleSize
+ FORMAT_VideoInfo2, // formattype
+ nullptr, // pUnk
+ sizeof(vih2_HEVC), // cbFormat
+ (LPBYTE)& vih2_HEVC // pbFormat
+};
+
+// Format, Audio MPEG2
+static BYTE MPEG2AudioFormat[] = {
+ 0x50, 0x00, //wFormatTag
+ 0x02, 0x00, //nChannels
+ 0x80, 0xbb, 0x00, 0x00, //nSamplesPerSec
+ 0x00, 0x7d, 0x00, 0x00, //nAvgBytesPerSec
+ 0x01, 0x00, //nBlockAlign
+ 0x00, 0x00, //wBitsPerSample
+ 0x16, 0x00, //cbSize
+ 0x02, 0x00, //wValidBitsPerSample
+ 0x00, 0xe8, //wSamplesPerBlock
+ 0x03, 0x00, //wReserved
+ 0x01, 0x00, 0x01, 0x00, //dwChannelMask
+ 0x01, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+// Format, Audio (E)AC3
+static BYTE AC3AudioFormat[] = {
+ 0x00, 0x20, //wFormatTag
+ 0x06, 0x00, //nChannels
+ 0x80, 0xBB, 0x00, 0x00, //nSamplesPerSec
+ 0xC0, 0x5D, 0x00, 0x00, //nAvgBytesPerSec
+ 0x00, 0x03, //nBlockAlign
+ 0x00, 0x00, //wBitsPerSample
+ 0x00, 0x00 //cbSize
+};
+
+// Format, Audio AAC
+static BYTE AACAudioFormat[] = {
+ 0xFF, 0x00, //wFormatTag
+ 0x02, 0x00, //nChannels
+ 0x80, 0xBB, 0x00, 0x00, //nSamplesPerSec
+ 0xCE, 0x3E, 0x00, 0x00, //nAvgBytesPerSec
+ 0xAE, 0x02, //nBlockAlign
+ 0x00, 0x00, //wBitsPerSample
+ 0x02, 0x00, //cbSize
+ 0x11, 0x90
};
/// Media type, Audio MPEG2
@@ -140,8 +197,8 @@ static const AM_MEDIA_TYPE mt_Mpa = {
0, // lSampleSize
FORMAT_WaveFormatEx, // formattype
nullptr, // pUnk
- sizeof(wf_Audio), // cbFormat
- (LPBYTE)& wf_Audio // pbFormat
+ sizeof(MPEG2AudioFormat), // cbFormat
+ MPEG2AudioFormat // pbFormat
};
/// Media type, Audio AC3
@@ -153,8 +210,8 @@ static const AM_MEDIA_TYPE mt_Ac3 = {
0, // lSampleSize
FORMAT_WaveFormatEx, // formattype
nullptr, // pUnk
- sizeof(wf_Audio), // cbFormat
- (LPBYTE)& wf_Audio, // pbFormat
+ sizeof(AC3AudioFormat), // cbFormat
+ AC3AudioFormat, // pbFormat
};
/// Media type, Audio EAC3
@@ -166,8 +223,8 @@ static const AM_MEDIA_TYPE mt_Eac3 = {
0, // lSampleSize
FORMAT_WaveFormatEx, // formattype
nullptr, // pUnk
- sizeof(wf_Audio), // cbFormat
- (LPBYTE)& wf_Audio, // pbFormat
+ sizeof(AC3AudioFormat), // cbFormat
+ AC3AudioFormat, // pbFormat
};
/// Media type, Audio AAC LATM
@@ -179,8 +236,8 @@ static const AM_MEDIA_TYPE mt_latm = {
0, // lSampleSize
FORMAT_WaveFormatEx, // formattype
nullptr, // pUnk
- sizeof(wf_Audio), // cbFormat
- (LPBYTE)& wf_Audio, // pbFormat
+ sizeof(AACAudioFormat), // cbFormat
+ AACAudioFormat, // pbFormat
};
/// Media type, PSI
@@ -252,7 +309,7 @@ static const AM_MEDIA_TYPE mt_Subtitle = {
/// CLSID for TIF
// FC772AB0-0C7F-11D3-8FF2-00A0C9224CF4
-static CLSID CLSID_BDA_MPEG2_TIF =
+static const CLSID CLSID_BDA_MPEG2_TIF =
{0xFC772AB0, 0x0C7F, 0x11D3, {0x8F, 0xF2, 0x00, 0xA0, 0xC9, 0x22, 0x4C, 0xF4}};
CFGManagerBDA::CFGManagerBDA(LPCTSTR pName, LPUNKNOWN pUnk, HWND hWnd)
@@ -268,6 +325,8 @@ CFGManagerBDA::CFGManagerBDA(LPCTSTR pName, LPUNKNOWN pUnk, HWND hWnd)
if (pChannel) {
if (pChannel->GetVideoType() == DVB_H264) {
UpdateMediaType(&vih2_H264, pChannel);
+ } else if (pChannel->GetVideoType() == DVB_HEVC) {
+ UpdateMediaType(&vih2_HEVC, pChannel);
} else if (pChannel->GetVideoType() == DVB_MPV) {
UpdateMediaType(&sMpv_fmt, pChannel);
}
@@ -275,6 +334,7 @@ CFGManagerBDA::CFGManagerBDA(LPCTSTR pName, LPUNKNOWN pUnk, HWND hWnd)
m_DVBStreams[DVB_MPV] = CDVBStream(L"mpv", &mt_Mpv);
m_DVBStreams[DVB_H264] = CDVBStream(L"h264", &mt_H264);
+ m_DVBStreams[DVB_HEVC] = CDVBStream(L"HEVC", &mt_HEVC);
m_DVBStreams[DVB_MPA] = CDVBStream(L"mpa", &mt_Mpa);
m_DVBStreams[DVB_AC3] = CDVBStream(L"ac3", &mt_Ac3);
m_DVBStreams[DVB_EAC3] = CDVBStream(L"eac3", &mt_Eac3);
@@ -328,11 +388,11 @@ HRESULT CFGManagerBDA::CreateKSFilter(IBaseFilter** ppBF, CLSID KSCategory, cons
BeginEnumSysDev(KSCategory, pMoniker) {
CComPtr<IPropertyBag> pPB;
CComVariant var;
- LPOLESTR strName = nullptr;
+ CComHeapPtr<OLECHAR> strName;
if (SUCCEEDED(pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB))) &&
SUCCEEDED(pMoniker->GetDisplayName(nullptr, nullptr, &strName)) &&
- SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
- CStringW Name = CStringW(strName);
+ SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
+ CStringW Name = strName;
if (Name != DisplayName) {
continue;
}
@@ -343,10 +403,6 @@ HRESULT CFGManagerBDA::CreateKSFilter(IBaseFilter** ppBF, CLSID KSCategory, cons
}
break;
}
-
- if (strName) {
- CoTaskMemFree(strName);
- }
}
EndEnumSysDev;
@@ -393,24 +449,29 @@ HRESULT CFGManagerBDA::ConnectFilters(IBaseFilter* pOutFilter, IBaseFilter* pInF
BeginEnumPins(pOutFilter, pEP, pOutPin) {
if (S_OK == IsPinDirection(pOutPin, PINDIR_OUTPUT)
&& S_OK != IsPinConnected(pOutPin)) {
- BeginEnumPins(pInFilter, pEP, pInPin) {
+ BeginEnumPins(pInFilter, pEP2, pInPin) {
if (S_OK == IsPinDirection(pInPin, PINDIR_INPUT)
&& S_OK != IsPinConnected(pInPin)) {
hr = this->ConnectDirect(pOutPin, pInPin, nullptr);
- /*#ifdef _DEBUG
- PIN_INFO InfoPinIn, InfoPinOut;
- FILTER_INFO InfoFilterIn, InfoFilterOut;
- pInPin->QueryPinInfo (&InfoPinIn);
- pOutPin->QueryPinInfo (&InfoPinOut);
- InfoPinIn.pFilter->QueryFilterInfo(&InfoFilterIn);
- InfoPinOut.pFilter->QueryFilterInfo(&InfoFilterOut);
+#if 0 && defined(_DEBUG) // Disabled by default because it can be verbose
+ CPinInfo infoPinIn, infoPinOut;
+ infoPinIn.achName[0] = infoPinOut.achName[0] = L'\0';
+ CFilterInfo infoFilterIn, infoFilterOut;
+ infoFilterIn.achName[0] = infoFilterOut.achName[0] = L'\0';
- TRACE(_T("%s - %s => %s - %s (hr=0x%08x)\n"), InfoFilterOut.achName, InfoPinOut.achName, InfoFilterIn.achName, InfoPinIn.achName, hr);
+ pInPin->QueryPinInfo(&infoPinIn);
+ if (infoPinIn.pFilter) {
+ infoPinIn.pFilter->QueryFilterInfo(&infoFilterIn);
+ }
+ pOutPin->QueryPinInfo(&infoPinOut);
+ if (infoPinOut.pFilter) {
+ infoPinOut.pFilter->QueryFilterInfo(&infoFilterOut);
+ }
+
+ TRACE(_T("%s - %s => %s - %s (hr=0x%08x)\n"), infoFilterOut.achName, infoPinOut.achName, infoFilterIn.achName, infoPinIn.achName, hr);
+#endif
- InfoPinIn.pFilter->Release();
- InfoPinOut.pFilter->Release();
- #endif*/
if (SUCCEEDED(hr)) {
return hr;
}
@@ -433,7 +494,7 @@ STDMETHODIMP CFGManagerBDA::RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayL
CComPtr<IBaseFilter> pReceiver;
LOG(_T("Creating BDA filters..."));
- CheckAndLog(CreateKSFilter(&pNetwork, KSCATEGORY_BDA_NETWORK_PROVIDER, s.strBDANetworkProvider), _T("BDA: Network provider creation"));
+ CheckAndLogBDA(CreateKSFilter(&pNetwork, KSCATEGORY_BDA_NETWORK_PROVIDER, s.strBDANetworkProvider), _T("Network provider creation"));
if (FAILED(hr = CreateKSFilter(&pTuner, KSCATEGORY_BDA_NETWORK_TUNER, s.strBDATuner))) {
MessageBox(AfxGetMyApp()->GetMainWnd()->m_hWnd, ResStr(IDS_BDA_ERROR_CREATE_TUNER), ResStr(IDS_BDA_ERROR), MB_ICONERROR | MB_OK);
TRACE(_T("BDA: Network tuner creation: 0x%08x\n"), hr);
@@ -545,9 +606,10 @@ STDMETHODIMP CFGManagerBDA::SetChannel(int nChannelPrefNumber)
CDVBChannel* pChannel = s.FindChannelByPref(nChannelPrefNumber);
LOG(_T("Start SetChannel %d."), nChannelPrefNumber);
if (pChannel) {
- if ((m_nDVBRebuildFilterGraph == DVB_REBUILD_FG_NEVER) ||
- ((m_nDVBRebuildFilterGraph == DVB_REBUILD_FG_WHEN_SWITCHING) && (m_nCurVideoType == pChannel->GetVideoType())) ||
- ((m_nDVBRebuildFilterGraph == DVB_REBUILD_FG_ALWAYS) && (s.nDVBLastChannel == nChannelPrefNumber))) {
+ if (!((m_nCurAudioType == DVB_UNKNOWN) ^ (pChannel->GetDefaultAudioType() == DVB_UNKNOWN)) &&
+ ((m_nDVBRebuildFilterGraph == DVB_REBUILD_FG_NEVER) ||
+ ((m_nDVBRebuildFilterGraph == DVB_REBUILD_FG_WHEN_SWITCHING) && (m_nCurVideoType == pChannel->GetVideoType())) ||
+ ((m_nDVBRebuildFilterGraph == DVB_REBUILD_FG_ALWAYS) && (s.nDVBLastChannel == nChannelPrefNumber)))) {
hr = SetChannelInternal(pChannel);
} else {
s.nDVBLastChannel = nChannelPrefNumber;
@@ -571,34 +633,33 @@ STDMETHODIMP CFGManagerBDA::SetAudio(int nAudioIndex)
return E_NOTIMPL;
}
-STDMETHODIMP CFGManagerBDA::SetFrequency(ULONG freq)
+STDMETHODIMP CFGManagerBDA::SetFrequency(ULONG ulFrequency, ULONG ulBandwidth)
{
HRESULT hr;
- const CAppSettings& s = AfxGetAppSettings();
- LOG(_T("SetFrequency to %u."), freq);
+ LOG(_T("Frequency %lu, Bandwidth %lu"), ulFrequency, ulBandwidth);
CheckPointer(m_pBDAControl, E_FAIL);
CheckPointer(m_pBDAFreq, E_FAIL);
- CheckAndLog(m_pBDAControl->StartChanges(), _T("BDA: SetFrequency StartChanges"));
- m_pBDAFreq->put_FrequencyMultiplier(1000);
- CheckAndLog(m_pBDAFreq->put_Bandwidth(s.iBDABandwidth), _T("BDA: SetFrequency put_Bandwidth"));
- CheckAndLog(m_pBDAFreq->put_Frequency(freq), _T("BDA: SetFrequency put_Frequency"));
- CheckAndLog(m_pBDAControl->CheckChanges(), _T("BDA: SetFrequency CheckChanges"));
- CheckAndLog(m_pBDAControl->CommitChanges(), _T("BDA: SetFrequency CommitChanges"));
+ CheckAndLogBDA(m_pBDAControl->StartChanges(), _T(" SetFrequency StartChanges"));
+ CheckAndLogBDANoRet(m_pBDAFreq->put_FrequencyMultiplier(1000), _T(" SetFrequency put_FrequencyMultiplier"));
+ CheckAndLogBDANoRet(m_pBDAFreq->put_Bandwidth(ulBandwidth / 1000), _T(" SetFrequency put_Bandwidth"));
+ CheckAndLogBDA(m_pBDAFreq->put_Frequency(ulFrequency), _T(" SetFrequency put_Frequency"));
+ CheckAndLogBDA(m_pBDAControl->CheckChanges(), _T(" SetFrequency CheckChanges"));
+ CheckAndLogBDA(m_pBDAControl->CommitChanges(), _T(" SetFrequency CommitChanges"));
int i = 50;
ULONG pState = BDA_CHANGES_PENDING;
while (SUCCEEDED(hr = m_pBDAControl->GetChangeState(&pState)) && pState == BDA_CHANGES_PENDING && i-- > 0) {
- LOG(_T("SetFrequency changes pending, waiting for tuner..."));
+ LOG(_T("changes pending, waiting for tuner..."));
Sleep(50);
}
if (SUCCEEDED(hr)) {
if (pState == BDA_CHANGES_PENDING) {
- LOG(_T("SetFrequency changes pending (timeout error----)"));
+ LOG(_T("changes pending (timeout error----)"));
hr = VFW_E_TIMEOUT;
} else {
- LOG(_T("Frequency set to %u."), freq);
+ LOG(_T("Frequency changed: %lu / %lu."), ulFrequency, ulBandwidth);
#ifdef _DEBUG
BOOLEAN bPresent;
BOOLEAN bLocked;
@@ -627,6 +688,9 @@ HRESULT CFGManagerBDA::ClearMaps()
if (m_DVBStreams[DVB_H264].GetMappedPID()) {
CheckNoLog(m_DVBStreams[DVB_H264].Unmap(m_DVBStreams[DVB_H264].GetMappedPID()));
}
+ if (m_DVBStreams[DVB_HEVC].GetMappedPID()) {
+ CheckNoLog(m_DVBStreams[DVB_HEVC].Unmap(m_DVBStreams[DVB_HEVC].GetMappedPID()));
+ }
if (m_DVBStreams[DVB_MPA].GetMappedPID()) {
CheckNoLog(m_DVBStreams[DVB_MPA].Unmap(m_DVBStreams[DVB_MPA].GetMappedPID()));
}
@@ -646,18 +710,18 @@ HRESULT CFGManagerBDA::ClearMaps()
return hr;
}
-STDMETHODIMP CFGManagerBDA::Scan(ULONG ulFrequency, HWND hWnd)
+STDMETHODIMP CFGManagerBDA::Scan(ULONG ulFrequency, ULONG ulBandwidth, HWND hWnd)
{
HRESULT hr = S_OK;
- if (ulFrequency == 0) {
+ if (ulFrequency == 0 || ulBandwidth == 0) {
ClearMaps();
} else {
CMpeg2DataParser Parser(m_DVBStreams[DVB_PSI].GetFilter());
LOG(_T("Scanning frequency %u.........."), ulFrequency);
- if (FAILED(hr = Parser.ParseSDT(ulFrequency))) {
+ if (FAILED(hr = Parser.ParseSDT(ulFrequency, ulBandwidth))) {
LOG(_T("ParseSDT failed. Result: 0x%08x."), hr);
} else if (FAILED(hr = Parser.ParsePAT())) {
LOG(_T("ParsePAT failed. Result: 0x%08x."), hr);
@@ -727,21 +791,21 @@ STDMETHODIMP CFGManagerBDA::Enable(long lIndex, DWORD dwFlags)
if (lIndex >= 0 && lIndex < pChannel->GetAudioCount()) {
DVBStreamInfo* pStreamInfo = pChannel->GetAudio(lIndex);
if (pStreamInfo) {
- CDVBStream* pStream = &m_DVBStreams[pStreamInfo->Type];
+ CDVBStream* pStream = &m_DVBStreams[pStreamInfo->nType];
if (pStream) {
if (pStream->GetMappedPID()) {
pStream->Unmap(pStream->GetMappedPID());
}
FILTER_STATE nState = GetState();
- if (m_nCurAudioType != pStreamInfo->Type) {
+ if (m_nCurAudioType != pStreamInfo->nType) {
if ((s.nDVBStopFilterGraph == DVB_STOP_FG_ALWAYS) && (GetState() != State_Stopped)) {
ChangeState(State_Stopped);
}
- SwitchStream(m_nCurAudioType, pStreamInfo->Type);
- m_nCurAudioType = pStreamInfo->Type;
+ SwitchStream(m_nCurAudioType, pStreamInfo->nType);
+ m_nCurAudioType = pStreamInfo->nType;
CheckNoLog(Flush(m_nCurVideoType, m_nCurAudioType));
}
- pStream->Map(pStreamInfo->PID);
+ pStream->Map(pStreamInfo->ulPID);
ChangeState((FILTER_STATE)nState);
hr = S_OK;
@@ -755,7 +819,7 @@ STDMETHODIMP CFGManagerBDA::Enable(long lIndex, DWORD dwFlags)
DVBStreamInfo* pStreamInfo = pChannel->GetSubtitle(lIndex - pChannel->GetAudioCount());
if (pStreamInfo) {
- m_DVBStreams[DVB_SUB].Map(pStreamInfo->PID);
+ m_DVBStreams[DVB_SUB].Map(pStreamInfo->ulPID);
hr = S_OK;
}
} else if (lIndex > 0 && m_DVBStreams[DVB_SUB].GetMappedPID() && lIndex == pChannel->GetAudioCount() + pChannel->GetSubtitleCount()) {
@@ -783,7 +847,7 @@ STDMETHODIMP CFGManagerBDA::Info(long lIndex, AM_MEDIA_TYPE** ppmt, DWORD* pdwFl
pCurrentStream = &m_DVBStreams[m_nCurAudioType];
pStreamInfo = pChannel->GetAudio(lIndex);
if (pStreamInfo) {
- pStream = &m_DVBStreams[pStreamInfo->Type];
+ pStream = &m_DVBStreams[pStreamInfo->nType];
}
if (pdwGroup) {
*pdwGroup = 1; // Audio group
@@ -792,7 +856,7 @@ STDMETHODIMP CFGManagerBDA::Info(long lIndex, AM_MEDIA_TYPE** ppmt, DWORD* pdwFl
pCurrentStream = &m_DVBStreams[DVB_SUB];
pStreamInfo = pChannel->GetSubtitle(lIndex - pChannel->GetAudioCount());
if (pStreamInfo) {
- pStream = &m_DVBStreams[pStreamInfo->Type];
+ pStream = &m_DVBStreams[pStreamInfo->nType];
}
if (pdwGroup) {
*pdwGroup = 2; // Subtitle group
@@ -830,7 +894,7 @@ STDMETHODIMP CFGManagerBDA::Info(long lIndex, AM_MEDIA_TYPE** ppmt, DWORD* pdwFl
*ppmt = CreateMediaType(pStream->GetMediaType());
}
if (pdwFlags) {
- *pdwFlags = (pCurrentStream->GetMappedPID() == pStreamInfo->PID) ? AMSTREAMSELECTINFO_ENABLED | AMSTREAMSELECTINFO_EXCLUSIVE : 0;
+ *pdwFlags = (pCurrentStream->GetMappedPID() == pStreamInfo->ulPID) ? AMSTREAMSELECTINFO_ENABLED | AMSTREAMSELECTINFO_EXCLUSIVE : 0;
}
if (plcid) {
*plcid = pStreamInfo->GetLCID();
@@ -844,11 +908,11 @@ STDMETHODIMP CFGManagerBDA::Info(long lIndex, AM_MEDIA_TYPE** ppmt, DWORD* pdwFl
if (ppszName) {
CStringW str;
- str = StreamTypeToName(pStreamInfo->PesType);
+ str = StreamTypeToName(pStreamInfo->nPesType);
- if (!pStreamInfo->Language.IsEmpty() && pStreamInfo->GetLCID() == 0) {
+ if (!pStreamInfo->sLanguage.IsEmpty() && pStreamInfo->GetLCID() == 0) {
// Try to convert language code even if LCID was not found.
- str += _T(" [") + ISO6392ToLanguage(CStringA(pStreamInfo->Language)) + _T("]");
+ str += _T(" [") + ISOLang::ISO6392ToLanguage(CStringA(pStreamInfo->sLanguage)) + _T("]");
}
*ppszName = (WCHAR*)CoTaskMemAlloc((str.GetLength() + 1) * sizeof(WCHAR));
@@ -891,7 +955,7 @@ HRESULT CFGManagerBDA::CreateMicrosoftDemux(CComPtr<IBaseFilter>& pMpeg2Demux)
CDVBChannel* pChannel = s.FindChannelByPref(s.nDVBLastChannel);
if (pChannel && (m_nDVBRebuildFilterGraph == DVB_REBUILD_FG_ALWAYS)) {
for (int i = 0; i < pChannel->GetAudioCount(); i++) {
- switch ((pChannel->GetAudio(i))->Type) {
+ switch ((pChannel->GetAudio(i))->nType) {
case DVB_MPA:
bAudioMPA = true;
break;
@@ -933,6 +997,7 @@ HRESULT CFGManagerBDA::CreateMicrosoftDemux(CComPtr<IBaseFilter>& pMpeg2Demux)
case DVB_MPV:
case DVB_H264:
+ case DVB_HEVC:
if ((nType == m_nCurVideoType) || (m_nDVBRebuildFilterGraph == DVB_REBUILD_FG_NEVER)) {
if (!Stream.GetFindExisting() ||
(pPin = FindPin(pMpeg2Demux, PINDIR_OUTPUT, Stream.GetMediaType())) == nullptr) {
@@ -980,7 +1045,8 @@ HRESULT CFGManagerBDA::CreateMicrosoftDemux(CComPtr<IBaseFilter>& pMpeg2Demux)
CheckNoLog(Connect(pPin, nullptr, false));
CComPtr<IPin> pPinTo;
pPin->ConnectedTo(&pPinTo);
- if (SUCCEEDED(hr = ((CMainFrame*)AfxGetMainWnd())->InsertTextPassThruFilter(pMpeg2Demux, pPin, pPinTo))) {
+ CMainFrame* pMainFrame = dynamic_cast<CMainFrame*>(AfxGetApp()->GetMainWnd());
+ if (pMainFrame && SUCCEEDED(hr = pMainFrame->InsertTextPassThruFilter(pMpeg2Demux, pPin, pPinTo))) {
Stream.SetPin(pPin);
LOG(_T("Filter connected to Demux for media type %d."), nType);
} else {
@@ -1013,6 +1079,9 @@ HRESULT CFGManagerBDA::SetChannelInternal(CDVBChannel* pChannel)
if (pChannel->GetVideoType() == DVB_H264) {
UpdateMediaType(&vih2_H264, pChannel);
hr = pDemux->SetOutputPinMediaType(L"h264", const_cast<AM_MEDIA_TYPE*>(&mt_H264));
+ } else if (pChannel->GetVideoType() == DVB_HEVC) {
+ UpdateMediaType(&vih2_HEVC, pChannel);
+ hr = pDemux->SetOutputPinMediaType(L"HEVC", const_cast<AM_MEDIA_TYPE*>(&mt_HEVC));
} else {
UpdateMediaType(&sMpv_fmt, pChannel);
hr = pDemux->SetOutputPinMediaType(L"mpv", const_cast<AM_MEDIA_TYPE*>(&mt_Mpv));
@@ -1032,7 +1101,6 @@ HRESULT CFGManagerBDA::SetChannelInternal(CDVBChannel* pChannel)
}
} else {
m_fHideWindow = true;
- ((CMainFrame*)AfxGetMainWnd())->HideVideoWindow(m_fHideWindow);
}
if (m_nCurAudioType != pChannel->GetDefaultAudioType()) {
@@ -1046,7 +1114,7 @@ HRESULT CFGManagerBDA::SetChannelInternal(CDVBChannel* pChannel)
CheckNoLog(ChangeState(State_Running));
}
- CheckNoLog(SetFrequency(pChannel->GetFrequency()));
+ CheckNoLog(SetFrequency(pChannel->GetFrequency(), pChannel->GetBandwidth()));
CheckNoLog(Flush(pChannel->GetVideoType(), pChannel->GetDefaultAudioType()));
@@ -1060,7 +1128,8 @@ HRESULT CFGManagerBDA::SetChannelInternal(CDVBChannel* pChannel)
CheckNoLog(m_DVBStreams[DVB_SUB].Map(pChannel->GetDefaultSubtitlePID()));
}
LOG(_T("Stream maps:"));
- LOG(_T("Mapped PID MPEG-2: %u, Mapped PID H.264: %u."), m_DVBStreams[DVB_MPV].GetMappedPID(), m_DVBStreams[DVB_H264].GetMappedPID());
+ LOG(_T("Mapped PID MPEG-2: %u, Mapped PID H.264: %u, Mapped PID HEVC: %u."),
+ m_DVBStreams[DVB_MPV].GetMappedPID(), m_DVBStreams[DVB_H264].GetMappedPID(), m_DVBStreams[DVB_HEVC].GetMappedPID());
LOG(_T("Mapped PID MPA: %u, Mapped PID AC3: %u, Mapped PID EAC3: %u, Mapped PID AAC-LATM: %u."), m_DVBStreams[DVB_MPA].GetMappedPID(),
m_DVBStreams[DVB_AC3].GetMappedPID(), m_DVBStreams[DVB_EAC3].GetMappedPID(), m_DVBStreams[DVB_LATM].GetMappedPID());
LOG(_T("Mapped PID Subtitles: %u."), m_DVBStreams[DVB_SUB].GetMappedPID());
@@ -1068,7 +1137,10 @@ HRESULT CFGManagerBDA::SetChannelInternal(CDVBChannel* pChannel)
if (bRadioToTV) {
m_fHideWindow = false;
Sleep(1800);
- ((CMainFrame*)AfxGetMainWnd())->HideVideoWindow(m_fHideWindow);
+ }
+
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
+ pMainFrame->HideVideoWindow(m_fHideWindow);
}
return hr;
@@ -1115,7 +1187,7 @@ HRESULT CFGManagerBDA::SwitchStream(DVB_STREAM_TYPE nOldType, DVB_STREAM_TYPE nN
CComPtr<IPin> pNewOut = GetFirstPin(pFGNew, PINDIR_OUTPUT);
CComPtr<IPinConnection> pNewOutDynamic;
- if ((nNewType != DVB_H264) && (nNewType != DVB_MPV) && GetState() != State_Stopped) {
+ if (nNewType != DVB_MPV && nNewType != DVB_H264 && nNewType != DVB_HEVC && GetState() != State_Stopped) {
CComPtr<IMpeg2Demultiplexer> pDemux;
m_pDemux->QueryInterface(IID_PPV_ARGS(&pDemux));
@@ -1203,9 +1275,6 @@ void CFGManagerBDA::UpdateMediaType(VIDEOINFOHEADER2* NewVideoHeader, CDVBChanne
if (pChannel->GetVideoHeight()) {
NewVideoHeader->bmiHeader.biHeight = pChannel->GetVideoHeight();
NewVideoHeader->bmiHeader.biWidth = pChannel->GetVideoWidth();
- } else if (pChannel->GetVideoType() == DVB_H264) {
- NewVideoHeader->bmiHeader.biHeight = 1080; // 1080 was the default before this change (should be 576)
- NewVideoHeader->bmiHeader.biWidth = 1920; // 1920 was the default before this change (should be 720)
} else {
NewVideoHeader->bmiHeader.biHeight = 576;
NewVideoHeader->bmiHeader.biWidth = 720;
@@ -1246,10 +1315,11 @@ HRESULT CFGManagerBDA::ChangeState(FILTER_STATE nRequested)
QueryInterface(IID_PPV_ARGS(&pMC));
pMC->GetState(500, &nState);
if (nState != nRequested) {
+ CMainFrame* pMainFrame = AfxGetMainFrame();
switch (nRequested) {
case State_Stopped: {
- if (SUCCEEDED(hr = pMC->Stop())) {
- ((CMainFrame*)AfxGetMainWnd())->KillTimersStop();
+ if (SUCCEEDED(hr = pMC->Stop()) && pMainFrame) {
+ pMainFrame->KillTimersStop();
}
LOG(_T("IMediaControl stop: 0x%08x."), hr);
return hr;
@@ -1259,8 +1329,8 @@ HRESULT CFGManagerBDA::ChangeState(FILTER_STATE nRequested)
return pMC->Pause();
}
case State_Running: {
- if (SUCCEEDED(hr = pMC->Run()) && SUCCEEDED(hr = pMC->GetState(500, &nState)) && nState == State_Running) {
- ((CMainFrame*)AfxGetMainWnd())->SetTimersPlay();
+ if (SUCCEEDED(hr = pMC->Run()) && SUCCEEDED(hr = pMC->GetState(500, &nState)) && nState == State_Running && pMainFrame) {
+ pMainFrame->SetTimersPlay();
}
LOG(_T("IMediaControl play: 0x%08x."), hr);
return hr;
diff --git a/src/mpc-hc/FGManagerBDA.h b/src/mpc-hc/FGManagerBDA.h
index 83cda2d9f..234e10286 100644
--- a/src/mpc-hc/FGManagerBDA.h
+++ b/src/mpc-hc/FGManagerBDA.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2013 see Authors.txt
+ * (C) 2009-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,27 +20,28 @@
#pragma once
-#include <bdatypes.h>
-#include <bdamedia.h>
-#include <bdaiface.h>
#include "FGManager.h"
+#include "DVBChannel.h"
+#include <bdaiface.h>
+enum DVB_RebuildFilterGraph;
+typedef struct tagVIDEOINFOHEADER2 VIDEOINFOHEADER2;
class CDVBStream
{
public:
CDVBStream()
- : m_Name(L"")
+ : m_pmt(0)
, m_bFindExisting(false)
- , m_pmt(0)
+ , m_Name(L"")
, m_nMsc(MEDIA_TRANSPORT_PACKET)
, m_ulMappedPID(0) {
}
CDVBStream(LPWSTR strName, const AM_MEDIA_TYPE* pmt, bool bFindExisting = false, MEDIA_SAMPLE_CONTENT nMsc = MEDIA_ELEMENTARY_STREAM)
- : m_Name(strName)
+ : m_pmt(pmt)
, m_bFindExisting(bFindExisting)
- , m_pmt(pmt)
+ , m_Name(strName)
, m_nMsc(nMsc)
, m_ulMappedPID(0) {
}
@@ -120,8 +121,8 @@ public:
// IBDATuner
STDMETHODIMP SetChannel(int nChannelPrefNumber);
STDMETHODIMP SetAudio(int nAudioIndex);
- STDMETHODIMP SetFrequency(ULONG freq);
- STDMETHODIMP Scan(ULONG ulFrequency, HWND hWnd);
+ STDMETHODIMP SetFrequency(ULONG ulFrequency, ULONG ulBandwidth);
+ STDMETHODIMP Scan(ULONG ulFrequency, ULONG ulBandwidth, HWND hWnd);
STDMETHODIMP GetStats(BOOLEAN& bPresent, BOOLEAN& bLocked, LONG& lDbStrength, LONG& lPercentQuality);
// IAMStreamSelect
@@ -173,39 +174,3 @@ private:
HRESULT SearchIBDATopology(const CComPtr<IBaseFilter>& pTuner, REFIID iid, CComPtr<IUnknown>& pUnk);
};
-
-#define LOG_FILE _T("bda.log")
-
-#ifdef _DEBUG
-#include <sys/types.h>
-#include <sys/timeb.h>
-
-static void LOG(LPCTSTR fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- TCHAR buff[3000];
- FILE* f;
- _timeb timebuffer;
- TCHAR time1[8];
- TCHAR wbuf[26];
-
- _ftime_s(&timebuffer);
- _tctime_s(wbuf, _countof(wbuf), &timebuffer.time);
-
- for (size_t i = 0; i < _countof(time1); i++) {
- time1[i] = wbuf[i + 11];
- }
-
- _vstprintf_s(buff, _countof(buff), fmt, args);
- if (_tfopen_s(&f, LOG_FILE, _T("at")) == 0) {
- fseek(f, 0, 2);
- _ftprintf_s(f, _T("%.8s.%03hu - %s\n"), time1, timebuffer.millitm, buff);
- fclose(f);
- }
-
- va_end(args);
-}
-#else
-inline void LOG(LPCTSTR fmt, ...) {}
-#endif
diff --git a/src/mpc-hc/FakeFilterMapper2.cpp b/src/mpc-hc/FakeFilterMapper2.cpp
index 52b3fd65a..f2065a398 100644
--- a/src/mpc-hc/FakeFilterMapper2.cpp
+++ b/src/mpc-hc/FakeFilterMapper2.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,15 +24,14 @@
#include "MacrovisionKicker.h"
#include "DSUtil.h"
-#include <InitGuid.h>
-#include "mhook/mhook-lib/mhook.h"
+#include "MhookHelper.h"
HRESULT(__stdcall* Real_CoCreateInstance)(CONST IID& a0,
- LPUNKNOWN a1,
- DWORD a2,
- CONST IID& a3,
- LPVOID* a4)
+ LPUNKNOWN a1,
+ DWORD a2,
+ CONST IID& a3,
+ LPVOID* a4)
= CoCreateInstance;
LONG(WINAPI* Real_RegCreateKeyExA)(HKEY a0,
@@ -535,35 +534,36 @@ void CFilterMapper2::Init()
{
if (!s_bInitialized) {
// In case of error, we don't report the failure immediately since the hooks might not be needed
- s_bInitialized = Mhook_SetHook(&(PVOID&)Real_CoCreateInstance, (PVOID)Mine_CoCreateInstance)
- && Mhook_SetHook(&(PVOID&)Real_RegCloseKey, (PVOID)Mine_RegCloseKey)
- && Mhook_SetHook(&(PVOID&)Real_RegFlushKey, (PVOID)Mine_RegFlushKey)
- && Mhook_SetHook(&(PVOID&)Real_RegCreateKeyA, (PVOID)Mine_RegCreateKeyA)
- && Mhook_SetHook(&(PVOID&)Real_RegCreateKeyW, (PVOID)Mine_RegCreateKeyW)
- && Mhook_SetHook(&(PVOID&)Real_RegCreateKeyExA, (PVOID)Mine_RegCreateKeyExA)
- && Mhook_SetHook(&(PVOID&)Real_RegCreateKeyExW, (PVOID)Mine_RegCreateKeyExW)
- && Mhook_SetHook(&(PVOID&)Real_RegDeleteKeyA, (PVOID)Mine_RegDeleteKeyA)
- && Mhook_SetHook(&(PVOID&)Real_RegDeleteKeyW, (PVOID)Mine_RegDeleteKeyW)
- && Mhook_SetHook(&(PVOID&)Real_RegDeleteValueA, (PVOID)Mine_RegDeleteValueA)
- && Mhook_SetHook(&(PVOID&)Real_RegDeleteValueW, (PVOID)Mine_RegDeleteValueW)
- && Mhook_SetHook(&(PVOID&)Real_RegEnumKeyExA, (PVOID)Mine_RegEnumKeyExA)
- && Mhook_SetHook(&(PVOID&)Real_RegEnumKeyExW, (PVOID)Mine_RegEnumKeyExW)
- && Mhook_SetHook(&(PVOID&)Real_RegEnumValueA, (PVOID)Mine_RegEnumValueA)
- && Mhook_SetHook(&(PVOID&)Real_RegEnumValueW, (PVOID)Mine_RegEnumValueW)
- && Mhook_SetHook(&(PVOID&)Real_RegOpenKeyA, (PVOID)Mine_RegOpenKeyA)
- && Mhook_SetHook(&(PVOID&)Real_RegOpenKeyW, (PVOID)Mine_RegOpenKeyW)
- && Mhook_SetHook(&(PVOID&)Real_RegOpenKeyExA, (PVOID)Mine_RegOpenKeyExA)
- && Mhook_SetHook(&(PVOID&)Real_RegOpenKeyExW, (PVOID)Mine_RegOpenKeyExW)
- && Mhook_SetHook(&(PVOID&)Real_RegQueryInfoKeyA, (PVOID)Mine_RegQueryInfoKeyA)
- && Mhook_SetHook(&(PVOID&)Real_RegQueryInfoKeyW, (PVOID)Mine_RegQueryInfoKeyW)
- && Mhook_SetHook(&(PVOID&)Real_RegQueryValueA, (PVOID)Mine_RegQueryValueA)
- && Mhook_SetHook(&(PVOID&)Real_RegQueryValueW, (PVOID)Mine_RegQueryValueW)
- && Mhook_SetHook(&(PVOID&)Real_RegQueryValueExA, (PVOID)Mine_RegQueryValueExA)
- && Mhook_SetHook(&(PVOID&)Real_RegQueryValueExW, (PVOID)Mine_RegQueryValueExW)
- && Mhook_SetHook(&(PVOID&)Real_RegSetValueA, (PVOID)Mine_RegSetValueA)
- && Mhook_SetHook(&(PVOID&)Real_RegSetValueW, (PVOID)Mine_RegSetValueW)
- && Mhook_SetHook(&(PVOID&)Real_RegSetValueExA, (PVOID)Mine_RegSetValueExA)
- && Mhook_SetHook(&(PVOID&)Real_RegSetValueExW, (PVOID)Mine_RegSetValueExW);
+ s_bInitialized = Mhook_SetHookEx(&Real_CoCreateInstance, Mine_CoCreateInstance)
+ && Mhook_SetHookEx(&Real_RegCloseKey, Mine_RegCloseKey)
+ && Mhook_SetHookEx(&Real_RegFlushKey, Mine_RegFlushKey)
+ && Mhook_SetHookEx(&Real_RegCreateKeyA, Mine_RegCreateKeyA)
+ && Mhook_SetHookEx(&Real_RegCreateKeyW, Mine_RegCreateKeyW)
+ && Mhook_SetHookEx(&Real_RegCreateKeyExA, Mine_RegCreateKeyExA)
+ && Mhook_SetHookEx(&Real_RegCreateKeyExW, Mine_RegCreateKeyExW)
+ && Mhook_SetHookEx(&Real_RegDeleteKeyA, Mine_RegDeleteKeyA)
+ && Mhook_SetHookEx(&Real_RegDeleteKeyW, Mine_RegDeleteKeyW)
+ && Mhook_SetHookEx(&Real_RegDeleteValueA, Mine_RegDeleteValueA)
+ && Mhook_SetHookEx(&Real_RegDeleteValueW, Mine_RegDeleteValueW)
+ && Mhook_SetHookEx(&Real_RegEnumKeyExA, Mine_RegEnumKeyExA)
+ && Mhook_SetHookEx(&Real_RegEnumKeyExW, Mine_RegEnumKeyExW)
+ && Mhook_SetHookEx(&Real_RegEnumValueA, Mine_RegEnumValueA)
+ && Mhook_SetHookEx(&Real_RegEnumValueW, Mine_RegEnumValueW)
+ && Mhook_SetHookEx(&Real_RegOpenKeyA, Mine_RegOpenKeyA)
+ && Mhook_SetHookEx(&Real_RegOpenKeyW, Mine_RegOpenKeyW)
+ && Mhook_SetHookEx(&Real_RegOpenKeyExA, Mine_RegOpenKeyExA)
+ && Mhook_SetHookEx(&Real_RegOpenKeyExW, Mine_RegOpenKeyExW)
+ && Mhook_SetHookEx(&Real_RegQueryInfoKeyA, Mine_RegQueryInfoKeyA)
+ && Mhook_SetHookEx(&Real_RegQueryInfoKeyW, Mine_RegQueryInfoKeyW)
+ && Mhook_SetHookEx(&Real_RegQueryValueA, Mine_RegQueryValueA)
+ && Mhook_SetHookEx(&Real_RegQueryValueW, Mine_RegQueryValueW)
+ && Mhook_SetHookEx(&Real_RegQueryValueExA, Mine_RegQueryValueExA)
+ && Mhook_SetHookEx(&Real_RegQueryValueExW, Mine_RegQueryValueExW)
+ && Mhook_SetHookEx(&Real_RegSetValueA, Mine_RegSetValueA)
+ && Mhook_SetHookEx(&Real_RegSetValueW, Mine_RegSetValueW)
+ && Mhook_SetHookEx(&Real_RegSetValueExA, Mine_RegSetValueExA)
+ && Mhook_SetHookEx(&Real_RegSetValueExW, Mine_RegSetValueExW);
+ s_bInitialized &= MH_EnableHook(MH_ALL_HOOKS) == MH_OK;
}
}
@@ -705,8 +705,8 @@ STDMETHODIMP CFilterMapper2::RegisterFilter(REFCLSID clsidFilter, LPCWSTR Name,
}
STDMETHODIMP CFilterMapper2::EnumMatchingFilters(IEnumMoniker** ppEnum, DWORD dwFlags, BOOL bExactMatch, DWORD dwMerit,
- BOOL bInputNeeded, DWORD cInputTypes, const GUID* pInputTypes, const REGPINMEDIUM* pMedIn, const CLSID* pPinCategoryIn, BOOL bRender,
- BOOL bOutputNeeded, DWORD cOutputTypes, const GUID* pOutputTypes, const REGPINMEDIUM* pMedOut, const CLSID* pPinCategoryOut)
+ BOOL bInputNeeded, DWORD cInputTypes, const GUID* pInputTypes, const REGPINMEDIUM* pMedIn, const CLSID* pPinCategoryIn, BOOL bRender,
+ BOOL bOutputNeeded, DWORD cOutputTypes, const GUID* pOutputTypes, const REGPINMEDIUM* pMedOut, const CLSID* pPinCategoryOut)
{
if (CComQIPtr<IFilterMapper2> pFM2 = m_pFM2) {
return pFM2->EnumMatchingFilters(ppEnum, dwFlags, bExactMatch, dwMerit,
diff --git a/src/mpc-hc/FakeFilterMapper2.h b/src/mpc-hc/FakeFilterMapper2.h
index d06f30f8a..70f8e2a86 100644
--- a/src/mpc-hc/FakeFilterMapper2.h
+++ b/src/mpc-hc/FakeFilterMapper2.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -44,9 +44,9 @@ public:
: fDisabled(false)
, fTemporary(false)
, type(EXTERNAL)
+ , clsid(GUID_NULL)
, iLoadType(0)
- , dwMerit(0)
- , clsid(GUID_NULL) {
+ , dwMerit(0) {
}
FilterOverride(FilterOverride* f) {
fDisabled = f->fDisabled;
diff --git a/src/mpc-hc/FavoriteAddDlg.cpp b/src/mpc-hc/FavoriteAddDlg.cpp
index 96e91321e..3842aaefb 100644
--- a/src/mpc-hc/FavoriteAddDlg.cpp
+++ b/src/mpc-hc/FavoriteAddDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,6 +23,7 @@
#include "mplayerc.h"
#include "FavoriteAddDlg.h"
#include "SettingsDefines.h"
+#include "AppSettings.h"
// CFavoriteAddDlg dialog
diff --git a/src/mpc-hc/FavoriteOrganizeDlg.cpp b/src/mpc-hc/FavoriteOrganizeDlg.cpp
index 6f5a29f5f..8ebfe4b14 100644
--- a/src/mpc-hc/FavoriteOrganizeDlg.cpp
+++ b/src/mpc-hc/FavoriteOrganizeDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,10 +20,10 @@
*/
#include "stdafx.h"
+#include "FavoriteOrganizeDlg.h"
#include "mplayerc.h"
#include "MainFrm.h"
-#include "FavoriteOrganizeDlg.h"
-
+#include <strsafe.h>
// CFavoriteOrganizeDlg dialog
@@ -89,7 +89,7 @@ void CFavoriteOrganizeDlg::UpdateColumnsSizes()
m_list.GetClientRect(r);
m_list.SetColumnWidth(0, LVSCW_AUTOSIZE);
m_list.SetColumnWidth(1, LVSCW_AUTOSIZE);
- m_list.SetColumnWidth(1, max(m_list.GetColumnWidth(1), r.Width() - m_list.GetColumnWidth(0)));
+ m_list.SetColumnWidth(1, std::max(m_list.GetColumnWidth(1), r.Width() - m_list.GetColumnWidth(0)));
}
void CFavoriteOrganizeDlg::DoDataExchange(CDataExchange* pDX)
@@ -117,6 +117,7 @@ BEGIN_MESSAGE_MAP(CFavoriteOrganizeDlg, CResizableDialog)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST2, OnLvnEndlabeleditList2)
ON_NOTIFY(NM_DBLCLK, IDC_LIST2, OnPlayFavorite)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST2, OnKeyPressed)
+ ON_NOTIFY(LVN_GETINFOTIP, IDC_LIST2, OnLvnGetInfoTipList)
ON_WM_SIZE()
END_MESSAGE_MAP()
@@ -134,7 +135,7 @@ BOOL CFavoriteOrganizeDlg::OnInitDialog()
m_list.InsertColumn(0, _T(""));
m_list.InsertColumn(1, _T(""));
- m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT);
+ m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP);
const CAppSettings& s = AfxGetAppSettings();
s.GetFav(FAV_FILE, m_sl[0]);
@@ -310,7 +311,7 @@ void CFavoriteOrganizeDlg::OnDeleteBnClicked()
m_list.DeleteItem(nItem);
}
- nItem = min(nItem, m_list.GetItemCount() - 1);
+ nItem = std::min(nItem, m_list.GetItemCount() - 1);
m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
}
@@ -414,3 +415,18 @@ void CFavoriteOrganizeDlg::OnSize(UINT nType, int cx, int cy)
m_list.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
}
}
+
+void CFavoriteOrganizeDlg::OnLvnGetInfoTipList(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMLVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMLVGETINFOTIP>(pNMHDR);
+
+ CAtlList<CString> args;
+ ExplodeEsc(m_sl[m_tab.GetCurSel()].GetAt((POSITION)m_list.GetItemData(pGetInfoTip->iItem)), args, _T(';'));
+ CString path = args.RemoveTail();
+ // Relative to drive value is always third. If less args are available that means it is not included.
+ int rootLength = (args.GetCount() == 3 && args.RemoveTail() != _T("0")) ? CPath(path).SkipRoot() : 0;
+
+ StringCchCopy(pGetInfoTip->pszText, pGetInfoTip->cchTextMax, path.Mid(rootLength));
+
+ *pResult = 0;
+}
diff --git a/src/mpc-hc/FavoriteOrganizeDlg.h b/src/mpc-hc/FavoriteOrganizeDlg.h
index bda98bef3..f44025d69 100644
--- a/src/mpc-hc/FavoriteOrganizeDlg.h
+++ b/src/mpc-hc/FavoriteOrganizeDlg.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -75,4 +75,5 @@ public:
afx_msg void OnPlayFavorite(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnKeyPressed(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnSize(UINT nType, int cx, int cy);
+ afx_msg void OnLvnGetInfoTipList(NMHDR* pNMHDR, LRESULT* pResult);
};
diff --git a/src/mpc-hc/FileAssoc.cpp b/src/mpc-hc/FileAssoc.cpp
index 529270047..8a8215830 100644
--- a/src/mpc-hc/FileAssoc.cpp
+++ b/src/mpc-hc/FileAssoc.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,7 +24,7 @@
#include "FileAssoc.h"
#include "resource.h"
#include "SysVersion.h"
-#include "WinAPIUtils.h"
+#include "PathUtils.h"
// TODO: change this along with the root key for settings and the mutex name to
@@ -64,13 +64,13 @@ void CFileAssoc::IconLib::SaveVersion() const
}
CFileAssoc::CFileAssoc()
- : m_iconLibPath(GetProgramPath() + _T("mpciconlib.dll"))
+ : m_iconLibPath(PathUtils::CombinePaths(PathUtils::GetProgramPath(), _T("mpciconlib.dll")))
, m_strRegisteredAppName(_T("Media Player Classic"))
, m_strOldAssocKey(_T("PreviousRegistration"))
, m_strRegisteredAppKey(_T("Software\\Clients\\Media\\Media Player Classic\\Capabilities"))
, m_strRegAppFileAssocKey(_T("Software\\Clients\\Media\\Media Player Classic\\Capabilities\\FileAssociations"))
- , m_strOpenCommand(_T("\"") + GetProgramPath(true) + _T("\" \"%1\""))
- , m_strEnqueueCommand(_T("\"") + GetProgramPath(true) + _T("\" /add \"%1\""))
+ , m_strOpenCommand(_T("\"") + PathUtils::GetProgramPath(true) + _T("\" \"%1\""))
+ , m_strEnqueueCommand(_T("\"") + PathUtils::GetProgramPath(true) + _T("\" /add \"%1\""))
, m_bNoRecentDocs(false)
, m_checkIconsAssocInactiveEvent(TRUE, TRUE) // initially set, manual reset
{
@@ -137,7 +137,7 @@ bool CFileAssoc::RegisterApp()
bool success = false;
if (m_pAAR) {
- CString appIcon = "\"" + GetProgramPath(true) + "\",0";
+ CString appIcon = _T("\"") + PathUtils::GetProgramPath(true) + _T("\",0");
// Register MPC-HC for the windows "Default application" manager
CRegKey key;
@@ -191,7 +191,7 @@ bool CFileAssoc::Register(CString ext, CString strLabel, bool bRegister, bool bR
key.DeleteValue(_T("NoRecentDocs"));
}
- CString appIcon = "\"" + GetProgramPath(true) + "\",0";
+ CString appIcon = _T("\"") + PathUtils::GetProgramPath(true) + _T("\",0");
// Add to playlist option
if (bRegisterContextMenuEntries) {
@@ -281,11 +281,10 @@ bool CFileAssoc::SetFileAssociation(CString strExt, CString strProgID, bool bReg
return false;
}
- LPTSTR pszCurrentAssociation;
+ CComHeapPtr<WCHAR> pszCurrentAssociation;
// Save the application currently associated
if (SUCCEEDED(m_pAAR->QueryCurrentDefault(strExt, AT_FILEEXTENSION, AL_EFFECTIVE, &pszCurrentAssociation))) {
if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID)) {
- CoTaskMemFree(pszCurrentAssociation);
return false;
}
@@ -304,7 +303,6 @@ bool CFileAssoc::SetFileAssociation(CString strExt, CString strProgID, bool bReg
}
}
*/
- CoTaskMemFree(pszCurrentAssociation);
}
strNewApp = m_strRegisteredAppName;
} else {
@@ -436,7 +434,7 @@ bool CFileAssoc::AreRegisteredFileContextMenuEntries(CString strExt) const
bool registered = false;
if (ERROR_SUCCESS == key.Open(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open"), KEY_READ)) {
- CString strCommand = ResStr(IDS_OPEN_WITH_MPC);
+ CString strCommand(StrRes(IDS_OPEN_WITH_MPC));
if (ERROR_SUCCESS == key.QueryStringValue(nullptr, buff, &len)) {
registered = (strCommand.CompareNoCase(CString(buff)) == 0);
}
@@ -526,7 +524,7 @@ bool CFileAssoc::RegisterFolderContextMenuEntries(bool bRegister)
if (bRegister) {
success = false;
- CString appIcon = "\"" + GetProgramPath(true) + "\",0";
+ CString appIcon = _T("\"") + PathUtils::GetProgramPath(true) + _T("\",0");
if (ERROR_SUCCESS == key.Create(HKEY_CLASSES_ROOT, _T("Directory\\shell\\") PROGID _T(".enqueue"))) {
key.SetStringValue(nullptr, ResStr(IDS_ADD_TO_PLAYLIST));
@@ -577,7 +575,7 @@ bool CFileAssoc::AreRegisteredFolderContextMenuEntries() const
bool CFileAssoc::RegisterAutoPlay(autoplay_t ap, bool bRegister)
{
- CString exe = GetProgramPath(true);
+ CString exe = PathUtils::GetProgramPath(true);
size_t i = (size_t)ap;
if (i >= m_handlers.size()) {
@@ -614,7 +612,7 @@ bool CFileAssoc::RegisterAutoPlay(autoplay_t ap, bool bRegister)
_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\AutoplayHandlers\\EventHandlers\\Play") + m_handlers[i].verb + _T("OnArrival"))) {
return false;
}
- key.SetStringValue(CString("MPCPlay") + m_handlers[i].verb + _T("OnArrival"), _T(""));
+ key.SetStringValue(_T("MPCPlay") + m_handlers[i].verb + _T("OnArrival"), _T(""));
key.Close();
} else {
if (ERROR_SUCCESS != key.Create(HKEY_LOCAL_MACHINE,
@@ -632,7 +630,7 @@ bool CFileAssoc::IsAutoPlayRegistered(autoplay_t ap) const
{
ULONG len;
TCHAR buff[MAX_PATH];
- CString exe = GetProgramPath(true);
+ CString exe = PathUtils::GetProgramPath(true);
size_t i = (size_t)ap;
if (i >= m_handlers.size()) {
@@ -727,7 +725,7 @@ bool CFileAssoc::ReAssocIcons(const CAtlList<CString>& exts)
}
iconLib->SaveVersion();
- const CString progPath = GetProgramPath(true);
+ const CString progPath = PathUtils::GetProgramPath(true);
CRegKey key;
@@ -746,7 +744,7 @@ bool CFileAssoc::ReAssocIcons(const CAtlList<CString>& exts)
/* no icon was found for the file extension, so use MPC-HC's icon */
if (appIcon.IsEmpty()) {
- appIcon = "\"" + progPath + "\",0";
+ appIcon = _T("\"") + progPath + _T("\",0");
}
if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\DefaultIcon"))
@@ -775,11 +773,11 @@ void CFileAssoc::CheckIconsAssocThread()
if (auto iconLib = GetIconLib()) {
UINT nCurrentVersion = iconLib->GetVersion();
- iconLib->SaveVersion(); // Ensure we don't try to fix the icons more than once
CAtlList<CString> registeredExts;
if (nCurrentVersion != nLastVersion && GetAssociatedExtensionsFromRegistry(registeredExts)) {
+ iconLib->SaveVersion();
if (SysVersion::IsVistaOrLater() && !IsUserAnAdmin()) {
TASKDIALOGCONFIG config;
ZeroMemory(&config, sizeof(TASKDIALOGCONFIG));
@@ -804,7 +802,7 @@ void CFileAssoc::CheckIconsAssocThread()
TaskDialogIndirect(&config, &nButtonPressed, nullptr, nullptr);
if (IDYES == nButtonPressed) {
- AfxGetMyApp()->RunAsAdministrator(GetProgramPath(true), _T("/iconsassoc"), true);
+ AfxGetMyApp()->RunAsAdministrator(PathUtils::GetProgramPath(true), _T("/iconsassoc"), true);
}
}
@@ -818,7 +816,7 @@ void CFileAssoc::CheckIconsAssocThread()
}
}
- m_checkIconsAssocInactiveEvent.SetEvent();
+ m_checkIconsAssocInactiveEvent.Set();
}
void CFileAssoc::CheckIconsAssoc()
@@ -827,7 +825,7 @@ void CFileAssoc::CheckIconsAssoc()
HANDLE hEvent = m_checkIconsAssocInactiveEvent;
DWORD dwEvent;
VERIFY(CoWaitForMultipleHandles(0, INFINITE, 1, &hEvent, &dwEvent) == S_OK);
- m_checkIconsAssocInactiveEvent.ResetEvent();
+ m_checkIconsAssocInactiveEvent.Reset();
std::thread(
[this] { CheckIconsAssocThread(); }
).detach();
diff --git a/src/mpc-hc/FileAssoc.h b/src/mpc-hc/FileAssoc.h
index aaaf7c287..2598b40a9 100644
--- a/src/mpc-hc/FileAssoc.h
+++ b/src/mpc-hc/FileAssoc.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,9 +21,8 @@
#pragma once
-#include <afxmt.h>
-#include <afxwin.h>
#include "MediaFormats.h"
+#include <atlsync.h>
#include <array>
#include <memory>
diff --git a/src/mpc-hc/FileDropTarget.cpp b/src/mpc-hc/FileDropTarget.cpp
deleted file mode 100644
index e1fd73be4..000000000
--- a/src/mpc-hc/FileDropTarget.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include "mplayerc.h"
-#include "FileDropTarget.h"
-
-
-// CFileDropTarget
-
-//IMPLEMENT_DYNAMIC(CFileDropTarget, COleDropTarget)
-CFileDropTarget::CFileDropTarget(CDropTarget* pDropTarget)
- : m_pDropTarget(pDropTarget)
-{
- ASSERT(m_pDropTarget);
-}
-
-CFileDropTarget::~CFileDropTarget()
-{
-}
-
-DROPEFFECT CFileDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
-{
- return m_pDropTarget ? m_pDropTarget->OnDragEnter(pDataObject, dwKeyState, point) : DROPEFFECT_NONE;
-}
-
-DROPEFFECT CFileDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
-{
- return m_pDropTarget ? m_pDropTarget->OnDragOver(pDataObject, dwKeyState, point) : DROPEFFECT_NONE;
-}
-
-BOOL CFileDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point)
-{
- return m_pDropTarget ? m_pDropTarget->OnDrop(pDataObject, dropEffect, point) : DROPEFFECT_NONE;
-}
-
-DROPEFFECT CFileDropTarget::OnDropEx(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point)
-{
- return m_pDropTarget ? m_pDropTarget->OnDropEx(pDataObject, dropDefault, dropList, point) : DROPEFFECT_NONE;
-}
-
-void CFileDropTarget::OnDragLeave(CWnd* pWnd)
-{
- if (m_pDropTarget) {
- m_pDropTarget->OnDragLeave();
- }
-}
-
-DROPEFFECT CFileDropTarget::OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point)
-{
- return m_pDropTarget ? m_pDropTarget->OnDragScroll(dwKeyState, point) : DROPEFFECT_NONE;
-}
-
-BEGIN_MESSAGE_MAP(CFileDropTarget, COleDropTarget)
-END_MESSAGE_MAP()
diff --git a/src/mpc-hc/FileDropTarget.h b/src/mpc-hc/FileDropTarget.h
deleted file mode 100644
index b7868206f..000000000
--- a/src/mpc-hc/FileDropTarget.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include <afxole.h>
-
-
-class CDropTarget
-{
-public:
- CDropTarget() {}
-
- virtual DROPEFFECT OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) {
- return DROPEFFECT_NONE;
- }
- virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) {
- return DROPEFFECT_NONE;
- }
- virtual BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point) {
- return FALSE;
- }
- virtual DROPEFFECT OnDropEx(COleDataObject* pDataObject, DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point) {
- return (DROPEFFECT) - 1;
- }
- virtual void OnDragLeave() {}
- virtual DROPEFFECT OnDragScroll(DWORD dwKeyState, CPoint point) {
- return DROPEFFECT_NONE;
- }
-};
-
-// CFileDropTarget command target
-
-class CFileDropTarget : public COleDropTarget
-{
- // DECLARE_DYNAMIC(CFileDropTarget)
-
-private:
- CDropTarget* m_pDropTarget;
-
-public:
- CFileDropTarget(CDropTarget* pDropTarget);
- virtual ~CFileDropTarget();
-
-protected:
- DECLARE_MESSAGE_MAP()
-
- DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
- DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
- BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
- DROPEFFECT OnDropEx(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point);
- void OnDragLeave(CWnd* pWnd);
- DROPEFFECT OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point);
-};
diff --git a/src/mpc-hc/FilterEnum.h b/src/mpc-hc/FilterEnum.h
index 1c4360068..6f53b9679 100644
--- a/src/mpc-hc/FilterEnum.h
+++ b/src/mpc-hc/FilterEnum.h
@@ -1,5 +1,5 @@
/*
- * (C) 2010-2014 see Authors.txt
+ * (C) 2010-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -43,8 +43,11 @@ enum SOURCE_FILTER {
#if INTERNAL_SOURCEFILTER_FLIC
SRC_FLIC,
#endif
-#if INTERNAL_SOURCEFILTER_DTSAC3
- SRC_DTSAC3,
+#if INTERNAL_SOURCEFILTER_AC3
+ SRC_AC3,
+#endif
+#if INTERNAL_SOURCEFILTER_DTS
+ SRC_DTS,
#endif
#if INTERNAL_SOURCEFILTER_MATROSKA
SRC_MATROSKA,
@@ -101,6 +104,9 @@ enum SOURCE_FILTER {
#if INTERNAL_SOURCEFILTER_ASF
SRC_ASF,
#endif
+#if INTERNAL_SOURCEFILTER_WTV
+ SRC_WTV,
+#endif
#if INTERNAL_SOURCEFILTER_FLAC
SRC_FLAC,
#endif
@@ -159,6 +165,9 @@ enum DECODER {
#if INTERNAL_DECODER_AMR
TRA_AMR,
#endif
+#if INTERNAL_DECODER_OPUS
+ TRA_OPUS,
+#endif
#if INTERNAL_DECODER_PCM
TRA_PCM,
#endif
@@ -219,6 +228,9 @@ enum DECODER {
#if INTERNAL_DECODER_FLIC
TRA_FLIC,
#endif
+#if INTERNAL_DECODER_MSVIDEO
+ TRA_MSVIDEO,
+#endif
#if INTERNAL_DECODER_V210_V410
TRA_V210_V410,
#endif
diff --git a/src/mpc-hc/FloatEdit.cpp b/src/mpc-hc/FloatEdit.cpp
index e428a1688..a95021700 100644
--- a/src/mpc-hc/FloatEdit.cpp
+++ b/src/mpc-hc/FloatEdit.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -91,21 +91,18 @@ void CIntEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
return;
}
- CString str;
- GetWindowText(str);
-
- if (nChar == '-' && !str.IsEmpty() && str[0] == '-') {
- return;
- }
-
int nStartChar, nEndChar;
GetSel(nStartChar, nEndChar);
- if (nChar == '\b' && nStartChar <= 0) {
- return;
+ if (nChar == '-' && nEndChar == 0) {
+ CString str;
+ GetWindowText(str);
+ if (!str.IsEmpty() && str[0] == '-') {
+ return;
+ }
}
- if (nChar == '-' && (nStartChar != 0 || nEndChar != 0)) {
+ if (nChar == '-' && nStartChar != 0) {
return;
}
diff --git a/src/mpc-hc/FreeviewEPGDecode.cpp b/src/mpc-hc/FreeviewEPGDecode.cpp
index 90d7b6fd1..2dd4d5a7f 100644
--- a/src/mpc-hc/FreeviewEPGDecode.cpp
+++ b/src/mpc-hc/FreeviewEPGDecode.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2006-2008 Team MediaPortal http://www.team-mediaportal.com
- * (C) 2013 see Authors.txt
+ * (C) 2013, 2015-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,7 @@
#include "stdafx.h"
#include "FreeviewEPGDecode.h"
+#include "Logger.h"
#define bitrev16(d) ((d << 8) & 0xff00) + ((d >> 8) & 0x00ff)
#define START '\0'
@@ -738,7 +739,7 @@ CString DecodeFreeviewEPG(const BYTE* pBuffer, size_t uLength)
prevc = nextc;
} while (nextc != STOP);
} else {
- TRACE(_T("DecodeFreeviewEPG: unsupported huffman table version %d, only version 1 and 2 are supported\n"), pBuffer[0]);
+ BDA_LOG(_T("unsupported huffman table version %d, only version 1 and 2 are supported"), pBuffer[0]);
}
return uncompressedString;
diff --git a/src/mpc-hc/FullscreenWnd.cpp b/src/mpc-hc/FullscreenWnd.cpp
index 389b48533..3dd17a7e4 100644
--- a/src/mpc-hc/FullscreenWnd.cpp
+++ b/src/mpc-hc/FullscreenWnd.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,20 +24,16 @@
#include "FullscreenWnd.h"
#include "MainFrm.h"
-IMPLEMENT_DYNAMIC(CFullscreenWnd, CWnd)
+IMPLEMENT_DYNAMIC(CFullscreenWnd, CMouseWnd)
CFullscreenWnd::CFullscreenWnd(CMainFrame* pMainFrame)
: CMouseWnd(pMainFrame, true)
, m_pMainFrame(pMainFrame)
{
}
-CFullscreenWnd::~CFullscreenWnd()
+bool CFullscreenWnd::IsWindow() const
{
-}
-
-bool CFullscreenWnd::IsWindow()
-{
- return (m_hWnd != nullptr);
+ return !!m_hWnd;
}
BOOL CFullscreenWnd::PreTranslateMessage(MSG* pMsg)
@@ -48,27 +44,44 @@ BOOL CFullscreenWnd::PreTranslateMessage(MSG* pMsg)
m_pMainFrame->PostMessage(pMsg->message, pMsg->wParam, pMsg->lParam);
return TRUE;
}
- return CWnd::PreTranslateMessage(pMsg);
+
+ return __super::PreTranslateMessage(pMsg);
}
BOOL CFullscreenWnd::PreCreateWindow(CREATESTRUCT& cs)
{
- if (!CWnd::PreCreateWindow(cs)) {
- return FALSE;
- }
-
cs.style &= ~WS_BORDER;
- cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS,
+ cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_NOCLOSE,
::LoadCursor(nullptr, IDC_ARROW), HBRUSH(COLOR_WINDOW + 1), nullptr);
- return TRUE;
+ return __super::PreCreateWindow(cs);
+}
+
+LRESULT CFullscreenWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
+{
+ if (message == WM_NCACTIVATE) {
+ return 0;
+ }
+
+ return __super::WindowProc(message, wParam, lParam);
}
BEGIN_MESSAGE_MAP(CFullscreenWnd, CMouseWnd)
ON_WM_ERASEBKGND()
+ ON_WM_DESTROY()
END_MESSAGE_MAP()
BOOL CFullscreenWnd::OnEraseBkgnd(CDC* pDC)
{
return FALSE;
}
+
+void CFullscreenWnd::OnDestroy()
+{
+ __super::OnDestroy();
+
+ CWnd* pMainWnd = AfxGetApp()->GetMainWnd();
+ if (pMainWnd) {
+ pMainWnd->SetActiveWindow();
+ }
+}
diff --git a/src/mpc-hc/FullscreenWnd.h b/src/mpc-hc/FullscreenWnd.h
index e775a1db0..3ea3440df 100644
--- a/src/mpc-hc/FullscreenWnd.h
+++ b/src/mpc-hc/FullscreenWnd.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,22 +25,23 @@
class CMainFrame;
-class CFullscreenWnd : public CMouseWnd
+class CFullscreenWnd final : public CMouseWnd
{
DECLARE_DYNAMIC(CFullscreenWnd)
- CMainFrame* m_pMainFrame;
+ explicit CFullscreenWnd(CMainFrame* pMainFrame);
+ bool IsWindow() const;
-public:
- CFullscreenWnd(CMainFrame* pMainFrame);
- virtual ~CFullscreenWnd();
- bool IsWindow();
+private:
+ CMainFrame* m_pMainFrame;
protected:
- virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
- virtual BOOL PreTranslateMessage(MSG* pMsg);
+ BOOL PreCreateWindow(CREATESTRUCT& cs) override;
+ BOOL PreTranslateMessage(MSG* pMsg) override;
+ LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam) override;
DECLARE_MESSAGE_MAP()
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
+ afx_msg void OnDestroy();
};
diff --git a/src/mpc-hc/GoToDlg.cpp b/src/mpc-hc/GoToDlg.cpp
index e1300f619..0cb43216e 100644
--- a/src/mpc-hc/GoToDlg.cpp
+++ b/src/mpc-hc/GoToDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,15 +23,13 @@
#include "mplayerc.h"
#include "GoToDlg.h"
#include "SettingsDefines.h"
-#include <math.h>
+#include <cmath>
// CGoToDlg dialog
IMPLEMENT_DYNAMIC(CGoToDlg, CDialog)
CGoToDlg::CGoToDlg(REFERENCE_TIME time, REFERENCE_TIME maxTime, double fps, CWnd* pParent /*=nullptr*/)
: CDialog(CGoToDlg::IDD, pParent)
- , m_timestr(_T(""))
- , m_framestr(_T(""))
, m_time(time)
, m_maxTime(maxTime)
, m_fps(fps)
@@ -127,16 +125,14 @@ void CGoToDlg::OnParseTimeCode()
AfxGetApp()->WriteProfileInt(IDS_R_SETTINGS, IDS_RS_GOTO_LAST_USED, TYPE_TIME);
- // The hh and mm are declared volatile to work around a compiler bug with ICL 13.
- // It prevents the compiler to optimize out those variables from the computation.
- volatile unsigned int hh = 0;
- volatile unsigned int mm = 0;
+ unsigned int hh = 0;
+ unsigned int mm = 0;
float ss = 0.0f;
- wchar_t c[2]; // unnecessary character
+ WCHAR c; // extra character to ensure the end of string was reached
- if (((swscanf_s(m_timestr, L"%f%1s", &ss, c, _countof(c)) == 1) // ss[.ms]
- || (swscanf_s(m_timestr, L"%u:%f%1s", &mm, &ss, c, _countof(c)) == 2 && ss < 60.0f) // mm:ss[.ms]
- || (swscanf_s(m_timestr, L"%u:%u:%f%1s", &hh, &mm, &ss, c, _countof(c)) == 3 && mm < 60 && ss < 60.0f)) // hh:mm:ss[.ms]
+ if (((swscanf_s(m_timestr, L"%f%c", &ss, &c, 1) == 1) // ss[.ms]
+ || (swscanf_s(m_timestr, L"%u:%f%c", &mm, &ss, &c, 1) == 2 && ss < 60.0f) // mm:ss[.ms]
+ || (swscanf_s(m_timestr, L"%u:%u:%f%c", &hh, &mm, &ss, &c, 1) == 3 && mm < 60 && ss < 60.0f)) // hh:mm:ss[.ms]
&& ss >= 0.0f) {
int time = (int)(1000.0f * ((hh * 60 + mm) * 60 + ss) + 0.5f);
@@ -156,17 +152,17 @@ void CGoToDlg::OnParseFrameCode()
unsigned int frame;
float fps;
- wchar_t c1[2]; // delimiter character
- wchar_t c2[2]; // unnecessary character
+ WCHAR c1; // delimiter character
+ WCHAR c2; // extra character to ensure the end of string was reached
- int result = swscanf_s(m_framestr, L"%u%1s%f%1s", &frame, c1, _countof(c1), &fps, c2, _countof(c2));
+ int result = swscanf_s(m_framestr, L"%u%c%f%c", &frame, &c1, 1, &fps, &c2, 1);
if (result == 1) {
m_time = (REFERENCE_TIME)ceil(10000000.0 * frame / m_fps);
OnOK();
- } else if (result == 3 && c1[0] == L',') {
+ } else if (result == 3 && c1 == L',') {
m_time = (REFERENCE_TIME)ceil(10000000.0 * frame / fps);
OnOK();
- } else if (result == 0 || c1[0] != L',') {
+ } else if (result == 0 || c1 != L',') {
AfxMessageBox(IDS_GOTO_ERROR_PARSING_TEXT, MB_ICONEXCLAMATION | MB_OK, 0);
} else {
AfxMessageBox(IDS_GOTO_ERROR_PARSING_FPS, MB_ICONEXCLAMATION | MB_OK, 0);
diff --git a/src/mpc-hc/GraphThread.cpp b/src/mpc-hc/GraphThread.cpp
index 61b4a40ec..69d8a8d36 100644
--- a/src/mpc-hc/GraphThread.cpp
+++ b/src/mpc-hc/GraphThread.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#include "stdafx.h"
#include "MainFrm.h"
#include "GraphThread.h"
+#include <afxsock.h>
IMPLEMENT_DYNCREATE(CGraphThread, CWinThread)
@@ -54,7 +55,7 @@ void CGraphThread::OnClose(WPARAM wParam, LPARAM lParam)
if (m_pMainFrame->GetLoadState() == MLS::CLOSING) {
m_pMainFrame->CloseMediaPrivate();
}
- VERIFY(m_pMainFrame->m_evClosePrivateFinished.SetEvent());
+ VERIFY(m_pMainFrame->m_evClosePrivateFinished.Set());
}
void CGraphThread::OnDisplayChange(WPARAM wParam, LPARAM lParam)
@@ -84,7 +85,7 @@ void CGraphThread::OnOpen(WPARAM wParam, LPARAM lParam)
CAutoPtr<OpenMediaData> pOMD((OpenMediaData*)lParam);
m_pMainFrame->OpenMediaPrivate(pOMD);
}
- VERIFY(m_pMainFrame->m_evOpenPrivateFinished.SetEvent());
+ VERIFY(m_pMainFrame->m_evOpenPrivateFinished.Set());
}
void CGraphThread::OnReset(WPARAM wParam, LPARAM lParam)
diff --git a/src/mpc-hc/IGraphBuilder2.h b/src/mpc-hc/IGraphBuilder2.h
index 0825c98b9..f2aedfdd8 100644
--- a/src/mpc-hc/IGraphBuilder2.h
+++ b/src/mpc-hc/IGraphBuilder2.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,8 @@
#pragma once
+class CMediaType;
+
interface __declspec(uuid("165BE9D6-0929-4363-9BA3-580D735AA0F6"))
IGraphBuilder2 :
public IFilterGraph2 {
@@ -49,8 +51,8 @@ IBDATuner :
public IUnknown {
STDMETHOD(SetChannel)(int nChannelPrefNumber) PURE;
STDMETHOD(SetAudio)(int nAudioIndex) PURE;
- STDMETHOD(SetFrequency)(ULONG ulFrequency) PURE;
- STDMETHOD(Scan)(ULONG ulFrequency, HWND hWnd) PURE;
+ STDMETHOD(SetFrequency)(ULONG ulFrequency, ULONG ulBandwidth) PURE;
+ STDMETHOD(Scan)(ULONG ulFrequency, ULONG ulBandwidth, HWND hWnd) PURE;
STDMETHOD(GetStats)(BOOLEAN & bPresent, BOOLEAN & bLocked, LONG & lDbStrength, LONG & lPercentQuality) PURE;
STDMETHOD(UpdatePSI)(const class CDVBChannel * pChannel, struct EventDescriptor & NowNext) PURE;
};
diff --git a/src/mpc-hc/ISDb.cpp b/src/mpc-hc/ISDb.cpp
deleted file mode 100644
index 1c82fcd12..000000000
--- a/src/mpc-hc/ISDb.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include <atlpath.h>
-#include "ISDb.h"
-#include "mplayerc.h"
-
-#define PROBE_SIZE (64 * 1024)
-
-namespace ISDb
-{
- bool mpc_filehash(IFileSourceFilter* pFSF, filehash& fh)
- {
- CComQIPtr<IAsyncReader> pAR;
- if (CComQIPtr<IBaseFilter> pBF = pFSF) {
- BeginEnumPins(pBF, pEP, pPin)
- if (pAR = pPin) {
- break;
- }
- EndEnumPins;
- }
-
- if (!pAR || !pFSF) {
- return false;
- }
-
- LPOLESTR name;
- if (FAILED(pFSF->GetCurFile(&name, nullptr))) {
- return false;
- }
- fh.name = name;
- CoTaskMemFree(name);
-
- LONGLONG size, available;
- if (pAR->Length(&size, &available) != S_OK) { // Don't accept estimates
- return false;
- }
- fh.size = size;
-
- fh.mpc_filehash = fh.size;
- LONGLONG position = 0;
- for (UINT64 tmp = 0, i = 0; i < PROBE_SIZE / sizeof(tmp) && SUCCEEDED(pAR->SyncRead(position, sizeof(tmp), (BYTE*)&tmp)); fh.mpc_filehash += tmp, position += sizeof(tmp), i++) {
- ;
- }
- position = std::max(0ll, (INT64)fh.size - PROBE_SIZE);
- for (UINT64 tmp = 0, i = 0; i < PROBE_SIZE / sizeof(tmp) && SUCCEEDED(pAR->SyncRead(position, sizeof(tmp), (BYTE*)&tmp)); fh.mpc_filehash += tmp, position += sizeof(tmp), i++) {
- ;
- }
-
- return true;
- }
-
- bool mpc_filehash(LPCTSTR fn, filehash& fh)
- {
- CFile f;
- CFileException fe;
- if (!f.Open(fn, CFile::modeRead | CFile::osSequentialScan | CFile::shareDenyNone, &fe)) {
- return false;
- }
-
- CPath p(fn);
- p.StripPath();
- fh.name = (LPCTSTR)p;
-
- fh.size = f.GetLength();
-
- fh.mpc_filehash = fh.size;
- for (UINT64 tmp = 0, i = 0; i < PROBE_SIZE / sizeof(tmp) && f.Read(&tmp, sizeof(tmp)); fh.mpc_filehash += tmp, i++) {
- ;
- }
- f.Seek(std::max(0ll, (INT64)fh.size - PROBE_SIZE), CFile::begin);
- for (UINT64 tmp = 0, i = 0; i < PROBE_SIZE / sizeof(tmp) && f.Read(&tmp, sizeof(tmp)); fh.mpc_filehash += tmp, i++) {
- ;
- }
-
- return true;
- }
-
- void mpc_filehash(CPlaylist& pl, CList<filehash>& fhs)
- {
- fhs.RemoveAll();
-
- POSITION pos = pl.GetHeadPosition();
- while (pos) {
- CString fn = pl.GetNext(pos).m_fns.GetHead();
- if (AfxGetAppSettings().m_Formats.FindExt(CPath(fn).GetExtension().MakeLower(), true)) {
- continue;
- }
-
- filehash fh;
- if (!mpc_filehash(fn, fh)) {
- continue;
- }
-
- fhs.AddTail(fh);
- }
- }
-
- CStringA makeargs(CPlaylist& pl)
- {
- CList<filehash> fhs;
- mpc_filehash(pl, fhs);
-
- CAtlList<CStringA> args;
-
- POSITION pos = fhs.GetHeadPosition();
- for (int i = 0; pos; i++) {
- filehash& fh = fhs.GetNext(pos);
-
- CStringA str;
- str.Format("name[%d]=%s&size[%d]=%016I64x&hash[%d]=%016I64x",
- i, UrlEncode(CStringA(fh.name)),
- i, fh.size,
- i, fh.mpc_filehash);
-
- args.AddTail(str);
- }
-
- return Implode(args, '&');
- }
-}
diff --git a/src/mpc-hc/ISDb.h b/src/mpc-hc/ISDb.h
deleted file mode 100644
index 4c31566a7..000000000
--- a/src/mpc-hc/ISDb.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include <atlcoll.h>
-#include <afxinet.h>
-#include "Playlist.h"
-
-
-#define ISDb_PROTOCOL_VERSION 1
-
-namespace ISDb
-{
- struct subtitle {
- int id, discs, disc_no;
- CStringA name, format, language, iso639_2, nick, email;
- struct subtitle() {
- reset();
- }
- void reset() {
- id = discs = disc_no = 0;
- format = language = nick = email = "";
- }
- };
-
- struct movie {
- CAtlList<CStringA> titles;
- CAtlList<subtitle> subs;
- void reset() {
- titles.RemoveAll();
- subs.RemoveAll();
- }
- movie& operator = (const struct movie& m) {
- if (this != &m) {
- titles.RemoveAll();
- titles.AddTailList(&m.titles);
- subs.RemoveAll();
- subs.AddTailList(&m.subs);
- }
- return *this;
- }
- };
-
- struct filehash {
- CString name;
- UINT64 size, mpc_filehash;
- };
-
- extern bool mpc_filehash(IFileSourceFilter* pFSF, filehash& fh);
- extern bool mpc_filehash(LPCTSTR fn, filehash& fh);
- extern void mpc_filehash(CPlaylist& pl, CList<filehash>& fhs);
- extern CStringA makeargs(CPlaylist& pl);
-}
diff --git a/src/mpc-hc/Ifo.cpp b/src/mpc-hc/Ifo.cpp
index 919f94b50..217170c4e 100644
--- a/src/mpc-hc/Ifo.cpp
+++ b/src/mpc-hc/Ifo.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2008-2013 see Authors.txt
+ * (C) 2008-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -86,9 +86,9 @@ uint32_t get4bytes(const BYTE* buf)
CIfo::CIfo()
: m_pBuffer(nullptr)
+ , m_dwSize(0)
, m_pPGCI(nullptr)
, m_pPGCIT(nullptr)
- , m_dwSize(0)
{
}
diff --git a/src/mpc-hc/Ifo.h b/src/mpc-hc/Ifo.h
index 8d02e5ede..86e63a532 100644
--- a/src/mpc-hc/Ifo.h
+++ b/src/mpc-hc/Ifo.h
@@ -1,5 +1,5 @@
/*
- * (C) 2008-2013 see Authors.txt
+ * (C) 2008-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,7 +20,7 @@
#pragma once
-#include <stdint.h>
+#include <cstdint>
#pragma pack(push, 1)
diff --git a/src/mpc-hc/ImageGrayer.cpp b/src/mpc-hc/ImageGrayer.cpp
new file mode 100644
index 000000000..67e4074cf
--- /dev/null
+++ b/src/mpc-hc/ImageGrayer.cpp
@@ -0,0 +1,137 @@
+/*
+* (C) 2016 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "stdafx.h"
+#include "ImageGrayer.h"
+
+struct HLS {
+ double H, L, S;
+
+ HLS(const RGBQUAD& rgb) {
+ double R = rgb.rgbRed / 255.0;
+ double G = rgb.rgbGreen / 255.0;
+ double B = rgb.rgbBlue / 255.0;
+ double max = std::max({ R, G, B });
+ double min = std::min({ R, G, B });
+
+ L = (max + min) / 2.0;
+
+ if (max == min) {
+ S = H = 0.0;
+ } else {
+ double d = max - min;
+
+ S = (L < 0.5) ? (d / (max + min)) : (d / (2.0 - max - min));
+
+ if (R == max) {
+ H = (G - B) / d;
+ } else if (G == max) {
+ H = 2.0 + (B - R) / d;
+ } else { // if (B == max)
+ H = 4.0 + (R - G) / d;
+ }
+ H /= 6.0;
+ if (H < 0.0) {
+ H += 1.0;
+ }
+ }
+ }
+
+ RGBQUAD toRGBQUAD() {
+ RGBQUAD rgb;
+ rgb.rgbReserved = 255;
+
+ if (S == 0.0) {
+ rgb.rgbRed = rgb.rgbGreen = rgb.rgbBlue = BYTE(L * 255);
+ } else {
+ auto hue2rgb = [](double p, double q, double h) {
+ if (h < 0.0) {
+ h += 1.0;
+ } else if (h > 1.0) {
+ h -= 1.0;
+ }
+
+ if (h < 1.0 / 6.0) {
+ return p + (q - p) * 6.0 * h;
+ } else if (h < 0.5) {
+ return q;
+ } else if (h < 2.0 / 3.0) {
+ return p + (q - p) * (2.0 / 3.0 - h) * 6.0;
+ }
+ return p;
+ };
+
+ double q = (L < 0.5) ? (L * (1 + S)) : (L + S - L * S);
+ double p = 2 * L - q;
+
+ rgb.rgbRed = BYTE(hue2rgb(p, q, H + 1.0 / 3.0) * 255);
+ rgb.rgbGreen = BYTE(hue2rgb(p, q, H) * 255);
+ rgb.rgbBlue = BYTE(hue2rgb(p, q, H - 1.0 / 3.0) * 255);
+ }
+
+ return rgb;
+ }
+};
+
+bool ImageGrayer::Gray(const CImage& imgSource, CImage& imgDest)
+{
+ // Only support 32-bit image for now
+ if (imgSource.GetBPP() != 32) {
+ return false;
+ }
+
+ imgDest.Destroy();
+ if (!imgDest.Create(imgSource.GetWidth(), imgSource.GetHeight(), imgSource.GetBPP())) {
+ return false;
+ }
+ BOOL bCopied = imgSource.BitBlt(imgDest.GetDC(), 0, 0);
+ imgDest.ReleaseDC();
+ if (!bCopied) {
+ return false;
+ }
+
+ auto adjustBrightness = [](BYTE c, double p) {
+ int cAdjusted;
+ if (c == 0 && p > 1.0) {
+ cAdjusted = std::lround((p - 1.0) * 255);
+ } else {
+ cAdjusted = std::lround(c * p);
+ }
+
+ return BYTE(std::min(cAdjusted, 255));
+ };
+
+ BYTE* bits = static_cast<BYTE*>(imgDest.GetBits());
+ for (int y = 0; y < imgDest.GetHeight(); y++, bits += imgDest.GetPitch()) {
+ RGBQUAD* p = reinterpret_cast<RGBQUAD*>(bits);
+ for (int x = 0; x < imgDest.GetWidth(); x++) {
+ HLS hls(p[x]);
+ hls.S = 0.0; // Make the color gray
+
+ RGBQUAD rgb = hls.toRGBQUAD();
+
+ p[x].rgbRed = BYTE(adjustBrightness(rgb.rgbRed, 1.5) * p[x].rgbReserved / 255);
+ p[x].rgbGreen = BYTE(adjustBrightness(rgb.rgbGreen, 1.5) * p[x].rgbReserved / 255);
+ p[x].rgbBlue = BYTE(adjustBrightness(rgb.rgbBlue, 1.5) * p[x].rgbReserved / 255);
+ }
+ }
+
+ return true;
+}
diff --git a/src/mpc-hc/ImageGrayer.h b/src/mpc-hc/ImageGrayer.h
new file mode 100644
index 000000000..1db116c50
--- /dev/null
+++ b/src/mpc-hc/ImageGrayer.h
@@ -0,0 +1,26 @@
+/*
+* (C) 2016 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#pragma once
+
+namespace ImageGrayer
+{
+ bool Gray(const CImage& imgSource, CImage& imgDest);
+}
diff --git a/src/mpc-hc/InternalFiltersConfig.h b/src/mpc-hc/InternalFiltersConfig.h
index 8ad417d7e..5287a06a0 100644
--- a/src/mpc-hc/InternalFiltersConfig.h
+++ b/src/mpc-hc/InternalFiltersConfig.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -37,13 +37,15 @@
#define INTERNAL_SOURCEFILTER_CDDA INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_CDXA INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_DSM INTERNAL_FILTERS_ENABLED
-#define INTERNAL_SOURCEFILTER_DTSAC3 INTERNAL_FILTERS_ENABLED
+#define INTERNAL_SOURCEFILTER_AC3 INTERNAL_FILTERS_ENABLED
+#define INTERNAL_SOURCEFILTER_DTS INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_VTS INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_FLIC INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_FLAC INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_FLV INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_GIF INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_ASF INTERNAL_FILTERS_ENABLED
+#define INTERNAL_SOURCEFILTER_WTV INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_MATROSKA INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_MP4 INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_OGG INTERNAL_FILTERS_ENABLED
@@ -56,7 +58,10 @@
#define INTERNAL_SOURCEFILTER_RTSP INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_MMS INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_RTMP INTERNAL_FILTERS_ENABLED
-#define INTERNAL_SOURCEFILTER_AVI2AC3 INTERNAL_FILTERS_ENABLED
+// This filter is broken (wrong timestamps after seeking, maybe more).
+// Additionally, it's not present on "Internal Filters" configuration page.
+// Disabling it for now to see if anyone needs it.
+//#define INTERNAL_SOURCEFILTER_AVI2AC3 INTERNAL_FILTERS_ENABLED
#define INTERNAL_SOURCEFILTER_RFS INTERNAL_FILTERS_ENABLED
// Internal audio decoders
@@ -75,6 +80,7 @@
#define INTERNAL_DECODER_AMR INTERNAL_FILTERS_ENABLED
#define INTERNAL_DECODER_ADPCM INTERNAL_FILTERS_ENABLED
#define INTERNAL_DECODER_FLAC INTERNAL_FILTERS_ENABLED
+#define INTERNAL_DECODER_OPUS INTERNAL_FILTERS_ENABLED
// Internal video decoders
#define INTERNAL_DECODER_MPEG1 INTERNAL_FILTERS_ENABLED
@@ -99,25 +105,27 @@
#define INTERNAL_DECODER_INDEO INTERNAL_FILTERS_ENABLED
#define INTERNAL_DECODER_SCREEN INTERNAL_FILTERS_ENABLED
#define INTERNAL_DECODER_FLIC INTERNAL_FILTERS_ENABLED
+#define INTERNAL_DECODER_MSVIDEO INTERNAL_FILTERS_ENABLED
#define INTERNAL_DECODER_V210_V410 INTERNAL_FILTERS_ENABLED
// Groups
#define HAS_SOURCEFILTERS \
- (INTERNAL_SOURCEFILTER_AVI || INTERNAL_SOURCEFILTER_CDDA || INTERNAL_SOURCEFILTER_CDXA || INTERNAL_SOURCEFILTER_DSM || INTERNAL_SOURCEFILTER_DTSAC3 || \
- INTERNAL_SOURCEFILTER_VTS || INTERNAL_SOURCEFILTER_FLIC || INTERNAL_SOURCEFILTER_FLAC || INTERNAL_SOURCEFILTER_FLV || INTERNAL_SOURCEFILTER_ASF || \
- INTERNAL_SOURCEFILTER_MATROSKA || INTERNAL_SOURCEFILTER_MP4 || INTERNAL_SOURCEFILTER_OGG || INTERNAL_SOURCEFILTER_MPEGAUDIO || INTERNAL_SOURCEFILTER_MPEG || \
- INTERNAL_SOURCEFILTER_REALMEDIA || INTERNAL_SOURCEFILTER_HTTP || INTERNAL_SOURCEFILTER_UDP ||INTERNAL_SOURCEFILTER_RTP || INTERNAL_SOURCEFILTER_RTSP || \
- INTERNAL_SOURCEFILTER_AVI2AC3 || INTERNAL_SOURCEFILTER_RFS || INTERNAL_SOURCEFILTER_RTSP || INTERNAL_SOURCEFILTER_MMS || INTERNAL_SOURCEFILTER_RTMP || \
- INTERNAL_SOURCEFILTER_AVS || INTERNAL_SOURCEFILTER_GIF)
+ (INTERNAL_SOURCEFILTER_AVI || INTERNAL_SOURCEFILTER_CDDA || INTERNAL_SOURCEFILTER_CDXA || INTERNAL_SOURCEFILTER_DSM || INTERNAL_SOURCEFILTER_AC3 || \
+ INTERNAL_SOURCEFILTER_DTS || INTERNAL_SOURCEFILTER_VTS || INTERNAL_SOURCEFILTER_FLIC || INTERNAL_SOURCEFILTER_FLAC || INTERNAL_SOURCEFILTER_FLV || \
+ INTERNAL_SOURCEFILTER_ASF ||INTERNAL_SOURCEFILTER_WTV || INTERNAL_SOURCEFILTER_MATROSKA || INTERNAL_SOURCEFILTER_MP4 || INTERNAL_SOURCEFILTER_OGG || \
+ INTERNAL_SOURCEFILTER_MPEGAUDIO || INTERNAL_SOURCEFILTER_MPEG || INTERNAL_SOURCEFILTER_REALMEDIA || INTERNAL_SOURCEFILTER_HTTP || INTERNAL_SOURCEFILTER_UDP || \
+ INTERNAL_SOURCEFILTER_RTP || INTERNAL_SOURCEFILTER_RTSP || INTERNAL_SOURCEFILTER_AVI2AC3 || INTERNAL_SOURCEFILTER_RFS || INTERNAL_SOURCEFILTER_RTSP || \
+ INTERNAL_SOURCEFILTER_MMS || INTERNAL_SOURCEFILTER_RTMP || INTERNAL_SOURCEFILTER_AVS || INTERNAL_SOURCEFILTER_GIF)
#define HAS_AUDIO_DECODERS \
(INTERNAL_DECODER_LPCM || INTERNAL_DECODER_PS2AUDIO || INTERNAL_DECODER_REALAUDIO || INTERNAL_DECODER_PCM || INTERNAL_DECODER_AC3 || \
INTERNAL_DECODER_AAC || INTERNAL_DECODER_ALAC || INTERNAL_DECODER_ALS || INTERNAL_DECODER_DTS || INTERNAL_DECODER_MPEGAUDIO || \
- INTERNAL_DECODER_VORBIS || INTERNAL_DECODER_NELLYMOSER || INTERNAL_DECODER_AMR || INTERNAL_DECODER_ADPCM || INTERNAL_DECODER_FLAC)
+ INTERNAL_DECODER_VORBIS || INTERNAL_DECODER_NELLYMOSER || INTERNAL_DECODER_AMR || INTERNAL_DECODER_ADPCM || INTERNAL_DECODER_FLAC || \
+ INTERNAL_DECODER_OPUS)
#define HAS_VIDEO_DECODERS \
(INTERNAL_DECODER_MPEG1 || INTERNAL_DECODER_MPEG2 || INTERNAL_DECODER_REALVIDEO || INTERNAL_DECODER_H264 || INTERNAL_DECODER_HEVC || INTERNAL_DECODER_VC1 || \
INTERNAL_DECODER_FLV || INTERNAL_DECODER_DIVX || INTERNAL_DECODER_XVID || INTERNAL_DECODER_WMV || INTERNAL_DECODER_MSMPEG4 || INTERNAL_DECODER_SVQ || \
INTERNAL_DECODER_H263 || INTERNAL_DECODER_THEORA || INTERNAL_DECODER_AMVV || INTERNAL_DECODER_VP356 || INTERNAL_DECODER_VP8 || INTERNAL_DECODER_VP9 || \
- INTERNAL_DECODER_MJPEG || INTERNAL_DECODER_INDEO || INTERNAL_DECODER_SCREEN || INTERNAL_DECODER_V210_V410)
+ INTERNAL_DECODER_MJPEG || INTERNAL_DECODER_INDEO || INTERNAL_DECODER_SCREEN || INTERNAL_DECODER_V210_V410 || INTERNAL_DECODER_MSVIDEO)
diff --git a/src/mpc-hc/LcdSupport.cpp b/src/mpc-hc/LcdSupport.cpp
index 9e64b518d..ad36171d3 100644
--- a/src/mpc-hc/LcdSupport.cpp
+++ b/src/mpc-hc/LcdSupport.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -657,7 +657,13 @@ void CMPC_Lcd::SetVolume(__int64 nVol)
//handle 64bit integers LCDUI only supports int for Range
//Since it also supports floats for position,
//This will always work in percentage
- float fVol = ((float)(nVol - m_nVolumeStart) * 100) / (float)(m_nVolumeStop - m_nVolumeStart);
+ float fVol;
+ if (m_nVolumeStart != m_nVolumeStop) {
+ fVol = float(nVol - m_nVolumeStart) * 100.0f / float(m_nVolumeStop - m_nVolumeStart);
+ } else {
+ fVol = 0.0f;
+ ASSERT(FALSE); // This isn't supposed to happen
+ }
EnterCriticalSection(&cs);
m_MonoPage.m_ProgBar[0].SetPos(fVol);
@@ -681,7 +687,12 @@ void CMPC_Lcd::SetMediaPos(__int64 nPos)
//handle 64bit integers LCDUI only supports int for Range
//Since it also supports floats for position,
//This will always work in percentage
- float fPos = ((float)(nPos - m_nMediaStart) * 100) / (float)(m_nMediaStop - m_nMediaStart);
+ float fPos;
+ if (m_nMediaStart != m_nMediaStop) {
+ fPos = float(nPos - m_nMediaStart) * 100.0f / float(m_nMediaStop - m_nMediaStart);
+ } else { // The duration might be unknown
+ fPos = 0.0f;
+ }
EnterCriticalSection(&cs);
m_MonoPage.m_ProgBar[1].SetPos(fPos);
diff --git a/src/mpc-hc/LcdSupport.h b/src/mpc-hc/LcdSupport.h
index 1a73fbf76..c66ab2437 100644
--- a/src/mpc-hc/LcdSupport.h
+++ b/src/mpc-hc/LcdSupport.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2012, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,7 +21,6 @@
#pragma once
-#include <Windows.h>
#include "lglcd/lglcd.h"
#include "LCDUI/LCDUI.h"
diff --git a/src/mpc-hc/Logger.h b/src/mpc-hc/Logger.h
new file mode 100644
index 000000000..448de65f0
--- /dev/null
+++ b/src/mpc-hc/Logger.h
@@ -0,0 +1,104 @@
+/*
+ * (C) 2015-2017 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include "PathUtils.h"
+#include "mplayerc.h"
+
+enum class LogTargets {
+ BDA,
+ SUBTITLES
+};
+
+namespace
+{
+ template<LogTargets TARGET>
+ constexpr LPCTSTR GetFileName();
+
+ template<>
+ constexpr LPCTSTR GetFileName<LogTargets::BDA>()
+ {
+ return _T("bda.log");
+ }
+
+ template<>
+ constexpr LPCTSTR GetFileName<LogTargets::SUBTITLES>()
+ {
+ return _T("subtitles.log");
+ }
+
+ void WriteToFile(FILE* f, LPCSTR function, LPCSTR file, int line, _In_z_ _Printf_format_string_ LPCTSTR fmt, va_list& args)
+ {
+ SYSTEMTIME local_time;
+ GetLocalTime(&local_time);
+
+ _ftprintf_s(f, _T("%.2hu:%.2hu:%.2hu.%.3hu - %S: "), local_time.wHour, local_time.wMinute,
+ local_time.wSecond, local_time.wMilliseconds, function);
+ _vftprintf_s(f, fmt, args);
+ _ftprintf_s(f, _T(" (%S:%d)\n"), file, line);
+ }
+}
+
+template<LogTargets TARGET>
+struct Logger final {
+ static void Log(LPCSTR function, LPCSTR file, int line, LPCTSTR fmt...) {
+ static Logger logger;
+
+ if (!logger.m_file) {
+ return;
+ }
+
+ va_list args;
+ va_start(args, fmt);
+ WriteToFile(logger.m_file, function, file, line, fmt, args);
+ va_end(args);
+ }
+
+private:
+ Logger() {
+ const auto& s = AfxGetAppSettings();
+ // Check if logging is enabled only during initialization to avoid incomplete logs
+ ASSERT(s.IsInitialized());
+ CString savePath;
+ if (s.bEnableLogging && AfxGetMyApp()->GetAppSavePath(savePath)) {
+ if (!PathUtils::Exists(savePath)) {
+ ::CreateDirectory(savePath, nullptr);
+ }
+ m_file = _tfsopen(PathUtils::CombinePaths(savePath, GetFileName<TARGET>()), _T("at"), SH_DENYWR);
+ } else {
+ m_file = nullptr;
+ }
+ ASSERT(!s.bEnableLogging || m_file);
+ }
+
+ ~Logger() {
+ if (m_file) {
+ fclose(m_file);
+ }
+ }
+
+ FILE* m_file;
+};
+
+
+#define MPCHC_LOG(TARGET, fmt, ...) Logger<LogTargets::TARGET>::Log(__FUNCTION__, __FILE__, __LINE__, fmt, __VA_ARGS__)
+#define BDA_LOG(...) MPCHC_LOG(BDA, __VA_ARGS__)
+#define SUBTITLES_LOG(...) MPCHC_LOG(SUBTITLES, __VA_ARGS__)
diff --git a/src/mpc-hc/MPCPngImage.cpp b/src/mpc-hc/MPCPngImage.cpp
index 3bfbd73d5..e4b6ba6ea 100644
--- a/src/mpc-hc/MPCPngImage.cpp
+++ b/src/mpc-hc/MPCPngImage.cpp
@@ -8,18 +8,6 @@
CImage* CMPCPngImage::m_pImage;
//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-CMPCPngImage::CMPCPngImage()
-{
-}
-
-CMPCPngImage::~CMPCPngImage()
-{
-}
-
-//////////////////////////////////////////////////////////////////////
// Operations
//////////////////////////////////////////////////////////////////////
@@ -112,3 +100,13 @@ BOOL CMPCPngImage::LoadFromBuffer(const LPBYTE lpBuffer, UINT uiSize)
return bRes;
}
+
+CSize CMPCPngImage::GetSize()
+{
+ CSize size;
+ BITMAP bm;
+ if (GetBitmap(&bm)) {
+ size.SetSize(bm.bmWidth, bm.bmHeight);
+ }
+ return size;
+}
diff --git a/src/mpc-hc/MPCPngImage.h b/src/mpc-hc/MPCPngImage.h
index 91129a3e9..47448a7ff 100644
--- a/src/mpc-hc/MPCPngImage.h
+++ b/src/mpc-hc/MPCPngImage.h
@@ -6,8 +6,8 @@ class CMPCPngImage : public CBitmap
{
// Construction/Destruction
public:
- CMPCPngImage();
- virtual ~CMPCPngImage();
+ CMPCPngImage() = default;
+ virtual ~CMPCPngImage() = default;
// Attributes:
protected:
@@ -21,6 +21,8 @@ public:
BOOL LoadFromFile(LPCTSTR lpszPath);
BOOL LoadFromBuffer(const LPBYTE lpBuffer, UINT uiSize);
+ CSize GetSize();
+
static void __stdcall CleanUp() {
SAFE_DELETE(m_pImage);
}
diff --git a/src/mpc-hc/MainFrm.cpp b/src/mpc-hc/MainFrm.cpp
index 4661c082e..174b86a7e 100644
--- a/src/mpc-hc/MainFrm.cpp
+++ b/src/mpc-hc/MainFrm.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,91 +20,92 @@
*/
#include "stdafx.h"
-#include "mplayerc.h"
#include "MainFrm.h"
+#include "mplayerc.h"
-#include <math.h>
-#include <algorithm>
-#include <set>
-
-#include <afxglobals.h>
-#include <afxpriv.h>
-#include <atlconv.h>
-#include <atlsync.h>
+#include "GraphThread.h"
+#include "FGFilterLAV.h"
+#include "FGManager.h"
+#include "FGManagerBDA.h"
+#include "QuicktimeGraph.h"
+#include "RealMediaGraph.h"
+#include "ShockwaveGraph.h"
+#include "TextPassThruFilter.h"
+#include "FakeFilterMapper2.h"
-#include "mpc-hc_config.h"
-#include "SysVersion.h"
-#include "WinAPIUtils.h"
-#include "PathUtils.h"
-#include "OpenFileDlg.h"
-#include "OpenDlg.h"
-#include "SaveDlg.h"
+#include "FavoriteAddDlg.h"
+#include "FavoriteOrganizeDlg.h"
#include "GoToDlg.h"
-#include "PnSPresetsDlg.h"
#include "MediaTypesDlg.h"
-#include "SaveTextFileDialog.h"
-#include "SaveSubtitlesFileDialog.h"
+#include "OpenFileDlg.h"
+#include "PnSPresetsDlg.h"
+#include "SaveDlg.h"
#include "SaveImageDialog.h"
+#include "SaveSubtitlesFileDialog.h"
#include "SaveThumbnailsDialog.h"
-#include "FavoriteAddDlg.h"
-#include "FavoriteOrganizeDlg.h"
-#include "FullscreenWnd.h"
-#include "TunerScanDlg.h"
#include "OpenDirHelper.h"
-#include "SubtitleDlDlg.h"
-#include "ISDb.h"
+#include "OpenDlg.h"
+#include "TunerScanDlg.h"
+
+#include "ComPropertySheet.h"
+#include "PPageAccelTbl.h"
+#include "PPageAudioSwitcher.h"
+#include "PPageFileInfoSheet.h"
+#include "PPageSheet.h"
+#include "PPageSubStyle.h"
+#include "PPageSubtitles.h"
+
+#include "CoverArt.h"
+#include "CrashReporter.h"
+#include "KeyProvider.h"
+#include "SkypeMoodMsgHandler.h"
+#include "Translations.h"
#include "UpdateChecker.h"
-#include "UpdateCheckerDlg.h"
-#include "WinapiFunc.h"
+#include "WebServer.h"
+#include <ISOLang.h>
+#include <PathUtils.h>
#include "../DeCSS/VobFile.h"
+#include "../Subtitles/PGSSub.h"
+#include "../Subtitles/RLECodedSubtitle.h"
+#include "../Subtitles/RTS.h"
+#include "../Subtitles/STS.h"
+#include <SubRenderIntf.h>
-#include "BaseClasses/mtype.h"
-#include <Mpconfig.h>
-#include <ks.h>
-#include <ksmedia.h>
-#include <dvdevcod.h>
-#include <dsound.h>
-
-#include <InitGuid.h>
-#include <uuids.h>
-#include "moreuuids.h"
-#include <qnetwork.h>
-#include <psapi.h>
+#include "../filters/InternalPropertyPage.h"
+#include "../filters/PinInfoWnd.h"
+#include "../filters/renderer/SyncClock/SyncClock.h"
+#include "../filters/transform/BufferFilter/BufferFilter.h"
+#include "../filters/transform/VSFilter/IDirectVobSub.h"
-#include "DSUtil.h"
-#include "text.h"
-#include "FGManager.h"
-#include "FGManagerBDA.h"
+#include <AllocatorCommon.h>
+#include <NullRenderers.h>
+#include <RARFileSource/library/RFS.h>
+#include <SyncAllocatorPresenter.h>
-#include "TextPassThruFilter.h"
-#include "../filters/Filters.h"
-#include "../filters/PinInfoWnd.h"
+#include "FullscreenWnd.h"
+#include "Monitors.h"
-#include "AllocatorCommon7.h"
-#include "AllocatorCommon.h"
-#include "SyncAllocatorPresenter.h"
+#include <WinAPIUtils.h>
+#include <WinapiFunc.h>
+#include <moreuuids.h>
-#include "ComPropertySheet.h"
-#include "LcdSupport.h"
-#include "SettingsDefines.h"
+#include <IBitRateInfo.h>
+#include <IChapterInfo.h>
+#include <IPinHook.h>
-#include "IPinHook.h"
+#include <mvrInterfaces.h>
-#include <comdef.h>
-#include "MPCPngImage.h"
-#include "DSMPropertyBag.h"
+#include <Il21dec.h>
+#include <dvdevcod.h>
+#include <dvdmedia.h>
+#include <strsafe.h>
-#include "../Subtitles/RTS.h"
-#include "../Subtitles/STS.h"
-#include "../Subtitles/RLECodedSubtitle.h"
-#include "../Subtitles/PGSSub.h"
+#include <initguid.h>
+#include <qnetwork.h>
-template<typename T>
-bool NEARLY_EQ(T a, T b, T tol)
-{
- return (abs(a - b) < tol);
-}
+// IID_IAMLine21Decoder
+DECLARE_INTERFACE_IID_(IAMLine21Decoder_2, IAMLine21Decoder, "6E8D4A21-310C-11d0-B79A-00AA003767A7") {};
#define MIN_LOGO_WIDTH 304
#define MIN_LOGO_HEIGHT 171
@@ -115,16 +116,11 @@ static UINT s_uTaskbarRestart = RegisterWindowMessage(_T("TaskbarCreated"));
static UINT WM_NOTIFYICON = RegisterWindowMessage(_T("MYWM_NOTIFYICON"));
static UINT s_uTBBC = RegisterWindowMessage(_T("TaskbarButtonCreated"));
-#include "../filters/transform/VSFilter/IDirectVobSub.h"
-
-#include "Monitors.h"
-#include "MultiMonitor.h"
-
#if USE_STATIC_MEDIAINFO
#include "MediaInfo/MediaInfo.h"
using namespace MediaInfoLib;
#else
-#include "MediaInfoDLL.h"
+#include "MediaInfoDLL/MediaInfoDLL.h"
using namespace MediaInfoDLL;
#endif
@@ -183,6 +179,8 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_MESSAGE_VOID(WM_DISPLAYCHANGE, OnDisplayChange)
ON_WM_WINDOWPOSCHANGING()
+ ON_MESSAGE(0x02E0, OnDpiChanged)
+
ON_WM_SYSCOMMAND()
ON_WM_ACTIVATEAPP()
ON_MESSAGE(WM_APPCOMMAND, OnAppCommand)
@@ -218,14 +216,13 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_MESSAGE(WM_POSTOPEN, OnFilePostOpenmedia)
ON_MESSAGE(WM_OPENFAILED, OnOpenMediaFailed)
+ ON_MESSAGE(WM_DVB_EIT_DATA_READY, OnCurrentChannelInfoUpdated)
ON_COMMAND(ID_BOSS, OnBossKey)
ON_COMMAND_RANGE(ID_STREAM_AUDIO_NEXT, ID_STREAM_AUDIO_PREV, OnStreamAudio)
ON_COMMAND_RANGE(ID_STREAM_SUB_NEXT, ID_STREAM_SUB_PREV, OnStreamSub)
ON_COMMAND(ID_STREAM_SUB_ONOFF, OnStreamSubOnOff)
- ON_COMMAND_RANGE(ID_OGM_AUDIO_NEXT, ID_OGM_AUDIO_PREV, OnOgmAudio)
- ON_COMMAND_RANGE(ID_OGM_SUB_NEXT, ID_OGM_SUB_PREV, OnOgmSub)
ON_COMMAND_RANGE(ID_DVD_ANGLE_NEXT, ID_DVD_ANGLE_PREV, OnDvdAngle)
ON_COMMAND_RANGE(ID_DVD_AUDIO_NEXT, ID_DVD_AUDIO_PREV, OnDvdAudio)
ON_COMMAND_RANGE(ID_DVD_SUB_NEXT, ID_DVD_SUB_PREV, OnDvdSub)
@@ -245,7 +242,6 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_OPEN_OPTICAL_DISK_START, ID_FILE_OPEN_OPTICAL_DISK_END, OnUpdateFileOpen)
ON_COMMAND(ID_FILE_REOPEN, OnFileReopen)
ON_COMMAND(ID_FILE_RECYCLE, OnFileRecycle)
- ON_WM_DROPFILES()
ON_COMMAND(ID_FILE_SAVE_COPY, OnFileSaveAs)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_COPY, OnUpdateFileSaveAs)
ON_COMMAND(ID_FILE_SAVE_IMAGE, OnFileSaveImage)
@@ -254,16 +250,14 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_IMAGE_AUTO, OnUpdateFileSaveImage)
ON_COMMAND(ID_FILE_SAVE_THUMBNAILS, OnFileSaveThumbnails)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_THUMBNAILS, OnUpdateFileSaveThumbnails)
- ON_COMMAND(ID_FILE_LOAD_SUBTITLE, OnFileLoadsubtitle)
- ON_UPDATE_COMMAND_UI(ID_FILE_LOAD_SUBTITLE, OnUpdateFileLoadsubtitle)
- ON_COMMAND(ID_FILE_SAVE_SUBTITLE, OnFileSavesubtitle)
- ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_SUBTITLE, OnUpdateFileSavesubtitle)
- ON_COMMAND(ID_FILE_ISDB_SEARCH, OnFileISDBSearch)
- ON_UPDATE_COMMAND_UI(ID_FILE_ISDB_SEARCH, OnUpdateFileISDBSearch)
- ON_COMMAND(ID_FILE_ISDB_UPLOAD, OnFileISDBUpload)
- ON_UPDATE_COMMAND_UI(ID_FILE_ISDB_UPLOAD, OnUpdateFileISDBUpload)
- ON_COMMAND(ID_FILE_ISDB_DOWNLOAD, OnFileISDBDownload)
- ON_UPDATE_COMMAND_UI(ID_FILE_ISDB_DOWNLOAD, OnUpdateFileISDBDownload)
+ ON_COMMAND(ID_FILE_SUBTITLES_LOAD, OnFileSubtitlesLoad)
+ ON_UPDATE_COMMAND_UI(ID_FILE_SUBTITLES_LOAD, OnUpdateFileSubtitlesLoad)
+ ON_COMMAND(ID_FILE_SUBTITLES_SAVE, OnFileSubtitlesSave)
+ ON_UPDATE_COMMAND_UI(ID_FILE_SUBTITLES_SAVE, OnUpdateFileSubtitlesSave)
+ ON_COMMAND(ID_FILE_SUBTITLES_UPLOAD, OnFileSubtitlesUpload)
+ ON_UPDATE_COMMAND_UI(ID_FILE_SUBTITLES_UPLOAD, OnUpdateFileSubtitlesUpload)
+ ON_COMMAND(ID_FILE_SUBTITLES_DOWNLOAD, OnFileSubtitlesDownload)
+ ON_UPDATE_COMMAND_UI(ID_FILE_SUBTITLES_DOWNLOAD, OnUpdateFileSubtitlesDownload)
ON_COMMAND(ID_FILE_PROPERTIES, OnFileProperties)
ON_UPDATE_COMMAND_UI(ID_FILE_PROPERTIES, OnUpdateFileProperties)
ON_COMMAND(ID_FILE_CLOSE_AND_RESTORE, OnFileCloseAndRestore)
@@ -310,8 +304,6 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND_RANGE(ID_VIEW_VF_HALF, ID_VIEW_VF_ZOOM2, OnViewDefaultVideoFrame)
ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_VF_HALF, ID_VIEW_VF_ZOOM2, OnUpdateViewDefaultVideoFrame)
ON_COMMAND(ID_VIEW_VF_SWITCHZOOM, OnViewSwitchVideoFrame)
- ON_COMMAND(ID_VIEW_VF_KEEPASPECTRATIO, OnViewKeepaspectratio)
- ON_UPDATE_COMMAND_UI(ID_VIEW_VF_KEEPASPECTRATIO, OnUpdateViewKeepaspectratio)
ON_COMMAND(ID_VIEW_VF_COMPMONDESKARDIFF, OnViewCompMonDeskARDiff)
ON_UPDATE_COMMAND_UI(ID_VIEW_VF_COMPMONDESKARDIFF, OnUpdateViewCompMonDeskARDiff)
ON_COMMAND_RANGE(ID_VIEW_RESET, ID_PANSCAN_CENTER, OnViewPanNScan)
@@ -330,9 +322,9 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
// Casimir666
ON_UPDATE_COMMAND_UI(ID_VIEW_TEARING_TEST, OnUpdateViewTearingTest)
ON_COMMAND(ID_VIEW_TEARING_TEST, OnViewTearingTest)
- ON_UPDATE_COMMAND_UI(ID_VIEW_DISPLAYSTATS, OnUpdateViewDisplayStats)
- ON_COMMAND(ID_VIEW_RESETSTATS, OnViewResetStats)
- ON_COMMAND(ID_VIEW_DISPLAYSTATS, OnViewDisplayStatsSC)
+ ON_UPDATE_COMMAND_UI(ID_VIEW_DISPLAY_RENDERER_STATS, OnUpdateViewDisplayRendererStats)
+ ON_COMMAND(ID_VIEW_RESET_RENDERER_STATS, OnViewResetRendererStats)
+ ON_COMMAND(ID_VIEW_DISPLAY_RENDERER_STATS, OnViewDisplayRendererStats)
ON_UPDATE_COMMAND_UI(ID_VIEW_FULLSCREENGUISUPPORT, OnUpdateViewFullscreenGUISupport)
ON_UPDATE_COMMAND_UI(ID_VIEW_HIGHCOLORRESOLUTION, OnUpdateViewHighColorResolution)
ON_UPDATE_COMMAND_UI(ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION, OnUpdateViewForceInputHighColorResolution)
@@ -415,8 +407,10 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND(ID_VIEW_VSYNCOFFSET_INCREASE, OnViewVSyncOffsetIncrease)
ON_COMMAND(ID_VIEW_VSYNCOFFSET_DECREASE, OnViewVSyncOffsetDecrease)
- ON_UPDATE_COMMAND_UI(ID_VIEW_REMAINING_TIME, OnUpdateViewRemainingTime)
- ON_COMMAND(ID_VIEW_REMAINING_TIME, OnViewRemainingTime)
+ ON_UPDATE_COMMAND_UI(ID_VIEW_OSD_DISPLAY_TIME, OnUpdateViewOSDDisplayTime)
+ ON_COMMAND(ID_VIEW_OSD_DISPLAY_TIME, OnViewOSDDisplayTime)
+ ON_UPDATE_COMMAND_UI(ID_VIEW_OSD_SHOW_FILENAME, OnUpdateViewOSDShowFileName)
+ ON_COMMAND(ID_VIEW_OSD_SHOW_FILENAME, OnViewOSDShowFileName)
ON_COMMAND(ID_D3DFULLSCREEN_TOGGLE, OnD3DFullscreenToggle)
ON_COMMAND_RANGE(ID_GOTO_PREV_SUB, ID_GOTO_NEXT_SUB, OnGotoSubtitle)
ON_COMMAND_RANGE(ID_SHIFT_SUB_DOWN, ID_SHIFT_SUB_UP, OnShiftSubtitle)
@@ -463,8 +457,14 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND_RANGE(ID_NORMALIZE, ID_REGAIN_VOLUME, OnNormalizeRegainVolume)
ON_UPDATE_COMMAND_UI_RANGE(ID_NORMALIZE, ID_REGAIN_VOLUME, OnUpdateNormalizeRegainVolume)
ON_COMMAND_RANGE(ID_COLOR_BRIGHTNESS_INC, ID_COLOR_RESET, OnPlayColor)
- ON_UPDATE_COMMAND_UI_RANGE(ID_AFTERPLAYBACK_CLOSE, ID_AFTERPLAYBACK_MONITOROFF, OnUpdateAfterplayback)
- ON_COMMAND_RANGE(ID_AFTERPLAYBACK_CLOSE, ID_AFTERPLAYBACK_MONITOROFF, OnAfterplayback)
+ ON_UPDATE_COMMAND_UI_RANGE(ID_AFTERPLAYBACK_EXIT, ID_AFTERPLAYBACK_MONITOROFF, OnUpdateAfterplayback)
+ ON_COMMAND_RANGE(ID_AFTERPLAYBACK_EXIT, ID_AFTERPLAYBACK_MONITOROFF, OnAfterplayback)
+ ON_UPDATE_COMMAND_UI_RANGE(ID_AFTERPLAYBACK_PLAYNEXT, ID_AFTERPLAYBACK_DONOTHING, OnUpdateAfterplayback)
+ ON_COMMAND_RANGE(ID_AFTERPLAYBACK_PLAYNEXT, ID_AFTERPLAYBACK_DONOTHING, OnAfterplayback)
+ ON_COMMAND_RANGE(ID_PLAY_REPEAT_ONEFILE, ID_PLAY_REPEAT_WHOLEPLAYLIST, OnPlayRepeat)
+ ON_UPDATE_COMMAND_UI_RANGE(ID_PLAY_REPEAT_ONEFILE, ID_PLAY_REPEAT_WHOLEPLAYLIST, OnUpdatePlayRepeat)
+ ON_COMMAND(ID_PLAY_REPEAT_FOREVER, OnPlayRepeatForever)
+ ON_UPDATE_COMMAND_UI(ID_PLAY_REPEAT_FOREVER, OnUpdatePlayRepeatForever)
ON_COMMAND_RANGE(ID_NAVIGATE_SKIPBACK, ID_NAVIGATE_SKIPFORWARD, OnNavigateSkip)
ON_UPDATE_COMMAND_UI_RANGE(ID_NAVIGATE_SKIPBACK, ID_NAVIGATE_SKIPFORWARD, OnUpdateNavigateSkip)
@@ -513,6 +513,9 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_UPDATE_COMMAND_UI(ID_VIEW_NAVIGATION, OnUpdateViewNavigation)
ON_WM_WTSSESSION_CHANGE()
+
+ ON_MESSAGE(WM_LOADSUBTITLES, OnLoadSubtitles)
+ ON_MESSAGE(WM_GETSUBTITLES, OnGetSubtitles)
END_MESSAGE_MAP()
#ifdef _DEBUG
@@ -669,6 +672,13 @@ void CMainFrame::EventCallback(MpcEvent ev)
break;
case MpcEvent::CHANGING_UI_LANGUAGE:
UpdateUILanguage();
+ if (CrashReporter::IsEnabled()) {
+ CrashReporter::Enable(Translations::GetLanguageResourceByLocaleID(s.language).dllPath);
+ }
+ break;
+ case MpcEvent::STREAM_POS_UPDATE_REQUEST:
+ OnTimer(TIMER_STREAMPOSPOLLER);
+ OnTimer(TIMER_STREAMPOSPOLLER2);
break;
default:
ASSERT(FALSE);
@@ -681,18 +691,41 @@ void CMainFrame::EventCallback(MpcEvent ev)
CMainFrame::CMainFrame()
: m_timer32Hz(this, TIMER_32HZ, 32)
, m_timerOneTime(this, TIMER_ONETIME_START, TIMER_ONETIME_END - TIMER_ONETIME_START + 1)
- , m_eMediaLoadState(MLS::CLOSED)
- , m_iPlaybackMode(PM_NONE)
- , m_bFirstPlay(false)
+ , m_bUsingDXVA(false)
+ , m_posFirstExtSub(nullptr)
+ , m_bDelaySetOutputRect(false)
+ , m_nJumpToSubMenusCount(0)
+ , m_nLoops(0)
+ , m_nLastSkipDirection(0)
+ , m_fCustomGraph(false)
+ , m_fRealMediaGraph(false)
+ , m_fShockwaveGraph(false)
+ , m_fQuicktimeGraph(false)
+ , m_fFrameSteppingActive(false)
+ , m_nStepForwardCount(0)
+ , m_rtStepForwardStart(0)
+ , m_nVolumeBeforeFrameStepping(0)
+ , m_fEndOfStream(false)
+ , m_bRememberFilePos(false)
, m_dwLastRun(0)
- , m_dSpeedRate(1.0)
+ , m_bBuffering(false)
+ , m_fLiveWM(false)
, m_rtDurationOverride(-1)
+ , m_iPlaybackMode(PM_NONE)
+ , m_lCurrentChapter(0)
+ , m_lChapterStartTime(0xFFFFFFFF)
+ , m_eMediaLoadState(MLS::CLOSED)
, m_fFullScreen(false)
, m_fFirstFSAfterLaunchOnFS(false)
+ , m_fStartInD3DFullscreen(false)
, m_pLastBar(nullptr)
- , m_nLoops(0)
- , m_nLastSkipDirection(0)
- , m_posFirstExtSub(nullptr)
+ , m_bFirstPlay(false)
+ , m_bOpeningInAutochangedMonitorMode(false)
+ , m_bPausedForAutochangeMonitorMode(false)
+ , m_fAudioOnly(true)
+ , m_iDVDDomain(DVD_DOMAIN_Stop)
+ , m_iDVDTitle(0)
+ , m_dSpeedRate(1.0)
, m_ZoomX(1)
, m_ZoomY(1)
, m_PosX(0.5)
@@ -700,72 +733,47 @@ CMainFrame::CMainFrame()
, m_AngleX(0)
, m_AngleY(0)
, m_AngleZ(0)
- , m_fCustomGraph(false)
- , m_fRealMediaGraph(false)
- , m_fShockwaveGraph(false)
- , m_fQuicktimeGraph(false)
- , m_fFrameSteppingActive(false)
- , m_fEndOfStream(false)
- , m_fCapturing(false)
- , m_fLiveWM(false)
- , m_fOpeningAborted(false)
- , m_fBuffering(false)
- , m_bUsingDXVA(false)
- , m_fileDropTarget(this)
- , m_bTrayIcon(false)
- , m_pFullscreenWnd(nullptr)
- , m_pVideoWnd(nullptr)
- , m_bRemainingTime(false)
- , m_nCurSubtitle(-1)
- , m_lSubtitleShift(0)
- , m_nStepForwardCount(0)
- , m_rtStepForwardStart(0)
- , m_lCurrentChapter(0)
- , m_lChapterStartTime(0xFFFFFFFF)
- , m_pTaskbarList(nullptr)
, m_pGraphThread(nullptr)
, m_bOpenedThroughThread(false)
, m_evOpenPrivateFinished(FALSE, TRUE)
, m_evClosePrivateFinished(FALSE, TRUE)
- , m_pActiveContextMenu(nullptr)
- , m_pActiveSystemMenu(nullptr)
+ , m_fOpeningAborted(false)
, m_bWasSnapped(false)
- , m_bIsBDPlay(false)
- , m_bLockedZoomVideoWindow(false)
- , m_nLockedZoomVideoWindow(0)
- , m_LastOpenBDPath(_T(""))
- , m_fStartInD3DFullscreen(false)
- , m_bRememberFilePos(false)
- , m_wndView(this)
- , m_bShowingFloatingMenubar(false)
+ , m_wndSubtitlesDownloadDialog(this)
+ , m_wndSubtitlesUploadDialog(this)
+ , m_bTrayIcon(false)
+ , m_fCapturing(false)
, m_controls(this)
+ , m_wndView(this)
, m_wndSeekBar(this)
, m_wndToolBar(this)
- , m_wndNavigationBar(this)
- , m_OSD(this)
- , m_bDelaySetOutputRect(false)
- , m_bOpeningInAutochangedMonitorMode(false)
- , m_bPausedForAutochangeMonitorMode(false)
- , m_wndPlaylistBar(this)
, m_wndInfoBar(this)
, m_wndStatsBar(this)
, m_wndStatusBar(this)
- , m_bAltDownClean(false)
- , m_nJumpToSubMenusCount(0)
- , m_nVolumeBeforeFrameStepping(0)
- , m_fAudioOnly(true)
- , m_LastWindow_HM(nullptr)
- , m_iDVDDomain(DVD_DOMAIN_Stop)
- , m_iDVDTitle(0)
+ , m_wndSubresyncBar(this)
+ , m_wndPlaylistBar(this)
+ , m_wndCaptureBar(this)
+ , m_wndNavigationBar(this)
+ , m_pVideoWnd(nullptr)
+ , m_pFullscreenWnd(nullptr)
+ , m_OSD(this)
+ , m_bOSDDisplayTime(false)
+ , m_nCurSubtitle(-1)
+ , m_lSubtitleShift(0)
, m_rtCurSubPos(0)
+ , m_bScanDlgOpened(false)
, m_bStopTunerScan(false)
- , m_fSetChannelActive(false)
+ , m_bLockedZoomVideoWindow(false)
+ , m_nLockedZoomVideoWindow(0)
+ , m_pActiveContextMenu(nullptr)
+ , m_pActiveSystemMenu(nullptr)
+ , m_bAltDownClean(false)
+ , m_bShowingFloatingMenubar(false)
, m_bAllowWindowZoom(false)
, m_dLastVideoScaleFactor(0)
- , m_nLastVideoWidth(0)
, m_bExtOnTop(false)
+ , m_bIsBDPlay(false)
{
- m_Lcd.SetVolumeRange(0, 100);
// Don't let CFrameWnd handle automatically the state of the menu items.
// This means that menu items without handlers won't be automatically
// disabled but it avoids some unwanted cases where programmatically
@@ -779,6 +787,7 @@ CMainFrame::CMainFrame()
receives.insert(MpcEvent::DISPLAY_MODE_AUTOCHANGING);
receives.insert(MpcEvent::DISPLAY_MODE_AUTOCHANGED);
receives.insert(MpcEvent::CHANGING_UI_LANGUAGE);
+ receives.insert(MpcEvent::STREAM_POS_UPDATE_REQUEST);
EventRouter::EventSelection fires;
fires.insert(MpcEvent::SWITCHING_TO_FULLSCREEN);
fires.insert(MpcEvent::SWITCHED_TO_FULLSCREEN);
@@ -793,6 +802,7 @@ CMainFrame::CMainFrame()
fires.insert(MpcEvent::CONTEXT_MENU_POPUP_UNINITIALIZED);
fires.insert(MpcEvent::SYSTEM_MENU_POPUP_INITIALIZED);
fires.insert(MpcEvent::SYSTEM_MENU_POPUP_UNINITIALIZED);
+ fires.insert(MpcEvent::DPI_CHANGED);
GetEventd().Connect(m_eventc, receives, std::bind(&CMainFrame::EventCallback, this, std::placeholders::_1), fires);
}
@@ -806,8 +816,12 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
return -1;
}
- const WinapiFunc<BOOL(HWND, UINT, DWORD, PCHANGEFILTERSTRUCT)>
- fnChangeWindowMessageFilterEx = { "user32.dll", "ChangeWindowMessageFilterEx" };
+ if (SysVersion::Is81OrLater()) {
+ m_dpi.Override(m_hWnd);
+ }
+
+ const WinapiFunc<decltype(ChangeWindowMessageFilterEx)>
+ fnChangeWindowMessageFilterEx = { _T("user32.dll"), "ChangeWindowMessageFilterEx" };
// allow taskbar messages through UIPI
if (fnChangeWindowMessageFilterEx) {
@@ -898,7 +912,7 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
pair.second->ShowWindow(SW_HIDE);
}
- m_fileDropTarget.Register(this);
+ m_dropTarget.Register(this);
const CAppSettings& s = AfxGetAppSettings();
@@ -906,7 +920,8 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
ShowTrayIcon(s.fTrayIcon);
- SetFocus();
+ m_Lcd.SetVolumeRange(0, 100);
+ m_Lcd.SetVolume(std::max(1, s.nVolume));
m_pGraphThread = (CGraphThread*)AfxBeginThread(RUNTIME_CLASS(CGraphThread));
@@ -914,6 +929,10 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
m_pGraphThread->SetMainFrame(this);
}
+ m_pSubtitlesProviders = std::make_unique<SubtitlesProviders>(this);
+ m_wndSubtitlesDownloadDialog.Create(m_wndSubtitlesDownloadDialog.IDD, this);
+ m_wndSubtitlesUploadDialog.Create(m_wndSubtitlesUploadDialog.IDD, this);
+
if (s.nCmdlnWebServerPort != 0) {
if (s.nCmdlnWebServerPort > 0) {
StartWebServer(s.nCmdlnWebServerPort);
@@ -935,7 +954,7 @@ void CMainFrame::OnDestroy()
{
WTSUnRegisterSessionNotification();
ShowTrayIcon(false);
- m_fileDropTarget.Revoke();
+ m_dropTarget.Revoke();
if (m_pDebugShaders && IsWindow(m_pDebugShaders->m_hWnd)) {
VERIFY(m_pDebugShaders->DestroyWindow());
@@ -984,62 +1003,6 @@ void CMainFrame::OnClose()
__super::OnClose();
}
-DROPEFFECT CMainFrame::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
-{
- return DROPEFFECT_NONE;
-}
-
-DROPEFFECT CMainFrame::OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
-{
- UpdateControlState(UPDATE_CONTROLS_VISIBILITY);
- UINT CF_URL = RegisterClipboardFormat(_T("UniformResourceLocator"));
- return pDataObject->IsDataAvailable(CF_URL) ? DROPEFFECT_COPY : DROPEFFECT_NONE;
-}
-
-BOOL CMainFrame::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point)
-{
- UINT CF_URL = RegisterClipboardFormat(_T("UniformResourceLocator"));
- BOOL bResult = FALSE;
-
- // If we are dropping a file, let OnDropFiles handle drag-and-drop
- if (!pDataObject->IsDataAvailable(CF_HDROP) && pDataObject->IsDataAvailable(CF_URL)) {
- FORMATETC fmt = {CF_URL, nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
- if (HGLOBAL hGlobal = pDataObject->GetGlobalData(CF_URL, &fmt)) {
- LPCSTR pText = (LPCSTR)GlobalLock(hGlobal);
- if (AfxIsValidString(pText)) {
- CStringA url(pText);
-
- SetForegroundWindow();
-
- CAtlList<CString> sl;
- sl.AddTail(CString(url));
-
- m_wndPlaylistBar.Open(sl, true);
- OpenCurPlaylistItem();
-
- GlobalUnlock(hGlobal);
- bResult = TRUE;
- }
- }
- }
-
- return bResult;
-}
-
-DROPEFFECT CMainFrame::OnDropEx(COleDataObject* pDataObject, DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point)
-{
- return (DROPEFFECT) - 1;
-}
-
-void CMainFrame::OnDragLeave()
-{
-}
-
-DROPEFFECT CMainFrame::OnDragScroll(DWORD dwKeyState, CPoint point)
-{
- return DROPEFFECT_NONE;
-}
-
LPCTSTR CMainFrame::GetRecentFile() const
{
CRecentFileList& MRU = AfxGetAppSettings().MRU;
@@ -1067,7 +1030,9 @@ LRESULT CMainFrame::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
switch ((UINT)lParam) {
case WM_LBUTTONDOWN:
- ShowWindow(SW_SHOW);
+ if (IsIconic()) {
+ ShowWindow(SW_RESTORE);
+ }
CreateThumbnailToolbar();
MoveVideoWindow();
SetForegroundWindow();
@@ -1124,9 +1089,9 @@ void CMainFrame::ShowTrayIcon(bool bShow)
if (m_bTrayIcon) {
Shell_NotifyIcon(NIM_DELETE, &nid);
m_bTrayIcon = false;
- if (!IsWindowVisible()) {
+ if (IsIconic()) {
// if the window was minimized to tray - show it
- ShowWindow(SW_SHOW);
+ ShowWindow(SW_RESTORE);
}
}
}
@@ -1187,7 +1152,7 @@ BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
}
}
- if ((m_dwMenuBarVisibility & AFX_MBV_DISPLAYONF10) && pMsg->message == WM_SYSKEYUP && pMsg->wParam == VK_F10 &&
+ if ((m_dwMenuBarVisibility & AFX_MBV_DISPLAYONFOCUS) && pMsg->message == WM_SYSKEYUP && pMsg->wParam == VK_F10 &&
m_dwMenuBarState == AFX_MBS_VISIBLE) {
// mfc doesn't hide menubar on f10, but we want to
VERIFY(SetMenuBarState(AFX_MBS_HIDDEN));
@@ -1287,54 +1252,45 @@ BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO*
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
auto setLarger = [](long & a, long b) {
- a = max(a, b);
+ a = std::max(a, b);
};
const long saneSize = 110;
+ const bool bMenuVisible = GetMenuBarVisibility() == AFX_MBV_KEEPVISIBLE || m_bShowingFloatingMenubar;
- {
- // Begin with docked controls
- lpMMI->ptMinTrackSize = CPoint(m_controls.GetDockZonesMinSize(saneSize));
- }
+ // Begin with docked controls
+ lpMMI->ptMinTrackSize = CPoint(m_controls.GetDockZonesMinSize(saneSize));
- if (GetMenuBarVisibility() == AFX_MBV_KEEPVISIBLE || m_bShowingFloatingMenubar) {
- // Add menubar height
- lpMMI->ptMinTrackSize.y += GetSystemMetrics(SM_CYMENU);
+ if (bMenuVisible) {
// Ensure that menubar will fit horizontally
MENUBARINFO mbi = { sizeof(mbi) };
- ::GetMenuBarInfo(m_hWnd, OBJID_MENU, 0, &mbi);
+ GetMenuBarInfo(OBJID_MENU, 0, &mbi);
long x = GetSystemMetrics(SM_CYMENU) / 2; // free space after menu
CRect rect;
- for (int i = 0; ::GetMenuItemRect(m_hWnd, mbi.hMenu, i, &rect); i++) {
+ for (int i = 0; GetMenuItemRect(m_hWnd, mbi.hMenu, i, &rect); i++) {
x += rect.Width();
}
setLarger(lpMMI->ptMinTrackSize.x, x);
}
- if (IsWindow(m_wndToolBar.m_hWnd) && m_controls.ControlChecked(CMainFrameControls::Toolbar::CONTROLS)) {
+ if (IsWindow(m_wndToolBar) && m_controls.ControlChecked(CMainFrameControls::Toolbar::CONTROLS)) {
// Ensure that Controls toolbar will fit
setLarger(lpMMI->ptMinTrackSize.x, m_wndToolBar.GetMinWidth());
}
- {
- // Add window frame
- DWORD style = GetStyle();
- if (style & WS_CAPTION) {
- lpMMI->ptMinTrackSize.y += GetSystemMetrics(SM_CYCAPTION);
- }
- if (style & WS_THICKFRAME) {
- lpMMI->ptMinTrackSize.x += GetSystemMetrics(SM_CXSIZEFRAME) * 2;
- lpMMI->ptMinTrackSize.y += GetSystemMetrics(SM_CYSIZEFRAME) * 2;
- if (!(style & WS_CAPTION)) {
- lpMMI->ptMinTrackSize.x -= GetSystemMetrics(SM_CXBORDER) * 2;
- lpMMI->ptMinTrackSize.y -= GetSystemMetrics(SM_CYBORDER) * 2;
- }
- }
- }
+ // Ensure that window decorations will fit
+ CRect decorationsRect;
+ VERIFY(AdjustWindowRectEx(decorationsRect, GetWindowStyle(m_hWnd), bMenuVisible, GetWindowExStyle(m_hWnd)));
+ lpMMI->ptMinTrackSize.x += decorationsRect.Width();
+ lpMMI->ptMinTrackSize.y += decorationsRect.Height();
// Final fence
- setLarger(lpMMI->ptMinTrackSize.x, 16);
- setLarger(lpMMI->ptMinTrackSize.y, 16);
+ setLarger(lpMMI->ptMinTrackSize.x, GetSystemMetrics(SM_CXMIN));
+ setLarger(lpMMI->ptMinTrackSize.y, GetSystemMetrics(SM_CYMIN));
+
+ lpMMI->ptMaxTrackSize.x = GetSystemMetrics(SM_CXVIRTUALSCREEN) + decorationsRect.Width();
+ lpMMI->ptMaxTrackSize.y = GetSystemMetrics(SM_CYVIRTUALSCREEN)
+ + ((GetStyle() & WS_THICKFRAME) ? GetSystemMetrics(SM_CYSIZEFRAME) : 0);
}
void CMainFrame::OnMove(int x, int y)
@@ -1387,6 +1343,8 @@ void CMainFrame::OnMoving(UINT fwSide, LPRECT pRect)
CRect areaRect;
CMonitors::GetNearestMonitor(this).GetWorkAreaRect(areaRect);
+ static const CRect invisibleBorderSize = GetInvisibleBorderSize();
+ areaRect.InflateRect(invisibleBorderSize);
bool bSnapping = false;
@@ -1422,18 +1380,18 @@ void CMainFrame::OnMoving(UINT fwSide, LPRECT pRect)
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
- __super::OnSize(nType, cx, cy);
-
- if (nType == SIZE_RESTORED && m_bTrayIcon) {
- ShowWindow(SW_SHOW);
- }
+ if (m_bTrayIcon && nType == SIZE_MINIMIZED) {
+ ShowWindow(SW_HIDE);
+ } else {
+ __super::OnSize(nType, cx, cy);
- if (!m_fFirstFSAfterLaunchOnFS && IsWindowVisible() && !m_fFullScreen) {
- CAppSettings& s = AfxGetAppSettings();
- if (nType != SIZE_MAXIMIZED && nType != SIZE_MINIMIZED) {
- GetWindowRect(s.rcLastWindowPos);
+ if (!m_fFirstFSAfterLaunchOnFS && IsWindowVisible() && !m_fFullScreen) {
+ CAppSettings& s = AfxGetAppSettings();
+ if (nType != SIZE_MAXIMIZED && nType != SIZE_MINIMIZED) {
+ GetWindowRect(s.rcLastWindowPos);
+ }
+ s.nLastWindowType = nType;
}
- s.nLastWindowType = nType;
}
}
@@ -1598,16 +1556,22 @@ void CMainFrame::OnWindowPosChanging(WINDOWPOS* lpwndpos)
__super::OnWindowPosChanging(lpwndpos);
}
+LRESULT CMainFrame::OnDpiChanged(WPARAM wParam, LPARAM lParam)
+{
+ m_dpi.Override(LOWORD(wParam), HIWORD(wParam));
+ m_eventc.FireEvent(MpcEvent::DPI_CHANGED);
+ MoveWindow(reinterpret_cast<RECT*>(lParam));
+ RecalcLayout();
+ return 0;
+}
+
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
// Only stop screensaver if video playing; allow for audio only
- if ((GetMediaState() == State_Running && !m_fAudioOnly)
+ if ((GetMediaState() == State_Running && !m_fEndOfStream && !m_fAudioOnly)
&& (((nID & 0xFFF0) == SC_SCREENSAVE) || ((nID & 0xFFF0) == SC_MONITORPOWER))) {
TRACE(_T("SC_SCREENSAVE, nID = %u, lParam = %d\n"), nID, lParam);
return;
- } else if ((nID & 0xFFF0) == SC_MINIMIZE && m_bTrayIcon) {
- ShowWindow(SW_HIDE);
- return;
}
__super::OnSysCommand(nID, lParam);
@@ -1803,7 +1767,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
m_lSubtitleShift = 0;
}
- m_wndStatusBar.SetStatusTimer(rtNow, rtDur, !!m_wndSubresyncBar.IsWindowVisible(), GetTimeFormat());
+ m_wndStatusBar.SetStatusTimer(rtNow, rtDur, IsSubresyncBarVisible(), GetTimeFormat());
break;
case PM_DVD:
g_bExternalSubtitleTime = true;
@@ -1826,7 +1790,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
}
}
}
- m_wndStatusBar.SetStatusTimer(rtNow, rtDur, !!m_wndSubresyncBar.IsWindowVisible(), GetTimeFormat());
+ m_wndStatusBar.SetStatusTimer(rtNow, rtDur, IsSubresyncBarVisible(), GetTimeFormat());
break;
case PM_ANALOG_CAPTURE:
g_bExternalSubtitleTime = true;
@@ -1867,6 +1831,13 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
m_wndSubresyncBar.SetTime(rtNow);
m_wndSubresyncBar.SetFPS(m_pCAP->GetFPS());
}
+
+ // TODO: Update when Auto Upload is finalised
+ //const CAppSettings& s = AfxGetAppSettings();
+ //if (s.bAutoUploadSubtitles && (rtNow / rtDur == 90) && !m_pSubStreams.IsEmpty()
+ // && s.fEnableSubtitles && m_pCAP && m_pCAP->GetSubtitleDelay() == 0) {
+ // m_pSubtitlesProviders->Upload();
+ //}
}
break;
case TIMER_STREAMPOSPOLLER2:
@@ -1875,16 +1846,29 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
case PM_FILE:
// no break
case PM_DVD:
- if (m_bRemainingTime) {
+ if (m_bOSDDisplayTime) {
m_OSD.DisplayMessage(OSD_TOPLEFT, m_wndStatusBar.GetStatusTimer());
}
break;
- case PM_DIGITAL_CAPTURE:
- m_wndStatusBar.SetStatusTimer(ResStr(IDS_CAPTURE_LIVE));
- break;
+ case PM_DIGITAL_CAPTURE: {
+ EventDescriptor& NowNext = m_pDVBState->NowNext;
+ time_t tNow;
+ time(&tNow);
+ if (NowNext.duration > 0 && tNow >= NowNext.startTime && tNow <= NowNext.startTime + NowNext.duration) {
+ REFERENCE_TIME rtNow = REFERENCE_TIME(tNow - NowNext.startTime) * 10000000;
+ REFERENCE_TIME rtDur = REFERENCE_TIME(NowNext.duration) * 10000000;
+ m_wndStatusBar.SetStatusTimer(rtNow, rtDur, false, TIME_FORMAT_MEDIA_TIME);
+ if (m_bOSDDisplayTime) {
+ m_OSD.DisplayMessage(OSD_TOPLEFT, m_wndStatusBar.GetStatusTimer());
+ }
+ } else {
+ m_wndStatusBar.SetStatusTimer(ResStr(IDS_CAPTURE_LIVE));
+ }
+ }
+ break;
case PM_ANALOG_CAPTURE:
if (!m_fCapturing) {
- CString str = ResStr(IDS_CAPTURE_LIVE);
+ CString str(StrRes(IDS_CAPTURE_LIVE));
long lChannel = 0, lVivSub = 0, lAudSub = 0;
if (m_pAMTuner
&& m_wndCaptureBar.m_capdlg.IsTunerActive()
@@ -1912,7 +1896,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
} else {
info = _T("-");
}
- m_wndStatsBar.SetLine(ResStr(IDS_AG_FRAMERATE), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_AG_FRAMERATE), info);
if (SUCCEEDED(m_pQP->get_AvgSyncOffset(&tmp))
&& SUCCEEDED(m_pQP->get_DevSyncOffset(&tmp1))) {
@@ -1920,7 +1904,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
} else {
info = _T("-");
}
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_SYNC_OFFSET), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_SYNC_OFFSET), info);
if (SUCCEEDED(m_pQP->get_FramesDrawn(&tmp))
&& SUCCEEDED(m_pQP->get_FramesDroppedInRenderer(&tmp1))) {
@@ -1928,16 +1912,16 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
} else {
info = _T("-");
}
- m_wndStatsBar.SetLine(ResStr(IDS_AG_FRAMES), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_AG_FRAMES), info);
if (SUCCEEDED(m_pQP->get_Jitter(&tmp))) {
info.Format(_T("%d ms"), tmp);
} else {
info = _T("-");
}
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_JITTER), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_JITTER), info);
} else {
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_PLAYBACK_RATE), rate);
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_PLAYBACK_RATE), rate);
}
if (m_pBI) {
@@ -1952,7 +1936,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
if (!sInfo.IsEmpty()) {
sInfo.AppendFormat(_T("(p%lu)"), m_pBI->GetPriority());
- m_wndStatsBar.SetLine(ResStr(IDS_AG_BUFFERS), sInfo);
+ m_wndStatsBar.SetLine(StrRes(IDS_AG_BUFFERS), sInfo);
}
}
@@ -1966,7 +1950,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
DWORD nAvg = pBRI->GetAverageBitRate() / 1000;
if (nAvg > 0) {
- sInfo.AppendFormat(_T("[%u]: %lu/%lu Kb/s "), i, nAvg, pBRI->GetCurrentBitRate() / 1000);
+ sInfo.AppendFormat(_T("[%u]: %lu/%lu kb/s "), i, nAvg, pBRI->GetCurrentBitRate() / 1000);
}
}
i++;
@@ -1974,7 +1958,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
EndEnumPins;
if (!sInfo.IsEmpty()) {
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_BITRATE), sInfo + ResStr(IDS_STATSBAR_BITRATE_AVG_CUR));
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_BITRATE), sInfo + ResStr(IDS_STATSBAR_BITRATE_AVG_CUR));
sInfo.Empty();
}
}
@@ -1986,7 +1970,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
// Location
- CString Location('-');
+ CString Location(_T('-'));
DVD_PLAYBACK_LOCATION2 loc;
ULONG ulNumOfVolumes, ulVolume;
@@ -2018,11 +2002,11 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
}
}
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_LOCATION), Location);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_LOCATION), Location);
// Video
- CString Video('-');
+ CString Video(_T('-'));
DVD_VideoAttributes VATR;
@@ -2034,11 +2018,11 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
VATR.ulAspectX, VATR.ulAspectY);
}
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_VIDEO), Video);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_VIDEO), Video);
// Audio
- CString Audio('-');
+ CString Audio(_T('-'));
DVD_AudioAttributes AATR;
@@ -2047,7 +2031,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
CString lang;
if (AATR.Language) {
int len = GetLocaleInfo(AATR.Language, LOCALE_SENGLANGUAGE, lang.GetBuffer(64), 64);
- lang.ReleaseBufferSetLength(max(len - 1, 0));
+ lang.ReleaseBufferSetLength(std::max(len - 1, 0));
} else {
lang.Format(IDS_AG_UNKNOWN, ulCurrent + 1);
}
@@ -2078,7 +2062,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
AATR.dwFrequency,
AATR.bQuantization,
AATR.bNumberOfChannels,
- (AATR.bNumberOfChannels > 1 ? ResStr(IDS_MAINFRM_13) : ResStr(IDS_MAINFRM_12)));
+ ResStr(AATR.bNumberOfChannels > 1 ? IDS_MAINFRM_13 : IDS_MAINFRM_12));
m_wndStatusBar.SetStatusBitmap(
AATR.bNumberOfChannels == 1 ? IDB_AUDIOTYPE_MONO
@@ -2086,11 +2070,11 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
: IDB_AUDIOTYPE_NOAUDIO);
}
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_AUDIO), Audio);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_AUDIO), Audio);
// Subtitles
- CString Subtitles('-');
+ CString Subtitles(_T('-'));
BOOL bIsDisabled;
DVD_SubpictureAttributes SATR;
@@ -2099,7 +2083,7 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
&& SUCCEEDED(m_pDVDI->GetSubpictureAttributes(ulCurrent, &SATR))) {
CString lang;
int len = GetLocaleInfo(SATR.Language, LOCALE_SENGLANGUAGE, lang.GetBuffer(64), 64);
- lang.ReleaseBufferSetLength(max(len - 1, 0));
+ lang.ReleaseBufferSetLength(std::max(len - 1, 0));
switch (SATR.LanguageExtension) {
case DVD_SP_EXT_NotSpecified:
@@ -2145,18 +2129,20 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
lang);
}
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_SUBTITLES), Subtitles);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_SUBTITLES), Subtitles);
} else if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
- CComQIPtr<IBDATuner> pTun = m_pGB;
- BOOLEAN bPresent;
- BOOLEAN bLocked;
- LONG lDbStrength;
- LONG lPercentQuality;
- CString Signal;
-
- if (SUCCEEDED(pTun->GetStats(bPresent, bLocked, lDbStrength, lPercentQuality)) && bPresent) {
- Signal.Format(ResStr(IDS_STATSBAR_SIGNAL_FORMAT), (int)lDbStrength, lPercentQuality);
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_SIGNAL), Signal);
+ if (m_pDVBState->bActive) {
+ CComQIPtr<IBDATuner> pTun = m_pGB;
+ BOOLEAN bPresent, bLocked;
+ LONG lDbStrength, lPercentQuality;
+ CString Signal;
+
+ if (SUCCEEDED(pTun->GetStats(bPresent, bLocked, lDbStrength, lPercentQuality)) && bPresent) {
+ Signal.Format(IDS_STATSBAR_SIGNAL_FORMAT, (int)lDbStrength, lPercentQuality);
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_SIGNAL), Signal);
+ }
+ } else {
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_SIGNAL), _T("-"));
}
} else if (GetPlaybackMode() == PM_FILE) {
OpenSetupInfoBar(false);
@@ -2215,7 +2201,9 @@ void CMainFrame::DoAfterPlaybackEvent()
bool bExitFullScreen = false;
bool bNoMoreMedia = false;
- if (s.nCLSwitches & CLSW_CLOSE) {
+ if (s.nCLSwitches & CLSW_DONOTHING) {
+ // Do nothing
+ } else if (s.nCLSwitches & CLSW_CLOSE) {
SendMessage(WM_COMMAND, ID_FILE_EXIT);
} else if (s.nCLSwitches & CLSW_MONITOROFF) {
m_fEndOfStream = true;
@@ -2242,6 +2230,12 @@ void CMainFrame::DoAfterPlaybackEvent()
m_fEndOfStream = true;
bExitFullScreen = true;
LockWorkStation();
+ } else if (s.nCLSwitches & CLSW_PLAYNEXT) {
+ if (!SearchInDir(true, (s.fLoopForever || m_nLoops < s.nLoops))) {
+ m_fEndOfStream = true;
+ bExitFullScreen = true;
+ bNoMoreMedia = true;
+ }
} else {
switch (s.eAfterPlayback) {
case CAppSettings::AfterPlayback::PLAY_NEXT:
@@ -2279,6 +2273,10 @@ void CMainFrame::DoAfterPlaybackEvent()
}
}
+ if (AfxGetMyApp()->m_fClosingState) {
+ return;
+ }
+
if (m_fEndOfStream) {
m_OSD.EnableShowMessage(false);
SendMessage(WM_COMMAND, ID_PLAY_PAUSE);
@@ -2309,14 +2307,25 @@ void CMainFrame::GraphEventComplete()
}
}
- if (m_wndPlaylistBar.IsAtEnd()) {
+ bool bBreak = false;
+ if (m_wndPlaylistBar.IsAtEnd() || s.eLoopMode == CAppSettings::LoopMode::FILE) {
++m_nLoops;
+ bBreak = !!(s.nCLSwitches & CLSW_AFTERPLAYBACK_MASK);
}
+ // TODO: Update when Auto Upload is finalised
+ //if (!m_pSubStreams.IsEmpty() && s.fEnableSubtitles && s.bAutoUploadSubtitles
+ // && m_pCAP && m_pCAP->GetSubtitleDelay() == 0) {
+ // m_pSubtitlesProviders->Upload();
+ //}
+
+
if (s.fLoopForever || m_nLoops < s.nLoops) {
- if (m_wndPlaylistBar.GetCount() > 1) {
+ if (bBreak) {
+ DoAfterPlaybackEvent();
+ } else if ((m_wndPlaylistBar.GetCount() > 1) && (s.eLoopMode == CAppSettings::LoopMode::PLAYLIST)) {
int nLoops = m_nLoops;
- SendMessage(WM_COMMAND, ID_NAVIGATE_SKIPFORWARD);
+ SendMessage(WM_COMMAND, ID_NAVIGATE_SKIPFORWARDFILE);
m_nLoops = nLoops;
} else {
if (GetMediaState() == State_Stopped) {
@@ -2345,7 +2354,7 @@ LRESULT CMainFrame::OnGraphNotify(WPARAM wParam, LPARAM lParam)
LONG evCode = 0;
LONG_PTR evParam1, evParam2;
- while (m_pME && SUCCEEDED(m_pME->GetEvent(&evCode, &evParam1, &evParam2, 0))) {
+ while (!AfxGetMyApp()->m_fClosingState && m_pME && SUCCEEDED(m_pME->GetEvent(&evCode, &evParam1, &evParam2, 0))) {
#ifdef _DEBUG
TRACE(_T("--> CMainFrame::OnGraphNotify on thread: %lu; event: 0x%08x (%ws)\n"), GetCurrentThreadId(), evCode, GetEventString(evCode));
#endif
@@ -2367,9 +2376,9 @@ LRESULT CMainFrame::OnGraphNotify(WPARAM wParam, LPARAM lParam)
TRACE(_T("\thr = %08x\n"), (HRESULT)evParam1);
break;
case EC_BUFFERING_DATA:
- TRACE(_T("\t%ld, %Id\n"), (HRESULT)evParam1, evParam2);
+ TRACE(_T("\tBuffering data = %s\n"), evParam1 ? _T("true") : _T("false"));
- m_fBuffering = ((HRESULT)evParam1 != S_OK);
+ m_bBuffering = !!evParam1;
break;
case EC_STEP_COMPLETE:
if (m_fFrameSteppingActive) {
@@ -2406,7 +2415,7 @@ LRESULT CMainFrame::OnGraphNotify(WPARAM wParam, LPARAM lParam)
if (m_iDVDDomain == DVD_DOMAIN_Title) {
CString Domain;
Domain.Format(IDS_AG_TITLE, m_iDVDTitle);
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_DOMAIN), Domain);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_DOMAIN), Domain);
}
SetupDVDChapters();
@@ -2418,7 +2427,7 @@ LRESULT CMainFrame::OnGraphNotify(WPARAM wParam, LPARAM lParam)
OpenDVDData* pDVDData = dynamic_cast<OpenDVDData*>(m_lastOMD.m_p);
ASSERT(pDVDData);
- CString Domain('-');
+ CString Domain(_T('-'));
switch (m_iDVDDomain) {
case DVD_DOMAIN_FirstPlay:
@@ -2572,7 +2581,7 @@ LRESULT CMainFrame::OnGraphNotify(WPARAM wParam, LPARAM lParam)
break;
}
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_DOMAIN), Domain);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_DOMAIN), Domain);
if (GetPlaybackMode() == PM_FILE) {
SetupChapters();
@@ -2647,24 +2656,9 @@ LRESULT CMainFrame::OnGraphNotify(WPARAM wParam, LPARAM lParam)
case EC_VIDEO_SIZE_CHANGED: {
CSize size((DWORD)evParam1);
TRACE(_T("\t%ldx%ld\n"), size.cx, size.cy);
-
const bool bWasAudioOnly = m_fAudioOnly;
m_fAudioOnly = (size.cx <= 0 || size.cy <= 0);
-
- if (GetLoadState() == MLS::LOADED &&
- ((s.fRememberZoomLevel && (s.fLimitWindowProportions || m_bAllowWindowZoom)) || m_fAudioOnly || bWasAudioOnly) &&
- !(m_fFullScreen || IsD3DFullScreenMode() || IsZoomed() || IsIconic() || IsAeroSnapped())) {
- CSize videoSize;
- if (!m_fAudioOnly && !m_bAllowWindowZoom) {
- videoSize = GetVideoSize();
- }
- if (videoSize.cx) {
- ZoomVideoWindow(m_dLastVideoScaleFactor * m_nLastVideoWidth / videoSize.cx);
- } else {
- ZoomVideoWindow();
- }
- }
- MoveVideoWindow();
+ OnVideoSizeChanged(bWasAudioOnly);
}
break;
case EC_LENGTH_CHANGED: {
@@ -2738,7 +2732,6 @@ LRESULT CMainFrame::OnResetDevice(WPARAM wParam, LPARAM lParam)
if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
CComQIPtr<IBDATuner> pTun = m_pGB;
if (pTun) {
- m_fSetChannelActive = false;
SetChannel(AfxGetAppSettings().nDVBLastChannel);
}
}
@@ -2868,7 +2861,7 @@ void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
}
if (firstSubItemID == ID_VIEW_VF_HALF // is "Video Frame" submenu
|| firstSubItemID == ID_VIEW_INCSIZE // is "Pan&Scan" submenu
- || firstSubItemID == ID_ASPECTRATIO_SOURCE // is "Override Aspect Ratio" submenu
+ || firstSubItemID == ID_ASPECTRATIO_START // is "Override Aspect Ratio" submenu
|| firstSubItemID == ID_VIEW_ZOOM_50) { // is "Zoom" submenu
UINT fState = (GetLoadState() == MLS::LOADED && !m_fAudioOnly)
? MF_ENABLED
@@ -2941,6 +2934,7 @@ void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
if (nID == ID_SEPARATOR || nID == -1
|| nID >= ID_FAVORITES_FILE_START && nID <= ID_FAVORITES_FILE_END
|| nID >= ID_RECENT_FILE_START && nID <= ID_RECENT_FILE_END
+ || nID >= ID_SUBTITLES_SUBITEM_START && nID <= ID_SUBTITLES_SUBITEM_END
|| nID >= ID_NAVIGATE_JUMPTO_SUBITEM_START && nID <= ID_NAVIGATE_JUMPTO_SUBITEM_END) {
continue;
}
@@ -2962,8 +2956,6 @@ void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
//pPopupMenu->ModifyMenu(i, MF_BYPOSITION|MF_STRING, nID, str);
// this works fine
- MENUITEMINFO mii;
- mii.cbSize = sizeof(mii);
mii.fMask = MIIM_STRING;
mii.dwTypeData = (LPTSTR)(LPCTSTR)str;
VERIFY(pPopupMenu->SetMenuItemInfo(i, &mii, TRUE));
@@ -3098,8 +3090,8 @@ void CMainFrame::OnMenuFilters()
void CMainFrame::OnUpdatePlayerStatus(CCmdUI* pCmdUI)
{
if (GetLoadState() == MLS::LOADING) {
- m_wndStatusBar.SetStatusMessage(ResStr(IDS_CONTROLS_OPENING));
- if (AfxGetAppSettings().fUseWin7TaskBar && m_pTaskbarList) {
+ m_wndStatusBar.SetStatusMessage(StrRes(IDS_CONTROLS_OPENING));
+ if (AfxGetAppSettings().bUseEnhancedTaskBar && m_pTaskbarList) {
m_pTaskbarList->SetProgressState(m_hWnd, TBPF_INDETERMINATE);
}
} else if (GetLoadState() == MLS::LOADED) {
@@ -3177,7 +3169,7 @@ void CMainFrame::OnUpdatePlayerStatus(CCmdUI* pCmdUI)
msg.AppendFormat(IDS_MAINFRM_42, nFreeVidBuffers, nFreeAudBuffers);
}
}
- } else if (m_fBuffering) {
+ } else if (m_bBuffering) {
BeginEnumFilters(m_pGB, pEF, pBF) {
if (CComQIPtr<IAMNetworkStatus, &IID_IAMNetworkStatus> pAMNS = pBF) {
long BufferingProgress = 0;
@@ -3202,17 +3194,17 @@ void CMainFrame::OnUpdatePlayerStatus(CCmdUI* pCmdUI)
OAFilterState fs = GetMediaState();
CString UI_Text =
!msg.IsEmpty() ? msg :
- fs == State_Stopped ? ResStr(IDS_CONTROLS_STOPPED) :
- (fs == State_Paused || m_fFrameSteppingActive) ? ResStr(IDS_CONTROLS_PAUSED) :
- fs == State_Running ? ResStr(IDS_CONTROLS_PLAYING) :
+ fs == State_Stopped ? StrRes(IDS_CONTROLS_STOPPED) :
+ (fs == State_Paused || m_fFrameSteppingActive) ? StrRes(IDS_CONTROLS_PAUSED) :
+ fs == State_Running ? StrRes(IDS_CONTROLS_PLAYING) :
_T("");
if (m_bUsingDXVA && (UI_Text == ResStr(IDS_CONTROLS_PAUSED) || UI_Text == ResStr(IDS_CONTROLS_PLAYING))) {
UI_Text.AppendFormat(_T(" %s"), ResStr(IDS_HW_INDICATOR));
}
m_wndStatusBar.SetStatusMessage(UI_Text);
} else if (GetLoadState() == MLS::CLOSING) {
- m_wndStatusBar.SetStatusMessage(ResStr(IDS_CONTROLS_CLOSING));
- if (AfxGetAppSettings().fUseWin7TaskBar && m_pTaskbarList) {
+ m_wndStatusBar.SetStatusMessage(StrRes(IDS_CONTROLS_CLOSING));
+ if (AfxGetAppSettings().bUseEnhancedTaskBar && m_pTaskbarList) {
m_pTaskbarList->SetProgressState(m_hWnd, TBPF_INDETERMINATE);
}
} else {
@@ -3535,41 +3527,24 @@ void CMainFrame::OnStreamAudio(UINT nID)
DWORD cStreams = 0;
if (pSS && SUCCEEDED(pSS->Count(&cStreams)) && cStreams > 1) {
for (DWORD i = 0; i < cStreams; i++) {
- AM_MEDIA_TYPE* pmt = nullptr;
DWORD dwFlags = 0;
LCID lcid = 0;
DWORD dwGroup = 0;
- WCHAR* pszName = nullptr;
- if (FAILED(pSS->Info(i, &pmt, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))) {
+ CComHeapPtr<WCHAR> pszName;
+ if (FAILED(pSS->Info(i, nullptr, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))) {
return;
}
-
- if (pmt) {
- DeleteMediaType(pmt);
- }
- if (pszName) {
- CoTaskMemFree(pszName);
- }
-
if (dwFlags & (AMSTREAMSELECTINFO_ENABLED | AMSTREAMSELECTINFO_EXCLUSIVE)) {
long stream_index = (i + (nID == 0 ? 1 : cStreams - 1)) % cStreams;
pSS->Enable(stream_index, AMSTREAMSELECTENABLE_ENABLE);
- if (SUCCEEDED(pSS->Info(stream_index, &pmt, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))) {
- CString strMessage;
- strMessage.Format(IDS_AUDIO_STREAM, pszName);
- m_OSD.DisplayMessage(OSD_TOPLEFT, strMessage);
- if (pmt) {
- DeleteMediaType(pmt);
- }
- if (pszName) {
- CoTaskMemFree(pszName);
- }
+ if (SUCCEEDED(pSS->Info(stream_index, nullptr, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))) {
+ m_OSD.DisplayMessage(OSD_TOPLEFT, GetStreamOSDString(CString(pszName), lcid, 1));
}
break;
}
}
} else if (GetPlaybackMode() == PM_FILE) {
- SendMessage(WM_COMMAND, ID_OGM_AUDIO_NEXT + nID);
+ OnStreamSelect(nID == 0, 1);
} else if (GetPlaybackMode() == PM_DVD) {
SendMessage(WM_COMMAND, ID_DVD_AUDIO_NEXT + nID);
}
@@ -3587,7 +3562,7 @@ void CMainFrame::OnStreamSub(UINT nID)
SetSubtitle(nID == 0 ? 1 : -1, true, true);
SetFocus();
} else if (GetPlaybackMode() == PM_FILE) {
- SendMessage(WM_COMMAND, ID_OGM_SUB_NEXT + nID);
+ OnStreamSelect(nID == 0, 2);
} else if (GetPlaybackMode() == PM_DVD) {
SendMessage(WM_COMMAND, ID_DVD_SUB_NEXT + nID);
}
@@ -3607,159 +3582,6 @@ void CMainFrame::OnStreamSubOnOff()
}
}
-void CMainFrame::OnOgmAudio(UINT nID)
-{
- nID -= ID_OGM_AUDIO_NEXT;
-
- if (GetLoadState() != MLS::LOADED) {
- return;
- }
-
- CComQIPtr<IAMStreamSelect> pSS = FindSourceSelectableFilter();
- if (!pSS) {
- return;
- }
-
- CAtlArray<int> snds;
-
- DWORD cStreams = 0;
- if (SUCCEEDED(pSS->Count(&cStreams)) && cStreams > 1) {
- INT_PTR iSel = -1;
- for (int i = 0; i < (int)cStreams; i++) {
- AM_MEDIA_TYPE* pmt = nullptr;
- DWORD dwFlags = 0;
- LCID lcid = 0;
- DWORD dwGroup = 0;
- WCHAR* pszName = nullptr;
- if (FAILED(pSS->Info(i, &pmt, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))) {
- return;
- }
-
- if (dwGroup == 1) {
- if (dwFlags & (AMSTREAMSELECTINFO_ENABLED | AMSTREAMSELECTINFO_EXCLUSIVE)) {
- iSel = snds.GetCount();
- }
- snds.Add(i);
- }
-
- if (pmt) {
- DeleteMediaType(pmt);
- }
- if (pszName) {
- CoTaskMemFree(pszName);
- }
-
- }
-
- size_t cnt = snds.GetCount();
- if (cnt > 1 && iSel >= 0) {
- int nNewStream = snds[(iSel + (nID == 0 ? 1 : cnt - 1)) % cnt];
- pSS->Enable(nNewStream, AMSTREAMSELECTENABLE_ENABLE);
-
- AM_MEDIA_TYPE* pmt = nullptr;
- DWORD dwFlags = 0;
- LCID lcid = 0;
- DWORD dwGroup = 0;
- WCHAR* pszName = nullptr;
-
- if (SUCCEEDED(pSS->Info(nNewStream, &pmt, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))) {
- CString strMessage;
- CString audio_stream = pszName;
- int k = audio_stream.Find(_T("Audio - "));
- if (k >= 0) {
- audio_stream = audio_stream.Right(audio_stream.GetLength() - k - 8);
- }
- strMessage.Format(IDS_AUDIO_STREAM, audio_stream);
- m_OSD.DisplayMessage(OSD_TOPLEFT, strMessage);
-
- if (pmt) {
- DeleteMediaType(pmt);
- }
- if (pszName) {
- CoTaskMemFree(pszName);
- }
- }
- }
- }
-}
-
-void CMainFrame::OnOgmSub(UINT nID)
-{
- nID -= ID_OGM_SUB_NEXT;
-
- if (GetLoadState() != MLS::LOADED) {
- return;
- }
-
- CComQIPtr<IAMStreamSelect> pSS = FindSourceSelectableFilter();
- if (!pSS) {
- return;
- }
-
- CArray<int> subs;
-
- DWORD cStreams = 0;
- if (SUCCEEDED(pSS->Count(&cStreams)) && cStreams > 1) {
- INT_PTR iSel = -1;
- for (int i = 0; i < (int)cStreams; i++) {
- AM_MEDIA_TYPE* pmt = nullptr;
- DWORD dwFlags = 0;
- LCID lcid = 0;
- DWORD dwGroup = 0;
- WCHAR* pszName = nullptr;
- if (FAILED(pSS->Info(i, &pmt, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))) {
- return;
- }
-
- if (dwGroup == 2) {
- if (dwFlags & (AMSTREAMSELECTINFO_ENABLED | AMSTREAMSELECTINFO_EXCLUSIVE)) {
- iSel = subs.GetCount();
- }
- subs.Add(i);
- }
-
- if (pmt) {
- DeleteMediaType(pmt);
- }
- if (pszName) {
- CoTaskMemFree(pszName);
- }
-
- }
-
- INT_PTR cnt = subs.GetCount();
- if (cnt > 1 && iSel >= 0) {
- int nNewStream = subs[(iSel + (nID == 0 ? 1 : cnt - 1)) % cnt];
- pSS->Enable(nNewStream, AMSTREAMSELECTENABLE_ENABLE);
-
- AM_MEDIA_TYPE* pmt = nullptr;
- DWORD dwFlags = 0;
- LCID lcid = 0;
- DWORD dwGroup = 0;
- WCHAR* pszName = nullptr;
- if (SUCCEEDED(pSS->Info(nNewStream, &pmt, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))) {
- CString lang;
- CString strMessage;
- if (lcid == 0) {
- lang = pszName;
- } else {
- int len = GetLocaleInfo(lcid, LOCALE_SENGLANGUAGE, lang.GetBuffer(64), 64);
- lang.ReleaseBufferSetLength(max(len - 1, 0));
- }
-
- strMessage.Format(IDS_SUBTITLE_STREAM, lang);
- m_OSD.DisplayMessage(OSD_TOPLEFT, strMessage);
- if (pmt) {
- DeleteMediaType(pmt);
- }
- if (pszName) {
- CoTaskMemFree(pszName);
- }
- }
- }
- }
-}
-
void CMainFrame::OnDvdAngle(UINT nID)
{
if (GetLoadState() != MLS::LOADED) {
@@ -3804,13 +3626,13 @@ void CMainFrame::OnDvdAudio(UINT nID)
CString strMessage;
if (AATR.Language) {
int len = GetLocaleInfo(AATR.Language, LOCALE_SENGLANGUAGE, lang.GetBuffer(64), 64);
- lang.ReleaseBufferSetLength(max(len - 1, 0));
+ lang.ReleaseBufferSetLength(std::max(len - 1, 0));
} else {
lang.Format(IDS_AG_UNKNOWN, nNextStream + 1);
}
CString format = GetDVDAudioFormatName(AATR);
- CString str("");
+ CString str;
if (!format.IsEmpty()) {
str.Format(IDS_MAINFRM_11,
@@ -3819,7 +3641,7 @@ void CMainFrame::OnDvdAudio(UINT nID)
AATR.dwFrequency,
AATR.bQuantization,
AATR.bNumberOfChannels,
- (AATR.bNumberOfChannels > 1 ? ResStr(IDS_MAINFRM_13) : ResStr(IDS_MAINFRM_12)));
+ ResStr(AATR.bNumberOfChannels > 1 ? IDS_MAINFRM_13 : IDS_MAINFRM_12));
str += FAILED(hr) ? _T(" [") + ResStr(IDS_AG_ERROR) + _T("] ") : _T("");
strMessage.Format(IDS_AUDIO_STREAM, str);
m_OSD.DisplayMessage(OSD_TOPLEFT, strMessage);
@@ -3863,7 +3685,7 @@ void CMainFrame::OnDvdSub(UINT nID)
CString lang;
CString strMessage;
int len = GetLocaleInfo(SATR.Language, LOCALE_SENGLANGUAGE, lang.GetBuffer(64), 64);
- lang.ReleaseBufferSetLength(max(len - 1, 0));
+ lang.ReleaseBufferSetLength(std::max(len - 1, 0));
lang += FAILED(hr) ? _T(" [") + ResStr(IDS_AG_ERROR) + _T("] ") : _T("");
strMessage.Format(IDS_SUBTITLE_STREAM, lang);
m_OSD.DisplayMessage(OSD_TOPLEFT, strMessage);
@@ -3933,7 +3755,9 @@ void CMainFrame::OnFileOpenQuick()
SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
- ShowWindow(SW_SHOW);
+ if (IsIconic()) {
+ ShowWindow(SW_RESTORE);
+ }
SetForegroundWindow();
if (fns.GetCount() == 1) {
@@ -3958,31 +3782,35 @@ void CMainFrame::OnFileOpenmedia()
dlg.SetForegroundWindow();
return;
}
- if (dlg.DoModal() != IDOK || dlg.m_fns.IsEmpty()) {
+ if (dlg.DoModal() != IDOK || dlg.GetFileNames().IsEmpty()) {
return;
}
- if (!dlg.m_fAppendPlaylist) {
+ if (!dlg.GetAppendToPlaylist()) {
SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
}
- ShowWindow(SW_SHOW);
+ if (IsIconic()) {
+ ShowWindow(SW_RESTORE);
+ }
SetForegroundWindow();
- if (!dlg.m_fMultipleFiles) {
- if (OpenBD(dlg.m_fns.GetHead())) {
+ CAtlList<CString> filenames;
+ filenames.AddHeadList(&dlg.GetFileNames());
+
+ if (!dlg.HasMultipleFiles()) {
+ if (OpenBD(filenames.GetHead())) {
return;
}
}
- if (dlg.m_fAppendPlaylist) {
- m_wndPlaylistBar.Append(dlg.m_fns, dlg.m_fMultipleFiles);
- return;
- }
-
- m_wndPlaylistBar.Open(dlg.m_fns, dlg.m_fMultipleFiles);
+ if (dlg.GetAppendToPlaylist()) {
+ m_wndPlaylistBar.Append(filenames, dlg.HasMultipleFiles());
+ } else {
+ m_wndPlaylistBar.Open(filenames, dlg.HasMultipleFiles());
- OpenCurPlaylistItem();
+ OpenCurPlaylistItem();
+ }
}
void CMainFrame::OnUpdateFileOpen(CCmdUI* pCmdUI)
@@ -4009,10 +3837,9 @@ BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCDS)
}
}
- /*
- if (m_iMediaLoadState == MLS::LOADING || !IsWindow(m_wndPlaylistBar))
+ if (m_bScanDlgOpened) {
return FALSE;
- */
+ }
DWORD len = *((DWORD*)pCDS->lpData);
TCHAR* pBuff = (TCHAR*)((DWORD*)pCDS->lpData + 1);
@@ -4082,6 +3909,13 @@ BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCDS)
bool fSetForegroundWindow = false;
+ auto applyRandomizeSwitch = [&]() {
+ if (s.nCLSwitches & CLSW_RANDOMIZE) {
+ m_wndPlaylistBar.Randomize();
+ s.nCLSwitches &= ~CLSW_RANDOMIZE;
+ }
+ };
+
if ((s.nCLSwitches & CLSW_DVD) && !s.slFiles.IsEmpty()) {
SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
fSetForegroundWindow = true;
@@ -4112,6 +3946,7 @@ BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCDS)
}
m_wndPlaylistBar.Open(sl, true);
+ applyRandomizeSwitch();
OpenCurPlaylistItem();
} else if (s.nCLSwitches & CLSW_DEVICE) {
SendMessage(WM_COMMAND, ID_FILE_OPENDEVICE);
@@ -4119,7 +3954,7 @@ BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCDS)
CAtlList<CString> sl;
sl.AddTailList(&s.slFiles);
- ParseDirs(sl);
+ PathUtils::ParseDirs(sl);
bool fMulti = sl.GetCount() > 1;
@@ -4147,6 +3982,7 @@ BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCDS)
if ((s.nCLSwitches & CLSW_ADD) && !IsPlaylistEmpty()) {
m_wndPlaylistBar.Append(sl, fMulti, &s.slSubs);
+ applyRandomizeSwitch();
if (s.nCLSwitches & (CLSW_OPEN | CLSW_PLAY)) {
m_wndPlaylistBar.SetLast();
@@ -4157,6 +3993,7 @@ BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCDS)
fSetForegroundWindow = true;
m_wndPlaylistBar.Open(sl, fMulti, &s.slSubs);
+ applyRandomizeSwitch();
OpenCurPlaylistItem((s.nCLSwitches & CLSW_STARTVALID) ? s.rtStart : 0);
s.nCLSwitches &= ~CLSW_STARTVALID;
@@ -4164,6 +4001,7 @@ BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCDS)
}
}
} else {
+ applyRandomizeSwitch();
s.nCLSwitches = CLSW_NONE;
}
@@ -4200,7 +4038,7 @@ void CMainFrame::OnFileOpendvd()
}
CAppSettings& s = AfxGetAppSettings();
- CString strTitle = ResStr(IDS_MAINFRM_46);
+ CString strTitle(StrRes(IDS_MAINFRM_46));
CString path;
if (s.fUseDVDPath && !s.strDVDPath.IsEmpty()) {
@@ -4246,9 +4084,9 @@ void CMainFrame::OnFileOpendvd()
if (!OpenBD(path)) {
CAutoPtr<OpenDVDData> p(DEBUG_NEW OpenDVDData());
p->path = path;
- p->path.Replace('/', '\\');
+ p->path.Replace(_T('/'), _T('\\'));
if (p->path[p->path.GetLength() - 1] != '\\') {
- p->path += '\\';
+ p->path += _T('\\');
}
OpenMedia(p);
@@ -4267,7 +4105,9 @@ void CMainFrame::OnFileOpendevice()
SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
SetForegroundWindow();
- ShowWindow(SW_SHOW);
+ if (IsIconic()) {
+ ShowWindow(SW_RESTORE);
+ }
m_wndPlaylistBar.Empty();
@@ -4302,7 +4142,9 @@ void CMainFrame::OnFileOpenOpticalDisk(UINT nID)
SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
SetForegroundWindow();
- ShowWindow(SW_SHOW);
+ if (IsIconic()) {
+ ShowWindow(SW_RESTORE);
+ }
m_wndPlaylistBar.Open(sl, true);
OpenCurPlaylistItem();
@@ -4330,39 +4172,40 @@ void CMainFrame::OnFileReopen()
OpenCurPlaylistItem();
}
-void CMainFrame::OnDropFiles(HDROP hDropInfo)
+DROPEFFECT CMainFrame::OnDropAccept(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
{
- SetForegroundWindow();
-
- UINT nFiles = ::DragQueryFile(hDropInfo, UINT_MAX, nullptr, 0);
-
- CAtlList<CString> sl;
- for (UINT iFile = 0; iFile < nFiles; iFile++) {
- CString fn;
- fn.ReleaseBuffer(::DragQueryFile(hDropInfo, iFile, fn.GetBuffer(MAX_PATH), MAX_PATH));
- sl.AddTail(fn);
+ ClientToScreen(&point);
+ if (CMouse::CursorOnRootWindow(point, *this)) {
+ UpdateControlState(UPDATE_CONTROLS_VISIBILITY);
+ return (dwKeyState & MK_CONTROL) ? (DROPEFFECT_COPY | DROPEFFECT_APPEND)
+ : (DROPEFFECT_MOVE | DROPEFFECT_LINK | DROPEFFECT_COPY);
}
- ::DragFinish(hDropInfo);
+ return DROPEFFECT_NONE;
+}
- if (sl.IsEmpty()) {
+void CMainFrame::OnDropFiles(CAtlList<CString>& slFiles, DROPEFFECT dropEffect)
+{
+ SetForegroundWindow();
+
+ if (slFiles.IsEmpty()) {
return;
}
- if (sl.GetCount() == 1 && OpenBD(sl.GetHead())) {
+ if (slFiles.GetCount() == 1 && OpenBD(slFiles.GetHead())) {
return;
}
- ParseDirs(sl);
+ PathUtils::ParseDirs(slFiles);
SubtitleInput subInputSelected;
if (GetLoadState() == MLS::LOADED && !IsPlaybackCaptureMode() && !m_fAudioOnly && m_pCAP) {
- POSITION pos = sl.GetHeadPosition();
+ POSITION pos = slFiles.GetHeadPosition();
while (pos) {
// Try to open all dropped files as subtitles. If one of the files
// cannot be loaded as subtitle, add all files to the playlist.
SubtitleInput subInput;
- if (LoadSubtitle(sl.GetNext(pos), &subInput)) {
+ if (LoadSubtitle(slFiles.GetNext(pos), &subInput)) {
if (!subInputSelected.pSubStream) {
subInputSelected = subInput;
}
@@ -4379,16 +4222,20 @@ void CMainFrame::OnDropFiles(HDROP hDropInfo)
SetSubtitle(subInputSelected);
CString filenames;
- POSITION pos = sl.GetHeadPosition();
+ POSITION pos = slFiles.GetHeadPosition();
while (pos) {
- CPath fn(sl.GetNext(pos));
+ CPath fn(slFiles.GetNext(pos));
fn.StripPath();
filenames.AppendFormat(pos ? _T("%s, ") : _T("%s"), fn);
}
SendStatusMessage(filenames + ResStr(IDS_SUB_LOADED_SUCCESS), 3000);
} else {
- m_wndPlaylistBar.Open(sl, true);
- OpenCurPlaylistItem();
+ if (dropEffect & DROPEFFECT_APPEND) {
+ m_wndPlaylistBar.Append(slFiles, true);
+ } else {
+ m_wndPlaylistBar.Open(slFiles, true);
+ OpenCurPlaylistItem();
+ }
}
}
@@ -4592,21 +4439,21 @@ void CMainFrame::SaveDIB(LPCTSTR fn, BYTE* pData, long size)
Gdiplus::Bitmap* bm = new Gdiplus::Bitmap(w, h, dstpitch, PixelFormat24bppRGB, p);
- UINT num; // number of image encoders
- UINT size; // size, in bytes, of the image encoder array
+ UINT num; // number of image encoders
+ UINT arraySize; // size, in bytes, of the image encoder array
// How many encoders are there?
// How big (in bytes) is the array of all ImageCodecInfo objects?
- Gdiplus::GetImageEncodersSize(&num, &size);
+ Gdiplus::GetImageEncodersSize(&num, &arraySize);
// Create a buffer large enough to hold the array of ImageCodecInfo
// objects that will be returned by GetImageEncoders.
- Gdiplus::ImageCodecInfo* pImageCodecInfo = (Gdiplus::ImageCodecInfo*)DEBUG_NEW BYTE[size];
+ Gdiplus::ImageCodecInfo* pImageCodecInfo = (Gdiplus::ImageCodecInfo*)DEBUG_NEW BYTE[arraySize];
// GetImageEncoders creates an array of ImageCodecInfo objects
// and copies that array into a previously allocated buffer.
// The third argument, imageCodecInfos, is a pointer to that buffer.
- Gdiplus::GetImageEncoders(num, size, pImageCodecInfo);
+ Gdiplus::GetImageEncoders(num, arraySize, pImageCodecInfo);
Gdiplus::EncoderParameters* pEncoderParameters = nullptr;
@@ -4686,8 +4533,12 @@ void CMainFrame::SaveThumbnails(LPCTSTR fn)
return;
}
- m_pMC->Pause();
- GetMediaState(); // wait for completion of the pause command
+ OAFilterState filterState = GetMediaState();
+ bool bWasStopped = (filterState == State_Stopped);
+ if (filterState != State_Paused) {
+ OnPlayPause();
+ GetMediaState(); // wait for completion of the pause command
+ }
CSize szVideoARCorrected, szVideo, szAR;
@@ -4721,12 +4572,12 @@ void CMainFrame::SaveThumbnails(LPCTSTR fn)
const CAppSettings& s = AfxGetAppSettings();
- int cols = max(1, min(10, s.iThumbCols));
- int rows = max(1, min(20, s.iThumbRows));
+ int cols = std::max(1, std::min(10, s.iThumbCols));
+ int rows = std::max(1, std::min(20, s.iThumbRows));
const int margin = 5;
const int infoheight = 70;
- int width = max(256, min(2560, s.iThumbWidth));
+ int width = std::max(256, std::min(2560, s.iThumbWidth));
int height = width * szVideoARCorrected.cy / szVideoARCorrected.cx * rows / cols + infoheight;
int dibsize = sizeof(BITMAPINFOHEADER) + width * height * 4;
@@ -4781,6 +4632,7 @@ void CMainFrame::SaveThumbnails(LPCTSTR fn)
DVD_HMSF_TIMECODE hmsf = RT2HMS_r(rt);
SeekTo(rt);
+ UpdateWindow();
m_nVolumeBeforeFrameStepping = m_wndToolBar.Volume;
m_pBA->put_Volume(-10000);
@@ -4825,10 +4677,10 @@ void CMainFrame::SaveThumbnails(LPCTSTR fn)
CStringW str;
str.Format(L"{\\an7\\1c&Hffffff&\\4a&Hb0&\\bord1\\shad4\\be1}{\\p1}m %d %d l %d %d %d %d %d %d{\\p}",
r.left, r.top, r.right, r.top, r.right, r.bottom, r.left, r.bottom);
- rts.Add(str, true, 0, 1, _T("thumbs")); // Thumbnail background
+ rts.Add(str, true, MS2RT(0), MS2RT(1), _T("thumbs")); // Thumbnail background
str.Format(L"{\\an3\\1c&Hffffff&\\3c&H000000&\\alpha&H80&\\fs16\\b1\\bord2\\shad0\\pos(%d,%d)}%02u:%02u:%02u",
r.right - 5, r.bottom - 3, hmsf.bHours, hmsf.bMinutes, hmsf.bSeconds);
- rts.Add(str, true, 1, 2, _T("thumbs")); // Thumbnail time
+ rts.Add(str, true, MS2RT(1), MS2RT(2), _T("thumbs")); // Thumbnail time
rts.Render(spd, 0, 25, bbox); // Draw the thumbnail background
@@ -4946,7 +4798,11 @@ void CMainFrame::SaveThumbnails(LPCTSTR fn)
SaveDIB(fn, (BYTE*)dib, dibsize);
- SeekTo(rtPos);
+ if (bWasStopped) {
+ OnPlayStop();
+ } else {
+ SeekTo(rtPos);
+ }
m_OSD.DisplayMessage(OSD_TOPLEFT, ResStr(IDS_OSD_THUMBS_SAVED), 3000);
}
@@ -4955,7 +4811,7 @@ static CString MakeSnapshotFileName(LPCTSTR prefix)
{
CTime t = CTime::GetCurrentTime();
CString fn;
- fn.Format(_T("%s_[%s]%s"), prefix, t.Format(_T("%Y.%m.%d_%H.%M.%S")), AfxGetAppSettings().strSnapshotExt);
+ fn.Format(_T("%s_[%s]%s"), PathUtils::FilterInvalidCharsFromFileName(prefix), t.Format(_T("%Y.%m.%d_%H.%M.%S")), AfxGetAppSettings().strSnapshotExt);
return fn;
}
@@ -5015,10 +4871,11 @@ void CMainFrame::OnFileSaveImage()
CStringW prefix = _T("snapshot");
if (GetPlaybackMode() == PM_FILE) {
- CString path(PathUtils::FilterInvalidCharsFromFileName(GetFileName()));
- prefix.Format(_T("%s_snapshot_%s"), path, GetVidPos());
+ prefix.Format(_T("%s_snapshot_%s"), GetFileName(), GetVidPos());
} else if (GetPlaybackMode() == PM_DVD) {
prefix.Format(_T("dvd_snapshot_%s"), GetVidPos());
+ } else if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
+ prefix.Format(_T("%s_snapshot"), m_pDVBState->sChannelName);
}
psrc.Combine(s.strSnapshotPath, MakeSnapshotFileName(prefix));
@@ -5068,6 +4925,13 @@ void CMainFrame::OnFileSaveImageAuto()
{
const CAppSettings& s = AfxGetAppSettings();
+ // If path doesn't exist, Save Image instead
+ if (!PathUtils::IsDir(s.strSnapshotPath)) {
+ AfxMessageBox(IDS_SCREENSHOT_ERROR, MB_ICONWARNING | MB_OK, 0);
+ OnFileSaveImage();
+ return;
+ }
+
/* Check if a compatible renderer is being used */
if (!IsRendererCompatibleWithSaveImage()) {
return;
@@ -5075,10 +4939,11 @@ void CMainFrame::OnFileSaveImageAuto()
CStringW prefix = _T("snapshot");
if (GetPlaybackMode() == PM_FILE) {
- CString path(PathUtils::FilterInvalidCharsFromFileName(GetFileName()));
- prefix.Format(_T("%s_snapshot_%s"), path, GetVidPos());
+ prefix.Format(_T("%s_snapshot_%s"), GetFileName(), GetVidPos());
} else if (GetPlaybackMode() == PM_DVD) {
prefix.Format(_T("dvd_snapshot_%s"), GetVidPos());
+ } else if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
+ prefix.Format(_T("%s_snapshot"), m_pDVBState->sChannelName);
}
CString fn;
@@ -5104,8 +4969,9 @@ void CMainFrame::OnFileSaveThumbnails()
CPath psrc(s.strSnapshotPath);
CStringW prefix = _T("thumbs");
if (GetPlaybackMode() == PM_FILE) {
- CString path(PathUtils::FilterInvalidCharsFromFileName(GetFileName()));
- prefix.Format(_T("%s_thumbs"), path);
+ prefix.Format(_T("%s_thumbs"), GetFileName());
+ } else {
+ ASSERT(FALSE);
}
psrc.Combine(s.strSnapshotPath, MakeSnapshotFileName(prefix));
@@ -5162,7 +5028,7 @@ void CMainFrame::OnUpdateFileSaveThumbnails(CCmdUI* pCmdUI)
pCmdUI->Enable(GetLoadState() == MLS::LOADED && !m_fAudioOnly && (GetPlaybackMode() == PM_FILE /*|| GetPlaybackMode() == PM_DVD*/));
}
-void CMainFrame::OnFileLoadsubtitle()
+void CMainFrame::OnFileSubtitlesLoad()
{
if (!m_pCAP) {
AfxMessageBox(IDS_CANNOT_LOAD_SUB, MB_ICONINFORMATION | MB_OK, 0);
@@ -5174,7 +5040,7 @@ void CMainFrame::OnFileLoadsubtitle()
dwFlags |= OFN_DONTADDTORECENT;
}
CString filters;
- filters.Format(_T("%s|*.srt;*.sub;*.ssa;*.ass;*smi;*.psb;*.txt;*.idx;*.usf;*.xss;*.rt;*.sup|%s"),
+ filters.Format(_T("%s|*.srt;*.sub;*.ssa;*.ass;*.smi;*.psb;*.txt;*.idx;*.usf;*.xss;*.rt;*.sup|%s"),
ResStr(IDS_SUBTITLE_FILES_FILTER), ResStr(IDS_ALL_FILES_FILTER));
CFileDialog fd(TRUE, nullptr, nullptr, dwFlags, filters, GetModalParent());
@@ -5207,12 +5073,12 @@ void CMainFrame::OnFileLoadsubtitle()
}
}
-void CMainFrame::OnUpdateFileLoadsubtitle(CCmdUI* pCmdUI)
+void CMainFrame::OnUpdateFileSubtitlesLoad(CCmdUI* pCmdUI)
{
pCmdUI->Enable(GetLoadState() == MLS::LOADED && !IsPlaybackCaptureMode() && !m_fAudioOnly && m_pCAP);
}
-void CMainFrame::OnFileSavesubtitle()
+void CMainFrame::OnFileSubtitlesSave()
{
int i = 0;
SubtitleInput* pSubInput = GetSubtitleInput(i, true);
@@ -5223,13 +5089,14 @@ void CMainFrame::OnFileSavesubtitle()
return;
}
- CPath suggestedFileName(GetFileName());
- suggestedFileName.RemoveExtension(); // exclude the extension, it will be auto-completed
+ // exclude the extension, it will be auto-completed
+ CString suggestedFileName(PathUtils::FileName(GetFileName()));
// Try to detect the directory of the current playlist item, and prepend it if it's valid
CPath path(m_wndPlaylistBar.GetCurFileName());
- if (path.RemoveFileSpec() && path.IsDirectory() && path.Append(suggestedFileName)) {
- suggestedFileName = path;
+ if (path.RemoveFileSpec() && path.IsDirectory()) {
+ path.AddBackslash();
+ suggestedFileName = CString(path) + suggestedFileName;
}
if (clsid == __uuidof(CVobSubFile)) {
@@ -5267,6 +5134,17 @@ void CMainFrame::OnFileSavesubtitle()
CAppSettings& s = AfxGetAppSettings();
+ if (pRTS->m_lcid && pRTS->m_lcid != LCID(-1)) {
+ CString str;
+ int len = GetLocaleInfo(pRTS->m_lcid, LOCALE_SISO639LANGNAME, str.GetBuffer(64), 64);
+ str.ReleaseBufferSetLength(std::max(len - 1, 0));
+ suggestedFileName += _T('.') + str;
+
+ if (pRTS->m_eHearingImpaired == Subtitle::HI_YES) {
+ suggestedFileName += _T(".hi");
+ }
+ }
+
// same thing as in the case of CVobSubFile above for lpszDefExt
CSaveSubtitlesFileDialog fd(pRTS->m_encoding, m_pCAP->GetSubtitleDelay(), s.bSubSaveExternalStyleFile,
_T("srt"), suggestedFileName, filter, types, GetModalParent());
@@ -5276,11 +5154,13 @@ void CMainFrame::OnFileSavesubtitle()
s.bSubSaveExternalStyleFile = fd.GetSaveExternalStyleFile();
pRTS->SaveAs(fd.GetPathName(), types[fd.m_ofn.nFilterIndex - 1], m_pCAP->GetFPS(), fd.GetDelay(), fd.GetEncoding(), fd.GetSaveExternalStyleFile());
}
+ } else {
+ AfxMessageBox(_T("This operation is not supported.\r\nThe selected subtitles cannot be saved."), MB_ICONEXCLAMATION | MB_OK);
}
}
}
-void CMainFrame::OnUpdateFileSavesubtitle(CCmdUI* pCmdUI)
+void CMainFrame::OnUpdateFileSubtitlesSave(CCmdUI* pCmdUI)
{
bool bEnable = false;
@@ -5295,71 +5175,36 @@ void CMainFrame::OnUpdateFileSavesubtitle(CCmdUI* pCmdUI)
pCmdUI->Enable(bEnable);
}
-void CMainFrame::OnFileISDBSearch()
+void CMainFrame::OnFileSubtitlesUpload()
{
- CStringA url = "http://" + AfxGetAppSettings().strISDb + "/index.php?";
- CStringA args = ISDb::makeargs(m_wndPlaylistBar.m_pl);
- ShellExecute(m_hWnd, _T("open"), CString(url + args), nullptr, nullptr, SW_SHOWDEFAULT);
+ m_wndSubtitlesUploadDialog.ShowWindow(SW_SHOW);
}
-void CMainFrame::OnUpdateFileISDBSearch(CCmdUI* pCmdUI)
+void CMainFrame::OnUpdateFileSubtitlesUpload(CCmdUI* pCmdUI)
{
- pCmdUI->Enable(TRUE);
-}
-
-void CMainFrame::OnFileISDBUpload()
-{
- CStringA url = "http://" + AfxGetAppSettings().strISDb + "/ul.php?";
-
- CStringA args = ISDb::makeargs(m_wndPlaylistBar.m_pl);
- ShellExecute(m_hWnd, _T("open"), CString(url + args), nullptr, nullptr, SW_SHOWDEFAULT);
-}
-
-void CMainFrame::OnUpdateFileISDBUpload(CCmdUI* pCmdUI)
-{
- pCmdUI->Enable(!IsPlaylistEmpty());
+ const CAppSettings& s = AfxGetAppSettings();
+ pCmdUI->Enable(!m_pSubStreams.IsEmpty() && s.fEnableSubtitles);
}
-void CMainFrame::OnFileISDBDownload()
+void CMainFrame::OnFileSubtitlesDownload()
{
- const CAppSettings& s = AfxGetAppSettings();
- ISDb::filehash fh;
- if (!ISDb::mpc_filehash(m_pFSF, fh)) {
- if (!ISDb::mpc_filehash((CString)m_wndPlaylistBar.GetCurFileName(), fh)) {
- MessageBeep(UINT_MAX);
- return;
- }
- }
-
- try {
- CStringA url = "http://" + s.strISDb + "/index.php?";
- CStringA args;
- args.Format("player=mpc-hc&name[0]=%s&size[0]=%016I64x&hash[0]=%016I64x",
- UrlEncode(CStringA(fh.name)), fh.size, fh.mpc_filehash);
- url.Append(args);
-
- CSubtitleDlDlg dlg(GetModalParent(), url, fh.name);
- dlg.DoModal();
- } catch (CInternetException* ie) {
- ie->Delete();
- return;
- }
+ m_wndSubtitlesDownloadDialog.ShowWindow(SW_SHOW);
}
-void CMainFrame::OnUpdateFileISDBDownload(CCmdUI* pCmdUI)
+void CMainFrame::OnUpdateFileSubtitlesDownload(CCmdUI* pCmdUI)
{
pCmdUI->Enable(GetLoadState() == MLS::LOADED && !IsPlaybackCaptureMode() && m_pCAP && !m_fAudioOnly);
}
void CMainFrame::OnFileProperties()
{
- CPPageFileInfoSheet fileinfo(m_wndPlaylistBar.GetCurFileName(), this, GetModalParent());
+ CPPageFileInfoSheet fileinfo(m_pDVBState ? m_pDVBState->sChannelName : m_wndPlaylistBar.GetCurFileName(), this, GetModalParent());
fileinfo.DoModal();
}
void CMainFrame::OnUpdateFileProperties(CCmdUI* pCmdUI)
{
- pCmdUI->Enable(GetLoadState() == MLS::LOADED && GetPlaybackMode() == PM_FILE);
+ pCmdUI->Enable(GetLoadState() == MLS::LOADED && GetPlaybackMode() != PM_ANALOG_CAPTURE);
}
void CMainFrame::OnFileCloseMedia()
@@ -5383,7 +5228,7 @@ void CMainFrame::OnViewTearingTest()
AfxGetMyApp()->m_Renderers.m_bTearingTest = !AfxGetMyApp()->m_Renderers.m_bTearingTest;
}
-void CMainFrame::OnUpdateViewDisplayStats(CCmdUI* pCmdUI)
+void CMainFrame::OnUpdateViewDisplayRendererStats(CCmdUI* pCmdUI)
{
const CAppSettings& s = AfxGetAppSettings();
bool supported = (s.iDSVideoRendererType == VIDRNDT_DS_VMR9RENDERLESS
@@ -5394,12 +5239,12 @@ void CMainFrame::OnUpdateViewDisplayStats(CCmdUI* pCmdUI)
pCmdUI->SetCheck(supported && AfxGetMyApp()->m_Renderers.m_iDisplayStats);
}
-void CMainFrame::OnViewResetStats()
+void CMainFrame::OnViewResetRendererStats()
{
AfxGetMyApp()->m_Renderers.m_bResetStats = true; // Reset by "consumer"
}
-void CMainFrame::OnViewDisplayStatsSC()
+void CMainFrame::OnViewDisplayRendererStats()
{
const CAppSettings& s = AfxGetAppSettings();
bool supported = (s.iDSVideoRendererType == VIDRNDT_DS_VMR9RENDERLESS
@@ -5712,7 +5557,7 @@ void CMainFrame::OnUpdateViewFullFloatingPointProcessing(CCmdUI* pCmdUI)
bool supported = ((s.iDSVideoRendererType == VIDRNDT_DS_VMR9RENDERLESS
|| s.iDSVideoRendererType == VIDRNDT_DS_EVR_CUSTOM)
&& r.iAPSurfaceUsage == VIDRNDT_AP_TEXTURE3D)
- && rd.m_bFP16Support;
+ && rd.m_bFP32Support;
pCmdUI->Enable(supported);
pCmdUI->SetCheck(r.m_AdvRendSets.bVMR9FullFloatingPointProcessing);
@@ -5774,9 +5619,8 @@ void CMainFrame::OnViewVSync()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bVMR9VSync = !r.m_AdvRendSets.bVMR9VSync;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMR9VSync
- ? ResStr(IDS_OSD_RS_VSYNC_ON)
- : ResStr(IDS_OSD_RS_VSYNC_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMR9VSync
+ ? IDS_OSD_RS_VSYNC_ON : IDS_OSD_RS_VSYNC_OFF));
}
void CMainFrame::OnViewVSyncAccurate()
@@ -5784,9 +5628,8 @@ void CMainFrame::OnViewVSyncAccurate()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bVMR9VSyncAccurate = !r.m_AdvRendSets.bVMR9VSyncAccurate;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMR9VSyncAccurate
- ? ResStr(IDS_OSD_RS_ACCURATE_VSYNC_ON)
- : ResStr(IDS_OSD_RS_ACCURATE_VSYNC_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMR9VSyncAccurate
+ ? IDS_OSD_RS_ACCURATE_VSYNC_ON : IDS_OSD_RS_ACCURATE_VSYNC_OFF));
}
void CMainFrame::OnViewSynchronizeVideo()
@@ -5802,9 +5645,8 @@ void CMainFrame::OnViewSynchronizeVideo()
}
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bSynchronizeVideo
- ? ResStr(IDS_OSD_RS_SYNC_TO_DISPLAY_ON)
- : ResStr(IDS_OSD_RS_SYNC_TO_DISPLAY_ON));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bSynchronizeVideo
+ ? IDS_OSD_RS_SYNC_TO_DISPLAY_ON : IDS_OSD_RS_SYNC_TO_DISPLAY_ON));
}
void CMainFrame::OnViewSynchronizeDisplay()
@@ -5820,9 +5662,8 @@ void CMainFrame::OnViewSynchronizeDisplay()
}
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bSynchronizeDisplay
- ? ResStr(IDS_OSD_RS_SYNC_TO_VIDEO_ON)
- : ResStr(IDS_OSD_RS_SYNC_TO_VIDEO_ON));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bSynchronizeDisplay
+ ? IDS_OSD_RS_SYNC_TO_VIDEO_ON : IDS_OSD_RS_SYNC_TO_VIDEO_ON));
}
void CMainFrame::OnViewSynchronizeNearest()
@@ -5838,9 +5679,8 @@ void CMainFrame::OnViewSynchronizeNearest()
}
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bSynchronizeNearest
- ? ResStr(IDS_OSD_RS_PRESENT_NEAREST_ON)
- : ResStr(IDS_OSD_RS_PRESENT_NEAREST_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bSynchronizeNearest
+ ? IDS_OSD_RS_PRESENT_NEAREST_ON : IDS_OSD_RS_PRESENT_NEAREST_OFF));
}
void CMainFrame::OnViewColorManagementEnable()
@@ -5848,9 +5688,8 @@ void CMainFrame::OnViewColorManagementEnable()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bVMR9ColorManagementEnable = !r.m_AdvRendSets.bVMR9ColorManagementEnable;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMR9ColorManagementEnable
- ? ResStr(IDS_OSD_RS_COLOR_MANAGEMENT_ON)
- : ResStr(IDS_OSD_RS_COLOR_MANAGEMENT_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMR9ColorManagementEnable
+ ? IDS_OSD_RS_COLOR_MANAGEMENT_ON : IDS_OSD_RS_COLOR_MANAGEMENT_OFF));
}
void CMainFrame::OnViewColorManagementInputAuto()
@@ -5966,9 +5805,8 @@ void CMainFrame::OnViewFlushGPUBeforeVSync()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bVMRFlushGPUBeforeVSync = !r.m_AdvRendSets.bVMRFlushGPUBeforeVSync;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMRFlushGPUBeforeVSync
- ? ResStr(IDS_OSD_RS_FLUSH_BEF_VSYNC_ON)
- : ResStr(IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMRFlushGPUBeforeVSync
+ ? IDS_OSD_RS_FLUSH_BEF_VSYNC_ON : IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF));
}
void CMainFrame::OnViewFlushGPUAfterVSync()
@@ -5976,9 +5814,8 @@ void CMainFrame::OnViewFlushGPUAfterVSync()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bVMRFlushGPUAfterPresent = !r.m_AdvRendSets.bVMRFlushGPUAfterPresent;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMRFlushGPUAfterPresent
- ? ResStr(IDS_OSD_RS_FLUSH_AFT_PRES_ON)
- : ResStr(IDS_OSD_RS_FLUSH_AFT_PRES_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMRFlushGPUAfterPresent
+ ? IDS_OSD_RS_FLUSH_AFT_PRES_ON : IDS_OSD_RS_FLUSH_AFT_PRES_OFF));
}
void CMainFrame::OnViewFlushGPUWait()
@@ -5986,9 +5823,8 @@ void CMainFrame::OnViewFlushGPUWait()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bVMRFlushGPUWait = !r.m_AdvRendSets.bVMRFlushGPUWait;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMRFlushGPUWait
- ? ResStr(IDS_OSD_RS_WAIT_ON)
- : ResStr(IDS_OSD_RS_WAIT_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMRFlushGPUWait
+ ? IDS_OSD_RS_WAIT_ON : IDS_OSD_RS_WAIT_OFF));
}
void CMainFrame::OnViewD3DFullScreen()
@@ -5996,9 +5832,8 @@ void CMainFrame::OnViewD3DFullScreen()
CAppSettings& r = AfxGetAppSettings();
r.fD3DFullscreen = !r.fD3DFullscreen;
r.SaveSettings();
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.fD3DFullscreen
- ? ResStr(IDS_OSD_RS_D3D_FULLSCREEN_ON)
- : ResStr(IDS_OSD_RS_D3D_FULLSCREEN_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.fD3DFullscreen
+ ? IDS_OSD_RS_D3D_FULLSCREEN_ON : IDS_OSD_RS_D3D_FULLSCREEN_OFF));
}
void CMainFrame::OnViewDisableDesktopComposition()
@@ -6006,9 +5841,8 @@ void CMainFrame::OnViewDisableDesktopComposition()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bVMRDisableDesktopComposition = !r.m_AdvRendSets.bVMRDisableDesktopComposition;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMRDisableDesktopComposition
- ? ResStr(IDS_OSD_RS_NO_DESKTOP_COMP_ON)
- : ResStr(IDS_OSD_RS_NO_DESKTOP_COMP_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMRDisableDesktopComposition
+ ? IDS_OSD_RS_NO_DESKTOP_COMP_ON : IDS_OSD_RS_NO_DESKTOP_COMP_OFF));
}
void CMainFrame::OnViewAlternativeVSync()
@@ -6016,9 +5850,8 @@ void CMainFrame::OnViewAlternativeVSync()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bVMR9AlterativeVSync = !r.m_AdvRendSets.bVMR9AlterativeVSync;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMR9AlterativeVSync
- ? ResStr(IDS_OSD_RS_ALT_VSYNC_ON)
- : ResStr(IDS_OSD_RS_ALT_VSYNC_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMR9AlterativeVSync
+ ? IDS_OSD_RS_ALT_VSYNC_ON : IDS_OSD_RS_ALT_VSYNC_OFF));
}
void CMainFrame::OnViewResetDefault()
@@ -6042,9 +5875,8 @@ void CMainFrame::OnViewFullscreenGUISupport()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bVMR9FullscreenGUISupport = !r.m_AdvRendSets.bVMR9FullscreenGUISupport;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMR9FullscreenGUISupport
- ? ResStr(IDS_OSD_RS_D3D_FS_GUI_SUPP_ON)
- : ResStr(IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMR9FullscreenGUISupport
+ ? IDS_OSD_RS_D3D_FS_GUI_SUPP_ON : IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF));
}
void CMainFrame::OnViewHighColorResolution()
@@ -6052,9 +5884,8 @@ void CMainFrame::OnViewHighColorResolution()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bEVRHighColorResolution = !r.m_AdvRendSets.bEVRHighColorResolution;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bEVRHighColorResolution
- ? ResStr(IDS_OSD_RS_10BIT_RBG_OUT_ON)
- : ResStr(IDS_OSD_RS_10BIT_RBG_OUT_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bEVRHighColorResolution
+ ? IDS_OSD_RS_10BIT_RBG_OUT_ON : IDS_OSD_RS_10BIT_RBG_OUT_OFF));
}
void CMainFrame::OnViewForceInputHighColorResolution()
@@ -6062,9 +5893,8 @@ void CMainFrame::OnViewForceInputHighColorResolution()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bEVRForceInputHighColorResolution = !r.m_AdvRendSets.bEVRForceInputHighColorResolution;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bEVRForceInputHighColorResolution
- ? ResStr(IDS_OSD_RS_10BIT_RBG_IN_ON)
- : ResStr(IDS_OSD_RS_10BIT_RBG_IN_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bEVRForceInputHighColorResolution
+ ? IDS_OSD_RS_10BIT_RBG_IN_ON : IDS_OSD_RS_10BIT_RBG_IN_OFF));
}
void CMainFrame::OnViewFullFloatingPointProcessing()
@@ -6075,9 +5905,8 @@ void CMainFrame::OnViewFullFloatingPointProcessing()
r.m_AdvRendSets.bVMR9HalfFloatingPointProcessing = false;
}
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMR9FullFloatingPointProcessing
- ? ResStr(IDS_OSD_RS_FULL_FP_PROCESS_ON)
- : ResStr(IDS_OSD_RS_FULL_FP_PROCESS_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMR9FullFloatingPointProcessing
+ ? IDS_OSD_RS_FULL_FP_PROCESS_ON : IDS_OSD_RS_FULL_FP_PROCESS_OFF));
}
void CMainFrame::OnViewHalfFloatingPointProcessing()
@@ -6088,9 +5917,8 @@ void CMainFrame::OnViewHalfFloatingPointProcessing()
r.m_AdvRendSets.bVMR9FullFloatingPointProcessing = false;
}
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bVMR9HalfFloatingPointProcessing
- ? ResStr(IDS_OSD_RS_HALF_FP_PROCESS_ON)
- : ResStr(IDS_OSD_RS_HALF_FP_PROCESS_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bVMR9HalfFloatingPointProcessing
+ ? IDS_OSD_RS_HALF_FP_PROCESS_ON : IDS_OSD_RS_HALF_FP_PROCESS_OFF));
}
void CMainFrame::OnViewEnableFrameTimeCorrection()
@@ -6098,9 +5926,8 @@ void CMainFrame::OnViewEnableFrameTimeCorrection()
CRenderersSettings& r = AfxGetAppSettings().m_RenderersSettings;
r.m_AdvRendSets.bEVREnableFrameTimeCorrection = !r.m_AdvRendSets.bEVREnableFrameTimeCorrection;
r.UpdateData(true);
- m_OSD.DisplayMessage(OSD_TOPRIGHT, r.m_AdvRendSets.bEVREnableFrameTimeCorrection
- ? ResStr(IDS_OSD_RS_FT_CORRECTION_ON)
- : ResStr(IDS_OSD_RS_FT_CORRECTION_OFF));
+ m_OSD.DisplayMessage(OSD_TOPRIGHT, ResStr(r.m_AdvRendSets.bEVREnableFrameTimeCorrection
+ ? IDS_OSD_RS_FT_CORRECTION_ON : IDS_OSD_RS_FT_CORRECTION_OFF));
}
void CMainFrame::OnViewVSyncOffsetIncrease()
@@ -6135,32 +5962,74 @@ void CMainFrame::OnViewVSyncOffsetDecrease()
m_OSD.DisplayMessage(OSD_TOPRIGHT, strOSD);
}
-void CMainFrame::OnUpdateViewRemainingTime(CCmdUI* pCmdUI)
+void CMainFrame::OnUpdateViewOSDDisplayTime(CCmdUI* pCmdUI)
{
const CAppSettings& s = AfxGetAppSettings();
- pCmdUI->Enable(s.fShowOSD && (GetLoadState() != MLS::CLOSED));
- pCmdUI->SetCheck(m_bRemainingTime);
+ pCmdUI->Enable(s.fShowOSD && GetLoadState() != MLS::CLOSED);
+ pCmdUI->SetCheck(m_bOSDDisplayTime);
}
-void CMainFrame::OnViewRemainingTime()
+void CMainFrame::OnViewOSDDisplayTime()
{
- m_bRemainingTime = !m_bRemainingTime;
+ m_bOSDDisplayTime = !m_bOSDDisplayTime;
- if (!m_bRemainingTime) {
+ if (!m_bOSDDisplayTime) {
m_OSD.ClearMessage();
}
OnTimer(TIMER_STREAMPOSPOLLER2);
}
+void CMainFrame::OnUpdateViewOSDShowFileName(CCmdUI* pCmdUI)
+{
+ const CAppSettings& s = AfxGetAppSettings();
+ pCmdUI->Enable(s.fShowOSD && GetLoadState() != MLS::CLOSED);
+}
+
+void CMainFrame::OnViewOSDShowFileName()
+{
+ CString strOSD;
+ switch (GetPlaybackMode()) {
+ case PM_FILE:
+ strOSD = GetFileName();
+ break;
+ case PM_DVD:
+ strOSD = _T("DVD");
+ if (m_pDVDI) {
+ CString path;
+ ULONG len = 0;
+ if (SUCCEEDED(m_pDVDI->GetDVDDirectory(path.GetBuffer(MAX_PATH), MAX_PATH, &len)) && len) {
+ path.ReleaseBuffer();
+ if (path.Find(_T("\\VIDEO_TS")) == 2) {
+ strOSD.AppendFormat(_T(" - %s"), GetDriveLabel(CPath(path)));
+ } else {
+ strOSD.AppendFormat(_T(" - %s"), path);
+ }
+ }
+ }
+ break;
+ case PM_ANALOG_CAPTURE:
+ strOSD = GetCaptureTitle();
+ break;
+ case PM_DIGITAL_CAPTURE:
+ UpdateCurrentChannelInfo(true, false);
+ break;
+ default: // Shouldn't happen
+ ASSERT(FALSE);
+ return;
+ }
+ if (!strOSD.IsEmpty()) {
+ m_OSD.DisplayMessage(OSD_TOPLEFT, strOSD);
+ }
+}
+
void CMainFrame::OnD3DFullscreenToggle()
{
CAppSettings& s = AfxGetAppSettings();
CString strMsg;
s.fD3DFullscreen = !s.fD3DFullscreen;
- strMsg = s.fD3DFullscreen ? ResStr(IDS_OSD_RS_D3D_FULLSCREEN_ON) : ResStr(IDS_OSD_RS_D3D_FULLSCREEN_OFF);
-
+ strMsg.LoadString(s.fD3DFullscreen ? IDS_OSD_RS_D3D_FULLSCREEN_ON : IDS_OSD_RS_D3D_FULLSCREEN_OFF);
if (GetLoadState() == MLS::CLOSED) {
m_closingmsg = strMsg;
} else {
@@ -6200,42 +6069,39 @@ void CMainFrame::SetCaptionState(MpcCaptionState eState)
DWORD dwMenuFlags = GetMenuBarVisibility();
CRect windowRect;
- GetWindowRect(&windowRect);
- const int base = MpcCaptionState::MODE_COUNT;
const bool bZoomed = !!IsZoomed();
+
+ if (!bZoomed) {
+ GetWindowRect(&windowRect);
+ CRect decorationsRect;
+ VERIFY(AdjustWindowRectEx(decorationsRect, GetWindowStyle(m_hWnd), dwMenuFlags == AFX_MBV_KEEPVISIBLE, GetWindowExStyle(m_hWnd)));
+ windowRect.bottom -= decorationsRect.bottom;
+ windowRect.right -= decorationsRect.right;
+ windowRect.top -= decorationsRect.top;
+ windowRect.left -= decorationsRect.left;
+ }
+
+ const int base = MpcCaptionState::MODE_COUNT;
for (int i = eOldState; i != eState; i = (i + 1) % base) {
switch (static_cast<MpcCaptionState>(i)) {
case MpcCaptionState::MODE_BORDERLESS:
dwMenuFlags = AFX_MBV_KEEPVISIBLE;
dwAdd |= (WS_CAPTION | WS_THICKFRAME);
dwRemove &= ~(WS_CAPTION | WS_THICKFRAME);
- windowRect.InflateRect(GetSystemMetrics(SM_CXSIZEFRAME), GetSystemMetrics(SM_CYSIZEFRAME));
- if (!bZoomed) {
- windowRect.bottom += GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYMENU);
- }
break;
case MpcCaptionState::MODE_SHOWCAPTIONMENU:
- dwMenuFlags = AFX_MBV_DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10;
- if (!bZoomed) {
- windowRect.bottom -= GetSystemMetrics(SM_CYMENU);
- }
+ dwMenuFlags = AFX_MBV_DISPLAYONFOCUS;
break;
case MpcCaptionState::MODE_HIDEMENU:
- dwMenuFlags = AFX_MBV_DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10;
+ dwMenuFlags = AFX_MBV_DISPLAYONFOCUS;
dwAdd &= ~WS_CAPTION;
dwRemove |= WS_CAPTION;
- windowRect.DeflateRect(GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER));
- if (!bZoomed) {
- windowRect.bottom -= GetSystemMetrics(SM_CYCAPTION);
- }
break;
case MpcCaptionState::MODE_FRAMEONLY:
- dwMenuFlags = AFX_MBV_DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10;
+ dwMenuFlags = AFX_MBV_DISPLAYONFOCUS;
dwAdd &= ~WS_THICKFRAME;
dwRemove |= WS_THICKFRAME;
- windowRect.DeflateRect(GetSystemMetrics(SM_CXSIZEFRAME) - GetSystemMetrics(SM_CXBORDER),
- GetSystemMetrics(SM_CYSIZEFRAME) - GetSystemMetrics(SM_CYBORDER));
break;
default:
ASSERT(FALSE);
@@ -6243,12 +6109,17 @@ void CMainFrame::SetCaptionState(MpcCaptionState eState)
}
UINT uFlags = SWP_NOZORDER;
- if (dwRemove || dwAdd) {
+ if (dwRemove != dwAdd) {
uFlags |= SWP_FRAMECHANGED;
+ VERIFY(SetWindowLong(m_hWnd, GWL_STYLE, (GetWindowLong(m_hWnd, GWL_STYLE) | dwAdd) & ~dwRemove));
}
SetMenuBarVisibility(dwMenuFlags);
- VERIFY(SetWindowLong(m_hWnd, GWL_STYLE, (GetWindowLong(m_hWnd, GWL_STYLE) | dwAdd) & ~dwRemove));
+ if (bZoomed) {
+ CMonitors::GetNearestMonitor(this).GetWorkAreaRect(windowRect);
+ } else {
+ VERIFY(AdjustWindowRectEx(windowRect, GetWindowStyle(m_hWnd), dwMenuFlags == AFX_MBV_KEEPVISIBLE, GetWindowExStyle(m_hWnd)));
+ }
VERIFY(SetWindowPos(nullptr, windowRect.left, windowRect.top, windowRect.Width(), windowRect.Height(), uFlags));
}
@@ -6453,7 +6324,7 @@ void CMainFrame::OnUpdateViewCompact(CCmdUI* pCmdUI)
void CMainFrame::OnViewNormal()
{
SetCaptionState(MODE_SHOWCAPTIONMENU);
- m_controls.SetToolbarsSelection(CS_SEEKBAR | CS_TOOLBAR | CS_STATUSBAR | CS_INFOBAR, true);
+ m_controls.SetToolbarsSelection(CS_SEEKBAR | CS_TOOLBAR | CS_STATUSBAR, true);
}
void CMainFrame::OnUpdateViewNormal(CCmdUI* pCmdUI)
@@ -6475,7 +6346,7 @@ void CMainFrame::OnViewFullscreenSecondary()
{
const CAppSettings& s = AfxGetAppSettings();
- if (IsD3DFullScreenMode() || (s.IsD3DFullscreen() && !m_fFullScreen)) {
+ if (IsD3DFullScreenMode() || (s.IsD3DFullscreen() && !m_fFullScreen && !m_fAudioOnly)) {
ToggleD3DFullscreen(false);
} else {
ToggleFullscreen(true, false);
@@ -6573,33 +6444,24 @@ void CMainFrame::OnViewSwitchVideoFrame()
MoveVideoWindow();
}
-void CMainFrame::OnViewKeepaspectratio()
-{
- CAppSettings& s = AfxGetAppSettings();
-
- s.fKeepAspectRatio = !s.fKeepAspectRatio;
- MoveVideoWindow();
-}
-
-void CMainFrame::OnUpdateViewKeepaspectratio(CCmdUI* pCmdUI)
-{
- pCmdUI->Enable(GetLoadState() == MLS::LOADED && !m_fAudioOnly);
- pCmdUI->SetCheck(AfxGetAppSettings().fKeepAspectRatio);
-}
-
void CMainFrame::OnViewCompMonDeskARDiff()
{
CAppSettings& s = AfxGetAppSettings();
s.fCompMonDeskARDiff = !s.fCompMonDeskARDiff;
- MoveVideoWindow();
+ OnVideoSizeChanged();
}
void CMainFrame::OnUpdateViewCompMonDeskARDiff(CCmdUI* pCmdUI)
{
const CAppSettings& s = AfxGetAppSettings();
- pCmdUI->Enable(GetLoadState() == MLS::LOADED && !m_fAudioOnly && s.iDSVideoRendererType != VIDRNDT_DS_EVR);
+ pCmdUI->Enable(GetLoadState() == MLS::LOADED
+ && !m_fAudioOnly
+ && s.iDSVideoRendererType != VIDRNDT_DS_EVR
+ // This doesn't work with madVR due to the fact that it positions video itself.
+ // And it has exactly the same option built in.
+ && s.iDSVideoRendererType != VIDRNDT_DS_MADVR);
pCmdUI->SetCheck(s.fCompMonDeskARDiff);
}
@@ -6617,6 +6479,9 @@ void CMainFrame::OnViewPanNScan(UINT nID)
m_ZoomX = m_ZoomY = 1.0;
m_PosX = m_PosY = 0.5;
m_AngleX = m_AngleY = m_AngleZ = 0;
+ if (m_pMVRC) {
+ m_pMVRC->SendCommandInt("rotate", 0);
+ }
break;
case ID_VIEW_INCSIZE:
x = y = 1;
@@ -6682,15 +6547,15 @@ void CMainFrame::OnViewPanNScan(UINT nID)
}
if (dx < 0 && m_PosX > 0) {
- m_PosX = max(m_PosX - 0.005 * m_ZoomX, 0.0);
+ m_PosX = std::max(m_PosX - 0.005 * m_ZoomX, 0.0);
} else if (dx > 0 && m_PosX < 1) {
- m_PosX = min(m_PosX + 0.005 * m_ZoomX, 1.0);
+ m_PosX = std::min(m_PosX + 0.005 * m_ZoomX, 1.0);
}
if (dy < 0 && m_PosY > 0) {
- m_PosY = max(m_PosY - 0.005 * m_ZoomY, 0.0);
+ m_PosY = std::max(m_PosY - 0.005 * m_ZoomY, 0.0);
} else if (dy > 0 && m_PosY < 1) {
- m_PosY = min(m_PosY + 0.005 * m_ZoomY, 1.0);
+ m_PosY = std::min(m_PosY + 0.005 * m_ZoomY, 1.0);
}
MoveVideoWindow(true);
@@ -6759,10 +6624,10 @@ void CMainFrame::OnViewPanNScanPresets(UINT nID)
return;
}
- m_PosX = min(max(m_PosX, 0.0), 1.0);
- m_PosY = min(max(m_PosY, 0.0), 1.0);
- m_ZoomX = min(max(m_ZoomX, 0.2), 3.0);
- m_ZoomY = min(max(m_ZoomY, 0.2), 3.0);
+ m_PosX = std::min(std::max(m_PosX, 0.0), 1.0);
+ m_PosY = std::min(std::max(m_PosY, 0.0), 1.0);
+ m_ZoomX = std::min(std::max(m_ZoomX, 0.2), 3.0);
+ m_ZoomY = std::min(std::max(m_ZoomY, 0.2), 3.0);
MoveVideoWindow(true);
}
@@ -6776,34 +6641,84 @@ void CMainFrame::OnUpdateViewPanNScanPresets(CCmdUI* pCmdUI)
void CMainFrame::OnViewRotate(UINT nID)
{
- if (!m_pCAP) {
- return;
- }
+ HRESULT hr = E_NOTIMPL;
- switch (nID) {
- case ID_PANSCAN_ROTATEXP:
- m_AngleX += 2;
- break;
- case ID_PANSCAN_ROTATEXM:
- m_AngleX -= 2;
- break;
- case ID_PANSCAN_ROTATEYP:
- m_AngleY += 2;
- break;
- case ID_PANSCAN_ROTATEYM:
- m_AngleY -= 2;
- break;
- case ID_PANSCAN_ROTATEZP:
- m_AngleZ += 2;
- break;
- case ID_PANSCAN_ROTATEZM:
- m_AngleZ -= 2;
- break;
- default:
+ if (m_pMVRC && m_pMVRI) {
+ int rotation;
+ if (FAILED(m_pMVRI->GetInt("rotation", &rotation))) {
return;
+ }
+
+ switch (nID) {
+ case ID_PANSCAN_ROTATEZP:
+ rotation += 270;
+ break;
+ case ID_PANSCAN_ROTATEZM:
+ rotation += 90;
+ break;
+ default:
+ return;
+ }
+ rotation %= 360;
+ ASSERT(rotation >= 0);
+
+ if (SUCCEEDED(hr = m_pMVRC->SendCommandInt("rotate", rotation))) {
+ m_AngleZ = (360 - rotation) % 360;
+ }
+ } else if (m_pCAP) {
+ switch (nID) {
+ case ID_PANSCAN_ROTATEXP:
+ m_AngleX += 2;
+ break;
+ case ID_PANSCAN_ROTATEXM:
+ if (m_AngleX >= 180) {
+ m_AngleX = 0;
+ } else {
+ m_AngleX = 180;
+ }
+ break;
+ case ID_PANSCAN_ROTATEYP:
+ m_AngleY += 2;
+ break;
+ case ID_PANSCAN_ROTATEYM:
+ if (m_AngleY >= 180) {
+ m_AngleY = 0;
+ } else {
+ m_AngleY = 180;
+ }
+ break;
+ case ID_PANSCAN_ROTATEZP:
+ m_AngleZ += 2;
+ break;
+ case ID_PANSCAN_ROTATEZM:
+ if (m_AngleZ >= 270) {
+ m_AngleZ = 0;
+ } else if (m_AngleZ >= 180) {
+ m_AngleZ = 270;
+ } else if (m_AngleZ >= 90) {
+ m_AngleZ = 180;
+ } else {
+ m_AngleZ = 90;
+ }
+ break;
+ default:
+ return;
+ }
+ m_AngleX %= 360;
+ m_AngleY %= 360;
+ m_AngleZ %= 360;
+
+ hr = m_pCAP->SetVideoAngle(Vector(Vector::DegToRad(m_AngleX), Vector::DegToRad(m_AngleY), Vector::DegToRad(m_AngleZ)));
+ }
+
+ if (FAILED(hr)) {
+ m_AngleX = m_AngleY = m_AngleZ = 0;
+ return;
}
- m_pCAP->SetVideoAngle(Vector(Vector::DegToRad(m_AngleX), Vector::DegToRad(m_AngleY), Vector::DegToRad(m_AngleZ)));
+ ASSERT(m_AngleX >= 0 && m_AngleX < 360);
+ ASSERT(m_AngleY >= 0 && m_AngleY < 360);
+ ASSERT(m_AngleZ >= 0 && m_AngleZ < 360);
CString info;
info.Format(_T("x: %d, y: %d, z: %d"), m_AngleX, m_AngleY, m_AngleZ);
@@ -6812,7 +6727,7 @@ void CMainFrame::OnViewRotate(UINT nID)
void CMainFrame::OnUpdateViewRotate(CCmdUI* pCmdUI)
{
- pCmdUI->Enable(GetLoadState() == MLS::LOADED && !m_fAudioOnly && m_pCAP);
+ pCmdUI->Enable(GetLoadState() == MLS::LOADED && !m_fAudioOnly && (m_pCAP || (m_pMVRC && m_pMVRI)));
}
// FIXME
@@ -6820,27 +6735,40 @@ const static SIZE s_ar[] = {{0, 0}, {4, 3}, {5, 4}, {16, 9}, {235, 100}, {185, 1
void CMainFrame::OnViewAspectRatio(UINT nID)
{
- CSize& ar = AfxGetAppSettings().sizeAspectRatio;
- ar = s_ar[nID - ID_ASPECTRATIO_START];
- CString info;
+ auto& s = AfxGetAppSettings();
- if (ar.cx && ar.cy) {
- info.Format(IDS_MAINFRM_68, ar.cx, ar.cy);
+ CString info;
+ if (nID == ID_ASPECTRATIO_SAR) {
+ s.fKeepAspectRatio = false;
+ info.LoadString(IDS_ASPECT_RATIO_SAR);
} else {
- info.LoadString(IDS_MAINFRM_69);
+ s.fKeepAspectRatio = true;
+ CSize ar = s_ar[nID - ID_ASPECTRATIO_START];
+ s.SetAspectRatioOverride(ar);
+ if (ar.cx && ar.cy) {
+ info.Format(IDS_MAINFRM_68, ar.cx, ar.cy);
+ } else {
+ info.LoadString(IDS_MAINFRM_69);
+ }
}
- SendStatusMessage(info, 3000);
+ SendStatusMessage(info, 3000);
m_OSD.DisplayMessage(OSD_TOPLEFT, info, 3000);
- MoveVideoWindow();
+ OnVideoSizeChanged();
}
void CMainFrame::OnUpdateViewAspectRatio(CCmdUI* pCmdUI)
{
const CAppSettings& s = AfxGetAppSettings();
- if (s.sizeAspectRatio == s_ar[pCmdUI->m_nID - ID_ASPECTRATIO_START] && pCmdUI->m_pMenu) {
+ bool bSelected;
+ if (pCmdUI->m_nID == ID_ASPECTRATIO_SAR) {
+ bSelected = s.fKeepAspectRatio == false;
+ } else {
+ bSelected = s.fKeepAspectRatio == true && s.GetAspectRatioOverride() == s_ar[pCmdUI->m_nID - ID_ASPECTRATIO_START];
+ }
+ if (bSelected && pCmdUI->m_pMenu) {
pCmdUI->m_pMenu->CheckMenuRadioItem(ID_ASPECTRATIO_START, ID_ASPECTRATIO_END, pCmdUI->m_nID, MF_BYCOMMAND);
}
@@ -6849,13 +6777,18 @@ void CMainFrame::OnUpdateViewAspectRatio(CCmdUI* pCmdUI)
void CMainFrame::OnViewAspectRatioNext()
{
- CSize& ar = AfxGetAppSettings().sizeAspectRatio;
- UINT nID = ID_ASPECTRATIO_START;
+ static_assert(ID_ASPECTRATIO_SAR - ID_ASPECTRATIO_START == _countof(s_ar) && ID_ASPECTRATIO_SAR == ID_ASPECTRATIO_END,
+ "ID_ASPECTRATIO_SAR needs to be last item in the menu.");
- for (int i = 0; i < _countof(s_ar); i++) {
- if (ar == s_ar[i]) {
- nID += (i + 1) % _countof(s_ar);
- break;
+ const auto& s = AfxGetAppSettings();
+ UINT nID = ID_ASPECTRATIO_START;
+ if (s.fKeepAspectRatio) {
+ const CSize ar = s.GetAspectRatioOverride();
+ for (int i = 0; i < _countof(s_ar); i++) {
+ if (ar == s_ar[i]) {
+ nID += (i + 1) % ((ID_ASPECTRATIO_END - ID_ASPECTRATIO_START) + 1);
+ break;
+ }
}
}
@@ -6923,7 +6856,6 @@ void CMainFrame::OnPlayPlay()
CComQIPtr<IBDATuner> pTun = m_pGB;
if (pTun) {
bVideoWndNeedReset = false; // SetChannel deals with MoveVideoWindow
- m_fSetChannelActive = false;
SetChannel(s.nDVBLastChannel);
} else {
ASSERT(FALSE);
@@ -6960,7 +6892,7 @@ void CMainFrame::OnPlayPlay()
SetupEVRColorControl(); // can be configured when streaming begins
CString strOSD;
- CString strPlay = ResStr(ID_PLAY_PLAY);
+ CString strPlay(StrRes(ID_PLAY_PLAY));
int i = strPlay.Find(_T("\n"));
if (i > 0) {
strPlay.Delete(i, strPlay.GetLength() - i);
@@ -6971,7 +6903,7 @@ void CMainFrame::OnPlayPlay()
if (GetPlaybackMode() == PM_FILE) {
if (!m_LastOpenBDPath.IsEmpty()) {
- strOSD = strPlay + _T(" BD");
+ strOSD.LoadString(IDS_PLAY_BD);
} else {
strOSD = GetFileName();
if (!strOSD.IsEmpty()) {
@@ -6981,7 +6913,7 @@ void CMainFrame::OnPlayPlay()
}
}
} else if (GetPlaybackMode() == PM_DVD) {
- strOSD = strPlay + _T(" DVD");
+ strOSD.LoadString(IDS_PLAY_DVD);
}
}
@@ -7016,7 +6948,7 @@ void CMainFrame::OnPlayPauseI()
SetAlwaysOnTop(AfxGetAppSettings().iOnTop);
}
- CString strOSD = ResStr(ID_PLAY_PAUSE);
+ CString strOSD(StrRes(ID_PLAY_PAUSE));
int i = strOSD.Find(_T("\n"));
if (i > 0) {
strOSD.Delete(i, strOSD.GetLength() - i);
@@ -7098,7 +7030,12 @@ void CMainFrame::OnPlayStop()
m_pDVDC->SetOption(DVD_ResetOnStop, TRUE);
m_pMC->Stop();
m_pDVDC->SetOption(DVD_ResetOnStop, FALSE);
- } else if (GetPlaybackMode() != PM_NONE) {
+ } else if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
+ m_pMC->Stop();
+ m_pDVBState->bActive = false;
+ OpenSetupWindowTitle();
+ m_wndStatusBar.SetStatusTimer(StrRes(IDS_CAPTURE_LIVE));
+ } else if (GetPlaybackMode() == PM_ANALOG_CAPTURE) {
m_pMC->Stop();
}
@@ -7127,7 +7064,7 @@ void CMainFrame::OnPlayStop()
__int64 start, stop;
m_wndSeekBar.GetRange(start, stop);
if (!IsPlaybackCaptureMode()) {
- m_wndStatusBar.SetStatusTimer(m_wndSeekBar.GetPos(), stop, !!m_wndSubresyncBar.IsWindowVisible(), GetTimeFormat());
+ m_wndStatusBar.SetStatusTimer(m_wndSeekBar.GetPos(), stop, IsSubresyncBarVisible(), GetTimeFormat());
}
SetAlwaysOnTop(AfxGetAppSettings().iOnTop);
@@ -7135,7 +7072,7 @@ void CMainFrame::OnPlayStop()
}
if (!m_fEndOfStream && GetLoadState() == MLS::LOADED) {
- CString strOSD = ResStr(ID_PLAY_STOP);
+ CString strOSD(StrRes(ID_PLAY_STOP));
int i = strOSD.Find(_T("\n"));
if (i > 0) {
strOSD.Delete(i, strOSD.GetLength() - i);
@@ -7371,7 +7308,6 @@ void CMainFrame::OnPlaySeekKey(UINT nID)
void CMainFrame::OnUpdatePlaySeek(CCmdUI* pCmdUI)
{
bool fEnable = false;
- OAFilterState fs = GetMediaState();
if (GetLoadState() == MLS::LOADED) {
fEnable = true;
@@ -7656,7 +7592,7 @@ void CMainFrame::OnPlayFilters(UINT nID)
CComPtr<IUnknown> pUnk = m_pparray[nID - ID_FILTERS_SUBITEM_START];
- CComPropertySheet ps(ResStr(IDS_PROPSHEET_PROPERTIES), GetModalParent());
+ CComPropertySheet ps(IDS_PROPSHEET_PROPERTIES, GetModalParent());
// Find out if we are opening the property page for an internal filter
CComQIPtr<IBaseFilter> pBF = pUnk;
@@ -7691,14 +7627,14 @@ void CMainFrame::OnPlayFilters(UINT nID)
if (settings.GetSettings(pLAVFSettings)) { // Get current settings from LAVSplitter
settings.SaveSettings(); // Save them to the registry/ini
}
- } else if (CComQIPtr<ILAVVideoSettings> pLAVFSettings = pBF) {
+ } else if (CComQIPtr<ILAVVideoSettings> pLAVVideoSettings = pBF) {
CFGFilterLAVVideo::Settings settings;
- if (settings.GetSettings(pLAVFSettings)) { // Get current settings from LAVVideo
+ if (settings.GetSettings(pLAVVideoSettings)) { // Get current settings from LAVVideo
settings.SaveSettings(); // Save them to the registry/ini
}
- } else if (CComQIPtr<ILAVAudioSettings> pLAVFSettings = pBF) {
+ } else if (CComQIPtr<ILAVAudioSettings> pLAVAudioSettings = pBF) {
CFGFilterLAVAudio::Settings settings;
- if (settings.GetSettings(pLAVFSettings)) { // Get current settings from LAVAudio
+ if (settings.GetSettings(pLAVAudioSettings)) { // Get current settings from LAVAudio
settings.SaveSettings(); // Save them to the registry/ini
}
}
@@ -7760,7 +7696,6 @@ void CMainFrame::OnPlayShadersPresets(UINT nID)
// Called from GraphThread
void CMainFrame::OnPlayAudio(UINT nID)
{
- CAppSettings& s = AfxGetAppSettings();
int i = (int)nID - ID_AUDIO_SUBITEM_START;
CComQIPtr<IAMStreamSelect> pSS = FindFilter(__uuidof(CAudioSwitcherFilter), m_pGB);
@@ -7781,7 +7716,7 @@ void CMainFrame::OnPlayAudio(UINT nID)
} else if (GetPlaybackMode() == PM_FILE) {
OnNavStreamSelectSubMenu(i, 1);
} else if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
- if (CDVBChannel* pChannel = s.FindChannelByPref(s.nDVBLastChannel)) {
+ if (CDVBChannel* pChannel = m_pDVBState->pChannel) {
OnNavStreamSelectSubMenu(i, 1);
pChannel->SetDefaultAudio(i);
}
@@ -7809,7 +7744,7 @@ void CMainFrame::OnPlaySubtitles(UINT nID)
}
if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
- if (CDVBChannel* pChannel = s.FindChannelByPref(s.nDVBLastChannel)) {
+ if (CDVBChannel* pChannel = m_pDVBState->pChannel) {
OnNavStreamSelectSubMenu(i, 2);
pChannel->SetDefaultSubtitle(i);
}
@@ -7845,7 +7780,7 @@ void CMainFrame::OnPlaySubtitles(UINT nID)
styles.Add(val);
}
- CPropertySheet dlg(ResStr(IDS_SUBTITLES_STYLES_CAPTION), GetModalParent());
+ CPropertySheet dlg(IDS_SUBTITLES_STYLES_CAPTION, GetModalParent());
for (size_t l = 0; l < pages.GetCount(); l++) {
dlg.AddPage(pages[l]);
}
@@ -8099,43 +8034,76 @@ void CMainFrame::OnAfterplayback(UINT nID)
{
CAppSettings& s = AfxGetAppSettings();
WORD osdMsg = 0;
+ bool bDisable = false;
+
+ auto toggleOption = [&](UINT64 nID) {
+ bDisable = !!(s.nCLSwitches & nID);
+ s.nCLSwitches &= ~CLSW_AFTERPLAYBACK_MASK | nID;
+ s.nCLSwitches ^= nID;
+ };
switch (nID) {
- case ID_AFTERPLAYBACK_CLOSE:
- s.nCLSwitches &= ~CLSW_AFTERPLAYBACK_MASK | CLSW_CLOSE;
- s.nCLSwitches ^= CLSW_CLOSE;
- osdMsg = IDS_AFTERPLAYBACK_CLOSE;
+ case ID_AFTERPLAYBACK_EXIT:
+ toggleOption(CLSW_CLOSE);
+ osdMsg = IDS_AFTERPLAYBACK_EXIT;
break;
case ID_AFTERPLAYBACK_STANDBY:
- s.nCLSwitches &= ~CLSW_AFTERPLAYBACK_MASK | CLSW_STANDBY;
- s.nCLSwitches ^= CLSW_STANDBY;
+ toggleOption(CLSW_STANDBY);
osdMsg = IDS_AFTERPLAYBACK_STANDBY;
break;
case ID_AFTERPLAYBACK_HIBERNATE:
- s.nCLSwitches &= ~CLSW_AFTERPLAYBACK_MASK | CLSW_HIBERNATE;
- s.nCLSwitches ^= CLSW_HIBERNATE;
+ toggleOption(CLSW_HIBERNATE);
osdMsg = IDS_AFTERPLAYBACK_HIBERNATE;
break;
case ID_AFTERPLAYBACK_SHUTDOWN:
- s.nCLSwitches &= ~CLSW_AFTERPLAYBACK_MASK | CLSW_SHUTDOWN;
- s.nCLSwitches ^= CLSW_SHUTDOWN;
+ toggleOption(CLSW_SHUTDOWN);
osdMsg = IDS_AFTERPLAYBACK_SHUTDOWN;
break;
case ID_AFTERPLAYBACK_LOGOFF:
- s.nCLSwitches &= ~CLSW_AFTERPLAYBACK_MASK | CLSW_LOGOFF;
- s.nCLSwitches ^= CLSW_LOGOFF;
+ toggleOption(CLSW_LOGOFF);
osdMsg = IDS_AFTERPLAYBACK_LOGOFF;
break;
case ID_AFTERPLAYBACK_LOCK:
- s.nCLSwitches &= ~CLSW_AFTERPLAYBACK_MASK | CLSW_LOCK;
- s.nCLSwitches ^= CLSW_LOCK;
+ toggleOption(CLSW_LOCK);
osdMsg = IDS_AFTERPLAYBACK_LOCK;
break;
case ID_AFTERPLAYBACK_MONITOROFF:
- s.nCLSwitches &= ~CLSW_AFTERPLAYBACK_MASK | CLSW_MONITOROFF;
- s.nCLSwitches ^= CLSW_MONITOROFF;
+ toggleOption(CLSW_MONITOROFF);
osdMsg = IDS_AFTERPLAYBACK_MONITOROFF;
break;
+ case ID_AFTERPLAYBACK_PLAYNEXT:
+ toggleOption(CLSW_PLAYNEXT);
+ osdMsg = IDS_AFTERPLAYBACK_PLAYNEXT;
+ break;
+ case ID_AFTERPLAYBACK_DONOTHING:
+ toggleOption(CLSW_DONOTHING);
+ osdMsg = IDS_AFTERPLAYBACK_DONOTHING;
+ break;
+ }
+ if (bDisable) {
+ switch (s.eAfterPlayback) {
+ case CAppSettings::AfterPlayback::PLAY_NEXT:
+ osdMsg = IDS_AFTERPLAYBACK_PLAYNEXT;
+ break;
+ case CAppSettings::AfterPlayback::REWIND:
+ osdMsg = IDS_AFTERPLAYBACK_REWIND;
+ break;
+ case CAppSettings::AfterPlayback::MONITOROFF:
+ osdMsg = IDS_AFTERPLAYBACK_MONITOROFF;
+ break;
+ case CAppSettings::AfterPlayback::CLOSE:
+ osdMsg = IDS_AFTERPLAYBACK_CLOSE;
+ break;
+ case CAppSettings::AfterPlayback::EXIT:
+ osdMsg = IDS_AFTERPLAYBACK_EXIT;
+ break;
+ default:
+ ASSERT(FALSE);
+ // no break
+ case CAppSettings::AfterPlayback::DO_NOTHING:
+ osdMsg = IDS_AFTERPLAYBACK_DONOTHING;
+ break;
+ }
}
m_OSD.DisplayMessage(OSD_TOPLEFT, ResStr(osdMsg));
@@ -8144,11 +8112,13 @@ void CMainFrame::OnAfterplayback(UINT nID)
void CMainFrame::OnUpdateAfterplayback(CCmdUI* pCmdUI)
{
const CAppSettings& s = AfxGetAppSettings();
- bool bChecked = false;
+ bool bChecked;
+ bool bRadio = false;
switch (pCmdUI->m_nID) {
- case ID_AFTERPLAYBACK_CLOSE:
+ case ID_AFTERPLAYBACK_EXIT:
bChecked = !!(s.nCLSwitches & CLSW_CLOSE);
+ bRadio = s.eAfterPlayback == CAppSettings::AfterPlayback::EXIT;
break;
case ID_AFTERPLAYBACK_STANDBY:
bChecked = !!(s.nCLSwitches & CLSW_STANDBY);
@@ -8167,11 +8137,87 @@ void CMainFrame::OnUpdateAfterplayback(CCmdUI* pCmdUI)
break;
case ID_AFTERPLAYBACK_MONITOROFF:
bChecked = !!(s.nCLSwitches & CLSW_MONITOROFF);
+ bRadio = s.eAfterPlayback == CAppSettings::AfterPlayback::MONITOROFF;
+ break;
+ case ID_AFTERPLAYBACK_PLAYNEXT:
+ bChecked = !!(s.nCLSwitches & CLSW_PLAYNEXT);
+ bRadio = s.eAfterPlayback == CAppSettings::AfterPlayback::PLAY_NEXT;
+ break;
+ case ID_AFTERPLAYBACK_DONOTHING:
+ bChecked = !!(s.nCLSwitches & CLSW_DONOTHING);
+ bRadio = s.eAfterPlayback == CAppSettings::AfterPlayback::DO_NOTHING;
break;
+ default:
+ ASSERT(FALSE);
+ return;
}
- pCmdUI->Enable();
- pCmdUI->SetCheck(bChecked);
+ if (IsMenu(*pCmdUI->m_pMenu)) {
+ MENUITEMINFO mii;
+ mii.cbSize = sizeof(mii);
+ mii.fMask = MIIM_FTYPE | MIIM_STATE;
+ mii.fType = (bRadio ? MFT_RADIOCHECK : 0);
+ mii.fState = (bRadio ? MFS_DISABLED : 0) | (bChecked || bRadio ? MFS_CHECKED : 0);
+ VERIFY(pCmdUI->m_pMenu->SetMenuItemInfo(pCmdUI->m_nID, &mii));
+ }
+}
+
+void CMainFrame::OnPlayRepeat(UINT nID)
+{
+ CAppSettings& s = AfxGetAppSettings();
+ WORD osdMsg = 0;
+
+ switch (nID) {
+ case ID_PLAY_REPEAT_ONEFILE:
+ s.eLoopMode = CAppSettings::LoopMode::FILE;
+ osdMsg = IDS_PLAYLOOPMODE_FILE;
+ break;
+ case ID_PLAY_REPEAT_WHOLEPLAYLIST:
+ s.eLoopMode = CAppSettings::LoopMode::PLAYLIST;
+ osdMsg = IDS_PLAYLOOPMODE_PLAYLIST;
+ break;
+ default:
+ ASSERT(FALSE);
+ return;
+ }
+
+ m_nLoops = 0;
+ m_OSD.DisplayMessage(OSD_TOPLEFT, ResStr(osdMsg));
+}
+
+void CMainFrame::OnUpdatePlayRepeat(CCmdUI* pCmdUI)
+{
+ CAppSettings::LoopMode loopmode;
+
+ switch (pCmdUI->m_nID) {
+ case ID_PLAY_REPEAT_ONEFILE:
+ loopmode = CAppSettings::LoopMode::FILE;
+ break;
+ case ID_PLAY_REPEAT_WHOLEPLAYLIST:
+ loopmode = CAppSettings::LoopMode::PLAYLIST;
+ break;
+ default:
+ ASSERT(FALSE);
+ return;
+ }
+ if (AfxGetAppSettings().eLoopMode == loopmode && pCmdUI->m_pMenu) {
+ pCmdUI->m_pMenu->CheckMenuRadioItem(ID_PLAY_REPEAT_ONEFILE, ID_PLAY_REPEAT_WHOLEPLAYLIST, pCmdUI->m_nID, MF_BYCOMMAND);
+ }
+}
+
+void CMainFrame::OnPlayRepeatForever()
+{
+ CAppSettings& s = AfxGetAppSettings();
+
+ s.fLoopForever = !s.fLoopForever;
+
+ m_nLoops = 0;
+ m_OSD.DisplayMessage(OSD_TOPLEFT, ResStr(s.fLoopForever ? IDS_PLAYLOOP_FOREVER_ON : IDS_PLAYLOOP_FOREVER_OFF));
+}
+
+void CMainFrame::OnUpdatePlayRepeatForever(CCmdUI* pCmdUI)
+{
+ pCmdUI->SetCheck(AfxGetAppSettings().fLoopForever);
}
bool CMainFrame::SeekToFileChapter(int iChapter, bool bRelative /*= false*/)
@@ -8204,7 +8250,9 @@ bool CMainFrame::SeekToFileChapter(int iChapter, bool bRelative /*= false*/)
}
CComBSTR name;
- if (iChapter >= 0 && DWORD(iChapter) < nChapters && SUCCEEDED(m_pCB->ChapGet(iChapter, &rt, &name))) {
+ REFERENCE_TIME rtStart, rtStop;
+ m_wndSeekBar.GetRange(rtStart, rtStop);
+ if (iChapter >= 0 && DWORD(iChapter) < nChapters && SUCCEEDED(m_pCB->ChapGet(iChapter, &rt, &name)) && rt < rtStop) {
SeekTo(rt, false);
SendStatusMessage(ResStr(IDS_AG_CHAPTER2) + CString(name), 3000);
ret = true;
@@ -8375,7 +8423,7 @@ void CMainFrame::OnUpdateNavigateSkip(CCmdUI* pCmdUI)
&& m_iDVDDomain != DVD_DOMAIN_VideoTitleSetMenu)
|| (GetPlaybackMode() == PM_FILE && s.fUseSearchInFolder)
|| (GetPlaybackMode() == PM_FILE && !s.fUseSearchInFolder && (m_wndPlaylistBar.GetCount() > 1 || m_pCB->ChapGetCount() > 1))
- || (GetPlaybackMode() == PM_DIGITAL_CAPTURE && !m_fSetChannelActive)));
+ || (GetPlaybackMode() == PM_DIGITAL_CAPTURE && !m_pDVBState->bSetChannelActive)));
}
void CMainFrame::OnNavigateSkipFile(UINT nID)
@@ -8528,14 +8576,14 @@ void CMainFrame::OnNavigateJumpTo(UINT nID)
} else if (GetPlaybackMode() == PM_DVD) {
SeekToDVDChapter(nID - ID_NAVIGATE_JUMPTO_SUBITEM_START + 1);
} else if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
- nID -= ID_NAVIGATE_JUMPTO_SUBITEM_START;
-
CComQIPtr<IBDATuner> pTun = m_pGB;
if (pTun) {
- if (s.nDVBLastChannel != nID) {
- if (SUCCEEDED(SetChannel(nID))) {
+ int nChannel = nID - ID_NAVIGATE_JUMPTO_SUBITEM_START;
+
+ if (s.nDVBLastChannel != nChannel) {
+ if (SUCCEEDED(SetChannel(nChannel))) {
if (m_controls.ControlChecked(CMainFrameControls::Panel::NAVIGATION)) {
- m_wndNavigationBar.m_navdlg.UpdatePos(nID);
+ m_wndNavigationBar.m_navdlg.UpdatePos(nChannel);
}
}
}
@@ -8562,7 +8610,7 @@ void CMainFrame::OnNavigateMenuItem(UINT nID)
m_pDVDC->SelectRelativeButton(DVD_Relative_Lower);
break;
case 4:
- if (m_iDVDDomain != DVD_DOMAIN_Title) { // Casimir666 : for the remote control
+ if (m_iDVDDomain == DVD_DOMAIN_Title || m_iDVDDomain == DVD_DOMAIN_VideoTitleSetMenu || m_iDVDDomain == DVD_DOMAIN_VideoManagerMenu) {
m_pDVDC->ActivateButton();
} else {
OnPlayPlay();
@@ -8589,8 +8637,10 @@ void CMainFrame::OnUpdateNavigateMenuItem(CCmdUI* pCmdUI)
void CMainFrame::OnTunerScan()
{
- CTunerScanDlg Dlg;
- Dlg.DoModal();
+ m_bScanDlgOpened = true;
+ CTunerScanDlg dlg(this);
+ dlg.DoModal();
+ m_bScanDlgOpened = false;
}
void CMainFrame::OnUpdateTunerScan(CCmdUI* pCmdUI)
@@ -8621,8 +8671,8 @@ public:
// ISequentialStream
STDMETHODIMP Read(void* pv, ULONG cb, ULONG* pcbRead) {
- size_t cbRead = min(m_data.GetCount() - m_pos, size_t(cb));
- cbRead = max(cbRead, size_t(0));
+ size_t cbRead = std::min(m_data.GetCount() - m_pos, size_t(cb));
+ cbRead = std::max(cbRead, size_t(0));
if (cbRead) {
memcpy(pv, &m_data[m_pos], cbRead);
}
@@ -8696,11 +8746,10 @@ void CMainFrame::AddFavorite(bool fDisplayMessage, bool fShowDialog)
BeginEnumFilters(m_pGB, pEF, pBF) {
CComQIPtr<IFileSourceFilter> pFSF = pBF;
if (pFSF) {
- LPOLESTR pFN = nullptr;
+ CComHeapPtr<OLECHAR> pFN;
AM_MEDIA_TYPE mt;
if (SUCCEEDED(pFSF->GetCurFile(&pFN, &mt)) && pFN && *pFN) {
fn = CStringW(pFN);
- CoTaskMemFree(pFN);
}
break;
}
@@ -8728,12 +8777,11 @@ void CMainFrame::AddFavorite(bool fDisplayMessage, bool fShowDialog)
args.AddTail(name);
// RememberPos
- CString pos(_T("0"));
+ CString posStr = _T("0");
if (s.bFavRememberPos) {
- pos.Format(_T("%I64d"), GetPos());
+ posStr.Format(_T("%I64d"), GetPos());
}
-
- args.AddTail(pos);
+ args.AddTail(posStr);
// RelativeDrive
CString relativeDrive;
@@ -8812,7 +8860,7 @@ void CMainFrame::AddFavorite(bool fDisplayMessage, bool fShowDialog)
} // TODO: PM_ANALOG_CAPTURE and PM_DIGITAL_CAPTURE
if (fDisplayMessage && osdMsg) {
- CString osdMsgStr = ResStr(osdMsg);
+ CString osdMsgStr(StrRes(osdMsg));
SendStatusMessage(osdMsgStr, 3000);
m_OSD.DisplayMessage(OSD_TOPLEFT, osdMsgStr, 3000);
}
@@ -8876,7 +8924,7 @@ void CMainFrame::OnRecentFileClear()
CComPtr<IApplicationDestinations> pDests;
HRESULT hr = pDests.CoCreateInstance(CLSID_ApplicationDestinations, nullptr, CLSCTX_INPROC_SERVER);
if (SUCCEEDED(hr)) {
- hr = pDests->RemoveAllDestinations();
+ pDests->RemoveAllDestinations();
}
// Remove the saved positions in media
@@ -8910,13 +8958,13 @@ void CMainFrame::PlayFavoriteFile(CString fav)
args.RemoveHeadNoReturn(); // desc / name
_stscanf_s(args.RemoveHead(), _T("%I64d"), &rtStart); // pos
_stscanf_s(args.RemoveHead(), _T("%d"), &bRelativeDrive); // relative drive
- rtStart = max(rtStart, 0ll);
+ rtStart = std::max(rtStart, 0ll);
// NOTE: This is just for the favorites but we could add a global settings that does this always when on. Could be useful when using removable devices.
// All you have to do then is plug in your 500 gb drive, full with movies and/or music, start MPC-HC (from the 500 gb drive) with a preloaded playlist and press play.
if (bRelativeDrive) {
// Get the drive MPC-HC is on and apply it to the path list
- CString exePath = GetProgramPath(true);
+ CString exePath = PathUtils::GetProgramPath(true);
CPath exeDrive(exePath);
@@ -9051,7 +9099,7 @@ void CMainFrame::OnHelpToolbarImages()
void CMainFrame::OnHelpDonate()
{
- ShellExecute(m_hWnd, _T("open"), _T("http://mpc-hc.org/donate/"), nullptr, nullptr, SW_SHOWDEFAULT);
+ ShellExecute(m_hWnd, _T("open"), _T("https://mpc-hc.org/donate/"), nullptr, nullptr, SW_SHOWDEFAULT);
}
//////////////////////////////////
@@ -9074,8 +9122,8 @@ void CMainFrame::SetDefaultWindowRect(int iMonitor)
} else if (s.eCaptionMenuMode == MODE_BORDERLESS) {
ModifyStyle(WS_CAPTION | WS_THICKFRAME, 0, SWP_NOZORDER);
}
- SetMenuBarVisibility(AFX_MBV_DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10);
- SetWindowPos(nullptr, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER);
+ SetMenuBarVisibility(AFX_MBV_DISPLAYONFOCUS);
+ SetWindowPos(nullptr, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
}
CSize windowSize;
@@ -9090,8 +9138,8 @@ void CMainFrame::SetDefaultWindowRect(int iMonitor)
GetClientRect(&clientRect);
CSize logoSize = m_wndView.GetLogoSize();
- logoSize.cx = max<LONG>(logoSize.cx, MIN_LOGO_WIDTH);
- logoSize.cy = max<LONG>(logoSize.cy, MIN_LOGO_HEIGHT);
+ logoSize.cx = std::max<LONG>(logoSize.cx, m_dpi.ScaleX(MIN_LOGO_WIDTH));
+ logoSize.cy = std::max<LONG>(logoSize.cy, m_dpi.ScaleY(MIN_LOGO_HEIGHT));
unsigned uTop, uLeft, uRight, uBottom;
m_controls.GetDockZones(uTop, uLeft, uRight, uBottom);
@@ -9100,35 +9148,30 @@ void CMainFrame::SetDefaultWindowRect(int iMonitor)
windowSize.cy = windowRect.Height() - clientRect.Height() + logoSize.cy + uTop + uBottom;
}
+ CMonitors monitors;
+ CMonitor monitor;
+ if (iMonitor > 0 && iMonitor <= monitors.GetCount()) {
+ monitor = monitors.GetMonitor(iMonitor - 1);
+ } else {
+ monitor = CMonitors::GetNearestMonitor(this);
+ }
+
bool bRestoredWindowPosition = false;
if (s.fRememberWindowPos) {
CRect windowRect(rcLastWindowPos.TopLeft(), windowSize);
- if (CMonitors::IsOnScreen(windowRect)) {
+ if ((!iMonitor && CMonitors::IsOnScreen(windowRect))
+ || (iMonitor && monitor.IsOnMonitor(windowRect))) {
MoveWindow(windowRect);
bRestoredWindowPosition = true;
}
}
if (!bRestoredWindowPosition) {
- CMonitors monitors;
- CMonitor monitor;
- if (iMonitor > 0) {
- monitor = monitors.GetMonitor(--iMonitor);
- } else {
- monitor = CMonitors::GetNearestMonitor(this);
- }
-
- SetWindowPos(nullptr, 0, 0, windowSize.cx, windowSize.cy, SWP_NOMOVE | SWP_NOZORDER);
- monitor.CenterWindowToMonitor(this, TRUE);
- }
-
- if (s.fRememberWindowSize && s.fRememberWindowPos) {
- UINT lastWindowType = s.nLastWindowType;
- if (lastWindowType == SIZE_MAXIMIZED) {
- ShowWindow(SW_MAXIMIZE);
- } else if (lastWindowType == SIZE_MINIMIZED) {
- ShowWindow(SW_MINIMIZE);
- }
+ MINMAXINFO mmi;
+ OnGetMinMaxInfo(&mmi);
+ CRect windowRect(0, 0, std::max(windowSize.cx, mmi.ptMinTrackSize.x), std::max(windowSize.cy, mmi.ptMinTrackSize.y));
+ monitor.CenterRectToMonitor(windowRect, TRUE);
+ SetWindowPos(nullptr, windowRect.left, windowRect.top, windowSize.cx, windowSize.cy, SWP_NOZORDER | SWP_NOACTIVATE);
}
if (s.fSavePnSZoom) {
@@ -9179,8 +9222,8 @@ void CMainFrame::RestoreDefaultWindowRect()
GetClientRect(&clientRect);
CSize logoSize = m_wndView.GetLogoSize();
- logoSize.cx = max<LONG>(logoSize.cx, MIN_LOGO_WIDTH);
- logoSize.cy = max<LONG>(logoSize.cy, MIN_LOGO_HEIGHT);
+ logoSize.cx = std::max<LONG>(logoSize.cx, m_dpi.ScaleX(MIN_LOGO_WIDTH));
+ logoSize.cy = std::max<LONG>(logoSize.cy, m_dpi.ScaleY(MIN_LOGO_HEIGHT));
unsigned uTop, uLeft, uRight, uBottom;
m_controls.GetDockZones(uTop, uLeft, uRight, uBottom);
@@ -9198,6 +9241,30 @@ void CMainFrame::RestoreDefaultWindowRect()
}
}
+CRect CMainFrame::GetInvisibleBorderSize() const
+{
+ CRect invisibleBorders;
+
+ if (SysVersion::Is10OrLater()) {
+ static const WinapiFunc<decltype(DwmGetWindowAttribute)>
+ fnDwmGetWindowAttribute = { _T("Dwmapi.dll"), "DwmGetWindowAttribute" };
+
+ if (fnDwmGetWindowAttribute) {
+ if (SUCCEEDED(fnDwmGetWindowAttribute(GetSafeHwnd(), DWMWA_EXTENDED_FRAME_BOUNDS, &invisibleBorders, sizeof(RECT)))) {
+ CRect windowRect;
+ GetWindowRect(windowRect);
+
+ invisibleBorders.TopLeft() = invisibleBorders.TopLeft() - windowRect.TopLeft();
+ invisibleBorders.BottomRight() = windowRect.BottomRight() - invisibleBorders.BottomRight();
+ } else {
+ ASSERT(false);
+ }
+ }
+ }
+
+ return invisibleBorders;
+}
+
OAFilterState CMainFrame::GetMediaState() const
{
OAFilterState ret = -1;
@@ -9216,53 +9283,70 @@ CSize CMainFrame::GetVideoSize() const
{
const CAppSettings& s = AfxGetAppSettings();
- bool fKeepAspectRatio = s.fKeepAspectRatio;
- bool fCompMonDeskARDiff = s.fCompMonDeskARDiff;
-
- CSize ret(0, 0);
+ CSize ret;
if (GetLoadState() != MLS::LOADED || m_fAudioOnly) {
return ret;
}
- CSize wh(0, 0), arxy(0, 0);
+ CSize videoSize, preferedAR;
if (m_pCAP) {
- wh = m_pCAP->GetVideoSize(false);
- arxy = m_pCAP->GetVideoSize(fKeepAspectRatio);
+ videoSize = m_pCAP->GetVideoSize(false);
+ preferedAR = m_pCAP->GetVideoSize(s.fKeepAspectRatio);
} else if (m_pMFVDC) {
- m_pMFVDC->GetNativeVideoSize(&wh, &arxy); // TODO : check AR !!
+ m_pMFVDC->GetNativeVideoSize(&videoSize, &preferedAR); // TODO : check AR !!
} else {
- m_pBV->GetVideoSize(&wh.cx, &wh.cy);
+ m_pBV->GetVideoSize(&videoSize.cx, &videoSize.cy);
long arx = 0, ary = 0;
CComQIPtr<IBasicVideo2> pBV2 = m_pBV;
// FIXME: It can hang here, for few seconds (CPU goes to 100%), after the window have been moving over to another screen,
// due to GetPreferredAspectRatio, if it happens before CAudioSwitcherFilter::DeliverEndFlush, it seems.
if (pBV2 && SUCCEEDED(pBV2->GetPreferredAspectRatio(&arx, &ary)) && arx > 0 && ary > 0) {
- arxy.SetSize(arx, ary);
+ preferedAR.SetSize(arx, ary);
}
}
- if (wh.cx <= 0 || wh.cy <= 0) {
+ if (videoSize.cx <= 0 || videoSize.cy <= 0) {
return ret;
}
- // with the overlay mixer IBasicVideo2 won't tell the new AR when changed dynamically
- DVD_VideoAttributes VATR;
- if (GetPlaybackMode() == PM_DVD && SUCCEEDED(m_pDVDI->GetCurrentVideoAttributes(&VATR))) {
- arxy.SetSize(VATR.ulAspectX, VATR.ulAspectY);
- }
-
- const CSize& ar = s.sizeAspectRatio;
- if (ar.cx && ar.cy) {
- arxy = ar;
+ if (s.fKeepAspectRatio) {
+ CSize overrideAR = s.GetAspectRatioOverride();
+ DVD_VideoAttributes VATR;
+ if ((!overrideAR.cx || !overrideAR.cy) && GetPlaybackMode() == PM_DVD
+ && SUCCEEDED(m_pDVDI->GetCurrentVideoAttributes(&VATR))) {
+ overrideAR.SetSize(VATR.ulAspectX, VATR.ulAspectY);
+ }
+ if (overrideAR.cx > 0 && overrideAR.cy > 0) {
+ if (m_pMVRC && SUCCEEDED(m_pMVRC->SendCommandDouble("setArOverride", double(overrideAR.cx) / overrideAR.cy))) {
+ ret = m_pCAP->GetVideoSize(false);
+ } else {
+ ret = CSize(MulDiv(videoSize.cy, overrideAR.cx, overrideAR.cy), videoSize.cy);
+ }
+ } else {
+ if (m_pMVRC && SUCCEEDED(m_pMVRC->SendCommandDouble("setArOverride", 0.0))) {
+ ret = m_pCAP->GetVideoSize(false);
+ } else {
+ ret = CSize(MulDiv(videoSize.cy, preferedAR.cx, preferedAR.cy), videoSize.cy);
+ }
+ }
+ } else {
+ CSize originalVideoSize(0, 1);
+ if (m_pMVRI) {
+ m_pMVRI->GetSize("originalVideoSize", &originalVideoSize);
+ }
+ if (m_pMVRC && SUCCEEDED(m_pMVRC->SendCommandDouble("setArOverride",
+ double(originalVideoSize.cx) / originalVideoSize.cy))) {
+ ret = m_pCAP->GetVideoSize(false);
+ } else {
+ ret = videoSize;
+ }
}
- ret = (!fKeepAspectRatio || arxy.cx <= 0 || arxy.cy <= 0)
- ? wh
- : CSize(MulDiv(wh.cy, arxy.cx, arxy.cy), wh.cy);
-
- if (fCompMonDeskARDiff)
+ if (s.fCompMonDeskARDiff
+ && s.iDSVideoRendererType != VIDRNDT_DS_EVR
+ && s.iDSVideoRendererType != VIDRNDT_DS_MADVR)
if (HDC hDC = ::GetDC(nullptr)) {
int _HORZSIZE = GetDeviceCaps(hDC, HORZSIZE);
int _VERTSIZE = GetDeviceCaps(hDC, VERTSIZE);
@@ -9289,20 +9373,15 @@ CSize CMainFrame::GetVideoSize() const
void CMainFrame::ToggleFullscreen(bool fToNearest, bool fSwitchScreenResWhenHasTo)
{
if (IsD3DFullScreenMode()) {
+ ASSERT(FALSE);
return;
}
CAppSettings& s = AfxGetAppSettings();
- CRect r;
+ CMonitor currentMonitor = CMonitors::GetNearestMonitor(this);
+ const CWnd* pInsertAfter = nullptr;
+ CRect windowRect;
DWORD dwRemove = 0, dwAdd = 0;
- DWORD dwRemoveEx = 0, dwAddEx = 0;
- MONITORINFO mi;
- mi.cbSize = sizeof(MONITORINFO);
-
- HMONITOR hm = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
- HMONITOR hm_cur = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
-
- CMonitors monitors;
if (!m_fFullScreen) {
SetCursor(nullptr); // prevents cursor flickering when our window is not under the cursor
@@ -9313,142 +9392,109 @@ void CMainFrame::ToggleFullscreen(bool fToNearest, bool fSwitchScreenResWhenHasT
ShowControlBar(&m_wndPlaylistBar, FALSE, FALSE);
}
- if (!m_fFirstFSAfterLaunchOnFS) {
- GetWindowRect(&m_lastWindowRect);
- }
- if (s.autoChangeFSMode.bEnabled && fSwitchScreenResWhenHasTo && (GetPlaybackMode() != PM_NONE)) {
+ GetWindowRect(&m_lastWindowRect);
+
+ if (s.autoChangeFSMode.bEnabled && fSwitchScreenResWhenHasTo && GetPlaybackMode() != PM_NONE) {
AutoChangeMonitorMode();
}
- m_LastWindow_HM = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
- CString str;
CMonitor monitor;
- if (s.strFullScreenMonitor == _T("Current")) {
- hm = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
- } else {
+ if (s.strFullScreenMonitor != _T("Current")) {
+ CMonitors monitors;
for (int i = 0; i < monitors.GetCount(); i++) {
monitor = monitors.GetMonitor(i);
+ if (!monitor.IsMonitor()) {
+ continue;
+ }
+ CString str;
monitor.GetName(str);
- if ((monitor.IsMonitor()) && (s.strFullScreenMonitor == str)) {
- hm = monitor;
+ if (s.strFullScreenMonitor == str) {
break;
}
+ monitor.Detach();
}
- if (!hm) {
- hm = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
- }
+ }
+ if (!monitor.IsMonitor()) {
+ monitor = currentMonitor;
}
- dwRemove = WS_CAPTION | WS_THICKFRAME;
- GetMonitorInfo(hm, &mi);
+ dwRemove |= WS_CAPTION | WS_THICKFRAME;
+ if (s.fPreventMinimize && monitor != currentMonitor) {
+ dwRemove |= WS_MINIMIZEBOX;
+ }
+
+ m_bExtOnTop = !s.iOnTop && (GetExStyle() & WS_EX_TOPMOST);
+ pInsertAfter = &wndTopMost;
+
if (fToNearest) {
- r = mi.rcMonitor;
+ monitor.GetMonitorRect(windowRect);
} else {
- GetDesktopWindow()->GetWindowRect(&r);
+ GetDesktopWindow()->GetWindowRect(windowRect);
}
- SetMenuBarVisibility(AFX_MBV_DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10);
} else {
m_eventc.FireEvent(MpcEvent::SWITCHING_FROM_FULLSCREEN);
if (s.autoChangeFSMode.bEnabled && s.autoChangeFSMode.bApplyDefaultModeAtFSExit && !s.autoChangeFSMode.modes.empty() && s.autoChangeFSMode.modes[0].bChecked) {
- SetDispMode(s.strFullScreenMonitor, s.autoChangeFSMode.modes[0].dm);
+ SetDispMode(s.strFullScreenMonitor, s.autoChangeFSMode.modes[0].dm, s.fAudioTimeShift ? s.iAudioTimeShift : 0); // Restore default time shift
}
- dwAdd = (s.eCaptionMenuMode == MODE_BORDERLESS ? 0 : s.eCaptionMenuMode == MODE_FRAMEONLY ? WS_THICKFRAME : WS_CAPTION | WS_THICKFRAME);
- if (!m_fFirstFSAfterLaunchOnFS) {
- r = m_lastWindowRect;
+ windowRect = m_lastWindowRect;
+ if (!CMonitors::IsOnScreen(windowRect)) {
+ currentMonitor.CenterRectToMonitor(windowRect, TRUE);
+ }
+
+ dwAdd |= WS_MINIMIZEBOX;
+ if (s.eCaptionMenuMode != MODE_BORDERLESS) {
+ dwAdd |= WS_THICKFRAME;
+ if (s.eCaptionMenuMode != MODE_FRAMEONLY) {
+ dwAdd |= WS_CAPTION;
+ }
}
if (m_wndPlaylistBar.IsHiddenDueToFullscreen() && !m_controls.ControlChecked(CMainFrameControls::Panel::PLAYLIST)) {
m_wndPlaylistBar.SetHiddenDueToFullscreen(false);
m_controls.ToggleControl(CMainFrameControls::Panel::PLAYLIST);
}
- }
- bool fAudioOnly = m_fAudioOnly;
- m_fAudioOnly = true;
-
- m_fFullScreen = !m_fFullScreen;
- s.fLastFullScreen = m_fFullScreen;
-
- ModifyStyle(dwRemove, dwAdd, SWP_NOZORDER);
- ModifyStyleEx(dwRemoveEx, dwAddEx, SWP_NOZORDER);
-
- if (m_fFullScreen) {
- if (s.fPreventMinimize) {
- if (hm != hm_cur) {
- ModifyStyle(WS_MINIMIZEBOX, 0, SWP_NOZORDER);
- }
+ // If MPC-HC wasn't previously set "on top" by an external tool,
+ // we restore the current internal on top state. (1/2)
+ if (!m_bExtOnTop) {
+ pInsertAfter = &wndNoTopMost;
}
+ }
- m_bExtOnTop = (!s.iOnTop && (GetExStyle() & WS_EX_TOPMOST));
- SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
- } else {
- ModifyStyle(0, WS_MINIMIZEBOX, SWP_NOZORDER);
+ bool bZoomVideoWindow = false;
+ if (m_fFirstFSAfterLaunchOnFS) {
+ ASSERT(m_fFullScreen);
+ bZoomVideoWindow = s.fRememberZoomLevel;
+ m_fFirstFSAfterLaunchOnFS = false;
}
- m_fAudioOnly = fAudioOnly;
+ m_fFullScreen = !m_fFullScreen;
+ s.fLastFullScreen = m_fFullScreen;
// Temporarily hide the OSD message if there is one, it will
// be restored after. This avoid positioning problems.
m_OSD.HideMessage(true);
- if (m_fFirstFSAfterLaunchOnFS) { //Play started in Fullscreen
- if (s.fRememberWindowSize || s.fRememberWindowPos) {
- r = s.rcLastWindowPos;
- if (!s.fRememberWindowPos) {
- hm = MonitorFromPoint(CPoint(0, 0), MONITOR_DEFAULTTOPRIMARY);
- GetMonitorInfo(hm, &mi);
- CRect m_r = mi.rcMonitor;
- int left = m_r.left + (m_r.Width() - r.Width()) / 2;
- int top = m_r.top + (m_r.Height() - r.Height()) / 2;
- r = CRect(left, top, left + r.Width(), top + r.Height());
- }
- if (!s.fRememberWindowSize) {
- CSize vsize = GetVideoSize();
- r = CRect(r.left, r.top, r.left + vsize.cx, r.top + vsize.cy);
- // COMMENTED OUT: it releases mouse capture, we may lose the second mouse up event in doubleclick
- //ShowWindow(SW_HIDE);
- }
- SetWindowPos(nullptr, r.left, r.top, r.Width(), r.Height(), SWP_NOZORDER | SWP_NOSENDCHANGING);
- if (!s.fRememberWindowSize) {
- ZoomVideoWindow();
- //ShowWindow(SW_SHOW);
- }
- } else {
- if (m_LastWindow_HM != hm_cur) {
- GetMonitorInfo(m_LastWindow_HM, &mi);
- r = mi.rcMonitor;
- // COMMENTED OUT: it releases mouse capture, we may lose the second mouse up event in doubleclick
- //ShowWindow(SW_HIDE);
- SetWindowPos(nullptr, r.left, r.top, r.Width(), r.Height(), SWP_NOZORDER | SWP_NOSENDCHANGING);
- }
- ZoomVideoWindow();
- //if (m_LastWindow_HM != hm_cur) {
- // ShowWindow(SW_SHOW);
- //}
- }
- m_fFirstFSAfterLaunchOnFS = false;
- } else {
- SetWindowPos(nullptr, r.left, r.top, r.Width(), r.Height(), SWP_NOZORDER | SWP_NOSENDCHANGING | SWP_FRAMECHANGED);
- }
+ ModifyStyle(dwRemove, dwAdd, SWP_NOZORDER);
+ SetWindowPos(pInsertAfter, windowRect.left, windowRect.top, windowRect.Width(), windowRect.Height(),
+ SWP_NOSENDCHANGING | SWP_FRAMECHANGED);
// If MPC-HC wasn't previously set "on top" by an external tool,
- // we restore the current internal on top state.
- // Note that this should be called after m_fAudioOnly is restored
- // to its initial value.
+ // we restore the current internal on top state. (2/2)
if (!m_fFullScreen && !m_bExtOnTop) {
- SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
SetAlwaysOnTop(s.iOnTop);
}
- if (!m_fFullScreen) {
- SetMenuBarVisibility(s.eCaptionMenuMode == MODE_SHOWCAPTIONMENU ?
- AFX_MBV_KEEPVISIBLE : AFX_MBV_DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10);
- }
+ SetMenuBarVisibility((!m_fFullScreen && s.eCaptionMenuMode == MODE_SHOWCAPTIONMENU)
+ ? AFX_MBV_KEEPVISIBLE : AFX_MBV_DISPLAYONFOCUS);
UpdateControlState(UPDATE_CONTROLS_VISIBILITY);
+ if (bZoomVideoWindow) {
+ ZoomVideoWindow();
+ }
MoveVideoWindow();
m_OSD.HideMessage(false);
@@ -9479,6 +9525,7 @@ void CMainFrame::ToggleD3DFullscreen(bool fSwitchScreenResWhenHasTo)
if (bIsFullscreen) {
// Turn off D3D Fullscreen
m_OSD.EnableShowSeekBar(false);
+ m_OSD.EnableShowMessage(false);
pD3DFS->SetD3DFullscreen(false);
// Assign the windowed video frame and pass it to the relevant classes.
@@ -9491,14 +9538,19 @@ void CMainFrame::ToggleD3DFullscreen(bool fSwitchScreenResWhenHasTo)
}
if (s.autoChangeFSMode.bEnabled && s.autoChangeFSMode.bApplyDefaultModeAtFSExit && !s.autoChangeFSMode.modes.empty() && s.autoChangeFSMode.modes[0].bChecked) {
- SetDispMode(s.strFullScreenMonitor, s.autoChangeFSMode.modes[0].dm);
+ SetDispMode(s.strFullScreenMonitor, s.autoChangeFSMode.modes[0].dm, s.fAudioTimeShift ? s.iAudioTimeShift : 0); // Restore default time shift
}
// Destroy the D3D Fullscreen window and zoom the windowed video frame
m_pFullscreenWnd->DestroyWindow();
- ZoomVideoWindow();
-
+ if (m_fFirstFSAfterLaunchOnFS) {
+ if (s.fRememberZoomLevel) {
+ ZoomVideoWindow();
+ }
+ m_fFirstFSAfterLaunchOnFS = false;
+ }
MoveVideoWindow();
+ m_OSD.EnableShowMessage(true);
} else {
// Set the fullscreen display mode
if (s.autoChangeFSMode.bEnabled && fSwitchScreenResWhenHasTo) {
@@ -9556,10 +9608,18 @@ bool CMainFrame::GetDispMode(CString displayName, int i, DisplayMode& dm)
return dm.bValid;
}
-void CMainFrame::SetDispMode(CString displayName, const DisplayMode& dm)
+void CMainFrame::SetDispMode(CString displayName, const DisplayMode& dm, int msAudioDelay)
{
DisplayMode dmCurrent;
- if (!GetCurDispMode(displayName, dmCurrent) || (dm.size == dmCurrent.size && dm.bpp == dmCurrent.bpp && dm.freq == dmCurrent.freq)) {
+ if (!GetCurDispMode(displayName, dmCurrent)) {
+ return;
+ }
+
+ CComQIPtr<IAudioSwitcherFilter> pASF = FindFilter(__uuidof(CAudioSwitcherFilter), m_pGB);
+ if (dm.size == dmCurrent.size && dm.bpp == dmCurrent.bpp && dm.freq == dmCurrent.freq) {
+ if (pASF) {
+ pASF->SetAudioTimeShift(msAudioDelay * 10000i64);
+ }
return;
}
@@ -9578,13 +9638,21 @@ void CMainFrame::SetDispMode(CString displayName, const DisplayMode& dm)
monitor.GetName(displayName);
}
+ const auto& s = AfxGetAppSettings();
+ LONG ret;
+
m_eventc.FireEvent(MpcEvent::DISPLAY_MODE_AUTOCHANGING);
if (AfxGetAppSettings().autoChangeFSMode.bRestoreResAfterProgExit) {
- ChangeDisplaySettingsEx(displayName, &dmScreenSettings, nullptr, CDS_FULLSCREEN, nullptr);
+ ret = ChangeDisplaySettingsEx(displayName, &dmScreenSettings, nullptr, CDS_FULLSCREEN, nullptr);
} else {
- ChangeDisplaySettingsEx(displayName, &dmScreenSettings, nullptr, 0, nullptr);
+ ret = ChangeDisplaySettingsEx(displayName, &dmScreenSettings, nullptr, 0, nullptr);
}
m_eventc.FireEvent(MpcEvent::DISPLAY_MODE_AUTOCHANGED);
+
+ msAudioDelay = ret == DISP_CHANGE_SUCCESSFUL ? msAudioDelay : (s.fAudioTimeShift ? s.iAudioTimeShift : 0);
+ if (pASF) {
+ pASF->SetAudioTimeShift(msAudioDelay * 10000i64);
+ }
}
void CMainFrame::AutoChangeMonitorMode()
@@ -9628,17 +9696,17 @@ void CMainFrame::AutoChangeMonitorMode()
for (const auto& mode : s.autoChangeFSMode.modes) {
if (mode.bChecked && dMediaFPS >= mode.dFrameRateStart && dMediaFPS <= mode.dFrameRateStop) {
- SetDispMode(s.strFullScreenMonitor, mode.dm);
+ SetDispMode(s.strFullScreenMonitor, mode.dm, mode.msAudioDelay);
return;
}
}
- SetDispMode(s.strFullScreenMonitor, s.autoChangeFSMode.modes[0].dm);
+ SetDispMode(s.strFullScreenMonitor, s.autoChangeFSMode.modes[0].dm, s.fAudioTimeShift ? s.iAudioTimeShift : 0); // Restore default time shift
}
void CMainFrame::MoveVideoWindow(bool fShowStats/* = false*/, bool bSetStoppedVideoRect/* = false*/)
{
m_dLastVideoScaleFactor = 0;
- m_nLastVideoWidth = 0;
+ m_lastVideoSize.SetSize(0, 0);
if (!m_bDelaySetOutputRect && GetLoadState() == MLS::LOADED && !m_fAudioOnly && IsWindowVisible()) {
CRect windowRect(0, 0, 0, 0);
@@ -9663,7 +9731,7 @@ void CMainFrame::MoveVideoWindow(bool fShowStats/* = false*/, bool bSetStoppedVi
windowRect.bottom += m_controls.GetVisibleToolbarsHeight();
}
- int nCompensateForMenubar = m_bShowingFloatingMenubar ? GetSystemMetrics(SM_CYMENU) : 0;
+ int nCompensateForMenubar = m_bShowingFloatingMenubar && !IsD3DFullScreenMode() ? GetSystemMetrics(SM_CYMENU) : 0;
windowRect.bottom += nCompensateForMenubar;
OAFilterState fs = GetMediaState();
@@ -9672,24 +9740,23 @@ void CMainFrame::MoveVideoWindow(bool fShowStats/* = false*/, bool bSetStoppedVi
m_dLastVideoScaleFactor = std::min((double)windowRect.Size().cx / szVideo.cx,
(double)windowRect.Size().cy / szVideo.cy);
- m_nLastVideoWidth = szVideo.cx;
+ m_lastVideoSize = szVideo;
const double dVideoAR = double(szVideo.cx) / szVideo.cy;
- dvstype iDefaultVideoSize = static_cast<dvstype>(AfxGetAppSettings().iDefaultVideoSize);
-
- if (m_fShockwaveGraph) {
- // because we don't have a way to get .swf size reliably,
- // other modes don't make sense
- iDefaultVideoSize = DVS_STRETCH;
- }
+ // because we don't have a way to get .swf size reliably,
+ // other modes don't make sense
+ const dvstype iDefaultVideoSize = m_fShockwaveGraph ? DVS_STRETCH :
+ static_cast<dvstype>(AfxGetAppSettings().iDefaultVideoSize);
- double dWRWidth = windowRect.Width();
- double dWRHeight = windowRect.Height();
+ const double dWRWidth = windowRect.Width();
+ const double dWRHeight = windowRect.Height();
double dVRWidth = dWRHeight * dVideoAR;
double dVRHeight;
+ double madVRZoomFactor = 1.0;
+
switch (iDefaultVideoSize) {
case DVS_HALF:
dVRWidth = szVideo.cx * 0.5;
@@ -9712,7 +9779,7 @@ void CMainFrame::MoveVideoWindow(bool fShowStats/* = false*/, bool bSetStoppedVi
// Fallback to "Touch Window From Inside" if settings were corrupted.
case DVS_FROMINSIDE:
case DVS_FROMOUTSIDE:
- if ((windowRect.Width() < dVRWidth) != (iDefaultVideoSize == DVS_FROMOUTSIDE)) {
+ if ((dWRWidth < dVRWidth) != (iDefaultVideoSize == DVS_FROMOUTSIDE)) {
dVRWidth = dWRWidth;
dVRHeight = dVRWidth / dVideoAR;
} else {
@@ -9721,11 +9788,11 @@ void CMainFrame::MoveVideoWindow(bool fShowStats/* = false*/, bool bSetStoppedVi
break;
case DVS_ZOOM1:
case DVS_ZOOM2: {
- double minw = dWRWidth < dVRWidth ? dWRWidth : dVRWidth;
- double maxw = dWRWidth > dVRWidth ? dWRWidth : dVRWidth;
-
double scale = iDefaultVideoSize == DVS_ZOOM1 ? 1.0 / 3.0 : 2.0 / 3.0;
- dVRWidth = minw + (maxw - minw) * scale;
+ double minw = std::min(dWRWidth, dVRWidth);
+ double zoomValue = (std::max(dWRWidth, dVRWidth) - minw) * scale;
+ madVRZoomFactor = (minw + zoomValue) / minw;
+ dVRWidth = minw + zoomValue;
dVRHeight = dVRWidth / dVideoAR;
break;
}
@@ -9746,11 +9813,32 @@ void CMainFrame::MoveVideoWindow(bool fShowStats/* = false*/, bool bSetStoppedVi
ASSERT(videoRect.Width() == lround(dScaledVRWidth));
ASSERT(videoRect.Height() == lround(dScaledVRHeight));
+ if (m_pMVRC) {
+ static const std::map<const dvstype, const LPWSTR> madVRModesMap = {
+ { DVS_HALF, L"50%" },
+ { DVS_NORMAL, L"100%" },
+ { DVS_DOUBLE, L"200%" },
+ { DVS_STRETCH, L"stretch" },
+ { DVS_FROMINSIDE, L"touchInside" },
+ { DVS_FROMOUTSIDE, L"touchOutside" },
+ { DVS_ZOOM1, L"touchInside" },
+ { DVS_ZOOM2, L"touchInside" }
+ };
+
+ m_pMVRC->SendCommandString("setZoomMode", madVRModesMap.at(iDefaultVideoSize));
+ m_pMVRC->SendCommandDouble("setZoomFactorX", madVRZoomFactor * m_ZoomX);
+ m_pMVRC->SendCommandDouble("setZoomFactorY", madVRZoomFactor * m_ZoomY);
+ m_pMVRC->SendCommandDouble("setZoomOffsetX", 2 * m_PosX - 1.0);
+ m_pMVRC->SendCommandDouble("setZoomOffsetY", 2 * m_PosY - 1.0);
+ }
+
if (fShowStats) {
CString info;
info.Format(_T("Pos %.3f %.3f, Zoom %.3f %.3f, AR %.3f"), m_PosX, m_PosY, m_ZoomX, m_ZoomY, double(videoRect.Width()) / videoRect.Height());
SendStatusMessage(info, 3000);
}
+ } else if (m_pMVRC) {
+ m_pMVRC->SendCommandString("setZoomMode", L"autoDetect");
}
windowRect.top -= nCompensateForMenubar;
@@ -9761,11 +9849,10 @@ void CMainFrame::MoveVideoWindow(bool fShowStats/* = false*/, bool bSetStoppedVi
Vector v(Vector::DegToRad(m_AngleX), Vector::DegToRad(m_AngleY), Vector::DegToRad(m_AngleZ));
m_pCAP->SetVideoAngle(v);
UpdateSubAspectRatioCompensation();
- } else {
- HRESULT hr;
- hr = m_pBV->SetDefaultSourcePosition();
- hr = m_pBV->SetDestinationPosition(videoRect.left, videoRect.top, videoRect.Width(), videoRect.Height());
- hr = m_pVW->SetWindowPosition(windowRect.left, windowRect.top, windowRect.Width(), windowRect.Height());
+ } else {
+ m_pBV->SetDefaultSourcePosition();
+ m_pBV->SetDestinationPosition(videoRect.left, videoRect.top, videoRect.Width(), videoRect.Height());
+ m_pVW->SetWindowPosition(windowRect.left, windowRect.top, windowRect.Width(), windowRect.Height());
if (m_pMFVDC) {
m_pMFVDC->SetVideoPosition(nullptr, &windowRect);
@@ -9809,7 +9896,7 @@ void CMainFrame::HideVideoWindow(bool fHide)
CSize CMainFrame::GetZoomWindowSize(double dScale)
{
const auto& s = AfxGetAppSettings();
- CSize ret(0, 0);
+ CSize ret;
if (dScale >= 0.0 && GetLoadState() == MLS::LOADED) {
MINMAXINFO mmi;
@@ -9830,13 +9917,23 @@ CSize CMainFrame::GetZoomWindowSize(double dScale)
videoSize.cy = s.nCoverArtSizeLimit;
}
}
+
+ if (videoSize.cx <= 1 || videoSize.cy <= 1) {
+ // Do not adjust window width if blank logo is used (1x1px) or cover-art size is limited
+ // to avoid shrinking window width too much and give ability to revert pre 94dc87c behavior
+ videoSize.SetSize(0, 0);
+ CRect windowRect;
+ GetWindowRect(windowRect);
+ mmi.ptMinTrackSize.x = std::max<long>(windowRect.Width(), mmi.ptMinTrackSize.x);
+ }
} else {
videoSize = GetVideoSize();
}
- CSize clientTargetSize(int(videoSize.cx * dScale + 0.5), int(videoSize.cy * dScale + 0.5));
+ CSize videoTargetSize(int(videoSize.cx * dScale + 0.5), int(videoSize.cy * dScale + 0.5));
+ CSize controlsSize;
const bool bToolbarsOnVideo = m_controls.ToolbarsCoverVideo();
const bool bPanelsOnVideo = m_controls.PanelsCoverVideo();
if (!bPanelsOnVideo) {
@@ -9845,29 +9942,53 @@ CSize CMainFrame::GetZoomWindowSize(double dScale)
if (bToolbarsOnVideo) {
uBottom -= m_controls.GetToolbarsHeight();
}
- clientTargetSize.cx += uLeft + uRight;
- clientTargetSize.cy += uTop + uBottom;
+ controlsSize.cx = uLeft + uRight;
+ controlsSize.cy = uTop + uBottom;
} else if (!bToolbarsOnVideo) {
- clientTargetSize.cy += m_controls.GetToolbarsHeight();
+ controlsSize.cy = m_controls.GetToolbarsHeight();
}
- CRect rect(CPoint(0, 0), clientTargetSize);
- if (AdjustWindowRectEx(rect, GetWindowStyle(m_hWnd), s.eCaptionMenuMode == MODE_SHOWCAPTIONMENU,
- GetWindowExStyle(m_hWnd))) {
- ret.cx = std::max<long>(rect.Width(), mmi.ptMinTrackSize.x);
- ret.cy = std::max<long>(rect.Height(), mmi.ptMinTrackSize.y);
- } else {
- ASSERT(FALSE);
- }
+ CRect decorationsRect;
+ VERIFY(AdjustWindowRectEx(decorationsRect, GetWindowStyle(m_hWnd), s.eCaptionMenuMode == MODE_SHOWCAPTIONMENU,
+ GetWindowExStyle(m_hWnd)));
- // don't go larger than the current monitor working area
- MONITORINFO mi = { sizeof(mi) };
- if (GetMonitorInfo(MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST), &mi)) {
- ret.cx = std::min<long>(ret.cx, (mi.rcWork.right - mi.rcWork.left));
- ret.cy = std::min<long>(ret.cy, (mi.rcWork.bottom - mi.rcWork.top));
+ CRect workRect;
+ CMonitors::GetNearestMonitor(this).GetWorkAreaRect(workRect);
+
+ if (workRect.Width() && workRect.Height()) {
+ // account for invisible borders on Windows 10 by allowing
+ // the window to go out of screen a bit
+ if (SysVersion::Is10OrLater()) {
+ workRect.InflateRect(GetInvisibleBorderSize());
+ }
+
+ // don't go larger than the current monitor working area and prevent black bars in this case
+ CSize videoSpaceSize = workRect.Size() - controlsSize - decorationsRect.Size();
+
+ // Do not adjust window size for video frame aspect ratio when video size is independent from window size
+ const bool bAdjustWindowAR = !(s.iDefaultVideoSize == DVS_HALF || s.iDefaultVideoSize == DVS_NORMAL || s.iDefaultVideoSize == DVS_DOUBLE);
+ const double videoAR = videoSize.cx / (double)videoSize.cy;
+
+ if (videoTargetSize.cx > videoSpaceSize.cx) {
+ videoTargetSize.cx = videoSpaceSize.cx;
+ if (bAdjustWindowAR) {
+ videoTargetSize.cy = std::lround(videoSpaceSize.cx / videoAR);
+ }
+ }
+
+ if (videoTargetSize.cy > videoSpaceSize.cy) {
+ videoTargetSize.cy = videoSpaceSize.cy;
+ if (bAdjustWindowAR) {
+ videoTargetSize.cx = std::lround(videoSpaceSize.cy * videoAR);
+ }
+ }
} else {
ASSERT(FALSE);
}
+
+ ret = videoTargetSize + controlsSize + decorationsRect.Size();
+ ret.cx = std::max(ret.cx, mmi.ptMinTrackSize.x);
+ ret.cy = std::max(ret.cy, mmi.ptMinTrackSize.y);
} else {
ASSERT(FALSE);
}
@@ -9883,23 +10004,31 @@ CRect CMainFrame::GetZoomWindowRect(const CSize& size)
MONITORINFO mi = { sizeof(mi) };
if (GetMonitorInfo(MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST), &mi)) {
+ CRect rcWork = mi.rcWork;
+ // account for invisible borders on Windows 10 by allowing
+ // the window to go out of screen a bit
+ if (SysVersion::Is10OrLater()) {
+ rcWork.InflateRect(GetInvisibleBorderSize());
+ }
+
CSize windowSize(size);
// don't go larger than the current monitor working area
- windowSize.cx = std::min<long>(windowSize.cx, (mi.rcWork.right - mi.rcWork.left));
- windowSize.cy = std::min<long>(windowSize.cy, (mi.rcWork.bottom - mi.rcWork.top));
+ windowSize.cx = std::min<long>(windowSize.cx, rcWork.Width());
+ windowSize.cy = std::min<long>(windowSize.cy, rcWork.Height());
- // retain snapping and center the window if we don't remember its position
- if (m_bWasSnapped && ret.left == mi.rcWork.left) {
+ // retain snapping or try not to be move the center of the window
+ // if we don't remember its position
+ if (m_bWasSnapped && ret.left == rcWork.left) {
// do nothing
- } else if (m_bWasSnapped && ret.right == mi.rcWork.right) {
+ } else if (m_bWasSnapped && ret.right == rcWork.right) {
ret.left = ret.right - windowSize.cx;
} else if (!s.fRememberWindowPos) {
ret.left += (ret.right - ret.left) / 2 - windowSize.cx / 2;
}
- if (m_bWasSnapped && ret.top == mi.rcWork.top) {
+ if (m_bWasSnapped && ret.top == rcWork.top) {
// do nothing
- } else if (m_bWasSnapped && ret.bottom == mi.rcWork.bottom) {
+ } else if (m_bWasSnapped && ret.bottom == rcWork.bottom) {
ret.top = ret.bottom - windowSize.cy;
} else if (!s.fRememberWindowPos) {
ret.top += (ret.bottom - ret.top) / 2 - windowSize.cy / 2;
@@ -9909,17 +10038,17 @@ CRect CMainFrame::GetZoomWindowRect(const CSize& size)
ret.bottom = ret.top + windowSize.cy;
// don't go beyond the current monitor working area
- if (ret.right > mi.rcWork.right) {
- ret.OffsetRect(mi.rcWork.right - ret.right, 0);
+ if (ret.right > rcWork.right) {
+ ret.OffsetRect(rcWork.right - ret.right, 0);
}
- if (ret.left < mi.rcWork.left) {
- ret.OffsetRect(mi.rcWork.left - ret.left, 0);
+ if (ret.left < rcWork.left) {
+ ret.OffsetRect(rcWork.left - ret.left, 0);
}
- if (ret.bottom > mi.rcWork.bottom) {
- ret.OffsetRect(0, mi.rcWork.bottom - ret.bottom);
+ if (ret.bottom > rcWork.bottom) {
+ ret.OffsetRect(0, rcWork.bottom - ret.bottom);
}
- if (ret.top < mi.rcWork.top) {
- ret.OffsetRect(0, mi.rcWork.top - ret.top);
+ if (ret.top < rcWork.top) {
+ ret.OffsetRect(0, rcWork.top - ret.top);
}
} else {
ASSERT(FALSE);
@@ -10000,6 +10129,15 @@ double CMainFrame::GetZoomAutoFitScale(bool bLargerOnly)
decorationsSize.cx += 2 * ::GetSystemMetrics(SM_CXSIZEFRAME);
// horizontal borders
decorationsSize.cy += 2 * ::GetSystemMetrics(SM_CYSIZEFRAME);
+
+ // account for invisible borders on Windows 10
+ if (SysVersion::Is10OrLater()) {
+ RECT invisibleBorders = GetInvisibleBorderSize();
+
+ decorationsSize.cx -= (invisibleBorders.left + invisibleBorders.right);
+ decorationsSize.cy -= (invisibleBorders.top + invisibleBorders.bottom);
+ }
+
if (!(style & WS_CAPTION)) {
decorationsSize.cx -= 2;
decorationsSize.cy -= 2;
@@ -10022,13 +10160,13 @@ double CMainFrame::GetZoomAutoFitScale(bool bLargerOnly)
LONG width = wa.right - wa.left;
LONG height = wa.bottom - wa.top;
- if (bLargerOnly && (arxy.cx + decorationsSize.cx < width && arxy.cy + decorationsSize.cy < height)) {
+ if (bLargerOnly && (arxy.cx + decorationsSize.cx <= width && arxy.cy + decorationsSize.cy <= height)) {
return 1.0;
}
double sx = ((double)width * s.nAutoFitFactor / 100 - decorationsSize.cx) / arxy.cx;
double sy = ((double)height * s.nAutoFitFactor / 100 - decorationsSize.cy) / arxy.cy;
- sx = min(sx, sy);
+ sx = std::min(sx, sy);
// Take movie aspect ratio into consideration
// The scaling is computed so that the height is an integer value
sy = floor(arxy.cy * floor(arxy.cx * sx + 0.5) / arxy.cx + 0.5) / arxy.cy;
@@ -10131,11 +10269,11 @@ void CMainFrame::SetBalance(int balance)
m_pBA->put_Balance(balance_dB);
if (balance == 0) {
- strBalance = ResStr(IDS_BALANCE);
+ strBalance.LoadString(IDS_BALANCE);
} else if (balance < 0) {
- strBalance.Format(ResStr(IDS_BALANCE_L), -balance);
+ strBalance.Format(IDS_BALANCE_L, -balance);
} else { //if (m_nBalance > 0)
- strBalance.Format(ResStr(IDS_BALANCE_R), balance);
+ strBalance.Format(IDS_BALANCE_R, balance);
}
strBalanceOSD.Format(IDS_BALANCE_OSD, strBalance);
@@ -10169,13 +10307,14 @@ void CMainFrame::OpenCreateGraphObject(OpenMediaData* pOMD)
const CAppSettings& s = AfxGetAppSettings();
- if (OpenFileData* p = dynamic_cast<OpenFileData*>(pOMD)) {
- engine_t engine = s.m_Formats.GetEngine(p->fns.GetHead());
+ if (auto pOpenFileData = dynamic_cast<OpenFileData*>(pOMD)) {
+ engine_t engine = s.m_Formats.GetEngine(pOpenFileData->fns.GetHead());
- CStringA ct = GetContentType(p->fns.GetHead());
+ CStringA ct = GetContentType(pOpenFileData->fns.GetHead());
if (ct == "video/x-ms-asf") {
// TODO: put something here to make the windows media source filter load later
+#ifndef _WIN64
} else if (ct == "audio/x-pn-realaudio"
|| ct == "audio/x-pn-realaudio-plugin"
|| ct == "audio/x-realaudio-secure"
@@ -10185,17 +10324,28 @@ void CMainFrame::OpenCreateGraphObject(OpenMediaData* pOMD)
|| ct.Find("realaudio") >= 0
|| ct.Find("realvideo") >= 0) {
engine = RealMedia;
+#endif
} else if (ct == "application/x-shockwave-flash") {
engine = ShockWave;
+#ifndef _WIN64
} else if (ct == "video/quicktime"
|| ct == "application/x-quicktimeplayer") {
engine = QuickTime;
+#endif
}
+#ifdef _WIN64
+ // override
+ if (engine == RealMedia || engine == QuickTime) {
+ engine = DirectShow;
+ }
+#endif
+
HRESULT hr = E_FAIL;
CComPtr<IUnknown> pUnk;
if (engine == RealMedia) {
+#ifndef _WIN64
// TODO : see why Real SDK crash here ...
//if (!IsRealEngineCompatible(p->fns.GetHead()))
// throw ResStr(IDS_REALVIDEO_INCOMPATIBLE);
@@ -10211,6 +10361,7 @@ void CMainFrame::OpenCreateGraphObject(OpenMediaData* pOMD)
m_fRealMediaGraph = true;
}
}
+#endif
} else if (engine == ShockWave) {
pUnk = (IUnknown*)(INonDelegatingUnknown*)DEBUG_NEW DSObjects::CShockwaveGraph(m_pVideoWnd->m_hWnd, hr);
if (!pUnk) {
@@ -10247,9 +10398,9 @@ void CMainFrame::OpenCreateGraphObject(OpenMediaData* pOMD)
if (!m_fCustomGraph) {
m_pGB = DEBUG_NEW CFGManagerPlayer(_T("CFGManagerPlayer"), nullptr, m_pVideoWnd->m_hWnd);
}
- } else if (OpenDVDData* p = dynamic_cast<OpenDVDData*>(pOMD)) {
+ } else if (auto pOpenDVDData = dynamic_cast<OpenDVDData*>(pOMD)) {
m_pGB = DEBUG_NEW CFGManagerDVD(_T("CFGManagerDVD"), nullptr, m_pVideoWnd->m_hWnd);
- } else if (OpenDeviceData* p = dynamic_cast<OpenDeviceData*>(pOMD)) {
+ } else if (auto pOpenDeviceData = dynamic_cast<OpenDeviceData*>(pOMD)) {
if (s.iDefaultCaptureDevice == 1) {
m_pGB = DEBUG_NEW CFGManagerBDA(_T("CFGManagerBDA"), nullptr, m_pVideoWnd->m_hWnd);
} else {
@@ -10399,13 +10550,16 @@ void CMainFrame::OpenFile(OpenFileData* pOFD)
if (bMainFile) {
pOFD->title = fn;
- if (!(m_pFSF = m_pGB)) {
- BeginEnumFilters(m_pGB, pEF, pBF);
- if (m_pFSF = pBF) {
- break;
- }
- EndEnumFilters;
+
+ m_pFSF = m_pGB;
+ BeginEnumFilters(m_pGB, pEF, pBF);
+ if (!m_pFSF) {
+ m_pFSF = pBF;
+ }
+ if (!m_pKFI) {
+ m_pKFI = pBF;
}
+ EndEnumFilters;
}
bMainFile = false;
@@ -10479,7 +10633,7 @@ void CMainFrame::SetupChapters()
CHAR iso6391[3];
::GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, iso6391, 3);
- CStringA iso6392 = ISO6391To6392(iso6391);
+ CStringA iso6392 = ISOLang::ISO6391To6392(iso6391);
if (iso6392.GetLength() < 3) {
iso6392 = "eng";
}
@@ -10553,10 +10707,8 @@ void CMainFrame::SetupChapters()
int h, m, s, ms;
WCHAR wc;
- if (7 != swscanf_s(CStringW(var), L"%d%c%d%c%d%c%d", &h,
- &wc, sizeof(WCHAR), &m,
- &wc, sizeof(WCHAR), &s,
- &wc, sizeof(WCHAR), &ms)) {
+ if (7 != swscanf_s(CStringW(var), L"%d%c%d%c%d%c%d",
+ &h, &wc, 1, &m, &wc, 1, &s, &wc, 1, &ms)) {
break;
}
@@ -10604,7 +10756,7 @@ void CMainFrame::SetupDVDChapters()
CAtlList<CString> files;
CVobFile vob;
- if (vob.Open(path, files, TTN)) {
+ if (vob.Open(path, files, TTN, false)) {
int iChaptersCount = vob.GetChaptersCount();
if (ulNumOfChapters == (ULONG)iChaptersCount) {
for (int i = 0; i < iChaptersCount; i++) {
@@ -10634,7 +10786,7 @@ void CMainFrame::OpenDVD(OpenDVDData* pODD)
{
HRESULT hr = m_pGB->RenderFile(CStringW(pODD->path), nullptr);
- const CAppSettings& s = AfxGetAppSettings();
+ CAppSettings& s = AfxGetAppSettings();
if (s.fReportFailedPins) {
CComQIPtr<IGraphBuilderDeadEnd> pGBDE = m_pGB;
@@ -10667,7 +10819,15 @@ void CMainFrame::OpenDVD(OpenDVDData* pODD)
WCHAR buff[MAX_PATH];
ULONG len = 0;
if (SUCCEEDED(hr = m_pDVDI->GetDVDDirectory(buff, _countof(buff), &len))) {
- pODD->title = CString(CStringW(buff));
+ pODD->title = CString(CStringW(buff)).Trim(_T("\\"));
+ }
+
+ if (s.fKeepHistory) {
+ CRecentFileList* pMRU = &s.MRU;
+ pMRU->ReadList();
+ pMRU->Add(pODD->title);
+ pMRU->WriteList();
+ SHAddToRecentDocs(SHARD_PATH, pODD->title);
}
// TODO: resetdvd
@@ -10695,6 +10855,7 @@ HRESULT CMainFrame::OpenBDAGraph()
HRESULT hr = m_pGB->RenderFile(L"", L"");
if (SUCCEEDED(hr)) {
SetPlaybackMode(PM_DIGITAL_CAPTURE);
+ m_pDVBState = std::make_unique<DVBState>();
}
return hr;
}
@@ -10862,25 +11023,24 @@ void CMainFrame::OpenCustomizeGraph()
const CAppSettings& s = AfxGetAppSettings();
const CRenderersSettings& r = s.m_RenderersSettings;
if (r.m_AdvRendSets.bSynchronizeVideo && s.iDSVideoRendererType == VIDRNDT_DS_SYNC) {
- HRESULT hr;
+ HRESULT hr = S_OK;
m_pRefClock = DEBUG_NEW CSyncClockFilter(nullptr, &hr);
- CStringW name;
- name = L"SyncClock Filter";
- m_pGB->AddFilter(m_pRefClock, name);
- CComPtr<IReferenceClock> refClock;
- m_pRefClock->QueryInterface(IID_PPV_ARGS(&refClock));
- CComPtr<IMediaFilter> mediaFilter;
- m_pGB->QueryInterface(IID_PPV_ARGS(&mediaFilter));
- mediaFilter->SetSyncSource(refClock);
- mediaFilter = nullptr;
- refClock = nullptr;
+ if (SUCCEEDED(hr) && SUCCEEDED(m_pGB->AddFilter(m_pRefClock, L"SyncClock Filter"))) {
+ CComQIPtr<IReferenceClock> refClock = m_pRefClock;
+ CComQIPtr<IMediaFilter> mediaFilter = m_pGB;
- m_pRefClock->QueryInterface(IID_PPV_ARGS(&m_pSyncClock));
+ if (refClock && mediaFilter) {
+ VERIFY(SUCCEEDED(mediaFilter->SetSyncSource(refClock)));
+ mediaFilter = nullptr;
+ refClock = nullptr;
- CComQIPtr<ISyncClockAdviser> pAdviser = m_pCAP;
- if (pAdviser) {
- pAdviser->AdviseSyncClock(m_pSyncClock);
+ VERIFY(SUCCEEDED(m_pRefClock->QueryInterface(IID_PPV_ARGS(&m_pSyncClock))));
+ CComQIPtr<ISyncClockAdviser> pAdviser = m_pCAP;
+ if (pAdviser) {
+ VERIFY(SUCCEEDED(pAdviser->AdviseSyncClock(m_pSyncClock)));
+ }
+ }
}
}
@@ -10921,7 +11081,7 @@ void CMainFrame::OpenCustomizeGraph()
DWORD dwGroup = 0;
WCHAR* pszName = nullptr;
if (SUCCEEDED(pSS->Info((long)i, &pmt, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))) {
- CStringW name(pszName), sound(ResStr(IDS_AG_SOUND)), subtitle(L"Subtitle");
+ CStringW name(pszName), sound(StrRes(IDS_AG_SOUND)), subtitle(L"Subtitle");
if (idAudio != (LCID) - 1 && (idAudio & 0x3ff) == (lcid & 0x3ff) // sublang seems to be zeroed out in ogm...
&& name.GetLength() > sound.GetLength()
@@ -11076,6 +11236,8 @@ void CMainFrame::OpenSetupCaptureBar()
void CMainFrame::OpenSetupInfoBar(bool bClear /*= true*/)
{
+ bool bRecalcLayout = false;
+
if (bClear) {
m_wndInfoBar.RemoveAllLines();
}
@@ -11109,19 +11271,23 @@ void CMainFrame::OpenSetupInfoBar(bool bClear /*= true*/)
}
EndEnumFilters;
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_TITLE), title);
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_TITLE), title);
UpdateChapterInInfoBar();
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_AUTHOR), author);
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_COPYRIGHT), copyright);
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_RATING), rating);
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_DESCRIPTION), description);
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_AUTHOR), author);
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_COPYRIGHT), copyright);
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_RATING), rating);
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_DESCRIPTION), description);
} else if (GetPlaybackMode() == PM_DVD) {
- CString info('-');
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_DOMAIN), info);
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_LOCATION), info);
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_VIDEO), info);
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_AUDIO), info);
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_SUBTITLES), info);
+ CString info(_T('-'));
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_DOMAIN), info);
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_LOCATION), info);
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_VIDEO), info);
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_AUDIO), info);
+ bRecalcLayout |= m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_SUBTITLES), info);
+ }
+
+ if (bRecalcLayout) {
+ RecalcLayout();
}
}
@@ -11137,13 +11303,15 @@ void CMainFrame::UpdateChapterInInfoBar()
CComBSTR bstr;
long currentChap = m_pCB->ChapLookup(&rtNow, &bstr);
if (bstr.Length()) {
- chapter.Format(_T("%s (%ld/%lu)"), bstr.m_str, max(0l, currentChap + 1l), dwChapCount);
+ chapter.Format(_T("%s (%ld/%lu)"), bstr.m_str, std::max(0l, currentChap + 1l), dwChapCount);
} else {
chapter.Format(_T("%ld/%lu"), currentChap + 1, dwChapCount);
}
}
}
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_CHAPTER), chapter);
+ if (m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_CHAPTER), chapter)) {
+ RecalcLayout();
+ }
}
@@ -11152,7 +11320,7 @@ void CMainFrame::OpenSetupStatsBar()
m_wndStatsBar.RemoveAllLines();
if (GetLoadState() == MLS::LOADED) {
- CString info('-');
+ CString info(_T('-'));
bool bFoundIBitRateInfo = false;
BeginEnumFilters(m_pGB, pEF, pBF) {
@@ -11178,21 +11346,21 @@ void CMainFrame::OpenSetupStatsBar()
EndEnumFilters;
if (m_pQP) {
- m_wndStatsBar.SetLine(ResStr(IDS_AG_FRAMERATE), info);
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_SYNC_OFFSET), info);
- m_wndStatsBar.SetLine(ResStr(IDS_AG_FRAMES), info);
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_JITTER), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_AG_FRAMERATE), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_SYNC_OFFSET), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_AG_FRAMES), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_JITTER), info);
} else {
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_PLAYBACK_RATE), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_PLAYBACK_RATE), info);
}
if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_SIGNAL), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_SIGNAL), info);
}
if (m_pBI) {
- m_wndStatsBar.SetLine(ResStr(IDS_AG_BUFFERS), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_AG_BUFFERS), info);
}
if (bFoundIBitRateInfo) {
- m_wndStatsBar.SetLine(ResStr(IDS_STATSBAR_BITRATE), info);
+ m_wndStatsBar.SetLine(StrRes(IDS_STATSBAR_BITRATE), info);
}
}
}
@@ -11247,7 +11415,7 @@ void CMainFrame::OpenSetupStatusBar()
// Called from GraphThread
void CMainFrame::OpenSetupWindowTitle(bool reset /*= false*/)
{
- CString title = ResStr(IDR_MAINFRAME);
+ CString title(StrRes(IDR_MAINFRAME));
#ifdef MPCHC_LITE
title += _T(" Lite");
#endif
@@ -11344,9 +11512,9 @@ int CMainFrame::SetupAudioStreams()
lang.MakeLower();
langs.Add(lang);
// Try to match the full language if possible
- lang = ISO639XToLanguage(CStringA(lang)).MakeLower();
+ lang = ISOLang::ISO639XToLanguage(CStringA(lang));
if (!lang.IsEmpty()) {
- langs.Add(lang);
+ langs.Add(lang.MakeLower());
}
lang = s.strAudiosLanguageOrder.Tokenize(_T(",; "), tPos);
}
@@ -11446,25 +11614,26 @@ int CMainFrame::SetupAudioStreams()
int CMainFrame::SetupSubtitleStreams()
{
const CAppSettings& s = AfxGetAppSettings();
+ int selected = -1;
- size_t cStreams = m_pSubStreams.GetCount();
- if (cStreams > 0) {
+ if (!m_pSubStreams.IsEmpty()) {
bool externalPriority = false;
- CAtlArray<CString> langs;
+ std::list<ISOLangT<CString>> langs;
int tPos = 0;
CString lang = s.strSubtitlesLanguageOrder.Tokenize(_T(",; "), tPos);
while (tPos != -1) {
lang.MakeLower();
- langs.Add(lang);
- // Try to match the full language if possible
- lang = ISO639XToLanguage(CStringA(lang)).MakeLower();
- if (!lang.IsEmpty()) {
- langs.Add(lang);
+ ISOLangT<CString> l = ISOLang::ISO639XToISOLang(CStringA(lang));
+ if (l.name.IsEmpty()) {
+ l.name = lang;
+ } else {
+ l.name.MakeLower();
}
+ langs.emplace_back(l);
+
lang = s.strSubtitlesLanguageOrder.Tokenize(_T(",; "), tPos);
}
- int selected = -1;
int i = 0;
int maxrating = -1;
POSITION pos = m_pSubStreams.GetHeadPosition();
@@ -11481,15 +11650,14 @@ int CMainFrame::SetupSubtitleStreams()
if (pSSF && CFGFilterLAV::IsInternalInstance(subInput.pSourceFilter)) {
bAllowOverridingSplitterChoice = true;
if (CComQIPtr<ILAVFSettings> pLAVFSettings = subInput.pSourceFilter) {
- LPWSTR langPrefs = nullptr;
+ CComHeapPtr<WCHAR> pLangPrefs;
LAVSubtitleMode subtitleMode = pLAVFSettings->GetSubtitleMode();
- if ((((subtitleMode == LAVSubtitleMode_Default && SUCCEEDED(pLAVFSettings->GetPreferredSubtitleLanguages(&langPrefs)))
- || (subtitleMode == LAVSubtitleMode_Advanced && SUCCEEDED(pLAVFSettings->GetAdvancedSubtitleConfig(&langPrefs))))
- && langPrefs && wcslen(langPrefs))
+ if ((((subtitleMode == LAVSubtitleMode_Default && SUCCEEDED(pLAVFSettings->GetPreferredSubtitleLanguages(&pLangPrefs)))
+ || (subtitleMode == LAVSubtitleMode_Advanced && SUCCEEDED(pLAVFSettings->GetAdvancedSubtitleConfig(&pLangPrefs))))
+ && pLangPrefs && wcslen(pLangPrefs))
|| subtitleMode == LAVSubtitleMode_ForcedOnly || subtitleMode == LAVSubtitleMode_NoSubs) {
bAllowOverridingSplitterChoice = false;
}
- CoTaskMemFree(langPrefs);
}
} else {
bAllowOverridingSplitterChoice = s.bAllowOverridingExternalSplitterChoice;
@@ -11506,14 +11674,13 @@ int CMainFrame::SetupSubtitleStreams()
}
for (int j = 0; j < count; j++) {
- WCHAR* pName;
- HRESULT hr;
+ CComHeapPtr<WCHAR> pName;
+ LCID lcid = 0;
int rating = 0;
if (pSSF) {
DWORD dwFlags, dwGroup = 2;
- hr = pSSF->Info(j, nullptr, &dwFlags, nullptr, &dwGroup, &pName, nullptr, nullptr);
+ pSSF->Info(j, nullptr, &dwFlags, &lcid, &dwGroup, &pName, nullptr, nullptr);
if (dwGroup != 2) { // If the track isn't a subtitle track, we skip it
- CoTaskMemFree(pName);
continue;
} else if (dwFlags & (AMSTREAMSELECTINFO_ENABLED | AMSTREAMSELECTINFO_EXCLUSIVE)) {
// Give slightly higher priority to the track selected by splitter so that
@@ -11522,35 +11689,44 @@ int CMainFrame::SetupSubtitleStreams()
} else if (!bAllowOverridingSplitterChoice) {
// If we aren't allowed to modify the splitter choice and the current
// track isn't already selected at splitter level we need to skip it.
- CoTaskMemFree(pName);
i++;
continue;
}
} else {
- hr = pSubStream->GetStreamInfo(j, &pName, nullptr);
+ pSubStream->GetStreamInfo(j, &pName, &lcid);
}
CString name(pName);
- CoTaskMemFree(pName);
name.Trim();
name.MakeLower();
- for (size_t k = 0; k < langs.GetCount(); k++) {
- int num = _tstoi(langs[k]) - 1;
+ size_t k = 0;
+ for (const auto& l : langs) {
+ int num = _tstoi(l.name) - 1;
if (num >= 0) { // this is track number
if (i != num) {
+ k++;
continue; // not matched
}
} else { // this is lang string
- int len = langs[k].GetLength();
- if (name.Left(len) != langs[k] && name.Find(_T("[") + langs[k]) < 0) {
- continue; // not matched
+ // check the LCID first but keep looking if it doesn't match
+ if (lcid == 0 || lcid == LCID(-1) || lcid != l.lcid) {
+ auto findCode = [](const CString & name, const CString & code) {
+ int nPos = code.IsEmpty() ? -1 : name.Find(code);
+ return ((nPos == 0 && name.GetLength() == code.GetLength())
+ || (nPos > 0 && (name[nPos - 1] == _T('[') || name[nPos - 1] == _T('\t'))));
+ };
+ // match anything that starts with the language name or that seems to use a code that matches
+ if (name.Find(l.name) != 0 && !findCode(name, l.name) && !findCode(name, l.iso6392) && !findCode(name, l.iso6391)) {
+ k++;
+ continue; // not matched
+ }
}
}
- rating += 16 * int(langs.GetCount() - k);
+ rating += 16 * int(langs.size() - k);
break;
}
if (externalPriority) { // External tracks are given a higher priority than language matches
- rating += 16 * int(langs.GetCount() + 1);
+ rating += 16 * int(langs.size() + 1);
}
if (s.bPreferDefaultForcedSubtitles) {
if (name.Find(_T("[default,forced]")) != -1) { // for LAV Splitter
@@ -11571,10 +11747,17 @@ int CMainFrame::SetupSubtitleStreams()
i++;
}
}
- return selected;
}
- return -1;
+ if (s.IsISRAutoLoadEnabled() && !m_fAudioOnly) {
+ if (s.bAutoDownloadSubtitles && m_pSubStreams.IsEmpty()) {
+ m_pSubtitlesProviders->Search(TRUE);
+ } else if (m_wndSubtitlesDownloadDialog.IsWindowVisible()) {
+ m_pSubtitlesProviders->Search(FALSE);
+ }
+ }
+
+ return selected;
}
bool CMainFrame::OpenMediaPrivate(CAutoPtr<OpenMediaData> pOMD)
@@ -11648,7 +11831,10 @@ bool CMainFrame::OpenMediaPrivate(CAutoPtr<OpenMediaData> pOMD)
m_pGB->FindInterface(IID_PPV_ARGS(&m_pVMRMC), TRUE);
m_pGB->FindInterface(IID_PPV_ARGS(&pVMB), TRUE);
m_pGB->FindInterface(IID_PPV_ARGS(&pMFVMB), TRUE);
+ m_pMVRC = m_pCAP;
+ m_pMVRI = m_pCAP;
m_pMVRS = m_pCAP;
+ m_pMVRSR = m_pCAP;
pMVTO = m_pCAP;
if (s.fShowOSD || s.fShowDebugInfo) { // Force OSD on when the debug switch is used
@@ -11704,14 +11890,32 @@ bool CMainFrame::OpenMediaPrivate(CAutoPtr<OpenMediaData> pOMD)
// Set start time but seek only after all files are loaded
if (pFileData->rtStart > 0) { // Check if an explicit start time was given
rtPos = pFileData->rtStart;
- } else if (m_bRememberFilePos && !s.filePositions.AddEntry(fn)) {
- // else check if we have a remembered position to restore
- rtPos = s.filePositions.GetLatestEntry()->llPosition;
+ }
+ if (m_bRememberFilePos) { // Check if we want to remember the position
+ // Always update the file positions list so that the position
+ // is correctly saved but only restore the remembered position
+ // if no explicit start time was already set.
+ if (!s.filePositions.AddEntry(fn) && !rtPos) {
+ rtPos = s.filePositions.GetLatestEntry()->llPosition;
+ }
}
if (rtPos) {
m_pMS->SetPositions(&rtPos, AM_SEEKING_AbsolutePositioning, nullptr, AM_SEEKING_NoPositioning);
}
+
+ if (m_pCAP2 && m_pFSF) {
+ CComQIPtr<IBaseFilter> pBF = m_pFSF;
+ if (GetCLSID(pBF) == GUID_LAVSplitter || GetCLSID(pBF) == GUID_LAVSplitterSource) {
+ if (CComQIPtr<IPropertyBag> pPB = pBF) {
+ CComVariant var;
+ if (SUCCEEDED(pPB->Read(_T("rotation"), &var, nullptr)) && var.vt == VT_BSTR) {
+ // We need to convert the angle to use trigonomeric conventions
+ m_pCAP2->SetDefaultVideoAngle(Vector(0, 0, Vector::DegToRad((360 - _tcstol(var.bstrVal, nullptr, 10) % 360) % 360)));
+ }
+ }
+ }
+ }
}
if (m_pCAP && s.IsISRAutoLoadEnabled() && (!m_fAudioOnly || m_fRealMediaGraph)) {
@@ -11794,8 +11998,13 @@ void CMainFrame::CloseMediaPrivate()
}
m_fLiveWM = false;
m_fEndOfStream = false;
+ m_bBuffering = false;
m_rtDurationOverride = -1;
m_bUsingDXVA = false;
+ if (m_pDVBState) {
+ m_pDVBState->Join();
+ m_pDVBState = nullptr;
+ }
m_pCB.Release();
SetSubtitle(SubtitleInput(nullptr));
@@ -11807,7 +12016,10 @@ void CMainFrame::CloseMediaPrivate()
// IMPORTANT: IVMRSurfaceAllocatorNotify/IVMRSurfaceAllocatorNotify9 has to be released before the VMR/VMR9, otherwise it will crash in Release()
m_OSD.Stop();
+ m_pMVRSR.Release();
m_pMVRS.Release();
+ m_pMVRC.Release();
+ m_pMVRI.Release();
m_pCAP2.Release();
m_pCAP.Release();
m_pVMRWC.Release();
@@ -11842,6 +12054,7 @@ void CMainFrame::CloseMediaPrivate()
m_pME.Release();
m_pMC.Release();
m_pFSF.Release();
+ m_pKFI.Release();
if (m_pGB) {
m_pGB->RemoveFromROT();
@@ -11856,30 +12069,6 @@ void CMainFrame::CloseMediaPrivate()
m_AudDispName.Empty();
}
-void CMainFrame::ParseDirs(CAtlList<CString>& sl)
-{
- POSITION pos = sl.GetHeadPosition();
-
- while (pos) {
- CString fn = sl.GetNext(pos);
- WIN32_FIND_DATA fd;
- ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
- HANDLE hFind = FindFirstFile(fn, &fd);
-
- if (hFind != INVALID_HANDLE_VALUE) {
- if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
- if (fn[fn.GetLength() - 1] != '\\') {
- fn += '\\';
- }
-
- COpenDirHelper::RecurseAddDir(fn, &sl);
- }
-
- FindClose(hFind);
- }
- }
-}
-
bool CMainFrame::SearchInDir(bool bDirForward, bool bLoop /*= false*/)
{
ASSERT(GetPlaybackMode() == PM_FILE);
@@ -11957,17 +12146,18 @@ void CMainFrame::DoTunerScan(TunerScanData* pTSD)
int nOffset = pTSD->Offset ? 3 : 1;
LONG lOffsets[3] = {0, pTSD->Offset, -pTSD->Offset};
m_bStopTunerScan = false;
- pTun->Scan(0, 0); // Clear maps
+ pTun->Scan(0, 0, NULL); // Clear maps
for (ULONG ulFrequency = pTSD->FrequencyStart; ulFrequency <= pTSD->FrequencyStop; ulFrequency += pTSD->Bandwidth) {
bool bSucceeded = false;
for (int nOffsetPos = 0; nOffsetPos < nOffset && !bSucceeded; nOffsetPos++) {
- pTun->SetFrequency(ulFrequency + lOffsets[nOffsetPos]);
- Sleep(200); // Let the tuner some time to detect the signal
- if (SUCCEEDED(pTun->GetStats(bPresent, bLocked, lDbStrength, lPercentQuality)) && bPresent) {
- ::SendMessage(pTSD->Hwnd, WM_TUNER_STATS, lDbStrength, lPercentQuality);
- pTun->Scan(ulFrequency + lOffsets[nOffsetPos], pTSD->Hwnd);
- bSucceeded = true;
+ if (SUCCEEDED(pTun->SetFrequency(ulFrequency + lOffsets[nOffsetPos], pTSD->Bandwidth))) {
+ Sleep(200); // Let the tuner some time to detect the signal
+ if (SUCCEEDED(pTun->GetStats(bPresent, bLocked, lDbStrength, lPercentQuality)) && bPresent) {
+ ::SendMessage(pTSD->Hwnd, WM_TUNER_STATS, lDbStrength, lPercentQuality);
+ pTun->Scan(ulFrequency + lOffsets[nOffsetPos], pTSD->Bandwidth, pTSD->Hwnd);
+ bSucceeded = true;
+ }
}
}
@@ -11998,8 +12188,8 @@ void CMainFrame::SendNowPlayingToSkype()
if (GetLoadState() == MLS::LOADED) {
CString title, author;
- m_wndInfoBar.GetLine(ResStr(IDS_INFOBAR_TITLE), title);
- m_wndInfoBar.GetLine(ResStr(IDS_INFOBAR_AUTHOR), author);
+ m_wndInfoBar.GetLine(StrRes(IDS_INFOBAR_TITLE), title);
+ m_wndInfoBar.GetLine(StrRes(IDS_INFOBAR_AUTHOR), author);
if (title.IsEmpty()) {
CPlaylistItem pli;
@@ -12266,7 +12456,7 @@ void CMainFrame::SetupFiltersSubMenu()
CString streamName;
if (!wname) {
streamName.LoadString(IDS_AG_UNKNOWN_STREAM);
- streamName.AppendFormat(_T(" %u"), i + 1);
+ streamName.AppendFormat(_T(" %lu"), i + 1);
} else {
streamName = wname;
streamName.Replace(_T("&"), _T("&&"));
@@ -12360,7 +12550,7 @@ void CMainFrame::SetupAudioSubMenu()
CString str;
if (Language) {
int len = GetLocaleInfo(Language, LOCALE_SENGLANGUAGE, str.GetBuffer(256), 256);
- str.ReleaseBufferSetLength(max(len - 1, 0));
+ str.ReleaseBufferSetLength(std::max(len - 1, 0));
} else {
str.Format(IDS_AG_UNKNOWN, i + 1);
}
@@ -12378,10 +12568,10 @@ void CMainFrame::SetupAudioSubMenu()
str += _T(" (Visually Impaired)");
break;
case DVD_AUD_EXT_DirectorComments1:
- str += ResStr(IDS_MAINFRM_121);
+ str.AppendFormat(IDS_MAINFRM_121);
break;
case DVD_AUD_EXT_DirectorComments2:
- str += ResStr(IDS_MAINFRM_122);
+ str.AppendFormat(IDS_MAINFRM_122);
break;
}
@@ -12479,7 +12669,7 @@ void CMainFrame::SetupSubtitlesSubMenu()
CString str;
if (Language) {
int len = GetLocaleInfo(Language, LOCALE_SENGLANGUAGE, str.GetBuffer(256), 256);
- str.ReleaseBufferSetLength(max(len - 1, 0));
+ str.ReleaseBufferSetLength(std::max(len - 1, 0));
} else {
str.Format(IDS_AG_UNKNOWN, i + 1);
}
@@ -12593,7 +12783,7 @@ void CMainFrame::SetupSubtitlesSubMenu()
} else {
if (lcid != 0) {
int len = GetLocaleInfo(lcid, LOCALE_SENGLANGUAGE, str.GetBuffer(64), 64);
- str.ReleaseBufferSetLength(max(len - 1, 0));
+ str.ReleaseBufferSetLength(std::max(len - 1, 0));
}
CString lcstr = CString(str).MakeLower();
@@ -12620,15 +12810,14 @@ void CMainFrame::SetupSubtitlesSubMenu()
}
for (int j = 0, cnt = pSubStream->GetStreamCount(); j < cnt; j++) {
- WCHAR* pName = nullptr;
+ CComHeapPtr<WCHAR> pName;
if (SUCCEEDED(pSubStream->GetStreamInfo(j, &pName, nullptr))) {
CString name(pName);
name.Replace(_T("&"), _T("&&"));
VERIFY(subMenu.AppendMenu(MF_STRING | MF_ENABLED, id++, name));
- CoTaskMemFree(pName);
} else {
- VERIFY(subMenu.AppendMenu(MF_STRING | MF_ENABLED, id++, ResStr(IDS_AG_UNKNOWN)));
+ VERIFY(subMenu.AppendMenu(MF_STRING | MF_ENABLED, id++, ResStr(IDS_AG_UNKNOWN_STREAM)));
}
i++;
}
@@ -12716,15 +12905,6 @@ void CMainFrame::SetupVideoStreamsSubMenu()
}
}
-static CString StripPath(CString path)
-{
- CString p = path;
- p.Replace('\\', '/');
- p.TrimRight('/');
- p = p.Mid(p.ReverseFind('/') + 1);
- return (p.IsEmpty() ? path : p);
-}
-
void CMainFrame::SetupJumpToSubMenus(CMenu* parentMenu /*= nullptr*/, int iInsertPos /*= -1*/)
{
auto emptyMenu = [&](CMenu & menu) {
@@ -12760,7 +12940,7 @@ void CMainFrame::SetupJumpToSubMenus(CMenu* parentMenu /*= nullptr*/, int iInser
idStart >= ID_NAVIGATE_JUMPTO_SUBITEM_START ? MF_BYCOMMAND : MF_BYPOSITION));
}
};
- auto addSubMenuIfPossible = [&](const CString & subMenuName, CMenu & subMenu) {
+ auto addSubMenuIfPossible = [&](CString subMenuName, CMenu & subMenu) {
if (parentMenu && iInsertPos >= 0) {
if (parentMenu->InsertMenu(iInsertPos + m_nJumpToSubMenusCount, MF_POPUP | MF_BYPOSITION,
(UINT_PTR)(HMENU)subMenu, subMenuName)) {
@@ -12779,7 +12959,7 @@ void CMainFrame::SetupJumpToSubMenus(CMenu* parentMenu /*= nullptr*/, int iInser
UINT flags = MF_BYCOMMAND | MF_STRING | MF_ENABLED;
CHdmvClipInfo::PlaylistItem Item = m_MPLSPlaylist.GetNext(pos);
CString time = _T("[") + ReftimeToString2(Item.Duration()) + _T("]");
- CString name = StripPath(Item.m_strFileName);
+ CString name = PathUtils::StripPathOrUrl(Item.m_strFileName);
if (name == m_wndPlaylistBar.m_pl.GetHead().GetLabel()) {
idSelected = id;
@@ -12789,7 +12969,7 @@ void CMainFrame::SetupJumpToSubMenus(CMenu* parentMenu /*= nullptr*/, int iInser
VERIFY(m_BDPlaylistMenu.AppendMenu(flags, id++, name + '\t' + time));
}
menuEndRadioSection(m_BDPlaylistMenu);
- addSubMenuIfPossible(ResStr(IDS_NAVIGATE_BD_PLAYLISTS), m_BDPlaylistMenu);
+ addSubMenuIfPossible(StrRes(IDS_NAVIGATE_BD_PLAYLISTS), m_BDPlaylistMenu);
}
SetupChapters();
@@ -12819,7 +12999,7 @@ void CMainFrame::SetupJumpToSubMenus(CMenu* parentMenu /*= nullptr*/, int iInser
VERIFY(m_chaptersMenu.AppendMenu(flags, id, name + '\t' + time));
}
menuEndRadioSection(m_chaptersMenu);
- addSubMenuIfPossible(ResStr(IDS_NAVIGATE_CHAPTERS), m_chaptersMenu);
+ addSubMenuIfPossible(StrRes(IDS_NAVIGATE_CHAPTERS), m_chaptersMenu);
}
if (m_wndPlaylistBar.GetCount() > 1) {
@@ -12836,7 +13016,7 @@ void CMainFrame::SetupJumpToSubMenus(CMenu* parentMenu /*= nullptr*/, int iInser
VERIFY(m_playlistMenu.AppendMenu(flags, id++, name));
}
menuEndRadioSection(m_playlistMenu);
- addSubMenuIfPossible(ResStr(IDS_NAVIGATE_PLAYLIST), m_playlistMenu);
+ addSubMenuIfPossible(StrRes(IDS_NAVIGATE_PLAYLIST), m_playlistMenu);
}
} else if (GetPlaybackMode() == PM_DVD) {
ULONG ulNumOfVolumes, ulVolume, ulNumOfTitles, ulNumOfChapters, ulUOPs;
@@ -12863,7 +13043,7 @@ void CMainFrame::SetupJumpToSubMenus(CMenu* parentMenu /*= nullptr*/, int iInser
VERIFY(m_titlesMenu.AppendMenu(flags, id++, str));
}
menuEndRadioSection(m_titlesMenu);
- addSubMenuIfPossible(ResStr(IDS_NAVIGATE_TITLES), m_titlesMenu);
+ addSubMenuIfPossible(StrRes(IDS_NAVIGATE_TITLES), m_titlesMenu);
menuStartRadioSection();
for (ULONG i = 1; i <= ulNumOfChapters; i++) {
@@ -12881,173 +13061,247 @@ void CMainFrame::SetupJumpToSubMenus(CMenu* parentMenu /*= nullptr*/, int iInser
VERIFY(m_chaptersMenu.AppendMenu(flags, id++, str));
}
menuEndRadioSection(m_chaptersMenu);
- addSubMenuIfPossible(ResStr(IDS_NAVIGATE_CHAPTERS), m_chaptersMenu);
+ addSubMenuIfPossible(StrRes(IDS_NAVIGATE_CHAPTERS), m_chaptersMenu);
}
} else if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
const CAppSettings& s = AfxGetAppSettings();
menuStartRadioSection();
- POSITION pos = s.m_DVBChannels.GetHeadPosition();
- while (pos) {
- const CDVBChannel& channel = s.m_DVBChannels.GetNext(pos);
+ for (const auto& channel : s.m_DVBChannels) {
UINT flags = MF_BYCOMMAND | MF_STRING | MF_ENABLED;
- if ((UINT)channel.GetPrefNumber() == s.nDVBLastChannel) {
+ if (channel.GetPrefNumber() == s.nDVBLastChannel) {
idSelected = id;
}
VERIFY(m_channelsMenu.AppendMenu(flags, ID_NAVIGATE_JUMPTO_SUBITEM_START + channel.GetPrefNumber(), channel.GetName()));
id++;
}
menuEndRadioSection(m_channelsMenu);
- addSubMenuIfPossible(_T("Channels"), m_channelsMenu);
- }
-}
-
-IBaseFilter* CMainFrame::FindSourceSelectableFilter()
-{
- // splitters for video files (MPEG files with only audio track is very rare)
- IBaseFilter* pSF = FindFilter(CLSID_MPCMpegSplitter, m_pGB);
- if (!pSF) {
- pSF = FindFilter(CLSID_MPCMpegSplitterSource, m_pGB);
+ addSubMenuIfPossible(StrRes(IDS_NAVIGATE_CHANNELS), m_channelsMenu);
}
- // universal splitters
- if (!pSF) {
- pSF = FindFilter(CLSID_OggSplitter, m_pGB);
- }
- if (!pSF) {
- pSF = FindFilter(L"{171252A0-8820-4AFE-9DF8-5C92B2D66B04}", m_pGB); // LAV Splitter
- }
- if (!pSF) {
- pSF = FindFilter(L"{B98D13E7-55DB-4385-A33D-09FD1BA26338}", m_pGB); // LAV Splitter Source
- }
- if (!pSF) {
- pSF = FindFilter(L"{55DA30FC-F16B-49fc-BAA5-AE59FC65F82D}", m_pGB); // Haali Media Source
- }
- if (!pSF) {
- pSF = FindFilter(L"{564FD788-86C9-4444-971E-CC4A243DA150}", m_pGB); // Haali Media Splitter with previous file source (like rarfilesource)
- }
- if (!pSF) {
- pSF = FindFilter(L"{529A00DB-0C43-4f5b-8EF2-05004CBE0C6F}", m_pGB); // AV Splitter
- }
- if (!pSF) {
- pSF = FindFilter(L"{D8980E15-E1F6-4916-A10F-D7EB4E9E10B8}", m_pGB); // AV Source
- }
-
- return pSF;
}
void CMainFrame::SetupNavStreamSelectSubMenu(CMenu& subMenu, UINT id, DWORD dwSelGroup)
{
- CComQIPtr<IAMStreamSelect> pSS = FindSourceSelectableFilter();
- if (!pSS) {
- pSS = m_pGB;
- }
- if (!pSS) {
- return;
- }
+ bool bAddSeparator = false;
- DWORD cStreams;
- if (FAILED(pSS->Count(&cStreams))) {
- return;
- }
+ auto addStreamSelectFilter = [&](CComPtr<IAMStreamSelect> pSS) {
+ DWORD cStreams;
+ if (!pSS || FAILED(pSS->Count(&cStreams))) {
+ return;
+ }
- DWORD dwPrevGroup = DWORD_MAX;
+ bool bAdded = false;
+ for (DWORD i = 0; i < cStreams; i++) {
+ DWORD dwFlags, dwGroup;
+ LCID lcid;
+ CComHeapPtr<WCHAR> pszName;
- for (int i = 0, j = cStreams; i < j; i++) {
- DWORD dwFlags, dwGroup;
- LCID lcid;
- WCHAR* pszName = nullptr;
+ if (FAILED(pSS->Info(i, nullptr, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))
+ || !pszName) {
+ continue;
+ }
- if (FAILED(pSS->Info(i, nullptr, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))
- || !pszName) {
- continue;
- }
+ if (dwGroup != dwSelGroup) {
+ continue;
+ }
- CString name(pszName);
- CString lcname = CString(name).MakeLower();
+ CString str;
+ CString lcname(pszName);
+ lcname.MakeLower();
- if (pszName) {
- CoTaskMemFree(pszName);
- }
+ if (lcname.Find(_T(" off")) >= 0) {
+ str.LoadString(IDS_AG_DISABLED);
+ } else {
+ if (lcid && lcid != LCID(-1)) {
+ int len = GetLocaleInfo(lcid, LOCALE_SENGLANGUAGE, str.GetBuffer(64), 64);
+ str.ReleaseBufferSetLength(std::max(len - 1, 0));
+ }
- if (dwGroup != dwSelGroup) {
- continue;
- }
+ CString lcstr(str);
+ lcstr.MakeLower();
- if (dwPrevGroup != -1 && dwPrevGroup != dwGroup) {
- VERIFY(subMenu.AppendMenu(MF_SEPARATOR));
- }
- dwPrevGroup = dwGroup;
+ if (str.IsEmpty() || lcname.Find(lcstr) >= 0) {
+ str = pszName;
+ } else if (wcslen(pszName)) {
+ str = CString(pszName) + _T(" (") + str + _T(")");
+ }
+ }
- CString str;
+ UINT flags = MF_BYCOMMAND | MF_STRING | MF_ENABLED;
+ if (dwFlags) {
+ flags |= MF_CHECKED;
+ }
- if (lcname.Find(_T(" off")) >= 0) {
- str.LoadString(IDS_AG_DISABLED);
- } else {
- if (lcid != 0) {
- int len = GetLocaleInfo(lcid, LOCALE_SENGLANGUAGE, str.GetBuffer(64), 64);
- str.ReleaseBufferSetLength(max(len - 1, 0));
+ if (bAddSeparator) {
+ VERIFY(subMenu.AppendMenu(MF_SEPARATOR));
+ bAddSeparator = false;
}
+ bAdded = true;
- CString lcstr = CString(str).MakeLower();
+ str.Replace(_T("&"), _T("&&"));
+ VERIFY(subMenu.AppendMenu(flags, id++, str));
+ }
- if (str.IsEmpty() || lcname.Find(lcstr) >= 0) {
- str = name;
- } else if (!name.IsEmpty()) {
- str = CString(name) + _T(" (") + str + _T(")");
- }
+ if (bAdded) {
+ bAddSeparator = true;
}
+ };
- UINT flags = MF_BYCOMMAND | MF_STRING | MF_ENABLED;
- if (dwFlags) {
- flags |= MF_CHECKED;
+ CComQIPtr<IAMStreamSelect> pSS;
+
+ BeginEnumFilters(m_pGB, pEF, pBF) {
+ if (GetCLSID(pBF) == __uuidof(CAudioSwitcherFilter) || GetCLSID(pBF) == CLSID_MorganStreamSwitcher) {
+ continue;
}
- str.Replace(_T("&"), _T("&&"));
- VERIFY(subMenu.AppendMenu(flags, id++, str));
+ if (pSS = pBF) {
+ addStreamSelectFilter(pSS);
+ }
+ }
+ EndEnumFilters
+
+ if (pSS = m_pGB) {
+ addStreamSelectFilter(pSS);
}
}
void CMainFrame::OnNavStreamSelectSubMenu(UINT id, DWORD dwSelGroup)
{
- CComQIPtr<IAMStreamSelect> pSS = FindSourceSelectableFilter();
- if (!pSS) {
- pSS = m_pGB;
- }
- if (!pSS) {
- return;
+ auto processStreamSelectFilter = [&](CComPtr<IAMStreamSelect> pSS) {
+ bool bSelected = false;
+
+ DWORD cStreams;
+ if (SUCCEEDED(pSS->Count(&cStreams))) {
+ for (int i = 0, j = cStreams; i < j; i++) {
+ DWORD dwFlags, dwGroup;
+ LCID lcid;
+ CComHeapPtr<WCHAR> pszName;
+
+ if (FAILED(pSS->Info(i, nullptr, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))
+ || !pszName) {
+ continue;
+ }
+
+ if (dwGroup != dwSelGroup) {
+ continue;
+ }
+
+ if (id == 0) {
+ pSS->Enable(i, AMSTREAMSELECTENABLE_ENABLE);
+ bSelected = true;
+ break;
+ }
+
+ id--;
+ }
+ }
+
+ return bSelected;
+ };
+
+ CComQIPtr<IAMStreamSelect> pSS;
+
+ BeginEnumFilters(m_pGB, pEF, pBF) {
+ if (GetCLSID(pBF) == __uuidof(CAudioSwitcherFilter) || GetCLSID(pBF) == CLSID_MorganStreamSwitcher) {
+ continue;
+ }
+
+ if (pSS = pBF) {
+ if (processStreamSelectFilter(pSS)) {
+ return;
+ }
+ }
}
+ EndEnumFilters
- DWORD cStreams;
- if (FAILED(pSS->Count(&cStreams))) {
- return;
+ if (pSS = m_pGB) {
+ processStreamSelectFilter(pSS);
}
+}
- for (int i = 0, j = cStreams; i < j; i++) {
- DWORD dwFlags, dwGroup;
- LCID lcid;
- WCHAR* pszName = nullptr;
+void CMainFrame::OnStreamSelect(bool bForward, DWORD dwSelGroup)
+{
+ ASSERT(dwSelGroup == 1 || dwSelGroup == 2);
+ CComQIPtr<IAMStreamSelect> pSS;
- if (FAILED(pSS->Info(i, nullptr, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))
- || !pszName) {
+ BeginEnumFilters(m_pGB, pEF, pBF) {
+ if (GetCLSID(pBF) == __uuidof(CAudioSwitcherFilter) || GetCLSID(pBF) == CLSID_MorganStreamSwitcher) {
continue;
}
- if (pszName) {
- CoTaskMemFree(pszName);
+ if (!(pSS = pBF)) {
+ continue;
}
- if (dwGroup != dwSelGroup) {
+ DWORD cStreams;
+ if (FAILED(pSS->Count(&cStreams))) {
continue;
}
- if (id == 0) {
- pSS->Enable(i, AMSTREAMSELECTENABLE_ENABLE);
+ std::vector<std::tuple<DWORD, LCID, CString>> streams;
+ size_t currentSel = SIZE_MAX;
+ for (DWORD i = 0; i < cStreams; i++) {
+ DWORD dwFlags, dwGroup;
+ LCID lcid;
+ CComHeapPtr<WCHAR> pszName;
+
+ if (FAILED(pSS->Info(i, nullptr, &dwFlags, &lcid, &dwGroup, &pszName, nullptr, nullptr))
+ || !pszName) {
+ continue;
+ }
+
+ if (dwGroup != dwSelGroup) {
+ continue;
+ }
+
+ if (dwFlags) {
+ currentSel = streams.size();
+ }
+ streams.emplace_back(i, lcid, CString(pszName));
+ }
+
+ size_t count = streams.size();
+ if (count && currentSel != SIZE_MAX) {
+ size_t requested = (bForward ? currentSel + 1 : currentSel - 1) % count;
+ DWORD id;
+ LCID lcid;
+ CString name;
+ std::tie(id, lcid, name) = streams.at(requested);
+ pSS->Enable(id, AMSTREAMSELECTENABLE_ENABLE);
+ m_OSD.DisplayMessage(OSD_TOPLEFT, GetStreamOSDString(name, lcid, dwSelGroup));
break;
}
+ }
+ EndEnumFilters
+}
- id--;
+CString CMainFrame::GetStreamOSDString(CString name, LCID lcid, DWORD dwSelGroup)
+{
+ name.Replace(_T("\t"), _T(" - "));
+ CString sLcid;
+ if (lcid && lcid != LCID(-1)) {
+ int len = GetLocaleInfo(lcid, LOCALE_SENGLANGUAGE, sLcid.GetBuffer(64), 64);
+ sLcid.ReleaseBufferSetLength(std::max(len - 1, 0));
+ }
+ if (!sLcid.IsEmpty() && CString(name).MakeLower().Find(CString(sLcid).MakeLower()) < 0) {
+ name += _T(" (") + sLcid + _T(")");
+ }
+ CString strMessage;
+ if (dwSelGroup == 1) {
+ int n = 0;
+ if (name.Find(_T("A:")) == 0) {
+ n = 2;
+ }
+ strMessage.Format(IDS_AUDIO_STREAM, name.Mid(n).Trim());
+ } else if (dwSelGroup == 2) {
+ int n = 0;
+ if (name.Find(_T("S:")) == 0) {
+ n = 2;
+ }
+ strMessage.Format(IDS_SUBTITLE_STREAM, name.Mid(n).Trim());
}
+ return strMessage;
}
void CMainFrame::SetupRecentFilesSubMenu()
@@ -13094,14 +13348,14 @@ void CMainFrame::SetupFavoritesSubMenu()
UINT nLastGroupStart = subMenu.GetMenuItemCount();
UINT id = ID_FAVORITES_FILE_START;
- CAtlList<CString> sl;
- AfxGetAppSettings().GetFav(FAV_FILE, sl);
- POSITION pos = sl.GetHeadPosition();
+ CAtlList<CString> favs;
+ AfxGetAppSettings().GetFav(FAV_FILE, favs);
+ POSITION pos = favs.GetHeadPosition();
while (pos) {
UINT flags = MF_BYCOMMAND | MF_STRING | MF_ENABLED;
- CString f_str = sl.GetNext(pos);
+ CString f_str = favs.GetNext(pos);
f_str.Replace(_T("&"), _T("&&"));
f_str.Replace(_T("\t"), _T(" "));
@@ -13150,13 +13404,13 @@ void CMainFrame::SetupFavoritesSubMenu()
nLastGroupStart = subMenu.GetMenuItemCount();
id = ID_FAVORITES_DVD_START;
- s.GetFav(FAV_DVD, sl);
- pos = sl.GetHeadPosition();
+ s.GetFav(FAV_DVD, favs);
+ pos = favs.GetHeadPosition();
while (pos) {
UINT flags = MF_BYCOMMAND | MF_STRING | MF_ENABLED;
- CString str = sl.GetNext(pos);
+ CString str = favs.GetNext(pos);
str.Replace(_T("&"), _T("&&"));
CAtlList<CString> sl;
@@ -13183,13 +13437,13 @@ void CMainFrame::SetupFavoritesSubMenu()
id = ID_FAVORITES_DEVICE_START;
- s.GetFav(FAV_DEVICE, sl);
+ s.GetFav(FAV_DEVICE, favs);
- pos = sl.GetHeadPosition();
+ pos = favs.GetHeadPosition();
while (pos) {
UINT flags = MF_BYCOMMAND | MF_STRING | MF_ENABLED;
- CString str = sl.GetNext(pos);
+ CString str = favs.GetNext(pos);
str.Replace(_T("&"), _T("&&"));
CAtlList<CString> sl;
@@ -13399,12 +13653,11 @@ bool CMainFrame::SetSubtitle(int i, bool bIsOffset /*= false*/, bool bDisplayMes
bool success = false;
if (pSubInput) {
- WCHAR* pName = nullptr;
+ CComHeapPtr<WCHAR> pName;
if (CComQIPtr<IAMStreamSelect> pSSF = pSubInput->pSourceFilter) {
DWORD dwFlags;
if (FAILED(pSSF->Info(i, nullptr, &dwFlags, nullptr, nullptr, &pName, nullptr, nullptr))) {
dwFlags = 0;
- pName = nullptr;
}
// Enable the track only if it isn't already the only selected track in the group
if (!(dwFlags & AMSTREAMSELECTINFO_EXCLUSIVE)) {
@@ -13421,15 +13674,9 @@ bool CMainFrame::SetSubtitle(int i, bool bIsOffset /*= false*/, bool bDisplayMes
if (bDisplayMessage) {
if (pName || SUCCEEDED(pSubInput->pSubStream->GetStreamInfo(0, &pName, nullptr))) {
- CString strMessage;
- strMessage.Format(IDS_SUBTITLE_STREAM, pName);
- m_OSD.DisplayMessage(OSD_TOPLEFT, strMessage);
+ m_OSD.DisplayMessage(OSD_TOPLEFT, GetStreamOSDString(CString(pName), LCID(-1), 2));
}
}
- if (pName) {
- CoTaskMemFree(pName);
- }
-
success = true;
}
@@ -13480,9 +13727,9 @@ void CMainFrame::SetSubtitle(const SubtitleInput& subInput)
bool bKeepAspectRatio = s.fKeepAspectRatio;
CSize szAspectRatio = m_pCAP->GetVideoSize(true);
CSize szVideoFrame;
- if (CComQIPtr<IMadVRInfo> pMVRI = m_pCAP) {
+ if (m_pMVRI) {
// Use IMadVRInfo to get size. See http://bugs.madshi.net/view.php?id=180
- pMVRI->GetSize("originalVideoSize", &szVideoFrame);
+ m_pMVRI->GetSize("originalVideoSize", &szVideoFrame);
bKeepAspectRatio = true;
} else {
szVideoFrame = m_pCAP->GetVideoSize(false);
@@ -13500,36 +13747,33 @@ void CMainFrame::SetSubtitle(const SubtitleInput& subInput)
pRTS->SetOverride(s.fUseDefaultSubtitlesStyle, s.subtitlesDefStyle);
pRTS->SetAlignment(s.fOverridePlacement, s.nHorPos, s.nVerPos);
pRTS->Deinit();
- } else if (clsid == __uuidof(CRLECodedSubtitle)) {
- CRLECodedSubtitle* pRHS = (CRLECodedSubtitle*)(ISubStream*)subInput.pSubStream;
-
- CComQIPtr<ISubRenderOptions> pSRO = m_pCAP;
- CComQIPtr<IMadVRInfo> pMVRI = m_pCAP;
-
- LPWSTR yuvMatrix = nullptr;
- int nLen;
- if (pMVRI) {
- pMVRI->GetString("yuvMatrix", &yuvMatrix, &nLen);
- } else if (pSRO) {
- pSRO->GetString("yuvMatrix", &yuvMatrix, &nLen);
- }
+ }
- int targetBlackLevel = 0, targetWhiteLevel = 255;
- if (m_pMVRS) {
- m_pMVRS->SettingsGetInteger(L"Black", &targetBlackLevel);
- m_pMVRS->SettingsGetInteger(L"White", &targetWhiteLevel);
- } else if (pSRO) {
- int range = 0;
- pSRO->GetInt("supportedLevels", &range);
- if (range == 3) {
- targetBlackLevel = 16;
- targetWhiteLevel = 235;
- }
- }
+ CComQIPtr<ISubRenderOptions> pSRO = m_pCAP;
- pRHS->SetSourceTargetInfo(yuvMatrix, targetBlackLevel, targetWhiteLevel);
- LocalFree(yuvMatrix);
+ LPWSTR yuvMatrix = nullptr;
+ int nLen;
+ if (m_pMVRI) {
+ m_pMVRI->GetString("yuvMatrix", &yuvMatrix, &nLen);
+ } else if (pSRO) {
+ pSRO->GetString("yuvMatrix", &yuvMatrix, &nLen);
+ }
+
+ int targetBlackLevel = 0, targetWhiteLevel = 255;
+ if (m_pMVRS) {
+ m_pMVRS->SettingsGetInteger(L"Black", &targetBlackLevel);
+ m_pMVRS->SettingsGetInteger(L"White", &targetWhiteLevel);
+ } else if (pSRO) {
+ int range = 0;
+ pSRO->GetInt("supportedLevels", &range);
+ if (range == 3) {
+ targetBlackLevel = 16;
+ targetWhiteLevel = 235;
+ }
}
+
+ subInput.pSubStream->SetSourceTargetInfo(yuvMatrix, targetBlackLevel, targetWhiteLevel);
+ LocalFree(yuvMatrix);
}
m_pCurrentSubInput = subInput;
@@ -13671,18 +13915,12 @@ bool CMainFrame::GetNeighbouringKeyFrames(REFERENCE_TIME rtTarget, std::pair<REF
void CMainFrame::LoadKeyFrames()
{
- CComQIPtr<IKeyFrameInfo> pKFI;
- BeginEnumFilters(m_pGB, pEF, pBF);
- if (pKFI = pBF) {
- break;
- }
- EndEnumFilters;
UINT nKFs = 0;
m_kfs.clear();
- if (pKFI && S_OK == pKFI->GetKeyFrameCount(nKFs) && nKFs > 1) {
+ if (m_pKFI && S_OK == m_pKFI->GetKeyFrameCount(nKFs) && nKFs > 1) {
UINT k = nKFs;
m_kfs.resize(k);
- if (FAILED(pKFI->GetKeyFrames(&TIME_FORMAT_MEDIA_TIME, m_kfs.data(), k)) || k != nKFs) {
+ if (FAILED(m_pKFI->GetKeyFrames(&TIME_FORMAT_MEDIA_TIME, m_kfs.data(), k)) || k != nKFs) {
m_kfs.clear();
}
}
@@ -13729,7 +13967,7 @@ void CMainFrame::SeekTo(REFERENCE_TIME rtPos, bool bShowOSD /*= true*/)
if (rtPos > stop) {
rtPos = stop;
}
- m_wndStatusBar.SetStatusTimer(rtPos, stop, !!m_wndSubresyncBar.IsWindowVisible(), GetTimeFormat());
+ m_wndStatusBar.SetStatusTimer(rtPos, stop, IsSubresyncBarVisible(), GetTimeFormat());
if (bShowOSD) {
m_OSD.DisplayMessage(OSD_TOPLEFT, m_wndStatusBar.GetStatusTimer(), 1500);
@@ -14064,6 +14302,7 @@ bool CMainFrame::BuildGraphVideoAudio(int fVPreview, bool fVCapture, int fAPrevi
CComPtr<IMadVRTextOsd> pMVTO;
m_pMVRS.Release();
+ m_pMVRSR.Release();
m_OSD.Stop();
m_pCAP2.Release();
@@ -14085,6 +14324,7 @@ bool CMainFrame::BuildGraphVideoAudio(int fVPreview, bool fVCapture, int fAPrevi
m_pGB->FindInterface(IID_PPV_ARGS(&m_pMFVDC), TRUE);
m_pGB->FindInterface(IID_PPV_ARGS(&m_pMFVP), TRUE);
pMVTO = m_pCAP;
+ m_pMVRSR = m_pCAP;
m_pMVRS = m_pCAP;
const CAppSettings& s = AfxGetAppSettings();
@@ -14232,7 +14472,7 @@ bool CMainFrame::StopCapture()
return false;
}
- m_wndStatusBar.SetStatusMessage(ResStr(IDS_CONTROLS_COMPLETING));
+ m_wndStatusBar.SetStatusMessage(StrRes(IDS_CONTROLS_COMPLETING));
m_fCapturing = false;
BuildGraphVideoAudio(
@@ -14262,8 +14502,19 @@ void CMainFrame::ShowOptions(int idPage/* = 0*/)
CPPageSheet options(ResStr(IDS_OPTIONS_CAPTION), m_pGB, GetModalParent(), idPage);
iRes = options.DoModal();
idPage = 0; // If we are to show the dialog again, always show the latest page
- } while (iRes == IDRETRY); // IDRETRY means we quited the dialog so that the language change is applied
- ASSERT(iRes > 0 && iRes != IDABORT);
+ } while (iRes == CPPageSheet::APPLY_LANGUAGE_CHANGE); // check if we exited the dialog so that the language change can be applied
+
+ switch (iRes) {
+ case CPPageSheet::RESET_SETTINGS:
+ // Request MPC-HC to close itself
+ SendMessage(WM_CLOSE);
+ // and immediately reopen
+ ShellExecute(nullptr, _T("open"), PathUtils::GetProgramPath(true), _T("/reset"), nullptr, SW_SHOWNORMAL);
+ break;
+ default:
+ ASSERT(iRes > 0 && iRes != CPPageSheet::APPLY_LANGUAGE_CHANGE);
+ break;
+ }
}
void CMainFrame::StartWebServer(int nPort)
@@ -14393,12 +14644,6 @@ void CMainFrame::OpenMedia(CAutoPtr<OpenMediaData> pOMD)
}
m_bIsBDPlay = false;
- // activate auto-fit logic upon exiting fullscreen if
- // we are opening new media in fullscreen mode
- if (m_fFullScreen && s.fRememberZoomLevel) {
- m_fFirstFSAfterLaunchOnFS = true;
- }
-
// no need to try releasing external objects while playing
KillTimer(TIMER_UNLOAD_UNUSED_EXTERNAL_OBJECTS);
@@ -14406,17 +14651,8 @@ void CMainFrame::OpenMedia(CAutoPtr<OpenMediaData> pOMD)
SetLoadState(MLS::LOADING);
// use the graph thread only for some media types
- bool fUseThread = m_pGraphThread && s.fEnableWorkerThreadForOpening;
- if (pFileData) {
- if (!pFileData->fns.IsEmpty()) {
- engine_t e = s.m_Formats.GetEngine(pFileData->fns.GetHead());
- if (e != DirectShow /*&& e != RealMedia && e != QuickTime*/) {
- fUseThread = false;
- }
- }
- } else if (pDeviceData) {
- fUseThread = false;
- }
+ bool bDirectShow = pFileData && !pFileData->fns.IsEmpty() && s.m_Formats.GetEngine(pFileData->fns.GetHead()) == DirectShow;
+ bool bUseThread = m_pGraphThread && s.fEnableWorkerThreadForOpening && (bDirectShow || !pFileData) && (s.iDefaultCaptureDevice == 1 || !pDeviceData);
// create d3dfs window if launching in fullscreen and d3dfs is enabled
if (s.IsD3DFullscreen() && m_fStartInD3DFullscreen) {
@@ -14427,6 +14663,12 @@ void CMainFrame::OpenMedia(CAutoPtr<OpenMediaData> pOMD)
m_pVideoWnd = &m_wndView;
}
+ // activate auto-fit logic upon exiting fullscreen if
+ // we are opening new media in fullscreen mode
+ if ((m_fFullScreen || IsD3DFullScreenMode()) && s.fRememberZoomLevel) {
+ m_fFirstFSAfterLaunchOnFS = true;
+ }
+
// don't set video renderer output rect until the window is repositioned
m_bDelaySetOutputRect = true;
@@ -14434,14 +14676,17 @@ void CMainFrame::OpenMedia(CAutoPtr<OpenMediaData> pOMD)
if (pFileData) {
CString filename = m_wndPlaylistBar.GetCurFileName();
CString ext = filename.Mid(filename.ReverseFind('.') + 1);
- m_wndStatusBar.SetStatusTypeIcon(LoadIcon(ext, true));
+ m_wndStatusBar.SetMediaType(ext);
} else if (pDVDData) {
- m_wndStatusBar.SetStatusTypeIcon(LoadIcon(_T(".ifo"), true));
+ m_wndStatusBar.SetMediaType(_T(".ifo"));
+ } else {
+ // TODO: Create icons for pDeviceData
+ m_wndStatusBar.SetMediaType(_T(".unknown"));
}
// initiate graph creation, OpenMediaPrivate() will call OnFilePostOpenmedia()
- if (fUseThread) {
- VERIFY(m_evOpenPrivateFinished.ResetEvent());
+ if (bUseThread) {
+ VERIFY(m_evOpenPrivateFinished.Reset());
VERIFY(m_pGraphThread->PostThreadMessage(CGraphThread::TM_OPEN, 0, (LPARAM)pOMD.Detach()));
m_bOpenedThroughThread = true;
} else {
@@ -14540,10 +14785,13 @@ void CMainFrame::CloseMedia(bool bNextIsQueued/* = false*/)
SetupVideoStreamsSubMenu();
SetupJumpToSubMenus();
+ m_pSubtitlesProviders->Abort(SubtitlesThreadType(STT_SEARCH | STT_DOWNLOAD));
+ m_wndSubtitlesDownloadDialog.DoClear();
+
// initiate graph destruction
if (m_pGraphThread && m_bOpenedThroughThread) {
// either opening or closing has to be blocked to prevent reentering them, closing is the better choice
- VERIFY(m_evClosePrivateFinished.ResetEvent());
+ VERIFY(m_evClosePrivateFinished.Reset());
VERIFY(m_pGraphThread->PostThreadMessage(CGraphThread::TM_CLOSE, 0, 0));
HANDLE handle = m_evClosePrivateFinished;
@@ -14574,6 +14822,14 @@ void CMainFrame::CloseMedia(bool bNextIsQueued/* = false*/)
void CMainFrame::StartTunerScan(CAutoPtr<TunerScanData> pTSD)
{
+ // Remove the old info during the scan
+ m_pDVBState->Reset();
+ m_wndInfoBar.RemoveAllLines();
+ m_wndNavigationBar.m_navdlg.SetChannelInfoAvailable(false);
+ RecalcLayout();
+ OpenSetupWindowTitle();
+ SendNowPlayingToSkype();
+
if (m_pGraphThread) {
m_pGraphThread->PostThreadMessage(CGraphThread::TM_TUNER_SCAN, 0, (LPARAM)pTSD.Detach());
} else {
@@ -14588,44 +14844,51 @@ void CMainFrame::StopTunerScan()
HRESULT CMainFrame::SetChannel(int nChannel)
{
- const CAppSettings& s = AfxGetAppSettings();
+ CAppSettings& s = AfxGetAppSettings();
HRESULT hr = S_OK;
CComQIPtr<IBDATuner> pTun = m_pGB;
+ CDVBChannel* pChannel = s.FindChannelByPref(nChannel);
- if (!m_fSetChannelActive) {
- m_fSetChannelActive = true;
+ if (s.m_DVBChannels.empty() && nChannel == INT_ERROR) {
+ hr = S_FALSE; // All channels have been cleared or it is the first start
+ } else if (pTun && pChannel && !m_pDVBState->bSetChannelActive) {
+ m_pDVBState->Reset();
+ m_wndInfoBar.RemoveAllLines();
+ m_wndNavigationBar.m_navdlg.SetChannelInfoAvailable(false);
+ RecalcLayout();
+ m_pDVBState->bSetChannelActive = true;
- if (pTun) {
- // Skip n intermediate ZoomVideoWindow() calls while the new size is stabilized:
- switch (s.iDSVideoRendererType) {
- case VIDRNDT_DS_MADVR:
- if (s.nDVBStopFilterGraph == DVB_STOP_FG_ALWAYS) {
- m_nLockedZoomVideoWindow = 3;
- } else {
- m_nLockedZoomVideoWindow = 0;
- }
- break;
- case VIDRNDT_DS_EVR_CUSTOM:
- m_nLockedZoomVideoWindow = 0;
- break;
- default:
- m_nLockedZoomVideoWindow = 0;
- }
- if (SUCCEEDED(hr = pTun->SetChannel(nChannel))) {
- if (hr == S_FALSE) {
- // Re-create all
+ // Skip n intermediate ZoomVideoWindow() calls while the new size is stabilized:
+ switch (s.iDSVideoRendererType) {
+ case VIDRNDT_DS_MADVR:
+ if (s.nDVBStopFilterGraph == DVB_STOP_FG_ALWAYS) {
+ m_nLockedZoomVideoWindow = 3;
+ } else {
m_nLockedZoomVideoWindow = 0;
- PostMessage(WM_COMMAND, ID_FILE_OPENDEVICE);
- return hr;
}
- ShowCurrentChannelInfo();
+ break;
+ case VIDRNDT_DS_EVR_CUSTOM:
+ m_nLockedZoomVideoWindow = 0;
+ break;
+ default:
+ m_nLockedZoomVideoWindow = 0;
+ }
+ if (SUCCEEDED(hr = pTun->SetChannel(nChannel))) {
+ if (hr == S_FALSE) {
+ // Re-create all
+ m_nLockedZoomVideoWindow = 0;
+ PostMessage(WM_COMMAND, ID_FILE_OPENDEVICE);
+ return hr;
}
- WINDOWPLACEMENT wp;
- wp.length = sizeof(wp);
- GetWindowPlacement(&wp);
- if (s.fRememberZoomLevel
- && !(m_fFullScreen || wp.showCmd == SW_SHOWMAXIMIZED || wp.showCmd == SW_SHOWMINIMIZED)) {
+ m_pDVBState->bActive = true;
+ m_pDVBState->pChannel = pChannel;
+ m_pDVBState->sChannelName = pChannel->GetName();
+
+ m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_CHANNEL), m_pDVBState->sChannelName);
+ RecalcLayout();
+
+ if (s.fRememberZoomLevel && !(m_fFullScreen || IsZoomed() || IsIconic())) {
ZoomVideoWindow();
}
MoveVideoWindow();
@@ -14635,24 +14898,52 @@ HRESULT CMainFrame::SetChannel(int nChannel)
m_bAllowWindowZoom = true;
m_timerOneTime.Subscribe(TimerOneTimeSubscriber::AUTOFIT_TIMEOUT, [this]
{ m_bAllowWindowZoom = false; }, 5000);
+
+ UpdateCurrentChannelInfo();
}
- m_fSetChannelActive = false;
+ m_pDVBState->bSetChannelActive = false;
+ } else {
+ hr = E_FAIL;
+ ASSERT(FALSE);
}
+
return hr;
}
-void CMainFrame::ShowCurrentChannelInfo(bool fShowOSD /*= true*/, bool fShowInfoBar /*= false*/)
+void CMainFrame::UpdateCurrentChannelInfo(bool bShowOSD /*= true*/, bool bShowInfoBar /*= false*/)
{
- CAppSettings& s = AfxGetAppSettings();
- CDVBChannel* pChannel = s.FindChannelByPref(s.nDVBLastChannel);
+ const CDVBChannel* pChannel = m_pDVBState->pChannel;
CComQIPtr<IBDATuner> pTun = m_pGB;
- if (pChannel && pTun) {
- EventDescriptor NowNext;
- // Get EIT information:
- HRESULT hr = pTun->UpdatePSI(pChannel, NowNext);
+ if (!m_pDVBState->bInfoActive && pChannel && pTun) {
+ if (m_pDVBState->infoData.valid()) {
+ m_pDVBState->bAbortInfo = true;
+ m_pDVBState->infoData.get();
+ }
+ m_pDVBState->bAbortInfo = false;
+ m_pDVBState->bInfoActive = true;
+ m_pDVBState->infoData = std::async(std::launch::async, [this, pChannel, pTun, bShowOSD, bShowInfoBar] {
+ DVBState::EITData infoData;
+ infoData.hr = pTun->UpdatePSI(pChannel, infoData.NowNext);
+ infoData.bShowOSD = bShowOSD;
+ infoData.bShowInfoBar = bShowInfoBar;
+ if (m_pDVBState && !m_pDVBState->bAbortInfo)
+ {
+ PostMessage(WM_DVB_EIT_DATA_READY);
+ }
+ return infoData;
+ });
+ }
+}
+
+LRESULT CMainFrame::OnCurrentChannelInfoUpdated(WPARAM wParam, LPARAM lParam)
+{
+ if (!m_pDVBState->bAbortInfo && m_pDVBState->infoData.valid()) {
+ EventDescriptor& NowNext = m_pDVBState->NowNext;
+ const auto infoData = m_pDVBState->infoData.get();
+ NowNext = infoData.NowNext;
- if (hr != S_FALSE) {
+ if (infoData.hr != S_FALSE) {
// Set a timer to update the infos only if channel has now/next flag
time_t tNow;
time(&tNow);
@@ -14663,25 +14954,25 @@ void CMainFrame::ShowCurrentChannelInfo(bool fShowOSD /*= true*/, bool fShowInfo
// We set a 15s delay to let some room for the program infos to change
tElapse += 15;
m_timerOneTime.Subscribe(TimerOneTimeSubscriber::DVBINFO_UPDATE,
- [this] { ShowCurrentChannelInfo(false, false); },
+ [this] { UpdateCurrentChannelInfo(false, false); },
1000 * (UINT)tElapse);
- m_wndNavigationBar.m_navdlg.m_ButtonInfo.EnableWindow();
+ m_wndNavigationBar.m_navdlg.SetChannelInfoAvailable(true);
} else {
- m_wndNavigationBar.m_navdlg.m_ButtonInfo.EnableWindow(FALSE);
+ m_wndNavigationBar.m_navdlg.SetChannelInfoAvailable(false);
}
- CString sChannelInfo = pChannel->GetName();
+ CString sChannelInfo = m_pDVBState->sChannelName;
m_wndInfoBar.RemoveAllLines();
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_CHANNEL), sChannelInfo);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_CHANNEL), sChannelInfo);
- if (hr == S_OK) {
+ if (infoData.hr == S_OK) {
// EIT information parsed correctly
- if (fShowOSD) {
+ if (infoData.bShowOSD) {
sChannelInfo.AppendFormat(_T(" | %s (%s - %s)"), NowNext.eventName, NowNext.strStartTime, NowNext.strEndTime);
}
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_TITLE), NowNext.eventName);
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_TIME), NowNext.strStartTime + _T(" - ") + NowNext.strEndTime);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_TITLE), NowNext.eventName);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_TIME), NowNext.strStartTime + _T(" - ") + NowNext.strEndTime);
if (NowNext.parentalRating >= 0) {
CString parentRating;
@@ -14690,34 +14981,33 @@ void CMainFrame::ShowCurrentChannelInfo(bool fShowOSD /*= true*/, bool fShowInfo
} else {
parentRating.Format(IDS_PARENTAL_RATING, NowNext.parentalRating);
}
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_PARENTAL_RATING), parentRating);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_PARENTAL_RATING), parentRating);
}
if (!NowNext.content.IsEmpty()) {
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_CONTENT), NowNext.content);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_CONTENT), NowNext.content);
}
CString description = NowNext.eventDesc;
- if (!NowNext.extendedDescriptorsTexts.IsEmpty()) {
+ if (!NowNext.extendedDescriptorsText.IsEmpty()) {
if (!description.IsEmpty()) {
description += _T("; ");
}
- description += NowNext.extendedDescriptorsTexts.GetTail();
+ description += NowNext.extendedDescriptorsText;
}
- m_wndInfoBar.SetLine(ResStr(IDS_INFOBAR_DESCRIPTION), description);
+ m_wndInfoBar.SetLine(StrRes(IDS_INFOBAR_DESCRIPTION), description);
- for (int i = 0; i < NowNext.extendedDescriptorsItemsDesc.GetCount(); i++) {
- m_wndInfoBar.SetLine(NowNext.extendedDescriptorsItemsDesc.ElementAt(i), NowNext.extendedDescriptorsItemsContent.ElementAt(i));
+ for (const auto& item : NowNext.extendedDescriptorsItems) {
+ m_wndInfoBar.SetLine(item.first, item.second);
}
- if (fShowInfoBar) {
- s.nCS |= CS_INFOBAR;
- UpdateControlState(UPDATE_CONTROLS_VISIBILITY);
+ if (infoData.bShowInfoBar && !m_controls.ControlChecked(CMainFrameControls::Toolbar::INFO)) {
+ m_controls.ToggleControl(CMainFrameControls::Toolbar::INFO);
}
}
RecalcLayout();
- if (fShowOSD) {
+ if (infoData.bShowOSD) {
m_OSD.DisplayMessage(OSD_TOPLEFT, sChannelInfo, 3500);
}
@@ -14727,6 +15017,10 @@ void CMainFrame::ShowCurrentChannelInfo(bool fShowOSD /*= true*/, bool fShowInfo
} else {
ASSERT(FALSE);
}
+
+ m_pDVBState->bInfoActive = false;
+
+ return 0;
}
// ==== Added by CASIMIR666
@@ -14767,63 +15061,63 @@ void CMainFrame::SetPlayState(MPC_PLAYSTATE iState)
bool CMainFrame::CreateFullScreenWindow()
{
- HMONITOR hMonitor;
- MONITORINFOEX MonitorInfo;
- CRect MonitorRect;
+ const CAppSettings& s = AfxGetAppSettings();
+ CMonitor monitor;
if (m_pFullscreenWnd->IsWindow()) {
m_pFullscreenWnd->DestroyWindow();
}
- ZeroMemory(&MonitorInfo, sizeof(MonitorInfo));
- MonitorInfo.cbSize = sizeof(MonitorInfo);
-
- CMonitors monitors;
- CString str;
- CMonitor monitor;
- const CAppSettings& s = AfxGetAppSettings();
- hMonitor = nullptr;
-
- if (!s.iMonitor) {
- if (s.strFullScreenMonitor == _T("Current")) {
- hMonitor = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
- } else {
- for (int i = 0; i < monitors.GetCount(); i++) {
- monitor = monitors.GetMonitor(i);
+ if (s.iMonitor == 0 && s.strFullScreenMonitor != _T("Current")) {
+ CMonitors monitors;
+ for (int i = 0; i < monitors.GetCount(); i++) {
+ monitor = monitors.GetMonitor(i);
+ if (monitor.IsMonitor()) {
+ CString str;
monitor.GetName(str);
-
- if ((monitor.IsMonitor()) && (s.strFullScreenMonitor == str)) {
- hMonitor = monitor;
+ if (s.strFullScreenMonitor == str) {
break;
}
- }
- if (!hMonitor) {
- hMonitor = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
+ monitor.Detach();
}
}
- } else {
- hMonitor = MonitorFromWindow(m_hWnd, 0);
}
- if (GetMonitorInfo(hMonitor, &MonitorInfo)) {
- MonitorRect = CRect(MonitorInfo.rcMonitor);
- // Window creation
- DWORD dwStyle = WS_POPUP | WS_VISIBLE;
- m_pFullscreenWnd->CreateEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, _T(""), ResStr(IDS_MAINFRM_136), dwStyle, MonitorRect.left, MonitorRect.top, MonitorRect.Width(), MonitorRect.Height(), nullptr, nullptr, nullptr);
- //SetWindowLongPtr(m_pFullscreenWnd->m_hWnd, GWL_EXSTYLE, WS_EX_TOPMOST); // TODO : still freezing sometimes...
- /*
- CRect r;
- GetWindowRect(r);
-
- int x = MonitorRect.left + (MonitorRect.Width()/2)-(r.Width()/2);
- int y = MonitorRect.top + (MonitorRect.Height()/2)-(r.Height()/2);
- int w = r.Width();
- int h = r.Height();
- MoveWindow(x, y, w, h);
- */
+ if (!monitor.IsMonitor()) {
+ monitor = CMonitors::GetNearestMonitor(this);
}
- return m_pFullscreenWnd->IsWindow();
+ CRect monitorRect;
+ monitor.GetMonitorRect(monitorRect);
+
+ return !!m_pFullscreenWnd->CreateEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, _T(""), ResStr(IDS_MAINFRM_136),
+ WS_POPUP | WS_VISIBLE, monitorRect, nullptr, 0);
+}
+
+bool CMainFrame::IsFrameLessWindow() const
+{
+ return (m_fFullScreen || AfxGetAppSettings().eCaptionMenuMode == MODE_BORDERLESS);
+}
+
+bool CMainFrame::IsCaptionHidden() const
+{
+ // If no caption, there is no menu bar. But if is no menu bar, then the caption can be.
+ return (!m_fFullScreen && AfxGetAppSettings().eCaptionMenuMode > MODE_HIDEMENU); //!=MODE_SHOWCAPTIONMENU && !=MODE_HIDEMENU
+}
+
+bool CMainFrame::IsMenuHidden() const
+{
+ return (!m_fFullScreen && AfxGetAppSettings().eCaptionMenuMode != MODE_SHOWCAPTIONMENU);
+}
+
+bool CMainFrame::IsPlaylistEmpty() const
+{
+ return (m_wndPlaylistBar.GetCount() == 0);
+}
+
+bool CMainFrame::IsInteractiveVideo() const
+{
+ return (AfxGetAppSettings().fIntRealMedia && m_fRealMediaGraph || m_fShockwaveGraph);
}
bool CMainFrame::IsD3DFullScreenMode() const
@@ -14831,6 +15125,11 @@ bool CMainFrame::IsD3DFullScreenMode() const
return m_pFullscreenWnd && m_pFullscreenWnd->IsWindow();
};
+bool CMainFrame::IsSubresyncBarVisible() const
+{
+ return !!m_wndSubresyncBar.IsWindowVisible();
+}
+
void CMainFrame::SetupEVRColorControl()
{
if (m_pMFVP) {
@@ -14890,19 +15189,19 @@ void CMainFrame::SetColorControl(DWORD flags, int& brightness, int& contrast, in
COLORPROPERTY_RANGE* cr;
if (flags & ProcAmp_Brightness) {
cr = pApp->GetColorControl(ProcAmp_Brightness);
- brightness = min(max(brightness, cr->MinValue), cr->MaxValue);
+ brightness = std::min(std::max(brightness, cr->MinValue), cr->MaxValue);
}
if (flags & ProcAmp_Contrast) {
cr = pApp->GetColorControl(ProcAmp_Contrast);
- contrast = min(max(contrast, cr->MinValue), cr->MaxValue);
+ contrast = std::min(std::max(contrast, cr->MinValue), cr->MaxValue);
}
if (flags & ProcAmp_Hue) {
cr = pApp->GetColorControl(ProcAmp_Hue);
- hue = min(max(hue, cr->MinValue), cr->MaxValue);
+ hue = std::min(std::max(hue, cr->MinValue), cr->MaxValue);
}
if (flags & ProcAmp_Saturation) {
cr = pApp->GetColorControl(ProcAmp_Saturation);
- saturation = min(max(saturation, cr->MinValue), cr->MaxValue);
+ saturation = std::min(std::max(saturation, cr->MinValue), cr->MaxValue);
}
if (m_pVMRMC) {
@@ -14990,7 +15289,7 @@ afx_msg void CMainFrame::OnSubtitleDelay(UINT nID)
{
if (m_pCAP) {
if (m_pSubStreams.IsEmpty()) {
- SendStatusMessage(ResStr(IDS_SUBTITLES_ERROR), 3000);
+ SendStatusMessage(StrRes(IDS_SUBTITLES_ERROR), 3000);
return;
}
@@ -15164,9 +15463,9 @@ void CMainFrame::SendNowPlayingToApi()
CString strDur;
if (GetPlaybackMode() == PM_FILE) {
- m_wndInfoBar.GetLine(ResStr(IDS_INFOBAR_TITLE), title);
- m_wndInfoBar.GetLine(ResStr(IDS_INFOBAR_AUTHOR), author);
- m_wndInfoBar.GetLine(ResStr(IDS_INFOBAR_DESCRIPTION), description);
+ m_wndInfoBar.GetLine(StrRes(IDS_INFOBAR_TITLE), title);
+ m_wndInfoBar.GetLine(StrRes(IDS_INFOBAR_AUTHOR), author);
+ m_wndInfoBar.GetLine(StrRes(IDS_INFOBAR_DESCRIPTION), description);
m_wndPlaylistBar.GetCur(pli);
if (!pli.m_fns.IsEmpty()) {
@@ -15205,7 +15504,7 @@ void CMainFrame::SendNowPlayingToApi()
// get current location (title number & chapter)
if (SUCCEEDED(m_pDVDI->GetCurrentLocation(&Location))) {
// get number of chapters in current title
- m_pDVDI->GetNumberOfChapters(Location.TitleNum, &ulNumOfChapters);
+ VERIFY(SUCCEEDED(m_pDVDI->GetNumberOfChapters(Location.TitleNum, &ulNumOfChapters)));
}
// get total time of title
@@ -15576,7 +15875,7 @@ void CMainFrame::OnFileOpendirectory()
}
const CAppSettings& s = AfxGetAppSettings();
- CString strTitle = ResStr(IDS_MAINFRM_DIR_TITLE);
+ CString strTitle(StrRes(IDS_MAINFRM_DIR_TITLE));
CString path;
if (SysVersion::IsVistaOrLater()) {
@@ -15631,14 +15930,22 @@ void CMainFrame::OnFileOpendirectory()
path = _path;
}
+ // If we got a link file that points to a directory, follow the link
+ if (PathUtils::IsLinkFile(path)) {
+ CString resolvedPath = PathUtils::ResolveLinkFile(path);
+ if (PathUtils::IsDir(resolvedPath)) {
+ path = resolvedPath;
+ }
+ }
+
if (path[path.GetLength() - 1] != '\\') {
- path += '\\';
+ path += _T('\\');
}
CAtlList<CString> sl;
sl.AddTail(path);
if (COpenDirHelper::m_incl_subdir) {
- COpenDirHelper::RecurseAddDir(path, &sl);
+ PathUtils::RecurseAddDir(path, sl);
}
m_wndPlaylistBar.Open(sl, true);
@@ -15647,75 +15954,83 @@ void CMainFrame::OnFileOpendirectory()
HRESULT CMainFrame::CreateThumbnailToolbar()
{
- if (!AfxGetAppSettings().fUseWin7TaskBar || !SysVersion::Is7OrLater()) {
+ if (!AfxGetAppSettings().bUseEnhancedTaskBar || !SysVersion::Is7OrLater()) {
return E_FAIL;
}
- if (m_pTaskbarList) {
- m_pTaskbarList->Release();
- }
- HRESULT hr = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pTaskbarList));
- if (SUCCEEDED(hr)) {
+ if (m_pTaskbarList || SUCCEEDED(m_pTaskbarList.CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER))) {
+ bool bRTLLayout = false; // Assume left-to-right layout by default
+ // Try to locate the window used to display the task bar
+ if (CWnd* pTaskBarWnd = FindWindow(_T("TaskListThumbnailWnd"), nullptr)) {
+ bRTLLayout = !!(pTaskBarWnd->GetExStyle() & WS_EX_LAYOUTRTL);
+ }
+
CMPCPngImage image;
- if (!image.Load(MAKEINTRESOURCE(IDF_WIN7_TOOLBAR))) {
- m_pTaskbarList->Release();
- image.CleanUp();
+ if (!image.Load(IDF_WIN7_TOOLBAR)) {
return E_FAIL;
}
- BITMAP bi;
- image.GetBitmap(&bi);
- int nI = bi.bmWidth / bi.bmHeight;
- HIMAGELIST hImageList = ImageList_Create(bi.bmHeight, bi.bmHeight, ILC_COLOR32, nI, 0);
-
- ImageList_Add(hImageList, (HBITMAP)image, 0);
- hr = m_pTaskbarList->ThumbBarSetImageList(m_hWnd, hImageList);
-
- if (SUCCEEDED(hr)) {
+ CSize size = image.GetSize();
+
+ if (bRTLLayout) { // We don't want the buttons to be mirrored so we pre-mirror them
+ // Create memory DCs for the source and destination bitmaps
+ CDC sourceDC, destDC;
+ sourceDC.CreateCompatibleDC(nullptr);
+ destDC.CreateCompatibleDC(nullptr);
+ // Swap the source bitmap with an empty one
+ CBitmap sourceImg;
+ sourceImg.Attach(image.Detach());
+ // Create a temporary DC
+ CClientDC clientDC(nullptr);
+ // Create the destination bitmap
+ image.CreateCompatibleBitmap(&clientDC, size.cx, size.cy);
+ // Select the bitmaps into the DCs
+ HGDIOBJ oldSourceDCObj = sourceDC.SelectObject(sourceImg);
+ HGDIOBJ oldDestDCObj = destDC.SelectObject(image);
+ // Actually flip the bitmap
+ destDC.StretchBlt(0, 0, size.cx, size.cy,
+ &sourceDC, size.cx, 0, -size.cx, size.cy,
+ SRCCOPY);
+ // Reselect the old objects back into their DCs
+ sourceDC.SelectObject(oldSourceDCObj);
+ destDC.SelectObject(oldDestDCObj);
+ }
+
+ CImageList imageList;
+ imageList.Create(size.cy, size.cy, ILC_COLOR32, size.cx / size.cy, 0);
+ imageList.Add(&image, nullptr);
+
+ if (SUCCEEDED(m_pTaskbarList->ThumbBarSetImageList(m_hWnd, imageList.GetSafeHandle()))) {
THUMBBUTTON buttons[5] = {};
+ for (size_t i = 0; i < _countof(buttons); i++) {
+ buttons[i].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
+ buttons[i].dwFlags = THBF_DISABLED;
+ buttons[i].iBitmap = 0; // Will be set later
+ }
+
// PREVIOUS
- buttons[0].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[0].dwFlags = THBF_DISABLED;
buttons[0].iId = IDTB_BUTTON3;
- buttons[0].iBitmap = 0;
- StringCchCopy(buttons[0].szTip, _countof(buttons[0].szTip), ResStr(IDS_AG_PREVIOUS));
-
// STOP
- buttons[1].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[1].dwFlags = THBF_DISABLED;
buttons[1].iId = IDTB_BUTTON1;
- buttons[1].iBitmap = 1;
- StringCchCopy(buttons[1].szTip, _countof(buttons[1].szTip), ResStr(IDS_AG_STOP));
-
// PLAY/PAUSE
- buttons[2].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[2].dwFlags = THBF_DISABLED;
buttons[2].iId = IDTB_BUTTON2;
- buttons[2].iBitmap = 3;
- StringCchCopy(buttons[2].szTip, _countof(buttons[2].szTip), ResStr(IDS_AG_PLAYPAUSE));
-
// NEXT
- buttons[3].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[3].dwFlags = THBF_DISABLED;
buttons[3].iId = IDTB_BUTTON4;
- buttons[3].iBitmap = 4;
- StringCchCopy(buttons[3].szTip, _countof(buttons[3].szTip), ResStr(IDS_AG_NEXT));
-
// FULLSCREEN
- buttons[4].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[4].dwFlags = THBF_DISABLED;
buttons[4].iId = IDTB_BUTTON5;
- buttons[4].iBitmap = 5;
- StringCchCopy(buttons[4].szTip, _countof(buttons[4].szTip), ResStr(IDS_AG_FULLSCREEN));
- hr = m_pTaskbarList->ThumbBarAddButtons(m_hWnd, ARRAYSIZE(buttons), buttons);
+ if (bRTLLayout) { // We don't want the buttons to be mirrored so we pre-mirror them
+ std::reverse(buttons, buttons + _countof(buttons));
+ }
+
+ if (SUCCEEDED(m_pTaskbarList->ThumbBarAddButtons(m_hWnd, _countof(buttons), buttons))) {
+ return UpdateThumbarButton();
+ }
}
- ImageList_Destroy(hImageList);
- image.CleanUp();
}
- return hr;
+ return E_FAIL;
}
HRESULT CMainFrame::UpdateThumbarButton()
@@ -15740,125 +16055,109 @@ HRESULT CMainFrame::UpdateThumbarButton(MPC_PLAYSTATE iPlayState)
return E_FAIL;
}
+ THUMBBUTTON buttons[5] = {};
+
+ for (size_t i = 0; i < _countof(buttons); i++) {
+ buttons[i].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
+ }
+
+ buttons[0].iId = IDTB_BUTTON3;
+ buttons[1].iId = IDTB_BUTTON1;
+ buttons[2].iId = IDTB_BUTTON2;
+ buttons[3].iId = IDTB_BUTTON4;
+ buttons[4].iId = IDTB_BUTTON5;
+
const CAppSettings& s = AfxGetAppSettings();
- if (!s.fUseWin7TaskBar) {
+ if (!s.bUseEnhancedTaskBar) {
m_pTaskbarList->SetOverlayIcon(m_hWnd, nullptr, L"");
m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NOPROGRESS);
- THUMBBUTTON buttons[5] = {};
-
- buttons[0].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[0].dwFlags = THBF_HIDDEN;
- buttons[0].iId = IDTB_BUTTON3;
+ for (size_t i = 0; i < _countof(buttons); i++) {
+ buttons[i].dwFlags = THBF_HIDDEN;
+ }
+ } else {
+ buttons[0].iBitmap = 0;
+ StringCchCopy(buttons[0].szTip, _countof(buttons[0].szTip), ResStr(IDS_AG_PREVIOUS));
- buttons[1].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[1].dwFlags = THBF_HIDDEN;
- buttons[1].iId = IDTB_BUTTON1;
+ buttons[1].iBitmap = 1;
+ StringCchCopy(buttons[1].szTip, _countof(buttons[1].szTip), ResStr(IDS_AG_STOP));
- buttons[2].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[2].dwFlags = THBF_HIDDEN;
- buttons[2].iId = IDTB_BUTTON2;
+ buttons[2].iBitmap = 3;
+ StringCchCopy(buttons[2].szTip, _countof(buttons[2].szTip), ResStr(IDS_AG_PLAYPAUSE));
- buttons[3].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[3].dwFlags = THBF_HIDDEN;
- buttons[3].iId = IDTB_BUTTON4;
+ buttons[3].iBitmap = 4;
+ StringCchCopy(buttons[3].szTip, _countof(buttons[3].szTip), ResStr(IDS_AG_NEXT));
- buttons[4].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[4].dwFlags = THBF_HIDDEN;
- buttons[4].iId = IDTB_BUTTON5;
+ buttons[4].iBitmap = 5;
+ StringCchCopy(buttons[4].szTip, _countof(buttons[4].szTip), ResStr(IDS_AG_FULLSCREEN));
- HRESULT hr = m_pTaskbarList->ThumbBarUpdateButtons(m_hWnd, ARRAYSIZE(buttons), buttons);
- return hr;
- }
-
- THUMBBUTTON buttons[5] = {};
+ if (GetLoadState() == MLS::LOADED) {
+ HICON hIcon = nullptr;
- buttons[0].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[0].dwFlags = (!s.fUseSearchInFolder && m_wndPlaylistBar.GetCount() <= 1 && (m_pCB && m_pCB->ChapGetCount() <= 1)) ? THBF_DISABLED : THBF_ENABLED;
- buttons[0].iId = IDTB_BUTTON3;
- buttons[0].iBitmap = 0;
- StringCchCopy(buttons[0].szTip, _countof(buttons[0].szTip), ResStr(IDS_AG_PREVIOUS));
+ buttons[0].dwFlags = (!s.fUseSearchInFolder && m_wndPlaylistBar.GetCount() <= 1 && (m_pCB && m_pCB->ChapGetCount() <= 1)) ? THBF_DISABLED : THBF_ENABLED;
+ buttons[3].dwFlags = (!s.fUseSearchInFolder && m_wndPlaylistBar.GetCount() <= 1 && (m_pCB && m_pCB->ChapGetCount() <= 1)) ? THBF_DISABLED : THBF_ENABLED;
+ buttons[4].dwFlags = THBF_ENABLED;
- buttons[1].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[1].iId = IDTB_BUTTON1;
- buttons[1].iBitmap = 1;
- StringCchCopy(buttons[1].szTip, _countof(buttons[1].szTip), ResStr(IDS_AG_STOP));
+ if (iPlayState == PS_PLAY) {
+ buttons[1].dwFlags = THBF_ENABLED;
+ buttons[2].dwFlags = THBF_ENABLED;
+ buttons[2].iBitmap = 2;
- buttons[2].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[2].iId = IDTB_BUTTON2;
- buttons[2].iBitmap = 3;
- StringCchCopy(buttons[2].szTip, _countof(buttons[2].szTip), ResStr(IDS_AG_PLAYPAUSE));
+ hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_TB_PLAY), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
+ m_pTaskbarList->SetProgressState(m_hWnd, m_wndSeekBar.HasDuration() ? TBPF_NORMAL : TBPF_NOPROGRESS);
+ } else if (iPlayState == PS_STOP) {
+ buttons[1].dwFlags = THBF_DISABLED;
+ buttons[2].dwFlags = THBF_ENABLED;
+ buttons[2].iBitmap = 3;
- buttons[3].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[3].dwFlags = (!s.fUseSearchInFolder && m_wndPlaylistBar.GetCount() <= 1 && (m_pCB && m_pCB->ChapGetCount() <= 1)) ? THBF_DISABLED : THBF_ENABLED;
- buttons[3].iId = IDTB_BUTTON4;
- buttons[3].iBitmap = 4;
- StringCchCopy(buttons[3].szTip, _countof(buttons[3].szTip), ResStr(IDS_AG_NEXT));
+ hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_TB_STOP), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
+ m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NOPROGRESS);
+ } else if (iPlayState == PS_PAUSE) {
+ buttons[1].dwFlags = THBF_ENABLED;
+ buttons[2].dwFlags = THBF_ENABLED;
+ buttons[2].iBitmap = 3;
- buttons[4].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
- buttons[4].dwFlags = THBF_ENABLED;
- buttons[4].iId = IDTB_BUTTON5;
- buttons[4].iBitmap = 5;
- StringCchCopy(buttons[4].szTip, _countof(buttons[4].szTip), ResStr(IDS_AG_FULLSCREEN));
+ hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_TB_PAUSE), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
+ m_pTaskbarList->SetProgressState(m_hWnd, m_wndSeekBar.HasDuration() ? TBPF_PAUSED : TBPF_NOPROGRESS);
+ }
- if (GetLoadState() == MLS::LOADED) {
- HICON hIcon = nullptr;
- if (iPlayState == PS_PLAY) {
- buttons[1].dwFlags = THBF_ENABLED;
- buttons[2].dwFlags = THBF_ENABLED;
- buttons[2].iBitmap = 2;
-
- hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_TB_PLAY), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
- m_pTaskbarList->SetProgressState(m_hWnd, m_wndSeekBar.HasDuration() ? TBPF_NORMAL : TBPF_NOPROGRESS);
- } else if (iPlayState == PS_STOP) {
- buttons[1].dwFlags = THBF_DISABLED;
- buttons[2].dwFlags = THBF_ENABLED;
- buttons[2].iBitmap = 3;
-
- hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_TB_STOP), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
- m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NOPROGRESS);
- } else if (iPlayState == PS_PAUSE) {
- buttons[1].dwFlags = THBF_ENABLED;
- buttons[2].dwFlags = THBF_ENABLED;
- buttons[2].iBitmap = 3;
+ if (GetPlaybackMode() == PM_DVD && m_iDVDDomain != DVD_DOMAIN_Title) {
+ buttons[0].dwFlags = THBF_DISABLED;
+ buttons[1].dwFlags = THBF_DISABLED;
+ buttons[2].dwFlags = THBF_DISABLED;
+ buttons[3].dwFlags = THBF_DISABLED;
+ }
- hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_TB_PAUSE), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
- m_pTaskbarList->SetProgressState(m_hWnd, m_wndSeekBar.HasDuration() ? TBPF_PAUSED : TBPF_NOPROGRESS);
- }
+ m_pTaskbarList->SetOverlayIcon(m_hWnd, hIcon, L"");
- if (m_fAudioOnly) {
- buttons[4].dwFlags = THBF_DISABLED;
- }
+ if (hIcon != nullptr) {
+ DestroyIcon(hIcon);
+ }
+ } else {
+ for (size_t i = 0; i < _countof(buttons); i++) {
+ buttons[i].dwFlags = THBF_DISABLED;
+ }
- if (GetPlaybackMode() == PM_DVD && m_iDVDDomain != DVD_DOMAIN_Title) {
- buttons[0].dwFlags = THBF_DISABLED;
- buttons[1].dwFlags = THBF_DISABLED;
- buttons[2].dwFlags = THBF_DISABLED;
- buttons[3].dwFlags = THBF_DISABLED;
+ m_pTaskbarList->SetOverlayIcon(m_hWnd, nullptr, L"");
+ m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NOPROGRESS);
}
- m_pTaskbarList->SetOverlayIcon(m_hWnd, hIcon, L"");
+ UpdateThumbnailClip();
+ }
- if (hIcon != nullptr) {
- DestroyIcon(hIcon);
+ // Try to locate the window used to display the task bar to check if it is RTLed
+ if (CWnd* pTaskBarWnd = FindWindow(_T("TaskListThumbnailWnd"), nullptr)) {
+ // We don't want the buttons to be mirrored so we pre-mirror them
+ if (pTaskBarWnd->GetExStyle() & WS_EX_LAYOUTRTL) {
+ for (UINT i = 0; i < _countof(buttons); i++) {
+ buttons[i].iBitmap = _countof(buttons) - buttons[i].iBitmap;
+ }
+ std::reverse(buttons, buttons + _countof(buttons));
}
- } else {
- buttons[0].dwFlags = THBF_DISABLED;
- buttons[1].dwFlags = THBF_DISABLED;
- buttons[2].dwFlags = THBF_DISABLED;
- buttons[3].dwFlags = THBF_DISABLED;
- buttons[4].dwFlags = THBF_DISABLED;
-
- m_pTaskbarList->SetOverlayIcon(m_hWnd, nullptr, L"");
- m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NOPROGRESS);
}
- HRESULT hr = m_pTaskbarList->ThumbBarUpdateButtons(m_hWnd, ARRAYSIZE(buttons), buttons);
-
- UpdateThumbnailClip();
-
- return hr;
+ return m_pTaskbarList->ThumbBarUpdateButtons(m_hWnd, _countof(buttons), buttons);
}
HRESULT CMainFrame::UpdateThumbnailClip()
@@ -15875,7 +16174,7 @@ HRESULT CMainFrame::UpdateThumbnailClip()
r.OffsetRect(0, GetSystemMetrics(SM_CYMENU));
}
- if (!s.fUseWin7TaskBar || (GetLoadState() != MLS::LOADED) || m_fFullScreen || IsD3DFullScreenMode() || r.Width() <= 0 || r.Height() <= 0) {
+ if (!s.bUseEnhancedTaskBar || (GetLoadState() != MLS::LOADED) || m_fFullScreen || IsD3DFullScreenMode() || r.Width() <= 0 || r.Height() <= 0) {
return m_pTaskbarList->SetThumbnailClip(m_hWnd, nullptr);
}
@@ -15884,11 +16183,6 @@ HRESULT CMainFrame::UpdateThumbnailClip()
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
- if (message == WM_LBUTTONDOWN || message == WM_LBUTTONUP) {
- ASSERT(m_pMVRS);
- return 42;
- }
-
if ((message == WM_COMMAND) && (THBN_CLICKED == HIWORD(wParam))) {
int const wmId = LOWORD(wParam);
switch (wmId) {
@@ -15919,7 +16213,25 @@ LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
return 0;
}
- return __super::WindowProc(message, wParam, lParam);
+ LRESULT ret = 0;
+ bool bCallOurProc = true;
+ if (m_pMVRSR) {
+ // call madVR window proc directly when the interface is available
+ switch (message) {
+ case WM_MOUSEMOVE:
+ case WM_LBUTTONDOWN:
+ case WM_LBUTTONUP:
+ // CMouseWnd will call madVR window proc
+ break;
+ default:
+ bCallOurProc = !m_pMVRSR->ParentWindowProc(m_hWnd, message, &wParam, &lParam, &ret);
+ }
+ }
+ if (bCallOurProc) {
+ ret = __super::WindowProc(message, wParam, lParam);
+ }
+
+ return ret;
}
bool CMainFrame::IsAeroSnapped()
@@ -16000,8 +16312,8 @@ void CMainFrame::OnSessionChange(UINT nSessionState, UINT nId)
void CMainFrame::WTSRegisterSessionNotification()
{
- const WinapiFunc<BOOL(HWND, DWORD)>
- fnWtsRegisterSessionNotification = { "wtsapi32.dll", "WTSRegisterSessionNotification" };
+ const WinapiFunc<BOOL WINAPI(HWND, DWORD)>
+ fnWtsRegisterSessionNotification = { _T("wtsapi32.dll"), "WTSRegisterSessionNotification" };
if (fnWtsRegisterSessionNotification) {
fnWtsRegisterSessionNotification(m_hWnd, NOTIFY_FOR_THIS_SESSION);
@@ -16010,8 +16322,8 @@ void CMainFrame::WTSRegisterSessionNotification()
void CMainFrame::WTSUnRegisterSessionNotification()
{
- const WinapiFunc<BOOL(HWND)>
- fnWtsUnRegisterSessionNotification = { "wtsapi32.dll", "WTSUnRegisterSessionNotification" };
+ const WinapiFunc<BOOL WINAPI(HWND)>
+ fnWtsUnRegisterSessionNotification = { _T("wtsapi32.dll"), "WTSUnRegisterSessionNotification" };
if (fnWtsUnRegisterSessionNotification) {
fnWtsUnRegisterSessionNotification(m_hWnd);
@@ -16067,12 +16379,21 @@ void CMainFrame::UpdateControlState(UpdateControlTarget target)
path.RemoveFileSpec();
CString author;
- m_wndInfoBar.GetLine(ResStr(IDS_INFOBAR_AUTHOR), author);
+ m_wndInfoBar.GetLine(StrRes(IDS_INFOBAR_AUTHOR), author);
CString strPath = path;
- if (m_currentCoverPath != strPath || m_currentCoverAuthor != author) {
- m_wndView.LoadImg(FindCoverArt(strPath, author));
+
+ CComQIPtr<IFilterGraph> pFilterGraph = m_pGB;
+ std::vector<BYTE> internalCover;
+ if (CoverArt::FindEmbedded(pFilterGraph, internalCover)) {
+ m_wndView.LoadImg(internalCover);
+ m_currentCoverPath = m_wndPlaylistBar.GetCurFileName();
+ m_currentCoverAuthor = author;
+ } else if (m_currentCoverPath != strPath || m_currentCoverAuthor != author) {
+ m_wndView.LoadImg(CoverArt::FindExternal(strPath, author));
m_currentCoverPath = strPath;
m_currentCoverAuthor = author;
+ } else if (!m_wndView.IsCustomImgLoaded()) {
+ m_wndView.LoadImg();
}
} else {
m_currentCoverPath.Empty();
@@ -16134,6 +16455,9 @@ void CMainFrame::UpdateUILanguage()
// Reload the static bars
OpenSetupInfoBar();
+ if (GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
+ UpdateCurrentChannelInfo(false, false);
+ }
OpenSetupStatsBar();
// Reload the debug shaders dialog if need be
@@ -16329,33 +16653,29 @@ CString CMainFrame::GetFileName()
CString path(m_wndPlaylistBar.GetCurFileName());
if (m_pFSF) {
- LPOLESTR pFN;
+ CComHeapPtr<OLECHAR> pFN;
if (SUCCEEDED(m_pFSF->GetCurFile(&pFN, nullptr))) {
path = pFN;
- CoTaskMemFree(pFN);
}
}
- return StripPath(path);
+ return PathUtils::StripPathOrUrl(path);
}
CString CMainFrame::GetCaptureTitle()
{
- CAppSettings& s = AfxGetAppSettings();
CString title;
title.LoadString(IDS_CAPTURE_LIVE);
- if (s.iDefaultCaptureDevice == 0) {
+ if (GetPlaybackMode() == PM_ANALOG_CAPTURE) {
CString devName = GetFriendlyName(m_VidDispName);
if (!devName.IsEmpty()) {
title.AppendFormat(_T(" | %s"), devName);
}
} else {
- CDVBChannel* pChannel = s.FindChannelByPref(s.nDVBLastChannel);
- if (pChannel) {
- title.AppendFormat(_T(" | %s"), pChannel->GetName());
- CString eventName;
- m_wndInfoBar.GetLine(ResStr(IDS_INFOBAR_TITLE), eventName);
+ CString& eventName = m_pDVBState->NowNext.eventName;
+ if (m_pDVBState->bActive) {
+ title.AppendFormat(_T(" | %s"), m_pDVBState->sChannelName);
if (!eventName.IsEmpty()) {
title.AppendFormat(_T(" - %s"), eventName);
}
@@ -16402,13 +16722,12 @@ void CMainFrame::UpdateDXVAStatus()
}
}
GetRenderersData()->m_strDXVAInfo = DXVAInfo;
- return;
}
bool CMainFrame::GetDecoderType(CString& type) const
{
if (!m_fAudioOnly) {
- type = m_bUsingDXVA ? m_HWAccelType : ResStr(IDS_TOOLTIP_SOFTWARE_DECODING);
+ type = m_bUsingDXVA ? m_HWAccelType : StrRes(IDS_TOOLTIP_SOFTWARE_DECODING);
return true;
}
return false;
@@ -16453,7 +16772,7 @@ void CMainFrame::UpdateSubAspectRatioCompensation()
{
const CAppSettings& s = AfxGetAppSettings();
if (auto pRTS = dynamic_cast<CRenderedTextSubtitle*>((ISubStream*)m_pCurrentSubInput.pSubStream)) {
- CAutoLock cAutoLock(&m_csSubtitleManagementLock);
+ CAutoLock autoLockSubtitleManagement(&m_csSubtitleManagementLock);
bool bInvalidate = false;
double dPARCompensation = 1.0;
@@ -16461,9 +16780,9 @@ void CMainFrame::UpdateSubAspectRatioCompensation()
bool bKeepAspectRatio = s.fKeepAspectRatio;
CSize szAspectRatio = m_pCAP->GetVideoSize(true);
CSize szVideoFrame;
- if (CComQIPtr<IMadVRInfo> pMVRI = m_pCAP) {
+ if (m_pMVRI) {
// Use IMadVRInfo to get size. See http://bugs.madshi.net/view.php?id=180
- pMVRI->GetSize("originalVideoSize", &szVideoFrame);
+ m_pMVRI->GetSize("originalVideoSize", &szVideoFrame);
bKeepAspectRatio = true;
} else {
szVideoFrame = m_pCAP->GetVideoSize(false);
@@ -16477,7 +16796,7 @@ void CMainFrame::UpdateSubAspectRatioCompensation()
pRTS->m_ePARCompensationType = CSimpleTextSubtitle::EPARCompensationType::EPCTAccurateSize_ISR;
if (pRTS->m_dPARCompensation != dPARCompensation) {
- CAutoLock cAutoLock(&m_csSubLock);
+ CAutoLock autoLock(&m_csSubLock);
bInvalidate = true;
pRTS->m_dPARCompensation = dPARCompensation;
pRTS->Deinit();
@@ -16527,14 +16846,14 @@ REFTIME CMainFrame::GetAvgTimePerFrame() const
if (VATR.ulFrameRate == 50) {
ratio = 25.0 * refAvgTimePerFrame;
// Accept 25 or 50 fps
- if (!NEARLY_EQ(ratio, 1.0, 1e-2) && !NEARLY_EQ(ratio, 2.0, 1e-2)) {
+ if (!IsNearlyEqual(ratio, 1.0, 1e-2) && !IsNearlyEqual(ratio, 2.0, 1e-2)) {
refAvgTimePerFrame = 1.0 / 25.0;
}
} else {
ratio = 29.97 * refAvgTimePerFrame;
// Accept 29,97, 59.94, 23.976 or 47.952 fps
- if (!NEARLY_EQ(ratio, 1.0, 1e-2) && !NEARLY_EQ(ratio, 2.0, 1e-2)
- && !NEARLY_EQ(ratio, 1.25, 1e-2) && !NEARLY_EQ(ratio, 2.5, 1e-2)) {
+ if (!IsNearlyEqual(ratio, 1.0, 1e-2) && !IsNearlyEqual(ratio, 2.0, 1e-2)
+ && !IsNearlyEqual(ratio, 1.25, 1e-2) && !IsNearlyEqual(ratio, 2.5, 1e-2)) {
refAvgTimePerFrame = 1.0 / 29.97;
}
}
@@ -16542,3 +16861,120 @@ REFTIME CMainFrame::GetAvgTimePerFrame() const
return refAvgTimePerFrame;
}
+
+void CMainFrame::OnVideoSizeChanged(const bool bWasAudioOnly /*= false*/)
+{
+ const auto& s = AfxGetAppSettings();
+ if (GetLoadState() == MLS::LOADED &&
+ ((s.fRememberZoomLevel && (s.fLimitWindowProportions || m_bAllowWindowZoom)) || m_fAudioOnly || bWasAudioOnly) &&
+ !(m_fFullScreen || IsD3DFullScreenMode() || IsZoomed() || IsIconic() || IsAeroSnapped())) {
+ CSize videoSize;
+ if (!m_fAudioOnly && !m_bAllowWindowZoom) {
+ videoSize = GetVideoSize();
+ }
+ if (videoSize.cx && videoSize.cy) {
+ ZoomVideoWindow(m_dLastVideoScaleFactor * std::sqrt((static_cast<double>(m_lastVideoSize.cx) * m_lastVideoSize.cy)
+ / (static_cast<double>(videoSize.cx) * videoSize.cy)));
+ } else {
+ ZoomVideoWindow();
+ }
+ }
+ MoveVideoWindow();
+}
+
+typedef struct {
+ SubtitlesInfo* pSubtitlesInfo;
+ BOOL bActivate;
+ std::string fileName;
+ std::string fileContents;
+} SubtitlesData;
+
+LRESULT CMainFrame::OnLoadSubtitles(WPARAM wParam, LPARAM lParam)
+{
+ SubtitlesData& data = *(SubtitlesData*)lParam;
+
+ CAutoPtr<CRenderedTextSubtitle> pRTS(DEBUG_NEW CRenderedTextSubtitle(&m_csSubLock));
+ if (pRTS && pRTS->Open(CString(data.pSubtitlesInfo->Provider()->Name().c_str()),
+ (BYTE*)(LPCSTR)data.fileContents.c_str(), (int)data.fileContents.length(), DEFAULT_CHARSET,
+ UTF8To16(data.fileName.c_str()), Subtitle::HearingImpairedType(data.pSubtitlesInfo->hearingImpaired),
+ ISOLang::ISO6391ToLcid(data.pSubtitlesInfo->languageCode.c_str())) && pRTS->GetStreamCount() > 0) {
+ m_wndSubtitlesDownloadDialog.DoDownloaded(*data.pSubtitlesInfo);
+
+ SubtitleInput subElement = pRTS.Detach();
+ m_pSubStreams.AddTail(subElement);
+ if (data.bActivate) {
+ SetSubtitle(subElement.pSubStream);
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+LRESULT CMainFrame::OnGetSubtitles(WPARAM, LPARAM lParam)
+{
+ CheckPointer(lParam, FALSE);
+
+ int n = 0;
+ SubtitleInput* pSubInput = GetSubtitleInput(n, true);
+ CheckPointer(pSubInput, FALSE);
+
+ CLSID clsid;
+ if (FAILED(pSubInput->pSubStream->GetClassID(&clsid)) || clsid != __uuidof(CRenderedTextSubtitle)) {
+ return FALSE;
+ }
+
+ CRenderedTextSubtitle* pRTS = (CRenderedTextSubtitle*)(ISubStream*)pSubInput->pSubStream;
+ // Only for external text subtitles
+ if (pRTS->m_path.IsEmpty()) {
+ return FALSE;
+ }
+
+ SubtitlesInfo* pSubtitlesInfo = reinterpret_cast<SubtitlesInfo*>(lParam);
+
+ pSubtitlesInfo->GetFileInfo();
+ pSubtitlesInfo->releaseNames.emplace_back(UTF16To8(pRTS->m_name));
+ if (pSubtitlesInfo->hearingImpaired == Subtitle::HI_UNKNOWN) {
+ pSubtitlesInfo->hearingImpaired = pRTS->m_eHearingImpaired;
+ }
+
+ if (!pSubtitlesInfo->languageCode.length() && pRTS->m_lcid && pRTS->m_lcid != LCID(-1)) {
+ CString str;
+ int len = GetLocaleInfo(pRTS->m_lcid, LOCALE_SISO639LANGNAME, str.GetBuffer(64), 64);
+ str.ReleaseBufferSetLength(std::max(len - 1, 0));
+ pSubtitlesInfo->languageCode = UTF16To8(str);
+ }
+
+ pSubtitlesInfo->frameRate = m_pCAP->GetFPS();
+ int delay = m_pCAP->GetSubtitleDelay();
+ if (pRTS->m_mode == FRAME) {
+ delay = std::lround(delay * pSubtitlesInfo->frameRate / 1000.0);
+ }
+
+ const CStringW fmt(L"%d\n%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\n%s\n\n");
+ CStringW content;
+ CAutoLock cAutoLock(&m_csSubLock);
+ for (int i = 0, j = int(pRTS->GetCount()), k = 0; i < j; i++) {
+ int t1 = (int)(RT2MS(pRTS->TranslateStart(i, pSubtitlesInfo->frameRate)) + delay);
+ if (t1 < 0) {
+ k++;
+ continue;
+ }
+
+ int t2 = (int)(RT2MS(pRTS->TranslateEnd(i, pSubtitlesInfo->frameRate)) + delay);
+
+ int hh1 = (t1 / 60 / 60 / 1000);
+ int mm1 = (t1 / 60 / 1000) % 60;
+ int ss1 = (t1 / 1000) % 60;
+ int ms1 = (t1) % 1000;
+ int hh2 = (t2 / 60 / 60 / 1000);
+ int mm2 = (t2 / 60 / 1000) % 60;
+ int ss2 = (t2 / 1000) % 60;
+ int ms2 = (t2) % 1000;
+
+ content.AppendFormat(fmt, i - k + 1, hh1, mm1, ss1, ms1, hh2, mm2, ss2, ms2, pRTS->GetStrW(i, false));
+ }
+
+ pSubtitlesInfo->fileContents = UTF16To8(content);
+ return TRUE;
+}
diff --git a/src/mpc-hc/MainFrm.h b/src/mpc-hc/MainFrm.h
index 56479892d..f9ddc8787 100644
--- a/src/mpc-hc/MainFrm.h
+++ b/src/mpc-hc/MainFrm.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,64 +21,53 @@
#pragma once
-#include <atlbase.h>
-
#include "ChildView.h"
+#include "DVBChannel.h"
#include "DebugShadersDlg.h"
-#include "PlayerSeekBar.h"
-#include "PlayerToolBar.h"
+#include "DropTarget.h"
+#include "EditListEditor.h"
+#include "IBufferInfo.h"
+#include "IKeyFrameInfo.h"
+#include "MainFrmControls.h"
+#include "MouseTouch.h"
+#include "MpcApi.h"
+#include "PlayerCaptureBar.h"
#include "PlayerInfoBar.h"
+#include "PlayerNavigationBar.h"
+#include "PlayerPlaylistBar.h"
+#include "PlayerSeekBar.h"
#include "PlayerStatusBar.h"
#include "PlayerSubresyncBar.h"
-#include "PlayerPlaylistBar.h"
-#include "PlayerCaptureBar.h"
-#include "PlayerNavigationBar.h"
-#include "EditListEditor.h"
-#include "PPageSheet.h"
-#include "PPageFileInfoSheet.h"
-#include "FileDropTarget.h"
-#include "KeyProvider.h"
-#include "GraphThread.h"
+#include "PlayerToolBar.h"
+#include "SubtitleDlDlg.h"
+#include "SubtitleUpDlg.h"
#include "TimerWrappers.h"
-#include "MainFrmControls.h"
-
-#include "../SubPic/ISubPic.h"
-
-#include "IGraphBuilder2.h"
-
-#include "RealMediaGraph.h"
-#ifndef _WIN64
-// TODO: add QuickTime support for x64 when available!
-#include "QuicktimeGraph.h"
-#endif /* _WIN64 */
-#include "ShockwaveGraph.h"
-
-#include "IChapterInfo.h"
-#include "IKeyFrameInfo.h"
-#include "IBufferInfo.h"
-
-#include "WebServer.h"
-#include <afxmt.h>
-#include <d3d9.h>
-#include <vmr9.h>
-#include <evr.h>
-#include <evr9.h>
-#include <Il21dec.h>
#include "VMROSD.h"
-#include "LcdSupport.h"
-#include "MpcApi.h"
-#include "../filters/renderer/SyncClock/SyncClock.h"
-#include "sizecbar/scbarg.h"
-#include "DSMPropertyBag.h"
-#include "SkypeMoodMsgHandler.h"
-
-#include <memory>
+#define AfxGetMainFrame() dynamic_cast<CMainFrame*>(AfxGetMainWnd())
+class CDebugShadersDlg;
class CFullscreenWnd;
+class SkypeMoodMsgHandler;
+struct DisplayMode;
+enum MpcCaptionState;
+
+interface IDSMChapterBag;
+interface IGraphBuilder2;
+interface IMFVideoDisplayControl;
+interface IMFVideoProcessor;
+interface IMadVRCommand;
+interface IMadVRInfo;
+interface IMadVRSettings;
+interface IMadVRSubclassReplacement;
+interface ISubClock;
+interface ISubPicAllocatorPresenter2;
+interface ISubPicAllocatorPresenter;
+interface ISubStream;
+interface ISyncClock;
+DECLARE_INTERFACE_IID(IAMLine21Decoder_2, "6E8D4A21-310C-11d0-B79A-00AA003767A7");
-enum class MLS
-{
+enum class MLS {
CLOSED,
LOADING,
LOADED,
@@ -94,10 +83,6 @@ enum {
PM_DIGITAL_CAPTURE
};
-interface __declspec(uuid("6E8D4A21-310C-11d0-B79A-00AA003767A7")) // IID_IAMLine21Decoder
-IAMLine21Decoder_2 :
-public IAMLine21Decoder {};
-
class OpenMediaData
{
public:
@@ -153,21 +138,20 @@ struct SubtitleInput {
: pSubStream(pSubStream), pSourceFilter(pSourceFilter) {};
};
-interface ISubClock;
-
-class CMainFrame : public CFrameWnd, public CDropTarget
+class CMainFrame : public CFrameWnd, public CDropClient
{
public:
- enum class Timer32HzSubscriber
- {
+
+ DpiHelper m_dpi;
+
+ enum class Timer32HzSubscriber {
TOOLBARS_HIDER,
CURSOR_HIDER,
CURSOR_HIDER_D3DFS,
};
OnDemandTimer<Timer32HzSubscriber> m_timer32Hz;
- enum class TimerOneTimeSubscriber
- {
+ enum class TimerOneTimeSubscriber {
TOOLBARS_DELAY_NOTLOADED,
CHILDVIEW_CURSOR_HACK,
DELAY_IDLE,
@@ -184,6 +168,8 @@ private:
EventClient m_eventc;
void EventCallback(MpcEvent ev);
+ CMainFrameMouseHook m_mouseHook;
+
enum {
TIMER_STREAMPOSPOLLER = 1,
TIMER_STREAMPOSPOLLER2,
@@ -206,10 +192,10 @@ private:
friend class CPPageFileInfoSheet;
friend class CPPageLogo;
- friend class CSubtitleDlDlg;
friend class CMouse;
friend class CPlayerSeekBar; // for accessing m_controls.ControlChecked()
friend class CChildView; // for accessing m_controls.DelayShowNotLoaded()
+ friend class SubtitlesProvider;
// TODO: wrap these graph objects into a class to make it look cleaner
@@ -222,6 +208,7 @@ private:
CComQIPtr<IMediaSeeking> m_pMS;
CComQIPtr<IVideoFrameStep> m_pFS;
CComQIPtr<IFileSourceFilter> m_pFSF;
+ CComQIPtr<IKeyFrameInfo> m_pKFI;
CComQIPtr<IQualProp, &IID_IQualProp> m_pQP;
CComQIPtr<IBufferInfo> m_pBI;
CComQIPtr<IAMOpenProgress> m_pAMOP;
@@ -234,6 +221,9 @@ private:
CComPtr<ISubPicAllocatorPresenter2> m_pCAP2;
CComPtr<IMadVRSettings> m_pMVRS;
+ CComPtr<IMadVRSubclassReplacement> m_pMVRSR;
+ CComPtr<IMadVRCommand> m_pMVRC;
+ CComPtr<IMadVRInfo> m_pMVRI;
CComQIPtr<IDvdControl2> m_pDVDC;
CComQIPtr<IDvdInfo2> m_pDVDI;
@@ -279,6 +269,7 @@ private:
void SetDefaultWindowRect(int iMonitor = 0);
void SetDefaultFullscreenState();
void RestoreDefaultWindowRect();
+ CRect GetInvisibleBorderSize() const;
CSize GetZoomWindowSize(double dScale);
CRect GetZoomWindowRect(const CSize& size);
void ZoomVideoWindow(double dScale = ZOOM_DEFAULT_LEVEL);
@@ -300,9 +291,10 @@ private:
void SetupShadersSubMenu();
void SetupRecentFilesSubMenu();
- IBaseFilter* FindSourceSelectableFilter();
void SetupNavStreamSelectSubMenu(CMenu& subMenu, UINT id, DWORD dwSelGroup);
void OnNavStreamSelectSubMenu(UINT id, DWORD dwSelGroup);
+ void OnStreamSelect(bool forward, DWORD dwSelGroup);
+ static CString GetStreamOSDString(CString name, LCID lcid, DWORD dwSelGroup);
CMenu m_mainPopupMenu, m_popupMenu;
CMenu m_openCDsMenu;
@@ -348,7 +340,7 @@ private:
DWORD m_dwLastRun;
- bool m_fBuffering;
+ bool m_bBuffering;
bool m_fLiveWM;
@@ -385,6 +377,11 @@ private:
MLS m_eMediaLoadState;
REFTIME GetAvgTimePerFrame() const;
+ void OnVideoSizeChanged(const bool bWasAudioOnly = false);
+
+ CDropTarget m_dropTarget;
+ void OnDropFiles(CAtlList<CString>& slFiles, DROPEFFECT dropEffect) override;
+ DROPEFFECT OnDropAccept(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) override;
public:
void StartWebServer(int nPort);
@@ -409,22 +406,13 @@ public:
CComPtr<IBaseFilter> m_pRefClock; // Adjustable reference clock. GothSync
CComPtr<ISyncClock> m_pSyncClock;
- bool IsFrameLessWindow() const {
- return (m_fFullScreen || AfxGetAppSettings().eCaptionMenuMode == MODE_BORDERLESS);
- }
- bool IsCaptionHidden() const {//If no caption, there is no menu bar. But if is no menu bar, then the caption can be.
- return (!m_fFullScreen && AfxGetAppSettings().eCaptionMenuMode > MODE_HIDEMENU); //!=MODE_SHOWCAPTIONMENU && !=MODE_HIDEMENU
- }
- bool IsMenuHidden() const {
- return (!m_fFullScreen && AfxGetAppSettings().eCaptionMenuMode != MODE_SHOWCAPTIONMENU);
- }
- bool IsPlaylistEmpty() const {
- return (m_wndPlaylistBar.GetCount() == 0);
- }
- bool IsInteractiveVideo() const {
- return (AfxGetAppSettings().fIntRealMedia && m_fRealMediaGraph || m_fShockwaveGraph);
- }
+ bool IsFrameLessWindow() const;
+ bool IsCaptionHidden() const;
+ bool IsMenuHidden() const;
+ bool IsPlaylistEmpty() const;
+ bool IsInteractiveVideo() const;
bool IsD3DFullScreenMode() const;
+ bool IsSubresyncBarVisible() const;
CControlBar* m_pLastBar;
@@ -436,7 +424,6 @@ protected:
bool m_fAudioOnly;
CString m_LastOpenBDPath;
CAutoPtr<OpenMediaData> m_lastOMD;
- HMONITOR m_LastWindow_HM;
DVD_DOMAIN m_iDVDDomain;
DWORD m_iDVDTitle;
@@ -471,7 +458,7 @@ public:
static bool GetDispMode(CString displayName, int i, DisplayMode& dm);
protected:
- void SetDispMode(CString displayName, const DisplayMode& dm);
+ void SetDispMode(CString displayName, const DisplayMode& dm, int msAudioDelay);
void AutoChangeMonitorMode();
void GraphEventComplete();
@@ -488,6 +475,19 @@ protected:
bool m_fOpeningAborted;
bool m_bWasSnapped;
+protected:
+ friend class CSubtitleDlDlg;
+ CSubtitleDlDlg m_wndSubtitlesDownloadDialog;
+ friend class CSubtitleUpDlg;
+ CSubtitleUpDlg m_wndSubtitlesUploadDialog;
+ friend class CPPageSubMisc;
+
+ friend class SubtitlesProviders;
+ std::unique_ptr<SubtitlesProviders> m_pSubtitlesProviders;
+ friend struct SubtitlesInfo;
+ friend class SubtitlesTask;
+ friend class SubtitlesThread;
+
public:
void OpenCurPlaylistItem(REFERENCE_TIME rtStart = 0);
void OpenMedia(CAutoPtr<OpenMediaData> pOMD);
@@ -556,7 +556,6 @@ public:
bool DoCapture(), StartCapture(), StopCapture();
void DoAfterPlaybackEvent();
- void ParseDirs(CAtlList<CString>& sl);
bool SearchInDir(bool bDirForward, bool bLoop = false);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
@@ -565,7 +564,49 @@ public:
virtual void RecalcLayout(BOOL bNotify = TRUE);
// DVB capture
- void ShowCurrentChannelInfo(bool fShowOSD = true, bool fShowInfoBar = false);
+ void UpdateCurrentChannelInfo(bool bShowOSD = true, bool bShowInfoBar = false);
+ LRESULT OnCurrentChannelInfoUpdated(WPARAM wParam, LPARAM lParam);
+
+ struct DVBState {
+ struct EITData {
+ HRESULT hr = E_FAIL;
+ EventDescriptor NowNext;
+ bool bShowOSD = true;
+ bool bShowInfoBar = false;
+ };
+
+ CString sChannelName; // Current channel name
+ CDVBChannel* pChannel = nullptr; // Pointer to current channel object
+ EventDescriptor NowNext; // Current channel EIT
+ bool bActive = false; // True when channel is active
+ bool bSetChannelActive = false; // True when channel change is in progress
+ bool bInfoActive = false; // True when EIT data update is in progress
+ bool bAbortInfo = true; // True when aborting current EIT update
+ std::future<DVBState::EITData> infoData;
+
+ void Reset() {
+ sChannelName.Empty();
+ pChannel = nullptr;
+ NowNext = EventDescriptor();
+ bActive = false;
+ bSetChannelActive = false;
+ bInfoActive = false;
+ bAbortInfo = true;
+ }
+
+ void Join() {
+ if (infoData.valid()) {
+ bAbortInfo = true;
+ infoData.wait();
+ }
+ }
+
+ ~DVBState() {
+ bAbortInfo = true;
+ }
+ };
+
+ std::unique_ptr<DVBState> m_pDVBState = nullptr;
// Implementation
public:
@@ -596,15 +637,6 @@ protected: // control bar embedded members
std::unique_ptr<CDebugShadersDlg> m_pDebugShaders;
- CFileDropTarget m_fileDropTarget;
- // TODO
- DROPEFFECT OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
- DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
- BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
- DROPEFFECT OnDropEx(COleDataObject* pDataObject, DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point);
- void OnDragLeave();
- DROPEFFECT OnDragScroll(DWORD dwKeyState, CPoint point);
-
LPCTSTR GetRecentFile() const;
friend class CPPagePlayback; // TODO
@@ -636,6 +668,8 @@ public:
afx_msg void OnDisplayChange();
afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos);
+ LRESULT OnDpiChanged(WPARAM wParam, LPARAM lParam);
+
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnActivateApp(BOOL bActive, DWORD dwThreadID);
afx_msg LRESULT OnAppCommand(WPARAM wParam, LPARAM lParam);
@@ -679,13 +713,13 @@ public:
afx_msg void OnStreamAudio(UINT nID);
afx_msg void OnStreamSub(UINT nID);
afx_msg void OnStreamSubOnOff();
- afx_msg void OnOgmAudio(UINT nID);
- afx_msg void OnOgmSub(UINT nID);
afx_msg void OnDvdAngle(UINT nID);
afx_msg void OnDvdAudio(UINT nID);
afx_msg void OnDvdSub(UINT nID);
afx_msg void OnDvdSubOnOff();
+ afx_msg LRESULT OnLoadSubtitles(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnGetSubtitles(WPARAM, LPARAM lParam);
// menu item handlers
@@ -698,7 +732,6 @@ public:
afx_msg void OnFileOpenOpticalDisk(UINT nID);
afx_msg void OnFileReopen();
afx_msg void OnFileRecycle();
- afx_msg void OnDropFiles(HDROP hDropInfo); // no menu item
afx_msg void OnFileSaveAs();
afx_msg void OnUpdateFileSaveAs(CCmdUI* pCmdUI);
afx_msg void OnFileSaveImage();
@@ -706,16 +739,14 @@ public:
afx_msg void OnUpdateFileSaveImage(CCmdUI* pCmdUI);
afx_msg void OnFileSaveThumbnails();
afx_msg void OnUpdateFileSaveThumbnails(CCmdUI* pCmdUI);
- afx_msg void OnFileLoadsubtitle();
- afx_msg void OnUpdateFileLoadsubtitle(CCmdUI* pCmdUI);
- afx_msg void OnFileSavesubtitle();
- afx_msg void OnUpdateFileSavesubtitle(CCmdUI* pCmdUI);
- afx_msg void OnFileISDBSearch();
- afx_msg void OnUpdateFileISDBSearch(CCmdUI* pCmdUI);
- afx_msg void OnFileISDBUpload();
- afx_msg void OnUpdateFileISDBUpload(CCmdUI* pCmdUI);
- afx_msg void OnFileISDBDownload();
- afx_msg void OnUpdateFileISDBDownload(CCmdUI* pCmdUI);
+ afx_msg void OnFileSubtitlesLoad();
+ afx_msg void OnUpdateFileSubtitlesLoad(CCmdUI* pCmdUI);
+ afx_msg void OnFileSubtitlesSave();
+ afx_msg void OnUpdateFileSubtitlesSave(CCmdUI* pCmdUI);
+ afx_msg void OnFileSubtitlesUpload();
+ afx_msg void OnUpdateFileSubtitlesUpload(CCmdUI* pCmdUI);
+ afx_msg void OnFileSubtitlesDownload();
+ afx_msg void OnUpdateFileSubtitlesDownload(CCmdUI* pCmdUI);
afx_msg void OnFileProperties();
afx_msg void OnUpdateFileProperties(CCmdUI* pCmdUI);
afx_msg void OnFileCloseAndRestore();
@@ -764,8 +795,6 @@ public:
afx_msg void OnUpdateViewDefaultVideoFrame(CCmdUI* pCmdUI);
afx_msg void OnViewSwitchVideoFrame();
afx_msg void OnUpdateViewSwitchVideoFrame(CCmdUI* pCmdUI);
- afx_msg void OnViewKeepaspectratio();
- afx_msg void OnUpdateViewKeepaspectratio(CCmdUI* pCmdUI);
afx_msg void OnViewCompMonDeskARDiff();
afx_msg void OnUpdateViewCompMonDeskARDiff(CCmdUI* pCmdUI);
afx_msg void OnViewPanNScan(UINT nID);
@@ -782,9 +811,9 @@ public:
afx_msg void OnViewOptions();
afx_msg void OnUpdateViewTearingTest(CCmdUI* pCmdUI);
afx_msg void OnViewTearingTest();
- afx_msg void OnUpdateViewDisplayStats(CCmdUI* pCmdUI);
- afx_msg void OnViewResetStats();
- afx_msg void OnViewDisplayStatsSC();
+ afx_msg void OnUpdateViewDisplayRendererStats(CCmdUI* pCmdUI);
+ afx_msg void OnViewResetRendererStats();
+ afx_msg void OnViewDisplayRendererStats();
afx_msg void OnUpdateViewVSync(CCmdUI* pCmdUI);
afx_msg void OnUpdateViewVSyncOffset(CCmdUI* pCmdUI);
afx_msg void OnUpdateViewVSyncAccurate(CCmdUI* pCmdUI);
@@ -853,8 +882,10 @@ public:
afx_msg void OnViewEnableFrameTimeCorrection();
afx_msg void OnViewVSyncOffsetIncrease();
afx_msg void OnViewVSyncOffsetDecrease();
- afx_msg void OnUpdateViewRemainingTime(CCmdUI* pCmdUI);
- afx_msg void OnViewRemainingTime();
+ afx_msg void OnUpdateViewOSDDisplayTime(CCmdUI* pCmdUI);
+ afx_msg void OnViewOSDDisplayTime();
+ afx_msg void OnUpdateViewOSDShowFileName(CCmdUI* pCmdUI);
+ afx_msg void OnViewOSDShowFileName();
afx_msg void OnD3DFullscreenToggle();
afx_msg void OnGotoSubtitle(UINT nID);
afx_msg void OnShiftSubtitle(UINT nID);
@@ -901,6 +932,10 @@ public:
afx_msg void OnPlayColor(UINT nID);
afx_msg void OnAfterplayback(UINT nID);
afx_msg void OnUpdateAfterplayback(CCmdUI* pCmdUI);
+ afx_msg void OnPlayRepeat(UINT nID);
+ afx_msg void OnUpdatePlayRepeat(CCmdUI* pCmdUI);
+ afx_msg void OnPlayRepeatForever();
+ afx_msg void OnUpdatePlayRepeatForever(CCmdUI* pCmdUI);
afx_msg void OnNavigateSkip(UINT nID);
afx_msg void OnUpdateNavigateSkip(CCmdUI* pCmdUI);
@@ -945,14 +980,14 @@ public:
CWnd* m_pVideoWnd; // Current Video (main display screen or 2nd)
CFullscreenWnd* m_pFullscreenWnd;
CVMROSD m_OSD;
- bool m_bRemainingTime;
+ bool m_bOSDDisplayTime;
int m_nCurSubtitle;
long m_lSubtitleShift;
REFERENCE_TIME m_rtCurSubPos;
+ bool m_bScanDlgOpened;
bool m_bStopTunerScan;
bool m_bLockedZoomVideoWindow;
int m_nLockedZoomVideoWindow;
- bool m_fSetChannelActive;
void SetLoadState(MLS eState);
MLS GetLoadState() const;
@@ -986,7 +1021,7 @@ public:
CString GetVidPos() const;
- ITaskbarList3* m_pTaskbarList;
+ CComPtr<ITaskbarList3> m_pTaskbarList;
HRESULT CreateThumbnailToolbar();
HRESULT UpdateThumbarButton();
HRESULT UpdateThumbarButton(MPC_PLAYSTATE iPlayState);
@@ -1029,7 +1064,7 @@ protected:
bool m_bAllowWindowZoom;
double m_dLastVideoScaleFactor;
- int m_nLastVideoWidth;
+ CSize m_lastVideoSize;
bool m_bExtOnTop; // 'true' if the "on top" flag was set by an external tool
@@ -1058,6 +1093,4 @@ public:
bool OpenBD(CString Path);
bool GetDecoderType(CString& type) const;
-
- DPI m_dpi;
};
diff --git a/src/mpc-hc/MainFrmControls.cpp b/src/mpc-hc/MainFrmControls.cpp
index 0aaaea205..80161db66 100644
--- a/src/mpc-hc/MainFrmControls.cpp
+++ b/src/mpc-hc/MainFrmControls.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,8 @@
#include "stdafx.h"
#include "MainFrmControls.h"
#include "MainFrm.h"
+#include "mplayerc.h"
+#include <mvrInterfaces.h>
#define DELAY_SHOW_NOT_LOADED_TIME_MS 3000
@@ -243,7 +245,7 @@ CSize CMainFrameControls::GetDockZonesMinSize(unsigned uSaneFallback)
auto pBar = static_cast<CPlayerBar*>(pDock->m_arrBars[i]);
if (!pBar && !bNewRow) {
bNewRow = true;
- maxRowSize = max(maxRowSize, rowSize);
+ maxRowSize = std::max(maxRowSize, rowSize);
rowSize = 0;
}
if (pBar) {
@@ -271,8 +273,8 @@ CSize CMainFrameControls::GetDockZonesMinSize(unsigned uSaneFallback)
const CSize sizeBottom(m_panelZones.find(DOCK_BOTTOM) != std::end(m_panelZones) ? calcDock(DOCK_BOTTOM) : 0);
CSize ret;
- ret.cx = max(sizeLeft.cx + sizeRight.cx, max(sizeTop.cx, sizeBottom.cx));
- ret.cy = sizeTop.cy + sizeBottom.cy + max(sizeLeft.cy, sizeRight.cy);
+ ret.cx = std::max(sizeLeft.cx + sizeRight.cx, std::max(sizeTop.cx, sizeBottom.cx));
+ ret.cy = sizeTop.cy + sizeBottom.cy + std::max(sizeLeft.cy, sizeRight.cy);
const unsigned uToolbars = GetToolbarsHeight();
if (uToolbars) {
ret.cx = std::max(ret.cx, saneX);
@@ -322,8 +324,14 @@ void CMainFrameControls::UpdateToolbarsVisibility()
struct {
int maskShow, maskHide;
- void show(int mask) { maskShow |= mask; maskHide &= ~mask; }
- void hide(int mask) { maskHide |= mask; maskShow &= ~mask; }
+ void show(int mask) {
+ maskShow |= mask;
+ maskHide &= ~mask;
+ }
+ void hide(int mask) {
+ maskHide |= mask;
+ maskShow &= ~mask;
+ }
} mask = { 0, 0 };
const int maskAll = DOCK_LEFT | DOCK_RIGHT | DOCK_TOP | DOCK_BOTTOM;
@@ -396,17 +404,21 @@ void CMainFrameControls::UpdateToolbarsVisibility()
if (bOnWindow) {
unsigned uTop, uLeft, uRight, uBottom;
GetDockZones(uTop, uLeft, uRight, uBottom, bEnumedPanelZones ? false : (bEnumedPanelZones = true));
- unsigned uExclSeekbarHeight = 0;
+ CRect clientRect;
+ m_pMainFrame->GetClientRect(clientRect);
+ CRect exclSeekbarRect;
if (bExclSeekbar) {
- uExclSeekbarHeight = 56; // TODO: query this through IMadVRInfo
+ if (!m_pMainFrame->m_pMVRI
+ || FAILED(m_pMainFrame->m_pMVRI->GetRect("seekbarRect", exclSeekbarRect))) {
+ exclSeekbarRect = clientRect;
+ exclSeekbarRect.top = 56;
+ }
uBottom = 0;
}
if (!bCanHideDockedPanels) {
uTop = uLeft = uRight = 0;
}
- CRect clientRect;
- m_pMainFrame->GetClientRect(clientRect);
- const bool bHoveringExclSeekbar = (bExclSeekbar && clientPoint.y + (int)uExclSeekbarHeight >= clientRect.Height());
+ const bool bHoveringExclSeekbar = (bExclSeekbar && exclSeekbarRect.PtInRect(clientPoint));
ret = true;
if (clientRect.PtInRect(clientPoint)) {
if (ePolicy == CAppSettings::HideFullscreenControlsPolicy::SHOW_WHEN_CURSOR_MOVED) {
diff --git a/src/mpc-hc/MainFrmControls.h b/src/mpc-hc/MainFrmControls.h
index 22d2fbe64..af53e75d3 100644
--- a/src/mpc-hc/MainFrmControls.h
+++ b/src/mpc-hc/MainFrmControls.h
@@ -57,8 +57,7 @@ public:
CMainFrameControls(CMainFrame* pMainFrame);
~CMainFrameControls();
- enum class Toolbar
- {
+ enum class Toolbar {
SEEKBAR,
CONTROLS,
INFO,
@@ -67,8 +66,7 @@ public:
};
std::map<Toolbar, CControlBar*> m_toolbars;
- enum class Panel
- {
+ enum class Panel {
SUBRESYNC,
PLAYLIST,
CAPTURE,
diff --git a/src/mpc-hc/MediaFormats.cpp b/src/mpc-hc/MediaFormats.cpp
index a80b8891f..ff243666f 100644
--- a/src/mpc-hc/MediaFormats.cpp
+++ b/src/mpc-hc/MediaFormats.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -31,8 +31,8 @@
CMediaFormatCategory::CMediaFormatCategory()
: m_fAudioOnly(false)
- , m_fAssociable(true)
, m_engine(DirectShow)
+ , m_fAssociable(true)
{
}
@@ -207,58 +207,59 @@ void CMediaFormats::UpdateData(bool fSave)
#define ADDFMT(f) Add(CMediaFormatCategory##f)
- ADDFMT((_T("avi"), ResStr(IDS_MFMT_AVI), _T("avi")));
- ADDFMT((_T("mpeg"), ResStr(IDS_MFMT_MPEG), _T("mpg mpeg mpe m1v m2v mpv2 mp2v pva evo m2p")));
- ADDFMT((_T("mpegts"), ResStr(IDS_MFMT_MPEGTS), _T("ts tp trp m2t m2ts mts rec")));
- ADDFMT((_T("dvdvideo"), ResStr(IDS_MFMT_DVDVIDEO), _T("vob ifo")));
- ADDFMT((_T("mkv"), ResStr(IDS_MFMT_MKV), _T("mkv")));
- ADDFMT((_T("webm"), ResStr(IDS_MFMT_WEBM), _T("webm")));
- ADDFMT((_T("mp4"), ResStr(IDS_MFMT_MP4), _T("mp4 m4v mp4v mpv4 hdmov")));
- ADDFMT((_T("mov"), ResStr(IDS_MFMT_MOV), _T("mov")));
- ADDFMT((_T("3gp"), ResStr(IDS_MFMT_3GP), _T("3gp 3gpp 3ga")));
- ADDFMT((_T("3g2"), ResStr(IDS_MFMT_3G2), _T("3g2 3gp2")));
- ADDFMT((_T("flv"), ResStr(IDS_MFMT_FLV), _T("flv f4v")));
- ADDFMT((_T("ogm"), ResStr(IDS_MFMT_OGM), _T("ogm ogv")));
- ADDFMT((_T("rm"), ResStr(IDS_MFMT_RM), _T("rm rmvb")));
+ ADDFMT((_T("avi"), StrRes(IDS_MFMT_AVI), _T("avi")));
+ ADDFMT((_T("mpeg"), StrRes(IDS_MFMT_MPEG), _T("mpg mpeg mpe m1v m2v mpv2 mp2v pva evo m2p")));
+ ADDFMT((_T("mpegts"), StrRes(IDS_MFMT_MPEGTS), _T("ts tp trp m2t m2ts mts rec ssif")));
+ ADDFMT((_T("dvdvideo"), StrRes(IDS_MFMT_DVDVIDEO), _T("vob ifo")));
+ ADDFMT((_T("mkv"), StrRes(IDS_MFMT_MKV), _T("mkv mk3d")));
+ ADDFMT((_T("webm"), StrRes(IDS_MFMT_WEBM), _T("webm")));
+ ADDFMT((_T("mp4"), StrRes(IDS_MFMT_MP4), _T("mp4 m4v mp4v mpv4 hdmov")));
+ ADDFMT((_T("mov"), StrRes(IDS_MFMT_MOV), _T("mov")));
+ ADDFMT((_T("3gp"), StrRes(IDS_MFMT_3GP), _T("3gp 3gpp 3ga")));
+ ADDFMT((_T("3g2"), StrRes(IDS_MFMT_3G2), _T("3g2 3gp2")));
+ ADDFMT((_T("flv"), StrRes(IDS_MFMT_FLV), _T("flv f4v")));
+ ADDFMT((_T("ogm"), StrRes(IDS_MFMT_OGM), _T("ogm ogv")));
+ ADDFMT((_T("rm"), StrRes(IDS_MFMT_RM), _T("rm rmvb")));
#ifdef _WIN64
- ADDFMT((_T("rt"), ResStr(IDS_MFMT_RT), _T("rt ram rpm rmm rp smi smil")));
+ ADDFMT((_T("rt"), StrRes(IDS_MFMT_RT), _T("rt ram rpm rmm rp smi smil")));
#else
- ADDFMT((_T("rt"), ResStr(IDS_MFMT_RT), _T("rt ram rpm rmm rp smi smil"), false, _T("RealPlayer or Real Alternative"), RealMedia));
+ ADDFMT((_T("rt"), StrRes(IDS_MFMT_RT), _T("rt ram rpm rmm rp smi smil"), false, _T("RealPlayer or Real Alternative"), RealMedia));
#endif
- ADDFMT((_T("wmv"), ResStr(IDS_MFMT_WMV), _T("wmv wmp wm asf")));
- ADDFMT((_T("bink"), ResStr(IDS_MFMT_BINK), _T("smk bik")));
- ADDFMT((_T("flic"), ResStr(IDS_MFMT_FLIC), _T("fli flc flic")));
- ADDFMT((_T("dsm"), ResStr(IDS_MFMT_DSM), _T("dsm dsv dsa dss")));
- ADDFMT((_T("ivf"), ResStr(IDS_MFMT_IVF), _T("ivf")));
- ADDFMT((_T("swf"), ResStr(IDS_MFMT_SWF), _T("swf"), false, _T("ShockWave ActiveX control"), ShockWave));
- ADDFMT((_T("other"), ResStr(IDS_MFMT_OTHER), _T("divx amv")));
- ADDFMT((_T("ac3dts"), ResStr(IDS_MFMT_AC3), _T("ac3 dts"), true));
- ADDFMT((_T("aiff"), ResStr(IDS_MFMT_AIFF), _T("aif aifc aiff"), true));
- ADDFMT((_T("alac"), ResStr(IDS_MFMT_ALAC), _T("alac"), true));
- ADDFMT((_T("amr"), ResStr(IDS_MFMT_AMR), _T("amr"), true));
- ADDFMT((_T("ape"), ResStr(IDS_MFMT_APE), _T("ape apl"), true));
- ADDFMT((_T("au"), ResStr(IDS_MFMT_AU), _T("au snd"), true));
- ADDFMT((_T("audiocd"), ResStr(IDS_MFMT_CDA), _T("cda"), true));
- ADDFMT((_T("flac"), ResStr(IDS_MFMT_FLAC), _T("flac"), true));
- ADDFMT((_T("m4a"), ResStr(IDS_MFMT_M4A), _T("m4a m4b m4r aac"), true));
- ADDFMT((_T("midi"), ResStr(IDS_MFMT_MIDI), _T("mid midi rmi"), true));
- ADDFMT((_T("mka"), ResStr(IDS_MFMT_MKA), _T("mka"), true));
- ADDFMT((_T("mp3"), ResStr(IDS_MFMT_MP3), _T("mp3"), true));
- ADDFMT((_T("mpa"), ResStr(IDS_MFMT_MPA), _T("mpa mp2 m1a m2a"), true));
- ADDFMT((_T("mpc"), ResStr(IDS_MFMT_MPC), _T("mpc"), true));
- ADDFMT((_T("ofr"), ResStr(IDS_MFMT_OFR), _T("ofr ofs"), true));
- ADDFMT((_T("ogg"), ResStr(IDS_MFMT_OGG), _T("ogg oga"), true));
- ADDFMT((_T("opus"), ResStr(IDS_MFMT_OPUS), _T("opus"), true));
- ADDFMT((_T("ra"), ResStr(IDS_MFMT_RA), _T("ra"), true));
- ADDFMT((_T("tak"), ResStr(IDS_MFMT_TAK), _T("tak"), true));
- ADDFMT((_T("tta"), ResStr(IDS_MFMT_TTA), _T("tta"), true));
- ADDFMT((_T("wav"), ResStr(IDS_MFMT_WAV), _T("wav"), true));
- ADDFMT((_T("wma"), ResStr(IDS_MFMT_WMA), _T("wma"), true));
- ADDFMT((_T("wavpack"), ResStr(IDS_MFMT_WV), _T("wv"), true));
- ADDFMT((_T("other_audio"), ResStr(IDS_MFMT_OTHER_AUDIO), _T("aob mlp"), true));
- ADDFMT((_T("pls"), ResStr(IDS_MFMT_PLS), _T("asx m3u m3u8 pls wvx wax wmx mpcpl")));
- ADDFMT((_T("bdpls"), ResStr(IDS_MFMT_BDPLS), _T("mpls bdmv")));
- ADDFMT((_T("rar"), ResStr(IDS_MFMT_RAR), _T("rar"), false, _T("RARFileSource"), DirectShow, false));
+ ADDFMT((_T("wmv"), StrRes(IDS_MFMT_WMV), _T("wmv wmp wm asf")));
+ ADDFMT((_T("bink"), StrRes(IDS_MFMT_BINK), _T("smk bik")));
+ ADDFMT((_T("flic"), StrRes(IDS_MFMT_FLIC), _T("fli flc flic")));
+ ADDFMT((_T("dsm"), StrRes(IDS_MFMT_DSM), _T("dsm dsv dsa dss")));
+ ADDFMT((_T("ivf"), StrRes(IDS_MFMT_IVF), _T("ivf")));
+ ADDFMT((_T("swf"), StrRes(IDS_MFMT_SWF), _T("swf"), false, _T("ShockWave ActiveX control"), ShockWave));
+ ADDFMT((_T("other"), StrRes(IDS_MFMT_OTHER), _T("divx amv")));
+ ADDFMT((_T("ac3"), StrRes(IDS_MFMT_AC3), _T("ac3"), true));
+ ADDFMT((_T("dts"), StrRes(IDS_MFMT_DTS), _T("dts dtshd dtsma"), true));
+ ADDFMT((_T("aiff"), StrRes(IDS_MFMT_AIFF), _T("aif aifc aiff"), true));
+ ADDFMT((_T("alac"), StrRes(IDS_MFMT_ALAC), _T("alac"), true));
+ ADDFMT((_T("amr"), StrRes(IDS_MFMT_AMR), _T("amr"), true));
+ ADDFMT((_T("ape"), StrRes(IDS_MFMT_APE), _T("ape apl"), true));
+ ADDFMT((_T("au"), StrRes(IDS_MFMT_AU), _T("au snd"), true));
+ ADDFMT((_T("audiocd"), StrRes(IDS_MFMT_CDA), _T("cda"), true));
+ ADDFMT((_T("flac"), StrRes(IDS_MFMT_FLAC), _T("flac"), true));
+ ADDFMT((_T("m4a"), StrRes(IDS_MFMT_M4A), _T("m4a m4b m4r aac"), true));
+ ADDFMT((_T("midi"), StrRes(IDS_MFMT_MIDI), _T("mid midi rmi"), true));
+ ADDFMT((_T("mka"), StrRes(IDS_MFMT_MKA), _T("mka"), true));
+ ADDFMT((_T("mp3"), StrRes(IDS_MFMT_MP3), _T("mp3"), true));
+ ADDFMT((_T("mpa"), StrRes(IDS_MFMT_MPA), _T("mpa mp2 m1a m2a"), true));
+ ADDFMT((_T("mpc"), StrRes(IDS_MFMT_MPC), _T("mpc"), true));
+ ADDFMT((_T("ofr"), StrRes(IDS_MFMT_OFR), _T("ofr ofs"), true));
+ ADDFMT((_T("ogg"), StrRes(IDS_MFMT_OGG), _T("ogg oga"), true));
+ ADDFMT((_T("opus"), StrRes(IDS_MFMT_OPUS), _T("opus"), true));
+ ADDFMT((_T("ra"), StrRes(IDS_MFMT_RA), _T("ra"), true));
+ ADDFMT((_T("tak"), StrRes(IDS_MFMT_TAK), _T("tak"), true));
+ ADDFMT((_T("tta"), StrRes(IDS_MFMT_TTA), _T("tta"), true));
+ ADDFMT((_T("wav"), StrRes(IDS_MFMT_WAV), _T("wav"), true));
+ ADDFMT((_T("wma"), StrRes(IDS_MFMT_WMA), _T("wma"), true));
+ ADDFMT((_T("wavpack"), StrRes(IDS_MFMT_WV), _T("wv"), true));
+ ADDFMT((_T("other_audio"), StrRes(IDS_MFMT_OTHER_AUDIO), _T("aob mlp thd"), true));
+ ADDFMT((_T("pls"), StrRes(IDS_MFMT_PLS), _T("asx m3u m3u8 pls wvx wax wmx mpcpl")));
+ ADDFMT((_T("bdpls"), StrRes(IDS_MFMT_BDPLS), _T("mpls bdmv")));
+ ADDFMT((_T("rar"), StrRes(IDS_MFMT_RAR), _T("rar"), false, _T("RARFileSource"), DirectShow, false));
#undef ADDFMT
m_iRtspHandler = (engine_t)AfxGetApp()->GetProfileInt(_T("FileFormats"), _T("RtspHandler"), (int)RealMedia);
@@ -365,7 +366,7 @@ void CMediaFormats::GetFilter(CString& filter, CAtlArray<CString>& mask) const
mask.Add(mfc.GetFilter());
}
- filter += ResStr(IDS_AG_ALLFILES);
+ filter.AppendFormat(IDS_AG_ALLFILES);
mask.Add(_T("*.*"));
filter += _T("|");
@@ -401,7 +402,7 @@ void CMediaFormats::GetAudioFilter(CString& filter, CAtlArray<CString>& mask) co
mask.Add(mfc.GetFilter());
}
- filter += ResStr(IDS_AG_ALLFILES);
+ filter.AppendFormat(IDS_AG_ALLFILES);
mask.Add(_T("*.*"));
filter += _T("|");
diff --git a/src/mpc-hc/MediaPositionList.h b/src/mpc-hc/MediaPositionList.h
index fdceec9e2..b08d0de73 100644
--- a/src/mpc-hc/MediaPositionList.h
+++ b/src/mpc-hc/MediaPositionList.h
@@ -1,5 +1,5 @@
/*
- * (C) 2012-2014 see Authors.txt
+ * (C) 2012-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -45,7 +45,7 @@ public:
, m_nMaxSize(nMaxSize)
{};
- int GetMaxSize() const { m_nMaxSize; };
+ int GetMaxSize() const { return m_nMaxSize; };
void SetMaxSize(int nMaxSize) {
ENSURE_ARG(nMaxSize >= 0);
diff --git a/src/mpc-hc/MediaTypesDlg.cpp b/src/mpc-hc/MediaTypesDlg.cpp
index 6ae214c5a..fdc489f2a 100644
--- a/src/mpc-hc/MediaTypesDlg.cpp
+++ b/src/mpc-hc/MediaTypesDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -32,8 +32,8 @@
CMediaTypesDlg::CMediaTypesDlg(IGraphBuilderDeadEnd* pGBDE, CWnd* pParent /*=nullptr*/)
: CResizableDialog(CMediaTypesDlg::IDD, pParent)
, m_pGBDE(pGBDE)
- , m_subtype(GUID_NULL)
, m_type(UNKNOWN)
+ , m_subtype(GUID_NULL)
{
}
diff --git a/src/mpc-hc/MiniDump.cpp b/src/mpc-hc/MiniDump.cpp
deleted file mode 100644
index 54cb47ae2..000000000
--- a/src/mpc-hc/MiniDump.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * (C) 2008-2014 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "stdafx.h"
-#include <atlpath.h>
-#include "mplayerc.h"
-#include "MiniDump.h"
-#include "resource.h"
-#include <DbgHelp.h>
-#include "mpc-hc_config.h"
-#include "VersionInfo.h"
-#include "WinAPIUtils.h"
-
-
-CMiniDump _Singleton;
-
-
-typedef BOOL (WINAPI* MINIDUMPWRITEDUMP)(HANDLE hProcess, DWORD dwPid, HANDLE hFile, MINIDUMP_TYPE DumpType,
- CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
- CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
- CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam
- );
-
-
-CMiniDump::CMiniDump()
-{
-#ifndef _DEBUG
-
- Enable();
-
- //#ifndef _WIN64
- // Enable catching in CRT (http://blog.kalmbachnet.de/?postid=75)
- // PreventSetUnhandledExceptionFilter();
- //#endif
-#endif
-}
-
-CMiniDump::~CMiniDump()
-{
-}
-
-LPTOP_LEVEL_EXCEPTION_FILTER WINAPI MyDummySetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter)
-{
- return nullptr;
-}
-
-BOOL CMiniDump::PreventSetUnhandledExceptionFilter()
-{
- HMODULE hKernel32 = LoadLibrary(_T("kernel32.dll"));
- if (hKernel32 == nullptr) {
- return FALSE;
- }
-
- void* pOrgEntry = GetProcAddress(hKernel32, "SetUnhandledExceptionFilter");
- if (pOrgEntry == nullptr) {
- FreeLibrary(hKernel32);
- return FALSE;
- }
-
- unsigned char newJump[100];
- DWORD_PTR dwOrgEntryAddr = (DWORD_PTR)pOrgEntry;
- dwOrgEntryAddr += 5; // add 5 for 5 op-codes for jmp far
- void* pNewFunc = &MyDummySetUnhandledExceptionFilter;
- DWORD_PTR dwNewEntryAddr = (DWORD_PTR)pNewFunc;
- DWORD_PTR dwRelativeAddr = dwNewEntryAddr - dwOrgEntryAddr;
-
- newJump[0] = 0xE9; // JMP absolute
- memcpy(&newJump[1], &dwRelativeAddr, sizeof(pNewFunc));
- SIZE_T bytesWritten;
- BOOL bRet = WriteProcessMemory(GetCurrentProcess(), pOrgEntry, newJump, sizeof(pNewFunc) + 1, &bytesWritten);
- FreeLibrary(hKernel32);
- return bRet;
-}
-
-LONG WINAPI CMiniDump::UnhandledExceptionFilter(_EXCEPTION_POINTERS* lpTopLevelExceptionFilter)
-{
- LONG retval = EXCEPTION_CONTINUE_SEARCH;
- BOOL bDumpCreated = FALSE;
- TCHAR szResult[800];
- szResult[0] = _T('\0');
- CPath dumpPath;
-
-#if ENABLE_MINIDUMP
- HMODULE hDll = ::LoadLibrary(_T("dbghelp.dll"));
-
- if (hDll != nullptr) {
- MINIDUMPWRITEDUMP pMiniDumpWriteDump = (MINIDUMPWRITEDUMP)::GetProcAddress(hDll, "MiniDumpWriteDump");
- if (pMiniDumpWriteDump != nullptr && AfxGetMyApp()->GetAppSavePath(dumpPath)) {
- // Check that the folder actually exists
- if (!FileExists(dumpPath)) {
- VERIFY(CreateDirectory(dumpPath, nullptr));
- }
-
- CString strDumpName = AfxGetApp()->m_pszExeName;
- strDumpName.Append(_T(".exe.") + VersionInfo::GetVersionString() + _T(".dmp"));
- dumpPath.Append(strDumpName);
-
- // create the file
- HANDLE hFile = ::CreateFile(dumpPath, GENERIC_WRITE, FILE_SHARE_WRITE, nullptr, CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL, nullptr);
-
- if (hFile != INVALID_HANDLE_VALUE) {
- _MINIDUMP_EXCEPTION_INFORMATION ExInfo;
-
- ExInfo.ThreadId = ::GetCurrentThreadId();
- ExInfo.ExceptionPointers = lpTopLevelExceptionFilter;
- ExInfo.ClientPointers = FALSE;
-
- // write the dump
- bDumpCreated = pMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, nullptr, nullptr);
- if (bDumpCreated) {
- _stprintf_s(szResult, _countof(szResult), ResStr(IDS_MPC_CRASH), dumpPath);
- retval = EXCEPTION_EXECUTE_HANDLER;
- } else {
- _stprintf_s(szResult, _countof(szResult), ResStr(IDS_MPC_MINIDUMP_FAIL), dumpPath, GetLastError());
- }
-
- ::CloseHandle(hFile);
- } else {
- _stprintf_s(szResult, _countof(szResult), ResStr(IDS_MPC_MINIDUMP_FAIL), dumpPath, GetLastError());
- }
- }
- FreeLibrary(hDll);
- }
-
- if (szResult[0]) {
- switch (MessageBox(AfxGetMyApp()->GetMainWnd()->m_hWnd, szResult, _T("MPC-HC - Mini Dump"), (bDumpCreated ? MB_YESNO : MB_OK) | MB_TOPMOST)) {
- case IDYES:
- ShellExecute(nullptr, _T("open"), BUGS_URL, nullptr, nullptr, SW_SHOWDEFAULT);
- ExploreToFile(dumpPath);
- break;
- case IDNO:
- retval = EXCEPTION_CONTINUE_SEARCH; // rethrow the exception to make easier attaching a debugger
- break;
- }
- }
-#else
- if (MessageBox(AfxGetMyApp()->GetMainWnd()->m_hWnd, ResStr(IDS_MPC_BUG_REPORT), ResStr(IDS_MPC_BUG_REPORT_TITLE), MB_YESNO | MB_TOPMOST) == IDYES) {
- ShellExecute(nullptr, _T("open"), DOWNLOAD_URL, nullptr, nullptr, SW_SHOWDEFAULT);
- }
-#endif // DISABLE_MINIDUMP
-
- return retval;
-}
diff --git a/src/mpc-hc/MiniDump.h b/src/mpc-hc/MiniDump.h
deleted file mode 100644
index 96ba8e0c1..000000000
--- a/src/mpc-hc/MiniDump.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * (C) 2009-2013 see Authors.txt
- *
- * This file is part of MPC-HC.
- *
- * MPC-HC is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * MPC-HC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-class CMiniDump
-{
-public:
- CMiniDump();
- ~CMiniDump();
-
- static void Enable() { SetUnhandledExceptionFilter(UnhandledExceptionFilter); };
- static void Disable() { SetUnhandledExceptionFilter(nullptr); };
-
-private:
- static LONG WINAPI UnhandledExceptionFilter(_EXCEPTION_POINTERS* lpTopLevelExceptionFilter);
- static BOOL PreventSetUnhandledExceptionFilter();
-};
diff --git a/src/mpc-hc/MouseTouch.cpp b/src/mpc-hc/MouseTouch.cpp
index 23c84f2f7..98d26c6f3 100644
--- a/src/mpc-hc/MouseTouch.cpp
+++ b/src/mpc-hc/MouseTouch.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,7 +21,9 @@
#include "stdafx.h"
#include "MouseTouch.h"
#include "MainFrm.h"
+#include "mplayerc.h"
#include "FullscreenWnd.h"
+#include <mvrInterfaces.h>
#define CURSOR_HIDE_TIMEOUT 2000
@@ -229,27 +231,25 @@ void CMouse::EventCallback(MpcEvent ev)
// madVR compatibility layer for exclusive mode seekbar
bool CMouse::UsingMVR() const
{
- return !!m_pMainFrame->m_pMVRS;
+ return !!m_pMainFrame->m_pMVRSR;
}
void CMouse::MVRMove(UINT nFlags, const CPoint& point)
{
if (UsingMVR()) {
- CPoint mappedPoint(point);
- MapWindowPoints(GetWnd(), m_pMainFrame->m_hWnd, &mappedPoint, 1);
WPARAM wp = nFlags;
- LPARAM lp = MAKELPARAM(mappedPoint.x, mappedPoint.y);
- m_pMainFrame->SendMessage(WM_MOUSEMOVE, wp, lp);
+ LPARAM lp = MAKELPARAM(point.x, point.y);
+ LRESULT lr = 0;
+ m_pMainFrame->m_pMVRSR->ParentWindowProc(GetWnd(), WM_MOUSEMOVE, &wp, &lp, &lr);
}
}
bool CMouse::MVRDown(UINT nFlags, const CPoint& point)
{
bool ret = false;
if (UsingMVR()) {
- CPoint mappedPoint(point);
- MapWindowPoints(GetWnd(), m_pMainFrame->m_hWnd, &mappedPoint, 1);
WPARAM wp = nFlags;
- LPARAM lp = MAKELPARAM(mappedPoint.x, mappedPoint.y);
- ret = (m_pMainFrame->SendMessage(WM_LBUTTONDOWN, wp, lp) != 42);
+ LPARAM lp = MAKELPARAM(point.x, point.y);
+ LRESULT lr = 0;
+ ret = !!m_pMainFrame->m_pMVRSR->ParentWindowProc(GetWnd(), WM_LBUTTONDOWN, &wp, &lp, &lr);
}
return ret;
}
@@ -257,11 +257,10 @@ bool CMouse::MVRUp(UINT nFlags, const CPoint& point)
{
bool ret = false;
if (UsingMVR()) {
- CPoint mappedPoint(point);
- MapWindowPoints(GetWnd(), m_pMainFrame->m_hWnd, &mappedPoint, 1);
WPARAM wp = nFlags;
- LPARAM lp = MAKELPARAM(mappedPoint.x, mappedPoint.y);
- ret = (m_pMainFrame->SendMessage(WM_LBUTTONUP, wp, lp) != 42);
+ LPARAM lp = MAKELPARAM(point.x, point.y);
+ LRESULT lr = 0;
+ ret = !!m_pMainFrame->m_pMVRSR->ParentWindowProc(GetWnd(), WM_LBUTTONUP, &wp, &lp, &lr);
}
return ret;
}
@@ -291,7 +290,8 @@ void CMouse::InternalOnLButtonDown(UINT nFlags, const CPoint& point)
bool bDouble = false;
if (m_bLeftDoubleStarted &&
GetMessageTime() - m_leftDoubleStartTime < (int)GetDoubleClickTime() &&
- CMouse::PointEqualsImprecise(m_leftDoubleStartPoint, point)) {
+ CMouse::PointEqualsImprecise(m_leftDoubleStartPoint, point,
+ GetSystemMetrics(SM_CXDOUBLECLK) / 2, GetSystemMetrics(SM_CYDOUBLECLK) / 2)) {
m_bLeftDoubleStarted = false;
bDouble = true;
} else {
@@ -473,7 +473,8 @@ bool CMouse::TestDrag(const CPoint& screenPoint)
ASSERT(!IsOnFullscreenWindow());
bool bUpAssigned = !!AssignedToCmd(wmcmd::LUP, false);
if ((!bUpAssigned && screenPoint != m_beginDragPoint) ||
- (bUpAssigned && !PointEqualsImprecise(screenPoint, m_beginDragPoint))) {
+ (bUpAssigned && !PointEqualsImprecise(screenPoint, m_beginDragPoint,
+ GetSystemMetrics(SM_CXDRAG), GetSystemMetrics(SM_CYDRAG)))) {
VERIFY(ReleaseCapture());
m_pMainFrame->PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(m_beginDragPoint.x, m_beginDragPoint.y));
m_drag = Drag::DRAGGED;
@@ -634,3 +635,17 @@ void CMouseWnd::OnDestroy()
CMouse::InternalOnDestroy();
CWnd::OnDestroy();
}
+
+std::unordered_set<const CWnd*> CMainFrameMouseHook::GetRoots()
+{
+ std::unordered_set<const CWnd*> ret;
+ const CMainFrame* pMainFrame = AfxGetMainFrame();
+ ASSERT(pMainFrame);
+ if (pMainFrame) {
+ ret.emplace(pMainFrame);
+ if (pMainFrame->IsD3DFullScreenMode()) {
+ ret.emplace(pMainFrame->m_pFullscreenWnd);
+ }
+ }
+ return ret;
+}
diff --git a/src/mpc-hc/MouseTouch.h b/src/mpc-hc/MouseTouch.h
index 7ec4d5890..8dbb32dc5 100644
--- a/src/mpc-hc/MouseTouch.h
+++ b/src/mpc-hc/MouseTouch.h
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,8 +21,10 @@
#pragma once
#include <map>
+#include <unordered_set>
#include "EventDispatcher.h"
+#include "SysVersion.h"
// TODO: handle touch gestures
@@ -36,12 +38,11 @@ public:
virtual ~CMouse();
- static inline bool PointEqualsImprecise(long a, long b) {
- const unsigned uDelta = 1;
- return abs(a - b) <= uDelta;
+ static inline bool PointEqualsImprecise(long a, long b, long lDelta) {
+ return abs(a - b) <= abs(lDelta);
}
- static inline bool PointEqualsImprecise(const CPoint& a, const CPoint& b) {
- return PointEqualsImprecise(a.x, b.x) && PointEqualsImprecise(a.y, b.y);
+ static inline bool PointEqualsImprecise(const CPoint& a, const CPoint& b, long xDelta = 1, long yDelta = 1) {
+ return PointEqualsImprecise(a.x, b.x, xDelta) && PointEqualsImprecise(a.y, b.y, yDelta);
}
static UINT GetMouseFlags();
@@ -53,8 +54,10 @@ public:
CMouse& operator=(const CMouse&) = delete;
-private:
+protected:
const bool m_bD3DFS;
+
+private:
CMainFrame* m_pMainFrame;
bool m_bMouseHiderStarted;
CPoint m_mouseHiderStartScreenPoint;
@@ -158,4 +161,77 @@ private:
virtual CWnd& GetWnd() override final {
return *this;
}
+
+ virtual ULONG GetGestureStatus(CPoint) override {
+ return m_bD3DFS ? TABLET_DISABLE_PRESSANDHOLD : 0;
+ }
+};
+
+template <class T>
+class CMouseWheelHook
+{
+ HHOOK m_hHook = NULL;
+
+ static LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
+ if (nCode == HC_ACTION && wParam == WM_MOUSEWHEEL) {
+ const auto& msex = *reinterpret_cast<MOUSEHOOKSTRUCTEX*>(lParam);
+ if (const CWnd* pFocus = CWnd::FromHandlePermanent(msex.hwnd)) {
+ if (const CWnd* pFocusRoot = pFocus->GetAncestor(GA_ROOT)) {
+ // only intercept messages to focused windows that have white-listed root windows
+ if (T::GetRoots().count(pFocusRoot)) {
+ if (const CWnd* pUnder = CWnd::WindowFromPoint(msex.pt)) {
+ if (pFocusRoot == pUnder->GetAncestor(GA_ROOT) &&
+ GetCurrentThreadId() == GetWindowThreadProcessId(pUnder->m_hWnd, nullptr)) {
+ MSG msg = {
+ NULL,
+ static_cast<UINT>(wParam),
+ CMouse::GetMouseFlags() | msex.mouseData,
+ MAKELPARAM(msex.pt.x, msex.pt.y),
+ static_cast<DWORD>(GetMessageTime()),
+ msex.pt
+ };
+
+ for (const CWnd* pTarget : { pUnder, pFocusRoot }) {
+ msg.hwnd = pTarget->m_hWnd;
+ if (!msg.hwnd) {
+ ASSERT(FALSE);
+ continue;
+ }
+
+ // walk through pre-translate
+ if (CWnd::WalkPreTranslateTree(pFocusRoot->m_hWnd, &msg)) {
+ // the message shouldn't be dispatched
+ continue;
+ }
+
+ if (DispatchMessage(&msg)) {
+ return TRUE;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return CallNextHookEx(nullptr, nCode, wParam, lParam);
+ }
+
+public:
+ CMouseWheelHook() {
+ if (SysVersion::Is10OrLater()) {
+ m_hHook = SetWindowsHookEx(WH_MOUSE, MouseProc, nullptr, GetCurrentThreadId());
+ ASSERT(m_hHook);
+ }
+ }
+
+ virtual ~CMouseWheelHook() {
+ if (m_hHook) {
+ VERIFY(UnhookWindowsHookEx(m_hHook));
+ }
+ }
+};
+
+struct CMainFrameMouseHook : CMouseWheelHook<CMainFrameMouseHook> {
+ static std::unordered_set<const CWnd*> GetRoots();
};
diff --git a/src/mpc-hc/MpcApi.h b/src/mpc-hc/MpcApi.h
index a205e6272..34177f755 100644
--- a/src/mpc-hc/MpcApi.h
+++ b/src/mpc-hc/MpcApi.h
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -53,7 +53,7 @@ typedef enum MPC_LOADSTATE {
MLS_LOADED,
MLS_CLOSING,
MLS_FAILING,
-};
+} MPC_LOADSTATE;
typedef enum MPC_PLAYSTATE {
@@ -61,7 +61,7 @@ typedef enum MPC_PLAYSTATE {
PS_PAUSE = 1,
PS_STOP = 2,
PS_UNUSED = 3
-};
+} MPC_PLAYSTATE;
struct MPC_OSDDATA {
@@ -81,7 +81,7 @@ typedef enum {
typedef enum MPCAPI_COMMAND :
-unsigned int {
+ unsigned int {
// ==== Commands from MPC-HC to host
// Send after connection
@@ -266,4 +266,4 @@ unsigned int {
// Show host defined OSD message string
CMD_OSDSHOWMESSAGE = 0xA0005000
-};
+} MPCAPI_COMMAND;
diff --git a/src/mpc-hc/Mpeg2SectionData.cpp b/src/mpc-hc/Mpeg2SectionData.cpp
index df6b3e6ce..ed1b49f82 100644
--- a/src/mpc-hc/Mpeg2SectionData.cpp
+++ b/src/mpc-hc/Mpeg2SectionData.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -26,7 +26,7 @@
#include "Mpeg2SectionData.h"
#include "FreeviewEPGDecode.h"
#include "resource.h"
-
+#include "Logger.h"
#define BeginEnumDescriptors(gb, nType, nLength) \
{ \
@@ -38,7 +38,7 @@
#define SkipDescriptor(gb, nType, nLength) \
gb.ReadBuffer(DescBuffer, nLength); \
- TRACE(_T("Skipped descriptor : 0x%02x\n"), nType); \
+ BDA_LOG(_T("Skipped descriptor : 0x%02x"), nType); \
UNREFERENCED_PARAMETER(nType);
#define EndEnumDescriptors }}
@@ -214,6 +214,8 @@ DVB_STREAM_TYPE CMpeg2DataParser::ConvertToDVBType(PES_STREAM_TYPE nType)
return DVB_MPA;
case VIDEO_STREAM_H264:
return DVB_H264;
+ case VIDEO_STREAM_HEVC:
+ return DVB_HEVC;
case AUDIO_STREAM_AC3:
return DVB_AC3;
case AUDIO_STREAM_AC3_PLUS:
@@ -246,7 +248,7 @@ HRESULT CMpeg2DataParser::ParseSIHeader(CGolombBuffer& gb, DVB_SI SIType, WORD&
return S_OK;
}
-HRESULT CMpeg2DataParser::ParseSDT(ULONG ulFreq)
+HRESULT CMpeg2DataParser::ParseSDT(ULONG ulFrequency, ULONG ulBandwidth)
{
HRESULT hr;
CComPtr<ISectionList> pSectionList;
@@ -255,6 +257,7 @@ HRESULT CMpeg2DataParser::ParseSDT(ULONG ulFreq)
WORD wTSID;
WORD wONID;
WORD wSectionLength;
+ WORD serviceType = 0;
CheckNoLog(m_pData->GetSection(PID_SDT, SI_SDT, &m_Filter, 15000, &pSectionList));
CheckNoLog(pSectionList->GetSectionData(0, &dwLength, &data));
@@ -269,7 +272,8 @@ HRESULT CMpeg2DataParser::ParseSDT(ULONG ulFreq)
while (gb.GetSize() - gb.GetPos() > 4) {
CDVBChannel Channel;
- Channel.SetFrequency(ulFreq);
+ Channel.SetFrequency(ulFrequency);
+ Channel.SetBandwidth(ulBandwidth);
Channel.SetTSID(wTSID);
Channel.SetONID(wONID);
Channel.SetSID((ULONG)gb.BitRead(16)); // service_id uimsbf
@@ -283,7 +287,7 @@ HRESULT CMpeg2DataParser::ParseSDT(ULONG ulFreq)
BeginEnumDescriptors(gb, nType, nLength) {
switch (nType) {
case DT_SERVICE:
- gb.BitRead(8); // service_type
+ serviceType = (WORD)gb.BitRead(8); // service_type
nLength = (WORD)gb.BitRead(8); // service_provider_name_length
gb.ReadBuffer(DescBuffer, nLength); // service_provider_name
@@ -291,7 +295,7 @@ HRESULT CMpeg2DataParser::ParseSDT(ULONG ulFreq)
gb.ReadBuffer(DescBuffer, nLength); // service_name
DescBuffer[nLength] = 0;
Channel.SetName(ConvertString(DescBuffer, nLength));
- TRACE(_T("%-20s %lu\n"), Channel.GetName(), Channel.GetSID());
+ BDA_LOG(_T("%-20s %lu"), Channel.GetName(), Channel.GetSID());
break;
default:
SkipDescriptor(gb, nType, nLength); // descriptor()
@@ -302,7 +306,20 @@ HRESULT CMpeg2DataParser::ParseSDT(ULONG ulFreq)
if (!Channels.Lookup(Channel.GetSID())) {
- Channels [Channel.GetSID()] = Channel;
+ switch (serviceType) {
+ case DIGITAL_TV:
+ case DIGITAL_RADIO:
+ case AVC_DIGITAL_RADIO:
+ case MPEG2_HD_DIGITAL_TV:
+ case AVC_SD_TV:
+ case AVC_HD_TV:
+ case HEVC_TV:
+ Channels[Channel.GetSID()] = Channel;
+ break;
+ default:
+ BDA_LOG(_T("DVB: Skipping not supported service: %-20s %lu"), Channel.GetName(), Channel.GetSID());
+ break;
+ }
}
}
@@ -442,7 +459,7 @@ HRESULT CMpeg2DataParser::ParsePMT(CDVBChannel& Channel)
Channel.SetVideoWidth(720);
Channel.SetVideoHeight(576);
}
- } else if ((Channel.GetVideoType() == DVB_H264) && (Channel.GetVideoPID())) {
+ } else if ((Channel.GetVideoType() == DVB_H264 || Channel.GetVideoType() == DVB_HEVC) && (Channel.GetVideoPID())) {
if (Channel.GetVideoFps() == DVB_FPS_NONE) {
Channel.SetVideoFps(DVB_FPS_25_0);
}
@@ -454,32 +471,37 @@ HRESULT CMpeg2DataParser::ParsePMT(CDVBChannel& Channel)
HRESULT CMpeg2DataParser::SetTime(CGolombBuffer& gb, EventDescriptor& NowNext)
{
- char descBuffer[10];
- time_t tTime1, tTime2;
- tm tmTime1, tmTime2;
+ wchar_t descBuffer[10];
+ time_t tNow, tTime;
+ tm tmTime;
long timezone;
- int daylight;
// init tm structures
- time(&tTime1);
- localtime_s(&tmTime1, &tTime1);
+ time(&tNow);
+ gmtime_s(&tmTime, &tNow);
_tzset();
_get_timezone(&timezone); // The difference in seconds between UTC and local time.
- if (tmTime1.tm_isdst && !_get_daylight(&daylight)) {
- timezone -= daylight * 3600;
- }
// Start time:
- tmTime1.tm_hour = (int)(gb.BitRead(4) * 10);
- tmTime1.tm_hour += (int)gb.BitRead(4);
- tmTime1.tm_min = (int)(gb.BitRead(4) * 10);
- tmTime1.tm_min += (int)gb.BitRead(4);
- tmTime1.tm_sec = (int)(gb.BitRead(4) * 10);
- tmTime1.tm_sec += (int)gb.BitRead(4);
- NowNext.startTime = tTime1 = mktime(&tmTime1) - timezone;
- localtime_s(&tmTime2, &tTime1);
- tTime1 = mktime(&tmTime2);
- strftime(descBuffer, 6, "%H:%M", &tmTime2);
+ tmTime.tm_hour = (int)(gb.BitRead(4) * 10);
+ tmTime.tm_hour += (int)gb.BitRead(4);
+ tmTime.tm_min = (int)(gb.BitRead(4) * 10);
+ tmTime.tm_min += (int)gb.BitRead(4);
+ tmTime.tm_sec = (int)(gb.BitRead(4) * 10);
+ tmTime.tm_sec += (int)gb.BitRead(4);
+ // Convert to time_t
+ // mktime() expect tm struct to be local time and since we are feeding it with GMT
+ // we need to compensate for timezone offset. Note that we don't compensate for DST.
+ // That is because tm_isdst is set to 0 (GMT) and in this case mktime() won't add any offset.
+ NowNext.startTime = tTime = mktime(&tmTime) - timezone;
+ while (tNow < tTime) {
+ // If current time is less than even start time it is likely that event started the day before.
+ // We go one day back
+ NowNext.startTime = tTime -= 86400;
+ }
+
+ localtime_s(&tmTime, &tTime);
+ wcsftime(descBuffer, 6, L"%H:%M", &tmTime);
descBuffer[6] = '\0';
NowNext.strStartTime = descBuffer;
@@ -491,9 +513,9 @@ HRESULT CMpeg2DataParser::SetTime(CGolombBuffer& gb, EventDescriptor& NowNext)
NowNext.duration += (time_t)(10 * gb.BitRead(4));
NowNext.duration += (time_t)gb.BitRead(4);
- tTime2 = tTime1 + NowNext.duration;
- localtime_s(&tmTime2, &tTime2);
- strftime(descBuffer, 6, "%H:%M", &tmTime2);
+ tTime += NowNext.duration;
+ localtime_s(&tmTime, &tTime);
+ wcsftime(descBuffer, 6, L"%H:%M", &tmTime);
descBuffer[6] = '\0';
NowNext.strEndTime = descBuffer;
@@ -502,22 +524,18 @@ HRESULT CMpeg2DataParser::SetTime(CGolombBuffer& gb, EventDescriptor& NowNext)
HRESULT CMpeg2DataParser::ParseEIT(ULONG ulSID, EventDescriptor& NowNext)
{
- HRESULT hr;
- CComPtr<ISectionList> pSectionList;
+ HRESULT hr = S_OK;
DWORD dwLength;
PSECTION data;
ULONG ulGetSID;
EventInformationSection InfoEvent;
- int nLen;
- int descriptorNumber;
- int itemsLength;
- CString itemDesc, itemText;
- CString text;
+ NowNext = EventDescriptor();
do {
+ CComPtr<ISectionList> pSectionList;
CheckNoLog(m_pData->GetSection(PID_EIT, SI_EIT_act, nullptr, 5000, &pSectionList));
-
CheckNoLog(pSectionList->GetSectionData(0, &dwLength, &data));
+
CGolombBuffer gb((BYTE*)data, dwLength);
InfoEvent.TableID = (UINT8)gb.BitRead(8);
@@ -527,153 +545,139 @@ HRESULT CMpeg2DataParser::ParseEIT(ULONG ulSID, EventDescriptor& NowNext)
ulGetSID = (ULONG)gb.BitRead(8);
ulGetSID += 0x100 * (ULONG)gb.BitRead(8);
InfoEvent.ServiceId = ulGetSID; // This is really strange, ServiceID should be uimsbf ???
- gb.BitRead(2);
- InfoEvent.VersionNumber = (UINT8)gb.BitRead(5);
- InfoEvent.CurrentNextIndicator = (UINT8)gb.BitRead(1);
-
- InfoEvent.SectionNumber = (UINT8)gb.BitRead(8);
- InfoEvent.LastSectionNumber = (UINT8)gb.BitRead(8);
- InfoEvent.TransportStreamID = (WORD)gb.BitRead(16);
- InfoEvent.OriginalNetworkID = (WORD)gb.BitRead(16);
- InfoEvent.SegmentLastSectionNumber = (UINT8)gb.BitRead(8);
- InfoEvent.LastTableID = (UINT8)gb.BitRead(8);
-
- // Info event
- InfoEvent.EventID = (WORD)gb.BitRead(16);
- InfoEvent.StartDate = (WORD)gb.BitRead(16);
- SetTime(gb, NowNext);
-
- InfoEvent.RunninStatus = (WORD)gb.BitRead(3);
- InfoEvent.FreeCAMode = (WORD)gb.BitRead(1);
-
- NowNext.extendedDescriptorsItemsDesc.RemoveAll();
- NowNext.extendedDescriptorsItemsContent.RemoveAll();
- NowNext.extendedDescriptorsTexts.RemoveAll();
- NowNext.parentalRating = -1;
- NowNext.content.Empty();
-
- if ((InfoEvent.ServiceId == ulSID) && (InfoEvent.CurrentNextIndicator == 1) && (InfoEvent.RunninStatus == 4)) {
- // Descriptors:
- BeginEnumDescriptors(gb, nType, nLength) {
- switch (nType) {
- case DT_SHORT_EVENT:
- gb.BitRead(24); // ISO_639_language_code
-
- nLen = (UINT8)gb.BitRead(8); // event_name_length
- gb.ReadBuffer(DescBuffer, nLen);
- if (IsFreeviewEPG(InfoEvent.OriginalNetworkID, DescBuffer, nLen)) {
- NowNext.eventName = DecodeFreeviewEPG(DescBuffer, nLen);
- } else {
- NowNext.eventName = ConvertString(DescBuffer, nLen);
- }
-
- nLen = (UINT8)gb.BitRead(8); // text_length
- gb.ReadBuffer(DescBuffer, nLen);
- if (IsFreeviewEPG(InfoEvent.OriginalNetworkID, DescBuffer, nLen)) {
- NowNext.eventDesc = DecodeFreeviewEPG(DescBuffer, nLen);
- } else {
- NowNext.eventDesc = ConvertString(DescBuffer, nLen);
- }
- break;
- case DT_EXTENDED_EVENT:
- descriptorNumber = (UINT8)gb.BitRead(4); // descriptor_number
- gb.BitRead(4); // last_descriptor_number
- gb.BitRead(24); // ISO_639_language_code
-
- itemsLength = (UINT8)gb.BitRead(8); // length_of_items
- while (itemsLength > 0) {
- nLen = (UINT8)gb.BitRead(8); // item_description_length
- gb.ReadBuffer(DescBuffer, nLen);
- itemDesc = ConvertString(DescBuffer, nLen);
- NowNext.extendedDescriptorsItemsDesc.Add(itemDesc);
- itemsLength -= nLen + 1;
-
- nLen = (UINT8)gb.BitRead(8); // item_length
- gb.ReadBuffer(DescBuffer, nLen);
- itemText = ConvertString(DescBuffer, nLen);
- NowNext.extendedDescriptorsItemsContent.Add(itemText);
- itemsLength -= nLen + 1;
- }
+ if (InfoEvent.ServiceId == ulSID) {
+ gb.BitRead(2);
+ InfoEvent.VersionNumber = (UINT8)gb.BitRead(5);
+ InfoEvent.CurrentNextIndicator = (UINT8)gb.BitRead(1);
+ if (InfoEvent.CurrentNextIndicator == 1) {
+ InfoEvent.SectionNumber = (UINT8)gb.BitRead(8);
+ InfoEvent.LastSectionNumber = (UINT8)gb.BitRead(8);
+ InfoEvent.TransportStreamID = (WORD)gb.BitRead(16);
+ InfoEvent.OriginalNetworkID = (WORD)gb.BitRead(16);
+ InfoEvent.SegmentLastSectionNumber = (UINT8)gb.BitRead(8);
+ InfoEvent.LastTableID = (UINT8)gb.BitRead(8);
+
+ // Info event
+ InfoEvent.EventID = (WORD)gb.BitRead(16);
+ InfoEvent.StartDate = (WORD)gb.BitRead(16);
+ SetTime(gb, NowNext);
+
+ InfoEvent.RunninStatus = (WORD)gb.BitRead(3);
+ InfoEvent.FreeCAMode = (WORD)gb.BitRead(1);
+ if (InfoEvent.RunninStatus == 4) {
+ UINT8 nLen;
+ UINT8 itemsLength;
+
+ // Descriptors:
+ BeginEnumDescriptors(gb, nType, nLength) {
+ switch (nType) {
+ case DT_SHORT_EVENT:
+ gb.BitRead(24); // ISO_639_language_code
+
+ nLen = (UINT8)gb.BitRead(8); // event_name_length
+ gb.ReadBuffer(DescBuffer, nLen);
+ if (IsFreeviewEPG(InfoEvent.OriginalNetworkID, DescBuffer, nLen)) {
+ NowNext.eventName = DecodeFreeviewEPG(DescBuffer, nLen);
+ } else {
+ NowNext.eventName = ConvertString(DescBuffer, nLen);
+ }
- nLen = (UINT8)gb.BitRead(8); // text_length
- if (nLen > 0) {
- gb.ReadBuffer(DescBuffer, nLen);
- text = ConvertString(DescBuffer, nLen);
- if (descriptorNumber == 0) { // new descriptor set
- NowNext.extendedDescriptorsTexts.AddTail(text.TrimLeft());
- } else {
- NowNext.extendedDescriptorsTexts.GetTail().Append(text);
- }
- }
- break;
- case DT_PARENTAL_RATING: {
- ASSERT(nLength % 4 == 0);
- int rating = -1;
- while (nLength >= 4) {
- gb.BitRead(24); // ISO 3166 country_code
- rating = (int)gb.BitRead(8); // rating
- nLength -= 4;
- }
- if (rating >= 0 && rating <= 0x0f) {
- if (rating > 0) { // 0x00 undefined
- rating += 3; // 0x01 to 0x0F minimum age = rating + 3 years
- }
- NowNext.parentalRating = rating;
- }
- }
- break;
- case DT_CONTENT:
- ASSERT(nLength % 2 == 0);
- while (nLength >= 2) {
- BYTE content = (BYTE)gb.BitRead(4); // content_nibble_level_1
- gb.BitRead(4); // content_nibble_level_2
- gb.BitRead(8); // user_byte
- if (1 <= content && content <= 10) {
- if (!NowNext.content.IsEmpty()) {
- NowNext.content.Append(_T(", "));
+ nLen = (UINT8)gb.BitRead(8); // text_length
+ gb.ReadBuffer(DescBuffer, nLen);
+ if (IsFreeviewEPG(InfoEvent.OriginalNetworkID, DescBuffer, nLen)) {
+ NowNext.eventDesc = DecodeFreeviewEPG(DescBuffer, nLen);
+ } else {
+ NowNext.eventDesc = ConvertString(DescBuffer, nLen);
+ }
+ break;
+ case DT_EXTENDED_EVENT:
+ gb.BitRead(4); // descriptor_number
+ gb.BitRead(4); // last_descriptor_number
+ gb.BitRead(24); // ISO_639_language_code
+
+ itemsLength = (UINT8)gb.BitRead(8); // length_of_items
+ while (itemsLength > 0) {
+ nLen = (UINT8)gb.BitRead(8); // item_description_length
+ gb.ReadBuffer(DescBuffer, nLen);
+ CString itemDesc = ConvertString(DescBuffer, nLen);
+ itemsLength -= nLen + 1;
+
+ nLen = (UINT8)gb.BitRead(8); // item_length
+ gb.ReadBuffer(DescBuffer, nLen);
+ CString itemText = ConvertString(DescBuffer, nLen);
+ itemsLength -= nLen + 1;
+ NowNext.extendedDescriptorsItems.emplace_back(itemDesc, itemText);
}
- static UINT contents[] = {
- IDS_CONTENT_MOVIE_DRAMA,
- IDS_CONTENT_NEWS_CURRENTAFFAIRS,
- IDS_CONTENT_SHOW_GAMESHOW,
- IDS_CONTENT_SPORTS,
- IDS_CONTENT_CHILDREN_YOUTH_PROG,
- IDS_CONTENT_MUSIC_BALLET_DANCE,
- IDS_CONTENT_MUSIC_ART_CULTURE,
- IDS_CONTENT_SOCIAL_POLITICAL_ECO,
- IDS_CONTENT_EDUCATION_SCIENCE,
- IDS_CONTENT_LEISURE
- };
-
- NowNext.content.Append(ResStr(contents[content - 1]));
+ nLen = (UINT8)gb.BitRead(8); // text_length
+ if (nLen > 0) {
+ gb.ReadBuffer(DescBuffer, nLen);
+ NowNext.extendedDescriptorsText += ConvertString(DescBuffer, nLen);
+ }
+ break;
+ case DT_PARENTAL_RATING: {
+ ASSERT(nLength % 4 == 0);
+ int rating = -1;
+ while (nLength >= 4) {
+ gb.BitRead(24); // ISO 3166 country_code
+ rating = (int)gb.BitRead(8); // rating
+ nLength -= 4;
+ }
+ if (rating >= 0 && rating <= 0x0f) {
+ if (rating > 0) { // 0x00 undefined
+ rating += 3; // 0x01 to 0x0F minimum age = rating + 3 years
+ }
+ NowNext.parentalRating = rating;
+ }
}
- nLength -= 2;
+ break;
+ case DT_CONTENT:
+ ASSERT(nLength % 2 == 0);
+ while (nLength >= 2) {
+ BYTE content = (BYTE)gb.BitRead(4); // content_nibble_level_1
+ gb.BitRead(4); // content_nibble_level_2
+ gb.BitRead(8); // user_byte
+ if (1 <= content && content <= 10) {
+ if (!NowNext.content.IsEmpty()) {
+ NowNext.content.Append(_T(", "));
+ }
+
+ static UINT contents[] = {
+ IDS_CONTENT_MOVIE_DRAMA,
+ IDS_CONTENT_NEWS_CURRENTAFFAIRS,
+ IDS_CONTENT_SHOW_GAMESHOW,
+ IDS_CONTENT_SPORTS,
+ IDS_CONTENT_CHILDREN_YOUTH_PROG,
+ IDS_CONTENT_MUSIC_BALLET_DANCE,
+ IDS_CONTENT_MUSIC_ART_CULTURE,
+ IDS_CONTENT_SOCIAL_POLITICAL_ECO,
+ IDS_CONTENT_EDUCATION_SCIENCE,
+ IDS_CONTENT_LEISURE
+ };
+
+ NowNext.content.AppendFormat(contents[content - 1]);
+ }
+ nLength -= 2;
+ }
+ break;
+ default:
+ SkipDescriptor(gb, nType, nLength);
+ break;
}
- break;
- default:
- SkipDescriptor(gb, nType, nLength);
- break;
+ }
+ EndEnumDescriptors;
}
}
- EndEnumDescriptors;
}
m_Filter.SectionNumber++;
- pSectionList.Release();
- } while (((InfoEvent.ServiceId != ulSID) || (InfoEvent.CurrentNextIndicator != 1) || (InfoEvent.RunninStatus != 4)) &&
- (m_Filter.SectionNumber <= 22));
-
- if (InfoEvent.ServiceId != ulSID) {
- NowNext.startTime = 0;
- NowNext.duration = 0;
- NowNext.strStartTime.Empty();
- NowNext.strEndTime.Empty();
- NowNext.eventName.Empty();
- NowNext.eventDesc.Empty();
- return E_FAIL;
+ } while ((InfoEvent.ServiceId != ulSID || InfoEvent.RunninStatus != 4) && m_Filter.SectionNumber <= 22);
+
+ if (m_Filter.SectionNumber > 22 || InfoEvent.CurrentNextIndicator != 1) {
+ NowNext = EventDescriptor();
+ hr = E_FAIL;
}
- return S_OK;
+ return hr;
}
HRESULT CMpeg2DataParser::ParseNIT()
@@ -716,7 +720,7 @@ HRESULT CMpeg2DataParser::ParseNIT()
WORD logical_channel_number = (WORD)gb.BitRead(10);
if (Channels.Lookup(service_id)) {
Channels[service_id].SetOriginNumber(logical_channel_number);
- TRACE(_T("NIT association : %d -> %s\n"), logical_channel_number, Channels[service_id].ToString());
+ BDA_LOG(_T("NIT association : %d -> %s"), logical_channel_number, Channels[service_id].ToString());
}
}
break;
diff --git a/src/mpc-hc/Mpeg2SectionData.h b/src/mpc-hc/Mpeg2SectionData.h
index cdcb44807..93d93a46b 100644
--- a/src/mpc-hc/Mpeg2SectionData.h
+++ b/src/mpc-hc/Mpeg2SectionData.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2013 see Authors.txt
+ * (C) 2009-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,10 @@
#pragma once
#include "DVBChannel.h"
+#include <mpeg2structs.h>
+#include <mpeg2data.h>
+
+class CGolombBuffer;
#pragma pack(push, 1)
struct SI_HEADER {
@@ -66,7 +70,7 @@ class CMpeg2DataParser
public:
CMpeg2DataParser(IBaseFilter* pFilter);
- HRESULT ParseSDT(ULONG ulFreq);
+ HRESULT ParseSDT(ULONG ulFrequency, ULONG ulBandwidth);
HRESULT ParsePAT();
HRESULT ParseNIT();
HRESULT ParseEIT(ULONG ulSID, EventDescriptor& NowNext);
diff --git a/src/mpc-hc/OpenDirHelper.cpp b/src/mpc-hc/OpenDirHelper.cpp
index 75593c833..244ee9f81 100644
--- a/src/mpc-hc/OpenDirHelper.cpp
+++ b/src/mpc-hc/OpenDirHelper.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,7 +22,7 @@
#include "stdafx.h"
#include "MainFrm.h"
#include "OpenDirHelper.h"
-#include "WinAPIUtils.h"
+#include "PathUtils.h"
WNDPROC COpenDirHelper::CBProc;
@@ -111,27 +111,3 @@ int CALLBACK COpenDirHelper::BrowseCallbackProcDIR(HWND hwnd, UINT uMsg, LPARAM
return 0;
}
-
-void COpenDirHelper::RecurseAddDir(CString path, CAtlList<CString>* sl)
-{
- WIN32_FIND_DATA fd;
- ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
-
- HANDLE hFind = FindFirstFile(path + _T("*.*"), &fd);
- if (hFind != INVALID_HANDLE_VALUE) {
- do {
- CString f_name = fd.cFileName;
- if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (f_name != _T(".")) && (f_name != _T(".."))) {
- CString fullpath = path + f_name;
- if (fullpath[fullpath.GetLength() - 1] != '\\') {
- fullpath += '\\';
- }
- sl->AddTail(fullpath);
- RecurseAddDir(fullpath, sl);
- } else {
- continue;
- }
- } while (FindNextFile(hFind, &fd));
- FindClose(hFind);
- }
-}
diff --git a/src/mpc-hc/OpenDirHelper.h b/src/mpc-hc/OpenDirHelper.h
index 5b93d07fb..d6d48e6d8 100644
--- a/src/mpc-hc/OpenDirHelper.h
+++ b/src/mpc-hc/OpenDirHelper.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -33,6 +33,4 @@ public:
static LRESULT APIENTRY CheckBoxSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static int CALLBACK BrowseCallbackProcDIR(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
-
- static void RecurseAddDir(CString path, CAtlList<CString>* sl);
};
diff --git a/src/mpc-hc/OpenDlg.cpp b/src/mpc-hc/OpenDlg.cpp
index 2c0d91b4f..fe8eadbde 100644
--- a/src/mpc-hc/OpenDlg.cpp
+++ b/src/mpc-hc/OpenDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#include "stdafx.h"
#include <atlpath.h>
#include "mplayerc.h"
+#include "PathUtils.h"
#include "OpenDlg.h"
#include "OpenFileDlg.h"
@@ -31,10 +32,8 @@
//IMPLEMENT_DYNAMIC(COpenDlg, CResizableDialog)
COpenDlg::COpenDlg(CWnd* pParent /*=nullptr*/)
: CResizableDialog(COpenDlg::IDD, pParent)
- , m_path(_T(""))
- , m_path2(_T(""))
- , m_fMultipleFiles(false)
- , m_fAppendPlaylist(FALSE)
+ , m_bAppendToPlaylist(FALSE)
+ , m_bMultipleFiles(false)
{
}
@@ -46,19 +45,19 @@ void COpenDlg::DoDataExchange(CDataExchange* pDX)
{
__super::DoDataExchange(pDX);
DDX_Control(pDX, IDR_MAINFRAME, m_icon);
- DDX_Control(pDX, IDC_COMBO1, m_mrucombo);
+ DDX_Control(pDX, IDC_COMBO1, m_cbMRU);
DDX_CBString(pDX, IDC_COMBO1, m_path);
- DDX_Control(pDX, IDC_COMBO2, m_mrucombo2);
- DDX_CBString(pDX, IDC_COMBO2, m_path2);
- DDX_Control(pDX, IDC_STATIC1, m_label2);
- DDX_Check(pDX, IDC_CHECK1, m_fAppendPlaylist);
+ DDX_Control(pDX, IDC_COMBO2, m_cbMRUDub);
+ DDX_CBString(pDX, IDC_COMBO2, m_pathDub);
+ DDX_Control(pDX, IDC_STATIC1, m_labelDub);
+ DDX_Check(pDX, IDC_CHECK1, m_bAppendToPlaylist);
}
BEGIN_MESSAGE_MAP(COpenDlg, CResizableDialog)
- ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedBrowsebutton)
- ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedBrowsebutton2)
- ON_BN_CLICKED(IDOK, OnBnClickedOk)
+ ON_BN_CLICKED(IDC_BUTTON1, OnBrowseFile)
+ ON_BN_CLICKED(IDC_BUTTON2, OnBrowseDubFile)
+ ON_BN_CLICKED(IDOK, OnOk)
ON_UPDATE_COMMAND_UI(IDC_STATIC1, OnUpdateDub)
ON_UPDATE_COMMAND_UI(IDC_COMBO2, OnUpdateDub)
ON_UPDATE_COMMAND_UI(IDC_BUTTON2, OnUpdateDub)
@@ -78,36 +77,36 @@ BOOL COpenDlg::OnInitDialog()
CRecentFileList& MRU = s.MRU;
MRU.ReadList();
- m_mrucombo.ResetContent();
+ m_cbMRU.ResetContent();
for (int i = 0; i < MRU.GetSize(); i++) {
if (!MRU[i].IsEmpty()) {
- m_mrucombo.AddString(MRU[i]);
+ m_cbMRU.AddString(MRU[i]);
}
}
- CorrectComboListWidth(m_mrucombo);
+ CorrectComboListWidth(m_cbMRU);
CRecentFileList& MRUDub = s.MRUDub;
MRUDub.ReadList();
- m_mrucombo2.ResetContent();
+ m_cbMRUDub.ResetContent();
for (int i = 0; i < MRUDub.GetSize(); i++) {
if (!MRUDub[i].IsEmpty()) {
- m_mrucombo2.AddString(MRUDub[i]);
+ m_cbMRUDub.AddString(MRUDub[i]);
}
}
- CorrectComboListWidth(m_mrucombo2);
+ CorrectComboListWidth(m_cbMRUDub);
- if (m_mrucombo.GetCount() > 0) {
- m_mrucombo.SetCurSel(0);
+ if (m_cbMRU.GetCount() > 0) {
+ m_cbMRU.SetCurSel(0);
}
m_fns.RemoveAll();
- m_path = _T("");
- m_path2 = _T("");
- m_fMultipleFiles = false;
- m_fAppendPlaylist = FALSE;
+ m_path.Empty();
+ m_pathDub.Empty();
+ m_bMultipleFiles = false;
+ m_bAppendToPlaylist = FALSE;
- AddAnchor(m_mrucombo, TOP_LEFT, TOP_RIGHT);
- AddAnchor(m_mrucombo2, TOP_LEFT, TOP_RIGHT);
+ AddAnchor(m_cbMRU, TOP_LEFT, TOP_RIGHT);
+ AddAnchor(m_cbMRUDub, TOP_LEFT, TOP_RIGHT);
AddAnchor(IDC_BUTTON1, TOP_RIGHT);
AddAnchor(IDC_BUTTON2, TOP_RIGHT);
AddAnchor(IDOK, TOP_RIGHT);
@@ -132,7 +131,7 @@ static CString GetFileName(CString str)
return (LPCTSTR)p;
}
-void COpenDlg::OnBnClickedBrowsebutton()
+void COpenDlg::OnBrowseFile()
{
UpdateData();
@@ -171,15 +170,15 @@ void COpenDlg::OnBnClickedBrowsebutton()
|| m_fns.GetCount() == 1
&& (m_fns.GetHead()[m_fns.GetHead().GetLength() - 1] == '\\'
|| m_fns.GetHead()[m_fns.GetHead().GetLength() - 1] == '*')) {
- m_fMultipleFiles = true;
+ m_bMultipleFiles = true;
EndDialog(IDOK);
return;
}
- m_mrucombo.SetWindowText(fd.GetPathName());
+ m_cbMRU.SetWindowText(fd.GetPathName());
}
-void COpenDlg::OnBnClickedBrowsebutton2()
+void COpenDlg::OnBrowseDubFile()
{
UpdateData();
@@ -194,26 +193,26 @@ void COpenDlg::OnBnClickedBrowsebutton2()
dwFlags |= OFN_DONTADDTORECENT;
}
- COpenFileDlg fd(mask, false, nullptr, m_path2, dwFlags, filter, this);
+ COpenFileDlg fd(mask, false, nullptr, m_pathDub, dwFlags, filter, this);
if (fd.DoModal() != IDOK) {
return;
}
- m_mrucombo2.SetWindowText(fd.GetPathName());
+ m_cbMRUDub.SetWindowText(fd.GetPathName());
}
-void COpenDlg::OnBnClickedOk()
+void COpenDlg::OnOk()
{
UpdateData();
m_fns.RemoveAll();
- m_fns.AddTail(m_path);
- if (m_mrucombo2.IsWindowEnabled()) {
- m_fns.AddTail(m_path2);
+ m_fns.AddTail(PathUtils::Unquote(m_path));
+ if (m_cbMRUDub.IsWindowEnabled()) {
+ m_fns.AddTail(PathUtils::Unquote(m_pathDub));
}
- m_fMultipleFiles = false;
+ m_bMultipleFiles = false;
OnOK();
}
@@ -227,5 +226,5 @@ void COpenDlg::OnUpdateDub(CCmdUI* pCmdUI)
void COpenDlg::OnUpdateOk(CCmdUI* pCmdUI)
{
UpdateData();
- pCmdUI->Enable(!m_path.IsEmpty() || !m_path2.IsEmpty());
+ pCmdUI->Enable(!m_path.IsEmpty() || !m_pathDub.IsEmpty());
}
diff --git a/src/mpc-hc/OpenDlg.h b/src/mpc-hc/OpenDlg.h
index 6b2279c8a..dac1f61c9 100644
--- a/src/mpc-hc/OpenDlg.h
+++ b/src/mpc-hc/OpenDlg.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -30,35 +30,38 @@
class COpenDlg : public CResizableDialog
{
// DECLARE_DYNAMIC(COpenDlg)
+private:
+ CStatic m_icon;
+ CComboBox m_cbMRU;
+ CString m_path;
+ CComboBox m_cbMRUDub;
+ CString m_pathDub;
+ CStatic m_labelDub;
+ BOOL m_bAppendToPlaylist;
+
+ bool m_bMultipleFiles;
+ CAtlList<CString> m_fns;
public:
- COpenDlg(CWnd* pParent = nullptr); // standard constructor
+ COpenDlg(CWnd* pParent = nullptr);
virtual ~COpenDlg();
- bool m_fMultipleFiles;
- CAtlList<CString> m_fns;
-
// Dialog Data
enum { IDD = IDD_OPEN_DLG };
- CComboBox m_mrucombo;
- CString m_path;
- CComboBox m_mrucombo2;
- CString m_path2;
- CStatic m_label2;
- BOOL m_fAppendPlaylist;
-protected:
- CStatic m_icon;
+ const CAtlList<CString>& GetFileNames() const { return m_fns; }
+ bool HasMultipleFiles() const { return m_bMultipleFiles; }
+ bool GetAppendToPlaylist() const { return !!m_bAppendToPlaylist; }
+protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
-public:
- afx_msg void OnBnClickedBrowsebutton();
- afx_msg void OnBnClickedBrowsebutton2();
- afx_msg void OnBnClickedOk();
+ afx_msg void OnBrowseFile();
+ afx_msg void OnBrowseDubFile();
+ afx_msg void OnOk();
afx_msg void OnUpdateDub(CCmdUI* pCmdUI);
afx_msg void OnUpdateOk(CCmdUI* pCmdUI);
};
diff --git a/src/mpc-hc/OpenFileDlg.cpp b/src/mpc-hc/OpenFileDlg.cpp
index f32e85d57..c50821836 100644
--- a/src/mpc-hc/OpenFileDlg.cpp
+++ b/src/mpc-hc/OpenFileDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -121,27 +121,21 @@ BOOL COpenFileDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
BOOL COpenFileDlg::OnIncludeItem(OFNOTIFYEX* pOFNEx, LRESULT* pResult)
{
- TCHAR buff[MAX_PATH];
- if (!SHGetPathFromIDList((PIDLIST_ABSOLUTE)pOFNEx->pidl, buff)) {
+ CString fn;
+ if (!SHGetPathFromIDList((PIDLIST_ABSOLUTE)pOFNEx->pidl, fn.GetBuffer(MAX_PATH))) {
+ fn.ReleaseBuffer(0);
+ IShellFolder* psf = (IShellFolder*)pOFNEx->psf;
+ PCUITEMID_CHILD pidl = (PCUITEMID_CHILD)pOFNEx->pidl;
STRRET s;
- HRESULT hr = ((IShellFolder*)pOFNEx->psf)->GetDisplayNameOf((PCUITEMID_CHILD)pOFNEx->pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &s);
- if (S_OK != hr) {
- return FALSE;
- }
- switch (s.uType) {
- case STRRET_CSTR:
- _tcscpy_s(buff, CString(s.cStr));
- break;
- case STRRET_WSTR:
- _tcscpy_s(buff, CString(s.pOleStr));
- CoTaskMemFree(s.pOleStr);
- break;
- default:
- return FALSE;
+ CComHeapPtr<TCHAR> fnTmp;
+ if (SUCCEEDED(psf->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &s))
+ && SUCCEEDED(StrRetToStr(&s, pidl, &fnTmp))) {
+ fn = fnTmp;
}
+ } else {
+ fn.ReleaseBuffer();
}
- CString fn(buff);
/*
WIN32_FILE_ATTRIBUTE_DATA fad;
if (GetFileAttributesEx(fn, GetFileExInfoStandard, &fad)
diff --git a/src/mpc-hc/PPageAccelTbl.cpp b/src/mpc-hc/PPageAccelTbl.cpp
index 434215a9b..d85adbc10 100644
--- a/src/mpc-hc/PPageAccelTbl.cpp
+++ b/src/mpc-hc/PPageAccelTbl.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#include "stdafx.h"
#include "mplayerc.h"
#include "PPageAccelTbl.h"
+#include "AppSettings.h"
struct APP_COMMAND {
@@ -29,7 +30,7 @@ struct APP_COMMAND {
LPCTSTR cmdname;
};
-APP_COMMAND g_CommandList[] = {
+static constexpr APP_COMMAND g_CommandList[] = {
{0, _T("")},
{APPCOMMAND_BROWSER_BACKWARD, _T("BROWSER_BACKWARD")},
{APPCOMMAND_BROWSER_FORWARD, _T("BROWSER_FORWARD")},
@@ -113,8 +114,8 @@ APP_COMMAND g_CommandList[] = {
IMPLEMENT_DYNAMIC(CPPageAccelTbl, CPPageBase)
CPPageAccelTbl::CPPageAccelTbl()
: CPPageBase(CPPageAccelTbl::IDD, CPPageAccelTbl::IDD)
- , m_list(0)
, m_counter(0)
+ , m_list(0)
, m_fWinLirc(FALSE)
, m_WinLircLink(_T("http://winlirc.sourceforge.net/"))
, m_fUIce(FALSE)
@@ -854,7 +855,7 @@ CString CPPageAccelTbl::MakeAppCommandLabel(UINT id)
return CString(g_CommandList[i].cmdname);
}
}
- return CString("");
+ return _T("");
}
void CPPageAccelTbl::DoDataExchange(CDataExchange* pDX)
@@ -1168,7 +1169,8 @@ void CPPageAccelTbl::OnEndListLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
wc.fVirt |= FSHIFT;
}
wc.fVirt |= FVIRTKEY;
- wc.key = cod;
+ ASSERT(cod < WORD_MAX);
+ wc.key = (WORD)cod;
CString str;
HotkeyToString(cod, mod, str);
@@ -1187,24 +1189,27 @@ void CPPageAccelTbl::OnEndListLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
}
break;
case COL_MOUSE:
- wc.mouse = (UINT)pItem->lParam;
+ wc.mouse = BYTE(pItem->lParam);
m_list.SetItemText(pItem->iItem, COL_MOUSE, pItem->pszText);
*pResult = TRUE;
break;
case COL_MOUSE_FS:
- wc.mouseFS = (UINT)pItem->lParam;
+ wc.mouseFS = BYTE(pItem->lParam);
m_list.SetItemText(pItem->iItem, COL_MOUSE_FS, pItem->pszText);
*pResult = TRUE;
break;
- case COL_RMCMD:
- wc.rmcmd = CStringA(CString(pItem->pszText)).Trim();
- wc.rmcmd.Replace(' ', '_');
- m_list.SetItemText(pItem->iItem, pItem->iSubItem, CString(wc.rmcmd));
+ case COL_RMCMD: {
+ CString cmd = pItem->pszText;
+ cmd.Trim();
+ cmd.Replace(_T(' '), ('_'));
+ m_list.SetItemText(pItem->iItem, pItem->iSubItem, cmd);
+ wc.rmcmd = cmd;
*pResult = TRUE;
break;
+ }
case COL_RMREPCNT:
- CString str = CString(pItem->pszText).Trim();
- wc.rmrepcnt = _tcstol(str, nullptr, 10);
+ CString str = pItem->pszText;
+ wc.rmrepcnt = _tcstol(str.Trim(), nullptr, 10);
str.Format(_T("%d"), wc.rmrepcnt);
m_list.SetItemText(pItem->iItem, pItem->iSubItem, str);
*pResult = TRUE;
diff --git a/src/mpc-hc/PPageAdvanced.cpp b/src/mpc-hc/PPageAdvanced.cpp
index cbe31614a..b76d913a1 100644
--- a/src/mpc-hc/PPageAdvanced.cpp
+++ b/src/mpc-hc/PPageAdvanced.cpp
@@ -1,5 +1,5 @@
/*
-* (C) 2014 see Authors.txt
+* (C) 2014-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -19,14 +19,18 @@
*/
#include "stdafx.h"
-#include <strsafe.h>
#include "PPageAdvanced.h"
#include "mplayerc.h"
-#include "SettingsDefines.h"
+#include "MainFrm.h"
+#include "EventDispatcher.h"
+#include <strsafe.h>
CPPageAdvanced::CPPageAdvanced()
: CPPageBase(IDD, IDD)
{
+ EventRouter::EventSelection fires;
+ fires.insert(MpcEvent::DEFAULT_TOOLBAR_SIZE_CHANGED);
+ GetEventd().Connect(m_eventc, fires);
}
void CPPageAdvanced::DoDataExchange(CDataExchange* pDX)
@@ -34,6 +38,7 @@ void CPPageAdvanced::DoDataExchange(CDataExchange* pDX)
__super::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_list);
DDX_Control(pDX, IDC_COMBO1, m_comboBox);
+ DDX_Control(pDX, IDC_SPIN1, m_spinButtonCtrl);
}
BOOL CPPageAdvanced::OnInitDialog()
@@ -57,11 +62,17 @@ BOOL CPPageAdvanced::OnInitDialog()
pToolTip->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOREDRAW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOOWNERZORDER);
}
+ m_spinButtonCtrl.SetBuddy(GetDlgItem(IDC_EDIT1));
+
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_HIDE);
+ GetDlgItem(IDC_SPIN1)->ShowWindow(SW_HIDE);
+
+ GetDlgItemText(IDC_RADIO1, m_strTrue);
+ GetDlgItemText(IDC_RADIO2, m_strFalse);
InitSettings();
@@ -79,7 +90,7 @@ void CPPageAdvanced::InitSettings()
auto addBoolItem = [this](int nItem, CString name, bool defaultValue, bool & settingReference, CString toolTipText) {
auto pItem = std::make_shared<SettingsBool>(name, defaultValue, settingReference, toolTipText);
int iItem = m_list.InsertItem(nItem, pItem->GetName());
- m_list.SetItemText(iItem, COL_VALUE, (pItem->GetValue() ? _T("true") : _T("false")));
+ m_list.SetItemText(iItem, COL_VALUE, (pItem->GetValue() ? m_strTrue : m_strFalse));
m_list.SetItemData(iItem, nItem);
m_hiddenOptions[static_cast<ADVANCED_SETTINGS>(nItem)] = pItem;
};
@@ -118,28 +129,50 @@ void CPPageAdvanced::InitSettings()
m_hiddenOptions[static_cast<ADVANCED_SETTINGS>(nItem)] = pItem;
};
- addBoolItem(HIDE_WINDOWED, IDS_RS_HIDE_WINDOWED_CONTROLS, false, s.bHideWindowedControls, ResStr(IDS_PPAGEADVANCED_HIDE_WINDOWED));
- addBoolItem(BLOCK_VSFILTER, IDS_RS_BLOCKVSFILTER, true, s.fBlockVSFilter, ResStr(IDS_PPAGEADVANCED_BLOCK_VSFILTER));
- addIntItem(RECENT_FILES_NB, IDS_RS_RECENT_FILES_NUMBER, 20, s.iRecentFilesNumber, std::make_pair(0, 1000), ResStr(IDS_PPAGEADVANCED_RECENT_FILES_NUMBER));
- addIntItem(FILE_POS_LONGER, IDS_RS_FILEPOSLONGER, 0, s.iRememberPosForLongerThan, std::make_pair(0, INT_MAX), ResStr(IDS_PPAGEADVANCED_FILE_POS_LONGER));
- addBoolItem(FILE_POS_AUDIO, IDS_RS_FILEPOSAUDIO, true, s.bRememberPosForAudioFiles, ResStr(IDS_PPAGEADVANCED_FILE_POS_AUDIO));
- addIntItem(COVER_SIZE_LIMIT, IDS_RS_COVER_ART_SIZE_LIMIT, 600, s.nCoverArtSizeLimit, std::make_pair(0, INT_MAX), ResStr(IDS_PPAGEADVANCED_COVER_SIZE_LIMIT));
+ addBoolItem(HIDE_WINDOWED, IDS_RS_HIDE_WINDOWED_CONTROLS, false, s.bHideWindowedControls, StrRes(IDS_PPAGEADVANCED_HIDE_WINDOWED));
+ addBoolItem(BLOCK_VSFILTER, IDS_RS_BLOCKVSFILTER, true, s.fBlockVSFilter, StrRes(IDS_PPAGEADVANCED_BLOCK_VSFILTER));
+ addIntItem(RECENT_FILES_NB, IDS_RS_RECENT_FILES_NUMBER, 20, s.iRecentFilesNumber, std::make_pair(0, 1000), StrRes(IDS_PPAGEADVANCED_RECENT_FILES_NUMBER));
+ addIntItem(FILE_POS_LONGER, IDS_RS_FILEPOSLONGER, 0, s.iRememberPosForLongerThan, std::make_pair(0, INT_MAX), StrRes(IDS_PPAGEADVANCED_FILE_POS_LONGER));
+ addBoolItem(FILE_POS_AUDIO, IDS_RS_FILEPOSAUDIO, true, s.bRememberPosForAudioFiles, StrRes(IDS_PPAGEADVANCED_FILE_POS_AUDIO));
+ addIntItem(COVER_SIZE_LIMIT, IDS_RS_COVER_ART_SIZE_LIMIT, 600, s.nCoverArtSizeLimit, std::make_pair(0, INT_MAX), StrRes(IDS_PPAGEADVANCED_COVER_SIZE_LIMIT));
+ addBoolItem(LOGGING, IDS_RS_LOGGING, false, s.bEnableLogging, StrRes(IDS_PPAGEADVANCED_LOGGER));
+ addIntItem(AUTO_DOWNLOAD_SCORE_MOVIES, IDS_RS_AUTODOWNLOADSCOREMOVIES, 0x16, s.nAutoDownloadScoreMovies,
+ std::make_pair(10, 30), StrRes(IDS_PPAGEADVANCED_SCORE));
+ addIntItem(AUTO_DOWNLOAD_SCORE_SERIES, IDS_RS_AUTODOWNLOADSCORESERIES, 0x18, s.nAutoDownloadScoreSeries,
+ std::make_pair(10, 30), StrRes(IDS_PPAGEADVANCED_SCORE));
+ addIntItem(DEFAULT_TOOLBAR_SIZE, IDS_RS_DEFAULTTOOLBARSIZE, 24, s.nDefaultToolbarSize,
+ std::make_pair(16, 128), StrRes(IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE));
+ addBoolItem(USE_LEGACY_TOOLBAR, IDS_RS_USE_LEGACY_TOOLBAR, false, s.bUseLegacyToolbar, StrRes(IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR));
}
BOOL CPPageAdvanced::OnApply()
{
+ auto& s = AfxGetAppSettings();
+
+ int nOldDefaultToolbarSize = s.nDefaultToolbarSize;
+
for (int i = 0; i < m_list.GetItemCount(); i++) {
auto eSetting = static_cast<ADVANCED_SETTINGS>(m_list.GetItemData(i));
m_hiddenOptions.at(eSetting)->Apply();
}
- auto& s = AfxGetAppSettings();
-
s.MRU.SetSize(s.iRecentFilesNumber);
s.MRUDub.SetSize(s.iRecentFilesNumber);
s.filePositions.SetMaxSize(s.iRecentFilesNumber);
s.dvdPositions.SetMaxSize(s.iRecentFilesNumber);
+ // There is no main frame when the option dialog is displayed stand-alone
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
+ pMainFrame->UpdateControlState(CMainFrame::UPDATE_CONTROLS_VISIBILITY);
+ }
+
+ if (nOldDefaultToolbarSize != s.nDefaultToolbarSize) {
+ m_eventc.FireEvent(MpcEvent::DEFAULT_TOOLBAR_SIZE_CHANGED);
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
+ pMainFrame->RecalcLayout();
+ }
+ }
+
return __super::OnApply();
}
@@ -167,14 +200,13 @@ void CPPageAdvanced::OnBnClickedDefaultButton()
const int iItem = GetListSelectionMark();
if (iItem >= 0) {
- SetRedraw(FALSE);
CString str;
auto eSetting = static_cast<ADVANCED_SETTINGS>(m_list.GetItemData(iItem));
auto pItem = m_hiddenOptions.at(eSetting);
pItem->ResetDefault();
if (auto pItemBool = std::dynamic_pointer_cast<SettingsBool>(pItem)) {
- str = pItemBool->GetValue() ? _T("true") : _T("false");
+ str = pItemBool->GetValue() ? m_strTrue : m_strFalse;
SetDlgItemText(IDC_EDIT1, str);
if (pItemBool->GetValue()) {
CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);
@@ -192,14 +224,12 @@ void CPPageAdvanced::OnBnClickedDefaultButton()
str = pItemCString->GetValue();
SetDlgItemText(IDC_EDIT1, pItemCString->GetValue());
} else {
- ASSERT(FALSE);
- return;
+ UNREACHABLE_CODE();
}
m_list.SetItemText(iItem, COL_VALUE, str);
UpdateData(FALSE);
- SetRedraw(TRUE);
- Invalidate();
+ m_list.Update(iItem);
SetModified();
}
}
@@ -222,18 +252,16 @@ void CPPageAdvanced::OnNMDblclk(NMHDR* pNMHDR, LRESULT* pResult)
auto eSetting = static_cast<ADVANCED_SETTINGS>(m_list.GetItemData(pNMItemActivate->iItem));
auto pItem = m_hiddenOptions.at(eSetting);
if (auto pItemBool = std::dynamic_pointer_cast<SettingsBool>(pItem)) {
- SetRedraw(FALSE);
pItemBool->Toggle();
- CString str = pItemBool->GetValue() ? _T("true") : _T("false");
- m_list.SetItemText(pNMItemActivate->iItem, COL_VALUE, str);
+ m_list.SetItemText(pNMItemActivate->iItem, COL_VALUE,
+ pItemBool->GetValue() ? m_strTrue : m_strFalse);
if (pItemBool->GetValue()) {
CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);
} else {
CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO2);
}
UpdateData(FALSE);
- SetRedraw(TRUE);
- Invalidate();
+ m_list.Update(pNMItemActivate->iItem);
SetModified();
}
}
@@ -279,12 +307,12 @@ void CPPageAdvanced::OnLvnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
if ((pNMLV->uChanged & LVIF_STATE) && (pNMLV->uNewState & LVNI_SELECTED)) {
- SetRedraw(FALSE);
- GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_RADIO1)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_RADIO2)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_HIDE);
+ auto setDialogItemsVisibility = [this](std::initializer_list<int> && ids, int nCmdShow) {
+ for (const auto& nID : ids) {
+ GetDlgItem(nID)->ShowWindow(nCmdShow);
+ }
+ };
+
if (pNMLV->iItem >= 0) {
m_lastSelectedItem = pNMLV->iItem;
auto eSetting = static_cast<ADVANCED_SETTINGS>(m_list.GetItemData(pNMLV->iItem));
@@ -292,14 +320,15 @@ void CPPageAdvanced::OnLvnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_SHOW);
if (auto pItemBool = std::dynamic_pointer_cast<SettingsBool>(pItem)) {
+ setDialogItemsVisibility({ IDC_EDIT1, IDC_COMBO1, IDC_SPIN1 }, SW_HIDE);
if (pItemBool->GetValue()) {
CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);
} else {
CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO2);
}
- GetDlgItem(IDC_RADIO1)->ShowWindow(SW_SHOW);
- GetDlgItem(IDC_RADIO2)->ShowWindow(SW_SHOW);
+ setDialogItemsVisibility({ IDC_RADIO1, IDC_RADIO2 }, SW_SHOW);
} else if (auto pItemCombo = std::dynamic_pointer_cast<SettingsCombo>(pItem)) {
+ setDialogItemsVisibility({ IDC_EDIT1, IDC_RADIO1, IDC_RADIO2, IDC_SPIN1 }, SW_HIDE);
m_comboBox.ResetContent();
for (const auto& str : pItemCombo->GetList()) {
m_comboBox.AddString(str);
@@ -307,17 +336,24 @@ void CPPageAdvanced::OnLvnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
m_comboBox.SetCurSel(pItemCombo->GetValue());
m_comboBox.ShowWindow(SW_SHOW);
} else if (auto pItemInt = std::dynamic_pointer_cast<SettingsInt>(pItem)) {
+ setDialogItemsVisibility({ IDC_COMBO1, IDC_RADIO1, IDC_RADIO2 }, SW_HIDE);
GetDlgItem(IDC_EDIT1)->ModifyStyle(0, ES_NUMBER, 0);
- SetDlgItemInt(IDC_EDIT1, pItemInt->GetValue());
+ const auto& range = pItemInt->GetRange();
+ m_spinButtonCtrl.SetRange32(range.first, range.second);
+ m_spinButtonCtrl.SetPos32(pItemInt->GetValue());
+ m_spinButtonCtrl.ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);
} else if (auto pItemCString = std::dynamic_pointer_cast<SettingsCString>(pItem)) {
+ setDialogItemsVisibility({ IDC_COMBO1, IDC_RADIO1, IDC_RADIO2, IDC_BUTTON1, IDC_SPIN1 }, SW_HIDE);
GetDlgItem(IDC_EDIT1)->ModifyStyle(ES_NUMBER, 0, 0);
SetDlgItemText(IDC_EDIT1, pItemCString->GetValue());
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);
+ } else {
+ UNREACHABLE_CODE();
}
+ } else {
+ setDialogItemsVisibility({ IDC_EDIT1, IDC_COMBO1, IDC_RADIO1, IDC_RADIO2, IDC_BUTTON1, IDC_SPIN1 }, SW_HIDE);
}
- SetRedraw(TRUE);
- Invalidate();
}
*pResult = 0;
@@ -331,12 +367,10 @@ void CPPageAdvanced::OnBnClickedRadio1()
auto pItem = m_hiddenOptions.at(eSetting);
if (auto pItemBool = std::dynamic_pointer_cast<SettingsBool>(pItem)) {
- SetRedraw(FALSE);
pItemBool->SetValue(true);
- m_list.SetItemText(iItem, COL_VALUE, _T("true"));
+ m_list.SetItemText(iItem, COL_VALUE, m_strTrue);
UpdateData(FALSE);
- SetRedraw(TRUE);
- Invalidate();
+ m_list.Update(iItem);
SetModified();
}
}
@@ -350,12 +384,10 @@ void CPPageAdvanced::OnBnClickedRadio2()
auto pItem = m_hiddenOptions.at(eSetting);
if (auto pItemBool = std::dynamic_pointer_cast<SettingsBool>(pItem)) {
- SetRedraw(FALSE);
pItemBool->SetValue(false);
- m_list.SetItemText(iItem, COL_VALUE, _T("false"));
+ m_list.SetItemText(iItem, COL_VALUE, m_strFalse);
UpdateData(FALSE);
- SetRedraw(TRUE);
- Invalidate();
+ m_list.Update(iItem);
SetModified();
}
}
@@ -374,7 +406,7 @@ void CPPageAdvanced::OnCbnSelchangeCombobox()
pItemCombo->SetValue(iItem);
m_list.SetItemText(nItem, COL_VALUE, list.at(iItem));
UpdateData(FALSE);
- Invalidate();
+ m_list.Update(nItem);
if (m_comboBox.IsWindowVisible()) {
SetModified();
}
@@ -418,8 +450,8 @@ void CPPageAdvanced::OnEnChangeEdit()
if (bChanged) {
m_list.SetItemText(iItem, COL_VALUE, str);
+ m_list.Update(iItem);
UpdateData(FALSE);
- Invalidate();
SetModified();
}
}
diff --git a/src/mpc-hc/PPageAdvanced.h b/src/mpc-hc/PPageAdvanced.h
index 0ada429c7..9dac3103e 100644
--- a/src/mpc-hc/PPageAdvanced.h
+++ b/src/mpc-hc/PPageAdvanced.h
@@ -1,5 +1,5 @@
/*
-* (C) 2014 see Authors.txt
+* (C) 2015-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,11 +20,9 @@
#pragma once
-#include "AppSettings.h"
#include "PPageBase.h"
#include "resource.h"
-#include <afxwin.h>
-#include <afxcmn.h>
+#include "EventDispatcher.h"
#include <utility>
#include <memory>
#include <map>
@@ -40,6 +38,7 @@ public:
: name(name)
, toolTipText(toolTipText) {
}
+ virtual ~SettingsBase() = default;
CString GetToolTipText() const { return toolTipText; }
CString GetName() const { return name; }
@@ -83,7 +82,7 @@ public:
, defaultValue(defaultValue)
, currentValue(settingReference)
, settingReference(settingReference)
- , range(range) {
+ , range(std::move(range)) {
}
bool IsDefault() const { return currentValue == defaultValue; }
@@ -101,7 +100,7 @@ class SettingsCombo : public SettingsInt
public:
SettingsCombo(CString name, int defaultValue, int& settingReference, std::deque<CString> list, CString toolTipText)
: SettingsInt(name, defaultValue, settingReference, std::make_pair(0, (int)list.size() - 1), toolTipText)
- , list(list) {
+ , list(std::move(list)) {
}
std::deque<CString> GetList() const { return list; }
@@ -143,7 +142,12 @@ private:
RECENT_FILES_NB,
FILE_POS_LONGER,
FILE_POS_AUDIO,
- COVER_SIZE_LIMIT
+ COVER_SIZE_LIMIT,
+ LOGGING,
+ AUTO_DOWNLOAD_SCORE_MOVIES,
+ AUTO_DOWNLOAD_SCORE_SERIES,
+ DEFAULT_TOOLBAR_SIZE,
+ USE_LEGACY_TOOLBAR,
};
enum {
@@ -151,13 +155,19 @@ private:
COL_VALUE
};
+ EventClient m_eventc;
+
CFont m_fontBold;
CComboBox m_comboBox;
+ CSpinButtonCtrl m_spinButtonCtrl;
std::map<ADVANCED_SETTINGS, std::shared_ptr<SettingsBase>> m_hiddenOptions;
int m_lastSelectedItem = -1;
+ CString m_strTrue;
+ CString m_strFalse;
+
void InitSettings();
bool IsDefault(ADVANCED_SETTINGS) const;
inline const int GetListSelectionMark() const {
@@ -175,9 +185,7 @@ protected:
virtual BOOL OnInitDialog() override;
virtual BOOL OnApply() override;
- afx_msg void OnBnClickedSetButton();
afx_msg void OnBnClickedDefaultButton();
- afx_msg void OnUpdateSetButton(CCmdUI* pCmdUI);
afx_msg void OnUpdateDefaultButton(CCmdUI* pCmdUI);
afx_msg void OnNMDblclk(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult);
diff --git a/src/mpc-hc/PPageAudioRenderer.cpp b/src/mpc-hc/PPageAudioRenderer.cpp
new file mode 100644
index 000000000..7c7e33b0b
--- /dev/null
+++ b/src/mpc-hc/PPageAudioRenderer.cpp
@@ -0,0 +1,235 @@
+/*
+ * (C) 2015-2016 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "PPageAudioRenderer.h"
+
+#include "mplayerc.h"
+#include "VersionInfo.h"
+
+#include <FunctionDiscoveryKeys_devpkey.h>
+#include <Mmdeviceapi.h>
+#include <sanear/sanear/src/Settings.h>
+#include "AppSettings.h"
+
+namespace
+{
+ std::vector<std::pair<CString, CString>> GetDevices()
+ {
+ std::vector<std::pair<CString, CString>> ret;
+
+ CComPtr<IMMDeviceEnumerator> enumerator;
+ CComPtr<IMMDeviceCollection> collection;
+ UINT count = 0;
+
+ if (SUCCEEDED(enumerator.CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_INPROC_SERVER)) &&
+ SUCCEEDED(enumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE | DEVICE_STATE_UNPLUGGED, &collection)) &&
+ SUCCEEDED(collection->GetCount(&count))) {
+
+ for (UINT i = 0; i < count; i++) {
+ CComPtr<IMMDevice> device;
+ CComHeapPtr<WCHAR> id;
+ CComPtr<IPropertyStore> devicePropertyStore;
+ PROPVARIANT friendlyName;
+ PropVariantInit(&friendlyName);
+
+ if (SUCCEEDED(collection->Item(i, &device)) &&
+ SUCCEEDED(device->GetId(&id)) &&
+ SUCCEEDED(device->OpenPropertyStore(STGM_READ, &devicePropertyStore)) &&
+ SUCCEEDED(devicePropertyStore->GetValue(PKEY_Device_FriendlyName, &friendlyName))) {
+
+ ret.emplace_back(friendlyName.pwszVal, static_cast<LPWSTR>(id));
+ PropVariantClear(&friendlyName);
+ }
+ }
+ }
+
+ return ret;
+ }
+}
+
+CPPageAudioRenderer::CPPageAudioRenderer()
+ : CPPageBase(IDD, VersionInfo::IsLite() ? IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND : IDD_PPAGEAUDIORENDERER)
+ , m_bExclusiveMode(FALSE)
+ , m_bAllowBitstreaming(TRUE)
+ , m_bCrossfeedEnabled(FALSE)
+{
+}
+
+void CPPageAudioRenderer::DoDataExchange(CDataExchange* pDX)
+{
+ __super::DoDataExchange(pDX);
+ DDX_Check(pDX, IDC_CHECK1, m_bExclusiveMode);
+ DDX_Check(pDX, IDC_CHECK2, m_bAllowBitstreaming);
+ DDX_Check(pDX, IDC_CHECK3, m_bCrossfeedEnabled);
+ DDX_Control(pDX, IDC_COMBO1, m_combo1);
+ DDX_Control(pDX, IDC_SLIDER1, m_slider1);
+ DDX_Control(pDX, IDC_SLIDER2, m_slider2);
+}
+
+BEGIN_MESSAGE_MAP(CPPageAudioRenderer, CPPageBase)
+ ON_WM_HSCROLL()
+ ON_UPDATE_COMMAND_UI(IDC_CHECK2, OnUpdateAllowBitstreamingCheckbox)
+ ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateCrossfeedGroup)
+ ON_BN_CLICKED(IDC_BUTTON1, OnCMoyButton)
+ ON_UPDATE_COMMAND_UI(IDC_BUTTON2, OnUpdateCrossfeedGroup)
+ ON_BN_CLICKED(IDC_BUTTON2, OnJMeierButton)
+ ON_UPDATE_COMMAND_UI(IDC_STATIC1, OnUpdateCrossfeedGroup)
+ ON_UPDATE_COMMAND_UI(IDC_SLIDER1, OnUpdateCrossfeedGroup)
+ ON_UPDATE_COMMAND_UI(IDC_STATIC2, OnUpdateCrossfeedCutoffLabel)
+ ON_UPDATE_COMMAND_UI(IDC_STATIC3, OnUpdateCrossfeedGroup)
+ ON_UPDATE_COMMAND_UI(IDC_SLIDER2, OnUpdateCrossfeedGroup)
+ ON_UPDATE_COMMAND_UI(IDC_STATIC4, OnUpdateCrossfeedLevelLabel)
+END_MESSAGE_MAP()
+
+BOOL CPPageAudioRenderer::OnInitDialog()
+{
+ __super::OnInitDialog();
+
+ const auto& s = AfxGetAppSettings();
+
+ CString defaultString;
+ defaultString.LoadString(IDS_PPAGE_OUTPUT_SYS_DEF);
+ m_combo1.AddString(defaultString);
+ m_deviceIds.emplace_back();
+ m_combo1.SetItemData(0, 0);
+
+ for (const auto& device : GetDevices()) {
+ int idx = m_combo1.AddString(device.first);
+ if (idx >= 0) {
+ m_deviceIds.emplace_back(device.second);
+ m_combo1.SetItemData(idx, m_deviceIds.size() - 1);
+ }
+ }
+
+ CComHeapPtr<WCHAR> pDeviceId;
+ if (SUCCEEDED(s.sanear->GetOuputDevice(&pDeviceId, &m_bExclusiveMode, nullptr))) {
+ if (!pDeviceId || pDeviceId[0] == '\0') {
+ m_combo1.SetCurSel(0);
+ } else {
+ for (size_t i = 0; i < m_deviceIds.size(); i++) {
+ if (m_deviceIds[i] == pDeviceId) {
+ for (int j = 0; j < m_combo1.GetCount(); j++) {
+ if (m_combo1.GetItemData(j) == i) {
+ m_combo1.SetCurSel(j);
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ s.sanear->GetAllowBitstreaming(&m_bAllowBitstreaming);
+ s.sanear->GetCrossfeedEnabled(&m_bCrossfeedEnabled);
+
+ m_slider1.SetRangeMin(SaneAudioRenderer::ISettings::CROSSFEED_CUTOFF_FREQ_MIN);
+ m_slider1.SetRangeMax(SaneAudioRenderer::ISettings::CROSSFEED_CUTOFF_FREQ_MAX);
+ m_slider2.SetRangeMin(SaneAudioRenderer::ISettings::CROSSFEED_LEVEL_MIN);
+ m_slider2.SetRangeMax(SaneAudioRenderer::ISettings::CROSSFEED_LEVEL_MAX);
+
+ UINT32 crossfeedCuttoffFrequency;
+ UINT32 crossfeedLevel;
+ s.sanear->GetCrossfeedSettings(&crossfeedCuttoffFrequency, &crossfeedLevel);
+ m_slider1.SetPos(crossfeedCuttoffFrequency);
+ m_slider2.SetPos(crossfeedLevel);
+
+ UpdateData(FALSE);
+
+ return TRUE;
+}
+
+BOOL CPPageAudioRenderer::OnApply()
+{
+ if (!UpdateData(TRUE)) {
+ return FALSE;
+ }
+
+ const auto& s = AfxGetAppSettings();
+
+ CString deviceId;
+ DWORD_PTR idx = m_combo1.GetItemData(m_combo1.GetCurSel());
+ if (idx != CB_ERR) {
+ deviceId = m_deviceIds[idx];
+ }
+
+ UINT32 buffer;
+ s.sanear->GetOuputDevice(nullptr, nullptr, &buffer);
+ s.sanear->SetOuputDevice(deviceId, m_bExclusiveMode, buffer);
+
+ s.sanear->SetAllowBitstreaming(m_bAllowBitstreaming);
+ s.sanear->SetCrossfeedSettings(m_slider1.GetPos(), m_slider2.GetPos());
+ s.sanear->SetCrossfeedEnabled(m_bCrossfeedEnabled);
+
+ return __super::OnApply();
+}
+
+void CPPageAudioRenderer::OnCancel()
+{
+ __super::OnCancel();
+}
+
+void CPPageAudioRenderer::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
+{
+ if (pScrollBar && (*pScrollBar == m_slider1 || *pScrollBar == m_slider2)) {
+ SetModified(TRUE);
+ }
+}
+
+void CPPageAudioRenderer::OnCMoyButton()
+{
+ m_slider1.SetPos(SaneAudioRenderer::ISettings::CROSSFEED_CUTOFF_FREQ_CMOY);
+ m_slider2.SetPos(SaneAudioRenderer::ISettings::CROSSFEED_LEVEL_CMOY);
+ SetModified(TRUE);
+}
+
+void CPPageAudioRenderer::OnJMeierButton()
+{
+ m_slider1.SetPos(SaneAudioRenderer::ISettings::CROSSFEED_CUTOFF_FREQ_JMEIER);
+ m_slider2.SetPos(SaneAudioRenderer::ISettings::CROSSFEED_LEVEL_JMEIER);
+ SetModified(TRUE);
+}
+
+void CPPageAudioRenderer::OnUpdateAllowBitstreamingCheckbox(CCmdUI* pCmdUI)
+{
+ pCmdUI->Enable(IsDlgButtonChecked(IDC_CHECK1));
+}
+
+void CPPageAudioRenderer::OnUpdateCrossfeedGroup(CCmdUI* pCmdUI)
+{
+ pCmdUI->Enable(IsDlgButtonChecked(IDC_CHECK3));
+}
+
+void CPPageAudioRenderer::OnUpdateCrossfeedCutoffLabel(CCmdUI* pCmdUI)
+{
+ OnUpdateCrossfeedGroup(pCmdUI);
+ CString label;
+ label.Format(_T("%d Hz"), m_slider1.GetPos());
+ pCmdUI->SetText(label);
+}
+
+void CPPageAudioRenderer::OnUpdateCrossfeedLevelLabel(CCmdUI* pCmdUI)
+{
+ OnUpdateCrossfeedGroup(pCmdUI);
+ int pos = m_slider2.GetPos();
+ CString label;
+ label.Format(_T("%d.%d dB"), pos / 10, pos % 10);
+ pCmdUI->SetText(label);
+}
diff --git a/src/mpc-hc/PPageAudioRenderer.h b/src/mpc-hc/PPageAudioRenderer.h
new file mode 100644
index 000000000..1af686901
--- /dev/null
+++ b/src/mpc-hc/PPageAudioRenderer.h
@@ -0,0 +1,61 @@
+/*
+ * (C) 2015 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include "PPageBase.h"
+
+class CPPageAudioRenderer : public CPPageBase
+{
+public:
+
+ CPPageAudioRenderer();
+
+ enum { IDD = IDD_PPAGEAUDIORENDERER };
+
+protected:
+
+ void DoDataExchange(CDataExchange* pDX) override;
+ BOOL OnInitDialog() override;
+ BOOL OnApply() override;
+ void OnCancel() override;
+
+ void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
+
+ void OnCMoyButton();
+ void OnJMeierButton();
+
+ void OnUpdateAllowBitstreamingCheckbox(CCmdUI* pCmdUI);
+ void OnUpdateCrossfeedGroup(CCmdUI* pCmdUI);
+ void OnUpdateCrossfeedCutoffLabel(CCmdUI* pCmdUI);
+ void OnUpdateCrossfeedLevelLabel(CCmdUI* pCmdUI);
+
+ DECLARE_MESSAGE_MAP()
+
+ std::vector<CString> m_deviceIds;
+
+ BOOL m_bExclusiveMode;
+ BOOL m_bAllowBitstreaming;
+ BOOL m_bCrossfeedEnabled;
+
+ CComboBox m_combo1;
+ CSliderCtrl m_slider1;
+ CSliderCtrl m_slider2;
+};
diff --git a/src/mpc-hc/PPageAudioSwitcher.cpp b/src/mpc-hc/PPageAudioSwitcher.cpp
index 2d2eb605e..f94c58151 100644
--- a/src/mpc-hc/PPageAudioSwitcher.cpp
+++ b/src/mpc-hc/PPageAudioSwitcher.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,7 +20,7 @@
*/
#include "stdafx.h"
-#include <math.h>
+#include <cmath>
#include "mplayerc.h"
#include "MainFrm.h"
#include "PPageAudioSwitcher.h"
@@ -37,18 +37,18 @@ CPPageAudioSwitcher::CPPageAudioSwitcher(IFilterGraph* pFG)
#else
: CPPageBase(CPPageAudioSwitcher::IDD, CPPageAudioSwitcher::IDD)
#endif
+ , m_pSpeakerToChannelMap()
+ , m_dwChannelMask(0)
+ , m_fEnableAudioSwitcher(FALSE)
, m_fAudioNormalize(FALSE)
+ , m_nAudioMaxNormFactor(400)
, m_fAudioNormalizeRecover(FALSE)
+ , m_AudioBoostPos(0)
, m_fDownSampleTo441(FALSE)
, m_fCustomChannelMapping(FALSE)
, m_nChannels(0)
- , m_fEnableAudioSwitcher(FALSE)
- , m_dwChannelMask(0)
, m_tAudioTimeShift(0)
, m_fAudioTimeShift(FALSE)
- , m_AudioBoostPos(0)
- , m_nAudioMaxNormFactor(400)
- , m_pSpeakerToChannelMap()
{
CComQIPtr<IAudioSwitcherFilter> pASF = FindFilter(__uuidof(CAudioSwitcherFilter), pFG);
@@ -173,7 +173,8 @@ BOOL CPPageAudioSwitcher::OnInitDialog()
// m_list.SetColumnWidth(i, m_list.GetColumnWidth(i)*8/10);
}
- m_tooltip.Create(GetDlgItem(IDC_SLIDER1));
+ EnableToolTips(TRUE);
+ m_tooltip.Create(this);
m_tooltip.Activate(TRUE);
CorrectComboBoxHeaderWidth(GetDlgItem(IDC_CHECK5));
@@ -377,26 +378,34 @@ BOOL CPPageAudioSwitcher::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResu
nID = ::GetDlgCtrlID((HWND)nID);
}
- if (nID != IDC_SLIDER1) {
- return FALSE;
- }
-
- static CString strTipText; // static string
+ bool bRet = false;
- strTipText.Format(ResStr(IDS_BOOST), m_AudioBoostCtrl.GetPos());
+ static CString strTipText;
- pTTT->lpszText = (LPWSTR)(LPCWSTR)strTipText;
+ switch (nID) {
+ case IDC_SLIDER1:
+ strTipText.Format(IDS_BOOST, m_AudioBoostCtrl.GetPos());
+ bRet = true;
+ break;
+ case IDC_EDIT2:
+ case IDC_SPIN2:
+ strTipText.LoadString(IDS_TIME_SHIFT_TOOLTIP);
+ bRet = true;
+ break;
+ }
- *pResult = 0;
+ if (bRet) {
+ pTTT->lpszText = (LPWSTR)(LPCWSTR)strTipText;
+ }
- return TRUE; // message was handled
+ return bRet;
}
void CPPageAudioSwitcher::OnCancel()
{
const CAppSettings& s = AfxGetAppSettings();
- if (m_AudioBoostPos != s.nAudioBoost) {
+ if ((UINT)m_AudioBoostPos != s.nAudioBoost) {
((CMainFrame*)GetParentFrame())->SetVolumeBoost(s.nAudioBoost);
}
diff --git a/src/mpc-hc/PPageBase.cpp b/src/mpc-hc/PPageBase.cpp
index 554221a58..1bb96bbcb 100644
--- a/src/mpc-hc/PPageBase.cpp
+++ b/src/mpc-hc/PPageBase.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -138,7 +138,8 @@ END_MESSAGE_MAP()
BOOL CPPageBase::OnSetActive()
{
- AfxGetAppSettings().nLastUsedPage = (UINT)m_pPSP->pszTemplate;
+ ASSERT(IS_INTRESOURCE(m_pPSP->pszTemplate));
+ AfxGetAppSettings().nLastUsedPage = (WORD)(ULONG_PTR)m_pPSP->pszTemplate;
return __super::OnSetActive();
}
diff --git a/src/mpc-hc/PPageCapture.cpp b/src/mpc-hc/PPageCapture.cpp
index c586a43f0..611adef24 100644
--- a/src/mpc-hc/PPageCapture.cpp
+++ b/src/mpc-hc/PPageCapture.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2015, 2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -33,11 +33,11 @@
#include "DSUtil.h"
-static struct cc_t {
+struct cc_t {
long code;
AnalogVideoStandard standard;
const TCHAR* str;
-} s_countrycodes[] = {
+} static constexpr s_countrycodes[] = {
{1, AnalogVideo_NTSC_M, _T("USA")},
/*
{1, AnalogVideo_NTSC_M, _T("Anguilla")},
@@ -491,15 +491,14 @@ void CPPageCapture::FindAnalogDevices()
pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB));
CComVariant var;
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
int i = m_cbAnalogVideo.AddString(CString(var.bstrVal));
- LPOLESTR strName = nullptr;
+ CComHeapPtr<OLECHAR> strName;
if (SUCCEEDED(pMoniker->GetDisplayName(nullptr, nullptr, &strName))) {
m_vidnames.Add(CString(strName));
if (s.strAnalogVideo == CString(strName)) {
iSel = i;
}
- CoTaskMemFree(strName);
}
}
}
@@ -526,16 +525,15 @@ void CPPageCapture::FindAnalogDevices()
pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB));
CComVariant var;
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
int i = m_cbAnalogAudio.AddString(CString(var.bstrVal));
- LPOLESTR strName = nullptr;
+ CComHeapPtr<OLECHAR> strName;
if (SUCCEEDED(pMoniker->GetDisplayName(nullptr, nullptr, &strName))) {
m_audnames.Add(CString(strName));
if (s.strAnalogAudio == CString(strName)) {
iSel = i;
}
- CoTaskMemFree(strName);
}
}
}
@@ -615,7 +613,7 @@ void CPPageCapture::FindAnalogDevices()
str.Format(_T("%ld - %s - %s"), s_countrycodes[j].code, s_countrycodes[j].str, standard);
int i = m_cbAnalogCountry.AddString(str);
- m_cbAnalogCountry.SetItemDataPtr(i, &s_countrycodes[j]);
+ m_cbAnalogCountry.SetItemDataPtr(i, (void*)&s_countrycodes[j]);
if (s.iAnalogCountry == s_countrycodes[j].code) {
iSel = i;
}
@@ -637,10 +635,10 @@ void CPPageCapture::FindDigitalDevices()
pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB));
CComVariant var;
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
int i = m_cbDigitalNetworkProvider.AddString(CString(var.bstrVal));
- LPOLESTR strName = nullptr;
+ CComHeapPtr<OLECHAR> strName;
if (SUCCEEDED(pMoniker->GetDisplayName(nullptr, nullptr, &strName))) {
m_providernames.Add(CString(strName));
if (s.strBDANetworkProvider == CString(strName)) {
@@ -650,7 +648,6 @@ void CPPageCapture::FindDigitalDevices()
// Select Microsoft Network Provider by default, other network providers are deprecated.
iSel = i;
}
- CoTaskMemFree(strName);
}
}
}
@@ -668,16 +665,15 @@ void CPPageCapture::FindDigitalDevices()
pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB));
CComVariant var;
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
int i = m_cbDigitalTuner.AddString(CString(var.bstrVal));
- LPOLESTR strName = nullptr;
+ CComHeapPtr<OLECHAR> strName;
if (SUCCEEDED(pMoniker->GetDisplayName(nullptr, nullptr, &strName))) {
m_tunernames.Add(CString(strName));
if (s.strBDATuner == CString(strName)) {
iSel = i;
}
- CoTaskMemFree(strName);
}
}
}
@@ -694,16 +690,15 @@ void CPPageCapture::FindDigitalDevices()
pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB));
CComVariant var;
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
int i = m_cbDigitalReceiver.AddString(CString(var.bstrVal));
- LPOLESTR strName = nullptr;
+ CComHeapPtr<OLECHAR> strName;
if (SUCCEEDED(pMoniker->GetDisplayName(nullptr, nullptr, &strName))) {
m_receivernames.Add(CString(strName));
if (s.strBDAReceiver == CString(strName)) {
iSel = i;
}
- CoTaskMemFree(strName);
}
}
}
diff --git a/src/mpc-hc/PPageDVD.cpp b/src/mpc-hc/PPageDVD.cpp
index 9bce88544..697dcc51b 100644
--- a/src/mpc-hc/PPageDVD.cpp
+++ b/src/mpc-hc/PPageDVD.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -31,7 +31,7 @@ struct {
LPCSTR name;
}
-LCIDNameList[] = {
+static constexpr LCIDNameList[] = {
{0x0000, "Default"},
{0x0436, "Afrikaans"},
{0x041c, "Albanian"},
@@ -185,7 +185,6 @@ CPPageDVD::CPPageDVD()
, m_idMenuLang(0)
, m_idAudioLang(0)
, m_idSubtitlesLang(0)
- , m_dvdpath(_T(""))
, m_fClosedCaptions(FALSE)
{
}
@@ -283,7 +282,7 @@ BOOL CPPageDVD::OnApply()
void CPPageDVD::OnBnClickedButton1()
{
CString path;
- CString strTitle = ResStr(IDS_MAINFRM_46);
+ CString strTitle(StrRes(IDS_MAINFRM_46));
if (SysVersion::IsVistaOrLater()) {
CFileDialog dlg(TRUE);
diff --git a/src/mpc-hc/PPageExternalFilters.cpp b/src/mpc-hc/PPageExternalFilters.cpp
index ec5d3b0ea..485b6db0a 100644
--- a/src/mpc-hc/PPageExternalFilters.cpp
+++ b/src/mpc-hc/PPageExternalFilters.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,8 +21,8 @@
#include "stdafx.h"
#include <atlpath.h>
-#include <InitGuid.h>
#include <dmoreg.h>
+#include "PathUtils.h"
#include "mplayerc.h"
#include "PPageExternalFilters.h"
#include "ComPropertySheet.h"
@@ -30,38 +30,38 @@
#include "SelectMediaType.h"
#include "FGFilter.h"
#include "moreuuids.h"
+#include "FakeFilterMapper2.h"
-IMPLEMENT_DYNAMIC(CPPageExternalFiltersListBox, CCheckListBox)
+IMPLEMENT_DYNAMIC(CPPageExternalFiltersListBox, CListCtrl)
CPPageExternalFiltersListBox::CPPageExternalFiltersListBox()
- : CCheckListBox()
{
}
void CPPageExternalFiltersListBox::PreSubclassWindow()
{
__super::PreSubclassWindow();
+ GetToolTips()->Activate(FALSE);
EnableToolTips(TRUE);
}
INT_PTR CPPageExternalFiltersListBox::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
{
- BOOL out = FALSE;
- UINT item = ItemFromPoint(point, out);
- if (out) {
+ int item = HitTest(point);
+ if (item < 0) {
return -1;
}
pTI->uFlags |= TTF_ALWAYSTIP;
pTI->hwnd = m_hWnd;
- pTI->uId = item;
- VERIFY(GetItemRect(item, &pTI->rect) != LB_ERR);
+ pTI->uId = (UINT)item;
+ VERIFY(GetItemRect(item, &pTI->rect, LVIR_BOUNDS));
pTI->lpszText = LPSTR_TEXTCALLBACK;
return pTI->uId;
}
-BEGIN_MESSAGE_MAP(CPPageExternalFiltersListBox, CCheckListBox)
+BEGIN_MESSAGE_MAP(CPPageExternalFiltersListBox, CListCtrl)
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
END_MESSAGE_MAP()
@@ -81,8 +81,8 @@ BOOL CPPageExternalFiltersListBox::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESU
IMPLEMENT_DYNAMIC(CPPageExternalFilters, CPPageBase)
CPPageExternalFilters::CPPageExternalFilters()
: CPPageBase(CPPageExternalFilters::IDD, CPPageExternalFilters::IDD)
- , m_iLoadType(FilterOverride::PREFERRED)
, m_pLastSelFilter(nullptr)
+ , m_iLoadType(FilterOverride::PREFERRED)
{
}
@@ -99,52 +99,74 @@ void CPPageExternalFilters::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_TREE1, m_tree);
}
-void CPPageExternalFilters::StepUp(CCheckListBox& list)
+void CPPageExternalFilters::Exchange(CListCtrl& list, int i, int j)
{
- int i = list.GetCurSel();
- if (i < 1) {
+ CString text = list.GetItemText(i, 0);
+ DWORD_PTR data = list.GetItemData(i);
+ int check = list.GetCheck(i);
+ bool selected = !!list.GetItemState(i, LVIS_SELECTED);
+
+ list.SetItemText(i, 0, list.GetItemText(j, 0));
+ list.SetItemData(i, list.GetItemData(j));
+ list.SetCheck(i, list.GetCheck(j));
+ list.SetItemState(i, LVIS_SELECTED, list.GetItemState(j, LVIS_SELECTED));
+
+ list.SetItemText(j, 0, text);
+ list.SetItemData(j, data);
+ list.SetCheck(j, check);
+ list.SetItemState(j, LVIS_SELECTED, selected ? LVIS_SELECTED : 0);
+
+ int mark = list.GetSelectionMark();
+ if (mark == i) {
+ list.SetSelectionMark(j);
+ } else if (mark == j) {
+ list.SetSelectionMark(i);
+ }
+}
+
+void CPPageExternalFilters::StepUp(CListCtrl& list)
+{
+ POSITION pos = list.GetFirstSelectedItemPosition();
+
+ if (!pos) {
return;
}
- CString str;
- list.GetText(i, str);
- DWORD_PTR dwItemData = list.GetItemData(i);
- int nCheck = list.GetCheck(i);
- list.DeleteString(i);
- i--;
- list.InsertString(i, str);
- list.SetItemData(i, dwItemData);
- list.SetCheck(i, nCheck);
- list.SetCurSel(i);
+ int i = list.GetNextSelectedItem(pos);
+
+ ASSERT(i > 0);
+
+ Exchange(list, i, i - 1);
SetModified();
}
-void CPPageExternalFilters::StepDown(CCheckListBox& list)
+void CPPageExternalFilters::StepDown(CListCtrl& list)
{
- int i = list.GetCurSel();
- if (i < 0 || i >= list.GetCount() - 1) {
+ POSITION pos = list.GetFirstSelectedItemPosition();
+
+ if (!pos) {
return;
}
- CString str;
- list.GetText(i, str);
- DWORD_PTR dwItemData = list.GetItemData(i);
- int nCheck = list.GetCheck(i);
- list.DeleteString(i);
- i++;
- list.InsertString(i, str);
- list.SetItemData(i, dwItemData);
- list.SetCheck(i, nCheck);
- list.SetCurSel(i);
+ int i = list.GetNextSelectedItem(pos);
+
+ ASSERT(i + 1 < list.GetItemCount());
+
+ Exchange(list, i, i + 1);
SetModified();
}
FilterOverride* CPPageExternalFilters::GetCurFilter()
{
- int i = m_filters.GetCurSel();
- return i >= 0 ? (FilterOverride*)m_pFilters.GetAt((POSITION)m_filters.GetItemDataPtr(i)) : (FilterOverride*)nullptr;
+ POSITION pos = m_filters.GetFirstSelectedItemPosition();
+
+ if (!pos) {
+ return nullptr;
+ }
+
+ return m_pFilters.GetAt((POSITION)m_filters.GetItemData(m_filters.GetNextSelectedItem(pos)));
}
void CPPageExternalFilters::SetupMajorTypes(CAtlArray<GUID>& guids)
@@ -311,21 +333,20 @@ BEGIN_MESSAGE_MAP(CPPageExternalFilters, CPPageBase)
ON_BN_CLICKED(IDC_BUTTON2, OnRemoveFilter)
ON_BN_CLICKED(IDC_BUTTON3, OnMoveFilterUp)
ON_BN_CLICKED(IDC_BUTTON4, OnMoveFilterDown)
- ON_LBN_DBLCLK(IDC_LIST1, OnDoubleClickFilter)
+ ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDoubleClickFilter)
ON_WM_VKEYTOITEM()
ON_BN_CLICKED(IDC_BUTTON5, OnAddMajorType)
ON_BN_CLICKED(IDC_BUTTON6, OnAddSubType)
ON_BN_CLICKED(IDC_BUTTON7, OnDeleteType)
ON_BN_CLICKED(IDC_BUTTON8, OnResetTypes)
- ON_LBN_SELCHANGE(IDC_LIST1, OnFilterSelectionChange)
- ON_CLBN_CHKCHANGE(IDC_LIST1, OnFilterCheckChange)
+ ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnFilterChanged)
ON_BN_CLICKED(IDC_RADIO1, OnClickedMeritRadioButton)
ON_BN_CLICKED(IDC_RADIO2, OnClickedMeritRadioButton)
ON_BN_CLICKED(IDC_RADIO3, OnClickedMeritRadioButton)
ON_EN_CHANGE(IDC_EDIT1, OnChangeMerit)
ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnDoubleClickType)
ON_NOTIFY(TVN_KEYDOWN, IDC_TREE1, OnKeyDownType)
- ON_WM_DROPFILES()
+ ON_WM_DESTROY()
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
END_MESSAGE_MAP()
@@ -336,7 +357,10 @@ BOOL CPPageExternalFilters::OnInitDialog()
{
__super::OnInitDialog();
- DragAcceptFiles(TRUE);
+ m_filters.InsertColumn(0, _T(""));
+ m_filters.SetExtendedStyle(m_filters.GetExtendedStyle() | LVS_EX_CHECKBOXES | LVS_EX_DOUBLEBUFFER);
+
+ m_dropTarget.Register(this);
const CAppSettings& s = AfxGetAppSettings();
@@ -358,22 +382,30 @@ BOOL CPPageExternalFilters::OnInitDialog()
if (f->fTemporary) {
name += _T(" <temporary>");
}
- if (!CPath(MakeFullPath(f->path)).FileExists()) {
+ if (!PathUtils::Exists(MakeFullPath(f->path))) {
name += _T(" <not found!>");
}
}
- int i = m_filters.AddString(name);
+ int i = m_filters.InsertItem(m_filters.GetItemCount(), name);
m_filters.SetCheck(i, f->fDisabled ? 0 : 1);
- m_filters.SetItemDataPtr(i, m_pFilters.AddTail(f));
+ m_filters.SetItemData(i, reinterpret_cast<DWORD_PTR>(m_pFilters.AddTail(f)));
}
+ m_filters.SetColumnWidth(0, LVSCW_AUTOSIZE);
+
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
+void CPPageExternalFilters::OnDestroy()
+{
+ m_dropTarget.Revoke();
+ __super::OnDestroy();
+}
+
BOOL CPPageExternalFilters::OnApply()
{
UpdateData();
@@ -382,7 +414,7 @@ BOOL CPPageExternalFilters::OnApply()
s.m_filters.RemoveAll();
- for (int i = 0; i < m_filters.GetCount(); i++) {
+ for (int i = 0; i < m_filters.GetItemCount(); i++) {
if (POSITION pos = (POSITION)m_filters.GetItemData(i)) {
CAutoPtr<FilterOverride> f(DEBUG_NEW FilterOverride(m_pFilters.GetAt(pos)));
f->fDisabled = !m_filters.GetCheck(i);
@@ -406,12 +438,14 @@ void CPPageExternalFilters::OnUpdateFilter(CCmdUI* pCmdUI)
void CPPageExternalFilters::OnUpdateFilterUp(CCmdUI* pCmdUI)
{
- pCmdUI->Enable(m_filters.GetCurSel() > 0);
+ POSITION pos = m_filters.GetFirstSelectedItemPosition();
+ pCmdUI->Enable(pos && m_filters.GetNextSelectedItem(pos) > 0);
}
void CPPageExternalFilters::OnUpdateFilterDown(CCmdUI* pCmdUI)
{
- pCmdUI->Enable(m_filters.GetCurSel() >= 0 && m_filters.GetCurSel() < m_filters.GetCount() - 1);
+ POSITION pos = m_filters.GetFirstSelectedItemPosition();
+ pCmdUI->Enable(pos && m_filters.GetNextSelectedItem(pos) < m_filters.GetItemCount() - 1);
}
void CPPageExternalFilters::OnUpdateFilterMerit(CCmdUI* pCmdUI)
@@ -442,20 +476,23 @@ void CPPageExternalFilters::OnAddRegistered()
CString name = f->name;
if (f->type == FilterOverride::EXTERNAL) {
- if (!CPath(MakeFullPath(f->path)).FileExists()) {
+ if (!PathUtils::Exists(MakeFullPath(f->path))) {
name += _T(" <not found!>");
}
}
- int i = m_filters.AddString(name);
- m_filters.SetItemDataPtr(i, m_pFilters.AddTail(p));
+ int i = m_filters.InsertItem(m_filters.GetItemCount(), name);
+ m_filters.SetItemData(i, reinterpret_cast<DWORD_PTR>(m_pFilters.AddTail(p)));
m_filters.SetCheck(i, 1);
if (dlg.m_filters.IsEmpty()) {
- m_filters.SetCurSel(i);
+ m_filters.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
+ m_filters.SetSelectionMark(i);
OnFilterSelectionChange();
}
+ m_filters.SetColumnWidth(0, LVSCW_AUTOSIZE);
+
SetModified();
}
}
@@ -464,14 +501,17 @@ void CPPageExternalFilters::OnAddRegistered()
void CPPageExternalFilters::OnRemoveFilter()
{
- int i = m_filters.GetCurSel();
- m_pFilters.RemoveAt((POSITION)m_filters.GetItemDataPtr(i));
- m_filters.DeleteString(i);
+ POSITION pos = m_filters.GetFirstSelectedItemPosition();
+ ASSERT(pos);
+ int i = m_filters.GetNextSelectedItem(pos);
+ m_pFilters.RemoveAt((POSITION)m_filters.GetItemData(i));
+ m_filters.DeleteItem(i);
- if (i >= m_filters.GetCount()) {
+ if (i >= m_filters.GetItemCount()) {
i--;
}
- m_filters.SetCurSel(i);
+ m_filters.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
+ m_filters.SetSelectionMark(i);
OnFilterSelectionChange();
SetModified();
@@ -487,8 +527,11 @@ void CPPageExternalFilters::OnMoveFilterDown()
StepDown(m_filters);
}
-void CPPageExternalFilters::OnDoubleClickFilter()
+void CPPageExternalFilters::OnDoubleClickFilter(NMHDR* pNMHDR, LRESULT* pResult)
{
+ ASSERT(pNMHDR);
+ ASSERT(pResult);
+
if (FilterOverride* f = GetCurFilter()) {
CComPtr<IBaseFilter> pBF;
CString name;
@@ -516,6 +559,8 @@ void CPPageExternalFilters::OnDoubleClickFilter()
}
}
}
+
+ *pResult = 0;
}
int CPPageExternalFilters::OnVKeyToItem(UINT nKey, CListBox* pListBox, UINT nIndex)
@@ -688,6 +733,25 @@ void CPPageExternalFilters::OnResetTypes()
}
}
+void CPPageExternalFilters::OnFilterChanged(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ ASSERT(pNMHDR);
+ ASSERT(pResult);
+
+ auto pNMLV = reinterpret_cast<NMLISTVIEW*>(pNMHDR);
+
+ if (pNMLV->lParam && (pNMLV->uChanged & LVIF_STATE)) {
+ if (pNMLV->uNewState & LVIS_SELECTED) {
+ OnFilterSelectionChange();
+ }
+ if (pNMLV->uNewState & LVIS_STATEIMAGEMASK) {
+ OnFilterCheckChange();
+ }
+ }
+
+ *pResult = 0;
+}
+
void CPPageExternalFilters::OnFilterSelectionChange()
{
if (FilterOverride* f = GetCurFilter()) {
@@ -820,35 +884,42 @@ void CPPageExternalFilters::OnKeyDownType(NMHDR* pNMHDR, LRESULT* pResult)
*pResult = 0;
}
-void CPPageExternalFilters::OnDropFiles(HDROP hDropInfo)
+DROPEFFECT CPPageExternalFilters::OnDropAccept(COleDataObject*, DWORD, CPoint)
+{
+ return DROPEFFECT_COPY;
+}
+
+void CPPageExternalFilters::OnDropFiles(CAtlList<CString>& slFiles, DROPEFFECT)
{
SetActiveWindow();
- UINT nFiles = ::DragQueryFile(hDropInfo, UINT_MAX, nullptr, 0);
- for (UINT iFile = 0; iFile < nFiles; iFile++) {
- TCHAR szFileName[MAX_PATH];
- ::DragQueryFile(hDropInfo, iFile, szFileName, MAX_PATH);
+ POSITION pos = slFiles.GetHeadPosition();
+
+ while (pos) {
+ CString fn = slFiles.GetNext(pos);
CFilterMapper2 fm2(false);
- fm2.Register(szFileName);
+ fm2.Register(fn);
while (!fm2.m_filters.IsEmpty()) {
if (FilterOverride* f = fm2.m_filters.RemoveHead()) {
CAutoPtr<FilterOverride> p(f);
- int i = m_filters.AddString(f->name);
- m_filters.SetItemDataPtr(i, m_pFilters.AddTail(p));
+ int i = m_filters.InsertItem(m_filters.GetItemCount(), f->name);
+ m_filters.SetItemData(i, reinterpret_cast<DWORD_PTR>(m_pFilters.AddTail(p)));
m_filters.SetCheck(i, 1);
if (fm2.m_filters.IsEmpty()) {
- m_filters.SetCurSel(i);
+ m_filters.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
+ m_filters.SetSelectionMark(i);
OnFilterSelectionChange();
}
+ m_filters.SetColumnWidth(0, LVSCW_AUTOSIZE);
+
SetModified();
}
}
}
- ::DragFinish(hDropInfo);
}
BOOL CPPageExternalFilters::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
@@ -856,7 +927,7 @@ BOOL CPPageExternalFilters::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pRe
TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR;
int nIndex = (int)pNMHDR->idFrom;
- if (0 <= nIndex && nIndex < m_filters.GetCount()) {
+ if (0 <= nIndex && nIndex < m_filters.GetItemCount()) {
if (POSITION pos = (POSITION)m_filters.GetItemData(nIndex)) {
CAutoPtr<FilterOverride>& f = m_pFilters.GetAt(pos);
diff --git a/src/mpc-hc/PPageExternalFilters.h b/src/mpc-hc/PPageExternalFilters.h
index ae106ff90..65bee94aa 100644
--- a/src/mpc-hc/PPageExternalFilters.h
+++ b/src/mpc-hc/PPageExternalFilters.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,10 +23,10 @@
#include "PPageBase.h"
#include "FloatEdit.h"
-#include "mplayerc.h"
+#include "DropTarget.h"
-class CPPageExternalFiltersListBox : public CCheckListBox
+class CPPageExternalFiltersListBox : public CListCtrl
{
DECLARE_DYNAMIC(CPPageExternalFiltersListBox)
@@ -45,7 +45,7 @@ protected:
// CPPageExternalFilters dialog
-class CPPageExternalFilters : public CPPageBase
+class CPPageExternalFilters : public CPPageBase, public CDropClient
{
DECLARE_DYNAMIC(CPPageExternalFilters)
@@ -65,8 +65,13 @@ private:
CHexEdit m_dwMerit;
CTreeCtrl m_tree;
- void StepUp(CCheckListBox& list);
- void StepDown(CCheckListBox& list);
+ CDropTarget m_dropTarget;
+ void OnDropFiles(CAtlList<CString>& slFiles, DROPEFFECT) override;
+ DROPEFFECT OnDropAccept(COleDataObject*, DWORD, CPoint) override;
+
+ void Exchange(CListCtrl& list, int i, int j);
+ void StepUp(CListCtrl& list);
+ void StepDown(CListCtrl& list);
FilterOverride* GetCurFilter();
@@ -90,18 +95,19 @@ protected:
afx_msg void OnRemoveFilter();
afx_msg void OnMoveFilterUp();
afx_msg void OnMoveFilterDown();
- afx_msg void OnDoubleClickFilter();
+ void OnDoubleClickFilter(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg int OnVKeyToItem(UINT nKey, CListBox* pListBox, UINT nIndex);
afx_msg void OnAddMajorType();
afx_msg void OnAddSubType();
afx_msg void OnDeleteType();
afx_msg void OnResetTypes();
+ void OnFilterChanged(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnFilterSelectionChange();
afx_msg void OnFilterCheckChange();
afx_msg void OnClickedMeritRadioButton();
afx_msg void OnChangeMerit();
afx_msg void OnDoubleClickType(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnKeyDownType(NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg void OnDropFiles(HDROP hDropInfo);
+ afx_msg void OnDestroy();
afx_msg BOOL OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult);
};
diff --git a/src/mpc-hc/PPageFileInfoClip.cpp b/src/mpc-hc/PPageFileInfoClip.cpp
index d81b30599..c10f64b89 100644
--- a/src/mpc-hc/PPageFileInfoClip.cpp
+++ b/src/mpc-hc/PPageFileInfoClip.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,61 +25,67 @@
#include <atlbase.h>
#include <qnetwork.h>
#include "DSUtil.h"
+#include "PathUtils.h"
#include "WinAPIUtils.h"
// CPPageFileInfoClip dialog
IMPLEMENT_DYNAMIC(CPPageFileInfoClip, CPropertyPage)
-CPPageFileInfoClip::CPPageFileInfoClip(CString path, IFilterGraph* pFG, IFileSourceFilter* pFSF)
+CPPageFileInfoClip::CPPageFileInfoClip(CString path, IFilterGraph* pFG, IFileSourceFilter* pFSF, IDvdInfo2* pDVDI)
: CPropertyPage(CPPageFileInfoClip::IDD, CPPageFileInfoClip::IDD)
+ , m_hIcon(nullptr)
, m_fn(path)
, m_path(path)
- , m_clip(ResStr(IDS_AG_NONE))
- , m_author(ResStr(IDS_AG_NONE))
- , m_copyright(ResStr(IDS_AG_NONE))
- , m_rating(ResStr(IDS_AG_NONE))
- , m_location_str(ResStr(IDS_AG_NONE))
- , m_hIcon(nullptr)
+ , m_clip(StrRes(IDS_AG_NONE))
+ , m_author(StrRes(IDS_AG_NONE))
+ , m_copyright(StrRes(IDS_AG_NONE))
+ , m_rating(StrRes(IDS_AG_NONE))
+ , m_location(StrRes(IDS_AG_NONE))
{
if (pFSF) {
- LPOLESTR pFN;
+ CComHeapPtr<OLECHAR> pFN;
if (SUCCEEDED(pFSF->GetCurFile(&pFN, nullptr))) {
m_fn = pFN;
- CoTaskMemFree(pFN);
+ }
+ } else if (pDVDI) {
+ ULONG len = 0;
+ if (SUCCEEDED(pDVDI->GetDVDDirectory(m_path.GetBufferSetLength(MAX_PATH), MAX_PATH, &len)) && len) {
+ m_path.ReleaseBuffer();
+ m_fn = m_path += _T("\\VIDEO_TS.IFO");
}
}
- bool fEmpty = true;
+ bool bFound = false;
BeginEnumFilters(pFG, pEF, pBF) {
if (CComQIPtr<IAMMediaContent, &IID_IAMMediaContent> pAMMC = pBF) {
CComBSTR bstr;
if (SUCCEEDED(pAMMC->get_Title(&bstr)) && bstr.Length()) {
m_clip = bstr.m_str;
- fEmpty = false;
+ bFound = true;
}
bstr.Empty();
if (SUCCEEDED(pAMMC->get_AuthorName(&bstr)) && bstr.Length()) {
m_author = bstr.m_str;
- fEmpty = false;
+ bFound = true;
}
bstr.Empty();
if (SUCCEEDED(pAMMC->get_Copyright(&bstr)) && bstr.Length()) {
m_copyright = bstr.m_str;
- fEmpty = false;
+ bFound = true;
}
bstr.Empty();
if (SUCCEEDED(pAMMC->get_Rating(&bstr)) && bstr.Length()) {
m_rating = bstr.m_str;
- fEmpty = false;
+ bFound = true;
}
bstr.Empty();
if (SUCCEEDED(pAMMC->get_Description(&bstr)) && bstr.Length()) {
- m_desctext = bstr.m_str;
- fEmpty = false;
+ m_desc = bstr.m_str;
+ bFound = true;
}
bstr.Empty();
- if (!fEmpty) {
+ if (bFound) {
break;
}
}
@@ -94,26 +100,6 @@ CPPageFileInfoClip::~CPPageFileInfoClip()
}
}
-BOOL CPPageFileInfoClip::PreTranslateMessage(MSG* pMsg)
-{
- if (pMsg->message == WM_LBUTTONDBLCLK && pMsg->hwnd == m_location.m_hWnd && !m_location_str.IsEmpty()) {
- CString path = m_location_str;
- if (path[path.GetLength() - 1] != '\\') {
- path += _T("\\");
- }
- path += m_fn;
-
- if (ExploreToFile(path)) {
- return TRUE;
- }
- }
-
- m_tooltip.RelayEvent(pMsg);
-
- return __super::PreTranslateMessage(pMsg);
-}
-
-
void CPPageFileInfoClip::DoDataExchange(CDataExchange* pDX)
{
__super::DoDataExchange(pDX);
@@ -123,17 +109,27 @@ void CPPageFileInfoClip::DoDataExchange(CDataExchange* pDX)
DDX_Text(pDX, IDC_EDIT3, m_author);
DDX_Text(pDX, IDC_EDIT2, m_copyright);
DDX_Text(pDX, IDC_EDIT5, m_rating);
- DDX_Control(pDX, IDC_EDIT6, m_location);
- DDX_Control(pDX, IDC_EDIT7, m_desc);
+ DDX_Text(pDX, IDC_EDIT6, m_location);
+ DDX_Control(pDX, IDC_EDIT6, m_locationCtrl);
+ DDX_Text(pDX, IDC_EDIT7, m_desc);
}
-#define SETPAGEFOCUS (WM_APP + 252) // arbitrary number, can be changed if necessary
+BOOL CPPageFileInfoClip::PreTranslateMessage(MSG* pMsg)
+{
+ if (pMsg->message == WM_LBUTTONDBLCLK && pMsg->hwnd == m_locationCtrl && !m_location.IsEmpty()) {
+ if (OnDoubleClickLocation()) {
+ return TRUE;
+ }
+ }
+
+ m_tooltip.RelayEvent(pMsg);
+
+ return __super::PreTranslateMessage(pMsg);
+}
BEGIN_MESSAGE_MAP(CPPageFileInfoClip, CPropertyPage)
- ON_MESSAGE(SETPAGEFOCUS, OnSetPageFocus)
END_MESSAGE_MAP()
-
// CPPageFileInfoClip message handlers
BOOL CPPageFileInfoClip::OnInitDialog()
@@ -147,11 +143,11 @@ BOOL CPPageFileInfoClip::OnInitDialog()
m_fn.TrimRight('/');
int i = std::max(m_fn.ReverseFind('\\'), m_fn.ReverseFind('/'));
if (i >= 0 && i < m_fn.GetLength() - 1) {
- m_location_str = m_fn.Left(i);
+ m_location = m_fn.Left(i);
m_fn = m_fn.Mid(i + 1);
- if (m_location_str.GetLength() == 2 && m_location_str[1] == ':') {
- m_location_str += '\\';
+ if (m_location.GetLength() == 2 && m_location[1] == ':') {
+ m_location += _T('\\');
}
}
@@ -160,20 +156,16 @@ BOOL CPPageFileInfoClip::OnInitDialog()
m_icon.SetIcon(m_hIcon);
}
- m_location.SetWindowText(m_location_str);
-
m_tooltip.Create(this, TTS_NOPREFIX | TTS_ALWAYSTIP);
m_tooltip.SetDelayTime(TTDT_INITIAL, 0);
m_tooltip.SetDelayTime(TTDT_AUTOPOP, 2500);
m_tooltip.SetDelayTime(TTDT_RESHOW, 0);
- if (FileExists(m_path)) {
- m_tooltip.AddTool(&m_location, IDS_TOOLTIP_EXPLORE_TO_FILE);
+ if (PathUtils::Exists(m_path)) {
+ m_tooltip.AddTool(&m_locationCtrl, IDS_TOOLTIP_EXPLORE_TO_FILE);
}
- m_desc.SetWindowText(m_desctext);
-
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
@@ -184,15 +176,19 @@ BOOL CPPageFileInfoClip::OnSetActive()
{
BOOL ret = __super::OnSetActive();
- PostMessage(SETPAGEFOCUS, 0, 0L);
+ PostMessage(WM_NEXTDLGCTL, (WPARAM)GetParentSheet()->GetTabControl()->GetSafeHwnd(), TRUE);
+ GetDlgItem(IDC_EDIT1)->PostMessage(WM_KEYDOWN, VK_HOME);
return ret;
}
-LRESULT CPPageFileInfoClip::OnSetPageFocus(WPARAM wParam, LPARAM lParam)
+bool CPPageFileInfoClip::OnDoubleClickLocation()
{
- CPropertySheet* psheet = (CPropertySheet*) GetParent();
- psheet->GetTabControl()->SetFocus();
+ CString path = m_location;
+ if (path[path.GetLength() - 1] != _T('\\')) {
+ path += _T('\\');
+ }
+ path += m_fn;
- return 0;
-} \ No newline at end of file
+ return ExploreToFile(path);
+}
diff --git a/src/mpc-hc/PPageFileInfoClip.h b/src/mpc-hc/PPageFileInfoClip.h
index c37723510..1d4324049 100644
--- a/src/mpc-hc/PPageFileInfoClip.h
+++ b/src/mpc-hc/PPageFileInfoClip.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -33,13 +33,7 @@ class CPPageFileInfoClip : public CPropertyPage
private:
HICON m_hIcon;
CToolTipCtrl m_tooltip;
-
-public:
- CPPageFileInfoClip(CString path, IFilterGraph* pFG, IFileSourceFilter* pFSF);
- virtual ~CPPageFileInfoClip();
-
- // Dialog Data
- enum { IDD = IDD_FILEPROPCLIP };
+ CEdit m_locationCtrl;
CStatic m_icon;
CString m_fn, m_path;
@@ -47,20 +41,23 @@ public:
CString m_author;
CString m_copyright;
CString m_rating;
- CString m_location_str;
- CString m_desctext;
- CEdit m_location;
- CEdit m_desc;
+ CString m_location;
+ CString m_desc;
+
+public:
+ CPPageFileInfoClip(CString path, IFilterGraph* pFG, IFileSourceFilter* pFSF, IDvdInfo2* pDVDI);
+ virtual ~CPPageFileInfoClip();
+
+ // Dialog Data
+ enum { IDD = IDD_FILEPROPCLIP };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- virtual BOOL OnInitDialog();
virtual BOOL PreTranslateMessage(MSG* pMsg);
+ virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
- virtual LRESULT OnSetPageFocus(WPARAM wParam, LPARAM lParam);
- BOOL OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult);
DECLARE_MESSAGE_MAP()
-public:
+ bool OnDoubleClickLocation();
};
diff --git a/src/mpc-hc/PPageFileInfoDetails.cpp b/src/mpc-hc/PPageFileInfoDetails.cpp
index d62e23fbe..b70c167b1 100644
--- a/src/mpc-hc/PPageFileInfoDetails.cpp
+++ b/src/mpc-hc/PPageFileInfoDetails.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -28,59 +28,72 @@
#include <d3d9.h>
#include <vmr9.h>
#include "moreuuids.h"
+#include "../SubPic/ISubPic.h"
-static bool GetProperty(IFilterGraph* pFG, LPCOLESTR propName, VARIANT* vt)
-{
- BeginEnumFilters(pFG, pEF, pBF) {
- if (CComQIPtr<IPropertyBag> pPB = pBF)
- if (SUCCEEDED(pPB->Read(propName, vt, nullptr))) {
- return true;
- }
- }
- EndEnumFilters;
-
- return false;
-}
-
-static CString FormatDateTime(FILETIME tm)
-{
- SYSTEMTIME st;
- FileTimeToSystemTime(&tm, &st);
- TCHAR buff[256];
- GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, nullptr, buff, _countof(buff));
- CString ret(buff);
- ret += _T(" ");
- GetTimeFormat(LOCALE_USER_DEFAULT, 0, &st, nullptr, buff, _countof(buff));
- ret += buff;
- return ret;
-}
-
// CPPageFileInfoDetails dialog
IMPLEMENT_DYNAMIC(CPPageFileInfoDetails, CPropertyPage)
-CPPageFileInfoDetails::CPPageFileInfoDetails(CString path, IFilterGraph* pFG, ISubPicAllocatorPresenter* pCAP, IFileSourceFilter* pFSF)
+CPPageFileInfoDetails::CPPageFileInfoDetails(CString path, IFilterGraph* pFG, ISubPicAllocatorPresenter* pCAP, IFileSourceFilter* pFSF, IDvdInfo2* pDVDI)
: CPropertyPage(CPPageFileInfoDetails::IDD, CPPageFileInfoDetails::IDD)
+ , m_hIcon(nullptr)
, m_fn(path)
, m_path(path)
- , m_hIcon(nullptr)
- , m_type(ResStr(IDS_AG_NOT_KNOWN))
- , m_size(ResStr(IDS_AG_NOT_KNOWN))
- , m_time(ResStr(IDS_AG_NOT_KNOWN))
- , m_res(ResStr(IDS_AG_NOT_KNOWN))
- , m_created(ResStr(IDS_AG_NOT_KNOWN))
+ , m_type(StrRes(IDS_AG_NOT_KNOWN))
+ , m_size(StrRes(IDS_AG_NOT_KNOWN))
+ , m_duration(StrRes(IDS_AG_NOT_KNOWN))
+ , m_resolution(StrRes(IDS_AG_NOT_KNOWN))
+ , m_creationDate(StrRes(IDS_AG_NOT_KNOWN))
{
if (pFSF) {
- LPOLESTR pFN;
+ CComHeapPtr<OLECHAR> pFN;
if (SUCCEEDED(pFSF->GetCurFile(&pFN, nullptr))) {
m_fn = pFN;
- CoTaskMemFree(pFN);
+ }
+ } else if (pDVDI) {
+ ULONG len = 0;
+ if (SUCCEEDED(pDVDI->GetDVDDirectory(m_path.GetBufferSetLength(MAX_PATH), MAX_PATH, &len)) && len) {
+ m_path.ReleaseBuffer();
+ m_fn = m_path += _T("\\VIDEO_TS.IFO");
}
}
- CString created;
+ auto getProperty = [](IFilterGraph * pFG, LPCOLESTR propName, VARIANT * vt) {
+ BeginEnumFilters(pFG, pEF, pBF) {
+ if (CComQIPtr<IPropertyBag> pPB = pBF)
+ if (SUCCEEDED(pPB->Read(propName, vt, nullptr))) {
+ return true;
+ }
+ }
+ EndEnumFilters;
+
+ return false;
+ };
+
+ auto formatDateTime = [](FILETIME tm) {
+ SYSTEMTIME st, stLocal;
+ VERIFY(FileTimeToSystemTime(&tm, &st));
+ VERIFY(SystemTimeToTzSpecificLocalTime(nullptr, &st, &stLocal));
+
+ CString formatedDateTime;
+ // Compute the size need to hold the formated date and time
+ int nLenght = GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &stLocal, nullptr, nullptr, 0);
+ nLenght += GetTimeFormat(LOCALE_USER_DEFAULT, 0, &stLocal, nullptr, nullptr, 0);
+
+ LPTSTR szFormatedDateTime = formatedDateTime.GetBuffer(nLenght);
+ int nDateLenght = GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &stLocal, nullptr, szFormatedDateTime, nLenght);
+ if (nDateLenght > 0) {
+ szFormatedDateTime[nDateLenght - 1] = _T(' '); // Replace the end of string character by a space
+ GetTimeFormat(LOCALE_USER_DEFAULT, 0, &stLocal, nullptr, &szFormatedDateTime[nDateLenght], nLenght - nDateLenght);
+ }
+ formatedDateTime.ReleaseBuffer();
+
+ return formatedDateTime;
+ };
+
+ CString creationDate;
CComVariant vt;
- if (::GetProperty(pFG, L"CurFile.TimeCreated", &vt)) {
+ if (getProperty(pFG, OLESTR("CurFile.TimeCreated"), &vt)) {
if (V_VT(&vt) == VT_UI8) {
ULARGE_INTEGER uli;
uli.QuadPart = V_UI8(&vt);
@@ -89,7 +102,7 @@ CPPageFileInfoDetails::CPPageFileInfoDetails(CString path, IFilterGraph* pFG, IS
ft.dwLowDateTime = uli.LowPart;
ft.dwHighDateTime = uli.HighPart;
- created = FormatDateTime(ft);
+ creationDate = formatDateTime(ft);
}
}
@@ -116,31 +129,31 @@ CPPageFileInfoDetails::CPPageFileInfoDetails(CString path, IFilterGraph* pFG, IS
size = (__int64(wfd.nFileSizeHigh) << 32) | wfd.nFileSizeLow;
}
- if (created.IsEmpty()) {
- created = FormatDateTime(wfd.ftCreationTime);
+ if (creationDate.IsEmpty()) {
+ creationDate = formatDateTime(wfd.ftCreationTime);
}
}
if (size > 0) {
- const int MAX_FILE_SIZE_BUFFER = 65;
+ const UINT MAX_FILE_SIZE_BUFFER = 16;
WCHAR szFileSize[MAX_FILE_SIZE_BUFFER];
StrFormatByteSizeW(size, szFileSize, MAX_FILE_SIZE_BUFFER);
CString szByteSize;
szByteSize.Format(_T("%I64d"), size);
- m_size.Format(_T("%s (%s bytes)"), szFileSize, FormatNumber(szByteSize));
+ m_size.Format(_T("%s (%s %s)"), szFileSize, FormatNumber(szByteSize), ResStr(IDS_SIZE_UNIT_BYTES));
}
- if (!created.IsEmpty()) {
- m_created = created;
+ if (!creationDate.IsEmpty()) {
+ m_creationDate = creationDate;
}
REFERENCE_TIME rtDur = 0;
CComQIPtr<IMediaSeeking> pMS = pFG;
if (pMS && SUCCEEDED(pMS->GetDuration(&rtDur)) && rtDur > 0) {
- m_time = ReftimeToString2(rtDur);
+ m_duration = ReftimeToString2(rtDur);
}
- CSize wh(0, 0), arxy(0, 0);
+ CSize wh, arxy;
if (pCAP) {
wh = pCAP->GetVideoSize(false);
@@ -177,7 +190,7 @@ CPPageFileInfoDetails::CPPageFileInfoDetails(CString path, IFilterGraph* pFG, IS
}
if (wh.cx > 0 && wh.cy > 0) {
- m_res.Format(_T("%dx%d"), wh.cx, wh.cy);
+ m_resolution.Format(_T("%dx%d"), wh.cx, wh.cy);
int gcd = GCD(arxy.cx, arxy.cy);
if (gcd > 1) {
@@ -186,92 +199,14 @@ CPPageFileInfoDetails::CPPageFileInfoDetails(CString path, IFilterGraph* pFG, IS
}
if (arxy.cx > 0 && arxy.cy > 0 && arxy.cx * wh.cy != arxy.cy * wh.cx) {
- CString ar;
- ar.Format(_T(" (AR %d:%d)"), arxy.cx, arxy.cy);
- m_res += ar;
+ m_resolution.AppendFormat(_T(" (") + ResStr(IDS_ASPECT_RATIO_FMT) + _T(")"), arxy.cx, arxy.cy);
}
}
- InitEncodingText(pFG);
+ InitTrackInfoText(pFG);
}
-CPPageFileInfoDetails::~CPPageFileInfoDetails()
-{
- if (m_hIcon) {
- DestroyIcon(m_hIcon);
- }
-}
-
-void CPPageFileInfoDetails::DoDataExchange(CDataExchange* pDX)
-{
- __super::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_DEFAULTICON, m_icon);
- DDX_Text(pDX, IDC_EDIT1, m_fn);
- DDX_Text(pDX, IDC_EDIT4, m_type);
- DDX_Text(pDX, IDC_EDIT3, m_size);
- DDX_Text(pDX, IDC_EDIT2, m_time);
- DDX_Text(pDX, IDC_EDIT5, m_res);
- DDX_Text(pDX, IDC_EDIT6, m_created);
- DDX_Control(pDX, IDC_EDIT7, m_encoding);
-}
-
-#define SETPAGEFOCUS (WM_APP + 252) // arbitrary number, can be changed if necessary
-
-BEGIN_MESSAGE_MAP(CPPageFileInfoDetails, CPropertyPage)
- ON_MESSAGE(SETPAGEFOCUS, OnSetPageFocus)
-END_MESSAGE_MAP()
-
-// CPPageFileInfoDetails message handlers
-
-BOOL CPPageFileInfoDetails::OnInitDialog()
-{
- __super::OnInitDialog();
-
- if (m_path.IsEmpty()) {
- m_path = m_fn;
- }
-
- m_fn.TrimRight('/');
- m_fn.Replace('\\', '/');
- m_fn = m_fn.Mid(m_fn.ReverseFind('/') + 1);
-
- CString ext = m_fn.Left(m_fn.Find(_T("://")) + 1).TrimRight(':');
- if (ext.IsEmpty() || !ext.CompareNoCase(_T("file"))) {
- ext = _T(".") + m_fn.Mid(m_fn.ReverseFind('.') + 1);
- }
-
- m_hIcon = LoadIcon(m_fn, false);
- if (m_hIcon) {
- m_icon.SetIcon(m_hIcon);
- }
-
- if (!LoadType(ext, m_type)) {
- m_type.LoadString(IDS_AG_NOT_KNOWN);
- }
-
- UpdateData(FALSE);
-
- m_encoding.SetWindowText(m_encodingtext);
-
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
-}
-
-BOOL CPPageFileInfoDetails::OnSetActive()
-{
- BOOL ret = __super::OnSetActive();
- PostMessage(SETPAGEFOCUS, 0, 0L);
- return ret;
-}
-
-LRESULT CPPageFileInfoDetails::OnSetPageFocus(WPARAM wParam, LPARAM lParam)
-{
- CPropertySheet* psheet = (CPropertySheet*) GetParent();
- psheet->GetTabControl()->SetFocus();
- return 0;
-}
-
-void CPPageFileInfoDetails::InitEncodingText(IFilterGraph* pFG)
+void CPPageFileInfoDetails::InitTrackInfoText(IFilterGraph* pFG)
{
CAtlList<CString> videoStreams;
CAtlList<CString> otherStreams;
@@ -352,9 +287,76 @@ void CPPageFileInfoDetails::InitEncodingText(IFilterGraph* pFG)
}
EndEnumFilters;
- m_encodingtext = Implode(videoStreams, _T("\r\n"));
- if (!m_encodingtext.IsEmpty()) {
- m_encodingtext += _T("\r\n");
+ m_trackInfo = Implode(videoStreams, _T("\r\n"));
+ if (!videoStreams.IsEmpty() && !otherStreams.IsEmpty()) {
+ m_trackInfo += _T("\r\n");
+ }
+ m_trackInfo += Implode(otherStreams, _T("\r\n"));
+}
+
+CPPageFileInfoDetails::~CPPageFileInfoDetails()
+{
+ if (m_hIcon) {
+ DestroyIcon(m_hIcon);
+ }
+}
+
+void CPPageFileInfoDetails::DoDataExchange(CDataExchange* pDX)
+{
+ __super::DoDataExchange(pDX);
+ DDX_Control(pDX, IDC_DEFAULTICON, m_icon);
+ DDX_Text(pDX, IDC_EDIT1, m_fn);
+ DDX_Text(pDX, IDC_EDIT4, m_type);
+ DDX_Text(pDX, IDC_EDIT3, m_size);
+ DDX_Text(pDX, IDC_EDIT2, m_duration);
+ DDX_Text(pDX, IDC_EDIT5, m_resolution);
+ DDX_Text(pDX, IDC_EDIT6, m_creationDate);
+ DDX_Text(pDX, IDC_EDIT7, m_trackInfo);
+}
+
+BEGIN_MESSAGE_MAP(CPPageFileInfoDetails, CPropertyPage)
+END_MESSAGE_MAP()
+
+// CPPageFileInfoDetails message handlers
+
+BOOL CPPageFileInfoDetails::OnInitDialog()
+{
+ __super::OnInitDialog();
+
+ if (m_path.IsEmpty()) {
+ m_path = m_fn;
}
- m_encodingtext += Implode(otherStreams, _T("\r\n"));
+
+ m_fn.TrimRight('/');
+ m_fn.Replace('\\', '/');
+ m_fn = m_fn.Mid(m_fn.ReverseFind('/') + 1);
+
+ CString ext = m_fn.Left(m_fn.Find(_T("://")) + 1).TrimRight(':');
+ if (ext.IsEmpty() || !ext.CompareNoCase(_T("file"))) {
+ ext = _T(".") + m_fn.Mid(m_fn.ReverseFind('.') + 1);
+ }
+
+ m_hIcon = LoadIcon(m_fn, false);
+ if (m_hIcon) {
+ m_icon.SetIcon(m_hIcon);
+ }
+
+ if (!LoadType(ext, m_type)) {
+ m_type.LoadString(IDS_AG_NOT_KNOWN);
+ }
+
+ UpdateData(FALSE);
+
+ return TRUE; // return TRUE unless you set the focus to a control
+ // EXCEPTION: OCX Property Pages should return FALSE
+}
+
+BOOL CPPageFileInfoDetails::OnSetActive()
+{
+ BOOL ret = __super::OnSetActive();
+
+ PostMessage(WM_NEXTDLGCTL, (WPARAM)GetParentSheet()->GetTabControl()->GetSafeHwnd(), TRUE);
+ GetDlgItem(IDC_EDIT1)->PostMessage(WM_KEYDOWN, VK_HOME);
+
+ return ret;
}
diff --git a/src/mpc-hc/PPageFileInfoDetails.h b/src/mpc-hc/PPageFileInfoDetails.h
index 4972c5dfa..aeab8ccba 100644
--- a/src/mpc-hc/PPageFileInfoDetails.h
+++ b/src/mpc-hc/PPageFileInfoDetails.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,45 +21,42 @@
#pragma once
-#include "../SubPic/ISubPic.h"
#include <afxwin.h>
// CPPageFileInfoDetails dialog
+struct ISubPicAllocatorPresenter;
+
class CPPageFileInfoDetails : public CPropertyPage
{
DECLARE_DYNAMIC(CPPageFileInfoDetails)
private:
HICON m_hIcon;
+ CStatic m_icon;
- void InitEncodingText(IFilterGraph* pFG);
+ CString m_fn, m_path;
+ CString m_type;
+ CString m_size;
+ CString m_duration;
+ CString m_resolution;
+ CString m_creationDate;
+ CString m_trackInfo;
+
+ void InitTrackInfoText(IFilterGraph* pFG);
public:
- CPPageFileInfoDetails(CString path, IFilterGraph* pFG, ISubPicAllocatorPresenter* pCAP, IFileSourceFilter* pFSF);
+ CPPageFileInfoDetails(CString path, IFilterGraph* pFG, ISubPicAllocatorPresenter* pCAP, IFileSourceFilter* pFSF, IDvdInfo2* pDVDI);
virtual ~CPPageFileInfoDetails();
// Dialog Data
enum { IDD = IDD_FILEPROPDETAILS };
- CStatic m_icon;
- CString m_fn, m_path;
- CString m_type;
- CString m_size;
- CString m_time;
- CString m_res;
- CString m_created;
- CString m_encodingtext;
- CEdit m_encoding;
-
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
- virtual LRESULT OnSetPageFocus(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
-
-public:
};
diff --git a/src/mpc-hc/PPageFileInfoRes.cpp b/src/mpc-hc/PPageFileInfoRes.cpp
index 02432bc63..da1ac6b12 100644
--- a/src/mpc-hc/PPageFileInfoRes.cpp
+++ b/src/mpc-hc/PPageFileInfoRes.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -29,14 +29,13 @@
IMPLEMENT_DYNAMIC(CPPageFileInfoRes, CPPageBase)
CPPageFileInfoRes::CPPageFileInfoRes(CString path, IFilterGraph* pFG, IFileSourceFilter* pFSF)
: CPPageBase(CPPageFileInfoRes::IDD, CPPageFileInfoRes::IDD)
- , m_fn(path)
, m_hIcon(nullptr)
+ , m_fn(path)
{
if (pFSF) {
- LPOLESTR pFN = nullptr;
+ CComHeapPtr<OLECHAR> pFN;
if (SUCCEEDED(pFSF->GetCurFile(&pFN, nullptr))) {
m_fn = pFN;
- CoTaskMemFree(pFN);
}
}
@@ -54,14 +53,8 @@ CPPageFileInfoRes::CPPageFileInfoRes(CString path, IFilterGraph* pFG, IFileSourc
BYTE* pData = nullptr;
DWORD len = 0;
if (SUCCEEDED(pRB->ResGet(j, &name, &desc, &mime, &pData, &len, nullptr))) {
- CDSMResource r;
- r.name = name;
- r.desc = desc;
- r.mime = mime;
- r.data.SetCount(len);
- memcpy(r.data.GetData(), pData, r.data.GetCount());
+ m_res.emplace_back(name, desc, mime, pData, len);
CoTaskMemFree(pData);
- m_res.push_back(std::move(r));
}
}
}
@@ -117,23 +110,32 @@ BOOL CPPageFileInfoRes::OnInitDialog()
// EXCEPTION: OCX Property Pages should return FALSE
}
-void CPPageFileInfoRes::OnSaveAs()
+BOOL CPPageFileInfoRes::OnSetActive()
{
- int i = m_list.GetSelectionMark();
- if (i < 0) {
- return;
- }
+ BOOL ret = __super::OnSetActive();
+
+ PostMessage(WM_NEXTDLGCTL, (WPARAM)GetParentSheet()->GetTabControl()->GetSafeHwnd(), TRUE);
+ GetDlgItem(IDC_EDIT1)->PostMessage(WM_KEYDOWN, VK_HOME);
- CDSMResource& r = m_res[m_list.GetItemData(i)];
+ return ret;
+}
- CFileDialog fd(FALSE, nullptr, CString(r.name),
- OFN_EXPLORER | OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR,
- _T("All files|*.*||"), this, 0);
- if (fd.DoModal() == IDOK) {
- FILE* f = nullptr;
- if (!_tfopen_s(&f, fd.GetPathName(), _T("wb"))) {
- fwrite(r.data.GetData(), 1, r.data.GetCount(), f);
- fclose(f);
+void CPPageFileInfoRes::OnSaveAs()
+{
+ int i = m_list.GetSelectionMark();
+ if (i >= 0) {
+ const auto& r = m_res[m_list.GetItemData(i)];
+
+ CFileDialog fd(FALSE, nullptr, r.name,
+ OFN_EXPLORER | OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR,
+ _T("All files|*.*||"), this, 0);
+
+ if (fd.DoModal() == IDOK) {
+ CFile file;
+ if (file.Open(fd.GetPathName(), CFile::modeCreate | CFile::modeWrite)) {
+ file.Write(r.data.GetData(), (UINT)r.data.GetCount());
+ file.Close();
+ }
}
}
}
@@ -146,21 +148,17 @@ void CPPageFileInfoRes::OnUpdateSaveAs(CCmdUI* pCmdUI)
void CPPageFileInfoRes::OnOpenEmbeddedResInBrowser(NMHDR* pNMHDR, LRESULT* pResult)
{
int i = m_list.GetSelectionMark();
- if (i < 0) {
- return;
- }
+ if (i >= 0) {
+ const CAppSettings& s = AfxGetAppSettings();
- const CAppSettings& s = AfxGetAppSettings();
+ if (s.fEnableWebServer) {
+ const auto& r = m_res[m_list.GetItemData(i)];
- if (s.fEnableWebServer) {
- CDSMResource& r = m_res[m_list.GetItemData(i)];
-
- CString url;
- url.Format(_T("http://localhost:%d/viewres.html?id=%Ix"), s.nWebServerPort, reinterpret_cast<uintptr_t>(&r));
- ShellExecute(nullptr, _T("open"), url, nullptr, nullptr, SW_SHOWDEFAULT);
- } else {
- AfxMessageBox(IDS_EMB_RESOURCES_VIEWER_INFO, MB_ICONINFORMATION);
+ CString url;
+ url.Format(_T("http://localhost:%d/viewres.html?id=%Ix"), s.nWebServerPort, reinterpret_cast<uintptr_t>(&r));
+ ShellExecute(nullptr, _T("open"), url, nullptr, nullptr, SW_SHOWDEFAULT);
+ } else {
+ AfxMessageBox(IDS_EMB_RESOURCES_VIEWER_INFO, MB_ICONINFORMATION);
+ }
}
-
- *pResult = 0;
}
diff --git a/src/mpc-hc/PPageFileInfoRes.h b/src/mpc-hc/PPageFileInfoRes.h
index 293836541..e373f4327 100644
--- a/src/mpc-hc/PPageFileInfoRes.h
+++ b/src/mpc-hc/PPageFileInfoRes.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -35,22 +35,25 @@ class CPPageFileInfoRes : public CPPageBase
private:
HICON m_hIcon;
+ CStatic m_icon;
+ CListCtrl m_list;
+
+ CString m_fn;
std::vector<CDSMResource> m_res;
public:
- CPPageFileInfoRes(CString path, IFilterGraph* pFG, IFileSourceFilter* pFSF); // standard constructor
+ CPPageFileInfoRes(CString path, IFilterGraph* pFG, IFileSourceFilter* pFSF);
virtual ~CPPageFileInfoRes();
// Dialog Data
enum { IDD = IDD_FILEPROPRES };
- CStatic m_icon;
- CString m_fn;
- CListCtrl m_list;
+ bool HasResources() const { return !m_res.empty(); };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
+ virtual BOOL OnSetActive();
DECLARE_MESSAGE_MAP()
diff --git a/src/mpc-hc/PPageFileInfoSheet.cpp b/src/mpc-hc/PPageFileInfoSheet.cpp
index 5f9e014a3..5848b796a 100644
--- a/src/mpc-hc/PPageFileInfoSheet.cpp
+++ b/src/mpc-hc/PPageFileInfoSheet.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -30,31 +30,24 @@
IMPLEMENT_DYNAMIC(CPPageFileInfoSheet, CPropertySheet)
CPPageFileInfoSheet::CPPageFileInfoSheet(CString path, CMainFrame* pMainFrame, CWnd* pParentWnd)
- : CPropertySheet(ResStr(IDS_PROPSHEET_PROPERTIES), pParentWnd, 0)
- , m_clip(path, pMainFrame->m_pGB, pMainFrame->m_pFSF)
- , m_details(path, pMainFrame->m_pGB, pMainFrame->m_pCAP, pMainFrame->m_pFSF)
+ : CPropertySheet(IDS_PROPSHEET_PROPERTIES, pParentWnd, 0)
+ , m_clip(path, pMainFrame->m_pGB, pMainFrame->m_pFSF, pMainFrame->m_pDVDI)
+ , m_details(path, pMainFrame->m_pGB, pMainFrame->m_pCAP, pMainFrame->m_pFSF, pMainFrame->m_pDVDI)
, m_res(path, pMainFrame->m_pGB, pMainFrame->m_pFSF)
- , m_mi(path, pMainFrame->m_pFSF)
+ , m_mi(path, pMainFrame->m_pFSF, pMainFrame->m_pDVDI, pMainFrame)
, m_path(path)
{
AddPage(&m_details);
AddPage(&m_clip);
- BeginEnumFilters(pMainFrame->m_pGB, pEF, pBF) {
- if (CComQIPtr<IDSMResourceBag> pRB = pBF)
- if (pRB && pRB->ResGetCount() > 0) {
- AddPage(&m_res);
- break;
- }
+ if (m_res.HasResources()) {
+ AddPage(&m_res);
}
- EndEnumFilters;
#if !USE_STATIC_MEDIAINFO
if (CPPageFileMediaInfo::HasMediaInfo())
#endif
- if (m_mi.HasInfo()) {
- AddPage(&m_mi);
- }
+ AddPage(&m_mi);
}
CPPageFileInfoSheet::~CPPageFileInfoSheet()
@@ -94,26 +87,5 @@ BOOL CPPageFileInfoSheet::OnInitDialog()
void CPPageFileInfoSheet::OnSaveAs()
{
- CString fn = m_mi.m_fn;
-
- fn.TrimRight('/');
- int i = max(fn.ReverseFind('\\'), fn.ReverseFind('/'));
- if (i >= 0 && i < fn.GetLength() - 1) {
- fn = fn.Mid(i + 1);
- }
- fn.Append(_T(".MediaInfo.txt"));
-
- CFileDialog filedlg(FALSE, _T("*.txt"), fn,
- OFN_EXPLORER | OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR,
- _T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"), this, 0);
-
- if (filedlg.DoModal() == IDOK) { // user has chosen a file, so
- TCHAR bom = (TCHAR)0xFEFF;
- CFile mFile;
- if (mFile.Open(filedlg.GetPathName(), CFile::modeCreate | CFile::modeWrite)) {
- mFile.Write(&bom, sizeof(TCHAR));
- mFile.Write(LPCTSTR(m_mi.MI_Text), m_mi.MI_Text.GetLength()*sizeof(TCHAR));
- mFile.Close();
- }
- }
+ m_mi.OnSaveAs();
}
diff --git a/src/mpc-hc/PPageFileMediaInfo.cpp b/src/mpc-hc/PPageFileMediaInfo.cpp
index 48ed58e40..faf485d0f 100644
--- a/src/mpc-hc/PPageFileMediaInfo.cpp
+++ b/src/mpc-hc/PPageFileMediaInfo.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,6 +23,7 @@
#include "stdafx.h"
#include "mplayerc.h"
+#include "MainFrm.h"
#include "PPageFileMediaInfo.h"
#include "WinAPIUtils.h"
@@ -31,7 +32,7 @@
using namespace MediaInfoLib;
#define MediaInfo_int64u ZenLib::int64u
#else
-#include "MediaInfoDLL.h"
+#include "MediaInfoDLL/MediaInfoDLL.h"
using namespace MediaInfoDLL;
#endif
@@ -40,18 +41,17 @@ using namespace MediaInfoDLL;
// CPPageFileMediaInfo dialog
IMPLEMENT_DYNAMIC(CPPageFileMediaInfo, CPropertyPage)
-CPPageFileMediaInfo::CPPageFileMediaInfo(CString path, IFileSourceFilter* pFSF)
+CPPageFileMediaInfo::CPPageFileMediaInfo(CString path, IFileSourceFilter* pFSF, IDvdInfo2* pDVDI, CMainFrame* pMainFrame)
: CPropertyPage(CPPageFileMediaInfo::IDD, CPPageFileMediaInfo::IDD)
, m_fn(path)
, m_path(path)
- , m_pCFont(nullptr)
+ , m_bSyncAnalysis(false)
{
CComQIPtr<IAsyncReader> pAR;
if (pFSF) {
- LPOLESTR pFN;
+ CComHeapPtr<OLECHAR> pFN;
if (SUCCEEDED(pFSF->GetCurFile(&pFN, nullptr))) {
m_fn = pFN;
- CoTaskMemFree(pFN);
}
if (CComQIPtr<IBaseFilter> pBF = pFSF) {
@@ -62,70 +62,98 @@ CPPageFileMediaInfo::CPPageFileMediaInfo(CString path, IFileSourceFilter* pFSF)
}
EndEnumPins;
}
+ } else if (pDVDI) {
+ ULONG len = 0;
+ if (SUCCEEDED(pDVDI->GetDVDDirectory(m_path.GetBufferSetLength(MAX_PATH), MAX_PATH, &len)) && len) {
+ m_path.ReleaseBuffer();
+ m_fn = m_path += _T("\\VIDEO_TS.IFO");
+ }
}
if (m_path.IsEmpty()) {
m_path = m_fn;
}
+ if (m_path.GetLength() > 1 && m_path[1] == _T(':')
+ && GetDriveType(m_path.Left(2) + _T('\\')) == DRIVE_CDROM) {
+ // If we are playing from an optical drive, we do the analysis synchronously
+ // when the user chooses to display the MediaInfo tab. We keep a reference
+ // on the async reader filter but it will not cause any issue even if the
+ // filter graph is destroyed before the analysis.
+ m_bSyncAnalysis = true;
+ }
+
+ m_futureMIText = std::async(m_bSyncAnalysis ? std::launch::deferred : std::launch::async, [ = ]() {
#if USE_STATIC_MEDIAINFO
- MediaInfoLib::String f_name = m_path;
- MediaInfoLib::MediaInfo MI;
+ MediaInfoLib::String filename = m_path;
+ MediaInfoLib::MediaInfo MI;
#else
- MediaInfoDLL::String f_name = m_path;
- MediaInfo MI;
+ MediaInfoDLL::String filename = m_path;
+ MediaInfo MI;
#endif
+ // If we do a synchronous analysis on an optical drive, we pause the video during
+ // the analysis to avoid concurrent accesses to the drive. Note that due to the
+ // synchronous nature of the analysis, we are sure that the graph state will not
+ // change during the analysis.
+ bool bUnpause = false;
+ if (m_bSyncAnalysis && pMainFrame->GetMediaState() == State_Running) {
+ pMainFrame->SendMessage(WM_COMMAND, ID_PLAY_PAUSE);
+ bUnpause = true;
+ }
- MI.Option(_T("ParseSpeed"), _T("0.5"));
- MI.Option(_T("Complete"));
- MI.Option(_T("Language"), _T(" Config_Text_ColumnSize;30"));
+ MI.Option(_T("ParseSpeed"), _T("0.5"));
+ MI.Option(_T("Complete"));
+ MI.Option(_T("Language"), _T(" Config_Text_ColumnSize;30"));
- LONGLONG llSize, llAvailable;
- if (pAR && SUCCEEDED(pAR->Length(&llSize, &llAvailable))) {
- size_t ret = MI.Open_Buffer_Init((MediaInfo_int64u)llSize);
+ LONGLONG llSize, llAvailable;
+ if (pAR && SUCCEEDED(pAR->Length(&llSize, &llAvailable))) {
+ size_t ret = MI.Open_Buffer_Init((MediaInfo_int64u)llSize);
- std::vector<BYTE> buffer(MEDIAINFO_BUFFER_SIZE);
- LONGLONG llPosition = 0;
- while ((ret & 0x1) && !(ret & 0x8) && llPosition < llAvailable) { // While accepted and not finished
- size_t szLength = (size_t)std::min(llAvailable - llPosition, (LONGLONG)buffer.size());
- if (pAR->SyncRead(llPosition, (LONG)szLength, buffer.data()) != S_OK) {
- break;
- }
+ std::vector<BYTE> buffer(MEDIAINFO_BUFFER_SIZE);
+ LONGLONG llPosition = 0;
+ while ((ret & 0x1) && !(ret & 0x8) && llPosition < llAvailable) { // While accepted and not finished
+ size_t szLength = (size_t)std::min(llAvailable - llPosition, (LONGLONG)buffer.size());
+ if (pAR->SyncRead(llPosition, (LONG)szLength, buffer.data()) != S_OK) {
+ break;
+ }
- ret = MI.Open_Buffer_Continue(buffer.data(), szLength);
+ ret = MI.Open_Buffer_Continue(buffer.data(), szLength);
- // Seek to a different position if needed
- MediaInfo_int64u uiNeeded = MI.Open_Buffer_Continue_GoTo_Get();
- if (uiNeeded != MediaInfo_int64u(-1)) {
- llPosition = (LONGLONG)uiNeeded;
- // Inform MediaInfo of the seek
- MI.Open_Buffer_Init((MediaInfo_int64u)llSize, (MediaInfo_int64u)llPosition);
- } else {
- llPosition += (LONGLONG)szLength;
- }
+ // Seek to a different position if needed
+ MediaInfo_int64u uiNeeded = MI.Open_Buffer_Continue_GoTo_Get();
+ if (uiNeeded != MediaInfo_int64u(-1)) {
+ llPosition = (LONGLONG)uiNeeded;
+ // Inform MediaInfo of the seek
+ MI.Open_Buffer_Init((MediaInfo_int64u)llSize, (MediaInfo_int64u)llPosition);
+ } else {
+ llPosition += (LONGLONG)szLength;
+ }
- if (FAILED(pAR->Length(&llSize, &llAvailable))) {
- break;
+ if (FAILED(pAR->Length(&llSize, &llAvailable))) {
+ break;
+ }
}
+ MI.Open_Buffer_Finalize();
+ } else {
+ MI.Open(filename);
+ }
+
+ if (bUnpause) {
+ pMainFrame->SendMessage(WM_COMMAND, ID_PLAY_PLAY);
}
- MI.Open_Buffer_Finalize();
- MI_Text = MI.Inform().c_str();
- } else {
- MI.Open(f_name);
- MI_Text = MI.Inform().c_str();
- MI.Close();
+ CString info = MI.Inform().c_str();
- if (!MI_Text.Find(_T("Unable to load"))) {
- MI_Text = _T("");
+ if (info.IsEmpty() || !info.Find(_T("Unable to load"))) {
+ info.LoadString(IDS_MEDIAINFO_NO_INFO_AVAILABLE);
}
- }
+
+ return info;
+ }).share();
}
CPPageFileMediaInfo::~CPPageFileMediaInfo()
{
- delete m_pCFont;
- m_pCFont = nullptr;
}
void CPPageFileMediaInfo::DoDataExchange(CDataExchange* pDX)
@@ -134,59 +162,58 @@ void CPPageFileMediaInfo::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_MIEDIT, m_mediainfo);
}
+BOOL CPPageFileMediaInfo::PreTranslateMessage(MSG* pMsg)
+{
+ if (pMsg->message == WM_KEYDOWN && pMsg->hwnd == m_mediainfo) {
+ if (OnKeyDownInEdit(pMsg)) {
+ return TRUE;
+ }
+ }
+
+ return __super::PreTranslateMessage(pMsg);
+}
BEGIN_MESSAGE_MAP(CPPageFileMediaInfo, CPropertyPage)
ON_WM_SHOWWINDOW()
+ ON_WM_DESTROY()
+ ON_MESSAGE_VOID(WM_MEDIAINFO_READY, OnMediaInfoReady)
END_MESSAGE_MAP()
// CPPageFileMediaInfo message handlers
-static WNDPROC OldControlProc;
-
-static LRESULT CALLBACK ControlProc(HWND control, UINT message, WPARAM wParam, LPARAM lParam)
-{
- if (message == WM_KEYDOWN) {
- if ((LOWORD(wParam) == 'A' || LOWORD(wParam) == 'a')
- && (GetKeyState(VK_CONTROL) < 0)) {
- CEdit* pEdit = (CEdit*)CWnd::FromHandle(control);
- pEdit->SetSel(0, pEdit->GetWindowTextLength(), TRUE);
- return 0;
- }
- }
-
- return CallWindowProc(OldControlProc, control, message, wParam, lParam); // call edit control's own windowproc
-}
BOOL CPPageFileMediaInfo::OnInitDialog()
{
__super::OnInitDialog();
- if (!m_pCFont) {
- m_pCFont = DEBUG_NEW CFont;
- }
- if (!m_pCFont) {
- return TRUE;
- }
-
LOGFONT lf;
ZeroMemory(&lf, sizeof(lf));
lf.lfPitchAndFamily = DEFAULT_PITCH | FF_MODERN;
- // The empty string will fallback to the first font that matches the other specified attributes.
+ // The empty string will fall back to the first font that matches the other specified attributes.
LPCTSTR fonts[] = { _T("Lucida Console"), _T("Courier New"), _T("") };
// Use a negative value to match the character height instead of the cell height.
- int fonts_size[] = { -10, -11, -11 };
- UINT i = 0;
- BOOL success;
+ const int fonts_size[] = { 10, 11, 11 };
+ size_t i = 0;
+ bool bSuccess;
+ DpiHelper dpi;
do {
_tcscpy_s(lf.lfFaceName, fonts[i]);
- lf.lfHeight = fonts_size[i];
- success = IsFontInstalled(fonts[i]) && m_pCFont->CreateFontIndirect(&lf);
+ lf.lfHeight = -dpi.ScaleY(fonts_size[i]);
+ bSuccess = IsFontInstalled(fonts[i]) && m_font.CreateFontIndirect(&lf);
i++;
- } while (!success && i < _countof(fonts));
- m_mediainfo.SetFont(m_pCFont);
- m_mediainfo.SetWindowText(MI_Text);
-
- // subclass the edit control
- OldControlProc = (WNDPROC)SetWindowLongPtr(m_mediainfo.m_hWnd, GWLP_WNDPROC, (LONG_PTR)ControlProc);
+ } while (!bSuccess && i < _countof(fonts));
+ m_mediainfo.SetFont(&m_font);
+
+ GetParent()->GetDlgItem(IDC_BUTTON_MI)->EnableWindow(FALSE); // Initially disable the "Save As" button
+
+ if (m_bSyncAnalysis) { // Wait until the analysis is finished
+ OnMediaInfoReady();
+ } else { // Spawn a thread that will asynchronously update the window
+ m_mediainfo.SetWindowText(ResStr(IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS));
+ m_threadSetText = std::thread([this]() {
+ m_futureMIText.wait(); // Wait for the info to be ready
+ PostMessage(WM_MEDIAINFO_READY); // then notify the window that MediaInfo analysis finished
+ });
+ }
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
@@ -195,11 +222,36 @@ BOOL CPPageFileMediaInfo::OnInitDialog()
void CPPageFileMediaInfo::OnShowWindow(BOOL bShow, UINT nStatus)
{
__super::OnShowWindow(bShow, nStatus);
- if (bShow) {
- GetParent()->GetDlgItem(IDC_BUTTON_MI)->ShowWindow(SW_SHOW);
- } else {
- GetParent()->GetDlgItem(IDC_BUTTON_MI)->ShowWindow(SW_HIDE);
+
+ GetParent()->GetDlgItem(IDC_BUTTON_MI)->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
+}
+
+void CPPageFileMediaInfo::OnDestroy()
+{
+ if (m_threadSetText.joinable()) {
+ m_threadSetText.join();
+ }
+}
+
+void CPPageFileMediaInfo::OnMediaInfoReady()
+{
+ if (m_futureMIText.get() != ResStr(IDS_MEDIAINFO_NO_INFO_AVAILABLE)) {
+ GetParent()->GetDlgItem(IDC_BUTTON_MI)->EnableWindow(TRUE);
}
+ m_mediainfo.SetWindowText(m_futureMIText.get());
+}
+
+bool CPPageFileMediaInfo::OnKeyDownInEdit(MSG* pMsg)
+{
+ bool bHandled = false;
+
+ if ((LOWORD(pMsg->wParam) == _T('A') || LOWORD(pMsg->wParam) == _T('a'))
+ && (GetKeyState(VK_CONTROL) < 0)) {
+ m_mediainfo.SetSel(0, -1, TRUE);
+ bHandled = true;
+ }
+
+ return bHandled;
}
#if !USE_STATIC_MEDIAINFO
@@ -209,3 +261,29 @@ bool CPPageFileMediaInfo::HasMediaInfo()
return MI.IsReady();
}
#endif
+
+void CPPageFileMediaInfo::OnSaveAs()
+{
+ CString fn = m_fn;
+
+ fn.TrimRight(_T('/'));
+ int i = std::max(fn.ReverseFind(_T('\\')), fn.ReverseFind(_T('/')));
+ if (i >= 0 && i < fn.GetLength() - 1) {
+ fn = fn.Mid(i + 1);
+ }
+ fn.Append(_T(".MediaInfo.txt"));
+
+ CFileDialog fileDlg(FALSE, _T("*.txt"), fn,
+ OFN_EXPLORER | OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR,
+ _T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"), this, 0);
+
+ if (fileDlg.DoModal() == IDOK) { // user has chosen a file
+ CFile file;
+ if (file.Open(fileDlg.GetPathName(), CFile::modeCreate | CFile::modeWrite)) {
+ TCHAR bom = (TCHAR)0xFEFF;
+ file.Write(&bom, sizeof(TCHAR));
+ file.Write(LPCTSTR(m_futureMIText.get()), m_futureMIText.get().GetLength() * sizeof(TCHAR));
+ file.Close();
+ }
+ }
+}
diff --git a/src/mpc-hc/PPageFileMediaInfo.h b/src/mpc-hc/PPageFileMediaInfo.h
index d9482c8b5..511e591b0 100644
--- a/src/mpc-hc/PPageFileMediaInfo.h
+++ b/src/mpc-hc/PPageFileMediaInfo.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2013 see Authors.txt
+ * (C) 2009-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,35 +20,51 @@
#pragma once
+#include <future>
+#include "mpc-hc_config.h"
+
// CPPageFileMediaInfo dialog
class CPPageFileMediaInfo : public CPropertyPage
{
DECLARE_DYNAMIC(CPPageFileMediaInfo)
+private:
+ CEdit m_mediainfo;
+ CFont m_font;
+
+ CString m_fn, m_path;
+ bool m_bSyncAnalysis;
+ std::shared_future<CString> m_futureMIText;
+ std::thread m_threadSetText;
+
public:
- CPPageFileMediaInfo(CString path, IFileSourceFilter* pFSF);
+ CPPageFileMediaInfo(CString path, IFileSourceFilter* pFSF, IDvdInfo2* pDVDI, CMainFrame* pMainFrame);
virtual ~CPPageFileMediaInfo();
// Dialog Data
enum { IDD = IDD_FILEMEDIAINFO };
- CEdit m_mediainfo;
- CString m_fn, m_path;
- CFont* m_pCFont;
- CString MI_Text;
-
#if !USE_STATIC_MEDIAINFO
static bool HasMediaInfo();
#endif
+
+ void OnSaveAs();
+
protected:
+ enum {
+ WM_MEDIAINFO_READY = WM_APP + 1
+ };
+
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
+ virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
-public:
afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
+ afx_msg void OnDestroy();
+ afx_msg void OnMediaInfoReady();
- bool HasInfo() const { return !MI_Text.IsEmpty(); };
+ bool OnKeyDownInEdit(MSG* pMsg);
};
diff --git a/src/mpc-hc/PPageFormats.cpp b/src/mpc-hc/PPageFormats.cpp
index 4b10591c7..0fdeccb03 100644
--- a/src/mpc-hc/PPageFormats.cpp
+++ b/src/mpc-hc/PPageFormats.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,12 +23,13 @@
#include "mplayerc.h"
#include "PPageFormats.h"
#include "FileAssoc.h"
+#include "PathUtils.h"
#include "SysVersion.h"
-#include "WinAPIUtils.h"
#include <psapi.h>
#include <string>
#include <atlimage.h>
+#include "DpiHelper.h"
// CPPageFormats dialog
@@ -37,10 +38,10 @@ IMPLEMENT_DYNAMIC(CPPageFormats, CPPageBase)
CPPageFormats::CPPageFormats()
: CPPageBase(CPPageFormats::IDD, CPPageFormats::IDD)
, m_list(0)
- , m_iRtspHandler(0)
- , m_fRtspFileExtFirst(FALSE)
, m_bInsufficientPrivileges(false)
, m_bFileExtChanged(false)
+ , m_iRtspHandler(0)
+ , m_fRtspFileExtFirst(FALSE)
, m_bHaveRegisteredCategory(false)
{
}
@@ -269,7 +270,7 @@ BOOL CPPageFormats::OnInitDialog()
GetDlgItem(nID)->MoveWindow(r);
};
- const int dy = DPI().ScaleY(-5);
+ const int dy = DpiHelper().ScaleY(-5); // TODO: use the helper from parent dialog
offsetControlBottomRight(IDC_STATIC2, 0, dy);
offsetControlBottomRight(IDC_LIST1, 0, dy);
@@ -537,13 +538,10 @@ void CPPageFormats::OnClearAllAssociations()
void CPPageFormats::OnBnRunAsAdmin()
{
- TCHAR strApp[MAX_PATH];
CString strCmd;
-
- GetModuleFileNameEx(GetCurrentProcess(), AfxGetMyApp()->m_hInstance, strApp, MAX_PATH);
strCmd.Format(_T("/adminoption %d"), IDD);
- AfxGetMyApp()->RunAsAdministrator(strApp, strCmd, true);
+ AfxGetMyApp()->RunAsAdministrator(PathUtils::GetProgramPath(true), strCmd, true);
auto& s = AfxGetAppSettings();
s.m_Formats.UpdateData(false);
diff --git a/src/mpc-hc/PPageFullscreen.cpp b/src/mpc-hc/PPageFullscreen.cpp
index a0629c22f..d38908161 100644
--- a/src/mpc-hc/PPageFullscreen.cpp
+++ b/src/mpc-hc/PPageFullscreen.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,7 +23,6 @@
#include "MainFrm.h"
#include "mplayerc.h"
#include "PPageFullscreen.h"
-#include "WinAPIUtils.h"
#include "Monitors.h"
#include "MultiMonitor.h"
@@ -35,18 +34,18 @@
IMPLEMENT_DYNAMIC(CPPageFullscreen, CPPageBase)
CPPageFullscreen::CPPageFullscreen()
: CPPageBase(CPPageFullscreen::IDD, CPPageFullscreen::IDD)
+ , m_iFullScreenMonitor(0)
, m_bLaunchFullscreen(FALSE)
+ , m_fExitFullScreenAtTheEnd(FALSE)
, m_bHideFullscreenControls(FALSE)
, m_uHideFullscreenControlsDelay(0)
, m_bHideFullscreenDockedPanels(FALSE)
- , m_fExitFullScreenAtTheEnd(FALSE)
+ , m_nCurrentDisplayModeIndex(0)
, m_bAutoChangeFSModeEnabled(FALSE)
, m_bAutoChangeFSModeApplyDefModeAtFSExist(TRUE)
, m_bAutoChangeFSModeRestoreResAfterProgExit(TRUE)
, m_uAutoChangeFullscrResDelay(0)
- , m_iFullScreenMonitor(0)
, m_list(0)
- , m_nCurrentDisplayModeIndex(0)
{
}
@@ -107,7 +106,7 @@ void CPPageFullscreen::ModesUpdate()
// Populate the vector with default modes on first initialization
if (m_autoChangeFSModes.empty()) {
auto addMode = [this, &currentDisplayMode](double dFRStart, double dFRStop) {
- m_autoChangeFSModes.emplace_back(true, dFRStart, dFRStop, currentDisplayMode);
+ m_autoChangeFSModes.emplace_back(true, dFRStart, dFRStop, 0, currentDisplayMode);
};
addMode(0.0, 0.0); // Default mode
addMode(23.500, 23.981);
@@ -147,16 +146,22 @@ void CPPageFullscreen::ModesUpdate()
m_list.SetItemText(nItem, COL_DISPLAY_MODE, formatStringFromDisplayMode(mode.dm));
+ TCHAR buffer[11];
if (nItem == 0) { // Special case for default mode
VERIFY(m_list.SetItemText(nItem, COL_N, ResStr(IDS_PPAGE_FS_DEFAULT)));
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_START, ResStr(IDS_PPAGE_FS_OTHER)));
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_STOP, ResStr(IDS_PPAGE_FS_OTHER)));
+ const auto& s = AfxGetAppSettings();
+ _itot_s(s.fAudioTimeShift ? s.iAudioTimeShift : 0, buffer, 10);
+ VERIFY(m_list.SetItemText(nItem, COL_AUDIO_DELAY, buffer));
} else {
CString strFrameRate;
strFrameRate.Format(_T("%.3f"), mode.dFrameRateStart);
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_START, strFrameRate));
strFrameRate.Format(_T("%.3f"), mode.dFrameRateStop);
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_STOP, strFrameRate));
+ _itot_s(mode.msAudioDelay, buffer, 10);
+ VERIFY(m_list.SetItemText(nItem, COL_AUDIO_DELAY, buffer));
}
nItem++;
@@ -289,7 +294,7 @@ BOOL CPPageFullscreen::OnInitDialog()
m_list.InsertColumn(COL_FRAMERATE_START, ResStr(IDS_PPAGE_FS_CLN_FROM_FPS), LVCFMT_RIGHT, 60);
m_list.InsertColumn(COL_FRAMERATE_STOP, ResStr(IDS_PPAGE_FS_CLN_TO_FPS), LVCFMT_RIGHT, 60);
m_list.InsertColumn(COL_DISPLAY_MODE, ResStr(IDS_PPAGE_FS_CLN_DISPLAY_MODE), LVCFMT_LEFT, 135);
-
+ m_list.InsertColumn(COL_AUDIO_DELAY, ResStr(IDS_PPAGE_FS_CLN_AUDIO_DELAY), LVCFMT_LEFT, 52);
m_bHideFullscreenControls = s.bHideFullscreenControls;
m_uHideFullscreenControlsDelay = s.uHideFullscreenControlsDelay;
@@ -368,15 +373,18 @@ BOOL CPPageFullscreen::OnApply()
m_autoChangeFSModes.clear();
for (int nItem = 0, count = m_list.GetItemCount(); nItem < count; nItem++) {
double dFRStart, dFRStop;
+ int msAudioDelay;
if (nItem == 0) { // Special case for default mode
dFRStart = 0.0;
dFRStop = 0.0;
+ msAudioDelay = s.iAudioTimeShift;
} else {
dFRStart = _tcstod(m_list.GetItemText(nItem, COL_FRAMERATE_START), nullptr);
dFRStop = _tcstod(m_list.GetItemText(nItem, COL_FRAMERATE_STOP), nullptr);
+ msAudioDelay = _tcstol(m_list.GetItemText(nItem, COL_AUDIO_DELAY), nullptr, 10);
}
- m_autoChangeFSModes.emplace_back(!!m_list.GetCheck(nItem), dFRStart, dFRStop, m_displayModes[m_list.GetItemData(nItem)]);
+ m_autoChangeFSModes.emplace_back(!!m_list.GetCheck(nItem), dFRStart, dFRStop, msAudioDelay, m_displayModes[m_list.GetItemData(nItem)]);
}
s.autoChangeFSMode.modes = m_autoChangeFSModes;
@@ -451,6 +459,7 @@ void CPPageFullscreen::OnAdd()
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_START, _T("1.000")));
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_STOP, _T("1.000")));
VERIFY(m_list.SetItemText(nItem, COL_DISPLAY_MODE, m_CurrentDisplayModeString));
+ VERIFY(m_list.SetItemText(nItem, COL_AUDIO_DELAY, _T("0")));
VERIFY(m_list.SetItemData(nItem, (DWORD_PTR)m_nCurrentDisplayModeIndex));
m_list.SetCheck(nItem, FALSE);
VERIFY(m_list.SetItemState(nItem, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED));
@@ -471,7 +480,7 @@ void CPPageFullscreen::OnRemove()
// Remove the item
VERIFY(m_list.DeleteItem(nItem));
// Select the next one
- nItem = min(nItem, m_list.GetItemCount() - 1);
+ nItem = std::min(nItem, m_list.GetItemCount() - 1);
m_list.SetSelectionMark(nItem);
VERIFY(m_list.SetItemState(nItem, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED));
m_list.SetFocus();
@@ -505,6 +514,7 @@ void CPPageFullscreen::OnMoveUp()
CString strFRStart = m_list.GetItemText(nItem, COL_FRAMERATE_START);
CString strFRStop = m_list.GetItemText(nItem, COL_FRAMERATE_STOP);
CString strDM = m_list.GetItemText(nItem, COL_DISPLAY_MODE);
+ CString strAudioDelay = m_list.GetItemText(nItem, COL_AUDIO_DELAY);
BOOL nCheckCur = m_list.GetCheck(nItem);
DWORD_PTR data = m_list.GetItemData(nItem);
VERIFY(m_list.DeleteItem(nItem));
@@ -516,6 +526,7 @@ void CPPageFullscreen::OnMoveUp()
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_START, strFRStart));
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_STOP, strFRStop));
VERIFY(m_list.SetItemText(nItem, COL_DISPLAY_MODE, strDM));
+ VERIFY(m_list.SetItemText(nItem, COL_AUDIO_DELAY, strAudioDelay));
VERIFY(m_list.SetItemData(nItem, data));
m_list.SetCheck(nItem, nCheckCur);
m_list.SetSelectionMark(nItem);
@@ -550,6 +561,7 @@ void CPPageFullscreen::OnMoveDown()
CString strFRStart = m_list.GetItemText(nItem, COL_FRAMERATE_START);
CString strFRStop = m_list.GetItemText(nItem, COL_FRAMERATE_STOP);
CString strDM = m_list.GetItemText(nItem, COL_DISPLAY_MODE);
+ CString strAudioDelay = m_list.GetItemText(nItem, COL_AUDIO_DELAY);
BOOL nCheckCur = m_list.GetCheck(nItem);
DWORD_PTR data = m_list.GetItemData(nItem);
VERIFY(m_list.DeleteItem(nItem));
@@ -561,6 +573,7 @@ void CPPageFullscreen::OnMoveDown()
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_START, strFRStart));
VERIFY(m_list.SetItemText(nItem, COL_FRAMERATE_STOP, strFRStop));
VERIFY(m_list.SetItemText(nItem, COL_DISPLAY_MODE, strDM));
+ VERIFY(m_list.SetItemText(nItem, COL_AUDIO_DELAY, strAudioDelay));
VERIFY(m_list.SetItemData(nItem, data));
m_list.SetCheck(nItem, nCheckCur);
m_list.SetSelectionMark(nItem);
@@ -616,6 +629,11 @@ void CPPageFullscreen::OnListDoEdit(NMHDR* pNMHDR, LRESULT* pResult)
m_list.ShowInPlaceFloatEdit(pItem->iItem, pItem->iSubItem);
}
break;
+ case COL_AUDIO_DELAY:
+ if (pItem->iItem != 0) {
+ m_list.ShowInPlaceEdit(pItem->iItem, pItem->iSubItem);
+ }
+ break;
}
m_list.RedrawWindow();
@@ -651,6 +669,14 @@ void CPPageFullscreen::OnListEndEdit(NMHDR* pNMHDR, LRESULT* pResult)
m_list.SetItemText(pItem->iItem, pItem->iSubItem, str);
}
break;
+ case COL_AUDIO_DELAY:
+ if (pItem->pszText) {
+ TCHAR buffer[11];
+ int msAudioDelay = _tcstol(pItem->pszText, nullptr, 10);
+ _itot_s(msAudioDelay, buffer, 10);
+ m_list.SetItemText(pItem->iItem, pItem->iSubItem, buffer);
+ }
+ break;
}
*pResult = TRUE;
diff --git a/src/mpc-hc/PPageFullscreen.h b/src/mpc-hc/PPageFullscreen.h
index ae0dba707..20145cccd 100644
--- a/src/mpc-hc/PPageFullscreen.h
+++ b/src/mpc-hc/PPageFullscreen.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -60,7 +60,8 @@ private:
COL_N,
COL_FRAMERATE_START,
COL_FRAMERATE_STOP,
- COL_DISPLAY_MODE
+ COL_DISPLAY_MODE,
+ COL_AUDIO_DELAY
};
CSpinButtonCtrl m_delaySpinner;
diff --git a/src/mpc-hc/PPageInternalFilters.cpp b/src/mpc-hc/PPageInternalFilters.cpp
index c2738891b..1e812abf8 100644
--- a/src/mpc-hc/PPageInternalFilters.cpp
+++ b/src/mpc-hc/PPageInternalFilters.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -26,11 +26,10 @@
#include "../filters/Filters.h"
#include "InternalFiltersConfig.h"
-IMPLEMENT_DYNAMIC(CPPageInternalFiltersListBox, CCheckListBox)
+IMPLEMENT_DYNAMIC(CPPageInternalFiltersListBox, CListCtrl)
CPPageInternalFiltersListBox::CPPageInternalFiltersListBox(int n, const CArray<filter_t>& filters)
- : CCheckListBox()
+ : m_filters(filters)
, m_n(n)
- , m_filters(filters)
{
for (int i = 0; i < FILTER_TYPE_NB; i++) {
m_nbFiltersPerType[i] = m_nbChecked[i] = 0;
@@ -40,19 +39,19 @@ CPPageInternalFiltersListBox::CPPageInternalFiltersListBox(int n, const CArray<f
void CPPageInternalFiltersListBox::PreSubclassWindow()
{
__super::PreSubclassWindow();
+ GetToolTips()->Activate(FALSE);
EnableToolTips(TRUE);
}
INT_PTR CPPageInternalFiltersListBox::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
{
- BOOL b = FALSE;
- int row = ItemFromPoint(point, b);
+ int row = HitTest(point);
if (row < 0) {
return -1;
}
CRect r;
- GetItemRect(row, r);
+ GetItemRect(row, r, LVIR_BOUNDS);
pTI->rect = r;
pTI->hwnd = m_hWnd;
pTI->uId = (UINT)row;
@@ -62,7 +61,7 @@ INT_PTR CPPageInternalFiltersListBox::OnToolHitTest(CPoint point, TOOLINFO* pTI)
return pTI->uId;
}
-BEGIN_MESSAGE_MAP(CPPageInternalFiltersListBox, CCheckListBox)
+BEGIN_MESSAGE_MAP(CPPageInternalFiltersListBox, CListCtrl)
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
ON_WM_CONTEXTMENU()
END_MESSAGE_MAP()
@@ -71,7 +70,7 @@ BOOL CPPageInternalFiltersListBox::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESU
{
TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR;
- filter_t* f = (filter_t*)GetItemDataPtr(static_cast<int>(pNMHDR->idFrom));
+ filter_t* f = (filter_t*)GetItemData(static_cast<int>(pNMHDR->idFrom));
if (f->nHintID == 0) {
return FALSE;
}
@@ -89,9 +88,9 @@ BOOL CPPageInternalFiltersListBox::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESU
int CPPageInternalFiltersListBox::AddFilter(filter_t* filter, bool checked)
{
- int index = AddString(filter->label);
+ int index = InsertItem(GetItemCount(), filter->label);
// SetItemDataPtr must be called before SetCheck
- SetItemDataPtr(index, filter);
+ SetItemData(index, reinterpret_cast<DWORD_PTR>(filter));
SetCheck(index, checked);
return index;
@@ -103,8 +102,8 @@ void CPPageInternalFiltersListBox::UpdateCheckState()
m_nbFiltersPerType[i] = m_nbChecked[i] = 0;
}
- for (int i = 0; i < GetCount(); i++) {
- filter_t* filter = (filter_t*) GetItemDataPtr(i);
+ for (int i = 0; i < GetItemCount(); i++) {
+ filter_t* filter = (filter_t*) GetItemData(i);
m_nbFiltersPerType[filter->type]++;
@@ -119,25 +118,19 @@ void CPPageInternalFiltersListBox::OnContextMenu(CWnd* pWnd, CPoint point)
if (point.x == -1 && point.y == -1) {
// The context menu was triggered using the keyboard,
// get the coordinates of the currently selected item.
- int iSel = GetCurSel();
- CRect r;
- if (iSel != LB_ERR && GetItemRect(iSel, &r) != LB_ERR) {
- point = r.TopLeft();
+ POSITION pos = GetFirstSelectedItemPosition();
+ if (pos) {
+ CRect r;
+ if (GetItemRect(GetNextSelectedItem(pos), &r, LVIR_BOUNDS)) {
+ point.SetPoint(r.left, r.bottom);
+ } else {
+ point.SetPoint(0, 0);
+ }
}
} else {
ScreenToClient(&point);
}
- // Check that we really inside the list
- BOOL bOutside = TRUE;
- ItemFromPoint(point, bOutside);
- if (bOutside) {
- // Trigger the default behavior
- ClientToScreen(&point);
- __super::OnContextMenu(pWnd, point);
- return;
- }
-
CMenu m;
m.CreatePopupMenu();
@@ -256,10 +249,8 @@ void CPPageInternalFilters::DoDataExchange(CDataExchange* pDX)
}
BEGIN_MESSAGE_MAP(CPPageInternalFilters, CPPageBase)
- ON_LBN_SELCHANGE(IDC_LIST1, OnSelChange)
- ON_LBN_SELCHANGE(IDC_LIST2, OnSelChange)
- ON_CLBN_CHKCHANGE(IDC_LIST1, OnCheckBoxChange)
- ON_CLBN_CHKCHANGE(IDC_LIST2, OnCheckBoxChange)
+ ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemChanged)
+ ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST2, OnItemChanged)
ON_BN_CLICKED(IDC_SPLITTER_CONF, OnBnClickedSplitterConf)
ON_BN_CLICKED(IDC_VIDEO_DEC_CONF, OnBnClickedVideoDecConf)
ON_BN_CLICKED(IDC_AUDIO_DEC_CONF, OnBnClickedAudioDecConf)
@@ -273,6 +264,12 @@ BOOL CPPageInternalFilters::OnInitDialog()
const CAppSettings& s = AfxGetAppSettings();
+ m_listSrc.InsertColumn(0, _T(""));
+ m_listTra.InsertColumn(0, _T(""));
+
+ m_listSrc.SetExtendedStyle(m_listSrc.GetExtendedStyle() | LVS_EX_CHECKBOXES | LVS_EX_DOUBLEBUFFER);
+ m_listTra.SetExtendedStyle(m_listTra.GetExtendedStyle() | LVS_EX_CHECKBOXES | LVS_EX_DOUBLEBUFFER);
+
InitFiltersList();
for (int i = 0; i < m_filters.GetCount(); i++) {
@@ -302,6 +299,9 @@ BOOL CPPageInternalFilters::OnInitDialog()
m_listSrc.UpdateCheckState();
m_listTra.UpdateCheckState();
+ m_listSrc.SetColumnWidth(0, LVSCW_AUTOSIZE);
+ m_listTra.SetColumnWidth(0, LVSCW_AUTOSIZE);
+
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
@@ -339,9 +339,14 @@ void CPPageInternalFilters::InitFiltersList()
#if INTERNAL_SOURCEFILTER_DSM
m_filters.Add(filter_t(_T("DirectShow Media"), SOURCE_FILTER, SRC_DSM, 0));
#endif
-#if INTERNAL_SOURCEFILTER_DTSAC3
+#if INTERNAL_SOURCEFILTER_AC3
if (bLAVSplitterIsAvailable) {
- m_filters.Add(filter_t(_T("DTS/AC3"), SOURCE_FILTER, SRC_DTSAC3, IDS_INTERNAL_LAVF));
+ m_filters.Add(filter_t(_T("AC3"), SOURCE_FILTER, SRC_AC3, IDS_INTERNAL_LAVF));
+ }
+#endif
+#if INTERNAL_SOURCEFILTER_DTS
+ if (bLAVSplitterIsAvailable) {
+ m_filters.Add(filter_t(_T("DTS/DTS-HD"), SOURCE_FILTER, SRC_DTS, IDS_INTERNAL_LAVF));
}
#endif
#if INTERNAL_SOURCEFILTER_VTS
@@ -392,6 +397,11 @@ void CPPageInternalFilters::InitFiltersList()
m_filters.Add(filter_t(_T("WMV/ASF/DVR-MS"), SOURCE_FILTER, SRC_ASF, IDS_INTERNAL_LAVF_WMV));
}
#endif
+#if INTERNAL_SOURCEFILTER_WTV
+ if (bLAVSplitterIsAvailable) {
+ m_filters.Add(filter_t(_T("WTV"), SOURCE_FILTER, SRC_WTV, IDS_INTERNAL_LAVF));
+ }
+#endif
#if INTERNAL_SOURCEFILTER_OGG
if (bLAVSplitterIsAvailable) {
m_filters.Add(filter_t(_T("Ogg"), SOURCE_FILTER, SRC_OGG, IDS_INTERNAL_LAVF));
@@ -404,7 +414,7 @@ void CPPageInternalFilters::InitFiltersList()
#endif
#if INTERNAL_SOURCEFILTER_HTTP
if (bLAVSplitterIsAvailable) {
- m_filters.Add(filter_t(_T("HTTP"), SOURCE_FILTER, SRC_HTTP, IDS_INTERNAL_LAVF));
+ m_filters.Add(filter_t(_T("HTTP(S)"), SOURCE_FILTER, SRC_HTTP, IDS_INTERNAL_LAVF));
}
#endif
#if INTERNAL_SOURCEFILTER_RTSP
@@ -491,6 +501,11 @@ void CPPageInternalFilters::InitFiltersList()
m_filters.Add(filter_t(_T("AMR"), AUDIO_DECODER, TRA_AMR, IDS_INTERNAL_LAVF));
}
#endif
+#if INTERNAL_DECODER_OPUS
+ if (bLAVAudioIsAvailable) {
+ m_filters.Add(filter_t(_T("Opus"), AUDIO_DECODER, TRA_OPUS, IDS_INTERNAL_LAVF));
+ }
+#endif
#if INTERNAL_DECODER_REALAUDIO
if (bLAVAudioIsAvailable) {
m_filters.Add(filter_t(_T("RealAudio"), AUDIO_DECODER, TRA_RA, IDS_INTERNAL_LAVF));
@@ -616,6 +631,11 @@ void CPPageInternalFilters::InitFiltersList()
m_filters.Add(filter_t(_T("FLIC"), VIDEO_DECODER, TRA_FLIC, IDS_INTERNAL_LAVF));
}
#endif
+#if INTERNAL_DECODER_MSVIDEO
+ if (bLAVVideoIsAvailable) {
+ m_filters.Add(filter_t(_T("Microsoft Video"), VIDEO_DECODER, TRA_MSVIDEO, IDS_INTERNAL_LAVF));
+ }
+#endif
#if INTERNAL_DECODER_V210_V410
if (bLAVVideoIsAvailable) {
m_filters.Add(filter_t(_T("v210/v410"), VIDEO_DECODER, TRA_V210_V410, IDS_INTERNAL_LAVF));
@@ -631,8 +651,8 @@ BOOL CPPageInternalFilters::OnApply()
CPPageInternalFiltersListBox* list = &m_listSrc;
for (int l = 0; l < 2; l++) {
- for (int i = 0; i < list->GetCount(); i++) {
- filter_t* f = (filter_t*) list->GetItemDataPtr(i);
+ for (int i = 0; i < list->GetItemCount(); i++) {
+ filter_t* f = (filter_t*) list->GetItemData(i);
switch (f->type) {
case SOURCE_FILTER:
@@ -650,17 +670,20 @@ BOOL CPPageInternalFilters::OnApply()
return __super::OnApply();
}
-void CPPageInternalFilters::OnSelChange()
+void CPPageInternalFilters::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult)
{
- // We only catch the message so that the page is not marked as modified.
-}
+ ASSERT(pNMHDR);
+ ASSERT(pResult);
-void CPPageInternalFilters::OnCheckBoxChange()
-{
- m_listSrc.UpdateCheckState();
- m_listTra.UpdateCheckState();
+ auto pNMLV = reinterpret_cast<NMLISTVIEW*>(pNMHDR);
- SetModified();
+ if (pNMLV->lParam && (pNMLV->uChanged & LVIF_STATE) && (pNMLV->uNewState & LVIS_STATEIMAGEMASK)) {
+ m_listSrc.UpdateCheckState();
+ m_listTra.UpdateCheckState();
+ SetModified();
+ }
+
+ *pResult = 0;
}
void CPPageInternalFilters::OnBnClickedSplitterConf()
diff --git a/src/mpc-hc/PPageInternalFilters.h b/src/mpc-hc/PPageInternalFilters.h
index eae4b827b..05fc7b1f0 100644
--- a/src/mpc-hc/PPageInternalFilters.h
+++ b/src/mpc-hc/PPageInternalFilters.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -46,7 +46,7 @@ struct filter_t {
};
};
-class CPPageInternalFiltersListBox : public CCheckListBox
+class CPPageInternalFiltersListBox : public CListCtrl
{
DECLARE_DYNAMIC(CPPageInternalFiltersListBox)
@@ -100,8 +100,7 @@ protected:
DECLARE_MESSAGE_MAP()
- afx_msg void OnSelChange();
- afx_msg void OnCheckBoxChange();
+ void OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnBnClickedSplitterConf();
afx_msg void OnBnClickedVideoDecConf();
afx_msg void OnBnClickedAudioDecConf();
diff --git a/src/mpc-hc/PPageLogo.cpp b/src/mpc-hc/PPageLogo.cpp
index d60fbe10c..7abec235a 100644
--- a/src/mpc-hc/PPageLogo.cpp
+++ b/src/mpc-hc/PPageLogo.cpp
@@ -104,7 +104,9 @@ BOOL CPPageLogo::OnApply()
s.strLogoFileName = m_logofn;
s.nLogoId = m_logoids.GetAt(m_logoidpos);
- ((CMainFrame*)AfxGetMainWnd())->UpdateControlState(CMainFrame::UPDATE_LOGO);
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
+ pMainFrame->UpdateControlState(CMainFrame::UPDATE_LOGO);
+ }
}
return __super::OnApply();
diff --git a/src/mpc-hc/PPageLogo.h b/src/mpc-hc/PPageLogo.h
index 98a84b3a7..f4448611c 100644
--- a/src/mpc-hc/PPageLogo.h
+++ b/src/mpc-hc/PPageLogo.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2012, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,6 +24,7 @@
// CPPageLogo dialog
#include "MPCPngImage.h"
+#include "PPageBase.h"
class CPPageLogo : public CPPageBase
{
diff --git a/src/mpc-hc/PPageMisc.cpp b/src/mpc-hc/PPageMisc.cpp
index 124dc97c0..8f66be237 100644
--- a/src/mpc-hc/PPageMisc.cpp
+++ b/src/mpc-hc/PPageMisc.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,7 +25,7 @@
#include "moreuuids.h"
#include "PPageMisc.h"
#include <psapi.h>
-#include "WinAPIUtils.h"
+#include "PPageSheet.h"
// CPPageMisc dialog
@@ -216,9 +216,10 @@ void CPPageMisc::OnUpdateDelayEditBox(CCmdUI* pCmdUI)
void CPPageMisc::OnResetSettings()
{
if (MessageBox(ResStr(IDS_RESET_SETTINGS_WARNING), ResStr(IDS_RESET_SETTINGS), MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2) == IDYES) {
- ((CMainFrame*)AfxGetMyApp()->GetMainWnd())->SendMessage(WM_CLOSE);
+ AfxGetAppSettings().SetAsUninitialized(); // Consider the settings as initialized
- ShellExecute(nullptr, _T("open"), GetProgramPath(true), _T("/reset"), nullptr, SW_SHOWNORMAL);
+ // Exit the Options dialog and inform the caller that we want to reset the settings
+ EndDialog(CPPageSheet::RESET_SETTINGS);
}
}
diff --git a/src/mpc-hc/PPageOutput.cpp b/src/mpc-hc/PPageOutput.cpp
index 85ca582d3..00e30cd34 100644
--- a/src/mpc-hc/PPageOutput.cpp
+++ b/src/mpc-hc/PPageOutput.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -32,22 +32,24 @@
IMPLEMENT_DYNAMIC(CPPageOutput, CPPageBase)
CPPageOutput::CPPageOutput()
: CPPageBase(CPPageOutput::IDD, CPPageOutput::IDD)
+ , m_tick(nullptr)
+ , m_cross(nullptr)
, m_iDSVideoRendererType(VIDRNDT_DS_DEFAULT)
, m_iRMVideoRendererType(VIDRNDT_RM_DEFAULT)
, m_iQTVideoRendererType(VIDRNDT_QT_DEFAULT)
, m_iAPSurfaceUsage(0)
, m_iAudioRendererType(0)
+ , m_lastSubrenderer{false, CAppSettings::SubtitleRenderer::INTERNAL}
, m_iDX9Resizer(0)
, m_fVMR9MixerMode(FALSE)
, m_fVMR9MixerYUV(FALSE)
+ , m_fD3DFullscreen(FALSE)
, m_fVMR9AlterativeVSync(FALSE)
, m_fResetDevice(FALSE)
+ , m_fCacheShaders(FALSE)
, m_iEvrBuffers(_T("5"))
- , m_fD3DFullscreen(FALSE)
, m_fD3D9RenderDevice(FALSE)
, m_iD3D9RenderDevice(-1)
- , m_tick(nullptr)
- , m_cross(nullptr)
{
}
@@ -64,6 +66,7 @@ void CPPageOutput::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_RMRND_COMBO, m_iRMVideoRendererTypeCtrl);
DDX_Control(pDX, IDC_QTRND_COMBO, m_iQTVideoRendererTypeCtrl);
DDX_Control(pDX, IDC_AUDRND_COMBO, m_iAudioRendererTypeCtrl);
+ DDX_Control(pDX, IDC_COMBO1, m_SubtitleRendererCtrl);
DDX_Control(pDX, IDC_D3D9DEVICE_COMBO, m_iD3D9RenderDeviceCtrl);
DDX_Control(pDX, IDC_DX_SURFACE, m_APSurfaceUsageCtrl);
DDX_Control(pDX, IDC_DX9RESIZER_COMBO, m_DX9ResizerCtrl);
@@ -77,14 +80,13 @@ void CPPageOutput::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_RMRND_SAVEIMAGE_SUPPORT, m_iRMSaveImageSupport);
DDX_Control(pDX, IDC_QTRND_SUBTITLE_SUPPORT, m_iQTSubtitleSupport);
DDX_Control(pDX, IDC_QTRND_SAVEIMAGE_SUPPORT, m_iQTSaveImageSupport);
- DDX_CBIndex(pDX, IDC_RMRND_COMBO, m_iRMVideoRendererType);
- DDX_CBIndex(pDX, IDC_QTRND_COMBO, m_iQTVideoRendererType);
DDX_CBIndex(pDX, IDC_AUDRND_COMBO, m_iAudioRendererType);
DDX_CBIndex(pDX, IDC_DX_SURFACE, m_iAPSurfaceUsage);
DDX_CBIndex(pDX, IDC_DX9RESIZER_COMBO, m_iDX9Resizer);
DDX_CBIndex(pDX, IDC_D3D9DEVICE_COMBO, m_iD3D9RenderDevice);
DDX_Check(pDX, IDC_D3D9DEVICE, m_fD3D9RenderDevice);
DDX_Check(pDX, IDC_RESETDEVICE, m_fResetDevice);
+ DDX_Check(pDX, IDC_CACHESHADERS, m_fCacheShaders);
DDX_Check(pDX, IDC_FULLSCREEN_MONITOR_CHECK, m_fD3DFullscreen);
DDX_Check(pDX, IDC_DSVMR9ALTERNATIVEVSYNC, m_fVMR9AlterativeVSync);
DDX_Check(pDX, IDC_DSVMR9LOADMIXER, m_fVMR9MixerMode);
@@ -96,6 +98,7 @@ BEGIN_MESSAGE_MAP(CPPageOutput, CPPageBase)
ON_CBN_SELCHANGE(IDC_VIDRND_COMBO, &CPPageOutput::OnDSRendererChange)
ON_CBN_SELCHANGE(IDC_RMRND_COMBO, &CPPageOutput::OnRMRendererChange)
ON_CBN_SELCHANGE(IDC_QTRND_COMBO, &CPPageOutput::OnQTRendererChange)
+ ON_CBN_SELCHANGE(IDC_COMBO1, &CPPageOutput::OnSubtitleRendererChange)
ON_CBN_SELCHANGE(IDC_DX_SURFACE, &CPPageOutput::OnSurfaceChange)
ON_BN_CLICKED(IDC_D3D9DEVICE, OnD3D9DeviceCheck)
ON_BN_CLICKED(IDC_FULLSCREEN_MONITOR_CHECK, OnFullscreenCheck)
@@ -146,6 +149,7 @@ BOOL CPPageOutput::OnInitDialog()
m_iAudioRendererTypeCtrl.SetRedraw(FALSE);
m_fResetDevice = s.m_RenderersSettings.fResetDevice;
+ m_fCacheShaders = s.m_RenderersSettings.m_AdvRendSets.bCacheShaders;
m_AudioRendererDisplayNames.Add(_T(""));
m_iAudioRendererTypeCtrl.AddString(_T("1: ") + ResStr(IDS_PPAGE_OUTPUT_SYS_DEF));
m_iAudioRendererType = 0;
@@ -154,24 +158,23 @@ BOOL CPPageOutput::OnInitDialog()
CString Cbstr;
BeginEnumSysDev(CLSID_AudioRendererCategory, pMoniker) {
- LPOLESTR olestr = nullptr;
+ CComHeapPtr<OLECHAR> olestr;
if (FAILED(pMoniker->GetDisplayName(0, 0, &olestr))) {
continue;
}
CStringW str(olestr);
- CoTaskMemFree(olestr);
m_AudioRendererDisplayNames.Add(CString(str));
CComPtr<IPropertyBag> pPB;
if (SUCCEEDED(pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB)))) {
CComVariant var;
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
CString fstr(var.bstrVal);
var.Clear();
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FilterData")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FilterData"), &var, nullptr))) {
BSTR* pbstr;
if (SUCCEEDED(SafeArrayAccessData(var.parray, (void**)&pbstr))) {
fstr.Format(_T("%s (%08x)"), CString(fstr), *((DWORD*)pbstr + 1));
@@ -206,11 +209,13 @@ BOOL CPPageOutput::OnInitDialog()
m_iAudioRendererType = m_iAudioRendererTypeCtrl.GetCount() - 1;
}
- Cbstr.Format(_T("%d: %s"), i++, ResStr(IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND));
- m_AudioRendererDisplayNames.Add(AUDRNDT_MPC);
- m_iAudioRendererTypeCtrl.AddString(Cbstr);
- if (s.strAudioRendererDisplayName == AUDRNDT_MPC && m_iAudioRendererType == 0) {
- m_iAudioRendererType = m_iAudioRendererTypeCtrl.GetCount() - 1;
+ if (SysVersion::IsVistaOrLater()) {
+ Cbstr.Format(_T("%d: %s"), i++, ResStr(IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND));
+ m_AudioRendererDisplayNames.Add(AUDRNDT_INTERNAL);
+ m_iAudioRendererTypeCtrl.AddString(Cbstr);
+ if (s.strAudioRendererDisplayName == AUDRNDT_INTERNAL && m_iAudioRendererType == 0) {
+ m_iAudioRendererType = m_iAudioRendererTypeCtrl.GetCount() - 1;
+ }
}
CorrectComboListWidth(m_iAudioRendererTypeCtrl);
@@ -218,6 +223,8 @@ BOOL CPPageOutput::OnInitDialog()
m_iAudioRendererTypeCtrl.Invalidate();
m_iAudioRendererTypeCtrl.UpdateWindow();
+ UpdateSubtitleRendererList();
+
IDirect3D9* pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if (pD3D) {
TCHAR strGUID[50];
@@ -257,56 +264,51 @@ BOOL CPPageOutput::OnInitDialog()
CorrectComboListWidth(m_iD3D9RenderDeviceCtrl);
auto addRenderer = [&](int nID) {
- CString sName;
+ WORD resName;
switch (nID) {
case VIDRNDT_DS_DEFAULT:
- sName = ResStr(IDS_PPAGE_OUTPUT_SYS_DEF);
+ resName = IDS_PPAGE_OUTPUT_SYS_DEF;
break;
case VIDRNDT_DS_OLDRENDERER:
- sName = ResStr(IDS_PPAGE_OUTPUT_OLDRENDERER);
+ resName = IDS_PPAGE_OUTPUT_OLDRENDERER;
break;
case VIDRNDT_DS_OVERLAYMIXER:
- sName = ResStr(IDS_PPAGE_OUTPUT_OVERLAYMIXER);
- break;
- case VIDRNDT_DS_VMR7WINDOWED:
- sName = ResStr(IDS_PPAGE_OUTPUT_VMR7WINDOWED);
+ resName = IDS_PPAGE_OUTPUT_OVERLAYMIXER;
break;
case VIDRNDT_DS_VMR9WINDOWED:
- sName = ResStr(IDS_PPAGE_OUTPUT_VMR9WINDOWED);
- break;
- case VIDRNDT_DS_VMR7RENDERLESS:
- sName = ResStr(IDS_PPAGE_OUTPUT_VMR7RENDERLESS);
+ resName = IDS_PPAGE_OUTPUT_VMR9WINDOWED;
break;
case VIDRNDT_DS_VMR9RENDERLESS:
- sName = ResStr(IDS_PPAGE_OUTPUT_VMR9RENDERLESS);
+ resName = IDS_PPAGE_OUTPUT_VMR9RENDERLESS;
break;
case VIDRNDT_DS_DXR:
- sName = ResStr(IDS_PPAGE_OUTPUT_DXR);
+ resName = IDS_PPAGE_OUTPUT_DXR;
break;
case VIDRNDT_DS_NULL_COMP:
- sName = ResStr(IDS_PPAGE_OUTPUT_NULL_COMP);
+ resName = IDS_PPAGE_OUTPUT_NULL_COMP;
break;
case VIDRNDT_DS_NULL_UNCOMP:
- sName = ResStr(IDS_PPAGE_OUTPUT_NULL_UNCOMP);
+ resName = IDS_PPAGE_OUTPUT_NULL_UNCOMP;
break;
case VIDRNDT_DS_EVR:
- sName = ResStr(IDS_PPAGE_OUTPUT_EVR);
+ resName = IDS_PPAGE_OUTPUT_EVR;
break;
case VIDRNDT_DS_EVR_CUSTOM:
- sName = ResStr(IDS_PPAGE_OUTPUT_EVR_CUSTOM);
+ resName = IDS_PPAGE_OUTPUT_EVR_CUSTOM;
break;
case VIDRNDT_DS_MADVR:
- sName = ResStr(IDS_PPAGE_OUTPUT_MADVR);
+ resName = IDS_PPAGE_OUTPUT_MADVR;
break;
case VIDRNDT_DS_SYNC:
- sName = ResStr(IDS_PPAGE_OUTPUT_SYNC);
+ resName = IDS_PPAGE_OUTPUT_SYNC;
break;
default:
ASSERT(FALSE);
return;
}
+ CString sName(StrRes(resName));
if (!s.IsVideoRendererAvailable(nID)) {
sName.AppendFormat(_T(" %s"), ResStr(IDS_PPAGE_OUTPUT_UNAVAILABLE));
}
@@ -319,9 +321,7 @@ BOOL CPPageOutput::OnInitDialog()
addRenderer(VIDRNDT_DS_DEFAULT);
addRenderer(VIDRNDT_DS_OLDRENDERER);
addRenderer(VIDRNDT_DS_OVERLAYMIXER);
- addRenderer(VIDRNDT_DS_VMR7WINDOWED);
addRenderer(VIDRNDT_DS_VMR9WINDOWED);
- addRenderer(VIDRNDT_DS_VMR7RENDERLESS);
addRenderer(VIDRNDT_DS_VMR9RENDERLESS);
addRenderer(VIDRNDT_DS_EVR);
addRenderer(VIDRNDT_DS_EVR_CUSTOM);
@@ -332,7 +332,7 @@ BOOL CPPageOutput::OnInitDialog()
addRenderer(VIDRNDT_DS_NULL_UNCOMP);
for (int j = 0; j < m_iDSVRTC.GetCount(); ++j) {
- if (m_iDSVideoRendererType == m_iDSVRTC.GetItemData(j)) {
+ if ((UINT)m_iDSVideoRendererType == m_iDSVRTC.GetItemData(j)) {
m_iDSVRTC.SetCurSel(j);
break;
}
@@ -344,16 +344,24 @@ BOOL CPPageOutput::OnInitDialog()
CComboBox& m_iQTVRTC = m_iQTVideoRendererTypeCtrl;
m_iQTVRTC.SetItemData(m_iQTVRTC.AddString(ResStr(IDS_PPAGE_OUTPUT_SYS_DEF)), VIDRNDT_QT_DEFAULT);
- m_iQTVRTC.SetItemData(m_iQTVRTC.AddString(ResStr(IDS_PPAGE_OUTPUT_VMR7RENDERLESS)), VIDRNDT_QT_DX7);
m_iQTVRTC.SetItemData(m_iQTVRTC.AddString(ResStr(IDS_PPAGE_OUTPUT_VMR9RENDERLESS)), VIDRNDT_QT_DX9);
- m_iQTVRTC.SetCurSel(m_iQTVideoRendererType);
+ for (int j = 0; j < m_iQTVRTC.GetCount(); ++j) {
+ if ((UINT)m_iQTVideoRendererType == m_iQTVRTC.GetItemData(j)) {
+ m_iQTVRTC.SetCurSel(j);
+ break;
+ }
+ }
CorrectComboListWidth(m_iQTVRTC);
CComboBox& m_iRMVRTC = m_iRMVideoRendererTypeCtrl;
m_iRMVideoRendererTypeCtrl.SetItemData(m_iRMVRTC.AddString(ResStr(IDS_PPAGE_OUTPUT_SYS_DEF)), VIDRNDT_RM_DEFAULT);
- m_iRMVRTC.SetItemData(m_iRMVRTC.AddString(ResStr(IDS_PPAGE_OUTPUT_VMR7RENDERLESS)), VIDRNDT_RM_DX7);
m_iRMVRTC.SetItemData(m_iRMVRTC.AddString(ResStr(IDS_PPAGE_OUTPUT_VMR9RENDERLESS)), VIDRNDT_RM_DX9);
- m_iRMVRTC.SetCurSel(m_iRMVideoRendererType);
+ for (int j = 0; j < m_iRMVRTC.GetCount(); ++j) {
+ if ((UINT)m_iRMVideoRendererType == m_iRMVRTC.GetItemData(j)) {
+ m_iRMVRTC.SetCurSel(j);
+ break;
+ }
+ }
CorrectComboListWidth(m_iRMVRTC);
UpdateData(FALSE);
@@ -420,7 +428,7 @@ BOOL CPPageOutput::OnApply()
// revert to the renderer in the settings
m_iDSVideoRendererTypeCtrl.SetCurSel(0);
for (int i = 0; i < m_iDSVideoRendererTypeCtrl.GetCount(); ++i) {
- if (s.iDSVideoRendererType == m_iDSVideoRendererTypeCtrl.GetItemData(i)) {
+ if ((UINT)s.iDSVideoRendererType == m_iDSVideoRendererTypeCtrl.GetItemData(i)) {
m_iDSVideoRendererTypeCtrl.SetCurSel(i);
break;
}
@@ -442,7 +450,15 @@ BOOL CPPageOutput::OnApply()
s.strAudioRendererDisplayName = m_AudioRendererDisplayNames[m_iAudioRendererType];
s.fD3DFullscreen = m_fD3DFullscreen ? true : false;
+ if (m_SubtitleRendererCtrl.IsWindowEnabled()) {
+ auto subrenderer = static_cast<CAppSettings::SubtitleRenderer>(m_SubtitleRendererCtrl.GetItemData(m_SubtitleRendererCtrl.GetCurSel()));
+ m_lastSubrenderer.first = true;
+ m_lastSubrenderer.second = subrenderer;
+ s.SetSubtitleRenderer(subrenderer);
+ }
+
r.fResetDevice = !!m_fResetDevice;
+ r.m_AdvRendSets.bCacheShaders = !!m_fCacheShaders;
if (m_iEvrBuffers.IsEmpty() || _stscanf_s(m_iEvrBuffers, _T("%d"), &r.iEvrBuffers) != 1) {
r.iEvrBuffers = 5;
@@ -480,7 +496,7 @@ void CPPageOutput::OnSurfaceChange()
m_iDSRotationSupport.SetIcon(m_tick);
} else if (m_iDSVideoRendererType == VIDRNDT_DS_MADVR) {
m_iDSShaderSupport.SetIcon(m_tick);
- m_iDSRotationSupport.SetIcon(m_cross);
+ m_iDSRotationSupport.SetIcon(m_tick);
} else {
m_iDSShaderSupport.SetIcon(m_cross);
m_iDSRotationSupport.SetIcon(m_cross);
@@ -504,6 +520,7 @@ void CPPageOutput::OnDSRendererChange()
GetDlgItem(IDC_DSVMR9YUVMIXER)->EnableWindow(FALSE);
GetDlgItem(IDC_DSVMR9ALTERNATIVEVSYNC)->EnableWindow(FALSE);
GetDlgItem(IDC_RESETDEVICE)->EnableWindow(FALSE);
+ GetDlgItem(IDC_CACHESHADERS)->EnableWindow(FALSE);
GetDlgItem(IDC_EVR_BUFFERS)->EnableWindow(m_iDSVideoRendererType == VIDRNDT_DS_EVR_CUSTOM);
GetDlgItem(IDC_EVR_BUFFERS_TXT)->EnableWindow(m_iDSVideoRendererType == VIDRNDT_DS_EVR_CUSTOM);
@@ -511,13 +528,11 @@ void CPPageOutput::OnDSRendererChange()
GetDlgItem(IDC_D3D9DEVICE_COMBO)->EnableWindow(FALSE);
m_iDSDXVASupport.SetRedraw(FALSE);
- m_iDSSubtitleSupport.SetRedraw(FALSE);
m_iDSSaveImageSupport.SetRedraw(FALSE);
m_iDSShaderSupport.SetRedraw(FALSE);
m_iDSRotationSupport.SetRedraw(FALSE);
m_iDSDXVASupport.SetIcon(m_cross);
- m_iDSSubtitleSupport.SetIcon(m_cross);
m_iDSSaveImageSupport.SetIcon(m_cross);
m_iDSShaderSupport.SetIcon(m_cross);
m_iDSRotationSupport.SetIcon(m_cross);
@@ -537,10 +552,6 @@ void CPPageOutput::OnDSRendererChange()
m_iDSDXVASupport.SetIcon(m_tick);
}
break;
- case VIDRNDT_DS_VMR7WINDOWED:
- m_iDSSaveImageSupport.SetIcon(m_tick);
- m_wndToolTip.UpdateTipText(ResStr(IDC_DSVMR7WIN), GetDlgItem(IDC_VIDRND_COMBO));
- break;
case VIDRNDT_DS_VMR9WINDOWED:
m_iDSSaveImageSupport.SetIcon(m_tick);
m_wndToolTip.UpdateTipText(ResStr(IDC_DSVMR9WIN), GetDlgItem(IDC_VIDRND_COMBO));
@@ -558,21 +569,12 @@ void CPPageOutput::OnDSRendererChange()
case VIDRNDT_DS_NULL_UNCOMP:
m_wndToolTip.UpdateTipText(ResStr(IDC_DSNULL_UNCOMP), GetDlgItem(IDC_VIDRND_COMBO));
break;
- case VIDRNDT_DS_VMR7RENDERLESS:
- GetDlgItem(IDC_DX_SURFACE)->EnableWindow(TRUE);
-
- if (!SysVersion::IsVistaOrLater()) {
- m_iDSDXVASupport.SetIcon(m_tick);
- }
- m_iDSSubtitleSupport.SetIcon(m_tick);
- m_iDSSaveImageSupport.SetIcon(m_tick);
- m_wndToolTip.UpdateTipText(ResStr(IDC_DSVMR7REN), GetDlgItem(IDC_VIDRND_COMBO));
- break;
case VIDRNDT_DS_VMR9RENDERLESS:
GetDlgItem(IDC_DSVMR9LOADMIXER)->EnableWindow(TRUE);
GetDlgItem(IDC_DSVMR9YUVMIXER)->EnableWindow(TRUE);
GetDlgItem(IDC_DSVMR9ALTERNATIVEVSYNC)->EnableWindow(TRUE);
GetDlgItem(IDC_RESETDEVICE)->EnableWindow(TRUE);
+ GetDlgItem(IDC_CACHESHADERS)->EnableWindow(TRUE);
GetDlgItem(IDC_DX_SURFACE)->EnableWindow(TRUE);
GetDlgItem(IDC_DX9RESIZER_COMBO)->EnableWindow(TRUE);
GetDlgItem(IDC_FULLSCREEN_MONITOR_CHECK)->EnableWindow(TRUE);
@@ -584,7 +586,6 @@ void CPPageOutput::OnDSRendererChange()
m_iDSShaderSupport.SetIcon(m_tick);
m_iDSRotationSupport.SetIcon(m_tick);
}
- m_iDSSubtitleSupport.SetIcon(m_tick);
m_iDSSaveImageSupport.SetIcon(m_tick);
m_wndToolTip.UpdateTipText(ResStr(IDC_DSVMR9REN), GetDlgItem(IDC_VIDRND_COMBO));
@@ -599,6 +600,7 @@ void CPPageOutput::OnDSRendererChange()
GetDlgItem(IDC_FULLSCREEN_MONITOR_CHECK)->EnableWindow(TRUE);
GetDlgItem(IDC_DSVMR9ALTERNATIVEVSYNC)->EnableWindow(TRUE);
GetDlgItem(IDC_RESETDEVICE)->EnableWindow(TRUE);
+ GetDlgItem(IDC_CACHESHADERS)->EnableWindow(TRUE);
// Force 3D surface with EVR Custom
GetDlgItem(IDC_DX_SURFACE)->EnableWindow(FALSE);
@@ -607,7 +609,6 @@ void CPPageOutput::OnDSRendererChange()
if (SysVersion::IsVistaOrLater()) {
m_iDSDXVASupport.SetIcon(m_tick);
}
- m_iDSSubtitleSupport.SetIcon(m_tick);
m_iDSSaveImageSupport.SetIcon(m_tick);
m_iDSShaderSupport.SetIcon(m_tick);
m_iDSRotationSupport.SetIcon(m_tick);
@@ -619,13 +620,13 @@ void CPPageOutput::OnDSRendererChange()
GetDlgItem(IDC_DX9RESIZER_COMBO)->EnableWindow(TRUE);
GetDlgItem(IDC_FULLSCREEN_MONITOR_CHECK)->EnableWindow(TRUE);
GetDlgItem(IDC_RESETDEVICE)->EnableWindow(TRUE);
+ GetDlgItem(IDC_CACHESHADERS)->EnableWindow(TRUE);
// Force 3D surface with EVR Sync
GetDlgItem(IDC_DX_SURFACE)->EnableWindow(FALSE);
((CComboBox*)GetDlgItem(IDC_DX_SURFACE))->SetCurSel(2);
m_iDSDXVASupport.SetIcon(m_tick);
- m_iDSSubtitleSupport.SetIcon(m_tick);
m_iDSSaveImageSupport.SetIcon(m_tick);
m_iDSShaderSupport.SetIcon(m_tick);
m_iDSRotationSupport.SetIcon(m_tick);
@@ -635,13 +636,12 @@ void CPPageOutput::OnDSRendererChange()
((CComboBox*)GetDlgItem(IDC_DX_SURFACE))->SetCurSel(2);
m_iDSDXVASupport.SetIcon(m_tick);
- m_iDSSubtitleSupport.SetIcon(m_tick);
m_iDSSaveImageSupport.SetIcon(m_tick);
m_iDSShaderSupport.SetIcon(m_tick);
+ m_iDSRotationSupport.SetIcon(m_tick);
m_wndToolTip.UpdateTipText(ResStr(IDC_DSMADVR), GetDlgItem(IDC_VIDRND_COMBO));
break;
case VIDRNDT_DS_DXR:
- m_iDSSubtitleSupport.SetIcon(m_tick);
m_iDSSaveImageSupport.SetIcon(m_tick);
m_wndToolTip.UpdateTipText(ResStr(IDC_DSDXR), GetDlgItem(IDC_VIDRND_COMBO));
break;
@@ -650,9 +650,6 @@ void CPPageOutput::OnDSRendererChange()
m_iDSDXVASupport.SetRedraw(TRUE);
m_iDSDXVASupport.Invalidate();
m_iDSDXVASupport.UpdateWindow();
- m_iDSSubtitleSupport.SetRedraw(TRUE);
- m_iDSSubtitleSupport.Invalidate();
- m_iDSSubtitleSupport.UpdateWindow();
m_iDSSaveImageSupport.SetRedraw(TRUE);
m_iDSSaveImageSupport.Invalidate();
m_iDSSaveImageSupport.UpdateWindow();
@@ -663,63 +660,63 @@ void CPPageOutput::OnDSRendererChange()
m_iDSRotationSupport.Invalidate();
m_iDSRotationSupport.UpdateWindow();
+ UpdateSubtitleRendererList();
+ UpdateSubtitleSupport();
SetModified();
}
void CPPageOutput::OnRMRendererChange()
{
UpdateData();
+ m_iRMVideoRendererType = (int)m_iRMVideoRendererTypeCtrl.GetItemData(m_iRMVideoRendererTypeCtrl.GetCurSel());
switch (m_iRMVideoRendererType) {
case VIDRNDT_RM_DEFAULT:
m_iRMSaveImageSupport.SetIcon(m_cross);
- m_iRMSubtitleSupport.SetIcon(m_cross);
m_wndToolTip.UpdateTipText(ResStr(IDC_RMSYSDEF), GetDlgItem(IDC_RMRND_COMBO));
break;
- case VIDRNDT_RM_DX7:
- m_iRMSaveImageSupport.SetIcon(m_tick);
- m_iRMSubtitleSupport.SetIcon(m_tick);
-
- m_wndToolTip.UpdateTipText(ResStr(IDC_RMDX7), GetDlgItem(IDC_RMRND_COMBO));
- break;
case VIDRNDT_RM_DX9:
m_iRMSaveImageSupport.SetIcon(m_tick);
- m_iRMSubtitleSupport.SetIcon(m_tick);
m_wndToolTip.UpdateTipText(ResStr(IDC_RMDX9), GetDlgItem(IDC_RMRND_COMBO));
break;
}
+ UpdateSubtitleSupport();
SetModified();
}
void CPPageOutput::OnQTRendererChange()
{
UpdateData();
+ m_iQTVideoRendererType = (int)m_iQTVideoRendererTypeCtrl.GetItemData(m_iQTVideoRendererTypeCtrl.GetCurSel());
switch (m_iQTVideoRendererType) {
case VIDRNDT_QT_DEFAULT:
m_iQTSaveImageSupport.SetIcon(m_cross);
- m_iQTSubtitleSupport.SetIcon(m_cross);
m_wndToolTip.UpdateTipText(ResStr(IDC_QTSYSDEF), GetDlgItem(IDC_QTRND_COMBO));
break;
- case VIDRNDT_QT_DX7:
- m_iQTSaveImageSupport.SetIcon(m_tick);
- m_iQTSubtitleSupport.SetIcon(m_tick);
-
- m_wndToolTip.UpdateTipText(ResStr(IDC_QTDX7), GetDlgItem(IDC_QTRND_COMBO));
- break;
case VIDRNDT_QT_DX9:
m_iQTSaveImageSupport.SetIcon(m_tick);
- m_iQTSubtitleSupport.SetIcon(m_tick);
m_wndToolTip.UpdateTipText(ResStr(IDC_QTDX9), GetDlgItem(IDC_QTRND_COMBO));
break;
}
+ UpdateSubtitleSupport();
+ SetModified();
+}
+
+void CPPageOutput::OnSubtitleRendererChange()
+{
+ UpdateData();
+ UpdateSubtitleSupport();
SetModified();
+
+ m_lastSubrenderer.first = true;
+ m_lastSubrenderer.second = static_cast<CAppSettings::SubtitleRenderer>(m_SubtitleRendererCtrl.GetItemData(m_SubtitleRendererCtrl.GetCurSel()));
}
void CPPageOutput::OnFullscreenCheck()
@@ -734,6 +731,77 @@ void CPPageOutput::OnFullscreenCheck()
}
}
+void CPPageOutput::UpdateSubtitleSupport()
+{
+ auto subrenderer = static_cast<CAppSettings::SubtitleRenderer>(m_SubtitleRendererCtrl.GetItemData(m_SubtitleRendererCtrl.GetCurSel()));
+
+ bool supported = (m_iDSVideoRendererType != VIDRNDT_DS_NULL_COMP &&
+ m_iDSVideoRendererType != VIDRNDT_DS_NULL_UNCOMP &&
+ CAppSettings::IsSubtitleRendererRegistered(subrenderer) &&
+ CAppSettings::IsSubtitleRendererSupported(subrenderer, m_iDSVideoRendererType));
+
+ m_iDSSubtitleSupport.SetIcon(supported ? m_tick : m_cross);
+
+ m_iQTSubtitleSupport.SetIcon((m_iQTVideoRendererType != VIDRNDT_QT_DEFAULT && subrenderer == CAppSettings::SubtitleRenderer::INTERNAL) ? m_tick : m_cross);
+ m_iRMSubtitleSupport.SetIcon((m_iRMVideoRendererType != VIDRNDT_RM_DEFAULT && subrenderer == CAppSettings::SubtitleRenderer::INTERNAL) ? m_tick : m_cross);
+}
+
+void CPPageOutput::UpdateSubtitleRendererList()
+{
+ const auto& s = AfxGetAppSettings();
+
+ auto addSubtitleRenderer = [&](CAppSettings::SubtitleRenderer nID) {
+ if (!CAppSettings::IsSubtitleRendererSupported(nID, m_iDSVideoRendererType)) {
+ return;
+ }
+
+ CString sName;
+ switch (nID) {
+ case CAppSettings::SubtitleRenderer::INTERNAL:
+ sName = ResStr(IDS_SUBTITLE_RENDERER_INTERNAL);
+ break;
+ case CAppSettings::SubtitleRenderer::VS_FILTER:
+ sName = ResStr(IDS_SUBTITLE_RENDERER_VS_FILTER);
+ break;
+ case CAppSettings::SubtitleRenderer::XY_SUB_FILTER:
+ sName = ResStr(IDS_SUBTITLE_RENDERER_XY_SUB_FILTER);
+ break;
+ case CAppSettings::SubtitleRenderer::ASS_FILTER:
+ sName = ResStr(IDS_SUBTITLE_RENDERER_ASS_FILTER);
+ break;
+ default:
+ ASSERT(FALSE);
+ break;
+ }
+
+ if (!CAppSettings::IsSubtitleRendererRegistered(nID)) {
+ sName.AppendFormat(_T(" %s"), ResStr(IDS_PPAGE_OUTPUT_UNAVAILABLE));
+ }
+
+ m_SubtitleRendererCtrl.SetItemData(m_SubtitleRendererCtrl.AddString(sName), static_cast<int>(nID));
+ };
+
+ m_SubtitleRendererCtrl.SetRedraw(FALSE);
+ while (m_SubtitleRendererCtrl.DeleteString(0) != CB_ERR);
+ addSubtitleRenderer(CAppSettings::SubtitleRenderer::INTERNAL);
+ addSubtitleRenderer(CAppSettings::SubtitleRenderer::VS_FILTER);
+ addSubtitleRenderer(CAppSettings::SubtitleRenderer::XY_SUB_FILTER);
+ addSubtitleRenderer(CAppSettings::SubtitleRenderer::ASS_FILTER);
+ m_SubtitleRendererCtrl.SetCurSel(0);
+ auto subrenderer = m_lastSubrenderer.first ? m_lastSubrenderer.second : s.GetSubtitleRenderer();
+ for (int j = 0; j < m_SubtitleRendererCtrl.GetCount(); ++j) {
+ if ((UINT)subrenderer == m_SubtitleRendererCtrl.GetItemData(j)) {
+ m_SubtitleRendererCtrl.SetCurSel(j);
+ break;
+ }
+ }
+ m_SubtitleRendererCtrl.EnableWindow(m_SubtitleRendererCtrl.GetCount() > 1);
+ CorrectComboListWidth(m_SubtitleRendererCtrl);
+ m_SubtitleRendererCtrl.SetRedraw(TRUE);
+ m_SubtitleRendererCtrl.Invalidate();
+ m_SubtitleRendererCtrl.UpdateWindow();
+}
+
void CPPageOutput::OnD3D9DeviceCheck()
{
UpdateData();
diff --git a/src/mpc-hc/PPageOutput.h b/src/mpc-hc/PPageOutput.h
index fffb2fef6..b7bd0916e 100644
--- a/src/mpc-hc/PPageOutput.h
+++ b/src/mpc-hc/PPageOutput.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012, 2014 see Authors.txt
+ * (C) 2006-2012, 2014-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -40,6 +40,7 @@ private:
CComboBox m_iDSVideoRendererTypeCtrl;
CComboBox m_iAudioRendererTypeCtrl;
+ CComboBox m_SubtitleRendererCtrl;
CComboBox m_iRMVideoRendererTypeCtrl;
CComboBox m_iQTVideoRendererTypeCtrl;
CComboBox m_iD3D9RenderDeviceCtrl;
@@ -56,6 +57,11 @@ private:
CStatic m_iRMSaveImageSupport;
CStatic m_iQTSubtitleSupport;
CStatic m_iQTSaveImageSupport;
+
+ void UpdateSubtitleSupport();
+
+ void UpdateSubtitleRendererList();
+
public:
CPPageOutput();
virtual ~CPPageOutput();
@@ -67,12 +73,14 @@ public:
int m_iQTVideoRendererType;
int m_iAPSurfaceUsage;
int m_iAudioRendererType;
+ std::pair<bool, CAppSettings::SubtitleRenderer> m_lastSubrenderer;
int m_iDX9Resizer;
BOOL m_fVMR9MixerMode;
BOOL m_fVMR9MixerYUV;
BOOL m_fD3DFullscreen;
BOOL m_fVMR9AlterativeVSync;
BOOL m_fResetDevice;
+ BOOL m_fCacheShaders;
CString m_iEvrBuffers;
BOOL m_fD3D9RenderDevice;
@@ -92,6 +100,7 @@ public:
afx_msg void OnDSRendererChange();
afx_msg void OnRMRendererChange();
afx_msg void OnQTRendererChange();
+ afx_msg void OnSubtitleRendererChange();
afx_msg void OnFullscreenCheck();
afx_msg void OnD3D9DeviceCheck();
};
diff --git a/src/mpc-hc/PPagePlayback.cpp b/src/mpc-hc/PPagePlayback.cpp
index 105c3492a..79048a985 100644
--- a/src/mpc-hc/PPagePlayback.cpp
+++ b/src/mpc-hc/PPagePlayback.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -32,24 +32,22 @@
IMPLEMENT_DYNAMIC(CPPagePlayback, CPPageBase)
CPPagePlayback::CPPagePlayback()
: CPPageBase(CPPagePlayback::IDD, CPPagePlayback::IDD)
+ , m_oldVolume(0)
+ , m_nVolume(0)
+ , m_nBalance(0)
+ , m_nVolumeStep(0)
+ , m_nSpeedStep(0)
, m_iLoopForever(0)
+ , m_iLoopMode(0)
, m_nLoops(0)
, m_iAfterPlayback(0)
, m_iZoomLevel(0)
, m_iRememberZoomLevel(FALSE)
, m_nAutoFitFactor(75)
- , m_nVolume(0)
- , m_oldVolume(0)
- , m_nBalance(0)
, m_fAutoloadAudio(FALSE)
- , m_fAutoloadSubtitles(FALSE)
, m_fEnableWorkerThreadForOpening(FALSE)
, m_fReportFailedPins(FALSE)
- , m_subtitlesLanguageOrder(_T(""))
- , m_audiosLanguageOrder(_T(""))
, m_fAllowOverridingExternalSplitterChoice(FALSE)
- , m_nSpeedStep(0)
- , m_nVolumeStep(0)
{
}
@@ -73,7 +71,6 @@ void CPPagePlayback::DoDataExchange(CDataExchange* pDX)
DDX_CBIndex(pDX, IDC_COMBO1, m_iZoomLevel);
DDX_Check(pDX, IDC_CHECK5, m_iRememberZoomLevel);
DDX_Check(pDX, IDC_CHECK2, m_fAutoloadAudio);
- DDX_Check(pDX, IDC_CHECK3, m_fAutoloadSubtitles);
DDX_Check(pDX, IDC_CHECK7, m_fEnableWorkerThreadForOpening);
DDX_Check(pDX, IDC_CHECK6, m_fReportFailedPins);
DDX_Text(pDX, IDC_EDIT2, m_subtitlesLanguageOrder);
@@ -84,6 +81,8 @@ void CPPagePlayback::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_VOLUMESTEP_SPIN, m_VolumeStepCtrl);
DDX_Control(pDX, IDC_SPEEDSTEP_SPIN, m_SpeedStepCtrl);
DDX_Control(pDX, IDC_SPIN1, m_AutoFitFactorCtrl);
+ DDX_Control(pDX, IDC_COMBO3, m_LoopMode);
+ DDX_CBIndex(pDX, IDC_COMBO3, m_iLoopMode);
}
BEGIN_MESSAGE_MAP(CPPagePlayback, CPPageBase)
@@ -92,12 +91,8 @@ BEGIN_MESSAGE_MAP(CPPagePlayback, CPPageBase)
ON_UPDATE_COMMAND_UI(IDC_EDIT1, OnUpdateLoopNum)
ON_UPDATE_COMMAND_UI(IDC_STATIC1, OnUpdateLoopNum)
ON_UPDATE_COMMAND_UI(IDC_COMBO1, OnUpdateAutoZoomCombo)
+ ON_UPDATE_COMMAND_UI(IDC_COMBO2, OnUpdateAfterPlayback)
ON_UPDATE_COMMAND_UI(IDC_SPEEDSTEP_SPIN, OnUpdateSpeedStep)
- ON_UPDATE_COMMAND_UI(IDC_EDIT4, OnUpdateAutoZoomFactor)
- ON_UPDATE_COMMAND_UI(IDC_STATIC2, OnUpdateAutoZoomFactor)
- ON_UPDATE_COMMAND_UI(IDC_STATIC3, OnUpdateAutoZoomFactor)
- ON_UPDATE_COMMAND_UI(IDC_CHECK3, OnUpdateISREnabled)
-
ON_STN_DBLCLK(IDC_STATIC_BALANCE, OnBalanceTextDblClk)
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
END_MESSAGE_MAP()
@@ -125,6 +120,7 @@ BOOL CPPagePlayback::OnInitDialog()
m_SpeedStepCtrl.SetPos32(m_nSpeedStep);
m_SpeedStepCtrl.SetRange32(0, 100);
m_iLoopForever = s.fLoopForever ? 1 : 0;
+ m_iLoopMode = static_cast<int>(s.eLoopMode);
m_nLoops = s.nLoops;
m_iAfterPlayback = static_cast<int>(s.eAfterPlayback);
m_iZoomLevel = s.iZoomLevel;
@@ -133,7 +129,6 @@ BOOL CPPagePlayback::OnInitDialog()
m_AutoFitFactorCtrl.SetPos32(m_nAutoFitFactor);
m_AutoFitFactorCtrl.SetRange32(25, 100);
m_fAutoloadAudio = s.fAutoloadAudio;
- m_fAutoloadSubtitles = s.fAutoloadSubtitles;
m_fEnableWorkerThreadForOpening = s.fEnableWorkerThreadForOpening;
m_fReportFailedPins = s.fReportFailedPins;
m_subtitlesLanguageOrder = s.strSubtitlesLanguageOrder;
@@ -155,6 +150,10 @@ BOOL CPPagePlayback::OnInitDialog()
m_afterPlayback.AddString(ResStr(IDS_AFTER_PLAYBACK_EXIT));
CorrectComboListWidth(m_afterPlayback);
+ m_LoopMode.AddString(ResStr(IDS_PLAY_LOOPMODE_FILE));
+ m_LoopMode.AddString(ResStr(IDS_PLAY_LOOPMODE_PLAYLIST));
+ CorrectComboListWidth(m_LoopMode);
+
// set the spinner acceleration value
UDACCEL accel = { 0, 10 };
m_SpeedStepCtrl.SetAccel(1, &accel);
@@ -180,16 +179,16 @@ BOOL CPPagePlayback::OnApply()
s.nVolume = m_oldVolume = m_nVolume;
s.nBalance = m_nBalance;
- s.nVolumeStep = min(max(m_nVolumeStep, 1), 100);
+ s.nVolumeStep = std::min(std::max(m_nVolumeStep, 1), 100);
s.nSpeedStep = m_nSpeedStep;
s.fLoopForever = !!m_iLoopForever;
+ s.eLoopMode = static_cast<CAppSettings::LoopMode>(m_iLoopMode);
s.nLoops = m_nLoops;
s.eAfterPlayback = static_cast<CAppSettings::AfterPlayback>(m_iAfterPlayback);
s.iZoomLevel = m_iZoomLevel;
s.fRememberZoomLevel = !!m_iRememberZoomLevel;
- s.nAutoFitFactor = m_nAutoFitFactor = min(max(m_nAutoFitFactor, 25), 100);
+ s.nAutoFitFactor = m_nAutoFitFactor = std::min(std::max(m_nAutoFitFactor, 25), 100);
s.fAutoloadAudio = !!m_fAutoloadAudio;
- s.fAutoloadSubtitles = !!m_fAutoloadSubtitles;
s.fEnableWorkerThreadForOpening = !!m_fEnableWorkerThreadForOpening;
s.fReportFailedPins = !!m_fReportFailedPins;
s.strSubtitlesLanguageOrder = m_subtitlesLanguageOrder;
@@ -234,15 +233,9 @@ void CPPagePlayback::OnUpdateAutoZoomCombo(CCmdUI* pCmdUI)
pCmdUI->Enable(!!IsDlgButtonChecked(IDC_CHECK5));
}
-void CPPagePlayback::OnUpdateAutoZoomFactor(CCmdUI* pCmdUI)
-{
- int iZoomLevel = m_zoomlevelctrl.GetCurSel();
- pCmdUI->Enable(!!IsDlgButtonChecked(IDC_CHECK5) && (iZoomLevel == 3 || iZoomLevel == 4));
-}
-
-void CPPagePlayback::OnUpdateISREnabled(CCmdUI* pCmdUI)
+void CPPagePlayback::OnUpdateAfterPlayback(CCmdUI* pCmdUI)
{
- pCmdUI->Enable(AfxGetAppSettings().IsISRAvailable());
+ pCmdUI->Enable(!IsDlgButtonChecked(IDC_RADIO2));
}
void CPPagePlayback::OnUpdateSpeedStep(CCmdUI* pCmdUI)
@@ -283,14 +276,14 @@ BOOL CPPagePlayback::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
CString strTipText;
if (nID == IDC_SLIDER1) {
- strTipText.Format(ResStr(IDS_VOLUME), m_nVolume);
+ strTipText.Format(IDS_VOLUME, m_nVolume);
} else if (nID == IDC_SLIDER2) {
if (m_nBalance > 0) {
- strTipText.Format(ResStr(IDS_BALANCE_R), m_nBalance);
+ strTipText.Format(IDS_BALANCE_R, m_nBalance);
} else if (m_nBalance < 0) {
- strTipText.Format(ResStr(IDS_BALANCE_L), -m_nBalance);
+ strTipText.Format(IDS_BALANCE_L, -m_nBalance);
} else { //if (m_nBalance == 0)
- strTipText = ResStr(IDS_BALANCE);
+ strTipText.LoadString(IDS_BALANCE);
}
}
diff --git a/src/mpc-hc/PPagePlayback.h b/src/mpc-hc/PPagePlayback.h
index 29381ce9c..10f3b5263 100644
--- a/src/mpc-hc/PPagePlayback.h
+++ b/src/mpc-hc/PPagePlayback.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -46,6 +46,8 @@ public:
int m_nSpeedStep;
CSpinButtonCtrl m_SpeedStepCtrl;
int m_iLoopForever;
+ int m_iLoopMode;
+ CComboBox m_LoopMode;
CEdit m_loopnumctrl;
int m_nLoops;
int m_iAfterPlayback;
@@ -54,7 +56,6 @@ public:
int m_nAutoFitFactor;
CSpinButtonCtrl m_AutoFitFactorCtrl;
BOOL m_fAutoloadAudio;
- BOOL m_fAutoloadSubtitles;
BOOL m_fEnableWorkerThreadForOpening;
BOOL m_fReportFailedPins;
CString m_subtitlesLanguageOrder;
@@ -79,8 +80,7 @@ public:
afx_msg void OnBnClickedRadio12(UINT nID);
afx_msg void OnUpdateLoopNum(CCmdUI* pCmdUI);
afx_msg void OnUpdateAutoZoomCombo(CCmdUI* pCmdUI);
- afx_msg void OnUpdateAutoZoomFactor(CCmdUI* pCmdUI);
- afx_msg void OnUpdateISREnabled(CCmdUI* pCmdUI);
+ afx_msg void OnUpdateAfterPlayback(CCmdUI* pCmdUI);
afx_msg void OnUpdateSpeedStep(CCmdUI* pCmdUI);
afx_msg void OnBalanceTextDblClk();
diff --git a/src/mpc-hc/PPagePlayer.cpp b/src/mpc-hc/PPagePlayer.cpp
index d2daae20d..bd9ea687f 100644
--- a/src/mpc-hc/PPagePlayer.cpp
+++ b/src/mpc-hc/PPagePlayer.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -33,7 +33,6 @@ IMPLEMENT_DYNAMIC(CPPagePlayer, CPPageBase)
CPPagePlayer::CPPagePlayer()
: CPPageBase(CPPagePlayer::IDD, CPPagePlayer::IDD)
, m_iAllowMultipleInst(0)
- , m_fTrayIcon(FALSE)
, m_iTitleBarTextStyle(0)
, m_bTitleBarTextTitle(0)
, m_fRememberWindowPos(FALSE)
@@ -41,6 +40,7 @@ CPPagePlayer::CPPagePlayer()
, m_fSavePnSZoom(FALSE)
, m_fSnapToDesktopEdges(FALSE)
, m_fUseIni(FALSE)
+ , m_fTrayIcon(FALSE)
, m_fKeepHistory(FALSE)
, m_fHideCDROMsSubMenu(FALSE)
, m_priority(FALSE)
@@ -183,7 +183,7 @@ BOOL CPPagePlayer::OnApply()
MB_ICONINFORMATION | MB_OK);
}
- if (!Translations::SetLanguage(Translations::GetLanguageResourceByLocaleID(language))) {
+ if (!Translations::SetLanguage(language)) {
// In case of error, reset the language to English
language = 0;
m_langsComboBox.SetCurSel(m_nPosLangEnglish);
diff --git a/src/mpc-hc/PPageShaders.cpp b/src/mpc-hc/PPageShaders.cpp
index 225aa918a..361472180 100644
--- a/src/mpc-hc/PPageShaders.cpp
+++ b/src/mpc-hc/PPageShaders.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#include "PPageShaders.h"
#include "MainFrm.h"
#include "PathUtils.h"
+#include "mplayerc.h"
CShaderListBox::CShaderListBox()
: CListBox()
diff --git a/src/mpc-hc/PPageShaders.h b/src/mpc-hc/PPageShaders.h
index 904a733d9..37a666c3a 100644
--- a/src/mpc-hc/PPageShaders.h
+++ b/src/mpc-hc/PPageShaders.h
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#include "EventDispatcher.h"
#include "PPageBase.h"
+#include "Shaders.h"
class CShaderListBox : public CListBox
{
diff --git a/src/mpc-hc/PPageSheet.cpp b/src/mpc-hc/PPageSheet.cpp
index 6767f66c4..b780e11db 100644
--- a/src/mpc-hc/PPageSheet.cpp
+++ b/src/mpc-hc/PPageSheet.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,6 +23,7 @@
#include "mplayerc.h"
#include "PPageSheet.h"
#include "SettingsDefines.h"
+#include "SysVersion.h"
// CPPageSheet
@@ -30,9 +31,9 @@ IMPLEMENT_DYNAMIC(CPPageSheet, CTreePropSheet)
CPPageSheet::CPPageSheet(LPCTSTR pszCaption, IFilterGraph* pFG, CWnd* pParentWnd, UINT idPage)
: CTreePropSheet(pszCaption, pParentWnd, 0)
- , m_audioswitcher(pFG)
, m_bLockPage(false)
, m_bLanguageChanged(false)
+ , m_audioswitcher(pFG)
{
EventRouter::EventSelection receives;
receives.insert(MpcEvent::CHANGING_UI_LANGUAGE);
@@ -55,6 +56,9 @@ CPPageSheet::CPPageSheet(LPCTSTR pszCaption, IFilterGraph* pFG, CWnd* pParentWnd
AddPage(&m_internalfilters);
#endif
AddPage(&m_audioswitcher);
+ if (SysVersion::IsVistaOrLater()) {
+ AddPage(&m_audiorenderer);
+ }
AddPage(&m_externalfilters);
AddPage(&m_subtitles);
AddPage(&m_substyle);
@@ -132,10 +136,10 @@ void CPPageSheet::OnApply()
// Execute the default actions first
Default();
- // If the language was changed, we quit the dialog and return IDRETRY code
+ // If the language was changed, we quit the dialog and inform the caller about it
if (m_bLanguageChanged) {
m_bLanguageChanged = false;
- EndDialog(IDRETRY);
+ EndDialog(APPLY_LANGUAGE_CHANGE);
}
}
diff --git a/src/mpc-hc/PPageSheet.h b/src/mpc-hc/PPageSheet.h
index ec46c575e..83ef49870 100644
--- a/src/mpc-hc/PPageSheet.h
+++ b/src/mpc-hc/PPageSheet.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -34,6 +34,7 @@
#include "PPageWebServer.h"
#include "PPageInternalFilters.h"
#include "PPageAudioSwitcher.h"
+#include "PPageAudioRenderer.h"
#include "PPageExternalFilters.h"
#include "PPageSubtitles.h"
#include "PPageSubStyle.h"
@@ -44,6 +45,7 @@
#include "PPageShaders.h"
#include "PPageAdvanced.h"
#include "TreePropSheet/TreePropSheet.h"
+#include "DpiHelper.h"
// CTreePropSheetTreeCtrl
@@ -67,6 +69,12 @@ class CPPageSheet : public TreePropSheet::CTreePropSheet
{
DECLARE_DYNAMIC(CPPageSheet)
+public:
+ enum {
+ APPLY_LANGUAGE_CHANGE = 100, // 100 is a magic number than won't collide with WinAPI constants
+ RESET_SETTINGS
+ };
+
private:
bool m_bLockPage;
bool m_bLanguageChanged;
@@ -87,6 +95,7 @@ private:
CPPageInternalFilters m_internalfilters;
#endif
CPPageAudioSwitcher m_audioswitcher;
+ CPPageAudioRenderer m_audiorenderer;
CPPageExternalFilters m_externalfilters;
CPPageSubtitles m_subtitles;
CPPageSubStyle m_substyle;
@@ -107,7 +116,7 @@ public:
void LockPage() { m_bLockPage = true; };
protected:
- DPI m_dpi;
+ DpiHelper m_dpi;
virtual BOOL OnInitDialog();
diff --git a/src/mpc-hc/PPageSubMisc.cpp b/src/mpc-hc/PPageSubMisc.cpp
index f046cf7b9..35d3f9a29 100644
--- a/src/mpc-hc/PPageSubMisc.cpp
+++ b/src/mpc-hc/PPageSubMisc.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,8 +20,10 @@
#include "stdafx.h"
#include "mplayerc.h"
+#include "MainFrm.h"
+#include "AuthDlg.h"
#include "PPageSubMisc.h"
-#include "ISDb.h"
+#include "SubtitlesProviders.h"
// CPPageSubMisc dialog
@@ -29,11 +31,17 @@ IMPLEMENT_DYNAMIC(CPPageSubMisc, CPPageBase)
CPPageSubMisc::CPPageSubMisc()
: CPPageBase(CPPageSubMisc::IDD, CPPageSubMisc::IDD)
+ , m_pSubtitlesProviders(nullptr)
, m_fPreferDefaultForcedSubtitles(TRUE)
, m_fPrioritizeExternalSubtitles(TRUE)
, m_fDisableInternalSubtitles(FALSE)
- , m_szAutoloadPaths("")
- , m_ISDb(_T(""))
+ , m_bAutoDownloadSubtitles(FALSE)
+ , m_strAutoDownloadSubtitlesExclude()
+ , m_bAutoUploadSubtitles(FALSE)
+ , m_bPreferHearingImpairedSubtitles(FALSE)
+ , m_strSubtitlesProviders()
+ , m_strSubtitlesLanguageOrder()
+ , m_strAutoloadPaths()
{
}
@@ -47,9 +55,13 @@ void CPPageSubMisc::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_CHECK1, m_fPreferDefaultForcedSubtitles);
DDX_Check(pDX, IDC_CHECK2, m_fPrioritizeExternalSubtitles);
DDX_Check(pDX, IDC_CHECK3, m_fDisableInternalSubtitles);
- DDX_Text(pDX, IDC_EDIT1, m_szAutoloadPaths);
- DDX_Control(pDX, IDC_COMBO1, m_ISDbCombo);
- DDX_CBString(pDX, IDC_COMBO1, m_ISDb);
+ DDX_Check(pDX, IDC_CHECK4, m_bAutoDownloadSubtitles);
+ DDX_Check(pDX, IDC_CHECK5, m_bPreferHearingImpairedSubtitles);
+ DDX_Check(pDX, IDC_CHECK6, m_bAutoUploadSubtitles);
+ DDX_Text(pDX, IDC_EDIT1, m_strAutoloadPaths);
+ DDX_Text(pDX, IDC_EDIT2, m_strAutoDownloadSubtitlesExclude);
+ DDX_Text(pDX, IDC_EDIT3, m_strSubtitlesLanguageOrder);
+ DDX_Control(pDX, IDC_LIST1, m_list);
}
BOOL CPPageSubMisc::OnInitDialog()
@@ -61,14 +73,75 @@ BOOL CPPageSubMisc::OnInitDialog()
m_fPreferDefaultForcedSubtitles = s.bPreferDefaultForcedSubtitles;
m_fPrioritizeExternalSubtitles = s.fPrioritizeExternalSubtitles;
m_fDisableInternalSubtitles = s.fDisableInternalSubtitles;
- m_szAutoloadPaths = s.strSubtitlePaths;
+ m_strAutoloadPaths = s.strSubtitlePaths;
+ m_bAutoDownloadSubtitles = s.bAutoDownloadSubtitles;
+ m_strAutoDownloadSubtitlesExclude = s.strAutoDownloadSubtitlesExclude;
+ m_bAutoUploadSubtitles = s.bAutoUploadSubtitles;
+ m_bPreferHearingImpairedSubtitles = s.bPreferHearingImpairedSubtitles;
+ m_strSubtitlesLanguageOrder = s.strSubtitlesLanguageOrder;
+ m_strSubtitlesProviders = s.strSubtitlesProviders;
- m_ISDb = s.strISDb;
- m_ISDbCombo.AddString(m_ISDb);
- if (m_ISDb.CompareNoCase(_T("www.opensubtitles.org/isdb"))) {
- m_ISDbCombo.AddString(_T("www.opensubtitles.org/isdb"));
+ GetDlgItem(IDC_CHECK5)->EnableWindow(m_bAutoDownloadSubtitles);
+ GetDlgItem(IDC_STATIC1)->EnableWindow(m_bAutoDownloadSubtitles);
+ GetDlgItem(IDC_EDIT2)->EnableWindow(m_bAutoDownloadSubtitles);
+
+ m_list.SetExtendedStyle(m_list.GetExtendedStyle()
+ | LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT
+ | LVS_EX_CHECKBOXES | LVS_EX_LABELTIP);
+
+ // Do not check dynamic_cast, because if it fails we cannot recover from the error anyway.
+ const CMainFrame* pMainFrame = AfxGetMainFrame();
+ ASSERT(pMainFrame);
+ m_pSubtitlesProviders = pMainFrame->m_pSubtitlesProviders.get();
+ ASSERT(m_pSubtitlesProviders);
+
+ m_list.SetImageList(&m_pSubtitlesProviders->GetImageList(), LVSIL_SMALL);
+
+ CArray<int> columnWidth;
+ if (columnWidth.GetCount() != COL_TOTAL_COLUMNS) {
+ // default sizes
+ columnWidth.RemoveAll();
+ columnWidth.Add(120);
+ columnWidth.Add(75);
+ columnWidth.Add(300);
+ }
+
+ m_list.InsertColumn(COL_PROVIDER, ResStr(IDS_SUBDL_DLG_PROVIDER_COL), LVCFMT_LEFT, columnWidth[COL_PROVIDER]);
+ m_list.InsertColumn(COL_USERNAME, ResStr(IDS_SUBUL_DLG_USERNAME_COL), LVCFMT_LEFT, columnWidth[COL_USERNAME]);
+ m_list.InsertColumn(COL_LANGUAGES, ResStr(IDS_SUBPP_DLG_LANGUAGES_COL), LVCFMT_LEFT, columnWidth[COL_LANGUAGES]);
+
+ m_list.SetRedraw(FALSE);
+ m_list.DeleteAllItems();
+
+ int i = 0;
+ for (const auto& iter : m_pSubtitlesProviders->Providers()) {
+ int iItem = m_list.InsertItem(i++, CString(iter->Name().c_str()), iter->GetIconIndex());
+ m_list.SetItemText(iItem, COL_USERNAME, UTF8To16(iter->UserName().c_str()));
+ m_list.SetItemText(iItem, COL_LANGUAGES, ResStr(IDS_SUBPP_DLG_FETCHING_LANGUAGES));
+ m_list.SetCheck(iItem, iter->Enabled(SPF_SEARCH));
+ m_list.SetItemData(iItem, (DWORD_PTR)(iter.get()));
}
+ m_list.SetRedraw(TRUE);
+ m_list.Invalidate();
+ m_list.UpdateWindow();
+
+ m_threadFetchSupportedLanguages = std::thread([this]() {
+ for (const auto& iter : m_pSubtitlesProviders->Providers()) {
+ iter->Languages();
+ }
+ PostMessage(WM_SUPPORTED_LANGUAGES_READY); // Notify the window that languages have been fetched
+ });
+
+ //TODO: Remove when Auto Upload is finalised
+ CheckDlgButton(IDC_CHECK6, FALSE);
+ GetDlgItem(IDC_CHECK6)->EnableWindow(FALSE);
+
+ EnableToolTips(TRUE);
+ CreateToolTip();
+ m_wndToolTip.AddTool(GetDlgItem(IDC_EDIT2), ResStr(IDS_SUB_AUTODL_IGNORE_TOOLTIP));
+ m_wndToolTip.AddTool(GetDlgItem(IDC_EDIT3), ResStr(IDS_LANG_PREF_EXAMPLE));
+
UpdateData(FALSE);
return TRUE;
@@ -83,61 +156,182 @@ BOOL CPPageSubMisc::OnApply()
s.bPreferDefaultForcedSubtitles = !!m_fPreferDefaultForcedSubtitles;
s.fPrioritizeExternalSubtitles = !!m_fPrioritizeExternalSubtitles;
s.fDisableInternalSubtitles = !!m_fDisableInternalSubtitles;
- s.strSubtitlePaths = m_szAutoloadPaths;
+ s.strSubtitlePaths = m_strAutoloadPaths;
+ s.bAutoDownloadSubtitles = !!m_bAutoDownloadSubtitles;
+ s.strAutoDownloadSubtitlesExclude = m_strAutoDownloadSubtitlesExclude;
+ s.bAutoUploadSubtitles = !!m_bAutoUploadSubtitles;
+ s.bPreferHearingImpairedSubtitles = !!m_bPreferHearingImpairedSubtitles;
+ s.strSubtitlesLanguageOrder = m_strSubtitlesLanguageOrder;
- s.strISDb = m_ISDb;
- s.strISDb.TrimRight('/');
+ for (int i = 0; i < m_list.GetItemCount(); ++i) {
+ SubtitlesProvider* provider = reinterpret_cast<SubtitlesProvider*>(m_list.GetItemData(i));
+ provider->Enabled(SPF_SEARCH, m_list.GetCheck(i));
+ }
+
+ s.strSubtitlesProviders = m_pSubtitlesProviders->WriteSettings().c_str();
return __super::OnApply();
}
BEGIN_MESSAGE_MAP(CPPageSubMisc, CPPageBase)
+ ON_MESSAGE_VOID(WM_SUPPORTED_LANGUAGES_READY, OnSupportedLanguagesReady)
+ ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedResetSubsPath)
- ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedTestSubsDB)
- ON_UPDATE_COMMAND_UI(IDC_BUTTON2, OnUpdateButtonTestSubsDB)
- ON_CBN_EDITCHANGE(IDC_COMBO1, OnURLModified)
+ ON_BN_CLICKED(IDC_CHECK4, OnAutoDownloadSubtitlesClicked)
+ ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRightClick)
+ ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemChanged)
END_MESSAGE_MAP()
-void CPPageSubMisc::OnBnClickedResetSubsPath()
+void CPPageSubMisc::OnSupportedLanguagesReady()
{
- m_szAutoloadPaths = DEFAULT_SUBTITLE_PATHS;
+ int i = 0;
+ for (const auto& iter : m_pSubtitlesProviders->Providers()) {
+ CString languages(SubtitlesProvidersUtils::JoinContainer(iter->Languages(), ",").c_str());
+ m_list.SetItemText(i++, COL_LANGUAGES, languages.IsEmpty() ? ResStr(IDS_SUBPP_DLG_LANGUAGES_ERROR) : languages);
+ }
+}
- UpdateData(FALSE);
- SetModified();
+void CPPageSubMisc::OnDestroy()
+{
+ if (m_threadFetchSupportedLanguages.joinable()) {
+ m_threadFetchSupportedLanguages.join();
+ }
}
-void CPPageSubMisc::OnBnClickedTestSubsDB()
+void CPPageSubMisc::OnRightClick(NMHDR* pNMHDR, LRESULT* pResult)
{
- CString ISDb, ver, str;
- UINT msg;
+ LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
- m_ISDbCombo.GetWindowText(ISDb);
- ISDb.TrimRight('/');
+ if (lpnmlv->iItem >= 0 && lpnmlv->iSubItem >= 0) {
+ SubtitlesProvider& provider = *(SubtitlesProvider*)(m_list.GetItemData(lpnmlv->iItem));
- ver.Format(_T("ISDb v%d"), ISDb_PROTOCOL_VERSION);
+ enum {
+ SET_CREDENTIALS = 0x1000,
+ RESET_CREDENTIALS,
+ MOVE_UP,
+ MOVE_DOWN,
+ OPEN_URL,
+ COPY_URL
+ };
- CWebTextFile wtf;
- UINT nIconType = MB_ICONEXCLAMATION;
+ CMenu m;
+ m.CreatePopupMenu();
+ m.AppendMenu(MF_STRING | (provider.Flags(SPF_LOGIN) ? MF_ENABLED : MF_DISABLED), SET_CREDENTIALS, ResStr(IDS_SUBMENU_SETUP));
+ m.AppendMenu(MF_STRING | (provider.Flags(SPF_LOGIN) && provider.UserName().length() ? MF_ENABLED : MF_DISABLED), RESET_CREDENTIALS, ResStr(IDS_SUBMENU_RESET));
+ m.AppendMenu(MF_SEPARATOR);
+ m.AppendMenu(MF_STRING | (lpnmlv->iItem > 0 ? MF_ENABLED : MF_DISABLED), MOVE_UP, ResStr(IDS_SUBMENU_MOVEUP));
+ m.AppendMenu(MF_STRING | (lpnmlv->iItem < m_list.GetItemCount() - 1 ? MF_ENABLED : MF_DISABLED), MOVE_DOWN, ResStr(IDS_SUBMENU_MOVEDOWN));
+ m.AppendMenu(MF_SEPARATOR);
+ m.AppendMenu(MF_STRING | MF_ENABLED, OPEN_URL, ResStr(IDS_SUBMENU_OPENURL));
+ m.AppendMenu(MF_STRING | MF_ENABLED, COPY_URL, ResStr(IDS_SUBMENU_COPYURL));
- if (wtf.Open(_T("http://") + ISDb + _T("/test.php")) && wtf.ReadString(str) && str == ver) {
- msg = IDS_PPSDB_URLCORRECT;
- nIconType = MB_ICONINFORMATION;
- } else if (str.Find(_T("ISDb v")) == 0) {
- msg = IDS_PPSDB_PROTOCOLERR;
- } else {
- msg = IDS_PPSDB_BADURL;
- }
+ CPoint pt = lpnmlv->ptAction;
+ ::MapWindowPoints(lpnmlv->hdr.hwndFrom, HWND_DESKTOP, &pt, 1);
+
+ switch (m.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RETURNCMD, pt.x, pt.y, this)) {
+ case OPEN_URL:
+ provider.OpenUrl();
+ break;
+ case COPY_URL: {
+ if (!provider.Url().empty()) {
+ size_t len = provider.Url().length() + 1;
+ HGLOBAL hGlob = ::GlobalAlloc(GMEM_MOVEABLE, len * sizeof(CHAR));
+ if (hGlob) {
+ // Lock the handle and copy the text to the buffer
+ LPVOID pData = ::GlobalLock(hGlob);
+ if (pData) {
+ ::strcpy_s((CHAR*)pData, len, (LPCSTR)provider.Url().c_str());
+ ::GlobalUnlock(hGlob);
+
+ if (GetParent()->OpenClipboard()) {
+ // Place the handle on the clipboard, if the call succeeds
+ // the system will take care of the allocated memory
+ if (::EmptyClipboard() && ::SetClipboardData(CF_TEXT, hGlob)) {
+ hGlob = nullptr;
+ }
+
+ ::CloseClipboard();
+ }
+ }
- AfxMessageBox(msg, nIconType | MB_OK, 0);
+ if (hGlob) {
+ ::GlobalFree(hGlob);
+ }
+ }
+ }
+ break;
+ }
+ case SET_CREDENTIALS: {
+ CString szUser(UTF8To16(provider.UserName().c_str()));
+ CString szPass(UTF8To16(provider.Password().c_str()));
+ CString szDomain(provider.Name().c_str());
+ if (ERROR_SUCCESS == PromptForCredentials(GetSafeHwnd(),
+ ResStr(IDS_SUB_CREDENTIALS_TITLE), ResStr(IDS_SUB_CREDENTIALS_MSG) + CString(provider.Url().c_str()),
+ szDomain, szUser, szPass, /*&bSave*/nullptr)) {
+ provider.LogOut();
+ provider.UserName(static_cast<const char*>(UTF16To8(szUser)));
+ provider.Password(static_cast<const char*>(UTF16To8(szPass)));
+ m_list.SetItemText(lpnmlv->iItem, 1, szUser);
+ SetModified();
+ }
+ break;
+ }
+ case RESET_CREDENTIALS:
+ provider.LogOut();
+ provider.UserName("");
+ provider.Password("");
+ m_list.SetItemText(lpnmlv->iItem, 1, _T(""));
+ SetModified();
+ break;
+ case MOVE_UP:
+ m_pSubtitlesProviders->MoveUp(lpnmlv->iItem);
+ ListView_SortItemsEx(m_list.GetSafeHwnd(), SortCompare, m_list.GetSafeHwnd());
+ SetModified();
+ break;
+ case MOVE_DOWN:
+ m_pSubtitlesProviders->MoveDown(lpnmlv->iItem);
+ ListView_SortItemsEx(m_list.GetSafeHwnd(), SortCompare, m_list.GetSafeHwnd());
+ SetModified();
+ break;
+ default:
+ break;
+ }
+ }
}
-void CPPageSubMisc::OnUpdateButtonTestSubsDB(CCmdUI* pCmdUI)
+void CPPageSubMisc::OnAutoDownloadSubtitlesClicked()
{
- pCmdUI->Enable(m_ISDbCombo.GetWindowTextLength() > 0);
+ m_bAutoDownloadSubtitles = IsDlgButtonChecked(IDC_CHECK4);
+ GetDlgItem(IDC_CHECK5)->EnableWindow(m_bAutoDownloadSubtitles);
+ GetDlgItem(IDC_STATIC1)->EnableWindow(m_bAutoDownloadSubtitles);
+ GetDlgItem(IDC_EDIT2)->EnableWindow(m_bAutoDownloadSubtitles);
+ UpdateWindow();
+
+ SetModified();
}
-void CPPageSubMisc::OnURLModified()
+void CPPageSubMisc::OnBnClickedResetSubsPath()
{
+ m_strAutoloadPaths = DEFAULT_SUBTITLE_PATHS;
+
+ UpdateData(FALSE);
SetModified();
}
+
+void CPPageSubMisc::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMLISTVIEW pNMLV = (LPNMLISTVIEW)pNMHDR;
+
+ if (pNMLV->uOldState + pNMLV->uNewState == 0x3000) {
+ SetModified();
+ }
+}
+
+int CALLBACK CPPageSubMisc::SortCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
+{
+ CListCtrl& list = *(CListCtrl*)CListCtrl::FromHandle((HWND)lParamSort);
+ size_t left = ((SubtitlesProvider*)list.GetItemData((int)lParam1))->Index();
+ size_t right = ((SubtitlesProvider*)list.GetItemData((int)lParam2))->Index();
+ return int(left - right);
+}
diff --git a/src/mpc-hc/PPageSubMisc.h b/src/mpc-hc/PPageSubMisc.h
index 16fe65687..a6c73320a 100644
--- a/src/mpc-hc/PPageSubMisc.h
+++ b/src/mpc-hc/PPageSubMisc.h
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#include "PPageBase.h"
+class SubtitlesProviders;
// CPPageSubMisc dialog
@@ -29,6 +30,18 @@ class CPPageSubMisc : public CPPageBase
{
DECLARE_DYNAMIC(CPPageSubMisc)
+private:
+ enum {
+ COL_PROVIDER,
+ COL_USERNAME,
+ COL_LANGUAGES,
+ COL_TOTAL_COLUMNS
+ };
+
+ SubtitlesProviders* m_pSubtitlesProviders;
+
+ std::thread m_threadFetchSupportedLanguages;
+
public:
CPPageSubMisc();
virtual ~CPPageSubMisc();
@@ -37,21 +50,34 @@ public:
enum { IDD = IDD_PPAGESUBMISC };
protected:
+ enum {
+ WM_SUPPORTED_LANGUAGES_READY = WM_APP + 1
+ };
+
BOOL m_fPreferDefaultForcedSubtitles;
BOOL m_fPrioritizeExternalSubtitles;
BOOL m_fDisableInternalSubtitles;
- CString m_szAutoloadPaths;
- CComboBox m_ISDbCombo;
- CString m_ISDb;
+ BOOL m_bAutoDownloadSubtitles;
+ CString m_strAutoDownloadSubtitlesExclude;
+ BOOL m_bAutoUploadSubtitles;
+ BOOL m_bPreferHearingImpairedSubtitles;
+ CString m_strSubtitlesProviders;
+ CString m_strSubtitlesLanguageOrder;
+ CString m_strAutoloadPaths;
+ CListCtrl m_list;
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
virtual BOOL OnApply();
+ static int CALLBACK SortCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
+
DECLARE_MESSAGE_MAP()
+ afx_msg void OnSupportedLanguagesReady();
+ afx_msg void OnDestroy();
afx_msg void OnBnClickedResetSubsPath();
- afx_msg void OnBnClickedTestSubsDB();
- afx_msg void OnUpdateButtonTestSubsDB(CCmdUI* pCmdUI);
- afx_msg void OnURLModified();
+ afx_msg void OnAutoDownloadSubtitlesClicked();
+ afx_msg void OnRightClick(NMHDR* pNMHDR, LRESULT* pResult);
+ afx_msg void OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult);
};
diff --git a/src/mpc-hc/PPageSubStyle.cpp b/src/mpc-hc/PPageSubStyle.cpp
index 7560e1567..5be4ab076 100644
--- a/src/mpc-hc/PPageSubStyle.cpp
+++ b/src/mpc-hc/PPageSubStyle.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -30,6 +30,8 @@
IMPLEMENT_DYNAMIC(CPPageSubStyle, CPPageBase)
CPPageSubStyle::CPPageSubStyle()
: CPPageBase(CPPageSubStyle::IDD, CPPageSubStyle::IDD)
+ , m_stss(AfxGetAppSettings().subtitlesDefStyle)
+ , m_bDefaultStyle(true)
, m_iCharset(0)
, m_spacing(0)
, m_angle(0)
@@ -42,8 +44,6 @@ CPPageSubStyle::CPPageSubStyle()
, m_margin(0, 0, 0, 0)
, m_bLinkAlphaSliders(FALSE)
, m_iRelativeTo(0)
- , m_bDefaultStyle(true)
- , m_stss(AfxGetAppSettings().subtitlesDefStyle)
{
}
@@ -214,7 +214,8 @@ BOOL CPPageSubStyle::OnApply()
m_stss.relativeTo = (STSStyle::RelativeTo)m_iRelativeTo;
for (size_t i = 0; i < m_alpha.size(); i++) {
- m_stss.alpha[i] = BYTE_MAX - m_alpha[i];
+ ASSERT(m_alpha[i] <= BYTE_MAX);
+ m_stss.alpha[i] = BYTE_MAX - BYTE(m_alpha[i]);
}
if (m_bDefaultStyle) {
@@ -222,7 +223,7 @@ BOOL CPPageSubStyle::OnApply()
if (stss != m_stss) {
stss = m_stss;
- if (auto pMainFrame = dynamic_cast<CMainFrame*>(AfxGetMainWnd())) {
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
pMainFrame->UpdateSubDefaultStyle();
}
}
diff --git a/src/mpc-hc/PPageSubtitles.cpp b/src/mpc-hc/PPageSubtitles.cpp
index 04d2c9e8c..3c47a53c5 100644
--- a/src/mpc-hc/PPageSubtitles.cpp
+++ b/src/mpc-hc/PPageSubtitles.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,6 +23,7 @@
#include "mplayerc.h"
#include "MainFrm.h"
#include "PPageSubtitles.h"
+#include "PPageAccelTbl.h"
// CPPageSubtitles dialog
@@ -209,7 +210,7 @@ BOOL CPPageSubtitles::OnApply()
if (s.bSubtitleARCompensation != !!m_bSubtitleARCompensation) {
s.bSubtitleARCompensation = !!m_bSubtitleARCompensation;
- if (auto pMainFrame = dynamic_cast<CMainFrame*>(AfxGetMainWnd())) {
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
pMainFrame->UpdateSubAspectRatioCompensation();
}
}
@@ -220,7 +221,7 @@ BOOL CPPageSubtitles::OnApply()
s.fOverridePlacement = !!m_bOverridePlacement;
s.nHorPos = m_nHorPos;
s.nVerPos = m_nVerPos;
- if (auto pMainFrame = dynamic_cast<CMainFrame*>(AfxGetMainWnd())) {
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
pMainFrame->UpdateSubOverridePlacement();
}
}
@@ -274,11 +275,12 @@ BOOL CPPageSubtitles::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
switch (nID) {
case IDC_EDIT4:
- auto& substituteEmpty = [](CString & hotkey) {
- if (hotkey.IsEmpty()) {
+ auto substituteEmpty = [](CString && hotkey) -> CString && {
+ if (hotkey.IsEmpty())
+ {
hotkey.LoadString(IDS_HOTKEY_NOT_DEFINED);
}
- return hotkey;
+ return std::move(hotkey);
};
::SendMessage(pNMHDR->hwndFrom, TTM_SETMAXTIPWIDTH, 0, 320);
m_strToolTip.Format(IDS_SUBTITLE_DELAY_STEP_TOOLTIP,
diff --git a/src/mpc-hc/PPageSubtitles.h b/src/mpc-hc/PPageSubtitles.h
index 7c6d51353..7d100934b 100644
--- a/src/mpc-hc/PPageSubtitles.h
+++ b/src/mpc-hc/PPageSubtitles.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#pragma once
#include "../Subtitles/STS.h"
+#include "PPageBase.h"
// CPPageSubtitles dialog
diff --git a/src/mpc-hc/PPageTweaks.cpp b/src/mpc-hc/PPageTweaks.cpp
index 2dfcb14c9..0533b3486 100644
--- a/src/mpc-hc/PPageTweaks.cpp
+++ b/src/mpc-hc/PPageTweaks.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -34,16 +34,16 @@ CPPageTweaks::CPPageTweaks()
, m_nJumpDistS(0)
, m_nJumpDistM(0)
, m_nJumpDistL(0)
- , m_nOSDSize(0)
, m_fNotifySkype(TRUE)
, m_fPreventMinimize(FALSE)
- , m_fUseWin7TaskBar(TRUE)
+ , m_bUseEnhancedTaskBar(TRUE)
, m_fUseSearchInFolder(FALSE)
- , m_fLCDSupport(FALSE)
- , m_fFastSeek(FALSE)
- , m_fShowChapters(TRUE)
, m_fUseTimeTooltip(TRUE)
, m_bHideWindowedMousePointer(TRUE)
+ , m_nOSDSize(0)
+ , m_fFastSeek(FALSE)
+ , m_fShowChapters(TRUE)
+ , m_fLCDSupport(FALSE)
{
}
@@ -59,7 +59,7 @@ void CPPageTweaks::DoDataExchange(CDataExchange* pDX)
DDX_Text(pDX, IDC_EDIT3, m_nJumpDistL);
DDX_Check(pDX, IDC_CHECK4, m_fNotifySkype);
DDX_Check(pDX, IDC_CHECK6, m_fPreventMinimize);
- DDX_Check(pDX, IDC_CHECK_WIN7, m_fUseWin7TaskBar);
+ DDX_Check(pDX, IDC_CHECK_ENHANCED_TASKBAR, m_bUseEnhancedTaskBar);
DDX_Check(pDX, IDC_CHECK7, m_fUseSearchInFolder);
DDX_Check(pDX, IDC_CHECK8, m_fUseTimeTooltip);
DDX_Control(pDX, IDC_COMBO3, m_TimeTooltipPosition);
@@ -96,9 +96,9 @@ BOOL CPPageTweaks::OnInitDialog()
m_fPreventMinimize = s.fPreventMinimize;
- m_fUseWin7TaskBar = s.fUseWin7TaskBar;
+ m_bUseEnhancedTaskBar = s.bUseEnhancedTaskBar;
if (!SysVersion::Is7OrLater()) {
- GetDlgItem(IDC_CHECK_WIN7)->EnableWindow(FALSE);
+ GetDlgItem(IDC_CHECK_ENHANCED_TASKBAR)->EnableWindow(FALSE);
}
m_fUseSearchInFolder = s.fUseSearchInFolder;
@@ -173,7 +173,7 @@ BOOL CPPageTweaks::OnApply()
s.bNotifySkype = !!m_fNotifySkype;
s.fPreventMinimize = !!m_fPreventMinimize;
- s.fUseWin7TaskBar = !!m_fUseWin7TaskBar;
+ s.bUseEnhancedTaskBar = !!m_bUseEnhancedTaskBar;
s.fUseSearchInFolder = !!m_fUseSearchInFolder;
s.fUseTimeTooltip = !!m_fUseTimeTooltip;
s.nTimeTooltipPosition = m_TimeTooltipPosition.GetCurSel();
@@ -190,7 +190,7 @@ BOOL CPPageTweaks::OnApply()
s.fLCDSupport = !!m_fLCDSupport;
CMainFrame* pFrame = ((CMainFrame*)GetParentFrame());
- if (m_fUseWin7TaskBar) {
+ if (m_bUseEnhancedTaskBar) {
pFrame->CreateThumbnailToolbar();
}
pFrame->UpdateThumbarButton();
@@ -236,7 +236,9 @@ void CPPageTweaks::OnChngOSDCombo()
CString str;
m_nOSDSize = m_FontSize.GetCurSel() + 10;
m_FontType.GetLBText(m_FontType.GetCurSel(), str);
- ((CMainFrame*)AfxGetMainWnd())->m_OSD.DisplayMessage(OSD_TOPLEFT, _T("Test"), 2000, m_nOSDSize, str);
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
+ pMainFrame->m_OSD.DisplayMessage(OSD_TOPLEFT, _T("Test"), 2000, m_nOSDSize, str);
+ }
SetModified();
}
diff --git a/src/mpc-hc/PPageTweaks.h b/src/mpc-hc/PPageTweaks.h
index 67e95cf7b..2dc5ce254 100644
--- a/src/mpc-hc/PPageTweaks.h
+++ b/src/mpc-hc/PPageTweaks.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -42,7 +42,7 @@ public:
BOOL m_fNotifySkype;
BOOL m_fPreventMinimize;
- BOOL m_fUseWin7TaskBar;
+ BOOL m_bUseEnhancedTaskBar;
BOOL m_fUseSearchInFolder;
BOOL m_fUseTimeTooltip;
BOOL m_bHideWindowedMousePointer;
diff --git a/src/mpc-hc/PPageWebServer.cpp b/src/mpc-hc/PPageWebServer.cpp
index 92ec124e1..6da605395 100644
--- a/src/mpc-hc/PPageWebServer.cpp
+++ b/src/mpc-hc/PPageWebServer.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,8 +24,9 @@
#include "MainFrm.h"
#include "PPageWebServer.h"
#include "SysVersion.h"
-#include "WinAPIUtils.h"
+#include "PathUtils.h"
#include <afxglobals.h>
+#include "WebServer.h"
// CPPageWebServer dialog
@@ -36,13 +37,11 @@ CPPageWebServer::CPPageWebServer()
, m_fEnableWebServer(FALSE)
, m_nWebServerPort(0)
, m_launch(_T("http://localhost:13579/"))
- , m_fWebServerPrintDebugInfo(FALSE)
, m_fWebServerUseCompression(FALSE)
- , m_fWebRoot(FALSE)
- , m_WebRoot(_T(""))
, m_fWebServerLocalhostOnly(FALSE)
- , m_WebServerCGI(_T(""))
- , m_WebDefIndex(_T(""))
+ , m_bWebUIEnablePreview(FALSE)
+ , m_fWebServerPrintDebugInfo(FALSE)
+ , m_fWebRoot(FALSE)
{
}
@@ -56,12 +55,14 @@ void CPPageWebServer::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_CHECK1, m_fEnableWebServer);
DDX_Text(pDX, IDC_EDIT1, m_nWebServerPort);
DDX_Control(pDX, IDC_EDIT1, m_nWebServerPortCtrl);
+ DDV_MinMaxInt(pDX, m_nWebServerPort, 1, 65535);
DDX_Control(pDX, IDC_STATIC1, m_launch);
- DDX_Check(pDX, IDC_CHECK2, m_fWebServerPrintDebugInfo);
DDX_Check(pDX, IDC_CHECK3, m_fWebServerUseCompression);
+ DDX_Check(pDX, IDC_CHECK5, m_fWebServerLocalhostOnly);
+ DDX_Check(pDX, IDC_CHECK6, m_bWebUIEnablePreview);
+ DDX_Check(pDX, IDC_CHECK2, m_fWebServerPrintDebugInfo);
DDX_Check(pDX, IDC_CHECK4, m_fWebRoot);
DDX_Text(pDX, IDC_EDIT2, m_WebRoot);
- DDX_Check(pDX, IDC_CHECK5, m_fWebServerLocalhostOnly);
DDX_Text(pDX, IDC_EDIT3, m_WebServerCGI);
DDX_Text(pDX, IDC_EDIT9, m_WebDefIndex);
}
@@ -71,14 +72,10 @@ BOOL CPPageWebServer::PreTranslateMessage(MSG* pMsg)
if (pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd == m_launch.m_hWnd) {
UpdateData();
- const CAppSettings& s = AfxGetAppSettings();
-
- if (CMainFrame* pWnd = (CMainFrame*)AfxGetMainWnd()) {
- if (m_fEnableWebServer) {
- if (s.nWebServerPort != m_nWebServerPort) {
- AfxMessageBox(IDS_WEBSERVER_ERROR_TEST, MB_ICONEXCLAMATION | MB_OK, 0);
- return TRUE;
- }
+ if (m_fEnableWebServer) {
+ if (AfxGetAppSettings().nWebServerPort != m_nWebServerPort) {
+ AfxMessageBox(IDS_WEBSERVER_ERROR_TEST, MB_ICONEXCLAMATION | MB_OK, 0);
+ return TRUE;
}
}
}
@@ -94,9 +91,10 @@ BOOL CPPageWebServer::OnInitDialog()
m_fEnableWebServer = s.fEnableWebServer;
m_nWebServerPort = s.nWebServerPort;
- m_fWebServerPrintDebugInfo = s.fWebServerPrintDebugInfo;
- m_fWebServerLocalhostOnly = s.fWebServerLocalhostOnly;
m_fWebServerUseCompression = s.fWebServerUseCompression;
+ m_fWebServerLocalhostOnly = s.fWebServerLocalhostOnly;
+ m_bWebUIEnablePreview = s.bWebUIEnablePreview;
+ m_fWebServerPrintDebugInfo = s.fWebServerPrintDebugInfo;
m_fWebRoot = s.strWebRoot.Find('*') < 0;
m_WebRoot = s.strWebRoot;
m_WebRoot.TrimLeft(_T('*'));
@@ -129,21 +127,22 @@ BOOL CPPageWebServer::OnApply()
s.fEnableWebServer = !!m_fEnableWebServer;
s.nWebServerPort = m_nWebServerPort;
- s.fWebServerPrintDebugInfo = !!m_fWebServerPrintDebugInfo;
- s.fWebServerLocalhostOnly = !!m_fWebServerLocalhostOnly;
s.fWebServerUseCompression = !!m_fWebServerUseCompression;
+ s.fWebServerLocalhostOnly = !!m_fWebServerLocalhostOnly;
+ s.bWebUIEnablePreview = !!m_bWebUIEnablePreview;
+ s.fWebServerPrintDebugInfo = !!m_fWebServerPrintDebugInfo;
s.strWebRoot = NewWebRoot;
s.strWebDefIndex = m_WebDefIndex;
s.strWebServerCGI = m_WebServerCGI;
- if (CMainFrame* pWnd = (CMainFrame*)AfxGetMainWnd()) {
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
if (m_fEnableWebServer) {
if (fRestart) {
- pWnd->StopWebServer();
+ pMainFrame->StopWebServer();
}
- pWnd->StartWebServer(m_nWebServerPort);
+ pMainFrame->StartWebServer(m_nWebServerPort);
} else {
- pWnd->StopWebServer();
+ pMainFrame->StopWebServer();
}
}
@@ -159,7 +158,7 @@ CString CPPageWebServer::GetCurWebRoot()
WebRoot.Replace('/', '\\');
CPath path;
- path.Combine(GetProgramPath(), WebRoot);
+ path.Combine(PathUtils::GetProgramPath(), WebRoot);
return path.IsDirectory() ? (LPCTSTR)path : _T("");
}
@@ -173,7 +172,7 @@ static int __stdcall BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPA
bool CPPageWebServer::PickDir(CString& dir)
{
- CString strTitle = ResStr(IDS_PPAGEWEBSERVER_0);
+ CString strTitle(StrRes(IDS_PPAGEWEBSERVER_0));
bool success = false;
if (SysVersion::IsVistaOrLater()) {
@@ -227,6 +226,7 @@ BEGIN_MESSAGE_MAP(CPPageWebServer, CPPageBase)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateButton2)
+ ON_BN_CLICKED(IDC_CHECK6, OnEnablePreviewChecked)
END_MESSAGE_MAP()
@@ -248,7 +248,7 @@ void CPPageWebServer::OnBnClickedButton1()
CString dir = GetCurWebRoot();
if (PickDir(dir)) {
CPath path;
- if (path.RelativePathTo(GetProgramPath(), FILE_ATTRIBUTE_DIRECTORY, dir, FILE_ATTRIBUTE_DIRECTORY)) {
+ if (path.RelativePathTo(PathUtils::GetProgramPath(), FILE_ATTRIBUTE_DIRECTORY, dir, FILE_ATTRIBUTE_DIRECTORY)) {
dir = (LPCTSTR)path;
}
m_WebRoot = dir;
@@ -271,3 +271,13 @@ void CPPageWebServer::OnUpdateButton2(CCmdUI* pCmdUI)
{
pCmdUI->Enable(GetDlgItem(IDC_EDIT2)->GetWindowTextLength() > 0);
}
+
+void CPPageWebServer::OnEnablePreviewChecked()
+{
+ if (IsDlgButtonChecked(IDC_CHECK6)
+ && (MessageBox(ResStr(IDS_WEBUI_PREVIEW_WARNING), nullptr, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2) == IDNO)) {
+ CheckDlgButton(IDC_CHECK6, BST_UNCHECKED);
+ } else {
+ SetModified();
+ }
+}
diff --git a/src/mpc-hc/PPageWebServer.h b/src/mpc-hc/PPageWebServer.h
index 565f070ce..93e4aee60 100644
--- a/src/mpc-hc/PPageWebServer.h
+++ b/src/mpc-hc/PPageWebServer.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2012, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -47,9 +47,10 @@ public:
int m_nWebServerPort;
CIntEdit m_nWebServerPortCtrl;
CStaticLink m_launch;
- BOOL m_fWebServerPrintDebugInfo;
BOOL m_fWebServerUseCompression;
BOOL m_fWebServerLocalhostOnly;
+ BOOL m_fWebServerPrintDebugInfo;
+ BOOL m_bWebUIEnablePreview;
BOOL m_fWebRoot;
CString m_WebRoot;
CString m_WebServerCGI;
@@ -68,4 +69,5 @@ public:
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedButton2();
afx_msg void OnUpdateButton2(CCmdUI* pCmdUI);
+ afx_msg void OnEnablePreviewChecked();
};
diff --git a/src/mpc-hc/PlayerBar.cpp b/src/mpc-hc/PlayerBar.cpp
index 010c46741..8b1f79118 100644
--- a/src/mpc-hc/PlayerBar.cpp
+++ b/src/mpc-hc/PlayerBar.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2012-2014 see Authors.txt
+ * (C) 2012-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,12 +21,13 @@
#include "stdafx.h"
#include "PlayerBar.h"
#include "MainFrm.h"
+#include "mplayerc.h"
IMPLEMENT_DYNAMIC(CPlayerBar, CSizingControlBarG)
CPlayerBar::CPlayerBar()
- : m_defDockBarID(0)
- , m_bAutohidden(false)
+ : m_bAutohidden(false)
, m_bHasActivePopup(false)
+ , m_defDockBarID(0)
{
EventRouter::EventSelection receives;
receives.insert(MpcEvent::CHANGING_UI_LANGUAGE);
@@ -85,6 +86,17 @@ void CPlayerBar::OnExitMenuLoop(BOOL bIsTrackPopupMenu)
__super::OnExitMenuLoop(bIsTrackPopupMenu);
}
+void CPlayerBar::OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle)
+{
+ DWORD dwChangedStyle = dwOldStyle ^ dwNewStyle;
+
+ if (dwChangedStyle & CBRS_FLOATING) {
+ SaveState();
+ }
+
+ __super::OnBarStyleChange(dwOldStyle, dwNewStyle);
+}
+
BOOL CPlayerBar::Create(LPCTSTR lpszWindowName, CWnd* pParentWnd, UINT nID, UINT defDockBarID, CString const& strSettingName)
{
m_defDockBarID = defDockBarID;
@@ -97,10 +109,8 @@ void CPlayerBar::LoadState(CFrameWnd* pParent)
{
CWinApp* pApp = AfxGetApp();
- CRect r;
- pParent->GetWindowRect(r);
- CRect rDesktop;
- GetDesktopWindow()->GetWindowRect(&rDesktop);
+ CRect rcDesktop;
+ GetDesktopWindow()->GetWindowRect(&rcDesktop);
CString section = _T("ToolBars\\") + m_strSettingName;
@@ -108,22 +118,33 @@ void CPlayerBar::LoadState(CFrameWnd* pParent)
UINT dockBarID = pApp->GetProfileInt(section, _T("DockState"), m_defDockBarID);
- if (dockBarID == AFX_IDW_DOCKBAR_FLOAT) {
- CPoint p;
- p.x = pApp->GetProfileInt(section, _T("DockPosX"), r.right);
- p.y = pApp->GetProfileInt(section, _T("DockPosY"), r.top);
- if (p.x < rDesktop.left) {
- p.x = rDesktop.left;
+ CPoint p;
+ p.x = pApp->GetProfileInt(section, _T("DockPosX"), CW_USEDEFAULT);
+ p.y = pApp->GetProfileInt(section, _T("DockPosY"), CW_USEDEFAULT);
+ if (p.x != CW_USEDEFAULT && p.y != CW_USEDEFAULT) {
+ if (p.x < rcDesktop.left) {
+ p.x = rcDesktop.left;
}
- if (p.y < rDesktop.top) {
- p.y = rDesktop.top;
+ if (p.y < rcDesktop.top) {
+ p.y = rcDesktop.top;
}
- if (p.x >= rDesktop.right) {
- p.x = rDesktop.right - 1;
+ if (p.x >= rcDesktop.right) {
+ p.x = rcDesktop.right - 1;
}
- if (p.y >= rDesktop.bottom) {
- p.y = rDesktop.bottom - 1;
+ if (p.y >= rcDesktop.bottom) {
+ p.y = rcDesktop.bottom - 1;
}
+ } else {
+ p = rcDesktop.CenterPoint();
+ p.x -= m_szFloat.cx / 2;
+ p.y -= m_szFloat.cy / 2;
+ }
+
+ ASSERT(m_pDockContext);
+ m_pDockContext->m_uMRUDockID = m_defDockBarID;
+ m_pDockContext->m_ptMRUFloatPos = p;
+
+ if (dockBarID == AFX_IDW_DOCKBAR_FLOAT) {
pParent->FloatControlBar(this, p);
} else {
pParent->DockControlBar(this, dockBarID);
diff --git a/src/mpc-hc/PlayerBar.h b/src/mpc-hc/PlayerBar.h
index 89c621191..d90e09494 100644
--- a/src/mpc-hc/PlayerBar.h
+++ b/src/mpc-hc/PlayerBar.h
@@ -1,5 +1,5 @@
/*
- * (C) 2012-2014 see Authors.txt
+ * (C) 2012-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,7 @@
#pragma once
#include "sizecbar/scbarg.h"
+#include "EventDispatcher.h"
class CPlayerBar : public CSizingControlBarG
@@ -45,6 +46,8 @@ protected:
afx_msg void OnEnterMenuLoop(BOOL bIsTrackPopupMenu);
afx_msg void OnExitMenuLoop(BOOL bIsTrackPopupMenu);
+ virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle);
+
void SetAutohidden(bool bValue);
public:
diff --git a/src/mpc-hc/PlayerCaptureBar.cpp b/src/mpc-hc/PlayerCaptureBar.cpp
index 01a4cbb0f..4952b23a8 100644
--- a/src/mpc-hc/PlayerCaptureBar.cpp
+++ b/src/mpc-hc/PlayerCaptureBar.cpp
@@ -28,7 +28,8 @@
// CPlayerCaptureBar
IMPLEMENT_DYNAMIC(CPlayerCaptureBar, CPlayerBar)
-CPlayerCaptureBar::CPlayerCaptureBar()
+CPlayerCaptureBar::CPlayerCaptureBar(CMainFrame* pMainFrame)
+ : m_capdlg(pMainFrame)
{
}
diff --git a/src/mpc-hc/PlayerCaptureBar.h b/src/mpc-hc/PlayerCaptureBar.h
index 670dd1cc7..215b051cd 100644
--- a/src/mpc-hc/PlayerCaptureBar.h
+++ b/src/mpc-hc/PlayerCaptureBar.h
@@ -33,7 +33,7 @@ class CPlayerCaptureBar : public CPlayerBar
public:
CPlayerCaptureDialog m_capdlg;
- CPlayerCaptureBar();
+ CPlayerCaptureBar(CMainFrame* pMainFrame);
virtual ~CPlayerCaptureBar();
BOOL Create(CWnd* pParentWnd, UINT defDockBarID);
diff --git a/src/mpc-hc/PlayerCaptureDialog.cpp b/src/mpc-hc/PlayerCaptureDialog.cpp
index a71ec981f..cf42ffbeb 100644
--- a/src/mpc-hc/PlayerCaptureDialog.cpp
+++ b/src/mpc-hc/PlayerCaptureDialog.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -28,6 +28,7 @@
#include "../filters/muxer/WavDest/WavDest.h"
#include "../filters/muxer/MatroskaMuxer/MatroskaMuxer.h"
#include "../filters/muxer/DSMMuxer/DSMMuxer.h"
+#include "../filters/transform/BufferFilter/BufferFilter.h"
static bool LoadMediaType(CStringW displayName, AM_MEDIA_TYPE** ppmt)
@@ -272,11 +273,8 @@ static void SetupMediaTypes(IAMStreamConfig* pAMSC, CFormatArray<T>& tfa, CCombo
if (mtCap.formattype == FORMAT_VideoInfo) {
VIDEOINFOHEADER* vih = (VIDEOINFOHEADER*)mtCap.pbFormat;
- if (!vih->bmiHeader.biHeight) {
- vih->bmiHeader.biHeight = 1;
- }
vih->bmiHeader.biWidth = presets[j].cx;
- vih->bmiHeader.biHeight = presets[j].cy * (vih->bmiHeader.biHeight / vih->bmiHeader.biHeight);
+ vih->bmiHeader.biHeight = presets[j].cy * (vih->bmiHeader.biHeight < 0 ? -1 : 1);
vih->bmiHeader.biSizeImage = presets[j].cx * presets[j].cy * vih->bmiHeader.biBitCount >> 3;
AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
@@ -297,17 +295,14 @@ static void SetupMediaTypes(IAMStreamConfig* pAMSC, CFormatArray<T>& tfa, CCombo
vih2->dwPictAspectRatioX = 4;
vih2->dwPictAspectRatioY = 3;
- AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
- CopyMediaType(pmt, &mtCap);
- tfa.AddFormat(pmt, pcaps, sizeof(*pcaps));
+ AM_MEDIA_TYPE* pmt2 = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
+ CopyMediaType(pmt2, &mtCap);
+ tfa.AddFormat(pmt2, pcaps, sizeof(*pcaps));
}
} else if (mtCap.formattype == FORMAT_VideoInfo2) {
VIDEOINFOHEADER2* vih2 = (VIDEOINFOHEADER2*)mtCap.pbFormat;
- if (!vih2->bmiHeader.biHeight) {
- vih2->bmiHeader.biHeight = 1;
- }
vih2->bmiHeader.biWidth = presets[j].cx;
- vih2->bmiHeader.biHeight = presets[j].cy * (vih2->bmiHeader.biHeight / vih2->bmiHeader.biHeight);
+ vih2->bmiHeader.biHeight = presets[j].cy * (vih2->bmiHeader.biHeight < 0 ? -1 : 1);
vih2->bmiHeader.biSizeImage = presets[j].cx * presets[j].cy * vih2->bmiHeader.biBitCount >> 3;
vih2->dwPictAspectRatioX = 4;
vih2->dwPictAspectRatioY = 3;
@@ -344,12 +339,12 @@ static void SetupMediaTypes(IAMStreamConfig* pAMSC, CFormatArray<T>& tfa, CCombo
}
CFormat<T>* pf = nullptr;
- CFormatElem<T>* pfe = nullptr;
+ CFormatElem<T>* pfeCurrent = nullptr;
if (!pcurmt) {
pf = tfa[0];
- pfe = pf->GetAt(0);
- } else if (!tfa.FindFormat(pcurmt, nullptr, &pf, &pfe) && !tfa.FindFormat(pcurmt, &pf)) {
+ pfeCurrent = pf->GetAt(0);
+ } else if (!tfa.FindFormat(pcurmt, nullptr, &pf, &pfeCurrent) && !tfa.FindFormat(pcurmt, &pf)) {
if (pcurmt) {
DeleteMediaType(pcurmt);
}
@@ -366,7 +361,7 @@ static void SetupMediaTypes(IAMStreamConfig* pAMSC, CFormatArray<T>& tfa, CCombo
if (iType < 0 && type.GetCount()) {
type.SetCurSel(0);
}
- int iDim = dim.SetCurSel(dim.FindStringExact(0, tfa.MakeDimensionName(pfe)));
+ int iDim = dim.SetCurSel(dim.FindStringExact(0, tfa.MakeDimensionName(pfeCurrent)));
// if (iDim < 0 && dim.GetCount()) dim.SetCurSel(iDim = 0);
CorrectComboListWidth(type);
@@ -434,19 +429,18 @@ static void InitCodecList(CAtlArray<Codec>& codecs, CComboBox& box, const GUID&
}
c.pBF = pBF;
*/
- LPOLESTR strName = nullptr;
+ CComHeapPtr<OLECHAR> strName;
if (FAILED(pMoniker->GetDisplayName(nullptr, nullptr, &strName))) {
continue;
}
c.displayName = strName;
- CoTaskMemFree(strName);
CComPtr<IPropertyBag> pPB;
pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB));
CComVariant var;
- if (!pPB || FAILED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (!pPB || FAILED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
continue;
}
@@ -519,22 +513,23 @@ static int ShowPPage(CAtlArray<Codec>& codecs, const CComboBox& box, HWND hWnd =
// CPlayerCaptureDialog dialog
//IMPLEMENT_DYNAMIC(CPlayerCaptureDialog, CResizableDialog)
-CPlayerCaptureDialog::CPlayerCaptureDialog()
+CPlayerCaptureDialog::CPlayerCaptureDialog(CMainFrame* pMainFrame)
: CResizableDialog(CPlayerCaptureDialog::IDD, nullptr)
+ , m_pMainFrame(pMainFrame)
, m_bInitialized(false)
, m_vidfps(0)
+ , m_nVidBuffers(0)
+ , m_nAudBuffers(0)
+ , m_nRecordTimerID(0)
+ , m_fSepAudio(FALSE)
+ , m_muxtype(0)
+ , m_fEnableOgm(FALSE)
, m_fVidOutput(TRUE)
- , m_fAudOutput(TRUE)
, m_fVidPreview(FALSE)
+ , m_fAudOutput(TRUE)
, m_fAudPreview(FALSE)
- , m_fEnableOgm(FALSE)
- , m_nVidBuffers(0)
- , m_nAudBuffers(0)
, m_pVidBuffer(nullptr)
, m_pAudBuffer(nullptr)
- , m_fSepAudio(FALSE)
- , m_muxtype(0)
- , m_nRecordTimerID(0)
{
EmptyVideo();
EmptyAudio();
@@ -939,7 +934,7 @@ void CPlayerCaptureDialog::UpdateGraph()
{
UpdateMediaTypes();
- ((CMainFrame*)AfxGetMainWnd())->BuildGraphVideoAudio(m_fVidPreview, false, m_fAudPreview, false);
+ m_pMainFrame->BuildGraphVideoAudio(m_fVidPreview, false, m_fAudPreview, false);
UpdateUserDefinableControls();
}
@@ -1078,7 +1073,6 @@ void CPlayerCaptureDialog::UpdateVideoControls()
if (m_vidinput.GetCount() > 0) {
m_vidinput.EnableWindow(TRUE);
- long OutputPinCount, InputPinCount;
if (SUCCEEDED(m_pAMXB->get_PinCounts(&OutputPinCount, &InputPinCount))) {
for (int i = 0; i < OutputPinCount; i++) {
long InputPinIndex;
@@ -1341,7 +1335,7 @@ BOOL CPlayerCaptureDialog::OnInitDialog()
{
__super::OnInitDialog();
- return TRUE; // return TRUE unless you set the focus to a control
+ return FALSE; // return FALSE so that the dialog does not steal focus
// EXCEPTION: OCX Property Pages should return FALSE
}
@@ -1406,9 +1400,9 @@ void CPlayerCaptureDialog::OnVideoInput()
HRESULT hr = m_pAMVfwCD->ShowDialog(iSel, m_hWnd);
if (VFW_E_NOT_STOPPED == hr) {
- ((CMainFrame*)AfxGetMainWnd())->SendMessage(WM_COMMAND, ID_PLAY_STOP);
+ m_pMainFrame->SendMessage(WM_COMMAND, ID_PLAY_STOP);
hr = m_pAMVfwCD->ShowDialog(iSel, m_hWnd);
- ((CMainFrame*)AfxGetMainWnd())->SendMessage(WM_COMMAND, ID_PLAY_PLAY);
+ m_pMainFrame->SendMessage(WM_COMMAND, ID_PLAY_PLAY);
}
if (VFW_E_CANNOT_CONNECT == hr) {
@@ -1590,12 +1584,7 @@ void CPlayerCaptureDialog::OnRecord()
{
UpdateData();
- CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
- if (!pFrame) {
- return;
- }
-
- if (!pFrame->m_fCapturing) {
+ if (!m_pMainFrame->m_fCapturing) {
UpdateMuxer();
CComQIPtr<IFileSinkFilter2> pFSF = m_pMux;
@@ -1623,18 +1612,18 @@ void CPlayerCaptureDialog::OnRecord()
if (m_fSepAudio && m_fAudOutput && m_pAudMux && !audfn.IsEmpty()) {
audfn += _T("wav");
- CComQIPtr<IFileSinkFilter2> pFSF = m_pAudMux;
- if (pFSF) {
+ CComQIPtr<IFileSinkFilter2> pFSFAudioMux = m_pAudMux;
+ if (pFSFAudioMux) {
m_pAudDst = m_pAudMux;
} else {
m_pAudDst = nullptr;
m_pAudDst.CoCreateInstance(CLSID_FileWriter);
- pFSF = m_pAudDst;
+ pFSFAudioMux = m_pAudDst;
}
- if (!pFSF
- || FAILED(pFSF->SetFileName(CStringW(audfn), nullptr))
- || FAILED(pFSF->SetMode(AM_FILE_OVERWRITE))) {
+ if (!pFSFAudioMux
+ || FAILED(pFSFAudioMux->SetFileName(CStringW(audfn), nullptr))
+ || FAILED(pFSFAudioMux->SetMode(AM_FILE_OVERWRITE))) {
MessageBox(ResStr(IDS_CAPTURE_ERROR_AUD_OUT_FILE), ResStr(IDS_CAPTURE_ERROR), MB_ICONERROR | MB_OK);
return;
}
@@ -1654,14 +1643,14 @@ void CPlayerCaptureDialog::OnRecord()
EnableControls(this, false);
- pFrame->StartCapture();
+ m_pMainFrame->StartCapture();
m_nRecordTimerID = SetTimer(1, 100, nullptr);
} else {
KillTimer(m_nRecordTimerID);
m_nRecordTimerID = 0;
- pFrame->StopCapture();
+ m_pMainFrame->StopCapture();
EnableControls(this, true);
m_pVidBuffer = nullptr;
@@ -1672,19 +1661,19 @@ void CPlayerCaptureDialog::OnRecord()
void CPlayerCaptureDialog::OnChangeVideoBuffers()
{
UpdateData();
- AfxGetApp()->WriteProfileInt(IDS_R_CAPTURE, _T("VidBuffers"), max(m_nVidBuffers, 0));
+ AfxGetApp()->WriteProfileInt(IDS_R_CAPTURE, _T("VidBuffers"), std::max(m_nVidBuffers, 0));
}
void CPlayerCaptureDialog::OnChangeAudioBuffers()
{
UpdateData();
- AfxGetApp()->WriteProfileInt(IDS_R_CAPTURE, _T("AudBuffers"), max(m_nAudBuffers, 0));
+ AfxGetApp()->WriteProfileInt(IDS_R_CAPTURE, _T("AudBuffers"), std::max(m_nAudBuffers, 0));
}
void CPlayerCaptureDialog::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == m_nRecordTimerID) {
- if (((CMainFrame*)AfxGetMainWnd())->m_fCapturing) {
+ if (m_pMainFrame->m_fCapturing) {
ULARGE_INTEGER FreeBytesAvailable, TotalNumberOfBytes, TotalNumberOfFreeBytes;
if (GetDiskFreeSpaceEx(m_file.Left(m_file.ReverseFind('\\') + 1), &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes)
&& FreeBytesAvailable.QuadPart < 1024i64 * 1024 * 10) {
diff --git a/src/mpc-hc/PlayerCaptureDialog.h b/src/mpc-hc/PlayerCaptureDialog.h
index e13264266..9a00a13aa 100644
--- a/src/mpc-hc/PlayerCaptureDialog.h
+++ b/src/mpc-hc/PlayerCaptureDialog.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,16 +21,14 @@
#pragma once
-#include <afxwin.h>
-#include <afxcmn.h>
-#include <dvdmedia.h>
-#include "../filters/transform/BufferFilter/BufferFilter.h"
#include "FloatEdit.h"
-#include "resource.h"
#include "ResizableLib/ResizableDialog.h"
+#include "resource.h"
+#include <atlcoll.h>
+#include <dvdmedia.h>
-//
+class CMainFrame;
template<class T>
struct CFormatElem {
@@ -353,6 +351,7 @@ class CPlayerCaptureDialog : public CResizableDialog
//DECLARE_DYNAMIC(CPlayerCaptureDialog)
private:
+ CMainFrame* m_pMainFrame;
bool m_bInitialized;
CComboBox m_vidinput;
@@ -437,7 +436,7 @@ public:
CComPtr<IBaseFilter> m_pVidEnc, m_pAudEnc, m_pMux, m_pDst, m_pAudMux, m_pAudDst;
CComPtr<IBaseFilter> m_pVidBuffer, m_pAudBuffer;
- CPlayerCaptureDialog();
+ CPlayerCaptureDialog(CMainFrame* pMainFrame);
virtual ~CPlayerCaptureDialog();
BOOL Create(CWnd* pParent = nullptr);
diff --git a/src/mpc-hc/PlayerInfoBar.cpp b/src/mpc-hc/PlayerInfoBar.cpp
index 6f039a8f4..250d7a727 100644
--- a/src/mpc-hc/PlayerInfoBar.cpp
+++ b/src/mpc-hc/PlayerInfoBar.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -31,18 +31,20 @@ IMPLEMENT_DYNAMIC(CPlayerInfoBar, CDialogBar)
CPlayerInfoBar::CPlayerInfoBar(CMainFrame* pMainFrame)
: m_pMainFrame(pMainFrame)
{
+ GetEventd().Connect(m_eventc, {
+ MpcEvent::DPI_CHANGED,
+ }, std::bind(&CPlayerInfoBar::EventCallback, this, std::placeholders::_1));
}
CPlayerInfoBar::~CPlayerInfoBar()
{
}
-void CPlayerInfoBar::SetLine(CString label, CString info)
+bool CPlayerInfoBar::SetLine(CString label, CString info)
{
info.Trim();
if (info.IsEmpty()) {
- RemoveLine(label);
- return;
+ return RemoveLine(label);
}
for (size_t idx = 0; idx < m_label.GetCount(); idx++) {
@@ -54,20 +56,22 @@ void CPlayerInfoBar::SetLine(CString label, CString info)
m_info[idx]->SetWindowText(info);
m_tooltip.UpdateTipText(info, m_info[idx]);
}
- return;
+ return false;
}
}
- CAutoPtr<CStatusLabel> l(DEBUG_NEW CStatusLabel(true, false));
+ CAutoPtr<CStatusLabel> l(DEBUG_NEW CStatusLabel(m_pMainFrame->m_dpi, true, false));
l->Create(label, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | SS_OWNERDRAW, CRect(0, 0, 0, 0), this);
m_label.Add(l);
- CAutoPtr<CStatusLabel> i(DEBUG_NEW CStatusLabel(false, true));
+ CAutoPtr<CStatusLabel> i(DEBUG_NEW CStatusLabel(m_pMainFrame->m_dpi, false, true));
i->Create(info, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | SS_OWNERDRAW | SS_NOTIFY, CRect(0, 0, 0, 0), this);
m_tooltip.AddTool(i, info);
m_info.Add(i);
Relayout();
+
+ return true;
}
void CPlayerInfoBar::GetLine(CString label, CString& info)
@@ -85,7 +89,7 @@ void CPlayerInfoBar::GetLine(CString label, CString& info)
}
}
-void CPlayerInfoBar::RemoveLine(CString label)
+bool CPlayerInfoBar::RemoveLine(CString label)
{
for (size_t i = 0; i < m_label.GetCount(); i++) {
CString tmp;
@@ -95,9 +99,10 @@ void CPlayerInfoBar::RemoveLine(CString label)
m_label.RemoveAt(i);
m_info.RemoveAt(i);
Relayout();
- break;
+ return true;
}
}
+ return false;
}
void CPlayerInfoBar::RemoveAllLines()
@@ -143,6 +148,23 @@ CSize CPlayerInfoBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
return r.Size();
}
+void CPlayerInfoBar::EventCallback(MpcEvent ev)
+{
+ switch (ev) {
+ case MpcEvent::DPI_CHANGED:
+ for (size_t i = 0; i < m_label.GetCount(); i++) {
+ m_label[i]->ScaleFont(m_pMainFrame->m_dpi);
+ }
+ for (size_t i = 0; i < m_info.GetCount(); i++) {
+ m_info[i]->ScaleFont(m_pMainFrame->m_dpi);
+ }
+ break;
+
+ default:
+ ASSERT(FALSE);
+ }
+}
+
void CPlayerInfoBar::Relayout()
{
CRect r;
@@ -156,7 +178,7 @@ void CPlayerInfoBar::Relayout()
CDC* pDC = m_label[i]->GetDC();
CString str;
m_label[i]->GetWindowText(str);
- w = max<int>(w, pDC->GetTextExtent(str).cx);
+ w = std::max<int>(w, pDC->GetTextExtent(str).cx);
m_label[i]->ReleaseDC(pDC);
}
diff --git a/src/mpc-hc/PlayerInfoBar.h b/src/mpc-hc/PlayerInfoBar.h
index 72c542fe7..781f5071c 100644
--- a/src/mpc-hc/PlayerInfoBar.h
+++ b/src/mpc-hc/PlayerInfoBar.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -40,6 +40,9 @@ private:
CToolTipCtrl m_tooltip;
+ EventClient m_eventc;
+ void EventCallback(MpcEvent ev);
+
void Relayout();
public:
@@ -48,9 +51,9 @@ public:
BOOL Create(CWnd* pParentWnd);
- void SetLine(CString label, CString info);
+ bool SetLine(CString label, CString info);
void GetLine(CString label, CString& info);
- void RemoveLine(CString label);
+ bool RemoveLine(CString label);
void RemoveAllLines();
protected:
diff --git a/src/mpc-hc/PlayerListCtrl.cpp b/src/mpc-hc/PlayerListCtrl.cpp
index 44dac0a74..e008612f4 100644
--- a/src/mpc-hc/PlayerListCtrl.cpp
+++ b/src/mpc-hc/PlayerListCtrl.cpp
@@ -28,9 +28,9 @@
// CInPlaceHotKey
CInPlaceWinHotkey::CInPlaceWinHotkey(int iItem, int iSubItem, CString sInitText)
- : m_sInitText(sInitText)
- , m_iItem(iItem)
+ : m_iItem(iItem)
, m_iSubItem(iSubItem)
+ , m_sInitText(sInitText)
, m_bESC(FALSE)
{
}
@@ -124,9 +124,9 @@ int CInPlaceWinHotkey::OnCreate(LPCREATESTRUCT lpCreateStruct)
// CInPlaceEdit
CInPlaceEdit::CInPlaceEdit(int iItem, int iSubItem, CString sInitText)
- : m_sInitText(sInitText)
- , m_iItem(iItem)
+ : m_iItem(iItem)
, m_iSubItem(iSubItem)
+ , m_sInitText(sInitText)
, m_bESC(FALSE)
{
}
@@ -485,10 +485,10 @@ void CInPlaceListBox::OnNcDestroy()
IMPLEMENT_DYNAMIC(CPlayerListCtrl, CListCtrl)
CPlayerListCtrl::CPlayerListCtrl(int tStartEditingDelay)
- : m_tStartEditingDelay(tStartEditingDelay)
- , m_nTimerID(0)
- , m_nItemClicked(-1)
+ : m_nItemClicked(-1)
, m_nSubItemClicked(-1)
+ , m_tStartEditingDelay(tStartEditingDelay)
+ , m_nTimerID(0)
, m_fInPlaceDirty(false)
{
}
diff --git a/src/mpc-hc/PlayerListCtrl.h b/src/mpc-hc/PlayerListCtrl.h
index b2b9747d9..bfe5d05b9 100644
--- a/src/mpc-hc/PlayerListCtrl.h
+++ b/src/mpc-hc/PlayerListCtrl.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -171,6 +171,7 @@ public:
protected:
virtual void PreSubclassWindow();
virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
+ virtual ULONG GetGestureStatus(CPoint) override { return 0; };
DECLARE_MESSAGE_MAP()
diff --git a/src/mpc-hc/PlayerNavigationBar.cpp b/src/mpc-hc/PlayerNavigationBar.cpp
index 2cab46cb5..04c21e4ed 100644
--- a/src/mpc-hc/PlayerNavigationBar.cpp
+++ b/src/mpc-hc/PlayerNavigationBar.cpp
@@ -19,11 +19,9 @@
*/
#include "stdafx.h"
-#include "mplayerc.h"
-#include "MainFrm.h"
#include "PlayerNavigationBar.h"
-#include <afxwin.h>
-
+#include "DSUtil.h"
+#include "mplayerc.h"
// CPlayerNavigationBar
@@ -34,10 +32,6 @@ CPlayerNavigationBar::CPlayerNavigationBar(CMainFrame* pMainFrame)
{
}
-CPlayerNavigationBar::~CPlayerNavigationBar()
-{
-}
-
BOOL CPlayerNavigationBar::Create(CWnd* pParentWnd, UINT defDockBarID)
{
if (!CPlayerBar::Create(ResStr(IDS_NAVIGATION_BAR), pParentWnd, ID_VIEW_NAVIGATION, defDockBarID, _T("Navigation Bar"))) {
diff --git a/src/mpc-hc/PlayerNavigationBar.h b/src/mpc-hc/PlayerNavigationBar.h
index 9b56569fd..92f9c616a 100644
--- a/src/mpc-hc/PlayerNavigationBar.h
+++ b/src/mpc-hc/PlayerNavigationBar.h
@@ -37,8 +37,9 @@ private:
public:
CPlayerNavigationDialog m_navdlg;
- CPlayerNavigationBar(CMainFrame* pMainFrame);
- virtual ~CPlayerNavigationBar();
+ CPlayerNavigationBar() = delete;
+ explicit CPlayerNavigationBar(CMainFrame* pMainFrame);
+ virtual ~CPlayerNavigationBar() = default;
BOOL Create(CWnd* pParentWnd, UINT defDockBarID);
virtual void ReloadTranslatableResources();
diff --git a/src/mpc-hc/PlayerNavigationDialog.cpp b/src/mpc-hc/PlayerNavigationDialog.cpp
index ac50d5acd..70660d588 100644
--- a/src/mpc-hc/PlayerNavigationDialog.cpp
+++ b/src/mpc-hc/PlayerNavigationDialog.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2010-2014 see Authors.txt
+ * (C) 2010-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -19,28 +19,19 @@
*/
#include "stdafx.h"
-#include "mplayerc.h"
-#include "MainFrm.h"
#include "PlayerNavigationDialog.h"
#include "DSUtil.h"
-#include "moreuuids.h"
-
+#include "mplayerc.h"
+#include "MainFrm.h"
// CPlayerNavigationDialog dialog
-#pragma warning(push)
-#pragma warning(disable: 4351) // new behavior: elements of array 'array' will be default initialized
// IMPLEMENT_DYNAMIC(CPlayerNavigationDialog, CResizableDialog)
CPlayerNavigationDialog::CPlayerNavigationDialog(CMainFrame* pMainFrame)
: CResizableDialog(CPlayerNavigationDialog::IDD, nullptr)
, m_pMainFrame(pMainFrame)
+ , m_bChannelInfoAvailable(false)
, m_bTVStations(true)
- , p_nItems()
-{
-}
-#pragma warning(pop)
-
-CPlayerNavigationDialog::~CPlayerNavigationDialog()
{
}
@@ -61,10 +52,9 @@ BOOL CPlayerNavigationDialog::Create(CWnd* pParent)
void CPlayerNavigationDialog::DoDataExchange(CDataExchange* pDX)
{
__super::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_LISTCHANNELS, m_ChannelList);
- DDX_Control(pDX, IDC_NAVIGATION_INFO, m_ButtonInfo);
- DDX_Control(pDX, IDC_NAVIGATION_SCAN, m_ButtonScan);
- DDX_Control(pDX, IDC_NAVIGATION_FILTERSTATIONS, m_ButtonFilterStations);
+ DDX_Control(pDX, IDC_LISTCHANNELS, m_channelList);
+ DDX_Control(pDX, IDC_NAVIGATION_INFO, m_buttonInfo);
+ DDX_Control(pDX, IDC_NAVIGATION_FILTERSTATIONS, m_buttonFilterStations);
}
BOOL CPlayerNavigationDialog::PreTranslateMessage(MSG* pMsg)
@@ -72,7 +62,7 @@ BOOL CPlayerNavigationDialog::PreTranslateMessage(MSG* pMsg)
if (pMsg->message == WM_KEYDOWN) {
if (pMsg->wParam == VK_RETURN) {
CWnd* pFocused = GetFocus();
- if (pFocused && pFocused->m_hWnd == m_ChannelList.m_hWnd) {
+ if (pFocused && pFocused->m_hWnd == m_channelList.m_hWnd) {
return TRUE;
}
}
@@ -82,8 +72,10 @@ BOOL CPlayerNavigationDialog::PreTranslateMessage(MSG* pMsg)
BEGIN_MESSAGE_MAP(CPlayerNavigationDialog, CResizableDialog)
ON_WM_DESTROY()
+ ON_WM_CONTEXTMENU()
ON_LBN_SELCHANGE(IDC_LISTCHANNELS, OnChangeChannel)
- ON_BN_CLICKED(IDC_NAVIGATION_INFO, OnButtonInfo)
+ ON_BN_CLICKED(IDC_NAVIGATION_INFO, OnShowChannelInfo)
+ ON_UPDATE_COMMAND_UI(IDC_NAVIGATION_INFO, OnUpdateShowChannelInfoButton)
ON_BN_CLICKED(IDC_NAVIGATION_SCAN, OnTunerScan)
ON_BN_CLICKED(IDC_NAVIGATION_FILTERSTATIONS, OnTvRadioStations)
END_MESSAGE_MAP()
@@ -96,47 +88,48 @@ BOOL CPlayerNavigationDialog::OnInitDialog()
__super::OnInitDialog();
if (m_bTVStations) {
- m_ButtonFilterStations.SetWindowText(ResStr(IDS_DVB_TVNAV_SEERADIO));
+ m_buttonFilterStations.SetWindowText(ResStr(IDS_DVB_TVNAV_SEERADIO));
} else {
- m_ButtonFilterStations.SetWindowText(ResStr(IDS_DVB_TVNAV_SEETV));
+ m_buttonFilterStations.SetWindowText(ResStr(IDS_DVB_TVNAV_SEETV));
}
- return TRUE; // return TRUE unless you set the focus to a control
+ ATOM atom = ::GlobalAddAtom(MICROSOFT_TABLETPENSERVICE_PROPERTY);
+ ::SetProp(m_channelList.GetSafeHwnd(), MICROSOFT_TABLETPENSERVICE_PROPERTY, nullptr);
+ ::GlobalDeleteAtom(atom);
+
+ return FALSE; // return FALSE so that the dialog does not steal focus
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPlayerNavigationDialog::OnDestroy()
{
- m_ChannelList.ResetContent();
+ m_channelList.ResetContent();
__super::OnDestroy();
}
void CPlayerNavigationDialog::OnChangeChannel()
{
- int nItem = p_nItems[m_ChannelList.GetCurSel()] + ID_NAVIGATE_JUMPTO_SUBITEM_START;
- m_pMainFrame->OnNavigateJumpTo(nItem);
+ int nItem = m_channelList.GetCurSel();
+ if (nItem != LB_ERR) {
+ UINT nChannelID = (UINT)m_channelList.GetItemData(nItem) + ID_NAVIGATE_JUMPTO_SUBITEM_START;
+ m_pMainFrame->OnNavigateJumpTo(nChannelID);
+ }
}
void CPlayerNavigationDialog::UpdateElementList()
{
- const CAppSettings& s = AfxGetAppSettings();
-
if (m_pMainFrame->GetPlaybackMode() == PM_DIGITAL_CAPTURE) {
- m_ChannelList.ResetContent();
-
- int nCurrentChannel = s.nDVBLastChannel;
- POSITION pos = s.m_DVBChannels.GetHeadPosition();
-
- while (pos) {
- const CDVBChannel& channel = s.m_DVBChannels.GetNext(pos);
- if (((m_bTVStations && channel.GetVideoPID() != 0) ||
- (!m_bTVStations && channel.GetVideoPID() == 0)) && channel.GetAudioCount() > 0) {
- int nItem = m_ChannelList.AddString(channel.GetName());
- if (nItem < MAX_CHANNELS_ALLOWED) {
- p_nItems [nItem] = channel.GetPrefNumber();
- }
- if (nCurrentChannel == channel.GetPrefNumber()) {
- m_ChannelList.SetCurSel(nItem);
+ const auto& s = AfxGetAppSettings();
+ m_channelList.ResetContent();
+
+ for (const auto& channel : s.m_DVBChannels) {
+ if (m_bTVStations && channel.GetVideoPID() || !m_bTVStations && !channel.GetVideoPID()) {
+ int nItem = m_channelList.AddString(channel.GetName());
+ if (nItem != LB_ERR) {
+ m_channelList.SetItemData(nItem, (DWORD_PTR)channel.GetPrefNumber());
+ if (s.nDVBLastChannel == channel.GetPrefNumber()) {
+ m_channelList.SetCurSel(nItem);
+ }
}
}
}
@@ -145,23 +138,33 @@ void CPlayerNavigationDialog::UpdateElementList()
void CPlayerNavigationDialog::UpdatePos(int nID)
{
- for (int i = 0; i < MAX_CHANNELS_ALLOWED; i++) {
- if (p_nItems [i] == nID) {
- m_ChannelList.SetCurSel(i);
+ for (int i = 0, count = m_channelList.GetCount(); i < count; i++) {
+ if ((int)m_channelList.GetItemData(i) == nID) {
+ m_channelList.SetCurSel(i);
break;
}
}
}
+void CPlayerNavigationDialog::SetChannelInfoAvailable(bool bAvailable)
+{
+ m_bChannelInfoAvailable = bAvailable;
+}
+
void CPlayerNavigationDialog::OnTunerScan()
{
m_pMainFrame->OnTunerScan();
UpdateElementList();
}
-void CPlayerNavigationDialog::OnButtonInfo()
+void CPlayerNavigationDialog::OnShowChannelInfo()
+{
+ m_pMainFrame->UpdateCurrentChannelInfo(true, true);
+}
+
+void CPlayerNavigationDialog::OnUpdateShowChannelInfoButton(CCmdUI* pCmdUI)
{
- m_pMainFrame->ShowCurrentChannelInfo(true, true);
+ pCmdUI->Enable(m_bChannelInfoAvailable);
}
void CPlayerNavigationDialog::OnTvRadioStations()
@@ -170,8 +173,167 @@ void CPlayerNavigationDialog::OnTvRadioStations()
UpdateElementList();
if (m_bTVStations) {
- m_ButtonFilterStations.SetWindowText(ResStr(IDS_DVB_TVNAV_SEERADIO));
+ m_buttonFilterStations.SetWindowText(ResStr(IDS_DVB_TVNAV_SEERADIO));
+ } else {
+ m_buttonFilterStations.SetWindowText(ResStr(IDS_DVB_TVNAV_SEETV));
+ }
+}
+
+void CPlayerNavigationDialog::OnContextMenu(CWnd* pWnd, CPoint point)
+{
+ auto& s = AfxGetAppSettings();
+ BOOL bOutside;
+ int nItem;
+ const int curSel = m_channelList.GetCurSel();
+ const int channelCount = m_channelList.GetCount();
+
+ if (point.x == -1 && point.y == -1) {
+ CRect r;
+ if (m_channelList.GetItemRect(curSel, r) != LB_ERR) {
+ point.SetPoint(r.left, r.bottom);
+ } else {
+ point.SetPoint(0, 0);
+ }
+ m_channelList.ClientToScreen(&point);
+ nItem = curSel;
+ bOutside = nItem == LB_ERR;
} else {
- m_ButtonFilterStations.SetWindowText(ResStr(IDS_DVB_TVNAV_SEETV));
+ CPoint clientPoint = point;
+ m_channelList.ScreenToClient(&clientPoint);
+ nItem = (int)m_channelList.ItemFromPoint(clientPoint, bOutside);
+ }
+
+ CMenu m;
+ m.CreatePopupMenu();
+
+ enum {
+ M_WATCH = 1,
+ M_MOVE_UP,
+ M_MOVE_DOWN,
+ M_SORT,
+ M_REMOVE,
+ M_REMOVE_ALL
+ };
+
+ auto findChannelByItemNumber = [this](std::vector<CDVBChannel>& c, int nItem) {
+ int nPrefNumber = (int)m_channelList.GetItemData(nItem);
+ return find_if(c.begin(), c.end(), [&](CDVBChannel const & channel) {
+ return channel.GetPrefNumber() == nPrefNumber;
+ });
+ };
+
+ auto swapChannels = [&](int n1, int n2) {
+ auto it1 = findChannelByItemNumber(s.m_DVBChannels, n1);
+ auto it2 = findChannelByItemNumber(s.m_DVBChannels, n2);
+ int nPrefNumber1 = it1->GetPrefNumber(), nPrefNumber2 = it2->GetPrefNumber();
+ // Make sure the current channel number is updated if swapping the channel is going to change it
+ if (nPrefNumber1 == s.nDVBLastChannel) {
+ s.nDVBLastChannel = nPrefNumber2;
+ } else if (nPrefNumber2 == s.nDVBLastChannel) {
+ s.nDVBLastChannel = nPrefNumber1;
+ }
+ // The preferred number shouldn't be swapped so we swap it twice for no-op
+ it1->SetPrefNumber(nPrefNumber2);
+ it2->SetPrefNumber(nPrefNumber1);
+ // Actually swap the channels
+ std::iter_swap(it1, it2);
+ };
+
+ if (!bOutside) {
+ m_channelList.SetCurSel(nItem);
+
+ m.AppendMenu(MF_STRING | (curSel != nItem ? MF_ENABLED : (MF_DISABLED | MF_GRAYED)), M_WATCH, ResStr(IDS_NAVIGATION_WATCH));
+ m.AppendMenu(MF_SEPARATOR);
+ m.AppendMenu(MF_STRING | (nItem == 0 ? (MF_DISABLED | MF_GRAYED) : MF_ENABLED), M_MOVE_UP, ResStr(IDS_NAVIGATION_MOVE_UP));
+ m.AppendMenu(MF_STRING | (nItem == channelCount - 1 ? (MF_DISABLED | MF_GRAYED) : MF_ENABLED), M_MOVE_DOWN, ResStr(IDS_NAVIGATION_MOVE_DOWN));
+ }
+ m.AppendMenu(MF_STRING | (channelCount > 1 ? MF_ENABLED : (MF_DISABLED | MF_GRAYED)), M_SORT, ResStr(IDS_NAVIGATION_SORT));
+ m.AppendMenu(MF_SEPARATOR);
+ if (!bOutside) {
+ m.AppendMenu(MF_STRING | MF_ENABLED, M_REMOVE, ResStr(IDS_PLAYLIST_REMOVE));
+ }
+ m.AppendMenu(MF_STRING | (channelCount > 0 ? MF_ENABLED : (MF_DISABLED | MF_GRAYED)), M_REMOVE_ALL, ResStr(IDS_NAVIGATION_REMOVE_ALL));
+
+ int nID = (int)m.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RETURNCMD, point.x, point.y, this);
+
+ try {
+ switch (nID) {
+ case M_WATCH:
+ OnChangeChannel();
+ break;
+ case M_MOVE_UP:
+ swapChannels(nItem, nItem - 1);
+ UpdateElementList();
+ break;
+ case M_MOVE_DOWN:
+ swapChannels(nItem, nItem + 1);
+ UpdateElementList();
+ break;
+ case M_SORT: {
+ sort(s.m_DVBChannels.begin(), s.m_DVBChannels.end());
+ // Update the preferred numbers
+ int nPrefNumber = 0;
+ int nDVBLastChannel = s.nDVBLastChannel;
+ for (auto& channel : s.m_DVBChannels) {
+ // Make sure the current channel number will be updated
+ if (channel.GetPrefNumber() == s.nDVBLastChannel) {
+ nDVBLastChannel = nPrefNumber;
+ }
+ channel.SetPrefNumber(nPrefNumber++);
+ }
+ s.nDVBLastChannel = nDVBLastChannel;
+ UpdateElementList();
+ break;
+ }
+ case M_REMOVE: {
+ const auto it = findChannelByItemNumber(s.m_DVBChannels, nItem);
+ const int nRemovedPrefNumber = it->GetPrefNumber();
+ s.m_DVBChannels.erase(it);
+ // Update channels pref number
+ for (CDVBChannel& channel : s.m_DVBChannels) {
+ const int nPrefNumber = channel.GetPrefNumber();
+ ASSERT(nPrefNumber != nRemovedPrefNumber);
+ if (nPrefNumber > nRemovedPrefNumber) {
+ channel.SetPrefNumber(nPrefNumber - 1);
+ }
+ }
+ UpdateElementList();
+
+ int newCurSel = curSel;
+ if ((newCurSel >= nItem) && (channelCount - 1 == nItem || newCurSel > nItem)) {
+ --newCurSel;
+ }
+
+ const auto newChannelIt = findChannelByItemNumber(s.m_DVBChannels, newCurSel);
+ if (newChannelIt != s.m_DVBChannels.end()) {
+ // Update pref number of the current channel
+ s.nDVBLastChannel = newChannelIt->GetPrefNumber();
+ m_channelList.SetCurSel(newCurSel);
+ if (curSel == nItem) {
+ // Set closest channel on list after removing current channel
+ m_pMainFrame->SetChannel(s.nDVBLastChannel);
+ }
+ } else { // The last channel was removed
+ s.nDVBLastChannel = INT_ERROR;
+ }
+ }
+ break;
+ case M_REMOVE_ALL:
+ if (IDYES == AfxMessageBox(IDS_REMOVE_CHANNELS_QUESTION, MB_ICONQUESTION | MB_YESNO, 0)) {
+ s.m_DVBChannels.clear();
+ s.nDVBLastChannel = INT_ERROR;
+ UpdateElementList();
+ }
+ break;
+ default:
+ m_channelList.SetCurSel(curSel);
+ break;
+ }
+ } catch (std::exception& e) {
+ UNREFERENCED_PARAMETER(e);
+ TRACE(_T("Navigation Dialog requested operation failed: \"%s\""), e.what());
+ UpdateElementList();
+ ASSERT(FALSE);
}
}
+
diff --git a/src/mpc-hc/PlayerNavigationDialog.h b/src/mpc-hc/PlayerNavigationDialog.h
index 2c5501e2b..9e91f8d18 100644
--- a/src/mpc-hc/PlayerNavigationDialog.h
+++ b/src/mpc-hc/PlayerNavigationDialog.h
@@ -1,5 +1,5 @@
/*
- * (C) 2010-2013 see Authors.txt
+ * (C) 2010-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,39 +20,46 @@
#pragma once
-#include <afxwin.h>
-#include <afxcmn.h>
-#include "../filters/transform/BufferFilter/BufferFilter.h"
-#include "FloatEdit.h"
-#include "DVBChannel.h"
+#include <atlcoll.h>
#include "resource.h"
#include "ResizableLib/ResizableDialog.h"
-#define MAX_CHANNELS_ALLOWED 200
-
class CMainFrame;
+class CNavListBox : public CListBox
+{
+public:
+ virtual ~CNavListBox() = default;
+
+protected:
+ virtual ULONG GetGestureStatus(CPoint) override { return 0; }
+};
+
class CPlayerNavigationDialog : public CResizableDialog
{
+private:
+ CNavListBox m_channelList;
+ CButton m_buttonInfo;
+ CButton m_buttonFilterStations;
+
+ CMainFrame* m_pMainFrame;
+ bool m_bChannelInfoAvailable;
+ bool m_bTVStations;
+
public:
+ CPlayerNavigationDialog() = delete;
CPlayerNavigationDialog(CMainFrame* pMainFrame);
- virtual ~CPlayerNavigationDialog();
+ virtual ~CPlayerNavigationDialog() = default;
BOOL Create(CWnd* pParent = nullptr);
- void UpdateElementList();
- void UpdatePos(int nID);
- int p_nItems[MAX_CHANNELS_ALLOWED];
- bool m_bTVStations;
// Dialog Data
enum { IDD = IDD_NAVIGATION_DLG };
- CMainFrame* m_pMainFrame;
+ void UpdateElementList();
+ void UpdatePos(int nID);
- CListBox m_ChannelList;
- CButton m_ButtonInfo;
- CButton m_ButtonScan;
- CButton m_ButtonFilterStations;
+ void SetChannelInfoAvailable(bool bAvailable);
protected:
virtual void DoDataExchange(CDataExchange* pDX);
@@ -64,6 +71,8 @@ protected:
afx_msg void OnDestroy();
afx_msg void OnChangeChannel();
afx_msg void OnTunerScan();
- afx_msg void OnButtonInfo();
+ afx_msg void OnShowChannelInfo();
+ afx_msg void OnUpdateShowChannelInfoButton(CCmdUI* pCmdUI);
afx_msg void OnTvRadioStations();
+ afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
};
diff --git a/src/mpc-hc/PlayerPlaylistBar.cpp b/src/mpc-hc/PlayerPlaylistBar.cpp
index e630ae550..7b876f4db 100644
--- a/src/mpc-hc/PlayerPlaylistBar.cpp
+++ b/src/mpc-hc/PlayerPlaylistBar.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,9 +20,8 @@
*/
#include "stdafx.h"
-#include <math.h>
+#include <cmath>
#include <afxinet.h>
-#include <atlutil.h>
#include "mplayerc.h"
#include "MainFrm.h"
#include "DSUtil.h"
@@ -37,13 +36,17 @@ IMPLEMENT_DYNAMIC(CPlayerPlaylistBar, CPlayerBar)
CPlayerPlaylistBar::CPlayerPlaylistBar(CMainFrame* pMainFrame)
: m_pMainFrame(pMainFrame)
, m_list(0)
+ , m_nTimeColWidth(0)
, m_pDragImage(nullptr)
+ , m_bDragging(FALSE)
, m_nDragIndex(0)
, m_nDropIndex(0)
- , m_nTimeColWidth(0)
- , m_bDragging(FALSE)
, m_bHiddenDueToFullscreen(false)
+ , m_pl(AfxGetAppSettings().bShufflePlaylistItems)
{
+ GetEventd().Connect(m_eventc, {
+ MpcEvent::DPI_CHANGED,
+ }, std::bind(&CPlayerPlaylistBar::EventCallback, this, std::placeholders::_1));
}
CPlayerPlaylistBar::~CPlayerPlaylistBar()
@@ -68,18 +71,17 @@ BOOL CPlayerPlaylistBar::Create(CWnd* pParentWnd, UINT defDockBarID)
m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
// The column titles don't have to be translated since they aren't displayed anyway
- m_list.InsertColumn(COL_NAME, _T("Name"), LVCFMT_LEFT, 380);
+ m_list.InsertColumn(COL_NAME, _T("Name"), LVCFMT_LEFT);
- CDC* pDC = m_list.GetDC();
- CFont* old = pDC->SelectObject(GetFont());
- m_nTimeColWidth = pDC->GetTextExtent(_T("000:00:00")).cx + 5;
- pDC->SelectObject(old);
- m_list.ReleaseDC(pDC);
- m_list.InsertColumn(COL_TIME, _T("Time"), LVCFMT_RIGHT, m_nTimeColWidth);
+ m_list.InsertColumn(COL_TIME, _T("Time"), LVCFMT_RIGHT);
+
+ ScaleFont();
m_fakeImageList.Create(1, 16, ILC_COLOR4, 10, 10);
m_list.SetImageList(&m_fakeImageList, LVSIL_SMALL);
+ m_dropTarget.Register(this);
+
return TRUE;
}
@@ -201,7 +203,7 @@ static bool SearchFiles(CString mask, CAtlList<CString>& sl)
}
{
- CString dir = mask.Left(max(mask.ReverseFind('\\'), mask.ReverseFind('/')) + 1);
+ CString dir = mask.Left(std::max(mask.ReverseFind('\\'), mask.ReverseFind('/')) + 1);
WIN32_FIND_DATA fd;
HANDLE h = FindFirstFile(mask, &fd);
@@ -255,22 +257,16 @@ void CPlayerPlaylistBar::ResolveLinkFiles(CAtlList<CString>& fns)
{
// resolve .lnk files
- CComPtr<IShellLink> pSL;
- pSL.CoCreateInstance(CLSID_ShellLink);
- CComQIPtr<IPersistFile> pPF = pSL;
-
POSITION pos = fns.GetHeadPosition();
- while (pSL && pPF && pos) {
+ while (pos) {
CString& fn = fns.GetNext(pos);
- TCHAR buff[MAX_PATH];
- if (CPath(fn).GetExtension().MakeLower() != _T(".lnk")
- || FAILED(pPF->Load(CStringW(fn), STGM_READ))
- || FAILED(pSL->Resolve(nullptr, SLR_ANY_MATCH | SLR_NO_UI))
- || FAILED(pSL->GetPath(buff, _countof(buff), nullptr, 0))) {
- continue;
- }
- fn = buff;
+ if (PathUtils::IsLinkFile(fn)) {
+ CString fnResolved = PathUtils::ResolveLinkFile(fn);
+ if (!fnResolved.IsEmpty()) {
+ fn = fnResolved;
+ }
+ }
}
}
@@ -321,11 +317,6 @@ void CPlayerPlaylistBar::ParsePlayList(CAtlList<CString>& fns, CAtlList<CString>
AddItem(fns, subs);
}
-static int s_int_comp(const void* i1, const void* i2)
-{
- return (int)i1 - (int)i2;
-}
-
static CString CombinePath(CPath p, CString fn)
{
if (fn.Find(':') >= 0 || fn.Find(_T("\\")) == 0) {
@@ -358,7 +349,7 @@ bool CPlayerPlaylistBar::ParseMPCPlayList(CString fn)
{
CString str;
CAtlMap<int, CPlaylistItem> pli;
- CAtlArray<int> idx;
+ std::vector<int> idx;
CWebTextFile f(CTextFile::UTF8);
if (!f.Open(fn) || !f.ReadString(str) || str != _T("MPCPLAYLIST")) {
@@ -385,7 +376,7 @@ bool CPlayerPlaylistBar::ParseMPCPlayList(CString fn)
if (key == _T("type")) {
pli[i].m_type = (CPlaylistItem::type_t)_ttol(value);
- idx.Add(i);
+ idx.push_back(i);
} else if (key == _T("label")) {
pli[i].m_label = value;
} else if (key == _T("filename")) {
@@ -416,9 +407,9 @@ bool CPlayerPlaylistBar::ParseMPCPlayList(CString fn)
}
}
- qsort(idx.GetData(), idx.GetCount(), sizeof(int), s_int_comp);
- for (size_t i = 0; i < idx.GetCount(); i++) {
- m_pl.AddTail(pli[idx[i]]);
+ std::sort(idx.begin(), idx.end());
+ for (int i : idx) {
+ m_pl.AddTail(pli[i]);
}
return !pli.IsEmpty();
@@ -536,7 +527,9 @@ void CPlayerPlaylistBar::Append(CAtlList<CString>& fns, bool fMulti, CAtlList<CS
if (posFirstAdded) {
EnsureVisible(m_pl.GetTailPosition()); // This ensures that we maximize the number of newly added items shown
EnsureVisible(posFirstAdded);
- m_list.SetItemState(iFirstAdded, LVIS_SELECTED, LVIS_SELECTED);
+ if (iFirstAdded) { // Select the first added item only if some were already present
+ m_list.SetItemState(iFirstAdded, LVIS_SELECTED, LVIS_SELECTED);
+ }
}
}
@@ -645,7 +638,7 @@ void CPlayerPlaylistBar::SetSelIdx(int i)
bool CPlayerPlaylistBar::IsAtEnd()
{
- POSITION pos = m_pl.GetPos(), tail = m_pl.GetTailPosition();
+ POSITION pos = m_pl.GetPos(), tail = m_pl.GetShuffleAwareTailPosition();
bool isAtEnd = (pos && pos == tail);
if (!isAtEnd && pos) {
@@ -716,11 +709,13 @@ void CPlayerPlaylistBar::SetFirstSelected()
if (pos) {
pos = FindPos(m_list.GetNextSelectedItem(pos));
} else {
- pos = m_pl.GetTailPosition();
+ pos = m_pl.GetShuffleAwareTailPosition();
POSITION org = pos;
while (m_pl.GetNextWrap(pos).m_fInvalid && pos != org) {
;
}
+ // Select the first item to be played when no item was previously selected
+ m_list.SetItemState(FindItem(pos), LVIS_SELECTED, LVIS_SELECTED);
}
UpdateList();
m_pl.SetPos(pos);
@@ -770,6 +765,13 @@ void CPlayerPlaylistBar::SetCurTime(REFERENCE_TIME rt)
}
}
+void CPlayerPlaylistBar::Randomize()
+{
+ m_pl.Randomize();
+ SetupList();
+ SavePlaylist();
+}
+
OpenMediaData* CPlayerPlaylistBar::GetCurOMD(REFERENCE_TIME rtStart)
{
CPlaylistItem* pli = GetCur();
@@ -832,18 +834,16 @@ bool CPlayerPlaylistBar::SelectFileInPlaylist(LPCTSTR filename)
bool CPlayerPlaylistBar::DeleteFileInPlaylist(POSITION pos, bool recycle)
{
- CMainFrame* pMainFrm = (CMainFrame*)AfxGetMainWnd();
-
// release the file handle by changing to the next item or stopping playback
if (pos == m_pl.GetPos()) {
if (m_pl.GetCount() > 1) {
- pMainFrm->OnNavigateSkipFile(ID_NAVIGATE_SKIPFORWARDFILE);
+ m_pMainFrame->OnNavigateSkipFile(ID_NAVIGATE_SKIPFORWARDFILE);
} else {
- pMainFrm->SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
+ m_pMainFrame->SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
}
}
- if (SUCCEEDED(FileDelete(m_pl.GetAt(pos).m_fns.GetHead(), pMainFrm->m_hWnd, recycle))) {
+ if (SUCCEEDED(FileDelete(m_pl.GetAt(pos).m_fns.GetHead(), m_pMainFrame->m_hWnd, recycle))) {
m_list.DeleteItem(FindItem(pos));
m_pl.RemoveAt(pos);
SavePlaylist();
@@ -882,7 +882,7 @@ void CPlayerPlaylistBar::SavePlaylist()
if (AfxGetAppSettings().bRememberPlaylistItems) {
// Only create this folder when needed
- if (!::PathFileExists(base)) {
+ if (!PathUtils::Exists(base)) {
::CreateDirectory(base, nullptr);
}
@@ -894,13 +894,14 @@ void CPlayerPlaylistBar::SavePlaylist()
}
BEGIN_MESSAGE_MAP(CPlayerPlaylistBar, CPlayerBar)
+ ON_WM_DESTROY()
ON_WM_SIZE()
ON_NOTIFY(LVN_KEYDOWN, IDC_PLAYLIST, OnLvnKeyDown)
ON_NOTIFY(NM_DBLCLK, IDC_PLAYLIST, OnNMDblclkList)
//ON_NOTIFY(NM_CUSTOMDRAW, IDC_PLAYLIST, OnCustomdrawList)
+ ON_WM_MEASUREITEM()
ON_WM_DRAWITEM()
ON_COMMAND_EX(ID_PLAY_PLAY, OnPlayPlay)
- ON_WM_DROPFILES()
ON_NOTIFY(LVN_BEGINDRAG, IDC_PLAYLIST, OnBeginDrag)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
@@ -914,6 +915,38 @@ BEGIN_MESSAGE_MAP(CPlayerPlaylistBar, CPlayerBar)
END_MESSAGE_MAP()
+void CPlayerPlaylistBar::ScaleFont()
+{
+ LOGFONT lf;
+ GetMessageFont(&lf);
+ lf.lfHeight = m_pMainFrame->m_dpi.ScaleSystemToOverrideY(lf.lfHeight);
+
+ m_font.DeleteObject();
+ if (m_font.CreateFontIndirect(&lf)) {
+ m_list.SetFont(&m_font);
+ }
+
+ CDC* pDC = m_list.GetDC();
+ CFont* old = pDC->SelectObject(m_list.GetFont());
+ m_nTimeColWidth = pDC->GetTextExtent(_T("000:00:00")).cx + m_pMainFrame->m_dpi.ScaleX(5);
+ pDC->SelectObject(old);
+ m_list.ReleaseDC(pDC);
+ m_list.SetColumnWidth(COL_TIME, m_nTimeColWidth);
+}
+
+void CPlayerPlaylistBar::EventCallback(MpcEvent ev)
+{
+ switch (ev) {
+ case MpcEvent::DPI_CHANGED:
+ ScaleFont();
+ ResizeListColumn();
+ break;
+
+ default:
+ ASSERT(FALSE);
+ }
+}
+
// CPlayerPlaylistBar message handlers
void CPlayerPlaylistBar::ResizeListColumn()
@@ -939,6 +972,12 @@ void CPlayerPlaylistBar::ResizeListColumn()
}
}
+void CPlayerPlaylistBar::OnDestroy()
+{
+ m_dropTarget.Revoke();
+ __super::OnDestroy();
+}
+
void CPlayerPlaylistBar::OnSize(UINT nType, int cx, int cy)
{
__super::OnSize(nType, cx, cy);
@@ -963,14 +1002,14 @@ void CPlayerPlaylistBar::OnLvnKeyDown(NMHDR* pNMHDR, LRESULT* pResult)
while (pos) {
int i = items.GetNext(pos);
if (m_pl.RemoveAt(FindPos(i))) {
- AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
+ m_pMainFrame->SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
}
m_list.DeleteItem(i);
}
m_list.SetItemState(-1, 0, LVIS_SELECTED);
m_list.SetItemState(
- max(min(items.GetTail(), m_list.GetItemCount() - 1), 0),
+ std::max(std::min(items.GetTail(), m_list.GetItemCount() - 1), 0),
LVIS_SELECTED, LVIS_SELECTED);
ResizeListColumn();
@@ -978,10 +1017,9 @@ void CPlayerPlaylistBar::OnLvnKeyDown(NMHDR* pNMHDR, LRESULT* pResult)
*pResult = TRUE;
} else if (pLVKeyDown->wVKey == VK_SPACE && items.GetCount() == 1) {
m_pl.SetPos(FindPos(items.GetHead()));
-
- ((CMainFrame*)AfxGetMainWnd())->OpenCurPlaylistItem();
-
- AfxGetMainWnd()->SetFocus();
+ m_list.Invalidate();
+ m_pMainFrame->OpenCurPlaylistItem();
+ m_pMainFrame->SetFocus();
*pResult = TRUE;
}
@@ -992,11 +1030,9 @@ void CPlayerPlaylistBar::OnNMDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
if (lpnmlv->iItem >= 0 && lpnmlv->iSubItem >= 0) {
- CMainFrame* pMainFrame = static_cast<CMainFrame*>(AfxGetMainWnd());
-
POSITION pos = FindPos(lpnmlv->iItem);
// If the file is already playing, don't try to restore a previously saved position
- if (pMainFrame->GetPlaybackMode() == PM_FILE && pos == m_pl.GetPos()) {
+ if (m_pMainFrame->GetPlaybackMode() == PM_FILE && pos == m_pl.GetPos()) {
const CPlaylistItem& pli = m_pl.GetAt(pos);
CAppSettings& s = AfxGetAppSettings();
@@ -1005,13 +1041,23 @@ void CPlayerPlaylistBar::OnNMDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
m_pl.SetPos(pos);
}
m_list.Invalidate();
- pMainFrame->OpenCurPlaylistItem();
+ m_pMainFrame->OpenCurPlaylistItem();
}
- AfxGetMainWnd()->SetFocus();
+ m_pMainFrame->SetFocus();
*pResult = 0;
}
+
+void CPlayerPlaylistBar::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
+{
+ __super::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
+ if (m_itemHeight == 0) {
+ m_itemHeight = lpMeasureItemStruct->itemHeight;
+ }
+ lpMeasureItemStruct->itemHeight = m_pMainFrame->m_dpi.ScaleSystemToOverrideY(m_itemHeight);
+}
+
/*
void CPlayerPlaylistBar::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
{
@@ -1114,24 +1160,19 @@ BOOL CPlayerPlaylistBar::OnPlayPlay(UINT nID)
return FALSE;
}
-void CPlayerPlaylistBar::OnDropFiles(HDROP hDropInfo)
+DROPEFFECT CPlayerPlaylistBar::OnDropAccept(COleDataObject*, DWORD, CPoint)
+{
+ return DROPEFFECT_COPY;
+}
+
+void CPlayerPlaylistBar::OnDropFiles(CAtlList<CString>& slFiles, DROPEFFECT)
{
SetForegroundWindow();
m_list.SetFocus();
- CAtlList<CString> sl;
-
- UINT nFiles = ::DragQueryFile(hDropInfo, UINT_MAX, nullptr, 0);
- for (UINT iFile = 0; iFile < nFiles; iFile++) {
- TCHAR szFileName[MAX_PATH];
- ::DragQueryFile(hDropInfo, iFile, szFileName, MAX_PATH);
- sl.AddTail(szFileName);
- }
- ::DragFinish(hDropInfo);
-
- m_pMainFrame->ParseDirs(sl);
+ PathUtils::ParseDirs(slFiles);
- Append(sl, true);
+ Append(slFiles, true);
}
void CPlayerPlaylistBar::OnBeginDrag(NMHDR* pNMHDR, LRESULT* pResult)
@@ -1282,25 +1323,9 @@ void CPlayerPlaylistBar::DropItemOnList()
m_list.DeleteItem(m_nDragIndex);
- CList<CPlaylistItem> tmp;
- UINT id = UINT_MAX;
for (int i = 0; i < m_list.GetItemCount(); i++) {
POSITION pos = (POSITION)m_list.GetItemData(i);
- CPlaylistItem& pli = m_pl.GetAt(pos);
- tmp.AddTail(pli);
- if (pos == m_pl.GetPos()) {
- id = pli.m_id;
- }
- }
- m_pl.RemoveAll();
- POSITION pos = tmp.GetHeadPosition();
- for (int i = 0; pos; i++) {
- CPlaylistItem& pli = tmp.GetNext(pos);
- m_pl.AddTail(pli);
- if (pli.m_id == id) {
- m_pl.SetPos(m_pl.GetTailPosition());
- }
- m_list.SetItemData(i, (DWORD_PTR)m_pl.GetTailPosition());
+ m_pl.MoveToTail(pos);
}
ResizeListColumn();
@@ -1317,7 +1342,7 @@ BOOL CPlayerPlaylistBar::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResul
int row = ((pNMHDR->idFrom - 1) >> 10) & 0x3fffff;
int col = (pNMHDR->idFrom - 1) & 0x3ff;
- if (row < 0 || row >= m_pl.GetCount()) {
+ if (row < 0 || size_t(row) >= m_pl.GetCount()) {
return FALSE;
}
@@ -1357,21 +1382,39 @@ BOOL CPlayerPlaylistBar::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResul
return TRUE; // message was handled
}
-void CPlayerPlaylistBar::OnContextMenu(CWnd* /*pWnd*/, CPoint p)
+void CPlayerPlaylistBar::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
LVHITTESTINFO lvhti;
- lvhti.pt = p;
- m_list.ScreenToClient(&lvhti.pt);
- m_list.SubItemHitTest(&lvhti);
- POSITION pos = FindPos(lvhti.iItem);
- bool bOnItem = !!(lvhti.flags & LVHT_ONITEM);
- if (!bOnItem && m_pl.GetSize() == 1) {
- bOnItem = true;
- pos = m_pl.GetHeadPosition();
- lvhti.iItem = 0;
+ bool bOnItem;
+ if (point.x == -1 && point.y == -1) {
+ lvhti.iItem = m_list.GetSelectionMark();
+
+ if (lvhti.iItem == -1 && m_pl.GetCount() == 1) {
+ lvhti.iItem = 0;
+ }
+
+ CRect r;
+ if (!!m_list.GetItemRect(lvhti.iItem, r, LVIR_BOUNDS)) {
+ point.SetPoint(r.left, r.bottom);
+ } else {
+ point.SetPoint(0, 0);
+ }
+ m_list.ClientToScreen(&point);
+ bOnItem = lvhti.iItem != -1;
+ } else {
+ lvhti.pt = point;
+ m_list.ScreenToClient(&lvhti.pt);
+ m_list.SubItemHitTest(&lvhti);
+ bOnItem = lvhti.iItem >= 0 && !!(lvhti.flags & LVHT_ONITEM);
+ if (!bOnItem && m_pl.GetCount() == 1) {
+ bOnItem = true;
+ lvhti.iItem = 0;
+ }
}
- bool bIsLocalFile = bOnItem ? FileExists(m_pl.GetAt(pos).m_fns.GetHead()) : false;
+
+ POSITION pos = FindPos(lvhti.iItem);
+ bool bIsLocalFile = bOnItem ? PathUtils::Exists(m_pl.GetAt(pos).m_fns.GetHead()) : false;
CMenu m;
m.CreatePopupMenu();
@@ -1397,7 +1440,7 @@ void CPlayerPlaylistBar::OnContextMenu(CWnd* /*pWnd*/, CPoint p)
CAppSettings& s = AfxGetAppSettings();
m.AppendMenu(MF_STRING | (!bOnItem ? (MF_DISABLED | MF_GRAYED) : MF_ENABLED), M_OPEN, ResStr(IDS_PLAYLIST_OPEN));
- if (((CMainFrame*)AfxGetMainWnd())->GetPlaybackMode() == PM_ANALOG_CAPTURE) {
+ if (m_pMainFrame->GetPlaybackMode() == PM_ANALOG_CAPTURE) {
m.AppendMenu(MF_STRING | MF_ENABLED, M_ADD, ResStr(IDS_PLAYLIST_ADD));
}
m.AppendMenu(MF_STRING | (!bOnItem ? (MF_DISABLED | MF_GRAYED) : MF_ENABLED), M_REMOVE, ResStr(IDS_PLAYLIST_REMOVE));
@@ -1420,22 +1463,20 @@ void CPlayerPlaylistBar::OnContextMenu(CWnd* /*pWnd*/, CPoint p)
m.AppendMenu(MF_SEPARATOR);
m.AppendMenu(MF_STRING | MF_ENABLED | (s.bHidePlaylistFullScreen ? MF_CHECKED : MF_UNCHECKED), M_HIDEFULLSCREEN, ResStr(IDS_PLAYLIST_HIDEFS));
- CMainFrame* pMainFrm = (CMainFrame*)AfxGetMainWnd();
-
- int nID = (int)m.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RETURNCMD, p.x, p.y, this);
+ int nID = (int)m.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RETURNCMD, point.x, point.y, this);
switch (nID) {
case M_OPEN:
m_pl.SetPos(pos);
m_list.Invalidate();
- pMainFrm->OpenCurPlaylistItem();
+ m_pMainFrame->OpenCurPlaylistItem();
break;
case M_ADD:
- pMainFrm->AddCurDevToPlaylist();
+ m_pMainFrame->AddCurDevToPlaylist();
m_pl.SetPos(m_pl.GetTailPosition());
break;
case M_REMOVE:
if (m_pl.RemoveAt(pos)) {
- pMainFrm->SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
+ m_pMainFrame->SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
}
m_list.DeleteItem(lvhti.iItem);
SavePlaylist();
@@ -1445,7 +1486,7 @@ void CPlayerPlaylistBar::OnContextMenu(CWnd* /*pWnd*/, CPoint p)
break;
case M_CLEAR:
if (Empty()) {
- pMainFrm->SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
+ m_pMainFrame->SendMessage(WM_COMMAND, ID_FILE_CLOSEMEDIA);
}
break;
case M_SORTBYID:
@@ -1464,9 +1505,7 @@ void CPlayerPlaylistBar::OnContextMenu(CWnd* /*pWnd*/, CPoint p)
SavePlaylist();
break;
case M_RANDOMIZE:
- m_pl.Randomize();
- SetupList();
- SavePlaylist();
+ Randomize();
break;
case M_CLIPBOARD:
if (OpenClipboard() && EmptyClipboard()) {
@@ -1502,15 +1541,15 @@ void CPlayerPlaylistBar::OnContextMenu(CWnd* /*pWnd*/, CPoint p)
std::set<CString, CStringUtils::LogicalLess> fileList;
{
// convert to stl
- POSITION pos = fileListAtl.GetHeadPosition();
- while (pos) {
- fileList.emplace_hint(fileList.end(), fileListAtl.GetNext(pos));
+ POSITION pos2 = fileListAtl.GetHeadPosition();
+ while (pos2) {
+ fileList.emplace_hint(fileList.end(), fileListAtl.GetNext(pos2));
}
// deduplicate
- pos = m_pl.GetHeadPosition();
- while (pos) {
- const CPlaylistItem& pli = m_pl.GetNext(pos);
+ pos2 = m_pl.GetHeadPosition();
+ while (pos2) {
+ const CPlaylistItem& pli = m_pl.GetNext(pos2);
POSITION subpos = pli.m_fns.GetHeadPosition();
while (subpos) {
fileList.erase(pli.m_fns.GetNext(subpos));
@@ -1620,26 +1659,26 @@ void CPlayerPlaylistBar::OnContextMenu(CWnd* /*pWnd*/, CPoint p)
if (pli.m_type != CPlaylistItem::file) {
fRemovePath = false;
} else {
- POSITION pos;
+ POSITION pos2;
- pos = pli.m_fns.GetHeadPosition();
- while (pos && fRemovePath) {
- CString fn = pli.m_fns.GetNext(pos);
+ pos2 = pli.m_fns.GetHeadPosition();
+ while (pos2 && fRemovePath) {
+ CString fn = pli.m_fns.GetNext(pos2);
- CPath p(fn);
- p.RemoveFileSpec();
- if (base != (LPCTSTR)p) {
+ CPath fnPath(fn);
+ fnPath.RemoveFileSpec();
+ if (base != (LPCTSTR)fnPath) {
fRemovePath = false;
}
}
- pos = pli.m_subs.GetHeadPosition();
- while (pos && fRemovePath) {
- CString fn = pli.m_subs.GetNext(pos);
+ pos2 = pli.m_subs.GetHeadPosition();
+ while (pos2 && fRemovePath) {
+ CString fn = pli.m_subs.GetNext(pos2);
- CPath p(fn);
- p.RemoveFileSpec();
- if (base != (LPCTSTR)p) {
+ CPath fnPath(fn);
+ fnPath.RemoveFileSpec();
+ if (base != (LPCTSTR)fnPath) {
fRemovePath = false;
}
}
@@ -1710,6 +1749,7 @@ void CPlayerPlaylistBar::OnContextMenu(CWnd* /*pWnd*/, CPoint p)
break;
case M_SHUFFLE:
s.bShufflePlaylistItems = !s.bShufflePlaylistItems;
+ m_pl.SetShuffle(s.bShufflePlaylistItems);
break;
case M_HIDEFULLSCREEN:
s.bHidePlaylistFullScreen = !s.bHidePlaylistFullScreen;
diff --git a/src/mpc-hc/PlayerPlaylistBar.h b/src/mpc-hc/PlayerPlaylistBar.h
index d113ee563..4c3c962ec 100644
--- a/src/mpc-hc/PlayerPlaylistBar.h
+++ b/src/mpc-hc/PlayerPlaylistBar.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,13 +25,15 @@
#include "PlayerBar.h"
#include "PlayerListCtrl.h"
#include "Playlist.h"
+#include "DropTarget.h"
+#include "../Subtitles/TextFile.h"
class OpenMediaData;
class CMainFrame;
-class CPlayerPlaylistBar : public CPlayerBar
+class CPlayerPlaylistBar : public CPlayerBar, public CDropClient
{
DECLARE_DYNAMIC(CPlayerPlaylistBar)
@@ -40,9 +42,16 @@ private:
CMainFrame* m_pMainFrame;
+ CFont m_font;
+ void ScaleFont();
+
CImageList m_fakeImageList;
CPlayerListCtrl m_list;
+ int m_itemHeight = 0;
+ EventClient m_eventc;
+ void EventCallback(MpcEvent ev);
+
int m_nTimeColWidth;
void ResizeListColumn();
@@ -72,6 +81,10 @@ private:
bool m_bHiddenDueToFullscreen;
+ CDropTarget m_dropTarget;
+ void OnDropFiles(CAtlList<CString>& slFiles, DROPEFFECT) override;
+ DROPEFFECT OnDropAccept(COleDataObject*, DWORD, CPoint) override;
+
public:
CPlayerPlaylistBar(CMainFrame* pMainFrame);
virtual ~CPlayerPlaylistBar();
@@ -102,6 +115,7 @@ public:
void SetLast();
void SetCurValid(bool fValid);
void SetCurTime(REFERENCE_TIME rt);
+ void Randomize();
void Refresh();
bool Empty();
@@ -127,20 +141,21 @@ protected:
DECLARE_MESSAGE_MAP()
public:
+ afx_msg void OnDestroy();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnLvnKeyDown(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnNMDblclkList(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnLvnKeydownList(NMHDR* pNMHDR, LRESULT* pResult);
// afx_msg void OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult);
+ void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
afx_msg BOOL OnPlayPlay(UINT nID);
- afx_msg void OnDropFiles(HDROP hDropInfo);
afx_msg void OnBeginDrag(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg BOOL OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnTimer(UINT_PTR nIDEvent);
- afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);
+ afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint point);
afx_msg void OnLvnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnXButtonDown(UINT nFlags, UINT nButton, CPoint point);
afx_msg void OnXButtonUp(UINT nFlags, UINT nButton, CPoint point);
diff --git a/src/mpc-hc/PlayerSeekBar.cpp b/src/mpc-hc/PlayerSeekBar.cpp
index 9a57246ca..57c1a5476 100644
--- a/src/mpc-hc/PlayerSeekBar.cpp
+++ b/src/mpc-hc/PlayerSeekBar.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#include "stdafx.h"
#include "PlayerSeekBar.h"
#include "MainFrm.h"
+#include "mplayerc.h"
#define TOOLTIP_SHOW_DELAY 100
#define TOOLTIP_HIDE_TIMEOUT 3000
@@ -46,6 +47,10 @@ CPlayerSeekBar::CPlayerSeekBar(CMainFrame* pMainFrame)
{
ZeroMemory(&m_ti, sizeof(m_ti));
m_ti.cbSize = sizeof(m_ti);
+
+ GetEventd().Connect(m_eventc, {
+ MpcEvent::DPI_CHANGED,
+ }, std::bind(&CPlayerSeekBar::EventCallback, this, std::placeholders::_1));
}
CPlayerSeekBar::~CPlayerSeekBar()
@@ -76,6 +81,19 @@ BOOL CPlayerSeekBar::Create(CWnd* pParentWnd)
return TRUE;
}
+void CPlayerSeekBar::EventCallback(MpcEvent ev)
+{
+ switch (ev) {
+ case MpcEvent::DPI_CHANGED:
+ m_pEnabledThumb = nullptr;
+ m_pDisabledThumb = nullptr;
+ break;
+
+ default:
+ ASSERT(FALSE);
+ }
+}
+
BOOL CPlayerSeekBar::PreCreateWindow(CREATESTRUCT& cs)
{
if (!__super::PreCreateWindow(cs)) {
@@ -112,12 +130,12 @@ void CPlayerSeekBar::MoveThumb(const CPoint& point)
void CPlayerSeekBar::SyncVideoToThumb()
{
- GetParent()->PostMessage(WM_HSCROLL, MAKEWPARAM((short)m_rtPos, SB_THUMBTRACK), (LPARAM)m_hWnd);
+ GetParent()->PostMessage(WM_HSCROLL, NULL, reinterpret_cast<LPARAM>(m_hWnd));
}
long CPlayerSeekBar::ChannelPointFromPosition(REFERENCE_TIME rtPos) const
{
- rtPos = min(m_rtStop, max(m_rtStart, rtPos));
+ rtPos = std::min(m_rtStop, std::max(m_rtStart, rtPos));
long ret = 0;
auto w = GetChannelRect().Width();
if (m_bHasDuration) {
@@ -153,8 +171,8 @@ void CPlayerSeekBar::SyncThumbToVideo(REFERENCE_TIME rtPos)
bSetTaskbar = true;
InvalidateRect(newThumbRect | m_lastThumbRect);
}
- if (bSetTaskbar && AfxGetAppSettings().fUseWin7TaskBar && m_pMainFrame->m_pTaskbarList) {
- VERIFY(S_OK == m_pMainFrame->m_pTaskbarList->SetProgressValue(m_pMainFrame->m_hWnd, max(m_rtPos, 1ll), m_rtStop));
+ if (bSetTaskbar && AfxGetAppSettings().bUseEnhancedTaskBar && m_pMainFrame->m_pTaskbarList) {
+ VERIFY(S_OK == m_pMainFrame->m_pTaskbarList->SetProgressValue(m_pMainFrame->m_hWnd, std::max(m_rtPos, 1ll), m_rtStop));
}
}
}
@@ -295,7 +313,7 @@ void CPlayerSeekBar::UpdateToolTipPosition()
point.x += m_pMainFrame->m_dpi.ScaleX(10);
point.y += m_pMainFrame->m_dpi.ScaleY(20);
}
- point.x = max(0l, min(point.x, windowRect.Width() - bubbleSize.cx));
+ point.x = std::max(0l, std::min(point.x, windowRect.Width() - bubbleSize.cx));
ClientToScreen(&point);
m_tooltip.SendMessage(TTM_TRACKPOSITION, 0, MAKELPARAM(point.x, point.y));
diff --git a/src/mpc-hc/PlayerSeekBar.h b/src/mpc-hc/PlayerSeekBar.h
index 7cb14bf64..16d859911 100644
--- a/src/mpc-hc/PlayerSeekBar.h
+++ b/src/mpc-hc/PlayerSeekBar.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,7 @@
#pragma once
+#include "EventDispatcher.h"
#include "DSMPropertyBag.h"
#include <memory>
@@ -48,6 +49,9 @@ private:
HCURSOR m_cursor;
bool m_bDraggingThumb;
+ EventClient m_eventc;
+ void EventCallback(MpcEvent ev);
+
CToolTipCtrl m_tooltip;
enum { TOOLTIP_HIDDEN, TOOLTIP_TRIGGERED, TOOLTIP_VISIBLE } m_tooltipState;
TOOLINFO m_ti;
diff --git a/src/mpc-hc/PlayerStatusBar.cpp b/src/mpc-hc/PlayerStatusBar.cpp
index f811fdac8..3f4404980 100644
--- a/src/mpc-hc/PlayerStatusBar.cpp
+++ b/src/mpc-hc/PlayerStatusBar.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -25,19 +25,23 @@
#include "MainFrm.h"
#include "DSUtil.h"
-
// CPlayerStatusBar
IMPLEMENT_DYNAMIC(CPlayerStatusBar, CDialogBar)
CPlayerStatusBar::CPlayerStatusBar(CMainFrame* pMainFrame)
: m_pMainFrame(pMainFrame)
- , m_status(false, true)
- , m_time(true, false)
+ , m_status(pMainFrame->m_dpi, false, true)
+ , m_time(pMainFrame->m_dpi, true, false)
, m_bmid(0)
, m_hIcon(0)
, m_time_rect(-1, -1, -1, -1)
{
+ EventRouter::EventSelection fires;
+ fires.insert(MpcEvent::STREAM_POS_UPDATE_REQUEST);
+ EventRouter::EventSelection receives;
+ receives.insert(MpcEvent::DPI_CHANGED);
+ GetEventd().Connect(m_eventc, receives, std::bind(&CPlayerStatusBar::EventCallback, this, std::placeholders::_1), fires);
}
CPlayerStatusBar::~CPlayerStatusBar()
@@ -51,6 +55,9 @@ BOOL CPlayerStatusBar::Create(CWnd* pParentWnd)
{
BOOL ret = CDialogBar::Create(pParentWnd, IDD_PLAYERSTATUSBAR, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_BOTTOM, IDD_PLAYERSTATUSBAR);
+ // Should never be RTLed
+ ModifyStyleEx(WS_EX_LAYOUTRTL, WS_EX_NOINHERITLAYOUT);
+
m_tooltip.Create(this, TTS_NOPREFIX | TTS_ALWAYSTIP);
m_tooltip.SetDelayTime(TTDT_INITIAL, 0);
m_tooltip.SetDelayTime(TTDT_AUTOPOP, 2500);
@@ -58,7 +65,6 @@ BOOL CPlayerStatusBar::Create(CWnd* pParentWnd)
m_tooltip.AddTool(&m_time, IDS_TOOLTIP_REMAINING_TIME);
m_tooltip.AddTool(&m_status);
-
return ret;
}
@@ -78,6 +84,7 @@ CSize CPlayerStatusBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
{
CSize ret = __super::CalcFixedLayout(bStretch, bHorz);
ret.cy = std::max<long>(ret.cy, 24);
+ ret.cy = m_pMainFrame->m_dpi.ScaleSystemToOverrideY(ret.cy);
return ret;
}
@@ -98,6 +105,8 @@ int CPlayerStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
m_time.Create(_T(""), WS_CHILD | WS_VISIBLE | SS_OWNERDRAW | SS_NOTIFY,
r, this, IDC_PLAYERTIME);
+ // Should never be RTLed
+ m_time.ModifyStyleEx(WS_EX_LAYOUTRTL, WS_EX_NOINHERITLAYOUT);
m_status.SetWindowPos(&m_time, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
@@ -106,6 +115,20 @@ int CPlayerStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
return 0;
}
+void CPlayerStatusBar::EventCallback(MpcEvent ev)
+{
+ switch (ev) {
+ case MpcEvent::DPI_CHANGED:
+ m_status.ScaleFont(m_pMainFrame->m_dpi);
+ m_time.ScaleFont(m_pMainFrame->m_dpi);
+ SetMediaTypeIcon();
+ break;
+
+ default:
+ ASSERT(FALSE);
+ }
+}
+
void CPlayerStatusBar::Relayout()
{
BITMAP bm {};
@@ -163,7 +186,8 @@ void CPlayerStatusBar::Clear()
{
m_status.SetWindowText(_T(""));
m_time.SetWindowText(_T(""));
- SetStatusTypeIcon(nullptr);
+ m_typeExt.Empty();
+ SetMediaTypeIcon();
SetStatusBitmap(0);
}
@@ -188,18 +212,12 @@ void CPlayerStatusBar::SetStatusBitmap(UINT id)
Relayout();
}
-void CPlayerStatusBar::SetStatusTypeIcon(HICON hIcon)
+void CPlayerStatusBar::SetMediaType(CString ext)
{
- if (m_hIcon == hIcon) {
- return;
- }
-
- if (m_hIcon) {
- DestroyIcon(m_hIcon);
+ if (ext != m_typeExt) {
+ m_typeExt = ext;
+ SetMediaTypeIcon();
}
- m_type.SetIcon(m_hIcon = hIcon);
-
- Relayout();
}
CString CPlayerStatusBar::GetStatusMessage() const
@@ -260,11 +278,12 @@ void CPlayerStatusBar::SetStatusTimer(REFERENCE_TIME rtNow, REFERENCE_TIME rtDur
{
CString str;
CString posstr, durstr, rstr;
+ const CAppSettings& s = AfxGetAppSettings();
if (timeFormat == TIME_FORMAT_MEDIA_TIME) {
DVD_HMSF_TIMECODE tcNow, tcDur, tcRt;
- if (fHighPrecision) {
+ if (fHighPrecision || s.bHighPrecisionTimer) {
tcNow = RT2HMSF(rtNow);
tcDur = RT2HMSF(rtDur);
tcRt = RT2HMSF(rtDur - rtNow);
@@ -288,7 +307,7 @@ void CPlayerStatusBar::SetStatusTimer(REFERENCE_TIME rtNow, REFERENCE_TIME rtDur
durstr.Format(_T("%02u:%02u"), tcDur.bMinutes, tcDur.bSeconds);
}
- if (fHighPrecision) {
+ if (fHighPrecision || s.bHighPrecisionTimer) {
posstr.AppendFormat(_T(".%03d"), int((rtNow / 10000) % 1000));
durstr.AppendFormat(_T(".%03d"), int((rtDur / 10000) % 1000));
rstr.AppendFormat(_T(".%03d"), int(((rtDur - rtNow) / 10000) % 1000));
@@ -299,7 +318,7 @@ void CPlayerStatusBar::SetStatusTimer(REFERENCE_TIME rtNow, REFERENCE_TIME rtDur
rstr.Format(_T("%I64d"), rtDur - rtNow);
}
- if (!AfxGetAppSettings().fRemainingTime) {
+ if (!s.fRemainingTime) {
str = ((rtDur <= 0) || (rtDur < rtNow)) ? posstr : posstr + _T(" / ") + durstr;
} else {
str = ((rtDur <= 0) || (rtDur < rtNow)) ? posstr : _T("- ") + rstr + _T(" / ") + durstr;
@@ -323,12 +342,26 @@ BEGIN_MESSAGE_MAP(CPlayerStatusBar, CDialogBar)
ON_WM_LBUTTONDOWN()
ON_WM_SETCURSOR()
ON_WM_CTLCOLOR()
+ ON_WM_CONTEXTMENU()
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
END_MESSAGE_MAP()
// CPlayerStatusBar message handlers
+void CPlayerStatusBar::SetMediaTypeIcon()
+{
+ if (m_hIcon) {
+ DestroyIcon(m_hIcon);
+ }
+
+ m_hIcon = m_typeExt.IsEmpty() ? NULL : LoadIcon(m_typeExt, true, &m_pMainFrame->m_dpi);
+
+ m_type.SetIcon(m_hIcon);
+
+ Relayout();
+}
+
BOOL CPlayerStatusBar::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
@@ -427,7 +460,7 @@ BOOL CPlayerStatusBar::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
GetCursorPos(&p);
ScreenToClient(&p);
- if (m_time_rect.PtInRect(p)) {
+ if (m_time_rect.PtInRect(p) && !IsMenu(m_timerMenu)) {
SetCursor(LoadCursor(nullptr, IDC_HAND));
return TRUE;
}
@@ -465,12 +498,48 @@ BOOL CPlayerStatusBar::PreTranslateMessage(MSG* pMsg)
void CPlayerStatusBar::OnTimeDisplayClicked()
{
- CMainFrame* pFrame = ((CMainFrame*)GetParentFrame());
CAppSettings& s = AfxGetAppSettings();
s.fRemainingTime = !s.fRemainingTime;
- // This isn't particularly nice...
- pFrame->OnTimer(2);
+ m_eventc.FireEvent(MpcEvent::STREAM_POS_UPDATE_REQUEST);
+}
+
+void CPlayerStatusBar::OnContextMenu(CWnd* pWnd, CPoint point)
+{
+ CPoint clientPoint = point;
+ ScreenToClient(&clientPoint);
+ if (!m_time_rect.PtInRect(clientPoint)) {
+ return __super::OnContextMenu(pWnd, point);
+ }
+
+ CAppSettings& s = AfxGetAppSettings();
+
+ enum {
+ REMAINING_TIME = 1,
+ HIGH_PRECISION
+ };
+
+ m_timerMenu.CreatePopupMenu();
+ m_timerMenu.AppendMenu(MF_STRING | MF_ENABLED | (s.fRemainingTime ? MF_CHECKED : MF_UNCHECKED), REMAINING_TIME, ResStr(IDS_TIMER_REMAINING_TIME));
+ UINT nFlags = MF_STRING;
+ if (m_pMainFrame->IsSubresyncBarVisible()) {
+ nFlags |= MF_DISABLED | MF_CHECKED;
+ } else {
+ nFlags |= MF_ENABLED | (s.bHighPrecisionTimer ? MF_CHECKED : MF_UNCHECKED);
+ }
+ m_timerMenu.AppendMenu(nFlags, HIGH_PRECISION, ResStr(IDS_TIMER_HIGH_PRECISION));
+
+ switch (m_timerMenu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RETURNCMD, point.x, point.y, this)) {
+ case REMAINING_TIME:
+ s.fRemainingTime = !s.fRemainingTime;
+ m_eventc.FireEvent(MpcEvent::STREAM_POS_UPDATE_REQUEST);
+ break;
+ case HIGH_PRECISION:
+ s.bHighPrecisionTimer = !s.bHighPrecisionTimer;
+ m_eventc.FireEvent(MpcEvent::STREAM_POS_UPDATE_REQUEST);
+ break;
+ }
+ m_timerMenu.DestroyMenu();
}
BOOL CPlayerStatusBar::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
diff --git a/src/mpc-hc/PlayerStatusBar.h b/src/mpc-hc/PlayerStatusBar.h
index fb0017f68..55750b59c 100644
--- a/src/mpc-hc/PlayerStatusBar.h
+++ b/src/mpc-hc/PlayerStatusBar.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -38,12 +38,17 @@ private:
CStatusLabel m_status, m_time;
CBitmap m_bm;
UINT m_bmid;
+ CString m_typeExt;
HICON m_hIcon;
CRect m_time_rect;
+ CMenu m_timerMenu;
CToolTipCtrl m_tooltip;
+ EventClient m_eventc;
+ void EventCallback(MpcEvent ev);
+
void Relayout();
public:
@@ -53,7 +58,7 @@ public:
void Clear();
void SetStatusBitmap(UINT id);
- void SetStatusTypeIcon(HICON hIcon);
+ void SetMediaType(CString ext);
void SetStatusMessage(CString str);
void SetStatusTimer(CString str);
void SetStatusTimer(REFERENCE_TIME rtNow, REFERENCE_TIME rtDur, bool fHighPrecision,
@@ -74,6 +79,9 @@ public:
DECLARE_MESSAGE_MAP()
protected:
+
+ void SetMediaTypeIcon();
+
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnPaint();
afx_msg void OnSize(UINT nType, int cx, int cy);
@@ -83,5 +91,6 @@ protected:
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnTimeDisplayClicked();
+ afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
afx_msg BOOL OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult);
};
diff --git a/src/mpc-hc/PlayerSubresyncBar.cpp b/src/mpc-hc/PlayerSubresyncBar.cpp
index 228e32604..11ec266cf 100644
--- a/src/mpc-hc/PlayerSubresyncBar.cpp
+++ b/src/mpc-hc/PlayerSubresyncBar.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,22 +20,27 @@
*/
#include "stdafx.h"
+#include "PlayerSubresyncBar.h"
#include "mplayerc.h"
#include "MainFrm.h"
-#include "PlayerSubresyncBar.h"
-
+#include "WinAPIUtils.h"
+#include "PPageSubStyle.h"
+#include "../Subtitles/RTS.h"
// CPlayerSubresyncBar
IMPLEMENT_DYNAMIC(CPlayerSubresyncBar, CPlayerBar)
-CPlayerSubresyncBar::CPlayerSubresyncBar()
+CPlayerSubresyncBar::CPlayerSubresyncBar(CMainFrame* pMainFrame)
: m_pSubLock(nullptr)
+ , m_pMainFrame(pMainFrame)
, m_fps(0.0)
- , m_mode(NONE)
- , m_rt(0)
- //, m_bUnlink(false)
, m_lastSegment(-1)
+ , m_rt(0)
+ , m_mode(NONE)
{
+ GetEventd().Connect(m_eventc, {
+ MpcEvent::DPI_CHANGED,
+ }, std::bind(&CPlayerSubresyncBar::EventCallback, this, std::placeholders::_1));
}
CPlayerSubresyncBar::~CPlayerSubresyncBar()
@@ -55,8 +60,9 @@ BOOL CPlayerSubresyncBar::Create(CWnd* pParentWnd, UINT defDockBarID, CCritSec*
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_TABSTOP | LVS_REPORT | LVS_OWNERDATA /*|LVS_SHOWSELALWAYS*/ | LVS_AUTOARRANGE | LVS_NOSORTHEADER,
CRect(0, 0, 100, 100), this, IDC_SUBRESYNCLIST);
- m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
+ ScaleFont();
+ m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
m_strYes = m_strYesMenu = ResStr(IDS_SUBRESYNC_YES);
m_strNo = m_strNoMenu = ResStr(IDS_SUBRESYNC_NO);
m_strYes.Remove(_T('&'));
@@ -104,25 +110,25 @@ void CPlayerSubresyncBar::ReloadTranslatableResources()
VERIFY(pHeaderCtrl->SetItem(nPos, &item));
};
- setColumnHeaderText(COL_START, ResStr(IDS_SUBRESYNC_CLN_TIME));
- setColumnHeaderText(COL_END, ResStr(IDS_SUBRESYNC_CLN_END));
- setColumnHeaderText(COL_PREVSTART, ResStr(IDS_SUBRESYNC_CLN_PREVIEW));
- setColumnHeaderText(COL_PREVEND, ResStr(IDS_SUBRESYNC_CLN_END));
+ setColumnHeaderText(COL_START, StrRes(IDS_SUBRESYNC_CLN_TIME));
+ setColumnHeaderText(COL_END, StrRes(IDS_SUBRESYNC_CLN_END));
+ setColumnHeaderText(COL_PREVSTART, StrRes(IDS_SUBRESYNC_CLN_PREVIEW));
+ setColumnHeaderText(COL_PREVEND, StrRes(IDS_SUBRESYNC_CLN_END));
if (m_mode == VOBSUB) {
ASSERT(pHeaderCtrl->GetItemCount() == COL_COUNT_VOBSUB);
- setColumnHeaderText(COL_VOBID, ResStr(IDS_SUBRESYNC_CLN_VOB_ID));
- setColumnHeaderText(COL_CELLID, ResStr(IDS_SUBRESYNC_CLN_CELL_ID));
- setColumnHeaderText(COL_FORCED, ResStr(IDS_SUBRESYNC_CLN_FORCED));
+ setColumnHeaderText(COL_VOBID, StrRes(IDS_SUBRESYNC_CLN_VOB_ID));
+ setColumnHeaderText(COL_CELLID, StrRes(IDS_SUBRESYNC_CLN_CELL_ID));
+ setColumnHeaderText(COL_FORCED, StrRes(IDS_SUBRESYNC_CLN_FORCED));
} else if (m_mode == TEXTSUB) {
ASSERT(pHeaderCtrl->GetItemCount() == COL_COUNT_TEXTSUB);
- setColumnHeaderText(COL_TEXT, ResStr(IDS_SUBRESYNC_CLN_TEXT));
- setColumnHeaderText(COL_STYLE, ResStr(IDS_SUBRESYNC_CLN_STYLE));
- setColumnHeaderText(COL_FONT, ResStr(IDS_SUBRESYNC_CLN_FONT));
- setColumnHeaderText(COL_CHARSET, ResStr(IDS_SUBRESYNC_CLN_CHARSET));
- setColumnHeaderText(COL_UNICODE, ResStr(IDS_SUBRESYNC_CLN_UNICODE));
- setColumnHeaderText(COL_LAYER, ResStr(IDS_SUBRESYNC_CLN_LAYER));
- setColumnHeaderText(COL_ACTOR, ResStr(IDS_SUBRESYNC_CLN_ACTOR));
- setColumnHeaderText(COL_EFFECT, ResStr(IDS_SUBRESYNC_CLN_EFFECT));
+ setColumnHeaderText(COL_TEXT, StrRes(IDS_SUBRESYNC_CLN_TEXT));
+ setColumnHeaderText(COL_STYLE, StrRes(IDS_SUBRESYNC_CLN_STYLE));
+ setColumnHeaderText(COL_FONT, StrRes(IDS_SUBRESYNC_CLN_FONT));
+ setColumnHeaderText(COL_CHARSET, StrRes(IDS_SUBRESYNC_CLN_CHARSET));
+ setColumnHeaderText(COL_UNICODE, StrRes(IDS_SUBRESYNC_CLN_UNICODE));
+ setColumnHeaderText(COL_LAYER, StrRes(IDS_SUBRESYNC_CLN_LAYER));
+ setColumnHeaderText(COL_ACTOR, StrRes(IDS_SUBRESYNC_CLN_ACTOR));
+ setColumnHeaderText(COL_EFFECT, StrRes(IDS_SUBRESYNC_CLN_EFFECT));
}
}
}
@@ -133,7 +139,7 @@ void CPlayerSubresyncBar::SetTime(REFERENCE_TIME rt)
m_rt = rt;
int curSegment;
- if (!m_sts.SearchSubs((int)(rt / 10000), 25, &curSegment)) {
+ if (!m_sts.SearchSubs(rt, 25, &curSegment)) {
curSegment = -1;
}
@@ -220,7 +226,7 @@ void CPlayerSubresyncBar::ReloadSubtitle()
m_sts.Copy(*pRTS);
pRTS->Unlock();
m_sts.ConvertToTimeBased(m_fps);
- m_sts.Sort(true); /*!!m_bUnlink*/
+ m_sts.Sort(true);
m_list.InsertColumn(COL_START, ResStr(IDS_SUBRESYNC_CLN_TIME), LVCFMT_LEFT, 90);
m_list.InsertColumn(COL_END, ResStr(IDS_SUBRESYNC_CLN_END), LVCFMT_LEFT, 4);
@@ -236,7 +242,7 @@ void CPlayerSubresyncBar::ReloadSubtitle()
m_list.InsertColumn(COL_EFFECT, ResStr(IDS_SUBRESYNC_CLN_EFFECT), LVCFMT_LEFT, 80);
}
- m_subtimes.SetCount(m_sts.GetCount());
+ m_subtimes.resize(m_sts.GetCount());
for (size_t i = 0, j = m_sts.GetCount(); i < j; i++) {
m_subtimes[i].orgStart = m_sts[i].start;
@@ -252,14 +258,19 @@ void CPlayerSubresyncBar::ResetSubtitle()
m_list.DeleteAllItems();
if (m_mode == VOBSUB || m_mode == TEXTSUB) {
- int prevstart = INT_MIN;
+ REFERENCE_TIME prevstart = INT64_MIN;
size_t nCount = m_sts.GetCount();
- m_displayData.SetCount(nCount);
+ m_displayData.resize(nCount);
+ m_newStartsIndex.clear();
+ auto itHint = m_newStartsIndex.end();
for (size_t i = 0; i < nCount; i++) {
m_subtimes[i].newStart = m_subtimes[i].orgStart;
m_subtimes[i].newEnd = m_subtimes[i].orgEnd;
+ // In general subtitle files are more or less sorted so try to use that to insert more efficiently
+ m_subtimes[i].itIndex = itHint = m_newStartsIndex.emplace_hint(itHint, m_subtimes[i].newStart, i);
+ ++itHint;
m_displayData[i].tStart = m_displayData[i].tPrevStart = m_subtimes[i].orgStart;
m_displayData[i].tEnd = m_displayData[i].tPrevEnd = m_subtimes[i].orgEnd;
@@ -286,122 +297,135 @@ void CPlayerSubresyncBar::ResetSubtitle()
void CPlayerSubresyncBar::SaveSubtitle()
{
- CMainFrame* pFrame = ((CMainFrame*)AfxGetMainWnd());
- if (!pFrame) {
- return;
- }
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
+ CLSID clsid;
+ m_pSubStream->GetClassID(&clsid);
- CLSID clsid;
- m_pSubStream->GetClassID(&clsid);
+ if (clsid == __uuidof(CVobSubFile) && m_mode == VOBSUB) {
+ CVobSubFile* pVSF = (CVobSubFile*)(ISubStream*)m_pSubStream;
- if (clsid == __uuidof(CVobSubFile) && m_mode == VOBSUB) {
- CVobSubFile* pVSF = (CVobSubFile*)(ISubStream*)m_pSubStream;
+ CAutoLock cAutoLock(m_pSubLock);
- CAutoLock cAutoLock(m_pSubLock);
+ ASSERT(pVSF->m_nLang < pVSF->m_langs.size());
+ CAtlArray<CVobSubFile::SubPos>& sp = pVSF->m_langs[pVSF->m_nLang].subpos;
- ASSERT(pVSF->m_nLang < pVSF->m_langs.size());
- CAtlArray<CVobSubFile::SubPos>& sp = pVSF->m_langs[pVSF->m_nLang].subpos;
+ for (size_t i = 0, j = sp.GetCount(); i < j; i++) {
+ sp[i].bValid = false;
+ }
- for (size_t i = 0, j = sp.GetCount(); i < j; i++) {
- sp[i].bValid = false;
- }
+ for (size_t i = 0, j = m_sts.GetCount(); i < j; i++) {
+ int spnum = m_sts[i].readorder;
- for (size_t i = 0, j = m_sts.GetCount(); i < j; i++) {
- int spnum = m_sts[i].readorder;
+ sp[spnum].start = m_sts[i].start;
+ sp[spnum].stop = m_sts[i].end;
+ sp[spnum].bValid = true;
+ }
+ } else if (clsid == __uuidof(CRenderedTextSubtitle) && m_mode == TEXTSUB) {
+ CRenderedTextSubtitle* pRTS = (CRenderedTextSubtitle*)(ISubStream*)m_pSubStream;
- sp[spnum].start = m_sts[i].start;
- sp[spnum].stop = m_sts[i].end;
- sp[spnum].bValid = true;
+ CAutoLock cAutoLock(m_pSubLock);
+
+ pRTS->Copy(m_sts);
+ } else {
+ return;
}
- } else if (clsid == __uuidof(CRenderedTextSubtitle) && m_mode == TEXTSUB) {
- CRenderedTextSubtitle* pRTS = (CRenderedTextSubtitle*)(ISubStream*)m_pSubStream;
- CAutoLock cAutoLock(m_pSubLock);
+ pMainFrame->InvalidateSubtitle();
+ }
+}
- pRTS->Copy(m_sts);
- } else {
- return;
+void CPlayerSubresyncBar::ScaleFont()
+{
+ LOGFONT lf;
+ GetMessageFont(&lf);
+ lf.lfHeight = m_pMainFrame->m_dpi.ScaleSystemToOverrideY(lf.lfHeight);
+
+ m_font.DeleteObject();
+ if (m_font.CreateFontIndirect(&lf)) {
+ m_list.SetFont(&m_font);
}
+}
- pFrame->InvalidateSubtitle();
+void CPlayerSubresyncBar::EventCallback(MpcEvent ev)
+{
+ switch (ev) {
+ case MpcEvent::DPI_CHANGED:
+ ScaleFont();
+ m_list.SetWindowPos(nullptr, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+ break;
+
+ default:
+ ASSERT(FALSE);
+ }
}
void CPlayerSubresyncBar::UpdatePreview()
{
if (m_mode == VOBSUB || m_mode == TEXTSUB) {
- if (0/*m_bUnlink*/) {
- for (int i = 0, j = (int)m_sts.GetCount(); i < j; i++) {
- bool bStartMod, bEndMod, bStartAdj, bEndAdj;
- GetCheck(i, bStartMod, bEndMod, bStartAdj, bEndAdj);
- m_sts[i].start = (bStartMod || bStartAdj) ? m_subtimes[i].newStart : m_subtimes[i].orgStart;
- m_sts[i].end = (bEndMod || bEndAdj) ? m_subtimes[i].newEnd : m_subtimes[i].orgEnd;
- }
- } else {
- CAtlArray<int> schk;
+ CAtlArray<int> schk;
- for (int i = 0, j = (int)m_sts.GetCount(); i < j;) {
- schk.RemoveAll();
+ for (int i = 0, j = (int)m_sts.GetCount(); i < j;) {
+ schk.RemoveAll();
- int start = i, end;
+ int start = i, end;
- for (end = i; end < j; end++) {
- int data = m_displayData[end].flags;
- if ((data & TSEP) && end > i) {
- break;
- }
- if (data & (TSMOD | TSADJ)) {
- schk.Add(end);
- }
+ for (end = i; end < j; end++) {
+ int data = m_displayData[end].flags;
+ if ((data & TSEP) && end > i) {
+ break;
+ }
+ if (data & (TSMOD | TSADJ)) {
+ schk.Add(end);
}
+ }
- if (schk.IsEmpty()) {
- for (; start < end; start++) {
- m_sts[start].start = m_subtimes[start].orgStart;
- m_sts[start].end = m_subtimes[start].orgEnd;
- }
- } else if (schk.GetCount() == 1) {
- int k = schk[0];
- int dt = m_subtimes[k].newStart - m_subtimes[k].orgStart;
- for (; start < end; start++) {
- m_sts[start].start = m_subtimes[start].orgStart + dt;
- m_sts[start].end = (m_displayData[start].flags & TEMOD)
- ? m_subtimes[start].newEnd
- : (m_subtimes[start].orgEnd + dt);
- }
- } else if (schk.GetCount() >= 2) {
- int i0 = 0;
- int i1 = 0;
- int ti0 = 0;
- int ds = 0;
- double m = 0;
-
- int k, l;
- for (k = 0, l = (int)schk.GetCount() - 1; k < l; k++) {
- i0 = schk[k];
- i1 = schk[k + 1];
-
- ti0 = m_subtimes[i0].orgStart;
- ds = m_subtimes[i1].orgStart - ti0;
-
- if (ds == 0) {
- SetSTS0(start, i1, ti0);
- } else {
- m = double(m_subtimes[i1].newStart - m_subtimes[i0].newStart) / ds;
- SetSTS1(start, i1, ti0, m, i0);
- }
+ if (schk.IsEmpty()) {
+ for (; start < end; start++) {
+ m_sts[start].start = m_subtimes[start].orgStart;
+ m_sts[start].end = m_subtimes[start].orgEnd;
+ }
+ } else if (schk.GetCount() == 1) {
+ int k = schk[0];
+ REFERENCE_TIME dt = m_subtimes[k].newStart - m_subtimes[k].orgStart;
+ for (; start < end; start++) {
+ m_sts[start].start = m_subtimes[start].orgStart + dt;
+ m_sts[start].end = (m_displayData[start].flags & TEMOD)
+ ? m_subtimes[start].newEnd
+ : (m_subtimes[start].orgEnd + dt);
+ }
+ } else if (schk.GetCount() >= 2) {
+ int i0 = 0;
+ int i1 = 0;
+ REFERENCE_TIME ti0 = 0;
+ REFERENCE_TIME ds = 0;
+ double m = 0;
- }
+ int k, l;
+ for (k = 0, l = (int)schk.GetCount() - 1; k < l; k++) {
+ i0 = schk[k];
+ i1 = schk[k + 1];
+
+ ti0 = m_subtimes[i0].orgStart;
+ ds = m_subtimes[i1].orgStart - ti0;
- ASSERT(k > 0);
if (ds == 0) {
- SetSTS0(start, end, ti0);
+ SetSTS0(start, i1, ti0);
} else {
- SetSTS1(start, end, ti0, m, i0);
+ m = double(m_subtimes[i1].newStart - m_subtimes[i0].newStart) / ds;
+ SetSTS1(start, i1, ti0, m, i0);
}
+
}
- i = end;
+ ASSERT(k > 0);
+ if (ds == 0) {
+ SetSTS0(start, end, ti0);
+ } else {
+ SetSTS1(start, end, ti0, m, i0);
+ }
}
+
+ i = end;
}
m_sts.CreateSegments();
@@ -419,11 +443,11 @@ void CPlayerSubresyncBar::UpdatePreview()
}
}
-void CPlayerSubresyncBar::SetSTS0(int& start, int end, int ti0)
+void CPlayerSubresyncBar::SetSTS0(int& start, int end, REFERENCE_TIME ti0)
{
for (; start < end; start++) {
m_sts[start].start = ti0;
- int endpos;
+ REFERENCE_TIME endpos;
if (m_displayData[start].flags & TEMOD) {
endpos = m_subtimes[start].newEnd;
} else {
@@ -433,19 +457,19 @@ void CPlayerSubresyncBar::SetSTS0(int& start, int end, int ti0)
}
}
-void CPlayerSubresyncBar::SetSTS1(int& start, int end, int ti0, double m, int i0)
+void CPlayerSubresyncBar::SetSTS1(int& start, int end, REFERENCE_TIME ti0, double m, int i0)
{
for (; start < end; start++) {
- m_sts[start].start = int((m_subtimes[start].orgStart - ti0) * m + m_subtimes[i0].newStart);
- int endpos;
+ m_sts[start].start = REFERENCE_TIME((m_subtimes[start].orgStart - ti0) * m + m_subtimes[i0].newStart);
+ REFERENCE_TIME endpos;
if (m_displayData[start].flags & TEMOD) {
endpos = m_subtimes[start].newEnd;
} else {
- int diff = m_subtimes[start].orgEnd - m_subtimes[start].orgStart;
+ REFERENCE_TIME diff = m_subtimes[start].orgEnd - m_subtimes[start].orgStart;
if (m_mode == VOBSUB) {
endpos = m_sts[start].start + diff;
} else {
- endpos = m_sts[start].start + int(diff * m);
+ endpos = m_sts[start].start + REFERENCE_TIME(diff * m);
}
}
m_sts[start].end = endpos;
@@ -487,7 +511,7 @@ void CPlayerSubresyncBar::SetCheck(int iItem, bool bStart, bool bEnd)
}
}
-bool CPlayerSubresyncBar::ModStart(int iItem, int t, bool bReset)
+bool CPlayerSubresyncBar::ModStart(int iItem, REFERENCE_TIME t, bool bReset)
{
bool bRet = false;
bool bStartMod, bEndMod, bStartAdj, bEndAdj;
@@ -506,6 +530,8 @@ bool CPlayerSubresyncBar::ModStart(int iItem, int t, bool bReset)
} else if (bReset) {
st.newStart = st.newEnd - (st.orgEnd - st.orgStart);
}
+ m_newStartsIndex.erase(st.itIndex);
+ st.itIndex = m_newStartsIndex.emplace(st.newStart, size_t(iItem));
SetCheck(iItem, !bReset, bEndMod);
}
@@ -513,7 +539,7 @@ bool CPlayerSubresyncBar::ModStart(int iItem, int t, bool bReset)
return bRet;
}
-bool CPlayerSubresyncBar::ModEnd(int iItem, int t, bool bReset)
+bool CPlayerSubresyncBar::ModEnd(int iItem, REFERENCE_TIME t, bool bReset)
{
bool bRet = false;
bool bStartMod, bEndMod, bStartAdj, bEndAdj;
@@ -529,6 +555,8 @@ bool CPlayerSubresyncBar::ModEnd(int iItem, int t, bool bReset)
st.newEnd = t;
if (!bStartMod) {
st.newStart = st.newEnd - (st.orgEnd - st.orgStart);
+ m_newStartsIndex.erase(st.itIndex);
+ st.itIndex = m_newStartsIndex.emplace(st.newStart, size_t(iItem));
} else if (bReset) {
st.newEnd = st.newStart + (st.orgEnd - st.orgStart);
}
@@ -540,6 +568,7 @@ bool CPlayerSubresyncBar::ModEnd(int iItem, int t, bool bReset)
}
BEGIN_MESSAGE_MAP(CPlayerSubresyncBar, CPlayerBar)
+ ON_WM_MEASUREITEM()
ON_WM_SIZE()
ON_NOTIFY(LVN_GETDISPINFO, IDC_SUBRESYNCLIST, OnGetDisplayInfo)
ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_SUBRESYNCLIST, OnBeginlabeleditList)
@@ -571,19 +600,22 @@ void CPlayerSubresyncBar::OnGetDisplayInfo(NMHDR* pNMHDR, LRESULT* pResult)
NMLVDISPINFO* pDispInfo = (NMLVDISPINFO*)pNMHDR;
LV_ITEM* pItem = &pDispInfo->item;
- if (pItem->iItem < 0 || (size_t)pItem->iItem >= m_displayData.GetCount()) {
+ if (pItem->iItem < 0 || size_t(pItem->iItem) >= m_displayData.size()) {
return;
}
if (pItem->mask & LVIF_TEXT) {
- auto formatTime = [](int t, TCHAR * buff, size_t buffLen) {
+ auto formatTime = [](REFERENCE_TIME t, TCHAR * buff, size_t buffLen) {
+ int ms = int(RT2MS(abs(t)));
+ int s = ms / 1000;
+ int m = s / 60;
_stprintf_s(buff, buffLen, t >= 0
? _T("%02d:%02d:%02d.%03d")
: _T("-%02d:%02d:%02d.%03d"),
- abs(t) / 60 / 60 / 1000,
- (abs(t) / 60 / 1000) % 60,
- (abs(t) / 1000) % 60,
- abs(t) % 1000);
+ m / 60,
+ m % 60,
+ s % 60,
+ ms % 1000);
};
switch (pItem->iSubItem) {
@@ -674,7 +706,7 @@ void CPlayerSubresyncBar::OnGetDisplayInfoVobSub(LV_ITEM* pItem)
}
}
-static bool ParseTime(CString str, int& ret, bool bWarn = true)
+static bool ParseTime(CString str, REFERENCE_TIME& ret, bool bWarn = true)
{
int sign = 1, h, m, s, ms;
TCHAR c;
@@ -693,7 +725,7 @@ static bool ParseTime(CString str, int& ret, bool bWarn = true)
&& 0 <= m && m < 60
&& 0 <= s && s < 60
&& 0 <= ms && ms < 1000) {
- ret = sign * (h * 60 * 60 * 1000 + m * 60 * 1000 + s * 1000 + ms);
+ ret = MS2RT(sign * (h * 60 * 60 * 1000 + m * 60 * 1000 + s * 1000 + ms));
return true;
}
@@ -761,7 +793,7 @@ void CPlayerSubresyncBar::OnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult)
switch (pItem->iSubItem) {
case COL_START: {
- int t;
+ REFERENCE_TIME t;
if (ParseTime(pItem->pszText, t)) {
bNeedsUpdate = ModStart(pItem->iItem, t);
@@ -771,7 +803,7 @@ void CPlayerSubresyncBar::OnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult)
break;
case COL_END:
if (m_mode == TEXTSUB) {
- int t;
+ REFERENCE_TIME t;
if (ParseTime(pItem->pszText, t)) {
bNeedsUpdate = ModEnd(pItem->iItem, t);
@@ -864,7 +896,7 @@ void CPlayerSubresyncBar::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
EFFECTFIRST, EFFECTLAST = EFFECTFIRST + 1000
};
- CStringArray styles;
+ CStringArray stylesNames;
CStringArray actors;
CStringArray effects;
@@ -908,7 +940,7 @@ void CPlayerSubresyncBar::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
CString key;
STSStyle* val;
m_sts.m_styles.GetNextAssoc(pos, key, val);
- styles.Add(key);
+ stylesNames.Add(key);
m.AppendMenu(MF_STRING | MF_ENABLED, id++, key);
}
@@ -1024,9 +1056,13 @@ void CPlayerSubresyncBar::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
STSEntry entry = m_sts[iItem];
m_sts.InsertAt(iItem + 1, entry);
SubTime subtime = m_subtimes[iItem];
- m_subtimes.InsertAt(iItem + 1, subtime);
+ m_subtimes.insert(m_subtimes.begin() + iItem + 1, subtime);
+ m_subtimes[iItem + 1].itIndex = m_newStartsIndex.emplace(m_subtimes[iItem + 1].newStart, size_t(iItem + 1));
+ for (size_t j = size_t(iItem + 2); j < m_subtimes.size(); j++) {
+ m_subtimes[j].itIndex->second++;
+ }
DisplayData displayData = m_displayData[iItem];
- m_displayData.InsertAt(iItem + 1, displayData);
+ m_displayData.insert(m_displayData.begin() + iItem + 1, displayData);
}
m_list.SetItemCount((int)m_sts.GetCount());
@@ -1046,8 +1082,12 @@ void CPlayerSubresyncBar::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
for (INT_PTR i = 0, l = items.GetCount(); i < l; i++) {
iItem = items[i];
m_sts.RemoveAt(iItem);
- m_subtimes.RemoveAt(iItem);
- m_displayData.RemoveAt(iItem);
+ m_newStartsIndex.erase(m_subtimes[iItem].itIndex);
+ m_subtimes.erase(m_subtimes.begin() + iItem);
+ for (size_t j = size_t(iItem); j < m_subtimes.size(); j++) {
+ m_subtimes[j].itIndex->second--;
+ }
+ m_displayData.erase(m_displayData.begin() + iItem);
}
m_list.SetItemCount((int)m_sts.GetCount());
@@ -1070,7 +1110,7 @@ void CPlayerSubresyncBar::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
bNeedsUpdate = true;
break;
case SETCS:
- ModStart(iItem, (int)(m_rt / 10000));
+ ModStart(iItem, m_rt);
bNeedsUpdate = true;
break;
case RESETE:
@@ -1082,12 +1122,12 @@ void CPlayerSubresyncBar::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
bNeedsUpdate = true;
break;
case SETCE:
- ModEnd(iItem, (int)(m_rt / 10000));
+ ModEnd(iItem, m_rt);
bNeedsUpdate = true;
break;
default:
if (STYLEFIRST <= id && id <= STYLELAST) {
- CString s = styles[id - STYLEFIRST];
+ CString s = stylesNames[id - STYLEFIRST];
if (m_sts[iItem].style != s) {
m_sts[iItem].style = s;
bNeedsUpdate = true;
@@ -1099,11 +1139,11 @@ void CPlayerSubresyncBar::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
STSStyle* stss = m_sts.GetStyle(iItem);
int iSelPage = 0;
- POSITION pos = m_sts.m_styles.GetStartPosition();
- for (int i = 0; pos; i++) {
+ POSITION posStyles = m_sts.m_styles.GetStartPosition();
+ for (int i = 0; posStyles; i++) {
CString key;
STSStyle* val;
- m_sts.m_styles.GetNextAssoc(pos, key, val);
+ m_sts.m_styles.GetNextAssoc(posStyles, key, val);
CAutoPtr<CPPageSubStyle> page(DEBUG_NEW CPPageSubStyle());
page->InitStyle(key, *val);
@@ -1167,15 +1207,12 @@ void CPlayerSubresyncBar::OnNMDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
if (lpnmlv->iItem >= 0 && lpnmlv->iSubItem >= 0 && (m_mode == VOBSUB || m_mode == TEXTSUB)) {
- if (CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd()) {
- int t = 0;
- if (lpnmlv->iSubItem > COL_PREVEND || !ParseTime(m_list.GetItemText(lpnmlv->iItem, lpnmlv->iSubItem), t, false)) {
- t = m_sts[lpnmlv->iItem].start;
+ if (CMainFrame* pMainFrame = AfxGetMainFrame()) {
+ REFERENCE_TIME rt;
+ if (lpnmlv->iSubItem > COL_PREVEND || !ParseTime(m_list.GetItemText(lpnmlv->iItem, lpnmlv->iSubItem), rt, false)) {
+ rt = m_sts[lpnmlv->iItem].start;
}
-
- REFERENCE_TIME rt = (REFERENCE_TIME)t * 10000;
-
- pFrame->SeekTo(rt);
+ pMainFrame->SeekTo(rt);
}
}
@@ -1233,7 +1270,7 @@ void CPlayerSubresyncBar::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
// if (m_totalGroups > 0)
clrTextBk -= ((m_itemGroups[pLVCD->nmcd.dwItemSpec] & 1) ? 0x100010 : 0x200020);
- if (m_sts[pLVCD->nmcd.dwItemSpec].start <= m_rt / 10000 && m_rt / 10000 < m_sts[pLVCD->nmcd.dwItemSpec].end) {
+ if (m_sts[pLVCD->nmcd.dwItemSpec].start <= m_rt && m_rt < m_sts[pLVCD->nmcd.dwItemSpec].end) {
clrText |= 0xFF;
}
@@ -1330,7 +1367,7 @@ bool CPlayerSubresyncBar::HandleShortCuts(const MSG* pMsg)
bHandled = true;
break;
case VK_F5:
- ModStart(iItem, (int)(m_rt / 10000));
+ ModStart(iItem, m_rt);
bHandled = true;
break;
case VK_F2:
@@ -1342,7 +1379,7 @@ bool CPlayerSubresyncBar::HandleShortCuts(const MSG* pMsg)
bHandled = true;
break;
case VK_F6:
- ModEnd(iItem, (int)(m_rt / 10000));
+ ModEnd(iItem, m_rt);
bHandled = bStep = true;
break;
}
@@ -1367,27 +1404,37 @@ bool CPlayerSubresyncBar::HandleShortCuts(const MSG* pMsg)
return bHandled;
}
+void CPlayerSubresyncBar::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
+{
+ __super::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
+ if (m_itemHeight == 0) {
+ m_itemHeight = lpMeasureItemStruct->itemHeight;
+ }
+ lpMeasureItemStruct->itemHeight = m_pMainFrame->m_dpi.ScaleSystemToOverrideY(m_itemHeight);
+}
+
int CPlayerSubresyncBar::FindNearestSub(REFERENCE_TIME& rtPos, bool bForward)
{
- if (m_subtimes.IsEmpty()) {
+ if (m_subtimes.empty()) {
return -2;
}
- int lCurTime = (int)(rtPos / 10000) + (bForward ? 1 : -1);
- int subCount = (int)m_sts.GetCount();
+ REFERENCE_TIME lCurTime = rtPos + (bForward ? 1 : -1);
- if (lCurTime < m_subtimes[0].newStart) {
- rtPos = (REFERENCE_TIME)m_subtimes[0].newStart * 10000;
- return bForward ? 0 : -1;
- } else if (lCurTime > m_subtimes[subCount - 1].newStart) {
- rtPos = (REFERENCE_TIME)m_subtimes[subCount - 1].newStart * 10000;
- return bForward ? -1 : subCount - 1;
+ if (lCurTime < m_newStartsIndex.begin()->first) {
+ size_t i = m_newStartsIndex.begin()->second;
+ rtPos = m_subtimes[i].newStart;
+ return bForward ? int(i) : -1;
+ } else if (lCurTime > m_newStartsIndex.rbegin()->first) {
+ size_t i = m_newStartsIndex.rbegin()->second;
+ rtPos = m_subtimes[i].newStart;
+ return bForward ? -1 : int(i);
}
- for (int i = 1; i < subCount; i++) {
- if ((lCurTime >= m_subtimes[i - 1].newStart) && (lCurTime < m_subtimes[i].newStart)) {
- rtPos = bForward ? (REFERENCE_TIME)m_subtimes[i].newStart * 10000 : (REFERENCE_TIME)m_subtimes[i - 1].newStart * 10000;
- return bForward ? i : i - 1;
+ for (auto it = m_newStartsIndex.begin(), itPrec = it++; it != m_newStartsIndex.end(); it++, itPrec++) {
+ if (lCurTime >= itPrec->first && lCurTime < it->first) {
+ rtPos = bForward ? it->first : itPrec->first;
+ return int(bForward ? it->second : itPrec->second);
}
}
@@ -1408,7 +1455,7 @@ bool CPlayerSubresyncBar::ShiftSubtitle(int nItem, long lValue, REFERENCE_TIME&
UpdatePreview();
SaveSubtitle();
bRet = true;
- rtPos = (REFERENCE_TIME)m_subtimes[nItem].newStart * 10000;
+ rtPos = m_subtimes[nItem].newStart;
}
return bRet;
}
diff --git a/src/mpc-hc/PlayerSubresyncBar.h b/src/mpc-hc/PlayerSubresyncBar.h
index 1e8ebc378..c5bda41de 100644
--- a/src/mpc-hc/PlayerSubresyncBar.h
+++ b/src/mpc-hc/PlayerSubresyncBar.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,13 +21,17 @@
#pragma once
-#include <afxcview.h>
#include "PlayerBar.h"
#include "PlayerListCtrl.h"
-#include "../Subtitles/RTS.h"
+#include "../Subtitles/STS.h"
#include "../Subtitles/VobSubFile.h"
+#include <map>
+#include <vector>
+class CMainFrame;
+interface ISubStream;
+
// CPlayerSubresyncBar
class CPlayerSubresyncBar : public CPlayerBar
@@ -40,7 +44,14 @@ private:
CPlayerListCtrl m_list;
+ CMainFrame* m_pMainFrame;
+
CFont m_font;
+ void ScaleFont();
+
+ int m_itemHeight = 0;
+ EventClient m_eventc;
+ void EventCallback(MpcEvent ev);
CCritSec* m_pSubLock;
CComPtr<ISubStream> m_pSubStream;
@@ -78,26 +89,23 @@ private:
};
MODE m_mode;
- //bool m_bUnlink;
-
+ std::multimap<REFERENCE_TIME, size_t> m_newStartsIndex;
struct SubTime {
- int orgStart, newStart, orgEnd, newEnd;
+ REFERENCE_TIME orgStart, newStart, orgEnd, newEnd;
+ std::multimap<REFERENCE_TIME, size_t>::iterator itIndex;
};
- CAtlArray<SubTime> m_subtimes;
+ std::vector<SubTime> m_subtimes;
CSimpleTextSubtitle m_sts;
CAtlArray<CVobSubFile::SubPos> m_vobSub;
struct DisplayData {
- int tStart, tPrevStart, tEnd, tPrevEnd;
+ REFERENCE_TIME tStart, tPrevStart, tEnd, tPrevEnd;
int flags;
};
- CAtlArray<DisplayData> m_displayData;
+ std::vector<DisplayData> m_displayData;
CString m_displayBuffer;
- int GetStartTime(int iItem);
- int GetEndTime(int iItem);
-
void UpdatePreview();
enum {
@@ -108,20 +116,20 @@ private:
TSEP = 0x80000000
};
- void SetSTS0(int& start, int end, int ti0);
- void SetSTS1(int& start, int end, int ti0, double m, int i0);
+ void SetSTS0(int& start, int end, REFERENCE_TIME ti0);
+ void SetSTS1(int& start, int end, REFERENCE_TIME ti0, double m, int i0);
void GetCheck(int iItem, bool& fStartMod, bool& fEndMod, bool& fStartAdj, bool& fEndAdj) const;
void SetCheck(int iItem, bool fStart, bool fEnd);
- bool ModStart(int iItem, int t, bool fReset = false);
- bool ModEnd(int iItem, int t, bool fReset = false);
+ bool ModStart(int iItem, REFERENCE_TIME t, bool fReset = false);
+ bool ModEnd(int iItem, REFERENCE_TIME t, bool fReset = false);
void OnGetDisplayInfoTextSub(LV_ITEM* pItem);
void OnGetDisplayInfoVobSub(LV_ITEM* pItem);
public:
- CPlayerSubresyncBar();
+ CPlayerSubresyncBar(CMainFrame* pMainFrame);
virtual ~CPlayerSubresyncBar();
BOOL Create(CWnd* pParentWnd, UINT defDockBarID, CCritSec* pSubLock);
@@ -148,6 +156,7 @@ protected:
DECLARE_MESSAGE_MAP()
+ void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnGetDisplayInfo(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnBeginlabeleditList(NMHDR* pNMHDR, LRESULT* pResult);
diff --git a/src/mpc-hc/PlayerToolBar.cpp b/src/mpc-hc/PlayerToolBar.cpp
index e81c35785..ac408e253 100644
--- a/src/mpc-hc/PlayerToolBar.cpp
+++ b/src/mpc-hc/PlayerToolBar.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,13 +21,15 @@
#include "stdafx.h"
#include "mplayerc.h"
-#include <math.h>
+#include <cmath>
#include <atlbase.h>
#include <afxpriv.h>
#include "MPCPngImage.h"
#include "PlayerToolBar.h"
#include "MainFrm.h"
-#include "WinAPIUtils.h"
+#include "PathUtils.h"
+#include "SVGImage.h"
+#include "ImageGrayer.h"
// CPlayerToolBar
@@ -35,39 +37,86 @@ IMPLEMENT_DYNAMIC(CPlayerToolBar, CToolBar)
CPlayerToolBar::CPlayerToolBar(CMainFrame* pMainFrame)
: m_pMainFrame(pMainFrame)
, m_nButtonHeight(16)
- , m_pButtonsImages(nullptr)
, m_volumeMinSizeInc(0)
{
+ GetEventd().Connect(m_eventc, {
+ MpcEvent::DPI_CHANGED,
+ MpcEvent::DEFAULT_TOOLBAR_SIZE_CHANGED,
+ }, std::bind(&CPlayerToolBar::EventCallback, this, std::placeholders::_1));
}
CPlayerToolBar::~CPlayerToolBar()
{
- SAFE_DELETE(m_pButtonsImages);
}
-bool CPlayerToolBar::LoadExternalToolBar(CImage* image)
+bool CPlayerToolBar::LoadExternalToolBar(CImage& image)
{
- bool success = true;
- CString path = GetProgramPath();
-
- // Try to load an external PNG toolbar first
- if (FAILED(image->Load(path + _T("toolbar.png")))) {
- // If it fails, try to load an external BMP toolbar
- if (FAILED(image->Load(path + _T("toolbar.bmp")))) {
- if (AfxGetMyApp()->GetAppDataPath(path)) {
- // Try to load logo from AppData path
- if (FAILED(image->Load(path + _T("\\toolbar.png")))) {
- if (FAILED(image->Load(path + _T("\\toolbar.bmp")))) {
- success = false;
- }
+ // Paths and extensions to try (by order of preference)
+ std::vector<CString> paths({ PathUtils::GetProgramPath() });
+ CString appDataPath;
+ if (AfxGetMyApp()->GetAppDataPath(appDataPath)) {
+ paths.emplace_back(appDataPath);
+ }
+ const std::vector<CString> extensions({ _T("png"), _T("bmp") });
+
+ // TODO: Find a better solution?
+ float dpiScaling = (float)std::min(m_pMainFrame->m_dpi.ScaleFactorX(), m_pMainFrame->m_dpi.ScaleFactorY());
+
+ // Try loading the external toolbar
+ for (const auto& path : paths) {
+ if (SUCCEEDED(SVGImage::Load(PathUtils::CombinePaths(path, _T("toolbar.svg")), image, dpiScaling))) {
+ return true;
+ }
+
+ for (const auto& ext : extensions) {
+ if (SUCCEEDED(image.Load(PathUtils::CombinePaths(path, _T("toolbar.") + ext)))) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+void CPlayerToolBar::LoadToolbarImage()
+{
+ // We are currently not aware of any cases where the scale factors are different
+ float dpiScaling = (float)std::min(m_pMainFrame->m_dpi.ScaleFactorX(), m_pMainFrame->m_dpi.ScaleFactorY());
+ float defaultToolbarScaling = AfxGetAppSettings().nDefaultToolbarSize / 16.0f;
+
+ CImage image;
+ if (LoadExternalToolBar(image) || (!AfxGetAppSettings().bUseLegacyToolbar && SUCCEEDED(SVGImage::Load(IDF_SVG_TOOLBAR, image, dpiScaling * defaultToolbarScaling)))) {
+ CBitmap* bmp = CBitmap::FromHandle(image);
+ int width = image.GetWidth();
+ int height = image.GetHeight();
+ int bpp = image.GetBPP();
+ if (width == height * 15) {
+ // the manual specifies that sizeButton should be sizeImage inflated by (7, 6)
+ SetSizes(CSize(height + 7, height + 6), CSize(height, height));
+
+ m_pButtonsImages.reset(DEBUG_NEW CImageList());
+ if (bpp == 32) {
+ m_pButtonsImages->Create(height, height, ILC_COLOR32 | ILC_MASK, 1, 0);
+ m_pButtonsImages->Add(bmp, nullptr); // alpha is the mask
+
+ CImage imageDisabled;
+ if (ImageGrayer::Gray(image, imageDisabled)) {
+ m_pDisabledButtonsImages.reset(DEBUG_NEW CImageList());
+ m_pDisabledButtonsImages->Create(height, height, ILC_COLOR32 | ILC_MASK, 1, 0);
+ m_pDisabledButtonsImages->Add(CBitmap::FromHandle(imageDisabled), nullptr); // alpha is the mask
+ } else {
+ m_pDisabledButtonsImages = nullptr;
}
} else {
- success = false;
+ m_pButtonsImages->Create(height, height, ILC_COLOR24 | ILC_MASK, 1, 0);
+ m_pButtonsImages->Add(bmp, RGB(255, 0, 255));
}
+ m_nButtonHeight = height;
+ GetToolBarCtrl().SetImageList(m_pButtonsImages.get());
+ GetToolBarCtrl().SetDisabledImageList(m_pDisabledButtonsImages.get());
}
+ image.Destroy();
}
-
- return success;
}
BOOL CPlayerToolBar::Create(CWnd* pParentWnd)
@@ -112,29 +161,8 @@ BOOL CPlayerToolBar::Create(CWnd* pParentWnd)
m_volctrl.SetRange(0, 100);
m_nButtonHeight = 16; // reset m_nButtonHeight
- CImage image;
- if (LoadExternalToolBar(&image)) {
- CBitmap* bmp = CBitmap::FromHandle(image);
- int width = image.GetWidth();
- int height = image.GetHeight();
- int bpp = image.GetBPP();
- if (width == height * 15) {
- // the manual specifies that sizeButton should be sizeImage inflated by (7, 6)
- SetSizes(CSize(height + 7, height + 6), CSize(height, height));
- m_pButtonsImages = DEBUG_NEW CImageList();
- if (bpp == 32) {
- m_pButtonsImages->Create(height, height, ILC_COLOR32 | ILC_MASK, 1, 0);
- m_pButtonsImages->Add(bmp, nullptr); // alpha is the mask
- } else {
- m_pButtonsImages->Create(height, height, ILC_COLOR24 | ILC_MASK, 1, 0);
- m_pButtonsImages->Add(bmp, RGB(255, 0, 255));
- }
- m_nButtonHeight = height;
- GetToolBarCtrl().SetImageList(m_pButtonsImages);
- }
- image.Destroy();
- }
+ LoadToolbarImage();
return TRUE;
}
@@ -198,7 +226,7 @@ int CPlayerToolBar::GetVolume() const
if (IsMuted() || volume <= 0) {
volume = -10000;
} else {
- volume = min((int)(4000 * log10(volume / 100.0f)), 0); // 4000=2.0*100*20, where 2.0 is a special factor
+ volume = std::min((int)(4000 * log10(volume / 100.0f)), 0); // 4000=2.0*100*20, where 2.0 is a special factor
}
return volume;
@@ -214,6 +242,18 @@ void CPlayerToolBar::SetVolume(int volume)
m_volctrl.SetPosInternal(volume);
}
+void CPlayerToolBar::EventCallback(MpcEvent ev)
+{
+ switch (ev) {
+ case MpcEvent::DPI_CHANGED:
+ case MpcEvent::DEFAULT_TOOLBAR_SIZE_CHANGED:
+ LoadToolbarImage();
+ break;
+ default:
+ UNREACHABLE_CODE();
+ }
+}
+
BEGIN_MESSAGE_MAP(CPlayerToolBar, CToolBar)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
ON_WM_SIZE()
@@ -394,7 +434,7 @@ BOOL CPlayerToolBar::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
if (bi.iImage == 12) {
strTipText.LoadString(ID_VOLUME_MUTE);
} else if (bi.iImage == 13) {
- strTipText.LoadString(ID_VOLUME_MUTE_ON);
+ strTipText.LoadString(ID_VOLUME_MUTE_OFF);
} else if (bi.iImage == 14) {
strTipText.LoadString(ID_VOLUME_MUTE_DISABLED);
} else {
diff --git a/src/mpc-hc/PlayerToolBar.h b/src/mpc-hc/PlayerToolBar.h
index 4880b1064..2d8ed9e47 100644
--- a/src/mpc-hc/PlayerToolBar.h
+++ b/src/mpc-hc/PlayerToolBar.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -37,12 +37,17 @@ private:
bool IsMuted() const;
void SetMute(bool fMute = true);
int getHitButtonIdx(CPoint point);
- bool LoadExternalToolBar(CImage* image);
+ bool LoadExternalToolBar(CImage& image);
+ void LoadToolbarImage();
int m_nButtonHeight;
- CImageList* m_pButtonsImages;
+ std::unique_ptr<CImageList> m_pButtonsImages;
+ std::unique_ptr<CImageList> m_pDisabledButtonsImages;
int m_volumeMinSizeInc;
+ EventClient m_eventc;
+ void EventCallback(MpcEvent ev);
+
public:
CPlayerToolBar(CMainFrame* pMainFrame);
virtual ~CPlayerToolBar();
diff --git a/src/mpc-hc/Playlist.cpp b/src/mpc-hc/Playlist.cpp
index dae04bf47..d15453ed1 100644
--- a/src/mpc-hc/Playlist.cpp
+++ b/src/mpc-hc/Playlist.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#include "stdafx.h"
#include "mplayerc.h"
#include "Playlist.h"
+#include "PathUtils.h"
#include "SettingsDefines.h"
//
@@ -31,13 +32,15 @@
UINT CPlaylistItem::m_globalid = 0;
CPlaylistItem::CPlaylistItem()
- : m_type(file)
- , m_fInvalid(false)
+ : m_posNextShuffle(nullptr)
+ , m_posPrevShuffle(nullptr)
+ , m_type(file)
, m_duration(0)
, m_vinput(-1)
, m_vchannel(-1)
, m_ainput(-1)
, m_country(0)
+ , m_fInvalid(false)
{
m_id = m_globalid++;
}
@@ -51,7 +54,7 @@ CPlaylistItem::CPlaylistItem(const CPlaylistItem& pli)
*this = pli;
}
-CPlaylistItem& CPlaylistItem::operator = (const CPlaylistItem& pli)
+CPlaylistItem& CPlaylistItem::operator=(const CPlaylistItem& pli)
{
if (this != &pli) {
m_id = pli.m_id;
@@ -67,6 +70,8 @@ CPlaylistItem& CPlaylistItem::operator = (const CPlaylistItem& pli)
m_vchannel = pli.m_vchannel;
m_ainput = pli.m_ainput;
m_country = pli.m_country;
+ m_posNextShuffle = pli.m_posNextShuffle;
+ m_posPrevShuffle = pli.m_posPrevShuffle;
}
return *this;
}
@@ -83,15 +88,6 @@ POSITION CPlaylistItem::FindFile(LPCTSTR path)
return nullptr;
}
-static CString StripPath(CString path)
-{
- CString p = path;
- p.Replace('\\', '/');
- p.TrimRight('/');
- p = p.Mid(p.ReverseFind('/') + 1);
- return (p.IsEmpty() ? path : p);
-}
-
CString CPlaylistItem::GetLabel(int i)
{
CString str;
@@ -100,7 +96,7 @@ CString CPlaylistItem::GetLabel(int i)
if (!m_label.IsEmpty()) {
str = m_label;
} else if (!m_fns.IsEmpty()) {
- str = StripPath(m_fns.GetHead());
+ str = PathUtils::StripPathOrUrl(m_fns.GetHead());
}
} else if (i == 1) {
if (m_fInvalid) {
@@ -224,8 +220,12 @@ void CPlaylistItem::AutoLoadFiles()
// CPlaylist
//
-CPlaylist::CPlaylist()
+CPlaylist::CPlaylist(bool bShuffle /*= false*/)
: m_pos(nullptr)
+ , m_bShuffle(bShuffle)
+ , m_posHeadShuffle(nullptr)
+ , m_posTailShuffle(nullptr)
+ , m_nShuffledListSize(0)
{
}
@@ -238,13 +238,32 @@ bool CPlaylist::RemoveAll()
__super::RemoveAll();
bool bWasPlaying = (m_pos != nullptr);
m_pos = nullptr;
+ m_posHeadShuffle = m_posTailShuffle = nullptr;
+ m_nShuffledListSize = 0;
return bWasPlaying;
}
bool CPlaylist::RemoveAt(POSITION pos)
{
if (pos) {
+ // Update the shuffled list only if there is no pending reshuffle
+ if (m_bShuffle && m_nShuffledListSize == GetCount()) {
+ const CPlaylistItem& pli = GetAt(pos);
+ if (pos == m_posHeadShuffle) {
+ m_posHeadShuffle = pli.m_posNextShuffle;
+ } else {
+ GetAt(pli.m_posPrevShuffle).m_posNextShuffle = pli.m_posNextShuffle;
+ }
+ if (pos == m_posTailShuffle) {
+ m_posTailShuffle = pli.m_posPrevShuffle;
+ } else {
+ GetAt(pli.m_posNextShuffle).m_posPrevShuffle = pli.m_posPrevShuffle;
+ }
+ m_nShuffledListSize--;
+ }
+ // Actually remove the item
__super::RemoveAt(pos);
+ // Check if it was the currently playing item
if (m_pos == pos) {
m_pos = nullptr;
return true;
@@ -286,11 +305,7 @@ void CPlaylist::SortById()
}
qsort(a.GetData(), a.GetCount(), sizeof(plsort_t), compare);
for (size_t i = 0; i < a.GetCount(); i++) {
- AddTail(GetAt(a[i].pos));
- __super::RemoveAt(a[i].pos);
- if (m_pos == a[i].pos) {
- m_pos = GetTailPosition();
- }
+ MoveToTail(a[i].pos);
}
}
@@ -306,11 +321,7 @@ void CPlaylist::SortByName()
}
qsort(a.GetData(), a.GetCount(), sizeof(plsort2_t), compare2);
for (size_t i = 0; i < a.GetCount(); i++) {
- AddTail(GetAt(a[i].pos));
- __super::RemoveAt(a[i].pos);
- if (m_pos == a[i].pos) {
- m_pos = GetTailPosition();
- }
+ MoveToTail(a[i].pos);
}
}
@@ -324,11 +335,7 @@ void CPlaylist::SortByPath()
}
qsort(a.GetData(), a.GetCount(), sizeof(plsort2_t), compare2);
for (size_t i = 0; i < a.GetCount(); i++) {
- AddTail(GetAt(a[i].pos));
- __super::RemoveAt(a[i].pos);
- if (m_pos == a[i].pos) {
- m_pos = GetTailPosition();
- }
+ MoveToTail(a[i].pos);
}
}
@@ -342,13 +349,8 @@ void CPlaylist::Randomize()
a[i].n = rand(), a[i].pos = pos;
}
qsort(a.GetData(), a.GetCount(), sizeof(plsort_t), compare);
-
for (size_t i = 0; i < a.GetCount(); i++) {
- AddTail(GetAt(a[i].pos));
- __super::RemoveAt(a[i].pos);
- if (m_pos == a[i].pos) {
- m_pos = GetTailPosition();
- }
+ MoveToTail(a[i].pos);
}
}
@@ -362,56 +364,99 @@ void CPlaylist::SetPos(POSITION pos)
m_pos = pos;
}
-POSITION CPlaylist::Shuffle()
+POSITION CPlaylist::GetShuffleAwareHeadPosition()
{
- static INT_PTR idx = 0;
- static INT_PTR count = 0;
- static CAtlArray<plsort_t> a;
-
- ASSERT(GetCount() > 2);
- // insert or remove items in playlist, or index out of bounds then recalculate
- if ((count != GetCount()) || (idx >= GetCount())) {
- a.RemoveAll();
- idx = 0;
- a.SetCount(count = GetCount());
-
- POSITION pos = GetHeadPosition();
- for (INT_PTR i = 0; pos; i++, GetNext(pos)) {
- a[i].pos = pos; // initialize position array
- }
-
- //Use Fisher-Yates shuffle algorithm
- srand((unsigned)time(nullptr));
- for (INT_PTR i = 0; i < (count - 1); i++) {
- INT_PTR r = i + (rand() % (count - i));
- POSITION temp = a[i].pos;
- a[i].pos = a[r].pos;
- a[r].pos = temp;
- }
+ POSITION posHead;
+ if (m_bShuffle) {
+ ReshuffleIfNeeded();
+ posHead = m_posHeadShuffle;
+ } else {
+ posHead = GetHeadPosition();
}
+ return posHead;
+}
- return a[idx++].pos;
+POSITION CPlaylist::GetShuffleAwareTailPosition()
+{
+ POSITION posTail;
+ if (m_bShuffle) {
+ ReshuffleIfNeeded();
+ posTail = m_posTailShuffle;
+ } else {
+ posTail = GetTailPosition();
+ }
+ return posTail;
}
CPlaylistItem& CPlaylist::GetNextWrap(POSITION& pos)
{
- if (AfxGetAppSettings().bShufflePlaylistItems && GetCount() > 2) {
- pos = Shuffle();
+ if (m_bShuffle) {
+ ReshuffleIfNeeded();
+ pos = GetAt(pos).m_posNextShuffle;
} else {
GetNext(pos);
- if (!pos) {
- pos = GetHeadPosition();
- }
}
-
+ if (!pos) {
+ pos = GetShuffleAwareHeadPosition();
+ }
return GetAt(pos);
}
CPlaylistItem& CPlaylist::GetPrevWrap(POSITION& pos)
{
- GetPrev(pos);
+ if (m_bShuffle) {
+ ReshuffleIfNeeded();
+ pos = GetAt(pos).m_posPrevShuffle;
+ } else {
+ GetPrev(pos);
+ }
if (!pos) {
- pos = GetTailPosition();
+ pos = GetShuffleAwareTailPosition();
}
return GetAt(pos);
}
+
+// Calling this function with bEnable equals to true when
+// shuffle is already enabled will re-shuffle the tracks.
+void CPlaylist::SetShuffle(bool bEnable)
+{
+ m_bShuffle = bEnable;
+
+ if (bEnable && !IsEmpty()) {
+ m_nShuffledListSize = GetCount();
+ CAtlArray<plsort_t> positions;
+ positions.SetCount(m_nShuffledListSize + 1);
+ srand((unsigned int)time(nullptr));
+ POSITION pos = GetHeadPosition();
+ for (size_t i = 0; pos; i++, GetNext(pos)) {
+ positions[i].n = rand();
+ positions[i].pos = pos;
+ }
+ qsort(positions.GetData(), m_nShuffledListSize, sizeof(plsort_t), compare);
+ positions[m_nShuffledListSize].pos = nullptr; // Termination
+
+ m_posHeadShuffle = positions[0].pos;
+ m_posTailShuffle = nullptr;
+ for (size_t i = 0; i < m_nShuffledListSize; i++) {
+ pos = positions[i].pos;
+ CPlaylistItem& pli = GetAt(pos);
+ pli.m_posPrevShuffle = m_posTailShuffle;
+ pli.m_posNextShuffle = positions[i + 1].pos;
+ m_posTailShuffle = pos;
+ }
+ } else {
+ m_posHeadShuffle = m_posTailShuffle = nullptr;
+ m_nShuffledListSize = 0;
+ }
+}
+
+// This will reshuffle if the shuffled list size
+// does not match the playlist size.
+bool CPlaylist::ReshuffleIfNeeded()
+{
+ if (m_bShuffle && m_nShuffledListSize != GetCount()) {
+ SetShuffle(true);
+ return true;
+ }
+ return false;
+}
diff --git a/src/mpc-hc/Playlist.h b/src/mpc-hc/Playlist.h
index f219a06c9..48a9f2aad 100644
--- a/src/mpc-hc/Playlist.h
+++ b/src/mpc-hc/Playlist.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2012, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -26,7 +26,11 @@
class CPlaylistItem
{
+ friend class CPlaylist;
+
static UINT m_globalid;
+ POSITION m_posNextShuffle;
+ POSITION m_posPrevShuffle;
public:
UINT m_id;
@@ -41,12 +45,11 @@ public:
bool m_fInvalid;
-public:
CPlaylistItem();
virtual ~CPlaylistItem();
CPlaylistItem(const CPlaylistItem& pli);
- CPlaylistItem& operator = (const CPlaylistItem& pli);
+ CPlaylistItem& operator=(const CPlaylistItem& pli);
POSITION FindFile(LPCTSTR path);
void AutoLoadFiles();
@@ -54,13 +57,35 @@ public:
CString GetLabel(int i = 0);
};
-class CPlaylist : public CList<CPlaylistItem>
+class CPlaylist : protected CAtlList<CPlaylistItem>
{
protected:
POSITION m_pos;
+ bool m_bShuffle;
+ POSITION m_posHeadShuffle;
+ POSITION m_posTailShuffle;
+ size_t m_nShuffledListSize;
+
+ bool ReshuffleIfNeeded();
public:
- CPlaylist();
+ using CAtlList<CPlaylistItem>::AddHead;
+ using CAtlList<CPlaylistItem>::AddTail;
+ using CAtlList<CPlaylistItem>::InsertAfter;
+ using CAtlList<CPlaylistItem>::InsertBefore;
+ using CAtlList<CPlaylistItem>::GetHead;
+ using CAtlList<CPlaylistItem>::GetTail;
+ using CAtlList<CPlaylistItem>::GetHeadPosition;
+ using CAtlList<CPlaylistItem>::GetTailPosition;
+ using CAtlList<CPlaylistItem>::GetNext;
+ using CAtlList<CPlaylistItem>::GetPrev;
+ using CAtlList<CPlaylistItem>::GetAt;
+ using CAtlList<CPlaylistItem>::GetCount;
+ using CAtlList<CPlaylistItem>::IsEmpty;
+ using CAtlList<CPlaylistItem>::MoveToHead;
+ using CAtlList<CPlaylistItem>::MoveToTail;
+
+ CPlaylist(bool bShuffle = false);
virtual ~CPlaylist();
bool RemoveAll();
@@ -70,8 +95,12 @@ public:
POSITION GetPos() const;
void SetPos(POSITION pos);
+
+ POSITION GetShuffleAwareHeadPosition();
+ POSITION GetShuffleAwareTailPosition();
+
CPlaylistItem& GetNextWrap(POSITION& pos);
CPlaylistItem& GetPrevWrap(POSITION& pos);
- POSITION Shuffle();
+ void SetShuffle(bool bEnable);
};
diff --git a/src/mpc-hc/PnSPresetsDlg.cpp b/src/mpc-hc/PnSPresetsDlg.cpp
index b795afd68..8cbe41d07 100644
--- a/src/mpc-hc/PnSPresetsDlg.cpp
+++ b/src/mpc-hc/PnSPresetsDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -29,7 +29,6 @@
IMPLEMENT_DYNAMIC(CPnSPresetsDlg, CCmdUIDialog)
CPnSPresetsDlg::CPnSPresetsDlg(CWnd* pParent /*=nullptr*/)
: CCmdUIDialog(CPnSPresetsDlg::IDD, pParent)
- , m_label(_T(""))
{
}
diff --git a/src/mpc-hc/QuicktimeGraph.cpp b/src/mpc-hc/QuicktimeGraph.cpp
index 8a86ffb2a..d43412da3 100644
--- a/src/mpc-hc/QuicktimeGraph.cpp
+++ b/src/mpc-hc/QuicktimeGraph.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,7 +20,10 @@
*/
#include "stdafx.h"
-#include <math.h>
+
+#ifndef _WIN64
+
+#include <cmath>
#include "QuicktimeGraph.h"
#include "IQTVideoSurface.h"
#include "mplayerc.h"
@@ -38,8 +41,8 @@ using namespace QT;
CQuicktimeGraph::CQuicktimeGraph(HWND hWndParent, HRESULT& hr)
: CBaseGraph()
- , m_wndDestFrame(this)
, m_fQtInitialized(false)
+ , m_wndDestFrame(this)
{
hr = S_OK;
@@ -48,11 +51,7 @@ CQuicktimeGraph::CQuicktimeGraph(HWND hWndParent, HRESULT& hr)
const CAppSettings& s = AfxGetAppSettings();
CComPtr<ISubPicAllocatorPresenter> pQTAP;
- if (s.iQTVideoRendererType == VIDRNDT_QT_DX7) {
- if (SUCCEEDED(hr = CreateAP7(CLSID_QT7AllocatorPresenter, hWndParent, &pQTAP))) {
- dwStyle &= ~WS_VISIBLE;
- }
- } else if (s.iQTVideoRendererType == VIDRNDT_QT_DX9) {
+ if (s.iQTVideoRendererType == VIDRNDT_QT_DX9) {
bool bFullscreen = (AfxGetApp()->m_pMainWnd != nullptr) && (((CMainFrame*)AfxGetApp()->m_pMainWnd)->IsD3DFullScreenMode());
if (SUCCEEDED(hr = CreateAP9(CLSID_QT9AllocatorPresenter, hWndParent, bFullscreen, &pQTAP))) {
dwStyle &= ~WS_VISIBLE;
@@ -136,21 +135,27 @@ STDMETHODIMP CQuicktimeGraph::RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPla
STDMETHODIMP CQuicktimeGraph::Run()
{
m_wndDestFrame.Run();
- m_pQTAP->SetIsRendering(true);
+ if (m_pQTAP) {
+ m_pQTAP->SetIsRendering(true);
+ }
return S_OK;
}
STDMETHODIMP CQuicktimeGraph::Pause()
{
m_wndDestFrame.Pause();
- m_pQTAP->SetIsRendering(false);
+ if (m_pQTAP) {
+ m_pQTAP->SetIsRendering(false);
+ }
return S_OK;
}
STDMETHODIMP CQuicktimeGraph::Stop()
{
m_wndDestFrame.Stop();
- m_pQTAP->SetIsRendering(false);
+ if (m_pQTAP) {
+ m_pQTAP->SetIsRendering(false);
+ }
return S_OK;
}
@@ -296,7 +301,7 @@ STDMETHODIMP CQuicktimeGraph::put_Volume(long lVolume)
{
if (m_wndDestFrame.theMovie) {
short volume = (lVolume <= -10000) ? 0 : short(pow(10.0, lVolume / 4000.0) * 256);
- volume = max<short>(min<short>(volume, 256), 0);
+ volume = std::max<short>(std::min<short>(volume, 256), 0);
SetMovieVolume(m_wndDestFrame.theMovie, volume);
return S_OK;
}
@@ -311,7 +316,7 @@ STDMETHODIMP CQuicktimeGraph::get_Volume(long* plVolume)
if (m_wndDestFrame.theMovie) {
*plVolume = (long)GetMovieVolume(m_wndDestFrame.theMovie); // [?..256]
if (*plVolume > 0) {
- *plVolume = min(long(4000 * log10(*plVolume / 256.0f)), 0l);
+ *plVolume = std::min(long(4000 * log10(*plVolume / 256.0f)), 0l);
} else {
*plVolume = -10000;
}
@@ -396,13 +401,13 @@ STDMETHODIMP_(engine_t) CQuicktimeGraph::GetEngine()
//
CQuicktimeWindow::CQuicktimeWindow(CQuicktimeGraph* pGraph)
- : m_pGraph(pGraph)
+ : m_offscreenGWorld(nullptr)
+ , m_pGraph(pGraph)
+ , m_fs(State_Stopped)
+ , m_idEndPoller(0)
, theMovie(nullptr)
, theMC(nullptr)
, m_size(0, 0)
- , m_idEndPoller(0)
- , m_fs(State_Stopped)
- , m_offscreenGWorld(nullptr)
{
}
@@ -506,7 +511,7 @@ bool CQuicktimeWindow::OpenMovie(CString fn)
CHAR buff[MAX_PATH] = {0, 0};
WideCharToMultiByte(GetACP(), 0, fn, -1, buff + 1, _countof(buff) - 1, 0, 0);
- buff[0] = strlen(buff + 1);
+ buff[0] = (CHAR)strlen(buff + 1);
// Make a FSSpec with a pascal string filename
FSSpec sfFile;
@@ -710,3 +715,5 @@ void CQuicktimeWindow::OnTimer(UINT_PTR nIDEvent)
__super::OnTimer(nIDEvent);
}
+
+#endif
diff --git a/src/mpc-hc/QuicktimeGraph.h b/src/mpc-hc/QuicktimeGraph.h
index 00e48aed8..d2caf14aa 100644
--- a/src/mpc-hc/QuicktimeGraph.h
+++ b/src/mpc-hc/QuicktimeGraph.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,14 +21,12 @@
#pragma once
+#ifndef _WIN64
+
#include "BaseGraph.h"
-#include "AllocatorCommon7.h"
#include "AllocatorCommon.h"
-#ifndef _WIN64
#include "qt/qt.h"
-#endif
-
namespace DSObjects
{
@@ -129,3 +127,4 @@ namespace DSObjects
};
}
+#endif
diff --git a/src/mpc-hc/RealMediaGraph.cpp b/src/mpc-hc/RealMediaGraph.cpp
index 2ffc24c9d..fb6910831 100644
--- a/src/mpc-hc/RealMediaGraph.cpp
+++ b/src/mpc-hc/RealMediaGraph.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,17 +22,27 @@
#include "stdafx.h"
#include "mplayerc.h"
#include "MainFrm.h"
-#include <math.h>
-#include <atlbase.h>
-#include <atlcoll.h>
-#include <InitGuid.h>
+#include "AuthDlg.h"
+#include "AllocatorCommon.h"
+#include "BaseGraph.h"
+
+#include <initguid.h>
#include "RealMediaGraph.h"
#include "RealMediaWindowlessSite.h"
+#include "realmedia/pnresult.h"
+#include "realmedia/pntypes.h"
+#include "realmedia/rmaausvc.h"
+#include "realmedia/rmaauth.h"
+#include "realmedia/rmaclsnk.h"
+#include "realmedia/rmacomm.h"
+#include "realmedia/rmacore.h"
+#include "realmedia/rmaerror.h"
+#include "realmedia/rmapckts.h"
+#include "realmedia/rmasite2.h"
#include "realmedia/rmavsurf.h"
-#include "realmedia/rmaevent.h"
-#include "realmedia/rmaprefs.h"
-#include "DSUtil.h"
-#include "AuthDlg.h"
+#include "realmedia/rmawin.h"
+
+#include <cmath>
using namespace DSObjects;
@@ -42,16 +52,16 @@ CRealMediaPlayer::CRealMediaPlayer(HWND hWndParent, CRealMediaGraph* pRMG)
: CUnknown(NAME("CRealMediaPlayer"), nullptr)
, m_pRMG(pRMG)
, m_hWndParent(hWndParent)
+ , m_VideoSize(0, 0)
+ , m_fVideoSizeChanged(true)
, m_fpCreateEngine(nullptr)
, m_fpCloseEngine(nullptr)
+ , m_fpSetDLLAccessPath(nullptr)
, m_hRealMediaCore(nullptr)
, m_State(State_Stopped)
, m_UserState(State_Stopped)
, m_nCurrent(0)
, m_nDuration(0)
- , m_VideoSize(0, 0)
- , m_fVideoSizeChanged(true)
- , m_fpSetDLLAccessPath(nullptr)
, m_unPercentComplete(0)
{
}
@@ -377,9 +387,6 @@ STDMETHODIMP CRealMediaPlayer::SitesNeeded(UINT32 uRequestID, IRMAValues* pProps
return E_FAIL;
}
- ULONG refc = ((IRMASite*)m_pTheSite)->AddRef();
- refc = ((IRMASite*)m_pTheSite)->Release();
-
if (!(m_pTheSite2 = m_pTheSite)) {
return E_NOINTERFACE;
}
@@ -576,11 +583,6 @@ CRealMediaPlayerWindowless::CRealMediaPlayerWindowless(HWND hWndParent, CRealMed
bool bFullscreen = (AfxGetApp()->m_pMainWnd != nullptr) && (((CMainFrame*)AfxGetApp()->m_pMainWnd)->IsD3DFullScreenMode());
switch (s.iRMVideoRendererType) {
default:
- case VIDRNDT_RM_DX7:
- if (FAILED(CreateAP7(CLSID_RM7AllocatorPresenter, hWndParent, &pRMAP))) {
- return;
- }
- break;
case VIDRNDT_RM_DX9:
if (FAILED(CreateAP9(CLSID_RM9AllocatorPresenter, hWndParent, bFullscreen, &pRMAP))) {
return;
@@ -829,7 +831,7 @@ STDMETHODIMP CRealMediaGraph::put_Volume(long lVolume)
}
UINT16 volume = (lVolume <= -10000) ? 0 : UINT16(pow(10.0, lVolume / 4000.0) * 100);
- volume = max<UINT16>(min<UINT16>(volume, 100u), 0u);
+ volume = std::max<UINT16>(std::min<UINT16>(volume, 100u), 0u);
return PNR_OK == m_pRMP->m_pVolume->SetVolume(volume) ? S_OK : E_FAIL;
}
@@ -844,7 +846,7 @@ STDMETHODIMP CRealMediaGraph::get_Volume(long* plVolume)
*plVolume = (long)m_pRMP->m_pVolume->GetVolume(); // [?..100]
if (*plVolume > 0) {
- *plVolume = min(long(4000 * log10(*plVolume / 100.0f)), 0l);
+ *plVolume = std::min(long(4000 * log10(*plVolume / 100.0f)), 0l);
} else {
*plVolume = -10000;
}
diff --git a/src/mpc-hc/RealMediaGraph.h b/src/mpc-hc/RealMediaGraph.h
index 79015d47e..036f30ede 100644
--- a/src/mpc-hc/RealMediaGraph.h
+++ b/src/mpc-hc/RealMediaGraph.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,25 +22,20 @@
#pragma once
#include "BaseGraph.h"
-#include "AllocatorCommon7.h"
-#include "AllocatorCommon.h"
+#include "realmedia/pncom.h"
#include "realmedia/pntypes.h"
#include "realmedia/pnwintyp.h"
-#include "realmedia/pncom.h"
-#include "realmedia/rmapckts.h"
+#include "realmedia/rmaausvc.h"
+#include "realmedia/rmaauth.h"
+#include "realmedia/rmaclsnk.h"
#include "realmedia/rmacomm.h"
-#include "realmedia/rmamon.h"
-#include "realmedia/rmafiles.h"
-#include "realmedia/rmaengin.h"
#include "realmedia/rmacore.h"
-#include "realmedia/rmaclsnk.h"
#include "realmedia/rmaerror.h"
-#include "realmedia/rmaauth.h"
-#include "realmedia/rmawin.h"
#include "realmedia/rmasite2.h"
-#include "realmedia/rmaausvc.h"
-#include "realmedia/rmavsurf.h"
+#include "realmedia/rmawin.h"
+
+interface ISubPicAllocatorPresenter2;
namespace DSObjects
diff --git a/src/mpc-hc/RealMediaWindowlessSite.cpp b/src/mpc-hc/RealMediaWindowlessSite.cpp
index 8b89b8071..f35f10eea 100644
--- a/src/mpc-hc/RealMediaWindowlessSite.cpp
+++ b/src/mpc-hc/RealMediaWindowlessSite.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,14 +20,20 @@
*/
#include "stdafx.h"
-#include "mplayerc.h"
-#include <math.h>
-#include <atlbase.h>
-#include <atlcoll.h>
-#include <InitGuid.h>
#include "RealMediaWindowlessSite.h"
#include "DSUtil.h"
+#include "realmedia/pncom.h"
+#include "realmedia/pnresult.h"
+#include "realmedia/pntypes.h"
+#include "realmedia/pnwintyp.h"
+#include "realmedia/rmacomm.h"
+#include "realmedia/rmaevent.h"
+#include "realmedia/rmapckts.h"
+#include "realmedia/rmasite2.h"
+#include "realmedia/rmavsurf.h"
+#include "realmedia/rmawin.h"
+
using namespace DSObjects;
diff --git a/src/mpc-hc/RealMediaWindowlessSite.h b/src/mpc-hc/RealMediaWindowlessSite.h
index a55f1f859..974d0e293 100644
--- a/src/mpc-hc/RealMediaWindowlessSite.h
+++ b/src/mpc-hc/RealMediaWindowlessSite.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,23 +21,13 @@
#pragma once
+#include "realmedia/pncom.h"
#include "realmedia/pntypes.h"
#include "realmedia/pnwintyp.h"
-#include "realmedia/pncom.h"
-#include "realmedia/rmapckts.h"
#include "realmedia/rmacomm.h"
-#include "realmedia/rmamon.h"
-#include "realmedia/rmafiles.h"
-#include "realmedia/rmaengin.h"
-#include "realmedia/rmacore.h"
-#include "realmedia/rmaclsnk.h"
-#include "realmedia/rmaerror.h"
-#include "realmedia/rmaauth.h"
-#include "realmedia/rmawin.h"
#include "realmedia/rmasite2.h"
-#include "realmedia/rmaausvc.h"
#include "realmedia/rmavsurf.h"
-#include "realmedia/rmaevent.h"
+#include "realmedia/rmawin.h"
namespace DSObjects
@@ -51,10 +41,10 @@ namespace DSObjects
void* pOSRegion;
REGION()
- : rects(nullptr)
- , pOSRegion(nullptr)
- , size(0)
- , numRects(0) {
+ : size(0)
+ , numRects(0)
+ , rects(nullptr)
+ , pOSRegion(nullptr) {
ZeroMemory(&extents, sizeof(extents));
}
};
@@ -68,8 +58,6 @@ namespace DSObjects
void RMADestroyRegion(REGION* reg);
REGION* RMACreateRegion();
- class CRealMediaWindowlessSite;
-
//
// CRealMediaVideoSurface
//
diff --git a/src/mpc-hc/RegFilterChooserDlg.cpp b/src/mpc-hc/RegFilterChooserDlg.cpp
index 16d19a2d2..7eaedd30b 100644
--- a/src/mpc-hc/RegFilterChooserDlg.cpp
+++ b/src/mpc-hc/RegFilterChooserDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,11 +20,13 @@
*/
#include "stdafx.h"
-#include "mplayerc.h"
-#include <dmo.h>
#include "RegFilterChooserDlg.h"
#include "FGFilter.h"
+#include "mplayerc.h"
#include "DSUtil.h"
+#include "FakeFilterMapper2.h"
+#include <initguid.h>
+#include <dmo.h>
// CRegFilterChooserDlg dialog
@@ -54,7 +56,7 @@ void CRegFilterChooserDlg::AddToList(IMoniker* pMoniker)
CComPtr<IPropertyBag> pPB;
if (SUCCEEDED(pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB)))) {
CComVariant var;
- if (SUCCEEDED(pPB->Read(CComBSTR(_T("FriendlyName")), &var, nullptr))) {
+ if (SUCCEEDED(pPB->Read(_T("FriendlyName"), &var, nullptr))) {
m_list.SetItemData(
m_list.InsertItem(-1, CString(CStringW(var.bstrVal))),
(DWORD_PTR)m_monikers.AddTail(pMoniker));
diff --git a/src/mpc-hc/RegFilterChooserDlg.h b/src/mpc-hc/RegFilterChooserDlg.h
index db424ae0d..4969e3831 100644
--- a/src/mpc-hc/RegFilterChooserDlg.h
+++ b/src/mpc-hc/RegFilterChooserDlg.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -24,6 +24,7 @@
#include <afxwin.h>
#include "ResizableLib/ResizableDialog.h"
+class FilterOverride;
// CRegFilterChooserDlg dialog
diff --git a/src/mpc-hc/SVGImage.cpp b/src/mpc-hc/SVGImage.cpp
new file mode 100644
index 000000000..b54f0f522
--- /dev/null
+++ b/src/mpc-hc/SVGImage.cpp
@@ -0,0 +1,85 @@
+/*
+* (C) 2016-2017 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#include "stdafx.h"
+#include "SVGImage.h"
+#include "mplayerc.h"
+#include <atlimage.h>
+#define NANOSVG_IMPLEMENTATION
+#include <nanosvg/src/nanosvg.h>
+#define NANOSVGRAST_IMPLEMENTATION
+#include <nanosvg/src/nanosvgrast.h>
+
+namespace
+{
+ HRESULT NSVGimageToCImage(NSVGimage* svgImage, CImage& image, float scale)
+ {
+ image.Destroy();
+
+ if (!svgImage) {
+ return E_FAIL;
+ }
+
+ NSVGrasterizer* rasterizer = nsvgCreateRasterizer();
+ if (!rasterizer) {
+ nsvgDelete(svgImage);
+ return E_FAIL;
+ }
+
+ if (!image.Create(int(svgImage->width * scale), int(svgImage->height * scale), 32)) {
+ nsvgDeleteRasterizer(rasterizer);
+ nsvgDelete(svgImage);
+ return E_FAIL;
+ }
+
+ nsvgRasterize(rasterizer, svgImage, 0.0f, 0.0f, scale,
+ static_cast<unsigned char*>(image.GetBits()),
+ image.GetWidth(), image.GetHeight(), image.GetPitch());
+
+ // NanoSVG outputs RGBA but we need BGRA so we swap red and blue
+ BYTE* bits = static_cast<BYTE*>(image.GetBits());
+ for (int y = 0; y < image.GetHeight(); y++, bits += image.GetPitch()) {
+ RGBQUAD* p = reinterpret_cast<RGBQUAD*>(bits);
+ for (int x = 0; x < image.GetWidth(); x++) {
+ std::swap(p[x].rgbRed, p[x].rgbBlue);
+ }
+ }
+
+ nsvgDeleteRasterizer(rasterizer);
+ nsvgDelete(svgImage);
+
+ return S_OK;
+ }
+}
+
+HRESULT SVGImage::Load(LPCTSTR filename, CImage& image, float scale /*= 1.0f*/)
+{
+ return NSVGimageToCImage(nsvgParseFromFile(CStringA(filename), "px", 96.0f), image, scale);
+}
+
+HRESULT SVGImage::Load(UINT uResId, CImage& image, float scale /*= 1.0f*/)
+{
+ CStringA svg;
+ if (!LoadResource(uResId, svg, _T("SVG"))) {
+ return E_FAIL;
+ }
+
+ return NSVGimageToCImage(nsvgParse(svg.GetBuffer(), "px", 96.0f), image, scale);
+}
diff --git a/src/mpc-hc/SVGImage.h b/src/mpc-hc/SVGImage.h
new file mode 100644
index 000000000..8582d2118
--- /dev/null
+++ b/src/mpc-hc/SVGImage.h
@@ -0,0 +1,32 @@
+/*
+* (C) 2016-2017 see Authors.txt
+*
+* This file is part of MPC-HC.
+*
+* MPC-HC is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+*
+* MPC-HC is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+#pragma once
+
+namespace ATL
+{
+ class CImage;
+}
+
+namespace SVGImage
+{
+ HRESULT Load(LPCTSTR filename, ATL::CImage& image, float scale = 1.0f);
+ HRESULT Load(UINT uResId, ATL::CImage& image, float scale = 1.0f);
+}
diff --git a/src/mpc-hc/SaveImageDialog.cpp b/src/mpc-hc/SaveImageDialog.cpp
index db3877b3a..025ca3c2a 100644
--- a/src/mpc-hc/SaveImageDialog.cpp
+++ b/src/mpc-hc/SaveImageDialog.cpp
@@ -84,14 +84,12 @@ END_MESSAGE_MAP()
BOOL CSaveImageDialog::OnFileNameOK()
{
if (SysVersion::IsVistaOrLater()) {
- IFileDialogCustomize* pfdc = GetIFileDialogCustomize();
- WCHAR* result;
-
- pfdc->GetEditBoxText(IDC_EDIT1, &result);
- m_nJpegQuality = _wtoi(result);
- CoTaskMemFree(result);
+ CComPtr<IFileDialogCustomize> pfdc = GetIFileDialogCustomize();
+ CComHeapPtr<WCHAR> result;
- pfdc->Release();
+ if (SUCCEEDED(pfdc->GetEditBoxText(IDC_EDIT1, &result))) {
+ m_nJpegQuality = _wtoi(result);
+ }
} else {
m_nJpegQuality = m_jpegQualitySpin.GetPos32();
}
diff --git a/src/mpc-hc/SaveSubtitlesFileDialog.cpp b/src/mpc-hc/SaveSubtitlesFileDialog.cpp
index 40dc01d1b..d325637bc 100644
--- a/src/mpc-hc/SaveSubtitlesFileDialog.cpp
+++ b/src/mpc-hc/SaveSubtitlesFileDialog.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2012-2014 see Authors.txt
+ * (C) 2012-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -34,10 +34,10 @@ CSaveSubtitlesFileDialog::CSaveSubtitlesFileDialog(
LPCTSTR lpszFilter, std::vector<Subtitle::SubType> types,
CWnd* pParentWnd)
: CSaveTextFileDialog(e, lpszDefExt, lpszFileName, lpszFilter, pParentWnd)
- , m_types(types)
+ , m_types(std::move(types))
, m_bDisableEncoding(false)
- , m_delay(delay)
, m_bDisableExternalStyleCheckBox(false)
+ , m_delay(delay)
, m_bSaveExternalStyleFile(bSaveExternalStyleFile)
{
InitCustomization();
@@ -49,8 +49,8 @@ CSaveSubtitlesFileDialog::CSaveSubtitlesFileDialog(
LPCTSTR lpszFilter, CWnd* pParentWnd)
: CSaveTextFileDialog(CTextFile::ANSI, lpszDefExt, lpszFileName, lpszFilter, pParentWnd)
, m_bDisableEncoding(true)
- , m_delay(delay)
, m_bDisableExternalStyleCheckBox(true)
+ , m_delay(delay)
, m_bSaveExternalStyleFile(FALSE)
{
InitCustomization();
diff --git a/src/mpc-hc/SaveThumbnailsDialog.cpp b/src/mpc-hc/SaveThumbnailsDialog.cpp
index aefe734a3..a6c746de2 100644
--- a/src/mpc-hc/SaveThumbnailsDialog.cpp
+++ b/src/mpc-hc/SaveThumbnailsDialog.cpp
@@ -103,20 +103,22 @@ END_MESSAGE_MAP()
BOOL CSaveThumbnailsDialog::OnFileNameOK()
{
if (SysVersion::IsVistaOrLater()) {
- IFileDialogCustomize* pfdc = GetIFileDialogCustomize();
- WCHAR* result;
-
- pfdc->GetEditBoxText(IDC_EDIT2, &result);
- m_rows = _wtoi(result);
- CoTaskMemFree(result);
- pfdc->GetEditBoxText(IDC_EDIT3, &result);
- m_cols = _wtoi(result);
- CoTaskMemFree(result);
- pfdc->GetEditBoxText(IDC_EDIT4, &result);
- m_width = _wtoi(result);
- CoTaskMemFree(result);
-
- pfdc->Release();
+ CComPtr<IFileDialogCustomize> pfdc = GetIFileDialogCustomize();
+ CComHeapPtr<WCHAR> result;
+
+ if (SUCCEEDED(pfdc->GetEditBoxText(IDC_EDIT2, &result))) {
+ m_rows = _wtoi(result);
+ }
+
+ result.Free();
+ if (SUCCEEDED(pfdc->GetEditBoxText(IDC_EDIT3, &result))) {
+ m_cols = _wtoi(result);
+ }
+
+ result.Free();
+ if (SUCCEEDED(pfdc->GetEditBoxText(IDC_EDIT4, &result))) {
+ m_width = _wtoi(result);
+ }
} else {
m_rows = m_rowsctrl.GetPos32();
m_cols = m_colsctrl.GetPos32();
diff --git a/src/mpc-hc/SettingsDefines.h b/src/mpc-hc/SettingsDefines.h
index 67a866599..efe017e66 100644
--- a/src/mpc-hc/SettingsDefines.h
+++ b/src/mpc-hc/SettingsDefines.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -55,6 +55,7 @@
#define IDS_RS_TITLEBARTEXTSTYLE _T("TitleBarTextStyle")
#define IDS_RS_CONTROLSTATE _T("ControlState")
#define IDS_RS_LOOP _T("Loop")
+#define IDS_RS_LOOPMODE _T("LoopMode")
#define IDS_RS_LOOPNUM _T("LoopNum")
#define IDS_RS_SNAPTODESKTOPEDGES _T("SnapToDesktopEdges")
#define IDS_RS_ENABLESUBTITLES _T("EnableSubtitles")
@@ -62,6 +63,13 @@
#define IDS_RS_PRIORITIZEEXTERNALSUBTITLES _T("PrioritizeExternalSubtitles")
#define IDS_RS_DISABLEINTERNALSUBTITLES _T("DisableInternalSubtitles")
#define IDS_RS_ALLOW_OVERRIDING_EXT_SPLITTER _T("AllowOverridingExternalSplitterSubtitleChoice")
+#define IDS_RS_AUTODOWNLOADSUBTITLES _T("AutoDownloadSubtitles")
+#define IDS_RS_AUTODOWNLOADSCOREMOVIES _T("AutoDownloadScoreMovies")
+#define IDS_RS_AUTODOWNLOADSCORESERIES _T("AutoDownloadScoreSeries")
+#define IDS_RS_AUTODOWNLOADSUBTITLESEXCLUDE _T("AutoDownloadSubtitlesExclude")
+#define IDS_RS_AUTOUPLOADSUBTITLES _T("AutoUploadSubtitles")
+#define IDS_RS_SUBTITLESPROVIDERS _T("SubtitlesProviders")
+#define IDS_RS_PREFERHEARINGIMPAIREDSUBTITLES _T("PreferHearingImpairedSubtitles")
#define IDS_RS_SUBTITLEPATHS _T("SubtitlePaths")
#define IDS_RS_USEDEFAULTSUBTITLESSTYLE _T("UseDefaultsubtitlesStyle")
#define IDS_RS_THUMBWIDTH _T("ThumbWidth")
@@ -69,6 +77,7 @@
#define IDS_RS_D3DFULLSCREEN _T("D3DFullScreen")
//#define IDS_RS_MONITOR_AUTOREFRESHRATE _T("MonitorAutoRefreshRate")
#define IDS_RS_SPEEDSTEP _T("SpeedStep")
+#define IDS_RS_DEFAULTTOOLBARSIZE _T("DefaultToolbarSize")
// Audio
#define IDS_RS_VOLUME _T("Volume")
@@ -141,7 +150,6 @@
#define IDS_RS_ENABLEWORKERTHREADFOROPENING _T("EnableWorkerThreadForOpening")
#define IDS_RS_PNSPRESETS _T("PnSPresets")
#define IDS_RS_AUTOLOADAUDIO _T("AutoloadAudio")
-#define IDS_RS_AUTOLOADSUBTITLES _T("AutoloadSubtitles")
#define IDS_RS_SUBTITLESLANGORDER _T("SubtitlesLanguageOrder")
#define IDS_RS_AUDIOSLANGORDER _T("AudiosLanguageOrder")
#define IDS_RS_BLOCKVSFILTER _T("BlockVSFilter")
@@ -179,11 +187,11 @@
#define IDS_RS_ONTOP _T("OnTop")
#define IDS_RS_WEBSERVERPRINTDEBUGINFO _T("WebServerPrintDebugIfo")
#define IDS_RS_WEBSERVERUSECOMPRESSION _T("WebServerUseCompression")
+#define IDS_RS_WEBUI_ENABLE_PREVIEW _T("WebUIEnablePreview")
#define IDS_RS_SNAPSHOTPATH _T("SnapshotPath")
#define IDS_RS_PRIORITY _T("Priority")
#define IDS_RS_SNAPSHOTEXT _T("SnapshotExt")
#define IDS_RS_LAUNCHFULLSCREEN _T("LaunchFullScreen")
-#define IDS_RS_ISDB _T("ISDb")
#define IDS_RS_WEBROOT _T("WebRoot")
#define IDS_RS_WEBSERVERLOCALHOSTONLY _T("WebServerLocalhostOnly")
#define IDS_RS_ASPECTRATIO_X _T("AspectRatioX")
@@ -199,7 +207,7 @@
#define IDS_RS_ENABLEEDLEDITOR _T("EnableEDLEditor")
#define IDS_RS_FULLSCREENMONITOR _T("FullScreenMonitor")
#define IDS_RS_PREVENT_MINIMIZE _T("PreventMinimize")
-#define IDS_RS_WIN7TASKBAR _T("UseWin7TaskBar")
+#define IDS_RS_ENHANCED_TASKBAR _T("UseWin7TaskBar")
#define IDS_RS_SEARCH_IN_FOLDER _T("UseSearchInFolder")
#define IDS_RS_USE_TIME_TOOLTIP _T("UseTimeTooltip")
#define IDS_RS_TIME_TOOLTIP_POSITION _T("TimeTooltipPosition")
@@ -225,6 +233,7 @@
#define IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_CHECKED _T("Checked")
#define IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_FRAMERATESTART _T("FrameRateStart")
#define IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_FRAMERATESTOP _T("FrameRateStop")
+#define IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_AUDIODELAY _T("AudioDelay")
#define IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_DM_BPP _T("BPP")
#define IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_DM_FREQ _T("Freq")
#define IDS_RS_FULLSCREEN_AUTOCHANGE_MODE_MODE_DM_SIZEX _T("SizeX")
@@ -261,6 +270,7 @@
#define IDS_RS_LCD_SUPPORT _T("LcdSupport")
#define IDS_RS_REMAINING_TIME _T("RemainingTime")
+#define IDS_RS_HIGH_PRECISION_TIMER _T("HighPrecisionTimer")
#define IDS_RS_UPDATER_AUTO_CHECK _T("UpdaterAutoCheck")
#define IDS_RS_UPDATER_LAST_CHECK _T("UpdaterLastCheck")
@@ -275,6 +285,11 @@
#define IDS_R_DLG_SUBTITLEDL _T("Dialogs\\SubtitleDl")
#define IDS_RS_DLG_SUBTITLEDL_COLWIDTH _T("ColWidth")
+#define IDS_RS_DLG_SUBTITLEDL_SORTCOLUMN _T("SortColumn")
+#define IDS_RS_DLG_SUBTITLEDL_SORTORDER _T("SortOrder")
+
+#define IDS_R_DLG_SUBTITLEUP _T("Dialogs\\SubtitleUp")
+#define IDS_RS_DLG_SUBTITLEUP_COLWIDTH _T("ColWidth")
#define IDS_R_DLG_ORGANIZE_FAV _T("Dialogs\\OrganizeFavorites")
@@ -290,6 +305,21 @@
#define IDS_RS_DEBUG_SHADERS_LASTVERSION _T("LastVersion")
#define IDS_RS_DEBUG_SHADERS_LASTFILE _T("LastFile")
#define IDS_RS_DEBUG_SHADERS_FIRSTRUN _T("FirstRun")
+#define IDS_RS_CACHESHADERS _T("CacheShaders")
+#define IDS_R_SHADER_CACHE _T("ShaderCache")
#define IDS_RS_COVER_ART _T("EnableCoverArt")
#define IDS_RS_COVER_ART_SIZE_LIMIT _T("CoverArtSizeLimit")
+#define IDS_RS_LOGGING _T("EnableLogging")
+#define IDS_RS_USE_LEGACY_TOOLBAR _T("UseLegacyToolbar")
+
+#define IDS_RS_SUBTITLE_RENDERER _T("SubtitleRenderer")
+
+#define IDS_R_SANEAR IDS_R_INTERNAL_FILTERS _T("\\Audio Renderer")
+#define IDS_RS_SANEAR_DEVICE_ID _T("DeviceId")
+#define IDS_RS_SANEAR_DEVICE_EXCLUSIVE _T("DeviceExclusive")
+#define IDS_RS_SANEAR_DEVICE_BUFFER _T("DeviceBufferDuration")
+#define IDS_RS_SANEAR_ALLOW_BITSTREAMING _T("AllowBitstreaming")
+#define IDS_RS_SANEAR_CROSSFEED_ENABLED _T("CrossfeedEnabled")
+#define IDS_RS_SANEAR_CROSSFEED_CUTOFF_FREQ _T("CrossfeedCutoffFrequency")
+#define IDS_RS_SANEAR_CROSSFEED_LEVEL _T("CrossfeedLevel")
diff --git a/src/mpc-hc/ShockwaveGraph.cpp b/src/mpc-hc/ShockwaveGraph.cpp
index 40f3093e9..16dfd4fbe 100644
--- a/src/mpc-hc/ShockwaveGraph.cpp
+++ b/src/mpc-hc/ShockwaveGraph.cpp
@@ -24,7 +24,7 @@
#include "resource.h"
#include "DSUtil.h"
#include "SysVersion.h"
-#include <math.h>
+#include <cmath>
#include <Audiopolicy.h>
#include <Mmdeviceapi.h>
diff --git a/src/mpc-hc/SkypeMoodMsgHandler.cpp b/src/mpc-hc/SkypeMoodMsgHandler.cpp
index 32523356e..47bd642c2 100644
--- a/src/mpc-hc/SkypeMoodMsgHandler.cpp
+++ b/src/mpc-hc/SkypeMoodMsgHandler.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2013 see Authors.txt
+ * (C) 2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -36,7 +36,7 @@ void SkypeMoodMsgHandler::Connect(HWND hWnd)
{
m_hWnd = hWnd;
TRACE(_T("SkypeMoodMsgHandler::Connect --> hWnd = %p\n"), hWnd);
- ::SendMessage(HWND_BROADCAST, uSkypeControlAPIDiscover, (WPARAM)hWnd, 0);
+ ::SendNotifyMessage(HWND_BROADCAST, uSkypeControlAPIDiscover, (WPARAM)hWnd, 0);
}
LRESULT SkypeMoodMsgHandler::HandleAttach(WPARAM wParam, LPARAM lParam)
diff --git a/src/mpc-hc/StatusLabel.cpp b/src/mpc-hc/StatusLabel.cpp
index 6d067031e..d1691364a 100644
--- a/src/mpc-hc/StatusLabel.cpp
+++ b/src/mpc-hc/StatusLabel.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -29,14 +29,25 @@
// CStatusLabel
IMPLEMENT_DYNAMIC(CStatusLabel, CStatic)
-CStatusLabel::CStatusLabel(bool fRightAlign, bool fAddEllipses)
+CStatusLabel::CStatusLabel(const DpiHelper& dpiHelper, bool fRightAlign, bool fAddEllipses)
: m_fRightAlign(fRightAlign)
, m_fAddEllipses(fAddEllipses)
{
- m_font.m_hObject = nullptr;
+ ScaleFont(dpiHelper);
+}
+
+CStatusLabel::~CStatusLabel()
+{
+}
+
+void CStatusLabel::ScaleFont(const DpiHelper& dpiHelper)
+{
+ m_font.DeleteObject();
+
if (SysVersion::IsVistaOrLater()) {
LOGFONT lf;
GetStatusFont(&lf);
+ lf.lfHeight = dpiHelper.ScaleSystemToOverrideY(lf.lfHeight);
VERIFY(m_font.CreateFontIndirect(&lf));
} else {
HDC hdc = ::GetDC(nullptr);
@@ -48,10 +59,6 @@ CStatusLabel::CStatusLabel(bool fRightAlign, bool fAddEllipses)
}
}
-CStatusLabel::~CStatusLabel()
-{
-}
-
BEGIN_MESSAGE_MAP(CStatusLabel, CStatic)
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
diff --git a/src/mpc-hc/StatusLabel.h b/src/mpc-hc/StatusLabel.h
index dc84e3364..53ede26bb 100644
--- a/src/mpc-hc/StatusLabel.h
+++ b/src/mpc-hc/StatusLabel.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,6 +21,8 @@
#pragma once
+#include "DpiHelper.h"
+
// CStatusLabel
class CStatusLabel : public CStatic
@@ -32,9 +34,10 @@ private:
CFont m_font;
public:
- CStatusLabel(bool fRightAlign, bool fAddEllipses);
+ CStatusLabel(const DpiHelper& dpiHelper, bool fRightAlign, bool fAddEllipses);
virtual ~CStatusLabel();
+ void ScaleFont(const DpiHelper& dpiHelper);
CFont& GetFont() { return m_font; }
void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
diff --git a/src/mpc-hc/SubtitleDlDlg.cpp b/src/mpc-hc/SubtitleDlDlg.cpp
index 21c84a622..e8507c8b2 100644
--- a/src/mpc-hc/SubtitleDlDlg.cpp
+++ b/src/mpc-hc/SubtitleDlDlg.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,301 +20,185 @@
*/
#include "stdafx.h"
-#include <afxwin.h>
#include "SubtitleDlDlg.h"
+#include "SubtitlesProvider.h"
+#include "mplayerc.h"
#include "MainFrm.h"
-#include "DSUtil.h"
+#include "ISOLang.h"
+#include "PPageSubMisc.h"
-// User Defined Window Messages
-#define UWM_PARSE (WM_USER + 100)
-#define UWM_FAILED (WM_USER + 101)
-
-CSubtitleDlDlg::CSubtitleDlDlg(CWnd* pParent, const CStringA& url, const CString& filename)
- : CResizableDialog(CSubtitleDlDlg::IDD, pParent)
- , m_url(url)
- , m_ps(nullptr, 0, TRUE)
- , m_defps(nullptr, filename)
- , m_status()
- , m_pTA(nullptr)
- , m_fReplaceSubs(false)
-{
-}
+BEGIN_MESSAGE_MAP(CSubtitleDlDlgListCtrl, CListCtrl)
+ ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolNeedText)
+END_MESSAGE_MAP()
-CSubtitleDlDlg::~CSubtitleDlDlg()
+void CSubtitleDlDlgListCtrl::PreSubclassWindow()
{
- delete m_pTA;
+ __super::PreSubclassWindow();
+ GetToolTips()->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOREDRAW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOOWNERZORDER);
}
-void CSubtitleDlDlg::DoDataExchange(CDataExchange* pDX)
+BOOL CSubtitleDlDlgListCtrl::OnToolNeedText(UINT id, NMHDR* pNMHDR, LRESULT*)
{
- __super::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_LIST1, m_list);
-}
+ CPoint pt(GetMessagePos());
+ ScreenToClient(&pt);
-size_t CSubtitleDlDlg::StrMatch(LPCTSTR a, LPCTSTR b)
-{
- size_t count = 0;
- size_t alen = _tcslen(a);
- size_t blen = _tcslen(b);
+ LVHITTESTINFO lvhti = { pt };
+ int nItem = SubItemHitTest(&lvhti);
+ int nSubItem = lvhti.iSubItem;
- for (size_t i = 0; i < alen && i < blen; i++) {
- if (_totlower(a[i]) != _totlower(b[i])) {
- break;
- } else {
- count++;
- }
+ if (nItem == -1 || !(lvhti.flags & LVHT_ONITEMLABEL) || nSubItem != CSubtitleDlDlg::COL_FILENAME) {
+ return FALSE;
}
- return count;
-}
-CString CSubtitleDlDlg::LangCodeToName(LPCSTR code)
-{
- // accept only three-letter language codes
- size_t codeLen = strlen(code);
- if (codeLen != 3) {
- return _T("");
+ auto subtitleInfo = reinterpret_cast<SubtitlesInfo*>(GetItemData(nItem));
+ if (!subtitleInfo || subtitleInfo->releaseNames.empty()) {
+ return FALSE;
}
- CString name = ISO6392ToLanguage(code);
- if (!name.IsEmpty()) {
- // workaround for ISO6392ToLanguage function behaivior
- // for unknown language code it returns the code parameter back
- if (code != name) {
- return name;
- }
- }
+ static CString tooltipText;
+ tooltipText = SubtitlesProvidersUtils::JoinContainer(subtitleInfo->releaseNames, "\n").c_str();
+ ASSERT(!tooltipText.IsEmpty());
- // support abbreviations loosely based on first letters of language name
-
- // this list is limited to upload-enabled languages
- // retrieved with:
- // wget -q -O- http://www.opensubtitles.org/addons/export_languages.php | \
- // awk 'NR > 1 { if ($(NF-1) == "1") print ("\"" $(NF-2) "\",")}'
- static LPCSTR ltable[] = {
- "Albanian", "Arabic", "Armenian", "Basque", "Bengali", "Bosnian", "Breton", "Bulgarian",
- "Burmese", "Catalan", "Chinese", "Czech", "Danish", "Dutch", "English", "Esperanto",
- "Estonian", "Finnish", "French", "Georgian", "German", "Galician", "Greek", "Hebrew",
- "Hindi", "Croatian", "Hungarian", "Icelandic", "Indonesian", "Italian", "Japanese", "Kazakh",
- "Khmer", "Korean", "Latvian", "Lithuanian", "Luxembourgish", "Macedonian", "Malayalam", "Malay",
- "Mongolian", "Norwegian", "Occitan", "Persian", "Polish", "Portuguese", "Russian", "Serbian",
- "Sinhalese", "Slovak", "Slovenian", "Spanish", "Swahili", "Swedish", "Syriac", "Telugu",
- "Tagalog", "Thai", "Turkish", "Ukrainian", "Urdu", "Vietnamese", "Romanian", "Brazilian",
- };
-
- for (size_t i = 0; i < _countof(ltable); ++i) {
- CString name2 = ltable[i];
- if (StrMatch(name2, CString(code)) == codeLen) {
- return name2;
- }
- }
- return _T("");
-}
+ auto pTTT = reinterpret_cast<TOOLTIPTEXT*>(pNMHDR);
+ pTTT->lpszText = tooltipText.GetBuffer();
-int CALLBACK CSubtitleDlDlg::DefSortCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
-{
- PDEFPARAMSORT defps = reinterpret_cast<PDEFPARAMSORT>(lParamSort);
- TCHAR left[MAX_PATH] = _T("");
- TCHAR right[MAX_PATH] = _T("");
+ // Needed for multiline tooltips.
+ GetToolTips()->SetMaxTipWidth(1000);
- // sort by language first
- ListView_GetItemText(defps->m_hWnd, lParam1, COL_LANGUAGE, left, sizeof(left));
- ListView_GetItemText(defps->m_hWnd, lParam2, COL_LANGUAGE, right, sizeof(right));
- // user-provided sort order
- int lpos, rpos;
- if (!defps->m_langPos.Lookup(left, lpos)) {
- lpos = INT_MAX;
- }
- if (!defps->m_langPos.Lookup(right, rpos)) {
- rpos = INT_MAX;
- }
- if (lpos < rpos) {
- return -1;
- } else if (lpos > rpos) {
- return 1;
- } else if (lpos == INT_MAX && rpos == INT_MAX) {
- // lexicographical order
- int res = _tcscmp(left, right);
- if (res != 0) {
- return res;
- }
- }
+ // Force ListView internal variables related to LABELTIP to invalidate. This is needed to use both custom tooltip and LABELTIP.
+ // When LABELTIP is enabled ListView internally changes tooltip to be draw in-place of text. Unfortunately it doesn't
+ // clear few variables when someone else handles TTN_NEEDTEXT.
+ SetColumnWidth(CSubtitleDlDlg::COL_FILENAME, GetColumnWidth(CSubtitleDlDlg::COL_FILENAME));
- // sort by filename
- ListView_GetItemText(defps->m_hWnd, lParam1, COL_FILENAME, left, sizeof(left));
- ListView_GetItemText(defps->m_hWnd, lParam2, COL_FILENAME, right, sizeof(right));
- size_t lmatch = StrMatch(defps->m_filename, left);
- size_t rmatch = StrMatch(defps->m_filename, right);
+ return TRUE;
+}
- // sort by matching character number
- if (lmatch > rmatch) {
- return -1;
- } else if (lmatch < rmatch) {
- return 1;
- }
+// User Defined Window Messages
+enum {
+ UWM_SEARCH = WM_USER + 100,
+ UWM_SEARCHING,
+ UWM_DOWNLOADING,
+ UWM_DOWNLOADED,
+ UWM_COMPLETED,
+ UWM_FINISHED,
+ UWM_FAILED,
+ UWM_CLEAR
+};
- // prefer shorter names
- size_t llen = _tcslen(left);
- size_t rlen = _tcslen(right);
- if (llen < rlen) {
- return -1;
- } else if (llen > rlen) {
- return 1;
- }
- return 0;
+CSubtitleDlDlg::CSubtitleDlDlg(CMainFrame* pParentWnd)
+ : CResizableDialog(IDD, pParentWnd)
+ , m_ps(nullptr, 0, 0)
+ , m_bIsRefreshed(false)
+ , m_pMainFrame(pParentWnd)
+{
}
-void CSubtitleDlDlg::LoadList()
+void CSubtitleDlDlg::DoDataExchange(CDataExchange* pDX)
{
- m_list.SetRedraw(FALSE);
- for (int i = 0; i < m_parsed_movies.GetCount(); ++i) {
- isdb_movie_parsed& m = m_parsed_movies[i];
-
- int iItem = m_list.InsertItem(i, _T(""));
- m_list.SetItemData(iItem, m.ptr);
- m_list.SetItemText(iItem, COL_FILENAME, m.name);
- m_list.SetItemText(iItem, COL_LANGUAGE, m.language);
- m_list.SetItemText(iItem, COL_FORMAT, m.format);
- m_list.SetItemText(iItem, COL_DISC, m.disc);
- m_list.SetItemText(iItem, COL_TITLES, m.titles);
- m_list.SetCheck(iItem, m.checked);
- }
-
- // sort by language and filename
- m_defps.m_hWnd = m_list.GetSafeHwnd();
- ListView_SortItemsEx(m_list.GetSafeHwnd(), DefSortCompare, &m_defps);
-
- m_list.SetRedraw(TRUE);
- m_list.Invalidate();
- m_list.UpdateWindow();
+ __super::DoDataExchange(pDX);
+ DDX_Control(pDX, IDC_LIST1, m_list);
+ DDX_Control(pDX, IDC_PROGRESS1, m_progress);
+ DDX_Control(pDX, IDC_STATUSBAR, m_status);
}
-bool CSubtitleDlDlg::Parse()
+void CSubtitleDlDlg::SetStatusText(const CString& status, BOOL bPropagate/* = TRUE*/)
{
- // Parse raw list
- ISDb::movie m;
- ISDb::subtitle sub;
-
- CAtlList<CStringA> sl;
- Explode(m_pTA->raw_list, sl, '\n');
- CString str;
-
- POSITION pos = sl.GetHeadPosition();
- while (pos) {
- str = sl.GetNext(pos);
-
- CStringA param = str.Left(max(0, str.Find('=')));
- CStringA value = str.Mid(str.Find('=') + 1);
-
- if (param == "ticket") {
- m_pTA->ticket = value;
- } else if (param == "movie") {
- m.reset();
- Explode(value.Trim(" |"), m.titles, '|');
- } else if (param == "subtitle") {
- sub.reset();
- sub.id = atoi(value);
- } else if (param == "name") {
- sub.name = value;
- } else if (param == "discs") {
- sub.discs = atoi(value);
- } else if (param == "disc_no") {
- sub.disc_no = atoi(value);
- } else if (param == "format") {
- sub.format = value;
- } else if (param == "iso639_2") {
- sub.iso639_2 = value;
- } else if (param == "language") {
- sub.language = value;
- } else if (param == "nick") {
- sub.nick = value;
- } else if (param == "email") {
- sub.email = value;
- } else if (param.IsEmpty() && value == "endsubtitle") {
- m.subs.AddTail(sub);
- } else if (param.IsEmpty() && value == "endmovie") {
- m_pTA->raw_movies.AddTail(m);
- } else if (param.IsEmpty() && value == "end") {
- break;
- }
- }
-
- // Parse movies
- pos = m_pTA->raw_movies.GetHeadPosition();
- while (pos) {
- ISDb::movie& raw_movie = m_pTA->raw_movies.GetNext(pos);
- isdb_movie_parsed p;
-
- CStringA titlesA = Implode(raw_movie.titles, '|');
- titlesA.Replace("|", ", ");
- p.titles = UTF8To16(titlesA);
- p.checked = false;
-
- POSITION pos2 = raw_movie.subs.GetHeadPosition();
- while (pos2) {
- const ISDb::subtitle& s = raw_movie.subs.GetNext(pos2);
- p.name = UTF8To16(s.name);
- p.language = s.language;
- p.format = s.format;
- p.disc.Format(_T("%d/%d"), s.disc_no, s.discs);
- p.ptr = reinterpret_cast<DWORD_PTR>(&s);
-
- m_parsed_movies.Add(p);
- }
- }
-
- bool ret = true;
- if (m_parsed_movies.IsEmpty()) {
- ret = false;
+ m_status.SetText(status, 0, 0);
+ if (bPropagate) {
+ m_pMainFrame->SendStatusMessage(status, 5000);
}
-
- return ret;
}
-void CSubtitleDlDlg::SetStatus(const CString& status)
+void CSubtitleDlDlg::SetListViewSortColumn()
{
- m_status.SetText(status, 0, 0);
+ CHeaderCtrl* header = m_list.GetHeaderCtrl();
+ int columnCount = header->GetItemCount();
+ for (int i = 0; i < columnCount; ++i) {
+ HDITEM hi = { 0 };
+ hi.mask = HDI_FORMAT;
+ header->GetItem(i, &hi);
+
+ hi.fmt &= ~(HDF_SORTDOWN | HDF_SORTUP);
+ //Set sort image to this column
+ if (i == m_ps.m_nSortColumn) {
+ hi.fmt |= m_ps.m_fSortOrder > 0 ? HDF_SORTUP : m_ps.m_fSortOrder < 0 ? HDF_SORTDOWN : NULL;
+ }
+ header->SetItem(i, &hi);
+ }
}
-UINT CSubtitleDlDlg::RunThread(LPVOID pParam)
+int CALLBACK CSubtitleDlDlg::SortCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
- PTHREADSTRUCT pTA = reinterpret_cast<PTHREADSTRUCT>(pParam);
+ PPARAMSORT ps = (PPARAMSORT)(lParamSort);
+ CListCtrl* list = (CListCtrl*)CListCtrl::FromHandle(ps->m_hWnd);
- if (!OpenUrl(pTA->is, CString(pTA->url), pTA->raw_list)) {
- ::PostMessage(pTA->hWND, UWM_FAILED, (WPARAM)0, (LPARAM)0);
- AfxEndThread(1, TRUE);
+ if (ps->m_fSortOrder == 0) {
+ DWORD left = (*(SubtitlesInfo*)(list->GetItemData((int)lParam1))).Score();
+ DWORD right = (*(SubtitlesInfo*)(list->GetItemData((int)lParam2))).Score();
+ return left == right ? 0 : left < right ? 1 : -1;
}
- ::PostMessage(pTA->hWND, UWM_PARSE, (WPARAM)0, (LPARAM)0);
+ if (ps->m_nSortColumn == COL_DOWNLOADS) {
+ int left = (*(SubtitlesInfo*)(list->GetItemData((int)lParam1))).downloadCount;
+ int right = (*(SubtitlesInfo*)(list->GetItemData((int)lParam2))).downloadCount;
+ if (left == -1 && right != -1) {
+ return 1;
+ }
- return 0;
-};
+ if (left != -1 && right == -1) {
+ return -1;
+ }
-int CALLBACK CSubtitleDlDlg::SortCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
-{
- PPARAMSORT ps = reinterpret_cast<PPARAMSORT>(lParamSort);
- TCHAR left[MAX_PATH] = _T(""), right[MAX_PATH] = _T("");
+ return left == right ? 0 : (ps->m_fSortOrder == 1)
+ ? (left > right ? 1 : -1)
+ : (left < right ? 1 : -1);
+ }
- ListView_GetItemText(ps->m_hWnd, lParam1, ps->m_colIndex, left, sizeof(left));
- ListView_GetItemText(ps->m_hWnd, lParam2, ps->m_colIndex, right, sizeof(right));
+#ifdef _DEBUG
+ if (ps->m_nSortColumn == COL_SCORE) {
+ SHORT left = (SHORT)LOWORD((*(SubtitlesInfo*)(list->GetItemData((int)lParam1))).Score());
+ SHORT right = (SHORT)LOWORD((*(SubtitlesInfo*)(list->GetItemData((int)lParam2))).Score());
+ return left == right ? 0 : (ps->m_fSortOrder == 1)
+ ? (left > right ? 1 : -1)
+ : (left < right ? 1 : -1);
+ }
+#endif
- if (ps->m_ascending) {
- return _tcscmp(left, right);
- } else {
- return _tcscmp(right, left);
+ CString left(list->GetItemText((int)lParam1, ps->m_nSortColumn));
+ CString right(list->GetItemText((int)lParam2, ps->m_nSortColumn));
+ if (left == _T("-") && right != _T("-")) {
+ return 1;
}
+
+ if (left != _T("-") && right == _T("-")) {
+ return -1;
+ }
+
+ return (ps->m_fSortOrder == 1) ? StrCmpLogicalW(left, right) : StrCmpLogicalW(right, left);
}
BOOL CSubtitleDlDlg::OnInitDialog()
{
__super::OnInitDialog();
- m_status.Create(WS_CHILD | WS_VISIBLE | CCS_BOTTOM, CRect(0, 0, 0, 0), this, IDC_STATUSBAR);
+ m_progress.SetParent(&m_status);
+ m_progress.UpdateWindow();
+
+ m_list.SetExtendedStyle(m_list.GetExtendedStyle()
+ | LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT
+ | LVS_EX_CHECKBOXES | LVS_EX_LABELTIP);
- int n, curPos = 0;
+ m_list.SetImageList(&m_pMainFrame->m_pSubtitlesProviders->GetImageList(), LVSIL_SMALL);
+
+ m_ps.m_hWnd = m_list.GetSafeHwnd();
+ m_ps.m_nSortColumn = AfxGetApp()->GetProfileInt(IDS_R_DLG_SUBTITLEDL, IDS_RS_DLG_SUBTITLEDL_SORTCOLUMN, 0);
+ m_ps.m_fSortOrder = AfxGetApp()->GetProfileInt(IDS_R_DLG_SUBTITLEDL, IDS_RS_DLG_SUBTITLEDL_SORTORDER, 0);
+
+ int n = 0, curPos = 0;
CArray<int> columnWidth;
- CString strColumnWidth = AfxGetApp()->GetProfileString(IDS_R_DLG_SUBTITLEDL, IDS_RS_DLG_SUBTITLEDL_COLWIDTH);
- CString token = strColumnWidth.Tokenize(_T(","), curPos);
+ CString strColumnWidth(AfxGetApp()->GetProfileString(IDS_R_DLG_SUBTITLEDL, IDS_RS_DLG_SUBTITLEDL_COLWIDTH));
+ CString token(strColumnWidth.Tokenize(_T(","), curPos));
while (!token.IsEmpty()) {
if (_stscanf_s(token, L"%d", &n) == 1) {
columnWidth.Add(n);
@@ -324,60 +208,44 @@ BOOL CSubtitleDlDlg::OnInitDialog()
}
}
- m_list.SetExtendedStyle(m_list.GetExtendedStyle()
- | LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT
- | LVS_EX_CHECKBOXES | LVS_EX_LABELTIP);
-
- if (columnWidth.GetCount() != 5) {
+ if (columnWidth.GetCount() != COL_TOTAL_COLUMNS) {
// default sizes
columnWidth.RemoveAll();
- columnWidth.Add(290);
- columnWidth.Add(70);
+ columnWidth.Add(100);
+ columnWidth.Add(300);
+ columnWidth.Add(80);
+ columnWidth.Add(40);
columnWidth.Add(50);
- columnWidth.Add(50);
- columnWidth.Add(270);
+ columnWidth.Add(40);
+ columnWidth.Add(250);
+#ifdef _DEBUG
+ columnWidth.Add(40);
+#endif
}
- m_list.InsertColumn(COL_FILENAME, ResStr(IDS_SUBDL_DLG_FILENAME_COL), LVCFMT_LEFT, columnWidth[0]);
- m_list.InsertColumn(COL_LANGUAGE, ResStr(IDS_SUBDL_DLG_LANGUAGE_COL), LVCFMT_CENTER, columnWidth[1]);
- m_list.InsertColumn(COL_FORMAT, ResStr(IDS_SUBDL_DLG_FORMAT_COL), LVCFMT_CENTER, columnWidth[2]);
- m_list.InsertColumn(COL_DISC, ResStr(IDS_SUBDL_DLG_DISC_COL), LVCFMT_CENTER, columnWidth[3]);
- m_list.InsertColumn(COL_TITLES, ResStr(IDS_SUBDL_DLG_TITLES_COL), LVCFMT_LEFT, columnWidth[4]);
+ m_list.InsertColumn(COL_PROVIDER, ResStr(IDS_SUBDL_DLG_PROVIDER_COL), LVCFMT_LEFT, columnWidth[COL_PROVIDER]);
+ m_list.InsertColumn(COL_FILENAME, ResStr(IDS_SUBDL_DLG_FILENAME_COL), LVCFMT_LEFT, columnWidth[COL_FILENAME]);
+ m_list.InsertColumn(COL_LANGUAGE, ResStr(IDS_SUBDL_DLG_LANGUAGE_COL), LVCFMT_CENTER, columnWidth[COL_LANGUAGE]);
+ m_list.InsertColumn(COL_DISC, ResStr(IDS_SUBDL_DLG_DISC_COL), LVCFMT_CENTER, columnWidth[COL_DISC]);
+ m_list.InsertColumn(COL_HEARINGIMPAIRED, ResStr(IDS_SUBDL_DLG_HI_COL), LVCFMT_CENTER, columnWidth[COL_HEARINGIMPAIRED]);
+ m_list.InsertColumn(COL_DOWNLOADS, ResStr(IDS_SUBDL_DLG_DOWNLOADS_COL), LVCFMT_RIGHT, columnWidth[COL_DOWNLOADS]);
+ m_list.InsertColumn(COL_TITLES, ResStr(IDS_SUBDL_DLG_TITLES_COL), LVCFMT_LEFT, columnWidth[COL_TITLES]);
+#ifdef _DEBUG
+ m_list.InsertColumn(COL_SCORE, ResStr(IDS_SUBDL_DLG_SCORE_COL), LVCFMT_RIGHT, columnWidth[COL_SCORE]);
+#endif
+ SetListViewSortColumn();
AddAnchor(IDC_LIST1, TOP_LEFT, BOTTOM_RIGHT);
AddAnchor(IDC_CHECK1, BOTTOM_LEFT);
+ AddAnchor(IDC_BUTTON1, BOTTOM_RIGHT);
+ AddAnchor(IDC_BUTTON2, BOTTOM_RIGHT);
+ AddAnchor(IDC_BUTTON3, BOTTOM_RIGHT);
AddAnchor(IDOK, BOTTOM_RIGHT);
AddAnchor(IDC_STATUSBAR, BOTTOM_LEFT, BOTTOM_RIGHT);
- const CSize s(420, 200);
+ const CSize s(500, 250);
SetMinTrackSize(s);
- EnableSaveRestore(IDS_R_DLG_SUBTITLEDL);
-
- // set language sorting order
- const CAppSettings& settings = AfxGetAppSettings();
- CString order = settings.strSubtitlesLanguageOrder;
- // fill language->position map
- int listPos = 0;
- int tPos = 0;
- CString langCode = order.Tokenize(_T(",; "), tPos);
- while (tPos != -1) {
- CString langName = LangCodeToName(CStringA(langCode));
- if (!langName.IsEmpty()) {
- int pos;
- if (!m_defps.m_langPos.Lookup(langName, pos)) {
- m_defps.m_langPos[langName] = listPos++;
- }
- }
- langCode = order.Tokenize(_T(",; "), tPos);
- }
-
- // start new worker thread to download the list of subtitles
- m_pTA = DEBUG_NEW THREADSTRUCT;
- m_pTA->url = m_url;
- m_pTA->hWND = GetSafeHwnd();
-
- SetStatus(ResStr(IDS_SUBDL_DLG_DOWNLOADING));
- AfxBeginThread(RunThread, static_cast<LPVOID>(m_pTA));
+ EnableSaveRestore(IDS_R_DLG_SUBTITLEDL, TRUE);
return TRUE;
}
@@ -395,97 +263,96 @@ BOOL CSubtitleDlDlg::PreTranslateMessage(MSG* pMsg)
void CSubtitleDlDlg::OnOK()
{
- SetStatus(ResStr(IDS_SUBDL_DLG_DOWNLOADING));
+ if (IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED) {
+ m_pMainFrame->SetSubtitle(SubtitleInput(nullptr));
+ CAutoLock cAutoLock(&m_pMainFrame->m_csSubLock);
+ auto& subStreams = m_pMainFrame->m_pSubStreams;
+ POSITION pos = subStreams.GetHeadPosition();
+ while (pos) {
+ POSITION currentPos = pos;
+ if (!subStreams.GetNext(pos).pSourceFilter) {
+ subStreams.RemoveAt(currentPos);
+ }
+ }
+ }
+ bool bActivate = true;
for (int i = 0; i < m_list.GetItemCount(); ++i) {
- if (m_list.GetCheck(i)) {
- m_selsubs.AddTail(*reinterpret_cast<ISDb::subtitle*>(m_list.GetItemData(i)));
+ if (m_list.GetCheck(i) == TRUE) {
+
+ SubtitlesInfo& subtitlesInfo = *(SubtitlesInfo*)(m_list.GetItemData(i));
+ LVITEMINDEX lvii = { i , -1 };
+ m_list.SetItemIndexState(&lvii, INDEXTOSTATEIMAGEMASK(0), LVIS_STATEIMAGEMASK);
+ subtitlesInfo.Download(bActivate);
+ bActivate = false;
}
}
- m_fReplaceSubs = IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED;
-
- CMainFrame* pMF = static_cast<CMainFrame*>(GetParentFrame());
+ // Just hide the dialog, since it's modeless we don't want to call EndDialog
+ ShowWindow(SW_HIDE);
+}
- if (m_fReplaceSubs) {
- pMF->m_pSubStreams.RemoveAll();
- }
- const CAppSettings& s = AfxGetAppSettings();
- SubtitleInput subInputToSet;
+void CSubtitleDlDlg::OnCancel()
+{
+ // Just hide the dialog, since it's modeless we don't want to call EndDialog
+ ShowWindow(SW_HIDE);
+}
- POSITION pos = m_selsubs.GetHeadPosition();
- while (pos) {
- const ISDb::subtitle& sub = m_selsubs.GetNext(pos);
- CInternetSession is;
- CStringA url = "http://" + s.strISDb + "/dl.php?";
- CStringA ticket = UrlEncode(m_pTA->ticket);
- CStringA args, str;
- args.Format("id=%d&ticket=%s", sub.id, ticket);
- url.Append(args);
-
- if (OpenUrl(is, CString(url), str)) {
- CAutoPtr<CRenderedTextSubtitle> pRTS(DEBUG_NEW CRenderedTextSubtitle(&pMF->m_csSubLock));
- if (pRTS && pRTS->Open((BYTE*)(LPCSTR)str, str.GetLength(), DEFAULT_CHARSET, CString(sub.name)) && pRTS->GetStreamCount() > 0) {
- SubtitleInput subElement(pRTS.Detach());
- pMF->m_pSubStreams.AddTail(subElement);
- if (!subInputToSet.pSubStream) {
- subInputToSet = subElement;
- }
- }
- }
- }
+void CSubtitleDlDlg::OnRefresh()
+{
+ m_list.DeleteAllItems();
+ m_pMainFrame->m_pSubtitlesProviders->Search(FALSE);
+}
- if (subInputToSet.pSubStream) {
- pMF->SetSubtitle(subInputToSet);
- }
+void CSubtitleDlDlg::OnAbort()
+{
+ m_pMainFrame->m_pSubtitlesProviders->Abort(SubtitlesThreadType(STT_SEARCH | STT_DOWNLOAD));
+}
- __super::OnOK();
+void CSubtitleDlDlg::OnOptions()
+{
+ m_pMainFrame->ShowOptions(CPPageSubMisc::IDD);
}
void CSubtitleDlDlg::OnUpdateOk(CCmdUI* pCmdUI)
{
bool fEnable = false;
for (int i = 0; !fEnable && i < m_list.GetItemCount(); ++i) {
- fEnable = !!m_list.GetCheck(i);
+ fEnable = (m_list.GetCheck(i) == TRUE);
}
pCmdUI->Enable(fEnable);
}
-void CSubtitleDlDlg::OnFailedConnection()
+void CSubtitleDlDlg::OnUpdateRefresh(CCmdUI* pCmdUI)
{
- SetStatus(ResStr(IDS_SUBDL_DLG_CONNECT_ERROR));
-}
-
-void CSubtitleDlDlg::OnParse()
-{
- SetStatus(ResStr(IDS_SUBDL_DLG_PARSING));
- if (Parse()) {
- LoadList();
- CString msg;
- msg.Format(IDS_SUBDL_DLG_SUBS_AVAIL, m_list.GetItemCount());
- SetStatus(msg);
- } else {
- SetStatus(ResStr(IDS_SUBDL_DLG_NOT_FOUND));
- }
+ bool fEnable = true;
+ pCmdUI->Enable(fEnable);
}
void CSubtitleDlDlg::OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
- LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
+ LPNMHEADER phdr = (LPNMHEADER)(pNMHDR);
*pResult = 0;
- if (phdr->iItem == m_ps.m_colIndex) {
- m_ps.m_ascending = !m_ps.m_ascending;
+ if (phdr->iItem == m_ps.m_nSortColumn) {
+ if (m_ps.m_fSortOrder == 1) {
+ m_ps.m_fSortOrder = (m_ps.m_nSortColumn == COL_DOWNLOADS) ? 0 : -1;
+ } else if (m_ps.m_fSortOrder == -1) {
+ m_ps.m_fSortOrder = (m_ps.m_nSortColumn == COL_DOWNLOADS) ? 1 : 0;
+ } else if (m_ps.m_fSortOrder == 0) {
+ m_ps.m_fSortOrder = (m_ps.m_nSortColumn == COL_DOWNLOADS) ? -1 : 1;
+ }
} else {
- m_ps.m_ascending = true;
+ m_ps.m_nSortColumn = phdr->iItem;
+ m_ps.m_fSortOrder = (m_ps.m_nSortColumn == COL_DOWNLOADS) ? -1 : 1;
}
- m_ps.m_colIndex = phdr->iItem;
- m_ps.m_hWnd = m_list.GetSafeHwnd();
+ SetListViewSortColumn();
SetRedraw(FALSE);
- ListView_SortItemsEx(m_list.GetSafeHwnd(), SortCompare, &m_ps);
+ m_list.SortItemsEx(SortCompare, (DWORD_PTR)&m_ps);
+
SetRedraw(TRUE);
m_list.Invalidate();
m_list.UpdateWindow();
@@ -496,6 +363,19 @@ void CSubtitleDlDlg::OnSize(UINT nType, int cx, int cy)
__super::OnSize(nType, cx, cy);
ArrangeLayout();
+
+ if (m_status && m_progress) {
+ // Reposition the progress control correctly!
+ CRect statusRect, buttonRect;
+ m_status.GetClientRect(&statusRect);
+ GetDlgItem(IDOK)->GetWindowRect(&buttonRect);
+ ScreenToClient(&buttonRect);
+ int parts[2] = { buttonRect.left - 2, -1 };
+ m_status.SetParts(2, parts);
+ m_status.GetRect(1, &statusRect);
+ statusRect.DeflateRect(1, 1, 1, 1);
+ m_progress.SetWindowPos(&wndTop, statusRect.left, statusRect.top, statusRect.Width(), statusRect.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
+ }
}
void CSubtitleDlDlg::OnDestroy()
@@ -510,6 +390,8 @@ void CSubtitleDlDlg::OnDestroy()
strColumnWidth.AppendFormat(L"%d,", w);
}
AfxGetApp()->WriteProfileString(IDS_R_DLG_SUBTITLEDL, IDS_RS_DLG_SUBTITLEDL_COLWIDTH, strColumnWidth);
+ AfxGetApp()->WriteProfileInt(IDS_R_DLG_SUBTITLEDL, IDS_RS_DLG_SUBTITLEDL_SORTCOLUMN, m_ps.m_nSortColumn);
+ AfxGetApp()->WriteProfileInt(IDS_R_DLG_SUBTITLEDL, IDS_RS_DLG_SUBTITLEDL_SORTORDER, m_ps.m_fSortOrder);
__super::OnDestroy();
}
@@ -527,29 +409,45 @@ void CSubtitleDlDlg::DownloadSelectedSubtitles()
while (pos) {
int nItem = m_list.GetNextSelectedItem(pos);
if (nItem >= 0 && nItem < m_list.GetItemCount()) {
- ListView_SetCheckState(m_list.GetSafeHwnd(), nItem, TRUE);
+ m_list.SetCheck(nItem, TRUE);
}
}
OnOK();
}
+// ON_UPDATE_COMMAND_UI does not work for modeless dialogs
BEGIN_MESSAGE_MAP(CSubtitleDlDlg, CResizableDialog)
ON_WM_ERASEBKGND()
ON_WM_SIZE()
- ON_MESSAGE_VOID(UWM_PARSE, OnParse)
- ON_MESSAGE_VOID(UWM_FAILED, OnFailedConnection)
+ ON_COMMAND(IDC_BUTTON1, OnRefresh)
+ ON_COMMAND(IDC_BUTTON2, OnAbort)
+ ON_COMMAND(IDC_BUTTON3, OnOptions)
ON_UPDATE_COMMAND_UI(IDOK, OnUpdateOk)
+ ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateRefresh)
ON_NOTIFY(HDN_ITEMCLICK, 0, OnColumnClick)
ON_WM_DESTROY()
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDoubleClickSubtitle)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnKeyPressedSubtitle)
+ ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRightClick)
+ ON_NOTIFY(LVN_ITEMCHANGING, IDC_LIST1, OnItemChanging)
+ ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemChanged)
+ ON_WM_SHOWWINDOW()
+
+ ON_MESSAGE(UWM_SEARCH, OnSearch)
+ ON_MESSAGE(UWM_SEARCHING, OnSearching)
+ ON_MESSAGE(UWM_DOWNLOADING, OnDownloading)
+ ON_MESSAGE(UWM_DOWNLOADED, OnDownloaded)
+ ON_MESSAGE(UWM_COMPLETED, OnCompleted)
+ ON_MESSAGE(UWM_FINISHED, OnFinished)
+ ON_MESSAGE(UWM_FAILED, OnFailed)
+ ON_MESSAGE(UWM_CLEAR, OnClear)
END_MESSAGE_MAP()
void CSubtitleDlDlg::OnDoubleClickSubtitle(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pItemActivate = (LPNMITEMACTIVATE)(pNMHDR);
- if (pItemActivate->iItem >= 0) {
+ if (pItemActivate->iItem >= 0 && m_list.GetCheck(pItemActivate->iItem) != -1) {
DownloadSelectedSubtitles();
}
}
@@ -564,23 +462,292 @@ void CSubtitleDlDlg::OnKeyPressedSubtitle(NMHDR* pNMHDR, LRESULT* pResult)
}
}
-bool CSubtitleDlDlg::OpenUrl(CInternetSession& is, CString url, CStringA& str)
+void CSubtitleDlDlg::OnRightClick(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
+
+ if (lpnmlv->iItem >= 0 && lpnmlv->iSubItem >= 0) {
+ SubtitlesInfo& subtitlesInfo = *(SubtitlesInfo*)(m_list.GetItemData(lpnmlv->iItem));
+
+ enum {
+ DOWNLOAD = 0x1000,
+ OPEN_URL,
+ COPY_URL
+ };
+
+ CMenu m;
+ m.CreatePopupMenu();
+ m.AppendMenu(MF_STRING | (m_list.GetCheck(lpnmlv->iItem) != -1 ? MF_ENABLED : MF_DISABLED), DOWNLOAD, ResStr(IDS_SUBMENU_DOWNLOAD));
+ m.AppendMenu(MF_SEPARATOR);
+ m.AppendMenu(MF_STRING | (!subtitlesInfo.url.empty() ? MF_ENABLED : MF_DISABLED), OPEN_URL, ResStr(IDS_SUBMENU_OPENURL));
+ m.AppendMenu(MF_STRING | (!subtitlesInfo.url.empty() ? MF_ENABLED : MF_DISABLED), COPY_URL, ResStr(IDS_SUBMENU_COPYURL));
+
+ CPoint pt = lpnmlv->ptAction;
+ ::MapWindowPoints(lpnmlv->hdr.hwndFrom, HWND_DESKTOP, &pt, 1);
+
+ switch (m.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RETURNCMD, pt.x, pt.y, this)) {
+ case DOWNLOAD:
+ m_list.SetCheck(lpnmlv->iItem, TRUE);
+ OnOK();
+ break;
+ case OPEN_URL:
+ subtitlesInfo.OpenUrl();
+ break;
+ case COPY_URL: {
+ if (!subtitlesInfo.url.empty()) {
+ size_t len = subtitlesInfo.url.length() + 1;
+ HGLOBAL hGlob = ::GlobalAlloc(GMEM_MOVEABLE, len * sizeof(CHAR));
+ if (hGlob) {
+ // Lock the handle and copy the text to the buffer
+ LPVOID pData = ::GlobalLock(hGlob);
+ if (pData) {
+ ::strcpy_s((CHAR*)pData, len, (LPCSTR)subtitlesInfo.url.c_str());
+ ::GlobalUnlock(hGlob);
+
+ if (GetParent()->OpenClipboard()) {
+ // Place the handle on the clipboard, if the call succeeds
+ // the system will take care of the allocated memory
+ if (::EmptyClipboard() && ::SetClipboardData(CF_TEXT, hGlob)) {
+ hGlob = nullptr;
+ }
+
+ ::CloseClipboard();
+ }
+ }
+
+ if (hGlob) {
+ ::GlobalFree(hGlob);
+ }
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+}
+
+void CSubtitleDlDlg::OnItemChanging(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMLISTVIEW pNMLV = (LPNMLISTVIEW)(pNMHDR);
+
+ if (pNMLV->uOldState == 0 && pNMLV->uNewState == 0x1000 && pNMLV->lParam) {
+ *pResult = TRUE;
+ }
+}
+
+void CSubtitleDlDlg::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ UpdateDialogControls(this, FALSE);
+}
+
+
+void CSubtitleDlDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
- str.Empty();
+ __super::OnShowWindow(bShow, nStatus);
+
+ const auto& s = AfxGetAppSettings();
- try {
- CAutoPtr<CStdioFile> f(is.OpenURL(url, 1, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_EXISTING_CONNECT));
+ if (bShow == TRUE && !m_bIsRefreshed && !m_pMainFrame->m_fAudioOnly && s.fEnableSubtitles) {
+ OnRefresh();
+ }
+}
+
+
+afx_msg LRESULT CSubtitleDlDlg::OnSearch(WPARAM wParam, LPARAM /*lParam*/)
+{
+ INT _nCount = (INT)wParam;
- char buff[1024];
- for (int len; (len = f->Read(buff, sizeof(buff))) > 0; str += CStringA(buff, len)) {
- ;
+ SetStatusText(StrRes(IDS_SUBDL_DLG_SEARCHING));
+ GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
+ GetDlgItem(IDC_BUTTON1)->ShowWindow(FALSE);
+ GetDlgItem(IDC_BUTTON2)->ShowWindow(TRUE);
+
+ m_progress.SetRange32(0, _nCount);
+ m_progress.SetStep(1);
+ m_progress.SetPos(0);
+
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleDlDlg::OnSearching(WPARAM /*wParam*/, LPARAM lParam)
+{
+ SubtitlesInfo& _fileInfo = *(SubtitlesInfo*)lParam;
+ CString title = ResStr(IDS_SUBDL_DLG_TITLE) + _T(" - ") + CString(_fileInfo.fileName.c_str());
+ SetWindowText(title);
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleDlDlg::OnDownloading(WPARAM /*wParam*/, LPARAM lParam)
+{
+ SubtitlesInfo& _fileInfo = *(SubtitlesInfo*)lParam;
+
+ CString statusMessage;
+ statusMessage.Format(IDS_SUBDL_DLG_DOWNLOADING, CString(_fileInfo.Provider()->Name().c_str()), CString(_fileInfo.fileName.c_str()));
+ SetStatusText(statusMessage);
+
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleDlDlg::OnDownloaded(WPARAM /*wParam*/, LPARAM lParam)
+{
+ SubtitlesInfo& _fileInfo = *(SubtitlesInfo*)lParam;
+
+ CString statusMessage;
+ statusMessage.Format(IDS_SUBDL_DLG_DOWNLOADED, CString(_fileInfo.Provider()->Name().c_str()), CString(_fileInfo.fileName.c_str()));
+ SetStatusText(statusMessage);
+
+ for (int i = 0; i < m_list.GetItemCount(); ++i) {
+ SubtitlesInfo& iter = *(SubtitlesInfo*)m_list.GetItemData(i);
+ if (iter.UID() == _fileInfo.UID()) {
+ LVITEMINDEX lvii = { i, -1 };
+ m_list.SetItemIndexState(&lvii, INDEXTOSTATEIMAGEMASK(0), LVIS_STATEIMAGEMASK);
+ }
+ }
+
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleDlDlg::OnCompleted(WPARAM wParam, LPARAM lParam)
+{
+ SRESULT _result = (SRESULT)wParam;
+ SubtitlesList& _subtitlesList = *(SubtitlesList*)lParam;
+
+ m_progress.StepIt();
+
+ if (_result == SR_ABORTED) {
+ SetStatusText(StrRes(IDS_SUBDL_DLG_ABORTING));
+ } else if (!_subtitlesList.empty()) {
+ m_list.SetRedraw(FALSE);
+
+ for (const auto& subInfo : _subtitlesList) {
+ int iItem = m_list.InsertItem(0, UTF8To16(subInfo.Provider()->Name().c_str()), subInfo.Provider()->GetIconIndex());
+ m_list.SetItemText(iItem, COL_FILENAME, UTF8To16(subInfo.fileName.c_str()));
+ m_list.SetItemText(iItem, COL_LANGUAGE, ISOLang::ISO639XToLanguage(subInfo.languageCode.c_str()));
+ CString disc;
+ disc.Format(_T("%d/%d"), subInfo.discNumber, subInfo.discCount);
+ m_list.SetItemText(iItem, COL_DISC, disc);
+ m_list.SetItemText(iItem, COL_HEARINGIMPAIRED, subInfo.hearingImpaired == -1 ? _T("-") : subInfo.hearingImpaired > 0 ? ResStr(IDS_YES) : ResStr(IDS_NO));
+ CString downloads(_T("-"));
+ if (subInfo.downloadCount != -1) {
+ downloads.Format(_T("%d"), subInfo.downloadCount);
+ downloads = FormatNumber(downloads);
+ }
+ m_list.SetItemText(iItem, COL_DOWNLOADS, downloads);
+ m_list.SetItemText(iItem, COL_TITLES, UTF8To16(subInfo.DisplayTitle().c_str()));
+#ifdef _DEBUG
+ CString score;
+ score.Format(_T("%d"), (SHORT)LOWORD(subInfo.Score()));
+ m_list.SetItemText(iItem, COL_SCORE, score);
+#endif
+ m_Subtitles.emplace_back(subInfo);
+ m_list.SetItemData(iItem, (DWORD_PTR)&m_Subtitles.back());
}
- f->Close(); // must close it because the destructor doesn't seem to do it and we will get an exception when "is" is destroying
- } catch (CInternetException* ie) {
- ie->Delete();
- return false;
+ // sort
+ m_list.SortItemsEx(SortCompare, (DWORD_PTR)&m_ps);
+
+ m_list.SetRedraw(TRUE);
+ m_list.Invalidate();
+ m_list.UpdateWindow();
}
+ m_bIsRefreshed = true;
+ UpdateWindow();
- return true;
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleDlDlg::OnFinished(WPARAM wParam, LPARAM lParam)
+{
+ BOOL _bAborted = (BOOL)wParam;
+ BOOL _bShowDialog = (BOOL)lParam;
+
+ if (_bAborted == FALSE) {
+ if (!m_Subtitles.empty()) {
+ if (_bShowDialog == TRUE && !IsWindowVisible()) {
+ ShowWindow(SW_SHOW);
+ }
+
+ CString message;
+ message.Format(IDS_SUBDL_DLG_FOUND, (int)m_Subtitles.size());
+ SetStatusText(message);
+ } else {
+ SetStatusText(StrRes(IDS_SUBDL_DLG_NOTFOUND));
+ }
+ } else {
+ SetStatusText(StrRes(IDS_SUBDL_DLG_ABORTED));
+ }
+
+ int nLower = 0, nUpper = 0;
+ m_progress.GetRange(nLower, nUpper);
+ m_progress.SetPos(nUpper);
+
+ GetDlgItem(IDC_BUTTON2)->ShowWindow(FALSE);
+ GetDlgItem(IDC_BUTTON1)->ShowWindow(TRUE);
+ GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
+ UpdateWindow();
+
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleDlDlg::OnFailed(WPARAM /*wParam*/, LPARAM /*lParam*/)
+{
+ SetStatusText(StrRes(IDS_SUBDL_DLG_FAILED));
+
+ return S_OK;
+}
+
+
+afx_msg LRESULT CSubtitleDlDlg::OnClear(WPARAM /*wParam*/, LPARAM /*lParam*/)
+{
+ CString title(StrRes(IDS_SUBDL_DLG_TITLE));
+ SetWindowText(title);
+
+ m_progress.SetPos(0);
+ SetStatusText(_T(""));
+ m_list.DeleteAllItems();
+ m_Subtitles.clear();
+
+ m_bIsRefreshed = false;
+
+ GetDlgItem(IDC_BUTTON2)->ShowWindow(FALSE);
+ GetDlgItem(IDC_BUTTON1)->ShowWindow(TRUE);
+ GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
+ UpdateWindow();
+
+ return S_OK;
+}
+
+void CSubtitleDlDlg::DoSearch(INT _nCount)
+{
+ SendMessage(UWM_SEARCH, (WPARAM)_nCount, (LPARAM)nullptr);
+}
+void CSubtitleDlDlg::DoSearching(SubtitlesInfo& _fileInfo)
+{
+ SendMessage(UWM_SEARCHING, (WPARAM)nullptr, (LPARAM)&_fileInfo);
+}
+void CSubtitleDlDlg::DoDownloading(SubtitlesInfo& _fileInfo)
+{
+ SendMessage(UWM_DOWNLOADING, (WPARAM)nullptr, (LPARAM)&_fileInfo);
+}
+void CSubtitleDlDlg::DoDownloaded(SubtitlesInfo& _fileInfo)
+{
+ SendMessage(UWM_DOWNLOADED, (WPARAM)nullptr, (LPARAM)&_fileInfo);
+}
+void CSubtitleDlDlg::DoCompleted(SRESULT _result, SubtitlesList& _subtitlesList)
+{
+ SendMessage(UWM_COMPLETED, (WPARAM)_result, (LPARAM)&_subtitlesList);
+}
+void CSubtitleDlDlg::DoFinished(BOOL _bAborted, BOOL _bShowDialog)
+{
+ SendMessage(UWM_FINISHED, (WPARAM)_bAborted, (LPARAM)_bShowDialog);
+}
+void CSubtitleDlDlg::DoFailed()
+{
+ SendMessage(UWM_FAILED, (WPARAM)nullptr, (LPARAM)nullptr);
+}
+void CSubtitleDlDlg::DoClear()
+{
+ SendMessage(UWM_CLEAR, (WPARAM)nullptr, (LPARAM)nullptr);
}
diff --git a/src/mpc-hc/SubtitleDlDlg.h b/src/mpc-hc/SubtitleDlDlg.h
index d1c1ca7b6..530b67dde 100644
--- a/src/mpc-hc/SubtitleDlDlg.h
+++ b/src/mpc-hc/SubtitleDlDlg.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,111 +21,112 @@
#pragma once
-#include "ISDb.h"
-#include "resource.h"
#include "ResizableLib/ResizableDialog.h"
+#include "SubtitlesProviders.h" // Forward declaration doesn't work on VS2013. Remove this once VS2013 support is dropped.
+#include <list>
-class CInternetSession;
+class CMainFrame;
+struct SubtitlesInfo;
+using SubtitlesList = std::list<SubtitlesInfo>;
+enum SRESULT;
-class CSubtitleDlDlg : public CResizableDialog
+class CSubtitleDlDlgListCtrl final : public CListCtrl
{
-private:
- struct isdb_movie_parsed {
- CString titles;
- CString name;
- CString language;
- CString format;
- CString disc;
- DWORD_PTR ptr;
- bool checked;
- };
+ void PreSubclassWindow() override;
+
+ DECLARE_MESSAGE_MAP();
+ afx_msg BOOL OnToolNeedText(UINT id, NMHDR* pNMHDR, LRESULT* pResult);
+};
- struct THREADSTRUCT {
- HWND hWND;
- CInternetSession is;
- CStringA url;
- CStringA raw_list;
- CStringA ticket;
- CList<ISDb::movie> raw_movies;
+class CSubtitleDlDlg : public CResizableDialog
+{
+public:
+ enum {
+ COL_PROVIDER,
+ COL_FILENAME,
+ COL_LANGUAGE,
+ //COL_FORMAT,
+ COL_HEARINGIMPAIRED,
+ COL_DOWNLOADS,
+ COL_DISC,
+ COL_TITLES,
+#ifdef _DEBUG
+ COL_SCORE,
+#endif
+ COL_TOTAL_COLUMNS
};
- typedef THREADSTRUCT* PTHREADSTRUCT;
+private:
struct PARAMSORT {
- PARAMSORT(HWND hWnd, int colIndex, bool ascending) :
- m_hWnd(hWnd),
- m_colIndex(colIndex),
- m_ascending(ascending)
- {}
+ PARAMSORT(HWND hWnd, int nSortColumn, int fSortOrder)
+ : m_hWnd(hWnd), m_nSortColumn(nSortColumn), m_fSortOrder(fSortOrder) {}
HWND m_hWnd;
- int m_colIndex;
- bool m_ascending;
+ int m_nSortColumn;
+ int m_fSortOrder;
};
typedef PARAMSORT* PPARAMSORT;
- struct DEFPARAMSORT {
- DEFPARAMSORT(HWND hWnd, CString filename) :
- m_hWnd(hWnd),
- m_filename(filename)
- {}
- HWND m_hWnd;
- CString m_filename;
- CMap <CString, LPCTSTR, int, int> m_langPos;
- };
- typedef DEFPARAMSORT* PDEFPARAMSORT;
-
- enum {
- COL_FILENAME,
- COL_LANGUAGE,
- COL_FORMAT,
- COL_DISC,
- COL_TITLES
- };
PARAMSORT m_ps;
- DEFPARAMSORT m_defps;
- PTHREADSTRUCT m_pTA;
+ bool m_bIsRefreshed;
- CArray<isdb_movie_parsed> m_parsed_movies;
- CString m_url;
- bool m_fReplaceSubs;
-
- CListCtrl m_list;
- CList<ISDb::subtitle> m_selsubs;
+ CSubtitleDlDlgListCtrl m_list;
+ CProgressCtrl m_progress;
CStatusBarCtrl m_status;
+ CMainFrame* m_pMainFrame;
+ SubtitlesList m_Subtitles;
- void SetStatus(const CString& status);
- bool Parse();
- void LoadList();
-
- static UINT RunThread(LPVOID pParam);
static int CALLBACK SortCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
- static int CALLBACK DefSortCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
- static size_t StrMatch(LPCTSTR a, LPCTSTR b);
- static CString LangCodeToName(LPCSTR code);
- static bool OpenUrl(CInternetSession& is, CString url, CStringA& str);
+ void SetStatusText(const CString& status, BOOL bPropagate = TRUE);
+ void SetListViewSortColumn();
+ void DownloadSelectedSubtitles();
public:
- explicit CSubtitleDlDlg(CWnd* pParent, const CStringA& url, const CString& filename);
- virtual ~CSubtitleDlDlg();
-
+ CSubtitleDlDlg(CMainFrame* pParentWnd);
+ virtual ~CSubtitleDlDlg() = default;
enum { IDD = IDD_SUBTITLEDL_DLG };
+
protected:
virtual void DoDataExchange(CDataExchange* pDX);
virtual BOOL OnInitDialog();
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual void OnOK();
-
- void DownloadSelectedSubtitles();
+ virtual void OnCancel();
DECLARE_MESSAGE_MAP()
afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg void OnParse();
- afx_msg void OnFailedConnection();
afx_msg void OnUpdateOk(CCmdUI* pCmdUI);
+ afx_msg void OnUpdateRefresh(CCmdUI* pCmdUI);
+ afx_msg void OnAbort();
+ afx_msg void OnRefresh();
+ afx_msg void OnOptions();
afx_msg void OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDestroy();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnDoubleClickSubtitle(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnKeyPressedSubtitle(NMHDR* pNMHDR, LRESULT* pResult);
+ afx_msg void OnRightClick(NMHDR* pNMHDR, LRESULT* pResult);
+ afx_msg void OnItemChanging(NMHDR* pNMHDR, LRESULT* pResult);
+ afx_msg void OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult);
+ afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
+
+ afx_msg LRESULT OnSearch(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnSearching(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnDownloading(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnDownloaded(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnCompleted(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnFinished(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnFailed(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnClear(WPARAM wParam, LPARAM lParam);
+
+public:
+ void DoSearch(INT _nCount);
+ void DoSearching(SubtitlesInfo& _fileInfo);
+ void DoDownloading(SubtitlesInfo& _fileInfo);
+ void DoDownloaded(SubtitlesInfo& _fileInfo);
+ void DoCompleted(SRESULT _result, SubtitlesList& _subtitlesList);
+ void DoFinished(BOOL _bAborted, BOOL _bShowDialog);
+ void DoFailed();
+ void DoClear();
};
diff --git a/src/mpc-hc/SubtitleUpDlg.cpp b/src/mpc-hc/SubtitleUpDlg.cpp
new file mode 100644
index 000000000..46476279e
--- /dev/null
+++ b/src/mpc-hc/SubtitleUpDlg.cpp
@@ -0,0 +1,546 @@
+/*
+ * (C) 2016-2017 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "SubtitleUpDlg.h"
+#include "SubtitlesProvider.h"
+#include "MainFrm.h"
+#include "AuthDlg.h"
+#include "PPageSubMisc.h"
+#include "mplayerc.h"
+
+// User Defined Window Messages
+enum {
+ UWM_UPLOAD = WM_USER + 100,
+ UWM_UPLOADING,
+ UWM_COMPLETED,
+ UWM_FINISHED,
+ UWM_FAILED,
+ UWM_CLEAR
+};
+
+CSubtitleUpDlg::CSubtitleUpDlg(CMainFrame* pParentWnd)
+ : CResizableDialog(IDD, pParentWnd)
+ , m_pMainFrame(pParentWnd)
+{
+}
+
+void CSubtitleUpDlg::DoDataExchange(CDataExchange* pDX)
+{
+ __super::DoDataExchange(pDX);
+ DDX_Control(pDX, IDC_LIST1, m_list);
+ DDX_Control(pDX, IDC_PROGRESS1, m_progress);
+ DDX_Control(pDX, IDC_STATUSBAR, m_status);
+}
+
+void CSubtitleUpDlg::SetStatusText(const CString& status, BOOL bPropagate/* = TRUE*/)
+{
+ m_status.SetText(status, 0, 0);
+ if (bPropagate) {
+ m_pMainFrame->SendStatusMessage(status, 5000);
+ }
+}
+
+BOOL CSubtitleUpDlg::OnInitDialog()
+{
+ __super::OnInitDialog();
+
+ m_progress.SetParent(&m_status);
+ m_progress.UpdateWindow();
+
+ int n = 0, curPos = 0;
+ CArray<int> columnWidth;
+
+ CString strColumnWidth(AfxGetApp()->GetProfileString(IDS_R_DLG_SUBTITLEUP, IDS_RS_DLG_SUBTITLEUP_COLWIDTH));
+ CString token(strColumnWidth.Tokenize(_T(","), curPos));
+ while (!token.IsEmpty()) {
+ if (_stscanf_s(token, L"%d", &n) == 1) {
+ columnWidth.Add(n);
+ token = strColumnWidth.Tokenize(_T(","), curPos);
+ } else {
+ throw 1;
+ }
+ }
+
+ m_list.SetExtendedStyle(m_list.GetExtendedStyle()
+ | LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT
+ | LVS_EX_CHECKBOXES | LVS_EX_LABELTIP);
+
+ m_list.SetImageList(&m_pMainFrame->m_pSubtitlesProviders->GetImageList(), LVSIL_SMALL);
+
+ if (columnWidth.GetCount() != COL_TOTAL_COLUMNS) {
+ // default sizes
+ columnWidth.RemoveAll();
+ columnWidth.Add(120);
+ columnWidth.Add(75);
+ columnWidth.Add(250);
+ }
+
+ m_list.InsertColumn(COL_PROVIDER, ResStr(IDS_SUBDL_DLG_PROVIDER_COL), LVCFMT_LEFT, columnWidth[COL_PROVIDER]);
+ m_list.InsertColumn(COL_USERNAME, ResStr(IDS_SUBUL_DLG_USERNAME_COL), LVCFMT_LEFT, columnWidth[COL_USERNAME]);
+ m_list.InsertColumn(COL_STATUS, ResStr(IDS_SUBUL_DLG_STATUS_COL), LVCFMT_LEFT, columnWidth[COL_STATUS]);
+
+ m_list.SetRedraw(FALSE);
+ m_list.DeleteAllItems();
+
+ int i = 0;
+ for (const auto& iter : m_pMainFrame->m_pSubtitlesProviders->Providers()) {
+ if (iter->Flags(SPF_UPLOAD)) {
+ int iItem = m_list.InsertItem((int)i++, CString(iter->Name().c_str()), iter->GetIconIndex());
+ m_list.SetItemText(iItem, COL_USERNAME, UTF8To16(iter->UserName().c_str()));
+ m_list.SetItemText(iItem, COL_STATUS, ResStr(IDS_SUBUL_DLG_STATUS_READY));
+ m_list.SetCheck(iItem, iter->Enabled(SPF_UPLOAD));
+ m_list.SetItemData(iItem, (DWORD_PTR)(iter.get()));
+ }
+ }
+
+ m_list.SetRedraw(TRUE);
+ m_list.Invalidate();
+ m_list.UpdateWindow();
+
+ UpdateData(FALSE);
+
+ AddAnchor(IDC_LIST1, TOP_LEFT, BOTTOM_RIGHT);
+ AddAnchor(IDC_BUTTON1, BOTTOM_RIGHT);
+ AddAnchor(IDC_BUTTON2, BOTTOM_RIGHT);
+ AddAnchor(IDOK, BOTTOM_RIGHT);
+ AddAnchor(IDC_STATUSBAR, BOTTOM_LEFT, BOTTOM_RIGHT);
+
+ const CSize s(500, 250);
+ SetMinTrackSize(s);
+ EnableSaveRestore(IDS_R_DLG_SUBTITLEUP, TRUE);
+
+ return TRUE;
+}
+
+BOOL CSubtitleUpDlg::PreTranslateMessage(MSG* pMsg)
+{
+ // Inhibit default handling for the Enter key when the list has the focus and an item is selected.
+ if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN
+ && pMsg->hwnd == m_list.GetSafeHwnd() && m_list.GetSelectedCount() > 0) {
+ return FALSE;
+ }
+
+ return __super::PreTranslateMessage(pMsg);
+}
+
+void CSubtitleUpDlg::OnOK()
+{
+ m_pMainFrame->m_pSubtitlesProviders->Upload(true);
+}
+
+void CSubtitleUpDlg::OnCancel()
+{
+ // Just hide the dialog, since it's modeless we don't want to call EndDialog
+ ShowWindow(SW_HIDE);
+}
+
+void CSubtitleUpDlg::OnAbort()
+{
+ m_pMainFrame->m_pSubtitlesProviders->Abort(SubtitlesThreadType(STT_UPLOAD));
+}
+
+void CSubtitleUpDlg::OnOptions()
+{
+ m_pMainFrame->ShowOptions(CPPageSubMisc::IDD);
+}
+
+void CSubtitleUpDlg::OnUpdateOk(CCmdUI* pCmdUI)
+{
+ bool fEnable = false;
+ for (int i = 0; !fEnable && i < m_list.GetItemCount(); ++i) {
+ fEnable = (m_list.GetCheck(i) == TRUE);
+ }
+
+ pCmdUI->Enable(fEnable);
+}
+
+void CSubtitleUpDlg::OnUpdateRefresh(CCmdUI* pCmdUI)
+{
+ bool fEnable = true;
+ pCmdUI->Enable(fEnable);
+}
+
+void CSubtitleUpDlg::OnSize(UINT nType, int cx, int cy)
+{
+ __super::OnSize(nType, cx, cy);
+
+ ArrangeLayout();
+
+ if (m_status && m_progress) {
+ // Reposition the progress control correctly!
+ CRect statusRect, buttonRect;
+ m_status.GetClientRect(&statusRect);
+ GetDlgItem(IDOK)->GetWindowRect(&buttonRect);
+ ScreenToClient(&buttonRect);
+ int parts[2] = { buttonRect.left - 2, -1 };
+ m_status.SetParts(2, parts);
+ m_status.GetRect(1, &statusRect);
+ statusRect.DeflateRect(1, 1, 1, 1);
+ m_progress.SetWindowPos(&wndTop, statusRect.left, statusRect.top, statusRect.Width(), statusRect.Height(),
+ SWP_NOACTIVATE | SWP_NOZORDER);
+ }
+}
+
+void CSubtitleUpDlg::OnDestroy()
+{
+ RemoveAllAnchors();
+
+ const CHeaderCtrl& pHC = *m_list.GetHeaderCtrl();
+ CString strColumnWidth;
+
+ for (int i = 0; i < pHC.GetItemCount(); ++i) {
+ int w = m_list.GetColumnWidth(i);
+ strColumnWidth.AppendFormat(L"%d,", w);
+ }
+ AfxGetApp()->WriteProfileString(IDS_R_DLG_SUBTITLEUP, IDS_RS_DLG_SUBTITLEUP_COLWIDTH, strColumnWidth);
+
+ __super::OnDestroy();
+}
+
+BOOL CSubtitleUpDlg::OnEraseBkgnd(CDC* pDC)
+{
+ EraseBackground(pDC);
+
+ return TRUE;
+}
+
+void CSubtitleUpDlg::DownloadSelectedSubtitles()
+{
+ POSITION pos = m_list.GetFirstSelectedItemPosition();
+ while (pos) {
+ int nItem = m_list.GetNextSelectedItem(pos);
+ if (nItem >= 0 && nItem < m_list.GetItemCount()) {
+ ListView_SetCheckState(m_list.GetSafeHwnd(), nItem, TRUE);
+ }
+ }
+ //OnOK();
+}
+
+// ON_UPDATE_COMMAND_UI dows not work for modless dialogs
+BEGIN_MESSAGE_MAP(CSubtitleUpDlg, CResizableDialog)
+ ON_WM_ERASEBKGND()
+ ON_WM_SIZE()
+ ON_COMMAND(IDC_BUTTON1, OnAbort)
+ ON_COMMAND(IDC_BUTTON2, OnOptions)
+ ON_UPDATE_COMMAND_UI(IDOK, OnUpdateOk)
+ ON_WM_DESTROY()
+ ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDoubleClickSubtitle)
+ ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnKeyPressedSubtitle)
+ ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRightClick)
+ ON_NOTIFY(LVN_ITEMCHANGING, IDC_LIST1, OnItemChanging)
+ ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemChanged)
+
+ ON_MESSAGE(UWM_UPLOAD, OnUpload)
+ ON_MESSAGE(UWM_UPLOADING, OnUploading)
+ ON_MESSAGE(UWM_COMPLETED, OnCompleted)
+ ON_MESSAGE(UWM_FINISHED, OnFinished)
+ ON_MESSAGE(UWM_FAILED, OnFailed)
+ ON_MESSAGE(UWM_CLEAR, OnClear)
+END_MESSAGE_MAP()
+
+void CSubtitleUpDlg::OnDoubleClickSubtitle(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMITEMACTIVATE pItemActivate = (LPNMITEMACTIVATE)(pNMHDR);
+
+ if (pItemActivate->iItem >= 0 && m_list.GetCheck(pItemActivate->iItem) != -1) {
+ //DownloadSelectedSubtitles();
+ }
+}
+
+void CSubtitleUpDlg::OnKeyPressedSubtitle(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
+
+ if (pLVKeyDow->wVKey == VK_RETURN) {
+ //DownloadSelectedSubtitles();
+ *pResult = TRUE;
+ }
+}
+
+void CSubtitleUpDlg::OnRightClick(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)pNMHDR;
+
+ if (lpnmlv->iItem >= 0 && lpnmlv->iSubItem >= 0) {
+ auto& s = AfxGetAppSettings();
+ SubtitlesProvider& provider = *(SubtitlesProvider*)(m_list.GetItemData(lpnmlv->iItem));
+
+ enum {
+ SET_CREDENTIALS = 0x1000,
+ RESET_CREDENTIALS,
+ MOVE_UP,
+ MOVE_DOWN,
+ OPEN_URL,
+ COPY_URL
+ };
+
+ CMenu m;
+ m.CreatePopupMenu();
+ m.AppendMenu(MF_STRING | (provider.Flags(SPF_LOGIN) ? MF_ENABLED : MF_DISABLED), SET_CREDENTIALS,
+ ResStr(IDS_SUBMENU_SETUP));
+ m.AppendMenu(MF_STRING | (provider.Flags(SPF_LOGIN) && !provider.UserName().empty() ? MF_ENABLED : MF_DISABLED),
+ RESET_CREDENTIALS, ResStr(IDS_SUBMENU_RESET));
+ m.AppendMenu(MF_SEPARATOR);
+ m.AppendMenu(MF_STRING | (lpnmlv->iItem > 0 ? MF_ENABLED : MF_DISABLED), MOVE_UP, ResStr(IDS_SUBMENU_MOVEUP));
+ m.AppendMenu(MF_STRING | (lpnmlv->iItem < m_list.GetItemCount() - 1 ? MF_ENABLED : MF_DISABLED), MOVE_DOWN,
+ ResStr(IDS_SUBMENU_MOVEDOWN));
+ m.AppendMenu(MF_SEPARATOR);
+ m.AppendMenu(MF_STRING | MF_ENABLED, OPEN_URL, ResStr(IDS_SUBMENU_OPENURL));
+ m.AppendMenu(MF_STRING | MF_ENABLED, COPY_URL, ResStr(IDS_SUBMENU_COPYURL));
+
+ CPoint pt = lpnmlv->ptAction;
+ ::MapWindowPoints(lpnmlv->hdr.hwndFrom, HWND_DESKTOP, &pt, 1);
+
+ switch (m.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RETURNCMD, pt.x, pt.y, this)) {
+ case OPEN_URL:
+ provider.OpenUrl();
+ break;
+ case COPY_URL: {
+ if (!provider.Url().empty()) {
+ size_t len = provider.Url().length() + 1;
+ HGLOBAL hGlob = ::GlobalAlloc(GMEM_MOVEABLE, len * sizeof(CHAR));
+ if (hGlob) {
+ // Lock the handle and copy the text to the buffer
+ LPVOID pData = ::GlobalLock(hGlob);
+ if (pData) {
+ ::strcpy_s((CHAR*)pData, len, (LPCSTR)provider.Url().c_str());
+ ::GlobalUnlock(hGlob);
+
+ if (GetParent()->OpenClipboard()) {
+ // Place the handle on the clipboard, if the call succeeds
+ // the system will take care of the allocated memory
+ if (::EmptyClipboard() && ::SetClipboardData(CF_TEXT, hGlob)) {
+ hGlob = nullptr;
+ }
+
+ ::CloseClipboard();
+ }
+ }
+
+ if (hGlob) {
+ ::GlobalFree(hGlob);
+ }
+ }
+ }
+ break;
+ }
+ case SET_CREDENTIALS: {
+ CString szUser(UTF8To16(provider.UserName().c_str()));
+ CString szPass(UTF8To16(provider.Password().c_str()));
+ CString szDomain(provider.Name().c_str());
+ if (ERROR_SUCCESS == PromptForCredentials(GetSafeHwnd(),
+ ResStr(IDS_SUB_CREDENTIALS_TITLE),
+ ResStr(IDS_SUB_CREDENTIALS_MSG) + CString(provider.Url().c_str()),
+ szDomain, szUser, szPass, /*&bSave*/nullptr)) {
+ provider.UserName((const char*)UTF16To8(szUser));
+ provider.Password((const char*)UTF16To8(szPass));
+ m_list.SetItemText(lpnmlv->iItem, 1, szUser);
+ s.strSubtitlesProviders = CString(m_pMainFrame->m_pSubtitlesProviders->WriteSettings().c_str());
+ s.SaveSettings();
+ }
+ break;
+ }
+ case RESET_CREDENTIALS:
+ provider.UserName("");
+ provider.Password("");
+ m_list.SetItemText(lpnmlv->iItem, 1, _T(""));
+ s.strSubtitlesProviders = CString(m_pMainFrame->m_pSubtitlesProviders->WriteSettings().c_str());
+ s.SaveSettings();
+ break;
+ case MOVE_UP: {
+ m_pMainFrame->m_pSubtitlesProviders->MoveUp(lpnmlv->iItem);
+ ListView_SortItemsEx(m_list.GetSafeHwnd(), SortCompare, m_list.GetSafeHwnd());
+ s.strSubtitlesProviders = CString(m_pMainFrame->m_pSubtitlesProviders->WriteSettings().c_str());
+ s.SaveSettings();
+ break;
+ }
+ case MOVE_DOWN: {
+ m_pMainFrame->m_pSubtitlesProviders->MoveDown(lpnmlv->iItem);
+ ListView_SortItemsEx(m_list.GetSafeHwnd(), SortCompare, m_list.GetSafeHwnd());
+ s.strSubtitlesProviders = CString(m_pMainFrame->m_pSubtitlesProviders->WriteSettings().c_str());
+ s.SaveSettings();
+ break;
+ }
+ default:
+ break;
+ }
+ }
+}
+
+int CALLBACK CSubtitleUpDlg::SortCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
+{
+ CListCtrl& list = *(CListCtrl*)CListCtrl::FromHandle((HWND)lParamSort);
+ size_t left = ((SubtitlesProvider*)list.GetItemData((int)lParam1))->Index();
+ size_t right = ((SubtitlesProvider*)list.GetItemData((int)lParam2))->Index();
+ return int(left - right);
+}
+
+void CSubtitleUpDlg::OnItemChanging(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMLISTVIEW pNMLV = (LPNMLISTVIEW)(pNMHDR);
+
+ if (pNMLV->uOldState == 0 && pNMLV->uNewState == 0x1000 && pNMLV->lParam) {
+ *pResult = TRUE;
+ }
+}
+
+void CSubtitleUpDlg::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMLISTVIEW pNMLV = (LPNMLISTVIEW)(pNMHDR);
+
+ if (((pNMLV->uOldState | pNMLV->uNewState) == 0x3000) && pNMLV->lParam) {
+ SubtitlesProvider& _provider = *(SubtitlesProvider*)pNMLV->lParam;
+ _provider.Enabled(SPF_UPLOAD, pNMLV->uNewState == 0x2000 ? TRUE : FALSE);
+ auto& s = AfxGetAppSettings();
+ s.strSubtitlesProviders = CString(m_pMainFrame->m_pSubtitlesProviders->WriteSettings().c_str());
+ s.SaveSettings();
+ }
+
+ UpdateDialogControls(this, FALSE);
+}
+
+afx_msg LRESULT CSubtitleUpDlg::OnUpload(WPARAM wParam, LPARAM /*lParam*/)
+{
+ INT _nCount = (INT)wParam;
+
+ SetStatusText(ResStr(IDS_SUBUL_DLG_UPLOADING));
+ GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
+
+ m_progress.SetRange32(0, _nCount);
+ m_progress.SetStep(1);
+ m_progress.SetPos(0);
+
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleUpDlg::OnUploading(WPARAM /*wParam*/, LPARAM lParam)
+{
+ SubtitlesProvider& _provider = *(SubtitlesProvider*)lParam;
+
+ for (int i = 0; i < m_list.GetItemCount(); ++i) {
+ SubtitlesProvider& iter = *(SubtitlesProvider*)m_list.GetItemData(i);
+ if (&iter == &_provider) {
+ m_list.SetItemText(i, COL_STATUS, ResStr(IDS_SUBUL_DLG_STATUS_UPLOADING));
+ }
+ }
+ UpdateWindow();
+
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleUpDlg::OnCompleted(WPARAM wParam, LPARAM lParam)
+{
+ SRESULT _result = (SRESULT)wParam;
+ SubtitlesProvider& _provider = *(SubtitlesProvider*)lParam;
+
+ m_progress.StepIt();
+
+ for (int i = 0; i < m_list.GetItemCount(); ++i) {
+ SubtitlesProvider& iter = *(SubtitlesProvider*)m_list.GetItemData(i);
+ if (&iter == &_provider) {
+ switch (_result) {
+ case SR_SUCCEEDED:
+ m_list.SetItemText(i, COL_STATUS, ResStr(IDS_SUBUL_DLG_STATUS_UPLOADED));
+ break;
+ case SR_FAILED:
+ m_list.SetItemText(i, COL_STATUS, ResStr(IDS_SUBUL_DLG_STATUS_FAILED));
+ break;
+ case SR_ABORTED:
+ m_list.SetItemText(i, COL_STATUS, ResStr(IDS_SUBUL_DLG_STATUS_ABORTED));
+ break;
+ case SR_EXISTS:
+ m_list.SetItemText(i, COL_STATUS, ResStr(IDS_SUBUL_DLG_STATUS_ALREADYEXISTS));
+ break;
+ }
+ }
+ }
+ UpdateWindow();
+
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleUpDlg::OnFinished(WPARAM wParam, LPARAM /*lParam*/)
+{
+ BOOL _bAborted = (BOOL)wParam;
+
+ if (_bAborted == FALSE) {
+ SetStatusText(StrRes(IDS_SUBUL_DLG_UPLOADED));
+ } else {
+ SetStatusText(StrRes(IDS_SUBUL_DLG_ABORTED));
+ }
+
+ GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
+ UpdateWindow();
+
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleUpDlg::OnFailed(WPARAM /*wParam*/, LPARAM /*lParam*/)
+{
+ SetStatusText(StrRes(IDS_SUBUL_DLG_FAILED));
+
+ return S_OK;
+}
+
+afx_msg LRESULT CSubtitleUpDlg::OnClear(WPARAM /*wParam*/, LPARAM /*lParam*/)
+{
+ m_progress.SetPos(0);
+ SetStatusText(_T(""));
+
+ for (int i = 0; i < m_list.GetItemCount(); ++i) {
+ SubtitlesProvider& iter = *(SubtitlesProvider*)m_list.GetItemData(i);
+ if (iter.Flags(SPF_UPLOAD)) {
+ m_list.SetItemText(i, COL_STATUS, ResStr(IDS_SUBUL_DLG_STATUS_READY));
+ }
+ }
+
+ GetDlgItem(IDC_BUTTON2)->ShowWindow(FALSE);
+ GetDlgItem(IDC_BUTTON1)->ShowWindow(TRUE);
+ GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
+ UpdateWindow();
+
+ return S_OK;
+}
+
+void CSubtitleUpDlg::DoUpload(INT _nCount)
+{
+ SendMessage(UWM_UPLOAD, (WPARAM)_nCount, (LPARAM)nullptr);
+}
+void CSubtitleUpDlg::DoUploading(std::shared_ptr<SubtitlesProvider> _provider)
+{
+ SendMessage(UWM_UPLOADING, (WPARAM)nullptr, (LPARAM)_provider.get());
+}
+void CSubtitleUpDlg::DoCompleted(SRESULT _result, std::shared_ptr<SubtitlesProvider> _provider)
+{
+ SendMessage(UWM_COMPLETED, (WPARAM)_result, (LPARAM)_provider.get());
+}
+void CSubtitleUpDlg::DoFinished(BOOL _bAborted)
+{
+ SendMessage(UWM_FINISHED, (WPARAM)_bAborted, (LPARAM)nullptr);
+}
+void CSubtitleUpDlg::DoFailed()
+{
+ SendMessage(UWM_FAILED, (WPARAM)nullptr, (LPARAM)nullptr);
+}
+void CSubtitleUpDlg::DoClear()
+{
+ SendMessage(UWM_CLEAR, (WPARAM)nullptr, (LPARAM)nullptr);
+}
diff --git a/src/mpc-hc/SubtitleUpDlg.h b/src/mpc-hc/SubtitleUpDlg.h
new file mode 100644
index 000000000..4924ecd7c
--- /dev/null
+++ b/src/mpc-hc/SubtitleUpDlg.h
@@ -0,0 +1,90 @@
+/*
+ * (C) 2016 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include "resource.h"
+#include "ResizableLib/ResizableDialog.h"
+
+class CMainFrame;
+class SubtitlesProvider;
+enum SRESULT;
+
+class CSubtitleUpDlg : public CResizableDialog
+{
+ enum {
+ COL_PROVIDER,
+ COL_USERNAME,
+ COL_STATUS,
+ COL_TOTAL_COLUMNS
+ };
+
+ CListCtrl m_list;
+ CProgressCtrl m_progress;
+ CStatusBarCtrl m_status;
+ CMainFrame* m_pMainFrame;
+
+ void DownloadSelectedSubtitles();
+ void SetStatusText(const CString& status, BOOL bPropagate = TRUE);
+
+public:
+ CSubtitleUpDlg(CMainFrame* pParentWnd);
+ virtual ~CSubtitleUpDlg() = default;
+ enum { IDD = IDD_SUBTITLEUP_DLG };
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX);
+ virtual BOOL OnInitDialog();
+ virtual BOOL PreTranslateMessage(MSG* pMsg);
+ virtual void OnOK();
+ virtual void OnCancel();
+
+ static int CALLBACK SortCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
+
+ DECLARE_MESSAGE_MAP()
+
+ afx_msg void OnSize(UINT nType, int cx, int cy);
+ afx_msg void OnUpdateOk(CCmdUI* pCmdUI);
+ afx_msg void OnUpdateRefresh(CCmdUI* pCmdUI);
+ afx_msg void OnAbort();
+ afx_msg void OnOptions();
+ afx_msg void OnDestroy();
+ afx_msg BOOL OnEraseBkgnd(CDC* pDC);
+ afx_msg void OnDoubleClickSubtitle(NMHDR* pNMHDR, LRESULT* pResult);
+ afx_msg void OnKeyPressedSubtitle(NMHDR* pNMHDR, LRESULT* pResult);
+ afx_msg void OnRightClick(NMHDR* pNMHDR, LRESULT* pResult);
+ afx_msg void OnItemChanging(NMHDR* pNMHDR, LRESULT* pResult);
+ afx_msg void OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult);
+
+ afx_msg LRESULT OnUpload(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnUploading(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnCompleted(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnFinished(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnFailed(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnClear(WPARAM wParam, LPARAM lParam);
+
+public:
+ void DoUpload(INT _nCount);
+ void DoUploading(std::shared_ptr<SubtitlesProvider> _provider);
+ void DoCompleted(SRESULT _result, std::shared_ptr<SubtitlesProvider> _provider);
+ void DoFinished(BOOL _bAborted);
+ void DoFailed();
+ void DoClear();
+};
diff --git a/src/mpc-hc/SubtitlesProvider.cpp b/src/mpc-hc/SubtitlesProvider.cpp
new file mode 100644
index 000000000..e4ece81db
--- /dev/null
+++ b/src/mpc-hc/SubtitlesProvider.cpp
@@ -0,0 +1,1139 @@
+/*
+ * (C) 2016-2017 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "SubtitlesProvider.h"
+#include "SubtitlesProvidersUtils.h"
+#include "mplayerc.h"
+#include "ISOLang.h"
+#include "Logger.h"
+#include "MediaInfo/library/Source/ThirdParty/base64/base64.h"
+#include "tinyxml2/library/tinyxml2.h"
+#include "rapidjson/include/rapidjson/document.h"
+
+#define LOG if (AfxGetAppSettings().bEnableLogging) SUBTITLES_LOG
+#define LOG_NONE _T("()")
+#define LOG_INPUT _T("(\"%S\")")
+#define LOG_OUTPUT _T("()=%S")
+#define LOG_BOTH _T("(\"%S\")=%S")
+#define LOG_ERROR _T("() ERROR: %S")
+
+#define GUESSED_NAME_POSTFIX " (*)"
+#define CheckAbortAndReturn() { if (IsAborting()) return SR_ABORTED; }
+
+// Uncomment define to compile the temporarily disabled subtitles providers.
+// Subtitles providers are disabled in case their API ceases to work.
+// In case the API is not restored in due time, the provider will eventually
+// be removed from mpc-hc. Upon removal, also remove icon resources.
+//#define MPCHC_DISABLED_SUBTITLES_PROVIDER
+
+using namespace SubtitlesProvidersUtils;
+
+class LanguageDownloadException : public std::exception
+{
+ using exception::exception;
+};
+
+/******************************************************************************
+** Register providers
+******************************************************************************/
+void SubtitlesProviders::RegisterProviders()
+{
+ Register<OpenSubtitles>(this);
+ Register<podnapisi>(this);
+#ifdef MPCHC_DISABLED_SUBTITLES_PROVIDER
+ Register<titlovi>(this);
+#endif // MPCHC_DISABLED_SUBTITLES_PROVIDER
+ Register<SubDB>(this);
+#ifdef MPCHC_DISABLED_SUBTITLES_PROVIDER
+ Register<ysubs>(this);
+#endif // MPCHC_DISABLED_SUBTITLES_PROVIDER
+ Register<Napisy24>(this);
+}
+
+/******************************************************************************
+** OpenSubtitles
+******************************************************************************/
+
+void OpenSubtitles::Initialize()
+{
+ xmlrpc = std::make_unique<XmlRpcClient>("http://api.opensubtitles.org/xml-rpc");
+ xmlrpc->setIgnoreCertificateAuthority();
+}
+
+SRESULT OpenSubtitles::Login(const std::string& sUserName, const std::string& sPassword)
+{
+ if (xmlrpc) {
+ XmlRpcValue args, result;
+ args[0] = sUserName;
+ args[1] = sPassword;
+ args[2] = "en";
+ const auto& strUA = UserAgent();
+ args[3] = strUA.c_str(); // Test with "OSTestUserAgent"
+ if (!xmlrpc->execute("LogIn", args, result)) {
+ return SR_FAILED;
+ }
+
+ if (result["status"].getType() == XmlRpcValue::Type::TypeString) {
+ if (result["status"] == std::string("200 OK")) {
+ token = result["token"];
+ } else if (result["status"] == std::string("401 Unauthorized")) {
+ // Notify user that User/Pass provided are invalid.
+ CString msg;
+ msg.Format(IDS_SUB_CREDENTIALS_ERROR, Name().c_str(), UserName().c_str());
+ AfxMessageBox(msg, MB_ICONERROR | MB_OK);
+ }
+ }
+ }
+
+ LOG(LOG_BOTH, sUserName.c_str(), token.valid() ? (LPCSTR)token : "failed");
+ return token.valid() ? SR_SUCCEEDED : SR_FAILED;
+}
+
+SRESULT OpenSubtitles::LogOut()
+{
+ if (xmlrpc && token.valid()) {
+ XmlRpcValue args, result;
+ args[0] = token;
+ VERIFY(xmlrpc->execute("LogOut", args, result));
+ token.clear();
+ }
+ m_nLoggedIn = SPL_UNDEFINED;
+
+ LOG(LOG_NONE);
+ return SR_SUCCEEDED;
+}
+
+SRESULT OpenSubtitles::Hash(SubtitlesInfo& pFileInfo)
+{
+ pFileInfo.fileHash = StringFormat("%016I64x", GenerateOSHash(pFileInfo));
+ LOG(LOG_OUTPUT, pFileInfo.fileHash.c_str());
+ return SR_SUCCEEDED;
+}
+
+SRESULT OpenSubtitles::Search(const SubtitlesInfo& pFileInfo)
+{
+ const auto languages = LanguagesISO6392();
+ XmlRpcValue args, result;
+ args[0] = token;
+ auto& movieInfo = args[1][0];
+ movieInfo["sublanguageid"] = !languages.empty() ? JoinContainer(languages, ",") : "all";
+ movieInfo["moviehash"] = pFileInfo.fileHash;
+ movieInfo["moviebytesize"] = std::to_string(pFileInfo.fileSize);
+ //args[1][1]["sublanguageid"] = !languages.empty() ? languages : "all";
+ //args[1][1]["tag"] = pFileInfo.fileName + "." + pFileInfo.fileExtension;
+ args[2]["limit"] = 500;
+
+ LOG(LOG_INPUT,
+ StringFormat("{ sublanguageid=\"%s\", moviehash=\"%s\", moviebytesize=\"%s\", limit=%d }",
+ (LPCSTR)movieInfo["sublanguageid"],
+ (LPCSTR)movieInfo["moviehash"],
+ (LPCSTR)movieInfo["moviebytesize"],
+ (int)args[2]["limit"]).c_str());
+
+ if (!xmlrpc->execute("SearchSubtitles", args, result)) {
+ return SR_FAILED;
+ }
+
+ if (result["data"].getType() != XmlRpcValue::Type::TypeArray) {
+ return SR_FAILED;
+ }
+
+ int nCount = result["data"].size();
+ for (int i = 0; i < nCount; ++i) {
+ CheckAbortAndReturn();
+ XmlRpcValue& data(result["data"][i]);
+ SubtitlesInfo pSubtitlesInfo;
+ pSubtitlesInfo.id = (const char*)data["IDSubtitleFile"];
+ pSubtitlesInfo.discNumber = data["SubActualCD"];
+ pSubtitlesInfo.discCount = data["SubSumCD"];
+ pSubtitlesInfo.fileExtension = (const char*)data["SubFormat"];
+ pSubtitlesInfo.languageCode = (const char*)data["ISO639"]; //"SubLanguageID"
+ pSubtitlesInfo.languageName = (const char*)data["LanguageName"];
+ pSubtitlesInfo.downloadCount = data["SubDownloadsCnt"];
+
+ pSubtitlesInfo.fileName = (const char*)data["SubFileName"];
+ regexResult results;
+ stringMatch("\"([^\"]+)\" (.+)", (const char*)data["MovieName"], results);
+ if (!results.empty()) {
+ pSubtitlesInfo.title = results[0];
+ pSubtitlesInfo.title2 = results[1];
+ } else {
+ pSubtitlesInfo.title = (const char*)data["MovieName"];
+ }
+ pSubtitlesInfo.year = (int)data["MovieYear"] == 0 ? -1 : (int)data["MovieYear"];
+ pSubtitlesInfo.seasonNumber = (int)data["SeriesSeason"] == 0 ? -1 : (int)data["SeriesSeason"];
+ pSubtitlesInfo.episodeNumber = (int)data["SeriesEpisode"] == 0 ? -1 : (int)data["SeriesEpisode"];
+ pSubtitlesInfo.hearingImpaired = data["SubHearingImpaired"];
+ pSubtitlesInfo.url = (const char*)data["SubtitlesLink"];
+ pSubtitlesInfo.releaseNames.emplace_back((const char*)data["MovieReleaseName"]);
+ pSubtitlesInfo.imdbid = (const char*)data["IDMovieImdb"];
+ pSubtitlesInfo.corrected = (int)data["SubBad"] ? -1 : 0;
+ Set(pSubtitlesInfo);
+ }
+ return SR_SUCCEEDED;
+}
+
+SRESULT OpenSubtitles::Download(SubtitlesInfo& pSubtitlesInfo)
+{
+ XmlRpcValue args, result;
+ args[0] = token;
+ args[1][0] = pSubtitlesInfo.id;
+ if (!xmlrpc->execute("DownloadSubtitles", args, result)) {
+ return SR_FAILED;
+ }
+
+ LOG(LOG_INPUT, pSubtitlesInfo.id.c_str());
+
+ if (result["data"].getType() != XmlRpcValue::Type::TypeArray) {
+ return SR_FAILED;
+ }
+
+ pSubtitlesInfo.fileContents = Base64::decode(std::string(result["data"][0]["data"]));
+ return SR_SUCCEEDED;
+}
+
+SRESULT OpenSubtitles::Upload(const SubtitlesInfo& pSubtitlesInfo)
+{
+ XmlRpcValue args, result;
+ args[0] = token;
+
+ //TODO: Ask how to obtain commented values !!!
+ args[1]["cd1"]["subhash"] = StringToHash(pSubtitlesInfo.fileContents, CALG_MD5);
+ args[1]["cd1"]["subfilename"] = pSubtitlesInfo.fileName + ".srt";
+ args[1]["cd1"]["moviehash"] = pSubtitlesInfo.fileHash;
+ args[1]["cd1"]["moviebytesize"] = std::to_string(pSubtitlesInfo.fileSize);
+ //args[1]["cd1"]["movietimems"];
+ //args[1]["cd1"]["movieframes"];
+ //args[1]["cd1"]["moviefps"];
+ args[1]["cd1"]["moviefilename"] = pSubtitlesInfo.fileName + "." + pSubtitlesInfo.fileExtension;
+
+ CheckAbortAndReturn();
+ if (!xmlrpc->execute("TryUploadSubtitles", args, result)) {
+ return SR_FAILED;
+ }
+ CheckAbortAndReturn();
+
+ if ((int)result["alreadyindb"] == 1) {
+ return SR_EXISTS;
+ } else if ((int)result["alreadyindb"] == 0) {
+ // We need imdbid to proceed
+ if (result["data"].getType() == XmlRpcValue::Type::TypeArray) {
+ args[1]["baseinfo"]["idmovieimdb"] = result["data"][0]["IDMovieImdb"];
+ } else if (!pSubtitlesInfo.imdbid.empty()) {
+ args[1]["baseinfo"]["idmovieimdb"] = pSubtitlesInfo.imdbid;
+ } else {
+ std::string title(StringReplace(pSubtitlesInfo.title, "and", "&"));
+ if (!args[1]["baseinfo"]["idmovieimdb"].valid()) {
+ XmlRpcValue _args, _result;
+ _args[0] = token;
+ _args[1][0] = pSubtitlesInfo.fileHash;
+ if (!xmlrpc->execute("CheckMovieHash", _args, _result)) {
+ return SR_FAILED;
+ }
+
+ if (_result["data"].getType() == XmlRpcValue::Type::TypeStruct) {
+ //regexResults results;
+ //stringMatch("\"(.+)\" (.+)", (const char*)data["MovieName"], results);
+ //if (!results.empty()) {
+ // pSubtitlesInfo.title = results[0][0];
+ // pSubtitlesInfo.title2 = results[0][1];
+ //} else {
+ // pSubtitlesInfo.title = (const char*)data["MovieName"];
+ //}
+ regexResults results;
+ stringMatch("\"(.+)\" .+|(.+)", StringReplace((const char*)_result["data"][pSubtitlesInfo.fileHash]["MovieName"], "and", "&"), results);
+ std::string _title(results[0][0] + results[0][1]);
+
+ if (_stricmp(title.c_str(), _title.c_str()) == 0 /*&& (pSubtitlesInfo.year == -1 || (pSubtitlesInfo.year != -1 && pSubtitlesInfo.year == atoi(_result["data"][pSubtitlesInfo.fileHash]["MovieYear"])))*/) {
+ args[1]["baseinfo"]["idmovieimdb"] = _result["data"][pSubtitlesInfo.fileHash]["MovieImdbID"]; //imdbid
+ }
+ }
+ }
+
+ if (!args[1]["baseinfo"]["idmovieimdb"].valid()) {
+ XmlRpcValue _args, _result;
+ _args[0] = token;
+ _args[1][0] = pSubtitlesInfo.fileHash;
+ if (!xmlrpc->execute("CheckMovieHash2", _args, _result)) {
+ return SR_FAILED;
+ }
+
+ if (_result["data"].getType() == XmlRpcValue::Type::TypeArray) {
+ int nCount = _result["data"][pSubtitlesInfo.fileHash].size();
+ for (int i = 0; i < nCount; ++i) {
+ regexResults results;
+ stringMatch("\"(.+)\" .+|(.+)", StringReplace((const char*)_result["data"][pSubtitlesInfo.fileHash][i]["MovieName"], "and", "&"), results);
+ std::string _title(results[0][0] + results[0][1]);
+
+ if (_stricmp(title.c_str(), _title.c_str()) == 0 /*&& (pSubtitlesInfo.year == -1 || (pSubtitlesInfo.year != -1 && pSubtitlesInfo.year == atoi(_result["data"][pSubtitlesInfo.fileHash][i]["MovieYear"])))*/) {
+ args[1]["baseinfo"]["idmovieimdb"] = _result["data"][pSubtitlesInfo.fileHash][i]["MovieImdbID"]; //imdbid
+ break;
+ }
+ }
+ }
+ }
+
+ if (!args[1]["baseinfo"]["idmovieimdb"].valid()) {
+ XmlRpcValue _args, _result;
+ _args[0] = token;
+ _args[1] = title;
+ if (!xmlrpc->execute("SearchMoviesOnIMDB", _args, _result)) {
+ return SR_FAILED;
+ }
+ if (_result["data"].getType() == XmlRpcValue::Type::TypeArray) {
+ int nCount = _result["data"].size();
+ for (int i = 0; i < nCount; ++i) {
+ regexResults results;
+ stringMatch("(.+) [(](\\d{4})[)]", StringReplace((const char*)_result["data"][i]["title"], "and", "&"), results);
+ if (results.size() == 1) {
+ std::string _title(results[0][0]);
+
+ if (_stricmp(title.c_str(), _title.c_str()) == 0 /*&& (pSubtitlesInfo.year == -1 || (pSubtitlesInfo.year != -1 && pSubtitlesInfo.year == atoi(results[0][1].c_str())))*/) {
+ args[1]["baseinfo"]["idmovieimdb"] = _result["data"][i]["id"]; //imdbid
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (args[1]["baseinfo"]["idmovieimdb"].valid()) {
+ XmlRpcValue _args, _result;
+ _args[0] = token;
+ _args[1][0]["moviehash"] = pSubtitlesInfo.fileHash;
+ _args[1][0]["moviebytesize"] = (int)pSubtitlesInfo.fileSize;
+ _args[1][0]["imdbid"] = args[1]["baseinfo"]["idmovieimdb"];
+ //_args[1][0]["movietimems"];
+ //_args[1][0]["moviefps"];
+ _args[1][0]["moviefilename"] = pSubtitlesInfo.fileName + "." + pSubtitlesInfo.fileExtension;
+ if (!xmlrpc->execute("InsertMovieHash", _args, _result)) {
+ return SR_FAILED;
+ }
+ // REsult value is irrelevant
+ _result["data"]["accepted_moviehashes"];
+
+
+ //args[1]["baseinfo"]["moviereleasename"];
+ //args[1]["baseinfo"]["movieaka"];
+ //args[1]["baseinfo"]["sublanguageid"];
+ //args[1]["baseinfo"]["subauthorcomment"];
+ if (pSubtitlesInfo.hearingImpaired != -1) {
+ args[1]["baseinfo"]["hearingimpaired"] = pSubtitlesInfo.hearingImpaired;
+ }
+ //args[1]["baseinfo"]["highdefinition"];
+ //args[1]["baseinfo"]["automatictranslation"];
+
+ args[1]["cd1"]["subcontent"] = Base64::encode(StringGzipCompress(pSubtitlesInfo.fileContents));
+
+ if (!xmlrpc->execute("UploadSubtitles", args, result)) {
+ return SR_FAILED;
+ }
+ LOG(LOG_OUTPUT, (LPCSTR)result["data"]);
+
+ return SR_SUCCEEDED;
+ }
+ }
+ return SR_FAILED;
+}
+
+const std::set<std::string>& OpenSubtitles::Languages() const
+{
+ static std::once_flag initialized;
+ static std::set<std::string> result;
+
+ try {
+ std::call_once(initialized, [this]() {
+ if (!CheckInternetConnection()) {
+ throw LanguageDownloadException("No internet connection.");
+ }
+ XmlRpcValue args, res;
+ args = "en";
+ if (!xmlrpc->execute("GetSubLanguages", args, res)) {
+ throw LanguageDownloadException("Failed to execute xmlrpc command.");
+ }
+ if (res["data"].getType() != XmlRpcValue::Type::TypeArray) {
+ throw LanguageDownloadException("Response is not an array.");
+ }
+
+ auto& data = res["data"];
+ int count = data.size();
+ for (int i = 0; i < count; ++i) {
+#ifdef _DEBUG
+ // Validate if language code conversion is in sync with OpenSubtitles database.
+ std::string subLanguageID = data[i]["SubLanguageID"];
+ std::string ISO6391 = data[i]["ISO639"];
+ ASSERT(!ISO6391.empty());
+ ASSERT(!subLanguageID.empty());
+ ASSERT(ISOLang::ISO6391To6392(ISO6391.c_str()) == subLanguageID.c_str());
+ ASSERT(ISOLang::ISO6392To6391(subLanguageID.c_str()) == ISO6391.c_str());
+ //std::string languageName = data[i]["LanguageName"];
+ //ASSERT(ISO639XToLanguage(ISO6391.c_str()) == languageName.c_str());
+ //ASSERT(ISO639XToLanguage(subLanguageID.c_str()) == languageName.c_str());
+#endif
+ result.emplace(data[i]["ISO639"]);
+ }
+ });
+ } catch (const LanguageDownloadException& e) {
+ UNREFERENCED_PARAMETER(e);
+ LOG(LOG_ERROR, e.what());
+ }
+ return result;
+}
+
+bool OpenSubtitles::NeedLogin()
+{
+ // return true to call Login() or false to skip Login()
+ if (!token.valid()) {
+ return true;
+ }
+
+ XmlRpcValue args, result;
+ args[0] = token;
+ if (!xmlrpc->execute("NoOperation", args, result)) {
+ return false;
+ }
+
+ if ((result["status"].getType() == XmlRpcValue::Type::TypeString) && (result["status"] == std::string("200 OK"))) {
+ return false;
+ }
+
+ return true;
+}
+
+
+/******************************************************************************
+** SubDB
+******************************************************************************/
+
+SRESULT SubDB::Hash(SubtitlesInfo& pFileInfo)
+{
+ std::vector<BYTE> buffer(2 * PROBE_SIZE);
+ if (pFileInfo.pAsyncReader) {
+ UINT64 position = 0;
+ pFileInfo.pAsyncReader->SyncRead(position, PROBE_SIZE, (BYTE*)&buffer[0]);
+ position = std::max((UINT64)0, (UINT64)(pFileInfo.fileSize - PROBE_SIZE));
+ pFileInfo.pAsyncReader->SyncRead(position, PROBE_SIZE, (BYTE*)&buffer[PROBE_SIZE]);
+ } else {
+ CFile file;
+ CFileException fileException;
+ if (file.Open(CString(pFileInfo.filePath.c_str()),
+ CFile::modeRead | CFile::osSequentialScan | CFile::shareDenyNone | CFile::typeBinary,
+ &fileException)) {
+ file.Read(&buffer[0], PROBE_SIZE);
+ file.Seek(std::max((UINT64)0, (UINT64)(pFileInfo.fileSize - PROBE_SIZE)), CFile::begin);
+ file.Read(&buffer[PROBE_SIZE], PROBE_SIZE);
+ }
+ }
+ pFileInfo.fileHash = StringToHash(std::string((char*)&buffer[0], buffer.size()), CALG_MD5);
+ LOG(LOG_OUTPUT, pFileInfo.fileHash.c_str());
+ return SR_SUCCEEDED;
+}
+
+SRESULT SubDB::Search(const SubtitlesInfo& pFileInfo)
+{
+ SRESULT searchResult = SR_UNDEFINED;
+ std::string url(StringFormat("http://api.thesubdb.com/?action=search&hash=%s", pFileInfo.fileHash.c_str()));
+ LOG(LOG_INPUT, url.c_str());
+
+ std::string data;
+ searchResult = DownloadInternal(url, "", data);
+
+ if (!data.empty()) {
+ for (const auto& iter : StringTokenize(data, ",")) {
+ CheckAbortAndReturn();
+ if (CheckLanguage(iter)) {
+ SubtitlesInfo pSubtitlesInfo;
+ pSubtitlesInfo.id = pFileInfo.fileHash;
+ pSubtitlesInfo.fileExtension = "srt";
+ pSubtitlesInfo.fileName = pFileInfo.fileName + GUESSED_NAME_POSTFIX;
+ pSubtitlesInfo.languageCode = iter;
+ pSubtitlesInfo.languageName = UTF16To8(ISOLang::ISO639XToLanguage(iter.c_str()));
+ pSubtitlesInfo.discNumber = 1;
+ pSubtitlesInfo.discCount = 1;
+ pSubtitlesInfo.title = pFileInfo.title;
+ Set(pSubtitlesInfo);
+ }
+ }
+ }
+
+ return searchResult;
+}
+
+SRESULT SubDB::Download(SubtitlesInfo& pSubtitlesInfo)
+{
+ std::string url(StringFormat("http://api.thesubdb.com/?action=download&hash=%s&language=%s", pSubtitlesInfo.id.c_str(), pSubtitlesInfo.languageCode.c_str()));
+ LOG(LOG_INPUT, url.c_str());
+ return DownloadInternal(url, "", pSubtitlesInfo.fileContents);
+}
+
+SRESULT SubDB::Upload(const SubtitlesInfo& pSubtitlesInfo)
+{
+#define MULTIPART_BOUNDARY "xYzZY"
+ std::string url(StringFormat("http://api.thesubdb.com/?action=upload&hash=%s", pSubtitlesInfo.fileHash.c_str()));
+ stringMap headers({
+ { "User-Agent", UserAgent() },
+ { "Content-Type", "multipart/form-data; boundary=" MULTIPART_BOUNDARY },
+ });
+
+ std::string content, data;
+ content += StringFormat("--%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n%s\r\n", MULTIPART_BOUNDARY, "hash", pSubtitlesInfo.fileHash.c_str());
+ content += StringFormat("--%s\r\nContent-Disposition: form-data; name=\"%s\"; filename=\"%s.%s\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n",
+ MULTIPART_BOUNDARY, "file", pSubtitlesInfo.fileHash.c_str(), "srt");
+ content += pSubtitlesInfo.fileContents;
+ content += StringFormat("\r\n--%s--\r\n", MULTIPART_BOUNDARY);
+
+ CheckAbortAndReturn();
+
+ DWORD dwStatusCode = NULL;
+ StringUpload(url, headers, content, data, FALSE, &dwStatusCode);
+
+ LOG(LOG_BOTH, url.c_str(), std::to_string(dwStatusCode).c_str());
+
+ switch (dwStatusCode) {
+ case 201:
+ return SR_SUCCEEDED; //'Uploaded': (HTTP/1.1 201 Created): If everything was OK, the HTTP status code 201 will be returned.
+ case 403:
+ return SR_EXISTS; //'Duplicated': (HTTP/1.1 403 Forbidden): If the subtitle file already exists in our database, the HTTP status code 403 will be returned.
+ case 400:
+ return SR_FAILED; //'Malformed': (HTTP/1.1 400 Bad Request): If the request was malformed, the HTTP status code 400 will be returned.
+ case 415:
+ return SR_FAILED; //'Invalid': (HTTP/1.1 415 Unsupported Media Type): If the subtitle file is not supported by our database, the HTTP status code 415 will be returned.
+ default:
+ return SR_UNDEFINED;
+ }
+}
+
+const std::set<std::string>& SubDB::Languages() const
+{
+ static std::once_flag initialized;
+ static std::set<std::string> result;
+ try {
+ std::call_once(initialized, [this]() {
+ if (!CheckInternetConnection()) {
+ throw LanguageDownloadException("No internet connection.");
+ }
+ std::string data;
+ if (DownloadInternal("http://api.thesubdb.com/?action=languages", "", data) != SR_SUCCEEDED) {
+ throw LanguageDownloadException("Failed to download language list.");
+ }
+ for (const auto& str : StringTokenize(data, ",")) {
+ result.emplace(str);
+ }
+ });
+ } catch (const LanguageDownloadException& e) {
+ UNREFERENCED_PARAMETER(e);
+ LOG(LOG_ERROR, e.what());
+ }
+ return result;
+}
+
+/******************************************************************************
+** podnapisi
+******************************************************************************/
+
+SRESULT podnapisi::Login(const std::string& sUserName, const std::string& sPassword)
+{
+ //TODO: implement
+ return SR_UNDEFINED;
+}
+
+/*
+UPDATED
+https://www.podnapisi.net/forum/viewtopic.php?f=62&t=26164#p212652
+RESULTS ------------------------------------------------
+"/sXML/1/" //Reply in XML format
+"/page//" //Return nth page of results
+SEARCH -------------------------------------------------
+"/sT/1/" //Type: -1=all, 0=movies, 1=series, don't specify for auto detection
+"/sAKA/1/" //Include movie title aliases
+"/sM//" //Movie id from www.omdb.si
+"/sK//" //Title url encoded text
+"/sY//" //Year number
+"/sTS//" //Season number
+"/sTE//" //Episode number
+"/sR//" //Release name url encoded text
+"/sJ/0/" //Languages (old integer IDs), comma delimited, 0=all
+"/sL/en/" //Languages in ISO ISO codes (exception are sr-latn and pt-br), comma delimited
+"/sEH//" //Exact hash match (OSH)
+"/sMH//" //Movie hash (OSH)
+SEARCH ADDITIONAL --------------------------------------
+"/sFT/0/" //Subtitles Format: 0=all, 1=MicroDVD, 2=SAMI, 3=SSA, 4=SubRip, 5=SubViewer 2.0, 6=SubViewer, 7=MPSub, 8=Advanced SSA, 9=DVDSubtitle, 10=TMPlayer, 11=MPlayer2
+"/sA/0/" //Search subtitles by user id, 0=all
+"/sI//" //Search subtitles by subtitle id
+SORTING ------------------------------------------------
+"/sS//" //Sorting field: movie, year, fps, language, downloads, cds, username, time, rating
+"/sO//" //Soring order: asc, desc
+FILTERS ------------------------------------------------
+"/sOE/1/" //Subtitles for extended edition only
+"/sOD/1/" //Subtitles suitable for DVD only
+"/sOH/1/" //Subtitles for high-definition video only
+"/sOI/1/" //Subtitles for hearing impaired only
+"/sOT/1/" //Technically correct only
+"/sOL/1/" //Grammatically correct only
+"/sOA/1/" //Author subtitles only
+"/sOCS/1/" //Only subtitles for a complete season
+UNKNOWN ------------------------------------------------
+"/sH//" //Search subtitles by video file hash ??? (not working for me)
+*/
+
+SRESULT podnapisi::Search(const SubtitlesInfo& pFileInfo)
+{
+ SRESULT searchResult = SR_UNDEFINED;
+ int page = 1, pages = 1, results = 0;
+ do {
+ CheckAbortAndReturn();
+
+ const auto languages = LanguagesISO6391();
+ std::string search(pFileInfo.title);
+ if (!pFileInfo.country.empty()) {
+ search += " " + pFileInfo.country;
+ }
+ search = std::regex_replace(search, std::regex(" and | *[!?&':] *", RegexFlags), " ");
+
+ std::string url("https://www.podnapisi.net/ppodnapisi/search");
+ url += "?sXML=1";
+ url += "&sAKA=1";
+ url += (!search.empty() ? "&sK=" + UrlEncode(search.c_str()) : "");
+ url += (pFileInfo.year != -1 ? "&sY=" + std::to_string(pFileInfo.year) : "");
+ url += (pFileInfo.seasonNumber != -1 ? "&sTS=" + std::to_string(pFileInfo.seasonNumber) : "");
+ url += (pFileInfo.episodeNumber != -1 ? "&sTE=" + std::to_string(pFileInfo.episodeNumber) : "");
+ url += "&sMH=" + pFileInfo.fileHash;
+ //url += "&sR=" + UrlEncode(pFileInfo.fileName.c_str());
+ url += (!languages.empty() ? "&sL=" + JoinContainer(languages, ",") : "");
+ url += "&page=" + std::to_string(page);
+ LOG(LOG_INPUT, url.c_str());
+
+ std::string data;
+ searchResult = DownloadInternal(url, "", data);
+
+ using namespace tinyxml2;
+
+ tinyxml2::XMLDocument dxml;
+ if (dxml.Parse(data.c_str()) == XML_SUCCESS) {
+
+ auto GetChildElementText = [&](XMLElement * pElement, const char* value) -> std::string {
+ std::string str;
+ XMLElement* pChildElement = pElement->FirstChildElement(value);
+ if (pChildElement != nullptr)
+ {
+ auto pText = pChildElement->GetText();
+ if (pText != nullptr) {
+ str = pText;
+ }
+ }
+ return str;
+ };
+
+ XMLElement* pRootElmt = dxml.FirstChildElement("results");
+ if (pRootElmt) {
+ XMLElement* pPaginationElmt = pRootElmt->FirstChildElement("pagination");
+ if (pPaginationElmt) {
+ page = atoi(GetChildElementText(pPaginationElmt, "current").c_str());
+ pages = atoi(GetChildElementText(pPaginationElmt, "count").c_str());
+ results = atoi(GetChildElementText(pPaginationElmt, "results").c_str());
+ }
+ // 30 results per page
+ if (page > 1) {
+ return SR_TOOMANY;
+ }
+
+ if (results > 0) {
+ XMLElement* pSubtitleElmt = pRootElmt->FirstChildElement("subtitle");
+
+ while (pSubtitleElmt) {
+ CheckAbortAndReturn();
+
+ SubtitlesInfo pSubtitlesInfo;
+
+ pSubtitlesInfo.id = GetChildElementText(pSubtitleElmt, "pid");
+ pSubtitlesInfo.title = HtmlSpecialCharsDecode(GetChildElementText(pSubtitleElmt, "title").c_str());
+
+ std::string year = GetChildElementText(pSubtitleElmt, "year");
+ pSubtitlesInfo.year = year.empty() ? -1 : atoi(year.c_str());
+
+ pSubtitlesInfo.url = GetChildElementText(pSubtitleElmt, "url");
+ std::string format = GetChildElementText(pSubtitleElmt, "format");
+ pSubtitlesInfo.fileExtension = (format == "SubRip" || format == "N/A") ? "srt" : format;
+
+ pSubtitlesInfo.languageCode = podnapisi_languages[atoi(GetChildElementText(pSubtitleElmt, "languageId").c_str())].code;
+ pSubtitlesInfo.languageName = GetChildElementText(pSubtitleElmt, "languageName");
+ pSubtitlesInfo.seasonNumber = atoi(GetChildElementText(pSubtitleElmt, "tvSeason").c_str());
+ pSubtitlesInfo.episodeNumber = atoi(GetChildElementText(pSubtitleElmt, "tvEpisode").c_str());
+ pSubtitlesInfo.discCount = atoi(GetChildElementText(pSubtitleElmt, "cds").c_str());
+ pSubtitlesInfo.discNumber = pSubtitlesInfo.discCount;
+
+ std::string flags = GetChildElementText(pSubtitleElmt, "flags");
+ pSubtitlesInfo.hearingImpaired = (flags.find("n") != std::string::npos) ? TRUE : FALSE;
+ pSubtitlesInfo.corrected = (flags.find("r") != std::string::npos) ? -1 : 0;
+ pSubtitlesInfo.downloadCount = atoi(GetChildElementText(pSubtitleElmt, "downloads").c_str());
+ pSubtitlesInfo.imdbid = GetChildElementText(pSubtitleElmt, "movieId");
+ pSubtitlesInfo.frameRate = atof(GetChildElementText(pSubtitleElmt, "fps").c_str());
+
+ XMLElement* pReleasesElem = pSubtitleElmt->FirstChildElement("releases");
+ if (pReleasesElem) {
+ XMLElement* pReleaseElem = pReleasesElem->FirstChildElement("release");
+
+ while (pReleaseElem) {
+ auto pText = pReleaseElem->GetText();
+
+ if (!pText) {
+ continue;
+ }
+
+ pSubtitlesInfo.releaseNames.emplace_back(pText);
+
+ if (pSubtitlesInfo.fileName.empty() || pFileInfo.fileName.find(pText) != std::string::npos) {
+ pSubtitlesInfo.fileName = pText;
+ pSubtitlesInfo.fileName += "." + pSubtitlesInfo.fileExtension;
+ }
+ pReleaseElem = pReleaseElem->NextSiblingElement();
+ }
+ }
+
+ if (pSubtitlesInfo.fileName.empty()) {
+ std::string str = pSubtitlesInfo.title;
+ if (!year.empty()) {
+ str += " " + year;
+ }
+ if (pSubtitlesInfo.seasonNumber > 0) {
+ str += StringFormat(" S%02d", pSubtitlesInfo.seasonNumber);
+ }
+ if (pSubtitlesInfo.episodeNumber > 0) {
+ str += StringFormat("%sE%02d", (pSubtitlesInfo.seasonNumber > 0) ? "" : " ", pSubtitlesInfo.episodeNumber);
+ }
+ str += GUESSED_NAME_POSTFIX;
+ pSubtitlesInfo.fileName = str;
+ }
+
+ Set(pSubtitlesInfo);
+ pSubtitleElmt = pSubtitleElmt->NextSiblingElement();
+ }
+ }
+ }
+ }
+ } while (page++ < pages);
+
+ return searchResult;
+}
+
+SRESULT podnapisi::Hash(SubtitlesInfo& pFileInfo)
+{
+ pFileInfo.fileHash = StringFormat("%016I64x", GenerateOSHash(pFileInfo));
+ LOG(LOG_OUTPUT, pFileInfo.fileHash.c_str());
+ return SR_SUCCEEDED;
+}
+
+SRESULT podnapisi::Download(SubtitlesInfo& pSubtitlesInfo)
+{
+ std::string url = StringFormat("https://www.podnapisi.net/subtitles/%s/download", pSubtitlesInfo.id.c_str());
+ LOG(LOG_INPUT, url.c_str());
+ return DownloadInternal(url, "", pSubtitlesInfo.fileContents);
+}
+
+const std::set<std::string>& podnapisi::Languages() const
+{
+ static std::once_flag initialized;
+ static std::set<std::string> result;
+
+ std::call_once(initialized, [this]() {
+ for (const auto& iter : podnapisi_languages) {
+ if (strlen(iter.code)) {
+ result.emplace(iter.code);
+ }
+ }
+ });
+ return result;
+}
+
+#ifdef MPCHC_DISABLED_SUBTITLES_PROVIDER
+/******************************************************************************
+** titlovi
+******************************************************************************/
+
+/*
+ x-dev_api_id=
+ uiculture=hr,rs,si,ba,en,mk
+ language=hr,rs,sr,si,ba,en,mk
+ keyword=
+ year=
+ mt=numeric value representing type of subtitle (Movie / TV show / documentary 1, 2, 3)
+ season=numeric value representing season
+ episode=numeric value representing season episode
+ forcefilename=true (default is false) return direct download link
+*/
+
+SRESULT titlovi::Search(const SubtitlesInfo& pFileInfo)
+{
+ // Need to filter not supported languages, because their API returns .hr language otherwise.
+ auto selectedLanguages = LanguagesISO6391();
+ bool userSelectedLanguage = !selectedLanguages.empty();
+ const auto languagesIntersection = GetLanguagesIntersection(std::move(selectedLanguages));
+ std::string KEY = "WC1ERVYtREVTS1RPUF9maWUyYS1hMVJzYS1hSHc0UA==";
+ std::string url(StringFormat("http://api.titlovi.com/xml_get_api.ashx?x-dev_api_id=%s&uiculture=en&forcefilename=true", Base64::decode(KEY).c_str()));
+ url += "&mt=" + (pFileInfo.seasonNumber != -1 ? std::to_string(2) : std::to_string(1));
+ url += "&keyword=" + UrlEncode(pFileInfo.title.c_str());
+ url += (pFileInfo.seasonNumber != -1 ? "&season=" + std::to_string(pFileInfo.seasonNumber) : "");
+ url += (pFileInfo.episodeNumber != -1 ? "&episode=" + std::to_string(pFileInfo.episodeNumber) : "");
+ url += (pFileInfo.year != -1 ? "&year=" + std::to_string(pFileInfo.year) : "");
+ url += (userSelectedLanguage ? "&language=" + JoinContainer(languagesIntersection, ",") : "");
+ LOG(LOG_INPUT, url.c_str());
+
+ std::string data;
+ SRESULT searchResult = DownloadInternal(url, "", data);
+
+ tinyxml2::XMLDocument dxml;
+ if (dxml.Parse(data.c_str()) == tinyxml2::XMLError::XML_SUCCESS) {
+
+ auto GetChildElementText = [&](tinyxml2::XMLElement * pElement, const char* value) -> std::string {
+ std::string str;
+ auto pChildElement = pElement->FirstChildElement(value);
+
+ if (pChildElement != nullptr)
+ {
+ auto pText = pChildElement->GetText();
+ if (pText != nullptr) {
+ str = pText;
+ }
+ }
+ return str;
+ };
+
+ auto pRootElmt = dxml.FirstChildElement("subtitles");
+
+ if (pRootElmt) {
+ int num = pRootElmt->IntAttribute("resultsCount");
+
+ if (num > 0/* && num < 50*/) {
+ auto pSubtitleElmt = pRootElmt->FirstChildElement();
+
+ while (pSubtitleElmt) {
+ SubtitlesInfo pSubtitlesInfo;
+
+ pSubtitlesInfo.title = GetChildElementText(pSubtitleElmt, "title");
+ pSubtitlesInfo.languageCode = GetChildElementText(pSubtitleElmt, "language");
+
+ for (const auto& language : titlovi_languages) {
+ if (pSubtitlesInfo.languageCode == language.code) {
+ pSubtitlesInfo.languageCode = language.name;
+ }
+ }
+
+ pSubtitlesInfo.languageName = UTF16To8(ISOLang::ISO639XToLanguage(pSubtitlesInfo.languageCode.c_str()));
+ auto releaseNames = StringTokenize(GetChildElementText(pSubtitleElmt, "release"), "/");
+ pSubtitlesInfo.releaseNames = { releaseNames.begin(), releaseNames.end() };
+ pSubtitlesInfo.imdbid = GetChildElementText(pSubtitleElmt, "imdbId");
+ pSubtitlesInfo.frameRate = atof(GetChildElementText(pSubtitleElmt, "fps").c_str());
+ pSubtitlesInfo.year = atoi(GetChildElementText(pSubtitleElmt, "year").c_str());
+ pSubtitlesInfo.discNumber = atoi(GetChildElementText(pSubtitleElmt, "cd").c_str());
+ pSubtitlesInfo.discCount = pSubtitlesInfo.discNumber;
+ pSubtitlesInfo.downloadCount = atoi(GetChildElementText(pSubtitleElmt, "downloads").c_str());
+
+ auto pSubtitleChildElmt = pSubtitleElmt->FirstChildElement("urls");
+ if (pSubtitleChildElmt) {
+ auto pURLElement = pSubtitleChildElmt->FirstChildElement("url");
+ while (pURLElement) {
+ if (pURLElement->Attribute("what", "download")) {
+ pSubtitlesInfo.url = pURLElement->GetText();
+ }
+ if (pURLElement->Attribute("what", "direct")) {
+ pSubtitlesInfo.id = pURLElement->GetText();
+ }
+ pURLElement = pURLElement->NextSiblingElement();
+ }
+ }
+
+ if ((pSubtitleChildElmt = pSubtitleElmt->FirstChildElement("TVShow")) != nullptr) {
+ pSubtitlesInfo.seasonNumber = atoi(GetChildElementText(pSubtitleChildElmt, "season").c_str());
+ pSubtitlesInfo.episodeNumber = atoi(GetChildElementText(pSubtitleChildElmt, "episode").c_str());
+ }
+
+ pSubtitlesInfo.fileName = pSubtitlesInfo.title + " " + std::to_string(pSubtitlesInfo.year);
+ if (pSubtitlesInfo.seasonNumber > 0) {
+ pSubtitlesInfo.fileName += StringFormat(" S%02d", pSubtitlesInfo.seasonNumber);
+ }
+ if (pSubtitlesInfo.episodeNumber > 0) {
+ pSubtitlesInfo.fileName += StringFormat("%sE%02d", (pSubtitlesInfo.seasonNumber > 0) ? "" : " ", pSubtitlesInfo.episodeNumber);
+ }
+
+ bool found = false;
+ for (const auto& str : pSubtitlesInfo.releaseNames) {
+ if (pFileInfo.fileName.find(str) != std::string::npos) {
+ pSubtitlesInfo.fileName += " " + str;
+ found = true;
+ break;
+ }
+ }
+
+ if (!found && !pSubtitlesInfo.releaseNames.empty()) {
+ pSubtitlesInfo.fileName += " " + pSubtitlesInfo.releaseNames.front();
+ }
+ pSubtitlesInfo.fileName += GUESSED_NAME_POSTFIX;
+
+ Set(pSubtitlesInfo);
+ pSubtitleElmt = pSubtitleElmt->NextSiblingElement();
+ }
+ }
+ }
+ }
+ return searchResult;
+}
+
+SRESULT titlovi::Download(SubtitlesInfo& pSubtitlesInfo)
+{
+ LOG(LOG_INPUT, pSubtitlesInfo.id.c_str());
+ return DownloadInternal(pSubtitlesInfo.id, "", pSubtitlesInfo.fileContents);
+}
+
+const std::set<std::string>& titlovi::Languages() const
+{
+ static std::once_flag initialized;
+ static std::set<std::string> result;
+
+ std::call_once(initialized, [this]() {
+ for (const auto& iter : titlovi_languages) {
+ if (strlen(iter.name)) {
+ result.emplace(iter.name);
+ }
+ }
+ });
+ return result;
+}
+
+/******************************************************************************
+** ysubs
+******************************************************************************/
+
+SRESULT ysubs::Search(const SubtitlesInfo& pFileInfo)
+{
+ SRESULT searchResult = SR_UNDEFINED;
+ using namespace rapidjson;
+
+ if (pFileInfo.year && pFileInfo.seasonNumber == -1 && pFileInfo.episodeNumber == -1) {
+ std::string urlApi(StringFormat("https://yts.ag/api/v2/list_movies.json?query_term=%s", UrlEncode(pFileInfo.title.c_str())));
+ LOG(LOG_INPUT, urlApi.c_str());
+
+ std::string data;
+ searchResult = DownloadInternal(urlApi, "", data);
+
+ Document d;
+ if (d.ParseInsitu(&data[0]).HasParseError()) {
+ return SR_FAILED;
+ }
+
+ auto root = d.FindMember("data");
+ if (root != d.MemberEnd()) {
+ auto iter = root->value.FindMember("movies");
+ if ((iter != root->value.MemberEnd()) && (iter->value.IsArray())) {
+ std::set<std::string> imdb_ids;
+ for (auto elem = iter->value.Begin(); elem != iter->value.End(); ++elem) {
+ std::string imdb = elem->FindMember("imdb_code")->value.GetString();
+ if (imdb_ids.find(imdb) == imdb_ids.end()) {
+ imdb_ids.insert(imdb);
+
+ std::string urlSubs(StringFormat("http://api.ysubs.com/subs/%s", imdb.c_str()));
+ LOG(LOG_INPUT, urlSubs.c_str());
+
+ std::string data1;
+ searchResult = DownloadInternal(urlSubs, "", data1);
+ Document d1;
+ if (d1.ParseInsitu(&data1[0]).HasParseError()) {
+ return SR_FAILED;
+ }
+
+ auto iter1 = d1.FindMember("subs");
+ if (iter1 != d1.MemberEnd()) {
+ iter1 = iter1->value.FindMember(imdb.c_str());
+ if (iter1 != d1.MemberEnd()) {
+ for (auto elem1 = iter1->value.MemberBegin(); elem1 != iter1->value.MemberEnd(); ++elem1) {
+ std::string lang = elem1->name.GetString();
+ std::string lang_code;
+ for (const auto& language : ysubs_languages) {
+ if (lang == language.name) {
+ lang_code = language.code;
+ }
+ }
+ if (CheckLanguage(lang_code)) {
+ for (auto elem2 = elem1->value.Begin(); elem2 != elem1->value.End(); ++elem2) {
+ SubtitlesInfo pSubtitlesInfo;
+
+ pSubtitlesInfo.title = elem->FindMember("title")->value.GetString();
+ pSubtitlesInfo.languageCode = lang_code;
+ pSubtitlesInfo.languageName = UTF16To8(ISOLang::ISO639XToLanguage(pSubtitlesInfo.languageCode.c_str()));
+ pSubtitlesInfo.releaseNames.emplace_back("YIFY");
+ pSubtitlesInfo.imdbid = imdb;
+ pSubtitlesInfo.year = elem->FindMember("year")->value.GetInt();
+ pSubtitlesInfo.discNumber = 1;
+ pSubtitlesInfo.discCount = 1;
+
+ pSubtitlesInfo.url = "http://www.yifysubtitles.com/movie-imdb/" + imdb;
+ std::string str = elem2->FindMember("url")->value.GetString();
+ pSubtitlesInfo.id = "http://www.yifysubtitles.com" + str;
+ pSubtitlesInfo.hearingImpaired = elem2->FindMember("hi")->value.GetInt();
+ pSubtitlesInfo.corrected = elem2->FindMember("rating")->value.GetInt();
+
+ pSubtitlesInfo.fileName = pFileInfo.fileName;
+ pSubtitlesInfo.fileName += GUESSED_NAME_POSTFIX;
+
+ Set(pSubtitlesInfo);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return searchResult;
+}
+
+SRESULT ysubs::Download(SubtitlesInfo& pSubtitlesInfo)
+{
+ LOG(LOG_INPUT, pSubtitlesInfo.id.c_str());
+ return DownloadInternal(pSubtitlesInfo.id, "", pSubtitlesInfo.fileContents);
+}
+
+const std::set<std::string>& ysubs::Languages() const
+{
+ static std::once_flag initialized;
+ static std::set<std::string> result;
+
+ std::call_once(initialized, [this]() {
+ for (const auto& iter : ysubs_languages) {
+ if (strlen(iter.code)) {
+ result.emplace(iter.code);
+ }
+ }
+ });
+ return result;
+}
+#endif // MPCHC_DISABLED_SUBTITLES_PROVIDER
+
+/******************************************************************************
+** Napisy24
+******************************************************************************/
+
+SRESULT Napisy24::Search(const SubtitlesInfo& pFileInfo)
+{
+ stringMap headers({
+ { "User-Agent", UserAgent() },
+ { "Content-Type", "application/x-www-form-urlencoded" }
+ });
+ std::string data;
+ std::string url = "http://napisy24.pl/run/CheckSubAgent.php";
+ std::string content = "postAction=CheckSub";
+ content += "&ua=mpc-hc";
+ content += "&ap=mpc-hc";
+ content += "&fh=" + pFileInfo.fileHash;
+ content += "&fs=" + std::to_string(pFileInfo.fileSize);
+ content += "&fn=" + pFileInfo.fileName;
+
+ LOG(LOG_INPUT, std::string(url + "?" + content).c_str());
+ StringUpload(url, headers, content, data);
+
+ if (data.length() < 4) {
+ return SR_FAILED;
+ }
+
+ // Get status
+ std::string status = data.substr(0, 4);
+ if (status != "OK-2" && status != "OK-3") {
+ return SR_FAILED;
+ }
+ data.erase(0, 5);
+
+ size_t infoEnd = data.find("||");
+ if (infoEnd == std::string::npos) {
+ return SR_FAILED;
+ }
+
+ // Search already returns whole file
+ SubtitlesInfo subtitleInfo;
+ subtitleInfo.fileContents = data.substr(infoEnd + 2);
+ subtitleInfo.languageCode = "pl"; // API doesn't support other languages yet.
+
+ // Remove subtitle data
+ data.erase(infoEnd);
+
+ std::unordered_map<std::string, std::string> subtitleInfoMap;
+ std::istringstream stringStream(data);
+ std::string entry;
+ while (std::getline(stringStream, entry, '|')) {
+ auto delimPos = entry.find(':');
+ if (delimPos == std::string::npos) {
+ continue;
+ }
+ std::string key = entry.substr(0, delimPos);
+ if (entry.length() <= delimPos + 1) {
+ continue;
+ }
+ std::string value = entry.substr(delimPos + 1);
+ subtitleInfoMap[key] = value;
+ }
+
+ subtitleInfo.url = "http://napisy24.pl/komentarze?napisId=" + subtitleInfoMap["napisId"];
+ subtitleInfo.title = subtitleInfoMap["ftitle"];
+ subtitleInfo.imdbid = subtitleInfoMap["fimdb"];
+
+ auto it = subtitleInfoMap.find("fyear");
+ if (it != subtitleInfoMap.end()) {
+ subtitleInfo.year = std::stoi(it->second);
+ }
+
+ it = subtitleInfoMap.find("fps");
+ if (it != subtitleInfoMap.end()) {
+ subtitleInfo.frameRate = std::stod(it->second);
+ }
+
+ int hour, minute, second;
+ if (sscanf_s(subtitleInfoMap["time"].c_str(), "%02d:%02d:%02d", &hour, &minute, &second) == 3) {
+ subtitleInfo.lengthMs = ((hour * 60 + minute) * 60 + second) * 1000;
+ }
+
+ subtitleInfo.fileName = pFileInfo.fileName + "." + pFileInfo.fileExtension;
+ subtitleInfo.discNumber = 1;
+ subtitleInfo.discCount = 1;
+
+ Set(subtitleInfo);
+
+ return SR_SUCCEEDED;
+}
+
+SRESULT Napisy24::Hash(SubtitlesInfo& pFileInfo)
+{
+ pFileInfo.fileHash = StringFormat("%016I64x", GenerateOSHash(pFileInfo));
+ LOG(LOG_OUTPUT, pFileInfo.fileHash.c_str());
+ return SR_SUCCEEDED;
+}
+
+SRESULT Napisy24::Download(SubtitlesInfo& subtitlesInfo)
+{
+ LOG(LOG_INPUT, subtitlesInfo.url.c_str());
+ return subtitlesInfo.fileContents.empty() ? SR_FAILED : SR_SUCCEEDED;
+}
+
+const std::set<std::string>& Napisy24::Languages() const
+{
+ static std::set<std::string> result = {"pl"};
+ return result;
+}
diff --git a/src/mpc-hc/SubtitlesProvider.h b/src/mpc-hc/SubtitlesProvider.h
new file mode 100644
index 000000000..511bc9481
--- /dev/null
+++ b/src/mpc-hc/SubtitlesProvider.h
@@ -0,0 +1,143 @@
+/*
+ * (C) 2016-2017 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include "SubtitlesProviders.h"
+#include "VersionInfo.h"
+
+#include "XmlRpc4Win/TimXmlRpc.h"
+
+#define DEFINE_SUBTITLESPROVIDER_BEGIN(P, U, I, F) \
+class P final : public SubtitlesProvider { \
+public: \
+ P(SubtitlesProviders* pOwner) \
+ : SubtitlesProvider(pOwner) { \
+ Initialize(); \
+ } \
+ ~P() { Uninitialize(); } \
+ P(P const&) = delete; \
+ P& operator=(P const&) = delete; \
+ static std::shared_ptr<P> Create(SubtitlesProviders* pOwner) { \
+ return std::make_shared<P>(pOwner); \
+ } \
+private: \
+ virtual std::string Name() const override { return #P; } \
+ virtual std::string Url() const override { return U; } \
+ virtual const std::set<std::string>& Languages() const override; \
+ virtual bool Flags(DWORD dwFlags) const override { return (dwFlags & (F)) == dwFlags; } \
+ virtual int Icon() const override { return I; } \
+private: \
+ virtual SRESULT Search(const SubtitlesInfo& pFileInfo) override; \
+ virtual SRESULT Download(SubtitlesInfo& pSubtitlesInfo) override;
+#define DEFINE_SUBTITLESPROVIDER_END \
+};
+
+DEFINE_SUBTITLESPROVIDER_BEGIN(OpenSubtitles, "http://www.opensubtitles.org", IDI_OPENSUBTITLES, SPF_LOGIN | SPF_HASH | SPF_UPLOAD)
+void Initialize() override;
+bool NeedLogin() override;
+SRESULT Login(const std::string& sUserName, const std::string& sPassword) override;
+SRESULT LogOut() override;
+SRESULT Hash(SubtitlesInfo& pFileInfo) override;
+SRESULT Upload(const SubtitlesInfo& pSubtitlesInfo) override;
+std::unique_ptr<XmlRpcClient> xmlrpc;
+XmlRpcValue token;
+DEFINE_SUBTITLESPROVIDER_END
+
+DEFINE_SUBTITLESPROVIDER_BEGIN(SubDB, "http://api.thesubdb.com", IDI_SUBDB, SPF_HASH | SPF_UPLOAD)
+SRESULT Hash(SubtitlesInfo& pFileInfo) override;
+SRESULT Upload(const SubtitlesInfo& pSubtitlesInfo) override;
+std::string UserAgent() const override
+{
+ return SubtitlesProvidersUtils::StringFormat("SubDB/1.0 (MPC-HC/%s; http://mpc-hc.org)",
+ VersionInfo::GetVersionString());
+}
+DEFINE_SUBTITLESPROVIDER_END
+
+DEFINE_SUBTITLESPROVIDER_BEGIN(podnapisi, "https://www.podnapisi.net", IDI_PODNAPISI, SPF_SEARCH)
+SRESULT Login(const std::string& sUserName, const std::string& sPassword) override;
+SRESULT Hash(SubtitlesInfo& pFileInfo) override;
+DEFINE_SUBTITLESPROVIDER_END
+
+#ifdef MPCHC_DISABLED_SUBTITLES_PROVIDER
+DEFINE_SUBTITLESPROVIDER_BEGIN(titlovi, "http://www.titlovi.com", IDI_TITLOVI, SPF_SEARCH)
+DEFINE_SUBTITLESPROVIDER_END
+
+DEFINE_SUBTITLESPROVIDER_BEGIN(ysubs, "http://www.yifysubtitles.com", IDI_YSUBS, SPF_SEARCH)
+DEFINE_SUBTITLESPROVIDER_END
+#endif // MPCHC_DISABLED_SUBTITLES_PROVIDER
+
+DEFINE_SUBTITLESPROVIDER_BEGIN(Napisy24, "http://napisy24.pl/", IDI_N24, SPF_HASH | SPF_SEARCH)
+SRESULT Hash(SubtitlesInfo& pFileInfo) override;
+DEFINE_SUBTITLESPROVIDER_END
+
+static const struct {
+ const char* code;
+ const char* name;
+} podnapisi_languages[] = {
+ { /* 0*/ "", "" }, { /* 1*/ "sl", "Slovenian" }, { /* 2*/ "en", "English" },
+ { /* 3*/ "no", "Norwegian" }, { /* 4*/ "ko", "Korean" }, { /* 5*/ "de", "German" },
+ { /* 6*/ "is", "Icelandic" }, { /* 7*/ "cs", "Czech" }, { /* 8*/ "fr", "French" },
+ { /* 9*/ "it", "Italian" }, { /*10*/ "bs", "Bosnian" }, { /*11*/ "ja", "Japanese" },
+ { /*12*/ "ar", "Arabic" }, { /*13*/ "ro", "Romanian" }, { /*14*/ "es", "Argentino" },
+ { /*15*/ "hu", "Hungarian" }, { /*16*/ "el", "Greek" }, { /*17*/ "zh", "Chinese" },
+ { /*18*/ "", "" }, { /*19*/ "lt", "Lithuanian" }, { /*20*/ "et", "Estonian" },
+ { /*21*/ "lv", "Latvian" }, { /*22*/ "he", "Hebrew" }, { /*23*/ "nl", "Dutch" },
+ { /*24*/ "da", "Danish" }, { /*25*/ "sv", "Swedish" }, { /*26*/ "pl", "Polish" },
+ { /*27*/ "ru", "Russian" }, { /*28*/ "es", "Spanish" }, { /*29*/ "sq", "Albanian" },
+ { /*30*/ "tr", "Turkish" }, { /*31*/ "fi", "Finnish" }, { /*32*/ "pt", "Portuguese" },
+ { /*33*/ "bg", "Bulgarian" }, { /*34*/ "", "" }, { /*35*/ "mk", "Macedonian" },
+ { /*36*/ "sr", "Serbian" }, { /*37*/ "sk", "Slovak" }, { /*38*/ "hr", "Croatian" },
+ { /*39*/ "", "" }, { /*40*/ "zh", "Mandarin" }, { /*41*/ "", "" },
+ { /*42*/ "hi", "Hindi" }, { /*43*/ "", "" }, { /*44*/ "th", "Thai" },
+ { /*45*/ "", "" }, { /*46*/ "uk", "Ukrainian" }, { /*47*/ "sr", "Serbian (Cyrillic)" },
+ { /*48*/ "pb", "Brazilian" }, { /*49*/ "ga", "Irish" }, { /*50*/ "be", "Belarus" },
+ { /*51*/ "vi", "Vietnamese" }, { /*52*/ "fa", "Farsi" }, { /*53*/ "ca", "Catalan" },
+ { /*54*/ "id", "Indonesian" }, { /*55*/ "ms", "Malay" }, { /*56*/ "si", "Sinhala" },
+ { /*57*/ "kl", "Greenlandic" }, { /*58*/ "kk", "Kazakh" }, { /*59*/ "bn", "Bengali" },
+};
+
+#ifdef MPCHC_DISABLED_SUBTITLES_PROVIDER
+static const struct {
+ const char* code;
+ const char* name;
+} titlovi_languages[] = {
+ { "hr", "hr" }, { "sr", "sr" }, { "rs", "sr" }, { "si", "sl" }, { "ba", "bs" }, { "en", "en" }, { "mk", "mk" },
+};
+
+static const struct {
+ const char* code;
+ const char* name;
+} ysubs_languages[] = {
+ { "sq", "albanian" }, { "ar", "arabic" }, { "bn", "bengali" },
+ { "pb", "brazilian-portuguese" }, { "bg", "bulgarian" }, { "zh", "chinese" },
+ { "hr", "croatian" }, { "cs", "czech" }, { "da", "danish" },
+ { "nl", "dutch" }, { "en", "english" }, { "fa", "farsi-persian" },
+ { "fi", "finnish" }, { "fr", "french" }, { "de", "german" },
+ { "el", "greek" }, { "he", "hebrew" }, { "hu", "hungarian" },
+ { "id", "indonesian" }, { "it", "italian" }, { "ja", "japanese" },
+ { "ko", "korean" }, { "lt", "lithuanian" }, { "mk", "macedonian" },
+ { "ms", "malay" }, { "no", "norwegian" }, { "pl", "polish" },
+ { "pt", "portuguese" }, { "ro", "romanian" }, { "ru", "russian" },
+ { "sr", "serbian" }, { "sl", "slovenian" }, { "es", "spanish" },
+ { "sv", "swedish" }, { "th", "thai" }, { "tr", "turkish" },
+ { "ur", "urdu" }, { "vi", "vietnamese" },
+};
+#endif // MPCHC_DISABLED_SUBTITLES_PROVIDER
diff --git a/src/mpc-hc/SubtitlesProviders.cpp b/src/mpc-hc/SubtitlesProviders.cpp
new file mode 100644
index 000000000..a37dd308e
--- /dev/null
+++ b/src/mpc-hc/SubtitlesProviders.cpp
@@ -0,0 +1,932 @@
+/*
+ * (C) 2016-2017 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "SubtitlesProviders.h"
+#include "MainFrm.h"
+#include "mplayerc.h"
+#include "PathUtils.h"
+#include "Logger.h"
+#include <wininet.h>
+
+#if USE_STATIC_MEDIAINFO
+#include "MediaInfo/MediaInfo.h"
+using namespace MediaInfoLib;
+#define MediaInfo_int64u ZenLib::int64u
+#else
+#include "MediaInfoDLL/MediaInfoDLL.h"
+using namespace MediaInfoDLL;
+#endif
+
+using namespace SubtitlesProvidersUtils;
+
+/******************************************************************************
+** SubtitlesInfo
+******************************************************************************/
+
+void SubtitlesInfo::Download(bool bActivate)
+{
+ if (fileProvider) {
+ fileProvider->Providers().Download(*this, bActivate);
+ }
+}
+
+void SubtitlesInfo::OpenUrl() const
+{
+ if (!url.empty()) {
+ ShellExecute((HWND)AfxGetMyApp()->GetMainWnd(), _T("open"), UTF8To16(url.c_str()), nullptr, nullptr, SW_SHOWDEFAULT);
+ }
+}
+
+
+#define RE_ITE(cond, re_true, re_false) "(?(" cond ")" re_true "|" re_false ")"
+#define RE_IT(cond, re_true) "(?(" cond ")" re_true ")"
+#define RE_O(expr) expr "?"
+#define RE_CG(expr) "(" expr ")"
+#define RE_OCG(expr) RE_O(RE_CG(expr))
+#define RE_NCG(expr) "(?:" expr ")"
+#define RE_ONCG(expr) RE_O(RE_NCG(expr))
+#define RE_PLA(cond, expr) "(?=" cond ")" expr
+#define RE_NLA(cond, expr) "(?!" cond ")" expr
+
+
+#define REGEX_DEAD \
+ "[-\\[('*:;.,_ /!@#$%?)\\]]"
+
+#define REGEX_NOTDEAD \
+ "[^-\\[('*:;.,_ /!@#$%?)\\]\\\\]"
+
+#define REGEX_CAPTURE_TITLE \
+ "([^\\\\]*?)(?:" REGEX_DEAD "+(AU|CA|FR|JP|UK|US))??" REGEX_DEAD "+"
+
+#define REGEX_YEAR \
+ "\\d{4}"
+
+#define REGEX_SEASONEPISODE \
+ "S\\d{1,2}" RE_ONCG("E\\d{1,2}" RE_ONCG(RE_O(REGEX_DEAD) "E\\d{1,2}")) \
+ "|E\\d{1,2}" RE_ONCG(RE_O(REGEX_DEAD) "E\\d{1,2}") \
+ "|\\d{1,2}[x#]\\d{1,2}" \
+ "|\\d{3}" \
+ "|Part" REGEX_DEAD "*\\d{1,2}" \
+ "|" RE_ONCG("Season|Series" RE_O(REGEX_DEAD) "\\d{1,2}" REGEX_DEAD) "\\d{1,2}of\\d{1,2}"
+
+#define REGEX_CAPTURE_SEASONEPISODE \
+ "S(\\d{1,2})" RE_ONCG("E(\\d{1,2})" RE_ONCG(RE_O(REGEX_DEAD) "E\\d{1,2}")) \
+ "|E(\\d{1,2})" RE_ONCG(RE_O(REGEX_DEAD) "E\\d{1,2}") \
+ "|(\\d{1,2})[x#](\\d{1,2})" \
+ "|(\\d)(\\d{2})" \
+ "|Part" REGEX_DEAD "*()(\\d{1,2})" \
+ "|" RE_ONCG("Season|Series" RE_O(REGEX_DEAD) "(\\d{1,2})" REGEX_DEAD) "(\\d{1,2})of\\d{1,2}"
+
+#define REGEX_CAPTURE_TITLE2 \
+ "(?:([^\\\\]+?)??" REGEX_DEAD "+)??"
+//"(?:([^\\\\]+?)"REGEX_DEAD "+)?"
+
+#define REGEX_RESOLUTION \
+ "(?:360|480|576|720|1080|2160)[pi]?"
+
+#define REGEX_FORMAT \
+ "HD-?Rip|HD-?DVD(?:-?Rip)?" \
+ "|HD-?TV|PD-?TV|DVTV|DVB(?:-?Rip)?|TV-?Rip" \
+ "|B[DR]Rip|Blu-?Ray" \
+ "|DVD-?(?:Rip|ivX)?|VIDEO-TS" \
+ "|DVD-?SCR|SCREENER" \
+ "|WEB-?DL|WEB-?Rip" \
+ "|VHS" \
+ "|CAM|TS" \
+ "|R5(?:[-._ ]?LiNE)?"
+
+#define REGEX_AUDIOCODEC \
+ "AC3|DTS(?:[-._ ]?ES)?|He-AAC|AAC-He|AAC"
+
+#define REGEX_VIDEOCODEC \
+ "XviD|DivX|DVDivX|[hx][-._ ]?26[45]|HEVC|Rv10|Mpeg2"
+
+#define REGEX_CAPTURE_RELEASEGROUP \
+ "(" REGEX_NOTDEAD "+)[\\[(-._ )\\]\\\\]+"
+
+#define REGEX_CAPTURE_LANGUAGE \
+ "(?:(" REGEX_NOTDEAD "+)[\\[(-._ )\\]\\\\]+)?"
+
+#define REGEX_CAPTURE_DISC \
+ "(?:CD|DIS[CK])[-._ ]?(\\d)" REGEX_DEAD "+"
+
+#define REGEX_IGNORE \
+ "(?:DD)?5[-._ ]1|[AS]E|[WF]S|\\d{3}MB|5CH|AUDIO[-._ ]?FIXED|CHRONO|COLORIZED|DC|DUAL[-._ ]?AUDIO|DUBBED|DUPE|DVD[-._ ]?[59]|EXTENDED|FESTIVAL|FINAL|INTERNAL|LIMITED|NFO|PROPER|RATED|READ|REAL|REMASTERED|REMUX|REPACK|RERIP|R[1-6]|RETAIL|RETORRENT|S?TV|SUBBED|THEATRICAL|UNCUT|UNRATED|MPEG4"
+
+#define REGEX_CAPTURE_HEARINGIMPAIRED \
+ REGEX_DEAD "(HI)" REGEX_DEAD ".*(srt|idx|sub|ssa)$"
+
+#define REGEX_CAPTURE_MEDIAEXTENSIONS \
+ REGEX_DEAD "(3g2|3gp2?|asf|avi|divx|flv|m2ts|m4v|mk[2av]|mov|mp4a?|mpe?g|og[gvm]|qt|ram?|rm|rmvb|ts|wav|webm|wm[av])$"
+
+#define REGEX_CAPTURE_SUBTITLESEXTENSION \
+ REGEX_DEAD "(srt|idx|sub|ssa)$"
+
+#define REGEX_ADDICT7ED_LANGUAGE \
+ "Albanian|Arabic|Armenian|Azerbaijani|Bengali|Bosnian|Bulgarian|" + UTF16To8(_T("Català")) + "|Chinese \\(Simplified\\)|Chinese \\(Traditional\\)|Croatian|Czech|Danish|Dutch|English|Euskera|Finnish|French|Galego|German|Greek|Hebrew|Hungarian|Indonesian|Italian|Japanese|Korean|Macedonian|Malay|Norwegian|Persian|Polish|Portuguese|Portuguese \\(Brazilian\\)|Romanian|Russian|Serbian \\(Cyrillic\\)|Serbian \\(Latin\\)|Slovak|Slovenian|Spanish|Spanish \\(Latin America\\)|Spanish \\(Spain\\)|Swedish|Thai|Turkish|Urainian|Vietnamese"
+
+#define REGEX_ADDICT7ED_CORRECTED \
+ "C[.]"
+
+#define REGEX_ADDICT7ED_HEARINGIMPAIRED \
+ "HI[.]"
+
+#define REGEX_ADDICT7ED_VERSION \
+ "(?:updated|orig)[.]"
+
+#define REGEX_ADDICT7ED_SIGNATURE \
+ "Addic[t7]ed[.]com"
+
+
+#define REGEX_PLA(expr, group) "(?=(" expr "))\\" #group REGEX_DEAD "+"
+#define REGEX_OPLA(expr, group) "(?:(?=(" expr "))\\" #group REGEX_DEAD "+)?"
+#define REGEX_CG(expr) "(" expr ")" REGEX_DEAD "+"
+#define REGEX_OCG(expr) RE_ONCG(RE_CG(expr) REGEX_DEAD "+")
+#define REGEX_NCG(expr) "(?:" expr ")" REGEX_DEAD "+"
+
+#define REGEX_ONCG(expr) "(?:" REGEX_NCG(expr) ")?"
+#define REGEX_ORNCG(expr) "(?:(?:" REGEX_NCG(expr) ")+)?"
+
+static const std::regex regex_pattern[] = {
+ //--------------------------------------
+ std::regex(
+ REGEX_CAPTURE_TITLE REGEX_ORNCG(REGEX_IGNORE)
+ RE_ONCG(
+ RE_NCG(REGEX_CG(REGEX_YEAR) REGEX_OCG(REGEX_SEASONEPISODE) "|" REGEX_CG(REGEX_SEASONEPISODE))
+ REGEX_ORNCG(REGEX_IGNORE) REGEX_CAPTURE_TITLE2
+ )
+ RE_NCG(REGEX_CG(REGEX_RESOLUTION) "|" REGEX_CG(REGEX_FORMAT) "|" REGEX_CG(REGEX_AUDIOCODEC) "|" REGEX_CG(REGEX_VIDEOCODEC) "|" REGEX_NCG(REGEX_IGNORE)) "+"
+ REGEX_CAPTURE_RELEASEGROUP
+ //REGEX_CAPTURE_LANGUAGE
+ , RegexFlags),
+ //--------------------------------------
+ std::regex(
+ REGEX_CAPTURE_TITLE
+ RE_NCG(REGEX_CG(REGEX_YEAR) REGEX_OCG(REGEX_SEASONEPISODE) "|" REGEX_CG(REGEX_SEASONEPISODE))
+ , RegexFlags),
+ //--------------------------------------
+ std::regex(
+ REGEX_CAPTURE_SEASONEPISODE
+ , RegexFlags),
+ //--------------------------------------
+ std::regex(
+ REGEX_CAPTURE_DISC
+ , RegexFlags),
+ //--------------------------------------
+ std::regex(
+ REGEX_CAPTURE_HEARINGIMPAIRED
+ , RegexFlags),
+ //--------------------------------------
+ std::regex(
+ "([^\\\\]+?)(?: (AU|CA|FR|JP|UK|US))?(?: [(](\\d{4})[)])? - (\\d{1,2})x(\\d{1,2}) - ([^.]+?)[.](.+?)[.]" REGEX_CG(REGEX_ADDICT7ED_LANGUAGE) RE_OCG(REGEX_ADDICT7ED_HEARINGIMPAIRED) RE_OCG(REGEX_ADDICT7ED_CORRECTED) REGEX_ADDICT7ED_VERSION REGEX_ADDICT7ED_SIGNATURE
+ , RegexFlags),
+ //--------------------------------------
+ std::regex(REGEX_DEAD "+", RegexFlags),
+
+ //--------------------------------------
+ //--------------------------------------
+ std::regex(
+ REGEX_CAPTURE_TITLE
+ RE_ONCG(
+ RE_NCG(
+ REGEX_PLA(REGEX_YEAR, 2) REGEX_OPLA(REGEX_SEASONEPISODE, 3)
+ "|" REGEX_PLA(REGEX_SEASONEPISODE, 4)
+ )
+ REGEX_CAPTURE_TITLE2
+ )
+ RE_NCG(
+ REGEX_PLA(REGEX_RESOLUTION, 6)
+ "|" REGEX_PLA(REGEX_FORMAT, 7)
+ "|" REGEX_PLA(REGEX_AUDIOCODEC, 8)
+ "|" REGEX_PLA(REGEX_VIDEOCODEC, 9)
+ ) "+"
+ REGEX_CAPTURE_RELEASEGROUP
+ , RegexFlags),
+ //--------------------------------------
+};
+
+static constexpr LPCTSTR log_format =
+ _T("GetFileInfo(): Deducing video information from file path\n") \
+ // file properties
+ _T("filePath=\"%S\"\n") \
+ _T("fileName=\"%S\"\n") \
+ _T("fileExtension=\"%S\"\n") \
+ _T("fileSize=%llu\n") \
+ // file name properties
+ _T("matchPattern=%d\n") \
+ _T("title=\"%S\"\n") \
+ _T("country=\"%S\"\n") \
+ _T("year=%d\n") \
+ _T("episode=\"%S\"\n") \
+ _T("seasonNumber=%d\n") \
+ _T("episodeNumber=%d\n") \
+ _T("title2=\"%S\"\n") \
+ _T("resolution=\"%S\"\n") \
+ _T("format=\"%S\"\n") \
+ _T("audioCodec=\"%S\"\n") \
+ _T("videoCodec=\"%S\"\n") \
+ _T("releaseGroup=\"%S\"\n") \
+ _T("discNumber=%d");
+
+HRESULT SubtitlesInfo::GetFileInfo(const std::string& sFileName /*= std::string()*/)
+{
+ if (sFileName.empty()) {
+ CMainFrame& MainFrame = *(CMainFrame*)(AfxGetMyApp()->GetMainWnd());
+ if (CComQIPtr<IBaseFilter> pBF = MainFrame.m_pFSF) {
+ BeginEnumPins(pBF, pEP, pPin) {
+ if (pAsyncReader = pPin) {
+ break;
+ }
+ }
+ EndEnumPins;
+ }
+
+ if (pAsyncReader && MainFrame.m_pFSF) {
+ LPOLESTR name;
+ if (FAILED(MainFrame.m_pFSF->GetCurFile(&name, nullptr))) {
+ return E_FAIL;
+ }
+ filePath = UTF16To8(name);
+ //fileName = UTF16To8(name);
+ CoTaskMemFree(name);
+
+ LONGLONG size, available;
+ if (pAsyncReader->Length(&size, &available) != S_OK) { // Don't accept estimates
+ return E_FAIL;
+ }
+ fileSize = size;
+ } else {
+ CString _filePath(MainFrame.m_wndPlaylistBar.GetCurFileName());
+ {
+ CFile file;
+ CFileException fileException;
+ if (!file.Open(_filePath, CFile::modeRead | CFile::osSequentialScan | CFile::shareDenyNone | CFile::typeBinary, &fileException)) {
+ return E_FAIL;
+ }
+
+ filePath = UTF16To8(_filePath);
+ fileSize = file.GetLength();
+ }
+ {
+ CPath p(_filePath);
+ p.RenameExtension(_T(".nfo"));
+ CFile file;
+ CFileException fileException;
+ if (file.Open(p, CFile::modeRead | CFile::osSequentialScan | CFile::shareDenyNone | CFile::typeBinary, &fileException)) {
+ std::string buffer;
+ buffer.resize(static_cast<std::string::size_type>(file.GetLength()));
+ file.Read(&buffer[0], (UINT)buffer.size());
+
+ std::smatch match_pieces;
+ if (std::regex_search(buffer, match_pieces, std::regex("imdb[.][a-z]{2,3}/title/tt(\\d+)", RegexFlags))) {
+ imdbid = match_pieces[1].str();
+ }
+ }
+ }
+ }
+ } else {
+ filePath = sFileName;
+ }
+
+ auto fPath = UTF8To16(filePath.c_str());
+ fileExtension = UTF16To8(PathUtils::FileExt(fPath).TrimLeft('.'));
+ fileName = UTF16To8(PathUtils::FileName(fPath));
+
+ int matchPattern = -1;
+ regexResult result;
+
+ if (std::regex_search(fileName, std::regex("addic[7t]ed", RegexFlags)) && stringMatch(regex_pattern[5], filePath, result)) {
+ matchPattern = 5;
+ if (title.empty()) {
+ title = result[0];
+ }
+ if (country.empty()) {
+ country = result[1];
+ }
+ if (year == -1) {
+ year = result[2].empty() ? -1 : atoi(result[2].c_str());
+ }
+ if (seasonNumber == -1) {
+ seasonNumber = atoi(result[3].c_str());
+ }
+ if (episodeNumber == -1) {
+ episodeNumber = atoi(result[4].c_str());
+ }
+ if (title2.empty()) {
+ title2 = result[5];
+ }
+ if (releaseGroup.empty()) {
+ releaseGroup = result[6];
+ }
+ if (languageName.empty()) {
+ languageName = result[7];
+ }
+ if (hearingImpaired == -1) {
+ hearingImpaired = result[8].empty() ? FALSE : TRUE;
+ }
+ } else if (stringMatch(regex_pattern[0], filePath, result)) {
+ matchPattern = 0;
+ if (title.empty()) {
+ title = result[0];
+ }
+ if (country.empty()) {
+ country = result[1];
+ }
+ if (year == -1) {
+ year = result[2].empty() ? -1 : atoi(result[2].c_str());
+ }
+ if (episode.empty()) {
+ episode = result[3] + result[4];
+ }
+ //bool b = IsISO639Language(match_pieces[5].str().c_str());
+ //bool b1 = IsISO639Language("french");
+ //CString lang = LanguageToISO6392(CString(match_pieces[5].str().c_str()));
+ //std::string tt = match_pieces[5].str();
+ if (title2.empty()) {
+ title2 = result[5];
+ }
+ if (resolution.empty()) {
+ resolution = result[6];
+ }
+ if (format.empty()) {
+ format = result[7];
+ }
+ if (audioCodec.empty()) {
+ audioCodec = result[8];
+ }
+ if (videoCodec.empty()) {
+ videoCodec = result[9];
+ }
+ if (releaseGroup.empty()) {
+ releaseGroup = result[10];
+ }
+ //if (languageCode.empty()) languageCode = result[11];
+ } else if (stringMatch(regex_pattern[1], filePath, result)) {
+ matchPattern = 1;
+ if (title.empty()) {
+ title = result[0];
+ }
+ if (country.empty()) {
+ country = result[1];
+ }
+ if (year == -1) {
+ year = result[2].empty() ? -1 : atoi(result[2].c_str());
+ }
+ if (episode.empty()) {
+ episode = result[3] + result[4];
+ }
+ }
+
+ // Use the filename as title if we couldn't do better
+ if (title.empty()) {
+ matchPattern = -1;
+ title = fileName;
+ }
+ title = std::regex_replace(title, regex_pattern[6], " ");
+
+ if (!title2.empty()) {
+ title2 = std::regex_replace(title2, regex_pattern[6], " ");
+ }
+
+ if (seasonNumber == -1 && episodeNumber == -1 && !episode.empty()) {
+ if (stringMatch(regex_pattern[2], episode, result)) {
+ std::string _seasonNumber(result[0] + result[3] + result[5] + result[7]);
+ seasonNumber = atoi(_seasonNumber.c_str());
+ if (!seasonNumber) {
+ seasonNumber = 1;
+ }
+ std::string _episodeNumber(result[1] + result[2] + result[4] + result[6] + result[8]);
+ episodeNumber = atoi(_episodeNumber.c_str());
+ }
+ }
+
+ if ((discNumber == -1) && stringMatch(regex_pattern[3], filePath, result)) {
+ discNumber = result[0].empty() ? -1 : atoi(result[0].c_str());
+ }
+
+ if ((hearingImpaired == -1) && stringMatch(regex_pattern[4], filePath, result)) {
+ hearingImpaired = TRUE;
+ }
+
+ // Enable logging for the video filename detection
+ if (sFileName.empty()) {
+ SUBTITLES_LOG(log_format, filePath.c_str(), fileName.c_str(), fileExtension.c_str(), fileSize,
+ matchPattern, title.c_str(), country.c_str(), year, episode.c_str(),
+ seasonNumber, episodeNumber, title2.c_str(), resolution.c_str(),
+ format.c_str(), audioCodec.c_str(), videoCodec.c_str(), releaseGroup.c_str(),
+ discNumber);
+ }
+ return S_OK;
+}
+
+/******************************************************************************
+** SubtitlesProvider
+******************************************************************************/
+
+SubtitlesProvider::SubtitlesProvider(SubtitlesProviders* pOwner)
+ : m_bSearch(FALSE), m_bUpload(FALSE), m_pOwner(pOwner), m_nIconIndex(0), m_nLoggedIn(SPL_UNDEFINED)
+{
+}
+
+void SubtitlesProvider::OpenUrl() const
+{
+ ShellExecute((HWND)AfxGetMyApp()->GetMainWnd(), _T("open"), UTF8To16(Url().c_str()), nullptr, nullptr, SW_SHOWDEFAULT);
+}
+
+std::list<std::string> SubtitlesProvider::GetLanguagesIntersection(std::list<std::string>&& userSelectedLangauges) const
+{
+ userSelectedLangauges.sort();
+ const auto& providerSupportedLanguages = Languages();
+
+ std::list<std::string> intersection;
+ std::set_intersection(userSelectedLangauges.cbegin(), userSelectedLangauges.cend(),
+ providerSupportedLanguages.cbegin(), providerSupportedLanguages.cend(), std::back_inserter(intersection));
+
+ return intersection;
+}
+
+std::list<std::string> SubtitlesProvider::GetLanguagesIntersection() const
+{
+ return GetLanguagesIntersection(LanguagesISO6391());
+}
+
+bool SubtitlesProvider::LoginInternal()
+{
+ if (NeedLogin()) {
+ SRESULT result = Login(UserName(), Password());
+ m_nLoggedIn = (result == SR_SUCCEEDED) ? (!UserName().empty() ? SPL_REGISTERED : SPL_ANONYMOUS) :
+ (result == SR_UNDEFINED) ? SPL_ANONYMOUS : SPL_FAILED;
+ }
+ return !!(m_nLoggedIn & (SPL_REGISTERED | SPL_ANONYMOUS));
+}
+
+
+bool SubtitlesProvider::CheckLanguage(const std::string& sLanguageCode)
+{
+ auto&& selectedLanguages = LanguagesISO6391();
+ return !selectedLanguages.size()
+ || (std::find(selectedLanguages.cbegin(), selectedLanguages.cend(), sLanguageCode) != selectedLanguages.cend());
+}
+
+bool SubtitlesProvider::SupportsUserSelectedLanguages() const
+{
+ auto&& selectedLanguages = LanguagesISO6391();
+ return !selectedLanguages.size() || GetLanguagesIntersection(std::move(selectedLanguages)).size();
+}
+
+void SubtitlesProvider::Set(SubtitlesInfo& pSubtitlesInfo)
+{
+ SubtitlesThread& pThread = *((SubtitlesThread*)AfxGetThread()->m_pThreadParams);
+ pThread.Set(pSubtitlesInfo);
+}
+
+bool SubtitlesProvider::IsAborting()
+{
+ SubtitlesThread& pThread = *((SubtitlesThread*)AfxGetThread()->m_pThreadParams);
+ return pThread.IsThreadAborting();
+}
+
+SRESULT SubtitlesProvider::DownloadInternal(std::string url, std::string referer, std::string& data) const
+{
+ stringMap headers({
+ { "User-Agent", UserAgent() },
+ { "Referer", referer },
+ });
+
+ DWORD dwStatusCode;
+ StringDownload(url, headers, data, true, &dwStatusCode);
+
+ switch (dwStatusCode) {
+ case 200:
+ return SR_SUCCEEDED;
+ default:
+ return SR_FAILED;
+ }
+}
+
+size_t SubtitlesProvider::Index() const
+{
+ size_t index = 0;
+ for (const auto& iter : m_pOwner->Providers()) {
+ if (iter.get() == this) {
+ return index;
+ }
+ ++index;
+ }
+ return SIZE_T_ERROR;
+}
+
+bool SubtitlesProvider::CheckInternetConnection()
+{
+ DWORD dwFlags = NULL;
+ return InternetGetConnectedState(&dwFlags, NULL) == TRUE;
+}
+
+/******************************************************************************
+** SubtitlesProviders
+******************************************************************************/
+
+SubtitlesProviders::SubtitlesProviders(CMainFrame* pMainFrame)
+ : m_pMainFrame(pMainFrame)
+{
+ m_himl.Create(16, 16, ILC_COLOR32, 0, 0);
+ RegisterProviders();
+ ReadSettings();
+}
+
+SubtitlesProviders::~SubtitlesProviders()
+{
+ Abort(SubtitlesThreadType(STT_SEARCH | STT_UPLOAD | STT_DOWNLOAD));
+}
+
+BOOL SubtitlesProviders::CheckInternetConnection()
+{
+ DWORD dwFlags = NULL;
+ return InternetGetConnectedState(&dwFlags, NULL) == TRUE;
+}
+
+void SubtitlesProviders::Search(bool bAutoDownload)
+{
+ Abort(SubtitlesThreadType(STT_SEARCH | STT_DOWNLOAD));
+ m_pMainFrame->m_wndSubtitlesDownloadDialog.DoClear();
+
+ if (CheckInternetConnection()) {
+ InsertTask(DEBUG_NEW SubtitlesTask(m_pMainFrame, bAutoDownload, LanguagesISO6391()));
+ } else if (bAutoDownload == FALSE) {
+ m_pMainFrame->m_wndSubtitlesDownloadDialog.DoFailed();
+ }
+}
+
+void SubtitlesProviders::Download(SubtitlesInfo& pSubtitlesInfo, bool bActivate)
+{
+ if (CheckInternetConnection()) {
+ InsertTask(DEBUG_NEW SubtitlesTask(m_pMainFrame, pSubtitlesInfo, bActivate));
+ }
+}
+
+void SubtitlesProviders::Upload(bool bShowConfirm)
+{
+ if (CheckInternetConnection()) {
+ // We get all the information we need within the main thread, to delay closing the file
+ // until we have everything we need.
+ SubtitlesInfo pSubtitlesInfo;
+ m_pMainFrame->SendMessage(WM_GETSUBTITLES, 0, (LPARAM)&pSubtitlesInfo);
+ //pSubtitlesInfo.GetCurrentSubtitles();
+
+ if (!pSubtitlesInfo.fileContents.empty()) {
+ CString msg;
+ msg.Format(IDS_SUBUL_DLG_CONFIRM, UTF8To16(pSubtitlesInfo.fileName.c_str()));
+ if (!bShowConfirm
+ || IDYES == MessageBox(m_pMainFrame->m_wndSubtitlesUploadDialog, msg, ResStr(IDS_SUBUL_DLG_TITLE), MB_YESNO)) {
+ InsertTask(DEBUG_NEW SubtitlesTask(m_pMainFrame, pSubtitlesInfo));
+ }
+ }
+ }
+}
+
+void SubtitlesProviders::Abort(SubtitlesThreadType nType)
+{
+ CAutoLock cAutoLock(&m_csTasks);
+ for (auto& pTask : m_pTasks) {
+ if (pTask->Type() & nType) {
+ pTask->Abort();
+ }
+ }
+}
+
+void SubtitlesProviders::ReadSettings()
+{
+ const auto& s = AfxGetAppSettings();
+ regexResults results;
+ stringMatch("<[|]([^|]*?)[|]([^|]*?)[|]([^|]*?)[|]([^|]*?)[|]([^|]*?)[|]>", (const char*)UTF16To8(s.strSubtitlesProviders), results);
+ size_t notFound = 0;
+ for (const auto& iter : results) {
+ size_t index = &iter - &results[0] - notFound;
+ bool bFound = false;
+ for (auto& iter1 : m_pProviders) {
+ if (iter[0] == iter1->Name()) {
+ bFound = true;
+ iter1->UserName(iter[1]);
+ iter1->Password(iter[2].c_str(), false);
+ iter1->Enabled(SPF_SEARCH, atoi(iter[3].c_str()));
+ iter1->Enabled(SPF_UPLOAD, atoi(iter[4].c_str()));
+ std::iter_swap(&iter1, m_pProviders.begin() + std::min(index, m_pProviders.size() - 1));
+ }
+ }
+ if (bFound == false) {
+ ++notFound;
+ }
+ }
+}
+
+std::string SubtitlesProviders::WriteSettings()
+{
+ std::string result;
+ for (const auto& iter : m_pProviders) {
+ result += "<|" + iter->Name() + "|" + iter->UserName() + "|" + iter->Password(false) + "|" + std::to_string(iter->Enabled(SPF_SEARCH)) + "|" + std::to_string(iter->Enabled(SPF_UPLOAD)) + "|>";
+ }
+ return result;
+}
+
+/******************************************************************************
+** SubtitlesTask
+******************************************************************************/
+
+SubtitlesTask::SubtitlesTask(CMainFrame* pMainFrame, bool bAutoDownload, const std::list<std::string>& sLanguages)
+ : m_pMainFrame(pMainFrame)
+ , m_nType(SubtitlesThreadType(STT_SEARCH | (bAutoDownload ? STT_DOWNLOAD : NULL)))
+ , m_bAutoDownload(bAutoDownload)
+ , m_bActivate(false)
+{
+ BYTE i = BYTE(sLanguages.size());
+ for (const auto& iter : sLanguages) {
+ if (bAutoDownload) {
+ m_AutoDownload[iter] = false;
+ }
+ m_LangPriority[iter] = i--;
+ }
+
+ VERIFY(CreateThread());
+}
+
+SubtitlesTask::SubtitlesTask(CMainFrame* pMainFrame, SubtitlesInfo& pSubtitlesInfo, bool bActivate)
+ : m_pMainFrame(pMainFrame)
+ , m_pFileInfo(pSubtitlesInfo)
+ , m_bActivate(bActivate)
+ , m_nType(STT_DOWNLOAD)
+ , m_bAutoDownload(false)
+{
+ VERIFY(CreateThread());
+}
+
+SubtitlesTask::SubtitlesTask(CMainFrame* pMainFrame, const SubtitlesInfo& pSubtitlesInfo)
+ : m_pMainFrame(pMainFrame)
+ , m_pFileInfo(pSubtitlesInfo)
+ , m_bActivate(false)
+ , m_nType(STT_UPLOAD)
+ , m_bAutoDownload(false)
+{
+ VERIFY(CreateThread());
+}
+
+void SubtitlesTask::ThreadProc()
+{
+ if (m_nType & STT_SEARCH) {
+ // We get all the information we need within a separate thread,
+ // to avoid delaying the video playback.
+ SubtitlesInfo pFileInfo;
+ pFileInfo.GetFileInfo();
+
+ const auto& s = AfxGetAppSettings();
+ std::string exclude = UTF16To8(s.strAutoDownloadSubtitlesExclude).GetString();
+ stringArray exclude_array = StringTokenize(exclude, "|");
+
+ if (!pFileInfo.title.empty()
+ && std::none_of(exclude_array.cbegin(), exclude_array.cend(), [&](const std::string & str) {
+ return pFileInfo.filePath.find(str) != std::string::npos;
+ })
+ && !IsThreadAborting()) {
+ for (const auto& iter : m_pMainFrame->m_pSubtitlesProviders->Providers()) {
+ if (iter->Enabled(SPF_SEARCH)) {
+ InsertThread(DEBUG_NEW SubtitlesThread(this, pFileInfo, iter));
+ }
+ }
+ }
+
+ } else if (m_nType & STT_DOWNLOAD) {
+ InsertThread(DEBUG_NEW SubtitlesThread(this, m_pFileInfo, m_pFileInfo.Provider()));
+ } else if (m_nType & STT_UPLOAD) {
+ for (const auto& iter : m_pMainFrame->m_pSubtitlesProviders->Providers()) {
+ if (iter->Enabled(SPF_UPLOAD) && iter->Flags(SPF_UPLOAD)) {
+ InsertThread(DEBUG_NEW SubtitlesThread(this, m_pFileInfo, iter));
+ }
+ }
+ }
+
+ if (!m_pThreads.empty() && !IsThreadAborting()) {
+ if (m_nType & STT_SEARCH) {
+ m_pMainFrame->m_wndSubtitlesDownloadDialog.DoSearch((INT)m_pThreads.size());
+ } else if (m_nType & STT_DOWNLOAD) {
+ } else if (m_nType & STT_UPLOAD) {
+ m_pMainFrame->m_wndSubtitlesUploadDialog.DoUpload((INT)m_pThreads.size());
+ }
+
+ CAutoLock cAutoLock(&m_csThreads);
+ for (auto& iter : m_pThreads) {
+ VERIFY(iter->CreateThread());
+
+ // Provide a timing advantage for providers with higher priority
+ if (m_nType & STT_SEARCH) {
+ Sleep(250);
+ }
+ }
+ }
+
+ // Wait here until all threads have finished
+ while (!m_pThreads.empty()) {
+ Sleep(0);
+ }
+
+ if (m_nType & STT_SEARCH) {
+ BOOL bShowDialog = !m_AutoDownload.empty() || m_bAutoDownload;
+ for (const auto& iter : m_AutoDownload) {
+ if (iter.second) {
+ bShowDialog = FALSE;
+ break;
+ }
+ }
+ m_pMainFrame->m_wndSubtitlesDownloadDialog.DoFinished(IsThreadAborting(), bShowDialog);
+ } else if (m_nType & STT_DOWNLOAD) {
+ } else if (m_nType & STT_UPLOAD) {
+ m_pMainFrame->m_wndSubtitlesUploadDialog.DoFinished(IsThreadAborting());
+ }
+
+ m_pMainFrame->m_pSubtitlesProviders->RemoveTask(this);
+}
+
+/******************************************************************************
+** SubtitlesThread
+******************************************************************************/
+
+void SubtitlesThread::ThreadProc()
+{
+ try {
+ if (m_pFileInfo.Provider()->LoginInternal()) {
+ if (m_pTask->m_nType & STT_SEARCH) {
+ Search();
+ } else if (m_pTask->m_nType & STT_DOWNLOAD) {
+ Download(m_pFileInfo, m_pTask->m_bActivate);
+ } else if (m_pTask->m_nType & STT_UPLOAD) {
+ Upload();
+ }
+ } else {
+ if (m_pTask->m_nType & STT_SEARCH) {
+ m_pTask->m_pMainFrame->m_wndSubtitlesDownloadDialog.DoCompleted(SR_FAILED, m_pSubtitlesList);
+ } else if (m_pTask->m_nType & STT_UPLOAD) {
+ m_pTask->m_pMainFrame->m_wndSubtitlesUploadDialog.DoCompleted(SR_FAILED, m_pFileInfo.Provider());
+ }
+ }
+ } catch (/*HRESULT e*/...) {
+ if (m_pTask->m_nType & STT_SEARCH) {
+ m_pTask->m_pMainFrame->m_wndSubtitlesDownloadDialog.DoCompleted(SR_ABORTED, m_pSubtitlesList);
+ } else if (m_pTask->m_nType & STT_UPLOAD) {
+ m_pTask->m_pMainFrame->m_wndSubtitlesUploadDialog.DoCompleted(SR_ABORTED, m_pFileInfo.Provider());
+ }
+ }
+
+ // Don't exit thread until all threads have been created
+ m_pTask->RemoveThread(this);
+}
+
+void SubtitlesThread::Search()
+{
+ CheckAbortAndThrow();
+ if (!m_pFileInfo.Provider()->SupportsUserSelectedLanguages()) {
+ return;
+ }
+ CheckAbortAndThrow();
+ m_pFileInfo.Provider()->Hash(m_pFileInfo);
+ CheckAbortAndThrow();
+ m_pTask->m_pMainFrame->m_wndSubtitlesDownloadDialog.DoSearching(m_pFileInfo);
+ SRESULT searchResult = m_pFileInfo.Provider()->Search(m_pFileInfo);
+ CheckAbortAndThrow();
+ m_pSubtitlesList.sort();
+ CheckAbortAndThrow();
+ m_pTask->m_pMainFrame->m_wndSubtitlesDownloadDialog.DoCompleted(searchResult, m_pSubtitlesList);
+ CheckAbortAndThrow();
+ if (!m_pSubtitlesList.empty() && (m_pTask->m_nType & STT_DOWNLOAD) && !m_pTask->m_AutoDownload.empty()) {
+ Download();
+ }
+}
+
+void SubtitlesThread::Download()
+{
+ CAutoLock cAutoLock(&m_pTask->m_csDownload);
+ CheckAbortAndThrow();
+ for (auto& iter : m_pSubtitlesList) {
+ CheckAbortAndThrow();
+ bool bDownload = false;
+ for (const auto& language : m_pTask->m_AutoDownload) {
+ if (language.first == iter.languageCode) {
+ if (!language.second) {
+ bDownload = true;
+ break;
+ }
+ } else if (language.second) {
+ break;
+ }
+ }
+ if (bDownload) {
+ const auto& s = AfxGetAppSettings();
+ if ((iter.episodeNumber != -1 && (SHORT)LOWORD(iter.Score()) >= s.nAutoDownloadScoreSeries) || (iter.episodeNumber == -1 && (SHORT)LOWORD(iter.Score()) >= s.nAutoDownloadScoreMovies)) {
+ CheckAbortAndThrow();
+ Download(iter, TRUE);
+ }
+ }
+ }
+}
+
+void SubtitlesThread::Download(SubtitlesInfo& pSubtitlesInfo, BOOL bActivate)
+{
+ CheckAbortAndThrow();
+ m_pTask->m_pMainFrame->m_wndSubtitlesDownloadDialog.DoDownloading(pSubtitlesInfo);
+ if (pSubtitlesInfo.Provider()->Download(pSubtitlesInfo) == SR_SUCCEEDED) {
+ CheckAbortAndThrow();
+ stringMap fileData = StringUncompress(pSubtitlesInfo.fileContents, pSubtitlesInfo.fileName);
+ CheckAbortAndThrow();
+ for (const auto& iter : fileData) {
+ CheckAbortAndThrow();
+ struct {
+ SubtitlesInfo* pSubtitlesInfo;
+ BOOL bActivate;
+ std::string fileName;
+ std::string fileContents;
+ } data({ &pSubtitlesInfo, bActivate, iter.first, iter.second });
+
+ if (m_pTask->m_pMainFrame->SendMessage(WM_LOADSUBTITLES, (BOOL)bActivate, (LPARAM)&data) == TRUE) {
+ if (!m_pTask->m_AutoDownload.empty()) {
+ m_pTask->m_AutoDownload[pSubtitlesInfo.languageCode] = true;
+ }
+ }
+ }
+ }
+}
+
+void SubtitlesThread::Upload()
+{
+ CheckAbortAndThrow();
+ m_pTask->m_pMainFrame->m_wndSubtitlesUploadDialog.DoUploading(m_pFileInfo.Provider());
+ m_pFileInfo.Provider()->Hash(m_pFileInfo);
+ CheckAbortAndThrow();
+ SRESULT uploadResult = m_pFileInfo.Provider()->Upload(m_pFileInfo);
+ m_pTask->m_pMainFrame->m_wndSubtitlesUploadDialog.DoCompleted(uploadResult, m_pFileInfo.Provider());
+}
+
+void SubtitlesThread::Set(SubtitlesInfo& pSubtitlesInfo)
+{
+ if (IsThreadAborting()) {
+ return;
+ }
+
+ std::string _title = pSubtitlesInfo.title;
+ if (!_title.empty()) {
+ pSubtitlesInfo.title.clear();
+ }
+ pSubtitlesInfo.GetFileInfo(pSubtitlesInfo.fileName);
+
+ //iter.score = 0; //LevenshteinDistance(m_pFileInfo.fileName, string_(subtitlesName)) * 100;
+
+ SHORT score = ((SHORT)pSubtitlesInfo.corrected);
+ score += (((!m_pFileInfo.title.empty() && _stricmp(m_pFileInfo.NormalizeTitle().c_str(), pSubtitlesInfo.NormalizeTitle().c_str()) == 0)) ||
+ ((!_title.empty() && _stricmp(m_pFileInfo.NormalizeTitle().c_str(), pSubtitlesInfo.NormalizeString(_title).c_str()) == 0)))
+ ? 3 : !m_pFileInfo.title.empty() || !_title.empty() ? -3 : 0;
+
+ if (!_title.empty()) {
+ pSubtitlesInfo.title = _title;
+ }
+
+ score += (!m_pFileInfo.country.empty() && _stricmp(m_pFileInfo.country.c_str(), pSubtitlesInfo.country.c_str()) == 0) ? 2 : !m_pFileInfo.country.empty() ? -2 : 0;
+ score += (m_pFileInfo.year != -1 && m_pFileInfo.year == pSubtitlesInfo.year) ? 1 : 0;
+ score += (m_pFileInfo.seasonNumber != -1 && m_pFileInfo.seasonNumber == pSubtitlesInfo.seasonNumber) ? 2 : m_pFileInfo.seasonNumber > 0 ? -2 : 0;
+ score += (m_pFileInfo.episodeNumber != -1 && m_pFileInfo.episodeNumber == pSubtitlesInfo.episodeNumber) ? 2 : m_pFileInfo.episodeNumber > 0 ? -2 : 0;
+ score += (!m_pFileInfo.title2.empty() && _stricmp(m_pFileInfo.title2.c_str(), pSubtitlesInfo.title2.c_str()) == 0) ? 2 : 0;
+ score += (!m_pFileInfo.resolution.empty() && _stricmp(m_pFileInfo.resolution.c_str(), pSubtitlesInfo.resolution.c_str()) == 0) ? 1 : 0;
+ score += (!m_pFileInfo.format.empty() && _stricmp(m_pFileInfo.format.c_str(), pSubtitlesInfo.format.c_str()) == 0) ? 1 : 0;
+ score += (!m_pFileInfo.audioCodec.empty() && _stricmp(m_pFileInfo.audioCodec.c_str(), pSubtitlesInfo.audioCodec.c_str()) == 0) ? 1 : 0;
+ score += (!m_pFileInfo.videoCodec.empty() && _stricmp(m_pFileInfo.videoCodec.c_str(), pSubtitlesInfo.videoCodec.c_str()) == 0) ? 1 : 0;
+ score += (!m_pFileInfo.releaseGroup.empty() && _stricmp(m_pFileInfo.releaseGroup.c_str(), pSubtitlesInfo.releaseGroup.c_str()) == 0) ? 1 : 0;
+ const auto& s = AfxGetAppSettings();
+
+ if (IsThreadAborting()) {
+ return;
+ }
+
+ pSubtitlesInfo.Set(m_pFileInfo.Provider(),
+ m_pTask->GetLangPriority(pSubtitlesInfo.languageCode),
+ (BYTE)(pSubtitlesInfo.hearingImpaired == (int)s.bPreferHearingImpairedSubtitles),
+ score);
+
+ if (IsThreadAborting()) {
+ return;
+ }
+
+ m_pSubtitlesList.push_back(pSubtitlesInfo);
+}
diff --git a/src/mpc-hc/SubtitlesProviders.h b/src/mpc-hc/SubtitlesProviders.h
new file mode 100644
index 000000000..c1bb08bf7
--- /dev/null
+++ b/src/mpc-hc/SubtitlesProviders.h
@@ -0,0 +1,444 @@
+/*
+ * (C) 2016 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include "SubtitlesProvidersUtils.h"
+#include "../Subtitles/SubtitleHelpers.h"
+#include "MediaInfo/library/Source/ThirdParty/base64/base64.h"
+#include "VersionInfo.h"
+
+class CMainFrame;
+struct SubtitlesInfo;
+class SubtitlesThread;
+class SubtitlesTask;
+class SubtitlesProvider;
+class SubtitlesProviders;
+
+using SubtitlesList = std::list<SubtitlesInfo>;
+
+enum SubtitlesProviderFlags {
+ SPF_SEARCH = 0x00000000,
+ SPF_LOGIN = 0x00000001,
+ SPF_HASH = 0x00000002,
+ SPF_UPLOAD = 0x00000004,
+};
+
+enum SubtitlesProviderLogin {
+ SPL_UNDEFINED = 0x00000000,
+ SPL_FAILED = 0x00000001,
+ SPL_ANONYMOUS = 0x00000002,
+ SPL_REGISTERED = 0x00000004,
+};
+
+enum SRESULT {
+ SR_UNDEFINED,
+ SR_SUCCEEDED,
+ SR_FAILED,
+ SR_ABORTED,
+ // Specific to search only
+ SR_TOOMANY,
+ // Specific to upload only
+ SR_EXISTS,
+};
+
+enum SubtitlesThreadType {
+ STT_UNDEFINED = 0x00000000,
+ STT_SEARCH = 0x00000001,
+ STT_DOWNLOAD = 0x00000002,
+ STT_UPLOAD = 0x00000004
+};
+
+
+struct SubtitlesInfo {
+ SubtitlesInfo()
+ : fileProvider(nullptr)
+ , uid(UINT_ERROR)
+ , score(0ul)
+ , fileSize(ULONGLONG_ERROR)
+ , year(INT_ERROR)
+ , seasonNumber(INT_ERROR)
+ , episodeNumber(INT_ERROR)
+ , discNumber(INT_ERROR)
+ , hearingImpaired(Subtitle::HI_UNKNOWN)
+ , discCount(INT_ERROR)
+ , downloadCount(INT_ERROR)
+ , corrected(0)
+ , frameRate(-1.0)
+ , framesNumber(INT_ERROR)
+ , lengthMs(ULONGLONG_ERROR) {}
+ bool operator<(const SubtitlesInfo& rhs) const { return score > rhs.score; }
+ HRESULT GetFileInfo(const std::string& sFileName = std::string());
+ void Download(bool bActivate);
+ void OpenUrl() const;
+ std::shared_ptr<SubtitlesProvider> Provider() const { return fileProvider; }
+ void Provider(std::shared_ptr<SubtitlesProvider> pProvider) { fileProvider = pProvider; }
+ DWORD Score() const { return score; }
+ void Set(std::shared_ptr<SubtitlesProvider> pProvider, BYTE nLanguage, BYTE nHearingImpaired, SHORT nScore) {
+ static UINT i(0);
+ // run twice to check whether i has reached MAXUINT32 which is invalid
+ if (uid == UINT_ERROR) {
+ uid = ++i;
+ if (uid == UINT_ERROR) {
+ uid = ++i;
+ }
+ }
+ fileProvider = pProvider;
+ score = MAKELONG(nScore + 0x10, MAKEWORD(nHearingImpaired, nLanguage));
+ }
+
+ std::string DisplayTitle() const {
+ std::string _title(title);
+ if (!title2.empty()) {
+ _title.append(": " + title2);
+ }
+ if (year != -1) {
+ _title.append(" (" + std::to_string(year) + ")");
+ }
+ return _title;
+ }
+
+ std::string NormalizeString(std::string sTitle) const {
+ // remove ' and ' from string and replace '!?&:\' with ' ' to get more accurate results
+ sTitle = std::regex_replace(sTitle, std::regex(" and ", SubtitlesProvidersUtils::RegexFlags), " ");
+ sTitle = std::regex_replace(sTitle, std::regex(" *[!?&:] *", SubtitlesProvidersUtils::RegexFlags), " ");
+ sTitle = std::regex_replace(sTitle, std::regex("'", SubtitlesProvidersUtils::RegexFlags), "");
+
+ return sTitle;
+ }
+
+ std::string NormalizeTitle() const { return NormalizeString(title); }
+ UINT UID() const { return uid; }
+
+private:
+ std::shared_ptr<SubtitlesProvider> fileProvider;
+ UINT uid;
+ DWORD score;
+public:
+ // file properties
+ std::string filePath;
+ std::string fileName;
+ std::string fileExtension;
+ ULONGLONG fileSize;
+ std::string fileContents;
+ std::string fileHash;
+ CComQIPtr<IAsyncReader> pAsyncReader;
+
+ // file name properties
+ std::string title;
+ std::string country;
+ int year;
+ std::string episode;
+ int seasonNumber;
+ int episodeNumber;
+ std::string title2;
+ std::string resolution;
+ std::string format;
+ std::string audioCodec;
+ std::string videoCodec;
+ std::string releaseGroup;
+ int discNumber;
+
+ // subtitles properties
+ std::string id;
+ std::string imdbid;
+ std::string languageCode;
+ std::string languageName;
+ std::string url;
+ std::list<std::string> releaseNames;
+ int hearingImpaired;
+ int discCount;
+ int downloadCount;
+ int corrected;
+
+ // video properties
+ double frameRate;
+ int framesNumber;
+ ULONGLONG lengthMs;
+};
+
+
+class CWinThreadProc
+{
+public:
+ CWinThreadProc() : m_pThread(nullptr), m_bAbort(false) {}
+ virtual ~CWinThreadProc() = default;
+
+ operator CWinThread* () const { return m_pThread; }
+
+ bool IsThreadRunning() const { return m_pThread != nullptr; }
+ volatile bool& IsThreadAborting() { return m_bAbort; }
+
+ CWinThread* CreateThread() {
+ if (!IsThreadRunning()) {
+ m_pThread = AfxBeginThread(_ThreadProc, this);
+ }
+ return m_pThread;
+ }
+ void AbortThread() {
+ if (IsThreadRunning()) {
+ m_bAbort = true;
+ }
+ }
+ void WaitThread() const {
+ if (IsThreadRunning()) {
+ ::WaitForSingleObjectEx(*m_pThread, INFINITE, TRUE);
+ }
+ }
+
+private:
+ static UINT _ThreadProc(LPVOID pThreadParams) {
+ CWinThreadProc* pThread = static_cast<CWinThreadProc*>(pThreadParams);
+ pThread->ThreadProc();
+ return 0;
+ }
+ virtual void ThreadProc() PURE;
+
+ CWinThread* m_pThread;
+ volatile bool m_bAbort;
+};
+
+
+class SubtitlesThread final : public CWinThreadProc
+{
+ friend class SubtitlesProvider;
+ friend class SubtitlesTask;
+public:
+ SubtitlesThread(SubtitlesTask* pTask, const SubtitlesInfo& pFileInfo, std::shared_ptr<SubtitlesProvider> pProvider)
+ : m_pTask(pTask)
+ , m_pFileInfo(pFileInfo)
+ { m_pFileInfo.Provider(pProvider); }
+
+private:
+ void Set(SubtitlesInfo& pSubtitlesInfo);
+
+ void ThreadProc() override;
+ void Search();
+ void Download(SubtitlesInfo& pFileInfo, BOOL bActivate);
+ void Download();
+ void Upload();
+
+ void CheckAbortAndThrow() {
+ if (IsThreadAborting()) {
+ throw E_ABORT;
+ }
+ }
+
+ SubtitlesTask* m_pTask;
+ SubtitlesInfo m_pFileInfo;
+ SubtitlesList m_pSubtitlesList;
+};
+
+
+class SubtitlesTask final : public CWinThreadProc
+{
+ friend class SubtitlesThread;
+public:
+ // Search
+ SubtitlesTask(CMainFrame* pMainFrame, bool bAutoDownload, const std::list<std::string>& sLanguages);
+ // Download
+ SubtitlesTask(CMainFrame* pMainFrame, SubtitlesInfo& pSubtitlesInfo, bool bActivate);
+ // Upload
+ SubtitlesTask(CMainFrame* pMainFrame, const SubtitlesInfo& pSubtitlesInfo);
+
+ SubtitlesThreadType Type() const { return m_nType; };
+ BYTE GetLangPriority(const std::string& sLanguage) {
+ return m_LangPriority.count(sLanguage) ? m_LangPriority[sLanguage] : 0;
+ }
+
+ void InsertThread(SubtitlesThread* pThread) {
+ CAutoLock cAutoLock(&m_csThreads);
+ m_pThreads.push_back(pThread);
+ }
+
+ void RemoveThread(SubtitlesThread* pThread) {
+ CAutoLock cAutoLock(&m_csThreads);
+ m_pThreads.remove(pThread);
+ delete pThread;
+ }
+
+ void Abort() {
+ CAutoLock cAutoLock(&m_csThreads);
+ for (auto& iter : m_pThreads) {
+ iter->AbortThread();
+ }
+ AbortThread();
+ }
+
+private:
+ void ThreadProc() override;
+
+ CMainFrame* m_pMainFrame;
+ std::list<SubtitlesThread*> m_pThreads;
+ CCritSec m_csThreads;
+ CCritSec m_csDownload;
+
+ SubtitlesInfo m_pFileInfo;
+ bool m_bActivate;
+ SubtitlesThreadType m_nType;
+ bool m_bAutoDownload;
+ std::unordered_map<std::string, bool> m_AutoDownload;
+ std::unordered_map<std::string, BYTE> m_LangPriority;
+};
+
+class SubtitlesProvider
+{
+public:
+ SubtitlesProvider(SubtitlesProviders* pOwner);
+ virtual ~SubtitlesProvider() = default;
+
+public: // implemented
+ virtual std::string Name() const PURE;
+ virtual std::string Url() const PURE;
+ virtual const std::set<std::string>& Languages() const PURE;
+ virtual bool Flags(DWORD dwFlags) const PURE;
+ virtual int Icon() const PURE;
+ virtual SRESULT Search(const SubtitlesInfo& pFileInfo) PURE;
+ virtual SRESULT Download(SubtitlesInfo& pSubtitlesInfo) PURE;
+
+protected: // overridden
+ virtual void Initialize() {}
+ virtual void Uninitialize() { LogOut(); }
+public: // overridden
+ virtual bool NeedLogin() { return !(m_nLoggedIn & (SPL_REGISTERED | SPL_ANONYMOUS)); }
+ virtual SRESULT Login(const std::string&, const std::string&) { return SR_UNDEFINED; }
+ virtual SRESULT LogOut() {
+ m_nLoggedIn = SPL_UNDEFINED;
+ return SR_SUCCEEDED;
+ }
+ virtual SRESULT Hash(SubtitlesInfo&) { return SR_UNDEFINED; }
+ virtual SRESULT Upload(const SubtitlesInfo&) { return SR_UNDEFINED; };
+ virtual std::string UserAgent() const {
+ return SubtitlesProvidersUtils::StringFormat("MPC-HC v%u.%u.%u",
+ VersionInfo::GetMajorNumber(),
+ VersionInfo::GetMinorNumber(),
+ VersionInfo::GetPatchNumber());
+ }
+
+ bool LoginInternal();
+ void OpenUrl() const;
+ size_t Index() const;
+ static bool CheckInternetConnection();
+ static bool CheckLanguage(const std::string& sLanguageCode);
+ std::list<std::string> GetLanguagesIntersection() const;
+ std::list<std::string> GetLanguagesIntersection(std::list<std::string>&& userSelectedLangauges) const;
+ bool SupportsUserSelectedLanguages() const;
+ SRESULT DownloadInternal(std::string url, std::string referer, std::string& data) const;
+ static void Set(SubtitlesInfo& pSubtitlesInfo);
+ static bool IsAborting();
+
+ BOOL Enabled(SubtitlesProviderFlags nFlag) { return nFlag == SPF_UPLOAD ? m_bUpload : m_bSearch; }
+ void Enabled(SubtitlesProviderFlags nFlag, BOOL bEnabled) {
+ if (nFlag == SPF_UPLOAD) {
+ m_bUpload = bEnabled;
+ } else {
+ m_bSearch = bEnabled;
+ }
+ }
+ std::string UserName() const { return m_sUserName; };
+ void UserName(std::string sUserName) { m_sUserName = sUserName; };
+ std::string Password(bool bDecrypt = true) {
+ return bDecrypt
+ ? SubtitlesProvidersUtils::StringDecrypt(Base64::decode(m_sPassword), SubtitlesProvidersUtils::StringGenerateUniqueKey())
+ : m_sPassword;
+ };
+ void Password(LPCSTR sPassword, bool bEncrypt = true) {
+ m_sPassword = bEncrypt
+ ? Base64::encode(SubtitlesProvidersUtils::StringEncrypt(sPassword, SubtitlesProvidersUtils::StringGenerateUniqueKey()))
+ : sPassword;
+ };
+ SubtitlesProviders& Providers() const { return *m_pOwner; }
+ int GetIconIndex() const { return m_nIconIndex; }
+ void SetIconIndex(int nIconIndex) { m_nIconIndex = nIconIndex; }
+
+private:
+ BOOL m_bSearch;
+ BOOL m_bUpload;
+ std::string m_sUserName;
+ std::string m_sPassword;
+ SubtitlesProviders* m_pOwner;
+ int m_nIconIndex;
+protected:
+ SubtitlesProviderLogin m_nLoggedIn;
+};
+
+class SubtitlesProviders final
+{
+public:
+ explicit SubtitlesProviders(CMainFrame* pMainFrame);
+ ~SubtitlesProviders();
+ SubtitlesProviders(SubtitlesProviders const&) = delete;
+ SubtitlesProviders& operator=(SubtitlesProviders const&) = delete;
+
+private:
+ void RegisterProviders();
+ template <class T>
+ void Register(SubtitlesProviders* pOwner) {
+ m_pProviders.push_back(T::Create(pOwner));
+ auto& provider = m_pProviders.back();
+ HICON hIcon = ::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(provider->Icon()));
+ provider->SetIconIndex(m_himl.Add(hIcon));
+ DestroyIcon(hIcon);
+ }
+
+public:
+ const std::vector<std::shared_ptr<SubtitlesProvider>>& Providers() const {
+ return m_pProviders;
+ };
+ static BOOL SubtitlesProviders::CheckInternetConnection();
+
+ void ReadSettings();
+ std::string WriteSettings();
+
+ void Search(bool bAutoDownload);
+ void Upload(bool bShowConfirm);
+ void Download(SubtitlesInfo& pSubtitlesInfo, bool bActivate);
+ void Abort(SubtitlesThreadType nType);
+
+ void InsertTask(SubtitlesTask* pTask) {
+ CAutoLock cAutoLock(&m_csTasks);
+ m_pTasks.push_back(pTask);
+ }
+
+ void RemoveTask(SubtitlesTask* pTask) {
+ CAutoLock cAutoLock(&m_csTasks);
+ m_pTasks.remove(pTask);
+ delete pTask;
+ }
+
+ void MoveUp(size_t nIndex) {
+ std::iter_swap(m_pProviders.begin() + nIndex, m_pProviders.begin() + nIndex - 1);
+ }
+
+ void MoveDown(size_t nIndex) {
+ std::iter_swap(m_pProviders.begin() + nIndex, m_pProviders.begin() + nIndex + 1);
+ }
+
+ CImageList& GetImageList() { return m_himl; }
+
+private:
+ CMainFrame* m_pMainFrame;
+
+ std::vector<std::shared_ptr<SubtitlesProvider>> m_pProviders;
+
+ CCritSec m_csTasks;
+ std::list<SubtitlesTask*> m_pTasks;
+ CImageList m_himl;
+};
diff --git a/src/mpc-hc/SubtitlesProvidersUtils.cpp b/src/mpc-hc/SubtitlesProvidersUtils.cpp
new file mode 100644
index 000000000..77ad972b3
--- /dev/null
+++ b/src/mpc-hc/SubtitlesProvidersUtils.cpp
@@ -0,0 +1,814 @@
+/*
+ * (C) 2016 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "stdafx.h"
+#include "SubtitlesProvidersUtils.h"
+#include "SubtitlesProviders.h"
+#include "mplayerc.h"
+#include "ISOLang.h"
+
+#if !USE_STATIC_UNRAR
+#include "unrar.h"
+#else
+#include "unrar/dll.hpp"
+#endif
+
+#include "zlib/zlib.h"
+#include "zlib/zutil.h"
+#include "zlib/minizip/unzip.h"
+
+#include <afxinet.h>
+#include <WinCrypt.h>
+#include <sstream>
+
+int SubtitlesProvidersUtils::LevenshteinDistance(std::string s, std::string t)
+{
+ s = CStringA(s.c_str()).MakeLower();
+ t = CStringA(t.c_str()).MakeLower();
+ // degenerate cases
+ if (s == t) {
+ return 0;
+ }
+ if (s.length() == size_t(0)) {
+ return (int)t.length();
+ }
+ if (t.length() == size_t(0)) {
+ return (int)s.length();
+ }
+
+ // create two work vectors of integer distances
+ std::vector<int> v0(t.length() + 1);
+ std::vector<int> v1(t.length() + 1);
+
+ // initialize v0 (the previous row of distances)
+ // this row is A[0][i]: edit distance for an empty s
+ // the distance is just the number of characters to delete from t
+ for (size_t i = 0; i < v0.size(); i++) {
+ v0[i] = (int)i;
+ }
+
+ for (size_t i = 0; i < s.length(); i++) {
+ // calculate v1 (current row distances) from the previous row v0
+
+ // first element of v1 is A[i+1][0]
+ // edit distance is delete (i+1) chars from s to match empty t
+ v1[0] = (int)i + 1;
+
+ // use formula to fill in the rest of the row
+ for (size_t j = 0; j < t.length(); j++) {
+ bool cost = (s[i] == t[j]) ? 0 : 1;
+ v1[j + 1] = std::min(std::min(v1[j] + 1, v0[j + 1] + 1), v0[j] + cost);
+ }
+
+ // copy v1 (current row) to v0 (previous row) for next iteration
+ for (size_t j = 0; j < v0.size(); j++) {
+ v0[j] = v1[j];
+ }
+ }
+
+ return v1[t.length()];
+}
+
+std::string SubtitlesProvidersUtils::StringToHex(const std::string& data)
+{
+ std::ostringstream oss;
+ for (auto& iter : data) {
+ oss.fill('0');
+ oss.width(2);
+ oss << std::hex << iter;
+ }
+ return oss.str();
+}
+
+std::string SubtitlesProvidersUtils::StringToHex(const int& data)
+{
+ std::ostringstream oss;
+ oss.fill('0');
+ oss.width(8);
+ oss << std::hex << data;
+ return oss.str();
+}
+
+std::string hex_to_bytes(const std::string& hex)
+{
+ std::vector<unsigned char> bytes;
+ bytes.reserve(hex.size() / 2);
+ for (std::string::size_type i = 0, i_end = hex.size(); i < i_end; i += 2) {
+ unsigned byte;
+ std::istringstream hex_byte(hex.substr(i, 2));
+ hex_byte >> std::hex >> byte;
+ bytes.push_back(static_cast<unsigned char>(byte));
+ }
+ return std::string(bytes.begin(), bytes.end());
+}
+
+std::string string_bytes(const std::string& data)
+{
+
+ std::ostringstream oss;
+ for (auto& iter : data) {
+ oss.fill('0');
+ oss.width(2);
+ oss << std::hex << static_cast<const int>(iter);
+ }
+ return oss.str();
+}
+
+std::string SubtitlesProvidersUtils::StringToHash(const std::string& data, ALG_ID Algid)
+{
+ std::string result;
+ HCRYPTPROV hCryptProv = NULL;
+ if (CryptAcquireContext(&hCryptProv, nullptr, nullptr, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
+ HCRYPTPROV hHash = NULL;
+ if (CryptCreateHash(hCryptProv, Algid, 0, 0, &hHash)) {
+ if (CryptHashData(hHash, (const BYTE*)(data.c_str()), (DWORD)data.length(), 0)) {
+ DWORD cbHashSize = 0, dwCount = sizeof(DWORD);
+ if (CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)&cbHashSize, &dwCount, 0)) {
+ std::vector<BYTE> buffer(cbHashSize);
+ if (CryptGetHashParam(hHash, HP_HASHVAL, (BYTE*)(&buffer[0]), &cbHashSize, 0)) {
+ std::ostringstream oss;
+ for (const auto& iter : buffer) {
+ oss.fill('0');
+ oss.width(2);
+ oss << std::hex << static_cast<const int>(iter);
+ }
+ result = oss.str();
+ }
+ }
+ }
+ CryptDestroyHash(hHash);
+ }
+ CryptReleaseContext(hCryptProv, 0);
+ }
+ return result;
+}
+
+std::string SubtitlesProvidersUtils::StringEncrypt(const std::string& data, const std::string& key, ALG_ID Algid)
+{
+ std::string result;
+ HCRYPTPROV hCryptProv = NULL;
+ if (CryptAcquireContext(&hCryptProv, nullptr, nullptr, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
+ HCRYPTHASH hHash = NULL;
+ if (CryptCreateHash(hCryptProv, CALG_SHA_256, NULL, 0, &hHash)) {
+ HCRYPTKEY hKey = NULL;
+ if (CryptHashData(hHash, (const BYTE*)key.c_str(), (DWORD)key.length(), 0)) {
+ if (CryptDeriveKey(hCryptProv, Algid, hHash, CRYPT_KEYLENGTH | CRYPT_EXPORTABLE, &hKey)) {
+ DWORD dwCount = (DWORD)data.length();
+ std::vector<BYTE> buffer(data.begin(), data.end());
+ if (CryptEncrypt(hKey, NULL, TRUE, 0, nullptr, &dwCount, NULL)) {
+ buffer.resize(dwCount);
+ dwCount = (DWORD)data.length();
+ if (CryptEncrypt(hKey, NULL, TRUE, 0, (BYTE*)(&buffer[0]), &dwCount, (DWORD)buffer.size())) {
+ result.assign((const char*)(&buffer[0]), dwCount);
+ }
+ }
+ CryptDestroyKey(hKey);
+ }
+ CryptDestroyHash(hHash);
+ }
+ }
+ CryptReleaseContext(hCryptProv, 0);
+ }
+ return result;
+}
+
+std::string SubtitlesProvidersUtils::StringDecrypt(const std::string& data, const std::string& key, ALG_ID Algid)
+{
+ std::string result;
+ if (!data.empty()) {
+ HCRYPTPROV hCryptProv = NULL;
+ if (CryptAcquireContext(&hCryptProv, nullptr, nullptr, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
+ HCRYPTHASH hHash = NULL;
+ if (CryptCreateHash(hCryptProv, CALG_SHA_256, NULL, 0, &hHash)) {
+ HCRYPTKEY hKey = NULL;
+ if (CryptHashData(hHash, (const BYTE*)key.c_str(), (DWORD)key.length(), 0)) {
+ if (CryptDeriveKey(hCryptProv, Algid, hHash, CRYPT_KEYLENGTH | CRYPT_EXPORTABLE, &hKey)) {
+ DWORD dwCount = (DWORD)data.length();
+ std::vector<BYTE> buffer(data.begin(), data.end());
+ if (CryptDecrypt(hKey, NULL, TRUE, 0, (BYTE*)(&buffer[0]), &dwCount)) {
+ result.assign((const char*)(&buffer[0]), dwCount);
+ }
+ CryptDestroyKey(hKey);
+ }
+ CryptDestroyHash(hHash);
+ }
+ }
+ CryptReleaseContext(hCryptProv, 0);
+ }
+ }
+ return result;
+}
+
+std::string SubtitlesProvidersUtils::StringFormat(_In_z_ _Printf_format_string_ char const* const fmt, ...)
+{
+ std::string str;
+ va_list args;
+ va_start(args, fmt);
+ auto len = _vscprintf(fmt, args);
+ ASSERT(len > 0);
+ if (len > 0) {
+ str.resize(len);
+#if _HAS_CXX17
+ auto data = str.data();
+#else
+ auto data = str._Myptr();
+#endif
+ VERIFY(len == vsnprintf_s(data, len + 1, len, fmt, args));
+ }
+ va_end(args);
+ return str;
+}
+
+size_t SubtitlesProvidersUtils::stringMatch(const std::string& pattern, const std::string& text, regexResults& results)
+{
+ std::regex regex_pattern(pattern, RegexFlags);
+ return stringMatch(regex_pattern, text, results);
+}
+
+size_t SubtitlesProvidersUtils::stringMatch(const std::regex& pattern, const std::string& text, regexResults& results)
+{
+ results.clear();
+
+ std::string data(text);
+ std::smatch match_pieces;
+ while (std::regex_search(data, match_pieces, pattern)) {
+ regexResult result;
+ for (const auto& match : match_pieces) {
+ if (match != *match_pieces.begin()) {
+ result.push_back(match.str());
+ }
+ }
+ results.push_back(result);
+ data = match_pieces.suffix().str();
+ }
+ return results.size();
+}
+
+size_t SubtitlesProvidersUtils::stringMatch(const std::string& pattern, const std::string& text, regexResult& result)
+{
+ std::regex regex_pattern(pattern, RegexFlags);
+ return stringMatch(regex_pattern, text, result);
+}
+
+size_t SubtitlesProvidersUtils::stringMatch(const std::regex& pattern, const std::string& text, regexResult& result)
+{
+ result.clear();
+
+ std::smatch match_pieces;
+ std::regex_search(text, match_pieces, pattern);
+ for (const auto& match : match_pieces) {
+ if (match != *match_pieces.begin()) {
+ result.push_back(match.str());
+ }
+ }
+ return result.size();
+}
+
+std::string SubtitlesProvidersUtils::StringGzipDeflate(const std::string& data)
+{
+ std::string result;
+
+ UINT buffer_len = 32 * 1024;
+ std::vector<BYTE> buffer(buffer_len);
+
+ z_stream deflate_stream = { 0 };
+ deflate_stream.next_in = (BYTE*)data.c_str();
+ deflate_stream.avail_in = (UINT)data.length();
+
+ int ret = Z_OK;
+ if ((ret = deflateInit2(&deflate_stream, Z_BEST_COMPRESSION, Z_DEFLATED, DEF_WBITS + Z_ENCODING_GZIP, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY)) == Z_OK) {
+ do {
+ deflate_stream.next_out = &buffer[0];
+ deflate_stream.avail_out = buffer_len;
+ if ((ret = deflate(&deflate_stream, Z_FINISH)) >= Z_OK) {
+ result.append((char*)&buffer[0], buffer_len - deflate_stream.avail_out);
+ } else {
+ break;
+ }
+ } while (deflate_stream.avail_out == 0);
+ ret = deflateEnd(&deflate_stream);
+ }
+ return result;
+}
+
+std::string SubtitlesProvidersUtils::StringGzipCompress(const std::string& data)
+{
+ std::string result;
+
+ UINT buffer_len = 32 * 1024;
+ std::vector<BYTE> buffer(buffer_len);
+
+ z_stream deflate_stream = { 0 };
+ deflate_stream.next_in = (BYTE*)data.c_str();
+ deflate_stream.avail_in = (UINT)data.length();
+
+ int ret = Z_OK;
+ //if ((ret = deflateInit2(&deflate_stream, Z_BEST_COMPRESSION, Z_DEFLATED, DEF_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY)) == Z_OK) {
+ if ((ret = deflateInit(&deflate_stream, Z_BEST_COMPRESSION)) == Z_OK) {
+ do {
+ deflate_stream.next_out = &buffer[0];
+ deflate_stream.avail_out = buffer_len;
+ if ((ret = deflate(&deflate_stream, Z_FINISH)) >= Z_OK) {
+ result.append((char*)&buffer[0], buffer_len - deflate_stream.avail_out);
+ } else {
+ break;
+ }
+ } while (deflate_stream.avail_out == 0);
+ ret = deflateEnd(&deflate_stream);
+ }
+ return result;
+}
+
+std::string SubtitlesProvidersUtils::StringGzipInflate(const std::string& data)
+{
+ std::string result;
+
+ UINT buffer_len = 32 * 1024;
+ std::vector<BYTE> buffer(buffer_len);
+
+ z_stream inflate_stream = { 0 };
+ inflate_stream.next_in = (BYTE*)data.c_str();
+ inflate_stream.avail_in = (UINT)data.length();
+
+ if (inflateInit2(&inflate_stream, DEF_WBITS + Z_DECODING_ZLIB_GZIP) == Z_OK) {
+ do {
+ inflate_stream.next_out = &buffer[0];
+ inflate_stream.avail_out = buffer_len;
+ if (inflate(&inflate_stream, Z_NO_FLUSH) >= Z_OK) {
+ result.append((char*)&buffer[0], buffer_len - inflate_stream.avail_out);
+ } else {
+ break;
+ }
+ } while (inflate_stream.avail_out == 0);
+ inflateEnd(&inflate_stream);
+ }
+ return result;
+}
+
+std::string SubtitlesProvidersUtils::StringGzipUncompress(const std::string& data)
+{
+ std::string result;
+
+ UINT buffer_len = 32 * 1024;
+ std::vector<BYTE> buffer(buffer_len);
+
+ z_stream inflate_stream = { 0 };
+ inflate_stream.next_in = (BYTE*)data.c_str();
+ inflate_stream.avail_in = (UINT)data.length();
+
+ int ret = Z_OK;
+ //if ((ret = inflateInit2(&inflate_stream, DEF_WBITS)) == Z_OK) {
+ if ((ret = inflateInit(&inflate_stream)) == Z_OK) {
+ do {
+ inflate_stream.next_out = &buffer[0];
+ inflate_stream.avail_out = buffer_len;
+ if ((ret = inflate(&inflate_stream, Z_NO_FLUSH)) >= Z_OK) {
+ result.append((char*)&buffer[0], buffer_len - inflate_stream.avail_out);
+ } else {
+ break;
+ }
+ } while (inflate_stream.avail_out == 0);
+ ret = inflateEnd(&inflate_stream);
+ }
+ return result;
+}
+
+int SubtitlesProvidersUtils::FileUnzip(CStringA fn, stringMap& dataOut)
+{
+#define MAX_FILENAME 512
+#define READ_SIZE 8192
+
+ // Open the zip file
+ unzFile zipfile = unzOpen(fn);
+ if (zipfile == nullptr) {
+ return -1;
+ }
+
+ // Get info about the zip file
+ unz_global_info global_info;
+ if (unzGetGlobalInfo(zipfile, &global_info) != UNZ_OK) {
+ unzClose(zipfile);
+ return -1;
+ }
+
+ // Buffer to hold data read from the zip file.
+ char read_buffer[READ_SIZE];
+
+ // Loop to extract all files
+ for (uLong i = 0; i < global_info.number_entry; ++i) {
+ // Get info about current file.
+ unz_file_info file_info;
+ char filename[MAX_FILENAME];
+ if (unzGetCurrentFileInfo(zipfile, &file_info, filename, MAX_FILENAME, nullptr, 0, nullptr, 0) != UNZ_OK) {
+ unzClose(zipfile);
+ return -1;
+ }
+
+ if (strlen(filename) >= 4 && Subtitle::IsTextSubtitleFileName(filename)) {
+ if (unzOpenCurrentFile(zipfile) != UNZ_OK) {
+ unzClose(zipfile);
+ return -1;
+ }
+
+ std::string data;
+ data.reserve(file_info.uncompressed_size);
+ int error;
+ do {
+ error = unzReadCurrentFile(zipfile, read_buffer, READ_SIZE);
+ if (error < 0) {
+ unzCloseCurrentFile(zipfile);
+ unzClose(zipfile);
+ return -1;
+ }
+
+ // Write data to file.
+ if (error > 0) {
+ data.append(read_buffer, error);
+ }
+ } while (error > 0);
+ dataOut.emplace(filename, data);
+ }
+
+ unzCloseCurrentFile(zipfile);
+
+ // Go the the next entry listed in the zip file.
+ if (i + 1 < global_info.number_entry) {
+ if (unzGoToNextFile(zipfile) != UNZ_OK) {
+ unzClose(zipfile);
+ return -1;
+ }
+ }
+ }
+
+ unzClose(zipfile);
+ return 0;
+}
+
+int CALLBACK SubtitlesProvidersUtils::UnRarProc(UINT msg, LPARAM UserData, LPARAM P1, LPARAM P2)
+{
+ if (msg == UCM_PROCESSDATA) {
+ std::string* data((std::string*)UserData);
+ data->append((char*)P1, (size_t)P2);
+ }
+ return 1;
+}
+
+bool SubtitlesProvidersUtils::FileUnRar(CString fn, stringMap& dataOut)
+{
+#if !USE_STATIC_UNRAR
+#ifdef _WIN64
+ HMODULE h = LoadLibrary(_T("unrar64.dll"));
+#else
+ HMODULE h = LoadLibrary(_T("unrar.dll"));
+#endif
+ if (!h) {
+ return false;
+ }
+
+ RAROpenArchiveEx OpenArchiveEx = (RAROpenArchiveEx)GetProcAddress(h, "RAROpenArchiveEx");
+ RARCloseArchive CloseArchive = (RARCloseArchive)GetProcAddress(h, "RARCloseArchive");
+ RARReadHeaderEx ReadHeaderEx = (RARReadHeaderEx)GetProcAddress(h, "RARReadHeaderEx");
+ RARProcessFile ProcessFile = (RARProcessFile)GetProcAddress(h, "RARProcessFile");
+ RARSetCallback SetCallback = (RARSetCallback)GetProcAddress(h, "RARSetCallback");
+
+ if (!(OpenArchiveEx && CloseArchive && ReadHeaderEx && ProcessFile && SetCallback)) {
+ FreeLibrary(h);
+ return false;
+ }
+
+#else
+
+#define OpenArchiveEx RAROpenArchiveEx
+#define CloseArchive RARCloseArchive
+#define ReadHeaderEx RARReadHeaderEx
+#define ProcessFile RARProcessFile
+#define SetCallback RARSetCallback
+#endif /* USE_STATIC_UNRAR */
+
+ RAROpenArchiveDataEx OpenArchiveData;
+ ZeroMemory(&OpenArchiveData, sizeof(OpenArchiveData));
+
+ OpenArchiveData.ArcNameW = (LPTSTR)(LPCTSTR)fn;
+ char fnA[MAX_PATH];
+ size_t size;
+ if (wcstombs_s(&size, fnA, fn, fn.GetLength())) {
+ fnA[0] = 0;
+ }
+ OpenArchiveData.ArcName = fnA;
+ OpenArchiveData.OpenMode = RAR_OM_EXTRACT;
+ OpenArchiveData.CmtBuf = 0;
+ OpenArchiveData.Callback = UnRarProc;
+ std::string data;
+ OpenArchiveData.UserData = (LPARAM)&data;
+
+ HANDLE hArcData = OpenArchiveEx(&OpenArchiveData);
+ if (!hArcData) {
+#if !USE_STATIC_UNRAR
+ FreeLibrary(h);
+#endif
+ return false;
+ }
+
+ RARHeaderDataEx HeaderDataEx;
+ HeaderDataEx.CmtBuf = nullptr;
+
+ while (ReadHeaderEx(hArcData, &HeaderDataEx) == 0) {
+ if (wcslen(HeaderDataEx.FileNameW) >= 4 && Subtitle::IsTextSubtitleFileName(HeaderDataEx.FileNameW)) {
+ data.clear();
+ data.reserve(std::max(data.capacity(), (size_t)HeaderDataEx.UnpSize));
+ if (ProcessFile(hArcData, RAR_TEST, nullptr, nullptr)) {
+ CloseArchive(hArcData);
+#if !USE_STATIC_UNRAR
+ FreeLibrary(h);
+#endif
+ return false;
+ }
+ dataOut.insert(std::pair<std::string, std::string>(HeaderDataEx.FileName, data));
+ } else {
+ ProcessFile(hArcData, RAR_SKIP, nullptr, nullptr);
+ }
+ }
+
+ CloseArchive(hArcData);
+#if !USE_STATIC_UNRAR
+ FreeLibrary(h);
+#endif
+
+ return true;
+}
+
+SubtitlesProvidersUtils::stringMap SubtitlesProvidersUtils::StringUncompress(const std::string& data,
+ const std::string& fileName)
+{
+ stringMap result;
+ static const char gzip[] = { 0x1F, '\x8B' };
+ static const char zlib[4][2] = { { 0x78, '\xDA' }, { 0x78, '\x9C' }, { 0x78, 0x5E }, { 0x78, 0x01 } };
+ static const char zip[] = { 0x50, 0x4B, 0x03, 0x04 };
+ static const char rar4[] = { 0x52, 0x61, 0x72, 0x21, 0x1A, 0x07, 0x00 };
+ static const char rar5[] = { 0x52, 0x61, 0x72, 0x21, 0x1A, 0x07, 0x01, 0x00 };
+
+ if (data.compare(0, sizeof(gzip), gzip, sizeof(gzip)) == 0) {
+ result.insert(std::pair<std::string, std::string>(fileName, StringGzipInflate(data)));
+ } else if ((data.compare(0, sizeof(zlib[0]), zlib[0], sizeof(zlib[0])) == 0) || (data.compare(0, sizeof(zlib[1]), zlib[1], sizeof(zlib[1])) == 0) ||
+ (data.compare(0, sizeof(zlib[2]), zlib[2], sizeof(zlib[2])) == 0) || (data.compare(0, sizeof(zlib[3]), zlib[3], sizeof(zlib[3])) == 0)) {
+ result.insert(std::pair<std::string, std::string>(fileName, StringGzipUncompress(data)));
+ } else if (data.compare(0, sizeof(zip), zip, sizeof(zip)) == 0) {
+ TCHAR path[MAX_PATH], file[MAX_PATH];
+ GetTempPath(MAX_PATH, path);
+ GetTempFileName(path, _T("mpc"), 0, file);
+
+ CFile f;
+ if (f.Open(file, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary | CFile::shareDenyNone)) {
+ f.Write((BYTE*)data.c_str(), (UINT)data.length());
+ f.Close();
+ }
+
+ FileUnzip(file, result);
+ DeleteFile(file);
+ } else if ((data.compare(0, sizeof(rar4), rar4, sizeof(rar4)) == 0) || (data.compare(0, sizeof(rar5), rar5, sizeof(rar5)) == 0)) {
+ TCHAR path[MAX_PATH], file[MAX_PATH];
+ GetTempPath(MAX_PATH, path);
+ GetTempFileName(path, _T("mpc"), 0, file);
+
+ CFile f;
+ if (f.Open(file, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary | CFile::shareDenyNone)) {
+ f.Write((BYTE*)data.c_str(), (UINT)data.length());
+ f.Close();
+ }
+ FileUnRar(file, result);
+ DeleteFile(file);
+ } else {
+ result.insert(std::pair<std::string, std::string>(fileName, data));
+ }
+ return result;
+}
+
+std::string SubtitlesProvidersUtils::StringGenerateUniqueKey()
+{
+ TCHAR strFileName[MAX_PATH];
+ GetModuleFileName(nullptr, strFileName, MAX_PATH);
+ CPath p(strFileName);
+ p.StripToRoot();
+
+ std::vector<BYTE> buffer(16);
+ GetVolumeInformation(p, nullptr, NULL, (LPDWORD)&buffer[0], nullptr, (LPDWORD)&buffer[4], nullptr, NULL);
+ GetDiskFreeSpaceEx(p, nullptr, (PULARGE_INTEGER)&buffer[8], nullptr);
+ return std::string((PCHAR)&buffer[0], buffer.size());
+}
+
+HRESULT SubtitlesProvidersUtils::StringDownload(const std::string& url, const stringMap& headers,
+ std::string& data, bool bAutoRedirect, DWORD* dwStatusCode)
+{
+ data.clear();
+ try {
+ CInternetSession is;
+
+ std::string strHeaders;
+ for (const auto& iter : headers) {
+ if (!iter.second.empty()) {
+ strHeaders += StringFormat("%s: %s\r\n", iter.first.c_str(), iter.second.c_str());
+ }
+ }
+
+ is.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000 /*default=60000*/);
+ CAutoPtr<CHttpFile> pHttpFile((CHttpFile*)is.OpenURL(UTF8To16(url.c_str()),
+ 1,
+ INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_EXISTING_CONNECT | (bAutoRedirect ? INTERNET_FLAG_NO_AUTO_REDIRECT : NULL),
+ UTF8To16(strHeaders.c_str())));
+
+ DWORD total_length = 0, length = 0, index = 0;
+ while (pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, length, &index)) {
+ total_length += length;
+ }
+
+ data.reserve(std::max((size_t)total_length, (size_t)pHttpFile->GetLength()));
+
+ std::vector<char> buff(1024);
+ for (int len = 0; (len = pHttpFile->Read(&buff[0], (UINT)buff.size())) > 0; data.append(&buff[0], len));
+
+ if (dwStatusCode) {
+ pHttpFile->QueryInfoStatusCode(*dwStatusCode);
+ }
+
+ pHttpFile->Close(); // must close it because the destructor doesn't seem to do it and we will get an exception when "is" is destroying
+ } catch (CInternetException* ie) {
+ HRESULT hr = HRESULT_FROM_WIN32(ie->m_dwError);
+ TCHAR szErr[1024];
+ szErr[0] = '\0';
+ if (!ie->GetErrorMessage(szErr, 1024)) {
+ wcscpy_s(szErr, L"Some crazy unknown error");
+ }
+ TRACE("File transfer failed!! - %s", szErr);
+ ie->Delete();
+ return hr;
+ }
+ return S_OK;
+}
+
+HRESULT SubtitlesProvidersUtils::StringUpload(const std::string& url, const stringMap& headers,
+ const std::string& content, std::string& data,
+ bool bAutoRedirect, DWORD* dwStatusCode)
+{
+ try {
+ DWORD dwServiceType = NULL;
+ CString strServer, strObject, strUserName, strPassword;
+ INTERNET_PORT nPort = NULL;
+ if (!AfxParseURLEx(UTF8To16(url.c_str()), dwServiceType, strServer, strObject, nPort, strUserName, strPassword)) {
+ return E_FAIL;
+ }
+
+ CInternetSession is;
+ CAutoPtr<CHttpConnection> pHttpConnection(is.GetHttpConnection(strServer));
+ CAutoPtr<CHttpFile> pHttpFile(pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject, 0, 1, 0, 0, INTERNET_FLAG_KEEP_CONNECTION | (bAutoRedirect == FALSE ? INTERNET_FLAG_NO_AUTO_REDIRECT : NULL)));
+
+ for (const auto& iter : headers) {
+ if (!iter.second.empty()) {
+ pHttpFile->AddRequestHeaders(UTF8To16(StringFormat("%s: %s", iter.first.c_str(), iter.second.c_str()).c_str()), HTTP_ADDREQ_FLAG_ADD_IF_NEW);
+ }
+ }
+
+ pHttpFile->SendRequestEx(DWORD(content.length()), HSR_SYNC | HSR_INITIATE);
+ pHttpFile->Write(content.c_str(), (UINT)content.length());
+ pHttpFile->Flush();
+ pHttpFile->EndRequest(HSR_SYNC);
+
+ DWORD total_length = 0, length = 0, index = 0;
+ while (pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, length, &index)) {
+ total_length += length;
+ }
+ data.reserve(std::max((size_t)length, (size_t)pHttpFile->GetLength()));
+
+ std::vector<char> buff(1024);
+ for (int len = 0; (len = pHttpFile->Read(&buff[0], (UINT)buff.size())) > 0; data.append(&buff[0], len));
+
+ if (dwStatusCode) {
+ pHttpFile->QueryInfoStatusCode(*dwStatusCode);
+ }
+
+ pHttpFile->Close();
+ pHttpConnection->Close();
+ } catch (CInternetException* ie) {
+ HRESULT hr = HRESULT_FROM_WIN32(ie->m_dwError);
+ TCHAR szErr[1024];
+ szErr[0] = '\0';
+ if (!ie->GetErrorMessage(szErr, 1024)) {
+ wcscpy_s(szErr, L"Some crazy unknown error");
+ }
+ TRACE("File transfer failed!! - %s", szErr);
+ ie->Delete();
+ return hr;
+ }
+ return S_OK;
+}
+
+SubtitlesProvidersUtils::stringArray SubtitlesProvidersUtils::StringTokenize(const std::string& text,
+ const std::string& delimiters,
+ bool blank)
+{
+ stringArray result;
+ std::string next;
+ for (const auto& iter : text) {
+ if (delimiters.find(iter) != std::string::npos) {
+ if (!next.empty() || blank) {
+ // Add them to the result vector
+ result.push_back(StringTrim(next));
+ next.clear();
+ }
+ } else {
+ next += iter;
+ }
+ }
+ if (!next.empty()) {
+ result.push_back(StringTrim(next));
+ }
+ return result;
+}
+
+std::string SubtitlesProvidersUtils::StringTrim(const std::string& text, const std::string& characters, int side)
+{
+ std::string result(text);
+ if (!characters.empty()) {
+ if (side <= 0)
+ while (result.length() && characters.find(result.front()) != std::string::npos) {
+ result.erase(result.begin());
+ }
+
+ if (side >= 0)
+ while (result.length() && characters.find(result.back()) != std::string::npos) {
+ result.pop_back();
+ }
+ }
+ return result;
+}
+
+std::string SubtitlesProvidersUtils::StringReplace(const std::string& text, const std::string& find, const std::string& replace)
+{
+ std::string result(text);
+ std::string::size_type pos = 0;
+ while ((pos = result.find(find, pos)) != std::string::npos) {
+ result.erase(pos, find.length());
+ result.insert(pos, replace);
+ pos += replace.length();
+ }
+ return result;
+}
+
+std::list<std::string> SubtitlesProvidersUtils::LanguagesISO6391()
+{
+ std::list<std::string> result;
+ for (const auto& iter : StringTokenize(UTF16To8(AfxGetAppSettings().strSubtitlesLanguageOrder).GetString(), ",; ")) {
+ result.push_back(iter.length() > 2 ? CStringA(ISOLang::ISO6392To6391(iter.c_str())).GetString() : iter);
+ }
+ return result;
+}
+
+std::list<std::string> SubtitlesProvidersUtils::LanguagesISO6392()
+{
+ std::list<std::string> result;
+ for (const auto& iter : StringTokenize(UTF16To8(AfxGetAppSettings().strSubtitlesLanguageOrder).GetString(), ",; ")) {
+ result.push_back(iter.length() < 3 ? ISOLang::ISO6391To6392(iter.c_str()).GetString() : iter);
+ }
+ return result;
+}
+
+UINT64 SubtitlesProvidersUtils::GenerateOSHash(SubtitlesInfo& pFileInfo)
+{
+ UINT64 fileHash = pFileInfo.fileSize;
+ if (pFileInfo.pAsyncReader) {
+ UINT64 position = 0;
+ for (UINT64 tmp = 0, i = 0;
+ i < PROBE_SIZE / sizeof(tmp) && SUCCEEDED(pFileInfo.pAsyncReader->SyncRead(position, sizeof(tmp), (BYTE*)&tmp));
+ fileHash += tmp, position += sizeof(tmp), ++i);
+ position = std::max(0ui64, pFileInfo.fileSize - PROBE_SIZE);
+ for (UINT64 tmp = 0, i = 0;
+ i < PROBE_SIZE / sizeof(tmp) && SUCCEEDED(pFileInfo.pAsyncReader->SyncRead(position, sizeof(tmp), (BYTE*)&tmp));
+ fileHash += tmp, position += sizeof(tmp), ++i);
+ } else {
+ CFile file;
+ CFileException fileException;
+ if (file.Open(CString(pFileInfo.filePath.c_str()),
+ CFile::modeRead | CFile::osSequentialScan | CFile::shareDenyNone | CFile::typeBinary, &fileException)) {
+ for (UINT64 tmp = 0, i = 0; i < PROBE_SIZE / sizeof(tmp) && file.Read(&tmp, sizeof(tmp)); fileHash += tmp, ++i);
+ file.Seek(std::max(0ui64, pFileInfo.fileSize - PROBE_SIZE), CFile::begin);
+ for (UINT64 tmp = 0, i = 0; i < PROBE_SIZE / sizeof(tmp) && file.Read(&tmp, sizeof(tmp)); fileHash += tmp, ++i);
+ }
+ }
+ return fileHash;
+}
diff --git a/src/mpc-hc/SubtitlesProvidersUtils.h b/src/mpc-hc/SubtitlesProvidersUtils.h
new file mode 100644
index 000000000..849a114e4
--- /dev/null
+++ b/src/mpc-hc/SubtitlesProvidersUtils.h
@@ -0,0 +1,97 @@
+/*
+ * (C) 2016 see Authors.txt
+ *
+ * This file is part of MPC-HC.
+ *
+ * MPC-HC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MPC-HC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include <regex>
+#include <sstream>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+#define CRYPT_KEYLENGTH 0x01000000
+#define Z_ENCODING_GZIP 16
+#define Z_DECODING_ZLIB_GZIP 32
+#define PROBE_SIZE 64 * 1024
+
+struct SubtitlesInfo;
+
+namespace SubtitlesProvidersUtils
+{
+ using regexResult = std::vector<std::string>;
+ using regexResults = std::vector<regexResult>;
+ using stringMap = std::unordered_map<std::string, std::string>;
+ using stringArray = std::vector<std::string>;
+
+ static constexpr std::regex::flag_type RegexFlags(std::regex_constants::ECMAScript | std::regex_constants::icase | std::regex_constants::optimize);
+
+ int LevenshteinDistance(std::string s, std::string t);
+
+ std::string StringToHex(const std::string& data);
+ std::string StringToHex(const int& data);
+ std::string StringToHash(const std::string& data, ALG_ID Algid = CALG_MD5);
+
+
+ std::string StringEncrypt(const std::string& data, const std::string& key, ALG_ID Algid = CALG_AES_256);
+ std::string StringDecrypt(const std::string& data, const std::string& key, ALG_ID Algid = CALG_AES_256);
+
+ std::string StringFormat(_In_z_ _Printf_format_string_ char const* const fmt, ...);
+
+ size_t stringMatch(const std::string& pattern, const std::string& text, regexResults& results);
+ size_t stringMatch(const std::string& pattern, const std::string& text, regexResult& result);
+ size_t stringMatch(const std::regex& pattern, const std::string& text, regexResults& results);
+ size_t stringMatch(const std::regex& pattern, const std::string& text, regexResult& result);
+
+ std::string StringGzipDeflate(const std::string& data);
+ std::string StringGzipCompress(const std::string& data);
+ std::string StringGzipInflate(const std::string& data);
+ std::string StringGzipUncompress(const std::string& data);
+
+ int FileUnzip(CStringA fn, stringMap& dataOut);
+ bool FileUnRar(CString fn, stringMap& dataOut);
+ int CALLBACK UnRarProc(UINT msg, LPARAM UserData, LPARAM P1, LPARAM P2);
+
+ stringMap StringUncompress(const std::string& data, const std::string& fileName);
+ std::string StringGenerateUniqueKey();
+
+ HRESULT StringDownload(const std::string& url, const stringMap& headers, std::string& data,
+ bool bAutoRedirect = true, DWORD* dwStatusCode = nullptr);
+ HRESULT StringUpload(const std::string& url, const stringMap& headers, const std::string& content, std::string& data,
+ bool bAutoRedirect = true, DWORD* dwStatusCode = nullptr);
+
+ stringArray StringTokenize(const std::string& text, const std::string& delimiters, bool blank = false);
+ std::string StringTrim(const std::string& text, const std::string& characters = " ", int side = 0);
+ std::string StringReplace(const std::string& text, const std::string& find, const std::string& replace);
+
+ std::list<std::string> LanguagesISO6391();
+ std::list<std::string> LanguagesISO6392();
+ UINT64 GenerateOSHash(SubtitlesInfo& pFileInfo);
+
+ template <typename T>
+ std::string JoinContainer(const T& c, LPCSTR delim)
+ {
+ std::ostringstream stringStream;
+ if (c.cbegin() != c.cend()) {
+ std::copy(c.cbegin(), std::prev(c.cend()), std::ostream_iterator<typename T::value_type>(stringStream, delim));
+ stringStream << *c.crbegin();
+ }
+ return stringStream.str();
+ }
+}
diff --git a/src/mpc-hc/TextPassThruFilter.cpp b/src/mpc-hc/TextPassThruFilter.cpp
index 5a353c19b..184f6c45e 100644
--- a/src/mpc-hc/TextPassThruFilter.cpp
+++ b/src/mpc-hc/TextPassThruFilter.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2013, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,7 +20,6 @@
*/
#include "stdafx.h"
-#include <Windows.h>
#include <commdlg.h>
#include "mplayerc.h"
#include "MainFrm.h"
diff --git a/src/mpc-hc/Translations.cpp b/src/mpc-hc/Translations.cpp
index 134187345..34ba763c1 100644
--- a/src/mpc-hc/Translations.cpp
+++ b/src/mpc-hc/Translations.cpp
@@ -1,5 +1,5 @@
/*
-* (C) 2014 see Authors.txt
+* (C) 2014-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -21,71 +21,90 @@
#include "stdafx.h"
#include "Translations.h"
#include "FileVersionInfo.h"
+#include "PathUtils.h"
#include "VersionInfo.h"
-#include "WinAPIUtils.h"
-
-static const std::vector<const Translations::LanguageResource> languageResources = {
- { 1025, _T("Arabic"), _T("Lang\\mpcresources.ar.dll") },
- { 1067, _T("Armenian"), _T("Lang\\mpcresources.hy.dll") },
- { 1069, _T("Basque"), _T("Lang\\mpcresources.eu.dll") },
- { 1059, _T("Belarusian"), _T("Lang\\mpcresources.be.dll") },
- { 1093, _T("Bengali"), _T("Lang\\mpcresources.bn.dll") },
- { 1027, _T("Catalan"), _T("Lang\\mpcresources.ca.dll") },
- { 2052, _T("Chinese (Simplified)"), _T("Lang\\mpcresources.zh_CN.dll") },
- { 1028, _T("Chinese (Traditional)"), _T("Lang\\mpcresources.zh_TW.dll") },
- { 1050, _T("Croatian"), _T("Lang\\mpcresources.hr.dll") },
- { 1029, _T("Czech"), _T("Lang\\mpcresources.cs.dll") },
- { 1043, _T("Dutch"), _T("Lang\\mpcresources.nl.dll") },
- { 0, _T("English"), nullptr },
- { 2057, _T("English (British)"), _T("Lang\\mpcresources.en_GB.dll") },
- { 1036, _T("French"), _T("Lang\\mpcresources.fr.dll") },
- { 1110, _T("Galician"), _T("Lang\\mpcresources.gl.dll") },
- { 1031, _T("German"), _T("Lang\\mpcresources.de.dll") },
- { 1032, _T("Greek"), _T("Lang\\mpcresources.el.dll") },
- { 1037, _T("Hebrew"), _T("Lang\\mpcresources.he.dll") },
- { 1038, _T("Hungarian"), _T("Lang\\mpcresources.hu.dll") },
- { 1040, _T("Italian"), _T("Lang\\mpcresources.it.dll") },
- { 1041, _T("Japanese"), _T("Lang\\mpcresources.ja.dll") },
- { 1042, _T("Korean"), _T("Lang\\mpcresources.ko.dll") },
- { 1086, _T("Malay"), _T("Lang\\mpcresources.ms_MY.dll") },
- { 1045, _T("Polish"), _T("Lang\\mpcresources.pl.dll") },
- { 1046, _T("Portuguese (Brazil)"), _T("Lang\\mpcresources.pt_BR.dll") },
- { 1048, _T("Romanian"), _T("Lang\\mpcresources.ro.dll") },
- { 1049, _T("Russian"), _T("Lang\\mpcresources.ru.dll") },
- { 1051, _T("Slovak"), _T("Lang\\mpcresources.sk.dll") },
- { 1060, _T("Slovenian"), _T("Lang\\mpcresources.sl.dll") },
- { 1053, _T("Swedish"), _T("Lang\\mpcresources.sv.dll") },
- { 3082, _T("Spanish"), _T("Lang\\mpcresources.es.dll") },
- { 1092, _T("Tatar"), _T("Lang\\mpcresources.tt.dll") },
- { 1054, _T("Thai"), _T("Lang\\mpcresources.th_TH.dll") },
- { 1055, _T("Turkish"), _T("Lang\\mpcresources.tr.dll") },
- { 1058, _T("Ukrainian"), _T("Lang\\mpcresources.uk.dll") },
- { 1066, _T("Vietnamese"), _T("Lang\\mpcresources.vi.dll") }
-};
-Translations::LanguageResource Translations::GetLanguageResourceByLocaleID(LANGID localeID)
+namespace
{
- Translations::LanguageResource defaultResource;
+ static_assert(std::is_pod<Translations::LanguageResource>::value, "POD type is expected.");
+
+ constexpr Translations::LanguageResource languageResources[] = {
+ { 1025, _T("Arabic"), _T("Lang\\mpcresources.ar.dll") },
+ { 1067, _T("Armenian"), _T("Lang\\mpcresources.hy.dll") },
+ { 1069, _T("Basque"), _T("Lang\\mpcresources.eu.dll") },
+ { 1059, _T("Belarusian"), _T("Lang\\mpcresources.be.dll") },
+ { 1093, _T("Bengali"), _T("Lang\\mpcresources.bn.dll") },
+ { 5146, _T("Bosnian"), _T("Lang\\mpcresources.bs_BA.dll") },
+ { 1027, _T("Catalan"), _T("Lang\\mpcresources.ca.dll") },
+ { 2052, _T("Chinese (Simplified)"), _T("Lang\\mpcresources.zh_CN.dll") },
+ { 1028, _T("Chinese (Traditional)"), _T("Lang\\mpcresources.zh_TW.dll") },
+ { 1050, _T("Croatian"), _T("Lang\\mpcresources.hr.dll") },
+ { 1029, _T("Czech"), _T("Lang\\mpcresources.cs.dll") },
+ { 1030, _T("Danish"), _T("Lang\\mpcresources.da.dll") },
+ { 1043, _T("Dutch"), _T("Lang\\mpcresources.nl.dll") },
+ { 0, _T("English"), nullptr },
+ { 2057, _T("English (British)"), _T("Lang\\mpcresources.en_GB.dll") },
+ { 1035, _T("Finnish"), _T("Lang\\mpcresources.fi.dll") },
+ { 1036, _T("French"), _T("Lang\\mpcresources.fr.dll") },
+ { 1110, _T("Galician"), _T("Lang\\mpcresources.gl.dll") },
+ { 1031, _T("German"), _T("Lang\\mpcresources.de.dll") },
+ { 1032, _T("Greek"), _T("Lang\\mpcresources.el.dll") },
+ { 1037, _T("Hebrew"), _T("Lang\\mpcresources.he.dll") },
+ { 1038, _T("Hungarian"), _T("Lang\\mpcresources.hu.dll") },
+ { 1057, _T("Indonesian"), _T("Lang\\mpcresources.id.dll") },
+ { 1040, _T("Italian"), _T("Lang\\mpcresources.it.dll") },
+ { 1041, _T("Japanese"), _T("Lang\\mpcresources.ja.dll") },
+ { 1042, _T("Korean"), _T("Lang\\mpcresources.ko.dll") },
+ { 1063, _T("Lithuanian"), _T("Lang\\mpcresources.lt.dll") },
+ { 1086, _T("Malay"), _T("Lang\\mpcresources.ms_MY.dll") },
+ { 1045, _T("Polish"), _T("Lang\\mpcresources.pl.dll") },
+ { 1046, _T("Portuguese (Brazil)"), _T("Lang\\mpcresources.pt_BR.dll") },
+ { 1094, _T("Punjabi"), _T("Lang\\mpcresources.pa.dll") },
+ { 1048, _T("Romanian"), _T("Lang\\mpcresources.ro.dll") },
+ { 1049, _T("Russian"), _T("Lang\\mpcresources.ru.dll") },
+ { 3098, _T("Serbian"), _T("Lang\\mpcresources.sr.dll") },
+ { 1051, _T("Slovak"), _T("Lang\\mpcresources.sk.dll") },
+ { 1060, _T("Slovenian"), _T("Lang\\mpcresources.sl.dll") },
+ { 1053, _T("Swedish"), _T("Lang\\mpcresources.sv.dll") },
+ { 3082, _T("Spanish"), _T("Lang\\mpcresources.es.dll") },
+ { 1092, _T("Tatar"), _T("Lang\\mpcresources.tt.dll") },
+ { 1054, _T("Thai"), _T("Lang\\mpcresources.th_TH.dll") },
+ { 1055, _T("Turkish"), _T("Lang\\mpcresources.tr.dll") },
+ { 1058, _T("Ukrainian"), _T("Lang\\mpcresources.uk.dll") },
+ { 1066, _T("Vietnamese"), _T("Lang\\mpcresources.vi.dll") },
+ };
+
+ LRESULT CALLBACK RTLWindowsLayoutCbtFilterHook(int code, WPARAM wParam, LPARAM lParam)
+ {
+ if (code == HCBT_CREATEWND) {
+ HWND hWnd = (HWND)wParam;
+ if ((GetWindowLongPtr(hWnd, GWL_STYLE) & WS_CHILD) == 0) {
+ SetWindowLongPtr(hWnd, GWL_EXSTYLE, GetWindowLongPtr(hWnd, GWL_EXSTYLE) | WS_EX_LAYOUTRTL);
+ }
+ }
+ return CallNextHookEx(nullptr, code, wParam, lParam);
+ }
+}
- for (auto& lr : languageResources) {
+Translations::LanguageResource Translations::GetLanguageResourceByLocaleID(LANGID localeID)
+{
+ for (const auto& lr : languageResources) {
if (localeID == lr.localeID) {
return lr;
- } else if (0 == lr.localeID) {
- defaultResource = lr;
}
}
- return defaultResource;
+ return { 0, _T("English"), nullptr };
}
-std::list<const Translations::LanguageResource> Translations::GetAvailableLanguageResources()
+std::list<Translations::LanguageResource> Translations::GetAvailableLanguageResources()
{
- std::list<const Translations::LanguageResource> availableResources;
+ std::list<LanguageResource> availableResources;
- CString appPath = GetProgramPath();
+ const CString appPath = PathUtils::GetProgramPath();
- for (auto& lr : languageResources) {
- if (0 == lr.localeID || FileExists(appPath + lr.dllPath)) {
+ for (const LanguageResource& lr : languageResources) {
+ if (0 == lr.localeID || PathUtils::Exists(PathUtils::CombinePaths(appPath, lr.dllPath))) {
availableResources.emplace_back(lr);
}
}
@@ -95,35 +114,30 @@ std::list<const Translations::LanguageResource> Translations::GetAvailableLangua
LANGID Translations::SetDefaultLanguage()
{
- auto languageResource = GetLanguageResourceByLocaleID(GetUserDefaultUILanguage());
-
+ LANGID localeID = GetUserDefaultUILanguage();
// Try to set the language resource but don't fail if it can't be loaded
// English will we used instead in case of error
- return SetLanguage(languageResource, false) ? languageResource.localeID : 0;
+ return SetLanguage(localeID, false) ? localeID : 0;
}
-static LRESULT CALLBACK RTLWindowsLayoutCbtFilterHook(int code, WPARAM wParam, LPARAM lParam)
+bool Translations::SetLanguage(LANGID localeID, bool showErrorMsg /*= true*/)
{
- if (code == HCBT_CREATEWND) {
- HWND hWnd = (HWND)wParam;
- if ((GetWindowLongPtr(hWnd, GWL_STYLE) & WS_CHILD) == 0) {
- SetWindowLongPtr(hWnd, GWL_EXSTYLE, GetWindowLongPtr(hWnd, GWL_EXSTYLE) | WS_EX_LAYOUTRTL);
- }
- }
- return CallNextHookEx(nullptr, code, wParam, lParam);
-}
+ // Note that all messages should stay in English in this method!
-bool Translations::SetLanguage(LanguageResource languageResource, bool showErrorMsg /*= true*/)
-{
- HMODULE hMod = nullptr;
- bool success = false;
+ LanguageResource languageResource = GetLanguageResourceByLocaleID(localeID);
+
+ // Check if we fell back to English locale
+ bool success = (languageResource.localeID == localeID);
+ ASSERT(success || languageResource.localeID == 0);
- // Note that all messages should stay in English in that method!
+ HMODULE hMod = nullptr;
// Try to load the resource dll if any
if (languageResource.dllPath) {
+ ASSERT(success);
hMod = LoadLibrary(languageResource.dllPath);
if (hMod == nullptr) { // The dll failed to load for some reason
+ success = false;
if (showErrorMsg) {
MessageBox(nullptr, _T("Error loading the chosen language.\n\nPlease reinstall MPC-HC."),
_T("MPC-HC"), MB_ICONWARNING | MB_OK);
@@ -133,9 +147,9 @@ bool Translations::SetLanguage(LanguageResource languageResource, bool showError
CString strNeededVersion;
strNeededVersion.Format(_T("%u.%u.%u.0"), VersionInfo::GetMajorNumber(), VersionInfo::GetMinorNumber(), VersionInfo::GetPatchNumber());
- if (strSatVersion == strNeededVersion) {
- success = true;
- } else { // The version wasn't correct
+ if (strSatVersion != strNeededVersion) {
+ // The version wasn't correct
+ success = false;
if (showErrorMsg) {
int sel = MessageBox(nullptr, _T("Your language pack will not work with this version.\n\nDo you want to visit the download page to get a full package including the translations?"),
_T("MPC-HC"), MB_ICONWARNING | MB_YESNO);
@@ -153,8 +167,6 @@ bool Translations::SetLanguage(LanguageResource languageResource, bool showError
// In case no dll was loaded, load the English translation from the executable
if (hMod == nullptr) {
hMod = AfxGetApp()->m_hInstance;
- // If a resource dll was supposed to be loaded we had an error
- success = (languageResource.dllPath == nullptr);
}
// In case a dll was loaded, check if some special action is needed
else if (PRIMARYLANGID(languageResource.localeID) == LANG_ARABIC || PRIMARYLANGID(languageResource.localeID) == LANG_HEBREW) {
diff --git a/src/mpc-hc/Translations.h b/src/mpc-hc/Translations.h
index 81c744036..19d21e438 100644
--- a/src/mpc-hc/Translations.h
+++ b/src/mpc-hc/Translations.h
@@ -1,5 +1,5 @@
/*
-* (C) 2014 see Authors.txt
+* (C) 2014-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,22 +20,11 @@
#pragma once
-#include <Windows.h>
#include <list>
namespace Translations
{
struct LanguageResource {
- LanguageResource()
- : LanguageResource(WORD_ERROR, nullptr, nullptr)
- {};
-
- LanguageResource(LANGID localeID, LPCTSTR name, LPCTSTR dllPath)
- : localeID(localeID)
- , name(name)
- , dllPath(dllPath)
- {};
-
LANGID localeID; // Check http://msdn.microsoft.com/en-us/goglobal/bb964664
LPCTSTR name;
LPCTSTR dllPath;
@@ -43,8 +32,8 @@ namespace Translations
LanguageResource GetLanguageResourceByLocaleID(LANGID localeID);
- std::list<const LanguageResource> GetAvailableLanguageResources();
+ std::list<LanguageResource> GetAvailableLanguageResources();
LANGID SetDefaultLanguage();
- bool SetLanguage(LanguageResource languageResource, bool showErrorMsg = true);
+ bool SetLanguage(LANGID localeID, bool showErrorMsg = true);
};
diff --git a/src/mpc-hc/TunerScanDlg.cpp b/src/mpc-hc/TunerScanDlg.cpp
index 668100de0..9fdf90eb9 100644
--- a/src/mpc-hc/TunerScanDlg.cpp
+++ b/src/mpc-hc/TunerScanDlg.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2014 see Authors.txt
+ * (C) 2009-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -44,8 +44,9 @@ enum TSC_COLUMN {
IMPLEMENT_DYNAMIC(CTunerScanDlg, CDialog)
-CTunerScanDlg::CTunerScanDlg(CWnd* pParent /*=nullptr*/)
- : CDialog(CTunerScanDlg::IDD, pParent)
+CTunerScanDlg::CTunerScanDlg(CMainFrame* pMainFrame)
+ : CDialog(CTunerScanDlg::IDD, pMainFrame)
+ , m_pMainFrame(pMainFrame)
, m_bInProgress(false)
{
const CAppSettings& s = AfxGetAppSettings();
@@ -71,11 +72,11 @@ BOOL CTunerScanDlg::OnInitDialog()
m_ChannelList.InsertColumn(TSCC_NUMBER, ResStr(IDS_DVB_CHANNEL_NUMBER), LVCFMT_LEFT, 35);
m_ChannelList.InsertColumn(TSCC_NAME, ResStr(IDS_DVB_CHANNEL_NAME), LVCFMT_LEFT, 190);
m_ChannelList.InsertColumn(TSCC_FREQUENCY, ResStr(IDS_DVB_CHANNEL_FREQUENCY), LVCFMT_LEFT, 65);
- m_ChannelList.InsertColumn(TSCC_ENCRYPTED, ResStr(IDS_DVB_CHANNEL_ENCRYPTION), LVCFMT_LEFT, 55);
- m_ChannelList.InsertColumn(TSCC_VIDEO_FORMAT, ResStr(IDS_DVB_CHANNEL_FORMAT), LVCFMT_LEFT, 55);
- m_ChannelList.InsertColumn(TSCC_VIDEO_FPS, ResStr(IDS_DVB_CHANNEL_FPS), LVCFMT_LEFT, 50);
- m_ChannelList.InsertColumn(TSCC_VIDEO_RES, ResStr(IDS_DVB_CHANNEL_RESOLUTION), LVCFMT_LEFT, 70);
- m_ChannelList.InsertColumn(TSCC_VIDEO_AR, ResStr(IDS_DVB_CHANNEL_ASPECT_RATIO), LVCFMT_LEFT, 50);
+ m_ChannelList.InsertColumn(TSCC_ENCRYPTED, ResStr(IDS_DVB_CHANNEL_ENCRYPTION), LVCFMT_CENTER, 55);
+ m_ChannelList.InsertColumn(TSCC_VIDEO_FORMAT, ResStr(IDS_DVB_CHANNEL_FORMAT), LVCFMT_CENTER, 55);
+ m_ChannelList.InsertColumn(TSCC_VIDEO_FPS, ResStr(IDS_DVB_CHANNEL_FPS), LVCFMT_CENTER, 50);
+ m_ChannelList.InsertColumn(TSCC_VIDEO_RES, ResStr(IDS_DVB_CHANNEL_RESOLUTION), LVCFMT_CENTER, 70);
+ m_ChannelList.InsertColumn(TSCC_VIDEO_AR, ResStr(IDS_DVB_CHANNEL_ASPECT_RATIO), LVCFMT_CENTER, 50);
m_ChannelList.InsertColumn(TSCC_CHANNEL, _T("Channel"), LVCFMT_LEFT, 0);
m_Progress.SetRange(0, 100);
@@ -120,17 +121,38 @@ END_MESSAGE_MAP()
void CTunerScanDlg::OnBnClickedSave()
{
- CAppSettings& s = AfxGetAppSettings();
- s.m_DVBChannels.RemoveAll();
+ auto& DVBChannels = AfxGetAppSettings().m_DVBChannels;
+ const size_t maxChannelsNum = ID_NAVIGATE_JUMPTO_SUBITEM_END - ID_NAVIGATE_JUMPTO_SUBITEM_START + 1;
for (int i = 0; i < m_ChannelList.GetItemCount(); i++) {
- CDVBChannel channel;
- if (channel.FromString(m_ChannelList.GetItemText(i, TSCC_CHANNEL))) {
- channel.SetPrefNumber(i);
- s.m_DVBChannels.AddTail(channel);
+ try {
+ CDVBChannel channel(m_ChannelList.GetItemText(i, TSCC_CHANNEL));
+ auto it = std::find(std::begin(DVBChannels), std::end(DVBChannels), channel);
+ if (it != DVBChannels.end()) {
+ // replace existing channel
+ channel.SetPrefNumber(it->GetPrefNumber());
+ *it = channel;
+ } else {
+ // add new channel to the end
+ const size_t size = DVBChannels.size();
+ if (size < maxChannelsNum) {
+ channel.SetPrefNumber((int)size);
+ DVBChannels.push_back(channel);
+ } else {
+ // Just to be safe. We have 600 channels limit, but we never know what user might load there.
+ CString msg;
+ msg.Format(_T("Unable to add new channel \"%s\" to the list. Channels list is full. Please notify developers about the problem."), channel.GetName());
+ AfxMessageBox(msg, MB_OK | MB_ICONERROR);
+ }
+ }
+ } catch (CException* e) {
+ // The tokenisation can fail if the input string was invalid
+ TRACE(_T("Failed to parse a DVB channel from string \"%s\""), m_ChannelList.GetItemText(i, TSCC_CHANNEL));
+ ASSERT(FALSE);
+ e->Delete();
}
}
- ((CMainFrame*)AfxGetMainWnd())->SetChannel(0);
+ m_pMainFrame->SetChannel(0);
OnOK();
}
@@ -148,20 +170,20 @@ void CTunerScanDlg::OnBnClickedStart()
SaveScanSettings();
m_ChannelList.DeleteAllItems();
- ((CMainFrame*)AfxGetMainWnd())->StartTunerScan(pTSD);
+ m_pMainFrame->StartTunerScan(pTSD);
SetProgress(true);
} else {
- ((CMainFrame*)AfxGetMainWnd())->StopTunerScan();
+ m_pMainFrame->StopTunerScan();
}
}
void CTunerScanDlg::OnBnClickedCancel()
{
if (m_bInProgress) {
- ((CMainFrame*)AfxGetMainWnd())->StopTunerScan();
+ m_pMainFrame->StopTunerScan();
}
- ((CMainFrame*)AfxGetMainWnd())->SetChannel(AfxGetAppSettings().nDVBLastChannel);
+ m_pMainFrame->SetChannel(AfxGetAppSettings().nDVBLastChannel);
OnCancel();
}
@@ -193,56 +215,64 @@ LRESULT CTunerScanDlg::OnStats(WPARAM wParam, LPARAM lParam)
LRESULT CTunerScanDlg::OnNewChannel(WPARAM wParam, LPARAM lParam)
{
- CDVBChannel channel;
- CString strTemp;
-
- if (channel.FromString((LPCTSTR)lParam) && (!m_bIgnoreEncryptedChannels || !channel.IsEncrypted())) {
- int nItem, nChannelNumber;
-
- if (channel.GetOriginNumber() != 0) { // LCN is available
- nChannelNumber = channel.GetOriginNumber();
- // Insert new channel so that channels are sorted by their logical number
- for (nItem = 0; nItem < m_ChannelList.GetItemCount(); nItem++) {
- if ((int)m_ChannelList.GetItemData(nItem) > nChannelNumber || (int)m_ChannelList.GetItemData(nItem) == 0) {
- break;
+ try {
+ CDVBChannel channel((LPCTSTR)lParam);
+ if (!m_bIgnoreEncryptedChannels || !channel.IsEncrypted()) {
+ CString strTemp;
+ int nItem, nChannelNumber;
+
+ if (channel.GetOriginNumber() != 0) { // LCN is available
+ nChannelNumber = channel.GetOriginNumber();
+ // Insert new channel so that channels are sorted by their logical number
+ for (nItem = 0; nItem < m_ChannelList.GetItemCount(); nItem++) {
+ if ((int)m_ChannelList.GetItemData(nItem) > nChannelNumber || (int)m_ChannelList.GetItemData(nItem) == 0) {
+ break;
+ }
}
+ } else {
+ nChannelNumber = 0;
+ nItem = m_ChannelList.GetItemCount();
}
- } else {
- nChannelNumber = 0;
- nItem = m_ChannelList.GetItemCount();
- }
- strTemp.Format(_T("%d"), nChannelNumber);
- nItem = m_ChannelList.InsertItem(nItem, strTemp);
+ strTemp.Format(_T("%d"), nChannelNumber);
+ nItem = m_ChannelList.InsertItem(nItem, strTemp);
- m_ChannelList.SetItemData(nItem, channel.GetOriginNumber());
+ m_ChannelList.SetItemData(nItem, channel.GetOriginNumber());
- m_ChannelList.SetItemText(nItem, TSCC_NAME, channel.GetName());
+ m_ChannelList.SetItemText(nItem, TSCC_NAME, channel.GetName());
- strTemp.Format(_T("%lu"), channel.GetFrequency());
- m_ChannelList.SetItemText(nItem, TSCC_FREQUENCY, strTemp);
+ strTemp.Format(_T("%lu"), channel.GetFrequency());
+ m_ChannelList.SetItemText(nItem, TSCC_FREQUENCY, strTemp);
- strTemp = channel.IsEncrypted() ? ResStr(IDS_DVB_CHANNEL_ENCRYPTED) : ResStr(IDS_DVB_CHANNEL_NOT_ENCRYPTED);
- m_ChannelList.SetItemText(nItem, TSCC_ENCRYPTED, strTemp);
- if (channel.GetVideoType() == DVB_H264) {
- strTemp = _T(" H.264");
- } else if (channel.GetVideoPID()) {
- strTemp = _T("MPEG-2");
- } else {
- strTemp = _T(" - ");
- }
- m_ChannelList.SetItemText(nItem, TSCC_VIDEO_FORMAT, strTemp);
- strTemp = channel.GetVideoFpsDesc();
- m_ChannelList.SetItemText(nItem, TSCC_VIDEO_FPS, strTemp);
- if (channel.GetVideoWidth() || channel.GetVideoHeight()) {
- strTemp.Format(_T("%lux%lu"), channel.GetVideoWidth(), channel.GetVideoHeight());
- } else {
- strTemp = _T(" - ");
+ m_ChannelList.SetItemText(nItem, TSCC_ENCRYPTED, ResStr(channel.IsEncrypted() ? IDS_YES : IDS_NO));
+ if (channel.GetVideoType() == DVB_H264) {
+ strTemp = _T("H.264");
+ } else if (channel.GetVideoType() == DVB_HEVC) {
+ strTemp = _T("HEVC");
+ } else if (channel.GetVideoPID()) {
+ strTemp = _T("MPEG-2");
+ } else {
+ strTemp = _T("-");
+ }
+ m_ChannelList.SetItemText(nItem, TSCC_VIDEO_FORMAT, strTemp);
+ strTemp = channel.GetVideoFpsDesc();
+ m_ChannelList.SetItemText(nItem, TSCC_VIDEO_FPS, strTemp);
+ if (channel.GetVideoWidth() || channel.GetVideoHeight()) {
+ strTemp.Format(_T("%lux%lu"), channel.GetVideoWidth(), channel.GetVideoHeight());
+ } else {
+ strTemp = _T("-");
+ }
+ m_ChannelList.SetItemText(nItem, TSCC_VIDEO_RES, strTemp);
+ strTemp.Format(_T("%lu/%lu"), channel.GetVideoARy(), channel.GetVideoARx());
+ m_ChannelList.SetItemText(nItem, TSCC_VIDEO_AR, strTemp);
+ m_ChannelList.SetItemText(nItem, TSCC_CHANNEL, (LPCTSTR) lParam);
}
- m_ChannelList.SetItemText(nItem, TSCC_VIDEO_RES, strTemp);
- strTemp.Format(_T("%lu/%lu"), channel.GetVideoARy(), channel.GetVideoARx());
- m_ChannelList.SetItemText(nItem, TSCC_VIDEO_AR, strTemp);
- m_ChannelList.SetItemText(nItem, TSCC_CHANNEL, (LPCTSTR) lParam);
+ } catch (CException* e) {
+ // The tokenisation can fail if the input string was invalid
+ TRACE(_T("Failed to parse a DVB channel from string \"%s\""), (LPCTSTR)lParam);
+ ASSERT(FALSE);
+ e->Delete();
+ return FALSE;
}
return TRUE;
diff --git a/src/mpc-hc/TunerScanDlg.h b/src/mpc-hc/TunerScanDlg.h
index c44b7ff66..b8571f403 100644
--- a/src/mpc-hc/TunerScanDlg.h
+++ b/src/mpc-hc/TunerScanDlg.h
@@ -1,5 +1,5 @@
/*
- * (C) 2009-2013 see Authors.txt
+ * (C) 2009-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -28,10 +28,12 @@
class CTunerScanDlg : public CDialog
{
+ CMainFrame* m_pMainFrame;
+
DECLARE_DYNAMIC(CTunerScanDlg)
public:
- CTunerScanDlg(CWnd* pParent = nullptr); // standard constructor
+ CTunerScanDlg(CMainFrame* pMainFrame); // standard constructor
virtual ~CTunerScanDlg();
// Dialog Data
diff --git a/src/mpc-hc/UpdateChecker.cpp b/src/mpc-hc/UpdateChecker.cpp
index 664f0e361..bce4cbdf3 100644
--- a/src/mpc-hc/UpdateChecker.cpp
+++ b/src/mpc-hc/UpdateChecker.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2012-2013 see Authors.txt
+ * (C) 2012-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -27,6 +27,7 @@
#include "SettingsDefines.h"
#include "mplayerc.h"
#include "SysVersion.h"
+#include "AppSettings.h"
#include <afxinet.h>
@@ -80,10 +81,10 @@ Update_Status UpdateChecker::IsUpdateAvailable(const Version& currentVersion)
headers.Format(headersFmt, osVersionStr);
CHttpFile* versionFile = (CHttpFile*) internet.OpenURL(versionFileURL,
- 1,
- INTERNET_FLAG_TRANSFER_ASCII | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_RELOAD,
- headers,
- DWORD(-1));
+ 1,
+ INTERNET_FLAG_TRANSFER_ASCII | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_RELOAD,
+ headers,
+ DWORD(-1));
if (versionFile) {
CString latestVersionStr;
diff --git a/src/mpc-hc/VMROSD.cpp b/src/mpc-hc/VMROSD.cpp
index bce431bfa..1bd797cd0 100644
--- a/src/mpc-hc/VMROSD.cpp
+++ b/src/mpc-hc/VMROSD.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -23,6 +23,7 @@
#include "mplayerc.h"
#include "DSMPropertyBag.h"
#include "MainFrm.h"
+#include <mvrInterfaces.h>
#define SEEKBAR_HEIGHT 60
#define SLIDER_BAR_MARGIN 10
@@ -34,22 +35,21 @@
CVMROSD::CVMROSD(CMainFrame* pMainFrame)
- : m_pMainFrame(pMainFrame)
+ : m_pVMB(nullptr)
+ , m_pMFVMB(nullptr)
+ , m_pMVTO(nullptr)
+ , m_pCB(nullptr)
+ , m_pMainFrame(pMainFrame)
, m_pWnd(nullptr)
+ , m_iFontSize(0)
+ , m_bCursorMoving(false)
+ , m_bShowSeekBar(false)
+ , m_bSeekBarVisible(false)
, m_llSeekMin(0)
, m_llSeekMax(0)
, m_llSeekPos(0)
- , m_nMessagePos(OSD_NOMESSAGE)
- , m_bShowSeekBar(false)
- , m_bSeekBarVisible(false)
- , m_bCursorMoving(false)
- , m_pMFVMB(nullptr)
- , m_pVMB(nullptr)
- , m_pMVTO(nullptr)
- , m_iFontSize(0)
- , m_fontName(_T(""))
, m_bShowMessage(true)
- , m_pCB(nullptr)
+ , m_nMessagePos(OSD_NOMESSAGE)
{
m_colors[OSD_TRANSPARENT] = RGB(0, 0, 0);
m_colors[OSD_BACKGROUND] = RGB(32, 40, 48);
@@ -363,15 +363,15 @@ void CVMROSD::Invalidate()
void CVMROSD::UpdateSeekBarPos(CPoint point)
{
m_llSeekPos = (point.x - m_rectBar.left) * (m_llSeekMax - m_llSeekMin) / (m_rectBar.Width() - SLIDER_CURSOR_WIDTH);
- m_llSeekPos = max(m_llSeekPos, m_llSeekMin);
- m_llSeekPos = min(m_llSeekPos, m_llSeekMax);
+ m_llSeekPos = std::max(m_llSeekPos, m_llSeekMin);
+ m_llSeekPos = std::min(m_llSeekPos, m_llSeekMax);
if (AfxGetAppSettings().bFastSeek ^ (GetKeyState(VK_SHIFT) < 0)) {
m_llSeekPos = m_pMainFrame->GetClosestKeyFrame(m_llSeekPos);
}
if (m_pWnd) {
- AfxGetApp()->GetMainWnd()->PostMessage(WM_HSCROLL, MAKEWPARAM((short)m_llSeekPos, SB_THUMBTRACK), (LPARAM)m_pWnd->m_hWnd);
+ AfxGetApp()->GetMainWnd()->PostMessage(WM_HSCROLL, NULL, reinterpret_cast<LPARAM>(m_pWnd->m_hWnd));
}
}
diff --git a/src/mpc-hc/VMROSD.h b/src/mpc-hc/VMROSD.h
index df2100671..0e7b0efb2 100644
--- a/src/mpc-hc/VMROSD.h
+++ b/src/mpc-hc/VMROSD.h
@@ -1,5 +1,5 @@
/*
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2014, 2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,11 +20,8 @@
#pragma once
-#include <atlbase.h>
-#include <d3d9.h>
#include <evr9.h>
#include <vmr9.h>
-#include "madVRAllocatorPresenter.h"
enum OSD_COLORS {
@@ -45,8 +42,8 @@ enum OSD_MESSAGEPOS {
OSD_DEBUG
};
-struct IDSMChapterBag;
-
+interface IMadVRTextOsd;
+interface IDSMChapterBag;
class CMainFrame;
class CVMROSD
diff --git a/src/mpc-hc/VersionInfo.cpp b/src/mpc-hc/VersionInfo.cpp
index 5726084f0..02200e6cd 100644
--- a/src/mpc-hc/VersionInfo.cpp
+++ b/src/mpc-hc/VersionInfo.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2013-2014 see Authors.txt
+ * (C) 2013-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -49,6 +49,15 @@ bool VersionInfo::Is64Bit()
#endif
}
+bool VersionInfo::IsLite()
+{
+#ifdef MPCHC_LITE
+ return true;
+#else
+ return false;
+#endif
+}
+
CString VersionInfo::GetVersionString()
{
return MPC_VERSION_STR;
@@ -83,3 +92,12 @@ unsigned VersionInfo::GetRevisionNumber()
{
return MPC_VERSION_REV;
}
+
+CString VersionInfo::GetGCCVersion()
+{
+#ifdef _WIN64
+ return GCC64_VERSION;
+#else
+ return GCC32_VERSION;
+#endif
+}
diff --git a/src/mpc-hc/VersionInfo.h b/src/mpc-hc/VersionInfo.h
index 0e854bdfc..691c200c9 100644
--- a/src/mpc-hc/VersionInfo.h
+++ b/src/mpc-hc/VersionInfo.h
@@ -1,5 +1,5 @@
/*
- * (C) 2013 see Authors.txt
+ * (C) 2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -20,19 +20,18 @@
#pragma once
-class VersionInfo
+namespace VersionInfo
{
-public:
- static bool IsNightly();
- static CString GetNightlyWord();
- static bool Is64Bit();
- static CString GetVersionString();
- static CString GetFullVersionString();
- static CString GetBuildDateString();
- static unsigned GetMajorNumber();
- static unsigned GetMinorNumber();
- static unsigned GetPatchNumber();
- static unsigned GetRevisionNumber();
-private:
- VersionInfo();
+ bool IsNightly();
+ CString GetNightlyWord();
+ bool Is64Bit();
+ bool IsLite();
+ CString GetVersionString();
+ CString GetFullVersionString();
+ CString GetBuildDateString();
+ unsigned GetMajorNumber();
+ unsigned GetMinorNumber();
+ unsigned GetPatchNumber();
+ unsigned GetRevisionNumber();
+ CString GetGCCVersion();
};
diff --git a/src/mpc-hc/VolumeCtrl.cpp b/src/mpc-hc/VolumeCtrl.cpp
index bd41188ed..e1a13b96b 100644
--- a/src/mpc-hc/VolumeCtrl.cpp
+++ b/src/mpc-hc/VolumeCtrl.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,6 +22,7 @@
#include "stdafx.h"
#include "mplayerc.h"
#include "VolumeCtrl.h"
+#include "AppSettings.h"
// CVolumeCtrl
@@ -55,7 +56,7 @@ bool CVolumeCtrl::Create(CWnd* pParentWnd)
void CVolumeCtrl::SetPosInternal(int pos)
{
SetPos(pos);
- GetParent()->PostMessage(WM_HSCROLL, MAKEWPARAM((short)pos, SB_THUMBPOSITION), (LPARAM)m_hWnd); // this will be reflected back on us
+ GetParent()->PostMessage(WM_HSCROLL, MAKEWPARAM(static_cast<WORD>(pos), SB_THUMBPOSITION), reinterpret_cast<LPARAM>(m_hWnd)); // this will be reflected back on us
}
void CVolumeCtrl::IncreaseVolume()
@@ -79,6 +80,7 @@ BEGIN_MESSAGE_MAP(CVolumeCtrl, CSliderCtrl)
ON_WM_HSCROLL_REFLECT()
ON_WM_SETCURSOR()
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
+ ON_WM_MOUSEWHEEL()
END_MESSAGE_MAP()
// CVolumeCtrl message handlers
@@ -188,7 +190,7 @@ void CVolumeCtrl::HScroll(UINT nSBCode, UINT nPos)
CFrameWnd* pFrame = GetParentFrame();
if (pFrame && pFrame != GetParent()) {
- pFrame->PostMessage(WM_HSCROLL, MAKEWPARAM((short)nPos, nSBCode), (LPARAM)m_hWnd);
+ pFrame->PostMessage(WM_HSCROLL, MAKEWPARAM(static_cast<WORD>(nPos), static_cast<WORD>(nSBCode)), reinterpret_cast<LPARAM>(m_hWnd));
}
}
@@ -202,7 +204,7 @@ BOOL CVolumeCtrl::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
TOOLTIPTEXT* pTTT = reinterpret_cast<LPTOOLTIPTEXT>(pNMHDR);
CString str;
- str.Format(ResStr(IDS_VOLUME), GetPos());
+ str.Format(IDS_VOLUME, GetPos());
_tcscpy_s(pTTT->szText, str);
pTTT->hinst = nullptr;
@@ -210,3 +212,15 @@ BOOL CVolumeCtrl::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
return TRUE;
}
+
+BOOL CVolumeCtrl::OnMouseWheel(UINT nFlags, short zDelta, CPoint point)
+{
+ if (zDelta > 0) {
+ IncreaseVolume();
+ } else if (zDelta < 0) {
+ DecreaseVolume();
+ } else {
+ return FALSE;
+ }
+ return TRUE;
+}
diff --git a/src/mpc-hc/VolumeCtrl.h b/src/mpc-hc/VolumeCtrl.h
index 7584d4404..e8230bc0d 100644
--- a/src/mpc-hc/VolumeCtrl.h
+++ b/src/mpc-hc/VolumeCtrl.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2012 see Authors.txt
+ * (C) 2006-2012, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -49,4 +49,5 @@ public:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void HScroll(UINT nSBCode, UINT nPos);
+ afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint point);
};
diff --git a/src/mpc-hc/WebClientSocket.cpp b/src/mpc-hc/WebClientSocket.cpp
index aeb162bf5..38a1253b7 100644
--- a/src/mpc-hc/WebClientSocket.cpp
+++ b/src/mpc-hc/WebClientSocket.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -26,6 +26,7 @@
#include "../Subtitles/TextFile.h"
#include "WebServer.h"
#include "WebClientSocket.h"
+#include "text.h"
#define MAX_HEADER_SIZE 512 * 1024
#define MAX_DATA_SIZE 2 * 1024 * 1024
@@ -34,8 +35,8 @@ CWebClientSocket::CWebClientSocket(CWebServer* pWebServer, CMainFrame* pMainFram
: m_pWebServer(pWebServer)
, m_pMainFrame(pMainFrame)
, m_buffLen(0)
- , m_buffLenProcessed(0)
, m_buffMaxLen(2048)
+ , m_buffLenProcessed(0)
, m_parsingState(PARSING_HEADER)
, m_dataLen(0)
{
@@ -99,10 +100,10 @@ void CWebClientSocket::HandleRequest()
{
// remember new cookies
- CStringA value;
- if (m_hdrlines.Lookup("cookie", value)) {
+ CStringA cookie;
+ if (m_hdrlines.Lookup("cookie", cookie)) {
CAtlList<CStringA> sl;
- Explode(value, sl, ';');
+ Explode(cookie, sl, ';');
POSITION pos = sl.GetHeadPosition();
while (pos) {
CAtlList<CStringA> sl2;
@@ -123,7 +124,7 @@ void CWebClientSocket::HandleRequest()
CStringA reshdr, resbody;
- if (m_cmd == _T("GET") || m_cmd == _T("HEAD") || m_cmd == _T("POST")) {
+ if (m_cmd == "GET" || m_cmd == "HEAD" || m_cmd == "POST") {
int i = m_path.Find('?');
if (i >= 0) {
m_query = m_path.Mid(i + 1);
@@ -189,16 +190,16 @@ void CWebClientSocket::HandleRequest()
reshdr += "Set-Cookie: " + key + "=" + TToA(value);
POSITION pos2 = m_cookieattribs.GetStartPosition();
while (pos2) {
- cookie_attribs value;
- m_cookieattribs.GetNextAssoc(pos2, key, value);
- if (!value.path.IsEmpty()) {
- reshdr += "; path=" + value.path;
+ cookie_attribs attribs;
+ m_cookieattribs.GetNextAssoc(pos2, key, attribs);
+ if (!attribs.path.IsEmpty()) {
+ reshdr += "; path=" + attribs.path;
}
- if (!value.expire.IsEmpty()) {
- reshdr += "; expire=" + value.expire;
+ if (!attribs.expire.IsEmpty()) {
+ reshdr += "; expire=" + attribs.expire;
}
- if (!value.domain.IsEmpty()) {
- reshdr += "; domain=" + value.domain;
+ if (!attribs.domain.IsEmpty()) {
+ reshdr += "; domain=" + attribs.domain;
}
}
reshdr += "\r\n";
@@ -212,7 +213,7 @@ void CWebClientSocket::HandleRequest()
Send(reshdr, reshdr.GetLength());
- if (m_cmd != _T("HEAD") && reshdr.Find("HTTP/1.0 200 OK") == 0 && !resbody.IsEmpty()) {
+ if (m_cmd != "HEAD" && reshdr.Find("HTTP/1.0 200 OK") == 0 && !resbody.IsEmpty()) {
Send(resbody, resbody.GetLength());
}
@@ -257,7 +258,7 @@ void CWebClientSocket::ParseHeader(const char* headerEnd)
m_hdrlines[key.MakeLower()] = val;
}
- if (m_cmd == _T("POST")) {
+ if (m_cmd == "POST") {
CStringA str;
if (m_hdrlines.Lookup("content-length", str)) {
m_dataLen = strtol(str, nullptr, 10);
@@ -323,7 +324,7 @@ void CWebClientSocket::OnReceive(int nErrorCode)
}
headerEnd += 4;
- m_buffLen = max(int(m_buff + m_buffLen - headerEnd), 0);
+ m_buffLen = std::max(int(m_buff + m_buffLen - headerEnd), 0);
if (m_buffLen > 0) {
memcpy(m_buff, headerEnd, m_buffLen + 1);
if (m_buffLen >= m_dataLen) {
@@ -378,7 +379,7 @@ bool CWebClientSocket::OnCommand(CStringA& hdr, CStringA& body, CStringA& mime)
m_pMainFrame->SendMessage(WM_COMMAND, id);
}
} else {
- if (arg == CMD_SETPOS && m_request.Lookup("position", arg)) {
+ if (arg == _T(CMD_SETPOS) && m_request.Lookup("position", arg)) {
int h, m, s, ms = 0;
TCHAR c;
if (_stscanf_s(arg, _T("%d%c%d%c%d%c%d"), &h, &c, 1, &m, &c, 1, &s, &c, 1, &ms) >= 5) {
@@ -390,14 +391,14 @@ bool CWebClientSocket::OnCommand(CStringA& hdr, CStringA& body, CStringA& mime)
}
}
}
- } else if (arg == CMD_SETPOS && m_request.Lookup("percent", arg)) {
+ } else if (arg == _T(CMD_SETPOS) && m_request.Lookup("percent", arg)) {
float percent = 0;
if (_stscanf_s(arg, _T("%f"), &percent) == 1) {
m_pMainFrame->SeekTo((REFERENCE_TIME)(percent / 100 * m_pMainFrame->GetDur()));
}
- } else if (arg == CMD_SETVOLUME && m_request.Lookup("volume", arg)) {
+ } else if (arg == _T(CMD_SETVOLUME) && m_request.Lookup("volume", arg)) {
int volume = _tcstol(arg, nullptr, 10);
- m_pMainFrame->m_wndToolBar.Volume = min(max(volume, 0), 100);
+ m_pMainFrame->m_wndToolBar.Volume = std::min(std::max(volume, 0), 100);
m_pMainFrame->OnPlayVolume(0);
}
}
@@ -440,52 +441,12 @@ bool CWebClientSocket::OnIndex(CStringA& hdr, CStringA& body, CStringA& mime)
bool CWebClientSocket::OnInfo(CStringA& hdr, CStringA& body, CStringA& mime)
{
- int pos = (int)(m_pMainFrame->GetPos() / 10000);
- int dur = (int)(m_pMainFrame->GetDur() / 10000);
-
- CString positionstring, durationstring, versionstring, sizestring;
- versionstring.Format(L"%s", AfxGetMyApp()->m_strVersion);
-
- positionstring.Format(_T("%02d:%02d:%02d"), (pos / 3600000), (pos / 60000) % 60, (pos / 1000) % 60);
- durationstring.Format(_T("%02d:%02d:%02d"), (dur / 3600000), (dur / 60000) % 60, (dur / 1000) % 60);
-
- CPath file(m_pMainFrame->GetFileName());
- file.RemoveExtension();
-
- LONGLONG size = 0;
- if (CComQIPtr<IBaseFilter> pBF = m_pMainFrame->m_pFSF) {
- BeginEnumPins(pBF, pEP, pPin) {
- if (CComQIPtr<IAsyncReader> pAR = pPin) {
- LONGLONG total, available;
- if (SUCCEEDED(pAR->Length(&total, &available))) {
- size = total;
- break;
- }
- }
- }
- EndEnumPins;
- }
-
- if (size == 0) {
- WIN32_FIND_DATA wfd;
- HANDLE hFind = FindFirstFile(m_pMainFrame->m_wndPlaylistBar.GetCurFileName(), &wfd);
- if (hFind != INVALID_HANDLE_VALUE) {
- FindClose(hFind);
- size = (LONGLONG(wfd.nFileSizeHigh) << 32) | wfd.nFileSizeLow;
- }
- }
-
- const int MAX_FILE_SIZE_BUFFER = 65;
- TCHAR szFileSize[MAX_FILE_SIZE_BUFFER];
- StrFormatByteSizeW(size, szFileSize, MAX_FILE_SIZE_BUFFER);
- sizestring.Format(L"%s", szFileSize);
-
m_pWebServer->LoadPage(IDR_HTML_INFO, body, AToT(m_path));
- body.Replace("[version]", UTF8(versionstring));
- body.Replace("[file]", UTF8(file));
- body.Replace("[position]", UTF8(positionstring));
- body.Replace("[duration]", UTF8(durationstring));
- body.Replace("[size]", UTF8(sizestring));
+ body.Replace("[version]", UTF8(AfxGetMyApp()->m_strVersion));
+ body.Replace("[file]", UTF8(m_pMainFrame->GetFileName()));
+ body.Replace("[position]", UTF8(ReftimeToString2(m_pMainFrame->GetPos())));
+ body.Replace("[duration]", UTF8(ReftimeToString2(m_pMainFrame->GetDur())));
+ body.Replace("[size]", UTF8(GetSize()));
return true;
}
@@ -529,7 +490,7 @@ bool CWebClientSocket::OnBrowser(CStringA& hdr, CStringA& body, CStringA& mime)
*(DWORD*)p = (DWORD)cmdln.GetCount();
p += sizeof(DWORD);
- POSITION pos = cmdln.GetHeadPosition();
+ pos = cmdln.GetHeadPosition();
while (pos) {
CString& str = cmdln.GetNext(pos);
len = (str.GetLength() + 1) * sizeof(TCHAR);
@@ -587,7 +548,7 @@ bool CWebClientSocket::OnBrowser(CStringA& hdr, CStringA& body, CStringA& mime)
files += "</tr>\r\n";
}
- path = "Root";
+ path = _T("Root");
} else {
CString parent;
@@ -703,19 +664,7 @@ bool CWebClientSocket::OnControls(CStringA& hdr, CStringA& body, CStringA& mime)
break;
}
- int pos = (int)(m_pMainFrame->GetPos() / 10000);
- int dur = (int)(m_pMainFrame->GetDur() / 10000);
-
- CString position, duration;
- position.Format(_T("%d"), pos);
- duration.Format(_T("%d"), dur);
-
- CString positionstring, durationstring, playbackrate;
- // positionstring.Format(_T("%02d:%02d:%02d.%03d"), (pos/3600000), (pos/60000)%60, (pos/1000)%60, pos%1000);
- // durationstring.Format(_T("%02d:%02d:%02d.%03d"), (dur/3600000), (dur/60000)%60, (dur/1000)%60, dur%1000);
- positionstring.Format(_T("%02d:%02d:%02d"), (pos / 3600000), (pos / 60000) % 60, (pos / 1000) % 60);
- durationstring.Format(_T("%02d:%02d:%02d"), (dur / 3600000), (dur / 60000) % 60, (dur / 1000) % 60);
- playbackrate = _T("1"); // TODO
+ CString playbackrate = _T("1"); // TODO
CString volumelevel, muted;
volumelevel.Format(_T("%d"), m_pMainFrame->m_wndToolBar.m_volctrl.GetPos());
@@ -730,10 +679,10 @@ bool CWebClientSocket::OnControls(CStringA& hdr, CStringA& body, CStringA& mime)
body.Replace("[filedir]", UTF8(dir));
body.Replace("[state]", UTF8(state));
body.Replace("[statestring]", UTF8(statestring));
- body.Replace("[position]", UTF8(position));
- body.Replace("[positionstring]", UTF8(positionstring));
- body.Replace("[duration]", UTF8(duration));
- body.Replace("[durationstring]", UTF8(durationstring));
+ body.Replace("[position]", UTF8(NumToCString(std::lround(m_pMainFrame->GetPos() / 10000i64))));
+ body.Replace("[positionstring]", UTF8(ReftimeToString2(m_pMainFrame->GetPos())));
+ body.Replace("[duration]", UTF8(NumToCString(std::lround(m_pMainFrame->GetDur() / 10000i64))));
+ body.Replace("[durationstring]", UTF8(ReftimeToString2(m_pMainFrame->GetDur())));
body.Replace("[volumelevel]", UTF8(volumelevel));
body.Replace("[muted]", UTF8(muted));
body.Replace("[playbackrate]", UTF8(playbackrate));
@@ -772,19 +721,7 @@ bool CWebClientSocket::OnVariables(CStringA& hdr, CStringA& body, CStringA& mime
break;
}
- int pos = (int)(m_pMainFrame->GetPos() / 10000);
- int dur = (int)(m_pMainFrame->GetDur() / 10000);
-
- CString position, duration;
- position.Format(_T("%d"), pos);
- duration.Format(_T("%d"), dur);
-
- CString positionstring, durationstring, playbackrate;
- // positionstring.Format(_T("%02d:%02d:%02d.%03d"), (pos/3600000), (pos/60000)%60, (pos/1000)%60, pos%1000);
- // durationstring.Format(_T("%02d:%02d:%02d.%03d"), (dur/3600000), (dur/60000)%60, (dur/1000)%60, dur%1000);
- positionstring.Format(_T("%02d:%02d:%02d"), (pos / 3600000), (pos / 60000) % 60, (pos / 1000) % 60);
- durationstring.Format(_T("%02d:%02d:%02d"), (dur / 3600000), (dur / 60000) % 60, (dur / 1000) % 60);
- playbackrate = _T("1"); // TODO
+ CString playbackrate = _T("1"); // TODO
CString volumelevel, muted;
volumelevel.Format(_T("%d"), m_pMainFrame->m_wndToolBar.m_volctrl.GetPos());
@@ -793,20 +730,23 @@ bool CWebClientSocket::OnVariables(CStringA& hdr, CStringA& body, CStringA& mime
CString reloadtime(_T("0")); // TODO
m_pWebServer->LoadPage(IDR_HTML_VARIABLES, body, AToT(m_path));
+ body.Replace("[file]", UTF8(m_pMainFrame->GetFileName()));
body.Replace("[filepatharg]", UTF8Arg(path));
body.Replace("[filepath]", UTF8(path));
body.Replace("[filedirarg]", UTF8Arg(dir));
body.Replace("[filedir]", UTF8(dir));
body.Replace("[state]", UTF8(state));
body.Replace("[statestring]", UTF8(statestring));
- body.Replace("[position]", UTF8(position));
- body.Replace("[positionstring]", UTF8(positionstring));
- body.Replace("[duration]", UTF8(duration));
- body.Replace("[durationstring]", UTF8(durationstring));
+ body.Replace("[position]", UTF8(NumToCString(std::lround(m_pMainFrame->GetPos() / 10000i64))));
+ body.Replace("[positionstring]", UTF8(ReftimeToString2(m_pMainFrame->GetPos())));
+ body.Replace("[duration]", UTF8(NumToCString(std::lround(m_pMainFrame->GetDur() / 10000i64))));
+ body.Replace("[durationstring]", UTF8(ReftimeToString2(m_pMainFrame->GetDur())));
body.Replace("[volumelevel]", UTF8(volumelevel));
body.Replace("[muted]", UTF8(muted));
body.Replace("[playbackrate]", UTF8(playbackrate));
+ body.Replace("[size]", UTF8(GetSize()));
body.Replace("[reloadtime]", UTF8(reloadtime));
+ body.Replace("[version]", UTF8(AfxGetMyApp()->m_strVersion));
return true;
}
@@ -835,19 +775,16 @@ bool CWebClientSocket::OnStatus(CStringA& hdr, CStringA& body, CStringA& mime)
break;
}
- int pos = (int)(m_pMainFrame->GetPos() / 10000);
- int dur = (int)(m_pMainFrame->GetDur() / 10000);
-
- CString posstr, durstr;
- posstr.Format(_T("%02d:%02d:%02d"), (pos / 3600000), (pos / 60000) % 60, (pos / 1000) % 60);
- durstr.Format(_T("%02d:%02d:%02d"), (dur / 3600000), (dur / 60000) % 60, (dur / 1000) % 60);
+ REFERENCE_TIME pos = m_pMainFrame->GetPos();
+ REFERENCE_TIME dur = m_pMainFrame->GetDur();
title.Replace(_T("'"), _T("\\'"));
status.Replace(_T("'"), _T("\\'"));
- body.Format("OnStatus(\"%s\", \"%s\", %d, \"%s\", %d, \"%s\", %d, %d, \"%s\")", // , \"%s\"
+ body.Format("OnStatus(\"%s\", \"%s\", %ld, \"%s\", %ld, \"%s\", %d, %d, \"%s\")", // , \"%s\"
UTF8(title), UTF8(status),
- pos, UTF8(posstr), dur, UTF8(durstr),
+ std::lround(pos / 10000i64), UTF8(ReftimeToString2(pos)),
+ std::lround(dur / 10000i64), UTF8(ReftimeToString2(dur)),
m_pMainFrame->IsMuted(), m_pMainFrame->GetVolume(),
UTF8(file)/*, UTF8(dir)*/);
@@ -863,6 +800,12 @@ bool CWebClientSocket::OnError404(CStringA& hdr, CStringA& body, CStringA& mime)
bool CWebClientSocket::OnPlayer(CStringA& hdr, CStringA& body, CStringA& mime)
{
m_pWebServer->LoadPage(IDR_HTML_PLAYER, body, AToT(m_path));
+ if (AfxGetAppSettings().bWebUIEnablePreview) {
+ body.Replace("[preview]",
+ "<img src=\"snapshot.jpg\" id=\"snapshot\" alt=\"snapshot\" onload=\"onLoadSnapshot()\" onabort=\"onAbortErrorSnapshot()\" onerror=\"onAbortErrorSnapshot()\">");
+ } else {
+ body.Replace("[preview]", UTF8(StrRes(IDS_WEBUI_DISABLED_PREVIEW_MSG)));
+ }
return true;
}
@@ -870,11 +813,14 @@ bool CWebClientSocket::OnSnapshotJpeg(CStringA& hdr, CStringA& body, CStringA& m
{
// TODO: add quality control and return logo when nothing is loaded
- bool fRet = false;
+ bool bRet = false;
BYTE* pData = nullptr;
long size = 0;
- if (m_pMainFrame->GetDIB(&pData, size, true)) {
+ if (!AfxGetAppSettings().bWebUIEnablePreview) {
+ hdr = "HTTP/1.0 403 Forbidden\r\n";
+ bRet = true;
+ } else if (m_pMainFrame->GetDIB(&pData, size, true)) {
PBITMAPINFO bi = reinterpret_cast<PBITMAPINFO>(pData);
PBITMAPINFOHEADER bih = &bi->bmiHeader;
@@ -926,11 +872,11 @@ bool CWebClientSocket::OnSnapshotJpeg(CStringA& hdr, CStringA& body, CStringA& m
"Pragma: no-cache\r\n";
body = CStringA((char*)ba.GetData(), (int)ba.GetCount());
mime = "image/jpeg";
- fRet = true;
+ bRet = true;
}
}
- return fRet;
+ return bRet;
}
bool CWebClientSocket::OnViewRes(CStringA& hdr, CStringA& body, CStringA& mime)
@@ -953,23 +899,23 @@ bool CWebClientSocket::OnViewRes(CStringA& hdr, CStringA& body, CStringA& mime)
}
body = CStringA((const char*)res->data.GetData(), (int)res->data.GetCount());
- mime = CStringA(res->mime);
+ mime = res->mime;
return true;
}
-static CStringA GetChannelsJSON(const CAtlList<CDVBChannel>& channels)
+static CStringA GetChannelsJSON(const std::vector<CDVBChannel>& channels)
{
// begin the JSON object with the "channels" array inside
CStringA jsonChannels = "{ \"channels\" : [";
- POSITION channelPos = channels.GetHeadPosition();
- while (channelPos) {
+ for (auto it = channels.begin(); it != channels.end();) {
// fill the array with individual channel objects
- jsonChannels += channels.GetNext(channelPos).ToJSON();
- if (channelPos) {
- jsonChannels += ",";
+ jsonChannels += it->ToJSON();
+ if (++it == channels.end()) {
+ break;
}
+ jsonChannels += ",";
}
// terminate the array and the object, and return.
@@ -1018,3 +964,38 @@ bool CWebClientSocket::OnDVBSetChannel(CStringA& hdr, CStringA& body, CStringA&
}
return true;
}
+
+CString CWebClientSocket::GetSize() const
+{
+ CString sizeString;
+ LONGLONG size = 0;
+
+ if (CComQIPtr<IBaseFilter> pBF = m_pMainFrame->m_pFSF) {
+ BeginEnumPins(pBF, pEP, pPin) {
+ if (CComQIPtr<IAsyncReader> pAR = pPin) {
+ LONGLONG total, available;
+ if (SUCCEEDED(pAR->Length(&total, &available))) {
+ size = total;
+ break;
+ }
+ }
+ }
+ EndEnumPins;
+ }
+
+ if (size == 0) {
+ WIN32_FIND_DATA wfd;
+ HANDLE hFind = FindFirstFile(m_pMainFrame->m_wndPlaylistBar.GetCurFileName(), &wfd);
+ if (hFind != INVALID_HANDLE_VALUE) {
+ FindClose(hFind);
+ size = (LONGLONG(wfd.nFileSizeHigh) << 32) | wfd.nFileSizeLow;
+ }
+ }
+
+ const int MAX_FILE_SIZE_BUFFER = 65;
+ TCHAR szFileSize[MAX_FILE_SIZE_BUFFER];
+ StrFormatByteSizeW(size, szFileSize, MAX_FILE_SIZE_BUFFER);
+ sizeString.Format(L"%s", szFileSize);
+
+ return sizeString;
+}
diff --git a/src/mpc-hc/WebClientSocket.h b/src/mpc-hc/WebClientSocket.h
index d46fe50a2..eccd24be3 100644
--- a/src/mpc-hc/WebClientSocket.h
+++ b/src/mpc-hc/WebClientSocket.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2013 see Authors.txt
+ * (C) 2006-2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -79,4 +79,7 @@ public:
bool OnViewRes(CStringA& hdr, CStringA& body, CStringA& mime);
bool OnDVBChannels(CStringA& hdr, CStringA& body, CStringA& mime);
bool OnDVBSetChannel(CStringA& hdr, CStringA& body, CStringA& mime);
+
+private:
+ CString GetSize() const;
};
diff --git a/src/mpc-hc/WebServer.cpp b/src/mpc-hc/WebServer.cpp
index 0bdd1b48f..1e043984f 100644
--- a/src/mpc-hc/WebServer.cpp
+++ b/src/mpc-hc/WebServer.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -29,7 +29,7 @@
#include "WebClientSocket.h"
#include "WebServer.h"
#include "VersionInfo.h"
-#include "WinAPIUtils.h"
+#include "PathUtils.h"
CAtlStringMap<CWebServer::RequestHandler, CStringA> CWebServer::m_internalpages;
@@ -40,7 +40,7 @@ CWebServer::CWebServer(CMainFrame* pMainFrame, int nPort)
: m_pMainFrame(pMainFrame)
, m_nPort(nPort)
{
- m_webroot = CPath(GetProgramPath());
+ m_webroot = CPath(PathUtils::GetProgramPath());
const CAppSettings& s = AfxGetAppSettings();
CString WebRoot = s.strWebRoot;
@@ -147,7 +147,7 @@ void CWebServer::Init()
ULONG len2 = _countof(ext);
if (ERROR_SUCCESS == mime.Open(HKEY_CLASSES_ROOT, str + _T("\\") + buff, KEY_READ)
&& ERROR_SUCCESS == mime.QueryStringValue(_T("Extension"), ext, &len2)) {
- m_mimes[CStringA(CString(ext).MakeLower())] = CStringA(CString(buff).MakeLower());
+ m_mimes[CStringA(ext).MakeLower()] = CStringA(buff).MakeLower();
}
}
}
@@ -257,7 +257,7 @@ bool CWebServer::ToLocalPath(CString& path, CString& redir)
p = p2;
redir = path;
if (redir.GetAt(redir.GetLength() - 1) != '/') {
- redir += '/';
+ redir += _T('/');
}
redir += str;
break;
@@ -656,7 +656,7 @@ bool CWebServer::CallCGI(CWebClientSocket* pClient, CStringA& hdr, CStringA& bod
}
TCHAR* cmdln = DEBUG_NEW TCHAR[32768];
- _sntprintf_s(cmdln, 32768, 32768, _T("\"%s\" \"%s\""), cgi, path);
+ _sntprintf_s(cmdln, 32768, 32768, _T("\"%s\" \"%s\""), cgi.GetString(), path.GetString());
if (hChildStdinRd && hChildStdoutWr)
if (CreateProcess(
@@ -664,14 +664,14 @@ bool CWebServer::CallCGI(CWebClientSocket* pClient, CStringA& hdr, CStringA& bod
envstr.GetLength() ? (LPVOID)(LPCSTR)envstr : nullptr,
dir, &siStartInfo, &piProcInfo)) {
DWORD ThreadId;
- CreateThread(nullptr, 0, KillCGI, (LPVOID)piProcInfo.hProcess, 0, &ThreadId);
+ VERIFY(CreateThread(nullptr, 0, KillCGI, (LPVOID)piProcInfo.hProcess, 0, &ThreadId));
static const int BUFFSIZE = 1024;
DWORD dwRead, dwWritten = 0;
int i = 0, len = pClient->m_data.GetLength();
for (; i < len; i += dwWritten) {
- if (!WriteFile(hChildStdinWrDup, (LPCSTR)pClient->m_data + i, min(len - i, BUFFSIZE), &dwWritten, nullptr)) {
+ if (!WriteFile(hChildStdinWrDup, (LPCSTR)pClient->m_data + i, std::min(len - i, BUFFSIZE), &dwWritten, nullptr)) {
break;
}
}
@@ -699,7 +699,7 @@ bool CWebServer::CallCGI(CWebClientSocket* pClient, CStringA& hdr, CStringA& bod
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);
} else {
- body = _T("CGI Error");
+ body = "CGI Error";
}
delete [] cmdln;
diff --git a/src/mpc-hc/WinHotkeyCtrl.cpp b/src/mpc-hc/WinHotkeyCtrl.cpp
index 01afe09f4..c3d033b15 100644
--- a/src/mpc-hc/WinHotkeyCtrl.cpp
+++ b/src/mpc-hc/WinHotkeyCtrl.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2011-2013 see Authors.txt
+ * (C) 2011-2014 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -34,9 +34,9 @@ CWinHotkeyCtrl* CWinHotkeyCtrl::sm_pwhcFocus = nullptr;
IMPLEMENT_DYNAMIC(CWinHotkeyCtrl, CEdit)
CWinHotkeyCtrl::CWinHotkeyCtrl()
: m_vkCode(0)
+ , m_vkCode_def(0)
, m_fModSet(0)
, m_fModRel(0)
- , m_vkCode_def(0)
, m_fModSet_def(0)
, m_fIsPressed(FALSE)
{
diff --git a/src/mpc-hc/mpc-hc.rc b/src/mpc-hc/mpc-hc.rc
index 2df07027d..587869c08 100644
--- a/src/mpc-hc/mpc-hc.rc
+++ b/src/mpc-hc/mpc-hc.rc
@@ -134,12 +134,12 @@ BEGIN
EDITTEXT IDC_EDIT2,124,77,46,13,ES_AUTOHSCROLL,WS_EX_RIGHT
CONTROL "",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,158,77,12,13
CONTROL "Enable custom channel mapping",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,93,286,8
- LTEXT "Speaker configuration for ",IDC_STATIC1,5,107,115,8
+ LTEXT "Speaker configuration for",IDC_STATIC1,5,107,115,8
EDITTEXT IDC_EDIT1,124,105,29,13,ES_CENTER | ES_AUTOHSCROLL
CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,141,105,12,13
LTEXT "input channels:",IDC_STATIC2,157,107,134,8
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_OWNERDRAWFIXED | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,5,121,286,103
- CTEXT "Hold shift for immediate changes when clicking something ",IDC_STATIC3,5,228,286,8
+ CTEXT "Hold shift for immediate changes when clicking something",IDC_STATIC3,5,228,286,8
END
IDD_GOTO_DLG DIALOGEX 0, 0, 186, 120
@@ -182,7 +182,7 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
ICON "",IDR_MAINFRAME,14,10,48,48
LTEXT "",IDC_STATIC1,60,8,200,8
- CONTROL "Copyright 2002-2014 see Authors.txt",IDC_AUTHORS_LINK,
+ CONTROL "Copyright 2002-2017 see Authors.txt",IDC_AUTHORS_LINK,
"SysLink",WS_TABSTOP,60,20,200,8
CONTROL "",IDC_HOMEPAGE_LINK,"SysLink",WS_TABSTOP,60,32,200,8
LTEXT "This program is freeware and released under the GNU General Public License.",IDC_STATIC,7,46,246,18
@@ -293,33 +293,34 @@ BEGIN
RTEXT "L",IDC_STATIC,145,31,30,8
CONTROL "",IDC_SLIDER2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_TOOLTIPS | WS_TABSTOP | 0x400,175,23,85,24
LTEXT "R",IDC_STATIC,261,31,27,8
- GROUPBOX "Playback",IDC_STATIC,5,104,126,36
- CONTROL "Play",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,117,55,8
- CONTROL "Repeat forever",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,129,116,8
+ GROUPBOX "Playback",IDC_STATIC,5,104,126,54
+ CONTROL "Play",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,10,117,55,8
+ CONTROL "Repeat forever",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,10,129,116,8
EDITTEXT IDC_EDIT1,65,115,20,13,ES_AUTOHSCROLL | ES_NUMBER
LTEXT "time(s)",IDC_STATIC1,90,117,40,8
- GROUPBOX "After Playback",IDC_STATIC,5,143,126,27
- COMBOBOX IDC_COMBO2,10,153,116,47,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "Output",IDC_STATIC,137,55,154,46
+ LTEXT "Repeat mode:",IDC_STATIC,10,143,48,8
+ COMBOBOX IDC_COMBO3,65,141,60,47,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_EDIT2,190,115,94,13,ES_AUTOHSCROLL
+ GROUPBOX "After Playback",IDC_STATIC,5,160,126,27
+ COMBOBOX IDC_COMBO2,10,170,116,47,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "Default zoom",IDC_STATIC,137,55,154,46
CONTROL "Auto-zoom:",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,67,75,8
COMBOBOX IDC_COMBO1,219,65,65,47,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Auto fit factor:",IDC_STATIC2,142,84,94,8
EDITTEXT IDC_EDIT4,238,81,35,14,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,273,81,11,14
LTEXT "%",IDC_STATIC3,277,84,8,8
- GROUPBOX "Default track preference",IDC_STATIC,137,104,154,66
+ GROUPBOX "Default track preference",IDC_STATIC,137,104,154,83
LTEXT "Subtitles:",IDC_STATIC,142,117,44,8
- EDITTEXT IDC_EDIT2,190,115,94,13,ES_AUTOHSCROLL
LTEXT "Audio:",IDC_STATIC,142,134,44,8
EDITTEXT IDC_EDIT3,190,132,94,13,ES_AUTOHSCROLL
CONTROL "Allow overriding external splitter choice",IDC_CHECK4,
"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,142,150,142,18
- GROUPBOX "Open settings",IDC_STATIC,5,173,286,63
+ GROUPBOX "Open settings",IDC_STATIC,5,190,286,46
CONTROL "Use worker thread to construct the filter graph",IDC_CHECK7,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,185,276,8
- CONTROL "Report pins which fail to render",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,197,276,8
- CONTROL "Auto-load audio files",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,209,276,8
- CONTROL "Use the built-in subtitle renderer",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,221,276,8
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,200,276,8
+ CONTROL "Report pins which fail to render",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,212,276,8
+ CONTROL "Auto-load audio files",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,224,276,8
GROUPBOX "Control",IDC_STATIC,5,55,126,46
LTEXT "Volume step:",IDC_STATIC,11,67,68,8
EDITTEXT IDC_VOLUMESTEP,81,64,35,14,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER
@@ -370,7 +371,7 @@ BEGIN
CONTROL "Apply aspect ratio compensation for anamorphic videos",IDC_CHECK_SUB_AR_COMPENSATION,
"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,10,148,277,8
GROUPBOX "Warning",IDC_STATIC,5,165,286,43
- LTEXT "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu.",IDC_STATIC,10,176,267,27
+ LTEXT "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU.",IDC_STATIC,10,176,267,27
END
IDD_PPAGEFORMATS DIALOGEX 0, 0, 296, 241
@@ -421,10 +422,11 @@ BEGIN
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,78,286,8
CONTROL "Prevent minimizing the player when in fullscreen on a non default monitor",IDC_CHECK6,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,90,290,8
- CONTROL "Use Windows 7 Taskbar features",IDC_CHECK_WIN7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,102,286,8
- CONTROL "Open next/previous file in folder on ""Skip back/forward"" when there is only one item in playlist",IDC_CHECK7,
+ CONTROL "Use enhanced taskbar features",IDC_CHECK_ENHANCED_TASKBAR,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,102,286,8
+ CONTROL "Open previous/next file in folder on ""Skip back/forward"" when there is only one item in playlist",IDC_CHECK7,
"Button",BS_AUTOCHECKBOX | BS_VCENTER | BS_MULTILINE | WS_TABSTOP,5,125,290,18
- CONTROL "Use time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,149,135,8
+ CONTROL "Show time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,149,135,8
COMBOBOX IDC_COMBO3,145,147,113,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "OSD font:",IDC_STATIC,5,167,82,8
COMBOBOX IDC_COMBO1,89,165,140,64,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
@@ -439,7 +441,7 @@ IDD_PPAGEEXTERNALFILTERS DIALOGEX 0, 0, 296, 241
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- LISTBOX IDC_LIST1,5,5,208,128,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_VSCROLL | WS_TABSTOP
+ CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,5,5,208,128
PUSHBUTTON "Add Filter...",IDC_BUTTON1,221,5,70,14
PUSHBUTTON "Remove",IDC_BUTTON2,221,21,70,14
CONTROL "Prefer",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,221,39,70,8
@@ -462,7 +464,7 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
ICON "",IDC_DEFAULTICON,5,5,21,20,SS_REALSIZEIMAGE
EDITTEXT IDC_EDIT1,32,13,186,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,10,30,211,1
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,10,30,212,1
LTEXT "Type:",IDC_STATIC,10,36,60,8
EDITTEXT IDC_EDIT4,72,36,151,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
LTEXT "Size:",IDC_STATIC,10,51,60,8
@@ -732,9 +734,9 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "If you would like to use the stand-alone versions of these filters or another replacement, disable them here.",IDC_STATIC,5,5,285,18
GROUPBOX "Source Filters",IDC_STATIC,5,24,141,186
- LISTBOX IDC_LIST1,10,36,131,168,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
+ CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,10,36,131,168
GROUPBOX "Transform Filters",IDC_STATIC,150,24,141,186
- LISTBOX IDC_LIST2,155,36,131,168,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
+ CONTROL "",IDC_LIST2,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,155,36,131,168
GROUPBOX "Internal LAV Filters settings",IDC_STATIC,5,212,286,28
PUSHBUTTON "Splitter",IDC_SPLITTER_CONF,10,222,86,14
PUSHBUTTON "Video decoder",IDC_VIDEO_DEC_CONF,105,222,86,14
@@ -754,52 +756,54 @@ BEGIN
PUSHBUTTON "Browse...",IDC_BUTTON2,241,222,50,14
END
-IDD_PPAGEOUTPUT DIALOGEX 0, 0, 296, 236
+IDD_PPAGEOUTPUT DIALOGEX 0, 0, 296, 250
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "DirectShow Video",IDC_STATIC,5,5,285,43
COMBOBOX IDC_VIDRND_COMBO,10,16,276,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "RealMedia Video",IDC_STATIC,5,52,139,40
- COMBOBOX IDC_RMRND_COMBO,10,62,131,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "QuickTime Video",IDC_STATIC,151,52,139,40
- COMBOBOX IDC_QTRND_COMBO,155,62,131,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "Audio Renderer",IDC_STATIC,5,96,285,30
- COMBOBOX IDC_AUDRND_COMBO,10,108,276,46,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "VMR-7/VMR-9 (renderless) and EVR (CP) settings",IDC_STATIC,5,131,285,91
- RTEXT "Surface:",IDC_STATIC,118,164,60,8
- COMBOBOX IDC_DX_SURFACE,181,161,105,49,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- RTEXT "Resizer:",IDC_STATIC,118,180,60,8
- COMBOBOX IDC_DX9RESIZER_COMBO,181,179,105,49,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- CONTROL "Select D3D9 Render Device",IDC_D3D9DEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,144,137,10
- COMBOBOX IDC_D3D9DEVICE_COMBO,147,143,139,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "RealMedia Video",IDC_STATIC,5,49,139,40
+ COMBOBOX IDC_RMRND_COMBO,10,59,131,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "QuickTime Video",IDC_STATIC,151,49,139,40
+ COMBOBOX IDC_QTRND_COMBO,155,59,131,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "Audio Renderer",IDC_STATIC,5,90,285,30
+ COMBOBOX IDC_AUDRND_COMBO,10,102,276,46,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "VMR-9 (renderless) and EVR (CP) settings",IDC_STATIC,5,153,285,93
+ RTEXT "Surface:",IDC_STATIC,118,184,60,8
+ COMBOBOX IDC_DX_SURFACE,181,181,105,49,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Resizer:",IDC_STATIC,118,200,60,8
+ COMBOBOX IDC_DX9RESIZER_COMBO,181,197,105,49,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Select D3D9 Render Device",IDC_D3D9DEVICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,166,137,10
+ COMBOBOX IDC_D3D9DEVICE_COMBO,147,165,139,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Reinitialize when changing display",IDC_RESETDEVICE,
- "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,10,204,171,10
- CONTROL "D3D Fullscreen",IDC_FULLSCREEN_MONITOR_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,192,171,10
- CONTROL "Alternative VSync",IDC_DSVMR9ALTERNATIVEVSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,180,108,10
- CONTROL "VMR-9 Mixer Mode",IDC_DSVMR9LOADMIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,156,108,10
- CONTROL "YUV Mixing",IDC_DSVMR9YUVMIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,168,108,10
- RTEXT "EVR Buffers:",IDC_EVR_BUFFERS_TXT,168,199,81,8
- COMBOBOX IDC_EVR_BUFFERS,252,196,34,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,10,221,171,10
+ CONTROL "D3D Fullscreen",IDC_FULLSCREEN_MONITOR_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,210,171,10
+ CONTROL "Alternative VSync",IDC_DSVMR9ALTERNATIVEVSYNC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,199,108,10
+ CONTROL "VMR-9 Mixer Mode",IDC_DSVMR9LOADMIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,177,108,10
+ CONTROL "YUV Mixing",IDC_DSVMR9YUVMIXER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,188,108,10
+ RTEXT "EVR Buffers:",IDC_EVR_BUFFERS_TXT,168,216,81,8
+ COMBOBOX IDC_EVR_BUFFERS,252,213,34,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "DXVA",IDC_STATIC,24,34,30,8
- ICON "",IDC_VIDRND_DXVA_SUPPORT,10,33,21,20
- LTEXT "Subtitles *",IDC_STATIC,69,34,45,8
- ICON "",IDC_VIDRND_SUBTITLE_SUPPORT,54,33,21,20
+ ICON "",IDC_VIDRND_DXVA_SUPPORT,10,33,20,20
+ LTEXT "Subtitles",IDC_STATIC,69,34,45,8
+ ICON "",IDC_VIDRND_SUBTITLE_SUPPORT,54,33,20,20
LTEXT "Screenshot",IDC_STATIC,129,34,45,8
- ICON "",IDC_VIDRND_SAVEIMAGE_SUPPORT,114,33,21,20
+ ICON "",IDC_VIDRND_SAVEIMAGE_SUPPORT,114,33,20,20
LTEXT "Shaders",IDC_STATIC,189,34,35,8
- ICON "",IDC_VIDRND_SHADER_SUPPORT,174,33,21,20
+ ICON "",IDC_VIDRND_SHADER_SUPPORT,174,33,20,20
LTEXT "Rotation",IDC_STATIC,240,34,45,8
- ICON "",IDC_VIDRND_ROTATION_SUPPORT,225,33,21,20
- LTEXT "Subtitles *",IDC_STATIC,24,79,50,8
- ICON "",IDC_RMRND_SUBTITLE_SUPPORT,10,78,21,20
- LTEXT "Screenshot",IDC_STATIC,88,79,50,8
- ICON "",IDC_RMRND_SAVEIMAGE_SUPPORT,74,78,21,20
- LTEXT "Subtitles *",IDC_STATIC,170,79,50,8
- ICON "",IDC_QTRND_SUBTITLE_SUPPORT,155,78,21,20
- LTEXT "Screenshot",IDC_STATIC,235,79,50,8
- ICON "",IDC_QTRND_SAVEIMAGE_SUPPORT,221,78,21,20
- LTEXT "* External filters (such as VSFilter) can display subtitles on all renderers.",IDC_STATIC,10,224,276,16
+ ICON "",IDC_VIDRND_ROTATION_SUPPORT,225,33,20,20
+ LTEXT "Subtitles",IDC_STATIC,24,76,50,8
+ ICON "",IDC_RMRND_SUBTITLE_SUPPORT,10,75,20,20
+ LTEXT "Screenshot",IDC_STATIC,88,76,50,8
+ ICON "",IDC_RMRND_SAVEIMAGE_SUPPORT,74,75,20,20
+ LTEXT "Subtitles",IDC_STATIC,170,76,50,8
+ ICON "",IDC_QTRND_SUBTITLE_SUPPORT,155,75,20,20
+ LTEXT "Screenshot",IDC_STATIC,235,76,50,8
+ ICON "",IDC_QTRND_SAVEIMAGE_SUPPORT,221,75,20,20
+ GROUPBOX "Subtitle Renderer",IDC_STATIC,5,121,285,30
+ COMBOBOX IDC_COMBO1,10,133,276,46,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Cache compiled Shaders",IDC_CACHESHADERS,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,10,232,171,10
END
IDD_PPAGEWEBSERVER DIALOGEX 0, 0, 296, 241
@@ -812,26 +816,45 @@ BEGIN
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,5,22,284,1
CONTROL "Enable compression",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,26,285,8
CONTROL "Allow access from localhost only",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,38,285,8
- CONTROL "Print debug information",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,50,285,8
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,5,62,284,1
- CONTROL "Serve pages from:",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,66,285,8
- EDITTEXT IDC_EDIT2,15,78,167,14,ES_AUTOHSCROLL
- PUSHBUTTON "Browse...",IDC_BUTTON1,186,78,50,14
- PUSHBUTTON "Deploy...",IDC_BUTTON2,240,78,50,14
- LTEXT "Default page:",IDC_STATIC,5,96,285,8
- EDITTEXT IDC_EDIT9,15,108,275,14,ES_AUTOHSCROLL
- LTEXT "CGI handlers: (.ext1=path1;.ext2=path2;...)",IDC_STATIC,5,126,285,8
- EDITTEXT IDC_EDIT3,15,138,275,14,ES_AUTOHSCROLL
+ CONTROL "Enable preview",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,50,285,8
+ CONTROL "Print debug information",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,62,284,8
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,5,74,284,1
+ CONTROL "Serve pages from:",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,78,285,8
+ EDITTEXT IDC_EDIT2,15,90,167,14,ES_AUTOHSCROLL
+ PUSHBUTTON "Browse...",IDC_BUTTON1,186,90,50,14
+ PUSHBUTTON "Deploy...",IDC_BUTTON2,240,90,50,14
+ LTEXT "Default page:",IDC_STATIC,5,108,285,8
+ EDITTEXT IDC_EDIT9,15,120,275,14,ES_AUTOHSCROLL
+ LTEXT "CGI handlers: (.ext1=path1;.ext2=path2;...)",IDC_STATIC,5,138,285,8
+ EDITTEXT IDC_EDIT3,15,150,275,14,ES_AUTOHSCROLL
END
IDD_SUBTITLEDL_DLG DIALOGEX 0, 0, 500, 200
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Subtitles available online"
+CAPTION "Download subtitles"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- DEFPUSHBUTTON "Download && Open",IDOK,397,166,98,14
- CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,5,5,490,157
- CONTROL "Replace currently loaded subtitles",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,169,200,8
+ CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,5,5,490,157
+ CONTROL "Replace currently loaded subtitles",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,169,290,8
+ DEFPUSHBUTTON "Download",IDOK,341,166,50,14
+ PUSHBUTTON "Refresh",IDC_BUTTON1,393,166,50,14
+ PUSHBUTTON "Abort",IDC_BUTTON2,393,166,50,14
+ PUSHBUTTON "Options",IDC_BUTTON3,445,166,50,14
+ CONTROL "",IDC_STATUSBAR,"msctls_statusbar32",0x103,0,184,499,16
+ CONTROL "",IDC_PROGRESS1,"msctls_progress32",PBS_SMOOTH,213,166,82,14
+END
+
+IDD_SUBTITLEUP_DLG DIALOGEX 0, 0, 500, 200
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Upload subtitles"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,5,5,490,157
+ DEFPUSHBUTTON "Upload",IDOK,341,166,50,14
+ PUSHBUTTON "Abort",IDC_BUTTON1,393,166,50,14,WS_DISABLED
+ PUSHBUTTON "Options",IDC_BUTTON2,445,166,50,14
+ CONTROL "",IDC_STATUSBAR,"msctls_statusbar32",0x103,0,184,499,16
+ CONTROL "",IDC_PROGRESS1,"msctls_progress32",PBS_SMOOTH,213,166,82,14
END
IDD_FILEPROPRES DIALOGEX 0, 0, 234, 202
@@ -839,10 +862,10 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
ICON "",IDC_DEFAULTICON,5,5,21,20,SS_REALSIZEIMAGE
- EDITTEXT IDC_EDIT1,30,12,199,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,5,29,222,1
+ EDITTEXT IDC_EDIT1,32,13,186,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,10,30,212,1
+ CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,5,35,221,144
PUSHBUTTON "Save As...",IDC_BUTTON1,5,183,64,14
- CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,5,33,224,146
END
IDD_PPAGEMISC DIALOGEX 0, 0, 296, 241
@@ -865,7 +888,7 @@ BEGIN
PUSHBUTTON "Reset",IDC_RESET,231,80,50,14
GROUPBOX "Update check",IDC_STATIC,5,106,286,40
CONTROL "Enable automatic update check",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,118,250,8
- LTEXT "Delay between each check:",IDC_STATIC5,10,131,110,8
+ LTEXT "Check every:",IDC_STATIC5,10,131,110,8
EDITTEXT IDC_EDIT1,120,129,30,13,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,150,129,13,14
LTEXT "day(s)",IDC_STATIC6,155,131,50,8
@@ -923,10 +946,10 @@ BEGIN
LTEXT "Receiver",IDC_STATIC6,10,140,74,8
COMBOBOX IDC_COMBO3,84,138,202,30,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
LTEXT "Channel switching approach:",IDC_PPAGECAPTURE_ST10,10,158,260,8
- LTEXT "Rebuild filter graph",IDC_PPAGECAPTURE_ST11,10,172,74,8
+ LTEXT "Rebuild filter graph",IDC_PPAGECAPTURE_ST11,10,172,74,16
EDITTEXT IDC_PPAGECAPTURE_DESC1,84,184,202,20,ES_MULTILINE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
COMBOBOX IDC_COMBO6,84,170,201,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- LTEXT "Stop filter graph",IDC_PPAGECAPTURE_ST12,10,206,74,8
+ LTEXT "Stop filter graph",IDC_PPAGECAPTURE_ST12,10,206,74,16
COMBOBOX IDC_COMBO7,84,204,201,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
@@ -946,13 +969,13 @@ BEGIN
LTEXT "columns",IDC_STATIC4,231,60,30,8
CONTROL "Present at nearest VSync",IDC_SYNCNEAREST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,75,280,8
GROUPBOX "",IDC_STATIC,5,91,286,43
- LTEXT "Target sync offset:",IDC_STATIC5,10,105,100,8
- EDITTEXT IDC_TARGETSYNCOFFSET,114,103,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT
- LTEXT "ms",IDC_STATIC6,158,105,24,8
- LTEXT "Control limits:",IDC_STATIC7,10,119,86,8
- LTEXT "+/-",IDC_STATIC8,100,119,10,8
- EDITTEXT IDC_CONTROLLIMIT,114,117,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT
- LTEXT "ms",IDC_STATIC9,158,119,24,8
+ LTEXT "Target sync offset:",IDC_STATIC5,10,105,120,8
+ EDITTEXT IDC_TARGETSYNCOFFSET,134,103,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT
+ LTEXT "ms",IDC_STATIC6,178,105,24,8
+ LTEXT "Control limits:",IDC_STATIC7,10,119,110,8
+ LTEXT "+/-",IDC_STATIC8,120,119,10,8
+ EDITTEXT IDC_CONTROLLIMIT,134,117,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT
+ LTEXT "ms",IDC_STATIC9,178,119,24,8
LTEXT "Changes take effect after the playback has been closed and restarted.",IDC_STATIC10,10,138,276,18
END
@@ -963,8 +986,8 @@ BEGIN
CONTROL "Launch files in fullscreen",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,26,280,8
GROUPBOX "",IDC_STATIC,4,51,288,36
CONTROL "Hide controls in fullscreen",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,51,280,8
- LTEXT "ms",IDC_STATIC1,266,63,23,8
- COMBOBOX IDC_COMBO2,8,61,224,12,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ LTEXT "ms",IDC_STATIC1,276,63,15,8
+ COMBOBOX IDC_COMBO2,8,61,233,12,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
CONTROL "Hide docked panels",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,76,280,8
CONTROL "Exit fullscreen at the end of playback",IDC_CHECK5,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,37,280,8
@@ -973,20 +996,20 @@ BEGIN
GROUPBOX "",IDC_STATIC,4,90,288,148
CONTROL "Use autochange fullscreen monitor mode",IDC_CHECK2,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,90,280,8
- CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,8,101,224,112
- PUSHBUTTON "Add",IDC_BUTTON1,235,101,53,16
- PUSHBUTTON "Del",IDC_BUTTON2,235,119,53,16
- PUSHBUTTON "Up",IDC_BUTTON3,235,143,53,16
- PUSHBUTTON "Down",IDC_BUTTON4,235,161,53,16
- EDITTEXT IDC_EDIT1,235,61,28,12,ES_AUTOHSCROLL | ES_NUMBER
+ CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,8,101,233,112
+ PUSHBUTTON "Add",IDC_BUTTON1,244,101,45,16
+ PUSHBUTTON "Del",IDC_BUTTON2,244,119,45,16
+ PUSHBUTTON "Up",IDC_BUTTON3,244,143,45,16
+ PUSHBUTTON "Down",IDC_BUTTON4,244,161,45,16
+ EDITTEXT IDC_EDIT1,244,61,28,13,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "Apply default monitor mode on fullscreen exit",IDC_CHECK3,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,216,271,8
CONTROL "Restore resolution on program exit",IDC_RESTORERESCHECK,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,227,271,8
- GROUPBOX "Delay",IDC_STATIC,235,187,53,25
- EDITTEXT IDC_EDIT2,240,197,24,12,ES_AUTOHSCROLL | ES_NUMBER
+ GROUPBOX "Delay",IDC_STATIC,244,187,45,25
+ EDITTEXT IDC_EDIT2,249,197,24,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_HOTTRACK,267,180,10,8
- LTEXT "s",IDC_STATIC2,267,199,19,8
+ LTEXT "s",IDC_STATIC2,276,199,12,8
END
IDD_NAVIGATION_DLG DIALOGEX 0, 0, 93, 60
@@ -1008,14 +1031,21 @@ BEGIN
CONTROL "Prefer external subtitles over embedded subtitles",IDC_CHECK2,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,17,285,8
CONTROL "Ignore embedded subtitles",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,29,285,8
- GROUPBOX "Autoload paths",IDC_STATIC,5,41,287,31
- EDITTEXT IDC_EDIT1,10,53,224,14,ES_AUTOHSCROLL
- PUSHBUTTON "Reset",IDC_BUTTON1,237,53,50,14
- GROUPBOX "Online database",IDC_STATIC,6,78,286,45
- LTEXT "Base URL of the online subtitle database:",IDC_STATIC,10,89,222,8
- LTEXT "http://",IDC_STATIC,10,103,22,8
- COMBOBOX IDC_COMBO1,35,101,199,30,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "Test",IDC_BUTTON2,237,100,50,14
+ GROUPBOX "Autoload paths",IDC_STATIC,5,41,285,32
+ EDITTEXT IDC_EDIT1,12,53,220,14,ES_AUTOHSCROLL
+ PUSHBUTTON "Reset",IDC_BUTTON1,234,53,50,14
+ GROUPBOX "Online search, download and upload subtitles",IDC_STATIC,6,76,285,160
+ CONTROL "Automatically search and download subtitles if none are found locally",IDC_CHECK4,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,90,270,8
+ CONTROL "Prefer subtitles for hearing impaired (when indicated by subtitles provider)",IDC_CHECK5,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,102,255,8
+ LTEXT "Ignore files containing any of the following word(s):",IDC_STATIC1,22,117,170,8
+ EDITTEXT IDC_EDIT2,194,114,90,14,ES_AUTOHSCROLL
+ LTEXT "Languages in order of preference:",IDC_STATIC,12,133,180,8
+ EDITTEXT IDC_EDIT3,194,130,90,14,ES_AUTOHSCROLL
+ CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,12,146,272,73
+ CONTROL "Automatically upload active subtitles at the end of video playback",IDC_CHECK6,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,222,270,8
END
IDD_UPDATE_DIALOG DIALOGEX 0, 0, 300, 60
@@ -1078,11 +1108,36 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Advanced Settings, do not edit unless you know what you are doing.",IDC_STATIC,10,4,276,16
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,10,22,276,192
- EDITTEXT IDC_EDIT1,10,218,217,13,ES_AUTOHSCROLL
- COMBOBOX IDC_COMBO1,10,218,217,13,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- CONTROL "True",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,55,218,31,13
- CONTROL "False",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,129,218,33,13
- PUSHBUTTON "Default",IDC_BUTTON1,232,218,54,13
+ EDITTEXT IDC_EDIT1,10,218,217,14,ES_AUTOHSCROLL
+ CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,217,218,11,14
+ COMBOBOX IDC_COMBO1,10,218,217,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "True",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,55,218,31,14
+ CONTROL "False",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,129,218,33,14
+ PUSHBUTTON "Default",IDC_BUTTON1,232,218,54,14
+END
+
+IDD_PPAGEAUDIORENDERER DIALOGEX 0, 0, 296, 241
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ GROUPBOX "Device",IDC_STATIC,7,7,282,54
+ COMBOBOX IDC_COMBO1,20,20,262,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Exclusive mode",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,40,41,105,10
+ CONTROL "Allow bitstreaming",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,41,125,10
+ GROUPBOX "Options",IDC_STATIC,7,67,282,69
+ GROUPBOX "",IDC_STATIC,13,76,269,52
+ CONTROL "Enable stereo crossfeed (for headphones)",IDC_CHECK3,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,86,260,10
+ PUSHBUTTON "C. Moy",IDC_BUTTON1,20,103,54,14
+ PUSHBUTTON "J. Meier",IDC_BUTTON2,79,103,56,14
+ LTEXT "Cut-off:",IDC_STATIC1,157,97,47,8,0,WS_EX_RIGHT
+ CONTROL "",IDC_SLIDER1,"msctls_trackbar32",TBS_NOTICKS | WS_TABSTOP,208,96,42,12
+ LTEXT "",IDC_STATIC2,250,97,30,8
+ LTEXT "Level:",IDC_STATIC3,157,113,47,8,0,WS_EX_RIGHT
+ CONTROL "",IDC_SLIDER2,"msctls_trackbar32",TBS_NOTICKS | WS_TABSTOP,208,111,42,12
+ LTEXT "",IDC_STATIC4,250,113,30,8
+ GROUPBOX "Note",IDC_STATIC,7,141,282,48
+ LTEXT "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content.",IDC_STATIC,20,152,262,33
END
IDD_SAVEIMAGEDIALOGTEMPL DIALOGEX 0, 0, 304, 20
@@ -1104,6 +1159,25 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,252,156,50,14
END
+IDD_CRASH_REPORTER DIALOGEX 0, 0, 300, 240
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_TOPMOST
+CAPTION "Crash reporter"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "We are sorry, it seems MPC-HC just crashed. :(",IDC_STATIC,5,5,290,8
+ CONTROL "Send a bug report to help us diagnose and fix the problem.",IDC_CHECK1,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,19,290,8
+ GROUPBOX "Optional information",IDC_STATIC1,5,33,290,182
+ LTEXT "Email:",IDC_STATIC2,10,45,280,8
+ EDITTEXT IDC_EDIT1,10,57,280,13,ES_AUTOHSCROLL
+ LTEXT "Your email address is optional and will only be used if the developers need to contact you for more information.",IDC_STATIC3,10,71,280,16
+ LTEXT "Problem description (use English only):",IDC_STATIC4,10,93,280,8
+ EDITTEXT IDC_EDIT2,10,105,280,104,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL
+ DEFPUSHBUTTON "Restart MPC-HC",IDC_BUTTON1,45,220,120,14
+ PUSHBUTTON "Quit MPC-HC",IDC_BUTTON2,175,220,120,14
+END
+
/////////////////////////////////////////////////////////////////////////////
//
@@ -1235,6 +1309,14 @@ BEGIN
BEGIN
END
+ IDD_SUBTITLEDL_DLG, DIALOG
+ BEGIN
+ END
+
+ IDD_SUBTITLEUP_DLG, DIALOG
+ BEGIN
+ END
+
IDD_PPAGEMISC, DIALOG
BEGIN
VERTGUIDE, 10
@@ -1254,7 +1336,7 @@ BEGIN
IDD_PPAGEFULLSCREEN, DIALOG
BEGIN
- VERTGUIDE, 235
+ VERTGUIDE, 244
VERTGUIDE, 288
HORZGUIDE, 204
END
@@ -1271,6 +1353,24 @@ BEGIN
HORZGUIDE, 231
END
+ IDD_PPAGEAUDIORENDERER, DIALOG
+ BEGIN
+ VERTGUIDE, 7
+ VERTGUIDE, 13
+ VERTGUIDE, 20
+ VERTGUIDE, 154
+ VERTGUIDE, 157
+ VERTGUIDE, 204
+ VERTGUIDE, 208
+ VERTGUIDE, 250
+ VERTGUIDE, 280
+ VERTGUIDE, 282
+ VERTGUIDE, 289
+ HORZGUIDE, 46
+ HORZGUIDE, 67
+ HORZGUIDE, 136
+ END
+
IDD_CMD_LINE_HELP, DIALOG
BEGIN
LEFTMARGIN, 7
@@ -1278,6 +1378,11 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 170
END
+
+ IDD_CRASH_REPORTER, DIALOG
+ BEGIN
+ BOTTOMMARGIN, 200
+ END
END
#endif // APSTUDIO_INVOKED
@@ -1289,6 +1394,7 @@ END
IDB_PLAYERTOOLBAR BITMAP "res\\toolbar.bmp"
+
/////////////////////////////////////////////////////////////////////////////
//
// Toolbar
@@ -1309,7 +1415,7 @@ BEGIN
BUTTON ID_BUTTONSEP
BUTTON ID_DUMMYSEPARATOR
BUTTON ID_VOLUME_MUTE
- BUTTON ID_VOLUME_MUTE_ON
+ BUTTON ID_VOLUME_MUTE_OFF
BUTTON ID_VOLUME_MUTE_DISABLED
END
@@ -1337,13 +1443,13 @@ BEGIN
MENUITEM "Save &Image...", ID_FILE_SAVE_IMAGE
MENUITEM "Save &Thumbnails...", ID_FILE_SAVE_THUMBNAILS
MENUITEM SEPARATOR
- MENUITEM "&Load Subtitle...", ID_FILE_LOAD_SUBTITLE
- MENUITEM "Save S&ubtitle...", ID_FILE_SAVE_SUBTITLE
- POPUP "Subtitle Data&base"
+ POPUP "S&ubtitles"
BEGIN
- MENUITEM "&Search...", ID_FILE_ISDB_SEARCH
- MENUITEM "&Upload...", ID_FILE_ISDB_UPLOAD
- MENUITEM "&Download...", ID_FILE_ISDB_DOWNLOAD
+ MENUITEM "&Load Subtitles...", ID_FILE_SUBTITLES_LOAD
+ MENUITEM "Save S&ubtitles...", ID_FILE_SUBTITLES_SAVE
+ MENUITEM SEPARATOR
+ MENUITEM "&Download Subtitles...", ID_FILE_SUBTITLES_DOWNLOAD
+ MENUITEM "&Upload Subtitles...", ID_FILE_SUBTITLES_UPLOAD
END
MENUITEM SEPARATOR
MENUITEM "P&roperties", ID_FILE_PROPERTIES
@@ -1383,8 +1489,9 @@ BEGIN
POPUP "R&enderer Settings"
BEGIN
MENUITEM "&Tearing Test", ID_VIEW_TEARING_TEST
- MENUITEM "&Display Stats", ID_VIEW_DISPLAYSTATS
- MENUITEM "&Remaining Time", ID_VIEW_REMAINING_TIME
+ MENUITEM "&Display Statistics", ID_VIEW_DISPLAY_RENDERER_STATS
+ MENUITEM "Display Current T&ime", ID_VIEW_OSD_DISPLAY_TIME
+ MENUITEM "Show &File Name", ID_VIEW_OSD_SHOW_FILENAME
MENUITEM SEPARATOR
POPUP "&Output Range"
BEGIN
@@ -1458,15 +1565,15 @@ BEGIN
MENUITEM "Zoom &2", ID_VIEW_VF_ZOOM2
MENUITEM "Touch Window From &Outside", ID_VIEW_VF_FROMOUTSIDE
MENUITEM SEPARATOR
- MENUITEM "&Keep Aspect Ratio", ID_VIEW_VF_KEEPASPECTRATIO
- POPUP "Override &Aspect Ratio"
+ POPUP "&Aspect Ratio"
BEGIN
- MENUITEM "&Default", ID_ASPECTRATIO_SOURCE
+ MENUITEM "&Default (DAR)", ID_ASPECTRATIO_DAR
MENUITEM "&4:3", ID_ASPECTRATIO_4_3
MENUITEM "&5:4", ID_ASPECTRATIO_5_4
MENUITEM "&16:9", ID_ASPECTRATIO_16_9
MENUITEM "&235:100", ID_ASPECTRATIO_235_100
MENUITEM "1&85:100", ID_ASPECTRATIO_185_100
+ MENUITEM "Assume &square pixels (SAR)", ID_ASPECTRATIO_SAR
END
MENUITEM "&Correct Monitor/Desktop AR Diff", ID_VIEW_VF_COMPMONDESKARDIFF
END
@@ -1501,7 +1608,14 @@ BEGIN
BEGIN
MENUITEM "&Play/Pause", ID_PLAY_PLAYPAUSE
MENUITEM "&Stop", ID_PLAY_STOP
- MENUITEM "F&rame Step", ID_PLAY_FRAMESTEP
+ MENUITEM "Fra&me Step", ID_PLAY_FRAMESTEP
+ POPUP "&Repeat"
+ BEGIN
+ MENUITEM "F&orever", ID_PLAY_REPEAT_FOREVER
+ MENUITEM SEPARATOR
+ MENUITEM "&File", ID_PLAY_REPEAT_ONEFILE
+ MENUITEM "&Playlist", ID_PLAY_REPEAT_WHOLEPLAYLIST
+ END
MENUITEM SEPARATOR
MENUITEM "&Decrease Rate", ID_PLAY_DECRATE
MENUITEM "&Increase Rate", ID_PLAY_INCRATE
@@ -1510,9 +1624,9 @@ BEGIN
MENUITEM "&Filters", ID_FILTERS
MENUITEM "S&haders", ID_SHADERS
MENUITEM SEPARATOR
- MENUITEM "&Audio", ID_AUDIOS
- MENUITEM "Su&btitles", ID_SUBTITLES
- MENUITEM "&Video Stream", ID_VIDEO_STREAMS
+ MENUITEM "&Audio Track", ID_AUDIOS
+ MENUITEM "Su&btitle Track", ID_SUBTITLES
+ MENUITEM "Vide&o Track", ID_VIDEO_STREAMS
MENUITEM SEPARATOR
POPUP "&Volume"
BEGIN
@@ -1522,13 +1636,15 @@ BEGIN
END
POPUP "Af&ter Playback"
BEGIN
- MENUITEM "&Exit", ID_AFTERPLAYBACK_CLOSE
+ MENUITEM "Do no&thing", ID_AFTERPLAYBACK_DONOTHING
+ MENUITEM "Play &next file in the folder", ID_AFTERPLAYBACK_PLAYNEXT
+ MENUITEM "Turn off the &monitor", ID_AFTERPLAYBACK_MONITOROFF
+ MENUITEM "&Exit", ID_AFTERPLAYBACK_EXIT
MENUITEM "&Stand By", ID_AFTERPLAYBACK_STANDBY
MENUITEM "&Hibernate", ID_AFTERPLAYBACK_HIBERNATE
MENUITEM "Shut&down", ID_AFTERPLAYBACK_SHUTDOWN
MENUITEM "Log &Off", ID_AFTERPLAYBACK_LOGOFF
MENUITEM "&Lock", ID_AFTERPLAYBACK_LOCK
- MENUITEM "Turn off the &monitor", ID_AFTERPLAYBACK_MONITOROFF
END
END
POPUP "&Navigate"
@@ -1577,13 +1693,13 @@ BEGIN
MENUITEM "Save &Image...", ID_FILE_SAVE_IMAGE
MENUITEM "Save &Thumbnails...", ID_FILE_SAVE_THUMBNAILS
MENUITEM SEPARATOR
- MENUITEM "&Load Subtitle...", ID_FILE_LOAD_SUBTITLE
- MENUITEM "Save S&ubtitle...", ID_FILE_SAVE_SUBTITLE
- POPUP "Subtitle Data&base"
+ POPUP "S&ubtitles"
BEGIN
- MENUITEM "&Search...", ID_FILE_ISDB_SEARCH
- MENUITEM "&Upload...", ID_FILE_ISDB_UPLOAD
- MENUITEM "&Download...", ID_FILE_ISDB_DOWNLOAD
+ MENUITEM "&Load Subtitles...", ID_FILE_SUBTITLES_LOAD
+ MENUITEM "Save S&ubtitles...", ID_FILE_SUBTITLES_SAVE
+ MENUITEM SEPARATOR
+ MENUITEM "&Download Subtitles...", ID_FILE_SUBTITLES_DOWNLOAD
+ MENUITEM "&Upload Subtitles...", ID_FILE_SUBTITLES_UPLOAD
END
MENUITEM SEPARATOR
MENUITEM "P&roperties", ID_FILE_PROPERTIES
@@ -1593,6 +1709,13 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Play/Pause", ID_PLAY_PLAYPAUSE
MENUITEM "&Stop", ID_PLAY_STOP
+ POPUP "&Repeat"
+ BEGIN
+ MENUITEM "F&orever", ID_PLAY_REPEAT_FOREVER
+ MENUITEM SEPARATOR
+ MENUITEM "&File", ID_PLAY_REPEAT_ONEFILE
+ MENUITEM "&Playlist", ID_PLAY_REPEAT_WHOLEPLAYLIST
+ END
MENUITEM SEPARATOR
MENUITEM "F&ull Screen", ID_VIEW_FULLSCREEN
POPUP "&Zoom"
@@ -1615,15 +1738,15 @@ BEGIN
MENUITEM "Zoom &2", ID_VIEW_VF_ZOOM2
MENUITEM "Touch Window From &Outside", ID_VIEW_VF_FROMOUTSIDE
MENUITEM SEPARATOR
- MENUITEM "&Keep Aspect Ratio", ID_VIEW_VF_KEEPASPECTRATIO
- POPUP "Override &Aspect Ratio"
+ POPUP "&Aspect Ratio"
BEGIN
- MENUITEM "&Default", ID_ASPECTRATIO_SOURCE
+ MENUITEM "&Default (DAR)", ID_ASPECTRATIO_DAR
MENUITEM "&4:3", ID_ASPECTRATIO_4_3
MENUITEM "&5:4", ID_ASPECTRATIO_5_4
MENUITEM "&16:9", ID_ASPECTRATIO_16_9
MENUITEM "&235:100", ID_ASPECTRATIO_235_100
MENUITEM "1&85:100", ID_ASPECTRATIO_185_100
+ MENUITEM "Assume &square pixels (SAR)", ID_ASPECTRATIO_SAR
END
MENUITEM "&Correct Monitor/Desktop AR Diff", ID_VIEW_VF_COMPMONDESKARDIFF
END
@@ -1663,9 +1786,9 @@ BEGIN
MENUITEM "&Filters", ID_FILTERS
MENUITEM "S&haders", ID_SHADERS
MENUITEM SEPARATOR
- MENUITEM "&Audio", ID_AUDIOS
- MENUITEM "Su&btitles", ID_SUBTITLES
- MENUITEM "&Video Stream", ID_VIDEO_STREAMS
+ MENUITEM "&Audio Track", ID_AUDIOS
+ MENUITEM "Su&btitle Track", ID_SUBTITLES
+ MENUITEM "Vide&o Track", ID_VIDEO_STREAMS
MENUITEM SEPARATOR
POPUP "&Volume"
BEGIN
@@ -1675,13 +1798,15 @@ BEGIN
END
POPUP "Af&ter Playback"
BEGIN
- MENUITEM "&Exit", ID_AFTERPLAYBACK_CLOSE
+ MENUITEM "Do no&thing", ID_AFTERPLAYBACK_DONOTHING
+ MENUITEM "Play &next file in the folder", ID_AFTERPLAYBACK_PLAYNEXT
+ MENUITEM "Turn off the &monitor", ID_AFTERPLAYBACK_MONITOROFF
+ MENUITEM "&Exit", ID_AFTERPLAYBACK_EXIT
MENUITEM "&Stand By", ID_AFTERPLAYBACK_STANDBY
MENUITEM "&Hibernate", ID_AFTERPLAYBACK_HIBERNATE
MENUITEM "Shut&down", ID_AFTERPLAYBACK_SHUTDOWN
MENUITEM "Log &Off", ID_AFTERPLAYBACK_LOGOFF
MENUITEM "&Lock", ID_AFTERPLAYBACK_LOCK
- MENUITEM "Turn off the &monitor", ID_AFTERPLAYBACK_MONITOROFF
END
MENUITEM SEPARATOR
POPUP "&View"
@@ -1715,8 +1840,9 @@ BEGIN
POPUP "R&enderer Settings"
BEGIN
MENUITEM "&Tearing Test", ID_VIEW_TEARING_TEST
- MENUITEM "&Display Stats", ID_VIEW_DISPLAYSTATS
- MENUITEM "&Remaining Time", ID_VIEW_REMAINING_TIME
+ MENUITEM "&Display Statistics", ID_VIEW_DISPLAY_RENDERER_STATS
+ MENUITEM "Display Current T&ime", ID_VIEW_OSD_DISPLAY_TIME
+ MENUITEM "Show &File Name", ID_VIEW_OSD_SHOW_FILENAME
MENUITEM SEPARATOR
POPUP "&Output Range"
BEGIN
@@ -1806,13 +1932,13 @@ BEGIN
MENUITEM "Save &Image...", ID_FILE_SAVE_IMAGE
MENUITEM "Save &Thumbnails...", ID_FILE_SAVE_THUMBNAILS
MENUITEM SEPARATOR
- MENUITEM "&Load Subtitle...", ID_FILE_LOAD_SUBTITLE
- MENUITEM "Save S&ubtitle...", ID_FILE_SAVE_SUBTITLE
- POPUP "Subtitle Data&base"
+ POPUP "S&ubtitles"
BEGIN
- MENUITEM "&Search...", ID_FILE_ISDB_SEARCH
- MENUITEM "&Upload...", ID_FILE_ISDB_UPLOAD
- MENUITEM "&Download...", ID_FILE_ISDB_DOWNLOAD
+ MENUITEM "&Load Subtitles...", ID_FILE_SUBTITLES_LOAD
+ MENUITEM "Save S&ubtitles...", ID_FILE_SUBTITLES_SAVE
+ MENUITEM SEPARATOR
+ MENUITEM "&Download Subtitles...", ID_FILE_SUBTITLES_DOWNLOAD
+ MENUITEM "&Upload Subtitles...", ID_FILE_SUBTITLES_UPLOAD
END
MENUITEM SEPARATOR
MENUITEM "P&roperties", ID_FILE_PROPERTIES
@@ -1850,8 +1976,9 @@ BEGIN
POPUP "R&enderer Settings"
BEGIN
MENUITEM "&Tearing Test", ID_VIEW_TEARING_TEST
- MENUITEM "&Display Stats", ID_VIEW_DISPLAYSTATS
- MENUITEM "&Remaining Time", ID_VIEW_REMAINING_TIME
+ MENUITEM "&Display Statistics", ID_VIEW_DISPLAY_RENDERER_STATS
+ MENUITEM "Display Current T&ime", ID_VIEW_OSD_DISPLAY_TIME
+ MENUITEM "Show &File Name", ID_VIEW_OSD_SHOW_FILENAME
MENUITEM SEPARATOR
POPUP "&Output Range"
BEGIN
@@ -1925,15 +2052,15 @@ BEGIN
MENUITEM "Zoom &2", ID_VIEW_VF_ZOOM2
MENUITEM "Touch Window From &Outside", ID_VIEW_VF_FROMOUTSIDE
MENUITEM SEPARATOR
- MENUITEM "&Keep Aspect Ratio", ID_VIEW_VF_KEEPASPECTRATIO
- POPUP "Override &Aspect Ratio"
+ POPUP "&Aspect Ratio"
BEGIN
- MENUITEM "&Default", ID_ASPECTRATIO_SOURCE
+ MENUITEM "&Default (DAR)", ID_ASPECTRATIO_DAR
MENUITEM "&4:3", ID_ASPECTRATIO_4_3
MENUITEM "&5:4", ID_ASPECTRATIO_5_4
MENUITEM "&16:9", ID_ASPECTRATIO_16_9
MENUITEM "&235:100", ID_ASPECTRATIO_235_100
MENUITEM "1&85:100", ID_ASPECTRATIO_185_100
+ MENUITEM "Assume &square pixels (SAR)", ID_ASPECTRATIO_SAR
END
MENUITEM "&Correct Monitor/Desktop AR Diff", ID_VIEW_VF_COMPMONDESKARDIFF
END
@@ -1968,7 +2095,14 @@ BEGIN
BEGIN
MENUITEM "&Play/Pause", ID_PLAY_PLAYPAUSE
MENUITEM "&Stop", ID_PLAY_STOP
- MENUITEM "F&rame Step", ID_PLAY_FRAMESTEP
+ MENUITEM "Fra&me Step", ID_PLAY_FRAMESTEP
+ POPUP "&Repeat"
+ BEGIN
+ MENUITEM "F&orever", ID_PLAY_REPEAT_FOREVER
+ MENUITEM SEPARATOR
+ MENUITEM "&File", ID_PLAY_REPEAT_ONEFILE
+ MENUITEM "&Playlist", ID_PLAY_REPEAT_WHOLEPLAYLIST
+ END
MENUITEM SEPARATOR
MENUITEM "&Decrease Rate", ID_PLAY_DECRATE
MENUITEM "&Increase Rate", ID_PLAY_INCRATE
@@ -2002,9 +2136,9 @@ BEGIN
MENUITEM "&Filters", ID_FILTERS
MENUITEM "S&haders", ID_SHADERS
MENUITEM SEPARATOR
- MENUITEM "&Audio", ID_AUDIOS
- MENUITEM "Su&btitles", ID_SUBTITLES
- MENUITEM "&Video Stream", ID_VIDEO_STREAMS
+ MENUITEM "&Audio Track", ID_AUDIOS
+ MENUITEM "Su&btitle Track", ID_SUBTITLES
+ MENUITEM "Vide&o Track", ID_VIDEO_STREAMS
MENUITEM SEPARATOR
POPUP "&Volume"
BEGIN
@@ -2014,20 +2148,23 @@ BEGIN
END
POPUP "Af&ter Playback"
BEGIN
- MENUITEM "&Exit", ID_AFTERPLAYBACK_CLOSE
+ MENUITEM "Do no&thing", ID_AFTERPLAYBACK_DONOTHING
+ MENUITEM "Play &next file in the folder", ID_AFTERPLAYBACK_PLAYNEXT
+ MENUITEM "Turn off the &monitor", ID_AFTERPLAYBACK_MONITOROFF
+ MENUITEM "&Exit", ID_AFTERPLAYBACK_EXIT
MENUITEM "&Stand By", ID_AFTERPLAYBACK_STANDBY
MENUITEM "&Hibernate", ID_AFTERPLAYBACK_HIBERNATE
MENUITEM "Shut&down", ID_AFTERPLAYBACK_SHUTDOWN
MENUITEM "Log &Off", ID_AFTERPLAYBACK_LOGOFF
MENUITEM "&Lock", ID_AFTERPLAYBACK_LOCK
- MENUITEM "Turn off the &monitor", ID_AFTERPLAYBACK_MONITOROFF
END
MENUITEM SEPARATOR
POPUP "R&enderer Settings"
BEGIN
MENUITEM "&Tearing Test", ID_VIEW_TEARING_TEST
- MENUITEM "&Display Stats", ID_VIEW_DISPLAYSTATS
- MENUITEM "&Remaining Time", ID_VIEW_REMAINING_TIME
+ MENUITEM "&Display Statistics", ID_VIEW_DISPLAY_RENDERER_STATS
+ MENUITEM "Display Current T&ime", ID_VIEW_OSD_DISPLAY_TIME
+ MENUITEM "Show &File Name", ID_VIEW_OSD_SHOW_FILENAME
MENUITEM SEPARATOR
POPUP "&Output Range"
BEGIN
@@ -2116,7 +2253,9 @@ BEGIN
IDS_AUTOPLAY_PLAYAUDIOCD "Play Audio CD"
IDS_AUTOPLAY_PLAYDVDMOVIE "Play DVD Movie"
IDS_PROPSHEET_PROPERTIES "Properties"
+ IDS_PLAY_LOOPMODE_FILE "File"
IDS_SUBTITLES_DEFAULT_STYLE "&Default Style"
+ IDS_PLAY_LOOPMODE_PLAYLIST "Playlist"
IDS_FAVFILES "Files"
IDS_FAVDVDS "DVDs"
END
@@ -2135,6 +2274,11 @@ BEGIN
IDS_SUBTITLES_STYLES_CAPTION "Styles"
IDS_TEXT_SUB_RENDERING_TARGET
"If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
+ IDS_PLAYLOOPMODE_PLAYLIST "Repeat Mode: Playlist"
+ IDS_PLAYLOOPMODE_FILE "Repeat Mode: File"
+ IDS_PLAYLOOP_FOREVER_ON "Repeat Forever: On"
+ IDS_PLAYLOOP_FOREVER_OFF "Repeat Forever: Off"
+ IDS_PLAYLOOP_FOREVER "Repeat Forever"
END
STRINGTABLE
@@ -2208,8 +2352,8 @@ BEGIN
IDS_SUBRESYNC_CLN_EFFECT "Effect"
IDS_PLAYLIST_CAPTION "Playlist"
IDS_PPAGE_FS_CLN_ON_OFF "On/Off"
- IDS_PPAGE_FS_CLN_FROM_FPS "From fps"
- IDS_PPAGE_FS_CLN_TO_FPS "To fps"
+ IDS_PPAGE_FS_CLN_FROM_FPS "From (FPS)"
+ IDS_PPAGE_FS_CLN_TO_FPS "To (FPS)"
IDS_PPAGE_FS_CLN_DISPLAY_MODE "Display mode (Hz)"
IDS_PPAGE_FS_DEFAULT "Default"
IDS_PPAGE_FS_OTHER "Other"
@@ -2262,6 +2406,17 @@ END
STRINGTABLE
BEGIN
+ IDD_FILEPROPRES "Resources"
+ IDD_PPAGEMISC "Miscellaneous"
+ IDD_FILEMEDIAINFO "MediaInfo"
+ IDD_PPAGECAPTURE "Playback::Capture"
+ IDD_PPAGESYNC "Playback::Sync Renderer Settings"
+ IDD_PPAGEFULLSCREEN "Playback::Fullscreen"
+ IDD_PPAGEAUDIORENDERER "Internal Filters::Audio Renderer"
+END
+
+STRINGTABLE
+BEGIN
IDS_AUDIOSWITCHER "Audio Switcher"
IDS_ICONS_REASSOC_DLG_TITLE "New version of the icon library"
IDS_ICONS_REASSOC_DLG_INSTR "Do you want to reassociate the icons?"
@@ -2269,9 +2424,7 @@ BEGIN
"This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
IDS_PPAGE_OUTPUT_OLDRENDERER "Old Video Renderer"
IDS_PPAGE_OUTPUT_OVERLAYMIXER "Overlay Mixer Renderer"
- IDS_PPAGE_OUTPUT_VMR7WINDOWED "Video Mixing Renderer 7 (windowed)"
IDS_PPAGE_OUTPUT_VMR9WINDOWED "Video Mixing Renderer 9 (windowed)"
- IDS_PPAGE_OUTPUT_VMR7RENDERLESS "Video Mixing Renderer 7 (renderless)"
IDS_PPAGE_OUTPUT_VMR9RENDERLESS "Video Mixing Renderer 9 (renderless)"
IDS_PPAGE_OUTPUT_EVR "Enhanced Video Renderer"
IDS_PPAGE_OUTPUT_EVR_CUSTOM "Enhanced Video Renderer (custom presenter)"
@@ -2289,17 +2442,6 @@ BEGIN
IDD_PPAGELOGO "Player::Logo"
IDD_PPAGEOUTPUT "Playback::Output"
IDD_PPAGEWEBSERVER "Player::Web Interface"
- IDD_PPAGESUBDB "Subtitles::Database"
-END
-
-STRINGTABLE
-BEGIN
- IDD_FILEPROPRES "Resources"
- IDD_PPAGEMISC "Miscellaneous"
- IDD_FILEMEDIAINFO "MediaInfo"
- IDD_PPAGECAPTURE "Playback::Capture"
- IDD_PPAGESYNC "Playback::Sync Renderer Settings"
- IDD_PPAGEFULLSCREEN "Playback::Fullscreen"
END
STRINGTABLE
@@ -2313,12 +2455,10 @@ BEGIN
IDC_DSSYSDEF "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
IDC_DSOLD "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
IDC_DSOVERLAYMIXER "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
- IDC_DSVMR7WIN "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
- IDC_DSVMR9WIN "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
- IDC_DSVMR7REN "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. ""True Color"" desktop color space recommended."
+ IDC_DSVMR9WIN "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
IDC_DSVMR9REN "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. ""True Color"" desktop color space recommended. Recommended for Windows XP."
IDC_DSDXR "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
- IDC_DSNULL_COMP "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+ IDC_DSNULL_COMP "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
IDC_DSNULL_UNCOMP "Same as the normal Null renderer, but this will only connect to uncompressed types."
IDC_DSEVR "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
IDC_DSEVR_CUSTOM "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
@@ -2329,24 +2469,15 @@ BEGIN
IDC_DSMADVR "High-quality renderer, requires a GPU that supports D3D9 or later."
IDC_DSSYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
IDC_RMSYSDEF "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
- IDC_RMDX7 "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
IDC_RMDX9 "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
IDC_QTSYSDEF "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
- IDC_QTDX7 "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
IDC_QTDX9 "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
IDC_REGULARSURF "Video surface will be allocated as a regular offscreen surface."
END
STRINGTABLE
BEGIN
- IDC_AUDRND_COMBO "MPC Audio Renderer is broken, do not use."
-END
-
-STRINGTABLE
-BEGIN
IDS_PPAGE_OUTPUT_SYNC "Sync Renderer"
- IDS_MPC_BUG_REPORT_TITLE "MPC-HC - Reporting a bug"
- IDS_MPC_BUG_REPORT "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
IDS_PPAGE_OUTPUT_SURF_OFFSCREEN "Regular offscreen plain surface"
IDS_PPAGE_OUTPUT_SURF_2D "2D surfaces"
IDS_PPAGE_OUTPUT_SURF_3D "3D surfaces (recommended)"
@@ -2364,12 +2495,13 @@ END
STRINGTABLE
BEGIN
- IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND "MPC-HC Audio Renderer"
+ IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND "Internal Audio Renderer"
IDS_EMB_RESOURCES_VIEWER_NAME "Name"
IDS_EMB_RESOURCES_VIEWER_TYPE "MIME Type"
IDS_EMB_RESOURCES_VIEWER_INFO
"In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the ""Save As"" button if you only want to save the information."
- IDS_DOWNLOAD_SUBS "Download subtitles"
+ IDS_SUBTITLES_DOWNLOAD "Download Subtitles..."
+ IDS_SUBTITLES_UPLOAD "Upload Subtitles..."
IDS_SUBFILE_DELAY "Delay (ms):"
IDS_SPEEDSTEP_AUTO "Auto"
IDS_EXPORT_SETTINGS_NO_KEYS "There are no customized keys to export."
@@ -2381,7 +2513,7 @@ END
STRINGTABLE
BEGIN
- IDC_TEXTURESURF2D "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+ IDC_TEXTURESURF2D "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
IDC_TEXTURESURF3D "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
IDC_DX9RESIZER_COMBO "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
IDC_DSVMR9LOADMIXER "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
@@ -2402,6 +2534,13 @@ END
STRINGTABLE
BEGIN
+ IDS_NAVIGATE_TUNERSCAN "Tuner scan"
+ IDS_SUBTITLES_ERROR "Subtitles are not loaded or unsupported renderer."
+ IDC_CACHESHADERS "Stores compiled shaders in local AppData to speed up load time."
+END
+
+STRINGTABLE
+BEGIN
IDS_SRC_VTS "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
IDS_SRC_RFS "Based on RARFileSource, doesn't support compressed files"
IDS_INTERNAL_LAVF "Uses LAV Filters"
@@ -2437,7 +2576,7 @@ END
STRINGTABLE
BEGIN
ID_VOLUME_MUTE "Mute"
- ID_VOLUME_MUTE_ON "Unmute"
+ ID_VOLUME_MUTE_OFF "Unmute"
ID_VOLUME_MUTE_DISABLED "No audio"
END
@@ -2465,8 +2604,8 @@ STRINGTABLE
BEGIN
IDS_FAVORITES_ADD "&Add to Favorites..."
IDS_FAVORITES_ORGANIZE "&Organize Favorites..."
- IDS_PLAYLIST_SHUFFLE "Shuffle"
- IDS_PLAYLIST_SHOWFOLDER "Open file location"
+ IDS_PLAYLIST_SHUFFLE "Sh&uffle"
+ IDS_PLAYLIST_SHOWFOLDER "Ope&n file location"
IDS_CONTROLS_CLOSING "Closing..."
IDS_CONTROLS_PLAYING "Playing"
IDS_CONTROLS_PAUSED "Paused"
@@ -2500,7 +2639,7 @@ BEGIN
IDS_SCALE_16_9 "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
IDS_SCALE_WIDESCREEN "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
IDS_SCALE_ULTRAWIDE "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
- IDS_PLAYLIST_HIDEFS "Hide on Fullscreen"
+ IDS_PLAYLIST_HIDEFS "&Hide on Fullscreen"
END
STRINGTABLE
@@ -2573,7 +2712,7 @@ STRINGTABLE
BEGIN
IDS_VOLUME "%d%%"
IDS_BOOST "+%d%%"
- IDS_PLAYLIST_ADDFOLDER "Add containing folder"
+ IDS_PLAYLIST_ADDFOLDER "Add containing &folder"
IDS_HW_INDICATOR "[H/W]"
IDS_TOOLTIP_SOFTWARE_DECODING "Software Decoding"
IDS_STATSBAR_PLAYBACK_RATE "Playback rate"
@@ -2611,6 +2750,32 @@ BEGIN
IDS_SUBTITLE_DELAY_STEP_TOOLTIP
"The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
IDS_HOTKEY_NOT_DEFINED "<not defined>"
+ IDS_NAVIGATION_WATCH "Watch"
+ IDS_NAVIGATION_MOVE_UP "Move Up"
+ IDS_NAVIGATION_MOVE_DOWN "Move Down"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_NAVIGATION_SORT "Sort by LCN"
+ IDS_NAVIGATION_REMOVE_ALL "Remove all"
+ IDS_REMOVE_CHANNELS_QUESTION
+ "Are you sure you want to remove all channels from the list?"
+ IDS_MEDIAINFO_NO_INFO_AVAILABLE "No information available"
+ IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS "Please wait, analysis in progress..."
+ IDS_ASPECT_RATIO_FMT "AR %d:%d"
+ IDS_PPAGEADVANCED_LOGGER "Enables logging to file (requires restart)"
+ IDS_TIMER_REMAINING_TIME "Remaining time"
+ IDS_TIMER_HIGH_PRECISION "High precision"
+ IDS_AFTERPLAYBACK_REWIND "After Playback: Rewind current file"
+ IDS_AFTERPLAYBACK_CLOSE "After Playback: Close"
+ IDS_FRAME_INIT_FAILED "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+ IDS_TIME_SHIFT_TOOLTIP "Enter a positive value if the audio is early, a negative value if it is late."
+ IDS_WEBUI_DISABLED_PREVIEW_MSG
+ "Preview is currently disabled. You can enable it in MPC-HC's options."
+ IDS_WEBUI_PREVIEW_WARNING
+ "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+ IDS_SUBTITLE_RENDERER_INTERNAL "Internal Subtitle Renderer"
END
STRINGTABLE
@@ -2620,15 +2785,15 @@ BEGIN
IDS_AG_SAVE_IMAGE "Save Image"
IDS_MPLAYERC_6 "Save Image (auto)"
IDS_OSD_IMAGE_SAVED "Image saved successfully"
- IDS_AG_LOAD_SUBTITLE "Load Subtitle"
- IDS_AG_SAVE_SUBTITLE "Save Subtitle"
+ IDS_AG_LOAD_SUBTITLES "Load Subtitles..."
+ IDS_AG_SAVE_SUBTITLES "Save Subtitles..."
IDS_AG_PROPERTIES "Properties"
IDS_AG_EXIT "Exit"
IDS_AG_PLAYPAUSE "Play/Pause"
IDS_AG_PLAY "Play"
IDS_AG_STOP "Stop"
- IDS_AG_FRAMESTEP "Framestep"
- IDS_MPLAYERC_16 "Framestep back"
+ IDS_AG_FRAMESTEP "Frame-step"
+ IDS_MPLAYERC_16 "Frame-step back"
IDS_AG_GO_TO "Go To"
IDS_AG_INCREASE_RATE "Increase Rate"
END
@@ -2661,7 +2826,7 @@ BEGIN
IDS_OSD_RS_VSYNC_OFFSET "VSync Offset: %d"
IDS_OSD_SPEED "Speed: %.2lfx"
IDS_OSD_THUMBS_SAVED "Thumbnails saved successfully"
- IDS_MENU_VIDEO_STREAM "&Video Stream"
+ IDS_MENU_VIDEO_STREAM "Vide&o Track"
IDS_MENU_VIDEO_ANGLE "Video Ang&le"
IDS_RESET_SETTINGS "Reset settings"
IDS_RESET_SETTINGS_WARNING
@@ -2682,8 +2847,8 @@ STRINGTABLE
BEGIN
IDS_AG_DECREASE_RATE "Decrease Rate"
IDS_AG_RESET_RATE "Reset Rate"
- IDS_MPLAYERC_21 "Audio Delay +10ms"
- IDS_MPLAYERC_22 "Audio Delay -10ms"
+ IDS_MPLAYERC_21 "Audio Delay +10 ms"
+ IDS_MPLAYERC_22 "Audio Delay -10 ms"
IDS_MPLAYERC_23 "Jump Forward (small)"
IDS_MPLAYERC_24 "Jump Backward (small)"
IDS_MPLAYERC_25 "Jump Forward (medium)"
@@ -2705,8 +2870,22 @@ BEGIN
IDS_MPLAYERC_101 "Goto Next Subtitle"
IDS_MPLAYERC_102 "Shift Subtitle Left"
IDS_MPLAYERC_103 "Shift Subtitle Right"
- IDS_AG_DISPLAY_STATS "Display Stats"
IDS_AG_SEEKSET "Jump to Beginning"
+ IDS_OSD_SHOW_FILENAME "OSD: Show File Name"
+ IDS_PLAY_DVD "Play DVD"
+ IDS_PLAY_BD "Play BD"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_OSD_DISPLAY_RENDERER_STATS "OSD: Display Renderer Statistics"
+ IDS_OSD_RESET_RENDERER_STATS "OSD: Reset Renderer Statistics"
+ IDD_PPAGESUBMISC "Subtitles::Misc"
+ IDS_VIEW_BORDERLESS "Hide &borders"
+ IDS_VIEW_FRAMEONLY "Fra&me Only"
+ IDS_VIEW_CAPTIONMENU "Sho&w Caption&&Menu"
+ IDS_VIEW_HIDEMENU "Hide &Menu"
+ IDD_PPAGEADVANCED "Advanced"
END
STRINGTABLE
@@ -2731,10 +2910,10 @@ END
STRINGTABLE
BEGIN
- IDS_SUBDL_DLG_DOWNLOADING "Downloading subtitle(s), please wait."
+ IDS_SUBDL_DLG_DOWNLOADING "Downloading [%s] ""%s"""
IDS_SUBDL_DLG_PARSING "Parsing list..."
IDS_SUBDL_DLG_NOT_FOUND "No subtitles found."
- IDS_SUBDL_DLG_SUBS_AVAIL " %d subtitle(s) available."
+ IDS_SUBDL_DLG_SUBS_AVAIL "%d subtitle(s) available."
IDS_UPDATE_CONFIG_AUTO_CHECK
"Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
IDS_ZOOM_50 "50%"
@@ -2782,32 +2961,28 @@ BEGIN
IDS_AG_DVD_MENU_BACK "DVD Menu Back"
IDS_MPLAYERC_75 "DVD Menu Leave"
IDS_AG_BOSS_KEY "Boss key"
- IDS_MPLAYERC_77 "Player Menu (short)"
- IDS_MPLAYERC_78 "Player Menu (long)"
+ IDS_MPLAYERC_77 "Player Menu"
+ IDS_MPLAYERC_78 "Player Menu (full)"
IDS_AG_FILTERS_MENU "Filters Menu"
IDS_AG_OPTIONS "Options"
- IDS_AG_NEXT_AUDIO "Next Audio"
- IDS_AG_PREV_AUDIO "Prev Audio"
+ IDS_AG_NEXT_AUDIO "Next Audio Track"
+ IDS_AG_PREV_AUDIO "Prev Audio Track"
END
STRINGTABLE
BEGIN
- IDS_AG_NEXT_SUBTITLE "Next Subtitle"
- IDS_AG_PREV_SUBTITLE "Prev Subtitle"
+ IDS_AG_NEXT_SUBTITLE "Next Subtitle Track"
+ IDS_AG_PREV_SUBTITLE "Prev Subtitle Track"
IDS_MPLAYERC_85 "On/Off Subtitle"
IDS_MPLAYERC_86 "Reload Subtitles"
- IDS_MPLAYERC_87 "Next Audio (OGM)"
- IDS_MPLAYERC_88 "Prev Audio (OGM)"
- IDS_MPLAYERC_89 "Next Subtitle (OGM)"
- IDS_MPLAYERC_90 "Prev Subtitle (OGM)"
IDS_MPLAYERC_91 "Next Angle (DVD)"
IDS_MPLAYERC_92 "Prev Angle (DVD)"
- IDS_MPLAYERC_93 "Next Audio (DVD)"
- IDS_MPLAYERC_94 "Prev Audio (DVD)"
- IDS_MPLAYERC_95 "Next Subtitle (DVD)"
- IDS_MPLAYERC_96 "Prev Subtitle (DVD)"
+ IDS_MPLAYERC_93 "Next Audio Track (DVD)"
+ IDS_MPLAYERC_94 "Prev Audio Track (DVD)"
+ IDS_MPLAYERC_95 "Next Subtitle Track (DVD)"
+ IDS_MPLAYERC_96 "Prev Subtitle Track (DVD)"
IDS_MPLAYERC_97 "On/Off Subtitle (DVD)"
- IDS_MPLAYERC_98 "Remaining Time"
+ IDS_OSD_DISPLAY_CURRENT_TIME "OSD: Display Current Time"
END
STRINGTABLE
@@ -2822,8 +2997,8 @@ BEGIN
IDS_DVB_CHANNEL_NAME "Name"
IDS_DVB_CHANNEL_FREQUENCY "Frequency"
IDS_DVB_CHANNEL_ENCRYPTION "Encrypted"
- IDS_DVB_CHANNEL_ENCRYPTED "Yes"
- IDS_DVB_CHANNEL_NOT_ENCRYPTED "No"
+ IDS_YES "Yes"
+ IDS_NO "No"
IDS_DVB_CHANNEL_START_SCAN "Start"
IDS_DVB_CHANNEL_STOP_SCAN "Stop"
IDS_DVB_TVNAV_SEERADIO "Radio stations"
@@ -2841,8 +3016,8 @@ BEGIN
IDS_AG_FRAMES "Frames"
IDS_AG_BUFFERS "Buffers"
IDS_MAINFRM_9 "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
- IDS_MAINFRM_10 "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
- IDS_MAINFRM_11 "%s, %s %uHz %dbits %d %s"
+ IDS_MAINFRM_10 "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+ IDS_MAINFRM_11 "%s, %s %u Hz %d bits %d %s"
END
STRINGTABLE
@@ -2879,18 +3054,16 @@ BEGIN
IDS_THUMB_ROWNUMBER "Rows:"
IDS_THUMB_COLNUMBER "Columns:"
IDS_THUMB_IMAGE_WIDTH "Image width"
- IDS_PPSDB_URLCORRECT "The URL appears to be correct!"
- IDS_PPSDB_PROTOCOLERR "Protocol version mismatch, please upgrade your player or choose a different address!"
END
STRINGTABLE
BEGIN
IDS_AG_ASPECT_RATIO "Aspect Ratio"
IDS_MAINFRM_37 ", Total: %ld, Dropped: %ld"
- IDS_MAINFRM_38 ", Size: %I64dKB"
- IDS_MAINFRM_39 ", Size: %I64dMB"
- IDS_MAINFRM_40 ", Free: %I64dKB"
- IDS_MAINFRM_41 ", Free: %I64dMB"
+ IDS_MAINFRM_38 ", Size: %I64d KB"
+ IDS_MAINFRM_39 ", Size: %I64d MB"
+ IDS_MAINFRM_40 ", Free: %I64d KB"
+ IDS_MAINFRM_41 ", Free: %I64d MB"
IDS_MAINFRM_42 ", Free V/A Buffers: %03d/%03d"
IDS_AG_ERROR "Error"
IDS_SUBTITLE_STREAM_OFF "Subtitle: off"
@@ -2915,18 +3088,18 @@ BEGIN
IDS_THUMBNAILS_INFO_HEADER
"{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
IDS_THUMBNAIL_TOO_SMALL "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
- IDS_CANNOT_LOAD_SUB "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+ IDS_CANNOT_LOAD_SUB "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
IDS_SUBTITLE_FILES_FILTER "Subtitle files"
END
STRINGTABLE
BEGIN
IDS_MAINFRM_68 "Aspect Ratio: %ld:%ld"
- IDS_MAINFRM_69 "Aspect Ratio: Default"
- IDS_MAINFRM_70 "Audio Delay: %I64dms"
+ IDS_MAINFRM_69 "Aspect Ratio: Default (DAR)"
+ IDS_MAINFRM_70 "Audio delay: %I64d ms"
IDS_AG_CHAPTER "Chapter %d"
IDS_AG_OUT_OF_MEMORY "Out of memory"
- IDS_MAINFRM_77 "Error: Flash player for IE is required"
+ IDS_MAINFRM_77 "Error: Adobe Flash Player for Internet Explorer is required"
IDS_MAINFRM_78 "QuickTime not yet supported for X64 (apple library not available)"
IDS_MAINFRM_80 "Failed to create the filter graph object"
IDS_MAINFRM_81 "Invalid argument"
@@ -2936,19 +3109,16 @@ END
STRINGTABLE
BEGIN
- IDS_PPSDB_BADURL "Bad URL, could not locate subtitle database there!"
IDS_AG_CHAPTER2 "Chapter: "
IDS_VOLUME_OSD "Vol: %d%%"
IDS_BOOST_OSD "Boost: +%u%%"
IDS_BALANCE_OSD "Balance: %s"
IDS_FULLSCREENMONITOR_CURRENT "Current"
- IDS_MPC_CRASH "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file ""%s"" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
- IDS_MPC_MINIDUMP_FAIL "Failed to create dump file to ""%s"" (error %u)"
IDS_MAINFRM_DIR_TITLE "Select Directory"
IDS_MAINFRM_DIR_CHECK "Include subdirectories"
IDS_AG_PAUSE "Pause"
IDS_AG_TOGGLE_CAPTION "Toggle Caption&Menu"
- IDS_AG_TOGGLE_SEEKER "Toggle Seeker"
+ IDS_AG_TOGGLE_SEEKER "Toggle Seek Bar"
IDS_AG_TOGGLE_CONTROLS "Toggle Controls"
END
@@ -2999,7 +3169,7 @@ BEGIN
IDS_VOLUME_BOOST_DEC "Volume boost decrease"
IDS_VOLUME_BOOST_MIN "Volume boost Min"
IDS_VOLUME_BOOST_MAX "Volume boost Max"
- IDS_USAGE "Usage: mpc-hc.exe ""pathname"" [switches]\n\n""pathname""\tThe main file or directory to be loaded (wildcards\n\t\tallowed, ""-"" denotes standard input)\n/dub ""dubname""\tLoad an additional audio file\n/dubdelay ""file""\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains ""...DELAY XXms..."")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub ""subname""\tLoad an additional subtitle file\n/filter ""filtername""\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, ""pathname"" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t""pathname"" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd ""pathname"" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at ""ms"" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see ""Output"" settings)\n/shaderpreset ""Pr""\tStart using ""Pr"" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
+ IDS_USAGE "Usage: mpc-hc.exe ""pathname"" [switches]"
IDS_UNKNOWN_SWITCH "Unrecognized switch(es) found in command line string: \n\n"
END
@@ -3033,12 +3203,6 @@ END
STRINGTABLE
BEGIN
- IDS_NAVIGATE_TUNERSCAN "Tuner scan"
- IDS_SUBTITLES_ERROR "Subtitles are not loaded or unsupported renderer."
-END
-
-STRINGTABLE
-BEGIN
IDS_LOGO_AUTHOR "Author unknown. Contact us if you made this logo!"
IDS_NO_MORE_MEDIA "No more media in the current folder."
IDS_FIRST_IN_FOLDER "The first file of the folder is already loaded."
@@ -3073,19 +3237,8 @@ END
STRINGTABLE
BEGIN
- IDS_AG_RESET_STATS "Reset Display Stats"
- IDD_PPAGESUBMISC "Subtitles::Misc"
- IDS_VIEW_BORDERLESS "Hide &borders"
- IDS_VIEW_FRAMEONLY "Frame Only"
- IDS_VIEW_CAPTIONMENU "Sho&w Caption&&Menu"
- IDS_VIEW_HIDEMENU "Hide &Menu"
- IDD_PPAGEADVANCED "Advanced"
-END
-
-STRINGTABLE
-BEGIN
- IDS_TIME_TOOLTIP_ABOVE "Above seekbar"
- IDS_TIME_TOOLTIP_BELOW "Below seekbar"
+ IDS_TIME_TOOLTIP_ABOVE "Above seek bar"
+ IDS_TIME_TOOLTIP_BELOW "Below seek bar"
IDS_VIDEO_STREAM "Video: %s"
IDS_APPLY "Apply"
IDS_CLEAR "Clear"
@@ -3147,13 +3300,22 @@ END
STRINGTABLE
BEGIN
- IDS_MFMT_AC3 "AC-3/DTS"
+ IDS_MFMT_AC3 "AC-3"
IDS_MFMT_AIFF "AIFF"
IDS_MFMT_ALAC "Apple Lossless"
END
STRINGTABLE
BEGIN
+ IDS_MFMT_WAV "WAV"
+ IDS_MFMT_WMA "Windows Media Audio"
+ IDS_MFMT_WV "WavPack"
+ IDS_MFMT_OPUS "Opus Audio Codec"
+ IDS_MFMT_DTS "DTS/DTS-HD"
+END
+
+STRINGTABLE
+BEGIN
IDS_MFMT_AMR "AMR"
IDS_MFMT_APE "Monkey's Audio"
IDS_MFMT_AU "AU/SND"
@@ -3174,14 +3336,6 @@ END
STRINGTABLE
BEGIN
- IDS_MFMT_WAV "WAV"
- IDS_MFMT_WMA "Windows Media Audio"
- IDS_MFMT_WV "WavPack"
- IDS_MFMT_OPUS "Opus Audio Codec"
-END
-
-STRINGTABLE
-BEGIN
IDS_MFMT_PLS "Playlist"
IDS_MFMT_BDPLS "Blu-ray playlist"
IDS_MFMT_RAR "RAR Archive"
@@ -3196,13 +3350,6 @@ END
STRINGTABLE
BEGIN
- IDS_ARS_WASAPI_MODE "Use WASAPI (restart playback)"
- IDS_ARS_MUTE_FAST_FORWARD "Mute on fast forward"
- IDS_ARS_SOUND_DEVICE "Sound Device:"
-END
-
-STRINGTABLE
-BEGIN
IDS_OSD_RS_VSYNC_ON "VSync: On"
IDS_OSD_RS_VSYNC_OFF "VSync: Off"
IDS_OSD_RS_ACCURATE_VSYNC_ON "Accurate VSync: On"
@@ -3292,6 +3439,7 @@ BEGIN
IDS_REGAIN_VOLUME "Toggle regain volume"
IDS_OSD_REGAIN_VOLUME_ON "Regain volume: On"
IDS_OSD_REGAIN_VOLUME_OFF "Regain volume: Off"
+ IDS_SIZE_UNIT_BYTES "bytes"
IDS_SIZE_UNIT_K "KB"
IDS_SIZE_UNIT_M "MB"
IDS_SIZE_UNIT_G "GB"
@@ -3313,7 +3461,7 @@ BEGIN
IDS_GOTO_ERROR_PARSING_TEXT "Error parsing the entered text!"
IDS_GOTO_ERROR_PARSING_FPS "Error parsing the entered frame rate!"
IDS_FRAME_STEP_ERROR_RENDERER
- "Cannot frame step, try a different video renderer."
+ "Cannot frame-step, try a different video renderer."
IDS_SCREENSHOT_ERROR_REAL
"The ""Save Image"" and ""Save Thumbnails"" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
IDS_SCREENSHOT_ERROR_QT "The ""Save Image"" and ""Save Thumbnails"" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
@@ -3321,8 +3469,6 @@ BEGIN
"The ""Save Image"" and ""Save Thumbnails"" functions do not work for Shockwave files."
IDS_SCREENSHOT_ERROR_OVERLAY
"The ""Save Image"" and ""Save Thumbnails"" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
- IDS_SUBDL_DLG_CONNECT_ERROR
- "Cannot connect to the online subtitles database."
IDS_MB_SHOW_EDL_EDITOR "Do you want to activate the EDL editor?"
END
@@ -3356,13 +3502,15 @@ END
STRINGTABLE
BEGIN
- IDS_AFTERPLAYBACK_CLOSE "After Playback: Exit"
+ IDS_AFTERPLAYBACK_EXIT "After Playback: Exit"
IDS_AFTERPLAYBACK_STANDBY "After Playback: Stand By"
IDS_AFTERPLAYBACK_HIBERNATE "After Playback: Hibernate"
IDS_AFTERPLAYBACK_SHUTDOWN "After Playback: Shutdown"
IDS_AFTERPLAYBACK_LOGOFF "After Playback: Log Off"
IDS_AFTERPLAYBACK_LOCK "After Playback: Lock"
IDS_AFTERPLAYBACK_MONITOROFF "After Playback: Turn off the monitor"
+ IDS_AFTERPLAYBACK_PLAYNEXT "After Playback: Play next file in the folder"
+ IDS_AFTERPLAYBACK_DONOTHING "After Playback: Do nothing"
IDS_OSD_BRIGHTNESS "Brightness: %s"
IDS_OSD_CONTRAST "Contrast: %s"
IDS_OSD_HUE "Hue: %s"
@@ -3398,6 +3546,131 @@ BEGIN
IDS_FILTER_SETTINGS_CAPTION "Settings"
END
+STRINGTABLE
+BEGIN
+ IDS_SUBTITLE_RENDERER_VS_FILTER "VSFilter / DirectVobSub"
+ IDS_SUBTITLE_RENDERER_XY_SUB_FILTER "XySubFilter"
+ IDS_SUBTITLE_RENDERER_ASS_FILTER "AssFilter"
+ IDS_SUBDL_DLG_PROVIDER_COL "Provider"
+ IDS_SUBDL_DLG_HI_COL "Hearing Impaired"
+ IDS_SUBDL_DLG_DOWNLOADS_COL "Downloads"
+ IDS_SUBDL_DLG_SCORE_COL "Score"
+ IDS_SUBDL_DLG_FAILED "Online subtitles search failed."
+ IDS_SUBDL_DLG_ABORTED "Online subtitles search aborted."
+ IDS_SUBDL_DLG_FOUND "Online subtitles search completed, %d subtitles found."
+ IDS_SUBDL_DLG_NOTFOUND "Online subtitles search completed, no subtitles found."
+ IDS_SUBDL_DLG_TITLE "Download subtitles"
+ IDS_SUBDL_DLG_SEARCHING "Searching for subtitles online, please wait..."
+ IDS_SUBDL_DLG_ABORTING "Online subtitles search aborting..."
+ IDS_SUBUL_DLG_USERNAME_COL "Username"
+ IDS_SUBUL_DLG_STATUS_COL "Status"
+ IDS_SUBUL_DLG_STATUS_READY "Ready..."
+END
+
+STRINGTABLE
+BEGIN
+ IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED "Not implemented."
+ IDS_SUBUL_DLG_STATUS_UPLOADING "Uploading..."
+ IDS_SUBUL_DLG_STATUS_UPLOADED "Subtitles uploaded successfully."
+ IDS_SUBUL_DLG_STATUS_FAILED "Subtitles upload failed."
+ IDS_SUBUL_DLG_STATUS_ABORTED "Subtitles upload aborted."
+ IDS_SUBUL_DLG_STATUS_ALREADYEXISTS "Subtitles already exist."
+ IDS_SUBUL_DLG_UPLOADING "Uploading subtitles, please wait..."
+ IDS_SUBUL_DLG_UPLOADED "Upload finished."
+ IDS_SUBUL_DLG_ABORTED "Upload aborted."
+ IDS_SUBUL_DLG_FAILED "Upload failed."
+ IDS_SUBMENU_DOWNLOAD "Download && Open"
+ IDS_SUBMENU_SETUP "Setup"
+ IDS_SUBMENU_RESET "Reset"
+ IDS_SUBMENU_MOVEUP "Move Up"
+ IDS_SUBMENU_MOVEDOWN "Move Down"
+ IDS_SUBMENU_OPENURL "Open URL"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_SUBPP_DLG_LANGUAGES_COL "Languages"
+ IDS_SUBPP_DLG_LANGUAGES_ERROR
+ "ERROR: Internet connection could not be established."
+ IDS_SUB_CREDENTIALS_TITLE "Enter website credentials"
+ IDS_SUB_CREDENTIALS_MSG "Enter your credentials to connect to: "
+ IDS_ASPECT_RATIO_SAR "Aspect Ratio: Assume square pixels (SAR)"
+ IDS_SUBDL_DLG_DOWNLOADED "Downloaded [%s] ""%s"""
+ IDS_SUBUL_DLG_TITLE "Upload subtitles"
+ IDS_SUBUL_DLG_CONFIRM "Are you sure you want to upload the subtitle file ""%s""?"
+ IDS_SUBPP_DLG_FETCHING_LANGUAGES "Fetching supported languages..."
+ IDS_SUB_CREDENTIALS_ERROR
+ "Failed to log in on ""%S"" with username ""%S"".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+ IDS_SUB_AUTODL_IGNORE_TOOLTIP
+ "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: ""private dir\\videos|work\\""."
+ IDS_CMD_PATHNAME """pathname""\tThe main file or directory to be loaded\n\t\t(wildcards allowed, ""-"" denotes standard input)"
+ IDS_CMD_DUB "/dub ""dubname""\tLoad an additional audio file"
+ IDS_CMD_DUBDELAY "/dubdelay ""file""\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains ""...DELAY XXms..."")"
+ IDS_CMD_D3DFS "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+ IDS_CMD_SUB "/sub ""subname""\tLoad an additional subtitle file"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_CMD_FILTER "/filter ""filtername""\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+ IDS_CMD_DVD "/dvd\t\tRun in DVD mode, ""pathname"" means the DVD folder (optional)"
+ IDS_CMD_DVDPOS_TC "/dvdpos T#C\tStart playback at title T, chapter C"
+ IDS_CMD_DVDPOS_TIME "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+ IDS_CMD_CD "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t""pathname"" means the drive path (optional)"
+ IDS_CMD_DEVICE "/device\t\tOpen the default video device"
+ IDS_CMD_OPEN "/open\t\tOpen the file, don't automatically start playback"
+ IDS_CMD_PLAY "/play\t\tStart playing the file as soon the player is launched"
+ IDS_CMD_CLOSE "/close\t\tClose the player after playback (only works when used with /play)"
+ IDS_CMD_SHUTDOWN "/shutdown\tShutdown the operating system after playback"
+ IDS_CMD_STANDBY "/standby\t\tPut the operating system in standby mode after playback"
+ IDS_CMD_HIBERNATE "/hibernate\tHibernate operating system after playback"
+ IDS_CMD_LOGOFF "/logoff\t\tLog off after playback"
+ IDS_CMD_LOCK "/lock\t\tLock workstation after playback"
+ IDS_CMD_MONITOROFF "/monitoroff\tTurn off the monitor after playback"
+ IDS_CMD_PLAYNEXT "/playnext\t\tOpen next file in the folder after playback"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_CMD_FULLSCREEN "/fullscreen\tStart in fullscreen mode"
+ IDS_CMD_MINIMIZED "/minimized\tStart in minimized mode"
+ IDS_CMD_NEW "/new\t\tUse a new instance of the player"
+ IDS_CMD_ADD "/add\t\tAdd ""pathname"" to playlist, can be combined with /open and /play"
+ IDS_CMD_RANDOMIZE "/randomize\tRandomize the playlist"
+ IDS_CMD_REGVID "/regvid\t\tCreate file associations for video files"
+ IDS_CMD_REGAUD "/regaud\t\tCreate file associations for audio files"
+ IDS_CMD_REGPL "/regpl\t\tCreate file associations for playlist files"
+ IDS_CMD_REGALL "/regall\t\tCreate file associations for all supported file types"
+ IDS_CMD_UNREGALL "/unregall\t\tRemove all file associations"
+ IDS_CMD_START "/start ms\t\tStart playing at ""ms"" (= milliseconds)"
+ IDS_CMD_STARTPOS "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+ IDS_CMD_FIXEDSIZE "/fixedsize w,h\tSet a fixed window size"
+ IDS_CMD_MONITOR "/monitor N\tStart player on monitor N, where N starts from 1"
+ IDS_CMD_AUDIORENDERER "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see ""Output"" settings)"
+ IDS_CMD_SHADERPRESET "/shaderpreset ""Pr""\tStart using ""Pr"" shader preset"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_CMD_PNS "/pns ""name""\tSpecify Pan&Scan preset name to use"
+ IDS_CMD_ICONASSOC "/iconsassoc\tReassociate format icons"
+ IDS_CMD_NOFOCUS "/nofocus\t\tOpen MPC-HC in background"
+ IDS_CMD_WEBPORT "/webport N\tStart web interface on specified port"
+ IDS_CMD_DEBUG "/debug\t\tShow debug information in OSD"
+ IDS_CMD_NOCRASHREPORTER "/nocrashreporter\tDisable the crash reporter"
+ IDS_CMD_SLAVE "/slave ""hWnd""\tUse MPC-HC as slave"
+ IDS_CMD_HWGPU "/hwgpu ""index""\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+ IDS_CMD_RESET "/reset\t\tRestore default settings"
+ IDS_CMD_HELP "/help /h /?\tShow help about command line switches"
+ IDS_PPAGEADVANCED_SCORE "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+ IDS_PPAGE_FS_CLN_AUDIO_DELAY "Audio Delay (ms)"
+ IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE
+ "Size in pixels of the default toolbar."
+ IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR
+ "Use legacy toolbar instead of new vectorized one."
+ IDS_SUBMENU_COPYURL "Copy URL"
+END
+
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/src/mpc-hc/mpc-hc.vcxproj b/src/mpc-hc/mpc-hc.vcxproj
index bb2c104e9..f696c4be8 100644
--- a/src/mpc-hc/mpc-hc.vcxproj
+++ b/src/mpc-hc/mpc-hc.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug Lite|Win32">
<Configuration>Debug Lite</Configuration>
@@ -42,42 +42,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Lite|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Lite|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Lite|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Lite|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -85,35 +50,7 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Lite|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Lite|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Lite|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Lite|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\common.props" />
</ImportGroup>
@@ -127,188 +64,65 @@
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release Lite|Win32'">$(SolutionDir)bin\mpc-hc_x86 Lite\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\mpc-hc_x64\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release Lite|x64'">$(SolutionDir)bin\mpc-hc_x64 Lite\</OutDir>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)64</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Lite|x64'">$(ProjectName)64</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)64</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Lite|x64'">$(ProjectName)64</TargetName>
+ <TargetName Condition="'$(Platform)'=='x64'">$(ProjectName)64</TargetName>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <PreBuildEvent>
- <Command>..\..\update_version.bat</Command>
- </PreBuildEvent>
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\DSUtil;..\filters\renderer\VideoRenderers;..\thirdparty;..\thirdparty\MediaInfo;..\thirdparty\ZenLib;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
+ <ItemDefinitionGroup>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
- <AdditionalDependencies>RARFileSource.res;delayimp.lib;dsound.lib;dxguid.lib;GdiPlus.lib;Psapi.lib;QTMLClient.lib;SetupAPI.lib;UxTheme.lib;Vfw32.lib;Winmm.lib;d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\$(Configuration)_$(Platform);$(SolutionDir)lib;$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreSpecificDefaultLibraries>LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <AdditionalDependencies>d3d9.lib;delayimp.lib;dsound.lib;dxguid.lib;GdiPlus.lib;Psapi.lib;SetupAPI.lib;UxTheme.lib;Vfw32.lib;Winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<DelayLoadDLLs>d3d9.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<SupportUnloadOfDelayLoadedDLL>true</SupportUnloadOfDelayLoadedDLL>
</Link>
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\include;..\DSUtil;..\filters\renderer\VideoRenderers;..\thirdparty;..\thirdparty\MediaInfo\library\Source;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
<Manifest>
<AdditionalManifestFiles>$(ProjectDir)res\mpc-hc.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
+ <EnableDpiAwareness>false</EnableDpiAwareness>
</Manifest>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Lite|Win32'">
- <PreBuildEvent>
- <Command>..\..\update_version.bat</Command>
- </PreBuildEvent>
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\DSUtil;..\filters\renderer\VideoRenderers;..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MPCHC_LITE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
+ <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
<Link>
- <AdditionalDependencies>AudioSwitcher.lib;BaseClasses.lib;BaseMuxer.lib;BufferFilter.lib;CmdUI.lib;DeCSS.lib;DSMMuxer.lib;DSUtil.lib;MathLibFix.lib;Filters.lib;kasumi.lib;LCDUI.lib;lcms2.lib;MatroskaMuxer.lib;MpcAudioRenderer.lib;ResizableLib.lib;sizecbar.lib;SoundTouch.lib;StreamDriveThru.lib;SubPic.lib;Subtitles.lib;SubtitleSource.lib;SyncClock.lib;system.lib;TreePropSheet.lib;unrar.lib;VideoRenderers.lib;WavDest.lib;zlib.lib;UxTheme.lib;delayimp.lib;dsound.lib;dxguid.lib;GdiPlus.lib;Psapi.lib;QTMLClient.lib;SetupAPI.lib;Vfw32.lib;Winmm.lib;d3d9.lib;mhook.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\Debug_$(Platform);$(SolutionDir)lib;$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <DelayLoadDLLs>d3d9.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
- <SupportUnloadOfDelayLoadedDLL>true</SupportUnloadOfDelayLoadedDLL>
- <IgnoreSpecificDefaultLibraries>LIBCMT.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <AdditionalLibraryDirectories>$(SolutionDir)lib;$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>strmiids.lib;Uuid.Lib;Version.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
- <ProjectReference>
- <LinkLibraryDependencies>false</LinkLibraryDependencies>
- </ProjectReference>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\mpc-hc.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <PreBuildEvent>
- <Command>..\..\update_version.bat</Command>
- </PreBuildEvent>
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\DSUtil;..\filters\renderer\VideoRenderers;..\thirdparty;..\thirdparty\MediaInfo;..\thirdparty\ZenLib;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
+ <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
<Link>
- <AdditionalDependencies>RARFileSource.res;delayimp.lib;dsound.lib;dxguid.lib;GdiPlus.lib;Psapi.lib;SetupAPI.lib;strmiids.lib;UxTheme.lib;Uuid.Lib;Vfw32.lib;Version.lib;Winmm.lib;d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\$(Configuration)_$(Platform);$(SolutionDir)lib64;$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <DelayLoadDLLs>d3d9.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
- <SupportUnloadOfDelayLoadedDLL>true</SupportUnloadOfDelayLoadedDLL>
+ <AdditionalLibraryDirectories>$(SolutionDir)lib;$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>QTMLClient.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\mpc-hc.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Lite|x64'">
- <PreBuildEvent>
- <Command>..\..\update_version.bat</Command>
- </PreBuildEvent>
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\DSUtil;..\filters\renderer\VideoRenderers;..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MPCHC_LITE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Release'))">
<Link>
- <AdditionalDependencies>AudioSwitcher.lib;BaseClasses.lib;BaseMuxer.lib;BufferFilter.lib;CmdUI.lib;DeCSS.lib;DSMMuxer.lib;DSUtil.lib;MathLibFix.lib;Filters.lib;kasumi.lib;LCDUI.lib;lcms2.lib;MatroskaMuxer.lib;MpcAudioRenderer.lib;ResizableLib.lib;sizecbar.lib;SoundTouch.lib;StreamDriveThru.lib;SubPic.lib;Subtitles.lib;SubtitleSource.lib;SyncClock.lib;system.lib;TreePropSheet.lib;unrar.lib;VideoRenderers.lib;WavDest.lib;zlib.lib;UxTheme.lib;delayimp.lib;dsound.lib;dxguid.lib;GdiPlus.lib;Psapi.lib;SetupAPI.lib;strmiids.lib;Uuid.Lib;Version.lib;Vfw32.lib;Winmm.lib;d3d9.lib;mhook.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\Debug_$(Platform);$(SolutionDir)lib64;$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <DelayLoadDLLs>d3d9.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
- <SupportUnloadOfDelayLoadedDLL>true</SupportUnloadOfDelayLoadedDLL>
+ <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\Release_$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
- <ProjectReference>
- <LinkLibraryDependencies>false</LinkLibraryDependencies>
- </ProjectReference>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\mpc-hc.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <PreBuildEvent>
- <Command>..\..\update_version.bat</Command>
- </PreBuildEvent>
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\DSUtil;..\filters\renderer\VideoRenderers;..\thirdparty;..\thirdparty\MediaInfo;..\thirdparty\ZenLib;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Debug'))">
<Link>
- <AdditionalDependencies>RARFileSource.res;delayimp.lib;dsound.lib;dxguid.lib;GdiPlus.lib;Psapi.lib;QTMLClient.lib;SetupAPI.lib;UxTheme.lib;Vfw32.lib;Winmm.lib;d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\$(Configuration)_$(Platform);$(SolutionDir)lib;$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <DelayLoadDLLs>d3d9.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
- <SupportUnloadOfDelayLoadedDLL>true</SupportUnloadOfDelayLoadedDLL>
+ <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\Debug_$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\mpc-hc.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Lite|Win32'">
- <PreBuildEvent>
- <Command>..\..\update_version.bat</Command>
- </PreBuildEvent>
+ <ItemDefinitionGroup Condition="$(Configuration.Contains('Lite'))">
+ <Link>
+ <AdditionalDependencies>AudioSwitcher.lib;BaseClasses.lib;BaseMuxer.lib;BufferFilter.lib;CmdUI.lib;DeCSS.lib;DSMMuxer.lib;DSUtil.lib;Filters.lib;kasumi.lib;LCDUI.lib;lcms2.lib;MatroskaMuxer.lib;ResizableLib.lib;sizecbar.lib;StreamDriveThru.lib;SubPic.lib;Subtitles.lib;SubtitleSource.lib;SyncClock.lib;system.lib;TreePropSheet.lib;unrar.lib;VideoRenderers.lib;WavDest.lib;zlib.lib;minhook.lib;tinyxml2.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
<ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\DSUtil;..\filters\renderer\VideoRenderers;..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>MPCHC_LITE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>AudioSwitcher.lib;BaseClasses.lib;BaseMuxer.lib;BufferFilter.lib;CmdUI.lib;DeCSS.lib;DSMMuxer.lib;DSUtil.lib;MathLibFix.lib;Filters.lib;kasumi.lib;LCDUI.lib;lcms2.lib;MatroskaMuxer.lib;MpcAudioRenderer.lib;ResizableLib.lib;sizecbar.lib;SoundTouch.lib;StreamDriveThru.lib;SubPic.lib;Subtitles.lib;SubtitleSource.lib;SyncClock.lib;system.lib;TreePropSheet.lib;unrar.lib;VideoRenderers.lib;WavDest.lib;zlib.lib;UxTheme.lib;delayimp.lib;dsound.lib;dxguid.lib;GdiPlus.lib;Psapi.lib;QTMLClient.lib;SetupAPI.lib;Vfw32.lib;Winmm.lib;d3d9.lib;mhook.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\Release_$(Platform);$(SolutionDir)lib;$(DXSDK_DIR)Lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <DelayLoadDLLs>d3d9.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
- <SupportUnloadOfDelayLoadedDLL>true</SupportUnloadOfDelayLoadedDLL>
- </Link>
<ProjectReference>
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\mpc-hc.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <PreBuildEvent>
- <Command>..\..\update_version.bat</Command>
- </PreBuildEvent>
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\DSUtil;..\filters\renderer\VideoRenderers;..\thirdparty;..\thirdparty\MediaInfo;..\thirdparty\ZenLib;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
+ <ItemDefinitionGroup Condition="!$(Configuration.Contains('Lite'))">
<Link>
- <AdditionalDependencies>RARFileSource.res;delayimp.lib;dsound.lib;dxguid.lib;GdiPlus.lib;Psapi.lib;SetupAPI.lib;strmiids.lib;UxTheme.lib;Uuid.Lib;Vfw32.lib;Version.lib;Winmm.lib;d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\$(Configuration)_$(Platform);$(SolutionDir)lib64;$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <DelayLoadDLLs>d3d9.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
- <SupportUnloadOfDelayLoadedDLL>true</SupportUnloadOfDelayLoadedDLL>
+ <AdditionalDependencies>RARFileSource.res;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\mpc-hc.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Lite|x64'">
- <PreBuildEvent>
- <Command>..\..\update_version.bat</Command>
- </PreBuildEvent>
<ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\DSUtil;..\filters\renderer\VideoRenderers;..\thirdparty;$(DXSDK_DIR)Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MPCHC_LITE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\thirdparty\ZenLib\library\Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>AudioSwitcher.lib;BaseClasses.lib;BaseMuxer.lib;BufferFilter.lib;CmdUI.lib;DeCSS.lib;DSMMuxer.lib;DSUtil.lib;MathLibFix.lib;Filters.lib;kasumi.lib;LCDUI.lib;lcms2.lib;MatroskaMuxer.lib;MpcAudioRenderer.lib;ResizableLib.lib;sizecbar.lib;SoundTouch.lib;StreamDriveThru.lib;SubPic.lib;Subtitles.lib;SubtitleSource.lib;SyncClock.lib;system.lib;TreePropSheet.lib;unrar.lib;VideoRenderers.lib;WavDest.lib;zlib.lib;UxTheme.lib;delayimp.lib;dsound.lib;dxguid.lib;GdiPlus.lib;Psapi.lib;SetupAPI.lib;strmiids.lib;Uuid.Lib;Version.lib;Vfw32.lib;Winmm.lib;d3d9.lib;mhook.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)bin\lib\Release_$(Platform);$(SolutionDir)lib64;$(DXSDK_DIR)Lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <DelayLoadDLLs>d3d9.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
- <SupportUnloadOfDelayLoadedDLL>true</SupportUnloadOfDelayLoadedDLL>
- </Link>
- <ProjectReference>
- <LinkLibraryDependencies>false</LinkLibraryDependencies>
- </ProjectReference>
- <Manifest>
- <AdditionalManifestFiles>$(ProjectDir)res\mpc-hc.exe.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
- </Manifest>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="AboutDlg.cpp" />
@@ -320,9 +134,12 @@
<ClCompile Include="ColorButton.cpp" />
<ClCompile Include="ComPropertyPage.cpp" />
<ClCompile Include="ComPropertySheet.cpp" />
+ <ClCompile Include="CoverArt.cpp" />
+ <ClCompile Include="CrashReporter.cpp" />
<ClCompile Include="CShockwaveFlash.cpp" />
<ClCompile Include="DebugShadersDlg.cpp" />
<ClCompile Include="DeinterlacerFilter.cpp" />
+ <ClCompile Include="DpiHelper.cpp" />
<ClCompile Include="DVBChannel.cpp" />
<ClCompile Include="EditListEditor.cpp" />
<ClCompile Include="EditWithButton.cpp" />
@@ -335,8 +152,9 @@
<ClCompile Include="FGManager.cpp" />
<ClCompile Include="FGManagerBDA.cpp" />
<ClCompile Include="FileAssoc.cpp" />
- <ClCompile Include="FileDropTarget.cpp" />
+ <ClCompile Include="DropTarget.cpp" />
<ClCompile Include="FreeviewEPGDecode.cpp" />
+ <ClCompile Include="ImageGrayer.cpp" />
<ClCompile Include="MainFrmControls.cpp" />
<ClCompile Include="MediaPositionList.cpp" />
<ClCompile Include="FloatEdit.cpp" />
@@ -344,13 +162,11 @@
<ClCompile Include="GoToDlg.cpp" />
<ClCompile Include="GraphThread.cpp" />
<ClCompile Include="Ifo.cpp" />
- <ClCompile Include="ISDb.cpp" />
<ClCompile Include="KeyProvider.cpp" />
<ClCompile Include="LcdSupport.cpp" />
<ClCompile Include="MainFrm.cpp" />
<ClCompile Include="MediaFormats.cpp" />
<ClCompile Include="MediaTypesDlg.cpp" />
- <ClCompile Include="MiniDump.cpp" />
<ClCompile Include="Monitors.cpp" />
<ClCompile Include="MouseTouch.cpp" />
<ClCompile Include="MPCPngImage.cpp" />
@@ -376,6 +192,7 @@
<ClCompile Include="PnSPresetsDlg.cpp" />
<ClCompile Include="PPageAccelTbl.cpp" />
<ClCompile Include="PPageAdvanced.cpp" />
+ <ClCompile Include="PPageAudioRenderer.cpp" />
<ClCompile Include="PPageAudioSwitcher.cpp" />
<ClCompile Include="PPageBase.cpp" />
<ClCompile Include="PPageCapture.cpp" />
@@ -417,6 +234,7 @@
<ClCompile Include="Shaders.cpp" />
<ClCompile Include="ShockwaveGraph.cpp" />
<ClCompile Include="SkypeMoodMsgHandler.cpp" />
+ <ClCompile Include="SVGImage.cpp" />
<ClCompile Include="Translations.cpp" />
<ClCompile Include="StaticLink.cpp" />
<ClCompile Include="StatusLabel.cpp" />
@@ -424,6 +242,10 @@
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="SubtitleDlDlg.cpp" />
+ <ClCompile Include="SubtitlesProvider.cpp" />
+ <ClCompile Include="SubtitlesProviders.cpp" />
+ <ClCompile Include="SubtitlesProvidersUtils.cpp" />
+ <ClCompile Include="SubtitleUpDlg.cpp" />
<ClCompile Include="TextPassThruFilter.cpp" />
<ClCompile Include="TunerScanDlg.cpp" />
<ClCompile Include="UpdateChecker.cpp" />
@@ -436,11 +258,11 @@
<ClCompile Include="WebServer.cpp" />
<ClCompile Include="WebServerSocket.cpp" />
<ClCompile Include="WinHotkeyCtrl.cpp" />
+ <ClCompile Include="..\thirdparty\XmlRpc4Win\TimXmlRpc.cpp">
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\thirdparty\LAVFilters\LAVAudioSettings.h" />
- <ClInclude Include="..\thirdparty\LAVFilters\LAVSplitterSettings.h" />
- <ClInclude Include="..\thirdparty\LAVFilters\LAVVideoSettings.h" />
<ClInclude Include="AboutDlg.h" />
<ClInclude Include="AppSettings.h" />
<ClInclude Include="AuthDlg.h" />
@@ -450,9 +272,12 @@
<ClInclude Include="ColorButton.h" />
<ClInclude Include="ComPropertyPage.h" />
<ClInclude Include="ComPropertySheet.h" />
+ <ClInclude Include="CoverArt.h" />
+ <ClInclude Include="CrashReporter.h" />
<ClInclude Include="CShockwaveFlash.h" />
<ClInclude Include="DebugShadersDlg.h" />
<ClInclude Include="DeinterlacerFilter.h" />
+ <ClInclude Include="DpiHelper.h" />
<ClInclude Include="DVBChannel.h" />
<ClInclude Include="EditListEditor.h" />
<ClInclude Include="EditWithButton.h" />
@@ -465,7 +290,7 @@
<ClInclude Include="FGManager.h" />
<ClInclude Include="FGManagerBDA.h" />
<ClInclude Include="FileAssoc.h" />
- <ClInclude Include="FileDropTarget.h" />
+ <ClInclude Include="DropTarget.h" />
<ClInclude Include="FilterEnum.h" />
<ClInclude Include="FloatEdit.h" />
<ClInclude Include="FreeviewEPGDecode.h" />
@@ -474,16 +299,16 @@
<ClInclude Include="GraphThread.h" />
<ClInclude Include="Ifo.h" />
<ClInclude Include="IGraphBuilder2.h" />
+ <ClInclude Include="ImageGrayer.h" />
<ClInclude Include="InternalFiltersConfig.h" />
- <ClInclude Include="ISDb.h" />
<ClInclude Include="KeyProvider.h" />
<ClInclude Include="LcdSupport.h" />
+ <ClInclude Include="Logger.h" />
<ClInclude Include="MainFrm.h" />
<ClInclude Include="MainFrmControls.h" />
<ClInclude Include="MediaFormats.h" />
<ClInclude Include="MediaPositionList.h" />
<ClInclude Include="MediaTypesDlg.h" />
- <ClInclude Include="MiniDump.h" />
<ClInclude Include="Monitors.h" />
<ClInclude Include="MouseTouch.h" />
<ClInclude Include="MpcApi.h" />
@@ -510,6 +335,7 @@
<ClInclude Include="PnSPresetsDlg.h" />
<ClInclude Include="PPageAccelTbl.h" />
<ClInclude Include="PPageAdvanced.h" />
+ <ClInclude Include="PPageAudioRenderer.h" />
<ClInclude Include="PPageAudioSwitcher.h" />
<ClInclude Include="PPageBase.h" />
<ClInclude Include="PPageCapture.h" />
@@ -558,6 +384,11 @@
<ClInclude Include="stdafx.h" />
<ClInclude Include="Struct.h" />
<ClInclude Include="SubtitleDlDlg.h" />
+ <ClInclude Include="SubtitlesProvider.h" />
+ <ClInclude Include="SubtitlesProviders.h" />
+ <ClInclude Include="SubtitlesProvidersUtils.h" />
+ <ClInclude Include="SubtitleUpDlg.h" />
+ <ClInclude Include="SVGImage.h" />
<ClInclude Include="TextPassThruFilter.h" />
<ClInclude Include="TimerWrappers.h" />
<ClInclude Include="Translations.h" />
@@ -573,15 +404,9 @@
<ClInclude Include="WebServer.h" />
<ClInclude Include="WebServerSocket.h" />
<ClInclude Include="WinHotkeyCtrl.h" />
+ <ClInclude Include="..\thirdparty\XmlRpc4Win\timxmlrpc.h" />
</ItemGroup>
<ItemGroup>
- <Object Include="..\thirdparty\LAVFilters\src\bin_$(PlatformName)\ffmpeg\GCCInfo.o">
- <FileType>Document</FileType>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug Lite|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug Lite|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release Lite|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release Lite|Win32'">true</ExcludedFromBuild>
- </Object>
<None Include="res\ani.avi" />
<None Include="res\icon.ico">
<FileType>ICO</FileType>
@@ -627,7 +452,6 @@
<None Include="res\noaudio.bmp" />
<None Include="res\onoff.bmp" />
<None Include="res\shaders\final.psh" />
- <None Include="res\shaders\LCDAngleCorrection.psh" />
<None Include="res\single.ico" />
<None Include="res\stereo.bmp" />
<None Include="res\streamtypes.bmp" />
@@ -637,29 +461,8 @@
<None Include="res\tickcross.png" />
<None Include="res\toolbar.bmp" />
<None Include="res\toolbarw7.png" />
- <None Include="res\shaders\BT601BT709.psh" />
- <None Include="res\shaders\contour.psh" />
- <None Include="res\shaders\deinterlace (blend).psh" />
- <None Include="res\shaders\denoise.psh" />
- <None Include="res\shaders\EdgeSharpen.psh" />
- <None Include="res\shaders\emboss.psh" />
<None Include="res\shaders\empty.psh" />
- <None Include="res\shaders\grayscale.psh" />
- <None Include="res\shaders\invert.psh" />
- <None Include="res\shaders\letterbox.psh" />
- <None Include="res\shaders\levels.psh" />
- <None Include="res\shaders\levels2.psh" />
- <None Include="res\shaders\levels3.psh" />
- <None Include="res\shaders\nightvision.psh" />
- <None Include="res\shaders\procamp.psh" />
<None Include="res\shaders\resizer.psh" />
- <None Include="res\shaders\sharpen.psh" />
- <None Include="res\shaders\SharpenComplex.psh" />
- <None Include="res\shaders\SharpenComplex2.psh" />
- <None Include="res\shaders\sphere.psh" />
- <None Include="res\shaders\spotlight.psh" />
- <None Include="res\shaders\wave.psh" />
- <None Include="res\shaders\YV12ChromaUpsampling.psh" />
<None Include="res\web\404.html" />
<None Include="res\web\browser.html" />
<None Include="res\web\controls.html" />
@@ -708,15 +511,15 @@
<ResourceCompile Include="mpc-hc.rc" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\..\build\BuildConfig.vcxproj">
+ <Project>{981574ae-5a5e-4f27-bdf1-1b841e374cff}</Project>
+ </ProjectReference>
<ProjectReference Include="..\DeCSS\DeCSS.vcxproj">
<Project>{1a2dfd1a-3c6c-44d1-909d-294af646b575}</Project>
</ProjectReference>
<ProjectReference Include="..\DSUtil\DSUtil.vcxproj">
<Project>{fc70988b-1ae5-4381-866d-4f405e28ac42}</Project>
</ProjectReference>
- <ProjectReference Include="..\MathLibFix\MathLibFix.vcxproj">
- <Project>{fc9fc17f-70bf-4aca-8285-c24d1889bacb}</Project>
- </ProjectReference>
<ProjectReference Include="..\thirdparty\BaseClasses\BaseClasses.vcxproj">
<Project>{e8a3f6fa-ae1c-4c8e-a0b6-9c8480324eaa}</Project>
</ProjectReference>
@@ -756,9 +559,6 @@
<ProjectReference Include="..\filters\reader\VTSReader\VTSReader.vcxproj">
<Project>{664e726b-eeee-403a-ac15-345d9c9e1375}</Project>
</ProjectReference>
- <ProjectReference Include="..\filters\renderer\MpcAudioRenderer\MpcAudioRenderer.vcxproj">
- <Project>{d0620ef4-1313-40d5-9069-a82f6fe26994}</Project>
- </ProjectReference>
<ProjectReference Include="..\filters\renderer\SyncClock\SyncClock.vcxproj">
<Project>{0b63409d-674d-47f8-a84e-87dbb7783189}</Project>
</ProjectReference>
@@ -789,6 +589,17 @@
<ProjectReference Include="..\Subtitles\Subtitles.vcxproj">
<Project>{5e56335f-0fb1-4eea-b240-d8dc5e0608e4}</Project>
</ProjectReference>
+ <ProjectReference Include="..\thirdparty\DoctorDump\DoctorDump.vcxproj">
+ <Project>{beceaff9-cdca-45ec-a1cf-658fa51818e6}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\thirdparty\bs2b\bs2b.vcxproj">
+ <Project>{0fd9bf8f-2397-4e23-b41e-e4624f35d646}</Project>
+ <Private>false</Private>
+ <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+ <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
+ <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
+ </ProjectReference>
<ProjectReference Include="..\thirdparty\LAVFilters\LAVFilters.vcxproj">
<Project>{ed257874-e12e-4143-af0a-0676da3bb18c}</Project>
</ProjectReference>
@@ -798,14 +609,35 @@
<ProjectReference Include="..\thirdparty\MediaInfo\MediaInfoLib.vcxproj">
<Project>{20e0f8d6-213c-460b-b361-9c725cb375c7}</Project>
</ProjectReference>
- <ProjectReference Include="..\thirdparty\mhook\mhook.vcxproj">
- <Project>{f841363c-a630-4716-8941-cddc1f32cfc3}</Project>
- </ProjectReference>
<ProjectReference Include="..\thirdparty\RARFileSource\RARFileSource.vcxproj">
<Project>{2b7f22d7-1750-47c5-8709-1a3688b62499}</Project>
</ProjectReference>
- <ProjectReference Include="..\thirdparty\SoundTouch\source\SoundTouch.vcxproj">
- <Project>{68a5dd20-7057-448b-8fe0-b6ac8d205509}</Project>
+ <ProjectReference Include="..\thirdparty\sanear\sanear\sanear.vcxproj">
+ <Project>{bb2b61af-734a-4dad-9326-07f4f9ea088f}</Project>
+ <Private>false</Private>
+ <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+ <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
+ <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
+ </ProjectReference>
+ <ProjectReference Include="..\thirdparty\SoundTouch\SoundTouch.vcxproj">
+ <Project>{4c7a1953-cbc4-42d5-a12f-bb512c64b547}</Project>
+ <Private>false</Private>
+ <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+ <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
+ <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
+ </ProjectReference>
+ <ProjectReference Include="..\thirdparty\soxr\soxr.vcxproj">
+ <Project>{7cbde5a1-9cbb-4139-93f5-09d8dba4427f}</Project>
+ <Private>false</Private>
+ <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+ <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
+ <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
+ </ProjectReference>
+ <ProjectReference Include="..\thirdparty\tinyxml2\tinyxml2.vcxproj">
+ <Project>{e02f0c35-fb01-4059-90f9-9ac19dc22fba}</Project>
</ProjectReference>
<ProjectReference Include="..\thirdparty\unrar\unrar.vcxproj">
<Project>{da8461c4-7683-4360-9372-2a9e0f1795c2}</Project>
@@ -819,6 +651,14 @@
<ProjectReference Include="..\thirdparty\ZenLib\ZenLib.vcxproj">
<Project>{0da1da7d-f393-4e7c-a7ce-cb5c6a67bc94}</Project>
</ProjectReference>
+ <ProjectReference Include="..\thirdparty\zita-resampler\zita-resampler.vcxproj">
+ <Project>{f3d02050-f39a-4103-8343-09285359a495}</Project>
+ <Private>false</Private>
+ <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+ <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
+ <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
+ </ProjectReference>
<ProjectReference Include="..\thirdparty\zlib\zlib.vcxproj">
<Project>{2fcd4b66-9cf9-4c8f-bc70-37cd20002d49}</Project>
</ProjectReference>
@@ -837,6 +677,17 @@
<ProjectReference Include="..\thirdparty\TreePropSheet\TreePropSheet.vcxproj">
<Project>{ab494732-ef6d-44d0-bcf8-80ff04858d10}</Project>
</ProjectReference>
+ <ProjectReference Include="CrashReporterDialog\CrashReporterDialog.vcxproj">
+ <Project>{5db958dd-8b25-45ef-8072-3356caf8ccd7}</Project>
+ <Private>false</Private>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+ <LinkLibraryDependencies>false</LinkLibraryDependencies>
+ <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
+ </ProjectReference>
+ <ProjectReference Include="..\thirdparty\minhook\minhook.vcxproj">
+ <Project>{303B855A-137D-45E9-AF6D-B7241C6E66D6}</Project>
+ </ProjectReference>
</ItemGroup>
<ItemGroup>
<Image Include="res\check_all.bmp" />
@@ -844,12 +695,14 @@
<Image Include="res\check_video.bmp" />
<Image Include="res\uncheck_all.bmp" />
</ItemGroup>
+ <ItemGroup>
+ <Image Include="res\subtitles\favicon_opensubtitles.ico" />
+ <Image Include="res\subtitles\favicon_podnapisi.ico" />
+ <Image Include="res\subtitles\favicon_subdb.ico" />
+ <Image Include="res\subtitles\favicon_titlovi.ico" />
+ <Image Include="res\subtitles\favicon_ysubs.ico" />
+ </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
- <ProjectExtensions>
- <VisualStudio>
- <UserProperties RESOURCE_FILE="mpc-hc.rc" />
- </VisualStudio>
- </ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/src/mpc-hc/mpc-hc.vcxproj.filters b/src/mpc-hc/mpc-hc.vcxproj.filters
index 45e034940..fb3d1641b 100644
--- a/src/mpc-hc/mpc-hc.vcxproj.filters
+++ b/src/mpc-hc/mpc-hc.vcxproj.filters
@@ -1,13 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{a3fe93d1-ca72-4b39-b871-30903c306f42}</UniqueIdentifier>
- <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ <Filter Include="Player Config">
+ <UniqueIdentifier>{43c75f5f-5e94-4d15-8f45-b39b7c36bd62}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{b58fe0a5-ede5-4a66-88ee-b0802cf2ff72}</UniqueIdentifier>
- <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ <Filter Include="Graph">
+ <UniqueIdentifier>{77a009db-eea1-41f2-8671-661a4843634e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Property Dialogs">
+ <UniqueIdentifier>{36ad4cd9-ded8-4c35-8a6d-1ffb3ddc2684}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="DVB">
+ <UniqueIdentifier>{ad577ec8-11b8-4fcf-8b57-72f6cdabf032}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Toolbars">
+ <UniqueIdentifier>{cf28b89c-1840-4771-ad84-96c85e9958b5}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Property Dialogs\LAV Filters Options">
+ <UniqueIdentifier>{cea104bc-b14e-42eb-9bf9-2201c523f77d}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Graph\Shockwave Flash">
+ <UniqueIdentifier>{ff5c37c3-46a0-4f57-b30e-02d892b73a00}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Helpers">
+ <UniqueIdentifier>{b48234f3-b7a0-4dc2-b23b-f4c33349aab1}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Build Info">
+ <UniqueIdentifier>{bd4abfc8-fc90-4a1d-adc4-7800f1ad7d31}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Integration">
+ <UniqueIdentifier>{aa019fb8-debd-45de-af25-ab3d5e22a7f3}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Integration\Logitech LCD">
+ <UniqueIdentifier>{c65b298e-e9cf-447f-a27a-1d30b7bd7d81}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Panels">
+ <UniqueIdentifier>{6c92dae3-76cc-449a-aa1d-f6d72742e757}</UniqueIdentifier>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{ee8489ea-968c-44c9-ae3a-35eb518513d2}</UniqueIdentifier>
@@ -16,780 +44,834 @@
<Filter Include="Resource Files\web">
<UniqueIdentifier>{26bd0b2a-4fea-4c63-b05b-f28243ac8d95}</UniqueIdentifier>
</Filter>
+ <Filter Include="Resource Files\web\img">
+ <UniqueIdentifier>{85c6230e-fa6b-497b-8d98-d4a066c86f48}</UniqueIdentifier>
+ </Filter>
<Filter Include="Resource Files\shaders">
<UniqueIdentifier>{662236d7-ad89-4026-bb57-bb27667da2e6}</UniqueIdentifier>
</Filter>
- <Filter Include="Resource Files\web\img">
- <UniqueIdentifier>{85c6230e-fa6b-497b-8d98-d4a066c86f48}</UniqueIdentifier>
+ <Filter Include="Property Dialogs\Player Options">
+ <UniqueIdentifier>{631eb474-a93b-4b48-a054-9758e8a1f959}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Property Dialogs\Player Options\Pages">
+ <UniqueIdentifier>{361375c5-889a-4432-90ba-83741194f7d1}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Property Dialogs\File Properties">
+ <UniqueIdentifier>{ef61c989-5105-4782-9fed-e8a56be95a46}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Property Dialogs\File Properties\Pages">
+ <UniqueIdentifier>{4a9b9989-f6a5-499e-9611-c7bfe024b7a3}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Graph\Quicktime">
+ <UniqueIdentifier>{712820f7-6798-4c06-b4ff-f66492918e78}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Graph\RealMedia">
+ <UniqueIdentifier>{f4c95cb0-6f49-4d24-9e78-0a89d8a8cf1e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Integration\Skype">
+ <UniqueIdentifier>{3e62affc-727b-4af9-95eb-76f4eb63918c}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Integration\Web">
+ <UniqueIdentifier>{d7f40587-25b5-46f1-90bb-6751caca4922}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Modal Dialogs">
+ <UniqueIdentifier>{c80b5d75-ba77-444e-98a0-c5af5d89a88c}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Custom Controls">
+ <UniqueIdentifier>{acb8c198-52e0-46e0-9e15-8991856fcb18}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\LAVFilters">
- <UniqueIdentifier>{3e7db9d0-2a51-4f12-b56d-220d267ef21b}</UniqueIdentifier>
+ <Filter Include="Main View">
+ <UniqueIdentifier>{0453474a-2716-4c52-b5f4-cf6bd9e31ed0}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Crash Reporter">
+ <UniqueIdentifier>{1d73f7db-64e8-4bc8-b0ca-72847253f467}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Subtitles">
+ <UniqueIdentifier>{20afe682-61a3-4123-9012-4c918a03f482}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="AppSettings.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Player Config</Filter>
</ClCompile>
- <ClCompile Include="AuthDlg.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="AboutDlg.cpp">
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
- <ClCompile Include="BaseGraph.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="AuthDlg.cpp">
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
- <ClCompile Include="ChildView.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="CmdLineHelpDlg.cpp">
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
- <ClCompile Include="ComPropertyPage.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="ColorButton.cpp">
+ <Filter>Custom Controls</Filter>
</ClCompile>
- <ClCompile Include="ComPropertySheet.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="DebugShadersDlg.cpp">
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
- <ClCompile Include="CShockwaveFlash.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="EditListEditor.cpp">
+ <Filter>Custom Controls</Filter>
</ClCompile>
- <ClCompile Include="DeinterlacerFilter.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="EditWithButton.cpp">
+ <Filter>Custom Controls</Filter>
</ClCompile>
<ClCompile Include="DVBChannel.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="EditListEditor.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="FakeFilterMapper2.cpp">
- <Filter>Source Files</Filter>
+ <Filter>DVB</Filter>
</ClCompile>
<ClCompile Include="FavoriteAddDlg.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
<ClCompile Include="FavoriteOrganizeDlg.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
<ClCompile Include="FGFilter.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Graph</Filter>
+ </ClCompile>
+ <ClCompile Include="FGFilterLAV.cpp">
+ <Filter>Graph</Filter>
</ClCompile>
<ClCompile Include="FGManager.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Graph</Filter>
</ClCompile>
<ClCompile Include="FGManagerBDA.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Graph</Filter>
</ClCompile>
- <ClCompile Include="FileDropTarget.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="GoToDlg.cpp">
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
- <ClCompile Include="FloatEdit.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="OpenDlg.cpp">
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
- <ClCompile Include="FullscreenWnd.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="OpenFileDlg.cpp">
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
- <ClCompile Include="GoToDlg.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PlayerSeekBar.cpp">
+ <Filter>Toolbars</Filter>
</ClCompile>
- <ClCompile Include="Ifo.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PlayerStatusBar.cpp">
+ <Filter>Toolbars</Filter>
</ClCompile>
- <ClCompile Include="ISDb.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="ComPropertyPage.cpp">
+ <Filter>Property Dialogs\LAV Filters Options</Filter>
</ClCompile>
- <ClCompile Include="KeyProvider.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="ComPropertySheet.cpp">
+ <Filter>Property Dialogs\LAV Filters Options</Filter>
</ClCompile>
- <ClCompile Include="LcdSupport.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="CShockwaveFlash.cpp">
+ <Filter>Graph\Shockwave Flash</Filter>
</ClCompile>
- <ClCompile Include="MainFrm.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="FileAssoc.cpp">
+ <Filter>Player Config</Filter>
+ </ClCompile>
+ <ClCompile Include="FloatEdit.cpp">
+ <Filter>Custom Controls</Filter>
+ </ClCompile>
+ <ClCompile Include="FreeviewEPGDecode.cpp">
+ <Filter>DVB</Filter>
+ </ClCompile>
+ <ClCompile Include="Ifo.cpp">
+ <Filter>Helpers</Filter>
+ </ClCompile>
+ <ClCompile Include="LcdSupport.cpp">
+ <Filter>Integration\Logitech LCD</Filter>
</ClCompile>
<ClCompile Include="MediaFormats.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Player Config</Filter>
</ClCompile>
- <ClCompile Include="MediaTypesDlg.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="MediaPositionList.cpp">
+ <Filter>Player Config</Filter>
</ClCompile>
- <ClCompile Include="MiniDump.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="MediaTypesDlg.cpp">
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
<ClCompile Include="Monitors.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Helpers</Filter>
</ClCompile>
- <ClCompile Include="Mpeg2SectionData.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="MPCPngImage.cpp">
+ <Filter>Helpers</Filter>
</ClCompile>
- <ClCompile Include="mplayerc.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="Mpeg2SectionData.cpp">
+ <Filter>DVB</Filter>
</ClCompile>
<ClCompile Include="MultiMonitor.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Helpers</Filter>
</ClCompile>
<ClCompile Include="OpenDirHelper.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="OpenDlg.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="OpenFileDlg.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="PlayerCaptureBar.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Helpers</Filter>
</ClCompile>
- <ClCompile Include="PlayerCaptureDialog.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PlayerBar.cpp">
+ <Filter>Panels</Filter>
</ClCompile>
<ClCompile Include="PlayerInfoBar.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Toolbars</Filter>
</ClCompile>
<ClCompile Include="PlayerListCtrl.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="PlayerNavigationBar.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="PlayerNavigationDialog.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="PlayerPlaylistBar.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="PlayerSeekBar.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="PlayerStatusBar.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="PlayerSubresyncBar.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Custom Controls</Filter>
</ClCompile>
<ClCompile Include="PlayerToolBar.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="Playlist.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Toolbars</Filter>
</ClCompile>
<ClCompile Include="PnSPresetsDlg.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
<ClCompile Include="PPageAccelTbl.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
+ </ClCompile>
+ <ClCompile Include="PPageAdvanced.cpp">
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageAudioSwitcher.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageBase.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs</Filter>
</ClCompile>
<ClCompile Include="PPageCapture.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageDVD.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageExternalFilters.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
+ </ClCompile>
+ <ClCompile Include="PPageFileInfoSheet.cpp">
+ <Filter>Property Dialogs\File Properties</Filter>
</ClCompile>
<ClCompile Include="PPageFileInfoClip.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\File Properties\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageFileInfoDetails.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\File Properties\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageFileInfoRes.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="PPageFileInfoSheet.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\File Properties\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageFileMediaInfo.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\File Properties\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageFormats.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageFullscreen.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageInternalFilters.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageLogo.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageMisc.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageOutput.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPagePlayback.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPagePlayer.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
+ </ClCompile>
+ <ClCompile Include="PPageShaders.cpp">
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageSheet.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options</Filter>
</ClCompile>
<ClCompile Include="PPageSubMisc.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageSubStyle.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageSubtitles.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageSync.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageTweaks.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="PPageWebServer.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
<ClCompile Include="QuicktimeGraph.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Graph\Quicktime</Filter>
</ClCompile>
<ClCompile Include="RealMediaGraph.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Graph\RealMedia</Filter>
</ClCompile>
<ClCompile Include="RealMediaWindowlessSite.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Graph\RealMedia</Filter>
</ClCompile>
<ClCompile Include="RegFilterChooserDlg.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
<ClCompile Include="SaveDlg.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Modal Dialogs</Filter>
+ </ClCompile>
+ <ClCompile Include="SaveImageDialog.cpp">
+ <Filter>Modal Dialogs</Filter>
+ </ClCompile>
+ <ClCompile Include="SaveSubtitlesFileDialog.cpp">
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
<ClCompile Include="SaveTextFileDialog.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
<ClCompile Include="SaveThumbnailsDialog.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
<ClCompile Include="SelectMediaType.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Modal Dialogs</Filter>
+ </ClCompile>
+ <ClCompile Include="Shaders.cpp">
+ <Filter>Player Config</Filter>
</ClCompile>
<ClCompile Include="ShockwaveGraph.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Graph\Shockwave Flash</Filter>
+ </ClCompile>
+ <ClCompile Include="SkypeMoodMsgHandler.cpp">
+ <Filter>Integration\Skype</Filter>
</ClCompile>
<ClCompile Include="StaticLink.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Custom Controls</Filter>
</ClCompile>
<ClCompile Include="StatusLabel.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Custom Controls</Filter>
+ </ClCompile>
+ <ClCompile Include="SubtitlesProvider.cpp">
+ <Filter>Subtitles</Filter>
+ </ClCompile>
+ <ClCompile Include="SubtitlesProviders.cpp">
+ <Filter>Subtitles</Filter>
</ClCompile>
- <ClCompile Include="stdafx.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="SubtitlesProvidersUtils.cpp">
+ <Filter>Subtitles</Filter>
+ </ClCompile>
+ <ClCompile Include="SubtitleUpDlg.cpp">
+ <Filter>Subtitles</Filter>
</ClCompile>
<ClCompile Include="SubtitleDlDlg.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Subtitles</Filter>
</ClCompile>
- <ClCompile Include="TextPassThruFilter.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="Translations.cpp">
+ <Filter>Player Config</Filter>
</ClCompile>
<ClCompile Include="TunerScanDlg.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClCompile>
- <ClCompile Include="VMROSD.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="UpdateCheckerDlg.cpp">
+ <Filter>Modal Dialogs</Filter>
+ </ClCompile>
+ <ClCompile Include="VersionInfo.cpp">
+ <Filter>Build Info</Filter>
+ </ClCompile>
+ <ClCompile Include="vkCodes.cpp">
+ <Filter>Helpers</Filter>
</ClCompile>
<ClCompile Include="VolumeCtrl.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Custom Controls</Filter>
</ClCompile>
<ClCompile Include="WebClientSocket.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Integration\Web</Filter>
</ClCompile>
<ClCompile Include="WebServer.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Integration\Web</Filter>
</ClCompile>
<ClCompile Include="WebServerSocket.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="vkCodes.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Integration\Web</Filter>
</ClCompile>
<ClCompile Include="WinHotkeyCtrl.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="EditWithButton.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="UpdateChecker.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Custom Controls</Filter>
</ClCompile>
- <ClCompile Include="UpdateCheckerDlg.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="BaseGraph.cpp">
+ <Filter>Graph</Filter>
</ClCompile>
- <ClCompile Include="PlayerBar.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="DeinterlacerFilter.cpp">
+ <Filter>Graph</Filter>
</ClCompile>
- <ClCompile Include="AboutDlg.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="FakeFilterMapper2.cpp">
+ <Filter>Graph</Filter>
</ClCompile>
- <ClCompile Include="MPCPngImage.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="GraphThread.cpp">
+ <Filter>Graph</Filter>
</ClCompile>
- <ClCompile Include="FileAssoc.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="KeyProvider.cpp">
+ <Filter>Graph</Filter>
</ClCompile>
- <ClCompile Include="GraphThread.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="TextPassThruFilter.cpp">
+ <Filter>Graph</Filter>
+ </ClCompile>
+ <ClCompile Include="EventDispatcher.cpp" />
+ <ClCompile Include="MainFrm.cpp" />
+ <ClCompile Include="MainFrmControls.cpp" />
+ <ClCompile Include="mplayerc.cpp" />
+ <ClCompile Include="Playlist.cpp" />
+ <ClCompile Include="stdafx.cpp" />
+ <ClCompile Include="UpdateChecker.cpp" />
+ <ClCompile Include="ChildView.cpp">
+ <Filter>Main View</Filter>
</ClCompile>
- <ClCompile Include="MediaPositionList.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="CoverArt.cpp">
+ <Filter>Main View</Filter>
</ClCompile>
- <ClCompile Include="SaveSubtitlesFileDialog.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="MouseTouch.cpp">
+ <Filter>Main View</Filter>
</ClCompile>
- <ClCompile Include="SkypeMoodMsgHandler.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="FullscreenWnd.cpp">
+ <Filter>Main View</Filter>
</ClCompile>
- <ClCompile Include="FreeviewEPGDecode.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="VMROSD.cpp">
+ <Filter>Main View</Filter>
</ClCompile>
- <ClCompile Include="FGFilterLAV.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PlayerCaptureBar.cpp">
+ <Filter>Panels</Filter>
</ClCompile>
- <ClCompile Include="VersionInfo.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PlayerCaptureDialog.cpp">
+ <Filter>Panels</Filter>
</ClCompile>
- <ClCompile Include="MouseTouch.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PlayerNavigationBar.cpp">
+ <Filter>Panels</Filter>
</ClCompile>
- <ClCompile Include="MainFrmControls.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PlayerNavigationDialog.cpp">
+ <Filter>Panels</Filter>
</ClCompile>
- <ClCompile Include="EventDispatcher.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PlayerSubresyncBar.cpp">
+ <Filter>Panels</Filter>
</ClCompile>
- <ClCompile Include="Shaders.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PlayerPlaylistBar.cpp">
+ <Filter>Panels</Filter>
</ClCompile>
- <ClCompile Include="PPageShaders.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="DropTarget.cpp">
+ <Filter>Helpers</Filter>
</ClCompile>
- <ClCompile Include="DebugShadersDlg.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="CrashReporter.cpp">
+ <Filter>Crash Reporter</Filter>
</ClCompile>
- <ClCompile Include="Translations.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="PPageAudioRenderer.cpp">
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClCompile>
- <ClCompile Include="ColorButton.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="DpiHelper.cpp">
+ <Filter>Helpers</Filter>
</ClCompile>
- <ClCompile Include="PPageAdvanced.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="..\thirdparty\XmlRpc4Win\TimXmlRpc.cpp">
+ <Filter>Subtitles</Filter>
</ClCompile>
- <ClCompile Include="SaveImageDialog.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="SVGImage.cpp">
+ <Filter>Helpers</Filter>
</ClCompile>
- <ClCompile Include="CmdLineHelpDlg.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="ImageGrayer.cpp">
+ <Filter>Helpers</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="AppSettings.h">
- <Filter>Header Files</Filter>
+ <Filter>Player Config</Filter>
</ClInclude>
- <ClInclude Include="AuthDlg.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="AboutDlg.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="BaseGraph.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="AuthDlg.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="ChildView.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="CmdLineHelpDlg.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="ComPropertyPage.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="ColorButton.h">
+ <Filter>Custom Controls</Filter>
</ClInclude>
- <ClInclude Include="ComPropertySheet.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="DebugShadersDlg.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="CShockwaveFlash.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="EditListEditor.h">
+ <Filter>Custom Controls</Filter>
</ClInclude>
- <ClInclude Include="DeinterlacerFilter.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="EditWithButton.h">
+ <Filter>Custom Controls</Filter>
</ClInclude>
<ClInclude Include="DVBChannel.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="EditListEditor.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="FakeFilterMapper2.h">
- <Filter>Header Files</Filter>
+ <Filter>DVB</Filter>
</ClInclude>
<ClInclude Include="FavoriteAddDlg.h">
- <Filter>Header Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
<ClInclude Include="FavoriteOrganizeDlg.h">
- <Filter>Header Files</Filter>
+ <Filter>Modal Dialogs</Filter>
+ </ClInclude>
+ <ClInclude Include="FGManagerBDA.h">
+ <Filter>Graph</Filter>
</ClInclude>
<ClInclude Include="FGFilter.h">
- <Filter>Header Files</Filter>
+ <Filter>Graph</Filter>
+ </ClInclude>
+ <ClInclude Include="FGFilterLAV.h">
+ <Filter>Graph</Filter>
</ClInclude>
<ClInclude Include="FGManager.h">
- <Filter>Header Files</Filter>
+ <Filter>Graph</Filter>
</ClInclude>
- <ClInclude Include="FGManagerBDA.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="GoToDlg.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="FileDropTarget.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="OpenDlg.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="FilterEnum.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="OpenFileDlg.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="FloatEdit.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PlayerSeekBar.h">
+ <Filter>Toolbars</Filter>
</ClInclude>
- <ClInclude Include="FullscreenWnd.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PlayerStatusBar.h">
+ <Filter>Toolbars</Filter>
</ClInclude>
- <ClInclude Include="GoToDlg.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="ComPropertyPage.h">
+ <Filter>Property Dialogs\LAV Filters Options</Filter>
</ClInclude>
- <ClInclude Include="Ifo.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="ComPropertySheet.h">
+ <Filter>Property Dialogs\LAV Filters Options</Filter>
</ClInclude>
- <ClInclude Include="IGraphBuilder2.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="CShockwaveFlash.h">
+ <Filter>Graph\Shockwave Flash</Filter>
</ClInclude>
- <ClInclude Include="InternalFiltersConfig.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="FileAssoc.h">
+ <Filter>Player Config</Filter>
</ClInclude>
- <ClInclude Include="ISDb.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="FloatEdit.h">
+ <Filter>Custom Controls</Filter>
</ClInclude>
- <ClInclude Include="KeyProvider.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="FreeviewEPGDecode.h">
+ <Filter>DVB</Filter>
</ClInclude>
- <ClInclude Include="LcdSupport.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="Ifo.h">
+ <Filter>Helpers</Filter>
+ </ClInclude>
+ <ClInclude Include="InternalFiltersConfig.h">
+ <Filter>Player Config</Filter>
</ClInclude>
- <ClInclude Include="MainFrm.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="LcdSupport.h">
+ <Filter>Integration\Logitech LCD</Filter>
</ClInclude>
<ClInclude Include="MediaFormats.h">
- <Filter>Header Files</Filter>
+ <Filter>Player Config</Filter>
</ClInclude>
- <ClInclude Include="MediaTypesDlg.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="MediaPositionList.h">
+ <Filter>Player Config</Filter>
</ClInclude>
- <ClInclude Include="MiniDump.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="MediaTypesDlg.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
<ClInclude Include="Monitors.h">
- <Filter>Header Files</Filter>
+ <Filter>Helpers</Filter>
</ClInclude>
<ClInclude Include="MpcApi.h">
- <Filter>Header Files</Filter>
+ <Filter>Integration</Filter>
</ClInclude>
- <ClInclude Include="Mpeg2SectionData.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="MPCPngImage.h">
+ <Filter>Helpers</Filter>
</ClInclude>
- <ClInclude Include="mplayerc.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="Mpeg2SectionData.h">
+ <Filter>DVB</Filter>
</ClInclude>
<ClInclude Include="MultiMonitor.h">
- <Filter>Header Files</Filter>
+ <Filter>Helpers</Filter>
</ClInclude>
<ClInclude Include="OpenDirHelper.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="OpenDlg.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="OpenFileDlg.h">
- <Filter>Header Files</Filter>
+ <Filter>Helpers</Filter>
</ClInclude>
- <ClInclude Include="PlayerCaptureBar.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PlayerCaptureDialog.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PlayerBar.h">
+ <Filter>Panels</Filter>
</ClInclude>
<ClInclude Include="PlayerInfoBar.h">
- <Filter>Header Files</Filter>
+ <Filter>Toolbars</Filter>
</ClInclude>
<ClInclude Include="PlayerListCtrl.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PlayerNavigationBar.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PlayerNavigationDialog.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PlayerPlaylistBar.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PlayerSeekBar.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PlayerStatusBar.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PlayerSubresyncBar.h">
- <Filter>Header Files</Filter>
+ <Filter>Custom Controls</Filter>
</ClInclude>
<ClInclude Include="PlayerToolBar.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="Playlist.h">
- <Filter>Header Files</Filter>
+ <Filter>Toolbars</Filter>
</ClInclude>
<ClInclude Include="PnSPresetsDlg.h">
- <Filter>Header Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
<ClInclude Include="PPageAccelTbl.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
+ </ClInclude>
+ <ClInclude Include="PPageAdvanced.h">
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageAudioSwitcher.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageBase.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs</Filter>
</ClInclude>
<ClInclude Include="PPageCapture.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageDVD.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageExternalFilters.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
+ </ClInclude>
+ <ClInclude Include="PPageFileInfoSheet.h">
+ <Filter>Property Dialogs\File Properties</Filter>
</ClInclude>
<ClInclude Include="PPageFileInfoClip.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\File Properties\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageFileInfoDetails.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\File Properties\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageFileInfoRes.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PPageFileInfoSheet.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\File Properties\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageFileMediaInfo.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\File Properties\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageFormats.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageFullscreen.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageInternalFilters.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageLogo.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageMisc.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageOutput.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPagePlayback.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPagePlayer.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
+ </ClInclude>
+ <ClInclude Include="PPageShaders.h">
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageSheet.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options</Filter>
</ClInclude>
<ClInclude Include="PPageSubMisc.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageSubStyle.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
+ </ClInclude>
+ <ClInclude Include="PPageWebServer.h">
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageSubtitles.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageSync.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="PPageTweaks.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PPageWebServer.h">
- <Filter>Header Files</Filter>
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
<ClInclude Include="QuicktimeGraph.h">
- <Filter>Header Files</Filter>
+ <Filter>Graph\Quicktime</Filter>
</ClInclude>
<ClInclude Include="RealMediaGraph.h">
- <Filter>Header Files</Filter>
+ <Filter>Graph\RealMedia</Filter>
</ClInclude>
<ClInclude Include="RealMediaWindowlessSite.h">
- <Filter>Header Files</Filter>
+ <Filter>Graph\RealMedia</Filter>
</ClInclude>
<ClInclude Include="RegFilterChooserDlg.h">
- <Filter>Header Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="resource.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="SaveThumbnailsDialog.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
<ClInclude Include="SaveDlg.h">
- <Filter>Header Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="SaveTextFileDialog.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="SaveImageDialog.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="SaveThumbnailsDialog.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="SaveSubtitlesFileDialog.h">
+ <Filter>Modal Dialogs</Filter>
+ </ClInclude>
+ <ClInclude Include="SaveTextFileDialog.h">
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
<ClInclude Include="SelectMediaType.h">
- <Filter>Header Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
<ClInclude Include="SettingsDefines.h">
- <Filter>Header Files</Filter>
+ <Filter>Player Config</Filter>
+ </ClInclude>
+ <ClInclude Include="Shaders.h">
+ <Filter>Player Config</Filter>
</ClInclude>
<ClInclude Include="ShockwaveGraph.h">
- <Filter>Header Files</Filter>
+ <Filter>Graph\Shockwave Flash</Filter>
+ </ClInclude>
+ <ClInclude Include="SkypeMoodMsgHandler.h">
+ <Filter>Integration\Skype</Filter>
</ClInclude>
<ClInclude Include="StaticLink.h">
- <Filter>Header Files</Filter>
+ <Filter>Custom Controls</Filter>
</ClInclude>
<ClInclude Include="StatusLabel.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="stdafx.h">
- <Filter>Header Files</Filter>
+ <Filter>Custom Controls</Filter>
</ClInclude>
<ClInclude Include="Struct.h">
- <Filter>Header Files</Filter>
+ <Filter>Helpers</Filter>
+ </ClInclude>
+ <ClInclude Include="SubtitlesProvider.h">
+ <Filter>Subtitles</Filter>
+ </ClInclude>
+ <ClInclude Include="SubtitlesProviders.h">
+ <Filter>Subtitles</Filter>
+ </ClInclude>
+ <ClInclude Include="SubtitlesProvidersUtils.h">
+ <Filter>Subtitles</Filter>
+ </ClInclude>
+ <ClInclude Include="SubtitleUpDlg.h">
+ <Filter>Subtitles</Filter>
</ClInclude>
<ClInclude Include="SubtitleDlDlg.h">
- <Filter>Header Files</Filter>
+ <Filter>Subtitles</Filter>
</ClInclude>
- <ClInclude Include="TextPassThruFilter.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="TimerWrappers.h">
+ <Filter>Helpers</Filter>
+ </ClInclude>
+ <ClInclude Include="Translations.h">
+ <Filter>Player Config</Filter>
</ClInclude>
<ClInclude Include="TunerScanDlg.h">
- <Filter>Header Files</Filter>
+ <Filter>Modal Dialogs</Filter>
</ClInclude>
- <ClInclude Include="VMROSD.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="UpdateCheckerDlg.h">
+ <Filter>Modal Dialogs</Filter>
+ </ClInclude>
+ <ClInclude Include="VersionInfo.h">
+ <Filter>Build Info</Filter>
+ </ClInclude>
+ <ClInclude Include="vkCodes.h">
+ <Filter>Helpers</Filter>
</ClInclude>
<ClInclude Include="VolumeCtrl.h">
- <Filter>Header Files</Filter>
+ <Filter>Custom Controls</Filter>
</ClInclude>
<ClInclude Include="WebClientSocket.h">
- <Filter>Header Files</Filter>
+ <Filter>Integration\Web</Filter>
</ClInclude>
<ClInclude Include="WebServer.h">
- <Filter>Header Files</Filter>
+ <Filter>Integration\Web</Filter>
</ClInclude>
<ClInclude Include="WebServerSocket.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="vkCodes.h">
- <Filter>Header Files</Filter>
+ <Filter>Integration\Web</Filter>
</ClInclude>
<ClInclude Include="WinHotkeyCtrl.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="EditWithButton.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="UpdateChecker.h">
- <Filter>Header Files</Filter>
+ <Filter>Custom Controls</Filter>
</ClInclude>
- <ClInclude Include="UpdateCheckerDlg.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PlayerBar.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="AboutDlg.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="BaseGraph.h">
+ <Filter>Graph</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\version.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="DeinterlacerFilter.h">
+ <Filter>Graph</Filter>
</ClInclude>
- <ClInclude Include="MPCPngImage.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="FakeFilterMapper2.h">
+ <Filter>Graph</Filter>
</ClInclude>
- <ClInclude Include="FileAssoc.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="FilterEnum.h">
+ <Filter>Graph</Filter>
</ClInclude>
<ClInclude Include="GraphThread.h">
- <Filter>Header Files</Filter>
+ <Filter>Graph</Filter>
</ClInclude>
- <ClInclude Include="MediaPositionList.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="IGraphBuilder2.h">
+ <Filter>Graph</Filter>
</ClInclude>
- <ClInclude Include="SaveSubtitlesFileDialog.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="KeyProvider.h">
+ <Filter>Graph</Filter>
</ClInclude>
- <ClInclude Include="SkypeMoodMsgHandler.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="TextPassThruFilter.h">
+ <Filter>Graph</Filter>
+ </ClInclude>
+ <ClInclude Include="EventDispatcher.h" />
+ <ClInclude Include="MainFrm.h" />
+ <ClInclude Include="MainFrmControls.h" />
+ <ClInclude Include="mplayerc.h" />
+ <ClInclude Include="Playlist.h" />
+ <ClInclude Include="resource.h" />
+ <ClInclude Include="stdafx.h" />
+ <ClInclude Include="UpdateChecker.h" />
+ <ClInclude Include="CoverArt.h">
+ <Filter>Main View</Filter>
</ClInclude>
- <ClInclude Include="FreeviewEPGDecode.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="ChildView.h">
+ <Filter>Main View</Filter>
</ClInclude>
- <ClInclude Include="FGFilterLAV.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="MouseTouch.h">
+ <Filter>Main View</Filter>
</ClInclude>
- <ClInclude Include="..\thirdparty\LAVFilters\LAVAudioSettings.h">
- <Filter>Header Files\LAVFilters</Filter>
+ <ClInclude Include="FullscreenWnd.h">
+ <Filter>Main View</Filter>
</ClInclude>
- <ClInclude Include="..\thirdparty\LAVFilters\LAVSplitterSettings.h">
- <Filter>Header Files\LAVFilters</Filter>
+ <ClInclude Include="VMROSD.h">
+ <Filter>Main View</Filter>
</ClInclude>
- <ClInclude Include="..\thirdparty\LAVFilters\LAVVideoSettings.h">
- <Filter>Header Files\LAVFilters</Filter>
+ <ClInclude Include="..\..\include\version.h">
+ <Filter>Build Info</Filter>
</ClInclude>
- <ClInclude Include="VersionInfo.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PlayerCaptureBar.h">
+ <Filter>Panels</Filter>
</ClInclude>
- <ClInclude Include="MouseTouch.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PlayerCaptureDialog.h">
+ <Filter>Panels</Filter>
</ClInclude>
- <ClInclude Include="TimerWrappers.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PlayerNavigationBar.h">
+ <Filter>Panels</Filter>
</ClInclude>
- <ClInclude Include="MainFrmControls.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PlayerNavigationDialog.h">
+ <Filter>Panels</Filter>
</ClInclude>
- <ClInclude Include="EventDispatcher.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PlayerSubresyncBar.h">
+ <Filter>Panels</Filter>
</ClInclude>
- <ClInclude Include="Shaders.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PlayerPlaylistBar.h">
+ <Filter>Panels</Filter>
</ClInclude>
- <ClInclude Include="PPageShaders.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="DropTarget.h">
+ <Filter>Helpers</Filter>
</ClInclude>
- <ClInclude Include="DebugShadersDlg.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="Logger.h">
+ <Filter>Helpers</Filter>
</ClInclude>
- <ClInclude Include="Translations.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="CrashReporter.h">
+ <Filter>Crash Reporter</Filter>
</ClInclude>
- <ClInclude Include="ColorButton.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="PPageAudioRenderer.h">
+ <Filter>Property Dialogs\Player Options\Pages</Filter>
</ClInclude>
- <ClInclude Include="PPageAdvanced.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="DpiHelper.h">
+ <Filter>Helpers</Filter>
</ClInclude>
- <ClInclude Include="SaveImageDialog.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="..\thirdparty\XmlRpc4Win\timxmlrpc.h">
+ <Filter>Subtitles</Filter>
</ClInclude>
- <ClInclude Include="CmdLineHelpDlg.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="SVGImage.h">
+ <Filter>Helpers</Filter>
+ </ClInclude>
+ <ClInclude Include="ImageGrayer.h">
+ <Filter>Helpers</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
@@ -856,78 +938,15 @@
<None Include="res\toolbarw7.png">
<Filter>Resource Files</Filter>
</None>
- <None Include="res\shaders\BT601BT709.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\contour.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\deinterlace (blend).psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\denoise.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\EdgeSharpen.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\emboss.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
<None Include="res\shaders\empty.psh">
<Filter>Resource Files\shaders</Filter>
</None>
<None Include="res\shaders\final.psh">
<Filter>Resource Files\shaders</Filter>
</None>
- <None Include="res\shaders\grayscale.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\invert.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\letterbox.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\levels.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\levels2.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\levels3.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\nightvision.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\procamp.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
<None Include="res\shaders\resizer.psh">
<Filter>Resource Files\shaders</Filter>
</None>
- <None Include="res\shaders\sharpen.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\SharpenComplex.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\SharpenComplex2.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\sphere.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\spotlight.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\wave.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
- <None Include="res\shaders\YV12ChromaUpsampling.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
<None Include="res\logo.3.png">
<Filter>Resource Files</Filter>
</None>
@@ -1060,9 +1079,6 @@
<None Include="res\tickcross.png">
<Filter>Resource Files</Filter>
</None>
- <None Include="res\shaders\LCDAngleCorrection.psh">
- <Filter>Resource Files\shaders</Filter>
- </None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="mpc-hc.rc">
@@ -1080,11 +1096,6 @@
</CustomBuildStep>
</ItemGroup>
<ItemGroup>
- <Object Include="..\thirdparty\LAVFilters\src\bin_$(PlatformName)\ffmpeg\GCCInfo.o">
- <Filter>Source Files</Filter>
- </Object>
- </ItemGroup>
- <ItemGroup>
<Image Include="res\check_all.bmp">
<Filter>Resource Files</Filter>
</Image>
@@ -1098,4 +1109,21 @@
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
+ <ItemGroup>
+ <Image Include="res\subtitles\favicon_opensubtitles.ico">
+ <Filter>Resource Files</Filter>
+ </Image>
+ <Image Include="res\subtitles\favicon_podnapisi.ico">
+ <Filter>Resource Files</Filter>
+ </Image>
+ <Image Include="res\subtitles\favicon_subdb.ico">
+ <Filter>Resource Files</Filter>
+ </Image>
+ <Image Include="res\subtitles\favicon_titlovi.ico">
+ <Filter>Resource Files</Filter>
+ </Image>
+ <Image Include="res\subtitles\favicon_ysubs.ico">
+ <Filter>Resource Files</Filter>
+ </Image>
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/src/mpc-hc/mpciconlib/mpciconlib.cpp b/src/mpc-hc/mpciconlib/mpciconlib.cpp
index c85de0f36..78ca7645e 100644
--- a/src/mpc-hc/mpciconlib/mpciconlib.cpp
+++ b/src/mpc-hc/mpciconlib/mpciconlib.cpp
@@ -1,5 +1,5 @@
/*
- * (C) 2008-2013 see Authors.txt
+ * (C) 2008-2013, 2015 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -95,6 +95,10 @@ extern "C" __declspec(dllexport) int GetIconIndex(LPCTSTR ext)
iconIndex = IDI_DSM_ICON;
} else if (_tcsicmp(ext, _T(".dts")) == 0) {
iconIndex = IDI_DTS_ICON;
+ } else if (_tcsicmp(ext, _T(".dtshd")) == 0) {
+ iconIndex = IDI_DTS_ICON;
+ } else if (_tcsicmp(ext, _T(".dtsma")) == 0) {
+ iconIndex = IDI_DTS_ICON;
} else if (_tcsicmp(ext, _T(".evo")) == 0) {
iconIndex = IDI_MPEG_ICON;
} else if (_tcsicmp(ext, _T(".f4v")) == 0) {
diff --git a/src/mpc-hc/mpciconlib/mpciconlib.vcxproj b/src/mpc-hc/mpciconlib/mpciconlib.vcxproj
index 70a3882ed..2cea33485 100644
--- a/src/mpc-hc/mpciconlib/mpciconlib.vcxproj
+++ b/src/mpc-hc/mpciconlib/mpciconlib.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
@@ -18,50 +18,30 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <PropertyGroup>
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\mpc-hc_x86\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\mpc-hc_x64\</OutDir>
+ <OutDir Condition="'$(Platform)'=='Win32'">$(SolutionDir)bin\mpc-hc_x86\</OutDir>
+ <OutDir Condition="'$(Platform)'=='x64'">$(SolutionDir)bin\mpc-hc_x64\</OutDir>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- </ClCompile>
- <Link>
- <NoEntryPoint>true</NoEntryPoint>
- <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- <ResourceCompile>
- <AdditionalIncludeDirectories>..\..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NO_VERSION_REV_NEEDED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<Link>
<NoEntryPoint>true</NoEntryPoint>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <AdditionalDependencies>libcmt.lib;libvcruntime.lib;libucrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<ResourceCompile>
<AdditionalIncludeDirectories>..\..\..\include</AdditionalIncludeDirectories>
diff --git a/src/mpc-hc/mpciconlib/mpciconlib.vcxproj.filters b/src/mpc-hc/mpciconlib/mpciconlib.vcxproj.filters
index c4563cd17..c00c5c34b 100644
--- a/src/mpc-hc/mpciconlib/mpciconlib.vcxproj.filters
+++ b/src/mpc-hc/mpciconlib/mpciconlib.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
diff --git a/src/mpc-hc/mpcresources/BuildAll.vcxproj b/src/mpc-hc/mpcresources/BuildAll.vcxproj
new file mode 100644
index 000000000..e3f1b0ea5
--- /dev/null
+++ b/src/mpc-hc/mpcresources/BuildAll.vcxproj
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F0D412BF-C98E-48C7-A032-607AE043B0F7}</ProjectGuid>
+ <RootNamespace>BuildAll</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ </ImportGroup>
+ <ItemGroup>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Arabic</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Armenian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Basque</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Belarusian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Bengali</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Bosnian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Catalan</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Chinese Simplified</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Chinese Traditional</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Croatian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Czech</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Danish</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Dutch</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release English (British)</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Finnish</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release French</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Galician</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release German</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Greek</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Hebrew</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Hungarian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Indonesian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Italian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Japanese</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Korean</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Lithuanian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Malay</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Polish</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Portuguese (Brazil)</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Polish</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Punjabi</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Romanian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Russian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Serbian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Slovak</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Slovenian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Spanish</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Swedish</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Tatar</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Thai</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Turkish</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Ukrainian</AdditionalProperties>
+ </ProjectToBuild>
+ <ProjectToBuild Include="mpcresources.vcxproj">
+ <AdditionalProperties>Configuration=Release Vietnamese</AdditionalProperties>
+ </ProjectToBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="SyncTranslations.vcxproj">
+ <Project>{904017f7-ee7a-49b6-a000-0d2fe5d5809a}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <Target Name="Build">
+ <MSBuild Projects="@(ProjectToBuild)" Targets="Build" BuildInParallel="true" />
+ </Target>
+ <Target Name="Rebuild">
+ <MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild" BuildInParallel="true" />
+ </Target>
+ <Target Name="Clean">
+ <MSBuild Projects="@(ProjectToBuild)" Targets="Clean" BuildInParallel="true" />
+ </Target>
+</Project> \ No newline at end of file
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ar.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ar.dialogs.po
index 619b3e5f6..ccdc751fa 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ar.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ar.dialogs.po
@@ -1,21 +1,24 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Abubakr Mohammed <bcs2610@hotmail.com>, 2014
-# Ahmad Abd-Elghany <tolpa1@gmail.com>, 2013-2014
+# Ahmad Abd-Elghany <tolpa1@gmail.com>, 2013-2015
# Abubakr Mohammed <bcs2610@hotmail.com>, 2014
+# Khaled Saleem Baleesh <Kbaleesh@gmail.com>, 2016
# manxx55 <w6txz2@gmail.com>, 2014
+# Mubarak Qahtani <abu-q76@hotmail.com>, 2016
+# Omar Anwar <omaraglan91@yahoo.com>, 2015,2017
# Tariq <tariq-mz@hotmail.com>, 2014
# Tariq <tariq-mz@hotmail.com>, 2014
-# manxx55 <w6txz2@gmail.com>, 2014
+# manxx55 <w6txz2@gmail.com>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-10-02 18:20+0000\n"
-"Last-Translator: manxx55 <w6txz2@gmail.com>\n"
-"Language-Team: Arabic (http://www.transifex.com/projects/p/mpc-hc/language/ar/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-02-19 16:41+0000\n"
+"Last-Translator: Omar Anwar <omaraglan91@yahoo.com>\n"
+"Language-Team: Arabic (http://www.transifex.com/mpc-hc/mpc-hc/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -68,7 +71,7 @@ msgstr "معاينة"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "V/A Buffers:"
-msgstr "V/A Buffers:"
+msgstr "V/A المؤقتة:"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
msgid "Audio to wav"
@@ -115,7 +118,7 @@ msgid "Enable custom channel mapping"
msgstr "تمكين تخطيط القنوات المخصص"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "إعداد السماعات لـ"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -123,7 +126,7 @@ msgid "input channels:"
msgstr "قنوات إدخال"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "استمر بالضغط على shift لجعل التغييرات فورية بعد النقر على شيء"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -195,12 +198,12 @@ msgid "About"
msgstr "حول"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Authors.txt حقوق طبع © 2002-2014 انظر"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Authors.txt حقوق طبع © 2002-2017 انظر"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
-msgstr " هذا البرنامج مجاني وأصدر تحت رخصة GNU رخصة جنو العمومية."
+msgstr "هذا البرنامج مجاني وأصدر تحت رخصة GNU رخصة جنو العمومية."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
@@ -427,12 +430,16 @@ msgid "time(s)"
msgstr "مرة (مرات)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "وضع الإعادة:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "بعد التشغيل"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "المخرجات"
+msgid "Default zoom"
+msgstr "التقريب الافتراضى"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -472,16 +479,12 @@ msgstr "استعمل خيط العامل لبناء مخطط الفلاتر"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
-msgstr "Report pins which fail to render"
+msgstr "عمل تقرير للهويات التي فشلت بالعارض"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "تحميل ملفات الصوت تلقائياً"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "renderer إستعمل الترجمة الداخلية لـ"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "التحكم"
@@ -520,7 +523,7 @@ msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr ""
+msgstr "تأخير الخطوة"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -575,7 +578,7 @@ msgid "Warning"
msgstr "تحذير"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "إذا كنت ستتجاوز وتمكّن الشاشة الكاملة ضدّ التعرّج في مكان ضبط كرت الفيديو الخاص بك، فالترجمة لن تشاهدها بفرق أفضل لكنّه سيستهلك وحدة المعالجة المركزية بالتأكيد"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -596,7 +599,7 @@ msgstr "تشغيل مع"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr ""
+msgstr "استخدام إيقونة صيغة محددة"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
@@ -604,7 +607,7 @@ msgstr "تشغيل كمسؤول"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "تطبيق كإفتراضي للبرنامج"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -682,16 +685,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "منع تصغير المشغل عندما يكون في الشاشة الكاملة على غير الضبط الأفتراضي"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "إستعمال مميزّات شريط المهام لويندوز 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "استخدام ميزات شريط المهام المحسنة"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "فتح (التالي / السابق) (رجوع خلفي/ أمامي) في الحافظة عندما تكون هناك مادة وحيدة في قائمة التشغيل"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "فتح (التالي / السابق) (رجوع خلفي/ أمامي) في الحافظة عندما تكون هناك مادة وحيدة في قائمة التشغيل"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "استخدام أداة طرف الوقت:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -900,7 +903,7 @@ msgstr "تحذير"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
-msgstr "مشغل الوسائط الكلاسيكي - هوم سينما لا يستطيع أن يعيد البعض من التثبيت في الرسم البياني، يحتمل أنه لا يوجد عندك الكودك المطلوب أو أن الفلاتر غير مثبته على النظام"
+msgstr "مشغل الوسائط الكلاسيكي - هوم سينما لا يستطيع أن يعيد البعض من التثبيت في الرسم البياني، يحتمل أنه لا يوجد عندك الكودك المطلوب أو أن الفلاتر غير مثبته على النظام"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
msgid "The following pin(s) failed to find a connectable filter:"
@@ -992,11 +995,11 @@ msgstr "المساحات"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Angle (z,°)"
-msgstr "الزاوية (z,°)"
+msgstr "الزاوية (z,°)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Scale (x,%)"
-msgstr "المقياس (x,%)"
+msgstr "المقياس (x,%)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Scale (y,%)"
@@ -1131,8 +1134,8 @@ msgid "Audio Renderer"
msgstr "عارض الصوت"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "ضبط VMR-7/VMR-9 (عارض أقل) و EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "ضبط VMR-9 (عارض أقل) و EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1175,8 +1178,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "الترجمات *"
+msgid "Subtitles"
+msgstr "الترجمات"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1191,8 +1194,12 @@ msgid "Rotation"
msgstr "التدوير"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "المرشحات الخارجية مثل (Vsfilter) يمكن أن تعرض الترجمة على كلّ العوارض *"
+msgid "Subtitle Renderer"
+msgstr "إعادة طباعة الترجمة"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1210,6 +1217,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "السماح بالوصول من المضيف المحلي فقط"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "تمكين المعاينة"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "طباعة معلومات التصحيح"
@@ -1235,17 +1246,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI عوامل: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "الترجمات متوفرة على الانترنت"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "تنزيل وفتح"
+msgid "Download subtitles"
+msgstr "تحميل الترجمات"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "استبدال الترجمة المحملة حاليا"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "تحميل"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "تنشيط"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "إلغاء"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "اعدادات"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "رفع الترجمة"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "رفع"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "إلغاء"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "اعدادات"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "حفظ بإسم..."
@@ -1283,8 +1322,8 @@ msgid "Enable automatic update check"
msgstr "تمكين الفحص التلقائي للتحديثات"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "التأخير بين كل فحص:"
+msgid "Check every:"
+msgstr "افحص كل:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1547,16 +1586,28 @@ msgid "Reset"
msgstr "إعادة ضبط"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "قاعدة البيانات على الانترنت"
+msgid "Online search, download and upload subtitles"
+msgstr "البحث في الانترنت عن الترجمات وتنزيلها ورفعها"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "ابحث بشكل آلي عن الترجمات وحملها إذا لم تكن متوفرة محليا"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "يفضل استخدام الترجمة لِضعاف السمع"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "تجاهل الملفات التي تحتوي على الكلمات التالية:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "الرابط الأساسي لقاعدة البيانات على الانترنت"
+msgid "Languages in order of preference:"
+msgstr "اللغات بالترتيب حسب تفضيلها (مثل \"eng ell spa\"):"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "فحص"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "ارفع الترجمات النشطة عند نهاية مقطع الفيديو"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1658,6 +1709,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "الأفتراضي"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "جهاز"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "وضع خاص"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "تمكين التدفق"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "اعدادات"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "تمكين التغذيه عبر موحة الاستريو(من اجل سماعات الرأس)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "قطع:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "مستوى:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "ملحوظه"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "لتقليل التشويه فى الصوت،من المفضل ان تبقى صوت المشغل فى حدود 85% \nعندما يتم تشغيل صوت صاخب-محتوى مرمز."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "دقة الصورة:"
@@ -1670,3 +1765,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "حسناً"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "إرسال انهيار"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "نحن اسفون، يبدو ان المشغل قد تعطل. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "ارسل تقرير عن العله لمساعدتنا فحص المشكله وايجاد الحل."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "معلومات اختياريه."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "الإيميل:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "وضع عنوان بريدك الإلكتروني هو اختياري، سوف يستخدم فقط للإتصال بك من قبل المطورين للمزيد من المعلومات."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "وصف المشكلة (استخدام اللغة الإنجليزية فقط):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "اعاده تشغيل المشغل."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "اغلق المشغل"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ar.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ar.menus.po
index f755194d2..48cca6de6 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ar.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ar.menus.po
@@ -1,18 +1,19 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Ahmad Abd-Elghany <tolpa1@gmail.com>, 2013-2014
# Abubakr Mohammed <bcs2610@hotmail.com>, 2014
+# Mubarak Qahtani <abu-q76@hotmail.com>, 2016
# Tariq <tariq-mz@hotmail.com>, 2014
-# manxx55 <w6txz2@gmail.com>, 2014
+# manxx55 <w6txz2@gmail.com>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 18:50+0000\n"
-"Last-Translator: Ahmad Abd-Elghany <tolpa1@gmail.com>\n"
-"Language-Team: Arabic (http://www.transifex.com/projects/p/mpc-hc/language/ar/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-03-07 21:26+0000\n"
+"Last-Translator: Mubarak Qahtani <abu-q76@hotmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.com/mpc-hc/mpc-hc/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -67,29 +68,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "حفظ صورة مصغرة..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "تحميل الترجمة..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "حفظ الترجمة..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "قاعدة بيانات الترجمة"
+msgid "S&ubtitles"
+msgstr "الترجمة"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "تحميل الترجمة"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "بحث..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "حفظ الترجمة"
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "رفع..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "تحميل الترجمة"
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "تنزيل..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "رفع الترجمة"
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -199,13 +196,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "اختبار التمزق"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "عرض الإحصائيات"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&عرض الأحصائيات"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "الوقت المتبقي"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "عرض الوقت &الحالي"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "عرض اسم &الملف"
msgctxt "POPUP"
msgid "&Output Range"
@@ -233,11 +234,11 @@ msgstr "وضع ملء الشاشة D3D مع دعم واجهة المستخدم
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "إخراج RGB 10-bit"
+msgstr "إخراج RGB 10-bit"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
-msgstr "فرض إدخال RGB 10-bit"
+msgstr "فرض إدخال RGB 10-bit"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
@@ -407,17 +408,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "لمس النافذة من الخارج"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "حفظ النسبة الباعية"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "تجاهل النسبة الباعية"
+msgid "&Aspect Ratio"
+msgstr "نسبة العرض إلى الإرتفاع"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "الإفتراضي"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "حسب الشاشة"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -439,6 +436,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "بكسل مربع"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "تصحيح فرق النسبة الباعية للشاشة/سطح المكتب"
@@ -532,9 +533,25 @@ msgid "&Stop"
msgstr "إيقاف"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "خطوة إطار أمام"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "إعادة"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "للأبد"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "ملف"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "قائمة التشغيل"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "تقليل سرعة العرض"
@@ -556,16 +573,16 @@ msgid "S&haders"
msgstr "المظللات"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "الصوت"
+msgid "&Audio Track"
+msgstr "&مسار الصوت"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "الترجمة"
+msgid "Su&btitle Track"
+msgstr "&مسار الترجمة"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "تدفق الفيديو"
+msgid "Vide&o Track"
+msgstr "&مسار الفيديو"
msgctxt "POPUP"
msgid "&Volume"
@@ -587,7 +604,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "بعد التشغيل"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "&لا تفعل شيء"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "تشغيل الملف التالي في المجلد"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "أغلق الشاشة"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "خروج"
@@ -611,10 +640,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "قفل"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "أغلق الشاشة"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "التنقل"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ar.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ar.strings.po
index 9c0b10ed5..4a31ec80e 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ar.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ar.strings.po
@@ -1,21 +1,24 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Abubakr Mohammed <bcs2610@hotmail.com>, 2014
# Ahmad Abd-Elghany <tolpa1@gmail.com>, 2014
+# Khaled Saleem Baleesh <Kbaleesh@gmail.com>, 2016
# manxx55 <w6txz2@gmail.com>, 2014
+# Mubarak Qahtani <abu-q76@hotmail.com>, 2016
# nour nader <thenino2013@gmail.com>, 2014
# Tariq <tariq-mz@hotmail.com>, 2014
# Tariq <tariq-mz@hotmail.com>, 2014
-# manxx55 <w6txz2@gmail.com>, 2014
+# manxx55 <w6txz2@gmail.com>, 2014-2015
+# ‫ابو سليمان الشـمري‬‎ <mollthb@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-09-30 13:19+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Arabic (http://www.transifex.com/projects/p/mpc-hc/language/ar/)\n"
+"Language-Team: Arabic (http://www.transifex.com/mpc-hc/mpc-hc/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -66,10 +69,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "الخصائص"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "ملف"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&الاستايل الافتراضي"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "قائمة التشغيل"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "الملفات"
@@ -96,7 +107,7 @@ msgstr "المتوسط​​: %d مللي ثانية, المتوسط​​: %d
msgctxt "IDS_STATSBAR_JITTER"
msgid "Jitter"
-msgstr "Jitter"
+msgstr "الإهتزاز"
msgctxt "IDS_STATSBAR_BITRATE"
msgid "Bitrate"
@@ -104,7 +115,7 @@ msgstr "معدل البايت"
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
-msgstr "(avg/cur)"
+msgstr "(متوسط/الحالي)"
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
@@ -120,7 +131,27 @@ msgstr "الأستايلات"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "إذا ترك الـ rendering targeh غير معروف، سيتم إخراج ترجمات SSA / ASS بالنسبة لإطار الفيديو في حين سيتم إخراج جميع الترجمات الأخرى بالنسبة للنافذة."
+msgstr "إذا ترك الـ rendering targeh غير معروف، سيتم إخراج ترجمات SSA / ASS بالنسبة لإطار الفيديو في حين سيتم إخراج جميع الترجمات الأخرى بالنسبة للنافذة."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "وضع الإعادة: حسب قائمة التشغيل"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "وضع الإعادة: ملف"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "إعادة إلى الأبد: نعم"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "إعادة إلى الأبد: لا"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "إعادة إلى الأبد"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
@@ -331,11 +362,11 @@ msgid "On/Off"
msgstr "تشغيل/إيقاف"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
+msgid "From (FPS)"
msgstr "من إطار في الثانية"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr "إلى إطار في الثانية"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -424,7 +455,7 @@ msgstr "&اعادة تعيين"
msgctxt "IDS_MPLAYERC_104"
msgid "Subtitle Delay -"
-msgstr " تأخير الترجمة -"
+msgstr "تأخير الترجمة -"
msgctxt "IDS_MPLAYERC_105"
msgid "Subtitle Delay +"
@@ -470,6 +501,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "إعادة تشغيل::الظلال"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "المصادر"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "المتنوعة"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "معلومات الملف"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "التشغيل::الملتقط"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "تشغيل::مزامنة الأعدادات"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "تشغيل::وضع ملء الشاشة"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "المرشحات الداخلية :: عارض الصوت"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "محولات الصوت"
@@ -494,18 +553,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "تراكب العارض"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "عارض فيديو مختلط 7 (ذو نوافذ)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "عارض فيديو مختلط 9 (ذو نوافذ)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "عارض فيديو مختلط 7 (عارض أقل)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "عارض فيديو مختلط 9 (عارض أقل)"
@@ -558,34 +609,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "المشغل::واجهة الويب"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "الترجمة::قاعدة البيانات"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "المصادر"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "المتنوعة"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "معلومات الملف"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "التشغيل::الملتقط"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "تشغيل::مزامنة الأعدادات"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "تشغيل::وضع ملء الشاشة"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "التفاصيل"
@@ -606,17 +629,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "دائماً يعيد في التغطية. عموما فقط صيغ YUV مسموحة لها، لكنّها مقدّمه مباشرة بدون أيّ تحويل في اللون إلى RGB. هذه طريقة اسرع في إعادة الكلّ فقط عندما تكون متأكّداً من نسخة الفيديو لخرج التلفاز في الشاشة الكاملة نشيط."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "العارض الأفتراضي لويندوز XP. مستقرّ جداً وهو فقط أبطأ إلى حدّ ما من طبقة المزج. إستعمل DirectDraw والتشغيل في الطبقة إذا كان يمكنك ذلك."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "متوفرة فقط إذا كنت مثبت DirectX 9. لها نفس القدرات مثل VMR-7 (ذو نوافذ)، لكنّه لن يستعمل إعادة الطبقة وبسبب هذا هو قد يكون أبطأ إلى حدّ ما من VMR-7 (ذو نوافذ)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "نفس الـ VMR-7 (ذو نوافذ)، لكن بخصائص مساعدة متقدّمة MPC HC للترجمة. نسخة طبقة الفيديو لن تعمل. \"لون حقيقي \" يوصى بلون مجال سطح المكتب."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "متاح فقط إذا كان لديك DirectX 9 على الجهاز، مستقر جدًا ولكن لن يستخدم \"Overlay rendering\" ولهذا يمكن ان يكون أبطأ من \"Overlay mixer\""
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -627,8 +642,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "نفس الـ VMR-9 ولكنه (عارض أقل)، لكن إستعمال إعادة التحجيم حقيقية."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "الإتصال بأيّ فيديو مثل نوع الوسائط وسيرسل العينات ليفحصها ليس في أي مكان. إستعمله إذا كنت لست بحاجة إلى عرض الفيديو وأردت توفير وحدة المعالجة المركزية من عمل غير ضروري."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "الإتصال بأيّ فيديو مثل نوع الوسائط وسيرسل العينات ليفحصها ليس في أي مكان. إستعمله إذا كنت لست بحاجة إلى عرض الفيديو وأردت توفير وحدة المعالجة المركزية من عمل غير ضروري."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -654,46 +669,26 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "العارض الخاص لـ Real's. مخطوطات SMIL ستعمل، لكن التفاعل غير مرجح. استعمل DirectDraw وشغله في الطبقة إذا أمكنك ذلك."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "ناتج عارض محرّك لـ Real's من قبل DX7 ويستند على خصائص متقدّمة من VMR-7 (عارض أقل)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "ناتج عارض محرّك لـ Real's من قبل DX9 ويستند على خصائص متقدّمة من VMR-9 (عارض أقل)."
+msgstr "ناتج عارض محرّك لـ Real's من قبل DX9 ويستند على خصائص متقدّمة من VMR-9 (عارض أقل)."
msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "عارض QuickTime's الخاص. يصبح بطيئاً إلى حدّ ما في إعادة تحجيم الفيديو أو تغطيه جزء بنافذة أخرى. عندما تكون الطبقة غير متوفرة هو سيتراجع إلى GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "ناتج عارض محرّك لـ QuickTime's من قبل DX7 ويستند على خصائص متقدّمة من VMR-7 (عارض أقل)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "ناتج عارض محرّك لـ QuickTime's من قبل DX9 ويستند على خصائص متقدّمة من VMR-9 (عارض أقل)."
+msgstr "ناتج عارض محرّك لـ QuickTime's من قبل DX9 ويستند على خصائص متقدّمة من VMR-9 (عارض أقل)."
msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "سطح الفيديو سيخصّص كسطح واقعي منتظم."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "عارض MPC الصوتي منهار، لا تستعمله."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "تزامن العارض"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - تقديم تقرير خطأ"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "إنهار MPC-HC ولكن هذه النسخة جمعت بدون تصحيح للمعلومات. \nإذا تريد أن ترسل هذا الخطأ، يجب أن تجرب نسخة رسمية أولاً.\n\nهل تريد زيارة صفحة التحميل الآن؟"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "السطح البسيط الواقعي المنتظم"
@@ -746,9 +741,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "فارغة (غير مضغوط)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "عارض MPC-HC الصوتي"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "عارض الصوت الداخلي"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -762,9 +757,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "ليكون مصدر العرض في المتصفح يجب أن تمكّن وصلة الويب.\n\nإستعمل زر \"حفظ كـ\" إذا كنت تريد حفظ المعلومات."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "تحميل الترجمات"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "تحميل الترجمة ..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "رفع الترجمة ..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -795,7 +794,7 @@ msgid "Couldn't find all archive volumes"
msgstr "لا يستطيع أن يجد كلّ أحجام الأرشيف"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "سطح فيديو سيخصّص كتركيب لكن ما زالت وظائف 2d ستكون مستعمله للنسخ وإمتداد للذاكرة المؤقتة. يتطلّب بطاقة فيديو الذي يمكن أن يخصّص 32 بت، RGBA، بدون قوّة تحجيم التركيب وبحجم أقل في تصميم الفيديو."
msgctxt "IDC_TEXTURESURF3D"
@@ -822,6 +821,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "يخفّض التمزيق مع إهمال VSync الإفتراضي ويتحوّل إلى D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "فحص الموالف"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "لا يمكن تحميل الترجمة او إنها غير مدعومة من العارض"
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "فتح VTS_xx_0.ifo لتحميل VTS_xx_x.vob كملفات في قطعة واحدة"
@@ -856,7 +867,7 @@ msgstr "لا تسمح بتحريك الترجمة. تفعيل هذا الخيا
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr "زيادة معدل تخزين الصور الفرعية ينبغي بصفة عامة أن يُحسن أداء الريندرنج على حساب معدل استخدام وحدة التخزين في كارت الشاشة."
+msgstr "زيادة معدل تخزين الصور الفرعية ينبغي بصفة عامة أن يُحسن أداء الريندرنج على حساب معدل استخدام وحدة التخزين في كارت الشاشة."
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
@@ -894,7 +905,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "صامت"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "غير صامت"
@@ -959,11 +970,11 @@ msgid "&Organize Favorites..."
msgstr "تنظيم المفضلة.."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "الخلط"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "موقع الملف المفتوح"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1047,7 +1058,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "التقريب لكامل الشاشة العريضة,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "إخفاء على الشاشة الكاملة"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1220,11 +1231,11 @@ msgstr "L = R"
msgctxt "IDS_BALANCE_L"
msgid "L +%d%%"
-msgstr "L +%d%%"
+msgstr "يسار +%d%%"
msgctxt "IDS_BALANCE_R"
msgid "R +%d%%"
-msgstr "R +%d%%"
+msgstr "يمين +%d%%"
msgctxt "IDS_VOLUME"
msgid "%d%%"
@@ -1235,7 +1246,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "إضافة تضمين حافظة"
msgctxt "IDS_HW_INDICATOR"
@@ -1336,11 +1347,87 @@ msgstr "الحد الأقصى (NxNpx) من الأغطية الفنية يتم ت
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr ""
+msgstr "سيتم خفض التأخير للترجمة/بالنسبة لزيادة هذه القيمة في كل مرة استخدم مفاتيح التشغيل السريع المطابق للمستعملة (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<غير معرّف>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "الساعة"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "تحريك لإعلى"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "تحريك لإسفل"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "الترتيب بـLCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "إزالة الكل"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "هل أنت متأكد بأنك تريد إزالة جميع القنوات من القائمة؟"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "لا توجد معلومات متاحة"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "الرجاء الإنتظار، التحليل مستمرّ.."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "تمكين تسجيل الدخول لملف (يتطلب إعادة تشغيل)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "الوقت المتبقي"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "دقة عالية"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "بعد نهاية التشغيل: أعد تشغيل الملف الحالي"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "بعد نهاية التشغيل: أغلق"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC واجه مشكلة في بداية تشغيله. بمساعدتك قد نكون قادرين على إصلاح المشكلة. \n\nهل تريد الإبلاغ عن ذلك؟"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "أدخل قيمة موجبة إذا كان الصوت متقدم، وقيمة سالبة إذا كان متأخر."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "الإستعراض، غير متاح حاليًا. يمكنك تفعيله عن طريق الخيارات"
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "هذه الخاصية تمكنك من استعراض ملفات عن طريق الشبكة. استخدم هذه الخدمة فقط إذا كنت متأكد من ان الشبكة آمنة.\n\nهل ترغب فعلًا ان تسمح بهذه الخدمة؟"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "تصيير ( Renderer ) الترجمة عن طريق البرنامج"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1362,13 +1449,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "تم حفظ الصورة"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "تحميل الترجمة"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr " تحميل الترجمات..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "حفظ الترجمة"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "حفظ الترجمات..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1391,12 +1478,12 @@ msgid "Stop"
msgstr "توقف"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "خطوة إطار"
+msgid "Frame-step"
+msgstr "خطوة للأمام بالإطار"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "خطوة خلفية للإطار"
+msgid "Frame-step back"
+msgstr "خطوة للخلف بالإطار"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
@@ -1495,8 +1582,8 @@ msgid "Thumbnails saved successfully"
msgstr "تم حفظ المصغرات"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "تدفق الفيديو"
+msgid "Vide&o Track"
+msgstr "&مسار الفيديو"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1508,7 +1595,7 @@ msgstr "إعادة ضبظ الإعدادات"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "هل أنت متأكّد بأنك تريد إعادة MPC-HC إلى الضبط الأفتراضي؟\nكن حذراً فكلّ الضبط الحالي ستفقدة!"
+msgstr "هل أنت متأكّد بأنك تريد إعادة MPC-HC إلى الضبط الأفتراضي؟\nكن حذراً فكلّ الضبط الحالي ستفقدة!"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
@@ -1543,12 +1630,12 @@ msgid "Reset Rate"
msgstr "إعادة ضبط المعدل"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr " تأخير الصوت +10ms "
+msgid "Audio Delay +10 ms"
+msgstr "تأخير الصوت +10ms "
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr " تأخير الصوت -10ms "
+msgid "Audio Delay -10 ms"
+msgstr "تأخير الصوت -10ms "
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
@@ -1600,7 +1687,7 @@ msgstr "الملف السابق"
msgctxt "IDS_MPLAYERC_99"
msgid "Toggle Direct3D fullscreen"
-msgstr "تبديل D3D ملء الشاشة"
+msgstr "تبديل D3D ملء الشاشة"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
@@ -1618,14 +1705,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "تحويل الترجمة لليمين"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "عرض الإحصائيات"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "القفز إلى البداية"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: عرض اسم الملف"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "تشغيل DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "تشغيل BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: عرض احصائيات الناقل"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: إعادة تعيين احصائيات الناقل"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "الترجمة::منوعات"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "إخفاء الحدود"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "الإطار فقط"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "تبديل العنوان و القائمة"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "إخفاء القائمة"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "متقدّم"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "عرض الحد الأدنى"
@@ -1691,8 +1818,8 @@ msgid "PnS Dec Height"
msgstr "بان اند سكان تقليل الإرتفاع"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "تحميل الترجمة، الرجاء الإنتظار"
+msgid "Downloading [%s] \"%s\""
+msgstr "تحميل [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1703,12 +1830,12 @@ msgid "No subtitles found."
msgstr "لم يجد ترجمة"
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "%d ترجمة متوفرة"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "هل تريد الفحص بشكل دوري على تحديثات MPC-HC؟\nيمكن تعطيل هذه الخاصية في وقت لاحق من صفحة الخيارات المتنوعة."
+msgstr "هل تريد الفحص بشكل دوري على تحديثات MPC-HC؟\n\nيمكن تعطيل هذه الخاصية في وقت لاحق من صفحة الخيارات المتنوعة."
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1859,12 +1986,12 @@ msgid "Boss key"
msgstr "مفتاح الرئيس"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "قائمة المشغل (قصيرة)"
+msgid "Player Menu"
+msgstr "قائمة المشغل"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "قائمة المشغل (طويلة)"
+msgid "Player Menu (full)"
+msgstr "قائمة المشغل (وضع كامل الشاشة)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1875,19 +2002,19 @@ msgid "Options"
msgstr "الخيارات"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
+msgid "Next Audio Track"
msgstr "الصوت التالي"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
+msgid "Prev Audio Track"
msgstr "الصوت السابق"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
+msgid "Next Subtitle Track"
msgstr "الترجمة التالية"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
+msgid "Prev Subtitle Track"
msgstr "الترجمة السابقة"
msgctxt "IDS_MPLAYERC_85"
@@ -1898,22 +2025,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "إعادة تحميل الترجمة"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "الصوت التالي (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "الصوت السابق (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "الترجمة التالية (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "الترجمة السابقة (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "الزاوية التالية (DVD)"
@@ -1923,28 +2034,28 @@ msgid "Prev Angle (DVD)"
msgstr "الزاوية السابقة (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
+msgid "Next Audio Track (DVD)"
msgstr "الصوت التالي (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "الصوت السابق (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "الصوت السابق (OGM)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "الترجمة التالية (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "الترجمة التالية (OGM)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
+msgid "Prev Subtitle Track (DVD)"
msgstr "الترجمة السابقة (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "تشغيل/إيقاف الترجمة (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "الوقت المتبقي"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: عرض الوقت الحالي"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1970,11 +2081,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "مشفرة"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "نعم"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "لا"
@@ -2031,12 +2142,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "الصوت: %02lu/%02lu، العنوان: %02lu/%02lu، الفصل: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "الزاوية: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u هرتز %d بت %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2048,7 +2159,7 @@ msgstr "تشغيل مع MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr ""
+msgstr "MPC-HC ليس لديه إمتيازات كافيه حتى يغيّر روابط صيغ الملفات. الرجاء إنقر على زر \"تشغيل كمسؤول\"."
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
@@ -2126,14 +2237,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "عرض الصورة:"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "عنوان الموقع يبدو صحيحا!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "عدم تطابق إصدار البروتوكول، الرجاء الترقية المشغل أو اختيار عنوان مختلف!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "نسبة الطول للعرض"
@@ -2143,19 +2246,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", الإجمالي: %ld، المسقطة: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", الحجم: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", الحجم: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", حر: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", حر: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2180,7 +2283,7 @@ msgstr "حدد المسار لـلـDVD/BD:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr "تم التحميل بنجاح"
+msgstr " تم التحميل بنجاح"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2227,8 +2330,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "الصور المصغرة ستكون أصغر مما ينبغي، لا يمكن إنشاء الملف.\n\nحاول خفض عدد الصور المصغرة أو زيادة الحجم الإجمالي."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "لتحميل الترجمة يجب أن تغيير نوع رندرر الفيديو و إعادة فتح الملف.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR أو Haali\n- RealMedia: رندرر خاص لـRealMedia, أو افتحه عبر DirectShow\n- QuickTime: DX7 أو DX9 الرندرر لـQuickTime\n- ShockWave: لا ينطبق"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "لتحميل الترجمة يجب أن تغيير نوع رندرر الفيديو و إعادة فتح الملف.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR أو Haali\n- RealMedia: رندرر خاص لـRealMedia, أو افتحه عبر DirectShow\n- QuickTime: DX7 أو DX9 الرندرر لـQuickTime\n- ShockWave: لا ينطبق"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2239,11 +2342,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "النسبة الباعية: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "النسبة الباعية: افتراضي"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "نسبة العرض إلى الإرتفاع: حسب الشاشة (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "تأخير الصوت: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2255,7 +2358,7 @@ msgid "Out of memory"
msgstr "نفذت الذاكرة"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
msgstr "خطأ: مطلوب فلاش بلاير لانترنت اكسبلورر"
msgctxt "IDS_MAINFRM_78"
@@ -2278,10 +2381,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "فشل في عملية الريندر للملف"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "رابط غير صالح، لم يمكن تحديد قاعدة بيانات الترجمة هناك!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "الفصل:"
@@ -2302,14 +2401,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "حالي"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "تم إنهاء MPC-HC بشكل غير متوقع. لمساعدتنا في حل هذه المشكلة، الرجاء ارسال هذا الملف \"%s\" الى متتبع الأخطاء.\n\nهل تريد فتح المجلد الذي يحتوي على ملف التفريغ المصغر وزيارة متتبع الأخطاء الآن؟"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "فشل في إنشاء ملف التفريغ الى \"%s\" ( خطأ %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "حدد المجلد"
@@ -2327,7 +2418,7 @@ msgid "Toggle Caption&Menu"
msgstr "تبديل العنوان و القائمة"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "تبديل الباحث"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2412,7 +2503,7 @@ msgstr "&الخصائص"
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr "(دبوس) خصائص..."
+msgstr " (دبوس) خصائص..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2428,11 +2519,11 @@ msgstr "VSync"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr "(تعليقات المخرج 1)"
+msgstr " (تعليقات المخرج 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr "(تعليقات المخرج 2)"
+msgstr " (تعليقات المخرج 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
@@ -2483,8 +2574,8 @@ msgid "Volume boost Max"
msgstr "أقصى تعزيز للصوت"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "طريقة الاستعمال: mpc-hc.exe \"pathname\" [المفاتيح]\n\n\"pathname\"\tالملف الرئيسي او المجلد الذي سيتم تحميله (حرف بدل\n\t\tمسموح, \"-\" يدل على المدخل القياسي)\n/dub \"dubname\"\tتحميل ملف صوت إضافي\n/dubdelay \"file\"\tتحميل ملف صوت إضافي مزاح بـ XXms (إذا كان\n\t\tالملف يحتوي على \"...DELAY XXms...\")\n/d3dfs\t\tبدء التصيير في وضع ملء الشاشة D3D\n/sub \"subname\"\tتحميل ملف ترجمة إضافي\n/filter \"filtername\"\tتحميل فلاتر DirectShow من مكتبة الروابط\n\t\tالديناميكية (أحرف البدل مسموحة)\n/dvd\t\tتشغيل في وضع DVD, \"pathname\" تعني الـDVD\n\t\tالمجلد (اختياري)\n/dvdpos T#C\tبدء التشغيل في العنوان T, فصل C\n/dvdpos T#hh:mm\tبدء التشغيل في العنوان T, موقع hh:mm:ss\n/cd\t\tتحميل كل مسارات audio cd أو (s)vcd,\n\t\t\"pathname\" يعني مسار محرك الأقراص (اختياري)\n/device\t\tفتح جهاز الفيديو الافتراضي\n/open\t\tافتح الملف، لا تبدأ التشغيل تلقائيا\n/play\t\tبدء تشغيل الملف عند بدء\n\t\tالمشغل\n/close\t\tإغلاق المشغل بعد نهاية العرض (يعمل فقط عند\n\t\tاستعماله مع /play)\n/shutdown\tإيقاف تشغيل نظام التشغيل بعد العرض\n/fullscreen\tالبدء في وضع ملء الشاشة\n/minimized\tالبدء في الوضع المصغر\n/new\t\tاستخدام مثيل جديد من المشغل\n/add\t\tإضافة \"pathname\" إلى قائمة التشغيل، يمكن دمجه\n\t\tمع /open و /play\n/regvid\t\tإنشاء اقترانات الملفات لملفات الفيديو\n/regaud\t\tإنشاء اقترانات الملفات لملفات الصوت\n/regpl\t\tإنشاء اقترانات الملفات لملفات قائمة التشغيل\n/regall\t\tإنشاء اقترانات الملفات لجميع الملفات المدعومة\n/unregall\t\tإزالة جميع اقترانات الملفات\n/start ms\t\tبدء العرض عند \"ms\" (= ميلي ثانية)\n/startpos hh:mm:ss\tبدء العرض عند موضع hh:mm:ss\n/fixedsize w,h\tتعيين حجم نافذة ثابت\n/monitor N\tبدء المشغل على الشاشة N، حيث N تبدأ من 1\n/audiorenderer N\tالبدء باستعمال مصيير الصوت N، حيث N تبدأ من 1\n\t\t( راجع اعدادات \"المخرجات\" )\n/shaderpreset \"Pr\"\tالبدء باستعمال الاعدادات المسبقة \"Pr\" للمظلل\n/reset\t\tاستعادة الإعدادات الافتراضية\n/help /h /?\tعرض التعليمات حول مفاتيح سطر الأوامر\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2570,14 +2661,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "تمكين كل الفلاتر"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "فحص الموالف"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "لا يمكن تحميل الترجمة او إنها غير مدعومة من العارض"
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "المؤلف مجهول. اتصل بنا إذا كنت من صنع هذا الشعار!"
@@ -2666,40 +2749,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "أعلى خلف يمين"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "إعادة ضبظ إحصائيات العرض"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "الترجمة::منوعات"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "إخفاء الحدود"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "الإطار فقط"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "تبديل العنوان و القائمة"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "إخفاء القائمة"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "متقدّم"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "فوق شريط الباحث"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "تحت شريط الباحث"
msgctxt "IDS_VIDEO_STREAM"
@@ -2867,8 +2922,8 @@ msgid "Other Audio"
msgstr "أصوات أخرى"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2878,6 +2933,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "صوت ويندوز ميديا"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus كودك صوت"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2942,22 +3017,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "صوت حقيقي"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "صوت ويندوز ميديا"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus كودك صوت"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "قائمة التشغيل"
@@ -2982,18 +3041,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "نسبة الطول للعرض"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "استعمل WASAPI (يحتاج إعادة تشغيل)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "صامت في التقديم السريع"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "جهاز الصوت:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: يعمل"
@@ -3282,6 +3329,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "إستعادة المستوى: مغلق"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "بايت"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3339,16 +3390,16 @@ msgid "Error parsing the entered frame rate!"
msgstr "يوضح الخطأ نسبة تداخل في الإطار!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "لا يستطيع تأطير الخطوة، حاول بعارض فيديو مختلف."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
-msgstr " \"حفظ الصورة\" و \"حفظ المصغرات\" هذه الوظائف لاتعمل بعارض الفيديو الإفتراضي لـ RealMedia.\nاختر احدى عارض DirectX لـ RealMedia في MPC-HC's لخيارات الناتج واعد فتح الملف."
+msgstr "\"حفظ الصورة\" و \"حفظ المصغرات\" هذه الوظائف لاتعمل بعارض الفيديو الإفتراضي لـ RealMedia.\nاختر احدى عارض DirectX لـ RealMedia في MPC-HC's لخيارات الناتج واعد فتح الملف."
msgctxt "IDS_SCREENSHOT_ERROR_QT"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
-msgstr " \"حفظ الصورة\" و \"حفظ المصغرات\" هذه الوظائف لاتعمل بعارض الفيديو الإفتراضي لـ QuickTime.\nاختر احدى عارض DirectX لـ QuickTime في MPC-HC's لخيارات الناتج واعد فتح الملف."
+msgstr "\"حفظ الصورة\" و \"حفظ المصغرات\" هذه الوظائف لاتعمل بعارض الفيديو الإفتراضي لـ QuickTime.\nاختر احدى عارض DirectX لـ QuickTime في MPC-HC's لخيارات الناتج واعد فتح الملف."
msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
@@ -3358,10 +3409,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "\"حفظ الصورة\" و \"حفظ المصغرات\" هذه الوظائف لاتعمل مع عارض الفيديو المختلط.\nغير عارض الفيديو في خيارات الناتج في MPC's وأعد فتح الملف."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "لا يستطيع الإتصال بقاعدة بيانات الترجمة على الإنترنت."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "هل تريد تنشيط المحرّر EDL؟"
@@ -3430,7 +3477,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "تحتاج لتطبيق الضبط الجديد قبل أن تفحصهم."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "بعد التشغيل: الخروج"
@@ -3458,6 +3505,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "بعد التشغيل: أغلق الشاشة"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "بعد نهاية التشغيل: تشغيل الملف التالي في المجلد"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "بعد نهاية التشغيل: لا تفعل شيئ"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "السطوع: %s"
@@ -3516,25 +3571,409 @@ msgstr "القنوات"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr "إذا تم إختيار \"الإطار المفتاحي الأحدث\"، إبحث عن الإطار المفتاحي الأول قبل نقطة البحث الحالية\nإذا تم إختيار \"الإطار المفتاحي الأقرب\"، إبحث عن الإطار المفتاحي الأول قبل نقطة البحث الحالية إعتماداً علي أيها الأقرب"
+msgstr "إذا تم إختيار \"الإطار المفتاحي الأحدث\"، إبحث عن الإطار المفتاحي الأول قبل نقطة البحث الحالية\nإذا تم إختيار \"الإطار المفتاحي الأقرب\"، إبحث عن الإطار المفتاحي الأول قبل نقطة البحث الحالية إعتماداً علي أيها الأقرب"
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr ""
+msgstr "ربط مع كل الصيغ"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr ""
+msgstr "ربط مع صيغ الفيديو فقط"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr ""
+msgstr "ربط مع صيغ الأصوات فقط"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr ""
+msgstr "إلغاء تحديد كل الصيغ"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "الضبط"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "تمكين الــ XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "المزوّد"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "ضعاف السمع"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "التنزيلات"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "نتيجة"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "فشل البحث عن ترجمة عن طريق الإنترنت"
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "تم إلغاء البحث عن ترجمة عن طريق الإنترنت"
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "تم البحث عن ترجمة عن طريق الإنترنت. %d تراجم موجودة"
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "تم البحث عن ترجمة عن طريق الإنترنت. لا يوجد تراجم."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "تحميل الترجمات"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "البحث عن ترجمة عن طريق الإنترنت. الرجاء الإنتظار"
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "جاري البحث عن ترجمة عن طريق الإنترنت ..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "اسم المستخدم"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "الحالة"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "مستعد ..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "تمكين الـ XySubFilter"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "رفع ..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "تم رفع الترجمة بنجاح"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "فشل في رفع الترجمة"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "تم إلغاء رفع الترجمة"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "الترجمة موجودة مسبقًا"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "يتم رفع الترجمة، الرجاء الإنتظار"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "تم رفع الترجمة"
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "الرفع تم إلغائه"
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "فشل الرفع"
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "تنزيل وفتح"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "إعداد"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "إعادة ضبط"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "تحريك لإعلى"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "تحريك لإسفل"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "افتح الرابط"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "اللغات"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "خطأ: لا يمكن الوصول إلى الأنترنت"
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "ادخل بيانات الموقع"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "ادخل بياناتك للإتصال بــ :"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "نسبة العرض إلى الإرتفاع: بكسل مربع (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "تحميل [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "رفع ترجمة"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "هل ترغب فعلًا أن ترفع ملف الترجمة \"%s\"؟"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.be.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.be.dialogs.po
index b1bc6f272..a8f5227e7 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.be.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.be.dialogs.po
@@ -1,31 +1,33 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Haxyc, 2016
+# Yauhen Bugamol <haxycgm@gmail.com>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Belarusian (http://www.transifex.com/projects/p/mpc-hc/language/be/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-11-06 02:43+0000\n"
+"Last-Translator: Yauhen Bugamol <haxycgm@gmail.com>\n"
+"Language-Team: Belarusian (http://www.transifex.com/mpc-hc/mpc-hc/language/be/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: be\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
msgid "Select Media Type"
-msgstr "Абярыце тып"
+msgstr "Выберыце тып мультымедыя"
msgctxt "IDD_SELECTMEDIATYPE_IDOK"
msgid "OK"
-msgstr ""
+msgstr "Добра"
msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
msgid "Cancel"
-msgstr "Адмена"
+msgstr "Скасаваць"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
msgid "Video"
@@ -37,27 +39,27 @@ msgstr "Зах."
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "Audio"
-msgstr "Аўдыё"
+msgstr "Аўдыя"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "Output"
-msgstr "Захаванне"
+msgstr "Вывад"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
msgid "Record Video"
-msgstr "Відэа"
+msgstr "Запіс відэа"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
msgid "Preview"
-msgstr "Прагляд"
+msgstr "Папярэдні прагляд"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
msgid "Record Audio"
-msgstr "Аўдыё"
+msgstr "Запіс аўдыя"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
msgid "Preview"
-msgstr "Прагляд"
+msgstr "Папярэдні прагляд"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "V/A Buffers:"
@@ -65,7 +67,7 @@ msgstr "V/A буфер:"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
msgid "Audio to wav"
-msgstr "Гук у wav"
+msgstr "Аўдыя ў wav"
msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
msgid "Record"
@@ -73,19 +75,19 @@ msgstr "Запіс"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
msgid "Enable built-in audio switcher filter (requires restart)"
-msgstr "Уключыць убудаваны перамыкач аўдыёсцежак (патрэбны перазапуск)"
+msgstr "Уключыць убудаваны пераключальнік аўдыя (патрабуецца перазапуск)"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
msgid "Normalize"
-msgstr "Нармалізав."
+msgstr "Нармалізацыя"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
msgid "Max amplification:"
-msgstr ""
+msgstr "Максімальнае ўзмацненне"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
msgid "Regain volume"
@@ -97,27 +99,27 @@ msgstr "Узмацненне:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
msgid "Down-sample to 44100 Hz"
-msgstr "Пераўтварыць у 44100 Гц"
+msgstr "Ператварыць у 44100 Гц"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
-msgstr "Зрушэнне гуку (у мс):"
+msgstr "Зрушэнне гуку (мс):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
msgstr "Уключыць карыстальніцкае размеркаванне каналаў"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Налада калонак для "
+msgid "Speaker configuration for"
+msgstr "Налада калонак для"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "уваходных каналаў:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Утрымлівайце shift для неадкладнага прыняцця змен пры націску "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Утрымлівайце shift пры націсканні каб неадкладна ўжыць змены."
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -125,7 +127,7 @@ msgstr "Перайсці..."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
-msgstr "Увядзіце не больш 4 лікаў, падзеленых чым заўгодна, акрамя лічбаў. Адзін лік значыць мс, два ліку - сек і мс, і г.д."
+msgstr "Каб перайсці на патрэбную пазіцыю, увядзіце час у фармаце [гг:]хв:сс.мс. "
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Time"
@@ -133,11 +135,11 @@ msgstr "Час"
msgctxt "IDD_GOTO_DLG_IDC_OK1"
msgid "Go!"
-msgstr "Наперад!"
+msgstr "Перайсці"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
-msgstr "Увядзіце два ліка для пераходу да зададзенага кадра: першы - нумар кадра, другі - лік кадраў у секунду."
+msgstr "Каб перайсці да патрэбнага кадра, увядзіце два лікі: першы — нумар кадра, другі - колькасць кадраў у секунду."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Frame"
@@ -145,7 +147,7 @@ msgstr "Кадр"
msgctxt "IDD_GOTO_DLG_IDC_OK2"
msgid "Go!"
-msgstr "Наперад!"
+msgstr "Перайсці"
msgctxt "IDD_OPEN_DLG_CAPTION"
msgid "Open"
@@ -153,15 +155,15 @@ msgstr "Адкрыць"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Увядзіце адрас фільма або аўдыёфайла\n(у Інтэрнэт або на вашым кампутары)"
+msgstr "Увядзіце адрас фільма або аўдыяфайла (у Інтэрнэт або на вашым камп'ютары)"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
-msgstr "Адкрыць"
+msgstr "Адкрыць:"
msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
msgid "Browse..."
-msgstr "Абраць..."
+msgstr "Агляд..."
msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
msgid "Dub:"
@@ -173,11 +175,11 @@ msgstr "Агляд..."
msgctxt "IDD_OPEN_DLG_IDOK"
msgid "OK"
-msgstr ""
+msgstr "Добра"
msgctxt "IDD_OPEN_DLG_IDCANCEL"
msgid "Cancel"
-msgstr "Адмена"
+msgstr "Скасаваць"
msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
msgid "Add to playlist without opening"
@@ -188,20 +190,20 @@ msgid "About"
msgstr "Пра праграму"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 глядзiце файл Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 глядзіце файл Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
-msgstr "Гэтая праграма бясплатная і распаўсюджваецца пад ліцэнзіяй GNU General Public License."
+msgstr "Гэтая праграма бясплатная і распаўсюджваецца згодна з GNU General Public License."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Лакалізацыя: Містэр Ш"
+msgstr "Лакалізацыя: Містэр Ш, Bugamol"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
-msgstr ""
+msgstr "Звесткі пра зборку"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Version:"
@@ -209,43 +211,43 @@ msgstr "Версія :"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Compiler:"
-msgstr "Кампiлятар:"
+msgstr "Кампілятар:"
msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
msgid "Not used"
-msgstr ""
+msgstr "Не выкарыстоўваецца"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build date:"
-msgstr ""
+msgstr "Дата зборкі:"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Operating system"
-msgstr ""
+msgstr "Аперацыйная сістэма"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Name:"
-msgstr ""
+msgstr "Назва"
msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
msgid "Copy to clipboard"
-msgstr ""
+msgstr "Скапіяваць у буфер абмену"
msgctxt "IDD_ABOUTBOX_IDOK"
msgid "OK"
-msgstr ""
+msgstr "Добра"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Open options"
-msgstr "Адкрываць файлы выкарыст."
+msgstr "Адкрываць файлы..."
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
msgid "Use the same player for each media file"
-msgstr "адзін і той жа прайгравальнік для кожнага файла"
+msgstr "адным прайгравальнікам для кожнага файла"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
msgid "Open a new player for each media file played"
-msgstr "новы прайгравальнік для кожнага файла"
+msgstr "новым прайгравальнікам для кожнага файла"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Language"
@@ -253,11 +255,11 @@ msgstr "Мова"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Title bar"
-msgstr "У загалоўку"
+msgstr "Паказваць у загалоўку..."
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
msgid "Display full path"
-msgstr "адлюстр. поўны шлях"
+msgstr "поўны шлях"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
msgid "File name only"
@@ -265,11 +267,11 @@ msgstr "толькі імя файла"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
msgid "Don't prefix anything"
-msgstr "не адлюстроўваць нічога"
+msgstr "нічога"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
msgid "Replace file name with title"
-msgstr "Замяняць назвай"
+msgstr "Замяняць на назву"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Other"
@@ -281,7 +283,7 @@ msgstr "Значок у панэлі задач"
msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
msgid "Show OSD (requires restart)"
-msgstr "Паказаць OSD (патрабуецца перазапуск)"
+msgstr "Паказваць OSD (патрабуецца перазапуск)"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
msgid "Limit window proportions on resize"
@@ -297,7 +299,7 @@ msgstr "Захоўваць налады ў .ini файле"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
-msgstr "Выкл меню \"Адкрыць дыск\""
+msgstr "Адключыць меню «Адкрыць дыск»"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
msgid "Process priority above normal"
@@ -305,7 +307,7 @@ msgstr "Падвышаны прыярытэт працэсу"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
-msgstr ""
+msgstr "Уключыць падтрымку вокладак"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "History"
@@ -313,11 +315,11 @@ msgstr "Гісторыя"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
msgid "Keep history of recently opened files"
-msgstr "Захоўваць гісторыю адчын. файлаў"
+msgstr "Запамінаць адкрытыя файлы"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
msgid "Remember last playlist"
-msgstr ""
+msgstr "Запамінаць апошні спіс прайгравання"
msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
msgid "Remember File position"
@@ -341,19 +343,19 @@ msgstr "Памятаць апошні Pan-n-Scan Zoom"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
-msgstr ""
+msgstr "Дзеянне каманды «Адкрыць DVD/BD»"
msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
msgid "Prompt for location"
-msgstr ""
+msgstr "Запытваць размяшчэнне папкі"
msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
msgid "Always open the default location:"
-msgstr ""
+msgstr "Заўсёды адкрываць вызначаную папку:"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Preferred language for DVD Navigator and the external OGM Splitter"
-msgstr "Пераважная мова для навігатара DVD і падзельніка OGM"
+msgstr "Пажаданая мова для DVD Navigator і OGM Splitter"
msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
msgid "Menu"
@@ -361,11 +363,11 @@ msgstr "Меню"
msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
msgid "Audio"
-msgstr "Аўдыё"
+msgstr "Аўдыя"
msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
msgid "Subtitles"
-msgstr "Субтытры"
+msgstr "Субцітры"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Additional settings"
@@ -373,11 +375,11 @@ msgstr "Дадатковыя налады"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
-msgstr "Дазволіць субтытры у 'Line 21 Decoder' для людзей, якія дрэнна чуюць"
+msgstr "Дазволіць схаваныя субцітры ў «Line 21 Decoder»"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
-msgstr "Аўдыё"
+msgstr "Аўдыя"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Volume"
@@ -385,11 +387,11 @@ msgstr "Гучнасць"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Min"
-msgstr ""
+msgstr "Менш"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Max"
-msgstr ""
+msgstr "Больш"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
msgid "Balance"
@@ -397,11 +399,11 @@ msgstr "Баланс"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "L"
-msgstr ""
+msgstr "Лева"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "R"
-msgstr ""
+msgstr "Права"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Playback"
@@ -409,7 +411,7 @@ msgstr "Прайграванне"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
msgid "Play"
-msgstr "Паўтараць"
+msgstr "Прайграваць"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
msgid "Repeat forever"
@@ -417,15 +419,19 @@ msgstr "Паўтараць бясконца"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
msgid "time(s)"
-msgstr "разоў"
+msgstr "раз(ы)"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Паўтараць:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
-msgstr ""
+msgstr "Па сканчэнні прайгравання"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Вывад"
+msgid "Default zoom"
+msgstr "Маштаб па змаўчанні"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -433,27 +439,27 @@ msgstr "Аўтамаштаб:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
-msgstr ""
+msgstr "Упісаць у"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Default track preference"
-msgstr "Парадак загрузкі гуку"
+msgstr "Пажаданыя мовы"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
-msgstr "Субтытры:"
+msgstr "Субцітры:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio:"
-msgstr "Аўдыё:"
+msgstr "Аўдыя:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr ""
+msgstr "Дазволіць змяняць выбар знешняга сплітара."
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
@@ -469,51 +475,47 @@ msgstr "Справазд. аб памылках рэндэрынгу струм
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
-msgstr "Аўтазагрузка гуку"
-
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr ""
+msgstr "Аўтаматычна загружаць аўдыяфайлы"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
-msgstr ""
+msgstr "Кіраванне"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Volume step:"
-msgstr ""
+msgstr "Шаг гучнасці:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Speed step:"
-msgstr ""
+msgstr "Шаг хуткасці:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
msgid "Override placement"
-msgstr "Змяніць становішча"
+msgstr "Змяніць размяшчэнне"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
msgid "Horizontal:"
-msgstr "Гарызант:"
+msgstr "Гарызанталь:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC2"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC3"
msgid "Vertical:"
-msgstr "Верт:"
+msgstr "Вертыкаль:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC4"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr ""
+msgstr "Шаг затрымкі:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -521,55 +523,55 @@ msgstr "мс"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Texture settings (open the video again to see the changes)"
-msgstr "Налада тэкстуры (адкрыйце відэа зноў, каб убачыць змены)"
+msgstr "Налады тэкстуры (каб убачыць змены, адкрыйце відэа зноў)"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Sub pictures to buffer:"
-msgstr "Лік старонак кэшыруемых наперад:"
+msgstr "Колькасць кадраў у буферы:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Maximum texture resolution:"
-msgstr "Максімальная вырашальнасць тэкстуры:"
+msgstr "Максімальная разрознасць тэкстуры:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
msgid "Never animate the subtitles"
-msgstr ""
+msgstr "Ніколі не анімаваць субцітры"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
msgid "Render at"
-msgstr ""
+msgstr "Апрацоўваць"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
msgid "% of the animation"
-msgstr ""
+msgstr "% анімацыі"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
msgid "Animate at"
-msgstr ""
+msgstr "Анімаваць"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
msgid "% of the video frame rate"
-msgstr ""
+msgstr "% частаты кадраў відэа"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr ""
+msgstr "Дазволіць пропуск некаторых кадраў пры запазненні"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
-msgstr ""
+msgstr "Апрацоўшчык відэа"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
msgid "Apply aspect ratio compensation for anamorphic videos"
-msgstr ""
+msgstr "Карэктаваць прапорцыі анамарфаванага відэафармата."
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Warning"
-msgstr "Увага"
+msgstr "Папярэджанне"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Калі вы зменіце становішча і задзейнічаеце поўнаэкраннае згладжванне ў наладах відэакарты, субтытры не будуць выглядаць лепш, але будуць празмеру нагружаць працэсар."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Калі вы зменіце размяшчэнне і задзейнічаеце ў наладах відэакарты поўнаэкраннае згладжванне, субцітры не стануць выглядаць лепш, але пачнуць празмерна нагружаць працэсар."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -577,11 +579,11 @@ msgstr "Пашырэнні файлаў"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
msgid "Default"
-msgstr "Стандартна"
+msgstr "Па змаўчанні"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
msgid "Set"
-msgstr "Усталяваць"
+msgstr "Задаць"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
msgid "Association"
@@ -589,15 +591,15 @@ msgstr "Асацыяцыі"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr ""
+msgstr "Адмысловыя значкі фарматаў"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr ""
+msgstr "Выканаць ад імя &адміністратара"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "Зрабіць праграмай &па змаўчанні"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -605,19 +607,19 @@ msgstr "Адкрываць Real-Time Streaming Protocol (rtsp://...) праз:"
msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
msgid "RealMedia"
-msgstr ""
+msgstr "RealMedia"
msgctxt "IDD_PPAGEFORMATS_IDC_RADIO2"
msgid "QuickTime"
-msgstr ""
+msgstr "QuickTime"
msgctxt "IDD_PPAGEFORMATS_IDC_RADIO3"
msgid "DirectShow"
-msgstr ""
+msgstr "DirectShow"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
msgid "Check file extension first"
-msgstr "Спачатку глядзець пашырэнне"
+msgstr "Спачатку праверыць пашырэнне"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Explorer Context Menu"
@@ -645,19 +647,19 @@ msgstr "Музыка"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK4"
msgid "DVD"
-msgstr ""
+msgstr "DVD"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
msgid "Audio CD"
-msgstr ""
+msgstr "Аўдыя CD"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "Jump distances (small, medium, large in ms)"
-msgstr "Адлегласці пераходу (кароткая, сярэдняя, доўгая) у мс"
+msgstr "Адлегласці пераходу ў мс (кароткая, сярэдняя, доўгая)"
msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
msgid "Default"
-msgstr "Стандартна"
+msgstr "Па змаўчанні"
msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
msgid "Fast seek (on keyframe)"
@@ -665,39 +667,39 @@ msgstr "Хуткая перамотка (па ключавых кадрах)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
msgid "Show chapter marks in seek bar"
-msgstr ""
+msgstr "Паказваць пазначнікі сцэн на паласе прагорткі"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
-msgstr ""
+msgstr "Адпраўляць у статус Skype звесткі пра што «Зараз прайграецца» "
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
-msgstr "Не згортваць акно на дадатковым дысплеі ў поўнаэкранным рэжыме"
+msgstr "Не згортваць прайгравальнік на дадатковым экране ў поўнаэкранным рэжыме"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Выкарыстоўваць магчымасці таскбара Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Пашыраныя функцыі панэлі заданняў"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Адкрыць наступны/папярэднi файл у папцы пры нацiску папярэднi/наступны, калi у плэйлiсце адзiн файл"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Калі ў спісе прайгравання адзін файл, пры націсканні кнопак «Наперад/Назад» адкрываць наступны/папярэдні файл у папцы "
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Паказваць час:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
-msgstr "OSD Шрыфт"
+msgstr "Шрыфт OSD:"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
msgid "Enable Logitech LCD support (experimental)"
-msgstr "Укл падтрымку Logitech LCD (эксперыментальна)"
+msgstr "Уключыць падтрымку Logitech LCD (эксперыментальная)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
-msgstr ""
+msgstr "Падчас прайгравання хаваць курсор мышы"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
msgid "Add Filter..."
@@ -733,7 +735,7 @@ msgstr "Новы тып..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
msgid "Add Sub Type..."
-msgstr "Новы субтып..."
+msgstr "Новы падтып..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
msgid "Delete"
@@ -793,7 +795,7 @@ msgstr "Дадаць у абранае"
msgctxt "IDD_FAVADD_IDC_STATIC"
msgid "Choose a name for your shortcut:"
-msgstr "Абярыце імя для цэтліка:"
+msgstr "Выберыце імя для ярлыка:"
msgctxt "IDD_FAVADD_IDC_CHECK1"
msgid "Remember position"
@@ -801,15 +803,15 @@ msgstr "Запомніць пазіцыю"
msgctxt "IDD_FAVADD_IDCANCEL"
msgid "Cancel"
-msgstr "Адмена"
+msgstr "Скасаваць"
msgctxt "IDD_FAVADD_IDOK"
msgid "OK"
-msgstr ""
+msgstr "Добра"
msgctxt "IDD_FAVADD_IDC_CHECK2"
msgid "Relative drive"
-msgstr "Адносны дыск"
+msgstr "Адносна дыска"
msgctxt "IDD_FAVORGANIZE_CAPTION"
msgid "Organize Favorites"
@@ -817,7 +819,7 @@ msgstr "Абранае"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
msgid "Rename"
-msgstr "Змяніць імя"
+msgstr "Перайменаваць"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
msgid "Move Up"
@@ -833,11 +835,11 @@ msgstr "Выдаліць"
msgctxt "IDD_FAVORGANIZE_IDOK"
msgid "OK"
-msgstr ""
+msgstr "Добра"
msgctxt "IDD_PNSPRESET_DLG_CAPTION"
msgid "Pan&Scan Presets"
-msgstr "Перадусталёўкі памераў і станаў"
+msgstr "Перадусталёўкі памеру і становішча"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
msgid "New"
@@ -861,7 +863,7 @@ msgstr "&Усталяваць"
msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
msgid "&Cancel"
-msgstr "&Адмена"
+msgstr "&Скасаваць"
msgctxt "IDD_PNSPRESET_DLG_IDOK"
msgid "&Save"
@@ -881,11 +883,11 @@ msgstr "Глабальныя мультымедыйныя клавішы"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
msgid "Select All"
-msgstr "Абраць усё"
+msgstr "Выбраць усё"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
msgid "Reset Selected"
-msgstr "Скінуць абраныя"
+msgstr "Скінуць выбраныя"
msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
msgid "Warning"
@@ -909,7 +911,7 @@ msgstr "Захаванне..."
msgctxt "IDD_SAVE_DLG_IDCANCEL"
msgid "Cancel"
-msgstr "Адмена"
+msgstr "Скасаваць"
msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
msgid "Encoding:"
@@ -921,7 +923,7 @@ msgstr "Кадаванне:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
msgid "Delay:"
-msgstr ""
+msgstr "Затрымка:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
msgid "ms"
@@ -929,11 +931,11 @@ msgstr "мс"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
msgid "Save custom style"
-msgstr ""
+msgstr "Захаваць адвольны стыль"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr ""
+msgstr "Якасць JPEG:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Thumbnails:"
@@ -957,7 +959,7 @@ msgstr "пікселяў"
msgctxt "IDD_ADDREGFILTER_CAPTION"
msgid "Select Filter"
-msgstr "Абярыце фільтр"
+msgstr "Выберыце фільтр"
msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
msgid "Browse..."
@@ -965,11 +967,11 @@ msgstr "Файл..."
msgctxt "IDD_ADDREGFILTER_IDOK"
msgid "OK"
-msgstr ""
+msgstr "Добра"
msgctxt "IDD_ADDREGFILTER_IDCANCEL"
msgid "Cancel"
-msgstr "Адмена"
+msgstr "Скасаваць"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Font"
@@ -1005,11 +1007,11 @@ msgstr "Контур"
msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
msgid "Opaque box"
-msgstr "Заліванне"
+msgstr "Запаўненне фону"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Width"
-msgstr "Шырыня мяжы"
+msgstr "Шырыня"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Shadow"
@@ -1017,7 +1019,7 @@ msgstr "Цень"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Screen Alignment && Margins"
-msgstr "Выраўніванне і водступы"
+msgstr "Выраўноўванне і водступы"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Left"
@@ -1037,7 +1039,7 @@ msgstr "Знізу"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
msgid "Position subtitles relative to the video frame"
-msgstr "Пазіцыянаваць адносна кадра"
+msgstr "Размяшчаць адносна відэакадра"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Colors && Transparency"
@@ -1045,11 +1047,11 @@ msgstr "Колеры і празрыстасць"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "0%"
-msgstr ""
+msgstr "0%"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "100%"
-msgstr ""
+msgstr "100%"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Primary"
@@ -1077,23 +1079,23 @@ msgstr "Фільтры крыніц"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Transform Filters"
-msgstr "Дэкодэры"
+msgstr "Фільтры пераўтварэння"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Internal LAV Filters settings"
-msgstr ""
+msgstr "Налады LAV Filters"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
msgid "Splitter"
-msgstr ""
+msgstr "Сплітар"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
msgid "Video decoder"
-msgstr ""
+msgstr "Дэкодар відэа"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
msgid "Audio decoder"
-msgstr ""
+msgstr "Дэкодар аўдыя"
msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
msgid "Internal:"
@@ -1105,7 +1107,7 @@ msgstr "Знешні:"
msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
msgid "Browse..."
-msgstr "Абраць..."
+msgstr "Агляд..."
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DirectShow Video"
@@ -1121,11 +1123,11 @@ msgstr "QuickTime відэа"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Audio Renderer"
-msgstr "DirectShow аўдыё"
+msgstr "DirectShow аўдыя"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr ""
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Налады VMR-9 (renderless) and EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1145,11 +1147,11 @@ msgstr "Рэініцыалізацыя пры змене манітора"
msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
msgid "D3D Fullscreen"
-msgstr "Поўнаэкранны Direct3D (ухіляе дрыгаценне)"
+msgstr "Поўнаэкранны Direct3D"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Alternative VSync"
-msgstr "Альтэрнатыўны VSync"
+msgstr "Альтэрнатыўная вертыкальная сінхранізацыя"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
msgid "VMR-9 Mixer Mode"
@@ -1157,7 +1159,7 @@ msgstr "Рэжым VMR-9 Mixer"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
msgid "YUV Mixing"
-msgstr "Змешванне ў YUV"
+msgstr "YUV Mixing"
msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
msgid "EVR Buffers:"
@@ -1165,27 +1167,31 @@ msgstr "Буферы EVR:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DXVA"
-msgstr ""
+msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr ""
+msgid "Subtitles"
+msgstr "Субцітры"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
-msgstr ""
+msgstr "Здымак экрана"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Shaders"
-msgstr ""
+msgstr "Шэйдары"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Rotation"
-msgstr ""
+msgstr "Паварот"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr ""
+msgid "Subtitle Renderer"
+msgstr "Апрацоўшчык субцітраў"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Кэшаваць скампіляваныя шэйдары"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1193,19 +1199,23 @@ msgstr "Слухаць порт:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
msgid "Launch in web browser..."
-msgstr "Запусціць у web-браўзэры..."
+msgstr "Запусціць у вэб-браўзеры..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
msgid "Enable compression"
-msgstr "Выкарыстаць сціск"
+msgstr "Уключыць сцісканне"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
-msgstr "Дазволіць доступ толькі з лакальнага кампутара"
+msgstr "Дазволіць доступ толькі з лакальнага камп'ютара"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Уключыць папярэдні прагляд"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
-msgstr "Выводзіць адладкавую інфармацыю"
+msgstr "Выводзіць адладачныя звесткі"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
msgid "Serve pages from:"
@@ -1213,7 +1223,7 @@ msgstr "Браць старонкі з:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
msgid "Browse..."
-msgstr "Абраць..."
+msgstr "Агляд..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
msgid "Deploy..."
@@ -1228,16 +1238,44 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Інтэрпрэтатары CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Спіс даступных субтытраў"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Загрузіць і адкрыць"
+msgid "Download subtitles"
+msgstr "Спампаваць субцітры"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Замяняць ужо адкрытыя субтытры"
+msgstr "Замяняць ужо адкрытыя субцітры"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Спампаваць"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Абнавіць"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Перарваць"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Налады"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Запампаваць субцітры"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Запампаваць"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Перарваць"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Налады"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
@@ -1265,19 +1303,19 @@ msgstr "Насычанасць"
msgctxt "IDD_PPAGEMISC_IDC_RESET"
msgid "Reset"
-msgstr "Скід"
+msgstr "Скінуць"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Update check"
-msgstr "Праверыць абнаўленне"
+msgstr "Праверка абнаўленняў"
msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
msgid "Enable automatic update check"
-msgstr "Укл. аўтаматычную праверку абнаўленняў"
+msgstr "Уключыць аўтаматычную праверку абнаўленняў"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Інтэрвал паміж абнаўленнямі:"
+msgid "Check every:"
+msgstr "Правяраць праз кожныя:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1289,7 +1327,7 @@ msgstr "Кіраванне наладамі"
msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
msgid "Reset"
-msgstr "Скід"
+msgstr "Скінуць"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
msgid "Export"
@@ -1297,11 +1335,11 @@ msgstr "Экспарт"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
msgid "Export keys"
-msgstr ""
+msgstr "Экспарт клавіш"
msgctxt "IDD_TUNER_SCAN_CAPTION"
msgid "Tuner scan"
-msgstr "Пошук т'юнера"
+msgstr "Пошук цюнера"
msgctxt "IDD_TUNER_SCAN_ID_START"
msgid "Start"
@@ -1309,19 +1347,19 @@ msgstr "Запуск"
msgctxt "IDD_TUNER_SCAN_IDCANCEL"
msgid "Cancel"
-msgstr "Выхад"
+msgstr "Скасаваць"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Freq. Start"
-msgstr "Част. Пачатку"
+msgstr "Пачатковая частата"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Bandwidth"
-msgstr "Шыр. пропуску"
+msgstr "Паласа прапускання"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Freq. End"
-msgstr "Част. Канчатку"
+msgstr "Канцавая частата"
msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
msgid "Ignore encrypted channels"
@@ -1333,19 +1371,19 @@ msgstr "Захаваць"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "S"
-msgstr ""
+msgstr "С"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Q"
-msgstr ""
+msgstr "Я"
msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
msgid "Use an offset"
-msgstr "Выкарыстоўваць змяшчэнне"
+msgstr "Выкарыстоўваць зрух"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Default Device"
-msgstr "Стандартная прылада"
+msgstr "Прылада па змаўчанні"
msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
msgid "Analog"
@@ -1365,7 +1403,7 @@ msgstr "Відэа"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC2"
msgid "Audio"
-msgstr "Аўдыё"
+msgstr "Аўдыя"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC3"
msgid "Country"
@@ -1377,31 +1415,31 @@ msgstr "Лічбавыя налады (BDA)"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
msgid "Network Provider"
-msgstr "Сеткавы правайдэр"
+msgstr "Сеткавы правайдар"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
msgid "Tuner"
-msgstr "Т'юнер"
+msgstr "Цюнер"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC6"
msgid "Receiver"
-msgstr "Рэсівер"
+msgstr "Прыёмнік"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
msgid "Channel switching approach:"
-msgstr ""
+msgstr "Змяненне канала:"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
msgid "Rebuild filter graph"
-msgstr ""
+msgstr "Перарабіць граф"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
msgid "Stop filter graph"
-msgstr ""
+msgstr "Спыніць граф"
msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
msgid "Sync video to display"
-msgstr "Сінхр. відэа да дысплэя"
+msgstr "Сінхранізаваць відэа з дысплэем"
msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
msgid "Frequency adjustment:"
@@ -1409,7 +1447,7 @@ msgstr "Карэкцыя частаты:"
msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
msgid "Sync display to video"
-msgstr "Сінхр. дысплэй да відэа"
+msgstr "Сінхранізаваць дысплэй з відэа"
msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
msgid "Frequency adjustment:"
@@ -1425,7 +1463,7 @@ msgstr "слупкі"
msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
msgid "Present at nearest VSync"
-msgstr "Перадаць на бліжэйшы vsync"
+msgstr "Паказ пры найбліжэйшай вертыкальнай сінхранізацыі"
msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
msgid "Target sync offset:"
@@ -1441,7 +1479,7 @@ msgstr "Ліміты кіравання:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
msgid "+/-"
-msgstr ""
+msgstr "+/-"
msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
msgid "ms"
@@ -1449,15 +1487,15 @@ msgstr "мс"
msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
msgid "Changes take effect after the playback has been closed and restarted."
-msgstr "Змены ўступяць у моц пасля перазагрузкі відэа."
+msgstr "Змены ажыццявяцца толькі пасля перазапуску прайгравання."
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
msgid "Launch files in fullscreen"
-msgstr "Запуск файлаў на поўны экран"
+msgstr "Запуск файлаў у поўнаэкранным рэжыме"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
msgid "Hide controls in fullscreen"
-msgstr ""
+msgstr "Схаваць элементы кіравання ў поўнаэкранным рэжыме."
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
msgid "ms"
@@ -1465,19 +1503,19 @@ msgstr "мс"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
msgid "Hide docked panels"
-msgstr ""
+msgstr "Схаваць замацаваныя панэлі"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
msgid "Exit fullscreen at the end of playback"
-msgstr "Выхад з поўнаэкр. рэжыму па канч. прайгравання"
+msgstr "Выйсці з поўнаэкраннага рэжыму па сканчэнні прайгравання"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Fullscreen monitor"
-msgstr "Манітор для поўнаэкраннага вываду"
+msgstr "Манітор для поўнаэкраннага рэжыму"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
msgid "Use autochange fullscreen monitor mode"
-msgstr "Ужываць аўтазменты поўнаэкр. рэжыму"
+msgstr "Выкарыстаўваць аўтазмену рэжыму манітора ў поўнаэкранным рэжыме"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
msgid "Add"
@@ -1485,7 +1523,7 @@ msgstr "Дадаць"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
msgid "Del"
-msgstr "Выдал"
+msgstr "Выдаліць"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
msgid "Up"
@@ -1497,19 +1535,19 @@ msgstr "Уніз"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
msgid "Apply default monitor mode on fullscreen exit"
-msgstr "Устал. стандарт. налады пры выхадзе з поўнаэкр. рэжыму"
+msgstr "Ужыць рэжым манітора па змаўчанні пасля выхаду з поўнаэкраннага рэжыму"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
msgid "Restore resolution on program exit"
-msgstr "Узнаўляць вырашальнасць пасля выхаду з праграмы"
+msgstr "Аднаўляць разрознасць пасля выхаду з праграмы"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Delay"
-msgstr ""
+msgstr "Затрымка"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
msgid "s"
-msgstr ""
+msgstr "с"
msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
msgid "Info"
@@ -1521,35 +1559,47 @@ msgstr "Сканір."
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
msgid "Prefer forced and/or default subtitles tracks"
-msgstr ""
+msgstr "Аддаваць перавагу фарсіраваным і/або субцітрам па змаўчанні"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
msgid "Prefer external subtitles over embedded subtitles"
-msgstr "Заўсёды выкарыстоўваць знешнія субтытры як асноўныя"
+msgstr "Выкарыстоўваць знешнія субцітры замест убудаваных"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
-msgstr "Не загружаць убудаваныя субтытры"
+msgstr "Не загружаць убудаваныя субцітры"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
msgid "Autoload paths"
-msgstr "Шлях да знешніх субтытраў"
+msgstr "Шлях да знешніх субцітраў"
msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
msgid "Reset"
-msgstr "Скід"
+msgstr "Скінуць"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Online База"
+msgid "Online search, download and upload subtitles"
+msgstr "Пошук у інтэрнэце, спампоўка і запампоўка субцітраў"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Калі субцітраў няма, знайсці і спампаваць іх аўтаматычна"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Пажаданы субцітры для людзей з парушэннем слыху (калі ёсць)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ігнараваць файлы з наступнымі словамі:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "URL анлайнавай базы субтытраў:"
+msgid "Languages in order of preference:"
+msgstr "Пажаданыя мовы"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Тэст"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Па сканчэнні відэа, аўтаматычна запампаваць актыўныя субцітры"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1565,15 +1615,15 @@ msgstr "Напомніць пазней"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
msgid "&Ignore this update"
-msgstr "Ігнараваць гэтае абнаўленне"
+msgstr "Ігна&раваць гэтае абнаўленне"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr ""
+msgstr "Шэйдары змяшчаюць адмысловыя эфекты, якія дадаюцца ў працэс апрацоўкі відэа."
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
-msgstr ""
+msgstr "Дадаць файл шэйдара"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
msgid "Remove"
@@ -1581,19 +1631,19 @@ msgstr "Выдаліць"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
msgid "Add to pre-resize"
-msgstr ""
+msgstr "Дадаць у pre-resize"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
msgid "Add to post-resize"
-msgstr ""
+msgstr "Дадаць у post-resize"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
-msgstr ""
+msgstr "Налады шэйдараў"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
msgid "Load"
-msgstr ""
+msgstr "Загрузіць"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
msgid "Save"
@@ -1605,61 +1655,141 @@ msgstr "Выдаліць"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active pre-resize shaders"
-msgstr ""
+msgstr "Актыўныя pre-resize шэйдары"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active post-resize shaders"
-msgstr ""
+msgstr "Актыўныя post-resize шэйдары"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
-msgstr ""
+msgstr "Адладка шэйдараў"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
msgid "Debug Information"
-msgstr ""
+msgstr "Адладачныя звесткі"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
msgid "PS 2.0"
-msgstr ""
+msgstr "PS 2.0"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO2"
msgid "PS 2.0b"
-msgstr ""
+msgstr "PS 2.0b"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO3"
msgid "PS 2.0a"
-msgstr ""
+msgstr "PS 2.0a"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO4"
msgid "PS 3.0"
-msgstr ""
+msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr ""
+msgstr "Пашыраныя налады. Не змяняйце іх, калі не ведаеце, што робіце."
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
-msgstr ""
+msgstr "True"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
msgid "False"
-msgstr ""
+msgstr "False"
msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Стандартна"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Прылада"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Выключны доступ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Дазволіць бітстрымінг"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Налады"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Уключыць бінаўральныя эфекты стэрэа (для навушнікаў)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Адсячэнне:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Узровень:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Нататка"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Каб панізіць скажэнні аўдыя, падчас прайгравання гучнага змесціва сціснутага са стратамі, рэкамендуецца трымаць гучнасць каля 85%."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr ""
+msgstr "Якасць JPEG:"
msgctxt "IDD_CMD_LINE_HELP_CAPTION"
msgid "Command line help"
-msgstr ""
+msgstr "Дапамога па каманднаму радку"
msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
-msgstr ""
+msgstr "Добра"
+
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Справаздачы пра збоі"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "На жаль, адбыўся збой MPC-HC. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Адпраўце справаздачу пра збой, каб мы вызначылі і выправілі праблему."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Дадатковыя звесткі"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Эл. пошта:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Пакідаць сваю эл. пошту неабавязкова, але яна можа спатрэбіцца распрацоўнікам, каб удакладніць звесткі."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Апісанне праблемы (на англійскай мове):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Перазапусціць MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Выйсці з MPC-HC"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.be.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.be.menus.po
index 42d52a1fe..46b7d993a 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.be.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.be.menus.po
@@ -1,19 +1,20 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Yauhen Bugamol <haxycgm@gmail.com>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:01+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Belarusian (http://www.transifex.com/projects/p/mpc-hc/language/be/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-11-06 02:38+0000\n"
+"Last-Translator: Yauhen Bugamol <haxycgm@gmail.com>\n"
+"Language-Team: Belarusian (http://www.transifex.com/mpc-hc/mpc-hc/language/be/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: be\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
msgctxt "POPUP"
msgid "&File"
@@ -29,15 +30,15 @@ msgstr "&Адкрыць файл..."
msgctxt "ID_FILE_OPENDVDBD"
msgid "Open &DVD/BD..."
-msgstr "Адкрыць DVD/BD..."
+msgstr "А&дкрыць DVD/BD..."
msgctxt "ID_FILE_OPENDEVICE"
msgid "Open De&vice..."
-msgstr "Адкрыць &прыладу..."
+msgstr "Адкры&ць прыладу..."
msgctxt "ID_FILE_OPENDIRECTORY"
msgid "Open Dir&ectory..."
-msgstr "Адкрыць папку..."
+msgstr "Адкрыць &папку..."
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
@@ -45,7 +46,7 @@ msgstr "Адкрыць &дыск"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
-msgstr "Апошнія адкрыт. файлы"
+msgstr "Нядаўнія &файлы"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
@@ -53,39 +54,35 @@ msgstr "&Закрыць"
msgctxt "ID_FILE_SAVE_COPY"
msgid "&Save a Copy..."
-msgstr "&Захаваць як..."
+msgstr "Заха&ваць як..."
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
-msgstr "Захаваць &малюнак..."
+msgstr "Захаваць &кадр..."
msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
-msgstr "Захаваць &мініяцюры..."
-
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Адкрыць су&бтытры..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "За&хаваць субтытры..."
+msgstr "Захаваць &мініяцюры кадраў..."
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "База субтытраў"
+msgid "S&ubtitles"
+msgstr "Субцітры"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Адкры&ць субцітры..."
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Знайсці..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "З&ахаваць субцітры..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Аплоад..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Спампаваць субцітры..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Загрузіць..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "За&пампаваць субцітры..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -93,7 +90,7 @@ msgstr "У&ласцівасці"
msgctxt "ID_FILE_EXIT"
msgid "E&xit"
-msgstr "В&ыхад"
+msgstr "В&ыйсці"
msgctxt "POPUP"
msgid "&View"
@@ -109,11 +106,11 @@ msgstr "&Паласа прагорткі"
msgctxt "ID_VIEW_CONTROLS"
msgid "&Controls"
-msgstr "&Кіраванне"
+msgstr "Панэль наві&гацыі"
msgctxt "ID_VIEW_INFORMATION"
msgid "&Information"
-msgstr "&Інфармацыя"
+msgstr "Зв&есткі"
msgctxt "ID_VIEW_STATISTICS"
msgid "&Statistics"
@@ -121,11 +118,11 @@ msgstr "&Статыстыка"
msgctxt "ID_VIEW_STATUS"
msgid "St&atus"
-msgstr "С&татусны радок"
+msgstr "Радок с&тану "
msgctxt "ID_VIEW_SUBRESYNC"
msgid "Su&bresync"
-msgstr "Сінхранізацыя су&бтытраў"
+msgstr "Сінхранізацыя су&бцітраў"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
@@ -137,11 +134,11 @@ msgstr "&Захоп"
msgctxt "ID_VIEW_NAVIGATION"
msgid "Na&vigation"
-msgstr "Навігацыя"
+msgstr "&Навігацыя"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr ""
+msgstr "&Адладка шэйдараў"
msgctxt "POPUP"
msgid "&Presets..."
@@ -157,27 +154,27 @@ msgstr "&Кампактная"
msgctxt "ID_VIEW_PRESETS_NORMAL"
msgid "&Normal"
-msgstr "&Нармалёвая"
+msgstr "&Нармальная"
msgctxt "ID_VIEW_FULLSCREEN"
msgid "F&ull Screen"
-msgstr "Ва ўвесь &экран"
+msgstr "На ўвесь &экран"
msgctxt "POPUP"
msgid "&Zoom"
-msgstr "Zoom"
+msgstr "Ма&штаб"
msgctxt "ID_VIEW_ZOOM_50"
msgid "&50%"
-msgstr ""
+msgstr "&50%"
msgctxt "ID_VIEW_ZOOM_100"
msgid "&100%"
-msgstr ""
+msgstr "&100%"
msgctxt "ID_VIEW_ZOOM_200"
msgid "&200%"
-msgstr ""
+msgstr "&200%"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
@@ -195,13 +192,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Тэст дрыгацення"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "&Паказваць статыстыку"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Пакінуты час"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Паказваць &цяперашні час"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Паказваць імя &файла"
msgctxt "POPUP"
msgid "&Output Range"
@@ -209,11 +210,11 @@ msgstr "Дыяпазон вываду"
msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
msgid "&0 - 255"
-msgstr "0 - 255"
+msgstr "&0 - 255"
msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
msgid "&16 - 235"
-msgstr "16 - 235"
+msgstr "&16 - 235"
msgctxt "POPUP"
msgid "&Presentation"
@@ -229,7 +230,7 @@ msgstr "Поўнаэкранны D3D з падтрымкай GUI"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "10-бітны RGB на выхадзе"
+msgstr "10-бітны RGB-вывад"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
@@ -237,11 +238,11 @@ msgstr "Фарсіраваць 10-бітны RGB на ўваходзе"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
-msgstr "Поўная апрацоўка з плывучай кропкай"
+msgstr "Поўная апрацоўка лікаў з нефіксаванай коскай"
msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
msgid "&Half Floating Point Processing"
-msgstr "Палавінная апрацоўка з плывучай кропкай"
+msgstr "Палавінная апрацоўка лікаў з нефіксаванай коскай"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
@@ -249,7 +250,7 @@ msgstr "Адкл. эфекты прац. стала"
msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time &Correction"
-msgstr "Укл. карэкцыю часу кадра"
+msgstr "Уключыць &карэкцыю часу кадра"
msgctxt "POPUP"
msgid "&Color Management"
@@ -265,39 +266,39 @@ msgstr "Уваходны тып"
msgctxt "ID_VIEW_CM_INPUT_AUTO"
msgid "&Auto-Detect"
-msgstr "Аўта-вызначэнне"
+msgstr "Аўтавызначэнне"
msgctxt "ID_VIEW_CM_INPUT_HDTV"
msgid "&HDTV"
-msgstr "HDTV"
+msgstr "&HDTV"
msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
msgid "SDTV &NTSC"
-msgstr "SDTV NTSC"
+msgstr "SDTV &NTSC"
msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
msgid "SDTV &PAL"
-msgstr "SDTV PAL"
+msgstr "SDTV &PAL"
msgctxt "POPUP"
msgid "Ambient &Light"
-msgstr "Знешняе Святло"
+msgstr "Знешняе &асвятленне"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
-msgstr "Светлы (2.2 Gamma)"
+msgstr "Светлае (Гама 2.2)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
msgid "&Dim (2.35 Gamma)"
-msgstr "Цьмяны (2.35 Gamma)"
+msgstr "Прыцемненае (Гама 2.35)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
-msgstr "Цёмны (2.4 Gamma)"
+msgstr "Цёмнае (Гама 2.4)"
msgctxt "POPUP"
msgid "&Rendering Intent"
-msgstr "Прызначэнне рэндэрэнгу"
+msgstr "&Мэта апрацоўкі"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
@@ -305,39 +306,39 @@ msgstr "Па ўспрыманню"
msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
msgid "&Relative Colorimetric"
-msgstr "Адносная каламетрыя"
+msgstr "Адносны каларыметрычны"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
-msgstr "Насычэнне"
+msgstr "Насычанасць"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
-msgstr "Абсалютная каламетрыя"
+msgstr "Абсалютная каларыметрыя"
msgctxt "POPUP"
msgid "&VSync"
-msgstr "VSync"
+msgstr "&Вертыкальная сінхранізацыя"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "VSync"
+msgstr "VSyn&с"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "Акуратны VSync"
+msgstr "&Дакладная VSync"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "Альтернатыўны VSync"
+msgstr "&Альтернатыўная VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "&Паменшыць зрух vsync"
+msgstr "&Паменшыць зрух VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "Павялічыць зрух vsync"
+msgstr "Па&вялічыць зрух VSync"
msgctxt "POPUP"
msgid "&GPU Control"
@@ -345,19 +346,19 @@ msgstr "GPU Кантроль"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "Запоўніць GPU перад VSync"
+msgstr "Ачышчаць буфер GPU перад верт. сінх."
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
-msgstr "Запоўніць GPU пасля паказу"
+msgstr "Ачышчаць буфер GPU пасля паказу"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "Чакаць запаўнення"
+msgstr "Чакаць ачышчэння буфера"
msgctxt "POPUP"
msgid "R&eset"
-msgstr "Скід"
+msgstr "Скінуць"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
@@ -377,7 +378,7 @@ msgstr "&Палавінны памер"
msgctxt "ID_VIEW_VF_NORMAL"
msgid "&Normal Size"
-msgstr "&Нармалёвы памер"
+msgstr "&Нармальны памер"
msgctxt "ID_VIEW_VF_DOUBLE"
msgid "&Double Size"
@@ -389,59 +390,59 @@ msgstr "&Расцягнуць да памераў акна"
msgctxt "ID_VIEW_VF_FROMINSIDE"
msgid "Touch Window From &Inside"
-msgstr "&Упісаць унутр акна"
+msgstr "&Упісаць у акно"
msgctxt "ID_VIEW_VF_ZOOM1"
msgid "Zoom &1"
-msgstr ""
+msgstr "Маштаб &1"
msgctxt "ID_VIEW_VF_ZOOM2"
msgid "Zoom &2"
-msgstr ""
+msgstr "Маштаб &2"
msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
-msgstr "&Апісаць звонку акна"
-
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Захоўваць прапорцыі"
+msgstr "&Запоўніць акно і абрэзаць відэакадр"
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Усталяваць прапорцыі"
+msgid "&Aspect Ratio"
+msgstr "&Прапорцыі"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Па змаўчанні"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Па &змаўчанні (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
-msgstr "4:3"
+msgstr "&4:3"
msgctxt "ID_ASPECTRATIO_5_4"
msgid "&5:4"
-msgstr "5:4"
+msgstr "&5:4"
msgctxt "ID_ASPECTRATIO_16_9"
msgid "&16:9"
-msgstr "16:9"
+msgstr "&16:9"
msgctxt "ID_ASPECTRATIO_235_100"
msgid "&235:100"
-msgstr "235:100"
+msgstr "&235:100"
msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
-msgstr "185:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Дапускаць квадратныя пікселі (SAR)"
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
-msgstr "&Улічваць розніцу аспекту манітора/прац.стала"
+msgstr "&Выпраўляць розніцу прапорцый экрана і працоўнага стала"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
-msgstr "Стан і памер кадра"
+msgstr "Становішча і памер кадра"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
@@ -469,11 +470,11 @@ msgstr "Паменшыць вышыню"
msgctxt "ID_PANSCAN_MOVERIGHT"
msgid "Move &Right"
-msgstr "Зрушыць направа"
+msgstr "Зрушыць управа"
msgctxt "ID_PANSCAN_MOVELEFT"
msgid "Move &Left"
-msgstr "Зрушыць налева"
+msgstr "Зрушыць улева"
msgctxt "ID_PANSCAN_MOVEUP"
msgid "Move &Up"
@@ -493,7 +494,7 @@ msgstr "Скінуць"
msgctxt "POPUP"
msgid "On &Top"
-msgstr "П&аверх усіх вокнаў"
+msgstr "Па-над &усімі вокнамі"
msgctxt "ID_ONTOP_DEFAULT"
msgid "&Default"
@@ -509,7 +510,7 @@ msgstr "Пры прайграванні"
msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
msgid "While Playing &Video"
-msgstr "Падчас прайгравання"
+msgstr "Падчас прайгравання відэа"
msgctxt "ID_VIEW_OPTIONS"
msgid "&Options..."
@@ -521,27 +522,43 @@ msgstr "&Прайграванне"
msgctxt "ID_PLAY_PLAYPAUSE"
msgid "&Play/Pause"
-msgstr "&Прайгр./Паўза"
+msgstr "&Прайграванне/Паўза"
msgctxt "ID_PLAY_STOP"
msgid "&Stop"
msgstr "&Стоп"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "Па &кадрах"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Паў&тараць..."
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "&Заўсёды"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Файл"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Спіс прайгравання"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
-msgstr "Паменьшыць хуткасць"
+msgstr "Па&меншыць хуткасць"
msgctxt "ID_PLAY_INCRATE"
msgid "&Increase Rate"
-msgstr "Павялічыць хуткасць"
+msgstr "Па&вялічыць хуткасць"
msgctxt "ID_PLAY_RESETRATE"
msgid "R&eset Rate"
-msgstr "С&кінуць хуткасць"
+msgstr "Вярн&уць зыходную хуткасць"
msgctxt "ID_FILTERS"
msgid "&Filters"
@@ -552,16 +569,16 @@ msgid "S&haders"
msgstr "&Шэйдары"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Аўдыё"
+msgid "&Audio Track"
+msgstr "Гукавая &дарожка"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "С&убтытры"
+msgid "Su&btitle Track"
+msgstr "Су&бцітры"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Відэаструмень"
+msgid "Vide&o Track"
+msgstr "&Відэа&рад"
msgctxt "POPUP"
msgid "&Volume"
@@ -569,11 +586,11 @@ msgstr "&Гучнасць"
msgctxt "ID_VOLUME_UP"
msgid "&Up"
-msgstr "&Вышэй"
+msgstr "Па&вялічыць"
msgctxt "ID_VOLUME_DOWN"
msgid "&Down"
-msgstr "&Ніжэй"
+msgstr "Па&меншыць"
msgctxt "ID_VOLUME_MUTE"
msgid "&Mute"
@@ -581,35 +598,43 @@ msgstr "&Адключыць"
msgctxt "POPUP"
msgid "Af&ter Playback"
-msgstr "Па канчатку прайгравання"
+msgstr "Па скан&чэнні прайгравання"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Нічога &не рабіць"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Прайграць наст&упны файл ў папцы"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Выключыць &манітор"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
-msgstr "Закрыць праграму"
+msgstr "Закры&ць праграму"
msgctxt "ID_AFTERPLAYBACK_STANDBY"
msgid "&Stand By"
-msgstr "Перайсці ў рэжым чакання"
+msgstr "Перайсці ў рэжым &чакання"
msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
msgid "&Hibernate"
-msgstr "Перайсці ў рэжым сну"
+msgstr "Перайсці ў рэжым &сну"
msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
msgid "Shut&down"
-msgstr "Выключыць кампутар"
+msgstr "В&ыключыць камп'ютар"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
-msgstr "Завяршыць сеанс"
+msgstr "Зав&яршыць сеанс"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "Блакаваць"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr ""
+msgstr "Заб&лакаваць камп'ютар"
msgctxt "POPUP"
msgid "&Navigate"
@@ -617,7 +642,7 @@ msgstr "&Навігацыя"
msgctxt "ID_NAVIGATE_SKIPBACK"
msgid "&Previous"
-msgstr "Папярэдні"
+msgstr "Папя&рэдні"
msgctxt "ID_NAVIGATE_SKIPFORWARD"
msgid "&Next"
@@ -625,7 +650,7 @@ msgstr "&Наступны"
msgctxt "ID_NAVIGATE_GOTO"
msgid "&Go To..."
-msgstr "&Пераход..."
+msgstr "&Перайсці..."
msgctxt "ID_NAVIGATE_TITLEMENU"
msgid "&Title Menu"
@@ -637,11 +662,11 @@ msgstr "&Каранёвае меню"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
-msgstr "Меню суб&тытраў"
+msgstr "Меню суб&цітраў"
msgctxt "ID_NAVIGATE_AUDIOMENU"
msgid "&Audio Menu"
-msgstr "Меню аў&дыё"
+msgstr "Меню аў&дыя"
msgctxt "ID_NAVIGATE_ANGLEMENU"
msgid "An&gle Menu"
@@ -661,23 +686,23 @@ msgstr "&Дапамога"
msgctxt "ID_HELP_HOMEPAGE"
msgid "&Home Page"
-msgstr "Хатняя старонка"
+msgstr "&Хатняя старонка"
msgctxt "ID_HELP_CHECKFORUPDATE"
msgid "Check for &updates"
-msgstr ""
+msgstr "Праверыць наяўнасць абнаўлен&няў"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
-msgstr "Параметры каманднага радка"
+msgstr "&Параметры каманднага радка"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
-msgstr "Загрузіць малюнкі панелі навігацыі"
+msgstr "&Спампаваць выявы для панэлі навігацыі"
msgctxt "ID_HELP_DONATE"
msgid "&Donate"
-msgstr "Ахвяраваць"
+msgstr "&Ахвяраваць"
msgctxt "ID_HELP_ABOUT"
msgid "&About..."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.be.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.be.strings.po
index 354d03c01..2f302c672 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.be.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.be.strings.po
@@ -1,20 +1,24 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Elijah Shymanski <bealphi@gmail.com>, 2016
+# Haxyc, 2016
# Underground78, 2014
+# Underground78, 2014
+# Yauhen Bugamol <haxycgm@gmail.com>, 2015-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Belarusian (http://www.transifex.com/projects/p/mpc-hc/language/be/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-25 10:11+0000\n"
+"Last-Translator: Yauhen Bugamol <haxycgm@gmail.com>\n"
+"Language-Team: Belarusian (http://www.transifex.com/mpc-hc/mpc-hc/language/be/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: be\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
msgctxt "IDS_INFOBAR_LOCATION"
msgid "Location"
@@ -26,15 +30,15 @@ msgstr "Відэа"
msgctxt "IDS_INFOBAR_AUDIO"
msgid "Audio"
-msgstr "Аўдыё"
+msgstr "Аўдыя"
msgctxt "IDS_INFOBAR_SUBTITLES"
msgid "Subtitles"
-msgstr "Субтытры"
+msgstr "Субцітры"
msgctxt "IDS_INFOBAR_CHAPTER"
msgid "Chapter"
-msgstr ""
+msgstr "Сцэна"
msgctxt "IDS_CONTROLS_COMPLETING"
msgid "Completing..."
@@ -60,10 +64,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Уласцівасці"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Файл"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Стандартны стыль"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Спіс прайгравання"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Файлы"
@@ -74,7 +86,7 @@ msgstr "DVD"
msgctxt "IDS_INFOBAR_CHANNEL"
msgid "Channel"
-msgstr ""
+msgstr "Канал"
msgctxt "IDS_INFOBAR_TIME"
msgid "Time"
@@ -82,31 +94,31 @@ msgstr "Час"
msgctxt "IDS_STATSBAR_SYNC_OFFSET"
msgid "Sync Offset"
-msgstr ""
+msgstr "Зрух VSync"
msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
msgid "avg: %d ms, dev: %d ms"
-msgstr ""
+msgstr "сярэд: %d мс, адхіл: %d мс"
msgctxt "IDS_STATSBAR_JITTER"
msgid "Jitter"
-msgstr ""
+msgstr "Ваганне"
msgctxt "IDS_STATSBAR_BITRATE"
msgid "Bitrate"
-msgstr ""
+msgstr "Бітрэйт"
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
-msgstr ""
+msgstr "(сяр/бягуч)"
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
-msgstr ""
+msgstr "Сігнал"
msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
msgid "Strength: %d dB, Quality: %ld%%"
-msgstr ""
+msgstr "Сіла: %d дБ, Якасць: %ld%%"
msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
msgid "Styles"
@@ -114,79 +126,99 @@ msgstr "Стылі"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr ""
+msgstr "Калі цэль апрацоўкі вызначыць немагчыма, SSA/ASS субцітры будуць апрацаваны адносна відэакадра, а ўсе астатнія субцітры адносна акна."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Паўтараць спіс прайгравання"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Паўтараць файл"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Паўтараць бясконца: Укл."
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Паўтараць бясконца: Адкл."
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Паўтараць бясконца"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
-msgstr ""
+msgstr "Ніколі (самы хуткі)"
msgctxt "IDS_PPAGE_CAPTURE_FG1"
msgid "Only when switching different video types (default)"
-msgstr ""
+msgstr "Толькі калі змяняецца тып відэа (па змаўчанні)"
msgctxt "IDS_PPAGE_CAPTURE_FG2"
msgid "Always (slowest option)"
-msgstr ""
+msgstr "Заўсёды (самы павольны)"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
msgid "Not supported by some devices. Two video decoders always present in the filter graph."
-msgstr ""
+msgstr "Не падтрымліваецца некаторымі прыладамі. Два дэкодары відэа заўсёды ў графе фільтраў."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr ""
+msgstr "Хуткі, акрамя момантаў пераключэння паміж рознымі патокамі відэа. Толькі адзін дэкодар відэа ў графе фільтраў."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
-msgstr ""
+msgstr "Не рэкамендуецца. Толькі для праверкі."
msgctxt "IDS_PPAGE_CAPTURE_SFG0"
msgid "Never if possible (fastest, but not supported by most filters)"
-msgstr ""
+msgstr "Ніколі, калі магчыма (хуткі, але не падтрымліваецца большасцю фільтраў)"
msgctxt "IDS_PPAGE_CAPTURE_SFG1"
msgid "Only when switching different video types (default)"
-msgstr ""
+msgstr "Толькі калі змяняецца тып відэа (па змаўчанні)"
msgctxt "IDS_PPAGE_CAPTURE_SFG2"
msgid "Always (may be required by some devices)"
-msgstr ""
+msgstr "Заўсёды (можа спатрэбіцца для некаторых прылад)"
msgctxt "IDS_INFOBAR_PARENTAL_RATING"
msgid "Parental rating"
-msgstr ""
+msgstr "Узроставы рэйтынг"
msgctxt "IDS_PARENTAL_RATING"
msgid "%d+"
-msgstr ""
+msgstr "%d+"
msgctxt "IDS_NO_PARENTAL_RATING"
msgid "Not rated"
-msgstr ""
+msgstr "Не ацэнена"
msgctxt "IDS_INFOBAR_CONTENT"
msgid "Content"
-msgstr ""
+msgstr "Змесціва"
msgctxt "IDS_CONTENT_MOVIE_DRAMA"
msgid "Movie/Drama"
-msgstr ""
+msgstr "Кіно/Драма"
msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
msgid "News/Current affairs"
-msgstr ""
+msgstr "Навіны/Падзеі"
msgctxt "IDS_SPEED_UNIT_G"
msgid "GB/s"
-msgstr ""
+msgstr "ГБ/с"
msgctxt "IDS_FILE_FAV_ADDED"
msgid "File added to favorites"
-msgstr "Файл даданы да абранага"
+msgstr "Файл дададзены ў абранае"
msgctxt "IDS_DVD_FAV_ADDED"
msgid "DVD added to favorites"
-msgstr "DVD даданы да абранага"
+msgstr "DVD дададзены ў абранае"
msgctxt "IDS_CAPTURE_SETTINGS"
msgid "Capture Settings"
@@ -198,7 +230,7 @@ msgstr "Панэль навігацыі"
msgctxt "IDS_SUBRESYNC_CAPTION"
msgid "Subresync"
-msgstr "Сінхранізацыя субтытраў"
+msgstr "Сінхранізацыя субцітраў"
msgctxt "IDS_SUBRESYNC_CLN_TIME"
msgid "Time"
@@ -210,19 +242,19 @@ msgstr "Канец"
msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
msgid "Preview"
-msgstr "Прагляд"
+msgstr "Папярэдні прагляд"
msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
msgid "Vob ID"
-msgstr ""
+msgstr "Vob ID"
msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
msgid "Cell ID"
-msgstr ""
+msgstr "Cell ID"
msgctxt "IDS_SUBRESYNC_CLN_FORCED"
msgid "Forced"
-msgstr ""
+msgstr "Фарсіраваныя"
msgctxt "IDS_SUBRESYNC_CLN_TEXT"
msgid "Text"
@@ -246,7 +278,7 @@ msgstr "Не атрымалася запытаць неабходныя інтэ
msgctxt "IDS_CAPTURE_LIVE"
msgid "Live"
-msgstr ""
+msgstr "Прамы эфір"
msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
msgid "Can't add video capture filter to the graph"
@@ -254,11 +286,11 @@ msgstr "Не магу дадаць фільтр захопа відэа"
msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
msgid "Can't add audio capture filter to the graph"
-msgstr "Немагчыма дадаць аўдыёфільтр захопу да графа"
+msgstr "Немагчыма дадаць аўдыяфільтр захопу да графа"
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
-msgstr "Немагчыма адкрыць прыладу захопу."
+msgstr "Не атрымалася адкрыць прыладу захопу."
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
@@ -274,7 +306,7 @@ msgstr "Уведзены час большы за працяг файла."
msgctxt "IDS_MISSING_ICONS_LIB"
msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
-msgstr "Бібліятэка абразкоў \"mpciconlib.dll\" не зноўдзена.\nСтандартныя абразкі плэера будуць ужытыя.\nКалі ласка, пераўсталюйце MPC-HC"
+msgstr "Не знойдзена бібліятэка значкоў «mpciconlib.dll»\nДля файлавых асацыяцый выкарыстаны звычайныя значкі.\nКаб аднавіць «mpciconlib.dll», пераўсталюйце MPC-HC."
msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
msgid "File"
@@ -290,7 +322,7 @@ msgstr "Фармат"
msgctxt "IDS_SUBDL_DLG_DISC_COL"
msgid "Disc"
-msgstr "Дыскc"
+msgstr "Дыск"
msgctxt "IDS_SUBDL_DLG_TITLES_COL"
msgid "Title(s)"
@@ -298,11 +330,11 @@ msgstr "Назва(ы)"
msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
msgid "CharSet"
-msgstr ""
+msgstr "CharSet"
msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
msgid "Unicode"
-msgstr ""
+msgstr "Юнікод"
msgctxt "IDS_SUBRESYNC_CLN_LAYER"
msgid "Layer"
@@ -310,7 +342,7 @@ msgstr "Слой"
msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
msgid "Actor"
-msgstr "Актор"
+msgstr "Акцёр"
msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
msgid "Effect"
@@ -318,27 +350,27 @@ msgstr "Эфект"
msgctxt "IDS_PLAYLIST_CAPTION"
msgid "Playlist"
-msgstr "Плэйліст"
+msgstr "Спіс прайгравання"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
msgstr "Укл/Адкл"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Ад fps"
+msgid "From (FPS)"
+msgstr "Ад (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Да fps"
+msgid "To (FPS)"
+msgstr "Да (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
-msgstr "Рэжым (Hz)"
+msgstr "Рэжым (Гц)"
msgctxt "IDS_PPAGE_FS_DEFAULT"
msgid "Default"
-msgstr "Стандартна"
+msgstr "Па змаўчанні"
msgctxt "IDS_PPAGE_FS_OTHER"
msgid "Other"
@@ -346,15 +378,15 @@ msgstr "Іншае"
msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
msgid "System Default"
-msgstr "Стандартны сістэмны"
+msgstr "Сістэмнае па змаўчанні"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
-msgstr ""
+msgstr "Не атрымалася запытаць неабходныя для прайгравання інтэрфейсы "
msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
msgid "Could not set target window for graph notification"
-msgstr ""
+msgstr "Не атрымалася стварыць акно для вываду графу"
msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
msgid "Failed to render all pins of the DVD Navigator filter"
@@ -398,11 +430,11 @@ msgstr "З&мяшаць"
msgctxt "IDS_PLAYLIST_RESTORE"
msgid "R&estore"
-msgstr "А&днавiць"
+msgstr "А&днавіць"
msgctxt "IDS_SUBRESYNC_SEPARATOR"
msgid "&Separator"
-msgstr "&Падзельнік"
+msgstr "&Раздзяляльнік"
msgctxt "IDS_SUBRESYNC_DELETE"
msgid "&Delete"
@@ -418,15 +450,15 @@ msgstr "&Скінуць"
msgctxt "IDS_MPLAYERC_104"
msgid "Subtitle Delay -"
-msgstr "Затрымка субтытраў -"
+msgstr "Затрымка субцітраў —"
msgctxt "IDS_MPLAYERC_105"
msgid "Subtitle Delay +"
-msgstr "Затрымка субтытраў +"
+msgstr "Затрымка субцітраў +"
msgctxt "IDS_FILE_SAVE_THUMBNAILS"
msgid "Save thumbnails"
-msgstr "Захаваць мiнiяцюры"
+msgstr "Захаваць мінiяцюры"
msgctxt "IDD_PPAGEPLAYBACK"
msgid "Playback"
@@ -442,7 +474,7 @@ msgstr "Прайграванне::DVD/OGM"
msgctxt "IDD_PPAGESUBTITLES"
msgid "Subtitles"
-msgstr "Субтытры"
+msgstr "Субцітры"
msgctxt "IDD_PPAGEFORMATS"
msgid "Player::Formats"
@@ -454,7 +486,7 @@ msgstr "Дадаткова"
msgctxt "IDD_PPAGEAUDIOSWITCHER"
msgid "Internal Filters::Audio Switcher"
-msgstr "Убудаваныя фільтры::Аудыёпераключальнік"
+msgstr "Убудаваныя фільтры::Пераключальнік аўдыя"
msgctxt "IDD_PPAGEEXTERNALFILTERS"
msgid "External Filters"
@@ -462,71 +494,91 @@ msgstr "Знешнія фільтры"
msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
-msgstr "Прайграванне::Shaders"
+msgstr "Прайграванне::Шэйдары"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Рэсурсы"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Рознае"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Прайграванне::Захоп"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Прайграванне::Sync Renderer"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Прайграванне::На ўвесь экран"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Убудаваныя фільтры::Апрацоўшчык аўдыя"
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
-msgstr "Аудыёпераключальнік"
+msgstr "Пераключальнік аўдыя"
msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
msgid "New version of the icon library"
-msgstr ""
+msgstr "Новая версія бібліятэкі значкоў"
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
-msgstr ""
+msgstr "Пераасацыяваць значкі?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
-msgstr ""
+msgstr "Калі пасля абнаўлення бібліятэкі значкоў, яны паказвацца няправільна, гэта вырашыць праблему.\nДзеянне не закранае асацыяцыі файлаў, абнаўляюцца толькі выявы значкоў."
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
-msgstr ""
+msgstr "Old Video Renderer"
msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
-msgstr ""
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr ""
+msgstr "Overlay Mixer Renderer"
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
-msgstr ""
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr ""
+msgstr "Video Mixing Renderer 9 (windowed)"
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
-msgstr ""
+msgstr "Video Mixing Renderer 9 (renderless)"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
-msgstr ""
+msgstr "Enhanced Video Renderer"
msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
msgid "Enhanced Video Renderer (custom presenter)"
-msgstr ""
+msgstr "Enhanced Video Renderer (custom presenter)"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
-msgstr ""
+msgstr "Haali Video Renderer"
msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
msgid "Null (anything)"
-msgstr ""
+msgstr "Null (усё)"
msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr ""
+msgstr "Null (без сціскання)"
msgctxt "IDS_PPAGE_OUTPUT_MADVR"
msgid "madVR"
-msgstr ""
+msgstr "madVR"
msgctxt "IDD_PPAGEACCELTBL"
msgid "Player::Keys"
@@ -534,7 +586,7 @@ msgstr "Прайгравальнік::Клавішы"
msgctxt "IDD_PPAGESUBSTYLE"
msgid "Subtitles::Default Style"
-msgstr "Субтытры::Стандартны стыль"
+msgstr "Субцітры::Стыль"
msgctxt "IDD_PPAGEINTERNALFILTERS"
msgid "Internal Filters"
@@ -550,107 +602,67 @@ msgstr "Прайграванне::Вывад"
msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
-msgstr "Прайгравальнік::Web-інтэрфейс"
-
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Субтытры::База"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Рэсурсы"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Рознае"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr ""
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Прайграванне::Захоп"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Прайграванне::Sync Renderer Settings"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Прайграванне::Поўны экран"
+msgstr "Прайгравальнік::Вэб-інтэрфейс"
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
-msgstr "Падрабязна"
+msgstr "Падрабязныя"
msgctxt "IDD_FILEPROPCLIP"
msgid "Clip"
-msgstr "Кліп"
+msgstr "Сціслыя"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
-msgstr "Стандартны відэа рэндэр для DirectShow. Гэты рэжым заўсёды ўключаецца ў тых выпадках, калі іншыя рэндэры не могут загрузіцца. На Windows XP аналагічны VMR-7 (windowed)."
+msgstr "Стандартны апрацоўшчык відэа для DirectShow. Уключаецца, калі іншыя апрацоўшчыкі не змаглі загрузіцца. На Windows XP гэта VMR-7 (windowed)."
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "Стандартны відэа рэндэр для Windows 9x/ME/2K. У залежнасці ад бачнасці відэаакна і магчымасцяў відэакарты рэжым дынамічна перамыкаецца паміж метадамі GDI DirectDraw і Overlay."
+msgstr "Стандартны апрацоўшчык відэа для Windows 9x/ME/2K. У залежнасці ад бачнасці відэаакна і магчымасцяў відэакарты, пераключаецца паміж метадамі GDI, DirectDraw, Overlay."
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "Рэндэрынг заўсёды вырабляецца ў аверлэі. Звычайна даступныя толькі фарматы YUV але яны прадстаўляюцца напрамую без пераўтварэння ў RGB. Гэта самы хуткі метад з усіх і толькі тут стоадсоткаҐРпрацуе \"Люстраное\" вывад відэа (на TV-OUT)."
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Стандартны відэа рэндэр для Windows XP. Вельмі стабільны і толькі трохі павольней метаду Overlay mixer. Выкарыстоўвае DirectDraw і па-магчымасці запускаецца ў аверлэі."
+msgstr "Апрацоўка заўсёды адбываецца ў аверлеі. Звычайна даступны толькі YUV-фарматы, але яны прадстаўляюцца напрамую, без пераўтварэння ў RGB. Гэта самы хуткі метад з усіх і толькі ў ім заўжды працуе поўнаэкранны адлюстраваны вывад відэа (на TV-OUT)."
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Даступны толькі пры ўсталяваным DirectX 9. Магчымасці аналагічныя VMR-7 (windowed) але ніколі не выкарыстоўвае аверлэй, а таму можа быць трохі павольней чым VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Тое ж што і VMR-7 (windowed) але з плагінам MPC-HC Allocator-Presenter для вываду субтытраў. \"Люстраное\" адлюстраванне відэа ў аверлэі працаваць НЯ БУДЗЕ. Глыбіню колеру рэкамендуецца ўсталяваць у 'True Color'."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Даступны толькі пры ўсталяваным DirectX 9. Вельмі стабільны, але ніколі не выкарыстоўвае аверлей, таму можа быць трохі павольней чым Overlay mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
-msgstr "Тое ж што і VMR-9 (windowed) але з плагінам MPC-HC Allocator-Presenter для вываду субтытраў. \"Люстраное\" адлюстраванне відэа ў аверлэі МОЖА працаваць. Глыбіню колеру рэкамендуецца ўсталяваць у 'True Color'."
+msgstr "Тое ж што і VMR-9 (windowed) але з плагінам MPC-HC Allocator-Presenter для вываду субцітраў. Адлюстраванне відэанакладання МОЖА працаваць. Рэкамендавана выкарыстоўваць глыбіню колеру «True Color»"
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
-msgstr ""
+msgstr "Тое ж што і VMR-9 (renderless), але выкарыстоўвае двухузроўневае бікубічнае змяненне памераў."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Падлучаецца да любога тыпу відэададзеных і адсылае ўваходныя кадры ў нікуды. Рэжым можа спатрэбіцца для захавання рэсурсаў працэсара ў выпадку калі патрэбны толькі гук."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
-msgstr "Тое ж што і нармалёвы Null-рэндэр, але падлучаецца толькі да несціснутых тыпаў дадзеных."
+msgstr "Тое ж што і нармальны Null renderer, але падлучаецца толькі да несціснутых тыпаў дадзеных."
msgctxt "IDC_DSEVR"
msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
-msgstr ""
+msgstr "Даступна толькі на Vista і пазнейшых сістэмах або на XP з усталяваным .NET Framework 3.5."
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr ""
+msgstr "Тое ж што EVR, але выкарыстоўвае Allocator-Presenter для субцітраў і постапрацоўкі. Рэкамендуецца для Windows Vista і навейшых."
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
-msgstr ""
+msgstr "Высокаякасны апрацоўшчык, патрабуецца відэакарта з падтрымкай D3D9 ці навей."
msgctxt "IDC_DSSYNC"
msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
-msgstr ""
+msgstr "Тое ж, што EVR (СР), але прапануе некалькі варыянтаў сінхранізацыі частаты кадраў відэа з частатой абнаўлення экрана."
msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Уласны рэндэр RealMedia. Скрыпты SMIL будуць працаваць але без інтэрактыўнасці. Выкарыстоўвае DirectDraw і па-магчымасці запускаецца ў аверлэі."
-
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Вывад RealMedia апрацоўваецца з дапамогай плагіна Allocator-Presenter у VMR-7 (renderless)."
+msgstr "Уласны рэндэр RealMedia. Скрыпты SMIL будуць працаваць але без інтэрактыўнасці. Выкарыстоўвае DirectDraw і па-магчымасці запускаецца ў аверлеі."
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
@@ -658,11 +670,7 @@ msgstr "Вывад RealMedia апрацоўваецца з дапамогай п
msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
-msgstr "Уласны рэндэр QuickTime. Запавольваецца пры змене памеру відэакадра або калі акно часткова закрыта іншым акном. Калі аверлэй недаступны вяртаецца да метаду GDI."
-
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Вывад QuickTime апрацоўваецца з дапамогай плагіна Allocator-Presenter у VMR-7 (renderless)."
+msgstr "Уласны рэндэр QuickTime. Запавольваецца пры змене памеру відэакадра або калі акно часткова закрыта іншым акном. Калі аверлей недаступны вяртаецца да метаду GDI."
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
@@ -672,77 +680,65 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Паверхня для відэа вылучаецца як звычайная паверхня па-за экранам."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
-msgstr ""
-
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr ""
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr ""
+msgstr "Sync Renderer"
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
-msgstr ""
+msgstr "Звычайная паверхня па-за экранам."
msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
msgid "2D surfaces"
-msgstr ""
+msgstr "2D-паверхні"
msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
msgid "3D surfaces (recommended)"
-msgstr ""
+msgstr "3D-паверхні (рэкамендуецца)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
-msgstr ""
+msgstr "Бліжэйшы сусед"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
msgid "Bilinear"
-msgstr ""
+msgstr "Білінейная"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
msgid "Bilinear (PS 2.0)"
-msgstr ""
+msgstr "Білінейная (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
msgid "Bicubic A=-0.60 (PS 2.0)"
-msgstr ""
+msgstr "Бікубічная A=-0.60 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
msgid "Bicubic A=-0.75 (PS 2.0)"
-msgstr ""
+msgstr "Бікубічная A=-0.75 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
msgid "Bicubic A=-1.00 (PS 2.0)"
-msgstr ""
+msgstr "Бікубічная A=-1.00 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
msgid "**unavailable**"
-msgstr ""
+msgstr "**невядомы**"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
msgid "The selected renderer is not installed."
-msgstr ""
+msgstr "Выбраны апрацоўшчык не ўсталяваны."
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
-msgstr ""
+msgstr "Null (усё)"
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr ""
+msgstr "Null (без сціскання)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr ""
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Убудаваны апрацоўшчык аўдыя"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -750,51 +746,55 @@ msgstr "Імя"
msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
msgid "MIME Type"
-msgstr ""
+msgstr "MIME-тып"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr ""
+msgstr "Каб праглядзець убудаваны рэсурс у вашым браўзеры, трэба ўключыць вэб-інтэрфейс.\n\nСкарыстайце кнопку «Захаваць як», калі вы хочаце толькі захаваць звесткі."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr ""
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Спампаваць субцітры"
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Запампаваць субцітры..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
-msgstr ""
+msgstr "Затрымка (мс):"
msgctxt "IDS_SPEEDSTEP_AUTO"
msgid "Auto"
-msgstr ""
+msgstr "Аўта"
msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
msgid "There are no customized keys to export."
-msgstr ""
+msgstr "Няма наладжаных клавіш для экспарту."
msgctxt "IDS_RFS_NO_FILES"
msgid "No media files found in the archive"
-msgstr ""
+msgstr "У архіве не знойдзена медыяфайлаў"
msgctxt "IDS_RFS_COMPRESSED"
msgid "Compressed files are not supported"
-msgstr ""
+msgstr "Сціснутыя файлы не падтрымліваюцца"
msgctxt "IDS_RFS_ENCRYPTED"
msgid "Encrypted files are not supported"
-msgstr ""
+msgstr "Шыфраваныя файлы не падтрымліваюцца"
msgctxt "IDS_RFS_MISSING_VOLS"
msgid "Couldn't find all archive volumes"
-msgstr ""
+msgstr "Не атрымалася знайсці ўсе тамы архіва"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Паверхня для відэа вылучаецца як тэкстура, але для капіявання і расцяжэння відэа ў буфер выкарыстоўваюцца функцыі 2D. Патрабуе наяўнасці відэакарты, якая можа вылучаць 32bit RGBA тэкстуры з памерамі не кратнымі 2, хоць бы ў адрозненні відэа."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Паверхня для відэа вылучаецца як тэкстура, але для капіявання і расцягвання відэа ў буфер выкарыстоўваюцца функцыі 2D. Патрабуе наяўнасці відэакарты, якая можа вылучаць 32bit RGBA тэкстуры з памерамі не кратнымі 2, хоць бы ў разрознасці відэа."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
-msgstr "Паверхня для відэа вылучаецца як тэкстура і малюецца як два трыкутніка ў 3D. Уключэнне антыальясінгу ў наладах відэакарты можа істотна замарудзіць хуткасць рэндэрынгу."
+msgstr "Паверхня відэа вылучаецца як тэкстура і адрысоўваецца ў 3D як два трыкутніка. Уключэнне згладжвання ў наладах відэакарты можа істотна замарудзіць хуткасць апрацоўкі."
msgctxt "IDC_DX9RESIZER_COMBO"
msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
@@ -806,15 +806,27 @@ msgstr "Перакладае рэжым VMR-9 (renderless) у рэжым мік
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
-msgstr ""
+msgstr "Павялічвае прадукцыйнасць праз адпаведнасць апрацоўшчыка."
msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
msgid "Reduces tearing but prevents the toolbar from being shown."
-msgstr ""
+msgstr "Паменшае разрывы, але не паказваецца панэль навігацыі."
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
-msgstr ""
+msgstr "Памяншае разрывы праз абыход вертыкальнай сінхранізацыі ўбудаванай у D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Налады цюнера"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Субцітры не загружаны або не падтрымліваемы відэа-рэндэр."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Захоўваць скампіляваныя шэйдары ў папцы AppData каб паскорыць іх загрузку."
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
@@ -822,43 +834,43 @@ msgstr "Адкрывае файлы VTS_xx_0.ifo для загрузкі наб
msgctxt "IDS_SRC_RFS"
msgid "Based on RARFileSource, doesn't support compressed files"
-msgstr ""
+msgstr "Заснаваны на RARFileSource, не падтрымлівае сціснутыя файлы"
msgctxt "IDS_INTERNAL_LAVF"
msgid "Uses LAV Filters"
-msgstr ""
+msgstr "Выкарыстоўвае LAV Filters"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr ""
+msgstr "Выкарыстоўвае LAV Filters. Па змаўчанні выключаны, паколькі фільтры Microsoft для гэтых фарматаў, звычайна, больш стабільныя.\nКалі вы выберыце ўбудаваныя фільтры, для лепшага прайгравання, уключыце іх і для крыніцы, і для дэкадавання."
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
-msgstr ""
+msgstr "Укл/Адкл панэль навігацыі"
msgctxt "IDS_AG_VSYNCACCURATE"
msgid "Accurate VSync"
-msgstr "Акуратны VSync"
+msgstr "Дакладная вертыкальная сінхранізацыя"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr ""
+msgstr "Калі цэль апрацоўкі нявызначана, яна бярэцца са стылю па змаўчанні."
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
-msgstr ""
+msgstr "Забараніць анімацыю субцітраў. Уключэнне гэтага параметра запавольвае працу CPU, але можа дапамагчы пры мігценні субцітраў."
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr ""
+msgstr "Павелічэнне колькасці фрагментаў выяў у буферы павінна палепшыць прадукцыйнасць апрацоўкі ў выніку большага выкарыстання аператыўнай памяці графічнага працэсара."
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
-msgstr "Пасля націску гэтае кнопкі абраны стан групы фарматаў будзе адлюстроўваць рэальныя асацыяцыі файлаў для MPC-HC. Дададзеныя пашырэнні звычайна ўсталёўваюць стан у \"шэры\" так што не забывайце выключыць іх зноў перад закрыццём дыялогу!"
+msgstr "Пасля націскання гэтай кнопкі, правераны стан групы фарматаў будзе паказваць рэальныя асацыяцыі файлаў для MPC-HC. Дададзеныя пашырэнні звычайна шэрыя, так што не забывайце праверыць іх зноў перад закрыццём гэтага акна!"
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr ""
+msgstr "Адключэнне гэтага параметра прадухіляе мігценне субцітраў, але можа прывесці да пропуску некаторых відэакадраў."
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -874,11 +886,11 @@ msgstr "Стоп\nСтоп"
msgctxt "ID_PLAY_FRAMESTEP"
msgid "Step\nStep"
-msgstr "Крок\nКрок"
+msgstr "Шаг\nШаг"
msgctxt "ID_PLAY_DECRATE"
msgid "Decrease speed\nDecrease speed"
-msgstr "Паменшыць хуткасць\nПаменшыць хуткасць"
+msgstr "Паменшыць хуткасць\nПаменшыць хуткасць"
msgctxt "ID_PLAY_INCRATE"
msgid "Increase speed\nIncrease speed"
@@ -888,9 +900,9 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Адключыць гук"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
-msgstr ""
+msgstr "Уключыць гук"
msgctxt "ID_VOLUME_MUTE_DISABLED"
msgid "No audio"
@@ -898,11 +910,11 @@ msgstr "Без гуку"
msgctxt "ID_NAVIGATE_SKIPBACK"
msgid "Skip back\nSkip back"
-msgstr "Крок назад\nКрок назад"
+msgstr "Назад\nНазад"
msgctxt "ID_NAVIGATE_SKIPFORWARD"
msgid "Skip forward\nSkip forward"
-msgstr "Крок наперад\nКрок наперад"
+msgstr "Наперад\nНаперад"
msgctxt "IDS_SUBRESYNC_ORIGINAL"
msgid "&Original"
@@ -926,7 +938,7 @@ msgstr "&Не"
msgctxt "IDS_SUBRESYNC_DECREASE"
msgid "&Decrease"
-msgstr "Па&меньшыць"
+msgstr "Па&меншыць"
msgctxt "IDS_SUBRESYNC_INCREASE"
msgid "&Increase"
@@ -938,11 +950,11 @@ msgstr "Налады"
msgctxt "IDS_SHADERS_SELECT"
msgid "&Select Shaders..."
-msgstr "&Абраць Шэйдары..."
+msgstr "&Выбраць шэйдары..."
msgctxt "IDS_SHADERS_DEBUG"
msgid "&Debug Shaders..."
-msgstr ""
+msgstr "&Адладка шэйдараў"
msgctxt "IDS_FAVORITES_ADD"
msgid "&Add to Favorites..."
@@ -953,12 +965,12 @@ msgid "&Organize Favorites..."
msgstr "&Спарадкаваць..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "Змяшаць"
+msgid "Sh&uffle"
+msgstr "Перамяшаць"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr ""
+msgid "Ope&n file location"
+msgstr "Адкрыць папку з файлам"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -982,7 +994,7 @@ msgstr "Ачысціць спіс"
msgctxt "IDS_RECENT_FILES_QUESTION"
msgid "Are you sure that you want to delete recent files list?"
-msgstr "Вы ўпэўнены што жадаеце ачысціць спіс нядаўна адкрытых файлаў?"
+msgstr "Сапраўды ачысціць спіс нядаўніх файлаў?"
msgctxt "IDS_AG_EDL_SAVE"
msgid "EDL save"
@@ -994,7 +1006,7 @@ msgstr "Уключыць карэкцыю часу кадра"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
-msgstr "Укл/адкл EDL акно"
+msgstr "Укл/Адкл акно EDL"
msgctxt "IDS_AG_EDL_IN"
msgid "EDL set In"
@@ -1030,7 +1042,7 @@ msgstr "Тэст дрыгацення"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
-msgstr "Усталяваць прапорцыі 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Устанавіць прапорцыі 16:9 TV,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_WIDESCREEN"
msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
@@ -1041,8 +1053,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Маштабаваць у Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Схаваць, калі на поўны экран"
+msgid "&Hide on Fullscreen"
+msgstr "Схаваць у поўнаэкранным рэжыме"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1058,7 +1070,7 @@ msgstr "Ідзе захоп..."
msgctxt "IDS_CONTROLS_OPENING"
msgid "Opening..."
-msgstr "Адкрываецца..."
+msgstr "Адкрыццё..."
msgctxt "IDS_CONTROLS_CLOSED"
msgid "Closed"
@@ -1094,7 +1106,7 @@ msgstr "Аўтар"
msgctxt "IDS_INFOBAR_COPYRIGHT"
msgid "Copyright"
-msgstr "Правы"
+msgstr "Аўтарскае права"
msgctxt "IDS_INFOBAR_RATING"
msgid "Rating"
@@ -1118,7 +1130,7 @@ msgstr "Няма"
msgctxt "IDS_AG_COMMAND"
msgid "Command"
-msgstr "Каманда"
+msgstr "Дзеянне"
msgctxt "IDS_AG_KEY"
msgid "Key"
@@ -1126,15 +1138,15 @@ msgstr "Клавіша"
msgctxt "IDS_AG_MOUSE"
msgid "Mouse Windowed"
-msgstr "Курсор мышы у аконным рэжыме"
+msgstr "Мыш (аконны рэжым)"
msgctxt "IDS_AG_MOUSE_FS"
msgid "Mouse Fullscreen"
-msgstr "Курсор мышы у поўнаэкранным рэжыме"
+msgstr "Мыш (поўнаэкранны рэжым)"
msgctxt "IDS_AG_APP_COMMAND"
msgid "App Command"
-msgstr "Каманда прыкладання"
+msgstr "Каманда праграмы"
msgctxt "IDS_AG_MEDIAFILES"
msgid "Media files (all types)"
@@ -1146,7 +1158,7 @@ msgstr "Усе файлы (*.*)|*.*|"
msgctxt "IDS_AG_AUDIOFILES"
msgid "Audio files (all types)"
-msgstr "Аўдыёфайлы (усе тыпы)"
+msgstr "Аўдыяфайлы (усе тыпы)"
msgctxt "IDS_AG_NOT_KNOWN"
msgid "Not known"
@@ -1166,39 +1178,39 @@ msgstr "Адкрыць DVD/BD"
msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
msgid "Failed to set post-resize shaders"
-msgstr ""
+msgstr "Не атрымалася ўстанавіць шэйдары post-resize"
msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
msgid "Failed to set both pre-resize and post-resize shaders"
-msgstr ""
+msgstr "Не атрымалася ўстанавіць шэйдары pre-resize і post-resize"
msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
msgid "Shaders are recompiled automatically when the corresponding files are modified."
-msgstr ""
+msgstr "Шэйдары перакампілююца аўтаматычна, пасля змены адпаведных файлаў."
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
-msgstr ""
+msgstr "Немагчыма загрузіць %s, піксельныя шэйдары працаваць не будуць."
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
-msgstr ""
+msgstr "Не атрымліваецца знайсці пункты ўваходу неабходнай функцыі ў %s, піксельныя шэйдары працаваць не будуць. "
msgctxt "IDS_OSD_SHADERS_PRESET"
msgid "Shader preset: %s"
-msgstr ""
+msgstr "Налады шэйдараў: %s"
msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
msgid "Next Shader Preset"
-msgstr ""
+msgstr "Наступныя налады шэйдараў"
msgctxt "IDS_AG_SHADERS_PRESET_PREV"
msgid "Prev Shader Preset"
-msgstr ""
+msgstr "Папярэднія налады шэйдараў"
msgctxt "IDS_STRING_COLON"
msgid "%s:"
-msgstr ""
+msgstr "%s:"
msgctxt "IDS_RECORD_START"
msgid "Record"
@@ -1210,67 +1222,67 @@ msgstr "Спыніць"
msgctxt "IDS_BALANCE"
msgid "L = R"
-msgstr ""
+msgstr "Л = П"
msgctxt "IDS_BALANCE_L"
msgid "L +%d%%"
-msgstr ""
+msgstr "Л +%d%%"
msgctxt "IDS_BALANCE_R"
msgid "R +%d%%"
-msgstr ""
+msgstr "П +%d%%"
msgctxt "IDS_VOLUME"
msgid "%d%%"
-msgstr ""
+msgstr "%d%%"
msgctxt "IDS_BOOST"
msgid "+%d%%"
-msgstr ""
+msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr ""
+msgid "Add containing &folder"
+msgstr "Дадаць папку, якая іх змяшчае"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
-msgstr ""
+msgstr "[апаратна]"
msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
msgid "Software Decoding"
-msgstr ""
+msgstr "Праграмнае дэкадаванне"
msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
msgid "Playback rate"
-msgstr ""
+msgstr "Хуткасць прайгравання"
msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
msgid "&Copy filters list to clipboard"
-msgstr ""
+msgstr "&Капіяваць спіс фільтраў у буфер абмену"
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
-msgstr ""
+msgstr "Увядзіце дадзеныя сервера"
msgctxt "IDS_CREDENTIALS_CONNECT"
msgid "Enter your credentials to connect"
-msgstr ""
+msgstr "Увядзіце ўліковыя дадзеныя каб падлучыцца"
msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
msgid "Save custom style"
-msgstr ""
+msgstr "Захаваць адвольны стыль"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
-msgstr ""
+msgstr "Адукацыя/Навука"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
-msgstr ""
+msgstr "Хаваць элементы кіравання ў аконным рэжыме."
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr ""
+msgstr "Забараніць знешнія апрацоўшчыкі субцітраў калі выкарыстоўваецца ўбудаваны."
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
@@ -1278,31 +1290,31 @@ msgstr "Імя"
msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
msgid "Value"
-msgstr ""
+msgstr "Значэнне"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr ""
+msgstr "Максімальная колькасць «Нядаўніх файлаў» і захаваных для іх пазіцый."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
-msgstr ""
+msgstr "Запамінаць пазіцыю толькі для відэа даўжэйшага за N хвілін."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
msgid "Remember file position also for audio files."
-msgstr ""
+msgstr "Запамінаць пазіцыю і для аўдыя."
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
-msgstr ""
+msgstr "Нічога не рабіць"
msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
msgid "Play next file in the folder"
-msgstr ""
+msgstr "Прайграць наступны файл ў папцы"
msgctxt "IDS_AFTER_PLAYBACK_REWIND"
msgid "Rewind current file"
-msgstr ""
+msgstr "Пераматаць відэа на пачатак"
msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
msgid "Close"
@@ -1310,31 +1322,107 @@ msgstr "Закрыць"
msgctxt "IDS_AFTER_PLAYBACK_EXIT"
msgid "Exit"
-msgstr "Выхад"
+msgstr "Выйсці"
msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
msgid "Turn off the monitor"
-msgstr ""
+msgstr "Адключыць манітор"
msgctxt "IDS_IMAGE_JPEG_QUALITY"
msgid "JPEG Image"
-msgstr ""
+msgstr "Выявы JPEG"
msgctxt "IDS_IMAGE_QUALITY"
msgid "Quality (%):"
-msgstr ""
+msgstr "Якасць (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
-msgstr ""
+msgstr "Максімальны памер (NxN пкс) вокладкі ў аўдыярэжыме."
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr ""
+msgstr "Затрымка субцітраў паменшыцца/павялічыцца на гэтае значэнне пры націсканні адпаведных клавіш (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<не вызначана>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Прагляд"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Вышэй"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Ніжэй"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "сартаваць па LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Выдаліць усе"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Сапраўды выдаліць усе каналы са спісу?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Звесткі недаступны"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Пачакайце, ідзе аналіз..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "Прапорцыі %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Уключае вядзенне журнала (патрабуецца перазапуск)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Засталося часу"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Высокая дакладнасць"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Па сканчэнні прайгравання: пераматаць відэа на пачатак"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Па сканчэнні прайгравання: закрыць"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "Падчас ініцыялізацыі MPC-HC сутыкнуўся з праблемай. Вы можаце дапамагчы нам вырашыць яе.\n\nПаведаміць пра гэту праблему?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Увядзіце дадатную велічыню, калі гук спяшацца, або адмоўную - калі запазняецца."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Папярэдні прагляд адключаны. Вы можаце ўключыць яго ў наладах MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Гэты параметр выкарыстоўваюць для аддаленага прадпрагляду файлаў. Карыстайцеся ім, толькі ў надзейных прыватных сетках.\n\nСапраўды ўключыць гэты параметр?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Убудаваны апрацоўшчык субцітраў"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1346,23 +1434,23 @@ msgstr "Захаваць як"
msgctxt "IDS_AG_SAVE_IMAGE"
msgid "Save Image"
-msgstr "Захаваць малюнак"
+msgstr "Захаваць кадр"
msgctxt "IDS_MPLAYERC_6"
msgid "Save Image (auto)"
-msgstr "Захаваць малюнак (аўтаматычна)"
+msgstr "Захаваць кадр (аўтаматычна)"
msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
-msgstr "Малюнак захаваны"
+msgstr "Кадр захаваны"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Загрузіць субтытры"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Адкрыць субцітры..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Захаваць субтытры"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Захаваць субцітры..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1370,7 +1458,7 @@ msgstr "Уласцівасці"
msgctxt "IDS_AG_EXIT"
msgid "Exit"
-msgstr "Выхад"
+msgstr "Выйсці"
msgctxt "IDS_AG_PLAYPAUSE"
msgid "Play/Pause"
@@ -1385,12 +1473,12 @@ msgid "Stop"
msgstr "Стоп"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "Крок наперад"
+msgid "Frame-step"
+msgstr "Наперад на кадр "
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "Крок назад"
+msgid "Frame-step back"
+msgstr "Назад на кадр "
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
@@ -1402,35 +1490,35 @@ msgstr "Павялічыць хуткасць"
msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
msgid "Show/Game show"
-msgstr ""
+msgstr "Шоу/Гульня"
msgctxt "IDS_CONTENT_SPORTS"
msgid "Sports"
-msgstr ""
+msgstr "Спорт"
msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
msgid "Children's/Youth programmes"
-msgstr ""
+msgstr "Дзіцячае"
msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
msgid "Music/Ballet/Dance"
-msgstr ""
+msgstr "Музыка/Балет/Танцы"
msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
msgid "Arts/Culture"
-msgstr ""
+msgstr "Мастацтва/Культура"
msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
msgid "Social/Political issues/Economics"
-msgstr ""
+msgstr "Грамадства/Эканоміка/Палітыка"
msgctxt "IDS_CONTENT_LEISURE"
msgid "Leisure hobbies"
-msgstr ""
+msgstr "Вольны час, захапленні"
msgctxt "IDS_FILE_RECYCLE"
msgid "Move to Recycle Bin"
-msgstr ""
+msgstr "Перамясціць у сметніцу"
msgctxt "IDS_AG_SAVE_COPY"
msgid "Save a Copy"
@@ -1438,31 +1526,31 @@ msgstr "Захаваць як"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
-msgstr ""
+msgstr "Апошні ключавы кадр"
msgctxt "IDS_FASTSEEK_NEAREST"
msgid "Nearest keyframe"
-msgstr ""
+msgstr "Бліжэйшы ключавы кадр"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
-msgstr ""
+msgstr "Падчас ініцыалізацыі MPC-HC сутыкнуўся з праблемай. Верагодна, што прайграванне DVD працуе няправільна. Магчыма, гэта выклікана несумяшчальнасцю з інструментамі бяспекі.\n\nПаведаміць пра гэту праблему?"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
-msgstr ""
+msgstr "Ніколі не паказваць"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
msgid "Show when moving the cursor, hide after:"
-msgstr ""
+msgstr "Паказваць курсор падчас руху, хаваць праз:"
msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
msgid "Show when hovering control, hide after:"
-msgstr ""
+msgstr "Пры навядзенні паказваць панэль навігацыі:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
-msgstr ""
+msgstr "Не атрымалася ўстанавіць шэйдары pre-resize"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
@@ -1470,7 +1558,7 @@ msgstr "Карэкцыя часу кадра: Укл"
msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
msgid "Frame Time Correction: Off"
-msgstr "Карэкцыя часу кадра: Выкл"
+msgstr "Карэкцыя часу кадра: Адкл"
msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
msgid "Target VSync Offset: %.1f"
@@ -1489,8 +1577,8 @@ msgid "Thumbnails saved successfully"
msgstr "Мініяцюры паспяхова захаваны"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Відэаструмень"
+msgid "Vide&o Track"
+msgstr "&Відэарад"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1502,11 +1590,11 @@ msgstr "Скінуць налады"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "Вы сапраўды жадаеце усталяваць стандартныя налады MPC-HC?\nВедайце, што вашыя бягучыя налады будуць страчаны!"
+msgstr "Сапраўды скінуць налады MPC-HC?\nВашы бягучыя налады будуць страчаны."
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr "Калі ласка закройце ўсе копіі MPC-HC для аднаўлення стандартных налад."
+msgstr "Закрыйце ўсе копіі MPC-HC каб аднавіць налады да прадвызначаных."
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
@@ -1514,7 +1602,7 @@ msgstr "Экспартаваць налады"
msgctxt "IDS_EXPORT_SETTINGS_WARNING"
msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
-msgstr "Некаторыя змены не захаваны.\nЦі жадаеце захаваць іх перад экспартам?"
+msgstr "Некаторыя змены не захаваны.\nЗахаваць іх перад экспартам?"
msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
msgid "The settings have been successfully exported."
@@ -1537,12 +1625,12 @@ msgid "Reset Rate"
msgstr "Скінуць хуткасць у 100%"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Затрымка аўдыё +10мс"
+msgid "Audio Delay +10 ms"
+msgstr "Затрымка аўдыя +10 мс"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Затрымка аўдыё -10мс"
+msgid "Audio Delay -10 ms"
+msgstr "Затрымка аўдыя -10 мс"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
@@ -1594,31 +1682,71 @@ msgstr "Папярэдні файл"
msgctxt "IDS_MPLAYERC_99"
msgid "Toggle Direct3D fullscreen"
-msgstr "Поўнаэкранны Direct3D Укл/Адкл"
+msgstr "Укл/Адкл поўнаэкранны Direct3D"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
-msgstr "Перайсці да папярэдніх субтытраў"
+msgstr "Перайсці да папярэдніх субцітраў"
msgctxt "IDS_MPLAYERC_101"
msgid "Goto Next Subtitle"
-msgstr "Перайсці да наступных субтытраў"
+msgstr "Перайсці да наступных субцітраў"
msgctxt "IDS_MPLAYERC_102"
msgid "Shift Subtitle Left"
-msgstr "Ссунуць субтытры налева"
+msgstr "Ссунуць субцітры ўлева"
msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
-msgstr "Ссунуць субтытры направа"
-
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Паказаць статыстыку"
+msgstr "Ссунуць субцітры ўправа"
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
-msgstr ""
+msgstr "Перайсці да пачатку"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Паказваць імя файла"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Прайграванне DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Прайграванне BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Паказаць статыстыку апрацоўшчыка"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Скінуць статыстыку апрацоўшчыка"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Субцітры::Рознае"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Схаваць межы"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Толькі відэакадр"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Паказаць загаловак і меню"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Схаваць меню"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Пашыраныя"
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
@@ -1630,15 +1758,15 @@ msgstr "Кампактны выгляд"
msgctxt "IDS_AG_VIEW_NORMAL"
msgid "View Normal"
-msgstr "Нармалёвы выгляд"
+msgstr "Нармальны выгляд"
msgctxt "IDS_AG_FULLSCREEN"
msgid "Fullscreen"
-msgstr "Ва ўвесь экран"
+msgstr "На ўвесь экран"
msgctxt "IDS_MPLAYERC_39"
msgid "Fullscreen (w/o res.change)"
-msgstr "Ва ўвесь экран (без змены адрознення)"
+msgstr "На ўвесь экран (без змены разрознасці)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT"
msgid "Zoom Auto Fit"
@@ -1650,7 +1778,7 @@ msgstr "Палавінны відэакадр"
msgctxt "IDS_AG_VIDFRM_NORMAL"
msgid "VidFrm Normal"
-msgstr "Нармалёвы відэакадр"
+msgstr "Нармальны відэакадр"
msgctxt "IDS_AG_VIDFRM_DOUBLE"
msgid "VidFrm Double"
@@ -1685,8 +1813,8 @@ msgid "PnS Dec Height"
msgstr "Паменшыць вышыню кадра"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Зазгружаюцца субтытры,калі ласка пачакайце."
+msgid "Downloading [%s] \"%s\""
+msgstr "Спампоўванне [%s] «%s»"
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1694,27 +1822,27 @@ msgstr "Аналіз спісу..."
msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
msgid "No subtitles found."
-msgstr "Субтытры ня знойдзены."
+msgstr "Субцітры не знойдзены."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d субтытраў даступна."
+msgid "%d subtitle(s) available."
+msgstr "%d субцітраў даступна."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "Ці жадаеце вы час ад часу правяраць абнаўленні MPC-HC?\n\nГэта опцыя можа быць адключана праз старонку Рознае ў наладах."
+msgstr "Правяраць наяўнасць абнаўленняў MPC-HC аўтаматычна?\n\nГэтую функцыю можна адключыць на старонцы Рознае ў Наладах."
msgctxt "IDS_ZOOM_50"
msgid "50%"
-msgstr ""
+msgstr "50%"
msgctxt "IDS_ZOOM_100"
msgid "100%"
-msgstr ""
+msgstr "100%"
msgctxt "IDS_ZOOM_200"
msgid "200%"
-msgstr ""
+msgstr "200%"
msgctxt "IDS_ZOOM_AUTOFIT"
msgid "Auto Fit"
@@ -1738,11 +1866,11 @@ msgstr "Падвойны клік адкрывае месцазнаходжан
msgctxt "IDS_TOOLTIP_REMAINING_TIME"
msgid "Toggle between elapsed and remaining time"
-msgstr "Пераключэнне паміж прайшоўшым і астатнім часам"
+msgstr "Пераключэнне паміж мінулым часам і тым, што застаўся"
msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
msgid "Invalid delay"
-msgstr "Невядомы лік"
+msgstr "Недапушчальная затрымка"
msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
msgid "Please enter a number between 1 and 365."
@@ -1754,11 +1882,11 @@ msgstr "Цэнтраваць кадр"
msgctxt "IDS_AG_PNS_LEFT"
msgid "PnS Left"
-msgstr "Ссунуць кадр налева"
+msgstr "Ссунуць кадр улева"
msgctxt "IDS_AG_PNS_RIGHT"
msgid "PnS Right"
-msgstr "Ссунуць кадр направа"
+msgstr "Ссунуць кадр управа"
msgctxt "IDS_AG_PNS_UP"
msgid "PnS Up"
@@ -1770,19 +1898,19 @@ msgstr "Ссунуць кадр уніз"
msgctxt "IDS_AG_PNS_UPLEFT"
msgid "PnS Up/Left"
-msgstr "Ссунуць кадр уверх/налева"
+msgstr "Ссунуць кадр уверх/улева"
msgctxt "IDS_AG_PNS_UPRIGHT"
msgid "PnS Up/Right"
-msgstr "Ссунуць кадр уверх/направа"
+msgstr "Ссунуць кадр уверх/управа"
msgctxt "IDS_AG_PNS_DOWNLEFT"
msgid "PnS Down/Left"
-msgstr "Ссунуць кадр уніз/налева"
+msgstr "Ссунуць кадр уніз/улева"
msgctxt "IDS_MPLAYERC_59"
msgid "PnS Down/Right"
-msgstr "Ссунуць кадр уніз/направа"
+msgstr "Ссунуць кадр уніз/управа"
msgctxt "IDS_AG_VOLUME_UP"
msgid "Volume Up"
@@ -1798,66 +1926,66 @@ msgstr "Адключыць гук"
msgctxt "IDS_MPLAYERC_63"
msgid "DVD Title Menu"
-msgstr "DVD - загалоўнае меню"
+msgstr "DVD — загалоўнае меню"
msgctxt "IDS_AG_DVD_ROOT_MENU"
msgid "DVD Root Menu"
-msgstr "DVD - каранёвае меню"
+msgstr "DVD — каранёвае меню"
msgctxt "IDS_MPLAYERC_65"
msgid "DVD Subtitle Menu"
-msgstr "DVD - меню субтытраў"
+msgstr "DVD — меню субцітраў"
msgctxt "IDS_MPLAYERC_66"
msgid "DVD Audio Menu"
-msgstr "DVD - меню аўдыё"
+msgstr "DVD — меню аўдыя"
msgctxt "IDS_MPLAYERC_67"
msgid "DVD Angle Menu"
-msgstr "DVD - меню вуглоў"
+msgstr "DVD — меню вуглоў"
msgctxt "IDS_MPLAYERC_68"
msgid "DVD Chapter Menu"
-msgstr "DVD - меню сцэн"
+msgstr "DVD — меню сцэн"
msgctxt "IDS_AG_DVD_MENU_LEFT"
msgid "DVD Menu Left"
-msgstr "DVD меню - налева"
+msgstr "DVD меню — улева"
msgctxt "IDS_MPLAYERC_70"
msgid "DVD Menu Right"
-msgstr "DVD меню - направа"
+msgstr "DVD меню — управа"
msgctxt "IDS_AG_DVD_MENU_UP"
msgid "DVD Menu Up"
-msgstr "DVD меню - уверх"
+msgstr "DVD меню — уверх"
msgctxt "IDS_AG_DVD_MENU_DOWN"
msgid "DVD Menu Down"
-msgstr "DVD меню - уніз"
+msgstr "DVD меню — уніз"
msgctxt "IDS_MPLAYERC_73"
msgid "DVD Menu Activate"
-msgstr "DVD меню - актываваць"
+msgstr "DVD меню — актываваць"
msgctxt "IDS_AG_DVD_MENU_BACK"
msgid "DVD Menu Back"
-msgstr "DVD меню - назад"
+msgstr "DVD меню — назад"
msgctxt "IDS_MPLAYERC_75"
msgid "DVD Menu Leave"
-msgstr "DVD меню - пакінуць"
+msgstr "DVD меню — пакінуць"
msgctxt "IDS_AG_BOSS_KEY"
msgid "Boss key"
msgstr "Аварыйная клавіша"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Меню прайгравальніка (скарочанае)"
+msgid "Player Menu"
+msgstr "Меню прайгравальніка"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
+msgid "Player Menu (full)"
msgstr "Меню прайгравальніка (поўнае)"
msgctxt "IDS_AG_FILTERS_MENU"
@@ -1866,47 +1994,31 @@ msgstr "Меню фільтраў"
msgctxt "IDS_AG_OPTIONS"
msgid "Options"
-msgstr "Опцыі"
+msgstr "Налады"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Наступнае аўдыё"
+msgid "Next Audio Track"
+msgstr "Наступная гукавая дарожка"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Папярэдняе аўдыё"
+msgid "Prev Audio Track"
+msgstr "Папярэдняя гукавая дарожка"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Наступныя субтытры"
+msgid "Next Subtitle Track"
+msgstr "Наступныя субцітры"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Папярэднія субтытры"
+msgid "Prev Subtitle Track"
+msgstr "Папярэднія субцітры"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
-msgstr "Субтытры Укл/Адкл"
+msgstr "Укл/Адкл субцітры"
msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
-msgstr "Перазагрузіць субтытры"
-
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Наступнае аўдыё (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Папярэдняе аўдыё (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Наступныя субтытры (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Папярэднія субтытры (OGM)"
+msgstr "Перазагрузіць субцітры"
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
@@ -1917,32 +2029,32 @@ msgid "Prev Angle (DVD)"
msgstr "Папярэдні вугал (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Наступнае аўдыё (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Наступная гукавая дарожка (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Папярэдняе аўдыё (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Папярэдняя гукавая дарожка (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Наступныя субтытры (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Наступныя субцітры (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Папярэднія субтытры (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Папярэднія субцітры (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
-msgstr "Субтытры Укл/Адкл (DVD)"
+msgstr " Укл/Адкл субцітры (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Пакінуты час"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "Паказваць цяперашні час"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
-msgstr "Абярыце тэчку"
+msgstr "Выберыце папку"
msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
msgid "Quick add favorite"
@@ -1950,7 +2062,7 @@ msgstr "Хутка дадаць у абранае"
msgctxt "IDS_DVB_CHANNEL_NUMBER"
msgid "N"
-msgstr ""
+msgstr "№"
msgctxt "IDS_DVB_CHANNEL_NAME"
msgid "Name"
@@ -1962,13 +2074,13 @@ msgstr "Частата"
msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
-msgstr "Закадаваныя"
+msgstr "Зашыфравана"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Так"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Не"
@@ -1986,7 +2098,7 @@ msgstr "Радыёстанцыі"
msgctxt "IDS_DVB_TVNAV_SEETV"
msgid "TV stations"
-msgstr "TV станцыі"
+msgstr "TV-станцыі"
msgctxt "IDS_DVB_CHANNEL_FORMAT"
msgid "Format"
@@ -1998,11 +2110,11 @@ msgstr "Фокус перайшоў да: %s - %s"
msgctxt "IDS_AG_SUBTITLES_SAVED"
msgid "Subtitles saved"
-msgstr "Субтытры захаваныя"
+msgstr "Субцітры захаваныя"
msgctxt "IDS_MAINFRM_4"
msgid "Cannot save subtitles"
-msgstr "Не атрымліваецца захаваць субтытры."
+msgstr "Не атрымліваецца захаваць субцітры."
msgctxt "IDS_AG_FRAMERATE"
msgid "Frame rate"
@@ -2025,11 +2137,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Том: %02lu/%02lu Падзел: %02lu/%02lu Сцэна: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Вугал: %02lu/%02lu %lux%lu %luГц %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s %s %u Гц %d біт %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2042,11 +2154,11 @@ msgstr "Прайграць у MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr ""
+msgstr "У MPC-HC недастаткова правоў для змены асацыяцый файлаў. Націсніце на «Выканаць ад імя адміністратара»"
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr ""
+msgstr "MPC-HC - гэта надзвычайна лёгкі прайгравальнік медыя для Windows з адкрытым зыходным кодам. Ён падтрымлівае прайграванне ўсіх распаўсюджаных фарматаў аўдыя і відэа. Мы на 100% гарантуем адсутнасць шпіёнскіх і рэкламных праграм або панэляў інструментаў."
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2058,7 +2170,7 @@ msgstr "каналаў"
msgctxt "IDS_AG_TITLE"
msgid "Title %u"
-msgstr "Назва %u"
+msgstr "Загаловак %u"
msgctxt "IDS_MAINFRM_16"
msgid "DVD: Unexpected error"
@@ -2094,15 +2206,15 @@ msgstr "DVD: Несумяшчальныя рэгіёны дэкодэра і д
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "Гэтая опцыя служыць для ўхілення дрыгацення але ў гэтым рэжыме, калі відэа загружана, MPC-HC не можа адлюстроўваць кантэкстнае меню і дыялогі.\n\nПрацягнуць?"
+msgstr "Гэтая опцыя служыць для ўхілення дрыгацення, але ў гэтым рэжыме, калі відэа загружана, MPC-HC не можа адлюстроўваць кантэкстнае меню і дыялогі.\n\nПрацягнуць?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
-msgstr "Затрымка субтытраў: %ld мс"
+msgstr "Затрымка субцітраў: %ld мс"
msgctxt "IDS_AG_TITLE2"
msgid "Title: %02d/%02d"
-msgstr "Назва: %02d/%02d"
+msgstr "Загаловак: %02d/%02d"
msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
@@ -2120,41 +2232,33 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Шырыня малюнка:"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "Уведзены URL дакладны!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Версія пратаколу не супадае. Калі ласка абнавіце ваш плэер або абярыце іншы адрас!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Прапорцыі"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
-msgstr " Усяго: %ld Страчана: %ld"
+msgstr ", Усяго: %ld Страчана: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr " Памер: %I64dКб"
+msgid ", Size: %I64d KB"
+msgstr ", Памер: %I64dКб"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr " Памер: %I64dМб"
+msgid ", Size: %I64d MB"
+msgstr ", Памер: %I64dМб"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr " Вольна: %I64dКб"
+msgid ", Free: %I64d KB"
+msgstr ", Вольна: %I64dКб"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr " Вольна: %I64dМб"
+msgid ", Free: %I64d MB"
+msgstr ", Вольна: %I64dМб"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
-msgstr " Вольна буфераў: %03d/%03d"
+msgstr ", Вольна буфераў: %03d/%03d"
msgctxt "IDS_AG_ERROR"
msgid "Error"
@@ -2162,15 +2266,15 @@ msgstr "Памылка"
msgctxt "IDS_SUBTITLE_STREAM_OFF"
msgid "Subtitle: off"
-msgstr "Субтытры: адключаны"
+msgstr "Субцітры: адключаны"
msgctxt "IDS_SUBTITLE_STREAM"
msgid "Subtitle: %s"
-msgstr "Субтытры: %s"
+msgstr "Субцітры: %s"
msgctxt "IDS_MAINFRM_46"
msgid "Select the path for the DVD/BD:"
-msgstr "Абярыце шлях для DVD/BD:"
+msgstr "Вызначце шлях для DVD/BD"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
@@ -2198,7 +2302,7 @@ msgstr "Немагчыма стварыць мініяцюры для файла
msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
msgid "Failed to get video frame size"
-msgstr "Не атрымліваецца атрымаць памер відэакадра"
+msgstr "Не атрымалася вызначыць памер відэакадра"
msgctxt "IDS_OUT_OF_MEMORY"
msgid "Out of memory, go buy some more!"
@@ -2214,31 +2318,31 @@ msgstr "Памер файла: %s (%s байт)\\N"
msgctxt "IDS_THUMBNAILS_INFO_HEADER"
msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
-msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Імя файла: %s\\N%sАдрозненне: %dx%d %s\\NПрацягласць: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Імя файла: %s\\N%sРазрознасць: %dx%d %s\\NПрацягласць: %02d:%02d:%02d"
msgctxt "IDS_THUMBNAIL_TOO_SMALL"
msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
-msgstr ""
+msgstr "Замалы памер мініяцюр, немагчыма стварыць файл.\n\nПаменшыце колькасць мініяцюр або павялічце агульны памер выявы."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr ""
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Каб загрузіць субцітры, неабходна змяніць тып апрацоўшчыка відэа і зноў адкрыць файл.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
-msgstr ""
+msgstr "Файлы субцітраў"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
msgstr "Прапорцыі: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Прапорцыі: стандартныя"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Прапорцыі: Па змаўчанні (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Затрымка аўдыё: %I64dмс"
+msgid "Audio delay: %I64d ms"
+msgstr "Затрымка аўдыя: %I64d мс"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2249,8 +2353,8 @@ msgid "Out of memory"
msgstr "Бракуе памяці"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Памылка: Неабходны Flash для IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Памылка: Неабходны Flash для Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2270,11 +2374,7 @@ msgstr "Адкрыццё перапынена"
msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
-msgstr "Не атрымліваецца прайграць файл"
-
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL няслушны немагчыма выявіць базу субтытраў!"
+msgstr "Не атрымалася апрацаваць файл"
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
@@ -2296,17 +2396,9 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Бягучы"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "Праца MPC-HC нечакана была спынена. Каб дапамагчы нам выправіць гэтую памылку, калі ласка, дашліце файл '%s' на mpchomecinema@gmail.com."
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Памылка пры стварэнні dump файла '%s' (памылка %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
-msgstr "Абярыце тэчку"
+msgstr "Выберыце папку"
msgctxt "IDS_MAINFRM_DIR_CHECK"
msgid "Include subdirectories"
@@ -2321,7 +2413,7 @@ msgid "Toggle Caption&Menu"
msgstr "Укл/Адкл загаловак і меню"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Укл/Адкл паласу прагорткі"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2330,7 +2422,7 @@ msgstr "Укл/Адкл кіраванне"
msgctxt "IDS_MAINFRM_84"
msgid "Invalid file name"
-msgstr "Няслушнае імя файла"
+msgstr "Недапушчальнае імя файла"
msgctxt "IDS_MAINFRM_86"
msgid "Cannot connect the filters"
@@ -2358,11 +2450,11 @@ msgstr "Невядомы тып файла"
msgctxt "IDS_MAINFRM_92"
msgid "Unsupported stream"
-msgstr "Непадтрымліваемы струмень"
+msgstr "Непадтрымліваемы паток"
msgctxt "IDS_MAINFRM_93"
msgid "Cannot find DVD directory"
-msgstr "Не атрымліваецца знайсці каталог DVD"
+msgstr "Вызначаная для DVD/BD папка не знойдзена"
msgctxt "IDS_MAINFRM_94"
msgid "Can't create the DVD Navigator filter"
@@ -2410,7 +2502,7 @@ msgstr " (pin) уласцівасці..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
-msgstr "Невядомы струмень"
+msgstr "Невядомы паток"
msgctxt "IDS_AG_UNKNOWN"
msgid "Unknown %u"
@@ -2418,19 +2510,19 @@ msgstr "Невядомы %u"
msgctxt "IDS_AG_VSYNC"
msgid "VSync"
-msgstr ""
+msgstr "VSync"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr " (Каментары рэжысёра 1)"
+msgstr " (Каментарыі рэжысёра 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr " (Каментары рэжысёра 2)"
+msgstr " (Каментарыі рэжысёра 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr ""
+msgstr "Уключыць DVD-субцітры"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
@@ -2458,35 +2550,35 @@ msgstr "Невядомы фармат"
msgctxt "IDS_MAINFRM_138"
msgid "Sub shift: %ld ms"
-msgstr "Зрушэнне субтытраў: %ld"
+msgstr "Зрух субцітраў: %ld"
msgctxt "IDS_VOLUME_BOOST_INC"
msgid "Volume boost increase"
-msgstr "Узмацненне гучнасці - павялічыць"
+msgstr "Узмацненне гучнасці — павялічыць"
msgctxt "IDS_VOLUME_BOOST_DEC"
msgid "Volume boost decrease"
-msgstr "Узмацненне гучнасці - паменшыць"
+msgstr "Узмацненне гучнасці — паменшыць"
msgctxt "IDS_VOLUME_BOOST_MIN"
msgid "Volume boost Min"
-msgstr "Узмацненне гучнасці - Min"
+msgstr "Узмацненне гучнасці — мінімальнае"
msgctxt "IDS_VOLUME_BOOST_MAX"
msgid "Volume boost Max"
-msgstr "Узмацненне гучнасці - Max"
+msgstr "Узмацненне гучнасці — максімальнае"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Выкарыстанне: mpc-hc.exe \"шлях\" [перамыкачы]\n\n\"шлях\"\tФайл або каталог для загрузкі (дазволеныя маскі, \"-\" denotes standard input)\n/dub \"dubname\"\tЗагрузiць дадатковы гукавы файл\n/dubdelay \"file\"\tЗагрузiць дадатковы гукавы файл са зрушэннем XXмс\n(калі файл утрымлівае \"...DELAY XXms...\")\n/d3dfs\t\tСтартаваць у поўнаэкранным D3D рэжыме\n/sub \"subname\"\tЗагрузiць дадатковыя субтытры\n/filter \"filtername\"\tЗагрузiць фільтры DirectShow з бібліятэкі (дазволеныя маскі)\n/dvd\t\tЗапуск у рэжыме DVD \"шлях\" азначае каталог з DVD (апцыянальна)\n/cd\t\tЗагрузіць усе дарожкі Audio CD або (S)VCD \"шлях\" азначае шлях да кружэлкі (апцыянальна)\n/device\t\tOpen the default video device\n/open\t\tТолькi адкрыць файл\n/play\t\tПачынаць прайграванне адразу пасля запуску\n/close\t\tЗакрыць па канчатку прайгравання (працуе толькі з перамыкачом /play)\n/shutdown\tВыключыць кампутар па канчатку прайгравання\n/fullscreen\tЗапуск у поўнаэкранным рэжыме\n/minimized\tЗапуск у згорнутым выглядзе\n/new\t\tВыкарстаць новую копію прайгравальніка\n/add\t\tДадаць \"шлях\" у плэйліст можна сумесна з /open і /play\n/regvid\t\tРэгістраваць відэафарматы\n/regaud\t\tРэгістраваць аўдыёфарматы\n/unregvid\t\tРазрэгістраваць відэафарматы\n/unregaud\tРазрэгістраваць аўдыёфарматы\n/start ms\t\tПрайграваць з пазіцыі \"ms\" (= мілісекунды)\n/fixedsize wh\tУсталяваць фіксаваны памер акна\n/monitor N\tЗапускацца на маніторы N дзе N адлічваецца з 1\n/audiorenderer N\tВыкарыстаць аўдыёрэндэр N, дзе N адлічваецца з 1\n\t\t(глядзіце налады \"Вывад\")\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/help /h /?\tПаказвае гэтую даведку\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Выкарыстанне: mpc-hc.exe \"шлях\" [ключы]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
-msgstr "У камандным радку знойдзены нераспазнаныя перамыкачы: \n\n"
+msgstr "У камандным радку знойдзены нераспазнаныя ключы: \n\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
-msgstr "Укл/Адкл інфармацыю"
+msgstr "Укл/Адкл паказ звестак"
msgctxt "IDS_AG_TOGGLE_STATS"
msgid "Toggle Statistics"
@@ -2494,15 +2586,15 @@ msgstr "Укл/Адкл статыстыку"
msgctxt "IDS_AG_TOGGLE_STATUS"
msgid "Toggle Status"
-msgstr "Укл/Адкл статусны радок"
+msgstr "Укл/Адкл радок стану"
msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
msgid "Toggle Subresync Bar"
-msgstr "Укл/Адкл акно сінхранізацыі субтытраў"
+msgstr "Укл/Адкл акно сінхранізацыі субцітраў"
msgctxt "IDS_AG_TOGGLE_PLAYLIST"
msgid "Toggle Playlist Bar"
-msgstr "Укл/Адкл плэйліст"
+msgstr "Укл/Адкл спіс прайгравання"
msgctxt "IDS_AG_TOGGLE_CAPTURE"
msgid "Toggle Capture Bar"
@@ -2510,7 +2602,7 @@ msgstr "Укл/Адкл акно захопу"
msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
msgid "Toggle Debug Shaders"
-msgstr ""
+msgstr "Укл/Адкл адладку шэйдараў"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
@@ -2530,15 +2622,15 @@ msgstr "Наступная перадусталёўка прапорцый"
msgctxt "IDS_AG_VIDFRM_STRETCH"
msgid "VidFrm Stretch"
-msgstr "Відэакадр расцягнуць да памераў акна"
+msgstr "Расцягнуць відэакадр да памераў акна"
msgctxt "IDS_AG_VIDFRM_INSIDE"
msgid "VidFrm Inside"
-msgstr "Відэакадр упісаць унутр вакна"
+msgstr "Упісаць відэакадр у акно"
msgctxt "IDS_AG_VIDFRM_OUTSIDE"
msgid "VidFrm Outside"
-msgstr "Відэакадр апісаць звонку вакна"
+msgstr "Абразаць відэакадр"
msgctxt "IDS_AG_PNS_RESET"
msgid "PnS Reset"
@@ -2550,43 +2642,35 @@ msgstr "Павярнуць кадр па X+"
msgctxt "IDS_AG_VIDFRM_ZOOM1"
msgid "VidFrm Zoom 1"
-msgstr ""
+msgstr "Маштаб відэакадра 1"
msgctxt "IDS_AG_VIDFRM_ZOOM2"
msgid "VidFrm Zoom 2"
-msgstr ""
+msgstr "Маштаб відэакадра 2"
msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
msgid "VidFrm Switch Zoom"
-msgstr ""
+msgstr "Змяніць маштаб відэакадра"
msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Уключыць усе фільтры"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Налады прымача scan"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Субтытры не загружаны або не падтрымліваемы відэа-рэндэр."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
-msgstr "Аўтар невядомы. Паведаміце мне, калі вы зрабілі гэтае лого!"
+msgstr "Аўтар невядомы. Паведаміце нам, калі гэта вы зрабілі лагатып!"
msgctxt "IDS_NO_MORE_MEDIA"
msgid "No more media in the current folder."
-msgstr "Прайграванне медыя-файлаў з каталога скончана"
+msgstr "Прайграванне медыяфайлаў з папкі скончана"
msgctxt "IDS_FIRST_IN_FOLDER"
msgid "The first file of the folder is already loaded."
-msgstr ""
+msgstr "Першы файл з папкі ўжо загружаны"
msgctxt "IDS_LAST_IN_FOLDER"
msgid "The last file of the folder is already loaded."
-msgstr ""
+msgstr "Апошні файл з папкі ўжо загружаны"
msgctxt "IDS_FRONT_LEFT"
msgid "Front Left"
@@ -2660,40 +2744,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Верх. задні правы"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr ""
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Субтытры::Рознае"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Схаваць межы"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Толькі фрэймы"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Паказаць Загаловак і Меню"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Схаваць Меню"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr ""
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Над паласой прагорткі"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Пад паласой прагорткі"
msgctxt "IDS_VIDEO_STREAM"
@@ -2714,11 +2770,11 @@ msgstr "Адмена"
msgctxt "IDS_THUMB_THUMBNAILS"
msgid "Layout"
-msgstr ""
+msgstr "Змяшэнне"
msgctxt "IDS_THUMB_PIXELS"
msgid "Pixels:"
-msgstr ""
+msgstr "Пікселяў:"
msgctxt "IDS_TEXTFILE_ENC"
msgid "Encoding:"
@@ -2730,19 +2786,19 @@ msgstr "&Адключыць усе фільтры"
msgctxt "IDS_ENABLE_AUDIO_FILTERS"
msgid "Enable all audio decoders"
-msgstr ""
+msgstr "Уключыць усе дэкодары аўдыя"
msgctxt "IDS_DISABLE_AUDIO_FILTERS"
msgid "Disable all audio decoders"
-msgstr ""
+msgstr "Адключыць усе дэкодары аўдыя"
msgctxt "IDS_ENABLE_VIDEO_FILTERS"
msgid "Enable all video decoders"
-msgstr ""
+msgstr "Уключыць усе дэкодары відэа"
msgctxt "IDS_DISABLE_VIDEO_FILTERS"
msgid "Disable all video decoders"
-msgstr ""
+msgstr "Адключыць усе дэкодары відэа"
msgctxt "IDS_STRETCH_TO_WINDOW"
msgid "Stretch To Window"
@@ -2750,23 +2806,23 @@ msgstr "Расцягнуць да памераў акна"
msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
msgid "Touch Window From Inside"
-msgstr "Упісаць відэакадр унутр вакна"
+msgstr "Упісаць відэакадр у акно"
msgctxt "IDS_ZOOM1"
msgid "Zoom 1"
-msgstr ""
+msgstr "Маштаб 1"
msgctxt "IDS_ZOOM2"
msgid "Zoom 2"
-msgstr ""
+msgstr "Маштаб 2"
msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
msgid "Touch Window From Outside"
-msgstr "Відэакадр апісаць звонку вакна"
+msgstr "Запоўніць акно і абрэзаць відэакадр"
msgctxt "IDS_AUDIO_STREAM"
msgid "Audio: %s"
-msgstr "Аўдыё: %s"
+msgstr "Аўдыя: %s"
msgctxt "IDS_AG_REOPEN"
msgid "Reopen File"
@@ -2774,79 +2830,79 @@ msgstr "Пераадкрыць файл"
msgctxt "IDS_MFMT_AVI"
msgid "AVI"
-msgstr ""
+msgstr "AVI"
msgctxt "IDS_MFMT_MPEG"
msgid "MPEG"
-msgstr ""
+msgstr "MPEG"
msgctxt "IDS_MFMT_MPEGTS"
msgid "MPEG-TS"
-msgstr ""
+msgstr "MPEG-TS"
msgctxt "IDS_MFMT_DVDVIDEO"
msgid "DVD-Video"
-msgstr ""
+msgstr "DVD-Video"
msgctxt "IDS_MFMT_MKV"
msgid "Matroska"
-msgstr ""
+msgstr "Matroska"
msgctxt "IDS_MFMT_WEBM"
msgid "WebM"
-msgstr ""
+msgstr "WebM"
msgctxt "IDS_MFMT_MP4"
msgid "MP4"
-msgstr ""
+msgstr "MP4"
msgctxt "IDS_MFMT_MOV"
msgid "QuickTime Movie"
-msgstr ""
+msgstr "QuickTime Movie"
msgctxt "IDS_MFMT_3GP"
msgid "3GP"
-msgstr ""
+msgstr "3GP"
msgctxt "IDS_MFMT_3G2"
msgid "3G2"
-msgstr ""
+msgstr "3G2"
msgctxt "IDS_MFMT_FLV"
msgid "Flash Video"
-msgstr ""
+msgstr "Flash Video"
msgctxt "IDS_MFMT_OGM"
msgid "Ogg Media"
-msgstr ""
+msgstr "Ogg Media"
msgctxt "IDS_MFMT_RM"
msgid "Real Media"
-msgstr ""
+msgstr "Real Media"
msgctxt "IDS_MFMT_RT"
msgid "Real Script"
-msgstr ""
+msgstr "Real Script"
msgctxt "IDS_MFMT_WMV"
msgid "Windows Media Video"
-msgstr ""
+msgstr "Windows Media Video"
msgctxt "IDS_MFMT_BINK"
msgid "Smacker/Bink Video"
-msgstr ""
+msgstr "Smacker/Bink Video"
msgctxt "IDS_MFMT_FLIC"
msgid "FLIC Animation"
-msgstr ""
+msgstr "FLIC Animation"
msgctxt "IDS_MFMT_DSM"
msgid "DirectShow Media"
-msgstr ""
+msgstr "DirectShow Media"
msgctxt "IDS_MFMT_IVF"
msgid "Indeo Video Format"
-msgstr ""
+msgstr "Indeo Video Format"
msgctxt "IDS_MFMT_OTHER"
msgid "Other"
@@ -2854,103 +2910,107 @@ msgstr "Іншае"
msgctxt "IDS_MFMT_SWF"
msgid "Shockwave Flash"
-msgstr ""
+msgstr "Shockwave Flash"
msgctxt "IDS_MFMT_OTHER_AUDIO"
msgid "Other Audio"
-msgstr ""
+msgstr "Other Audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr ""
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
-msgstr ""
+msgstr "AIFF"
msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
-msgstr ""
+msgstr "Apple Lossless"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
-msgstr ""
+msgstr "AMR"
msgctxt "IDS_MFMT_APE"
msgid "Monkey's Audio"
-msgstr ""
+msgstr "Monkey's Audio"
msgctxt "IDS_MFMT_AU"
msgid "AU/SND"
-msgstr ""
+msgstr "AU/SND"
msgctxt "IDS_MFMT_CDA"
msgid "Audio CD track"
-msgstr ""
+msgstr "Audio CD track"
msgctxt "IDS_MFMT_FLAC"
msgid "FLAC"
-msgstr ""
+msgstr "FLAC"
msgctxt "IDS_MFMT_M4A"
msgid "MPEG-4 Audio"
-msgstr ""
+msgstr "MPEG-4 Audio"
msgctxt "IDS_MFMT_MIDI"
msgid "MIDI"
-msgstr ""
+msgstr "MIDI"
msgctxt "IDS_MFMT_MKA"
msgid "Matroska audio"
-msgstr ""
+msgstr "Matroska audio"
msgctxt "IDS_MFMT_MP3"
msgid "MP3"
-msgstr ""
+msgstr "MP3"
msgctxt "IDS_MFMT_MPA"
msgid "MPEG audio"
-msgstr ""
+msgstr "MPEG audio"
msgctxt "IDS_MFMT_MPC"
msgid "Musepack"
-msgstr ""
+msgstr "Musepack"
msgctxt "IDS_MFMT_OFR"
msgid "OptimFROG"
-msgstr ""
+msgstr "OptimFROG"
msgctxt "IDS_MFMT_OGG"
msgid "Ogg Vorbis"
-msgstr ""
+msgstr "Ogg Vorbis"
msgctxt "IDS_MFMT_RA"
msgid "Real Audio"
-msgstr ""
+msgstr "Real Audio"
msgctxt "IDS_MFMT_TAK"
msgid "TAK"
-msgstr ""
+msgstr "TAK"
msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
-msgstr ""
-
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr ""
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr ""
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr ""
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr ""
+msgstr "True Audio"
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
@@ -2962,47 +3022,35 @@ msgstr "Blu-ray плэйліст"
msgctxt "IDS_MFMT_RAR"
msgid "RAR Archive"
-msgstr ""
+msgstr "Архіў RAR"
msgctxt "IDS_DVB_CHANNEL_FPS"
msgid "FPS"
-msgstr ""
+msgstr "FPS"
msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
msgid "Resolution"
-msgstr ""
+msgstr "Разрознасць"
msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Прапорцыі"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Выкарыстаць WASAPI (перазапускае прайграванне)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Адкл. гук пры паскораным прайграванні"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Прыл. гуку:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
-msgstr "VSync: Укл"
+msgstr "Вертыкальная сінхранізацыя: Укл"
msgctxt "IDS_OSD_RS_VSYNC_OFF"
msgid "VSync: Off"
-msgstr "VSync: Выкл"
+msgstr "Вертыкальная сінхранізацыя: Адкл"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
msgid "Accurate VSync: On"
-msgstr "Дакладная VSync: Укл"
+msgstr "Дакладная вертыкальная сінхранізацыя: Укл"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
msgid "Accurate VSync: Off"
-msgstr "Дакладная VSync: Выкл"
+msgstr "Дакладная вертыкальная сінхранізацыя: Адкл"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
msgid "Synchronize Video to Display: On"
@@ -3010,7 +3058,7 @@ msgstr "Сінхранізацыя відэа да дысплэя: Укл"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
msgid "Synchronize Video to Display: Off"
-msgstr "Сінхранізацыя відэа да дысплэя: Выкл"
+msgstr "Сінхранізацыя відэа да дысплэя: Адкл"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
msgid "Synchronize Display to Video: On"
@@ -3018,15 +3066,15 @@ msgstr "Сінхранізацыя дысплэя да відэа: Укл"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
msgid "Synchronize Display to Video: Off"
-msgstr "Сінхранізацыя дысплэя да відэа: Выкл"
+msgstr "Сінхранізацыя дысплэя да відэа: Адкл"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
msgid "Present at Nearest VSync: On"
-msgstr "Паказ пры бліжэшай VSync пры бліжэшай VSync: Укл"
+msgstr "Паказ пры найбліжэйшай вертыкальнай сінхранізацыі: Укл"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
msgid "Present at Nearest VSync: Off"
-msgstr "Паказ пры бліжэшай VSync: Выкл"
+msgstr "Паказ пры найбліжэйшай вертыкальнай сінхранізацыі: Адкл"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
msgid "Color Management: On"
@@ -3034,7 +3082,7 @@ msgstr "Кіраванне колерам: Укл"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
msgid "Color Management: Off"
-msgstr "Кіраванне колерам: Выкл"
+msgstr "Кіраванне колерам: Адкл"
msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
msgid "Input Type: Auto-Detect"
@@ -3066,47 +3114,47 @@ msgstr "Вонкавае святло: Цёмнае (2.4 Gamma)"
msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
msgid "Rendering Intent: Perceptual"
-msgstr "Прызначэнне Рэндэрэнгу: Па ўспрыманне"
+msgstr "Мэта апрацоўкі: Зрокавае ўспрыманне"
msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
msgid "Rendering Intent: Relative Colorimetric"
-msgstr "Прызначэнне Рэндэрэнгу: Адносная каларыметрыя"
+msgstr "Мэта апрацоўкі: Адносная колераметрыя"
msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
msgid "Rendering Intent: Saturation"
-msgstr "Прызначэнне Рэндэрэнгу: Насычанасць"
+msgstr "Мэта апрацоўкі: Насычанасць"
msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
msgid "Rendering Intent: Absolute Colorimetric"
-msgstr "Прызначэнне Рэндэрэнгу: Абсалютная каларыметрыя"
+msgstr "Мэта апрацоўкі: Абсалютная колераметрыя"
msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
msgid "Output Range: %s"
-msgstr "Выходны дыяпазонe: %s"
+msgstr "Дыяпазон вываду: %s"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
msgid "Flush GPU before VSync: On"
-msgstr "Напаўняць GPU перад VSync: Укл"
+msgstr "Ачышчаць буфер GPU да верт. сінхранізацыі: Укл"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
msgid "Flush GPU before VSync: Off"
-msgstr "Напаўняць GPU перад VSync: Выкл"
+msgstr "Ачышчаць буфер GPU да верт. сінхранізацыі: Адкл"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
msgid "Flush GPU after Present: On"
-msgstr "Напаўняць GPU пасля Present: Укл"
+msgstr "Ачышчаць буфер GPU пасля паказу: Укл"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
msgid "Flush GPU after Present: Off"
-msgstr "Напаўняць GPU пасля Present: Выкл"
+msgstr "Ачышчаць буфер GPU пасля паказу: Адкл"
msgctxt "IDS_OSD_RS_WAIT_ON"
msgid "Wait for GPU Flush: On"
-msgstr "Чаканне запаўнення GPU: Укл"
+msgstr "Чакаць ачышчэння буфера: Укл"
msgctxt "IDS_OSD_RS_WAIT_OFF"
msgid "Wait for GPU Flush: Off"
-msgstr "Чаканне запаўнення GPU: Выкл"
+msgstr "Чакаць ачышчэння буфера: Адкл"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
msgid "D3D Fullscreen: On"
@@ -3114,7 +3162,7 @@ msgstr "Поўнаэкранны D3D: Укл"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
msgid "D3D Fullscreen: Off"
-msgstr "Поўнаэкранны D3D: Выкл"
+msgstr "Поўнаэкранны D3D: Адкл"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
msgid "Disable desktop composition: On"
@@ -3122,15 +3170,15 @@ msgstr "Адключыць эфект прац. сталу: Укл"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
msgid "Disable desktop composition: Off"
-msgstr "Адключыць эфект прац. сталу: Выкл"
+msgstr "Адключыць эфект прац. сталу: Адкл"
msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
msgid "Alternative VSync: On"
-msgstr "Альтэрнатыўная VSync: Укл"
+msgstr "Альтэрнатыўная вертыкальная сінхранізацыя: Укл"
msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
msgid "Alternative VSync: Off"
-msgstr "Альтэрнатыўная VSync: Выкл"
+msgstr "Альтэрнатыўная вертыкальная сінхранізацыя: Адкл"
msgctxt "IDS_OSD_RS_RESET_DEFAULT"
msgid "Renderer settings reset to default"
@@ -3142,11 +3190,11 @@ msgstr "Усталяваць аптымальныя налады рэндэрэ
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
msgid "D3D Fullscreen GUI Support: On"
-msgstr "Поўнаэкранны D3D з GUI: Укл"
+msgstr "Поўнаэкранны D3D з падтрымкай GUI: Укл"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
msgid "D3D Fullscreen GUI Support: Off"
-msgstr "Поўнаэкранны D3D з GUI: Выкл"
+msgstr "Поўнаэкранны D3D з падтрымкай GUI: Адкл"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
msgid "10-bit RGB Output: On"
@@ -3154,7 +3202,7 @@ msgstr "10-бітны RGB вывад: Укл"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
msgid "10-bit RGB Output: Off"
-msgstr "10-бітны RGB вывад: Выкл"
+msgstr "10-бітны RGB вывад: Адкл"
msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
msgid "Force 10-bit RGB Input: On"
@@ -3162,51 +3210,51 @@ msgstr "Прымусовы 10-бітны RGB увод: Укл"
msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
msgid "Force 10-bit RGB Input: Off"
-msgstr "Прымусовы 10-бітны RGB увод: Выкл"
+msgstr "Прымусовы 10-бітны RGB увод: Адкл"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
msgid "Full Floating Point Processing: On"
-msgstr "Поўная апрацоўка плыўнай кропкі: Укл"
+msgstr "Поўная апрацоўка лікаў з нефіксаванай коскай: Укл"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
msgid "Full Floating Point Processing: Off"
-msgstr "Поўная апрацоўка плыўнай кропкі: Выкл"
+msgstr "Поўная апрацоўка лікаў з нефіксаванай коскай: Адкл"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
msgid "Half Floating Point Processing: On"
-msgstr "Палавінная апрацоўка плыўнай кропкі: Укл"
+msgstr "Палавінная апрацоўка лікаў з нефіксаванай коскай: Укл"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
msgid "Half Floating Point Processing: Off"
-msgstr "Палавінная апрацоўка плыўнай кропкі: Выкл"
+msgstr "Палавінная апрацоўка лікаў з нефіксаванай коскай: Адкл"
msgctxt "IDS_BRIGHTNESS_DEC"
msgid "Brightness decrease"
-msgstr "Яркасць паменьшыць"
+msgstr "Паменшыць яркасць"
msgctxt "IDS_CONTRAST_INC"
msgid "Contrast increase"
-msgstr "Кантраст павялічыць"
+msgstr "Павялічыць кантраст"
msgctxt "IDS_CONTRAST_DEC"
msgid "Contrast decrease"
-msgstr "Кантраст паменшыць"
+msgstr "Паменшыць кантраст"
msgctxt "IDS_HUE_INC"
msgid "Hue increase"
-msgstr ""
+msgstr "Павялічыць адценне "
msgctxt "IDS_HUE_DEC"
msgid "Hue decrease"
-msgstr ""
+msgstr "Паменшыць адценне"
msgctxt "IDS_SATURATION_INC"
msgid "Saturation increase"
-msgstr "Насычанасць павялічыць"
+msgstr "Павялічыць насычанасць"
msgctxt "IDS_SATURATION_DEC"
msgid "Saturation decrease"
-msgstr "Насычанасць паменьшыць"
+msgstr "Паменшыць насычанасць"
msgctxt "IDS_RESET_COLOR"
msgid "Reset color settings"
@@ -3214,19 +3262,19 @@ msgstr "Скінуць налады колеру"
msgctxt "IDS_USING_LATEST_STABLE"
msgid "\nYou are already using the latest stable version."
-msgstr "\nУ вас ужо есць апошняя стабільная версія."
+msgstr "\nВы карыстаецеся апошняй стабільнай версіяй."
msgctxt "IDS_USING_NEWER_VERSION"
msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
-msgstr "Бягучая весрія v%s.\n\nАпошняя стабільная версія v%s."
+msgstr "Усталяваная версія v%s.\n\nАпошняя стабільная версія v%s."
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr "MДаступная новая версія %s. Вы выкарыстоўваеце %s.\n\nВы жадаеце наведаць сайт MPC-HC, каб загрузіць яе?"
+msgstr "Даступна новая версія MPC-HC %s. Вы карыстаецеся версіяй %s.\n\nНаведаць сайт MPC-HC, каб спампаваць яе?"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
-msgstr "Сервер абнаўленняў ня знойдзены.\n\nПраверце падлучэнне да Інтэрнэт або паспрабуйце пазней."
+msgstr "Сервер абнаўленняў не знойдзены.\n\nПраверце ваша Інтэрнэт-злучэнне і паспрабуйце зноў."
msgctxt "IDS_UPDATE_CLOSE"
msgid "&Close"
@@ -3234,15 +3282,15 @@ msgstr "&Закрыць"
msgctxt "IDS_OSD_ZOOM"
msgid "Zoom: %.0lf%%"
-msgstr ""
+msgstr "Маштаб: %.0lf%%"
msgctxt "IDS_OSD_ZOOM_AUTO"
msgid "Zoom: Auto"
-msgstr ""
+msgstr "Маштаб: Аўта"
msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
msgid "Toggle custom channel mapping"
-msgstr "Карыстальніцкае размеркаванне каналаў Укл/Адкл"
+msgstr "Укл/Адкл карыстальніцкае размеркаванне каналаў"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
msgid "Custom channel mapping: On"
@@ -3254,7 +3302,7 @@ msgstr "Карыстальніцкае размеркаванне каналаў
msgctxt "IDS_NORMALIZE"
msgid "Toggle normalization"
-msgstr "Нармалізацыя Укл/Адкл"
+msgstr "Укл/Адкл нармалізацыю"
msgctxt "IDS_OSD_NORMALIZE_ON"
msgid "Normalization: On"
@@ -3266,7 +3314,7 @@ msgstr "Нармалізацыя: Адкл"
msgctxt "IDS_REGAIN_VOLUME"
msgid "Toggle regain volume"
-msgstr "Аднаўляць гучнасць Укл/Адкл"
+msgstr "Укл/Адкл аднаўленне гучнасці"
msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
msgid "Regain volume: On"
@@ -3276,49 +3324,53 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Аднаўляць гучнасць: Адкл"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "байт"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
-msgstr ""
+msgstr "Кб"
msgctxt "IDS_SIZE_UNIT_M"
msgid "MB"
-msgstr ""
+msgstr "Мб"
msgctxt "IDS_SIZE_UNIT_G"
msgid "GB"
-msgstr ""
+msgstr "ГБ"
msgctxt "IDS_SPEED_UNIT_K"
msgid "KB/s"
-msgstr ""
+msgstr "Кб/с"
msgctxt "IDS_SPEED_UNIT_M"
msgid "MB/s"
-msgstr ""
+msgstr "Мб/с"
msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
msgid "Could not create the tuner."
-msgstr "Немагчыма стварыць т'юнер."
+msgstr "Не атрымалася стварыць цюнер."
msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
msgid "Could not create the receiver."
-msgstr "Немагчыма падлучыцца да рэсівера."
+msgstr "Не атрымалася стварыць прыёмнік."
msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
msgid "Could not connect the network and the tuner."
-msgstr "Немагчыма падлучыцца да сеткі і т'юнера."
+msgstr "Не атрымалася злучыць сетку і цюнер."
msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
msgid "Could not connect the tuner and the receiver."
-msgstr "Немагчыма падлучыцца да т'юнера і рэсівера."
+msgstr "Не атрымалася злучыць цюнер і прыёмнік."
msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
msgid "Could not connect the tuner."
-msgstr "Немагчыма падлучыцца да т'юнера."
+msgstr "Не атрымалася падлучыць цюнер."
msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
msgid "Could not create the demultiplexer."
-msgstr "Немагчыма стварыць дэмультыплексар."
+msgstr "Не атрымалася стварыць дэмультыплексар."
msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
msgid "Error parsing the entered time!"
@@ -3333,32 +3385,28 @@ msgid "Error parsing the entered frame rate!"
msgstr "Колькасць кадраў у секунду запісаны няслушна!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Пакадравы прагляд немагчымы, паспрабуйце іншы відэарэндар."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
-msgstr "Функцыі 'Захаваць малюнак' і 'Захаваць мініяцюры' не працуюць са стандартным рэндэрам для RealMedia.\nАбярыце адзін з DirectX рэндэраў для QuickTime і пераадкрыйце файл."
+msgstr "Функцыі «Захаваць кадр» і «Захаваць мініяцюры» не працуюць са стандартным апрацоўшчыкам відэа для RealMedia.\nВыберыце адзін з апрацоўшчыкаў DirectX для RealMedia і адкрыйце файл зноў."
msgctxt "IDS_SCREENSHOT_ERROR_QT"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
-msgstr "Функцыі 'Захаваць малюнак' і 'Захаваць мініяцюры' не працуюць са стандартным рэндэрам для QuickTime.\nАбярыце адзін з DirectX рэндэраў для QuickTime і пераадкрыйце файл."
+msgstr "Функцыі «Захаваць кадр» і «Захаваць мініяцюры» не працуюць са стандартным апрацоўшчыкам відэа для QuickTime.\nВыберыце адзін з апрацоўшчыкаў DirectX для QuickTime і адкрыйце файл зноў."
msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
-msgstr "Функцыі 'Захаваць малюнак' і 'Захаваць мініяцюры' не працуюць Shockwave файлаў."
+msgstr "Функцыі «Захаваць кадр» і «Захаваць мініяцюры» не працуюць з файламі Shockwave."
msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgstr "Функцыі 'Захаваць малюнак' і 'Захаваць мініяцюры' не працуюць з рендэрам Overlay Mixer.\nЗмяніце відэарэндэр і зноў адкрыйце файл."
-
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Немагчыма падлучыцца да анлайн базы субтытраў."
+msgstr "Функцыі «Захаваць кадр» і «Захаваць мініяцюры» не працуюць з апрацоўшчыкам відэа Overlay Mixer.\nЗмяніце апрацоўшчык відэа і адкрыйце файл зноў."
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
-msgstr "Хочаце актывіраваць рэдактар EDL?"
+msgstr "Актываваць рэдактар EDL?"
msgctxt "IDS_CAPTURE_ERROR"
msgid "Capture Error"
@@ -3370,7 +3418,7 @@ msgstr "відэа"
msgctxt "IDS_CAPTURE_ERROR_AUDIO"
msgid "audio"
-msgstr "аўдыё"
+msgstr "аўдыя"
msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
msgid "Can't add the %s buffer filter to the graph."
@@ -3382,11 +3430,11 @@ msgstr "Немагчыма падлучыць буферны фільтр %s д
msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
msgid "Can't add the %s encoder filter to the graph."
-msgstr "Немагчыма дадаць фільтр-энкодер %s да графа."
+msgstr "Немагчыма дадаць фільтр-энкодар %s да графа."
msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
msgid "Can't connect the %s encoder filter to the graph."
-msgstr "Немагчыма падлучыць фільтр-энкодер %s да графа."
+msgstr "Немагчыма падлучыць фільтр-энкодар %s да графа."
msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
msgid "Can't set the compression format on the %s encoder filter."
@@ -3394,7 +3442,7 @@ msgstr "Не атрымоўваецца ўсталяваць фармат сці
msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
msgid "Can't connect the %s stream to the multiplexer filter."
-msgstr "Немагчыма падлучыць струмень %s фільтру-мультыплексару."
+msgstr "Немагчыма падлучыць паток %s фільтру-мультыплексару."
msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
msgid "No video capture pin was found."
@@ -3402,7 +3450,7 @@ msgstr "Не знойдзены пін для відэа захопу."
msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
msgid "No audio capture pin was found."
-msgstr "Не знойдзены пін для аўдыё захопу."
+msgstr "Не знойдзены пін для аўдыязахопу."
msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
msgid "Error initializing the output file."
@@ -3410,11 +3458,11 @@ msgstr "Памылка ініцыялізацыі выходнага файла.
msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
msgid "Error initializing the audio output file."
-msgstr "Памылка ініцыялізацыі выходнага аўдыёфайла."
+msgstr "Памылка ініцыялізацыі выходнага аўдыяфайла."
msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
-msgstr "Правільны фармат часу [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+msgstr "Правільны фармат часу [-]гг:хв:сс.мс (напр. 01:23:45.678)."
msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
msgid "This type is already in the list!"
@@ -3422,35 +3470,43 @@ msgstr "Гэты тып ужо ёсць у спісе!"
msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
-msgstr "Вы павінны ужыць налады перад іхняй праверкай."
+msgstr "Каб праверыць новыя налады, вы павінны іх ужыць."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
-msgstr "Пасля прайгрвання: Выйсці"
+msgstr "Па сканчэнні прайгравання: выйсці"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
-msgstr "Пасля прайгрвання: Перайсці ў рэжым чакання"
+msgstr "Па сканчэнні прайгравання: перайсці ў рэжым чакання"
msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
msgid "After Playback: Hibernate"
-msgstr "Пасля прайгрвання: Перайсці ў рэжым сну"
+msgstr "Па сканчэнні прайгравання: перайсці ў рэжым сну"
msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
msgid "After Playback: Shutdown"
-msgstr "Пасля прайгрвання: Выключыць"
+msgstr "Па сканчэнні прайгравання: выключыць камп'ютар"
msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
msgid "After Playback: Log Off"
-msgstr "Пасля прайгрвання: Завяршыць сеанс"
+msgstr "Па сканчэнні прайгравання: завяршыць сеанс"
msgctxt "IDS_AFTERPLAYBACK_LOCK"
msgid "After Playback: Lock"
-msgstr "Пасля прайгрвання: Блакаваць"
+msgstr "Па сканчэнні прайгравання: заблакаваць камп'ютар"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr ""
+msgstr "Па сканчэнні прайгравання: выключыць манітор"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Па сканчэнні прайгравання: прайграць наступны файл ў папцы"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Па сканчэнні прайгравання: нічога не рабіць"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
@@ -3478,57 +3534,441 @@ msgstr "Кіраванне колерам не падтрымліваецца"
msgctxt "IDS_BRIGHTNESS_INC"
msgid "Brightness increase"
-msgstr "Яркасць павялічыць"
+msgstr "Павялічыць яркасць"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
-msgstr ""
+msgstr "Увядзіце сюды пажаданыя мовы.\nНапрыклад: «bel eng rus»"
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
-msgstr ""
+msgstr "Знешнія сплітары могуць мець уласныя моўныя налады, таму пераважныя мовы з MPC-HC для іх не будуць ужыты.\nУключыце гэты параметр, калі вы хочаце, каб MPC-HC мог кіраваць знешнімі сплітарамі."
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
-msgstr ""
+msgstr "&Плэйлісты Blu-ray "
msgctxt "IDS_NAVIGATE_PLAYLIST"
msgid "&Playlist"
-msgstr ""
+msgstr "&Спіс прайгравання"
msgctxt "IDS_NAVIGATE_CHAPTERS"
msgid "&Chapters"
-msgstr ""
+msgstr "С&цэны"
msgctxt "IDS_NAVIGATE_TITLES"
msgid "&Titles"
-msgstr ""
+msgstr "&Загалоўкі"
msgctxt "IDS_NAVIGATE_CHANNELS"
msgid "&Channels"
-msgstr ""
+msgstr "&Каналы"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr ""
+msgstr "Калі выбрана «Апошні ключавы кадр», праграма пераходзіць да найбліжэйшага ключавога кадра перад пунктам пошуку, калі «Бліжэйшы ключавы кадр» - перад пунктам пошуку або пасля яго."
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr ""
+msgstr "Асацыяваць з усімі фарматамі"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr ""
+msgstr "Асацыяваць толькі з відэафарматамі"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr ""
+msgstr "Асацыяваць толькі з аўдыяфарматамі"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr ""
+msgstr "Сцерці ўсе асацыяцыі"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
-msgstr ""
+msgstr "Налады"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Пастаўшчык"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Для глухіх"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Спамповак"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Лік"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Збой пошука субцітраў."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Пошук субцітраў у Інтэрнэце спынены."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Пошук завершаны, знойдзена субцітраў: %d"
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Пошук завершаны, субцітраў не знойдзена."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Спампаваць субцітры"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Ідзе пошук субцітраў у Інтэрнэце..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Спыненне пошуку субцітраў у Інтэрнэце..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Імя карыстальніка"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Стан"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Гатовы"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Не выконваецца."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Запампоўка..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Субцітры запампаваныя."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Збой запампавання субцітраў."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Запампаванне субцітраў спынена."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Такія субцітры ўжо ёсць."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Ідзе запампаванне субцітраў..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Запампаванне завершана."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Запампаванне спынена."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Збой запампавання."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Спампаваць і адкрыць"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Наладзіць"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Скінуць"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Вышэй"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Ніжэй"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Адкрыць спасылку"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Мовы"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "Памылка. Не атрымалася злучыцца з Інтэрнэтам."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Увядзіце ўліковыя дадзеныя для сайта "
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Увядзіце свае ўліковыя дадзеныя для сайта "
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Прапорцыі: Дапускаць квадратныя пікселі (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Спампаваны [%s] «%s»"
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Запампаваць субцітры"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Сапраўды запампаваць файл субцітраў «%s»?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Запыт даступных моў"
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Не атрымалася ўвасці ў \"%S\" пад уліковым запісам \"%S\".\n\nУвядзіце правільна імя карыстальніка і пароль або скіньце ўліковыя дадзеныя, каб увайсці ананімна."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Аўтаматычны пошук і спампоўванне будуць адключаныя для ўсіх медыя-файлаў, чый шлях ўтрымлівае ўведзеныя шаблоны.\nУзор: \"прыватная папка\\відэа|праца\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"шлях\"\tФайл або каталог для загрузкі\n\t\t(дазволены маскі, \"-\" азначае стандартны)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"\tЗагрузiць дадатковы гукавы файл"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"file\"\tЗагрузiць дадатковы гукавы файл са зрушэннем XXмс\n\t\t(калі файл утрымлівае ў назве \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tЗапуск у поўнаэкранным D3D-рэжыме"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"\tЗагрузiць дадатковыя субцітры"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtername\"\tЗагрузiць фільтры DirectShow з бібліятэкі (дазволены маскі)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tЗапуск у рэжыме DVD, \"шлях\" азначае каталог з DVD (неабавязковы)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tПрайграць загаловак T, са сцэны C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tПрайграць загаловак T, сцэну C, з пазіцыі P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tЗагрузіць усе дарожкі Audio CD або (S)VCD,\n\t\t\"шлях\" азначае шлях да дыска (неабавязкавы)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tАдкрыць відэапрыладу па змаўчанні"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tТолькі адкрыць файл, не пачынаць прайграванне"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tПачынаць прайграванне адразу пасля запуску"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tЗакрыць па сканчэнні прайгравання (працуе толькі з ключом /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tВыключыць камп'ютар па сканчэнні прайгравання"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tПерайсці ў рэжым чакання па сканчэнні прайгравання"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tПерайсці ў рэжым сну па сканчэнні прайгравання"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tЗавяршыць сеанс па сканчэнні прайгравання"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tЗаблакаваць камп'ютар па сканчэнні прайгравання"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tВыключыць манітор па сканчэнні прайгравання"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tПрайграць наступны файл ў папцы па сканчэнні прайгравання"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tЗапуск у поўнаэкранным рэжыме"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tЗапуск у згорнутым выглядзе"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tВыкарыстаць новае акно прайгравальніка"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tДадаць \"шлях\" у спіс прайгравання, можна сумяшчаць з /open і /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tВыпадковы парадак прайгравання"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tСтварыць асацыяцыі файлаў для відэафарматаў"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tСтварыць асацыяцыі файлаў для аўдыяфарматаў"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tСтварыць асацыяцыі файлаў для плэйлістоў"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tСтварыць асацыяцыі файлаў для ўсіх падтрымліваемых фарматаў"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tСцерці ўсе створаныя асацыяцыі файлаў"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tПрайграваць з пазіцыі \"ms\" (= мілісекунды)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos\tПрайграваць з пазіцыі hh:mm:ss (дзе h — гадзіна, m — хвіліна, s — секунда)"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tУстанавіць фіксаваны памер акна (w - шырыня,h- вышыня)"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tЗапуск на маніторы N, дзе N адлічваецца з 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tВыкарыстаць аўдыярэндар N, дзе N адлічваецца з 1 (глядзіце налады \"Вывад\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Назва\"\tЗапуск з вызначанымі наладамі шэйдараў"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"назва\"\tPan&Scan — назва перадусталёўкі памеру і становішча"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tПаўторнае асацыяванне значкоў для файлаў"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tАдкрыць MPC-HC у фонавым рэжыме"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tЗапуск вэб-інтэрфейсу праз порт N"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tПаказваць у OSD адладачныя звесткі"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tАдключыць справаздачы пра збоі"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tЗапуск MPC-HC у вядомым рэжыме"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tЗадаць нумар графічнага працэсара для апаратнага дэкадавання.\n\t\tДаступна толькі для CUVID і DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tАднавіць налады па змаўчанні"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tПаказвае гэтую даведку"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Мінімальнае значэнне рэйтынгу субцітраў для аўтаматычнага спампоўвання. Вышэйшае значэнне вядзе да спампоўвання больш дакладных субцітраў, ніжэйшае — таксама і недакладных. Універсальнага значэння не існуе, выберыце тое, якое больш падыходзіць для вас."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Аўтазатрымка (мс)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Памер ў пікселях па змаўчанні для панэлі навігацыі."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Выкарыстанне старой панэлі навігацыі, замест новай — вектарнай."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Скапіраваць URL"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.bn.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.bn.dialogs.po
index ecb6d35d0..64cda947f 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.bn.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.bn.dialogs.po
@@ -1,17 +1,20 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Mehzad Galib, 2014
+# Mehedi Hussain, 2014
+# Mehzad Galib, 2015
# mehzad, 2014
-# mehzad, 2014
+# Mehzad Galib, 2016
# Tapu Afrad (তপু আফ্রাদ) <tapu_afrad@hotmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Bengali (http://www.transifex.com/projects/p/mpc-hc/language/bn/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Bengali (http://www.transifex.com/mpc-hc/mpc-hc/language/bn/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -108,10 +111,10 @@ msgstr "অডিও সময়ের স্থানান্তর (ms):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
-msgstr "নির্ধারণযোগ্য চ্যানেল বিন্যাস সক্রিয়করণ"
+msgstr "ব্যক্তি-নির্ধারিত চ্যানেল বিন্যাস সক্রিয়করণ"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "কনফিগারেশনের জন্য স্পিকার সংখ্যা"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -119,7 +122,7 @@ msgid "input channels:"
msgstr "ইনপুট চ্যানেলসমূহ:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "কোন কিছু ক্লিক করার সময় অবিলম্বে পরিবর্তনের জন্য শিফট কী ধরে রাখুন"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -191,8 +194,8 @@ msgid "About"
msgstr "MPC-HC বিষয়ক"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "কপিরাইট © ২০০২-২০১৪ বিস্তারিত দেখুন Authors.txtএ"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "কপিরাইট © ২০০২-২০১৭ বিস্তারিত দেখুন Authors.txtএ"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -200,7 +203,7 @@ msgstr "এই প্রোগ্রামটি একটি উন্মুক
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "বাংলা অনুবাদ সম্পাদিত করেছে মেহেদী শান্ত"
+msgstr "বাংলা অনুবাদটি সম্পাদনা করেছে মেহেদী শান্ত"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
@@ -423,12 +426,16 @@ msgid "time(s)"
msgstr "বার"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "পুনরাবৃত্তির ধরন:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "প্লেব্যাকের পরে"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "আউটপুট"
+msgid "Default zoom"
+msgstr "ডিফল্ট জূম"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -474,10 +481,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "স্বয়ংক্রিয়ভাবে অডিও ফাইল লোড"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "বিল্ট-ইন সাবটাইটেল রেনডারার ব্যবহার"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "কন্ট্রোল"
@@ -516,7 +519,7 @@ msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr ""
+msgstr "বিলম্বনে পদক্ষেপ"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -564,14 +567,14 @@ msgstr "রেনডারারের ধরন-প্রকৃতি"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
msgid "Apply aspect ratio compensation for anamorphic videos"
-msgstr "আনামর্ফিক ভিডিওসমূহের জন্য অ্যাসপেক্ট রেশিও সামঞ্জস্য করা কার্যকর করণ"
+msgstr "আনামর্ফিক ভিডিওসমূহের জন্য অ্যাসপেক্ট রেশিও সামঞ্জস্য করা প্রয়োগ করণ"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Warning"
msgstr "সতর্কীকরণ"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "আপনার ভিডিওকার্ডের সেটিংসমূহের কোথাও যদি সম্পূর্ণ-স্ক্রীন জুড়ে অ্যান্টিএলিয়েসিং- ওভাররাইড করণ এবং সক্রিয় থাকে, তবে সাবটাইটেল অপেক্ষাকৃত ভাল তো দেখাবেই না বরং সেটা আপনার CPUর কর্মদক্ষতা হ্রাস করবে।"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -588,19 +591,19 @@ msgstr "সেট করি"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
msgid "Association"
-msgstr "সংশ্লিষ্টতা"
+msgstr "সম্পৃক্ততা"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr ""
+msgstr "ধরন-সাপেক্ষে নির্দিষ্ট আইকন ব্যবহার করি"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr ""
+msgstr "অ্যাডমিনিস্ট্রেটর হিসেবে চালনা করি(&A)"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "ডিফল্ট প্রোগ্রাম হিসেবে নির্ধারণ করি(&D)"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -672,22 +675,22 @@ msgstr "সীক বারে পরিচ্ছেদ নির্দেশক
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
-msgstr "\"এখন প্লে হচ্ছে\" সম্পর্কে তথ্যাদি স্কাইপের মুড ম্যাসেজে প্রদর্শন"
+msgstr "\"এখন প্লে হচ্ছে\" সম্পর্কে তথ্যাদি স্কাইপের মোড ম্যাসেজে প্রদর্শন"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "ডিফল্ট নয় এমন মনিটরে ফুলস্ক্রীন জুড়ে অবস্থানকালে প্লেয়ারের মিনিমাইজ করণ প্রতিরোধ "
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Windows 7এর বৈশিষ্ট্যমূলক টাস্কবার ব্যবহার"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "টাস্কবারের বিভিন্ন বৈশিষ্ট্যসমূহ বিস্তৃতভাবে প্রয়োগ"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "প্লেলিস্টে মাত্র একটি ফাইল থাকলে \"পিছনে/সামনে যাই\" দ্বারা ফোল্ডারে থাকা পরবর্তী/পূর্ববর্তী ফাইল চালনা"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "সময় প্রদর্শনে টুলটিপ ব্যবহার:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -700,7 +703,7 @@ msgstr "Logitech LCD সমর্থন সক্রিয়করণ (পরী
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
-msgstr "উইন্ডো'ড মুডে প্লেব্যাকের সময় স্বয়ংক্রিয়ভাবে মাউস পয়েন্টার লুকিয়ে যাওয়া"
+msgstr "উইন্ডো'ড মোডে প্লেব্যাকের সময় স্বয়ংক্রিয়ভাবে মাউস পয়েন্টার লুকিয়ে যাওয়া"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
msgid "Add Filter..."
@@ -932,7 +935,7 @@ msgstr "ms"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
msgid "Save custom style"
-msgstr "নির্ধারণকৃত ধরনটি সেইভ করি"
+msgstr "ব্যক্তি-নির্ধারিত ধরনটি সেইভ করি"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
@@ -1127,8 +1130,8 @@ msgid "Audio Renderer"
msgstr "অডিও রেনডারার"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (renderless) এবং EVR (CP)এর সেটিংসমূহ"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderless) এবং EVR (CP)এর সেটিংসমূহ"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1156,7 +1159,7 @@ msgstr "বিকল্প VSync"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
msgid "VMR-9 Mixer Mode"
-msgstr "VMR-9 মিক্সার মুড"
+msgstr "VMR-9 মিক্সার মোড"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
msgid "YUV Mixing"
@@ -1171,8 +1174,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "সাবটাইটেল *"
+msgid "Subtitles"
+msgstr "সাবটাইটেল"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1187,8 +1190,12 @@ msgid "Rotation"
msgstr "ঘূর্ণন"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* বাহিরস্থ ফিল্টারসমূহ (যেমন VSFilter) সকল রেনডারেই সাবটাইটেল প্রদর্শন করতে পারে।"
+msgid "Subtitle Renderer"
+msgstr "সাবটাইটেল রেনডারার"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "সংকলিত শেইডারসমূহ ক্যাশ করণ"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1206,6 +1213,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "শুধুমাত্র স্থানীয়হোস্ট থেকে অ্যাকসেস সমর্থন"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "প্রাকদর্শন সক্রিয়করণ"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "ডিবাগ তথ্যাদি মুদ্রণ"
@@ -1231,17 +1242,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI নিয়ন্ত্রকসমূহ: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "অনলাইনে পাওয়া সাবটাইটেলসমূহ"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "ডাউনলোড ও চালনা করি"
+msgid "Download subtitles"
+msgstr "সাবটাইটেল ডাউনলোড করি"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "এই মুহূর্তে লোডকৃত সাবটাইটেলের সাথে প্রতিস্থাপন"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "ডাউনলোড"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "পুনঃবিন্যস্ত করি"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "রহিত করি"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "অপশনসমূহ"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "সাবটাইটেল আপলোড করি"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "আপলোড করি"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "রহিত করি"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "অপশনসমূহ"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "সেইভ করতে পারি..."
@@ -1279,12 +1318,12 @@ msgid "Enable automatic update check"
msgstr "স্বয়ংক্রিয়ভাবে হালনাগাদ অনুসন্ধান সক্রিয়করণ"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "প্রত্যেক অনুসন্ধান মধ্যবর্তি বিরতি:"
+msgid "Check every:"
+msgstr "অনুসন্ধান করা হবে:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
-msgstr "দিন"
+msgstr "দিন পরপর"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Settings management"
@@ -1480,7 +1519,7 @@ msgstr "ফুলস্ক্রীনের মনিটর"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
msgid "Use autochange fullscreen monitor mode"
-msgstr "ফুলস্ক্রীন মনিটরের মুড স্বয়ংক্রিয়ভাবে-পরিবর্তন ব্যবহার"
+msgstr "ফুলস্ক্রীন মনিটরের মোড স্বয়ংক্রিয়ভাবে-পরিবর্তন ব্যবহার"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
msgid "Add"
@@ -1500,7 +1539,7 @@ msgstr "নিচে নামাই"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
msgid "Apply default monitor mode on fullscreen exit"
-msgstr "ফুলস্ক্রীন থেকে প্রস্থানে ডিফল্ট মনিটর মুড কার্যকরকরণ"
+msgstr "ফুলস্ক্রীন থেকে প্রস্থানে ডিফল্ট মনিটর মোড প্রয়োগ করণ"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
msgid "Restore resolution on program exit"
@@ -1543,16 +1582,28 @@ msgid "Reset"
msgstr "পুনর্বিন্যাস করি"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "অনলাইন ডেটাবেস"
+msgid "Online search, download and upload subtitles"
+msgstr "অনলাইনে সাবটাইটেল অনুসন্ধান, ডাউনলোড এবং আপলোড করতে"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "স্থানীয় ডাইরেক্টরি সমূহতে পাওয়া না গেলে, স্বয়ংক্রিয়ভাবে সাবটাইটেল অনুসন্ধান এবং ডাউনলোড করণ"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "শ্রবণ প্রতিবন্ধীদের জন্য সাবটাইটেল সমূহকে প্রাধান্য (সাবটাইটেল সরবরাহকারী দ্বারা নির্দেশিত করা হলে)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "নিম্নোক্ত শব্দ(সমূহ) ধারণকারী ফাইলসমূহকে উপেক্ষা করি:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "অনলাইন সাবটাইটেল ডেটাবেসের জন্য মূল URL:"
+msgid "Languages in order of preference:"
+msgstr "পছন্দনীয় ভাষাসমূহের অগ্রাধিকার ক্রম (উদাহরণ- \"eng ell spa\"):"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "পরীক্ষা করি"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "ভিডিওর প্লেব্যাকের শেষে স্বয়ংক্রিয়ভাবে সক্রিয় সাবটাইটেলটিকে আপলোড করি"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1654,15 +1705,95 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "ডিফল্ট"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "ডিভাইস"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "স্বতন্ত্র মোড"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "বিটস্ট্রিমিং অনুমোদন করি"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "অপশনসমূহ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "স্টেরিও ক্রসফিড সক্রিয় করি (হেডফোনের জন্য)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "বিছিন্ন-করণ হার:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "মান:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "দ্রষ্টব্য"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "অডিও বিকৃতি রোধ করার জন্য, লসি-এনকোডেড অডিও জোরে প্লে করার সময় প্লেয়ারের ভলিউম ৮৫% এর আশে-পাশে রাখার জন্য পরামর্শ দেওয়া যাচ্ছে।"
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEGএর বৈশিষ্ট্যগুণ:"
msgctxt "IDD_CMD_LINE_HELP_CAPTION"
msgid "Command line help"
-msgstr ""
+msgstr "কমান্ড লাইনের সহায়িকা"
msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "ঠিক আছে"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "আকস্মিক বন্ধ হওয়ার প্রতিবেদন"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "আমরা অত্যন্ত দুঃখিত, মনে হচ্ছে MPC-HC এইমাত্র চালনা বন্ধ হয়ে গিয়েছিল। :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "এই যান্ত্রিক-ত্রুটিটি নির্ণয় এবং সমাধানে আমাদেরকে সাহায্য করতে একটি প্রতিবেদন পেশ করুন।"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "অতিরিক্ত তথ্যাদি"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "ইমেইল:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "আপনার ইমেইল ঠিকানা দেয়া বাধ্যতামূলক নয় এবং শুধুমাত্র ব্যবহার করা হবে যদি ডেভলপারদের আরো তথ্যাদির জন্য আপনার সাথে যোগাযোগের প্রয়োজন পরে।"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "সমস্যার বৃত্তান্ত (শুধুমাত্র ইংরেজি ভাষা ব্যবহার করুন):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "MPC-HC বন্ধ করে পুনরায় চালনা করি"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "MPC-HC বন্ধ করি"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.bn.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.bn.menus.po
index 5a417b8c5..57278d5a2 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.bn.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.bn.menus.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# mehzad, 2014
+# Mehzad Galib, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-21 19:10+0000\n"
-"Last-Translator: mehzad\n"
-"Language-Team: Bengali (http://www.transifex.com/projects/p/mpc-hc/language/bn/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-02-16 22:37+0000\n"
+"Last-Translator: Mehzad Galib\n"
+"Language-Team: Bengali (http://www.transifex.com/mpc-hc/mpc-hc/language/bn/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,15 +19,15 @@ msgstr ""
msgctxt "POPUP"
msgid "&File"
-msgstr "ফাইল(&F)"
+msgstr "ফাইল (&F)"
msgctxt "ID_FILE_OPENQUICK"
msgid "&Quick Open File..."
-msgstr "দ্রুত ফাইল খুলি...(&Q)"
+msgstr "দ্রুত ফাইল খুলি... (&Q)"
msgctxt "ID_FILE_OPENMEDIA"
msgid "&Open File..."
-msgstr "ফাইল খুলি...(&O)"
+msgstr "ফাইল খুলি... (&O)"
msgctxt "ID_FILE_OPENDVDBD"
msgid "Open &DVD/BD..."
@@ -34,215 +35,215 @@ msgstr "&DVD/BD খুলি..."
msgctxt "ID_FILE_OPENDEVICE"
msgid "Open De&vice..."
-msgstr "ডিভাইস খুলি...(&V)"
+msgstr "ডিভাইস খুলি... (&V)"
msgctxt "ID_FILE_OPENDIRECTORY"
msgid "Open Dir&ectory..."
-msgstr "ডাইরেক্টরি খুলি...(&E)"
+msgstr "ডাইরেক্টরি খুলি... (&E)"
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
-msgstr "ডিস্ক খুলি(&P)"
+msgstr "ডিস্ক খুলি (&P)"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
-msgstr "সাম্প্রতিক ফাইলসমূহ(&F)"
+msgstr "সাম্প্রতিক ফাইলসমূহ (&F)"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
-msgstr "চালনা বন্ধ করি(&C)"
+msgstr "চালনা বন্ধ করি (&C)"
msgctxt "ID_FILE_SAVE_COPY"
msgid "&Save a Copy..."
-msgstr "প্রতিলিপি সেইভ করি...(&S)"
+msgstr "প্রতিলিপি সেইভ করি... (&S)"
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
-msgstr "ছবি সেইভ করি...(&I)"
+msgstr "ছবি সেইভ করি... (&I)"
msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
-msgstr "থাম্ব্‌নেইলসমূহ সেইভ করি...(&T)"
-
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "সাবটাইটেল লোড করি...(&L)"
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "সাবটাইটেল সেইভ করি...(&U)"
+msgstr "থাম্ব্‌নেইলসমূহ সেইভ করি... (&T)"
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "সাবটাইটেল ডেটাবেস(&B)"
+msgid "S&ubtitles"
+msgstr "সাবটাইটেল"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "সাবটাইটেল লোড করি... (&L)"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "অনুসন্ধান করি...(&S)"
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "সাবটাইটেল সেইভ করি... (&U)"
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "আপলোড করি...(&U)"
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "সাবটাইটেল ডাউনলোড করি... (&D)"
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "ডাউনলোড করি...(&D)"
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "সাবটাইটেল আপলোড করি... (&U)"
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
-msgstr "প্রোপার্টিস(&R)"
+msgstr "প্রোপার্টিস (&R)"
msgctxt "ID_FILE_EXIT"
msgid "E&xit"
-msgstr "প্রোগ্রাম বন্ধ করি(&X)"
+msgstr "প্রোগ্রাম বন্ধ করি (&X)"
msgctxt "POPUP"
msgid "&View"
-msgstr "প্রদর্শনী(&V)"
+msgstr "প্রদর্শনী (&V)"
msgctxt "ID_VIEW_CAPTIONMENU"
msgid "Caption&&Menu"
-msgstr "ক্যাপশন আর মেন্যু(&M)"
+msgstr "ক্যাপশন আর মেন্যু (&M)"
msgctxt "ID_VIEW_SEEKER"
msgid "See&k Bar"
-msgstr "সীক বার(&K)"
+msgstr "সীক বার (&K)"
msgctxt "ID_VIEW_CONTROLS"
msgid "&Controls"
-msgstr "কন্ট্রোলসমূহ(&C)"
+msgstr "কন্ট্রোলসমূহ (&C)"
msgctxt "ID_VIEW_INFORMATION"
msgid "&Information"
-msgstr "তথ্যাদি(&I)"
+msgstr "তথ্যাদি (&I)"
msgctxt "ID_VIEW_STATISTICS"
msgid "&Statistics"
-msgstr "পরিসংখ্যান(&S)"
+msgstr "পরিসংখ্যান (&S)"
msgctxt "ID_VIEW_STATUS"
msgid "St&atus"
-msgstr "অবস্থিতি(&A)"
+msgstr "অবস্থিতি (&A)"
msgctxt "ID_VIEW_SUBRESYNC"
msgid "Su&bresync"
-msgstr "সাবটাইটেল পুনঃSyncকরণ(&B)"
+msgstr "সাবটাইটেল পুনঃSyncকরণ (&B)"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
-msgstr "প্লেলিস্ট(&Y)"
+msgstr "প্লেলিস্ট (&Y)"
msgctxt "ID_VIEW_CAPTURE"
msgid "Captu&re"
-msgstr "ক্যাপচার(&R)"
+msgstr "ক্যাপচার (&R)"
msgctxt "ID_VIEW_NAVIGATION"
msgid "Na&vigation"
-msgstr "ন্যাভিগেশন(&V)"
+msgstr "ন্যাভিগেশন (&V)"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr "শেইডারসমূহ ডিবাগকরণ(&D)"
+msgstr "শেইডারসমূহ ডিবাগকরণ (&D)"
msgctxt "POPUP"
msgid "&Presets..."
-msgstr "প্রিসেটসমুহ...(&P)"
+msgstr "প্রিসেটসমুহ... (&P)"
msgctxt "ID_VIEW_PRESETS_MINIMAL"
msgid "&Minimal"
-msgstr "ন্যূনতম(&M)"
+msgstr "ন্যূনতম (&M)"
msgctxt "ID_VIEW_PRESETS_COMPACT"
msgid "&Compact"
-msgstr "ঘনবিন্যস্ত(&C)"
+msgstr "ঘনবিন্যস্ত (&C)"
msgctxt "ID_VIEW_PRESETS_NORMAL"
msgid "&Normal"
-msgstr "সাধারণ(&N)"
+msgstr "সাধারণ (&N)"
msgctxt "ID_VIEW_FULLSCREEN"
msgid "F&ull Screen"
-msgstr "ফুলস্ক্রীন(&U)"
+msgstr "ফুলস্ক্রীন (&U)"
msgctxt "POPUP"
msgid "&Zoom"
-msgstr "জূম(&Z)"
+msgstr "জূম (&Z)"
msgctxt "ID_VIEW_ZOOM_50"
msgid "&50%"
-msgstr "৫০%(&5)"
+msgstr "৫০% (&5)"
msgctxt "ID_VIEW_ZOOM_100"
msgid "&100%"
-msgstr "১০০%(&1)"
+msgstr "১০০% (&1)"
msgctxt "ID_VIEW_ZOOM_200"
msgid "&200%"
-msgstr "২০০%(&2)"
+msgstr "২০০% (&2)"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
-msgstr "স্বয়ংক্রিয় পরিব্যাপ্তি(&F)"
+msgstr "স্বয়ংক্রিয় পরিব্যাপ্তি (&F)"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "স্বয়ংক্রিয় পরিব্যাপ্তি(শুধু বড়ো)(&L)"
+msgstr "স্বয়ংক্রিয় পরিব্যাপ্তি(শুধু বড়ো) (&L)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "রেনডারার সেটিংসমূহ(&E)"
+msgstr "রেনডারার সেটিংসমূহ (&E)"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
-msgstr "স্ক্রীন ছিঁড়ে যাওয়া পরীক্ষা(&T)"
+msgstr "স্ক্রীন ছিঁড়ে যাওয়া পরীক্ষা (&T)"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "ডিসপ্লে বৃত্তান্ত(&D)"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "বৃত্তান্ত প্রদর্শন (&D)"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "অবশিষ্ট সময়(&R)"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "চলতি সময় প্রদর্শন (&I)"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "ফাইলের নাম প্রদর্শন (&F)"
msgctxt "POPUP"
msgid "&Output Range"
-msgstr "আউটপুট সীমা(&O)"
+msgstr "আউটপুট সীমা (&O)"
msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
msgid "&0 - 255"
-msgstr "০-২৫৫(&0)"
+msgstr "০-২৫৫ (&0)"
msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
msgid "&16 - 235"
-msgstr "১৬-২৩৫(&1)"
+msgstr "১৬-২৩৫ (&1)"
msgctxt "POPUP"
msgid "&Presentation"
-msgstr "উপস্থাপনা(&P)"
+msgstr "উপস্থাপনা (&P)"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
-msgstr "D3D ফুলস্ক্রীন মুড(&M)"
+msgstr "D3D ফুলস্ক্রীন মোড (&M)"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "D3D ফুলস্ক্রীন GUI সমর্থন(&G)"
+msgstr "D3D ফুলস্ক্রীন GUI সমর্থন (&G)"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "১০-বিট RGB আউটপুট(&R)"
+msgstr "১০-বিট RGB আউটপুট (&R)"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
-msgstr "জোরপূর্বক ১০-বিট RGB ইনপুট(&I)"
+msgstr "জোরপূর্বক ১০-বিট RGB ইনপুট (&I)"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
-msgstr "সম্পূর্ণ ফ্লৌটিং পয়েন্ট প্রক্রিয়াকরণ(&F)"
+msgstr "সম্পূর্ণ ফ্লৌটিং পয়েন্ট প্রক্রিয়াকরণ (&F)"
msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
msgid "&Half Floating Point Processing"
-msgstr "অর্ধেক ফ্লৌটিং পয়েন্ট প্রক্রিয়াকরণ(&H)"
+msgstr "অর্ধেক ফ্লৌটিং পয়েন্ট প্রক্রিয়াকরণ (&H)"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
@@ -250,23 +251,23 @@ msgstr "ডেস্কটপের উপাদান নিষ্ক্রি
msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time &Correction"
-msgstr "ফ্রেমের সময় সংশোধন সক্রিয়করণ(&C)"
+msgstr "ফ্রেমের সময় সংশোধন সক্রিয়করণ (&C)"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "রং ব্যবস্থাপনা(&C)"
+msgstr "রং ব্যবস্থাপনা (&C)"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
-msgstr "সক্রিয় করি(&E)"
+msgstr "সক্রিয় করি (&E)"
msgctxt "POPUP"
msgid "&Input Type"
-msgstr "ইনপুটের ধরন(&I)"
+msgstr "ইনপুটের ধরন (&I)"
msgctxt "ID_VIEW_CM_INPUT_AUTO"
msgid "&Auto-Detect"
-msgstr "স্বয়ংক্রিয়-সনাক্তকরণ(&A)"
+msgstr "স্বয়ংক্রিয়-সনাক্তকরণ (&A)"
msgctxt "ID_VIEW_CM_INPUT_HDTV"
msgid "&HDTV"
@@ -282,39 +283,39 @@ msgstr "SDTV &PAL"
msgctxt "POPUP"
msgid "Ambient &Light"
-msgstr "পরিবেষ্টিত উজ্জ্বলতা(&L)"
+msgstr "পরিবেষ্টিত উজ্জ্বলতা (&L)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
-msgstr "উজ্জ্বল (২.২ গামা)(&B)"
+msgstr "উজ্জ্বল (২.২ গামা) (&B)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
msgid "&Dim (2.35 Gamma)"
-msgstr "অনুজ্জ্বল (২.৩৫ গামা)(&D)"
+msgstr "অনুজ্জ্বল (২.৩৫ গামা) (&D)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
-msgstr "অন্ধকার (২.৪ গামা)(&A)"
+msgstr "অন্ধকার (২.৪ গামা) (&A)"
msgctxt "POPUP"
msgid "&Rendering Intent"
-msgstr "রেনডারিং লক্ষ্য(&R)"
+msgstr "রেনডারিং লক্ষ্য (&R)"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
-msgstr "দর্শনযোগ্য(&P)"
+msgstr "দর্শনযোগ্য (&P)"
msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
msgid "&Relative Colorimetric"
-msgstr "আপেক্ষিক কালারিমেট্রিক(&R)"
+msgstr "আপেক্ষিক কালারিমেট্রিক (&R)"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
-msgstr "পরিপৃক্ত(&S)"
+msgstr "পরিপৃক্ত (&S)"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
-msgstr "পরম কালারিমেট্রিক(&A)"
+msgstr "পরম কালারিমেট্রিক (&A)"
msgctxt "POPUP"
msgid "&VSync"
@@ -326,19 +327,19 @@ msgstr "&VSync"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "যথোপযোগী VSync(&A)"
+msgstr "নিখুঁত VSync (&A)"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "বিকল্প VSync(&L)"
+msgstr "বিকল্প VSync (&L)"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "VSync অফসেট হ্রাস করি(&D)"
+msgstr "VSync অফসেট হ্রাস করি (&D)"
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "VSync অফসেট বৃদ্ধি করি(&I)"
+msgstr "VSync অফসেট বৃদ্ধি করি (&I)"
msgctxt "POPUP"
msgid "&GPU Control"
@@ -346,51 +347,51 @@ msgstr "&GPU নিয়ন্ত্রণ"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "VSyncএর আগে GPU ফ্লাশ করণ(&B)"
+msgstr "VSyncএর আগে GPU ফ্লাশ করণ (&B)"
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
-msgstr "উপস্থাপনের পরে GPU ফ্লাশ করণ(&A)"
+msgstr "উপস্থাপনের পরে GPU ফ্লাশ করণ (&A)"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "ফ্লাশসমূহের জন্য অপেক্ষাকরণ(&W)"
+msgstr "ফ্লাশসমূহের জন্য অপেক্ষাকরণ (&W)"
msgctxt "POPUP"
msgid "R&eset"
-msgstr "পুনর্বিন্যাস করণ(&E)"
+msgstr "পুনর্বিন্যাস করণ (&E)"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "ডিফল্ট রেনডারার সেটিংসমূহে পুনর্বিন্যাস(&D)"
+msgstr "ডিফল্ট রেনডারার সেটিংসমূহে পুনর্বিন্যাস (&D)"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "সর্বোত্তম রেনডারার সেটিংসমূহে পুনর্বিন্যাস(&O)"
+msgstr "সর্বোত্তম রেনডারার সেটিংসমূহে পুনর্বিন্যাস (&O)"
msgctxt "POPUP"
msgid "Video &Frame"
-msgstr "ভিডিও ফ্রেম(&F)"
+msgstr "ভিডিও ফ্রেম (&F)"
msgctxt "ID_VIEW_VF_HALF"
msgid "&Half Size"
-msgstr "অর্ধেক সাইজ(&H)"
+msgstr "অর্ধেক সাইজ (&H)"
msgctxt "ID_VIEW_VF_NORMAL"
msgid "&Normal Size"
-msgstr "স্বাভাবিক সাইজ(&N)"
+msgstr "স্বাভাবিক সাইজ (&N)"
msgctxt "ID_VIEW_VF_DOUBLE"
msgid "&Double Size"
-msgstr "দ্বিগুণ সাইজ(&D)"
+msgstr "দ্বিগুণ সাইজ (&D)"
msgctxt "ID_VIEW_VF_STRETCH"
msgid "&Stretch To Window"
-msgstr "উইন্ডো পর্যন্ত বিস্তৃতি(&S)"
+msgstr "উইন্ডো পর্যন্ত বিস্তৃতি (&S)"
msgctxt "ID_VIEW_VF_FROMINSIDE"
msgid "Touch Window From &Inside"
-msgstr "উইন্ডোর ভিতরে বিস্তারণ(&I)"
+msgstr "উইন্ডোর ভিতরে বিস্তারণ (&I)"
msgctxt "ID_VIEW_VF_ZOOM1"
msgid "Zoom &1"
@@ -402,19 +403,15 @@ msgstr "জূম &2"
msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
-msgstr "উইন্ডোর বাইরে বিস্তারণ(&O)"
-
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "অ্যাসপেক্ট রেশিও রক্ষাকরণ(&K)"
+msgstr "উইন্ডোর বাইরে বিস্তারণ (&O)"
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "অ্যাসপেক্ট রেশিও ওভাররাইড করণ(&A)"
+msgid "&Aspect Ratio"
+msgstr "অ্যাসপেক্ট রেশিও (&A)"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "ডিফল্ট(&D)"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "ডিফল্ট (DAR) (&D)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,251 +433,279 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "বর্গাকার পিক্সেল (SAR) অনুমান করণ (&S)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
-msgstr "মনিটর/ডেস্কটপ AR বৈসাদৃশ্য ঠিককরণ(&C)"
+msgstr "মনিটর/ডেস্কটপ AR বৈসাদৃশ্য ঠিককরণ (&C)"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
-msgstr "প্যানঅ্যান্ডস্ক্যান(&N)"
+msgstr "প্যানঅ্যান্ডস্ক্যান (&N)"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
-msgstr "সাইজ বৃদ্ধি করি(&I)"
+msgstr "সাইজ বৃদ্ধি করি (&I)"
msgctxt "ID_VIEW_DECSIZE"
msgid "&Decrease Size"
-msgstr "সাইজ হ্রাস করি(&D)"
+msgstr "সাইজ হ্রাস করি (&D)"
msgctxt "ID_VIEW_INCWIDTH"
msgid "I&ncrease Width"
-msgstr "প্রস্থ বৃদ্ধি করি(&N)"
+msgstr "প্রস্থ বৃদ্ধি করি (&N)"
msgctxt "ID_VIEW_DECWIDTH"
msgid "D&ecrease Width"
-msgstr "প্রস্থ হ্রাস করি(&E)"
+msgstr "প্রস্থ হ্রাস করি (&E)"
msgctxt "ID_VIEW_INCHEIGHT"
msgid "In&crease Height"
-msgstr "উচ্চতা বৃদ্ধি করি(&C)"
+msgstr "উচ্চতা বৃদ্ধি করি (&C)"
msgctxt "ID_VIEW_DECHEIGHT"
msgid "Decre&ase Height"
-msgstr "উচ্চতা হ্রাস করি(&A)"
+msgstr "উচ্চতা হ্রাস করি (&A)"
msgctxt "ID_PANSCAN_MOVERIGHT"
msgid "Move &Right"
-msgstr "ডানে সরাই(&R)"
+msgstr "ডানে সরাই (&R)"
msgctxt "ID_PANSCAN_MOVELEFT"
msgid "Move &Left"
-msgstr "বামে সরাই(&L)"
+msgstr "বামে সরাই (&L)"
msgctxt "ID_PANSCAN_MOVEUP"
msgid "Move &Up"
-msgstr "উপরে সরাই(&U)"
+msgstr "উপরে সরাই (&U)"
msgctxt "ID_PANSCAN_MOVEDOWN"
msgid "Move &Down"
-msgstr "নিচে সরাই(&D)"
+msgstr "নিচে সরাই (&D)"
msgctxt "ID_PANSCAN_CENTER"
msgid "Cen&ter"
-msgstr "কেন্দ্রে সরাই(&T)"
+msgstr "কেন্দ্রে সরাই (&T)"
msgctxt "ID_VIEW_RESET"
msgid "Re&set"
-msgstr "পুনর্বিন্যাস করি(&S)"
+msgstr "পুনর্বিন্যাস করি (&S)"
msgctxt "POPUP"
msgid "On &Top"
-msgstr "উপরে অবস্থান(&T)"
+msgstr "উপরে অবস্থান (&T)"
msgctxt "ID_ONTOP_DEFAULT"
msgid "&Default"
-msgstr "ডিফল্ট(&D)"
+msgstr "ডিফল্ট (&D)"
msgctxt "ID_ONTOP_ALWAYS"
msgid "&Always"
-msgstr "সবসময়(&A)"
+msgstr "সবসময় (&A)"
msgctxt "ID_ONTOP_WHILEPLAYING"
msgid "While &Playing"
-msgstr "প্লে করার সময়(&P)"
+msgstr "প্লে করার সময় (&P)"
msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
msgid "While Playing &Video"
-msgstr "ভিডিও প্লে করার সময়(&V)"
+msgstr "ভিডিও প্লে করার সময় (&V)"
msgctxt "ID_VIEW_OPTIONS"
msgid "&Options..."
-msgstr "অপশনসমূহ...(&O)"
+msgstr "অপশনসমূহ... (&O)"
msgctxt "POPUP"
msgid "&Play"
-msgstr "প্লে(&P)"
+msgstr "প্লে (&P)"
msgctxt "ID_PLAY_PLAYPAUSE"
msgid "&Play/Pause"
-msgstr "প্লে/প'জ করি(&P)"
+msgstr "প্লে/প'জ করি (&P)"
msgctxt "ID_PLAY_STOP"
msgid "&Stop"
-msgstr "বন্ধ করি(&S)"
+msgstr "বন্ধ করি (&S)"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
-msgstr "ফ্রেমের পদক্ষেপ(&R)"
+msgid "Fra&me Step"
+msgstr "ফ্রেমের পদক্ষেপ (&R)"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "পুনরাবৃত্তি (&R)"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "অনন্তকাল ধরে (&O)"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "ফাইল (&F)"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "প্লেলিস্ট (&P)"
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
-msgstr "গতি হ্রাস করি(&D)"
+msgstr "গতি হ্রাস করি (&D)"
msgctxt "ID_PLAY_INCRATE"
msgid "&Increase Rate"
-msgstr "গতি বৃদ্ধি করি(&I)"
+msgstr "গতি বৃদ্ধি করি (&I)"
msgctxt "ID_PLAY_RESETRATE"
msgid "R&eset Rate"
-msgstr "গতি পুনর্বিন্যাস করি(&E)"
+msgstr "গতি পুনর্বিন্যাস করি (&E)"
msgctxt "ID_FILTERS"
msgid "&Filters"
-msgstr "ফিল্টারসমূহ(&F)"
+msgstr "ফিল্টারসমূহ (&F)"
msgctxt "ID_SHADERS"
msgid "S&haders"
-msgstr "শেইডারসমূহ(&H)"
+msgstr "শেইডারসমূহ (&H)"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "অডিও(&A)"
+msgid "&Audio Track"
+msgstr "অডিও ট্র্যাক (&A)"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "সাবটাইটেল(&B)"
+msgid "Su&btitle Track"
+msgstr "সাবটাইটেল ট্র্যাক (&B)"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "ভিডিও স্ট্রিম(&V)"
+msgid "Vide&o Track"
+msgstr "ভিডিও ট্র্যাক (&V)"
msgctxt "POPUP"
msgid "&Volume"
-msgstr "ভলিউম(&V)"
+msgstr "ভলিউম (&V)"
msgctxt "ID_VOLUME_UP"
msgid "&Up"
-msgstr "বাড়াই(&U)"
+msgstr "বাড়াই (&U)"
msgctxt "ID_VOLUME_DOWN"
msgid "&Down"
-msgstr "কমাই(&D)"
+msgstr "কমাই (&D)"
msgctxt "ID_VOLUME_MUTE"
msgid "&Mute"
-msgstr "শব্দহীন করি(&M)"
+msgstr "নিঃশব্দ করি (&M)"
msgctxt "POPUP"
msgid "Af&ter Playback"
-msgstr "প্লেব্যাকের পরে(&T)"
+msgstr "প্লেব্যাকের পরে (&T)"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "কোন কিছু করি না (&T)"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "ফোল্ডারের পরবর্তী ফাইলটি প্লে করি(N)"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "মনিটর বন্ধ করি (&M)"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
-msgstr "প্রোগ্রাম বন্ধ করি(&E)"
+msgstr "প্রোগ্রাম বন্ধ করি (&E)"
msgctxt "ID_AFTERPLAYBACK_STANDBY"
msgid "&Stand By"
-msgstr "কম্পিউটার স্লিপ করি(&S)"
+msgstr "কম্পিউটার স্লিপ করি (&S)"
msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
msgid "&Hibernate"
-msgstr "কম্পিউটার হাইবারনেট করি(&H)"
+msgstr "কম্পিউটার হাইবারনেট করি (&H)"
msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
msgid "Shut&down"
-msgstr "কম্পিউটার শাটডাউন করি(&D)"
+msgstr "কম্পিউটার শাটডাউন করি (&D)"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
-msgstr "কম্পিউটার লগ অফ করি(&O)"
+msgstr "কম্পিউটার লগ অফ করি (&O)"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "কম্পিউটার লক করি(&L)"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "মনিটর বন্ধ করি(&M)"
+msgstr "কম্পিউটার লক করি (&L)"
msgctxt "POPUP"
msgid "&Navigate"
-msgstr "ন্যাভিগেট(&N)"
+msgstr "ন্যাভিগেট (&N)"
msgctxt "ID_NAVIGATE_SKIPBACK"
msgid "&Previous"
-msgstr "পূর্ববর্তী(&P)"
+msgstr "পূর্ববর্তী (&P)"
msgctxt "ID_NAVIGATE_SKIPFORWARD"
msgid "&Next"
-msgstr "পরবর্তী(&N)"
+msgstr "পরবর্তী (&N)"
msgctxt "ID_NAVIGATE_GOTO"
msgid "&Go To..."
-msgstr "নির্দিষ্ট সময়/ফ্রেমে যাই...(&G)"
+msgstr "নির্দিষ্ট সময়/ফ্রেমে যাই... (&G)"
msgctxt "ID_NAVIGATE_TITLEMENU"
msgid "&Title Menu"
-msgstr "টাইটেল মেন্যু(&T)"
+msgstr "টাইটেল মেন্যু (&T)"
msgctxt "ID_NAVIGATE_ROOTMENU"
msgid "&Root Menu"
-msgstr "মূল মেন্যু(&R)"
+msgstr "মূল মেন্যু (&R)"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
-msgstr "সাবটাইটেল মেন্যু(&S)"
+msgstr "সাবটাইটেল মেন্যু (&S)"
msgctxt "ID_NAVIGATE_AUDIOMENU"
msgid "&Audio Menu"
-msgstr "অডিও মেন্যু(&A)"
+msgstr "অডিও মেন্যু (&A)"
msgctxt "ID_NAVIGATE_ANGLEMENU"
msgid "An&gle Menu"
-msgstr "ক্যামেরা অ্যাঙ্গেল মেন্যু(&G)"
+msgstr "ক্যামেরা অ্যাঙ্গেল মেন্যু (&G)"
msgctxt "ID_NAVIGATE_CHAPTERMENU"
msgid "&Chapter Menu"
-msgstr "পরিচ্ছেদ মেন্যু(&C)"
+msgstr "পরিচ্ছেদ মেন্যু (&C)"
msgctxt "ID_FAVORITES"
msgid "F&avorites"
-msgstr "পছন্দতালিকা(&A)"
+msgstr "পছন্দতালিকা (&A)"
msgctxt "POPUP"
msgid "&Help"
-msgstr "সাহায্য(&H)"
+msgstr "সহায়িকা (&H)"
msgctxt "ID_HELP_HOMEPAGE"
msgid "&Home Page"
-msgstr "হোম পেইজ(&H)"
+msgstr "হোম পেইজ (&H)"
msgctxt "ID_HELP_CHECKFORUPDATE"
msgid "Check for &updates"
-msgstr "হালনাগাদ অনুসন্ধান করি(&U)"
+msgstr "হালনাগাদ অনুসন্ধান করি (&U)"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
-msgstr "কমান্ড লাইনের নির্দেশনাসমূহ(&C)"
+msgstr "কমান্ড লাইনের নির্দেশনাসমূহ (&C)"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
-msgstr "টুলবারের ছবি ডাউনলোড করি(&T)"
+msgstr "টুলবারের ছবি ডাউনলোড করি (&T)"
msgctxt "ID_HELP_DONATE"
msgid "&Donate"
-msgstr "আর্থসহায়তা(&D)"
+msgstr "আর্থসহায়তা (&D)"
msgctxt "ID_HELP_ABOUT"
msgid "&About..."
-msgstr "MPC-HC বিষয়ক...(&A)"
+msgstr "MPC-HC বিষয়ক... (&A)"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.bn.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.bn.strings.po
index bcee11e47..23aa500aa 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.bn.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.bn.strings.po
@@ -1,16 +1,19 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Mehzad Galib, 2014
+# Mehedi Hussain, 2014
+# Mehzad Galib, 2015
# mehzad, 2014
-# mehzad, 2014
+# Mehzad Galib, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Bengali (http://www.transifex.com/projects/p/mpc-hc/language/bn/)\n"
+"Language-Team: Bengali (http://www.transifex.com/mpc-hc/mpc-hc/language/bn/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -61,10 +64,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "প্রোপার্টিস"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "ফাইল"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "ডিফল্ট ধরন(&D)"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "প্লেলিস্ট"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "ফাইলসমূহ"
@@ -115,7 +126,27 @@ msgstr "ধরনসমূহ"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "যদি রেনডার করার জন্য কোন নির্দিষ্ট ধরন নির্ধারণ করা না থাকে, তাহলে SSA/ASS সাবটাইটেলসমূহ ভিডিও ফ্রেম সাপেক্ষে রেনডার করা হবে যেখানে অন্যান্য সকল টেক্সট্‌ সাবটাইটেল উইন্ডো সাপেক্ষে রেনডার করা হবে।"
+msgstr "যদি রেনডার করার জন্য কোন নির্দিষ্ট ধরন নির্ধারণ করা না থাকে, তাহলে SSA/ASS সাবটাইটেলসমূহ ভিডিও ফ্রেমের সাপেক্ষে রেনডার করা হবে, যখন অন্যান্য সকল টেক্সট্‌ সাবটাইটেল উইন্ডো-এর সাপেক্ষে রেনডার করা হবে।"
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "পুনরাবৃত্তির ধরন: প্লেলিস্ট"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "পুনরাবৃত্তির ধরন: ফাইল"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "অনন্তকাল ধরে পুনরাবৃত্তি: চালু করি"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "অনন্তকাল ধরে পুনরাবৃত্তি: বন্ধ করি"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "অনন্তকাল ধরে পুনরাবৃত্তি"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
@@ -179,7 +210,7 @@ msgstr "খবর/সাম্প্রতিক ব্যাপার"
msgctxt "IDS_SPEED_UNIT_G"
msgid "GB/s"
-msgstr "GB/s"
+msgstr "গিগাবাইট/সেকন্ড"
msgctxt "IDS_FILE_FAV_ADDED"
msgid "File added to favorites"
@@ -263,7 +294,7 @@ msgstr "ক্যাপচার ডিভাইসটি চালনা কর
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
-msgstr "চালনা করা যাচ্ছে না, ইনপুট প্যারামিটারসমূহ সঠিক নয়"
+msgstr "চালনা করা যাচ্ছে না, ইনপুট প্যারামিটারসমূহ অগ্রহণযোগ্য"
msgctxt "IDS_EDIT_LIST_EDITOR"
msgid "Edit List Editor"
@@ -275,7 +306,7 @@ msgstr "প্রবেশকৃত সময়টি ফাইলের স্থ
msgctxt "IDS_MISSING_ICONS_LIB"
msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
-msgstr "আইকন লাইব্রেরি \"mpciconlib.dll\" খুঁজে পাওয়া যাচ্ছে না।\nপ্লেয়ারের ডিফল্ট আইকন সংশ্লিষ্ট ফাইলসমূহে ব্যবহার করা হবে।\n\"mpciconlib.dll\" পাওয়ার জন্যে, অনুগ্রহপূর্বক পুনরায় MPC-HC ইনস্টল করুন।"
+msgstr "আইকন লাইব্রেরি \"mpciconlib.dll\" খুঁজে পাওয়া যাচ্ছে না।\nপ্লেয়ারের ডিফল্ট আইকন সম্পৃক্ত ফাইলসমূহে ব্যবহার করা হবে।\n\"mpciconlib.dll\" পাওয়ার জন্যে, অনুগ্রহপূর্বক পুনরায় MPC-HC ইনস্টল করুন।"
msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
msgid "File"
@@ -326,16 +357,16 @@ msgid "On/Off"
msgstr "চালু/বন্ধ"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "fps থেকে"
+msgid "From (FPS)"
+msgstr "FPS থেকে"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "fpsএর দিকে"
+msgid "To (FPS)"
+msgstr "FPSএর দিকে"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
-msgstr "ডিসপ্লে মুড (Hz)"
+msgstr "ডিসপ্লে মোড (Hz)"
msgctxt "IDS_PPAGE_FS_DEFAULT"
msgid "Default"
@@ -465,6 +496,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "প্লেব্যাক::শেইডারসমূহ"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "উৎসসমূহ"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "বিবিধ"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "মিডিয়া ইন্‌ফো"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "প্লেব্যাক::ক্যাপচার"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "প্লেব্যাক::Sync Renderer সেটিংসমূহ"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "প্লেব্যাক::ফুলস্ক্রীন"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "আভ্যন্তরীণ ফিল্টারসমূহ::অডিও রেনডারার"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "অডিও পরিবর্তনকারী"
@@ -475,11 +534,11 @@ msgstr "আইকন লাইব্রেরির নতুন সংস্ক
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
-msgstr "আপনি কি আইকনসমূহ পুনরায় সংশ্লিষ্টকরণ করতে চান?"
+msgstr "আপনি কি আইকনসমূহ পুনরায় সম্পৃক্তকরণ করতে চান?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
-msgstr "আইকন লাইব্রেরি হালনাগাদকরণের পরে আইকনসমূহ ভুলভাবে প্রদর্শন করলে, এর মাধ্যমে তা ঠিক করা যাবে।\nফাইলের সংশ্লিষ্টতাসমূহ এর মাধ্যমে পরিবর্তিত হবে না, শুধু সংশ্লিষ্ট আইকনসমূহ নতুন করে বিন্যস্ত হবে।"
+msgstr "আইকন লাইব্রেরি হালনাগাদকরণের পরে আইকনসমূহ ভুলভাবে প্রদর্শন করলে, এর মাধ্যমে তা ঠিক করা যাবে।\nফাইলের সম্পৃক্ততাসমূহ এর মাধ্যমে পরিবর্তিত হবে না, শুধু সংশ্লিষ্ট আইকনসমূহ নতুন করে বিন্যস্ত হবে।"
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
@@ -489,18 +548,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (windowed)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (windowed)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderless)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (renderless)"
@@ -553,34 +604,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "প্লেয়ার::ওয়েব ইন্টারফেস"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "সাবটাইটেল::ডেটাবেস"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "উৎসসমূহ"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "বিবিধ"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "মিডিয়া ইন্‌ফো"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "প্লেব্যাক::ক্যাপচার"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "প্লেব্যাক::Sync Renderer সেটিংসমূহ"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "প্লেব্যাক::ফুলস্ক্রীন"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "বিস্তারিত"
@@ -595,23 +618,15 @@ msgstr "DirectShowর জন্য ডিফল্ট রেনডারার
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "এটা Windows 9x/me/2kএর ডিফল্ট রেনডারার। ভিডিও উইন্ডোর দৃষ্টিগ্রাহ্যতা আর আপনার ভিডিও কার্ডের ক্ষমতার উপর নির্ভর করে, এটা GDI, DirectDraw, Overlay রেনডারিং মুডসমূহে স্বয়ংক্রিয়ভাবে পরিবর্তন করবে।"
+msgstr "এটা Windows 9x/me/2kএর ডিফল্ট রেনডারার। ভিডিও উইন্ডোর দৃষ্টিগ্রাহ্যতা আর আপনার ভিডিও কার্ডের ক্ষমতার উপর নির্ভর করে, এটা GDI, DirectDraw, Overlay রেনডারিং মোডসমূহে স্বয়ংক্রিয়ভাবে পরিবর্তন করবে।"
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "সর্বদা overlayএ রেনডার করে। সাধারণত শুধু YUV ফরম্যাট গ্রহণযোগ্য, কিন্তু সেগুলো RGBতে কোন রঙের রূপান্তরণ ছাড়াই সরাসরি উপস্থাপন করে। এটা সবগুলো রেনডারিং পদ্ধতির মধ্যে সবচেয়ে দ্রুত এবং শুধুমাত্র এটাতেই আপনি tv-outএ ফুলস্ক্রীন ভিডিও মিররিং সক্রিয়করণ নিশ্চিতভাবেই করতে পারবেন।"
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Windows XPএর ডিফল্ট রেনডারার। খুবই সুস্থিত এবং Overlay mixer থেকে কিছুটা ধীরগতিসম্পন্ন। DirectDraw ব্যবহার করে আর যখন পারে Overlayএ চালনা করে।"
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "DirectX 9 ইনস্টল করা থাকলেই শুধুমাত্র ব্যবহার করা যাবে। VMR-7 (windowed)এর মত একই সক্ষমতা রয়েছে, কিন্তু এটা কখনোই Overlay রেনডারিং ব্যবহার করবে না আর সেজন্যই এটা VMR-7 (windowed) থেকে কিছুটা ধীরগতিসম্পন্ন।"
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "VMR-7 (windowed)এর মত একই রকমের, তবে সাথে সাবটাইটেল প্রদর্শনে MPC-HCএর অ্যালোকেটর-প্রেজেন্টার প্লাগইন ব্যবহার করা হবে। Overlay ভিডিও মিররিং কাজ করবে না। ডেস্কটপ কালার স্পেসের জন্য \"True Color\" নির্ধারণে পরামর্শ দেওয়া যাচ্ছে।"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "DirectX 9 ইনস্টল করা থাকলেই শুধুমাত্র ব্যবহার করা যাবে। খুবই সুস্থিত কিন্তু এটা কখনোই Overlay রেনডারিং ব্যবহার করবে না আর সেজন্যই এটা Overlay mixer থেকে কিছুটা ধীরগতিসম্পন্ন।"
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -622,8 +637,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "VMR-9 (renderless)এর মত একই রকমের, তবে একটি ট্রু টু-পাস বিকিউবিক সাইজপরিবর্তন পদ্ধতি ব্যবহার করে।"
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "ভিডিওর মত যেকোনো মিডিয়া টাইপের সাথেই সংযুক্ত হবে এবং আসন্ন নমুনাসমূহকে কোথাও পাঠাবে না। এটা তখনই ব্যবহার করুন যখন আপনার ভিডিও ডিসপ্লের কোনো প্রয়োজন নেই এবং আপনি cpuকে অযথা কাজ করা থেকে বিরত রাখতে চান।"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "ভিডিওর মত যেকোনো মিডিয়া টাইপের সাথেই সংযুক্ত হবে এবং আসন্ন নমুনাসমূহকে কোথাও পাঠাবে না। এটা তখনই ব্যবহার করুন যখন আপনার ভিডিও ডিসপ্লের কোনো প্রয়োজন নেই এবং আপনি CPUকে অযথা কাজ করা থেকে বিরত রাখতে চান।"
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -649,10 +664,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Realএর নিজস্ব রেনডারার। SMIL স্ক্রিপ্টসমুহ কাজ করবে, তবে পারস্পরিক ক্রিয়া-প্রতিক্রিয়ার সম্ভাবনা নেই। DirectDraw ব্যবহার করে আর যখন পারে Overlayএ চালনা করে।"
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Realএর ইঞ্জিন থেকে প্রাপ্ত আউটপুট DX7এর উপর ভিত্তি করা VMR-7 (renderless)এর অ্যালোকেটর-প্রেজেন্টার দ্বারা রেনডার করা হয়।"
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Realএর ইঞ্জিন থেকে প্রাপ্ত আউটপুট DX9এর উপর ভিত্তি করা VMR-9 (renderless)এর অ্যালোকেটর-প্রেজেন্টার দ্বারা রেনডার করা হয়।"
@@ -661,10 +672,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "QuickTimeএর নিজস্ব রেনডারার। কিছুটা ধীরগতিতে কাজ করে যখন ভিডিওর সাইজপরিবর্তন করা হয় বা ভিডিও ক্ষেত্র আংশিকভাবে অন্য উইন্ডো দ্বারা ঢেকে যায়। এটা যখন Overlay ব্যবহার করতে পারে না তখন GDIএ ফিরে আসতে পছন্দ করে।"
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "QuickTimeএর ইঞ্জিন থেকে প্রাপ্ত আউটপুট DX7এর উপর ভিত্তি করা VMR-7 (renderless)এর অ্যালোকেটর-প্রেজেন্টার দ্বারা রেনডার করা হয়।"
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "QuickTimeএর ইঞ্জিন থেকে প্রাপ্ত আউটপুট DX9এর উপর ভিত্তি করা VMR-9 (renderless)এর অ্যালোকেটর-প্রেজেন্টার দ্বারা রেনডার করা হয়।"
@@ -673,22 +680,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "ভিডিও উপরিতলটি একটি সাধারণ বাইরেরস্ক্রীন উপরিতল হিসেবে নির্দেশিত হবে।"
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC অডিও রেনডারারটি অকেজো হয়ে পরেছে, এটা ব্যবহার করবেন না।"
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - যান্ত্রিক-ত্রুটি(বাগ) বিষয়ক প্রতিবেদন পেশ করা হচ্ছে"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC এইমাত্র চালনা বন্ধ হয়ে গেল কিন্তু এই নির্মাণটি ডিবাগ তথ্যাদি ছাড়া সঙ্কলন করা হয়েছে।\nআপনি যদি এই যান্ত্রিক-ত্রুটিটি সম্পর্কে প্রতিবেদন পেশ করতে চান, তাহলে প্রথমে একটি আনুষ্ঠানিক নির্মাণ চেষ্টা করে দেখুন।\n\nআপনি কি এখনই ডাউনলোড ওয়েবপেইজটিতে যেতে চান? "
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "সাধারণ বাইরেরস্ক্রীন মসৃণ উপরিতল"
@@ -703,7 +698,7 @@ msgstr "ত্রিমাত্রিক উপরিতলসমূহ (পর
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
-msgstr "সবচেয়ে নিকটবর্তী প্রতিবেশী"
+msgstr "সবচেয়ে নিকটবর্তী সাইজপরিবর্তন"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
msgid "Bilinear"
@@ -741,9 +736,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (uncompressed)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "আভ্যন্তরীণ অডিও রেনডারার"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -755,11 +750,15 @@ msgstr "MIMEএর ধরন"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr "কোন সংযুক্ত উৎস ব্রাউজারে দেখার জন্য ওয়েব ইন্টারফেস সক্রিয় করতে হবে।\n\nযদি শুধুমাত্র তথ্যাদি সেইভ করতে চান তবে \"সেইভ করতে পারি\" বাটনটি ব্যবহার করুন।"
+msgstr "কোন সংযুক্তি উৎস ব্রাউজারে দেখার জন্য ওয়েব ইন্টারফেস সক্রিয় করতে হবে।\n\nযদি শুধুমাত্র তথ্যাদি সেইভ করতে চান তবে \"সেইভ করতে পারি\" বাটনটি ব্যবহার করুন।"
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "সাবটাইটেল ডাউনলোড করি"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "সাবটাইটেল ডাউনলোড করি..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "সাবটাইটেল আপলোড করি..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -771,7 +770,7 @@ msgstr "স্বয়ংক্রিয়"
msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
msgid "There are no customized keys to export."
-msgstr "এক্সপোর্ট করার জন্য কোনো নির্ধারণকৃত কীসমূহ পাওয়া যায়নি।"
+msgstr "এক্সপোর্ট করার জন্য কোনো ব্যক্তি-নির্ধারিত কীসমূহ পাওয়া যায়নি।"
msgctxt "IDS_RFS_NO_FILES"
msgid "No media files found in the archive"
@@ -790,7 +789,7 @@ msgid "Couldn't find all archive volumes"
msgstr "সবগুলো আর্কাইভ খন্ড পাওয়া যাচ্ছে না"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "ভিডিও উপরিতলটি একটি টেক্সচার হিসেবে নির্দেশিত হবে কিন্তু তারপরও দ্বিমাত্রিক ফাংশনসমূহ সেটা পিছনবাফারে কপি এবং বিস্তৃতি করণে ব্যবহৃত হবে। এমন ভিডিও কার্ড লাগবে যেটা 32bit, RGBA, দুইয়ের-শক্তিতে-নয় এমন সাইজকৃত টেক্সচারসমূহ এবং অন্তত ভিডিওর রেজ্যুলূশন নির্দেশিত করতে পারে।"
msgctxt "IDC_TEXTURESURF3D"
@@ -803,7 +802,7 @@ msgstr "যদি পিক্সেল শেইডার 2.0 সমর্থ
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
-msgstr "VMR-9 (renderless)কে মিক্সার মুডে নিয়ে যায়, এর মানে হল এটার প্রোপার্টি পেইজের বেশিরভাগ কন্ট্রোলসমূহই কাজ করবে এবং এটা ফ্রেমসমূহ রেনডার করার জন্য একটি আলাদা ওয়ার্কার থ্রেড ব্যবহার করবে।"
+msgstr "VMR-9 (renderless)কে মিক্সার মোডে নিয়ে যায়, এর মানে হল এটার প্রোপার্টি পেইজের বেশিরভাগ কন্ট্রোলসমূহই কাজ করবে এবং এটা ফ্রেমসমূহ রেনডার করার জন্য একটি আলাদা ওয়ার্কার থ্রেড ব্যবহার করবে।"
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
@@ -817,6 +816,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "D3Dএ নির্মাণকৃত ডিফল্ট VSyncকে বাইপাস করে স্ক্রীন ছিঁড়ে যাওয়া হ্রাস করে।"
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "টিউনার স্ক্যানকরণ"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "সাবটাইটেল লোড করা হয়নি অথবা সমর্থন করে না এমন রেনডারার।"
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "লোড হওয়ার সময় দ্রুত করার জন্যে সংকলিত শেইডারসমূহ স্থানীয় AppDataতে সংরক্ষণ।"
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "VTS_xx_x.vob ফাইলসমূহ সম্পূর্ণরূপে লোড করার জন্যে VTS_xx_0.ifo ফাইলসমূহ চালনা করে"
@@ -839,27 +850,27 @@ msgstr "ন্যাভিগেশন বার নিয়ন্ত্রণ"
msgctxt "IDS_AG_VSYNCACCURATE"
msgid "Accurate VSync"
-msgstr "যথোপযোগী VSync"
+msgstr "নিখুঁত VSync"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr "রেনডার করার জন্য কোন নির্দিষ্ট ধরন নির্ধারণ করা না থাকলে, তা ডিফল্ট ধরন থেকে গ্রহণ করা হবে।"
+msgstr "রেনডার করার জন্য কোন নির্দিষ্ট ধরন নির্ধারণ করা না থাকলে, তা ডিফল্ট ধরনটি থেকে গ্রহণ করা হবে।"
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
-msgstr "সাবটাইটেলের অ্যানিমেশন অননুমোদন। এই অপশনটি সক্রিয়করণে CPUর ব্যবহার কম হবে। সাবটাইটেল বার বার চমকাতে দেখলে এ অপশনটি ব্যবহার করতে পারেন।"
+msgstr "সাবটাইটেলের অ্যানিমেশন অননুমোদন। এই অপশনটি সক্রিয়করণে CPUর ব্যবহার কম হবে। সাবটাইটেল বারবার চমকাতে দেখলে এ অপশনটি ব্যবহার করতে পারেন।"
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr "সাধারণভাবে, বাফারকৃত সাবপিকচারসমূহের সংখ্যা বৃদ্ধি করলে তা GPUতে উচ্চমাত্রায় ভিডিও RAM ব্যবহারের বিনিময়ে রেনডারিং কার্য-সম্পাদনের উন্নতিসাধন করে।"
+msgstr "সাধারণভাবে, বাফারকৃত সাবপিকচারসমূহের সংখ্যা বৃদ্ধি করলে তা উচ্চমাত্রায় ভিডিও RAM ব্যবহারের বিনিময়ে GPUতে রেনডারিং কার্য-সম্পাদনের উন্নতিসাধন করে।"
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
-msgstr "এই বাটনটি ক্লিক করার পরে, নির্ধারণকৃত ধরন শ্রেণীর ফাইলসমূহ MPC-HCএর সাথে সংশ্লিষ্ট হবে। নতুন করে এক্সটেনশন যোগ করলে নির্ধারণ টিক-চিহ্নটি ছাই রং ধারণ করবে, তাই অপশন ডায়লগ বক্স বন্ধ করার পূর্বে সেটা পুনরায় নির্ধারণ করতে ভুলবেন না!"
+msgstr "এই বাটনটি ক্লিক করার পরে, নির্ধারণকৃত ধরন শ্রেণীর ফাইলসমূহ MPC-HCএর সাথে সম্পৃক্ত হবে। নতুন করে এক্সটেনশন যোগ করলে নির্ধারণ টিক-চিহ্নটি ছাই রং ধারণ করবে, তাই অপশন ডায়লগ বক্স বন্ধ করার পূর্বে সেটা পুনরায় নির্ধারণ করতে ভুলবেন না!"
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr "এই অপশনটি নিষ্ক্রিয়করণে সাবটাইটেলের বার বার চমকানো বন্ধ হবে কিন্তু এর জন্য ভিডিও রেনডারার কিছু ভিডিও ফ্রেম স্কিপ করতে পারে।"
+msgstr "এই অপশনটি নিষ্ক্রিয়করণে সাবটাইটেলের বারবার চমকানো বন্ধ হবে কিন্তু এর জন্য ভিডিও রেনডারার কিছু ভিডিও ফ্রেমসমূহ বাদ দিয়ে যেতে পারে।"
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -875,7 +886,7 @@ msgstr "বন্ধ করি\nবন্ধ করি"
msgctxt "ID_PLAY_FRAMESTEP"
msgid "Step\nStep"
-msgstr "পদক্ষেপ করি\nপদক্ষেপ করি"
+msgstr "পদক্ষেপ গ্রহন করি\nপদক্ষেপ গ্রহন করি"
msgctxt "ID_PLAY_DECRATE"
msgid "Decrease speed\nDecrease speed"
@@ -887,11 +898,11 @@ msgstr "গতি বৃদ্ধি করি\nগতি বৃদ্ধি ক
msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
-msgstr "শব্দহীন করি"
+msgstr "নিঃশব্দ করি"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
-msgstr "শব্দহীনতা বন্ধ করি"
+msgstr "নিঃশব্দতা বন্ধ করি"
msgctxt "ID_VOLUME_MUTE_DISABLED"
msgid "No audio"
@@ -954,11 +965,11 @@ msgid "&Organize Favorites..."
msgstr "পছন্দেরতালিকা বিন্যস্ত করি...(&O)"
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "এলোমেলো করি"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "ফাইলটির অবস্থানে যাই"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1042,7 +1053,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f এ জূম করি"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "ফুলস্ক্রীনে লুকিয়ে যাওয়া সক্রিয়করণ"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1230,8 +1241,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "ধারণকৃত ফোল্ডার যোগ করি"
+msgid "Add containing &folder"
+msgstr "ধারণকারী ফোল্ডার যোগ করি"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1251,27 +1262,27 @@ msgstr "ফিল্টারসমূহের তালিকা ক্লি
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
-msgstr "সার্ভার এর বিস্তারিত বিবরণসমূহ প্রবেশ করুন"
+msgstr "সার্ভার এর প্রামাণ্য বিবরণসমূহ প্রবেশ করুন"
msgctxt "IDS_CREDENTIALS_CONNECT"
msgid "Enter your credentials to connect"
-msgstr "সংযুক্ত হতে আপনার বিস্তারিত বিবরণসমূহ প্রবেশ করুন"
+msgstr "সংযুক্ত হতে আপনার প্রামাণ্য বিবরণসমূহ প্রবেশ করুন"
msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
msgid "Save custom style"
-msgstr "নির্ধারণকৃত ধরনটি সেইভ করি"
+msgstr "ব্যক্তি-নির্ধারিত ধরনটি সেইভ করি"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
-msgstr "শিক্ষা/বিজ্ঞান/তথ্যমূলক বিষয়সমূহ"
+msgstr "শিক্ষা/বিজ্ঞান/বাস্তববাদী আলোচ্য বিষয়সমূহ"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
-msgstr "কন্ট্রোল এবং প্যানেলসমূহ উইন্ডো'ড মুডেও লুকিয়ে যাওয়া সক্রিয়করণ।"
+msgstr "উইন্ডো'ড মোডেও কন্ট্রোল এবং প্যানেলসমূহ লুকিয়ে যাওয়া সক্রিয়করণ।"
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr "আভ্যন্তরীণ সাবটাইটেল ফিল্টার ব্যবহার হতে থাকলে বাহিরস্থ সাবটাইটেল রেনডারার লোড করা বিরত করণ।"
+msgstr "আভ্যন্তরীণ সাবটাইটেল ফিল্টার ব্যবহার হতে থাকলে বাহিরস্থ সাবটাইটেল রেনডারার লোড করা প্রতিরোধ করণ।"
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
@@ -1283,7 +1294,7 @@ msgstr "মান"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr "\"সাম্প্রতিক ফাইলসমূহ\" মেন্যুতে সর্বোচ্চ যতটি ফাইল প্রদর্শন করা হবে এবং যেগুলোর অবস্থানকাল সম্ভাব্যরূপে স্মৃতিতে সংরক্ষিত হবে।"
+msgstr "\"সাম্প্রতিক ফাইলসমূহ\" মেন্যুতে সর্বোচ্চ যতটি ফাইল প্রদর্শন করা হবে এবং সম্ভাব্য যেগুলোর অবস্থানকাল স্মৃতিতে সংরক্ষিত হবে।"
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
@@ -1295,11 +1306,11 @@ msgstr "অডিও ফাইলসমূহের জন্যও ফাইল
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
-msgstr "কিছুই না করা"
+msgstr "কোন কিছু করি না"
msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
msgid "Play next file in the folder"
-msgstr "ফোল্ডারে থাকা পরবর্তী ফাইলটি চালনা"
+msgstr "ফোল্ডারের পরবর্তী ফাইলটি প্লে করি"
msgctxt "IDS_AFTER_PLAYBACK_REWIND"
msgid "Rewind current file"
@@ -1327,15 +1338,91 @@ msgstr "বৈশিষ্ট্যগুণ (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
-msgstr ""
+msgstr "শুধুমাত্র অডিও মোডে লোডকৃত কভার-আর্টের সর্বোচ্চ সাইজ (NxNপিক্সেল)"
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr ""
+msgstr "সংশ্লিষ্ট হট্‌কী (%s/%s) ব্যবহারে সাবটাইটেলের বিলম্বন, এই মান দ্বারা প্রত্যেক বার হ্রাস/বৃদ্ধি পাবে।"
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<নির্ধারণ করা হয় নি>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "পর্যবেক্ষণ করি"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "উপরে উঠাই"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "নিচে নামাই"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "LCN অনুযায়ী সাজাই"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "সবগুলো অপসারণ করি"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "আপনি কি নিশ্চিত যে তালিকা থেকে সবগুলো চ্যানেল অপসারণ করতে চান?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "কোন তথ্যাদি পাওয়া যায় নি"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "অনুগ্রহপূর্বক অপেক্ষা করুন, বিশ্লেষণ প্রক্রিয়া চলমান রয়েছে..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "ফাইলে নিবন্ধন করা সক্রিয়করণ।(বন্ধ করে পুনরায় চালনা করতে হবে)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "অবশিষ্ট সময়"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "নিখুঁতভাবে"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "প্লেব্যাকের পরে: চলতি ফাইলটি পুনরায় চালনা"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "প্লেব্যাকের পরে: বন্ধ করি"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "ইনিশিয়ালাইজেশন প্রক্রিয়া চলার সময় MPC-HC একটি সমস্যার মুখোমুখি হয়েছে। আপনার সহযোগিতার মাধ্যমে বিষয়টি আমরা সমাধান করলেও করতে পারি।\n\nআপনি কি এই বিষয়ে প্রতিবেদন পেশ করতে চান?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "অডিও আগে আসলে একটি ধনাত্মক মান প্রবেশ করান, পরে আসলে একটি ঋণাত্মক মান প্রবেশ করান।"
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "এই মুহূর্তে প্রাকদর্শন নিষ্ক্রিয় অবস্থায় রয়েছে। আপনি সেটি MPC-HCএর অপশনসমূহ থেকে সক্রিয় করতে পারেন।"
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "এই অপশনটির মাধ্যমে বহিরাবস্থান থেকে মিডিয়া ফাইল প্রাকদর্শন করা যাবে। শুধুমাত্র একটি নিরাপদ ব্যক্তিগত নেটওয়ার্কের ক্ষেত্রেই এটি ব্যবহার করুন।\n\nআপনি কি নিশ্চিত যে এই অপশনটি সক্রিয় করতে চান?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "আভ্যন্তরীণ সাবটাইটেল রেনডারার"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1357,13 +1444,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "ছবি সফলভাবে সেইভ হয়েছে"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "সাবটাইটেল লোড করি"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "সাবটাইটেল লোড করি..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "সাবটাইটেল সেইভ করি"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "সাবটাইটেল সেইভ করি..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,11 +1473,11 @@ msgid "Stop"
msgstr "বন্ধ করি"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "ফ্রেমের পদক্ষেপ"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "পিছনের দিকে ফ্রেমের পদক্ষেপ"
msgctxt "IDS_AG_GO_TO"
@@ -1439,11 +1526,11 @@ msgstr "প্রতিলিপি সেইভ করি"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
-msgstr "সর্বশেষ কীফ্রেম"
+msgstr "আগের কীফ্রেমে"
msgctxt "IDS_FASTSEEK_NEAREST"
msgid "Nearest keyframe"
-msgstr "নিকটবর্তী কীফ্রেম"
+msgstr "নিকটবর্তী কীফ্রেমে"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
@@ -1490,8 +1577,8 @@ msgid "Thumbnails saved successfully"
msgstr "থাম্ব্‌নেইলসমূহ সফলভাবে সেইভ হয়েছে"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "ভিডিও স্ট্রিম(&V)"
+msgid "Vide&o Track"
+msgstr "ভিডিও ট্র্যাক(&V)"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1503,11 +1590,11 @@ msgstr "সেটিংসমূহ পুনর্বিন্যাস কর
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "আপনি কি নিশ্চিত যে MPC-HCকে ডিফল্ট সেটিংসমূহে ফিরিয়ে আনতে চান?\nএই বিষয়ে সতর্ক করা হচ্ছে যে আপনার বর্তমানে থাকা সকল সেটিংসমূহ হারিয়ে যাবে!"
+msgstr "আপনি কি নিশ্চিত যে MPC-HCকে ডিফল্ট সেটিংসমূহে পূর্বাবস্থায় ফিরিয়ে আনতে চান?\nএই বিষয়ে সতর্ক করা হচ্ছে যে আপনার বর্তমানে থাকা সকল সেটিংসমূহ হারিয়ে যাবে!"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr "অনুগ্রহপূর্বক অন্যান্য সকল চালনাকৃত MPC-HC বন্ধ করুন যাতে MPC-HCকে ডিফল্ট সেটিংসমূহে ফিরিয়ে আনা যায়।"
+msgstr "অনুগ্রহপূর্বক অন্যান্য সকল চালনাকৃত MPC-HC বন্ধ করুন যাতে MPC-HCকে ডিফল্ট সেটিংসমূহে পূর্বাবস্থায় ফিরিয়ে আনা যায়।"
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
@@ -1538,11 +1625,11 @@ msgid "Reset Rate"
msgstr "গতি পুনর্বিন্যাস করি"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "অডিও বিলম্বন +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "অডিও বিলম্বন -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1613,14 +1700,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "সাবটাইটেলের অবস্থান ডানে সরাই"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "ডিসপ্লে বৃত্তান্ত"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "শুরুতে লাফিয়ে যাই"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: ফাইলের নাম প্রদর্শন"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "DVD চালনা করি"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "BD চালনা করি"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: রেনডারারের বৃত্তান্ত প্রদর্শন"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: রেনডারারের পরিসংখ্যান পুনর্বিন্যাসকরণ"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "সাবটাইটেল::অন্যান্য"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "বর্ডারসমূহ লুকিয়ে রাখি(&B)"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "শুধুমাত্র ফ্রেম"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "ক্যাপশন আর মেন্যু প্রদর্শন(&W)"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "মেন্যু লুকিয়ে রাখি(&M)"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "অ্যাডভান্সড্‌"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "ন্যূনতম পরিবেশন"
@@ -1686,20 +1813,20 @@ msgid "PnS Dec Height"
msgstr "প্যানঅ্যান্ডস্ক্যান উচ্চতা হ্রাস করি"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "সাবটাইটেল(সমূহ) ডাউনলোড হচ্ছে, অনুগ্রহপূর্বক অপেক্ষা করুন।"
+msgid "Downloading [%s] \"%s\""
+msgstr "ডাউনলোড করা হচ্ছে [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
-msgstr "তালিকা পার্সিং করা হচ্ছে..."
+msgstr "তালিকাটি সমন্বয় সাধিত হচ্ছে..."
msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
msgid "No subtitles found."
msgstr "কোনো সাবটাইটেল পাওয়া যায় নি।"
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d টি সাবটাইটেল(সমূহ) পাওয়া গেছে"
+msgid "%d subtitle(s) available."
+msgstr "%d টি সাবটাইটেল(সমূহ) পাওয়া গেছে"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1743,7 +1870,7 @@ msgstr "অতিবাহিত আর অবশিষ্ট সময় প্
msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
msgid "Invalid delay"
-msgstr "বিলম্বনটি সঠিক নয়"
+msgstr "বিলম্বন সময়টি অগ্রহণযোগ্য"
msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
msgid "Please enter a number between 1 and 365."
@@ -1795,7 +1922,7 @@ msgstr "ভলিউম কমাই"
msgctxt "IDS_AG_VOLUME_MUTE"
msgid "Volume Mute"
-msgstr "ভলিউম শব্দহীন করি"
+msgstr "ভলিউম নিঃশব্দ করি"
msgctxt "IDS_MPLAYERC_63"
msgid "DVD Title Menu"
@@ -1854,12 +1981,12 @@ msgid "Boss key"
msgstr "বস্‌ কী"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "প্লেয়ার মেন্যু (ছোট)"
+msgid "Player Menu"
+msgstr "প্লেয়ার মেন্যু"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "প্লেয়ার মেন্যু (বড়ো)"
+msgid "Player Menu (full)"
+msgstr "প্লেয়ার মেন্যু (সম্পূর্ণ)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1870,20 +1997,20 @@ msgid "Options"
msgstr "অপশনসমূহ"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "পরবর্তী অডিও"
+msgid "Next Audio Track"
+msgstr "পরবর্তী অডিও ট্র্যাক"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "পূর্ববর্তী অডিও"
+msgid "Prev Audio Track"
+msgstr "পূর্ববর্তী অডিও ট্র্যাক"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "পরবর্তী সাবটাইটেল"
+msgid "Next Subtitle Track"
+msgstr "পরবর্তী সাবটাইটেল ট্র্যাক"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "পূর্ববর্তী সাবটাইটেল"
+msgid "Prev Subtitle Track"
+msgstr "পূর্ববর্তী সাবটাইটেল ট্র্যাক"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1893,22 +2020,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "সাবটাইটেল পুনরায় লোড করি"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "পরবর্তী অডিও (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "পূর্ববর্তী অডিও (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "পরবর্তী সাবটাইটেল (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "পূর্ববর্তী সাবটাইটেল (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "পরবর্তী ক্যামেরা অ্যাঙ্গেল (DVD)"
@@ -1918,28 +2029,28 @@ msgid "Prev Angle (DVD)"
msgstr "পূর্ববর্তী ক্যামেরা অ্যাঙ্গেল (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "পরবর্তী অডিও (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "পরবর্তী অডিও ট্র্যাক (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "পূর্ববর্তী অডিও (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "পূর্ববর্তী অডিও ট্র্যাক (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "পরবর্তী সাবটাইটেল (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "পরবর্তী সাবটাইটেল ট্র্যাক (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "পূর্ববর্তী সাবটাইটেল (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "পূর্ববর্তী সাবটাইটেল ট্র্যাক (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "সাবটাইটেল চালু/বন্ধ করি (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "অবশিষ্ট সময়"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: চলতি সময় প্রদর্শন"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2076,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "এনক্রিপ্টকৃত"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "হ্যাঁ"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "না"
@@ -2015,7 +2126,7 @@ msgstr "আঁকা হয়েছে: %d, বাদ গেছে: %d"
msgctxt "IDS_AG_FRAMES"
msgid "Frames"
-msgstr "ফ্রেমসমূহ"
+msgstr "ফ্রেম"
msgctxt "IDS_AG_BUFFERS"
msgid "Buffers"
@@ -2026,12 +2137,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "ভলিউম: %02lu/%02lu, টাইটেল: %02lu/%02lu, পরিচ্ছেদ: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "ক্যামেরা অ্যাঙ্গেল: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2043,7 +2154,7 @@ msgstr "MPC-HC দ্বারা প্লে করি"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr ""
+msgstr "ফাইলের ধরনসমূহের সম্পৃক্ততা পরিবর্তনের জন্য যথেষ্ট অধিকার MPC-HCএর নেই। অনুগ্রহপূর্বক \"Run as administrator\" বাটনে ক্লিক করুন।"
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
@@ -2071,15 +2182,15 @@ msgstr "DVD: কপি-প্রোটেক্ট ব্যর্থ হয়ে
msgctxt "IDS_MAINFRM_18"
msgid "DVD: Invalid DVD 1.x Disc"
-msgstr "DVD: DVD 1.x ডিস্কটি সঠিক নয়"
+msgstr "DVD: DVD 1.x ডিস্কটি অগ্রহণযোগ্য"
msgctxt "IDS_MAINFRM_19"
msgid "DVD: Invalid Disc Region"
-msgstr "DVD: ডিস্কের অঞ্চলগত বিন্যাস সঠিক নয়"
+msgstr "DVD: ডিস্কের অঞ্চলগত বিন্যাসটি অগ্রহণযোগ্য"
msgctxt "IDS_MAINFRM_20"
msgid "DVD: Low Parental Level"
-msgstr "DVD: নিচু অভিভাবকীয় মূল্যায়ন"
+msgstr "DVD: নিম্নমানের অভিভাবকীয় মূল্যায়ন"
msgctxt "IDS_MAINFRM_21"
msgid "DVD: Macrovision Fail"
@@ -2095,7 +2206,7 @@ msgstr "DVD: অসঙ্গতিপূর্ণ ডিস্ক এবং ড
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "এই অপশনটি স্ক্রীন ছিঁড়ে যাওয়া এড়ানোর জন্যই তৈরি করা হয়েছে। তবে, এটা MPC-HCকে প্লেব্যাকের সময় কন্টেক্সট্‌ মেন্যু এবং যেকোনো ডায়লগ বক্স প্রদর্শন করা থেকেও বিরত রাখে।\n\nআপনি কি সত্যিই এই অপশনটি সক্রিয় করতে চান?"
+msgstr "এই অপশনটি স্ক্রীন ছিঁড়ে যাওয়া এড়ানোর জন্যই তৈরি করা হয়েছে। তবে, এটা MPC-HCকে প্লেব্যাকের সময় কন্টেক্সট্‌ মেন্যু এবং যেকোনো ডায়লগ বক্স প্রদর্শন করা থেকেও বিরত রাখে।\n\nআপনি কি নিশ্চিত যে এই অপশনটি সক্রিয় করতে চান?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
@@ -2121,14 +2232,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "ছবির প্রস্থ"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URLটি সঠিক বলেই প্রতীয়মান হচ্ছে!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "প্রোটোকল সংস্করণসমূহ মিলে নাই, অনুগ্রহপূর্বক আপনার প্লেয়ারটি হালনাগাদ করুন কিংবা ভিন্ন ঠিকানা নির্ধারণ করুন।"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "অ্যাসপেক্ট রেশিও"
@@ -2138,19 +2241,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", মোট: %ld, বাদ গেছে: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", সাইজ: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", সাইজ: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", খালি রয়েছে: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", খালি রয়েছে: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2207,7 +2310,7 @@ msgstr "ম্যামরি শেষ, আরো কিছু ম্যাম
msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
-msgstr "ছবির ফাইলের ধরনটি সঠিক নয়, %d bpp dibs থেকে বেশিতে থাম্ব্‌নেইলসমূহ তৈরি করা যাচ্ছে না।"
+msgstr "ছবির ফাইলের ধরনটি অগ্রহণযোগ্য, %d bpp dibs থেকে বেশিতে থাম্ব্‌নেইলসমূহ তৈরি করা যাচ্ছে না।"
msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
msgid "File Size: %s (%s bytes)\\N"
@@ -2219,11 +2322,11 @@ msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}ফাইলের সাই
msgctxt "IDS_THUMBNAIL_TOO_SMALL"
msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
-msgstr "থাম্ব্‌নেইলসমূহ আকারে খুব ছোট হবে, ফাইলটি তৈরি করা যাচ্ছে না।\n\nথাম্ব্‌নেইলসমূহের সংখ্যা কমিয়ে অথবা সম্পূর্ণ সাইজ বাড়িয়ে চেষ্টা করুন।"
+msgstr "থাম্ব্‌নেইলসমূহ আকারে খুব ছোট হবে, ফাইলটি তৈরি করা যাচ্ছে না।\n\nথাম্ব্‌নেইলসমূহের সংখ্যা কমিয়ে অথবা সম্পূর্ণ সাইজটি বাড়িয়ে চেষ্টা করুন।"
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "সাবটাইটেল লোড করার জন্য আপনাকে ভিডিও রেনডারার ধরন পরিবর্তন করতে হবে এবং পুনরায় ফাইলটি চালনা করতে হবে।\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR অথবা Haali\n- RealMedia: RealMediaর জন্য বিশেষ রেনডারার, অথবা DirectShow দিয়ে চালনা করুন\n- QuickTime: QuickTimeএর জন্য DX7 অথবা DX9 রেনডারার\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "সাবটাইটেল লোড করার জন্য আপনাকে ভিডিও রেনডারার ধরন পরিবর্তন করতে হবে এবং পুনরায় ফাইলটি চালনা করতে হবে।\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR অথবা Haali\n- RealMedia: RealMediaর জন্য বিশেষ রেনডারার, অথবা DirectShow দিয়ে চালনা করুন\n- QuickTime: QuickTimeএর জন্য DX7 অথবা DX9 রেনডারার\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2234,11 +2337,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "অ্যাসপেক্ট রেশিও: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "অ্যাসপেক্ট রেশিও: ডিফল্ট"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "অ্যাসপেক্ট রেশিও: ডিফল্ট (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "অডিও বিলম্বন: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2247,10 +2350,10 @@ msgstr "পরিচ্ছেদ %d"
msgctxt "IDS_AG_OUT_OF_MEMORY"
msgid "Out of memory"
-msgstr "ম্যামরি শেষ"
+msgstr "পর্যাপ্ত ম্যামরি নেই"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
msgstr "সমস্যা: IEএর জন্য Flash প্লেয়ার প্রয়োজন"
msgctxt "IDS_MAINFRM_78"
@@ -2263,20 +2366,16 @@ msgstr "ফিল্টার গ্রাফের অবজেক্ট তৈ
msgctxt "IDS_MAINFRM_81"
msgid "Invalid argument"
-msgstr "আর্গুমেন্টটি সঠিক নয়"
+msgstr "আর্গুমেন্টটি অগ্রহণযোগ্য"
msgctxt "IDS_MAINFRM_82"
msgid "Opening aborted"
-msgstr "চালনা বন্ধ করা হয়েছে"
+msgstr "চালনা রহিত করা হয়েছে"
msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "ফাইলটি রেনডার করতে ব্যর্থ হয়েছে"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URLটি অকার্যকর, সেটাতে সাবটাইটেল ডেটাবেস খুঁজে পাওয়া যায় নি!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "পরিচ্ছেদ: "
@@ -2297,14 +2396,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "চলতি"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC অপ্রত্যাশিতভাবে বন্ধ হয়ে গেয়ে ছিল। এই সমস্যাটি সমাধানে আমাদের সাহায্য করতে চাইলে, অনুগ্রহপূর্বক এই ফাইলটি \"%s\" আমাদের বাগ ট্র্যাকারএ পাঠিয়ে দিন।\n\nআপনি কি এই মুহূর্তেই মিনিডাম্প ধারণকারী ফোল্ডারটি খুলতে চান এবং বাগ ট্র্যাকারএর ওয়েবপেইজটিতে যেতে চান?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "\"%s\" এ ডাম্প ফাইল তৈরি করতে ব্যর্থ হয়েছে (সমস্যা %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "ডাইরেক্টরি নির্ধারণ"
@@ -2322,7 +2413,7 @@ msgid "Toggle Caption&Menu"
msgstr "ক্যাপশন অ্যান্ড মেন্যু নিয়ন্ত্রণ"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "সীকার নিয়ন্ত্রণ"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2331,7 +2422,7 @@ msgstr "কন্ট্রোল নিয়ন্ত্রণ"
msgctxt "IDS_MAINFRM_84"
msgid "Invalid file name"
-msgstr "ফাইলের নামটি সঠিক নয়"
+msgstr "ফাইলের নামটি অগ্রহণযোগ্য"
msgctxt "IDS_MAINFRM_86"
msgid "Cannot connect the filters"
@@ -2347,7 +2438,7 @@ msgstr "ফাইলটি রেনডার করা যাচ্ছে ন
msgctxt "IDS_MAINFRM_89"
msgid "Invalid file format"
-msgstr "ফাইলের ধরনটি সঠিক নয়"
+msgstr "ফাইলের ধরনটি অগ্রহণযোগ্য"
msgctxt "IDS_MAINFRM_90"
msgid "File not found"
@@ -2395,11 +2486,11 @@ msgstr "শব্দ"
msgctxt "IDS_MAINFRM_114"
msgid "%s was not found, please insert media containing this file."
-msgstr "%s খুঁজে পাওয়া যায় নি, এই ফাইলটি ধারণকৃত মিডিয়া প্রবেশ করান।"
+msgstr "%s খুঁজে পাওয়া যায় নি, এই ফাইলটি অন্তর্ভুক্তকৃত মিডিয়া প্রবেশ করান।"
msgctxt "IDS_AG_ABORTED"
msgid "Aborted"
-msgstr "বন্ধ করা হয়েছে"
+msgstr "রহিত করা হয়েছে"
msgctxt "IDS_MAINFRM_116"
msgid "&Properties..."
@@ -2411,7 +2502,7 @@ msgstr " (পিন) প্রোপার্টিস..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
-msgstr "স্ত্রিমটি অপরিচিত"
+msgstr "স্ট্রিমটি অপরিচিত"
msgctxt "IDS_AG_UNKNOWN"
msgid "Unknown %u"
@@ -2423,7 +2514,7 @@ msgstr "VSync"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr "(পরিচালকের মন্তব্যসমূহ ১)"
+msgstr " (পরিচালকের মন্তব্যসমূহ ১)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
@@ -2455,7 +2546,7 @@ msgstr "MPC-HC D3D ফুলস্ক্রীন"
msgctxt "IDS_MAINFRM_137"
msgid "Unknown format"
-msgstr "ধরনটি অপরিচিত"
+msgstr "অপরিচিত ধরন"
msgctxt "IDS_MAINFRM_138"
msgid "Sub shift: %ld ms"
@@ -2478,8 +2569,8 @@ msgid "Volume boost Max"
msgstr "ভলিউমের উন্নতিসাধন সর্বোচ্চ"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "ব্যবহারবিধি: mpc-hc.exe \"pathname\" [নির্দেশনাসমূহ]\n\n\"pathname\"\tযে মূল ফাইল বা ডিরেক্টরি লোড করা হবে (ওয়াইল্ডকার্ড ক্যারেক্টারসমূহ\n\t\tব্যবহার করা যাবে, সাধারণ ইনপুটটি \"-\" চিহ্ন দ্বারা সূচিত করুন)\n/dub \"dubname\"\tঅতিরিক্ত অডিও ফাইল লোড করণ\n/dubdelay \"file\"\tঅতিরিক্ত অডিও ফাইল XXms সময়ের স্থানান্তর করে লোড করণ\n\t\t(যদি ফাইলটিতে \"...DELAY XXms...\" থেকে থাকে)\n/d3dfs\t\tD3D ফুলস্ক্রীন মুডে রেনডার করা শুরু করণ\n/sub \"subname\"\tঅতিরিক্ত সাবটাইটেল ফাইল লোড করণ\n/filter \"filtername\"\tডাইনামিক লিঙ্ক লাইব্রেরি থেকে DirectShow ফিল্টারসমূহ লোড\n\t\tকরণ (ওয়াইল্ডকার্ড ক্যারেক্টারসমূহ ব্যবহার করা যাবে)\n/dvd\t\tDVD মুডে চালনা করণ, \"pathname\" হবে dvd ফোল্ডারটি (ঐচ্ছিক)\n/dvdpos T#C\tটাইটেল T এর পরিচ্ছেদ C থেকে প্লেব্যাক শুরু করণ\n/dvdpos T#hh:mm\tটাইটেল T এর অবস্থানকাল hh:mm:ss থেকে প্লেব্যাক শুরু করণ\n/cd\t\tcd বা (s)vcd এর সকল ট্র্যাকসমূহ লোড করণ, \"pathname\" হবে ড্রাইভের\n\t\tঠিকানাটি (ঐচ্ছিক)\n/device\t\tডিফল্ট ভিডিও ডিভাইসটি চালনা করণ\n/open\t\tফাইলটি চালনা করণ, স্বয়ংক্রিয়ভাবে প্লেব্যাক শুরু করবে না\n/play\t\tপ্লেয়ারটি চালনার সাথে সাথেই ফাইলটি প্লে করা শুরু করণ\n/close\t\tপ্লেব্যাক শেষে প্লেয়ারটি বন্ধ করণ (শুধুমাত্র কাজ করবে যখন /play\n\t\tনির্দেশনাটির সাথে ব্যবহার করা হবে)\n/shutdown\tপ্লেব্যাক শেষে অপারেটিং সিস্টেমটি শাটডাউন করণ\n/fullscreen\tফুল-স্ক্রীন মুডে চালনা করণ\n/minimized\tমিনিমাইজড্‌ মুডে চালনা করণ\n/new\t\tনতুন আরেকটি প্লেয়ার ব্যবহার\n/add\t\t\"pathname\" প্লেলিস্টে যোগ করণ, /open আর /play এর সাথে একত্রে\n\t\tব্যবহার করা যাবে\n/regvid\t\tভিডিও ফাইলসমূহের সাথে সংশ্লিষ্টতা স্থাপন\n/regaud\t\tঅডিও ফাইলসমূহের সাথে সংশ্লিষ্টতা স্থাপন\n/regpl\t\tপ্লেলিস্ট ফাইলসমূহের সাথে সংশ্লিষ্টতা স্থাপন\n/regall\t\tসমর্থন করে এমন সকল ফাইলসমূহের সাথে সংশ্লিষ্টতা স্থাপন\n/unregall\t\tসকল ফাইলসমূহের সাথে সংশ্লিষ্টতা অপসারণ\n/start ms\t\t\"ms\" (= মিলিসেকেন্ড) থেকে প্লে শুরু করণ\n/startpos hh:mm:ss\thh:mm:ss অবস্থানকাল থেকে প্লে শুরু করণ\n/fixedsize w,h\tউইন্ডোর সাইজ নির্দিষ্টকরণSet a fixed window size\n/monitor N\tমনিটর Nএ প্লেয়ার চালনা করণ, যেখানে Nএর মান ১ থেকে শুরু হয়\n/audiorenderer N\tঅডিও রেনডারার N ব্যবহার শুরু করণ, যেখানে Nএর মান ১\n\t\tথেকে শুরু হয় (বিস্তারিত দেখুন \"Output\" সেটিংসমূহে)\n/shaderpreset \"Pr\"\t\"Pr\" শেইডার প্রিসেট ব্যবহার শুরু করণ\n/reset\t\tডিফল্ট সেটিংসমূহে পুনর্বিন্যাস করণ\n/help /h /?\tকমান্ড লাইনের নির্দেশনাসমূহ সম্পর্কে সহায়িকা প্রদর্শন\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2565,14 +2656,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "সবগুলো ফিল্টার সক্রিয়করণ(&E)"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "টিউনার স্ক্যানকরণ"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "সাবটাইটেল লোড করা হয়নি অথবা সমর্থন করে না এমন রেনডারার।"
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "এর প্রবর্তকটি অজ্ঞাত। যদি আপনি এই লোগোটি বানিয়ে থাকেন তবে আমাদের সাথে যোগাযোগ করুন।"
@@ -2661,40 +2744,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "উপরে পিছনে ডানে"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "ডিসপ্লে বৃত্তান্ত পুনর্বিন্যাস করি"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "সাবটাইটেল::Misc"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "বর্ডারসমূহ লুকিয়ে রাখি(&B)"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "শুধুমাত্র ফ্রেম"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "ক্যাপশন আর মেন্যু প্রদর্শন(&W)"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "মেন্যু লুকিয়ে রাখি(&M)"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "অ্যাডভান্সড্‌"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "সীকবারের উপরে"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "সীকবারের নিচে"
msgctxt "IDS_VIDEO_STREAM"
@@ -2703,7 +2758,7 @@ msgstr "ভিডিও: %s"
msgctxt "IDS_APPLY"
msgid "Apply"
-msgstr "কার্যকর করি"
+msgstr "প্রয়োগ করি"
msgctxt "IDS_CLEAR"
msgid "Clear"
@@ -2862,8 +2917,8 @@ msgid "Other Audio"
msgstr "Other Audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2928,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3012,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Playlist"
@@ -2977,18 +3036,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "অ্যাসপেক্ট রেশিও"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "WASAPI ব্যবহার (পুনরায় প্লেব্যাক করুন)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "শব্দহীন ভাবে দ্রুত সামনে যাওয়া"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "শব্দের ডিভাইস:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: চালু করা হল"
@@ -2999,11 +3046,11 @@ msgstr "VSync: বন্ধ করা হল"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
msgid "Accurate VSync: On"
-msgstr "যথোপযোগী VSync: চালু করা হল"
+msgstr "নিখুঁত VSync: চালু করা হল"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
msgid "Accurate VSync: Off"
-msgstr "যথোপযোগী VSync: বন্ধ করা হল"
+msgstr "নিখুঁত VSync: বন্ধ করা হল"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
msgid "Synchronize Video to Display: On"
@@ -3243,15 +3290,15 @@ msgstr "জূম: স্বয়ংক্রিয়"
msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
msgid "Toggle custom channel mapping"
-msgstr "নির্ধারণযোগ্য চ্যানেল বিন্যাস নিয়ন্ত্রণ"
+msgstr "ব্যক্তি-নির্ধারিত চ্যানেল বিন্যাস নিয়ন্ত্রণ"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
msgid "Custom channel mapping: On"
-msgstr "নির্ধারণযোগ্য চ্যানেল বিন্যাস: চালু করা হল"
+msgstr "ব্যক্তি-নির্ধারিত চ্যানেল বিন্যাস: চালু করা হল"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
msgid "Custom channel mapping: Off"
-msgstr "নির্ধারণযোগ্য চ্যানেল বিন্যাস: বন্ধ করা হল"
+msgstr "ব্যক্তি-নির্ধারিত চ্যানেল বিন্যাস: বন্ধ করা হল"
msgctxt "IDS_NORMALIZE"
msgid "Toggle normalization"
@@ -3277,25 +3324,29 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "ভলিউম পুনর্বৃদ্ধি: বন্ধ করা হল"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "বাইট"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
-msgstr "KB"
+msgstr "কিলো বাইট"
msgctxt "IDS_SIZE_UNIT_M"
msgid "MB"
-msgstr "MB"
+msgstr "মেগাবাইট"
msgctxt "IDS_SIZE_UNIT_G"
msgid "GB"
-msgstr "GB"
+msgstr "গিগাবাইট"
msgctxt "IDS_SPEED_UNIT_K"
msgid "KB/s"
-msgstr "KB/s"
+msgstr "কিলোবাইট/সেকন্ড"
msgctxt "IDS_SPEED_UNIT_M"
msgid "MB/s"
-msgstr "MB/s"
+msgstr "মেগাবাইট/সেকন্ড"
msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
msgid "Could not create the tuner."
@@ -3323,18 +3374,18 @@ msgstr "ডিমাল্টিপ্লেক্সারটি তৈরি
msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
msgid "Error parsing the entered time!"
-msgstr "প্রবেশকৃত সময়টি পার্সিং করণে সমস্যা হয়েছে!"
+msgstr "প্রবেশকৃত সময়টি সমন্বয় সাধনে সমস্যা হয়েছে!"
msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
msgid "Error parsing the entered text!"
-msgstr "প্রবেশকৃত টেক্সট্‌টি পার্সিং করণে সমস্যা হয়েছে!"
+msgstr "প্রবেশকৃত টেক্সট্‌টি সমন্বয় সাধনে সমস্যা হয়েছে!"
msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
msgid "Error parsing the entered frame rate!"
-msgstr "প্রবেশকৃত ফ্রেম রেটটি পার্সিং করণে সমস্যা হয়েছে!"
+msgstr "প্রবেশকৃত ফ্রেম রেটটি সমন্বয় সাধনে সমস্যা হয়েছে!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "ফ্রেমের পদক্ষেপ নেয়া যাচ্ছে না, ভিন্ন ভিডিও রেনডারার চেষ্টা করে দেখুন।"
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3353,10 +3404,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "\"ছবি সেইভ করি\" এবং \"থাম্ব্‌নেইলসমূহ সেইভ করি\" ফাংশনসমূহ Overlay Mixer ভিডিও রেনডারারের সাথে কাজ করে না।\nMPC-HCএর আউটপুট অপশনসমূহে ভিডিও রেনডারারটি পরিবর্তন করুন এবং পুনরায় ফাইলটি চালনা করুন।"
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "অনলাইন সাবটাইটেল ডেটাবেসের সাথে সংযুক্ত করা যাচ্ছে না।"
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "আপনি কি EDL এডিটরটি সক্রিয় করতে চান?"
@@ -3415,7 +3462,7 @@ msgstr "অডিও আউটপুট ফাইলটি ইনিশিয়া
msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
-msgstr "সঠিক সময়ের ফরম্যাটটি হচ্ছে [-]hh:mm:ss.ms (উদাহরণ: 01:23:45.678)।"
+msgstr "সঠিক সময়ের ফরম্যাটটি হচ্ছে [-]hh:mm:ss.ms (উদাহরণ- 01:23:45.678)।"
msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
msgid "This type is already in the list!"
@@ -3423,9 +3470,9 @@ msgstr "এই ধরনটি ইতিমধ্যে তালিকাতে
msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
-msgstr "নতুন সেটিংসমূহ পরীক্ষা করার আগে সেগুলো কার্যকর করতে হবে।"
+msgstr "নতুন সেটিংসমূহ পরীক্ষা করার আগে সেগুলো প্রয়োগ করতে হবে।"
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "প্লেব্যাকের পরে: প্রোগ্রাম বন্ধ করি"
@@ -3453,6 +3500,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "প্লেব্যাকের পরে: মনিটর বন্ধ করি"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "প্লেব্যাকের পরে: ফোল্ডারের পরবর্তী ফাইলটি প্লে করি"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "প্লেব্যাকের পরে: কোন কিছু করি না"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "উজ্জ্বলতা: %s"
@@ -3471,7 +3526,7 @@ msgstr "রঙের তীব্রতা: %s"
msgctxt "IDS_OSD_RESET_COLOR"
msgid "Color settings restored"
-msgstr "রঙের সেটিংসমূহ পুনর্বিন্যাস করা হয়েছে"
+msgstr "রঙের সেটিংসমূহ পূর্বাবস্থায় ফিরিয়ে আনা হয়েছে"
msgctxt "IDS_OSD_NO_COLORCONTROL"
msgid "Color control is not supported"
@@ -3483,11 +3538,11 @@ msgstr "উজ্জ্বলতা বৃদ্ধি করি"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
-msgstr "এখানে আপনার পছন্দনীয় ভাষাসমূহ প্রবেশ করুন।\nউদাহরণস্বরূপ, প্রবেশ করতে পারেন: \"eng jap swe\""
+msgstr "আপনার পছন্দনীয় ভাষাসমূহ এখানে প্রবেশ করুন।\nউদাহরণস্বরূপ, প্রবেশ করতে পারেন: \"ben eng jap swe\""
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
-msgstr "বাহিরস্থ স্প্লিটারসমূহের নিজস্ব পছন্দনীয় ভাষার অপশন থাকতে পারে, সেটাহলে MPC-HCএর ডিফল্ট আচরণ সেগুলোর প্রাথমিক পছন্দ পরিবর্তন করবে না।\nMPC-HC দ্বারা বাহিরস্থ স্প্লিটারসমূহ নিয়ন্ত্রণ করতে চাইলে এই অপশনটি সক্রিয় করুন।"
+msgstr "বাহিরস্থ স্প্লিটারসমূহের নিজস্ব পছন্দনীয় ভাষার অপশন থাকতে পারে, সেটার জন্য MPC-HCএর ডিফল্ট আচরণ সেসবের প্রাথমিক পছন্দ পরিবর্তন করে না।\nMPC-HC দ্বারা বাহিরস্থ স্প্লিটারসমূহ নিয়ন্ত্রণ করতে চাইলে এই অপশনটি সক্রিয় করুন।"
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
@@ -3511,25 +3566,409 @@ msgstr "চ্যানেলসমূহ(&C)"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr ""
+msgstr "যদি \"আগের কীফ্রেমে\" নির্ধারণ করা হয়ে থাকে, নির্দিষ্ট সীককৃত অবস্থানের আগের প্রথম কীফ্রেমে সীক করবে।\nযদি \"নিকটবর্তী কীফ্রেমে\" নির্ধারণ করা হয়ে থাকে, নির্দিষ্ট সীককৃত অবস্থানের আগের বা পরের প্রথম কীফ্রেমে সীক করবে, নির্ভর করবে কোনটা অপেক্ষাকৃত কাছে।"
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr ""
+msgstr "সকল ধরনের ফাইলের সাথে সম্পৃক্ততা"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr ""
+msgstr "শুধুমাত্র ভিডিও ফাইলসমূহের সাথে সম্পৃক্ততা"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr ""
+msgstr "শুধুমাত্র অডিও ফাইলসমূহের সাথে সম্পৃক্ততা"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr ""
+msgstr "সকল সম্পৃক্ততা অপসারণ করি"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "সেটিংসমূহ"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "সরবরাহকারী"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "শ্রবণ প্রতিবন্ধী"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "ডাউনলোডসমূহ"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "মূল্যায়ন"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "অনলাইনে সাবটাইটেল অনুসন্ধান ব্যর্থ হয়েছে।"
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "অনলাইনে সাবটাইটেল অনুসন্ধান রহিত করা হয়েছে।"
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "অনলাইনে সাবটাইটেল অনুসন্ধান সম্পন্ন হয়েছে, %dটি সাবটাইটেল পাওয়া গেছে।"
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "অনলাইনে সাবটাইটেল অনুসন্ধান সম্পন্ন হয়েছে, কোন সাবটাইটেল পাওয়া যায়নি।"
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "সাবটাইটেল ডাউনলোড করি"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "অনলাইনে সাবটাইটেল অনুসন্ধান করা হচ্ছে, অনুগ্রহপূর্বক অপেক্ষা করুন..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "অনলাইনে সাবটাইটেল অনুসন্ধান রহিত করা হচ্ছে..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "ব্যবহারকারীর নাম"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "অবস্থিতি"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "প্রস্তুত হচ্ছে..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "বাস্তবায়ন করা যায়নি।"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "আপলোড করা হচ্ছে..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "সাবটাইটেলটি সফলভাবে আপলোড করা হয়েছে।"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "সাবটাইটেলটি আপলোড করা যায়নি।"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "সাবটাইটেলটি আপলোড করা রহিত করা হয়েছে।"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "সাবটাইটেলটি ইতিমধ্যেই বিদ্যমান রয়েছে।"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "সাবটাইটেলটি আপলোড হচ্ছে, অনুগ্রহপূর্বক অপেক্ষা করুন।"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "আপলোড করা সম্পন্ন হয়েছে।"
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "আপলোড করা রহিত করা হয়েছে।"
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "আপলোড করতে ব্যর্থ হয়েছে।"
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "ডাউনলোড ও চালনা করি"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "সেটআপ"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "পুনর্বিন্যাস করি"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "উপরে উঠাই"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "নিচে নামাই"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "URL খুলি"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "ভাষাসমূহ"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "সমস্যা: ইন্টারনেট সংযোগ স্থাপন করা যাচ্ছে না।"
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "ওয়েবসাইটের প্রামাণ্য বিবরণসমূহ প্রবেশ করুন"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "আপনার প্রামাণ্য বিবরণসমূহ প্রবেশ করে সংযুক্ত হোন:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "অ্যাসপেক্ট রেশিও: বর্গাকার পিক্সেল (SAR) অনুমান করণ"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "ডাউনলোড করা হয়েছে [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "সাবটাইটেল আপলোড করি"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "আপনি কি নিশ্চিত যে \"%s\" সাবটাইটেল ফাইলটি আপলোড করতে চান?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "সমর্থনীয় ভাষাসমূহ সংগ্রহ করা হচ্ছে..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "\"%S\" তে \"%S\" ব্যবহারকারীর নাম দিয়ে লগ্‌ ইন করা যাচ্ছে না।\n\nঅনুগ্রহ পূর্বক সঠিক ব্যবহারকারীর নাম এবং পাসওয়ার্ড প্রবেশ করুন অথবা তথ্যসমূহ পুনর্বিন্যাস করে অপরিচিত ব্যবহারকারী হিসেবে লগ্‌ ইন করুন।"
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "এখানে প্রবেশকৃত প্যাটার্ন অন্তর্ভুক্ত সকল মিডিয়া ফাইলের জন্য স্বয়ংক্রিয় ভাবে অনুসন্ধান এবং ডাউনলোড নিস্ক্রিয় করা হবে।\nউদাহরণস্বরূপ, টাইপ করতে পারেন: \"ব্যক্তিগত ডাইরেক্টরি\\ভিডিও|কাজ\\\""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.dialogs.po
new file mode 100644
index 000000000..d100dc465
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.dialogs.po
@@ -0,0 +1,1795 @@
+# MPC-HC - Strings extracted from dialogs
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Samir Gutić <amicussamir@amicus.ba>, 2016
+# smajo burek <smajo@mail.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/mpc-hc/mpc-hc/language/bs_BA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bs_BA\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
+msgid "Select Media Type"
+msgstr "Izaberite Media Tip"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDOK"
+msgid "OK"
+msgstr "U redu"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
+msgid "Cancel"
+msgstr "Otkaži"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
+msgid "Set"
+msgstr "Podesi"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Output"
+msgstr "Izlaz"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
+msgid "Record Video"
+msgstr "Snimi Video"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
+msgid "Preview"
+msgstr "Pogledaj"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
+msgid "Record Audio"
+msgstr "Snimi Audio"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
+msgid "Preview"
+msgstr "Pogledaj"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "V/A Buffers:"
+msgstr "V/A Međuspremnici:"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
+msgid "Audio to wav"
+msgstr "Audio u wav"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
+msgid "Record"
+msgstr "Snimi"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
+msgid "Enable built-in audio switcher filter (requires restart)"
+msgstr "Omogući ugrađeni audio preklopnik filter (zahtijeva restart)"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
+msgid "Normalize"
+msgstr "Normaliziraj"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
+msgid "Max amplification:"
+msgstr "Max pojačanje:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
+msgid "Regain volume"
+msgstr "Vrati nivo zvuka"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
+msgid "Boost:"
+msgstr "Pojačanje:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
+msgid "Down-sample to 44100 Hz"
+msgstr "Uzorkuj naniže na 44100 Hz"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
+msgid "Audio time shift (ms):"
+msgstr "Vremenski pomak za audio (ms):"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
+msgid "Enable custom channel mapping"
+msgstr "Omogući mapiranje kanala po mjeri"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
+msgid "Speaker configuration for"
+msgstr "Podešenje zvučnika za"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
+msgid "input channels:"
+msgstr "ulazni kanali:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Držite shift za trenutne promjene kada kliknete na nešto"
+
+msgctxt "IDD_GOTO_DLG_CAPTION"
+msgid "Go To..."
+msgstr "Idi Na..."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
+msgstr "Unesite vrijeme u formatu [hh:]mm:ss.ms da skočite na željeno vrijeme. Nije potrebno eksplicitno unijeti separatore."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Time"
+msgstr "Vrijeme"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK1"
+msgid "Go!"
+msgstr "Kreni!"
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
+msgstr "Unesite dva broja da skočite na određenu sličicu, prvi je broj sličice, drugi je tempo sličica."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Frame"
+msgstr "Isječak"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK2"
+msgid "Go!"
+msgstr "Kreni!"
+
+msgctxt "IDD_OPEN_DLG_CAPTION"
+msgid "Open"
+msgstr "Otvori"
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
+msgstr "Upišite adresu filma ili audio dokumenta (na internetu ili vašem računaru) i player će ga otvoriti za vas."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Open:"
+msgstr "Otvori:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Pretraži..."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
+msgid "Dub:"
+msgstr "Dub:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Pretraži..."
+
+msgctxt "IDD_OPEN_DLG_IDOK"
+msgid "OK"
+msgstr "Uredu"
+
+msgctxt "IDD_OPEN_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Otkaži"
+
+msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
+msgid "Add to playlist without opening"
+msgstr "Bez otvaranja dodaj u listu za reprodukciju "
+
+msgctxt "IDD_ABOUTBOX_CAPTION"
+msgid "About"
+msgstr "O"
+
+msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Autorska prava © 2002-2017 pogledajte Authors.txt"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "This program is freeware and released under the GNU General Public License."
+msgstr "Ovaj program je besplagan i objavljen pod GNU Opštom Javnom Licencom"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "English translation made by MPC-HC Team"
+msgstr "Bosanski prijevod uradio Samir Gutić"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build information"
+msgstr "Informacije o verziji"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Version:"
+msgstr "Verzija:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Compiler:"
+msgstr "Kompajler:"
+
+msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
+msgid "Not used"
+msgstr "Nije korišteno"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build date:"
+msgstr "Datum verzije:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Operating system"
+msgstr "Operativni sistem"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Name:"
+msgstr "Ime:"
+
+msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
+msgid "Copy to clipboard"
+msgstr "Kopiraj u clipboard"
+
+msgctxt "IDD_ABOUTBOX_IDOK"
+msgid "OK"
+msgstr "Uredu"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Open options"
+msgstr "Otvori opcije"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
+msgid "Use the same player for each media file"
+msgstr "Koristi isti player za svaki media dokument"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
+msgid "Open a new player for each media file played"
+msgstr "Otvori novi player za svaki reprodukovani media dokument"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Language"
+msgstr "Jezik"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Title bar"
+msgstr "Naslovna traka"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
+msgid "Display full path"
+msgstr "Prikaži punu putanju"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
+msgid "File name only"
+msgstr "Samo ime dokumenta"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
+msgid "Don't prefix anything"
+msgstr "Ne kreiraj prefix za bilo šta"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
+msgid "Replace file name with title"
+msgstr "Zamijeni ime dokumenta naslovom"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Other"
+msgstr "Ostalo"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
+msgid "Tray icon"
+msgstr "Ikonica u sistemskom tray-u"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
+msgid "Show OSD (requires restart)"
+msgstr "Prikaži OSD (zahtijeva restart)"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
+msgid "Limit window proportions on resize"
+msgstr "Ograniči proporcije prozora tokom promjene veličine"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
+msgid "Snap to desktop edges"
+msgstr "Uklopi u ivice desktop-a"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
+msgid "Store settings in .ini file"
+msgstr "Snimi podešenja u .ini dokument"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
+msgid "Disable \"Open Disc\" menu"
+msgstr "Onemogući meni \"Otvori Disk\""
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
+msgid "Process priority above normal"
+msgstr "Prioritet procesa iznad normale"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
+msgid "Enable cover-art support"
+msgstr "Omogući podršku za slike albuma"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "History"
+msgstr "Historija"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
+msgid "Keep history of recently opened files"
+msgstr "Čuvaj historiju nedavno otvorenih dokumenata"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
+msgid "Remember last playlist"
+msgstr "Zapamti zadnju playlistu"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
+msgid "Remember File position"
+msgstr "Zapamti poziciju Dokumenta"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
+msgid "Remember DVD position"
+msgstr "Zapamti poziciju DVD-a"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
+msgid "Remember last window position"
+msgstr "Zapamti zadnju poziciju prozora"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
+msgid "Remember last window size"
+msgstr "Zapamti zadnju veličinu prozora"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
+msgid "Remember last Pan-n-Scan Zoom"
+msgstr "Zapamti zadnji Pan-n-Scan Zoom"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "\"Open DVD/BD\" behavior"
+msgstr "\"Otvori DVD/BD\" ponašanje"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
+msgid "Prompt for location"
+msgstr "Ponudi izbor lokacije"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
+msgid "Always open the default location:"
+msgstr "Uvijek otvori podrazumijevanu lokaciju:"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Preferred language for DVD Navigator and the external OGM Splitter"
+msgstr "Preferirani jezik za DVD Navigator i eksterni OGM Splitter"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
+msgid "Menu"
+msgstr "Meni"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
+msgid "Subtitles"
+msgstr "Titlovi"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Additional settings"
+msgstr "Dodatna podešenja"
+
+msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
+msgid "Allow closed captions in \"Line 21 Decoder\""
+msgstr "Dozvoli zatvorene navodnike u \"Line 21 Decoder\""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume"
+msgstr "Jačina zvuka"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Min"
+msgstr "Min"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Max"
+msgstr "Max"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
+msgid "Balance"
+msgstr "Balans"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "L"
+msgstr "L"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "R"
+msgstr "D"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Playback"
+msgstr "Reprodukcija"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
+msgid "Play"
+msgstr "Reprodukuj"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
+msgid "Repeat forever"
+msgstr "Ponavljaj unedogled"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
+msgid "time(s)"
+msgstr "vrijeme"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Modus ponavljanja:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "After Playback"
+msgstr "Nakon Reprodukcije"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default zoom"
+msgstr "Podrazumijevani zum"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
+msgid "Auto-zoom:"
+msgstr "Auto-zum:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
+msgid "Auto fit factor:"
+msgstr "Faktor auto uklapanja:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default track preference"
+msgstr "Podrazumijevani prioritet zapisa"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Subtitles:"
+msgstr "Titlovi"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio:"
+msgstr "Audio:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
+msgid "Allow overriding external splitter choice"
+msgstr "Omogući premoštenje izbora eksternog splitera"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Open settings"
+msgstr "Otvori podešenja"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
+msgid "Use worker thread to construct the filter graph"
+msgstr "Koristi radni niz za konstrukciju grafikona filtera"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
+msgid "Report pins which fail to render"
+msgstr "Prijavi pinove čije renderiranje nije uspjelo"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
+msgid "Auto-load audio files"
+msgstr "Automatski učitaj audio dokumente"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Control"
+msgstr "Kontrola"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume step:"
+msgstr "Korak zvuka:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Speed step:"
+msgstr "Korak brzine:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
+msgid "Override placement"
+msgstr "Premosti poziciju"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
+msgid "Horizontal:"
+msgstr "Horizontalno:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC2"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC3"
+msgid "Vertical:"
+msgstr "Vertikalno:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC4"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Delay step"
+msgstr "Korak kašnjenja"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Texture settings (open the video again to see the changes)"
+msgstr "Podešenja teksture (otvorite video ponovo da biste vidjeli izmjene)"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Sub pictures to buffer:"
+msgstr "Podslike za buferovanje:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Maximum texture resolution:"
+msgstr "Maksimalna rezolucija teksture:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
+msgid "Never animate the subtitles"
+msgstr "Nikada ne animiraj titlove"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
+msgid "Render at"
+msgstr "Renderiraj na"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
+msgid "% of the animation"
+msgstr "% animacije"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
+msgid "Animate at"
+msgstr "Animiraj na"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
+msgid "% of the video frame rate"
+msgstr "% tempa video okvira"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Allow dropping some subpictures if the queue is running late"
+msgstr "Dozvoli odbacivanje nekih podslika ako red kasni"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Renderer Layout"
+msgstr "Prikaz Renderera"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
+msgid "Apply aspect ratio compensation for anamorphic videos"
+msgstr "Primijeni kompenzaciju razmjere za anamorfni video"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Warning"
+msgstr "Upozorenje"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Ako premostite i omogućite antialiasing prikaza preko cijelog ekrana negdje u podešenjima vaše grafičke kartice titlovi neće izgledati ništa bolje ali će sigurno 'jesti' vaš CPU."
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
+msgid "File extensions"
+msgstr "Ekstenzije dokumenata"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
+msgid "Default"
+msgstr "Podrazumijevano"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
+msgid "Set"
+msgstr "Podesi"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
+msgid "Association"
+msgstr "Asocijacije"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
+msgid "Use the format-specific icons"
+msgstr "Koristi ikonice odvisne od formata"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
+msgid "Run as &administrator"
+msgstr "Pokreni kao &administrator"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
+msgid "Set as &default program"
+msgstr "Postavi kao po&drazumijevani program"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
+msgstr "Upravljač Real-Time Streaming Protokola (za rtsp://... URL-ove)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
+msgid "RealMedia"
+msgstr "RealMedia"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO2"
+msgid "QuickTime"
+msgstr "QuickTime"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO3"
+msgid "DirectShow"
+msgstr "DirectShow"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
+msgid "Check file extension first"
+msgstr "Prvo provjeri ekstenziju dokumenta"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Explorer Context Menu"
+msgstr "Meni Sadržaja Eksplorera"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK6"
+msgid "Directory"
+msgstr "Direktorij"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK7"
+msgid "File(s)"
+msgstr "Dokument(i)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
+msgid "Autoplay"
+msgstr "Automatsko pokretanje"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK2"
+msgid "Music"
+msgstr "Muzika"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK4"
+msgid "DVD"
+msgstr "DVD"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
+msgid "Audio CD"
+msgstr "Audio CD"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "Jump distances (small, medium, large in ms)"
+msgstr "Udaljenost skoka (mala, srednja, velika u ms)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
+msgid "Default"
+msgstr "Podrazumijevano"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
+msgid "Fast seek (on keyframe)"
+msgstr "Brzo traženje (na isječak)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
+msgid "Show chapter marks in seek bar"
+msgstr "Prikaži oznake poglavlja na traci za traženje"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
+msgid "Display \"Now Playing\" information in Skype's mood message"
+msgstr "Prikaži \"Now Playing\" informacije u Skype poruci raspoloženja"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
+msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
+msgstr "Spriječi minimiziranje player-a kada je u prikazu preko cijelog ekrana na monitoru koji nije podrazumijevani"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Koristi napredne mogućnosti taskbar-a"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Otvori prethodni/naredni dokument u direktoriju na \"Preskoči nazad/naprijed\" kada je samo jedna stavka u playlisti"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
+msgid "Show time tooltip:"
+msgstr "Prikaži tooltip za vrijeme:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "OSD font:"
+msgstr "OSD font:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
+msgid "Enable Logitech LCD support (experimental)"
+msgstr "Omogući Logitech LCD podršku (eksperimentalno)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
+msgid "Auto-hide the mouse pointer during playback in windowed mode"
+msgstr "Automatski sakrij pokazivač miša tokom reprosukcije u prozor modusu"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
+msgid "Add Filter..."
+msgstr "Dodaj Filter..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
+msgid "Remove"
+msgstr "Ukloni"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO1"
+msgid "Prefer"
+msgstr "Preferiraj"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO2"
+msgid "Block"
+msgstr "Blokiraj"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
+msgid "Set merit:"
+msgstr "Podesi zasluge:"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
+msgid "Up"
+msgstr "Naviše"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON4"
+msgid "Down"
+msgstr "Naniže"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
+msgid "Add Media Type..."
+msgstr "Dodaj Media Tip..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
+msgid "Add Sub Type..."
+msgstr "Dodaj Tip Titla..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
+msgid "Delete"
+msgstr "Izbriši"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
+msgid "Reset List"
+msgstr "Resetuj listu"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Type:"
+msgstr "Tip:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Size:"
+msgstr "Veličina:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Media length:"
+msgstr "Media dužina:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Video size:"
+msgstr "Video veličina:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Created:"
+msgstr "Kreirano:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Clip:"
+msgstr "Klip:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Author:"
+msgstr "Autor:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Copyright:"
+msgstr "Autorska prava:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Rating:"
+msgstr "Ocjena:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Location:"
+msgstr "Lokacija:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Description:"
+msgstr "Opis:"
+
+msgctxt "IDD_FAVADD_CAPTION"
+msgid "Add Favorite"
+msgstr "Dodaj Omiljeno"
+
+msgctxt "IDD_FAVADD_IDC_STATIC"
+msgid "Choose a name for your shortcut:"
+msgstr "Izaberite ime za svoju prečicu:"
+
+msgctxt "IDD_FAVADD_IDC_CHECK1"
+msgid "Remember position"
+msgstr "Zapamti poziciju"
+
+msgctxt "IDD_FAVADD_IDCANCEL"
+msgid "Cancel"
+msgstr "Otkaži"
+
+msgctxt "IDD_FAVADD_IDOK"
+msgid "OK"
+msgstr "Uredu"
+
+msgctxt "IDD_FAVADD_IDC_CHECK2"
+msgid "Relative drive"
+msgstr "Relativni disk"
+
+msgctxt "IDD_FAVORGANIZE_CAPTION"
+msgid "Organize Favorites"
+msgstr "Organizuj Omiljene"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
+msgid "Rename"
+msgstr "Preimenuj"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
+msgid "Move Up"
+msgstr "Pomakni Naviše"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
+msgid "Move Down"
+msgstr "Premakni Naniže"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
+msgid "Delete"
+msgstr "Izbriši"
+
+msgctxt "IDD_FAVORGANIZE_IDOK"
+msgid "OK"
+msgstr "Uredu"
+
+msgctxt "IDD_PNSPRESET_DLG_CAPTION"
+msgid "Pan&Scan Presets"
+msgstr "Pan&Scan Podešenja"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
+msgid "New"
+msgstr "Novo"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON3"
+msgid "Delete"
+msgstr "Izbriši"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
+msgid "Up"
+msgstr "Naviše"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
+msgid "Down"
+msgstr "Naniže"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
+msgid "&Set"
+msgstr "Podesi"
+
+msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
+msgid "&Cancel"
+msgstr "Otkaži"
+
+msgctxt "IDD_PNSPRESET_DLG_IDOK"
+msgid "&Save"
+msgstr "&Snimi"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Pos: 0.0 -> 1.0"
+msgstr "Poz: 0.0 -> 1.0"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Zoom: 0.2 -> 3.0"
+msgstr "Zum: 0.2 -> 3.0"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
+msgid "Global Media Keys"
+msgstr "Globalne Media Tipke"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
+msgid "Select All"
+msgstr "Selektuj Sve"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
+msgid "Reset Selected"
+msgstr "Resetuj Selektovano"
+
+msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
+msgid "Warning"
+msgstr "Upozorenje"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
+msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
+msgstr "MPC-HC nije mogao renderirati neke pinove grafa. Moguće je da u sistemu nemate potrebne kodeke ili filtere."
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
+msgid "The following pin(s) failed to find a connectable filter:"
+msgstr "Sljedeći pinovi nisu pronašli filter za povezivanje:"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDOK"
+msgid "Close"
+msgstr "Zatvori"
+
+msgctxt "IDD_SAVE_DLG_CAPTION"
+msgid "Saving..."
+msgstr "Snimanje..."
+
+msgctxt "IDD_SAVE_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Otkaži"
+
+msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Kodiranje:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Kodiranje:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "Delay:"
+msgstr "Odgoda:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
+msgid "Save custom style"
+msgstr "Snimi vlastiti stil"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG kvalitet:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Thumbnails:"
+msgstr "Sličice:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "rows"
+msgstr "vrste"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "columns"
+msgstr "kolone"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Image width:"
+msgstr "Širina slike:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "pixels"
+msgstr "piksela"
+
+msgctxt "IDD_ADDREGFILTER_CAPTION"
+msgid "Select Filter"
+msgstr "Izaberite Filter"
+
+msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Pretraži..."
+
+msgctxt "IDD_ADDREGFILTER_IDOK"
+msgid "OK"
+msgstr "Uredu"
+
+msgctxt "IDD_ADDREGFILTER_IDCANCEL"
+msgid "Cancel"
+msgstr "Otkaži"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Font"
+msgstr "Tip slova"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_BUTTON1"
+msgid "Font"
+msgstr "Tip slova"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Spacing"
+msgstr "Razmak"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Angle (z,°)"
+msgstr "Ugao (z,°)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (x,%)"
+msgstr "Razmjera (x,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (y,%)"
+msgstr "Razmjera (y,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Border Style"
+msgstr "Stil Granice"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
+msgid "Outline"
+msgstr "Kontura"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
+msgid "Opaque box"
+msgstr "Neproziran okvir"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Width"
+msgstr "Širina"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Shadow"
+msgstr "Sjena"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Screen Alignment && Margins"
+msgstr "Pogledajte Poravnavanje i Margine"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Left"
+msgstr "Lijevo"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Right"
+msgstr "Desno"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Top"
+msgstr "Vrh"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Bottom"
+msgstr "Dno"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
+msgid "Position subtitles relative to the video frame"
+msgstr "Postavi titlove relativno u odnosu na video isječak"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Colors && Transparency"
+msgstr "Boje i Providnost"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "0%"
+msgstr "0%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Primary"
+msgstr "Primarni"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Secondary"
+msgstr "Sekundarni"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Outline"
+msgstr "Kontura"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
+msgid "Link alpha channels"
+msgstr "Linkuj alfa kanale"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
+msgstr "Ako bi željeli koristiti samostalnu verziju ovih filtera ili drugu zamjenu, omogućite ih ovdje."
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Source Filters"
+msgstr "Izvorni Filteri"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Transform Filters"
+msgstr "Filteri Transformacije"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Internal LAV Filters settings"
+msgstr "Podešenja internil LAV Filtera"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
+msgid "Splitter"
+msgstr "Spliter"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
+msgid "Video decoder"
+msgstr "Video dekoder"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
+msgid "Audio decoder"
+msgstr "Audio dekoder"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
+msgid "Internal:"
+msgstr "Interni:"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO2"
+msgid "External:"
+msgstr "Eksterni:"
+
+msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Pretraži..."
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DirectShow Video"
+msgstr "DirectShow Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "RealMedia Video"
+msgstr "RealMedia Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "QuickTime Video"
+msgstr "QuickTime Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Audio Renderer"
+msgstr "Audio Renderer"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Podešenja za VMR-9 (bez renderiranja) i EVR (CP)"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Surface:"
+msgstr "Površina:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Resizer:"
+msgstr "Izmjenjivač veličine:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
+msgid "Select D3D9 Render Device"
+msgstr "Izaberite D3D9 Uređaj za Renderiranje"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
+msgid "Reinitialize when changing display"
+msgstr "Reinicijaliziraj pri promjeni displeja"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "D3D Fullscreen"
+msgstr "D3D Cijeli ekran"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Alternative VSync"
+msgstr "Alternativni VSync"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
+msgid "VMR-9 Mixer Mode"
+msgstr "VMR-9 Mikser Modus"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
+msgid "YUV Mixing"
+msgstr "YUV Miksanje"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
+msgid "EVR Buffers:"
+msgstr "EVR Ublaživači:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitles"
+msgstr "Titlovi"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Screenshot"
+msgstr "Snimak ekrana"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Shaders"
+msgstr "Sjenčila"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Rotation"
+msgstr "Rotacija"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitle Renderer"
+msgstr "Renderer Titlova"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Sjenila kompajlirana iz Keša"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
+msgid "Listen on port:"
+msgstr "Osluškuj na portu:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
+msgid "Launch in web browser..."
+msgstr "Pokreni u web pregledniku..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
+msgid "Enable compression"
+msgstr "Omogući kompresiju"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
+msgid "Allow access from localhost only"
+msgstr "Dozvoli samo pristup localhost-a"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Omogući pregled"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
+msgid "Print debug information"
+msgstr "Printaj informacije za ispravljanje grešaka"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
+msgid "Serve pages from:"
+msgstr "Serviraj stranice iz:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Pretraži..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
+msgid "Deploy..."
+msgstr "Primijeni..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "Default page:"
+msgstr "Podrazumijevana stranica:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
+msgstr "CGI rukovaoci: (.ext1=putanja1;.ext2=putanja2;...)"
+
+msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
+msgid "Download subtitles"
+msgstr "Download titlove"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
+msgid "Replace currently loaded subtitles"
+msgstr "Zamijeni trenutno učitane titlove"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Download-uj"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Refreširaj"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Prekini"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opcije"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Upload-uj titlove"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Upload-uj"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Prekini"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opcije"
+
+msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
+msgid "Save As..."
+msgstr "Snimi Kao..."
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Color controls (for VMR-9, EVR and madVR)"
+msgstr "Kontrole Boje (za VMR-9, EVR i madVR)"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Brightness"
+msgstr "Osvijetljenost"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Contrast"
+msgstr "Kontrast"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Hue"
+msgstr "Nijansa"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Saturation"
+msgstr "Zasićenje"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET"
+msgid "Reset"
+msgstr "Resetuj"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Update check"
+msgstr "Provjera nadgradnje"
+
+msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
+msgid "Enable automatic update check"
+msgstr "Omogući automatsku provjeru nadgradnje"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
+msgid "Check every:"
+msgstr "Provjeri svakih:"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
+msgid "day(s)"
+msgstr "dan(a)"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Settings management"
+msgstr "Upravljanje podešenjima"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
+msgid "Reset"
+msgstr "Resetuj"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
+msgid "Export"
+msgstr "Eksportuj"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
+msgid "Export keys"
+msgstr "Eksportuj tipke"
+
+msgctxt "IDD_TUNER_SCAN_CAPTION"
+msgid "Tuner scan"
+msgstr "Skeniranje tunera"
+
+msgctxt "IDD_TUNER_SCAN_ID_START"
+msgid "Start"
+msgstr "Pokreni"
+
+msgctxt "IDD_TUNER_SCAN_IDCANCEL"
+msgid "Cancel"
+msgstr "Otkaži"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. Start"
+msgstr "Frekv. Start"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Bandwidth"
+msgstr "Propusnost"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. End"
+msgstr "Frekv. Kraj"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
+msgid "Ignore encrypted channels"
+msgstr "Ignoriši kriptovane kanale"
+
+msgctxt "IDD_TUNER_SCAN_ID_SAVE"
+msgid "Save"
+msgstr "Snimi"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "S"
+msgstr "S"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Q"
+msgstr "K"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
+msgid "Use an offset"
+msgstr "Koristi offset"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Default Device"
+msgstr "Podrazumijevani Uređaj"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
+msgid "Analog"
+msgstr "Analogni"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO2"
+msgid "Digital"
+msgstr "Digitalni"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Analog settings"
+msgstr "Analogna Podešenja"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC2"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC3"
+msgid "Country"
+msgstr "Država"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Digital settings (BDA)"
+msgstr "Digitalna podešenja (BDA)"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
+msgid "Network Provider"
+msgstr "Mrežni Operater"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
+msgid "Tuner"
+msgstr "Tjuner"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC6"
+msgid "Receiver"
+msgstr "Prijemnik"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
+msgid "Channel switching approach:"
+msgstr "Pristup promjeni kanala:"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
+msgid "Rebuild filter graph"
+msgstr "Ponovo izgradi grafikon filtera"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
+msgid "Stop filter graph"
+msgstr "Zaustavi grafikon filtera"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
+msgid "Sync video to display"
+msgstr "Sinhronizuj video i display"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
+msgid "Frequency adjustment:"
+msgstr "Podešenje frekvencije:"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
+msgid "Sync display to video"
+msgstr "Sinhronizuj displej sa videom"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
+msgid "Frequency adjustment:"
+msgstr "Podešenje frekvencije:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC3"
+msgid "lines"
+msgstr "linija"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
+msgid "columns"
+msgstr "kolone"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
+msgid "Present at nearest VSync"
+msgstr "Prisutno kod najbližeg VSync-a"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
+msgid "Target sync offset:"
+msgstr "Ciljni offset sinhronizacije:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC7"
+msgid "Control limits:"
+msgstr "Granice kontrole:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
+msgid "+/-"
+msgstr "+/-"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
+msgid "Changes take effect after the playback has been closed and restarted."
+msgstr "Izmjene će biti primijenjene nakon što je reprodukcija zaustavljena i restartovana."
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
+msgid "Launch files in fullscreen"
+msgstr "Pokreni dokumente preko cijelog ekrana"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
+msgid "Hide controls in fullscreen"
+msgstr "Sakrij kontrole u prikazu preko cijelog ekrana"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
+msgid "Hide docked panels"
+msgstr "Sakrij usidrene panele"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
+msgid "Exit fullscreen at the end of playback"
+msgstr "Napusti prikaz preko cijelog ekrana na kraju reprodukcije"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Fullscreen monitor"
+msgstr "Monitor za prikaz preko cijelog ekrana"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
+msgid "Use autochange fullscreen monitor mode"
+msgstr "Koristi modus za automatsku promjenu monitora ca prikaz preko cijelog ekrana"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
+msgid "Add"
+msgstr "Dodaj"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
+msgid "Del"
+msgstr "Izbriši"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
+msgid "Up"
+msgstr "Naviše"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON4"
+msgid "Down"
+msgstr "Naniže"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
+msgid "Apply default monitor mode on fullscreen exit"
+msgstr "Primijeni modus podrazumijevanog monitora pri izlasku iz prikaza preko cijelog ekrana"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
+msgid "Restore resolution on program exit"
+msgstr "Vrati rezoluciju pri izlasku iz programa"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Delay"
+msgstr "Odgoda"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
+msgid "s"
+msgstr "s"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
+msgid "Info"
+msgstr "Info"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_SCAN"
+msgid "Scan"
+msgstr "Skeniraj"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
+msgid "Prefer forced and/or default subtitles tracks"
+msgstr "Preferiraj nametnute i/ili podrazumijevane titlove"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
+msgid "Prefer external subtitles over embedded subtitles"
+msgstr "Preferiraj eksterne titlove umjesto ugrađenih"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
+msgid "Ignore embedded subtitles"
+msgstr "Ignoriši ugrađene titlove"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Autoload paths"
+msgstr "Putanje za automatsko učitavanje"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
+msgid "Reset"
+msgstr "Resetuj"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Online search, download and upload subtitles"
+msgstr "Online pretraga, download i upload titlova"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Automatski traži i download-uj titlove ako nijedan nije pronađen lokalno"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Preferiraj titlove za osobe sa oštećenim sluhom (kada je označeno od strane autora titlova)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignoriši dokumente koji sadrže bilo koju od sljedećih riječi:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Languages in order of preference:"
+msgstr "Jezici po redoslijedu preferiranja:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Automatski upload-uj aktivne titlove na kraju svake video reprodukcije"
+
+msgctxt "IDD_UPDATE_DIALOG_CAPTION"
+msgid "Update Checker"
+msgstr "Provjeravanje Nadgradnje"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
+msgid "&Download now"
+msgstr "&Download-uj sada"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
+msgid "Remind me &later"
+msgstr "Podsjeti me kasnije"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
+msgid "&Ignore this update"
+msgstr "&Ignoriši ovu nadgradnju"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shaders contain special effects which can be added to the video rendering process."
+msgstr "Sjenčila sadrže specijalne efekte koji mogu biti dodani u preoces video renderiranja."
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
+msgid "Add shader file"
+msgstr "Dodaj dokument sjenčila"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
+msgid "Remove"
+msgstr "Ukloni"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
+msgid "Add to pre-resize"
+msgstr "Dodaj u pred-promjenu veličine"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
+msgid "Add to post-resize"
+msgstr "Dodaj u post-promjenu veličine"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shader presets"
+msgstr "Podešenja sjenčila"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
+msgid "Load"
+msgstr "Učitaj"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
+msgid "Save"
+msgstr "Snimi"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON5"
+msgid "Delete"
+msgstr "Izbriši"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active pre-resize shaders"
+msgstr "Aktivna sjenčila za pred-promjenu veličine"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active post-resize shaders"
+msgstr "Aktivna sjenčila za post-promjenu veličine"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
+msgid "Debug Shaders"
+msgstr "Ispravi greške Sjenčila"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
+msgid "Debug Information"
+msgstr "Informacije ispravljanja grešaka"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
+msgid "PS 2.0"
+msgstr "PS 2.0"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO2"
+msgid "PS 2.0b"
+msgstr "PS 2.0b"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO3"
+msgid "PS 2.0a"
+msgstr "PS 2.0a"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO4"
+msgid "PS 3.0"
+msgstr "PS 3.0"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
+msgid "Advanced Settings, do not edit unless you know what you are doing."
+msgstr "Napredna Podešavanja. Ne mijenjajte osima ako znate šta radite."
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
+msgid "True"
+msgstr "Istina"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
+msgid "False"
+msgstr "Laž"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
+msgid "Default"
+msgstr "Podrazumijevano"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Uređaj"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Ekskluzivni modus"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Dozvoli bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Opcije"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Omogući združivanje stereo kanala (crossfeed za slušalice)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Prekid:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Nivo"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Napomena"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Da bi minimizirali distorziju zvuka, preporučljivo je da nivo zvuka player-a držite oko 85% tokom reprodukcije glasnog i slabo kompresovanog sadržaja."
+
+msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG kvalitet:"
+
+msgctxt "IDD_CMD_LINE_HELP_CAPTION"
+msgid "Command line help"
+msgstr "Pomoć iz komandne linije"
+
+msgctxt "IDD_CMD_LINE_HELP_IDOK"
+msgid "OK"
+msgstr "Uredu"
+
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Prijavljivač 'pada'"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Žao nam je, izgleda ga je MPC-HC upravo 'pao' :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Pošaljite bug izvještaj da nam pomognete da utvrdimo i portavimo problem."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Opcione informacije"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Email:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Vaša email adresa je opcionalna i biće korištena ako vas programeri trebaju kontaktirati za više informacija."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Opis problema (koristite isključivo Engleski):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Restartuj MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Napusti MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.menus.po
new file mode 100644
index 000000000..12fc3dd5a
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.menus.po
@@ -0,0 +1,711 @@
+# MPC-HC - Strings extracted from menus
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Samir Gutić <amicussamir@amicus.ba>, 2016
+# smajo burek <smajo@mail.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-04-29 17:30+0000\n"
+"Last-Translator: smajo burek <smajo@mail.com>\n"
+"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/mpc-hc/mpc-hc/language/bs_BA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bs_BA\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "POPUP"
+msgid "&File"
+msgstr "&Dokument"
+
+msgctxt "ID_FILE_OPENQUICK"
+msgid "&Quick Open File..."
+msgstr "Brzo Otvaranje Dokumenta..."
+
+msgctxt "ID_FILE_OPENMEDIA"
+msgid "&Open File..."
+msgstr "&Otvori Dokument..."
+
+msgctxt "ID_FILE_OPENDVDBD"
+msgid "Open &DVD/BD..."
+msgstr "Otvori &DVD/BD..."
+
+msgctxt "ID_FILE_OPENDEVICE"
+msgid "Open De&vice..."
+msgstr "Otvori Uređaj"
+
+msgctxt "ID_FILE_OPENDIRECTORY"
+msgid "Open Dir&ectory..."
+msgstr "Otvori Dokument..."
+
+msgctxt "ID_FILE_OPENDISC"
+msgid "O&pen Disc"
+msgstr "Otvori Disk"
+
+msgctxt "ID_RECENT_FILES"
+msgid "Recent &Files"
+msgstr "Skorašnji Dokumenti"
+
+msgctxt "ID_FILE_CLOSE_AND_RESTORE"
+msgid "&Close"
+msgstr "Zatvori"
+
+msgctxt "ID_FILE_SAVE_COPY"
+msgid "&Save a Copy..."
+msgstr "&Spasi Kopiju..."
+
+msgctxt "ID_FILE_SAVE_IMAGE"
+msgid "Save &Image..."
+msgstr "Spasi Sliku..."
+
+msgctxt "ID_FILE_SAVE_THUMBNAILS"
+msgid "Save &Thumbnails..."
+msgstr "Snimi Sličice..."
+
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "Titlovi"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Učitaj Tit&love..."
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Snimi Titlove"
+
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Download-uj Titlove..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Upload-uj Titlove..."
+
+msgctxt "ID_FILE_PROPERTIES"
+msgid "P&roperties"
+msgstr "Svojstva"
+
+msgctxt "ID_FILE_EXIT"
+msgid "E&xit"
+msgstr "Izlaz"
+
+msgctxt "POPUP"
+msgid "&View"
+msgstr "Prikaz"
+
+msgctxt "ID_VIEW_CAPTIONMENU"
+msgid "Caption&&Menu"
+msgstr "Naslov i Meni"
+
+msgctxt "ID_VIEW_SEEKER"
+msgid "See&k Bar"
+msgstr "Traka za Traženje"
+
+msgctxt "ID_VIEW_CONTROLS"
+msgid "&Controls"
+msgstr "Kontrole"
+
+msgctxt "ID_VIEW_INFORMATION"
+msgid "&Information"
+msgstr "&Informacija"
+
+msgctxt "ID_VIEW_STATISTICS"
+msgid "&Statistics"
+msgstr "&Statistika"
+
+msgctxt "ID_VIEW_STATUS"
+msgid "St&atus"
+msgstr "St&atus"
+
+msgctxt "ID_VIEW_SUBRESYNC"
+msgid "Su&bresync"
+msgstr "Resinhronizacija titla"
+
+msgctxt "ID_VIEW_PLAYLIST"
+msgid "Pla&ylist"
+msgstr "Pla&ylista"
+
+msgctxt "ID_VIEW_CAPTURE"
+msgid "Captu&re"
+msgstr "Snimanje"
+
+msgctxt "ID_VIEW_NAVIGATION"
+msgid "Na&vigation"
+msgstr "Na&vigacija"
+
+msgctxt "ID_VIEW_DEBUGSHADERS"
+msgid "&Debug Shaders"
+msgstr "Ispravi greške Sjenčila"
+
+msgctxt "POPUP"
+msgid "&Presets..."
+msgstr "&Podešenja..."
+
+msgctxt "ID_VIEW_PRESETS_MINIMAL"
+msgid "&Minimal"
+msgstr "&Minimalni"
+
+msgctxt "ID_VIEW_PRESETS_COMPACT"
+msgid "&Compact"
+msgstr "Kompaktni"
+
+msgctxt "ID_VIEW_PRESETS_NORMAL"
+msgid "&Normal"
+msgstr "&Normalni"
+
+msgctxt "ID_VIEW_FULLSCREEN"
+msgid "F&ull Screen"
+msgstr "Na cijeli ekran"
+
+msgctxt "POPUP"
+msgid "&Zoom"
+msgstr "&Zum"
+
+msgctxt "ID_VIEW_ZOOM_50"
+msgid "&50%"
+msgstr "&50%"
+
+msgctxt "ID_VIEW_ZOOM_100"
+msgid "&100%"
+msgstr "&100%"
+
+msgctxt "ID_VIEW_ZOOM_200"
+msgid "&200%"
+msgstr "&200%"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT"
+msgid "Auto &Fit"
+msgstr "Automatska Veličina"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (&Larger Only)"
+msgstr "Automatska Veličina (Samo Ve&liki)"
+
+msgctxt "POPUP"
+msgid "R&enderer Settings"
+msgstr "Podešenja R&enderiranja"
+
+msgctxt "ID_VIEW_TEARING_TEST"
+msgid "&Tearing Test"
+msgstr "&Test Trganja"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "Prikaži Statistiku"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Prikaži Trenutno vr&ijeme"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Prkaži Ime Dokumenta"
+
+msgctxt "POPUP"
+msgid "&Output Range"
+msgstr "Izlazni Rasp&on"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
+msgid "&0 - 255"
+msgstr "&0 - 255"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
+msgid "&16 - 235"
+msgstr "&16 - 235"
+
+msgctxt "POPUP"
+msgid "&Presentation"
+msgstr "&Prezentacija"
+
+msgctxt "ID_VIEW_D3DFULLSCREEN"
+msgid "D3D Fullscreen &Mode"
+msgstr "D3D Modus Preko Cijelog ekrana"
+
+msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
+msgid "D3D Fullscreen &GUI Support"
+msgstr "&GUI Podrška za D3D Prikaz preko cijelog ekrana"
+
+msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
+msgid "10-bit &RGB Output"
+msgstr "10-bit &RGB Izlaz"
+
+msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
+msgid "Force 10-bit RGB &Input"
+msgstr "Nametn&i 10-bit RGB Ulaz"
+
+msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
+msgid "&Full Floating Point Processing"
+msgstr "Puno Procesiranje Realnih Brojeva"
+
+msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
+msgid "&Half Floating Point Processing"
+msgstr "Polu Procesiranje Realnih Brojeva"
+
+msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
+msgid "Disable desktop composition (&Aero)"
+msgstr "Onemogući desktop kompoziciju (&Aero)"
+
+msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time &Correction"
+msgstr "Omogući Korek&ciju Vremena Isječka"
+
+msgctxt "POPUP"
+msgid "&Color Management"
+msgstr "Upravljanje Bojom"
+
+msgctxt "ID_VIEW_CM_ENABLE"
+msgid "&Enable"
+msgstr "Omogući"
+
+msgctxt "POPUP"
+msgid "&Input Type"
+msgstr "Ulazn&i Tip"
+
+msgctxt "ID_VIEW_CM_INPUT_AUTO"
+msgid "&Auto-Detect"
+msgstr "&Auto-Detekcija"
+
+msgctxt "ID_VIEW_CM_INPUT_HDTV"
+msgid "&HDTV"
+msgstr "&HDTV"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
+msgid "SDTV &NTSC"
+msgstr "SDTV &NTSC"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
+msgid "SDTV &PAL"
+msgstr "SDTV &PAL"
+
+msgctxt "POPUP"
+msgid "Ambient &Light"
+msgstr "Svjet&lo Okruženja"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
+msgid "&Bright (2.2 Gamma)"
+msgstr "Svijetlo (2.2 Gama)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
+msgid "&Dim (2.35 Gamma)"
+msgstr "Prigušeno (2.35 Gama)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
+msgid "D&ark (2.4 Gamma)"
+msgstr "T&amno (2.4 Gama)"
+
+msgctxt "POPUP"
+msgid "&Rendering Intent"
+msgstr "Namjera &Renderiranja"
+
+msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
+msgid "&Perceptual"
+msgstr "&Po osjećaju"
+
+msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
+msgid "&Relative Colorimetric"
+msgstr "&Relativna metrika boje"
+
+msgctxt "ID_VIEW_CM_INTENT_SATURATION"
+msgid "&Saturation"
+msgstr "Za&sićenje"
+
+msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
+msgid "&Absolute Colorimetric"
+msgstr "&Apsolutna metrika boje"
+
+msgctxt "POPUP"
+msgid "&VSync"
+msgstr "&VSinhronizacija"
+
+msgctxt "ID_VIEW_VSYNC"
+msgid "&VSync"
+msgstr "&VSinhronizacija"
+
+msgctxt "ID_VIEW_VSYNCACCURATE"
+msgid "&Accurate VSync"
+msgstr "Preciz&an VSync"
+
+msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
+msgid "A&lternative VSync"
+msgstr "A&lternativni VSync"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
+msgid "&Decrease VSync Offset"
+msgstr "Smanji VSync Offset"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
+msgid "&Increase VSync Offset"
+msgstr "Povećaj VSync Offset"
+
+msgctxt "POPUP"
+msgid "&GPU Control"
+msgstr "&GPU Kontrola"
+
+msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
+msgid "Flush GPU &before VSync"
+msgstr "Isprazni GPU prije VSync"
+
+msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
+msgid "Flush GPU &after Present"
+msgstr "Isprazni GPU n&akon Trenutnog"
+
+msgctxt "ID_VIEW_FLUSHGPU_WAIT"
+msgid "&Wait for flushes"
+msgstr "Sačekaj na pražnjenja"
+
+msgctxt "POPUP"
+msgid "R&eset"
+msgstr "R&esetuj"
+
+msgctxt "ID_VIEW_RESET_DEFAULT"
+msgid "Reset to &default renderer settings"
+msgstr "Resetuj na po&drazumijevana podešenja rendereriranja"
+
+msgctxt "ID_VIEW_RESET_OPTIMAL"
+msgid "Reset to &optimal renderer settings"
+msgstr "Resetuj na &optimalna podešenja rendereriranja"
+
+msgctxt "POPUP"
+msgid "Video &Frame"
+msgstr "Video Isječak"
+
+msgctxt "ID_VIEW_VF_HALF"
+msgid "&Half Size"
+msgstr "Pola Veličine"
+
+msgctxt "ID_VIEW_VF_NORMAL"
+msgid "&Normal Size"
+msgstr "&Normalna Veličina"
+
+msgctxt "ID_VIEW_VF_DOUBLE"
+msgid "&Double Size"
+msgstr "&Dvostruka Veličina"
+
+msgctxt "ID_VIEW_VF_STRETCH"
+msgid "&Stretch To Window"
+msgstr "Ra&stegni na veličinu prozora"
+
+msgctxt "ID_VIEW_VF_FROMINSIDE"
+msgid "Touch Window From &Inside"
+msgstr "Dodirni Prozor &Iznutra"
+
+msgctxt "ID_VIEW_VF_ZOOM1"
+msgid "Zoom &1"
+msgstr "Zum &1"
+
+msgctxt "ID_VIEW_VF_ZOOM2"
+msgid "Zoom &2"
+msgstr "Zum &2"
+
+msgctxt "ID_VIEW_VF_FROMOUTSIDE"
+msgid "Touch Window From &Outside"
+msgstr "Dodirni Prozor Izvana"
+
+msgctxt "POPUP"
+msgid "&Aspect Ratio"
+msgstr "Razmjera"
+
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Po&drazumijevano (DAR)"
+
+msgctxt "ID_ASPECTRATIO_4_3"
+msgid "&4:3"
+msgstr "&4:3"
+
+msgctxt "ID_ASPECTRATIO_5_4"
+msgid "&5:4"
+msgstr "&5:4"
+
+msgctxt "ID_ASPECTRATIO_16_9"
+msgid "&16:9"
+msgstr "&16:9"
+
+msgctxt "ID_ASPECTRATIO_235_100"
+msgid "&235:100"
+msgstr "&235:100"
+
+msgctxt "ID_ASPECTRATIO_185_100"
+msgid "1&85:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Podrazumijevano da su kvadratni pik&seli (SAR)"
+
+msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
+msgid "&Correct Monitor/Desktop AR Diff"
+msgstr "Popravi Monitor/Desktop AR Diff"
+
+msgctxt "POPUP"
+msgid "Pa&n&&Scan"
+msgstr "Pa&n&&Scan"
+
+msgctxt "ID_VIEW_INCSIZE"
+msgid "&Increase Size"
+msgstr "Povećaj Veličinu"
+
+msgctxt "ID_VIEW_DECSIZE"
+msgid "&Decrease Size"
+msgstr "Smanji Veličinu"
+
+msgctxt "ID_VIEW_INCWIDTH"
+msgid "I&ncrease Width"
+msgstr "Povećaj Širinu"
+
+msgctxt "ID_VIEW_DECWIDTH"
+msgid "D&ecrease Width"
+msgstr "Smanji Širinu"
+
+msgctxt "ID_VIEW_INCHEIGHT"
+msgid "In&crease Height"
+msgstr "Povećaj Visinu"
+
+msgctxt "ID_VIEW_DECHEIGHT"
+msgid "Decre&ase Height"
+msgstr "Sm&anji Visinu"
+
+msgctxt "ID_PANSCAN_MOVERIGHT"
+msgid "Move &Right"
+msgstr "Pomakni desno"
+
+msgctxt "ID_PANSCAN_MOVELEFT"
+msgid "Move &Left"
+msgstr "Pomakni &Lijevo"
+
+msgctxt "ID_PANSCAN_MOVEUP"
+msgid "Move &Up"
+msgstr "Pomakni Gore"
+
+msgctxt "ID_PANSCAN_MOVEDOWN"
+msgid "Move &Down"
+msgstr "Pomakni &Dole"
+
+msgctxt "ID_PANSCAN_CENTER"
+msgid "Cen&ter"
+msgstr "Cen&triraj"
+
+msgctxt "ID_VIEW_RESET"
+msgid "Re&set"
+msgstr "Re&setuj"
+
+msgctxt "POPUP"
+msgid "On &Top"
+msgstr "Na Vrhu"
+
+msgctxt "ID_ONTOP_DEFAULT"
+msgid "&Default"
+msgstr "Po&drazumijevano"
+
+msgctxt "ID_ONTOP_ALWAYS"
+msgid "&Always"
+msgstr "Uvijek"
+
+msgctxt "ID_ONTOP_WHILEPLAYING"
+msgid "While &Playing"
+msgstr "Tokom Re&produkcije"
+
+msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
+msgid "While Playing &Video"
+msgstr "Tokom Reprodukcije &Videa"
+
+msgctxt "ID_VIEW_OPTIONS"
+msgid "&Options..."
+msgstr "&Opcije..."
+
+msgctxt "POPUP"
+msgid "&Play"
+msgstr "Re&produkcija"
+
+msgctxt "ID_PLAY_PLAYPAUSE"
+msgid "&Play/Pause"
+msgstr "Reprodukuj/&Pauziraj"
+
+msgctxt "ID_PLAY_STOP"
+msgid "&Stop"
+msgstr "Zau&stavi"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Fra&me Step"
+msgstr "Korak Isječka"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Ponovi"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Zauvijek"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Dokument"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Playlista"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "&Decrease Rate"
+msgstr "Smanji Tempo"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "&Increase Rate"
+msgstr "Povećaj Tempo"
+
+msgctxt "ID_PLAY_RESETRATE"
+msgid "R&eset Rate"
+msgstr "R&esetuj Tempo"
+
+msgctxt "ID_FILTERS"
+msgid "&Filters"
+msgstr "&Filteri"
+
+msgctxt "ID_SHADERS"
+msgid "S&haders"
+msgstr "Sjenčila"
+
+msgctxt "ID_AUDIOS"
+msgid "&Audio Track"
+msgstr "&Audio Zapis"
+
+msgctxt "ID_SUBTITLES"
+msgid "Su&btitle Track"
+msgstr "Zapis Titla"
+
+msgctxt "ID_VIDEO_STREAMS"
+msgid "Vide&o Track"
+msgstr "Vide&o Zapis"
+
+msgctxt "POPUP"
+msgid "&Volume"
+msgstr "Jačina z&vuka"
+
+msgctxt "ID_VOLUME_UP"
+msgid "&Up"
+msgstr "Pojačaj"
+
+msgctxt "ID_VOLUME_DOWN"
+msgid "&Down"
+msgstr "Smanji"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "&Mute"
+msgstr "Isključi ton"
+
+msgctxt "POPUP"
+msgid "Af&ter Playback"
+msgstr "Nakon Reprodukcije"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Ne radi niš&ta"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Pokreni &naredni dokument u direktoriju"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Isključi &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
+msgid "&Exit"
+msgstr "Izađi"
+
+msgctxt "ID_AFTERPLAYBACK_STANDBY"
+msgid "&Stand By"
+msgstr "&Stani pripravnosti"
+
+msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
+msgid "&Hibernate"
+msgstr "&Hibernacija"
+
+msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
+msgid "Shut&down"
+msgstr "Gašenje"
+
+msgctxt "ID_AFTERPLAYBACK_LOGOFF"
+msgid "Log &Off"
+msgstr "&Odloguj se"
+
+msgctxt "ID_AFTERPLAYBACK_LOCK"
+msgid "&Lock"
+msgstr "Zak&ljučaj"
+
+msgctxt "POPUP"
+msgid "&Navigate"
+msgstr "&Navigacija"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "&Previous"
+msgstr "&Prethodni"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "&Next"
+msgstr "Sljedeći"
+
+msgctxt "ID_NAVIGATE_GOTO"
+msgid "&Go To..."
+msgstr "Idi Na..."
+
+msgctxt "ID_NAVIGATE_TITLEMENU"
+msgid "&Title Menu"
+msgstr "Naslovni Meni"
+
+msgctxt "ID_NAVIGATE_ROOTMENU"
+msgid "&Root Menu"
+msgstr "Ko&rijenski Meni"
+
+msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
+msgid "&Subtitle Menu"
+msgstr "Meni Titlova"
+
+msgctxt "ID_NAVIGATE_AUDIOMENU"
+msgid "&Audio Menu"
+msgstr "&Audio Meni"
+
+msgctxt "ID_NAVIGATE_ANGLEMENU"
+msgid "An&gle Menu"
+msgstr "Meni U&gla"
+
+msgctxt "ID_NAVIGATE_CHAPTERMENU"
+msgid "&Chapter Menu"
+msgstr "Meni Poglavlja"
+
+msgctxt "ID_FAVORITES"
+msgid "F&avorites"
+msgstr "Omiljeni"
+
+msgctxt "POPUP"
+msgid "&Help"
+msgstr "Pomoć"
+
+msgctxt "ID_HELP_HOMEPAGE"
+msgid "&Home Page"
+msgstr "&Home Page"
+
+msgctxt "ID_HELP_CHECKFORUPDATE"
+msgid "Check for &updates"
+msgstr "Provjeri nadgradnje"
+
+msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
+msgid "&Command Line Switches"
+msgstr "Prekidači Komandne Linije"
+
+msgctxt "ID_HELP_TOOLBARIMAGES"
+msgid "Download &Toolbar Images"
+msgstr "Download-uj slike Alatne &Trake"
+
+msgctxt "ID_HELP_DONATE"
+msgid "&Donate"
+msgstr "&Doniraj"
+
+msgctxt "ID_HELP_ABOUT"
+msgid "&About..."
+msgstr "O programu..."
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.strings.po
new file mode 100644
index 000000000..081818dce
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.bs_BA.strings.po
@@ -0,0 +1,3970 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Samir Gutić <amicussamir@amicus.ba>, 2016-2017
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-07 15:27+0000\n"
+"Last-Translator: Samir Gutić <amicussamir@amicus.ba>\n"
+"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/mpc-hc/mpc-hc/language/bs_BA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bs_BA\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "IDS_INFOBAR_LOCATION"
+msgid "Location"
+msgstr "Lokacija"
+
+msgctxt "IDS_INFOBAR_VIDEO"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDS_INFOBAR_AUDIO"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDS_INFOBAR_SUBTITLES"
+msgid "Subtitles"
+msgstr "Titlovi"
+
+msgctxt "IDS_INFOBAR_CHAPTER"
+msgid "Chapter"
+msgstr "Poglavlje"
+
+msgctxt "IDS_CONTROLS_COMPLETING"
+msgid "Completing..."
+msgstr "Završavanje..."
+
+msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
+msgid "Play Video"
+msgstr "Pokreni Video"
+
+msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
+msgid "Play Music"
+msgstr "Pokreni Muziku"
+
+msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
+msgid "Play Audio CD"
+msgstr "Pokreni Audio CD"
+
+msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
+msgid "Play DVD Movie"
+msgstr "Pokreni DVD Film"
+
+msgctxt "IDS_PROPSHEET_PROPERTIES"
+msgid "Properties"
+msgstr "Svojstva"
+
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Dokument"
+
+msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
+msgid "&Default Style"
+msgstr "Podrazumijevani Stil"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Playlista"
+
+msgctxt "IDS_FAVFILES"
+msgid "Files"
+msgstr "Dokumenti"
+
+msgctxt "IDS_FAVDVDS"
+msgid "DVDs"
+msgstr "DVD-ovi"
+
+msgctxt "IDS_INFOBAR_CHANNEL"
+msgid "Channel"
+msgstr "Kanal"
+
+msgctxt "IDS_INFOBAR_TIME"
+msgid "Time"
+msgstr "Vrijeme"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET"
+msgid "Sync Offset"
+msgstr "Pomak za Sinhronizaciju"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
+msgid "avg: %d ms, dev: %d ms"
+msgstr "pros: %d ms, odst: %d ms"
+
+msgctxt "IDS_STATSBAR_JITTER"
+msgid "Jitter"
+msgstr "Prekidanje"
+
+msgctxt "IDS_STATSBAR_BITRATE"
+msgid "Bitrate"
+msgstr "Brzina prijenosa"
+
+msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
+msgid "(avg/cur)"
+msgstr "(pros/tren)"
+
+msgctxt "IDS_STATSBAR_SIGNAL"
+msgid "Signal"
+msgstr "Signal"
+
+msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
+msgid "Strength: %d dB, Quality: %ld%%"
+msgstr "Snaga: %d dB, Kvalitet: %ld%%"
+
+msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
+msgid "Styles"
+msgstr "Stilovi"
+
+msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
+msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
+msgstr "Ako je cilj renderiranja ostavljen nedefinisan, SSA/ASS titlovi će biti renderirani relativno u odnosu na video isječak dok će svi ostali titlovi biti renderirani relativno u odnosu na prozor."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Modus Ponavljanja: Playlista"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Repeat Mode: Dokument"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Ponavljanje Unedogled: Uključeno"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Ponavljanje Unedogled: Isključeno"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Ponavljanje Unedogled"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG0"
+msgid "Never (fastest approach)"
+msgstr "Nikad (najbrži pristup)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG1"
+msgid "Only when switching different video types (default)"
+msgstr "Samo pri prelasku na različite tipove videa (podrazumijevano)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG2"
+msgid "Always (slowest option)"
+msgstr "Uvijek (najsporija opcija)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
+msgid "Not supported by some devices. Two video decoders always present in the filter graph."
+msgstr "Neki uređaji ne podržavaju. Dva video dekodera uvijek prisutna u filter grafikonu."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
+msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
+msgstr "Brzo, osim pri prebacivanju između različitih video tokova. U filter grafikonu je prisutan samo jedan video dekoder."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
+msgid "Not recommended. Only for testing purposes."
+msgstr "Nije preporučeno. Samo u svrhu testiranja."
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG0"
+msgid "Never if possible (fastest, but not supported by most filters)"
+msgstr "Ako je moguće, nikada (najbrže, ali nije podržano od strane većine filtera)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG1"
+msgid "Only when switching different video types (default)"
+msgstr "Samo pri prelasku na različite tipove videa (podrazumijevano)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG2"
+msgid "Always (may be required by some devices)"
+msgstr "Uvijek (može biti obavezno za neke uređaje)"
+
+msgctxt "IDS_INFOBAR_PARENTAL_RATING"
+msgid "Parental rating"
+msgstr "Roditeljsko ocjenjivanje"
+
+msgctxt "IDS_PARENTAL_RATING"
+msgid "%d+"
+msgstr "%d+"
+
+msgctxt "IDS_NO_PARENTAL_RATING"
+msgid "Not rated"
+msgstr "Nije ocijenjeno"
+
+msgctxt "IDS_INFOBAR_CONTENT"
+msgid "Content"
+msgstr "Sadržaj"
+
+msgctxt "IDS_CONTENT_MOVIE_DRAMA"
+msgid "Movie/Drama"
+msgstr "Film/Drama"
+
+msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
+msgid "News/Current affairs"
+msgstr "Vijesti/Trenutna događanja"
+
+msgctxt "IDS_SPEED_UNIT_G"
+msgid "GB/s"
+msgstr "GB/s"
+
+msgctxt "IDS_FILE_FAV_ADDED"
+msgid "File added to favorites"
+msgstr "Dokument je dodan u omiljene"
+
+msgctxt "IDS_DVD_FAV_ADDED"
+msgid "DVD added to favorites"
+msgstr "DVD je dodan u omiljene"
+
+msgctxt "IDS_CAPTURE_SETTINGS"
+msgid "Capture Settings"
+msgstr "Podešenja Snimanja"
+
+msgctxt "IDS_NAVIGATION_BAR"
+msgid "Navigation Bar"
+msgstr "Traka za navigaciju"
+
+msgctxt "IDS_SUBRESYNC_CAPTION"
+msgid "Subresync"
+msgstr "Resinhronizacija titlova"
+
+msgctxt "IDS_SUBRESYNC_CLN_TIME"
+msgid "Time"
+msgstr "Vrijeme"
+
+msgctxt "IDS_SUBRESYNC_CLN_END"
+msgid "End"
+msgstr "Kraj"
+
+msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
+msgid "Preview"
+msgstr "Pogledaj"
+
+msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
+msgid "Vob ID"
+msgstr "Vob ID"
+
+msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
+msgid "Cell ID"
+msgstr "ID ćelije"
+
+msgctxt "IDS_SUBRESYNC_CLN_FORCED"
+msgid "Forced"
+msgstr "Nametnuto"
+
+msgctxt "IDS_SUBRESYNC_CLN_TEXT"
+msgid "Text"
+msgstr "Tekst"
+
+msgctxt "IDS_SUBRESYNC_CLN_STYLE"
+msgid "Style"
+msgstr "Stil"
+
+msgctxt "IDS_SUBRESYNC_CLN_FONT"
+msgid "Font"
+msgstr "Tip slova"
+
+msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
+msgid "Failed to render some of the pins of the DVD Navigator filter"
+msgstr "Nije uspjelo renderiranje nekih pinova DVD Navigacionog filtera"
+
+msgctxt "IDS_DVD_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for DVD playback"
+msgstr "Nije uspio upit za potrebnim sučeljem za DVD reprodukciju"
+
+msgctxt "IDS_CAPTURE_LIVE"
+msgid "Live"
+msgstr "Uživo"
+
+msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
+msgid "Can't add video capture filter to the graph"
+msgstr "Na grafikon nije moguće dodati video filter za snimanje"
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
+msgid "Can't add audio capture filter to the graph"
+msgstr "Na grafikon nije moguće dodati audio filter za snimanje"
+
+msgctxt "IDS_CAPTURE_ERROR_DEVICE"
+msgid "Could not open capture device."
+msgstr "Nije moguće otvoriti uređaj za snimanje."
+
+msgctxt "IDS_INVALID_PARAMS_ERROR"
+msgid "Can't open, invalid input parameters"
+msgstr "Nije moguće otvoriti, neispravni ulazni parametri"
+
+msgctxt "IDS_EDIT_LIST_EDITOR"
+msgid "Edit List Editor"
+msgstr "Izmijeni Uređivač Liste"
+
+msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
+msgid "The entered time is greater than the file duration."
+msgstr "Uneseno vrijeme je veće od trajanja dokumenta."
+
+msgctxt "IDS_MISSING_ICONS_LIB"
+msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
+msgstr "Nedostaje biblioteka ikonica \"mpciconlib.dll\".\nZa asocijacije sa dokumentima će biti korištena podrazumijevana ikonica player-a.\nMolimo ponovo instalirajte MPC-HC da bi dobili \"mpciconlib.dll\"."
+
+msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
+msgid "File"
+msgstr "Dokument"
+
+msgctxt "IDS_SUBDL_DLG_LANGUAGE_COL"
+msgid "Language"
+msgstr "Jezik"
+
+msgctxt "IDS_SUBDL_DLG_FORMAT_COL"
+msgid "Format"
+msgstr "Format"
+
+msgctxt "IDS_SUBDL_DLG_DISC_COL"
+msgid "Disc"
+msgstr "Disk"
+
+msgctxt "IDS_SUBDL_DLG_TITLES_COL"
+msgid "Title(s)"
+msgstr "Naslov(i)"
+
+msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
+msgid "CharSet"
+msgstr "SkupZnakova"
+
+msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
+msgid "Unicode"
+msgstr "Unikod"
+
+msgctxt "IDS_SUBRESYNC_CLN_LAYER"
+msgid "Layer"
+msgstr "Sloj"
+
+msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
+msgid "Actor"
+msgstr "Glumac"
+
+msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
+msgid "Effect"
+msgstr "Efekt"
+
+msgctxt "IDS_PLAYLIST_CAPTION"
+msgid "Playlist"
+msgstr "Playlista"
+
+msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
+msgid "On/Off"
+msgstr "Uključno/Isključeno"
+
+msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
+msgid "From (FPS)"
+msgstr "Od (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
+msgid "To (FPS)"
+msgstr "Do (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
+msgid "Display mode (Hz)"
+msgstr "Modus display-a (Hz)"
+
+msgctxt "IDS_PPAGE_FS_DEFAULT"
+msgid "Default"
+msgstr "Podrazumijevano"
+
+msgctxt "IDS_PPAGE_FS_OTHER"
+msgid "Other"
+msgstr "Ostalo"
+
+msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
+msgid "System Default"
+msgstr "Sistemski Podrazumijevano"
+
+msgctxt "IDS_GRAPH_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for playback"
+msgstr "Nije uspio upit za sučeljem potrebnim za reprodukciju"
+
+msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
+msgid "Could not set target window for graph notification"
+msgstr "Nije bilo moguće postaviti prozor za obavještenje grafikona"
+
+msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
+msgid "Failed to render all pins of the DVD Navigator filter"
+msgstr "Nije uspjelo renderiranje svih pinova filtera DVD Navigatora"
+
+msgctxt "IDS_PLAYLIST_OPEN"
+msgid "&Open"
+msgstr "&Otvori"
+
+msgctxt "IDS_PLAYLIST_ADD"
+msgid "A&dd"
+msgstr "&Dodaj"
+
+msgctxt "IDS_PLAYLIST_REMOVE"
+msgid "&Remove"
+msgstr "Ukloni"
+
+msgctxt "IDS_PLAYLIST_CLEAR"
+msgid "C&lear"
+msgstr "Počisti"
+
+msgctxt "IDS_PLAYLIST_COPYTOCLIPBOARD"
+msgid "&Copy to clipboard"
+msgstr "Kopiraj u &clipboard"
+
+msgctxt "IDS_PLAYLIST_SAVEAS"
+msgid "&Save As..."
+msgstr "&Snimi Kao..."
+
+msgctxt "IDS_PLAYLIST_SORTBYLABEL"
+msgid "Sort by &label"
+msgstr "Sortiraj po &labeli"
+
+msgctxt "IDS_PLAYLIST_SORTBYPATH"
+msgid "Sort by &path"
+msgstr "Sortiraj po &putanji"
+
+msgctxt "IDS_PLAYLIST_RANDOMIZE"
+msgid "R&andomize"
+msgstr "Po sluč&ajnom redoslijedu"
+
+msgctxt "IDS_PLAYLIST_RESTORE"
+msgid "R&estore"
+msgstr "Vrati"
+
+msgctxt "IDS_SUBRESYNC_SEPARATOR"
+msgid "&Separator"
+msgstr "&Separator"
+
+msgctxt "IDS_SUBRESYNC_DELETE"
+msgid "&Delete"
+msgstr "Izbriši"
+
+msgctxt "IDS_SUBRESYNC_DUPLICATE"
+msgid "D&uplicate"
+msgstr "D&upliciraj"
+
+msgctxt "IDS_SUBRESYNC_RESET"
+msgid "&Reset"
+msgstr "&Resetuj"
+
+msgctxt "IDS_MPLAYERC_104"
+msgid "Subtitle Delay -"
+msgstr "Kašnjenje Titla -"
+
+msgctxt "IDS_MPLAYERC_105"
+msgid "Subtitle Delay +"
+msgstr "Kašnjenje Titla +"
+
+msgctxt "IDS_FILE_SAVE_THUMBNAILS"
+msgid "Save thumbnails"
+msgstr "Sačuvaj sličice"
+
+msgctxt "IDD_PPAGEPLAYBACK"
+msgid "Playback"
+msgstr "Reprodukcija"
+
+msgctxt "IDD_PPAGEPLAYER"
+msgid "Player"
+msgstr "Player"
+
+msgctxt "IDD_PPAGEDVD"
+msgid "Playback::DVD/OGM"
+msgstr "Reprodukcija::DVD/OGM"
+
+msgctxt "IDD_PPAGESUBTITLES"
+msgid "Subtitles"
+msgstr "Titlovi"
+
+msgctxt "IDD_PPAGEFORMATS"
+msgid "Player::Formats"
+msgstr "Player::Formati"
+
+msgctxt "IDD_PPAGETWEAKS"
+msgid "Tweaks"
+msgstr "Fino podešavanje"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER"
+msgid "Internal Filters::Audio Switcher"
+msgstr "Interni Filteri::Audio Preklopnik"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS"
+msgid "External Filters"
+msgstr "Eksterni Filteri"
+
+msgctxt "IDD_PPAGESHADERS"
+msgid "Playback::Shaders"
+msgstr "Reprodukcija::Sjenčila"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Resursi"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Razno"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Reprodukcija::Snimanje"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Reprodukcija::Podešenja Sinhronizacije Renderiranja"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Reprodukcija::Cijeli ekran"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Interni Filteri::Audio Renderer"
+
+msgctxt "IDS_AUDIOSWITCHER"
+msgid "Audio Switcher"
+msgstr "Audio Preklopnik"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
+msgid "New version of the icon library"
+msgstr "Nov averzija biblioteke ikonica"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
+msgid "Do you want to reassociate the icons?"
+msgstr "Želite li ponovo dodijeliti ikonice?"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
+msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
+msgstr "Ovo će popraviti ikonice koje nisu ispravno prikazane nakon nadgradnje biblioteke ikonica.\nAsocijacije dokumenata neće biti mijenjane, biće osvježene samo odgovarajuće ikonice."
+
+msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
+msgid "Old Video Renderer"
+msgstr "Stari Video Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
+msgid "Overlay Mixer Renderer"
+msgstr "Overay Mikser Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
+msgid "Video Mixing Renderer 9 (windowed)"
+msgstr "Renderer za Video Miksanje (u prozoru)"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
+msgid "Video Mixing Renderer 9 (renderless)"
+msgstr "Renderer za Video Miksanje (bez renderiranja)"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR"
+msgid "Enhanced Video Renderer"
+msgstr "Napredni Video Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
+msgid "Enhanced Video Renderer (custom presenter)"
+msgstr "Napredni Video Renderer (prezenter po mjeri)"
+
+msgctxt "IDS_PPAGE_OUTPUT_DXR"
+msgid "Haali Video Renderer"
+msgstr "Haali Video Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Null (bilo šta)"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Null (bez kompresije)"
+
+msgctxt "IDS_PPAGE_OUTPUT_MADVR"
+msgid "madVR"
+msgstr "madVR"
+
+msgctxt "IDD_PPAGEACCELTBL"
+msgid "Player::Keys"
+msgstr "Player::Tipke"
+
+msgctxt "IDD_PPAGESUBSTYLE"
+msgid "Subtitles::Default Style"
+msgstr "Titlovi::Podrazumijevani Stil"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS"
+msgid "Internal Filters"
+msgstr "Interni Filteri"
+
+msgctxt "IDD_PPAGELOGO"
+msgid "Player::Logo"
+msgstr "Player::Logo"
+
+msgctxt "IDD_PPAGEOUTPUT"
+msgid "Playback::Output"
+msgstr "Reprodukcija::Izlaz"
+
+msgctxt "IDD_PPAGEWEBSERVER"
+msgid "Player::Web Interface"
+msgstr "Player::Web Sučelje"
+
+msgctxt "IDD_FILEPROPDETAILS"
+msgid "Details"
+msgstr "Detalji"
+
+msgctxt "IDD_FILEPROPCLIP"
+msgid "Clip"
+msgstr "Isječak"
+
+msgctxt "IDC_DSSYSDEF"
+msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
+msgstr "Podrazumijevani video renderer filter za DirectShow. Ostali će pasti na ovaj kada ne mogu biti učitani iz nekog razloga. Na Windows XP to je isto što i VMR-7 (u prozoru)."
+
+msgctxt "IDC_DSOLD"
+msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
+msgstr "Ovo je podrazumijevani renderer za Windows 9x/me/2k. Odvisno od vidljivosti video prozora i mogućnosti vaše video kartice, biće dinamički preklapano između GDI, DirectDraw i Overlay modusa renderiranja."
+
+msgctxt "IDC_DSOVERLAYMIXER"
+msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
+msgstr "Uvijek renderira u overlay. Generalno su dozvoljeni samo YUV formati, ali su prezentovani direktno bez bilo kakve konverzije u RGB. Ovo je najbrži metod renderiranja i jedini gdje možete biti sigurni u aktivaciju video miroring-a preko cijelog ekrana na tv izlaz."
+
+msgctxt "IDC_DSVMR9WIN"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Dostupno samo ako imate instaliran DirectX 9. Vrlo stabilan, ali nikada neće koristiti Overlay renderiranje i zbog toga može biti malo sporiji nego Overlay mikser."
+
+msgctxt "IDC_DSVMR9REN"
+msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
+msgstr "Isto kao VMR-9 (u prozoru), ali sa MPC-HC Allocator-Presenter dodatkom za titlovanje. Overlay video mirroring MOŽE raditi. Preporučen jeizbor \"True Color\" za desktop boju. Preporučljivo za Windows XP."
+
+msgctxt "IDC_DSDXR"
+msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
+msgstr "Isto kao i VMR-9 (bez renderiranja), ali koristi dvo-prolaznu bikubnu promjenu veličine."
+
+msgctxt "IDC_DSNULL_COMP"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Povezuje se sa bilo kojim media tipom koji podsjeća na video i nikuda neće poslati dolazeće uzorke. Koristite ga kada vam nije potreban prikaz videa i želite sačuvati CPU od nepotrebnog rada."
+
+msgctxt "IDC_DSNULL_UNCOMP"
+msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
+msgstr "Isto kao Null renderer, samo što će se ovo konektovatisamo na nekompresovane tipove."
+
+msgctxt "IDC_DSEVR"
+msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
+msgstr "Dostupno samo na Vista ili noviji ili na XP sa instaliranim najmanje .NET Framework 3.5."
+
+msgctxt "IDC_DSEVR_CUSTOM"
+msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
+msgstr "Isto kao EVR, ali sa Allocator-Presenter ili MPC-HC za kreiranje titlova ili postporcesiranje. Preporučeno za Windows Vista ili noviji."
+
+msgctxt "IDC_DSMADVR"
+msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
+msgstr "Renderer visokog kvaliteta, zahtijeva GPU koji podržava D3D9 ilo noviji."
+
+msgctxt "IDC_DSSYNC"
+msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
+msgstr "Isto kao EVR (CP) ali nudi nekoliko opcija za sinhronizaciju tempa videa sa frekvencijom osvježavanja display-a a u svrhu eliminacije preskočenih ili dupliciranih video isječaka."
+
+msgctxt "IDC_RMSYSDEF"
+msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
+msgstr "Real vlastiti renderer. SMIL skripta će raditi ali je malo vjerovatna mogućnost interakcije. Koristi DirectDraw i radi u Overlay načinu kada može."
+
+msgctxt "IDC_RMDX9"
+msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Izlaz Real engine-a renderiran sa DX9-baziranim Allocator-Presenter od VMR-9 (renderless)."
+
+msgctxt "IDC_QTSYSDEF"
+msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
+msgstr "QickTime vlastiti renderer. Postaje malo spor tokom promjene veličine video prozora ili kada je djelimično pokrivne drugim prozorom. Kada Overlay nije dostupan, voli pasti u GDI."
+
+msgctxt "IDC_QTDX9"
+msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Izlaz OickTime engine-a renderiran sa DX9-baziranim Allocator-Presenter od VMR-9 (renderless)."
+
+msgctxt "IDC_REGULARSURF"
+msgid "Video surface will be allocated as a regular offscreen surface."
+msgstr "Video površina će biti alocirana kao regularna površina van ekrana."
+
+msgctxt "IDS_PPAGE_OUTPUT_SYNC"
+msgid "Sync Renderer"
+msgstr "Sinhronizacioni Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
+msgid "Regular offscreen plain surface"
+msgstr "Obična regularna površina izvan ekrana"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
+msgid "2D surfaces"
+msgstr "2D površine"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
+msgid "3D surfaces (recommended)"
+msgstr "3D površine (preporučeno)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
+msgid "Nearest neighbor"
+msgstr "Najbliži susjed"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
+msgid "Bilinear"
+msgstr "Bilinearno"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
+msgid "Bilinear (PS 2.0)"
+msgstr "Bilinearno (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
+msgid "Bicubic A=-0.60 (PS 2.0)"
+msgstr "Bikubno A=-0.60 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
+msgid "Bicubic A=-0.75 (PS 2.0)"
+msgstr "Bikubno A=-0.75 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
+msgid "Bicubic A=-1.00 (PS 2.0)"
+msgstr "Bikubno A=-1 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
+msgid "**unavailable**"
+msgstr "**nije dostupno**"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
+msgid "The selected renderer is not installed."
+msgstr "Izabrani renderer nije instaliran."
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Null (bilo šta)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Null (bez kompresije)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Interni Audio Renderer"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
+msgid "Name"
+msgstr "Ime"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
+msgid "MIME Type"
+msgstr "MIME Tip"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
+msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
+msgstr "Da bi bili u mogućnosti vidjeti ugrađene resurse u vašem web pregledniku morate omogućiti web sučelje.\n\nKoristite dugme \"Snimi Kao\" ako želite samo da sačuvate informacije."
+
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Download-uj Titlove..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Upload-uj Titlove..."
+
+msgctxt "IDS_SUBFILE_DELAY"
+msgid "Delay (ms):"
+msgstr "Odgoda (ms):"
+
+msgctxt "IDS_SPEEDSTEP_AUTO"
+msgid "Auto"
+msgstr "Automatski"
+
+msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
+msgid "There are no customized keys to export."
+msgstr "Ne postoje podešene tipke za export."
+
+msgctxt "IDS_RFS_NO_FILES"
+msgid "No media files found in the archive"
+msgstr "U arhivi nema media dokumenata"
+
+msgctxt "IDS_RFS_COMPRESSED"
+msgid "Compressed files are not supported"
+msgstr "Kompresovani dokumenti nisu podržani"
+
+msgctxt "IDS_RFS_ENCRYPTED"
+msgid "Encrypted files are not supported"
+msgstr "Kriptovani dokumenti nisu podržani"
+
+msgctxt "IDS_RFS_MISSING_VOLS"
+msgid "Couldn't find all archive volumes"
+msgstr "Nije bilo moguće pronaći sve dijelove arhive"
+
+msgctxt "IDC_TEXTURESURF2D"
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Video površina će biti alocirana kao tekstura ali će i dalje druge funkcije biti korištene za kopiranje i razvlačenje u backbuffer-e. Zahtijeva video karticu koja može alocirati 32-bitni, RGBA, tekstura čija veličina nije nije-potencija-broja-dva i barem u rezoluciji videa."
+
+msgctxt "IDC_TEXTURESURF3D"
+msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
+msgstr "Video površina će biti alocirana kao tekstura i iscrtana kao dva trokuta unutar 3-ćeg. Antialiasing uključen na display-u može imati loš efekat na brzinu renderiranja."
+
+msgctxt "IDC_DX9RESIZER_COMBO"
+msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
+msgstr "Ako nema podrške za Pixel Shader 2.0, automatski će biti korišten jednostavni bilinearni."
+
+msgctxt "IDC_DSVMR9LOADMIXER"
+msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
+msgstr "Postavlja VMR-9 (renderless) u mikser modus, što znači da će većina kontrola na njegovoj stranici karakteristika biti u funkciji i da će koristiti posebnnu radnu nit za renderiranje isječaka."
+
+msgctxt "IDC_DSVMR9YUVMIXER"
+msgid "Improves performance at the cost of some compatibility of the renderer."
+msgstr "Popravlja performanse na štetu kompatibilnosti ili renderiranja."
+
+msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "Reduces tearing but prevents the toolbar from being shown."
+msgstr "Smanjuje trganje ali sprječava prikazivanje trake sa alatima."
+
+msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Reduces tearing by bypassing the default VSync built into D3D."
+msgstr "Smanjuje trganje premoštavanjem podrazumijevanog VSync ugrađenog u D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Skeniranje tunera"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Titlovi nisu učitani ili renderer nije podržan."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Smiješta kompajlirana sjenila u lokalni AppData da ubrza vrijeme učitavanja."
+
+msgctxt "IDS_SRC_VTS"
+msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
+msgstr "Otvori VTS_xx_0.ifo za učitavanje VTS_xx_x.vob dokumenata u jednom komadu"
+
+msgctxt "IDS_SRC_RFS"
+msgid "Based on RARFileSource, doesn't support compressed files"
+msgstr "Na osnovu RARFileSource, ne podržava kompresovane dokumente"
+
+msgctxt "IDS_INTERNAL_LAVF"
+msgid "Uses LAV Filters"
+msgstr "Koristi LAV Filtere"
+
+msgctxt "IDS_INTERNAL_LAVF_WMV"
+msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
+msgstr "Koristi LAV Filters. Podrazumijevano je onemogućeno budući da su Microsoft filteri stabilniji za te formate.\nAko izaberete da koristite interne filtere, omogućite ih za oboje - izvor i dekodiranje da bi imali bolju reprodukciju."
+
+msgctxt "IDS_AG_TOGGLE_NAVIGATION"
+msgid "Toggle Navigation Bar"
+msgstr "Prikaži/Sakrij Traku za Navigaciju"
+
+msgctxt "IDS_AG_VSYNCACCURATE"
+msgid "Accurate VSync"
+msgstr "Precizan VSync"
+
+msgctxt "IDC_CHECK_RELATIVETO"
+msgid "If the rendering target is left undefined, it will be inherited from the default style."
+msgstr "Ako su mete renderiranja ostavljene nedefinisane, biće naslijeđene od podrazumijevanog stila."
+
+msgctxt "IDC_CHECK_NO_SUB_ANIM"
+msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
+msgstr "Onemogući animaciju titlova. Uključivanje ove opcije će smanjiti opterećenje CPU. Možete koristiti ovu opciju ako primijetite bljeskanje titlova."
+
+msgctxt "IDC_SUBPIC_TO_BUFFER"
+msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
+msgstr "Povećanje broja buffer-ovanih podslika bi, uopšteno, trebalo popraviti poerformanse renderiranja na štetu veće upotrebe RAM-a i GPU."
+
+msgctxt "IDC_BUTTON_EXT_SET"
+msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
+msgstr "Nakon klika na ovo dugme, označenost grupe formata će oslikavati stvarne asocijacije dokumenata za MPC-HC. Novododane ekstenzije će obično biti sive pa ne zaboravite d aih ponovo uključite prije zatvaranja ovog dijaloga."
+
+msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
+msgstr "Onemogućivanje ove opcije će spriječiti treptanje titlova, ali može uzrokovatai da video renderer preskoči neke video sličice."
+
+msgctxt "ID_PLAY_PLAY"
+msgid "Play\nPlay"
+msgstr "Reprodukuj\nReprodukuj"
+
+msgctxt "ID_PLAY_PAUSE"
+msgid "Pause\nPause"
+msgstr "Pauziraj\nPauziraj"
+
+msgctxt "ID_PLAY_STOP"
+msgid "Stop\nStop"
+msgstr "Zaustavi\nZaustavi"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Step\nStep"
+msgstr "Korak\nKorak"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "Decrease speed\nDecrease speed"
+msgstr "Smanji brzinu\nSmanji brzinu"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "Increase speed\nIncrease speed"
+msgstr "Povećaj brzinu\nPovećaj brzinu"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "Mute"
+msgstr "Isključi ton"
+
+msgctxt "ID_VOLUME_MUTE_OFF"
+msgid "Unmute"
+msgstr "Uključi ton"
+
+msgctxt "ID_VOLUME_MUTE_DISABLED"
+msgid "No audio"
+msgstr "Nema zvuka"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "Skip back\nSkip back"
+msgstr "Preskoči unazad\nPreskoči unazad"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "Skip forward\nSkip forward"
+msgstr "Preskoči unaprijed\nPreskoči unaprijed"
+
+msgctxt "IDS_SUBRESYNC_ORIGINAL"
+msgid "&Original"
+msgstr "&Original"
+
+msgctxt "IDS_SUBRESYNC_CURRENT"
+msgid "&Current"
+msgstr "Trenutno"
+
+msgctxt "IDS_SUBRESYNC_EDIT"
+msgid "&Edit"
+msgstr "Izmij&eni"
+
+msgctxt "IDS_SUBRESYNC_YES"
+msgid "&Yes"
+msgstr "Da"
+
+msgctxt "IDS_SUBRESYNC_NO"
+msgid "&No"
+msgstr "&Ne"
+
+msgctxt "IDS_SUBRESYNC_DECREASE"
+msgid "&Decrease"
+msgstr "Umanji"
+
+msgctxt "IDS_SUBRESYNC_INCREASE"
+msgid "&Increase"
+msgstr "Povećaj"
+
+msgctxt "IDS_OPTIONS_CAPTION"
+msgid "Options"
+msgstr "Opcije"
+
+msgctxt "IDS_SHADERS_SELECT"
+msgid "&Select Shaders..."
+msgstr "Izaberi &Sjenčila"
+
+msgctxt "IDS_SHADERS_DEBUG"
+msgid "&Debug Shaders..."
+msgstr "Otklanjanje Grešaka Sjenčila"
+
+msgctxt "IDS_FAVORITES_ADD"
+msgid "&Add to Favorites..."
+msgstr "Dodaj u Omiljene"
+
+msgctxt "IDS_FAVORITES_ORGANIZE"
+msgid "&Organize Favorites..."
+msgstr "Uredi Omiljene..."
+
+msgctxt "IDS_PLAYLIST_SHUFFLE"
+msgid "Sh&uffle"
+msgstr "Napr&eskak"
+
+msgctxt "IDS_PLAYLIST_SHOWFOLDER"
+msgid "Ope&n file location"
+msgstr "Otvori lokaciju dokume&nta"
+
+msgctxt "IDS_CONTROLS_CLOSING"
+msgid "Closing..."
+msgstr "Zatvaranje..."
+
+msgctxt "IDS_CONTROLS_PLAYING"
+msgid "Playing"
+msgstr "Reprodukcija"
+
+msgctxt "IDS_CONTROLS_PAUSED"
+msgid "Paused"
+msgstr "Pauzirano"
+
+msgctxt "IDS_AG_EDL_NEW_CLIP"
+msgid "EDL new clip"
+msgstr "EDL novi isječak"
+
+msgctxt "IDS_RECENT_FILES_CLEAR"
+msgid "&Clear list"
+msgstr "Pobriši listu"
+
+msgctxt "IDS_RECENT_FILES_QUESTION"
+msgid "Are you sure that you want to delete recent files list?"
+msgstr "Da li ste sigurni da želite da pobriete listu skorašnjih dokumenata?"
+
+msgctxt "IDS_AG_EDL_SAVE"
+msgid "EDL save"
+msgstr "EDL snimi"
+
+msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time Correction"
+msgstr "Omogući Korekciju Vremena Isječka"
+
+msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
+msgid "Toggle EDL window"
+msgstr "Uključi/Isključi EDL prozor"
+
+msgctxt "IDS_AG_EDL_IN"
+msgid "EDL set In"
+msgstr "EDL upostavljen"
+
+msgctxt "IDS_AG_EDL_OUT"
+msgid "EDL set Out"
+msgstr "EDL pokrenut"
+
+msgctxt "IDS_AG_PNS_ROTATEX_M"
+msgid "PnS Rotate X-"
+msgstr "PnS Rotacija X-"
+
+msgctxt "IDS_AG_PNS_ROTATEY_P"
+msgid "PnS Rotate Y+"
+msgstr "PnS Rotacija Y+"
+
+msgctxt "IDS_AG_PNS_ROTATEY_M"
+msgid "PnS Rotate Y-"
+msgstr "PnS Rotacija Y-"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_P"
+msgid "PnS Rotate Z+"
+msgstr "PnS Rotacija Z+"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_M"
+msgid "PnS Rotate Z-"
+msgstr "PnS Rotacija Z-"
+
+msgctxt "IDS_AG_TEARING_TEST"
+msgid "Tearing Test"
+msgstr "Test Trganja"
+
+msgctxt "IDS_SCALE_16_9"
+msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Skaliraj na 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_WIDESCREEN"
+msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zumiraj na Widescreen,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_ULTRAWIDE"
+msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zumiraj na Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_PLAYLIST_HIDEFS"
+msgid "&Hide on Fullscreen"
+msgstr "Sakrij u prikazu preko Cijelog ekrana"
+
+msgctxt "IDS_CONTROLS_STOPPED"
+msgid "Stopped"
+msgstr "Zaustavljeno"
+
+msgctxt "IDS_CONTROLS_BUFFERING"
+msgid "Buffering... (%d%%)"
+msgstr "Bafering... (%d%%)"
+
+msgctxt "IDS_CONTROLS_CAPTURING"
+msgid "Capturing..."
+msgstr "Snimanje..."
+
+msgctxt "IDS_CONTROLS_OPENING"
+msgid "Opening..."
+msgstr "Otvaranje..."
+
+msgctxt "IDS_CONTROLS_CLOSED"
+msgid "Closed"
+msgstr "Zatvoreno"
+
+msgctxt "IDS_SUBTITLES_OPTIONS"
+msgid "&Options..."
+msgstr "&Opcije..."
+
+msgctxt "IDS_SUBTITLES_STYLES"
+msgid "&Styles..."
+msgstr "&Stilovi..."
+
+msgctxt "IDS_SUBTITLES_RELOAD"
+msgid "&Reload"
+msgstr "Ponovo učitaj"
+
+msgctxt "IDS_SUBTITLES_ENABLE"
+msgid "&Enable"
+msgstr "Omogući"
+
+msgctxt "IDS_PANSCAN_EDIT"
+msgid "&Edit..."
+msgstr "Izmijeni..."
+
+msgctxt "IDS_INFOBAR_TITLE"
+msgid "Title"
+msgstr "Naslov"
+
+msgctxt "IDS_INFOBAR_AUTHOR"
+msgid "Author"
+msgstr "Autor"
+
+msgctxt "IDS_INFOBAR_COPYRIGHT"
+msgid "Copyright"
+msgstr "Autorska prava"
+
+msgctxt "IDS_INFOBAR_RATING"
+msgid "Rating"
+msgstr "Ocjena"
+
+msgctxt "IDS_INFOBAR_DESCRIPTION"
+msgid "Description"
+msgstr "Opis"
+
+msgctxt "IDS_INFOBAR_DOMAIN"
+msgid "Domain"
+msgstr "Domena"
+
+msgctxt "IDS_AG_CLOSE"
+msgid "Close"
+msgstr "Zatvori"
+
+msgctxt "IDS_AG_NONE"
+msgid "None"
+msgstr "Ništa"
+
+msgctxt "IDS_AG_COMMAND"
+msgid "Command"
+msgstr "Komanda"
+
+msgctxt "IDS_AG_KEY"
+msgid "Key"
+msgstr "Tipka"
+
+msgctxt "IDS_AG_MOUSE"
+msgid "Mouse Windowed"
+msgstr "Miš u Prozoru"
+
+msgctxt "IDS_AG_MOUSE_FS"
+msgid "Mouse Fullscreen"
+msgstr "Miš Cijeli Ekran"
+
+msgctxt "IDS_AG_APP_COMMAND"
+msgid "App Command"
+msgstr "Komanda Programa"
+
+msgctxt "IDS_AG_MEDIAFILES"
+msgid "Media files (all types)"
+msgstr "Media dokumenti (svi tipovi)"
+
+msgctxt "IDS_AG_ALLFILES"
+msgid "All files (*.*)|*.*|"
+msgstr "Svi dokumenti (*.*)|*.*|"
+
+msgctxt "IDS_AG_AUDIOFILES"
+msgid "Audio files (all types)"
+msgstr "Audio dokumenti (svi tipovi)"
+
+msgctxt "IDS_AG_NOT_KNOWN"
+msgid "Not known"
+msgstr "Nije poznato"
+
+msgctxt "IDS_MPLAYERC_0"
+msgid "Quick Open File"
+msgstr "Brzo Otvaranje Dokumenta"
+
+msgctxt "IDS_AG_OPEN_FILE"
+msgid "Open File"
+msgstr "Otvori Dokument"
+
+msgctxt "IDS_AG_OPEN_DVD"
+msgid "Open DVD/BD"
+msgstr "Otvori DVD/BD"
+
+msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
+msgid "Failed to set post-resize shaders"
+msgstr "Nije uspjelo podešavanje sjenčila za post-promjenu veličine"
+
+msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
+msgid "Failed to set both pre-resize and post-resize shaders"
+msgstr "Nije uspjelo podešavanje oba sjenčila za prije i post-promjenu veličine"
+
+msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
+msgid "Shaders are recompiled automatically when the corresponding files are modified."
+msgstr "Sjenčila su ponovo kompajlirana automatski nakon modifikacije odgovarajućih dokumenata."
+
+msgctxt "IDS_SHADER_DLL_ERR_0"
+msgid "Cannot load %s, pixel shaders will not work."
+msgstr "Nij emoguće učitati %s, sjenila za piksele neće raditi."
+
+msgctxt "IDS_SHADER_DLL_ERR_1"
+msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
+msgstr "Nije moguće pronaći potrebne ulazne tačke za funkcije u %s, sjenila za piksele neće raditi."
+
+msgctxt "IDS_OSD_SHADERS_PRESET"
+msgid "Shader preset: %s"
+msgstr "Podešenja sjenila: %s"
+
+msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
+msgid "Next Shader Preset"
+msgstr "Sljedeće Podešenje Sjenila"
+
+msgctxt "IDS_AG_SHADERS_PRESET_PREV"
+msgid "Prev Shader Preset"
+msgstr "Prethodno Podešenje Sjenila"
+
+msgctxt "IDS_STRING_COLON"
+msgid "%s:"
+msgstr "%s:"
+
+msgctxt "IDS_RECORD_START"
+msgid "Record"
+msgstr "Snimi"
+
+msgctxt "IDS_RECORD_STOP"
+msgid "Stop"
+msgstr "Zaustavi"
+
+msgctxt "IDS_BALANCE"
+msgid "L = R"
+msgstr "L = D"
+
+msgctxt "IDS_BALANCE_L"
+msgid "L +%d%%"
+msgstr "L +%d%%"
+
+msgctxt "IDS_BALANCE_R"
+msgid "R +%d%%"
+msgstr "D +%d%%"
+
+msgctxt "IDS_VOLUME"
+msgid "%d%%"
+msgstr "%d%%"
+
+msgctxt "IDS_BOOST"
+msgid "+%d%%"
+msgstr "+%d%%"
+
+msgctxt "IDS_PLAYLIST_ADDFOLDER"
+msgid "Add containing &folder"
+msgstr "Dodaj &folder u kome se nalazi"
+
+msgctxt "IDS_HW_INDICATOR"
+msgid "[H/W]"
+msgstr "[H/W]"
+
+msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
+msgid "Software Decoding"
+msgstr "Softversko Dekodiranje"
+
+msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
+msgid "Playback rate"
+msgstr "Tempo Reprodukcije"
+
+msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
+msgid "&Copy filters list to clipboard"
+msgstr "Kopiraj listu filtera u clipboard"
+
+msgctxt "IDS_CREDENTIALS_SERVER"
+msgid "Enter server credentials"
+msgstr "Unesi akreditive za server"
+
+msgctxt "IDS_CREDENTIALS_CONNECT"
+msgid "Enter your credentials to connect"
+msgstr "Unesite svoje akreditive za konekciju"
+
+msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
+msgid "Save custom style"
+msgstr "Snimi vlastiti stil"
+
+msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
+msgid "Education/Science/Factual topics"
+msgstr "Obrazovanje/Nauka/Činjenične teme"
+
+msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
+msgid "Hides controls and panels also in windowed mode."
+msgstr "Sakrij kontrole i panele takođe i u prozorskom modusu"
+
+msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
+msgid "Prevent external subtitle renderer to be loaded when internal is in use."
+msgstr "Spriječi učitavanje eksternog renderera titlova kada se koristi interni."
+
+msgctxt "IDS_PPAGEADVANCED_COL_NAME"
+msgid "Name"
+msgstr "Ime"
+
+msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
+msgid "Value"
+msgstr "Vrijednost"
+
+msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
+msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
+msgstr "Maksimalan broj dokumenata prikazanih u meniu \"Skorašnji dokumenti\" za koje je potencijalno sačuvana pozicija."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
+msgid "Remember file position only for files longer than N minutes."
+msgstr "Zapamti poziciju reprodukcije dokumenta samo za dokumente duže od N minuta."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
+msgid "Remember file position also for audio files."
+msgstr "Zapamti poziciju dokumenta takođe i za audio dokumente."
+
+msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
+msgid "Do Nothing"
+msgstr "Ne radi Ništa"
+
+msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
+msgid "Play next file in the folder"
+msgstr "Pokreni sljedeći dokument u folderu"
+
+msgctxt "IDS_AFTER_PLAYBACK_REWIND"
+msgid "Rewind current file"
+msgstr "Premotaj trenutni dokument"
+
+msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
+msgid "Close"
+msgstr "Zatvori"
+
+msgctxt "IDS_AFTER_PLAYBACK_EXIT"
+msgid "Exit"
+msgstr "Izlaz"
+
+msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
+msgid "Turn off the monitor"
+msgstr "Isključi monitor"
+
+msgctxt "IDS_IMAGE_JPEG_QUALITY"
+msgid "JPEG Image"
+msgstr "JPEG Slika"
+
+msgctxt "IDS_IMAGE_QUALITY"
+msgid "Quality (%):"
+msgstr "Kvalitet (%):"
+
+msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
+msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
+msgstr "Maksimalna veličina (NxNpx) slike sa omota učitane samo u audio modusu."
+
+msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
+msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
+msgstr "Odgoda titlova će biti smanjena/povećana za ovu vrijednost svaki puta kada je pritisnuta odgovarajuća tipka (%s/%s)."
+
+msgctxt "IDS_HOTKEY_NOT_DEFINED"
+msgid "<not defined>"
+msgstr "<nije definisano>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Gledaj"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Pomakni Naviše"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Premakni Naniže"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sortiraj po LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Ukloni sve"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Da li ste sigurni da želite ukloniti sve kanale iz liste?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Nema dostupnih informacija"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Molimo sačekajte, u toku je analiza..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Omogućava logovanje u dokument (zahtijeva restart)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Preostalo vrijeme"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Visoka preciznost"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Nakon reprodukcije: Premotaj trenutni dokument"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Nakon Reprodukcije: Zatvori"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC je doživio problem tokom inicijalizacije. Uz vašu pomoću bićemo u mogućnosti da popravimo ovaj problem.\nŽelite li ga prijaviti?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Uneiste pozitivnu vrijednost ako zvuk prednjači, a negativnu ako kasni."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Pregled je trenutno onemogućen. Možete ga uključiti u opcijama MPC-HC-a."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Ova opcija može biti korištena za pregled media dokumenata sa udaljene lokacije. Koristite ovu opciju samo na ispravno osiguranoj privatnoj mreži.\n\nDa li zaista želite omogućiti ovu opciju?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Interni Renderer Titlova"
+
+msgctxt "IDS_AG_OPEN_DEVICE"
+msgid "Open Device"
+msgstr "Otvori Uređaj"
+
+msgctxt "IDS_AG_SAVE_AS"
+msgid "Save As"
+msgstr "Snimi Kao"
+
+msgctxt "IDS_AG_SAVE_IMAGE"
+msgid "Save Image"
+msgstr "Snimi Sliku"
+
+msgctxt "IDS_MPLAYERC_6"
+msgid "Save Image (auto)"
+msgstr "Snimi Sliku (automatski)"
+
+msgctxt "IDS_OSD_IMAGE_SAVED"
+msgid "Image saved successfully"
+msgstr "Slika je uspješno snimljena"
+
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Učitaj Titlove..."
+
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Snimi Titlove..."
+
+msgctxt "IDS_AG_PROPERTIES"
+msgid "Properties"
+msgstr "Svojstva"
+
+msgctxt "IDS_AG_EXIT"
+msgid "Exit"
+msgstr "Izlaz"
+
+msgctxt "IDS_AG_PLAYPAUSE"
+msgid "Play/Pause"
+msgstr "Pokreni/Pauziraj"
+
+msgctxt "IDS_AG_PLAY"
+msgid "Play"
+msgstr "Reprodukuj"
+
+msgctxt "IDS_AG_STOP"
+msgid "Stop"
+msgstr "Zaustavi"
+
+msgctxt "IDS_AG_FRAMESTEP"
+msgid "Frame-step"
+msgstr "Okvir-korak"
+
+msgctxt "IDS_MPLAYERC_16"
+msgid "Frame-step back"
+msgstr "Okvir-korak nazad"
+
+msgctxt "IDS_AG_GO_TO"
+msgid "Go To"
+msgstr "Idi Na"
+
+msgctxt "IDS_AG_INCREASE_RATE"
+msgid "Increase Rate"
+msgstr "Povećaj Tempo"
+
+msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
+msgid "Show/Game show"
+msgstr "Show/Igra show"
+
+msgctxt "IDS_CONTENT_SPORTS"
+msgid "Sports"
+msgstr "Sportovi"
+
+msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
+msgid "Children's/Youth programmes"
+msgstr "Dječji/Omladinski programi"
+
+msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
+msgid "Music/Ballet/Dance"
+msgstr "Muzika/Balet/Ples"
+
+msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
+msgid "Arts/Culture"
+msgstr "Umjetnost/Kultura"
+
+msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
+msgid "Social/Political issues/Economics"
+msgstr "Društvo/Politička događanja/Ekonomija"
+
+msgctxt "IDS_CONTENT_LEISURE"
+msgid "Leisure hobbies"
+msgstr "Hobiji u slobodno vrijeme"
+
+msgctxt "IDS_FILE_RECYCLE"
+msgid "Move to Recycle Bin"
+msgstr "Makni u Korpu za Otpatke"
+
+msgctxt "IDS_AG_SAVE_COPY"
+msgid "Save a Copy"
+msgstr "Sačuvaj Kopiju"
+
+msgctxt "IDS_FASTSEEK_LATEST"
+msgid "Latest keyframe"
+msgstr "Zadnja sličica"
+
+msgctxt "IDS_FASTSEEK_NEAREST"
+msgid "Nearest keyframe"
+msgstr "Najbliža sličica"
+
+msgctxt "IDS_HOOKS_FAILED"
+msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
+msgstr "MPC-HC je naišao na problem tokom inicijalizacije. DVD reprodukcija možda neće ispravno raditi. Ovo može biti izazvano nekim nekompatibilnostima sa određenim sigurnosnim alatima.\nŽelite li prijaviti ovaj problem?"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
+msgid "Never show"
+msgstr "Ne prikazuj nikada"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
+msgid "Show when moving the cursor, hide after:"
+msgstr "Prikaži kada se kursor pomijera, poslije sakrij:"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
+msgid "Show when hovering control, hide after:"
+msgstr "Prikaži kada kontrole lebde, poslije sakrij:"
+
+msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
+msgid "Failed to set pre-resize shaders"
+msgstr "Nije uspjelo podešavanje prije podešenih sjenčila"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
+msgid "Frame Time Correction: On"
+msgstr "Korekcija Vremena Okvira: Uključeno"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
+msgid "Frame Time Correction: Off"
+msgstr "Korekcija Vremena Okvira: Isključeno"
+
+msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
+msgid "Target VSync Offset: %.1f"
+msgstr "Ciljni VSync Offset: %.1f"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
+msgid "VSync Offset: %d"
+msgstr "VSync Offset: %d"
+
+msgctxt "IDS_OSD_SPEED"
+msgid "Speed: %.2lfx"
+msgstr "Brzina: %.2lfx"
+
+msgctxt "IDS_OSD_THUMBS_SAVED"
+msgid "Thumbnails saved successfully"
+msgstr "Sličica j euspješno snimljena"
+
+msgctxt "IDS_MENU_VIDEO_STREAM"
+msgid "Vide&o Track"
+msgstr "Vide&o Zapis"
+
+msgctxt "IDS_MENU_VIDEO_ANGLE"
+msgid "Video Ang&le"
+msgstr "Video Ugao"
+
+msgctxt "IDS_RESET_SETTINGS"
+msgid "Reset settings"
+msgstr "Resetuj podešenja"
+
+msgctxt "IDS_RESET_SETTINGS_WARNING"
+msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
+msgstr "Da li ste sigurni da žeite resetovati MPC-HC na njegova podrazumijevana podešenja?\nUpozorenje - SVA vaša trenutna podešenja će biti izgubljena."
+
+msgctxt "IDS_RESET_SETTINGS_MUTEX"
+msgid "Please close all instances of MPC-HC so that the default settings can be restored."
+msgstr "Molimo zatvorite sve instance MPC-HC tako da mogu biti vraćene podrazumijevane postavke."
+
+msgctxt "IDS_EXPORT_SETTINGS"
+msgid "Export settings"
+msgstr "Eksportuj podešenja"
+
+msgctxt "IDS_EXPORT_SETTINGS_WARNING"
+msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
+msgstr "Neke izmjene još nisu bile sačuvane.\nDa li ih želite sačuvati prije eksporta?"
+
+msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
+msgid "The settings have been successfully exported."
+msgstr "Podešenja su uspješno eksportovana."
+
+msgctxt "IDS_EXPORT_SETTINGS_FAILED"
+msgid "The export failed! This can happen when you don't have the correct rights."
+msgstr "Eksport nije uspio! Ovo se može desiti ako nemate odgovarajuća prava."
+
+msgctxt "IDS_BDA_ERROR"
+msgid "BDA Error"
+msgstr "BDA Greška"
+
+msgctxt "IDS_AG_DECREASE_RATE"
+msgid "Decrease Rate"
+msgstr "Smanji tempo"
+
+msgctxt "IDS_AG_RESET_RATE"
+msgid "Reset Rate"
+msgstr "Resetuj Tempo"
+
+msgctxt "IDS_MPLAYERC_21"
+msgid "Audio Delay +10 ms"
+msgstr "Audio Odgoda +10 ms"
+
+msgctxt "IDS_MPLAYERC_22"
+msgid "Audio Delay -10 ms"
+msgstr "Audio Odgoda -10 ms"
+
+msgctxt "IDS_MPLAYERC_23"
+msgid "Jump Forward (small)"
+msgstr "Skoči Unaprijed (malo)"
+
+msgctxt "IDS_MPLAYERC_24"
+msgid "Jump Backward (small)"
+msgstr "Skoči Unazad (malo)"
+
+msgctxt "IDS_MPLAYERC_25"
+msgid "Jump Forward (medium)"
+msgstr "Skoči Unaprijed (srednje)"
+
+msgctxt "IDS_MPLAYERC_26"
+msgid "Jump Backward (medium)"
+msgstr "Skoči Unazad (srednje)"
+
+msgctxt "IDS_MPLAYERC_27"
+msgid "Jump Forward (large)"
+msgstr "Skoči Unaprijed (puno)"
+
+msgctxt "IDS_MPLAYERC_28"
+msgid "Jump Backward (large)"
+msgstr "Skoči Unazad (puno)"
+
+msgctxt "IDS_MPLAYERC_29"
+msgid "Jump Forward (keyframe)"
+msgstr "Skoči Unaprijed (isječak)"
+
+msgctxt "IDS_MPLAYERC_30"
+msgid "Jump Backward (keyframe)"
+msgstr "Skoči Unazad (isječak)"
+
+msgctxt "IDS_AG_NEXT"
+msgid "Next"
+msgstr "Sljedeći"
+
+msgctxt "IDS_AG_PREVIOUS"
+msgid "Previous"
+msgstr "Prethodni"
+
+msgctxt "IDS_AG_NEXT_FILE"
+msgid "Next File"
+msgstr "Naredni Dokument"
+
+msgctxt "IDS_AG_PREVIOUS_FILE"
+msgid "Previous File"
+msgstr "Prethodni Dokument"
+
+msgctxt "IDS_MPLAYERC_99"
+msgid "Toggle Direct3D fullscreen"
+msgstr "Uključi/Isključi Direct3D prikaz na cijeli ekran"
+
+msgctxt "IDS_MPLAYERC_100"
+msgid "Goto Prev Subtitle"
+msgstr "Idi na Preth. Titl"
+
+msgctxt "IDS_MPLAYERC_101"
+msgid "Goto Next Subtitle"
+msgstr "Idi na Naredni Titl"
+
+msgctxt "IDS_MPLAYERC_102"
+msgid "Shift Subtitle Left"
+msgstr "Pomakni Titl Lijevo"
+
+msgctxt "IDS_MPLAYERC_103"
+msgid "Shift Subtitle Right"
+msgstr "Pomakni Titl Desno"
+
+msgctxt "IDS_AG_SEEKSET"
+msgid "Jump to Beginning"
+msgstr "Skoči na Početak"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Prikaži Ime Dokumenta"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Pokreni DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Pokreni BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Prikaži Statistiku Renderera"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Resetuj Statistiku Renderera"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Titlovi::Razno"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Sakrij granice"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Samo Okvir"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Prikaži Naslov i Meni"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Sakrij &Meni"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Napredno"
+
+msgctxt "IDS_AG_VIEW_MINIMAL"
+msgid "View Minimal"
+msgstr "Prikaži Minimalno"
+
+msgctxt "IDS_AG_VIEW_COMPACT"
+msgid "View Compact"
+msgstr "Prikaži Kompaktno"
+
+msgctxt "IDS_AG_VIEW_NORMAL"
+msgid "View Normal"
+msgstr "Prikaži Normalno"
+
+msgctxt "IDS_AG_FULLSCREEN"
+msgid "Fullscreen"
+msgstr "Cijeli ekran"
+
+msgctxt "IDS_MPLAYERC_39"
+msgid "Fullscreen (w/o res.change)"
+msgstr "Cijeli ekran (w/o rez. promjena)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT"
+msgid "Zoom Auto Fit"
+msgstr "Automatsko Podešavanje Zuma"
+
+msgctxt "IDS_AG_VIDFRM_HALF"
+msgid "VidFrm Half"
+msgstr "VidFrm Polovica"
+
+msgctxt "IDS_AG_VIDFRM_NORMAL"
+msgid "VidFrm Normal"
+msgstr "VidFrm Normalno"
+
+msgctxt "IDS_AG_VIDFRM_DOUBLE"
+msgid "VidFrm Double"
+msgstr "VidFrm Dvostruko"
+
+msgctxt "IDS_AG_ALWAYS_ON_TOP"
+msgid "Always On Top"
+msgstr "Uvijek Na Vrhu"
+
+msgctxt "IDS_AG_PNS_INC_SIZE"
+msgid "PnS Inc Size"
+msgstr "PnS Pov. Veličinu"
+
+msgctxt "IDS_AG_PNS_INC_WIDTH"
+msgid "PnS Inc Width"
+msgstr "PnS Pov. Širinu"
+
+msgctxt "IDS_MPLAYERC_47"
+msgid "PnS Inc Height"
+msgstr "PnS Pov. Visinu"
+
+msgctxt "IDS_AG_PNS_DEC_SIZE"
+msgid "PnS Dec Size"
+msgstr "PnS Smanji Veličinu"
+
+msgctxt "IDS_AG_PNS_DEC_WIDTH"
+msgid "PnS Dec Width"
+msgstr "PnS Smanji Širinu"
+
+msgctxt "IDS_MPLAYERC_50"
+msgid "PnS Dec Height"
+msgstr "PnS Smanji Visinu"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
+msgid "Downloading [%s] \"%s\""
+msgstr "Download-ovanje [%s] \"%s\""
+
+msgctxt "IDS_SUBDL_DLG_PARSING"
+msgid "Parsing list..."
+msgstr "Lista za raščlanjivanje..."
+
+msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
+msgid "No subtitles found."
+msgstr "Nisu pronađeni titlovi."
+
+msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
+msgid "%d subtitle(s) available."
+msgstr "Dostupno je %d titlova."
+
+msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
+msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
+msgstr "Da li želite da periodično provjerite postoji li nova verzija MPC-HC?\n\nOva opcija može biti onemogućena kasnije sa Razno stranice u opcijama."
+
+msgctxt "IDS_ZOOM_50"
+msgid "50%"
+msgstr "50%"
+
+msgctxt "IDS_ZOOM_100"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDS_ZOOM_200"
+msgid "200%"
+msgstr "200%"
+
+msgctxt "IDS_ZOOM_AUTOFIT"
+msgid "Auto Fit"
+msgstr "Auto Fit"
+
+msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (Larger Only)"
+msgstr "Automatsko Podešavanje (Samo Veći)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
+msgid "Zoom Auto Fit (Larger Only)"
+msgstr "Automatsko Podešavanje Zuma (Samo veći)"
+
+msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
+msgid "Zoom: Auto (Larger Only)"
+msgstr "Zum: Automatsko Podešavanje (Samo veći)"
+
+msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
+msgid "Double click to open file location"
+msgstr "Dvoklik da otvorite lokaciju"
+
+msgctxt "IDS_TOOLTIP_REMAINING_TIME"
+msgid "Toggle between elapsed and remaining time"
+msgstr "Naizmjenično mijenjaj prikaz proteklog i preostalog vremena."
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
+msgid "Invalid delay"
+msgstr "Odgoda nije ispravna"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
+msgid "Please enter a number between 1 and 365."
+msgstr "Molimo unesite broj između 1 i 365."
+
+msgctxt "IDS_AG_PNS_CENTER"
+msgid "PnS Center"
+msgstr "PnS Centar"
+
+msgctxt "IDS_AG_PNS_LEFT"
+msgid "PnS Left"
+msgstr "PnS Lijevo"
+
+msgctxt "IDS_AG_PNS_RIGHT"
+msgid "PnS Right"
+msgstr "PnS Desno"
+
+msgctxt "IDS_AG_PNS_UP"
+msgid "PnS Up"
+msgstr "PnS Gore"
+
+msgctxt "IDS_AG_PNS_DOWN"
+msgid "PnS Down"
+msgstr "PnS Dole"
+
+msgctxt "IDS_AG_PNS_UPLEFT"
+msgid "PnS Up/Left"
+msgstr "PnS Gore/Lijevo"
+
+msgctxt "IDS_AG_PNS_UPRIGHT"
+msgid "PnS Up/Right"
+msgstr "PnS Gore/Desno"
+
+msgctxt "IDS_AG_PNS_DOWNLEFT"
+msgid "PnS Down/Left"
+msgstr "PnS Dole/Lijevo"
+
+msgctxt "IDS_MPLAYERC_59"
+msgid "PnS Down/Right"
+msgstr "PnS Dole/Desno"
+
+msgctxt "IDS_AG_VOLUME_UP"
+msgid "Volume Up"
+msgstr "Pojačaj zvuk"
+
+msgctxt "IDS_AG_VOLUME_DOWN"
+msgid "Volume Down"
+msgstr "Smanji zvuk"
+
+msgctxt "IDS_AG_VOLUME_MUTE"
+msgid "Volume Mute"
+msgstr "Isključi Zvuk"
+
+msgctxt "IDS_MPLAYERC_63"
+msgid "DVD Title Menu"
+msgstr "DVD Naslovni Meni"
+
+msgctxt "IDS_AG_DVD_ROOT_MENU"
+msgid "DVD Root Menu"
+msgstr "DVD Korijenski meni"
+
+msgctxt "IDS_MPLAYERC_65"
+msgid "DVD Subtitle Menu"
+msgstr "DVD Meni Titlova"
+
+msgctxt "IDS_MPLAYERC_66"
+msgid "DVD Audio Menu"
+msgstr "DVD Audio Meni"
+
+msgctxt "IDS_MPLAYERC_67"
+msgid "DVD Angle Menu"
+msgstr "DVD Meni Ugla"
+
+msgctxt "IDS_MPLAYERC_68"
+msgid "DVD Chapter Menu"
+msgstr "DVD Meni Poglavlja"
+
+msgctxt "IDS_AG_DVD_MENU_LEFT"
+msgid "DVD Menu Left"
+msgstr "DVD Meni Lijevo"
+
+msgctxt "IDS_MPLAYERC_70"
+msgid "DVD Menu Right"
+msgstr "DVD Meni Desno"
+
+msgctxt "IDS_AG_DVD_MENU_UP"
+msgid "DVD Menu Up"
+msgstr "DVD Meni Gore"
+
+msgctxt "IDS_AG_DVD_MENU_DOWN"
+msgid "DVD Menu Down"
+msgstr "DVD Meni Dole"
+
+msgctxt "IDS_MPLAYERC_73"
+msgid "DVD Menu Activate"
+msgstr "DVD Meni Aktiviraj"
+
+msgctxt "IDS_AG_DVD_MENU_BACK"
+msgid "DVD Menu Back"
+msgstr "DVD Meni Nazad"
+
+msgctxt "IDS_MPLAYERC_75"
+msgid "DVD Menu Leave"
+msgstr "DVD Meni Napusti"
+
+msgctxt "IDS_AG_BOSS_KEY"
+msgid "Boss key"
+msgstr "Šef tipka"
+
+msgctxt "IDS_MPLAYERC_77"
+msgid "Player Menu"
+msgstr "Player Meni"
+
+msgctxt "IDS_MPLAYERC_78"
+msgid "Player Menu (full)"
+msgstr "Player Meni (kompletan)"
+
+msgctxt "IDS_AG_FILTERS_MENU"
+msgid "Filters Menu"
+msgstr "Filter Meni"
+
+msgctxt "IDS_AG_OPTIONS"
+msgid "Options"
+msgstr "Opcije"
+
+msgctxt "IDS_AG_NEXT_AUDIO"
+msgid "Next Audio Track"
+msgstr "Sljedeći Audio Zapis"
+
+msgctxt "IDS_AG_PREV_AUDIO"
+msgid "Prev Audio Track"
+msgstr "Prethodni Audio Zapis"
+
+msgctxt "IDS_AG_NEXT_SUBTITLE"
+msgid "Next Subtitle Track"
+msgstr "Sljedeći Zapis Titla"
+
+msgctxt "IDS_AG_PREV_SUBTITLE"
+msgid "Prev Subtitle Track"
+msgstr "Prethodni Zapis Titla"
+
+msgctxt "IDS_MPLAYERC_85"
+msgid "On/Off Subtitle"
+msgstr "Titlovi Uklj./Isklj."
+
+msgctxt "IDS_MPLAYERC_86"
+msgid "Reload Subtitles"
+msgstr "Ponovo učitaj Titlove"
+
+msgctxt "IDS_MPLAYERC_91"
+msgid "Next Angle (DVD)"
+msgstr "Sljedeći Ugao (DVD)"
+
+msgctxt "IDS_MPLAYERC_92"
+msgid "Prev Angle (DVD)"
+msgstr "Prethodni Ugao (DVD)"
+
+msgctxt "IDS_MPLAYERC_93"
+msgid "Next Audio Track (DVD)"
+msgstr "Sljedeći Audio Zapis (DVD)"
+
+msgctxt "IDS_MPLAYERC_94"
+msgid "Prev Audio Track (DVD)"
+msgstr "Prethodni Audio Zapis (DVD)"
+
+msgctxt "IDS_MPLAYERC_95"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Sljedeći Zapis Titla (DVD)"
+
+msgctxt "IDS_MPLAYERC_96"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Prethodni Zapis Titla (DVD)"
+
+msgctxt "IDS_MPLAYERC_97"
+msgid "On/Off Subtitle (DVD)"
+msgstr "Titlovi Uklj./Isklj. (DVD)"
+
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Prikaži Trenutno Vrijeme"
+
+msgctxt "IDS_PPAGEWEBSERVER_0"
+msgid "Select the directory"
+msgstr "Izaberi direktorij"
+
+msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
+msgid "Quick add favorite"
+msgstr "Brzo dodaj omiljeni"
+
+msgctxt "IDS_DVB_CHANNEL_NUMBER"
+msgid "N"
+msgstr "B"
+
+msgctxt "IDS_DVB_CHANNEL_NAME"
+msgid "Name"
+msgstr "Ime"
+
+msgctxt "IDS_DVB_CHANNEL_FREQUENCY"
+msgid "Frequency"
+msgstr "Frekvencija"
+
+msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
+msgid "Encrypted"
+msgstr "Kriptovano"
+
+msgctxt "IDS_YES"
+msgid "Yes"
+msgstr "Da"
+
+msgctxt "IDS_NO"
+msgid "No"
+msgstr "Ne"
+
+msgctxt "IDS_DVB_CHANNEL_START_SCAN"
+msgid "Start"
+msgstr "Pokreni"
+
+msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
+msgid "Stop"
+msgstr "Zaustavi"
+
+msgctxt "IDS_DVB_TVNAV_SEERADIO"
+msgid "Radio stations"
+msgstr "Radio stanice"
+
+msgctxt "IDS_DVB_TVNAV_SEETV"
+msgid "TV stations"
+msgstr "TV stanice"
+
+msgctxt "IDS_DVB_CHANNEL_FORMAT"
+msgid "Format"
+msgstr "Format"
+
+msgctxt "IDS_MAINFRM_2"
+msgid "Focus lost to: %s - %s"
+msgstr "Izgubljen fokus na: %s - %s"
+
+msgctxt "IDS_AG_SUBTITLES_SAVED"
+msgid "Subtitles saved"
+msgstr "Titl je snimljen"
+
+msgctxt "IDS_MAINFRM_4"
+msgid "Cannot save subtitles"
+msgstr "Nije moguće snimiti titlove"
+
+msgctxt "IDS_AG_FRAMERATE"
+msgid "Frame rate"
+msgstr "Broj sličica u sekundi"
+
+msgctxt "IDS_MAINFRM_6"
+msgid "drawn: %d, dropped: %d"
+msgstr "iscrtano: %d, odbačeno: %d"
+
+msgctxt "IDS_AG_FRAMES"
+msgid "Frames"
+msgstr "Sličica"
+
+msgctxt "IDS_AG_BUFFERS"
+msgid "Buffers"
+msgstr "Buffer-i"
+
+msgctxt "IDS_MAINFRM_9"
+msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
+msgstr "Jačina zvuka: %02lu/%02lu, Naslov: %02lu/%02lu, Poglavlje: %02lu/%02lu"
+
+msgctxt "IDS_MAINFRM_10"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Ugao: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+
+msgctxt "IDS_MAINFRM_11"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bita %d %s"
+
+msgctxt "IDS_ADD_TO_PLAYLIST"
+msgid "Add to MPC-HC Playlist"
+msgstr "Dodaj u MPC-HC Playlistu"
+
+msgctxt "IDS_OPEN_WITH_MPC"
+msgid "Play with MPC-HC"
+msgstr "Pokreni sa MPC-HC"
+
+msgctxt "IDS_CANNOT_CHANGE_FORMAT"
+msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
+msgstr "MPC-HC nema dovoljne privilegije da bi promijenio asocijacije formata dokumenata. Molimo kliknite na dugme \"Pokreni kao administrator\"."
+
+msgctxt "IDS_APP_DESCRIPTION"
+msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
+msgstr "MPC-HC media player vrlo lake kategorije za Windows-e. Podržava sve uobičajene video i audio file formate. Mi smo 100% bez spyware-a, bez reklama i bez toolbar-ova."
+
+msgctxt "IDS_MAINFRM_12"
+msgid "channel"
+msgstr "kanal"
+
+msgctxt "IDS_MAINFRM_13"
+msgid "channels"
+msgstr "kanali"
+
+msgctxt "IDS_AG_TITLE"
+msgid "Title %u"
+msgstr "Naslov %u"
+
+msgctxt "IDS_MAINFRM_16"
+msgid "DVD: Unexpected error"
+msgstr "DVD: Neočekivana greška"
+
+msgctxt "IDS_MAINFRM_17"
+msgid "DVD: Copy-Protect Fail"
+msgstr "DVD: Neuspjeh zbog zaštite od kopiranja"
+
+msgctxt "IDS_MAINFRM_18"
+msgid "DVD: Invalid DVD 1.x Disc"
+msgstr "DVD: Pogrešan DVD 1.x Disk"
+
+msgctxt "IDS_MAINFRM_19"
+msgid "DVD: Invalid Disc Region"
+msgstr "DVD: Pogrešan Disk Region"
+
+msgctxt "IDS_MAINFRM_20"
+msgid "DVD: Low Parental Level"
+msgstr "DVD: Nizak Nivo Roditeljske Zaštite"
+
+msgctxt "IDS_MAINFRM_21"
+msgid "DVD: Macrovision Fail"
+msgstr "DVD: Macrovision Nije Uspio"
+
+msgctxt "IDS_MAINFRM_22"
+msgid "DVD: Incompatible System And Decoder Regions"
+msgstr "DVD: Nekomaptibilan Sistem I Regije Dekodera"
+
+msgctxt "IDS_MAINFRM_23"
+msgid "DVD: Incompatible Disc And Decoder Regions"
+msgstr "DVD: Nekomaptibilan Disk I Regije Dekodera"
+
+msgctxt "IDS_D3DFS_WARNING"
+msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
+msgstr "Ova opcija je dizajnirana da se izbjegne trganje. Međutim, to će takođe spriječiti MPC-HC da prikazuje meni ili bilo kakav dijalog tokom reprodukcije.\n\nDa li zaista želite aktivirati ovu opciju?"
+
+msgctxt "IDS_MAINFRM_139"
+msgid "Sub delay: %ld ms"
+msgstr "Odgoda titla: %ld ms"
+
+msgctxt "IDS_AG_TITLE2"
+msgid "Title: %02d/%02d"
+msgstr "Naslov: %02d/%02d"
+
+msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
+msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
+msgstr "Ime dokumenta sadrži znakove koji nisu podržani (koristite samo A-Z, 0-9)"
+
+msgctxt "IDS_THUMB_ROWNUMBER"
+msgid "Rows:"
+msgstr "Vrsta:"
+
+msgctxt "IDS_THUMB_COLNUMBER"
+msgid "Columns:"
+msgstr "Kolona:"
+
+msgctxt "IDS_THUMB_IMAGE_WIDTH"
+msgid "Image width"
+msgstr "Širina slike"
+
+msgctxt "IDS_AG_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Razmjera"
+
+msgctxt "IDS_MAINFRM_37"
+msgid ", Total: %ld, Dropped: %ld"
+msgstr ", Ukupno %ld, Odbačeno: %ld"
+
+msgctxt "IDS_MAINFRM_38"
+msgid ", Size: %I64d KB"
+msgstr ", Veličina: %I64d KB"
+
+msgctxt "IDS_MAINFRM_39"
+msgid ", Size: %I64d MB"
+msgstr ", Veličina: %I64d MB"
+
+msgctxt "IDS_MAINFRM_40"
+msgid ", Free: %I64d KB"
+msgstr ", Slobodno: %I64d KB"
+
+msgctxt "IDS_MAINFRM_41"
+msgid ", Free: %I64d MB"
+msgstr ", Slobodno: %I64d MB"
+
+msgctxt "IDS_MAINFRM_42"
+msgid ", Free V/A Buffers: %03d/%03d"
+msgstr ", Slobodno V/A Buferi %03d/%03d"
+
+msgctxt "IDS_AG_ERROR"
+msgid "Error"
+msgstr "Greška"
+
+msgctxt "IDS_SUBTITLE_STREAM_OFF"
+msgid "Subtitle: off"
+msgstr "Titl: isključeno"
+
+msgctxt "IDS_SUBTITLE_STREAM"
+msgid "Subtitle: %s"
+msgstr "Titl: %s"
+
+msgctxt "IDS_MAINFRM_46"
+msgid "Select the path for the DVD/BD:"
+msgstr "Izaberite putanju za DVD/BD:"
+
+msgctxt "IDS_SUB_LOADED_SUCCESS"
+msgid " loaded successfully"
+msgstr "uspješno učitano"
+
+msgctxt "IDS_ALL_FILES_FILTER"
+msgid "All files (*.*)|*.*||"
+msgstr "Svi dokumenti (*.*)|*.*||"
+
+msgctxt "IDS_GETDIB_FAILED"
+msgid "GetDIB failed, hr = %08x"
+msgstr "GetDIB nije uspio, hr = %08x"
+
+msgctxt "IDS_GETCURRENTIMAGE_FAILED"
+msgid "GetCurrentImage failed, hr = %08x"
+msgstr "GetCurrentImage nije uspjelo, hr = %08x"
+
+msgctxt "IDS_SCREENSHOT_ERROR"
+msgid "Cannot create file"
+msgstr "Nije moguće kreirati dokument"
+
+msgctxt "IDS_THUMBNAILS_NO_DURATION"
+msgid "Cannot create thumbnails for files with no duration"
+msgstr "Nij emoguće kreirati sličice za dokumente koji nemaju trajanje"
+
+msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
+msgid "Failed to get video frame size"
+msgstr "Nije uspjelo dobijanje veličine video isječka"
+
+msgctxt "IDS_OUT_OF_MEMORY"
+msgid "Out of memory, go buy some more!"
+msgstr "Manjak memorije, idite i kupite još!"
+
+msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
+msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
+msgstr "Neispravan format slike, iz %d bpp dibs nije moguće kreirati sličice."
+
+msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
+msgid "File Size: %s (%s bytes)\\N"
+msgstr "Veličina Dokumenta: %s (%s bytes)\\N"
+
+msgctxt "IDS_THUMBNAILS_INFO_HEADER"
+msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Ime Dokumenta: %s\\N%sRezolucija: %dx%d %s\\NTrajanje: %02d:%02d:%02d"
+
+msgctxt "IDS_THUMBNAIL_TOO_SMALL"
+msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
+msgstr "Sličice će biti suviše male. Nije moguće kreirati dokument.\n\nProbajte smanjiti broj sličica ili povećati ukupnu veličinu."
+
+msgctxt "IDS_CANNOT_LOAD_SUB"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Da bi učitali titlove morate promijeniti tip video renderera i ponovo otvoriti dokument.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR ili Haali\n- RealMedia: Specijalni renderer za RealMedia, ili otvoriti kroz DirectShow\n- QuickTime: DX7 ili DX9 renderer za QuickTime\n- ShockWave: Nije podržano"
+
+msgctxt "IDS_SUBTITLE_FILES_FILTER"
+msgid "Subtitle files"
+msgstr "Dokumenti titlova"
+
+msgctxt "IDS_MAINFRM_68"
+msgid "Aspect Ratio: %ld:%ld"
+msgstr "Razmjera: %ld:%ld"
+
+msgctxt "IDS_MAINFRM_69"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Razmjera: Podrazumijevano (DAR)"
+
+msgctxt "IDS_MAINFRM_70"
+msgid "Audio delay: %I64d ms"
+msgstr "Audio odgoda: %I64d ms"
+
+msgctxt "IDS_AG_CHAPTER"
+msgid "Chapter %d"
+msgstr "Poglavlje %d"
+
+msgctxt "IDS_AG_OUT_OF_MEMORY"
+msgid "Out of memory"
+msgstr "Manjak memorije"
+
+msgctxt "IDS_MAINFRM_77"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Greška: Potreban je Adobe Flash Player za Internet Explorer"
+
+msgctxt "IDS_MAINFRM_78"
+msgid "QuickTime not yet supported for X64 (apple library not available)"
+msgstr "QuickTime još uvijek nije podržan za X64 (apple biblioteka nije dostupna)"
+
+msgctxt "IDS_MAINFRM_80"
+msgid "Failed to create the filter graph object"
+msgstr "Nije uspjelo kreiranje objekta grafika filtera"
+
+msgctxt "IDS_MAINFRM_81"
+msgid "Invalid argument"
+msgstr "Neispravan argument"
+
+msgctxt "IDS_MAINFRM_82"
+msgid "Opening aborted"
+msgstr "Otvaranje je otkazano"
+
+msgctxt "IDS_MAINFRM_83"
+msgid "Failed to render the file"
+msgstr "Nije uspjelo renderiranje dokumenta"
+
+msgctxt "IDS_AG_CHAPTER2"
+msgid "Chapter: "
+msgstr "Poglavlje:"
+
+msgctxt "IDS_VOLUME_OSD"
+msgid "Vol: %d%%"
+msgstr "Zvuk: %d%%"
+
+msgctxt "IDS_BOOST_OSD"
+msgid "Boost: +%u%%"
+msgstr "Pojačanje: +%u%%"
+
+msgctxt "IDS_BALANCE_OSD"
+msgid "Balance: %s"
+msgstr "Balans: %s"
+
+msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
+msgid "Current"
+msgstr "Trenutno"
+
+msgctxt "IDS_MAINFRM_DIR_TITLE"
+msgid "Select Directory"
+msgstr "Izaberi Folder"
+
+msgctxt "IDS_MAINFRM_DIR_CHECK"
+msgid "Include subdirectories"
+msgstr "Uključi Podfoldere"
+
+msgctxt "IDS_AG_PAUSE"
+msgid "Pause"
+msgstr "Pauza"
+
+msgctxt "IDS_AG_TOGGLE_CAPTION"
+msgid "Toggle Caption&Menu"
+msgstr "Prikaži/Sakrij Naslovni &Meni"
+
+msgctxt "IDS_AG_TOGGLE_SEEKER"
+msgid "Toggle Seek Bar"
+msgstr "Prikaži/Sakrij Traku za Traženje"
+
+msgctxt "IDS_AG_TOGGLE_CONTROLS"
+msgid "Toggle Controls"
+msgstr "Prikaži/Sakrij Kontrole"
+
+msgctxt "IDS_MAINFRM_84"
+msgid "Invalid file name"
+msgstr "Neispravno ime dokumenta"
+
+msgctxt "IDS_MAINFRM_86"
+msgid "Cannot connect the filters"
+msgstr "Nije moguća konekcija sa filterima"
+
+msgctxt "IDS_MAINFRM_87"
+msgid "Cannot load any source filter"
+msgstr "Nije moguće učitati nijedan izvorni filter"
+
+msgctxt "IDS_MAINFRM_88"
+msgid "Cannot render the file"
+msgstr "Nije moguće renderiranje dokumenta"
+
+msgctxt "IDS_MAINFRM_89"
+msgid "Invalid file format"
+msgstr "Neispravan format dokumenta"
+
+msgctxt "IDS_MAINFRM_90"
+msgid "File not found"
+msgstr "Dokument nije pronađen"
+
+msgctxt "IDS_MAINFRM_91"
+msgid "Unknown file type"
+msgstr "Nepoznat tip dokumenta"
+
+msgctxt "IDS_MAINFRM_92"
+msgid "Unsupported stream"
+msgstr "Tok nije podržan"
+
+msgctxt "IDS_MAINFRM_93"
+msgid "Cannot find DVD directory"
+msgstr "Nije moguće pronaći DVD direktorij"
+
+msgctxt "IDS_MAINFRM_94"
+msgid "Can't create the DVD Navigator filter"
+msgstr "Nije moguće kreirati DVD Navigacioni filter"
+
+msgctxt "IDS_AG_FAILED"
+msgid "Failed"
+msgstr "Nije uspjelo"
+
+msgctxt "IDS_MAINFRM_96"
+msgid "Can't create video capture filter"
+msgstr "Nije moguće kreirati filter za snimanje videa"
+
+msgctxt "IDS_MAINFRM_98"
+msgid "No capture filters"
+msgstr "Nema filtera za snimanje"
+
+msgctxt "IDS_MAINFRM_99"
+msgid "Can't create capture graph builder object"
+msgstr "Nije moguće kreirati gradivni objekt za grafik snimanja"
+
+msgctxt "IDS_MAINFRM_108"
+msgid "Couldn't open any device"
+msgstr "Zvuk"
+
+msgctxt "IDS_AG_SOUND"
+msgid "Sound"
+msgstr "Zvuk"
+
+msgctxt "IDS_MAINFRM_114"
+msgid "%s was not found, please insert media containing this file."
+msgstr "%s nije pronađen, molimo ubacite medij koji sadrži ovaj dokument."
+
+msgctxt "IDS_AG_ABORTED"
+msgid "Aborted"
+msgstr "Prekinuto"
+
+msgctxt "IDS_MAINFRM_116"
+msgid "&Properties..."
+msgstr "Karakteristike"
+
+msgctxt "IDS_MAINFRM_117"
+msgid " (pin) properties..."
+msgstr " (pin) karakteristike..."
+
+msgctxt "IDS_AG_UNKNOWN_STREAM"
+msgid "Unknown Stream"
+msgstr "Nepoznat Tok"
+
+msgctxt "IDS_AG_UNKNOWN"
+msgid "Unknown %u"
+msgstr "Nepoznato %u"
+
+msgctxt "IDS_AG_VSYNC"
+msgid "VSync"
+msgstr "VSync"
+
+msgctxt "IDS_MAINFRM_121"
+msgid " (Director Comments 1)"
+msgstr " (Komentar Režisera 1)"
+
+msgctxt "IDS_MAINFRM_122"
+msgid " (Director Comments 2)"
+msgstr " (Komentar Režisera 2)"
+
+msgctxt "IDS_DVD_SUBTITLES_ENABLE"
+msgid "Enable DVD subtitles"
+msgstr "Omogući DVD titlove"
+
+msgctxt "IDS_AG_ANGLE"
+msgid "Angle %u"
+msgstr "Ugao %u"
+
+msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
+msgid "Increase VSync Offset"
+msgstr "Povećaj VSync Offset"
+
+msgctxt "IDS_AG_DISABLED"
+msgid "Disabled"
+msgstr "Onemogućeno"
+
+msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
+msgid "Decrease VSync Offset"
+msgstr "Smanji VSync Offset"
+
+msgctxt "IDS_MAINFRM_136"
+msgid "MPC-HC D3D Fullscreen"
+msgstr "MPC-HC D3D Cijeli ekran"
+
+msgctxt "IDS_MAINFRM_137"
+msgid "Unknown format"
+msgstr "Nepoznat format"
+
+msgctxt "IDS_MAINFRM_138"
+msgid "Sub shift: %ld ms"
+msgstr "Pomak titla: %ld ms"
+
+msgctxt "IDS_VOLUME_BOOST_INC"
+msgid "Volume boost increase"
+msgstr "Povećanje pojačanja zvuka"
+
+msgctxt "IDS_VOLUME_BOOST_DEC"
+msgid "Volume boost decrease"
+msgstr "Smanjenje pojačanja zvuka"
+
+msgctxt "IDS_VOLUME_BOOST_MIN"
+msgid "Volume boost Min"
+msgstr "Pojačanje zvuka Min"
+
+msgctxt "IDS_VOLUME_BOOST_MAX"
+msgid "Volume boost Max"
+msgstr "Pojačanje zvuka Max"
+
+msgctxt "IDS_USAGE"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Upotreba: mpc-hc.exe \"putanja\" [prekidači]"
+
+msgctxt "IDS_UNKNOWN_SWITCH"
+msgid "Unrecognized switch(es) found in command line string: \n\n"
+msgstr "U stringu komandne linije su pronađeni nepoznati prekidači: \n\n"
+
+msgctxt "IDS_AG_TOGGLE_INFO"
+msgid "Toggle Information"
+msgstr "Prikaži/Sakrij Informacije"
+
+msgctxt "IDS_AG_TOGGLE_STATS"
+msgid "Toggle Statistics"
+msgstr "Prikaži/Sakrij Statistiku"
+
+msgctxt "IDS_AG_TOGGLE_STATUS"
+msgid "Toggle Status"
+msgstr "Prikaži/Sakrij Status"
+
+msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
+msgid "Toggle Subresync Bar"
+msgstr "Prikaži/Sakrij Subresync Traku"
+
+msgctxt "IDS_AG_TOGGLE_PLAYLIST"
+msgid "Toggle Playlist Bar"
+msgstr "Prikaži/Sakrij Traku Playliste"
+
+msgctxt "IDS_AG_TOGGLE_CAPTURE"
+msgid "Toggle Capture Bar"
+msgstr "Prikaži/Sakrij Traku za Snimanje"
+
+msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
+msgid "Toggle Debug Shaders"
+msgstr "Prikaži/Sakrij Sjenila Otklanjanja Grešaka"
+
+msgctxt "IDS_AG_ZOOM_50"
+msgid "Zoom 50%"
+msgstr "Zum 50%"
+
+msgctxt "IDS_AG_ZOOM_100"
+msgid "Zoom 100%"
+msgstr "Zum 100%"
+
+msgctxt "IDS_AG_ZOOM_200"
+msgid "Zoom 200%"
+msgstr "Zum 200%"
+
+msgctxt "IDS_AG_NEXT_AR_PRESET"
+msgid "Next AR Preset"
+msgstr "Sljedeće AR Podešenje"
+
+msgctxt "IDS_AG_VIDFRM_STRETCH"
+msgid "VidFrm Stretch"
+msgstr "VidFrm Razvlačenje"
+
+msgctxt "IDS_AG_VIDFRM_INSIDE"
+msgid "VidFrm Inside"
+msgstr "VidFrm Unutra"
+
+msgctxt "IDS_AG_VIDFRM_OUTSIDE"
+msgid "VidFrm Outside"
+msgstr "VidFrm Vani"
+
+msgctxt "IDS_AG_PNS_RESET"
+msgid "PnS Reset"
+msgstr "PnS Reset"
+
+msgctxt "IDS_AG_PNS_ROTATEX_P"
+msgid "PnS Rotate X+"
+msgstr "PnS Rotacija X+"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM1"
+msgid "VidFrm Zoom 1"
+msgstr "VidFrm Zum 1"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM2"
+msgid "VidFrm Zoom 2"
+msgstr "VidFrm Zum 2"
+
+msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
+msgid "VidFrm Switch Zoom"
+msgstr "VidFrm Zamijeni Zum"
+
+msgctxt "IDS_ENABLE_ALL_FILTERS"
+msgid "&Enable all filters"
+msgstr "Omogući sv&e filtere"
+
+msgctxt "IDS_LOGO_AUTHOR"
+msgid "Author unknown. Contact us if you made this logo!"
+msgstr "Autor je nepoznat. Kontaktirajte nas ako ste vi kreirali ovaj logo!"
+
+msgctxt "IDS_NO_MORE_MEDIA"
+msgid "No more media in the current folder."
+msgstr "U trenutnom folderu nema više media dokumenata."
+
+msgctxt "IDS_FIRST_IN_FOLDER"
+msgid "The first file of the folder is already loaded."
+msgstr "Već je učitan prvi dokument u folderu."
+
+msgctxt "IDS_LAST_IN_FOLDER"
+msgid "The last file of the folder is already loaded."
+msgstr "Već je učitan posljednji dokument u folderu."
+
+msgctxt "IDS_FRONT_LEFT"
+msgid "Front Left"
+msgstr "Naprijed Lijevo"
+
+msgctxt "IDS_FRONT_RIGHT"
+msgid "Front Right"
+msgstr "Naprijed Desno"
+
+msgctxt "IDS_FRONT_CENTER"
+msgid "Front Center"
+msgstr "Naprijed Centar"
+
+msgctxt "IDS_LOW_FREQUENCY"
+msgid "Low Frequency"
+msgstr "Niska Frekvencija"
+
+msgctxt "IDS_BACK_LEFT"
+msgid "Back Left"
+msgstr "Nazad Lijevo"
+
+msgctxt "IDS_BACK_RIGHT"
+msgid "Back Right"
+msgstr "Nazad Desno"
+
+msgctxt "IDS_FRONT_LEFT_OF_CENTER"
+msgid "Front Left of Center"
+msgstr "Naprijed Lijevo ili Centar"
+
+msgctxt "IDS_FRONT_RIGHT_OF_CENTER"
+msgid "Front Right of Center"
+msgstr "Naprijed Deno ili Centar"
+
+msgctxt "IDS_BACK_CENTER"
+msgid "Back Center"
+msgstr "Nazad Centar"
+
+msgctxt "IDS_SIDE_LEFT"
+msgid "Side Left"
+msgstr "Na stranu Lijevo"
+
+msgctxt "IDS_SIDE_RIGHT"
+msgid "Side Right"
+msgstr "Na stranu Desno"
+
+msgctxt "IDS_TOP_CENTER"
+msgid "Top Center"
+msgstr "Vrh Centar"
+
+msgctxt "IDS_TOP_FRONT_LEFT"
+msgid "Top Front Left"
+msgstr "Vrh Naprijed Lijevo"
+
+msgctxt "IDS_TOP_FRONT_CENTER"
+msgid "Top Front Center"
+msgstr "Vrh Naprijed Centar"
+
+msgctxt "IDS_TOP_FRONT_RIGHT"
+msgid "Top Front Right"
+msgstr "Vrh Naprijed Desno"
+
+msgctxt "IDS_TOP_BACK_LEFT"
+msgid "Top Back Left"
+msgstr "Vrh Nazad Lijevo"
+
+msgctxt "IDS_TOP_BACK_CENTER"
+msgid "Top Back Center"
+msgstr "Vrh Nazad Centar"
+
+msgctxt "IDS_TOP_BACK_RIGHT"
+msgid "Top Back Right"
+msgstr "Vrh Nazad Desno"
+
+msgctxt "IDS_TIME_TOOLTIP_ABOVE"
+msgid "Above seek bar"
+msgstr "Iznad trake za traženje"
+
+msgctxt "IDS_TIME_TOOLTIP_BELOW"
+msgid "Below seek bar"
+msgstr "Ispod trake za traženje"
+
+msgctxt "IDS_VIDEO_STREAM"
+msgid "Video: %s"
+msgstr "Video: %s"
+
+msgctxt "IDS_APPLY"
+msgid "Apply"
+msgstr "Primijeni"
+
+msgctxt "IDS_CLEAR"
+msgid "Clear"
+msgstr "Počisti"
+
+msgctxt "IDS_CANCEL"
+msgid "Cancel"
+msgstr "Otkaži"
+
+msgctxt "IDS_THUMB_THUMBNAILS"
+msgid "Layout"
+msgstr "Raspored"
+
+msgctxt "IDS_THUMB_PIXELS"
+msgid "Pixels:"
+msgstr "Piksela:"
+
+msgctxt "IDS_TEXTFILE_ENC"
+msgid "Encoding:"
+msgstr "Kodiranje:"
+
+msgctxt "IDS_DISABLE_ALL_FILTERS"
+msgid "&Disable all filters"
+msgstr "Onemogući sve filtere"
+
+msgctxt "IDS_ENABLE_AUDIO_FILTERS"
+msgid "Enable all audio decoders"
+msgstr "Omogući sve audio dekodere"
+
+msgctxt "IDS_DISABLE_AUDIO_FILTERS"
+msgid "Disable all audio decoders"
+msgstr "Onemogući sve audio dekodere"
+
+msgctxt "IDS_ENABLE_VIDEO_FILTERS"
+msgid "Enable all video decoders"
+msgstr "Omogući sve video dekodere"
+
+msgctxt "IDS_DISABLE_VIDEO_FILTERS"
+msgid "Disable all video decoders"
+msgstr "Onemogući sve video dekodere"
+
+msgctxt "IDS_STRETCH_TO_WINDOW"
+msgid "Stretch To Window"
+msgstr "Razvuci Na Prozor"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
+msgid "Touch Window From Inside"
+msgstr "Dodirni Prozor Iznutra"
+
+msgctxt "IDS_ZOOM1"
+msgid "Zoom 1"
+msgstr "Zum 1"
+
+msgctxt "IDS_ZOOM2"
+msgid "Zoom 2"
+msgstr "Zum 2"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
+msgid "Touch Window From Outside"
+msgstr "Dodirni Prozor Izvana"
+
+msgctxt "IDS_AUDIO_STREAM"
+msgid "Audio: %s"
+msgstr "Audio: %s"
+
+msgctxt "IDS_AG_REOPEN"
+msgid "Reopen File"
+msgstr "Ponovo Otovri Dokument"
+
+msgctxt "IDS_MFMT_AVI"
+msgid "AVI"
+msgstr "AVI"
+
+msgctxt "IDS_MFMT_MPEG"
+msgid "MPEG"
+msgstr "MPEG"
+
+msgctxt "IDS_MFMT_MPEGTS"
+msgid "MPEG-TS"
+msgstr "MPEG-TS"
+
+msgctxt "IDS_MFMT_DVDVIDEO"
+msgid "DVD-Video"
+msgstr "DVD-Video"
+
+msgctxt "IDS_MFMT_MKV"
+msgid "Matroska"
+msgstr "Matroska"
+
+msgctxt "IDS_MFMT_WEBM"
+msgid "WebM"
+msgstr "WebM"
+
+msgctxt "IDS_MFMT_MP4"
+msgid "MP4"
+msgstr "MP4"
+
+msgctxt "IDS_MFMT_MOV"
+msgid "QuickTime Movie"
+msgstr "QuickTime Film"
+
+msgctxt "IDS_MFMT_3GP"
+msgid "3GP"
+msgstr "3GP"
+
+msgctxt "IDS_MFMT_3G2"
+msgid "3G2"
+msgstr "3G2"
+
+msgctxt "IDS_MFMT_FLV"
+msgid "Flash Video"
+msgstr "Flash Video"
+
+msgctxt "IDS_MFMT_OGM"
+msgid "Ogg Media"
+msgstr "Ogg Media"
+
+msgctxt "IDS_MFMT_RM"
+msgid "Real Media"
+msgstr "Real Media"
+
+msgctxt "IDS_MFMT_RT"
+msgid "Real Script"
+msgstr "Real Script"
+
+msgctxt "IDS_MFMT_WMV"
+msgid "Windows Media Video"
+msgstr "Windows Media Video"
+
+msgctxt "IDS_MFMT_BINK"
+msgid "Smacker/Bink Video"
+msgstr "Smacker/Bink Video"
+
+msgctxt "IDS_MFMT_FLIC"
+msgid "FLIC Animation"
+msgstr "FLIC Animaticija"
+
+msgctxt "IDS_MFMT_DSM"
+msgid "DirectShow Media"
+msgstr "DirectShow Media"
+
+msgctxt "IDS_MFMT_IVF"
+msgid "Indeo Video Format"
+msgstr "Indeo Video Format"
+
+msgctxt "IDS_MFMT_OTHER"
+msgid "Other"
+msgstr "Ostalo"
+
+msgctxt "IDS_MFMT_SWF"
+msgid "Shockwave Flash"
+msgstr "Shockwave Flash"
+
+msgctxt "IDS_MFMT_OTHER_AUDIO"
+msgid "Other Audio"
+msgstr "Neki Drugi Audio"
+
+msgctxt "IDS_MFMT_AC3"
+msgid "AC-3"
+msgstr "AC-3"
+
+msgctxt "IDS_MFMT_AIFF"
+msgid "AIFF"
+msgstr "AIFF"
+
+msgctxt "IDS_MFMT_ALAC"
+msgid "Apple Lossless"
+msgstr "Apple Lossless"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
+msgctxt "IDS_MFMT_AMR"
+msgid "AMR"
+msgstr "AMR"
+
+msgctxt "IDS_MFMT_APE"
+msgid "Monkey's Audio"
+msgstr "Monkey's Audio"
+
+msgctxt "IDS_MFMT_AU"
+msgid "AU/SND"
+msgstr "AU/SND"
+
+msgctxt "IDS_MFMT_CDA"
+msgid "Audio CD track"
+msgstr "Audio CD track"
+
+msgctxt "IDS_MFMT_FLAC"
+msgid "FLAC"
+msgstr "FLAC"
+
+msgctxt "IDS_MFMT_M4A"
+msgid "MPEG-4 Audio"
+msgstr "MPEG-4 Audio"
+
+msgctxt "IDS_MFMT_MIDI"
+msgid "MIDI"
+msgstr "MIDI"
+
+msgctxt "IDS_MFMT_MKA"
+msgid "Matroska audio"
+msgstr "Matroska audio"
+
+msgctxt "IDS_MFMT_MP3"
+msgid "MP3"
+msgstr "MP3"
+
+msgctxt "IDS_MFMT_MPA"
+msgid "MPEG audio"
+msgstr "MPEG audio"
+
+msgctxt "IDS_MFMT_MPC"
+msgid "Musepack"
+msgstr "Musepack"
+
+msgctxt "IDS_MFMT_OFR"
+msgid "OptimFROG"
+msgstr "OptimFROG"
+
+msgctxt "IDS_MFMT_OGG"
+msgid "Ogg Vorbis"
+msgstr "Ogg Vorbis"
+
+msgctxt "IDS_MFMT_RA"
+msgid "Real Audio"
+msgstr "Real Audio"
+
+msgctxt "IDS_MFMT_TAK"
+msgid "TAK"
+msgstr "TAK"
+
+msgctxt "IDS_MFMT_TTA"
+msgid "True Audio"
+msgstr "True Audio"
+
+msgctxt "IDS_MFMT_PLS"
+msgid "Playlist"
+msgstr "Playlista"
+
+msgctxt "IDS_MFMT_BDPLS"
+msgid "Blu-ray playlist"
+msgstr "Blu-ray playlista"
+
+msgctxt "IDS_MFMT_RAR"
+msgid "RAR Archive"
+msgstr "RAR Arhiva"
+
+msgctxt "IDS_DVB_CHANNEL_FPS"
+msgid "FPS"
+msgstr "FPS"
+
+msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
+msgid "Resolution"
+msgstr "Rezolucija"
+
+msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Razmjera"
+
+msgctxt "IDS_OSD_RS_VSYNC_ON"
+msgid "VSync: On"
+msgstr "VSync: Uključeno"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFF"
+msgid "VSync: Off"
+msgstr "VSync: Isključeno"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
+msgid "Accurate VSync: On"
+msgstr "Tačni VSync: Uključeno"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
+msgid "Accurate VSync: Off"
+msgstr "Tačni VSync: Isključeno"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
+msgid "Synchronize Video to Display: On"
+msgstr "Sinhronizuj Video sa Display-em: Uključeno"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
+msgid "Synchronize Video to Display: Off"
+msgstr "Sinhronizuj Video sa Display-em: Isključeno"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
+msgid "Synchronize Display to Video: On"
+msgstr "Sinhronizuj Display sa Videom: Uključeno"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
+msgid "Synchronize Display to Video: Off"
+msgstr "Sinhronizuj Display sa Videom: Isključeno"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
+msgid "Present at Nearest VSync: On"
+msgstr "Prisutno kod najbližeg VSync-a: Uključeno"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
+msgid "Present at Nearest VSync: Off"
+msgstr "Prisutno kod najbližeg VSync-a: Isključeno"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
+msgid "Color Management: On"
+msgstr "Upravljanje Bojom: Uključeno"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
+msgid "Color Management: Off"
+msgstr "Upravljanje Bojom: Isključeno"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
+msgid "Input Type: Auto-Detect"
+msgstr "Tip Ulaza: Auto-Detekcija"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
+msgid "Input Type: HDTV"
+msgstr "Tip Ulaza: HDTV"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_NTSC"
+msgid "Input Type: SDTV NTSC"
+msgstr "Tip Ulaza: SDTV NTSC"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
+msgid "Input Type: SDTV PAL"
+msgstr "Tip Ulaza: SDTV PAL"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
+msgid "Ambient Light: Bright (2.2 Gamma)"
+msgstr "Svjetlo Okruženja: Svijetlo (2.2 Gamma)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
+msgid "Ambient Light: Dim (2.35 Gamma)"
+msgstr "Svjetlo Okruženja: Prigušeno (2.2 Gamma)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
+msgid "Ambient Light: Dark (2.4 Gamma)"
+msgstr "Svjetlo Okruženja: Tamno (2.2 Gamma)"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
+msgid "Rendering Intent: Perceptual"
+msgstr "Namjera Renderiranja: Po osjećaju"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
+msgid "Rendering Intent: Relative Colorimetric"
+msgstr "Namjera Renderiranja: Relativno Po bojama"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
+msgid "Rendering Intent: Saturation"
+msgstr "Namjera Renderiranja: Zasićenost"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
+msgid "Rendering Intent: Absolute Colorimetric"
+msgstr "Namjera Renderiranja: Apsolutno Po bojama"
+
+msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
+msgid "Output Range: %s"
+msgstr "Raspon Izlaza: %s"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
+msgid "Flush GPU before VSync: On"
+msgstr "Počisti GPU prije VSync: Uključeno"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
+msgid "Flush GPU before VSync: Off"
+msgstr "Počisti GPU prije VSync: Isključeno"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
+msgid "Flush GPU after Present: On"
+msgstr "Počisti GPU nakon Trenutnog: Uključeno"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
+msgid "Flush GPU after Present: Off"
+msgstr "Počisti GPU nakon Trenutnog: Isključeno"
+
+msgctxt "IDS_OSD_RS_WAIT_ON"
+msgid "Wait for GPU Flush: On"
+msgstr "Čekaj na GPU čišćenje: Uključeno"
+
+msgctxt "IDS_OSD_RS_WAIT_OFF"
+msgid "Wait for GPU Flush: Off"
+msgstr "Čekaj na GPU čišćenje: Isključeno"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
+msgid "D3D Fullscreen: On"
+msgstr "D3D na Cijeli ekran: Uključeno"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
+msgid "D3D Fullscreen: Off"
+msgstr "D3D na Cijeli ekran: Isključeno"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
+msgid "Disable desktop composition: On"
+msgstr "Onemogući desktop kompoziciju: Uključeno"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
+msgid "Disable desktop composition: Off"
+msgstr "Onemogući desktop kompoziciju: Isključeno"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
+msgid "Alternative VSync: On"
+msgstr "Alternativni VSync: Ujključeno"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
+msgid "Alternative VSync: Off"
+msgstr "Alternativni VSync: Isjključeno"
+
+msgctxt "IDS_OSD_RS_RESET_DEFAULT"
+msgid "Renderer settings reset to default"
+msgstr "Reset podešenja renderera na podrazumijevana"
+
+msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
+msgid "Renderer settings reset to optimal"
+msgstr "Reset podešenja renderera na optimalna"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
+msgid "D3D Fullscreen GUI Support: On"
+msgstr "GUI Podrška za D3D Prikaz preko cijelog ekrana: : Uključeno"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
+msgid "D3D Fullscreen GUI Support: Off"
+msgstr "GUI Podrška za D3D Prikaz preko cijelog ekrana: : Isključeno"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
+msgid "10-bit RGB Output: On"
+msgstr "10-bit RGB Izlaz: Uključeno"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
+msgid "10-bit RGB Output: Off"
+msgstr "10-bit RGB Izlaz: Isključeno"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
+msgid "Force 10-bit RGB Input: On"
+msgstr "Nametnuti 10-bit RGB Ulaz: Uključeno"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
+msgid "Force 10-bit RGB Input: Off"
+msgstr "Nametnuti 10-bit RGB Ulaz: Isključeno"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
+msgid "Full Floating Point Processing: On"
+msgstr "Puno Procesiranje Realnih Brojeva: Uključeno"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
+msgid "Full Floating Point Processing: Off"
+msgstr "Puno Procesiranje Realnih Brojeva: Isključeno"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
+msgid "Half Floating Point Processing: On"
+msgstr "Polu Procesiranje Realnih Brojeva: Uključeno"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
+msgid "Half Floating Point Processing: Off"
+msgstr "Polu Procesiranje Realnih Brojeva: Isključeno"
+
+msgctxt "IDS_BRIGHTNESS_DEC"
+msgid "Brightness decrease"
+msgstr "Smanji osvijetljenost"
+
+msgctxt "IDS_CONTRAST_INC"
+msgid "Contrast increase"
+msgstr "Povećaj kontrast"
+
+msgctxt "IDS_CONTRAST_DEC"
+msgid "Contrast decrease"
+msgstr "Smanji kontrast"
+
+msgctxt "IDS_HUE_INC"
+msgid "Hue increase"
+msgstr "Povećaj nijanse"
+
+msgctxt "IDS_HUE_DEC"
+msgid "Hue decrease"
+msgstr "Smanji nijanse"
+
+msgctxt "IDS_SATURATION_INC"
+msgid "Saturation increase"
+msgstr "Povećaj zasićenje"
+
+msgctxt "IDS_SATURATION_DEC"
+msgid "Saturation decrease"
+msgstr "Smanji zasićenje"
+
+msgctxt "IDS_RESET_COLOR"
+msgid "Reset color settings"
+msgstr "Resetuj podešenja za boju"
+
+msgctxt "IDS_USING_LATEST_STABLE"
+msgid "\nYou are already using the latest stable version."
+msgstr "\nVeć koristite zadnju stabilnu verziju."
+
+msgctxt "IDS_USING_NEWER_VERSION"
+msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
+msgstr "Vaša trenutna verzija je v%s.\n\nZadnja stabilna verzija je v%s."
+
+msgctxt "IDS_NEW_UPDATE_AVAILABLE"
+msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
+msgstr "Dostupan je MPC-HC v%s. Vi koristite v%s.\n\nDa li želite posjetiti web stranicu MPC-HC-a da preuzmete novu verziju?"
+
+msgctxt "IDS_UPDATE_ERROR"
+msgid "Update server not found.\n\nPlease check your internet connection or try again later."
+msgstr "Update server nije pronađen.\n\nMolimo provjerite svoju internet konekciju ili kasnije pokušajte ponovo."
+
+msgctxt "IDS_UPDATE_CLOSE"
+msgid "&Close"
+msgstr "Zatvori"
+
+msgctxt "IDS_OSD_ZOOM"
+msgid "Zoom: %.0lf%%"
+msgstr "Zum: %.0lf%%"
+
+msgctxt "IDS_OSD_ZOOM_AUTO"
+msgid "Zoom: Auto"
+msgstr "Zum: Auto"
+
+msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
+msgid "Toggle custom channel mapping"
+msgstr "Uključi/Isključi mapiranje kanala po mjeri"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
+msgid "Custom channel mapping: On"
+msgstr "Mapiranje kanala po mjeri: Uključeno"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
+msgid "Custom channel mapping: Off"
+msgstr "Mapiranje kanala po mjeri: Isključeno"
+
+msgctxt "IDS_NORMALIZE"
+msgid "Toggle normalization"
+msgstr "Uključi/Isključi normalizaciju"
+
+msgctxt "IDS_OSD_NORMALIZE_ON"
+msgid "Normalization: On"
+msgstr "Normalizacija: Uključeno"
+
+msgctxt "IDS_OSD_NORMALIZE_OFF"
+msgid "Normalization: Off"
+msgstr "Normalizacija: Isključeno"
+
+msgctxt "IDS_REGAIN_VOLUME"
+msgid "Toggle regain volume"
+msgstr "Uključi/Isključi vraćanje jačine zvuka"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
+msgid "Regain volume: On"
+msgstr "Vraćanje jačine zvuka: Uključeno"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
+msgid "Regain volume: Off"
+msgstr "Vraćanje jačine zvuka: Isključeno"
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bajta"
+
+msgctxt "IDS_SIZE_UNIT_K"
+msgid "KB"
+msgstr "KB"
+
+msgctxt "IDS_SIZE_UNIT_M"
+msgid "MB"
+msgstr "MB"
+
+msgctxt "IDS_SIZE_UNIT_G"
+msgid "GB"
+msgstr "GB"
+
+msgctxt "IDS_SPEED_UNIT_K"
+msgid "KB/s"
+msgstr "KB/s"
+
+msgctxt "IDS_SPEED_UNIT_M"
+msgid "MB/s"
+msgstr "MB/s"
+
+msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
+msgid "Could not create the tuner."
+msgstr "Nije bilo moguće kreirati tuner."
+
+msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
+msgid "Could not create the receiver."
+msgstr "Nije bilo moguće kreirati prijemnik."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
+msgid "Could not connect the network and the tuner."
+msgstr "Nije bilo moguće povezati mrežu i tuner."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
+msgid "Could not connect the tuner and the receiver."
+msgstr "Nije bilo moguće povezati tuner i prijemnik."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
+msgid "Could not connect the tuner."
+msgstr "Nije bilo moguće povezati tuner."
+
+msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
+msgid "Could not create the demultiplexer."
+msgstr "Nije bilo moguće kreirati demultiplekser."
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
+msgid "Error parsing the entered time!"
+msgstr "Greška pri raščlanjivanju vremena!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
+msgid "Error parsing the entered text!"
+msgstr "Greška pri raščlanjivanju unešenog teksta!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
+msgid "Error parsing the entered frame rate!"
+msgstr "Greška pri raščlanjivanju unesenog tempa!"
+
+msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Nije moguće pomijeranje po sličicama, probajte drugi video renderer."
+
+msgctxt "IDS_SCREENSHOT_ERROR_REAL"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
+msgstr "Finkcije \"Sačuvaj Sliku\" i \"Sačuvaj Sličice\" ne rade sa podrazumijevanim video rendererom za RealMedia.\nIzaberite jedan od DirectX renderera za RealMedia u opcijama izlaza za MPC-HC i ponovo otvorite dokument."
+
+msgctxt "IDS_SCREENSHOT_ERROR_QT"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
+msgstr "Finkcije \"Sačuvaj Sliku\" i \"Sačuvaj Sličice\" ne rade sa podrazumijevanim video rendererom za QuickTime.\nIzaberite jedan od DirectX renderera za QuickTime u opcijama izlaza za MPC-HC i ponovo otvorite dokument."
+
+msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
+msgstr "Funkcije \"Snimi Sliku\" i \"Snimi Sličice\" ne rade za Shockwave dokumente."
+
+msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
+msgstr "Finkcije \"Sačuvaj Sliku\" i \"Sačuvaj Sličice\" ne rade sa Overlay Mixer video rendererom.\nZamijenite video renderer u opcijama izlaza za MPC i ponovo otvorite dokument."
+
+msgctxt "IDS_MB_SHOW_EDL_EDITOR"
+msgid "Do you want to activate the EDL editor?"
+msgstr "Želite li da aktivirate EDL editor?"
+
+msgctxt "IDS_CAPTURE_ERROR"
+msgid "Capture Error"
+msgstr "Greška pri Snimanju."
+
+msgctxt "IDS_CAPTURE_ERROR_VIDEO"
+msgid "video"
+msgstr "video"
+
+msgctxt "IDS_CAPTURE_ERROR_AUDIO"
+msgid "audio"
+msgstr "audio"
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
+msgid "Can't add the %s buffer filter to the graph."
+msgstr "Na grafikon nije moguće dodati %s buffer."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
+msgid "Can't connect the %s buffer filter to the graph."
+msgstr "Nije moguće povezati %s buffer filter sa grafikonom."
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
+msgid "Can't add the %s encoder filter to the graph."
+msgstr "Nije moguće dodati %s enkoder filter na grafikon."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
+msgid "Can't connect the %s encoder filter to the graph."
+msgstr "Nije moguće povezati %s enkoder filter sa grafikonom."
+
+msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
+msgid "Can't set the compression format on the %s encoder filter."
+msgstr "Nije moguće postaviti format kompresije %s na enkoder filter."
+
+msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
+msgid "Can't connect the %s stream to the multiplexer filter."
+msgstr "Nije moguća konekcija %s toka na filter multipleksera."
+
+msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
+msgid "No video capture pin was found."
+msgstr "Nije pronađen pin za snimanje videa."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
+msgid "No audio capture pin was found."
+msgstr "Nije pronađen pin za snimanje audia."
+
+msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
+msgid "Error initializing the output file."
+msgstr "Greška pri inicijalizaciji izlaznog dokumenta."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
+msgid "Error initializing the audio output file."
+msgstr "Greška pri inicijlizaciji izlaznog audio dokumenta."
+
+msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
+msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+msgstr "Ispravan format vremena je [-]hh:mm:ss.ms (npr. 01:23:45.678)."
+
+msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
+msgid "This type is already in the list!"
+msgstr "Tip je već u listi!"
+
+msgctxt "IDS_WEBSERVER_ERROR_TEST"
+msgid "You need to apply the new settings before testing them."
+msgstr "Prije testiranja morate priomijeniti nova podešenja."
+
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
+msgid "After Playback: Exit"
+msgstr "Nakon Reprodukcije: Izlaz"
+
+msgctxt "IDS_AFTERPLAYBACK_STANDBY"
+msgid "After Playback: Stand By"
+msgstr "Nakon Reprodukcije: Na Čekanju"
+
+msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
+msgid "After Playback: Hibernate"
+msgstr "Nakon Reprodukcije: Hibernacija"
+
+msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
+msgid "After Playback: Shutdown"
+msgstr "Nakon Reprodukcije: Gašenje"
+
+msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
+msgid "After Playback: Log Off"
+msgstr "Nakon Reprodukcije: Odloguj se"
+
+msgctxt "IDS_AFTERPLAYBACK_LOCK"
+msgid "After Playback: Lock"
+msgstr "Nakon Reprodukcije: Zaključaj"
+
+msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
+msgid "After Playback: Turn off the monitor"
+msgstr "Nakon Reprodukcija: Isključi monitor"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Nakon Reprodukcije: Pokreni sljedeći dokument u folderu"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Nakon Reprodukcije: Ne radi ništa"
+
+msgctxt "IDS_OSD_BRIGHTNESS"
+msgid "Brightness: %s"
+msgstr "Osvijetljenost: %s"
+
+msgctxt "IDS_OSD_CONTRAST"
+msgid "Contrast: %s"
+msgstr "Kontrast: %s"
+
+msgctxt "IDS_OSD_HUE"
+msgid "Hue: %s°"
+msgstr "Nijansa %s°"
+
+msgctxt "IDS_OSD_SATURATION"
+msgid "Saturation: %s"
+msgstr "Zasićenje: %s"
+
+msgctxt "IDS_OSD_RESET_COLOR"
+msgid "Color settings restored"
+msgstr "Obnovljena su podešenja boje"
+
+msgctxt "IDS_OSD_NO_COLORCONTROL"
+msgid "Color control is not supported"
+msgstr "Kontrola boje nije podržana"
+
+msgctxt "IDS_BRIGHTNESS_INC"
+msgid "Brightness increase"
+msgstr "Povećanje osvijetljenosti"
+
+msgctxt "IDS_LANG_PREF_EXAMPLE"
+msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
+msgstr "Ovdje unesite preferirane jezike.\nNa primjer, upišite:\"eng jap swe\""
+
+msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
+msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
+msgstr "Eksterni spliteri mogu imati svoje opcije jezika, stoga MPC-HC podrazumijevano ponašanje je da ne mijenja njihov izbor.\nOmogućite ovu opciju ako želite da MPC-HC kontroliše eksterne splitere."
+
+msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
+msgid "&Blu-Ray playlists"
+msgstr "&Blu-Ray playliste"
+
+msgctxt "IDS_NAVIGATE_PLAYLIST"
+msgid "&Playlist"
+msgstr "&Playlista"
+
+msgctxt "IDS_NAVIGATE_CHAPTERS"
+msgid "&Chapters"
+msgstr "Poglavlja"
+
+msgctxt "IDS_NAVIGATE_TITLES"
+msgid "&Titles"
+msgstr "Naslovi"
+
+msgctxt "IDS_NAVIGATE_CHANNELS"
+msgid "&Channels"
+msgstr "Kanali"
+
+msgctxt "IDC_FASTSEEK_CHECK"
+msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
+msgstr "Ako je izabrano \"zadnji isječak\", traži do prvog isječka prije stvarne tačke traženja.\nAko je izabrano \"najbliži isječak\", traži do prvog isječka prije ili poslije tačke traženja, odvisno od toga koji je najbliži."
+
+msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
+msgid "Associate with all formats"
+msgstr "Poveži sa svim formatima"
+
+msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
+msgid "Associate with video formats only"
+msgstr "Poveži samo sa video formatima"
+
+msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
+msgid "Associate with audio formats only"
+msgstr "Poveži samo sa audio formatima"
+
+msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
+msgid "Clear all associations"
+msgstr "Počisti sve asocijacije"
+
+msgctxt "IDS_FILTER_SETTINGS_CAPTION"
+msgid "Settings"
+msgstr "Podešenja"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "Ass Filter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Dobavljač usluge"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Osoba sa oštećenim sluhom"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Download-i"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Rezultat"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Online traženje titlova nije uspjelo."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Online traženje titlova je otkazano."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Online traženje titlova je završeno, pronađeno je %d titlova."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Završena je online pretraga titlova. Nisu pronađeni titlovi."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Download titlove"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Online traženje titlova, molimo sačekajte..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Otkazivanje online traženja titlova..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Korisničko ime"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Status"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Spreman..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Nije implementirano."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Upload-ovanje..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Titlovi su uspješno upload-ovani."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Upload titlova nije uspio."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Upload titlova je otkazan."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Titlovi već postoje."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Upload titlova, molimo sačekajte..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Upload je završen."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Upload je otkazan."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Upload nije uspio."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Download-uj I Otvori"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Podešavanje"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Resetuj"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Pomakni Naviše"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Premakni Naniže"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Otvori URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Jezici"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "GREŠKA: Nije moguće uspostaviti internet konekciju."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Unesite akreditive za web stranicu"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Unesite svoje akreditive da se povežete:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Razmjera: Pretpostavi kvadratne piksele (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Download-ovano [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Upload-uj titlove"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Da li ste sigurni da želite upload-ovati titl \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Dobijanje podržanih jezika..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Nije uspjelo logiranje na \"%S\" sa korisničkim imenom \"%S\".\n\nMolimo unesite ispravno korisničko ime i šifru ili resetujte akreditive da se ulogujete kao anonimni korisnik."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Automatsko traženje i download će biti onemogućeno za sve media dokumente čija putanja sadrži bilo koji od uzoraka unesenih ovdje.\nNa primjer, unesite: \"privatno dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"putanja\"\tGlavni direktorij koji će biti učitan\n\t\t(dozvoljeni su zamjenski znakovi, \"-\" označava standardni unos)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dub ime\"\tUčitaj dodatni audio dokument"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"dokument\"\tUčitaj dodatni audio dokument pomaknut za XXms\n\t\t(ako dokument sadrži \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tPokreni renderiranje u D3D modusu preko cijelog ekrana"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"ime titla\"\tUčitaj dodatni titl dokument"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"ime filtera\"\tUčitaj DirectShow filtere iz DLL-a (dozvoljeni su zamjenski znakovi)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tPokreni u DVD modusu, \"uanja\" označava DVD folder (opciono)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tPokreni reprodukciju od naslova T, poglavlja C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tPokreni reprodukciju na poglavlju T, pozicija P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tUčitaj sve audio zapise sa Audio CD-a ili (S)VCD,\n\t\t\"putanja\" označava putanju do diska (opciono)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\tOtvori podarazumijevani video uređaj"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tOtvori dokument, ne pokreći reprodukciju automatski"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tPokreni reprodukciju odmah po pokretanju player-a"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tZatvori player nakon reprodukcije (radi samo zajedno sa /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tIsključi operativni sistem nakon reprodukcije"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tPostavi operativni sistem u standby nakon reprodukcije"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tPostavi operativni sistem u hibernaciju nakon reprodukcije"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tOdloguj korisnika nakon reprodukcije"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tZaključaj radnu stanicu nakon reprodukcije"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tIsključi monitor nakon reprodukcije"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tOtvori sljedeći dokument u direktoriju nakon reprodukcije"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tStartaj u modusu preko cijelog ekrana"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tStartaj minimiziran"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tKoristi novu instancu player-a"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tDodaj \"putanja\" u playlistu, može biti kombinovano sa /open i /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tReprodukcija po slučajnom redoslijedu"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tKreiraj asocijacije za video dokumente"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tKreiraj asocijacije za audio dokumente"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tKreiraj asocijacije za playliste"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tKreiraj asocijacije za sve podržane tipove dokumenata"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tUkloni sve asocijacije dokumenata"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tPokreni reprodukciju na \"ms\" (= milisekundi)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tPokreni reprodukciju na poziciji hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tPodesi fiksnu veličinu prozora"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tPokreni player na monitoru N, gdje N starta od 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tPri startu koristi audiorenderer N, gdje N starta od 1 (pogledaj \"Izlaz\" podešenja)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tPri startu koristi \"Pr\" podešenja sjenčila"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"ime\"\tSpecificiraj ime Pan&Scan podešenja koj eće biti korišteno"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tObnovi asocijacije ikonica formata"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tOtvori MPC-HC u pozadini"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tPokreni web sučelje na na izabranom portu"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tPrkaži informacije za ispravljanje grešaka na OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tOnemogući slanje izvještaja o greškama"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tKoristi MPC-HC kao roba (slave)"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tPodesi indeks GPU-a koji se koristi za hardversko dekodiranje.\n\t\tDostupno samo za CUVID i DXVA2 (kopiraj-nazad)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tVrati podrazumijevana podešenja"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tPrikaži pomoć o prekidačima komandne linije"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Granična vrijednost za ocjenu titlova koji će biti automatski download-ovani. Viša vrijednost znači da će biti učitani titlovi koji tačnije odgovaraju, dok niža vrijednost može rezultirati učitavanjem pogrešnih titlova. Međutim, ne postoji savršena vrijednost. Izaberite onu vrijednost koja vam najbolje odgovara."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Audio Odgoda (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Veličina podrazumijevane alatne trake u pikselima."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Koristi staru alatnu traku umjesto nove vektorizovane."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Kopiraj URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ca.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ca.dialogs.po
index cf17b9f55..1605683e0 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ca.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ca.dialogs.po
@@ -1,17 +1,23 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
-# papu <papu@openmailbox.org>, 2014
-# papu <papu@openmailbox.org>, 2014
+# Adolfo Jayme Barrientos, 2015
+# Adolfo Jayme Barrientos, 2015
+# Adolfo Jayme Barrientos, 2014
+# papu, 2014-2016
+# Roger <roger.espolet@gmail.com>, 2016
+# Roger <roger.espolet@gmail.com>, 2016
+# Roger <roger.espolet@gmail.com>, 2016-2017
+# Roger <roger.espolet@gmail.com>, 2016
+# papu, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-26 23:00+0000\n"
-"Last-Translator: papu <papu@openmailbox.org>\n"
-"Language-Team: Catalan (http://www.transifex.com/projects/p/mpc-hc/language/ca/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-06-13 11:30+0000\n"
+"Last-Translator: Roger <roger.espolet@gmail.com>\n"
+"Language-Team: Catalan (http://www.transifex.com/mpc-hc/mpc-hc/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -20,11 +26,11 @@ msgstr ""
msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
msgid "Select Media Type"
-msgstr "Seleccioni Tipus de Mitjà"
+msgstr "Trieu el tipus de mitjà"
msgctxt "IDD_SELECTMEDIATYPE_IDOK"
msgid "OK"
-msgstr "D'acord"
+msgstr "D’acord"
msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
msgid "Cancel"
@@ -36,7 +42,7 @@ msgstr "Vídeo"
msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
msgid "Set"
-msgstr "Fixar"
+msgstr "Estableix"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "Audio"
@@ -48,23 +54,23 @@ msgstr "Sortida"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
msgid "Record Video"
-msgstr "Gravar Vídeo"
+msgstr "Enregistra vídeo"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
msgid "Preview"
-msgstr "Vista prèvia"
+msgstr "Previsualitza"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
msgid "Record Audio"
-msgstr "Gravar Àudio"
+msgstr "Enregistra àudio"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
msgid "Preview"
-msgstr "Vista prèvia"
+msgstr "Previsualitza"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "V/A Buffers:"
-msgstr "Buffers V/A:"
+msgstr "Memòria intermèdia d’A/V:"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
msgid "Audio to wav"
@@ -72,19 +78,19 @@ msgstr "Àudio a WAV"
msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
msgid "Record"
-msgstr "Gravar"
+msgstr "Enregistra"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
msgid "Enable built-in audio switcher filter (requires restart)"
-msgstr "Activar interruptor del filtre d'àudio intern (requereix inicialitzar)"
+msgstr "Activa filtre commutador d'àudio integrat (cal reiniciar)"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
msgid "Normalize"
-msgstr "Normalitzar"
+msgstr "Normalitza"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
msgid "Max amplification:"
-msgstr "Amplificació Màxima:"
+msgstr "Amplificació màxima:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
msgid "%"
@@ -92,7 +98,7 @@ msgstr "%"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
msgid "Regain volume"
-msgstr "Guany de volum"
+msgstr "Recupera les pèrdues del volum"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
msgid "Boost:"
@@ -100,7 +106,7 @@ msgstr "Augment:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
msgid "Down-sample to 44100 Hz"
-msgstr "Resamplejar a 44100 Hz"
+msgstr "Redueix el mostreig a 44100 Hz"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
@@ -108,27 +114,27 @@ msgstr "Desplaçament de l'àudio (ms):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
-msgstr "Activar assignació de canal personalitzat"
+msgstr "Activa l'assignació de canals personalitzada"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Configuració dels altaveus"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
-msgstr "Canals d'entrada:"
+msgstr "canals d’entrada:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Prem la tecla \"shift\" per aplicar els canvis al moment"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Manteniu premuda la tecla Maj en fer clic per aplicar els canvis immediatament"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
-msgstr "Anar A..."
+msgstr "Vés a…"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
-msgstr "Introduïu un codi de temps en el format [hh:] mm: ss.ms per saltar-hi directament. No cal escriure els signes separadors de forma explícita."
+msgstr "Introdueixi un codi de temps amb el format [hh]:mm:ss.ms per saltar-hi directament. No cal escriure els signes separadors explícitament."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Time"
@@ -136,11 +142,11 @@ msgstr "Temps"
msgctxt "IDD_GOTO_DLG_IDC_OK1"
msgid "Go!"
-msgstr "Ves!"
+msgstr "Vés-hi"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
-msgstr "Escriu dos números per accedir a un fotograma específic, el primer es el nombre de fotogrames i el segon la velocitat de fotograma."
+msgstr "Introdueixi dos números per accedir a un fotograma específic; el primer és el nombre de fotogrames i el segon la taxa de fotogrames per segon."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Frame"
@@ -148,23 +154,23 @@ msgstr "Fotograma"
msgctxt "IDD_GOTO_DLG_IDC_OK2"
msgid "Go!"
-msgstr "Ves!"
+msgstr "Vés-hi"
msgctxt "IDD_OPEN_DLG_CAPTION"
msgid "Open"
-msgstr "Obrir"
+msgstr "Obre"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Escriu el camí de l'arxiu multimèdia ( a Internet o al teu ordinador) y el reproductor l'obrirà per tu."
+msgstr "Escrigui la ruta del fitxer multimèdia (d'Internet o de l'ordinador) i el reproductor l'obrirà per vostè."
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
-msgstr "Obrir:"
+msgstr "Obre:"
msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
msgid "Browse..."
-msgstr "Explorar..."
+msgstr "Navega..."
msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
msgid "Dub:"
@@ -172,39 +178,39 @@ msgstr "Doblatge:"
msgctxt "IDD_OPEN_DLG_IDC_BUTTON2"
msgid "Browse..."
-msgstr "Explorar..."
+msgstr "Navega..."
msgctxt "IDD_OPEN_DLG_IDOK"
msgid "OK"
-msgstr "D'acord"
+msgstr "D’acord"
msgctxt "IDD_OPEN_DLG_IDCANCEL"
msgid "Cancel"
-msgstr "Cancel.lar"
+msgstr "Cancel·la"
msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
msgid "Add to playlist without opening"
-msgstr "Afegir a la Llista de reproducció sense obrir"
+msgstr "Afegeix-ho a la llista de reproducció sense obrir-ho"
msgctxt "IDD_ABOUTBOX_CAPTION"
msgid "About"
msgstr "Quant a"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 veure l'arxiu Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 Vegeu el fitxer Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
-msgstr "Aquet programa és gratuït i distribuït sota la Llicència Pública General de GNU."
+msgstr "Aquest programa és gratuït i distribuït sota la Llicència Pública General de GNU."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Traducció al català per l'Enric"
+msgstr "Traducció al català feta per, entre d'altres, l’Enric, l’Adolf i el Roger"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
-msgstr "Informació de Compilació"
+msgstr "Informació de compilació"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Version:"
@@ -216,11 +222,11 @@ msgstr "Compilador:"
msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
msgid "Not used"
-msgstr "No s'utilitza"
+msgstr "Sense utilitzar"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build date:"
-msgstr "Data de Compilació:"
+msgstr "Data de compilació:"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Operating system"
@@ -232,27 +238,27 @@ msgstr "Nom:"
msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
msgid "Copy to clipboard"
-msgstr "Copiar al porta-retalls"
+msgstr "Copia al porta-retalls"
msgctxt "IDD_ABOUTBOX_IDOK"
msgid "OK"
-msgstr "D'acord"
+msgstr "D’acord"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Open options"
-msgstr "Opcions d'obertura"
+msgstr "Opcions d’obertura"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
msgid "Use the same player for each media file"
-msgstr "Usar el mateix reproductor per a cada arxiu de mitjans que es reprodueixi"
+msgstr "Utilitza el mateix reproductor per a cada fitxer multimèdia"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
msgid "Open a new player for each media file played"
-msgstr "Obrir un nou reproductor per cada arxiu de mitjans que es reprodueixi"
+msgstr "Obre un reproductor nou per a cada fitxer multimèdia"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Language"
-msgstr "Llenguatge"
+msgstr "Idioma"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Title bar"
@@ -260,19 +266,19 @@ msgstr "Barra del títol"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
msgid "Display full path"
-msgstr "Mostrar el camí complet"
+msgstr "Visualitza el camí complet"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
msgid "File name only"
-msgstr "Només el nom de l'arxiu"
+msgstr "Només el nom del fitxer"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
msgid "Don't prefix anything"
-msgstr "No mostrar res"
+msgstr "No prefixis res"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
msgid "Replace file name with title"
-msgstr "Substituir el nom del fixer pel títol"
+msgstr "Substitueix el nom del fixer pel seu títol"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Other"
@@ -280,35 +286,35 @@ msgstr "Altres"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
msgid "Tray icon"
-msgstr "Icona a la safata del sistema"
+msgstr "Icona de la safata del sistema"
msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
msgid "Show OSD (requires restart)"
-msgstr "Mostrar OSD (requereix inicialitzar)"
+msgstr "Mostra OSD (cal que reinicieu)"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
msgid "Limit window proportions on resize"
-msgstr "Limitar proporcions finestra al canviar tamany"
+msgstr "Bloqueja les proporcions en redimensionar la finestra"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
msgid "Snap to desktop edges"
-msgstr "Ajustar a les vores de l'escriptori"
+msgstr "Atreu la finestra a les vores de l'escriptori"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
msgid "Store settings in .ini file"
-msgstr "Desar la configuració a un arxiu .ini"
+msgstr "Desa els paràmetres en un fitxer .ini"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
-msgstr "Desactivar el menú \"Obrir Disc\""
+msgstr "Inhabilita el menú «Obre el disc»"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
msgid "Process priority above normal"
-msgstr "Més prioritat pel procés"
+msgstr "Més prioritat al procés per sobre el normal"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
-msgstr "Activar suport de l'art de les portades"
+msgstr "Activa el suport per a les caràtules"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "History"
@@ -316,47 +322,47 @@ msgstr "Historial"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
msgid "Keep history of recently opened files"
-msgstr "Mantenir l'historial dels arxius oberts"
+msgstr "Mantén historial dels fitxers oberts recentment"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
msgid "Remember last playlist"
-msgstr "Recordar l'última llista de reproducció"
+msgstr "Recorda l'última llista de reproducció"
msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
msgid "Remember File position"
-msgstr "Recordar la posició de l'arxiu"
+msgstr "Recorda la posició del fitxer"
msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
msgid "Remember DVD position"
-msgstr "Recordar la posició del DVD"
+msgstr "Recorda la posició del DVD"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
msgid "Remember last window position"
-msgstr "Recordar posició de la finestra"
+msgstr "Recorda la posició de la finestra"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
msgid "Remember last window size"
-msgstr "Recordar tamany de la finestra"
+msgstr "Recorda la mida de la finestra"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
msgid "Remember last Pan-n-Scan Zoom"
-msgstr "Recordar l'últim Zoom de Pan-n-Scan"
+msgstr "Recorda el darrer zoom de reenquadrament"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
-msgstr "Comportament de \"Llençar un DVD/BD\""
+msgstr "Comportament de \"Obre un DVD/BD\""
msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
msgid "Prompt for location"
-msgstr "Preguntar per la ubicació"
+msgstr "Sol·licita la ubicació"
msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
msgid "Always open the default location:"
-msgstr "Sembre obrir la ubicació per defecte:"
+msgstr "Obre sempre la ubicació per defecte:"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Preferred language for DVD Navigator and the external OGM Splitter"
-msgstr "Idioma preferit pel menú del DVD i l'OGM Splitter extern"
+msgstr "Idioma preferit pel menú del DVD i el divisor extern de l'OGM"
msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
msgid "Menu"
@@ -372,11 +378,11 @@ msgstr "Subtítols"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Additional settings"
-msgstr "Ajustos addicionals"
+msgstr "Configuracions addicionals"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
-msgstr "Permetre subtítols amb \"Line 21 Decoder\""
+msgstr "Permet subtítols per a sords en el filtre \"Line 21 Decoder\""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
@@ -400,7 +406,7 @@ msgstr "Balanç"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "L"
-msgstr "I"
+msgstr "L"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "R"
@@ -412,23 +418,27 @@ msgstr "Reproducció"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
msgid "Play"
-msgstr "Reproduir"
+msgstr "Reprodueix"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
msgid "Repeat forever"
-msgstr "Repetir per sempre"
+msgstr "Repeteix indefinidament"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
msgid "time(s)"
-msgstr "cop(vegades)"
+msgstr "cop(s)"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Mode de repetició:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Després de reproducció"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Sortida"
+msgid "Default zoom"
+msgstr "Zoom per defecte"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -436,7 +446,7 @@ msgstr "Zoom automàtic:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
-msgstr "Factor de zoom automàtic:"
+msgstr "Factor de l'autoajustament:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
msgid "%"
@@ -444,7 +454,7 @@ msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Default track preference"
-msgstr "Pista per defecte"
+msgstr "Preferències de la pista per defecte"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
@@ -456,27 +466,23 @@ msgstr "Àudio:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr "Anul·lar opcions de maquinari forà (splitter)"
+msgstr "Permet elecció manual del divisor o \"splitter\" extern"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
-msgstr "Ajustos d'inici"
+msgstr "Paràmetres d’obertura"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
msgid "Use worker thread to construct the filter graph"
-msgstr "Ajuda en la construcció del Filter Graph"
+msgstr "Utilitza subprocés de treball per construir el diagrama de filtres"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
-msgstr "Reportar conectors que no volen funcionar"
+msgstr "Informa d'etapes (del diagrama de filtres) que no aconsegueixin renderitzar "
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
-msgstr "Carga automàtica d'àudio"
-
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Usar el processador de subtítols incorporat"
+msgstr "Carrega fitxers d'àudio automàticament"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
@@ -484,7 +490,7 @@ msgstr "Controls"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Volume step:"
-msgstr "Pas de Volum:"
+msgstr "Salt de volum:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "%"
@@ -492,11 +498,11 @@ msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Speed step:"
-msgstr "Pas d'Acceleració:"
+msgstr "Salt de velocitat:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
msgid "Override placement"
-msgstr "Reescriure l'ubicació"
+msgstr "Posicionament manual"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
msgid "Horizontal:"
@@ -516,7 +522,7 @@ msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr "Pas de retart"
+msgstr "Grau de retard"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -524,11 +530,11 @@ msgstr "ms"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Texture settings (open the video again to see the changes)"
-msgstr "Opcions de textura (es necessari reobrir l'arxiu perque tingui efecta)"
+msgstr "Opcions de textura (es necessari reobrir el fitxer per veure els canvis)"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Sub pictures to buffer:"
-msgstr "Nombre de pre càrrega de subtítols:"
+msgstr "Nombre de subtítols a la memòria intermèdia:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Maximum texture resolution:"
@@ -536,27 +542,27 @@ msgstr "Resolució màxima de la textura:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
msgid "Never animate the subtitles"
-msgstr "Mai permetre animacions als subtítols"
+msgstr "No permetis animació als subtítols"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
msgid "Render at"
-msgstr "Renderitzar a"
+msgstr "Renderitza el"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
msgid "% of the animation"
-msgstr "% de la animació"
+msgstr "% de l'animació"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
msgid "Animate at"
-msgstr "Animacions a"
+msgstr "Anima el"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
msgid "% of the video frame rate"
-msgstr "% del fotograma de vídeo"
+msgstr "% de les imatges per segon del vídeo"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr "Permete la pèrdua d'algunes subimatges si la cua s'està enderrerint"
+msgstr "Permet la pèrdua d'alguns subtítols pre-renderitzats si la cua va amb retard"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
@@ -564,19 +570,19 @@ msgstr "Format del rendetirzador"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
msgid "Apply aspect ratio compensation for anamorphic videos"
-msgstr "Aplicar la compensació de la relació d'aspecte per als vídeos anamòrfics"
+msgstr "Aplica la compensació de la relació d'aspecte per als vídeos anamòrfics"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Warning"
msgstr "Advertència"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Si actives l'antialiasing a pantalla completa en les opcions de la tarja gràfica, els subtítols no es veuran millor i exigirant força cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Si activa manualment el suavitzat (antialiasing) a pantalla completa en alguna de les opcions de la seva targeta gràfica, segurament es dissiparà l'ús de la CPU sense aconseguir cap millora en l'aspecte dels subtítols."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
-msgstr "Extensions d'arxiu"
+msgstr "Extensions de fitxer"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
msgid "Default"
@@ -584,7 +590,7 @@ msgstr "Per defecte"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
msgid "Set"
-msgstr "Fixar"
+msgstr "Estableix"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
msgid "Association"
@@ -592,11 +598,11 @@ msgstr "Associació"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr "Utilitzeu les icones del format específic"
+msgstr "Utilitza les icones específiques del format"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr "Executar com a &administrador"
+msgstr "Executa com a &administrador"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
@@ -604,7 +610,7 @@ msgstr "Estableix com a programa per &defecte"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
-msgstr "Gestor del Protocol de Transmisions en Temps Real (per rtsp://... URLs)"
+msgstr "Gestor del protocol de transmissions en temps real (per a URL rtsp://)"
msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
msgid "RealMedia"
@@ -620,23 +626,23 @@ msgstr "DirectShow"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
msgid "Check file extension first"
-msgstr "Mirar primer l'extensió"
+msgstr "Comprova primer l'extensió del fitxer"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Explorer Context Menu"
-msgstr "Menú contextual del gestor d'arxius"
+msgstr "Menú contextual de l’Explorador"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK6"
msgid "Directory"
-msgstr "Directori"
+msgstr "Carpeta"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK7"
msgid "File(s)"
-msgstr "Arxiu(s)"
+msgstr "Fitxer(s)"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
msgid "Autoplay"
-msgstr "Reproducció Automàtica"
+msgstr "Reproducció automàtica"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
msgid "Video"
@@ -652,7 +658,7 @@ msgstr "DVD"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
msgid "Audio CD"
-msgstr "CDs d'Àudio"
+msgstr "CD d’àudio"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "Jump distances (small, medium, large in ms)"
@@ -664,63 +670,63 @@ msgstr "Original"
msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
msgid "Fast seek (on keyframe)"
-msgstr "Desplaçament Ràpid(al fotograma clau)"
+msgstr "Desplaçament ràpid (al fotograma clau)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
msgid "Show chapter marks in seek bar"
-msgstr "Mostra la posició dels capítols dins de la barra de desplaçament"
+msgstr "Mostra les marques dels capítols a la barra de desplaçament"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
-msgstr "Mostra el títol \"En reproducció\" en els missatges d'estat d'ànim del Skype"
+msgstr "Mostra el títol del que s'estigui reproduïnt al missatge d'estat d'ànim de l'Skype"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
-msgstr "Prevenir MINIMITZAR des de pantalla completa al monitor secundari"
+msgstr "Evita minimitzar el reproductor quan està en pantalla completa al utilitzar un altre monitor"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Usar característiques de la barra de tasques del Win7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Utilitza les característiques de la barra de tasques millorada"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Obrir el fitxer de la carpeta següent/anterior amb \"Skip back/forward\" quan només hi ha un element de llista de reproducció"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Obre el fitxer anterior/següent de la carpeta amb els botons \"Retrocedeix/Avança\" quan només hi hagi un element a la llista de reproducció"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "Usar la descripció emergent de temps:"
+msgid "Show time tooltip:"
+msgstr "Mostra l'etiqueta emergent de temps:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
-msgstr "Estil del OSD:"
+msgstr "Tipus de lletra de la sobreimpressió (OSD):"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
msgid "Enable Logitech LCD support (experimental)"
-msgstr "Activar suport LCD per teclat Logitech (experimental)"
+msgstr "Activa la compatibilitat amb LCD de Logitech (teclat amb pantalla) (experimental)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
-msgstr "Amagar automàticament el punter del ratolí durant la reproducció en mode de finestra"
+msgstr "Amaga automàticament el punter del ratolí durant la reproducció en mode finestra"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
msgid "Add Filter..."
-msgstr "Afegir Filtre..."
+msgstr "Afegeix un filtre…"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
msgid "Remove"
-msgstr "Eliminar"
+msgstr "Elimina"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO1"
msgid "Prefer"
-msgstr "Preferir"
+msgstr "Prefereix"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO2"
msgid "Block"
-msgstr "Bloquejar"
+msgstr "Bloqueja"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
msgid "Set merit:"
-msgstr "Fixar Mèrit:"
+msgstr "Estableix mèrit:"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
msgid "Up"
@@ -732,19 +738,19 @@ msgstr "Avall"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
msgid "Add Media Type..."
-msgstr "Afegeix un Tipus..."
+msgstr "Afegeix un tipus de mitjà..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
msgid "Add Sub Type..."
-msgstr "Afegir Subtipus..."
+msgstr "Afegeix un subtipus..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
msgid "Delete"
-msgstr "Borrar"
+msgstr "Suprimeix"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
msgid "Reset List"
-msgstr "Inicialitzar Llista"
+msgstr "Restableix la llista"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Type:"
@@ -752,19 +758,19 @@ msgstr "Tipus:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Size:"
-msgstr "Tamany:"
+msgstr "Mida:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Media length:"
-msgstr "Duració:"
+msgstr "Durada:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Video size:"
-msgstr "Tamany del vídeo:"
+msgstr "Resolució:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Created:"
-msgstr "Creat:"
+msgstr "Creació:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Clip:"
@@ -776,11 +782,11 @@ msgstr "Autor:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Copyright:"
-msgstr "Copyright:"
+msgstr "Drets d’autor:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Rating:"
-msgstr "Clasificació:"
+msgstr "Classificació:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Location:"
@@ -792,23 +798,23 @@ msgstr "Descripció:"
msgctxt "IDD_FAVADD_CAPTION"
msgid "Add Favorite"
-msgstr "Afegir a Favorits"
+msgstr "Afegeix-ho a Preferits"
msgctxt "IDD_FAVADD_IDC_STATIC"
msgid "Choose a name for your shortcut:"
-msgstr "Escull un nom per la drecera de teclat:"
+msgstr "Triï un nom per a l'accés directe:"
msgctxt "IDD_FAVADD_IDC_CHECK1"
msgid "Remember position"
-msgstr "Recordar posició"
+msgstr "Recorda la posició"
msgctxt "IDD_FAVADD_IDCANCEL"
msgid "Cancel"
-msgstr "Cancel.lar"
+msgstr "Cancel·la"
msgctxt "IDD_FAVADD_IDOK"
msgid "OK"
-msgstr "D'acord"
+msgstr "D’acord"
msgctxt "IDD_FAVADD_IDC_CHECK2"
msgid "Relative drive"
@@ -816,31 +822,31 @@ msgstr "Unitat relativa"
msgctxt "IDD_FAVORGANIZE_CAPTION"
msgid "Organize Favorites"
-msgstr "Organitzar Favorits"
+msgstr "Organitza els Preferits"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
msgid "Rename"
-msgstr "Renombrar"
+msgstr "Canvia el nom"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
msgid "Move Up"
-msgstr "Pujar"
+msgstr "Amunt"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
msgid "Move Down"
-msgstr "Baixar"
+msgstr "Avall"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
msgid "Delete"
-msgstr "Borrar"
+msgstr "Suprimeix"
msgctxt "IDD_FAVORGANIZE_IDOK"
msgid "OK"
-msgstr "D'acord"
+msgstr "D’acord"
msgctxt "IDD_PNSPRESET_DLG_CAPTION"
msgid "Pan&Scan Presets"
-msgstr "Mode Pan&Scan"
+msgstr "Modes de reenquadrament (pan&scan)"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
msgid "New"
@@ -848,27 +854,27 @@ msgstr "Nou"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON3"
msgid "Delete"
-msgstr "Borrar"
+msgstr "Suprimeix"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
msgid "Up"
-msgstr "Pujar"
+msgstr "Puja"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
msgid "Down"
-msgstr "Baixar"
+msgstr "Baixa"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
msgid "&Set"
-msgstr "&Posar"
+msgstr "&Estableix"
msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
msgid "&Cancel"
-msgstr "&Cancel.lar"
+msgstr "&Cancel·la"
msgctxt "IDD_PNSPRESET_DLG_IDOK"
msgid "&Save"
-msgstr "&Desar"
+msgstr "&Desa"
msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
msgid "Pos: 0.0 -> 1.0"
@@ -884,11 +890,11 @@ msgstr "Tecles multimèdia globals"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
msgid "Select All"
-msgstr "Seleccionar Tots"
+msgstr "Selecciona-les totes"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
msgid "Reset Selected"
-msgstr "Inicialitzar Selecció"
+msgstr "Restableix les seleccionades"
msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
msgid "Warning"
@@ -896,35 +902,35 @@ msgstr "Advertència"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
-msgstr "MPC-HC no pot renderitzar alguns dels conectors de l'esquema, potser no tens els còdecs o filtres necessàris instal·lats al sistema."
+msgstr "L'MPC-HC no pot renderitzar algunes de les etapes del diagrama de filtres, potser no té instal·lats els còdecs o filtres necessaris al sistema."
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
msgid "The following pin(s) failed to find a connectable filter:"
-msgstr "Els seguents conectors no han trobat un filtre conectable:"
+msgstr "Les següents etapes no han pogut trobar un filtre connectable:"
msgctxt "IDD_MEDIATYPES_DLG_IDOK"
msgid "Close"
-msgstr "Buscar codecs a la xarxa"
+msgstr "Tanca"
msgctxt "IDD_SAVE_DLG_CAPTION"
msgid "Saving..."
-msgstr "Desant..."
+msgstr "S’està desant…"
msgctxt "IDD_SAVE_DLG_IDCANCEL"
msgid "Cancel"
-msgstr "Cancel.lar"
+msgstr "Cancel·la"
msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
msgid "Encoding:"
-msgstr "Codificant:"
+msgstr "Codificació:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC1"
msgid "Encoding:"
-msgstr "Codificant:"
+msgstr "Codificació:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
msgid "Delay:"
-msgstr "Retart:"
+msgstr "Retard:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
msgid "ms"
@@ -932,11 +938,11 @@ msgstr "ms"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
msgid "Save custom style"
-msgstr "Gravar estil personalitzat"
+msgstr "Desa l’estil personalitzat"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr "Qualitat JPEG:"
+msgstr "Qualitat del JPEG:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Thumbnails:"
@@ -952,7 +958,7 @@ msgstr "columnes"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Image width:"
-msgstr "Ample:"
+msgstr "Amplada de la imatge:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "pixels"
@@ -960,19 +966,19 @@ msgstr "píxels"
msgctxt "IDD_ADDREGFILTER_CAPTION"
msgid "Select Filter"
-msgstr "Seleccionar Filtre"
+msgstr "Trieu un filtre"
msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
msgid "Browse..."
-msgstr "Explorar..."
+msgstr "Navega..."
msgctxt "IDD_ADDREGFILTER_IDOK"
msgid "OK"
-msgstr "D'acord"
+msgstr "D’acord"
msgctxt "IDD_ADDREGFILTER_IDCANCEL"
msgid "Cancel"
-msgstr "Cancel.lar"
+msgstr "Cancel·la"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Font"
@@ -984,7 +990,7 @@ msgstr "Tipus de lletra"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Spacing"
-msgstr "Espai"
+msgstr "Espaiat"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Angle (z,°)"
@@ -1000,7 +1006,7 @@ msgstr "Escala (y,%)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Border Style"
-msgstr "Estil de les Vores"
+msgstr "Estil de la vora"
msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
msgid "Outline"
@@ -1012,7 +1018,7 @@ msgstr "Caixa opaca"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Width"
-msgstr "Vora"
+msgstr "Amplada"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Shadow"
@@ -1020,7 +1026,7 @@ msgstr "Ombra"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Screen Alignment && Margins"
-msgstr "Alienació i Marges"
+msgstr "Alineament en pantalla i marges"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Left"
@@ -1040,11 +1046,11 @@ msgstr "Sota"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
msgid "Position subtitles relative to the video frame"
-msgstr "Posició subtítols relativa a la imatge"
+msgstr "Posiciona els subtítols en relació al fotograma"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Colors && Transparency"
-msgstr "Colors i Transparència"
+msgstr "Colors i transparència"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "0%"
@@ -1068,31 +1074,31 @@ msgstr "Contorn"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
msgid "Link alpha channels"
-msgstr "Vincular canals alfa"
+msgstr "Vincula els canals alfa"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
-msgstr "Si prefereix utilitzar les versions independents d'aquets filtres o algún altre reemplaçament, desactivi'ls aquí."
+msgstr "Si desitja utilitzar les versions individuals d'aquests filtres o algun altre substitut, desactiveu-los aquí."
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Source Filters"
-msgstr "Filtres Font"
+msgstr "Filtres de fonts"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Transform Filters"
-msgstr "Filtres de Transformació"
+msgstr "Filtres de transformació"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Internal LAV Filters settings"
-msgstr "Configuració els LAV Filters interns"
+msgstr "Configuració dels LAV Filters interns"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
msgid "Splitter"
-msgstr "Splitter"
+msgstr "Desmultiplexor (Splitter)"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
msgid "Video decoder"
-msgstr "Descodificador de Vídeo"
+msgstr "Descodificador de vídeo"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
msgid "Audio decoder"
@@ -1108,7 +1114,7 @@ msgstr "Extern:"
msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
msgid "Browse..."
-msgstr "Explorar..."
+msgstr "Navega..."
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DirectShow Video"
@@ -1124,11 +1130,11 @@ msgstr "Vídeo QuickTime"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Audio Renderer"
-msgstr "Renderitzador d'Àudio"
+msgstr "Renderitzador d'àudio"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (sense res) and EVR (CP) settings"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Configuració del VMR-9 (sense renderitzat) i de l'EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1136,23 +1142,23 @@ msgstr "Superfície:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Resizer:"
-msgstr "Interpolació:"
+msgstr "Redimensionador:"
msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
msgid "Select D3D9 Render Device"
-msgstr "Seleccionar dispositiu de D3D9"
+msgstr "Selecciona el dispositiu de D3D9"
msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
msgid "Reinitialize when changing display"
-msgstr "Restablir quant canviï la pantalla"
+msgstr "Restableix en canviar la pantalla"
msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
msgid "D3D Fullscreen"
-msgstr "Pantalla completa amb D3D"
+msgstr "D3D a pantalla completa"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Alternative VSync"
-msgstr "VSync alternatiu"
+msgstr "Sincronització Vertical alternativa"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
msgid "VMR-9 Mixer Mode"
@@ -1164,15 +1170,15 @@ msgstr "Mesclador YUV"
msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
msgid "EVR Buffers:"
-msgstr "Buffers de l'EVR:"
+msgstr "Memòria intermèdia de l'EVR:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Subtítols *"
+msgid "Subtitles"
+msgstr "Subtítols"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1184,43 +1190,51 @@ msgstr "Shaders"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Rotation"
-msgstr "Rotació"
+msgstr "Gir"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Filtres externs (com VSFilter) poden mostrar subtítols en tots els renderitzadors."
+msgid "Subtitle Renderer"
+msgstr "Renderitzador dels subtítols"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Emmagatzema els shaders compilats a la memòria cau"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
-msgstr "Escoltar al port"
+msgstr "Port que rep les conexions:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
msgid "Launch in web browser..."
-msgstr "Llençar dins del navegador..."
+msgstr "Obre-ho al navegador web..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
msgid "Enable compression"
-msgstr "Activar compresió"
+msgstr "Activa la compressió"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
-msgstr "Permitir acces només des del host local"
+msgstr "Permet l'accés només des d'aquest ordinador (localhost)"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Activa la previsualització"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
-msgstr "Imprimir informació de depuració"
+msgstr "Imprimeix la informació de depuració"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
msgid "Serve pages from:"
-msgstr "Servir pàginas des de:"
+msgstr "Serveix les pàgines des de:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
msgid "Browse..."
-msgstr "Explorar..."
+msgstr "Navega..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
msgid "Deploy..."
-msgstr "Desplegar..."
+msgstr "Desplega..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
msgid "Default page:"
@@ -1228,27 +1242,55 @@ msgstr "Pàgina per defecte:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
-msgstr "Gestors de CGI: (.ext1=ruta1;.ext2=ruta2;...)"
+msgstr "Gestors del CGI: (.ext1=ruta1;.ext2=ruta2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Subtítols disponibles en línea"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Descarregar i Obrir"
+msgid "Download subtitles"
+msgstr "Descarrega els subtítols"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Remplaçar els subtítols actuals"
+msgstr "Reemplaça els subtítols carregats actualment"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Descarrega"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Actualitza"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Cancel·la"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opcions"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Penja els subtítols"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Penja"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Cancel·la"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opcions"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
-msgstr "Desar Com a.."
+msgstr "Anomena i desa…"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Color controls (for VMR-9, EVR and madVR)"
-msgstr "Control de color (pel VMR-9, EVR i madVR)"
+msgstr "Controls de color (pel VMR-9, EVR i madVR)"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Brightness"
@@ -1260,7 +1302,7 @@ msgstr "Contrast"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Hue"
-msgstr "Tint"
+msgstr "To"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Saturation"
@@ -1268,19 +1310,19 @@ msgstr "Saturació"
msgctxt "IDD_PPAGEMISC_IDC_RESET"
msgid "Reset"
-msgstr "Inicialitzar"
+msgstr "Restableix"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Update check"
-msgstr "Comprovació d'actualitzacions"
+msgstr "Comprovació d’actualitzacions"
msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
msgid "Enable automatic update check"
-msgstr "Activar comprovació automàtica d'actualitzacions"
+msgstr "Activa la comprovació automàtica d'actualitzacions"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Comprovar cada: "
+msgid "Check every:"
+msgstr "Comprova cada:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1288,19 +1330,19 @@ msgstr "dies"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Settings management"
-msgstr "Gestió de configuracions"
+msgstr "Gestió de la configuració"
msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
msgid "Reset"
-msgstr "Inicialitzar"
+msgstr "Reinicia"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
msgid "Export"
-msgstr "Exportar"
+msgstr "Exporta"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
msgid "Export keys"
-msgstr "Exp. Dreceres Teclat"
+msgstr "Exporta les tecles"
msgctxt "IDD_TUNER_SCAN_CAPTION"
msgid "Tuner scan"
@@ -1312,11 +1354,11 @@ msgstr "Inici"
msgctxt "IDD_TUNER_SCAN_IDCANCEL"
msgid "Cancel"
-msgstr "Cancel.lar"
+msgstr "Cancel·la"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Freq. Start"
-msgstr "Freqüència inicial"
+msgstr "Freq. inicial"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Bandwidth"
@@ -1324,15 +1366,15 @@ msgstr "Amplada de banda"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Freq. End"
-msgstr "Freqüència final"
+msgstr "Freq. final"
msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
msgid "Ignore encrypted channels"
-msgstr "Ignorar canals encriptats"
+msgstr "Ignora els canals encriptats"
msgctxt "IDD_TUNER_SCAN_ID_SAVE"
msgid "Save"
-msgstr "Desar"
+msgstr "Desa"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "S"
@@ -1344,7 +1386,7 @@ msgstr "Q"
msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
msgid "Use an offset"
-msgstr "Usar un desajustament(offset)"
+msgstr "Utilitza un desfasament"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Default Device"
@@ -1380,7 +1422,7 @@ msgstr "Configuració digital (BDA)"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
msgid "Network Provider"
-msgstr "Proveedor"
+msgstr "Proveïdor de xarxa"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
msgid "Tuner"
@@ -1392,47 +1434,47 @@ msgstr "Receptor"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
msgid "Channel switching approach:"
-msgstr "Ajust de la commutació de Canals"
+msgstr "Ajust de la commutació entre canals:"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
msgid "Rebuild filter graph"
-msgstr "Recontruir el \"filter graph\""
+msgstr "Recontrueix el \"filter graph\""
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
msgid "Stop filter graph"
-msgstr "Aturar el \"filtre graph\""
+msgstr "Atura el \"filtre graph\""
msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
msgid "Sync video to display"
-msgstr "Sincronitzar el vídeo a la pantalla"
+msgstr "Sincronitza el vídeo a la pantalla"
msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
msgid "Frequency adjustment:"
-msgstr "Ajustar freqüència:"
+msgstr "Ajusta la freqüència:"
msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
msgid "Sync display to video"
-msgstr "Sincronitzar la pantalla al vídeo"
+msgstr "Sincronitza la pantalla al vídeo"
msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
msgid "Frequency adjustment:"
-msgstr "Ajustar freqüència:"
+msgstr "Ajusta la freqüència:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC3"
msgid "lines"
-msgstr "Línies"
+msgstr "fileres"
msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
msgid "columns"
-msgstr "Columnes"
+msgstr "columnes"
msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
msgid "Present at nearest VSync"
-msgstr "Presentar al Vsync més proper"
+msgstr "Presenta a la sincronització vertical més propera"
msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
msgid "Target sync offset:"
-msgstr "Desajustament del Vsync:"
+msgstr "Objectiu de l'òfset de la sincronitizació:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
msgid "ms"
@@ -1452,15 +1494,15 @@ msgstr "ms"
msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
msgid "Changes take effect after the playback has been closed and restarted."
-msgstr "Els canvis tindran efecte després de tencar i reiniciar la reproducció."
+msgstr "Els canvis tindran efecte després de tancar i reiniciar la reproducció."
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
msgid "Launch files in fullscreen"
-msgstr "Executar arxius a pantalla completa"
+msgstr "Obre els fitxers en pantalla completa"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
msgid "Hide controls in fullscreen"
-msgstr "Amaga controls en pantalla completa"
+msgstr "Amaga els controls en pantalla completa"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
msgid "ms"
@@ -1468,47 +1510,47 @@ msgstr "ms"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
msgid "Hide docked panels"
-msgstr "Amaga panells acoblats"
+msgstr "Amaga els panells acoblats"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
msgid "Exit fullscreen at the end of playback"
-msgstr "Sortir de la pantalla completa en acabar"
+msgstr "Surt de la pantalla completa en acabar"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Fullscreen monitor"
-msgstr "Monitor a Pantalla completa"
+msgstr "Monitor a pantalla completa"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
msgid "Use autochange fullscreen monitor mode"
-msgstr "Usar mode de monitor a pantalla completa automàtic"
+msgstr "Utilitza el mode de canvi automàtic a pantalla completa del monitor"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
msgid "Add"
-msgstr "Afegir"
+msgstr "Afegeix"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
msgid "Del"
-msgstr "Borrar"
+msgstr "Elimina"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
msgid "Up"
-msgstr "Amunt"
+msgstr "Puja"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON4"
msgid "Down"
-msgstr "Avall"
+msgstr "Baixa"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
msgid "Apply default monitor mode on fullscreen exit"
-msgstr "Aplicar visualització per defecte del monitor en sortir de la pantalla completa"
+msgstr "Aplica la visualització per defecte del monitor en sortir de la pantalla completa"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
msgid "Restore resolution on program exit"
-msgstr "Restaurar la resolució en sortir"
+msgstr "Restaura la resolució en sortir"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Delay"
-msgstr "Retart"
+msgstr "Retard"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
msgid "s"
@@ -1516,103 +1558,115 @@ msgstr "s"
msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
msgid "Info"
-msgstr "Info"
+msgstr "Informació"
msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_SCAN"
msgid "Scan"
-msgstr "Sintonitzar"
+msgstr "Analitza"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
msgid "Prefer forced and/or default subtitles tracks"
-msgstr "Preferir pistes de subtítols forçats i/o per defecte"
+msgstr "Prefereix pistes de subtítols forçades/per defecte"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
msgid "Prefer external subtitles over embedded subtitles"
-msgstr "Subtítols externs per defecte si hi són"
+msgstr "Prefereix subtítols externs als incrustats"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
-msgstr "No carregar subtítols encastats"
+msgstr "Ignora els subtítols incrustats"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
msgid "Autoload paths"
-msgstr "Camí de càrrega automàtica"
+msgstr "Carrega les rutes automàticament"
msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
msgid "Reset"
-msgstr "Inicialitzar"
+msgstr "Restableix"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Base de dades en línia"
+msgid "Online search, download and upload subtitles"
+msgstr "Cerca en línia, descàrrega i pujada dels subtítols"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Cerca i descarrega subtítols automàticament si no se'n troba cap localment."
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Prefereix subtítols per a problemes d'audició (quan ho indiqui el proveïdor)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignora els fitxers que continguin les següents paraules:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "La URL de la base de dades de subtítols en línia"
+msgid "Languages in order of preference:"
+msgstr "Idiomes en ordre de preferència:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Provar"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Penja els subtítols actius automàticament en finalitzar la reproducció"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
-msgstr "Actualitzar verificador"
+msgstr "Comprovador d’actualitzacions"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
msgid "&Download now"
-msgstr "&Decarregar ara"
+msgstr "&Baixa-la ara"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
msgid "Remind me &later"
-msgstr "Recordarme &més tard"
+msgstr "Recorda-m’ho &més tard"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
msgid "&Ignore this update"
-msgstr "&Ignorar aquesta actualització"
+msgstr "&Ignora aquesta actualització"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr "Els \"shaders\" contenen efectes especials que es poden afegir al procés de processament de vídeo."
+msgstr "Els \"shaders\" o \"pixel shaders (PS)\" contenen efectes especials que poden afegir-se al procés de renderització del vídeo."
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
-msgstr "Afegir arxiu shader"
+msgstr "Afegeix un fitxer PS"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
msgid "Remove"
-msgstr "Eliminar"
+msgstr "Elimina"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
msgid "Add to pre-resize"
-msgstr "Afegir al pre-redimensionament"
+msgstr "Afegeix al pre-redimensionament"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
msgid "Add to post-resize"
-msgstr "Afegir al post-redimensionament"
+msgstr "Afegeix al post-redimensionament"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
-msgstr "Preestablir els Shaders"
+msgstr "Preajustaments dels PS"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
msgid "Load"
-msgstr "Carregar"
+msgstr "Carrega"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
msgid "Save"
-msgstr "Desar"
+msgstr "Desa"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON5"
msgid "Delete"
-msgstr "Borrar"
+msgstr "Suprimeix"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active pre-resize shaders"
-msgstr "Activar pre-redimenionament dels shaders"
+msgstr "Activa el pre-redimensionament dels PS"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active post-resize shaders"
-msgstr "Activar post-redimensionament dels shaders"
+msgstr "Activa el post-redimensionament dels PS"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
@@ -1620,7 +1674,7 @@ msgstr "Depuració dels Shaders..."
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
msgid "Debug Information"
-msgstr "Informació de Depuració"
+msgstr "Informació de depuració"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
msgid "PS 2.0"
@@ -1640,11 +1694,11 @@ msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr "Configuració avançada, no ho editi a menys que sàpiga el que està fent."
+msgstr "Configuració avançada, no l'editeu si no sabeu el que esteu fent."
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
-msgstr "Verdader"
+msgstr "Vertader"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
msgid "False"
@@ -1652,7 +1706,51 @@ msgstr "Fals"
msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
-msgstr "Per Defecte"
+msgstr "Original"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Dispositiu"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Mode exclusiu"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Pemet el bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Opcions"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Habilita el crossfeed a l'estèreo (pels auriculars)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Tall:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Nivell:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Nota"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Per minimitzar la distorsió de l'àudio, se recomana mantenir el volum del reproductor al voltant del 85% durant la reproducció d'un contingut codificat amb pèrdua de volum elevat."
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
@@ -1660,9 +1758,45 @@ msgstr "Qualitat JPEG:"
msgctxt "IDD_CMD_LINE_HELP_CAPTION"
msgid "Command line help"
-msgstr "Ajuda de la línia de Comandaments"
+msgstr "Ajuda de la línia d’ordres"
msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
-msgstr "D'acord"
+msgstr "D’acord"
+
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Informe d'errors"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Ho sentim, sembla que l'MPC-HC ha fallat. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Envia un informe de l'error per ajudar-nos a diagnosticar i solucionar el problema."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "informació opcional"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Correu electrònic:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "La seva adreça de correu electrònic és opcional i només s'utilitzarà si els desenvolupadors han de posar-se en contacte amb vostè per obtenir més informació."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Descripció del problema (només en anglès):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Reinicia l'MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Surt de l'MPC-HC"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ca.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ca.menus.po
index c95c7407a..92b88781c 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ca.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ca.menus.po
@@ -1,17 +1,22 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
-# papu <papu@openmailbox.org>, 2014
-# papu <papu@openmailbox.org>, 2014
+# Adolfo Jayme-Barrientos, 2015
+# Adolfo Jayme-Barrientos, 2015
+# Adolfo Jayme-Barrientos, 2014
+# papu, 2014-2016
+# Roger <roger.espolet@gmail.com>, 2016
+# Roger <roger.espolet@gmail.com>, 2016
+# Roger <roger.espolet@gmail.com>, 2016
+# papu, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-25 13:00+0000\n"
-"Last-Translator: papu <papu@openmailbox.org>\n"
-"Language-Team: Catalan (http://www.transifex.com/projects/p/mpc-hc/language/ca/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-11-17 12:02+0000\n"
+"Last-Translator: Roger <roger.espolet@gmail.com>\n"
+"Language-Team: Catalan (http://www.transifex.com/mpc-hc/mpc-hc/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -24,31 +29,31 @@ msgstr "&Fitxer"
msgctxt "ID_FILE_OPENQUICK"
msgid "&Quick Open File..."
-msgstr "Obrir Arxiu &Ràpid..."
+msgstr "Obertura &ràpida de fitxer..."
msgctxt "ID_FILE_OPENMEDIA"
msgid "&Open File..."
-msgstr "&Obrir Arxiu..."
+msgstr "&Obre un fitxer…"
msgctxt "ID_FILE_OPENDVDBD"
msgid "Open &DVD/BD..."
-msgstr "Obrir &DVD/BD..."
+msgstr "Obre un &DVD/BD…"
msgctxt "ID_FILE_OPENDEVICE"
msgid "Open De&vice..."
-msgstr "Obrir Dis&positiu..."
+msgstr "Obre el dis&positiu..."
msgctxt "ID_FILE_OPENDIRECTORY"
msgid "Open Dir&ectory..."
-msgstr "Obrir Di&rectori..."
+msgstr "Obre un di&rectori..."
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
-msgstr "Obrir Di&sc"
+msgstr "Obre un di&sc"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
-msgstr "&Arxius recents"
+msgstr "&Fitxers recents"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
@@ -56,39 +61,35 @@ msgstr "&Tanca"
msgctxt "ID_FILE_SAVE_COPY"
msgid "&Save a Copy..."
-msgstr "&Desar una còpia..."
+msgstr "&Desa una còpia..."
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
-msgstr "Desar &Imatge..."
+msgstr "Desa la &imatge..."
msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
-msgstr "Desar &Miniatures..."
-
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Cargar &Subtítol..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Desar S&ubtítol..."
+msgstr "Desa les &miniatures..."
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "&Base de Dades dels Subtítols"
+msgid "S&ubtitles"
+msgstr "S&ubtítols"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Cerca…"
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Carrega els subtítols..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Pu&jar..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Desa els s&ubtítols..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Baixa…"
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Descarrega els subtítols..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Penja els subtítols..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -100,19 +101,19 @@ msgstr "&Surt"
msgctxt "POPUP"
msgid "&View"
-msgstr "&Visualitza"
+msgstr "&Visualització"
msgctxt "ID_VIEW_CAPTIONMENU"
msgid "Caption&&Menu"
-msgstr "Capçalera &i Menú"
+msgstr "Barra del títol &i menú"
msgctxt "ID_VIEW_SEEKER"
msgid "See&k Bar"
-msgstr "Barra de &Cerca"
+msgstr "Barra de despla&çament"
msgctxt "ID_VIEW_CONTROLS"
msgid "&Controls"
-msgstr "Cont&rols"
+msgstr "&Controls"
msgctxt "ID_VIEW_INFORMATION"
msgid "&Information"
@@ -120,7 +121,7 @@ msgstr "&Informació"
msgctxt "ID_VIEW_STATISTICS"
msgid "&Statistics"
-msgstr "Es&tatístiques"
+msgstr "Es&tadístiques"
msgctxt "ID_VIEW_STATUS"
msgid "St&atus"
@@ -132,7 +133,7 @@ msgstr "&Resincronització dels subtítols"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
-msgstr "&Llista de Reproducció"
+msgstr "&Llista de reproducció"
msgctxt "ID_VIEW_CAPTURE"
msgid "Captu&re"
@@ -144,7 +145,7 @@ msgstr "&Navegació"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr "&Depuració de Shaders"
+msgstr "&Depuració dels shaders"
msgctxt "POPUP"
msgid "&Presets..."
@@ -152,7 +153,7 @@ msgstr "&Interfície..."
msgctxt "ID_VIEW_PRESETS_MINIMAL"
msgid "&Minimal"
-msgstr "&Mínim"
+msgstr "&Mínima"
msgctxt "ID_VIEW_PRESETS_COMPACT"
msgid "&Compact"
@@ -180,7 +181,7 @@ msgstr "&100%"
msgctxt "ID_VIEW_ZOOM_200"
msgid "&200%"
-msgstr "%200%"
+msgstr "&200%"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
@@ -188,39 +189,43 @@ msgstr "&Ajust automàtic"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "A&just automàtic (Si es massa Gran)"
+msgstr "Ajusta automàticament (si és massa &gran)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "Ajustos del Renderit&zador"
+msgstr "Configuració del renderit&zador"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
-msgstr "Prova de &Pipelleig"
+msgstr "Prova de &pipelleig"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Visualitza les estadístiques"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Mostrar Estadístiques"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Visualitza el t&emps actual"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Temps Restant"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Mostra el &nom del fixer"
msgctxt "POPUP"
msgid "&Output Range"
-msgstr "&Rang de Sortida"
+msgstr "&Rang de sortida"
msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
msgid "&0 - 255"
-msgstr "0 - 255"
+msgstr "&0 - 255"
msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
msgid "&16 - 235"
-msgstr "16 - 235"
+msgstr "&16 - 235"
msgctxt "POPUP"
msgid "&Presentation"
-msgstr "Pr&esentació"
+msgstr "&Presentació"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
@@ -232,11 +237,11 @@ msgstr "P&antalla completa D3D amb GUI"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "So&rtida RGB 10-bits"
+msgstr "So&rtida a RGB 10-bits"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
-msgstr "For&çar Entrada RGB 10-bits"
+msgstr "Força l'&entrada a RGB de 10-bits"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
@@ -248,27 +253,27 @@ msgstr "Processa&ment en coma flotant parcial"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
-msgstr "Desactivar &Composició de l'escriptori(Aero)"
+msgstr "Desactiva la &composició de l'escriptori(&Aero)"
msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time &Correction"
-msgstr "Activar correcció temporal de &fotograma"
+msgstr "Activa la correcció temporal de &fotograma"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "&Gestió de Colors"
+msgstr "&Gestió de colors"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
-msgstr "&Activar"
+msgstr "&Activa"
msgctxt "POPUP"
msgid "&Input Type"
-msgstr "&Tipus d'Entrada"
+msgstr "&Tipus d'entrada"
msgctxt "ID_VIEW_CM_INPUT_AUTO"
msgid "&Auto-Detect"
-msgstr "&Autodetecció"
+msgstr "&Detecta automàticament"
msgctxt "ID_VIEW_CM_INPUT_HDTV"
msgid "&HDTV"
@@ -284,7 +289,7 @@ msgstr "SDTV &PAL"
msgctxt "POPUP"
msgid "Ambient &Light"
-msgstr "&Llum ambiental"
+msgstr "&Llum ambient"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
@@ -296,11 +301,11 @@ msgstr "&Tènue (2.35 Gamma)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
-msgstr "&Fosca (2.4 Gamma)"
+msgstr "&Fosc (2.4 Gamma)"
msgctxt "POPUP"
msgid "&Rendering Intent"
-msgstr "Tipus de &Renderització"
+msgstr "Tipus de &renderització"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
@@ -308,7 +313,7 @@ msgstr "&Perceptiu"
msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
msgid "&Relative Colorimetric"
-msgstr "Colorimetria &Relativa"
+msgstr "Colorimetria &relativa"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
@@ -316,31 +321,31 @@ msgstr "&Saturació"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
-msgstr "Colorimetria &Absoluta"
+msgstr "Colorimetria &absoluta"
msgctxt "POPUP"
msgid "&VSync"
-msgstr "&VSync (Sincronia Vertical)"
+msgstr "&Sincronització vertical"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "&VSync (Sincronia Vertical)"
+msgstr "&Sincronització vertical"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "VSync &Precisa"
+msgstr "Sincronització vertical &precisa"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "VSync &Alternativa"
+msgstr "Sincronització vertical &alternativa"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "&Disminuir compensació de vsync"
+msgstr "&Disminuieix l'òfset de la \"vsync\""
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "&Augmentar compensació de vsync"
+msgstr "&Augmenta l'òfset de la \"vsync\""
msgctxt "POPUP"
msgid "&GPU Control"
@@ -348,51 +353,51 @@ msgstr "Control de la &GPU"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "Buidar GPU &abans de VSync"
+msgstr "Buida la GPU &abans de la VSync"
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
-msgstr "Buidar GPU &després de Present"
+msgstr "Buida la GPU &després de presentar (Present)"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "Esperar el &buidatge"
+msgstr "Espera al &buidat"
msgctxt "POPUP"
msgid "R&eset"
-msgstr "Re&inicialitzar"
+msgstr "Re&stableix"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "Reinicialitzar ajustos &per defecte del renderitzador"
+msgstr "Restableix les configuracions &per defecte del renderitzador"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "Reinicialitzar ajustos òpti&ms del renderitzador"
+msgstr "Restableix les configuracions òpti&mes del renderitzador"
msgctxt "POPUP"
msgid "Video &Frame"
-msgstr "&Finestra de Vídeo"
+msgstr "&Fotograma"
msgctxt "ID_VIEW_VF_HALF"
msgid "&Half Size"
-msgstr "&Meitat del Tamany"
+msgstr "&Meitat de la mida"
msgctxt "ID_VIEW_VF_NORMAL"
msgid "&Normal Size"
-msgstr "Tamany &Original"
+msgstr "Mida &normal"
msgctxt "ID_VIEW_VF_DOUBLE"
msgid "&Double Size"
-msgstr "&Doble del Tamany"
+msgstr "Mida &doble"
msgctxt "ID_VIEW_VF_STRETCH"
msgid "&Stretch To Window"
-msgstr "&Ajustar a la finestra"
+msgstr "&Ajusta a la finestra"
msgctxt "ID_VIEW_VF_FROMINSIDE"
msgid "Touch Window From &Inside"
-msgstr "Tocar finestra des de D&ins"
+msgstr "&Toca la finestra des de dins"
msgctxt "ID_VIEW_VF_ZOOM1"
msgid "Zoom &1"
@@ -404,99 +409,99 @@ msgstr "Zoom&2"
msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
-msgstr "Tocar finestra des de F&ora"
-
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "Ma&ntenir Relació d'Aspecte(AR)"
+msgstr "Toca la finestra des de &fora"
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "&Forçar Relació d'Aspecte Específica"
+msgid "&Aspect Ratio"
+msgstr "Relació d'&aspecte"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Original"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Per &defecte (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
-msgstr "4:3"
+msgstr "&4:3"
msgctxt "ID_ASPECTRATIO_5_4"
msgid "&5:4"
-msgstr "5:4"
+msgstr "&5:4"
msgctxt "ID_ASPECTRATIO_16_9"
msgid "&16:9"
-msgstr "16:9"
+msgstr "&16:9"
msgctxt "ID_ASPECTRATIO_235_100"
msgid "&235:100"
-msgstr "235:100"
+msgstr "&235:100"
msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
-msgstr "185:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Adopta píxels &quadrats (SAR)"
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
-msgstr "Corregir &Relació d'Aspecte Diff al Monitor/Escriptori"
+msgstr "Corregeix la diferència de &relació d'aspecte del monitor/escriptori"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
-msgstr "Pan&&S&can"
+msgstr "Reenquadrament (pan&scan)"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
-msgstr "&Augmentar Tamany"
+msgstr "&Augmenta la mida"
msgctxt "ID_VIEW_DECSIZE"
msgid "&Decrease Size"
-msgstr "&Disminuir Tamany"
+msgstr "&Disminueix la mida"
msgctxt "ID_VIEW_INCWIDTH"
msgid "I&ncrease Width"
-msgstr "Au&gmentar Amplada"
+msgstr "Au&gmenta l'amplada"
msgctxt "ID_VIEW_DECWIDTH"
msgid "D&ecrease Width"
-msgstr "Dis&minuir Amplada"
+msgstr "Dis&minueix l'amplada"
msgctxt "ID_VIEW_INCHEIGHT"
msgid "In&crease Height"
-msgstr "Augmentar Al&çada"
+msgstr "Augmenta l'al&çada"
msgctxt "ID_VIEW_DECHEIGHT"
msgid "Decre&ase Height"
-msgstr "Dismi&nuir Alçada"
+msgstr "Dismi&nueix l'alçada"
msgctxt "ID_PANSCAN_MOVERIGHT"
msgid "Move &Right"
-msgstr "Moure ca&p a la Dreta"
+msgstr "Mou cap a la &dreta"
msgctxt "ID_PANSCAN_MOVELEFT"
msgid "Move &Left"
-msgstr "Moure cap a l'Es&querra"
+msgstr "Mou cap a l'&esquerra"
msgctxt "ID_PANSCAN_MOVEUP"
msgid "Move &Up"
-msgstr "Mo&ure cap Amunt"
+msgstr "Mo&u cap amunt"
msgctxt "ID_PANSCAN_MOVEDOWN"
msgid "Move &Down"
-msgstr "Moure cap A&vall"
+msgstr "Mou cap a&vall"
msgctxt "ID_PANSCAN_CENTER"
msgid "Cen&ter"
-msgstr "Centra&r"
+msgstr "Centr&a"
msgctxt "ID_VIEW_RESET"
msgid "Re&set"
-msgstr "R&einiciar"
+msgstr "Re&stableix"
msgctxt "POPUP"
msgid "On &Top"
-msgstr "Sempre &Visible"
+msgstr "Sempre &visible"
msgctxt "ID_ONTOP_DEFAULT"
msgid "&Default"
@@ -520,107 +525,131 @@ msgstr "&Opcions..."
msgctxt "POPUP"
msgid "&Play"
-msgstr "&Reprodueix"
+msgstr "&Reproducció"
msgctxt "ID_PLAY_PLAYPAUSE"
msgid "&Play/Pause"
-msgstr "&Reprodueix/pausa"
+msgstr "&Reprodueix/Pausa"
msgctxt "ID_PLAY_STOP"
msgid "&Stop"
msgstr "&Atura"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
-msgstr "Avançar un &Fotograma"
+msgid "Fra&me Step"
+msgstr "Avança un &fotograma"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Repeteix"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "In&definidament"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Fitxer"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Llista de reproducció"
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
-msgstr "Au&gmentar Velocitat"
+msgstr "&Redueix la velocitat"
msgctxt "ID_PLAY_INCRATE"
msgid "&Increase Rate"
-msgstr "&Disminuir Velocitat"
+msgstr "&Augmenta la velocitat"
msgctxt "ID_PLAY_RESETRATE"
msgid "R&eset Rate"
-msgstr "Re&iniciar Velocitat"
+msgstr "R&estableix la velocitat"
msgctxt "ID_FILTERS"
msgid "&Filters"
-msgstr "Fi&ltres"
+msgstr "&Filtres"
msgctxt "ID_SHADERS"
msgid "S&haders"
msgstr "S&haders"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "Àu&dio"
+msgid "&Audio Track"
+msgstr "Pista d'&àudio"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Su&btítols"
+msgid "Su&btitle Track"
+msgstr "Pista de su&btítols"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Vídeo S&tream"
+msgid "Vide&o Track"
+msgstr "Pista de &vídeo"
msgctxt "POPUP"
msgid "&Volume"
-msgstr "Vol&umen"
+msgstr "&Volum"
msgctxt "ID_VOLUME_UP"
msgid "&Up"
-msgstr "&Amunt"
+msgstr "&Apuja"
msgctxt "ID_VOLUME_DOWN"
msgid "&Down"
-msgstr "A&vall"
+msgstr "&Abaixa"
msgctxt "ID_VOLUME_MUTE"
msgid "&Mute"
-msgstr "&Mutis"
+msgstr "&Silencia"
msgctxt "POPUP"
msgid "Af&ter Playback"
-msgstr "Després de la Re&producció"
+msgstr "Des&prés de la reproducció"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "No facis &res"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Reprodueix el fitxer &següent de la carpeta"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Apaga el &monitor"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
-msgstr "&Tancar "
+msgstr "&Surt"
msgctxt "ID_AFTERPLAYBACK_STANDBY"
msgid "&Stand By"
-msgstr "&En espera"
+msgstr "&Atura temporalment"
msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
msgid "&Hibernate"
-msgstr "&Hibernar"
+msgstr "&Hiberna"
msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
msgid "Shut&down"
-msgstr "&Apagar"
+msgstr "&Tanca l'ordinador"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
-msgstr "&Finalitza la sessió"
+msgstr "&Tanca la sessió"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "&Bloquejar l'ordinador"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Apagar el &monitor"
+msgstr "&Bloca"
msgctxt "POPUP"
msgid "&Navigate"
-msgstr "Na&vegar"
+msgstr "&Navegació"
msgctxt "ID_NAVIGATE_SKIPBACK"
msgid "&Previous"
-msgstr "&Previ"
+msgstr "&Anterior"
msgctxt "ID_NAVIGATE_SKIPFORWARD"
msgid "&Next"
@@ -628,35 +657,35 @@ msgstr "&Següent"
msgctxt "ID_NAVIGATE_GOTO"
msgid "&Go To..."
-msgstr "A&nar a..."
+msgstr "&Vés a..."
msgctxt "ID_NAVIGATE_TITLEMENU"
msgid "&Title Menu"
-msgstr "Menú del &Títol"
+msgstr "Menú del &títol"
msgctxt "ID_NAVIGATE_ROOTMENU"
msgid "&Root Menu"
-msgstr "Menú &Arrel"
+msgstr "Menú &arrel"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
-msgstr "Menú dels &Subtítols"
+msgstr "Menú dels &subtítols"
msgctxt "ID_NAVIGATE_AUDIOMENU"
msgid "&Audio Menu"
-msgstr "Menú de l'Àu&dio"
+msgstr "Menú de l'&àudio"
msgctxt "ID_NAVIGATE_ANGLEMENU"
msgid "An&gle Menu"
-msgstr "Menú d'An&gle"
+msgstr "Menú de l'&angle"
msgctxt "ID_NAVIGATE_CHAPTERMENU"
msgid "&Chapter Menu"
-msgstr "Menú dels &Capítols"
+msgstr "Menú dels &capítols"
msgctxt "ID_FAVORITES"
msgid "F&avorites"
-msgstr "&Favorits"
+msgstr "&Preferits"
msgctxt "POPUP"
msgid "&Help"
@@ -668,7 +697,7 @@ msgstr "&Lloc web"
msgctxt "ID_HELP_CHECKFORUPDATE"
msgid "Check for &updates"
-msgstr "Verificar &actualitzacions"
+msgstr "Comprova si hi ha &actualitzacions"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
@@ -676,7 +705,7 @@ msgstr "&Opcions de la línia d’ordres"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
-msgstr "&Baixa icones per la barra de control"
+msgstr "Baixa icones per a la &barra de control"
msgctxt "ID_HELP_DONATE"
msgid "&Donate"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ca.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ca.strings.po
index 880a09390..00b77990d 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ca.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ca.strings.po
@@ -1,17 +1,24 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
-# papu <papu@openmailbox.org>, 2014
-# papu <papu@openmailbox.org>, 2014
+# Adolfo Jayme Barrientos, 2014-2015
+# Adolfo Jayme Barrientos, 2015
+# Adolfo Jayme Barrientos, 2014
+# Katabi, 2015
+# papu, 2014-2017
+# Roger <roger.espolet@gmail.com>, 2016-2017
+# Roger <roger.espolet@gmail.com>, 2016
+# Roger <roger.espolet@gmail.com>, 2017
+# Roger <roger.espolet@gmail.com>, 2016
+# papu, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 13:10+0000\n"
-"Last-Translator: papu <papu@openmailbox.org>\n"
-"Language-Team: Catalan (http://www.transifex.com/projects/p/mpc-hc/language/ca/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-13 11:17+0000\n"
+"Last-Translator: Roger <roger.espolet@gmail.com>\n"
+"Language-Team: Catalan (http://www.transifex.com/mpc-hc/mpc-hc/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -40,35 +47,43 @@ msgstr "Capítol"
msgctxt "IDS_CONTROLS_COMPLETING"
msgid "Completing..."
-msgstr "completant..."
+msgstr "S’està completant…"
msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
msgid "Play Video"
-msgstr "Reproduir Vídeo"
+msgstr "Reprodueix vídeo"
msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
msgid "Play Music"
-msgstr "Reproduir Música"
+msgstr "Reprodueix música"
msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
msgid "Play Audio CD"
-msgstr "Reproduir CD de Àudio"
+msgstr "Reprodueix CD d’àudio"
msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
msgid "Play DVD Movie"
-msgstr "Reproduir Película en DVD"
+msgstr "Reprodueix pel·lícula en DVD"
msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Propietats"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Fitxer"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Estil per &defecte"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Llista de reproducció"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
-msgstr "Arxius"
+msgstr "Fitxers"
msgctxt "IDS_FAVDVDS"
msgid "DVDs"
@@ -84,11 +99,11 @@ msgstr "Temps"
msgctxt "IDS_STATSBAR_SYNC_OFFSET"
msgid "Sync Offset"
-msgstr "Desajustament de sincronització"
+msgstr "Sincronització de l'òfset"
msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
msgid "avg: %d ms, dev: %d ms"
-msgstr "mitjana: %d, desviació: %d ms"
+msgstr "mitjana: %d ms, desviació: %d ms"
msgctxt "IDS_STATSBAR_JITTER"
msgid "Jitter"
@@ -116,11 +131,31 @@ msgstr "Estils"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "Si l' objectiu del renderitzador es deixa sense definir, els subtítols SSA/ASS seran renderitzats en relació al fotograma de vídeo mentres que la resta ho seran en relació a la finestra."
+msgstr "Si l'objectiu del renderitzador es deixa sense definir, els subtítols en format SSA/ASS seran renderitzats en relació al fotograma mentre que la resta ho seran en relació a la finestra."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Mode de repetició: Llista de reproducció"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Mode de repetició: Fitxer"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Repeteix indefinidament: Activat"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Repeteix indefinidament: Desactivat"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Repeteix indefinidament"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
-msgstr "Mai(mètode més ràpid)"
+msgstr "Mai (mètode més ràpid)"
msgctxt "IDS_PPAGE_CAPTURE_FG1"
msgid "Only when switching different video types (default)"
@@ -136,7 +171,7 @@ msgstr "No és compatible amb alguns dispositius. Dos descodificadors de vídeo
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr "Ràpid excepte en canviar entre diferents fluxos de vídeo. Només un descodificador de vídeo present en el filter graph."
+msgstr "Ràpid excepte en canviar entre diferents fluxos de vídeo. Només un descodificador de vídeo present en el filter graph."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
@@ -144,11 +179,11 @@ msgstr "No es recomana. Només per a fins de verificació."
msgctxt "IDS_PPAGE_CAPTURE_SFG0"
msgid "Never if possible (fastest, but not supported by most filters)"
-msgstr "Mai, si és possible (el més ràpid, però no suportat per la majoria dels filtres)"
+msgstr "Mai si és possible (és més ràpid, però no ho suporten la majoria dels filtres)"
msgctxt "IDS_PPAGE_CAPTURE_SFG1"
msgid "Only when switching different video types (default)"
-msgstr "Només en canviar diferents tipus de vídeo (per defecte)"
+msgstr "Només en canviar entre diferents tipus de vídeo (per defecte)"
msgctxt "IDS_PPAGE_CAPTURE_SFG2"
msgid "Always (may be required by some devices)"
@@ -172,7 +207,7 @@ msgstr "Contingut"
msgctxt "IDS_CONTENT_MOVIE_DRAMA"
msgid "Movie/Drama"
-msgstr "Film/drama"
+msgstr "Pel·lícula/drama"
msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
msgid "News/Current affairs"
@@ -184,15 +219,15 @@ msgstr "GB/s"
msgctxt "IDS_FILE_FAV_ADDED"
msgid "File added to favorites"
-msgstr "Fitxer afegit als favorits"
+msgstr "Fitxer afegit a preferits"
msgctxt "IDS_DVD_FAV_ADDED"
msgid "DVD added to favorites"
-msgstr "DVD afegit a favorits"
+msgstr "DVD afegit a preferits"
msgctxt "IDS_CAPTURE_SETTINGS"
msgid "Capture Settings"
-msgstr "Configuració de la Captació"
+msgstr "Configuració de la captura"
msgctxt "IDS_NAVIGATION_BAR"
msgid "Navigation Bar"
@@ -212,7 +247,7 @@ msgstr "Fi"
msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
msgid "Preview"
-msgstr "Avanç"
+msgstr "Previsualitza"
msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
msgid "Vob ID"
@@ -220,7 +255,7 @@ msgstr "ID del VOB"
msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
msgid "Cell ID"
-msgstr "ID de la cèl·lula"
+msgstr "ID de la cel·la"
msgctxt "IDS_SUBRESYNC_CLN_FORCED"
msgid "Forced"
@@ -228,7 +263,7 @@ msgstr "Forçat"
msgctxt "IDS_SUBRESYNC_CLN_TEXT"
msgid "Text"
-msgstr "Texte"
+msgstr "Text"
msgctxt "IDS_SUBRESYNC_CLN_STYLE"
msgid "Style"
@@ -240,43 +275,43 @@ msgstr "Tipus de lletra"
msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
msgid "Failed to render some of the pins of the DVD Navigator filter"
-msgstr "Fallada al renderitzar alguns dels pins del filtre de Navegació de DVD"
+msgstr "No s'han pogut renderitzar algunes de les etapes del filtre \"Navegació DVD\""
msgctxt "IDS_DVD_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for DVD playback"
-msgstr "Error en consultar les interfícies necessàries per a la reproducció de DVD"
+msgstr "No s'han pogut consultar les interfícies necessàries per a la reproducció de DVD"
msgctxt "IDS_CAPTURE_LIVE"
msgid "Live"
-msgstr "En viu"
+msgstr "En directe"
msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
msgid "Can't add video capture filter to the graph"
-msgstr "No es pot afegir el filtre de captació de vídeo al graph."
+msgstr "No es pot afegir el filtre de captura de vídeo al graph."
msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
msgid "Can't add audio capture filter to the graph"
-msgstr "No es pot afegir el filtra de captació d'audio al graph."
+msgstr "No es pot afegir el filtre de captura d'audio al graph."
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
-msgstr "No es pot obrir el controlador de captació."
+msgstr "No s'ha pogut obrir el dispositiu de captura."
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
-msgstr "No es pot obrir, paràmetres d'entrada no vàlids"
+msgstr "No es pot obrir, paràmetres d'entrada no vàlids"
msgctxt "IDS_EDIT_LIST_EDITOR"
msgid "Edit List Editor"
-msgstr "Edita l'editor de llistes"
+msgstr "Editor de llistes d'edició (EDLs)"
msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
msgid "The entered time is greater than the file duration."
-msgstr "El temps introduït és major que la durada de l'arxiu."
+msgstr "El temps introduït és major que la durada del fitxer."
msgctxt "IDS_MISSING_ICONS_LIB"
msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
-msgstr "Manca la llibreria d'icones \"mpciconlib.dll\".\nS'usaran les icones del reproductor per defecte per l'associació d'arxius.\nSisplau, instal·li el MPC-HC per obtenir el \"mpciconlib.dll\"."
+msgstr "Manca la llibreria d'icones \"mpciconlib.dll\".\nEs faran servir les icones del reproductor per defecte per a l'associació dels fitxers.\nSi us plau, instal·li l'MPC-HC per obtenir el \"mpciconlib.dll\"."
msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
msgid "File"
@@ -308,7 +343,7 @@ msgstr "Unicode"
msgctxt "IDS_SUBRESYNC_CLN_LAYER"
msgid "Layer"
-msgstr "Nivell"
+msgstr "Capa"
msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
msgid "Actor"
@@ -324,43 +359,43 @@ msgstr "Llista de reproducció"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
-msgstr "Encès/Apagat"
+msgstr "Activat/Desactivat"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Des de fps"
+msgid "From (FPS)"
+msgstr "De (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Cap a fps"
+msgid "To (FPS)"
+msgstr "A (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
-msgstr "Mode de Pantalla (Hz)"
+msgstr "Mode de pantalla (Hz)"
msgctxt "IDS_PPAGE_FS_DEFAULT"
msgid "Default"
-msgstr "Per Defecte"
+msgstr "Per defecte"
msgctxt "IDS_PPAGE_FS_OTHER"
msgid "Other"
-msgstr "Altre"
+msgstr "Altres"
msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
msgid "System Default"
-msgstr "Valor por defecte del sistema"
+msgstr "Valor per defecte del sistema"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
-msgstr "Error en consultar les interfícies necessàries per a la reproducció"
+msgstr "No s'han pogut consultar les interfícies necessàries per a la reproducció"
msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
msgid "Could not set target window for graph notification"
-msgstr "No s'ha pogut establir finestra de destinació per a la notificació del graph"
+msgstr "No s'ha pogut establir una finestra de destinació per a les notificacions del diagrama de filtres."
msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
msgid "Failed to render all pins of the DVD Navigator filter"
-msgstr "Fallada al renderitzar tots els pins del filtre de Navegació de DVD"
+msgstr "No s'han pogut renderitzar totes les etapes del filtre \"Navegador DVD\""
msgctxt "IDS_PLAYLIST_OPEN"
msgid "&Open"
@@ -388,11 +423,11 @@ msgstr "A&nomena i desa…"
msgctxt "IDS_PLAYLIST_SORTBYLABEL"
msgid "Sort by &label"
-msgstr "Agrupar per E&tiquetes"
+msgstr "Agrupa per &etiquetes"
msgctxt "IDS_PLAYLIST_SORTBYPATH"
msgid "Sort by &path"
-msgstr "Agrupar per R&utes"
+msgstr "Agrupa per &ubicació"
msgctxt "IDS_PLAYLIST_RANDOMIZE"
msgid "R&andomize"
@@ -400,7 +435,7 @@ msgstr "&Aleatori"
msgctxt "IDS_PLAYLIST_RESTORE"
msgid "R&estore"
-msgstr "R&estaurar"
+msgstr "R&estaura"
msgctxt "IDS_SUBRESYNC_SEPARATOR"
msgid "&Separator"
@@ -412,23 +447,23 @@ msgstr "&Suprimeix"
msgctxt "IDS_SUBRESYNC_DUPLICATE"
msgid "D&uplicate"
-msgstr "D&uplicar"
+msgstr "D&uplica"
msgctxt "IDS_SUBRESYNC_RESET"
msgid "&Reset"
-msgstr "&Inicialitzar"
+msgstr "&Restableix"
msgctxt "IDS_MPLAYERC_104"
msgid "Subtitle Delay -"
-msgstr "Retard dels Subs -"
+msgstr "Redueix el retard dels subtítols"
msgctxt "IDS_MPLAYERC_105"
msgid "Subtitle Delay +"
-msgstr "Retard dels Subs +"
+msgstr "Augmenta el retard dels subtítols"
msgctxt "IDS_FILE_SAVE_THUMBNAILS"
msgid "Save thumbnails"
-msgstr "Desar vistes previes"
+msgstr "Desa les miniatures"
msgctxt "IDD_PPAGEPLAYBACK"
msgid "Playback"
@@ -456,31 +491,59 @@ msgstr "Retocs"
msgctxt "IDD_PPAGEAUDIOSWITCHER"
msgid "Internal Filters::Audio Switcher"
-msgstr "Filtres Interns::Commutador de l'Àudio"
+msgstr "Filtres interns::Commutador d'àudio"
msgctxt "IDD_PPAGEEXTERNALFILTERS"
msgid "External Filters"
-msgstr "Filtres Externs"
+msgstr "Filtres externs"
msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Reproducció::Shaders"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Recursos"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Diversos"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Reproducció::Captura"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Reproducció::Renderitzador Sync"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Reproducció::Pantalla completa"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Filtres interns::Renderitzador d'àudio"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
-msgstr "Canvia Àudio"
+msgstr "Commutador d'àudio"
msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
msgid "New version of the icon library"
-msgstr "Nova versió de les icones de la biblioteca"
+msgstr "Nova versió de la llibreria d'icones"
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
-msgstr "Vols tornar a associar icones?"
+msgstr "Voleu tornar a associar les icones?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
-msgstr "Això solucionarà les icones que es mostren incorrectament després de l'actualització de les icones de la biblioteca.\nLes associacions d'arxius no seran modificats, només les icones corresponents s'actualitzaran."
+msgstr "Això solucionarà les icones que es mostren incorrectament després de l'actualització de la col·lecció d'icones.\nLes associacions de fitxer no seran modificades, només s'actualitzaran les icones corresponents."
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
@@ -490,21 +553,13 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Renderitzador Overlay Mixer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (de finestra)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (de finestra)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (sense res)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
-msgstr "Video Mixing Renderer 9 (sense res)"
+msgstr "Video Mixing Renderer 9 (renderless)"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
@@ -516,7 +571,7 @@ msgstr "Enhanced Video Renderer (custom presenter)"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
-msgstr "Haali Video Renderer"
+msgstr "Renderitzador de vídeo Haali"
msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
msgid "Null (anything)"
@@ -532,15 +587,15 @@ msgstr "madVR"
msgctxt "IDD_PPAGEACCELTBL"
msgid "Player::Keys"
-msgstr "Reproductor::Drecera de teclat"
+msgstr "Reproductor::Tecles"
msgctxt "IDD_PPAGESUBSTYLE"
msgid "Subtitles::Default Style"
-msgstr "Subtítols::Estil predeterminat"
+msgstr "Subtítols::Estil per defecte"
msgctxt "IDD_PPAGEINTERNALFILTERS"
msgid "Internal Filters"
-msgstr "Filtres Interns"
+msgstr "Filtres interns"
msgctxt "IDD_PPAGELOGO"
msgid "Player::Logo"
@@ -552,35 +607,7 @@ msgstr "Reproducció::Sortida"
msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
-msgstr "Reproductor::Interfície Web"
-
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Subtítols::Base de Dades"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Recursos"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Miscel·lània"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Reproducció::Captura"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Reproducció::Sync Renderer Settings"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Reproducció::Pantalla completa"
+msgstr "Reproductor::Interfície web"
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
@@ -592,55 +619,47 @@ msgstr "Clip"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
-msgstr "Filtre renderitzat predeterminat per DirectShow. Altres l'utilitzarant quant no puguin cargar-se adecuadament per qualsevol raó. Al Windows XP es el mateix que VMR-7 (de finestra)."
+msgstr "Filtre renderitzador de vídeo per defecte per al DirectShow. Els altres filtres recorreran a aquest quan no pugin carregar-se adequadament per algun motiu. Al Windows XP és propi VMR-7 (mode finestra)."
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "Aquet es el renderitzador predeterminat per Windows 9x/Me/2K. Depenent de la visibilidat de la finestra de vídeo i de les capacitats de la teva tarjeta gràfica, escollirà dinàmicament entre els renders GDI, DirectDraw, i Overlay."
+msgstr "Aquest és el renderitzador predeterminat per Windows 9x/Me/2K. Depenent de la visibilidat de la finestra de vídeo i de les capacitats de la teva tarjeta gràfica, escollirà dinàmicament entre els renders GDI, DirectDraw o Overlay."
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "Sempre renderitzador amb Overlay. Generalment només es permeten els formats YUV, però es presenten directament sense cap conversió de color a RGB. Aquesta manera de renderitzat es el més ràpid i l'únic on pots estar segur sobre el Video Mirroring a pantalla completa quant actives la sortida de TV."
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "El renderitzat predeterminat de XP. Molt estable i només es una mica més lent que el mesclador Overlay. Usa DirectDraw i usa l'Overlay quan pot."
+msgstr "Sempre renderitzador amb Overlay. Generalment només es permeten els formats YUV, però es presenten directament sense cap conversió de color a RGB. Aquesta manera de renderitzat és la més ràpida i l'únic on pots estar segur sobre el Video Mirroring a pantalla completa en activar la sortida de TV."
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Només disponible si tens instal·lat DirectX 9. Té les mateixes habilitats que VMR-7 (de finestra), pero mai usarà el renderitzat Overlay i per aquesta raó podria ser una mica més lent que VMR-7 (de finestra)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "El mateix que VMR-7 (de finestra), però amb el plugin \"Allocator-Presenter\" de MPC per el subtitulat. El mirall de l'Overlay NO funcionarà. Es recomana la profunditat de color de l'escriptori \"Color Verdader\"."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Només està disponible si té el DirectX 9 instal·lat. És molt estable, però mai s'utilitzarà l'Overlay per renderitzar, i per això, pot ser que sigui una mica més lent que l'Overlay mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
-msgstr "El mateix que VMR-9 (de finestra), però amb el plugin \"Allocator-Presenter\" de MPC per el subtitulat. El mirall de l'Overlay POTSER funcionarà. Es recomana la profunditat de color de l'escriptori \"Color Verdader\"."
+msgstr "El mateix que el renderitzador VMR-9 (mode finestra), però amb el plugin \"Asignador-Presentador\" de l'MPC per al subtitulat. La replicació de vídeo en mode Overlay o hardware de renderitzat directe PODRIA funcionar. Se recomana la profunditat de color d'escriptori \"Color vertader\". Recomanat per a Windows XP."
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
-msgstr "Igual que VMR-9 (sense res), pero usa un redimensionador real de dues passades."
+msgstr "El mateix que el rederitzador VMR-9 (sense renderitzat), però fa servir un redimensionador bicúbic en dos passades reals."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Conecta a cualsevol tipus de mitjà de vídeo i manda les mostres a cap lloc. Utilitza'l quant no necesitis veure el vídeo, i vulguis evitar l'ús no necessari de la cpu."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Renderitzador nul. Connecta amb qualsevol tipus de mitjà estil-vídeo i envia el mostreig entrant a anul·lació. Utilitzi'l si no necessita mostrar el vídeo i vol evitar el consum innecessari de la CPU."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
-msgstr "Igual que el renderitzador null normal, perè només conectarà a tipus sense compresió."
+msgstr "Renderitzador nul igual que el normal, però aquest només es connectarà amb mitjans de tipus sense compressió."
msgctxt "IDC_DSEVR"
msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
-msgstr "Nomès disponible a Vista o posterior o per XP amb com a mínim .NET Framework 3.5 instal·lat."
+msgstr "Només disponible per Vista o posterior, o per XP amb .NET Framework 3.5 o superior instal·lat."
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr "Igual que EVR, pero amb Asignació-Presentació del MPC-HC per subtitulat y postprocessament. Recomanat per Vindows Vista o posterior."
+msgstr "Igual que l'EVR, però amb el component Allocator-Presenter (assignador-presentador) de l'MPC-HC per al subtitulat i postprocessament. Recomanat per a Windows Vista o posterior."
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
-msgstr "Renderitzador d'alta qualitat, requereix una GPU amb suport D3D9 o posterior."
+msgstr "Renderitzador d'alta qualitat, cal una GPU amb suport D3D9 o posterior."
msgctxt "IDC_DSSYNC"
msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
@@ -650,49 +669,29 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Renderitzat propi real. Els scripts SMIL funcionaran, però la interacció probablemente no. Usa DirectDraw i s'excuta amb l'Overlay quant pot."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "La sortida del motor Real serà renderitzat per el \"Allocator-Presenter\" basat en DX7 de VMR-7 (sense res)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "La sortida del motor Real serà renderitzat per el \"Allocator-Presenter\" basat en DX9 de VMR-9 (sense res)."
+msgstr "La sortida del motor Real serà renderitzat per l' \"Asignador-Presentador\" basat en DX9 del VMR-9 (renderless)."
msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
-msgstr "El renderitzador propi del Quictime, es torna una mica lent quant l'àrea del video es redimensiona o bé queda parcialment coberta per una altre finestra. Quant l'Overlay no esta disponible li agrada tornar al mòde GDI(interfície de dispositiu gràfic)."
-
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "La Sortida del motor de QuickTime será renderitzat per el \"Allocator-Presenter\" basat en DX7 de VMR-7 (sense res)."
+msgstr "El renderitzador propi del Quicktime, es torna una mica lent quan l'àrea del vídeo es redimensiona o bé queda parcialment coberta per una altre finestra. Quant l'Overlay no està disponible li agrada recórrer al mode GDI (interfície -bàsica- de dispositiu gràfic)."
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "La Sortida del motor de QuickTime será renderitzat per el \"Allocator-Presenter\" basat en DX9 de VMR-9 (sense res)."
+msgstr "La Sortida del motor de QuickTime será renderitzat per l \"Allocator-Presenter\" basat en DX9 del VMR-9 (renderless)."
msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "La superfície del vídeo serà asignada com una de regular en una zona fora de la pantalla."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "L'Àudio Renderer del MPC està trencat, no l'utilitzi.."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Comunicació d'errors"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC acaba d'estavellar-se, però aquesta versió va ser compilada sense informatio depuració.\nPer reportar aquest error, primer has d'usar una versio oficial.\n\nVols visitar la pàgina de descàrrega ara?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
-msgstr "Superfícies \"offscreen\" clàssiques"
+msgstr "Superfície simple normal fora de pantalla"
msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
msgid "2D surfaces"
@@ -704,15 +703,15 @@ msgstr "Superfícies 3D (recomanat)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
-msgstr "Nearest neighbor"
+msgstr "Interpolació per proximitat"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
msgid "Bilinear"
-msgstr "Bilinear"
+msgstr "Bilineal"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
msgid "Bilinear (PS 2.0)"
-msgstr "Bilinear (PS 2.0)"
+msgstr "Bilineal (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
msgid "Bicubic A=-0.60 (PS 2.0)"
@@ -732,19 +731,19 @@ msgstr "**no disponible**"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
msgid "The selected renderer is not installed."
-msgstr "El renderitzador seleccionat no està pas instal·lat."
+msgstr "El renderitzador seleccionat no està instal·lat."
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
-msgstr "Null (qualsevol)"
+msgstr "Renderitzador nul (qualsevol entrada)"
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr "Null (sense comprimir)"
+msgstr "Renderitzador nul (entrada no comprimida)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Renderitzador intern d'àudio"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -756,15 +755,19 @@ msgstr "Tipus MIME"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr "Per visualitzar un recurs incrustat en el seu navegador has d'habilitar la interfície web.\n\nUseu el botó \"Guardar com\" si només vol guardar la informació."
+msgstr "Per visualitzar un recurs incrustat al seu navegador ha d'habilitar la interfície web.\n\nUtilitzeu el botó \"Anomena i desa\" si només voleu guardar la informació."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Descarregar Subtítols"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Descarrega subtítols..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Penja subtítols..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
-msgstr "Retart (ms):"
+msgstr "Retard (ms):"
msgctxt "IDS_SPEEDSTEP_AUTO"
msgid "Auto"
@@ -772,27 +775,27 @@ msgstr "Automàtic"
msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
msgid "There are no customized keys to export."
-msgstr "No hi ha dreceres de teclat per exportar."
+msgstr "No hi ha tecles personalitzades per exportar."
msgctxt "IDS_RFS_NO_FILES"
msgid "No media files found in the archive"
-msgstr "No es troven fitxers multimèdia a l'arxiu"
+msgstr "No s'han trobat arxius multimèdia al fitxer"
msgctxt "IDS_RFS_COMPRESSED"
msgid "Compressed files are not supported"
-msgstr "Els arxius comprimits no són compatibles"
+msgstr "Els fitxers comprimits no són compatibles"
msgctxt "IDS_RFS_ENCRYPTED"
msgid "Encrypted files are not supported"
-msgstr "Els arxius xifrats no són compatibles"
+msgstr "Els fitxers no són compatibles"
msgctxt "IDS_RFS_MISSING_VOLS"
msgid "Couldn't find all archive volumes"
-msgstr "Falten porcions de l'arxiu"
+msgstr "No s'han trobat totes les parts del fitxer"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "La superfície de vídeo serà asiganada como una textura pero encara les funciones 2D serán usadas per copiar i estirar-se sobre el backbuffer. Eequereix una tarjeta de vídeo que pugui aplicar RGBA de 32 bits, com a mínim textures de potència de dos en la resolució del vídeo."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "La superfície del vídeo s'assiganarà com una textura però encara s'utilitzaran les funciones 2D per copiar-la i ajustar-la dintre del backbuffer (buffer no visible). Requereix una tarjeta gràfica que pugui assignar profunditats de color de 32 bits, patró de color RGBA, textures de dimensions que no siguin potències de 2, i que pugui fer-ho almenys en la resolució del vídeo."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
@@ -800,7 +803,7 @@ msgstr "La superfície del vídeo serà asiganada com una textura i dibuixada co
msgctxt "IDC_DX9RESIZER_COMBO"
msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
-msgstr "Si no hi ha suport per Pixel Shader 2.0, s'usarà el filtre bilineal sencill de interpolació de la imatge automàticament."
+msgstr "Si no hi ha suport per al Pixel Shader 2.0, s'utilitzarà automàticament el redimensionament bilineal simple."
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
@@ -816,51 +819,63 @@ msgstr "Redueix el tearing(esquinçament de la imatge) però impedeix que la bar
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
-msgstr "Redueix el tearing(esquinçament de la imatge) passant per alt el VSync incoporat per defecta al D3D."
+msgstr "Redueix l'esquinçament de la imatge o \"tearing\" ignorant la Sincronització Vertical predeterminada del D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Sintonització"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "No s'han carregat els subtítols o el renderitzador no és compatible."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Emmagatzema els shaders compilats al directori AppData local per accelerar el temps de càrrega."
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
-msgstr "Obre VTS_xx_0.ifo per cargar tots els arxius VTS_xx_x.vob de cop"
+msgstr "Obre VTS_xx_0.ifo per carregar tots els fitxers VTS_xx_x.vob de cop"
msgctxt "IDS_SRC_RFS"
msgid "Based on RARFileSource, doesn't support compressed files"
-msgstr "Basat en RARFileSource, no és pas compatible amb arxius comprimits"
+msgstr "Basat en RARFileSource, no és compatible amb fitxers comprimits"
msgctxt "IDS_INTERNAL_LAVF"
msgid "Uses LAV Filters"
-msgstr "Utilitza LAV Filters"
+msgstr "Utilitza els LAV Filters"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr "Usar LAV Filters. Desactivat per defecte ja que els filtres de Microsoft solen ser més estables per aquests formats.\nSi esculls usar els filtres interns, habilita'ls ambdos l'origen i la decodificació per tenir una millor experiéncia de reproducció."
+msgstr "Usa els LAV Filters. Desactivat per defecte ja que els filtres de Microsoft solen ser més estables per aquests formats.\nSi esculls usar els filtres interns, habilita'ls ambdos l'origen i la decodificació per tenir una millor experiéncia de reproducció."
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
-msgstr "Commutar Barra de Navegació"
+msgstr "Commuta la barra de navegació"
msgctxt "IDS_AG_VSYNCACCURATE"
msgid "Accurate VSync"
-msgstr "VSync precisa"
+msgstr "Sincronització Vertical precisa"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr "Si l' objectiu del renderitzador es deixa sense definir, s' hereta l 'estil predeterminat."
+msgstr "Si no es defineix l'objecte de la renderització, s'herederà a partir de l'estil predeterminat."
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
-msgstr "No permetre l'animació dels subtítols. L'activació d'aquesta opció reduirà l'ús de CPU. Es pot utilitzar si experimenta subtítols intermitents."
+msgstr "Inhabilita l'animació dels subtítols. L'activació d'aquesta opció reduirà l'ús de la CPU. Utilitzi-la si els subtítols parpellegen."
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr "En augmentar el nombre de subimatges de la memòria intermèdia s'hauria de millorar, en general, el rendiment de la renderització a costa d'un major ús de la RAM de vídeo de la GPU."
+msgstr "En augmentar el nombre de subimatges de la memòria intermèdia hauria de millorar en general el rendiment de la renderització a costa d'un major ús de la RAM de vídeo de la GPU."
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
-msgstr "Després de fer clic aquet botó, l'estat de comprobació del format del grup reflexarà las associacions d'arxiu actuale pel MPC. Una extensión recent agregada es motrarà en gris, no oblidis de maracar-la de nou abans de tencar aquet cuadre de diàleg"
+msgstr "Després de clicar en aquest botó, l'estat marcat del grup del format farà que es reflecteixi la associació del fitxer actual amb l'MPC. Una extensió recent afegida es mostrarà ombrejada, així que no oblideu de marcar-la de nou abans de tancar aquest quadre de diàleg!"
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr "Desactivant aquesta opció evitarà als subtítols de parpellejar però pot provocar que el processador de vídeo es salti alguns fotogrames."
+msgstr "Desactivant aquesta opció evitarà que els subtítols parpellegin, però pot provocar que el renderitzador de vídeo ometi alguns fotogrames."
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -880,19 +895,19 @@ msgstr "Pas\nPas"
msgctxt "ID_PLAY_DECRATE"
msgid "Decrease speed\nDecrease speed"
-msgstr "Disminuir Velocitat\nDisminuir Velocitat"
+msgstr "Redueix la velocitat\nRedueix la velocitat"
msgctxt "ID_PLAY_INCRATE"
msgid "Increase speed\nIncrease speed"
-msgstr "Augmentar Velocitat\nDisminuir Velocitat"
+msgstr "Augmenta la velocitat\nAugmenta la velocitat"
msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Silencia"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
-msgstr "Habilita el so"
+msgstr "Activa el so"
msgctxt "ID_VOLUME_MUTE_DISABLED"
msgid "No audio"
@@ -900,11 +915,11 @@ msgstr "Sense àudio"
msgctxt "ID_NAVIGATE_SKIPBACK"
msgid "Skip back\nSkip back"
-msgstr "Retrocedir\nRetrocedir"
+msgstr "Retrocedeix\nRetrocedeix"
msgctxt "ID_NAVIGATE_SKIPFORWARD"
msgid "Skip forward\nSkip forward"
-msgstr "Avançar\nAvançar"
+msgstr "Avança\nAvança"
msgctxt "IDS_SUBRESYNC_ORIGINAL"
msgid "&Original"
@@ -916,7 +931,7 @@ msgstr "&Actual"
msgctxt "IDS_SUBRESYNC_EDIT"
msgid "&Edit"
-msgstr "&Editar"
+msgstr "&Edita"
msgctxt "IDS_SUBRESYNC_YES"
msgid "&Yes"
@@ -928,11 +943,11 @@ msgstr "&No"
msgctxt "IDS_SUBRESYNC_DECREASE"
msgid "&Decrease"
-msgstr "&Decrèixer"
+msgstr "&Redueix"
msgctxt "IDS_SUBRESYNC_INCREASE"
msgid "&Increase"
-msgstr "&Augmentar "
+msgstr "&Augmenta "
msgctxt "IDS_OPTIONS_CAPTION"
msgid "Options"
@@ -940,27 +955,27 @@ msgstr "Opcions"
msgctxt "IDS_SHADERS_SELECT"
msgid "&Select Shaders..."
-msgstr "&Seleccionar Shaders..."
+msgstr "&Selecciona els shaders..."
msgctxt "IDS_SHADERS_DEBUG"
msgid "&Debug Shaders..."
-msgstr "&Depuració dels Shaders..."
+msgstr "&Depura els shaders..."
msgctxt "IDS_FAVORITES_ADD"
msgid "&Add to Favorites..."
-msgstr "&Afegir a Favorits..."
+msgstr "&Afegeix-ho a Preferits..."
msgctxt "IDS_FAVORITES_ORGANIZE"
msgid "&Organize Favorites..."
-msgstr "&Organizar Favorits..."
+msgstr "&Organitza els Preferits..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "A l’atzar"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Obre l’ubicació del fitxer"
+msgid "Ope&n file location"
+msgstr "Obre la ubicació del fitxer"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -976,83 +991,83 @@ msgstr "Pausat"
msgctxt "IDS_AG_EDL_NEW_CLIP"
msgid "EDL new clip"
-msgstr "EDL: Nou Clip"
+msgstr "Nou clip de la llista d'edició (EDL)"
msgctxt "IDS_RECENT_FILES_CLEAR"
msgid "&Clear list"
-msgstr "&Neteja la llista"
+msgstr "&Esborra la llista"
msgctxt "IDS_RECENT_FILES_QUESTION"
msgid "Are you sure that you want to delete recent files list?"
-msgstr "Esteu segur que voleu suprimir la llista d' arxius recents?"
+msgstr "Esteu segur que voleu esborrar la llista dels fitxers recents?"
msgctxt "IDS_AG_EDL_SAVE"
msgid "EDL save"
-msgstr "EDL: Estalviar"
+msgstr "Guarda la llista d'edició (EDL)"
msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time Correction"
-msgstr "Activar Correcció de Temps en Fotogrames"
+msgstr "Activa la Correcció de Temps de Fotograma"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
-msgstr "Commutar finestra EDL"
+msgstr "Commuta la finestra del EDL"
msgctxt "IDS_AG_EDL_IN"
msgid "EDL set In"
-msgstr "EDL: Establir punt d'entrada"
+msgstr "Fixa l'inici de l'edició (omissió) de la llista d'edició (EDL)"
msgctxt "IDS_AG_EDL_OUT"
msgid "EDL set Out"
-msgstr "EDL: Establir punt de sortida"
+msgstr "Fixa el final de l'edició (omissió) de la llista d'edició (EDL)"
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
-msgstr "Rotar PnS X-"
+msgstr "Gira PnS X-"
msgctxt "IDS_AG_PNS_ROTATEY_P"
msgid "PnS Rotate Y+"
-msgstr "Rotar PnS Y+"
+msgstr "Gira PnS Y+"
msgctxt "IDS_AG_PNS_ROTATEY_M"
msgid "PnS Rotate Y-"
-msgstr "Rotar PnS Y-"
+msgstr "Gira PnS Y-"
msgctxt "IDS_AG_PNS_ROTATEZ_P"
msgid "PnS Rotate Z+"
-msgstr "Rotar PnS Z+"
+msgstr "Gira PnS Z+"
msgctxt "IDS_AG_PNS_ROTATEZ_M"
msgid "PnS Rotate Z-"
-msgstr "Rotar PnS Z-"
+msgstr "Gira PnS Z-"
msgctxt "IDS_AG_TEARING_TEST"
msgid "Tearing Test"
-msgstr "Prova de Pipelleig"
+msgstr "Prova de pipelleig"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
-msgstr "Escalar a 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Escala a 16:9 TV,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_WIDESCREEN"
msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Zoom a Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zoom a pantalla panoràmica,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_ULTRAWIDE"
msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Zoom a Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zoom a pantalla ultrapanoràmica,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Ocultar quan Pantalla completa"
+msgid "&Hide on Fullscreen"
+msgstr "&Amaga en pantalla completa"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
-msgstr "Parat"
+msgstr "Aturat"
msgctxt "IDS_CONTROLS_BUFFERING"
msgid "Buffering... (%d%%)"
-msgstr "Emmagatzemant a la Memòria intermèdia... (%d%%)"
+msgstr "Emmagatzemant a la memòria intermèdia… (%d %%)"
msgctxt "IDS_CONTROLS_CAPTURING"
msgid "Capturing..."
@@ -1064,11 +1079,11 @@ msgstr "S’està obrint…"
msgctxt "IDS_CONTROLS_CLOSED"
msgid "Closed"
-msgstr "Tencant"
+msgstr "Tancat"
msgctxt "IDS_SUBTITLES_OPTIONS"
msgid "&Options..."
-msgstr "&Opcions..."
+msgstr "&Opcions…"
msgctxt "IDS_SUBTITLES_STYLES"
msgid "&Styles..."
@@ -1076,15 +1091,15 @@ msgstr "&Estils..."
msgctxt "IDS_SUBTITLES_RELOAD"
msgid "&Reload"
-msgstr "&Recargar"
+msgstr "&Recarrega"
msgctxt "IDS_SUBTITLES_ENABLE"
msgid "&Enable"
-msgstr "&Activar"
+msgstr "&Activa"
msgctxt "IDS_PANSCAN_EDIT"
msgid "&Edit..."
-msgstr "Editar..."
+msgstr "&Edita…"
msgctxt "IDS_INFOBAR_TITLE"
msgid "Title"
@@ -1128,19 +1143,19 @@ msgstr "Tecla"
msgctxt "IDS_AG_MOUSE"
msgid "Mouse Windowed"
-msgstr "Ratolí a Finestra"
+msgstr "Ratolí en mode finestra"
msgctxt "IDS_AG_MOUSE_FS"
msgid "Mouse Fullscreen"
-msgstr "Ratolí a Pantalla Completa"
+msgstr "Ratolí en pantalla completa"
msgctxt "IDS_AG_APP_COMMAND"
msgid "App Command"
-msgstr "Comandament d'App"
+msgstr "Ordre de l’aplicació"
msgctxt "IDS_AG_MEDIAFILES"
msgid "Media files (all types)"
-msgstr "Arxius de mitjans (tots els tipus)"
+msgstr "Fitxers multimèdia (tots els tipus)"
msgctxt "IDS_AG_ALLFILES"
msgid "All files (*.*)|*.*|"
@@ -1156,7 +1171,7 @@ msgstr "Desconegut"
msgctxt "IDS_MPLAYERC_0"
msgid "Quick Open File"
-msgstr "Obrir Arxiu Ràpid"
+msgstr "Obertura ràpida de fitxer"
msgctxt "IDS_AG_OPEN_FILE"
msgid "Open File"
@@ -1164,27 +1179,27 @@ msgstr "Obre un fitxer"
msgctxt "IDS_AG_OPEN_DVD"
msgid "Open DVD/BD"
-msgstr "Obre un DVD o BD"
+msgstr "Obre un DVD/BD"
msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
msgid "Failed to set post-resize shaders"
-msgstr "Error en establir post-redimensionament dels shaders"
+msgstr "No s'han pogut establir els shaders de post-redimensionament"
msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
msgid "Failed to set both pre-resize and post-resize shaders"
-msgstr "Error en establir ambdos pre i post redimensionament dels shaders"
+msgstr "No s'han pogut establir els shaders de pre-redimensionament ni de post-redimensionament"
msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
msgid "Shaders are recompiled automatically when the corresponding files are modified."
-msgstr "Els shaders es tornen a compilar automàticament quan els arxius corresponents es modifiquen."
+msgstr "Els shaders es tornen a compilar automàticament quan els fitxers corresponents es modifiquen."
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
-msgstr "No es pot carregar %s, els pixel shaders no funcionaran."
+msgstr "No es pot carregar %s, els píxel shaders no funcionaran."
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
-msgstr "No es pot trobar la funcions necessàriess a %s, els pixel shaders no funcionaran."
+msgstr "No es poden trobar els punts d'entrada necessaris de la funció a %s. Els píxel shaders (PS) no funcionaran."
msgctxt "IDS_OSD_SHADERS_PRESET"
msgid "Shader preset: %s"
@@ -1200,15 +1215,15 @@ msgstr "Anterior Shader Preestablert"
msgctxt "IDS_STRING_COLON"
msgid "%s:"
-msgstr "%s"
+msgstr "%s:"
msgctxt "IDS_RECORD_START"
msgid "Record"
-msgstr "Gravar"
+msgstr "Enregistra"
msgctxt "IDS_RECORD_STOP"
msgid "Stop"
-msgstr "Parar"
+msgstr "Atura"
msgctxt "IDS_BALANCE"
msgid "L = R"
@@ -1231,7 +1246,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Afegeix carpeta contenidora"
msgctxt "IDS_HW_INDICATOR"
@@ -1240,7 +1255,7 @@ msgstr "[Descodificador per Maquinari]"
msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
msgid "Software Decoding"
-msgstr "Descodificador per Programari"
+msgstr "Descodificació per software"
msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
msgid "Playback rate"
@@ -1248,7 +1263,7 @@ msgstr "Velocitat de reproducció"
msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
msgid "&Copy filters list to clipboard"
-msgstr "&Copiar la llista de filtres al porta-retalls"
+msgstr "&Copia la llista de filtres al porta-retalls"
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
@@ -1256,11 +1271,11 @@ msgstr "Introduïu les credencials de servidor"
msgctxt "IDS_CREDENTIALS_CONNECT"
msgid "Enter your credentials to connect"
-msgstr "Introdueixi les seves credencials per connectar"
+msgstr "Introdueixi les seves credencials per connectar-se"
msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
msgid "Save custom style"
-msgstr "Gravar estil personalitzat"
+msgstr "Desa l'estil personalitzat"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
@@ -1268,11 +1283,11 @@ msgstr "Educació / Ciència / Fets reals"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
-msgstr "Oculta els controls i panells també en mode de finestra."
+msgstr "Amaga els controls i els panells també en mode finestra."
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr "Evitar la càrrega del renderitzador de subtítols extern quant l'intern està en ús."
+msgstr "Evita que es carregui el renderitzador extern de subtítols quan s'està utilitzant l'intern."
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
@@ -1284,31 +1299,31 @@ msgstr "Valor"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr "Màxim nombre d' arxius a mostrar al menú \"Archius recents\" i per al cual es guarda potencialment la posició."
+msgstr "Nombre màxim de fitxers emmagatzemats i mostrats al menú \"Fitxers recents\"."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
-msgstr "Recordar la posició d'arxiu només per a arxius de més de N minuts."
+msgstr "Recorda la posició del fitxer només pels que durin més de N minuts."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
msgid "Remember file position also for audio files."
-msgstr "Recordar la posició d'arxiu també per a arxius d'àudio."
+msgstr "Recorda també la posició dels fitxers d'àudio."
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
-msgstr "No fer res"
+msgstr "No facis res"
msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
msgid "Play next file in the folder"
-msgstr "Reprodueix l'arxiu següent dins la carpeta"
+msgstr "Reprodueix el fitxer següent de la carpeta"
msgctxt "IDS_AFTER_PLAYBACK_REWIND"
msgid "Rewind current file"
-msgstr "Rebobina l'arxiu actual"
+msgstr "Rebobina el fitxer actual"
msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
msgid "Close"
-msgstr "Tanca"
+msgstr "Tanca el fitxer"
msgctxt "IDS_AFTER_PLAYBACK_EXIT"
msgid "Exit"
@@ -1316,7 +1331,7 @@ msgstr "Surt"
msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
msgid "Turn off the monitor"
-msgstr "Apagar el monitor"
+msgstr "Apaga el monitor"
msgctxt "IDS_IMAGE_JPEG_QUALITY"
msgid "JPEG Image"
@@ -1328,15 +1343,91 @@ msgstr "Qualitat (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
-msgstr "Mida màxima (NxNpx) de l'art de les portades carregada només en el mode d'àudio."
+msgstr "Mida màxima (NxNpx) de la portada carregada al mode només àudio. "
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr "El retartd del subtítol es reduirà / s'incrementarà en funció d'aquest valor cada vegada que s'utilitzen les tecles d'accés directe corresponents (% s /% s)."
+msgstr "El retard dels subtítols es reduirà o s'incrementarà en funció d'aquest valor cada vegada que s'utilitzin les dreceres de teclat corresponents (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<sense definir>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Mira"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Amunt"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Avall"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Ordena per número de canal lògic (LCN)"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Elimina-ho tot"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Esteu segur que voleu eliminar tots els canals de la llista?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "No hi ha informació disponible"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Espereu-vos, s'està analitzant..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "RA %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Activa el registre a un fitxer (cal reiniciar)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Temps restant"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Alta precisió"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Després de la reproducció: Torna al principi del fitxer"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Després de la reproducció: Tanca el fitxer"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "L'MPC-HC ha trobat un problema durant la inicialització. Amb la vostra ajuda podríem solucionar el problema.\n\nVoleu informar d'aquest problema?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Introdueixi un valor positiu si l'àudio va avançat, o un de negatiu si va amb retard."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "La previsualització actualment està desactivada. Podeu habilitar-la a les opcions de l'MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Aquesta opció pot utilitzar-se per previsualitzar fitxers multimèdia des d'una ubicació remota. Utilitzi-ho només en un xarxa privada que sigui segura.\n\nEsteu segur que voleu activar aquesta opció?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Renderitzador intern de subtítols"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1358,13 +1449,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "S’ha desat la imatge amb èxit"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Càrrega els subtítols"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Carrega els subtítols..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Desa els subtítols"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Desa els subtítols..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1387,12 +1478,12 @@ msgid "Stop"
msgstr "Atura"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "Avançar un Fotograma"
+msgid "Frame-step"
+msgstr "Avança un fotograma"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "Retrocedir un Fotograma"
+msgid "Frame-step back"
+msgstr "Retrocedeix un fotograma"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
@@ -1400,23 +1491,23 @@ msgstr "Vés a"
msgctxt "IDS_AG_INCREASE_RATE"
msgid "Increase Rate"
-msgstr "Augmentar Velocitat"
+msgstr "Augmenta la velocitat"
msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
msgid "Show/Game show"
-msgstr "Emisió/Joc televisat"
+msgstr "Espectacle/Concurs"
msgctxt "IDS_CONTENT_SPORTS"
msgid "Sports"
-msgstr "Esport"
+msgstr "Esports"
msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
msgid "Children's/Youth programmes"
-msgstr "Programes per a Joves/Mainada"
+msgstr "Programes per a nens/joves"
msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
msgid "Music/Ballet/Dance"
-msgstr "Música/Ballet/Dansa"
+msgstr "Música/Ballet/Ball"
msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
msgid "Arts/Culture"
@@ -1432,55 +1523,55 @@ msgstr "Aficions d'oci"
msgctxt "IDS_FILE_RECYCLE"
msgid "Move to Recycle Bin"
-msgstr "Mou a la paperera de reciclatge"
+msgstr "Desplaça-ho a la paperera de reciclatge"
msgctxt "IDS_AG_SAVE_COPY"
msgid "Save a Copy"
-msgstr "Desar una còpia"
+msgstr "Desa una còpia"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
-msgstr "Ùltim fotograma clau"
+msgstr "més recent"
msgctxt "IDS_FASTSEEK_NEAREST"
msgid "Nearest keyframe"
-msgstr "Fotograma clau veí"
+msgstr "més proper"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
-msgstr "MPC-HC ha trobat un problema durant la inicialització. La reproducció de DVD pot ser que no funcioni correctament. Això pot ser causat per algunes incompatibilitats amb certes eines de seguretat.\n\nVols informar d'aquest problema?"
+msgstr "L'MPC-HC ha trobat un problema durant la inicialització. La reproducció de DVD podria funcionar incorrectament. Això pot ser causat per algunes incompatibilitats amb certes eines de seguretat.\n\nVoleu informar d'aquest problema?"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
-msgstr "No mostrar mai"
+msgstr "No els mostris"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
msgid "Show when moving the cursor, hide after:"
-msgstr "Mostra quan es mou el cursor, amagar-se després:"
+msgstr "Mostra'ls en moure el cursor, amaga'ls després de:"
msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
msgid "Show when hovering control, hide after:"
-msgstr "Mostra al voleiar el control, amagar-se després:"
+msgstr "Mostra'ls en passar el cursor per sobre, amaga'ls després de:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
-msgstr "Error en establir pre-redimensionament dels shaders"
+msgstr "No s'han pogut establir els shaders de pre-redimensionament"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
-msgstr "Activar correcció temporal de fotograma: On"
+msgstr "Correcció Temporal de Fotograma: Activada"
msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
msgid "Frame Time Correction: Off"
-msgstr "Activar correcció temporal de fotograma: Off"
+msgstr "Correcció Temporal de Fotograma: Desactivada"
msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
msgid "Target VSync Offset: %.1f"
-msgstr "Desajustament de l'objectiu del Vsync(Offset): %.1f"
+msgstr "Objectiu de l'Òfset de la \"VSync\" : %.1f"
msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
msgid "VSync Offset: %d"
-msgstr "Desajustament del VSync: %d"
+msgstr "Òfset de la \"VSync\": %d"
msgctxt "IDS_OSD_SPEED"
msgid "Speed: %.2lfx"
@@ -1491,8 +1582,8 @@ msgid "Thumbnails saved successfully"
msgstr "Miniatures desades amb èxit"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Vídeo S&tream"
+msgid "Vide&o Track"
+msgstr "Pista de &vídeo"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1500,31 +1591,31 @@ msgstr "Vídeo Ang&le"
msgctxt "IDS_RESET_SETTINGS"
msgid "Reset settings"
-msgstr "Restablir Configuracions"
+msgstr "Restableix la configuració"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "Estàs segur que voleu restaurar MPC-HC als valors per defecte?\nAdvertim que tots els valors actuals es perdran!"
+msgstr "Esteu segur que voleu restaurar la configuració per defecte de l'MPC-HC?\nAdvertim que TOTS els valors actuals es perdran!"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr "Si us plau, tanqueu totes les instàncies del MPC-HC perquè la configuració per defecte pugui restaurar-se."
+msgstr "Si us plau, tanqueu totes les instàncies de l'MPC-HC perquè la configuració per defecte es pugui restaurar."
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
-msgstr "Exportar configuracions"
+msgstr "Exporta les configuracions"
msgctxt "IDS_EXPORT_SETTINGS_WARNING"
msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
-msgstr "Alguns canvis no s'han desat encara.\nVoleu desar abans d'exportar?"
+msgstr "Alguns canvis no s'han desat encara.\nVoleu desar-los abans d'exportar?"
msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
msgid "The settings have been successfully exported."
-msgstr "Els ajustos s'han exportat amb èxit."
+msgstr "La configuració s'ha exportat amb èxit."
msgctxt "IDS_EXPORT_SETTINGS_FAILED"
msgid "The export failed! This can happen when you don't have the correct rights."
-msgstr "L'exportació ha fallat! Això pot passar quan vostè no té els drets d'usuari adequats."
+msgstr "Ha fallat l'exportació! Això pot passar quan no es tenen els permisos adequats."
msgctxt "IDS_BDA_ERROR"
msgid "BDA Error"
@@ -1532,51 +1623,51 @@ msgstr "Error de BDA"
msgctxt "IDS_AG_DECREASE_RATE"
msgid "Decrease Rate"
-msgstr "Disminuir Velocitat"
+msgstr "Redueix la velocitat"
msgctxt "IDS_AG_RESET_RATE"
msgid "Reset Rate"
-msgstr "Inicialitzar Velocitat"
+msgstr "Restableix la velocitat"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Ajust d'Àudio en +10ms"
+msgid "Audio Delay +10 ms"
+msgstr "Retard d'àudio en +10 ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Ajust d'Àudio en -10ms"
+msgid "Audio Delay -10 ms"
+msgstr "Retard d'àudio en -10 ms"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
-msgstr "Salt Endavant (curt)"
+msgstr "Salta endavant (curt)"
msgctxt "IDS_MPLAYERC_24"
msgid "Jump Backward (small)"
-msgstr "Salt Enrere (curt)"
+msgstr "Salta enrere (curt)"
msgctxt "IDS_MPLAYERC_25"
msgid "Jump Forward (medium)"
-msgstr "Salt Endavant (mig)"
+msgstr "Salta endavant (mig)"
msgctxt "IDS_MPLAYERC_26"
msgid "Jump Backward (medium)"
-msgstr "Salt Enrere (mig)"
+msgstr "Salta enrere (mig)"
msgctxt "IDS_MPLAYERC_27"
msgid "Jump Forward (large)"
-msgstr "Salt Endavant (llarg)"
+msgstr "Salta endavant (llarg)"
msgctxt "IDS_MPLAYERC_28"
msgid "Jump Backward (large)"
-msgstr "Salt Enrere (llarg)"
+msgstr "Salta enrere (llarg)"
msgctxt "IDS_MPLAYERC_29"
msgid "Jump Forward (keyframe)"
-msgstr "Salt Endavant (fotograma clau)"
+msgstr "Salta endavant (fotograma clau)"
msgctxt "IDS_MPLAYERC_30"
msgid "Jump Backward (keyframe)"
-msgstr "Salt Enrere (fotograma clau)"
+msgstr "Salta enrere (fotograma clau)"
msgctxt "IDS_AG_NEXT"
msgid "Next"
@@ -1588,51 +1679,91 @@ msgstr "Previ"
msgctxt "IDS_AG_NEXT_FILE"
msgid "Next File"
-msgstr "Arxiu Següent"
+msgstr "Fitxer següent"
msgctxt "IDS_AG_PREVIOUS_FILE"
msgid "Previous File"
-msgstr "Arxiu Anterior"
+msgstr "Fitxer Previ"
msgctxt "IDS_MPLAYERC_99"
msgid "Toggle Direct3D fullscreen"
-msgstr "Commutar el Direct3D a Pantalla completa"
+msgstr "Commuta el Direct3D a pantalla completa"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
-msgstr "Anar a Subtítol Previ"
+msgstr "Vés al subtítol anterior"
msgctxt "IDS_MPLAYERC_101"
msgid "Goto Next Subtitle"
-msgstr "Anar a Subtítol Següent"
+msgstr "Vés al subtítol següent"
msgctxt "IDS_MPLAYERC_102"
msgid "Shift Subtitle Left"
-msgstr "Moure Subtítol cap a l'Esquerra"
+msgstr "Desplaça el subtítol cap a l'esquerra"
msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
-msgstr "Moure Subtítol cap a la Dreta"
-
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Mostrar Estadisticas"
+msgstr "Desplaça el subtítol cap a la dreta"
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
-msgstr "Anar al Començament"
+msgstr "Vés al Començament"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Mostra el Nom del Fixer"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Reprodueix el DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Reprodueix el BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Visualitza les Estadístiques del Renderitzador"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "Sobreimpressió (OSD): Restableix les estadístiques del renderitzador"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Subtítols::Més opcions"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Amaga les &vores"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Només el fotograma"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Mostra el menú i la &barra del títol"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Amaga el &menú"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Avançat"
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
-msgstr "Format Mínim"
+msgstr "Format mínim"
msgctxt "IDS_AG_VIEW_COMPACT"
msgid "View Compact"
-msgstr "Format Compacte"
+msgstr "Format compacte"
msgctxt "IDS_AG_VIEW_NORMAL"
msgid "View Normal"
-msgstr "Format Normal"
+msgstr "Format normal"
msgctxt "IDS_AG_FULLSCREEN"
msgid "Fullscreen"
@@ -1644,7 +1775,7 @@ msgstr "Pantalla completa (c/s canvi de la res.)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT"
msgid "Zoom Auto Fit"
-msgstr "Ajust automàtic del Zoom"
+msgstr "Ajust automàtic del zoom"
msgctxt "IDS_AG_VIDFRM_HALF"
msgid "VidFrm Half"
@@ -1660,11 +1791,11 @@ msgstr "VidFrm Doble"
msgctxt "IDS_AG_ALWAYS_ON_TOP"
msgid "Always On Top"
-msgstr "Sempre Visible"
+msgstr "Sempre visible"
msgctxt "IDS_AG_PNS_INC_SIZE"
msgid "PnS Inc Size"
-msgstr "PnS Inc Tamany"
+msgstr "PnS Inc Mida"
msgctxt "IDS_AG_PNS_INC_WIDTH"
msgid "PnS Inc Width"
@@ -1676,7 +1807,7 @@ msgstr "PnS Inc Alçada"
msgctxt "IDS_AG_PNS_DEC_SIZE"
msgid "PnS Dec Size"
-msgstr "PnS Dec Tamany"
+msgstr "PnS Dec Mida"
msgctxt "IDS_AG_PNS_DEC_WIDTH"
msgid "PnS Dec Width"
@@ -1687,24 +1818,24 @@ msgid "PnS Dec Height"
msgstr "PnS Dec Alçada"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Decarregant subtítols, esperi sisplau."
+msgid "Downloading [%s] \"%s\""
+msgstr "Descarregant [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
-msgstr "Anàlisi de la llista..."
+msgstr "S’està analitzant la llista…"
msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
msgid "No subtitles found."
msgstr "No s'han trobat subtítols."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d subtítols disponibles."
+msgid "%d subtitle(s) available."
+msgstr "%d subtítols disponibles."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "Vols comprovar periòdicament si hi ha actualitzacions del MPC-HC?\n\nAquesta funció pot ser desactivada més tard a Miscel.lània en menú d'opcions."
+msgstr "Voleu que l'MPC-HC comprovi periòdicament si hi ha actualitzacions?\n\nPodeu desactivar aquesta funció més tard a la pàgina «Diversos» del menú d'opcions."
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1724,31 +1855,31 @@ msgstr "Ajust automàtic"
msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (Larger Only)"
-msgstr "Ajust automàtic (Si es massa Gran)"
+msgstr "Ajust automàtic (si és massa gran)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
msgid "Zoom Auto Fit (Larger Only)"
-msgstr "Ajust automàtic del Zoom (Si es massa Gran)"
+msgstr "Ajust automàtic del zoom (si és massa gran)"
msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
msgid "Zoom: Auto (Larger Only)"
-msgstr "Zoom: Auto (Si es massa Gran)"
+msgstr "Zoom: Auto (si és massa gran)"
msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
msgid "Double click to open file location"
-msgstr "Feu doble clic per obrir ubicació del fitxer"
+msgstr "Feu doble clic per obrir la ubicació del fitxer"
msgctxt "IDS_TOOLTIP_REMAINING_TIME"
msgid "Toggle between elapsed and remaining time"
-msgstr "Commutar entre el temps transcorregut i restant"
+msgstr "Commuta entre el temps transcorregut i restant"
msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
msgid "Invalid delay"
-msgstr "Retart no vàlid"
+msgstr "El retard no és vàlid"
msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
msgid "Please enter a number between 1 and 365."
-msgstr "Sisplau introduexi un número entre 1 i 365."
+msgstr "Si us plau, introduexi un número entre 1 i 365."
msgctxt "IDS_AG_PNS_CENTER"
msgid "PnS Center"
@@ -1796,7 +1927,7 @@ msgstr "Redueix el volum"
msgctxt "IDS_AG_VOLUME_MUTE"
msgid "Volume Mute"
-msgstr "Silenciar"
+msgstr "Silencia"
msgctxt "IDS_MPLAYERC_63"
msgid "DVD Title Menu"
@@ -1816,7 +1947,7 @@ msgstr "Menú d'Àudio del DVD"
msgctxt "IDS_MPLAYERC_67"
msgid "DVD Angle Menu"
-msgstr "Menú Angle DVD"
+msgstr "Menú Angle del DVD"
msgctxt "IDS_MPLAYERC_68"
msgid "DVD Chapter Menu"
@@ -1824,91 +1955,75 @@ msgstr "Menú Capítols DVD"
msgctxt "IDS_AG_DVD_MENU_LEFT"
msgid "DVD Menu Left"
-msgstr "Menu Esquerra DVD"
+msgstr "Menú Esquerra DVD"
msgctxt "IDS_MPLAYERC_70"
msgid "DVD Menu Right"
-msgstr "Menu Dreta DVD"
+msgstr "Menú Dreta DVD"
msgctxt "IDS_AG_DVD_MENU_UP"
msgid "DVD Menu Up"
-msgstr "Menu Amunt DVD"
+msgstr "Menú Amunt DVD"
msgctxt "IDS_AG_DVD_MENU_DOWN"
msgid "DVD Menu Down"
-msgstr "Menu Avall DVD"
+msgstr "Menú Avall DVD"
msgctxt "IDS_MPLAYERC_73"
msgid "DVD Menu Activate"
-msgstr "Menu Activar DVD"
+msgstr "Activa Menú del DVD"
msgctxt "IDS_AG_DVD_MENU_BACK"
msgid "DVD Menu Back"
-msgstr "Menu Regressar DVD"
+msgstr "Menú Regressar DVD"
msgctxt "IDS_MPLAYERC_75"
msgid "DVD Menu Leave"
-msgstr "Menu Deixar DVD"
+msgstr "Menú Deixar DVD"
msgctxt "IDS_AG_BOSS_KEY"
msgid "Boss key"
-msgstr "Tecla Enxampar"
+msgstr "Boss key (tecla administrativa)"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Menú del Reproductor (curt)"
+msgid "Player Menu"
+msgstr "Menú del reproductor"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Menú del Reproductor (llarg)"
+msgid "Player Menu (full)"
+msgstr "Menú del reproductor (sencer)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
-msgstr "Menú dels Filtres"
+msgstr "Menú dels filtres"
msgctxt "IDS_AG_OPTIONS"
msgid "Options"
msgstr "Opcions"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Àudio Següent"
+msgid "Next Audio Track"
+msgstr "Pista d'àudio següent"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Àudio Previ"
+msgid "Prev Audio Track"
+msgstr "Pista d'àudio prèvia"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Subtítol Següent"
+msgid "Next Subtitle Track"
+msgstr "Pista de subtítols següent "
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Subtítol Previ"
+msgid "Prev Subtitle Track"
+msgstr "Pista de subtítols prèvia"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
-msgstr "Subtítols Activats/Desactivats"
+msgstr "Activa/Desactiva els subtítols"
msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
-msgstr "Recargar Subtítols"
-
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Àudio Següent (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Àudio Previ (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Subtítol Següent (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Subtítol Previ (OGM)"
+msgstr "Recarrega els subtítols"
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
@@ -1916,39 +2031,39 @@ msgstr "Angle Següent (DVD)"
msgctxt "IDS_MPLAYERC_92"
msgid "Prev Angle (DVD)"
-msgstr "Angle Previ (DVD)"
+msgstr "Angle Anterior (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Àudio Següent (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Pista d'àudio següent (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Àudio Previ (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Pista d'àudio prèvia (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Subtítol Següent (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Pista de subtítols següent (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Subtítol Previ (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Pista de subtítols prèvia (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
-msgstr "Subtítols Activats/Desactivats (DVD)"
+msgstr "Activa/Desactiva Subtítols (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Temps Restant"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Visualitza el Temps Actual"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
-msgstr "Selecciona el Directori"
+msgstr "Selecciona el directori"
msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
msgid "Quick add favorite"
-msgstr "Addició ràpida de favorits"
+msgstr "Addició ràpida a Preferits"
msgctxt "IDS_DVB_CHANNEL_NUMBER"
msgid "N"
@@ -1966,17 +2081,17 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Encriptat"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Sí"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "No"
msgctxt "IDS_DVB_CHANNEL_START_SCAN"
msgid "Start"
-msgstr "Comença"
+msgstr "Inicia"
msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
msgid "Stop"
@@ -1984,11 +2099,11 @@ msgstr "Atura"
msgctxt "IDS_DVB_TVNAV_SEERADIO"
msgid "Radio stations"
-msgstr "Estacions de Ràdio"
+msgstr "Emissores de ràdio"
msgctxt "IDS_DVB_TVNAV_SEETV"
msgid "TV stations"
-msgstr "Estacions de TV"
+msgstr "Emissores de televisió"
msgctxt "IDS_DVB_CHANNEL_FORMAT"
msgid "Format"
@@ -2020,35 +2135,35 @@ msgstr "Fotogrames"
msgctxt "IDS_AG_BUFFERS"
msgid "Buffers"
-msgstr "Memòria intermèdia"
+msgstr "Memòria intermèdia (Buffers)"
msgctxt "IDS_MAINFRM_9"
msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volum: %02lu/%02lu, Títol: %02lu/%02lu, Capítol: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
-msgstr "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
-msgstr "Afegir a la Llista de Reprodució de MPC"
+msgstr "Afegeix a la llista de reproducció de l'MPC-HC"
msgctxt "IDS_OPEN_WITH_MPC"
msgid "Play with MPC-HC"
-msgstr "Reproduir amb MPC"
+msgstr "Reprodueix amb l'MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr "MPC-HC no té suficientes privilegis per canviar les associacions del tipus d'arxiu. Sisplau faci click al botó \"Executar com a administrador\"."
+msgstr "L'MPC-HC no té els privilegis suficients per canviar les associacions del fitxer. Si us plau, premi el botó \"Executa com a administrador\"."
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr "MPC-HC és un el reproductor multimèdia de codi obert per a Windows, molt lleuger. És compatible amb tots els formats d'arxius d'àudio i vídeo més comuns disponibles per reproduir-se. És 100% lliure de spyware, no hi ha anuncis o qualsevol altre tipus de publicitat."
+msgstr "L'MPC-HC és un el reproductor multimèdia de codi obert per a Windows i molt lleuger. És compatible amb tots els formats de fitxers d'àudio i vídeo més comuns. És 100% lliure de spyware, no hi ha anuncis ni barres d'eines."
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2068,7 +2183,7 @@ msgstr "DVD: Error inesperat"
msgctxt "IDS_MAINFRM_17"
msgid "DVD: Copy-Protect Fail"
-msgstr "DVD: Fallada per Protecció Anticopia"
+msgstr "DVD: Error per prevenció de còpia"
msgctxt "IDS_MAINFRM_18"
msgid "DVD: Invalid DVD 1.x Disc"
@@ -2084,7 +2199,7 @@ msgstr "DVD: Nivell Parental Baix"
msgctxt "IDS_MAINFRM_21"
msgid "DVD: Macrovision Fail"
-msgstr "DVD: Fallada de Macrovision"
+msgstr "DVD: Error de Macrovision"
msgctxt "IDS_MAINFRM_22"
msgid "DVD: Incompatible System And Decoder Regions"
@@ -2096,11 +2211,11 @@ msgstr "DVD: Disc i Decodificador de Regions Incompatibles"
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "Aqueta opció es per eliminar el pipelleig, però evita que MPC-HC mostri el menú contextual i caixes de diàleg mentre reprodueix.\n\nEstas segur vols activar aquesta opció?"
+msgstr "Aquesta opció està dissenyada per eliminar el pipelleig, no obstant això, també evitarà que l'MPC-HC mostri el menú de context i qualsevol quadre de diàleg durant la reproducció.\n\n\nEsteu segur que voleu activar aquesta opció?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
-msgstr "Retard dels Subs: %ld ms"
+msgstr "Retard dels subtítols: %ld ms"
msgctxt "IDS_AG_TITLE2"
msgid "Title: %02d/%02d"
@@ -2112,7 +2227,7 @@ msgstr "El nom conté caràcters no suportats (utilitza només A-Z, 0-9)"
msgctxt "IDS_THUMB_ROWNUMBER"
msgid "Rows:"
-msgstr "Arxius:"
+msgstr "Files:"
msgctxt "IDS_THUMB_COLNUMBER"
msgid "Columns:"
@@ -2122,41 +2237,33 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Amplada de la imatge"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "La URL sembla correcta!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Versió del protocol diferent, actualitza el teu reproductor o escull una altre direcció!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "Relació d'Aspecte"
+msgstr "Relació d’aspecte"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
msgstr ", Total: %ld, Perduts: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", Tamany: %I64dKB"
+msgid ", Size: %I64d KB"
+msgstr ", Mida: %I64d kB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", Tamany: %I64dMB"
+msgid ", Size: %I64d MB"
+msgstr ", Mida: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", Lliure: %I64dKB"
+msgid ", Free: %I64d KB"
+msgstr ", Disponible: %I64d kB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", Lliure: %I64dMB"
+msgid ", Free: %I64d MB"
+msgstr ", Disponible: %I64d MB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
-msgstr ", Memòries Intermèdies V/A Lliures: %03d/%03d"
+msgstr ", memòries intermèdies V/A lliures: %03d/%03d"
msgctxt "IDS_AG_ERROR"
msgid "Error"
@@ -2164,11 +2271,11 @@ msgstr "Error"
msgctxt "IDS_SUBTITLE_STREAM_OFF"
msgid "Subtitle: off"
-msgstr "Subtítol: Apagat"
+msgstr "Subtítols: desactivats"
msgctxt "IDS_SUBTITLE_STREAM"
msgid "Subtitle: %s"
-msgstr "Subtítol: %s"
+msgstr "Subtítols: %s"
msgctxt "IDS_MAINFRM_46"
msgid "Select the path for the DVD/BD:"
@@ -2176,35 +2283,35 @@ msgstr "Seleccioneu la ruta d'accés del DVD/BD:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr "Carregat amb èxit"
+msgstr " carregat amb èxit"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
-msgstr "Tots els arxius (*.*)|*.*||"
+msgstr "Tots els fitxer (*.*)|*.*||"
msgctxt "IDS_GETDIB_FAILED"
msgid "GetDIB failed, hr = %08x"
-msgstr "GetDIB a fallat, hr = %08x"
+msgstr "Error a GetDIB, hr = %08x"
msgctxt "IDS_GETCURRENTIMAGE_FAILED"
msgid "GetCurrentImage failed, hr = %08x"
-msgstr "GetCurrentImage ha fallat, hr = %08x"
+msgstr "Error a GetCurrentImage, hr = %08x"
msgctxt "IDS_SCREENSHOT_ERROR"
msgid "Cannot create file"
-msgstr "No es pot crear l'Arxiu"
+msgstr "No es pot crear el fitxer"
msgctxt "IDS_THUMBNAILS_NO_DURATION"
msgid "Cannot create thumbnails for files with no duration"
-msgstr "No es poden crear miniatures pels arxius sense duració"
+msgstr "No es poden crear miniatures pels fitxers sense cap duració"
msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
msgid "Failed to get video frame size"
-msgstr "Fallada al obtenir la mida del fotograma de vídeo"
+msgstr "No s'ha pogut obtenir la mida del fotograma del vídeo"
msgctxt "IDS_OUT_OF_MEMORY"
msgid "Out of memory, go buy some more!"
-msgstr "Falta memòria!"
+msgstr "Falta memòria! Se recomana ampliar-la."
msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
@@ -2212,35 +2319,35 @@ msgstr "Format d'Imatge invàlid, no es poden crear les miniatures de %d bpp dib
msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
msgid "File Size: %s (%s bytes)\\N"
-msgstr "Tamany de l'Arxiu: %s (%s bytes)\\N"
+msgstr "Mida del fitxer: %s (%s bytes)\\N"
msgctxt "IDS_THUMBNAILS_INFO_HEADER"
msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
-msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Nom de l' Arxiu: %s\\N%sResolució: %dx%d %s\\NDuració: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Nom del fitxer: %s\\N%sResolució: %dx%d %s\\NDuració: %02d:%02d:%02d"
msgctxt "IDS_THUMBNAIL_TOO_SMALL"
msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
-msgstr "Les miniatures serien massa petites, no es possible de crear l'arxiu.\n\nProveu reduir el nombre de miniatures o augmentar la mida total."
+msgstr "No es pot crear el fitxer. Les miniatures serien massa petites.\n\nProveu de reduir el nombre de miniatures o augmentar la mida total."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Per carregar subtítols has de canviar el tipus de processador de vídeo i tornar a obrir el fitxer.\n-DirectShow: VMR-7/VMR-9(sense render), EVR(CP),Sync,madVR o Halli\n-RealMedia: Renderitzador especial per RealMedia, o obrir-lo a través de DirectShow\n-QuickTime: DX7 or DX9 renderitzador pel QuickTime\n-ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Per carregar els subtítols has de canviar el tipus de renderitzador de vídeo i reobrir el fitxer.\n- DirectShow: VMR-9 (sense rendreitzat), EVR (CP), Sync, madVR o Haali\n- RealMedia: Renderitzador especial per a RealMedia, o obre'l mitjançant el DirectShow\n- QuickTime: Renderitzador DX7 o DX9 per a QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
-msgstr "Arxius de subtítols"
+msgstr "Fitxers de subtítols"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
-msgstr "Relació d'Aspecte: %ld:%ld"
+msgstr "Relació d'aspecte: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Relació d'Aspecte: Original"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Relació d'aspecte: Per defecte (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Diferència entre Vídeo i Àudio: %I64dms"
+msgid "Audio delay: %I64d ms"
+msgstr "Retard de l'àudio: %I64dms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2248,35 +2355,31 @@ msgstr "Capítol %d"
msgctxt "IDS_AG_OUT_OF_MEMORY"
msgid "Out of memory"
-msgstr "Sense memòria"
+msgstr "Memòria esgotada"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Error: es necessita el Flash pel IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Error: es necessita el reproductor Flash per al Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
-msgstr "QuickTime encara no es compatible amb la versió X64 (no hi ha una llibreria d'apple disponible)"
+msgstr "El QuickTime encara no és compatible amb la versió X64 (no hi ha llibreries d'Apple disponible)"
msgctxt "IDS_MAINFRM_80"
msgid "Failed to create the filter graph object"
-msgstr "Fallada al crear l' objecte del esquema de filtres"
+msgstr "No s'ha pogut crear l'objecte del diagrama de filtres"
msgctxt "IDS_MAINFRM_81"
msgid "Invalid argument"
-msgstr "Argument invàlid"
+msgstr "L’argument no és vàlid"
msgctxt "IDS_MAINFRM_82"
msgid "Opening aborted"
-msgstr "Opertura abortada"
+msgstr "S’ha interromput l’obertura"
msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
-msgstr "Fallada en renderizar l' arxiu"
-
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL errònia, no s'hi pot localitzar la base de dades dels subtítols!"
+msgstr "No s'ha pogut renderitzar el fitxer"
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
@@ -2288,31 +2391,23 @@ msgstr "Volum: %d%%"
msgctxt "IDS_BOOST_OSD"
msgid "Boost: +%u%%"
-msgstr "Augmentar : +%u%%"
+msgstr "Augmenta: +%u%%"
msgctxt "IDS_BALANCE_OSD"
msgid "Balance: %s"
-msgstr "Balanç"
+msgstr "Balanç: %s"
msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Actual"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC ha acabat inesperadament. Per ajudar-nos a solucionar aquest problema, si us plau, envieu aquest fitxer \"%s\" al nostre bug tracker.\n\nVoleu ara obrir la carpeta que conté l'arxiu \"minidump\" i visitar el \"bug tracker\" per informar de l'error?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Ha fallat la creació de l' arxiu de volcat a '%s' (error %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
-msgstr "Seleccioni Directori"
+msgstr "Trieu una carpeta"
msgctxt "IDS_MAINFRM_DIR_CHECK"
msgid "Include subdirectories"
-msgstr "Incluir subdirectoris"
+msgstr "Inclou subdirectoris"
msgctxt "IDS_AG_PAUSE"
msgid "Pause"
@@ -2320,15 +2415,15 @@ msgstr "Pausa"
msgctxt "IDS_AG_TOGGLE_CAPTION"
msgid "Toggle Caption&Menu"
-msgstr "Commutar Menú de &Llegenda"
+msgstr "Commuta el menú i la barra del títol"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
-msgstr "Commutar Seeker"
+msgid "Toggle Seek Bar"
+msgstr "Commuta la barra de navegació"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
msgid "Toggle Controls"
-msgstr "Commutar Controls"
+msgstr "Commuta els controls"
msgctxt "IDS_MAINFRM_84"
msgid "Invalid file name"
@@ -2336,19 +2431,19 @@ msgstr "El nom del fitxer no és vàlid"
msgctxt "IDS_MAINFRM_86"
msgid "Cannot connect the filters"
-msgstr "No es pot conectar als filtres"
+msgstr "No es poden connectar els filtres"
msgctxt "IDS_MAINFRM_87"
msgid "Cannot load any source filter"
-msgstr "No es pot cargar cap filtre font"
+msgstr "No es pot carregar cap filtre font"
msgctxt "IDS_MAINFRM_88"
msgid "Cannot render the file"
-msgstr "No es pot renderitzar l'arxiu"
+msgstr "No es pot renderitzar el fitxer"
msgctxt "IDS_MAINFRM_89"
msgid "Invalid file format"
-msgstr "Format de l'arxiu invàlid"
+msgstr "El format del fitxer no és vàlid"
msgctxt "IDS_MAINFRM_90"
msgid "File not found"
@@ -2372,7 +2467,7 @@ msgstr "No es pot crear el filtre de navegació del DVD"
msgctxt "IDS_AG_FAILED"
msgid "Failed"
-msgstr "Fallada"
+msgstr "Error"
msgctxt "IDS_MAINFRM_96"
msgid "Can't create video capture filter"
@@ -2396,7 +2491,7 @@ msgstr "So"
msgctxt "IDS_MAINFRM_114"
msgid "%s was not found, please insert media containing this file."
-msgstr "No s'ha trobat %s, sisplau inserti el mitjà que conté aquest arxiu.."
+msgstr "No s'ha trobat %s, si us plau, insereixi el suport que conté aquest fitxer."
msgctxt "IDS_AG_ABORTED"
msgid "Aborted"
@@ -2408,39 +2503,39 @@ msgstr "&Propietats..."
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr " Propietats (del pin)..."
+msgstr " Propietats de l'etapa..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
-msgstr "Pista Desconeguda"
+msgstr "Transmissió desconeguda"
msgctxt "IDS_AG_UNKNOWN"
msgid "Unknown %u"
-msgstr "%u Desconeguda"
+msgstr "%u desconeguda"
msgctxt "IDS_AG_VSYNC"
msgid "VSync"
-msgstr "VSync"
+msgstr "Sincronització vertical (VSync)"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr " (Comentaris del Director N° 1)"
+msgstr " (Comentaris del director, 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr " (Comentaris del Director N° 2)"
+msgstr " (Comentaris del director, 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr "Habilitar subtítols del DVD"
+msgstr "Activa els subtítols del DVD"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
-msgstr "Angle N° %u"
+msgstr "Angle núm. %u"
msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
msgid "Increase VSync Offset"
-msgstr "Augmentar desajustament del Vsync"
+msgstr "Augmenta l'òfset de la \"VSync\""
msgctxt "IDS_AG_DISABLED"
msgid "Disabled"
@@ -2448,11 +2543,11 @@ msgstr "Desactivat"
msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
msgid "Decrease VSync Offset"
-msgstr "Disminuir desajustament del Vsync"
+msgstr "Disminueix l'òfset de la \"VSync\""
msgctxt "IDS_MAINFRM_136"
msgid "MPC-HC D3D Fullscreen"
-msgstr "Pantalla completa MPC D3D"
+msgstr "Pantalla completa de l'MPC D3D"
msgctxt "IDS_MAINFRM_137"
msgid "Unknown format"
@@ -2460,59 +2555,59 @@ msgstr "Format desconegut"
msgctxt "IDS_MAINFRM_138"
msgid "Sub shift: %ld ms"
-msgstr "Sub Shift : %ld"
+msgstr "Desplaçament dels subt.: %ld ms"
msgctxt "IDS_VOLUME_BOOST_INC"
msgid "Volume boost increase"
-msgstr "Augmentar guany del volum"
+msgstr "Augment del guany de volum"
msgctxt "IDS_VOLUME_BOOST_DEC"
msgid "Volume boost decrease"
-msgstr "Disminuir guany del volum"
+msgstr "Decrement del guany de volum"
msgctxt "IDS_VOLUME_BOOST_MIN"
msgid "Volume boost Min"
-msgstr "Guany de volum mínim"
+msgstr "Augment de volum mínim"
msgctxt "IDS_VOLUME_BOOST_MAX"
msgid "Volume boost Max"
-msgstr "Guany de volum màxim"
+msgstr "Augment de volum màxim"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Ús: mpc-hc.exe \"camí\" [switches]\n\n\"camí\"\tL'arxiu o directori principal a cargar-se (comodins permesos, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tfile ambtains \"...DELAY XXms...\")\n/d3dfs\t\tstart rendering in D3D Mode a Pantalla completa\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary. (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playing\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tRegister Vídeo formats\n/regaud\t\tRegister audio formats\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tUnregister Vídeo formats\n/start ms\t\tStart playing at \"ms\" (= milliseambds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet fixed window size\n/monitor N\tStart on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tMostra l' ajuda de la línea de comandaments(no traduït)\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Ús: mpc-hc.exe \"ruta\" [paràmetres]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
-msgstr "Opció(ns) desconeguda(es) a la cadena de línia de comandaments: \n\n"
+msgstr "S'han trobat opcions no reconegudes a l'ordre executada: \n\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
-msgstr "Commutar Informació"
+msgstr "Commuta la informació"
msgctxt "IDS_AG_TOGGLE_STATS"
msgid "Toggle Statistics"
-msgstr "Commutar Estadístiques"
+msgstr "Commuta les estadístiques"
msgctxt "IDS_AG_TOGGLE_STATUS"
msgid "Toggle Status"
-msgstr "Commutar Estat"
+msgstr "Commuta l'estat"
msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
msgid "Toggle Subresync Bar"
-msgstr "Commutar Barra de Resincronització dels Subtítols"
+msgstr "Commuta la barra de resincronització dels subtítols"
msgctxt "IDS_AG_TOGGLE_PLAYLIST"
msgid "Toggle Playlist Bar"
-msgstr "Commutar Barra de Llista de Reprodució"
+msgstr "Commuta la barra de la llista de reproducció"
msgctxt "IDS_AG_TOGGLE_CAPTURE"
msgid "Toggle Capture Bar"
-msgstr "Commutar Barra de Captura"
+msgstr "Commuta la barra de captura"
msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
msgid "Toggle Debug Shaders"
-msgstr "Commutar Depuració dels Shaders"
+msgstr "Commuta la depuració dels PS"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
@@ -2528,11 +2623,11 @@ msgstr "Zoom 200%"
msgctxt "IDS_AG_NEXT_AR_PRESET"
msgid "Next AR Preset"
-msgstr "Següent Preset RA"
+msgstr "Següent mode de RA"
msgctxt "IDS_AG_VIDFRM_STRETCH"
msgid "VidFrm Stretch"
-msgstr "Estirar VidFrm"
+msgstr "Estira VidFrm"
msgctxt "IDS_AG_VIDFRM_INSIDE"
msgid "VidFrm Inside"
@@ -2544,51 +2639,43 @@ msgstr "VidFrm Afora"
msgctxt "IDS_AG_PNS_RESET"
msgid "PnS Reset"
-msgstr "Inicialitzar PnS"
+msgstr "Reinicia el PnS"
msgctxt "IDS_AG_PNS_ROTATEX_P"
msgid "PnS Rotate X+"
-msgstr "Rotar PnS X+"
+msgstr "Gira PnS X+"
msgctxt "IDS_AG_VIDFRM_ZOOM1"
msgid "VidFrm Zoom 1"
-msgstr "VidFrm Zoom 1"
+msgstr "Zoom 1 de fotograma"
msgctxt "IDS_AG_VIDFRM_ZOOM2"
msgid "VidFrm Zoom 2"
-msgstr "VidFrm Zoom 2"
+msgstr "Zoom 2 de fotograma"
msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
msgid "VidFrm Switch Zoom"
-msgstr "VidFrm Commutar Zoom"
+msgstr "Commuta el zoom de fotograma"
msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
-msgstr "&Activar tots els filtres"
-
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Sintonització"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Subtítols no cargats o renderitzador no soportat."
+msgstr "&Activa tots els filtres"
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
-msgstr "Autor desconegut contacte'm si vas fer aquet logotipus!"
+msgstr "Autor desconegut. Contacteu-nos si vostè és l'autor."
msgctxt "IDS_NO_MORE_MEDIA"
msgid "No more media in the current folder."
-msgstr "No hi ha cap més mitjà a la carpeta actual."
+msgstr "No hi ha més fitxers audiovisuals a la carpeta actual."
msgctxt "IDS_FIRST_IN_FOLDER"
msgid "The first file of the folder is already loaded."
-msgstr "El primer arxiu de la carpeta ja està carregat."
+msgstr "El primer fitxer de la carpeta ja està carregat."
msgctxt "IDS_LAST_IN_FOLDER"
msgid "The last file of the folder is already loaded."
-msgstr "L'últim arxiu de la carpeta ja està carregat."
+msgstr "L'últim fitxer de la carpeta ja està carregat."
msgctxt "IDS_FRONT_LEFT"
msgid "Front Left"
@@ -2604,7 +2691,7 @@ msgstr "Davant Centre"
msgctxt "IDS_LOW_FREQUENCY"
msgid "Low Frequency"
-msgstr "Baixa Freqüència"
+msgstr "De baixa freqüència"
msgctxt "IDS_BACK_LEFT"
msgid "Back Left"
@@ -2662,41 +2749,13 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Dalt Darrere Dreta"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Inicialitzar Estadistiques de Visualització"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Subtítols::Més Opcions"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Amagar vores"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Només Fotograma(frame)"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Mostrar Menú &&Llegenda"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Amagar Menú"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Avançat"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
-msgstr "Per sobra la barra de cerca"
+msgid "Above seek bar"
+msgstr "Per sobre de la barra de navegació"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
-msgstr "Per sota la barra de cerca"
+msgid "Below seek bar"
+msgstr "Per sota de la barra de navegació"
msgctxt "IDS_VIDEO_STREAM"
msgid "Video: %s"
@@ -2716,7 +2775,7 @@ msgstr "Cancel·la"
msgctxt "IDS_THUMB_THUMBNAILS"
msgid "Layout"
-msgstr "Nivell"
+msgstr "Disposició"
msgctxt "IDS_THUMB_PIXELS"
msgid "Pixels:"
@@ -2732,27 +2791,27 @@ msgstr "&Inhabilita tots els filtres"
msgctxt "IDS_ENABLE_AUDIO_FILTERS"
msgid "Enable all audio decoders"
-msgstr "Activar tots els descodificadors d'àudio"
+msgstr "Activa tots els descodificadors d'àudio"
msgctxt "IDS_DISABLE_AUDIO_FILTERS"
msgid "Disable all audio decoders"
-msgstr "Desactivar tots els descodificadors d'àudio"
+msgstr "Desactiva tots els descodificadors d'àudio"
msgctxt "IDS_ENABLE_VIDEO_FILTERS"
msgid "Enable all video decoders"
-msgstr "Activar tots els descodificadors de vídeo"
+msgstr "Activa tots els descodificadors de vídeo"
msgctxt "IDS_DISABLE_VIDEO_FILTERS"
msgid "Disable all video decoders"
-msgstr "Desactivar totos els descodificadors de vídeo"
+msgstr "Desactiva totos els descodificadors de vídeo"
msgctxt "IDS_STRETCH_TO_WINDOW"
msgid "Stretch To Window"
-msgstr "Extendre a la Pantalla"
+msgstr "Ajusta a la finestra"
msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
msgid "Touch Window From Inside"
-msgstr "Tocar la finestra des de dins"
+msgstr "Toca la finestra des de dins"
msgctxt "IDS_ZOOM1"
msgid "Zoom 1"
@@ -2764,7 +2823,7 @@ msgstr "Zoom 2"
msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
msgid "Touch Window From Outside"
-msgstr "Tocar la finestra des de fora"
+msgstr "Toca la finestra des de fora"
msgctxt "IDS_AUDIO_STREAM"
msgid "Audio: %s"
@@ -2772,7 +2831,7 @@ msgstr "Àudio: %s"
msgctxt "IDS_AG_REOPEN"
msgid "Reopen File"
-msgstr "Reobrir Arxiu"
+msgstr "Reobre el fitxer"
msgctxt "IDS_MFMT_AVI"
msgid "AVI"
@@ -2848,7 +2907,7 @@ msgstr "DirectShow Media"
msgctxt "IDS_MFMT_IVF"
msgid "Indeo Video Format"
-msgstr "Indeo Video Format"
+msgstr "Format de vídeo Indeo"
msgctxt "IDS_MFMT_OTHER"
msgid "Other"
@@ -2860,11 +2919,11 @@ msgstr "Shockwave Flash"
msgctxt "IDS_MFMT_OTHER_AUDIO"
msgid "Other Audio"
-msgstr "Altre Àudio"
+msgstr "Un altre àudio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2874,6 +2933,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Còdec d'àudio de l'Opus"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2888,7 +2967,7 @@ msgstr "AU/SND"
msgctxt "IDS_MFMT_CDA"
msgid "Audio CD track"
-msgstr "Audio CD track"
+msgstr "Pista d'àudio del CD"
msgctxt "IDS_MFMT_FLAC"
msgid "FLAC"
@@ -2896,7 +2975,7 @@ msgstr "FLAC"
msgctxt "IDS_MFMT_M4A"
msgid "MPEG-4 Audio"
-msgstr "MPEG-4 Audio"
+msgstr "Àudio MPEG-4"
msgctxt "IDS_MFMT_MIDI"
msgid "MIDI"
@@ -2904,7 +2983,7 @@ msgstr "MIDI"
msgctxt "IDS_MFMT_MKA"
msgid "Matroska audio"
-msgstr "Matroska audio"
+msgstr "Àudio Matroska"
msgctxt "IDS_MFMT_MP3"
msgid "MP3"
@@ -2912,7 +2991,7 @@ msgstr "MP3"
msgctxt "IDS_MFMT_MPA"
msgid "MPEG audio"
-msgstr "MPEG audio"
+msgstr "Àudio MPEG"
msgctxt "IDS_MFMT_MPC"
msgid "Musepack"
@@ -2938,33 +3017,17 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
-msgstr "Llista de Reproducció"
+msgstr "Llista de reproducció"
msgctxt "IDS_MFMT_BDPLS"
msgid "Blu-ray playlist"
-msgstr "Blu-ray playlist"
+msgstr "Llista de reproducció Blu-ray"
msgctxt "IDS_MFMT_RAR"
msgid "RAR Archive"
-msgstr "RAR Archive"
+msgstr "Arxiu RAR"
msgctxt "IDS_DVB_CHANNEL_FPS"
msgid "FPS"
@@ -2976,67 +3039,55 @@ msgstr "Resolució"
msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "Relació d'Aspecte"
-
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Usar mode WASAPI (rependre la reproducció)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Mutis amb l'avanç ràpid"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Controlador de so:"
+msgstr "Relació d’aspecte"
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
-msgstr "Vsync: Activat"
+msgstr "Sincronització Vertical: Activada"
msgctxt "IDS_OSD_RS_VSYNC_OFF"
msgid "VSync: Off"
-msgstr "Vsync: Desactivat"
+msgstr "Sincronització Vertical: Desactivada"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
msgid "Accurate VSync: On"
-msgstr "VSync Precisa: On"
+msgstr "Sincronització Vertical Precisa: Activada"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
msgid "Accurate VSync: Off"
-msgstr "VSync Precisa: Off"
+msgstr "Sincronització Vertical Precisa: Desactivada"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
msgid "Synchronize Video to Display: On"
-msgstr "Sincronitzar el vídeo a la pantalla: On"
+msgstr "Sincronitza el vídeo a la pantalla: Activat"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
msgid "Synchronize Video to Display: Off"
-msgstr "Sincronitzar el vídeo a la pantalla: Off"
+msgstr "Sincronitza el vídeo a la pantalla: Desactivat"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
msgid "Synchronize Display to Video: On"
-msgstr "Sincronitzar la pantalla al vídeo: On"
+msgstr "Sincronitza la pantalla al vídeo: Activada"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
msgid "Synchronize Display to Video: Off"
-msgstr "Sincronitzar la pantalla al vídeo: Off"
+msgstr "Sincronitza la pantalla al vídeo: Desactivat"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
msgid "Present at Nearest VSync: On"
-msgstr "Presentar al Vsync més proper: On"
+msgstr "Presenta a la Sincronització Vertical més propera: Activat"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
msgid "Present at Nearest VSync: Off"
-msgstr "Presentar al Vsync més proper: Off"
+msgstr "Presenta a la Sincronització Vertical més propera: Desactivat"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
msgid "Color Management: On"
-msgstr "Gestió de Colors: On"
+msgstr "Gestió de Colors: Activada"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
msgid "Color Management: Off"
-msgstr "Gestió de Colors: Off"
+msgstr "Gestió de Colors: Desactivada"
msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
msgid "Input Type: Auto-Detect"
@@ -3056,163 +3107,163 @@ msgstr "Tipus d'Entrada: SDTV PAL"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
msgid "Ambient Light: Bright (2.2 Gamma)"
-msgstr "Llum Ambiental: Brillant (2.2 Gamma)"
+msgstr "Llum ambiental: Brillant (2,2 gamma)"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
msgid "Ambient Light: Dim (2.35 Gamma)"
-msgstr "Llum Ambiental: Tènue (2.35 Gamma)"
+msgstr "Llum ambiental: Tènue (2,35 gamma)"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
msgid "Ambient Light: Dark (2.4 Gamma)"
-msgstr "Llum Ambiental: Fosca (2.4 Gamma)"
+msgstr "Llum ambiental: Fosca (2,4 gamma)"
msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
msgid "Rendering Intent: Perceptual"
-msgstr "Tipus de Renderització: Perceptiu"
+msgstr "Tipus de renderització: Perceptiva"
msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
msgid "Rendering Intent: Relative Colorimetric"
-msgstr "Tipus de Renderització: Colorimetria Relativa"
+msgstr "Tipus de renderització: Colorimetria relativa"
msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
msgid "Rendering Intent: Saturation"
-msgstr "Tipus de Renderització: Saturació"
+msgstr "Tipus de renderització: Saturació"
msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
msgid "Rendering Intent: Absolute Colorimetric"
-msgstr "Tipus de Renderització: Colorimetria Absoluta"
+msgstr "Tipus de renderització: Colorimetria absoluta"
msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
msgid "Output Range: %s"
-msgstr "Rang de Sortida: %s"
+msgstr "Rang de sortida: %s"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
msgid "Flush GPU before VSync: On"
-msgstr "Buidar GPU Abans de VSync: On"
+msgstr "Buida la GPU abans de la VSync: Activat"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
msgid "Flush GPU before VSync: Off"
-msgstr "Buidar GPU Abans de VSync: Off"
+msgstr "Buida la GPU abans de la VSync: Desactivat"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
msgid "Flush GPU after Present: On"
-msgstr "Buidar GPU després de Present: On"
+msgstr "Buida la GPU després de la presentació: Activat"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
msgid "Flush GPU after Present: Off"
-msgstr "Buidar GPU després de Present: Off"
+msgstr "Buida la GPU després de la presentació: Desactivat"
msgctxt "IDS_OSD_RS_WAIT_ON"
msgid "Wait for GPU Flush: On"
-msgstr "Esperar el buidatge: On"
+msgstr "Espera el buidat de la GPU: Activat"
msgctxt "IDS_OSD_RS_WAIT_OFF"
msgid "Wait for GPU Flush: Off"
-msgstr "Esperar el buidatge: Off"
+msgstr "Espera el buidat de la GPU: Desactivat"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
msgid "D3D Fullscreen: On"
-msgstr "Pantalla completa D3D: On"
+msgstr "Pantalla completa D3D: Activada"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
msgid "D3D Fullscreen: Off"
-msgstr "Pantalla completa D3D: Off"
+msgstr "Pantalla completa D3D: Desactivat"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
msgid "Disable desktop composition: On"
-msgstr "Desactivar composició de l'escriptori: On"
+msgstr "Desactiva la composició de l'escriptori: Activat"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
msgid "Disable desktop composition: Off"
-msgstr "Desactivar composició de l'escriptori: Off"
+msgstr "Desactiva la composició de l'escriptori: Desactivat"
msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
msgid "Alternative VSync: On"
-msgstr "VSync Alternativa: On"
+msgstr "Sincronització Vertical Alternativa: Activada"
msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
msgid "Alternative VSync: Off"
-msgstr "VSync Alternativa: Off"
+msgstr "Sincronització Vertical Alternativa: Desactivada"
msgctxt "IDS_OSD_RS_RESET_DEFAULT"
msgid "Renderer settings reset to default"
-msgstr "Renicialitzar ajustos predeterminats del renderitzador"
+msgstr "Restableix la configuració per defecte del renderitzador"
msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
msgid "Renderer settings reset to optimal"
-msgstr "Renicialitzar ajustos òptims del renderitzador"
+msgstr "Restableix les configuracions del renderitzador a òptimes "
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
msgid "D3D Fullscreen GUI Support: On"
-msgstr "Pantalla completa D3D amb GUI: On"
+msgstr "Pantalla completa D3D amb GUI: Activat"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
msgid "D3D Fullscreen GUI Support: Off"
-msgstr "Pantalla completa D3D amb GUI: Off"
+msgstr "Pantalla completa D3D amb GUI: Desactivat"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
msgid "10-bit RGB Output: On"
-msgstr "Sortida RGB 10-bits: On"
+msgstr "Sortida RGB 10-bits: Activat"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
msgid "10-bit RGB Output: Off"
-msgstr "Sortida RGB 10-bits: Off"
+msgstr "Sortida a RGB 10-bits: Desactivat"
msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
msgid "Force 10-bit RGB Input: On"
-msgstr "Forçar Entrada RGB 10-bits: On"
+msgstr "Força l'entrada a RGB 10-bits: Activat"
msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
msgid "Force 10-bit RGB Input: Off"
-msgstr "Forçar Entrada RGB 10-bits: Off"
+msgstr "Força l'Entrada a RGB 10-bits: Desactivat"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
msgid "Full Floating Point Processing: On"
-msgstr "Processament en coma flotant complet: On"
+msgstr "Processament en coma flotant complet: Activat"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
msgid "Full Floating Point Processing: Off"
-msgstr "Processament en coma flotant complet: Off"
+msgstr "Processament en coma flotant complet: Desactivat"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
msgid "Half Floating Point Processing: On"
-msgstr "Processament en coma flotant parcial: On"
+msgstr "Processament en coma flotant parcial: Activat"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
msgid "Half Floating Point Processing: Off"
-msgstr "Processament en coma flotant parcial: Off"
+msgstr "Processament en coma flotant parcial: Desactivat"
msgctxt "IDS_BRIGHTNESS_DEC"
msgid "Brightness decrease"
-msgstr "Disminuir la Brillantor"
+msgstr "Disminueix la brillantor"
msgctxt "IDS_CONTRAST_INC"
msgid "Contrast increase"
-msgstr "Augmentar el Contrast"
+msgstr "Augmenta el contrast"
msgctxt "IDS_CONTRAST_DEC"
msgid "Contrast decrease"
-msgstr "Disminuir el Contrast"
+msgstr "Disminueix el contrast"
msgctxt "IDS_HUE_INC"
msgid "Hue increase"
-msgstr "Augmentar Tint"
+msgstr "Augmenta el to"
msgctxt "IDS_HUE_DEC"
msgid "Hue decrease"
-msgstr "Disminuir Tint"
+msgstr "Disminueix el to"
msgctxt "IDS_SATURATION_INC"
msgid "Saturation increase"
-msgstr "Augmentar Saturació"
+msgstr "Augmenta la saturació"
msgctxt "IDS_SATURATION_DEC"
msgid "Saturation decrease"
-msgstr "Disminuir Saturació"
+msgstr "Disminueix la saturació"
msgctxt "IDS_RESET_COLOR"
msgid "Reset color settings"
-msgstr "Restablir la configuració de color"
+msgstr "Restableix la configuració del color"
msgctxt "IDS_USING_LATEST_STABLE"
msgid "\nYou are already using the latest stable version."
@@ -3224,15 +3275,15 @@ msgstr "La teva versió actual és v%s.\n\nL'útima versió estable és v%s."
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr "MPC-HC v%s ara està disponible. Ara fas servir v%s.\n\nVols visitar la pàgina web de MPC-HC per decarregar-lo?"
+msgstr "L'MPC-HC v%s està disponible. Ara fa servir la v%s.\n\nVoleu visitar la pàgina web de l'MPC-HC per decarregar-la?"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
-msgstr "No s'ha trovat server d'actualizacions.\n\nSi us plau, comprovi la seva connexió a Internet o provi-ho més tard."
+msgstr "No s'ha trobat el servidor d'actualitzacions.\n\nSi us plau, comprovi la seva connexió a Internet o intenti-ho més tard."
msgctxt "IDS_UPDATE_CLOSE"
msgid "&Close"
-msgstr "&Tancar"
+msgstr "&Tanca"
msgctxt "IDS_OSD_ZOOM"
msgid "Zoom: %.0lf%%"
@@ -3244,43 +3295,47 @@ msgstr "Zoom: Automàtic"
msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
msgid "Toggle custom channel mapping"
-msgstr "Commutar l'assignació de canals personalitzats"
+msgstr "Commuta l'assignació de canals personalitzats"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
msgid "Custom channel mapping: On"
-msgstr "Assignació de canals personalitzats: On"
+msgstr "Assignació de canals personalitzats: Activat"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
msgid "Custom channel mapping: Off"
-msgstr "Assignació de canals personalitzats: Off"
+msgstr "Assignació de canals personalitzats: Desactivat"
msgctxt "IDS_NORMALIZE"
msgid "Toggle normalization"
-msgstr "Commutar normalizació"
+msgstr "Commuta la normalizació"
msgctxt "IDS_OSD_NORMALIZE_ON"
msgid "Normalization: On"
-msgstr "Normalitzar"
+msgstr "Normalització: Activada"
msgctxt "IDS_OSD_NORMALIZE_OFF"
msgid "Normalization: Off"
-msgstr "Normalització: Activada"
+msgstr "Normalització: Desactivada"
msgctxt "IDS_REGAIN_VOLUME"
msgid "Toggle regain volume"
-msgstr "Commuta recuperació de volum"
+msgstr "Commuta la recuperació del volum"
msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
msgid "Regain volume: On"
-msgstr "Recuperar volum: On"
+msgstr "Recuperació del volum: Activat"
msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
-msgstr "Recuperar volum: Off"
+msgstr "Recuperació del volum: Desactivat"
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
-msgstr "KB"
+msgstr "kB"
msgctxt "IDS_SIZE_UNIT_M"
msgid "MB"
@@ -3292,7 +3347,7 @@ msgstr "GB"
msgctxt "IDS_SPEED_UNIT_K"
msgid "KB/s"
-msgstr "KB/s"
+msgstr "kB/s"
msgctxt "IDS_SPEED_UNIT_M"
msgid "MB/s"
@@ -3332,39 +3387,35 @@ msgstr "Error en analitzar el text entrat!"
msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
msgid "Error parsing the entered frame rate!"
-msgstr "Error en analitzar la velocitat de fotogrames entrat!"
+msgstr "Error en analitzar la velocitat de fotogrames introduïda!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
-msgstr "No es pot usar el desplaçament imatge a imatge, provi un altre renderitzador de vídeo."
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "No es pot utilitzar el desplaçament de fotograma a fotograma, provi amb un altre renderitzador de vídeo."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
-msgstr "Les funcions \"Desar Imatge\" i \"Desar Miniatures\" no funcionen amb el renderitzador de vídeo per defecte pel RealMedia.\nSelecioni un dels renders DirectX pel RealMedia en les opciones de sortida del MPC i torna a obrir l'arxiu."
+msgstr "Les funcions \"Desa la imatge\" i \"Desa les miniatures\" no funcionen amb el renderitzador de vídeo per defecte per al RealMedia.\nSeleccioni un dels renderitzador del DirectX per al RealMedia en les opcions de sortida de l'MPC-HC i torni a obrir el fitxer."
msgctxt "IDS_SCREENSHOT_ERROR_QT"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
-msgstr "Les funcions \"Desar Imatge\" i \"Desar Miniatures\" no funcionen amb el renderitzador de vídeo per defecte pel QuickTime.\nSelecioni un dels renders DirectX pel QuickTime en les opciones de sortida del MPC i torna a obrir l'arxiu."
+msgstr "Les funcions \"Desa la imatge\" i \"Desa les miniatures\" no funcionen amb el renderitzador de vídeo per defecte per al QuickTime.\nSeleccioni un dels renderitzadors del DirectX per al QuickTime a les opcions de sortida de l'MPC-HC i torni a obrir el fitxer."
msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
-msgstr "Les funcions \"Desar Imatge\" i \"Desar Miniatures\" no funcionen amb els arxius Shockwave."
+msgstr "Les funcions \"Desa la imatge\" i \"Desa les miniatures\" no funcionen amb els fitxers Shockwave."
msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgstr "Les funcions \"Desar Imatge\" i \"Desar Miniatures\" no funcionen amb el renderitzador de vídeo Overlay Mixer.\nCanvia el renderitzador de vídeo en les opciones de sortida del MPC i torna a obrir l'arxiu."
-
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "No es pot connectar a la base de dades dels subtítols en línia."
+msgstr "Les funcions \"Desa la imatge\" i \"Desa les miniatures\" no funcionen amb el renderitzador de vídeo Overlay Mixer.\nCanvia el renderitzador de vídeo en les opcions de sortida de l'MPC i torni a obrir el fitxer."
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
-msgstr "Vols activar l'editor d'EDL?"
+msgstr "Voleu activar l'editor d'EDL?"
msgctxt "IDS_CAPTURE_ERROR"
msgid "Capture Error"
-msgstr "Error de captació"
+msgstr "Error de captura"
msgctxt "IDS_CAPTURE_ERROR_VIDEO"
msgid "video"
@@ -3380,15 +3431,15 @@ msgstr "No es pot afegir el filtre %s de memòria intermèdia al graph."
msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
msgid "Can't connect the %s buffer filter to the graph."
-msgstr "No es pot conectar el filtre de memòria intermèdia %s al graph."
+msgstr "No es pot connectar el filtre de la memòria intermèdia %s al graph."
msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
msgid "Can't add the %s encoder filter to the graph."
-msgstr "No es pot afegir el filtre decodificador %s al graph."
+msgstr "No es pot afegir el filtre del codificador %s al diagrama de filtres."
msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
msgid "Can't connect the %s encoder filter to the graph."
-msgstr "No es pot conectar el filtre del decodificador %s al graph."
+msgstr "No es pot connectar el filtre del codificador %s al diagrama de filtres."
msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
msgid "Can't set the compression format on the %s encoder filter."
@@ -3396,27 +3447,27 @@ msgstr "No es pot establir el format de compressió en el filtre del codificador
msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
msgid "Can't connect the %s stream to the multiplexer filter."
-msgstr "No es pot conectar el filtre multiplexador de la cadena %s."
+msgstr "No es pot connectar la transmissió %s al filtre multiplexor."
msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
msgid "No video capture pin was found."
-msgstr "No s'ha trovat el pin de captació del vídeo."
+msgstr "No s'ha trobat l'etapa de captura de vídeo."
msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
msgid "No audio capture pin was found."
-msgstr "No s'ha trovat el pin de captació d'audio."
+msgstr "No s'ha trobat l'etapa de captura de so."
msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
msgid "Error initializing the output file."
-msgstr "Error al inicialitzar l'arxiu de sortida."
+msgstr "Error al inicialitzar el fitxer de sortida."
msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
msgid "Error initializing the audio output file."
-msgstr "Error al inicialitzar l'arxiu de sortida de l'audio."
+msgstr "Error al inicialitzarel fitxer de sortida de l'audio."
msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
-msgstr "El format de temps correcta és [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+msgstr "El format de temps correcte és [-]hh:mm:ss.ms (per exemple, 01:23:45.678)."
msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
msgid "This type is already in the list!"
@@ -3424,35 +3475,43 @@ msgstr "Aquest tipus ja està a la llista!"
msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
-msgstr "Cal aplicar la nova configuració abans de provar-la."
+msgstr "Cal que apliqueu la nova configuració abans de provar-la."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
-msgstr "Després de la reproducció: Sortir"
+msgstr "Després de la reproducció: Surt"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
-msgstr "Després de la reproducció: En Espera"
+msgstr "Després de la reproducció: Atura temporalment"
msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
msgid "After Playback: Hibernate"
-msgstr "Després de la reproducció: Hibernació"
+msgstr "Després de la reproducció: Hiberna"
msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
msgid "After Playback: Shutdown"
-msgstr "Després de la reproducció: Apagar l'equip"
+msgstr "Després de la reproducció: Tanca l'ordinador"
msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
msgid "After Playback: Log Off"
-msgstr "Després de la reproducció: Finalitzar sessió"
+msgstr "Després de la reproducció: Tanca la sessió"
msgctxt "IDS_AFTERPLAYBACK_LOCK"
msgid "After Playback: Lock"
-msgstr "Després de la reproducció: Bloquejar"
+msgstr "Després de la reproducció: Bloca"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr "Després de reproducció: Apagar el monitor"
+msgstr "Després de reproducció: Apaga el monitor"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Després de la reproducció: Reprodueix el fitxer següent de la carperta"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Després de la reproducció: No facis res"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
@@ -3464,7 +3523,7 @@ msgstr "Contrast: %s"
msgctxt "IDS_OSD_HUE"
msgid "Hue: %s°"
-msgstr "Tint: %s°"
+msgstr "To: %s°"
msgctxt "IDS_OSD_SATURATION"
msgid "Saturation: %s"
@@ -3472,31 +3531,31 @@ msgstr "Saturació: %s"
msgctxt "IDS_OSD_RESET_COLOR"
msgid "Color settings restored"
-msgstr "Configuarció de color restaurat"
+msgstr "S’han restaurat els paràmetres de color"
msgctxt "IDS_OSD_NO_COLORCONTROL"
msgid "Color control is not supported"
-msgstr "Control de color no està suportat"
+msgstr "El control de color no és compatible"
msgctxt "IDS_BRIGHTNESS_INC"
msgid "Brightness increase"
-msgstr "Augmentar la Brillantor"
+msgstr "Augmenta la brillantor"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
-msgstr "Introdueixi els seves idiomes preferits aquí.\nPer exemple, escriu: \"eng cat jap\""
+msgstr "Introdueixi els seus idiomes preferits aquí.\nPer exemple, escrigui: \"cat eng jpn\""
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
-msgstr "Els splitters externs poden tenir les seves pròpies opcions de preferències d'idioma per tant el comportament predeterminat MPC-HC no és per canviar la seva elecció inicial.\nActiveu aquesta opció si voleu MPC-HC controli els splitters externs."
+msgstr "Els divisors o \"splitters\" externs poden tenir les seves pròpies opcions de preferència d'idioma, de manera que el comportament predeterminat de de l'MPC-HC és no canviar la seva configuració inicial.\nActiveu aquesta opció si voleu que de l'MPC-HC controli els splitters externs."
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
-msgstr "Listes de Reproducció &Blu-Ray"
+msgstr "Llistes de reproducció &Blu-Ray"
msgctxt "IDS_NAVIGATE_PLAYLIST"
msgid "&Playlist"
-msgstr "&Llista de Reproducció"
+msgstr "&Llista de reproducció"
msgctxt "IDS_NAVIGATE_CHAPTERS"
msgid "&Chapters"
@@ -3512,25 +3571,409 @@ msgstr "&Canals"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr "Si \"últim fotograma clau\" està seleccionat, anar al primer fotograma clau anterior al actual punt de cerca.\nSi \"fotograma clau més proper\" està seleccionat, anar al primer fotograma clau abans o després del punt de cerca depenent de quin sigui el més proper."
+msgstr "Si \"últim fotograma clau\" està seleccionat, anar al primer fotograma clau anterior al actual punt de cerca.\nSi \"fotograma clau veí\" està seleccionat, anar al primer fotograma clau abans o després del punt de cerca depenent de quin sigui el més proper."
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr "Associar amb tots els formats"
+msgstr "Associa amb tots els formats"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr "Associat només amb formats de vídeo"
+msgstr "Associa només amb formats de vídeo"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr "Associatnomés amb formats d'àudio"
+msgstr "Associa només amb formats d’àudio"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr "Netejar totes les associacions"
+msgstr "Esborra totes les associacions"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
+msgstr "Paràmetres"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Proveïdor"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Problemes d'audició (CC)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Baixades"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Puntuació"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Ha fallat la cerca de subtítols en línia."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Cerca cancel·lada de subtítols en línia."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Cerca de subtítols en línia completada, %d fitxer/s de subtítols trobat/s."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Cerca de subtítols en línia completada, no se n'ha trobat cap."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Descarrega els subtítols"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "S'estan buscant subtítols en línia, si us plau, esperi..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "S'està cancel·lant la cerca de subtítols en línia..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Nom d'usuari"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Estat"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Preparat..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "No implementat."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "S'està penjant..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "S'han penjat els subtítols amb èxit."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Ha fallat la pujada dels subtítols."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Pujada de subtítols cancel·lada."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Els subtítols ja existeixen."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "S'estan penjant els subtítols, si us plau, esperi..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Pujada finalitzada."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Pujada cancel·lada."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Ha fallat la pujada."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Baixa i obre’ls"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
msgstr "Configuració"
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Restableix"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Amunt"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Avall"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Obre l'URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Idiomes"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "ERROR: No s'ha pogut establir connexió a Internet."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Introdueix les credencials del lloc web"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Introdueix les seves credencials per connectar-se a:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Relació d'aspecte: Adopta píxels quadrats (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Descarregat [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Penja els subtítols"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Esteu segur que voleu penjar el fitxer de subtítols \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "S'estan buscant idiomes compatibles..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "No s'ha pogut guardar a \"%S\" amb el nom d'usuari \"%S\".\n\nSi us plau, introdueixi el nom d'usuari i contrasenya correctes o restableixi les credencials per iniciar sessió com a usuari anònim."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "La cerca automàtica i la descàrrega es desactivaran per a tots els mitjans en que la seva ruta tingui qualsevol dels patrons introduïts aquí.\nPer exemple, escrigui: \"pirvate dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"ruta\"\tEl fitxer principal o carpeta a ser carregat\n\t\t(es permeten comodins, \"-\" denota l'entrada estàndard)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"nomdeldoblatge\"\tCarrega un fitxer d'àudio addicional"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"fitxer\"\tCarrega un fitxer d'àudio addicional (doblatge) desplaçat XXms\n\t\t(si el fitxer conté \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tInicia el renderitzat en mode D3D en pantalla completa"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"nomdelsubtítol\"\tCarrega un fitxer de subtítols addicional"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"nomdelfiltre\"\tCarrega els filtres DirectShow desde una llibreria d'enllaç dinàmic -dll- (comodins permesos)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tS'executa en mode DVD, \"ruta\" indica la carpeta del DVD (opcional)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tInicia la reproducció al títol T, capítol C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tInicia la reproducció en el títol T, posició P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tCarrega totes les pistes d'un CD d'àudio o (S)VCD,\n\t\t\"ruta\" indica la ruta a la unitat (opcional)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tObre el dispositiu de vídeo per defecte"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tObre el fitxer, no inicia la reproducció automàticament."
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tComença la reproducció del fitxer tan aviat s'obre el reproductor"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tTanca el reproductor després de la reproducció (només funciona quan s'utilitza /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tTanca el sistema operatiu un cop acabada la reproducció"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tAtura temporalment el sistema operatiu un cop acabada la reproducció"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tHiberna el sistema operatiu un cop acabada la reproducció"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tTanca la sessió un cop acabada la reproducció"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tBloca l'ordinador un cop acabada la reproducció"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tApaga el monitor un cop acabada la reproducció"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tObre el fitxer següent de la carpeta un cop acabada la reproducció"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tInicia el reproductor en pantalla completa"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tInicia el reproductor en mode minimitzat"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tUtilitza una nova instància del reproductor"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tAfegeix una \"ruta\" a la llista de reproducció, es pot combinar amb /open i /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tReprodueix en un ordre aleatori la llista de reproducció"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tCrea associacions de fitxer per a fitxers de vídeo"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tCrea associacions de fitxer per a fitxers d'àudio"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tCrea associacions de fitxers per a fitxers de llistes de reproducció"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tCrea associacions de fitxers per a tots els tipus fitxers suportats"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tElimina totes les associacions de fitxer"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tComença la reproducció en \"ms\" (= milisegons)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tInicia la reproducció en la posició hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tEstableix una mida de finestra fixada"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tInicia el reproductor al monitor N, on N comença des de 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tS'inicia fent servir el renderitzador d'àudio N, en que N comença des de 1 (miri la configuració de \"Sortida\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tS'inicia fent servir el preajustament \"Pr\" de shader (ombrejador)"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\tEspecifica el nom del mode de reenquadrament (pan&scan) a utilitzar"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tTorna a associar les icones de format"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tObre l'MPC-HC en segon pla"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tInicia la interfície web en el port especificat"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tMostra la informació de depuració sobreimpressionada (OSD)"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDesactiva l'informe d'errors"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tUtilitza l'MPC-HC en mode eslcau"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tEstableix l'índex que indica la GPU a utilitzar per a la descodificació per hardware.\n\t\tNomés diponible per als modes CUVID i DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tRestableix la configuració per defecte"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tMostra l'ajuda sobre els paràmetres de les comandes"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Valor llindar de puntuació per a subtítols que es descarregarant automàticament.\nEls valors més alts idiquen que es carregaran subtítols amb una coincidència més precisa, els valors més baixos podrien resultar dolents per tal de carregar els subtítols correctes, no hi ha un valor perfecte. Seleccioni aquell que millor li funcioni."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Retard de l'àudio (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Mida en píxels de la barra d'eines per defecte."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Utilitza la barra antiga d'eines en lloc de la nova vectoritzada."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Copia l'URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.cs.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.cs.dialogs.po
index b840fac6f..929c0bcc3 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.cs.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.cs.dialogs.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# khagaroth, 2013-2014
+# khagaroth, 2013-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-21 14:40+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-01-28 11:00+0000\n"
"Last-Translator: khagaroth\n"
-"Language-Team: Czech (http://www.transifex.com/projects/p/mpc-hc/language/cs/)\n"
+"Language-Team: Czech (http://www.transifex.com/mpc-hc/mpc-hc/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -109,16 +109,16 @@ msgid "Enable custom channel mapping"
msgstr "Povolit vlastní přiřazení zvukových kanálů"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Nastavení reproduktorů pro "
+msgid "Speaker configuration for"
+msgstr "Nastavení reproduktorů pro"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "vstupní kanály:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Pokud při kliknutí myší podržíte Shift, změny se projeví okamžitě "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Pokud při kliknutí myší podržíte Shift, změny se projeví okamžitě"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -189,12 +189,12 @@ msgid "About"
msgstr "O programu"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014, viz soubor Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017, viz soubor Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
-msgstr "Tento program je freeware vydaný pod\nGNU General Public License."
+msgstr "Tento program je freeware vydaný pod GNU General Public License."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
@@ -338,7 +338,7 @@ msgstr "Pamatovat si poslední velikost okna"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
msgid "Remember last Pan-n-Scan Zoom"
-msgstr "Papamatovat si zvětšení Pan-n-Scan"
+msgstr "Pamatovat si zvětšení Pan-n-Scan"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
@@ -421,12 +421,16 @@ msgid "time(s)"
msgstr "x"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Režim opakování:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Po přehrání"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Výstup"
+msgid "Default zoom"
+msgstr "Výchozí velikost"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -472,10 +476,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Automaticky načíst zvukové stopy"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Použít vestavěný zobrazovač titulků"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Ovládání"
@@ -569,8 +569,8 @@ msgid "Warning"
msgstr "Varování"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Pokud změníte polohu titulků a zapnete full-screen antialiasing, titulky určitě nebudou vypadat lépe, zato však zaberou veškerý výkon vašeho procesoru."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Pokud změníte polohu titulků a zapnete fullscreen antialiasing, titulky určitě nebudou vypadat lépe, zato však zaberou veškerý výkon vašeho procesoru."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -654,7 +654,7 @@ msgstr "Audio CD"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "Jump distances (small, medium, large in ms)"
-msgstr "Velikosti skoků [malý | střední | velký] (ms)"
+msgstr "Velikosti skoků [malý | střední | velký] (ms)"
msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
msgid "Default"
@@ -676,16 +676,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Zabránit minimalizaci z Fullscreen při běhu na nevýchozím monitoru"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Aktivovat funkce pro panel úloh Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Použít pokročilé funkce pro panel úloh"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Pokud je v playlistu jen jen jedna položka, otevřít pomocí příkazů 'Skočit zpět/vpřed' předchozí/následující soubor v adresáři"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Pokud je v seznamu stop jen jen jedna položka, otevřít pomocí příkazů 'Skočit zpět/vpřed' předchozí/následující soubor v adresáři"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Zobrazit v popisku čas:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1122,11 +1122,11 @@ msgstr "QuickTime video"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Audio Renderer"
-msgstr "DirectShow audio"
+msgstr "Syntezátor zvuku"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Možnosti VMR-7/VMR-9 (renderless) a EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Možnosti VMR-9 (renderless) a EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1169,8 +1169,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Titulky *"
+msgid "Subtitles"
+msgstr "Titulky"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1185,8 +1185,12 @@ msgid "Rotation"
msgstr "Natáčení obr."
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Externí filtry (např. VSFilter) mohou titulky zobrazovat na všech rendererech."
+msgid "Subtitle Renderer"
+msgstr "Zobrazovač titulků"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Použít mezipaměť zkompilovaných shaderů"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1204,6 +1208,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Povolit pouze lokální přístup"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Povolit náhled"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Vkládat do stránek ladicí informace"
@@ -1229,17 +1237,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Obsluha CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Dostupné titulky"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Stáhnout a otevřít"
+msgid "Download subtitles"
+msgstr "Stáhnout titulky"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Nahradit aktuálně načtené titulky"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Stáhnout"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Aktualizovat"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Zrušit"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Možnosti"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Odeslat titulky"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Odeslat"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Zrušit"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Možnosti"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Uložit jako..."
@@ -1277,8 +1313,8 @@ msgid "Enable automatic update check"
msgstr "Povolit automatickou kontrolu aktualizací"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Odstup mezi kontrolami:"
+msgid "Check every:"
+msgstr "Kontrolovat každých:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1541,16 +1577,28 @@ msgid "Reset"
msgstr "Výchozí"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Online databáze"
+msgid "Online search, download and upload subtitles"
+msgstr "Hledání, stahování a odesílání titulků online"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Automaticky vyhledat a stáhnout titulky pokud nejsou nalezeny lokální"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Upřednostňovat titulky pro neslyšící (pokud jsou označeny poskytovatelem titulků)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignorovat soubory jejichž název obsahuje některé z následujících slov:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Adresa online databáze titulků:"
+msgid "Languages in order of preference:"
+msgstr "Jazyky v pořadí podle preference:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Otestovat"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Automaticky odeslat aktivní titulky po skončení přehrávání videa"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1652,6 +1700,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Výchozí"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Zařízení"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Výhradní režim"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Povolit bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Možnosti"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Povolit stereo crossfeed (pro sluchátka)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Mez:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Úroveň:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Poznámka"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Pro minimalizování zkreslení zvuku je doporučeno při přehrávání hlasitého ztrátově kódovaného obsahu nastavit hlasitost nižší než 85%."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Kvalita JPEG:"
@@ -1664,3 +1756,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Oznámení chyby"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Omlouváme se, zdá se, že MPC-HC právě selhal. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Pomozte nám diagnostikovat a opravit tento problém zasláním hlášení o chybě."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Doplňující informace"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "E-mail:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Zadání e-mailové adresy je nepovinné a adresa bude použita pouze pokud vás bude vývojář potřebovat kontaktovat z důvodu doplnění nebo upřesnění poskytnutých informací."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Popis problému (použijte angličtinu):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Restartovat MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Ukončit MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.cs.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.cs.menus.po
index ea37c9bc2..f61bbfd9d 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.cs.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.cs.menus.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# kasper93, 2013
-# khagaroth, 2013-2014
+# khagaroth, 2013-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-14 08:42+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2017-01-28 11:52+0000\n"
"Last-Translator: khagaroth\n"
-"Language-Team: Czech (http://www.transifex.com/projects/p/mpc-hc/language/cs/)\n"
+"Language-Team: Czech (http://www.transifex.com/mpc-hc/mpc-hc/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -27,35 +27,35 @@ msgstr "&Rychle otevřít soubor..."
msgctxt "ID_FILE_OPENMEDIA"
msgid "&Open File..."
-msgstr "&Otevřít soubor..."
+msgstr "Otevřít &soubor..."
msgctxt "ID_FILE_OPENDVDBD"
msgid "Open &DVD/BD..."
-msgstr "Otevřít &DVD/BD..."
+msgstr "Otevřít DVD/&BD..."
msgctxt "ID_FILE_OPENDEVICE"
msgid "Open De&vice..."
-msgstr "Ote&vřít zařízení..."
+msgstr "Otevřít &zařízení..."
msgctxt "ID_FILE_OPENDIRECTORY"
msgid "Open Dir&ectory..."
-msgstr "Otevřít adresář..."
+msgstr "Otevřít &adresář..."
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
-msgstr "Otevřít disk"
+msgstr "Otevřít &disk"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
-msgstr "Nedávno otevřené"
+msgstr "&Nedávno otevřené"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
-msgstr "&Zavřít"
+msgstr "Zavří&t"
msgctxt "ID_FILE_SAVE_COPY"
msgid "&Save a Copy..."
-msgstr "&Uložit kopii..."
+msgstr "Uložit &kopii..."
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
@@ -63,31 +63,27 @@ msgstr "Uložit &obrázek..."
msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
-msgstr "Uložit miniatury..."
-
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Načíst &titulky..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "U&ložit titulky..."
+msgstr "Uložit &miniatury..."
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Databáze titulků"
+msgid "S&ubtitles"
+msgstr "Tit&ulky"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Hledat..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Načíst titulky..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Odeslat..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "&Uložit titulky..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Stáhnout..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Stáhnout titulky..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Odeslat titulky..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -95,7 +91,7 @@ msgstr "&Vlastnosti"
msgctxt "ID_FILE_EXIT"
msgid "E&xit"
-msgstr "&Konec"
+msgstr "Kone&c"
msgctxt "POPUP"
msgid "&View"
@@ -195,31 +191,35 @@ msgstr "Nastavení rendereru"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
-msgstr "Test &trhání"
+msgstr "&Test trhání"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "Zobrazit statistiku"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Statistika zobrazení"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Zobrazit &aktuální čas"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Zbývající čas"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Zobrazit &název souboru"
msgctxt "POPUP"
msgid "&Output Range"
-msgstr "Rozsah výstupu"
+msgstr "&Rozsah výstupu"
msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
msgid "&0 - 255"
-msgstr "0 - 255"
+msgstr "&0 - 255"
msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
msgid "&16 - 235"
-msgstr "16 - 235"
+msgstr "&16 - 235"
msgctxt "POPUP"
msgid "&Presentation"
-msgstr "Zobrazení"
+msgstr "&Zobrazení"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
@@ -255,7 +255,7 @@ msgstr "Povolit opravu času snímků"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "Správa barev"
+msgstr "&Správa barev"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
@@ -319,55 +319,55 @@ msgstr "Absolutní kolorimetrické"
msgctxt "POPUP"
msgid "&VSync"
-msgstr "VSync"
+msgstr "&VSync"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "VSync"
+msgstr "&VSync"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "Přesný VSync"
+msgstr "&Přesný VSync"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "Alternativní VSync"
+msgstr "&Alternativní VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "&Snížit vsync offset"
+msgstr "&Snížit VSync offset"
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "&Zvýšit vsync offset"
+msgstr "&Zvýšit VSync offset"
msgctxt "POPUP"
msgid "&GPU Control"
-msgstr "Ovládání GPU"
+msgstr "Ovládání &GPU"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "Vyprázdnit GPU před VSync"
+msgstr "Vyprázdnit GPU před &VSync"
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
-msgstr "Vyprázdnit GPU po zobrazení"
+msgstr "Vyprázdnit GPU po &zobrazení"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "Čekat na vyprázdnění"
+msgstr "Čekat &na vyprázdnění"
msgctxt "POPUP"
msgid "R&eset"
-msgstr "Obnova nastavení"
+msgstr "&Obnova nastavení"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "Obnovit výchozí nastavení rendereru"
+msgstr "Obnovit &výchozí nastavení rendereru"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "Obnovit optimální nastavení rendereru"
+msgstr "Obnovit &optimální nastavení rendereru"
msgctxt "POPUP"
msgid "Video &Frame"
@@ -405,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Dotknout se okna zvenčí"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "Zachovat poměr stran"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Vynutit poměr stran"
+msgid "&Aspect Ratio"
+msgstr "Poměr stran"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Výchozí"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Výchozí (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -431,11 +427,15 @@ msgstr "16:9"
msgctxt "ID_ASPECTRATIO_235_100"
msgid "&235:100"
-msgstr "235:100"
+msgstr "&235:100"
msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
-msgstr "185:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Předpokládat čtvercové pixely (SAR)"
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
@@ -527,12 +527,28 @@ msgstr "&Přehrát/Pozastavit"
msgctxt "ID_PLAY_STOP"
msgid "&Stop"
-msgstr "&Zastavit"
+msgstr "Za&stavit"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "&Krokovat po snímcích"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Opakovat"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "D&onekonečna"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Soubor"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "Seznam sto&p"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "Zpo&malit přehrávání"
@@ -554,16 +570,16 @@ msgid "S&haders"
msgstr "Shadery"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "Zvuk"
+msgid "&Audio Track"
+msgstr "&Zvuková stopa"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Titulky"
+msgid "Su&btitle Track"
+msgstr "&Titulková stopa"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "&Video"
+msgid "Vide&o Track"
+msgstr "&Video stopa"
msgctxt "POPUP"
msgid "&Volume"
@@ -585,9 +601,21 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "P&o přehrání"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Žádná &akce"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Přehrát &další soubor v adresáři"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Vypnout &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
-msgstr "Zavřít přehrávač"
+msgstr "&Zavřít přehrávač"
msgctxt "ID_AFTERPLAYBACK_STANDBY"
msgid "&Stand By"
@@ -609,10 +637,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Uzamknout počítač"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Vypnout &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "Přejí&t"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.cs.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.cs.strings.po
index 7d3913e87..db155a21b 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.cs.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.cs.strings.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Jan Košata <kosata6@seznam.cz>, 2014
-# khagaroth, 2013-2014
+# khagaroth, 2013-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-09-30 16:11+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 17:29+0000\n"
"Last-Translator: khagaroth\n"
-"Language-Team: Czech (http://www.transifex.com/projects/p/mpc-hc/language/cs/)\n"
+"Language-Team: Czech (http://www.transifex.com/mpc-hc/mpc-hc/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -61,10 +61,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Vlastnosti"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Soubor"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Výchozí styl"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Seznam stop"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Soubory"
@@ -117,6 +125,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Pokud není určen cíl vykreslování, budou SSA/ASS titulky vykreslovány relativně k oblasti videa, zatímco ostatní formáty titulků budou vykreslovány relativně k oknu."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Režim opakování: Seznam stop"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Režim opakování: Soubor"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Opakovat donekonečna: Aktivní"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Opakovat donekonečna: Neaktivní"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Opakovat donekonečna"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Nikdy (nejrychlejší)"
@@ -326,12 +354,12 @@ msgid "On/Off"
msgstr "Zap/Vyp"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Od fps"
+msgid "From (FPS)"
+msgstr "Od (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Do fps"
+msgid "To (FPS)"
+msgstr "Do (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -465,6 +493,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Přehrávání::Shadery"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Zdroje"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Ostatní"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Přehrávání::Záznam"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Přehrávání::Sync renderer"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Přehrávání::Na celou obrazovku"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Interní filtry::Audio Renderer"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Audio switcher"
@@ -489,18 +545,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (windowed)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (windowed)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderless)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (renderless)"
@@ -553,34 +601,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Přehrávač::WWW rozhraní"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Titulky::Databáze"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Zdroje"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Ostatní"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Přehrávání::Záznam"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Přehrávání::Sync renderer"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Přehrávání::Na celou obrazovku"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Podrobnosti"
@@ -601,17 +621,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Vždy vykresluje v overlay. Obecně jsou povoleny pouze formáty YUV, ale jsou zobrazovány bez jakéhokoliv převodu barev do RGB. Toto je nejrychlejší způsob vykreslování, a jediný, u kterého si můžete být jisti funkčností fullscreen video mirroringu do tv-out."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Výchozí renderer Windows XP. Velice stabilní a jen o málo pomalejší než Overlay mixer. Používá DirectDraw a pokud je k dispozici, tak i overlay."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Dostupný pouze s nainstalovaným DirectX 9. Má stejné vlastnosti jako VMR-7 (windowed), ale nikdy nepoužije overlay a je proto trochu pomalejší než VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Stejný jako VMR-7 (windowed), ale s titulkovým pluginem MPC-HC pro Allocator-Presenter. Overlay video mirroring NEBUDE fungovat. Doporučeno ve vlastnostech zobrazení nastavit 32bitovou barevnou hloubku."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Dostupný pouze s nainstalovaným DirectX 9. Stabilní, ale nikdy nepoužije overlay a je proto trochu pomalejší než Overlay mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -622,7 +634,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Stejný jako VMR-9 (renderless), ale pro změnu velikosti používá dvouprůchodový bikubický filtr."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Připojí se k jakémukoliv typu videa a začne všechny vstupní vzorky zahazovat. Použijte ho pokud nepotřebujete video zobrazit a chcete ušetřit výkon procesoru."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -649,10 +661,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Vlastní renderer Real. Skripty SMIL budou funkční, ale interakce pravděpodobně ne. Používá DirectDraw a pokud může, použije overlay."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Výstup Real enginu vykreslovaný pomocí Allocator-Presenteru VMR-7 (renderless)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Výstup Real enginu vykreslovaný pomocí Allocator-Presenteru VMR-9 (renderless)."
@@ -661,10 +669,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Vlastní renderer QuickTime. Pomalý pokud dojde ke změně velikosti oblasti videa nebo je video částečně překryto jiným oknem. Pokud není k dispozici overlay, většinou použije GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Výstup QuickTime enginu vykreslovaný pomocí Allocator-Presenteru VMR-7 (renderless)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Výstup QuickTime enginu vykreslovaný pomocí Allocator-Presenteru VMR-9 (renderless)."
@@ -673,22 +677,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Plocha videa bude vymezena jako běžná mimoobrazovková plocha."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Renderer není funkční, nepoužívejte ho."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - nahlášení chyby"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "V programu MPC-HC došlo k chybě, vámi použitá verze byla bohužel zkompilována bez informací potřebných pro ladění.\nPokud chcete chybu nahlásit, zkuste napřed použít oficiální verzi programu.\n\nChcete otevřít stránku pro stažení programu?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Běžný mimoobrazovkový povrch"
@@ -741,9 +733,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (nekomprimované)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Vestavěný syntezátor zvuku"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -757,9 +749,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Pro zobrazení vložených zdrojů v prohlížeči musíte povolit webové rozhraní.\n\nTlačítko \"Uložit jako\" použijte pokud chcete informace pouze uložit."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Stáhnout titulky"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Stáhnout titulky..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Odeslat titulky..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -790,7 +786,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Nepodařilo se nalézt všechny díly archivu"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Plocha videa bude vymezena jako textura ale pro její kopírování a roztahování do přípravné vyrovnávací paměti budou stále používány 2D funkce. Vyžaduje video kartu schopnou alokovat 32bitové, RGBA textury s rozměry stran neodpovídajícími druhým mocninám a o minimálně stejné velikosti jako má video."
msgctxt "IDC_TEXTURESURF3D"
@@ -817,6 +813,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Omezí trhání potlačením výchozího zabudovaného VSync D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Ladění tuneru"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Titulky nejsou načteny nebo je použit nepodporovaný renderer."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Pro urychlení načítání uloží zkompilované shadery v adresáři AppData."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Pokud chcete otevřít všechny soubory VTS_xx_x.vob jako jeden soubor, otevřete VTS_xx_0.ifo"
@@ -889,7 +897,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Ztlumit"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Zrušit ztlumení"
@@ -954,11 +962,11 @@ msgid "&Organize Favorites..."
msgstr "&Uspořádat oblíbené..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Náhodně"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Otevřít nadřazený adresář"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1042,7 +1050,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Zvětšit na Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Skrýt v režimu na celou obrazovku"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1230,7 +1238,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Přidat nadřazený adresář"
msgctxt "IDS_HW_INDICATOR"
@@ -1337,6 +1345,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<není nastaveno>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Sledovat"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Nahoru"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Dolů"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Seřadit podle LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Odebrat vše"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Opravdu chcete ze seznamu odebrat všechny kanály?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "K dispozici nejsou žádné informace"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Čekejte, probíhá analýza..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "PS %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Povolit záznam protokolu do souboru (vyžaduje restart)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Zbývající čas"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Vysoká přesnost"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Po přehrání: Na začátek aktuálního souboru"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Po přehrání: Zavřít"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "Během inicializace došlo k chybě. S vaší pomocí by se nám mohlo podařit tuto chybu opravit.\n\nChcete tuto chybu nahlásit?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Pokud se zvuk předchází, zadejte kladnou hodnotu, pokud se zpožďuje, tak zápornou."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Náhled je zakázán. Můžete ho povolit v možnostech MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Tato volba umožňuje náhled souborů ze vzdáleného umístění. Použijte ji pouze na řádně zabezpečené privátní síti.\n\nOpravdu chcete tuto volbu povolit?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Vestavěný zobrazovač titulků"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Otevřít zařízení"
@@ -1357,13 +1441,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Obrázek úspěšně uložen"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Načíst titulky"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Načíst titulky..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Uložit titulky"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Uložit titulky..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,11 +1470,11 @@ msgid "Stop"
msgstr "Zastavit"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "O snímek vpřed"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "O snímek zpět"
msgctxt "IDS_AG_GO_TO"
@@ -1490,8 +1574,8 @@ msgid "Thumbnails saved successfully"
msgstr "Miniatury úspěšně uloženy"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Video s&topa"
+msgid "Vide&o Track"
+msgstr "&Video stopa"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1538,11 +1622,11 @@ msgid "Reset Rate"
msgstr "Výchozí rychlost"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Posun zvuku +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Posun zvuku -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1613,14 +1697,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Posunout titulky doprava"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Zobrazit statistiku"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Přejít na začátek"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Zobrazit název souboru"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Přehrát DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Přehrát BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Zobrazit statistiku rendereru"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Obnovit statistiku rendereru"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Titulky::Ostatní"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Skrýt okraje"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Pouze rámeček s videem"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Zobrazit titulek a nabídky"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Skrýt nabídku"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Pokročilé"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Minimální zobrazení"
@@ -1686,8 +1810,8 @@ msgid "PnS Dec Height"
msgstr "P&S zmenšit výšku"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Probíhá stahování titulků, prosím čekejte."
+msgid "Downloading [%s] \"%s\""
+msgstr "Stahování [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1698,8 +1822,8 @@ msgid "No subtitles found."
msgstr "Titulky nenalezeny."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " k dispozici je %d titulků."
+msgid "%d subtitle(s) available."
+msgstr "k dispozici je %d titulků."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1854,12 +1978,12 @@ msgid "Boss key"
msgstr "Boss klávesa"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Nabídka přehrávače (krátká)"
+msgid "Player Menu"
+msgstr "Nabídka přehrávače"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Nabídka přehrávače (dlouhá)"
+msgid "Player Menu (full)"
+msgstr "Nabídka přehrávače (rozšířená)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1870,19 +1994,19 @@ msgid "Options"
msgstr "Možnosti"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
+msgid "Next Audio Track"
msgstr "Další zvuková stopa"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
+msgid "Prev Audio Track"
msgstr "Předchozí zvuková stopa"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
+msgid "Next Subtitle Track"
msgstr "Další titulky"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
+msgid "Prev Subtitle Track"
msgstr "Předchozí titulky"
msgctxt "IDS_MPLAYERC_85"
@@ -1893,22 +2017,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Znovu načíst titulky"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Další zvuková stopa (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Předchozí zvuková stopa (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Další titulky (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Předchozí titulky (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Další úhel pohledu (DVD)"
@@ -1918,28 +2026,28 @@ msgid "Prev Angle (DVD)"
msgstr "Předchozí úhel pohledu (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
+msgid "Next Audio Track (DVD)"
msgstr "Další zvuková stopa (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
+msgid "Prev Audio Track (DVD)"
msgstr "Předchozí zvuková stopa (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
+msgid "Next Subtitle Track (DVD)"
msgstr "Další titulky (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
+msgid "Prev Subtitle Track (DVD)"
msgstr "Předchozí titulky (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Zapnout/Vypnout titulky (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Zbývající čas"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Zobrazit aktuální čas"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2073,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Kódovaný"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Ano"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Ne"
@@ -2026,11 +2134,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Díl: %02lu/%02lu, Titul: %02lu/%02lu, Kapitola: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Úhel: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %uHz %dbitů %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2121,14 +2229,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Šířka obrázku"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "Zdá se, že adresa je správná!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Nesouhlasí verze protokolu, aktualizujte svůj přehrávač, nebo zvolte jinou adresu!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Poměr stran"
@@ -2138,19 +2238,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Celkem: %ld, Zahozeno: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Velikost: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Velikost: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Volný: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Volný: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2222,8 +2322,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Soubor nelze vytvořit, protože miniatury by byly příliš malé.\n\nSnižte počet miniatur, nebo zadejte větší celkovou velikost."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Aby bylo možné načíst titulky, musíte změnit výstupní video renderer a znovu spustit přehrávání.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR nebo Haali\n- RealMedia: Speciální renderer pro RealMedia, nebo otevřít prostřednictvím DirectShow\n- QuickTime: DX7 nebo DX9 renderer pro QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Aby bylo možné načíst titulky, musíte změnit výstupní video renderer a znovu spustit přehrávání.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR nebo Haali\n- RealMedia: Speciální renderer pro RealMedia, nebo otevřít prostřednictvím DirectShow\n- QuickTime: DX7 nebo DX9 renderer pro QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2234,11 +2334,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Poměr stran: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Poměr stran: Výchozí"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Poměr stran: Výchozí (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Zpoždění zvuku: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2250,8 +2350,8 @@ msgid "Out of memory"
msgstr "Nedostatek paměti"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Chyba: Vyžadován Flash plugin pro IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Chyba: Vyžadován Flash plugin pro Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2273,10 +2373,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Soubor se nepodařilo přehrát"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Špatná adresa, nepodařilo se najít databázi titulků!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Kapitola: "
@@ -2297,14 +2393,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Aktuální"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC byl neočekávaně ukončen. Pokud nám chcete pomoci tento problém odstranit, nahrajte prosím soubor '%s' na náš bugtracker.\n\nChcete otevřít adresář s tímto souborem a přejít na stránku bugtrackeru?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Nepodařilo se vytvořit soubor výpisu paměti „%s“ (chyba %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Vyberte adresář"
@@ -2322,7 +2410,7 @@ msgid "Toggle Caption&Menu"
msgstr "Zobrazit/Skrýt záhlaví a hlavní nabídku"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Zobrazit/Skrýt panel hledání"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2478,8 +2566,8 @@ msgid "Volume boost Max"
msgstr "Zesílení - maximální"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Použití: mpc-hc.exe \"cesta\" [parametry]\n\n\"cesta\"\t\tSoubor nebo adresář, který má být otevřen\n\t\t(povoleny masky, \"-\" označuje standardní vstup)\n/dub \"soubor\"\tNačte soubor se zvukovou stopou\n/dubdelay \"soubor\"\tNačte soubor se zvukovou stopou posunutou\n\t\to XXms (pokud název souboru obsahuje\n\t\t\"...DELAY XXms...\")\n/d3dfs\t\tSpustí vykreslování v D3D fullscreen režimu\n/sub \"soubor\"\tNačte soubor s titulky\n/filter \"soubor\"\tNačte DirectShow filtr (*.ax nebo *.dll, povoleny\n\t\tmasky)\n/dvd\t\tSpustí MPC-HC v DVD režimu, volitelný parametr\n\t\t\"cesta\" určuje DVD adresář\n/dvdpos T#K\tSpustí přehrávání titulu T, kapitoly K\n/dvdpos T#hh:mm\tSpustí přehrávání titulu T, pozice hh:mm:ss\n/cd\t\tNačte všechny stopy AudioCD/(S)VCD, volitelný\n\t\tparametr \"cesta\" udává písmeno CD mechaniky\n/device\t\tOtevře výchozí video zařízení\n/open\t\tNačte soubor, ale nespustí přehrávání\n/play\t\tNačte soubor a přehraje ho\n/close\t\tPo ukončení přehrávání zavře přehrávač (funkční\n\t\tjen v kombinaci s /play)\n/shutdown\tPo ukončení přehrávání vypne počítač\n/fullscreen\tSpustí přehrávač v režimu na celou obrazovku\n/minimized\tSpustí přehrávač minimalizovaný\n/new\t\tOtevře novou instanci MPC-HC\n/add\t\tPřidá \"cestu\" do playlistu, může být kombinován\n\t\ts /open a /play\n/regvid\t\tNastaví MPC-HC jako výchozí přehrávač pro\n\t\tpodporované video formáty\n/regaud\t\tNastaví MPC-HC jako výchozí přehrávač pro\n\t\tpodporované zvukové formáty\n/regpl\t\tNastaví MPC-HC jako výchozí přehrávač pro\n\t\tpodporované seznamy stop\n/regall\t\tNastaví MPC-HC jako výchozí přehrávač pro\n\t\tvšechny podporované formáty\n/unregall\t\tZruší asociaci MPC-HC se všemi formáty\n\t\t(včetně playlistů)\n/start ms\t\tSpustí přehrávání od zadané pozice\n\t\t(ms = milisekundy)\n/startpos hh:mm:ss\tSpustí přehrávání od pozice hh:mm:ss\n/fixedsize w,h\tSpustí přehrávač se zadanou velikostí okna\n/monitor N\tSpustí přehrávání na monitoru N, kde N\n\t\tzačíná od 1\n/audiorenderer N\tPoužije audiorenderer N, kde N začíná od 1\n\t\t(viz nastavení \"Výstup\")\n/shaderpreset \"Př\"\tPoužije předvolbu shaderů \"Př\"\n/reset\t\tObnoví výchozí nastavení\n/help /h /?\tZobrazí tento dialog\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Použití: mpc-hc.exe \"cesta\" [přepínače]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2565,14 +2653,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Povolit všechny filtry"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Ladění tuneru"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Titulky nejsou načteny nebo je použit nepodporovaný renderer."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Autor neznámý. Pokud jste autorem tohoto loga, kontaktujte mě!"
@@ -2661,40 +2741,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Horní zadní pravý"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Obnovit statistiku zobrazení"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Titulky::Ostatní"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Skrýt okraje"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Pouze rámeček s videem"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Zobrazit titulek a nabídky"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Skrýt nabídku"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Pokročilé"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Nad panelem hledání"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Pod panelem hledání"
msgctxt "IDS_VIDEO_STREAM"
@@ -2862,8 +2914,8 @@ msgid "Other Audio"
msgstr "Ostatní zvukové formáty"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2925,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3009,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Seznam stop"
@@ -2977,18 +3033,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Poměr stran"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Použit WASAPI (znovu spustit přehrávání)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Ztlumit během přetáčení"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Zvukové zařízení:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: Zapnuto"
@@ -3277,6 +3321,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Obnovení hlasitosti: Vypnuto"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bajty"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "kB"
@@ -3334,7 +3382,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Při analýze zadané snímkové frekvence došlo k chybě!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Pohyb po snímcích není podporován, zkuste použít jiný video renderer."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3353,10 +3401,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "Funkce Uložit obrázek a Uložit miniatury s video rendererem Overlay Mixer nefungují.\nZměňte video renderer v nastavení výstupu a soubor znovu otevřete."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Připojení k online databázi titulků se nezdařilo."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Chcete aktivovat EDL editor?"
@@ -3425,7 +3469,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Než budete moci nová nastavení vyzkoušet, musíte je aplikovat."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Po přehrání: Zavřít přehrávač"
@@ -3453,6 +3497,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Po přehrání: Vypnout monitor"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Po přehrání: Přehrát další soubor v adresáři"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Po přehrání: Nedělat nic"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Jas: %s"
@@ -3533,3 +3585,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Nastavení"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "ASSFiltr"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Poskytovatel"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Neslišící"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Stahování"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Hodnocení"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Hledání titulků online se nezdařilo."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Hledání titulků online bylo zrušeno."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Hledání titulků bylo dokončeno, nalezeno %d titulků."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Hledání titulků bylo dokončeno, nebyly nalezeny žádné titulky."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Stáhnout titulky"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Probíhá hledání titulků online, prosím čekejte..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Rušení hledání titulků..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Uživatelské jméno"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Stav"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Připraveno..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Není podporováno."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Odesílání..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Titulky byly úspěšně odeslány."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Odeslání titulků se nezdařilo."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Odeslání titulků bylo zrušeno."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Titulky již existují."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Probíhá odesílání titulků, prosím čekejte..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Odesílání dokončeno."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Odesílání přerušeno."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Odesílání se nezdařilo."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Stáhnout a otevřít"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Nastavení"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Výchozí"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Nahoru"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Dolů"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Otevřít adresu"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Jazyky"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "Chyba: Nepodařilo se navázat spojení."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Zadejte přihlašovací údaje"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Zadejte přihlašovací údaje spojení:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Poměr stran: Předpokládat čtvercové pixely (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Staženo [%s] „%s“"
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Odeslat titulky"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Opravdu chcete odeslat soubor titulků „%s?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Načítají se podporované jazyky..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Přihlášení k „%S“ pod uživatelským jménem „%S“ se nezdařilo.\n\nZadejte správné uživatelské jméno a heslo, nebo nastavte výchozí přihlašovací údaje a přihlaste se jako anonymní uživatel."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Pro soubory jejichž cesta obsahuje některý ze zde zadaných řetězců bude zakázáno automatické vyhledávání a stahování.\nZadejte například: \"soukromá složka\\videa|práce\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"cesta\"\t\tSoubor nebo adresář, který má být otevřen\n\t\t(povoleny masky, \"-\" označuje standardní vstup)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"soubor\"\tNačte soubor se zvukovou stopou"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"soubor\"\tNačte soubor se zvukovou stopou posunutou\n\t\to XXms (pokud název souboru obsahuje\n\t\t\"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tSpustí vykreslování v D3D fullscreen režimu"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"soubor\"\tNačte soubor s titulky"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"soubor\"\tNačte DirectShow filtr (*.ax nebo *.dll, povoleny\n\t\tmasky)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tSpustí MPC-HC v DVD režimu, volitelný parametr\n\t\t\"cesta\" určuje DVD adresář"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#K\tSpustí přehrávání titulu T, kapitoly K"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tSpustit přehrávání titulu T od pozice P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tNačte všechny stopy AudioCD/(S)VCD, volitelný\n\t\tparametr \"cesta\" udává písmeno CD mechaniky"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tOtevře výchozí video zařízení"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tNačte soubor, ale nespustí přehrávání"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tNačte soubor a přehraje ho"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tPo ukončení přehrávání zavře přehrávač (funkční\n\t\tjen v kombinaci s /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tPo ukončení přehrávání vypne počítač"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tPo přehrání přepne systém do úsporného režimu"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tPo přehrání přepne systém do režimu hibernace"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tPo přehrání odhlásí aktuálně přihlášeného uživatele"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tPo přehrání uzamkne aktivní uživatelský účet"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tPo přehrání vypne obrazovku"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tPo přehrání otevře další soubor v adresáři"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tSpustí přehrávač v režimu na celou obrazovku"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tSpustí přehrávač minimalizovaný"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tOtevře novou instanci MPC-HC"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tPřidá \"cestu\" do seznamu stop, může být kombinován\n\t\ts /open a /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tNáhodně seřadí seznam stop"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tNastaví MPC-HC jako výchozí přehrávač pro\n\t\tpodporované video formáty"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tNastaví MPC-HC jako výchozí přehrávač pro\n\t\tpodporované zvukové formáty"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tNastaví MPC-HC jako výchozí přehrávač pro\n\t\tpodporované seznamy stop"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tNastaví MPC-HC jako výchozí přehrávač pro\n\t\tvšechny podporované formáty"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tZruší asociaci MPC-HC se všemi formáty\n\t\t(včetně playlistů)"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tSpustí přehrávání od zadané pozice\n\t\t(ms = milisekundy)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tSpustí přehrávání od pozice hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tSpustí přehrávač se zadanou velikostí okna"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tSpustí přehrávání na monitoru N, kde N\n\t\tzačíná od 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tPoužije audiorenderer N, kde N začíná od 1\n\t\t(viz nastavení \"Výstup\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Př\"\tPoužije předvolbu shaderů \"Př\""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"název\"\tPoužije předvolbu Pan&Scan určitého názvu"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tZnovu přiřadí ikony formátů souborů"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tSpustí MPC-HC v pozadí"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tSpustí webové rozhraní na zadaném portu"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tZobrazí ladicí informace v OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDisable the crash reporter"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tPoužije MPC-HC jako podřízený proces"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tNastaví index GPU použitého pro HW dekódování.\n\t\tDostupné pouze pro CUVID a DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tObnoví výchozí nastavení"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tZobrazí tento dialog"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Prahová hodnota hodnocení pro automaticky stahované titulky. Vyšší hodnota zajistí přesnější výsledky přiřazení, ale sníží pravděpodobnost nalezení titulků, nižší hodnota zvýší pravděpodobnost nalezení titulků, ale zvýší pravděpodobnost načtení chybných titulků. Neexistuje ideální hodnota. Zvolte takovou, která bude fungovat vám."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Posun zvuku (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Velikost výchozího panelu nástrojů v pixelech."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Použít starý panel nástrojů místo nového vektorového."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Kopírovat adresu"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.da.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.da.dialogs.po
new file mode 100644
index 000000000..21052d3e0
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.da.dialogs.po
@@ -0,0 +1,1801 @@
+# MPC-HC - Strings extracted from dialogs
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Jatyrael <cbf_x@hotmail.com>, 2014,2016
+# Chreddy <chreddy1@gmail.com>, 2016
+# Xebika <fidodkk@gmail.com>, 2014-2015
+# Jatyrael <cbf_x@hotmail.com>, 2014
+# NemoHJ <nemohj@gmail.com>, 2016
+# scootergrisen, 2015-2017
+# Stoffi, 2014-2015
+# Xebika <fidodkk@gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-02-15 20:05+0000\n"
+"Last-Translator: scootergrisen\n"
+"Language-Team: Danish (http://www.transifex.com/mpc-hc/mpc-hc/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
+msgid "Select Media Type"
+msgstr "Vælg medietype"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
+msgid "Cancel"
+msgstr "Annuller"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
+msgid "Set"
+msgstr "Anvend"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Audio"
+msgstr "Lyd"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Output"
+msgstr "Output"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
+msgid "Record Video"
+msgstr "Optag video"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
+msgid "Preview"
+msgstr "Forhåndsvis"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
+msgid "Record Audio"
+msgstr "Optag lyd"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
+msgid "Preview"
+msgstr "Forhåndsvis"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "V/A Buffers:"
+msgstr "V/A buffere:"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
+msgid "Audio to wav"
+msgstr "Lyd til wav"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
+msgid "Record"
+msgstr "Optag"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
+msgid "Enable built-in audio switcher filter (requires restart)"
+msgstr "Aktivér indbygget lyd-omskifter filter (kræver genstart)"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
+msgid "Normalize"
+msgstr "Normaliser"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
+msgid "Max amplification:"
+msgstr "Største forstærkning:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
+msgid "Regain volume"
+msgstr "Genvind lydstyrke"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
+msgid "Boost:"
+msgstr "Forstærk:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
+msgid "Down-sample to 44100 Hz"
+msgstr "Down-sample til 44100 Hz"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
+msgid "Audio time shift (ms):"
+msgstr "Forskydelse af lyd (ms):"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
+msgid "Enable custom channel mapping"
+msgstr "Aktivér brugerdefineret kanalkort"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
+msgid "Speaker configuration for"
+msgstr "Højtaleropsætning til"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
+msgid "input channels:"
+msgstr "indgangskanaler:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Hold skift-knappen nede mens du klikker, for at foretage ændringer med det samme"
+
+msgctxt "IDD_GOTO_DLG_CAPTION"
+msgid "Go To..."
+msgstr "Gå til..."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
+msgstr "Indtast en tidskode med formatet [tt:]mm:ss.ms for at gå til et bestemt tidspunkt. Du behøver ikke indtaste separatorerne eksplicit."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Time"
+msgstr "Tid"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK1"
+msgid "Go!"
+msgstr "Gå!"
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
+msgstr "Indtast to tal for at gå til et bestemt billede, det første er billednummeret, det andet er billedhastigheden."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Frame"
+msgstr "Billede"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK2"
+msgid "Go!"
+msgstr "Gå!"
+
+msgctxt "IDD_OPEN_DLG_CAPTION"
+msgid "Open"
+msgstr "Åbn"
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
+msgstr "Indtast adressen til en film- eller lydfil (på internettet eller din computer) og afspilleren vil åbne den for dig."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Open:"
+msgstr "Åbn:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Gennemse..."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
+msgid "Dub:"
+msgstr "Dub:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Gennemse..."
+
+msgctxt "IDD_OPEN_DLG_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_OPEN_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Annuller"
+
+msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
+msgid "Add to playlist without opening"
+msgstr "Føj til spilleliste uden at åbne"
+
+msgctxt "IDD_ABOUTBOX_CAPTION"
+msgid "About"
+msgstr "Om"
+
+msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Ophavsret © 2002-2017 se Authors.txt"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "This program is freeware and released under the GNU General Public License."
+msgstr "Dette program er freeware og udgivet under GNU General Public License."
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "English translation made by MPC-HC Team"
+msgstr "Dansk oversættelse af scootergrisen, Jatyrael"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build information"
+msgstr "Byg-oplysninger"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Version:"
+msgstr "Version:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Compiler:"
+msgstr "Compiler:"
+
+msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
+msgid "Not used"
+msgstr "Ikke brugt"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build date:"
+msgstr "Bygdato:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Operating system"
+msgstr "Styresystem"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Name:"
+msgstr "Navn:"
+
+msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
+msgid "Copy to clipboard"
+msgstr "Kopiér til udklipsholder"
+
+msgctxt "IDD_ABOUTBOX_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Open options"
+msgstr "Åbn indstillinger"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
+msgid "Use the same player for each media file"
+msgstr "Brug den samme afspiller til hver mediefil"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
+msgid "Open a new player for each media file played"
+msgstr "Åbn en ny afspiller for hver afspillet mediefil"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Language"
+msgstr "Sprog"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Title bar"
+msgstr "Titellinje"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
+msgid "Display full path"
+msgstr "Vis hele stien"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
+msgid "File name only"
+msgstr "Kun filnavn"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
+msgid "Don't prefix anything"
+msgstr "Ingen præfiks"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
+msgid "Replace file name with title"
+msgstr "Erstat filnavn med titel"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Other"
+msgstr "Andre"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
+msgid "Tray icon"
+msgstr "Proceslinje ikon"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
+msgid "Show OSD (requires restart)"
+msgstr "Vis OSD (kræver genstart)"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
+msgid "Limit window proportions on resize"
+msgstr "Lås vinduesformat ved størrelsesændring"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
+msgid "Snap to desktop edges"
+msgstr "Fastgør til kanten af skrivebord"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
+msgid "Store settings in .ini file"
+msgstr "Gem indstillinger i .ini-fil"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
+msgid "Disable \"Open Disc\" menu"
+msgstr "Aktivér \"Åbn disk\" menu"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
+msgid "Process priority above normal"
+msgstr "Proces-prioritet over normal"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
+msgid "Enable cover-art support"
+msgstr "Aktivér cover-art understøttelse"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "History"
+msgstr "Historik"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
+msgid "Keep history of recently opened files"
+msgstr "Bevar historik af senest åbnede filer"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
+msgid "Remember last playlist"
+msgstr "Husk sidste spilleliste"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
+msgid "Remember File position"
+msgstr "Husk filplacering"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
+msgid "Remember DVD position"
+msgstr "Husk DVD placering"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
+msgid "Remember last window position"
+msgstr "Husk sidste vinduesplacering"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
+msgid "Remember last window size"
+msgstr "Husk den sidste vinduesstørrelse"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
+msgid "Remember last Pan-n-Scan Zoom"
+msgstr "Husk sidste pan-og-skan zoom"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "\"Open DVD/BD\" behavior"
+msgstr "\"Åbn DVD/BD\" opførsel"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
+msgid "Prompt for location"
+msgstr "Spørg efter placering"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
+msgid "Always open the default location:"
+msgstr "Åbn altid standardplaceringen:"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Preferred language for DVD Navigator and the external OGM Splitter"
+msgstr "Foretrukket sprog til DVD-navigator og den eksterne OGM-splitter"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
+msgid "Menu"
+msgstr "Menu"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
+msgid "Audio"
+msgstr "Lyd"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
+msgid "Subtitles"
+msgstr "Undertekster"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Additional settings"
+msgstr "Yderligere indstillinger"
+
+msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
+msgid "Allow closed captions in \"Line 21 Decoder\""
+msgstr "Tillad undertekster i \"Line 21 Decoder\""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio"
+msgstr "Lyd"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume"
+msgstr "Lydstyrke"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Min"
+msgstr "Min"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Max"
+msgstr "Max"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
+msgid "Balance"
+msgstr "Balance"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "L"
+msgstr "V"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "R"
+msgstr "H"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Playback"
+msgstr "Afspilning"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
+msgid "Play"
+msgstr "Afspil"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
+msgid "Repeat forever"
+msgstr "Gentag uendeligt"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
+msgid "time(s)"
+msgstr "gang(e)"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Gentagelsestilstand:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "After Playback"
+msgstr "Efter afspilning"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default zoom"
+msgstr "Standardzoom"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
+msgid "Auto-zoom:"
+msgstr "Auto-zoom:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
+msgid "Auto fit factor:"
+msgstr "Automatisk tilpasningsfaktor:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default track preference"
+msgstr "Standard spor-indstilling"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Subtitles:"
+msgstr "Undertekster:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio:"
+msgstr "Lyd:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
+msgid "Allow overriding external splitter choice"
+msgstr "Tillad tilsidesættelse af ekstern splitter valg"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Open settings"
+msgstr "Åbn indstillinger"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
+msgid "Use worker thread to construct the filter graph"
+msgstr "Brug arbejdstråd til at bygge filtergrafen"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
+msgid "Report pins which fail to render"
+msgstr "Rapportér pins, der ikke kan rendere"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
+msgid "Auto-load audio files"
+msgstr "Automatisk indlæsning af lydfiler"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Control"
+msgstr "Styring"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume step:"
+msgstr "Lydstyrke trin:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Speed step:"
+msgstr "Hastighed trin:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
+msgid "Override placement"
+msgstr "Tilsidesæt placering"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
+msgid "Horizontal:"
+msgstr "Vandret:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC2"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC3"
+msgid "Vertical:"
+msgstr "Lodret:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC4"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Delay step"
+msgstr "Forsinkelse trin"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Texture settings (open the video again to see the changes)"
+msgstr "Strukturindstillinger (genåbn videoen for at se ændringerne)"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Sub pictures to buffer:"
+msgstr "Undertekst-billeder til buffer:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Maximum texture resolution:"
+msgstr "Maksimal strukturopløsning:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
+msgid "Never animate the subtitles"
+msgstr "Animér aldrig underteksterne"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
+msgid "Render at"
+msgstr "Rendér ved"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
+msgid "% of the animation"
+msgstr "% af animationen"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
+msgid "Animate at"
+msgstr "Animér ved"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
+msgid "% of the video frame rate"
+msgstr "% af videoens billedhastighed"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Allow dropping some subpictures if the queue is running late"
+msgstr "Tillad tab af nogle undertekst-billeder hvis køen er forsinket"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Renderer Layout"
+msgstr "Renderer layout"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
+msgid "Apply aspect ratio compensation for anamorphic videos"
+msgstr "Anvend kompensation af højde-bredde-forhold ved anamorfiske videoer"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Warning"
+msgstr "Advarsel"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Hvis du tilsidesætter og aktivere fuldskærm antialiasing i grafikkortets indstillinger, kommer underteksterne ikke til at se bedre ud, men der bruges betydeligt flere CPU-ressourcer."
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
+msgid "File extensions"
+msgstr "Filtyper"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
+msgid "Default"
+msgstr "Standard"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
+msgid "Set"
+msgstr "Anvend"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
+msgid "Association"
+msgstr "Tilknytning"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
+msgid "Use the format-specific icons"
+msgstr "Brug de formatspecifikke ikoner"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
+msgid "Run as &administrator"
+msgstr "Kør som &administrator"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
+msgid "Set as &default program"
+msgstr "Indstil som &standardprogram"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
+msgstr "Realtid strømning protokol handler (til rtsp://... URL'er)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
+msgid "RealMedia"
+msgstr "RealMedia"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO2"
+msgid "QuickTime"
+msgstr "QuickTime"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO3"
+msgid "DirectShow"
+msgstr "DirectShow"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
+msgid "Check file extension first"
+msgstr "Undersøg først filtype"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Explorer Context Menu"
+msgstr "Stifinder genvejsmenu"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK6"
+msgid "Directory"
+msgstr "Mappe"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK7"
+msgid "File(s)"
+msgstr "Fil(er)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
+msgid "Autoplay"
+msgstr "Automatisk afspilning"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK2"
+msgid "Music"
+msgstr "Musik"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK4"
+msgid "DVD"
+msgstr "DVD"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
+msgid "Audio CD"
+msgstr "Lyd-CD"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "Jump distances (small, medium, large in ms)"
+msgstr "\"Gå til\"-afstande (lille, medium, stor i ms)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
+msgid "Default"
+msgstr "Standard"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
+msgid "Fast seek (on keyframe)"
+msgstr "Hurtig søgning (efter keyframe)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
+msgid "Show chapter marks in seek bar"
+msgstr "Vis kapitel-mærker i søgelinje"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
+msgid "Display \"Now Playing\" information in Skype's mood message"
+msgstr "Vis \"Spiller nu\" oplysninger i Skype's stemningsmeddelelse"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
+msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
+msgstr "Forhindre minimering af afspilleren i fuldskærm-tilstand på en ikke-standard monitor"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Anvend forbedret proceslinjefunktioner"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Åbn næste/forrige fil i mappe ved \"Spring tilbage/fremad\" når der kun er ét element i spillelisten"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
+msgid "Show time tooltip:"
+msgstr "Vis værktøjstip om tid:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "OSD font:"
+msgstr "OSD skrifttype:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
+msgid "Enable Logitech LCD support (experimental)"
+msgstr "Aktivér understøttelse af Logitech LCD (eksperimental)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
+msgid "Auto-hide the mouse pointer during playback in windowed mode"
+msgstr "Skjul automatisk musemarkøren under afspilning i vindue-tilstand"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
+msgid "Add Filter..."
+msgstr "Tilføj filter..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
+msgid "Remove"
+msgstr "Fjern"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO1"
+msgid "Prefer"
+msgstr "Foretræk"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO2"
+msgid "Block"
+msgstr "Blokér"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
+msgid "Set merit:"
+msgstr "Angiv værdi:"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
+msgid "Up"
+msgstr "Op"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON4"
+msgid "Down"
+msgstr "Ned"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
+msgid "Add Media Type..."
+msgstr "Tilføj medietype..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
+msgid "Add Sub Type..."
+msgstr "Tilføj undertype..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
+msgid "Delete"
+msgstr "Slet"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
+msgid "Reset List"
+msgstr "Nulstil liste"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Type:"
+msgstr "Type:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Size:"
+msgstr "Størrelse:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Media length:"
+msgstr "Medie varighed:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Video size:"
+msgstr "Video størrelse:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Created:"
+msgstr "Oprettet:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Clip:"
+msgstr "Klip:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Author:"
+msgstr "Forfatter:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Copyright:"
+msgstr "Ophavsret:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Rating:"
+msgstr "Klassificering:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Location:"
+msgstr "Placering:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Description:"
+msgstr "Beskrivelse:"
+
+msgctxt "IDD_FAVADD_CAPTION"
+msgid "Add Favorite"
+msgstr "Tilføj favorit"
+
+msgctxt "IDD_FAVADD_IDC_STATIC"
+msgid "Choose a name for your shortcut:"
+msgstr "Vælg et navn til din genvej:"
+
+msgctxt "IDD_FAVADD_IDC_CHECK1"
+msgid "Remember position"
+msgstr "Husk placering"
+
+msgctxt "IDD_FAVADD_IDCANCEL"
+msgid "Cancel"
+msgstr "Annuller"
+
+msgctxt "IDD_FAVADD_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_FAVADD_IDC_CHECK2"
+msgid "Relative drive"
+msgstr "Relativt drev"
+
+msgctxt "IDD_FAVORGANIZE_CAPTION"
+msgid "Organize Favorites"
+msgstr "Håndtér favoritter"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
+msgid "Rename"
+msgstr "Omdøb"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
+msgid "Move Up"
+msgstr "Flyt op"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
+msgid "Move Down"
+msgstr "Flyt ned"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
+msgid "Delete"
+msgstr "Slet"
+
+msgctxt "IDD_FAVORGANIZE_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_PNSPRESET_DLG_CAPTION"
+msgid "Pan&Scan Presets"
+msgstr "Panorering og skanning-forudindstillinger"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
+msgid "New"
+msgstr "Ny"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON3"
+msgid "Delete"
+msgstr "Slet"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
+msgid "Up"
+msgstr "Op"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
+msgid "Down"
+msgstr "Ned"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
+msgid "&Set"
+msgstr "&Anvend"
+
+msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
+msgid "&Cancel"
+msgstr "&Annuller"
+
+msgctxt "IDD_PNSPRESET_DLG_IDOK"
+msgid "&Save"
+msgstr "&Gem"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Pos: 0.0 -> 1.0"
+msgstr "Placering: 0.0 -> 1.0"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Zoom: 0.2 -> 3.0"
+msgstr "Zoom: 0.2 -> 3.0"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
+msgid "Global Media Keys"
+msgstr "Globale medietaster"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
+msgid "Select All"
+msgstr "Markér alle"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
+msgid "Reset Selected"
+msgstr "Nulstil markerede"
+
+msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
+msgid "Warning"
+msgstr "Advarsel"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
+msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
+msgstr "MPC-HC kunne ikke rendere nogle af pinsene i grafen, du har muligvis ikke installeret de nødvendige codecs eller filtre på systemet."
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
+msgid "The following pin(s) failed to find a connectable filter:"
+msgstr "De følgende pin(s) fandt ikke et filter der kan forbindes til:"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDOK"
+msgid "Close"
+msgstr "Luk"
+
+msgctxt "IDD_SAVE_DLG_CAPTION"
+msgid "Saving..."
+msgstr "Gemmer..."
+
+msgctxt "IDD_SAVE_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Annuller"
+
+msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Kodning:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Kodning:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "Delay:"
+msgstr "Forsinkelse:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
+msgid "Save custom style"
+msgstr "Gem brugerdefineret typografi"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG kvalitet:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Thumbnails:"
+msgstr "Miniaturer:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "rows"
+msgstr "rækker"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "columns"
+msgstr "kolonner"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Image width:"
+msgstr "Billedbredde:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "pixels"
+msgstr "pixels"
+
+msgctxt "IDD_ADDREGFILTER_CAPTION"
+msgid "Select Filter"
+msgstr "Vælg filter"
+
+msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Gennemse..."
+
+msgctxt "IDD_ADDREGFILTER_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_ADDREGFILTER_IDCANCEL"
+msgid "Cancel"
+msgstr "Annuller"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Font"
+msgstr "Skrifttype"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_BUTTON1"
+msgid "Font"
+msgstr "Skrifttype"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Spacing"
+msgstr "Mellemrum"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Angle (z,°)"
+msgstr "Vinkel (z,°)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (x,%)"
+msgstr "Skalér (x,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (y,%)"
+msgstr "Skalér (y,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Border Style"
+msgstr "Kant typografi"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
+msgid "Outline"
+msgstr "Omrids"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
+msgid "Opaque box"
+msgstr "Synlig boks"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Width"
+msgstr "Bredde"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Shadow"
+msgstr "Skygge"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Screen Alignment && Margins"
+msgstr "Skærmjustering og margener"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Left"
+msgstr "Venstre"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Right"
+msgstr "Højre"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Top"
+msgstr "Top"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Bottom"
+msgstr "Bund"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
+msgid "Position subtitles relative to the video frame"
+msgstr "Placer undertekster i forhold til videobilledet"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Colors && Transparency"
+msgstr "Farver og transparens"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "0%"
+msgstr "0%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Primary"
+msgstr "Primær"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Secondary"
+msgstr "Sekundær"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Outline"
+msgstr "Omrids"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
+msgid "Link alpha channels"
+msgstr "Lås gennemsigtighed"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
+msgstr "Hvis du ønsker at bruge selvstændige udgaver af disse filtre, eller andre erstatninger, så deaktivér dem her."
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Source Filters"
+msgstr "Kilde filtre"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Transform Filters"
+msgstr "Transformering filtre"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Internal LAV Filters settings"
+msgstr "Interne LAV Filters indstillinger"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
+msgid "Splitter"
+msgstr "Splitter"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
+msgid "Video decoder"
+msgstr "Video-dekoder"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
+msgid "Audio decoder"
+msgstr "Lyd-dekoder"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
+msgid "Internal:"
+msgstr "Intern:"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO2"
+msgid "External:"
+msgstr "Ekstern:"
+
+msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Gennemse..."
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DirectShow Video"
+msgstr "DirectShow Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "RealMedia Video"
+msgstr "RealMedia Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "QuickTime Video"
+msgstr "QuickTime Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Audio Renderer"
+msgstr "Lyd-renderer"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderless) og EVR (CP) indstillinger"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Surface:"
+msgstr "Overflade:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Resizer:"
+msgstr "Gensampling:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
+msgid "Select D3D9 Render Device"
+msgstr "Vælg D3D9 renderer-enhed"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
+msgid "Reinitialize when changing display"
+msgstr "Initialisér igen ved ændring af visning"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "D3D Fullscreen"
+msgstr "D3D fuldskærm"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Alternative VSync"
+msgstr "Alternativ lodret synk."
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
+msgid "VMR-9 Mixer Mode"
+msgstr "VMR-9 mixer-tilstand"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
+msgid "YUV Mixing"
+msgstr "YUV mixing"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
+msgid "EVR Buffers:"
+msgstr "EVR buffere:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitles"
+msgstr "Undertekster"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Screenshot"
+msgstr "Skærmbillede"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Shaders"
+msgstr "Shadere"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Rotation"
+msgstr "Rotation"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitle Renderer"
+msgstr "Undertekst renderer"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Mellemlager kompilerede shadere"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
+msgid "Listen on port:"
+msgstr "Lyt på port:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
+msgid "Launch in web browser..."
+msgstr "Åbn i webbrowser..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
+msgid "Enable compression"
+msgstr "Aktivér komprimering"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
+msgid "Allow access from localhost only"
+msgstr "Tillad kun adgang fra localhost"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Aktivér forhåndsvisning"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
+msgid "Print debug information"
+msgstr "Vis fejlfindingsoplysninger"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
+msgid "Serve pages from:"
+msgstr "Vis sider fra:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Gennemse..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
+msgid "Deploy..."
+msgstr "Installér..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "Default page:"
+msgstr "Standardside:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
+msgstr "CGI handlere: (.filtype1=sti1;.filtype2=sti2;...)"
+
+msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
+msgid "Download subtitles"
+msgstr "Download undertekster"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
+msgid "Replace currently loaded subtitles"
+msgstr "Erstat aktuelle indlæste undertekster"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Download"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Opdater"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Afbryd"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Indstillinger"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Upload undertekster"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Upload"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Afbryd"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Indstillinger"
+
+msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
+msgid "Save As..."
+msgstr "Gem som..."
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Color controls (for VMR-9, EVR and madVR)"
+msgstr "Farveindstillinger (til VMR-9, EVR og madVR)"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Brightness"
+msgstr "Lysstyrke"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Contrast"
+msgstr "Kontrast"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Hue"
+msgstr "Farvetone"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Saturation"
+msgstr "Mætning"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET"
+msgid "Reset"
+msgstr "Nulstil"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Update check"
+msgstr "Søg efter opdatering"
+
+msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
+msgid "Enable automatic update check"
+msgstr "Aktivér automatisk søgning efter opdatering"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
+msgid "Check every:"
+msgstr "Tjek hver:"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
+msgid "day(s)"
+msgstr "dag(e)"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Settings management"
+msgstr "Håndtering af indstillinger"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
+msgid "Reset"
+msgstr "Nulstil"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
+msgid "Export"
+msgstr "Eksportér"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
+msgid "Export keys"
+msgstr "Eksportér nøgler"
+
+msgctxt "IDD_TUNER_SCAN_CAPTION"
+msgid "Tuner scan"
+msgstr "Tuner skanning"
+
+msgctxt "IDD_TUNER_SCAN_ID_START"
+msgid "Start"
+msgstr "Start"
+
+msgctxt "IDD_TUNER_SCAN_IDCANCEL"
+msgid "Cancel"
+msgstr "Annuller"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. Start"
+msgstr "Frekv. start"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Bandwidth"
+msgstr "Båndbredde"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. End"
+msgstr "Frekv. slut"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
+msgid "Ignore encrypted channels"
+msgstr "Ignorer krypterede kanaler"
+
+msgctxt "IDD_TUNER_SCAN_ID_SAVE"
+msgid "Save"
+msgstr "Gem"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "S"
+msgstr "S"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Q"
+msgstr "Q"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
+msgid "Use an offset"
+msgstr "Anvend udligning"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Default Device"
+msgstr "Standardenhed"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
+msgid "Analog"
+msgstr "Analog"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO2"
+msgid "Digital"
+msgstr "Digital"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Analog settings"
+msgstr "Analoge indstillinger"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC2"
+msgid "Audio"
+msgstr "Lyd"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC3"
+msgid "Country"
+msgstr "Land"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Digital settings (BDA)"
+msgstr "Digitale indstillinger (BDA)"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
+msgid "Network Provider"
+msgstr "Netværksudbyder"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
+msgid "Tuner"
+msgstr "Tuner"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC6"
+msgid "Receiver"
+msgstr "Modtager"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
+msgid "Channel switching approach:"
+msgstr "Kanal skift tilgang:"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
+msgid "Rebuild filter graph"
+msgstr "Genopbyg filtergraf"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
+msgid "Stop filter graph"
+msgstr "Stop filtergrafen"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
+msgid "Sync video to display"
+msgstr "Synkroniser video til billede"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
+msgid "Frequency adjustment:"
+msgstr "Frekvensjustering:"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
+msgid "Sync display to video"
+msgstr "Synkroniser billede til video"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
+msgid "Frequency adjustment:"
+msgstr "Frekvensjustering:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC3"
+msgid "lines"
+msgstr "linjer"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
+msgid "columns"
+msgstr "kolonner"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
+msgid "Present at nearest VSync"
+msgstr "Til stede ved nærmeste lodret synkronisering"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
+msgid "Target sync offset:"
+msgstr "Ønsket synk. forskydning:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC7"
+msgid "Control limits:"
+msgstr "Tolerance:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
+msgid "+/-"
+msgstr "+/-"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
+msgid "Changes take effect after the playback has been closed and restarted."
+msgstr "Ændringerne træder i kraft efter afspilningen er blevet lukket eller genstartet."
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
+msgid "Launch files in fullscreen"
+msgstr "Start filer i fuldskærm"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
+msgid "Hide controls in fullscreen"
+msgstr "Skjul kontrolelementer i fuldskærm"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
+msgid "Hide docked panels"
+msgstr "Skjul forankret paneler"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
+msgid "Exit fullscreen at the end of playback"
+msgstr "Afslut fuldskærm når afspilning er færdig"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Fullscreen monitor"
+msgstr "Fuldskærm monitor"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
+msgid "Use autochange fullscreen monitor mode"
+msgstr "Brug automatisk skift af fuldskærm monitor-tilstand"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
+msgid "Add"
+msgstr "Tilføj"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
+msgid "Del"
+msgstr "Slet"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
+msgid "Up"
+msgstr "Op"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON4"
+msgid "Down"
+msgstr "Ned"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
+msgid "Apply default monitor mode on fullscreen exit"
+msgstr "Anvend standard monitor-tilstand ved afslutning af fuldskærm"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
+msgid "Restore resolution on program exit"
+msgstr "Genskab opløsning ved lukning af program"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Delay"
+msgstr "Forsinkelse"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
+msgid "s"
+msgstr "s"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
+msgid "Info"
+msgstr "Info"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_SCAN"
+msgid "Scan"
+msgstr "Skan"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
+msgid "Prefer forced and/or default subtitles tracks"
+msgstr "Foretræk tvunget og/eller standard undertekster-spor"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
+msgid "Prefer external subtitles over embedded subtitles"
+msgstr "Foretræk eksterne-undertekster over indlejrede-undertekster"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
+msgid "Ignore embedded subtitles"
+msgstr "Ignorerer indlejrede-undertekster"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Autoload paths"
+msgstr "Automatisk indlæsning af stier"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
+msgid "Reset"
+msgstr "Nulstil"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Online search, download and upload subtitles"
+msgstr "Online søgning, download og upload af undertekster"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Automatisk søgning og download af undertekster hvis der ikke findes nogen lokalt"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Foretræk undertekster for hørehæmmet (når indikeret af undertekstudbyderen)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignorér filer med de følgende ord:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Languages in order of preference:"
+msgstr "Sprog i foretrukne rækkefølge:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Upload automatisk aktive undertekster ved slutningen af videoafspilning"
+
+msgctxt "IDD_UPDATE_DIALOG_CAPTION"
+msgid "Update Checker"
+msgstr "Søgning efter opdateringer"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
+msgid "&Download now"
+msgstr "&Download nu"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
+msgid "Remind me &later"
+msgstr "Påmind mig &senere"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
+msgid "&Ignore this update"
+msgstr "&Ignorer denne opdatering"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shaders contain special effects which can be added to the video rendering process."
+msgstr "Shadere indeholder specielle effekter, der kan tilsættes videorenderingsprocessen."
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
+msgid "Add shader file"
+msgstr "Tilføj shader-fil"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
+msgid "Remove"
+msgstr "Fjern"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
+msgid "Add to pre-resize"
+msgstr "Føj til før-størrelsesændring"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
+msgid "Add to post-resize"
+msgstr "Føj til efter-størrelsesændring"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shader presets"
+msgstr "Shader-forudindstillinger"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
+msgid "Load"
+msgstr "Indlæs"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
+msgid "Save"
+msgstr "Gem"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON5"
+msgid "Delete"
+msgstr "Slet"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active pre-resize shaders"
+msgstr "Aktive før-størrelsesændring shadere"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active post-resize shaders"
+msgstr "Aktive efter-størrelsesændring shadere"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
+msgid "Debug Shaders"
+msgstr "Fejlfind af shadere"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
+msgid "Debug Information"
+msgstr "Fejlfindingsoplysninger"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
+msgid "PS 2.0"
+msgstr "PS 2.0"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO2"
+msgid "PS 2.0b"
+msgstr "PS 2.0b"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO3"
+msgid "PS 2.0a"
+msgstr "PS 2.0a"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO4"
+msgid "PS 3.0"
+msgstr "PS 3.0"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
+msgid "Advanced Settings, do not edit unless you know what you are doing."
+msgstr "Avancerede indstillinger, undlad at redigere med mindre du ved hvad du gør."
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
+msgid "True"
+msgstr "Sand"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
+msgid "False"
+msgstr "Falsk"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
+msgid "Default"
+msgstr "Standard"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Enhed"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Eksklusiv tilstand"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Tillad bitstrømning"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Indstillinger"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Aktivér stereo-crossfeed (til hovedtelefoner)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Cut-off:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Niveau:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Bemærkning"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "For at minimerer lydforvrængning, anbefales det at holde afspillerens lydstyrke omkring 85%, når der afspilles højt lossy-encoded indhold."
+
+msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG kvalitet:"
+
+msgctxt "IDD_CMD_LINE_HELP_CAPTION"
+msgid "Command line help"
+msgstr "Kommandolinje hjælp"
+
+msgctxt "IDD_CMD_LINE_HELP_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Fejlrapportering"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Vi beklager, men det ser ud til at MPC-HC er holdt op med at virke. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Send en fejlrapport for at hjælpe os med at diagnostisere problemet."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Valgfrie informationer"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "E-mail:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Din e-mailadresse er valgfri og vil kun blive brugt i tilfælde hvor udviklerne har brug for yderligere oplysninger fra dig."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Beskrivelse af problemet (skriv kun på engelsk):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Genstart MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Afslut MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.da.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.da.menus.po
new file mode 100644
index 000000000..d6398cb52
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.da.menus.po
@@ -0,0 +1,712 @@
+# MPC-HC - Strings extracted from menus
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Jatyrael <cbf_x@hotmail.com>, 2014
+# Xebika <fidodkk@gmail.com>, 2015
+# scootergrisen, 2015-2016
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-11-24 12:43+0000\n"
+"Last-Translator: scootergrisen\n"
+"Language-Team: Danish (http://www.transifex.com/mpc-hc/mpc-hc/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "POPUP"
+msgid "&File"
+msgstr "&Filer"
+
+msgctxt "ID_FILE_OPENQUICK"
+msgid "&Quick Open File..."
+msgstr "Åbn fil &hurtigt..."
+
+msgctxt "ID_FILE_OPENMEDIA"
+msgid "&Open File..."
+msgstr "&Åbn fil..."
+
+msgctxt "ID_FILE_OPENDVDBD"
+msgid "Open &DVD/BD..."
+msgstr "Åbn &DVD/BD..."
+
+msgctxt "ID_FILE_OPENDEVICE"
+msgid "Open De&vice..."
+msgstr "Åbn &enhed..."
+
+msgctxt "ID_FILE_OPENDIRECTORY"
+msgid "Open Dir&ectory..."
+msgstr "Åbn &mappe..."
+
+msgctxt "ID_FILE_OPENDISC"
+msgid "O&pen Disc"
+msgstr "Å&bn disk"
+
+msgctxt "ID_RECENT_FILES"
+msgid "Recent &Files"
+msgstr "Seneste &filer"
+
+msgctxt "ID_FILE_CLOSE_AND_RESTORE"
+msgid "&Close"
+msgstr "&Luk"
+
+msgctxt "ID_FILE_SAVE_COPY"
+msgid "&Save a Copy..."
+msgstr "&Gem en kopi..."
+
+msgctxt "ID_FILE_SAVE_IMAGE"
+msgid "Save &Image..."
+msgstr "Gem b&illede..."
+
+msgctxt "ID_FILE_SAVE_THUMBNAILS"
+msgid "Save &Thumbnails..."
+msgstr "Gem &miniaturer..."
+
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "&Undertekster"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Indlæs undertekster..."
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Gem &undertekster..."
+
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Download undertekster..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Upload undertekster..."
+
+msgctxt "ID_FILE_PROPERTIES"
+msgid "P&roperties"
+msgstr "E&genskaber"
+
+msgctxt "ID_FILE_EXIT"
+msgid "E&xit"
+msgstr "&Afslut"
+
+msgctxt "POPUP"
+msgid "&View"
+msgstr "V&is"
+
+msgctxt "ID_VIEW_CAPTIONMENU"
+msgid "Caption&&Menu"
+msgstr "Titel- og menulinje"
+
+msgctxt "ID_VIEW_SEEKER"
+msgid "See&k Bar"
+msgstr "Søgelin&je"
+
+msgctxt "ID_VIEW_CONTROLS"
+msgid "&Controls"
+msgstr "Kont&rolelementer"
+
+msgctxt "ID_VIEW_INFORMATION"
+msgid "&Information"
+msgstr "&Oplysninger"
+
+msgctxt "ID_VIEW_STATISTICS"
+msgid "&Statistics"
+msgstr "Statisti&k"
+
+msgctxt "ID_VIEW_STATUS"
+msgid "St&atus"
+msgstr "St&atus"
+
+msgctxt "ID_VIEW_SUBRESYNC"
+msgid "Su&bresync"
+msgstr "Un&dertekst gensynk."
+
+msgctxt "ID_VIEW_PLAYLIST"
+msgid "Pla&ylist"
+msgstr "&Spilleliste"
+
+msgctxt "ID_VIEW_CAPTURE"
+msgid "Captu&re"
+msgstr "Opta&g"
+
+msgctxt "ID_VIEW_NAVIGATION"
+msgid "Na&vigation"
+msgstr "Na&vigation"
+
+msgctxt "ID_VIEW_DEBUGSHADERS"
+msgid "&Debug Shaders"
+msgstr "Fejlfind &shadere"
+
+msgctxt "POPUP"
+msgid "&Presets..."
+msgstr "&Forudindstillinger..."
+
+msgctxt "ID_VIEW_PRESETS_MINIMAL"
+msgid "&Minimal"
+msgstr "&Minimal"
+
+msgctxt "ID_VIEW_PRESETS_COMPACT"
+msgid "&Compact"
+msgstr "&Kompakt"
+
+msgctxt "ID_VIEW_PRESETS_NORMAL"
+msgid "&Normal"
+msgstr "&Standard"
+
+msgctxt "ID_VIEW_FULLSCREEN"
+msgid "F&ull Screen"
+msgstr "F&uldskærm"
+
+msgctxt "POPUP"
+msgid "&Zoom"
+msgstr "&Zoom"
+
+msgctxt "ID_VIEW_ZOOM_50"
+msgid "&50%"
+msgstr "&50%"
+
+msgctxt "ID_VIEW_ZOOM_100"
+msgid "&100%"
+msgstr "&100%"
+
+msgctxt "ID_VIEW_ZOOM_200"
+msgid "&200%"
+msgstr "&200%"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT"
+msgid "Auto &Fit"
+msgstr "Automatisk &tilpasning"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (&Larger Only)"
+msgstr "Automatisk tilpasning (&kun større)"
+
+msgctxt "POPUP"
+msgid "R&enderer Settings"
+msgstr "R&endererindstillinger"
+
+msgctxt "ID_VIEW_TEARING_TEST"
+msgid "&Tearing Test"
+msgstr "&Iturivningstest"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Vis statistik"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Vis aktuelle t&id"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Vis &filnavn"
+
+msgctxt "POPUP"
+msgid "&Output Range"
+msgstr "&Outputområde"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
+msgid "&0 - 255"
+msgstr "&0 - 255"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
+msgid "&16 - 235"
+msgstr "&16 - 235"
+
+msgctxt "POPUP"
+msgid "&Presentation"
+msgstr "&Præsentation"
+
+msgctxt "ID_VIEW_D3DFULLSCREEN"
+msgid "D3D Fullscreen &Mode"
+msgstr "D3D fuldskær&m-tilstand"
+
+msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
+msgid "D3D Fullscreen &GUI Support"
+msgstr "D3D fuldskærm &GUI understøttelse"
+
+msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
+msgid "10-bit &RGB Output"
+msgstr "10-bit &RGB-output"
+
+msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
+msgid "Force 10-bit RGB &Input"
+msgstr "Gennemtving 10-bit RGB-&input"
+
+msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
+msgid "&Full Floating Point Processing"
+msgstr "&Fuld flydende kommatal bearbejdning"
+
+msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
+msgid "&Half Floating Point Processing"
+msgstr "&Halv flydende kommatal bearbejdning"
+
+msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
+msgid "Disable desktop composition (&Aero)"
+msgstr "Deaktivér skrivebordsopbygning (&Aero)"
+
+msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time &Correction"
+msgstr "Aktivér &korrigering af billedtid"
+
+msgctxt "POPUP"
+msgid "&Color Management"
+msgstr "&Farvehåndtering"
+
+msgctxt "ID_VIEW_CM_ENABLE"
+msgid "&Enable"
+msgstr "&Aktivér"
+
+msgctxt "POPUP"
+msgid "&Input Type"
+msgstr "&Inputtype"
+
+msgctxt "ID_VIEW_CM_INPUT_AUTO"
+msgid "&Auto-Detect"
+msgstr "&Automatisk"
+
+msgctxt "ID_VIEW_CM_INPUT_HDTV"
+msgid "&HDTV"
+msgstr "&HDTV"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
+msgid "SDTV &NTSC"
+msgstr "SDTV &NTSC"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
+msgid "SDTV &PAL"
+msgstr "SDTV &PAL"
+
+msgctxt "POPUP"
+msgid "Ambient &Light"
+msgstr "Omgivende &lys"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
+msgid "&Bright (2.2 Gamma)"
+msgstr "&Lyst (2.2 gamma)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
+msgid "&Dim (2.35 Gamma)"
+msgstr "Ne&dtonet (2.35 gamma)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
+msgid "D&ark (2.4 Gamma)"
+msgstr "M&ørkt (2.4 gamma)"
+
+msgctxt "POPUP"
+msgid "&Rendering Intent"
+msgstr "&Renderingsformål"
+
+msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
+msgid "&Perceptual"
+msgstr "&Sanselig"
+
+msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
+msgid "&Relative Colorimetric"
+msgstr "&Relativ farvemåling"
+
+msgctxt "ID_VIEW_CM_INTENT_SATURATION"
+msgid "&Saturation"
+msgstr "&Mætning"
+
+msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
+msgid "&Absolute Colorimetric"
+msgstr "&Absolut farvemåling"
+
+msgctxt "POPUP"
+msgid "&VSync"
+msgstr "&Lodret synkronisering"
+
+msgctxt "ID_VIEW_VSYNC"
+msgid "&VSync"
+msgstr "&Lodret synkronisering"
+
+msgctxt "ID_VIEW_VSYNCACCURATE"
+msgid "&Accurate VSync"
+msgstr "&Præcis lodret synkronisering"
+
+msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
+msgid "A&lternative VSync"
+msgstr "A&lternativ lodret synkronisering"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
+msgid "&Decrease VSync Offset"
+msgstr "&Lodret synkronisering -"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
+msgid "&Increase VSync Offset"
+msgstr "&Lodret synkronisering +"
+
+msgctxt "POPUP"
+msgid "&GPU Control"
+msgstr "&GPU styring"
+
+msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
+msgid "Flush GPU &before VSync"
+msgstr "Tøm GPU &før lodret synkronisering"
+
+msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
+msgid "Flush GPU &after Present"
+msgstr "Tøm GPU &efter præsentation"
+
+msgctxt "ID_VIEW_FLUSHGPU_WAIT"
+msgid "&Wait for flushes"
+msgstr "&Vent på tømninger"
+
+msgctxt "POPUP"
+msgid "R&eset"
+msgstr "N&ulstil"
+
+msgctxt "ID_VIEW_RESET_DEFAULT"
+msgid "Reset to &default renderer settings"
+msgstr "Nulstil til &standard rendererindstillinger"
+
+msgctxt "ID_VIEW_RESET_OPTIMAL"
+msgid "Reset to &optimal renderer settings"
+msgstr "Nulstil til &optimale rendererindstillinger"
+
+msgctxt "POPUP"
+msgid "Video &Frame"
+msgstr "Video&billede"
+
+msgctxt "ID_VIEW_VF_HALF"
+msgid "&Half Size"
+msgstr "&Halv størrelse"
+
+msgctxt "ID_VIEW_VF_NORMAL"
+msgid "&Normal Size"
+msgstr "&Normal størrelse"
+
+msgctxt "ID_VIEW_VF_DOUBLE"
+msgid "&Double Size"
+msgstr "&Dobbelt størrelse"
+
+msgctxt "ID_VIEW_VF_STRETCH"
+msgid "&Stretch To Window"
+msgstr "&Stræk til vindue"
+
+msgctxt "ID_VIEW_VF_FROMINSIDE"
+msgid "Touch Window From &Inside"
+msgstr "Rør vindue &indefra"
+
+msgctxt "ID_VIEW_VF_ZOOM1"
+msgid "Zoom &1"
+msgstr "Zoom &1"
+
+msgctxt "ID_VIEW_VF_ZOOM2"
+msgid "Zoom &2"
+msgstr "Zoom &2"
+
+msgctxt "ID_VIEW_VF_FROMOUTSIDE"
+msgid "Touch Window From &Outside"
+msgstr "Rør vindue &udefra"
+
+msgctxt "POPUP"
+msgid "&Aspect Ratio"
+msgstr "&Højde-bredde-forhold"
+
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Standard (DAR)"
+
+msgctxt "ID_ASPECTRATIO_4_3"
+msgid "&4:3"
+msgstr "&4:3"
+
+msgctxt "ID_ASPECTRATIO_5_4"
+msgid "&5:4"
+msgstr "&5:4"
+
+msgctxt "ID_ASPECTRATIO_16_9"
+msgid "&16:9"
+msgstr "&16:9"
+
+msgctxt "ID_ASPECTRATIO_235_100"
+msgid "&235:100"
+msgstr "&235:100"
+
+msgctxt "ID_ASPECTRATIO_185_100"
+msgid "1&85:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "&Formod kvadratiske pixels (SAR)"
+
+msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
+msgid "&Correct Monitor/Desktop AR Diff"
+msgstr "&Korrigér monitor/skrivebord h-b-forskelle"
+
+msgctxt "POPUP"
+msgid "Pa&n&&Scan"
+msgstr "Pa&norering og skanning"
+
+msgctxt "ID_VIEW_INCSIZE"
+msgid "&Increase Size"
+msgstr "&Større"
+
+msgctxt "ID_VIEW_DECSIZE"
+msgid "&Decrease Size"
+msgstr "&Mindre"
+
+msgctxt "ID_VIEW_INCWIDTH"
+msgid "I&ncrease Width"
+msgstr "B&reddere"
+
+msgctxt "ID_VIEW_DECWIDTH"
+msgid "D&ecrease Width"
+msgstr "S&mallere"
+
+msgctxt "ID_VIEW_INCHEIGHT"
+msgid "In&crease Height"
+msgstr "Hø&jere"
+
+msgctxt "ID_VIEW_DECHEIGHT"
+msgid "Decre&ase Height"
+msgstr "Laver&e"
+
+msgctxt "ID_PANSCAN_MOVERIGHT"
+msgid "Move &Right"
+msgstr "Flyt til &højre"
+
+msgctxt "ID_PANSCAN_MOVELEFT"
+msgid "Move &Left"
+msgstr "Flyt til &venstre"
+
+msgctxt "ID_PANSCAN_MOVEUP"
+msgid "Move &Up"
+msgstr "Flyt &op"
+
+msgctxt "ID_PANSCAN_MOVEDOWN"
+msgid "Move &Down"
+msgstr "Flyt &ned"
+
+msgctxt "ID_PANSCAN_CENTER"
+msgid "Cen&ter"
+msgstr "Cent&reret"
+
+msgctxt "ID_VIEW_RESET"
+msgid "Re&set"
+msgstr "Nu&lstil"
+
+msgctxt "POPUP"
+msgid "On &Top"
+msgstr "Øvers&t"
+
+msgctxt "ID_ONTOP_DEFAULT"
+msgid "&Default"
+msgstr "&Standard"
+
+msgctxt "ID_ONTOP_ALWAYS"
+msgid "&Always"
+msgstr "&Altid"
+
+msgctxt "ID_ONTOP_WHILEPLAYING"
+msgid "While &Playing"
+msgstr "Under &afspilning"
+
+msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
+msgid "While Playing &Video"
+msgstr "Under afspilning af &video"
+
+msgctxt "ID_VIEW_OPTIONS"
+msgid "&Options..."
+msgstr "&Indstillinger..."
+
+msgctxt "POPUP"
+msgid "&Play"
+msgstr "&Afspil"
+
+msgctxt "ID_PLAY_PLAYPAUSE"
+msgid "&Play/Pause"
+msgstr "&Afspil/pause"
+
+msgctxt "ID_PLAY_STOP"
+msgid "&Stop"
+msgstr "&Stop"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Fra&me Step"
+msgstr "Billed&trin"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Gentag"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "&Uendeligt"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Fil"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Spilleliste"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "&Decrease Rate"
+msgstr "&Langsommere"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "&Increase Rate"
+msgstr "&Hurtigere"
+
+msgctxt "ID_PLAY_RESETRATE"
+msgid "R&eset Rate"
+msgstr "N&ulstil hastighed"
+
+msgctxt "ID_FILTERS"
+msgid "&Filters"
+msgstr "&Filtre"
+
+msgctxt "ID_SHADERS"
+msgid "S&haders"
+msgstr "S&hadere"
+
+msgctxt "ID_AUDIOS"
+msgid "&Audio Track"
+msgstr "&Lydspor"
+
+msgctxt "ID_SUBTITLES"
+msgid "Su&btitle Track"
+msgstr "&Undertekstspor"
+
+msgctxt "ID_VIDEO_STREAMS"
+msgid "Vide&o Track"
+msgstr "&Videospor"
+
+msgctxt "POPUP"
+msgid "&Volume"
+msgstr "&Lydstyrke"
+
+msgctxt "ID_VOLUME_UP"
+msgid "&Up"
+msgstr "&Op"
+
+msgctxt "ID_VOLUME_DOWN"
+msgid "&Down"
+msgstr "&Ned"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "&Mute"
+msgstr "&Mute"
+
+msgctxt "POPUP"
+msgid "Af&ter Playback"
+msgstr "Ef&ter afspilning"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Gør in&tet"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Afspil &næste fil i mappen"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Sluk &monitoren"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
+msgid "&Exit"
+msgstr "&Afslut"
+
+msgctxt "ID_AFTERPLAYBACK_STANDBY"
+msgid "&Stand By"
+msgstr "&Standby"
+
+msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
+msgid "&Hibernate"
+msgstr "&Dvale"
+
+msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
+msgid "Shut&down"
+msgstr "&Luk"
+
+msgctxt "ID_AFTERPLAYBACK_LOGOFF"
+msgid "Log &Off"
+msgstr "Log &af"
+
+msgctxt "ID_AFTERPLAYBACK_LOCK"
+msgid "&Lock"
+msgstr "&Lås"
+
+msgctxt "POPUP"
+msgid "&Navigate"
+msgstr "&Naviger"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "&Previous"
+msgstr "&Forrige"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "&Next"
+msgstr "&Næste"
+
+msgctxt "ID_NAVIGATE_GOTO"
+msgid "&Go To..."
+msgstr "&Gå til..."
+
+msgctxt "ID_NAVIGATE_TITLEMENU"
+msgid "&Title Menu"
+msgstr "&Titelmenu"
+
+msgctxt "ID_NAVIGATE_ROOTMENU"
+msgid "&Root Menu"
+msgstr "&Hovedmenu"
+
+msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
+msgid "&Subtitle Menu"
+msgstr "&Undertekstmenu"
+
+msgctxt "ID_NAVIGATE_AUDIOMENU"
+msgid "&Audio Menu"
+msgstr "&Lydmenu"
+
+msgctxt "ID_NAVIGATE_ANGLEMENU"
+msgid "An&gle Menu"
+msgstr "Vi&nkelmenu"
+
+msgctxt "ID_NAVIGATE_CHAPTERMENU"
+msgid "&Chapter Menu"
+msgstr "&Kapitelmenu"
+
+msgctxt "ID_FAVORITES"
+msgid "F&avorites"
+msgstr "Favori&tter"
+
+msgctxt "POPUP"
+msgid "&Help"
+msgstr "&Hjælp"
+
+msgctxt "ID_HELP_HOMEPAGE"
+msgid "&Home Page"
+msgstr "&Hjemmeside"
+
+msgctxt "ID_HELP_CHECKFORUPDATE"
+msgid "Check for &updates"
+msgstr "&Søg efter opdateringer"
+
+msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
+msgid "&Command Line Switches"
+msgstr "&Kommandolinjekontakter"
+
+msgctxt "ID_HELP_TOOLBARIMAGES"
+msgid "Download &Toolbar Images"
+msgstr "Download &værktøjslinjebilleder"
+
+msgctxt "ID_HELP_DONATE"
+msgid "&Donate"
+msgstr "&Donér"
+
+msgctxt "ID_HELP_ABOUT"
+msgid "&About..."
+msgstr "&Om..."
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.da.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.da.strings.po
new file mode 100644
index 000000000..c69e3d956
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.da.strings.po
@@ -0,0 +1,3973 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Jatyrael <cbf_x@hotmail.com>, 2015-2016
+# Chreddy <chreddy1@gmail.com>, 2016
+# Xebika <fidodkk@gmail.com>, 2015
+# scootergrisen, 2015-2017
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-06 01:08+0000\n"
+"Last-Translator: scootergrisen\n"
+"Language-Team: Danish (http://www.transifex.com/mpc-hc/mpc-hc/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "IDS_INFOBAR_LOCATION"
+msgid "Location"
+msgstr "Placering"
+
+msgctxt "IDS_INFOBAR_VIDEO"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDS_INFOBAR_AUDIO"
+msgid "Audio"
+msgstr "Lyd"
+
+msgctxt "IDS_INFOBAR_SUBTITLES"
+msgid "Subtitles"
+msgstr "Undertekster"
+
+msgctxt "IDS_INFOBAR_CHAPTER"
+msgid "Chapter"
+msgstr "Kapitel"
+
+msgctxt "IDS_CONTROLS_COMPLETING"
+msgid "Completing..."
+msgstr "Gennemfører..."
+
+msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
+msgid "Play Video"
+msgstr "Afspil video"
+
+msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
+msgid "Play Music"
+msgstr "Afspil Musik"
+
+msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
+msgid "Play Audio CD"
+msgstr "Afspil lyd-CD"
+
+msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
+msgid "Play DVD Movie"
+msgstr "Afspil DVD-film"
+
+msgctxt "IDS_PROPSHEET_PROPERTIES"
+msgid "Properties"
+msgstr "Egenskaber"
+
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Fil"
+
+msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
+msgid "&Default Style"
+msgstr "&Standardtypografi"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Spilleliste"
+
+msgctxt "IDS_FAVFILES"
+msgid "Files"
+msgstr "Filer"
+
+msgctxt "IDS_FAVDVDS"
+msgid "DVDs"
+msgstr "DVD'er"
+
+msgctxt "IDS_INFOBAR_CHANNEL"
+msgid "Channel"
+msgstr "Kanal"
+
+msgctxt "IDS_INFOBAR_TIME"
+msgid "Time"
+msgstr "Tid"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET"
+msgid "Sync Offset"
+msgstr "Synk. forskydning"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
+msgid "avg: %d ms, dev: %d ms"
+msgstr "gennemsnit: %d ms, afvigelse: %d ms"
+
+msgctxt "IDS_STATSBAR_JITTER"
+msgid "Jitter"
+msgstr "Jitter"
+
+msgctxt "IDS_STATSBAR_BITRATE"
+msgid "Bitrate"
+msgstr "Bitrate"
+
+msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
+msgid "(avg/cur)"
+msgstr "(gennemsnit/aktuelt)"
+
+msgctxt "IDS_STATSBAR_SIGNAL"
+msgid "Signal"
+msgstr "Signal"
+
+msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
+msgid "Strength: %d dB, Quality: %ld%%"
+msgstr "Styrke: %d dB, Kvalitet: %ld%%"
+
+msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
+msgid "Styles"
+msgstr "Typografi"
+
+msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
+msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
+msgstr "Hvis renderingsdestinationen er udefineret, vil SSA-/ASS-undertekster blive rendereret i forhold til videobilledet, mens alle andre tekst-undertekster vil blive renderet i forhold til vinduet."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Gentagelsestilstand: Spilleliste"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Gentagelsestilstand: Fil"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Gentag uendeligt: Til"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Gentag uendeligt: Fra"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Gentag uendeligt"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG0"
+msgid "Never (fastest approach)"
+msgstr "Aldrig (hurtigste fremgangsmåde)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG1"
+msgid "Only when switching different video types (default)"
+msgstr "Kun når der skiftes forskellige videotyper (standard)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG2"
+msgid "Always (slowest option)"
+msgstr "Altid (langsomst)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
+msgid "Not supported by some devices. Two video decoders always present in the filter graph."
+msgstr "Understøttes ikke af alle enheder. To video-dekodere er altid tilstede i filtergrafen."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
+msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
+msgstr "Hurtig, undtagen når der skiftes mellem forskellige video-strøm. Der er kun én video-dekoder tilstede i filtergrafen."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
+msgid "Not recommended. Only for testing purposes."
+msgstr "Anbefales ikke. Kun til testformål."
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG0"
+msgid "Never if possible (fastest, but not supported by most filters)"
+msgstr "Aldrig hvis det er muligt (hurtigste, men understøttes ikke af de fleste filtre)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG1"
+msgid "Only when switching different video types (default)"
+msgstr "Kun når der skiftes forskellige videotyper (standard)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG2"
+msgid "Always (may be required by some devices)"
+msgstr "Altid (kan være påkrævet af nogle enheder)"
+
+msgctxt "IDS_INFOBAR_PARENTAL_RATING"
+msgid "Parental rating"
+msgstr "Forældreklassifikation"
+
+msgctxt "IDS_PARENTAL_RATING"
+msgid "%d+"
+msgstr "%d+"
+
+msgctxt "IDS_NO_PARENTAL_RATING"
+msgid "Not rated"
+msgstr "Ikke klassificeret"
+
+msgctxt "IDS_INFOBAR_CONTENT"
+msgid "Content"
+msgstr "Indhold"
+
+msgctxt "IDS_CONTENT_MOVIE_DRAMA"
+msgid "Movie/Drama"
+msgstr "Film/Drama"
+
+msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
+msgid "News/Current affairs"
+msgstr "Nyheder/aktuelle begivenheder"
+
+msgctxt "IDS_SPEED_UNIT_G"
+msgid "GB/s"
+msgstr "GB/s"
+
+msgctxt "IDS_FILE_FAV_ADDED"
+msgid "File added to favorites"
+msgstr "Filen blev føjet til favoritter"
+
+msgctxt "IDS_DVD_FAV_ADDED"
+msgid "DVD added to favorites"
+msgstr "DVD føjet til favoritter"
+
+msgctxt "IDS_CAPTURE_SETTINGS"
+msgid "Capture Settings"
+msgstr "Indspilningsindstillinger"
+
+msgctxt "IDS_NAVIGATION_BAR"
+msgid "Navigation Bar"
+msgstr "Navigationslinje"
+
+msgctxt "IDS_SUBRESYNC_CAPTION"
+msgid "Subresync"
+msgstr "Undertekst gensynk."
+
+msgctxt "IDS_SUBRESYNC_CLN_TIME"
+msgid "Time"
+msgstr "Tidspunkt"
+
+msgctxt "IDS_SUBRESYNC_CLN_END"
+msgid "End"
+msgstr "Slut"
+
+msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
+msgid "Preview"
+msgstr "Forhåndsvis"
+
+msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
+msgid "Vob ID"
+msgstr "Vob ID"
+
+msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
+msgid "Cell ID"
+msgstr "Celle ID"
+
+msgctxt "IDS_SUBRESYNC_CLN_FORCED"
+msgid "Forced"
+msgstr "Tvunget"
+
+msgctxt "IDS_SUBRESYNC_CLN_TEXT"
+msgid "Text"
+msgstr "Tekst"
+
+msgctxt "IDS_SUBRESYNC_CLN_STYLE"
+msgid "Style"
+msgstr "Typografi"
+
+msgctxt "IDS_SUBRESYNC_CLN_FONT"
+msgid "Font"
+msgstr "Skrifttype"
+
+msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
+msgid "Failed to render some of the pins of the DVD Navigator filter"
+msgstr "Rendering af nogle pins i DVD navigationsfilteret mislykkedes"
+
+msgctxt "IDS_DVD_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for DVD playback"
+msgstr "Kunne ikke forespørge de nødvendige grænseflader til DVD-afspilning"
+
+msgctxt "IDS_CAPTURE_LIVE"
+msgid "Live"
+msgstr "Direkte"
+
+msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
+msgid "Can't add video capture filter to the graph"
+msgstr "Kan ikke føje videoindspilningsfilter til grafen"
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
+msgid "Can't add audio capture filter to the graph"
+msgstr "Kan ikke føje lydindspilningsfilter til grafen"
+
+msgctxt "IDS_CAPTURE_ERROR_DEVICE"
+msgid "Could not open capture device."
+msgstr "Kunne ikke åbne indspilningsenhed."
+
+msgctxt "IDS_INVALID_PARAMS_ERROR"
+msgid "Can't open, invalid input parameters"
+msgstr "Kan ikke åbne, ugyldige input-parametre"
+
+msgctxt "IDS_EDIT_LIST_EDITOR"
+msgid "Edit List Editor"
+msgstr "Rediger list-editor"
+
+msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
+msgid "The entered time is greater than the file duration."
+msgstr "Den indtastede tid er større end filens varighed."
+
+msgctxt "IDS_MISSING_ICONS_LIB"
+msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
+msgstr "Ikon-biblioteket \"mpciconlib.dll\" mangler.\nAfspillerens standard-ikon vil blive brugt ved filtilknytninger.\nGeninstallér venligst MPC-HC for at få \"mpciconlib.dll\"."
+
+msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
+msgid "File"
+msgstr "Fil"
+
+msgctxt "IDS_SUBDL_DLG_LANGUAGE_COL"
+msgid "Language"
+msgstr "Sprog"
+
+msgctxt "IDS_SUBDL_DLG_FORMAT_COL"
+msgid "Format"
+msgstr "Format"
+
+msgctxt "IDS_SUBDL_DLG_DISC_COL"
+msgid "Disc"
+msgstr "Disk"
+
+msgctxt "IDS_SUBDL_DLG_TITLES_COL"
+msgid "Title(s)"
+msgstr "Titler"
+
+msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
+msgid "CharSet"
+msgstr "Tegnsæt"
+
+msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
+msgid "Unicode"
+msgstr "Unicode"
+
+msgctxt "IDS_SUBRESYNC_CLN_LAYER"
+msgid "Layer"
+msgstr "Lag"
+
+msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
+msgid "Actor"
+msgstr "Skuespiller"
+
+msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
+msgid "Effect"
+msgstr "Effekt"
+
+msgctxt "IDS_PLAYLIST_CAPTION"
+msgid "Playlist"
+msgstr "Spilleliste"
+
+msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
+msgid "On/Off"
+msgstr "Til/Fra"
+
+msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
+msgid "From (FPS)"
+msgstr "Fra (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
+msgid "To (FPS)"
+msgstr "Til (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
+msgid "Display mode (Hz)"
+msgstr "Skærm-tilstand (Hz)"
+
+msgctxt "IDS_PPAGE_FS_DEFAULT"
+msgid "Default"
+msgstr "Standard"
+
+msgctxt "IDS_PPAGE_FS_OTHER"
+msgid "Other"
+msgstr "Andre"
+
+msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
+msgid "System Default"
+msgstr "Systemstandard"
+
+msgctxt "IDS_GRAPH_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for playback"
+msgstr "Kunne ikke forespørge de nødvendige grænseflader til afspilning"
+
+msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
+msgid "Could not set target window for graph notification"
+msgstr "Kunne ikke angive destinationsvindue til graf-notifikation"
+
+msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
+msgid "Failed to render all pins of the DVD Navigator filter"
+msgstr "Kunne ikke rendere alle pins i DVD navigationsfilteret"
+
+msgctxt "IDS_PLAYLIST_OPEN"
+msgid "&Open"
+msgstr "&Åbn"
+
+msgctxt "IDS_PLAYLIST_ADD"
+msgid "A&dd"
+msgstr "T&ilføj"
+
+msgctxt "IDS_PLAYLIST_REMOVE"
+msgid "&Remove"
+msgstr "&Fjern"
+
+msgctxt "IDS_PLAYLIST_CLEAR"
+msgid "C&lear"
+msgstr "R&yd"
+
+msgctxt "IDS_PLAYLIST_COPYTOCLIPBOARD"
+msgid "&Copy to clipboard"
+msgstr "&Kopiér til udklipsholder"
+
+msgctxt "IDS_PLAYLIST_SAVEAS"
+msgid "&Save As..."
+msgstr "&Gem som..."
+
+msgctxt "IDS_PLAYLIST_SORTBYLABEL"
+msgid "Sort by &label"
+msgstr "Sortér efter &etiket"
+
+msgctxt "IDS_PLAYLIST_SORTBYPATH"
+msgid "Sort by &path"
+msgstr "Sortér efter &sti"
+
+msgctxt "IDS_PLAYLIST_RANDOMIZE"
+msgid "R&andomize"
+msgstr "&Tilfældig rækkefølge"
+
+msgctxt "IDS_PLAYLIST_RESTORE"
+msgid "R&estore"
+msgstr "G&endan"
+
+msgctxt "IDS_SUBRESYNC_SEPARATOR"
+msgid "&Separator"
+msgstr "&Separator"
+
+msgctxt "IDS_SUBRESYNC_DELETE"
+msgid "&Delete"
+msgstr "&Slet"
+
+msgctxt "IDS_SUBRESYNC_DUPLICATE"
+msgid "D&uplicate"
+msgstr "D&uplikér"
+
+msgctxt "IDS_SUBRESYNC_RESET"
+msgid "&Reset"
+msgstr "&Nulstil"
+
+msgctxt "IDS_MPLAYERC_104"
+msgid "Subtitle Delay -"
+msgstr "Undertekst forsinkelse -"
+
+msgctxt "IDS_MPLAYERC_105"
+msgid "Subtitle Delay +"
+msgstr "Undertekst forsinkelse +"
+
+msgctxt "IDS_FILE_SAVE_THUMBNAILS"
+msgid "Save thumbnails"
+msgstr "Gem miniaturer"
+
+msgctxt "IDD_PPAGEPLAYBACK"
+msgid "Playback"
+msgstr "Afspilning"
+
+msgctxt "IDD_PPAGEPLAYER"
+msgid "Player"
+msgstr "Afspiller"
+
+msgctxt "IDD_PPAGEDVD"
+msgid "Playback::DVD/OGM"
+msgstr "Afspilning::DVD/OGM"
+
+msgctxt "IDD_PPAGESUBTITLES"
+msgid "Subtitles"
+msgstr "Undertekster"
+
+msgctxt "IDD_PPAGEFORMATS"
+msgid "Player::Formats"
+msgstr "Afspiller::Formater"
+
+msgctxt "IDD_PPAGETWEAKS"
+msgid "Tweaks"
+msgstr "Finjusteringer"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER"
+msgid "Internal Filters::Audio Switcher"
+msgstr "Interne filtre::Lyd-omskifter"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS"
+msgid "External Filters"
+msgstr "Eksterne filtre"
+
+msgctxt "IDD_PPAGESHADERS"
+msgid "Playback::Shaders"
+msgstr "Afspilning::Shadere"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Ressourcer"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Diverse"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "Medie info"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Afspilning::Indspil"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Afspilning::Sync Rendererindstillinger"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Afspilning::Fuldskærm"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Interne filtre::Lyd-renderer"
+
+msgctxt "IDS_AUDIOSWITCHER"
+msgid "Audio Switcher"
+msgstr "Lyd-omskifter"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
+msgid "New version of the icon library"
+msgstr "Ny version af ikon-biblioteket"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
+msgid "Do you want to reassociate the icons?"
+msgstr "Vil du tilknytte ikonerne igen?"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
+msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
+msgstr "Dette vil rette de ikoner som bliver vist forkert efter en opdatering af ikon-biblioteket.\nFiltilknytningerne bliver ikke ændret, kun de tilhørende ikoner bliver genopfrisket."
+
+msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
+msgid "Old Video Renderer"
+msgstr "Old Video Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
+msgid "Overlay Mixer Renderer"
+msgstr "Overlay Mixer Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
+msgid "Video Mixing Renderer 9 (windowed)"
+msgstr "Video Mixing Renderer 9 (windowed)"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
+msgid "Video Mixing Renderer 9 (renderless)"
+msgstr "Video Mixing Renderer 9 (renderless)"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR"
+msgid "Enhanced Video Renderer"
+msgstr "Enhanced Video Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
+msgid "Enhanced Video Renderer (custom presenter)"
+msgstr "Enhanced Video Renderer (custom presenter)"
+
+msgctxt "IDS_PPAGE_OUTPUT_DXR"
+msgid "Haali Video Renderer"
+msgstr "Haali Video Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Null (alt)"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Null (ukomprimeret)"
+
+msgctxt "IDS_PPAGE_OUTPUT_MADVR"
+msgid "madVR"
+msgstr "madVR"
+
+msgctxt "IDD_PPAGEACCELTBL"
+msgid "Player::Keys"
+msgstr "Afspiller::Genvejstaster"
+
+msgctxt "IDD_PPAGESUBSTYLE"
+msgid "Subtitles::Default Style"
+msgstr "Undertekster::Standardtypografi"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS"
+msgid "Internal Filters"
+msgstr "Interne filtre"
+
+msgctxt "IDD_PPAGELOGO"
+msgid "Player::Logo"
+msgstr "Afspiller::Logo"
+
+msgctxt "IDD_PPAGEOUTPUT"
+msgid "Playback::Output"
+msgstr "Afspilning::Output"
+
+msgctxt "IDD_PPAGEWEBSERVER"
+msgid "Player::Web Interface"
+msgstr "Afspiller::Webgrænseflade"
+
+msgctxt "IDD_FILEPROPDETAILS"
+msgid "Details"
+msgstr "Detaljer"
+
+msgctxt "IDD_FILEPROPCLIP"
+msgid "Clip"
+msgstr "Klip"
+
+msgctxt "IDC_DSSYSDEF"
+msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
+msgstr "Standard video-renderer filter til DirectShow. Andre vil falde tilbage til denne når de ikke kan benyttes. På Windows XP er denne det samme som VMR-7 (windowed)."
+
+msgctxt "IDC_DSOLD"
+msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
+msgstr "Dette er standard renderer på Windows 9x/me/2k. Afhængig af synligheden af video-vinduet og dit grafikkorts formåen, vil det dynamisk skifte mellem renderingstilstandende GDI, DirectDraw og Overlay."
+
+msgctxt "IDC_DSOVERLAYMIXER"
+msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
+msgstr "Renderer altid i Overlay. Generelt er kun YUV-formater tilladt, men de vises direkte uden konvertering til RGB. Dette er den hurtigste renderingsmetode af alle og den eneste hvor du kan være sikker på fuldskærm videospejlning til TV-out aktivering."
+
+msgctxt "IDC_DSVMR9WIN"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Kun tilgængelig hvis du har DirectX9 installeret. Meget stabil men den vil aldrig bruger Overlay rendering og kan derfor være en smule langsommere end Overlay mixer."
+
+msgctxt "IDC_DSVMR9REN"
+msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
+msgstr "Samme som VMR-9 (windowed), men med allokationspræsentation-pluginet fra MPC-HC til undertekster. Overlay videospejling vil MÅSKE virke. Skrivebord-farverum med \"Ægte farver\" anbefales. Anbefales til Windows XP."
+
+msgctxt "IDC_DSDXR"
+msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
+msgstr "Samme som VMR-9 (renderless), men bruger ægte bi-kubisk gensampling."
+
+msgctxt "IDC_DSNULL_COMP"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Forbinder til en hvilken som helst video-lignende medietype og sender ikke de indkommende bidder nogen steder hen. Brug den når du ikke har brug for visning af videoen og gerne vil undgå unødig brug af CPU-ressourcerne."
+
+msgctxt "IDC_DSNULL_UNCOMP"
+msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
+msgstr "Samme som den normale Null-renderer, men den her vil kun forbinde til ukomprimerede typer."
+
+msgctxt "IDC_DSEVR"
+msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
+msgstr "Kun tilgængelige i Vista eller senere, eller i XP med minimum .NET Framework 3.5 installeret."
+
+msgctxt "IDC_DSEVR_CUSTOM"
+msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
+msgstr "Samme som EVR, men med allokationspræsentationen fra MPC-HC til undertekster og efterbearbejdning. Anbefales til Windows Vista eller senere."
+
+msgctxt "IDC_DSMADVR"
+msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
+msgstr "Høj-kvalitets renderer, kræver en GPU som understøtter D3D9 eller senere."
+
+msgctxt "IDC_DSSYNC"
+msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
+msgstr "Samme som EVR (CP), men tilbyder en del indstillinger til at synkronisere billedhastigheden med skærmens opdateringshastighed for at forhindre oversprungne eller dobbelte videobilleder."
+
+msgctxt "IDC_RMSYSDEF"
+msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
+msgstr "Real's egen renderer. SMIL scripts vil virker, men interaktion vil formodentligt ikke virke. Bruger DirectDraw og køre i Overlay når den kan."
+
+msgctxt "IDC_RMDX9"
+msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Output fra Real's motor renderet af den DX9-baseret allokationspræsentation fra VMR-9 (renderless)."
+
+msgctxt "IDC_QTSYSDEF"
+msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
+msgstr "QuickTime's egen renderer. Bliver lidt langsom når videoens område ændre størrelse eller delvist dækket af andre vinduer. Den kan godt lide at falde tilbage til GDI når Overlay ikke er tilgængelig."
+
+msgctxt "IDC_QTDX9"
+msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Output fra QuickTime's motor renderet af den DX9-baseret allokationspræsentation fra VMR-9 (renderless)."
+
+msgctxt "IDC_REGULARSURF"
+msgid "Video surface will be allocated as a regular offscreen surface."
+msgstr "Video-overflade vil blive allokeret som en almindelig overflade uden for skærmbilledet."
+
+msgctxt "IDS_PPAGE_OUTPUT_SYNC"
+msgid "Sync Renderer"
+msgstr "Sync Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
+msgid "Regular offscreen plain surface"
+msgstr "Almindelig simpel overflade uden for skærmbilledet"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
+msgid "2D surfaces"
+msgstr "2D overflader"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
+msgid "3D surfaces (recommended)"
+msgstr "3D overflader (anbefalet)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
+msgid "Nearest neighbor"
+msgstr "Nærmeste nabo"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
+msgid "Bilinear"
+msgstr "Bi-lineær"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
+msgid "Bilinear (PS 2.0)"
+msgstr "Bi-lineær (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
+msgid "Bicubic A=-0.60 (PS 2.0)"
+msgstr "Bi-kubisk A=-0.60 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
+msgid "Bicubic A=-0.75 (PS 2.0)"
+msgstr "Bi-kubisk A=-0.75 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
+msgid "Bicubic A=-1.00 (PS 2.0)"
+msgstr "Bi-kubisk A=-1.00 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
+msgid "**unavailable**"
+msgstr "**ikke tilgængelig**"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
+msgid "The selected renderer is not installed."
+msgstr "Den valgte renderer er ikke installeret."
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Null (alt)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Null (ukomprimeret)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Intern lyd-renderer"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
+msgid "Name"
+msgstr "Navn"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
+msgid "MIME Type"
+msgstr "MIME-type"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
+msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
+msgstr "For at kunne vise en indlejret ressource i din browser skal du aktivere webgrænsefladen.\n\nBrug \"Gem som\" knappen hvis du kun ønsker at gemme oplysningerne."
+
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Download undertekster..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Upload undertekster..."
+
+msgctxt "IDS_SUBFILE_DELAY"
+msgid "Delay (ms):"
+msgstr "Forsinkelse (ms):"
+
+msgctxt "IDS_SPEEDSTEP_AUTO"
+msgid "Auto"
+msgstr "Auto"
+
+msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
+msgid "There are no customized keys to export."
+msgstr "Der er ingen brugerdefinerede nøgler at eksportere."
+
+msgctxt "IDS_RFS_NO_FILES"
+msgid "No media files found in the archive"
+msgstr "Ingen mediefiler fundet i arkivet"
+
+msgctxt "IDS_RFS_COMPRESSED"
+msgid "Compressed files are not supported"
+msgstr "Komprimeret filer understøttes ikke"
+
+msgctxt "IDS_RFS_ENCRYPTED"
+msgid "Encrypted files are not supported"
+msgstr "Krypteret filer understøttes ikke"
+
+msgctxt "IDS_RFS_MISSING_VOLS"
+msgid "Couldn't find all archive volumes"
+msgstr "Kunne ikke finde alle arkiv volumener"
+
+msgctxt "IDC_TEXTURESURF2D"
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Videooverflade vil blive allokeret som en struktur men anden funktionerne vil stadig blive brugt til at kopiere og strække den over backbufferen. Kræver et grafikkort der kan allokere 32-bit, RGBA, ikke-potens-af-to struktur størrelser og minimum i videoens opløsning."
+
+msgctxt "IDC_TEXTURESURF3D"
+msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
+msgstr "Videooverflade vil blive allokeret som en struktur og tegnet som to trekanter i 3D. Når antialiasing er slået til i grafikkortindstillingerne kan det have en negativ indvirkning på renderingshastigheden."
+
+msgctxt "IDC_DX9RESIZER_COMBO"
+msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
+msgstr "Der er ingen understøttelse af Pixel Shader 2.0, enkel bi-lineær bruges automatisk."
+
+msgctxt "IDC_DSVMR9LOADMIXER"
+msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
+msgstr "Sætter VMR-9 (renderless) i mixer-tilstand, hvilket betyder at de fleste styringsmuligheder på egenskaber-siden vil virke og den vil bruge en separat arbejdstråd til at rendere billeder."
+
+msgctxt "IDC_DSVMR9YUVMIXER"
+msgid "Improves performance at the cost of some compatibility of the renderer."
+msgstr "Forbedre ydelsen på bekostning af nogen kompatibilitet for rendereren."
+
+msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "Reduces tearing but prevents the toolbar from being shown."
+msgstr "Reducer iturivning men forhindre værktøjslinjen i at blive vist."
+
+msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Reduces tearing by bypassing the default VSync built into D3D."
+msgstr "Reducere iturivning ved at omgå standard lodret synkroniseringen indbygget i D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Tuner skanning"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Undertekster er ikke indlæst eller ikke understøttet renderer."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Gemmer kompilerede shadere i den lokale AppData for at forbedre indlæsningstiden."
+
+msgctxt "IDS_SRC_VTS"
+msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
+msgstr "Åbn VTS_xx_0.ifo for at indlæse VTS_xx_x.vob filer i ét stykke"
+
+msgctxt "IDS_SRC_RFS"
+msgid "Based on RARFileSource, doesn't support compressed files"
+msgstr "Baseret på RARFileSource, understøtter ikke komprimeret filer"
+
+msgctxt "IDS_INTERNAL_LAVF"
+msgid "Uses LAV Filters"
+msgstr "Bruger LAV Filters"
+
+msgctxt "IDS_INTERNAL_LAVF_WMV"
+msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
+msgstr "Bruger LAV Filters. Deaktiveret som standard, da Microsoft filtre generelt er mere stabile til de formater.\nHvis du vælger at bruge de interne filtre, så aktivér dem til både kilde og afkodning for at få en bedre afspilningsoplevelse."
+
+msgctxt "IDS_AG_TOGGLE_NAVIGATION"
+msgid "Toggle Navigation Bar"
+msgstr "Navigationslinje til/fra"
+
+msgctxt "IDS_AG_VSYNCACCURATE"
+msgid "Accurate VSync"
+msgstr "Præcis lodret synkronisering"
+
+msgctxt "IDC_CHECK_RELATIVETO"
+msgid "If the rendering target is left undefined, it will be inherited from the default style."
+msgstr "Hvis renderingsdestinationen er udefineret, vil det blive nedarvet fra standardtypografien."
+
+msgctxt "IDC_CHECK_NO_SUB_ANIM"
+msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
+msgstr "Forhindr animation af undertekst. CPU-forbruget vil blive mindre hvis denne indstilling slås til. Du kan bruge den hvis du oplever blinkende undertekster."
+
+msgctxt "IDC_SUBPIC_TO_BUFFER"
+msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
+msgstr "Et større antal mellemlageret undertekst-billeder bør generelt forbedre renderingsydelsen på bekostning af et højere forbrug af video-RAM på GPU'en."
+
+msgctxt "IDC_BUTTON_EXT_SET"
+msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
+msgstr "Efter klik på denne knap, vil markeringerne i format-gruppen vise de faktiske filtilknytninger til MPC-HC. En nyligt tilføjet udvidelse vil typisk gøre den grålig, så husk at markere den igen før denne dialogboks lukkes!"
+
+msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
+msgstr "Deaktiveres denne indstilling vil det forhindre undertekster i at blinke, men det kan få video-rendereren til at springe nogle billeder over."
+
+msgctxt "ID_PLAY_PLAY"
+msgid "Play\nPlay"
+msgstr "Afspil\nAfspil"
+
+msgctxt "ID_PLAY_PAUSE"
+msgid "Pause\nPause"
+msgstr "Pause\nPause"
+
+msgctxt "ID_PLAY_STOP"
+msgid "Stop\nStop"
+msgstr "Stop\nStop"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Step\nStep"
+msgstr "Trin\nTrin"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "Decrease speed\nDecrease speed"
+msgstr "Langsommere\nLangsommere"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "Increase speed\nIncrease speed"
+msgstr "Hurtigere\nHurtigere"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "Mute"
+msgstr "Mute"
+
+msgctxt "ID_VOLUME_MUTE_OFF"
+msgid "Unmute"
+msgstr "Slå lyden til"
+
+msgctxt "ID_VOLUME_MUTE_DISABLED"
+msgid "No audio"
+msgstr "Ingen lyd"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "Skip back\nSkip back"
+msgstr "Spring tilbage\nSpring tilbage"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "Skip forward\nSkip forward"
+msgstr "Spring fremad\nSpring fremad"
+
+msgctxt "IDS_SUBRESYNC_ORIGINAL"
+msgid "&Original"
+msgstr "&Original"
+
+msgctxt "IDS_SUBRESYNC_CURRENT"
+msgid "&Current"
+msgstr "&Aktuel"
+
+msgctxt "IDS_SUBRESYNC_EDIT"
+msgid "&Edit"
+msgstr "&Rediger"
+
+msgctxt "IDS_SUBRESYNC_YES"
+msgid "&Yes"
+msgstr "&Ja"
+
+msgctxt "IDS_SUBRESYNC_NO"
+msgid "&No"
+msgstr "&Nej"
+
+msgctxt "IDS_SUBRESYNC_DECREASE"
+msgid "&Decrease"
+msgstr "&Formindsk"
+
+msgctxt "IDS_SUBRESYNC_INCREASE"
+msgid "&Increase"
+msgstr "&Forøg"
+
+msgctxt "IDS_OPTIONS_CAPTION"
+msgid "Options"
+msgstr "Indstillinger"
+
+msgctxt "IDS_SHADERS_SELECT"
+msgid "&Select Shaders..."
+msgstr "&Vælg shadere..."
+
+msgctxt "IDS_SHADERS_DEBUG"
+msgid "&Debug Shaders..."
+msgstr "Fejlfind &shadere..."
+
+msgctxt "IDS_FAVORITES_ADD"
+msgid "&Add to Favorites..."
+msgstr "&Føj til favoritter..."
+
+msgctxt "IDS_FAVORITES_ORGANIZE"
+msgid "&Organize Favorites..."
+msgstr "&Håndtér favoritter..."
+
+msgctxt "IDS_PLAYLIST_SHUFFLE"
+msgid "Sh&uffle"
+msgstr "&Bland"
+
+msgctxt "IDS_PLAYLIST_SHOWFOLDER"
+msgid "Ope&n file location"
+msgstr "&Åbn filplacering"
+
+msgctxt "IDS_CONTROLS_CLOSING"
+msgid "Closing..."
+msgstr "Lukker..."
+
+msgctxt "IDS_CONTROLS_PLAYING"
+msgid "Playing"
+msgstr "Afspiller"
+
+msgctxt "IDS_CONTROLS_PAUSED"
+msgid "Paused"
+msgstr "Sat på pause"
+
+msgctxt "IDS_AG_EDL_NEW_CLIP"
+msgid "EDL new clip"
+msgstr "EDL nyt klip"
+
+msgctxt "IDS_RECENT_FILES_CLEAR"
+msgid "&Clear list"
+msgstr "&Ryd liste"
+
+msgctxt "IDS_RECENT_FILES_QUESTION"
+msgid "Are you sure that you want to delete recent files list?"
+msgstr "Er du sikker på, at du vil slette listen over seneste filer?"
+
+msgctxt "IDS_AG_EDL_SAVE"
+msgid "EDL save"
+msgstr "EDL gem"
+
+msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time Correction"
+msgstr "Aktivér korrigering af billedtid"
+
+msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
+msgid "Toggle EDL window"
+msgstr "EDL vindue til/fra"
+
+msgctxt "IDS_AG_EDL_IN"
+msgid "EDL set In"
+msgstr "EDL sæt ind"
+
+msgctxt "IDS_AG_EDL_OUT"
+msgid "EDL set Out"
+msgstr "EDL sæt ud"
+
+msgctxt "IDS_AG_PNS_ROTATEX_M"
+msgid "PnS Rotate X-"
+msgstr "PnS roter X-"
+
+msgctxt "IDS_AG_PNS_ROTATEY_P"
+msgid "PnS Rotate Y+"
+msgstr "PnS roter Y+"
+
+msgctxt "IDS_AG_PNS_ROTATEY_M"
+msgid "PnS Rotate Y-"
+msgstr "PnS roter Y-"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_P"
+msgid "PnS Rotate Z+"
+msgstr "PnS roter Z+"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_M"
+msgid "PnS Rotate Z-"
+msgstr "PnS roter Z-"
+
+msgctxt "IDS_AG_TEARING_TEST"
+msgid "Tearing Test"
+msgstr "Iturivningstest"
+
+msgctxt "IDS_SCALE_16_9"
+msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Skalér til 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_WIDESCREEN"
+msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zoom til widescreen,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_ULTRAWIDE"
+msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zoom til ultra-widescreen,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_PLAYLIST_HIDEFS"
+msgid "&Hide on Fullscreen"
+msgstr "&Skjul i fuldskærm"
+
+msgctxt "IDS_CONTROLS_STOPPED"
+msgid "Stopped"
+msgstr "Stoppet"
+
+msgctxt "IDS_CONTROLS_BUFFERING"
+msgid "Buffering... (%d%%)"
+msgstr "Gemmer i buffer... (%d%%)"
+
+msgctxt "IDS_CONTROLS_CAPTURING"
+msgid "Capturing..."
+msgstr "Indspilning..."
+
+msgctxt "IDS_CONTROLS_OPENING"
+msgid "Opening..."
+msgstr "Åbner..."
+
+msgctxt "IDS_CONTROLS_CLOSED"
+msgid "Closed"
+msgstr "Lukket"
+
+msgctxt "IDS_SUBTITLES_OPTIONS"
+msgid "&Options..."
+msgstr "&Indstillinger..."
+
+msgctxt "IDS_SUBTITLES_STYLES"
+msgid "&Styles..."
+msgstr "&Typografi..."
+
+msgctxt "IDS_SUBTITLES_RELOAD"
+msgid "&Reload"
+msgstr "&Genindlæs"
+
+msgctxt "IDS_SUBTITLES_ENABLE"
+msgid "&Enable"
+msgstr "&Aktivér"
+
+msgctxt "IDS_PANSCAN_EDIT"
+msgid "&Edit..."
+msgstr "&Rediger..."
+
+msgctxt "IDS_INFOBAR_TITLE"
+msgid "Title"
+msgstr "Titel"
+
+msgctxt "IDS_INFOBAR_AUTHOR"
+msgid "Author"
+msgstr "Forfatter"
+
+msgctxt "IDS_INFOBAR_COPYRIGHT"
+msgid "Copyright"
+msgstr "Ophavsret"
+
+msgctxt "IDS_INFOBAR_RATING"
+msgid "Rating"
+msgstr "Klassificering"
+
+msgctxt "IDS_INFOBAR_DESCRIPTION"
+msgid "Description"
+msgstr "Beskrivelse"
+
+msgctxt "IDS_INFOBAR_DOMAIN"
+msgid "Domain"
+msgstr "Område"
+
+msgctxt "IDS_AG_CLOSE"
+msgid "Close"
+msgstr "Luk"
+
+msgctxt "IDS_AG_NONE"
+msgid "None"
+msgstr "Ingen"
+
+msgctxt "IDS_AG_COMMAND"
+msgid "Command"
+msgstr "Kommando"
+
+msgctxt "IDS_AG_KEY"
+msgid "Key"
+msgstr "Tast"
+
+msgctxt "IDS_AG_MOUSE"
+msgid "Mouse Windowed"
+msgstr "Mus i vindue"
+
+msgctxt "IDS_AG_MOUSE_FS"
+msgid "Mouse Fullscreen"
+msgstr "Mus i fuldskærm"
+
+msgctxt "IDS_AG_APP_COMMAND"
+msgid "App Command"
+msgstr "App kommando"
+
+msgctxt "IDS_AG_MEDIAFILES"
+msgid "Media files (all types)"
+msgstr "Mediefiler (alle typer)"
+
+msgctxt "IDS_AG_ALLFILES"
+msgid "All files (*.*)|*.*|"
+msgstr "Alle filer (*.*)|*.*|"
+
+msgctxt "IDS_AG_AUDIOFILES"
+msgid "Audio files (all types)"
+msgstr "Lydfiler (alle typer)"
+
+msgctxt "IDS_AG_NOT_KNOWN"
+msgid "Not known"
+msgstr "Ukendt"
+
+msgctxt "IDS_MPLAYERC_0"
+msgid "Quick Open File"
+msgstr "Åbn fil hurtigt"
+
+msgctxt "IDS_AG_OPEN_FILE"
+msgid "Open File"
+msgstr "Åbn fil"
+
+msgctxt "IDS_AG_OPEN_DVD"
+msgid "Open DVD/BD"
+msgstr "Åbn DVD/BD"
+
+msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
+msgid "Failed to set post-resize shaders"
+msgstr "Anvendelse af efter-størrelsesændring shadere mislykkedes"
+
+msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
+msgid "Failed to set both pre-resize and post-resize shaders"
+msgstr "Anvendelse af både før-størrelsesændring og efter-størrelsesændring shadere mislykkedes"
+
+msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
+msgid "Shaders are recompiled automatically when the corresponding files are modified."
+msgstr "Shadere genkompileres automatisk når de tilsvarende filer ændres."
+
+msgctxt "IDS_SHADER_DLL_ERR_0"
+msgid "Cannot load %s, pixel shaders will not work."
+msgstr "Kan ikke indlæs %s, pixel shadere vil ikke virke."
+
+msgctxt "IDS_SHADER_DLL_ERR_1"
+msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
+msgstr "Kan ikke finde funktionsindgangspunkt i %s, pixel shadere vil ikke virke."
+
+msgctxt "IDS_OSD_SHADERS_PRESET"
+msgid "Shader preset: %s"
+msgstr "Shader-forudindstilling: %s"
+
+msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
+msgid "Next Shader Preset"
+msgstr "Næste shader-forudindstilling"
+
+msgctxt "IDS_AG_SHADERS_PRESET_PREV"
+msgid "Prev Shader Preset"
+msgstr "Forrige shader-forudindstilling"
+
+msgctxt "IDS_STRING_COLON"
+msgid "%s:"
+msgstr "%s:"
+
+msgctxt "IDS_RECORD_START"
+msgid "Record"
+msgstr "Optag"
+
+msgctxt "IDS_RECORD_STOP"
+msgid "Stop"
+msgstr "Stop"
+
+msgctxt "IDS_BALANCE"
+msgid "L = R"
+msgstr "V = H"
+
+msgctxt "IDS_BALANCE_L"
+msgid "L +%d%%"
+msgstr "V +%d%%"
+
+msgctxt "IDS_BALANCE_R"
+msgid "R +%d%%"
+msgstr "H +%d%%"
+
+msgctxt "IDS_VOLUME"
+msgid "%d%%"
+msgstr "%d%%"
+
+msgctxt "IDS_BOOST"
+msgid "+%d%%"
+msgstr "+%d%%"
+
+msgctxt "IDS_PLAYLIST_ADDFOLDER"
+msgid "Add containing &folder"
+msgstr "Tilføj indeholdende &mappe"
+
+msgctxt "IDS_HW_INDICATOR"
+msgid "[H/W]"
+msgstr "[H/W]"
+
+msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
+msgid "Software Decoding"
+msgstr "Software-dekodning"
+
+msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
+msgid "Playback rate"
+msgstr "Afspilningshastighed"
+
+msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
+msgid "&Copy filters list to clipboard"
+msgstr "&Kopiér filterliste til udklipsholder"
+
+msgctxt "IDS_CREDENTIALS_SERVER"
+msgid "Enter server credentials"
+msgstr "Indtast serverens legitimationsoplysninger"
+
+msgctxt "IDS_CREDENTIALS_CONNECT"
+msgid "Enter your credentials to connect"
+msgstr "Indtast dine legitimationsoplysninger for at oprette forbindelse"
+
+msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
+msgid "Save custom style"
+msgstr "Gem brugerdefineret typografi"
+
+msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
+msgid "Education/Science/Factual topics"
+msgstr "Uddannelse/Videnskab/Faktuelle emner"
+
+msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
+msgid "Hides controls and panels also in windowed mode."
+msgstr "Skjul kontrolelementer og paneler, også i vindue-tilstand."
+
+msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
+msgid "Prevent external subtitle renderer to be loaded when internal is in use."
+msgstr "Forhindre eksterne undertekst-renderer i at blive indlæst når interne er i brug."
+
+msgctxt "IDS_PPAGEADVANCED_COL_NAME"
+msgid "Name"
+msgstr "Navn"
+
+msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
+msgid "Value"
+msgstr "Værdi"
+
+msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
+msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
+msgstr "Højeste antal filer i \"Seneste filer\" menuen og for hvilke placeringen potentielt er gemt."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
+msgid "Remember file position only for files longer than N minutes."
+msgstr "Husk kun filplacering for filer der er længere end N minutter."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
+msgid "Remember file position also for audio files."
+msgstr "Husk også filplacering for lydfiler."
+
+msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
+msgid "Do Nothing"
+msgstr "Gør intet"
+
+msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
+msgid "Play next file in the folder"
+msgstr "Afspil næste fil i mappen"
+
+msgctxt "IDS_AFTER_PLAYBACK_REWIND"
+msgid "Rewind current file"
+msgstr "Spol filen tilbage"
+
+msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
+msgid "Close"
+msgstr "Luk"
+
+msgctxt "IDS_AFTER_PLAYBACK_EXIT"
+msgid "Exit"
+msgstr "Afslut"
+
+msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
+msgid "Turn off the monitor"
+msgstr "Sluk monitoren"
+
+msgctxt "IDS_IMAGE_JPEG_QUALITY"
+msgid "JPEG Image"
+msgstr "JPEG billede"
+
+msgctxt "IDS_IMAGE_QUALITY"
+msgid "Quality (%):"
+msgstr "Kvalitet (%):"
+
+msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
+msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
+msgstr "Maksimal størrelse (NxNpx) af et cover-art indlæst i kun-lyd-tilstanden."
+
+msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
+msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
+msgstr "Undertekstens forsinkelse vil blive forøget/formindsket med denne værdi hver gang genvejstasten bruges (%s/%s)."
+
+msgctxt "IDS_HOTKEY_NOT_DEFINED"
+msgid "<not defined>"
+msgstr "<udefineret>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Se"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Flyt op"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Flyt ned"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sortér efter LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Fjern alle"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Er du sikker på, at du vil fjerne alle kanalerne fra listen?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Der findes ingen oplysninger"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Vent venligst, undersøger..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Aktiverer logning til fil (kræver genstart)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Resterende tid"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Høj præcision"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Efter afspilning: Spol filen tilbage"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Efter afspilning: Luk"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC støttet på et problem under initialisering. Med din hjælp, kan vi muligvis rette problemet.\n\nVil du rapporterer det?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Indtast en positiv værdi hvis lyden er for tidlig, en negativ værdi hvis den er forsinket."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Forhåndsvisning er deaktiveret. Du kan aktiverer det i MPC-HC's indstillinger."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Denne indstilling kan bruges til at forhåndsvise mediefiler fra fjern-placeringer. Brug det kun på et ordentligt sikret, privat netværk.\n\nVil du virkelig aktiverer denne indstilling?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Intern undertekst renderer"
+
+msgctxt "IDS_AG_OPEN_DEVICE"
+msgid "Open Device"
+msgstr "Åbn enhed"
+
+msgctxt "IDS_AG_SAVE_AS"
+msgid "Save As"
+msgstr "Gem som"
+
+msgctxt "IDS_AG_SAVE_IMAGE"
+msgid "Save Image"
+msgstr "Gem billede"
+
+msgctxt "IDS_MPLAYERC_6"
+msgid "Save Image (auto)"
+msgstr "Gem billede (automatisk)"
+
+msgctxt "IDS_OSD_IMAGE_SAVED"
+msgid "Image saved successfully"
+msgstr "Billedet blev gemt"
+
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Indlæs undertekster..."
+
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Gem undertekster..."
+
+msgctxt "IDS_AG_PROPERTIES"
+msgid "Properties"
+msgstr "Egenskaber"
+
+msgctxt "IDS_AG_EXIT"
+msgid "Exit"
+msgstr "Afslut"
+
+msgctxt "IDS_AG_PLAYPAUSE"
+msgid "Play/Pause"
+msgstr "Afspil/pause"
+
+msgctxt "IDS_AG_PLAY"
+msgid "Play"
+msgstr "Afspil"
+
+msgctxt "IDS_AG_STOP"
+msgid "Stop"
+msgstr "Stop"
+
+msgctxt "IDS_AG_FRAMESTEP"
+msgid "Frame-step"
+msgstr "Billedtrin"
+
+msgctxt "IDS_MPLAYERC_16"
+msgid "Frame-step back"
+msgstr "Billedtrin tilbage"
+
+msgctxt "IDS_AG_GO_TO"
+msgid "Go To"
+msgstr "Gå til"
+
+msgctxt "IDS_AG_INCREASE_RATE"
+msgid "Increase Rate"
+msgstr "Hurtigere"
+
+msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
+msgid "Show/Game show"
+msgstr "Show/Underholdningsprogram"
+
+msgctxt "IDS_CONTENT_SPORTS"
+msgid "Sports"
+msgstr "Sport"
+
+msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
+msgid "Children's/Youth programmes"
+msgstr "Børn/Unge-programmer"
+
+msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
+msgid "Music/Ballet/Dance"
+msgstr "Musik/Ballet/Dans"
+
+msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
+msgid "Arts/Culture"
+msgstr "Kunst/Kultur"
+
+msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
+msgid "Social/Political issues/Economics"
+msgstr "Social/Politiske emner/Økonomi"
+
+msgctxt "IDS_CONTENT_LEISURE"
+msgid "Leisure hobbies"
+msgstr "Fritidsaktiviteter"
+
+msgctxt "IDS_FILE_RECYCLE"
+msgid "Move to Recycle Bin"
+msgstr "Flyt til papirkurv"
+
+msgctxt "IDS_AG_SAVE_COPY"
+msgid "Save a Copy"
+msgstr "Gem en kopi"
+
+msgctxt "IDS_FASTSEEK_LATEST"
+msgid "Latest keyframe"
+msgstr "Seneste keyframe"
+
+msgctxt "IDS_FASTSEEK_NEAREST"
+msgid "Nearest keyframe"
+msgstr "Nærmeste keyframe"
+
+msgctxt "IDS_HOOKS_FAILED"
+msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
+msgstr "Der opstod en fejl under initialisering af MPC-HC. DVD-afspilning vil måske ikke virke korrekt. Det kan skyldes nogen inkompatibilitet med bestemte sikkerhedsværktøjer.\n\nVil du rapportere dette problem?"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
+msgid "Never show"
+msgstr "Vis aldrig"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
+msgid "Show when moving the cursor, hide after:"
+msgstr "Vis mens markøren flyttes, skjul herefter:"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
+msgid "Show when hovering control, hide after:"
+msgstr "Vis mens markøren holdes over kontrolelementerne, skjul herefter:"
+
+msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
+msgid "Failed to set pre-resize shaders"
+msgstr "Anvendelse af før-størrelsesændring shadere mislykkedes"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
+msgid "Frame Time Correction: On"
+msgstr "Korrigering af billedtid: Til"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
+msgid "Frame Time Correction: Off"
+msgstr "Korrigering af billedtid: Fra"
+
+msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
+msgid "Target VSync Offset: %.1f"
+msgstr "Ønsket forskydning af lodret synkronisering: %.1f"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
+msgid "VSync Offset: %d"
+msgstr "Forskyd lodret synkronisering: %d"
+
+msgctxt "IDS_OSD_SPEED"
+msgid "Speed: %.2lfx"
+msgstr "Hastighed: %.2lfx"
+
+msgctxt "IDS_OSD_THUMBS_SAVED"
+msgid "Thumbnails saved successfully"
+msgstr "Miniaturer blev gemt"
+
+msgctxt "IDS_MENU_VIDEO_STREAM"
+msgid "Vide&o Track"
+msgstr "&Videospor"
+
+msgctxt "IDS_MENU_VIDEO_ANGLE"
+msgid "Video Ang&le"
+msgstr "Video vin&kel"
+
+msgctxt "IDS_RESET_SETTINGS"
+msgid "Reset settings"
+msgstr "Nulstil indstillinger"
+
+msgctxt "IDS_RESET_SETTINGS_WARNING"
+msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
+msgstr "Er du sikker på, at du vil gendanne MPC-HC til sine standardindstillinger?\nBemærk at ALLE dine indstillinger vil gå tabt!"
+
+msgctxt "IDS_RESET_SETTINGS_MUTEX"
+msgid "Please close all instances of MPC-HC so that the default settings can be restored."
+msgstr "Luk venligst alle forekomster af MPC-HC så standardindstillingerne kan gendannes."
+
+msgctxt "IDS_EXPORT_SETTINGS"
+msgid "Export settings"
+msgstr "Eksportér indstillinger"
+
+msgctxt "IDS_EXPORT_SETTINGS_WARNING"
+msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
+msgstr "Nogle ændringer er endnu ikke blevet gemt.\nVil du gemme dem, før eksport?"
+
+msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
+msgid "The settings have been successfully exported."
+msgstr "Indstillingerne er blevet eksporteret."
+
+msgctxt "IDS_EXPORT_SETTINGS_FAILED"
+msgid "The export failed! This can happen when you don't have the correct rights."
+msgstr "Eksport mislykkedes! Dette kan ske når du ikke har de nødvendige rettigheder."
+
+msgctxt "IDS_BDA_ERROR"
+msgid "BDA Error"
+msgstr "BDA fejl"
+
+msgctxt "IDS_AG_DECREASE_RATE"
+msgid "Decrease Rate"
+msgstr "Langsommere"
+
+msgctxt "IDS_AG_RESET_RATE"
+msgid "Reset Rate"
+msgstr "Nulstil hastighed"
+
+msgctxt "IDS_MPLAYERC_21"
+msgid "Audio Delay +10 ms"
+msgstr "Lydforsinkelse +10 ms"
+
+msgctxt "IDS_MPLAYERC_22"
+msgid "Audio Delay -10 ms"
+msgstr "Lydforsinkelse -10 ms"
+
+msgctxt "IDS_MPLAYERC_23"
+msgid "Jump Forward (small)"
+msgstr "Gå fremad (lille)"
+
+msgctxt "IDS_MPLAYERC_24"
+msgid "Jump Backward (small)"
+msgstr "Gå tilbage (lille)"
+
+msgctxt "IDS_MPLAYERC_25"
+msgid "Jump Forward (medium)"
+msgstr "Gå fremad (medium)"
+
+msgctxt "IDS_MPLAYERC_26"
+msgid "Jump Backward (medium)"
+msgstr "Gå tilbage (medium)"
+
+msgctxt "IDS_MPLAYERC_27"
+msgid "Jump Forward (large)"
+msgstr "Gå fremad (stor)"
+
+msgctxt "IDS_MPLAYERC_28"
+msgid "Jump Backward (large)"
+msgstr "Gå tilbage (stor)"
+
+msgctxt "IDS_MPLAYERC_29"
+msgid "Jump Forward (keyframe)"
+msgstr "Gå fremad (keyframe)"
+
+msgctxt "IDS_MPLAYERC_30"
+msgid "Jump Backward (keyframe)"
+msgstr "Gå tilbage (keyframe)"
+
+msgctxt "IDS_AG_NEXT"
+msgid "Next"
+msgstr "Næste"
+
+msgctxt "IDS_AG_PREVIOUS"
+msgid "Previous"
+msgstr "Forrige"
+
+msgctxt "IDS_AG_NEXT_FILE"
+msgid "Next File"
+msgstr "Næste fil"
+
+msgctxt "IDS_AG_PREVIOUS_FILE"
+msgid "Previous File"
+msgstr "Forrige fil"
+
+msgctxt "IDS_MPLAYERC_99"
+msgid "Toggle Direct3D fullscreen"
+msgstr "Direct3D fuldskærm til/fra"
+
+msgctxt "IDS_MPLAYERC_100"
+msgid "Goto Prev Subtitle"
+msgstr "Gå til forrige undertekst"
+
+msgctxt "IDS_MPLAYERC_101"
+msgid "Goto Next Subtitle"
+msgstr "Gå til næste undertekst"
+
+msgctxt "IDS_MPLAYERC_102"
+msgid "Shift Subtitle Left"
+msgstr "Flyt undertekst til venstre"
+
+msgctxt "IDS_MPLAYERC_103"
+msgid "Shift Subtitle Right"
+msgstr "Flyt undertekst til højre"
+
+msgctxt "IDS_AG_SEEKSET"
+msgid "Jump to Beginning"
+msgstr "Gå til begyndelsen"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Vis filnavn"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Afspil DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Afspil BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Vis rendererstatistik"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Nulstil rendererstatistik"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Undertekster::Diverse"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Skjul &kanter"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "&Kun billede"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Vi&s titel- og menulinje"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Skjul &menulinje"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Avanceret"
+
+msgctxt "IDS_AG_VIEW_MINIMAL"
+msgid "View Minimal"
+msgstr "Vis minimal"
+
+msgctxt "IDS_AG_VIEW_COMPACT"
+msgid "View Compact"
+msgstr "Vis kompakt"
+
+msgctxt "IDS_AG_VIEW_NORMAL"
+msgid "View Normal"
+msgstr "Vis standard"
+
+msgctxt "IDS_AG_FULLSCREEN"
+msgid "Fullscreen"
+msgstr "Fuldskærm"
+
+msgctxt "IDS_MPLAYERC_39"
+msgid "Fullscreen (w/o res.change)"
+msgstr "Fuldskærm (uden ændring af opløsning)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT"
+msgid "Zoom Auto Fit"
+msgstr "Zoom automatisk tilpasning"
+
+msgctxt "IDS_AG_VIDFRM_HALF"
+msgid "VidFrm Half"
+msgstr "VidRam halv"
+
+msgctxt "IDS_AG_VIDFRM_NORMAL"
+msgid "VidFrm Normal"
+msgstr "VidRam standard"
+
+msgctxt "IDS_AG_VIDFRM_DOUBLE"
+msgid "VidFrm Double"
+msgstr "VidRam dobbelt"
+
+msgctxt "IDS_AG_ALWAYS_ON_TOP"
+msgid "Always On Top"
+msgstr "Altid øverst"
+
+msgctxt "IDS_AG_PNS_INC_SIZE"
+msgid "PnS Inc Size"
+msgstr "PnS større"
+
+msgctxt "IDS_AG_PNS_INC_WIDTH"
+msgid "PnS Inc Width"
+msgstr "PnS bredere"
+
+msgctxt "IDS_MPLAYERC_47"
+msgid "PnS Inc Height"
+msgstr "PnS højere"
+
+msgctxt "IDS_AG_PNS_DEC_SIZE"
+msgid "PnS Dec Size"
+msgstr "PnS mindre"
+
+msgctxt "IDS_AG_PNS_DEC_WIDTH"
+msgid "PnS Dec Width"
+msgstr "PnS smallere"
+
+msgctxt "IDS_MPLAYERC_50"
+msgid "PnS Dec Height"
+msgstr "PnS lavere"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
+msgid "Downloading [%s] \"%s\""
+msgstr "Downloader [%s] \"%s\""
+
+msgctxt "IDS_SUBDL_DLG_PARSING"
+msgid "Parsing list..."
+msgstr "Fortolker liste..."
+
+msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
+msgid "No subtitles found."
+msgstr "Ingen undertekster fundet."
+
+msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
+msgid "%d subtitle(s) available."
+msgstr "%d tilgængelige undertekst(er)."
+
+msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
+msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
+msgstr "Vil du periodisk søge efter opdateringer til MPC-HC?\n\nFunktionen kan deaktiveres senere på indstillingssiden Diverse."
+
+msgctxt "IDS_ZOOM_50"
+msgid "50%"
+msgstr "50%"
+
+msgctxt "IDS_ZOOM_100"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDS_ZOOM_200"
+msgid "200%"
+msgstr "200%"
+
+msgctxt "IDS_ZOOM_AUTOFIT"
+msgid "Auto Fit"
+msgstr "Automatisk tilpasning"
+
+msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (Larger Only)"
+msgstr "Automatisk tilpasning (kun større)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
+msgid "Zoom Auto Fit (Larger Only)"
+msgstr "Zoom automatisk tilpasning (kun større)"
+
+msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
+msgid "Zoom: Auto (Larger Only)"
+msgstr "Zoom: Automatisk (kun større)"
+
+msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
+msgid "Double click to open file location"
+msgstr "Dobbeltklik for at åbne filplacering"
+
+msgctxt "IDS_TOOLTIP_REMAINING_TIME"
+msgid "Toggle between elapsed and remaining time"
+msgstr "Skift mellem forløbet tid og resterende tid"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
+msgid "Invalid delay"
+msgstr "Ugyldig forsinkelse"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
+msgid "Please enter a number between 1 and 365."
+msgstr "Indtast et tal mellem 1 og 365."
+
+msgctxt "IDS_AG_PNS_CENTER"
+msgid "PnS Center"
+msgstr "PnS center"
+
+msgctxt "IDS_AG_PNS_LEFT"
+msgid "PnS Left"
+msgstr "PnS venstre"
+
+msgctxt "IDS_AG_PNS_RIGHT"
+msgid "PnS Right"
+msgstr "PnS højre"
+
+msgctxt "IDS_AG_PNS_UP"
+msgid "PnS Up"
+msgstr "PnS op"
+
+msgctxt "IDS_AG_PNS_DOWN"
+msgid "PnS Down"
+msgstr "PnS ned"
+
+msgctxt "IDS_AG_PNS_UPLEFT"
+msgid "PnS Up/Left"
+msgstr "PnS op/venstre"
+
+msgctxt "IDS_AG_PNS_UPRIGHT"
+msgid "PnS Up/Right"
+msgstr "PnS op/højre"
+
+msgctxt "IDS_AG_PNS_DOWNLEFT"
+msgid "PnS Down/Left"
+msgstr "PnS ned/venstre"
+
+msgctxt "IDS_MPLAYERC_59"
+msgid "PnS Down/Right"
+msgstr "PnS ned/højre"
+
+msgctxt "IDS_AG_VOLUME_UP"
+msgid "Volume Up"
+msgstr "Lydstyrke op"
+
+msgctxt "IDS_AG_VOLUME_DOWN"
+msgid "Volume Down"
+msgstr "Lydstyrke ned"
+
+msgctxt "IDS_AG_VOLUME_MUTE"
+msgid "Volume Mute"
+msgstr "Lydstyrke mute"
+
+msgctxt "IDS_MPLAYERC_63"
+msgid "DVD Title Menu"
+msgstr "DVD titelmenu"
+
+msgctxt "IDS_AG_DVD_ROOT_MENU"
+msgid "DVD Root Menu"
+msgstr "DVD hovedmenu"
+
+msgctxt "IDS_MPLAYERC_65"
+msgid "DVD Subtitle Menu"
+msgstr "DVD undertekstmenu"
+
+msgctxt "IDS_MPLAYERC_66"
+msgid "DVD Audio Menu"
+msgstr "DVD lydmenu"
+
+msgctxt "IDS_MPLAYERC_67"
+msgid "DVD Angle Menu"
+msgstr "DVD vinkelmenu"
+
+msgctxt "IDS_MPLAYERC_68"
+msgid "DVD Chapter Menu"
+msgstr "DVD kapitelmenu"
+
+msgctxt "IDS_AG_DVD_MENU_LEFT"
+msgid "DVD Menu Left"
+msgstr "DVD menu venstre"
+
+msgctxt "IDS_MPLAYERC_70"
+msgid "DVD Menu Right"
+msgstr "DVD menu højre"
+
+msgctxt "IDS_AG_DVD_MENU_UP"
+msgid "DVD Menu Up"
+msgstr "DVD menu op"
+
+msgctxt "IDS_AG_DVD_MENU_DOWN"
+msgid "DVD Menu Down"
+msgstr "DVD menu ned"
+
+msgctxt "IDS_MPLAYERC_73"
+msgid "DVD Menu Activate"
+msgstr "DVD menu aktivér"
+
+msgctxt "IDS_AG_DVD_MENU_BACK"
+msgid "DVD Menu Back"
+msgstr "DVD menu tilbage"
+
+msgctxt "IDS_MPLAYERC_75"
+msgid "DVD Menu Leave"
+msgstr "DVD menu forlad"
+
+msgctxt "IDS_AG_BOSS_KEY"
+msgid "Boss key"
+msgstr "Chef-tast"
+
+msgctxt "IDS_MPLAYERC_77"
+msgid "Player Menu"
+msgstr "Afspillermenu"
+
+msgctxt "IDS_MPLAYERC_78"
+msgid "Player Menu (full)"
+msgstr "Afspillermenu (fuld)"
+
+msgctxt "IDS_AG_FILTERS_MENU"
+msgid "Filters Menu"
+msgstr "Filtre menu"
+
+msgctxt "IDS_AG_OPTIONS"
+msgid "Options"
+msgstr "Indstillinger"
+
+msgctxt "IDS_AG_NEXT_AUDIO"
+msgid "Next Audio Track"
+msgstr "Næste lydspor"
+
+msgctxt "IDS_AG_PREV_AUDIO"
+msgid "Prev Audio Track"
+msgstr "Forrige lydspor"
+
+msgctxt "IDS_AG_NEXT_SUBTITLE"
+msgid "Next Subtitle Track"
+msgstr "Næste undertekstspor"
+
+msgctxt "IDS_AG_PREV_SUBTITLE"
+msgid "Prev Subtitle Track"
+msgstr "Forrige undertekstspor"
+
+msgctxt "IDS_MPLAYERC_85"
+msgid "On/Off Subtitle"
+msgstr "Slå undertekst til/fra"
+
+msgctxt "IDS_MPLAYERC_86"
+msgid "Reload Subtitles"
+msgstr "Genindlæs undertekster"
+
+msgctxt "IDS_MPLAYERC_91"
+msgid "Next Angle (DVD)"
+msgstr "Næste vinkel (DVD)"
+
+msgctxt "IDS_MPLAYERC_92"
+msgid "Prev Angle (DVD)"
+msgstr "Forrige vinkel (DVD)"
+
+msgctxt "IDS_MPLAYERC_93"
+msgid "Next Audio Track (DVD)"
+msgstr "Næste lydspor (DVD)"
+
+msgctxt "IDS_MPLAYERC_94"
+msgid "Prev Audio Track (DVD)"
+msgstr "Forrige lydspor (DVD)"
+
+msgctxt "IDS_MPLAYERC_95"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Næste undertekstspor (DVD)"
+
+msgctxt "IDS_MPLAYERC_96"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Forrige undertekstspor (DVD)"
+
+msgctxt "IDS_MPLAYERC_97"
+msgid "On/Off Subtitle (DVD)"
+msgstr "Til/Fra undertekst (DVD)"
+
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Vis aktuelle tid"
+
+msgctxt "IDS_PPAGEWEBSERVER_0"
+msgid "Select the directory"
+msgstr "Vælg mappen"
+
+msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
+msgid "Quick add favorite"
+msgstr "Tilføj favorit hurtigt"
+
+msgctxt "IDS_DVB_CHANNEL_NUMBER"
+msgid "N"
+msgstr "N"
+
+msgctxt "IDS_DVB_CHANNEL_NAME"
+msgid "Name"
+msgstr "Navn"
+
+msgctxt "IDS_DVB_CHANNEL_FREQUENCY"
+msgid "Frequency"
+msgstr "Frekvens"
+
+msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
+msgid "Encrypted"
+msgstr "Krypteret"
+
+msgctxt "IDS_YES"
+msgid "Yes"
+msgstr "Ja"
+
+msgctxt "IDS_NO"
+msgid "No"
+msgstr "Nej"
+
+msgctxt "IDS_DVB_CHANNEL_START_SCAN"
+msgid "Start"
+msgstr "Start"
+
+msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
+msgid "Stop"
+msgstr "Stop"
+
+msgctxt "IDS_DVB_TVNAV_SEERADIO"
+msgid "Radio stations"
+msgstr "Radio-stationer"
+
+msgctxt "IDS_DVB_TVNAV_SEETV"
+msgid "TV stations"
+msgstr "TV-stationer"
+
+msgctxt "IDS_DVB_CHANNEL_FORMAT"
+msgid "Format"
+msgstr "Format"
+
+msgctxt "IDS_MAINFRM_2"
+msgid "Focus lost to: %s - %s"
+msgstr "Fokus tabt til: %s - %s"
+
+msgctxt "IDS_AG_SUBTITLES_SAVED"
+msgid "Subtitles saved"
+msgstr "Undertekster gemt"
+
+msgctxt "IDS_MAINFRM_4"
+msgid "Cannot save subtitles"
+msgstr "Kan ikke gemmer undertekster"
+
+msgctxt "IDS_AG_FRAMERATE"
+msgid "Frame rate"
+msgstr "Billedhastighed"
+
+msgctxt "IDS_MAINFRM_6"
+msgid "drawn: %d, dropped: %d"
+msgstr "tegnet: %d, tabt: %d"
+
+msgctxt "IDS_AG_FRAMES"
+msgid "Frames"
+msgstr "Billeder"
+
+msgctxt "IDS_AG_BUFFERS"
+msgid "Buffers"
+msgstr "Buffere"
+
+msgctxt "IDS_MAINFRM_9"
+msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
+msgstr "Volumen: %02lu/%02lu, Titel: %02lu/%02lu, Kapitel: %02lu/%02lu"
+
+msgctxt "IDS_MAINFRM_10"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Vinkel: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+
+msgctxt "IDS_MAINFRM_11"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bit %d %s"
+
+msgctxt "IDS_ADD_TO_PLAYLIST"
+msgid "Add to MPC-HC Playlist"
+msgstr "Føj til spilleliste i MPC-HC"
+
+msgctxt "IDS_OPEN_WITH_MPC"
+msgid "Play with MPC-HC"
+msgstr "Afspil med MPC-HC"
+
+msgctxt "IDS_CANNOT_CHANGE_FORMAT"
+msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
+msgstr "MPC-HC har ikke nok tilladelser til at ændre tilknytninger af filformater. Klik venligst på \"Kør som administrator\" knappen."
+
+msgctxt "IDS_APP_DESCRIPTION"
+msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
+msgstr "MPC-HC er en ekstremt-letvægt, open source medieafspiller til Windows. Den kan afspille alle de mest anvendte video- og lydfil formater. Vi er 100% spyware fri og der er ingen reklamer eller værktøjslinjer."
+
+msgctxt "IDS_MAINFRM_12"
+msgid "channel"
+msgstr "kanal"
+
+msgctxt "IDS_MAINFRM_13"
+msgid "channels"
+msgstr "kanaler"
+
+msgctxt "IDS_AG_TITLE"
+msgid "Title %u"
+msgstr "Titel %u"
+
+msgctxt "IDS_MAINFRM_16"
+msgid "DVD: Unexpected error"
+msgstr "DVD: Uventet fejl"
+
+msgctxt "IDS_MAINFRM_17"
+msgid "DVD: Copy-Protect Fail"
+msgstr "DVD: Kopi-beskyttelse fejl"
+
+msgctxt "IDS_MAINFRM_18"
+msgid "DVD: Invalid DVD 1.x Disc"
+msgstr "DVD: Ugyldig DVD 1.x disk"
+
+msgctxt "IDS_MAINFRM_19"
+msgid "DVD: Invalid Disc Region"
+msgstr "DVD: Ugyldig disk-region"
+
+msgctxt "IDS_MAINFRM_20"
+msgid "DVD: Low Parental Level"
+msgstr "DVD: Lavt forældre niveau"
+
+msgctxt "IDS_MAINFRM_21"
+msgid "DVD: Macrovision Fail"
+msgstr "DVD: Macrovision mislykkedes"
+
+msgctxt "IDS_MAINFRM_22"
+msgid "DVD: Incompatible System And Decoder Regions"
+msgstr "DVD: Inkompatibelt system og dekoder-regioner"
+
+msgctxt "IDS_MAINFRM_23"
+msgid "DVD: Incompatible Disc And Decoder Regions"
+msgstr "DVD: Inkompatibel disk og dekoder-regioner"
+
+msgctxt "IDS_D3DFS_WARNING"
+msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
+msgstr "Denne indstilling er designet til at undgå iturivning. Det forhindre dog også MPC-HC i at vise genvejsmenuen og dialogbokse under afspilning.\n\nEr du sikker på, at du vil aktivere denne indstilling?"
+
+msgctxt "IDS_MAINFRM_139"
+msgid "Sub delay: %ld ms"
+msgstr "Undertekst forsinkelse: %ld ms"
+
+msgctxt "IDS_AG_TITLE2"
+msgid "Title: %02d/%02d"
+msgstr "Titel: %02d/%02d"
+
+msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
+msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
+msgstr "Filnavn indeholder tegn som ikke er understøttet (brug kun A-Z, 0-9)"
+
+msgctxt "IDS_THUMB_ROWNUMBER"
+msgid "Rows:"
+msgstr "Rækker:"
+
+msgctxt "IDS_THUMB_COLNUMBER"
+msgid "Columns:"
+msgstr "Kolonner:"
+
+msgctxt "IDS_THUMB_IMAGE_WIDTH"
+msgid "Image width"
+msgstr "Billedbredde"
+
+msgctxt "IDS_AG_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Højde-bredde-forhold"
+
+msgctxt "IDS_MAINFRM_37"
+msgid ", Total: %ld, Dropped: %ld"
+msgstr ", total: %ld, tabt: %ld"
+
+msgctxt "IDS_MAINFRM_38"
+msgid ", Size: %I64d KB"
+msgstr ", størrelse: %I64d KB"
+
+msgctxt "IDS_MAINFRM_39"
+msgid ", Size: %I64d MB"
+msgstr ", størrelse: %I64d MB"
+
+msgctxt "IDS_MAINFRM_40"
+msgid ", Free: %I64d KB"
+msgstr ", Ledig: %I64d KB"
+
+msgctxt "IDS_MAINFRM_41"
+msgid ", Free: %I64d MB"
+msgstr ", Ledig: %I64d MB"
+
+msgctxt "IDS_MAINFRM_42"
+msgid ", Free V/A Buffers: %03d/%03d"
+msgstr ", Ledig V/A buffere: %03d/%03d"
+
+msgctxt "IDS_AG_ERROR"
+msgid "Error"
+msgstr "Fejl"
+
+msgctxt "IDS_SUBTITLE_STREAM_OFF"
+msgid "Subtitle: off"
+msgstr "Undertekst: fra"
+
+msgctxt "IDS_SUBTITLE_STREAM"
+msgid "Subtitle: %s"
+msgstr "Undertekst: %s"
+
+msgctxt "IDS_MAINFRM_46"
+msgid "Select the path for the DVD/BD:"
+msgstr "Vælg stien til DVD/BD:"
+
+msgctxt "IDS_SUB_LOADED_SUCCESS"
+msgid " loaded successfully"
+msgstr " indlæst med succes"
+
+msgctxt "IDS_ALL_FILES_FILTER"
+msgid "All files (*.*)|*.*||"
+msgstr "Alle filer (*.*)|*.*||"
+
+msgctxt "IDS_GETDIB_FAILED"
+msgid "GetDIB failed, hr = %08x"
+msgstr "GetDIB mislykkedes, hr = %08x"
+
+msgctxt "IDS_GETCURRENTIMAGE_FAILED"
+msgid "GetCurrentImage failed, hr = %08x"
+msgstr "GetCurrentImage mislykkedes, hr = %08x"
+
+msgctxt "IDS_SCREENSHOT_ERROR"
+msgid "Cannot create file"
+msgstr "Kan ikke oprette filen"
+
+msgctxt "IDS_THUMBNAILS_NO_DURATION"
+msgid "Cannot create thumbnails for files with no duration"
+msgstr "Kan ikke oprette miniaturer fra filer uden varighed"
+
+msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
+msgid "Failed to get video frame size"
+msgstr "Kunne ikke finde videoens billedstørrelse"
+
+msgctxt "IDS_OUT_OF_MEMORY"
+msgid "Out of memory, go buy some more!"
+msgstr "Ikke mere ledig hukommelse, køb noget mere!"
+
+msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
+msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
+msgstr "Ugyldig billedformat, kan ikke oprette miniaturer ud af %d bpp dibs."
+
+msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
+msgid "File Size: %s (%s bytes)\\N"
+msgstr "Filstørrelse: %s (%s bytes)\\N"
+
+msgctxt "IDS_THUMBNAILS_INFO_HEADER"
+msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Filnavn: %s\\N%sOpløsning: %dx%d %s\\NVarighed: %02d:%02d:%02d"
+
+msgctxt "IDS_THUMBNAIL_TOO_SMALL"
+msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
+msgstr "Miniaturerne ville blive for små, umuligt at oprette filen.\n\nPrøv at mindske antallet af miniaturer eller øge den samlede størrelse."
+
+msgctxt "IDS_CANNOT_LOAD_SUB"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "For at indlæse undertekster skal du skifte video-renderer typen og genåbne filen.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR eller Haali\n- RealMedia: Speciel renderer til RealMedia, eller åbn den gennem DirectShow\n- QuickTime: DX7 eller DX9 renderer til QuickTime\n- ShockWave: ikke tilgængelig"
+
+msgctxt "IDS_SUBTITLE_FILES_FILTER"
+msgid "Subtitle files"
+msgstr "Undertekstfiler"
+
+msgctxt "IDS_MAINFRM_68"
+msgid "Aspect Ratio: %ld:%ld"
+msgstr "Højde-bredde-forhold: %ld:%ld"
+
+msgctxt "IDS_MAINFRM_69"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Højde-bredde-forhold: Standard (DAR)"
+
+msgctxt "IDS_MAINFRM_70"
+msgid "Audio delay: %I64d ms"
+msgstr "Lydforsinkelse: %I64d ms"
+
+msgctxt "IDS_AG_CHAPTER"
+msgid "Chapter %d"
+msgstr "Kapitel %d"
+
+msgctxt "IDS_AG_OUT_OF_MEMORY"
+msgid "Out of memory"
+msgstr "Ikke mere ledig hukommelse"
+
+msgctxt "IDS_MAINFRM_77"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Fejl: Adobe Flash Player til Internet Explorer er påkrævet"
+
+msgctxt "IDS_MAINFRM_78"
+msgid "QuickTime not yet supported for X64 (apple library not available)"
+msgstr "QuickTime er endnu ikke understøttet til X64 (apple-bibliotek er ikke tilgængelig)"
+
+msgctxt "IDS_MAINFRM_80"
+msgid "Failed to create the filter graph object"
+msgstr "Oprettelsen af filtergraf objektet mislykkedes"
+
+msgctxt "IDS_MAINFRM_81"
+msgid "Invalid argument"
+msgstr "Ugyldig argument"
+
+msgctxt "IDS_MAINFRM_82"
+msgid "Opening aborted"
+msgstr "Åbning afbrudt"
+
+msgctxt "IDS_MAINFRM_83"
+msgid "Failed to render the file"
+msgstr "Kunne ikke rendere filen"
+
+msgctxt "IDS_AG_CHAPTER2"
+msgid "Chapter: "
+msgstr "Kapitel: "
+
+msgctxt "IDS_VOLUME_OSD"
+msgid "Vol: %d%%"
+msgstr "Lydstyrke: %d%%"
+
+msgctxt "IDS_BOOST_OSD"
+msgid "Boost: +%u%%"
+msgstr "Forstærk: +%u%%"
+
+msgctxt "IDS_BALANCE_OSD"
+msgid "Balance: %s"
+msgstr "Balance: %s"
+
+msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
+msgid "Current"
+msgstr "Aktuel"
+
+msgctxt "IDS_MAINFRM_DIR_TITLE"
+msgid "Select Directory"
+msgstr "Vælg mappe"
+
+msgctxt "IDS_MAINFRM_DIR_CHECK"
+msgid "Include subdirectories"
+msgstr "Medtag undermapper"
+
+msgctxt "IDS_AG_PAUSE"
+msgid "Pause"
+msgstr "Pause"
+
+msgctxt "IDS_AG_TOGGLE_CAPTION"
+msgid "Toggle Caption&Menu"
+msgstr "Titel- og &menulinje til/fra"
+
+msgctxt "IDS_AG_TOGGLE_SEEKER"
+msgid "Toggle Seek Bar"
+msgstr "Søgelinje til/fra"
+
+msgctxt "IDS_AG_TOGGLE_CONTROLS"
+msgid "Toggle Controls"
+msgstr "Kontrolelementer til/fra"
+
+msgctxt "IDS_MAINFRM_84"
+msgid "Invalid file name"
+msgstr "Ugyldigt filnavn"
+
+msgctxt "IDS_MAINFRM_86"
+msgid "Cannot connect the filters"
+msgstr "Kan ikke forbinde filtrene"
+
+msgctxt "IDS_MAINFRM_87"
+msgid "Cannot load any source filter"
+msgstr "Kan ikke indlæse nogen kildefiltre"
+
+msgctxt "IDS_MAINFRM_88"
+msgid "Cannot render the file"
+msgstr "Kan ikke rendere filen"
+
+msgctxt "IDS_MAINFRM_89"
+msgid "Invalid file format"
+msgstr "Ugyldigt filformat"
+
+msgctxt "IDS_MAINFRM_90"
+msgid "File not found"
+msgstr "Filen blev ikke fundet"
+
+msgctxt "IDS_MAINFRM_91"
+msgid "Unknown file type"
+msgstr "Ukendt filtype"
+
+msgctxt "IDS_MAINFRM_92"
+msgid "Unsupported stream"
+msgstr "Ikke understøttede strøm"
+
+msgctxt "IDS_MAINFRM_93"
+msgid "Cannot find DVD directory"
+msgstr "Kan ikke finde DVD-mappe"
+
+msgctxt "IDS_MAINFRM_94"
+msgid "Can't create the DVD Navigator filter"
+msgstr "Kan ikke oprette DVD navigationsfilteret"
+
+msgctxt "IDS_AG_FAILED"
+msgid "Failed"
+msgstr "Fejlede"
+
+msgctxt "IDS_MAINFRM_96"
+msgid "Can't create video capture filter"
+msgstr "Kan ikke oprette videoindspilningsfilter"
+
+msgctxt "IDS_MAINFRM_98"
+msgid "No capture filters"
+msgstr "Ingen indspilningsfiltre"
+
+msgctxt "IDS_MAINFRM_99"
+msgid "Can't create capture graph builder object"
+msgstr "Kan ikke oprette indspilningsgraf bygger objekt"
+
+msgctxt "IDS_MAINFRM_108"
+msgid "Couldn't open any device"
+msgstr "Kunne ikke åbne nogen enhed"
+
+msgctxt "IDS_AG_SOUND"
+msgid "Sound"
+msgstr "Lyd"
+
+msgctxt "IDS_MAINFRM_114"
+msgid "%s was not found, please insert media containing this file."
+msgstr "%s blev ikke fundet, indsæt venligst mediet med denne fil."
+
+msgctxt "IDS_AG_ABORTED"
+msgid "Aborted"
+msgstr "Afbrudt"
+
+msgctxt "IDS_MAINFRM_116"
+msgid "&Properties..."
+msgstr "&Egenskaber..."
+
+msgctxt "IDS_MAINFRM_117"
+msgid " (pin) properties..."
+msgstr " (pin) egenskaber..."
+
+msgctxt "IDS_AG_UNKNOWN_STREAM"
+msgid "Unknown Stream"
+msgstr "Ukendt strøm"
+
+msgctxt "IDS_AG_UNKNOWN"
+msgid "Unknown %u"
+msgstr "Ukendt %u"
+
+msgctxt "IDS_AG_VSYNC"
+msgid "VSync"
+msgstr "Lodret synkronisering"
+
+msgctxt "IDS_MAINFRM_121"
+msgid " (Director Comments 1)"
+msgstr " (Instruktør kommentar 1)"
+
+msgctxt "IDS_MAINFRM_122"
+msgid " (Director Comments 2)"
+msgstr " (Instruktør kommentar 2)"
+
+msgctxt "IDS_DVD_SUBTITLES_ENABLE"
+msgid "Enable DVD subtitles"
+msgstr "Aktivér DVD-undertekster"
+
+msgctxt "IDS_AG_ANGLE"
+msgid "Angle %u"
+msgstr "Vinkel %u"
+
+msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
+msgid "Increase VSync Offset"
+msgstr "Lodret synkronisering +"
+
+msgctxt "IDS_AG_DISABLED"
+msgid "Disabled"
+msgstr "Deaktiveret"
+
+msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
+msgid "Decrease VSync Offset"
+msgstr "Lodret synkronisering -"
+
+msgctxt "IDS_MAINFRM_136"
+msgid "MPC-HC D3D Fullscreen"
+msgstr "MPC-HC D3D fuldskærm"
+
+msgctxt "IDS_MAINFRM_137"
+msgid "Unknown format"
+msgstr "Ukendt format"
+
+msgctxt "IDS_MAINFRM_138"
+msgid "Sub shift: %ld ms"
+msgstr "Undertekst forskydning: %ld ms"
+
+msgctxt "IDS_VOLUME_BOOST_INC"
+msgid "Volume boost increase"
+msgstr "Lydstyrke forstærk +"
+
+msgctxt "IDS_VOLUME_BOOST_DEC"
+msgid "Volume boost decrease"
+msgstr "Lydstyrke forstærk -"
+
+msgctxt "IDS_VOLUME_BOOST_MIN"
+msgid "Volume boost Min"
+msgstr "Lydstyrke forstærk minimum"
+
+msgctxt "IDS_VOLUME_BOOST_MAX"
+msgid "Volume boost Max"
+msgstr "Lydstyrke forstærk maksimum"
+
+msgctxt "IDS_USAGE"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Brug: mpc-hc.exe \"stinavn\" [kontakter]"
+
+msgctxt "IDS_UNKNOWN_SWITCH"
+msgid "Unrecognized switch(es) found in command line string: \n\n"
+msgstr "Ukendte kontakt(er) i kommandolinje streng: \n\n"
+
+msgctxt "IDS_AG_TOGGLE_INFO"
+msgid "Toggle Information"
+msgstr "Oplysninger til/fra"
+
+msgctxt "IDS_AG_TOGGLE_STATS"
+msgid "Toggle Statistics"
+msgstr "Statistik til/fra"
+
+msgctxt "IDS_AG_TOGGLE_STATUS"
+msgid "Toggle Status"
+msgstr "Status til/fra"
+
+msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
+msgid "Toggle Subresync Bar"
+msgstr "Undertekst gensynk.linje til/fra"
+
+msgctxt "IDS_AG_TOGGLE_PLAYLIST"
+msgid "Toggle Playlist Bar"
+msgstr "Spillelistelinje til/fra"
+
+msgctxt "IDS_AG_TOGGLE_CAPTURE"
+msgid "Toggle Capture Bar"
+msgstr "Indspilningslinje til/fra"
+
+msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
+msgid "Toggle Debug Shaders"
+msgstr "Fejlfind shadere til/fra"
+
+msgctxt "IDS_AG_ZOOM_50"
+msgid "Zoom 50%"
+msgstr "Zoom 50%"
+
+msgctxt "IDS_AG_ZOOM_100"
+msgid "Zoom 100%"
+msgstr "Zoom 100%"
+
+msgctxt "IDS_AG_ZOOM_200"
+msgid "Zoom 200%"
+msgstr "Zoom 200%"
+
+msgctxt "IDS_AG_NEXT_AR_PRESET"
+msgid "Next AR Preset"
+msgstr "Næste h-b-forudindstilling"
+
+msgctxt "IDS_AG_VIDFRM_STRETCH"
+msgid "VidFrm Stretch"
+msgstr "VidRam stræk"
+
+msgctxt "IDS_AG_VIDFRM_INSIDE"
+msgid "VidFrm Inside"
+msgstr "VidRam indefra"
+
+msgctxt "IDS_AG_VIDFRM_OUTSIDE"
+msgid "VidFrm Outside"
+msgstr "VidRam udefra"
+
+msgctxt "IDS_AG_PNS_RESET"
+msgid "PnS Reset"
+msgstr "PnS nulstil"
+
+msgctxt "IDS_AG_PNS_ROTATEX_P"
+msgid "PnS Rotate X+"
+msgstr "PnS roter X+"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM1"
+msgid "VidFrm Zoom 1"
+msgstr "VidRam zoom 1"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM2"
+msgid "VidFrm Zoom 2"
+msgstr "VidRam zoom 2"
+
+msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
+msgid "VidFrm Switch Zoom"
+msgstr "VidRam skift zoom"
+
+msgctxt "IDS_ENABLE_ALL_FILTERS"
+msgid "&Enable all filters"
+msgstr "&Aktivér alle filtre"
+
+msgctxt "IDS_LOGO_AUTHOR"
+msgid "Author unknown. Contact us if you made this logo!"
+msgstr "Ukendt forfatter. Kontakt os hvis du har lavet dette logo!"
+
+msgctxt "IDS_NO_MORE_MEDIA"
+msgid "No more media in the current folder."
+msgstr "Ikke flere medier i den aktuelle mappe."
+
+msgctxt "IDS_FIRST_IN_FOLDER"
+msgid "The first file of the folder is already loaded."
+msgstr "Den første fil fra mappen er allerede indlæst."
+
+msgctxt "IDS_LAST_IN_FOLDER"
+msgid "The last file of the folder is already loaded."
+msgstr "Den sidste fil fra mappen er allerede indlæst."
+
+msgctxt "IDS_FRONT_LEFT"
+msgid "Front Left"
+msgstr "Front Left"
+
+msgctxt "IDS_FRONT_RIGHT"
+msgid "Front Right"
+msgstr "Front Right"
+
+msgctxt "IDS_FRONT_CENTER"
+msgid "Front Center"
+msgstr "Front Center"
+
+msgctxt "IDS_LOW_FREQUENCY"
+msgid "Low Frequency"
+msgstr "Low Frequency"
+
+msgctxt "IDS_BACK_LEFT"
+msgid "Back Left"
+msgstr "Back Left"
+
+msgctxt "IDS_BACK_RIGHT"
+msgid "Back Right"
+msgstr "Back Right"
+
+msgctxt "IDS_FRONT_LEFT_OF_CENTER"
+msgid "Front Left of Center"
+msgstr "Front Left of Center"
+
+msgctxt "IDS_FRONT_RIGHT_OF_CENTER"
+msgid "Front Right of Center"
+msgstr "Front Right of Center"
+
+msgctxt "IDS_BACK_CENTER"
+msgid "Back Center"
+msgstr "Back Center"
+
+msgctxt "IDS_SIDE_LEFT"
+msgid "Side Left"
+msgstr "Side Left"
+
+msgctxt "IDS_SIDE_RIGHT"
+msgid "Side Right"
+msgstr "Side Right"
+
+msgctxt "IDS_TOP_CENTER"
+msgid "Top Center"
+msgstr "Top Center"
+
+msgctxt "IDS_TOP_FRONT_LEFT"
+msgid "Top Front Left"
+msgstr "Top Front Left"
+
+msgctxt "IDS_TOP_FRONT_CENTER"
+msgid "Top Front Center"
+msgstr "Top Front Center"
+
+msgctxt "IDS_TOP_FRONT_RIGHT"
+msgid "Top Front Right"
+msgstr "Top Front Right"
+
+msgctxt "IDS_TOP_BACK_LEFT"
+msgid "Top Back Left"
+msgstr "Top Back Left"
+
+msgctxt "IDS_TOP_BACK_CENTER"
+msgid "Top Back Center"
+msgstr "Top Back Center"
+
+msgctxt "IDS_TOP_BACK_RIGHT"
+msgid "Top Back Right"
+msgstr "Top Back Right"
+
+msgctxt "IDS_TIME_TOOLTIP_ABOVE"
+msgid "Above seek bar"
+msgstr "Over søgelinje"
+
+msgctxt "IDS_TIME_TOOLTIP_BELOW"
+msgid "Below seek bar"
+msgstr "Under søgelinje"
+
+msgctxt "IDS_VIDEO_STREAM"
+msgid "Video: %s"
+msgstr "Video: %s"
+
+msgctxt "IDS_APPLY"
+msgid "Apply"
+msgstr "Anvend"
+
+msgctxt "IDS_CLEAR"
+msgid "Clear"
+msgstr "Ryd"
+
+msgctxt "IDS_CANCEL"
+msgid "Cancel"
+msgstr "Annuller"
+
+msgctxt "IDS_THUMB_THUMBNAILS"
+msgid "Layout"
+msgstr "Layout"
+
+msgctxt "IDS_THUMB_PIXELS"
+msgid "Pixels:"
+msgstr "Pixels:"
+
+msgctxt "IDS_TEXTFILE_ENC"
+msgid "Encoding:"
+msgstr "Kodning:"
+
+msgctxt "IDS_DISABLE_ALL_FILTERS"
+msgid "&Disable all filters"
+msgstr "&Deaktivér alle filtre"
+
+msgctxt "IDS_ENABLE_AUDIO_FILTERS"
+msgid "Enable all audio decoders"
+msgstr "Aktivér alle lyd-dekodere"
+
+msgctxt "IDS_DISABLE_AUDIO_FILTERS"
+msgid "Disable all audio decoders"
+msgstr "Deaktivér alle lyd-dekodere"
+
+msgctxt "IDS_ENABLE_VIDEO_FILTERS"
+msgid "Enable all video decoders"
+msgstr "Aktivér alle video-dekodere"
+
+msgctxt "IDS_DISABLE_VIDEO_FILTERS"
+msgid "Disable all video decoders"
+msgstr "Deaktivér alle video-dekodere"
+
+msgctxt "IDS_STRETCH_TO_WINDOW"
+msgid "Stretch To Window"
+msgstr "Stræk til vindue"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
+msgid "Touch Window From Inside"
+msgstr "Rør vindue indefra"
+
+msgctxt "IDS_ZOOM1"
+msgid "Zoom 1"
+msgstr "Zoom 1"
+
+msgctxt "IDS_ZOOM2"
+msgid "Zoom 2"
+msgstr "Zoom 2"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
+msgid "Touch Window From Outside"
+msgstr "Rør vindue udefra"
+
+msgctxt "IDS_AUDIO_STREAM"
+msgid "Audio: %s"
+msgstr "Lyd: %s"
+
+msgctxt "IDS_AG_REOPEN"
+msgid "Reopen File"
+msgstr "Genåbn fil"
+
+msgctxt "IDS_MFMT_AVI"
+msgid "AVI"
+msgstr "AVI"
+
+msgctxt "IDS_MFMT_MPEG"
+msgid "MPEG"
+msgstr "MPEG"
+
+msgctxt "IDS_MFMT_MPEGTS"
+msgid "MPEG-TS"
+msgstr "MPEG-TS"
+
+msgctxt "IDS_MFMT_DVDVIDEO"
+msgid "DVD-Video"
+msgstr "DVD-Video"
+
+msgctxt "IDS_MFMT_MKV"
+msgid "Matroska"
+msgstr "Matroska"
+
+msgctxt "IDS_MFMT_WEBM"
+msgid "WebM"
+msgstr "WebM"
+
+msgctxt "IDS_MFMT_MP4"
+msgid "MP4"
+msgstr "MP4"
+
+msgctxt "IDS_MFMT_MOV"
+msgid "QuickTime Movie"
+msgstr "QuickTime Movie"
+
+msgctxt "IDS_MFMT_3GP"
+msgid "3GP"
+msgstr "3GP"
+
+msgctxt "IDS_MFMT_3G2"
+msgid "3G2"
+msgstr "3G2"
+
+msgctxt "IDS_MFMT_FLV"
+msgid "Flash Video"
+msgstr "Flash Video"
+
+msgctxt "IDS_MFMT_OGM"
+msgid "Ogg Media"
+msgstr "Ogg Media"
+
+msgctxt "IDS_MFMT_RM"
+msgid "Real Media"
+msgstr "Real Media"
+
+msgctxt "IDS_MFMT_RT"
+msgid "Real Script"
+msgstr "Real Script"
+
+msgctxt "IDS_MFMT_WMV"
+msgid "Windows Media Video"
+msgstr "Windows Media Video"
+
+msgctxt "IDS_MFMT_BINK"
+msgid "Smacker/Bink Video"
+msgstr "Smacker/Bink Video"
+
+msgctxt "IDS_MFMT_FLIC"
+msgid "FLIC Animation"
+msgstr "FLIC Animation"
+
+msgctxt "IDS_MFMT_DSM"
+msgid "DirectShow Media"
+msgstr "DirectShow Media"
+
+msgctxt "IDS_MFMT_IVF"
+msgid "Indeo Video Format"
+msgstr "Indeo Video Format"
+
+msgctxt "IDS_MFMT_OTHER"
+msgid "Other"
+msgstr "Andre"
+
+msgctxt "IDS_MFMT_SWF"
+msgid "Shockwave Flash"
+msgstr "Shockwave Flash"
+
+msgctxt "IDS_MFMT_OTHER_AUDIO"
+msgid "Other Audio"
+msgstr "Anden lyd"
+
+msgctxt "IDS_MFMT_AC3"
+msgid "AC-3"
+msgstr "AC-3"
+
+msgctxt "IDS_MFMT_AIFF"
+msgid "AIFF"
+msgstr "AIFF"
+
+msgctxt "IDS_MFMT_ALAC"
+msgid "Apple Lossless"
+msgstr "Apple Lossless"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
+msgctxt "IDS_MFMT_AMR"
+msgid "AMR"
+msgstr "AMR"
+
+msgctxt "IDS_MFMT_APE"
+msgid "Monkey's Audio"
+msgstr "Monkey's lyd"
+
+msgctxt "IDS_MFMT_AU"
+msgid "AU/SND"
+msgstr "AU/SND"
+
+msgctxt "IDS_MFMT_CDA"
+msgid "Audio CD track"
+msgstr "Audio CD track"
+
+msgctxt "IDS_MFMT_FLAC"
+msgid "FLAC"
+msgstr "FLAC"
+
+msgctxt "IDS_MFMT_M4A"
+msgid "MPEG-4 Audio"
+msgstr "MPEG-4 Audio"
+
+msgctxt "IDS_MFMT_MIDI"
+msgid "MIDI"
+msgstr "MIDI"
+
+msgctxt "IDS_MFMT_MKA"
+msgid "Matroska audio"
+msgstr "Matroska audio"
+
+msgctxt "IDS_MFMT_MP3"
+msgid "MP3"
+msgstr "MP3"
+
+msgctxt "IDS_MFMT_MPA"
+msgid "MPEG audio"
+msgstr "MPEG audio"
+
+msgctxt "IDS_MFMT_MPC"
+msgid "Musepack"
+msgstr "Musepack"
+
+msgctxt "IDS_MFMT_OFR"
+msgid "OptimFROG"
+msgstr "OptimFROG"
+
+msgctxt "IDS_MFMT_OGG"
+msgid "Ogg Vorbis"
+msgstr "Ogg Vorbis"
+
+msgctxt "IDS_MFMT_RA"
+msgid "Real Audio"
+msgstr "Real Audio"
+
+msgctxt "IDS_MFMT_TAK"
+msgid "TAK"
+msgstr "TAK"
+
+msgctxt "IDS_MFMT_TTA"
+msgid "True Audio"
+msgstr "True Audio"
+
+msgctxt "IDS_MFMT_PLS"
+msgid "Playlist"
+msgstr "Spilleliste"
+
+msgctxt "IDS_MFMT_BDPLS"
+msgid "Blu-ray playlist"
+msgstr "Blu-ray spilleliste"
+
+msgctxt "IDS_MFMT_RAR"
+msgid "RAR Archive"
+msgstr "RAR-arkiv"
+
+msgctxt "IDS_DVB_CHANNEL_FPS"
+msgid "FPS"
+msgstr "FPS"
+
+msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
+msgid "Resolution"
+msgstr "Opløsning"
+
+msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Højde-bredde-forhold"
+
+msgctxt "IDS_OSD_RS_VSYNC_ON"
+msgid "VSync: On"
+msgstr "Lodret synkronisering: Til"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFF"
+msgid "VSync: Off"
+msgstr "Lodret synkronisering: Fra"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
+msgid "Accurate VSync: On"
+msgstr "Præcis lodret synkronisering: Til"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
+msgid "Accurate VSync: Off"
+msgstr "Præcis lodret synkronisering: Fra"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
+msgid "Synchronize Video to Display: On"
+msgstr "Synkroniser video til billede: Til"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
+msgid "Synchronize Video to Display: Off"
+msgstr "Synkroniser video til billede: Fra"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
+msgid "Synchronize Display to Video: On"
+msgstr "Synkroniser billede til video: Til"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
+msgid "Synchronize Display to Video: Off"
+msgstr "Synkroniser billede til video: Fra"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
+msgid "Present at Nearest VSync: On"
+msgstr "Til stede ved nærmeste lodret synkronisering: Til"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
+msgid "Present at Nearest VSync: Off"
+msgstr "Til stede ved nærmeste lodret synkronisering: Fra"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
+msgid "Color Management: On"
+msgstr "Farvehåndtering: Til"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
+msgid "Color Management: Off"
+msgstr "Farvehåndtering: Fra"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
+msgid "Input Type: Auto-Detect"
+msgstr "Inputtype: Automatisk"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
+msgid "Input Type: HDTV"
+msgstr "Inputtype: HDTV"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_NTSC"
+msgid "Input Type: SDTV NTSC"
+msgstr "Inputtype: SDTV NTSC"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
+msgid "Input Type: SDTV PAL"
+msgstr "Inputtype: SDTV PAL"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
+msgid "Ambient Light: Bright (2.2 Gamma)"
+msgstr "Omgivende lys: Lyst (2.2 gamma)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
+msgid "Ambient Light: Dim (2.35 Gamma)"
+msgstr "Omgivende lys: Nedtonet (2.35 gamma)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
+msgid "Ambient Light: Dark (2.4 Gamma)"
+msgstr "Omgivende lys: Mørkt (2.4 gamma)"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
+msgid "Rendering Intent: Perceptual"
+msgstr "Renderingsformål: Sanselig"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
+msgid "Rendering Intent: Relative Colorimetric"
+msgstr "Renderingsformål: Relativ farvemåling"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
+msgid "Rendering Intent: Saturation"
+msgstr "Renderingsformål: Mætning"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
+msgid "Rendering Intent: Absolute Colorimetric"
+msgstr "Renderingsformål: Absolut farvemåling"
+
+msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
+msgid "Output Range: %s"
+msgstr "Outputområde: %s"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
+msgid "Flush GPU before VSync: On"
+msgstr "Tøm GPU før lodret synkronisering: Til"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
+msgid "Flush GPU before VSync: Off"
+msgstr "Tøm GPU før lodret synkronisering: Fra"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
+msgid "Flush GPU after Present: On"
+msgstr "Tøm GPU efter præsentation: Til"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
+msgid "Flush GPU after Present: Off"
+msgstr "Tøm GPU efter præsentation: Fra"
+
+msgctxt "IDS_OSD_RS_WAIT_ON"
+msgid "Wait for GPU Flush: On"
+msgstr "Vent på tømning af GPU: Til"
+
+msgctxt "IDS_OSD_RS_WAIT_OFF"
+msgid "Wait for GPU Flush: Off"
+msgstr "Vent på tømning af GPU: fra"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
+msgid "D3D Fullscreen: On"
+msgstr "D3D fuldskærm: Til"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
+msgid "D3D Fullscreen: Off"
+msgstr "D3D fuldskærm: Fra"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
+msgid "Disable desktop composition: On"
+msgstr "Deaktivér skrivebordsopbygning: Til"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
+msgid "Disable desktop composition: Off"
+msgstr "Deaktivér skrivebordsopbygning: Fra"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
+msgid "Alternative VSync: On"
+msgstr "Alternativ lodret synkronisering: Til"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
+msgid "Alternative VSync: Off"
+msgstr "Alternativ lodret synkronisering: Fra"
+
+msgctxt "IDS_OSD_RS_RESET_DEFAULT"
+msgid "Renderer settings reset to default"
+msgstr "Rendererindstillinger nulstillet til standard"
+
+msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
+msgid "Renderer settings reset to optimal"
+msgstr "Rendererindstillinger nulstillet til optimal"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
+msgid "D3D Fullscreen GUI Support: On"
+msgstr "D3D fuldskærm GUI understøttelse: Til"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
+msgid "D3D Fullscreen GUI Support: Off"
+msgstr "D3D fuldskærm GUI understøttelse: Fra"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
+msgid "10-bit RGB Output: On"
+msgstr "10-bit RGB-output: Til"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
+msgid "10-bit RGB Output: Off"
+msgstr "10-bit RGB-output: Fra"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
+msgid "Force 10-bit RGB Input: On"
+msgstr "Gennemtving 10-bit RGB-input: Til"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
+msgid "Force 10-bit RGB Input: Off"
+msgstr "Gennemtving 10-bit RGB-input: Fra"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
+msgid "Full Floating Point Processing: On"
+msgstr "Fuld flydende kommatal bearbejdning: Til"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
+msgid "Full Floating Point Processing: Off"
+msgstr "Fuld flydende kommatal bearbejdning: Fra"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
+msgid "Half Floating Point Processing: On"
+msgstr "Halv flydende kommatal bearbejdning: Til"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
+msgid "Half Floating Point Processing: Off"
+msgstr "Halv flydende kommatal bearbejdning: Fra"
+
+msgctxt "IDS_BRIGHTNESS_DEC"
+msgid "Brightness decrease"
+msgstr "Mørkere"
+
+msgctxt "IDS_CONTRAST_INC"
+msgid "Contrast increase"
+msgstr "Kontrast +"
+
+msgctxt "IDS_CONTRAST_DEC"
+msgid "Contrast decrease"
+msgstr "Kontrast -"
+
+msgctxt "IDS_HUE_INC"
+msgid "Hue increase"
+msgstr "Farvetone +"
+
+msgctxt "IDS_HUE_DEC"
+msgid "Hue decrease"
+msgstr "Farvetone -"
+
+msgctxt "IDS_SATURATION_INC"
+msgid "Saturation increase"
+msgstr "Mætning +"
+
+msgctxt "IDS_SATURATION_DEC"
+msgid "Saturation decrease"
+msgstr "Mætning -"
+
+msgctxt "IDS_RESET_COLOR"
+msgid "Reset color settings"
+msgstr "Nulstil farveindstillinger"
+
+msgctxt "IDS_USING_LATEST_STABLE"
+msgid "\nYou are already using the latest stable version."
+msgstr "\nDu bruger allerede den seneste stabile version."
+
+msgctxt "IDS_USING_NEWER_VERSION"
+msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
+msgstr "Din aktuelle version er v%s.\n\nDen seneste stabile version er v%s."
+
+msgctxt "IDS_NEW_UPDATE_AVAILABLE"
+msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
+msgstr "MPC-HC v%s er nu tilgængelig. Du bruger v%s.\n\nØnsker du at besøge MPC-HC's hjemmeside for at downloade den?"
+
+msgctxt "IDS_UPDATE_ERROR"
+msgid "Update server not found.\n\nPlease check your internet connection or try again later."
+msgstr "Opdateringsserveren blev ikke fundet.\n\nTjek din internetforbindelse eller prøv igen senere."
+
+msgctxt "IDS_UPDATE_CLOSE"
+msgid "&Close"
+msgstr "&Luk"
+
+msgctxt "IDS_OSD_ZOOM"
+msgid "Zoom: %.0lf%%"
+msgstr "Zoom: %.0lf%%"
+
+msgctxt "IDS_OSD_ZOOM_AUTO"
+msgid "Zoom: Auto"
+msgstr "Zoom: Automatisk"
+
+msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
+msgid "Toggle custom channel mapping"
+msgstr "Brugerdefineret kanalkort til/fra"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
+msgid "Custom channel mapping: On"
+msgstr "Brugerdefineret kanalkort: Til"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
+msgid "Custom channel mapping: Off"
+msgstr "Brugerdefineret kanalkort: Fra"
+
+msgctxt "IDS_NORMALIZE"
+msgid "Toggle normalization"
+msgstr "Normalisering til/fra"
+
+msgctxt "IDS_OSD_NORMALIZE_ON"
+msgid "Normalization: On"
+msgstr "Normalisering: Til"
+
+msgctxt "IDS_OSD_NORMALIZE_OFF"
+msgid "Normalization: Off"
+msgstr "Normalisering: Fra"
+
+msgctxt "IDS_REGAIN_VOLUME"
+msgid "Toggle regain volume"
+msgstr "Genvind lydstyrke til/fra"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
+msgid "Regain volume: On"
+msgstr "Genvind lydstyrke: Til"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
+msgid "Regain volume: Off"
+msgstr "Genvind lydstyrke: Fra"
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
+
+msgctxt "IDS_SIZE_UNIT_K"
+msgid "KB"
+msgstr "KB"
+
+msgctxt "IDS_SIZE_UNIT_M"
+msgid "MB"
+msgstr "MB"
+
+msgctxt "IDS_SIZE_UNIT_G"
+msgid "GB"
+msgstr "GB"
+
+msgctxt "IDS_SPEED_UNIT_K"
+msgid "KB/s"
+msgstr "KB/s"
+
+msgctxt "IDS_SPEED_UNIT_M"
+msgid "MB/s"
+msgstr "MB/s"
+
+msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
+msgid "Could not create the tuner."
+msgstr "Kunne ikke oprette tuneren."
+
+msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
+msgid "Could not create the receiver."
+msgstr "Kunne ikke oprette modtageren."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
+msgid "Could not connect the network and the tuner."
+msgstr "Kunne ikke oprette forbindelse mellem netværket og tuneren."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
+msgid "Could not connect the tuner and the receiver."
+msgstr "Kunne ikke forbinde tuneren og modtageren."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
+msgid "Could not connect the tuner."
+msgstr "Kunne ikke forbinde tuneren."
+
+msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
+msgid "Could not create the demultiplexer."
+msgstr "Kunne ikke oprette demultiplekseren."
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
+msgid "Error parsing the entered time!"
+msgstr "Fejl ved fortolkning af den indtastede tid!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
+msgid "Error parsing the entered text!"
+msgstr "Fejl ved fortolkning af den indtastede tekst!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
+msgid "Error parsing the entered frame rate!"
+msgstr "Fejl ved fortolkning af den indtastede billedhastighed!"
+
+msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Kan ikke foretage billedtrin, prøv en anden video-renderer."
+
+msgctxt "IDS_SCREENSHOT_ERROR_REAL"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
+msgstr "\"Gem billede\" og \"Gem miniaturer\" virker ikke med standard video-rendereren til RealMedia.\nVælg en af DirectX-rendererne til RealMedia i MPC-HC's outputindstillinger og åbn filen på ny."
+
+msgctxt "IDS_SCREENSHOT_ERROR_QT"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
+msgstr "\"Gem billede\" og \"Gem miniaturer\" virker ikke med standard video-rendereren til QuickTime.\nVælg en af DirectX-rendererne til QuickTime i MPC-HC's outputindstillinger og åbn filen på ny."
+
+msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
+msgstr "\"Gem billede\" og \"Gem miniaturer\" virker ikke på Shockwave-filer."
+
+msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
+msgstr "\"Gem billede\" og \"Gem miniaturer\" virker ikke med Overlay Mixer video-rendereren.\nVælg en anden video-renderer i MPC's outputindstillinger og åbn filen på ny."
+
+msgctxt "IDS_MB_SHOW_EDL_EDITOR"
+msgid "Do you want to activate the EDL editor?"
+msgstr "Vil du aktivere EDL-editoren?"
+
+msgctxt "IDS_CAPTURE_ERROR"
+msgid "Capture Error"
+msgstr "Fejl ved indspilning"
+
+msgctxt "IDS_CAPTURE_ERROR_VIDEO"
+msgid "video"
+msgstr "video"
+
+msgctxt "IDS_CAPTURE_ERROR_AUDIO"
+msgid "audio"
+msgstr "lyd"
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
+msgid "Can't add the %s buffer filter to the graph."
+msgstr "Kan ikke tilføje %s buffer filteret til grafen."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
+msgid "Can't connect the %s buffer filter to the graph."
+msgstr "Kan ikke forbinde %s buffer filteret til grafen."
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
+msgid "Can't add the %s encoder filter to the graph."
+msgstr "Kan ikke tilføj %s kodningsfilteret til grafen."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
+msgid "Can't connect the %s encoder filter to the graph."
+msgstr "Kan ikke forbinde %s kodningsfilteret til grafen."
+
+msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
+msgid "Can't set the compression format on the %s encoder filter."
+msgstr "Kan ikke anvende komprimeringsformatet på %s kodningsfilteret."
+
+msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
+msgid "Can't connect the %s stream to the multiplexer filter."
+msgstr "Kan ikke forbinde %s strømmen til multiplekserfilteret."
+
+msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
+msgid "No video capture pin was found."
+msgstr "Der blev ikke fundet nogen videoindspilning pin."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
+msgid "No audio capture pin was found."
+msgstr "Der blev ikke fundet nogen lydindspilning pin."
+
+msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
+msgid "Error initializing the output file."
+msgstr "Fejl ved initialisering af output-fil."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
+msgid "Error initializing the audio output file."
+msgstr "Fejl ved initialisering af lyd output-fil."
+
+msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
+msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+msgstr "Det korrekte tidsformat er [-]tt:mm:ss.ms (f.eks. 01:23:45.678)."
+
+msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
+msgid "This type is already in the list!"
+msgstr "Denne type findes allerede i listen!"
+
+msgctxt "IDS_WEBSERVER_ERROR_TEST"
+msgid "You need to apply the new settings before testing them."
+msgstr "Du skal anvende de nye indstillinger før du kan teste dem."
+
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
+msgid "After Playback: Exit"
+msgstr "Efter afspilning: Afslut"
+
+msgctxt "IDS_AFTERPLAYBACK_STANDBY"
+msgid "After Playback: Stand By"
+msgstr "Efter afspilning: Standby"
+
+msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
+msgid "After Playback: Hibernate"
+msgstr "Efter afspilning: Dvale"
+
+msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
+msgid "After Playback: Shutdown"
+msgstr "Efter afspilning: Luk"
+
+msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
+msgid "After Playback: Log Off"
+msgstr "Efter afspilning: Log af"
+
+msgctxt "IDS_AFTERPLAYBACK_LOCK"
+msgid "After Playback: Lock"
+msgstr "Efter afspilning: Lås"
+
+msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
+msgid "After Playback: Turn off the monitor"
+msgstr "Efter afspilning: Sluk monitoren"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Efter afspilning: Afspil næste fil i mappen"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Efter afspilning: Gør ingenting"
+
+msgctxt "IDS_OSD_BRIGHTNESS"
+msgid "Brightness: %s"
+msgstr "Lysstyrke: %s"
+
+msgctxt "IDS_OSD_CONTRAST"
+msgid "Contrast: %s"
+msgstr "Kontrast: %s"
+
+msgctxt "IDS_OSD_HUE"
+msgid "Hue: %s°"
+msgstr "Farvetone: %s°"
+
+msgctxt "IDS_OSD_SATURATION"
+msgid "Saturation: %s"
+msgstr "Mætning: %s"
+
+msgctxt "IDS_OSD_RESET_COLOR"
+msgid "Color settings restored"
+msgstr "Farveindstillinger genskabt"
+
+msgctxt "IDS_OSD_NO_COLORCONTROL"
+msgid "Color control is not supported"
+msgstr "Farvestyring er ikke understøttet"
+
+msgctxt "IDS_BRIGHTNESS_INC"
+msgid "Brightness increase"
+msgstr "Lysere"
+
+msgctxt "IDS_LANG_PREF_EXAMPLE"
+msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
+msgstr "Indtast dine foretrukne sprog her.\nSkriv for eksempel: \"eng jap swe\""
+
+msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
+msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
+msgstr "Eksterne splittere kan have deres egne sprogindstillinger og så bestemmer MPC-HC's standardindstilling ikke deres indledende valg.\nAktivér denne indstilling hvis du ønsker at MPC-HC skal have kontrol over eksterne splittere."
+
+msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
+msgid "&Blu-Ray playlists"
+msgstr "&Blu-Ray spilleliste"
+
+msgctxt "IDS_NAVIGATE_PLAYLIST"
+msgid "&Playlist"
+msgstr "&Spilleliste"
+
+msgctxt "IDS_NAVIGATE_CHAPTERS"
+msgid "&Chapters"
+msgstr "&Kapitler"
+
+msgctxt "IDS_NAVIGATE_TITLES"
+msgid "&Titles"
+msgstr "&Titler"
+
+msgctxt "IDS_NAVIGATE_CHANNELS"
+msgid "&Channels"
+msgstr "&Kanaler"
+
+msgctxt "IDC_FASTSEEK_CHECK"
+msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
+msgstr "Hvis \"seneste keyframe\" er valgt, så søg til den første keyframe før selve søgepunktet.\nHvis \"nærmeste keyframe\" er valgt, så søg til den første keyframe før eller efter søgepunktet afhængig af hvilken der er tættest."
+
+msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
+msgid "Associate with all formats"
+msgstr "Tilknyt alle formater"
+
+msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
+msgid "Associate with video formats only"
+msgstr "Tilknyt kun video-formater"
+
+msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
+msgid "Associate with audio formats only"
+msgstr "Tilknyt kun lyd-formater"
+
+msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
+msgid "Clear all associations"
+msgstr "Fjern alle tilknytninger"
+
+msgctxt "IDS_FILTER_SETTINGS_CAPTION"
+msgid "Settings"
+msgstr "Indstillinger"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Udbyder"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Hørehæmmet"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Downloads"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Vurdering"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Søgning efter undertekster online mislykkedes."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Søgning efter undertekster online afbrudt."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Søgning efter undertekster online fuldført, %d undertekster fundet."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Søgning efter undertekster online fuldført, ingen undertekster fundet."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Download undertekster"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Søger efter undertekster online, vent venligst..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Søgninger efter undertekster online afbrydes..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Brugernavn"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Status"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Klar..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Ikke implementeret."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Uploader..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Undertekster blev uploadet."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Upload af undertekster mislykkedes."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Upload af undertekster afbrudt."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Undertekster findes allerede."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Uploader undertekster, vent venligst..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Upload afsluttet."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Upload afbrudt."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Upload mislykkedes."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Download og åbn"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Opsætning"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Nulstil"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Flyt op"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Flyt ned"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Åbn URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Sprog"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "FEJL: kunne ikke etablerer internetforbindelse."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Indtast loginoplysninger for websted"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Indtast dine loginoplysninger for at oprette forbindelse til: "
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Højde-bredde-forhold: Formod kvadratiske pixels (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Downloadet [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Upload undertekster"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Er du sikker på, at du vil uploade undertekstfilen \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Henter understøttede sprog..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Kunne ikke logge ind på \"%S\" med brugernavnet \"%S\".\n\nIndtast venligst det korrekte brugernavn og adgangskode eller nulstil loginoplysningerne for at logge ind som en anonym bruger."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Automatisk søgning og download vil blive deaktiveret for alle mediefiler som indeholder de mønstre som indtastes her.\nSkriv f.eks.: \"privat mappe\\videoer|arbejde\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"stinavn\"\tHovedfilen eller -mappen som skal indlæses\n\t\t(jokertegn tilladt, \"-\" angiver standardinput)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubnavn\"\tIndlæs en yderligere lydfil"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"fil\"\tIndlæs en yderligere lydfil forskudt med XXms\n\t\t(hvis filen indeholder \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tStart rendering i D3D fuldskærm-tilstand"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"undert.navn\"\tIndlæs en yderligere undertekstfil"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filternavn\"\tIndlæs DirectShow-filtre fra et dynamisk link bibliotek (jokertegn tilladt)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tKør i DVD-tilstand, \"stinavn\" betyder DVD-mappen (valgfri)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tStart afspilning ved titel T, kapitel C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tStart afspilning ved titel T, position P (tt:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tIndlæs alle spor fra en lyd-CD eller (S)VCD,\n\t\t\"stinavn\" betyder drevstien (valgfri)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tÅbn standard videoenheden"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tÅbn filen, start ikke afspilning automatisk"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tStart afspilning af filen så snart afspilleren køre"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tLuk afspilleren efter afspilning (virker kun når /play bruges)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tLuk styresystemet efter afspilning"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tSæt styresystemet i standby-tilstand efter afspilning"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tSæt styresystemet i dvale efter afspilning"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tLog af efter afspilning"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tLås arbejdsstation efter afspilning"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tSluk monitoren efter afspilning"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tÅbn næste fil i mappen efter afspilning"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tStart i fuldskærm-tilstand"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tStart i minimeret-tilstand"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tBrug en ny instans af afspilleren"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tTilføj \"stinavn\" til spilleliste. Kan kombineres med /open og /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tGør spillelistens rækkefølge tilfældig"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tOpret filtilknytninger for videofiler"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tOpret filtilknytninger for lydfiler"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tOpret filtilknytninger for spillelistefiler"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tOpret filtilknytninger for alle understøttede filtyper"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tFjern alle filtilknytninger"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tStart afspilning ved \"ms\" (= millisekunder)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos tt:mm:ss\tStart afspilning ved placering tt:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize b,h\tIndstil en fast vinduesstørrelse"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tStart afspiller på monitor N, hvor N starter fra 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tStart med brug af lyd-renderen N, hvor N starter fra 1 (se \"Output\" indstillinger)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Fo\"\tStart brug af \"Fo\" shader-forudindstilling"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"navn\"\tAngiv det Panorering og skanning-forudindstillingsnavn som skal bruges"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tTilknyt format-ikoner igen"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tÅbn MPC-HC i baggrunden"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tStart webgrænseflade på angivet port"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tVis fejlfindingsoplysninger i OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDeaktivér fejlrapporteringen"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tBrug MPC-HC som slave"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"indeks\"\tIndstil indekset af GPU'en brugt til hardware-dekodning.\n\t\tKun tilgængelig for CUVID og DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tGendan standardindstillinger"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tVis hjælp om kommandolinjekontakter"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Grænseværdi for undertekstervurdering som automatisk vil blive downloadet. Højere værdier betyder at mere præcise match vil blive indlæst, lavere værdi kan resulterer i indlæsning af forkerte undertekster, men der er ingen perfekt værdi. Vælg en som virker bedst for dig."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Lydforsinkelse (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Størrelse i pixels af standardværktøjslinjen."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Brug forældet værktøjslinje i stedet for den nye vektoriseret."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Kopiér URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.de.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.de.dialogs.po
index d857d2a52..899861cb1 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.de.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.de.dialogs.po
@@ -1,20 +1,20 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Gaugg_Markus, 2014
-# Gaugg_Markus, 2014
-# Luan <luanmail@gmx.net>, 2014
+# Gaugg_Markus, 2014,2016
+# Gaugg_Markus, 2014,2016
+# Luan <luanmail@gmx.net>, 2014-2017
# Luan <luanmail@gmx.net>, 2014
# Luan <luanmail@gmx.net>, 2014
# M T <michtrz@gmail.com>, 2013-2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-10-04 20:00+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-01-29 09:18+0000\n"
"Last-Translator: Luan <luanmail@gmx.net>\n"
-"Language-Team: German (http://www.transifex.com/projects/p/mpc-hc/language/de/)\n"
+"Language-Team: German (http://www.transifex.com/mpc-hc/mpc-hc/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -79,7 +79,7 @@ msgstr "&Aufnahme"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
msgid "Enable built-in audio switcher filter (requires restart)"
-msgstr "Internen Audio-Umschalter aktivieren (Neustart notwendig)"
+msgstr "Interner Audio-Switcher (Neustart erforderlich)"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
msgid "Normalize"
@@ -103,7 +103,7 @@ msgstr "Tonverstärkung:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
msgid "Down-sample to 44100 Hz"
-msgstr "Auf 44.100 Hz umrechnen"
+msgstr "Abtastrate auf 44.1 kHz verringern"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
@@ -111,10 +111,10 @@ msgstr "Audioverzögerung (ms):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
-msgstr "Benutzerdefinierte Kanalzuweisung aktivieren"
+msgstr "Benutzerdefinierte Kanalzuordnung"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Anzahl der Eingangskanäle:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -122,16 +122,16 @@ msgid "input channels:"
msgstr " "
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Um Änderungen umgehend zu übernehmen, bei der Auswahl bitte \"Shift\" drücken."
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
-msgstr "Gehe zu"
+msgstr "Springen zu"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
-msgstr "Um die Wiedergabe an einer bestimmten Stelle fortzusetzen, bitte einen Zeitcode im Format \"[hh:]mm:ss.ms\" angeben."
+msgstr "Um die Wiedergabe an einer bestimmten Position fortzusetzen, bitte einen Zeitcode im Format \"[hh:]mm:ss.ms\" angeben."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Time"
@@ -139,7 +139,7 @@ msgstr "Zeitpunkt:"
msgctxt "IDD_GOTO_DLG_IDC_OK1"
msgid "Go!"
-msgstr "OK"
+msgstr "&Springen"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
@@ -151,7 +151,7 @@ msgstr "Videobild:"
msgctxt "IDD_GOTO_DLG_IDC_OK2"
msgid "Go!"
-msgstr "OK"
+msgstr "S&pringen"
msgctxt "IDD_OPEN_DLG_CAPTION"
msgid "Open"
@@ -194,8 +194,8 @@ msgid "About"
msgstr "Über"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 siehe Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 siehe Authors.txt."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -203,7 +203,7 @@ msgstr "Dieses Programm ist Freeware und steht unter der GNU General Public Lice
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Übersetzung: alexW, Markus Gaugg und Luan"
+msgstr "Übersetzung von Luan und Markus Gaugg."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
@@ -287,7 +287,7 @@ msgstr "Taskleistensymbol anzeigen"
msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
msgid "Show OSD (requires restart)"
-msgstr "OSD anzeigen (Neustart notwendig)"
+msgstr "OSD anzeigen (Neustart erforderlich)"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
msgid "Limit window proportions on resize"
@@ -307,11 +307,11 @@ msgstr "Disc-Wiedergabe deaktivieren"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
msgid "Process priority above normal"
-msgstr "Prozesspriorität höher als \"normal\""
+msgstr "Prozesspriorität höher als normal"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
-msgstr "Audio-Cover anzeigen"
+msgstr "Coverbild anzeigen"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "History"
@@ -379,7 +379,7 @@ msgstr "Weitere Einstellungen"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
-msgstr "Untertitel im Line 21 Decoder erlauben"
+msgstr "Erweiterte Untertitel über Line 21 Decoder ausgeben"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
@@ -411,7 +411,7 @@ msgstr "R"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Playback"
-msgstr "Wiedergabesteuerung"
+msgstr "Wiederholung"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
msgid "Play"
@@ -426,11 +426,15 @@ msgid "time(s)"
msgstr "Mal ab"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Modus:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Nach Wiedergabe"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
+msgid "Default zoom"
msgstr "Standard-Ansicht"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
@@ -439,7 +443,7 @@ msgstr "Zoom verwenden:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
-msgstr "Faktor für Auto-Zoom:"
+msgstr "In Desktop einpassen mit:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
msgid "%"
@@ -447,7 +451,7 @@ msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Default track preference"
-msgstr "Bevorzugte Sprachspuren"
+msgstr "Bevorzugte Spuren"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
@@ -477,13 +481,9 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Audiodateien automatisch laden"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Internen Untertitel-Renderer verwenden"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
-msgstr "Steuerungskontrolle"
+msgstr "Steuerung"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Volume step:"
@@ -527,7 +527,7 @@ msgstr "ms"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Texture settings (open the video again to see the changes)"
-msgstr "Textur-Einstellungen (Neuladen des Videos notwendig)"
+msgstr "Untertitel-Textur (Neuladen des Videos erforderlich)"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Sub pictures to buffer:"
@@ -563,7 +563,7 @@ msgstr "Untertitelbilder bei verzögerter Warteschlange verwerfen"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
-msgstr "Renderer-Layout"
+msgstr "Untertitel-Layout"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
msgid "Apply aspect ratio compensation for anamorphic videos"
@@ -574,8 +574,8 @@ msgid "Warning"
msgstr "Hinweis"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Wird hier \"Untertitelposition anpassen\" zusammen mit Vollbild-Antialiasing in den Einstellungen der Grafikkarte aktiviert, bleibt die Bildqualität unverändert. Dabei steigt die CPU-Auslastung aber deutlich an."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Wird Vollbild-Antialiasing in den Einstellungen der Grafikkarte aktiviert, bleibt die Darstellungsqualität der Untertitel unverändert. Auch kann die CPU-Auslastung deutlich ansteigen."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -587,7 +587,7 @@ msgstr "&Standard"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
msgid "Set"
-msgstr "&Übernehmen"
+msgstr "&Anwenden"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
msgid "Association"
@@ -681,17 +681,17 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Minimieren des Fensters auf sekundärem Anzeigegerät bei Vollbild verhindern"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Windows-Taskbarfunktionen verwenden (ab Windows 7)"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Erweiterte Taskleistenfunktionen verwenden"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Nächste Mediendatei im Ordner bei nur einem Eintrag in der Wiedergabeliste durch\n\"Vorwärts/Rückwärts springen\" öffnen"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Nächste Ordnerdatei bei nur einem Eintrag in der Wiedergabeliste durch \"Vorwärts/Rückwärts springen\" öffnen"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "Zeit-Tooltip verwenden:"
+msgid "Show time tooltip:"
+msgstr "Zeit-Tooltip anzeigen:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
@@ -699,7 +699,7 @@ msgstr "OSD-Schrift:"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
msgid "Enable Logitech LCD support (experimental)"
-msgstr "LCD-Unterstützung für Logitech-Tastaturen aktivieren (experimentell)"
+msgstr "LCD-Unterstützung für Logitech-Tastaturen (experimentell)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
@@ -707,7 +707,7 @@ msgstr "Mauszeiger bei Wiedergabe im Fenster automatisch ausblenden"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
msgid "Add Filter..."
-msgstr "H&inzufügen..."
+msgstr "&Hinzufügen..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
msgid "Remove"
@@ -727,11 +727,11 @@ msgstr "Priorität setzen:"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
msgid "Up"
-msgstr "&Hoch"
+msgstr "H&öher"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON4"
msgid "Down"
-msgstr "&Runter"
+msgstr "&Tiefer"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
msgid "Add Media Type..."
@@ -823,15 +823,15 @@ msgstr "Favoriten verwalten"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
msgid "Rename"
-msgstr "&Umbenennen"
+msgstr "U&mbenennen"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
msgid "Move Up"
-msgstr "Nach &oben"
+msgstr "&Höher"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
msgid "Move Down"
-msgstr "Nach &unten"
+msgstr "&Tiefer"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
msgid "Delete"
@@ -855,11 +855,11 @@ msgstr "&Löschen"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
msgid "Up"
-msgstr "&Hoch"
+msgstr "H&öher"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
msgid "Down"
-msgstr "&Runter"
+msgstr "&Tiefer"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
msgid "&Set"
@@ -883,15 +883,15 @@ msgstr "Zoom: 0.2 -> 3.0"
msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
msgid "Global Media Keys"
-msgstr "Tasten global abfragen"
+msgstr "Multimedia-Tasten global abfragen"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
msgid "Select All"
-msgstr "&Alle auswählen"
+msgstr "&Alle markieren"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
msgid "Reset Selected"
-msgstr "&Befehl zurücksetzen"
+msgstr "Markierte &zurücksetzen"
msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
msgid "Warning"
@@ -899,7 +899,7 @@ msgstr "Warnung"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
-msgstr "Einige Filtergraphen-Pins konnten nicht verbunden werden. Möglicherweise sind notwendige Codecs oder Filter nicht installiert."
+msgstr "Einige Filtergraphen-Pins konnten nicht verbunden werden. Möglicherweise sind die nötigen Codecs oder Filter nicht installiert."
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
msgid "The following pin(s) failed to find a connectable filter:"
@@ -943,7 +943,7 @@ msgstr "JPEG-Qualität:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Thumbnails:"
-msgstr "Miniaturansichten:"
+msgstr "Layout:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "rows"
@@ -955,7 +955,7 @@ msgstr "Spalten"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Image width:"
-msgstr "Bildbreite:"
+msgstr "Breite:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "pixels"
@@ -1130,8 +1130,8 @@ msgid "Audio Renderer"
msgstr "Audio-Renderer"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Einstellungen für VMR-7/VMR-9 (renderless) und EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Einstellungen für VMR-9 (renderless) und EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1174,8 +1174,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Untertitel *"
+msgid "Subtitles"
+msgstr "Untertitel"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1190,12 +1190,16 @@ msgid "Rotation"
msgstr "Rotation"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Externe Filter (z.B. VSFilter) können Untertitel mit allen Renderern darstellen."
+msgid "Subtitle Renderer"
+msgstr "Untertitel-Renderer"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Shader zwischenspeichern"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
-msgstr "Portnummer verwenden:"
+msgstr "Port überwachen:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
msgid "Launch in web browser..."
@@ -1203,12 +1207,16 @@ msgstr "Im Browser öffnen..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
msgid "Enable compression"
-msgstr "Komprimierung aktivieren"
+msgstr "Inhalte komprimieren"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Nur lokalen Zugriff erlauben"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Medienvorschau"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Debug-Information ausgeben"
@@ -1234,24 +1242,52 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI-Handler (.ext1=Pfad1;.ext2=Pfad2;...):"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
+msgid "Download subtitles"
msgstr "Untertitel herunterladen"
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "&Untertitel laden"
-
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Aktuell geladene Untertitel ersetzen"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "&Herunterladen"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "&Aktualisieren"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "&Abbrechen"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "&Optionen..."
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Untertitel hochladen"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "&Hochladen"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "&Abbrechen"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "&Optionen..."
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "&Speichern..."
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Color controls (for VMR-9, EVR and madVR)"
-msgstr "Farbeinstellungen für VMR-9, EVR und madVR"
+msgstr "Farbsteuerung für VMR-9, EVR und madVR"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Brightness"
@@ -1279,11 +1315,11 @@ msgstr "Programm-Update"
msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
msgid "Enable automatic update check"
-msgstr "Automatische Update-Prüfung aktivieren"
+msgstr "Automatische Update-Prüfung"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Tagesintervall:"
+msgid "Check every:"
+msgstr "Tage zwischen den Prüfungen:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1295,15 +1331,15 @@ msgstr "Programm-Einstellungen verwalten"
msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
msgid "Reset"
-msgstr "&Zurücksetzen..."
+msgstr "&Zurücksetzen"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
msgid "Export"
-msgstr "S&ichern..."
+msgstr "&Exportieren..."
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
msgid "Export keys"
-msgstr "&Tastenbefehle sichern..."
+msgstr "&Tasten exportieren..."
msgctxt "IDD_TUNER_SCAN_CAPTION"
msgid "Tuner scan"
@@ -1475,7 +1511,7 @@ msgstr "Zusatzfenster ausblenden"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
msgid "Exit fullscreen at the end of playback"
-msgstr "Vollbild bei Beendigung der Wiedergabe verlassen"
+msgstr "Vollbild am Ende der Wiedergabe verlassen"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Fullscreen monitor"
@@ -1487,7 +1523,7 @@ msgstr "Anzeigemodus bei Vollbild automatisch wechseln"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
msgid "Add"
-msgstr "&Hinzufügen"
+msgstr "&Neu"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
msgid "Del"
@@ -1495,11 +1531,11 @@ msgstr "&Entfernen"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
msgid "Up"
-msgstr "Nach &oben"
+msgstr "H&öher"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON4"
msgid "Down"
-msgstr "Nach &unten"
+msgstr "&Tiefer"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
msgid "Apply default monitor mode on fullscreen exit"
@@ -1527,15 +1563,15 @@ msgstr "Scan"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
msgid "Prefer forced and/or default subtitles tracks"
-msgstr "Vorgegebene Untertitelspuren bevorzugen"
+msgstr "Erzwungene Anzeige und Standardspur bevorzugen"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
msgid "Prefer external subtitles over embedded subtitles"
-msgstr "Externe Untertitel bevorzugen"
+msgstr "Untertiteldateien gegenüber eingebetteten Untertiteln bevorzugen"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
-msgstr "Interne Untertitel nicht verwenden"
+msgstr "Eingebettete Untertitel nicht verwenden"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
msgid "Autoload paths"
@@ -1546,16 +1582,28 @@ msgid "Reset"
msgstr "&Standard"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Untertiteldatenbank"
+msgid "Online search, download and upload subtitles"
+msgstr "Online-Untertitel"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Untertitel für untertitellose Mediendateien automatisch herunterladen"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Ausgewiesene Untertitel für Hörgeschädigte bevorzugen"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Teilpfade ausgenommener Mediendateien:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Basis-URL:"
+msgid "Languages in order of preference:"
+msgstr "Auswahl der Untertitelsprachen:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "&Testen"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Wiedergegebene Untertitel automatisch hochladen"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1575,7 +1623,7 @@ msgstr "&Update ignorieren"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr "Mit den hier aufgeführten Shader-Modulen können verschiedene Effekte in das laufende Bild des Video-Renderers eingebunden werden."
+msgstr "Mit den hier aufgeführten Shadern können verschiedene Effekte in das laufende Bild des Video-Renderers eingebunden werden."
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
@@ -1611,11 +1659,11 @@ msgstr "L&öschen"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active pre-resize shaders"
-msgstr "Aktive Pre-Resize-Shader"
+msgstr "Aktive Shader für Pre-Resize"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active post-resize shaders"
-msgstr "Aktive Post-Resize-Shader"
+msgstr "Aktive Shader für Post-Resize"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
@@ -1643,29 +1691,109 @@ msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr "Folgende Werte bitte nur bei genauer Kenntnis der jeweiligen Einstellung anpassen."
+msgstr "Folgende Werte bitte nur bei genauer Kenntnis der jeweiligen Einstellung anpassen:"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
-msgstr "true"
+msgstr "wahr"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
msgid "False"
-msgstr "false"
+msgstr "falsch"
msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Standard"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Audiogerät"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Exklusiver Modus"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Bitstreaming erlauben"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Weitere Einstellungen"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Crossfeed für Kopfhörer"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "Chu Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "Jan Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Grenze:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Pegel:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Hinweis"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Bei Wiedergabe lauter verlustbehaftet encodierter Audioinhalte können hörbare Tonstörungen auftreten. Um diese möglichst zu vermeiden, sollte die Lautstärke maximal rund 85 % betragen."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG-Qualität:"
msgctxt "IDD_CMD_LINE_HELP_CAPTION"
msgid "Command line help"
-msgstr "Hilfe für Befehlszeile"
+msgstr "Kommandozeilenhilfe"
msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Fehlerberichterstattung"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Der MPC-HC wurde leider unerwartet beendet."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Zur Diagnose des Problems einen Fehlerbericht senden"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Optionale Angaben"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "E-Mail-Adresse:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Die Angabe der E-Mail-Adresse ist optional und dient ausschließlich zur Kontaktaufnahme, falls weitere Informationen erforderlich sind."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Problembeschreibung (englisch):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "&Neu starten"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "&Beenden"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.de.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.de.menus.po
index e3b733c08..2aaa400e0 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.de.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.de.menus.po
@@ -1,19 +1,21 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Gaugg_Markus, 2016
+# Gaugg_Markus, 2016
# JellyFrog, 2014
# JellyFrog, 2014
-# Luan <luanmail@gmx.net>, 2014
+# Luan <luanmail@gmx.net>, 2014-2016
# Luan <luanmail@gmx.net>, 2014
# M T <michtrz@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-04 17:40+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-12-03 15:27+0000\n"
"Last-Translator: Luan <luanmail@gmx.net>\n"
-"Language-Team: German (http://www.transifex.com/projects/p/mpc-hc/language/de/)\n"
+"Language-Team: German (http://www.transifex.com/mpc-hc/mpc-hc/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -46,7 +48,7 @@ msgstr "&Verzeichnis öffnen..."
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
-msgstr "Disc-&Wiedergabe"
+msgstr "Dis&c-Wiedergabe"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
@@ -54,11 +56,11 @@ msgstr "&Zuletzt geöffnete Dateien"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
-msgstr "S&chließen"
+msgstr "&Schließen"
msgctxt "ID_FILE_SAVE_COPY"
msgid "&Save a Copy..."
-msgstr "&Kopie speichern unter..."
+msgstr "&Kopie speichern..."
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
@@ -66,31 +68,27 @@ msgstr "B&ild speichern..."
msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
-msgstr "Miniatur&ansichten speichern..."
-
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Untertiteldatei &laden..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Untertiteldatei &speichern..."
+msgstr "Mi&niaturbilder speichern..."
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "&Untertiteldatenbank"
+msgid "S&ubtitles"
+msgstr "&Untertitel"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Laden..."
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Durchsuchen"
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "&Speichern..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Untertitel &hochladen"
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "H&erunterladen..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Untertitel h&erunterladen..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "H&ochladen..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -174,23 +172,23 @@ msgstr "&Zoom"
msgctxt "ID_VIEW_ZOOM_50"
msgid "&50%"
-msgstr "&50%"
+msgstr "&50 %"
msgctxt "ID_VIEW_ZOOM_100"
msgid "&100%"
-msgstr "&100%"
+msgstr "&100 %"
msgctxt "ID_VIEW_ZOOM_200"
msgid "&200%"
-msgstr "&200%"
+msgstr "&200 %"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
-msgstr "Auto-&Anpassung"
+msgstr "&Eingepasst"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "Auto-&Verkleinerung"
+msgstr "&Nur verkleinert"
msgctxt "POPUP"
msgid "R&enderer Settings"
@@ -200,25 +198,29 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Tearing-Test"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "&Anzeigestatistik"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Restzeitanzeige"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "&Wiedergabezeit"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "&Namensanzeige"
msgctxt "POPUP"
msgid "&Output Range"
-msgstr "&EVR-Farbraum"
+msgstr "A&usgabebereich"
msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
msgid "&0 - 255"
-msgstr "0 - 255"
+msgstr "&0 - 255"
msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
msgid "&16 - 235"
-msgstr "16 - 235"
+msgstr "&16 - 235"
msgctxt "POPUP"
msgid "&Presentation"
@@ -230,7 +232,7 @@ msgstr "&Direct3D-Vollbildmodus"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "&GUI-Unterstützung bei Direct3D-Vollbildmodus"
+msgstr "&GUI bei Direct3D-Vollbildmodus"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
@@ -242,27 +244,27 @@ msgstr "10-Bit-RGB-&Eingabe erzwingen"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
-msgstr "Gleitkommaverarbeitung mit &voller Genauigkeit"
+msgstr "&Volle Gleitkommagenauigkeit"
msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
msgid "&Half Floating Point Processing"
-msgstr "Gleitkommaverarbeitung mit &halber Genauigkeit"
+msgstr "&Halbe Gleitkommagenauigkeit"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
-msgstr "&Windows-Desktopgestaltung (Aero) deaktivieren"
+msgstr "De&sktopgestaltung deaktivieren"
msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time &Correction"
-msgstr "&Bildzeit-Korrektur"
+msgstr "&Bildzeitkorrektur"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "&Farbmanagement"
+msgstr "&Farbabstimmung"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
-msgstr "&Aktivieren"
+msgstr "&Farbmanagement"
msgctxt "POPUP"
msgid "&Input Type"
@@ -326,7 +328,7 @@ msgstr "&VSync-Kontrolle"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "&VSync-Kontrolle"
+msgstr "&VSync"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
@@ -362,7 +364,7 @@ msgstr "&Auf geleerte GPU warten"
msgctxt "POPUP"
msgid "R&eset"
-msgstr "Ein&stellungen"
+msgstr "Vor&einstellungen"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
@@ -408,17 +410,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Fenster von &außen berühren"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "Seitenverhältnis &beibehalten"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
+msgid "&Aspect Ratio"
msgstr "&Seitenverhältnis"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Auto"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Standard (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -440,6 +438,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "&Quadratische Pixel (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Anzeige-&Verzerrung korrigieren"
@@ -526,16 +528,32 @@ msgstr "&Wiedergabe"
msgctxt "ID_PLAY_PLAYPAUSE"
msgid "&Play/Pause"
-msgstr "&Wiedergabe/Pause"
+msgstr "Wiedergabe&/Pause"
msgctxt "ID_PLAY_STOP"
msgid "&Stop"
msgstr "&Stopp"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "Einzel&bild vor"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Wiederholung"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "&Endlosschleife"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Datei"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Wiedergabeliste"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "Tempo v&erringern"
@@ -557,15 +575,15 @@ msgid "S&haders"
msgstr "S&hader"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
+msgid "&Audio Track"
msgstr "A&udiospur"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
+msgid "Su&btitle Track"
msgstr "Unter&titelspur"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
+msgid "Vide&o Track"
msgstr "Videos&pur"
msgctxt "POPUP"
@@ -582,39 +600,47 @@ msgstr "&Verringern"
msgctxt "ID_VOLUME_MUTE"
msgid "&Mute"
-msgstr "&Stummschaltung"
+msgstr "&Ton aus"
msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Nach Wieder&gabe"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "&Keine Aktion"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "&Nächste Ordnerdatei öffnen"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "B&ildschirm ausschalten"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Programm beenden"
msgctxt "ID_AFTERPLAYBACK_STANDBY"
msgid "&Stand By"
-msgstr "&Energie sparen (falls verfügbar)"
+msgstr "&Standby-Modus"
msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
msgid "&Hibernate"
-msgstr "&Ruhezustand (falls verfügbar)"
+msgstr "&Ruhezustand"
msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
msgid "Shut&down"
-msgstr "&Computer herunterfahren"
+msgstr "Computer &herunterfahren"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
-msgstr "Benutzer &abmelden"
+msgstr "&Benutzer abmelden"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "Benutzer &sperren"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "&Bildschirm ausschalten"
+msgstr "Computer s&perren"
msgctxt "POPUP"
msgid "&Navigate"
@@ -630,7 +656,7 @@ msgstr "&Vorwärts"
msgctxt "ID_NAVIGATE_GOTO"
msgid "&Go To..."
-msgstr "&Gehe zu..."
+msgstr "&Springen zu..."
msgctxt "ID_NAVIGATE_TITLEMENU"
msgid "&Title Menu"
@@ -654,7 +680,7 @@ msgstr "&Blickwinkelmenü"
msgctxt "ID_NAVIGATE_CHAPTERMENU"
msgid "&Chapter Menu"
-msgstr "Ka&pitelmenü"
+msgstr "&Kapitelmenü"
msgctxt "ID_FAVORITES"
msgid "F&avorites"
@@ -674,11 +700,11 @@ msgstr "&Auf Update prüfen"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
-msgstr "Hilfe für &Befehlszeile"
+msgstr "&Kommandozeile"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
-msgstr "&Toolbar-Bilder herunterladen"
+msgstr "&Toolbar-Bilder"
msgctxt "ID_HELP_DONATE"
msgid "&Donate"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.de.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.de.strings.po
index 91657ac33..a904b7287 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.de.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.de.strings.po
@@ -1,10 +1,10 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Gaugg_Markus, 2014-2016
# Gaugg_Markus, 2014
-# Gaugg_Markus, 2014
-# Luan <luanmail@gmx.net>, 2014
+# Luan <luanmail@gmx.net>, 2014-2017
# Luan <luanmail@gmx.net>, 2014
# Luan <luanmail@gmx.net>, 2014
# M T <michtrz@gmail.com>, 2013-2014
@@ -13,10 +13,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-03 13:10+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 20:15+0000\n"
"Last-Translator: Luan <luanmail@gmx.net>\n"
-"Language-Team: German (http://www.transifex.com/projects/p/mpc-hc/language/de/)\n"
+"Language-Team: German (http://www.transifex.com/mpc-hc/mpc-hc/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -67,10 +67,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Eigenschaften"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Datei"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Stan&dard-Style"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Wiedergabeliste"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Dateien"
@@ -81,7 +89,7 @@ msgstr "DVDs"
msgctxt "IDS_INFOBAR_CHANNEL"
msgid "Channel"
-msgstr "Kanal"
+msgstr "Sender"
msgctxt "IDS_INFOBAR_TIME"
msgid "Time"
@@ -113,7 +121,7 @@ msgstr "Signal"
msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
msgid "Strength: %d dB, Quality: %ld%%"
-msgstr "Stärke: %d dB, Qualität: %ld%%"
+msgstr "Stärke: %d dB, Qualität: %ld %%"
msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
msgid "Styles"
@@ -121,7 +129,27 @@ msgstr "Style anpassen"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "Positioniert Untertitel je nach Format automatisch, falls das Render-Ziel nicht vorgegeben ist. Bei SSA/ASS wird die Position relativ zum Videobild, andernfalls relativ zum Videofenster berechnet."
+msgstr "Wird das Renderziel nicht festgelegt, werden SSA/ASS weiter relativ zum Videobild, alle anderen Textformate aber relativ zum Videofenster ausgerichtet."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Wiederholung: Wiedergabeliste"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Wiederholung: Datei"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Wiederholung: Endlosschleife (ein)"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Wiederholung: Endlosschleife (aus)"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Wiederholung: Endlosschleife (ein/aus)"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
@@ -245,11 +273,11 @@ msgstr "Schriftart"
msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
msgid "Failed to render some of the pins of the DVD Navigator filter"
-msgstr "Rendering einiger DVD-Navigator-Filter-Pins fehlgeschlagen"
+msgstr "Kann einige DVD-Navigator-Filter-Pins nicht rendern"
msgctxt "IDS_DVD_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for DVD playback"
-msgstr "Abfrage der DVD-Wiedergabe-Interfaces fehlgeschlagen"
+msgstr "Kann DVD-Wiedergabe-Interface nicht abfragen"
msgctxt "IDS_CAPTURE_LIVE"
msgid "Live"
@@ -257,19 +285,19 @@ msgstr "Live"
msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
msgid "Can't add video capture filter to the graph"
-msgstr "Videoaufnahme-Filter konnte dem Filtergraphen nicht hinzugefügt werden"
+msgstr "Kann Videoaufnahme-Filter zum Filtergraphen nicht hinzufügen"
msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
msgid "Can't add audio capture filter to the graph"
-msgstr "Audioaufnahme-Filter konnte dem Filtergraphen nicht hinzugefügt werden"
+msgstr "Kann Audioaufnahme-Filter zum Filtergraphen nicht hinzufügen"
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
-msgstr "Aufnahmegerät konnte nicht geöffnet werden"
+msgstr "Kann Aufnahmegerät nicht öffnen"
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
-msgstr "Öffnen fehlgeschlagen, unzulässige Eingabeparameter"
+msgstr "Ungültiger Eingabeparameter"
msgctxt "IDS_EDIT_LIST_EDITOR"
msgid "Edit List Editor"
@@ -277,11 +305,11 @@ msgstr "List-Editor bearbeiten"
msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
msgid "The entered time is greater than the file duration."
-msgstr "Die angegebene Zeit überschreitet die Laufzeit der Mediendatei."
+msgstr "Der angegebene Zeitpunkt ist ungültig. Die vorgegebene Laufzeit kann nicht überschritten werden."
msgctxt "IDS_MISSING_ICONS_LIB"
msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
-msgstr "Icon-Bibliothek \"mpciconlib.dll\" nicht gefunden. Diese wird für die Darstellung der Dateizuordnung benötigt. Um die Datei wiederherzustellen, kann der MPC-HC neu installiert werden."
+msgstr "Die Icon-Bibliotheksdatei \"mpciconlib.dll\" konnte nicht gefunden werden. Bitte den MPC-HC neu installieren, um die Darstellung der Dateizuordnung wiederherzustellen."
msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
msgid "File"
@@ -329,14 +357,14 @@ msgstr "Wiedergabeliste"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
-msgstr "Ein/Aus"
+msgstr "Priorität"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
+msgid "From (FPS)"
msgstr "Von (fps)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr "Bis (fps)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -357,15 +385,15 @@ msgstr "System-Standard"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
-msgstr "Abfrage der Wiedergabe-Interfaces fehlgeschlagen"
+msgstr "Kann Wiedergabe-Interface nicht abfragen"
msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
msgid "Could not set target window for graph notification"
-msgstr "Zielfenster für Filtergraph-Benachrichtigung konnte nicht eingerichtet werden"
+msgstr "Kann Fenster für Filtergraph-Benachrichtigung nicht einrichten"
msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
msgid "Failed to render all pins of the DVD Navigator filter"
-msgstr "Rendering aller DVD-Navigator-Filter-Pins fehlgeschlagen"
+msgstr "Kann keine DVD-Navigator-Filter-Pins rendern"
msgctxt "IDS_PLAYLIST_OPEN"
msgid "&Open"
@@ -417,7 +445,7 @@ msgstr "&Löschen"
msgctxt "IDS_SUBRESYNC_DUPLICATE"
msgid "D&uplicate"
-msgstr "D&uplizieren"
+msgstr "&Duplizieren"
msgctxt "IDS_SUBRESYNC_RESET"
msgid "&Reset"
@@ -425,15 +453,15 @@ msgstr "&Zurücksetzen"
msgctxt "IDS_MPLAYERC_104"
msgid "Subtitle Delay -"
-msgstr "Untertitelverzögerung verringern"
+msgstr "Untertitelverzögerung (-)"
msgctxt "IDS_MPLAYERC_105"
msgid "Subtitle Delay +"
-msgstr "Untertitelverzögerung erhöhen"
+msgstr "Untertitelverzögerung (+)"
msgctxt "IDS_FILE_SAVE_THUMBNAILS"
msgid "Save thumbnails"
-msgstr "Miniaturansichten speichern"
+msgstr "Miniaturbilder speichern"
msgctxt "IDD_PPAGEPLAYBACK"
msgid "Playback"
@@ -461,7 +489,7 @@ msgstr "Optimierungen"
msgctxt "IDD_PPAGEAUDIOSWITCHER"
msgid "Internal Filters::Audio Switcher"
-msgstr "Interne Filter::Audio-Umschalter"
+msgstr "Interne Filter::Audio-Switcher"
msgctxt "IDD_PPAGEEXTERNALFILTERS"
msgid "External Filters"
@@ -471,9 +499,37 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Wiedergabe::Shader"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Ressourcen"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Verschiedenes"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Wiedergabe::Erfassung"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Wiedergabe::Sync-Renderer"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Wiedergabe::Vollbild"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Interne Filter::Audio-Renderer"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
-msgstr "Audio-Umschalter"
+msgstr "Audio Switcher"
msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
msgid "New version of the icon library"
@@ -481,11 +537,11 @@ msgstr "Neue Version der Icon-Bibliothek"
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
-msgstr "Icons neu zuordnen?"
+msgstr "Icons wirklich erneut zuordnen?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
-msgstr "Diese Neuzuordnung behebt Darstellungsfehler der Icons, deren Bibliothek aktualisiert wurde. Dabei bleibt die zuvor festgelegte Dateizuordnung aber unverändert."
+msgstr "Die erneute Zuordnung der Icons behebt Darstellungsfehler, die durch eine Aktualisierung der Icon-Bibliothek verursacht wurden. Dabei bleiben zuvor festgelegte Dateizuordnungen aber unverändert."
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
@@ -495,18 +551,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (windowed)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (windowed)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderless)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (renderless)"
@@ -557,79 +605,43 @@ msgstr "Wiedergabe::Ausgabe"
msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
-msgstr "Programm::Web-Interface"
-
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Untertitel::Datenbank"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Ressourcen"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Verschiedenes"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Wiedergabe::Erfassung"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Wiedergabe::Sync Renderer"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Wiedergabe::Vollbild"
+msgstr "Programm::Webinterface"
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
-msgstr "Details"
+msgstr "Datei"
msgctxt "IDD_FILEPROPCLIP"
msgid "Clip"
-msgstr "Daten"
+msgstr "Details"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
-msgstr "Andere Video-Renderer fallen auf diesen Renderer zurück, wenn sie nicht geladen werden können. Unter Windows XP gleichbedeutend mit dem VMR-7 (windowed)."
+msgstr "Verwendet den Standard-Renderer für DirectShow-Video. Alle anderen Renderer fallen auf diesen Renderer zurück, wenn sie nicht geladen werden können. Entspricht unter Windows XP dem VMR 7 (windowed)."
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "Verwendet je nach Grafikkarte und Sichtbarkeit des Videofensters das GDI, DirectDraw oder den Overlay-Modus. Standard-Renderer von Windows 9x/ME/2000."
+msgstr "Verwendet je nach Eigenschaften der Grafikkarte und Sichtbarkeit des Videofensters das GDI, DirectDraw oder den Overlay-Modus. Entspricht dem Standard-Renderer von Windows 9x/ME/2000."
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "Rendert im Overlay-Modus. Normalerweise sind nur YUV-Formate erlaubt, diese werden aber ohne Farbumwandlung direkt in RGB dargestellt. Ist die schnellste und zuverlässigste Methode, mit der ein Vollbild über TV-Ausgang gespiegelt ausgegeben werden kann."
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Sehr stabil und kaum langsamer als der Overlay Mixer Renderer. Verwendet auch DirectDraw, arbeitet aber nach Möglichkeit im Overlay-Modus. Standard-Renderer von Windows XP."
+msgstr "Rendert im Overlay-Modus. Normalerweise sind nur YUV-Formate erlaubt. Diese werden aber ohne Farbumwandlung direkt in RGB dargestellt. Ist die schnellste und zuverlässigste Methode, um ein gespiegeltes Vollbild über TV-Ausgang auszugeben."
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Bietet im Unterschied zum VMR-7 (windowed) keinen Overlay-Modus und kann dadurch etwas langsamer sein. Nur unter DirectX 9 verfügbar."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Bietet im Unterschied zum VMR-7 (windowed) eine Unterstützung für Untertitel. Gespiegelte Darstellung eines Overlay-Videos funktioniert NICHT! Desktop-Farbtiefe sollte auf Echtfarben eingestellt sein."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Arbeitet sehr stabil, bietet aber keinen Overlay-Modus und kann dadurch etwas langsamer sein. Ist nur unter DirectX 9 verfügbar."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
-msgstr "Bietet im Unterschied zum VMR-9 (windowed) eine Unterstützung für Untertitel. Gespiegelte Darstellung eines Overlay-Videos KANN funktionieren! Desktop-Farbtiefe sollte auf Echtfarben eingestellt sein."
+msgstr "Bietet im Unterschied zum VMR-9 (windowed) eine Unterstützung für Untertitel. Die gespiegelte Darstellung eines Overlay-Videos KÖNNTE funktionieren. Desktop-Farbtiefe sollte auf Echtfarben eingestellt sein. Wird für Windows XP empfohlen."
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
-msgstr "Bietet im Unterschied zum VMR-9 einen echten bikubischen Zwei-Pass-Resizer."
+msgstr "Bietet im Unterschied zum VMR-9 (renderless) einen echten bikubischen Zwei-Pass-Resizer."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Verbindet sich mit allen Videotypen, um den eingehenden Stream zu verwerfen. Soll die CPU entlasten, falls keine Videoausgabe benötigt wird."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Verbindet sich mit sämtlichen Videotypen, um die eingehenden Samples zu verwerfen. Kann die CPU entlasten, falls keine Videoausgabe benötigt wird."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -637,28 +649,24 @@ msgstr "Unterstützt im Unterschied zum Null Video Renderer (anything) nur unkom
msgctxt "IDC_DSEVR"
msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
-msgstr "Grundsätzlich unter Windows Vista/7/8 verfügbar. Setzt unter Windows XP die Installation eines .NET Framework 3.5 oder höher voraus."
+msgstr "Ist generell ab Windows Vista verfügbar. Setzt unter Windows XP die Installation des .NET Framework 3.5 oder höher voraus."
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr "Bietet im Unterschied zum EVR eine Unterstützung für Untertitel und Postprocessing. Empfohlene Einstellung für Windows Vista/7/8."
+msgstr "Bietet im Unterschied zum EVR eine Unterstützung für Untertitel und Postprocessing. Wird ab Windows Vista empfohlen."
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
-msgstr "Renderer für höchste Videoqualität. Benötigt eine Grafikkarte, die Direct3D 9 oder höher unterstützt."
+msgstr "Bietet diverse Optionen für eine bessere Bildqualität. Benötigt eine Grafikkarte, die Direct3D 9 sowie Pixel-Shader 3.0 unterstützt."
msgctxt "IDC_DSSYNC"
msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
-msgstr "Bietet im Unterschied zum EVR (CP) mehrere Optionen für die Synchronisierung der Videobildrate mit der Bildwiederholfrequenz des Anzeigegeräts, um übersprungene oder duplizierte Videobilder zu entfernen."
+msgstr "Bietet Optionen für die Synchronisierung der Bildrate mit der Bildwiederholfrequenz der Anzeige, um übergangene und duplizierte Videobilder zu vermeiden."
msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Gibt RealMedia-Video über RealNetworks' eigenen Renderer aus. SMIL-Scripte funktionieren, können aber Probleme bereiten. Verwendet neben DirectDraw nach Möglichkeit den Overlay-Modus."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Gibt RealMedia-Video über den VMR-7 (renderless) aus."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Gibt RealMedia-Video über den VMR-9 (renderless) aus."
@@ -667,33 +675,17 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Gibt QuickTime-Video über Apple's eigenen Renderer aus. Ist bei größenverändertem oder verdecktem Videofenster vergleichsweise langsam. Kann mangels Overlay-Modus auf das GDI zurückzufallen."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Gibt QuickTime-Video über den VMR-7 (renderless) aus."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Gibt QuickTime-Video über den VMR-9 (renderless) aus."
msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
-msgstr "Die Video-Oberfläche ist eine gleichmäßige Offscreen-Oberfläche."
-
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "Stellt die verschiedenen Audio-Renderer bereit. Bitte den MPC-HC Audio Renderer vorerst nicht verwenden."
+msgstr "Stellt die Videooberfläche als gleichmäßige Offscreen-Oberfläche bereit."
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
-msgstr "Sync Renderer (EVR-CP)"
-
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "Fehler melden"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC unerwartet beendet. Zur Meldung des Problems bitte eine offizielle Programmversion mit Debug-Information verwenden.\n\nDiese Version jetzt herunterladen?"
+msgstr "Sync-Renderer (EVR-CP)"
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
@@ -737,7 +729,7 @@ msgstr "* nicht verfügbar *"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
msgid "The selected renderer is not installed."
-msgstr "Ausgewählter Renderer nicht installiert."
+msgstr "Der gewählte Renderer ist nicht verfügbar."
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
@@ -747,9 +739,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null Audio Device (uncompressed)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Interner Audio-Renderer"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -761,12 +753,16 @@ msgstr "MIME-Typ"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr "Um eingebettete Ressourcen im Browser anzuzeigen, muss das Web-Interface aktiviert werden. Zum Speichern der Information bitte den Button \"Speichern unter\" verwenden."
+msgstr "Zur Darstellung eingebetteter Ressourcen bitte das Webinterface aktivieren. Um nur die Informationen zu speichern, bitte den Button \"Speichern unter\" verwenden."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
msgstr "Untertitel herunterladen"
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Untertitel hochladen"
+
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
msgstr "Verzögerung (ms):"
@@ -777,11 +773,11 @@ msgstr "Auto"
msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
msgid "There are no customized keys to export."
-msgstr "Keine benutzerdefinierten Tastenbefehle verfügbar."
+msgstr "Keine benutzerdefinierten Tasten verfügbar."
msgctxt "IDS_RFS_NO_FILES"
msgid "No media files found in the archive"
-msgstr "Keine Mediendatei im Archiv gefunden"
+msgstr "Kann keine Mediendatei im Archiv finden"
msgctxt "IDS_RFS_COMPRESSED"
msgid "Compressed files are not supported"
@@ -793,15 +789,15 @@ msgstr "Verschlüsselte Archive werden nicht unterstützt"
msgctxt "IDS_RFS_MISSING_VOLS"
msgid "Couldn't find all archive volumes"
-msgstr "Archiv-Volumen unvollständig"
+msgstr "Kann Archiv-Volumen nicht finden"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Die Video-Oberfläche ist eine Textur-Oberfläche. 2D-Funktionen werden aber noch genutzt, um das Bild in den Hintergrundpuffer zu kopieren und zu strecken. Benötigt eine Grafikkarte, die 32-Bit, RGBA und Nicht-Zweierpotenztexturen in Videoauflösung unterstützt."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Stellt die Videooberfläche als Textur bereit. Dennoch werden 2D-Funktionen genutzt, um das Bild in den Hintergrundpuffer zu kopieren und zu strecken. Benötigt eine Grafikkarte, die 32-Bit, RGBA und Nicht-Zweierpotenztexturen in Auflösung des Videos oder höher unterstützt."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
-msgstr "Die Video-Oberfläche ist eine Textur-Oberfläche und wird als zwei Dreiecke in 3D gezeichnet. Ein in den Anzeige-Einstellungen aktiviertes Antialiasing kann die Rendergeschwindigkeit herabsetzen."
+msgstr "Stellt die Videooberfläche als Textur bereit, die mittels paarweiser Dreiecke in 3D gezeichnet wird. Ein in den Anzeige-Einstellungen aktiviertes Antialiasing kann die Rendergeschwindigkeit herabsetzen."
msgctxt "IDC_DX9RESIZER_COMBO"
msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
@@ -817,15 +813,27 @@ msgstr "Verbessert die Leistung auf Kosten der Kompatibilität einiger Renderer.
msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
msgid "Reduces tearing but prevents the toolbar from being shown."
-msgstr "Reduziert Tearing-Effekte. Allerdings werden dabei keine Steuerelemente angezeigt."
+msgstr "Reduziert Tearing-Effekte. Dabei werden Kontextmenüs und Dialoge jedoch nicht angezeigt."
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
-msgstr "Reduziert Tearing-Effekte unter Umgehung des von Direct3D verwendeten VSync."
+msgstr "Reduziert Tearing-Effekte unter Umgehung der von Direct3D verwendeten vertikalen Synchronisation."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Frequenzbereich scannen"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Kann Untertitel nicht laden oder mit Renderer darstellen"
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Verkürzt die Ladezeit bereits kompilierter Shader."
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
-msgstr "Öffnet eine VTS-Informationsdatei, um die zugehörigen Videodateien zu laden."
+msgstr "Liest VTSI-Dateien, um das zugehörige Video zu laden."
msgctxt "IDS_SRC_RFS"
msgid "Based on RARFileSource, doesn't support compressed files"
@@ -837,7 +845,7 @@ msgstr "Verwendet die internen LAV Filters."
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr "Verwendet die internen LAV Filters. Ist mit den Standard-Einstellungen\ndeaktiviert, da die Microsoft-eigenen Filter hier meist stabiler arbeiten.\nQuellen-Filter und Decoder-Filter dieser Formate sollten für bessere\nWiedergabe nicht unabhängig voneinander verwendet werden."
+msgstr "Verwendet die internen LAV Filters. Sollte deaktiviert\nbleiben, da Windows-eigene Filter hier meist stabiler\narbeiten. Sonst die internen LAV Filters möglichst für\nQuelle und Decoding aktivieren."
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
@@ -849,15 +857,15 @@ msgstr "Genauer VSync (ein/aus)"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr "Übernimmt die Einstellung des Standard-Styles, falls das Render-Ziel nicht vorgegeben ist."
+msgstr "Übernimmt die Einstellung des Standard-Styles, falls das Renderziel nicht festgelegt ist."
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
-msgstr "Unterbindet die Untertitelanimation und reduziert somit die CPU-Auslastung. Kann bei flimmernden Untertiteln verwendet werden."
+msgstr "Unterbindet animierte Untertitel und reduziert somit die CPU-Auslastung. Hilft bei aufblitzenden Untertiteln."
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr "Wird die Bilderanzahl im Puffer erhöht, wächst in der Regel auch die Renderer-Leistung. Dabei steigt die Speicherauslastung der Grafikkarte entspechend an."
+msgstr "Wird die Anzahl der gepufferten Untertitelbilder erhöht, wächst meist auch die Renderleistung. Dabei steigt die Speicherauslastung der Grafikkarte entsprechend an."
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
@@ -865,7 +873,7 @@ msgstr "Zeigt nach Betätigung die aktuelle Dateizuordnung an. Dabei sind Eintr
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr "Deaktiviert werden flimmernde Untertitel zwar wirksam vermieden, dafür überspringt der Video-Renderer aber gegebenenfalls einzelne Videobilder."
+msgstr "Vermeidet deaktiviert zwar blinkende Untertitel, dafür überspringt der Video-Renderer aber eventuell einige Videobilder."
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -893,15 +901,15 @@ msgstr "Tempo erhöhen\nTempo erhöhen"
msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
-msgstr "Stummschaltung ein"
+msgstr "Ton aus"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
-msgstr "Stummschaltung aus"
+msgstr "Ton ein"
msgctxt "ID_VOLUME_MUTE_DISABLED"
msgid "No audio"
-msgstr "Kein Audio"
+msgstr "Kein Audiosignal"
msgctxt "ID_NAVIGATE_SKIPBACK"
msgid "Skip back\nSkip back"
@@ -913,11 +921,11 @@ msgstr "Vorwärts springen\nVorwärts springen"
msgctxt "IDS_SUBRESYNC_ORIGINAL"
msgid "&Original"
-msgstr "&Original"
+msgstr "&Originalzeit"
msgctxt "IDS_SUBRESYNC_CURRENT"
msgid "&Current"
-msgstr "&Aktuell"
+msgstr "&Wiedergabezeit"
msgctxt "IDS_SUBRESYNC_EDIT"
msgid "&Edit"
@@ -960,11 +968,11 @@ msgid "&Organize Favorites..."
msgstr "Favoriten &verwalten..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "&Zufallswiedergabe"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "&Dateiordner öffnen"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -997,7 +1005,7 @@ msgstr "EDL-Clip speichern"
msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time Correction"
-msgstr "Bildzeit-Korrektur (ein/aus)"
+msgstr "Bildzeitkorrektur (ein/aus)"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
@@ -1005,11 +1013,11 @@ msgstr "EDL-Fenster (ein/aus)"
msgctxt "IDS_AG_EDL_IN"
msgid "EDL set In"
-msgstr "EDL-Anfang setzen"
+msgstr "EDL-Anfang festlegen"
msgctxt "IDS_AG_EDL_OUT"
msgid "EDL set Out"
-msgstr "EDL-Ende setzen"
+msgstr "EDL-Ende festlegen"
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
@@ -1037,18 +1045,18 @@ msgstr "Tearing-Test (ein/aus)"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
-msgstr "Skalierung nach 16:9,%.3f,%.3f,%.3f,%.3f"
+msgstr "Skalierung für 16:9-Anzeige,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_WIDESCREEN"
msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Zoom zu Breitbild,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zoom für Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_ULTRAWIDE"
msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Zoom zu Ultra-Breitbild,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zoom für Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "&Bei Vollbild ausblenden"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1057,7 +1065,7 @@ msgstr "Stopp"
msgctxt "IDS_CONTROLS_BUFFERING"
msgid "Buffering... (%d%%)"
-msgstr "Fülle Puffer... (%d%%)"
+msgstr "Fülle Puffer... (%d %%)"
msgctxt "IDS_CONTROLS_CAPTURING"
msgid "Capturing..."
@@ -1085,7 +1093,7 @@ msgstr "&Erneut laden"
msgctxt "IDS_SUBTITLES_ENABLE"
msgid "&Enable"
-msgstr "&Aktivieren"
+msgstr "&Anzeigen"
msgctxt "IDS_PANSCAN_EDIT"
msgid "&Edit..."
@@ -1145,7 +1153,7 @@ msgstr "Anwendungsbefehl"
msgctxt "IDS_AG_MEDIAFILES"
msgid "Media files (all types)"
-msgstr "Mediendateien (alle Formate)"
+msgstr "Alle Medienformate"
msgctxt "IDS_AG_ALLFILES"
msgid "All files (*.*)|*.*|"
@@ -1153,7 +1161,7 @@ msgstr "Alle Dateien (*.*)|*.*|"
msgctxt "IDS_AG_AUDIOFILES"
msgid "Audio files (all types)"
-msgstr "Audiodateien (Alle Formate)"
+msgstr "Alle Audioformate"
msgctxt "IDS_AG_NOT_KNOWN"
msgid "Not known"
@@ -1173,23 +1181,23 @@ msgstr "DVD/BD öffnen"
msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
msgid "Failed to set post-resize shaders"
-msgstr "Shader-Einrichtung für Post-Resize fehlgeschlagen"
+msgstr "Kann Shader für Post-Resize nicht einrichten"
msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
msgid "Failed to set both pre-resize and post-resize shaders"
-msgstr "Shader-Einrichtung für Pre-Resize und Post-Resize fehlgeschlagen"
+msgstr "Kann Shader für Pre-Resize und Post-Resize nicht einrichten"
msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
msgid "Shaders are recompiled automatically when the corresponding files are modified."
-msgstr "Shader werden bei Änderung zugehöriger Dateien automatisch neu kompiliert."
+msgstr "Shader werden bei Änderung der zugehörigen Dateien neu kompiliert."
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
-msgstr "%s konnte nicht geladen werden, Shader bleiben inaktiv"
+msgstr "Kann %s nicht laden, Shader inaktiv"
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
-msgstr "Funktionseinsprung in %s nicht gefunden, Shader bleiben inaktiv"
+msgstr "Kann Funktionseinsprünge in %s nicht finden, Shader inaktiv"
msgctxt "IDS_OSD_SHADERS_PRESET"
msgid "Shader preset: %s"
@@ -1221,22 +1229,22 @@ msgstr "L = R"
msgctxt "IDS_BALANCE_L"
msgid "L +%d%%"
-msgstr "L +%d%%"
+msgstr "L +%d %%"
msgctxt "IDS_BALANCE_R"
msgid "R +%d%%"
-msgstr "R +%d%%"
+msgstr "R +%d %%"
msgctxt "IDS_VOLUME"
msgid "%d%%"
-msgstr "%d%%"
+msgstr "%d %%"
msgctxt "IDS_BOOST"
msgid "+%d%%"
-msgstr "+%d%%"
+msgstr "+%d %%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "&Ordnerdateien hinzufügen"
msgctxt "IDS_HW_INDICATOR"
@@ -1245,7 +1253,7 @@ msgstr "[H/W]"
msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
msgid "Software Decoding"
-msgstr "Software Decoding"
+msgstr "Software-Decoding"
msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
msgid "Playback rate"
@@ -1293,11 +1301,11 @@ msgstr "Bestimmt die Maximalanzahl gespeicherter Einträge der zuletzt geöffnet
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
-msgstr "Merkt sich die Wiedergabeposition nur für Dateien länger als N Minuten."
+msgstr "Beschränkt gemerkte Datei-Wiedergabepositionen auf Dateien mit einer Laufzeit länger als N Minuten."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
msgid "Remember file position also for audio files."
-msgstr "Merkt sich die Wiedergabeposition auch bei Audio-Dateien."
+msgstr "Sieht gemerkte Datei-Wiedergabepositionen auch für Audiodateien vor."
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
@@ -1305,7 +1313,7 @@ msgstr "Keine Aktion"
msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
msgid "Play next file in the folder"
-msgstr "Nächste Mediendatei öffnen"
+msgstr "Nächste Ordnerdatei öffnen"
msgctxt "IDS_AFTER_PLAYBACK_REWIND"
msgid "Rewind current file"
@@ -1313,7 +1321,7 @@ msgstr "Zum Anfang springen"
msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
msgid "Close"
-msgstr "Wiedergabe schließen"
+msgstr "Medien schließen"
msgctxt "IDS_AFTER_PLAYBACK_EXIT"
msgid "Exit"
@@ -1325,7 +1333,7 @@ msgstr "Bildschirm ausschalten"
msgctxt "IDS_IMAGE_JPEG_QUALITY"
msgid "JPEG Image"
-msgstr "JPEG-Bild"
+msgstr "JPEG"
msgctxt "IDS_IMAGE_QUALITY"
msgid "Quality (%):"
@@ -1333,19 +1341,95 @@ msgstr "Qualität (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
-msgstr "Beschränkt die Anzeige des Audio-Covers auf NxN Pixel."
+msgstr "Beschränkt die Coverbild-Anzeige im Nur-Audio-Modus auf NxN Pixel."
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr "Bestimmt die Schrittweite der Untertitelverzögerung bei Druck der Tasten %s und %s. Kleinere Werte erlauben zwar eine feinere Abstimmung, erschweren aber die Einstellung größerer Verzögerungen."
+msgstr "Bestimmt die Schrittweite der Untertitelverzögerung bei Druck der Tasten %s/%s."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<nicht definiert>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "&Öffnen"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Nach &oben"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Nach &unten"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Nach &LCN sortieren"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "&Alle entfernen"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Wirklich alle Sender von der Liste entfernen?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Keine Information verfügbar"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Analysiere..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Aktiviert die Dateiprotokollierung (Neustart erforderlich)."
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Restlaufzeit"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Hohe Genauigkeit"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Nach Wiedergabe: Zum Anfang springen"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Nach Wiedergabe: Medien schließen"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "Initialisierungsfehler aufgetreten. Das geladene Videobild ist ungültig.\n\nDiesen Fehler jetzt melden?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Positive Werte erlauben eine spätere, negative Werte eine frühere Audiowiedergabe."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Medienvorschau aktuell deaktiviert"
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Mit dieser Option können Mediendateien von anderen Orten aus eingesehen werden. Deshalb bitte nur in gut gesicherten privaten Netzwerken verwenden.\n\nMedienvorschau wirklich aktivieren?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Interner Untertitel-Renderer"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
-msgstr "Videogerät öffnen"
+msgstr "Gerät öffnen"
msgctxt "IDS_AG_SAVE_AS"
msgid "Save As"
@@ -1361,15 +1445,15 @@ msgstr "Bild schnell speichern"
msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
-msgstr "Bild erfolgreich gespeichert."
+msgstr "Bild gespeichert"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Untertiteldatei laden"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Untertitel laden"
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Untertiteldatei speichern"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Untertitel speichern"
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1392,11 +1476,11 @@ msgid "Stop"
msgstr "Stopp"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Einzelbild vor"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Einzelbild zurück"
msgctxt "IDS_AG_GO_TO"
@@ -1441,7 +1525,7 @@ msgstr "Datei löschen"
msgctxt "IDS_AG_SAVE_COPY"
msgid "Save a Copy"
-msgstr "Kopie speichern unter"
+msgstr "Kopie speichern"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
@@ -1469,15 +1553,15 @@ msgstr "Steuerleiste unter dem Mauszeiger ausblenden nach"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
-msgstr "Shader-Einrichtung für Pre-Resize fehlgeschlagen"
+msgstr "Kann Shader für Pre-Resize nicht einrichten"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
-msgstr "Bildzeit-Korrektur: Ein"
+msgstr "Bildzeitkorrektur: Ein"
msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
msgid "Frame Time Correction: Off"
-msgstr "Bildzeit-Korrektur: Aus"
+msgstr "Bildzeitkorrektur: Aus"
msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
msgid "Target VSync Offset: %.1f"
@@ -1489,14 +1573,14 @@ msgstr "VSync-Offset: %d"
msgctxt "IDS_OSD_SPEED"
msgid "Speed: %.2lfx"
-msgstr "Tempo: x%.2lf"
+msgstr "Tempo: %.2lfx"
msgctxt "IDS_OSD_THUMBS_SAVED"
msgid "Thumbnails saved successfully"
-msgstr "Miniaturansichten erfolgreich gespeichert."
+msgstr "Miniaturbilder gespeichert"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
+msgid "Vide&o Track"
msgstr "Videos&pur"
msgctxt "IDS_MENU_VIDEO_ANGLE"
@@ -1509,27 +1593,27 @@ msgstr "Programm-Einstellungen zurücksetzen"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "Alle aktuellen Einstellungen gehen verloren!\n\nEinstellungen wirklich auf Standard-Einstellungen zurücksetzen?"
+msgstr "Alle aktuellen Einstellungen gehen verloren!\n\nProgramm-Einstellungen wirklich zurücksetzen?"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr "Standard-Einstellungen konnten nicht wiederhergestellt werden. Bitte alle Programminstanzen schließen."
+msgstr "Einstellungen konnten nicht zurückgesetzt werden. Bitte alle Programminstanzen schließen."
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
-msgstr "Programm-Einstellungen sichern"
+msgstr "Programm-Einstellungen exportieren"
msgctxt "IDS_EXPORT_SETTINGS_WARNING"
msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
-msgstr "Bisher nicht gespeicherte Einstellungen vor der Sicherung übernehmen?"
+msgstr "Nicht übernommene Einstellungen speichern?"
msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
msgid "The settings have been successfully exported."
-msgstr "Einstellungen erfolgreich gesichert."
+msgstr "Einstellungen wurden erfolgreich exportiert."
msgctxt "IDS_EXPORT_SETTINGS_FAILED"
msgid "The export failed! This can happen when you don't have the correct rights."
-msgstr "Sicherung fehlgeschlagen. Möglicherweise fehlen nötige Zugriffsrechte."
+msgstr "Einstellungen konnten nicht exportiert werden. Möglicherweise fehlen die dafür nötigen Zugriffsrechte."
msgctxt "IDS_BDA_ERROR"
msgid "BDA Error"
@@ -1544,12 +1628,12 @@ msgid "Reset Rate"
msgstr "Tempo zurücksetzen"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Audioverzögerung (+10ms)"
+msgid "Audio Delay +10 ms"
+msgstr "Audioverzögerung (+10 ms)"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Audioverzögerung (-10ms)"
+msgid "Audio Delay -10 ms"
+msgstr "Audioverzögerung (-10 ms)"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
@@ -1593,11 +1677,11 @@ msgstr "Rückwärts (springen)"
msgctxt "IDS_AG_NEXT_FILE"
msgid "Next File"
-msgstr "Nächste Mediendatei öffnen"
+msgstr "Mediendatei vor"
msgctxt "IDS_AG_PREVIOUS_FILE"
msgid "Previous File"
-msgstr "Vorherige Mediendatei öffnen"
+msgstr "Mediendatei zurück"
msgctxt "IDS_MPLAYERC_99"
msgid "Toggle Direct3D fullscreen"
@@ -1605,28 +1689,68 @@ msgstr "Direct3D-Vollbildmodus (ein/aus)"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
-msgstr "Untertitel rückwärts springen"
+msgstr "Untertitel-Item zurück"
msgctxt "IDS_MPLAYERC_101"
msgid "Goto Next Subtitle"
-msgstr "Untertitel vorwärts springen"
+msgstr "Untertitel-Item vor"
msgctxt "IDS_MPLAYERC_102"
msgid "Shift Subtitle Left"
-msgstr "Untertitelverschiebung (links)"
+msgstr "Untertitelverschiebung (-100 ms)"
msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
-msgstr "Untertitelverschiebung (rechts)"
-
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Anzeigestatistik (ein/aus)"
+msgstr "Untertitelverschiebung (+100 ms)"
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Zum Anfang springen"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "Namensanzeige"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "DVD-Wiedergabe"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "BD-Wiedergabe"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "Anzeigestatistik (ein/aus)"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "Anzeigestatistik zurücksetzen"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Untertitel::Sonstiges"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Fensterrahmen aus&blenden"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Titelleiste aus&blenden"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Fensterelemente ein&blenden"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Menüleiste aus&blenden"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Erweitert"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Fenster-Profil: Minimal"
@@ -1649,7 +1773,7 @@ msgstr "Vollbild ohne Auflösungsänderung (ein/aus)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT"
msgid "Zoom Auto Fit"
-msgstr "Zoom: Auto-Anpassung"
+msgstr "Zoom: Eingepasst"
msgctxt "IDS_AG_VIDFRM_HALF"
msgid "VidFrm Half"
@@ -1692,52 +1816,52 @@ msgid "PnS Dec Height"
msgstr "Pan&Scan: Höhe verringern"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Untertitel werden heruntergeladen..."
+msgid "Downloading [%s] \"%s\""
+msgstr "Lade [%s] \"%s\" herunter..."
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
-msgstr "Analyse..."
+msgstr "Analysiere..."
msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
msgid "No subtitles found."
msgstr "Keine Untertitel gefunden"
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d Untertitel verfügbar"
+msgid "%d subtitle(s) available."
+msgstr "%d Untertitel verfügbar"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "Wahlweise kann bei Verfügbarkeit einer aktualisierten Programmversion ein Hinweis erfolgen. Diese Einstellung ist in den Optionen auch später jederzeit wieder änderbar.\n\nAutomatische Update-Prüfung jetzt aktivieren?"
+msgstr "Neue Programmversionen können über ein Hinweisfenster umgehend heruntergeladen werden. Die dazu hier getroffene Einstellung lässt sich später jederzeit ändern.\n\nAutomatische Update-Prüfung jetzt aktivieren?"
msgctxt "IDS_ZOOM_50"
msgid "50%"
-msgstr "50%"
+msgstr "50 %"
msgctxt "IDS_ZOOM_100"
msgid "100%"
-msgstr "100%"
+msgstr "100 %"
msgctxt "IDS_ZOOM_200"
msgid "200%"
-msgstr "200%"
+msgstr "200 %"
msgctxt "IDS_ZOOM_AUTOFIT"
msgid "Auto Fit"
-msgstr "Auto-Anpassung"
+msgstr "Eingepasst"
msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (Larger Only)"
-msgstr "Auto-Verkleinerung"
+msgstr "Nur verkleinert"
msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
msgid "Zoom Auto Fit (Larger Only)"
-msgstr "Zoom: Auto-Verkleinerung"
+msgstr "Zoom: Nur verkleinert"
msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
msgid "Zoom: Auto (Larger Only)"
-msgstr "Zoom: Auto-Verkleinerung"
+msgstr "Zoom: Nur verkleinert"
msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
msgid "Double click to open file location"
@@ -1753,7 +1877,7 @@ msgstr "Ungültige Eingabe"
msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
msgid "Please enter a number between 1 and 365."
-msgstr "Bitte nur die Zahlen 1-365 verwenden."
+msgstr "Bitte nur Zahlen zwischen 1 und 365 eingeben."
msgctxt "IDS_AG_PNS_CENTER"
msgid "PnS Center"
@@ -1801,71 +1925,71 @@ msgstr "Lautstärke verringern"
msgctxt "IDS_AG_VOLUME_MUTE"
msgid "Volume Mute"
-msgstr "Stummschaltung (ein/aus)"
+msgstr "Ton (ein/aus)"
msgctxt "IDS_MPLAYERC_63"
msgid "DVD Title Menu"
-msgstr "DVD-Menü: Titelmenü"
+msgstr "DVD: Titelmenü"
msgctxt "IDS_AG_DVD_ROOT_MENU"
msgid "DVD Root Menu"
-msgstr "DVD-Menü: Hauptmenü"
+msgstr "DVD: Hauptmenü"
msgctxt "IDS_MPLAYERC_65"
msgid "DVD Subtitle Menu"
-msgstr "DVD-Menü: Untertitelmenü"
+msgstr "DVD: Untertitelmenü"
msgctxt "IDS_MPLAYERC_66"
msgid "DVD Audio Menu"
-msgstr "DVD-Menü: Audiomenü"
+msgstr "DVD: Audiomenü"
msgctxt "IDS_MPLAYERC_67"
msgid "DVD Angle Menu"
-msgstr "DVD-Menü: Blickwinkelmenü"
+msgstr "DVD: Blickwinkelmenü"
msgctxt "IDS_MPLAYERC_68"
msgid "DVD Chapter Menu"
-msgstr "DVD-Menü: Kapitelmenü"
+msgstr "DVD: Kapitelmenü"
msgctxt "IDS_AG_DVD_MENU_LEFT"
msgid "DVD Menu Left"
-msgstr "DVD-Menü: Nach links bewegen"
+msgstr "DVD: Menü nach links"
msgctxt "IDS_MPLAYERC_70"
msgid "DVD Menu Right"
-msgstr "DVD-Menü: Nach rechts bewegen"
+msgstr "DVD: Menü nach rechts"
msgctxt "IDS_AG_DVD_MENU_UP"
msgid "DVD Menu Up"
-msgstr "DVD-Menü: Nach oben bewegen"
+msgstr "DVD: Menü nach oben"
msgctxt "IDS_AG_DVD_MENU_DOWN"
msgid "DVD Menu Down"
-msgstr "DVD-Menü: Nach unten bewegen"
+msgstr "DVD: Menü nach unten"
msgctxt "IDS_MPLAYERC_73"
msgid "DVD Menu Activate"
-msgstr "DVD-Menü: Aktivieren"
+msgstr "DVD: Menü aktivieren"
msgctxt "IDS_AG_DVD_MENU_BACK"
msgid "DVD Menu Back"
-msgstr "DVD-Menü: Zurück"
+msgstr "DVD: Menü zurück"
msgctxt "IDS_MPLAYERC_75"
msgid "DVD Menu Leave"
-msgstr "DVD-Menü: Verlassen"
+msgstr "DVD: Menü verlassen"
msgctxt "IDS_AG_BOSS_KEY"
msgid "Boss key"
msgstr "Cheftaste"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Player-Kontextmenü (lang)"
+msgid "Player Menu"
+msgstr "Player-Kontextmenü (reduziert)"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Player-Kontextmenü (kurz)"
+msgid "Player Menu (full)"
+msgstr "Player-Kontextmenü (komplett)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1876,76 +2000,60 @@ msgid "Options"
msgstr "Optionen"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Audio vor"
+msgid "Next Audio Track"
+msgstr "Audiospur vor"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Audio zurück"
+msgid "Prev Audio Track"
+msgstr "Audiospur zurück"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Untertitel vor"
+msgid "Next Subtitle Track"
+msgstr "Untertitelspur vor"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Untertitel zurück"
+msgid "Prev Subtitle Track"
+msgstr "Untertitelspur zurück"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
-msgstr "Untertitel (ein/aus)"
+msgstr "Untertitelspur anzeigen (ein/aus)"
msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Untertitel neu laden"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "OGM-Spur: Audio vor"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "OGM-Spur: Audio zurück"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "OGM-Spur: Untertitel vor"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "OGM-Spur: Untertitel zurück"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
-msgstr "DVD-Spur: Blickwinkel vor"
+msgstr "DVD: Blickwinkel vor"
msgctxt "IDS_MPLAYERC_92"
msgid "Prev Angle (DVD)"
-msgstr "DVD-Spur: Blickwinkel zurück"
+msgstr "DVD: Blickwinkel zurück"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "DVD-Spur: Audio vor"
+msgid "Next Audio Track (DVD)"
+msgstr "DVD: Audiospur vor"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "DVD-Spur: Audio zurück"
+msgid "Prev Audio Track (DVD)"
+msgstr "DVD: Audiospur zurück"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "DVD-Spur: Untertitel vor"
+msgid "Next Subtitle Track (DVD)"
+msgstr "DVD: Untertitelspur vor"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "DVD-Spur: Untertitel zurück"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "DVD: Untertitelspur zurück"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
-msgstr "DVD-Spur: Untertitel (ein/aus)"
+msgstr "DVD: Untertitelspur anzeigen (ein/aus)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Restzeitanzeige (ein/aus)"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "Wiedergabezeit (ein/aus)"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1957,7 +2065,7 @@ msgstr "Zu Favoriten schnell hinzufügen"
msgctxt "IDS_DVB_CHANNEL_NUMBER"
msgid "N"
-msgstr "Nr."
+msgstr "Nummer"
msgctxt "IDS_DVB_CHANNEL_NAME"
msgid "Name"
@@ -1971,11 +2079,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Verschlüsselung"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Ja"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Nein"
@@ -1985,7 +2093,7 @@ msgstr "&Start"
msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
msgid "Stop"
-msgstr "Stopp"
+msgstr "&Stopp"
msgctxt "IDS_DVB_TVNAV_SEERADIO"
msgid "Radio stations"
@@ -2009,7 +2117,7 @@ msgstr "Untertitel gespeichert"
msgctxt "IDS_MAINFRM_4"
msgid "Cannot save subtitles"
-msgstr "Untertitel konnten nicht gespeichert werden"
+msgstr "Kann Untertitel nicht speichern"
msgctxt "IDS_AG_FRAMERATE"
msgid "Frame rate"
@@ -2032,12 +2140,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Band: %02lu/%02lu, Titel: %02lu/%02lu, Kapitel: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
-msgstr "Blickwinkel: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Blickwinkel: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2053,7 +2161,7 @@ msgstr "Um die Dateizuordnung zu ändern, werden weitere Zugriffsrechte benötig
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr "Der MPC-HC ist ein äußerst schlanker, quelloffener Media-Player für Windows. Er unterstützt alle gängigen Audio- und Videoformate. Er ist zu 100% frei von Spyware und beinhaltet keinerlei Werbung oder Browser-Symbolleisten."
+msgstr "Der MPC-HC ist ein äußerst schlanker, quelloffener Media-Player für Windows. Er unterstützt alle gängigen Audio- und Videoformate. Er ist zu 100 % frei von Spyware und beinhaltet keinerlei Werbung oder Browser-Symbolleisten."
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2077,11 +2185,11 @@ msgstr "DVD: Kopierschutz-Problem"
msgctxt "IDS_MAINFRM_18"
msgid "DVD: Invalid DVD 1.x Disc"
-msgstr "DVD: Unzulässige DVD 1.x"
+msgstr "DVD: Ungültige DVD 1.x"
msgctxt "IDS_MAINFRM_19"
msgid "DVD: Invalid Disc Region"
-msgstr "DVD: Unzulässiger Disc-Regionalcode"
+msgstr "DVD: Ungültiger Disc-Regionalcode"
msgctxt "IDS_MAINFRM_20"
msgid "DVD: Low Parental Level"
@@ -2101,11 +2209,11 @@ msgstr "DVD: Regionalcode-Konflikt zwischen Disc und Decoder"
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "Der Direct3D-Vollbildmodus dient dazu, Tearing-Effekte während der Videowiedergabe zu vermeiden. Allerdings werden dabei keine Dialoge und Menüs angezeigt.\n\nDiese Option wirklich aktivieren?"
+msgstr "Mit dieser Option können unerwünschte Tearing-Effekte bei Vollbild vermieden werden. Dabei werden Kontextmenüs und Dialoge jedoch nicht angezeigt.\n\nDirect3D-Vollbildmodus wirklich aktivieren?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
-msgstr "Untertitelverzögerung: %ldms"
+msgstr "Untertitelverzögerung: %ld ms"
msgctxt "IDS_AG_TITLE2"
msgid "Title: %02d/%02d"
@@ -2113,7 +2221,7 @@ msgstr "Titel: %02d/%02d"
msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
-msgstr "Bitte nur die Zeichen A-Z und 0-9 verwenden."
+msgstr "Dateiname enthält andere Zeichen als A-Z und 0-9"
msgctxt "IDS_THUMB_ROWNUMBER"
msgid "Rows:"
@@ -2125,15 +2233,7 @@ msgstr "Spalten:"
msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
-msgstr "Bildbreite"
-
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL erfolgreich getestet."
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Protokollversionen stimmen nicht überein. Bitte Programm aktualisieren oder eine alternative Adresse verwenden."
+msgstr "Breite"
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
@@ -2144,20 +2244,20 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Gesamt: %ld, Verworfen: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", Größe: %I64dKB"
+msgid ", Size: %I64d KB"
+msgstr ", Größe: %I64d KB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", Größe: %I64dMB"
+msgid ", Size: %I64d MB"
+msgstr ", Größe: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", Frei: %I64dKB"
+msgid ", Free: %I64d KB"
+msgstr ", Frei: %I64d KB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", Frei: %I64dMB"
+msgid ", Free: %I64d MB"
+msgstr ", Frei: %I64d MB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
@@ -2169,11 +2269,11 @@ msgstr "Fehler"
msgctxt "IDS_SUBTITLE_STREAM_OFF"
msgid "Subtitle: off"
-msgstr "Untertitel: Aus"
+msgstr "Untertitelspur anzeigen: Aus"
msgctxt "IDS_SUBTITLE_STREAM"
msgid "Subtitle: %s"
-msgstr "Untertitel: %s"
+msgstr "Untertitelspur: %s"
msgctxt "IDS_MAINFRM_46"
msgid "Select the path for the DVD/BD:"
@@ -2181,7 +2281,7 @@ msgstr "DVD/BD öffnen"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr " erfolgreich geladen."
+msgstr " geladen"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2189,11 +2289,11 @@ msgstr "Alle Dateien (*.*)|*.*||"
msgctxt "IDS_GETDIB_FAILED"
msgid "GetDIB failed, hr = %08x"
-msgstr "GetDIB fehlgeschlagen. (hr = %08x)"
+msgstr "GetDIB fehlgeschlagen, hr = %08x."
msgctxt "IDS_GETCURRENTIMAGE_FAILED"
msgid "GetCurrentImage failed, hr = %08x"
-msgstr "GetCurrentImage fehlgeschlagen. (hr = %08x)"
+msgstr "GetCurrentImage fehlgeschlagen, hr = %08x."
msgctxt "IDS_SCREENSHOT_ERROR"
msgid "Cannot create file"
@@ -2201,19 +2301,19 @@ msgstr "Datei konnte nicht erstellt werden."
msgctxt "IDS_THUMBNAILS_NO_DURATION"
msgid "Cannot create thumbnails for files with no duration"
-msgstr "Miniaturansichten können für Dateien ohne Laufzeit nicht erstellt werden."
+msgstr "Miniaturbilder können für Dateien ohne Laufzeit nicht erstellt werden."
msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
msgid "Failed to get video frame size"
-msgstr "Erkennung der Videobildgröße fehlgeschlagen."
+msgstr "Videobildgröße konnte nicht erkannt werden."
msgctxt "IDS_OUT_OF_MEMORY"
msgid "Out of memory, go buy some more!"
-msgstr "Zu wenig Speicher verfügbar."
+msgstr "Speicher erschöpft!"
msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
-msgstr "Bildformat unzulässig. Miniaturansichten können aus geräteunabhängigem Bitmap mit %d bpp nicht erstellt werden."
+msgstr "Das vorgegebene Bildformat ist ungültig. Miniaturbilder können aus geräteunabhängigem Bitmap mit %d bpp nicht erstellt werden."
msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
msgid "File Size: %s (%s bytes)\\N"
@@ -2225,10 +2325,10 @@ msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Dateiname: %s\\N%sAuflösung
msgctxt "IDS_THUMBNAIL_TOO_SMALL"
msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
-msgstr "Miniaturansichten können in dieser geringen Größe nicht erstellt werden. Bitte die Anzahl der Miniaturansichten verringern oder deren Gesamtgröße erhöhen."
+msgstr "Die Miniaturbilder wären zu klein. Bitte die angegebene Breite erhöhen oder deren Anzahl durch Korrektur des Layouts verringern."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
msgstr "Untertitel konnten nicht geladen werden. Bitte einen geeigneten Video-Renderer wählen und die Mediendatei erneut öffnen."
msgctxt "IDS_SUBTITLE_FILES_FILTER"
@@ -2240,12 +2340,12 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Seitenverhältnis: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Seitenverhältnis: Auto"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Seitenverhältnis: Standard (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Audioverzögerung: %I64dms"
+msgid "Audio delay: %I64d ms"
+msgstr "Audioverzögerung: %I64d ms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2253,35 +2353,31 @@ msgstr "Kapitel %d"
msgctxt "IDS_AG_OUT_OF_MEMORY"
msgid "Out of memory"
-msgstr "Zu wenig Speicher verfügbar"
+msgstr "Speicher erschöpft"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Flash Player für Internet Explorer wird benötigt"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Kann Adobe Flash Player für Internet Explorer nicht finden"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
-msgstr "QuickTime wird in 64-Bit-Umgebung nicht unterstützt"
+msgstr "QuickTime kann mit 64-Bit nicht ausgeführt werden"
msgctxt "IDS_MAINFRM_80"
msgid "Failed to create the filter graph object"
-msgstr "Erstellung des Filtergraph-Objekts fehlgeschlagen"
+msgstr "Kann Filtergraph-Objekt nicht erstellen"
msgctxt "IDS_MAINFRM_81"
msgid "Invalid argument"
-msgstr "Argument unzulässig"
+msgstr "Ungültiges Argument"
msgctxt "IDS_MAINFRM_82"
msgid "Opening aborted"
-msgstr "Öffnen abgebrochen"
+msgstr "Abbruch"
msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
-msgstr "Datei-Rendering fehlgeschlagen"
-
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL ungültig. Verbindung zur Untertiteldatenbank konnte nicht hergestellt werden."
+msgstr "Kann Datei nicht rendern"
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
@@ -2289,11 +2385,11 @@ msgstr "Kapitel: "
msgctxt "IDS_VOLUME_OSD"
msgid "Vol: %d%%"
-msgstr "Lautstärke: %d%%"
+msgstr "Lautstärke: %d %%"
msgctxt "IDS_BOOST_OSD"
msgid "Boost: +%u%%"
-msgstr "Tonverstärkung: +%u%%"
+msgstr "Tonverstärkung: +%u %%"
msgctxt "IDS_BALANCE_OSD"
msgid "Balance: %s"
@@ -2303,14 +2399,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Aktueller Monitor"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC unerwartet beendet. Zur Lösung des Problems bitte die Datei \"%s\" an den Bugtracker senden.\n\nDateiordner jetzt öffnen und den Bugtracker aufrufen?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Erstellung der Minidump-Datei \"%s\" fehlgeschlagen. (Fehler %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Verzeichnis öffnen"
@@ -2328,7 +2416,7 @@ msgid "Toggle Caption&Menu"
msgstr "Ansicht: Fensterelemente (ein/aus)"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Ansicht: Zeitleiste (ein/aus)"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2337,43 +2425,43 @@ msgstr "Ansicht: Steuerelemente (ein/aus)"
msgctxt "IDS_MAINFRM_84"
msgid "Invalid file name"
-msgstr "Dateiname unzulässig"
+msgstr "Ungültiger Dateiname"
msgctxt "IDS_MAINFRM_86"
msgid "Cannot connect the filters"
-msgstr "Filter konnten nicht verbunden werden"
+msgstr "Kann Filter nicht verbinden"
msgctxt "IDS_MAINFRM_87"
msgid "Cannot load any source filter"
-msgstr "Quellen-Filter konnten nicht geladen werden"
+msgstr "Kann keine Quellen-Filter laden"
msgctxt "IDS_MAINFRM_88"
msgid "Cannot render the file"
-msgstr "Datei konnte nicht gerendert werden"
+msgstr "Kann Datei nicht rendern"
msgctxt "IDS_MAINFRM_89"
msgid "Invalid file format"
-msgstr "Dateiformat unzulässig"
+msgstr "Ungültiges Dateiformat"
msgctxt "IDS_MAINFRM_90"
msgid "File not found"
-msgstr "Datei nicht gefunden"
+msgstr "Kann Datei nicht finden"
msgctxt "IDS_MAINFRM_91"
msgid "Unknown file type"
-msgstr "Dateityp unbekannt"
+msgstr "Ungültiger Dateityp"
msgctxt "IDS_MAINFRM_92"
msgid "Unsupported stream"
-msgstr "Stream wird nicht unterstützt"
+msgstr "Ungültiger Stream"
msgctxt "IDS_MAINFRM_93"
msgid "Cannot find DVD directory"
-msgstr "DVD-Verzeichnis nicht gefunden"
+msgstr "Kann DVD-Verzeichnis nicht finden"
msgctxt "IDS_MAINFRM_94"
msgid "Can't create the DVD Navigator filter"
-msgstr "DVD-Navigator-Filter konnte nicht erstellt werden"
+msgstr "Kann DVD-Navigator-Filter nicht erstellen"
msgctxt "IDS_AG_FAILED"
msgid "Failed"
@@ -2381,19 +2469,19 @@ msgstr "Fehler"
msgctxt "IDS_MAINFRM_96"
msgid "Can't create video capture filter"
-msgstr "Videoaufnahme-Filter konnte nicht erstellt werden"
+msgstr "Kann Videoaufnahme-Filter nicht erstellen"
msgctxt "IDS_MAINFRM_98"
msgid "No capture filters"
-msgstr "Kein Aufnahme-Filter gefunden"
+msgstr "Kann keinen Aufnahme-Filter finden"
msgctxt "IDS_MAINFRM_99"
msgid "Can't create capture graph builder object"
-msgstr "Aufnahme-Graph-Builder-Objekt konnte nicht erstellt werden"
+msgstr "Kann Aufnahmegraph-Builder-Objekt nicht erstellen"
msgctxt "IDS_MAINFRM_108"
msgid "Couldn't open any device"
-msgstr "Gerät konnte nicht geöffnet werden"
+msgstr "Kann kein Gerät öffnen"
msgctxt "IDS_AG_SOUND"
msgid "Sound"
@@ -2401,7 +2489,7 @@ msgstr "Audio"
msgctxt "IDS_MAINFRM_114"
msgid "%s was not found, please insert media containing this file."
-msgstr "%s auf verfügbaren Medien nicht gefunden"
+msgstr "Kann %s nicht finden"
msgctxt "IDS_AG_ABORTED"
msgid "Aborted"
@@ -2417,11 +2505,11 @@ msgstr " (Pin-)Eigenschaften..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
-msgstr "Stream unbekannt"
+msgstr "Unbekannter Stream"
msgctxt "IDS_AG_UNKNOWN"
msgid "Unknown %u"
-msgstr "%u unbekannt"
+msgstr "Unbekannt %u"
msgctxt "IDS_AG_VSYNC"
msgid "VSync"
@@ -2437,7 +2525,7 @@ msgstr " (Regie-Kommentar 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr "DVD-Untertitel"
+msgstr "&Anzeigen"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
@@ -2461,11 +2549,11 @@ msgstr "Direct3D-Vollbildmodus"
msgctxt "IDS_MAINFRM_137"
msgid "Unknown format"
-msgstr "Format unbekannt"
+msgstr "Unbekanntes Format"
msgctxt "IDS_MAINFRM_138"
msgid "Sub shift: %ld ms"
-msgstr "Untertitelverschiebung: %ld"
+msgstr "Untertitelverschiebung: %ld ms"
msgctxt "IDS_VOLUME_BOOST_INC"
msgid "Volume boost increase"
@@ -2477,19 +2565,19 @@ msgstr "Tonverstärkung verringern"
msgctxt "IDS_VOLUME_BOOST_MIN"
msgid "Volume boost Min"
-msgstr "Tonverstärkung (+0%)"
+msgstr "Tonverstärkung: +0 % (min)"
msgctxt "IDS_VOLUME_BOOST_MAX"
msgid "Volume boost Max"
-msgstr "Tonverstärkung (+300%)"
+msgstr "Tonverstärkung: +300 % (max)"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Aufruf: mpc-hc.exe \"Pfadname\" [Optionen]\n\n\"Pfadname\"\tGibt Datei oder Verzeichnis zur Wiedergabe an.\n\t\t(Wildcards sind möglich. Standardeingabe kann\n\t\tals \"-\" angegeben werden.)\n/dub \"Datei\"\tÖffnet zusätzliche Audiodatei.\n/dubdelay \"Datei\"\tÖffnet zusätzliche Audiodatei, deren Wiedergabe\n\t\tum X ms versetzt wird. (Dateiname muss\n\t\t\"DELAY Xms\" enthalten.)\n/d3dfs\t\tStartet Player im Direct3D-Vollbildmodus.\n/sub \"Datei\"\tÖffnet zusätzliche Untertiteldatei.\n/filter \"Filtername\"\tLädt DirectShow-Filter aus einer\n\t\tLaufzeitbibliothek. (Wildcards sind möglich.)\n/dvd\t\tStartet Player im DVD-Modus. (DVD-Verzeichnis\n\t\tkann als \"Pfadname\" angegeben werden.)\n/dvdpos T#C\tStartet DVD-Wiedergabe bei Titel T, Kapitel C.\n/dvdpos T#P\tStartet DVD-Wiedergabe bei Titel T, Position P\n\t\t(hh:mm:ss).\n/cd\t\tÖffnet Audio-CD oder (S)VCD. (Laufwerk kann\n\t\tals \"Pfadname\" angegeben werden.)\n/device\t\tÖffnet Videogerät.\n/open\t\tÖffnet Medieninhalt und pausiert Wiedergabe.\n/play\t\tÖffnet Medieninhalt und startet Wiedergabe.\n/close\t\tBeendet Player nach Wiedergabe (in\n\t\tKombination mit \"/play\").\n/shutdown\tFährt System nach Wiedergabe herunter.\n/fullscreen\tStartet Wiedergabe im Vollbild.\n/minimized\tStartet Player minimiert.\n/new\t\tÖffnet neues Playerfenster.\n/add\t\tFügt \"Pfadname\" zur Wiedergabeliste hinzu\n\t\t(in Kombination mit \"/open\" oder \"/play\").\n/regvid\t\tRegistriert alle verfügbaren Videoformate.\n/regaud\t\tRegistriert alle verfügbaren Audioformate.\n/regpl\t\tRegistriert alle verfügbaren Wiedergabelisten.\n/regall\t\tRegistriert alle verfügbaren Medienformate.\n/unregall\t\tDeregistriert alle verfügbaren Medienformate.\n/start X\t\tStartet Wiedergabe bei X ms.\n/startpos P\tStartet Wiedergabe bei Position P (hh:mm:ss).\n/fixedsize W,H\tFixiert Fenstergröße bei Breite W und Höhe H.\n/monitor N\tStartet Wiedergabe auf Monitor N (wobei N>0).\n/audiorenderer N\tLädt Audio-Renderer N (wobei N>0, siehe\n\t\tAusgabe-Optionen).\n/shaderpreset \"S\"\tStartet Player mit Shader-Profil \"S\".\n/reset\t\tSetzt alle Programm-Einstellungen zurück.\n/help /h /?\tZeigt diese Hilfe an.\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Aufruf: mpc-hc.exe \"Pfadname\" [Parameter]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
-msgstr "Unbekannte Option in der Befehlszeile:\n"
+msgstr "Unbekannter Parameter in der Kommandozeile:\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
@@ -2521,15 +2609,15 @@ msgstr "Shader-Debugger (ein/aus)"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
-msgstr "Zoom: 50%"
+msgstr "Zoom: 50 %"
msgctxt "IDS_AG_ZOOM_100"
msgid "Zoom 100%"
-msgstr "Zoom: 100%"
+msgstr "Zoom: 100 %"
msgctxt "IDS_AG_ZOOM_200"
msgid "Zoom 200%"
-msgstr "Zoom: 200%"
+msgstr "Zoom: 200 %"
msgctxt "IDS_AG_NEXT_AR_PRESET"
msgid "Next AR Preset"
@@ -2571,29 +2659,21 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "Alle Filter aktivieren"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Frequenzbereich scannen"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Untertitel nicht geladen oder werden vom Renderer nicht unterstützt."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
-msgstr "Verfasser unbekannt. Als Autor kontaktieren Sie uns bitte."
+msgstr "Urheber unbekannt. Als der Autor bitte melden!"
msgctxt "IDS_NO_MORE_MEDIA"
msgid "No more media in the current folder."
-msgstr "Keine weitere Mediendatei im Ordner."
+msgstr "Ende des Ordners erreicht"
msgctxt "IDS_FIRST_IN_FOLDER"
msgid "The first file of the folder is already loaded."
-msgstr "Erste Mediendatei im Ordner bereits geladen."
+msgstr "Erste Ordnerdatei erreicht"
msgctxt "IDS_LAST_IN_FOLDER"
msgid "The last file of the folder is already loaded."
-msgstr "Letzte Mediendatei im Ordner bereits geladen."
+msgstr "Letzte Ordnerdatei erreicht"
msgctxt "IDS_FRONT_LEFT"
msgid "Front Left"
@@ -2667,40 +2747,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Oben-hinten-rechts (TpBR)"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Anzeigestatistik zurücksetzen"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Untertitel::Sonstiges"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Fensterrahmen aus&blenden"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Titelleiste aus&blenden"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Fensterelemente ein&blenden"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Menü aus&blenden"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Erweitert"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Über der Zeitleiste"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Unter der Zeitleiste"
msgctxt "IDS_VIDEO_STREAM"
@@ -2721,7 +2773,7 @@ msgstr "Abbrechen"
msgctxt "IDS_THUMB_THUMBNAILS"
msgid "Layout"
-msgstr "Miniaturansichten"
+msgstr "Layout"
msgctxt "IDS_THUMB_PIXELS"
msgid "Pixels:"
@@ -2773,7 +2825,7 @@ msgstr "Fenster von außen berühren"
msgctxt "IDS_AUDIO_STREAM"
msgid "Audio: %s"
-msgstr "Audio: %s"
+msgstr "Audiospur: %s"
msgctxt "IDS_AG_REOPEN"
msgid "Reopen File"
@@ -2868,8 +2920,8 @@ msgid "Other Audio"
msgstr "Andere Audioformate"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2879,6 +2931,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless Audio Codec"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2943,22 +3015,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "The True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Wiedergabelisten"
@@ -2983,18 +3039,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Seitenverhältnis"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "WASAPI verwenden (Wiedergabe neu starten)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Stummschaltung bei schnellem Vorlauf"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Soundgerät:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: Ein"
@@ -3125,11 +3169,11 @@ msgstr "Direct3D-Vollbildmodus: Aus"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
msgid "Disable desktop composition: On"
-msgstr "Windows-Desktopgestaltung deaktivieren: Ein"
+msgstr "Desktopgestaltung deaktivieren: Ein"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
msgid "Disable desktop composition: Off"
-msgstr "Windows-Desktopgestaltung deaktivieren: Aus"
+msgstr "Desktopgestaltung deaktivieren: Aus"
msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
msgid "Alternative VSync: On"
@@ -3141,19 +3185,19 @@ msgstr "Alternativer VSync: Aus"
msgctxt "IDS_OSD_RS_RESET_DEFAULT"
msgid "Renderer settings reset to default"
-msgstr "Standard-Einstellungen für Video-Renderer geladen."
+msgstr "Video-Renderer: Standard-Einstellungen"
msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
msgid "Renderer settings reset to optimal"
-msgstr "Optimierte Einstellungen für Video-Renderer geladen."
+msgstr "Video-Renderer: Optimierte Einstellungen"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
msgid "D3D Fullscreen GUI Support: On"
-msgstr "GUI-Unterstützung bei Direct3D-Vollbildmodus: Ein"
+msgstr "GUI bei Direct3D-Vollbildmodus: Ein"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
msgid "D3D Fullscreen GUI Support: Off"
-msgstr "GUI-Unterstützung bei Direct3D-Vollbildmodus: Aus"
+msgstr "GUI bei Direct3D-Vollbildmodus: Aus"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
msgid "10-bit RGB Output: On"
@@ -3173,55 +3217,55 @@ msgstr "10-Bit-RGB-Eingabe erzwingen: Aus"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
msgid "Full Floating Point Processing: On"
-msgstr "Gleitkommaverarbeitung mit voller Genauigkeit: Ein"
+msgstr "Volle Gleitkommagenauigkeit: Ein"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
msgid "Full Floating Point Processing: Off"
-msgstr "Gleitkommaverarbeitung mit voller Genauigkeit: Aus"
+msgstr "Volle Gleitkommagenauigkeit: Aus"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
msgid "Half Floating Point Processing: On"
-msgstr "Gleitkommaverarbeitung mit halber Genauigkeit: Ein"
+msgstr "Halbe Gleitkommagenauigkeit: Ein"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
msgid "Half Floating Point Processing: Off"
-msgstr "Gleitkommaverarbeitung mit halber Genauigkeit: Aus"
+msgstr "Halbe Gleitkommagenauigkeit: Aus"
msgctxt "IDS_BRIGHTNESS_DEC"
msgid "Brightness decrease"
-msgstr "Helligkeit verringern"
+msgstr "Farbsteuerung: Helligkeit verringern"
msgctxt "IDS_CONTRAST_INC"
msgid "Contrast increase"
-msgstr "Kontrast erhöhen"
+msgstr "Farbsteuerung: Kontrast erhöhen"
msgctxt "IDS_CONTRAST_DEC"
msgid "Contrast decrease"
-msgstr "Kontrast verringern"
+msgstr "Farbsteuerung: Kontrast verringern"
msgctxt "IDS_HUE_INC"
msgid "Hue increase"
-msgstr "Farbton erhöhen"
+msgstr "Farbsteuerung: Farbton erhöhen"
msgctxt "IDS_HUE_DEC"
msgid "Hue decrease"
-msgstr "Farbton verringern"
+msgstr "Farbsteuerung: Farbton verringern"
msgctxt "IDS_SATURATION_INC"
msgid "Saturation increase"
-msgstr "Sättigung erhöhen"
+msgstr "Farbsteuerung: Sättigung erhöhen"
msgctxt "IDS_SATURATION_DEC"
msgid "Saturation decrease"
-msgstr "Sättigung verringern"
+msgstr "Farbsteuerung: Sättigung verringern"
msgctxt "IDS_RESET_COLOR"
msgid "Reset color settings"
-msgstr "Farbeinstellungen zurücksetzen"
+msgstr "Farbsteuerung: Zurücksetzen"
msgctxt "IDS_USING_LATEST_STABLE"
msgid "\nYou are already using the latest stable version."
-msgstr "\nAktuelle stabile Version wird bereits verwendet."
+msgstr "\nKeine neuere stabile Version verfügbar."
msgctxt "IDS_USING_NEWER_VERSION"
msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
@@ -3229,11 +3273,11 @@ msgstr "Vorliegende Version:\t%s\n\nAktuelle stabile Version:\t%s"
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr "MPC-HC %s ist verfügbar. Zurzeit wird noch Version %s verwendet.\n\nAktuelle Version jetzt herunterladen?"
+msgstr "MPC-HC %s verfügbar. Zurzeit wird noch die Version %s verwendet.\n\nAktuelle Version jetzt herunterladen?"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
-msgstr "Update-Server nicht gefunden. Bitte die Internetverbindung prüfen oder später erneut versuchen."
+msgstr "Update-Server nicht erreichbar.\n\nBitte die Internetverbindung prüfen oder später erneut versuchen."
msgctxt "IDS_UPDATE_CLOSE"
msgid "&Close"
@@ -3241,11 +3285,11 @@ msgstr "&Schließen"
msgctxt "IDS_OSD_ZOOM"
msgid "Zoom: %.0lf%%"
-msgstr "Zoom: %.0lf%%"
+msgstr "Zoom: %.0lf %%"
msgctxt "IDS_OSD_ZOOM_AUTO"
msgid "Zoom: Auto"
-msgstr "Zoom: Auto-Anpassung"
+msgstr "Zoom: Eingepasst"
msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
msgid "Toggle custom channel mapping"
@@ -3283,6 +3327,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Lautstärke zurücksetzen: Aus"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "Bytes"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3305,63 +3353,59 @@ msgstr "MB/s"
msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
msgid "Could not create the tuner."
-msgstr "Tuner konnte nicht erstellt werden."
+msgstr "Kann Tuner nicht erstellen"
msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
msgid "Could not create the receiver."
-msgstr "Receiver konnte nicht erstellt werden."
+msgstr "Kann Receiver nicht erstellen"
msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
msgid "Could not connect the network and the tuner."
-msgstr "Netzwerk und Tuner konnten nicht verbunden werden."
+msgstr "Kann Netzwerk und Tuner nicht verbinden"
msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
msgid "Could not connect the tuner and the receiver."
-msgstr "Tuner und Receiver konnten nicht verbunden werden."
+msgstr "Kann Tuner und Receiver nicht verbinden"
msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
msgid "Could not connect the tuner."
-msgstr "Tuner konnte nicht verbunden werden."
+msgstr "Kann Tuner nicht verbinden"
msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
msgid "Could not create the demultiplexer."
-msgstr "Demultiplexer konnte nicht erstellt werden."
+msgstr "Kann Demultiplexer nicht erstellen"
msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
msgid "Error parsing the entered time!"
-msgstr "Parser-Fehler bei angegebener Zeit."
+msgstr "Der angegebene Zeitpunkt ist ungültig."
msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
msgid "Error parsing the entered text!"
-msgstr "Parser-Fehler bei angegebenem Text."
+msgstr "Das angegebene Videobild ist ungültig."
msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
msgid "Error parsing the entered frame rate!"
-msgstr "Parser-Fehler bei angegebener Bildrate."
+msgstr "Die angegebene Bildrate ist ungültig."
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
-msgstr "Einzelbildschaltung nicht möglich. Bitte einen anderen Video-Renderer verwenden."
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Einzelbildschaltung nicht möglich. Bitte einen geeigneten Video-Renderer wählen und die Mediendatei erneut öffnen."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
-msgstr "Die Funktionen \"Bild speichern\" und \"Miniaturansichten speichern\" können mit dem Standard-Renderer von RealMedia nicht verwendet werden. Bitte einen VMR-Renderer für RealMedia-Video in den Ausgabe-Optionen wählen und die Mediendatei erneut öffnen."
+msgstr "Einzelbilder können mit dem Standard-Renderer für RealMedia nicht erstellt werden. In den Ausgabe-Optionen bitte einen VMR-Renderer wählen und die Mediendatei erneut öffnen."
msgctxt "IDS_SCREENSHOT_ERROR_QT"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
-msgstr "Die Funktionen \"Bild speichern\" und \"Miniaturansichten speichern\" können mit dem Standard-Renderer von QuickTime nicht verwendet werden. Bitte einen VMR-Renderer für QuickTime-Video in den Ausgabe-Optionen wählen und die Mediendatei erneut öffnen."
+msgstr "Einzelbilder können mit dem Standard-Renderer für QuickTime nicht erstellt werden. In den Ausgabe-Optionen bitte einen VMR-Renderer wählen und die Mediendatei erneut öffnen."
msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
-msgstr "Die Funktionen \"Bild speichern\" und \"Miniaturansichten speichern\" können mit Shockwave-Dateien nicht verwendet werden."
+msgstr "Einzelbilder können mit Shockwave-Dateien nicht erstellt werden."
msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgstr "Die Funktionen \"Bild speichern\" und \"Miniaturansichten speichern\" können mit dem Overlay-Mixer nicht verwendet werden. Bitte einen geeigneten Video-Renderer in den Ausgabe-Optionen wählen und die Mediendatei erneut öffnen."
-
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Verbindung zur Untertiteldatenbank fehlgeschlagen"
+msgstr "Einzelbilder können mit dem Overlay Mixer Renderer nicht erstellt werden. In den Ausgabe-Optionen bitte einen geeigneten Video-Renderer wählen und die Mediendatei erneut öffnen."
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
@@ -3369,79 +3413,79 @@ msgstr "EDL-Editor aktivieren?"
msgctxt "IDS_CAPTURE_ERROR"
msgid "Capture Error"
-msgstr "Aufnahmefehler!"
+msgstr "Aufnahmefehler aufgetreten."
msgctxt "IDS_CAPTURE_ERROR_VIDEO"
msgid "video"
-msgstr "Videofehler!"
+msgstr "Videofehler aufgetreten."
msgctxt "IDS_CAPTURE_ERROR_AUDIO"
msgid "audio"
-msgstr "Audiofehler!"
+msgstr "Audiofehler aufgetreten."
msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
msgid "Can't add the %s buffer filter to the graph."
-msgstr "Puffer-Filter %s konnte zum Filtergraphen nicht hinzugefügt werden."
+msgstr "Kann Puffer-Filter %s zum Filtergraphen nicht hinzufügen"
msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
msgid "Can't connect the %s buffer filter to the graph."
-msgstr "Puffer-Filter %s konnte mit dem Filtergraphen nicht verbunden werden."
+msgstr "Kann Puffer-Filter %s mit Filtergraphen nicht verbinden"
msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
msgid "Can't add the %s encoder filter to the graph."
-msgstr "Encoder-Filter %s konnte dem Filtergraphen nicht hinzugefügt werden."
+msgstr "Kann Encoder-Filter %s zum Filtergraphen nicht hinzufügen"
msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
msgid "Can't connect the %s encoder filter to the graph."
-msgstr "Encoder-Filter %s konnte mit dem Filtergraphen nicht verbunden werden."
+msgstr "Kann Encoder-Filter %s mit Filtergraphen nicht verbinden"
msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
msgid "Can't set the compression format on the %s encoder filter."
-msgstr "Kompressionsformat konnte auf den Encoder-Filter %s nicht angewandt werden."
+msgstr "Kann Kompressionsformat mit Encoder-Filter %s nicht einrichten"
msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
msgid "Can't connect the %s stream to the multiplexer filter."
-msgstr "Stream %s konnte mit dem Multiplexer-Filter nicht verbunden werden."
+msgstr "Kann Stream %s mit Multiplexer-Filter nicht verbinden"
msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
msgid "No video capture pin was found."
-msgstr "Kein Videoaufnahme-Pin gefunden."
+msgstr "Kann keinen Videoaufnahme-Pin finden"
msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
msgid "No audio capture pin was found."
-msgstr "Kein Audioaufnahme-Pin gefunden."
+msgstr "Kann keinen Audioaufnahme-Pin finden"
msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
msgid "Error initializing the output file."
-msgstr "Initialisierung der Ausgabedatei fehlgeschlagen."
+msgstr "Ausgabedatei konnte nicht initialisiert werden."
msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
msgid "Error initializing the audio output file."
-msgstr "Initialisierung der Audio-Ausgabedatei fehlgeschlagen."
+msgstr "Audioausgabedatei konnte nicht initialisiert werden."
msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
-msgstr "Gültiges Zeitformat: [-]hh:mm:ss.ms (bspw. 01:23:45.678)"
+msgstr "Gültiges Zeitformat: [-]hh:mm:ss.ms"
msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
msgid "This type is already in the list!"
-msgstr "Typ in der Liste bereits vermerkt."
+msgstr "Der gewählte Typ wird bereits verwendet."
msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
-msgstr "Bitte bisher nicht gespeicherte Einstellungen übernehmen."
+msgstr "Bitte nicht gespeicherte Einstellungen vor ihrem Test übernehmen."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Nach Wiedergabe: Programm beenden"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
-msgstr "Nach Wiedergabe: Energie sparen (falls verfügbar)"
+msgstr "Nach Wiedergabe: Standby-Modus"
msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
msgid "After Playback: Hibernate"
-msgstr "Nach Wiedergabe: Ruhezustand (falls verfügbar)"
+msgstr "Nach Wiedergabe: Ruhezustand"
msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
msgid "After Playback: Shutdown"
@@ -3453,12 +3497,20 @@ msgstr "Nach Wiedergabe: Benutzer abmelden"
msgctxt "IDS_AFTERPLAYBACK_LOCK"
msgid "After Playback: Lock"
-msgstr "Nach Wiedergabe: Benutzer sperren"
+msgstr "Nach Wiedergabe: Computer sperren"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Nach Wiedergabe: Bildschirm ausschalten"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Nach Wiedergabe: Nächste Ordnerdatei öffnen"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Nach Wiedergabe: Keine Aktion"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Helligkeit: %s"
@@ -3477,27 +3529,27 @@ msgstr "Sättigung: %s"
msgctxt "IDS_OSD_RESET_COLOR"
msgid "Color settings restored"
-msgstr "Farbeinstellungen zurückgesetzt."
+msgstr "Farbsteuerung: Standard-Einstellungen"
msgctxt "IDS_OSD_NO_COLORCONTROL"
msgid "Color control is not supported"
-msgstr "Farbeinstellungen werden nicht unterstützt."
+msgstr "Farbsteuerung nicht verfügbar"
msgctxt "IDS_BRIGHTNESS_INC"
msgid "Brightness increase"
-msgstr "Helligkeit erhöhen"
+msgstr "Farbsteuerung: Helligkeit erhöhen"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
-msgstr "Erlaubt die Angabe mehrerer bevorzugter Sprachspuren einer Mediendatei nach dem Muster \"ger eng swe\"."
+msgstr "Erlaubt eine automatische Sprachauswahl nach Priorität durch bspw. \"ger eng swe\"."
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
-msgstr "Übergeht die Auswahl der Sprachspur externer Splitter und verwendet die programmeigenen Vorgaben."
+msgstr "Übergeht die Sprachauswahl externer Splitter und verwendet die programmeigenen Vorgaben."
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
-msgstr "&Wiedergabelisten"
+msgstr "&Wiedergabeliste"
msgctxt "IDS_NAVIGATE_PLAYLIST"
msgid "&Playlist"
@@ -3505,7 +3557,7 @@ msgstr "&Wiedergabeliste"
msgctxt "IDS_NAVIGATE_CHAPTERS"
msgid "&Chapters"
-msgstr "&Kapitel"
+msgstr "Ka&pitel"
msgctxt "IDS_NAVIGATE_TITLES"
msgid "&Titles"
@@ -3513,7 +3565,7 @@ msgstr "&Titel"
msgctxt "IDS_NAVIGATE_CHANNELS"
msgid "&Channels"
-msgstr "&Kanäle"
+msgstr "&Sender"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
@@ -3539,3 +3591,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Einstellungen"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Anbieter"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Für Hörgeschädigte"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Downloads"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Bewertung"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Online-Untertitel-Suche fehlgeschlagen"
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Online-Untertitel-Suche abgebrochen"
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "%d Online-Untertitel gefunden"
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Keine Online-Untertitel gefunden"
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Untertitel herunterladen"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Suche Online-Untertitel..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Unterbreche Online-Untertitel-Suche..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Benutzername"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Status"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Bereit"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Nicht verfügbar"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Lade hoch..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Untertitel erfolgreich hochgeladen"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Untertitel-Upload fehlgeschlagen"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Untertitel-Upload abgebrochen"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Untertitel bereits vorhanden"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Lade Untertitel hoch..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Upload beendet"
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Upload abgebrochen"
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Upload fehlgeschlagen"
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Herunterladen && Öffnen"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "&Einrichten"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "&Zurücksetzen"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Nach &oben"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Nach &unten"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "URL öffnen"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Sprachen"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "Fehler: Keine Internetverbindung"
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Anmeldeinformationen eingeben"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Verbindung herstellen mit: "
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Seitenverhältnis: Quadratische Pixel (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "[%s] \"%s\" heruntergeladen"
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Untertitel hochladen"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Untertiteldatei \"%s\" wirklich hochladen?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Frage Angebot ab..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Auf %S konnte unter dem angegebenen Benutzernamen \"%S\" nicht zugegriffen werden. Bitte die Einrichtung der Anmeldeinformationen korrigieren oder auf anonyme Anmeldung zurücksetzen."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Deaktiviert den automatischen Download der Untertitel für Mediendateien, deren Pfad einen der angegebenen Teile nach dem Muster \"privates\\video|arbeit\\\" enthält."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"Pfadname\"\tGibt eine Mediendatei oder ein Verzeichnis an\n\t\t(Wildcards sind möglich, Standardeingabe kann als \"-\"\n\t\tangegeben werden)."
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"Datei\"\tLädt eine zusätzliche Audiodatei."
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"Datei\"\tLädt eine zusätzliche Audiodatei, deren Wiedergabe\n\t\tum X ms versetzt wird (Dateiname muss \"DELAY Xms\"\n\t\tenthalten)."
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tAktiviert den Direct3D-Vollbildmodus."
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"Datei\"\tLädt eine zusätzliche Untertiteldatei."
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"B\"\t\tLädt die in der dynamischen Bibliothek \"B\" enthaltenen\n\t\tDirectShow-Filter (Wildcards sind möglich)."
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tStartet den Player im DVD-Modus (DVD-Verzeichnis kann\n\t\tals \"Pfadname\" angegeben werden)."
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tStartet die DVD-Wiedergabe bei Titel T, Kapitel C."
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tStartet die DVD-Wiedergabe bei Titel T, Position P\n\t\t(hh:mm:ss)."
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tÖffnet eine Audio-CD oder (S)VCD (Laufwerk kann als\n\t\t\"Pfadname\" angegeben werden)."
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tÖffnet das Standard-Gerät."
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tÖffnet eine Mediendatei und pausiert die Wiedergabe."
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tÖffnet eine Mediendatei und startet die Wiedergabe."
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tBeendet den Player (nach Wiedergabe) (nur in\n\t\tKombination mit \"/play\")."
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tFährt den Computer herunter (nach Wiedergabe)."
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tWechselt in den Standby-Modus (nach Wiedergabe)."
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tWechselt in den Ruhezustand (nach Wiedergabe)."
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tMeldet den Benutzer ab (nach Wiedergabe)."
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tSperrt den Computer (nach Wiedergabe)."
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tSchaltet den Bildschirm aus (nach Wiedergabe)."
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tÖffnet die nächste Ordnerdatei (nach Wiedergabe)."
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tStartet den Player im Vollbild."
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tStartet den Player minimiert."
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tStartet einen neuen Player."
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tFügt \"Pfadname\" zur Wiedergabeliste hinzu (auch in\n\t\tKombination mit \"/open\" oder \"/play\")."
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tSortiert die Wiedergabeliste nach Zufall."
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tRegistriert alle Videoformate."
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tRegistriert alle Audioformate."
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tRegistriert alle Wiedergabelisten."
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tRegistriert alle Medienformate."
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tDeregistriert alle Medienformate."
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start X\t\tStartet die Wiedergabe bei X ms."
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos P\tStartet die Wiedergabe bei Position P (hh:mm:ss)."
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize W,H\tFixiert die Fenstergröße bei Breite W und Höhe H."
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tStartet den Player auf Monitor N (N > 0)."
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tVerwendet den Audio-Renderer N (N > 0, siehe\n\t\tAusgabe-Optionen)."
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"P\"\tLädt das Shader-Profil \"P\"."
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"P\"\t\tLädt das Pan&Scan-Profil \"P\"."
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tOrdnet die formateigenen Icons erneut zu."
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tStartet den Player im Hintergrund."
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tAktiviert das Webinterface auf Port N."
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tZeigt die Debug-Information im OSD an."
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDeaktiviert die Fehlerberichterstattung."
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"H\"\t\tStartet den Player im Slave-Modus mit dem\n\t\tFensterhandle \"H\"."
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"I\"\tVerwendet für das Hardware-Decoding den\n\t\tGPU-Index \"I\" (nur CUVID und DXVA2 copy-back)."
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tSetzt alle Programm-Einstellungen zurück."
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tZeigt diese Hilfe an."
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Beeinflusst den automatischen Untertitel-Download. Je höher der Wert, desto besser müssen Untertitel dabei namentlich zur Mediendatei passen."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Audioverzögerung (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Gibt die Höhe der Standard-Toolbar in Pixeln an."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Verwendet wieder die nicht-vektorisierte Standard-Toolbar (Neustart erforderlich)."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "URL kopieren"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.dialogs.pot b/src/mpc-hc/mpcresources/PO/mpc-hc.dialogs.pot
index 51df9234c..8a9ec9372 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.dialogs.pot
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.dialogs.pot
@@ -1,10 +1,10 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -106,7 +106,7 @@ msgid "Enable custom channel mapping"
msgstr ""
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr ""
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -114,7 +114,7 @@ msgid "input channels:"
msgstr ""
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr ""
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -186,7 +186,7 @@ msgid "About"
msgstr ""
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
msgstr ""
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
@@ -418,11 +418,15 @@ msgid "time(s)"
msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
+msgid "Default zoom"
msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
@@ -469,10 +473,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr ""
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr ""
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr ""
@@ -566,7 +566,7 @@ msgid "Warning"
msgstr ""
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr ""
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -673,16 +673,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr ""
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
msgstr ""
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr ""
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr ""
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1122,7 +1122,7 @@ msgid "Audio Renderer"
msgstr ""
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
msgstr ""
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
@@ -1166,7 +1166,7 @@ msgid "DXVA"
msgstr ""
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
+msgid "Subtitles"
msgstr ""
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
@@ -1182,7 +1182,11 @@ msgid "Rotation"
msgstr ""
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
+msgid "Subtitle Renderer"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
@@ -1201,6 +1205,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr ""
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr ""
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr ""
@@ -1226,15 +1234,43 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr ""
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
+msgid "Download subtitles"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
+msgid "Replace currently loaded subtitles"
msgstr ""
msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
+msgid "Download"
msgstr ""
-msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
-msgid "Replace currently loaded subtitles"
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
msgstr ""
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
@@ -1274,7 +1310,7 @@ msgid "Enable automatic update check"
msgstr ""
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
+msgid "Check every:"
msgstr ""
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
@@ -1538,15 +1574,27 @@ msgid "Reset"
msgstr ""
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
+msgid "Online search, download and upload subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
msgstr ""
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
+msgid "Languages in order of preference:"
msgstr ""
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
msgstr ""
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
@@ -1649,6 +1697,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr ""
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr ""
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr ""
@@ -1661,3 +1753,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr ""
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.el.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.el.dialogs.po
index f1034c724..15c53e917 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.el.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.el.dialogs.po
@@ -1,16 +1,18 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# geogeo.gr <admin@geogeo.gr>, 2013-2014
+# geogeo.gr <geogeo.gr@gmail.com>, 2013-2015
# firespin <dartworldgr@hotmail.com>, 2014
+# geogeo.gr <geogeo.gr@gmail.com>, 2015-2016
+# Lampros Zouloumis <onebrand@hotmail.gr>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-22 01:00+0000\n"
-"Last-Translator: firespin <dartworldgr@hotmail.com>\n"
-"Language-Team: Greek (http://www.transifex.com/projects/p/mpc-hc/language/el/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Greek (http://www.transifex.com/mpc-hc/mpc-hc/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -110,15 +112,15 @@ msgid "Enable custom channel mapping"
msgstr "Ενεργοποίηση προσαρμοσμένης αντιστοίχισης καναλιών"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Διαμόρφωση ηχείων για "
+msgid "Speaker configuration for"
+msgstr "Διαμόρφωση ηχείων για"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "κανάλια εισόδου:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Κρατήστε πατημένο το πλήκτρο shift για άμεσες αλλαγές όταν κάνετε κλικ σε κάτι"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -190,8 +192,8 @@ msgid "About"
msgstr "Περί"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 βλέπε Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 βλέπε Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -267,7 +269,7 @@ msgstr "Μόνο το όνομα αρχείου"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
msgid "Don't prefix anything"
-msgstr "Χωρίς καμία επισύναψη"
+msgstr "Χωρίς κάποιο πρόθεμα"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
msgid "Replace file name with title"
@@ -295,7 +297,7 @@ msgstr "Προσκόλληση στα άκρα της οθόνης"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
msgid "Store settings in .ini file"
-msgstr "Καταχώρηση ρυθμίσεων στο αρχείο .ini"
+msgstr "Αποθήκευση ρυθμίσεων στο αρχείο .ini"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
@@ -422,12 +424,16 @@ msgid "time(s)"
msgstr "φορά (ές)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Λειτ. επανάλ.:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Μετά την Αναπαραγωγή"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Έξοδος"
+msgid "Default zoom"
+msgstr "Προεπιλεγμένη εστίαση"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -473,10 +479,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Αυτόματη φόρτωση αρχείων ήχου"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Χρήση της ενσωματωμένης απόδοσης υποτίτλων"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Έλεγχος"
@@ -515,7 +517,7 @@ msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr "Καθυστέρηση βήματος"
+msgstr "Βήμα καθυστέρησης"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -570,7 +572,7 @@ msgid "Warning"
msgstr "Προειδοποίηση"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Εάν παρακάμψετε κι ενεργοποιήσετε την εξομάλυνση γραφικών πλήρους οθόνης κάπου στις ρυθμίσεις της κάρτας γραφικών σας, οι υπότιτλοι δεν πρόκειται να φανούν καλύτερα, αλλά σίγουρα θα τρώνε από τον επεξεργαστή σας."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -599,7 +601,7 @@ msgstr "Εκτέλεση ως &διαχειριστής"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr "Ορισμός ως &προεπιλεγμένο πρόγραμμα"
+msgstr "Ορισμός ως &προεπιλ/νο πρόγραμμα"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -635,7 +637,7 @@ msgstr "Αρχείο(α)"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
msgid "Autoplay"
-msgstr "Αυτόματη αναπαραγωγή (XP μόνο)"
+msgstr "Αυτόματη αναπαραγωγή"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
msgid "Video"
@@ -677,16 +679,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Αποτροπή ελαχιστοποίησης στην προβολή πλήρους οθόνης σε μη προεπιλεγμένη οθόνη"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Χρήση χαρακτηριστικών Γραμμής εργασίας των Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Χρήση βελτιωμένων δυνατοτήτων γραμμής εργασιών"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Άνοιγμα του επόμενου/προηγούμ. αρχείου στο φάκελο, στην επιλογή «Παράβλεψη επόμενου/προηγούμ. αρχείου», όταν υπάρχει μόνο ένα στοιχείο στη λίστα αναπ/γωγής"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Χρήση συμβουλής χρόνου:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -879,7 +881,7 @@ msgstr "Μεγέθυνση: 0.2->3.0"
msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
msgid "Global Media Keys"
-msgstr "Διεθνή πλήκτρα πολυμέσων"
+msgstr "Καθολικά πλήκτρα πολυμέσων"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
msgid "Select All"
@@ -935,7 +937,7 @@ msgstr "Αποθήκευση προσαρμοσμένου στυλ"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr "JPEG ποιότητα:"
+msgstr "Ποιότητα JPEG:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Thumbnails:"
@@ -1126,8 +1128,8 @@ msgid "Audio Renderer"
msgstr "Πρόγραμμα απόδοσης ήχου"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (χωρίς απόδοση) και ρυθμίσεις EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Ρυθμίσεις VMR-9 (χωρίς απόδοση) και EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1170,8 +1172,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Υπότιτλοι *"
+msgid "Subtitles"
+msgstr "Υπότιτλοι"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1188,12 @@ msgid "Rotation"
msgstr "Περιστροφή"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Εξωτερικά φίλτρα (όπως το VSFilter) μπορούν να εμφανίσουν υπότιτλους σε όλα τα προγράμματα απόδοσης."
+msgid "Subtitle Renderer"
+msgstr "Απόδοση υποτίτλων"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Μνήμη cache μεταγλωττισμένων Σκιάσεων"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1205,6 +1211,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Επιτρέπεται η πρόσβαση μόνο από τοπικό υπολογιστή"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Ενεργοποίηση προεπισκόπησης"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Εκτύπωση πληροφοριών εντοπισμού σφαλμάτων"
@@ -1230,16 +1240,44 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Δείκτες χειρισμού CGI: (.ext1=κατάλογος1, .ext2=κατάλογος2, ...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Υπότιτλοι διαθέσιμοι με σύνδεση διαδικτύου"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Λήψη && Άνοιγμα"
+msgid "Download subtitles"
+msgstr "Λήψη υποτίτλων"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Αντικατάσταση υφιστάμενων φορτωμένων υποτίτλων"
+msgstr "Αντικ/ση φορτωμένων τώρα υποτίτλων"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Λήψη"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Ανανέωση"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Ματαίωση"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Επιλογές"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Αποστολή υποτίτλων"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Αποστολή"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Ματαίωση"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Επιλογές"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
@@ -1278,8 +1316,8 @@ msgid "Enable automatic update check"
msgstr "Ενεργοποίηση αυτόματου ελέγχου ενημερώσεων"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Περίοδος μεταξύ ελέγχων:"
+msgid "Check every:"
+msgstr "Έλεγχος κάθε:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1542,16 +1580,28 @@ msgid "Reset"
msgstr "Επαναφορά"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Βάση δεδομένων σε σύνδεση"
+msgid "Online search, download and upload subtitles"
+msgstr "Αναζήτηση σε άμεση σύνδεση, λήψη και αποστολή υποτίτλων"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Αυτόματη αναζήτηση και λήψη υποτίτλων, εφόσον δεν βρεθούν τοπικά"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Προτίμηση υποτίτλων για προβλήματα ακοής (όταν αναφέρεται από πάροχο)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Παράβλεψη των αρχείων που περιέχουν τις λέξεις:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Βασική διεύθυνση URL της βάσης δεδομένων υποτίτλων:"
+msgid "Languages in order of preference:"
+msgstr "Γλώσσες κατά σειρά προτίμησης:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Έλεγχος"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Αυτόματη αποστολή ενεργών υπότιτλων στο τέλος της αναπαραγωγής βίντεο"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1643,19 +1693,63 @@ msgstr "Ρυθμίσεις για προχωρημένους, μην τις επ
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
-msgstr "Σωστό"
+msgstr "Αληθής"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
msgid "False"
-msgstr "Λάθος"
+msgstr "Ψευδής"
msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Προεπιλογή"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Συσκευή"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Αποκλειστική λειτουργία"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Επιτρέπεται κωδικ/μένη μεταφορά δεδομένων"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Επιλογές"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Ενεργοποίηση μείξης στέρεο (για ακουστικά)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Αποκοπή:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Στάθμη:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Σημείωση"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Για ελαχιστοποίηση της παραμόρφωσης του ήχου, συνιστάται η διατήρηση της έντασης αναπαραγωγής περίπου στο 85%, όταν αναπαράγεται δυνατά περιεχόμενο κωδικοποιημένο με απώλειες."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr "JPEG ποιότητα:"
+msgstr "Ποιότητα JPEG:"
msgctxt "IDD_CMD_LINE_HELP_CAPTION"
msgid "Command line help"
@@ -1665,3 +1759,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "Εντάξει"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Αναφορά κατάρρευσης"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Λυπούμαστε. Φαίνεται ότι το MPC-HC μόλις κατέρρευσε. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Στείλτε μια αναφορά σφάλματος για να μας βοηθήσετε να διαγνώσουμε και να διορθώσουμε το πρόβλημα."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Προαιρετικές πληροφορίες"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Email:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Η διεύθυνση του ηλεκτρονικού σας ταχυδρομείου είναι προαιρετική και θα χρησιμοποιηθεί μόνο αν οι προγραμματιστές πρέπει να επικοινωνήσουν μαζί σας για περισσότερες πληροφορίες."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Περιγραφή προβλήματος (μόνο στα Αγγλικά):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Επανεκκίνηση του MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Έξοδος του MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.el.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.el.menus.po
index ebd714ae0..ea5ff0ac9 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.el.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.el.menus.po
@@ -1,17 +1,18 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# geogeo.gr <admin@geogeo.gr>, 2014
+# geogeo.gr <geogeo.gr@gmail.com>, 2014-2015
# firespin <dartworldgr@hotmail.com>, 2014
+# geogeo.gr <geogeo.gr@gmail.com>, 2016
# kasper93, 2013
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-26 22:50+0000\n"
-"Last-Translator: firespin <dartworldgr@hotmail.com>\n"
-"Language-Team: Greek (http://www.transifex.com/projects/p/mpc-hc/language/el/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-01-31 22:01+0000\n"
+"Last-Translator: Underground78\n"
+"Language-Team: Greek (http://www.transifex.com/mpc-hc/mpc-hc/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -66,29 +67,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Αποθήκευση &μικρογραφιών..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Φόρτωση &υποτίτλων..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Αποθήκευση υπο&τίτλων..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "&Βάση δεδομένων υποτίτλων"
+msgid "S&ubtitles"
+msgstr "Υπότιτλοι"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Φόρτωση υποτίτλων..."
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Ανα&ζήτηση..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Απο&θήκευση υποτίτλων..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Α&ποστολή..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Λήψη υποτίτλων..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Λήψη..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Αποστολή υποτίτλων..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -184,11 +181,11 @@ msgstr "&200%"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
-msgstr "Αυτόματη προσαρμογή"
+msgstr "Αυτόματη &προσαρμογή"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "Αυτόματη προσαρμογή (μόνο για μεγαλύτερα)"
+msgstr "Αυτόματη προσαρμογή (μόνο για &μεγαλύτερα)"
msgctxt "POPUP"
msgid "R&enderer Settings"
@@ -198,109 +195,113 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Δοκιμή σχισίματος"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Εμφάνιση στατιστικών"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "Πρ&οβολή στατιστικών"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Χρόνος που απομένει"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Προβολή τρέχοντος &χρόνου"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Εμφάνιση ονόματος &αρχείου"
msgctxt "POPUP"
msgid "&Output Range"
-msgstr "Εύρος εξαγωγής"
+msgstr "Εύρος ε&ξαγωγής"
msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
msgid "&0 - 255"
-msgstr "0 - 255"
+msgstr "&0 - 255"
msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
msgid "&16 - 235"
-msgstr "16 - 235"
+msgstr "&16 - 235"
msgctxt "POPUP"
msgid "&Presentation"
-msgstr "Παρουσίαση"
+msgstr "&Παρουσίαση"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
-msgstr "D3D Λειτουργία πλήρους οθόνης"
+msgstr "D3D &Λειτουργία πλήρους οθόνης"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "D3D Πλήρους οθόνης με γραφικό περιβάλλον"
+msgstr "D3D Πλήρους οθόνης με &γραφικό περιβάλλον"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "Έξοδος RGB 10-bit"
+msgstr "Έ&ξοδος RGB 10-bit"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
-msgstr "Δυναμική είσοδος RGB 10-bit"
+msgstr "Δυναμική &είσοδος RGB 10-bit"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
-msgstr "Επεξεργασία 32 bit κινητής υποδιαστολής"
+msgstr "Επεξεργασία &32 bit κινητής υποδιαστολής"
msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
msgid "&Half Floating Point Processing"
-msgstr "Επεξεργασία 16 bit κινητής υποδιαστολής"
+msgstr "Επεξεργασία &16 bit κινητής υποδιαστολής"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
-msgstr "Απενεργοποίηση σύνθεσης επιφάνειας εργασίας (Aero)"
+msgstr "Απενεργοποίηση σύνθεσης επιφάνειας εργασίας (&Αero)"
msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time &Correction"
-msgstr "Ενεργοποίηση διόρθωσης χρόνου καρέ"
+msgstr "Ενεργοποίηση &διόρθωσης χρόνου καρέ"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "Διαχείριση χρωμάτων"
+msgstr "Διαχείριση χ&ρωμάτων"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
-msgstr "Ενεργοποίηση"
+msgstr "&Ενεργοποίηση"
msgctxt "POPUP"
msgid "&Input Type"
-msgstr "Τύπος εισόδου"
+msgstr "&Τύπος εισόδου"
msgctxt "ID_VIEW_CM_INPUT_AUTO"
msgid "&Auto-Detect"
-msgstr "Αυτόματη ανίχνευση"
+msgstr "&Αυτόματη ανίχνευση"
msgctxt "ID_VIEW_CM_INPUT_HDTV"
msgid "&HDTV"
-msgstr "HDTV"
+msgstr "&ΗDTV"
msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
msgid "SDTV &NTSC"
-msgstr "SDTV NTSC"
+msgstr "SDTV &ΝTSC"
msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
msgid "SDTV &PAL"
-msgstr "SDTV PAL"
+msgstr "SDTV &ΡAL"
msgctxt "POPUP"
msgid "Ambient &Light"
-msgstr "Περιβάλλον φωτισμού"
+msgstr "Περιβάλλον &φωτισμού"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
-msgstr "Φωτεινό (2.2 Gamma)"
+msgstr "&Φωτεινό (2.2 Gamma)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
msgid "&Dim (2.35 Gamma)"
-msgstr "Μέσο (2.35 Gamma)"
+msgstr "&Μέσο (2.35 Gamma)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
-msgstr "Σκοτεινό (2.4 Gamma)"
+msgstr "&Σκοτεινό (2.4 Gamma)"
msgctxt "POPUP"
msgid "&Rendering Intent"
-msgstr "Στόχος φωτοαπόδοσης"
+msgstr "&Στόχος φωτοαπόδοσης"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
@@ -312,7 +313,7 @@ msgstr "Σχετική μέτρηση χρωμάτων"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
-msgstr "Κορεσμός"
+msgstr "&Κορεσμός"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
@@ -320,19 +321,19 @@ msgstr "Απόλυτη μέτρηση χρωμάτων"
msgctxt "POPUP"
msgid "&VSync"
-msgstr "Κατακόρυφος συγχρονισμός (VSync)"
+msgstr "&Κατακόρυφος συγχρονισμός (VSync)"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "Κατακόρυφος συγχρονισμός (VSync)"
+msgstr "&Κατακόρυφος συγχρονισμός (VSync)"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "Ακριβής VSync"
+msgstr "Α&κριβής VSync"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "Εναλλακτικός VSync"
+msgstr "&Εναλλακτικός VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
@@ -344,31 +345,31 @@ msgstr "&Αύξηση μετάθεσης του VSync"
msgctxt "POPUP"
msgid "&GPU Control"
-msgstr "Έλεγχος GPU"
+msgstr "Έ&λεγχος GPU"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "Εκκαθάριση GPU πριν το VSync"
+msgstr "Εκκαθάριση GPU &πριν το VSync"
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
-msgstr "Εκκαθάριση GPU μετά την Παρουσίαση"
+msgstr "Εκκαθάριση GPU &μετά την Παρουσίαση"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "Αναμονή για εκκαθαρίσεις"
+msgstr "&Αναμονή για εκκαθαρίσεις"
msgctxt "POPUP"
msgid "R&eset"
-msgstr "Επαναφορά"
+msgstr "Επανα&φορά"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "Επαναφορά στις προεπιλεγμένες ρυθμίσεις απόδοσης"
+msgstr "Επαναφορά στις &προεπιλεγμένες ρυθμίσεις απόδοσης"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "Επαναφορά στις βέλτιστες ρυθμίσεις απόδοσης"
+msgstr "Επαναφορά στις &βέλτιστες ρυθμίσεις απόδοσης"
msgctxt "POPUP"
msgid "Video &Frame"
@@ -406,37 +407,37 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Άγγιγμα παραθύρου ε&ξωτερικά"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "Διατή&ρηση αναλογιών"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "&Παράκαμψη αναλογιών"
+msgid "&Aspect Ratio"
+msgstr "Α&ναλογίες πλευρών"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Προεπιλογή"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Προεπιλογή (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
-msgstr "4:3"
+msgstr "&4:3"
msgctxt "ID_ASPECTRATIO_5_4"
msgid "&5:4"
-msgstr "5:4"
+msgstr "&5:4"
msgctxt "ID_ASPECTRATIO_16_9"
msgid "&16:9"
-msgstr "16:9"
+msgstr "&16:9"
msgctxt "ID_ASPECTRATIO_235_100"
msgid "&235:100"
-msgstr "235:100"
+msgstr "&235:100"
msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
-msgstr "185:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Να θεωρούνται &τετράγονα πίξελ (SAR)"
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
@@ -448,51 +449,51 @@ msgstr "Πανοραμική οπτική && Σάρ&ωση"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
-msgstr "Αύξηση μεγέθους"
+msgstr "Αύξηση &μεγέθους"
msgctxt "ID_VIEW_DECSIZE"
msgid "&Decrease Size"
-msgstr "Μείωση μεγέθους"
+msgstr "Μείωση μεγέ&θους"
msgctxt "ID_VIEW_INCWIDTH"
msgid "I&ncrease Width"
-msgstr "Αύξηση πλάτους"
+msgstr "Αύξηση &πλάτους"
msgctxt "ID_VIEW_DECWIDTH"
msgid "D&ecrease Width"
-msgstr "Μείωση πλάτους"
+msgstr "Μείωση π&λάτους"
msgctxt "ID_VIEW_INCHEIGHT"
msgid "In&crease Height"
-msgstr "Αύξηση ύψους"
+msgstr "Αύξηση ύ&ψους"
msgctxt "ID_VIEW_DECHEIGHT"
msgid "Decre&ase Height"
-msgstr "Μείωση ύψους"
+msgstr "Μείωση ύψ&ους"
msgctxt "ID_PANSCAN_MOVERIGHT"
msgid "Move &Right"
-msgstr "Μετακίνηση δεξιά"
+msgstr "Μετακίνηση &δεξιά"
msgctxt "ID_PANSCAN_MOVELEFT"
msgid "Move &Left"
-msgstr "Μετακίνηση αριστερά"
+msgstr "Μετακίνηση α&ριστερά"
msgctxt "ID_PANSCAN_MOVEUP"
msgid "Move &Up"
-msgstr "Μετακίνηση πάνω"
+msgstr "Μετακίνηση πά&νω"
msgctxt "ID_PANSCAN_MOVEDOWN"
msgid "Move &Down"
-msgstr "Μετακίνηση κάτω"
+msgstr "Μετακίνηση κά&τω"
msgctxt "ID_PANSCAN_CENTER"
msgid "Cen&ter"
-msgstr "Κέντρο"
+msgstr "&Κέντρο"
msgctxt "ID_VIEW_RESET"
msgid "Re&set"
-msgstr "Επαναφορά"
+msgstr "Επανα&φορά"
msgctxt "POPUP"
msgid "On &Top"
@@ -504,15 +505,15 @@ msgstr "&Προεπιλογή"
msgctxt "ID_ONTOP_ALWAYS"
msgid "&Always"
-msgstr "Πάντα"
+msgstr "Πάν&τα"
msgctxt "ID_ONTOP_WHILEPLAYING"
msgid "While &Playing"
-msgstr "Στην αναπαραγωγή"
+msgstr "Στην &αναπαραγωγή"
msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
msgid "While Playing &Video"
-msgstr "Στην αναπαραγωγή βίντεο"
+msgstr "Στην αναπαραγωγή &βίντεο"
msgctxt "ID_VIEW_OPTIONS"
msgid "&Options..."
@@ -531,9 +532,25 @@ msgid "&Stop"
msgstr "&Διακοπή"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "Βήμα κα&ρέ"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Επανάληψη"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "&Συνεχής"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Αρχείο"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Λίστα αναπαραγωγής"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Μείωση ταχύτητας"
@@ -555,16 +572,16 @@ msgid "S&haders"
msgstr "&Σκιάσεις"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "Ή&χος"
+msgid "&Audio Track"
+msgstr "Κανάλι Ή&χου"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "&Υπότιτλοι"
+msgid "Su&btitle Track"
+msgstr "Κανάλι &Υποτίτλων"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Ροή &βίντεο"
+msgid "Vide&o Track"
+msgstr "Κανάλι &Βίντεο"
msgctxt "POPUP"
msgid "&Volume"
@@ -586,33 +603,41 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Μετά την αναπαραγωγή"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Καμία ενέρ&γεια"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Αναπ/γωγή &επόμενου αρχείου στο φάκελο"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Απενεργοποίηση &οθόνης"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
-msgstr "Έξοδος"
+msgstr "Έ&ξοδος"
msgctxt "ID_AFTERPLAYBACK_STANDBY"
msgid "&Stand By"
-msgstr "Αναμονή"
+msgstr "&Αναμονή"
msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
msgid "&Hibernate"
-msgstr "Αδρανοποίηση"
+msgstr "Α&δρανοποίηση"
msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
msgid "Shut&down"
-msgstr "Τερματισμός"
+msgstr "&Τερματισμός"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
-msgstr "Αποσύνδεση"
+msgstr "Απο&σύνδεση"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "Κλείδωμα"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Σβήσε την &οθόνη"
+msgstr "&Κλείδωμα"
msgctxt "POPUP"
msgid "&Navigate"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.el.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.el.strings.po
index 341d63a73..63c0b8803 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.el.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.el.strings.po
@@ -1,16 +1,20 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# geogeo.gr <admin@geogeo.gr>, 2013-2014
-# firespin <dartworldgr@hotmail.com>, 2014
+# geogeo.gr <geogeo.gr@gmail.com>, 2013-2015
+# firespin <dartworldgr@hotmail.com>, 2014-2016
+# Elena Sotiri <elenaph33@gmail.com>, 2016
+# geogeo.gr <geogeo.gr@gmail.com>, 2015-2016
+# George Galanis <galanisgeorgiosch@gmail.com>, 2017
+# Lampros Zouloumis <onebrand@hotmail.gr>, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-09-30 20:38+0000\n"
-"Last-Translator: firespin <dartworldgr@hotmail.com>\n"
-"Language-Team: Greek (http://www.transifex.com/projects/p/mpc-hc/language/el/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Greek (http://www.transifex.com/mpc-hc/mpc-hc/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -61,10 +65,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Ιδιότητες"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Αρχείο"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Προεπιλεγμένο στυλ"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Λίστα αναπαραγωγής"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Αρχεία"
@@ -117,6 +129,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Εάν ο στόχος απόδοσης μείνει απροσδιόριστος, οι υπότιτλοι SSA/ASS θα αποδοθούν ανάλογα με το καρέ βίντεο, ενώ όλοι οι άλλοι υπότιτλοι κειμένου θα αποδοθούν ανάλογα με το παράθυρο."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Λειτουργία επανάληψης: Λίστα αναπαραγωγής"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Λειτουργία επανάληψης: Αρχείο"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Λειτουργία επανάληψης: Ναι"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Λειτουργία επανάληψης: Όχι"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Συνεχής επανάληψη"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Ποτέ (ταχύτερη προσέγγιση)"
@@ -326,12 +358,12 @@ msgid "On/Off"
msgstr "Ναι/Όχι"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Από fps"
+msgid "From (FPS)"
+msgstr "Από (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "έως fps"
+msgid "To (FPS)"
+msgstr "έως (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -465,6 +497,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Αναπαραγωγή::Σκιάσεις"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Πόροι"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Διάφορα"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "Πληροφορίες"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Αναπαραγωγή::Καταγραφή"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Αναπαραγωγή::Ρυθμίσεις συγχρ. απόδοσης"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Αναπαραγωγή::Μεγιστοποιημένη προβολή"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Εσωτερικά φίλτρα::Απόδοση Ήχου"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Επιλογέας ήχου"
@@ -489,18 +549,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Απόδοση μείκτη επικάλυψης"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Απόδοση μείξης βίντεο 7 (σε παράθυρο)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Απόδοση μείξης βίντεο 9 (σε παράθυρο)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Απόδοση μείξης βίντεο 7 (χωρίς απόδοση)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Απόδοση μείξης βίντεο 9 (χωρίς απόδοση)"
@@ -553,34 +605,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Αναπαραγωγός::Διεπαφή διαδικτύου"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Υπότιτλοι::Βάση δεδομένων"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Πόροι"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Διάφορα"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "Πληροφορίες"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Αναπαραγωγή::Καταγραφή"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Αναπαραγωγή::Ρυθμίσεις συγχρ. απόδοσης"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Αναπαραγωγή::Μεγιστοποιημένη προβολή"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Λεπτομέρειες"
@@ -601,17 +625,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Απόδοση πάντα σε επικάλυψη. Γενικά επιτρέπονται μόνο μορφές YUV, αλλά παρουσιάζονται άμεσα, χωρίς καμία μετατροπή χρώματος σε RGB. Αυτή είναι η ταχύτερη μέθοδος απόδοσης απ΄όλες και η μόνη που μπορείτε να είστε σίγουρος για την ενεργοποίηση καθρεπτίσματος μεγιστοποιημένου βίντεο στην έξοδο TV."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Η προεπιλεγμένη απόδοση των Windows XP. Πολύ σταθερή και λίγο πιο αργή απ΄ ότι ο μίκτης Επικάλυψης. Χρησιμοποιεί DirectDraw και τρέχει σε Επικάλυψη όταν μπορεί."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Είναι διαθέσιμο μόνο αν έχετε εγκατεστημένο το DirectX 9. Έχει τις ίδιες δυνατότητες με το VMR-7 (σε παράθυρο), αλλά δεν χρησιμοποιεί ποτέ απόδοση επικάλυψης και λόγω αυτού μπορεί να είναι λίγο πιο αργό από το VMR-7 (σε παράθυρο)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Ίδιο με το VMR-7 (σε παράθυρο), αλλά με το πρόσθετο Εκχώρησης-Παρουσίασης του MPC-HC για υποτιτλισμό. Το καθρέπτισμα βίντεο επικάλυψης ΔΕΝ λειτουργεί. Συνιστάται το μέγιστο βάθος χρώματος οθόνης (32 bit)."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Διαθέσιμο μόνο αν έχετε εγκαταστήσει το DirectX 9. Πολύ σταθερό αλλά ποτέ δεν θα χρησιμοποιήσει απόδοση Επικάλυψης και γι αυτό μπορεί να είναι λίγο πιο αργό απ΄ ότι ο μείκτης Επικάλυψης."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -622,7 +638,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Ίδιο με το VMR-9 (χωρίς απόδοση), Αλλά χρησιμοποιεί μια πραγματικά δικυβική διπλού περάσματος αλλαγή μεγέθους."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Συνδέεται με οποιονδήποτε τύπο πολυμέσων βίντεο και στέλνει τα εισερχόμενα δείγματα στο πουθενά. Χρησιμοποιήστε το όταν δεν χρειάζεστε την εμφάνιση του βίντεο και θέλετε να εξοικονομήσετε επεξεργαστική ισχύ."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -649,10 +665,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Η απόδοση του QuickTime. Είναι λίγο αργή όταν η περιοχή του βίντεο αλλάζει μέγεθος ή καλύπτεται εν μέρει από ένα άλλο παράθυρο. Όταν η επικάλυψη δεν είναι διαθέσιμη, αυτό μπορεί να επανέλθει στο GDI."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Η έξοδος των μηχανών απόδοσης των Real, από τη βασισμένη στο DX7 Εκχώρηση-Παρουσίαση της VMR-7 (χωρίς απόδοση)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Η έξοδος των μηχανών απόδοσης των Real, από τη βασισμένη στο DX9 Εκχώρηση-Παρουσίαση της VMR-9 (χωρίς απόδοση)."
@@ -661,10 +673,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Η απόδοση του QuickTime. Είναι λίγο αργή όταν η περιοχή του βίντεο αλλάζει μέγεθος ή καλύπτεται εν μέρει από ένα άλλο παράθυρο. Όταν η επικάλυψη δεν είναι διαθέσιμη, αυτό μπορεί να επανέλθει στο GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Η έξοδος των μηχανών απόδοσης του QuickTime, από τη βασισμένη στο DX7 Εκχώρηση-Παρουσίαση της VMR-7 (χωρίς απόδοση)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Η έξοδος των μηχανών απόδοσης του QuickTime, από τη βασισμένη στο DX9 Εκχώρηση-Παρουσίαση της VMR-9 (χωρίς απόδοση)."
@@ -673,22 +681,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Η επιφάνεια του βίντεο θα διατεθεί ως μια κανονική εκτός οθόνης επιφάνεια."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "Η απόδοση ήχου MPC είναι κατεστραμμένη. Μη την χρησιμοποιείτε."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Απόδοση συγχρονισμού"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Αναφορά σφάλματος"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "Το MPC-HC μόλις κατέρρευσε αλλά αυτή η έκδοση καταρτίστηκε χωρίς πληροφορίες αποσφαλμάτωσης.\nΕάν θέλετε να αναφέρετε αυτό το σφάλμα, θα πρέπει πρώτα να προσπαθήσετε με μια επίσημη έκδοση.\n\nΘέλετε να επισκεφθείτε τη σελίδα λήψης τώρα;"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Κανονική απλή επίπεδη επιφάνεια"
@@ -727,7 +723,7 @@ msgstr "Δικυβική A=-1.00 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
msgid "**unavailable**"
-msgstr "**δεν είναι διαθέσιμη**"
+msgstr "**μη διαθέσιμη**"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
msgid "The selected renderer is not installed."
@@ -741,9 +737,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Ψευδής (ασυμπίεστο)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Απόδοση ήχου του MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Εσωτερική Απόδοση Ήχου"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -757,9 +753,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Για να προβάλετε έναν ενσωματωμένο πόρο στο πρόγραμμα περιήγησής σας, πρέπει να ενεργοποιήσετε τη διασύνδεση web.\n\nΧρησιμοποιήστε το κουμπί «Αποθήκευση ως», εάν θέλετε να αποθηκεύσετε μόνο τις πληροφορίες."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Λήψη υποτίτλων"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Λήψη υποτίτλων..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Αποστολή υποτίτλων..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -790,7 +790,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Δεν ήταν δυνατή η εύρεση όλων των τόμων της αρχειοθήκης"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Η επιφάνεια του βίντεο θα διατεθεί ως υφή, αλλά οι λειτουργίες 2D θα μπορούν να χρησιμοποιηθούν για αντιγραφή και επιμήκυνση στην backbuffer. Απαιτεί μια κάρτα γραφικών που να διαθέσει 32bit, RGBA, υφές διαστάσεων όχι-δυνάμεων του δύο και τουλάχιστον στην ανάλυση του βίντεο."
msgctxt "IDC_TEXTURESURF3D"
@@ -817,6 +817,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Μειώνει το σχίσιμο παρακάμπτοντας την προεπιλογή VSync ενσωματωμένου στο D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Σάρωση δέκτη"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Οι υπότιτλοι δεν έχουν φορτωθεί ή δεν υποστηρίζεται το πρόγραμμα απόδοσης."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Αποθήκευση μεταγλωττισμένων σκιάσεων στο τοπικό AppData για επιτάχυνση του χρόνου φόρτωσης."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Άνοιγμα VTS_xx_0.ifo για φόρτωση αρχείων VTS_xx_x.vob σε ένα κομμάτι"
@@ -889,7 +901,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Σίγαση"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Διακοπή σίγασης"
@@ -954,12 +966,12 @@ msgid "&Organize Favorites..."
msgstr "&Οργάνωση αγαπημένων..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "Τυχαία σειρά"
+msgid "Sh&uffle"
+msgstr "Τυχαία &σειρά"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Άνοιγμα θέσης αρχείου"
+msgid "Ope&n file location"
+msgstr "Άνοιγμα &θέσης αρχείου"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -971,7 +983,7 @@ msgstr "Αναπαραγωγή"
msgctxt "IDS_CONTROLS_PAUSED"
msgid "Paused"
-msgstr "Σταματημένο"
+msgstr "Σε παύση"
msgctxt "IDS_AG_EDL_NEW_CLIP"
msgid "EDL new clip"
@@ -1042,8 +1054,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Εστίαση σε υπερευρυγώνια οθόνη,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Απόκρυψη σε πλήρη οθόνη"
+msgid "&Hide on Fullscreen"
+msgstr "&Απόκρυψη σε πλήρη οθόνη"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1230,8 +1242,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "Προσθήκη του φακέλου που περιέχει το αρχείο"
+msgid "Add containing &folder"
+msgstr "Προσθήκη του φακέλου που περιέχει το &αρχείο"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1315,7 +1327,7 @@ msgstr "Έξοδος"
msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
msgid "Turn off the monitor"
-msgstr "Σβήσε την οθόνη"
+msgstr "Απενεργοποίηση οθόνης"
msgctxt "IDS_IMAGE_JPEG_QUALITY"
msgid "JPEG Image"
@@ -1327,7 +1339,7 @@ msgstr "Ποιότητα (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
-msgstr "Μέγιστο μέγεθος (NxNpx) από ένα εξώφυλλο που έχει φορτωθεί στην λειτουργία μόνο ήχου."
+msgstr "Μέγιστο μέγεθος (NxNpx) από ένα εξώφυλλο που έχει φορτωθεί στην λειτουργία μόνο ήχου."
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
@@ -1335,7 +1347,83 @@ msgstr "Η καθυστέρηση στους υπότιτλους θα μειω
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr "<not defined>"
+msgstr "<Δεν έχει καθοριστεί>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Παρακολούθηση"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Μετακίν. πάνω"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Μετακίν. κάτω"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Ταξινόμηση κατά LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Κατάργηση όλων"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Είστε βέβαιος ότι θέλετε να καταργήσετε όλα τα κανάλια από τη λίστα;"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Δεν υπάρχουν διαθέσιμες πληροφορίες"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Παρακαλώ περιμένετε. Ανάλυση σε εξέλιξη..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Ενεργοποίηση καταγραφής σε αρχείο (απαιτεί επανεκκίνηση)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Χρόνος που απομένει"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Υψηλή ακρίβεια"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Μετά την αναπαραγωγή: Επαναφορά τρέχοντος αρχείου"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Μετά την αναπαραγωγή: Κλείσιμο"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "Το MPC-HC αντιμετώπισε ένα πρόβλημα κατά τη διάρκεια της προετοιμασίας. Με τη βοήθειά σας, μπορεί να είμαστε σε θέση να διορθώσουμε το ζήτημα.\n\nΘέλετε να αναφέρετε αυτό το ζήτημα;"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Εισάγετε μια θετική τιμή εάν ο ήχος είναι πρόωρος ή μια αρνητική τιμή εάν καθυστερεί."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Η προεπισκόπηση είναι προσωρινά απενεργοποιημένη. Μπορείτε να την ενεργοποιήσετε από τις επιλογές του MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Αυτή η επιλογή μπορεί να χρησιμοποιηθεί για την προεπισκόπηση αρχείων πολυμέσων από απομακρυσμένη τοποθεσία. Χρησιμοποιήστε την μόνο σε καλά ασφαλισμένο ιδιωτικό δίκτυο.\n\nΘέλετε σίγουρα να ενεργοποιήσετε αυτή την επιλογή;"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Εσωτερική απόδοση υποτίτλων"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1357,13 +1445,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Η αποθήκευση εικόνας ολοκληρώθηκε"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Φόρτωση υποτίτλων"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Φόρτωση υποτίτλων..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Αποθήκευση υποτίτλων"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Αποθήκευση υποτίτλων..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,11 +1474,11 @@ msgid "Stop"
msgstr "Διακοπή"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Βήμα καρέ"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Βήμα καρέ πίσω"
msgctxt "IDS_AG_GO_TO"
@@ -1490,8 +1578,8 @@ msgid "Thumbnails saved successfully"
msgstr "Οι μικρογραφίες αποθηκεύτηκαν επιτυχώς"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "&Ροή βίντεο"
+msgid "Vide&o Track"
+msgstr "Κανάλι &Βίντεο"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1538,11 +1626,11 @@ msgid "Reset Rate"
msgstr "Επαναφορά ροής"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Καθυστέρηση ήχου +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Καθυστέρηση ήχου -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1613,14 +1701,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Μετατόπιση υπότιτλου δεξιά"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Εμφάνιση στατιστικών"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Μετάβαση στην αρχή"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Εμφάνιση ονόματος αρχείου"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Αναπαραγωγή DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Αναπαραγωγή BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Προβολή Στατιστικών Απόδοσης"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Μηδενισμός Στατιστικών Απόδοσης"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Υπότιτλοι::Διάφορα"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Απόκρυψη περιθωρίων"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Κάδρο μόνο"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Εμφάνιση Λεζάντας && Μενού"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Απόκρυψη μενού"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Προηγμένες"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Λιτή προβολή"
@@ -1686,8 +1814,8 @@ msgid "PnS Dec Height"
msgstr "Πανοραμική: Ύψος -"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Λήψη υποτίτλων. Παρακαλώ περιμένετε."
+msgid "Downloading [%s] \"%s\""
+msgstr "Λήψη [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1698,8 +1826,8 @@ msgid "No subtitles found."
msgstr "Δεν βρέθηκαν υπότιτλοι."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d υπότιτλοι είναι διαθέσιμοι."
+msgid "%d subtitle(s) available."
+msgstr "%d υπότιτλοι είναι διαθέσιμοι."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1854,12 +1982,12 @@ msgid "Boss key"
msgstr "Πλήκτρο αφεντικού"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Μενού αναπαραγωγού (σύντομο)"
+msgid "Player Menu"
+msgstr "Μενού αναπαραγωγής"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Μενού αναπαραγωγού (ευρύ)"
+msgid "Player Menu (full)"
+msgstr "Μενού αναπαραγωγής (πλήρες)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1870,20 +1998,20 @@ msgid "Options"
msgstr "Επιλογές"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
+msgid "Next Audio Track"
msgstr "Επόμενο κομμάτι ήχου"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
+msgid "Prev Audio Track"
msgstr "Προηγούμενο κομμάτι ήχου"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Επόμενος υπότιτλος"
+msgid "Next Subtitle Track"
+msgstr "Επόμενο κομμάτι υπότιτλου"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Προηγούμενος υπότιτλος"
+msgid "Prev Subtitle Track"
+msgstr "Προηγούμενο κομμάτι υπότιτλου"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1893,22 +2021,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Επαναφόρτωση υποτίτλων"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Επόμενο κομμάτι ήχου (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Προηγούμενο κομμάτι ήχου (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Επόμενος υπότιτλος (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Προηγούμενος υπότιτλος (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Επόμενη γωνία (DVD)"
@@ -1918,28 +2030,28 @@ msgid "Prev Angle (DVD)"
msgstr "Προηγούμενη γωνία (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
+msgid "Next Audio Track (DVD)"
msgstr "Επόμενο κομμάτι ήχου (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
+msgid "Prev Audio Track (DVD)"
msgstr "Προηγούμενο κομμάτι ήχου (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Επόμενος υπότιτλος (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Επόμενο κομμάτι υπότιτλου (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Προηγούμενος υπότιτλος (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Προηγούμενο κομμάτι υπότιτλου (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Απ-Ενεργοποίηση υποτίτλων (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Χρόνος που απομένει"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Προβολή τρέχοντος χρόνου"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2077,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Κρυπτογραφημένο"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Ναι"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Όχι"
@@ -2026,12 +2138,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Τόμος: %02lu/%02lu, Τίτλος: %02lu/%02lu, Κεφάλαιο: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Γωνία: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2043,7 +2155,7 @@ msgstr "Αναπαραγωγή με το MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr "Ο MPC-HC δεν έχει δεν έχει επαρκή δικαιώματα για να αλλάξει τις συσχετίσεις των μορφών αρχείων. Παρακαλώ κάντε κλικ στο \"Χρήση ως διαχειριστής\" κουμπί."
+msgstr "Το MPC-HC δεν έχει επαρκή δικαιώματα για να αλλάξει τις συσχετίσεις των μορφών αρχείων. Παρακαλώ κάντε κλικ στο κουμπί \"Εκτέλεση ως διαχειριστής\"."
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
@@ -2095,7 +2207,7 @@ msgstr "DVD: Μη συμβατές περιοχές δίσκου και αποκ
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "Η επιλογή αυτή έχει σχεδιαστεί για την αποφυγή σχισίματος. Ωστόσο, θα αποτρέψει επίσης το MPC-HC\nαπό την εμφάνιση των μενού περιβάλλοντος και παραθύρων διαλόγου κατά την αναπαραγωγή.\n\nΓια να βγείτε από την αναπαραγωγή Direct3D πλήρους οθόνης, πρέπει να πιέσετε: Ctrl + C.\n\nΕίστε βέβαιος ότι θέλετε να ενεργοποιήσετε αυτήν την επιλογή;"
+msgstr "Αυτή η επιλογή σχεδιάστηκε για την αποφυγή σπασίματος. Ωστόσο, θα αποτρέψει επίσης το MPC-HC από την εμφάνιση του μενού περιβάλλοντος και κάθε πλαισίου διαλόγου κατά την αναπαραγωγή.\n\nΘέλετε πραγματικά να ενεργοποιήσετε αυτή την επιλογή;"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
@@ -2121,14 +2233,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Πλάτος εικόνας:"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "Η διεύθυνση URL φαίνεται να είναι σωστή!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Ασυμφωνία έκδοσης πρωτοκόλλου. Παρακαλώ να αναβαθμίσετε το πρόγραμμα αναπαραγωγής ή να επιλέξετε μια διαφορετική διεύθυνση!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Αναλογία πλευρών"
@@ -2138,19 +2242,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Σύνολο: %ld, Απορρίφθηκαν: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Μέγεθος: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Μέγεθος: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Ελεύθερη: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Ελεύθερη: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2222,8 +2326,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Οι μικρογραφίες θα είναι πολύ μικρές. Δεν είναι δυνατό να δημιουργηθεί το αρχείο.\n\nΠροσπαθήστε να μειώσετε τον αριθμό των μικρογραφιών ή να αυξήσετε το συνολικό μέγεθος."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Για φόρτωση υποτίτλων πρέπει να αλλάξετε τον τύπο απόδοσης βίντεο και να ανοίξετε ξανά το αρχείο.\n- DirectShow: VMR-7/VMR-9 (χωρίς απόδοση), EVR (CP), Sync, madVR ή Haali\n- RealMedia: Ειδική απόδοση για RealMedia ή άνοιγμά του με το DirectShow\n- QuickTime : απόδοση DX7 ή DX9 για QuickTime\n- ShockWave : Μη διαθέσιμο"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Για να φορτώσετε υπότιτλους θα πρέπει να αλλάξετε τον τύπο απόδοσης του βίντεο και να ανοίξετε ξανά το αρχείο.\n- DirectShow: VMR-9 (χωρίς απόδοση), EVR (CP), Sync, madVR or Haali\n- RealMedia: Απόδοση ειδικά για RealMedia ή άνοιγμά του μέσω DirectShow\n- QuickTime: Απόδοση DX7 ή DX9 για QuickTime\n- ShockWave: Μη διαθέσιμο"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2234,11 +2338,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Αναλογία πλευρών: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Αναλογία πλευρών: Προεπιλογή"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Αναλογίες πλευρών: Προεπιλογή (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Καθυστέρηση ήχου: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2250,8 +2354,8 @@ msgid "Out of memory"
msgstr "Ανεπαρκής μνήμη"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Σφάλμα: Απαιτείται το Flash player για IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Σφάλμα: Απαιτείται το Adobe Flash Player για Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2273,10 +2377,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Η απόδοση του αρχείου απέτυχε"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Εσφαλμένη διεύθυνση. Δεν υπάρχει βάση δεδομένων υποτίτλων εδώ!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Κεφάλαιο: "
@@ -2297,14 +2397,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Τρέχουσα"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "Το MPC-HC τερματίστηκε απροσδόκητα. Για να βοηθήσετε να διορθωθεί αυτό το πρόβλημα, παρακαλούμε να στείλετε το αρχείο \"%s\" στην κονσόλα παρακολούθησης σφαλμάτων μας.\n\nΘέλετε να ανοίξετε το φάκελο που περιέχει το αρχείο ένδειξης σφαλμάτων και να επισκεφθείτε την κονσόλα παρακολούθησης σφαλμάτων τώρα;"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Απέτυχε η δημιουργία αρχείου ένδειξης σφαλμάτων σε \"%s\" (σφάλμα %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Επιλέξτε κατάλογο"
@@ -2322,7 +2414,7 @@ msgid "Toggle Caption&Menu"
msgstr "Εναλλαγή σε λεζάντα & μενού"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Εναλλαγή σε γραμμή αναζήτησης"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2423,11 +2515,11 @@ msgstr "Κατακόρυφος συγχρονισμός (VSync)"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr "(Σχόλια σκηνοθέτη 1)"
+msgstr " (Σχόλια σκηνοθέτη 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr "(Σχόλια σκηνοθέτη 2)"
+msgstr " (Σχόλια σκηνοθέτη 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
@@ -2478,8 +2570,8 @@ msgid "Volume boost Max"
msgstr "Μέγιστη ώθηση έντασης"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Χρήση: mpc-hc.exe \"κατάλογος\" [παράμετροι]\n\n\"κατάλογος\"\tΤο κύριο αρχείο ή ο κατάλογος που θα φορτωθεί\n\t\t(επιτρέπονται τα μπαλαντέρ \"-\" υποδηλώνει τυπική είσοδο)\n/dub \"αρχείο ήχου\"\tΦόρτωση ενός πρόσθετου αρχείου ήχου\n/dubdelay \"αρχείο\"\tΦόρτωση ενός πρόσθετου αρχείου ήχου μετατοπισμένο με XXms\n\t\t(εάν το αρχείο περιέχει \"...DELAY XXms...\")\n/d3dfs\t\tΕκκίνηση απόδοσης σε λειτουργία D3D πλήρους οθόνης\n/sub \"όνομα υπότιτλων\"\tΦόρτωση ενός πρόσθετου αρχείου υποτίτλων\n/filter \"όνομα φίλτρου\"\tΦόρτωση φίλτρων DirectShow από ένα dll\n\t\t(επιτρέπονται τα μπαλαντέρ)\n/dvd\t\tΕκτέλεση σε λειτουργία DVD. Ως \"κατάλογος\" εννοείται\n\t\tο φάκελος του DVD (προαιρετικά)\n/dvdpos T#C\tΈναρξη αναπαραγωγής στον τίτλο T, κεφάλαιο C\n/dvdpos T#hh:mm\tΈναρξη αναπαραγωγής στον τίτλο T, θέση hh:mm:ss\n/cd\t\tΦόρτωση όλων των κομματιών από ένα CD ή (S)VCD.\n\t\tΩς \"κατάλογος\" εννοείται της συσκευής οδήγησης (προαιρετικά)\n/device\t\tΆνοιγμα της προεπιλεγμένης συσκευής βίντεο\n/open\t\tΆνοιγμα του αρχείου χωρίς αυτόματη έναρξη αναπαραγωγής\n/play\t\tΈναρξη αναπαραγωγής του αρχείου με την εκκίνηση του\n\t\tπρογράμματος αναπαραγωγής\n/close\t\tΚλείσιμο του προγράμματος μετά την αναπαραγωγή\n\t\t(δουλεύει μόνο όταν χρησιμοποιείται με το /play)\n/shutdown\tΤερματισμός του συστήματος μετά την αναπαραγωγή\n/fullscreen\tΈκκίνηση σε λειτουργία πλήρους οθόνης\n/minimized\tΈκκίνηση σε ελαχιστοποιημένη λειτουργία\n/new\t\tΕκκινεί μια νέα παρουσία του MPC-HC\n/add\t\tΠροσθήκη του \"κατάλογος\" στη λίστα αναπαραγωγής.\n\t\tΜπορεί να συνδυαστεί με /open και /play\n/regvid\t\tΔημιουργεί συσχετίσεις για αρχεία βίντεο\n/regaud\t\tΔημιουργεί συσχετίσεις για αρχεία ήχου\n/regpl\t\tΔημιουργεί συσχετίσεις για αρχεία λίστας αναπαραγωγής\n/regall\t\tΔημιουργεί συσχετίσεις αρχείων\n\t\tγια όλους τους υποστηριζόμενους τύπους αρχείων\n/unregall\t\tΚαταργεί όλες τις συσχετίσεις αρχείων\n/start ms\t\tΈναρξη αναπαραγωγής στα \"ms\" (= χιλιοστά δευτερολέπτου)\n/startpos hh:mm:ss\tΈναρξη αναπαραγωγής στη θέση hh:mm:ss\n/fixedsize w,h\tΟρίζει το μέγεθος ενός σταθερού παραθύρου\n/monitor N\tΕκκίνηση του MPC-HC στην οθόνη N (όπου το N ξεκινά από 1)\n/audiorenderer N\tΈναρξη απόδοσης ήχου με χρήση του N (όπου το N ξεκινά από 1)\n\t\t(βλέπε ρυθμίσεις \"Έξοδος\")\n/shaderpreset \"Pr\"\tΈναρξη με χρήση της προρύθμισης σκίασης \"Pr\"\n/reset\t\tΕπαναφορά προεπιλεγμένων ρυθμίσεων\n/help /h /?\tΕμφάνιση βοήθειας σχετικά με τις παραμέτρους της γραμμής εντολών\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Χρήση: mpc-hc.exe \"διαδρομή\" [παράμετρος]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2565,14 +2657,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Ενεργοποίηση όλων των φίλτρων"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Σάρωση δέκτη"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Οι υπότιτλοι δεν έχουν φορτωθεί ή δεν υποστηρίζεται το πρόγραμμα απόδοσης."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Άγνωστος δημιουργός. Επικοινωνήστε μαζί μου εάν δημιουργήσατε αυτό το λογότυπο!"
@@ -2661,40 +2745,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Μπροστά πάνω δεξιά"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Επαναφορά προβολής στατιστικών"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Υπότιτλοι::Διάφορα"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Απόκρυψη περιθωρίων"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Κάδρο μόνο"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Εμφάνιση Λεζάντας && Μενού"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Απόκρυψη μενού"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Προηγμένες"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Πάνω από γραμμή αναζήτησης"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Κάτω από γραμμή αναζήτησης"
msgctxt "IDS_VIDEO_STREAM"
@@ -2862,8 +2918,8 @@ msgid "Other Audio"
msgstr "Άλλο αρχείο ήχου"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2929,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3013,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Λίστα αναπαραγωγής"
@@ -2977,18 +3037,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Αναλογίες εικόνας"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Χρήση WASAPI (επανεκκίνηση αναπαραγωγής)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Σίγαση στη γρήγορη αναπαραγωγή"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Συσκευή ήχου:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "Κατακόρυφος συγχρονισμός (VSync): Ναι"
@@ -3223,7 +3271,7 @@ msgstr "Η τρέχουσα έκδοσή σας είναι η v%s.\n\nΗ νεώ
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr "Η έκδοση MPC-HC v%s είναι τώρα διαθέσιμη.\nΧρησιμοποιείτε την v%s.\n\nΘέλετε να επισκεφθείτε τον ιστότοπο του MPC-HC για λήψη;"
+msgstr "Η έκδοση MPC-HC v%s είναι τώρα διαθέσιμη.\n\nΧρησιμοποιείτε την v%s.\n\nΘέλετε να επισκεφθείτε τον ιστότοπο του MPC-HC για λήψη;"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
@@ -3277,6 +3325,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Ανάκτηση έντασης: Όχι"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3334,7 +3386,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Σφάλμα ανάλυσης του ρυθμού καρέ που έχει εισαχθεί!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Δεν είναι δυνατό το βήμα καρέ.\nΔοκιμάστε μια διαφορετική απόδοση βίντεο."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3353,10 +3405,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "Οι επιλογές \"Αποθήκευση εικόνας\" και \"Αποθήκευση μικρογραφιών\" δεν λειτουργούν με την απόδοση βίντεο Overlay Mixer.\nΑλλάξτε την απόδοση βίντεο στις επιλογές εξόδου του MPC-HC και ανοίξτε πάλι το αρχείο."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Δεν ήταν δυνατή η σύνδεση με τη βάση δεδομένων υποτίτλων."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Θέλετε να ενεργοποιήσετε τον επεξεργαστή EDL;"
@@ -3425,7 +3473,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Πρέπει να κάνετε εφαρμογή των νέων ρυθμίσεων πριν από τη δοκιμή τους."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Μετά την αναπαραγωγή: Έξοδος"
@@ -3451,7 +3499,15 @@ msgstr "Μετά την αναπαραγωγή: Κλείδωμα"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr "Μετά την Αναπαραγωγή: Σβήσε την οθόνη"
+msgstr "Μετά την Αναπαραγωγή: Απενεργοποίηση οθόνης"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Μετά την αναπαραγωγή: Αναπ/γωγή επόμενου αρχείου στο φάκελο"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Μετά την αναπαραγωγή: Καμία ενέργεια"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
@@ -3533,3 +3589,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Ρυθμίσεις"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "Φίλτρο Ass"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Πάροχος"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Άτομα με προβλήματα ακοής"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Λήψεις"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Αποτέλεσμα"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Η αναζήτηση υποτίτλων σε άμεση σύνδεση απέτυχε."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Η αναζήτηση υποτίτλων σε άμεση σύνδεση ματαιώθηκε."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Η αναζήτηση υποτίτλων σε άμεση σύνδεση ολοκληρώθηκε. Βρέθηκαν %d υπότιτλοι."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Η αναζήτηση υποτίτλων σε άμεση σύνδεση ολοκληρώθηκε. Δεν βρέθηκαν υπότιτλοι."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Λήψη υποτίτλων"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Αναζήτηση για υπότιτλους σε άμεση σύνδεση. Παρακαλώ περιμένετε..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Ματαίωση αναζήτησης υποτίτλων σε άμεση σύνδεση..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Όνομα χρήστη"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Κατάσταση"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Έτοιμο..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Δεν υλοποιήθηκε."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Αποστολή..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Οι υπότιτλοι ανέβηκαν με επιτυχία."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Η αποστολή υποτίτλων απέτυχε."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Η αποστολή υποτίτλων ματαιώθηκε."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Οι υπότιτλοι υπάρχουν ήδη."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Αποστολή υποτίτλων. Παρακαλώ περιμένετε..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Η αποστολή ολοκληρώθηκε."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Η αποστολή ματαιώθηκε."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Η αποστολή απέτυχε."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Λήψη && Άνοιγμα"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Διαμόρφωση"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Επαναφορά"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Μετακίν. πάνω"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Μετακίν. κάτω"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Άνοιγμα URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Γλώσσες"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "ΣΦΑΛΜΑ: Δεν ήταν δυνατή η δημιουργία σύνδεσης στο διαδίκτυο."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Εισάγετε τα διαπιστευτήρια τοποθεσιών web"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Εισάγετε τα διαπιστευτήριά σας για σύνδεση σε: "
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Αναλογίες εικόνας: Να θεωρούνται τετράγωνα πίξελ (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Παραλήφθηκαν [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Αποστολή υποτίτλων"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Είστε βέβαιος ότι θέλετε να ανεβάσετε το αρχείο υποτίτλων \"%s\";"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Λήψη υποστηριζόμενων γλωσσών..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Απέτυχε η σύνδεση στο \"%S\" με όνομα χρήστη \"%S\".\n\nΠαρακαλώ εισάγετε το σωστό όνομα χρήστη και κωδικό ή ακυρώστε τα διαπιστευτήρια για να συνδεθείτε ως ανώνυμος χρήστης."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Η αυτόματη αναζήτηση και λήψη θα απενεργοποιηθεί για όλα τα αρχεία πολυμέσων που η διαδρομή τους περιλαμβάνει οποιοδήποτε από τα μοτίβα που έχουν εισαχθεί εδώ.\nΓια παράδειγμα, γράψτε: \"private dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pathname\"⇥Το κύριο αρχείο ή φάκελος που θα ανοίξει\n\n⇥⇥(επιτρέπονται οι χαρακτήρες μπαλαντέρ, το \"-\" υποδηλώνει τυπική είσοδο)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"⇥Φόρτωση ενός πρόσθετου αρχείου ήχου"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"αρχείο\"\tΦόρτωση ενός πρόσθετου αρχείου ήχου μετατοπισμένο με XXms\n\t\t(εάν το αρχείο περιέχει \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tΕκκίνηση απόδοσης σε λειτουργία D3D πλήρους οθόνης"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"⇥Φόρτωση ενός πρόσθετου αρχείου υποτίτλων"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"όνομα φίλτρου\"\tΦόρτωση φίλτρων DirectShow από ένα dll (τα wildcards επιτρέπονται)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tΕκτέλεση σε λειτουργία DVD. Ως \"κατάλογος\" εννοείται φάκελος του DVD (προαιρετικά)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tΈναρξη αναπαραγωγής στον τίτλο T, κεφάλαιο C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tΈναρξη αναπαραγωγής στον τίτλο T, θέση P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tΦόρτωση όλων των κομματιών από ένα CD ή (S)VCD. Ως \"κατάλογος\" εννοείται της συσκευής οδήγησης (προαιρετικά)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tΆνοιγμα της προεπιλεγμένης συσκευής βίντεο"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tΆνοιγμα του αρχείου, χωρίς αυτόματη έναρξη αναπαραγωγής"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tΈναρξη της αναπαραγωγής του αρχείου με την εκκίνηση του προγράμματος αναπαραγωγής"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tΚλείσιμο του προγράμματος μετά την αναπαραγωγή (δουλεύει μόνο όταν χρησιμοποιείται με το /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tΤερματισμός του συστήματος μετά την αναπαραγωγή"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tΣε αναμονή μετά την αναπαραγωγή"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tΑδρανοποίηση μετά την αναπαραγωγή"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tΑποσύνδεση μετά την αναπαραγωγή"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tΚλείδωμα του σταθμού εργασίας μετά την αναπαραγωγή"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tΑπενεργοποίηση της οθόνης μετά την αναπαραγωγή"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tΆνοιγμα του επόμενου αρχείου στο φάκελο μετά την αναπαραγωγή"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tΈναρξη σε λειτουργία πλήρους οθόνης"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tΈναρξη σε ελαχιστοποιημένη λειτουργία"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tΕκκινεί μια νέα παρουσία του MPC-BE"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tΠροσθήκη του \"\"κατάλογος\"\" στη λίστα αναπαραγωγής. Μπορεί να συνδυαστεί με /open and /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tΤυχαία λίστα αναπαραγωγής"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tΔημιουργεί συσχετίσεις για αρχεία βίντεο"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tΔημιουργεί συσχετίσεις για αρχεία ήχου"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tΔημιουργεί συσχετίσεις για αρχεία λίστας αναπαραγωγής"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tΔημιουργεί συσχετίσεις αρχείων για όλους τους υποστηριζόμενους τύπους αρχείων"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tΚαταργεί όλες τις συσχετίσεις αρχείων"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tΈναρξη αναπαραγωγής στα \"ms\" (= χιλιοστά δευτερολέπτου)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tΈναρξη αναπαραγωγής στη θέση hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tΟρισμός σταθερού μεγέθους παραθύρου"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tΕκκίνηση του MPC-HC στην οθόνη N (όπου το N ξεκινά από 1)"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tΈναρξη απόδοσης ήχου με χρήση του N (όπου το N ξεκινά από 1)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tΈναρξη με χρήση \"Pr\" προκαθορισμένη σκίαση"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"όνομα\"\tΚαθορισμός Pan&Scan προκαθορισμένου ονόματος για χρήση"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tΣυσχέτιση ξανά της μορφής εικονιδίων"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tΆνοιγμα του MPC-HC στο παρασκήνιο"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tΈναρξη της διεπαφής web στη καθορισμένη θύρα"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tΕμφάνιση πληροφοριών εντοπισμού σφαλμάτων OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tΑπενεργοποίηση της αναφοράς κατάρρευσης"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tΧρήση του MPC-HC ως δευτερεύον"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tΟρισμός ευρετηρίου της GPU για χρήση αποκωδικοποίησης υλικού.\n\t\tΔιαθέσιμο μόνο για CUVID και DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tΕπαναφορά προεπιλεγμένων ρυθμίσεων"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tΕμφάνιση βοήθειας για τις παραμέτρους της γραμμής εντολών"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Η οριακή βαθμολογία για υπότιτλους, η οποία θα γίνει λήψη αυτόματα. Υψηλότερες τιμές σημαίνει ότι η φόρτωση των υποτίτλων θα έχουν μεγαλύτερη ακρίβεια, χαμηλότερες τιμές μπορεί να οδηγήσει σε εσφαλμένη φόρτωση υποτίτλων, αλλά δεν υπάρχει μία ακριβής τιμή. Διάλεξε αυτό που λειτουργεί καλύτερα για σένα."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Καθυστέρηση ήχου (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Μέγεθος σε pixels της προεπιλεγμένης γραμμής εργαλείων."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Χρήση της παλαιάς γραμμής εργαλείων αντί της νέας."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.dialogs.po
index bacec3994..6cb2de0c6 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.dialogs.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Sir_Burpalot <doctor.z01db3rg@gmail.com>, 2013-2014
+# Sir_Burpalot <doctor.z01db3rg@gmail.com>, 2013-2016
# Underground78, 2013
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-27 19:40+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-01-26 15:33+0000\n"
"Last-Translator: Sir_Burpalot <doctor.z01db3rg@gmail.com>\n"
-"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/mpc-hc/language/en_GB/)\n"
+"Language-Team: English (United Kingdom) (http://www.transifex.com/mpc-hc/mpc-hc/language/en_GB/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -110,16 +110,16 @@ msgid "Enable custom channel mapping"
msgstr "Enable custom channel mapping"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Speaker configuration for "
+msgid "Speaker configuration for"
+msgstr "Speaker configuration for"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "input channels:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Hold shift for immediate changes when clicking something"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -190,8 +190,8 @@ msgid "About"
msgstr "About"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 see Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 see Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -422,12 +422,16 @@ msgid "time(s)"
msgstr "time(s)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Repeat mode:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "After Playback"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Output"
+msgid "Default zoom"
+msgstr "Default zoom"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -473,10 +477,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Auto-load audio files"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Use the built-in subtitle renderer"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Control"
@@ -570,8 +570,8 @@ msgid "Warning"
msgstr "Warning"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -677,17 +677,17 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Prevent minimising the player when in fullscreen on a non default monitor"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Use Windows 7 Taskbar features"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Use enhanced taskbar features"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "Use time tooltip:"
+msgid "Show time tooltip:"
+msgstr "Show time tooltip:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
@@ -1126,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "Audio Renderer"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderless) and EVR (CP) settings"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1170,8 +1170,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Subtitles *"
+msgid "Subtitles"
+msgstr "Subtitles"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1186,12 @@ msgid "Rotation"
msgstr "Rotation"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* External filters (such as VSFilter) can display subtitles on all renderers."
+msgid "Subtitle Renderer"
+msgstr "Subtitle Renderer"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Cache compiled Shaders"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1205,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Allow access from localhost only"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Enable preview"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Print debug information"
@@ -1230,17 +1238,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Subtitles available online"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Download && Open"
+msgid "Download subtitles"
+msgstr "Download subtitles"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Replace currently loaded subtitles"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Download"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Refresh"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Abort"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Options"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Upload subtitles"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Upload"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Abort"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Options"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Save As..."
@@ -1278,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "Enable automatic update check"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Delay between each check:"
+msgid "Check every:"
+msgstr "Check every:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1542,16 +1578,28 @@ msgid "Reset"
msgstr "Reset"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Online database"
+msgid "Online search, download and upload subtitles"
+msgstr "Online search, download and upload subtitles"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Automatically search and download subtitles if none are found locally"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignore files containing any of the following word(s):"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Base URL of the online subtitle database:"
+msgid "Languages in order of preference:"
+msgstr "Languages in order of preference (e.g. \"eng ell spa\"):"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Test"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Automatically upload active subtitles at the end of video playback"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1653,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Default"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Device"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Exclusive mode"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Allow bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Options"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Enable stereo crossfeed (for headphones)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Cut-off:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Level:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Note"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "To minimise audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG quality:"
@@ -1665,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Crash reporter"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "We are sorry, it seems MPC-HC just crashed. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Send a bug report to help us diagnose and fix the problem."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Optional information"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Email:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Your email address is optional and will only be used if the developers need to contact you for more information."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Problem description (use English only):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Restart MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Quit MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.menus.po
index 2499b1335..955b0b392 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.menus.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Sir_Burpalot <doctor.z01db3rg@gmail.com>, 2013-2014
+# Sir_Burpalot <doctor.z01db3rg@gmail.com>, 2013-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-23 01:00+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-03-07 07:51+0000\n"
"Last-Translator: Sir_Burpalot <doctor.z01db3rg@gmail.com>\n"
-"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/mpc-hc/language/en_GB/)\n"
+"Language-Team: English (United Kingdom) (http://www.transifex.com/mpc-hc/mpc-hc/language/en_GB/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +64,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Save &Thumbnails..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Load Subtitle..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Save S&ubtitle..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Subtitle Data&base"
+msgid "S&ubtitles"
+msgstr "Subtitles"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Search..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Load Subtitles..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&Upload..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Save S&ubtitles..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Download..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Download Subtitles..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Upload Subtitles..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -196,13 +192,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Tearing Test"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Display Statistics"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Display Current T&ime"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Remaining Time"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Show &File Name"
msgctxt "POPUP"
msgid "&Output Range"
@@ -404,17 +404,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Touch Window From &Outside"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Keep Aspect Ratio"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Override &Aspect Ratio"
+msgid "&Aspect Ratio"
+msgstr "&Aspect Ratio"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Default"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Default (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,6 +432,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Assume &square pixels (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "&Correct Monitor/Desktop AR Diff"
@@ -529,8 +529,24 @@ msgid "&Stop"
msgstr "&Stop"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
-msgstr "F&rame Step"
+msgid "Fra&me Step"
+msgstr "Fra&me Step"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Repeat"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "F&orever"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&File"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Playlist"
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
@@ -553,16 +569,16 @@ msgid "S&haders"
msgstr "S&haders"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio"
+msgid "&Audio Track"
+msgstr "&Audio Track"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Su&btitles"
+msgid "Su&btitle Track"
+msgstr "Su&btitle Track"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "&Video Stream"
+msgid "Vide&o Track"
+msgstr "Vide&o Track"
msgctxt "POPUP"
msgid "&Volume"
@@ -584,7 +600,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Af&ter Playback"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Do no&thing"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Play &next file in the folder"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Turn off the &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Exit"
@@ -608,10 +636,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "&Lock"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Turn off the &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Navigate"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.strings.po
index 311d41d23..2eff4f77e 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.en_GB.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Sir_Burpalot <doctor.z01db3rg@gmail.com>, 2013-2014
+# Sir_Burpalot <doctor.z01db3rg@gmail.com>, 2013-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-27 19:40+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-14 06:37+0000\n"
"Last-Translator: Sir_Burpalot <doctor.z01db3rg@gmail.com>\n"
-"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/mpc-hc/language/en_GB/)\n"
+"Language-Team: English (United Kingdom) (http://www.transifex.com/mpc-hc/mpc-hc/language/en_GB/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -60,10 +60,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Properties"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "File"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Default Style"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Playlist"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Files"
@@ -116,6 +124,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Repeat Mode: Playlist"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Repeat Mode: File"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Repeat Forever: On"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Repeat Forever: Off"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Repeat Forever"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Never (fastest approach)"
@@ -325,12 +353,12 @@ msgid "On/Off"
msgstr "On/Off"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "From fps"
+msgid "From (FPS)"
+msgstr "From (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "To fps"
+msgid "To (FPS)"
+msgstr "To (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -464,6 +492,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Playback::Shaders"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Resources"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Miscellaneous"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Playback::Capture"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Playback::Sync Renderer Settings"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Playback::Fullscreen"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Internal Filters::Audio Renderer"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Audio Switcher"
@@ -488,18 +544,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (windowed)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (windowed)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderless)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (renderless)"
@@ -552,34 +600,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Player::Web Interface"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Subtitles::Database"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Resources"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Miscellaneous"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Playback::Capture"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Playback::Sync Renderer Settings"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Playback::Fullscreen"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Details"
@@ -600,17 +620,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any colour conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Colour\" desktop colour space recommended."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -621,8 +633,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -648,10 +660,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
@@ -660,10 +668,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
@@ -672,22 +676,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Video surface will be allocated as a regular offscreen surface."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Renderer is broken, do not use."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Reporting a bug"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Regular offscreen plain surface"
@@ -740,9 +732,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (uncompressed)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Internal Audio Renderer"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -756,9 +748,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Download subtitles"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Download Subtitles..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Upload Subtitles..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -789,8 +785,8 @@ msgid "Couldn't find all archive volumes"
msgstr "Couldn't find all archive volumes"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
@@ -816,6 +812,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Reduces tearing by bypassing the default VSync built into D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Tuner scan"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Subtitles are not loaded or unsupported renderer."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Stores compiled shaders in local AppData to speed up load time."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
@@ -888,7 +896,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Mute"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Unmute"
@@ -953,12 +961,12 @@ msgid "&Organize Favorites..."
msgstr "&Organise Favourites..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "Shuffle"
+msgid "Sh&uffle"
+msgstr "Sh&uffle"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Open file location"
+msgid "Ope&n file location"
+msgstr "Ope&n file location"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -1041,8 +1049,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
+msgstr "&Hide on Fullscreen"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1229,8 +1237,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "Add containing folder"
+msgid "Add containing &folder"
+msgstr "Add containing &folder"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1334,7 +1342,83 @@ msgstr "The subtitle delay will be decreased/increased by this value each time t
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<not defined>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Watch"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Move Up"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Move Down"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sort by LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Remove all"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Are you sure you want to remove all channels from the list?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "No information available"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Please wait, analysis in progress..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Enables logging to file (requires restart)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Remaining time"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "High precision"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "After Playback: Rewind current file"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "After Playback: Close"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC encountered a problem during initialisation. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Enter a positive value if the audio is early, a negative value if it is late."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Preview is currently disabled. You can enable it in MPC-HC's options."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Internal Subtitle Renderer"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1356,13 +1440,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Image saved successfully"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Load Subtitle"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Load Subtitles..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Save Subtitle"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Save Subtitles..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1385,12 +1469,12 @@ msgid "Stop"
msgstr "Stop"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "Framestep"
+msgid "Frame-step"
+msgstr "Frame-step"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "Framestep back"
+msgid "Frame-step back"
+msgstr "Frame-step back"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
@@ -1489,8 +1573,8 @@ msgid "Thumbnails saved successfully"
msgstr "Thumbnails saved successfully"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "&Video Stream"
+msgid "Vide&o Track"
+msgstr "Vide&o Track"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1537,12 +1621,12 @@ msgid "Reset Rate"
msgstr "Reset Rate"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
+msgstr "Audio Delay +10 ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
+msgstr "Audio Delay -10 ms"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
@@ -1612,14 +1696,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Shift Subtitle Right"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Display Stats"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Jump to Beginning"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Show File Name"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Play DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Play BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Display Renderer Statistics"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Reset Renderer Statistics"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Subtitles::Misc"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Hide &borders"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Fra&me Only"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Sho&w Caption&&Menu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Hide &Menu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Advanced"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "View Minimal"
@@ -1685,8 +1809,8 @@ msgid "PnS Dec Height"
msgstr "PnS Dec Height"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Downloading subtitle(s), please wait."
+msgid "Downloading [%s] \"%s\""
+msgstr "Downloading [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1697,8 +1821,8 @@ msgid "No subtitles found."
msgstr "No subtitles found."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
+msgstr "%d subtitle(s) available."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1853,12 +1977,12 @@ msgid "Boss key"
msgstr "Boss key"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Player Menu (short)"
+msgid "Player Menu"
+msgstr "Player Menu"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Player Menu (long)"
+msgid "Player Menu (full)"
+msgstr "Player Menu (full)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1869,20 +1993,20 @@ msgid "Options"
msgstr "Options"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Next Audio"
+msgid "Next Audio Track"
+msgstr "Next Audio Track"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Prev Audio"
+msgid "Prev Audio Track"
+msgstr "Prev Audio Track"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Next Subtitle"
+msgid "Next Subtitle Track"
+msgstr "Next Subtitle Track"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Prev Subtitle"
+msgid "Prev Subtitle Track"
+msgstr "Prev Subtitle Track"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1892,22 +2016,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Reload Subtitles"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Next Audio (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Prev Audio (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Next Subtitle (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Prev Subtitle (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Next Angle (DVD)"
@@ -1917,28 +2025,28 @@ msgid "Prev Angle (DVD)"
msgstr "Prev Angle (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Next Audio (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Next Audio Track (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Prev Audio (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Prev Audio Track (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Next Subtitle (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Next Subtitle Track (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Prev Subtitle (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Prev Subtitle Track (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "On/Off Subtitle (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Remaining Time"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Display Current Time"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1964,11 +2072,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Encrypted"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Yes"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "No"
@@ -2025,12 +2133,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
-msgstr "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2120,14 +2228,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Image width"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "The URL appears to be correct!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Protocol version mismatch, please upgrade your player or choose a different address!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Aspect Ratio"
@@ -2137,20 +2237,20 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Total: %ld, Dropped: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
+msgstr ", Size: %I64d KB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
+msgstr ", Size: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
+msgstr ", Free: %I64d KB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
+msgstr ", Free: %I64d MB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
@@ -2221,8 +2321,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2233,12 +2333,12 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Aspect Ratio: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Aspect Ratio: Default"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Aspect Ratio: Default (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
+msgstr "Audio delay: %I64d ms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2249,8 +2349,8 @@ msgid "Out of memory"
msgstr "Out of memory"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Error: Flash player for IE is required"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Error: Adobe Flash Player for Internet Explorer is required"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2272,10 +2372,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Failed to render the file"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Bad URL, could not locate subtitle database there!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Chapter: "
@@ -2296,14 +2392,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Current"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Failed to create dump file to \"%s\" (error %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Select Directory"
@@ -2321,8 +2409,8 @@ msgid "Toggle Caption&Menu"
msgstr "Toggle Caption&Menu"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
-msgstr "Toggle Seeker"
+msgid "Toggle Seek Bar"
+msgstr "Toggle Seek Bar"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
msgid "Toggle Controls"
@@ -2477,8 +2565,8 @@ msgid "Volume boost Max"
msgstr "Volume boost Max"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimised mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Usage: mpc-hc.exe \"pathname\" [switches]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2564,14 +2652,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Enable all filters"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Tuner scan"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Subtitles are not loaded or unsupported renderer."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Author unknown. Contact us if you made this logo!"
@@ -2660,41 +2740,13 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Top Back Right"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Reset Display Stats"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Subtitles::Misc"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Hide &borders"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Frame Only"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Sho&w Caption&&Menu"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Hide &Menu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Advanced"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
-msgstr "Above seekbar"
+msgid "Above seek bar"
+msgstr "Above seek bar"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
-msgstr "Below seekbar"
+msgid "Below seek bar"
+msgstr "Below seek bar"
msgctxt "IDS_VIDEO_STREAM"
msgid "Video: %s"
@@ -2861,8 +2913,8 @@ msgid "Other Audio"
msgstr "Other Audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2872,6 +2924,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2936,22 +3008,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Playlist"
@@ -2976,18 +3032,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Aspect Ratio"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Use WASAPI (restart playback)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Mute on fast forward"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Sound Device:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: On"
@@ -3276,6 +3320,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Regain volume: Off"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3333,8 +3381,8 @@ msgid "Error parsing the entered frame rate!"
msgstr "Error parsing the entered frame rate!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
-msgstr "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Cannot frame-step, try a different video renderer."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
@@ -3352,10 +3400,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Cannot connect to the online subtitles database."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Do you want to activate the EDL editor?"
@@ -3424,7 +3468,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "You need to apply the new settings before testing them."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "After Playback: Exit"
@@ -3452,6 +3496,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "After Playback: Turn off the monitor"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "After Playback: Play next file in the folder"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "After Playback: Do nothing"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Brightness: %s"
@@ -3532,3 +3584,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Settings"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Provider"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Hearing Impaired"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Downloads"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Score"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Online subtitles search failed."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Online subtitles search aborted."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Online subtitles search completed, %d subtitles found."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Online subtitles search completed, no subtitles found."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Download subtitles"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Searching for subtitles online, please wait..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Online subtitles search aborting..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Username"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Status"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Ready..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Not implemented."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Uploading..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Subtitles uploaded succeessfuly."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Subtitles upload failed."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Subtitles upload aborted."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Subtitles already exist."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Uploading subtitles, please wait..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Upload finished."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Upload aborted."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Upload failed."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Download && Open"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Setup"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Reset"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Move Up"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Move Down"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Open URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Languages"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "ERROR: Internet connection could not be established."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Enter website credentials"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Enter your credentials to connect to: "
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Aspect Ratio: Assume square pixels (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Downloaded [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Upload subtitles"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Are you sure you want to upload the subtitle file \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Fetching supported languages..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"\tLoad an additional audio file"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"\tLoad an additional subtitle file"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tStart playback at title T, chapter C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tOpen the default video device"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tOpen the file, don't automatically start playback"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tStart playing the file as soon the player is launched"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tClose the player after playback (only works when used with /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tShutdown the operating system after playback"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tPut the operating system in standby mode after playback"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tHibernate operating system after playback"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tLog off after playback"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tLock workstation after playback"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tTurn off the monitor after playback"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tOpen next file in the folder after playback"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tStart in fullscreen mode"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tStart in minimised mode"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tUse a new instance of the player"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tRandomise the playlist"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tCreate file associations for video files"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tCreate file associations for audio files"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tCreate file associations for playlist files"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tCreate file associations for all supported file types"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tRemove all file associations"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tSet a fixed window size"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tStart player on monitor N, where N starts from 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tReassociate format icons"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tOpen MPC-HC in background"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tStart web interface on specified port"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tShow debug information in OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDisable the crash reporter"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tUse MPC-HC as slave"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tRestore default settings"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tShow help about command line switches"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Audio Delay (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Size in pixels of the default toolbar."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Use legacy toolbar instead of new vectorised one."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Copy URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.es.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.es.dialogs.po
index 61ee8aa49..f190231e3 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.es.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.es.dialogs.po
@@ -1,20 +1,21 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
-# Ernesto Avilés Vzqz <whippiii@gmail.com>, 2013
-# Ernesto Avilés Vzqz <whippiii@gmail.com>, 2014
+# Adolfo Jayme-Barrientos, 2014-2015
+# Adolfo Jayme-Barrientos, 2015-2016
+# Adolfo Jayme-Barrientos, 2014
+# Ernesto Avilés Vázquez <whippiii@gmail.com>, 2013
+# Ernesto Avilés Vázquez <whippiii@gmail.com>, 2014
# squallmx <squallmx@users.sourceforge.net>, 2014
-# strel, 2014
+# strel, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-22 08:00+0000\n"
-"Last-Translator: Adolfo Jayme Barrientos <fito@libreoffice.org>\n"
-"Language-Team: Spanish (http://www.transifex.com/projects/p/mpc-hc/language/es/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Spanish (http://www.transifex.com/mpc-hc/mpc-hc/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -23,7 +24,7 @@ msgstr ""
msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
msgid "Select Media Type"
-msgstr "Seleccione el tipo de medio"
+msgstr "Seleccione el tipo de audiovisual"
msgctxt "IDD_SELECTMEDIATYPE_IDOK"
msgid "OK"
@@ -67,7 +68,7 @@ msgstr "Vista previa"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "V/A Buffers:"
-msgstr "Búferes V/A:"
+msgstr "Buffers de V/A:"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
msgid "Audio to wav"
@@ -79,7 +80,7 @@ msgstr "Grabar"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
msgid "Enable built-in audio switcher filter (requires restart)"
-msgstr "Activar filtro interno para cambiar pistas de audio (requiere reinicio)"
+msgstr "Activar filtro conmutador de audio integrado (requiere reinicio)"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
msgid "Normalize"
@@ -91,11 +92,11 @@ msgstr "Amplificación máxima:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
msgid "%"
-msgstr " %"
+msgstr "%"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
msgid "Regain volume"
-msgstr "Ganancia de volumen"
+msgstr "Reganar pérdidas de volumen"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
msgid "Boost:"
@@ -114,7 +115,7 @@ msgid "Enable custom channel mapping"
msgstr "Activar asignación de canales personalizada"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Configuración de altavoces para"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -122,8 +123,8 @@ msgid "input channels:"
msgstr "canales de entrada:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Mantenga presionada Mayús para aplicar los cambios de inmediato"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Mantenga pulsada Mayúsculas al hacer clic para aplicar los cambios de inmediato"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -131,7 +132,7 @@ msgstr "Ir a…"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
-msgstr "Escriba una marca de tiempo en el formato [hh]:mm:ss:ms para saltar a ese momento. No es necesario escribir los separadores."
+msgstr "Escriba una marca de tiempo en formato [hh]:mm:ss:ms para saltar a ese instante. No es necesario escribir los separadores."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Time"
@@ -143,11 +144,11 @@ msgstr "Ir"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
-msgstr "Escriba dos conjuntos de números para acceder a un cuadro específico; el primero es el número de cuadros y el segundo la tasa de cuadros por segundo."
+msgstr "Escriba dos números para acceder a un fotograma específico; el primero es el número del fotograma y el segundo la tasa de fotogramas por segundo (FPS)."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Frame"
-msgstr "Cuadro"
+msgstr "Fotograma"
msgctxt "IDD_GOTO_DLG_IDC_OK2"
msgid "Go!"
@@ -159,7 +160,7 @@ msgstr "Abrir"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Escriba la ruta del archivo multimedia (en Internet o en el equipo) y el reproductor lo abrirá."
+msgstr "Escriba la ruta del archivo de vídeo o audio (en Internet o en el equipo) y el reproductor lo abrirá por usted."
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
@@ -167,7 +168,7 @@ msgstr "Abrir:"
msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
msgid "Browse..."
-msgstr "Examinar..."
+msgstr "Examinar…"
msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
msgid "Dub:"
@@ -175,7 +176,7 @@ msgstr "Doblaje:"
msgctxt "IDD_OPEN_DLG_IDC_BUTTON2"
msgid "Browse..."
-msgstr "Examinar..."
+msgstr "Examinar…"
msgctxt "IDD_OPEN_DLG_IDOK"
msgid "OK"
@@ -187,27 +188,27 @@ msgstr "Cancelar"
msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
msgid "Add to playlist without opening"
-msgstr "Agregar a la lista de reproducción sin abrir"
+msgstr "Añadir a la lista de reproducción sin abrir"
msgctxt "IDD_ABOUTBOX_CAPTION"
msgid "About"
msgstr "Acerca de"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "© 2002-2014. Consulte el archivo Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017. Consulte Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
-msgstr "Este programa es gratuito y está publicado bajo la Licencia Pública General de GNU."
+msgstr "Este programa es gratuito y está publicado bajo la Licencia Pública General de GNU (GPL)."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Traducción al español: SquallMX, XPC y Fitoschido."
+msgstr "Traducción: Adolfo, strel y otros."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
-msgstr "Información de la compilación"
+msgstr "Información de la versión de compilación"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Version:"
@@ -235,7 +236,7 @@ msgstr "Nombre:"
msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
msgid "Copy to clipboard"
-msgstr "Copiar en el portapapeles"
+msgstr "Copiar al portapapeles"
msgctxt "IDD_ABOUTBOX_IDOK"
msgid "OK"
@@ -247,11 +248,11 @@ msgstr "Opciones de apertura"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
msgid "Use the same player for each media file"
-msgstr "Usar el mismo reproductor para cada archivo multimedia"
+msgstr "Usar el mismo reproductor para cada archivo audiovisual"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
msgid "Open a new player for each media file played"
-msgstr "Abrir un reproductor nuevo para cada archivo multimedia"
+msgstr "Abrir un reproductor nuevo para cada archivo audiovisual"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Language"
@@ -267,15 +268,15 @@ msgstr "Mostrar la ruta completa"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
msgid "File name only"
-msgstr "Solo el nombre de archivo"
+msgstr "Sólo el nombre del archivo"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
msgid "Don't prefix anything"
-msgstr "No mostrar nada"
+msgstr "No prefijar nada"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
msgid "Replace file name with title"
-msgstr "Usar titulo como nombre"
+msgstr "Reemplazar el nombre del archivo con su título"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Other"
@@ -283,23 +284,23 @@ msgstr "Otros"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
msgid "Tray icon"
-msgstr "Icono del área de notificación"
+msgstr "Icono de bandeja del sistema"
msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
msgid "Show OSD (requires restart)"
-msgstr "Mostrar OSD (requiere reinicio)"
+msgstr "Mostrar sobreimpresión OSD (precisa reinicio)"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
msgid "Limit window proportions on resize"
-msgstr "Limitar proporciones de ventana al cambiar su tamaño"
+msgstr "Limitar proporciones al redimensionar ventana"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
msgid "Snap to desktop edges"
-msgstr "Ajustarse a los bordes del escritorio"
+msgstr "Atraer ventana a los bordes del escritorio"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
msgid "Store settings in .ini file"
-msgstr "Guardar configuración en archivo .ini"
+msgstr "Guardar configuración en un archivo .ini"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
@@ -307,11 +308,11 @@ msgstr "Desactivar el menú «Abrir disco»"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
msgid "Process priority above normal"
-msgstr "Mayor prioridad para el proceso"
+msgstr "Elevar prioridad del proceso sobre normal"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
-msgstr "Activar compatibilidad con carátulas"
+msgstr "Activar soporte para carátulas"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "History"
@@ -319,7 +320,7 @@ msgstr "Historial"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
msgid "Keep history of recently opened files"
-msgstr "Mantener historial de los archivos abiertos"
+msgstr "Retener historial reciente de archivos abiertos "
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
msgid "Remember last playlist"
@@ -327,11 +328,11 @@ msgstr "Recordar última lista de reproducción"
msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
msgid "Remember File position"
-msgstr "Recordar la posición del archivo"
+msgstr "Recordar posición del archivo"
msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
msgid "Remember DVD position"
-msgstr "Recordar la posición del DVD"
+msgstr "Recordar posición del DVD"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
msgid "Remember last window position"
@@ -343,11 +344,11 @@ msgstr "Recordar tamaño de la ventana"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
msgid "Remember last Pan-n-Scan Zoom"
-msgstr "Recordar el último zoom Pan & scan"
+msgstr "Recordar zoom del reencuadre (pan&scan)"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
-msgstr "Comportamiento «Abrir DVD/BD»"
+msgstr "Comportamiento de «Abrir DVD/BD»"
msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
msgid "Prompt for location"
@@ -355,11 +356,11 @@ msgstr "Solicitar ubicación"
msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
msgid "Always open the default location:"
-msgstr "Siempre abrir la ubicación predefinida:"
+msgstr "Abrir siempre la ubicación predefinida:"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Preferred language for DVD Navigator and the external OGM Splitter"
-msgstr "Idioma favorito para menús de DVD y el «OGM Splitter» externo"
+msgstr "Idioma preferido para el filtro «DVD Navigator» y el «OGM Splitter» externo (demultiplexor)"
msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
msgid "Menu"
@@ -375,11 +376,11 @@ msgstr "Subtítulos"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Additional settings"
-msgstr "Ajustes adicionales"
+msgstr "Configuraciones adicionales"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
-msgstr "Permitir subtítulos en «Decodificador Línea 21»"
+msgstr "Permitir subtitulado para sordos (closed captions, CC) en el filtro «Line 21 Decoder»"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
@@ -391,11 +392,11 @@ msgstr "Volumen"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Min"
-msgstr "Mín."
+msgstr "Mín"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Max"
-msgstr "Máx."
+msgstr "Máx"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
msgid "Balance"
@@ -415,39 +416,43 @@ msgstr "Reproducción"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
msgid "Play"
-msgstr "Reprod."
+msgstr "Reproducir"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
msgid "Repeat forever"
-msgstr "Repetir para siempre"
+msgstr "Repetir continuamente"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
msgid "time(s)"
msgstr "veces"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Modo de repetición:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Tras la reproducción"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Salida"
+msgid "Default zoom"
+msgstr "Zoom predeterminado"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
-msgstr "Ampliación automática:"
+msgstr "Zoom automático:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
-msgstr "Factor de ajuste automático:"
+msgstr "Factor del auto ajuste:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
msgid "%"
-msgstr " %"
+msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Default track preference"
-msgstr "Preferencia de pista predefinida"
+msgstr "Preferencias de la pista predeterminada"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
@@ -459,7 +464,7 @@ msgstr "Audio:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr "Permitir la elección de modificación de los divisores externos"
+msgstr "Permitir elección manual de demultiplexor (splitter) externo"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
@@ -467,20 +472,16 @@ msgstr "Opciones de apertura"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
msgid "Use worker thread to construct the filter graph"
-msgstr "Usar proceso funcional para construir extr. de filtros"
+msgstr "Usar subproceso de trabajo para construir el diagrama de filtros"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
-msgstr "Reportar conectores que no quieran funcionar"
+msgstr "Informar de etapas (del diagrama de filtros) que no logren renderizar"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Cargar archivos de audio automáticamente"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Usar renderizador de subtítulos incorporado"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Control"
@@ -491,7 +492,7 @@ msgstr "Salto de volumen:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "%"
-msgstr " %"
+msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Speed step:"
@@ -499,7 +500,7 @@ msgstr "Salto de velocidad:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
msgid "Override placement"
-msgstr "Fijar ubicación"
+msgstr "Posicionamiento manual"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
msgid "Horizontal:"
@@ -507,7 +508,7 @@ msgstr "Horizontal:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC2"
msgid "%"
-msgstr " %"
+msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC3"
msgid "Vertical:"
@@ -515,7 +516,7 @@ msgstr "Vertical:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC4"
msgid "%"
-msgstr " %"
+msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
@@ -527,15 +528,15 @@ msgstr "ms"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Texture settings (open the video again to see the changes)"
-msgstr "Opciones de textura (es necesario re-abrir el archivo para notar los cambios)"
+msgstr "Opciones de textura (es necesario reabrir el vídeo para notar los cambios)"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Sub pictures to buffer:"
-msgstr "Numero de subtítulos para almacenar previamente:"
+msgstr "Subtítulos pre-renderizados en cola:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Maximum texture resolution:"
-msgstr "Resolución de textura máxima:"
+msgstr "Resolución máxima de la textura:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
msgid "Never animate the subtitles"
@@ -543,7 +544,7 @@ msgstr "Nunca animar los subtítulos"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
msgid "Render at"
-msgstr "Representar en"
+msgstr "Renderizar al"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
msgid "% of the animation"
@@ -551,7 +552,7 @@ msgstr "% de la animación"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
msgid "Animate at"
-msgstr "Animar en"
+msgstr "Animar al"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
msgid "% of the video frame rate"
@@ -559,7 +560,7 @@ msgstr "% de la tasa de fotogramas del vídeo"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr "Permite desechar algunas subimágenes si la cola lleva retardo"
+msgstr "Permitir desechar algunos subtítulos pre-renderizados si la cola lleva retraso"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
@@ -574,8 +575,8 @@ msgid "Warning"
msgstr "Advertencia"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Si activa el modo de suavizado a pantalla completa en la configuración de la tarjeta de vídeo, se incrementará el uso de la CPU sin mejoras de calidad visual de los subtítulos."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Si activa manualmente el suavizado (antialiasing) a pantalla completa en alguno de los ajustes de su tarjeta gráfica, seguramente se disparará el uso de la CPU sin lograr mejorar el aspecto de los subtítulos."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -583,11 +584,11 @@ msgstr "Extensiones de archivo"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
msgid "Default"
-msgstr "Original"
+msgstr "Predefinidas"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
msgid "Set"
-msgstr "Fijar"
+msgstr "Establecer"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
msgid "Association"
@@ -623,7 +624,7 @@ msgstr "DirectShow"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
msgid "Check file extension first"
-msgstr "Basarse primero en extensión"
+msgstr "Basarse primero en la extensión"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Explorer Context Menu"
@@ -655,11 +656,11 @@ msgstr "DVD"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
msgid "Audio CD"
-msgstr "CD de audio"
+msgstr "CD audio"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "Jump distances (small, medium, large in ms)"
-msgstr "Distancias de salto (corto, medio, largo en ms)"
+msgstr "Distancias de salto (corto, medio, largo, en ms)"
msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
msgid "Default"
@@ -667,39 +668,39 @@ msgstr "Original"
msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
msgid "Fast seek (on keyframe)"
-msgstr "Búsqueda rápida (sobre fotograma clave)"
+msgstr "Reposicionamiento rápido al fotograma clave"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
msgid "Show chapter marks in seek bar"
-msgstr "Mostrar las marcas de capítulo en la barra de desplazamiento"
+msgstr "Mostrar marcas de capítulo en la barra de desplazamiento"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
-msgstr "Mostrar la información «Reproduciendo ahora» en el mensaje de estado de ánimo de Skype"
+msgstr "Mostrar información «Now playing [...]» en el estado de ánimo de Skype"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Evitar minimizar el reproductor en modo a pantalla completa al usar otro monitor"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Utilizar funciones de la barra de tareas de Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Usar características de la barra de tareas mejorada"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Saltar al archivo anterior/siguiente en la carpeta en «Saltar siguiente/anterior» cuando solo hay un archivo en la lista de reproducción"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Abrir el archivo anterior/siguiente de la carpeta al «Retroceder/Avanzar» cuando sólo haya un elemento en la lista de reproducción"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "Burbuja de tiempo:"
+msgid "Show time tooltip:"
+msgstr "Mostrar etiqueta emergente de tiempo:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
-msgstr "Tipo de letra de OSD:"
+msgstr "Tipo de letra de la sobreimpresión (OSD):"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
msgid "Enable Logitech LCD support (experimental)"
-msgstr "Activar compatibilidad con LCD Logitech (experimental)"
+msgstr "Activar compatibilidad con LCD de Logitech (pantalla en teclado) (experimental)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
@@ -707,7 +708,7 @@ msgstr "Ocultar automáticamente el ratón durante la reproducción en modo vent
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
msgid "Add Filter..."
-msgstr "Agregar filtro..."
+msgstr "Añadir filtro…"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
msgid "Remove"
@@ -735,11 +736,11 @@ msgstr "Abajo"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
msgid "Add Media Type..."
-msgstr "Añadir tipo de medio…"
+msgstr "Añadir tipo de medio"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
msgid "Add Sub Type..."
-msgstr "Añadir tipo de sub.…"
+msgstr "Añadir subtipo..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
msgid "Delete"
@@ -779,11 +780,11 @@ msgstr "Autor:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Copyright:"
-msgstr "Derechos del autor:"
+msgstr "Derechos de autor:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Rating:"
-msgstr "Clasificación:"
+msgstr "Valoración:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Location:"
@@ -795,7 +796,7 @@ msgstr "Descripción:"
msgctxt "IDD_FAVADD_CAPTION"
msgid "Add Favorite"
-msgstr "Agregar a Favoritos"
+msgstr "Añadir a Favoritos"
msgctxt "IDD_FAVADD_IDC_STATIC"
msgid "Choose a name for your shortcut:"
@@ -843,7 +844,7 @@ msgstr "Aceptar"
msgctxt "IDD_PNSPRESET_DLG_CAPTION"
msgid "Pan&Scan Presets"
-msgstr "Modos de reencuadramiento"
+msgstr "Modos de reencuadre (pan&scan)"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
msgid "New"
@@ -863,7 +864,7 @@ msgstr "Bajar"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
msgid "&Set"
-msgstr "&Fijar"
+msgstr "&Establecer"
msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
msgid "&Cancel"
@@ -879,19 +880,19 @@ msgstr "Posición: 0.0 -> 1.0"
msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
msgid "Zoom: 0.2 -> 3.0"
-msgstr "Zoom: 0.2 -> 3.0"
+msgstr "Zoom: 0.2 → 3.0"
msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
msgid "Global Media Keys"
-msgstr "Teclas multimedia globales"
+msgstr "Teclas multimedia globales (teclado, mando...)"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
msgid "Select All"
-msgstr "Seleccionar todo"
+msgstr "Seleccionar todas"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
msgid "Reset Selected"
-msgstr "Restablecer selec."
+msgstr "Restablecer seleccionadas"
msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
msgid "Warning"
@@ -899,11 +900,11 @@ msgstr "Aviso"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
-msgstr "MPC-HC no pudo renderizar algunos de los conectores del esquema. Quizá no haya instalado los códecs o los filtros necesarios en el sistema."
+msgstr "MPC-HC no pudo renderizar algunas de las etapas del diagrama de filtros, puede que no tenga instalados los codecs o filtros necesarios en el sistema."
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
msgid "The following pin(s) failed to find a connectable filter:"
-msgstr "Los conectores siguientes no encontraron un filtro conectable:"
+msgstr "La(s) siguiente(s) etapa(s) no pudieron encontrar un filtro conectable:"
msgctxt "IDD_MEDIATYPES_DLG_IDOK"
msgid "Close"
@@ -1023,15 +1024,15 @@ msgstr "Sombra"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Screen Alignment && Margins"
-msgstr "Alineación de pantalla y márgenes"
+msgstr "Alineamiento en pantalla y márgenes"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Left"
-msgstr "Izq."
+msgstr "Izquierda"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Right"
-msgstr "Der."
+msgstr "Derecha"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Top"
@@ -1043,7 +1044,7 @@ msgstr "Abajo"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
msgid "Position subtitles relative to the video frame"
-msgstr "Posición de los subtítulos relativa al tamaño del cuadro de video"
+msgstr "Situar subtítulos en relación al fotograma"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Colors && Transparency"
@@ -1071,11 +1072,11 @@ msgstr "Remarcado"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
msgid "Link alpha channels"
-msgstr "Enlazar canales alfa"
+msgstr "Canales alpha sincronizados"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
-msgstr "Si prefiere utilizar las versiones independientes de estos filtros o algun otro reemplazo, desactívelos aquí."
+msgstr "Si desea utilizar las versiones individuales de estos filtros o algún otro sustituto, desactívelos aquí."
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Source Filters"
@@ -1087,11 +1088,11 @@ msgstr "Filtros de transformación"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Internal LAV Filters settings"
-msgstr "Ajustes de los filtros LAV internos"
+msgstr "Ajustes de los LAV Filters internos"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
msgid "Splitter"
-msgstr "Divisor"
+msgstr "Demultiplexor (splitter)"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
msgid "Video decoder"
@@ -1111,27 +1112,27 @@ msgstr "Externo:"
msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
msgid "Browse..."
-msgstr "Examinar..."
+msgstr "Examinar…"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DirectShow Video"
-msgstr "Video DirectShow"
+msgstr "Vídeo DirectShow"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "RealMedia Video"
-msgstr "Video RealMedia"
+msgstr "Vídeo RealMedia"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "QuickTime Video"
-msgstr "Video QuickTime"
+msgstr "Vídeo QuickTime"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Audio Renderer"
msgstr "Renderizador de audio"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Ajustes de VMR-7/VMR-9 (sin renderizador) y EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Configuración de VMR-9 (sin renderizado) / EVR (CP) "
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1139,11 +1140,11 @@ msgstr "Superficie:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Resizer:"
-msgstr "Redimensión:"
+msgstr "Redimensionador:"
msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
msgid "Select D3D9 Render Device"
-msgstr "Seleccionar dispositivo Render D3D9"
+msgstr "Escoger dispositivo rederizador D3D9"
msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
msgid "Reinitialize when changing display"
@@ -1155,7 +1156,7 @@ msgstr "D3D a pantalla completa"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Alternative VSync"
-msgstr "VSync alternativo"
+msgstr "VSync alternativa"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
msgid "VMR-9 Mixer Mode"
@@ -1163,35 +1164,39 @@ msgstr "VMR-9 en modo mixer"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
msgid "YUV Mixing"
-msgstr "Mixer YUV"
+msgstr "YUV mixing (bajo consumo)"
msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
msgid "EVR Buffers:"
-msgstr "Búferes de EVR:"
+msgstr "Buffers (colas) de EVR:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Subtítulos *"
+msgid "Subtitles"
+msgstr "Subtítulos"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
-msgstr "Captura de pantalla"
+msgstr "C. de pant."
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Shaders"
-msgstr "Sombreadores"
+msgstr "Shaders"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Rotation"
-msgstr "Giro"
+msgstr "Rotación"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Los filtros externos (como VSFilter) pueden mostrar subtítulos en cualquier renderizador."
+msgid "Subtitle Renderer"
+msgstr "Motor renderizador de subtítulos"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Almacenar shaders compilados en caché"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1199,7 +1204,7 @@ msgstr "Escuchar el puerto:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
msgid "Launch in web browser..."
-msgstr "Abrir en navegador web..."
+msgstr "Abrir en navegador web…"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
msgid "Enable compression"
@@ -1207,7 +1212,11 @@ msgstr "Activar compresión"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
-msgstr "Permitir acceso solo desde el equipo local"
+msgstr "Permitir acceso sólo desde este equipo (localhost)"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Activar previsualización"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
@@ -1219,11 +1228,11 @@ msgstr "Servir páginas desde:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
msgid "Browse..."
-msgstr "Examinar..."
+msgstr "Examinar…"
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
msgid "Deploy..."
-msgstr "Desplegar..."
+msgstr "Desplegar…"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
msgid "Default page:"
@@ -1231,23 +1240,51 @@ msgstr "Página predeterminada:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
-msgstr "Tratantes de CGI: (.ext1=ruta1;.ext2=ruta2;...)"
+msgstr "Manejadores de CGI: (.ext1=ruta1;.ext2=ruta2;…)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Subtítulos disponibles en línea"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Descargar y abrir"
+msgid "Download subtitles"
+msgstr "Descargar subtítulos"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Remplazar los subtítulos cargados actualmente"
+msgstr "Remplazar subtítulos cargados actualmente"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Descargar"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Actualizar"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Interrumpir"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opciones"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Subir subtítulos"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Subir"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Abandonar"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opciones"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
-msgstr "Guardar como..."
+msgstr "Guardar como…"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Color controls (for VMR-9, EVR and madVR)"
@@ -1282,8 +1319,8 @@ msgid "Enable automatic update check"
msgstr "Activar búsqueda automática de actualizaciones"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Retardo entre cada comprobación:"
+msgid "Check every:"
+msgstr "Comprobar cada:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1291,7 +1328,7 @@ msgstr "días"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Settings management"
-msgstr "Gestión de configuración"
+msgstr "Gestión de la configuración"
msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
msgid "Reset"
@@ -1347,7 +1384,7 @@ msgstr "Q"
msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
msgid "Use an offset"
-msgstr "Usar un desplazamiento"
+msgstr "Usar un desfase"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Default Device"
@@ -1379,7 +1416,7 @@ msgstr "País"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Digital settings (BDA)"
-msgstr "Configuración digital (BDA)"
+msgstr "Configuración digital (BDA (drivers de TV))"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
msgid "Network Provider"
@@ -1399,11 +1436,11 @@ msgstr "Forma de conmutación de canal:"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
msgid "Rebuild filter graph"
-msgstr "Reconstruir gráfico de filtros"
+msgstr "Rehacer diagr. filtros"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
msgid "Stop filter graph"
-msgstr "Detener gráfico de filtros"
+msgstr "Detener diag. filtros"
msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
msgid "Sync video to display"
@@ -1415,7 +1452,7 @@ msgstr "Ajuste de frecuencia:"
msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
msgid "Sync display to video"
-msgstr "Sincronizar pantalla con el vídeo"
+msgstr "Sincronizar pantalla con el vídeo (requiere PowerStrip y tarjeta gráfica compatible)"
msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
msgid "Frequency adjustment:"
@@ -1431,11 +1468,11 @@ msgstr "columnas"
msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
msgid "Present at nearest VSync"
-msgstr "Presentar al vsync más cercano"
+msgstr "Presentar al valor de sincronización vertical (VSync) más próximo"
msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
msgid "Target sync offset:"
-msgstr "Desfase de sincronización:"
+msgstr "Objetivo de desfase de la sincro:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
msgid "ms"
@@ -1483,7 +1520,7 @@ msgstr "Monitor a pantalla completa"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
msgid "Use autochange fullscreen monitor mode"
-msgstr "Usar modo de cambio automático a pantalla completa"
+msgstr "Usar modo de cambio automático a pantalla completa del monitor"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
msgid "Add"
@@ -1503,7 +1540,7 @@ msgstr "Bajar"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
msgid "Apply default monitor mode on fullscreen exit"
-msgstr "Usar modo predet. del monitor al salir de pantalla completa"
+msgstr "Aplicar modo predeterminado del monitor al salir de pantalla completa"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
msgid "Restore resolution on program exit"
@@ -1511,7 +1548,7 @@ msgstr "Restaurar resolución al salir"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Delay"
-msgstr "Retraso"
+msgstr "Retardo"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
msgid "s"
@@ -1531,11 +1568,11 @@ msgstr "Preferir pistas de subtítulos forzadas/predeterminadas"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
msgid "Prefer external subtitles over embedded subtitles"
-msgstr "Preferir subtítulos externos a los incorporados"
+msgstr "Preferir subtítulos externos a los integrados"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
-msgstr "Ignorar los subtítulos incorporados"
+msgstr "Ignorar los subtítulos integrados"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
msgid "Autoload paths"
@@ -1546,16 +1583,28 @@ msgid "Reset"
msgstr "Restablecer"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Base de datos en línea"
+msgid "Online search, download and upload subtitles"
+msgstr "Búsqueda en línea, descarga y subida de subtítulos"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Buscar y descargar subtítulos automáticamente si no se encuentran localmente"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Preferir subtítulos para sordos (cuando los indique (CC) el proveedor)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignorar archivos que contengan cualquiera de estas palabras:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "URL básico de la base de datos de subtítulos:"
+msgid "Languages in order of preference:"
+msgstr "Idiomas en orden de preferencia:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Probar"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Subir subtítulos activos automáticamente al finalizar la reproducción"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1575,11 +1624,11 @@ msgstr "&Ignorar esta actualización"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr "Los sombreadores contienen efectos especiales que pueden añadirse al proceso de renderización del vídeo."
+msgstr "Los shaders ('sombreadores') contienen efectos especiales que pueden añadirse al proceso de renderización del vídeo."
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
-msgstr "Añadir archivo sombreador"
+msgstr "Añadir archivo shader"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
msgid "Remove"
@@ -1595,7 +1644,7 @@ msgstr "Añadir a posredimensión"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
-msgstr "Sombreador predefinido"
+msgstr "Preajustes de shader"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
msgid "Load"
@@ -1611,15 +1660,15 @@ msgstr "Eliminar"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active pre-resize shaders"
-msgstr "Shaders de preredimensión activos"
+msgstr "Shaders de pre-redimensionado activos"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active post-resize shaders"
-msgstr "Shaders de postredimensión activos"
+msgstr "Shaders de post-redimensionado activos"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
-msgstr "Sombreadores de depuración"
+msgstr "Depurar shaders"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
msgid "Debug Information"
@@ -1643,7 +1692,7 @@ msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr "Configuración avanzada. No la modifique a menos que sepa lo que hace."
+msgstr "Configuraciones avanzadas. No las modifique a menos que sepa lo que hace."
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
@@ -1657,6 +1706,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Original"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Dispositivo"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Modo exclusivo"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Permitir flujo de bits"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Opciones"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Activar mezcla de canales estéreo (para auriculares)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Corte:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Nivel:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Nota"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Para minimizar la distorsión del audio, se recomienda mantener el volumen del reproductor en torno al 85 % para el contenido ruidoso con compresión a pérdida."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Calidad de JPEG:"
@@ -1669,3 +1762,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "Aceptar"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Informe de fallo"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Lo sentimos, parece que MPC-HC se ha caído :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Envíe un informe del fallo para ayudarnos a diagnosticar y reparar el problema"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Información opcional"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Correo electrónico:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Su dirección de correo electrónico es opcional y solo se usará si los desarrolladores necesitan contactar con usted para recabar más información."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Descripción del problema (en inglés únicamente):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Reiniciar MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Salir de MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.es.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.es.menus.po
index bd8838c33..7191681c4 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.es.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.es.menus.po
@@ -1,17 +1,20 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
+# Adolfo Jayme-Barrientos, 2014
+# Adolfo Jayme-Barrientos, 2015-2016
+# Adolfo Jayme-Barrientos, 2014
# JellyFrog, 2013
# squallmx <squallmx@users.sourceforge.net>, 2014
+# strel, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-16 16:41+0000\n"
-"Last-Translator: Adolfo Jayme Barrientos <fito@libreoffice.org>\n"
-"Language-Team: Spanish (http://www.transifex.com/projects/p/mpc-hc/language/es/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-05-19 14:51+0000\n"
+"Last-Translator: strel\n"
+"Language-Team: Spanish (http://www.transifex.com/mpc-hc/mpc-hc/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -24,7 +27,7 @@ msgstr "&Archivo"
msgctxt "ID_FILE_OPENQUICK"
msgid "&Quick Open File..."
-msgstr "Abrir archivo &rápido…"
+msgstr "Apertura &rápida de archivo…"
msgctxt "ID_FILE_OPENMEDIA"
msgid "&Open File..."
@@ -66,29 +69,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Guardar &miniaturas…"
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Cargar &subtítulos…"
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Guardar s&ubtitulos…"
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Base de &datos de subtítulos"
+msgid "S&ubtitles"
+msgstr "Subtítulos"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Buscar…"
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Cargar subtítulos…"
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "S&ubir…"
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "G&uardar subtítulos…"
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Descargar…"
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Descargar subtítulos…"
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Subir subtítulos…"
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -104,11 +103,11 @@ msgstr "&Ver"
msgctxt "ID_VIEW_CAPTIONMENU"
msgid "Caption&&Menu"
-msgstr "Subtítulos &y menú"
+msgstr "Barra de título &y menú"
msgctxt "ID_VIEW_SEEKER"
msgid "See&k Bar"
-msgstr "Barra de na&vegación"
+msgstr "Barra de despla&zamiento"
msgctxt "ID_VIEW_CONTROLS"
msgid "&Controls"
@@ -128,7 +127,7 @@ msgstr "Est&ado"
msgctxt "ID_VIEW_SUBRESYNC"
msgid "Su&bresync"
-msgstr "Su&bresync"
+msgstr "Resincronización de su&btítulos"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
@@ -144,11 +143,11 @@ msgstr "Na&vegación"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr "&Depurar Shaders"
+msgstr "&Depurar shaders"
msgctxt "POPUP"
msgid "&Presets..."
-msgstr "&Modos de interfaz"
+msgstr "&Preajustes..."
msgctxt "ID_VIEW_PRESETS_MINIMAL"
msgid "&Minimal"
@@ -168,7 +167,7 @@ msgstr "&Pantalla completa"
msgctxt "POPUP"
msgid "&Zoom"
-msgstr "&Ampliación"
+msgstr "&Zoom"
msgctxt "ID_VIEW_ZOOM_50"
msgid "&50%"
@@ -184,27 +183,31 @@ msgstr "&200 %"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
-msgstr "&Ajuste automático"
+msgstr "&Auto ajuste"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "Ajuste autom. (si es más &grande)"
+msgstr "Auto ajustar (si es más &grande)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "Opciones del renderi&zador"
+msgstr "Ajustes del renderi&zador"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
-msgstr "Prueba de efecto &peine"
+msgstr "Prueba de efecto &rasgado (tearing)"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "&Mostrar estadísticas"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Tiempo &restante"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Mostrar &hora actual"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Mostrar nombre del archi&vo"
msgctxt "POPUP"
msgid "&Output Range"
@@ -224,27 +227,27 @@ msgstr "&Presentación"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
-msgstr "&Modo D3D a pantalla completa"
+msgstr "&Modo Direct3D (D3D) a pantalla completa"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "D3D a pantalla completa con I&GU"
+msgstr "Soporte de interfaz (GUI) Direct3D (D3D) a pantalla completa"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "Salida &RGB a 10 bits"
+msgstr "Salida &RGB de 10 bits"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
-msgstr "Forzar &entrada RGB a 10 bits"
+msgstr "Forzar &entrada RGB de 10 bits"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
-msgstr "Procesamiento en coma &flotante completo"
+msgstr "Procesado en coma &flotante completo"
msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
msgid "&Half Floating Point Processing"
-msgstr "Procesamiento en coma flotante &medio"
+msgstr "Procesado en &semi coma flotante"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
@@ -252,11 +255,11 @@ msgstr "Desactivar composición de escritorio (&Aero)"
msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time &Correction"
-msgstr "Activar &corrección de tiempo de fotograma"
+msgstr "Activar &corrección de tiempo del fotograma"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "Gestión de &colores"
+msgstr "Gestión de &color"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
@@ -284,31 +287,31 @@ msgstr "SDTV, &PAL"
msgctxt "POPUP"
msgid "Ambient &Light"
-msgstr "&Luz ambiental"
+msgstr "&Luz ambiente"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
-msgstr "&Brillante (2,2 gamma)"
+msgstr "&Brillante (Gamma 2,2)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
msgid "&Dim (2.35 Gamma)"
-msgstr "&Tenue (2,35 gamma)"
+msgstr "&Tenue (Gamma 2,35)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
-msgstr "&Oscura (2,4 gamma)"
+msgstr "&Oscura (Gamma 2,4)"
msgctxt "POPUP"
msgid "&Rendering Intent"
-msgstr "&Opciones de procesamiento"
+msgstr "&Gama (intent) de renderización"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
-msgstr "Perceptual"
+msgstr "&Perceptiva (recomendada)"
msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
msgid "&Relative Colorimetric"
-msgstr "Colorimétrico &relativo"
+msgstr "Colorimétrica &relativa (recomendada)"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
@@ -316,31 +319,31 @@ msgstr "&Saturación"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
-msgstr "Colorimétrico &absoluto"
+msgstr "Colorimétrica &absoluta"
msgctxt "POPUP"
msgid "&VSync"
-msgstr "Sincronía &vertical (VSync)"
+msgstr "Sincronización &vertical (VSync)"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "Sincronía &vertical"
+msgstr "&VSync (sincro. vídeo/pantalla)"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "VSync &precisa"
+msgstr "&Precisa (usa más CPU)"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "VSync &alternativa"
+msgstr "&Alternativa (evita D3D, sugerida)"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "&Reducir compensación VSync"
+msgstr "&Reducir desfase de la VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "A&umentar compensación VSync"
+msgstr "A&umentar desfase de la VSync"
msgctxt "POPUP"
msgid "&GPU Control"
@@ -348,11 +351,11 @@ msgstr "Control de la &GPU"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "Vaciar GPU &antes de VSync"
+msgstr "Vaciar GPU &antes de la VSync"
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
-msgstr "Vaciar GPU &tras el presente"
+msgstr "Vaciar GPU &tras presentar (Present)"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
@@ -376,7 +379,7 @@ msgstr "&Fotograma"
msgctxt "ID_VIEW_VF_HALF"
msgid "&Half Size"
-msgstr "Tamaño &medio"
+msgstr "&Mitad de tamaño"
msgctxt "ID_VIEW_VF_NORMAL"
msgid "&Normal Size"
@@ -392,31 +395,27 @@ msgstr "A&justar a la ventana"
msgctxt "ID_VIEW_VF_FROMINSIDE"
msgid "Touch Window From &Inside"
-msgstr "Tocar Ventana desde A&fuera"
+msgstr "&Tocar ventana desde dentro"
msgctxt "ID_VIEW_VF_ZOOM1"
msgid "Zoom &1"
-msgstr "Ampliación &1"
+msgstr "Zoom &1"
msgctxt "ID_VIEW_VF_ZOOM2"
msgid "Zoom &2"
-msgstr "Ampliación &2"
+msgstr "Zoom &2"
msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
-msgstr "Tocar Ventana desde Ad&entro"
-
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Mantener relación de aspecto"
+msgstr "Tocar ventana desde &fuera"
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "&Forzar relación de aspecto específica"
+msgid "&Aspect Ratio"
+msgstr "Relación de &aspecto (AR)"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Predeterminada"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Pre&determinada (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -438,13 +437,17 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Asumir píxeles cuadrados (&SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
-msgstr "&Corregir dif. monitor/escritorio de RP"
+msgstr "&Corregir diferencia de AR monitor/escritorio"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
-msgstr "Reen&cuadramiento"
+msgstr "Reen&cuadre (pan&scan)"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
@@ -524,16 +527,32 @@ msgstr "&Reproducir"
msgctxt "ID_PLAY_PLAYPAUSE"
msgid "&Play/Pause"
-msgstr "&Reproducir/pausar"
+msgstr "&Reproducir/Pausar"
msgctxt "ID_PLAY_STOP"
msgid "&Stop"
msgstr "&Detener"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "A&vanzar un fotograma"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Repetir"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "P&ermanentemente"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Archivo"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Lista de reproducción"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Reducir velocidad"
@@ -552,19 +571,19 @@ msgstr "&Filtros"
msgctxt "ID_SHADERS"
msgid "S&haders"
-msgstr "S&haders"
+msgstr "&Sombreadores"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio"
+msgid "&Audio Track"
+msgstr "Pista de &audio"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Su&btítulos"
+msgid "Su&btitle Track"
+msgstr "Pista de su&btítulos"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Flujo de &vídeo"
+msgid "Vide&o Track"
+msgstr "Pista de &vídeo"
msgctxt "POPUP"
msgid "&Volume"
@@ -586,7 +605,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "&Tras la reproducción"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "No hacer na&da"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Reproducir &siguiente archivo de la carpeta"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Apagar el &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Salir "
@@ -610,10 +641,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "&Bloquear"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Apagar el &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Navegar"
@@ -636,7 +663,7 @@ msgstr "Menú de &título"
msgctxt "ID_NAVIGATE_ROOTMENU"
msgid "&Root Menu"
-msgstr "Menú de &raíz"
+msgstr "Menú &raíz"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
@@ -672,7 +699,7 @@ msgstr "&Buscar actualizaciones"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
-msgstr "&Opciones de consola"
+msgstr "&Parámetros de consola"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.es.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.es.strings.po
index 6a62c4041..ff7f7464c 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.es.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.es.strings.po
@@ -1,23 +1,25 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
-# Ernesto Avilés Vzqz <whippiii@gmail.com>, 2013
-# fdelacruz <freddy@delacruz.cl>, 2014
+# Adolfo Jayme Barrientos, 2014-2015
+# Adolfo Jayme Barrientos, 2015-2016
+# Adolfo Jayme Barrientos, 2014
+# Ernesto Avilés Vázquez <whippiii@gmail.com>, 2013
+# Adolfo Jayme Barrientos, 2016
+# fdelacruz <inactive+fdelacruz@transifex.com>, 2014
# Johan Ramirez <idonthumanbeing@gmail.com>, 2014
# Johan Ramirez <idonthumanbeing@gmail.com>, 2014
# Alpha120 <juanhc120@gmail.com>, 2014
# squallmx <squallmx@users.sourceforge.net>, 2014
-# strel, 2014
+# strel, 2014-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-01 18:03+0000\n"
-"Last-Translator: Adolfo Jayme Barrientos <fito@libreoffice.org>\n"
-"Language-Team: Spanish (http://www.transifex.com/projects/p/mpc-hc/language/es/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Spanish (http://www.transifex.com/mpc-hc/mpc-hc/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -46,7 +48,7 @@ msgstr "Capítulo"
msgctxt "IDS_CONTROLS_COMPLETING"
msgid "Completing..."
-msgstr "Completando..."
+msgstr "Completando…"
msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
msgid "Play Video"
@@ -68,17 +70,25 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Propiedades"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Archivo"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Estilo pre&determinado"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Lista de reproducción"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Archivos"
msgctxt "IDS_FAVDVDS"
msgid "DVDs"
-msgstr "DVD"
+msgstr "DVDs"
msgctxt "IDS_INFOBAR_CHANNEL"
msgid "Channel"
@@ -106,7 +116,7 @@ msgstr "Tasa de bits"
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
-msgstr "(prom./act.)"
+msgstr "(promedio/actual)"
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
@@ -114,7 +124,7 @@ msgstr "Señal"
msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
msgid "Strength: %d dB, Quality: %ld%%"
-msgstr "Potencia: %d dB, calidad: %ld %%"
+msgstr "Potencia: %d dB, Calidad: %ld %%"
msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
msgid "Styles"
@@ -122,47 +132,67 @@ msgstr "Estilos"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "Si se deja sin definir el objetivo de representación, los subtítulos SSA/ASS se mostrarán en relación al fotograma de vídeo y el resto se mostrará en relación a la ventana."
+msgstr "Si no se define el objetivo de renderizado, los subtítulos en formato SSA/ASS se representarán en relación al fotograma mientras el resto de subtítulos de texto se representarán en relación a la ventana."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Modo de repetición: Lista de reproducción"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Modo de repetición: Archivo"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Repetir continuamente: Activado"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Repetir continuamente: Desactivado"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Repetir continuamente"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
-msgstr "Nunca (método más rápido)"
+msgstr "Nunca (opción más rápida)"
msgctxt "IDS_PPAGE_CAPTURE_FG1"
msgid "Only when switching different video types (default)"
-msgstr "Solo cuando se cambia entre vídeos de diferentes tipos (predeterminado)"
+msgstr "Sólo al cambiar entre distintos tipos de vídeo (por defecto)"
msgctxt "IDS_PPAGE_CAPTURE_FG2"
msgid "Always (slowest option)"
-msgstr "Siempre (la opción más lenta)"
+msgstr "Siempre (opción más lenta)"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
msgid "Not supported by some devices. Two video decoders always present in the filter graph."
-msgstr "Algunos dispositivos no lo admiten. Dos decodificadores de vídeo siempre presentes en el gráfico de filtros."
+msgstr "Algunos dispositivos no lo admiten. Dos decodificadores de vídeo siempre presentes en el diagrama de filtros."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr "Rápido excepto cuando se cambia entre diferentes flujos de vídeo. Solo un codificador de vídeo presente en el grafo de filtros."
+msgstr "Rápido excepto al cambiar entre distintos flujos de vídeo. Sólo hay un decodificador de vídeo en el diagrama de filtros."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
-msgstr "No recomendado. Solo para propósitos de prueba."
+msgstr "No recomendado. Sólo para propósitos de prueba."
msgctxt "IDS_PPAGE_CAPTURE_SFG0"
msgid "Never if possible (fastest, but not supported by most filters)"
-msgstr "Nunca si es posible (más rápido, pero no admitido por la mayoría de los filtros)"
+msgstr "Nunca si es posible (más rápido, pero no soportado por la mayoría de filtros)"
msgctxt "IDS_PPAGE_CAPTURE_SFG1"
msgid "Only when switching different video types (default)"
-msgstr "Solo al cambiar entre diferentes tipos de vídeos (predeterminado)"
+msgstr "Sólo al cambiar entre distintos tipos de vídeo (por defecto)"
msgctxt "IDS_PPAGE_CAPTURE_SFG2"
msgid "Always (may be required by some devices)"
-msgstr "Siempre (puede ser requerido por algunos dispositivos)"
+msgstr "Siempre (puede que sea requerido por algunos dispositivos)"
msgctxt "IDS_INFOBAR_PARENTAL_RATING"
msgid "Parental rating"
-msgstr "Clasificación parental"
+msgstr "Calificación parental"
msgctxt "IDS_PARENTAL_RATING"
msgid "%d+"
@@ -170,7 +200,7 @@ msgstr "%d+"
msgctxt "IDS_NO_PARENTAL_RATING"
msgid "Not rated"
-msgstr "Sin clasificar"
+msgstr "No calificado"
msgctxt "IDS_INFOBAR_CONTENT"
msgid "Content"
@@ -198,7 +228,7 @@ msgstr "DVD añadido a favoritos"
msgctxt "IDS_CAPTURE_SETTINGS"
msgid "Capture Settings"
-msgstr "Configuraciones de captura"
+msgstr "Ajustes de captura"
msgctxt "IDS_NAVIGATION_BAR"
msgid "Navigation Bar"
@@ -206,7 +236,7 @@ msgstr "Barra de navegación"
msgctxt "IDS_SUBRESYNC_CAPTION"
msgid "Subresync"
-msgstr "Subresync"
+msgstr "Resincronización de subtítulos"
msgctxt "IDS_SUBRESYNC_CLN_TIME"
msgid "Time"
@@ -246,11 +276,11 @@ msgstr "Tipo de letra"
msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
msgid "Failed to render some of the pins of the DVD Navigator filter"
-msgstr "Fallo al renderizar algunos pines del filtro Navegador de DVD"
+msgstr "No se pudieron renderizar algunas de las etapas de filtro «DVD Navigator»"
msgctxt "IDS_DVD_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for DVD playback"
-msgstr "Fallo al consultar las interfaces requeridas para la reproducción de DVD"
+msgstr "No se pudieron consultar las interfaces requeridas para la reproducción de DVD"
msgctxt "IDS_CAPTURE_LIVE"
msgid "Live"
@@ -258,11 +288,11 @@ msgstr "En vivo"
msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
msgid "Can't add video capture filter to the graph"
-msgstr "No se puede añadir el filtro de captura de vídeo al gráfico"
+msgstr "No se puede añadir el filtro de captura de vídeo al diagrama de filtros"
msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
msgid "Can't add audio capture filter to the graph"
-msgstr "No se puede añadir el filtro de captura de audio al gráfico"
+msgstr "No se puede añadir el filtro de captura de audio al diagrama de filtros"
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
@@ -270,19 +300,19 @@ msgstr "No se pudo abrir el dispositivo de captura."
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
-msgstr "No se puede abrir, parámetros de entrada inválidos"
+msgstr "No se puede abrir, parámetros de entrada no válidos"
msgctxt "IDS_EDIT_LIST_EDITOR"
msgid "Edit List Editor"
-msgstr "Editar editor de listas"
+msgstr "Editor de listas de edición (EDLs)"
msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
msgid "The entered time is greater than the file duration."
-msgstr "El tiempo insertado es mayor que la duración del archivo."
+msgstr "El tiempo introducido es mayor que la duración del archivo."
msgctxt "IDS_MISSING_ICONS_LIB"
msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
-msgstr "No se encuentra la biblioteca de iconos «mpciconlib.dll».\nSe usará el icono predeterminado del reproductor en las asociaciones de archivos.\nReinstale MPC-HC para obtener «mpciconlib.dll»."
+msgstr "No se encuentra la librería de iconos «mpciconlib.dll».\nSe usará el icono predeterminado del reproductor para las asociaciones de archivos.\nReinstale MPC-HC para obtener «mpciconlib.dll»."
msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
msgid "File"
@@ -306,7 +336,7 @@ msgstr "Título(s)"
msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
msgid "CharSet"
-msgstr "Conjunto de caracteres"
+msgstr "Juego de caracteres"
msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
msgid "Unicode"
@@ -330,23 +360,23 @@ msgstr "Lista de reproducción"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
-msgstr "Activado/desactivado"
+msgstr "Activado/Desactivado"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "De fps"
+msgid "From (FPS)"
+msgstr "De (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "A fps"
+msgid "To (FPS)"
+msgstr "A (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
-msgstr "Modo de visualización (Hz)"
+msgstr "Modo de pantalla (Hz)"
msgctxt "IDS_PPAGE_FS_DEFAULT"
msgid "Default"
-msgstr "Original"
+msgstr "Predeterminado"
msgctxt "IDS_PPAGE_FS_OTHER"
msgid "Other"
@@ -354,19 +384,19 @@ msgstr "Otros"
msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
msgid "System Default"
-msgstr "Predefinido del sistema"
+msgstr "Predeterminado del sistema"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
-msgstr "Fallo al consultar las interfaces requeridas para la reproducción"
+msgstr "No se pudieron consultar las interfaces requeridas para la reproducción"
msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
msgid "Could not set target window for graph notification"
-msgstr "No se puede establecer la ventana destino para la notificación gráfica"
+msgstr "No se pudo establecer la ventana destino para las notificaciones del diagrama de filtros"
msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
msgid "Failed to render all pins of the DVD Navigator filter"
-msgstr "Fallo al renderizar todos los pines del filtro Navegador de DVD"
+msgstr "No se pudieron renderizar todas las etapas de filtro «DVD Navigator»"
msgctxt "IDS_PLAYLIST_OPEN"
msgid "&Open"
@@ -378,7 +408,7 @@ msgstr "A&ñadir"
msgctxt "IDS_PLAYLIST_REMOVE"
msgid "&Remove"
-msgstr "&Quitar"
+msgstr "&Eliminar"
msgctxt "IDS_PLAYLIST_CLEAR"
msgid "C&lear"
@@ -402,7 +432,7 @@ msgstr "Ordenar por &ruta"
msgctxt "IDS_PLAYLIST_RANDOMIZE"
msgid "R&andomize"
-msgstr "&Aleatorio"
+msgstr "Orden &aleatorio"
msgctxt "IDS_PLAYLIST_RESTORE"
msgid "R&estore"
@@ -426,15 +456,15 @@ msgstr "&Restablecer"
msgctxt "IDS_MPLAYERC_104"
msgid "Subtitle Delay -"
-msgstr "Retraso de Subs -"
+msgstr "Reducir retardo de subtítulos"
msgctxt "IDS_MPLAYERC_105"
msgid "Subtitle Delay +"
-msgstr "Retraso de Subs +"
+msgstr "Aumentar retardo de subtítulos"
msgctxt "IDS_FILE_SAVE_THUMBNAILS"
msgid "Save thumbnails"
-msgstr "Guardar vistas previas"
+msgstr "Guardar miniaturas"
msgctxt "IDD_PPAGEPLAYBACK"
msgid "Playback"
@@ -470,7 +500,35 @@ msgstr "Filtros externos"
msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
-msgstr "Reproducción::Sombras"
+msgstr "Reproducción::Shaders"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Recursos"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Varios"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Reproducción::Captura"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Reproducción::Renderizador Sync"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Reproducción::Pantalla completa"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Filtros internos::Renderizador de audio"
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
@@ -478,47 +536,39 @@ msgstr "Conmutador de audio"
msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
msgid "New version of the icon library"
-msgstr "Nueva versión de la biblioteca de iconos"
+msgstr "Nueva versión de la librería de iconos"
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
-msgstr "¿Quiere reasociar los iconos?"
+msgstr "¿Quiere volver a asociar los iconos?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
-msgstr "Esto reparará los iconos que muestran incorrectamente después de una actualización de la biblioteca de icono.\nLas asociaciones de archivo no serán modificadas, solo los iconos correspondientes serán actualizados."
+msgstr "Esto repara los iconos que se muestran incorrectamente después de una actualización de la librería de de iconos.\nLas asociaciones de archivo no se modificarán, sólo se actualizarán los iconos correspondientes."
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
-msgstr "Renderizador viejo de vídeo"
+msgstr "(old) Video Renderer"
msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
-msgstr "Overlay Mixer Renderer"
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (modo ventana)"
+msgstr "Renderizador Overlay Mixer"
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
-msgstr "Video Mixing Renderer 9 (modo ventana)"
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (sin renderizador)"
+msgstr "Video Mixing Renderer 9 (windowed) [VMR-9 (modo ventana)]"
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
-msgstr "Video Mixing Renderer 9 (sin renderización)"
+msgstr "Video Mixing Renderer 9 (renderless) [VMR-9 (sin renderizado)]"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
-msgstr "Renderizador de vídeo mejorado"
+msgstr "Enhanced Video Renderer [EVR]"
msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
msgid "Enhanced Video Renderer (custom presenter)"
-msgstr "Renderizador de vídeo mejorado (presentador personalizado)"
+msgstr "Enhanced Video Renderer (presentador personalizado) [EVR (CP)]"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
@@ -526,11 +576,11 @@ msgstr "Renderizador de vídeo Haali"
msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
msgid "Null (anything)"
-msgstr "Nulo (cualquier cosa)"
+msgstr "Null (cualquier entrada)"
msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr "Nulo (sin compresión)"
+msgstr "Null (entrada no comprimida)"
msgctxt "IDS_PPAGE_OUTPUT_MADVR"
msgid "madVR"
@@ -560,34 +610,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Reproductor::Interfaz web"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Subtítulos::Base de datos"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Recursos"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Misceláneos"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Reproducción::Captura"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Reproducción::Config. de Sync Renderer"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Reproducción::Pantalla completa"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Detalles"
@@ -598,107 +620,79 @@ msgstr "Clip"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
-msgstr "Filtro renderizador predeterminado para DirectShow. Otros lo utilizaran cuando no puedan cargarse adecuadamente por cualquier razón. En Windows XP es lo mismo que VMR-7 (ventana)."
+msgstr "Filtro renderizador de vídeo predeterminado para DirectShow. Otros filtros recurrirán a este cuando no puedan cargarse adecuadamente por cualquier motivo. En Windows XP es el propio VMR-7 (modo ventana)."
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "Este es el renderizador predeterminado para Windows 9x/Me/2K. Dependiendo de la visibilidad de la ventana de video y de las capacidades de tu tarjeta gráfica, escogerá dinámicamente entre los renderizadores GDI, DirectDraw, y Overlay."
+msgstr "El antiguo Renderizador de Vídeo es el filtro renderizador predeterminado de Windows 9x/ME/2K. Dependiendo de la visibilidad de la ventana de vídeo y de las capacidades de su tarjeta gráfica, alternará dinámicamente entre los modos de renderizado GDI (interfaz [básica] del dispositivo gráfico), DirectDraw (una interfaz intensiva del entorno DirectX), y Overlay (hardware de renderizado directo)."
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "Siempre renderiza en Overlay. Generalmente solo se permiten los formatos YUV, pero se presentan directamente sin ninguna conversión de color a RGB. Este es el modo de renderizado más rápido y el único donde puedes estar seguro sobre el espejo a pantalla completa cuando activas la salida de TV."
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "El renderizado predeterminado de XP. Muy estable y solo un poco mas lento que el mezclador Overlay. Usa DirectDraw y usa el Overlay cuando puede."
+msgstr "El filtro Overlay Mixer siempre renderiza en modo Overlay (hardware de renderizado directo). Generalmente sólo permite formatos de vídeo con codificación de color YUV, que se representan directamente sin ninguna conversión (bajo consumo) del color a RGB. Este es el modo de renderización más rápido de todos, y el único con el que puede estar seguro acerca de la activación de la replicación del vídeo en pantalla completa hacia la salida de TV."
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Solo disponible si tienes instalado DirectX 9. Tiene las mismas habilidades que VMR-7 (ventana), pero nunca usara el renderizado Overlay y por tal razón podría ser un poco mas lento que VMR-7 (ventana)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Lo mismo que VMR-7 (ventana), pero con el plugin \"Allocator-Presenter\" de MPC-HC para el subtitulado. El espejo de Overlay NO funcionara. Se recomienda la profundidad de color del escritorio \"Color Verdadero\"."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "El Renderizador Mezclador de Vídeo 9 sólo está disponible si tiene el entorno DirectX 9 instalado. Es muy estable, pero nunca usará renderizado Overlay (hardware de renderizado directo) y a causa de esto puede ser un poco más lento que que el filtro renderizador Overlay Mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
-msgstr "Lo mismo que VMR-9 (ventana), pero con el plugin \"Allocator-Presenter\" de MPC-HC para el subtitulado. El espejo de Overlay TALVEZ funcionara. Se recomienda la profundidad de color del escritorio \"Color Verdadero\"."
+msgstr "Lo mismo que el renderizador VMR-9 (modo ventana), pero con el componente Allocator-Presenter (asignador-presentador) de MPC-HC para el subtitulado. La replicación de vídeo en modo Overlay (hardware de renderizado directo) QUIZÁ funcione. Se recomienda la profundidad de color de escritorio «Color verdadero». Está indicado para Windows XP."
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
-msgstr "Igual que VMR-9 (sin renderizador), pero usa un redimensionador bicúbico de dos pasadas real. "
+msgstr "Lo mismo que el renderizador VMR-9 (sin renderizado), pero usa un redimensionador bicúbico en dos pasadas reales. "
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Conecta a cualquier tipo de medio de video y manda las muestras a ningún lado. Utilízalo cuando no necesitas ver el video, y quieres evitar el uso de cpu innecesario."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Renderizador nulo. Conecta con cualquier tipo de medio estilo-vídeo y envía el muestreo entrante a anulación. Úselo si no necesita mostrar el vídeo y quiere evitar el consumo innecesario de CPU."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
-msgstr "Igual que el renderizador Nulo normal, pero este solo conectara a tipos sin compresión."
+msgstr "Renderizador nulo igual que el normal, pero este sólo conectara con medios de tipos sin compresión."
msgctxt "IDC_DSEVR"
msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
-msgstr "Solo disponible en Vista o superior o en XP con al menos el Marco de trabajo .Net 3.5 instalado."
+msgstr "Solo disponible en Vista o superior, o en XP con .NET Framework 3.5 o superior instalado."
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr "Lo mismo que EVR, pero con el complemento «Allocator-Presenter» de MPC-HC para el subtitulado y el posprocesamiento. Recomendado para Windows Vista en adelante."
+msgstr "Lo mismo que el renderizador EVR, pero con el componente Allocator-Presenter (asignador-presentador) de MPC-HC para el subtitulado y postprocesado. Está indicado para Windows Vista o superior."
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
-msgstr "Representador de alta calidad, requiere una GPU que admita D3D9 o superior."
+msgstr "Renderizador de alta calidad, requiere una GPU que soporte D3D9 (interfaz Direct3D del entorno DirectX 9) o superior."
msgctxt "IDC_DSSYNC"
msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
-msgstr "Lo ismo que EVR (CP), pero ofrece bastantes opciones para sincronizar la tasa de marcos del vídeo con la tasa de actualización de visualización para eliminar marcos de vídeo saltados o duplicados."
+msgstr "El renderizador de sincronización es lo mismo que el renderizador EVR (CP), pero ofrece bastantes opciones para sincronizar la tasa de fotogramas con la frecuencia de refresco de pantalla para eliminar fotogramas omitidos o duplicados."
msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
-msgstr "El propio renderizador de Real. Los scripts SMIL funcionaran, pero la interacción probablemente no. Usa DirectDraw y corre en Overlay cuando puede."
-
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "La salida del mecanismo de Real será renderizado por el \"Allocator-Presenter\" basado en DX7 de VMR-7 (sin render)."
+msgstr "El renderizador propio de Real. Los scripts SMIL funcionaran, pero la interactividad probablemente no. Usa la interfaz de renderizado DirectDraw (versiones antiguas de DirectX), y cuando puede el modo Overlay (hardware de renderizado directo)."
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "La salida del mecanismo de Real será renderizado por el \"Allocator-Presenter\" basado en DX9 de VMR-9 (sin render)."
+msgstr "La salida del motor de Real se expresará por el componente Allocator-Presenter (asignador-presentador) del renderizador VMR-9 (sin renderizado) del entorno DX9 (DirectX 9)."
msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
-msgstr "El renderizador propio de QuickTime. Se vuelve un poco lento cuando su área de video es redimensionada o parcialmente cubierta por otra ventana. Cuando el overlay no esta disponible le gusta regresarse a GDI."
-
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "La salida del mecanismo de QuickTime será renderizado por el \"Allocator-Presenter\" basado en DX7 de VMR-7 (sin render)."
+msgstr "El renderizador propio de QuickTime. Se vuelve un poco lento cuando su área de vídeo es redimensionada o es parcialmente cubierta por otra ventana. Cuando el modo Overlay (hardware de renderizado directo) no está disponible le gusta recurrir al modo GDI (interfaz [básica] del dispositivo gráfico)."
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "La salida del mecanismo de QuickTime será renderizado por el \"Allocator-Presenter\" basado en DX9 de VMR-9 (sin render)."
+msgstr "La salida del motor de QuickTime será representada por el componente Allocator-Presenter (asignador-presentador) del renderizador VMR-9 (sin renderizado) del entorno DirectX 9 (DX9)."
msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
-msgstr "La superficie de video será distribuida como una superficie regular fuera de pantalla."
-
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "El renderizador de audio MPC está dañado. Evite su uso."
+msgstr "La superficie de vídeo será asignada como una superficie regular fuera de pantalla."
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
-msgstr "Renderizador de sincronización"
-
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC: informe de error"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC acaba de fallar pero esta versión fue compilada sin información de trazas.\nSi deseas reportar el fallo, deberías primero probar con una compilación oficial.\n\n¿Deseas visitar la página de descargas ahora?"
+msgstr "Renderizador Sync"
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
-msgstr "Superficie fuera de pantallas convencionales"
+msgstr "Superficie simple normal fuera de pantalla"
msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
msgid "2D surfaces"
@@ -706,7 +700,7 @@ msgstr "Superficies 2D"
msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
msgid "3D surfaces (recommended)"
-msgstr "Superficies 3D (recomendado)"
+msgstr "Superficies 3D (aconsejado)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
@@ -718,19 +712,19 @@ msgstr "Bilineal"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
msgid "Bilinear (PS 2.0)"
-msgstr "Bilineal (PS 2.0)"
+msgstr "Bilineal (Pixel Shader 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
msgid "Bicubic A=-0.60 (PS 2.0)"
-msgstr "Bicúbica A=-0.60 (PS 2.0)"
+msgstr "Bicúbico A=-0.60 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
msgid "Bicubic A=-0.75 (PS 2.0)"
-msgstr "Bicúbica A=-0.75 (PS 2.0)"
+msgstr "Bicúbico A=-0.75 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
msgid "Bicubic A=-1.00 (PS 2.0)"
-msgstr "Bicúbica A=-1.00 (PS 2.0)"
+msgstr "Bicúbico A=-1.00 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
msgid "**unavailable**"
@@ -742,15 +736,15 @@ msgstr "El renderizador seleccionado no está instalado."
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
-msgstr "Nulo (cualquier cosa)"
+msgstr "Renderizador nulo (cualquier entrada)"
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr "Nulo (sin compresión)"
+msgstr "Renderizador nulo (entrada no comprimida)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Renderizador de audio MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Renderizador interno de audio"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -762,111 +756,127 @@ msgstr "Tipo MIME"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr "Active la interfaz web para ver recursos incorporados en el navegador.\n\nSi solo quiere guardar la información, utilice el botón «Guardar como»."
+msgstr "Para ver recursos incrustados de su navegador tiene que habilitar la interfaz web.\n\nSi sólo quiere guardar la información, utilice el botón «Guardar como»."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Descargar subtítulos"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Descargar subtítulos…"
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Subir subtítulos…"
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
-msgstr "Retraso (ms)"
+msgstr "Retardo (ms):"
msgctxt "IDS_SPEEDSTEP_AUTO"
msgid "Auto"
-msgstr "Automático"
+msgstr "Auto"
msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
msgid "There are no customized keys to export."
-msgstr "No hay teclas personalizadas para exportar."
+msgstr "No hay teclas personalizadas que exportar."
msgctxt "IDS_RFS_NO_FILES"
msgid "No media files found in the archive"
-msgstr "No se encontraron archivos de multimedia en el comprimido"
+msgstr "No se encontraron ficheros audiovisuales en el archivo"
msgctxt "IDS_RFS_COMPRESSED"
msgid "Compressed files are not supported"
-msgstr "No se admiten los archivos comprimidos"
+msgstr "Los archivos comprimidos no están soportados"
msgctxt "IDS_RFS_ENCRYPTED"
msgid "Encrypted files are not supported"
-msgstr "No se admiten los archivos cifrados"
+msgstr "Los archivos cifrados no están soportados"
msgctxt "IDS_RFS_MISSING_VOLS"
msgid "Couldn't find all archive volumes"
-msgstr "No se pudieron encontrar todos los pedazos del comprimido"
+msgstr "No se encontraron todas las partes del archivo"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "La superficie de video será distribuida como una textura pero aun así las funciones 2D serán usadas para copiar y alargar en el backbuffer. Requiere una tarjeta de video que pueda alocar RGBA de 32 bits, por lo menos a la resolución del video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "La superficie de vídeo se asignará como una textura pero todavía se usarán las funciones 2D para copiarla y ajustarla dentro del backbuffer (buffer no visible). Requiere una tarjeta gráfica que pueda asignar profundidades de color de 32 bits, patrón de color RGBA, texturas con dimensiones que no sean potencias de 2, y que pueda hacerlo al menos en la resolución del vídeo."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
-msgstr "La superficie del video será distribuida como una textura y dibujada como dos triángulos en 3D. Si el antialiasing esta activado en la configuración de la tarjeta grafica podría reducir la velocidad de renderización."
+msgstr "La superficie de vídeo se asignará como una textura y se dibujará como una malla de pares de triángulos en 3D. Si el suavizado (antialiasing) está activado en la configuración de pantalla, esto podría reducir la velocidad de renderización."
msgctxt "IDC_DX9RESIZER_COMBO"
msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
-msgstr "Si no se admite Pixel Shader 2.0, se usará automáticamente el redimensionamiento bilinear sencillo."
+msgstr "Si no hay soporte para Pixel Shader 2.0 (PS 2.0), se usará automáticamente el redimensionamiento bilineal simple."
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
-msgstr "Pone a VMR-9 (sin render) en el modo del mezclador, esto significa que la mayoría de los controles de la página de propiedades funcionaran y usara un proceso de trabajo separado para renderizar cuadros."
+msgstr "Pone el renderizador VMR-9 (sin renderizado) en modo mezclador, esto significa que la mayoría de los controles de su página de propiedades funcionarán y usará un subproceso de trabajo aparte para renderizar fotogramas."
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
-msgstr "Mejora el rendimiento a costa de cierta compatibilidad del renderizador."
+msgstr "Mejora el rendimiento a cambio de cierta compatibilidad del renderizador."
msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
msgid "Reduces tearing but prevents the toolbar from being shown."
-msgstr "Reduce el desgarre pero evita que se muestre la barra de herramientas."
+msgstr "Reduce el efecto desgarro (tearing) pero evita que se muestre la barra de herramientas."
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
-msgstr "Reduce el parpadeo al ignorar el VSync predeterminado dentro de D3D."
+msgstr "Reduce el efecto desgarro (tearing) al evitar la sincronización vertical (VSync~acompasado de frecuencia de vídeo y pantalla) predeterminada integrada en D3D (Direct3D)."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Sintonización"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "No se cargaron los subtítulos o el renderizador no es compatible."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Almacena los shaders ('sombreadores') compilados en el directorio AppData local para acelerar el tiempo de carga."
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
-msgstr "Abre VTS_xx_0.ifo para cargar todos los archivos VTS_xx_x.vob de golpe"
+msgstr "Abrir VTS_xx_0.ifo para cargar todos los archivos VTS_xx_x.vob de una vez"
msgctxt "IDS_SRC_RFS"
msgid "Based on RARFileSource, doesn't support compressed files"
-msgstr "Basado en RARFileSource, no admite archivos comprimidos"
+msgstr "Basado en RARFileSource, no soporta archivos comprimidos"
msgctxt "IDS_INTERNAL_LAVF"
msgid "Uses LAV Filters"
-msgstr "Usa filtros LAV"
+msgstr "Usa LAV Filters"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr "Usa filtros LAV. Inhabilitado predeterminadamente desde que los filtros de Microsoft suelen ser más estables para esos tipos de formatos.\nSi eliges usar los filtros internos, habilítalos para origen y decodificación para tener una mejor experiencia de reproducción."
+msgstr "Usa LAV Filters. Deshabilitado por defecto ya que los filtros de Microsoft suelen ser más estables para esos formatos.\nSi elige usar los filtros internos, habilítelos tanto para la fuente como para la decodificación para tener una mejor experiencia de reproducción."
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
-msgstr "Conmutar barra de navegación"
+msgstr "Accionar barra de navegación"
msgctxt "IDS_AG_VSYNCACCURATE"
msgid "Accurate VSync"
-msgstr "VSync Precisa"
+msgstr "Sincronización vertical (VSync) precisa"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr "Si se deja sin definir el objetivo de representación, se heredará a partir del estilo predeterminado."
+msgstr "Si no se define el objeto de la renderización, se heredará a partir del estilo predeterminado."
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
-msgstr "Desactiva la animación de subtítulos. Esta opción reduce el uso de la CPU. Actívela si los subtítulos parpadean."
+msgstr "Deshabilita la animación de subtítulos. Esta opción reduce el uso de CPU. Úsela si los subtítulos centellean."
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr "Al incrementar la cantidad de subimágenes en búfer se mejorará el rendimiento de representación, pero aumentará el uso de la RAM de vídeo de la GPU."
+msgstr "Aumentar el número de subtítulos pre-renderizados en cola debería mejorar en general el rendimiento de la renderización a cambio de un mayor uso de la RAM de vídeo en la GPU."
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
-msgstr "Después de dar clic en este botón, el estado de comprobación del formato del grupo reflejara las asociaciones de archivo actuales para MPC-HC. Una extensión recién agregada usualmente aparecerá en gris, ¡así que no olvides marcarla de nuevo antes de cerrar este cuadro de dialogo!"
+msgstr "Tras pulsar este botón, el estado marcado del grupo del formato hará que se refleje la asociación del archivo actual con MPC-HC. Una extensión recién añadida aparecerá sombreada, ¡así que no olvide marcarla de nuevo antes de cerrar este cuadro de diálogo!"
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr "Al desactivar esta opción se evitará el parpadeo de los subtítulos, pero es posible que el representador de vídeo se salte algunos fotogramas del vídeo."
+msgstr "Deshabilitar esta opción prevendrá que los subtítulos centelleen, pero puede ocasionar que el renderizador de vídeo omita algunos fotogramas."
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -874,7 +884,7 @@ msgstr "Reproducir\nReproducir"
msgctxt "ID_PLAY_PAUSE"
msgid "Pause\nPause"
-msgstr "Pausa\nPausa"
+msgstr "Pausar\nPausar"
msgctxt "ID_PLAY_STOP"
msgid "Stop\nStop"
@@ -886,17 +896,17 @@ msgstr "Paso\nPaso"
msgctxt "ID_PLAY_DECRATE"
msgid "Decrease speed\nDecrease speed"
-msgstr "Reducir la velocidad\nReducir la velocidad"
+msgstr "Reducir velocidad\nReducir velocidad"
msgctxt "ID_PLAY_INCRATE"
msgid "Increase speed\nIncrease speed"
-msgstr "Aumentar la velocidad\nAumentar la velocidad"
+msgstr "Aumentar velocidad\nAumentar velocidad"
msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Silenciar"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Activar sonido"
@@ -946,11 +956,11 @@ msgstr "Opciones"
msgctxt "IDS_SHADERS_SELECT"
msgid "&Select Shaders..."
-msgstr "Elegir &sombreadores..."
+msgstr "&Seleccionar shaders..."
msgctxt "IDS_SHADERS_DEBUG"
msgid "&Debug Shaders..."
-msgstr "&Depurar sombras..."
+msgstr "&Depurar shaders..."
msgctxt "IDS_FAVORITES_ADD"
msgid "&Add to Favorites..."
@@ -961,11 +971,11 @@ msgid "&Organize Favorites..."
msgstr "&Organizar Favoritos..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Aleatorio"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Abrir ubicación del archivo"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -974,7 +984,7 @@ msgstr "Cerrando..."
msgctxt "IDS_CONTROLS_PLAYING"
msgid "Playing"
-msgstr "Reproduciendo"
+msgstr "En reproducción"
msgctxt "IDS_CONTROLS_PAUSED"
msgid "Paused"
@@ -982,35 +992,35 @@ msgstr "En pausa"
msgctxt "IDS_AG_EDL_NEW_CLIP"
msgid "EDL new clip"
-msgstr "EDL Nuevo Clip"
+msgstr "Nuevo clip de lista de edición (EDL)"
msgctxt "IDS_RECENT_FILES_CLEAR"
msgid "&Clear list"
-msgstr "&Vaciar la lista"
+msgstr "&Vaciar lista"
msgctxt "IDS_RECENT_FILES_QUESTION"
msgid "Are you sure that you want to delete recent files list?"
-msgstr "¿Está seguro de que quiere vaciar la lista de archivos recientes?"
+msgstr "¿Confirma que quiere vaciar la lista de archivos recientes?"
msgctxt "IDS_AG_EDL_SAVE"
msgid "EDL save"
-msgstr "Guardado de EDL"
+msgstr "Guardar lista de edición (EDL)"
msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time Correction"
-msgstr "Activar corrección de tiempos de fotogramas"
+msgstr "Activar corrección de tiempo de fotogramas"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
-msgstr "Conmutar ventana EDL"
+msgstr "Accionar ventana de lista de edición (EDL)"
msgctxt "IDS_AG_EDL_IN"
msgid "EDL set In"
-msgstr "EDL Fijada En Entrada"
+msgstr "Fijar inicio de la edición (omisión) de lista de edición (EDL)"
msgctxt "IDS_AG_EDL_OUT"
msgid "EDL set Out"
-msgstr "EDL Fijada En Salida"
+msgstr "Fijar final de la edición (omisión) de lista de edición (EDL)"
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
@@ -1034,7 +1044,7 @@ msgstr "Rotar PnS Z-"
msgctxt "IDS_AG_TEARING_TEST"
msgid "Tearing Test"
-msgstr "Prueba de Parpadeo"
+msgstr "Prueba de efecto rasgado (tearing)"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
@@ -1042,14 +1052,14 @@ msgstr "Escalar a 16:9 TV,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_WIDESCREEN"
msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Zoom a Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Escalar a pantalla panorámica,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_ULTRAWIDE"
msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Zoom a Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Escalar a pantalla ultrapanorámica,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Ocultar en pantalla completa"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1058,7 +1068,7 @@ msgstr "Detenido"
msgctxt "IDS_CONTROLS_BUFFERING"
msgid "Buffering... (%d%%)"
-msgstr "Almacenando en búfer… (%d %%)"
+msgstr "Almacenando en buffer (cola)… (%d %%)"
msgctxt "IDS_CONTROLS_CAPTURING"
msgid "Capturing..."
@@ -1094,7 +1104,7 @@ msgstr "Editar..."
msgctxt "IDS_INFOBAR_TITLE"
msgid "Title"
-msgstr "Titulo"
+msgstr "Título"
msgctxt "IDS_INFOBAR_AUTHOR"
msgid "Author"
@@ -1102,7 +1112,7 @@ msgstr "Autor"
msgctxt "IDS_INFOBAR_COPYRIGHT"
msgid "Copyright"
-msgstr "Derechos de autor"
+msgstr "Copyright"
msgctxt "IDS_INFOBAR_RATING"
msgid "Rating"
@@ -1126,7 +1136,7 @@ msgstr "Ninguno"
msgctxt "IDS_AG_COMMAND"
msgid "Command"
-msgstr "Orden"
+msgstr "Comando"
msgctxt "IDS_AG_KEY"
msgid "Key"
@@ -1142,11 +1152,11 @@ msgstr "Ratón en pantalla completa"
msgctxt "IDS_AG_APP_COMMAND"
msgid "App Command"
-msgstr "Orden de aplicación"
+msgstr "Comando de la aplicación"
msgctxt "IDS_AG_MEDIAFILES"
msgid "Media files (all types)"
-msgstr "Archivos multimedia (todos los tipos)"
+msgstr "Archivos audiovisuales (todos los tipos)"
msgctxt "IDS_AG_ALLFILES"
msgid "All files (*.*)|*.*|"
@@ -1162,11 +1172,11 @@ msgstr "No conocido"
msgctxt "IDS_MPLAYERC_0"
msgid "Quick Open File"
-msgstr "Abrir archivo rápido"
+msgstr "Apertura rápida de archivo"
msgctxt "IDS_AG_OPEN_FILE"
msgid "Open File"
-msgstr "Abrir un archivo"
+msgstr "Abrir archivo"
msgctxt "IDS_AG_OPEN_DVD"
msgid "Open DVD/BD"
@@ -1174,27 +1184,27 @@ msgstr "Abrir DVD/BD"
msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
msgid "Failed to set post-resize shaders"
-msgstr "Fallido al configurar sombras post-redimensionadas"
+msgstr "No se pudieron establecer los shaders ('sombreadores') de post-redimensionado"
msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
msgid "Failed to set both pre-resize and post-resize shaders"
-msgstr "Fallido al configurar ambas sombras pre y post-redimensionadas"
+msgstr "No se pudieron establecer los shaders ('sombreadores') de pre-redimensionado ni de post-redimensionado"
msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
msgid "Shaders are recompiled automatically when the corresponding files are modified."
-msgstr "Sombras serán recompiladas automáticamente cuando los archivos correspondientes se modifican."
+msgstr "Los shaders ('sombreadores') se vuelven a compilar automáticamente cuando se modifican los archivos correspondientes."
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
-msgstr "No se puede cargar %s. Los «pixel shaders» no funcionarán."
+msgstr "No se puede cargar %s. Los pixel shaders (PS, 'sombreadores' de píxel) no funcionarán."
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
-msgstr "No se pueden encontrar las funciones de entrada en %s. Los sombreadores de píxeles no funcionarán."
+msgstr "No se pueden encontrar los puntos de entrada requeridos de la función en %s. Los pixel shaders (PS, 'sombreadores' de píxel) no funcionarán."
msgctxt "IDS_OSD_SHADERS_PRESET"
msgid "Shader preset: %s"
-msgstr "Preajuste de «shader»: %s"
+msgstr "Preajuste del shader: %s"
msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
msgid "Next Shader Preset"
@@ -1230,14 +1240,14 @@ msgstr "D +%d %%"
msgctxt "IDS_VOLUME"
msgid "%d%%"
-msgstr "%d%%"
+msgstr "%d %%"
msgctxt "IDS_BOOST"
msgid "+%d%%"
-msgstr "+%d%%"
+msgstr "+%d %%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Añadir carpeta contenedora"
msgctxt "IDS_HW_INDICATOR"
@@ -1290,7 +1300,7 @@ msgstr "Valor"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr "Cantidad máxima de archivos almacenados y mostrados en el menú «Archivos recientes»."
+msgstr "Número máximo de archivos almacenados y mostrados en el menú «Archivos recientes»."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
@@ -1344,6 +1354,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<sin definir>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Observar"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Subir"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Bajar"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Ordenar por número de canal lógico (LCN)"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Eliminar todos"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "¿Confirma que quiere eliminar todos los canales de la lista?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "No hay información disponible"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Espere, análisis en marcha…"
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "RdA %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Activa el registro de eventos en un archivo (Requiere reinicio)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Tiempo restante"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Alta precisión "
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Tras la reproducción: Volver al principio del archivo"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Tras la reproducción: Cerrar"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC encontró un problema con la inicialización. Con su ayuda es posible que podamos corregir el problema.\n\n¿Quiere informarnos del fallo?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Proporcione un valor positivo si el audio va adelantado, o uno negativo si va retrasado."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "La previsualización actualmente está desactivada. Puede activarla en las opciones de MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Esta opción puede usarse para previsualizar archivos audiovisuales desde una ubicación remota. Úselo sólo sobre una red privada adecuadamente asegurada.\n\n¿De verdad quiere activar esta opción?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Renderizador interno de subtítulos"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Abrir un dispositivo"
@@ -1362,15 +1448,15 @@ msgstr "Guardar imagen (automático)"
msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
-msgstr "Imagen guardada satisfactoriamente"
+msgstr "Imagen guardada con éxito"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Cargar subtítulos"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Cargar subtítulos..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Guardar subtítulos"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Guardar subtítulos..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1382,7 +1468,7 @@ msgstr "Salir"
msgctxt "IDS_AG_PLAYPAUSE"
msgid "Play/Pause"
-msgstr "Reproducir/pausar"
+msgstr "Reproducir/Pausar"
msgctxt "IDS_AG_PLAY"
msgid "Play"
@@ -1393,12 +1479,12 @@ msgid "Stop"
msgstr "Detener"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "Avanzar un cuadro"
+msgid "Frame-step"
+msgstr "Avanzar un fotograma"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "Retroceder un cuadro"
+msgid "Frame-step back"
+msgstr "Retroceder un fotograma"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
@@ -1430,11 +1516,11 @@ msgstr "Artes/cultura"
msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
msgid "Social/Political issues/Economics"
-msgstr "Sociales/asuntos políticos/economía"
+msgstr "Asuntos sociales/políticos/economía"
msgctxt "IDS_CONTENT_LEISURE"
msgid "Leisure hobbies"
-msgstr "Aficiones de ocio"
+msgstr "Aficiones"
msgctxt "IDS_FILE_RECYCLE"
msgid "Move to Recycle Bin"
@@ -1446,11 +1532,11 @@ msgstr "Guardar una copia"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
-msgstr "Último fotograma clave"
+msgstr "más reciente"
msgctxt "IDS_FASTSEEK_NEAREST"
msgid "Nearest keyframe"
-msgstr "Fotograma clave más cercano"
+msgstr "más cercano"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
@@ -1462,15 +1548,15 @@ msgstr "Nunca mostrar"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
msgid "Show when moving the cursor, hide after:"
-msgstr "Mostrar al mover el cursor, ocultar después de:"
+msgstr "Mostrar al mover el cursor, ocultar tras:"
msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
msgid "Show when hovering control, hide after:"
-msgstr "Mostrar al pasar por encima del control, ocultar después:"
+msgstr "Mostrar al pasar el cursor sobre los controles, ocultar tras:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
-msgstr "No se pudieron establecer los «shaders» de prerredimensión"
+msgstr "No se pudieron establecer los shaders ('sombreadores') de pre-redimensionado"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
@@ -1482,11 +1568,11 @@ msgstr "Corrección de tiempo de marco: Apagado"
msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
msgid "Target VSync Offset: %.1f"
-msgstr "Desfase de sincronización vertical: %.1f"
+msgstr "Objetivo de desfase de la VSync: %.1f"
msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
msgid "VSync Offset: %d"
-msgstr "Desfase de sincronización vertical: %d"
+msgstr "Desfase de sincronización vertical (VSync): %d"
msgctxt "IDS_OSD_SPEED"
msgid "Speed: %.2lfx"
@@ -1494,11 +1580,11 @@ msgstr "Velocidad: %.2lfx"
msgctxt "IDS_OSD_THUMBS_SAVED"
msgid "Thumbnails saved successfully"
-msgstr "Miniaturas guardadas satisfactoriamente"
+msgstr "Miniaturas guardadas con éxito"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "&Transmisión de vídeo"
+msgid "Vide&o Track"
+msgstr "Pista de &vídeo"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1506,11 +1592,11 @@ msgstr "Ángu&lo del vídeo"
msgctxt "IDS_RESET_SETTINGS"
msgid "Reset settings"
-msgstr "Restaurar preferencias"
+msgstr "Restablecer configuración"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "¿Estás seguro que deseas restaurar MPC-HC a sus configuraciones predefinidas?\n¡Estás advertido de que TODAS tus configuraciones actuales se perderán!"
+msgstr "¿Confirma que quiere restaurar la configuración predeterminada de MPC-HC?\n¡Se perderán TODOS sus ajustes!"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
@@ -1526,7 +1612,7 @@ msgstr "Algunos cambios no han sido guardados todavía.\n¿Deseas guardarlos ant
msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
msgid "The settings have been successfully exported."
-msgstr "Las configuraciones han sido exportadas satisfactoriamente."
+msgstr "La configuración se ha exportado con éxito."
msgctxt "IDS_EXPORT_SETTINGS_FAILED"
msgid "The export failed! This can happen when you don't have the correct rights."
@@ -1534,7 +1620,7 @@ msgstr "¡La exportación ha fallado! Esto puede ocurrir cuando no se tiene los
msgctxt "IDS_BDA_ERROR"
msgid "BDA Error"
-msgstr "Error de BDA"
+msgstr "Error de BDA (drivers de TV)"
msgctxt "IDS_AG_DECREASE_RATE"
msgid "Decrease Rate"
@@ -1545,44 +1631,44 @@ msgid "Reset Rate"
msgstr "Restablecer velocidad"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Retardo de audio de +10 ms"
+msgid "Audio Delay +10 ms"
+msgstr "Retardo de audio +10 ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Retardo de audio de -10 ms"
+msgid "Audio Delay -10 ms"
+msgstr "Retardo de audio -10 ms"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
-msgstr "Salto Adelante (pequeño)"
+msgstr "Saltar adelante (corto)"
msgctxt "IDS_MPLAYERC_24"
msgid "Jump Backward (small)"
-msgstr "Salto Atrás (pequeño)"
+msgstr "Saltar atrás (corto)"
msgctxt "IDS_MPLAYERC_25"
msgid "Jump Forward (medium)"
-msgstr "Salto Adelante (medio"
+msgstr "Saltar adelante (medio)"
msgctxt "IDS_MPLAYERC_26"
msgid "Jump Backward (medium)"
-msgstr "Salto Atrás (medio)"
+msgstr "Saltar atrás (medio)"
msgctxt "IDS_MPLAYERC_27"
msgid "Jump Forward (large)"
-msgstr "Salto Adelante (largo)"
+msgstr "Saltar adelante (largo)"
msgctxt "IDS_MPLAYERC_28"
msgid "Jump Backward (large)"
-msgstr "Salto Atrás (largo)"
+msgstr "Saltar atrás (largo)"
msgctxt "IDS_MPLAYERC_29"
msgid "Jump Forward (keyframe)"
-msgstr "Salto Adelante (fotograma clave)"
+msgstr "Saltar adelante (fotograma clave)"
msgctxt "IDS_MPLAYERC_30"
msgid "Jump Backward (keyframe)"
-msgstr "Salto Atrás (fotograma clave)"
+msgstr "Saltar atrás (fotograma clave)"
msgctxt "IDS_AG_NEXT"
msgid "Next"
@@ -1602,31 +1688,71 @@ msgstr "Archivo anterior"
msgctxt "IDS_MPLAYERC_99"
msgid "Toggle Direct3D fullscreen"
-msgstr "Interruptor de Direct3D en Pantalla Completa"
+msgstr "Conmutar Direct3D a pantalla completa"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
-msgstr "Ir a Sub Previo"
+msgstr "Ir al subtítulo anterior"
msgctxt "IDS_MPLAYERC_101"
msgid "Goto Next Subtitle"
-msgstr "Ir a Sub Siguiente"
+msgstr "Ir al subtítulo siguiente"
msgctxt "IDS_MPLAYERC_102"
msgid "Shift Subtitle Left"
-msgstr "Mover Sub a la Izquierda"
+msgstr "Desplazar subtítulo a la izquierda"
msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
-msgstr "Mover Sub a la Derecha"
-
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Mostrar Estadisticas"
+msgstr "Desplazar subtítulo a la derecha"
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
-msgstr "Saltar al comienzo"
+msgstr "Saltar al principio"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "Sobreimpresión: Mostrar nombre del archivo"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Reproducir DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Reproducir BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "Sobreimpresión: Mostrar estadísticas del renderizador"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "Sobreimpresión: Restablecer estadísticas del renderizador"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Subtítulos::Varias"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Ocultar los &bordes"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Sólo el fo&tograma"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Mostrar &barra de título y menú"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Ocultar el &menú"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Avanzadas"
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
@@ -1646,11 +1772,11 @@ msgstr "Pantalla completa"
msgctxt "IDS_MPLAYERC_39"
msgid "Fullscreen (w/o res.change)"
-msgstr "Pantalla completa (sin cambio de res.)"
+msgstr "Pantalla completa (sin cambiar resolución)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT"
msgid "Zoom Auto Fit"
-msgstr "Autoajustar ampliación"
+msgstr "Auto ajuste de zoom"
msgctxt "IDS_AG_VIDFRM_HALF"
msgid "VidFrm Half"
@@ -1693,8 +1819,8 @@ msgid "PnS Dec Height"
msgstr "PnS Dec Altura"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Descargando subtítulos, espere un momento."
+msgid "Downloading [%s] \"%s\""
+msgstr "Descargando [%s] «%s»"
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1705,12 +1831,12 @@ msgid "No subtitles found."
msgstr "No se encontraron subtítulos."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "%d subtítulos disponibles."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "¿Quiere que MPC-HC busque actualizaciones automáticamente?\n\nPuede desactivar esta función en la página Miscelánea de las opciones."
+msgstr "¿Quiere que MPC-HC busque actualizaciones automáticamente?\n\nPuede desactivar esta función en la página «Varios» de las opciones."
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1726,19 +1852,19 @@ msgstr "200 %"
msgctxt "IDS_ZOOM_AUTOFIT"
msgid "Auto Fit"
-msgstr "Ajuste automático"
+msgstr "Autoajustar"
msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (Larger Only)"
-msgstr "Ajuste automático (si es mayor)"
+msgstr "Auto ajuste (si es mayor)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
msgid "Zoom Auto Fit (Larger Only)"
-msgstr "Ampliación: ajuste automático (si es mayor)"
+msgstr "Auto ajuste de zoom (si es mayor)"
msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
msgid "Zoom: Auto (Larger Only)"
-msgstr "Ampliación: automática (si es mayor)"
+msgstr "Zoom: Automático (si es mayor)"
msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
msgid "Double click to open file location"
@@ -1746,7 +1872,7 @@ msgstr "Doble clic para abrir la ubicación del archivo"
msgctxt "IDS_TOOLTIP_REMAINING_TIME"
msgid "Toggle between elapsed and remaining time"
-msgstr "Conmutar entre tiempo transcurrido y restante"
+msgstr "Alternar entre tiempo transcurrido y tiempo restante"
msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
msgid "Invalid delay"
@@ -1861,12 +1987,12 @@ msgid "Boss key"
msgstr "Tecla del jefe"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Menú del reproductor (corto)"
+msgid "Player Menu"
+msgstr "Menú del reproductor"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Menú del reproductor (largo)"
+msgid "Player Menu (full)"
+msgstr "Menú del reproductor (completo)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1877,45 +2003,29 @@ msgid "Options"
msgstr "Opciones"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Audio siguiente"
+msgid "Next Audio Track"
+msgstr "Siguiente pista de audio"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Audio anterior"
+msgid "Prev Audio Track"
+msgstr "Anterior pista de audio"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Subtítulos siguientes"
+msgid "Next Subtitle Track"
+msgstr "Siguiente pista de subtítulos"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Subtítulos anteriores"
+msgid "Prev Subtitle Track"
+msgstr "Anterior pista de subtítulos"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
-msgstr "Activar/desactivar subtítulos"
+msgstr "Activar/Desactivar subtítulos"
msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Recargar subtítulos"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Audio siguiente (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Audio anterior (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Subtítulos siguientes (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Subtítulos anteriores (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Ángulo siguiente (DVD)"
@@ -1925,28 +2035,28 @@ msgid "Prev Angle (DVD)"
msgstr "Ángulo anterior (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Audio siguiente (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Siguiente pista de audio (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Audio anterior (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Anterior pista de audio (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Subtítulos siguientes (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Siguiente pista de subtítulos (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Subtítulos anteriores (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Anterior pista de subtítulos (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Activar/desactivar subtítulos (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Tiempo restante"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "Sobreimpresión: Mostrar hora actual"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1972,17 +2082,17 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Cifrado"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Sí"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "No"
msgctxt "IDS_DVB_CHANNEL_START_SCAN"
msgid "Start"
-msgstr "Inicio"
+msgstr "Iniciar"
msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
msgid "Stop"
@@ -2006,11 +2116,11 @@ msgstr "Se perdio el foco por: %s - %s"
msgctxt "IDS_AG_SUBTITLES_SAVED"
msgid "Subtitles saved"
-msgstr "Se guardaron los subtítulos"
+msgstr "Los subtítulos se han guardado"
msgctxt "IDS_MAINFRM_4"
msgid "Cannot save subtitles"
-msgstr "No se pueden guardar los subtítulos"
+msgstr "Los subtítulos no se pueden guardar"
msgctxt "IDS_AG_FRAMERATE"
msgid "Frame rate"
@@ -2033,12 +2143,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volumen: %02lu/%02lu, título: %02lu/%02lu, capítulo: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Ángulo: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2050,11 +2160,11 @@ msgstr "Reproducir con MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr "MPC-HC no tiene privilegios suficientes para cambiar las asociaciones de los formatos de archivos. Pulse en el botón «Ejecutar como administrador»."
+msgstr "MPC-HC no tiene privilegios suficientes para cambiar las asociaciones de los formatos de archivo. Pulse el botón «Ejecutar como administrador»."
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr "MPC-HC es un reproductor para Windows extremadamente ligero y de código abierto. Admite todos los formatos comunes de vídeo y de audio. Estamos 100 % libres de «spyware», nada de anuncios ni barras de herramientas."
+msgstr "MPC-HC es un reproductor para Windows extremadamente ligero y de código abierto. Admite todos los formatos comunes de vídeo y audio. Estamos 100 % libres de «spyware», nada de publicidad ni barras de herramientas."
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2070,43 +2180,43 @@ msgstr "Título %u"
msgctxt "IDS_MAINFRM_16"
msgid "DVD: Unexpected error"
-msgstr "DVD: error inesperado"
+msgstr "DVD: Error inesperado"
msgctxt "IDS_MAINFRM_17"
msgid "DVD: Copy-Protect Fail"
-msgstr "DVD: fallo en la protección anticopia"
+msgstr "DVD: Fallo en la protección anticopia"
msgctxt "IDS_MAINFRM_18"
msgid "DVD: Invalid DVD 1.x Disc"
-msgstr "DVD: disco DVD 1.x no válido"
+msgstr "DVD: Disco DVD 1.x no válido"
msgctxt "IDS_MAINFRM_19"
msgid "DVD: Invalid Disc Region"
-msgstr "DVD: la región del disco no es válida"
+msgstr "DVD: Región del disco no válida"
msgctxt "IDS_MAINFRM_20"
msgid "DVD: Low Parental Level"
-msgstr "DVD: nivel de control parental bajo"
+msgstr "DVD: Nivel de control parental bajo"
msgctxt "IDS_MAINFRM_21"
msgid "DVD: Macrovision Fail"
-msgstr "DVD: fallo en Macrovision"
+msgstr "DVD: Fallo de Macrovision"
msgctxt "IDS_MAINFRM_22"
msgid "DVD: Incompatible System And Decoder Regions"
-msgstr "DVD: las regiones del sistema y el decodificador no son compatibles"
+msgstr "DVD: Las regiones del sistema y el decodificador no son compatibles"
msgctxt "IDS_MAINFRM_23"
msgid "DVD: Incompatible Disc And Decoder Regions"
-msgstr "DVD: las regiones del disco y el decodificador no son compatibles"
+msgstr "DVD: Las regiones del disco y el decodificador no son compatibles"
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "Esta opción está diseñada para evitar el efecto de desgarre («tearing»). Sin embargo, evitará que se muestren el menú contextual y las ventanas durante la reproducción.\n\n¿Está seguro de que quiere activar esta opción?"
+msgstr "Esta opción está diseñada para evitar el efecto de desgarro («tearing», fotogramas entremezclados). Sin embargo, también evitará que se muestre el menú contextual y cualquier cuadro de diálogo durante la reproducción.\n\n¿De verdad quiere activar esta opción?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
-msgstr "Retardo de subs.: %ld ms"
+msgstr "Retardo de subtítulos: %ld ms"
msgctxt "IDS_AG_TITLE2"
msgid "Title: %02d/%02d"
@@ -2128,36 +2238,28 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Anchura de la imagen"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "El URL parece correcto."
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "La versión del protocolo no coincide. Actualice el reproductor o elija otra dirección."
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "Relación de aspecto"
+msgstr "Relación de aspecto (AR)"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
msgstr ", Total: %ld, perdidos: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Tamaño: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Tamaño: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Libre: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Libre: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2182,7 +2284,7 @@ msgstr "Seleccione la ruta del DVD/BD:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr "cargado correctamente"
+msgstr " cargado correctamente"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2206,7 +2308,7 @@ msgstr "Imposible crear miniaturas para los archivos sin duración"
msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
msgid "Failed to get video frame size"
-msgstr "No se pudo obtener el tamaño de fotograma de vídeo"
+msgstr "No se pudo obtener el tamaño de fotograma del vídeo"
msgctxt "IDS_OUT_OF_MEMORY"
msgid "Out of memory, go buy some more!"
@@ -2229,8 +2331,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "No se puede crear el archivo. Las miniaturas serían demasiado pequeñas.\n\nPruebe a disminuir el número de miniaturas o a aumentar el tamaño total."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Para cargar los subtítulos, cambie el renderizador de vídeo y abra el archivo de nuevo.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR o Haali\n- RealMedia: renderizador especial para RealMedia o ábralo mediante DirectShow\n- QuickTime: renderizador DX7 o DX9 para QuickTime\n- ShockWave: no disponible"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Para cargar subtítulos tiene que cambiar el tipo de renderizador de vídeo y reabrir el archivo.\n- DirectShow: VMR-9 (sin renderizado), EVR (CP), Sync, madVR o Haali\n- RealMedia: Renderizador especial para RealMedia, o ábralo mediante DirectShow\n- QuickTime: Renderizador DX7 o DX9 para QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2241,11 +2343,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Relación de aspecto: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Relación de aspecto: original"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Relación de aspecto: Predeterminada (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Retardo del audio: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2257,8 +2359,8 @@ msgid "Out of memory"
msgstr "Memoria agotada"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Error: se necesita el reproductor Flash para IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Error: se necesita el reproductor Flash para Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2266,7 +2368,7 @@ msgstr "QuickTime aún no es compatible con X64 (no hay bibliotecas de Apple dis
msgctxt "IDS_MAINFRM_80"
msgid "Failed to create the filter graph object"
-msgstr "Imposible crear el objeto del esquema de filtros"
+msgstr "No se pudo crear el objeto del diagrama de filtros"
msgctxt "IDS_MAINFRM_81"
msgid "Invalid argument"
@@ -2280,10 +2382,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "No se pudo mostrar el archivo"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "No se encontró la base de datos de subtítulos en el URL especificado."
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Capítulo: "
@@ -2294,7 +2392,7 @@ msgstr "Vol.: %d %%"
msgctxt "IDS_BOOST_OSD"
msgid "Boost: +%u%%"
-msgstr "Amplificación: +%u%%"
+msgstr "Amplificación: +%u %%"
msgctxt "IDS_BALANCE_OSD"
msgid "Balance: %s"
@@ -2304,14 +2402,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Actual"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC se cerró inesperadamente. Para ayudarnos a corregir el problema, envíe el archivo «%s» a nuestro rastreador de errores.\n\n¿Quiere abrir la carpeta que contiene el archivo y visitar el rastreador de errores ahora?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Falló la creación del archivo de volcado en «%s» (error %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Elija la carpeta"
@@ -2326,15 +2416,15 @@ msgstr "Pausa"
msgctxt "IDS_AG_TOGGLE_CAPTION"
msgid "Toggle Caption&Menu"
-msgstr "Alternar Menú de &Captura"
+msgstr "Accionar barra de título y menú"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
-msgstr "Mostrar/ocultar barra de navegación"
+msgid "Toggle Seek Bar"
+msgstr "Mostrar/Ocultar barra de navegación"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
msgid "Toggle Controls"
-msgstr "Mostrar/ocultar controles"
+msgstr "Mostrar/Ocultar controles"
msgctxt "IDS_MAINFRM_84"
msgid "Invalid file name"
@@ -2382,7 +2472,7 @@ msgstr "Error"
msgctxt "IDS_MAINFRM_96"
msgid "Can't create video capture filter"
-msgstr "Imposible crear el filtro de captura de video"
+msgstr "No se puede crear el filtro de captura de vídeo"
msgctxt "IDS_MAINFRM_98"
msgid "No capture filters"
@@ -2390,7 +2480,7 @@ msgstr "No hay filtros de captura"
msgctxt "IDS_MAINFRM_99"
msgid "Can't create capture graph builder object"
-msgstr "Imposible crear objeto constructor del esquema de captura"
+msgstr "No se puede crear un objeto del constructor del diagrama de captura"
msgctxt "IDS_MAINFRM_108"
msgid "Couldn't open any device"
@@ -2402,7 +2492,7 @@ msgstr "Sonido"
msgctxt "IDS_MAINFRM_114"
msgid "%s was not found, please insert media containing this file."
-msgstr "No se encontro %s, por favor inserte el medio que contiene al archivo."
+msgstr "No se encontró «%s». Inserte el soporte que contiene este archivo."
msgctxt "IDS_AG_ABORTED"
msgid "Aborted"
@@ -2410,11 +2500,11 @@ msgstr "Interrumpido"
msgctxt "IDS_MAINFRM_116"
msgid "&Properties..."
-msgstr "&Propiedades..."
+msgstr "&Propiedades…"
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr " Propiedades del Pin..."
+msgstr " Propiedades de la etapa..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2426,7 +2516,7 @@ msgstr "%u desconocida"
msgctxt "IDS_AG_VSYNC"
msgid "VSync"
-msgstr "VSync (Sincronización Vertical)"
+msgstr "Sincronización vertical (VSync estándar)"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
@@ -2446,7 +2536,7 @@ msgstr "Ángulo n.º %u"
msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
msgid "Increase VSync Offset"
-msgstr "Aumentar desfase de sinc. vert."
+msgstr "Aumentar desfase de la VSync"
msgctxt "IDS_AG_DISABLED"
msgid "Disabled"
@@ -2454,7 +2544,7 @@ msgstr "Desactivado"
msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
msgid "Decrease VSync Offset"
-msgstr "Reducir desfase de sinc. vert."
+msgstr "Reducir desfase de la VSync"
msgctxt "IDS_MAINFRM_136"
msgid "MPC-HC D3D Fullscreen"
@@ -2485,8 +2575,8 @@ msgid "Volume boost Max"
msgstr "Aumento de Volumen Maximo"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Uso: mpc-hc.exe \"ruta\" [parámetros]\n\n\"ruta\"\tEl fichero o directorio principal a cargarse (comodines\n\t\tpermitidos, \"-\" denota entrada estandar)\n/dub \"nombredeaudiodedoblaje\"\tCarga un fichero de audio adicional\n/dubdelay \"fichero\"\tCarga un fichero de audio adicional desplazado XXms (si\n\t\tel fichero contiene \"...DELAY XXms...\")\n/d3dfs\t\tInicia el renderizado en modo D3D a pantalla completa\n/sub \"nombredesubtítulo\"\tCarga un fichero de subtítulos adicional\n/filter \"nombredefiltro\"\tCarga filtros DirectShow desde una (.dll) biblioteca de vínculos\n\t\tdinámicos (comodines permitidos)\n/dvd\t\tEjecuta en modo DVD, \"ruta\" significa la carpeta de\n\t\tDVD (opcional)\n/dvdpos T#C\tInicia la reproducción en el título T, capítulo C\n/dvdpos T#hh:mm\tInicia la reproducción en el título T, posición hh:mm:ss\n/cd\t\tCarga todas las pistas de un CD de audio o S(VCD),\n\t\t\"ruta\" significa la ruta de la unidad (opcional)\n/device\t\tAbre el dispositivo de vídeo predeterminado\n/open\t\tAbre el fichero, no inicia automáticamente la reproducción\n/play\t\tComienza a reproducir el fichero tan pronto como el reproductor sea\n\t\tcargado\n/close\t\tCierra el reproductor después de la reproducción (sólo funciona cuando\n\t\tse usa con /play)\n/shutdown\tCierra el sistema operativo después de la reproducción\n/fullscreen\tSe inicia en modo pantalla-completa\n/minimized\tSe inicia en modo minimizado\n/new\t\tUsa una nueva instancia del reproductor\n/add\t\tAñade \"ruta\" a la lista de reproducción, puede combinarse\n\t\tcon /open y /play\n/regvid\t\tCrea asociaciones de fichero para ficheros de vídeos\n/regaud\t\tCrea asociaciones de fichero para ficheros de audio\n/regpl\t\tCrea asociaciones de fichero para ficheros de tipo lista de reproducción\n/regall\t\tCrea asociaciones de fichero para todos los tipos de fichero soportados\n/unregall\t\tElimina todas las asociaciones de fichero\n/start ms\t\tSe inicia reproduciendo desde \"ms\" (= milisegundos)\n/startpos hh:mm:ss\tSe inicia reproduciendo desde la posición hh:mm:ss\n/fixedsize w,h\tEstablece un tamaño fijo de ventana\n/monitor N\tInicia el reproductor en el monitor N, donde N comienza a contar desde 1\n/audiorenderer N\tSe inicia usando el renderizador de audio N, donde N comienza a contar desde 1\n\t\t(vea las configuraciones de \"Salida\")\n/shaderpreset \"Pr\"\tSe inicia usando los preajustes \"Pr\" del sombreador\n/reset\t\tRestablece las configuraciones por defecto\n/help /h /?\tMuestra la ayuda de parámetros de línea de comandos\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Uso: mpc-hc.exe \"ruta\" [parámetros]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2494,43 +2584,43 @@ msgstr "Se encontraron opciones no reconocidas en la orden ejecutada: \n\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
-msgstr "Alternar Información"
+msgstr "Mostrar/Ocultar información"
msgctxt "IDS_AG_TOGGLE_STATS"
msgid "Toggle Statistics"
-msgstr "Alternar Estadísticas"
+msgstr "Mostrar/Ocultar estadísticas"
msgctxt "IDS_AG_TOGGLE_STATUS"
msgid "Toggle Status"
-msgstr "Alternar Estado"
+msgstr "Mostrar/Ocultar estado"
msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
msgid "Toggle Subresync Bar"
-msgstr "Alternar Barra de Subresync"
+msgstr "Accionar barra de resincronizado de subtítulos"
msgctxt "IDS_AG_TOGGLE_PLAYLIST"
msgid "Toggle Playlist Bar"
-msgstr "Alternar Barra de Lista de Reproducción"
+msgstr "Mostrar/Ocultar barra de lista de reproducción"
msgctxt "IDS_AG_TOGGLE_CAPTURE"
msgid "Toggle Capture Bar"
-msgstr "Alternar Barra de Captura"
+msgstr "Mostrar/ocultar barra de captura"
msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
msgid "Toggle Debug Shaders"
-msgstr "Conmutar sombras de depuración"
+msgstr "Accionar «Depurar shaders»"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
-msgstr "Escala al 50 %"
+msgstr "Zoom al 50 %"
msgctxt "IDS_AG_ZOOM_100"
msgid "Zoom 100%"
-msgstr "Escala al 100 %"
+msgstr "Zoom al 100 %"
msgctxt "IDS_AG_ZOOM_200"
msgid "Zoom 200%"
-msgstr "Escala al 200 %"
+msgstr "Zoom al 200 %"
msgctxt "IDS_AG_NEXT_AR_PRESET"
msgid "Next AR Preset"
@@ -2558,35 +2648,27 @@ msgstr "Rotar PnS X+"
msgctxt "IDS_AG_VIDFRM_ZOOM1"
msgid "VidFrm Zoom 1"
-msgstr "VidFrm Zoom 1"
+msgstr "Zoom 1 de fotograma"
msgctxt "IDS_AG_VIDFRM_ZOOM2"
msgid "VidFrm Zoom 2"
-msgstr "VidFrm Zoom 2"
+msgstr "Zoom 2 de fotograma"
msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
msgid "VidFrm Switch Zoom"
-msgstr "Control de zoom de VidFrm (fotograma/frame de vídeo)"
+msgstr "Alternar zoom de fotograma"
msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "Acti&var todos los filtros"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Sintonización"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "No se cargaron los subtítulos o el renderizador no es compatible."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Autor desconocido. Contáctenos si es el autor."
msgctxt "IDS_NO_MORE_MEDIA"
msgid "No more media in the current folder."
-msgstr "No hay más archivos de multimedia en la carpeta actual."
+msgstr "No hay más archivos audiovisuales en la carpeta actual."
msgctxt "IDS_FIRST_IN_FOLDER"
msgid "The first file of the folder is already loaded."
@@ -2598,111 +2680,83 @@ msgstr "El último archivo de la carpeta ya está cargado."
msgctxt "IDS_FRONT_LEFT"
msgid "Front Left"
-msgstr "Delante Izq."
+msgstr "Delantero izquierdo"
msgctxt "IDS_FRONT_RIGHT"
msgid "Front Right"
-msgstr "Delante Der."
+msgstr "Delantero derecho"
msgctxt "IDS_FRONT_CENTER"
msgid "Front Center"
-msgstr "Delate Centro"
+msgstr "Delantero central"
msgctxt "IDS_LOW_FREQUENCY"
msgid "Low Frequency"
-msgstr "Baja Frecuencia"
+msgstr "De baja frecuencia"
msgctxt "IDS_BACK_LEFT"
msgid "Back Left"
-msgstr "Detrás Izq."
+msgstr "Trasero izquierdo"
msgctxt "IDS_BACK_RIGHT"
msgid "Back Right"
-msgstr "Detrás Der."
+msgstr "Trasero derecho"
msgctxt "IDS_FRONT_LEFT_OF_CENTER"
msgid "Front Left of Center"
-msgstr "Delante Izq. de Centro"
+msgstr "Delantero central izq."
msgctxt "IDS_FRONT_RIGHT_OF_CENTER"
msgid "Front Right of Center"
-msgstr "Delante Der. de Centro"
+msgstr "Delantero central der."
msgctxt "IDS_BACK_CENTER"
msgid "Back Center"
-msgstr "Detrás Centro"
+msgstr "Trasero central"
msgctxt "IDS_SIDE_LEFT"
msgid "Side Left"
-msgstr "Lado Izq."
+msgstr "Lateral izquierdo"
msgctxt "IDS_SIDE_RIGHT"
msgid "Side Right"
-msgstr "Lado Der."
+msgstr "Lateral derecho"
msgctxt "IDS_TOP_CENTER"
msgid "Top Center"
-msgstr "Encima Centro"
+msgstr "Superior central"
msgctxt "IDS_TOP_FRONT_LEFT"
msgid "Top Front Left"
-msgstr "Encima Delante Izq."
+msgstr "Delantero superior izq."
msgctxt "IDS_TOP_FRONT_CENTER"
msgid "Top Front Center"
-msgstr "Encima Delante Centro"
+msgstr "Delantero superior cen."
msgctxt "IDS_TOP_FRONT_RIGHT"
msgid "Top Front Right"
-msgstr "Encima Delante Der."
+msgstr "Delantero superior der."
msgctxt "IDS_TOP_BACK_LEFT"
msgid "Top Back Left"
-msgstr "Encima Detrás Izq."
+msgstr "Trasero superior izq."
msgctxt "IDS_TOP_BACK_CENTER"
msgid "Top Back Center"
-msgstr "Encima Detrás Centro"
+msgstr "Trasero superior cen."
msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
-msgstr "Encima Detrás Der."
-
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Restablecer estadísticas de visualización"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Subtítulos::Misc"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Hide borders"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Solo el cuadro"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Show Caption&&Menu"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Hide Menu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Avanzado"
+msgstr "Trasero superior der."
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
-msgstr "Sobre la barra de desplazamiento"
+msgid "Above seek bar"
+msgstr "Sobre la barra de navegación"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
-msgstr "Bajo la barra de desplazamiento"
+msgid "Below seek bar"
+msgstr "Bajo la barra de navegación"
msgctxt "IDS_VIDEO_STREAM"
msgid "Video: %s"
@@ -2714,7 +2768,7 @@ msgstr "Aplicar"
msgctxt "IDS_CLEAR"
msgid "Clear"
-msgstr "Limpiar"
+msgstr "Vaciar"
msgctxt "IDS_CANCEL"
msgid "Cancel"
@@ -2730,7 +2784,7 @@ msgstr "Píxeles:"
msgctxt "IDS_TEXTFILE_ENC"
msgid "Encoding:"
-msgstr "Codificando:"
+msgstr "Codificación:"
msgctxt "IDS_DISABLE_ALL_FILTERS"
msgid "&Disable all filters"
@@ -2758,19 +2812,19 @@ msgstr "Ajustar a ventana"
msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
msgid "Touch Window From Inside"
-msgstr "Tocar ventana desde interior"
+msgstr "Tocar ventana desde dentro"
msgctxt "IDS_ZOOM1"
msgid "Zoom 1"
-msgstr "Escala 1"
+msgstr "Zoom 1"
msgctxt "IDS_ZOOM2"
msgid "Zoom 2"
-msgstr "Escala 2"
+msgstr "Zoom 2"
msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
msgid "Touch Window From Outside"
-msgstr "Tocar ventana desde exterior"
+msgstr "Tocar ventana desde fuera"
msgctxt "IDS_AUDIO_STREAM"
msgid "Audio: %s"
@@ -2822,7 +2876,7 @@ msgstr "3G2"
msgctxt "IDS_MFMT_FLV"
msgid "Flash Video"
-msgstr "Vídeo Flash"
+msgstr "Flash Video"
msgctxt "IDS_MFMT_OGM"
msgid "Ogg Media"
@@ -2842,7 +2896,7 @@ msgstr "Windows Media Video"
msgctxt "IDS_MFMT_BINK"
msgid "Smacker/Bink Video"
-msgstr "Vídeo de Smacker/Bink"
+msgstr "Smacker/Bink Video"
msgctxt "IDS_MFMT_FLIC"
msgid "FLIC Animation"
@@ -2850,11 +2904,11 @@ msgstr "Animación FLIC"
msgctxt "IDS_MFMT_DSM"
msgid "DirectShow Media"
-msgstr "Multimedia de DirectShow"
+msgstr "Audiovisual de DirectShow"
msgctxt "IDS_MFMT_IVF"
msgid "Indeo Video Format"
-msgstr "Formato de vídeo de Indeo"
+msgstr "Formato de vídeo Indeo"
msgctxt "IDS_MFMT_OTHER"
msgid "Other"
@@ -2869,8 +2923,8 @@ msgid "Other Audio"
msgstr "Otro audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2880,13 +2934,33 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Códec de audio Opus"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
msgctxt "IDS_MFMT_APE"
msgid "Monkey's Audio"
-msgstr "Audio de Monkey’s"
+msgstr "Monkey’s Audio"
msgctxt "IDS_MFMT_AU"
msgid "AU/SND"
@@ -2944,22 +3018,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Audio de Windows Media"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Códec de audio Opus"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Lista de reproducción"
@@ -2970,7 +3028,7 @@ msgstr "Lista de reproducción Blu-ray"
msgctxt "IDS_MFMT_RAR"
msgid "RAR Archive"
-msgstr "Archivador RAR"
+msgstr "Archivo RAR"
msgctxt "IDS_DVB_CHANNEL_FPS"
msgid "FPS"
@@ -2982,51 +3040,39 @@ msgstr "Resolución"
msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "Relación de aspecto"
-
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Usar WASAPI (reiniciar reproducción)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Silenciar en avance rápido"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Dispositivo de sonido:"
+msgstr "Relación de aspecto (AR)"
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
-msgstr "VSync: Encendido"
+msgstr "VSync estándar: Activada"
msgctxt "IDS_OSD_RS_VSYNC_OFF"
msgid "VSync: Off"
-msgstr "VSync: Apagado"
+msgstr "VSync estándar: Desactivada"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
msgid "Accurate VSync: On"
-msgstr "VSync con precisión: Encendido"
+msgstr "VSync precisa: Activada"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
msgid "Accurate VSync: Off"
-msgstr "VSync con precisión: Apagado"
+msgstr "VSync precisa: Desactivada"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
msgid "Synchronize Video to Display: On"
-msgstr "Sincronizar vídeo a visualizar: activado"
+msgstr "Sincronizar vídeo a mostrar: Activado"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
msgid "Synchronize Video to Display: Off"
-msgstr "Sincronizar vídeo a visualizar: desactivado"
+msgstr "Sincronizar vídeo a mostrar: Desactivado"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
msgid "Synchronize Display to Video: On"
-msgstr "Sincronizar pantalla a vídeo: activado"
+msgstr "Sincronizar pantalla con el vídeo: Activado"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
msgid "Synchronize Display to Video: Off"
-msgstr "Sincronizar pantalla a vídeo: desactivado"
+msgstr "Sincronizar pantalla con el vídeo: Desactivado"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
msgid "Present at Nearest VSync: On"
@@ -3038,11 +3084,11 @@ msgstr "Presentación en la VSync más próxima: Desactivado"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
msgid "Color Management: On"
-msgstr "Gestión de color: activada"
+msgstr "Gestión de color: Activada"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
msgid "Color Management: Off"
-msgstr "Gestión de color: desactivada"
+msgstr "Gestión de color: Desactivada"
msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
msgid "Input Type: Auto-Detect"
@@ -3074,31 +3120,31 @@ msgstr "Luz ambiental: oscura (2,4 gamma)"
msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
msgid "Rendering Intent: Perceptual"
-msgstr "Propósito de renderización: Perceptivo"
+msgstr "Gama (intent) de renderización: Perceptiva"
msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
msgid "Rendering Intent: Relative Colorimetric"
-msgstr "Propósito de renderización: Colorimetría relativa"
+msgstr "Gama (intent) de renderización: Colorimétrica relativa"
msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
msgid "Rendering Intent: Saturation"
-msgstr "Propósito de renderización: Saturación"
+msgstr "Gama (intent) de renderización: Saturación"
msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
msgid "Rendering Intent: Absolute Colorimetric"
-msgstr "Propósito de renderización: Colorimetría absoluta"
+msgstr "Gama (intent) de renderización: Colorimétrica absoluta"
msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
msgid "Output Range: %s"
-msgstr "Intervalo de salida: %s"
+msgstr "Rango de salida: %s"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
msgid "Flush GPU before VSync: On"
-msgstr "Vaciar GPU antes de sincr. v.: activado"
+msgstr "Vaciar GPU antes de la VSync: Activado"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
msgid "Flush GPU before VSync: Off"
-msgstr "Vaciar GPU antes de sincr. v.: desactivado"
+msgstr "Vaciar GPU antes de la VSync: Desactivado"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
msgid "Flush GPU after Present: On"
@@ -3118,11 +3164,11 @@ msgstr "Esperar al vaciado de GPU: desactivado"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
msgid "D3D Fullscreen: On"
-msgstr "D3D a pantalla completa: activado"
+msgstr "D3D a pantalla completa: Activado"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
msgid "D3D Fullscreen: Off"
-msgstr "D3D a pantalla completa: desactivado"
+msgstr "D3D a pantalla completa: Desactivado"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
msgid "Disable desktop composition: On"
@@ -3134,11 +3180,11 @@ msgstr "Desactivar composición del escritorio: Apagado"
msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
msgid "Alternative VSync: On"
-msgstr "VSync alternativo: Encendido"
+msgstr "VSync alternativa: Activada"
msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
msgid "Alternative VSync: Off"
-msgstr "VSync alternativo: Apagado"
+msgstr "VSync alternativa: Desactivada"
msgctxt "IDS_OSD_RS_RESET_DEFAULT"
msgid "Renderer settings reset to default"
@@ -3150,11 +3196,11 @@ msgstr "Restablecer configuraciónes de renderizado a optimos"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
msgid "D3D Fullscreen GUI Support: On"
-msgstr "D3D a pantalla completa con IGU: activado"
+msgstr "D3D a pantalla completa con interfaz gráfica (GUI): Activado"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
msgid "D3D Fullscreen GUI Support: Off"
-msgstr "D3D a pantalla completa con IGU: desactivado"
+msgstr "D3D a pantalla completa con interfaz gráfica (GUI): Desactivado"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
msgid "10-bit RGB Output: On"
@@ -3174,19 +3220,19 @@ msgstr "Forzar entrada 10-bit RGB: Apagado"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
msgid "Full Floating Point Processing: On"
-msgstr "Procesamiento Full Floating Point: Encendido"
+msgstr "Procesamiento Full Floating Point: Activado"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
msgid "Full Floating Point Processing: Off"
-msgstr "Procesamiento Full Floating Point: Apagado"
+msgstr "Procesamiento Full Floating Point: Desactivado"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
msgid "Half Floating Point Processing: On"
-msgstr "Procesamiento Half Floating Point: Encendido"
+msgstr "Procesamiento Half Floating Point: Activado"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
msgid "Half Floating Point Processing: Off"
-msgstr "Procesamiento Half Floating Point: Apagado"
+msgstr "Procesamiento Half Floating Point: Desactivado"
msgctxt "IDS_BRIGHTNESS_DEC"
msgid "Brightness decrease"
@@ -3242,23 +3288,23 @@ msgstr "&Cerrar"
msgctxt "IDS_OSD_ZOOM"
msgid "Zoom: %.0lf%%"
-msgstr "Ampliación: %.0lf %%"
+msgstr "Zoom: %.0lf %%"
msgctxt "IDS_OSD_ZOOM_AUTO"
msgid "Zoom: Auto"
-msgstr "Ampliación: automática"
+msgstr "Zoom: Automático"
msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
msgid "Toggle custom channel mapping"
-msgstr "Personalizar canal de mapping"
+msgstr "Accionar mapeo personalizado del canal"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
msgid "Custom channel mapping: On"
-msgstr "Personalización del canal de mapping: Encendido"
+msgstr "Mapeo personalizado del canal: Activado"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
msgid "Custom channel mapping: Off"
-msgstr "Personalización del canal de mapping: Apagado"
+msgstr "Mapeo personalizado del canal: Desactivado"
msgctxt "IDS_NORMALIZE"
msgid "Toggle normalization"
@@ -3284,9 +3330,13 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Recuperación apagada"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
-msgstr "kB"
+msgstr "KB"
msgctxt "IDS_SIZE_UNIT_M"
msgid "MB"
@@ -3298,7 +3348,7 @@ msgstr "GB"
msgctxt "IDS_SPEED_UNIT_K"
msgid "KB/s"
-msgstr "kB/s"
+msgstr "KB/s"
msgctxt "IDS_SPEED_UNIT_M"
msgid "MB/s"
@@ -3338,19 +3388,19 @@ msgstr "Error al analizar el texto introducido"
msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
msgid "Error parsing the entered frame rate!"
-msgstr "Error al analizar la velocidad de cuadro introducido"
+msgstr "¡Error al procesar la tasa de fotogramas introducida!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
-msgstr "No se puede enmarcar paso, pruebe con un render de vídeo diferente."
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "No es posible desplazarse fotograma a fotograma, pruebe con otro renderizador de vídeo."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
-msgstr "Las funciones «Guardar imagen» y «Guardar miniaturas» no funcionan con el representador de vídeo predeterminado para RealMedia.\nSeleccione uno de los representadores de DirectX para RealMedia en las opciones de salida de MPC-HC y abra el archivo de nuevo."
+msgstr "Las funciones «Guardar imagen» y «Guardar miniaturas» no funcionan con el renderizador de vídeo predeterminado para RealMedia.\nSeleccione uno de los renderizadores de DirectX para RealMedia en las opciones de salida de MPC-HC y abra de nuevo el archivo."
msgctxt "IDS_SCREENSHOT_ERROR_QT"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
-msgstr "Las funciones «Guardar imagen» y «Guardar miniaturas» no funcionan con el representador de vídeo predeterminado para QuickTime.\nSeleccione uno de los representadores de DirectX para QuickTime en las opciones de salida de MPC-HC y abra el archivo de nuevo."
+msgstr "Las funciones «Guardar imagen» y «Guardar miniaturas» no funcionan con el renderizador de vídeo predeterminado para QuickTime.\nSeleccione uno de los renderizadores de DirectX para QuickTime en las opciones de salida de MPC-HC y abra de nuevo el archivo."
msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
@@ -3358,15 +3408,11 @@ msgstr "Las funciones «Guardar imagen» y «Guardar miniaturas» no funcionan p
msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgstr "Las funciones «Guardar imagen» y «Guardar miniaturas» no funcionan con el representador de vídeo Overlay Mixer.\nCambie el representador de vídeo en las opciones de salida de MPC y abra el archivo de nuevo."
-
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "No se puede conectar con la base de subtítulos en línea."
+msgstr "Las funciones «Guardar imagen» y «Guardar miniaturas» no funcionan con el renderizador de vídeo Overlay Mixer.\nCambie el renderizador de vídeo en las opciones de salida de MPC y abra de nuevo el archivo."
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
-msgstr "¿Quiere activar el editor de EDL?"
+msgstr "¿Quiere activar el editor de listas de edición (EDL)?"
msgctxt "IDS_CAPTURE_ERROR"
msgid "Capture Error"
@@ -3382,19 +3428,19 @@ msgstr "audio"
msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
msgid "Can't add the %s buffer filter to the graph."
-msgstr "No se puede añadir el filtro búfer %s a la gráfica."
+msgstr "No se puede añadir el filtro del buffer %s al diagrama de filtros."
msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
msgid "Can't connect the %s buffer filter to the graph."
-msgstr "No se puede conectar el filtro búfer %s a la gráfica."
+msgstr "No se puede conectar el filtro del buffer %s al diagrama de filtros."
msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
msgid "Can't add the %s encoder filter to the graph."
-msgstr "No se puede añadir el filtro codificador %s a la gráfica."
+msgstr "No se puede añadir el filtro del codificador %s al diagrama de filtros."
msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
msgid "Can't connect the %s encoder filter to the graph."
-msgstr "No se puede conectar el filtro codificador %s a la gráfica."
+msgstr "No se puede conectar el filtro del codificador %s al diagrama de filtros."
msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
msgid "Can't set the compression format on the %s encoder filter."
@@ -3406,11 +3452,11 @@ msgstr "No se puede conectar la transmisión %s al filtro multiplexor."
msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
msgid "No video capture pin was found."
-msgstr "No se ha encontrado pin capturador de video."
+msgstr "No se ha encontrado etapa de captura de vídeo."
msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
msgid "No audio capture pin was found."
-msgstr "No se ha encontrado pin capturador de sonido."
+msgstr "No se ha encontrado etapa de captura de sonido."
msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
msgid "Error initializing the output file."
@@ -3432,33 +3478,41 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Necesita aplicar la configuración nueva antes de probarla."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
-msgstr "Después de la reproducción: salir"
+msgstr "Tras reproducir: Salir"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
-msgstr "Después de la reproducción: suspender"
+msgstr "Tras reproducir: Suspender"
msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
msgid "After Playback: Hibernate"
-msgstr "Después de la reproducción: hibernar"
+msgstr "Tras reproducir: Hibernar"
msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
msgid "After Playback: Shutdown"
-msgstr "Después de la reproducción: apagar"
+msgstr "Tras reproducir: Apagar"
msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
msgid "After Playback: Log Off"
-msgstr "Después de la reproducción: cerrar la sesión"
+msgstr "Tras reproducir: Cerrar la sesión"
msgctxt "IDS_AFTERPLAYBACK_LOCK"
msgid "After Playback: Lock"
-msgstr "Después de la reproducción: bloquear"
+msgstr "Tras reproducir: Bloquear"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr "Tras la reproducción: apagar el monitor"
+msgstr "Tras reproducir: Apagar el monitor"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Tras reproducir: Reproducir el siguiente archivo de la carpeta"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Tras reproducir: No hacer nada"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
@@ -3482,7 +3536,7 @@ msgstr "Configuraciones de color restablecidas"
msgctxt "IDS_OSD_NO_COLORCONTROL"
msgid "Color control is not supported"
-msgstr "No se admite el control de color"
+msgstr "El control de color no está soportado"
msgctxt "IDS_BRIGHTNESS_INC"
msgid "Brightness increase"
@@ -3490,11 +3544,11 @@ msgstr "Aumentar brillo"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
-msgstr "Proporcione los idiomas que prefiera.\nPor ejemplo, escriba: «esp ita jap»"
+msgstr "Proporcione los idiomas que prefiera.\nPor ejemplo, escriba: «spa ita jap»"
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
-msgstr "Los fraccionadores (splitters) externos pueden tener sus propias opciones de preferencia de idioma, así pues el comportamiento por defecto de MPC-HC es no cambiar su elección inicial.\nHabilite esta opción si quiere que MPC-HC controle los fraccionadores externos."
+msgstr "Los demultiplexores (splitters) externos pueden tener opciones en sus propias preferencias de idioma, de modo que el comportamiento por defecto de MPC-HC es no cambiar sus configuraciones iniciales.\nHabilite esta opción si quiere que MPC-HC controle los demultiplexores externos."
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
@@ -3518,7 +3572,7 @@ msgstr "&Canales"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr "Si «Último fotograma clave» está seleccionado, se buscará el primer fotograma clave («keyframe») anterior al punto de búsqueda actual.\nSi «Fotograma clave más cercano» está seleccionado, se buscará el primer fotograma clave anterior o posterior al punto de búsqueda dependiendo de cuál sea el más cercano."
+msgstr "Al cambiar el punto de avance de la reproducción de vídeo, está característica habilita que la reproducción se retome desde un fotograma clave (keyframe).\nSi se selecciona la opción del fotograma clave «más reciente», la reproducción se retomará desde el primer fotograma clave anterior al punto de reposicionamiento.\nSi se selecciona el fotograma clave «más cercano», la reproducción se retomará desde el fotograma clave anterior o posterior más cercano al punto de reposicionamiento."
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
@@ -3526,17 +3580,401 @@ msgstr "Asociar con todos los formatos"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr "Asociar solo con formatos de vídeo"
+msgstr "Asociar sólo con formatos de vídeo"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr "Asociar solo con formatos de audio"
+msgstr "Asociar sólo con formatos de audio"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr "Limpiar todas las asociaciones"
+msgstr "Borrar todas las asociaciones"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Configuración"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Proveedor"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Sordos (CC)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Descargas"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Valoración"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Falló la búsqueda de subtítulos en línea."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Se interrumpió la búsqueda de subtítulos en línea."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Se completó la búsqueda de subtítulos; se hallaron %d."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Se completó la búsqueda de subtítulos y no se halló ninguno."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Descargar subtítulos"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Espere mientras se buscan los subtítulos en línea…"
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Interrumpiendo la búsqueda de subtítulos…"
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Nombre de usuario"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Estado"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Listo…"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "No implementado."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Subiendo…"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Se subieron los subtítulos correctamente."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Falló la subida de los subtítulos."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Se interrumpió la subida de los subtítulos."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Los subtítulos ya existen."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Espere mientras se suben los subtítulos…"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "La subida finalizó."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Se interrumpió la subida."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Falló la subida."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Descargar y abrir"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Configuración"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Restablecer"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Subir"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Bajar"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Abrir URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Idiomas"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "ERROR: no se pudo establecer la conexión con Internet."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Proporcionar datos de acceso al sitio web"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Proporcione sus datos de acceso para conectarse con:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Relación de aspecto: Asumir píxeles cuadrados (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Descargado [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Subir subtítulos"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "¿Está seguro de que quiere subir el archivo de subtítulo \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Descargando idiomas soportados..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "No se pudo guardar en \"%S\" con el nombre de usuario \"%S\".\n\nPor favor, introduzca el nombre de usuario y contraseña correctos o restablezca las credenciales para iniciar sesión como un usuario anónimo."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "La búsqueda automática y la descarga se deshabilitarán para todos los archivos audiovisuales cuya ruta contenga cualquiera de los patrones introducidos aquí.\nPor ejemplo, escriba: \"private dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"ruta\"\tEl archivo principal o carpeta a ser cargado\n\t\t(se permiten comodines, \"-\" denota entrada estándar)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"nombredeldoblaje\"\tCarga un archivo de audio adicional"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"archivo\"\tCarga un archivo de audio adicional (doblaje) desplazado XXms\n\t\t(si el archivo contiene \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tInicia el renderizado en modo D3D a pantalla completa"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"nombredelsubtítulo\"\tCarga un archivo de subtítulo adicional"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"nombredelfiltro\"\tCarga los filtros DirectShow desde una librería de enlace dinámico (dll) (comodines permitidos)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tSe ejecuta en modo DVD, \"ruta\" indica la carpeta del DVD (opcional)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tInicia la reproducción en el título T, capítulo C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tComienza la reproducción en el título T, posición P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tCarga todas las pistas de un CD audio o un (S)VCD,\n\t\t\"ruta\" indica la ruta a la unidad (opcional)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tAbre el dispositivo de vídeo predeterminado"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tAbre el archivo, no inicia su reproducción automáticamente"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tComienza la reproducción del archivo tan pronto se inicia el reproductor"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tCierra el reproductor tras la reproducción (sólo funciona cuando se usa con /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tCierra el sistema operativo tras la reproducción"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tPone el sistema operativo en modo suspensión tras la reproducción"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tHiberna el sistema operativo tras la reproducción"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tCierra sesión tras la reproducción"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tBloquea el equipo tras la reproducción"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tApaga el monitor tras la reproducción"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tAbre el siguiente archivo de la carpeta tras la reproducción"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tInicia el reproductor en pantalla completa"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tInicia el reproductor en modo minimizado"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tUsa una nueva instancia del reproductorº"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tAñade una \"ruta\" a la lista de reproducción, se puede combinar con /open y /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tReproduce en orden aleatorio la lista de reproducción"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tCrea asociaciones de archivo para archivos de vídeo"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tCrea asociaciones de archivo para archivos de audio"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tCrea asociaciones de archivo para archivos de listas de reproducción"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tCrea asociaciones de archivo para todos los tipos de archivo soportados"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tElimina todas las asociaciones de archivo"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tComienza la reproducción en \"ms\" (= millisegundos)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tComienza la reproducción en la posición hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tEstablece un tamaño de ventana fijado"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tInicia el reproductor en el monitor N, donde N comienza desde 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tSe inicia usando el renderizador de audio N, donde N comienza desde 1 (vea configuración de \"Salida\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tSe inicia usando el preajuste \"Pr\" de shader ('sombreador')"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"nombre\"\tEspecifica el nombre del modo de reencuadre (pan&scan) a usar"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tVuelve a asociar los iconos de formato"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tAbre MPC-HC en segundo plano"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tInicia la interfaz web en el puerto especificado"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tMuestra información de depuración sobreimpresionada (OSD)"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDeshabilita el informe de fallo"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tUsa MPC-HC en modo esclavo"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tEstablece el índice que indica la GPU a usar para la decodificación por hardware.\n\t\tSólo disponible para los modos CUVID y DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tRestablece la configuración predeterminada"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tMuestra la ayuda de parámetros de línea de comandos"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Valor umbral de puntuación para subtítulos que se van a descargar automáticamente. Valores más altos indican que se cargarán subtítulos con una coincidencia más precisa, valores más bajos podrían resultar en que se carguen subtítulos incorrectos, pero no hay un valor perfecto. Seleccione aquel que mejor le funcione."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Retardo del audio (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Tamaño en píxeles de la barra de herramientas predeterminada."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Usar antigua barra de herramientas en lugar de la nueva vectorizada."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.eu.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.eu.dialogs.po
index 7fd708a0c..1edf04053 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.eu.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.eu.dialogs.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Xabier Aramendi <azpidatziak@gmail.com>, 2013-2014
+# Xabier Aramendi <azpidatziak@gmail.com>, 2013-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 11:30+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-01-24 20:49+0000\n"
"Last-Translator: Xabier Aramendi <azpidatziak@gmail.com>\n"
-"Language-Team: Basque (http://www.transifex.com/projects/p/mpc-hc/language/eu/)\n"
+"Language-Team: Basque (http://www.transifex.com/mpc-hc/mpc-hc/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -109,16 +109,16 @@ msgid "Enable custom channel mapping"
msgstr "Gaitu norbere bide mapaketa"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Hotsgorailu itxurapena "
+msgid "Speaker configuration for"
+msgstr "Hotsgorailu itxurapena"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "Sarrera bideak:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Sakatu \"aldatu\" tekla berehalako aldaketarako zerbait klikatzerakoan "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Sakatu \"aldatu\" tekla berehalako aldaketarako zerbait klikatzerakoan"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -189,8 +189,8 @@ msgid "About"
msgstr "Honi buruz"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyrighta © 2002-2014 ikusi Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyrighta © 2002-2017 ikusi Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -294,7 +294,7 @@ msgstr "Finkatu mahigain hertzetara"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
msgid "Store settings in .ini file"
-msgstr "Biltegiratu ezarpenak .ini agirira"
+msgstr "Biltegiratu ezarpenak .ini agirian"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
@@ -421,12 +421,16 @@ msgid "time(s)"
msgstr "aldiz"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Berregin modua:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Irakurri Ondoren"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Irteera"
+msgid "Default zoom"
+msgstr "Berezko zooma"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -472,10 +476,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Berez-gertatu audio agiriak"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Erabili barne-eraikitako azpidatzi aurkezlea"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Agintea"
@@ -569,8 +569,8 @@ msgid "Warning"
msgstr "Kontuz"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Ezeztatzen baduzu eta gaitu ikusleiho-osoko hertzlehunketa zure bideo txartelaren ezarpenetan, azpidatziak ez dira hobeto ikusiko baina zure cpu-a jango dute."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Ezeztatzen baduzu eta ikusleiho-osoko hertz-lehunketa gaitu zure bideo txartelaren ezarpenetan, azpidatziak ez dira hobeto ikusiko baina zihurrenik zure CPU-a jango du."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -676,17 +676,17 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Saihestu TXIKIENTZEA Ikusleiho-osoa berezko monitorea ez denean"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Erabili Windows 7 Eginkizun-barra ezaugarriak"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Erabili eginkizun-barra hobetua ezaugarriak"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Ireki agiritegiko hurrengo/aurreko agiria 'Jauzi atzera/aurrera' irakur-zerrendan gai bakarra dagoenean"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Ireki agiritegiko hurrengo/aurreko agiria \"Jauzi atzera/aurrera\"-n irakur-zerrendan gai bakarra dagoenean"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "Denbora tresnaburua:"
+msgid "Show time tooltip:"
+msgstr "Erakutsi denbora oharra:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
@@ -1125,8 +1125,8 @@ msgid "Audio Renderer"
msgstr "Audio Aurkezlea"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (aurkezgabe) eta EVR (CP) ezarpenak"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (aurkezgabe) eta EVR (CP) ezarpenak"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1169,8 +1169,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Azpidatziak *"
+msgid "Subtitles"
+msgstr "Azpidatziak"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1185,8 +1185,12 @@ msgid "Rotation"
msgstr "Itzulikapena"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Kanpoko iragazkiek (VSFilter bezalakoak) azpidatziak aurkezle guztietan erakutsi ditzakete."
+msgid "Subtitle Renderer"
+msgstr "Azpidatzi Aurkezlea"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Katxea bildutako Itzalak"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1204,6 +1208,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Ahalbidetu sarbidea tokiko-hostalaritik bakarrik"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Gaitu aurreikuspena"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Irarkitu garbiketa argibideak"
@@ -1229,17 +1237,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI kudeatzaileak: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Azpidatziak eskuragarri online"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Jeitsi eta Ireki"
+msgid "Download subtitles"
+msgstr "Jeitsi azpidatziak"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Ordeztu orain gertatutako azpidatziak"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Jeitsi"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Berritu"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Utzi"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Aukerak"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Igo azpidatziak"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Igo"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Utzi"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Aukerak"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Gorde Honela..."
@@ -1277,8 +1313,8 @@ msgid "Enable automatic update check"
msgstr "Gaitu berezgaitasunezko eguneraketa egiaztapena"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Atzerap. egiazt. artean:"
+msgid "Check every:"
+msgstr "Egiaztapen epea:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1541,16 +1577,28 @@ msgid "Reset"
msgstr "Berrezarri"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Online datubasea"
+msgid "Online search, download and upload subtitles"
+msgstr "Online bilaketa, jeitsi eta igo azpidatziak"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Berezgaitasunez bilatu eta jeitsi azpidatziak ez bada bat ere aurkitzen bertan"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Hobetsi gorrentzako azpidatziak (azpidatzi hornitzaileak adierazitakoan)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ezikusi hurrengo hitzetako bat duten agiriak:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Onlineko azpidatzi datubaseko URL-a:"
+msgid "Languages in order of preference:"
+msgstr "Hizkuntza hobespen hurrenkera:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Azterketa"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Berezgaitasunez igo jarduneko azpidatzia bideo irakurketa amaitutakoan"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1638,7 +1686,7 @@ msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr "Ezarpen Aurreratuak, ez editatu zer egiten ari bazen jakinez gero ezik."
+msgstr "Ezarpen Aurreratuak, ez editatu zer egiten ari zaren jakinez gero ezik."
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
@@ -1652,6 +1700,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Berezkoa"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Gailua"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Modu esklusiboa"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Ahalbidetu bitjarioa"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Aukerak"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Ahalbidetu estereo zehar-elikadura (entzungailuentzat)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Ebaketa:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Maila:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Oharra"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Soinuaren zakartzea gutxientzeko, gomendagarria da irakurgailuaren bolumena %85 inguruan edukitzea galera-kodeaketa edukiak ozen irakurtzerakoan."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG ontasuna:"
@@ -1664,3 +1756,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "Ongi"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Matxura jakinarazpena"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Sentitzen dugu, dirudienez MPC-HC kraskatu egin da. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Bidali akats jakinarazpen bat arazoa ezagutzen eta zuzentzen laguntzeko."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Aukerazko argibideak"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Post@:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Zure posta helbidea aukerazkoa da eta garatzaileek argibide gehiagorako zurekin harremanetan jartzeko behar badute bakarrik erabiliko da."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Arazoaren azalpena (erabili Ingelera bakarrik):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Berrabiarazi MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Utzi MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.eu.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.eu.menus.po
index 01d8c17e1..67f6a6789 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.eu.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.eu.menus.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Xabier Aramendi <azpidatziak@gmail.com>, 2013-2014
+# Xabier Aramendi <azpidatziak@gmail.com>, 2013-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:50+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-07-07 11:10+0000\n"
"Last-Translator: Xabier Aramendi <azpidatziak@gmail.com>\n"
-"Language-Team: Basque (http://www.transifex.com/projects/p/mpc-hc/language/eu/)\n"
+"Language-Team: Basque (http://www.transifex.com/mpc-hc/mpc-hc/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +64,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Gorde &Txikirudiak..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "Azpidatziak"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
msgstr "Gertatu Az&pidatzia..."
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
msgstr "G&orde Azpidatzia..."
-msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Azpidatzi Datuba&sea"
-
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Bilatu..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Jeitsi Azpidatziak..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&Igo..."
-
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Jeitsi..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Igo Azpidatziak..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -142,7 +138,7 @@ msgstr "&Nabigazioa"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr "&Garbiketa Itzalak"
+msgstr "Garbike&ta Itzalak"
msgctxt "POPUP"
msgid "&Presets..."
@@ -196,13 +192,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Hauspen Azterketa"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Erakutsi Estatistikak"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "Erakutsi &Estatistikak"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Erakutsi Oraingo &Denbora"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Gelditzen den Denbora"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Erakutsi &Agiri Izena"
msgctxt "POPUP"
msgid "&Output Range"
@@ -404,17 +404,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Ikutu Leihoa &Kanpoaldetik"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Heutsi Ikuspegi Mailari"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "E&zeztatu Ikuspegi Maila"
+msgid "&Aspect Ratio"
+msgstr "Ik&uspegi Maila"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Berezkoa"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "B&erezkoa (BIM)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,6 +432,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Pi&xel Karratuak Suposatuz (KIM)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Z&uzendu Monitore/Mahaigain IM Aldea"
@@ -510,7 +510,7 @@ msgstr "Irakurtzerakoan"
msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
msgid "While Playing &Video"
-msgstr "Bideoa Irakurtzerakoan"
+msgstr "Bi&deoa Irakurtzerakoan"
msgctxt "ID_VIEW_OPTIONS"
msgid "&Options..."
@@ -529,9 +529,25 @@ msgid "&Stop"
msgstr "&Gelditu"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "&Frame Urratsa"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Berregin"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "E&tengabe"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Agiria"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Irakur-zerrenda"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "Gut&xitu Neurria"
@@ -553,16 +569,16 @@ msgid "S&haders"
msgstr "It&zalak"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audioa"
+msgid "&Audio Track"
+msgstr "&Audio Bidea"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Az&pidatziak"
+msgid "Su&btitle Track"
+msgstr "Az&pidatzia Bidea"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Bi&deo Jarioa"
+msgid "Vide&o Track"
+msgstr "Bi&deo Bidea"
msgctxt "POPUP"
msgid "&Volume"
@@ -584,9 +600,21 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Irakurri &Ondoren"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "E&z egin ezer"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Irakurri &agiritegiko hurrengoa"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Itzali &monitorea"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
-msgstr "Irten"
+msgstr "I&rten"
msgctxt "ID_AFTERPLAYBACK_STANDBY"
msgid "&Stand By"
@@ -598,7 +626,7 @@ msgstr "Neguratu"
msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
msgid "Shut&down"
-msgstr "I&tzali"
+msgstr "Itzali"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
@@ -608,10 +636,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Blokeatu"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Itzali &monitorea"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Nabigatu"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.eu.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.eu.strings.po
index d572f8051..b50e406cc 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.eu.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.eu.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Xabier Aramendi <azpidatziak@gmail.com>, 2013-2014
+# Xabier Aramendi <azpidatziak@gmail.com>, 2013-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-04 09:50+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-04 12:42+0000\n"
"Last-Translator: Xabier Aramendi <azpidatziak@gmail.com>\n"
-"Language-Team: Basque (http://www.transifex.com/projects/p/mpc-hc/language/eu/)\n"
+"Language-Team: Basque (http://www.transifex.com/mpc-hc/mpc-hc/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -60,10 +60,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Ezaugarriak"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Agiria"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Berezko Estiloa"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Irakur-zerrenda"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Agiriak"
@@ -116,6 +124,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Aurkezpen xedea oraindik zehaztugabe badago, SSA/ASS azpidatziak bideo framearekiko aurkeztuko dira eta beste idazki azpidatzi guztiak leihoarekiko aurkeztuko dira."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Berregin Modua: Irakur-zerrenda"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Berregin Modua: Agiria"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Berregin Etengabe: Bai"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Berregin Etengabe: Ez"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Berregin Etengabe"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Inoiz ez (fokutze azkarrena)"
@@ -325,12 +353,12 @@ msgid "On/Off"
msgstr "Eraginda/Etenda"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "fs-kotik "
+msgid "From (FPS)"
+msgstr "Hemendik (FS-ko)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "fs-kora"
+msgid "To (FPS)"
+msgstr "Hona (FS-ko)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -464,6 +492,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Irakurketa::Itzalak"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Baliabideak"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Askotarikoa"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "Multimedia Argibideak"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Irakurketa::Harpena"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Irakurketa::Aldib. Aurkezle Ezarpenak"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Irakurketa::Ikusleiho-osoa"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Barneko Iragazkiak::Audio Aurkezlea"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Audio Aldagailua"
@@ -488,18 +544,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Gainjarpen Nahastzaile Aurkezlea"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Bideo Nahastzaile Aurkezlea 7 (leihotuta)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Bideo Nahastzaile Aurkezlea 9 (leihotuta)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Bideo Nahastzaile Aurkezlea 7 (aurkezgabe)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Bideo Nahastzaile Aurkezlea 9 (aurkezgabe)"
@@ -552,34 +600,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Irakurgailua::Web Interfazea"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Azpidatziak::Datubasea"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Baliabideak"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Askotarikoa"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "Multimedia Argibideak"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Irakurketa::Harpena"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Irakurketa::Aldib. Aurkezle Ezarpenak"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Irakurketa::Ikusleiho-osoa"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Xehetasunak"
@@ -600,17 +620,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Betik aurkezten du gainjarpenean. Orokorrean YUV heuskarriak bakarrik daude ahalbidetuta, baina zuzenean aurkezten dira RGB-rako margo bihurketarik gabe. Hau da aurkezpen metodo azkarrena guztien artean eta ikusleiho-osoko telebista irteerarako bideo ispilu zihur bakarra."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Windows XP-ren berezko aurkezlea. Oso egonkorra eta apur bat astiroagoa bakarrik Gainjarpen nahastzailearekiko. DirectDraw erabiltzen du eta Gainjarpenean abiarazten da ahal duenean."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Eskuragarri bakarrik DirectX 9 ezarrita baduzu. VMR-7-ren (leihotuta) gaitasun berak ditu, baina inoiz ezingo du Gainjarpen aurkezpena erabili eta honegaitik VMR-7 (leihotuta) baino apur bat astiroagoa izan daiteke."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "VMR-7-ren berdina da (leihotuta), baina MPC-HC-ren Banantzaile-Aurkezle pluginarekin azpidatzientzat. Bideo gainjarpen ispiluak EZ DU lanik egingo. 'True Color' mahigain margo tartea gomendatuta."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Eskuragarri bakarrik DirectX 9 ezarrita baduzu. Oso egonkorra baina inoiz ez du erabiltzen Gainjarpen aurkezpena eta horregaitik Gainjarpen nahastzailea baino apur bat astiroagoa izan daiteke."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -621,8 +633,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "VMR-9 (aurkezgabe) bezalakoa, baina egizko bi-urratseko birneurriratzaile bikubikoa erabiltzen du."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Edozein bideo-erako multimedia motarekn elkartzen da eta barrurako laginak inora ez bidaliko ditu. Erabili bideo erakuspenik behar ez duzunean eta cpu-a gordetzea nahi duzunean alperrik lan egitetik."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Edozein bideo-erako multimedia motarekn elkartzen da eta barrurako laginak inora ez bidaliko ditu. Erabili bideo erakuspenik behar ez duzunean eta CPU-a gordetzea nahi duzunean alperrik lan egitetik."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -648,10 +660,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Real-ren bere aurkezlea. SMIL eskriptak egingo dute lan, baina berrizpenak zihurrenik ez. DirectDraw erabiltzen du eta Gainjarpenean abiarazten da ahal duenean."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Real-ren gailuaren irteera VMR-7-ren (aurkezgabe) DX7-ohinarriko Banantzaile-Aurkezleak aurkeztuta."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Real-ren gailuaren irteera VMR-9-ren (aurkezgabe) DX9-ohinarriko Banantzaile-Aurkezleak aurkeztuta."
@@ -660,10 +668,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "QuickTime-ren bere aurkezlea. Apur bat astiroa bideo eremua birneurriratua bada edo beste leiho batez erdi estalia. Gainjarpena ez dagoenean eskuragarri GDI-ra itzultzeko joera dau."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "QuickTime-ren gailuaren irteera VMR-7-ren (aurkezgabe) DX7-ohinarriko Banantzaile-Aurkezleak aurkeztuta."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "QuickTime-ren gailuaren irteera VMR-9-ren (aurkezgabe) DX9-ohinarriko Banantzaile-Aurkezleak aurkeztuta."
@@ -672,22 +676,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Bideo azalera ikusleiho-kanpoko azalera arrunt bat bezala izendatuko da."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Aurkezlea hautsita dago, ez erabili."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Aldb Aurkezlea"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Akats jakinarazpena"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC matxuratu eginda baina eraiketa hau garbiketa argibide gabe bildatakoa da.\nAkats hau jakinaraztea nahi baduzu, lehenik saiatu eraiketa ofizial batekin.\n\nNahi duzu jeisketa orrialdea orain ikustea?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Ikusleiho-kanpoko gainazal lau arrunta"
@@ -740,9 +732,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (konprimitugabea)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Aurkezlea"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Barneko Audio Aurkezlea"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -756,9 +748,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Barneraturiko baliabidea zure nabigatzailean ikusteko web interfazea gaitu behar duzu.\n\nErabili \"Gorde Honela\" botoia argibideak bakarrik gordetzea nahi badituzu."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Jeitsi azpidatziak"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Jeitsi azpidatziak..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Igo Azpidatziak..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -789,7 +785,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Ezinezkoa agiritegiko bolumen guztiak aurkitzea"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Bideo azalera egitura bat bezala banatuko da baina oraindik 2d eginkizunak atzebufferrean kopiatzeko eta luzatzeko erabiliko dira. Behar du 32 bit izendatu ditzakeen bideo txartel bat, RGBA, non-power-of-two neurritutako egiturak eta gutxienez bideoaren bereizmenean."
msgctxt "IDC_TEXTURESURF3D"
@@ -816,6 +812,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Hauspena murrizten du D3D barne eraikitako berezko ZAldb-tik igaro gabe."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Sintonizagailu mihaketa"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Azpidatziak ez dira geratatu edo aurkezle sostengugabea."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Bildutako itzalak tokiko AppDatan biltegiratzen ditu gertatze denbora bizkortzeko."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Ireki VTS_xx_0.ifo VTS_xx_x.vob agiriak atal bakarrean gertatzeko"
@@ -854,7 +862,7 @@ msgstr "Azpirudi buffer zenbatekoa handitzeak orokorrean aurkezpen egintza hobet
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
-msgstr "Botoi hau sakatu ondoren, hautatutako multzo heuskarri egoerak MPC-HC-rentzat oraingo agiri elkarketa adieraziko du. Berriki gehitutako hedapen ba arrunt urdinabarrago ikusiko da, hortaz ez ahaztu hura berriro hautatzeaz elkarrizketa hau itxitakoan!"
+msgstr "Botoi hau sakatu ondoren, hautatutako multzo heuskarri egoerak MPC-HC-rentzat oraingo agiri elkarketa adieraziko du. Berriki gehitutako hedapen ba arrunt urdinabarrago ikusiko da, hortaz ez ahaztu hura berriro hautatzeaz elkarrizketa hau itxitakoan!"
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
@@ -888,7 +896,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Mututu"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Desmututu"
@@ -953,12 +961,12 @@ msgid "&Organize Favorites..."
msgstr "&Antolatu Gogokoenak..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "Nahastu"
+msgid "Sh&uffle"
+msgstr "Na&hastu"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Ireki agiri kokalekua"
+msgid "Ope&n file location"
+msgstr "Ireki agiri &kokalekua"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -1041,8 +1049,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "&Zooma Ultra-Ikusleiho-zabalera,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Ezkutatu Ikusleiho-osoan"
+msgid "&Hide on Fullscreen"
+msgstr "E&zkutatu Ikusleiho-osoan"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1229,8 +1237,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "Gehitu edukiaren agiritegia"
+msgid "Add containing &folder"
+msgstr "Gehitu &edukiaren agiritegia"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1336,6 +1344,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<zehaztu gabe>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Behatu"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Mugitu Gora"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Mugitu Behera"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Antolatu LCN-z"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Kendu denak"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Zihur zaude bide guztiak kentzea nahi dituzula zerrendatik?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Ez dago argibiderik eskuragarri"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Mesedez itxaron, azterketa garatzen..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "IM %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Agirira oharreratzea gaitzen du (beharrezkoa berrabiaraztea)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Gelditzen den denbora"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Zehaztasun handia"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Irakurri Ondoren: Atzerabildu agiria"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Irakurri Ondoren: Itxi"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC-k arazo bat aurkitu du abiarazpenean. Zure laguntzarekin arazoa zuzentzeko gai izan gaitezke.\n\nJakinaraztea nahi duzu?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Sartu balio positibo bat audioa aurreratua badago, balio negaitboa atzeratua badago."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Aurreikuspena orain ezgaituta dago. MPC-HC-ren aukeratan gaitu dezakezu."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Aukera hau multimedia agiriak hurruneko kokaleku batetik ikusteko erabili daiteke. Erabili segurtasun egokia duen sare pribatu batean bakarrik.\n\nEgitan nahi duzu aukera hau gaitzea?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Barneko Azpidatzi Aurkezlea"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Ireki Gailua"
@@ -1356,13 +1440,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Irudia ongi gorde da"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Gertatu Azpidatzia"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Gertatu Azpidatziak..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Gorde Azpidatzia"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Gorde Azpidatziak..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1385,11 +1469,11 @@ msgid "Stop"
msgstr "Gelditu"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Frame-urratsa"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Frame-urratsa atzera"
msgctxt "IDS_AG_GO_TO"
@@ -1489,8 +1573,8 @@ msgid "Thumbnails saved successfully"
msgstr "Txikirudiak ongi gorde dira"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "&Bideo Jarioa"
+msgid "Vide&o Track"
+msgstr "&Bideo Bidea"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1537,12 +1621,12 @@ msgid "Reset Rate"
msgstr "Berrezarri Neurria"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Audio Atzerapena +10sm"
+msgid "Audio Delay +10 ms"
+msgstr "Audio Atzerapena +10 sm"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Audio Atzerapena -10sm"
+msgid "Audio Delay -10 ms"
+msgstr "Audio Atzerapena -10 sm"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
@@ -1612,14 +1696,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Aldatu Azpidatzia Eskuinera"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Erakutsi Estatistikak"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Jauzi Hasierara"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "IGE: Erakutsi Agiri Izena"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Irakurri DVD-a"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Irakurri BD-a"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "IGE: Erakutsi Aurkezle Estatistikak"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "IGE: Berrezarri Aurkezle Estatistikak"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Azpidatziak::Askotarikoa"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Ezkutatu hertzak\tKtrl+0"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "&Framea Bakarrik"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Erakutsi Harpen-Menua\tKtrl+0"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Ezkutatu &Menua\tKtrl+0"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Aurreratua"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Ikusi Txikien"
@@ -1685,8 +1809,8 @@ msgid "PnS Dec Height"
msgstr "PnS Txik Garaiera"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Azpidatzia(k) jeisten, mesedez itxaron."
+msgid "Downloading [%s] \"%s\""
+msgstr "Jeisten [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1697,8 +1821,8 @@ msgid "No subtitles found."
msgstr "Ez da azpidatzirik aurkitu."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d azpidatzi eskuragarri."
+msgid "%d subtitle(s) available."
+msgstr "%d azpidatzi eskuragarri."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1853,12 +1977,12 @@ msgid "Boss key"
msgstr "Tekla nagusia"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Irakurgailu Menua (laburra)"
+msgid "Player Menu"
+msgstr "Irakurgailu Menua"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Irakurgailu Menua (luzea)"
+msgid "Player Menu (full)"
+msgstr "Irakurgailu Menua (osoa)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1869,20 +1993,20 @@ msgid "Options"
msgstr "Aukerak"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Hurrengo Audioa"
+msgid "Next Audio Track"
+msgstr "Hurrengo Audio Bidea"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Aurreko Audioa"
+msgid "Prev Audio Track"
+msgstr "Aurreko Audio Bidea"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Hurrengo Azpidatzia"
+msgid "Next Subtitle Track"
+msgstr "Hurrengo Azpidatzi Bidea"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Aurreko Azpidatzia"
+msgid "Prev Subtitle Track"
+msgstr "Aurreko Azpidatzi Bidea"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1892,22 +2016,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Birgertatu Azpidatzia"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Hurrengo Audioa (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Aurreko Audioa (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Hurrengo Azpidatzia (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Aurreko Azpidatzia (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Hurrengo Angelua (DVD)"
@@ -1917,28 +2025,28 @@ msgid "Prev Angle (DVD)"
msgstr "Aurreko Angelua (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Hurrengo Audioa (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Hurrengo Audio Bidea (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Aurreko Audioa (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Aurreko Audio Bidea (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Hurrengo Azpidatzia (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Hurrengo Azpidatzi Bidea (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Aurreko Azpidatzia (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Aurreko Azpidatzi Bidea (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Eragin/Eten Azpidatzia (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Gelditzen den Denbora"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "IGE: Erakutsi Oraingo Denbora"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1964,11 +2072,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Enkriptatuta"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Bai"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Ez"
@@ -2025,12 +2133,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Bolumena: %02lu/%02lu, Izenburua: %02lu/%02lu, Atala: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
-msgstr "Angelua: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Angelua: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbit %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bit %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2120,14 +2228,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Irudi zabalera"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL-a zuzen bezala agertzen da!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Protokolo bertsioa ez dator bat, mesedez eguneratu zure irakurgailua edo hautatu beste helbide bat!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Ikuspegi Maila"
@@ -2137,20 +2237,20 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Guztira: %ld, Utzita: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", Neurria: %I64dKB"
+msgid ", Size: %I64d KB"
+msgstr ", Neurria: %I64d KB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", Neurria: %I64dMB"
+msgid ", Size: %I64d MB"
+msgstr ", Neurria: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", Aske: %I64dKB"
+msgid ", Free: %I64d KB"
+msgstr ", Aske: %I64d KB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", Aske: %I64dMB"
+msgid ", Free: %I64d MB"
+msgstr ", Aske: %I64d MB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
@@ -2221,8 +2321,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Txikirudiak txikiegiak dira, ezinezkoa agiria sortzea.\n\nSaiatu txikirudi zenbateko txikiago batekin edo handitu neurri orokorra."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Azpidatziak gertatzeko bideo aurkezlea aldatu eta agiria berrireki behar duzu.\n- DirectShow: VMR-7/VMR-9 (aurkezgabe), EVR Egile, EVR Aldib, edo Haali\n- RealMedia: RealMediarako aurkezle berezia, edo ireki DirectShow bidez\n- QuickTime: DX7 edo DX9 aurkezleak QuickTimerako\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Azpidatziak gertatzeko bideo aurkezle mota aldatu eta agiria berrireki behar duzu.\n- DirectShow: VMR-9 (aurkezgabe), EVR (CP), Aldib, madVR edo Haali\n- RealMedia: RealMedia-rako aurkezle berezia, edo ireki DirectShow bidez\n- QuickTime: DX7 edo DX9 aurkezleak QuickTime-rako\n- ShockWave: e/g"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2233,12 +2333,12 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Ikuspegi Maila: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Ikuspegi Maila: Berezkoa"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Ikuspegi Maila: Berezkoa (BIM)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Audio Atzerapena: %I64dsm"
+msgid "Audio delay: %I64d ms"
+msgstr "Audio Atzerapena: %I64d sm"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2249,8 +2349,8 @@ msgid "Out of memory"
msgstr "Oroimenetik kanpo"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Akatsa: IE-rako Flash irakurgailua beharrezkoa da"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Akatsa: Beharrezkoa da Internet Explorer-rako Flash irakurgailua"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2272,10 +2372,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Hutsegitea agiria aurkezterakoan"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL gaitza, ezin da azpidatzi datubasea hor aurkitu!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Atala: "
@@ -2296,14 +2392,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Oraingoa"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC-k ustekabean amaitu du. Arazo hau zuzentzen laguntzeko, mesedez bidali '%s' agiri hau gure akats aztarnariari.\n\nNahi duzu minidump agiria duen agiritegia ireki eta gure akats aztarnaria orain ikustea?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Hutsegitea hondakin agiria sortzerakoan \"%s\"-ra (akatsa %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Hautatu Zuzenbidea"
@@ -2321,7 +2409,7 @@ msgid "Toggle Caption&Menu"
msgstr "Aldatu Harpena eta Menua"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Aldatu Bilatzailea"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2477,8 +2565,8 @@ msgid "Volume boost Max"
msgstr "Bolumen bultzada Gehiena"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Erabilpena: mpc-hc.exe \"helburu-izena\" [aldagailuak]\n\n\"pathname\"\tGertatzeko agiri edo zuzenbide nagusia\n\t\t(ordezhizkiak ahal dira, \"-\"-k sarrera estandarra adierazten du)\n/dub \"dubname\"\tGertatu audio agiri gehigarri bat\n/dubdelay \"file\"\tGertatu audio agiri gehigarri bat XXsm aldatuta\n\t\t(baldin agiriak baditu \"...ATZERAPENA XXsM...\")\n/d3dfs\t\tHasi aurkezpena D3D ikusleiho-osoko moduan\n/sub \"subname\"\tGertatu azpidatzi agiri gehigarri bat\n/filter \"filtername\"\tGertatu DirectShow iragazkiak lotura dinamiko\n\t\tliburutegi batetik (ordezhizkiak ahal dira)\n/dvd\t\tEkin dvd moduan, \"helburu-izena\" esanahi du\n\t\tdvd agiritegia (aukerazkoa)\n/dvdpos T#C\tHasi irakurketa I izenburuan, A atalean\n/dvdpos T#hh:mm\tHasi irakurketa I izenburuan, kokapena oo:mn:sg\n/cd\t\tGertatu cd edo (s)vcd audio bide guztiak,\n\t\t\"helburu-izena\" esanahi du gidagailu helburua\n\t\t(aukerazkoa)\n/device\t\tIreki berezko bideo gailua\n/open\t\tIreki agiria, ez hasi irakurketa berezgaitasunez\n/play\t\tHasi agiriaren irakurketa irakurgailua abiaraziz\n\t\tbezain laister\n/close\t\tItxi irakurgailua irakurketaren ondoren\n\t\t(bakarrik lan egiten du /irakurri erabiltzen denean)\n/shutdown\tItzali sistema eragilea irakurketaren ondoren\n/fullscreen\tHasi ikusleiho-osoko moduan\n/minimized\tHasi txikien moduan\n/new\t\tErabili irakurgailuaren eskabide berri bat\n/add\t\tGehitu \"helburu-izena\" irakur-zerrendara,\n\t\tnahastu daiteke /ireki eta /irakurrirekin\n/regvid\t\tSortu agiri elkarketak bideo agirientzat\n/regaud\t\tSortu agiri elkarketak audio agirientzat\n/regpl\t\tSortu agiri elkarketak irakur-zerrendentzat\n/regall\t\tSortu agiri elkarketak sostengatutako\n\t\tagiri mota guztientzat\n/unregall\t\tKendu agiri elkarketa guztiak\n/start ms\t\tHasi irakurketa \"sm\" (= segundumilaenetan)\n/startpos hh:mm:ss\tHasi irakurketa kokapen honetan oo:mn:sg\n/fixedsize w,h\tEzarri zuzendutako leiho neurria\n/monitor N\tHasi irakurketa N monitorean,\n\t\tnon N hasten den 1-etik\n/audiorenderer N\tHasi N audio-aurkezlea erabiliz,\n\t\tnon N hasten den 1-etik (ikusi \"Irteera\" ezarpenak)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tBerrezarri berezko ezarpenak\n/help /h /?\tErakutsi komando lerro aldaketa laguntza\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Erabilpena: mpc-hc.exe \"helburu-izena\" [aldagaiak]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2564,14 +2652,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Gaitu iragazki guztiak"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Sintonizagailu mihaketa"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Azpidatziak ez dira geratatu edo aurkezle sostengugabea."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Egile ezezaguna. Jarri nirekin harramanetan zeuk egin baduzu!"
@@ -2660,41 +2740,13 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Goi Atze Eskuinean"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Berrezarri Erakutsi Estatistikak"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Azpidatziak::Askotarikoa"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Ezkutatu hertzak\tKtrl+0"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Framea Bakarrik\tKtrl+0"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Erakutsi Harpen-Menua\tKtrl+0"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Ezkutatu &Menua\tKtrl+0"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Aurreratua"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
-msgstr "Bilaketabarra gainean"
+msgid "Above seek bar"
+msgstr "Bilaketa barra gainean"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
-msgstr "Bilaketabarra azpian"
+msgid "Below seek bar"
+msgstr "Bilaketa barra azpian"
msgctxt "IDS_VIDEO_STREAM"
msgid "Video: %s"
@@ -2861,8 +2913,8 @@ msgid "Other Audio"
msgstr "Bestelako Audioa"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2872,6 +2924,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Galeragabe"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audioa"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Kodeka"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2936,22 +3008,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audioa"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audioa"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Kodeka"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Irakur-zerrenda"
@@ -2976,18 +3032,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Ikuspegi Maila"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Erabili WASAPI (Berrabiarazi irakurketa)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Mututu aurrera azkarrean"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Soinu Gailua:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "ZAldb: Eraginda"
@@ -3276,6 +3320,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Berrirabazi bolumena: Etenda"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "byte"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3333,7 +3381,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Akatsa sartutako frame neurria aztertzerakoan!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Ezinezkoa frame urratsa, saiatu beste bideo aurkezle batekin."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3352,10 +3400,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "'Gorde Irudia' eta 'Gorde Txikirudiak' eginkizunek ez dute lan egiten Gainjarpen Nahastzaile bideo aurkezlearekin.\nAldatu bideo aurkezlea MPC-ren irteera aukeratan eta berrireki agiria."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Ezinezkoa onlineko azpidatzi datubasearekin elkartzea."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "EEZ editatzailea eragitea nahi duzu?"
@@ -3424,9 +3468,9 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Ezarpen berriak ezarri behar dituzu aztertu aurretik."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
-msgstr "Irakurketa Ondoren: Irten"
+msgstr "Irakurri Ondoren: Irten"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
@@ -3452,6 +3496,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Irakurri Ondoren: Itzali monitorea"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Irakurketaren ondoren: Irakurri agiritegiko hurrengo agiria"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Irakurketaren ondoren: Ez egin ezer"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Dizdira: %s"
@@ -3532,3 +3584,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Ezarpenak"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Hornitzailea"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Gorrentzat"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Jeitsierak"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Maila"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Onlineko azpidatzi bilaketa hutsegitea."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Onlineko azpidatzi bilaketa utzita."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Onlineko azpidatzi bilaketa osatuta, %d azpidatzi aurkituta."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Onlineko azpidatzi bilaketa osatuta, ez da azpidatzirik aurkitu."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Jeitsi azpidatziak"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Azpidatziak bilatzen online, mesedez itxaron..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Onlineko azpidatzi bilaketa uzten..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Erabiltzaile-izena"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Egoera"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Gertu..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Ezarri gabe."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Igotzen..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Azpidatzia ongi igo da."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Azpidatzi igoera hutsegitea."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Azpidatzi igoera utzita."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Azpidatzia badago jadanik."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Azpidatzia igotzen, mesedez itxaron..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Igoera amaituta."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Igoera utzita."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Igoera hutsegitea."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Jeitsi eta Ireki"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Ezarpena"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Berrezarri"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Mugitu Gora"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Mugitu Behera"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Ireki Url-a"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Hizkuntzak"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "AKATSA: Internet elkarketa ezin da ezarri."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Sartu webgune kredentzialak"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Sartu zure kredentzialak elkartzeko hona:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Ikuspegi Maila: Pixel Karratuak Suposatuz (KIM)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Jeitsita [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Igo azpidatziak"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Zihur zaude \"%s\" azpidatzi agiria igotzea nahi duzula?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Sostengatutako hizkuntzak lortzen..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Hutsegitea \"%S\" saioa hasterakoan \"%S\" erabiltzaile-izenarekin.\n\nMesedez sartu erabiltzaile-izen eta sarhitz zuzena edo berrezarri ezagutarazleak izengabeko erabiltzaile bezala hasteko saioa."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Berezgaitasunez bilatu eta jeitsi ezgaitu egingo da multimedia agiri guztientzat helburuak hemen sartutako ereduetako bat duenean.\nAdibidez, honelakoak: \"pribatua dir\\bideoak|lana\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pathname\"\tGertatzeko agiri nagusia edo zuzenbidea\n\t\t(ordez-hizkiak ahalbidetuta, \"-\" sarrera estandarra adierazten du)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"\tGertatu audio agiri gehigarri bat"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"file\"\tGertatu audio agiri gehigarri bat XXms-rekin aldatuta\n\t\t(Agiriak \"...ATZERPENA XXms...\" badu)"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tHasi aurkezpena D3D ikusleiho-osoko moduan"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"\tGertatu azpidatzi agiri gehigarri bat"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtername\"\tGertatu DirectShow iragazkiak lotura dinamikoko liburutegi batetik (ordez-hizkiak ahalbidetuta)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tEkin DVD moduan, \"helburu-izena\" DVD agiritegia esanahi du (aukerazkoa)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tHasi irakurketa T izenburuko, C atalean"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tHasi irakurketa T izenburuan, P kokapenean (oo:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tGertatu cd edo (S)VCD bateko audio bide guztiak,\n\t\t\"helburu-izena\"-k gidagailu helburua esanahi du esanahi du (aukerazkoa)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tIreki berezo bideo gailua"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tIreki agiria, ez hasi irakurketa berezgaitasunez"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tHasi agiria irakurtzen irakurgailua abiarazi bezain laister"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tItxi irakurgailua irakurketaren ondoren (\\play-rekin erabiltzen denean bakarrik jarduten du)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tItzali sistema eragilea irakurketaren ondoren"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tJarri sistema eragilea egonean moduan irakurketaren ondoren"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tNeguratu sistema eragilea irakurketaren ondoren"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tAmaitu saioa irakurketaren ondoren"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tBlokeatu lan-estazioa irakurketaren ondoren"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tItzali monitorea irakurketaren ondoren"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tIreki agiritegiko hurrengo agiria irakurketaren ondoren"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tHasi ikusleiho-osoko moduan"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tHasi modu txikienduan"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tErabili irakurgailuaren eskabide berri bat"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tGehitu \"helburu-izena\" irakur-zerrendara, /open eta /play-rekin batera erabili daiteke"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tZorizkotu irakur-zerrenda"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tSortu agiri elkarketak bideo agirientzat"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tSortu agiri elkarketak audio agirientzat"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tSortu agiri elkarketak irakur-zerrenda agirientzat"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tSortu agiri elkarketak sostengatutako agiri mota guztientzat"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tKenndu agiri elkarketa guztiak"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tHasi irakurketa hemen \"sm\" (= segundumilaen)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tHasi irakurketa oo:mm:ss kokapenean"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tEzarri leiho neurri finko bat"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tHasi irakurgailua N monitorean, non N 1-etaik hasten da"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tHasi N audio-aurkezlea erabiliz, non N 1-etatik hasten da (Ikusi \"Irteera\" ezarpenak)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tHasi \"Pr\" itzal aurrezarpena erabiliz"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\tAdierazi erabiliko den Pan&Scan aurrezarpen izena"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tBerrelkartu heuskarri ikurrak"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tIreki MPC-HC barrenean"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tHasi web interfazea adierazitako atakan"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tErakutsi garbiketa argibideak IGE-an"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tEzgaitu matxura jakinarazpenak"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tErabili MPC-HC esklabu bezala"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tEzarri hardware dekodeaketarako erabilitako GPU aurkibidea.\n\t\tEskuragarri bakarrik CUVID eta DXVA2-rako (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tLeheneratu berezko ezarpenak"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tErakutsi agindu lerro aldaketa buruzko laguntza"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Berezgaitasunez jeitsiko diren azpidatzientzako muga balioa. Balio handiagoak zehaztasun gehien duten azpidatziak gertatuko direla esanahi du, balio txikiagoek azpidatzi okerrak gertatzea eragin dezakete, baina ez dago balio ezinhobe bat. Hautatu zuretzat hobekien lan egiten duen bat."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Audio Atzerapena (sm)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Berezko tresnabarraren neurria pixeletan."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Erabili ondorena tresnabarra bektorizatutako berri baten ordez."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Kopiatu URL-a"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.fi.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.fi.dialogs.po
new file mode 100644
index 000000000..7280f9af9
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.fi.dialogs.po
@@ -0,0 +1,1798 @@
+# MPC-HC - Strings extracted from dialogs
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Matti Ylönen <maanylon@gmail.com>, 2016
+# Khaida <mrktarvainen@gmail.com>, 2014
+# phewi <phewnix@gmail.com>, 2014
+# Raimo K. Talvio, 2014
+# Sauli Ketola <sauli.ketola@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Finnish (http://www.transifex.com/mpc-hc/mpc-hc/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
+msgid "Select Media Type"
+msgstr "Valitse mediatyyppi"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
+msgid "Cancel"
+msgstr "Peruuta"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
+msgid "Set"
+msgstr "Aseta"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Audio"
+msgstr "Ääni"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Output"
+msgstr "Ulostulo"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
+msgid "Record Video"
+msgstr "Nauhoita video"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
+msgid "Preview"
+msgstr "Esikatsele"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
+msgid "Record Audio"
+msgstr "Nauhoita ääntä"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
+msgid "Preview"
+msgstr "Esikatselu"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "V/A Buffers:"
+msgstr "V/A Puskurit:"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
+msgid "Audio to wav"
+msgstr "Ääni wav-muotoon"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
+msgid "Record"
+msgstr "Nauhoita"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
+msgid "Enable built-in audio switcher filter (requires restart)"
+msgstr "Käytä sisäistä äänivaihtosuodinta [vaatii uudelleenkäynnistyksen]"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
+msgid "Normalize"
+msgstr "Normalisoi"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
+msgid "Max amplification:"
+msgstr "Maksimivahvistus:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
+msgid "Regain volume"
+msgstr "Säädä voimakkuus"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
+msgid "Boost:"
+msgstr "Voimistus:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
+msgid "Down-sample to 44100 Hz"
+msgstr "Alinäytteistä 44100 Hz:iin"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
+msgid "Audio time shift (ms):"
+msgstr "Äänen ajansiirto (ms):"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
+msgid "Enable custom channel mapping"
+msgstr "Käytä mukautettua kanavakartoitusta"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
+msgid "Speaker configuration for"
+msgstr "Kaiutinasetukset"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
+msgid "input channels:"
+msgstr "Sisääntulokanavat:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Pidä vaihto-näppäin pohjassa tehdäksesi muutokset heti klikattaessa"
+
+msgctxt "IDD_GOTO_DLG_CAPTION"
+msgid "Go To..."
+msgstr "Mene..."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
+msgstr "Anna aikakoodi muodossa [hh:]mm:ss.ms hypätäksesi haluttuun aikaan. Erottimia ei tarvitse antaa täsmällisesti."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Time"
+msgstr "Aika"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK1"
+msgid "Go!"
+msgstr "Mene!"
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
+msgstr "Anna kaksi numeroa hypätäksesi haluttuun kehykseen, ensimmäinen on kehysnumero, toinen kehysnopeus."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Frame"
+msgstr "Kehys"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK2"
+msgid "Go!"
+msgstr "Mene!"
+
+msgctxt "IDD_OPEN_DLG_CAPTION"
+msgid "Open"
+msgstr "Avaa"
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
+msgstr "Kirjoita elokuva- tai äänitiedoston osoite (Internetissä tai tietokoneessa) ja soitin avaa sen sinulle."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Open:"
+msgstr "Avaa:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Selaa..."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
+msgid "Dub:"
+msgstr "Dubbaa:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Selaa..."
+
+msgctxt "IDD_OPEN_DLG_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_OPEN_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Peruuta"
+
+msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
+msgid "Add to playlist without opening"
+msgstr "Lisää soittolistaan avaamatta"
+
+msgctxt "IDD_ABOUTBOX_CAPTION"
+msgid "About"
+msgstr "Tietoja"
+
+msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Tekijänoikeudet © 2002-2017 katso Authors.txt"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "This program is freeware and released under the GNU General Public License."
+msgstr "Tämä ohjelma on ilmainen ja se on julkaistu GNU General Public Licensen alla."
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "English translation made by MPC-HC Team"
+msgstr "Englanninkielinen käännös tehty MPC-HC:n tiimin toimesta"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build information"
+msgstr "Koontiversiotiedot"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Version:"
+msgstr "Versio:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Compiler:"
+msgstr "Kääntäjä:"
+
+msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
+msgid "Not used"
+msgstr "Ei käytössä"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build date:"
+msgstr "Koontiversion päiväys:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Operating system"
+msgstr "Käyttöjärjestelmä"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Name:"
+msgstr "Nimi:"
+
+msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
+msgid "Copy to clipboard"
+msgstr "Kopioi leikepöydälle"
+
+msgctxt "IDD_ABOUTBOX_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Open options"
+msgstr "Avaa asetukset"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
+msgid "Use the same player for each media file"
+msgstr "Käytä samaa soitinta jokaiselle mediatiedostolle"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
+msgid "Open a new player for each media file played"
+msgstr "Avaa uusi ikkuna jokaiselle toistettavalle mediatiedostolle"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Language"
+msgstr "Kieli"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Title bar"
+msgstr "Otsikkopalkki"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
+msgid "Display full path"
+msgstr "Näytä koko tiedostopolku"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
+msgid "File name only"
+msgstr "Vain tiedostonimi"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
+msgid "Don't prefix anything"
+msgstr "Älä aseta etuliitettä"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
+msgid "Replace file name with title"
+msgstr "Korvaa tiedostonimi otsikolla"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Other"
+msgstr "Muu"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
+msgid "Tray icon"
+msgstr "Ilmoitusalueen kuvake"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
+msgid "Show OSD (requires restart)"
+msgstr "Näytä kuvaruutunäyttö (vaatii uudelleenkäynnistyksen)"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
+msgid "Limit window proportions on resize"
+msgstr "Rajoita ikkunan suhteet kokoa muutettaessa"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
+msgid "Snap to desktop edges"
+msgstr "Laajenna näytön reunoihin"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
+msgid "Store settings in .ini file"
+msgstr "Tallenna asetukset .ini-tiedostoon"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
+msgid "Disable \"Open Disc\" menu"
+msgstr "Poista käytöstä \"Avaa levy\" -valikko"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
+msgid "Process priority above normal"
+msgstr "Prosessin ensisijaisuus normaalia suurempi"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
+msgid "Enable cover-art support"
+msgstr "Ota käyttöön levykansituki"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "History"
+msgstr "Historia"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
+msgid "Keep history of recently opened files"
+msgstr "Muista viimeksi avatut tiedostot"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
+msgid "Remember last playlist"
+msgstr "Muista viimeisin soittolista"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
+msgid "Remember File position"
+msgstr "Muista tiedoston sijainti"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
+msgid "Remember DVD position"
+msgstr "Muista DVD:n sijainti"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
+msgid "Remember last window position"
+msgstr "Muista viimeisin ikkunan sijainti"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
+msgid "Remember last window size"
+msgstr "Muista viimeisin ikkunan koko"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
+msgid "Remember last Pan-n-Scan Zoom"
+msgstr "Muista viimeisen zoomauksen koko"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "\"Open DVD/BD\" behavior"
+msgstr "\"Avaa DVD/BD\" toiminta"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
+msgid "Prompt for location"
+msgstr "Kysy sijainti"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
+msgid "Always open the default location:"
+msgstr "Avaa aina oletussijainti:"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Preferred language for DVD Navigator and the external OGM Splitter"
+msgstr "Esivalittu kieli DVD-selaimelle ja ulkoiselle OGM splitterille"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
+msgid "Menu"
+msgstr "Valikko"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
+msgid "Audio"
+msgstr "Ääni"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
+msgid "Subtitles"
+msgstr "Tekstitykset"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Additional settings"
+msgstr "Lisäasetukset"
+
+msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
+msgid "Allow closed captions in \"Line 21 Decoder\""
+msgstr "Salli kuulovammaisien tekstitykset \"Line 21 Dekooderissa\""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio"
+msgstr "Ääni"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume"
+msgstr "Äänenvoimakkuus"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Min"
+msgstr "Minimi"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Max"
+msgstr "Maksimi"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
+msgid "Balance"
+msgstr "Balanssi"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "L"
+msgstr "L"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "R"
+msgstr "R"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Playback"
+msgstr "Toisto"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
+msgid "Play"
+msgstr "Toista"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
+msgid "Repeat forever"
+msgstr "Toista uudelleen ikuisesti"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
+msgid "time(s)"
+msgstr "kerta(a)"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Toistotila:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "After Playback"
+msgstr "Toiston jälkeen"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default zoom"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
+msgid "Auto-zoom:"
+msgstr "Automaattinen zoomaus:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
+msgid "Auto fit factor:"
+msgstr "Automaattinen kuvasuhde:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default track preference"
+msgstr "Oletusraita-asetukset"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Subtitles:"
+msgstr "Tekstitykset:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio:"
+msgstr "Ääni:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
+msgid "Allow overriding external splitter choice"
+msgstr "Salli ulkoisen jakajan valinnan ohitus"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Open settings"
+msgstr "Avaa asetukset"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
+msgid "Use worker thread to construct the filter graph"
+msgstr "Käytä työsäiettä suodinkaavion muodostamiseen"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
+msgid "Report pins which fail to render"
+msgstr "Raportoi pinnit joiden renderöinti epäonnistui"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
+msgid "Auto-load audio files"
+msgstr "Lataa automaattisesti äänitiedostot"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Control"
+msgstr "Valvonta"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume step:"
+msgstr "Äänenvoimakkuusaskel:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Speed step:"
+msgstr "Nopeusaskel:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
+msgid "Override placement"
+msgstr "Korvaa sijoittaminen"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
+msgid "Horizontal:"
+msgstr "Vaakasuuntainen:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC2"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC3"
+msgid "Vertical:"
+msgstr "Pystysuuntainen:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC4"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Delay step"
+msgstr "Viive vaihe"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Texture settings (open the video again to see the changes)"
+msgstr "Tekstuuriasetukset (avaa video uudelleen nähdäksesi muutokset)"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Sub pictures to buffer:"
+msgstr "Tekstitykset puskuriin:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Maximum texture resolution:"
+msgstr "Tekstuurien maksimiresoluutio:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
+msgid "Never animate the subtitles"
+msgstr "Älä animoi koskaan tekstityksiä"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
+msgid "Render at"
+msgstr "Renderöi kohdassa"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
+msgid "% of the animation"
+msgstr "% animaatiota"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
+msgid "Animate at"
+msgstr "Animoi kohdassa"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
+msgid "% of the video frame rate"
+msgstr "% videon kuvataajuudesta"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Allow dropping some subpictures if the queue is running late"
+msgstr "Salli joidenkin tekstitysten pois jättäminen, jos jono on myöhässä"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Renderer Layout"
+msgstr "Renderöintiasettelu"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
+msgid "Apply aspect ratio compensation for anamorphic videos"
+msgstr "Käytä kuvasuhteen kompensaatiota anamorfisille videoille"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Warning"
+msgstr "Varoitus"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Jos pakotat ja otat käyttöön kokoruututilan antialiasoinnin näytönohjaimesi asetuksissa, tekstitykset eivät näy yhtään paremmin mutta syövät prosessoritehoa."
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
+msgid "File extensions"
+msgstr "Tiedostopäätteet"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
+msgid "Default"
+msgstr "Oletus"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
+msgid "Set"
+msgstr "Aseta"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
+msgid "Association"
+msgstr "Kytkentä"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
+msgid "Use the format-specific icons"
+msgstr "Käytä tiedostotyyppien ikoneita"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
+msgid "Run as &administrator"
+msgstr "Suorita järjestelmänvalvojana"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
+msgid "Set as &default program"
+msgstr "Aseta oletussovellukseksi"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
+msgstr "Tosiaikaisen striimausprotokollan käsittelijä (rtsp://... osoitteille)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
+msgid "RealMedia"
+msgstr "RealMedia"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO2"
+msgid "QuickTime"
+msgstr "QuickTime"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO3"
+msgid "DirectShow"
+msgstr "DirectShow"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
+msgid "Check file extension first"
+msgstr "Tarkista ensin tiedostopääte"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Explorer Context Menu"
+msgstr "Resurssienhallinnan kontekstivalikko"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK6"
+msgid "Directory"
+msgstr "Hakemisto"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK7"
+msgid "File(s)"
+msgstr "Tiedosto(t)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
+msgid "Autoplay"
+msgstr "Automaattinen toisto"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK2"
+msgid "Music"
+msgstr "Musiikki"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK4"
+msgid "DVD"
+msgstr "DVD"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
+msgid "Audio CD"
+msgstr "Ääni-CD"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "Jump distances (small, medium, large in ms)"
+msgstr "Hyppäysvälit (pieni, keski, laaja millisekunteina)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
+msgid "Default"
+msgstr "Oletus"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
+msgid "Fast seek (on keyframe)"
+msgstr "Pikahaku (avainkehys)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
+msgid "Show chapter marks in seek bar"
+msgstr "Näytä kappalemerkit hakupalkissa"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
+msgid "Display \"Now Playing\" information in Skype's mood message"
+msgstr "Näytä \"Nyt toistetaan\"-tiedot Skypen moodiviestissä"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
+msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
+msgstr "Estä kokoruututilassa soittimen pienentäminen muulla kuin oletusnäytöllä"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Käytä laajennetun tehtäväpalkin ominaisuuksia"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Avaa kansion seuraava/edellinen tiedosto toiminnossa \"Takaisin/eteenpäin\", kun toistolistassa on vain yksi nimike."
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
+msgid "Show time tooltip:"
+msgstr "Käytä aika-työkaluvihjettä:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "OSD font:"
+msgstr "Kuvaruutunäytön fontti:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
+msgid "Enable Logitech LCD support (experimental)"
+msgstr "Ota käyttöön Logitechin LCD-tuki (kokeellinen)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
+msgid "Auto-hide the mouse pointer during playback in windowed mode"
+msgstr "Piilota kursori automaattisesti toistettaessa ikkunatilassa"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
+msgid "Add Filter..."
+msgstr "Lisää suodatin..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
+msgid "Remove"
+msgstr "Poista"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO1"
+msgid "Prefer"
+msgstr "Suosi"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO2"
+msgid "Block"
+msgstr "Estä"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
+msgid "Set merit:"
+msgstr "Aseta kiitokset:"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
+msgid "Up"
+msgstr "Ylös"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON4"
+msgid "Down"
+msgstr "Alas"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
+msgid "Add Media Type..."
+msgstr "Lisää mediatyyppi..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
+msgid "Add Sub Type..."
+msgstr "Lisää tekstitystyyppi..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
+msgid "Delete"
+msgstr "Poista"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
+msgid "Reset List"
+msgstr "Palauta lista"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Type:"
+msgstr "Tyyppi:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Size:"
+msgstr "Koko:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Media length:"
+msgstr "Median pituus:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Video size:"
+msgstr "Videon koko:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Created:"
+msgstr "Luotu:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Clip:"
+msgstr "Leike:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Author:"
+msgstr "Tekijä:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Copyright:"
+msgstr "Tekijänoikeudet:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Rating:"
+msgstr "Arvostelu:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Location:"
+msgstr "Sijainti:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Description:"
+msgstr "Kuvaus:"
+
+msgctxt "IDD_FAVADD_CAPTION"
+msgid "Add Favorite"
+msgstr "Lisää suosikki"
+
+msgctxt "IDD_FAVADD_IDC_STATIC"
+msgid "Choose a name for your shortcut:"
+msgstr "Valitse pikakuvakkeen nimi:"
+
+msgctxt "IDD_FAVADD_IDC_CHECK1"
+msgid "Remember position"
+msgstr "Muista sijainti"
+
+msgctxt "IDD_FAVADD_IDCANCEL"
+msgid "Cancel"
+msgstr "Peruuta"
+
+msgctxt "IDD_FAVADD_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_FAVADD_IDC_CHECK2"
+msgid "Relative drive"
+msgstr "Vastaava asema"
+
+msgctxt "IDD_FAVORGANIZE_CAPTION"
+msgid "Organize Favorites"
+msgstr "Muokkaa suosikkeja"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
+msgid "Rename"
+msgstr "Nimeä uudelleen"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
+msgid "Move Up"
+msgstr "Siirrä ylös"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
+msgid "Move Down"
+msgstr "Siirrä alas"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
+msgid "Delete"
+msgstr "Poista"
+
+msgctxt "IDD_FAVORGANIZE_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_PNSPRESET_DLG_CAPTION"
+msgid "Pan&Scan Presets"
+msgstr "Pan&Scan-asetukset"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
+msgid "New"
+msgstr "Uusi"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON3"
+msgid "Delete"
+msgstr "Poista"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
+msgid "Up"
+msgstr "Ylös"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
+msgid "Down"
+msgstr "Alas"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
+msgid "&Set"
+msgstr "Aseta"
+
+msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
+msgid "&Cancel"
+msgstr "Peruuta"
+
+msgctxt "IDD_PNSPRESET_DLG_IDOK"
+msgid "&Save"
+msgstr "Tallenna"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Pos: 0.0 -> 1.0"
+msgstr "Sijainti: 0.0 .> 1.0"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Zoom: 0.2 -> 3.0"
+msgstr "Zoomaus: 0.2 -> 3.0"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
+msgid "Global Media Keys"
+msgstr "Yleiset medianäppäimet"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
+msgid "Select All"
+msgstr "Valitse kaikki"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
+msgid "Reset Selected"
+msgstr "Palauta valitut"
+
+msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
+msgid "Warning"
+msgstr "Varoitus"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
+msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
+msgstr "MPC-HC ei voi renderöidä joitakin kaavion pinnejä. Tarvittavia koodekkeja tai suotimia ei luultavasti ole asennettu järjestelmään."
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
+msgid "The following pin(s) failed to find a connectable filter:"
+msgstr "Seuraaville pinneille ei löydy kytkettävää suodinta: "
+
+msgctxt "IDD_MEDIATYPES_DLG_IDOK"
+msgid "Close"
+msgstr "Sulje"
+
+msgctxt "IDD_SAVE_DLG_CAPTION"
+msgid "Saving..."
+msgstr "Tallentaa..."
+
+msgctxt "IDD_SAVE_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Peruuta"
+
+msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Koodataan:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Koodataan:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "Delay:"
+msgstr "Viive:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
+msgid "Save custom style"
+msgstr "Tallenna oma tyyli"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG-laatu:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Thumbnails:"
+msgstr "Pienoiskuvat:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "rows"
+msgstr "riviä"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "columns"
+msgstr "saraketta"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Image width:"
+msgstr "Kuvan leveys:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "pixels"
+msgstr "pikseliä"
+
+msgctxt "IDD_ADDREGFILTER_CAPTION"
+msgid "Select Filter"
+msgstr "Valitse suodatin"
+
+msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Selaa..."
+
+msgctxt "IDD_ADDREGFILTER_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_ADDREGFILTER_IDCANCEL"
+msgid "Cancel"
+msgstr "Peruuta"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Font"
+msgstr "Fontti"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_BUTTON1"
+msgid "Font"
+msgstr "Fontti"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Spacing"
+msgstr "Tiheys"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Angle (z,°)"
+msgstr "Kulma (z,°)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (x,%)"
+msgstr "Skaala (x,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (y,%)"
+msgstr "Skaala (y,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Border Style"
+msgstr "Reunojen tyyli"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
+msgid "Outline"
+msgstr "Ulkoraja"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
+msgid "Opaque box"
+msgstr "Läpinäkyvä laatikko"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Width"
+msgstr "Leveys"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Shadow"
+msgstr "Varjo"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Screen Alignment && Margins"
+msgstr "Näytön Sovitus && Marginaalit"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Left"
+msgstr "Vasen"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Right"
+msgstr "Oikea"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Top"
+msgstr "Yläreuna"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Bottom"
+msgstr "Alareuna"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
+msgid "Position subtitles relative to the video frame"
+msgstr "Tekstitysten sijainti suhteessa videokehykseen"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Colors && Transparency"
+msgstr "Värit ja läpikuultavuus"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "0%"
+msgstr "0%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "100%"
+msgstr "100 %"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Primary"
+msgstr "Ensisijainen"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Secondary"
+msgstr "Toissijainen"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Outline"
+msgstr "Ulkoraja"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
+msgid "Link alpha channels"
+msgstr "Linkitä alfakanavat"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
+msgstr "Jos haluat käyttää näiden suotimien omia versioita tai muita korvaavia, poista ne käytöstä tässä."
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Source Filters"
+msgstr "Lähdesuotimet"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Transform Filters"
+msgstr "Muunnetut suotimet"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Internal LAV Filters settings"
+msgstr "Sisäisten LAV-suotimien asetukset"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
+msgid "Splitter"
+msgstr "Jakaja"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
+msgid "Video decoder"
+msgstr "Videon dekooderi"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
+msgid "Audio decoder"
+msgstr "Äänen dekooderi"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
+msgid "Internal:"
+msgstr "Sisäinen:"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO2"
+msgid "External:"
+msgstr "Ulkoinen:"
+
+msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Selaa..."
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DirectShow Video"
+msgstr "DirectShow Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "RealMedia Video"
+msgstr "RealMedia Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "QuickTime Video"
+msgstr "QuickTime Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Audio Renderer"
+msgstr "Äänen renderoija"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderöimätön) ja EVR (CP) asetukset"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Surface:"
+msgstr "Pinta:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Resizer:"
+msgstr "Koon muuttaja:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
+msgid "Select D3D9 Render Device"
+msgstr "Valitse D3D9 renderöintilaite"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
+msgid "Reinitialize when changing display"
+msgstr "Määritä uudelleen näyttöä vaihdettaessa"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "D3D Fullscreen"
+msgstr "D3D kokonäyttö"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Alternative VSync"
+msgstr "Vaihtoehtoinen VSync"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
+msgid "VMR-9 Mixer Mode"
+msgstr "VMR-9 sekoitustila"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
+msgid "YUV Mixing"
+msgstr "YUV sekoitus"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
+msgid "EVR Buffers:"
+msgstr "EVR puskurit:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitles"
+msgstr "Tekstitys"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Screenshot"
+msgstr "Kuvakaappaus"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Shaders"
+msgstr "Varjostimet"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Rotation"
+msgstr "Kääntö"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitle Renderer"
+msgstr "Tekstityksen renderöijä"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
+msgid "Listen on port:"
+msgstr "Kuuntele porttia:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
+msgid "Launch in web browser..."
+msgstr "Avaa selaimessa..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
+msgid "Enable compression"
+msgstr "Käytä pakkausta"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
+msgid "Allow access from localhost only"
+msgstr "Salli käyttö vain paikallisesti"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Esikatselu päällä"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
+msgid "Print debug information"
+msgstr "Tulosta virheenkorjaustiedot"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
+msgid "Serve pages from:"
+msgstr "Sivujen tarjoilu sijainnista:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Selaa..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
+msgid "Deploy..."
+msgstr "Käytä..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "Default page:"
+msgstr "Oletussivu:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
+msgstr "CGI käsittelijät: (.ext1=path1;.ext2=path2;...)"
+
+msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
+msgid "Download subtitles"
+msgstr "Lataa tekstitykset"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
+msgid "Replace currently loaded subtitles"
+msgstr "Korvaa nykyiset ladatut tekstitykset"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Lataa"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Päivitä"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Keskeytä"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Optiot"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Lähetä tekstitykset"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Lähetä"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Keskeytä"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Asetukset"
+
+msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
+msgid "Save As..."
+msgstr "Tallenna nimellä..."
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Color controls (for VMR-9, EVR and madVR)"
+msgstr "Värien säätö (VMR-9:lle, EVR:lle ja madVR:lle)"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Brightness"
+msgstr "Kirkkaus"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Contrast"
+msgstr "Kontrasti"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Hue"
+msgstr "Sävy"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Saturation"
+msgstr "Kylläisyys"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET"
+msgid "Reset"
+msgstr "Palauta"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Update check"
+msgstr "Päivitysten tarkistus"
+
+msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
+msgid "Enable automatic update check"
+msgstr "Päivitysten automaattinen tarkistus päällä"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
+msgid "Check every:"
+msgstr "Tarkista joka:"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
+msgid "day(s)"
+msgstr "päivää"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Settings management"
+msgstr "Asetusten valvonta"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
+msgid "Reset"
+msgstr "Palauta"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
+msgid "Export"
+msgstr "Vienti"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
+msgid "Export keys"
+msgstr "Vientiavaimet"
+
+msgctxt "IDD_TUNER_SCAN_CAPTION"
+msgid "Tuner scan"
+msgstr "Virittimen asemanhaku"
+
+msgctxt "IDD_TUNER_SCAN_ID_START"
+msgid "Start"
+msgstr "Käynnistä"
+
+msgctxt "IDD_TUNER_SCAN_IDCANCEL"
+msgid "Cancel"
+msgstr "Peruuta"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. Start"
+msgstr "Taajuus aloitus"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Bandwidth"
+msgstr "Kaistan leveys"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. End"
+msgstr "Taajuus lopetus"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
+msgid "Ignore encrypted channels"
+msgstr "Ohita salatut kanavat"
+
+msgctxt "IDD_TUNER_SCAN_ID_SAVE"
+msgid "Save"
+msgstr "Tallenna"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "S"
+msgstr "S"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Q"
+msgstr "Q"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
+msgid "Use an offset"
+msgstr "Käytä vakiota"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Default Device"
+msgstr "Oletuslaite"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
+msgid "Analog"
+msgstr "Analoginen"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO2"
+msgid "Digital"
+msgstr "Digitaalinen"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Analog settings"
+msgstr "Analogiasetukset"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC2"
+msgid "Audio"
+msgstr "Ääni"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC3"
+msgid "Country"
+msgstr "Maa"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Digital settings (BDA)"
+msgstr "Digitaaliasetukset (BDA)"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
+msgid "Network Provider"
+msgstr "Verkon toimittaja"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
+msgid "Tuner"
+msgstr "Viritin"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC6"
+msgid "Receiver"
+msgstr "Vastaanotin"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
+msgid "Channel switching approach:"
+msgstr "Kanavan vaihdon lähestymistapa:"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
+msgid "Rebuild filter graph"
+msgstr "Rakenna suodinkaavio uudelleen"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
+msgid "Stop filter graph"
+msgstr "Pysäytä suodinkaavio"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
+msgid "Sync video to display"
+msgstr "Videon synkronointi näyttöön"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
+msgid "Frequency adjustment:"
+msgstr "Taajuuden säätö:"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
+msgid "Sync display to video"
+msgstr "Näytön synkronointi videoon"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
+msgid "Frequency adjustment:"
+msgstr "Taajuuden säätö:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC3"
+msgid "lines"
+msgstr "riviä"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
+msgid "columns"
+msgstr "saraketta"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
+msgid "Present at nearest VSync"
+msgstr "Esiintymä lähimmässä VSync:issa"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
+msgid "Target sync offset:"
+msgstr "Kohteen synkronoinnin offset:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC7"
+msgid "Control limits:"
+msgstr "Säätörajat:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
+msgid "+/-"
+msgstr "+/-"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
+msgid "Changes take effect after the playback has been closed and restarted."
+msgstr "Muutokset astuvat voimaan kun toisto on lopetettu ja käynnistetty uudelleen."
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
+msgid "Launch files in fullscreen"
+msgstr "Käynnistä tiedostot koko näytössä"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
+msgid "Hide controls in fullscreen"
+msgstr "Piilota säätimet kokoruututilassa"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
+msgid "Hide docked panels"
+msgstr "Piilota telakoidut paneelit"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
+msgid "Exit fullscreen at the end of playback"
+msgstr "Poistu kokonäyttötilasta toiston loputtua"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Fullscreen monitor"
+msgstr "Kokoruutumonitori"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
+msgid "Use autochange fullscreen monitor mode"
+msgstr "Käytä automaattisesti kokonäyttötilan monitoritilaa"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
+msgid "Add"
+msgstr "Lisää"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
+msgid "Del"
+msgstr "Poista"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
+msgid "Up"
+msgstr "Ylös"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON4"
+msgid "Down"
+msgstr "Alas"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
+msgid "Apply default monitor mode on fullscreen exit"
+msgstr "Siirry oletusnäyttötilaan poistuttaessa kokonäyttötilasta"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
+msgid "Restore resolution on program exit"
+msgstr "Palauta resoluutio poistuttaessa ohjelmasta"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Delay"
+msgstr "Viive"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
+msgid "s"
+msgstr "s"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
+msgid "Info"
+msgstr "Tiedot"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_SCAN"
+msgid "Scan"
+msgstr "Skannaa"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
+msgid "Prefer forced and/or default subtitles tracks"
+msgstr "Suosi pakotettuja ja/tai oletustekstitysraitoja"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
+msgid "Prefer external subtitles over embedded subtitles"
+msgstr "Suosi ulkoisia tekstityksiä sulautettujen asemesta"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
+msgid "Ignore embedded subtitles"
+msgstr "Ohita sulautetut tekstitykset"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Autoload paths"
+msgstr "Lataa polut automaattisesti"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
+msgid "Reset"
+msgstr "Palauta"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Online search, download and upload subtitles"
+msgstr "Hae verkosta, lataa ja lähetä tekstityksiä."
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Etsi ja lataa tekstitykset automaattisesti jos paikallista tekstitystä ei löydy"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Suosi kuulovammaisille tarkoitettuja tekstityksiä (kun se on merkitty tekstitysten tarjoajan toimesta)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ohita tiedostot joissa esiintyy mikä tahansa seuraavista sanoista:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Languages in order of preference:"
+msgstr "Kielet tärkeysjärjestyksessä:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Lähetä aktiiviset tekstitykset automaattisesti toiston päätyttyä"
+
+msgctxt "IDD_UPDATE_DIALOG_CAPTION"
+msgid "Update Checker"
+msgstr "Päivityksien tarkistus"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
+msgid "&Download now"
+msgstr "Lataa nyt"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
+msgid "Remind me &later"
+msgstr "Muistuta myöhemmin"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
+msgid "&Ignore this update"
+msgstr "Älä huomioi tätä päivitystä"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shaders contain special effects which can be added to the video rendering process."
+msgstr "Varjostimet sisältävät erikoisefektejä, jotka voidaan lisätä videon renderöintiprosessiin."
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
+msgid "Add shader file"
+msgstr "Lisää varjostintiedosto"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
+msgid "Remove"
+msgstr "Poista"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
+msgid "Add to pre-resize"
+msgstr "Lisää esi-koonvaihtoon"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
+msgid "Add to post-resize"
+msgstr "Lisää jälki-koonvaihtoon"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shader presets"
+msgstr "Varjostimen esiasetukset"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
+msgid "Load"
+msgstr "Lataa"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
+msgid "Save"
+msgstr "Tallenna"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON5"
+msgid "Delete"
+msgstr "Poista"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active pre-resize shaders"
+msgstr "Aktiiviset esi-koonvaihtovarjostimet"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active post-resize shaders"
+msgstr "Aktiiviset jälki-koonvaihtovarjostimet"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
+msgid "Debug Shaders"
+msgstr "Viankorjausvarjostimet"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
+msgid "Debug Information"
+msgstr "Viankorjaustiedot"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
+msgid "PS 2.0"
+msgstr "PS 2.0"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO2"
+msgid "PS 2.0b"
+msgstr "PS 2.0b"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO3"
+msgid "PS 2.0a"
+msgstr "PS 2.0a"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO4"
+msgid "PS 3.0"
+msgstr "PS 3.0"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
+msgid "Advanced Settings, do not edit unless you know what you are doing."
+msgstr "Edistyneet asetukset. Älä muokkaa, jollet tiedä, mitä olet tekemässä!"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
+msgid "True"
+msgstr "Tosi"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
+msgid "False"
+msgstr "Epätosi"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
+msgid "Default"
+msgstr "Oletus"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Laite"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Erikoistila"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Salli bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Asetukset"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Stereon ristisyöttö päällä (kuulokkeille)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Katkaisu:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Taso:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Huomautus"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Särön minimoiseksi suositellaan soittimen maksimitasoksi n. 85% kun toistetaan äänekästä häviöllistä sisältöä."
+
+msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG-laatu:"
+
+msgctxt "IDD_CMD_LINE_HELP_CAPTION"
+msgid "Command line help"
+msgstr "Komentorivin ohje"
+
+msgctxt "IDD_CMD_LINE_HELP_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Kaatumisraportoija"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Olemme pahoillamme, mutta MPC-HC kaatui :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Lähetä vikaraportti jotta voimme tutkia ja korjata ongelman."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Lisätiedot"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Sähköposti:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Sähköpostiosoitteesi on valinnainen ja sitä käytetään vain jos kehittäjillä on tarvetta pyytää sinulta lisätietoja."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Ongelman kuvaus (vain englanniksi):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Uudelleenkäynnistä MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Lopeta MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.fi.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.fi.menus.po
new file mode 100644
index 000000000..84fb917f4
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.fi.menus.po
@@ -0,0 +1,714 @@
+# MPC-HC - Strings extracted from menus
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Pallerå, 2015
+# Matti Ylönen <maanylon@gmail.com>, 2016
+# phewi <phewnix@gmail.com>, 2014
+# Raimo K. Talvio, 2014
+# Sauli Ketola <sauli.ketola@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-01-31 22:02+0000\n"
+"Last-Translator: Underground78\n"
+"Language-Team: Finnish (http://www.transifex.com/mpc-hc/mpc-hc/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "POPUP"
+msgid "&File"
+msgstr "Tiedosto"
+
+msgctxt "ID_FILE_OPENQUICK"
+msgid "&Quick Open File..."
+msgstr "Tiedoston pika-avaus"
+
+msgctxt "ID_FILE_OPENMEDIA"
+msgid "&Open File..."
+msgstr "Avaa tiedosto..."
+
+msgctxt "ID_FILE_OPENDVDBD"
+msgid "Open &DVD/BD..."
+msgstr "Avaa DVD/BD..."
+
+msgctxt "ID_FILE_OPENDEVICE"
+msgid "Open De&vice..."
+msgstr "Avaa laite"
+
+msgctxt "ID_FILE_OPENDIRECTORY"
+msgid "Open Dir&ectory..."
+msgstr "Avaa hakemisto"
+
+msgctxt "ID_FILE_OPENDISC"
+msgid "O&pen Disc"
+msgstr "Avaa levy"
+
+msgctxt "ID_RECENT_FILES"
+msgid "Recent &Files"
+msgstr "Edelliset tiedostot"
+
+msgctxt "ID_FILE_CLOSE_AND_RESTORE"
+msgid "&Close"
+msgstr "Sulje"
+
+msgctxt "ID_FILE_SAVE_COPY"
+msgid "&Save a Copy..."
+msgstr "Tallenna kopio..."
+
+msgctxt "ID_FILE_SAVE_IMAGE"
+msgid "Save &Image..."
+msgstr "Tallenna kuva..."
+
+msgctxt "ID_FILE_SAVE_THUMBNAILS"
+msgid "Save &Thumbnails..."
+msgstr "Tallenna pienoiskuvat..."
+
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "Tekstitykset"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Avaa tekstitykset..."
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Tallenna tekstitykset..."
+
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Lataa tekstitykset..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "Lähetä tekstitykset..."
+
+msgctxt "ID_FILE_PROPERTIES"
+msgid "P&roperties"
+msgstr "Ominaisuudet"
+
+msgctxt "ID_FILE_EXIT"
+msgid "E&xit"
+msgstr "Poistu"
+
+msgctxt "POPUP"
+msgid "&View"
+msgstr "Näytä"
+
+msgctxt "ID_VIEW_CAPTIONMENU"
+msgid "Caption&&Menu"
+msgstr "Otsikkovalikko"
+
+msgctxt "ID_VIEW_SEEKER"
+msgid "See&k Bar"
+msgstr "Etsintäpalkki"
+
+msgctxt "ID_VIEW_CONTROLS"
+msgid "&Controls"
+msgstr "Säätimet"
+
+msgctxt "ID_VIEW_INFORMATION"
+msgid "&Information"
+msgstr "Tiedot"
+
+msgctxt "ID_VIEW_STATISTICS"
+msgid "&Statistics"
+msgstr "Tilastoja"
+
+msgctxt "ID_VIEW_STATUS"
+msgid "St&atus"
+msgstr "Tila"
+
+msgctxt "ID_VIEW_SUBRESYNC"
+msgid "Su&bresync"
+msgstr "Synkronoi tektitykset"
+
+msgctxt "ID_VIEW_PLAYLIST"
+msgid "Pla&ylist"
+msgstr "Soittolista"
+
+msgctxt "ID_VIEW_CAPTURE"
+msgid "Captu&re"
+msgstr "Kaappaa"
+
+msgctxt "ID_VIEW_NAVIGATION"
+msgid "Na&vigation"
+msgstr "Navigointi"
+
+msgctxt "ID_VIEW_DEBUGSHADERS"
+msgid "&Debug Shaders"
+msgstr "Vianetsinnän varjostimet"
+
+msgctxt "POPUP"
+msgid "&Presets..."
+msgstr "Esiasetukset..."
+
+msgctxt "ID_VIEW_PRESETS_MINIMAL"
+msgid "&Minimal"
+msgstr "Minimaalinen"
+
+msgctxt "ID_VIEW_PRESETS_COMPACT"
+msgid "&Compact"
+msgstr "Kompakti"
+
+msgctxt "ID_VIEW_PRESETS_NORMAL"
+msgid "&Normal"
+msgstr "Normaali"
+
+msgctxt "ID_VIEW_FULLSCREEN"
+msgid "F&ull Screen"
+msgstr "Koko näyttö"
+
+msgctxt "POPUP"
+msgid "&Zoom"
+msgstr "Zoomaa"
+
+msgctxt "ID_VIEW_ZOOM_50"
+msgid "&50%"
+msgstr "&50%"
+
+msgctxt "ID_VIEW_ZOOM_100"
+msgid "&100%"
+msgstr "&100%"
+
+msgctxt "ID_VIEW_ZOOM_200"
+msgid "&200%"
+msgstr "&200%"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT"
+msgid "Auto &Fit"
+msgstr "Sovita automaattisesti"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (&Larger Only)"
+msgstr "Sovita automaattisesti (Vain suurempi)"
+
+msgctxt "POPUP"
+msgid "R&enderer Settings"
+msgstr "Renderöintiasetukset"
+
+msgctxt "ID_VIEW_TEARING_TEST"
+msgid "&Tearing Test"
+msgstr "Repeytymistesti"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Näytä Tilastot"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Näytä Nykyinen A&ika"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Näytä &Tiedoston Nimi"
+
+msgctxt "POPUP"
+msgid "&Output Range"
+msgstr "Ulostulon alue"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
+msgid "&0 - 255"
+msgstr "&0 - 255"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
+msgid "&16 - 235"
+msgstr "&16 - 235"
+
+msgctxt "POPUP"
+msgid "&Presentation"
+msgstr "Esitys"
+
+msgctxt "ID_VIEW_D3DFULLSCREEN"
+msgid "D3D Fullscreen &Mode"
+msgstr "D3D Kokonäyttötila"
+
+msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
+msgid "D3D Fullscreen &GUI Support"
+msgstr "D3D Kokonäyttö & Käyttöliittymätuki"
+
+msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
+msgid "10-bit &RGB Output"
+msgstr "10-bit &RGB ulostulo"
+
+msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
+msgid "Force 10-bit RGB &Input"
+msgstr "Pakota 10-bit RGB &syöttö"
+
+msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
+msgid "&Full Floating Point Processing"
+msgstr "Täysi liukulukuprosessointi"
+
+msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
+msgid "&Half Floating Point Processing"
+msgstr "Puoli liukulukuprosessointi"
+
+msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
+msgid "Disable desktop composition (&Aero)"
+msgstr "Poista käytöstä työpöytäkompositio (&Aero)"
+
+msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time &Correction"
+msgstr "Kehyksen aikakorjaus päällä"
+
+msgctxt "POPUP"
+msgid "&Color Management"
+msgstr "Värien hallinta"
+
+msgctxt "ID_VIEW_CM_ENABLE"
+msgid "&Enable"
+msgstr "Päällä"
+
+msgctxt "POPUP"
+msgid "&Input Type"
+msgstr "Syöttötyyppi"
+
+msgctxt "ID_VIEW_CM_INPUT_AUTO"
+msgid "&Auto-Detect"
+msgstr "Automaattinen tunnistus"
+
+msgctxt "ID_VIEW_CM_INPUT_HDTV"
+msgid "&HDTV"
+msgstr "HDTV"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
+msgid "SDTV &NTSC"
+msgstr "SDTV & NTSC"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
+msgid "SDTV &PAL"
+msgstr "SDTV & PAL"
+
+msgctxt "POPUP"
+msgid "Ambient &Light"
+msgstr "Ympäristön valaistus"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
+msgid "&Bright (2.2 Gamma)"
+msgstr "Kirkas (2.2 Gamma)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
+msgid "&Dim (2.35 Gamma)"
+msgstr "Hämärä (2.35 Gamma)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
+msgid "D&ark (2.4 Gamma)"
+msgstr "Pimeä (2.4 Gamma)"
+
+msgctxt "POPUP"
+msgid "&Rendering Intent"
+msgstr "Renderöinnin tarkoitus"
+
+msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
+msgid "&Perceptual"
+msgstr "Havaittava"
+
+msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
+msgid "&Relative Colorimetric"
+msgstr "Kolorimetrinen suhde"
+
+msgctxt "ID_VIEW_CM_INTENT_SATURATION"
+msgid "&Saturation"
+msgstr "Kylläisyys"
+
+msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
+msgid "&Absolute Colorimetric"
+msgstr "Kolorimetrinen ehdottomuus"
+
+msgctxt "POPUP"
+msgid "&VSync"
+msgstr "VSync"
+
+msgctxt "ID_VIEW_VSYNC"
+msgid "&VSync"
+msgstr "VSync"
+
+msgctxt "ID_VIEW_VSYNCACCURATE"
+msgid "&Accurate VSync"
+msgstr "Täsmällinen VSync"
+
+msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
+msgid "A&lternative VSync"
+msgstr "Vaihtoehtoinen VSync"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
+msgid "&Decrease VSync Offset"
+msgstr "Lisää VSync offsetia"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
+msgid "&Increase VSync Offset"
+msgstr "Vähennä VSync offsetia"
+
+msgctxt "POPUP"
+msgid "&GPU Control"
+msgstr "GPU:n valvonta"
+
+msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
+msgid "Flush GPU &before VSync"
+msgstr "Kiihdytä GPU ennen VSync:ia"
+
+msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
+msgid "Flush GPU &after Present"
+msgstr "Kiihdytä GPU nykyisen jälkeen"
+
+msgctxt "ID_VIEW_FLUSHGPU_WAIT"
+msgid "&Wait for flushes"
+msgstr "Odota kiindytystä"
+
+msgctxt "POPUP"
+msgid "R&eset"
+msgstr "Palauta"
+
+msgctxt "ID_VIEW_RESET_DEFAULT"
+msgid "Reset to &default renderer settings"
+msgstr "Aseta renderöinnin oletusasetuksiin"
+
+msgctxt "ID_VIEW_RESET_OPTIMAL"
+msgid "Reset to &optimal renderer settings"
+msgstr "Aseta renderöinnin ihanneasetuksiin"
+
+msgctxt "POPUP"
+msgid "Video &Frame"
+msgstr "Videokehys"
+
+msgctxt "ID_VIEW_VF_HALF"
+msgid "&Half Size"
+msgstr "Puolikoko"
+
+msgctxt "ID_VIEW_VF_NORMAL"
+msgid "&Normal Size"
+msgstr "Normaali koko"
+
+msgctxt "ID_VIEW_VF_DOUBLE"
+msgid "&Double Size"
+msgstr "Kaksinkertainen koko"
+
+msgctxt "ID_VIEW_VF_STRETCH"
+msgid "&Stretch To Window"
+msgstr "Venytä ikkunaan"
+
+msgctxt "ID_VIEW_VF_FROMINSIDE"
+msgid "Touch Window From &Inside"
+msgstr "Ikkunakoko sisäpuolelta"
+
+msgctxt "ID_VIEW_VF_ZOOM1"
+msgid "Zoom &1"
+msgstr "Zoom &1"
+
+msgctxt "ID_VIEW_VF_ZOOM2"
+msgid "Zoom &2"
+msgstr "Zoom &2"
+
+msgctxt "ID_VIEW_VF_FROMOUTSIDE"
+msgid "Touch Window From &Outside"
+msgstr "Ikkunakoko ulkopuolelta"
+
+msgctxt "POPUP"
+msgid "&Aspect Ratio"
+msgstr "Kuvasuhde"
+
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Oletus (DAR)"
+
+msgctxt "ID_ASPECTRATIO_4_3"
+msgid "&4:3"
+msgstr "&4:3"
+
+msgctxt "ID_ASPECTRATIO_5_4"
+msgid "&5:4"
+msgstr "&5:4"
+
+msgctxt "ID_ASPECTRATIO_16_9"
+msgid "&16:9"
+msgstr "&16:9"
+
+msgctxt "ID_ASPECTRATIO_235_100"
+msgid "&235:100"
+msgstr "&235:100"
+
+msgctxt "ID_ASPECTRATIO_185_100"
+msgid "1&85:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Oleta neliömäiset pikselit (SAR)"
+
+msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
+msgid "&Correct Monitor/Desktop AR Diff"
+msgstr "Korjaa näytön/työpöydän AR ero"
+
+msgctxt "POPUP"
+msgid "Pa&n&&Scan"
+msgstr "Panoroi ja skannaa"
+
+msgctxt "ID_VIEW_INCSIZE"
+msgid "&Increase Size"
+msgstr "Suurenna"
+
+msgctxt "ID_VIEW_DECSIZE"
+msgid "&Decrease Size"
+msgstr "Pienennä"
+
+msgctxt "ID_VIEW_INCWIDTH"
+msgid "I&ncrease Width"
+msgstr "Levennä"
+
+msgctxt "ID_VIEW_DECWIDTH"
+msgid "D&ecrease Width"
+msgstr "Kavenna"
+
+msgctxt "ID_VIEW_INCHEIGHT"
+msgid "In&crease Height"
+msgstr "Lisää korkeutta"
+
+msgctxt "ID_VIEW_DECHEIGHT"
+msgid "Decre&ase Height"
+msgstr "Vähennä korkeutta"
+
+msgctxt "ID_PANSCAN_MOVERIGHT"
+msgid "Move &Right"
+msgstr "Siirrä oikealle"
+
+msgctxt "ID_PANSCAN_MOVELEFT"
+msgid "Move &Left"
+msgstr "Siirrä vasemmalle"
+
+msgctxt "ID_PANSCAN_MOVEUP"
+msgid "Move &Up"
+msgstr "Siirrä ylös"
+
+msgctxt "ID_PANSCAN_MOVEDOWN"
+msgid "Move &Down"
+msgstr "Siirrä alas"
+
+msgctxt "ID_PANSCAN_CENTER"
+msgid "Cen&ter"
+msgstr "Keskelle"
+
+msgctxt "ID_VIEW_RESET"
+msgid "Re&set"
+msgstr "Palauta"
+
+msgctxt "POPUP"
+msgid "On &Top"
+msgstr "Päällimmäisenä"
+
+msgctxt "ID_ONTOP_DEFAULT"
+msgid "&Default"
+msgstr "Oletus"
+
+msgctxt "ID_ONTOP_ALWAYS"
+msgid "&Always"
+msgstr "Aina"
+
+msgctxt "ID_ONTOP_WHILEPLAYING"
+msgid "While &Playing"
+msgstr "Toistettaessa"
+
+msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
+msgid "While Playing &Video"
+msgstr "Toistettaessa videota"
+
+msgctxt "ID_VIEW_OPTIONS"
+msgid "&Options..."
+msgstr "Asetukset"
+
+msgctxt "POPUP"
+msgid "&Play"
+msgstr "Toista"
+
+msgctxt "ID_PLAY_PLAYPAUSE"
+msgid "&Play/Pause"
+msgstr "Toisto/Tauko"
+
+msgctxt "ID_PLAY_STOP"
+msgid "&Stop"
+msgstr "Pysäytä"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Fra&me Step"
+msgstr "Kehyksen askel"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Toista"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Ikuisesti"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "Tiedosto"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "Soittolista"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "&Decrease Rate"
+msgstr "Vähennä toistonopeutta"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "&Increase Rate"
+msgstr "Lisää toistonopeutta"
+
+msgctxt "ID_PLAY_RESETRATE"
+msgid "R&eset Rate"
+msgstr "Palauta toistonopeus"
+
+msgctxt "ID_FILTERS"
+msgid "&Filters"
+msgstr "Suotimet"
+
+msgctxt "ID_SHADERS"
+msgid "S&haders"
+msgstr "Varjostimet"
+
+msgctxt "ID_AUDIOS"
+msgid "&Audio Track"
+msgstr "&Ääniraita"
+
+msgctxt "ID_SUBTITLES"
+msgid "Su&btitle Track"
+msgstr "Tek&stitys Raita"
+
+msgctxt "ID_VIDEO_STREAMS"
+msgid "Vide&o Track"
+msgstr "&video Raita"
+
+msgctxt "POPUP"
+msgid "&Volume"
+msgstr "Äänenvoimakkuus"
+
+msgctxt "ID_VOLUME_UP"
+msgid "&Up"
+msgstr "Ylös"
+
+msgctxt "ID_VOLUME_DOWN"
+msgid "&Down"
+msgstr "Alas"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "&Mute"
+msgstr "Vaimennus"
+
+msgctxt "POPUP"
+msgid "Af&ter Playback"
+msgstr "Toiston jälkeen"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Älä tee &mitään"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Toista seuraava tiedosto kansiosta"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Sammuta näyttö"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
+msgid "&Exit"
+msgstr "Sulje"
+
+msgctxt "ID_AFTERPLAYBACK_STANDBY"
+msgid "&Stand By"
+msgstr "Valmiustila"
+
+msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
+msgid "&Hibernate"
+msgstr "&Horrostila"
+
+msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
+msgid "Shut&down"
+msgstr "Sammuta"
+
+msgctxt "ID_AFTERPLAYBACK_LOGOFF"
+msgid "Log &Off"
+msgstr "Kirjaudu ulos"
+
+msgctxt "ID_AFTERPLAYBACK_LOCK"
+msgid "&Lock"
+msgstr "Lukitse"
+
+msgctxt "POPUP"
+msgid "&Navigate"
+msgstr "Navigoi"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "&Previous"
+msgstr "Edellinen"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "&Next"
+msgstr "Seuraava"
+
+msgctxt "ID_NAVIGATE_GOTO"
+msgid "&Go To..."
+msgstr "Mene..."
+
+msgctxt "ID_NAVIGATE_TITLEMENU"
+msgid "&Title Menu"
+msgstr "Otsikkovalikko"
+
+msgctxt "ID_NAVIGATE_ROOTMENU"
+msgid "&Root Menu"
+msgstr "Juurivalikko"
+
+msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
+msgid "&Subtitle Menu"
+msgstr "Tekstitysvalikko"
+
+msgctxt "ID_NAVIGATE_AUDIOMENU"
+msgid "&Audio Menu"
+msgstr "Audiovalikko"
+
+msgctxt "ID_NAVIGATE_ANGLEMENU"
+msgid "An&gle Menu"
+msgstr "Kuvakulmavalikko"
+
+msgctxt "ID_NAVIGATE_CHAPTERMENU"
+msgid "&Chapter Menu"
+msgstr "Kappalevalikko"
+
+msgctxt "ID_FAVORITES"
+msgid "F&avorites"
+msgstr "Suosikit"
+
+msgctxt "POPUP"
+msgid "&Help"
+msgstr "Apua"
+
+msgctxt "ID_HELP_HOMEPAGE"
+msgid "&Home Page"
+msgstr "Kotisivu"
+
+msgctxt "ID_HELP_CHECKFORUPDATE"
+msgid "Check for &updates"
+msgstr "Tarkista päivitykset"
+
+msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
+msgid "&Command Line Switches"
+msgstr "Komentorivin muuttujat"
+
+msgctxt "ID_HELP_TOOLBARIMAGES"
+msgid "Download &Toolbar Images"
+msgstr "Lataa työkalupalkin kuvat"
+
+msgctxt "ID_HELP_DONATE"
+msgid "&Donate"
+msgstr "Lahjoita"
+
+msgctxt "ID_HELP_ABOUT"
+msgid "&About..."
+msgstr "Tietoja..."
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.fi.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.fi.strings.po
new file mode 100644
index 000000000..5a48a2fc7
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.fi.strings.po
@@ -0,0 +1,3973 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Matti Ylönen <maanylon@gmail.com>, 2016
+# phewi <phewnix@gmail.com>, 2014
+# Raimo K. Talvio, 2014
+# Sauli Ketola <sauli.ketola@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Finnish (http://www.transifex.com/mpc-hc/mpc-hc/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "IDS_INFOBAR_LOCATION"
+msgid "Location"
+msgstr "Sijainti"
+
+msgctxt "IDS_INFOBAR_VIDEO"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDS_INFOBAR_AUDIO"
+msgid "Audio"
+msgstr "Ääni"
+
+msgctxt "IDS_INFOBAR_SUBTITLES"
+msgid "Subtitles"
+msgstr "Tekstitykset"
+
+msgctxt "IDS_INFOBAR_CHAPTER"
+msgid "Chapter"
+msgstr "Kappale"
+
+msgctxt "IDS_CONTROLS_COMPLETING"
+msgid "Completing..."
+msgstr "Viimeistellään..."
+
+msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
+msgid "Play Video"
+msgstr "Toista video"
+
+msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
+msgid "Play Music"
+msgstr "Soita musiikkia"
+
+msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
+msgid "Play Audio CD"
+msgstr "Soita Ääni-CD"
+
+msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
+msgid "Play DVD Movie"
+msgstr "Toista DVD-elokuva"
+
+msgctxt "IDS_PROPSHEET_PROPERTIES"
+msgid "Properties"
+msgstr "Ominaisuudet"
+
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Tiedosto"
+
+msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
+msgid "&Default Style"
+msgstr "Oletustyyli"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Soittolista"
+
+msgctxt "IDS_FAVFILES"
+msgid "Files"
+msgstr "Tiedostot"
+
+msgctxt "IDS_FAVDVDS"
+msgid "DVDs"
+msgstr "DVD:t"
+
+msgctxt "IDS_INFOBAR_CHANNEL"
+msgid "Channel"
+msgstr "Kanava"
+
+msgctxt "IDS_INFOBAR_TIME"
+msgid "Time"
+msgstr "Aika"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET"
+msgid "Sync Offset"
+msgstr "Synkronointioffset"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
+msgid "avg: %d ms, dev: %d ms"
+msgstr "ka.: %d ms, hajonta: %d ms"
+
+msgctxt "IDS_STATSBAR_JITTER"
+msgid "Jitter"
+msgstr "Värinä"
+
+msgctxt "IDS_STATSBAR_BITRATE"
+msgid "Bitrate"
+msgstr "Bittinopeus"
+
+msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
+msgid "(avg/cur)"
+msgstr "(ka./nyk.)"
+
+msgctxt "IDS_STATSBAR_SIGNAL"
+msgid "Signal"
+msgstr "Signaali"
+
+msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
+msgid "Strength: %d dB, Quality: %ld%%"
+msgstr "Voimakkuus: %d dB, Laatu: %ld%%"
+
+msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
+msgid "Styles"
+msgstr "Tyylit"
+
+msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
+msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
+msgstr "Jos renderöintikohdetta ei ole määritetty, SSA/ASS -tekstitykset renderöidään suhteessa videokehykseen ja kaikki muut tekstimuotoiset tekstitykset renderöidään suhteutettuna ikkunaan."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Toistotila: Soittolista"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Toistotila: Tiedosto"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Toista ikuisesti: Päällä"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Toista ikuisesti: Pois"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Toista ikuisesti"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG0"
+msgid "Never (fastest approach)"
+msgstr "Ei koskaan (nopein lähestyminen)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG1"
+msgid "Only when switching different video types (default)"
+msgstr "Vain vaihdettaessa eri videotyyppejä (oletus)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG2"
+msgid "Always (slowest option)"
+msgstr "Aina (hitain vaihtoehto)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
+msgid "Not supported by some devices. Two video decoders always present in the filter graph."
+msgstr "Jotkin laitteet eivät tue. Videodekoodereita on aina kaksi suodinkaaviossa."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
+msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
+msgstr "Nopea paitsi vaihdettaessa eri videovirtojen välillä. Vain yksi videodekooderi suodinkaaviossa."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
+msgid "Not recommended. Only for testing purposes."
+msgstr "Ei suositella. Vain testaukseen."
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG0"
+msgid "Never if possible (fastest, but not supported by most filters)"
+msgstr "Ei koskaan jos mahdollista (nopein, mutta useimmat suotimet eivät tue)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG1"
+msgid "Only when switching different video types (default)"
+msgstr "Vain vaihdettaessa eri videotyyppejä (oletus)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG2"
+msgid "Always (may be required by some devices)"
+msgstr "Aina (jotkin laitteet edellyttävät)"
+
+msgctxt "IDS_INFOBAR_PARENTAL_RATING"
+msgid "Parental rating"
+msgstr "Ikärajaluokitus"
+
+msgctxt "IDS_PARENTAL_RATING"
+msgid "%d+"
+msgstr "%d+"
+
+msgctxt "IDS_NO_PARENTAL_RATING"
+msgid "Not rated"
+msgstr "Ei määritetty"
+
+msgctxt "IDS_INFOBAR_CONTENT"
+msgid "Content"
+msgstr "Sisältö"
+
+msgctxt "IDS_CONTENT_MOVIE_DRAMA"
+msgid "Movie/Drama"
+msgstr "Elokuva/Draama"
+
+msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
+msgid "News/Current affairs"
+msgstr "Uutiset/Nykyiset asiat"
+
+msgctxt "IDS_SPEED_UNIT_G"
+msgid "GB/s"
+msgstr "GB/s"
+
+msgctxt "IDS_FILE_FAV_ADDED"
+msgid "File added to favorites"
+msgstr "Tiedosto lisätty suosikkeihin"
+
+msgctxt "IDS_DVD_FAV_ADDED"
+msgid "DVD added to favorites"
+msgstr "DVD lisätty suosikkeihin"
+
+msgctxt "IDS_CAPTURE_SETTINGS"
+msgid "Capture Settings"
+msgstr "Tallennusasetukset"
+
+msgctxt "IDS_NAVIGATION_BAR"
+msgid "Navigation Bar"
+msgstr "Navigointipalkki"
+
+msgctxt "IDS_SUBRESYNC_CAPTION"
+msgid "Subresync"
+msgstr "Tekstityksen synkronointi"
+
+msgctxt "IDS_SUBRESYNC_CLN_TIME"
+msgid "Time"
+msgstr "Aika"
+
+msgctxt "IDS_SUBRESYNC_CLN_END"
+msgid "End"
+msgstr "Loppu"
+
+msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
+msgid "Preview"
+msgstr "Esikatselu"
+
+msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
+msgid "Vob ID"
+msgstr "Vob ID"
+
+msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
+msgid "Cell ID"
+msgstr "Solun ID"
+
+msgctxt "IDS_SUBRESYNC_CLN_FORCED"
+msgid "Forced"
+msgstr "Pakotettu"
+
+msgctxt "IDS_SUBRESYNC_CLN_TEXT"
+msgid "Text"
+msgstr "Teksti"
+
+msgctxt "IDS_SUBRESYNC_CLN_STYLE"
+msgid "Style"
+msgstr "Tyyli"
+
+msgctxt "IDS_SUBRESYNC_CLN_FONT"
+msgid "Font"
+msgstr "Fontti"
+
+msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
+msgid "Failed to render some of the pins of the DVD Navigator filter"
+msgstr "Joidenkin DVD-navigaattorin pinnien renderöinti epäonnistui"
+
+msgctxt "IDS_DVD_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for DVD playback"
+msgstr "DVD-toiston tarvittavien liittymien kysely epäonnistui"
+
+msgctxt "IDS_CAPTURE_LIVE"
+msgid "Live"
+msgstr "Live"
+
+msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
+msgid "Can't add video capture filter to the graph"
+msgstr "Videokaappaussuodinta ei voitu lisätä kaavioon"
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
+msgid "Can't add audio capture filter to the graph"
+msgstr "Äänenkaappaussuodinta ei voitu lisätä kaavioon"
+
+msgctxt "IDS_CAPTURE_ERROR_DEVICE"
+msgid "Could not open capture device."
+msgstr "Kaappauslaitetta ei voi avata."
+
+msgctxt "IDS_INVALID_PARAMS_ERROR"
+msgid "Can't open, invalid input parameters"
+msgstr "Ei voi avata, tuloparametrit eivät kelpaa"
+
+msgctxt "IDS_EDIT_LIST_EDITOR"
+msgid "Edit List Editor"
+msgstr "Muokkaa luettelomuokkainta"
+
+msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
+msgid "The entered time is greater than the file duration."
+msgstr "Annettu aika on suurempi kuin tiedoston kesto."
+
+msgctxt "IDS_MISSING_ICONS_LIB"
+msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
+msgstr "Kuvakekirjastoa \"mpciconlib.dll\" ei löydy.\nSoittimen oletuskuvaketta käytetään tiedostojen kytkentään.\nOle hyvä ja asenna MPC-HC uudelleen \"mpciconlib.dll\":n saamiseksi."
+
+msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
+msgid "File"
+msgstr "Tiedosto"
+
+msgctxt "IDS_SUBDL_DLG_LANGUAGE_COL"
+msgid "Language"
+msgstr "Kieli"
+
+msgctxt "IDS_SUBDL_DLG_FORMAT_COL"
+msgid "Format"
+msgstr "Formaatti"
+
+msgctxt "IDS_SUBDL_DLG_DISC_COL"
+msgid "Disc"
+msgstr "Levy"
+
+msgctxt "IDS_SUBDL_DLG_TITLES_COL"
+msgid "Title(s)"
+msgstr "Nimike (eet)"
+
+msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
+msgid "CharSet"
+msgstr "Merkistö"
+
+msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
+msgid "Unicode"
+msgstr "Unicode"
+
+msgctxt "IDS_SUBRESYNC_CLN_LAYER"
+msgid "Layer"
+msgstr "Taso"
+
+msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
+msgid "Actor"
+msgstr "Näyttelijä"
+
+msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
+msgid "Effect"
+msgstr "Efekti"
+
+msgctxt "IDS_PLAYLIST_CAPTION"
+msgid "Playlist"
+msgstr "Soittolista"
+
+msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
+msgid "On/Off"
+msgstr "Päällä/pois"
+
+msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
+msgid "From (FPS)"
+msgstr "Kuvataajuudesta"
+
+msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
+msgid "To (FPS)"
+msgstr "Kuvataajuuteen"
+
+msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
+msgid "Display mode (Hz)"
+msgstr "Näyttötila (Hz)"
+
+msgctxt "IDS_PPAGE_FS_DEFAULT"
+msgid "Default"
+msgstr "Oletus"
+
+msgctxt "IDS_PPAGE_FS_OTHER"
+msgid "Other"
+msgstr "Muu"
+
+msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
+msgid "System Default"
+msgstr "Järjestelmän oletus"
+
+msgctxt "IDS_GRAPH_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for playback"
+msgstr "Toiston vaatimien liittymien kysely epäonnistui."
+
+msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
+msgid "Could not set target window for graph notification"
+msgstr "Kohdeikkunaa ei voitu asettaa kaavion huomautukselle"
+
+msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
+msgid "Failed to render all pins of the DVD Navigator filter"
+msgstr "DVD-navigaattorisuotimen kaikkien pinnien renderöinti epäonnistui."
+
+msgctxt "IDS_PLAYLIST_OPEN"
+msgid "&Open"
+msgstr "Avaa"
+
+msgctxt "IDS_PLAYLIST_ADD"
+msgid "A&dd"
+msgstr "Lisää"
+
+msgctxt "IDS_PLAYLIST_REMOVE"
+msgid "&Remove"
+msgstr "Poista"
+
+msgctxt "IDS_PLAYLIST_CLEAR"
+msgid "C&lear"
+msgstr "Tyhjennä"
+
+msgctxt "IDS_PLAYLIST_COPYTOCLIPBOARD"
+msgid "&Copy to clipboard"
+msgstr "Kopioi leikepöydälle"
+
+msgctxt "IDS_PLAYLIST_SAVEAS"
+msgid "&Save As..."
+msgstr "Tallenna nimellä..."
+
+msgctxt "IDS_PLAYLIST_SORTBYLABEL"
+msgid "Sort by &label"
+msgstr "Lajittele nimikkeen mukaan"
+
+msgctxt "IDS_PLAYLIST_SORTBYPATH"
+msgid "Sort by &path"
+msgstr "Lajittele polun mukaan"
+
+msgctxt "IDS_PLAYLIST_RANDOMIZE"
+msgid "R&andomize"
+msgstr "Satunnainen"
+
+msgctxt "IDS_PLAYLIST_RESTORE"
+msgid "R&estore"
+msgstr "Palauta"
+
+msgctxt "IDS_SUBRESYNC_SEPARATOR"
+msgid "&Separator"
+msgstr "Erotin"
+
+msgctxt "IDS_SUBRESYNC_DELETE"
+msgid "&Delete"
+msgstr "Poista"
+
+msgctxt "IDS_SUBRESYNC_DUPLICATE"
+msgid "D&uplicate"
+msgstr "Tuplaa"
+
+msgctxt "IDS_SUBRESYNC_RESET"
+msgid "&Reset"
+msgstr "Palauta"
+
+msgctxt "IDS_MPLAYERC_104"
+msgid "Subtitle Delay -"
+msgstr "Tekstityksen viive -"
+
+msgctxt "IDS_MPLAYERC_105"
+msgid "Subtitle Delay +"
+msgstr "Tekstityksen viive +"
+
+msgctxt "IDS_FILE_SAVE_THUMBNAILS"
+msgid "Save thumbnails"
+msgstr "Tallenna pienoiskuvat"
+
+msgctxt "IDD_PPAGEPLAYBACK"
+msgid "Playback"
+msgstr "Toisto"
+
+msgctxt "IDD_PPAGEPLAYER"
+msgid "Player"
+msgstr "Soitin"
+
+msgctxt "IDD_PPAGEDVD"
+msgid "Playback::DVD/OGM"
+msgstr "Toisto::DVD/OGM"
+
+msgctxt "IDD_PPAGESUBTITLES"
+msgid "Subtitles"
+msgstr "Tekstitykset"
+
+msgctxt "IDD_PPAGEFORMATS"
+msgid "Player::Formats"
+msgstr "Soitin::Formaatit"
+
+msgctxt "IDD_PPAGETWEAKS"
+msgid "Tweaks"
+msgstr "Toimintavihjeet"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER"
+msgid "Internal Filters::Audio Switcher"
+msgstr "Sisäiset suotimet::Äänenvaihtaja"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS"
+msgid "External Filters"
+msgstr "Ulkoiset suotimet"
+
+msgctxt "IDD_PPAGESHADERS"
+msgid "Playback::Shaders"
+msgstr "Toisto::Varjostimet"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Resurssit"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Sekalaista"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "Median tiedot"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Toisto::Kaappaus"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Toisto::Sync-renderöijän asetukset"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Toisto::Koko näyttö"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Sisäiset suotimet::Äänen renderöijä"
+
+msgctxt "IDS_AUDIOSWITCHER"
+msgid "Audio Switcher"
+msgstr "Äänenvaihtaja"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
+msgid "New version of the icon library"
+msgstr "Ikonikirjaston uusi versio"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
+msgid "Do you want to reassociate the icons?"
+msgstr "Haluatko kytkeä ikonit uudelleen?"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
+msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
+msgstr "Tämä korjaa ikonikirjaston päivityksen jälkeen virheellisesti näytetyt ikonit.\nTiedostojen kytkentöjä ei muokata, vain vastaavat ikonit uusitaan."
+
+msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
+msgid "Old Video Renderer"
+msgstr "Vanha videorenderöijä"
+
+msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
+msgid "Overlay Mixer Renderer"
+msgstr "Peittokuvamikserirenderöijä"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
+msgid "Video Mixing Renderer 9 (windowed)"
+msgstr "Videomiksausrenderöijä 9 (ikkunoitu)"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
+msgid "Video Mixing Renderer 9 (renderless)"
+msgstr "Videomiksausrenderöijä 9 (renderöimätön)"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR"
+msgid "Enhanced Video Renderer"
+msgstr "Laajennettu videorenderöijä"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
+msgid "Enhanced Video Renderer (custom presenter)"
+msgstr "Laajennettu videomuunnin (oma esittäjä)"
+
+msgctxt "IDS_PPAGE_OUTPUT_DXR"
+msgid "Haali Video Renderer"
+msgstr "Haali Video -renderöijä"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Ei mitään (mikä vain)"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Ei mitään (pakkaamaton)"
+
+msgctxt "IDS_PPAGE_OUTPUT_MADVR"
+msgid "madVR"
+msgstr "madVR"
+
+msgctxt "IDD_PPAGEACCELTBL"
+msgid "Player::Keys"
+msgstr "Soitin::Näppäimet"
+
+msgctxt "IDD_PPAGESUBSTYLE"
+msgid "Subtitles::Default Style"
+msgstr "Tekstitykset::Oletustyyli"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS"
+msgid "Internal Filters"
+msgstr "Sisäiset suotimet"
+
+msgctxt "IDD_PPAGELOGO"
+msgid "Player::Logo"
+msgstr "Soitin::Logo"
+
+msgctxt "IDD_PPAGEOUTPUT"
+msgid "Playback::Output"
+msgstr "Toisto::Ulostulo"
+
+msgctxt "IDD_PPAGEWEBSERVER"
+msgid "Player::Web Interface"
+msgstr "Soitin::Nettiliittymä"
+
+msgctxt "IDD_FILEPROPDETAILS"
+msgid "Details"
+msgstr "Yksityiskohdat"
+
+msgctxt "IDD_FILEPROPCLIP"
+msgid "Clip"
+msgstr "Leike"
+
+msgctxt "IDC_DSSYSDEF"
+msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
+msgstr "Oletus DirectShow videon renderöijä. Jos muita ei voi jostain syystä ladata, käytetään oletusta. Windows XP:ssä tämä on sama kuin VMR-7 (ikkunoitu)."
+
+msgctxt "IDC_DSOLD"
+msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
+msgstr "Tämä on Windows 9x/ME/2K:n oletusrenderöijä. Videoikkunan ja näytönohjaimen ominaisuuksista riippuen se vaihtaa dynaamisesti GDI-, DirectDraw- ja peittokuvarenderöintien välillä."
+
+msgctxt "IDC_DSOVERLAYMIXER"
+msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
+msgstr "Muuntaa aina peittokuvamuodossa. Yleensä vain YUV-muodot on sallittu, mutta ne esiintyvät suodaan ilman värimuunnosta RGB:hen. Tämä on nopein muuntotapa ja ainoa, jossa voit varma täyskuvapeilauksesta TV:n aktivointiin."
+
+msgctxt "IDC_DSVMR9WIN"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Käytettävissä vain jos sinulla on DirectX 9 asennettuna. Erittäin vakaa, mutta se ei voi käyttää peittokuvarenderöintiä ja tästä syystä se voi olla hiukan hitaampi kuin peittokuvamikseri."
+
+msgctxt "IDC_DSVMR9REN"
+msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
+msgstr "Sama kuin VMR-9 (ikkunoitu), mutta sisältää MPC-HC:n sijoittaja-esittäjä-pluginin tekstityksiä varten. Peittokuvavideon peilaus VOI toimia. \"True Color\"-näyttötilaa suositellaan. Suositeltu Windows XP:lle."
+
+msgctxt "IDC_DSDXR"
+msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
+msgstr "Sama kuin VMR-9 (renderöimätön), mutta käyttää aitoa 2-pass bicubic -koon muuttajaa."
+
+msgctxt "IDC_DSNULL_COMP"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Yhdistää mihin tahansa videon omaiseen mediatyyppiin eikä lähetä tulonäytettä minnekään- Käytä, kun et tarvitse videonäyttöä ja haluat säästää CPU:ta tarpeettomattomalta käytöltä."
+
+msgctxt "IDC_DSNULL_UNCOMP"
+msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
+msgstr "Sama kuin normaali Nollamuunnin, mutta vämä yhdistää vain pakkaamattomiin tyyppeihin."
+
+msgctxt "IDC_DSEVR"
+msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
+msgstr "Käytettävissä vain Vistassa tai myöhemmissä tai Windows XP:ssä jossa vähintään .NET Framework 3.5 asennettuna"
+
+msgctxt "IDC_DSEVR_CUSTOM"
+msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
+msgstr "Sama kuin EVR, mutta mutta sisältää MPC-HC:n sijoittaja-esittäjä-pluginin tekstitystä ja jälkikäsittelyä varten. Suositellaan Windows Vistaan tai myöhempään."
+
+msgctxt "IDC_DSMADVR"
+msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
+msgstr "Korkealaatuinen muunnin, edellyttää GPU:ta, joka tukee D3D9:ä tai myöhäisempää."
+
+msgctxt "IDC_DSSYNC"
+msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
+msgstr "Sama kuin EVR (CP), mutta tarjoaa useita asetuksia videon kuvataajuuden ja näytön virkistystaajuuden synkronointiin ohitettujen tai tuplaantuneiden kuvien estämiseksi."
+
+msgctxt "IDC_RMSYSDEF"
+msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
+msgstr "Realin oma muunnin. SMIL-skriptit toimivat, mutta vuorovaikutus luultavasti ei. Käyttää DirectDrawia ja toimii peittokuvassa kun se on mahdollista."
+
+msgctxt "IDC_RMDX9"
+msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "DX9-pohjaisen Sijoittaja-Esittäjän avulla muunnetun VMR-9 (renderöimätön) Real-moottorin ulostulo."
+
+msgctxt "IDC_QTSYSDEF"
+msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
+msgstr "QuickTimen oma muunnin. Hidastuu vähän, kun videon alueen kokoa muunnetaan tai toinen ikkuna varjostaa sitä. Kun peittokuvaa ei voi käyttöö, se tahtoo pudota takaisin GDI:hin."
+
+msgctxt "IDC_QTDX9"
+msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "DX9-pohjaisen Sijoittaja-Esittäjän avulla muunnetun VMR-9 (renderöimätön) QuickTime-moottorin ulostulo."
+
+msgctxt "IDC_REGULARSURF"
+msgid "Video surface will be allocated as a regular offscreen surface."
+msgstr "Videopinta sijoitetaan kuten tavallinen kuvaruudun ulkopuolinen pinta."
+
+msgctxt "IDS_PPAGE_OUTPUT_SYNC"
+msgid "Sync Renderer"
+msgstr "Synkronointimuunnin"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
+msgid "Regular offscreen plain surface"
+msgstr "Tavallinen näytön ulkopuolinen taso"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
+msgid "2D surfaces"
+msgstr "2D pinnat"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
+msgid "3D surfaces (recommended)"
+msgstr "3D pinnat (suositeltu)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
+msgid "Nearest neighbor"
+msgstr "Lähin naapuri"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
+msgid "Bilinear"
+msgstr "Bilineaarinen"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
+msgid "Bilinear (PS 2.0)"
+msgstr "Bilineaarinen (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
+msgid "Bicubic A=-0.60 (PS 2.0)"
+msgstr "Bicubic A=-0.60 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
+msgid "Bicubic A=-0.75 (PS 2.0)"
+msgstr "Bicubic A=-0.75 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
+msgid "Bicubic A=-1.00 (PS 2.0)"
+msgstr "Bicubic A=-1.00 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
+msgid "**unavailable**"
+msgstr "**ei käytettävissä**"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
+msgid "The selected renderer is not installed."
+msgstr "Valittua muunninta ei ole asennettu."
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Ei mitään (mikä vaan)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Ei mitään (pakkaamaton)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Sisäinen äänen renderoija"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
+msgid "Name"
+msgstr "Nimi"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
+msgid "MIME Type"
+msgstr "MIME-tyyppi"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
+msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
+msgstr "Jos haluat näyttää selaimesi sisäisiä resursseja on web-liittymä otettava käyttöön.\n\nKäytä nappulaa \"Tallenna nimellä\" jos haluat ainoastaan tallentaa tiedot."
+
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Lataa tekstitykset..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Lähetä tekstitykset..."
+
+msgctxt "IDS_SUBFILE_DELAY"
+msgid "Delay (ms):"
+msgstr "Viive (ms):"
+
+msgctxt "IDS_SPEEDSTEP_AUTO"
+msgid "Auto"
+msgstr "Automaattinen"
+
+msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
+msgid "There are no customized keys to export."
+msgstr "Yksilöllisiä avaimia ei ole vietäväksi."
+
+msgctxt "IDS_RFS_NO_FILES"
+msgid "No media files found in the archive"
+msgstr "Arkistosta ei löydy mediatiedostoja"
+
+msgctxt "IDS_RFS_COMPRESSED"
+msgid "Compressed files are not supported"
+msgstr "Pakattuja tiedostoja ei tueta"
+
+msgctxt "IDS_RFS_ENCRYPTED"
+msgid "Encrypted files are not supported"
+msgstr "Salattuja tiedostoja ei tueta"
+
+msgctxt "IDS_RFS_MISSING_VOLS"
+msgid "Couldn't find all archive volumes"
+msgstr "Kaikkia arkistonimikkeitä ei löydy"
+
+msgctxt "IDC_TEXTURESURF2D"
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Videotaso sijoitetaan pinnaksi mutta silti 2d-funktioita käytetään kopiointiin ja venyttämiseen taustapuskuriin. Vaatii näytönohjaimen joka kykenee varaamaan 32-bittisiä, RGBA, non-power-of-two -kokoisia pintoja ja vähintään videon resoluutioon."
+
+msgctxt "IDC_TEXTURESURF3D"
+msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
+msgstr "Videotaso sijoitetaan pinnaksi ja piirretään kuten kaksi kolmiota 3d:ssä. Antialiasoinnin käytöllä näyttöasetuksissa voi olla huono vaikutus muuntonopeuteen."
+
+msgctxt "IDC_DX9RESIZER_COMBO"
+msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
+msgstr "Jos Pixel Shader 2.0 tukea ei ole, yksinkertaista bilineaarista käytetään automaattisesti."
+
+msgctxt "IDC_DSVMR9LOADMIXER"
+msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
+msgstr "Asettaa VMR-9 (renderöimätön) sekoitustilaan jossa sen ominaisuussivun säädöt toimivat ja se käyttää erillistä toimintosäiettä kehysrenderöintiin."
+
+msgctxt "IDC_DSVMR9YUVMIXER"
+msgid "Improves performance at the cost of some compatibility of the renderer."
+msgstr "Lisää tehoa joidenkin muuntimen yhteensopivuuden kustannuksella."
+
+msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "Reduces tearing but prevents the toolbar from being shown."
+msgstr "Vähentää kuvan repeytymistä mutta estää työkalupalkin näkymisen."
+
+msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Reduces tearing by bypassing the default VSync built into D3D."
+msgstr "Vähentää kuvan repeytymistä ohittamalla oletusarvoisen D3D:n sisäisen VSyncin."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Virittimen asemanhaku"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Tekstityksiä ei ladattu tai muunninta ei tueta."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
+msgctxt "IDS_SRC_VTS"
+msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
+msgstr "Avaa VTS_xx_0.ifo ladatakseen VTS_xx_x.vob-tiedostot yhteen kappaleeseen."
+
+msgctxt "IDS_SRC_RFS"
+msgid "Based on RARFileSource, doesn't support compressed files"
+msgstr "Koska pohjautuu RARFileSourceen ei tue pakattuja tiedostoja."
+
+msgctxt "IDS_INTERNAL_LAVF"
+msgid "Uses LAV Filters"
+msgstr "Käyttää LAV Filters-suotimia"
+
+msgctxt "IDS_INTERNAL_LAVF_WMV"
+msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
+msgstr "Käyttää LAV Filters -suotimia. Ne ovat oletuksena poistettu käytöstä, koska Microsoftin suotimet ovat yleensä vakaampia noille formaateille.\nJos päätät käyttää sisäisiä suotimia, ota ne käyttöön sekä lähteeseen että dekoodaukseen paremman toistokokemuksen saamiseksi."
+
+msgctxt "IDS_AG_TOGGLE_NAVIGATION"
+msgid "Toggle Navigation Bar"
+msgstr "Navigointipalkki päällä/pois"
+
+msgctxt "IDS_AG_VSYNCACCURATE"
+msgid "Accurate VSync"
+msgstr "Tarkka VSync"
+
+msgctxt "IDC_CHECK_RELATIVETO"
+msgid "If the rendering target is left undefined, it will be inherited from the default style."
+msgstr "Jos muuntokohde on jätetty määrittelemättä käytetään oletustyyliä "
+
+msgctxt "IDC_CHECK_NO_SUB_ANIM"
+msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
+msgstr "Poista käytöstä tekstitysten animointi. Tämän vaihtoehdon käyttöönotto vähentää prosessorin käyttöä. Voit käyttää sitä, jos kokeilet vilkkuvia tekstityksiä."
+
+msgctxt "IDC_SUBPIC_TO_BUFFER"
+msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
+msgstr "Puskuroitujen tekstitysrivien määrän noston pitäisi periaatteessa lisätä renderöintitehokkuutta näytönohjaimen muistin korkeamman käytön kustannuksella."
+
+msgctxt "IDC_BUTTON_EXT_SET"
+msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
+msgstr "Tämän napin klikkauksen jälkeen formaattiryhmän tarkistettu tila heijastaa MPC-HC:n todellista tiedostokytkentää. Vastalisätty tiedostopääte näkyy yleensä harmaana, joten älä unohda merkitä sitä uudelleen ennen tämän dialogin sulkemista."
+
+msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
+msgstr "Tämän vaihtoehdon käytöstä poisto saattaa estää tekstitysten vilkkumisen, mutta voi aiheuttaa sen, että videomuunnin ohittaa joitakin videoruutuja."
+
+msgctxt "ID_PLAY_PLAY"
+msgid "Play\nPlay"
+msgstr "Toista\nToista"
+
+msgctxt "ID_PLAY_PAUSE"
+msgid "Pause\nPause"
+msgstr "Tauko\nTauko"
+
+msgctxt "ID_PLAY_STOP"
+msgid "Stop\nStop"
+msgstr "Pysäytä\nPysäytä"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Step\nStep"
+msgstr "Askel\nAskel"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "Decrease speed\nDecrease speed"
+msgstr "Vähennä nopeutta\nVähennä nopeutta"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "Increase speed\nIncrease speed"
+msgstr "Lisää nopeutta\nLisää nopeutta"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "Mute"
+msgstr "Vaimenna"
+
+msgctxt "ID_VOLUME_MUTE_OFF"
+msgid "Unmute"
+msgstr "Poista vaimennus"
+
+msgctxt "ID_VOLUME_MUTE_DISABLED"
+msgid "No audio"
+msgstr "Ei ääntä"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "Skip back\nSkip back"
+msgstr "Hyppää taakse\nHyppää taakse"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "Skip forward\nSkip forward"
+msgstr "Hyppää eteen\nHyppää eteen"
+
+msgctxt "IDS_SUBRESYNC_ORIGINAL"
+msgid "&Original"
+msgstr "&Alkuperäinen"
+
+msgctxt "IDS_SUBRESYNC_CURRENT"
+msgid "&Current"
+msgstr "&Nykyinen"
+
+msgctxt "IDS_SUBRESYNC_EDIT"
+msgid "&Edit"
+msgstr "&Muokkaa"
+
+msgctxt "IDS_SUBRESYNC_YES"
+msgid "&Yes"
+msgstr "&Kyllä"
+
+msgctxt "IDS_SUBRESYNC_NO"
+msgid "&No"
+msgstr "&Ei"
+
+msgctxt "IDS_SUBRESYNC_DECREASE"
+msgid "&Decrease"
+msgstr "&Vähennä"
+
+msgctxt "IDS_SUBRESYNC_INCREASE"
+msgid "&Increase"
+msgstr "&Lisää"
+
+msgctxt "IDS_OPTIONS_CAPTION"
+msgid "Options"
+msgstr "Asetukset"
+
+msgctxt "IDS_SHADERS_SELECT"
+msgid "&Select Shaders..."
+msgstr "&Valitse varjostimet"
+
+msgctxt "IDS_SHADERS_DEBUG"
+msgid "&Debug Shaders..."
+msgstr "&Debuggaa varjostimet..."
+
+msgctxt "IDS_FAVORITES_ADD"
+msgid "&Add to Favorites..."
+msgstr "&Lisää Suosikkeihin"
+
+msgctxt "IDS_FAVORITES_ORGANIZE"
+msgid "&Organize Favorites..."
+msgstr "&Järjestä Suosikit"
+
+msgctxt "IDS_PLAYLIST_SHUFFLE"
+msgid "Sh&uffle"
+msgstr "Sekoita"
+
+msgctxt "IDS_PLAYLIST_SHOWFOLDER"
+msgid "Ope&n file location"
+msgstr "Avaa tiedostosijainti"
+
+msgctxt "IDS_CONTROLS_CLOSING"
+msgid "Closing..."
+msgstr "Suljetaan..."
+
+msgctxt "IDS_CONTROLS_PLAYING"
+msgid "Playing"
+msgstr "Toistetaan"
+
+msgctxt "IDS_CONTROLS_PAUSED"
+msgid "Paused"
+msgstr "Tauko"
+
+msgctxt "IDS_AG_EDL_NEW_CLIP"
+msgid "EDL new clip"
+msgstr "EDL uusi leike"
+
+msgctxt "IDS_RECENT_FILES_CLEAR"
+msgid "&Clear list"
+msgstr "&Tyhjennä lista"
+
+msgctxt "IDS_RECENT_FILES_QUESTION"
+msgid "Are you sure that you want to delete recent files list?"
+msgstr "Haluatko varmasti tuhota nykyisen tiedostoluettelon?"
+
+msgctxt "IDS_AG_EDL_SAVE"
+msgid "EDL save"
+msgstr "EDL tallennus"
+
+msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time Correction"
+msgstr "Kehyksen aikakorjaus päällä"
+
+msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
+msgid "Toggle EDL window"
+msgstr "EDL-ikkuna päällä/pois"
+
+msgctxt "IDS_AG_EDL_IN"
+msgid "EDL set In"
+msgstr "EDL asetus sisään"
+
+msgctxt "IDS_AG_EDL_OUT"
+msgid "EDL set Out"
+msgstr "EDL asetus ulos"
+
+msgctxt "IDS_AG_PNS_ROTATEX_M"
+msgid "PnS Rotate X-"
+msgstr "PnS Käännä X-"
+
+msgctxt "IDS_AG_PNS_ROTATEY_P"
+msgid "PnS Rotate Y+"
+msgstr "PnS Käännä Y+"
+
+msgctxt "IDS_AG_PNS_ROTATEY_M"
+msgid "PnS Rotate Y-"
+msgstr "PnS Käännä Y-"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_P"
+msgid "PnS Rotate Z+"
+msgstr "PnS Käännä Z+"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_M"
+msgid "PnS Rotate Z-"
+msgstr "PnS Käännä Z-"
+
+msgctxt "IDS_AG_TEARING_TEST"
+msgid "Tearing Test"
+msgstr "Repeytymistesti"
+
+msgctxt "IDS_SCALE_16_9"
+msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Skaalaa suhteeseen 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_WIDESCREEN"
+msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zoomaa laajakuvanäyttöön,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_ULTRAWIDE"
+msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zoomaa Ultra-laajakuvanäyttöön,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_PLAYLIST_HIDEFS"
+msgid "&Hide on Fullscreen"
+msgstr "Piilota Kokonäytössä"
+
+msgctxt "IDS_CONTROLS_STOPPED"
+msgid "Stopped"
+msgstr "Pysäytetty"
+
+msgctxt "IDS_CONTROLS_BUFFERING"
+msgid "Buffering... (%d%%)"
+msgstr "Puskuroidaan... (%d%%)"
+
+msgctxt "IDS_CONTROLS_CAPTURING"
+msgid "Capturing..."
+msgstr "Kaapataan..."
+
+msgctxt "IDS_CONTROLS_OPENING"
+msgid "Opening..."
+msgstr "Avataan..."
+
+msgctxt "IDS_CONTROLS_CLOSED"
+msgid "Closed"
+msgstr "Suljettu"
+
+msgctxt "IDS_SUBTITLES_OPTIONS"
+msgid "&Options..."
+msgstr "Asetukset..."
+
+msgctxt "IDS_SUBTITLES_STYLES"
+msgid "&Styles..."
+msgstr "&Tyylit..."
+
+msgctxt "IDS_SUBTITLES_RELOAD"
+msgid "&Reload"
+msgstr "&Lataa uudelleen"
+
+msgctxt "IDS_SUBTITLES_ENABLE"
+msgid "&Enable"
+msgstr "Päällä"
+
+msgctxt "IDS_PANSCAN_EDIT"
+msgid "&Edit..."
+msgstr "&Muokkaa..."
+
+msgctxt "IDS_INFOBAR_TITLE"
+msgid "Title"
+msgstr "Nimike"
+
+msgctxt "IDS_INFOBAR_AUTHOR"
+msgid "Author"
+msgstr "Julkaisija"
+
+msgctxt "IDS_INFOBAR_COPYRIGHT"
+msgid "Copyright"
+msgstr "Copyright"
+
+msgctxt "IDS_INFOBAR_RATING"
+msgid "Rating"
+msgstr "Luokitus"
+
+msgctxt "IDS_INFOBAR_DESCRIPTION"
+msgid "Description"
+msgstr "Kuvaus"
+
+msgctxt "IDS_INFOBAR_DOMAIN"
+msgid "Domain"
+msgstr "Domain"
+
+msgctxt "IDS_AG_CLOSE"
+msgid "Close"
+msgstr "Sulje"
+
+msgctxt "IDS_AG_NONE"
+msgid "None"
+msgstr "Ei mitään"
+
+msgctxt "IDS_AG_COMMAND"
+msgid "Command"
+msgstr "Komento"
+
+msgctxt "IDS_AG_KEY"
+msgid "Key"
+msgstr "Avain"
+
+msgctxt "IDS_AG_MOUSE"
+msgid "Mouse Windowed"
+msgstr "Hiiri ikkunoitu"
+
+msgctxt "IDS_AG_MOUSE_FS"
+msgid "Mouse Fullscreen"
+msgstr "Hiiri Kokonäyttö"
+
+msgctxt "IDS_AG_APP_COMMAND"
+msgid "App Command"
+msgstr "Ohjelmakomento"
+
+msgctxt "IDS_AG_MEDIAFILES"
+msgid "Media files (all types)"
+msgstr "Mediatiedostot (kaikki tyypit)"
+
+msgctxt "IDS_AG_ALLFILES"
+msgid "All files (*.*)|*.*|"
+msgstr "Kaikki tiedostot (*.*)|*.*|"
+
+msgctxt "IDS_AG_AUDIOFILES"
+msgid "Audio files (all types)"
+msgstr "Äänitiedostot (kaikki tyypit)"
+
+msgctxt "IDS_AG_NOT_KNOWN"
+msgid "Not known"
+msgstr "Tuntematon"
+
+msgctxt "IDS_MPLAYERC_0"
+msgid "Quick Open File"
+msgstr "Pika-avaa tiedosto"
+
+msgctxt "IDS_AG_OPEN_FILE"
+msgid "Open File"
+msgstr "Avaa tiedosto"
+
+msgctxt "IDS_AG_OPEN_DVD"
+msgid "Open DVD/BD"
+msgstr "Avaa DVD/BD"
+
+msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
+msgid "Failed to set post-resize shaders"
+msgstr "Koon muutoksen jälkeisten varjostimien asettaminen epäonnistui"
+
+msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
+msgid "Failed to set both pre-resize and post-resize shaders"
+msgstr "Sekä koon muutoksen jälkeisten että muutosta edeltävien varjostimien asettaminen epäonnistui"
+
+msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
+msgid "Shaders are recompiled automatically when the corresponding files are modified."
+msgstr "Varjostimet kootaan uudelleen automaattisesti kun vastaavia tiedostoja on muokattu."
+
+msgctxt "IDS_SHADER_DLL_ERR_0"
+msgid "Cannot load %s, pixel shaders will not work."
+msgstr "%s ei voi ladata, pikselivarjostimet eivät toimi."
+
+msgctxt "IDS_SHADER_DLL_ERR_1"
+msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
+msgstr "%s:n tarpeellisen funktion pääsykohtia ei löydy, pikselivarjostimet eivät toimi."
+
+msgctxt "IDS_OSD_SHADERS_PRESET"
+msgid "Shader preset: %s"
+msgstr "Varjostimen esiasetus: %s"
+
+msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
+msgid "Next Shader Preset"
+msgstr "Seuraava varjostimen esiasetus"
+
+msgctxt "IDS_AG_SHADERS_PRESET_PREV"
+msgid "Prev Shader Preset"
+msgstr "Edellinen varjostimen esiasetus"
+
+msgctxt "IDS_STRING_COLON"
+msgid "%s:"
+msgstr "%s:"
+
+msgctxt "IDS_RECORD_START"
+msgid "Record"
+msgstr "Nauhoita"
+
+msgctxt "IDS_RECORD_STOP"
+msgid "Stop"
+msgstr "Pysäytä"
+
+msgctxt "IDS_BALANCE"
+msgid "L = R"
+msgstr "V = O"
+
+msgctxt "IDS_BALANCE_L"
+msgid "L +%d%%"
+msgstr "V +%d%%"
+
+msgctxt "IDS_BALANCE_R"
+msgid "R +%d%%"
+msgstr "O +%d%%"
+
+msgctxt "IDS_VOLUME"
+msgid "%d%%"
+msgstr "%d%%"
+
+msgctxt "IDS_BOOST"
+msgid "+%d%%"
+msgstr "+%d%%"
+
+msgctxt "IDS_PLAYLIST_ADDFOLDER"
+msgid "Add containing &folder"
+msgstr "Lisää sisältökansio"
+
+msgctxt "IDS_HW_INDICATOR"
+msgid "[H/W]"
+msgstr "[H/W]"
+
+msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
+msgid "Software Decoding"
+msgstr "Ohjelmallinen dekoodaus"
+
+msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
+msgid "Playback rate"
+msgstr "Toistonopeus"
+
+msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
+msgid "&Copy filters list to clipboard"
+msgstr "&Kopioi suodinlista leikepöydälle"
+
+msgctxt "IDS_CREDENTIALS_SERVER"
+msgid "Enter server credentials"
+msgstr "Syötä palvelimen kirjautumistiedot"
+
+msgctxt "IDS_CREDENTIALS_CONNECT"
+msgid "Enter your credentials to connect"
+msgstr "Syötä kirjautumistietosi yhdistämistä varten"
+
+msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
+msgid "Save custom style"
+msgstr "Tallenna yksilöllinen tyyli"
+
+msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
+msgid "Education/Science/Factual topics"
+msgstr "Opetus/Tiede/Fakta-otsikot"
+
+msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
+msgid "Hides controls and panels also in windowed mode."
+msgstr "Piilottaa säätimet ja panelit myös ikkunoidussa tilassa."
+
+msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
+msgid "Prevent external subtitle renderer to be loaded when internal is in use."
+msgstr "Estää ulkoisen tekstitysrenderöijän latautumisen sisäistä käytettäessä."
+
+msgctxt "IDS_PPAGEADVANCED_COL_NAME"
+msgid "Name"
+msgstr "Nimi"
+
+msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
+msgid "Value"
+msgstr "Arvo"
+
+msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
+msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
+msgstr "\"Edelliset tiedostot\"-hakemistossa näytettävien tiedostojen enimmäismäärä, joiden sijainti mahdollisesti tallennetaan."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
+msgid "Remember file position only for files longer than N minutes."
+msgstr "Muista vain pidempien kuin N minuutin pituisten tiedostojen sijainti."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
+msgid "Remember file position also for audio files."
+msgstr "Muista myös äänitiedostojen sijainti."
+
+msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
+msgid "Do Nothing"
+msgstr "Älä tee mitään"
+
+msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
+msgid "Play next file in the folder"
+msgstr "Toista kansion seuraava tiedosto"
+
+msgctxt "IDS_AFTER_PLAYBACK_REWIND"
+msgid "Rewind current file"
+msgstr "Kelaa nykyinen tiedosto taaksepäin."
+
+msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
+msgid "Close"
+msgstr "Sulje"
+
+msgctxt "IDS_AFTER_PLAYBACK_EXIT"
+msgid "Exit"
+msgstr "Sulje"
+
+msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
+msgid "Turn off the monitor"
+msgstr "Sammuta näyttö"
+
+msgctxt "IDS_IMAGE_JPEG_QUALITY"
+msgid "JPEG Image"
+msgstr "JPEG-kuva"
+
+msgctxt "IDS_IMAGE_QUALITY"
+msgid "Quality (%):"
+msgstr "Laatu (%):"
+
+msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
+msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
+msgstr "Vain ääni -tilassa ladattavan kansikuvan enimmäiskoko (NxNpx)"
+
+msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
+msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
+msgstr "Tekstityksen viivettä lisätään/vähennetään tämän (%s/%s) arvon verran aina kun vastaavia pikanäppäimiä käytetään."
+
+msgctxt "IDS_HOTKEY_NOT_DEFINED"
+msgid "<not defined>"
+msgstr "<ei määritelty>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Katso"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Siirrä ylös"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Siirrä alas"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Lajittele kanavanumeron mukaan"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Poista kaikki"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Haluatko varmasti poistaa kaikki kanavat listalta?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Ei tietoa saatavilla"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Ole hyvä ja odota, analyysi on käynnissä..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "Kuvasuhde %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Lokin kirjoitus tiedostoon päälle (vaatii uudelleenkäynnistyksen)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Jäljellä oleva aika"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Korkea tarkkuus"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Toiston jälkeen: Mene nykyisen tiedoston alkuun"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Toiston jälkeen: Sulje"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC kohtasi ongelman ohjelman alustuksen yhteydessä. Sinun avullasi voimme ehkä korjata tämän ongelman.\n\nHaluatko raportoida sen eteenpäin?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Syötä positiivinen arvo jos ääni tulee liian aikaisin ja negatiivinen jos se tulee liian myöhään."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Esikatselu on pois päältä. Voit laittaa sen päälle MPC-HC:n asetuksista."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Tämä asetus sallii mediatiedostojen etäesikatselun. Käytä tätä vain asianmukaisesti suojatussa yksityisessä verkossa.\n\nHaluatko varmasti laittaa tämän päälle?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Sisäinen tekstitysrenderöijä"
+
+msgctxt "IDS_AG_OPEN_DEVICE"
+msgid "Open Device"
+msgstr "Avaa laite"
+
+msgctxt "IDS_AG_SAVE_AS"
+msgid "Save As"
+msgstr "Tallenna nimellä"
+
+msgctxt "IDS_AG_SAVE_IMAGE"
+msgid "Save Image"
+msgstr "Tallenna kuva"
+
+msgctxt "IDS_MPLAYERC_6"
+msgid "Save Image (auto)"
+msgstr "Tallenna kuva (automaattinen)"
+
+msgctxt "IDS_OSD_IMAGE_SAVED"
+msgid "Image saved successfully"
+msgstr "Kuvan tallennus onnistui"
+
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
+
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
+
+msgctxt "IDS_AG_PROPERTIES"
+msgid "Properties"
+msgstr "Ominaisuudet"
+
+msgctxt "IDS_AG_EXIT"
+msgid "Exit"
+msgstr "Sulje"
+
+msgctxt "IDS_AG_PLAYPAUSE"
+msgid "Play/Pause"
+msgstr "Toisto/Tauko"
+
+msgctxt "IDS_AG_PLAY"
+msgid "Play"
+msgstr "Toista"
+
+msgctxt "IDS_AG_STOP"
+msgid "Stop"
+msgstr "Pysäytä"
+
+msgctxt "IDS_AG_FRAMESTEP"
+msgid "Frame-step"
+msgstr "Kehysaskel"
+
+msgctxt "IDS_MPLAYERC_16"
+msgid "Frame-step back"
+msgstr "Kehysaskel taakse"
+
+msgctxt "IDS_AG_GO_TO"
+msgid "Go To"
+msgstr "Mene"
+
+msgctxt "IDS_AG_INCREASE_RATE"
+msgid "Increase Rate"
+msgstr "Lisää nopeutta"
+
+msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
+msgid "Show/Game show"
+msgstr "Esitys/Peliohjelma"
+
+msgctxt "IDS_CONTENT_SPORTS"
+msgid "Sports"
+msgstr "Urheilu"
+
+msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
+msgid "Children's/Youth programmes"
+msgstr "Lasten/Nuorten ohjelmat"
+
+msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
+msgid "Music/Ballet/Dance"
+msgstr "Musiikki/Baletti/Tanssi"
+
+msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
+msgid "Arts/Culture"
+msgstr "Taide/Kulttuuri"
+
+msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
+msgid "Social/Political issues/Economics"
+msgstr "Sosiaaliset/Poliittiset aiheet/Talous"
+
+msgctxt "IDS_CONTENT_LEISURE"
+msgid "Leisure hobbies"
+msgstr "Vapaa-ajan harrasteet"
+
+msgctxt "IDS_FILE_RECYCLE"
+msgid "Move to Recycle Bin"
+msgstr "Siirrä roskakoriin"
+
+msgctxt "IDS_AG_SAVE_COPY"
+msgid "Save a Copy"
+msgstr "Tallenna kopio"
+
+msgctxt "IDS_FASTSEEK_LATEST"
+msgid "Latest keyframe"
+msgstr "Viimeisin avainkehys"
+
+msgctxt "IDS_FASTSEEK_NEAREST"
+msgid "Nearest keyframe"
+msgstr "Lähin avainkehys"
+
+msgctxt "IDS_HOOKS_FAILED"
+msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
+msgstr "MPC-HC havaitsi virheen alustuksen aikana. DVD-toisto ei ehkä toimi oikein. Tämä voi aiheutua joidenkin turvatyökalujen yhteensopimattomuudesta.\n\nHaluatko raportoida ongelman?"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
+msgid "Never show"
+msgstr "Älä näytä koskaan"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
+msgid "Show when moving the cursor, hide after:"
+msgstr "Näytä kursoria liikutettaessa, piilota jälkeen:"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
+msgid "Show when hovering control, hide after:"
+msgstr "Näytä ohjauksen ollessa paikallaan, piilota jälkeen:"
+
+msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
+msgid "Failed to set pre-resize shaders"
+msgstr "Esi-koonmuutosvarjostimien asetus epäonnistui"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
+msgid "Frame Time Correction: On"
+msgstr "Kehyksen aikakorjaus: Päällä"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
+msgid "Frame Time Correction: Off"
+msgstr "Kehyksen aikakorjaus: Pois päältä"
+
+msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
+msgid "Target VSync Offset: %.1f"
+msgstr "Kohteen VSync Offset: %.1f"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
+msgid "VSync Offset: %d"
+msgstr "VSync Offset: %d"
+
+msgctxt "IDS_OSD_SPEED"
+msgid "Speed: %.2lfx"
+msgstr "Nopeus: %.2lfx"
+
+msgctxt "IDS_OSD_THUMBS_SAVED"
+msgid "Thumbnails saved successfully"
+msgstr "Pienoiskuvien tallennus onnistui"
+
+msgctxt "IDS_MENU_VIDEO_STREAM"
+msgid "Vide&o Track"
+msgstr "&Videoraita"
+
+msgctxt "IDS_MENU_VIDEO_ANGLE"
+msgid "Video Ang&le"
+msgstr "Videon Kulma"
+
+msgctxt "IDS_RESET_SETTINGS"
+msgid "Reset settings"
+msgstr "Palauta asetukset"
+
+msgctxt "IDS_RESET_SETTINGS_WARNING"
+msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
+msgstr "Tahdotko varmasti palauttaa MPC-HC:n oletusasetuksiin?\nVaroitus: KAIKKI nykyiset asetukset menetetään!"
+
+msgctxt "IDS_RESET_SETTINGS_MUTEX"
+msgid "Please close all instances of MPC-HC so that the default settings can be restored."
+msgstr "Ole hyvä ja sulje kaikki auki olevat MPC-HC:n instanssit, jotta oletusarvot voidaan palauttaa."
+
+msgctxt "IDS_EXPORT_SETTINGS"
+msgid "Export settings"
+msgstr "Vie asetukset"
+
+msgctxt "IDS_EXPORT_SETTINGS_WARNING"
+msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
+msgstr "Joitakin muutoksia ei ole vielä tallennettu.\nHaluatko tallentaa ne ennen vientiä?"
+
+msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
+msgid "The settings have been successfully exported."
+msgstr "Asetusten vienti onnistui."
+
+msgctxt "IDS_EXPORT_SETTINGS_FAILED"
+msgid "The export failed! This can happen when you don't have the correct rights."
+msgstr "Vienti epäonnistui! Näin voi tapahtua, jos oikeutesi eivät ole oikeat."
+
+msgctxt "IDS_BDA_ERROR"
+msgid "BDA Error"
+msgstr "BDA-virhe"
+
+msgctxt "IDS_AG_DECREASE_RATE"
+msgid "Decrease Rate"
+msgstr "Pienennä nopeutta"
+
+msgctxt "IDS_AG_RESET_RATE"
+msgid "Reset Rate"
+msgstr "Palauta nopeus"
+
+msgctxt "IDS_MPLAYERC_21"
+msgid "Audio Delay +10 ms"
+msgstr "Äänen viive +10ms"
+
+msgctxt "IDS_MPLAYERC_22"
+msgid "Audio Delay -10 ms"
+msgstr "Äänen viive -10ms"
+
+msgctxt "IDS_MPLAYERC_23"
+msgid "Jump Forward (small)"
+msgstr "Hyppää eteenpäin (vähän)"
+
+msgctxt "IDS_MPLAYERC_24"
+msgid "Jump Backward (small)"
+msgstr "Hyppää taaksepäin (vähän)"
+
+msgctxt "IDS_MPLAYERC_25"
+msgid "Jump Forward (medium)"
+msgstr "Hyppää eteenpäin (keski)"
+
+msgctxt "IDS_MPLAYERC_26"
+msgid "Jump Backward (medium)"
+msgstr "Hyppää taaksepäin (keski)"
+
+msgctxt "IDS_MPLAYERC_27"
+msgid "Jump Forward (large)"
+msgstr "Hyppää eteenpäin (paljon)"
+
+msgctxt "IDS_MPLAYERC_28"
+msgid "Jump Backward (large)"
+msgstr "Hyppää taaksepäin (paljon)"
+
+msgctxt "IDS_MPLAYERC_29"
+msgid "Jump Forward (keyframe)"
+msgstr "Hyppää eteenpäin (avainkehys)"
+
+msgctxt "IDS_MPLAYERC_30"
+msgid "Jump Backward (keyframe)"
+msgstr "Hyppää taaksepäin (avainkehys)"
+
+msgctxt "IDS_AG_NEXT"
+msgid "Next"
+msgstr "Seuraava"
+
+msgctxt "IDS_AG_PREVIOUS"
+msgid "Previous"
+msgstr "Edellinen"
+
+msgctxt "IDS_AG_NEXT_FILE"
+msgid "Next File"
+msgstr "Seuraava tiedosto"
+
+msgctxt "IDS_AG_PREVIOUS_FILE"
+msgid "Previous File"
+msgstr "Edellinen tiedosto"
+
+msgctxt "IDS_MPLAYERC_99"
+msgid "Toggle Direct3D fullscreen"
+msgstr "Direct3D kokonäyttö päällä/pois"
+
+msgctxt "IDS_MPLAYERC_100"
+msgid "Goto Prev Subtitle"
+msgstr "Mene edelliseen tekstitykseen"
+
+msgctxt "IDS_MPLAYERC_101"
+msgid "Goto Next Subtitle"
+msgstr "Mene seuraavaan tekstitykseen"
+
+msgctxt "IDS_MPLAYERC_102"
+msgid "Shift Subtitle Left"
+msgstr "Siirrä tekstitystä vasempaan"
+
+msgctxt "IDS_MPLAYERC_103"
+msgid "Shift Subtitle Right"
+msgstr "Siirrä tekstitystä oikeaan"
+
+msgctxt "IDS_AG_SEEKSET"
+msgid "Jump to Beginning"
+msgstr "Hyppää alkuun"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "Kuvaruutunäyttö: Näytä tiedostonimi"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Soita DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Soita BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "Kuvaruutunäyttö: Näytä renderöijän statistiikat"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "Kuvaruutunäyttö: Resetoi renderöijän statistiikka"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Tekstitykset::Sekalaiset"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Piilota &rajat"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Vain kehys"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Näytä Caption&&Valikko"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Piilota &valikko"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Kehittynyt"
+
+msgctxt "IDS_AG_VIEW_MINIMAL"
+msgid "View Minimal"
+msgstr "Näytä pienenä"
+
+msgctxt "IDS_AG_VIEW_COMPACT"
+msgid "View Compact"
+msgstr "Näytä kompaktina"
+
+msgctxt "IDS_AG_VIEW_NORMAL"
+msgid "View Normal"
+msgstr "Näytä normaalina"
+
+msgctxt "IDS_AG_FULLSCREEN"
+msgid "Fullscreen"
+msgstr "Koko näyttö"
+
+msgctxt "IDS_MPLAYERC_39"
+msgid "Fullscreen (w/o res.change)"
+msgstr "Kokonäyttö (ilman res.vaihtoa)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT"
+msgid "Zoom Auto Fit"
+msgstr "Zoomaa näyttöön automaattisesti"
+
+msgctxt "IDS_AG_VIDFRM_HALF"
+msgid "VidFrm Half"
+msgstr "VidFrm Puoli"
+
+msgctxt "IDS_AG_VIDFRM_NORMAL"
+msgid "VidFrm Normal"
+msgstr "VidFrm Normaali"
+
+msgctxt "IDS_AG_VIDFRM_DOUBLE"
+msgid "VidFrm Double"
+msgstr "VidFrm Kaksinkertainen"
+
+msgctxt "IDS_AG_ALWAYS_ON_TOP"
+msgid "Always On Top"
+msgstr "Aina päällimmäisenä"
+
+msgctxt "IDS_AG_PNS_INC_SIZE"
+msgid "PnS Inc Size"
+msgstr "PnS Lis.Kokoa"
+
+msgctxt "IDS_AG_PNS_INC_WIDTH"
+msgid "PnS Inc Width"
+msgstr "PnS Lis.Leveyttä"
+
+msgctxt "IDS_MPLAYERC_47"
+msgid "PnS Inc Height"
+msgstr "PnS Lis.Korkeutta"
+
+msgctxt "IDS_AG_PNS_DEC_SIZE"
+msgid "PnS Dec Size"
+msgstr "PnS Väh.Kokoa"
+
+msgctxt "IDS_AG_PNS_DEC_WIDTH"
+msgid "PnS Dec Width"
+msgstr "PnS Väh.Leveyttä"
+
+msgctxt "IDS_MPLAYERC_50"
+msgid "PnS Dec Height"
+msgstr "PnS Väh.Korkeutta"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
+msgid "Downloading [%s] \"%s\""
+msgstr "Ladataan [%s] \"%s\""
+
+msgctxt "IDS_SUBDL_DLG_PARSING"
+msgid "Parsing list..."
+msgstr "Tutkitaan luetteloa..."
+
+msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
+msgid "No subtitles found."
+msgstr "Tekstityksiä ei löydy."
+
+msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
+msgid "%d subtitle(s) available."
+msgstr "%d tekstitystä tarjolla."
+
+msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
+msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
+msgstr "Haluatko tarkistaa ajoittain MPC-HC:n päivitykset?\n\nTämä ominaisuus voidaan poistaa myöhemmin käytöstä Sekalaista-vaihtoehtosivulta."
+
+msgctxt "IDS_ZOOM_50"
+msgid "50%"
+msgstr "50%"
+
+msgctxt "IDS_ZOOM_100"
+msgid "100%"
+msgstr "100 %"
+
+msgctxt "IDS_ZOOM_200"
+msgid "200%"
+msgstr "200%"
+
+msgctxt "IDS_ZOOM_AUTOFIT"
+msgid "Auto Fit"
+msgstr "Automaattinen sovitus"
+
+msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (Larger Only)"
+msgstr "Automaattinen sovitus (Vain suurempi)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
+msgid "Zoom Auto Fit (Larger Only)"
+msgstr "Zoomaus sovita automaattisesti (Vain suurempi)"
+
+msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
+msgid "Zoom: Auto (Larger Only)"
+msgstr "Zoom: Automaattinen (Vain suurempi)"
+
+msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
+msgid "Double click to open file location"
+msgstr "Kaksoisklikkaa avataksesi tiedostosijainnin"
+
+msgctxt "IDS_TOOLTIP_REMAINING_TIME"
+msgid "Toggle between elapsed and remaining time"
+msgstr "Vaihda kuluneen ja jäljellä olevan ajan välillä"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
+msgid "Invalid delay"
+msgstr "Viive ei kelpaa"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
+msgid "Please enter a number between 1 and 365."
+msgstr "Syötä numero väliltä 1-365."
+
+msgctxt "IDS_AG_PNS_CENTER"
+msgid "PnS Center"
+msgstr "PnS Keskelle"
+
+msgctxt "IDS_AG_PNS_LEFT"
+msgid "PnS Left"
+msgstr "PnS Vasemmalle"
+
+msgctxt "IDS_AG_PNS_RIGHT"
+msgid "PnS Right"
+msgstr "PnS Oikealle"
+
+msgctxt "IDS_AG_PNS_UP"
+msgid "PnS Up"
+msgstr "PnS Ylös"
+
+msgctxt "IDS_AG_PNS_DOWN"
+msgid "PnS Down"
+msgstr "PnS Alas"
+
+msgctxt "IDS_AG_PNS_UPLEFT"
+msgid "PnS Up/Left"
+msgstr "PnS Ylös/Vasemmalle"
+
+msgctxt "IDS_AG_PNS_UPRIGHT"
+msgid "PnS Up/Right"
+msgstr "PnS Ylös/Oikealle"
+
+msgctxt "IDS_AG_PNS_DOWNLEFT"
+msgid "PnS Down/Left"
+msgstr "PnS Alas/Vasemmalle"
+
+msgctxt "IDS_MPLAYERC_59"
+msgid "PnS Down/Right"
+msgstr "PnS Alas/Oikealle"
+
+msgctxt "IDS_AG_VOLUME_UP"
+msgid "Volume Up"
+msgstr "Lisää äänen voimakkuutta"
+
+msgctxt "IDS_AG_VOLUME_DOWN"
+msgid "Volume Down"
+msgstr "Vähennä äänen voimakkuutta"
+
+msgctxt "IDS_AG_VOLUME_MUTE"
+msgid "Volume Mute"
+msgstr "Vaimenna ääni"
+
+msgctxt "IDS_MPLAYERC_63"
+msgid "DVD Title Menu"
+msgstr "DVD Otsikkovalikko"
+
+msgctxt "IDS_AG_DVD_ROOT_MENU"
+msgid "DVD Root Menu"
+msgstr "DVD Juurivalikko"
+
+msgctxt "IDS_MPLAYERC_65"
+msgid "DVD Subtitle Menu"
+msgstr "DVD Tekstitysvalikko"
+
+msgctxt "IDS_MPLAYERC_66"
+msgid "DVD Audio Menu"
+msgstr "DVD äänivalikko"
+
+msgctxt "IDS_MPLAYERC_67"
+msgid "DVD Angle Menu"
+msgstr "DVD Kulmavalikko"
+
+msgctxt "IDS_MPLAYERC_68"
+msgid "DVD Chapter Menu"
+msgstr "DVD Kappalevalikko"
+
+msgctxt "IDS_AG_DVD_MENU_LEFT"
+msgid "DVD Menu Left"
+msgstr "DVD Valikko vasemmalle"
+
+msgctxt "IDS_MPLAYERC_70"
+msgid "DVD Menu Right"
+msgstr "DVD Valikko oikealle"
+
+msgctxt "IDS_AG_DVD_MENU_UP"
+msgid "DVD Menu Up"
+msgstr "DVD Valikko ylös"
+
+msgctxt "IDS_AG_DVD_MENU_DOWN"
+msgid "DVD Menu Down"
+msgstr "DVD Valikko alas"
+
+msgctxt "IDS_MPLAYERC_73"
+msgid "DVD Menu Activate"
+msgstr "DVD Valikko Aktivointi"
+
+msgctxt "IDS_AG_DVD_MENU_BACK"
+msgid "DVD Menu Back"
+msgstr "DVD Valikko Takaisin"
+
+msgctxt "IDS_MPLAYERC_75"
+msgid "DVD Menu Leave"
+msgstr "DVD Valikko Poistu"
+
+msgctxt "IDS_AG_BOSS_KEY"
+msgid "Boss key"
+msgstr "Pomo-näppäin"
+
+msgctxt "IDS_MPLAYERC_77"
+msgid "Player Menu"
+msgstr "Soitinmenu"
+
+msgctxt "IDS_MPLAYERC_78"
+msgid "Player Menu (full)"
+msgstr "Soitinmenu (täydellinen)"
+
+msgctxt "IDS_AG_FILTERS_MENU"
+msgid "Filters Menu"
+msgstr "Suodinvalikko"
+
+msgctxt "IDS_AG_OPTIONS"
+msgid "Options"
+msgstr "Asetukset"
+
+msgctxt "IDS_AG_NEXT_AUDIO"
+msgid "Next Audio Track"
+msgstr "Seuraava ääniraita"
+
+msgctxt "IDS_AG_PREV_AUDIO"
+msgid "Prev Audio Track"
+msgstr "Edellinen ääniraita"
+
+msgctxt "IDS_AG_NEXT_SUBTITLE"
+msgid "Next Subtitle Track"
+msgstr "Seuraava tekstitysraita"
+
+msgctxt "IDS_AG_PREV_SUBTITLE"
+msgid "Prev Subtitle Track"
+msgstr "Edellinen tekstitysraita"
+
+msgctxt "IDS_MPLAYERC_85"
+msgid "On/Off Subtitle"
+msgstr "Tekstitys päällä/pois"
+
+msgctxt "IDS_MPLAYERC_86"
+msgid "Reload Subtitles"
+msgstr "Lataa tekstitykset uudelleen"
+
+msgctxt "IDS_MPLAYERC_91"
+msgid "Next Angle (DVD)"
+msgstr "Seuraava kulma (DVD)"
+
+msgctxt "IDS_MPLAYERC_92"
+msgid "Prev Angle (DVD)"
+msgstr "Edellinen kulma (DVD)"
+
+msgctxt "IDS_MPLAYERC_93"
+msgid "Next Audio Track (DVD)"
+msgstr "Seuraava ääniraita (DVD)"
+
+msgctxt "IDS_MPLAYERC_94"
+msgid "Prev Audio Track (DVD)"
+msgstr "Edellinen ääniraita (DVD)"
+
+msgctxt "IDS_MPLAYERC_95"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Seuraava tekstitysraita (DVD)"
+
+msgctxt "IDS_MPLAYERC_96"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Edellinen tekstitysraita (DVD)"
+
+msgctxt "IDS_MPLAYERC_97"
+msgid "On/Off Subtitle (DVD)"
+msgstr "Tekstitys päällä/pois (DVD)"
+
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "Kuvaruutunäyttö: Näytä tämänhetkinen aika"
+
+msgctxt "IDS_PPAGEWEBSERVER_0"
+msgid "Select the directory"
+msgstr "Valitse hakemisto"
+
+msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
+msgid "Quick add favorite"
+msgstr "Suosikin pikalisäys"
+
+msgctxt "IDS_DVB_CHANNEL_NUMBER"
+msgid "N"
+msgstr "N"
+
+msgctxt "IDS_DVB_CHANNEL_NAME"
+msgid "Name"
+msgstr "Nimi"
+
+msgctxt "IDS_DVB_CHANNEL_FREQUENCY"
+msgid "Frequency"
+msgstr "Taajuus"
+
+msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
+msgid "Encrypted"
+msgstr "Salattu"
+
+msgctxt "IDS_YES"
+msgid "Yes"
+msgstr "Kyllä"
+
+msgctxt "IDS_NO"
+msgid "No"
+msgstr "Ei"
+
+msgctxt "IDS_DVB_CHANNEL_START_SCAN"
+msgid "Start"
+msgstr "Käynnistä"
+
+msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
+msgid "Stop"
+msgstr "Pysäytä"
+
+msgctxt "IDS_DVB_TVNAV_SEERADIO"
+msgid "Radio stations"
+msgstr "Radioasemat"
+
+msgctxt "IDS_DVB_TVNAV_SEETV"
+msgid "TV stations"
+msgstr "TV-asemat"
+
+msgctxt "IDS_DVB_CHANNEL_FORMAT"
+msgid "Format"
+msgstr "Formaatti"
+
+msgctxt "IDS_MAINFRM_2"
+msgid "Focus lost to: %s - %s"
+msgstr "Tarkennus hävinnyt: %s-%s"
+
+msgctxt "IDS_AG_SUBTITLES_SAVED"
+msgid "Subtitles saved"
+msgstr "Tekstitykset tallennettu"
+
+msgctxt "IDS_MAINFRM_4"
+msgid "Cannot save subtitles"
+msgstr "Tekstityksiä ei voi tallentaa"
+
+msgctxt "IDS_AG_FRAMERATE"
+msgid "Frame rate"
+msgstr "Kuvataajuus"
+
+msgctxt "IDS_MAINFRM_6"
+msgid "drawn: %d, dropped: %d"
+msgstr "piirretty: %d, pudotettu: %d"
+
+msgctxt "IDS_AG_FRAMES"
+msgid "Frames"
+msgstr "Kehystä"
+
+msgctxt "IDS_AG_BUFFERS"
+msgid "Buffers"
+msgstr "Puskurit"
+
+msgctxt "IDS_MAINFRM_9"
+msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
+msgstr "Levy: %02lu/%02lu, Nimike: %02lu/%02lu, Kappale: %02lu/%02lu"
+
+msgctxt "IDS_MAINFRM_10"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Kulma: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+
+msgctxt "IDS_MAINFRM_11"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %uHz %dbittiä %d %s"
+
+msgctxt "IDS_ADD_TO_PLAYLIST"
+msgid "Add to MPC-HC Playlist"
+msgstr "Lisää MPC-HC:n soittolistaan"
+
+msgctxt "IDS_OPEN_WITH_MPC"
+msgid "Play with MPC-HC"
+msgstr "Toista MPC-HC:lla"
+
+msgctxt "IDS_CANNOT_CHANGE_FORMAT"
+msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
+msgstr "MPC-HC:n oikeudet eivät riitä tiedostomuotojen kytkentöjen muuttamiseen. Klikkaa \"Suorita järjestelmänvalvojana\" -painiketta."
+
+msgctxt "IDS_APP_DESCRIPTION"
+msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
+msgstr "MPC-HC on erittäin kevyt avoimen lähdekoodin mediasoitin Windowsille. Se tukee kaikkien yleisten video- ja äänitiedostomuotojen toistoa. Olemme 100% vapaita vakoiluohjelmista. Mainoksia tai työkalupalkkeja ei ole."
+
+msgctxt "IDS_MAINFRM_12"
+msgid "channel"
+msgstr "kanava"
+
+msgctxt "IDS_MAINFRM_13"
+msgid "channels"
+msgstr "kanavat"
+
+msgctxt "IDS_AG_TITLE"
+msgid "Title %u"
+msgstr "Nimike %u"
+
+msgctxt "IDS_MAINFRM_16"
+msgid "DVD: Unexpected error"
+msgstr "DVD: Odottamaton virhe"
+
+msgctxt "IDS_MAINFRM_17"
+msgid "DVD: Copy-Protect Fail"
+msgstr "DVD: Kopiosuojausvirhe"
+
+msgctxt "IDS_MAINFRM_18"
+msgid "DVD: Invalid DVD 1.x Disc"
+msgstr "DVD: DVD 1.x levy ei kelpaa"
+
+msgctxt "IDS_MAINFRM_19"
+msgid "DVD: Invalid Disc Region"
+msgstr "DVD: Levyn aluekoodi ei kelpaa"
+
+msgctxt "IDS_MAINFRM_20"
+msgid "DVD: Low Parental Level"
+msgstr "DVD: Alhainen ikärajaluokitustaso"
+
+msgctxt "IDS_MAINFRM_21"
+msgid "DVD: Macrovision Fail"
+msgstr "DVD: Macrovisio-virhe"
+
+msgctxt "IDS_MAINFRM_22"
+msgid "DVD: Incompatible System And Decoder Regions"
+msgstr "DVD: Väärät järjestelmä- ja dekooderialueet"
+
+msgctxt "IDS_MAINFRM_23"
+msgid "DVD: Incompatible Disc And Decoder Regions"
+msgstr "DVD: Väärät levy- ja dekooderialueet"
+
+msgctxt "IDS_D3DFS_WARNING"
+msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
+msgstr "Tämä asetus on suunniteltu kuvan repeämisen estämiseen. Se estää kuitenkin toistettaessa MPC-HC:ta näyttämästä pikavalikkoa tai mitään muutakaan valintaikkunaa.\n\nHaluatko varmasti laittaa tämän päälle?"
+
+msgctxt "IDS_MAINFRM_139"
+msgid "Sub delay: %ld ms"
+msgstr "Tekstin viive: %ld ms"
+
+msgctxt "IDS_AG_TITLE2"
+msgid "Title: %02d/%02d"
+msgstr "Nimike: %02d/%02d"
+
+msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
+msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
+msgstr "Tiedostonimi sisältää merkkejä, joita ei tueta (käytä vain A-Z, 0-9)"
+
+msgctxt "IDS_THUMB_ROWNUMBER"
+msgid "Rows:"
+msgstr "Rivejä:"
+
+msgctxt "IDS_THUMB_COLNUMBER"
+msgid "Columns:"
+msgstr "Sarakkeita:"
+
+msgctxt "IDS_THUMB_IMAGE_WIDTH"
+msgid "Image width"
+msgstr "Kuvan leveys"
+
+msgctxt "IDS_AG_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Kuvasuhde"
+
+msgctxt "IDS_MAINFRM_37"
+msgid ", Total: %ld, Dropped: %ld"
+msgstr ", Yhteensä: %ld, Pudotettu: %ld"
+
+msgctxt "IDS_MAINFRM_38"
+msgid ", Size: %I64d KB"
+msgstr ", Koko: %I64dKB"
+
+msgctxt "IDS_MAINFRM_39"
+msgid ", Size: %I64d MB"
+msgstr ", Koko: %I64dMB"
+
+msgctxt "IDS_MAINFRM_40"
+msgid ", Free: %I64d KB"
+msgstr ", Vapaa: %I64dKB"
+
+msgctxt "IDS_MAINFRM_41"
+msgid ", Free: %I64d MB"
+msgstr ", Vapaa: %I64dMB"
+
+msgctxt "IDS_MAINFRM_42"
+msgid ", Free V/A Buffers: %03d/%03d"
+msgstr ", Vapaita V/A-puskureita: %03d/%03d"
+
+msgctxt "IDS_AG_ERROR"
+msgid "Error"
+msgstr "Virhe"
+
+msgctxt "IDS_SUBTITLE_STREAM_OFF"
+msgid "Subtitle: off"
+msgstr "Tekstitys: pois"
+
+msgctxt "IDS_SUBTITLE_STREAM"
+msgid "Subtitle: %s"
+msgstr "Tekstitys: %s"
+
+msgctxt "IDS_MAINFRM_46"
+msgid "Select the path for the DVD/BD:"
+msgstr "Valitse DVD/BD:n polku:"
+
+msgctxt "IDS_SUB_LOADED_SUCCESS"
+msgid " loaded successfully"
+msgstr " lataus onnistui"
+
+msgctxt "IDS_ALL_FILES_FILTER"
+msgid "All files (*.*)|*.*||"
+msgstr "Kaikki tiedostot (*.*)|*.*||"
+
+msgctxt "IDS_GETDIB_FAILED"
+msgid "GetDIB failed, hr = %08x"
+msgstr "GetDIB epäonnistui, hr = %08x"
+
+msgctxt "IDS_GETCURRENTIMAGE_FAILED"
+msgid "GetCurrentImage failed, hr = %08x"
+msgstr "GetCurrentImage epäonnistui, hr = %08x"
+
+msgctxt "IDS_SCREENSHOT_ERROR"
+msgid "Cannot create file"
+msgstr "Tiedostoa ei voi luoda"
+
+msgctxt "IDS_THUMBNAILS_NO_DURATION"
+msgid "Cannot create thumbnails for files with no duration"
+msgstr "Tiedostoille, joilla ei ole kestoa, ei voi luoda pienoiskuvaa."
+
+msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
+msgid "Failed to get video frame size"
+msgstr "Videokehyksen koon saanti epäonnistui"
+
+msgctxt "IDS_OUT_OF_MEMORY"
+msgid "Out of memory, go buy some more!"
+msgstr "Muisti on lopussa, mene ostamaan lisää!"
+
+msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
+msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
+msgstr "Virheellinen kuvaformaatti, pienoiskuvia ei voi luoda %d bpp dibs."
+
+msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
+msgid "File Size: %s (%s bytes)\\N"
+msgstr "Tiedostokoko: %s (%s tavua)\\N"
+
+msgctxt "IDS_THUMBNAILS_INFO_HEADER"
+msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Tiedostonimi: %s\\N%sResoluutio: %dx%d %s\\NKesto: %02d:%02d:%02d"
+
+msgctxt "IDS_THUMBNAIL_TOO_SMALL"
+msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
+msgstr "Pienoiskuvista tulisi liian pieniä, tiedostoa ei voi luoda .\n\nYritä vähentää pienoiskuvien määrää tai suurenna kokonaiskokoa."
+
+msgctxt "IDS_CANNOT_LOAD_SUB"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Tekstityksien latausta varten on vaihdettava videon renderöijän tyyppiä ja avattava tiedosto uudelleen.\n- DirectShow: VMR-9 (renderöimätön), EVR (CP), Sync, madVR tai Haali\n- RealMedia: RealMedian erikoisrenderöijä, tai avaus DirectShow'n kautta.\n- QuickTime: QuickTimen DX7- tai DX9-renderöijä\n - ShockWave: n/a"
+
+msgctxt "IDS_SUBTITLE_FILES_FILTER"
+msgid "Subtitle files"
+msgstr "Tekstitystiedostot"
+
+msgctxt "IDS_MAINFRM_68"
+msgid "Aspect Ratio: %ld:%ld"
+msgstr "Kuvasuhde: %ld:%ld"
+
+msgctxt "IDS_MAINFRM_69"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Kuvasuhde: Oletus (DAR)"
+
+msgctxt "IDS_MAINFRM_70"
+msgid "Audio delay: %I64d ms"
+msgstr "Äänen viive: %I64dms"
+
+msgctxt "IDS_AG_CHAPTER"
+msgid "Chapter %d"
+msgstr "Kappale %d"
+
+msgctxt "IDS_AG_OUT_OF_MEMORY"
+msgid "Out of memory"
+msgstr "Muisti lopussa"
+
+msgctxt "IDS_MAINFRM_77"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Virhe: Internet Explorer:n Adobe Flash Player vaaditaan"
+
+msgctxt "IDS_MAINFRM_78"
+msgid "QuickTime not yet supported for X64 (apple library not available)"
+msgstr "QuickTime ei ole vielä tuettu X64:ssä (Apple-kirjastoa ei saatavissa)"
+
+msgctxt "IDS_MAINFRM_80"
+msgid "Failed to create the filter graph object"
+msgstr "Suodinkaavion objektin luonti epäonnistui"
+
+msgctxt "IDS_MAINFRM_81"
+msgid "Invalid argument"
+msgstr "Perustelu ei kelpaa"
+
+msgctxt "IDS_MAINFRM_82"
+msgid "Opening aborted"
+msgstr "Avaaminen keskeytetty"
+
+msgctxt "IDS_MAINFRM_83"
+msgid "Failed to render the file"
+msgstr "Tiedoston muunto epäonnistui"
+
+msgctxt "IDS_AG_CHAPTER2"
+msgid "Chapter: "
+msgstr "Kappale:"
+
+msgctxt "IDS_VOLUME_OSD"
+msgid "Vol: %d%%"
+msgstr "Voimakkuus: %d%%"
+
+msgctxt "IDS_BOOST_OSD"
+msgid "Boost: +%u%%"
+msgstr "Vahvistus: +%u%%"
+
+msgctxt "IDS_BALANCE_OSD"
+msgid "Balance: %s"
+msgstr "Balanssi: %s"
+
+msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
+msgid "Current"
+msgstr "Nykyinen"
+
+msgctxt "IDS_MAINFRM_DIR_TITLE"
+msgid "Select Directory"
+msgstr "Valitse hakemisto"
+
+msgctxt "IDS_MAINFRM_DIR_CHECK"
+msgid "Include subdirectories"
+msgstr "Sisällytä alihakemistot"
+
+msgctxt "IDS_AG_PAUSE"
+msgid "Pause"
+msgstr "Tauko"
+
+msgctxt "IDS_AG_TOGGLE_CAPTION"
+msgid "Toggle Caption&Menu"
+msgstr "Tekstitysvalikko päällä/pois"
+
+msgctxt "IDS_AG_TOGGLE_SEEKER"
+msgid "Toggle Seek Bar"
+msgstr "Etsintä päällä/pois"
+
+msgctxt "IDS_AG_TOGGLE_CONTROLS"
+msgid "Toggle Controls"
+msgstr "Hallinta päällä/pois"
+
+msgctxt "IDS_MAINFRM_84"
+msgid "Invalid file name"
+msgstr "Tiedostonimi ei kelpaa"
+
+msgctxt "IDS_MAINFRM_86"
+msgid "Cannot connect the filters"
+msgstr "Suotimia ei voi yhdistää"
+
+msgctxt "IDS_MAINFRM_87"
+msgid "Cannot load any source filter"
+msgstr "Yhtään lähdesuodinta ei voi ladata"
+
+msgctxt "IDS_MAINFRM_88"
+msgid "Cannot render the file"
+msgstr "Tiedostoa ei voi muuntaa"
+
+msgctxt "IDS_MAINFRM_89"
+msgid "Invalid file format"
+msgstr "Tiedoston formaatti ei kelpaa"
+
+msgctxt "IDS_MAINFRM_90"
+msgid "File not found"
+msgstr "Tiedostoa ei löydy"
+
+msgctxt "IDS_MAINFRM_91"
+msgid "Unknown file type"
+msgstr "Tuntematon tiedostotyyppi"
+
+msgctxt "IDS_MAINFRM_92"
+msgid "Unsupported stream"
+msgstr "Virtaa ei tueta"
+
+msgctxt "IDS_MAINFRM_93"
+msgid "Cannot find DVD directory"
+msgstr "DVD-hakemistoa ei löydy"
+
+msgctxt "IDS_MAINFRM_94"
+msgid "Can't create the DVD Navigator filter"
+msgstr "DVD navigointisuodinta ei voi luoda"
+
+msgctxt "IDS_AG_FAILED"
+msgid "Failed"
+msgstr "Epäonnistui"
+
+msgctxt "IDS_MAINFRM_96"
+msgid "Can't create video capture filter"
+msgstr "Videokaappaussuodinta ei voi luoda"
+
+msgctxt "IDS_MAINFRM_98"
+msgid "No capture filters"
+msgstr "Ei kaappaussuotimia"
+
+msgctxt "IDS_MAINFRM_99"
+msgid "Can't create capture graph builder object"
+msgstr "Kaappauskaavion rakentajaobjektia ei voi luoda"
+
+msgctxt "IDS_MAINFRM_108"
+msgid "Couldn't open any device"
+msgstr "Mitään laitetta ei voi avata"
+
+msgctxt "IDS_AG_SOUND"
+msgid "Sound"
+msgstr "Ääni"
+
+msgctxt "IDS_MAINFRM_114"
+msgid "%s was not found, please insert media containing this file."
+msgstr "%s ei löydy, aseta tiedoston sisältävä media."
+
+msgctxt "IDS_AG_ABORTED"
+msgid "Aborted"
+msgstr "Keskeytetty"
+
+msgctxt "IDS_MAINFRM_116"
+msgid "&Properties..."
+msgstr "&Ominaisuudet..."
+
+msgctxt "IDS_MAINFRM_117"
+msgid " (pin) properties..."
+msgstr " (pinnin) ominaisuudet..."
+
+msgctxt "IDS_AG_UNKNOWN_STREAM"
+msgid "Unknown Stream"
+msgstr "Tuntematon virta"
+
+msgctxt "IDS_AG_UNKNOWN"
+msgid "Unknown %u"
+msgstr "Tuntematon %u"
+
+msgctxt "IDS_AG_VSYNC"
+msgid "VSync"
+msgstr "VSync"
+
+msgctxt "IDS_MAINFRM_121"
+msgid " (Director Comments 1)"
+msgstr " (Ohjaajan kommentit 1)"
+
+msgctxt "IDS_MAINFRM_122"
+msgid " (Director Comments 2)"
+msgstr " (Ohjaajan kommentit 2)"
+
+msgctxt "IDS_DVD_SUBTITLES_ENABLE"
+msgid "Enable DVD subtitles"
+msgstr "Ota käyttöön DVD:n tekstitykset"
+
+msgctxt "IDS_AG_ANGLE"
+msgid "Angle %u"
+msgstr "Kulma %u"
+
+msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
+msgid "Increase VSync Offset"
+msgstr "Lisää VSync Offsetia"
+
+msgctxt "IDS_AG_DISABLED"
+msgid "Disabled"
+msgstr "Ei käytössä"
+
+msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
+msgid "Decrease VSync Offset"
+msgstr "Pienennä VSync Offsetia"
+
+msgctxt "IDS_MAINFRM_136"
+msgid "MPC-HC D3D Fullscreen"
+msgstr "MPC-HC D3D Kokonäyttö"
+
+msgctxt "IDS_MAINFRM_137"
+msgid "Unknown format"
+msgstr "Tuntematon formaatti"
+
+msgctxt "IDS_MAINFRM_138"
+msgid "Sub shift: %ld ms"
+msgstr "Tekstityksen siirto: %ld ms"
+
+msgctxt "IDS_VOLUME_BOOST_INC"
+msgid "Volume boost increase"
+msgstr "Lisää äänenvoimakkuuden vahvistusta"
+
+msgctxt "IDS_VOLUME_BOOST_DEC"
+msgid "Volume boost decrease"
+msgstr "Vähennä äänenvoimakkuuden vahvistusta"
+
+msgctxt "IDS_VOLUME_BOOST_MIN"
+msgid "Volume boost Min"
+msgstr "Äänenvoimakkuuden vahvistus Min."
+
+msgctxt "IDS_VOLUME_BOOST_MAX"
+msgid "Volume boost Max"
+msgstr "Äänenvoimakkuuden vahvistus Max."
+
+msgctxt "IDS_USAGE"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
+
+msgctxt "IDS_UNKNOWN_SWITCH"
+msgid "Unrecognized switch(es) found in command line string: \n\n"
+msgstr "Komentorivin merkkijonosta löytyi tuntematon muuttuja:\n\n"
+
+msgctxt "IDS_AG_TOGGLE_INFO"
+msgid "Toggle Information"
+msgstr "Tiedot päällä/pois"
+
+msgctxt "IDS_AG_TOGGLE_STATS"
+msgid "Toggle Statistics"
+msgstr "Tilastot päällä/pois"
+
+msgctxt "IDS_AG_TOGGLE_STATUS"
+msgid "Toggle Status"
+msgstr "Tila päällä/pois"
+
+msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
+msgid "Toggle Subresync Bar"
+msgstr "Subresync-palkki päällä/pois"
+
+msgctxt "IDS_AG_TOGGLE_PLAYLIST"
+msgid "Toggle Playlist Bar"
+msgstr "Toistoluettelopalkki päällä/pois"
+
+msgctxt "IDS_AG_TOGGLE_CAPTURE"
+msgid "Toggle Capture Bar"
+msgstr "Kaappauspalkki päällä/pois"
+
+msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
+msgid "Toggle Debug Shaders"
+msgstr "Varjostimien virheenkorjaus päällä/pois"
+
+msgctxt "IDS_AG_ZOOM_50"
+msgid "Zoom 50%"
+msgstr "Zoomaa 50%"
+
+msgctxt "IDS_AG_ZOOM_100"
+msgid "Zoom 100%"
+msgstr "Zoomaa 100%"
+
+msgctxt "IDS_AG_ZOOM_200"
+msgid "Zoom 200%"
+msgstr "Zoomaa 200%"
+
+msgctxt "IDS_AG_NEXT_AR_PRESET"
+msgid "Next AR Preset"
+msgstr "Seuraava AR -esiasetus"
+
+msgctxt "IDS_AG_VIDFRM_STRETCH"
+msgid "VidFrm Stretch"
+msgstr "VidFrm Venytys"
+
+msgctxt "IDS_AG_VIDFRM_INSIDE"
+msgid "VidFrm Inside"
+msgstr "VidFrm Sisäpuoli"
+
+msgctxt "IDS_AG_VIDFRM_OUTSIDE"
+msgid "VidFrm Outside"
+msgstr "VidFrm Ulkopuoli"
+
+msgctxt "IDS_AG_PNS_RESET"
+msgid "PnS Reset"
+msgstr "PnS Palautus"
+
+msgctxt "IDS_AG_PNS_ROTATEX_P"
+msgid "PnS Rotate X+"
+msgstr "PnS Kääntö X+"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM1"
+msgid "VidFrm Zoom 1"
+msgstr "VidFrm Zoom 1"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM2"
+msgid "VidFrm Zoom 2"
+msgstr "VidFrm Zoom 2"
+
+msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
+msgid "VidFrm Switch Zoom"
+msgstr "VidFrm Zoom vaihto"
+
+msgctxt "IDS_ENABLE_ALL_FILTERS"
+msgid "&Enable all filters"
+msgstr "&Ota käyttöön kaikki suotimet"
+
+msgctxt "IDS_LOGO_AUTHOR"
+msgid "Author unknown. Contact us if you made this logo!"
+msgstr "Tekijä tuntematon. Ota meihin yhteyttä jos teit tämän logon!"
+
+msgctxt "IDS_NO_MORE_MEDIA"
+msgid "No more media in the current folder."
+msgstr "Nykyisessä kansiossa ei ole enempää mediaa."
+
+msgctxt "IDS_FIRST_IN_FOLDER"
+msgid "The first file of the folder is already loaded."
+msgstr "Tämän kansion ensimmäinen tiedosto on jo ladattu."
+
+msgctxt "IDS_LAST_IN_FOLDER"
+msgid "The last file of the folder is already loaded."
+msgstr "Tämän kansion viimeinen tiedosto on jo ladattu."
+
+msgctxt "IDS_FRONT_LEFT"
+msgid "Front Left"
+msgstr "EtuVasen"
+
+msgctxt "IDS_FRONT_RIGHT"
+msgid "Front Right"
+msgstr "EtuOikea"
+
+msgctxt "IDS_FRONT_CENTER"
+msgid "Front Center"
+msgstr "EtuKeskusta"
+
+msgctxt "IDS_LOW_FREQUENCY"
+msgid "Low Frequency"
+msgstr "Matala taajuus"
+
+msgctxt "IDS_BACK_LEFT"
+msgid "Back Left"
+msgstr "TakaVasen"
+
+msgctxt "IDS_BACK_RIGHT"
+msgid "Back Right"
+msgstr "TakaOikea"
+
+msgctxt "IDS_FRONT_LEFT_OF_CENTER"
+msgid "Front Left of Center"
+msgstr "EtuVasempaan keskeltä"
+
+msgctxt "IDS_FRONT_RIGHT_OF_CENTER"
+msgid "Front Right of Center"
+msgstr "EtuOikeaan keskeltä"
+
+msgctxt "IDS_BACK_CENTER"
+msgid "Back Center"
+msgstr "TakaKeskusta"
+
+msgctxt "IDS_SIDE_LEFT"
+msgid "Side Left"
+msgstr "Sivu Vasen"
+
+msgctxt "IDS_SIDE_RIGHT"
+msgid "Side Right"
+msgstr "Sivu Oikea"
+
+msgctxt "IDS_TOP_CENTER"
+msgid "Top Center"
+msgstr "YläKeskusta"
+
+msgctxt "IDS_TOP_FRONT_LEFT"
+msgid "Top Front Left"
+msgstr "YläEtuVasen"
+
+msgctxt "IDS_TOP_FRONT_CENTER"
+msgid "Top Front Center"
+msgstr "YläEtuKeskusta"
+
+msgctxt "IDS_TOP_FRONT_RIGHT"
+msgid "Top Front Right"
+msgstr "YläEtuOikea"
+
+msgctxt "IDS_TOP_BACK_LEFT"
+msgid "Top Back Left"
+msgstr "YläTakaVasen"
+
+msgctxt "IDS_TOP_BACK_CENTER"
+msgid "Top Back Center"
+msgstr "YläTakaKeskusta"
+
+msgctxt "IDS_TOP_BACK_RIGHT"
+msgid "Top Back Right"
+msgstr "YläTakaOikea"
+
+msgctxt "IDS_TIME_TOOLTIP_ABOVE"
+msgid "Above seek bar"
+msgstr "Etsintäpalkin yläpuolella"
+
+msgctxt "IDS_TIME_TOOLTIP_BELOW"
+msgid "Below seek bar"
+msgstr "Etsintäpalkin alapuolella"
+
+msgctxt "IDS_VIDEO_STREAM"
+msgid "Video: %s"
+msgstr "Video: %s"
+
+msgctxt "IDS_APPLY"
+msgid "Apply"
+msgstr "Käytä"
+
+msgctxt "IDS_CLEAR"
+msgid "Clear"
+msgstr "Tyhjennä"
+
+msgctxt "IDS_CANCEL"
+msgid "Cancel"
+msgstr "Peruuta"
+
+msgctxt "IDS_THUMB_THUMBNAILS"
+msgid "Layout"
+msgstr "Asettelu"
+
+msgctxt "IDS_THUMB_PIXELS"
+msgid "Pixels:"
+msgstr "Pikseleitä:"
+
+msgctxt "IDS_TEXTFILE_ENC"
+msgid "Encoding:"
+msgstr "Koodataan:"
+
+msgctxt "IDS_DISABLE_ALL_FILTERS"
+msgid "&Disable all filters"
+msgstr "&Poista kaikki suotimet käytöstä"
+
+msgctxt "IDS_ENABLE_AUDIO_FILTERS"
+msgid "Enable all audio decoders"
+msgstr "Ota käyttöön kaikki äänidekooderit"
+
+msgctxt "IDS_DISABLE_AUDIO_FILTERS"
+msgid "Disable all audio decoders"
+msgstr "Poista käytöstä kaikki äänidekooderit"
+
+msgctxt "IDS_ENABLE_VIDEO_FILTERS"
+msgid "Enable all video decoders"
+msgstr "Ota käyttöön kaikki videodekooderit"
+
+msgctxt "IDS_DISABLE_VIDEO_FILTERS"
+msgid "Disable all video decoders"
+msgstr "Poista käytöstä kaikki videodekooderit"
+
+msgctxt "IDS_STRETCH_TO_WINDOW"
+msgid "Stretch To Window"
+msgstr "Venytä ikkunaan"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
+msgid "Touch Window From Inside"
+msgstr "Kosketa Ikkunaa sisäpuolelta"
+
+msgctxt "IDS_ZOOM1"
+msgid "Zoom 1"
+msgstr "Zoomaus 1"
+
+msgctxt "IDS_ZOOM2"
+msgid "Zoom 2"
+msgstr "Zoomaus 2"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
+msgid "Touch Window From Outside"
+msgstr "Kosketa Ikkunaa ulkopuolelta"
+
+msgctxt "IDS_AUDIO_STREAM"
+msgid "Audio: %s"
+msgstr "Ääni: %s"
+
+msgctxt "IDS_AG_REOPEN"
+msgid "Reopen File"
+msgstr "Avaa tiedosto uudelleen"
+
+msgctxt "IDS_MFMT_AVI"
+msgid "AVI"
+msgstr "AVI"
+
+msgctxt "IDS_MFMT_MPEG"
+msgid "MPEG"
+msgstr "MPEG"
+
+msgctxt "IDS_MFMT_MPEGTS"
+msgid "MPEG-TS"
+msgstr "MPEG-TS"
+
+msgctxt "IDS_MFMT_DVDVIDEO"
+msgid "DVD-Video"
+msgstr "DVD-Video"
+
+msgctxt "IDS_MFMT_MKV"
+msgid "Matroska"
+msgstr "Matroska"
+
+msgctxt "IDS_MFMT_WEBM"
+msgid "WebM"
+msgstr "WebM"
+
+msgctxt "IDS_MFMT_MP4"
+msgid "MP4"
+msgstr "MP4"
+
+msgctxt "IDS_MFMT_MOV"
+msgid "QuickTime Movie"
+msgstr "QuickTime-elokuva"
+
+msgctxt "IDS_MFMT_3GP"
+msgid "3GP"
+msgstr "3GP"
+
+msgctxt "IDS_MFMT_3G2"
+msgid "3G2"
+msgstr "3G2"
+
+msgctxt "IDS_MFMT_FLV"
+msgid "Flash Video"
+msgstr "Flash-video"
+
+msgctxt "IDS_MFMT_OGM"
+msgid "Ogg Media"
+msgstr "Ogg Media"
+
+msgctxt "IDS_MFMT_RM"
+msgid "Real Media"
+msgstr "Real Media"
+
+msgctxt "IDS_MFMT_RT"
+msgid "Real Script"
+msgstr "Real Script"
+
+msgctxt "IDS_MFMT_WMV"
+msgid "Windows Media Video"
+msgstr "Windows Media Video"
+
+msgctxt "IDS_MFMT_BINK"
+msgid "Smacker/Bink Video"
+msgstr "Smacker/Bink Video"
+
+msgctxt "IDS_MFMT_FLIC"
+msgid "FLIC Animation"
+msgstr "FLIC Animaatio"
+
+msgctxt "IDS_MFMT_DSM"
+msgid "DirectShow Media"
+msgstr "DirectShow Media"
+
+msgctxt "IDS_MFMT_IVF"
+msgid "Indeo Video Format"
+msgstr "Indeo Video-formaatti"
+
+msgctxt "IDS_MFMT_OTHER"
+msgid "Other"
+msgstr "Muu"
+
+msgctxt "IDS_MFMT_SWF"
+msgid "Shockwave Flash"
+msgstr "Shockwave Flash"
+
+msgctxt "IDS_MFMT_OTHER_AUDIO"
+msgid "Other Audio"
+msgstr "Muu ääni"
+
+msgctxt "IDS_MFMT_AC3"
+msgid "AC-3"
+msgstr "AC-3"
+
+msgctxt "IDS_MFMT_AIFF"
+msgid "AIFF"
+msgstr "AIFF"
+
+msgctxt "IDS_MFMT_ALAC"
+msgid "Apple Lossless"
+msgstr "Apple Häviötön"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
+msgctxt "IDS_MFMT_AMR"
+msgid "AMR"
+msgstr "AMR"
+
+msgctxt "IDS_MFMT_APE"
+msgid "Monkey's Audio"
+msgstr "Monkey's Audio"
+
+msgctxt "IDS_MFMT_AU"
+msgid "AU/SND"
+msgstr "AU/SND"
+
+msgctxt "IDS_MFMT_CDA"
+msgid "Audio CD track"
+msgstr "Ääni-CD raita"
+
+msgctxt "IDS_MFMT_FLAC"
+msgid "FLAC"
+msgstr "FLAC"
+
+msgctxt "IDS_MFMT_M4A"
+msgid "MPEG-4 Audio"
+msgstr "MPEG-4 Audio"
+
+msgctxt "IDS_MFMT_MIDI"
+msgid "MIDI"
+msgstr "MIDI"
+
+msgctxt "IDS_MFMT_MKA"
+msgid "Matroska audio"
+msgstr "Matroska audio"
+
+msgctxt "IDS_MFMT_MP3"
+msgid "MP3"
+msgstr "MP3"
+
+msgctxt "IDS_MFMT_MPA"
+msgid "MPEG audio"
+msgstr "MPEG audio"
+
+msgctxt "IDS_MFMT_MPC"
+msgid "Musepack"
+msgstr "Musepack"
+
+msgctxt "IDS_MFMT_OFR"
+msgid "OptimFROG"
+msgstr "OptimFROG"
+
+msgctxt "IDS_MFMT_OGG"
+msgid "Ogg Vorbis"
+msgstr "Ogg Vorbis"
+
+msgctxt "IDS_MFMT_RA"
+msgid "Real Audio"
+msgstr "Real Audio"
+
+msgctxt "IDS_MFMT_TAK"
+msgid "TAK"
+msgstr "TAK"
+
+msgctxt "IDS_MFMT_TTA"
+msgid "True Audio"
+msgstr "True Audio"
+
+msgctxt "IDS_MFMT_PLS"
+msgid "Playlist"
+msgstr "Soittolista"
+
+msgctxt "IDS_MFMT_BDPLS"
+msgid "Blu-ray playlist"
+msgstr "Blu-ray soittolista"
+
+msgctxt "IDS_MFMT_RAR"
+msgid "RAR Archive"
+msgstr "RAR-arkisto"
+
+msgctxt "IDS_DVB_CHANNEL_FPS"
+msgid "FPS"
+msgstr "FPS"
+
+msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
+msgid "Resolution"
+msgstr "Resoluutio"
+
+msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Kuvasuhde"
+
+msgctxt "IDS_OSD_RS_VSYNC_ON"
+msgid "VSync: On"
+msgstr "VSync: Päällä"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFF"
+msgid "VSync: Off"
+msgstr "VSync: Pois päältä"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
+msgid "Accurate VSync: On"
+msgstr "Accurate VSync: Päällä"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
+msgid "Accurate VSync: Off"
+msgstr "Accurate VSync: Pois päältä"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
+msgid "Synchronize Video to Display: On"
+msgstr "Synkronoi video näyttöön: Päällä"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
+msgid "Synchronize Video to Display: Off"
+msgstr "Synkronoi video näyttöön: Pois päältä"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
+msgid "Synchronize Display to Video: On"
+msgstr "Synkronoi näyttö videoon: Päällä"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
+msgid "Synchronize Display to Video: Off"
+msgstr "Synkronoi näyttö videoon: Pois päältä"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
+msgid "Present at Nearest VSync: On"
+msgstr "Nykyinen lähimmässä VSync:ssa: Päällä"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
+msgid "Present at Nearest VSync: Off"
+msgstr "Nykyinen lähimmässä VSync:ssa: Pois päältä"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
+msgid "Color Management: On"
+msgstr "Värin hallinta: Päällä"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
+msgid "Color Management: Off"
+msgstr "Värin hallinta: Pois päältä"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
+msgid "Input Type: Auto-Detect"
+msgstr "Tulon tyyppi: Automaattinen tunnistus"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
+msgid "Input Type: HDTV"
+msgstr "Tulon tyyppi: HDTV"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_NTSC"
+msgid "Input Type: SDTV NTSC"
+msgstr "Tulon tyyppi: SDTV NTSC"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
+msgid "Input Type: SDTV PAL"
+msgstr "Tulon tyyppi: SDTV PAL"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
+msgid "Ambient Light: Bright (2.2 Gamma)"
+msgstr "Ympäristön valoisuus: Kirkas (2.2 Gamma)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
+msgid "Ambient Light: Dim (2.35 Gamma)"
+msgstr "Ympäristön valoisuus: Hämärä (2.35 Gamma)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
+msgid "Ambient Light: Dark (2.4 Gamma)"
+msgstr "Ympäristön valoisuus: Pimeä (2.4 Gamma)"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
+msgid "Rendering Intent: Perceptual"
+msgstr "Muuntoperuste: Havaittava"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
+msgid "Rendering Intent: Relative Colorimetric"
+msgstr "Muuntoperuste: Suhteellisen kolorimetrinen"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
+msgid "Rendering Intent: Saturation"
+msgstr "Muuntoperuste: Kylläisyys"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
+msgid "Rendering Intent: Absolute Colorimetric"
+msgstr "Muuntoperuste: Ehdottoman kolorimetrinen"
+
+msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
+msgid "Output Range: %s"
+msgstr "Ulostulon alue: %s"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
+msgid "Flush GPU before VSync: On"
+msgstr "Kiihdytä GPU ennen VSync: Päällä"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
+msgid "Flush GPU before VSync: Off"
+msgstr "Kiihdytä GPU ennen VSync: Pois päältä"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
+msgid "Flush GPU after Present: On"
+msgstr "Kiihdytä GPU nykyisen jälkeen: Päällä"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
+msgid "Flush GPU after Present: Off"
+msgstr "Kiihdytä GPU nykyisen jälkeen: Pois päältä"
+
+msgctxt "IDS_OSD_RS_WAIT_ON"
+msgid "Wait for GPU Flush: On"
+msgstr "Odota GPU:n kiihdytystä: Päällä"
+
+msgctxt "IDS_OSD_RS_WAIT_OFF"
+msgid "Wait for GPU Flush: Off"
+msgstr "Odota GPU:n kiihdytystä: Pois päältä"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
+msgid "D3D Fullscreen: On"
+msgstr "D3D Kokonäyttö: Päällä"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
+msgid "D3D Fullscreen: Off"
+msgstr "D3D Kokonäyttö: Pois päältä"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
+msgid "Disable desktop composition: On"
+msgstr "Älä käytä työpöydän muokkausta: Päällä"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
+msgid "Disable desktop composition: Off"
+msgstr "Älä käytä työpöydän muokkausta: Pois päältä"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
+msgid "Alternative VSync: On"
+msgstr "Vaihtoehtoinen VSync: Päällä"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
+msgid "Alternative VSync: Off"
+msgstr "Vaihtoehtoinen VSync: Pois päältä"
+
+msgctxt "IDS_OSD_RS_RESET_DEFAULT"
+msgid "Renderer settings reset to default"
+msgstr "Renderöintiasetusten palautus oletusarvoihin"
+
+msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
+msgid "Renderer settings reset to optimal"
+msgstr "Renderöintiasetusten palautus optimaalisiksi"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
+msgid "D3D Fullscreen GUI Support: On"
+msgstr "D3D Kokonäytön GUI:n tuki: Päällä"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
+msgid "D3D Fullscreen GUI Support: Off"
+msgstr "D3D Kokonäytön GUI:n tuki: Pois päältä"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
+msgid "10-bit RGB Output: On"
+msgstr "10 bitin RGB-ulostulo: Päällä"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
+msgid "10-bit RGB Output: Off"
+msgstr "10 bitin RGB-ulostulo: Pois päältä"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
+msgid "Force 10-bit RGB Input: On"
+msgstr "10 bitin RGB-tulon pakotus: Päällä"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
+msgid "Force 10-bit RGB Input: Off"
+msgstr "10 bitin RGB-tulon pakotus: Pois päältä"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
+msgid "Full Floating Point Processing: On"
+msgstr "Täysi liukulukuprosessointi: Päällä"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
+msgid "Full Floating Point Processing: Off"
+msgstr "Täysi liukulukuprosessointi: Pois päältä"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
+msgid "Half Floating Point Processing: On"
+msgstr "Puoli liukulukuprosessointi: Päällä"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
+msgid "Half Floating Point Processing: Off"
+msgstr "Puoli liukulukuprosessointi: Pois päältä"
+
+msgctxt "IDS_BRIGHTNESS_DEC"
+msgid "Brightness decrease"
+msgstr "Vähennä kirkkautta"
+
+msgctxt "IDS_CONTRAST_INC"
+msgid "Contrast increase"
+msgstr "Lisää kontrastia"
+
+msgctxt "IDS_CONTRAST_DEC"
+msgid "Contrast decrease"
+msgstr "Vähennä kontrastia"
+
+msgctxt "IDS_HUE_INC"
+msgid "Hue increase"
+msgstr "Lisää sävyä"
+
+msgctxt "IDS_HUE_DEC"
+msgid "Hue decrease"
+msgstr "Vähennä sävyä"
+
+msgctxt "IDS_SATURATION_INC"
+msgid "Saturation increase"
+msgstr "Lisää kylläisyyttä"
+
+msgctxt "IDS_SATURATION_DEC"
+msgid "Saturation decrease"
+msgstr "Vähennä kylläisyyttä"
+
+msgctxt "IDS_RESET_COLOR"
+msgid "Reset color settings"
+msgstr "Palauta väriasetukset"
+
+msgctxt "IDS_USING_LATEST_STABLE"
+msgid "\nYou are already using the latest stable version."
+msgstr "\nKäytät jo viimeisintä vakaata versiota."
+
+msgctxt "IDS_USING_NEWER_VERSION"
+msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
+msgstr "Nykyinen versiosi on v%s.\n\nViimeisin vakaa versio on v%s."
+
+msgctxt "IDS_NEW_UPDATE_AVAILABLE"
+msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
+msgstr "MPC-HC v%s on nyt saatavilla. Käytät versiota v%s.\n\nHaluatko mennä MPC-HC:n sivustolle ladataksesi sen?"
+
+msgctxt "IDS_UPDATE_ERROR"
+msgid "Update server not found.\n\nPlease check your internet connection or try again later."
+msgstr "Päivityspalvelinta ei löydy.\n\nTarkista internet-yhteytesi ja yritä myöhemmin uudelleen."
+
+msgctxt "IDS_UPDATE_CLOSE"
+msgid "&Close"
+msgstr "Sulje"
+
+msgctxt "IDS_OSD_ZOOM"
+msgid "Zoom: %.0lf%%"
+msgstr "Zoom: %.0lf%%"
+
+msgctxt "IDS_OSD_ZOOM_AUTO"
+msgid "Zoom: Auto"
+msgstr "Zoom: Automaattinen"
+
+msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
+msgid "Toggle custom channel mapping"
+msgstr "Muokattu kanavakartoitus päällä/pois"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
+msgid "Custom channel mapping: On"
+msgstr "Muokattu kanavakartoitus: Päällä"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
+msgid "Custom channel mapping: Off"
+msgstr "Muokattu kanavakartoitus: Pois päältä"
+
+msgctxt "IDS_NORMALIZE"
+msgid "Toggle normalization"
+msgstr "Normalisointi päällä/pois"
+
+msgctxt "IDS_OSD_NORMALIZE_ON"
+msgid "Normalization: On"
+msgstr "Normalisointi: Päällä"
+
+msgctxt "IDS_OSD_NORMALIZE_OFF"
+msgid "Normalization: Off"
+msgstr "Normalisointi: Pois päältä"
+
+msgctxt "IDS_REGAIN_VOLUME"
+msgid "Toggle regain volume"
+msgstr "Äänen palautus päällä/pois"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
+msgid "Regain volume: On"
+msgstr "Äänen palautus: Päällä"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
+msgid "Regain volume: Off"
+msgstr "Äänen palautus: Pois päältä"
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "tavua"
+
+msgctxt "IDS_SIZE_UNIT_K"
+msgid "KB"
+msgstr "KB"
+
+msgctxt "IDS_SIZE_UNIT_M"
+msgid "MB"
+msgstr "MB"
+
+msgctxt "IDS_SIZE_UNIT_G"
+msgid "GB"
+msgstr "GB"
+
+msgctxt "IDS_SPEED_UNIT_K"
+msgid "KB/s"
+msgstr "KB/sek"
+
+msgctxt "IDS_SPEED_UNIT_M"
+msgid "MB/s"
+msgstr "MB/s"
+
+msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
+msgid "Could not create the tuner."
+msgstr "Viritintä ei voi luoda."
+
+msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
+msgid "Could not create the receiver."
+msgstr "Vastaanotinta ei voi luoda."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
+msgid "Could not connect the network and the tuner."
+msgstr "Verkkoon ja virittimeen ei voi yhdistää."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
+msgid "Could not connect the tuner and the receiver."
+msgstr "Viritintä ja vastaanotinta ei voi yhdistää."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
+msgid "Could not connect the tuner."
+msgstr "Viritintä ei voi yhdistää."
+
+msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
+msgid "Could not create the demultiplexer."
+msgstr "Demultiplekseriä ei voi luoda."
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
+msgid "Error parsing the entered time!"
+msgstr "Virhe jäsennettäessä annettua aikaa!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
+msgid "Error parsing the entered text!"
+msgstr "Virhe jäsennettäessä annettua tekstiä!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
+msgid "Error parsing the entered frame rate!"
+msgstr "Virhe tulkittaessa annettua kuvataajuutta!"
+
+msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Kehystä ei voi askeltaa, yritä eri videomuuntimella."
+
+msgctxt "IDS_SCREENSHOT_ERROR_REAL"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
+msgstr "\"Tallenna kuva\" ja \"Tallenna pienoiskuvat\" -toiminnot eivät toimi RealMedian oletusvideomuuntimella.\nValitse jokin DirectX:n RealMedian renderöijistä MPC-HC:n ulostulon vaihtoehdoista ja avaa tiedosto uudelleen."
+
+msgctxt "IDS_SCREENSHOT_ERROR_QT"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
+msgstr "\"Tallenna kuva\" ja \"Tallenna pienoiskuvat\" -toiminnot eivät toimi QuickTimen oletusvideomuuntimella.\nValitse jokin DirectX:n QuickTimen renderöijistä MPC-HC:n ulostulon vaihtoehdoista ja avaa tiedosto uudelleen."
+
+msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
+msgstr "\"Tallenna kuva\" ja \"Tallenna pienoiskuvat\" -toiminnot eivät toimi Shockwawe-tiedostoissa."
+
+msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
+msgstr "\"Tallenna kuva\" ja \"Tallenna pienoiskuvat\" -toiminnot eivät toimi Peittokuvamikseri-videorenderöijällä.\nVaihda videorenderöijä MPC-HC:n ulostulon vaihtoehdoista ja avaa tiedosto uudelleen."
+
+msgctxt "IDS_MB_SHOW_EDL_EDITOR"
+msgid "Do you want to activate the EDL editor?"
+msgstr "Haluatko aktivoida EDL-muokkaimen?"
+
+msgctxt "IDS_CAPTURE_ERROR"
+msgid "Capture Error"
+msgstr "Kaappausvirhe"
+
+msgctxt "IDS_CAPTURE_ERROR_VIDEO"
+msgid "video"
+msgstr "video"
+
+msgctxt "IDS_CAPTURE_ERROR_AUDIO"
+msgid "audio"
+msgstr "ääni"
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
+msgid "Can't add the %s buffer filter to the graph."
+msgstr "%s puskurisuodinta ei voi lisätä kaavioon."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
+msgid "Can't connect the %s buffer filter to the graph."
+msgstr "%s puskurisuodinta ei voi yhdistää kaavioon."
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
+msgid "Can't add the %s encoder filter to the graph."
+msgstr "%s enkooderisuodinta ei voi lisätä kaavioon."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
+msgid "Can't connect the %s encoder filter to the graph."
+msgstr "%s enkooderisuodinta ei voi yhdistää kaavioon."
+
+msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
+msgid "Can't set the compression format on the %s encoder filter."
+msgstr "%s enkooderisuotimen pakkausformaattia ei voi asettaa."
+
+msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
+msgid "Can't connect the %s stream to the multiplexer filter."
+msgstr "%s virtaa ei voi yhdistää multiplekserisuotimeen."
+
+msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
+msgid "No video capture pin was found."
+msgstr "Videokaappauspinniä ei löydy."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
+msgid "No audio capture pin was found."
+msgstr "Äänenkaappauspinniä ei löydy."
+
+msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
+msgid "Error initializing the output file."
+msgstr "Ulostulotiedoston alustus epäonnistui."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
+msgid "Error initializing the audio output file."
+msgstr "Äänen ulostulotiedoston alustus epäonnistui."
+
+msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
+msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+msgstr "Oikea aikamuoto on [-]hh:mm:ss.ms (esim. 01:23:45.678)."
+
+msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
+msgid "This type is already in the list!"
+msgstr "Tämä tyyppi on jo luettelossa!"
+
+msgctxt "IDS_WEBSERVER_ERROR_TEST"
+msgid "You need to apply the new settings before testing them."
+msgstr "Sinun on otettava uudet asetukset käyttöön ennen niiden testaamista."
+
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
+msgid "After Playback: Exit"
+msgstr "Toiston jälkeen: Sulje"
+
+msgctxt "IDS_AFTERPLAYBACK_STANDBY"
+msgid "After Playback: Stand By"
+msgstr "Toiston jälkeen: Valmiustila"
+
+msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
+msgid "After Playback: Hibernate"
+msgstr "Toiston jälkeen: Lepotila"
+
+msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
+msgid "After Playback: Shutdown"
+msgstr "Toiston jälkeen: Sammuta tietokone"
+
+msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
+msgid "After Playback: Log Off"
+msgstr "Toiston jälkeen: Kirjaudu ulos"
+
+msgctxt "IDS_AFTERPLAYBACK_LOCK"
+msgid "After Playback: Lock"
+msgstr "Toiston jälkeen: Lukitse"
+
+msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
+msgid "After Playback: Turn off the monitor"
+msgstr "Toiston jälkeen: Sammuta näyttö"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Toiston jälkeen: Toista seuraava tiedosto kansiosta"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Toiston jälkeen: Älä tee mitään"
+
+msgctxt "IDS_OSD_BRIGHTNESS"
+msgid "Brightness: %s"
+msgstr "Kirkkaus: %s"
+
+msgctxt "IDS_OSD_CONTRAST"
+msgid "Contrast: %s"
+msgstr "Kontrasti: %s"
+
+msgctxt "IDS_OSD_HUE"
+msgid "Hue: %s°"
+msgstr "Sävy: %s"
+
+msgctxt "IDS_OSD_SATURATION"
+msgid "Saturation: %s"
+msgstr "Kylläisyys: %s"
+
+msgctxt "IDS_OSD_RESET_COLOR"
+msgid "Color settings restored"
+msgstr "Väriasetukset palautettu"
+
+msgctxt "IDS_OSD_NO_COLORCONTROL"
+msgid "Color control is not supported"
+msgstr "Värin säätöä ei tueta"
+
+msgctxt "IDS_BRIGHTNESS_INC"
+msgid "Brightness increase"
+msgstr "Lisää kirkkautta"
+
+msgctxt "IDS_LANG_PREF_EXAMPLE"
+msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
+msgstr "Anna haluamasi kielet tähän.\nEsim. kirjoita \"eng jap swe\""
+
+msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
+msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
+msgstr "Ulkoisilla splittereillä voi olla omat kieliasetuksensa ja MPC-HC ei oletusasetuksilla vaihda niiden asettamaa alkuperäistä kielivalintaa.\nLaita tämä päälle jos haluat MPC-HC:n ohjaavan ulkoisia splittereitä."
+
+msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
+msgid "&Blu-Ray playlists"
+msgstr "&Blu-Ray soittolistat"
+
+msgctxt "IDS_NAVIGATE_PLAYLIST"
+msgid "&Playlist"
+msgstr "&Soittolista"
+
+msgctxt "IDS_NAVIGATE_CHAPTERS"
+msgid "&Chapters"
+msgstr "&Kappaleet"
+
+msgctxt "IDS_NAVIGATE_TITLES"
+msgid "&Titles"
+msgstr "&Nimikkeet"
+
+msgctxt "IDS_NAVIGATE_CHANNELS"
+msgid "&Channels"
+msgstr "&Kanavat"
+
+msgctxt "IDC_FASTSEEK_CHECK"
+msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
+msgstr "Jos \"viimeisin avainkehys\" on valittu etsi ensin varsinaista hakukontaa edeltävä ensimmäinen avainkehys.\nJos \"lähin avainkehys\" on valittu etsi ensimmäinen avainkehys ennen tai jälkeen etsimiskohtaa riippuen siitä, kumpi on lähempänä."
+
+msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
+msgid "Associate with all formats"
+msgstr "Kytke kaikkiin formaatteihin"
+
+msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
+msgid "Associate with video formats only"
+msgstr "Kytke vain videoformaatteihin"
+
+msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
+msgid "Associate with audio formats only"
+msgstr "Kytke vain ääniformaatteihin"
+
+msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
+msgid "Clear all associations"
+msgstr "Poista kaikki kytkennät"
+
+msgctxt "IDS_FILTER_SETTINGS_CAPTION"
+msgid "Settings"
+msgstr "Asetukset"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Tarjoaja"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Kuulovammaisille"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Lataukset"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Pisteet"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Tekstitysten haku verkosta epäonnistui."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Tekstitysten haku verkosta peruutettiin."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Tekstitysten haku verkosta valmis. %d tekstitystä löytyi."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Tekstitysten haku verkosta valmis. Tekstityksiä ei löytynyt."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Lataa tekstitykset"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Tekstityksiä haetaan verkosta, ole hyvä ja odota..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Tekstitysten hakua verkosta peruutetaan..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Käyttäjänimi"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Tila"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Valmis..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Ei toteutettu."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Lähetetään..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Tekstitysten lähetys onnistui."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Tekstitysten lähetys epäonnistui."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Tekstitysten lähetys keskeytetty."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Tekstitykset ovat jo olemassa."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Lähetetään tekstityksiä, ole hyvä ja odota..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Lähetys onnistui."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Lähetys keskeytetty."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Lähetys epäonnistui."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Lataa && Avaa"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Asetukset"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Palauta"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Siirrä ylös"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Siirrä alas"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Avaa URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Kielet"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "VIRHE: Internet yhteyttä ei voitu muodostaa."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Syötä verkkosivun kirjautumistiedot"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Syötä kirjautumistiedot yhdistääksesi: "
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Kuvasuhde: Oleta neliömäiset pikselit (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Ladattu [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Lähetä tekstitykset"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Oletko varma, että haluat lähettää tekstitystiedoston \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.fr.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.fr.dialogs.po
index 85f319b61..2266c4193 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.fr.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.fr.dialogs.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Underground78, 2013-2014
+# Jean van Kasteel <vankasteelj@gmail.com>, 2015-2016
+# Underground78, 2013-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: Underground78\n"
-"Language-Team: French (http://www.transifex.com/projects/p/mpc-hc/language/fr/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: French (http://www.transifex.com/mpc-hc/mpc-hc/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -109,7 +110,7 @@ msgid "Enable custom channel mapping"
msgstr "Activer la répartition personnalisée des canaux"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Configuration des hauts-parleurs pour"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -117,8 +118,8 @@ msgid "input channels:"
msgstr "canaux en entrée :"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Maintenez la touche Maj. en cliquant pour que la modification soit immédiate "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Maintenez la touche Maj. en cliquant pour que la modification soit immédiate"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -189,8 +190,8 @@ msgid "About"
msgstr "A propos"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 voir le fichier Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 voir le fichier Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -294,7 +295,7 @@ msgstr "Aimanter sur les bords du bureau"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
msgid "Store settings in .ini file"
-msgstr "Configuration stockée dans un fichier .ini"
+msgstr "Stocker la configuration dans un fichier .ini"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
@@ -421,12 +422,16 @@ msgid "time(s)"
msgstr "fois"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Mode de répétition :"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "En fin de lecture"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Sortie"
+msgid "Default zoom"
+msgstr "Zoom par défaut"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -472,10 +477,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Charger automatiquement les fichiers audio externes"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Utiliser le moteur de sous-titres intégré"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Contrôles"
@@ -569,7 +570,7 @@ msgid "Warning"
msgstr "Attention"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Si vous activez l'anticrénelage en mode plein écran dans les paramètres de votre carte vidéo, cela n'améliorera pas l'affichage des sous-titres mais consommera davantage de ressources système."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -630,7 +631,7 @@ msgstr "Répertoires"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK7"
msgid "File(s)"
-msgstr "Fichiers"
+msgstr "Fichier(s)"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
msgid "Autoplay"
@@ -676,17 +677,17 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Ne pas réduire MPC-HC en mode plein écran sur un moniteur secondaire"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Utilisation des fonctionnalités de la barre des tâches de Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Utiliser les fonctionnalités avancées de la barre des tâches"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Ouvrir le fichier suivant/précédent dans le dossier lorsque \"Fichier suivant/précédent\" est utilisé alors qu'il n'y a qu'un seul élément dans la liste de lecture"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Ouvrir le fichier précédent/suivant dans le dossier lorsque \"Fichier précédent/suivant\" est utilisé alors qu'il n'y a qu'un seul élément dans la liste de lecture"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "Utiliser l'infobulle temporelle :"
+msgid "Show time tooltip:"
+msgstr "Afficher l'infobulle temporelle :"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
@@ -1125,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "Sortie audio"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Paramètres des moteurs de rendu VMR-7/VMR-9 (sans rendu) et EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Paramètres des moteurs de rendu VMR-9 (sans rendu) et EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1169,8 +1170,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Sous-titres *"
+msgid "Subtitles"
+msgstr "Sous-titres"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1185,8 +1186,12 @@ msgid "Rotation"
msgstr "Rotation"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Les filtres externes (VSFilter par exemple) peuvent afficher les sous-titres pour tous les moteurs de rendu."
+msgid "Subtitle Renderer"
+msgstr "Moteur de rendu des sous-titres"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Mettre en cache les Shaders compilés"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1204,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Autoriser l'accès local uniquement"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Activer la prévisualisation"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Imprimer les informations de débogage"
@@ -1229,17 +1238,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Gestionnaires CGI : (.ext1=chemin1;.ext2=chemin2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Sous-titres disponibles en ligne"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Télécharger && Charger"
+msgid "Download subtitles"
+msgstr "Télécharger des sous-titres"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Remplacer les sous-titres déjà chargés"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Télécharger"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Actualiser"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Abandonner"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Options"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Envoyer des sous-titres"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Envoyer"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Abandonner"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Options"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Enregistrer &sous..."
@@ -1277,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "Activer la recherche automatique des mises à jour"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Délai entre chaque vérification :"
+msgid "Check every:"
+msgstr "Vérifier tous les :"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1541,16 +1578,28 @@ msgid "Reset"
msgstr "Réinitialiser"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Base de données en ligne"
+msgid "Online search, download and upload subtitles"
+msgstr "Recherche, téléchargement et envoi de sous-titres"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Chercher et télécharger des sous-titres automatiquement si aucun sous-titre n'est disponible"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Préférer les sous-titres pour malentendants (lorsqu'indiqué par le fournisseur de sous-titres)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignorer les fichiers contenant le(s) mot(s) suivant(s) :"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Adresse de la base de données de sous-titres :"
+msgid "Languages in order of preference:"
+msgstr "Ordre de préférence des langues :"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Tester"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Envoyer les sous-titres actifs automatiquement à la fin de la lecture vidéo"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1652,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Par défaut"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Périphérique"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Mode exclusif"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Autoriser le bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Options"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Activer l'intercommunication stéréo (pour casques audio)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Coupure :"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Niveau :"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Remarque"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Pour minimiser la distorsion, il est recommandé de régler le volume audio du lecteur autour de 85% lors de la lecture de contenu encodé avec perte possédant un volume sonore élevé."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Qualité JPEG :"
@@ -1664,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Rapporteur de plantage"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Désolé, il semblerait que MPC-HC vienne de planter. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Envoyer un rapport de bug pour nous aider à diagnostiquer et à corriger le problème."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Informations optionnelles"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "E-mail :"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Votre adresse électronique est optionnelle et sera utilisée uniquement si les développeurs ont besoin de vous contacter pour un supplément d'information."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Description du problème (obligatoirement en anglais) :"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Redémarrer MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Quitter MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.fr.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.fr.menus.po
index b0a454e4f..46439b8c9 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.fr.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.fr.menus.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Underground78, 2013-2014
+# Jean van Kasteel <vankasteelj@gmail.com>, 2016
+# Underground78, 2013-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:11+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-01-31 22:07+0000\n"
"Last-Translator: Underground78\n"
-"Language-Team: French (http://www.transifex.com/projects/p/mpc-hc/language/fr/)\n"
+"Language-Team: French (http://www.transifex.com/mpc-hc/mpc-hc/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +65,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Enregistrer les &miniatures..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Charger des sous-titres..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Enregistrer les &sous-titres..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "&Base de données"
+msgid "S&ubtitles"
+msgstr "&Sous-titres"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Rechercher..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Charger des sous-titres..."
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "&Enregistrer les sous-titres..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&Envoyer..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Télécharger des sous-titres..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Télécharger..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "En&voyer des sous-titres..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -196,13 +193,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "Test de &tearing"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "&Afficher les statistiques"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Durée restante"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Afficher l'&indicateur de temps"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Afficher le nom de &fichier"
msgctxt "POPUP"
msgid "&Output Range"
@@ -404,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Ajuster à l'&extérieur de la fenêtre"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Conserver les proportions"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Modifier les proportions"
+msgid "&Aspect Ratio"
+msgstr "&Ratio d'affichage"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Par défaut"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Par &défaut (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,9 +433,13 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Supposer des pixels &carrés (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
-msgstr "Corriger le différentiel bureau/écran"
+msgstr "&Corriger le différentiel de proportion bureau/écran"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
@@ -529,9 +530,25 @@ msgid "&Stop"
msgstr "&Arrêter"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "&Image par image"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Ré&péter"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "&Indéfiniment"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Fichier"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Liste de lecture"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Ralentir la lecture"
@@ -553,15 +570,15 @@ msgid "S&haders"
msgstr "&Effets vidéo"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio"
+msgid "&Audio Track"
+msgstr "Piste &audio"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "&Sous-titres"
+msgid "Su&btitle Track"
+msgstr "Piste de &sous-titres"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
+msgid "Vide&o Track"
msgstr "Piste &vidéo"
msgctxt "POPUP"
@@ -584,7 +601,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "&En fin de lecture"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "&Ne rien faire"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Lire le fichier &suivant dans le répertoire"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Éteindre l'&écran"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Quitter le programme"
@@ -602,16 +631,12 @@ msgstr "&Arrêter l'ordinateur"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
-msgstr "Fermer la &session"
+msgstr "&Fermer la session"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "&Verrouiller la session"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Éteindre l'&écran"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Navigation"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.fr.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.fr.strings.po
index 8f5c74698..de257557e 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.fr.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.fr.strings.po
@@ -1,15 +1,17 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Underground78, 2013-2014
+# Arzach4, 2016-2017
+# Jean van Kasteel <vankasteelj@gmail.com>, 2016
+# Underground78, 2013-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-09-30 15:01+0000\n"
-"Last-Translator: Underground78\n"
-"Language-Team: French (http://www.transifex.com/projects/p/mpc-hc/language/fr/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: French (http://www.transifex.com/mpc-hc/mpc-hc/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -60,10 +62,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Propriétés"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Fichier"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Style par &défaut"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Liste de lecture"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Fichiers"
@@ -116,6 +126,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Si la case à cocher est laissée indéfinie, les sous-titres SSA/ASS seront affichés relativement à la trame vidéo alors que tous les autres formats de sous-titres textuels seront affichés relativement à la fenêtre."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Mode de répétition : liste de lecture"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Mode de répétition : fichier"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Répéter indéfiniment : activé"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Répéter indéfiniment : désactivé"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Répéter indéfiniment"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Jamais (méthode la plus rapide)"
@@ -325,12 +355,12 @@ msgid "On/Off"
msgstr "Activé"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "IPS d'origine"
+msgid "From (FPS)"
+msgstr "De (IPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "IPS cible"
+msgid "To (FPS)"
+msgstr "A (IPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -464,6 +494,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Lecture::Effets"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Ressources embarquées"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Divers"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Lecture::Capture"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Lecture::Paramètres Sync Renderer"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Lecture::Plein écran"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Filtres internes::Moteur de rendu audio"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Sélecteur audio"
@@ -488,18 +546,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Moteur de rendu Overlay Mixer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (fenêtré)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (fenêtré)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (sans rendu)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (sans rendu)"
@@ -552,34 +602,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Lecteur::Interface Web"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Sous-titres::Base de données"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Ressources embarquées"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Divers"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Lecture::Capture"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Lecture::Paramètres Sync Renderer"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Lecture::Plein écran"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Détails"
@@ -600,17 +622,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Utilise toujours le rendu matériel. Généralement seuls les formats YUV sont supportés, mais ils sont présentés directement sans conversion de couleur vers le RVB. C'est la méthode de rendu la plus rapide et la seule où vous pouvez être sûr de la recopie vidéo plein écran lors de l'activation de la sortie TV."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Moteur de rendu par défaut de Windows XP. Très stable et juste un petit peu plus lent que le mixer Overlay. Utilise DirectDraw et démarre en Overlay quand il le peut."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Disponible seulement si DirectX 9 est installé. Possède les même fonctionnalités que VMR-7 (fenêtré) mais il n'utilisera jamais le rendu Overlay et sera peut-être un petit peu plus lent que VMR-7 (fenêtré) à cause de cela."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Identique à VMR-7 (fenêtré), mais avec le plugin Présentation/Allocation de MPC-HC pour les sous-titres. Le miroir vidéo Overlay ne fonctionnera pas. L'espace de couleurs \"Couleurs vraies\" est recommandé."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Disponible uniquement si DirectX 9 est installé. Très stable mais il n'utilisera jamais le rendu Overlay et sera peut-être un petit peu plus lent que l'Overlay Mixer à cause de cela."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -621,7 +635,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Identique à VMR-9 (sans rendu), mais utilise un vrai redimensionnement bicubique en deux temps."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Se connecte à n'importe quel type de média vidéo mais n'envoie les données entrantes nul part. Utilisez le quand vous n'avez pas besoin de l'affichage vidéo et que vous voulez économiser des ressources processeur en évitant du travail inutile."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -648,10 +662,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Moteur de rendu de Real. Les scripts SMIL devraient fonctionner, mais probablement pas les interactions. Utilise DirectDraw et démarre en Overlay quand il peut."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "La sortie du moteur Real affichée par le plugin Présentation/Allocation de VMR-7 (sans rendu)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "La sortie du moteur Real affichée par le plugin Présentation/Allocation de VMR-9 (sans rendu)."
@@ -660,10 +670,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Moteur de rendu de QuickTime. Parfois un peu lent lorsque la zone vidéo est redimensionnée ou partiellement couverte par une autre fenêtre. Quand l'overlay n'est pas disponible, il tend à repasser en GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "La sortie du moteur QuickTime affichée par le plugin Présentation/Allocation de VMR-7 (sans rendu)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "La sortie du moteur QuickTime affichée par le plugin Présentation/Allocation de VMR-9 (sans rendu)."
@@ -672,22 +678,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "La surface vidéo sera allouée comme une surface hors-écran classique."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "Le moteur de rendu audio MPC Audio n'est pas finalisé, il n'est pas conseillé de l'utiliser."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Moteur de rendu Sync"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Signaler un bug"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC vient de planter mais cet exécutable a été compilé sans les informations de débogage.\nSi vous souhaitez signaler ce bug, vous devriez en premier lieu tester un exécutable officiel.\n\nSouhaitez-vous visiter la page de téléchargement maintenant ?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Surfaces hors-écran classiques"
@@ -740,9 +734,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Pas de rendu vidéo (formats non compressés)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Moteur de rendu audio de MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Moteur de rendu audio interne"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -756,9 +750,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Pour afficher une ressource embarquée dans votre navigateur vous devez activer l'interface web.\n\nUtilisez le bouton \"Enregistrer sous\" si vous souhaitez uniquement sauvegarder la ressource."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Télécharger des sous-titres"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Télécharger des sous-titres..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Envoyer des sous-titres..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -789,7 +787,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Certaines parties de l'archive sont manquantes"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "La surface vidéo sera allouée comme une texture mais les fonctions 2D seront toujours utilisées pour la copier et l'étendre sur la mémoire tampon d'arrière-plan. Nécessite une carte vidéo qui peut allouer des surfaces 32 bits RVBA de taille pas nécessairement multiple d'une puissance de deux et au moins dans la résolution de la vidéo."
msgctxt "IDC_TEXTURESURF3D"
@@ -816,6 +814,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Réduit l'effet de déchirement en évitant d'utiliser la synchronisation verticale par défaut de D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Recherche des chaînes"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Aucune piste de sous-titres chargée ou moteur de rendu non supporté."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Stocke les shaders compilés dans le dossier AppData pour accélérer leur chargement."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Ouvrez \"VTS_xx_0.ifo\" pour lire les fichiers \"VTS_xx_x.vob\" d'un seul tenant"
@@ -888,7 +898,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Muet"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Activer le son"
@@ -953,12 +963,12 @@ msgid "&Organize Favorites..."
msgstr "&Gérer les favoris..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "Lecture aléatoire"
+msgid "Sh&uffle"
+msgstr "Lecture &aléatoire"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Ouvrir le dossier contenant le fichier"
+msgid "Ope&n file location"
+msgstr "Ouvrir le &dossier contenant le fichier"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -1041,8 +1051,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Zoom écran ultra-large,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Cacher la liste de lecture en plein écran"
+msgid "&Hide on Fullscreen"
+msgstr "Cac&her la liste de lecture en plein écran"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1229,8 +1239,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "Ajouter le dossier contenant le fichier"
+msgid "Add containing &folder"
+msgstr "A&jouter le dossier contenant le fichier"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1336,6 +1346,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<non défini>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Regarder"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Monter"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Descendre"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Trier par numéro de chaîne"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Tout supprimer"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Êtes-vous sûr de vouloir supprimer toutes les chaînes de la liste ?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Aucune information n'est disponible"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Veuillez patienter, l'analyse est en cours..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Sauvegarder le journal des événements dans un fichier (redémarrage nécessaire)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Temps restant"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Haute précision"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "En fin de lecture : Rembobiner le fichier"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "En fin de lecture : Fermer le fichier"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC a rencontré un problème pendant son initialisation. Avec votre aide nous pouvons peut-être le corriger.\n\nSouhaitez-vous signaler ce problème ?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Entrez une valeur positive si le son est en avance sur l'image, une valeur négative s'il est en retard."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "La prévisualisation est actuellement désactivée. Vous pouvez l'activer dans les options de MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Cette option peut être utilisée pour prévisualiser des fichiers multimédias à distance. Elle doit être utilisée uniquement sur un réseau privé correctement sécurisé."
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Moteur de rendu des sous-titres interne"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Ouvrir un périphérique"
@@ -1356,13 +1442,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Image sauvegardée avec succès"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Charger des sous-titres"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Charger des sous-titres..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Enregistrer les sous-titres"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Enregistrer les sous-titres..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1385,11 +1471,11 @@ msgid "Stop"
msgstr "Arrêter"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Image suivante"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Image précédente"
msgctxt "IDS_AG_GO_TO"
@@ -1489,7 +1575,7 @@ msgid "Thumbnails saved successfully"
msgstr "Miniatures sauvegardées avec succès"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
+msgid "Vide&o Track"
msgstr "Piste &vidéo"
msgctxt "IDS_MENU_VIDEO_ANGLE"
@@ -1537,12 +1623,12 @@ msgid "Reset Rate"
msgstr "Vitesse normale"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Décalage audio +10ms"
+msgid "Audio Delay +10 ms"
+msgstr "Décalage audio +10 ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Décalage audio -10ms"
+msgid "Audio Delay -10 ms"
+msgstr "Décalage audio -10 ms"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
@@ -1612,14 +1698,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Décalage à droite des sous-titres"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Statistiques d'affichage"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Revenir au début"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD : Afficher le nom de fichier"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Lecture DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Lecture Blu-ray"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD : Afficher les statistiques du moteur de rendu"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD : Réinitialiser les statistiques du moteur de rendu"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Sous-titres::Divers"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Cacher les &bordures"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "&Bordures uniquement"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Afficher le &titre et le menu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Cacher le &menu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Réglages expert"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Vue minimale"
@@ -1685,8 +1811,8 @@ msgid "PnS Dec Height"
msgstr "Recadrage : Diminuer la hauteur"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Téléchargement des sous-titres en cours, veuillez patienter."
+msgid "Downloading [%s] \"%s\""
+msgstr "Téléchargement en cours [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1697,8 +1823,8 @@ msgid "No subtitles found."
msgstr "Aucun sous-titre trouvé."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d sous-titre(s) disponible(s)."
+msgid "%d subtitle(s) available."
+msgstr "%d sous-titre(s) disponible(s)."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1853,12 +1979,12 @@ msgid "Boss key"
msgstr "\"Boss key\""
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Afficher le menu (court) du lecteur"
+msgid "Player Menu"
+msgstr "Menu du lecteur"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Afficher le menu (long) du lecteur"
+msgid "Player Menu (full)"
+msgstr "Menu du lecteur (complet)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1869,19 +1995,19 @@ msgid "Options"
msgstr "Options"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
+msgid "Next Audio Track"
msgstr "Piste audio suivante"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
+msgid "Prev Audio Track"
msgstr "Piste audio précédente"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
+msgid "Next Subtitle Track"
msgstr "Piste de sous-titre suivante"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
+msgid "Prev Subtitle Track"
msgstr "Piste de sous-titre précédente"
msgctxt "IDS_MPLAYERC_85"
@@ -1892,22 +2018,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Recharger les sous-titres"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Piste audio suivante (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Piste audio précédente (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Piste de sous-titre suivante (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Piste de sous-titre précédente (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Angle suivant (DVD)"
@@ -1917,28 +2027,28 @@ msgid "Prev Angle (DVD)"
msgstr "Angle précédent (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
+msgid "Next Audio Track (DVD)"
msgstr "Piste audio suivante (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
+msgid "Prev Audio Track (DVD)"
msgstr "Piste audio précédente (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
+msgid "Next Subtitle Track (DVD)"
msgstr "Piste de sous-titre suivante (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
+msgid "Prev Subtitle Track (DVD)"
msgstr "Piste de sous-titre précédente (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Activer/Désactiver les sous-titres (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Afficher le temps restant"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD : Afficher l'indicateur de temps"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1964,11 +2074,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Cryptée"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Oui"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Non"
@@ -2025,11 +2135,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volume : %02lu/%02lu, Titre : %02lu/%02lu, Chapitre : %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Angle : %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2120,14 +2230,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Largeur de l'image"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "L'adresse de la base de données semble correcte !"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Protocole de communication incorrect, veuillez mettre à jour MPC-HC ou sélectionner une autre adresse"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Proportion de l'image"
@@ -2137,19 +2239,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Totales : %ld, Perdues : %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Taille : %I64d Ko"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Taille : %I64d Mo"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Libre : %I64d Ko"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Libre : %I64d Mo"
msgctxt "IDS_MAINFRM_42"
@@ -2221,8 +2323,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Impossible de créer le fichier, les miniatures seraient trop petites.\n\nEssayez de réduire le nombre de miniatures ou d'augmenter la taille totale."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Pour charger des sous-titres vous devez changer le moteur de rendu vidéo et réouvrir le fichier.\n- DirectShow : VMR-7/VMR-9 (sans rendu), EVR (CP), Sync, madVR or Haali\n- RealMedia : moteur de rendu spécial pour RealMedia, ou ouverture à travers DirectShow\n- QuickTime : moteur de rendu DX7 ou DX9 pour QuickTime\n- ShockWave : n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Pour charger des sous-titres vous devez changer le moteur de rendu vidéo et réouvrir le fichier.\n- DirectShow : VMR-9 (sans rendu), EVR (CP), Sync, madVR or Haali\n- RealMedia : moteur de rendu spécial pour RealMedia, ou ouverture à travers DirectShow\n- QuickTime : moteur de rendu DX7 ou DX9 pour QuickTime\n- ShockWave : n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2233,11 +2335,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Proportions : %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Proportions : par défaut"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Ratio d'affichage : par défaut (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Décalage audio : %I64d ms"
msgctxt "IDS_AG_CHAPTER"
@@ -2249,8 +2351,8 @@ msgid "Out of memory"
msgstr "Mémoire insuffisante"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Erreur : le lecteur Flash pour IE est requis"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Erreur : Adobe Flash Player pour Internet Explorer est requis"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2272,10 +2374,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Impossible de lire le fichier"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Adresse incorrect, impossible de se connecter à la base de données des sous-titres"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Chapitre : "
@@ -2296,14 +2394,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Actuel"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC vient de s'arrêter inopinément. Pour nous aider à corriger ce problème, veuillez envoyer le ficher \"%s\" sur notre gestionnaire de bugs.\n\nSouhaitez-vous ouvrir le dossier contenant le fichier \"minidump\" et visiter le gestionnaire de bugs ?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Impossible de créer le minidump \"%s\" (erreur %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Sélectionnez un répertoire"
@@ -2321,7 +2411,7 @@ msgid "Toggle Caption&Menu"
msgstr "Afficher le titre et le menu"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Afficher la barre de recherche"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2477,8 +2567,8 @@ msgid "Volume boost Max"
msgstr "Amplification du volume maximale"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Utilisation : mpc-hc.exe \"chemin du fichier\" [options]\n\n\"chemin du fichier\"\tFichier principal ou répertoire à charger (jokers\n\t\tautorisés, \"-\" désigne l'entrée standard)\n/dub \"fichier audio\"\tCharge un fichier audio supplémentaire\n/dubdelay \"fichier\"\tCharge un fichier audio avec décalage de XXms (si\n\t\tle nom contient \"...DELAY XXms...\")\n/d3dfs\t\tLance l'affichage en mode plein écran D3D (réduit le\n\t\t\"tearing\")\n/sub \"fichier ST\"\tCharge un fichier de sous-titres\n/filter \"nom\"\tCharge un filtre DirectShow à partir d'une DLL\n\t\t(jokers autorisés)\n/dvd\t\tDémarre en mode DVD (possibilité de fournir le\n\t\tnom du répertoire)\n/dvdpos T#C\tDémarre la lecture du titre T, à partir du chapitre C\n/dvdpos T#hh:mm\tDémarre la lecture du titre T, à partir de la position hh:mm:ss\n/cd\t\tCharge toutes les pistes d'un CD audio ou d'un (S)Vcd\n/device\t\tOuvrir le périphérique vidéo par défaut\n/open\t\tOuvrir un fichier en pause\n/play\t\tOuvrir un fichier et commencer la lecture\n/close\t\tQuitte automatiquement après la lecture\n/shutdown\tÉteindre la machine après la lecture\n/fullscreen\tDémarrer en plein écran\n/minimized\tDémarrer en mode minimisé\n/new\t\tLance une nouvelle instance de MPC-HC\n/add\t\tAjoute un fichier à la playlist\n/regvid\t\tAssocie les formats vidéo à MPC-HC\n/regaud\t\tAssocie les formats audio à MPC-HC\n/regpl\t\tAssocie les listes de lecture à MPC-HC\n/regall\t\tAssocie tous les fichiers supportés à MPC-HC\n/unregall\t\tSupprime l'association des fichiers à MPC-HC\n/start ms\t\tDémarre la lecture à \"ms\" (millisecondes)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize L,H\tFixe la taille de la fenêtre vidéo à LxH\n/monitor N\tDémarre MPC-HC sur l'écran N (N à partir de 1)\n/audiorenderer N\tUtiliser le moteur de rendu audio N, où N commence à partir de 1\n\t\t(cf. \"Sortie audio\" dans les options)\n/shaderpreset \"Pr\"\tUtiliser la présélection d'effets vidéo \"Pr\"\n/reset\t\tRestaure les paramètres par défaut\n/help /h /?\tAffiche l'aide pour les options de la ligne de commande\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Utilisation : mpc-hc.exe \"chemin du fichier\" [options]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2564,14 +2654,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Activer tous les filtres"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Recherche des chaînes"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Aucune piste de sous-titres chargée ou moteur de rendu non supporté."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Auteur inconnu. Contactez nous si vous avez créé ce logo !"
@@ -2660,40 +2742,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Haut arrière droit"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Remise à zéro des statistiques d'affichage"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Sous-titres::Divers"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Cacher les &bordures"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Bordures uniquement"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Afficher le &titre et le menu"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Cacher le &menu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Réglages expert"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Au-dessus de la barre de lecture"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Au-dessous de la barre de lecture"
msgctxt "IDS_VIDEO_STREAM"
@@ -2861,8 +2915,8 @@ msgid "Other Audio"
msgstr "Autres formats audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2872,6 +2926,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Fichier audio Windows Media"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2936,22 +3010,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Fichier audio Windows Media"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Liste de lecture"
@@ -2976,18 +3034,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Ratio d'aspect"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Utiliser WASAPI (nécessite de relancer la lecture)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Couper le son lors des avances rapides"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Périphérique audio :"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "Synchronisation verticale : Activée"
@@ -3050,7 +3096,7 @@ msgstr "Type d'entrée : Définition standard NTSC"
msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
msgid "Input Type: SDTV PAL"
-msgstr "Type d'entrée : Définition standard PAL"
+msgstr "Type d'entrée : Définition standard PAL"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
msgid "Ambient Light: Bright (2.2 Gamma)"
@@ -3276,6 +3322,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Restauration adaptative de l'amplification : Désactivée"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "octets"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "Ko"
@@ -3333,7 +3383,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "L'analyse du débit d'images entré a échoué !"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Impossible d'utiliser le déplacement image par image, réessayez avec un autre moteur de rendu vidéo."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3352,10 +3402,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "Les fonctions \"Enregistrer l'image\" et \"Enregistrer les miniatures\" ne fonctionnent pas avec le moteur de rendu vidéo Overlay.\nChangez le moteur de rendu vidéo dans les options de sortie de MPC-HC et réouvrez le fichier."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Impossible de se connecter à la base de données de sous-titres."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Souhaitez-vous activer l'éditeur de liste d'édition ?"
@@ -3424,7 +3470,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Il est nécessaire d'appliquer les changements avant de pouvoir les tester."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "En fin de lecture : Quitter le programme"
@@ -3452,6 +3498,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "En fin de lecture : Éteindre l'écran"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "En fin de lecture : Lire le fichier suivant dans le répertoire"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "En fin de lecture : Ne rien faire"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Luminosité : %s"
@@ -3532,3 +3586,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Paramètres"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Fournisseur"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Malentendant"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Nombre de téléchargements"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Score"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Échec de la recherche de sous-titres."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Abandon de la recherche de sous-titres."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Recherche de sous-titres terminée, %d sous-titres trouvés."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Recherche de sous-titres terminée, aucun sous-titre trouvé."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Télécharger des sous-titres"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Recherche de sous-titres en cours, veuillez patienter..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Abandon de la recherche de sous-titres en cours..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "État"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Prêt..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Non implémenté."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Envoi en cours..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Sous-titres envoyés avec succès."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Échec de l'envoi des sous-titres."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Abandon de l'envoi des sous-titres."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Fichier de sous-titres déjà existant."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Envoi des sous-titres en cours, veuillez patienter..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Envoi terminé."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Envoi abandonné."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Échec de l'envoi."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Télécharger et charger"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Configuration"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Réinitialiser"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Monter"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Descendre"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Ouvrir l'URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Langues"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "Erreur : La connexion Internet n'a pas pu être établie."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Entrez les identifiants du site"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Entrez vos identifiants pour vous connecter à :"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Ratio d'affichage : supposer des pixels carrés (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Téléchargé [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Envoyer des sous-titres"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Êtes-vous sûr de vouloir envoyer le fichier de sous-titres \"%s\" ?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Chargement de la liste des langages supportés..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Impossible de se connecter à \"%S\" avec le nom d'utilisateur \"%S\".\n\nVeuillez corriger le mot d'utilisateur et le mot de passe ou réinitialiser les identifiants pour vous connecter en tant qu'utilisateur anonyme."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "La recherche et le téléchargement automatique seront déactivés pour tous les fichiers multimédias dont le chemin contient un des motifs entrés ici.\nPar exemple, entrez : \"dossier privé\\vidéos|travail\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"chemin du fichier\"\tFichier principal ou répertoire à charger (jokers\n\t\tautorisés, \"-\" désigne l'entrée standard)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"fichier audio\"\tCharge un fichier audio supplémentaire"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"fichier\"\tCharge un fichier audio avec décalage de XXms\n\t\t(si le nom contient \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tLance l'affichage en mode plein écran D3D (réduit le \"tearing\")"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"fichier ST\"\tCharge un fichier de sous-titres"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"nom\"\tCharge un filtre DirectShow à partir d'une DLL\n\t\t(jokers autorisés)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tDémarre en mode DVD (il est possible de fournir le\n\t\tnom du répertoire)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tDémarre la lecture du titre T, à partir du chapitre C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P⇥Démarrer la lecture du titre T, à partir de la position P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tCharge toutes les pistes d'un CD audio ou d'un (S)VCD\n\t\t(il est possible de fournir le chemin du lecteur)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tOuvre le périphérique de capture vidéo par défaut"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tOuvre le fichier et met MPC-HC en pause"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tOuvre le fichier et commence la lecture"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tQuitte automatiquement après la lecture\n\t\t(fonctionne uniquement si utilisé avec /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tÉteint la machine après la lecture"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tMet la machine en veille après la lecture"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tMet la machine en veille prolongée après la lecture"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tDéconnecte la session après la lecture"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tVerrouille la session après la lecture"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tÉteint l'écran après la lecture"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tOuvre le fichier suivant dans le répertoire après la lecture"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tDémarre en plein écran"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tDémarre en mode minimisé"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tDémarre une nouvelle instance de MPC-HC"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tAjoute un fichier à la playlist, peut être combiné avec /open et /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tTrie aléatoirement la liste de lecture"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tAssocie les formats vidéo à MPC-HC"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tAssocie les formats audio à MPC-HC"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tAssocie les listes de lecture à MPC-HC"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tAssocie tous les fichiers supportés à MPC-HC"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tSupprime l'association des fichiers à MPC-HC"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tDémarre la lecture à \"ms\" (millisecondes)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize L,H\tFixe la taille de la fenêtre vidéo à LxH"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tDémarre MPC-HC sur l'écran N, où N commence à 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tUtiliser le moteur de rendu audio N, où N commence à 1\n\t\t(cf. \"Sortie audio\" dans les options)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tUtiliser la présélection d'effets vidéo \"Pr\""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"nom\"\tSpécifie la présélection \"Pan & Scan\" à utiliser"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tRéassocie les icônes spécifiques aux formats"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tDémarre MPC-HC en arrière-plan"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tDémarre l'interface web sur le port spécifié"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tAffiche des informations de débogage via l'OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDésactive le rapporteur de plantage"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tDémarre MPC-HC en mode \"esclave\""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"N\"\tFixe le numéro du GPU utilisé pour le décodage matériel\n\t\tDisponible uniquement pour CUVID et DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tRestaure les paramètres par défaut"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tAffiche l'aide pour les options de la ligne de commande"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Seuil pour le score des sous-titres automatiquement téléchargés. Plus la valeur est élevée moins le risque de télécharger des sous-titres ne correspondant pas au fichier est important. Il n'y a cependant pas de valeur parfaite, utilisez celle qui vous convient le mieux."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Décalage Audi (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Taille en pixels par défaut de la barre d'outils."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Utiliser la barre d'outils existante au lieu de la nouvelle vectorisé."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.gl.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.gl.dialogs.po
index aed4ecc2e..a7a73a84a 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.gl.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.gl.dialogs.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Rubén <feiticeiro2010@hotmail.es>, 2014
-# Toño Calo <enfeitizador@gmail.com>, 2014
+# Rubén <feiticeiro2010@hotmail.es>, 2014-2016
+# Toño Calo <enfeitizador@gmail.com>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-10-02 00:20+0000\n"
-"Last-Translator: Toño Calo <enfeitizador@gmail.com>\n"
-"Language-Team: Galician (http://www.transifex.com/projects/p/mpc-hc/language/gl/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Galician (http://www.transifex.com/mpc-hc/mpc-hc/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -47,19 +47,19 @@ msgstr "Saída"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
msgid "Record Video"
-msgstr "Gravar Vídeo"
+msgstr "Gravar vídeo"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
msgid "Preview"
-msgstr "Vista Previa"
+msgstr "Vista previa"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
msgid "Record Audio"
-msgstr "Gravar Audio"
+msgstr "Gravar audio"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
msgid "Preview"
-msgstr "Vista Previa"
+msgstr "Vista previa"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "V/A Buffers:"
@@ -110,7 +110,7 @@ msgid "Enable custom channel mapping"
msgstr "Activar mapeo de canles personalizado"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Axustes dos altofalantes para"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -118,7 +118,7 @@ msgid "input channels:"
msgstr "Canles de entrada:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Presiona a tecla \"shift\" para aplicar os cambios de inmediato"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -127,7 +127,7 @@ msgstr "Ir a..."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
-msgstr "insere unha hora usando o formato [hh]:mm:ss:ms para saltar a un tempo especificado. Non precisas inserir os separadores de forma explícita."
+msgstr "insere unha hora usando o formato [hh]:mm:ss:ms para saltar a un tempo especificado. Non precisas inserir os separadores de forma explícita."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Time"
@@ -155,7 +155,7 @@ msgstr "Abrir"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Escribe a ruta do filme ou ficheiro de audio (en Internet ou no teu ordenador) e o reproductor abrirao por ti."
+msgstr "Escribe a ruta do filme ou ficheiro de audio (en Internet ou no teu ordenador) e o reprodutor abrirao por ti."
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
@@ -187,11 +187,11 @@ msgstr "Engadir á lista de reprodución sen abrir"
msgctxt "IDD_ABOUTBOX_CAPTION"
msgid "About"
-msgstr "Acerca De"
+msgstr "Acerca de"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Dereitos do autor © 2002-2014 vexa o ficheiro Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Dereitos do autor © 2002-2017 vexa o ficheiro Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -199,7 +199,7 @@ msgstr "Este programa é de balde e foi lanzado baixo a Licenza Publica Xeral GN
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Traducido ao Galego por anxo_cruel"
+msgstr "Tradución ao galego: anxo_cruel, enfeitizador"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
@@ -243,11 +243,11 @@ msgstr "Opcións de apertura"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
msgid "Use the same player for each media file"
-msgstr "Usar o mesmo reproductor para cada ficheiro de medios que se reproduza"
+msgstr "Usar o mesmo reprodutor para cada ficheiro de medios que se reproduza"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
msgid "Open a new player for each media file played"
-msgstr "Abrir un novo reproductor para cada ficheiro de medios que se reproduza"
+msgstr "Abrir un novo reprodutor para cada ficheiro de medios que se reproduza"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Language"
@@ -422,12 +422,16 @@ msgid "time(s)"
msgstr "vez(veces)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Repetir modo:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Tras a reprodución"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Saída"
+msgid "Default zoom"
+msgstr "Escalado predeterminado"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -473,10 +477,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Auto-carga de audio"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Usar o procesador de subtítulos incorporado"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Control"
@@ -570,7 +570,7 @@ msgid "Warning"
msgstr "Aviso"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Se activas o modo de antialiasing a pantalla completa na configuración da súa tarxeta gráfica, os subtítulos non lucirán mellor e esixirán forza ao CPU."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -603,7 +603,7 @@ msgstr "Establecer como programa pre&definido"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
-msgstr "Xestor do Protocolo de Transmisións en Tempo Real (para rtsp://... URLs)"
+msgstr "Xestor do protocolo de Transmisións en tempo real (para rtsp://... URLs)"
msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
msgid "RealMedia"
@@ -677,16 +677,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Previr MINIMIZAR en pantalla completa ao utilizar un monitor diferente ao por defecto"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Utilizar características da barra de tarefas de Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Usar características melloradas da barra de tarefas"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Saltar ao ficheiro anterior/seguinte no cartafol en \"Saltar seguinte/anterior\" cando só hai un ficheiro na lista de reprodución"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Usar tooltip de tempo:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -787,7 +787,7 @@ msgstr "Ubicación:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Description:"
-msgstr "Descripción:"
+msgstr "Descrición:"
msgctxt "IDD_FAVADD_CAPTION"
msgid "Add Favorite"
@@ -987,7 +987,7 @@ msgstr "Espazamento"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Angle (z,°)"
-msgstr "Angulo (z,°)"
+msgstr "Ángulo (z,°)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Scale (x,%)"
@@ -1071,7 +1071,7 @@ msgstr "Vincular canles alpha"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
-msgstr "Se prefire utilizar as versións independentes de estes filtros ou algún outro reemplazo, desactiveos aquí."
+msgstr "Se prefire utilizar as versións independentes destes filtros ou algún outro cambio, desactiveos aquí."
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Source Filters"
@@ -1126,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "Renderizador de Audio"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Axustes de VMR-7/VMR-9 (sen renderizador) e EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Axustes de VMR-9 (sen renderizador) e EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1147,7 +1147,7 @@ msgstr "Reinicializar ao cambiar pantalla"
msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
msgid "D3D Fullscreen"
-msgstr "D3D en Pantalla completa"
+msgstr "D3D en pantalla completa"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Alternative VSync"
@@ -1170,8 +1170,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Subtítulos *"
+msgid "Subtitles"
+msgstr "Subtítulos"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1186,12 @@ msgid "Rotation"
msgstr "Rotación"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Filtros externos (Como o VSFilter) poden amosar subtítulos en todos os renderizadores"
+msgid "Subtitle Renderer"
+msgstr "Renderizador de subtítulos"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Sombreadores compilados en caché"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1205,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Permitir o acceso soamente dende o host local"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Habilitar previsualización"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Imprimir información de depuración"
@@ -1230,20 +1238,48 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Xestores de CGI: (.ext1=ruta1;.ext2=ruta2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Subtítulos dispoñibles en liña"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Baixar e abrir"
+msgid "Download subtitles"
+msgstr "Baixar subtítulos"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Remplazar os subtítulos cargados actualmente"
+msgstr "Substitue os subtítulos cargados actualmente"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Descargar"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Refrescar"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Abortar"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opcións"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Subir subtítulos"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Subir"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Abortar"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opcións"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
-msgstr "Gardar Como..."
+msgstr "Gardar como..."
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Color controls (for VMR-9, EVR and madVR)"
@@ -1278,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "Activar comprobación automática de actualizacións"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Demora entre cada comprobación:"
+msgid "Check every:"
+msgstr "Comprobar cada:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1475,7 +1511,7 @@ msgstr "Saír da pantalla completa ao rematar"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Fullscreen monitor"
-msgstr "Monitor da Pantalla Completa"
+msgstr "Monitor da pantalla completa"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
msgid "Use autochange fullscreen monitor mode"
@@ -1542,16 +1578,28 @@ msgid "Reset"
msgstr "Reiniciar"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Base de datos en liña"
+msgid "Online search, download and upload subtitles"
+msgstr "Procurar en liña, baixar e subir subtítulos"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Buscar e baixar subtítulos automáticamente se non se atopan localmente"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Preferir subtítulos para persoas xordas (cando o indique o proveedor de subtítulos)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignorar ficheiros que conteñan calquera destas palabras: "
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "A URL base da base de datos de subtítulos:"
+msgid "Languages in order of preference:"
+msgstr "Linguas en orde de preferencia:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Probar"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Subir subtítulos activos automáticamente ao rematar a reprodución"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1653,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Predefinido"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Dispositivo"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Modo exclusivo"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Permitir fluxo de bits"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Opcións"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Habilitar mestura das canles estereo (para auriculares)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Corte"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Nivel:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Nota"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Para minimizar a distorsión do son, recomendase manter o volume do reprodutor en torno ao 85 % ao reproducir contido ruidoso codificado con perdas."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Calidade de JPEG:"
@@ -1665,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "De acordo"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Informe de fallo"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Sentimolo, semella que MPC-HC acaba de caer :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Envíe un informe do erro para axudarnos a diagnosticar e reparar o problema"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Información opcional"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Correo electrónico:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "O seu enderezo de correo electrónico é opcional e só se usará se os desenvolvedores precisan contactar con vostede para recabar máis información."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Descrición do problema (usa só o inglés):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Reiniciar MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Saír de MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.gl.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.gl.menus.po
index 3b4266162..cbb7663c5 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.gl.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.gl.menus.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Rubén <feiticeiro2010@hotmail.es>, 2014
+# Rubén <feiticeiro2010@hotmail.es>, 2014-2016
+# Toño Calo <enfeitizador@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-06 00:40+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-04-24 07:56+0000\n"
"Last-Translator: Rubén <feiticeiro2010@hotmail.es>\n"
-"Language-Team: Galician (http://www.transifex.com/projects/p/mpc-hc/language/gl/)\n"
+"Language-Team: Galician (http://www.transifex.com/mpc-hc/mpc-hc/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -22,11 +23,11 @@ msgstr "&Ficheiro"
msgctxt "ID_FILE_OPENQUICK"
msgid "&Quick Open File..."
-msgstr "Abrir Ficheiro &Rápido"
+msgstr "Abrir ficheiro &rápido"
msgctxt "ID_FILE_OPENMEDIA"
msgid "&Open File..."
-msgstr "&Abrir Ficheiro..."
+msgstr "Abrir ficheir&o..."
msgctxt "ID_FILE_OPENDVDBD"
msgid "Open &DVD/BD..."
@@ -34,11 +35,11 @@ msgstr "Abrir &DVD/BD..."
msgctxt "ID_FILE_OPENDEVICE"
msgid "Open De&vice..."
-msgstr "Abrir Dis&positivo..."
+msgstr "Abrir dispositi&vo..."
msgctxt "ID_FILE_OPENDIRECTORY"
msgid "Open Dir&ectory..."
-msgstr "Abrir Dir&ectorio..."
+msgstr "Abrir dir&ectorio..."
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
@@ -46,51 +47,47 @@ msgstr "A&brir Disco"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
-msgstr "Ficheiros Recentes"
+msgstr "&Ficheiros recentes"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
-msgstr "&Pechar"
+msgstr "Pe&char"
msgctxt "ID_FILE_SAVE_COPY"
msgid "&Save a Copy..."
-msgstr "&Gardar unha Copia..."
+msgstr "&Gardar unha copia..."
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
-msgstr "Gardar &Imaxe..."
+msgstr "Gardar &imaxe..."
msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
-msgstr "Gardar &Miniaturas..."
-
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Cargar &Subtítulo..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Gardar S&ubtitulo..."
+msgstr "Gardar &miniaturas..."
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Base de Datos de Subtítulos"
+msgid "S&ubtitles"
+msgstr "Subtítulos"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Cargar subtítulos"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Procurar..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Gardar s&ubtítulos..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&Subir..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Baixar subtítulos..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Baixar..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Subir subtítulos..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
-msgstr "Pr&opiedades"
+msgstr "P&ropiedades"
msgctxt "ID_FILE_EXIT"
msgid "E&xit"
@@ -102,11 +99,11 @@ msgstr "&Ver"
msgctxt "ID_VIEW_CAPTIONMENU"
msgid "Caption&&Menu"
-msgstr "Letras &e Menú"
+msgstr "Letras &e menú"
msgctxt "ID_VIEW_SEEKER"
msgid "See&k Bar"
-msgstr "Barra de &Progreso"
+msgstr "Barra de &progreso"
msgctxt "ID_VIEW_CONTROLS"
msgid "&Controls"
@@ -118,11 +115,11 @@ msgstr "&Información"
msgctxt "ID_VIEW_STATISTICS"
msgid "&Statistics"
-msgstr "&Estatisticas"
+msgstr "&Estatísticas"
msgctxt "ID_VIEW_STATUS"
msgid "St&atus"
-msgstr "Es&tado"
+msgstr "Est&ado"
msgctxt "ID_VIEW_SUBRESYNC"
msgid "Su&bresync"
@@ -130,7 +127,7 @@ msgstr "&Resincronización dos subtítulos"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
-msgstr "&Lista de Reprodución"
+msgstr "&Lista de reprodución"
msgctxt "ID_VIEW_CAPTURE"
msgid "Captu&re"
@@ -162,7 +159,7 @@ msgstr "&Normal"
msgctxt "ID_VIEW_FULLSCREEN"
msgid "F&ull Screen"
-msgstr "P&antalla Completa"
+msgstr "P&antalla completa"
msgctxt "POPUP"
msgid "&Zoom"
@@ -182,31 +179,35 @@ msgstr "&200%"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
-msgstr "Auto &Axustar"
+msgstr "Axuste &automático"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "Auto Axustar (&Se é moi grande)"
+msgstr "Axuste automático (se é máis &longo)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "Axustes do Renderi&zador"
+msgstr "Axustes de proc&esador"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
-msgstr "Proba de &Parpadeo"
+msgstr "Proba de &parpadeo"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Amosar Estadísticas"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Amosar estadísticas"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Tempo Restante"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Amosar &hora actual"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Amosar &nome do ficheiro"
msgctxt "POPUP"
msgid "&Output Range"
-msgstr "&Rango de Saída"
+msgstr "Rang&o de saída"
msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
msgid "&0 - 255"
@@ -222,19 +223,19 @@ msgstr "&Presentación"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
-msgstr "D3D Modo Pantalla Completa"
+msgstr "&Modo pantalla completa D3D"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "&D3D Pantalla Completa con soporte para GUI"
+msgstr "Soporte &GUI pantalla completa D3D"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "&Saída RGB 10-bits"
+msgstr "Saída &RGB 10-bit"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
-msgstr "&Forzar entrada RGB 10-bits"
+msgstr "Forzar entrada RGB 10-b&it"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
@@ -254,7 +255,7 @@ msgstr "Activar Corrección de Tempos en Cadros"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "&Xestión de Cores"
+msgstr "&Xestión de cores"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
@@ -318,11 +319,11 @@ msgstr "&Colorimétrico Absoluto"
msgctxt "POPUP"
msgid "&VSync"
-msgstr "&VSync (Sincronia Vertical)"
+msgstr "&VSync (Sincronia vertical)"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "&VSync (Sincronia Vertical)"
+msgstr "&VSync (Sincronia vertical) "
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
@@ -334,11 +335,11 @@ msgstr "&VSync Alternativa"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "&Disminuir Compensación de Vsync"
+msgstr "&Diminuír compensación VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "&Incrementar Compensación de Vsync"
+msgstr "&Incrementar compensación VSync"
msgctxt "POPUP"
msgid "&GPU Control"
@@ -354,7 +355,7 @@ msgstr "&Baleirar GPU despois da presente"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "&Agardar por Baleirados"
+msgstr "&Agardar por baleirados"
msgctxt "POPUP"
msgid "R&eset"
@@ -370,27 +371,27 @@ msgstr "Reinicializar axustes opti&mos do renderizador"
msgctxt "POPUP"
msgid "Video &Frame"
-msgstr "&Cadro de Video"
+msgstr "&Cadro de vídeo"
msgctxt "ID_VIEW_VF_HALF"
msgid "&Half Size"
-msgstr "A &Metade do Tamaño"
+msgstr "A &metade do tamaño"
msgctxt "ID_VIEW_VF_NORMAL"
msgid "&Normal Size"
-msgstr "O Tamaño &Orixinal"
+msgstr "O Tamaño &orixinal"
msgctxt "ID_VIEW_VF_DOUBLE"
msgid "&Double Size"
-msgstr "O &Dobre do Tamaño"
+msgstr "O &dobre do tamaño"
msgctxt "ID_VIEW_VF_STRETCH"
msgid "&Stretch To Window"
-msgstr "&Axustar á Xanela"
+msgstr "&Axustar á xanela"
msgctxt "ID_VIEW_VF_FROMINSIDE"
msgid "Touch Window From &Inside"
-msgstr "Tocar Xanela dende A&fora"
+msgstr "Tocar xanela dende a&fora"
msgctxt "ID_VIEW_VF_ZOOM1"
msgid "Zoom &1"
@@ -402,19 +403,15 @@ msgstr "Zoom &2"
msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
-msgstr "Tocar Xanela dende Ad&entro"
-
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "Ma&nter Relación de Aspecto"
+msgstr "Tocar xanela dende ad&entro"
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Forzar Relación de Aspecto Especifica"
+msgid "&Aspect Ratio"
+msgstr "&Relación de aspecto"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Orixinal"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Orixinal (RAO)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,45 +433,49 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Asumir píxeles cadrados (&SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
-msgstr "&Corrixir Diferenza de RP Entre Monitor/Escritorio"
+msgstr "&Corrixir diferenza de RP entre monitor/escritorio"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
-msgstr "Pan&&S&can"
+msgstr "Pa&n&&Scan"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
-msgstr "&Incrementar Tamaño"
+msgstr "&Incrementar tamaño"
msgctxt "ID_VIEW_DECSIZE"
msgid "&Decrease Size"
-msgstr "&Disminuir Tamaño"
+msgstr "&Diminuír tamaño"
msgctxt "ID_VIEW_INCWIDTH"
msgid "I&ncrease Width"
-msgstr "I&ncrementar Ancho"
+msgstr "I&ncrementar ancho"
msgctxt "ID_VIEW_DECWIDTH"
msgid "D&ecrease Width"
-msgstr "D&isminuir Ancho"
+msgstr "D&isminuir ancho"
msgctxt "ID_VIEW_INCHEIGHT"
msgid "In&crease Height"
-msgstr "In&crementar Altura"
+msgstr "In&crementar altura"
msgctxt "ID_VIEW_DECHEIGHT"
msgid "Decre&ase Height"
-msgstr "Dismi&nuir Altura"
+msgstr "Dismi&nuir altura"
msgctxt "ID_PANSCAN_MOVERIGHT"
msgid "Move &Right"
-msgstr "Mover á &Dereita"
+msgstr "Mover á &dereita"
msgctxt "ID_PANSCAN_MOVELEFT"
msgid "Move &Left"
-msgstr "Mover á &Esquerda"
+msgstr "Mover á &esquerda"
msgctxt "ID_PANSCAN_MOVEUP"
msgid "Move &Up"
@@ -494,7 +495,7 @@ msgstr "Re&iniciar"
msgctxt "POPUP"
msgid "On &Top"
-msgstr "Sempre &Visible"
+msgstr "Sempre &visible"
msgctxt "ID_ONTOP_DEFAULT"
msgid "&Default"
@@ -506,11 +507,11 @@ msgstr "&Activado"
msgctxt "ID_ONTOP_WHILEPLAYING"
msgid "While &Playing"
-msgstr "Activado ao &Reproducir"
+msgstr "Activado ao &reproducir"
msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
msgid "While Playing &Video"
-msgstr "Durante a reprodución do &Vídeo"
+msgstr "Durante a reprodución do &vídeo"
msgctxt "ID_VIEW_OPTIONS"
msgid "&Options..."
@@ -529,16 +530,32 @@ msgid "&Stop"
msgstr "&Deter"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
-msgstr "Avanzar un &Cadro"
+msgid "Fra&me Step"
+msgstr "Avanzar un &cadro"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Repetir"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "S&empre"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Ficheiro"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Lista de reprodución"
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
-msgstr "&Disminuir Velocidade"
+msgstr "&Diminuír velocidade"
msgctxt "ID_PLAY_INCRATE"
msgid "&Increase Rate"
-msgstr "&Incrementar Velocidade"
+msgstr "&Incrementar velocidade"
msgctxt "ID_PLAY_RESETRATE"
msgid "R&eset Rate"
@@ -553,16 +570,16 @@ msgid "S&haders"
msgstr "S&ombreadores"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio"
+msgid "&Audio Track"
+msgstr "Pista de &audio"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Su&btítulos"
+msgid "Su&btitle Track"
+msgstr "Pista de su&btítulos"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "&Secuencia de Vídeo"
+msgid "Vide&o Track"
+msgstr "Pista de &vídeo"
msgctxt "POPUP"
msgid "&Volume"
@@ -582,9 +599,21 @@ msgstr "&Silencio"
msgctxt "POPUP"
msgid "Af&ter Playback"
-msgstr "De&spois da Reprodución"
+msgstr "De&spois da reprodución"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Non facer na&da"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Reproducir o &próximo ficheiro do cartafol"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Apagar o &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Pechar"
@@ -602,16 +631,12 @@ msgstr "&Apagar"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
-msgstr "Pechar &Sesión"
+msgstr "Pechar &sesión"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "&Bloquear o ordenador"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Apagar o &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Navegar"
@@ -630,27 +655,27 @@ msgstr "&Ir a..."
msgctxt "ID_NAVIGATE_TITLEMENU"
msgid "&Title Menu"
-msgstr "Menú do &Titulo"
+msgstr "Menú do &título"
msgctxt "ID_NAVIGATE_ROOTMENU"
msgid "&Root Menu"
-msgstr "Menú &Raíz"
+msgstr "Menú &raíz"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
-msgstr "Menú dos &Subtítulos"
+msgstr "Menú dos &subtítulos"
msgctxt "ID_NAVIGATE_AUDIOMENU"
msgid "&Audio Menu"
-msgstr "Menú do &Audio"
+msgstr "Menú do &audio"
msgctxt "ID_NAVIGATE_ANGLEMENU"
msgid "An&gle Menu"
-msgstr "Menú de An&gulos"
+msgstr "Menú de án&gulos"
msgctxt "ID_NAVIGATE_CHAPTERMENU"
msgid "&Chapter Menu"
-msgstr "Menú de &Capitulos"
+msgstr "Menú de &capítulos"
msgctxt "ID_FAVORITES"
msgid "F&avorites"
@@ -670,7 +695,7 @@ msgstr "Verificar &actualizacións"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
-msgstr "Opcións da L&iña de Comando"
+msgstr "Opcións da l&iña de comando"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
@@ -682,5 +707,5 @@ msgstr "D&oazón"
msgctxt "ID_HELP_ABOUT"
msgid "&About..."
-msgstr "&Acerca De..."
+msgstr "&Acerca de..."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.gl.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.gl.strings.po
index 059f2d686..7725734df 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.gl.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.gl.strings.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Rubén <feiticeiro2010@hotmail.es>, 2014
+# Rubén <feiticeiro2010@hotmail.es>, 2014-2017
# Toño Calo <enfeitizador@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-02 00:20+0000\n"
-"Last-Translator: Toño Calo <enfeitizador@gmail.com>\n"
-"Language-Team: Galician (http://www.transifex.com/projects/p/mpc-hc/language/gl/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Galician (http://www.transifex.com/mpc-hc/mpc-hc/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -61,10 +61,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Propiedades"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Ficheiro"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Estilo pre&definido"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Lista de reprodución"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Ficheiros"
@@ -117,6 +125,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Se se deixa o obxectivo a renderizar sen definir, os subtítulos SSA/ASS renderizaranse en relación ao fotograma de vídeo, mentres todolos demáis subtítulos renderizaranse en relación á xanela."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Modo de repetición: Lista de reprodución"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Modo de repetición: Ficheiro"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Repetir permanentemente: Activado"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Repetir permanentemente: Desactivado"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Repetir permanentemente"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Nunca (maior aproveitamento)"
@@ -195,11 +223,11 @@ msgstr "Configuracións de captura"
msgctxt "IDS_NAVIGATION_BAR"
msgid "Navigation Bar"
-msgstr "Barra de Navegación"
+msgstr "Barra de navegación"
msgctxt "IDS_SUBRESYNC_CAPTION"
msgid "Subresync"
-msgstr "Resincronizar Subtítulos"
+msgstr "Resincronizar subtítulos"
msgctxt "IDS_SUBRESYNC_CLN_TIME"
msgid "Time"
@@ -275,7 +303,7 @@ msgstr "O tempo inserido é maior que a duración do ficheiro."
msgctxt "IDS_MISSING_ICONS_LIB"
msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
-msgstr "Non se atopa a Libraría de iconas \"mpciconlib.dll\".\nA icona predeterminada do reproductor será usada para as asociacións de ficheiros.\nPor favor, reinstale MPC-HC para obter o \"mpciconlib.dll\"."
+msgstr "Non se atopa a biblioteca de iconas \"mpciconlib.dll\".\nA icona predeterminada do reprodutor será usada para as asociacións de ficheiros.\nPor favor, reinstale MPC-HC para obter o \"mpciconlib.dll\"."
msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
msgid "File"
@@ -326,12 +354,12 @@ msgid "On/Off"
msgstr "Encendido/Apagado"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "De fps"
+msgid "From (FPS)"
+msgstr "De (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "A fps"
+msgid "To (FPS)"
+msgstr "A (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -383,7 +411,7 @@ msgstr "&Copiar ao portapapeis"
msgctxt "IDS_PLAYLIST_SAVEAS"
msgid "&Save As..."
-msgstr "&Gardar Como..."
+msgstr "&Gardar como..."
msgctxt "IDS_PLAYLIST_SORTBYLABEL"
msgid "Sort by &label"
@@ -435,7 +463,7 @@ msgstr "Reprodución"
msgctxt "IDD_PPAGEPLAYER"
msgid "Player"
-msgstr "Reproductor"
+msgstr "Reprodutor"
msgctxt "IDD_PPAGEDVD"
msgid "Playback::DVD/OGM"
@@ -447,7 +475,7 @@ msgstr "Subtítulos"
msgctxt "IDD_PPAGEFORMATS"
msgid "Player::Formats"
-msgstr "Reproductor::Formatos"
+msgstr "Reprodutor::Formatos"
msgctxt "IDD_PPAGETWEAKS"
msgid "Tweaks"
@@ -463,15 +491,43 @@ msgstr "Filtros Externos"
msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
-msgstr "Reprodución::Sombras"
+msgstr "Reprodución::Sombreadores"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Recursos"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Misceláneos"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Reprodución::Captura"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Reprodución::Axustes do renderizador de sincronización"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Reprodución::Pantalla completa"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Filtros internos::Renderizador de audio"
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
-msgstr "Cambia Audio"
+msgstr "Opcións de audio"
msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
msgid "New version of the icon library"
-msgstr "Nova versión da libraría de iconas"
+msgstr "Nova versión da biblioteca de iconas"
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
@@ -479,7 +535,7 @@ msgstr "Desexas reasociar as iconas?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
-msgstr "Isto corrixirá as íconas que aparecen incorretamente despois dunha actualización da libraría das iconas.\nAs asociacións das iconas non serán modificadas, soamente as iconas correspondentes serán atualizadas."
+msgstr "Isto corrixirá as íconas que aparecen incorretamente despois dunha actualización da biblioteca das iconas.\nAs asociacións das iconas non serán modificadas, soamente as iconas correspondentes serán atualizadas."
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
@@ -489,18 +545,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Renderizador Mesturador Overlay"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Renderizador mesturador de Video 7 (modo xanela)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Renderizador mesturador de Video 9 (modo xanela)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Renderizador mesturador de Video 7 (sen renderización)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Renderizador mesturador de Video 9 (sen renderización)"
@@ -531,11 +579,11 @@ msgstr "madVR"
msgctxt "IDD_PPAGEACCELTBL"
msgid "Player::Keys"
-msgstr "Reproductor::Teclas"
+msgstr "Reprodutor::Teclas"
msgctxt "IDD_PPAGESUBSTYLE"
msgid "Subtitles::Default Style"
-msgstr "Subtítulos::Estilo por Defecto"
+msgstr "Subtítulos::Estilo predefinido"
msgctxt "IDD_PPAGEINTERNALFILTERS"
msgid "Internal Filters"
@@ -543,7 +591,7 @@ msgstr "Filtros Internos"
msgctxt "IDD_PPAGELOGO"
msgid "Player::Logo"
-msgstr "Reproductor::Logo"
+msgstr "Reprodutor::Logo"
msgctxt "IDD_PPAGEOUTPUT"
msgid "Playback::Output"
@@ -551,35 +599,7 @@ msgstr "Reprodución::Saída"
msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
-msgstr "Reproductor::Interface Web"
-
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Subtítulos::Base de Datos"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Recursos"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Misceláneos"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Reprodución::Captura"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Reprodución::Axustes do Renderizador de Sincronización"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Reprodución::Pantalla completa"
+msgstr "Reprodutor::Interface Web"
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
@@ -601,29 +621,21 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Sempre renderiza en Overlay.Xeralmente só se permiten os formatos YUV, pero presentanse directamente sen ningunha conversión de cor a RGB. Este é o modo de renderizado máis rápido e o único onde podes estar seguro sobre o espello a pantalla completa cando activas a saída de TV."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "O renderizado por defecto de XP. Moi estable e só un poco máis lento que o mesturador Overlay. Usa DirectDraw e usa o Overlay cando pode."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Só dispoñible se tes instalado DirectX 9. Ten as mesmas habilidades que VMR-7 (xanela), pero nunca usara o renderizado Overlay e por tal razón podería ser un pouco máis lento que VMR-7 (xanela)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "O mesmo que VMR-7 (xanela), pero co complemento \"Allocator-Presenter\" de MPC-HC para o subtitulado. O espello de Overlay NON funcionara. Recomendase a profundidade de cor do escritorio \"Cor Verdadeiro\"."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "O Renderizador Mesturador de Vídeo 9 só está dispoñible se ten o entorno DirectX 9 instalado. É moi estable, pero nunca usará renderizado Overlay (hardware de renderizado directo) e a causa disto pode ser un pouco máis lento ca o filtro renderizador Overlay Mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
-msgstr "O mesmo que VMR-9 (xanela), pero co complemento \"Allocator-Presenter\" de MPC-HC para o subtitulado. O espelo de Overlay TALVEZ funcionara. Recomendase a profundidade de cor do escritorio \"Cor Verdadeiro\"."
+msgstr "O mesmo que VMR-9 (xanela), pero co complemento \"Allocator-Presenter\" de MPC-HC para o subtitulado. O espelo de Overlay TALVEZ funcionara. Recomendase a profundidade de cor do escritorio \"Cor Verdadeiro\"."
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
msgstr "Igual que VMR-9 (sen renderizador), pero usa un redimensionador bicúbico de dúas pasadas real."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Conecta a calquera tipo de medio de vídeo e manda as mostras a ningún lado. Utilízao cando non precisas ver o vídeo, e queres evitar o uso de cpu innecesario."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Conecta a calquera tipo de medio de vídeo e manda as mostras a ningún lado. Utilízao cando non precisas ver o vídeo, e queres evitar o uso de CPU innecesario."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -635,7 +647,7 @@ msgstr "Só dispoñible en Vista ou superior ou en XP tendo polo menos o Marco d
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr "Igual que EVR, pero con Asignación-Presentación do MPC-HC por subtitulado e postprocesamento. Recomendado para Windows Vista ou posterior."
+msgstr "Igual que EVR, pero con Asignación-Presentación do MPC-HC por subtitulado e postprocesamento. Recomendado para Windows Vista ou posterior."
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
@@ -643,16 +655,12 @@ msgstr "Renderizador de alta calidade, require un GPU que soporte D3D9 ou superi
msgctxt "IDC_DSSYNC"
msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
-msgstr "O mesmo que EVR (CP), pero ofrece bastantes opcións para sincronizar a taxa de marcos do vídeo coa taxa de actualización de visualización para eliminar marcos de vídeo saltados ou duplicados."
+msgstr "O mesmo que EVR (CP), pero ofrece bastantes opcións para sincronizar a taxa de marcos do vídeo coa taxa de actualización de visualización para eliminar marcos de vídeo saltados ou duplicados."
msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Renderizador propio Real. Os scripts SMIL funcionaran, pero a interacción probablemente non. Usa DirectDraw e corre en Overlay cando pode."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "A saída do mecanismo Real será renderizado polo \"Allocator-Presenter\" basado en DX7 de VMR-7 (sen renderizador)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "A saída do mecanismo Real será renderizado polo \"Allocator-Presenter\" basado en DX9 de VMR-9 (sen renderizador)."
@@ -661,10 +669,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "O renderizador propio de QuickTime. Volvese un pouco lento cando a súa área de vídeo é redimensionada ou parcialmente cuberta por outra xanela. Cando o overlay non esta dispoñible gustalle regresarse a GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "A saída do mecanismo QuickTime será renderizado polo \"Allocator-Presenter\" basado en DX7 de VMR-7 (sen renderizador)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "A saída do mecanismo QuickTime será renderizado polo \"Allocator-Presenter\" basado en DX9 de VMR-9 (sen renderizador)."
@@ -673,22 +677,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "A superficie do vídeo será distribuida como unha superficie regular fora da pantalla."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "O renderizador de audio MPC está roto, non o utilices."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Renderizador de sincronización"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Reportando erro"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC acaba de fallar , pero esta versión foi compilada sen información de depuración.\nSe desexas reportar o erro, deberías primeiro probar cunha compilación oficial.\n\nDesexas visitar a páxina de descargas agora?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Superficie fora de pantallas convencionais"
@@ -741,9 +733,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Nulo (sen compresión)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Renderizador de audio MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Renderizador interno de audio"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -757,10 +749,14 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Para ver un recurso incrustado no teu navegador tes que habilitar a interface web.\n\nUsa o botón \"Gardar como\" se só desexas gardar a información."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
msgstr "Baixar subtítulos"
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Subir subtítulos..."
+
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
msgstr "Retraso (ms)"
@@ -790,7 +786,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Faltan porcións do arquivo"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "A superficie de vídeo será distribuida como unha textura pero ainda asi as funcións 2D serán usadas para copiar e alongar no backbuffer. Require unha tarxeta de vídeo que poida aplicar RGBA de 32 bits, polo menos á resolución do vídeo."
msgctxt "IDC_TEXTURESURF3D"
@@ -803,7 +799,7 @@ msgstr "Se non hai soporte para Pixel Shader 2.0, usarase automáticamente o red
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
-msgstr "Pon a VMR-9 (sen renderizador) no modo do mesturador, isto significa que a maioría dos controis da páxina de propiedades funcionaran e usara un proceso de traballo separado para renderizar cadros."
+msgstr "Pon a VMR-9 (sen renderizador) no modo do mesturador, isto significa que a maioría dos controis da páxina de propiedades funcionaran e usara un proceso de traballo separado para renderizar cadros."
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
@@ -817,6 +813,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Reduce o tearing (rachamento da imaxe) pasando por alto o VSync incoporado por defecto ao D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Sintonización"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Subtítulos non cargados ou renderizador non soportado."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Almacena os sombreadores compilados no directorio AppData local para acelerar o tempo de carga."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Abre VTS_xx_0.ifo para cargar todos os ficheiros VTS_xx_x.vob de golpe"
@@ -889,7 +897,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Silencio"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Quitar Silencio"
@@ -954,11 +962,11 @@ msgid "&Organize Favorites..."
msgstr "&Organizar favoritos..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Ao Azar"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Abrir ubicación do ficheiro"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -979,7 +987,7 @@ msgstr "EDL Novo Clip"
msgctxt "IDS_RECENT_FILES_CLEAR"
msgid "&Clear list"
-msgstr "&Lista Borrada"
+msgstr "&Lista borrada"
msgctxt "IDS_RECENT_FILES_QUESTION"
msgid "Are you sure that you want to delete recent files list?"
@@ -991,7 +999,7 @@ msgstr "Gardado de EDL"
msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time Correction"
-msgstr "Activar Correción de Tempos en Cadros"
+msgstr "Activar correción de tempos en cadros"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
@@ -1042,8 +1050,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Zoom a Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Agochar en Pantalla Completa"
+msgid "&Hide on Fullscreen"
+msgstr "Agochar en pantalla completa"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1103,7 +1111,7 @@ msgstr "Clasificación"
msgctxt "IDS_INFOBAR_DESCRIPTION"
msgid "Description"
-msgstr "Descripción"
+msgstr "Descrición"
msgctxt "IDS_INFOBAR_DOMAIN"
msgid "Domain"
@@ -1230,7 +1238,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Engadir cartafol colector"
msgctxt "IDS_HW_INDICATOR"
@@ -1337,13 +1345,89 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<Non definido>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Observar"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Subir"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Baixar"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr ""
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Activa o rexistro de eventos nun ficheiro (require reinicio)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Tempo restante"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Alta precisión"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Tras a reprodución: Rebobinar o ficheiro actual"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Tras a reprodución: Pechar"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "Produciuse un problema ao inicializar MPC-HC. Coa súa axuda é posible que poidamos corrixir o problema.\n\nQuere informarnos do erro?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Proporcione un valor positivo se o audio vai adiantado ou un negativo se vai atrasado."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "A previsualización actualmente está deshabilitada. Pode habilitala nas opcións de MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Esta opción pode usarse para previsualizar ficheiros audiovisuais dende unha ubicación remota. Úseo só sobre unha rede privada adecuadamente asegurada.\n\nDe verdade quere habilitar esta opción?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Renderizador interno de subtítulos"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
-msgstr "Abrir Dispositivo"
+msgstr "Abrir dispositivo"
msgctxt "IDS_AG_SAVE_AS"
msgid "Save As"
-msgstr "Gardar Como"
+msgstr "Gardar como"
msgctxt "IDS_AG_SAVE_IMAGE"
msgid "Save Image"
@@ -1351,19 +1435,19 @@ msgstr "Gardar Imaxe"
msgctxt "IDS_MPLAYERC_6"
msgid "Save Image (auto)"
-msgstr "Gardar Imaxe (Automático)"
+msgstr "Gardar Imaxe (automático)"
msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Imaxe gardada satisfactoriamente"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Cargar Subtítulo"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Cargar Subtítulos..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Gardar Subtítulo"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Gardar subtítulos..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,11 +1470,11 @@ msgid "Stop"
msgstr "Deter"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Avanzar un cadro"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Retroceder un cadro"
msgctxt "IDS_AG_GO_TO"
@@ -1447,7 +1531,7 @@ msgstr "Fotograma clave máis preto"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
-msgstr "MPC-HC atopou o problema durante o inicio. A reprodución do DVD podería funcionar incorrectamente. Isto pode ser causado por algúnhas incompatibilidades con certas ferramentas de seguridade.\n\nDesexas reportar este problema?"
+msgstr "MPC-HC atopou o problema durante o inicio. A reprodución do DVD podería funcionar incorrectamente. Isto pode ser causado por algúnhas incompatibilidades con certas ferramentas de seguridade.\n\nDesexas reportar este problema?"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
@@ -1490,8 +1574,8 @@ msgid "Thumbnails saved successfully"
msgstr "Miniaturas gardadas satisfactoriamente"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Secuencia de &vídeo"
+msgid "Vide&o Track"
+msgstr "Pista de &vídeo"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1507,7 +1591,7 @@ msgstr "Estás seguro de que desexas restaurar MPC-HC ás súas configuracións
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr "Por favor pecha todas as instancias de MPC-HC para que as configuracións predefinidas poidan ser restauradas."
+msgstr "Por favor pecha todas as instancias de MPC-HC para que as configuracións predefinidas poidan ser restauradas."
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
@@ -1538,11 +1622,11 @@ msgid "Reset Rate"
msgstr "Reiniciar Velocidade"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Axuste de Audio de +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Axuste de Audio de -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1595,7 +1679,7 @@ msgstr "Ficheiro Anterior"
msgctxt "IDS_MPLAYERC_99"
msgid "Toggle Direct3D fullscreen"
-msgstr "Interruptor de Direct3D en Pantalla Completa"
+msgstr "Interruptor de Direct3D en pantalla completa"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
@@ -1607,20 +1691,60 @@ msgstr "Ir a Sub Seguinte"
msgctxt "IDS_MPLAYERC_102"
msgid "Shift Subtitle Left"
-msgstr "Mover Sub á Esquerda"
+msgstr "Mover sub á esquerda"
msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
-msgstr "Mover Sub á Dereita"
-
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Amosar Estadisticas"
+msgstr "Mover sub á dereita"
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Saltar ao comezo"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "Sobreimpresión: Amosar nome do ficheiro"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Reproducir DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Reproducir BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "Sobreimpresión: Amosar estadísticas do renderizador"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "Sobreimpresión: Reiniciar estadísticas do renderizador"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Subtítulos::Outras opcións"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Agochar &bordos"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Cadro soamente"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Amosar menú &&subtítulos"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Agochar &menú"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Avanzado"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Modo Mínimo"
@@ -1643,7 +1767,7 @@ msgstr "Pantalla completa (sen cambio de resolución)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT"
msgid "Zoom Auto Fit"
-msgstr "Zoom Auto Axustar"
+msgstr "Zoom Auto axustar"
msgctxt "IDS_AG_VIDFRM_HALF"
msgid "VidFrm Half"
@@ -1659,7 +1783,7 @@ msgstr "VidFrm Dobre"
msgctxt "IDS_AG_ALWAYS_ON_TOP"
msgid "Always On Top"
-msgstr "Sempre Visible"
+msgstr "Sempre visible"
msgctxt "IDS_AG_PNS_INC_SIZE"
msgid "PnS Inc Size"
@@ -1667,11 +1791,11 @@ msgstr "PnS Inc Tamaño"
msgctxt "IDS_AG_PNS_INC_WIDTH"
msgid "PnS Inc Width"
-msgstr "PnS Inc Ancho"
+msgstr "PnS Inc ancho"
msgctxt "IDS_MPLAYERC_47"
msgid "PnS Inc Height"
-msgstr "PnS Inc Altura"
+msgstr "PnS Inc altura"
msgctxt "IDS_AG_PNS_DEC_SIZE"
msgid "PnS Dec Size"
@@ -1679,15 +1803,15 @@ msgstr "PnS Dec Tamaño"
msgctxt "IDS_AG_PNS_DEC_WIDTH"
msgid "PnS Dec Width"
-msgstr "PnS Dec Ancho"
+msgstr "PnS Dis ancho"
msgctxt "IDS_MPLAYERC_50"
msgid "PnS Dec Height"
-msgstr "PnS Inc Altura"
+msgstr "PnS Dis altura"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Baixando subtítulo(s), por favor agarde."
+msgid "Downloading [%s] \"%s\""
+msgstr "Baixando [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1698,7 +1822,7 @@ msgid "No subtitles found."
msgstr "Non se atoparon subtítulos."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "%d subtítulo(s) dispoñible(s)."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
@@ -1775,7 +1899,7 @@ msgstr "PnS Arriba/Esquerda"
msgctxt "IDS_AG_PNS_UPRIGHT"
msgid "PnS Up/Right"
-msgstr "PnS Up/Dereita"
+msgstr "PnS Arriba/Dereita"
msgctxt "IDS_AG_PNS_DOWNLEFT"
msgid "PnS Down/Left"
@@ -1799,91 +1923,91 @@ msgstr "Silenciar"
msgctxt "IDS_MPLAYERC_63"
msgid "DVD Title Menu"
-msgstr "Menú de Titulos do DVD"
+msgstr "Menú de títulos do DVD"
msgctxt "IDS_AG_DVD_ROOT_MENU"
msgid "DVD Root Menu"
-msgstr "Menú Raíz do DVD"
+msgstr "Menú raíz do DVD"
msgctxt "IDS_MPLAYERC_65"
msgid "DVD Subtitle Menu"
-msgstr "Menú de Subtítulos do DVD"
+msgstr "Menú de subtítulos do DVD"
msgctxt "IDS_MPLAYERC_66"
msgid "DVD Audio Menu"
-msgstr "Menú de Audio do DVD"
+msgstr "Menú de audio do DVD"
msgctxt "IDS_MPLAYERC_67"
msgid "DVD Angle Menu"
-msgstr "Menú de Ángulo do DVD"
+msgstr "Menú de ángulo do DVD"
msgctxt "IDS_MPLAYERC_68"
msgid "DVD Chapter Menu"
-msgstr "Menú de Capítulos do DVD"
+msgstr "Menú de capítulos do DVD"
msgctxt "IDS_AG_DVD_MENU_LEFT"
msgid "DVD Menu Left"
-msgstr "DVD Menú Esquerda"
+msgstr "DVD Menú esquerda"
msgctxt "IDS_MPLAYERC_70"
msgid "DVD Menu Right"
-msgstr "DVD Menú Dereita"
+msgstr "DVD Menú dereita"
msgctxt "IDS_AG_DVD_MENU_UP"
msgid "DVD Menu Up"
-msgstr "DVD Menú Arriba"
+msgstr "DVD Menú arriba"
msgctxt "IDS_AG_DVD_MENU_DOWN"
msgid "DVD Menu Down"
-msgstr "DVD Menú Abaixo"
+msgstr "DVD Menú abaixo"
msgctxt "IDS_MPLAYERC_73"
msgid "DVD Menu Activate"
-msgstr "DVD Menú Activar"
+msgstr "DVD Menú activar"
msgctxt "IDS_AG_DVD_MENU_BACK"
msgid "DVD Menu Back"
-msgstr "DVD Menú Voltar"
+msgstr "DVD Menú voltar"
msgctxt "IDS_MPLAYERC_75"
msgid "DVD Menu Leave"
-msgstr "DVD Menú Deixar"
+msgstr "DVD Menú deixar"
msgctxt "IDS_AG_BOSS_KEY"
msgid "Boss key"
msgstr "Tecla do Xefe"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Menú do reproductor (curto)"
+msgid "Player Menu"
+msgstr "Menú do reprodutor"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Menú do reproductor (longo)"
+msgid "Player Menu (full)"
+msgstr "Menú do reprodutor (completo)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
-msgstr "Menú de Filtros"
+msgstr "Menú de filtros"
msgctxt "IDS_AG_OPTIONS"
msgid "Options"
msgstr "Opcións"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Audio Seguinte"
+msgid "Next Audio Track"
+msgstr "Pista de audio seguinte"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Audio Previo"
+msgid "Prev Audio Track"
+msgstr "Pista de audio anterior"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Subtítulo Seguinte"
+msgid "Next Subtitle Track"
+msgstr "Pista de subtítulos seguinte"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Subtítulo Previo"
+msgid "Prev Subtitle Track"
+msgstr "Pista de subtítulos anterior"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1893,53 +2017,37 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Recargar Subtítulos"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Audio Seguinte (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Audio Previo (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Subtítulo Seguinte (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Subtítulo Previo (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
-msgstr "Angulo Seguinte (DVD)"
+msgstr "Ángulo seguinte (DVD)"
msgctxt "IDS_MPLAYERC_92"
msgid "Prev Angle (DVD)"
-msgstr "Angulo Previo (DVD)"
+msgstr "Ángulo previo (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Audio Seguinte (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Pista de audio seguinte (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Audio Previo (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Pista de audio anterior (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Subtítulo Seguinte (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Pista de subtítulos seguinte (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Subtítulo Previo (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Pista de subtítulos anterior (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Subtítulos Activados/Desactivados (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Tempo Restante"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "Sobreimpresión: Amosar hora actual"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2073,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Encriptado"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Si"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Non"
@@ -2023,15 +2131,15 @@ msgstr "Búferes"
msgctxt "IDS_MAINFRM_9"
msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
-msgstr "Volume: %02lu/%02lu, Titulo: %02lu/%02lu, Capitulo: %02lu/%02lu"
+msgstr "Volume: %02lu/%02lu, Titulo: %02lu/%02lu, Capítulo: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Ángulo: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2047,7 +2155,7 @@ msgstr "MPC-HC non ten suficientes privilexios para cambiar as asociacións de f
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr "MPC-HC é un reproductor de medios de código aberto extremamente lixeiro para Windows. É compatible con todos os formatos comúns de ficheiros de audio e vídeo dispoñibles para a súa reprodución. Estamos 100% libre de spyware, no hai anuncios ou barras de ferramentas."
+msgstr "MPC-HC é un reprodutor de medios de código aberto extremamente lixeiro para Windows. É compatible con todos os formatos comúns de ficheiros de audio e vídeo dispoñibles para a súa reprodución. Estamos 100% libre de spyware, no hai anuncios ou barras de ferramentas."
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2087,11 +2195,11 @@ msgstr "DVD: Fallo por Macrovision"
msgctxt "IDS_MAINFRM_22"
msgid "DVD: Incompatible System And Decoder Regions"
-msgstr "DVD: Sistema e Decodificador de Rexións Incompatibles"
+msgstr "DVD: Sistema e decodificador de rexións incompatibles"
msgctxt "IDS_MAINFRM_23"
msgid "DVD: Incompatible Disc And Decoder Regions"
-msgstr "DVD: Disco e Decodificador de Rexións Incompatibles"
+msgstr "DVD: Disco e decodificador de rexións incompatibles"
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
@@ -2121,36 +2229,28 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Ancho da imaxe"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "A URL semella correcta!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Versión do protocolo non compatible, actualiza o teu reproductor ou escolle outro enderezo!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "Relación de Aspecto"
+msgstr "Relación de aspecto"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
msgstr ", Total: %ld, Perdidos: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Tamaño: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Tamaño: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Libre: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Libre: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2222,8 +2322,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Non se pode crear o ficheiro, as miniaturas son demasiado pequenas.\n\nintente reducir o número de miniaturas ou aumentar o tamaño total."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Para cargar os subtítulos tes que cambiar o tipo de renderizador de video e reabrir o ficheiro.\n- DirectShow: VMR-7/VMR-9 (sen renderizador), EVR (CP), Sync, madVR ou Haali\n- RealMedia: Renderizador especial para RealMedia, ou abrilo con DirectShow\n- QuickTime: DX7 ou DX9 renderizador paraQuickTime\n- ShockWave: non dispoñible"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Para cargar os subtítulos tes que cambiar o tipo de renderizador de video e reabrir o ficheiro.\n- DirectShow: VMR-9 (sen renderizador), EVR (CP), Sync, madVR ou Haali\n- RealMedia: Renderizador especial para RealMedia, ou abrilo con DirectShow\n- QuickTime: DX7 ou DX9 renderizador paraQuickTime\n- ShockWave: non dispoñible"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2231,31 +2331,31 @@ msgstr "Ficheiros de subtìtulos"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
-msgstr "Relación de Aspecto: %ld:%ld"
+msgstr "Relación de aspecto: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Relación de Aspecto: Orixinal"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Relación de aspecto: Orixinal (RAO)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Diferenza entre Video e Audio: %I64dms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
-msgstr "Capitulo %d"
+msgstr "Capítulo %d"
msgctxt "IDS_AG_OUT_OF_MEMORY"
msgid "Out of memory"
msgstr "Falta de memória!"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Erro: Flash para IE non instalado"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Erro: Flash para Internet Explorer non instalado"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
-msgstr "QuickTime aínda non é compatible coa versión X64 (non hai unha libraría de apple dispoñible)"
+msgstr "QuickTime aínda non é compatible coa versión X64 (non hai unha biblioteca de apple dispoñible)"
msgctxt "IDS_MAINFRM_80"
msgid "Failed to create the filter graph object"
@@ -2273,10 +2373,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Imposible renderizar o ficheiro"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL incorrecta, non se atopou a base de datos de subtítulos!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Capítulo:"
@@ -2297,14 +2393,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Actual"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC rematou inesperadamente. Para axudarnos a arranxar o problema, por favor, envía este ficheiro \"%s\" ao noso rastrexador de fallos.\n\nDesexas abrir o cartafol que conten o ficheiro e visitar o rastrexador de fallos agora?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Fallou a creación do ficheiro de volcado a \"%s\" (erro %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Seleccione Directorio"
@@ -2319,10 +2407,10 @@ msgstr "Pausa"
msgctxt "IDS_AG_TOGGLE_CAPTION"
msgid "Toggle Caption&Menu"
-msgstr "Amosar Menú de &Captura"
+msgstr "Amosar menú de &captura"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Amosar Seeker"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2407,11 +2495,11 @@ msgstr "&Propiedades..."
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr "Propiedades (do pin)..."
+msgstr " propiedades (do pin)..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
-msgstr "Pista Descoñecida"
+msgstr "Pista descoñecida"
msgctxt "IDS_AG_UNKNOWN"
msgid "Unknown %u"
@@ -2419,15 +2507,15 @@ msgstr "%u Descoñecida"
msgctxt "IDS_AG_VSYNC"
msgid "VSync"
-msgstr "VSync (Sincronia Vertical)"
+msgstr "VSync (Sincronia vertical)"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr "(Comentario do Director N° 1)"
+msgstr " (Comentarios do director 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr "(Comentario do Director N° 2)"
+msgstr " (Comentarios do director 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
@@ -2451,7 +2539,7 @@ msgstr "Diminuír desprazamento VSync"
msgctxt "IDS_MAINFRM_136"
msgid "MPC-HC D3D Fullscreen"
-msgstr "Pantalla Completa MPC-HC D3D"
+msgstr "Pantalla completa MPC-HC D3D"
msgctxt "IDS_MAINFRM_137"
msgid "Unknown format"
@@ -2478,12 +2566,12 @@ msgid "Volume boost Max"
msgstr "Aumento de Volume Maximo"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Uso: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tO ficheiro principal ou directorio vaise cargar (wildcards\n\t\tpermitidos, \"-\" denotes standard input)\n/dub \"dubname\"\tCargar un ficheiro de audio adicional\n/dubdelay \"file\"\tCargar un ficheiro de Audio adicional alterado con XXms (se\n\t\to ficheiro contén \"...DELAY XXms...\")\n/d3dfs\t\tIniciar renderizamento en D3D modo pantalla completa\n/sub \"subname\"\tCargar un ficheiro de subtítulos adicional\n/filter \"filtername\"\tCargar filtros DirectShow dunha ligazón dinámica\n\t\t (wildcards allowed)\n/dvd\t\tExecutar en modo DVD, \"pathname\" significa o cartafol\n\t\tdo dvd (opcional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tCargar todas as pistas dun CD de Audio ou (s)vcd,\n\t\t\"pathname\" significa a ruta do drive (opcional)\n/device\t\tOpen the default video device\n/open\t\tAbrir o ficheiro, non inicia automaticamente a reprodución\n/play\t\tInicia a reprodución do ficheiro cando o reproductor este\n\t\taberto\n/close\t\tPecha o programa despois da reprodución (Só funciona cando é\n\t\tusado con /play)\n/shutdown\tDesliza o sistema operacional despois da reprodución\n/fullscreen\tInicia en modo pantalla completa\n/minimized\tInicia en modo minimizado\n/new\t\tUsa o programa nunha nova estancia\n/add\t\tadiciona \"pathname\" á lista de reprodución, pode ser combinada\n\t\tcon /open e con /play\n/regvid\t\tRexistra formatos de vídeo\n/regaud\t\tRexistra formatos de Audio\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tFacer rexistro de todos os formatos de vídeo\n/start ms\t\tInicia a reprodución en \"ms\" (= millisegundos)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tAxusta tamaño fixo da xanela\n/monitor N\tInicia monitoramento N, onde N inicia en 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestaura as configuracións por defecto \n/help /h /?\tAmosa axuda sobre as opcións da liña de comandos\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Uso: mpc-hc.exe \"ruta\" [parámetros]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
-msgstr "Atopouse opción(s) descoñecida(s) na liña de Comandos:\n"
+msgstr "Atopouse opción(s) descoñecida(s) na liña de Comandos:\n\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
@@ -2499,15 +2587,15 @@ msgstr "Amosar Estado"
msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
msgid "Toggle Subresync Bar"
-msgstr "Amosar Barra de Resincronizar Subtítulos"
+msgstr "Amosar barra de resincronizar subtítulos"
msgctxt "IDS_AG_TOGGLE_PLAYLIST"
msgid "Toggle Playlist Bar"
-msgstr "Amosar Barra da Lista de Reprodución"
+msgstr "Amosar barra da lista de reprodución"
msgctxt "IDS_AG_TOGGLE_CAPTURE"
msgid "Toggle Capture Bar"
-msgstr "Amosar Barra de Captura"
+msgstr "Amosar barra de captura"
msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
msgid "Toggle Debug Shaders"
@@ -2565,14 +2653,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "Activ&e todos os filtros"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Sintonización"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Subtítulos non cargados ou renderizador non soportado."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Autor descoñecido. Contactenos se vostede fixo este logo!"
@@ -2661,40 +2741,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Enriba Detrás Dereito"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Reiniciar Estatísticas"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Subtítulos::Misc"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Agochar &bordos"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Cadro soamente"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Amosar Menú &&Subtítulos"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Agochar &menú"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Avanzado"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Sobre a barra de desprazamento"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Baixo a barra de desprazamento"
msgctxt "IDS_VIDEO_STREAM"
@@ -2747,7 +2799,7 @@ msgstr "Inhabilitar todos os decodificadores de vídeo"
msgctxt "IDS_STRETCH_TO_WINDOW"
msgid "Stretch To Window"
-msgstr "Axustar á Xanela"
+msgstr "Axustar á xanela"
msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
msgid "Touch Window From Inside"
@@ -2862,8 +2914,8 @@ msgid "Other Audio"
msgstr "Outro Audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2925,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3009,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Lista de reprodución"
@@ -2975,19 +3031,7 @@ msgstr "Resolución"
msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "Relación de Aspecto"
-
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Usar WASAPI (reiniciar reprodución)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Silenciar no adianto rápido"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Dispositivo de son:"
+msgstr "Relación de aspecto"
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
@@ -3111,11 +3155,11 @@ msgstr "Agardar polo baleiramento da GPU: Apagado"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
msgid "D3D Fullscreen: On"
-msgstr "D3D en Pantalla completa: Encendido"
+msgstr "D3D en pantalla completa: Encendido"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
msgid "D3D Fullscreen: Off"
-msgstr "D3D en Pantalla completa: Apagado"
+msgstr "D3D en pantalla completa: Apagado"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
msgid "Disable desktop composition: On"
@@ -3277,6 +3321,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Recuperar volume: Apagado"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3334,7 +3382,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Erro ao analizar a taxa de cadros introducida!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Non é posible saltar o cadro, tenteo con procesador de vídeo diferente."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3353,10 +3401,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "As funcións \"Gardar Imaxe\" e \"Gardar Miniaturas\" non funcionan co Procesador de vídeo Mesturador Overlay .\nCambie o procesador de vídeo nas opcións de saída do MPC-HC e re-abra o ficheiro."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Non foi posible conectarse ao servidor de subtítulos."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Vostede desexa activar o editor de EDL?"
@@ -3425,7 +3469,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Vostede precisa aplicar as novas configuracións antes de probar."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Despois da reprodución: Pechar ficheiro"
@@ -3453,6 +3497,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Tras a reprodución: apagar o monitor"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Despois da reprodución: Reproducir o próximo ficheiro do cartafol"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Despois da reprodución: Non facer nada"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Brillo: %s"
@@ -3483,7 +3535,7 @@ msgstr "Aumentar brillo"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
-msgstr "Insira o seu idioma preferido aqui.\nPor exemplo, tipo: \"eng jap swe\"\n "
+msgstr "Insira o seu idioma preferido aqui.\nPor exemplo, tipo: \"eng jap swe\""
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
@@ -3511,7 +3563,7 @@ msgstr "&Canles"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr "Se \"O último fotograma clave\" está seleccionado, buscarase o primeiro fotograma clave (\"keyframe\") anterior ao punto de búsqueda actual.\nSe \"O fotograma clave que está máis preto\" está seleccionado, buscarase o primeiro fotograma clave anterior ou posterior ao punto de búsqueda dependendo de cal sexa o que está máis preto. "
+msgstr "Se \"O último fotograma clave\" está seleccionado, buscarase o primeiro fotograma clave (\"keyframe\") anterior ao punto de búsqueda actual.\nSe \"O fotograma clave que está máis preto\" está seleccionado, buscarase o primeiro fotograma clave anterior ou posterior ao punto de búsqueda dependendo de cal sexa o que está máis preto. "
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
@@ -3533,3 +3585,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Axustes"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Provedor"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Dificultades de audición"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Descargas"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Valoración"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Fallou a búsqueda de subtítulos en liña."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Interrompeuse a búsqueda de subtítulos en liña."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Completouse a búsqueda de subtítulos; atoparonse %d."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Completouse a búsqueda de subtítulos e non se atopou ningún."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Baixar subtítulos"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Agarde mentres se buscan os subtítulos en liña…"
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Interrompendo a búsqueda de subtítulos…"
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Nome de usuario"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Estado"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Listo…"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Non implementado."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Subindo..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Subironse os subtítulos correctamente."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "A subida dos subtítulos fallou."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "A subida dos subtítulos foi abortada"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Os subtítulos xa existen."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Subindo subtítulos, por favor agarde."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Subida rematada."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Subida abortada."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "A subida fallou."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Baixar e abrir"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Configuración"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Reiniciar"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Subir"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Baixar"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Abrir URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Linguas"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "ERRO: non se puido estabrecer a conexión con Internet."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Proporcionar datos de acceso ao sitio web"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Introduza os seus datos de acceso para conectarse con:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Relación de aspecto: Asumir píxeles cadrados (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Descargado [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Subir subtítulos"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Está seguro de que quere subir o ficheiro de subtítulo \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Descargando idiomas soportados..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Non se puido gardar en \"%S\" co nome de usuario \"%S\".\n\nPor favor, introduza o nome de usuario e o contrasinal correctos ou restableza as credenciais para iniciar sesión como un usuario anónimo."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "A búsqueda automática e a descarga deshabilitaranse para tódolos ficheiros audiovisuais cuxa ruta conteña calquera dos patróns introducidos aquí.\nPor exemplo, escriba: \"private dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"ruta\"\tO ficheiro principal ou cartafol a ser cargado\n\t\t(permitense comodins, \"-\" denota entrada estándar)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"nomedadobraxe\"\tCarga un ficheiro de audio adicional"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"ficheiro\"\tCarga un ficheiro de audio adicional (dobraxe) desprazado XXms\n\t\t(se o ficheiro contén \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tInicia o renderizado en modo D3D a pantalla completa"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"nomedosubtítulo\"\tCarga un ficheiro de subtítulo adicional"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"nomedofiltro\"\tCarga os filtros DirectShow dende unha biblioteca de ligazón dinámica (dll) (comodins permitidos)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tExecutase en modo DVD, \"ruta\" indica o cartafol do DVD (opcional)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tInicia a reprodución no título T, capítulo C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tComeza a reprodución no título T, posición P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tCarga tódalas pistas dun CD de audio ou un (S)VCD,\n\t\t\"ruta\" indica a ruta á unidade (opcional)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tAbre o dispositivo de vídeo predeterminado"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tAbre o ficheiro, non inicia a súa reprodución automáticamente"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tComeza a reprodución do ficheiro tan pronto se inicia o reprodutor"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tPecha o reprodutor tras a reprodución (só funciona cando se usa con /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tPecha o sistema operativo tras a reprodución"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tPon o sistema operativo en modo suspensión tras a reprodución"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tHiberna o sistema operativo tras a reprodución"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tPecha sesión tras a reprodución"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tBloquea o equipo tras a reprodución"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tApaga o monitor tras a reprodución"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tAbre o seguinte ficheiro do cartafol tras a reprodución"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tInicia o reprodutor en pantalla completa"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tInicia o reprodutor en modo minimizado"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tUsa unha nova instancia do reprodutor"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tEngade unha \"ruta\" á lista de reprodución, podese combinar con /open e /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tReproduce en orde aleatorio a lista de reprodución"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tCrea asociacións de ficheiro para ficheiros de vídeo"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tCrea asociacións de ficheiro para ficheiros de audio"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tCrea asociacións de ficheiro para ficheiros de listas de reprodución"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tCrea asociacións de ficheiro para tódolos tipos de ficheiro soportados"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tElimina todalas asociacións de ficheiro"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tComeza a reprodución en \"ms\" (= millisegundos)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tComeza a reprodución na posición hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tEstablece un tamaño de xanela fixado"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tInicia o reprodutor no monitor N, onde N comeza dende 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tIniciase usando o renderizador de audio N, onde N comeza dende 1 (vexa configuración de \"Saída\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tIniciase usando o preaxuste \"Pr\" do sombreador"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"nome\"\tEspecifica o nome do modo de reencadre (pan&scan) a usar"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tVolve asocialas iconas de formato"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tAbre o MPC-HC en segundo plano"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tInicia a interface web no porto especificado"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tAmosa información de depuración sobreimpresionada (OSD)"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDeshabilita o informe de erro"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tUsa MPC-HC en modo escravo"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tEstablece o índice que indica a GPU a usar para a decodificación por hardware.\n\t\tSó dispoñible para os modos CUVID e DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tRestablece a configuración predeterminada"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tAmosa a axuda de parámetros da liña de comandos"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Valor umbral de puntuación para subtítulos que se van a descargar automáticamente. Valores máis altos indican que se cargarán subtítulos cunha coincidencia máis precisa, valores máis baixos poderían resultar en que se carguen subtítulos incorrectos, pero non hai un valor perfecto. Seleccione aquel que mellor lle funcione."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Retardo do audio (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Tamaño en píxeles da barra de ferramentas predeterminada."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Usar antiga barra de ferramentas en lugar da nova vectorizada."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.he.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.he.dialogs.po
index b4fb9baf5..9c9887f2e 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.he.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.he.dialogs.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Superb, 2013
@@ -7,10 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Hebrew (http://www.transifex.com/projects/p/mpc-hc/language/he/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Hebrew (http://www.transifex.com/mpc-hc/mpc-hc/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -110,16 +110,16 @@ msgid "Enable custom channel mapping"
msgstr "הפעל מיפוי ערוצים מותאם אישית"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "תצורת רמקולים עבור "
+msgid "Speaker configuration for"
+msgstr "תצורת רמקולים עבור"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "ערוצי קלט:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "החזק את מקש ה-Shift בשביל שינוי מיידי כאשר אתה לוחץ על משהו "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "החזק את מקש ה-Shift בשביל שינוי מיידי כאשר אתה לוחץ על משהו"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -190,8 +190,8 @@ msgid "About"
msgstr "אודות"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "כל הזכויות שמורות © 2002-2014 קרא את קובץ היוצרים (Authors.txt)"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "כל הזכויות שמורות © 2002-2017 קרא את קובץ היוצרים (Authors.txt)"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -422,12 +422,16 @@ msgid "time(s)"
msgstr "מספר פעמים"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "פלט"
+msgid "Default zoom"
+msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -473,10 +477,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "טען אוטומטית קבצי אודיו"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr ""
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "שליטה"
@@ -570,7 +570,7 @@ msgid "Warning"
msgstr "אזהרה"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "אם אתה מבצע מעקף בהגדרות כרטיס המסך ומפעיל את החלקת הקצוות במסך מלא, הכתוביות לא יראו טוב יותר, אך המעבד שלך יעבוד שעות נוספות."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -677,16 +677,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "חסום הקטנת החלון כאשר מנגן במסך מלא על מסך שאינו ברירת המחדל"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "אפשר שליטה ותצוגה מתקדמת בשורת המשימות של Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr ""
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "פתח את הקובץ הקודם/הבא בתיקייה בביצוע \"קפיצה אחורה/קדימה\" כאשר יש פריט אחד בלבד ברשימת הניגון"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "השתמש בתיבת זמן מרחפת:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1126,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "מוסר האודיו"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "הגדרות VMR-7/VMR-9 (renderless)‎ ו-EVR(-CP)‎."
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "הגדרות VMR-9 (renderless)‎ ו-EVR(-CP)‎."
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1170,8 +1170,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "כתוביות *"
+msgid "Subtitles"
+msgstr ""
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1186,12 @@ msgid "Rotation"
msgstr "סיבוב"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* פילטרים חיצוניים (כמו VSFilter) מסוגלים להציג כתוביות בכל מציגי הוידאו."
+msgid "Subtitle Renderer"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1205,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "אפשר גישה מהמחשב הנוכחי בלבד"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr ""
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "הדפס מידע לניפוי באגים"
@@ -1230,17 +1238,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "מטפלי CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "כתוביות זמינות ברשת"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "הורד ופתח"
+msgid "Download subtitles"
+msgstr "הורד כתוביות"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "החלף את הכתוביות שכבר הועלו"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "הגדרות"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "הגדרות"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "שמירה בשם..."
@@ -1278,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "הפעל בדיקת עדכונים אוטומטית"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "משך זמן בין בדיקה לבדיקה:"
+msgid "Check every:"
+msgstr ""
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1542,16 +1578,28 @@ msgid "Reset"
msgstr "אפס"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "מסד נתונים ברשת"
+msgid "Online search, download and upload subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr ""
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "כתובת למסד נתונים ברשת:"
+msgid "Languages in order of preference:"
+msgstr ""
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "בדוק"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr ""
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1653,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "ברירת מחדל"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr ""
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr ""
@@ -1665,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "אישור"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.he.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.he.menus.po
index 70875063b..799ca11f9 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.he.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.he.menus.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Superb, 2013
@@ -7,10 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:01+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Hebrew (http://www.transifex.com/projects/p/mpc-hc/language/he/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-01-31 22:01+0000\n"
+"Last-Translator: Underground78\n"
+"Language-Team: Hebrew (http://www.transifex.com/mpc-hc/mpc-hc/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -65,29 +65,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "שמור תמונות ממוזערות..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "טען כתוביות..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "שמור כתוביות..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "מסד נתונים של כתוביות"
+msgid "S&ubtitles"
+msgstr "כתוביות"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "חפש..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr ""
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "העלה..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "הורד..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr ""
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -197,13 +193,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "בדיקת קריעה"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "הצגת סטטיסטיקה"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr ""
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr ""
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "זמן שנותר"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr ""
msgctxt "POPUP"
msgid "&Output Range"
@@ -405,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "גע בחלון מבחוץ"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "שמור על יחס גובה-רוחב"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "דרוס יחס גובה-רוחב"
+msgid "&Aspect Ratio"
+msgstr ""
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "ברירת מחדל"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr ""
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -437,6 +433,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "תקן הפרש יחס גובה-רוחב של מסך/שולחן עבודה"
@@ -530,9 +530,25 @@ msgid "&Stop"
msgstr "עצור"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "התקדם בפריים"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr ""
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "הקטן מהירות"
@@ -554,16 +570,16 @@ msgid "S&haders"
msgstr "מצלילים"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "שמע"
+msgid "&Audio Track"
+msgstr ""
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "כתוביות"
+msgid "Su&btitle Track"
+msgstr ""
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "זרם וידאו"
+msgid "Vide&o Track"
+msgstr ""
msgctxt "POPUP"
msgid "&Volume"
@@ -585,7 +601,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "אחרי ניגון"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "צא מנגן"
@@ -609,10 +637,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "נעל"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr ""
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "ניווט"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.he.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.he.strings.po
index 56e56550f..3a9bb8431 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.he.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.he.strings.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Superb, 2013
@@ -7,10 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Hebrew (http://www.transifex.com/projects/p/mpc-hc/language/he/)\n"
+"Language-Team: Hebrew (http://www.transifex.com/mpc-hc/mpc-hc/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -61,10 +61,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "מאפיינים"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr ""
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "סגנון ברירת מחדל"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr ""
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "קבצים"
@@ -117,6 +125,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr ""
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "אף פעם (הגישה המהירה ביותר)"
@@ -326,11 +354,11 @@ msgid "On/Off"
msgstr "פועל/כבוי"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
+msgid "From (FPS)"
msgstr "מפריימים בשנייה"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr "לפריימים בשנייה"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -465,6 +493,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "ניגון::Shaders"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "משאבים"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "שונות"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "מידע-מדיה"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "ניגון::לכידה"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "ניגון::Sync Renderer Settings"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "ניגון::מסך מלא"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr ""
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "מחליף זרמי השמע"
@@ -489,18 +545,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr ""
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr ""
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr ""
@@ -553,34 +601,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "נגן::ממשק אתר רשת"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "כתוביות::מסד נתונים"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "משאבים"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "שונות"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "מידע-מדיה"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "ניגון::לכידה"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "ניגון::Sync Renderer Settings"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "ניגון::מסך מלא"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "פרטים"
@@ -601,17 +621,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "תמיד מציג ב-overlay. בדרך כלל רק פורמטי YUV מותרים, אך הם מוצגים ישירות ללא המרת צבעים ל-RGB. זוהי השיטה המהירה ביותר להצגה והיחידה בה אתה יכול להיות בטוח ששיקוף וידאו במסך מלא ליציאת טלוויזיה מופעלת."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "מציג ברירת המחדל ב-Windows XP. מאוד יציב ורק טיפה יותר איטי ממיקסר ה-Overlay. משתמש ב-DirectDraw ורץ ב-Overlay כאשר הוא מסוגל."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "זמין רק אם מותקן אצלך DirectX 9. ברשותו אותן יכולות כמו VMR-7 (windowed), אך הוא לעולם לא משתמש בהצגת Overlay ולכן יתכן ויהיה טיפה יותר איטי מ-VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "כמו VMR-7 (windowed), אך עם תוסף הקצבת תצוגה של MPC-HC עבור כתוביות. שיקוף וידאו של Overlay לא יעבוד. מרחב הצבעים 'צבע אמיתי' לשולחן העבודה מומלץ."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr ""
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -622,7 +634,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr ""
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "מתחבר לכל סוג מדיה דומה לוידאו וישלח את הדגימות הנכנסות לשום מקום. השתמש בזה כאשר אינך זקוק לתצוגת וידאו ואתה רוצה לחסוך עבודה מיותרת של המעבד."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -649,10 +661,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "מציג הוידאו של Real. סקריפטי SMIL יעבדו, אך אינטרקצייה כנראה לא. משתמש ב-DirectDraw ורץ ב-Overlay כאשר הוא יכול."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "פלט מנוע ה-Real המוצג על-ידי מקציב התצוגה מבוסס ה-DX7 של VMR-7 (renderless)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "פלט מנוע ה-Real המוצג על-ידי מקציב התצוגה מבוסס ה-DX9 של VMR-9 (renderless)."
@@ -661,10 +669,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "מציג הוידאו של QuickTime. קצת איטי כאשר גודל שטח הוידאו משתנה או מכוסה על-ידי חלון אחר. כאשר Overlay אינו זמין, הוא כנראה ניסוג ל-GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "פלט מנוע ה-QuickTime המוצג על-ידי מקציב התצוגה מבוסס ה-DX7 של VMR-7 (renderless)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "פלט מנוע ה-QuickTime המוצג על-ידי מקציב התצוגה מבוסס ה-DX9 של VMR-9 (renderless)."
@@ -673,22 +677,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "משטח הוידאו יוקצה כמשטח רגיל מחוץ למסך."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "מציג מסונכרן"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - דיווח על באג"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr ""
@@ -741,9 +733,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "ריק (לא מכווץ)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "מוסר האודיו של MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr ""
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -757,9 +749,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr ""
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "הורד כתוביות"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr ""
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -790,8 +786,8 @@ msgid "Couldn't find all archive volumes"
msgstr "לא ניתן היה למצוא את כל חלקי הארכיון"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "משטח הוידאו יוקצה כמרקם, אך פונקציות ה-2D עדיין ישמשו להעתיק ולמתוח אותו אל החוצץ האחורי. דורש כרטיס גרפי המסוגל להקצות מרקמי 32ביט, RGBA, ללא כפולות של 2 ולפחות ברזולוצייה של הוידאו."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "משטח הוידאו יוקצה כמרקם, אך פונקציות ה-2D עדיין ישמשו להעתיק ולמתוח אותו אל החוצץ האחורי. דורש כרטיס גרפי המסוגל להקצות מרקמי 32ביט, RGBA, ללא כפולות של 2 ולפחות ברזולוצייה של הוידאו."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
@@ -817,6 +813,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr ""
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "סריקת כוונן"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "כתוביות לא נטענו או מציג וידאו לא נתמך."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "פתח VTS_xx_0.ifo בכדי לטעון קבצי VTS_xx_x.vob כחתיכה אחת"
@@ -889,7 +897,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "השתק"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "ביטול השתקה"
@@ -954,11 +962,11 @@ msgid "&Organize Favorites..."
msgstr "ארגן מועדפים..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "ערבוב"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "פתח מיקום קובץ"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1042,7 +1050,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "זום למסך אולטרה-רחב,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "הסתר במסך מלא"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1230,7 +1238,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "הוסף תיקיה מכילה"
msgctxt "IDS_HW_INDICATOR"
@@ -1337,6 +1345,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr ""
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "הזז למעלה"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "הזז למטה"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr ""
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr ""
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr ""
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr ""
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr ""
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr ""
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "פתח התקן"
@@ -1357,13 +1441,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "תמונה נשמרה בהצלחה"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "טען כתוביות"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "שמור כתוביות"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,11 +1470,11 @@ msgid "Stop"
msgstr "עצור"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "התקדם בפריים"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "חזור פריים אחורה"
msgctxt "IDS_AG_GO_TO"
@@ -1490,8 +1574,8 @@ msgid "Thumbnails saved successfully"
msgstr "תמונות ממוזערות נשמרו בהצלחה"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "זרם וידאו"
+msgid "Vide&o Track"
+msgstr ""
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1538,11 +1622,11 @@ msgid "Reset Rate"
msgstr "אפס מהירות"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "שיהוי שמע +10מילי-שניות"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "שיהוי שמע -10מילי-שניות"
msgctxt "IDS_MPLAYERC_23"
@@ -1613,14 +1697,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "הזז כתוביות ימינה"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "הצג סטטיסטיקה"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "קפוץ להתחלה"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr ""
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr ""
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr ""
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr ""
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "כתוביות::שונות"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "הסתר מסגרת"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "פריים בלבד"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "הצג כותרת ותפריט"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "הסתר תפריט"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr ""
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "הצגה מינימלית"
@@ -1686,8 +1810,8 @@ msgid "PnS Dec Height"
msgstr "PnS הקטן גובה"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "מוריד כתוביות, אנא המתן."
+msgid "Downloading [%s] \"%s\""
+msgstr ""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1698,8 +1822,8 @@ msgid "No subtitles found."
msgstr "לא נמצאו כתוביות."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d כתוביות זמינות."
+msgid "%d subtitle(s) available."
+msgstr "%d כתוביות זמינות."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1854,12 +1978,12 @@ msgid "Boss key"
msgstr "מקש בוס"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "תפריט נגן (קצר)"
+msgid "Player Menu"
+msgstr ""
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "תפריט נגן (ארוך)"
+msgid "Player Menu (full)"
+msgstr ""
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1870,20 +1994,20 @@ msgid "Options"
msgstr "הגדרות"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "זרם השמע הבא"
+msgid "Next Audio Track"
+msgstr ""
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "זרם השמע הקודם"
+msgid "Prev Audio Track"
+msgstr ""
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "הכתוביות הבאות"
+msgid "Next Subtitle Track"
+msgstr ""
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "הכתוביות הקודמות"
+msgid "Prev Subtitle Track"
+msgstr ""
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1893,22 +2017,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "טען מחדש כתוביות"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "זרם שמע הבא (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "זרם שמע הקודם (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "הכתוביות הבאות (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "הכתוביות הקודמות (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "הזווית הבאה (די.וי.די)"
@@ -1918,28 +2026,28 @@ msgid "Prev Angle (DVD)"
msgstr "הזווית הקודמת (די.וי.די)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "זרם השמע הבא (די.וי.די)"
+msgid "Next Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "זרם השמע הקודם (די.וי.די)"
+msgid "Prev Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "הכתוביות הבאות (די.וי.די)"
+msgid "Next Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "הכתוביות הקודמות (די.וי.די)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "הפעל/כבה כתוביות (די.וי.די)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "זמן שנותר"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr ""
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2073,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "מוצפן"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "כן"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "לא"
@@ -2026,11 +2134,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "עצמת שמע: %02lu/%02lu, כותרת: %02lu/%02lu, פרק: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "זווית: %02lu/%02lu, %lux%lu %luהרץ %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %uהרץ %dביטים %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2121,14 +2229,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "רוחב תמונה"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "כתובת ה-URL נראית תקינה!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "גרסה פרוטוקול לא תואמת, אנא שדרג את הנגן שלך או בחר כתובת אחרת!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "יחס גובה-רוחב"
@@ -2138,19 +2238,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", סף הכל: %ld, הושמש: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", גודל: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", גודל: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", ריק: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", ריק: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2222,7 +2322,7 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr ""
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
msgstr ""
msgctxt "IDS_SUBTITLE_FILES_FILTER"
@@ -2234,11 +2334,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "יחס גובה-רוחב: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "יחס גובה-רוחב: ברירת מחדל"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr ""
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "שיהוי שמע: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2250,8 +2350,8 @@ msgid "Out of memory"
msgstr "אזל כל הזיכרון"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Error: Flash for IE is required"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Error: Flash for Internet Explorer is required"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2273,10 +2373,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "הגשת הקובץ נכשלה"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "כתובת URL לא תקינה, לא מצליח למצוא מסד נתונים של כתוביות שם!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "פרק: "
@@ -2297,14 +2393,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "נוכחי"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr ""
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "לא מצליח ליצור קובץ הטלה ב-'%s' (שגיאה %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "בחר תיקיה"
@@ -2322,7 +2410,7 @@ msgid "Toggle Caption&Menu"
msgstr "הצג/הסתר כותרת ותפריט"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "הפעל/כבה פס קפיצה"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2478,8 +2566,8 @@ msgid "Volume boost Max"
msgstr "המרצת עוצמת שמע מקסימלית"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tfile contains \"...DELAY XXms...\")\n/d3dfs\t\tstart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playing\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched.\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet fixed window size\n/monitor N\tStart on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2565,14 +2653,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "הפעל את כל הפילטרים"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "סריקת כוונן"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "כתוביות לא נטענו או מציג וידאו לא נתמך."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "יוצר לא ידוע. צור קשר אם אתה הוא שיצר את הלוגו!"
@@ -2661,40 +2741,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "אחורי ימני למעלה"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "איפוס סטטיסטיקות תצוגה"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "כתוביות::שונות"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "הסתר מסגרת"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "פריים בלבד"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "הצג כותרת ותפריט"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "הסתר תפריט"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr ""
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "מעל פס הקפיצה"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "מתחת פס הקפיצה"
msgctxt "IDS_VIDEO_STREAM"
@@ -2862,8 +2914,8 @@ msgid "Other Audio"
msgstr "שמע אחר"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr ""
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2925,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "שמע Windows Media"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr ""
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3009,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "שמע Windows Media"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "רשימת ניגון"
@@ -2977,18 +3033,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "יחס גובה-רוחב"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "השתמש ב-WASAPI (הפעל ניגון מחדש)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "השתקה בקפיצה מהירה קדימה"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "התקן שמע:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "סנכרון אנכי: מופעל"
@@ -3277,6 +3321,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "הגעה מחדש לעצמת קול: כבויה"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr ""
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3334,7 +3382,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "שגיאה בפענוח קצב הפריימים שהוזן!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr ""
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3353,10 +3401,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr ""
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr ""
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "האם ברצונך להפעיל את עורך ה-EDL?"
@@ -3425,7 +3469,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "אתה צריך להחיל את ההגדרות החדשות לפני שאתה מנסה אותן."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "לאחר הניגון: יציאה"
@@ -3453,6 +3497,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr ""
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr ""
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "בהירות: %s"
@@ -3533,3 +3585,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "הגדרות"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "הורד כתוביות"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "הורד ופתח"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "אפס"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "הזז למעלה"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "הזז למטה"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.hr.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.hr.dialogs.po
index b3c17aecb..ddaf1e3f6 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.hr.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.hr.dialogs.po
@@ -1,19 +1,19 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# schop <aprcel00@fesb.hr>, 2014
+# schop <aprcel00@fesb.hr>, 2014-2016
# iivana24 <iivana24@gmail.com>, 2014
-# streger <stjepan.treger@gmail.com>, 2014
+# streger <stjepan.treger@gmail.com>, 2014-2016
# Ico2005 <vukasinac@gmail.com>, 2014
# schop <aprcel00@fesb.hr>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-10-01 18:03+0000\n"
-"Last-Translator: schop <aprcel00@fesb.hr>\n"
-"Language-Team: Croatian (http://www.transifex.com/projects/p/mpc-hc/language/hr/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Croatian (http://www.transifex.com/mpc-hc/mpc-hc/language/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -30,7 +30,7 @@ msgstr "U redu"
msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
msgid "Cancel"
-msgstr "Otkaži"
+msgstr "Odustani"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
msgid "Video"
@@ -38,11 +38,11 @@ msgstr "Video"
msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
msgid "Set"
-msgstr "Podesi"
+msgstr "Namjesti"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "Audio"
-msgstr "Audio"
+msgstr "Zvuk"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "Output"
@@ -50,7 +50,7 @@ msgstr "Izlaz"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
msgid "Record Video"
-msgstr "Snimi Video"
+msgstr "Snimi video"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
msgid "Preview"
@@ -106,14 +106,14 @@ msgstr "Spusti uzorak na 44100Hz"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
-msgstr "Pomicanje audio zapisa (ms):"
+msgstr "Pomicanje zvučnog zapisa (ms):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
msgstr "Omogući prilagođeno mapiranje kanala"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Konfiguracija zvučnika za"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -121,7 +121,7 @@ msgid "input channels:"
msgstr "ulazni kanali:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Držite pritisnutu tipku SHIFT za instantne promjene kada kliknete nešto"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -158,7 +158,7 @@ msgstr "Otvori"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Unesite adresu video ili audio datoteke (s interneta ili s Vašeg računala) i player će ju otvoriti za Vas."
+msgstr "Unesite adresu video ili zvučne datoteke (s interneta ili s Vašeg računala) i izvođač će ju otvoriti za Vas."
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
@@ -182,19 +182,19 @@ msgstr "U redu"
msgctxt "IDD_OPEN_DLG_IDCANCEL"
msgid "Cancel"
-msgstr "Otkaži"
+msgstr "Odustani"
msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
msgid "Add to playlist without opening"
-msgstr "Dodaj na playlistu (bez pokretanja)"
+msgstr "Dodaj na listu izvođenja (bez pokretanja)"
msgctxt "IDD_ABOUTBOX_CAPTION"
msgid "About"
msgstr "O programu"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Zaštićeno © 2002-2014 - pogledaj Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Zaštićeno © 2002-2017 - pogledaj Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -214,7 +214,7 @@ msgstr "Verzija:"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Compiler:"
-msgstr "Compiler:"
+msgstr "Kompajler:"
msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
msgid "Not used"
@@ -230,7 +230,7 @@ msgstr "Operacijski sustav"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Name:"
-msgstr "Ime:"
+msgstr "Naziv:"
msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
msgid "Copy to clipboard"
@@ -246,11 +246,11 @@ msgstr "Opcije otvaranja"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
msgid "Use the same player for each media file"
-msgstr "Otvori medijsku datoteku u trenutnom playeru"
+msgstr "Otvori medijsku datoteku u trenutnom izvođaču"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
msgid "Open a new player for each media file played"
-msgstr "Otvori novi player za svaku medijsku datoteku"
+msgstr "Otvori novi izvođač za svaku medijsku datoteku"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Language"
@@ -274,7 +274,7 @@ msgstr "Ne stavljaj prefiks"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
msgid "Replace file name with title"
-msgstr "Zamijeni ime datoteke s naslovom"
+msgstr "Zamijeni naziv datoteke s naslovom"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Other"
@@ -342,7 +342,7 @@ msgstr "Zapamti posljednju veličinu prozora"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
msgid "Remember last Pan-n-Scan Zoom"
-msgstr "Zapamti posljednji Pan-n-Scam zoom"
+msgstr "Zapamti posljednje Pan-n-Scan uvećanje"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
@@ -366,11 +366,11 @@ msgstr "Izbornik"
msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
msgid "Audio"
-msgstr "Audio"
+msgstr "Zvuk"
msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
msgid "Subtitles"
-msgstr "Podnaslov"
+msgstr "Titlovi"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Additional settings"
@@ -382,7 +382,7 @@ msgstr "Dopusti podnaslove zvukova u \"Line 21 Decoder\""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
-msgstr "Audio"
+msgstr "Zvuk"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Volume"
@@ -425,20 +425,24 @@ msgid "time(s)"
msgstr "puta"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Način ponavljanja:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Nakon reprodukcije"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Prikaz"
+msgid "Default zoom"
+msgstr "Zadani zum"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
-msgstr "Automatski zoom:"
+msgstr "Automatsko uvećanje:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
-msgstr "Faktor za auto-zoom:"
+msgstr "Faktor automatskog smještanja:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
msgid "%"
@@ -446,19 +450,19 @@ msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Default track preference"
-msgstr "Preferirani audio zapis"
+msgstr "Zadana postavka zapisa"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
-msgstr "Podnaslovi:"
+msgstr "Titlovi:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio:"
-msgstr "Audio:"
+msgstr "Zvuk:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr "Dozvoli zaobilaženje izbora vanjskih razdjelnika"
+msgstr "Dozvoli nadilaženje izbora vanjskih razdjelnika"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
@@ -474,11 +478,7 @@ msgstr "Prijavi pinove koji se ne uspiju renderirat"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
-msgstr "Automatski učitaj audio datoteke"
-
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Koristi ugrađeni render za podnapise"
+msgstr "Automatski učitaj zvučnu datoteke"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
@@ -538,11 +538,11 @@ msgstr "Maksimalna razlučivost teksture:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
msgid "Never animate the subtitles"
-msgstr "Nikad nemoj animirati podnapise."
+msgstr "Nikad nemoj animirati titlove."
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
msgid "Render at"
-msgstr "Renderiraj pri"
+msgstr "Prikaži pri"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
msgid "% of the animation"
@@ -573,8 +573,8 @@ msgid "Warning"
msgstr "Upozorenje"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Ako bilo gdje u postavkama grafičke kartice omogućite antialiasing za sliku na cijelom ekranu i date tim postavkama veći prioritet, podnapisi neće bolje izgledati, ali će Vam zasigurno opteretiti procesor."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Ako bilo gdje u postavkama grafičke kartice omogućite antialiasing za sliku na cijelom ekranu i date tim postavkama veći prioritet, titlovi neće bolje izgledati, ali će Vam zasigurno opteretiti procesor."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -602,7 +602,7 @@ msgstr "Pokreni kao &administrator"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr "Postavi kao &zadani program"
+msgstr "Postavi kao za&dani program"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -674,22 +674,22 @@ msgstr "Prikaži oznake poglavlja u vremenskoj traci"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
-msgstr "Prikaži \"Sada svira\" informacije u poruci raspoloženja na Skypeu"
+msgstr "Prikaži \"Sada se izvodi\" informacije u poruci raspoloženja na Skypeu"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Spriječi minimiziranje playera kada zauzima cijeli ekran na sekundarnom monitoru"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Koristi značajke Windows 7 programske trake"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Koristi napredne funkcije programske trake"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Otvori iduću/prethodnu datoteku u mapi pri naredbi \"Odi naprijed/nazad\" kada je samo jedna stavka u playlisti"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Koristi vremenski tooltip:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -806,7 +806,7 @@ msgstr "Zapamti poziciju"
msgctxt "IDD_FAVADD_IDCANCEL"
msgid "Cancel"
-msgstr "Otkaži"
+msgstr "Odustani"
msgctxt "IDD_FAVADD_IDOK"
msgid "OK"
@@ -866,7 +866,7 @@ msgstr "&Podesi"
msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
msgid "&Cancel"
-msgstr "&Otkaži"
+msgstr "&Odustani"
msgctxt "IDD_PNSPRESET_DLG_IDOK"
msgid "&Save"
@@ -914,7 +914,7 @@ msgstr "Spremam..."
msgctxt "IDD_SAVE_DLG_IDCANCEL"
msgid "Cancel"
-msgstr "Otkaži"
+msgstr "Odustani"
msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
msgid "Encoding:"
@@ -974,7 +974,7 @@ msgstr "U redu"
msgctxt "IDD_ADDREGFILTER_IDCANCEL"
msgid "Cancel"
-msgstr "Otkaži"
+msgstr "Odustani"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Font"
@@ -1042,7 +1042,7 @@ msgstr "Dno"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
msgid "Position subtitles relative to the video frame"
-msgstr "Podnapise smjesti relativno u odnosu na video"
+msgstr "Titlove smjesti relativno u odnosu na video"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Colors && Transparency"
@@ -1098,7 +1098,7 @@ msgstr "Video dekoder"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
msgid "Audio decoder"
-msgstr "Audio dekoder"
+msgstr "Zvučni dekoder"
msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
msgid "Internal:"
@@ -1126,11 +1126,11 @@ msgstr "QuickTime video"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Audio Renderer"
-msgstr "Audio renderer"
+msgstr "Zvučni izvođač"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (renderless) & EVR (CP) postavke"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderless) & EVR (CP) postavke"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1173,8 +1173,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Podnapisi *"
+msgid "Subtitles"
+msgstr "Titlovi"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1189,8 +1189,12 @@ msgid "Rotation"
msgstr "Rotacija"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Eksterni filtri (poput VSFilter) mogu prikazati podnapise na svim renderima."
+msgid "Subtitle Renderer"
+msgstr "Prikazivač titlova"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Keširaj kompilirane shadere"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1208,6 +1212,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Dozvoli pristup samo s lokalnog hosta"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Omogući pregled"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Prikaži informacije o neispravnostima"
@@ -1233,16 +1241,44 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI upravljač: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Podnapisi dostupni online"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Preuzmi && Otvori"
+msgid "Download subtitles"
+msgstr "Preuzmi titlove"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Zamijeni trenutno učitane podnapise"
+msgstr "Zamijeni trenutno učitane titlove"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Preuzmi"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Osvježi"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Prekini"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Postavke"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Pošalji titlove"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Pošalji"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Prekini"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Postavke"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
@@ -1281,8 +1317,8 @@ msgid "Enable automatic update check"
msgstr "Omogući automatsku provjeru nadogradnje"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Razmak između svake provjere:"
+msgid "Check every:"
+msgstr "Provjeri svakih:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1314,7 +1350,7 @@ msgstr "Započni"
msgctxt "IDD_TUNER_SCAN_IDCANCEL"
msgid "Cancel"
-msgstr "Otkaži"
+msgstr "Odustani"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Freq. Start"
@@ -1370,7 +1406,7 @@ msgstr "Video"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC2"
msgid "Audio"
-msgstr "Audio"
+msgstr "Zvuk"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC3"
msgid "Country"
@@ -1526,15 +1562,15 @@ msgstr "Scan"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
msgid "Prefer forced and/or default subtitles tracks"
-msgstr "Preferiraj forsirana i/ili zadane podnapise"
+msgstr "Preferiraj forsirana i/ili zadane titlove"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
msgid "Prefer external subtitles over embedded subtitles"
-msgstr "Daj prednost vanjskim podnapisima"
+msgstr "Daj prednost vanjskim titlovima"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
-msgstr "Ignoriraj ugrađene podnapise"
+msgstr "Ignoriraj ugrađene titlove"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
msgid "Autoload paths"
@@ -1545,16 +1581,28 @@ msgid "Reset"
msgstr "Resetiraj"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Online baza podnapisa"
+msgid "Online search, download and upload subtitles"
+msgstr "Online pretraga, preuzimanje i slanje titlova"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Automatska pretraga i preuzimanje titlova ako nisu pronađeni lokalno"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Preferiraj titlove za osobe s oštećenim sluhom (kada je naznačeno kod davatelja titlova)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignoriraj datoteke koje sadrže bilo koje od slijedećih riječi:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Osnovni URL online baze podnapisa"
+msgid "Languages in order of preference:"
+msgstr "Jezici po željenom redu:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Test"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Automatski pošalji aktivne titlove na kraju gledanja videa"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1562,7 +1610,7 @@ msgstr "Provjera nadogradnji"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
msgid "&Download now"
-msgstr "&Preuzmi sada"
+msgstr "&Preuzmi odmah"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
msgid "Remind me &later"
@@ -1586,11 +1634,11 @@ msgstr "Ukloni"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
msgid "Add to pre-resize"
-msgstr "Dodaj prije promjene velicine"
+msgstr "Dodaj prije promjene veličine"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
msgid "Add to post-resize"
-msgstr "Dodaj poslije promjene velicine"
+msgstr "Dodaj poslije promjene veličine"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
@@ -1656,6 +1704,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Zadan"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Uređaj"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Ekskluzivni način"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Dopusti tok bitova"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Postavke"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Omogući stereo crossfeed (za slušalice)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Odrezano:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Nivo:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Bilješka"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Kako bi smanjili zvučnu distorziju, preporučljivo je držati glasnoću izvođača oko 85% kada se izvodi glasni, kodirani sadržaj sa gubitkom kvalitete."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG kvaliteta:"
@@ -1668,3 +1760,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "U redu"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Prijava greške"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Ispričavamo se, izgleda da se MPC-HC upravo srušio. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Pošaljite prijavu problema kako bi nam pomogli u dijagnozi i ispravljanju istog."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Dodatne informacije"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Email:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Email adresa nije obavezna i biti će korištena samo u slučaju da Vas netko od developera treba kontaktirati za više informacija."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Opis problema (koristite samo engleski):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Ponovo pokreni MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Zatvori MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.hr.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.hr.menus.po
index 4acbd6f32..58ba39a32 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.hr.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.hr.menus.po
@@ -1,17 +1,17 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# schop <aprcel00@fesb.hr>, 2014
-# streger <stjepan.treger@gmail.com>, 2014
+# schop <aprcel00@fesb.hr>, 2014-2015
+# streger <stjepan.treger@gmail.com>, 2014-2016
# Ico2005 <vukasinac@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-08 13:20+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-07-03 17:20+0000\n"
"Last-Translator: streger <stjepan.treger@gmail.com>\n"
-"Language-Team: Croatian (http://www.transifex.com/projects/p/mpc-hc/language/hr/)\n"
+"Language-Team: Croatian (http://www.transifex.com/mpc-hc/mpc-hc/language/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -40,7 +40,7 @@ msgstr "Otvori &uređaj..."
msgctxt "ID_FILE_OPENDIRECTORY"
msgid "Open Dir&ectory..."
-msgstr "Otvori &direktorij..."
+msgstr "Otvori dir&ektorij..."
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
@@ -48,7 +48,7 @@ msgstr "O&tvori disk"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
-msgstr "Zadnje &datoteke"
+msgstr "Prijašnje &datoteke"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
@@ -60,43 +60,39 @@ msgstr "&Spremi kao kopiju..."
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
-msgstr "Spremi &sliku..."
+msgstr "Spremi sli&ku..."
msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
-msgstr "Spremi &sličice..."
-
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Učitaj podnapise..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Spremi p&odnapise..."
+msgstr "Spremi sliči&ce..."
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Baza pod&napisa"
+msgid "S&ubtitles"
+msgstr "Titlovi"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Traži..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Učitaj tit&love..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&Pošalji..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Spremi titlo&ve"
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Preuzmi..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Preuzmi titlove..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Pošalji titlove..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
-msgstr "S&vojstva"
+msgstr "Svo&jstva"
msgctxt "ID_FILE_EXIT"
msgid "E&xit"
-msgstr "I&zlaz"
+msgstr "&Izlaz"
msgctxt "POPUP"
msgid "&View"
@@ -128,15 +124,15 @@ msgstr "St&atus"
msgctxt "ID_VIEW_SUBRESYNC"
msgid "Su&bresync"
-msgstr "Resinkronizacija podnapisa"
+msgstr "Resinkronizacija titlova"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
-msgstr "Pla&ylist"
+msgstr "&Lista izvođenja"
msgctxt "ID_VIEW_CAPTURE"
msgid "Captu&re"
-msgstr "&snimak"
+msgstr "&Snimak"
msgctxt "ID_VIEW_NAVIGATION"
msgid "Na&vigation"
@@ -152,7 +148,7 @@ msgstr "&Profili"
msgctxt "ID_VIEW_PRESETS_MINIMAL"
msgid "&Minimal"
-msgstr "&Najmanje"
+msgstr "&Minimalno"
msgctxt "ID_VIEW_PRESETS_COMPACT"
msgid "&Compact"
@@ -192,19 +188,23 @@ msgstr "Auto podešavanje (&Samo veliko)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "P&ostavke renderera"
+msgstr "P&ostavke prikazivača"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
-msgstr "&Test razdvajanja"
+msgstr "&Test kidanja"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Prikaži statistiku"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Status ekrana"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Prikaži trenutno vr&ijeme"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Preostalo vrijeme"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Prikaži naziv &datoteke"
msgctxt "POPUP"
msgid "&Output Range"
@@ -284,7 +284,7 @@ msgstr "SDTV &PAL"
msgctxt "POPUP"
msgid "Ambient &Light"
-msgstr "Svjetlo &ambijenta"
+msgstr "Ambijentalno svjet&lo"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
@@ -312,7 +312,7 @@ msgstr "&Relativno kolormetrično"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
-msgstr "&Zasićenje"
+msgstr "Za&sićenje"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
@@ -364,11 +364,11 @@ msgstr "R&esetiranje"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "Učitaj &početne postavke renderiranja"
+msgstr "Učitaj za&dane postavke prikazivanja"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "Učitaj &optimalne postavke renderiranja"
+msgstr "Učitaj &optimalne postavke prikazivanja"
msgctxt "POPUP"
msgid "Video &Frame"
@@ -406,17 +406,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Dotakni prozor &izvana"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Zadrži omjer"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Premosti &omjer"
+msgid "&Aspect Ratio"
+msgstr "&Omjer"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Zadano"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Zadano (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -438,13 +434,17 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Pretpostavi kvadratne piksele (&SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "&Ispravi razliku omjera slike na monitoru/radnoj površini"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
-msgstr "Raz&vlač&&enje slike"
+msgstr "Razvlače&nje slike"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
@@ -531,8 +531,24 @@ msgid "&Stop"
msgstr "&Stop"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
-msgstr "K&orak okvira"
+msgid "Fra&me Step"
+msgstr "Slijedeći &kadar"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Ponovi"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Zauv&ijek"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Datoteka"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Lista izvođenja"
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
@@ -555,16 +571,16 @@ msgid "S&haders"
msgstr "S&haderi"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio"
+msgid "&Audio Track"
+msgstr "&Audio zapis"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Pod&napisi"
+msgid "Su&btitle Track"
+msgstr "Zapis &titlova"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "&Video traka"
+msgid "Vide&o Track"
+msgstr "&Video zapis"
msgctxt "POPUP"
msgid "&Volume"
@@ -586,7 +602,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Na&kon reprodukcije"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Ne čini niš&ta"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Reproduciraj slijedeću datoteku iz mape"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Isključiti &ekran"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Zatvori program"
@@ -604,15 +632,11 @@ msgstr "Isključi &računalo"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
-msgstr "Odjavi &korisnika"
+msgstr "&Odjavi korisnika"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "&Zaključaj korisnika"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Isključiti &ekran"
+msgstr "Zak&ljučaj korisnika"
msgctxt "POPUP"
msgid "&Navigate"
@@ -640,7 +664,7 @@ msgstr "&Glavni izbornik"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
-msgstr "&Izbor podnapisa"
+msgstr "&Izbor titlova"
msgctxt "ID_NAVIGATE_AUDIOMENU"
msgid "&Audio Menu"
@@ -664,15 +688,15 @@ msgstr "&Pomoć"
msgctxt "ID_HELP_HOMEPAGE"
msgid "&Home Page"
-msgstr "&Početna stranica"
+msgstr "Poče&tna stranica"
msgctxt "ID_HELP_CHECKFORUPDATE"
msgid "Check for &updates"
-msgstr "Provjeri &ažuriranja"
+msgstr "Provjeri až&uriranja"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
-msgstr "&Naredbe komandne linije"
+msgstr "Naredbe &komandne linije"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
@@ -684,5 +708,5 @@ msgstr "&Doniraj"
msgctxt "ID_HELP_ABOUT"
msgid "&About..."
-msgstr "&O programu..."
+msgstr "O progr&amu..."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.hr.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.hr.strings.po
index d24c2d9a5..12977fb0f 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.hr.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.hr.strings.po
@@ -1,19 +1,20 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# schop <aprcel00@fesb.hr>, 2014
+# schop <aprcel00@fesb.hr>, 2014-2016
# iivana24 <iivana24@gmail.com>, 2014
-# streger <stjepan.treger@gmail.com>, 2014
-# vBm <the.vbm@gmail.com>, 2014
+# streger <stjepan.treger@gmail.com>, 2014-2016
+# Goran Džaferi <the.vbm@gmail.com>, 2014
+# Underground78, 2014
# Ico2005 <vukasinac@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-01 18:03+0000\n"
-"Last-Translator: schop <aprcel00@fesb.hr>\n"
-"Language-Team: Croatian (http://www.transifex.com/projects/p/mpc-hc/language/hr/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Croatian (http://www.transifex.com/mpc-hc/mpc-hc/language/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -30,11 +31,11 @@ msgstr "Video"
msgctxt "IDS_INFOBAR_AUDIO"
msgid "Audio"
-msgstr "Audio"
+msgstr "Zvuk"
msgctxt "IDS_INFOBAR_SUBTITLES"
msgid "Subtitles"
-msgstr "Podnapisi"
+msgstr "Titlovi"
msgctxt "IDS_INFOBAR_CHAPTER"
msgid "Chapter"
@@ -46,7 +47,7 @@ msgstr "Dovršavanje..."
msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
msgid "Play Video"
-msgstr "Pokreni Video"
+msgstr "Pokreni video"
msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
msgid "Play Music"
@@ -54,19 +55,27 @@ msgstr "Pokreni glazbu"
msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
msgid "Play Audio CD"
-msgstr "Pokreni Audio CD"
+msgstr "Pokreni zvukovni CD"
msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
msgid "Play DVD Movie"
-msgstr "Pokreni DVD Film"
+msgstr "Pokreni DVD film"
msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Svojstva"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Datoteka"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
-msgstr "&Standardni stil"
+msgstr "Stan&dardni stil"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Lista izvođenja"
msgctxt "IDS_FAVFILES"
msgid "Files"
@@ -74,7 +83,7 @@ msgstr "Datoteke"
msgctxt "IDS_FAVDVDS"
msgid "DVDs"
-msgstr "DVDovi"
+msgstr "DVD-ovi"
msgctxt "IDS_INFOBAR_CHANNEL"
msgid "Channel"
@@ -94,11 +103,11 @@ msgstr "prosjek: %d ms, odstupanje: %d ms"
msgctxt "IDS_STATSBAR_JITTER"
msgid "Jitter"
-msgstr "Jitter"
+msgstr "Treperenje"
msgctxt "IDS_STATSBAR_BITRATE"
msgid "Bitrate"
-msgstr "Bitrate"
+msgstr "Brzina prijenosa"
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
@@ -106,7 +115,7 @@ msgstr "(prosječno/trenutno)"
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
-msgstr "signal"
+msgstr "Signal"
msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
msgid "Strength: %d dB, Quality: %ld%%"
@@ -118,7 +127,27 @@ msgstr "Stilovi"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "Ako nije zadano odredište renderinga, SSA/ASS podnapisi će biti renderirani relativno u odnosu na video okvir dok će svi ostali podnapisi biti rederirani relativno u odnosu na prozor."
+msgstr "Ako nije zadano odredište prikazivanja, SSA/ASS titlovi će biti prikazani relativno u odnosu na video okvir dok će svi ostali titlovi biti prikazani relativno u odnosu na prozor."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Način ponavljanja: Lista izvođenja"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Način ponavljanja: Datoteka"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Ponavljaj zauvijek: Uključeno"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Ponavljaj zauvijek: Isključeno"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Ponavljaj zauvijek"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
@@ -202,7 +231,7 @@ msgstr "Navigacijska traka"
msgctxt "IDS_SUBRESYNC_CAPTION"
msgid "Subresync"
-msgstr "Resink. podnapisa"
+msgstr "Resink. titlova"
msgctxt "IDS_SUBRESYNC_CLN_TIME"
msgid "Time"
@@ -242,11 +271,11 @@ msgstr "Font"
msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
msgid "Failed to render some of the pins of the DVD Navigator filter"
-msgstr "Nije uspjelo renderiranje nekih pinova DVD-Navigacijskog filtra."
+msgstr "Neuspješno prikazivanje nekih znački DVD-navigacijskog filtra."
msgctxt "IDS_DVD_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for DVD playback"
-msgstr "Bezuspješno pronalaženje potrebnih sučelja koji omogućuju izvođenje DVDa"
+msgstr "Bezuspješno pronalaženje potrebnih sučelja koji omogućuju izvođenje DVD-a"
msgctxt "IDS_CAPTURE_LIVE"
msgid "Live"
@@ -266,7 +295,7 @@ msgstr "Ne može se otvoriti uređaj za snimanje."
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
-msgstr "Ne može se otvoriti, nevaljali ulazni parametri"
+msgstr "Ne može se otvoriti, krivi ulazni parametri"
msgctxt "IDS_EDIT_LIST_EDITOR"
msgid "Edit List Editor"
@@ -322,19 +351,19 @@ msgstr "Efekt"
msgctxt "IDS_PLAYLIST_CAPTION"
msgid "Playlist"
-msgstr "Playlista"
+msgstr "Lista izvođenja"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
msgstr "Uklj./Isklj."
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Od fps"
+msgid "From (FPS)"
+msgstr "Od (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Do fps"
+msgid "To (FPS)"
+msgstr "Do (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -362,7 +391,7 @@ msgstr "Ciljani okvir za obavijesni graf nije moguće podesiti"
msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
msgid "Failed to render all pins of the DVD Navigator filter"
-msgstr "Nije uspjelo renderiranje nijednog pina od DVD-navigacijskog filtra."
+msgstr "Neuspješno prikazivanje nijedne značke od DVD-navigacijskog filtra."
msgctxt "IDS_PLAYLIST_OPEN"
msgid "&Open"
@@ -422,11 +451,11 @@ msgstr "&Resetiraj"
msgctxt "IDS_MPLAYERC_104"
msgid "Subtitle Delay -"
-msgstr "Kašnjenje podnapisa -"
+msgstr "Kašnjenje titlova -"
msgctxt "IDS_MPLAYERC_105"
msgid "Subtitle Delay +"
-msgstr "Kašnjenje podnapisa +"
+msgstr "Kašnjenje titlova +"
msgctxt "IDS_FILE_SAVE_THUMBNAILS"
msgid "Save thumbnails"
@@ -438,7 +467,7 @@ msgstr "Reprodukcija"
msgctxt "IDD_PPAGEPLAYER"
msgid "Player"
-msgstr "Player"
+msgstr "Izvođač"
msgctxt "IDD_PPAGEDVD"
msgid "Playback::DVD/OGM"
@@ -446,11 +475,11 @@ msgstr "Reprodukcija::DVD/OGM"
msgctxt "IDD_PPAGESUBTITLES"
msgid "Subtitles"
-msgstr "Podnapisi"
+msgstr "Titlovi"
msgctxt "IDD_PPAGEFORMATS"
msgid "Player::Formats"
-msgstr "Player::Formati"
+msgstr "Izvođač::Formati"
msgctxt "IDD_PPAGETWEAKS"
msgid "Tweaks"
@@ -458,7 +487,7 @@ msgstr "Optimizacije"
msgctxt "IDD_PPAGEAUDIOSWITCHER"
msgid "Internal Filters::Audio Switcher"
-msgstr "Interni filtri::Audio Switcher"
+msgstr "Interni filtri::Zvukovni prebacivač"
msgctxt "IDD_PPAGEEXTERNALFILTERS"
msgid "External Filters"
@@ -466,11 +495,39 @@ msgstr "Eksterni filtri"
msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
-msgstr "Playback::Shaders"
+msgstr "Reprodukcija::Shaderi"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Izvori"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Razne postavke"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Reprodukcija::Uhvati"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Reprodukcija::Postavke sinkronizacijskog prikazivača"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Reprodukcija::Cijeli ekran"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Interni filtri::Izvođač zvuka"
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
-msgstr "Audio switcher"
+msgstr "Zvukovni prebacivač"
msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
msgid "New version of the icon library"
@@ -486,47 +543,39 @@ msgstr "Ovo će popraviti neispravan prikaz ikona nakon nadogradnje biblioteke i
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
-msgstr "Stari video render"
+msgstr "Stari video prikazivač"
msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
-msgstr "Overlay Mixer Renderer"
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (windowed)"
+msgstr "Overlay Mixer prikazivač"
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
-msgstr "Video Mixing Renderer 9 (windowed)"
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderless)"
+msgstr "Video Mixing prikazivač 9 (u prozoru)"
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
-msgstr "Video Mixing Renderer 9 (renderless)"
+msgstr "Video Mixing prikazivač 9 (bez-prikazivanja)"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
-msgstr "Enhanced Video Renderer"
+msgstr "Poboljšani video prikazivač"
msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
msgid "Enhanced Video Renderer (custom presenter)"
-msgstr "Enhanced Video Renderer (custom presenter)"
+msgstr "Poboljšani video prikazivač (prilagođeni prikazivač)"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
-msgstr "Haali Video Renderer"
+msgstr "Haali Video prikazivač"
msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
msgid "Null (anything)"
-msgstr "Null (anything)"
+msgstr "Null (nešto)"
msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr "Null (uncompressed)"
+msgstr "Null (nekomprimirano)"
msgctxt "IDS_PPAGE_OUTPUT_MADVR"
msgid "madVR"
@@ -534,11 +583,11 @@ msgstr "madVR"
msgctxt "IDD_PPAGEACCELTBL"
msgid "Player::Keys"
-msgstr "Player::Tipke"
+msgstr "Izvođač::Tipke"
msgctxt "IDD_PPAGESUBSTYLE"
msgid "Subtitles::Default Style"
-msgstr "Podnapisi::Zadani stil"
+msgstr "Titlovi::Zadani stil"
msgctxt "IDD_PPAGEINTERNALFILTERS"
msgid "Internal Filters"
@@ -546,43 +595,15 @@ msgstr "Interni filtri"
msgctxt "IDD_PPAGELOGO"
msgid "Player::Logo"
-msgstr "Player::Logo"
+msgstr "Izvođač::Logo"
msgctxt "IDD_PPAGEOUTPUT"
msgid "Playback::Output"
-msgstr "Prikaz::Izlaz"
+msgstr "Reprodukcija::Izlaz"
msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
-msgstr "Player::Web sučelje"
-
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Podnapisi::Baza podataka"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Izvori"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Razne postavke"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Reprodukcija::Uhvati"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Reprodukcija::Postavke sinkronizacijskog rendera"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Reprodukcija::Fullscreen"
+msgstr "Izvođač::Web sučelje"
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
@@ -590,143 +611,115 @@ msgstr "Detalji"
msgctxt "IDD_FILEPROPCLIP"
msgid "Clip"
-msgstr "Clip"
+msgstr "Isječak"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
-msgstr "Zadani video render filtri za DirectShow. Ostali video renderi, ako se ne mogu učitati, će biti postavljeni na ovaj. Na Windows XP je ovo ekvivalent VMR-7 (windowed)."
+msgstr "Zadani video filtri prikazivanja za DirectShow. Ostali video prikazivači, ako se ne mogu učitati, će biti postavljeni na ovaj. Na Windows XP je ovo ekvivalent VMR-7 (u prozoru)."
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "Zadani renderer za Windows 9x/ME/2k. Ovisno o vidljivosti video prozora i mogućnostima vaše video kartice će koristiti GDI, DirectDraw ili Overlay-okvir."
+msgstr "Zadani prikazivač za Windows 9x/ME/2k. Ovisno o vidljivosti video prozora i mogućnostima vaše video kartice će koristiti GDI, DirectDraw ili Overlay-okvir."
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
+msgstr "Uvijek prikazuje u gornjem sloju. Općenito samo su YUV formati dozvoljeni ali su prikazani direktno bez konverzije boje u RGB. Ovo je najbrža metoda prikazivanja od svih i jedina kojom možete biti sigurni da je prikaz na cijelom ekranu zrcaljen sa aktiviranje tv-izlaza."
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Dostupno samo ako imate DirectX 9 instaliran. Vrlo stabilno ali nikada neće koristiti prikaz u gornjem sloju i zbog toga može biti sporiji nego Overlay mikser."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
-msgstr "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
+msgstr "Isti kao VMR-9 (u prozoru) ali sa Allocator-Presenter dodatkom MPC-HC za titlove. Prikaz u gornjem sloju zrcaljenjem će MOŽDA raditi. \"True Color\" sustav boja radne površine preporučljiv. Preporučljivo za Windows XP."
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
-msgstr "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
+msgstr "Isti kao VMR-9 (bez-prikazivanja) ali koristi pravi dvoprolazni bikubni mjenjač veličina."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Spaja se na bilo medijski tip sličan videu i šalje dolazeće uzorke nigdje. Koristite ga kad vam ne treba video prikaz i kad želite smanjiti upotrebu CPU-a."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
-msgstr "Same as the normal Null renderer, but this will only connect to uncompressed types."
+msgstr "Isti kao normalni Null prikazivač ali ovaj se samo spaja na nekomprimirane vrste."
msgctxt "IDC_DSEVR"
msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
-msgstr "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
+msgstr "Dostupno samo za Vista i noviji ili na XP-u sa barem .NET Framework 3.5 instaliranim."
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
+msgstr "Isti kao EVR ali sa Allocator-Presenter MPC-HC za titlove i postprocesiranje. Preporučljivo za Windows Vista ili noviji. "
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
-msgstr "High-quality renderer, requires a GPU that supports D3D9 or later."
+msgstr "Prikazivač visoke kvalitete i zahtjeva GPU koji podržava D3D9 ili noviji."
msgctxt "IDC_DSSYNC"
msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
-msgstr "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
+msgstr "Isti kao EVR (CP) ali nudi nekoliko opcija za sinkroniziranje brzine prikaza slike sa brzinom osvježavanja ekrana kako bi se eliminirale preskočene ili duple video slike."
msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
-
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
+msgstr "Prikazivač Real. SMIL skripte će raditi ali interakcija nije vjerojatna. Koristi DirectDraw i radi u Overlay kad može."
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Izlaz Real prikazan sa DX9 temeljenom na Allocator-Presenter VMR-9 (bez-prikazivanja)."
msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
-msgstr "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
-
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
+msgstr "QuickTime prikazivač. Postaje sporiji kad se poveća video ili kad je prekriven sa drugim prozorom. Kada Overlay nije dostupan vraća se na GDI."
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Izlaz QuickTime prikazan sa DX9 temeljenom na Allocator-Presenter VMR-9 (bez-prikazivanja)."
msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
-msgstr "Video surface will be allocated as a regular offscreen surface."
-
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Renderer is broken, do not use."
+msgstr "Video površina će biti dodijeljena kao normalna površina van ekrana."
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
-msgstr "Sync Renderer"
-
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - prijavljuje bug"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC se srusio. Ova verzija nema mogucnost automatskog slanja informacija.\nAko zelite prijavit ovaj bug, prvo iskusajte sluzbenu verziju.\n\nZelite li posjetiti stranicu za download?"
+msgstr "Sync prikazivač"
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
-msgstr "regularna cista povrsina"
+msgstr "Regularna čista površina izvan ekrana"
msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
msgid "2D surfaces"
-msgstr "2D povrsina"
+msgstr "2D površine"
msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
msgid "3D surfaces (recommended)"
-msgstr "3D povrsine (preporuceno)"
+msgstr "3D površine (preporučeno)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
-msgstr "Najblizi susjed"
+msgstr "Najbliži susjed"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
msgid "Bilinear"
-msgstr "Dvije linije"
+msgstr "Bilinearno "
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
msgid "Bilinear (PS 2.0)"
-msgstr "Dvije linije (PS 2,0)"
+msgstr "Bilinearno (PS 2,0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
msgid "Bicubic A=-0.60 (PS 2.0)"
-msgstr "Bicubic A= 0,6 (PS 2,0)"
+msgstr "Bikubično A=-0.60 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
msgid "Bicubic A=-0.75 (PS 2.0)"
-msgstr "Bicubic A=-0.75 (PS 2.0)"
+msgstr "Bikubično A=-0.75 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
msgid "Bicubic A=-1.00 (PS 2.0)"
-msgstr "Bicubic A=-1.00 (PS 2.0)"
+msgstr "Bikubično A=-1.00 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
msgid "**unavailable**"
@@ -734,39 +727,43 @@ msgstr "**nedostupno**"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
msgid "The selected renderer is not installed."
-msgstr "The selected renderer is not installed."
+msgstr "Odabrani prikazivač nije instaliran."
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
-msgstr "Null (anything)"
+msgstr "Null (bilo što)"
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr "Null (uncompressed)"
+msgstr "Null (nekomprimirano)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Interni izvođač zvuka"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
-msgstr "Ime"
+msgstr "Naziv"
msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
msgid "MIME Type"
-msgstr "MIME Type"
+msgstr "MIME tip"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr "n order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
+msgstr "Kako bi vidjeli ugrađeni resurs u vašem internet pregledniku morate omogućiti web sučelje.\n\nKoristite \"Spremi kao\" gumb ako samo spremate informaciju."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Skini podnapise"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Preuzmi titlove..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Pošalji titlove..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
-msgstr "Delay (ms):"
+msgstr "Kašnjenje (ms):"
msgctxt "IDS_SPEEDSTEP_AUTO"
msgid "Auto"
@@ -774,7 +771,7 @@ msgstr "Auto"
msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
msgid "There are no customized keys to export."
-msgstr "There are no customized keys to export."
+msgstr "Ne postoje prilagođene tipke za izvoz."
msgctxt "IDS_RFS_NO_FILES"
msgid "No media files found in the archive"
@@ -782,7 +779,7 @@ msgstr "Nema medijskih datoteka u arhivi"
msgctxt "IDS_RFS_COMPRESSED"
msgid "Compressed files are not supported"
-msgstr "Kompresirane datoteke nisu podržane"
+msgstr "Komprimirane datoteke nisu podržane"
msgctxt "IDS_RFS_ENCRYPTED"
msgid "Encrypted files are not supported"
@@ -790,27 +787,27 @@ msgstr "Kriptirane datoteke nisu podržane"
msgctxt "IDS_RFS_MISSING_VOLS"
msgid "Couldn't find all archive volumes"
-msgstr "Couldn't find all archive volumes"
+msgstr "Nemoguće pronaći svu arhivsku građu."
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Video površina će biti dodijeljena kao tekstura ali će druge funkcije biti korištene za kopiranje i razvlačenje na pozadinski spremnik. Zahtjeva video karticu koja može dodijeliti 32-bitni RGBA, NPOT veličinu teksture i rezoluciju barem veličine videa."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
-msgstr "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
+msgstr "Video površina će biti dodijeljena kao tekstura i iscrtana kao dva trokuta u 3D-u. Uključivanje izbjegavanja nazubljenosti u postavkama prikaza može imati loš utjecaj na brzinu prikazivanja."
msgctxt "IDC_DX9RESIZER_COMBO"
msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
-msgstr "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
+msgstr "Ako nema podrške za Pixel Shader 2.0 automatski je korišten jednostavni bilinearni."
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
-msgstr "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
+msgstr "Stavlja VMR-9 (bez-prikazivanja) u mikser način, ovo znači da će raditi većina kontrola na stranici svojstva, a koristiti će odvojenu radničku nit za prikazujuće slike."
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
-msgstr "Poboljšava performanse na račun kompatibilnosti nekih rendera."
+msgstr "Poboljšava performanse na račun kompatibilnosti nekih prikazivača."
msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
msgid "Reduces tearing but prevents the toolbar from being shown."
@@ -818,35 +815,47 @@ msgstr "Smanjuje 'tearing' ali sprječava da se prikažu upravljački elementi."
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
-msgstr "Reduces tearing by bypassing the default VSync built into D3D."
+msgstr "Smanjuje kidanje zaobilazeći zadani VSync ugrađen u D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Pretraga prijemnika"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Titlovi nisu učitani ili nepodržani od prikazivača."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Sprema kompilirane shadere u lokalnu AppData mapu za ubrzano pokretanje."
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
-msgstr "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
+msgstr "Otvorite VTS_xx_0.ifo kako bi pokrenuli VTS_xx_0.vob datoteke u jednom komadu."
msgctxt "IDS_SRC_RFS"
msgid "Based on RARFileSource, doesn't support compressed files"
-msgstr "Based on RARFileSource, doesn't support compressed files"
+msgstr "Temeljeno na RAR datotečnom izvoru, ne podržava komprimirane datoteke."
msgctxt "IDS_INTERNAL_LAVF"
msgid "Uses LAV Filters"
-msgstr "Uses LAV Filters"
+msgstr "Koristi LAV Filters"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\n\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
+msgstr "Koristi LAV Filters. Onemogućeno po zadanoj postavci zato što su Microsoft filteri uobičajeno stabilniji za te formate.\nAko odaberete ugrađene filtere omogućite ih i za izvor i dekodiranje kako bi imali bolje iskustvo reprodukcije."
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
-msgstr "Toggle Navigation Bar"
+msgstr "Namjestiti navigacijsku traku"
msgctxt "IDS_AG_VSYNCACCURATE"
msgid "Accurate VSync"
-msgstr "Accurate VSync"
+msgstr "Precizan VSync"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr "Ako render cilj nije definiran, nasljeđuju se postavke od standardnog stila."
+msgstr "Ako cilj prikazivanja nije definiran, nasljeđuju se postavke od standardnog stila."
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
@@ -854,15 +863,15 @@ msgstr "Zabraniti animaciju titlova. Omogućavanje ove opcije smanjiti će upotr
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr "Povećavanje broja spremljenih podslika trebalo bi općenito poboljšati performanse renderiranja na račun povećanog korištenja video RAM-a na GPU."
+msgstr "Povećavanje broja spremljenih podslika trebalo bi općenito poboljšati performanse prikazivanja na račun povećanog korištenja video RAM-a na GPU."
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
-msgstr "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
+msgstr "Nakon klikanja ovog gumba provjereno stanje grupe formata će se odraziti na trenutnu datotečnu povezanost za MPC-HC. Novo dodani nastavak će uobičajeno biti zasivljen, nemojte zaboraviti provjeriti još jednom prije zatvaranja ovog dijaloškog okvira!"
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr "Isključivanjem ove opcije će se spriječiti treptanje podnapisa ali može prouzročit da video render preskoči nekoliko slika."
+msgstr "Isključivanjem ove opcije će se spriječiti treptanje titlova ali može prouzročiti da video prikazivač preskoči nekoliko slika."
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -874,7 +883,7 @@ msgstr "Pauza\nPauza"
msgctxt "ID_PLAY_STOP"
msgid "Stop\nStop"
-msgstr "Stop\nStop"
+msgstr "Zaustavi\nZaustavi"
msgctxt "ID_PLAY_FRAMESTEP"
msgid "Step\nStep"
@@ -890,15 +899,15 @@ msgstr "Povećaj brzinu\nPovećaj brzinu"
msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
-msgstr "Tišina"
+msgstr "Isključi zvuk"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
-msgstr "Ukljući zvuk"
+msgstr "Uključi zvuk"
msgctxt "ID_VOLUME_MUTE_DISABLED"
msgid "No audio"
-msgstr "Nema zvuka"
+msgstr "Bez zvuka"
msgctxt "ID_NAVIGATE_SKIPBACK"
msgid "Skip back\nSkip back"
@@ -914,11 +923,11 @@ msgstr "&Original"
msgctxt "IDS_SUBRESYNC_CURRENT"
msgid "&Current"
-msgstr "&Current"
+msgstr "&Trenutno"
msgctxt "IDS_SUBRESYNC_EDIT"
msgid "&Edit"
-msgstr "&Edit"
+msgstr "Ur&edi"
msgctxt "IDS_SUBRESYNC_YES"
msgid "&Yes"
@@ -942,47 +951,47 @@ msgstr "Opcije"
msgctxt "IDS_SHADERS_SELECT"
msgid "&Select Shaders..."
-msgstr "&Select Shaders..."
+msgstr "Odaberi &shadere..."
msgctxt "IDS_SHADERS_DEBUG"
msgid "&Debug Shaders..."
-msgstr "&Debug Shaders..."
+msgstr "Pronađi grešku sha&dera..."
msgctxt "IDS_FAVORITES_ADD"
msgid "&Add to Favorites..."
-msgstr "&Add to Favorites..."
+msgstr "Dod&aj u omiljeno..."
msgctxt "IDS_FAVORITES_ORGANIZE"
msgid "&Organize Favorites..."
-msgstr "&Organize Favorites..."
+msgstr "&Organiziraj omiljeno..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "Naizmjenično"
+msgid "Sh&uffle"
+msgstr "Nai&zmjenično"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Otvori lokaciju datoteke"
+msgid "Ope&n file location"
+msgstr "Otvori &lokaciju datoteke"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
-msgstr "Zatvaram..."
+msgstr "Zatvaranje..."
msgctxt "IDS_CONTROLS_PLAYING"
msgid "Playing"
-msgstr "Pokrećem"
+msgstr "Pokretanje"
msgctxt "IDS_CONTROLS_PAUSED"
msgid "Paused"
-msgstr "Pauziram"
+msgstr "Pauzirano"
msgctxt "IDS_AG_EDL_NEW_CLIP"
msgid "EDL new clip"
-msgstr "EDL novi klip"
+msgstr "EDL novi isječak"
msgctxt "IDS_RECENT_FILES_CLEAR"
msgid "&Clear list"
-msgstr "&Očisti listu"
+msgstr "Oči&sti listu"
msgctxt "IDS_RECENT_FILES_QUESTION"
msgid "Are you sure that you want to delete recent files list?"
@@ -994,75 +1003,75 @@ msgstr "EDL snimi"
msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time Correction"
-msgstr "Enable Frame Time Correction"
+msgstr "Omogući ispravku vremena slike"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
-msgstr "Toggle EDL window"
+msgstr "Namjestiti EDL prozor"
msgctxt "IDS_AG_EDL_IN"
msgid "EDL set In"
-msgstr "EDL set In"
+msgstr "EDL namješten na"
msgctxt "IDS_AG_EDL_OUT"
msgid "EDL set Out"
-msgstr "EDL set In"
+msgstr "EDL namješten iz"
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
-msgstr "PnS Rotate X-"
+msgstr "PnS rotacija X-"
msgctxt "IDS_AG_PNS_ROTATEY_P"
msgid "PnS Rotate Y+"
-msgstr "PnS Rotate Y+"
+msgstr "PnS rotacija Y+"
msgctxt "IDS_AG_PNS_ROTATEY_M"
msgid "PnS Rotate Y-"
-msgstr "PnS Rotate Y-"
+msgstr "PnS rotacija Y-"
msgctxt "IDS_AG_PNS_ROTATEZ_P"
msgid "PnS Rotate Z+"
-msgstr "PnS Rotate Z+"
+msgstr "PnS rotacija Z+"
msgctxt "IDS_AG_PNS_ROTATEZ_M"
msgid "PnS Rotate Z-"
-msgstr "PnS Rotate Z-"
+msgstr "PnS rotacija Z-"
msgctxt "IDS_AG_TEARING_TEST"
msgid "Tearing Test"
-msgstr "Tearing Test"
+msgstr "Test kidanja"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
-msgstr "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Skaliraj na 16:9 TV,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_WIDESCREEN"
msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zumiraj na široki zaslon,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_ULTRAWIDE"
msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zumiraj na ultra široki ekran,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
+msgstr "Sa&krij u cijelom zaslonu"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
-msgstr "Stopped"
+msgstr "Zaustavljeno"
msgctxt "IDS_CONTROLS_BUFFERING"
msgid "Buffering... (%d%%)"
-msgstr "Učitava... (%d%%)"
+msgstr "Učitavanje... (%d%%)"
msgctxt "IDS_CONTROLS_CAPTURING"
msgid "Capturing..."
-msgstr "Capturing..."
+msgstr "Snimanje..."
msgctxt "IDS_CONTROLS_OPENING"
msgid "Opening..."
-msgstr "Otvaram..."
+msgstr "Otvaranje..."
msgctxt "IDS_CONTROLS_CLOSED"
msgid "Closed"
@@ -1070,23 +1079,23 @@ msgstr "Zatvaranje"
msgctxt "IDS_SUBTITLES_OPTIONS"
msgid "&Options..."
-msgstr "Opcije"
+msgstr "&Opcije..."
msgctxt "IDS_SUBTITLES_STYLES"
msgid "&Styles..."
-msgstr "&Styles..."
+msgstr "&Stilovi..."
msgctxt "IDS_SUBTITLES_RELOAD"
msgid "&Reload"
-msgstr "&Reload"
+msgstr "Ponovno pok&reni"
msgctxt "IDS_SUBTITLES_ENABLE"
msgid "&Enable"
-msgstr "Omogući"
+msgstr "&Omogući"
msgctxt "IDS_PANSCAN_EDIT"
msgid "&Edit..."
-msgstr "&Edit..."
+msgstr "Ur&edi..."
msgctxt "IDS_INFOBAR_TITLE"
msgid "Title"
@@ -1110,7 +1119,7 @@ msgstr "Opis"
msgctxt "IDS_INFOBAR_DOMAIN"
msgid "Domain"
-msgstr "Domain"
+msgstr "Domena"
msgctxt "IDS_AG_CLOSE"
msgid "Close"
@@ -1118,27 +1127,27 @@ msgstr "Zatvori"
msgctxt "IDS_AG_NONE"
msgid "None"
-msgstr "None"
+msgstr "Ništa"
msgctxt "IDS_AG_COMMAND"
msgid "Command"
-msgstr "Komanda"
+msgstr "Naredba"
msgctxt "IDS_AG_KEY"
msgid "Key"
-msgstr "Key"
+msgstr "Tipka"
msgctxt "IDS_AG_MOUSE"
msgid "Mouse Windowed"
-msgstr "Mouse Windowed"
+msgstr "Miš u prozoru"
msgctxt "IDS_AG_MOUSE_FS"
msgid "Mouse Fullscreen"
-msgstr "Mouse Fullscreen"
+msgstr "Miš u cijelom zaslonu"
msgctxt "IDS_AG_APP_COMMAND"
msgid "App Command"
-msgstr "App Command"
+msgstr "Naredbe aplikacije"
msgctxt "IDS_AG_MEDIAFILES"
msgid "Media files (all types)"
@@ -1150,7 +1159,7 @@ msgstr "Sve datoteke (*.*)|*.*|"
msgctxt "IDS_AG_AUDIOFILES"
msgid "Audio files (all types)"
-msgstr "Audio datoteke (sve datoteke)"
+msgstr "Zvukovne datoteke (sve vrste)"
msgctxt "IDS_AG_NOT_KNOWN"
msgid "Not known"
@@ -1178,15 +1187,15 @@ msgstr "Post- i pre-size-shaderi se ne mogu postaviti"
msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
msgid "Shaders are recompiled automatically when the corresponding files are modified."
-msgstr "Shaderi se iznova kompajliraju kada se odgovarajuće datoteke promijene"
+msgstr "Shaderi se iznova kompajliraju kada se odgovarajuće datoteke promijene."
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
-msgstr "Ne može se učitati %s, piksel shaderi neće raditi."
+msgstr "Nemoguće učitati %s, piksel shaderi neće raditi."
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
-msgstr "Ne može se pronaći odgovarajuća ulazna točka funkcije u %s, piksel shaderi neće raditi."
+msgstr "Nemoguće pronaći odgovarajuća ulazna točka funkcije u %s, piksel shaderi neće raditi."
msgctxt "IDS_OSD_SHADERS_PRESET"
msgid "Shader preset: %s"
@@ -1202,7 +1211,7 @@ msgstr "Prethodni shader profil"
msgctxt "IDS_STRING_COLON"
msgid "%s:"
-msgstr "%s"
+msgstr "%s:"
msgctxt "IDS_RECORD_START"
msgid "Record"
@@ -1210,7 +1219,7 @@ msgstr "Snimi"
msgctxt "IDS_RECORD_STOP"
msgid "Stop"
-msgstr "stani"
+msgstr "Zaustavi"
msgctxt "IDS_BALANCE"
msgid "L = R"
@@ -1233,8 +1242,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "Dodaj mapu sa sadržajem"
+msgid "Add containing &folder"
+msgstr "Dodaj &mapu sa sadržajem"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1254,7 +1263,7 @@ msgstr "&Kopiraj filtere u međuspremnik"
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
-msgstr "Unesite postavke server"
+msgstr "Unesite postavke servera"
msgctxt "IDS_CREDENTIALS_CONNECT"
msgid "Enter your credentials to connect"
@@ -1270,19 +1279,19 @@ msgstr "Edukacijske/Znanstvene/Stručne teme"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
-msgstr "Sakrije upravljačke elemente i dodatne prozore i u windowed modu."
+msgstr "Skriva upravljačke elemente i dodatne panele u načinu prozora."
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr "Spriječi učitavanje eksternih podnapisa ako se koriste interni."
+msgstr "Spriječi učitavanje eksternih titlova ako se koriste interni."
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
-msgstr "Ime"
+msgstr "Naziv"
msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
msgid "Value"
-msgstr "Vriejdnost"
+msgstr "Vrijednost"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
@@ -1294,7 +1303,7 @@ msgstr "Zapamti poziciju reprodukcije ukoliko je datoteka duža od N minuta.."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
msgid "Remember file position also for audio files."
-msgstr "Zapamti poziciju reprodukcije za audio datoteke."
+msgstr "Zapamti poziciju reprodukcije za zvukovnu datoteke."
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
@@ -1334,12 +1343,88 @@ msgstr "Maksimalna veličina (NxNpx) naslovnice pokrenute u načinu samo za zvuk
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr "Podnaslovi će biti povećani/umanjeni s ovom vrijednošću prilikom svakog pritiskanja određenih tipki koje su podešene (%s/%s)."
+msgstr "Titlovi će biti povećani/umanjeni s ovom vrijednošću prilikom svakog pritiskanja određenih tipki koje su namještene (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<nije definirano>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Pogledaj"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Pomakni gore"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Pomakni dolje"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sortiraj po LNC"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Ukloni sve"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Jeste li sigurni da želite ukloniti sve kanale s liste?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Nema informacija"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Molimo pričekajte, u tijeku je analiza..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Omogući zabilježavanje u datoteku (zahtjeva ponovno pokretanje)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Preostalo vrijeme"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Velika preciznost"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Nakon reprodukcije: Premotaj trenutačnu datoteku"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Nakon reprodukcije: Zatvori"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC je naišao na problem tokom inicijalizacije. Sa vašom pomoći mogli bi popraviti taj problem.\n\nŽelite li ga prijaviti?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Unesite pozitivnu vrijednost ako zvuk rani i negativnu vrijednost ako kasni."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Pregled je trenutno onemogućen. Možete ga omogućiti u MPC-HC-ovim postavkama."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Ova postavka može se koristiti za pregled medijskih datoteka iz udaljenih lokacija. Koristite ju samo na pravilno osiguranim privatnim mrežama.\n\nŽelite li zaista omogućiti ovu postavku?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Unutarnji prikazivač titlova"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Otvori uređaj"
@@ -1360,13 +1445,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Slika uspješno spremljena"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Učitaj titlove"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Učitaj titlove..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Snimi titlove"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Spremi titlove..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,27 +1471,27 @@ msgstr "Pokreni"
msgctxt "IDS_AG_STOP"
msgid "Stop"
-msgstr "stani"
+msgstr "Zaustavi"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "Framestep"
+msgid "Frame-step"
+msgstr "Korak slike"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "Framestep back"
+msgid "Frame-step back"
+msgstr "Korak slike nazad"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
-msgstr "Idi na..."
+msgstr "Idi na"
msgctxt "IDS_AG_INCREASE_RATE"
msgid "Increase Rate"
-msgstr "Increase Rate"
+msgstr "Povećaj brzinu"
msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
msgid "Show/Game show"
-msgstr "Show/Game show"
+msgstr "Serija/Igrana serija"
msgctxt "IDS_CONTENT_SPORTS"
msgid "Sports"
@@ -1414,23 +1499,23 @@ msgstr "Sport"
msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
msgid "Children's/Youth programmes"
-msgstr "Children's/Youth programmes"
+msgstr "Dječji/Program za mlade"
msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
msgid "Music/Ballet/Dance"
-msgstr "Music/Ballet/Dance"
+msgstr "Glazba/Balet/Ples"
msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
msgid "Arts/Culture"
-msgstr "Arts/Culture"
+msgstr "Umjetnost/Kultura"
msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
msgid "Social/Political issues/Economics"
-msgstr "Social/Political issues/Economics"
+msgstr "Socijalno/Politika/Ekonomija"
msgctxt "IDS_CONTENT_LEISURE"
msgid "Leisure hobbies"
-msgstr "Leisure hobbies"
+msgstr "Hobiji za opuštanje"
msgctxt "IDS_FILE_RECYCLE"
msgid "Move to Recycle Bin"
@@ -1442,15 +1527,15 @@ msgstr "Snimi kopiju"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
-msgstr "Latest keyframe"
+msgstr "Posljednji ključni kadar"
msgctxt "IDS_FASTSEEK_NEAREST"
msgid "Nearest keyframe"
-msgstr "Nearest keyframe"
+msgstr "Najbliži ključni kadar"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
-msgstr "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
+msgstr "MPC-HC je naišao na problem tijekom inicijalizacije. DVD reprodukcija možda neće raditi ispravno. Ovo je možda uzrokovano nekompatibilnošću sa određenim sigurnosnim alatima.\n\nŽelite li prijaviti ovu grešku?"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
@@ -1458,11 +1543,11 @@ msgstr "Nikad ne pokazuj"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
msgid "Show when moving the cursor, hide after:"
-msgstr "Show when moving the cursor, hide after:"
+msgstr "Prikaži kada se pomiče pokazivač, sakrij kasnije:"
msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
msgid "Show when hovering control, hide after:"
-msgstr "Show when hovering control, hide after:"
+msgstr "Prikaži kada kontrole lebde, sakrij kasnije:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
@@ -1470,35 +1555,35 @@ msgstr "Pre-resize-shader nije moguće postaviti"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
-msgstr "Frame Time Correction: On"
+msgstr "Ispravak vremena slike: Uključen"
msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
msgid "Frame Time Correction: Off"
-msgstr "Frame Time Correction: Off"
+msgstr "Ispravak vremena slike: Isključen"
msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
msgid "Target VSync Offset: %.1f"
-msgstr "Target VSync Offset: %.1f"
+msgstr "Pogodi VSync istup: %.1f"
msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
msgid "VSync Offset: %d"
-msgstr "VSync Offset: %d"
+msgstr "VSync istup: %d"
msgctxt "IDS_OSD_SPEED"
msgid "Speed: %.2lfx"
-msgstr "Speed: %.2lfx"
+msgstr "Brzina: %.2lfx"
msgctxt "IDS_OSD_THUMBS_SAVED"
msgid "Thumbnails saved successfully"
-msgstr "Thumbnails saved successfully"
+msgstr "Minijature uspješno spremljene"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Video protok"
+msgid "Vide&o Track"
+msgstr "&Video zapis"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
-msgstr "Video Ang&le"
+msgstr "Video &kut"
msgctxt "IDS_RESET_SETTINGS"
msgid "Reset settings"
@@ -1506,207 +1591,247 @@ msgstr "Resetiraj postavke"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
+msgstr "Jeste li sigurni da želite vratiti MPC-HC na zadane postavke?\nSVE vaše trenutne postavke će biti izgubljene!"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr "Please close all instances of MPC-HC so that the default settings can be restored."
+msgstr "Molim zatvorite sve instance MPC-HC kako bi se zadane postavke mogle vratiti."
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
-msgstr "Export settings"
+msgstr "Postavke izvoza"
msgctxt "IDS_EXPORT_SETTINGS_WARNING"
msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
-msgstr "Some changes have not been saved yet.\nDo you want to save them before exporting?"
+msgstr "Neke promjene još nisu spremljene.\nŽelite li ih spremiti prije izvoza?"
msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
msgid "The settings have been successfully exported."
-msgstr "The settings have been successfully exported."
+msgstr "Postavke su uspješno izvezene."
msgctxt "IDS_EXPORT_SETTINGS_FAILED"
msgid "The export failed! This can happen when you don't have the correct rights."
-msgstr "The export failed! This can happen when you don't have the correct rights."
+msgstr "Izvoz neuspješan! Ovo se može dogoditi kada nemate ispravna dopuštenja."
msgctxt "IDS_BDA_ERROR"
msgid "BDA Error"
-msgstr "BDA Error"
+msgstr "BDA greška"
msgctxt "IDS_AG_DECREASE_RATE"
msgid "Decrease Rate"
-msgstr "Decrease Rate"
+msgstr "Smanji brzinu"
msgctxt "IDS_AG_RESET_RATE"
msgid "Reset Rate"
-msgstr "Reset Rate"
+msgstr "Vrati brzinu na početnu"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
+msgstr "Zvučno kašnjenje +10 ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
+msgstr "Zvučno kašnjenje -10 ms"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
-msgstr "Jump Forward (small)"
+msgstr "Skoči naprijed (malo)"
msgctxt "IDS_MPLAYERC_24"
msgid "Jump Backward (small)"
-msgstr "Jump Backward (small)"
+msgstr "Skoči nazad (malo)"
msgctxt "IDS_MPLAYERC_25"
msgid "Jump Forward (medium)"
-msgstr "Jump Forward (medium)"
+msgstr "Skoči naprijed (srednje)"
msgctxt "IDS_MPLAYERC_26"
msgid "Jump Backward (medium)"
-msgstr "Jump Backward (medium)"
+msgstr "Skoči nazad (srednje)"
msgctxt "IDS_MPLAYERC_27"
msgid "Jump Forward (large)"
-msgstr "Preskoci naprijed (large)"
+msgstr "Skoči naprijed (puno)"
msgctxt "IDS_MPLAYERC_28"
msgid "Jump Backward (large)"
-msgstr "Skoci nazad (large)"
+msgstr "Skoči nazad (puno)"
msgctxt "IDS_MPLAYERC_29"
msgid "Jump Forward (keyframe)"
-msgstr "skoci naprijed (keyframe)"
+msgstr "Skoči naprijed (ključni kadar)"
msgctxt "IDS_MPLAYERC_30"
msgid "Jump Backward (keyframe)"
-msgstr "skoci nazad (keyframe)"
+msgstr "Skoči nazad (ključni kadar)"
msgctxt "IDS_AG_NEXT"
msgid "Next"
-msgstr "iduci"
+msgstr "Slijedeće"
msgctxt "IDS_AG_PREVIOUS"
msgid "Previous"
-msgstr "prethodno"
+msgstr "Prethodno"
msgctxt "IDS_AG_NEXT_FILE"
msgid "Next File"
-msgstr "Iduca datoteka"
+msgstr "Slijedeća datoteka"
msgctxt "IDS_AG_PREVIOUS_FILE"
msgid "Previous File"
-msgstr "prethodna datoteka"
+msgstr "Prethodna datoteka"
msgctxt "IDS_MPLAYERC_99"
msgid "Toggle Direct3D fullscreen"
-msgstr "Toggle Direct3D fullscreen"
+msgstr "Namjestiti Direct3D cijeli zaslon"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
-msgstr "Goto Prev Subtitle"
+msgstr "Idi na prošli titl"
msgctxt "IDS_MPLAYERC_101"
msgid "Goto Next Subtitle"
-msgstr "Goto Next Subtitle"
+msgstr "Idi na slijedeće titl"
msgctxt "IDS_MPLAYERC_102"
msgid "Shift Subtitle Left"
-msgstr "Shift Subtitle Left"
+msgstr "Pomakni titl lijevo"
msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
-msgstr "Shift Subtitle Right"
-
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Prikazi statistiku"
+msgstr "Pomakni titl desno"
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
-msgstr "Idi na pocetak"
+msgstr "Idi na početak"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Prikaži ime datoteke"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Reproduciraj DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Reproduciraj BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Prikaži statistike prikazivača"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Resetiraj statistike prikazivača"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Titlovi::Razno"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Sakrij ru&bove"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Sa&mo okvir"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Prika&zati natpis&&izbornik"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Sakrij izbor&nik"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Napredno"
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
-msgstr "View Minimal"
+msgstr "Prikaži minimalno"
msgctxt "IDS_AG_VIEW_COMPACT"
msgid "View Compact"
-msgstr "View Compact"
+msgstr "Prikaži kompaktno"
msgctxt "IDS_AG_VIEW_NORMAL"
msgid "View Normal"
-msgstr "View Normal"
+msgstr "Prikaži normalno"
msgctxt "IDS_AG_FULLSCREEN"
msgid "Fullscreen"
-msgstr "Fullsrceen"
+msgstr "Cijeli zaslon"
msgctxt "IDS_MPLAYERC_39"
msgid "Fullscreen (w/o res.change)"
-msgstr "Fullscreen (w/o res.change)"
+msgstr "Cijeli zaslon (bez promjene rezolucije)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT"
msgid "Zoom Auto Fit"
-msgstr "zoom auto fit"
+msgstr "Zumiraj automatski"
msgctxt "IDS_AG_VIDFRM_HALF"
msgid "VidFrm Half"
-msgstr "VidFrm Half"
+msgstr "VidFrm polovična"
msgctxt "IDS_AG_VIDFRM_NORMAL"
msgid "VidFrm Normal"
-msgstr "VidFrm Normal"
+msgstr "VidFrm normalna"
msgctxt "IDS_AG_VIDFRM_DOUBLE"
msgid "VidFrm Double"
-msgstr "VidFrm Double"
+msgstr "VidFrm dupla"
msgctxt "IDS_AG_ALWAYS_ON_TOP"
msgid "Always On Top"
-msgstr "uvijek na vrhu"
+msgstr "Uvijek na vrhu"
msgctxt "IDS_AG_PNS_INC_SIZE"
msgid "PnS Inc Size"
-msgstr "PnS Inc Size"
+msgstr "PnS povećaj veličinu"
msgctxt "IDS_AG_PNS_INC_WIDTH"
msgid "PnS Inc Width"
-msgstr "PnS Inc Width"
+msgstr "PnS povećaj širinu"
msgctxt "IDS_MPLAYERC_47"
msgid "PnS Inc Height"
-msgstr "PnS Inc Height"
+msgstr "PnS povećaj visinu"
msgctxt "IDS_AG_PNS_DEC_SIZE"
msgid "PnS Dec Size"
-msgstr "PnS Dec Size"
+msgstr "PnS smanji veličinu"
msgctxt "IDS_AG_PNS_DEC_WIDTH"
msgid "PnS Dec Width"
-msgstr "PnS Dec Width"
+msgstr "PnS smanji širinu"
msgctxt "IDS_MPLAYERC_50"
msgid "PnS Dec Height"
-msgstr "PnS Dec Height"
+msgstr "PnS smanji visinu"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "ucitavam titlove, molim pricekajte"
+msgid "Downloading [%s] \"%s\""
+msgstr "Preuzimanje [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
-msgstr "Parsing list..."
+msgstr "Lista raščlambe..."
msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
msgid "No subtitles found."
-msgstr "Titlovi nisu pronadjeni"
+msgstr "Titlovi nisu pronađeni."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr "%d pronadjenih titlova"
+msgid "%d subtitle(s) available."
+msgstr "%d pronađenih titlova"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
+msgstr "Želite li periodično provjeravati MPC-HC ažuriranje?\n\nOvo svojstvo se može kasnije onemogućiti na stranici Razne postavke."
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1722,19 +1847,19 @@ msgstr "200%"
msgctxt "IDS_ZOOM_AUTOFIT"
msgid "Auto Fit"
-msgstr "Autio fit"
+msgstr "Automatski namjesti"
msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (Larger Only)"
-msgstr "Auto Fit (Larger Only)"
+msgstr "Automatski namjesti (samo veliko)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
msgid "Zoom Auto Fit (Larger Only)"
-msgstr "Zoom Auto Fit (Larger Only)"
+msgstr "Zumiraj automatski (samo veliko)"
msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
msgid "Zoom: Auto (Larger Only)"
-msgstr "Zoom: Auto (Larger Only)"
+msgstr "Zumiraj: Automatski (samo veliko)"
msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
msgid "Double click to open file location"
@@ -1742,7 +1867,7 @@ msgstr "Dvoklik za otvaranje lokacije datoteke"
msgctxt "IDS_TOOLTIP_REMAINING_TIME"
msgid "Toggle between elapsed and remaining time"
-msgstr "Toggle between elapsed and remaining time"
+msgstr "Namjesti između proteklog i preostalog vremena"
msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
msgid "Invalid delay"
@@ -1790,167 +1915,151 @@ msgstr "PnS dolje/desno"
msgctxt "IDS_AG_VOLUME_UP"
msgid "Volume Up"
-msgstr "pojacaj"
+msgstr "Pojačaj"
msgctxt "IDS_AG_VOLUME_DOWN"
msgid "Volume Down"
-msgstr "smanji zvuk"
+msgstr "Stišaj zvuk"
msgctxt "IDS_AG_VOLUME_MUTE"
msgid "Volume Mute"
-msgstr "Mute zvuk"
+msgstr "Isključen zvuk"
msgctxt "IDS_MPLAYERC_63"
msgid "DVD Title Menu"
-msgstr "DVD Title Menu."
+msgstr "DVD naslovni izbornik"
msgctxt "IDS_AG_DVD_ROOT_MENU"
msgid "DVD Root Menu"
-msgstr "DvD root menu"
+msgstr "DVD korijenski izbornik"
msgctxt "IDS_MPLAYERC_65"
msgid "DVD Subtitle Menu"
-msgstr "DVD subtitle menu"
+msgstr "DVD izbornik titlova"
msgctxt "IDS_MPLAYERC_66"
msgid "DVD Audio Menu"
-msgstr "DvD audio menu"
+msgstr "DVD zvučni izbornik"
msgctxt "IDS_MPLAYERC_67"
msgid "DVD Angle Menu"
-msgstr "Dvd Angle menu"
+msgstr "DVD izbornik kuteva kamere"
msgctxt "IDS_MPLAYERC_68"
msgid "DVD Chapter Menu"
-msgstr "DVD Menu poglavlja"
+msgstr "DVD izbornik poglavlja"
msgctxt "IDS_AG_DVD_MENU_LEFT"
msgid "DVD Menu Left"
-msgstr "DVD Menu lijevo"
+msgstr "DVD izbornik lijevo"
msgctxt "IDS_MPLAYERC_70"
msgid "DVD Menu Right"
-msgstr "DVD Menu desno"
+msgstr "DVD izbornik desno"
msgctxt "IDS_AG_DVD_MENU_UP"
msgid "DVD Menu Up"
-msgstr "DVD menu gore"
+msgstr "DVD izbornik gore"
msgctxt "IDS_AG_DVD_MENU_DOWN"
msgid "DVD Menu Down"
-msgstr "DVD menu dolje"
+msgstr "DVD izbornik dolje"
msgctxt "IDS_MPLAYERC_73"
msgid "DVD Menu Activate"
-msgstr "Aktiviraj DVD menu"
+msgstr "Aktiviraj DVD izbornik"
msgctxt "IDS_AG_DVD_MENU_BACK"
msgid "DVD Menu Back"
-msgstr "DVD menu nazad"
+msgstr "DVD izbornik nazad"
msgctxt "IDS_MPLAYERC_75"
msgid "DVD Menu Leave"
-msgstr "Napusti DVD-izbornik"
+msgstr "Napusti DVD izbornik"
msgctxt "IDS_AG_BOSS_KEY"
msgid "Boss key"
-msgstr "Boss key"
+msgstr "Tipka za skrivanje"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "player menu (kratki)"
+msgid "Player Menu"
+msgstr "Izbornik izvođača"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Player menu (dugi)"
+msgid "Player Menu (full)"
+msgstr "Izbornik izvođača (potpuni)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
-msgstr "Filters menu"
+msgstr "Izbornik filtera"
msgctxt "IDS_AG_OPTIONS"
msgid "Options"
msgstr "Opcije"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "next audio"
+msgid "Next Audio Track"
+msgstr "Sljedeća zvučna traka"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "prethodni audio"
+msgid "Prev Audio Track"
+msgstr "Prošla zvučna traka"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "iduci titl"
+msgid "Next Subtitle Track"
+msgstr "Sljedeća titl traka"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "prethodni titl"
+msgid "Prev Subtitle Track"
+msgstr "Prošla titl traka"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
-msgstr "on/off titlovi"
+msgstr "Uključi/isključi titlove"
msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
-msgstr "ponovno ucitaj titlove"
-
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "next audio (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Prethodni audio (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "iduci titl (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "prethodni titl (OGM)"
+msgstr "Ponovno učitaj titlove"
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
-msgstr "iduci kut (DVD)"
+msgstr "Idući kut (DVD)"
msgctxt "IDS_MPLAYERC_92"
msgid "Prev Angle (DVD)"
-msgstr "prethodni kut (DVD)"
+msgstr "Prethodni kut (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "iduci audio (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Sljedeća zvučna traka (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "prethodni audio (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Prošla zvučna traka (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "iduci titl (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Sljedeća titl traka (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "prethodni titl (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Prošla titl traka (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
-msgstr "on/off titlovi (DVD)"
+msgstr "Uključi/isključi titlove (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "preostalo vrijeme"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Prikaži trenutno vrijeme"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
-msgstr "odaberi mapu"
+msgstr "Odaberi mapu"
msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
msgid "Quick add favorite"
-msgstr "Dodaj na brzinu u favorite"
+msgstr "Dodaj na brzinu u omiljene"
msgctxt "IDS_DVB_CHANNEL_NUMBER"
msgid "N"
@@ -1958,7 +2067,7 @@ msgstr "N"
msgctxt "IDS_DVB_CHANNEL_NAME"
msgid "Name"
-msgstr "Ime"
+msgstr "Naziv"
msgctxt "IDS_DVB_CHANNEL_FREQUENCY"
msgid "Frequency"
@@ -1968,25 +2077,25 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Šifrirano"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
-msgstr "da"
+msgstr "Da"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
-msgstr "ne"
+msgstr "Ne"
msgctxt "IDS_DVB_CHANNEL_START_SCAN"
msgid "Start"
-msgstr "Zapocni"
+msgstr "Započni"
msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
msgid "Stop"
-msgstr "stani"
+msgstr "Zaustavi"
msgctxt "IDS_DVB_TVNAV_SEERADIO"
msgid "Radio stations"
-msgstr "radio stanice"
+msgstr "Radio stanice"
msgctxt "IDS_DVB_TVNAV_SEETV"
msgid "TV stations"
@@ -2002,15 +2111,15 @@ msgstr "Fokus izgubljen od: %s - %s"
msgctxt "IDS_AG_SUBTITLES_SAVED"
msgid "Subtitles saved"
-msgstr "titlovi sacuvani"
+msgstr "Titlovi spremljeni"
msgctxt "IDS_MAINFRM_4"
msgid "Cannot save subtitles"
-msgstr "ne mogu spremiti titlove"
+msgstr "Nemoguće spremiti titlove"
msgctxt "IDS_AG_FRAMERATE"
msgid "Frame rate"
-msgstr "frame rate"
+msgstr "Brzina slike"
msgctxt "IDS_MAINFRM_6"
msgid "drawn: %d, dropped: %d"
@@ -2018,35 +2127,35 @@ msgstr "prikazano: %d, odbačeno: %d"
msgctxt "IDS_AG_FRAMES"
msgid "Frames"
-msgstr "frames"
+msgstr "Slike"
msgctxt "IDS_AG_BUFFERS"
msgid "Buffers"
-msgstr "buffers"
+msgstr "Baferi"
msgctxt "IDS_MAINFRM_9"
msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
-msgstr "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu."
+msgstr "Svezak: %02lu/%02lu, Naslov: %02lu/%02lu, Poglavlje: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
-msgstr "Kut: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Kut: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s."
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %dbits %d %s."
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
-msgstr "dodaj na MPC-HC Playlistu"
+msgstr "Dodaj na MPC-HC listu izvođenja"
msgctxt "IDS_OPEN_WITH_MPC"
msgid "Play with MPC-HC"
-msgstr "otvori sa MPC-HC"
+msgstr "Otvori sa MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr "MPC-HC nema dovoljno privilegija da bi promijenio asocijacije formata. Molimo pritisnite na botun \"Pokreni kao administrator\"."
+msgstr "MPC-HC nema dovoljno privilegija da bi promijenio asocijacije formata. Molimo kliknite \"Pokreni kao administrator\"."
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
@@ -2062,31 +2171,31 @@ msgstr "kanali"
msgctxt "IDS_AG_TITLE"
msgid "Title %u"
-msgstr "naslov %u"
+msgstr "Naslov %u"
msgctxt "IDS_MAINFRM_16"
msgid "DVD: Unexpected error"
-msgstr "DVD: neocekivana greska"
+msgstr "DVD: neočekivana greška"
msgctxt "IDS_MAINFRM_17"
msgid "DVD: Copy-Protect Fail"
-msgstr "DVD: copy/protect greska"
+msgstr "DVD: greška zaštite kopiranje"
msgctxt "IDS_MAINFRM_18"
msgid "DVD: Invalid DVD 1.x Disc"
-msgstr "DVD: invalid DVD 1.x Disc"
+msgstr "DVD: Neispravni DVD 1.x disk"
msgctxt "IDS_MAINFRM_19"
msgid "DVD: Invalid Disc Region"
-msgstr "DVD: Invalid Disc Region."
+msgstr "DVD: Neispravna regija diska"
msgctxt "IDS_MAINFRM_20"
msgid "DVD: Low Parental Level"
-msgstr "DVD: Low Parental Level."
+msgstr "DVD: Nizak nivo roditeljske kontrole"
msgctxt "IDS_MAINFRM_21"
msgid "DVD: Macrovision Fail"
-msgstr "DVD: Macrovision Fail."
+msgstr "DVD: Macrovision neuspješan"
msgctxt "IDS_MAINFRM_22"
msgid "DVD: Incompatible System And Decoder Regions"
@@ -2102,15 +2211,15 @@ msgstr "Ova opcija je dizajnirana za izbjegavanje kidanja videa. Međutim, tako
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
-msgstr "Kasnjenje titla: %ld ms"
+msgstr "Kašnjenje titla: %ld ms"
msgctxt "IDS_AG_TITLE2"
msgid "Title: %02d/%02d"
-msgstr "Naslov: %02d/%o2d"
+msgstr "Naslov: %02d/%02d"
msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
-msgstr "Ime datoteke sadrzi nepodrzane znakove (koristite samo A-Z, 0-9)"
+msgstr "Ime datoteke sadrži nepodržane znakove (koristite samo A-Z, 0-9)"
msgctxt "IDS_THUMB_ROWNUMBER"
msgid "Rows:"
@@ -2122,63 +2231,55 @@ msgstr "Stupci:"
msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
-msgstr "Sirina slike"
-
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL adresa je tocna!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Verzija protokola se ne podudara, molimo nadogradite vaš player ili odaberite drugu adresu!"
+msgstr "Širina slike"
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "Aspect ratio"
+msgstr "Omjer slike"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
-msgstr "Total: %ld, Dropped: %ld"
+msgstr ", Ukupno: %ld, Ispušteno: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr "velicina: %I64dKB"
+msgid ", Size: %I64d KB"
+msgstr ", Veličina: %I64d KB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr " Size: %I64dMB."
+msgid ", Size: %I64d MB"
+msgstr ", Veličina: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr "slobodno %I64KB"
+msgid ", Free: %I64d KB"
+msgstr ", Slobodno %I64 KB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr "Free: %I64dMB."
+msgid ", Free: %I64d MB"
+msgstr ", Slobodno: %I64d MB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
-msgstr "Free V/A Buffers: %03d/%03d."
+msgstr ", Slobodni V/A bufferi: %03d/%03d"
msgctxt "IDS_AG_ERROR"
msgid "Error"
-msgstr "greska"
+msgstr "Greška"
msgctxt "IDS_SUBTITLE_STREAM_OFF"
msgid "Subtitle: off"
-msgstr "titlovi: iskljuceni"
+msgstr "Titlovi: isključeni"
msgctxt "IDS_SUBTITLE_STREAM"
msgid "Subtitle: %s"
-msgstr "titlovi: %s"
+msgstr "Titlovi: %s"
msgctxt "IDS_MAINFRM_46"
msgid "Select the path for the DVD/BD:"
-msgstr "odaberi putanju za DVD/BD:"
+msgstr "Odaberite putanju za DVD/BD:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr "uspjesno ucitano"
+msgstr "uspješno učitano"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2194,11 +2295,11 @@ msgstr "GetCurrentImage greška, hr = %08x"
msgctxt "IDS_SCREENSHOT_ERROR"
msgid "Cannot create file"
-msgstr "Ne mogu kreirati fajl"
+msgstr "Nemoguće kreirati datoteku"
msgctxt "IDS_THUMBNAILS_NO_DURATION"
msgid "Cannot create thumbnails for files with no duration"
-msgstr "ne mogu kreirati thumbnailove za datoteke bez trajanja"
+msgstr "Nemoguće kreirati sličice za datoteke bez trajanja"
msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
msgid "Failed to get video frame size"
@@ -2206,7 +2307,7 @@ msgstr "Greška pri dohvaćanju veličine okvira videa"
msgctxt "IDS_OUT_OF_MEMORY"
msgid "Out of memory, go buy some more!"
-msgstr "Nema vise memorije, kupi jos!"
+msgstr "Nema više memorije, idite i kupite još!"
msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
@@ -2214,47 +2315,47 @@ msgstr "Neispravan format slike, ne mogu se kreirati sličice s %d bpp dibs."
msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
msgid "File Size: %s (%s bytes)\\N"
-msgstr "File Size: %s (%s bytes)\\N."
+msgstr "Veličina datoteke: %s (%s bajta)\\N"
msgctxt "IDS_THUMBNAILS_INFO_HEADER"
msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
-msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d."
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Naziv datoteke: %s\\N%sRezolucija: %dx%d %s\\NTrajanje: %02d:%02d:%02d."
msgctxt "IDS_THUMBNAIL_TOO_SMALL"
msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
msgstr "Sličice bi bile premalene, nemoguće je kreirati datoteku.\n\nPokušajte smanjivanjem broja sličica ili povećanjem ukupne veličine."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a."
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Za pokretanje titlova promijenite tip video prikazivača i ponovno otvorite datoteku.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR ili Haali\n- RealMedia: Posebni prikazivač za RealMedia ili otvorite direktno sa DirectShow\n- QuickTime: DX7 ili DX9 prikazivač za QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
-msgstr "Datoteke podnapisa"
+msgstr "Datoteke titlova"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
msgstr "Omjer: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Omjer: Zadano"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Omjer: Zadani (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Kasnjenje audia: %I64dms"
+msgid "Audio delay: %I64d ms"
+msgstr "Kašnjenje zvuka: %I64d ms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
-msgstr "poglavlje %d"
+msgstr "Poglavlje %d"
msgctxt "IDS_AG_OUT_OF_MEMORY"
msgid "Out of memory"
-msgstr "nedostaje memorije"
+msgstr "Nedostaje memorije"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "greska: za IE potreban je flash player"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Greška: za Internet Explorer potreban je Adobe Flash Player"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2274,58 +2375,46 @@ msgstr "Otvaranje prekinuto"
msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
-msgstr "Greška pri renderiranju datoteke"
-
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Nevaljali URL - ne mogu locirati titlove"
+msgstr "Greška pri prikazivanju datoteke"
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
-msgstr "poglavlje"
+msgstr "Poglavlje:"
msgctxt "IDS_VOLUME_OSD"
msgid "Vol: %d%%"
-msgstr "Vol: %d%%."
+msgstr "Zvuk: %d%%."
msgctxt "IDS_BOOST_OSD"
msgid "Boost: +%u%%"
-msgstr "Boost: +%u%%."
+msgstr "Pojačanje: +%u%%"
msgctxt "IDS_BALANCE_OSD"
msgid "Balance: %s"
-msgstr "Balance: %s."
+msgstr "Balans: %s"
msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
-msgstr "tekuci"
-
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC se neočekivano ugasio. Da bi nam pomogli popraviti ovu grešku, molimo Vas da nam pošaljete datoteku %s na naš bug tracker.\n\nJe li želite sada otvoriti mjesto minidump datoteke i posjetiti bug tracker?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Greška pri kreiranju dump datoteke u %s (error %u)"
+msgstr "Trenutni"
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
-msgstr "odaberi mapu"
+msgstr "Odaberi mapu"
msgctxt "IDS_MAINFRM_DIR_CHECK"
msgid "Include subdirectories"
-msgstr "ukljuci poddirektorije"
+msgstr "Uključi podmape"
msgctxt "IDS_AG_PAUSE"
msgid "Pause"
-msgstr "pauziraj"
+msgstr "Pauziraj"
msgctxt "IDS_AG_TOGGLE_CAPTION"
msgid "Toggle Caption&Menu"
msgstr "Namjestiti natpis&izbornik"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Namjestiti klizač"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2334,27 +2423,27 @@ msgstr "Namjestiti kontrole"
msgctxt "IDS_MAINFRM_84"
msgid "Invalid file name"
-msgstr "Nevazece ime datoteke"
+msgstr "Neispravno ime datoteke"
msgctxt "IDS_MAINFRM_86"
msgid "Cannot connect the filters"
-msgstr "Ne mogu povezati filtere"
+msgstr "Nemoguće povezati filtere"
msgctxt "IDS_MAINFRM_87"
msgid "Cannot load any source filter"
-msgstr "Ne može se učitati nijedna izvorišna datoteka"
+msgstr "Nemoguće učitati nijednu izvorišnu datoteku"
msgctxt "IDS_MAINFRM_88"
msgid "Cannot render the file"
-msgstr "Ne može se renderirati datoteka"
+msgstr "Nemoguće prikazati datoteku"
msgctxt "IDS_MAINFRM_89"
msgid "Invalid file format"
-msgstr "Nevazeci format datoteke"
+msgstr "Neispravni format datoteke"
msgctxt "IDS_MAINFRM_90"
msgid "File not found"
-msgstr "Datoteka nije promadjena"
+msgstr "Datoteka nije pronađena"
msgctxt "IDS_MAINFRM_91"
msgid "Unknown file type"
@@ -2366,19 +2455,19 @@ msgstr "Nepodržan stream"
msgctxt "IDS_MAINFRM_93"
msgid "Cannot find DVD directory"
-msgstr "Ne mogu pronaci DVD direktorij"
+msgstr "Ne mogu pronaći DVD direktorij"
msgctxt "IDS_MAINFRM_94"
msgid "Can't create the DVD Navigator filter"
-msgstr "Ne može se kreirati DVD navigacijski filtar"
+msgstr "Nemoguće kreirati DVD navigacijski filtar"
msgctxt "IDS_AG_FAILED"
msgid "Failed"
-msgstr "Neuspjesno"
+msgstr "Neuspješno"
msgctxt "IDS_MAINFRM_96"
msgid "Can't create video capture filter"
-msgstr "Ne mogu dodat Video Capture filter"
+msgstr "Nemoguće napraviti filter za snimanje videa"
msgctxt "IDS_MAINFRM_98"
msgid "No capture filters"
@@ -2390,11 +2479,11 @@ msgstr "Nemoguće napraviti stvarajući objekt grafa za snimanje"
msgctxt "IDS_MAINFRM_108"
msgid "Couldn't open any device"
-msgstr "Ne mogu otvorit nikakav uredjaj"
+msgstr "Nemoguće otvoriti nijedan uređaj"
msgctxt "IDS_AG_SOUND"
msgid "Sound"
-msgstr "zvuk"
+msgstr "Zvuk"
msgctxt "IDS_MAINFRM_114"
msgid "%s was not found, please insert media containing this file."
@@ -2402,7 +2491,7 @@ msgstr "%s nije pronađen, molimo ubacite medij koji sadrži navedenu datoteku."
msgctxt "IDS_AG_ABORTED"
msgid "Aborted"
-msgstr "prekinuto"
+msgstr "Prekinuto"
msgctxt "IDS_MAINFRM_116"
msgid "&Properties..."
@@ -2410,7 +2499,7 @@ msgstr "&Svojstva..."
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr "(pin) svojstva..."
+msgstr " (značka) svojstva..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2426,15 +2515,15 @@ msgstr "VSync"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr "(Komentari redatelja 1)"
+msgstr " (Komentari redatelja 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr "(Komentari redatelja 2)"
+msgstr " (Komentari redatelja 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr "Omogući podnapise DVD-a"
+msgstr "Omogući titlove DVD-a"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
@@ -2454,7 +2543,7 @@ msgstr "Smanji pomak VSynca"
msgctxt "IDS_MAINFRM_136"
msgid "MPC-HC D3D Fullscreen"
-msgstr "MPC-HC D3D Fullscreen"
+msgstr "MPC-HC D3D cijeli zaslon"
msgctxt "IDS_MAINFRM_137"
msgid "Unknown format"
@@ -2481,8 +2570,8 @@ msgid "Volume boost Max"
msgstr "Pojačanje glasnoće max"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Korištenje: mpc-hc.exe \"putanja\" [prekidači]\n\n\"putanja\"⇥Glavna datoteka ili mapa za pokrenuti(zamjenski znakovi\n⇥⇥dopušteni, \"-\" označava standardni ulaz)\n/dub \"naziv sinkronizacije\"⇥Pokrenuti dodatnu zvučnu datoteku\n/dubdelay \"datoteka\"⇥Pokrenuti dodatnu audio datoteku pomaknutu\n⇥⇥ za XXms (ako datoteka sadrži \"...POMAK XXms...\")\n/d3dfs⇥⇥Započni izvođenje u D3D načinu punog ekrana\n/sub \"naziv titla\"⇥Pokreni dodatnu titl datoteku\n/filter \"naziv filtera\"⇥Pokreni DirectShow filtere iz knjižnice\n⇥⇥dinamičkog linka (zamjenski znakovi dopušteni)\n/dvd⇥⇥Pokreni u dvd načinu, \"putanja\" znači dvd\n⇥⇥mapa (opcionalno)\n/dvdpos T#C⇥Započeti reprodukciju na nazivu T, poglavlju C\n/dvdpos T#hh:mm⇥Započeti reprodukciju na nazivu T, pozicija hh:mm:ss\n/cd⇥⇥Pokreni sve trake zvučnog cd ili (s)vcd,\n⇥⇥\"putanja\" znači uređaja (opcionalno)\n/device⇥⇥Otvori zadani video uređaj\n/open⇥⇥Otvori datoteku bez automatskog pokretanja reprodukcije\n/play⇥⇥Započeti reprodukciju datoteke čim je izvođač\n⇥⇥pokrenut\n/close⇥⇥Zatvori izvođač nakon reprodukcije (radi samo kad\n⇥⇥se koristi sa /play)\n/shutdown⇥Ugasi operativni sustav nakon reprodukcije\n/fullscreen⇥Započeti u načinu punog ekrana\n/minimized⇥Započeti u minimaliziranom načinu\n/new⇥⇥Koristiti novu instancu izvođača\n/add⇥⇥Dodati \"putanju\" u listu izvođenja, može biti kombinirano\n⇥⇥sa /open i /play\n/regvid⇥⇥Stvoriti povezanost nastavaka za video datoteke\n/regaud⇥⇥Stvoriti povezanost nastavaka za zvučne datoteke\n/regpl⇥⇥Stvoriti povezanost nastavaka za datoteke lista izvođenja\n/regall⇥⇥Stvoriti povezanost nastavaka za sve podržane datoteke\n/unregall⇥⇥Maknuti sve povezanosti datotečnih nastavaka\n/start ms⇥⇥Započeti reprodukciju u \"ms\" (= milisekundi)\n/startpos hh:mm:ss⇥Započeti reprodukciju na poziciji hh:mm:ss\n/fixedsize w,h⇥Namjestiti fiksiranu veličinu prozora\n/monitor N⇥Započeti izvođač na ekranu N, gdje N počinje od 1\n/audiorenderer N⇥Započeti zvučni izvođač N, gdje N počinje od 1\n⇥⇥(pogledati \"Izlaz\" postavke)\n/shaderpreset \"Pr\"⇥Započeti koristiti \"Pr\" shader postavku\n/reset⇥⇥Vratiti zadane postavke\n/help /h /?⇥Prikazati pomoć prekidača komandne linije\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Upotreba: mpc-hc.exe \"putanja\" [prekidači]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2518,15 +2607,15 @@ msgstr "Namjestiti ispravljanje shadera"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
-msgstr "Zoom 50%"
+msgstr "Zumiraj 50%"
msgctxt "IDS_AG_ZOOM_100"
msgid "Zoom 100%"
-msgstr "Zoom 100%"
+msgstr "Zumiraj 100%"
msgctxt "IDS_AG_ZOOM_200"
msgid "Zoom 200%"
-msgstr "Zoom 200%"
+msgstr "Zumiraj 200%"
msgctxt "IDS_AG_NEXT_AR_PRESET"
msgid "Next AR Preset"
@@ -2534,11 +2623,11 @@ msgstr "Sljedeći AR profil"
msgctxt "IDS_AG_VIDFRM_STRETCH"
msgid "VidFrm Stretch"
-msgstr "VidFrm Stretch"
+msgstr "VidFrm rastezanje"
msgctxt "IDS_AG_VIDFRM_INSIDE"
msgid "VidFrm Inside"
-msgstr "Unutarnji VidFrm"
+msgstr "VidFrm unutar"
msgctxt "IDS_AG_VIDFRM_OUTSIDE"
msgid "VidFrm Outside"
@@ -2554,11 +2643,11 @@ msgstr "Rotiraj PnS X+"
msgctxt "IDS_AG_VIDFRM_ZOOM1"
msgid "VidFrm Zoom 1"
-msgstr "VidFrm Zoom 1"
+msgstr "VidFrm zum 1"
msgctxt "IDS_AG_VIDFRM_ZOOM2"
msgid "VidFrm Zoom 2"
-msgstr "VidFrm Zoom 2"
+msgstr "VidFrm zum 2"
msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
msgid "VidFrm Switch Zoom"
@@ -2568,14 +2657,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Omogući sve filtre"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Pretraga tjunera"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Podnapisi nisu učitani ili nepodržani od renderera."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Autor nepoznat. Kontaktirajte nas ako ste Vi napravili ovaj logo."
@@ -2664,40 +2745,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Vrh nazad desno"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Ponovno namjestiti statistiku prikaza"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Podnapisi::Razno"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Sakrij &rubove"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Samo okvir"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "P&rikazati natpis&&izbornik"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Sakrij &izbornik"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Napredno"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Iznad trake za pomicanje"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Ispod trake za pomicanje"
msgctxt "IDS_VIDEO_STREAM"
@@ -2714,7 +2767,7 @@ msgstr "Očisti"
msgctxt "IDS_CANCEL"
msgid "Cancel"
-msgstr "Otkazi"
+msgstr "Odustani"
msgctxt "IDS_THUMB_THUMBNAILS"
msgid "Layout"
@@ -2726,7 +2779,7 @@ msgstr "Pikseli:"
msgctxt "IDS_TEXTFILE_ENC"
msgid "Encoding:"
-msgstr "Kodiram:"
+msgstr "Kodiranje:"
msgctxt "IDS_DISABLE_ALL_FILTERS"
msgid "&Disable all filters"
@@ -2758,15 +2811,15 @@ msgstr "Zumiranje preko cijelog ekrana"
msgctxt "IDS_ZOOM1"
msgid "Zoom 1"
-msgstr "Zoom 1"
+msgstr "Zum 1"
msgctxt "IDS_ZOOM2"
msgid "Zoom 2"
-msgstr "Zoom 2"
+msgstr "Zum 2"
msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
msgid "Touch Window From Outside"
-msgstr "Touch Window From Outside"
+msgstr "Dodiruje prozor izvana"
msgctxt "IDS_AUDIO_STREAM"
msgid "Audio: %s"
@@ -2865,8 +2918,8 @@ msgid "Other Audio"
msgstr "Ostali zvuk"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2876,6 +2929,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2940,29 +3013,13 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
-msgstr "Playlista"
+msgstr "Lista izvođenja"
msgctxt "IDS_MFMT_BDPLS"
msgid "Blu-ray playlist"
-msgstr "Blu-ray playlista"
+msgstr "Blu-ray lista izvođenja"
msgctxt "IDS_MFMT_RAR"
msgid "RAR Archive"
@@ -2978,19 +3035,7 @@ msgstr "Rezolucija"
msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "Aspect ratio"
-
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Korist WASAPI (restartiraj reprodukciju)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Stišati na brzom pomicanju"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Zvučni uređaj:"
+msgstr "Omjer slike"
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
@@ -3070,19 +3115,19 @@ msgstr "Ambijentalno svjetlo: Mračno (2.4 Gamma)"
msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
msgid "Rendering Intent: Perceptual"
-msgstr "Namjera renderiranja: Perceptualna"
+msgstr "Namjera prikazivanja: Perceptualna"
msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
msgid "Rendering Intent: Relative Colorimetric"
-msgstr "Namjera renderiranja: Relativno kolorimetrijska"
+msgstr "Namjera prikazivanja: Relativno kolorimetrijska"
msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
msgid "Rendering Intent: Saturation"
-msgstr "Namjera renderiranja: Zasićenje"
+msgstr "Namjera prikazivanja: Zasićenje"
msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
msgid "Rendering Intent: Absolute Colorimetric"
-msgstr "Namjera renderiranja: Apsolutno kolorimetrijska"
+msgstr "Namjera prikazivanja: Apsolutno kolorimetrijska"
msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
msgid "Output Range: %s"
@@ -3138,11 +3183,11 @@ msgstr "Alternativni VSync: Isklj."
msgctxt "IDS_OSD_RS_RESET_DEFAULT"
msgid "Renderer settings reset to default"
-msgstr "Postavke izvođača vratiti na zadano"
+msgstr "Postavke prikazivača vratiti na zadano"
msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
msgid "Renderer settings reset to optimal"
-msgstr "Postavke izvođača vratiti na optimalno"
+msgstr "Postavke prikazivača vratiti na optimalno"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
msgid "D3D Fullscreen GUI Support: On"
@@ -3186,7 +3231,7 @@ msgstr "Polovična obrada pomičnog zareza: Isključeno"
msgctxt "IDS_BRIGHTNESS_DEC"
msgid "Brightness decrease"
-msgstr "Smanji svjetlinu"
+msgstr "Smanji osvijetljenost"
msgctxt "IDS_CONTRAST_INC"
msgid "Contrast increase"
@@ -3226,7 +3271,7 @@ msgstr "Vaša trenutna verzija je v%s.\n\nZadnja stabilna verzija je v%s."
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr "MPC-HC v%s je dostupan. Vi koristite v%s.\n\nJe li želite posjetiti web-stranicu MPC-HC da biste ju skinuli?"
+msgstr "MPC-HC v%s je dostupan. Vi koristite v%s.\n\nŽelite li posjetiti web-stranicu MPC-HC da biste preuzeli novu?"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
@@ -3238,11 +3283,11 @@ msgstr "Zatvori"
msgctxt "IDS_OSD_ZOOM"
msgid "Zoom: %.0lf%%"
-msgstr "Zoom: %.0lf%%"
+msgstr "Zumiraj: %.0lf%%"
msgctxt "IDS_OSD_ZOOM_AUTO"
msgid "Zoom: Auto"
-msgstr "Zoom: Auto"
+msgstr "Zumiraj: automatski"
msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
msgid "Toggle custom channel mapping"
@@ -3280,6 +3325,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Vraćanje glasnoće: Isključeno"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bajtova"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3302,7 +3351,7 @@ msgstr "MB/s"
msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
msgid "Could not create the tuner."
-msgstr "Nemoguće stvoriti pretvarač."
+msgstr "Nemoguće stvoriti pretvarač."
msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
msgid "Could not create the receiver."
@@ -3337,16 +3386,16 @@ msgid "Error parsing the entered frame rate!"
msgstr "Greška slanja unesene brzine izmjene!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
-msgstr "Nemoguć korak slike, pokušajte drukčiji video izvođač."
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Nemoguć korak slike, pokušajte drukčiji video prikazivač."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
-msgstr "Funkcije \"Spremi sliku\" i \"Spremi minijature\" ne rade sa zadanim video izvođačem za RealMedia.\nOdaberite neki od DirectX izvođača za RealMedia u MPC-HC-ovim izlaznim opcijama i ponovno otvorite datoteku."
+msgstr "Funkcije \"Spremi sliku\" i \"Spremi minijature\" ne rade sa zadanim video prikazivačem za RealMedia.\nOdaberite neki od DirectX prikazivača za RealMedia u MPC-HC-ovim izlaznim opcijama i ponovno otvorite datoteku."
msgctxt "IDS_SCREENSHOT_ERROR_QT"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
-msgstr "Funkcije \"Spremi sliku\" i \"Spremi minijature\" ne rade sa zadanim video izvođačem za QuickTime.\nOdaberite neki od DirectX izvođača za QuickTime u MPC-HC-ovim izlaznim opcijama i ponovno otvorite datoteku."
+msgstr "Funkcije \"Spremi sliku\" i \"Spremi minijature\" ne rade sa zadanim video prikazivačem za QuickTime.\nOdaberite neki od DirectX priakzivača za QuickTime u MPC-HC-ovim izlaznim opcijama i ponovno otvorite datoteku."
msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
@@ -3354,15 +3403,11 @@ msgstr "Funkcije \"Spremi sliku\" i \"Spremi minijature\" ne rade sa Shockwave d
msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgstr "Funkcije \"Spremi sliku\" i \"Spremi minijature\" ne rade sa sa Overlay Mixer video izvođačem. \nPromijenite video izvođač u MPC-HC-ovim opcijama i ponovno otvorite datoteku."
-
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Ne može se pristupiti online bazi podnapisa."
+msgstr "Funkcije \"Spremi sliku\" i \"Spremi minijature\" ne rade sa sa Overlay Mixer video prikazivačem. \nPromijenite video prikazivač u MPC-HC-ovim opcijama i ponovno otvorite datoteku."
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
-msgstr "Da li želite aktivirati EDL editor?"
+msgstr "Želite li aktivirati EDL uređivač?"
msgctxt "IDS_CAPTURE_ERROR"
msgid "Capture Error"
@@ -3428,9 +3473,9 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Prije testiranja morate prihvatiti nove postavke."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
-msgstr "Nakon reprodukcije: izađi"
+msgstr "Nakon reprodukcije: Izađi"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
@@ -3456,9 +3501,17 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Nakon reprodukcije: Ugasiti ekran"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Nakon reprodukcije: Pokreni slijedeću datoteku u mapi"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Nakon reprodukcije: Nemoj učiniti ništa"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
-msgstr "Svjetlina: %s"
+msgstr "Osvijetljenost: %s"
msgctxt "IDS_OSD_CONTRAST"
msgid "Contrast: %s"
@@ -3482,7 +3535,7 @@ msgstr "Upravljanje bojama nije podržano"
msgctxt "IDS_BRIGHTNESS_INC"
msgid "Brightness increase"
-msgstr "Povećaj svijetloću"
+msgstr "Povećaj osvjetljenost"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
@@ -3494,11 +3547,11 @@ msgstr "Vanjski razdjelnici mogu imati svoje jezične postavke pa je MPC-HC-ovo
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
-msgstr "&Blu-ray playlista"
+msgstr "&Blu-ray lista izvođenja"
msgctxt "IDS_NAVIGATE_PLAYLIST"
msgid "&Playlist"
-msgstr "&Playlista"
+msgstr "&Lista izvođenja"
msgctxt "IDS_NAVIGATE_CHAPTERS"
msgid "&Chapters"
@@ -3514,7 +3567,7 @@ msgstr "&Kanali"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr "Ako je odabran \"posljednji keyframe\", skoči na prvi prethodni keyframe, uostalom ako je odabran \"bliži keyframe\", skoči unaprijed ili unatrag na najbliži keyframe u ovisnosti o tome koji je bliže."
+msgstr "Ako je odabran \"posljednji ključni kadar\", skoči na prvi prethodni ključni kadar, uostalom ako je odabran \"bliži ključni kadar\", skoči unaprijed ili unatrag na najbliži ključni kadar u ovisnosti o tome koji je bliže."
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
@@ -3536,3 +3589,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Postavke"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Davatelj"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Za osobe oštećena sluha"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Preuzimanja"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Ocjena"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Online pretraga nije uspjela."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Online pretraga titlova prekinuta."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Online pretraga titlova završena, %d titlova pronađeno."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Online pretraga titlova završena, nema titlova."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Preuzmi titlove"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Molimo pričekajte, pretraga titlova u tijeku..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Prekidanje online pretrage titlova..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Korisničko ime"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Status"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Spremno..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Nije implementirano."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Slanje..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Titlovi uspješno poslani."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Slanje titlova neuspješno."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Prekinuto slanje titlova."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Titlovi već postoje."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Slanje titlova, molimo pričekajte..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Slanje završeno."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Slanje prekinuto."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Slanje neuspješno."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Preuzmi && Otvori"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Postavljanje"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Resetiraj"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Pomakni gore"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Pomakni dolje"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Otvori URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Jezici"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "GREŠKA: Internet veza nije uspostavljana."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Unesite podatke web-stranice"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Unesite svoje podatke za povezati se na:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Omjer: Pretpostavite kvadratne piksele (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Preuzeto [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Pošalji titlove"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Sigurni želite poslati titl datoteku \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Dohvaćanje podržanih jezika..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Neuspjela prijava na \"%S\" s korisničkim imenom \"%S\".\n\nMolimo unesite ispravno korisničko ime i šifru ili uklonite podatke da biste se prijavili kao anonimni korisnik."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Automatsko traženje i preuzimanje će biti onemogućeno za sve datoteke čija putanja sadrži bilo koju od unesenih stvari.\nNpr.: \"\\dokumenti\\video|radovi\\\""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"putanja\"\tGlavna datoteka ili mapa za pokretanje\n\t\t(višeznačnici dopušteni, \"-\" označava standardni ulaz)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"naziv_duba\"\tPokreni dodatnu zvukovnu datoteku"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"datoteka\"\tPokreni dodatnu zvukovnu datoteku pomaknutu sa XXms\n\t\t(ako datoteka sadrži \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tPočni prikazivnje u D3D načinu punog ekrana"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"naziv_titla\"\tPokreni dodatnu titl datoteku"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"naziv_filtra\"\tPokreni DirectShow filtere iz dinamične vezane biblioteke (višeznačnici dopušteni)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tPokreni u DVD načinu, \"naziv_putanje\" označava DVD mapu (opcionalno)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tPočni reprodukciju na naslovu T, poglavlju C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P⇥Počni reprodukciju na naslovu T, poziciji P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tPokreni sve trake s zvukovnog cd-a ili (S)VCD-a,\n\t\t\"naziv_putanje\" označava putanju uređaja (opcionalno)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tOtvori zadani video uređaj"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tOtvora datoteku ali ne započinje automatsku reprodukciju"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tPočni reprodukciju čim je pokrenut program"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tZatvori program nakon reprodukcije (radi samo kada se koristi i /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tUgasi operativni sustav nakon reprodukcije"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tStavi operativni sustav u način mirovanja nakon reprodukcije"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tHiberniraj operativni sustav nakon reprodukcije"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tOdjavi se nakon reprodukcije"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tZaključaj operativni sustav nakon reprodukcije"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tUgasi zaslon nakon reprodukcije"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tOtvori slijedeću datoteku u mapi nakon reprodukcije"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tPokreni u načinu cijelog ekrana"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tPokreni u minimiziranom načinu"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tKoristi novu instancu programa"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tDodaj \"naziv_putanje\" u listu za izvođenje, može se kombinirati sa /open i /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tIzmiješaj popis za izvođenje"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tStvori pridruživanje za datoteke za video datoteke"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tStvori pridruživanje za datoteke za audio datoteke"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tStvori pridruživanje za datoteke za datoteke listi za izvođenje"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tStvori pridruživanje za datoteke za sve podržane tipove datoteka"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tUkloni sva pridruživanja datotekama"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tPočni reprodukciju u \"ms\" (= milliseconde)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tPočni reprodukciju na poziciji hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tNamjesti fiksnu veličinu prozora"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tPočni izvođač na ekranu N, gdje N počinje od 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tPočni koristiti audiorenderer N, gdje N počinje od 1 (pogledaj \"Izlazne\" postavke)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tPočni \"Pr\" shader postavku"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"naziv\"\tNavedi Pan&Scan naziv postavke za korištenje"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tPonovno postavi ikone"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tOtvori MPC-HC u pozadini"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tPokreni web sučelje na specifičnom portu"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tPrikaži debug informacije u OSD-u"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tOnemogući izvjestitelja o rušenju programa"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tKoristi MPC-HC kao roba"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tNamjesti GPU indeks korišten za hardversko dekodiranje.\n\t\tDostupno samo za CUVID i DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tVrati zadane postavke"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tPrikaži pomoć o prekidačima komandne linije"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Donja granična vrijednost rezultata titlova koji se planiraju automatski preuzeti. Veće vrijednosti znači da će se točnije podudarani titlovi učitati, niže vrijednosti mogu dovesti do pogrešno učitanih titlova, ali ne postoji jedna savršena vrijednost. Odaberite onu koji najbolje radi za vas."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Kašnjenje zvuka (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Veličina zadane alatne trake u pikselima."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Koristi zastarjelu alatnu traku umjesto nove vektorske."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.hu.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.hu.dialogs.po
index 9b6e1af0a..ea0e33ec0 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.hu.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.hu.dialogs.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Máté <lang.mate@gmail.com>, 2014
+# Evin <tomevin1@gmail.com>, 2016
+# Máté <lang.mate@gmail.com>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 11:50+0000\n"
-"Last-Translator: Máté <lang.mate@gmail.com>\n"
-"Language-Team: Hungarian (http://www.transifex.com/projects/p/mpc-hc/language/hu/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-10 20:22+0000\n"
+"Last-Translator: Evin <tomevin1@gmail.com>\n"
+"Language-Team: Hungarian (http://www.transifex.com/mpc-hc/mpc-hc/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -102,22 +103,22 @@ msgstr "Mintavételezés csökkentése 44100 Hz-re"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
-msgstr "Audió időzítés-eltolása:\n(ezredmásodpercben)"
+msgstr "Eltolás (ms):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
msgstr "Egyedi csatornaleképezés engedélyezése"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Hangszórók konfigurálása "
+msgid "Speaker configuration for"
+msgstr "Hangszórók konfigurálása"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "bemeneti csatornához:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Tartsa lenyomva a shift billentyűt a változtatások azonnali érvénybeléptetéséhez"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -189,8 +190,8 @@ msgid "About"
msgstr "Névjegy"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Szerzői jog © 2002-2014 lásd Authors.txt fájl"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Szerzői jog © 2002-2017 lásd Authors.txt fájl"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -421,12 +422,16 @@ msgid "time(s)"
msgstr "alkalommal"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Ismétlés módja"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Lejátszás után"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Kép"
+msgid "Default zoom"
+msgstr "Alapértelmezett nagyítás"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -472,10 +477,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Audiófájlok auto betöltése"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Beépített feliratrenderelő használata"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Vezérlés"
@@ -514,7 +515,7 @@ msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr "Késleltetés léptéke"
+msgstr "Eltolás léptéke"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -569,7 +570,7 @@ msgid "Warning"
msgstr "Figyelmeztetés"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Ha felülbírálva engedélyezi a videokártyája beállításainál a teljes képernyős vonalsimítást, a feliratok akkor sem lesznek szebbek, viszont a processzorát teljesen leterheli vele."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -676,16 +677,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "KIS MÉRET tiltása ha nem az Alapértelmezett monitoron van a Teljes képernyő"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Windows 7 Tálcafunkciók használata"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Modern tálca funkciók használata"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Az \"Ugrás előre/vissza\" nyissa meg a mappában a következő/az előző fájlt, ha csak 1 fájl van a lejátszási listában."
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Idő buborék használata:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1125,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "DirectShow Audió"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (renderless) és EVR (CP) beállítások"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderless) és EVR (CP) beállítások"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1146,7 +1147,7 @@ msgstr "Újrainicializálás képernyők közötti váltáskor"
msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
msgid "D3D Fullscreen"
-msgstr "Direct3D Teljes képernyő\n(megszünteti a képszétválást - page tearing)"
+msgstr "D3D Teljes képernyő"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Alternative VSync"
@@ -1169,7 +1170,7 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
+msgid "Subtitles"
msgstr "Feliratok"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
@@ -1185,8 +1186,12 @@ msgid "Rotation"
msgstr "Forgatás"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Külső szűrők (például a VSFilter) minden renderelőn meg tudják jeleníteni a feliratokat."
+msgid "Subtitle Renderer"
+msgstr "Felirat renderelő"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1204,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Hozzáférés engedélyezése csak localhost számára"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Előnézet engedélyezése"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Hibakeresési információ (debug info) megjelenítése"
@@ -1229,24 +1238,52 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI kezelők: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Online elérhető feliratok"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Letöltés && Megnyitás"
+msgid "Download subtitles"
+msgstr "Feliratok letöltése"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Jelenleg betöltött felirat lecserélése"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Letöltés"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Frissítés"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Elvetés"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Beállítások"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Feliratok feltöltése"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Feltöltés"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Elvetés"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Beállítások"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Mentés másként..."
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Color controls (for VMR-9, EVR and madVR)"
-msgstr "Színbeállítások (VMR-9, EVR és madVR rendererhez)"
+msgstr "Színbeállítások (VMR-9, EVR és madVR renderelőhöz)"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Brightness"
@@ -1277,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "Frissítések keresése automatikusan"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Keresés gyakorisága:"
+msgid "Check every:"
+msgstr "Ellenőrzés:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1346,7 +1383,7 @@ msgstr "Használjon eltolást"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Default Device"
-msgstr "Alapértelmezett Eszköz"
+msgstr "Alapértelmezett eszköz"
msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
msgid "Analog"
@@ -1390,7 +1427,7 @@ msgstr "Vevő"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
msgid "Channel switching approach:"
-msgstr ""
+msgstr "Csatornaváltás módja:"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
msgid "Rebuild filter graph"
@@ -1466,7 +1503,7 @@ msgstr "ms"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
msgid "Hide docked panels"
-msgstr ""
+msgstr "Rögzített panelek elrejtése"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
msgid "Exit fullscreen at the end of playback"
@@ -1541,16 +1578,28 @@ msgid "Reset"
msgstr "Visszaállítás"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Online adatbázis"
+msgid "Online search, download and upload subtitles"
+msgstr "Feliratok keresése, letöltése, feltöltése"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Feliratok automatikus keresése és letöltése, ha helyben nem található"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "A következő szavakat tartalmazó fájl kihagyása:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Az internetről elérhető felirat adatbázis bázis URL címe:"
+msgid "Languages in order of preference:"
+msgstr "Nyelvek prioritási sorrendben (pl. \"eng hun spa\"):"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Tesztelés"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Aktív feliratok automatikus feltöltése a videólejátszás végén"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1652,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Alapértelmezés"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Eszköz"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Exkluzív mód"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Bitstreaming engedélyezése"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Beállítások"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Sztereó crossfeed engedélyezése (fejhallgatókhoz)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Levágás:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Szint:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Megjegyzés"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Az torzítás minimalizálásához ajánlott a lejátszó hangerejét 85% körül tartani hangos, veszteségesen kódolt tartalom lejátszásakor."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG minőség:"
@@ -1664,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Összeomlás jelentő"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Sajnáljuk, úgy tűnik, hogy az MPC-HC összeomlott. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Hibajelentés küldése a hiba felderítéséhez és kijavításához."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Opcionális információk"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "E-mail:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Az e-mail cím megadása opcionális, és csak akkor kerül felhasználásra, ha a fejlesztőknek több információra van szükségük."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Probléma leírása (angolul):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "MPC-HC újraindítása"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "MPC-HC bezárása"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.hu.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.hu.menus.po
index 39fac49e0..75bfd74d8 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.hu.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.hu.menus.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Máté <lang.mate@gmail.com>, 2014
+# Evin <tomevin1@gmail.com>, 2016
+# Máté <lang.mate@gmail.com>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-13 22:09+0000\n"
-"Last-Translator: Máté <lang.mate@gmail.com>\n"
-"Language-Team: Hungarian (http://www.transifex.com/projects/p/mpc-hc/language/hu/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-02-20 09:00+0000\n"
+"Last-Translator: Evin <tomevin1@gmail.com>\n"
+"Language-Team: Hungarian (http://www.transifex.com/mpc-hc/mpc-hc/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +65,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Ikonkép mentése..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "F&elirat betöltése..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Felirat menté&se..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Felirat adatbázis"
+msgid "S&ubtitles"
+msgstr "Feliratok"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Keresés..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Felirat betöltése"
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Feltöltés..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Felirat mentése"
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Letöltés..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "Felirat letöltése"
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "Felirat feltöltése"
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -196,13 +193,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Képszétválasztás teszt"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Statisztika megjelenítése"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "Statisztika megjelenítése"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Eltelt idő megjelenítése"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Hátralévő játékidő"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Fájlnév megjelenítése"
msgctxt "POPUP"
msgid "&Output Range"
@@ -404,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Ablak érintése &kívültől"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "Képarány &megtartása"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Képarány felülbírálata"
+msgid "&Aspect Ratio"
+msgstr "Képarány"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Alapértelmezés"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Alapértelmezett képarány"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,6 +433,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "&185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Négyzetes pixelek feltételezése (&SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Monitor/Asztal képarány-eltérés javítása"
@@ -529,9 +530,25 @@ msgid "&Stop"
msgstr "L&eállítás"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "Lé&ptetés"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Ismétlés"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Végtelenített"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "Fájl"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "Lejátszási lista"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "Sebesség &csökkentése"
@@ -553,16 +570,16 @@ msgid "S&haders"
msgstr "&Árnyékolók"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Hangsáv"
+msgid "&Audio Track"
+msgstr "Hangsáv"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "&Feliratok"
+msgid "Su&btitle Track"
+msgstr "Felirat sáv"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Video S&tream"
+msgid "Vide&o Track"
+msgstr "Videó sáv"
msgctxt "POPUP"
msgid "&Volume"
@@ -584,7 +601,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Lejátszás után"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Ne csináljon semmit"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Játssza le a mappában következő fájlt"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Kapcsolja ki a monitort"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "Bezárás"
@@ -608,10 +637,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Zárolás"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Kapcsolja ki a monitort"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "N&avigálás"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.hu.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.hu.strings.po
index c2637820b..903cac00e 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.hu.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.hu.strings.po
@@ -1,15 +1,17 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Máté <lang.mate@gmail.com>, 2014
+# Evin <tomevin1@gmail.com>, 2016
+# Fridrich Losonszki, 2015
+# Máté <lang.mate@gmail.com>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 17:20+0000\n"
-"Last-Translator: Máté <lang.mate@gmail.com>\n"
-"Language-Team: Hungarian (http://www.transifex.com/projects/p/mpc-hc/language/hu/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Hungarian (http://www.transifex.com/mpc-hc/mpc-hc/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -60,10 +62,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Tulajdonságok"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Fájl"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Alap stílus"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Lejátszási lista"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Fájlok"
@@ -82,7 +92,7 @@ msgstr "Idő"
msgctxt "IDS_STATSBAR_SYNC_OFFSET"
msgid "Sync Offset"
-msgstr ""
+msgstr "Szinkronizáció eltolás"
msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
msgid "avg: %d ms, dev: %d ms"
@@ -116,13 +126,33 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr ""
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Ismétlés módja: Lejátszási lista"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Ismétlés módja: Fájl"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Végtelenített ismétlés: Be"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Végtelenített ismétlés: Ki"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Végtelenített ismétlés"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Soha (leggyorsabb)"
msgctxt "IDS_PPAGE_CAPTURE_FG1"
msgid "Only when switching different video types (default)"
-msgstr ""
+msgstr "Csak különböző videótípusok váltásakor (alapértelmezett)"
msgctxt "IDS_PPAGE_CAPTURE_FG2"
msgid "Always (slowest option)"
@@ -146,11 +176,11 @@ msgstr "Soha, ha lehetséges (leggyorsabb, de a legtöbb szűrő nem támogatja)
msgctxt "IDS_PPAGE_CAPTURE_SFG1"
msgid "Only when switching different video types (default)"
-msgstr ""
+msgstr "Csak különböző videótípusok váltásakor (alapértelmezett)"
msgctxt "IDS_PPAGE_CAPTURE_SFG2"
msgid "Always (may be required by some devices)"
-msgstr ""
+msgstr "Mindig (szükséges lehet néhány eszközhöz)"
msgctxt "IDS_INFOBAR_PARENTAL_RATING"
msgid "Parental rating"
@@ -198,7 +228,7 @@ msgstr "Navigációs sáv"
msgctxt "IDS_SUBRESYNC_CAPTION"
msgid "Subresync"
-msgstr ""
+msgstr "Felirat időzítés"
msgctxt "IDS_SUBRESYNC_CLN_TIME"
msgid "Time"
@@ -214,11 +244,11 @@ msgstr "Előnézet"
msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
msgid "Vob ID"
-msgstr ""
+msgstr "Vob ID"
msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
msgid "Cell ID"
-msgstr ""
+msgstr "Cell ID"
msgctxt "IDS_SUBRESYNC_CLN_FORCED"
msgid "Forced"
@@ -250,23 +280,23 @@ msgstr "Élő"
msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
msgid "Can't add video capture filter to the graph"
-msgstr ""
+msgstr "Nem lehet hozzáadni a videó rögzítő szűrőt a grafikonhoz"
msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
msgid "Can't add audio capture filter to the graph"
-msgstr ""
+msgstr "Nem lehet hozzáadni az audio rögzítő szűrőt a grafikonhoz"
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
-msgstr ""
+msgstr "Nem nyitható meg rögzítő eszköz."
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
-msgstr ""
+msgstr "Nem lehet megnyitni, érvénytelen bemeneti paraméterek"
msgctxt "IDS_EDIT_LIST_EDITOR"
msgid "Edit List Editor"
-msgstr ""
+msgstr "Lista Szerkesztő szerkesztése"
msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
msgid "The entered time is greater than the file duration."
@@ -325,11 +355,11 @@ msgid "On/Off"
msgstr "Be/Ki"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
+msgid "From (FPS)"
msgstr "FPS-től"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr "FPS-ig"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -464,6 +494,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Lejátszás::Árnyékolók"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Erőforrások"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Egyéb beállítások"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "Média Infó"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Lejátszás::Rögzítés"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Lejátszás::Sync Renderer beállítások"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Lejátszás::Teljes Képernyő"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Belső szűrők::Audió renderelő"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Audió-váltó"
@@ -488,18 +546,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (windowed)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (windowed)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderless)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (renderless)"
@@ -552,34 +602,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Lejátszó::Webes felület"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Feliratok::Adatbázis"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Erőforrások"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Egyéb beállítások"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "Média Infó"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Lejátszás::Rögzítés"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Lejátszás::Sync Renderer Beállítások"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Lejátszás::Teljes Képernyő"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Jellemzők"
@@ -600,17 +622,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Mindig Overlay módban alakít át. Gyakorlatilag csak YUV formátumokat engedélyez, de ezeket közvetlenül adja tovább bármiféle RGB-re való színkonverzió nélkül. Ez a leggyorsabb átalakítási metódus mindközül és az egyetlen, ahol biztos lehet a teljes képernyős videó tükrözésben még akkor is ha aktiválva van a tv-kimenet."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "A Windows XP alapértelmezett átalakítója. Nagyon stabil és csak egy kicsit lassabb, mint az Overlay mixer. Használja a DirectDraw-ot és Overlay módban fut, ha lehet."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Csak akkor elérhető, ha telepítve van DirectX 9. Ugyanazokkal az adottságokkal rendelkezik, mint a VMR-7 (windowed), de sosem fog Overlay átalakítót használni és éppen ezért egy kicsit talán lassabb is, mint a VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Ugyan az, mint a VMR-7 (windowed), de az MPC-HC Allokátor-Prezentátor beépülő modulja van benne a feliratozáshoz. Az Overlay videó tükrözés NEM FOG működni. Ajánlott 32 bites asztal-színmélységet beállítani mellé."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr ""
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -621,7 +635,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr ""
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Minden videószerű médiatípushoz csatlakozni fog és a bejövő mintákat nem küldi ki sehová. Ezt akkor válassza, ha a videómegjelenítésre nincs szüksége és meg szeretné kímélni a processzorát a felesleges munkától."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -648,10 +662,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "A Real saját átalakítója. A SMIL szkriptek műdödni fognak, de az interaktivitás nem igazán. Használja a DirectDraw-ot és Overlay módban megy, ha lehet."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "A Real-Motor kimenete, amit a DX7-alapú VMR-7 (renderless) átalakító generál."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "A Real-Motor kimenete, amit a DX9-alapú VMR-9 (renderless) átalakító generál."
@@ -660,10 +670,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "A QuickTime saját átalakítója. Egy kicsit belassul, ha a videósáv át van méretezve, vagy ha részben lefedi egy másik ablak. Ha az Overlay mód nem elérhető, GDI-re vált vissza."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "A QuickTime-Motor kimenete, amit a DX7-alapú VMR-7 (renderless) átalakító generál."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "A QuickTime-Motor kimenete, amit a DX9-alapú VMR-9 (renderless) átalakító generál."
@@ -672,22 +678,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "A videó-felület normál képernyőn-kívüli (offscreen) felületként lesz lefoglalva."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "Az MPC Audio Renderer hibás, ne használja."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Hibajelentés"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr ""
@@ -740,9 +734,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (uncompressed)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Belső audió renderelő"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -756,9 +750,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr ""
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Feliratok letöltése"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Felirat letöltése"
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Felirat feltöltése"
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -789,7 +787,7 @@ msgid "Couldn't find all archive volumes"
msgstr ""
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "A videó-felület textúraként lesz lefoglalva, de így is a 2D funkciók lesznek használva, hogy azt rámásoljuk és rányújtsuk a hátoldali-pufferre (backbuffer). Egy olyan videokártya szükséges hozzá, ami képes lefoglalni 32bites, RGBA és nem kettő hatványának megfelelő textúrákat legalább akkora méretben, mint maga a videó."
msgctxt "IDC_TEXTURESURF3D"
@@ -816,6 +814,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr ""
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Tuner keresés"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "A feliratok nem betölthetők, vagy nem támogatott átalakító."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Nyissa meg a VTS_xx_0.ifo fájlt, hogy a VTS_xx_x.vob fájlokat egészben töltse be"
@@ -888,7 +898,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Elnémítás"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Előző hangerő"
@@ -953,11 +963,11 @@ msgid "&Organize Favorites..."
msgstr "&Kedvencek rendezése..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Keverés"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Fájl mappa megnyitása"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -982,7 +992,7 @@ msgstr "Lista törlése"
msgctxt "IDS_RECENT_FILES_QUESTION"
msgid "Are you sure that you want to delete recent files list?"
-msgstr "Biztosan törölni szeretnéd a legutóbb megnyitott fájlok listáját?"
+msgstr "Biztosan törölni szeretné a legutóbb megnyitott fájlok listáját?"
msgctxt "IDS_AG_EDL_SAVE"
msgid "EDL save"
@@ -1041,7 +1051,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Nagyítás Ultra-Szélesvásznúra,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Elrejtés Teljes képernyős módban"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1229,7 +1239,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Tartalmazó mappa hozzáadása"
msgctxt "IDS_HW_INDICATOR"
@@ -1246,7 +1256,7 @@ msgstr "Lejátszási sebesség"
msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
msgid "&Copy filters list to clipboard"
-msgstr ""
+msgstr "Szűrő lista másolása a vágólapra"
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
@@ -1270,7 +1280,7 @@ msgstr ""
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr ""
+msgstr "Külső felirat renderelő használatának megakadályozása, amikor a belső van használatban."
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
@@ -1334,8 +1344,84 @@ msgstr "A felirat késleltetve lesz ennek az értéknek a mértékével, a megfe
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
+msgstr "<nincs megadva>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Mozgatás fel"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Mozgatás le"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Rendezés LCN szerint"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Mindegyik eltávolítása"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Biztosan törölni szeretné az összes csatornát a listából?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Nem áll rendelkezésre információ"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Kérem várjon, analízis folyamatban..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Fájlba naplózás engedélyezése (Újraindítást igényel)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Hátralévő idő"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Nagy pontosság"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Lejátszás után: fájl elejére ugrás"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Lejátszás után: Bezárás"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
msgstr ""
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Belső felirat renderelő"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Eszköz megnyitása"
@@ -1356,13 +1442,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Kép mentése sikeres"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Felirat betöltése"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Feliratok betöltése..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Felirat mentése"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Feliratok mentése..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1385,11 +1471,11 @@ msgid "Stop"
msgstr "Leállítás"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Léptetés"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Visszaléptetés"
msgctxt "IDS_AG_GO_TO"
@@ -1489,8 +1575,8 @@ msgid "Thumbnails saved successfully"
msgstr "Ikonképek mentése sikeres"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Video S&tream"
+msgid "Vide&o Track"
+msgstr "Videó sáv"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1526,7 +1612,7 @@ msgstr "Exportálás nem sikerült! Ez akkor történhet, ha nincs megfelelő jo
msgctxt "IDS_BDA_ERROR"
msgid "BDA Error"
-msgstr ""
+msgstr "BDA hiba"
msgctxt "IDS_AG_DECREASE_RATE"
msgid "Decrease Rate"
@@ -1537,11 +1623,11 @@ msgid "Reset Rate"
msgstr "Sebesség alaphelyzetbe állítása"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Audió késleltetés +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Audió késleltetés -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1554,11 +1640,11 @@ msgstr "Ugrás vissza (kicsi)"
msgctxt "IDS_MPLAYERC_25"
msgid "Jump Forward (medium)"
-msgstr "Ugrás előre (közepes)"
+msgstr "Ugrás előre (közepes)"
msgctxt "IDS_MPLAYERC_26"
msgid "Jump Backward (medium)"
-msgstr "Ugrás vissza (közepes)"
+msgstr "Ugrás vissza (közepes)"
msgctxt "IDS_MPLAYERC_27"
msgid "Jump Forward (large)"
@@ -1612,14 +1698,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Felirat jobbra tolása"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Statisztika megjelenítése"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Ugrás az elejére"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Fájlnév megjelenítése"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "DVD lejátszása"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "BD lejátszása"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Renderelő statisztika megjelenítése"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Renderelő statisztika visszaállítása"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Feliratok::Egyéb"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Ablakszegély elrejtése"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Csak a keret megjelenítése"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Címsor és Menüsor megjelenítése"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Menüsor elrejtése"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Haladó"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Minimális nézet"
@@ -1685,19 +1811,19 @@ msgid "PnS Dec Height"
msgstr "PnL Magasság csökkentése"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Felirat(ok) letöltése, kérem várjon."
+msgid "Downloading [%s] \"%s\""
+msgstr "[%s] letöltése \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
-msgstr ""
+msgstr "Elemzési lista..."
msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
msgid "No subtitles found."
msgstr "Nem talált feliratot."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "%d felirat elérhető."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
@@ -1734,7 +1860,7 @@ msgstr "Nagyítás: Automatikus illesztés (csak nagyobbnál)"
msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
msgid "Double click to open file location"
-msgstr ""
+msgstr "Klikkeljen duplán a fájl mappa megnyitásához"
msgctxt "IDS_TOOLTIP_REMAINING_TIME"
msgid "Toggle between elapsed and remaining time"
@@ -1853,12 +1979,12 @@ msgid "Boss key"
msgstr "Főnök Gomb"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Lejátszó menü (rövid)"
+msgid "Player Menu"
+msgstr "Lejátszó menü"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Lejátszó menü (hosszú)"
+msgid "Player Menu (full)"
+msgstr "Lejátszó menü (teljes)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1869,19 +1995,19 @@ msgid "Options"
msgstr "Beállítások"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Következő audió"
+msgid "Next Audio Track"
+msgstr "Következő hangsáv"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Előző audió"
+msgid "Prev Audio Track"
+msgstr "Előző hangsáv"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
+msgid "Next Subtitle Track"
msgstr "Következő felirat"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
+msgid "Prev Subtitle Track"
msgstr "Előző felirat"
msgctxt "IDS_MPLAYERC_85"
@@ -1892,22 +2018,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Feliratok újratöltése"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Következő audió (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Előző audió (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Következő felirat (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Előző felirat (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Következő látószög (DVD)"
@@ -1917,28 +2027,28 @@ msgid "Prev Angle (DVD)"
msgstr "Előző látószög (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Következő audió (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Következő hangsáv (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Előző audió (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Előző hangsáv (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
+msgid "Next Subtitle Track (DVD)"
msgstr "Következő felirat (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
+msgid "Prev Subtitle Track (DVD)"
msgstr "Előző felirat (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Felirat Ki-Bekapcsolása (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Hátralévő idő"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Eltelt idő megjelenítése"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1964,11 +2074,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Kódolt"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Igen"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Nem"
@@ -2025,11 +2135,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Kötet: %02lu/%02lu, Cím: %02lu/%02lu, Fejezet: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Látószög: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %uHz %dbit %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2120,14 +2230,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Kép szélessége"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "AZ URL érvényesnek tűnik!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Eltérő protokoll verzió, kérem frissítse a lejátszóját, vagy válasszon egy másik címet!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Képméretarány"
@@ -2137,19 +2239,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Összes: %ld, Elejtett: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Méret: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Méret: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Szabad: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Szabad: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2221,7 +2323,7 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr ""
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
msgstr ""
msgctxt "IDS_SUBTITLE_FILES_FILTER"
@@ -2233,11 +2335,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Képméretarány: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Képméretarány: Alapértelmezés"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Képarány: Alapértelmezett"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Audió késleltetés: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2249,8 +2351,8 @@ msgid "Out of memory"
msgstr "Elfogyott a memória"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Error: Flash for IE is required"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Error: Flash for Internet Explorer is required"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2272,10 +2374,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Nem sikerült megjeleníteni a fájlt"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Rossz URL, a megadott címen nem található felirat adatbázis!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "fejezet: "
@@ -2296,14 +2394,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Aktuális"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr ""
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "A memóriakiíratás (dump) fájl nem hozható létre az adott helyen: '%s' (hiba %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Mappa kiválasztása"
@@ -2321,7 +2411,7 @@ msgid "Toggle Caption&Menu"
msgstr "Címsor és Menüsor be- és kikapcsolása"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Keresősáv be- és kikapcsolása"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2406,7 +2496,7 @@ msgstr "&Tulajdonságok..."
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr "Csatlakozó tulajdonságok..."
+msgstr ""
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2477,8 +2567,8 @@ msgid "Volume boost Max"
msgstr "Hangerő erősítés Max"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Használat: mpc-hc.exe \"pathname\" [kapcsolók]\n\n\"pathname\"\tA fő betöltendő fájl vagy mappa helye (spec. helyettesítő karakterek \n\t\tengedélyezve, \"-\" denotes standard input)\n/dub \"dubname\"\tBetölt egy külön audió fájlt\n/dubdelay \"file\"\tBetölt egy külön audió fájlt XX ms-al eltolva (ha a\n\t\tfájl tartalmaz \"...DELAY XXms...\")\n/d3dfs\t\tlejátszó indítása D3D teljes képernyős módban\n/sub \"subname\"\tBetölt egy külön felirat fájlt\n/filter \"filtername\"\tDirectShow szűrőket tölt be egy dynamic link\n\t\tlibrary-ból (spec. helyettesítő karakterek tengedélyezve)\n/dvd\t\tDVD módban való futtatás, a \"pathname\" a dvd \n\t\tmappáját jelenti (opcionális)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tBetölti egy audió CD vagy egy (s)vcd összes műsorszámát, a\n\t\t\"pathname\" a meghajtó betűjelét jelenti (opcionális)\n/device\t\tOpen the default video device\n/open\t\tMegnyitja a fájlt, de nem kezdi el automatikusan eljátszani\n/play\t\tKezdje el lejátszani a fájlt, amint a lejátszó\n\t\telindul\n/close\t\tZárja be a lejátszót a műsör befejeződése után (csak a /play kapcsolóval\n\t\tegyütt használható)\n/shutdown\tÁllítsa le a rendszert a műsor lejátszásának befejeződése után\n/fullscreen\tIndítás teljes képernyős módban\n/minimized\tMinimalizált formában való indítás\n/new\t\tA lejátszó egy új példányának használata\n/add\t\tA \"pathname\" hozzáadása a lejátszási listához, összekombinálható \n\t\taz /open és /play kapcsolóval\n/regvid\t\tVideó formátumok beregisztrálása\n/regaud\t\tAudió formátumok beregisztrálása\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tVideó formátumok beregisztráltságának megszüntetése\n/start ms\t\tX \"ms\" (= ezredmásodperc) után induljon a lejátszás\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tFix ablakméret beállítása\n/monitor N\tIndítás az N. monitoron, ahol N egytől indul\n/audiorenderer N\tN. audió átalakító használata, ahol N egytől indul\n\t\t(lásd \"Kimenet\" beállítások)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tMegmutatja a parancssori kapcsolókról szóló súgót\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2550,11 +2640,11 @@ msgstr "PnL Elforgatás X+"
msgctxt "IDS_AG_VIDFRM_ZOOM1"
msgid "VidFrm Zoom 1"
-msgstr ""
+msgstr "VidFrm nagyítás 1"
msgctxt "IDS_AG_VIDFRM_ZOOM2"
msgid "VidFrm Zoom 2"
-msgstr ""
+msgstr "VidFrm nagyítás 2"
msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
msgid "VidFrm Switch Zoom"
@@ -2564,14 +2654,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Összes szűrő engedélyezése"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Tuner keresés"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "A feliratok nem betölthetők, vagy nem támogatott átalakító."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Ismeretlen szerző. Keressen fel minket, ha ön készítette a logót!"
@@ -2598,7 +2680,7 @@ msgstr "Jobb első"
msgctxt "IDS_FRONT_CENTER"
msgid "Front Center"
-msgstr ""
+msgstr "Front Közép"
msgctxt "IDS_LOW_FREQUENCY"
msgid "Low Frequency"
@@ -2634,7 +2716,7 @@ msgstr "Jobb Oldalsó"
msgctxt "IDS_TOP_CENTER"
msgid "Top Center"
-msgstr ""
+msgstr "Top Közép"
msgctxt "IDS_TOP_FRONT_LEFT"
msgid "Top Front Left"
@@ -2642,7 +2724,7 @@ msgstr "Top Front "
msgctxt "IDS_TOP_FRONT_CENTER"
msgid "Top Front Center"
-msgstr ""
+msgstr "Top Front Közép"
msgctxt "IDS_TOP_FRONT_RIGHT"
msgid "Top Front Right"
@@ -2660,40 +2742,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Top Hátsó Jobb"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Képernyő-statisztika alaphelyzetbe állítása"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Feliratok::Egyéb"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Ablakszegély elrejtése"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Csak a keret megjelenítése"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Címsor és Menüsor megjelenítése"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Menüsor elrejtése"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Haladó"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Keresősáv felett"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Keresősáv alatt"
msgctxt "IDS_VIDEO_STREAM"
@@ -2714,7 +2768,7 @@ msgstr "Mégse"
msgctxt "IDS_THUMB_THUMBNAILS"
msgid "Layout"
-msgstr ""
+msgstr "Elrendezés"
msgctxt "IDS_THUMB_PIXELS"
msgid "Pixels:"
@@ -2858,11 +2912,11 @@ msgstr "Shockwave Flash"
msgctxt "IDS_MFMT_OTHER_AUDIO"
msgid "Other Audio"
-msgstr ""
+msgstr "Egyéb Audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2872,6 +2926,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2936,22 +3010,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Lejátszási lista"
@@ -2976,18 +3034,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Képméretarány"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "WASAPI használata (lejátszás újraindítása szükséges)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Elnémítás előretekeréskor"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Hang eszköz:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "Függőleges szinkronizáció: Bekapcsolva"
@@ -3222,7 +3268,7 @@ msgstr "Ezt a verziót használja: v%s.\n\nA legfrissebb stabil verzió: v%s."
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr "MPC-HC v%s elérhető. Jelenlegi verzió: v%s\n\nSzeretnéd meglátogatni az MPC-HC oldalát és letölteni az újabb verziót?"
+msgstr "MPC-HC v%s elérhető. Jelenlegi verzió: v%s\n\nSzeretné meglátogatni az MPC-HC oldalát és letölteni az újabb verziót?"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
@@ -3276,6 +3322,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Hangerő visszanyerés: Kikapcsolva"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bájt"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3333,7 +3383,7 @@ msgid "Error parsing the entered frame rate!"
msgstr ""
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr ""
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3352,10 +3402,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr ""
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Nem tud csatlakozni az online felirat adatbázishoz."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Akarja aktiválni az EDL szerkesztőt?"
@@ -3406,11 +3452,11 @@ msgstr ""
msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
msgid "Error initializing the output file."
-msgstr ""
+msgstr "Hiba a kimeneti fájl inicializálása közben."
msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
msgid "Error initializing the audio output file."
-msgstr ""
+msgstr "Hiba a kimeneti audió fájl inicializálása közben."
msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
@@ -3424,7 +3470,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Alkalmaznia kell az új beállításokat a tesztelésük előtt."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Lejátszás után: Kilépés"
@@ -3452,6 +3498,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Lejátszás után: kapcsolja ki a monitort"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Lejátszás után: A mappában következő fájl lejátszása"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Lejátszás után: Ne csináljon semmit"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Fényerő: %s"
@@ -3532,3 +3586,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Beállítások"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Letöltések"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Online feliratok keresése sikertelen."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Online feliratok keresése megszakítva."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Online feliratok keresése befejezve, %d felirat találva."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Online feliratok keresése befejezve, nem található felirat."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Feliratok letöltése"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Feliratok online keresése, kérem várjon..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Online feliratok keresésének megszakítása..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Felhasználói név"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Állapot"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Kész..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Nem implementált."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Feltöltés..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Feliratok feltöltése sikeres."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Feliratok feltöltése sikertelen."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Feliratok feltöltése megszakítva."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "A felirat már létezik."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Feliratok feltöltése, kérem várjon..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Feltöltés befejezve."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Feltöltés megszakítva."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Feltöltés nem sikerült."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Letöltés && Megnyitás"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Beállítás"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Visszaállítás"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Mozgatás fel"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Mozgatás le"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "URL megnyitása"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Nyelvek"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "HIBA: Az internetkapcsolat nem hozható létre."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Képméretarány: Négyzetes pixelek feltételezése (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "[%s] letöltve \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Feliratok feltöltése"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Biztos fel akarja tölteni a felirat fájlt: \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Audió késleltetés (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.hy.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.hy.dialogs.po
index a7ded3575..84e58b526 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.hy.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.hy.dialogs.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Hrant Ohanyan <h.ohanyan@haysoft.org>, 2014
+# Hrant Ohanyan <h.ohanyan@haysoft.org>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Armenian (http://www.transifex.com/projects/p/mpc-hc/language/hy/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Armenian (http://www.transifex.com/mpc-hc/mpc-hc/language/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -26,23 +26,23 @@ msgstr "ԼԱՎ"
msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
msgid "Cancel"
-msgstr "Մերժել"
+msgstr "Չեղարկել"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
msgid "Video"
-msgstr "Տեսանյութը"
+msgstr "Տեսանյութ"
msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
msgid "Set"
-msgstr "Պահ."
+msgstr "Կայել"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "Audio"
-msgstr "Ձայնը"
+msgstr "Ձայնանյութ"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "Output"
-msgstr "Պահպանում"
+msgstr "Արտահանում"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
msgid "Record Video"
@@ -50,7 +50,7 @@ msgstr "Տեսագրել"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
msgid "Preview"
-msgstr "Դիտել"
+msgstr "Նախադիտում"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
msgid "Record Audio"
@@ -58,7 +58,7 @@ msgstr "Ձայնագրել"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
msgid "Preview"
-msgstr "Դիտել"
+msgstr "Նախադիտում"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "V/A Buffers:"
@@ -109,7 +109,7 @@ msgid "Enable custom channel mapping"
msgstr "Միացնել ալիքների ընտրված տեղորոշումը"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Սյուների կարագավորում՝"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -117,7 +117,7 @@ msgid "input channels:"
msgstr "մտնող ալիքների."
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Սեղմած պահեք shift-ը՝ փոփոխությունները անհապաղ կիրառելու համար"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -154,7 +154,7 @@ msgstr "Բացել"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Գրեք ֆիլմի կամ ձայնային ֆայլի հասցեն\n(Համացանցում կամ Ձեր համակարգչում)"
+msgstr "Գրեք ֆիլմի կամ ձայնային ֆայլի հասցեն (Համացանցում կամ Ձեր համակարգչում)"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
@@ -182,15 +182,15 @@ msgstr "Մերժել"
msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
msgid "Add to playlist without opening"
-msgstr "Միայն ավելացնել խաղացանկին"
+msgstr "Միայն ավելացնել նվագացանկին"
msgctxt "IDD_ABOUTBOX_CAPTION"
msgid "About"
msgstr "Ծրագրի մասին"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014, կարդացե՛ք Authors.txt ֆայլը"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017, կարդացե՛ք Authors.txt ֆայլը"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -206,7 +206,7 @@ msgstr "Կառուցման տեղեկությունը"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Version:"
-msgstr "Տարբերակը."
+msgstr "Տարբերակ."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Compiler:"
@@ -222,7 +222,7 @@ msgstr "Կառուցման ամսաթիվը."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Operating system"
-msgstr "Օպերացիոն համակարգը"
+msgstr "Օպերացիոն համակարգ"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Name:"
@@ -250,7 +250,7 @@ msgstr "Նոր վերարտադրիչ յուրաքանչյուր ֆայլի հա
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Language"
-msgstr "Լեզուն"
+msgstr "Լեզու"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Title bar"
@@ -306,7 +306,7 @@ msgstr "Գործողության բարձր առաջնայնություն"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
-msgstr ""
+msgstr "Միացնել cover-art-ի աջակցում"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "History"
@@ -318,7 +318,7 @@ msgstr "Պահպանել բացված ֆայլերի պատ-ը"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
msgid "Remember last playlist"
-msgstr "Հիշել վերջին խաղացանկը"
+msgstr "Հիշել վերջին նվագացանկը"
msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
msgid "Remember File position"
@@ -386,11 +386,11 @@ msgstr "Բարձրությունը"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Min"
-msgstr ""
+msgstr "Նվզ."
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Max"
-msgstr ""
+msgstr "Առվ."
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
msgid "Balance"
@@ -398,11 +398,11 @@ msgstr "Բալանսը"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "L"
-msgstr ""
+msgstr "L"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "R"
-msgstr ""
+msgstr "R"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Playback"
@@ -421,12 +421,16 @@ msgid "time(s)"
msgstr "անգամ"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Կրկնելու կերպը՝"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
-msgstr ""
+msgstr "Նվագարկումից հետո"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Արտածում"
+msgid "Default zoom"
+msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -454,7 +458,7 @@ msgstr "Ձայնի"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr "Թույլատրել արտաքին բաժանիչների վերակարգավորումը"
+msgstr "Թույլատրել արտաքին բաժանիչների վերակարգավորումը"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
@@ -472,10 +476,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Ձայնի ֆայլերի ինքնաբացում"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr ""
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Կառավարում"
@@ -514,7 +514,7 @@ msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr ""
+msgstr "Ուշացման քայլ"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -534,42 +534,42 @@ msgstr "Արտապատկերման մաքսիմալ ընդլայնումը."
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
msgid "Never animate the subtitles"
-msgstr ""
+msgstr "Երբեք չշարժունացնել տողագրերը"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
msgid "Render at"
-msgstr ""
+msgstr "Նյութավորել"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
msgid "% of the animation"
-msgstr ""
+msgstr "% շարժունացում"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
msgid "Animate at"
-msgstr ""
+msgstr "Շարժունացնել"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
msgid "% of the video frame rate"
-msgstr ""
+msgstr "% տեսանյութի Կադրերի հաճախությունը"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr ""
+msgstr "Թույլատրել պատկերների որոշ մասերի գցումը, եթե հերթը ուշանում է"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
-msgstr ""
+msgstr "Նյութավորիչի դասավորություն"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
msgid "Apply aspect ratio compensation for anamorphic videos"
-msgstr ""
+msgstr "Կիրառել կողմերի հարաբերություն փոխհատուցումը անամորֆիկ տեսանյութերի համար"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Warning"
msgstr "Ուշադրություն"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Եթե փոխեք դիրքը և կարգավորեք տեսաքարտի էկրանային լղոզումը, ապա տողագրերը ավելի լավ չեն երևա, այլ փոխարենը կխլեն մեծ ռեսուրսներ։"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -590,15 +590,15 @@ msgstr "Ասոցիացումներ"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr ""
+msgstr "Օգտ. ձևաչափի ուրույն պատկերակներ"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr ""
+msgstr "Մեկնարկել որպես &ադմին"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "Նշել որպես &հիմնական ծրագիր"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -676,16 +676,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Չփոքրացնել պատուհանը՝ Ամբողջ էկրանով ոչ հիմնական մոնիտորի վրա վերարտադրելիս։"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Օգտագործել Windows 7-ի առաջադրանքի վահանակի հնարավորությունները"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr ""
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Բացել հաջորդ/նախորդ ֆայլը թղթապանակում \"Հետ/Առաջ\"-ի միջոցով, եթե խաղացանկում առկա է մեկ ֆայլ։"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Բացել հաջորդ/նախորդ ֆայլը թղթապանակում \"Հետ/Առաջ\"-ի միջոցով, եթե նվագացանկում առկա է մեկ ֆայլ։"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Օգտ. ժամանակի հուշումը"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -698,7 +698,7 @@ msgstr "Միացնել Logitech LCD-ի աջակցումը (փորձարկվու
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
-msgstr ""
+msgstr "Ինքնաթաքցնել մկնիկի նշորդը նվագարկելիս պատուհանի կերպում"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
msgid "Add Filter..."
@@ -714,7 +714,7 @@ msgstr "Նախապատվել"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO2"
msgid "Block"
-msgstr "Կողփել"
+msgstr "Կապանել"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
msgid "Set merit:"
@@ -730,11 +730,11 @@ msgstr "Վար"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
msgid "Add Media Type..."
-msgstr "Նոր տեսակ..."
+msgstr "Ավելացնել մեդիայի տեսակ..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
msgid "Add Sub Type..."
-msgstr "Նոր տողագիր..."
+msgstr "Ավելացնել տողագրի տեսակ.."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
msgid "Delete"
@@ -742,23 +742,23 @@ msgstr "Ջնջել"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
msgid "Reset List"
-msgstr "Ետարկել"
+msgstr "Վերակայել ցանկը"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Type:"
-msgstr "Տեսակը."
+msgstr "Տեսակ."
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Size:"
-msgstr "Ծավալը."
+msgstr "Չափ."
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Media length:"
-msgstr "Տևողությունը."
+msgstr "Տևողություն."
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Video size:"
-msgstr "Չափը."
+msgstr "Տեսանյութի չափ."
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Created:"
@@ -802,7 +802,7 @@ msgstr "Հիշել դիրքը"
msgctxt "IDD_FAVADD_IDCANCEL"
msgid "Cancel"
-msgstr "Մերժել"
+msgstr "Չեղարկել"
msgctxt "IDD_FAVADD_IDOK"
msgid "OK"
@@ -810,7 +810,7 @@ msgstr "ԼԱՎ"
msgctxt "IDD_FAVADD_IDC_CHECK2"
msgid "Relative drive"
-msgstr "Հարաբերված սկավառակին"
+msgstr "Հարաբերական սկավառակին"
msgctxt "IDD_FAVORGANIZE_CAPTION"
msgid "Organize Favorites"
@@ -818,7 +818,7 @@ msgstr "Դասավորել ընտրյալները"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
msgid "Rename"
-msgstr "Անվանափոխել"
+msgstr "Վերանվանել"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
msgid "Move Up"
@@ -862,7 +862,7 @@ msgstr "&Տեղակայել"
msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
msgid "&Cancel"
-msgstr "&Մերժել"
+msgstr "&Չեղարկել"
msgctxt "IDD_PNSPRESET_DLG_IDOK"
msgid "&Save"
@@ -886,7 +886,7 @@ msgstr "Ընտրել բոլորը"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
msgid "Reset Selected"
-msgstr "Ետարկել ընտրումը"
+msgstr "Վերակայել ընտրվածը"
msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
msgid "Warning"
@@ -930,11 +930,11 @@ msgstr "մվ"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
msgid "Save custom style"
-msgstr ""
+msgstr "Պահպանել հարմարեցված ոճը"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr ""
+msgstr "JPEG-ի որակ."
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Thumbnails:"
@@ -970,35 +970,35 @@ msgstr "ԼԱՎ"
msgctxt "IDD_ADDREGFILTER_IDCANCEL"
msgid "Cancel"
-msgstr "Մերժել"
+msgstr "Չեղարկել"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Font"
-msgstr "Տառատեսակը"
+msgstr "Տառատեսակ"
msgctxt "IDD_PPAGESUBSTYLE_IDC_BUTTON1"
msgid "Font"
-msgstr "Տառատեսակը"
+msgstr "Տառատեսակ"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Spacing"
-msgstr "Դադար"
+msgstr "Բացատ"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Angle (z,°)"
-msgstr "Անկյունը (z,°)"
+msgstr "Անկյուն (z,°)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Scale (x,%)"
-msgstr "Անկյունը (x,%)"
+msgstr "Անկյուն (x,%)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Scale (y,%)"
-msgstr "Անկյունը (y,%)"
+msgstr "Անկյուն (y,%)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Border Style"
-msgstr "Շրջանակի ձևը"
+msgstr "Շրջանակի ձև"
msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
msgid "Outline"
@@ -1082,19 +1082,19 @@ msgstr "Ապակոդավորիչներ"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Internal LAV Filters settings"
-msgstr ""
+msgstr "Ներքին LAV զտիչների կարգավորումներ"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
msgid "Splitter"
-msgstr ""
+msgstr "Տրոհիչ"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
msgid "Video decoder"
-msgstr ""
+msgstr "Տեսանյութի ապակոդավորիչ"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
msgid "Audio decoder"
-msgstr ""
+msgstr "Ձայնանյութի ապակոդավորիչ"
msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
msgid "Internal:"
@@ -1125,8 +1125,8 @@ msgid "Audio Renderer"
msgstr "Ձայնի նյութավորիչ"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (renderless) և EVR (CP) կարգավորումներ"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderless) և EVR (CP) կարգավորումներ"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1169,8 +1169,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Տողագրերը *"
+msgid "Subtitles"
+msgstr ""
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1185,8 +1185,12 @@ msgid "Rotation"
msgstr "Շրջել"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Արտաքին զտիչներ(ինչպես օրինակ՝ VSFilter) կարող է ցուցադրել տողագրերը բոլոր ռենդերներում:"
+msgid "Subtitle Renderer"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1204,6 +1208,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Թույլատրել մուտքը միայն համակարգչից"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr ""
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Արտածել տեղեկությունը"
@@ -1229,17 +1237,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI մեկնիչ. (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Հասանելի տողագրերի ցանկը"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Բեռնել և Բացել"
+msgid "Download subtitles"
+msgstr "Բեռնել տողագրերը"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Փոփոխել արդեն բացված տողագրերը"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Ընտրանքներ"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Ընտրանքներ"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Պահպանել որպես..."
@@ -1266,7 +1302,7 @@ msgstr "Խտայնությունը"
msgctxt "IDD_PPAGEMISC_IDC_RESET"
msgid "Reset"
-msgstr "Ետարկել"
+msgstr "Վերակայել"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Update check"
@@ -1277,8 +1313,8 @@ msgid "Enable automatic update check"
msgstr "Միացնել թարմացումների ստուգումը"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Ստուգել յուրաքանչյուր՝"
+msgid "Check every:"
+msgstr "Ստուգել յուրք.՝"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1290,7 +1326,7 @@ msgstr "Կարգավորումների կառավարում"
msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
msgid "Reset"
-msgstr "Ետարկել"
+msgstr "Վերակայել"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
msgid "Export"
@@ -1310,7 +1346,7 @@ msgstr "Սկսել"
msgctxt "IDD_TUNER_SCAN_IDCANCEL"
msgid "Cancel"
-msgstr "Մերժել"
+msgstr "Չեղարկել"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Freq. Start"
@@ -1334,7 +1370,7 @@ msgstr "Պահպանել"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "S"
-msgstr ""
+msgstr "S"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Q"
@@ -1458,7 +1494,7 @@ msgstr "Բացել ֆայլերը ամբողջ էկրանով"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
msgid "Hide controls in fullscreen"
-msgstr ""
+msgstr "Թաքցնել կառավարումը Լիաէկրան եղանակում"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
msgid "ms"
@@ -1466,7 +1502,7 @@ msgstr "մվ"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
msgid "Hide docked panels"
-msgstr ""
+msgstr "Թաքցնել հարակցված վահանակները"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
msgid "Exit fullscreen at the end of playback"
@@ -1506,7 +1542,7 @@ msgstr "Վերականգնել չափը՝ ծրագիրը փակելիս"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Delay"
-msgstr ""
+msgstr "Ուշացում"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
msgid "s"
@@ -1538,19 +1574,31 @@ msgstr "Տողագրերի ճանապարհը"
msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
msgid "Reset"
-msgstr "Ետարկել"
+msgstr "Վերակայել "
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Ցանցային տվյալներ"
+msgid "Online search, download and upload subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr ""
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Տողագրերի ցանցային բազայի URL-ն."
+msgid "Languages in order of preference:"
+msgstr ""
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Թեստ"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr ""
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1570,11 +1618,11 @@ msgstr "&Անտեսել թարմացումը"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr ""
+msgstr "Շեյդերները պարունակում են հատուկ էֆեկտներ, որոնք կարող են ավելացվել տեսանյութի նյութավորմանը"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
-msgstr ""
+msgstr "Ավելացնել շեյդերի ֆայլ"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
msgid "Remove"
@@ -1582,19 +1630,19 @@ msgstr "Ջնջել"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
msgid "Add to pre-resize"
-msgstr ""
+msgstr "Ավելացնել նախաչափափոխում"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
msgid "Add to post-resize"
-msgstr ""
+msgstr "Ավելացնել հետչափափոխում"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
-msgstr ""
+msgstr "Շեյդերների նախակայումներ"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
msgid "Load"
-msgstr ""
+msgstr "Բեռնել"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
msgid "Save"
@@ -1606,19 +1654,19 @@ msgstr "Ջնջել"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active pre-resize shaders"
-msgstr ""
+msgstr "Ակտիվ նախաչափափոխված շեյդերներ"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active post-resize shaders"
-msgstr ""
+msgstr "Ակտիվ հետչափափոխված շեյդերներ"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
-msgstr ""
+msgstr "Վրիպազերծման շեյդերներ"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
msgid "Debug Information"
-msgstr ""
+msgstr "Վրիպազերծման տեղեկություն"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
msgid "PS 2.0"
@@ -1638,29 +1686,109 @@ msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr ""
+msgstr "Ընդլայնված կարգավորումներ, մի խմբագրեք, եթե չգիտեք, թե ինչ եք անում:"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
-msgstr ""
+msgstr "Ճիշտ"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
msgid "False"
-msgstr ""
+msgstr "Կեղծ"
msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Ծրագրային"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Սարք"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Ընտրանքներ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Մակարդակ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr ""
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr ""
+msgstr "JPEG-ի որակ."
msgctxt "IDD_CMD_LINE_HELP_CAPTION"
msgid "Command line help"
-msgstr ""
+msgstr "Հրամանի տողի օգնություն"
msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "ԼԱՎ"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Վթարի զեկույց"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Ուղարկեք մեզ խնդրի մասին զեկույց՝ այն ուղղելու համար:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Լրացուցիչ"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Էլ. փոստ."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Էլ. փոստի հասցեն լրացուցիչ է և կօգտագործվի միայն Ձեզ պատասխանելու համար:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Խնդրի նկարագրություն (միայն անգլերենով)."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Վերագործարկել MPC-HC-ը"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Փակել MPC-HC-ը"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.hy.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.hy.menus.po
index 2c2695b8c..81c8f35c2 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.hy.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.hy.menus.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Hrant Ohanyan <h.ohanyan@haysoft.org>, 2014
+# Hrant Ohanyan <h.ohanyan@haysoft.org>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:01+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Armenian (http://www.transifex.com/projects/p/mpc-hc/language/hy/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-05-24 15:44+0000\n"
+"Last-Translator: Hrant Ohanyan <h.ohanyan@haysoft.org>\n"
+"Language-Team: Armenian (http://www.transifex.com/mpc-hc/mpc-hc/language/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +64,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Պահպանել մանրապատկերներով..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Բացել տողագրերը..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Պա&հպանել տողագրերը..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Տողագրերի բազան"
+msgid "S&ubtitles"
+msgstr "Տողագիր"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Գտնել..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Փոխանցել..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Բեռնել..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr ""
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -98,7 +94,7 @@ msgstr "Փ&ակել"
msgctxt "POPUP"
msgid "&View"
-msgstr "&Տեսքը"
+msgstr "&Տեսք"
msgctxt "ID_VIEW_CAPTIONMENU"
msgid "Caption&&Menu"
@@ -146,7 +142,7 @@ msgstr "&Վրիպազերծում"
msgctxt "POPUP"
msgid "&Presets..."
-msgstr "Արտաքին տեսքը..."
+msgstr "&Նախակայումներ..."
msgctxt "ID_VIEW_PRESETS_MINIMAL"
msgid "&Minimal"
@@ -196,13 +192,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Սրընթաց թեստ"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "&Ցուցադրել վիճակագրությունը"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Մնացած ժամանակը"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Ցուցադրել ընթացիկ ժ&ամանակը"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Ցուցադրել &ֆայլի անունը"
msgctxt "POPUP"
msgid "&Output Range"
@@ -222,11 +222,11 @@ msgstr "&Ներկայացում"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
-msgstr "Ամբողջ էկրանով D3D"
+msgstr "Ամբողջ էկրանով D3D"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "Ամբողջ էկրանով D3D՝ GUI-ի աջակցմամբ"
+msgstr "Ամբողջ էկրանով D3D՝ GUI-ի աջակցմամբ"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
@@ -362,11 +362,11 @@ msgstr "Ետարկել"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "Ետարկել ստանդարտ կարգավորումների"
+msgstr "Վերակայել &ստանդարտ կարգավորումների"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "Ետարկել օպտիմալ կարգավորումների"
+msgstr "Վերակայել &օպտիմալ կարգավորումների"
msgctxt "POPUP"
msgid "Video &Frame"
@@ -404,17 +404,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Նկարագրել պատուհանից &դուրս"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Պահպանել համամասնությունները"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Նշել համամասնությունները"
+msgid "&Aspect Ratio"
+msgstr ""
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Ըստ ծրագրայինի"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr ""
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,6 +432,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Հաշվի առնել մոնիտորի և Աշխատասեղանի տարբերությունները"
@@ -529,9 +529,25 @@ msgid "&Stop"
msgstr "&Կանգնեցնել"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "Ըստ &կադրերի"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Կրկնել"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Մ&իշտ"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Ֆայլը"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Նվագացանկը"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Փոքրացնել արագությունը"
@@ -553,16 +569,16 @@ msgid "S&haders"
msgstr "Շ&եյդերներ"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Ձայնը"
+msgid "&Audio Track"
+msgstr "&Ձայնային շավիղ"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Տ&ողագրեր"
+msgid "Su&btitle Track"
+msgstr "Տող&ագրի շավիղ"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Տեսանյութի հ&ոսքը"
+msgid "Vide&o Track"
+msgstr "&Տեսանյութ"
msgctxt "POPUP"
msgid "&Volume"
@@ -584,7 +600,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Վերարտադրումը ավարտելիս"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Ոչինչ չանե&լ"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Խաղարկել &թղթապանակի հաջորդ ֆայլը"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Անջատել &դիտազննումը"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "Փակել ծրագիրը"
@@ -608,10 +636,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Կողպել"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr ""
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Կառավարում"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.hy.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.hy.strings.po
index 648ff4a56..91d565226 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.hy.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.hy.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Hrant Ohanyan <h.ohanyan@haysoft.org>, 2014
+# Hrant Ohanyan <h.ohanyan@haysoft.org>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Armenian (http://www.transifex.com/projects/p/mpc-hc/language/hy/)\n"
+"Language-Team: Armenian (http://www.transifex.com/mpc-hc/mpc-hc/language/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,11 +18,11 @@ msgstr ""
msgctxt "IDS_INFOBAR_LOCATION"
msgid "Location"
-msgstr "Տեղը"
+msgstr "Տեղադրություն"
msgctxt "IDS_INFOBAR_VIDEO"
msgid "Video"
-msgstr "Տեսանյութը"
+msgstr "Տեսանյութ"
msgctxt "IDS_INFOBAR_AUDIO"
msgid "Audio"
@@ -30,11 +30,11 @@ msgstr "Ձայնը"
msgctxt "IDS_INFOBAR_SUBTITLES"
msgid "Subtitles"
-msgstr "Տողագիրը"
+msgstr "Տողագիր"
msgctxt "IDS_INFOBAR_CHAPTER"
msgid "Chapter"
-msgstr "Գլուխը"
+msgstr "Գլուխ"
msgctxt "IDS_CONTROLS_COMPLETING"
msgid "Completing..."
@@ -42,28 +42,36 @@ msgstr "Ամբողջացվում է..."
msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
msgid "Play Video"
-msgstr "Վերարտադրել տեսանյութ"
+msgstr "Խաղարկել տեսանյութ"
msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
msgid "Play Music"
-msgstr "Նվագարկել երաժշտություն"
+msgstr "Խաղարկել երաժշտություն"
msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
msgid "Play Audio CD"
-msgstr "Նվագարկել Audio CD"
+msgstr "Խաղարկել Audio CD"
msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
msgid "Play DVD Movie"
-msgstr "Վերարտադրել DVD Ֆիլմ"
+msgstr "Խաղարկել DVD Ֆիլմ"
msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Հատկություններ"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr ""
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Ոճը ըստ ծրագրայինի"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Նվագացանկ"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Ֆիլտրեր"
@@ -74,7 +82,7 @@ msgstr "DVD-ներ"
msgctxt "IDS_INFOBAR_CHANNEL"
msgid "Channel"
-msgstr "Ալիքը"
+msgstr "Ալիք"
msgctxt "IDS_INFOBAR_TIME"
msgid "Time"
@@ -90,7 +98,7 @@ msgstr "միջ. %d մվ, անջ. %d մվ"
msgctxt "IDS_STATSBAR_JITTER"
msgid "Jitter"
-msgstr "Ջիթերը"
+msgstr "Ջիթեր"
msgctxt "IDS_STATSBAR_BITRATE"
msgid "Bitrate"
@@ -102,7 +110,7 @@ msgstr "(միջ./ընթ.)"
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
-msgstr "Ազդանշանը"
+msgstr "Ազդանշան"
msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
msgid "Strength: %d dB, Quality: %ld%%"
@@ -116,6 +124,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr ""
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Կրկնելու կերպը՝ Նվագացանկը"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Երբեք (արագ է)"
@@ -134,7 +162,7 @@ msgstr "Որոշ սարքեր չեն աջակցում:Երկու տեսակոդ
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr "Արագ բացառություն, երբ անցում է կատարվում տարբեր տեսահոսքերի միջև: Միայն մեկ տեսակոդավորիչ է ներկայացված ֆիլտրի գրաֆայում:"
+msgstr "Արագ բացառություն, երբ անցում է կատարվում տարբեր տեսահոսքերի միջև: Միայն մեկ տեսակոդավորիչ է ներկայացված ֆիլտրի գրաֆայում:"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
@@ -166,7 +194,7 @@ msgstr "Չունի վարկանիշ"
msgctxt "IDS_INFOBAR_CONTENT"
msgid "Content"
-msgstr "Բովանդակությունը"
+msgstr "Բովանդակություն"
msgctxt "IDS_CONTENT_MOVIE_DRAMA"
msgid "Movie/Drama"
@@ -174,7 +202,7 @@ msgstr "Ֆիլմ/Դրամա"
msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
msgid "News/Current affairs"
-msgstr "ՆորություննեԸնթացիկ գործերs"
+msgstr "Նորություններ/Ընթացիկ գործեր"
msgctxt "IDS_SPEED_UNIT_G"
msgid "GB/s"
@@ -198,11 +226,11 @@ msgstr "Ուղղորդման վահանակը"
msgctxt "IDS_SUBRESYNC_CAPTION"
msgid "Subresync"
-msgstr ""
+msgstr "Subresync"
msgctxt "IDS_SUBRESYNC_CLN_TIME"
msgid "Time"
-msgstr "Ժամանակը"
+msgstr "Ժամանակ"
msgctxt "IDS_SUBRESYNC_CLN_END"
msgid "End"
@@ -210,11 +238,11 @@ msgstr "Վերջ"
msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
msgid "Preview"
-msgstr "Դիտում"
+msgstr "Նախադիտում"
msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
msgid "Vob ID"
-msgstr ""
+msgstr "Vob ID"
msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
msgid "Cell ID"
@@ -226,15 +254,15 @@ msgstr "Հարկադիր"
msgctxt "IDS_SUBRESYNC_CLN_TEXT"
msgid "Text"
-msgstr "Տեքստը"
+msgstr "Տեքստ"
msgctxt "IDS_SUBRESYNC_CLN_STYLE"
msgid "Style"
-msgstr "Ոճը"
+msgstr "Ոճ"
msgctxt "IDS_SUBRESYNC_CLN_FONT"
msgid "Font"
-msgstr "Տառը"
+msgstr "Տառատեսակ"
msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
msgid "Failed to render some of the pins of the DVD Navigator filter"
@@ -278,7 +306,7 @@ msgstr "Պատկերների շտեմարանը՝ \"mpciconlib.dll\", բացակ
msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
msgid "File"
-msgstr "Ֆայլը"
+msgstr "Ֆայլ"
msgctxt "IDS_SUBDL_DLG_LANGUAGE_COL"
msgid "Language"
@@ -286,11 +314,11 @@ msgstr "Լեզուն"
msgctxt "IDS_SUBDL_DLG_FORMAT_COL"
msgid "Format"
-msgstr "Տեսակը"
+msgstr "Տեսակ"
msgctxt "IDS_SUBDL_DLG_DISC_COL"
msgid "Disc"
-msgstr "Խտասկավառակը"
+msgstr "Խտասկավառակ"
msgctxt "IDS_SUBDL_DLG_TITLES_COL"
msgid "Title(s)"
@@ -298,7 +326,7 @@ msgstr "Վերնագիրը"
msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
msgid "CharSet"
-msgstr "Կոդավորումը"
+msgstr "Կոդավորում"
msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
msgid "Unicode"
@@ -306,30 +334,30 @@ msgstr "Յունիքոդ"
msgctxt "IDS_SUBRESYNC_CLN_LAYER"
msgid "Layer"
-msgstr "Շերտը"
+msgstr "Շերտ"
msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
msgid "Actor"
-msgstr "Դերասանը"
+msgstr "Դերասան"
msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
msgid "Effect"
-msgstr "Էֆեկտը"
+msgstr "Էֆեկտ"
msgctxt "IDS_PLAYLIST_CAPTION"
msgid "Playlist"
-msgstr "Խաղացանկը"
+msgstr "Նվագացանկ"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
msgstr "Միաց./Անջ."
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
+msgid "From (FPS)"
msgstr "Fps-ից"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr "Fps-ից"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -350,7 +378,7 @@ msgstr "Համակարգային"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
-msgstr "Չհաջողվեց ստանալ պահանջվող վերարտադրման հերթականությունը"
+msgstr "Չհաջողվեց ստանալ պահանջվող նվագարկման հերթականությունը"
msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
msgid "Could not set target window for graph notification"
@@ -390,7 +418,7 @@ msgstr "Դասավորել &ըստ անվան"
msgctxt "IDS_PLAYLIST_SORTBYPATH"
msgid "Sort by &path"
-msgstr "Դասավորել ըստ &ճանապարհի"
+msgstr "Տեսակավորել ըստ &ուղու"
msgctxt "IDS_PLAYLIST_RANDOMIZE"
msgid "R&andomize"
@@ -414,7 +442,7 @@ msgstr "Կ&րկնօրինակել"
msgctxt "IDS_SUBRESYNC_RESET"
msgid "&Reset"
-msgstr "&Ետարկել"
+msgstr "&Վերակայել"
msgctxt "IDS_MPLAYERC_104"
msgid "Subtitle Delay -"
@@ -464,6 +492,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Վերարտադրում::Շեյդերներ"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Ռեսուրսներ"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Տարբեր"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Վերարտադրում::տեսագրում"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Վերարտադրում::Sync Renderer-ի կարգավորումներ"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Վերարտադրում::Ամբողջ էկրանով"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr ""
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Ձայնի անջատիչ"
@@ -478,7 +534,7 @@ msgstr "Վերասոցիացնե՞լ պատկերները:"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
-msgstr "Սա կուղղի սխալ պատկերվող պատկերները, ինչը կարող է պատահել խպատկերների շտեմարանը թարմացնելիս:\nՖայլերի ասոցիացումները չեն փոփոխվի, պատկերները պարզապես կթարմացվեն:"
+msgstr "Սա կուղղի սխալ պատկերվող պատկերները, ինչը կարող է պատահել խպատկերների շտեմարանը թարմացնելիս:\nՖայլերի ասոցիացումները չեն փոփոխվի, պատկերները պարզապես կթարմացվեն:"
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
@@ -488,45 +544,37 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr ""
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
-msgstr ""
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr ""
+msgstr "Video Mixing Renderer 9 (windowed)"
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
-msgstr ""
+msgstr "Video Mixing Renderer 9 (renderless)"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
-msgstr ""
+msgstr "Enhanced Video Renderer"
msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
msgid "Enhanced Video Renderer (custom presenter)"
-msgstr ""
+msgstr "Enhanced Video Renderer (custom presenter)"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
-msgstr ""
+msgstr "Haali Video Renderer"
msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
msgid "Null (anything)"
-msgstr ""
+msgstr "Null (ցանկացած)"
msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr ""
+msgstr "Null (չսեղմած)"
msgctxt "IDS_PPAGE_OUTPUT_MADVR"
msgid "madVR"
-msgstr ""
+msgstr "madVR"
msgctxt "IDD_PPAGEACCELTBL"
msgid "Player::Keys"
@@ -552,34 +600,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Վերարտադրիչը::Web տեսքը"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Տողագրերը::Բազան"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Ռեսուրսներ"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Տարբեր"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr ""
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Վերարտադրում::տեսագրում"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Վերարտադրում::Sync Renderer-ի կարգավորումներ"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Վերարտադրում::Ամբողջ էկրանով"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Մանրամասն"
@@ -598,19 +618,11 @@ msgstr "Ցուցադրման եղանակը ըստ ծրագրայինի Windows
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "Հիմնականում հասանելի են միայն YUV տեսակները, բայց դրանք ներկայացվում են ուղղակիորեն՝ առանց ձևափոխման RGB-ի։ Սա ամենաարագ եղանակն է բոլորից և միայն այստեղ է, որ համաչափորեն աշխատում է տեսանյութի \"հայելային\" արտածումը (TV-OUT-ի վրա)։"
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Տեսանյութի ցուցադրումը ըստ ծրագրայինի Windows XP-ի համար։ Շատ ստաբիլ է և փոքր ինչ դանդաղ է Overlay mixer եղանակից։ Օգտագործում է DirectDraw և հնարավորության դեպքում բացվում է Overlay-ում։"
+msgstr "Հիմնականում հասանելի են միայն YUV տեսակները, բայց դրանք ներկայացվում են ուղղակիորեն՝ առանց ձևափոխման RGB-ի։ Սա ամենաարագ եղանակն է բոլորից և միայն այստեղ է, որ համաչափորեն աշխատում է տեսանյութի \"հայելային\" արտածումը (TV-OUT-ի վրա)։"
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Հասանելի է տեղակայված DirectX 9-ի դեպքում։ Հնարավորությունները նույն են ինչ VMR-7 (windowed)-ում, բայց երբեք չի օգտագործում է Overlay, դրա հանար կարող է փոքր ինչ դանդաղ լինել VMR-7 (windowed)-ից։"
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Նույնն է ինչ VMR-7 (windowed)-ը, բայց ունի տողագրերի արտածման MPC-HC Allocator-Presenter օժանդակիչ։ Տեսանյութի \"Հայելային\" արտապատկերումը Overlay-ում չի աշխատի։ Գույնի առումով խորհուրդ է տրվում նշել 'True Color'։"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr ""
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -621,7 +633,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr ""
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Միանում է ցանկացած տեսակի տեսատվյալների և մտնող կադրերը ոչ մի տեղ չի ուղարկում։ Այս եղանակը կարող է օգտակար լինել, եթե անհրաժեշտ է պահպանել ռեսուրսներից միայն ձայնը։"
msgctxt "IDC_DSNULL_UNCOMP"
@@ -648,10 +660,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "RealMedia-ի սեփական ցուցադրիչը։ SMIL գրվածքները կաշխատեն։ Օգտագործում է DirectDraw և հնարավորության դեպքում բացվում է Overlay-ում։"
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "RealMedia-ի արտածումը մշակվում է Allocator-Presenter օժանդակիչի միջոցով VMR-7 (renderless)-ում։"
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "RealMedia-ի արտածումը մշակվում է Allocator-Presenter օժանդակիչի միջոցով VMR-9 (renderless)-ում։"
@@ -660,10 +668,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "QuickTime-ի սեփական ցուցադրիչը։ Դանդաղում է կադրի չափի փոփոխման դեպքում։ Եթե Overlay-ը հասանելի չէ անցեք GDI-ի եղանակի։"
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "QuickTime-ի արտածումը մշակվում է Allocator-Presenter օժանդակիչի միջոցով VMR-7 (renderless)-ում։"
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "QuickTime-ի արտածումը մշակվում է Allocator-Presenter օժանդակիչի միջոցով VMR-9 (renderless)-ում։"
@@ -672,22 +676,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Տեսանյութի մակերեսը առանձնացվում է որպես էկրանից դուրս։"
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC-ի ձայնի ռենդերերը վնասված է և չի օգտագործվում:"
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Սինքի ռենդերերը"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr ""
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC-ը խափանվեց, բայց այս կմշակումը հավաքվել է առանց սխալների ուղղման տեղեկության:\nԵթե ցանկանում եք հաղորդել խնդրի մասին, նախ փորձեք պաշտոնական տարբերակը:\n\nԲացե՞լ ներբեռնելու էջը:"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Սովորական մակերես էկրանից դուրս"
@@ -734,14 +726,14 @@ msgstr "Ընտրված ռենդերերը տեղադրված չէ:"
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
-msgstr ""
+msgstr "Null (ցանկացած)"
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr ""
+msgstr "Null (չսեղմած)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
msgstr ""
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
@@ -756,9 +748,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Դիտարկիչում ներդրված ռեսուրսը դիտելու համար դուք պետք է միացնեք վեբ միջերեսը:\n\nՕգտագործեք \"Պահպանել որպես\" bկոճակը, եթե պարզապես ցանկանում եք պահպանել տեղեկությունը:"
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Բեռնել տողագրերը"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr ""
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -789,7 +785,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Արխիվի բոլոր հատորները չեն գտնվել"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Տեսանյութի մակերեսը առանձնացվում է որպես արտապատկերում, բայց տեսանյութի պատճենման և ձգման համար օգտագործվում է 2D ֆունկցիան։ Պահանջում է տեսաքարտի առկայություն, որը կարող է կատարել 32bit RGBA արտապատկերումներ։"
msgctxt "IDC_TEXTURESURF3D"
@@ -816,6 +812,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr ""
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Թյուների կարգավորում"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Տողադրերը չեն բացվել կամ չի աջակցվում։"
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Բացում է VTS_xx_0.ifo ֆայլերը՝ VTS_xx_x.vob ֆայլերի խումբը բեռնելու համար"
@@ -882,13 +890,13 @@ msgstr "Փոքրացնել արագությունը\nՓոքրացնել արագ
msgctxt "ID_PLAY_INCRATE"
msgid "Increase speed\nIncrease speed"
-msgstr "Մեծացնել արագությունը\nՄեծացնել արագությունը"
+msgstr "Մեծացնել արագությունը\nՄեծացնել արագությունը"
msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Անձայն"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Ձայնով"
@@ -953,11 +961,11 @@ msgid "&Organize Favorites..."
msgstr "&Դասավորել ընտրյալները..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Պատահական"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr ""
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1041,7 +1049,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Նշել չափը Ամենա-Լայնէկրան,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Թաքցնել, եթե ամբողջ էկրանով է"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1198,7 +1206,7 @@ msgstr ""
msgctxt "IDS_STRING_COLON"
msgid "%s:"
-msgstr ""
+msgstr "%s:"
msgctxt "IDS_RECORD_START"
msgid "Record"
@@ -1229,36 +1237,36 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr ""
+msgid "Add containing &folder"
+msgstr "Ավելացնել պարունակող թղթապանակ"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
-msgstr ""
+msgstr "[H/W]"
msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
msgid "Software Decoding"
-msgstr ""
+msgstr "Ծրագրային ապակոդավորում"
msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
msgid "Playback rate"
-msgstr ""
+msgstr "Նվագարկման վարկանիշ"
msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
msgid "&Copy filters list to clipboard"
-msgstr ""
+msgstr "&Պատճենել զտիչների ցանկը մեկուսաշրջույթ"
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
-msgstr ""
+msgstr "Մուտքագրել սպա:սարկիչի հավատարմագրերը"
msgctxt "IDS_CREDENTIALS_CONNECT"
msgid "Enter your credentials to connect"
-msgstr ""
+msgstr "Մուտքագրեք Ձեր հավատարմագրերը՝ կապակցելու համար"
msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
msgid "Save custom style"
-msgstr ""
+msgstr "Պահպանել հարմարեցված ոճը"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
@@ -1336,6 +1344,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr ""
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Վեր"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Վար"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr ""
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr ""
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr ""
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr ""
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr ""
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr ""
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Բացել սարքը"
@@ -1356,13 +1440,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Նկարը հաջողությամբ պահպանվել է"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Բացել տողագիր"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Պահպանել տողագրերը"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1385,11 +1469,11 @@ msgid "Stop"
msgstr "Կանգնեցնել"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Կադր-քայլ"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Ետարկել արագությունը"
msgctxt "IDS_AG_GO_TO"
@@ -1450,7 +1534,7 @@ msgstr ""
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
-msgstr ""
+msgstr "Երբեք չցուցադրել"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
msgid "Show when moving the cursor, hide after:"
@@ -1489,8 +1573,8 @@ msgid "Thumbnails saved successfully"
msgstr "Մանրապատկերները հաջողությամբ պահպանվեցին"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Տեսանյութի հ&ոսքը"
+msgid "Vide&o Track"
+msgstr "&Տեսանյութ"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1498,7 +1582,7 @@ msgstr "Տեսանյութի անկ&յունը"
msgctxt "IDS_RESET_SETTINGS"
msgid "Reset settings"
-msgstr "Ետարկել կարգավորումները"
+msgstr "Վերակայել կարգավորումները"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
@@ -1534,14 +1618,14 @@ msgstr "Փոքրացնել արագությունը"
msgctxt "IDS_AG_RESET_RATE"
msgid "Reset Rate"
-msgstr "Ետարկել"
+msgstr "Վերակայել"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Ձայնի դադար +10մվ"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Ձայնի դադար -10մվ"
msgctxt "IDS_MPLAYERC_23"
@@ -1612,14 +1696,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Շարժել տողագրերը աջ"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Ցուցադրել վիճակագրությունը"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
+msgstr "Անցնել սկզբին"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr ""
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr ""
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr ""
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr ""
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
msgstr ""
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Տողագրերը::Լրացուցիչ"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Թաքցնել եզրագիծը"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Միայն կադրը"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Ցուցադրել &&Ընտրացանկը"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Թաքցնել ընտրացանկը"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Ընդլայնված"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Մինիմալ տեսքով"
@@ -1685,8 +1809,8 @@ msgid "PnS Dec Height"
msgstr "Փոքրացնել կադրի բարձրությունը"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Տողագրերը բեռնվում են, փոքր-ինչ սպասեք։"
+msgid "Downloading [%s] \"%s\""
+msgstr ""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1697,8 +1821,8 @@ msgid "No subtitles found."
msgstr "Տողագրեր չկան։"
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d տողագրեր են հասանելի։"
+msgid "%d subtitle(s) available."
+msgstr "%d տողագրեր են հասանելի։"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1706,7 +1830,7 @@ msgstr "Պարբերաբար ստուգե՞լ MPC-HC-ի թարմացումներ
msgctxt "IDS_ZOOM_50"
msgid "50%"
-msgstr ""
+msgstr "50%"
msgctxt "IDS_ZOOM_100"
msgid "100%"
@@ -1714,7 +1838,7 @@ msgstr "100%"
msgctxt "IDS_ZOOM_200"
msgid "200%"
-msgstr ""
+msgstr "200%"
msgctxt "IDS_ZOOM_AUTOFIT"
msgid "Auto Fit"
@@ -1853,12 +1977,12 @@ msgid "Boss key"
msgstr "Boss Կոճակ"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Վերարտադրիչի ընտրացանկը (կրճատված)"
+msgid "Player Menu"
+msgstr ""
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Վերարտադրիչի ընտրացանկը (ամբողջական)"
+msgid "Player Menu (full)"
+msgstr ""
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1869,20 +1993,20 @@ msgid "Options"
msgstr "Ընտրանքներ"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Հաջորդ ձայնային ֆայլը"
+msgid "Next Audio Track"
+msgstr ""
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Նախորդ ձայնը"
+msgid "Prev Audio Track"
+msgstr ""
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Հաջորդ տողագիրը"
+msgid "Next Subtitle Track"
+msgstr ""
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Նախորդ տեղագիրը"
+msgid "Prev Subtitle Track"
+msgstr ""
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1892,22 +2016,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Վերաբացել տողագրերը"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Հաջորդ ձայնը (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Նախորդ ձայնը (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Հաջորդ տողագրերը (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Նախորդ տողագրերը (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Հաջորդ անկյունը (DVD)"
@@ -1917,28 +2025,28 @@ msgid "Prev Angle (DVD)"
msgstr "Նախորդ անկյունը (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Հաջորդ ձայնը (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Նախորդ ձայնը (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Հաջորդ տողագրերը (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Նախորդ տողագրերը (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Տողագրերը Միաց/Անջ (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Մնացած ժամանակը"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr ""
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1950,7 +2058,7 @@ msgstr "Արագ ավելացնել ընտրյալներին"
msgctxt "IDS_DVB_CHANNEL_NUMBER"
msgid "N"
-msgstr ""
+msgstr "N"
msgctxt "IDS_DVB_CHANNEL_NAME"
msgid "Name"
@@ -1964,11 +2072,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Կոդավորված"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Այո"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Ոչ"
@@ -2025,16 +2133,16 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Հատորը. %02lu/%02lu, Անունը. %02lu/%02lu, Գլուխը. %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Անկյունը. %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr ""
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
-msgstr "Ավելացնել MPC-HC-ի խաղացանկին"
+msgstr "Ավելացնել MPC-HC-ի նվագացանկին"
msgctxt "IDS_OPEN_WITH_MPC"
msgid "Play with MPC-HC"
@@ -2120,14 +2228,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Նկարի լայնքը"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL-ն սխալ է"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Արձանագրության տարբերակը չի համապատասխանում։"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Համամասնություններ"
@@ -2137,19 +2237,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Ընդամենը. %ld, կորսվել է. %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Չափը. %I64dԿԲ"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Չափը. %I64dՄԲ"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Ազատ է. %I64dԿԲ"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Ազատ է. %I64dՄԲ"
msgctxt "IDS_MAINFRM_42"
@@ -2170,7 +2270,7 @@ msgstr "Տողագրեր: %s"
msgctxt "IDS_MAINFRM_46"
msgid "Select the path for the DVD/BD:"
-msgstr "Ընտրեք DVD/BD-ի ճանապարհը."
+msgstr "Ընտրեք DVD/BD-ի ուղին."
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
@@ -2221,8 +2321,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr ""
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Տողագրերը բացելու համար պետք է փոխեք ռենդերերի տեսակը և վերաբացեք ֆայլը:\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Տողագրերը բացելու համար պետք է փոխեք ռենդերերի տեսակը և վերաբացեք ֆայլը:\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2233,11 +2333,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Համամասնություններ. %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Համամասնություններ. ստանդարտ"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr ""
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Ձայնի դադար. %I64dմվ"
msgctxt "IDS_AG_CHAPTER"
@@ -2249,8 +2349,8 @@ msgid "Out of memory"
msgstr "Հիշողությունը չի հերիքում"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Սխալ. պահանջվում է Flash կամ IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Սխալ. պահանջվում է Flash կամ Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2270,11 +2370,7 @@ msgstr "Բացումը ընդհատված է"
msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
-msgstr "Հնարավոր չէ վերարտադրել"
-
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Սխալ URL"
+msgstr "Հնարավոր չէ նվագարկել"
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
@@ -2296,14 +2392,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Գործողը"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC-ն անսպասելի փակվեց։ Այս խնդիրը լուծելու համար ուղարկեք \"%s\" ֆայլը սխալների շտեմարան։\n\nԲացե՞լ սխալի ֆայլը պարունակող թղթապանակը և այցելե՞լ սխալների շտեմարան հենց հիմա։"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Սխալ՝ '%s' dump ֆայլը ստեղծելիս (սխալ %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Ընտրեք թղթապանակը"
@@ -2321,7 +2409,7 @@ msgid "Toggle Caption&Menu"
msgstr "Միաց/Անջ Ընտրացանկի &վերնագիրը"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Միաց/Անջ Seeker-ը"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2342,7 +2430,7 @@ msgstr "Հնարավոր չէ բացել ֆիլտր"
msgctxt "IDS_MAINFRM_88"
msgid "Cannot render the file"
-msgstr "Ֆայլը հնարավոր չէ վերարտադրել"
+msgstr "Ֆայլը հնարավոր չէ նվագարկել"
msgctxt "IDS_MAINFRM_89"
msgid "Invalid file format"
@@ -2418,7 +2506,7 @@ msgstr "Անհայտ %u"
msgctxt "IDS_AG_VSYNC"
msgid "VSync"
-msgstr ""
+msgstr "VSync"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
@@ -2430,7 +2518,7 @@ msgstr " (Ռեժիսորի մեկնաբանություններ 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr ""
+msgstr "Միացնել DVD տողագրերը"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
@@ -2477,8 +2565,8 @@ msgid "Volume boost Max"
msgstr "Ձայնը՝ Max"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Օգտագործվում է. mpc-hc.exe \"ճանապարհը\" [փոխանցիչներ]\n\n\"ճանապարհը\"\tբեռնման ֆայլը կամ թղթապանակը։ \n/dub \"dubname\"\tԲացել լրացուցիչ ձայնային ֆայլ\n/dubdelay \"file\"\tԲացել լրացուցիչ ձայնային ֆայլ՝ XXմվ\n(եթե ֆայլը ունի \"...DELAY XXms...\")։\n/d3dfs\t\tՍկսել Ամբողջ էկրանով՝ D3D եղանակով։\n/sub \"subname\"\tԲացել լրացուցիչ տողագրեր։\n/filter \"filtername\"\tԲացել DirectShow ֆիլտրեր գրադարանից։\n/dvd\t\tԲացել DVD եղանակով, \"ճանապարհը\" նշանակում է DVD-ի թղթապանակը։\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tԲեռնել Audio CD--ի բոլոր ֆայլերը կամ (S)VCD, \"ճանապարհը\" նշանակում է պնակի ճանապարհը։\n/device\t\tOpen the default video device\n/open\t\tՄիայն Բացել Ֆայլը։\n/play\t\tՍկսել Վերարտադրումը՝ անմիջապես բացելիս։\n/close\t\tՎերարտադրումը ավարտելուց հետո փակել (աշխատում է միայն /play փոխանցիչի հետ)։\n/shutdown\tՎերարտադրումը ավարտելուց հետո անջատել համակարգիչը։\n/fullscreen\tԲացել Ամբողջ էկրանով եղանակով։\n/minimized\tԲացել՝ էկրանի ներքևում վիճակում։\n/new\t\tՕգտագործել վերարտադրիչի նոր օրինակ։\n/add\t\tԱվելացնել \"ճանապարհը\" խաղացանկում, կարելի է /open և /play-ի հետ համատեղ։\n/regvid\t\tԳրանցել տեսանյութի տեսակները։\n/regaud\t\tԳրանցել ձայնային տեսակները։\n/regpl\t\tՍտեղծել ֆայլերի ասոցիացումներ խաղացանկի ֆայլերի համար\n/regall\t\tՍտեղծել ֆայլերի ասոցիացումներ ֆայլերի բոլոր աջակցվող տեսակների համարs\n/unregall\t\tՀետգրանցել բոլորը։\n/start ms\t\tՎերարտադրել \"ms\" դիրքից (= միլիվայրկյաններ)։\n/startpos hh:mm:ss\tՍկսել վերարտադրումը՝ hh:mm:ss\n/fixedsize w,h\tՀաստատել պատուհանի ֆիկսված չափ։\n/monitor N\tԲացվում է N մոնիտորի վրա, որտեղ N-ը հաշվվում է 1-ից։\n/audiorenderer N\tՕգտագործել N ցուցադրիչը, որտեղ N-ը հաշվվում է 1-ից\n\t\t(նայեք \"Արտածման\" կարգավորումները)։\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tՎերականգնել հիմնական կարգավորումները\n/help /h /?\tՑուցադրել հուշում\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2502,7 +2590,7 @@ msgstr "Միաց/Անջ Տողագրերի համաժեցման վահանակը
msgctxt "IDS_AG_TOGGLE_PLAYLIST"
msgid "Toggle Playlist Bar"
-msgstr "Միաց/Անջ Խաղացանկի վահանակը"
+msgstr "Միաց/Անջ Նվագացանկի վահանակը"
msgctxt "IDS_AG_TOGGLE_CAPTURE"
msgid "Toggle Capture Bar"
@@ -2542,7 +2630,7 @@ msgstr "Նկարագրել պատուհանից դուրս"
msgctxt "IDS_AG_PNS_RESET"
msgid "PnS Reset"
-msgstr "Ետարկել"
+msgstr "Վերակայել"
msgctxt "IDS_AG_PNS_ROTATEX_P"
msgid "PnS Rotate X+"
@@ -2554,7 +2642,7 @@ msgstr "Կադրի չափը 1"
msgctxt "IDS_AG_VIDFRM_ZOOM2"
msgid "VidFrm Zoom 2"
-msgstr "Կադրի չափը 2"
+msgstr "Կադրի չափը 2"
msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
msgid "VidFrm Switch Zoom"
@@ -2564,14 +2652,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Միացնել բոլոր ֆիլտրերը"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Թյուների կարգավորում"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Տողադրերը չեն բացվել կամ չի աջակցվում։"
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Հեղինակը հայտնի չէ։"
@@ -2660,40 +2740,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Վերին հետին աջ"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr ""
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Տողագրերը::Լրացուցիչ"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Թաքցնել եզրագիծը"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Միայն կադրը"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Ցուցադրել &&Ընտրացանկը"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Թաքցնել ընտրացանկը"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr ""
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Վահանակից ցած"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Վահանակից վեր"
msgctxt "IDS_VIDEO_STREAM"
@@ -2774,79 +2826,79 @@ msgstr "Վերաբացել ֆայլը"
msgctxt "IDS_MFMT_AVI"
msgid "AVI"
-msgstr ""
+msgstr "AVI"
msgctxt "IDS_MFMT_MPEG"
msgid "MPEG"
-msgstr ""
+msgstr "MPEG"
msgctxt "IDS_MFMT_MPEGTS"
msgid "MPEG-TS"
-msgstr ""
+msgstr "MPEG-TS"
msgctxt "IDS_MFMT_DVDVIDEO"
msgid "DVD-Video"
-msgstr ""
+msgstr "DVD տեսանյութ"
msgctxt "IDS_MFMT_MKV"
msgid "Matroska"
-msgstr ""
+msgstr "Matroska"
msgctxt "IDS_MFMT_WEBM"
msgid "WebM"
-msgstr ""
+msgstr "WebM"
msgctxt "IDS_MFMT_MP4"
msgid "MP4"
-msgstr ""
+msgstr "MP4"
msgctxt "IDS_MFMT_MOV"
msgid "QuickTime Movie"
-msgstr ""
+msgstr "QuickTime Movie"
msgctxt "IDS_MFMT_3GP"
msgid "3GP"
-msgstr ""
+msgstr "3GP"
msgctxt "IDS_MFMT_3G2"
msgid "3G2"
-msgstr ""
+msgstr "3G2"
msgctxt "IDS_MFMT_FLV"
msgid "Flash Video"
-msgstr ""
+msgstr "Flash Video"
msgctxt "IDS_MFMT_OGM"
msgid "Ogg Media"
-msgstr ""
+msgstr "Ogg Media"
msgctxt "IDS_MFMT_RM"
msgid "Real Media"
-msgstr ""
+msgstr "Real Media"
msgctxt "IDS_MFMT_RT"
msgid "Real Script"
-msgstr ""
+msgstr "Real Script"
msgctxt "IDS_MFMT_WMV"
msgid "Windows Media Video"
-msgstr ""
+msgstr "Windows Media Video"
msgctxt "IDS_MFMT_BINK"
msgid "Smacker/Bink Video"
-msgstr ""
+msgstr "Smacker/Bink Video"
msgctxt "IDS_MFMT_FLIC"
msgid "FLIC Animation"
-msgstr ""
+msgstr "FLIC Animation"
msgctxt "IDS_MFMT_DSM"
msgid "DirectShow Media"
-msgstr ""
+msgstr "DirectShow Media"
msgctxt "IDS_MFMT_IVF"
msgid "Indeo Video Format"
-msgstr ""
+msgstr "Indeo Video Format"
msgctxt "IDS_MFMT_OTHER"
msgid "Other"
@@ -2854,119 +2906,123 @@ msgstr "Այլ"
msgctxt "IDS_MFMT_SWF"
msgid "Shockwave Flash"
-msgstr ""
+msgstr "Shockwave Flash"
msgctxt "IDS_MFMT_OTHER_AUDIO"
msgid "Other Audio"
-msgstr ""
+msgstr "Այլ ձայնանյութ"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr ""
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
-msgstr ""
+msgstr "AIFF"
msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
-msgstr ""
+msgstr "Apple Lossless"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
-msgstr ""
+msgstr "AMR"
msgctxt "IDS_MFMT_APE"
msgid "Monkey's Audio"
-msgstr ""
+msgstr "Monkey's Audio"
msgctxt "IDS_MFMT_AU"
msgid "AU/SND"
-msgstr ""
+msgstr "AU/SND"
msgctxt "IDS_MFMT_CDA"
msgid "Audio CD track"
-msgstr ""
+msgstr "Audio CD track"
msgctxt "IDS_MFMT_FLAC"
msgid "FLAC"
-msgstr ""
+msgstr "FLAC"
msgctxt "IDS_MFMT_M4A"
msgid "MPEG-4 Audio"
-msgstr ""
+msgstr "MPEG-4 Audio"
msgctxt "IDS_MFMT_MIDI"
msgid "MIDI"
-msgstr ""
+msgstr "MIDI"
msgctxt "IDS_MFMT_MKA"
msgid "Matroska audio"
-msgstr ""
+msgstr "Matroska audio"
msgctxt "IDS_MFMT_MP3"
msgid "MP3"
-msgstr ""
+msgstr "MP3"
msgctxt "IDS_MFMT_MPA"
msgid "MPEG audio"
-msgstr ""
+msgstr "MPEG audio"
msgctxt "IDS_MFMT_MPC"
msgid "Musepack"
-msgstr ""
+msgstr "Musepack"
msgctxt "IDS_MFMT_OFR"
msgid "OptimFROG"
-msgstr ""
+msgstr "OptimFROG"
msgctxt "IDS_MFMT_OGG"
msgid "Ogg Vorbis"
-msgstr ""
+msgstr "Ogg Vorbis"
msgctxt "IDS_MFMT_RA"
msgid "Real Audio"
-msgstr ""
+msgstr "Real Audio"
msgctxt "IDS_MFMT_TAK"
msgid "TAK"
-msgstr ""
+msgstr "TAK"
msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
-msgstr ""
-
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr ""
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr ""
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr ""
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr ""
+msgstr "True Audio"
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
-msgstr "Խաղացանկ"
+msgstr "Նվագացանկ"
msgctxt "IDS_MFMT_BDPLS"
msgid "Blu-ray playlist"
-msgstr ""
+msgstr "Blu-ray նվագացանկ"
msgctxt "IDS_MFMT_RAR"
msgid "RAR Archive"
-msgstr ""
+msgstr "RAR արխիվ"
msgctxt "IDS_DVB_CHANNEL_FPS"
msgid "FPS"
-msgstr ""
+msgstr "FPS"
msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
msgid "Resolution"
@@ -2976,18 +3032,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Հարաբերակցությունը"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Օգտագործել WASAPI (վերամեկնարկել վերարտադրումը)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Անձայն՝ առաջ տալիս"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Ձայնի սարքը."
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync. Միաց"
@@ -3194,11 +3238,11 @@ msgstr "Կոնտրաստի փոքրացում"
msgctxt "IDS_HUE_INC"
msgid "Hue increase"
-msgstr ""
+msgstr "Hue increase"
msgctxt "IDS_HUE_DEC"
msgid "Hue decrease"
-msgstr ""
+msgstr "Hue decrease"
msgctxt "IDS_SATURATION_INC"
msgid "Saturation increase"
@@ -3210,7 +3254,7 @@ msgstr "Խտայնության փոքրացում"
msgctxt "IDS_RESET_COLOR"
msgid "Reset color settings"
-msgstr "Ետարկել գույնի կարգավորումները"
+msgstr "Վերակայել գույնի կարգավորումները"
msgctxt "IDS_USING_LATEST_STABLE"
msgid "\nYou are already using the latest stable version."
@@ -3276,6 +3320,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Շրջանի ձայնը. Անջ."
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "բայթ"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "ԿԲ"
@@ -3333,7 +3381,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Մուտքագրված կադրի աստիճանի վերլուծման սխալ։"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Ընտրեք այլ տեսառենդեր։"
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3352,10 +3400,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "'Պահպանել նկարը' և 'Պահպանել Մանրապատկերով' հնարավորությունները չեն աշխատի Overlay Mixer տեսակոդավորման ժամանակ:\nՓոխեք տեսակոդավորման սարքը MPC-ի արտածման կարգավորումներում և կրկին բացեք ֆայլը։"
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Հնարավոր չէ միանալ տողագրերի առցանց շտեմարանին։"
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Ցանկանու՞մ եք ակտիվացնել EDL խմբագրիչը։"
@@ -3424,7 +3468,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Նոր կարգավորումները թեստավորելուց առաջ նախ պետք է դրանք պահպանել"
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Վերարտադրելուց հետո. Փակել"
@@ -3450,7 +3494,15 @@ msgstr "Վերարտադրելուց հետո. Կողփել"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr ""
+msgstr "Նվագարկելուց հետո. անջատել մոնիտորը"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Նվագարկելուց հետո. խաղարկել թղթապանակի հաջորդ ֆայլը"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Նվագարկելուց հետո. ոչինչ չանել"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
@@ -3490,23 +3542,23 @@ msgstr ""
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
-msgstr ""
+msgstr "&Blu-Ray նվագացանկեր"
msgctxt "IDS_NAVIGATE_PLAYLIST"
msgid "&Playlist"
-msgstr ""
+msgstr "&Նվագացանկ"
msgctxt "IDS_NAVIGATE_CHAPTERS"
msgid "&Chapters"
-msgstr ""
+msgstr "&Գլուխներ"
msgctxt "IDS_NAVIGATE_TITLES"
msgid "&Titles"
-msgstr ""
+msgstr "&Գլխագրեր"
msgctxt "IDS_NAVIGATE_CHANNELS"
msgid "&Channels"
-msgstr ""
+msgstr "&Ալիքներ"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
@@ -3514,21 +3566,405 @@ msgstr ""
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr ""
+msgstr "Ասոցիացնել բոլորը"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr ""
+msgstr "Ասոցիացնել միայն տեսանյութերը"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr ""
+msgstr "Ասոցիացնել միայն ձայնանյութերը"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr ""
+msgstr "Մաքրել բոլոր ասոցիացումները"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Կարգավորումներ"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Բեռնել տողագրերը"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Բեռնել և Բացել"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Վերակայել"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Վեր"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Վար"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Լեզուներ"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.id.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.id.dialogs.po
new file mode 100644
index 000000000..a78aa724d
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.id.dialogs.po
@@ -0,0 +1,1803 @@
+# MPC-HC - Strings extracted from dialogs
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Andy Martino <thegamers788@gmail.com>, 2015
+# Dwi Cahyono <dwexz_cie@yahoo.com>, 2015
+# Hatta.z, 2014
+# Hatta.z, 2014
+# yoga.mardia <made.yoga12@gmail.com>, 2014
+# Reza Septyan .R. <ainofuyuumI@outlook.com>, 2014
+# yoga.mardia <made.yoga12@gmail.com>, 2014
+# zk, 2015-2016
+# zk, 2015
+# zk, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Indonesian (http://www.transifex.com/mpc-hc/mpc-hc/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
+msgid "Select Media Type"
+msgstr "Pilih Jenis Media"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
+msgid "Cancel"
+msgstr "Batal"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
+msgid "Set"
+msgstr "Tetapkan"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Output"
+msgstr "Keluaran"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
+msgid "Record Video"
+msgstr "Rekam Video"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
+msgid "Preview"
+msgstr "Pratinjau"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
+msgid "Record Audio"
+msgstr "Rekam Audio"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
+msgid "Preview"
+msgstr "Pratinjau"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "V/A Buffers:"
+msgstr "Bufer V/A:"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
+msgid "Audio to wav"
+msgstr "Audio ke wav"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
+msgid "Record"
+msgstr "Rekam"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
+msgid "Enable built-in audio switcher filter (requires restart)"
+msgstr "Fungsikan penyaring pengubah suara bawaan (wajib memulai ulang)"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
+msgid "Normalize"
+msgstr "Normalkan"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
+msgid "Max amplification:"
+msgstr "Amplifikasi Maks:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
+msgid "Regain volume"
+msgstr "Perkeras volume"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
+msgid "Boost:"
+msgstr "Galak:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
+msgid "Down-sample to 44100 Hz"
+msgstr "Turunkan sampel ke 44100 Hz"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
+msgid "Audio time shift (ms):"
+msgstr "Waktu perpindahan audio (ms):"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
+msgid "Enable custom channel mapping"
+msgstr "Fungsikan pemetaan saluran khusus"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
+msgid "Speaker configuration for"
+msgstr "Konfigurasi pengeras suara untuk"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
+msgid "input channels:"
+msgstr "saluran masukan:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Tahan shift untuk perubahan langsung ketika mengklik sesuatu"
+
+msgctxt "IDD_GOTO_DLG_CAPTION"
+msgid "Go To..."
+msgstr "Ke..."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
+msgstr "Masukkan kode waktu menggunakan format [hh:]mm:ss.ms untuk melompat ke waktu yang ditentukan. Anda tidak perlu memasukkan karakter pemisah secara eksplisit."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Time"
+msgstr "Waktu"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK1"
+msgid "Go!"
+msgstr "Jalankan!"
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
+msgstr "Masukkan dua angka untuk melompat ke frame tertentu, yang pertama adalah nomor frame, yang kedua adalah laju frame."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Frame"
+msgstr "Frame"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK2"
+msgid "Go!"
+msgstr "Jalankan!"
+
+msgctxt "IDD_OPEN_DLG_CAPTION"
+msgid "Open"
+msgstr "Buka"
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
+msgstr "Ketik alamat berkas film atau audio (di Internet atau komputer Anda) dan pemutar akan membukanya untuk Anda."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Open:"
+msgstr "Buka:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Jelajah..."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
+msgid "Dub:"
+msgstr "Dub:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Jelajah..."
+
+msgctxt "IDD_OPEN_DLG_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_OPEN_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Batal"
+
+msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
+msgid "Add to playlist without opening"
+msgstr "Tambahkan ke daftar putar tanpa membuka"
+
+msgctxt "IDD_ABOUTBOX_CAPTION"
+msgid "About"
+msgstr "Tentang"
+
+msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Hak Cipta 2002-2017 lihat Authors.txt"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "This program is freeware and released under the GNU General Public License."
+msgstr "Program ini adalah perangkat lunak gratis dan dirilis di bawah Lisensi Publik Umum GNU."
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "English translation made by MPC-HC Team"
+msgstr "Terjemahan Bahasa Inggris dibuat oleh Tim MPC-HC"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build information"
+msgstr "Informasi versi"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Version:"
+msgstr "Versi:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Compiler:"
+msgstr "Pengompilasi:"
+
+msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
+msgid "Not used"
+msgstr "Tidak digunakan"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build date:"
+msgstr "Tanggal pembuatan:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Operating system"
+msgstr "Sistem operasi"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Name:"
+msgstr "Nama:"
+
+msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
+msgid "Copy to clipboard"
+msgstr "Salin ke papan klip"
+
+msgctxt "IDD_ABOUTBOX_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Open options"
+msgstr "Buka opsi"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
+msgid "Use the same player for each media file"
+msgstr "Gunakan pemutar yang sama untuk setiap berkas media"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
+msgid "Open a new player for each media file played"
+msgstr "Buka pemutar baru untuk setiap berkas media yang diputar"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Language"
+msgstr "Bahasa"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Title bar"
+msgstr "Bilah judul"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
+msgid "Display full path"
+msgstr "Tampilkan jalur penuh"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
+msgid "File name only"
+msgstr "Hanya nama berkas"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
+msgid "Don't prefix anything"
+msgstr "Jangan prefiks apapun"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
+msgid "Replace file name with title"
+msgstr "Ganti nama berkas dengan judul"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Other"
+msgstr "Lainnya"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
+msgid "Tray icon"
+msgstr "Ikon baki"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
+msgid "Show OSD (requires restart)"
+msgstr "Tampilkan OSD (wajib memulai ulang)"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
+msgid "Limit window proportions on resize"
+msgstr "Batasi proporsi jendela saat mengubah ukuran"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
+msgid "Snap to desktop edges"
+msgstr "Lengket ke tepi destop"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
+msgid "Store settings in .ini file"
+msgstr "Simpan pengaturan ke berkas .ini"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
+msgid "Disable \"Open Disc\" menu"
+msgstr "Nonfungsikan menu \"Buka Cakram\""
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
+msgid "Process priority above normal"
+msgstr "Prioritas proses di atas normal"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
+msgid "Enable cover-art support"
+msgstr "Fungsikan dukungan kover album"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "History"
+msgstr "Riwayat"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
+msgid "Keep history of recently opened files"
+msgstr "Simpan riwayat berkas yang baru dibuka"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
+msgid "Remember last playlist"
+msgstr "Ingat daftar putar terakhir"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
+msgid "Remember File position"
+msgstr "Ingat posisi Berkas"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
+msgid "Remember DVD position"
+msgstr "Ingat posisi DVD"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
+msgid "Remember last window position"
+msgstr "Ingat posisi jendela terakhir"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
+msgid "Remember last window size"
+msgstr "Ingat ukuran jendela terakhir"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
+msgid "Remember last Pan-n-Scan Zoom"
+msgstr "Ingat Zum Pan-n-Scan terakhir"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "\"Open DVD/BD\" behavior"
+msgstr "Perilaku \"Buka DVD/BD\""
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
+msgid "Prompt for location"
+msgstr "Tanyakan untuk lokasi"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
+msgid "Always open the default location:"
+msgstr "Selalu buka lokasi bawaan:"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Preferred language for DVD Navigator and the external OGM Splitter"
+msgstr "Bahasa yang diinginkan untuk Navigator DVD dan Splitter OGM eksternal"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
+msgid "Menu"
+msgstr "Menu"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
+msgid "Subtitles"
+msgstr "Subtitel"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Additional settings"
+msgstr "Pengaturan tambahan"
+
+msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
+msgid "Allow closed captions in \"Line 21 Decoder\""
+msgstr "Izinkan takarir saling tindih di \"Dekoder Line 21\""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume"
+msgstr "Volume"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Min"
+msgstr "Min"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Max"
+msgstr "Maks"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
+msgid "Balance"
+msgstr "Seimbang"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "L"
+msgstr "L"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "R"
+msgstr "R"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Playback"
+msgstr "Pemutaran"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
+msgid "Play"
+msgstr "Putar"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
+msgid "Repeat forever"
+msgstr "Ulangi selamanya"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
+msgid "time(s)"
+msgstr "kali"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Mode ulang:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "After Playback"
+msgstr "Setelah Pemutaran"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default zoom"
+msgstr "Zum bawaan"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
+msgid "Auto-zoom:"
+msgstr "Oto-zum:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
+msgid "Auto fit factor:"
+msgstr "Faktor oto suai:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default track preference"
+msgstr "Preferensi trek bawaan"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Subtitles:"
+msgstr "Subtitel:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio:"
+msgstr "Audio:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
+msgid "Allow overriding external splitter choice"
+msgstr "Izinkan menimpa pilihan splitter eksternal"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Open settings"
+msgstr "Buka pengaturan"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
+msgid "Use worker thread to construct the filter graph"
+msgstr "Gunakan worker thread untuk membangun grafik filter"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
+msgid "Report pins which fail to render"
+msgstr "Laporkan pin yang gagal merender"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
+msgid "Auto-load audio files"
+msgstr "Oto-muat berkas audio"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Control"
+msgstr "Pengendali"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume step:"
+msgstr "Tahapan volume:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Speed step:"
+msgstr "Tahapan kecepatan:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
+msgid "Override placement"
+msgstr "Menimpa penempatan"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
+msgid "Horizontal:"
+msgstr "Horisontal:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC2"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC3"
+msgid "Vertical:"
+msgstr "Vertikal:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC4"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Delay step"
+msgstr "Tahap tundaan"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Texture settings (open the video again to see the changes)"
+msgstr "Pengaturan tekstur (buka kembali video untuk melihat perubahan)"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Sub pictures to buffer:"
+msgstr "Bufer sub gambar:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Maximum texture resolution:"
+msgstr "Resolusi tekstur maksimum:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
+msgid "Never animate the subtitles"
+msgstr "Jangan pernah animasikan subtitel"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
+msgid "Render at"
+msgstr "Render pada"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
+msgid "% of the animation"
+msgstr "% dari animasi"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
+msgid "Animate at"
+msgstr "Animasi pada"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
+msgid "% of the video frame rate"
+msgstr "% dari laju frame video"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Allow dropping some subpictures if the queue is running late"
+msgstr "Izinkan membuang beberapa sub gambar jika antrean berjalan terlambat"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Renderer Layout"
+msgstr "Tata Letak Perender"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
+msgid "Apply aspect ratio compensation for anamorphic videos"
+msgstr "Terapkan kompensasi nisbah bidang untuk video anamorfik"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Warning"
+msgstr "Peringatan"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Jika Anda menimpa dan memfungsikan anti-alias layar penuh pada pengaturan kartu video Anda, subtitel tidak akan nampak lebih baik tetapi pastinya akan meningkatkan kinerja CPU Anda."
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
+msgid "File extensions"
+msgstr "Ekstensi berkas"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
+msgid "Default"
+msgstr "Bawaan"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
+msgid "Set"
+msgstr "Tetapkan"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
+msgid "Association"
+msgstr "Asosiasi"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
+msgid "Use the format-specific icons"
+msgstr "Gunakan ikon berformat spesifik"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
+msgid "Run as &administrator"
+msgstr "Jalankan sebagai &administrator"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
+msgid "Set as &default program"
+msgstr "Tetapkan sebagai program &baku"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
+msgstr "Penangan Protokol Real-Time Streaming (untuk URL rtsp://...)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
+msgid "RealMedia"
+msgstr "RealMedia"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO2"
+msgid "QuickTime"
+msgstr "QuickTime"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO3"
+msgid "DirectShow"
+msgstr "DirectShow"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
+msgid "Check file extension first"
+msgstr "Periksa dulu ekstensi berkas"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Explorer Context Menu"
+msgstr "Menu Konteks Explorer"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK6"
+msgid "Directory"
+msgstr "Direktori"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK7"
+msgid "File(s)"
+msgstr "Berkas"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
+msgid "Autoplay"
+msgstr "Otoputar"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK2"
+msgid "Music"
+msgstr "Musik"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK4"
+msgid "DVD"
+msgstr "DVD"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
+msgid "Audio CD"
+msgstr "CD Audio"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "Jump distances (small, medium, large in ms)"
+msgstr "Jarak lompatan (kecil, menengah, besar dalam ms)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
+msgid "Default"
+msgstr "Bawaan"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
+msgid "Fast seek (on keyframe)"
+msgstr "Jangkau cepat (pada keyframe)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
+msgid "Show chapter marks in seek bar"
+msgstr "Tampilkan tanda bab pada bilah jangkau"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
+msgid "Display \"Now Playing\" information in Skype's mood message"
+msgstr "Tampilkan informasi \"Diputar Sekarang\" dalam pesan mood Skype"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
+msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
+msgstr "Cegah meminimalkan pemutar ketika dalam mode layar penuh pada monitor bukan baku"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Gunakan fitur bilah tugas ditingkatkan"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Buka berkas sebelum/selanjutnya di dalam folder pada \"Lewati mundur/maju\" ketika hanya ada satu item di dalam daftar putar"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
+msgid "Show time tooltip:"
+msgstr "Gunakan tip alat waktu:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "OSD font:"
+msgstr "Fon OSD:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
+msgid "Enable Logitech LCD support (experimental)"
+msgstr "Fungsikan dukungan LCD Logitech (eksperimental)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
+msgid "Auto-hide the mouse pointer during playback in windowed mode"
+msgstr "Oto-sembunyi penunjuk tetikus sepanjang pemutaran di mode windowed"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
+msgid "Add Filter..."
+msgstr "Tambah Filter..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
+msgid "Remove"
+msgstr "Buang"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO1"
+msgid "Prefer"
+msgstr "Diutamakan"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO2"
+msgid "Block"
+msgstr "Blok"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
+msgid "Set merit:"
+msgstr "Tetapkan merit:"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
+msgid "Up"
+msgstr "Naik"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON4"
+msgid "Down"
+msgstr "Turun"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
+msgid "Add Media Type..."
+msgstr "Tambah Jenis Media..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
+msgid "Add Sub Type..."
+msgstr "Tambah Sub Jenis..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
+msgid "Delete"
+msgstr "Hapus"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
+msgid "Reset List"
+msgstr "Setel Ulang Daftar"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Type:"
+msgstr "Jenis:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Size:"
+msgstr "Ukuran:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Media length:"
+msgstr "Panjang media:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Video size:"
+msgstr "Ukuran video:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Created:"
+msgstr "Dibuat:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Clip:"
+msgstr "Klip:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Author:"
+msgstr "Penulis:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Copyright:"
+msgstr "Hak cipta:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Rating:"
+msgstr "Penilaian:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Location:"
+msgstr "Lokasi:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Description:"
+msgstr "Deskripsi:"
+
+msgctxt "IDD_FAVADD_CAPTION"
+msgid "Add Favorite"
+msgstr "Tambah favorit"
+
+msgctxt "IDD_FAVADD_IDC_STATIC"
+msgid "Choose a name for your shortcut:"
+msgstr "Pilih nama untuk pintasan Anda:"
+
+msgctxt "IDD_FAVADD_IDC_CHECK1"
+msgid "Remember position"
+msgstr "Ingat posisi"
+
+msgctxt "IDD_FAVADD_IDCANCEL"
+msgid "Cancel"
+msgstr "Batal"
+
+msgctxt "IDD_FAVADD_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_FAVADD_IDC_CHECK2"
+msgid "Relative drive"
+msgstr "Penggerak relatif"
+
+msgctxt "IDD_FAVORGANIZE_CAPTION"
+msgid "Organize Favorites"
+msgstr "Kelola Favorit"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
+msgid "Rename"
+msgstr "Ubah Nama"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
+msgid "Move Up"
+msgstr "Pindah ke Atas"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
+msgid "Move Down"
+msgstr "Pindah ke Bawah"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
+msgid "Delete"
+msgstr "Hapus"
+
+msgctxt "IDD_FAVORGANIZE_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_PNSPRESET_DLG_CAPTION"
+msgid "Pan&Scan Presets"
+msgstr "Prasetel Pan&Scan"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
+msgid "New"
+msgstr "Baru"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON3"
+msgid "Delete"
+msgstr "Hapus"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
+msgid "Up"
+msgstr "Naik"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
+msgid "Down"
+msgstr "Turun"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
+msgid "&Set"
+msgstr "&Setel"
+
+msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
+msgid "&Cancel"
+msgstr "&Batal"
+
+msgctxt "IDD_PNSPRESET_DLG_IDOK"
+msgid "&Save"
+msgstr "&Simpan"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Pos: 0.0 -> 1.0"
+msgstr "Posisi: 0.0 -> 1.0"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Zoom: 0.2 -> 3.0"
+msgstr "Zum: 0.2 -> 3.0"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
+msgid "Global Media Keys"
+msgstr "Tombol Media Global"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
+msgid "Select All"
+msgstr "Pilih Semua"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
+msgid "Reset Selected"
+msgstr "Setel Ulang Pilihan"
+
+msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
+msgid "Warning"
+msgstr "Peringatan"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
+msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
+msgstr "MPC-HC tidak bisa merender beberapa pin pada grafik, Anda mungkin tidak memiliki kodek atau filter yang diperlukan terpasang pada sistem."
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
+msgid "The following pin(s) failed to find a connectable filter:"
+msgstr "Pin berikut gagal untuk menemukan filter yang dapat sambung:"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDOK"
+msgid "Close"
+msgstr "Tutup"
+
+msgctxt "IDD_SAVE_DLG_CAPTION"
+msgid "Saving..."
+msgstr "Menyimpan..."
+
+msgctxt "IDD_SAVE_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Batal"
+
+msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Encoding:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Encoding:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "Delay:"
+msgstr "Tundaan:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
+msgid "Save custom style"
+msgstr "Simpan gaya ubahsuai"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "Kualitas JPEG:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Thumbnails:"
+msgstr "Gambar mini:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "rows"
+msgstr "baris"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "columns"
+msgstr "kolom"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Image width:"
+msgstr "Lebar gambar:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "pixels"
+msgstr "piksel"
+
+msgctxt "IDD_ADDREGFILTER_CAPTION"
+msgid "Select Filter"
+msgstr "Pilih Filter"
+
+msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Ramban..."
+
+msgctxt "IDD_ADDREGFILTER_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_ADDREGFILTER_IDCANCEL"
+msgid "Cancel"
+msgstr "Batal"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Font"
+msgstr "Fon"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_BUTTON1"
+msgid "Font"
+msgstr "Fon"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Spacing"
+msgstr "Spasi"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Angle (z,°)"
+msgstr "Sudut (z, °)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (x,%)"
+msgstr "Skala (x,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (y,%)"
+msgstr "Skala (y,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Border Style"
+msgstr "Gaya Tepi"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
+msgid "Outline"
+msgstr "Garis luar"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
+msgid "Opaque box"
+msgstr "Kotak legap"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Width"
+msgstr "Lebar"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Shadow"
+msgstr "Bayang"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Screen Alignment && Margins"
+msgstr "Perataan Layar && Jarak"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Left"
+msgstr "Kiri"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Right"
+msgstr "Kanan"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Top"
+msgstr "Atas"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Bottom"
+msgstr "Bawah"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
+msgid "Position subtitles relative to the video frame"
+msgstr "Posisi subtitel relatif pada gambar video"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Colors && Transparency"
+msgstr "Warna && Transparansi"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "0%"
+msgstr "0%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Primary"
+msgstr "Utama"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Secondary"
+msgstr "Sekunder"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Outline"
+msgstr "Kerangka"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
+msgid "Link alpha channels"
+msgstr "Tautan saluran alfa"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
+msgstr "Jika Anda ingin menggunakan versi mandiri dari filter ini atau pengganti yang lain, nonfungsikan filter tersebut di sini."
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Source Filters"
+msgstr "Sumber Filter"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Transform Filters"
+msgstr "Filter Transformasi"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Internal LAV Filters settings"
+msgstr "Pengaturan Internal LAV Filters"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
+msgid "Splitter"
+msgstr "Splitter"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
+msgid "Video decoder"
+msgstr "Dekoder video"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
+msgid "Audio decoder"
+msgstr "Dekoder audio"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
+msgid "Internal:"
+msgstr "Internal:"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO2"
+msgid "External:"
+msgstr "Eksternal:"
+
+msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Ramban..."
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DirectShow Video"
+msgstr "Video DirectShow"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "RealMedia Video"
+msgstr "Video RealMedia"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "QuickTime Video"
+msgstr "Video QuickTime"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Audio Renderer"
+msgstr "Perender Audio"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Pengaturan VMR-9 (renderless) dan EVR (CP)"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Surface:"
+msgstr "Permukaan:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Resizer:"
+msgstr "Pengubah Ukuran:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
+msgid "Select D3D9 Render Device"
+msgstr "Pilih Perangkat Render D3D9"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
+msgid "Reinitialize when changing display"
+msgstr "Inisialisasi ulang ketika mengubah layar"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "D3D Fullscreen"
+msgstr "Layar Penuh D3D"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Alternative VSync"
+msgstr "VSync Alternatif"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
+msgid "VMR-9 Mixer Mode"
+msgstr "Mode Pengadon VMR-9"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
+msgid "YUV Mixing"
+msgstr "YUV Mixing"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
+msgid "EVR Buffers:"
+msgstr "Bufer EVR:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitles"
+msgstr "Subtitel"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Screenshot"
+msgstr "Cuplikan layar"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Shaders"
+msgstr "Shader"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Rotation"
+msgstr "Rotasi"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitle Renderer"
+msgstr "Perender Subtitel"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Simpan tembolok kompilasi Shader"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
+msgid "Listen on port:"
+msgstr "Dengarkan di port:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
+msgid "Launch in web browser..."
+msgstr "Luncurkan di peramban web..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
+msgid "Enable compression"
+msgstr "Fungsikan kompresi"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
+msgid "Allow access from localhost only"
+msgstr "Izinkan akses hanya dari localhost saja"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Fungsikan pratinjau"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
+msgid "Print debug information"
+msgstr "Cetak informasi awakutu"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
+msgid "Serve pages from:"
+msgstr "Layani halaman dari:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Ramban..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
+msgid "Deploy..."
+msgstr "Terapkan..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "Default page:"
+msgstr "Halaman baku:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
+msgstr "Penangan CGI: (.ext1=path1;.ext2=path2;...)"
+
+msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
+msgid "Download subtitles"
+msgstr "Unduh subtitel"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
+msgid "Replace currently loaded subtitles"
+msgstr "Ganti subtitel yang sedang dimuat"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Unduh"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Segarkan"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Batal"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opsi"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Unggah subtitel"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Unggah"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Batal"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opsi"
+
+msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
+msgid "Save As..."
+msgstr "Simpan Sebagai..."
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Color controls (for VMR-9, EVR and madVR)"
+msgstr "Pengendali warna (untuk VMR-9, EVR dan madVR)"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Brightness"
+msgstr "Kecerahan"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Contrast"
+msgstr "Kontras"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Hue"
+msgstr "Rona"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Saturation"
+msgstr "Kejenuhan"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET"
+msgid "Reset"
+msgstr "Setel Ulang"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Update check"
+msgstr "Periksa pemutakhiran"
+
+msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
+msgid "Enable automatic update check"
+msgstr "Fungsikan pemeriksaan pemutakhiran otomatis"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
+msgid "Check every:"
+msgstr "Periksa setiap:"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
+msgid "day(s)"
+msgstr "hari"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Settings management"
+msgstr "Pengelolaan pengaturan"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
+msgid "Reset"
+msgstr "Setel Ulang"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
+msgid "Export"
+msgstr "Ekspor"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
+msgid "Export keys"
+msgstr "Ekspor kunci"
+
+msgctxt "IDD_TUNER_SCAN_CAPTION"
+msgid "Tuner scan"
+msgstr "Pindaian pelaras"
+
+msgctxt "IDD_TUNER_SCAN_ID_START"
+msgid "Start"
+msgstr "Awal"
+
+msgctxt "IDD_TUNER_SCAN_IDCANCEL"
+msgid "Cancel"
+msgstr "Batal"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. Start"
+msgstr "Frek. Awal"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Bandwidth"
+msgstr "Lebar gelombang"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. End"
+msgstr "Frek. Akhir"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
+msgid "Ignore encrypted channels"
+msgstr "Abaikan saluran yang terenkripsi"
+
+msgctxt "IDD_TUNER_SCAN_ID_SAVE"
+msgid "Save"
+msgstr "Simpan"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "S"
+msgstr "S"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Q"
+msgstr "Q"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
+msgid "Use an offset"
+msgstr "Gunakan ofset"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Default Device"
+msgstr "Perangkat Bawaan"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
+msgid "Analog"
+msgstr "Analog"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO2"
+msgid "Digital"
+msgstr "Digital"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Analog settings"
+msgstr "Pengaturan analog"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC1"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC2"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC3"
+msgid "Country"
+msgstr "Negara"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Digital settings (BDA)"
+msgstr "Pengaturan digital (BDA)"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
+msgid "Network Provider"
+msgstr "Penyedia Jaringan"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
+msgid "Tuner"
+msgstr "Penala"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC6"
+msgid "Receiver"
+msgstr "Penerima"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
+msgid "Channel switching approach:"
+msgstr "Pendekatan pengalihan saluran:"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
+msgid "Rebuild filter graph"
+msgstr "Buat ulang grafik filter"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
+msgid "Stop filter graph"
+msgstr "Hentikan grafik filter"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
+msgid "Sync video to display"
+msgstr "Laras video ke tampilan"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
+msgid "Frequency adjustment:"
+msgstr "Penyesuaian frekuensi:"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
+msgid "Sync display to video"
+msgstr "Laras tampilan ke video"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
+msgid "Frequency adjustment:"
+msgstr "Penyesuaian frekuensi:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC3"
+msgid "lines"
+msgstr "baris"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
+msgid "columns"
+msgstr "kolom"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
+msgid "Present at nearest VSync"
+msgstr "Sajikan pada VSync terdekat"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
+msgid "Target sync offset:"
+msgstr "Ofset target laras:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC7"
+msgid "Control limits:"
+msgstr "Batas kendali:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
+msgid "+/-"
+msgstr "+/-"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
+msgid "Changes take effect after the playback has been closed and restarted."
+msgstr "Perubahan terdampak setelah pemutaran ditutup dan dimulai ulang."
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
+msgid "Launch files in fullscreen"
+msgstr "Luncurkan berkas di layar penuh"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
+msgid "Hide controls in fullscreen"
+msgstr "Sembunyikan pengendali di layar penuh"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
+msgid "Hide docked panels"
+msgstr "Sembunyikan panel tersemat"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
+msgid "Exit fullscreen at the end of playback"
+msgstr "Keluar dari layar penuh diakhir pemutaran"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Fullscreen monitor"
+msgstr "Monitor layar penuh"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
+msgid "Use autochange fullscreen monitor mode"
+msgstr "Gunakan oto-ubah mode monitor layar penuh"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
+msgid "Add"
+msgstr "Tambah"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
+msgid "Del"
+msgstr "Hapus"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
+msgid "Up"
+msgstr "Atas"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON4"
+msgid "Down"
+msgstr "Turun"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
+msgid "Apply default monitor mode on fullscreen exit"
+msgstr "Terapkan mode monitor bawaan saat keluar dari layar penuh"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
+msgid "Restore resolution on program exit"
+msgstr "Kembalikan resolusi saat keluar dari program"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Delay"
+msgstr "Jeda"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
+msgid "s"
+msgstr "s"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
+msgid "Info"
+msgstr "Info"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_SCAN"
+msgid "Scan"
+msgstr "Pindai"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
+msgid "Prefer forced and/or default subtitles tracks"
+msgstr "Lebih memilih trek subtitel yang dipaksakan dan/atau subtitel bawaan"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
+msgid "Prefer external subtitles over embedded subtitles"
+msgstr "Lebih memilih subtitel eksternal daripada subtitel tertanam"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
+msgid "Ignore embedded subtitles"
+msgstr "Abaikan subtitel tertanam"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Autoload paths"
+msgstr "Otomuat jalur"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
+msgid "Reset"
+msgstr "Setel Ulang"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Online search, download and upload subtitles"
+msgstr "Pencarian daring, unduh dan unggah subtitel"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Otomatis mencari dan mengunduh subtitel jika tidak ada yang ditemukan secara lokal"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Lebih memilih subtitel untuk tuna rungu (jika ditandai oleh penyedia subtitel)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Abaikan berkas yang memuat kata-kata berikut:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Languages in order of preference:"
+msgstr "Bahasa dengan urutan sesuai pilihan:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Otomatis mengunggah subtitel aktif di akhir pemutaran video"
+
+msgctxt "IDD_UPDATE_DIALOG_CAPTION"
+msgid "Update Checker"
+msgstr "Pemeriksa Pemutakhiran"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
+msgid "&Download now"
+msgstr "Un&duh sekarang"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
+msgid "Remind me &later"
+msgstr "Ingatkan saya &lagi"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
+msgid "&Ignore this update"
+msgstr "Aba&ikan pemutakhiran ini"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shaders contain special effects which can be added to the video rendering process."
+msgstr "Shader mengandung efek spesial yang dapat ditambahkan ke proses perenderan video."
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
+msgid "Add shader file"
+msgstr "Tambah berkas shader"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
+msgid "Remove"
+msgstr "Buang"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
+msgid "Add to pre-resize"
+msgstr "Tambah ke pra-ubah ukuran"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
+msgid "Add to post-resize"
+msgstr "Tambah ke paska ubah ukuran"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shader presets"
+msgstr "Prasetel Shader"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
+msgid "Load"
+msgstr "Muat"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
+msgid "Save"
+msgstr "Simpan"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON5"
+msgid "Delete"
+msgstr "Hapus"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active pre-resize shaders"
+msgstr "Aktifkan shader pra ubah ukuran"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active post-resize shaders"
+msgstr "Atifkan shader paska ubah ukuran"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
+msgid "Debug Shaders"
+msgstr "Awakutu Shader"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
+msgid "Debug Information"
+msgstr "Infomasi Awakutu"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
+msgid "PS 2.0"
+msgstr "PS 2.0"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO2"
+msgid "PS 2.0b"
+msgstr "PS 2.0b"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO3"
+msgid "PS 2.0a"
+msgstr "PS 2.0a"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO4"
+msgid "PS 3.0"
+msgstr "PS 3.0"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
+msgid "Advanced Settings, do not edit unless you know what you are doing."
+msgstr "Pengaturan Tingkat Lanjut, jangan sunting kecuali Anda tahu apa yang Anda lakukan."
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
+msgid "True"
+msgstr "Benar"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
+msgid "False"
+msgstr "Salah"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
+msgid "Default"
+msgstr "Bawaan"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Perangkat"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Mode eksklusif"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Izinkan bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Opsi"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Fungsikan stereo bersilangan (untuk fon kepala)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Matikan"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Level:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Catatan"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Untuk meminimalkan distorsi audio, direkomendasikan untuk tetap menjaga volume pemutar Anda sekitar 85% ketika memutar konten yang berisik."
+
+msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "Kualitas JPEG:"
+
+msgctxt "IDD_CMD_LINE_HELP_CAPTION"
+msgid "Command line help"
+msgstr "Bantuan perintah baris"
+
+msgctxt "IDD_CMD_LINE_HELP_IDOK"
+msgid "OK"
+msgstr "OK"
+
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Pelapor tumbukan"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Mohon maaf, sepertinya MPC-HC telah bertumbuk :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Kirim laporan kutu agar kami dapat mendiagnosa dan memperbaiki masalahnya."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Informasi opsional"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Surel:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Alamat surel Anda opsional dan hanya akan digunakan jika pengembang perlu untuk menghubungi Anda untuk informasi lebih lanjut."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Deskripsi masalah (hanya gunakan Bahasa Inggris):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Mulai Ulang MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Keluar MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.id.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.id.menus.po
new file mode 100644
index 000000000..a32306984
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.id.menus.po
@@ -0,0 +1,715 @@
+# MPC-HC - Strings extracted from menus
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Hatta.z, 2014
+# Muhammad Wahyu Dwinash <Dwinash@gmail.com>, 2014
+# Reza Septyan .R. <ainofuyuumI@outlook.com>, 2014
+# rizqiromadhon <rizqi-romadhon@outlook.com>, 2014
+# zk, 2015-2016
+# zk, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-01-31 22:01+0000\n"
+"Last-Translator: Underground78\n"
+"Language-Team: Indonesian (http://www.transifex.com/mpc-hc/mpc-hc/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "POPUP"
+msgid "&File"
+msgstr "&Berkas"
+
+msgctxt "ID_FILE_OPENQUICK"
+msgid "&Quick Open File..."
+msgstr "Buka Berkas &Cepat..."
+
+msgctxt "ID_FILE_OPENMEDIA"
+msgid "&Open File..."
+msgstr "B&uka Berkas..."
+
+msgctxt "ID_FILE_OPENDVDBD"
+msgid "Open &DVD/BD..."
+msgstr "Buka &DVD/BD"
+
+msgctxt "ID_FILE_OPENDEVICE"
+msgid "Open De&vice..."
+msgstr "Buka &Perangkat..."
+
+msgctxt "ID_FILE_OPENDIRECTORY"
+msgid "Open Dir&ectory..."
+msgstr "Buka Dir&ektori..."
+
+msgctxt "ID_FILE_OPENDISC"
+msgid "O&pen Disc"
+msgstr "Buka Cakra&m"
+
+msgctxt "ID_RECENT_FILES"
+msgid "Recent &Files"
+msgstr "Berkas Ba&ru-baru Ini"
+
+msgctxt "ID_FILE_CLOSE_AND_RESTORE"
+msgid "&Close"
+msgstr "&Tutup"
+
+msgctxt "ID_FILE_SAVE_COPY"
+msgid "&Save a Copy..."
+msgstr "&Simpan Salinan..."
+
+msgctxt "ID_FILE_SAVE_IMAGE"
+msgid "Save &Image..."
+msgstr "S&impan Gambar..."
+
+msgctxt "ID_FILE_SAVE_THUMBNAILS"
+msgid "Save &Thumbnails..."
+msgstr "Simpan Mi&niatur Gambar..."
+
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "Subtitel"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Muat Subtitel..."
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Simpan S&ubtitel..."
+
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "Un&duh Subtitel..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Unggah Subtitel..."
+
+msgctxt "ID_FILE_PROPERTIES"
+msgid "P&roperties"
+msgstr "Pr&operti"
+
+msgctxt "ID_FILE_EXIT"
+msgid "E&xit"
+msgstr "&Keluar"
+
+msgctxt "POPUP"
+msgid "&View"
+msgstr "&Tilik"
+
+msgctxt "ID_VIEW_CAPTIONMENU"
+msgid "Caption&&Menu"
+msgstr "Takarir & &Menu"
+
+msgctxt "ID_VIEW_SEEKER"
+msgid "See&k Bar"
+msgstr "Bilah Jang&kau"
+
+msgctxt "ID_VIEW_CONTROLS"
+msgid "&Controls"
+msgstr "&Pengendali"
+
+msgctxt "ID_VIEW_INFORMATION"
+msgid "&Information"
+msgstr "&Informasi"
+
+msgctxt "ID_VIEW_STATISTICS"
+msgid "&Statistics"
+msgstr "&Statistik"
+
+msgctxt "ID_VIEW_STATUS"
+msgid "St&atus"
+msgstr "St&atus"
+
+msgctxt "ID_VIEW_SUBRESYNC"
+msgid "Su&bresync"
+msgstr "Su&bresync"
+
+msgctxt "ID_VIEW_PLAYLIST"
+msgid "Pla&ylist"
+msgstr "Da&ftar Putar"
+
+msgctxt "ID_VIEW_CAPTURE"
+msgid "Captu&re"
+msgstr "Tan&gkapan"
+
+msgctxt "ID_VIEW_NAVIGATION"
+msgid "Na&vigation"
+msgstr "Na&vigasi"
+
+msgctxt "ID_VIEW_DEBUGSHADERS"
+msgid "&Debug Shaders"
+msgstr "Awakutu Sha&ders"
+
+msgctxt "POPUP"
+msgid "&Presets..."
+msgstr "&Prasetel..."
+
+msgctxt "ID_VIEW_PRESETS_MINIMAL"
+msgid "&Minimal"
+msgstr "&Minimal"
+
+msgctxt "ID_VIEW_PRESETS_COMPACT"
+msgid "&Compact"
+msgstr "&Ringkas"
+
+msgctxt "ID_VIEW_PRESETS_NORMAL"
+msgid "&Normal"
+msgstr "&Normal"
+
+msgctxt "ID_VIEW_FULLSCREEN"
+msgid "F&ull Screen"
+msgstr "Layar Pen&uh"
+
+msgctxt "POPUP"
+msgid "&Zoom"
+msgstr "&Zum"
+
+msgctxt "ID_VIEW_ZOOM_50"
+msgid "&50%"
+msgstr "&50%"
+
+msgctxt "ID_VIEW_ZOOM_100"
+msgid "&100%"
+msgstr "&100%"
+
+msgctxt "ID_VIEW_ZOOM_200"
+msgid "&200%"
+msgstr "&200%"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT"
+msgid "Auto &Fit"
+msgstr "Oto &Suai"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (&Larger Only)"
+msgstr "Oto Suai (&Lebih Besar Saja)"
+
+msgctxt "POPUP"
+msgid "R&enderer Settings"
+msgstr "Pengaturan Per&ender"
+
+msgctxt "ID_VIEW_TEARING_TEST"
+msgid "&Tearing Test"
+msgstr "Uji &Tearing"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "Statistik &Tampilan"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Tampilkan Waktu Saat &Ini"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Tampilkan Nama &Berkas"
+
+msgctxt "POPUP"
+msgid "&Output Range"
+msgstr "Rentang &Keluaran"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
+msgid "&0 - 255"
+msgstr "&0 - 255"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
+msgid "&16 - 235"
+msgstr "&16 - 235"
+
+msgctxt "POPUP"
+msgid "&Presentation"
+msgstr "&Presentasi"
+
+msgctxt "ID_VIEW_D3DFULLSCREEN"
+msgid "D3D Fullscreen &Mode"
+msgstr "&Mode Layar Penuh D3D"
+
+msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
+msgid "D3D Fullscreen &GUI Support"
+msgstr "Dukungan &GUI Layar Penuh D3D"
+
+msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
+msgid "10-bit &RGB Output"
+msgstr "Keluaran 10-bit &RGB"
+
+msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
+msgid "Force 10-bit RGB &Input"
+msgstr "Paksa Masukkan 10-b&it RGB"
+
+msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
+msgid "&Full Floating Point Processing"
+msgstr "Pemrosesan &Full Floating Point"
+
+msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
+msgid "&Half Floating Point Processing"
+msgstr "Pemrosesan &Half Floating Point"
+
+msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
+msgid "Disable desktop composition (&Aero)"
+msgstr "Nonfungsikan komposisi destop (&Aero)"
+
+msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time &Correction"
+msgstr "Fungsikan &Koreksi Waktu Frame"
+
+msgctxt "POPUP"
+msgid "&Color Management"
+msgstr "Pengelolaan &Warna "
+
+msgctxt "ID_VIEW_CM_ENABLE"
+msgid "&Enable"
+msgstr "&Fungsikan"
+
+msgctxt "POPUP"
+msgid "&Input Type"
+msgstr "Jen&is Masukan"
+
+msgctxt "ID_VIEW_CM_INPUT_AUTO"
+msgid "&Auto-Detect"
+msgstr "&Auto-Deteksi"
+
+msgctxt "ID_VIEW_CM_INPUT_HDTV"
+msgid "&HDTV"
+msgstr "&HDTV"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
+msgid "SDTV &NTSC"
+msgstr "SDTV &NTSC"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
+msgid "SDTV &PAL"
+msgstr "SDTV &PAL"
+
+msgctxt "POPUP"
+msgid "Ambient &Light"
+msgstr "Cahaya Ambient"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
+msgid "&Bright (2.2 Gamma)"
+msgstr "&Terang (2.2 Gamma)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
+msgid "&Dim (2.35 Gamma)"
+msgstr "&Redup (2.35 Gamma)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
+msgid "D&ark (2.4 Gamma)"
+msgstr "Gel&ap (2.4 Gamma)"
+
+msgctxt "POPUP"
+msgid "&Rendering Intent"
+msgstr "Tujuan &Render"
+
+msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
+msgid "&Perceptual"
+msgstr "&Perceptual"
+
+msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
+msgid "&Relative Colorimetric"
+msgstr "Metrik Warna &Relatif"
+
+msgctxt "ID_VIEW_CM_INTENT_SATURATION"
+msgid "&Saturation"
+msgstr "&Kejenuhan"
+
+msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
+msgid "&Absolute Colorimetric"
+msgstr "Metrik Warna &Absolut"
+
+msgctxt "POPUP"
+msgid "&VSync"
+msgstr "&VSync"
+
+msgctxt "ID_VIEW_VSYNC"
+msgid "&VSync"
+msgstr "&VSync"
+
+msgctxt "ID_VIEW_VSYNCACCURATE"
+msgid "&Accurate VSync"
+msgstr "VSync &Akurat"
+
+msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
+msgid "A&lternative VSync"
+msgstr "VSync A&lternatif"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
+msgid "&Decrease VSync Offset"
+msgstr "&Turunkan Ofset VSync"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
+msgid "&Increase VSync Offset"
+msgstr "Na&ikkan Ofset Vsync"
+
+msgctxt "POPUP"
+msgid "&GPU Control"
+msgstr "Pengendali &GPU"
+
+msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
+msgid "Flush GPU &before VSync"
+msgstr "Bilas GPU se&belum VSync"
+
+msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
+msgid "Flush GPU &after Present"
+msgstr "Bilas GPU setel&ah Present"
+
+msgctxt "ID_VIEW_FLUSHGPU_WAIT"
+msgid "&Wait for flushes"
+msgstr "&Tunggu membilas"
+
+msgctxt "POPUP"
+msgid "R&eset"
+msgstr "S&etel Ulang"
+
+msgctxt "ID_VIEW_RESET_DEFAULT"
+msgid "Reset to &default renderer settings"
+msgstr "Kembalikan ke pengaturan peren&der bawaan"
+
+msgctxt "ID_VIEW_RESET_OPTIMAL"
+msgid "Reset to &optimal renderer settings"
+msgstr "Kembalikan ke pengaturan perender &optimal"
+
+msgctxt "POPUP"
+msgid "Video &Frame"
+msgstr "&Frame Video"
+
+msgctxt "ID_VIEW_VF_HALF"
+msgid "&Half Size"
+msgstr "Ukuran Setenga&h"
+
+msgctxt "ID_VIEW_VF_NORMAL"
+msgid "&Normal Size"
+msgstr "Ukuran &Normal"
+
+msgctxt "ID_VIEW_VF_DOUBLE"
+msgid "&Double Size"
+msgstr "Ukuran Gan&da"
+
+msgctxt "ID_VIEW_VF_STRETCH"
+msgid "&Stretch To Window"
+msgstr "&Lebarkan ke Jendela"
+
+msgctxt "ID_VIEW_VF_FROMINSIDE"
+msgid "Touch Window From &Inside"
+msgstr "Sentuh Jendela Dar&i Dalam"
+
+msgctxt "ID_VIEW_VF_ZOOM1"
+msgid "Zoom &1"
+msgstr "Zum &1"
+
+msgctxt "ID_VIEW_VF_ZOOM2"
+msgid "Zoom &2"
+msgstr "Zum &2"
+
+msgctxt "ID_VIEW_VF_FROMOUTSIDE"
+msgid "Touch Window From &Outside"
+msgstr "Sentuh Jendela Dari L&uar"
+
+msgctxt "POPUP"
+msgid "&Aspect Ratio"
+msgstr "Nisb&ah Bidang"
+
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Bawaan (DAR)"
+
+msgctxt "ID_ASPECTRATIO_4_3"
+msgid "&4:3"
+msgstr "&4:3"
+
+msgctxt "ID_ASPECTRATIO_5_4"
+msgid "&5:4"
+msgstr "&5:4"
+
+msgctxt "ID_ASPECTRATIO_16_9"
+msgid "&16:9"
+msgstr "&16:9"
+
+msgctxt "ID_ASPECTRATIO_235_100"
+msgid "&235:100"
+msgstr "&235:100"
+
+msgctxt "ID_ASPECTRATIO_185_100"
+msgid "1&85:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Asumsi Piksel Bujur&sangkar (SAR)"
+
+msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
+msgid "&Correct Monitor/Desktop AR Diff"
+msgstr "&Koreksi Beda AR Monitor/Destop"
+
+msgctxt "POPUP"
+msgid "Pa&n&&Scan"
+msgstr "Pa&n & &Pindai"
+
+msgctxt "ID_VIEW_INCSIZE"
+msgid "&Increase Size"
+msgstr "Per&besar Ukuran"
+
+msgctxt "ID_VIEW_DECSIZE"
+msgid "&Decrease Size"
+msgstr "Per&kecil Ukuran"
+
+msgctxt "ID_VIEW_INCWIDTH"
+msgid "I&ncrease Width"
+msgstr "Pe&rbesar Lebar"
+
+msgctxt "ID_VIEW_DECWIDTH"
+msgid "D&ecrease Width"
+msgstr "P&erkecil Lebar"
+
+msgctxt "ID_VIEW_INCHEIGHT"
+msgid "In&crease Height"
+msgstr "Tam&bahkan Tinggi"
+
+msgctxt "ID_VIEW_DECHEIGHT"
+msgid "Decre&ase Height"
+msgstr "Kur&angi Tinggi"
+
+msgctxt "ID_PANSCAN_MOVERIGHT"
+msgid "Move &Right"
+msgstr "Pindah ke &Kanan"
+
+msgctxt "ID_PANSCAN_MOVELEFT"
+msgid "Move &Left"
+msgstr "Pindak ke &Kiri"
+
+msgctxt "ID_PANSCAN_MOVEUP"
+msgid "Move &Up"
+msgstr "Pindah ke &Atas"
+
+msgctxt "ID_PANSCAN_MOVEDOWN"
+msgid "Move &Down"
+msgstr "Pindah ke &Bawah"
+
+msgctxt "ID_PANSCAN_CENTER"
+msgid "Cen&ter"
+msgstr "Pusa&t"
+
+msgctxt "ID_VIEW_RESET"
+msgid "Re&set"
+msgstr "&Setel Ulang"
+
+msgctxt "POPUP"
+msgid "On &Top"
+msgstr "Di A&tas"
+
+msgctxt "ID_ONTOP_DEFAULT"
+msgid "&Default"
+msgstr "&Bawaan"
+
+msgctxt "ID_ONTOP_ALWAYS"
+msgid "&Always"
+msgstr "Sel&alu"
+
+msgctxt "ID_ONTOP_WHILEPLAYING"
+msgid "While &Playing"
+msgstr "Ketika &Memutar"
+
+msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
+msgid "While Playing &Video"
+msgstr "Ketika Memutar &Video"
+
+msgctxt "ID_VIEW_OPTIONS"
+msgid "&Options..."
+msgstr "&Opsi..."
+
+msgctxt "POPUP"
+msgid "&Play"
+msgstr "&Putar"
+
+msgctxt "ID_PLAY_PLAYPAUSE"
+msgid "&Play/Pause"
+msgstr "&Putar/Jeda"
+
+msgctxt "ID_PLAY_STOP"
+msgid "&Stop"
+msgstr "&Hentikan"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Fra&me Step"
+msgstr "Tahap F&rame"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Ulangi"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "S&elamanya"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Berkas"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "Daftar &Putar"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "&Decrease Rate"
+msgstr "&Turunkan Laju"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "&Increase Rate"
+msgstr "&Naikkan Laju"
+
+msgctxt "ID_PLAY_RESETRATE"
+msgid "R&eset Rate"
+msgstr "S&etel Ulang Laju"
+
+msgctxt "ID_FILTERS"
+msgid "&Filters"
+msgstr "&Filter"
+
+msgctxt "ID_SHADERS"
+msgid "S&haders"
+msgstr "S&hader"
+
+msgctxt "ID_AUDIOS"
+msgid "&Audio Track"
+msgstr "Trek &Audio"
+
+msgctxt "ID_SUBTITLES"
+msgid "Su&btitle Track"
+msgstr "Trek Su&btitel"
+
+msgctxt "ID_VIDEO_STREAMS"
+msgid "Vide&o Track"
+msgstr "Trek &Video"
+
+msgctxt "POPUP"
+msgid "&Volume"
+msgstr "&Volume"
+
+msgctxt "ID_VOLUME_UP"
+msgid "&Up"
+msgstr "&Naik"
+
+msgctxt "ID_VOLUME_DOWN"
+msgid "&Down"
+msgstr "&Turun"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "&Mute"
+msgstr "&Diam"
+
+msgctxt "POPUP"
+msgid "Af&ter Playback"
+msgstr "Se&telah Pemutaran"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "&Tidak melakukan apa-apa"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Putar berkas sela&njutnya di dalam folder"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "&Matikan Layar"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
+msgid "&Exit"
+msgstr "&Keluar"
+
+msgctxt "ID_AFTERPLAYBACK_STANDBY"
+msgid "&Stand By"
+msgstr "&Siaga"
+
+msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
+msgid "&Hibernate"
+msgstr "&Hibernasi"
+
+msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
+msgid "Shut&down"
+msgstr "Ma&tikan"
+
+msgctxt "ID_AFTERPLAYBACK_LOGOFF"
+msgid "Log &Off"
+msgstr "Kel&uar"
+
+msgctxt "ID_AFTERPLAYBACK_LOCK"
+msgid "&Lock"
+msgstr "&Kunci"
+
+msgctxt "POPUP"
+msgid "&Navigate"
+msgstr "&Navigasi"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "&Previous"
+msgstr "&Sebelumnya"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "&Next"
+msgstr "Sela&njutnya"
+
+msgctxt "ID_NAVIGATE_GOTO"
+msgid "&Go To..."
+msgstr "Per&gi Ke..."
+
+msgctxt "ID_NAVIGATE_TITLEMENU"
+msgid "&Title Menu"
+msgstr "Menu &Judul"
+
+msgctxt "ID_NAVIGATE_ROOTMENU"
+msgid "&Root Menu"
+msgstr "Menu Aka&r"
+
+msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
+msgid "&Subtitle Menu"
+msgstr "Menu &Subtitel"
+
+msgctxt "ID_NAVIGATE_AUDIOMENU"
+msgid "&Audio Menu"
+msgstr "Menu &Audio"
+
+msgctxt "ID_NAVIGATE_ANGLEMENU"
+msgid "An&gle Menu"
+msgstr "Menu Su&dut"
+
+msgctxt "ID_NAVIGATE_CHAPTERMENU"
+msgid "&Chapter Menu"
+msgstr "Menu &Bab"
+
+msgctxt "ID_FAVORITES"
+msgid "F&avorites"
+msgstr "&Favorit"
+
+msgctxt "POPUP"
+msgid "&Help"
+msgstr "B&antuan"
+
+msgctxt "ID_HELP_HOMEPAGE"
+msgid "&Home Page"
+msgstr "Halaman &Beranda"
+
+msgctxt "ID_HELP_CHECKFORUPDATE"
+msgid "Check for &updates"
+msgstr "Periksa Pe&mutakhiran"
+
+msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
+msgid "&Command Line Switches"
+msgstr "Pengganti &Perintah Baris"
+
+msgctxt "ID_HELP_TOOLBARIMAGES"
+msgid "Download &Toolbar Images"
+msgstr "Unduh Gambar Bilah &Alat"
+
+msgctxt "ID_HELP_DONATE"
+msgid "&Donate"
+msgstr "&Donasi"
+
+msgctxt "ID_HELP_ABOUT"
+msgid "&About..."
+msgstr "&Tentang"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.id.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.id.strings.po
new file mode 100644
index 000000000..286b2877d
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.id.strings.po
@@ -0,0 +1,3986 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Asep Suparman <asep.suparman@outlook.com>, 2014
+# Bahasa Fansub <joshua.siagian.hidden1234@gmail.com>, 2014
+# Dody Prayuto <dodzaguila@gmail.com>, 2016
+# Dody Prayuto <dodzaguila@gmail.com>, 2016
+# DyarPerdana <hysteria27@gmail.com>, 2014
+# DyarPerdana <hysteria27@gmail.com>, 2014
+# yoga.mardia <made.yoga12@gmail.com>, 2014
+# Mulia Arifandi Nasution, 2014
+# Mulia Arifandi Nasution, 2014
+# Reza Septyan .R. <ainofuyuumI@outlook.com>, 2014
+# rizqiromadhon <rizqi-romadhon@outlook.com>, 2014
+# rizqiromadhon <rizqi-romadhon@outlook.com>, 2014
+# yoga.mardia <made.yoga12@gmail.com>, 2014
+# zk, 2015-2016
+# zk, 2015
+# zk, 2015
+# zk, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-15 14:39+0000\n"
+"Last-Translator: Rachman <blackarcher21@yahoo.com>\n"
+"Language-Team: Indonesian (http://www.transifex.com/mpc-hc/mpc-hc/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "IDS_INFOBAR_LOCATION"
+msgid "Location"
+msgstr "Lokasi"
+
+msgctxt "IDS_INFOBAR_VIDEO"
+msgid "Video"
+msgstr "Video"
+
+msgctxt "IDS_INFOBAR_AUDIO"
+msgid "Audio"
+msgstr "Audio"
+
+msgctxt "IDS_INFOBAR_SUBTITLES"
+msgid "Subtitles"
+msgstr "Subtitel"
+
+msgctxt "IDS_INFOBAR_CHAPTER"
+msgid "Chapter"
+msgstr "Bab"
+
+msgctxt "IDS_CONTROLS_COMPLETING"
+msgid "Completing..."
+msgstr "Menyelesaikan..."
+
+msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
+msgid "Play Video"
+msgstr "Putar Video"
+
+msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
+msgid "Play Music"
+msgstr "Putar Musik"
+
+msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
+msgid "Play Audio CD"
+msgstr "Putar CD Audio"
+
+msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
+msgid "Play DVD Movie"
+msgstr "Putar DVD Film"
+
+msgctxt "IDS_PROPSHEET_PROPERTIES"
+msgid "Properties"
+msgstr "Properti"
+
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Berkas"
+
+msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
+msgid "&Default Style"
+msgstr "Gaya Ba&waan"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Daftar Putar"
+
+msgctxt "IDS_FAVFILES"
+msgid "Files"
+msgstr "Berkas"
+
+msgctxt "IDS_FAVDVDS"
+msgid "DVDs"
+msgstr "DVD"
+
+msgctxt "IDS_INFOBAR_CHANNEL"
+msgid "Channel"
+msgstr "Saluran"
+
+msgctxt "IDS_INFOBAR_TIME"
+msgid "Time"
+msgstr "Waktu"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET"
+msgid "Sync Offset"
+msgstr "Ofset Laras"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
+msgid "avg: %d ms, dev: %d ms"
+msgstr "rerata: %d ms, simpangan: %d ms"
+
+msgctxt "IDS_STATSBAR_JITTER"
+msgid "Jitter"
+msgstr "Jitter"
+
+msgctxt "IDS_STATSBAR_BITRATE"
+msgid "Bitrate"
+msgstr "Laju Bit"
+
+msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
+msgid "(avg/cur)"
+msgstr "(rerata/saat-ini)"
+
+msgctxt "IDS_STATSBAR_SIGNAL"
+msgid "Signal"
+msgstr "Sinyal"
+
+msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
+msgid "Strength: %d dB, Quality: %ld%%"
+msgstr "Kekuatan: %d dB, Kualitas: %ld%%"
+
+msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
+msgid "Styles"
+msgstr "Gaya"
+
+msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
+msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
+msgstr "Jika target render tidak ditentukan, subtitel SSA/ASS akan dirender relatif pada gambar video sedangkan teks subtitel lainnya akan dirender relatif pada jendela aplikasi."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Mode Ulang: Daftar Putar"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Mode Ulang: Berkas"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Ulangi Selamanya: Nyala"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Ulangi Selamanya: Mati"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Ulangi Selamanya"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG0"
+msgid "Never (fastest approach)"
+msgstr "Tidak Pernah (pendekatan tercepat)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG1"
+msgid "Only when switching different video types (default)"
+msgstr "Hanya ketika mengganti jenis video yang berbeda (bawaan)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG2"
+msgid "Always (slowest option)"
+msgstr "Selalu (pilihan terlambat)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
+msgid "Not supported by some devices. Two video decoders always present in the filter graph."
+msgstr "Tidak didukung oleh sebagian perangkat. Dua dekoder video selalu tersedia di grafik filter."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
+msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
+msgstr "Cepat kecuali ketika berpindah antara saluran video yang berbeda. Hanya satu dekoder video tersedia di grafik filter."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
+msgid "Not recommended. Only for testing purposes."
+msgstr "Tidak direkomendasikan. Hanya untuk uji coba."
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG0"
+msgid "Never if possible (fastest, but not supported by most filters)"
+msgstr "Tidak pernah jika mungkin (tercepat, tetapi tidak didukung oleh kebanyakan filter)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG1"
+msgid "Only when switching different video types (default)"
+msgstr "Hanya ketika mengganti jenis video yang berbeda (bawaan)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG2"
+msgid "Always (may be required by some devices)"
+msgstr "Selalu (mungkin dibutuhkan oleh beberapa perangkat)"
+
+msgctxt "IDS_INFOBAR_PARENTAL_RATING"
+msgid "Parental rating"
+msgstr "Peringkat orang tua"
+
+msgctxt "IDS_PARENTAL_RATING"
+msgid "%d+"
+msgstr "%d+"
+
+msgctxt "IDS_NO_PARENTAL_RATING"
+msgid "Not rated"
+msgstr "Belum dinilai"
+
+msgctxt "IDS_INFOBAR_CONTENT"
+msgid "Content"
+msgstr "Konten"
+
+msgctxt "IDS_CONTENT_MOVIE_DRAMA"
+msgid "Movie/Drama"
+msgstr "Film/Drama"
+
+msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
+msgid "News/Current affairs"
+msgstr "Berita/Peristiwa terkini"
+
+msgctxt "IDS_SPEED_UNIT_G"
+msgid "GB/s"
+msgstr "GB/s"
+
+msgctxt "IDS_FILE_FAV_ADDED"
+msgid "File added to favorites"
+msgstr "Berkas ditambahkan ke favorit"
+
+msgctxt "IDS_DVD_FAV_ADDED"
+msgid "DVD added to favorites"
+msgstr "DVD ditambahkan ke favorit"
+
+msgctxt "IDS_CAPTURE_SETTINGS"
+msgid "Capture Settings"
+msgstr "Pengaturan Tangkapan"
+
+msgctxt "IDS_NAVIGATION_BAR"
+msgid "Navigation Bar"
+msgstr "Bilah Navigasi"
+
+msgctxt "IDS_SUBRESYNC_CAPTION"
+msgid "Subresync"
+msgstr "Subresync"
+
+msgctxt "IDS_SUBRESYNC_CLN_TIME"
+msgid "Time"
+msgstr "Waktu"
+
+msgctxt "IDS_SUBRESYNC_CLN_END"
+msgid "End"
+msgstr "Akhir"
+
+msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
+msgid "Preview"
+msgstr "Pratinjau"
+
+msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
+msgid "Vob ID"
+msgstr "ID Vob"
+
+msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
+msgid "Cell ID"
+msgstr "ID Cell"
+
+msgctxt "IDS_SUBRESYNC_CLN_FORCED"
+msgid "Forced"
+msgstr "Paksa"
+
+msgctxt "IDS_SUBRESYNC_CLN_TEXT"
+msgid "Text"
+msgstr "Teks"
+
+msgctxt "IDS_SUBRESYNC_CLN_STYLE"
+msgid "Style"
+msgstr "Gaya"
+
+msgctxt "IDS_SUBRESYNC_CLN_FONT"
+msgid "Font"
+msgstr "Fon"
+
+msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
+msgid "Failed to render some of the pins of the DVD Navigator filter"
+msgstr "Gagal untuk merender beberapa pin dari filter Navigator DVD"
+
+msgctxt "IDS_DVD_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for DVD playback"
+msgstr "Gagal untuk menyediakan antarmuka yang diperlukan untuk pemutaran DVD"
+
+msgctxt "IDS_CAPTURE_LIVE"
+msgid "Live"
+msgstr "Langsung"
+
+msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
+msgid "Can't add video capture filter to the graph"
+msgstr "Tidak bisa menambahkan filter tangkapan video ke grafik"
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
+msgid "Can't add audio capture filter to the graph"
+msgstr "Tidak bisa menambahkan filter tangkapan suara ke grafik"
+
+msgctxt "IDS_CAPTURE_ERROR_DEVICE"
+msgid "Could not open capture device."
+msgstr "Tidak bisa membuka perangkat penangkap."
+
+msgctxt "IDS_INVALID_PARAMS_ERROR"
+msgid "Can't open, invalid input parameters"
+msgstr "Tidak bisa membuka, parameter masukan tidak valid"
+
+msgctxt "IDS_EDIT_LIST_EDITOR"
+msgid "Edit List Editor"
+msgstr "Sunting Penyunting Daftar"
+
+msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
+msgid "The entered time is greater than the file duration."
+msgstr "Waktu yang dimasukan lebih besar daripada durasi berkas"
+
+msgctxt "IDS_MISSING_ICONS_LIB"
+msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
+msgstr "Pustaka Ikon \"mpciconlib.dll\" hilang.\nIkon bawaan pemutar akan digunakan untuk asosiasi berkas.\nMohon, pasang ulang MPC-HC untuk mendapatkan \"mpciconlib.dll\"."
+
+msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
+msgid "File"
+msgstr "Berkas"
+
+msgctxt "IDS_SUBDL_DLG_LANGUAGE_COL"
+msgid "Language"
+msgstr "Bahasa"
+
+msgctxt "IDS_SUBDL_DLG_FORMAT_COL"
+msgid "Format"
+msgstr "Format"
+
+msgctxt "IDS_SUBDL_DLG_DISC_COL"
+msgid "Disc"
+msgstr "Cakram"
+
+msgctxt "IDS_SUBDL_DLG_TITLES_COL"
+msgid "Title(s)"
+msgstr "Judul"
+
+msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
+msgid "CharSet"
+msgstr "CharSet"
+
+msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
+msgid "Unicode"
+msgstr "Unicode"
+
+msgctxt "IDS_SUBRESYNC_CLN_LAYER"
+msgid "Layer"
+msgstr "Lapisan"
+
+msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
+msgid "Actor"
+msgstr "Aktor"
+
+msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
+msgid "Effect"
+msgstr "Efek"
+
+msgctxt "IDS_PLAYLIST_CAPTION"
+msgid "Playlist"
+msgstr "Daftar Putar"
+
+msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
+msgid "On/Off"
+msgstr "Nyala/Mati"
+
+msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
+msgid "From (FPS)"
+msgstr "Dari (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
+msgid "To (FPS)"
+msgstr "Ke (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
+msgid "Display mode (Hz)"
+msgstr "Mode tampilan (Hz)"
+
+msgctxt "IDS_PPAGE_FS_DEFAULT"
+msgid "Default"
+msgstr "Bawaan"
+
+msgctxt "IDS_PPAGE_FS_OTHER"
+msgid "Other"
+msgstr "Lainnya"
+
+msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
+msgid "System Default"
+msgstr "Bawaan Sistem"
+
+msgctxt "IDS_GRAPH_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for playback"
+msgstr "Gagal untuk menyediakan antarmuka yang diperlukan untuk pemutaran"
+
+msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
+msgid "Could not set target window for graph notification"
+msgstr "Tidak bisa menetapkan target jendela untuk notifikasi grafik"
+
+msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
+msgid "Failed to render all pins of the DVD Navigator filter"
+msgstr "Gagal merender semua pin filter Navigator DVD"
+
+msgctxt "IDS_PLAYLIST_OPEN"
+msgid "&Open"
+msgstr "&Buka"
+
+msgctxt "IDS_PLAYLIST_ADD"
+msgid "A&dd"
+msgstr "Ta&mbah"
+
+msgctxt "IDS_PLAYLIST_REMOVE"
+msgid "&Remove"
+msgstr "&Buang"
+
+msgctxt "IDS_PLAYLIST_CLEAR"
+msgid "C&lear"
+msgstr "Ber&sihkan"
+
+msgctxt "IDS_PLAYLIST_COPYTOCLIPBOARD"
+msgid "&Copy to clipboard"
+msgstr "&Salin ke papan klip"
+
+msgctxt "IDS_PLAYLIST_SAVEAS"
+msgid "&Save As..."
+msgstr "&Simpan Sebagai..."
+
+msgctxt "IDS_PLAYLIST_SORTBYLABEL"
+msgid "Sort by &label"
+msgstr "Urutkan menurut &label"
+
+msgctxt "IDS_PLAYLIST_SORTBYPATH"
+msgid "Sort by &path"
+msgstr "Urutkan menurut &jalur"
+
+msgctxt "IDS_PLAYLIST_RANDOMIZE"
+msgid "R&andomize"
+msgstr "&Acak"
+
+msgctxt "IDS_PLAYLIST_RESTORE"
+msgid "R&estore"
+msgstr "K&embalikan"
+
+msgctxt "IDS_SUBRESYNC_SEPARATOR"
+msgid "&Separator"
+msgstr "Pemi&sah"
+
+msgctxt "IDS_SUBRESYNC_DELETE"
+msgid "&Delete"
+msgstr "&Hapus"
+
+msgctxt "IDS_SUBRESYNC_DUPLICATE"
+msgid "D&uplicate"
+msgstr "D&uplikat"
+
+msgctxt "IDS_SUBRESYNC_RESET"
+msgid "&Reset"
+msgstr "&Setel Ulang"
+
+msgctxt "IDS_MPLAYERC_104"
+msgid "Subtitle Delay -"
+msgstr "Tundaan Subtitel -"
+
+msgctxt "IDS_MPLAYERC_105"
+msgid "Subtitle Delay +"
+msgstr "Tundaan Subtitel +"
+
+msgctxt "IDS_FILE_SAVE_THUMBNAILS"
+msgid "Save thumbnails"
+msgstr "Simpan gambar mini"
+
+msgctxt "IDD_PPAGEPLAYBACK"
+msgid "Playback"
+msgstr "Pemutaran"
+
+msgctxt "IDD_PPAGEPLAYER"
+msgid "Player"
+msgstr "Pemutar"
+
+msgctxt "IDD_PPAGEDVD"
+msgid "Playback::DVD/OGM"
+msgstr "Pemutaran::DVD/OGM"
+
+msgctxt "IDD_PPAGESUBTITLES"
+msgid "Subtitles"
+msgstr "Subtitel"
+
+msgctxt "IDD_PPAGEFORMATS"
+msgid "Player::Formats"
+msgstr "Pemutar::Format"
+
+msgctxt "IDD_PPAGETWEAKS"
+msgid "Tweaks"
+msgstr "Rekayasa"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER"
+msgid "Internal Filters::Audio Switcher"
+msgstr "Filter Internal::Pengubah Audio"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS"
+msgid "External Filters"
+msgstr "Filter External"
+
+msgctxt "IDD_PPAGESHADERS"
+msgid "Playback::Shaders"
+msgstr "Pemutaran::Shader"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Sumberdaya"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Bermacam-lainnya"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Pemutaran::Tangkapan"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Pemutaran::Perender Laras"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Pemutaran::Layar Penuh"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Filter Internal::Perender Audio"
+
+msgctxt "IDS_AUDIOSWITCHER"
+msgid "Audio Switcher"
+msgstr "Pengubah Audio"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
+msgid "New version of the icon library"
+msgstr "Versi baru dari pustaka ikon"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
+msgid "Do you want to reassociate the icons?"
+msgstr "Apakah Anda ingin mengasosiasi ulang ikon?"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
+msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
+msgstr "Ini akan memperbaiki ikon yang tidak ditampilkan dengan benar setelah pemutakhiran pustaka ikon.\nBerkas asosiasi tidak akan dimodifikasi, hanya berkas yang bermasalah yang akan di perbarui."
+
+msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
+msgid "Old Video Renderer"
+msgstr "Perender Video Lama"
+
+msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
+msgid "Overlay Mixer Renderer"
+msgstr "Perender Pengadon Lapisan"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
+msgid "Video Mixing Renderer 9 (windowed)"
+msgstr "Video Mixing Renderer 9 (windowed)"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
+msgid "Video Mixing Renderer 9 (renderless)"
+msgstr "Video Mixing Renderer 9 (renderless)"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR"
+msgid "Enhanced Video Renderer"
+msgstr "Perender Video Dipertingkat"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
+msgid "Enhanced Video Renderer (custom presenter)"
+msgstr "Perender Video Dipertingkat (penyaji ubahsuai)"
+
+msgctxt "IDS_PPAGE_OUTPUT_DXR"
+msgid "Haali Video Renderer"
+msgstr "Perender Video Haali"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Nihil (semua)"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Nihil (tidak dikompresi)"
+
+msgctxt "IDS_PPAGE_OUTPUT_MADVR"
+msgid "madVR"
+msgstr "madVR"
+
+msgctxt "IDD_PPAGEACCELTBL"
+msgid "Player::Keys"
+msgstr "Pemutar::Kunci"
+
+msgctxt "IDD_PPAGESUBSTYLE"
+msgid "Subtitles::Default Style"
+msgstr "Subtitel::Gaya Bawaan"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS"
+msgid "Internal Filters"
+msgstr "Filter Internal"
+
+msgctxt "IDD_PPAGELOGO"
+msgid "Player::Logo"
+msgstr "Pemutar::Logo"
+
+msgctxt "IDD_PPAGEOUTPUT"
+msgid "Playback::Output"
+msgstr "Pemutaran::Keluaran"
+
+msgctxt "IDD_PPAGEWEBSERVER"
+msgid "Player::Web Interface"
+msgstr "Pemutar::Antarmuka Web"
+
+msgctxt "IDD_FILEPROPDETAILS"
+msgid "Details"
+msgstr "Detail"
+
+msgctxt "IDD_FILEPROPCLIP"
+msgid "Clip"
+msgstr "Klip"
+
+msgctxt "IDC_DSSYSDEF"
+msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
+msgstr "Filter perender video bawaan untuk DirectShow. Yang lainnya akan kembali ke berikut ini ketika mereka dengan alasan tertentu tidak bisa dimuat. Pada Windows XP ini sama dengan VMR-7 (windowed)."
+
+msgctxt "IDC_DSOLD"
+msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
+msgstr "Ini perender bawaan dari Windows 9x/me/2k. Tergantung dari keterlihatan jendela video dan kemampuan kartu video Anda, perender akan beralih antara mode render GDI, DirectDraw, Overlay secara otomatis."
+
+msgctxt "IDC_DSOVERLAYMIXER"
+msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
+msgstr "Selalu render dalam overlay. Umumnya hanya format YUV yang diizinkan, tetapi mereka disajikan secara langsung tanpa konversi warna ke RGB. Ini metode perenderan tercepat dari semuanya dan satu-satunya yang Anda bisa andalkan tentang pengaktifan pencerminan video layar penuh ke tv-out."
+
+msgctxt "IDC_DSVMR9WIN"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Hanya tersedia jika DirectX 9 terpasang di sistem Anda. Sangat stabil, tetapi tidak akan pernah menggunakan perenderan Overlay dan karena itu mungkin sedikit lebih lambat dari pengadon Overlay."
+
+msgctxt "IDC_DSVMR9REN"
+msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
+msgstr "Sama seperti VMR-9 (windowed), tetapi dengan Allocator-Presenter plugin dari MPC-HC untuk subtitel. Pencerminan video overlay MUNGKIN bekerja. Warna destop \"True Color\" direkomendasikan. Direkomendasikan untuk Windows XP."
+
+msgctxt "IDC_DSDXR"
+msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
+msgstr "Sama seperti VMR-9 (renderless), tetapi menggunakan pengubah ukuran bicubic dua-laluan sebenarnya."
+
+msgctxt "IDC_DSNULL_COMP"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Sambung ke segala jenis media serupa video dan tidak akan mengirimkan sampel masuk ke manapun. Gunakan ketika Anda tidak memerlukan tampilan video dan ingin menghemat kinerja CPU."
+
+msgctxt "IDC_DSNULL_UNCOMP"
+msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
+msgstr "Sama seperti perender Nihil normal, tetapi ini hanya akan menyambung ke jenis yang tidak terkompresi."
+
+msgctxt "IDC_DSEVR"
+msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
+msgstr "Hanya tersedia pada Vista atau lebih baru atau pada XP dengan paling tidak .NET Framework 3.5 terpasang."
+
+msgctxt "IDC_DSEVR_CUSTOM"
+msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
+msgstr "Sama seperti EVR, tetapi dengan Allocator-Presenter dari MPC-HC untuk subtitel dan paskapemrosesan. Direkomendasikan untuk Windows Vista atau yang lebih baru."
+
+msgctxt "IDC_DSMADVR"
+msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
+msgstr "Perender kualitas tinggi, membutuhkan GPU yang mendukung D3D9 atau lebih baru."
+
+msgctxt "IDC_DSSYNC"
+msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
+msgstr "Sama seperti EVR (CP), tetapi menawarkan beberapa opsi untuk menyelaraskan laju frame video dengan laju penyegaran tampilan untuk menghilangkan lompatan atau frame video terduplikasi."
+
+msgctxt "IDC_RMSYSDEF"
+msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
+msgstr "Perender RealMedia. Skrip SMIL akan bekerja, tetapi tanpa interaksi. Menggunakan DirectDraw dan berjalan dalam Overlay jika memungkinkan."
+
+msgctxt "IDC_RMDX9"
+msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Keluaran dari mesin RealMedia yang dirender oleh Allocator-Presenter berbasis DX9 dari VMR-9 (renderless)."
+
+msgctxt "IDC_QTSYSDEF"
+msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
+msgstr "Perender QuickTime. Bisa menjadi sedikit pelan ketika area video berubah ukuran atau sebagian tertutup jendela lainnya. Ketika Overlay tidak tersedia kemungkinan akan kembali ke GDI."
+
+msgctxt "IDC_QTDX9"
+msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Kaluaran mesin QuickTime yang dirender oleh Allocator-Presenter berbasis DX9 dari VMR-9 (renderless)."
+
+msgctxt "IDC_REGULARSURF"
+msgid "Video surface will be allocated as a regular offscreen surface."
+msgstr "Permukaan video akan dialokasikan seperti permukaan offscreen pada umumnya."
+
+msgctxt "IDS_PPAGE_OUTPUT_SYNC"
+msgid "Sync Renderer"
+msgstr "Perender Laras"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
+msgid "Regular offscreen plain surface"
+msgstr "Permukaan datar offscreen reguler"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
+msgid "2D surfaces"
+msgstr "Permukaan 2D"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
+msgid "3D surfaces (recommended)"
+msgstr "Permukaan 3D (direkomendasikan)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
+msgid "Nearest neighbor"
+msgstr "Tetangga terdekat"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
+msgid "Bilinear"
+msgstr "Bilinear"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
+msgid "Bilinear (PS 2.0)"
+msgstr "Bilinear (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
+msgid "Bicubic A=-0.60 (PS 2.0)"
+msgstr "Bicubic A=-0.60 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
+msgid "Bicubic A=-0.75 (PS 2.0)"
+msgstr "Bicubic A=-0.75 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
+msgid "Bicubic A=-1.00 (PS 2.0)"
+msgstr "Bicubic A=-1.00 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
+msgid "**unavailable**"
+msgstr "**tidak tersedia**"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
+msgid "The selected renderer is not installed."
+msgstr "Perender yang dipilih tidak terpasang."
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Nihil (semua)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Nihil (tidak dikompresi)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Perender Audio Internal"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
+msgid "Name"
+msgstr "Nama"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
+msgid "MIME Type"
+msgstr "Jenis MIME"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
+msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
+msgstr "Dalam rangka melihat sumber daya tertanam dalam peramban Anda, Anda harus memfungsikan antarmuka web.\n\nGunakan tombol \"Simpan Sebagai\" jika Anda hanya ingin menyimpan informasinya."
+
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Unduh Subtitel..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Unggah Subtitel..."
+
+msgctxt "IDS_SUBFILE_DELAY"
+msgid "Delay (ms):"
+msgstr "Tundaan (ms):"
+
+msgctxt "IDS_SPEEDSTEP_AUTO"
+msgid "Auto"
+msgstr "Auto"
+
+msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
+msgid "There are no customized keys to export."
+msgstr "Tidak ada kunci tersesuai untuk diekspor."
+
+msgctxt "IDS_RFS_NO_FILES"
+msgid "No media files found in the archive"
+msgstr "Tidak ada berkas media ditemukan di dalam arsip"
+
+msgctxt "IDS_RFS_COMPRESSED"
+msgid "Compressed files are not supported"
+msgstr "Berkas yang dimampatkan tidak didukung"
+
+msgctxt "IDS_RFS_ENCRYPTED"
+msgid "Encrypted files are not supported"
+msgstr "Berkas yang dienkripsi tidak didukung"
+
+msgctxt "IDS_RFS_MISSING_VOLS"
+msgid "Couldn't find all archive volumes"
+msgstr "Tidak bisa menemukan semua volume arsip"
+
+msgctxt "IDC_TEXTURESURF2D"
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Permukaan video akan dialokasikan sebagai tekstur tetapi fungsi 2d masih akan digunakan untuk menyalin dan meregangkannya pada backbuffer. Membutuhkan kartu video yang bisa mengalokasikan 32-bit, RGBA, tekstur ukuran non-power-of-two dan paling tidak di dalam resolusi video tesebut."
+
+msgctxt "IDC_TEXTURESURF3D"
+msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
+msgstr "Permukaan video akan dialokasikan sebagai tekstur dan digambar sebagai dua segitiga dalam 3d. Antialias yang difungsikan pada pengaturan tampilan mungkin memiliki efek buruk pada kecepatan perenderan."
+
+msgctxt "IDC_DX9RESIZER_COMBO"
+msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
+msgstr "Jika tidak ada dukungan Pixel Shader 2.0, simple bilinear akan otomatis digunakan."
+
+msgctxt "IDC_DSVMR9LOADMIXER"
+msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
+msgstr "Atur VMR-9 (renderless) ke dalam mode pengadon, ini artinya sebagian besar pengendali pada halaman propertinya akan bekerja dan akan menggunakan worker thread terpisah untuk merender frame."
+
+msgctxt "IDC_DSVMR9YUVMIXER"
+msgid "Improves performance at the cost of some compatibility of the renderer."
+msgstr "Meningkatkan kinerja tetapi berakibat pada beberapa kompatibilitas perender."
+
+msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "Reduces tearing but prevents the toolbar from being shown."
+msgstr "Mengurangi tearing tetapi menghalangi kenampakan bilah alat."
+
+msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Reduces tearing by bypassing the default VSync built into D3D."
+msgstr "Mengurangi tearing dengan melewati seluruhnya VSync bawaan dalam D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Pindaian pelaras"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Subtitel tidak dimuat atau perender tidak didukung."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Simpan kompilasi shader di AppData lokal untuk mempercepat waktu muat."
+
+msgctxt "IDS_SRC_VTS"
+msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
+msgstr "Buka VTS_xx_0.ifo untuk memuat berkas VTS_xx_x.vob dalam satu bagian"
+
+msgctxt "IDS_SRC_RFS"
+msgid "Based on RARFileSource, doesn't support compressed files"
+msgstr "Berbasis RARFileSource, tidak mendukung berkas yang dimampatkan"
+
+msgctxt "IDS_INTERNAL_LAVF"
+msgid "Uses LAV Filters"
+msgstr "Menggunakan LAV Filters"
+
+msgctxt "IDS_INTERNAL_LAVF_WMV"
+msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
+msgstr "Menggunakan LAV Filters. Dinonfungsikan secara bawaan karena filter Microsoft biasanya lebih stabil untuk format tersebut.\nJika Anda memilih untuk menggunakan filter internal, fungsikan keduanya untuk sumber dan pengawakodean untuk mendapatkan pengalaman pemutaran yang lebih baik."
+
+msgctxt "IDS_AG_TOGGLE_NAVIGATION"
+msgid "Toggle Navigation Bar"
+msgstr "Jungkit Bilah Navigasi"
+
+msgctxt "IDS_AG_VSYNCACCURATE"
+msgid "Accurate VSync"
+msgstr "VSync Akurat"
+
+msgctxt "IDC_CHECK_RELATIVETO"
+msgid "If the rendering target is left undefined, it will be inherited from the default style."
+msgstr "Jika target render tidak ditetapkan, hal tersebut akan diturunkan dari gaya bawaan."
+
+msgctxt "IDC_CHECK_NO_SUB_ANIM"
+msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
+msgstr "Nonfungsikan animasi subtitel. Mengaktifkan opsi ini kan memperkecil penggunaan CPU. Anda bisa menggunakan ini jika Anda mengalami subtitel yang berkejap."
+
+msgctxt "IDC_SUBPIC_TO_BUFFER"
+msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
+msgstr "Menambah jumlah bufer sub gambar seharusnya secara umum menambah kinerja render yang juga berakibat pada meningkatnya penggunaan RAM video pada GPU."
+
+msgctxt "IDC_BUTTON_EXT_SET"
+msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
+msgstr "Setelah mengklik tombol ini, keadaan tercentang dari grup format akan merefleksikan asosiasi berkas yang sesungguhnya untuk MPC-HC. Ekstensi yang baru ditambahkan biasanya nonaktif, jadi jangan lupa untuk memeriksanya lagi sebelum menutup dialog ini!"
+
+msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
+msgstr "Menonaktifkan opsi ini akan mencegah subtitel berkedip tetapi mungkin dapat menyebabkan perender video melompati beberapa frame video."
+
+msgctxt "ID_PLAY_PLAY"
+msgid "Play\nPlay"
+msgstr "Putar\nPutar"
+
+msgctxt "ID_PLAY_PAUSE"
+msgid "Pause\nPause"
+msgstr "Jeda\nJeda"
+
+msgctxt "ID_PLAY_STOP"
+msgid "Stop\nStop"
+msgstr "Hentikan\nHentikan"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Step\nStep"
+msgstr "Tahap\nTahap"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "Decrease speed\nDecrease speed"
+msgstr "Kurangi kecepatan\nKurangi kecepatan"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "Increase speed\nIncrease speed"
+msgstr "Tambah kecepatan\nTambah kecepatan"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "Mute"
+msgstr "Diam"
+
+msgctxt "ID_VOLUME_MUTE_OFF"
+msgid "Unmute"
+msgstr "Bunyi"
+
+msgctxt "ID_VOLUME_MUTE_DISABLED"
+msgid "No audio"
+msgstr "Tidak ada audio"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "Skip back\nSkip back"
+msgstr "Lewati mundur\nLewati mundur"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "Skip forward\nSkip forward"
+msgstr "Lewati maju\nLewati maju"
+
+msgctxt "IDS_SUBRESYNC_ORIGINAL"
+msgid "&Original"
+msgstr "&Orisinal"
+
+msgctxt "IDS_SUBRESYNC_CURRENT"
+msgid "&Current"
+msgstr "&Saat ini"
+
+msgctxt "IDS_SUBRESYNC_EDIT"
+msgid "&Edit"
+msgstr "&Sunting"
+
+msgctxt "IDS_SUBRESYNC_YES"
+msgid "&Yes"
+msgstr "&Ya"
+
+msgctxt "IDS_SUBRESYNC_NO"
+msgid "&No"
+msgstr "&Tidak"
+
+msgctxt "IDS_SUBRESYNC_DECREASE"
+msgid "&Decrease"
+msgstr "&Turunkan"
+
+msgctxt "IDS_SUBRESYNC_INCREASE"
+msgid "&Increase"
+msgstr "Na&ikkan"
+
+msgctxt "IDS_OPTIONS_CAPTION"
+msgid "Options"
+msgstr "Pilihan"
+
+msgctxt "IDS_SHADERS_SELECT"
+msgid "&Select Shaders..."
+msgstr "Pilih &Shader..."
+
+msgctxt "IDS_SHADERS_DEBUG"
+msgid "&Debug Shaders..."
+msgstr "Awakutu Sha&der..."
+
+msgctxt "IDS_FAVORITES_ADD"
+msgid "&Add to Favorites..."
+msgstr "&Tambah ke Favorit..."
+
+msgctxt "IDS_FAVORITES_ORGANIZE"
+msgid "&Organize Favorites..."
+msgstr "&Kelola Favorit..."
+
+msgctxt "IDS_PLAYLIST_SHUFFLE"
+msgid "Sh&uffle"
+msgstr "Karau"
+
+msgctxt "IDS_PLAYLIST_SHOWFOLDER"
+msgid "Ope&n file location"
+msgstr "Buka lokasi berkas"
+
+msgctxt "IDS_CONTROLS_CLOSING"
+msgid "Closing..."
+msgstr "Menutup..."
+
+msgctxt "IDS_CONTROLS_PLAYING"
+msgid "Playing"
+msgstr "Memutar"
+
+msgctxt "IDS_CONTROLS_PAUSED"
+msgid "Paused"
+msgstr "Dijeda"
+
+msgctxt "IDS_AG_EDL_NEW_CLIP"
+msgid "EDL new clip"
+msgstr "Klip baru EDL"
+
+msgctxt "IDS_RECENT_FILES_CLEAR"
+msgid "&Clear list"
+msgstr "&Bersihkan daftar"
+
+msgctxt "IDS_RECENT_FILES_QUESTION"
+msgid "Are you sure that you want to delete recent files list?"
+msgstr "Apakah Anda yakin ingin menghapus daftar berkas baru-baru ini?"
+
+msgctxt "IDS_AG_EDL_SAVE"
+msgid "EDL save"
+msgstr "Simpan EDL"
+
+msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time Correction"
+msgstr "Fungsikan Koreksi Waktu Frame"
+
+msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
+msgid "Toggle EDL window"
+msgstr "Jungkit jendela EDL"
+
+msgctxt "IDS_AG_EDL_IN"
+msgid "EDL set In"
+msgstr "Masukan set EDL"
+
+msgctxt "IDS_AG_EDL_OUT"
+msgid "EDL set Out"
+msgstr "Keluaran set EDL"
+
+msgctxt "IDS_AG_PNS_ROTATEX_M"
+msgid "PnS Rotate X-"
+msgstr "PnS Putar X-"
+
+msgctxt "IDS_AG_PNS_ROTATEY_P"
+msgid "PnS Rotate Y+"
+msgstr "PnS Putar Y+"
+
+msgctxt "IDS_AG_PNS_ROTATEY_M"
+msgid "PnS Rotate Y-"
+msgstr "PnS Putar Y-"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_P"
+msgid "PnS Rotate Z+"
+msgstr "PnS Putar Z+"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_M"
+msgid "PnS Rotate Z-"
+msgstr "PnS Putar Z-"
+
+msgctxt "IDS_AG_TEARING_TEST"
+msgid "Tearing Test"
+msgstr "Uji Tearing"
+
+msgctxt "IDS_SCALE_16_9"
+msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Skala ke 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_WIDESCREEN"
+msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zum ke Layar Lebar,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_ULTRAWIDE"
+msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zum ke Layar Ultra Lebar,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_PLAYLIST_HIDEFS"
+msgid "&Hide on Fullscreen"
+msgstr "Sembunyikan pada Layar Penuh"
+
+msgctxt "IDS_CONTROLS_STOPPED"
+msgid "Stopped"
+msgstr "Terhenti"
+
+msgctxt "IDS_CONTROLS_BUFFERING"
+msgid "Buffering... (%d%%)"
+msgstr "Membufer... (%d%%)"
+
+msgctxt "IDS_CONTROLS_CAPTURING"
+msgid "Capturing..."
+msgstr "Menangkap..."
+
+msgctxt "IDS_CONTROLS_OPENING"
+msgid "Opening..."
+msgstr "Membuka..."
+
+msgctxt "IDS_CONTROLS_CLOSED"
+msgid "Closed"
+msgstr "Tertutup"
+
+msgctxt "IDS_SUBTITLES_OPTIONS"
+msgid "&Options..."
+msgstr "&Opsi..."
+
+msgctxt "IDS_SUBTITLES_STYLES"
+msgid "&Styles..."
+msgstr "&Gaya..."
+
+msgctxt "IDS_SUBTITLES_RELOAD"
+msgid "&Reload"
+msgstr "&Muat Ulang"
+
+msgctxt "IDS_SUBTITLES_ENABLE"
+msgid "&Enable"
+msgstr "&Fungsikan"
+
+msgctxt "IDS_PANSCAN_EDIT"
+msgid "&Edit..."
+msgstr "&Sunting..."
+
+msgctxt "IDS_INFOBAR_TITLE"
+msgid "Title"
+msgstr "Judul"
+
+msgctxt "IDS_INFOBAR_AUTHOR"
+msgid "Author"
+msgstr "Pembuat"
+
+msgctxt "IDS_INFOBAR_COPYRIGHT"
+msgid "Copyright"
+msgstr "Hak Cipta"
+
+msgctxt "IDS_INFOBAR_RATING"
+msgid "Rating"
+msgstr "Penilaian"
+
+msgctxt "IDS_INFOBAR_DESCRIPTION"
+msgid "Description"
+msgstr "Deskripsi"
+
+msgctxt "IDS_INFOBAR_DOMAIN"
+msgid "Domain"
+msgstr "Domain"
+
+msgctxt "IDS_AG_CLOSE"
+msgid "Close"
+msgstr "Tutup"
+
+msgctxt "IDS_AG_NONE"
+msgid "None"
+msgstr "Nihil"
+
+msgctxt "IDS_AG_COMMAND"
+msgid "Command"
+msgstr "Perintah"
+
+msgctxt "IDS_AG_KEY"
+msgid "Key"
+msgstr "Kunci"
+
+msgctxt "IDS_AG_MOUSE"
+msgid "Mouse Windowed"
+msgstr ""
+
+msgctxt "IDS_AG_MOUSE_FS"
+msgid "Mouse Fullscreen"
+msgstr "Tetikus Layar Penuh"
+
+msgctxt "IDS_AG_APP_COMMAND"
+msgid "App Command"
+msgstr "Perintah Apl"
+
+msgctxt "IDS_AG_MEDIAFILES"
+msgid "Media files (all types)"
+msgstr "Berkas media (semua jenis)"
+
+msgctxt "IDS_AG_ALLFILES"
+msgid "All files (*.*)|*.*|"
+msgstr "Semua berkas (*.*)|*.*|"
+
+msgctxt "IDS_AG_AUDIOFILES"
+msgid "Audio files (all types)"
+msgstr "Berkas audio (semua jenis)"
+
+msgctxt "IDS_AG_NOT_KNOWN"
+msgid "Not known"
+msgstr "Tidak dikenal"
+
+msgctxt "IDS_MPLAYERC_0"
+msgid "Quick Open File"
+msgstr "Buka Berkas Cepat"
+
+msgctxt "IDS_AG_OPEN_FILE"
+msgid "Open File"
+msgstr "Buka Berkas"
+
+msgctxt "IDS_AG_OPEN_DVD"
+msgid "Open DVD/BD"
+msgstr "Buka DVD/BD"
+
+msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
+msgid "Failed to set post-resize shaders"
+msgstr "Gagal menetapkan shader paska ubah ukuran"
+
+msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
+msgid "Failed to set both pre-resize and post-resize shaders"
+msgstr "Gagal menetapkan shader baik pra dan paska ubah ukuran"
+
+msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
+msgid "Shaders are recompiled automatically when the corresponding files are modified."
+msgstr "Shader akan dikompilasikan ulang secara otomatis ketika berkas terkait dimodifikasi."
+
+msgctxt "IDS_SHADER_DLL_ERR_0"
+msgid "Cannot load %s, pixel shaders will not work."
+msgstr "Tidak bisa memuat %s, shader piksel tidak akan bekerja."
+
+msgctxt "IDS_SHADER_DLL_ERR_1"
+msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
+msgstr "Tidak bisa menemukan titik masuk fungsi yang diperlukan dalam %s, shader piksel tidak akan bekerja."
+
+msgctxt "IDS_OSD_SHADERS_PRESET"
+msgid "Shader preset: %s"
+msgstr "Prasetel shader: %s"
+
+msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
+msgid "Next Shader Preset"
+msgstr "Prasetel Shader Selanjutnya"
+
+msgctxt "IDS_AG_SHADERS_PRESET_PREV"
+msgid "Prev Shader Preset"
+msgstr "Prasetel Shader Sebelumnya"
+
+msgctxt "IDS_STRING_COLON"
+msgid "%s:"
+msgstr "%s:"
+
+msgctxt "IDS_RECORD_START"
+msgid "Record"
+msgstr "Rekam"
+
+msgctxt "IDS_RECORD_STOP"
+msgid "Stop"
+msgstr "Hentikan"
+
+msgctxt "IDS_BALANCE"
+msgid "L = R"
+msgstr "L = R"
+
+msgctxt "IDS_BALANCE_L"
+msgid "L +%d%%"
+msgstr "L +%d%%"
+
+msgctxt "IDS_BALANCE_R"
+msgid "R +%d%%"
+msgstr "R +%d%%"
+
+msgctxt "IDS_VOLUME"
+msgid "%d%%"
+msgstr "%d%%"
+
+msgctxt "IDS_BOOST"
+msgid "+%d%%"
+msgstr "+%d%%"
+
+msgctxt "IDS_PLAYLIST_ADDFOLDER"
+msgid "Add containing &folder"
+msgstr "Tambah folder bermuatan"
+
+msgctxt "IDS_HW_INDICATOR"
+msgid "[H/W]"
+msgstr "[H/W]"
+
+msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
+msgid "Software Decoding"
+msgstr "Pengawakodean Perangkat Lunak"
+
+msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
+msgid "Playback rate"
+msgstr "Laju pemutaran"
+
+msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
+msgid "&Copy filters list to clipboard"
+msgstr "&Salin daftar filter ke papan klip"
+
+msgctxt "IDS_CREDENTIALS_SERVER"
+msgid "Enter server credentials"
+msgstr "Masukkan kredensial server"
+
+msgctxt "IDS_CREDENTIALS_CONNECT"
+msgid "Enter your credentials to connect"
+msgstr "Masukkan kredensial Anda untuk menyambung"
+
+msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
+msgid "Save custom style"
+msgstr "Simpan gaya ubahsuai"
+
+msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
+msgid "Education/Science/Factual topics"
+msgstr "Topik Edukasi/Sains/Fakta"
+
+msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
+msgid "Hides controls and panels also in windowed mode."
+msgstr "Sembunyikan pengendali dan juga panel dalam mode windowed."
+
+msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
+msgid "Prevent external subtitle renderer to be loaded when internal is in use."
+msgstr "Cegah perender subtitel eksternal dimuat ketika perender internal sedang digunakan."
+
+msgctxt "IDS_PPAGEADVANCED_COL_NAME"
+msgid "Name"
+msgstr "Nama"
+
+msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
+msgid "Value"
+msgstr "Nilai"
+
+msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
+msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
+msgstr "Jumlah maksimum berkas ditampilkan di menu \"Berkas baru-baru ini\" dan untuk yang posisinya secara potensial tersimpan."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
+msgid "Remember file position only for files longer than N minutes."
+msgstr "Ingat posisi berkas hanya untuk berkas yang lebih panjang dari N menit."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
+msgid "Remember file position also for audio files."
+msgstr "Ingat posisi berkas juga untuk berkas audio."
+
+msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
+msgid "Do Nothing"
+msgstr "Tidak Melakukan Apa-apa"
+
+msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
+msgid "Play next file in the folder"
+msgstr "Putar berkas selanjutnya di dalam folder"
+
+msgctxt "IDS_AFTER_PLAYBACK_REWIND"
+msgid "Rewind current file"
+msgstr "Mundurkan berkas saat ini"
+
+msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
+msgid "Close"
+msgstr "Tutup"
+
+msgctxt "IDS_AFTER_PLAYBACK_EXIT"
+msgid "Exit"
+msgstr "Keluar"
+
+msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
+msgid "Turn off the monitor"
+msgstr "Matikan monitor"
+
+msgctxt "IDS_IMAGE_JPEG_QUALITY"
+msgid "JPEG Image"
+msgstr "Gambar JPEG"
+
+msgctxt "IDS_IMAGE_QUALITY"
+msgid "Quality (%):"
+msgstr "Kualitas (%):"
+
+msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
+msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
+msgstr "Ukuran Maksimum (NxNpx) sampul album yang dimuat dalam mode audio saja."
+
+msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
+msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
+msgstr "Tundaan subtitel akan diturunkan/dinaikkan berdasarkan nilai ini setiap kali kombinasi tombol pintasan cepat digunakan (%s/%s)."
+
+msgctxt "IDS_HOTKEY_NOT_DEFINED"
+msgid "<not defined>"
+msgstr "<not defined>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Tonton"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Pindah ke Atas"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Pindah ke Bawah"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Urutkan menurut LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Hapus semua"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Apakah Anda yakin akan menghapus semua saluran dari daftar?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Informasi tidak tersedia"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Mohon tunggu, analisa sedang diproses..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Fungsikan pencatatan log ke berkas (wajib memulai ulang)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Waktu tersisa"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Presisi tinggi"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Setelah Pemutaran: Mundurkan berkas saat ini"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Setelah Pemutaran: Tutup"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC menemukan masalah saat inisialisasi. Dengan bantuan Anda kami mungkin bisa memperbaiki masalah ini.\n\nApakah Anda ingin melaporkannya?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Masukkan nilai positif jika audio terlalu cepat, negatif jika terlambat."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Pratinjau dinonfungsikan. Anda bisa memfungsikannya di opsi MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Opsi ini bisa digunakan untuk pratinjau berkas media dari lokasi yang jauh. Hanya gunakan pada jaringan privat yang benar-benar aman.\n\nApakah Anda benar-benar ingin memfungsikan opsi ini?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Perender Subtitel Internal"
+
+msgctxt "IDS_AG_OPEN_DEVICE"
+msgid "Open Device"
+msgstr "Buka Perangkat"
+
+msgctxt "IDS_AG_SAVE_AS"
+msgid "Save As"
+msgstr "Simpan Sebagai"
+
+msgctxt "IDS_AG_SAVE_IMAGE"
+msgid "Save Image"
+msgstr "Simpan Gambar"
+
+msgctxt "IDS_MPLAYERC_6"
+msgid "Save Image (auto)"
+msgstr "Simpan Gambar (auto)"
+
+msgctxt "IDS_OSD_IMAGE_SAVED"
+msgid "Image saved successfully"
+msgstr "Gambar berhasil disimpan"
+
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Muat Subtitel..."
+
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Simpan Subtitel..."
+
+msgctxt "IDS_AG_PROPERTIES"
+msgid "Properties"
+msgstr "Properti"
+
+msgctxt "IDS_AG_EXIT"
+msgid "Exit"
+msgstr "Keluar"
+
+msgctxt "IDS_AG_PLAYPAUSE"
+msgid "Play/Pause"
+msgstr "Putar/Jeda"
+
+msgctxt "IDS_AG_PLAY"
+msgid "Play"
+msgstr "Putar"
+
+msgctxt "IDS_AG_STOP"
+msgid "Stop"
+msgstr "Hentikan"
+
+msgctxt "IDS_AG_FRAMESTEP"
+msgid "Frame-step"
+msgstr "Tahap-frame"
+
+msgctxt "IDS_MPLAYERC_16"
+msgid "Frame-step back"
+msgstr "Tahap-frame mundur"
+
+msgctxt "IDS_AG_GO_TO"
+msgid "Go To"
+msgstr "Pergi Ke"
+
+msgctxt "IDS_AG_INCREASE_RATE"
+msgid "Increase Rate"
+msgstr "Naikkan Laju"
+
+msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
+msgid "Show/Game show"
+msgstr "Acara/Acara permainan"
+
+msgctxt "IDS_CONTENT_SPORTS"
+msgid "Sports"
+msgstr "Olahraga"
+
+msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
+msgid "Children's/Youth programmes"
+msgstr "Program Anak/Remaja"
+
+msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
+msgid "Music/Ballet/Dance"
+msgstr "Musik/Balet/Tarian"
+
+msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
+msgid "Arts/Culture"
+msgstr "Seni/Budaya"
+
+msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
+msgid "Social/Political issues/Economics"
+msgstr "Sosial/Politik/Ekonomi"
+
+msgctxt "IDS_CONTENT_LEISURE"
+msgid "Leisure hobbies"
+msgstr "Hobi"
+
+msgctxt "IDS_FILE_RECYCLE"
+msgid "Move to Recycle Bin"
+msgstr "Pindahkan ke Keranjang Sampah"
+
+msgctxt "IDS_AG_SAVE_COPY"
+msgid "Save a Copy"
+msgstr "Simpan Salinan"
+
+msgctxt "IDS_FASTSEEK_LATEST"
+msgid "Latest keyframe"
+msgstr "Keyframe terakhir"
+
+msgctxt "IDS_FASTSEEK_NEAREST"
+msgid "Nearest keyframe"
+msgstr "Keyframe terdekat"
+
+msgctxt "IDS_HOOKS_FAILED"
+msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
+msgstr "MPC-HC menemukan masalah saat inisialisasi. Pemutaran DVD tidak akan bekerja dengan benar. Ini mungkin disebabkan oleh beberapa inkompatibilitas dengan perkakas keamanan tertentu.\n\nApakah Anda ingin melaporkan masalah ini?"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
+msgid "Never show"
+msgstr "Jangan pernah tampilkan"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
+msgid "Show when moving the cursor, hide after:"
+msgstr "Tampilkan saat mengerakkan kursor, sembuyikan setelah:"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
+msgid "Show when hovering control, hide after:"
+msgstr "Tampilkan saat ambang di atas pengendali, sembunyikan setelah:"
+
+msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
+msgid "Failed to set pre-resize shaders"
+msgstr "Gagal menetapkan shader pra ubah ukuran"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
+msgid "Frame Time Correction: On"
+msgstr "Koreksi Waktu Frame: Nyala"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
+msgid "Frame Time Correction: Off"
+msgstr "Koreksi Waktu Frame: Mati"
+
+msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
+msgid "Target VSync Offset: %.1f"
+msgstr "Ofset Target VSync: %.1f"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
+msgid "VSync Offset: %d"
+msgstr "Ofset VSync: %d"
+
+msgctxt "IDS_OSD_SPEED"
+msgid "Speed: %.2lfx"
+msgstr "Kecepatan: %.2lfx"
+
+msgctxt "IDS_OSD_THUMBS_SAVED"
+msgid "Thumbnails saved successfully"
+msgstr "Gambar mini berhasil disimpan"
+
+msgctxt "IDS_MENU_VIDEO_STREAM"
+msgid "Vide&o Track"
+msgstr "Trek &Video"
+
+msgctxt "IDS_MENU_VIDEO_ANGLE"
+msgid "Video Ang&le"
+msgstr "Su&dut Video"
+
+msgctxt "IDS_RESET_SETTINGS"
+msgid "Reset settings"
+msgstr "Setel ulang pengaturan"
+
+msgctxt "IDS_RESET_SETTINGS_WARNING"
+msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
+msgstr "Apakah Anda yakin ingin memulihkan pengaturan MPC-HC ke nilai bawaan?\nMohon perhatian bahwa SEMUA pengaturan Anda saat ini akan hilang!"
+
+msgctxt "IDS_RESET_SETTINGS_MUTEX"
+msgid "Please close all instances of MPC-HC so that the default settings can be restored."
+msgstr "Mohon tutup semua unit MPC-HC sehingga pengaturan bawaan dapat dipulihkan."
+
+msgctxt "IDS_EXPORT_SETTINGS"
+msgid "Export settings"
+msgstr "Ekspor pengaturan"
+
+msgctxt "IDS_EXPORT_SETTINGS_WARNING"
+msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
+msgstr "Beberapa perubahan belum tersimpan.\nApakah Anda ingin meyimpannya sebelum mengekspornya?"
+
+msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
+msgid "The settings have been successfully exported."
+msgstr "Pengaturan telah berhasil diekspor."
+
+msgctxt "IDS_EXPORT_SETTINGS_FAILED"
+msgid "The export failed! This can happen when you don't have the correct rights."
+msgstr "Ekspor gagal! Hal ini bisa terjadi jika Anda tidak memiliki hak yang dibutuhkan."
+
+msgctxt "IDS_BDA_ERROR"
+msgid "BDA Error"
+msgstr "Galat BDA"
+
+msgctxt "IDS_AG_DECREASE_RATE"
+msgid "Decrease Rate"
+msgstr "Turunkan Laju"
+
+msgctxt "IDS_AG_RESET_RATE"
+msgid "Reset Rate"
+msgstr "Setel Ulang Laju"
+
+msgctxt "IDS_MPLAYERC_21"
+msgid "Audio Delay +10 ms"
+msgstr "Tundaan Audio +10ms"
+
+msgctxt "IDS_MPLAYERC_22"
+msgid "Audio Delay -10 ms"
+msgstr "Tundaan Audio -10ms"
+
+msgctxt "IDS_MPLAYERC_23"
+msgid "Jump Forward (small)"
+msgstr "Lompat Maju (kecil)"
+
+msgctxt "IDS_MPLAYERC_24"
+msgid "Jump Backward (small)"
+msgstr "Lompat Mundur (kecil)"
+
+msgctxt "IDS_MPLAYERC_25"
+msgid "Jump Forward (medium)"
+msgstr "Lompat Maju (medium)"
+
+msgctxt "IDS_MPLAYERC_26"
+msgid "Jump Backward (medium)"
+msgstr "Lompat Mundur (medium)"
+
+msgctxt "IDS_MPLAYERC_27"
+msgid "Jump Forward (large)"
+msgstr "Lompat Maju (besar)"
+
+msgctxt "IDS_MPLAYERC_28"
+msgid "Jump Backward (large)"
+msgstr "Lompat Mundur (besar)"
+
+msgctxt "IDS_MPLAYERC_29"
+msgid "Jump Forward (keyframe)"
+msgstr "Lompat Maju (keyframe)"
+
+msgctxt "IDS_MPLAYERC_30"
+msgid "Jump Backward (keyframe)"
+msgstr "Lompat Mundur (keyframe)"
+
+msgctxt "IDS_AG_NEXT"
+msgid "Next"
+msgstr "Selanjutnya"
+
+msgctxt "IDS_AG_PREVIOUS"
+msgid "Previous"
+msgstr "Sebelumnya"
+
+msgctxt "IDS_AG_NEXT_FILE"
+msgid "Next File"
+msgstr "Berkas Selanjutnya"
+
+msgctxt "IDS_AG_PREVIOUS_FILE"
+msgid "Previous File"
+msgstr "Berkas Sebelumnya"
+
+msgctxt "IDS_MPLAYERC_99"
+msgid "Toggle Direct3D fullscreen"
+msgstr "Jungkit layar penuh Direct3D"
+
+msgctxt "IDS_MPLAYERC_100"
+msgid "Goto Prev Subtitle"
+msgstr "Ke Subtitel Sebelumnya"
+
+msgctxt "IDS_MPLAYERC_101"
+msgid "Goto Next Subtitle"
+msgstr "Ke Subtitel Selanjutnya"
+
+msgctxt "IDS_MPLAYERC_102"
+msgid "Shift Subtitle Left"
+msgstr "Geser Subtitel ke Kiri"
+
+msgctxt "IDS_MPLAYERC_103"
+msgid "Shift Subtitle Right"
+msgstr "Geser Subtitel ke Kanan"
+
+msgctxt "IDS_AG_SEEKSET"
+msgid "Jump to Beginning"
+msgstr "Lompat ke Awal"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Tampilkan Nama Berkas"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Putar DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Putar BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Tampilkan Statistik Perender"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Setel Ulang Statistik Perender"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Subtitel::Lainnya"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Sembunyikan &batas"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Hanya Fra&me"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Tam&pilkan Takarir & &Menu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Sembunyikan &Menu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Tingkat Lanjut"
+
+msgctxt "IDS_AG_VIEW_MINIMAL"
+msgid "View Minimal"
+msgstr "Tilikan Minimal"
+
+msgctxt "IDS_AG_VIEW_COMPACT"
+msgid "View Compact"
+msgstr "Tilikan Ringkas"
+
+msgctxt "IDS_AG_VIEW_NORMAL"
+msgid "View Normal"
+msgstr "Tilikan Normal"
+
+msgctxt "IDS_AG_FULLSCREEN"
+msgid "Fullscreen"
+msgstr "Layar Penuh"
+
+msgctxt "IDS_MPLAYERC_39"
+msgid "Fullscreen (w/o res.change)"
+msgstr "Layar Penuh (tanpa ubah resolusi)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT"
+msgid "Zoom Auto Fit"
+msgstr "Zum Oto Suai"
+
+msgctxt "IDS_AG_VIDFRM_HALF"
+msgid "VidFrm Half"
+msgstr "VidFrm Setengah"
+
+msgctxt "IDS_AG_VIDFRM_NORMAL"
+msgid "VidFrm Normal"
+msgstr "VidFrm Normal"
+
+msgctxt "IDS_AG_VIDFRM_DOUBLE"
+msgid "VidFrm Double"
+msgstr "VidFrm Ganda"
+
+msgctxt "IDS_AG_ALWAYS_ON_TOP"
+msgid "Always On Top"
+msgstr "Selalu di Puncak"
+
+msgctxt "IDS_AG_PNS_INC_SIZE"
+msgid "PnS Inc Size"
+msgstr "PnS Tmbh Ukuran"
+
+msgctxt "IDS_AG_PNS_INC_WIDTH"
+msgid "PnS Inc Width"
+msgstr "PnS Tmbh Lebar"
+
+msgctxt "IDS_MPLAYERC_47"
+msgid "PnS Inc Height"
+msgstr "PnS Tmbh Tinggi"
+
+msgctxt "IDS_AG_PNS_DEC_SIZE"
+msgid "PnS Dec Size"
+msgstr "PnS Krngi Ukuran"
+
+msgctxt "IDS_AG_PNS_DEC_WIDTH"
+msgid "PnS Dec Width"
+msgstr "PnS Krngi Lebar"
+
+msgctxt "IDS_MPLAYERC_50"
+msgid "PnS Dec Height"
+msgstr "PnS Krngi Tinggi"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
+msgid "Downloading [%s] \"%s\""
+msgstr "Mengunduh [%s] \"%s\""
+
+msgctxt "IDS_SUBDL_DLG_PARSING"
+msgid "Parsing list..."
+msgstr "Mengurai daftar..."
+
+msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
+msgid "No subtitles found."
+msgstr "Tidak ada subtitel yang ditemukan."
+
+msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
+msgid "%d subtitle(s) available."
+msgstr "%d subtitel tersedia."
+
+msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
+msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
+msgstr "Apakah Anda ingin memeriksa secara berkala pemutakhiran MPC-HC?\n\nFitur ini dapat dinonfungsikan nanti dari halaman opsi Bermacam-lainnya."
+
+msgctxt "IDS_ZOOM_50"
+msgid "50%"
+msgstr "50%"
+
+msgctxt "IDS_ZOOM_100"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDS_ZOOM_200"
+msgid "200%"
+msgstr "200%"
+
+msgctxt "IDS_ZOOM_AUTOFIT"
+msgid "Auto Fit"
+msgstr "Oto Suai"
+
+msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (Larger Only)"
+msgstr "Oto Suai (Lebih Besar Saja)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
+msgid "Zoom Auto Fit (Larger Only)"
+msgstr "Zum Oto Suai (Lebih Besar Saja)"
+
+msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
+msgid "Zoom: Auto (Larger Only)"
+msgstr "Zum: Auto (Lebih Besar Saja)"
+
+msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
+msgid "Double click to open file location"
+msgstr "Klik ganda untuk membuka lokasi berkas"
+
+msgctxt "IDS_TOOLTIP_REMAINING_TIME"
+msgid "Toggle between elapsed and remaining time"
+msgstr "Jungkit antara waktu berjalan dan tersisa"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
+msgid "Invalid delay"
+msgstr "Tundaan tidak valid"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
+msgid "Please enter a number between 1 and 365."
+msgstr "Mohon masukkan angka antara 1 dan 365."
+
+msgctxt "IDS_AG_PNS_CENTER"
+msgid "PnS Center"
+msgstr "PnS Tengah"
+
+msgctxt "IDS_AG_PNS_LEFT"
+msgid "PnS Left"
+msgstr "PnS Kiri"
+
+msgctxt "IDS_AG_PNS_RIGHT"
+msgid "PnS Right"
+msgstr "PnS Kanan"
+
+msgctxt "IDS_AG_PNS_UP"
+msgid "PnS Up"
+msgstr "PnS Naik"
+
+msgctxt "IDS_AG_PNS_DOWN"
+msgid "PnS Down"
+msgstr "PnS Turun"
+
+msgctxt "IDS_AG_PNS_UPLEFT"
+msgid "PnS Up/Left"
+msgstr "PnS Naik/Kiri"
+
+msgctxt "IDS_AG_PNS_UPRIGHT"
+msgid "PnS Up/Right"
+msgstr "PnS Naik/Kanan"
+
+msgctxt "IDS_AG_PNS_DOWNLEFT"
+msgid "PnS Down/Left"
+msgstr "PnS Turun/Kiri"
+
+msgctxt "IDS_MPLAYERC_59"
+msgid "PnS Down/Right"
+msgstr "PnS Turun/Kanan"
+
+msgctxt "IDS_AG_VOLUME_UP"
+msgid "Volume Up"
+msgstr "Volume Naik"
+
+msgctxt "IDS_AG_VOLUME_DOWN"
+msgid "Volume Down"
+msgstr "Volume Turun"
+
+msgctxt "IDS_AG_VOLUME_MUTE"
+msgid "Volume Mute"
+msgstr "Volume Bisu"
+
+msgctxt "IDS_MPLAYERC_63"
+msgid "DVD Title Menu"
+msgstr "Menu Judul DVD"
+
+msgctxt "IDS_AG_DVD_ROOT_MENU"
+msgid "DVD Root Menu"
+msgstr "Menu Akar DVD"
+
+msgctxt "IDS_MPLAYERC_65"
+msgid "DVD Subtitle Menu"
+msgstr "Menu Subtitel DVD"
+
+msgctxt "IDS_MPLAYERC_66"
+msgid "DVD Audio Menu"
+msgstr "Menu Audio DVD"
+
+msgctxt "IDS_MPLAYERC_67"
+msgid "DVD Angle Menu"
+msgstr "Menu Sudut DVD"
+
+msgctxt "IDS_MPLAYERC_68"
+msgid "DVD Chapter Menu"
+msgstr "Menu Bab DVD"
+
+msgctxt "IDS_AG_DVD_MENU_LEFT"
+msgid "DVD Menu Left"
+msgstr "Menu DVD Kiri"
+
+msgctxt "IDS_MPLAYERC_70"
+msgid "DVD Menu Right"
+msgstr "Menu DVD Kanan"
+
+msgctxt "IDS_AG_DVD_MENU_UP"
+msgid "DVD Menu Up"
+msgstr "Menu DVD Naik"
+
+msgctxt "IDS_AG_DVD_MENU_DOWN"
+msgid "DVD Menu Down"
+msgstr "Menu DVD Turun"
+
+msgctxt "IDS_MPLAYERC_73"
+msgid "DVD Menu Activate"
+msgstr "Menu DVD Aktifkan"
+
+msgctxt "IDS_AG_DVD_MENU_BACK"
+msgid "DVD Menu Back"
+msgstr "Menu DVD Kembali"
+
+msgctxt "IDS_MPLAYERC_75"
+msgid "DVD Menu Leave"
+msgstr "Menu DVD Pergi"
+
+msgctxt "IDS_AG_BOSS_KEY"
+msgid "Boss key"
+msgstr "Tombol Bos"
+
+msgctxt "IDS_MPLAYERC_77"
+msgid "Player Menu"
+msgstr "Menu Pemutar"
+
+msgctxt "IDS_MPLAYERC_78"
+msgid "Player Menu (full)"
+msgstr "Menu Pemutar (penuh)"
+
+msgctxt "IDS_AG_FILTERS_MENU"
+msgid "Filters Menu"
+msgstr "Menu Filter"
+
+msgctxt "IDS_AG_OPTIONS"
+msgid "Options"
+msgstr "Opsi"
+
+msgctxt "IDS_AG_NEXT_AUDIO"
+msgid "Next Audio Track"
+msgstr "Trek Audio Selanjutnya"
+
+msgctxt "IDS_AG_PREV_AUDIO"
+msgid "Prev Audio Track"
+msgstr "Trek Audio Sebelumnya"
+
+msgctxt "IDS_AG_NEXT_SUBTITLE"
+msgid "Next Subtitle Track"
+msgstr "Trek Subtitel Selanjutnya"
+
+msgctxt "IDS_AG_PREV_SUBTITLE"
+msgid "Prev Subtitle Track"
+msgstr "Trek Subtitel Sebelumnya"
+
+msgctxt "IDS_MPLAYERC_85"
+msgid "On/Off Subtitle"
+msgstr "Subtitel Nyala/Mati"
+
+msgctxt "IDS_MPLAYERC_86"
+msgid "Reload Subtitles"
+msgstr "Muat Ulang Subtitel"
+
+msgctxt "IDS_MPLAYERC_91"
+msgid "Next Angle (DVD)"
+msgstr "Sudut Selanjutnya (DVD)"
+
+msgctxt "IDS_MPLAYERC_92"
+msgid "Prev Angle (DVD)"
+msgstr "Sudut Sebelumnya (DVD)"
+
+msgctxt "IDS_MPLAYERC_93"
+msgid "Next Audio Track (DVD)"
+msgstr "Trek Audio Selanjutnya (DVD)"
+
+msgctxt "IDS_MPLAYERC_94"
+msgid "Prev Audio Track (DVD)"
+msgstr "Trek Audio Sebelumnya (DVD)"
+
+msgctxt "IDS_MPLAYERC_95"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Trek Subtitel Selanjutnya (DVD)"
+
+msgctxt "IDS_MPLAYERC_96"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Trek Subtitel Sebelumnya (DVD)"
+
+msgctxt "IDS_MPLAYERC_97"
+msgid "On/Off Subtitle (DVD)"
+msgstr "Subtitel Nyala/Mati (DVD)"
+
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Tampilkan Waktu Saat Ini"
+
+msgctxt "IDS_PPAGEWEBSERVER_0"
+msgid "Select the directory"
+msgstr "Pilih direktori"
+
+msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
+msgid "Quick add favorite"
+msgstr "Tambah cepat favorit"
+
+msgctxt "IDS_DVB_CHANNEL_NUMBER"
+msgid "N"
+msgstr "N"
+
+msgctxt "IDS_DVB_CHANNEL_NAME"
+msgid "Name"
+msgstr "Nama"
+
+msgctxt "IDS_DVB_CHANNEL_FREQUENCY"
+msgid "Frequency"
+msgstr "Frekuensi"
+
+msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
+msgid "Encrypted"
+msgstr "Terenkripsi"
+
+msgctxt "IDS_YES"
+msgid "Yes"
+msgstr "Ya"
+
+msgctxt "IDS_NO"
+msgid "No"
+msgstr "Tidak"
+
+msgctxt "IDS_DVB_CHANNEL_START_SCAN"
+msgid "Start"
+msgstr "Awal"
+
+msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
+msgid "Stop"
+msgstr "Hentikan"
+
+msgctxt "IDS_DVB_TVNAV_SEERADIO"
+msgid "Radio stations"
+msgstr "Stasiun radio"
+
+msgctxt "IDS_DVB_TVNAV_SEETV"
+msgid "TV stations"
+msgstr "Stasiun TV"
+
+msgctxt "IDS_DVB_CHANNEL_FORMAT"
+msgid "Format"
+msgstr "Format"
+
+msgctxt "IDS_MAINFRM_2"
+msgid "Focus lost to: %s - %s"
+msgstr "Fokus hilang ke: %s - %s"
+
+msgctxt "IDS_AG_SUBTITLES_SAVED"
+msgid "Subtitles saved"
+msgstr "Subtitel tersimpan"
+
+msgctxt "IDS_MAINFRM_4"
+msgid "Cannot save subtitles"
+msgstr "Tidak bisa menyimpan subtitel"
+
+msgctxt "IDS_AG_FRAMERATE"
+msgid "Frame rate"
+msgstr "Laju frame"
+
+msgctxt "IDS_MAINFRM_6"
+msgid "drawn: %d, dropped: %d"
+msgstr "tergambar: %d, terbuang: %d"
+
+msgctxt "IDS_AG_FRAMES"
+msgid "Frames"
+msgstr "Frame"
+
+msgctxt "IDS_AG_BUFFERS"
+msgid "Buffers"
+msgstr "Bufer"
+
+msgctxt "IDS_MAINFRM_9"
+msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
+msgstr "Volume: %02lu/%02lu, Judul: %02lu/%02lu, Bab: %02lu/%02lu"
+
+msgctxt "IDS_MAINFRM_10"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Sudut: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+
+msgctxt "IDS_MAINFRM_11"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
+
+msgctxt "IDS_ADD_TO_PLAYLIST"
+msgid "Add to MPC-HC Playlist"
+msgstr "Tambah ke Daftar Putar MPC-HC"
+
+msgctxt "IDS_OPEN_WITH_MPC"
+msgid "Play with MPC-HC"
+msgstr "Putar dengan MPC-HC"
+
+msgctxt "IDS_CANNOT_CHANGE_FORMAT"
+msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
+msgstr "MPC-HC tidak memiliki cukup hak untuk mengubah asosiasi format berkas. Mohon klik pada tombol \"Jalankan sebagai administrator\"."
+
+msgctxt "IDS_APP_DESCRIPTION"
+msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
+msgstr "MPC-HC pemutar media sumber terbuka dan sangat ringan untuk Windows. Mendukung semua format berkas video dan audio yang umum. Kami 100% bebas dari perangkat mata-mata, tidak ada iklan atau bilah alat berbahaya."
+
+msgctxt "IDS_MAINFRM_12"
+msgid "channel"
+msgstr "saluran"
+
+msgctxt "IDS_MAINFRM_13"
+msgid "channels"
+msgstr "saluran"
+
+msgctxt "IDS_AG_TITLE"
+msgid "Title %u"
+msgstr "Judul %u"
+
+msgctxt "IDS_MAINFRM_16"
+msgid "DVD: Unexpected error"
+msgstr "DVD: Galat tidak terduga"
+
+msgctxt "IDS_MAINFRM_17"
+msgid "DVD: Copy-Protect Fail"
+msgstr "DVD: Perlindungan Penyalinan Gagal"
+
+msgctxt "IDS_MAINFRM_18"
+msgid "DVD: Invalid DVD 1.x Disc"
+msgstr "DVD: Cakram DVD 1.x Tidak Valid"
+
+msgctxt "IDS_MAINFRM_19"
+msgid "DVD: Invalid Disc Region"
+msgstr "DVD: Wilayah Cakram Tidak Valid"
+
+msgctxt "IDS_MAINFRM_20"
+msgid "DVD: Low Parental Level"
+msgstr "DVD: Level Parental Rendah"
+
+msgctxt "IDS_MAINFRM_21"
+msgid "DVD: Macrovision Fail"
+msgstr "DVD: Macrovision Gagal"
+
+msgctxt "IDS_MAINFRM_22"
+msgid "DVD: Incompatible System And Decoder Regions"
+msgstr "DVD: Wilayah Dekoder dan Sistem Tidak Kompatibel"
+
+msgctxt "IDS_MAINFRM_23"
+msgid "DVD: Incompatible Disc And Decoder Regions"
+msgstr "DVD: Wilayah Dekoder dan Cakram Tidak Kompatibel"
+
+msgctxt "IDS_D3DFS_WARNING"
+msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
+msgstr "Opsi ini didesain untuk menghindari tearing. Namun, ini juga mencegah MPC-HC menampilkan menu konteks dan kotak dialog lainnya selama pemutaran.\n\nApakah Anda benar-benar ingin mengaktifkan opsi ini?"
+
+msgctxt "IDS_MAINFRM_139"
+msgid "Sub delay: %ld ms"
+msgstr "Tundaan sub: %ld ms"
+
+msgctxt "IDS_AG_TITLE2"
+msgid "Title: %02d/%02d"
+msgstr "Judul: %02d/%02d"
+
+msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
+msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
+msgstr "Nama berkas mengandung karakter yang tidak didukung (gunakan A-Z, 0-9)"
+
+msgctxt "IDS_THUMB_ROWNUMBER"
+msgid "Rows:"
+msgstr "Baris:"
+
+msgctxt "IDS_THUMB_COLNUMBER"
+msgid "Columns:"
+msgstr "Kolom:"
+
+msgctxt "IDS_THUMB_IMAGE_WIDTH"
+msgid "Image width"
+msgstr "Lebar gambar"
+
+msgctxt "IDS_AG_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Nisbah Bidang"
+
+msgctxt "IDS_MAINFRM_37"
+msgid ", Total: %ld, Dropped: %ld"
+msgstr ", Total: %ld, Terbuang: %ld"
+
+msgctxt "IDS_MAINFRM_38"
+msgid ", Size: %I64d KB"
+msgstr ", Ukuran: %I64d KB"
+
+msgctxt "IDS_MAINFRM_39"
+msgid ", Size: %I64d MB"
+msgstr ", Ukuran: %I64d MB"
+
+msgctxt "IDS_MAINFRM_40"
+msgid ", Free: %I64d KB"
+msgstr ", Bebas: %I64d KB"
+
+msgctxt "IDS_MAINFRM_41"
+msgid ", Free: %I64d MB"
+msgstr ", Bebas: %I64d MB"
+
+msgctxt "IDS_MAINFRM_42"
+msgid ", Free V/A Buffers: %03d/%03d"
+msgstr ", Bufer V/A Bebas: %03d/%03d"
+
+msgctxt "IDS_AG_ERROR"
+msgid "Error"
+msgstr "Galat"
+
+msgctxt "IDS_SUBTITLE_STREAM_OFF"
+msgid "Subtitle: off"
+msgstr "Subtitel: mati"
+
+msgctxt "IDS_SUBTITLE_STREAM"
+msgid "Subtitle: %s"
+msgstr "Subtitel: %s"
+
+msgctxt "IDS_MAINFRM_46"
+msgid "Select the path for the DVD/BD:"
+msgstr "Pilih jalur untuk DVD/BD:"
+
+msgctxt "IDS_SUB_LOADED_SUCCESS"
+msgid " loaded successfully"
+msgstr " berhasil dimuat"
+
+msgctxt "IDS_ALL_FILES_FILTER"
+msgid "All files (*.*)|*.*||"
+msgstr "Semua berkas (*.*)|*.*||"
+
+msgctxt "IDS_GETDIB_FAILED"
+msgid "GetDIB failed, hr = %08x"
+msgstr "GetDIB gagal, hr = %08x"
+
+msgctxt "IDS_GETCURRENTIMAGE_FAILED"
+msgid "GetCurrentImage failed, hr = %08x"
+msgstr "GetCurrentImage gagal, hr = %08x"
+
+msgctxt "IDS_SCREENSHOT_ERROR"
+msgid "Cannot create file"
+msgstr "Tidak bisa membuat berkas"
+
+msgctxt "IDS_THUMBNAILS_NO_DURATION"
+msgid "Cannot create thumbnails for files with no duration"
+msgstr "Tidak bisa membuat gambar mini untuk berkas tanpa durasi"
+
+msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
+msgid "Failed to get video frame size"
+msgstr "Gagal mendapatkan ukuran frame video"
+
+msgctxt "IDS_OUT_OF_MEMORY"
+msgid "Out of memory, go buy some more!"
+msgstr "Memori tidak cukup!"
+
+msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
+msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
+msgstr "Format gambar tidak valid, tidak bisa membuat gambar mini dari %d bpp dibs."
+
+msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
+msgid "File Size: %s (%s bytes)\\N"
+msgstr "Ukuran Berkas: %s (%s byte)\\N"
+
+msgctxt "IDS_THUMBNAILS_INFO_HEADER"
+msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Nama Berkas: %s\\N%sResolusi: %dx%d %s\\NDurasi: %02d:%02d:%02d"
+
+msgctxt "IDS_THUMBNAIL_TOO_SMALL"
+msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
+msgstr "Gambar mini akan menjadi terlalu kecil, tidak mungkin membuat berkas tersebut.\n\nCoba untuk mengurangi jumlah gambar mini atau menambah ukuran total."
+
+msgctxt "IDS_CANNOT_LOAD_SUB"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Untuk memuat subtitel Anda harus mengubah jenis perender video dan membuka ulang berkas.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR atau Haali\n- RealMedia: Perender spesial untuk RealMedia, atau buka melalui DirectShow\n- QuickTime: Perender DX7 atau DX9 untuk QuickTime\n- ShockWave: t/a"
+
+msgctxt "IDS_SUBTITLE_FILES_FILTER"
+msgid "Subtitle files"
+msgstr "Berkas subtitel"
+
+msgctxt "IDS_MAINFRM_68"
+msgid "Aspect Ratio: %ld:%ld"
+msgstr "Nisbah Bidang: %ld:%ld"
+
+msgctxt "IDS_MAINFRM_69"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Nisbah Bidang: Bawaan (DAR)"
+
+msgctxt "IDS_MAINFRM_70"
+msgid "Audio delay: %I64d ms"
+msgstr "Tundaan audio: %I64d ms"
+
+msgctxt "IDS_AG_CHAPTER"
+msgid "Chapter %d"
+msgstr "Bab %d"
+
+msgctxt "IDS_AG_OUT_OF_MEMORY"
+msgid "Out of memory"
+msgstr "Memori tidak cukup"
+
+msgctxt "IDS_MAINFRM_77"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Galat: Membutuhkan Adobe Flash Player untuk Internet Explorer"
+
+msgctxt "IDS_MAINFRM_78"
+msgid "QuickTime not yet supported for X64 (apple library not available)"
+msgstr "QuickTime belum didukung untuk X64 (pustaka apple tidak tersedia)"
+
+msgctxt "IDS_MAINFRM_80"
+msgid "Failed to create the filter graph object"
+msgstr "Gagal membuat obyek grafik filter"
+
+msgctxt "IDS_MAINFRM_81"
+msgid "Invalid argument"
+msgstr "Argumen tidak valid"
+
+msgctxt "IDS_MAINFRM_82"
+msgid "Opening aborted"
+msgstr "Pembukaan dibatalkan"
+
+msgctxt "IDS_MAINFRM_83"
+msgid "Failed to render the file"
+msgstr "Gagal merender berkas"
+
+msgctxt "IDS_AG_CHAPTER2"
+msgid "Chapter: "
+msgstr "Bab:"
+
+msgctxt "IDS_VOLUME_OSD"
+msgid "Vol: %d%%"
+msgstr "Vol: %d%%"
+
+msgctxt "IDS_BOOST_OSD"
+msgid "Boost: +%u%%"
+msgstr "Galak: +%u%%"
+
+msgctxt "IDS_BALANCE_OSD"
+msgid "Balance: %s"
+msgstr "Seimbang: %s"
+
+msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
+msgid "Current"
+msgstr "Saat Ini"
+
+msgctxt "IDS_MAINFRM_DIR_TITLE"
+msgid "Select Directory"
+msgstr "Pilih Direktori"
+
+msgctxt "IDS_MAINFRM_DIR_CHECK"
+msgid "Include subdirectories"
+msgstr "Termasuk subdirektori"
+
+msgctxt "IDS_AG_PAUSE"
+msgid "Pause"
+msgstr "Jeda"
+
+msgctxt "IDS_AG_TOGGLE_CAPTION"
+msgid "Toggle Caption&Menu"
+msgstr "Jungkit Takarir & Menu"
+
+msgctxt "IDS_AG_TOGGLE_SEEKER"
+msgid "Toggle Seek Bar"
+msgstr "Jungkit Bilah Jangkau"
+
+msgctxt "IDS_AG_TOGGLE_CONTROLS"
+msgid "Toggle Controls"
+msgstr "Jungkit Pengendali"
+
+msgctxt "IDS_MAINFRM_84"
+msgid "Invalid file name"
+msgstr "Nama berkas tidak valid"
+
+msgctxt "IDS_MAINFRM_86"
+msgid "Cannot connect the filters"
+msgstr "Tidak bisa menyambungkan filter"
+
+msgctxt "IDS_MAINFRM_87"
+msgid "Cannot load any source filter"
+msgstr "Tidak bisa memuat filter sumber apapun"
+
+msgctxt "IDS_MAINFRM_88"
+msgid "Cannot render the file"
+msgstr "Tidak bisa merender berkas"
+
+msgctxt "IDS_MAINFRM_89"
+msgid "Invalid file format"
+msgstr "Format berkas tidak valid"
+
+msgctxt "IDS_MAINFRM_90"
+msgid "File not found"
+msgstr "Berkas tidak ditemukan"
+
+msgctxt "IDS_MAINFRM_91"
+msgid "Unknown file type"
+msgstr "Jenis berkas tidak dikenal"
+
+msgctxt "IDS_MAINFRM_92"
+msgid "Unsupported stream"
+msgstr "Strim tidak didukung"
+
+msgctxt "IDS_MAINFRM_93"
+msgid "Cannot find DVD directory"
+msgstr "Tidak bisa menemukan direktori DVD"
+
+msgctxt "IDS_MAINFRM_94"
+msgid "Can't create the DVD Navigator filter"
+msgstr "Tidak bisa membuat filter Navigator DVD"
+
+msgctxt "IDS_AG_FAILED"
+msgid "Failed"
+msgstr "Gagal"
+
+msgctxt "IDS_MAINFRM_96"
+msgid "Can't create video capture filter"
+msgstr "Tidak bisa membuat filter tangkapan video"
+
+msgctxt "IDS_MAINFRM_98"
+msgid "No capture filters"
+msgstr "Tidak ada filter tangkapan"
+
+msgctxt "IDS_MAINFRM_99"
+msgid "Can't create capture graph builder object"
+msgstr "Tidak bisa membuat obyek pembangun grafik tangkapan"
+
+msgctxt "IDS_MAINFRM_108"
+msgid "Couldn't open any device"
+msgstr "Tidak bisa membuka perangkat apapun"
+
+msgctxt "IDS_AG_SOUND"
+msgid "Sound"
+msgstr "Suara"
+
+msgctxt "IDS_MAINFRM_114"
+msgid "%s was not found, please insert media containing this file."
+msgstr "%s tidak ditemukan, mohon masukka media yang memuat berkas ini."
+
+msgctxt "IDS_AG_ABORTED"
+msgid "Aborted"
+msgstr "Dibatalkan"
+
+msgctxt "IDS_MAINFRM_116"
+msgid "&Properties..."
+msgstr "&Properti..."
+
+msgctxt "IDS_MAINFRM_117"
+msgid " (pin) properties..."
+msgstr " (pin) properti..."
+
+msgctxt "IDS_AG_UNKNOWN_STREAM"
+msgid "Unknown Stream"
+msgstr "Strim Tidak Dikenal"
+
+msgctxt "IDS_AG_UNKNOWN"
+msgid "Unknown %u"
+msgstr "%u Tidak Dikenal"
+
+msgctxt "IDS_AG_VSYNC"
+msgid "VSync"
+msgstr "VSync"
+
+msgctxt "IDS_MAINFRM_121"
+msgid " (Director Comments 1)"
+msgstr " (Komentar Director 1)"
+
+msgctxt "IDS_MAINFRM_122"
+msgid " (Director Comments 2)"
+msgstr " (Komentar Director 2)"
+
+msgctxt "IDS_DVD_SUBTITLES_ENABLE"
+msgid "Enable DVD subtitles"
+msgstr "Fungsikan subtitel DVD"
+
+msgctxt "IDS_AG_ANGLE"
+msgid "Angle %u"
+msgstr "Sudut %u"
+
+msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
+msgid "Increase VSync Offset"
+msgstr "Naikkan Ofset VSync"
+
+msgctxt "IDS_AG_DISABLED"
+msgid "Disabled"
+msgstr "Nonfungsi"
+
+msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
+msgid "Decrease VSync Offset"
+msgstr "Turunkan Ofset VSync"
+
+msgctxt "IDS_MAINFRM_136"
+msgid "MPC-HC D3D Fullscreen"
+msgstr "Layar Penuh D3D MPC-HC"
+
+msgctxt "IDS_MAINFRM_137"
+msgid "Unknown format"
+msgstr "Format tidak dikenal"
+
+msgctxt "IDS_MAINFRM_138"
+msgid "Sub shift: %ld ms"
+msgstr "Geser sub: %ld ms"
+
+msgctxt "IDS_VOLUME_BOOST_INC"
+msgid "Volume boost increase"
+msgstr "Penggalak volume dinaikkan"
+
+msgctxt "IDS_VOLUME_BOOST_DEC"
+msgid "Volume boost decrease"
+msgstr "Penggalak volume diturunkan"
+
+msgctxt "IDS_VOLUME_BOOST_MIN"
+msgid "Volume boost Min"
+msgstr "Penggalak volume Min"
+
+msgctxt "IDS_VOLUME_BOOST_MAX"
+msgid "Volume boost Max"
+msgstr "Penggalak volume Maks"
+
+msgctxt "IDS_USAGE"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Penggunaan: mpc-hc.exe \"pathname\" [saklar]"
+
+msgctxt "IDS_UNKNOWN_SWITCH"
+msgid "Unrecognized switch(es) found in command line string: \n\n"
+msgstr "Alihan tidak dikenal ditemukan dalam untaian perintah baris:\n\n"
+
+msgctxt "IDS_AG_TOGGLE_INFO"
+msgid "Toggle Information"
+msgstr "Jungkit Informasi"
+
+msgctxt "IDS_AG_TOGGLE_STATS"
+msgid "Toggle Statistics"
+msgstr "Jungkit Statistik"
+
+msgctxt "IDS_AG_TOGGLE_STATUS"
+msgid "Toggle Status"
+msgstr "Jungkit Status"
+
+msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
+msgid "Toggle Subresync Bar"
+msgstr "Jungkit Bilah Subresync"
+
+msgctxt "IDS_AG_TOGGLE_PLAYLIST"
+msgid "Toggle Playlist Bar"
+msgstr "Jungkit Bilah Daftar Putar"
+
+msgctxt "IDS_AG_TOGGLE_CAPTURE"
+msgid "Toggle Capture Bar"
+msgstr "Jungkit Bilah Tangkapan"
+
+msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
+msgid "Toggle Debug Shaders"
+msgstr "Jungkit Shader Awakutu"
+
+msgctxt "IDS_AG_ZOOM_50"
+msgid "Zoom 50%"
+msgstr "Zum 50%"
+
+msgctxt "IDS_AG_ZOOM_100"
+msgid "Zoom 100%"
+msgstr "Zum 100%"
+
+msgctxt "IDS_AG_ZOOM_200"
+msgid "Zoom 200%"
+msgstr "Zum 200%"
+
+msgctxt "IDS_AG_NEXT_AR_PRESET"
+msgid "Next AR Preset"
+msgstr "Prasetel AR Selanjutnya"
+
+msgctxt "IDS_AG_VIDFRM_STRETCH"
+msgid "VidFrm Stretch"
+msgstr "VidFrm Regang"
+
+msgctxt "IDS_AG_VIDFRM_INSIDE"
+msgid "VidFrm Inside"
+msgstr "VidFrm Dalam"
+
+msgctxt "IDS_AG_VIDFRM_OUTSIDE"
+msgid "VidFrm Outside"
+msgstr "VidFrm Luar"
+
+msgctxt "IDS_AG_PNS_RESET"
+msgid "PnS Reset"
+msgstr "PnS Setel Ulang"
+
+msgctxt "IDS_AG_PNS_ROTATEX_P"
+msgid "PnS Rotate X+"
+msgstr "PnS Putar X+"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM1"
+msgid "VidFrm Zoom 1"
+msgstr "VidFrm Zum 1"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM2"
+msgid "VidFrm Zoom 2"
+msgstr "VidFrm Zum 2"
+
+msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
+msgid "VidFrm Switch Zoom"
+msgstr "VidFrm Zum Alihan"
+
+msgctxt "IDS_ENABLE_ALL_FILTERS"
+msgid "&Enable all filters"
+msgstr "&Fungsikan semua filter"
+
+msgctxt "IDS_LOGO_AUTHOR"
+msgid "Author unknown. Contact us if you made this logo!"
+msgstr "Pengembang tidak dikenal. Hubungi kami jika Anda membuat logo ini!"
+
+msgctxt "IDS_NO_MORE_MEDIA"
+msgid "No more media in the current folder."
+msgstr "Tidak ada media tersisa di dalam folder saat ini."
+
+msgctxt "IDS_FIRST_IN_FOLDER"
+msgid "The first file of the folder is already loaded."
+msgstr "Berkas pertama dalam folder sudah dimuat."
+
+msgctxt "IDS_LAST_IN_FOLDER"
+msgid "The last file of the folder is already loaded."
+msgstr "Berkas terakhir dalam folder sudah dimuat."
+
+msgctxt "IDS_FRONT_LEFT"
+msgid "Front Left"
+msgstr "Depan Kiri"
+
+msgctxt "IDS_FRONT_RIGHT"
+msgid "Front Right"
+msgstr "Depan Kanan"
+
+msgctxt "IDS_FRONT_CENTER"
+msgid "Front Center"
+msgstr "Depan Tengah"
+
+msgctxt "IDS_LOW_FREQUENCY"
+msgid "Low Frequency"
+msgstr "Frekuensi Rendah"
+
+msgctxt "IDS_BACK_LEFT"
+msgid "Back Left"
+msgstr "Belakang Kiri"
+
+msgctxt "IDS_BACK_RIGHT"
+msgid "Back Right"
+msgstr "Belakang Kanan"
+
+msgctxt "IDS_FRONT_LEFT_OF_CENTER"
+msgid "Front Left of Center"
+msgstr "Depan Kiri dari Tengah"
+
+msgctxt "IDS_FRONT_RIGHT_OF_CENTER"
+msgid "Front Right of Center"
+msgstr "Depan Kanan dari Tengah"
+
+msgctxt "IDS_BACK_CENTER"
+msgid "Back Center"
+msgstr "Belakang Tengah"
+
+msgctxt "IDS_SIDE_LEFT"
+msgid "Side Left"
+msgstr "Sisi Kiri"
+
+msgctxt "IDS_SIDE_RIGHT"
+msgid "Side Right"
+msgstr "Sisi Kanan"
+
+msgctxt "IDS_TOP_CENTER"
+msgid "Top Center"
+msgstr "Atas Tengah"
+
+msgctxt "IDS_TOP_FRONT_LEFT"
+msgid "Top Front Left"
+msgstr "Atas Depan Kiri"
+
+msgctxt "IDS_TOP_FRONT_CENTER"
+msgid "Top Front Center"
+msgstr "Atas Depan Tengah"
+
+msgctxt "IDS_TOP_FRONT_RIGHT"
+msgid "Top Front Right"
+msgstr "Atas Depan Kanan"
+
+msgctxt "IDS_TOP_BACK_LEFT"
+msgid "Top Back Left"
+msgstr "Atas Belakang Kiri"
+
+msgctxt "IDS_TOP_BACK_CENTER"
+msgid "Top Back Center"
+msgstr "Atas Belakang Tengah"
+
+msgctxt "IDS_TOP_BACK_RIGHT"
+msgid "Top Back Right"
+msgstr "Atas Belakang Kanan"
+
+msgctxt "IDS_TIME_TOOLTIP_ABOVE"
+msgid "Above seek bar"
+msgstr "Di atas bilah jangkau"
+
+msgctxt "IDS_TIME_TOOLTIP_BELOW"
+msgid "Below seek bar"
+msgstr "Di bawah bilah jangkau"
+
+msgctxt "IDS_VIDEO_STREAM"
+msgid "Video: %s"
+msgstr "Video: %s"
+
+msgctxt "IDS_APPLY"
+msgid "Apply"
+msgstr "Terapkan"
+
+msgctxt "IDS_CLEAR"
+msgid "Clear"
+msgstr "Bersihkan"
+
+msgctxt "IDS_CANCEL"
+msgid "Cancel"
+msgstr "Batal"
+
+msgctxt "IDS_THUMB_THUMBNAILS"
+msgid "Layout"
+msgstr "Tata Letak"
+
+msgctxt "IDS_THUMB_PIXELS"
+msgid "Pixels:"
+msgstr "Piksel:"
+
+msgctxt "IDS_TEXTFILE_ENC"
+msgid "Encoding:"
+msgstr "Pengenkodean:"
+
+msgctxt "IDS_DISABLE_ALL_FILTERS"
+msgid "&Disable all filters"
+msgstr "&Nonfungsikan semua filter"
+
+msgctxt "IDS_ENABLE_AUDIO_FILTERS"
+msgid "Enable all audio decoders"
+msgstr "Fungsikan semua dekoder audio"
+
+msgctxt "IDS_DISABLE_AUDIO_FILTERS"
+msgid "Disable all audio decoders"
+msgstr "Nonfungsikan semua dekoder audio"
+
+msgctxt "IDS_ENABLE_VIDEO_FILTERS"
+msgid "Enable all video decoders"
+msgstr "Fungsikan semua dekoder video"
+
+msgctxt "IDS_DISABLE_VIDEO_FILTERS"
+msgid "Disable all video decoders"
+msgstr "Nonfungsikan semua dekoder video"
+
+msgctxt "IDS_STRETCH_TO_WINDOW"
+msgid "Stretch To Window"
+msgstr "Lebarkan ke Jendela"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
+msgid "Touch Window From Inside"
+msgstr "Sentuh Jendela Dari Dalam"
+
+msgctxt "IDS_ZOOM1"
+msgid "Zoom 1"
+msgstr "Zum 1"
+
+msgctxt "IDS_ZOOM2"
+msgid "Zoom 2"
+msgstr "Zum 2"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
+msgid "Touch Window From Outside"
+msgstr "Sentuh Jendela Dari Luar"
+
+msgctxt "IDS_AUDIO_STREAM"
+msgid "Audio: %s"
+msgstr "Audio: %s"
+
+msgctxt "IDS_AG_REOPEN"
+msgid "Reopen File"
+msgstr "Buka Ulang Berkas"
+
+msgctxt "IDS_MFMT_AVI"
+msgid "AVI"
+msgstr "AVI"
+
+msgctxt "IDS_MFMT_MPEG"
+msgid "MPEG"
+msgstr "MPEG"
+
+msgctxt "IDS_MFMT_MPEGTS"
+msgid "MPEG-TS"
+msgstr "MPEG-TS"
+
+msgctxt "IDS_MFMT_DVDVIDEO"
+msgid "DVD-Video"
+msgstr "DVD-Video"
+
+msgctxt "IDS_MFMT_MKV"
+msgid "Matroska"
+msgstr "Matroska"
+
+msgctxt "IDS_MFMT_WEBM"
+msgid "WebM"
+msgstr "WebM"
+
+msgctxt "IDS_MFMT_MP4"
+msgid "MP4"
+msgstr "MP4"
+
+msgctxt "IDS_MFMT_MOV"
+msgid "QuickTime Movie"
+msgstr "QuickTime"
+
+msgctxt "IDS_MFMT_3GP"
+msgid "3GP"
+msgstr "3GP"
+
+msgctxt "IDS_MFMT_3G2"
+msgid "3G2"
+msgstr "3G2"
+
+msgctxt "IDS_MFMT_FLV"
+msgid "Flash Video"
+msgstr "Flash Video"
+
+msgctxt "IDS_MFMT_OGM"
+msgid "Ogg Media"
+msgstr "Ogg Media"
+
+msgctxt "IDS_MFMT_RM"
+msgid "Real Media"
+msgstr "Real Media"
+
+msgctxt "IDS_MFMT_RT"
+msgid "Real Script"
+msgstr "Real Script"
+
+msgctxt "IDS_MFMT_WMV"
+msgid "Windows Media Video"
+msgstr "Windows Media Video"
+
+msgctxt "IDS_MFMT_BINK"
+msgid "Smacker/Bink Video"
+msgstr "Video Smacker/Bink"
+
+msgctxt "IDS_MFMT_FLIC"
+msgid "FLIC Animation"
+msgstr "Animasi FLIC"
+
+msgctxt "IDS_MFMT_DSM"
+msgid "DirectShow Media"
+msgstr "DirectShow Media"
+
+msgctxt "IDS_MFMT_IVF"
+msgid "Indeo Video Format"
+msgstr "Indeo Video Format"
+
+msgctxt "IDS_MFMT_OTHER"
+msgid "Other"
+msgstr "Lainnya"
+
+msgctxt "IDS_MFMT_SWF"
+msgid "Shockwave Flash"
+msgstr "Shockwave Flash"
+
+msgctxt "IDS_MFMT_OTHER_AUDIO"
+msgid "Other Audio"
+msgstr "Audio Lainnya"
+
+msgctxt "IDS_MFMT_AC3"
+msgid "AC-3"
+msgstr "AC-3"
+
+msgctxt "IDS_MFMT_AIFF"
+msgid "AIFF"
+msgstr "AIFF"
+
+msgctxt "IDS_MFMT_ALAC"
+msgid "Apple Lossless"
+msgstr "Apple Lossless"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
+msgctxt "IDS_MFMT_AMR"
+msgid "AMR"
+msgstr "AMR"
+
+msgctxt "IDS_MFMT_APE"
+msgid "Monkey's Audio"
+msgstr "Monkey's Audio"
+
+msgctxt "IDS_MFMT_AU"
+msgid "AU/SND"
+msgstr "AU/SND"
+
+msgctxt "IDS_MFMT_CDA"
+msgid "Audio CD track"
+msgstr "Trek CD Audio"
+
+msgctxt "IDS_MFMT_FLAC"
+msgid "FLAC"
+msgstr "FLAC"
+
+msgctxt "IDS_MFMT_M4A"
+msgid "MPEG-4 Audio"
+msgstr "MPEG-4 Audio"
+
+msgctxt "IDS_MFMT_MIDI"
+msgid "MIDI"
+msgstr "MIDI"
+
+msgctxt "IDS_MFMT_MKA"
+msgid "Matroska audio"
+msgstr "Matroska audio"
+
+msgctxt "IDS_MFMT_MP3"
+msgid "MP3"
+msgstr "MP3"
+
+msgctxt "IDS_MFMT_MPA"
+msgid "MPEG audio"
+msgstr "MPEG audio"
+
+msgctxt "IDS_MFMT_MPC"
+msgid "Musepack"
+msgstr "Musepack"
+
+msgctxt "IDS_MFMT_OFR"
+msgid "OptimFROG"
+msgstr "OptimFROG"
+
+msgctxt "IDS_MFMT_OGG"
+msgid "Ogg Vorbis"
+msgstr "Ogg Vorbis"
+
+msgctxt "IDS_MFMT_RA"
+msgid "Real Audio"
+msgstr "Real Audio"
+
+msgctxt "IDS_MFMT_TAK"
+msgid "TAK"
+msgstr "TAK"
+
+msgctxt "IDS_MFMT_TTA"
+msgid "True Audio"
+msgstr "True Audio"
+
+msgctxt "IDS_MFMT_PLS"
+msgid "Playlist"
+msgstr "Daftar Putar"
+
+msgctxt "IDS_MFMT_BDPLS"
+msgid "Blu-ray playlist"
+msgstr "Daftar putar blu-ray"
+
+msgctxt "IDS_MFMT_RAR"
+msgid "RAR Archive"
+msgstr "Arsip RAR"
+
+msgctxt "IDS_DVB_CHANNEL_FPS"
+msgid "FPS"
+msgstr "FPS"
+
+msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
+msgid "Resolution"
+msgstr "Resolusi"
+
+msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Nisbah Bidang"
+
+msgctxt "IDS_OSD_RS_VSYNC_ON"
+msgid "VSync: On"
+msgstr "VSync: Nyala"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFF"
+msgid "VSync: Off"
+msgstr "VSync: Mati"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
+msgid "Accurate VSync: On"
+msgstr "VSync Akurat: Nyala"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
+msgid "Accurate VSync: Off"
+msgstr "VSync Akurat: Mati"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
+msgid "Synchronize Video to Display: On"
+msgstr "Selaraskan Video ke Tampilan: Nyala"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
+msgid "Synchronize Video to Display: Off"
+msgstr "Selaraskan Video ke Tampilan: Mati"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
+msgid "Synchronize Display to Video: On"
+msgstr "Selaraskan Tampilan ke Video: Nyala"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
+msgid "Synchronize Display to Video: Off"
+msgstr "Selaraskan Tampilan ke Video: Mati"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
+msgid "Present at Nearest VSync: On"
+msgstr "Sajikan pada VSync Terdekat: Nyala"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
+msgid "Present at Nearest VSync: Off"
+msgstr "Sajikan pada VSync Terdekat: Mati"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
+msgid "Color Management: On"
+msgstr "Pengelolaan Warna: Nyala"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
+msgid "Color Management: Off"
+msgstr "Pengelolaan Warna: Mati"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
+msgid "Input Type: Auto-Detect"
+msgstr "Jenis Masukan: Oto-Deteksi"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
+msgid "Input Type: HDTV"
+msgstr "Jenis Masukan: HDTV"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_NTSC"
+msgid "Input Type: SDTV NTSC"
+msgstr "Jenis Masukan: SDTV NTSC"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
+msgid "Input Type: SDTV PAL"
+msgstr "Jenis Masukan: SDTV PAL"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
+msgid "Ambient Light: Bright (2.2 Gamma)"
+msgstr "Cahaya Ambien: Terang (2.2 Gamma)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
+msgid "Ambient Light: Dim (2.35 Gamma)"
+msgstr "Cahaya Ambien: Redup (2.35 Gamma)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
+msgid "Ambient Light: Dark (2.4 Gamma)"
+msgstr "Cahaya Ambien: Gelap (2.4 Gamma)"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
+msgid "Rendering Intent: Perceptual"
+msgstr "Minat Perenderan: Perseptual"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
+msgid "Rendering Intent: Relative Colorimetric"
+msgstr "Minat Perenderan: MetrikWarna Relatif"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
+msgid "Rendering Intent: Saturation"
+msgstr "Minat Perenderan: Kejenuhan"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
+msgid "Rendering Intent: Absolute Colorimetric"
+msgstr "Minat Perenderan: MetrikWarna Absolut"
+
+msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
+msgid "Output Range: %s"
+msgstr "Rentang Keluaran: %s"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
+msgid "Flush GPU before VSync: On"
+msgstr "Bilas GPU sebelum VSync: Nyala"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
+msgid "Flush GPU before VSync: Off"
+msgstr "Bilas GPU sebelum VSync: Mati"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
+msgid "Flush GPU after Present: On"
+msgstr "Bilas GPU setelah Present: Nyala"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
+msgid "Flush GPU after Present: Off"
+msgstr "Bilas GPU setelah Present: Mati"
+
+msgctxt "IDS_OSD_RS_WAIT_ON"
+msgid "Wait for GPU Flush: On"
+msgstr "Menunggu Bilas GPU: Nyala"
+
+msgctxt "IDS_OSD_RS_WAIT_OFF"
+msgid "Wait for GPU Flush: Off"
+msgstr "Menunggu Bilas GPU: Mati"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
+msgid "D3D Fullscreen: On"
+msgstr "Layar Penuh D3D: Nyala"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
+msgid "D3D Fullscreen: Off"
+msgstr "Layar Penuh D3D: Mati"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
+msgid "Disable desktop composition: On"
+msgstr "Nonfungsikan komposisi destop: Nyala"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
+msgid "Disable desktop composition: Off"
+msgstr "Nonfungsikan komposisi destop: Mati"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
+msgid "Alternative VSync: On"
+msgstr "VSync Alternatif: Nyala"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
+msgid "Alternative VSync: Off"
+msgstr "VSync Alternatif: Mati"
+
+msgctxt "IDS_OSD_RS_RESET_DEFAULT"
+msgid "Renderer settings reset to default"
+msgstr "Pengaturan perender disetel ulang ke bawaan"
+
+msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
+msgid "Renderer settings reset to optimal"
+msgstr "Pengaturan perender disetel ulang ke optimal"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
+msgid "D3D Fullscreen GUI Support: On"
+msgstr "Dukungan GUI Layar Penuh D3D: Nyala"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
+msgid "D3D Fullscreen GUI Support: Off"
+msgstr "Dukungan GUI Layar Penuh D3D: Mati"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
+msgid "10-bit RGB Output: On"
+msgstr "Keluaran 10-bit RGB: Nyala"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
+msgid "10-bit RGB Output: Off"
+msgstr "Keluaran 10-bit RGB: Mati"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
+msgid "Force 10-bit RGB Input: On"
+msgstr "Paksa Masukkan 10-bit RGB: Nyala"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
+msgid "Force 10-bit RGB Input: Off"
+msgstr "Paksa Masukkan 10-bit RGB: Mati"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
+msgid "Full Floating Point Processing: On"
+msgstr "Pemrosesan Full Floating Point: Nyala"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
+msgid "Full Floating Point Processing: Off"
+msgstr "Pemrosesan Full Floating Point: Mati"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
+msgid "Half Floating Point Processing: On"
+msgstr "Pemrosesan Half Floating Point: Nyala"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
+msgid "Half Floating Point Processing: Off"
+msgstr "Pemrosesan Half Floating Point: Mati"
+
+msgctxt "IDS_BRIGHTNESS_DEC"
+msgid "Brightness decrease"
+msgstr "Kecerahan turun"
+
+msgctxt "IDS_CONTRAST_INC"
+msgid "Contrast increase"
+msgstr "Kontras naik"
+
+msgctxt "IDS_CONTRAST_DEC"
+msgid "Contrast decrease"
+msgstr "Kontras turun"
+
+msgctxt "IDS_HUE_INC"
+msgid "Hue increase"
+msgstr "Rona naik"
+
+msgctxt "IDS_HUE_DEC"
+msgid "Hue decrease"
+msgstr "Rona turun"
+
+msgctxt "IDS_SATURATION_INC"
+msgid "Saturation increase"
+msgstr "Kejenuhan naik"
+
+msgctxt "IDS_SATURATION_DEC"
+msgid "Saturation decrease"
+msgstr "Kejenuhan turun"
+
+msgctxt "IDS_RESET_COLOR"
+msgid "Reset color settings"
+msgstr "Setel ulang pengaturan warna"
+
+msgctxt "IDS_USING_LATEST_STABLE"
+msgid "\nYou are already using the latest stable version."
+msgstr "\nAnda sudah menggunakan versi stabil terbaru."
+
+msgctxt "IDS_USING_NEWER_VERSION"
+msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
+msgstr "Versi Anda saat ini adalah v%s.\n\nVersi stabil terakhir adalah v%s."
+
+msgctxt "IDS_NEW_UPDATE_AVAILABLE"
+msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
+msgstr "MPC-HC v%s tersedia. Anda menggunakan v%s.\n\nApakah Anda ingin mengunjungi situs web MPC-HC untuk mengunduhnya?"
+
+msgctxt "IDS_UPDATE_ERROR"
+msgid "Update server not found.\n\nPlease check your internet connection or try again later."
+msgstr "Server pemutakhiran tidak ditemukan.\n\nMohon periksa sambungan internet Anda atau coba lagi nanti."
+
+msgctxt "IDS_UPDATE_CLOSE"
+msgid "&Close"
+msgstr "&Tutup"
+
+msgctxt "IDS_OSD_ZOOM"
+msgid "Zoom: %.0lf%%"
+msgstr "Zum: %.0lf%%"
+
+msgctxt "IDS_OSD_ZOOM_AUTO"
+msgid "Zoom: Auto"
+msgstr "Zum: Auto"
+
+msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
+msgid "Toggle custom channel mapping"
+msgstr "Jungkit pemetaan saluran khusus"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
+msgid "Custom channel mapping: On"
+msgstr "Pemetaan saluran khusus: Nyala"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
+msgid "Custom channel mapping: Off"
+msgstr "Pemetaan saluran khusus: Mati"
+
+msgctxt "IDS_NORMALIZE"
+msgid "Toggle normalization"
+msgstr "Jungkit normalisasi"
+
+msgctxt "IDS_OSD_NORMALIZE_ON"
+msgid "Normalization: On"
+msgstr "Normalisasi: Nyala"
+
+msgctxt "IDS_OSD_NORMALIZE_OFF"
+msgid "Normalization: Off"
+msgstr "Normalisasi: Mati"
+
+msgctxt "IDS_REGAIN_VOLUME"
+msgid "Toggle regain volume"
+msgstr "Jungkit pengerasan volume"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
+msgid "Regain volume: On"
+msgstr "Pengerasan volume: Nyala"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
+msgid "Regain volume: Off"
+msgstr "Pengerasan volume: Mati"
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "byte"
+
+msgctxt "IDS_SIZE_UNIT_K"
+msgid "KB"
+msgstr "KB"
+
+msgctxt "IDS_SIZE_UNIT_M"
+msgid "MB"
+msgstr "MB"
+
+msgctxt "IDS_SIZE_UNIT_G"
+msgid "GB"
+msgstr "GB"
+
+msgctxt "IDS_SPEED_UNIT_K"
+msgid "KB/s"
+msgstr "KB/s"
+
+msgctxt "IDS_SPEED_UNIT_M"
+msgid "MB/s"
+msgstr "MB/s"
+
+msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
+msgid "Could not create the tuner."
+msgstr "Tidak bisa membuat pelaras."
+
+msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
+msgid "Could not create the receiver."
+msgstr "Tidak bisa membuat penerima."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
+msgid "Could not connect the network and the tuner."
+msgstr "Tidak bisa menyambungkan jaringan dan pelaras."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
+msgid "Could not connect the tuner and the receiver."
+msgstr "Tidak bisa menyambungkan pelaras dan penerima."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
+msgid "Could not connect the tuner."
+msgstr "Tidak bisa menyambungkan pelaras."
+
+msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
+msgid "Could not create the demultiplexer."
+msgstr "Tidak bisa membuat awamultiplekser."
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
+msgid "Error parsing the entered time!"
+msgstr "Galat mengurai waktu yang dimasukkan!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
+msgid "Error parsing the entered text!"
+msgstr "Galat mengurai teks yang dimasukkan!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
+msgid "Error parsing the entered frame rate!"
+msgstr "Galat mengurai laju frame yang dimasukkan!"
+
+msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Tidak bisa menuntun frame, coba perender video yang berbeda."
+
+msgctxt "IDS_SCREENSHOT_ERROR_REAL"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
+msgstr "Fungsi \"Simpan Gambar\" dan \"Simpan Gambar Mini\" tidak bisa digunakan dengan perender video bawaan untuk RealMedia.\n\nPilih satu dari perender DirectX untuk RealMedia di dalam opsi keluaran MPC-HC dan buka ulang berkasnya."
+
+msgctxt "IDS_SCREENSHOT_ERROR_QT"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
+msgstr "Fungsi \"Simpan Gambar\" dan \"Simpan Gambar Mini\" tidak bisa digunakan dengan perender video bawaan untuk QuickTime.\n\nPilih satu dari perender DirectX untuk QuickTime di dalam opsi keluaran MPC-HC dan buka ulang berkasnya."
+
+msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
+msgstr "Fungsi \"Simpan Gambar\" dan \"Simpan Gambar Mini\" tidak bisa digunakan untuk berkas Shockwave."
+
+msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
+msgstr "Fungsi \"Simpan Gambar\" dan \"Simpan Gambar Mini\" tidak bisa digunakan dengan perender video Pengadon Overlay.\n\nUbah perender video di dalam opsi keluaran MPC-HC dan buka ulang berkasnya."
+
+msgctxt "IDS_MB_SHOW_EDL_EDITOR"
+msgid "Do you want to activate the EDL editor?"
+msgstr "Apakah Anda ingin mengaktifkan penyunting EDL?"
+
+msgctxt "IDS_CAPTURE_ERROR"
+msgid "Capture Error"
+msgstr "Tangkapan Galat"
+
+msgctxt "IDS_CAPTURE_ERROR_VIDEO"
+msgid "video"
+msgstr "video"
+
+msgctxt "IDS_CAPTURE_ERROR_AUDIO"
+msgid "audio"
+msgstr "audio"
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
+msgid "Can't add the %s buffer filter to the graph."
+msgstr "Tidak bisa menambahkan filter bufer %s ke grafik."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
+msgid "Can't connect the %s buffer filter to the graph."
+msgstr "Tidak bisa menyambung filter bufer %s ke grafik."
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
+msgid "Can't add the %s encoder filter to the graph."
+msgstr "Tidak bisa menambahkan filter pengenkode %s ke grafik."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
+msgid "Can't connect the %s encoder filter to the graph."
+msgstr "Tidak bisa menyambung filter pengenkode %s ke grafik."
+
+msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
+msgid "Can't set the compression format on the %s encoder filter."
+msgstr "Tidak bisa menetapkan format kompresi pada filter pengenkode %s."
+
+msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
+msgid "Can't connect the %s stream to the multiplexer filter."
+msgstr "Tidak bisa menyambung strim %s ke filter multiplekser."
+
+msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
+msgid "No video capture pin was found."
+msgstr "Tidak ada pin tangkapan video yang ditemukan."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
+msgid "No audio capture pin was found."
+msgstr "Tidak ada pin tangkapan audio yang ditemukan."
+
+msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
+msgid "Error initializing the output file."
+msgstr "Galat menginisialisasi berkas keluaran."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
+msgid "Error initializing the audio output file."
+msgstr "Galat menginisialisasi berkas keluaran audio."
+
+msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
+msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+msgstr "Format waktu yang benar adalah [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+
+msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
+msgid "This type is already in the list!"
+msgstr "Jenis ini sudah ada di dalam daftar!"
+
+msgctxt "IDS_WEBSERVER_ERROR_TEST"
+msgid "You need to apply the new settings before testing them."
+msgstr "Anda perlu menerapkan pengaturan baru sebelum mengujinya."
+
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
+msgid "After Playback: Exit"
+msgstr "Setelah Pemutaran: Keluar"
+
+msgctxt "IDS_AFTERPLAYBACK_STANDBY"
+msgid "After Playback: Stand By"
+msgstr "Setelah Pemutaran: Siaga"
+
+msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
+msgid "After Playback: Hibernate"
+msgstr "Setelah Pemutaran: Hibernasi"
+
+msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
+msgid "After Playback: Shutdown"
+msgstr "Setelah Pemutaran: Matikan"
+
+msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
+msgid "After Playback: Log Off"
+msgstr "Setelah Pemutaran: Keluar"
+
+msgctxt "IDS_AFTERPLAYBACK_LOCK"
+msgid "After Playback: Lock"
+msgstr "Setelah Pemutaran: Kunci"
+
+msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
+msgid "After Playback: Turn off the monitor"
+msgstr "Setelah Pemutaran: Matikan monitor"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Setelah Pemutaran: Putar berkas selanjutnya di dalam folder"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Setelah Pemutaran: Tidak melakukan apa-apa"
+
+msgctxt "IDS_OSD_BRIGHTNESS"
+msgid "Brightness: %s"
+msgstr "Kecerahan: %s"
+
+msgctxt "IDS_OSD_CONTRAST"
+msgid "Contrast: %s"
+msgstr "Kontras: %s"
+
+msgctxt "IDS_OSD_HUE"
+msgid "Hue: %s°"
+msgstr "Rona: %s°"
+
+msgctxt "IDS_OSD_SATURATION"
+msgid "Saturation: %s"
+msgstr "Kejenuhan: %s"
+
+msgctxt "IDS_OSD_RESET_COLOR"
+msgid "Color settings restored"
+msgstr "Pengaturan warna dipulihkan"
+
+msgctxt "IDS_OSD_NO_COLORCONTROL"
+msgid "Color control is not supported"
+msgstr "Pengendali warna tidak didukung"
+
+msgctxt "IDS_BRIGHTNESS_INC"
+msgid "Brightness increase"
+msgstr "Kecerahan naik"
+
+msgctxt "IDS_LANG_PREF_EXAMPLE"
+msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
+msgstr "Masukkan bahasa pilihan Anda disini.\nSebagai contoh, ketik: \"eng jap swe\""
+
+msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
+msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
+msgstr "Spliter eksternal bisa memiliki preferensi pilihan bahasa mereka sendiri dan perilaku bawaan MPC-HC adalah tidak mengubah pilihan awal mereka.\nFungsikan opsi ini jika Anda ingin MPC-HC mengontrol splter eksternal."
+
+msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
+msgid "&Blu-Ray playlists"
+msgstr "Daftar putar &Blu-Ray"
+
+msgctxt "IDS_NAVIGATE_PLAYLIST"
+msgid "&Playlist"
+msgstr "Daftar &Putar"
+
+msgctxt "IDS_NAVIGATE_CHAPTERS"
+msgid "&Chapters"
+msgstr "&Bab"
+
+msgctxt "IDS_NAVIGATE_TITLES"
+msgid "&Titles"
+msgstr "&Judul"
+
+msgctxt "IDS_NAVIGATE_CHANNELS"
+msgid "&Channels"
+msgstr "&Saluran"
+
+msgctxt "IDC_FASTSEEK_CHECK"
+msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
+msgstr "Jika \"keyframe terakhir\" dipilih, jangkau ke keyframe pertama sebelum titik jangkau yang sebenarnya.\nJika \"keyframe terdekat\" dipilih, jangkau ke keyframe pertama sebelum atau sesudah titik jangkau tergantung pada mana yang terdekat."
+
+msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
+msgid "Associate with all formats"
+msgstr "Asosiasi dengan semua format"
+
+msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
+msgid "Associate with video formats only"
+msgstr "Asosiasi dengan format video saja"
+
+msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
+msgid "Associate with audio formats only"
+msgstr "Asosiasi dengan format audio saja"
+
+msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
+msgid "Clear all associations"
+msgstr "Hilangkan semua asosiasi"
+
+msgctxt "IDS_FILTER_SETTINGS_CAPTION"
+msgid "Settings"
+msgstr "Pengaturan"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Penyedia"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Tuna Rungu"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Unduhan"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Nilai"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Pencarian subtitel daring gagal."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Pencarian subtitel daring dibatalkan."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Pencarian subtitel daring selesai, menemukan %d subtitel."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Pencarian subtitel daring selesai, subtitel tidak ditemukan."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Unduh subtitel"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Mencari subtitel secara daring, mohon tunggu..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Membatalkan pencarian subtitel daring..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Nama Pengguna"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Status"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Siap..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Belum diimplementasikan."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Mengunggah..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Subtitel berhasil diunggah."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Mengunggah subtitel gagal."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Mengunggah subtitel dibatalkan."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Subtitel sudah ada."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Mengunggah subtitel, mohon tunggu..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Pengunggahan selesai."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Pengunggahan dibatalkan."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Penggunggahan gagal."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Unduh && Buka"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Persiapan"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Setel Ulang"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Pindah ke Atas"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Pindah ke Bawah"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Buka Url"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Bahasa"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "GALAT: Tidak bisa tersambung ke jaringan internet."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Masukkan kredensial situs web"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Masukkan kredensial Anda untuk menyambung ke:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Nisbah Bidang: Asumsi Piksel Bujursangkar (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Terunduh [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Unggah subtitel"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Apakah Anda yakin ingin mengunggah berkas subtitel \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Mengambil bahasa yang didukung..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Gagal masuk ke \"%S\" dengan nama pengguna \"%S\".\n\nHarap masukkan nama pengguna dan sandi yang benar atau setel ulang kredensial untuk masuk sebagai anonim."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Pencarian dan pengunduhan otomatis akan dinonaktifkan untuk semua berkas media yang jalur berkasnya memuat semua atau salah satu pola kata berikut ini.\nContoh, ketik: \"pribadi\\video|kerja\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pathname\"\tBerkas atau direktori utama untuk dimuat\n\t\t(wildcard diperbolehkan, \"-\" menunjukkan input standar)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"\tMuat berkas audio tambahan"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"file\"\tMuat berkas audio tambahan digeser dengan XXms\n\t\t(Jika berkas berisi \"...TUNDAAN XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tMulai render dalam mode layar penuh D3D"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"\tMuat berkas subtitel tambahan"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtername\"\tMuat filter DirectShow dari sebuah pustaka link dinamis (wildcard diperbolehkan)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tJalankan pada mode DVD, \"pathname\" berarti folder DVD (pilihan)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tMulai pemutaran pada judul T, bab C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tMulai pemutaran pada judul T, posisi P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tMuat semua trek dari CD or (S)VCD audio,\n\t\t\"pathname\" berarti jalur disk (pilihan)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tBuka perangkat video bawaan"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tBuka berkas, tidak otomatis memulai pemutaran"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tMulai memutar berkas segera ketika pemutar diluncurkan"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tTutup pemutar setelah pemutaran (hanya bekerja ketika digunakan dengan /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tShutdown sistem operasi setelah pemutaran"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tMenempatkan sistem operasi dalam mode standby setelah pemutaran"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tHibernate sistem operasi setelah pemutaran"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tLog off setelah pemutaran"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tKunci workstation setelah pemutaran"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tMatikan monitor setelah pemutaran"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tBuka berkas selanjutnya dalam folder setelah pemutaran"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tMulai dalam mode layar penuh"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tMulai dalam mode minimized"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tGunakan instansi baru dari pemutar"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tTambahkan \"pathname\" ke daftar putar, dapat dikombinasikan dengan /open dan /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tAcak daftar putar"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tBuat asosiasi berkas untuk berkas video"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tBuat asosiasi berkas untuk berkas audio"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tBuat asosiasi berkas untuk berkas daftar putar"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tBuat asosiasi berkas untuk semua tipe berkas yang didukung"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tHapus semua asosiasi berkas"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tMulai memutar pada \"ms\" (= milidetik)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tMulai memutar pada posisi hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tSetel sebuah ukuran tetap jendela"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tMulai pemutar pada monitor N, dimana N dimulai dari 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tMulai menggunakan perender audio N, dimana N dimulai dari 1 (lihat pengaturan \"Output\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tMulai menggunakan prasetel shader \"Pr\""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\tTetapkan nama prasetel Geser&Pindai untuk digunakan"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tSatukan ulang ikon format"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tBuka MPC-HC pada latar belakang"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tMulai antarmuka web pada port yang ditentukan"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tTampilkan informasi debug di OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tMatikan pelapor kerusakan"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tGunakan MPC-HC sebagai slave"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tSetel indeks dari GPU yang digunakan untuk hardware decoding.\n\t\tHanya tersedia untuk CUVID and DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tKembalikan pengaturan bawaan"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tTampilkan bantuan untuk switch perintah baris"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Nilai dari skor subtitel yang akan terunduh otomatis. Nilai yang lebih tinggi berarti semakin cocok subtitel yang dapat digunakan, semakin rendah nilainya kemungkinan subtitel untuk cocok juga rendah, tetapi sesungguhnya tidak ada nilai yang benar-benar sempurna. Pilihlah yang sesuai bagi anda."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Tundaan Audio (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Ukuran bilah alat bawaan dalam piksel."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Gunakan bilah alat lawas bukan yang tervektorisasi yang baru."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Salin URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ar.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ar.strings.po
index 550256bbf..ad08a3480 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ar.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ar.strings.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Ahmad Abd-Elghany <tolpa1@gmail.com>, 2014
@@ -7,10 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-18 09:41+0000\n"
-"Last-Translator: Ahmad Abd-Elghany <tolpa1@gmail.com>\n"
-"Language-Team: Arabic (http://www.transifex.com/projects/p/mpc-hc/language/ar/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Arabic (http://www.transifex.com/mpc-hc/mpc-hc/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -37,10 +37,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "هل تريد حذف إعدادات ضبظ البرنامج؟ \n\nإذا كنت تنوي تثبيت البرنامج مرة أخرى، فلا يلزمك حذفها."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "ملف تثبيت البرنامج يعمل حالياً!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "هذه النسخة من البرنامج تتطلب معالج يدعم خاصية SSE.\n\nمعالج جهازك لايحمل هذه المتطلبات."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.be.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.be.strings.po
index 8d0d4201d..01a214946 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.be.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.be.strings.po
@@ -1,27 +1,28 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Yauhen Bugamol <haxycgm@gmail.com>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 08:49+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Belarusian (http://www.transifex.com/projects/p/mpc-hc/language/be/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-10-23 22:19+0000\n"
+"Last-Translator: Yauhen Bugamol <haxycgm@gmail.com>\n"
+"Language-Team: Belarusian (http://www.transifex.com/mpc-hc/mpc-hc/language/be/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: be\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Зараз будзе ўстаноўлена [name].\n\nРэкамендуецца закрыць усе прыкладанні перад працягам."
+msgstr "Зараз на ваш камп'ютар будзе ўсталявана праграма [name].\n\nПерш чым працягнуць, рэкамендуецца закрыць усе астатнія праграмы."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
-msgstr "[name] патрабуецца Windows XP Service Pack 3 або навей."
+msgstr "Для запуску [name] патрабуецца Windows XP SP3 або навейшая."
msgctxt "CustomMessages_comp_mpciconlib"
msgid "Icon Library"
@@ -33,23 +34,19 @@ msgstr "Пераклады"
msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
-msgstr "Ці хочаце таксама выдаліць налады MPC-HC?\n\nКалі вы збіраецеся зноў усталяваць MPC-HC, тады іх можна пакінуць."
-
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Праграма ўсталявання MPC-HC ужо працуе!"
+msgstr "Ці выдаліць налады MPC-HC?\n\nКалі вы збіраецеся ўсталяваць MPC-HC зноў, выдаляць іх не трэба."
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Гэтая будова MPC-HC вымагае працэсар, здольны выконваць інструкцыі SSE.\n\nВаш працэсар гэтага не ўмее."
+msgstr "Гэта зборка MPC-HC патрабуе працэсар, з падтрымкай SSE-інструкцый.\n\nВаш працэсар не адпавядае патрабаванням."
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Гэтая будова MPC-HC вымагае працэсар, здольны выконваць інструкцыі SSE2.\n\nВаш працэсар гэтага не ўмее."
+msgstr "Гэта зборка MPC-HC патрабуе працэсар, з падтрымкай SSE2-інструкцый.\n\nВаш працэсар не адпавядае патрабаванням."
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr ""
+msgstr "Наведаць нашу Wiki-старонку каб спампаваць выявы для панэлі навігацыі"
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
@@ -57,7 +54,7 @@ msgstr "Для ўсіх карыстальнікаў"
msgctxt "CustomMessages_tsk_CurrentUser"
msgid "For the current user only"
-msgstr "Толькі для дзейнага карыстальніка"
+msgstr "Толькі для гэтага карыстальніка"
msgctxt "CustomMessages_tsk_Other"
msgid "Other tasks:"
@@ -65,17 +62,17 @@ msgstr "Іншыя заданні:"
msgctxt "CustomMessages_tsk_ResetSettings"
msgid "Reset settings"
-msgstr "Вярнуць налады"
+msgstr "Скінуць налады"
msgctxt "CustomMessages_types_DefaultInstallation"
msgid "Default installation"
-msgstr "Перадвызначанае ўсталяванне"
+msgstr "Усталяванне па змаўчанні"
msgctxt "CustomMessages_types_CustomInstallation"
msgid "Custom installation"
-msgstr "Адмысловае ўсталяванне"
+msgstr "Адвольнае ўсталяванне"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
-msgstr "Спіс зменаў"
+msgstr "Праглядзець спіс зменаў"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.bn.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.bn.strings.po
index 648a82029..e8a0a38e4 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.bn.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.bn.strings.po
@@ -1,17 +1,19 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Mehzad Galib, 2014
+# Mehedi Hussain, 2014
# mehzad, 2014
-# mehzad, 2014
+# Underground78, 2014
# Underground78, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-09-07 09:10+0000\n"
-"Last-Translator: Underground78\n"
-"Language-Team: Bengali (http://www.transifex.com/projects/p/mpc-hc/language/bn/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Bengali (http://www.transifex.com/mpc-hc/mpc-hc/language/bn/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -24,7 +26,7 @@ msgstr "এর মাধ্যমে আপনার কম্পিউটার
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
-msgstr "[name] চালানোর জন্য Windows XP Service Pack 3 অথবা ঊর্ধ্বতন সংস্করণ প্রয়োজন।"
+msgstr "[NAME] চালানোর জন্য Windows XP Service Pack 3 অথবা ঊর্ধ্বতন সংস্করণ প্রয়োজন।"
msgctxt "CustomMessages_comp_mpciconlib"
msgid "Icon Library"
@@ -38,10 +40,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "আপনি কি MPC-HCএর সেটিংসমূহও মুছে ফেলতে চান?\n\nআপনার যদি পুনরায় MPC-HC ইনস্টল করার পরিকল্পনা থাকে, তাহলে এসব মুছে ফেলতে হবে না।"
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HCএর সেটআপ ইতিমধ্যে চলমান রয়েছে!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "MPC-HCএর এই নির্মাণটির জন্য SSE এক্সটেনশন সমর্থন করে এমন একটি CPUর প্রয়োজন।\n\nআপনার CPUর সেই কর্মক্ষমতা নেই।"
@@ -72,11 +70,11 @@ msgstr "সেটিংসমূহ পুনর্বিন্যাস"
msgctxt "CustomMessages_types_DefaultInstallation"
msgid "Default installation"
-msgstr "নির্ধারিত ইনস্টল প্রক্রিয়া"
+msgstr "ডিফল্ট ইনস্টল প্রক্রিয়া"
msgctxt "CustomMessages_types_CustomInstallation"
msgid "Custom installation"
-msgstr "নির্ধারণযোগ্য ইনস্টল প্রক্রিয়া"
+msgstr "ব্যক্তি-নির্ধারিত ইনস্টল প্রক্রিয়া"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.bs_BA.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.bs_BA.strings.po
new file mode 100644
index 000000000..6a1f78b53
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.bs_BA.strings.po
@@ -0,0 +1,79 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Samir Gutić <amicussamir@amicus.ba>, 2016
+# smajo burek <smajo@mail.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-04-29 17:30+0000\n"
+"Last-Translator: smajo burek <smajo@mail.com>\n"
+"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/mpc-hc/mpc-hc/language/bs_BA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bs_BA\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "Messages_WelcomeLabel2"
+msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
+msgstr "Ovo će instalirati [name] na vaš računar.\n\nPreporučljivo je da, prije nastavka, zatvorite sve ostale programe."
+
+msgctxt "Messages_WinVersionTooLowError"
+msgid "[name] requires Windows XP Service Pack 3 or newer to run."
+msgstr "[name] za pokretanje zahtijeva Windows XP Service Pack 3 ili noviji."
+
+msgctxt "CustomMessages_comp_mpciconlib"
+msgid "Icon Library"
+msgstr "Biblioteka Ikonica"
+
+msgctxt "CustomMessages_comp_mpcresources"
+msgid "Translations"
+msgstr "Prijevodi"
+
+msgctxt "CustomMessages_msg_DeleteSettings"
+msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
+msgstr "Da li želite izbrisati i MPC-HC podešenja?\n\nAko planirate ponovo instalirati MPC-HC onda ih ne trebate brisati."
+
+msgctxt "CustomMessages_msg_simd_sse"
+msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
+msgstr "Ova verzija MPC-HC zahtijeva CPU sa SSE podrškom.\n\nVaš CPU nema te mogućnosti."
+
+msgctxt "CustomMessages_msg_simd_sse2"
+msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
+msgstr "Ova verzija MPC-HC zahtijeva CPU sa SSE2 podrškom.\n\nVaš CPU nema te mogućnosti."
+
+msgctxt "CustomMessages_run_DownloadToolbarImages"
+msgid "Visit our Wiki page to download toolbar images"
+msgstr "Posjetite našu Wiki stranicu da preuzmete slike alatne trake"
+
+msgctxt "CustomMessages_tsk_AllUsers"
+msgid "For all users"
+msgstr "Za sve korisnike"
+
+msgctxt "CustomMessages_tsk_CurrentUser"
+msgid "For the current user only"
+msgstr "Samo za trenutnog korisnika"
+
+msgctxt "CustomMessages_tsk_Other"
+msgid "Other tasks:"
+msgstr "Drugi zadaci:"
+
+msgctxt "CustomMessages_tsk_ResetSettings"
+msgid "Reset settings"
+msgstr "Resetuj podešavanja"
+
+msgctxt "CustomMessages_types_DefaultInstallation"
+msgid "Default installation"
+msgstr "Podrazumijevana instalacija"
+
+msgctxt "CustomMessages_types_CustomInstallation"
+msgid "Custom installation"
+msgstr "Instalacija po želji"
+
+msgctxt "CustomMessages_ViewChangelog"
+msgid "View Changelog"
+msgstr "Pogledaj listu izmjena"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ca.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ca.strings.po
index 459844aea..d4f90b313 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ca.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ca.strings.po
@@ -1,18 +1,20 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
-# papu <papu@openmailbox.org>, 2014
-# papu <papu@openmailbox.org>, 2014
+# Adolfo Jayme-Barrientos, 2014
+# Adolfo Jayme-Barrientos, 2014
+# papu, 2014-2016
+# Roger <roger.espolet@gmail.com>, 2016
+# Roger <roger.espolet@gmail.com>, 2016
+# papu, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-09-14 21:20+0000\n"
-"Last-Translator: Adolfo Jayme Barrientos <fito@libreoffice.org>\n"
-"Language-Team: Catalan (http://www.transifex.com/projects/p/mpc-hc/language/ca/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-11-12 11:35+0000\n"
+"Last-Translator: Roger <roger.espolet@gmail.com>\n"
+"Language-Team: Catalan (http://www.transifex.com/mpc-hc/mpc-hc/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -21,11 +23,11 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Aquest auxiliar instal·larà el [name] al vostre ordinador\n\nEs recomana tancar totes les aplicacions abans de continuar."
+msgstr "Aquest auxiliar instal·larà el [name] al vostre ordinador.\n\nSe recomana tancar totes les aplicacions abans de continuar."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
-msgstr "[name] requereix Windows XP Service Pack 3 o superior per funcionar."
+msgstr "[name] requereix Windows XP Service Pack 3 o superior perquè funcioni."
msgctxt "CustomMessages_comp_mpciconlib"
msgid "Icon Library"
@@ -37,27 +39,23 @@ msgstr "Traduccions"
msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
-msgstr "Voleu suprimir les preferències del MPC-HC?\n\nSi planegeu instal·lar-ho un altre cop no cal eliminar-les."
-
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "La instal·lació del MPC-HC ja s’està executant."
+msgstr "Voleu suprimir les preferències de l'MPC-HC?\n\nSi planegeu tornar-lo a instal·lar no cal que les elimineu."
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Aquesta versió de MPC-HC requereix una CPU amb suport d'extensions SSE.\n\nLa teva CPU no cumpleix aquestes característiques."
+msgstr "Aquesta versió de l'MPC-HC necessita una CPU amb suport d'extensions SSE.\n\nLa vostra CPU no compleix aquesta característica."
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Aquesta versió de MPC-HC requereix una CPU amb suport d'extensions SSE2.\n\nLa teva CPU no cumpleix aquestes característiques."
+msgstr "Aquesta versió de l'MPC-HC requereix una CPU amb suport d'extensions SSE2.\n\nLa vostra CPU no compleix aquesta característica."
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr "Visita la nostra pàgina de Wiki per descarregar imatges per la barra d'eines"
+msgstr "Visita la nostra pàgina Wiki per descarregar imatges de la barra d'eines"
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
-msgstr "Per tots els usuaris"
+msgstr "Per a tots els usuaris"
msgctxt "CustomMessages_tsk_CurrentUser"
msgid "For the current user only"
@@ -69,7 +67,7 @@ msgstr "Altres tasques:"
msgctxt "CustomMessages_tsk_ResetSettings"
msgid "Reset settings"
-msgstr "Reiniciar preferències"
+msgstr "Reinicia la configuració"
msgctxt "CustomMessages_types_DefaultInstallation"
msgid "Default installation"
@@ -81,5 +79,5 @@ msgstr "Instal·lació personalitzada"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
-msgstr "Veure registre de canvis"
+msgstr "Visualitza el Registre de canvis"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.cs.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.cs.strings.po
index 9674580e2..f4371a801 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.cs.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.cs.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# khagaroth, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-17 16:30+0000\n"
-"Last-Translator: khagaroth\n"
-"Language-Team: Czech (http://www.transifex.com/projects/p/mpc-hc/language/cs/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Czech (http://www.transifex.com/mpc-hc/mpc-hc/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Chcete smazat také nastavení MPC-HC?\n\nPokud plánujete MPC-HC znovu nainstalovat, mazat je nemusíte."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Instalační program MPC-HC je již spuštěn!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Toto sestavení MPC-HC vyžaduje procesor s podporou rozšíření SSE.\n\nVáš procesor tato rozšíření nepodporuje."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.da.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.da.strings.po
new file mode 100644
index 000000000..175337218
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.da.strings.po
@@ -0,0 +1,80 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Jatyrael <cbf_x@hotmail.com>, 2014
+# NemoHJ <nemohj@gmail.com>, 2016
+# scootergrisen, 2015-2016
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-11-30 23:47+0000\n"
+"Last-Translator: scootergrisen\n"
+"Language-Team: Danish (http://www.transifex.com/mpc-hc/mpc-hc/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "Messages_WelcomeLabel2"
+msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
+msgstr "Dette vil installere [name] på din computer.\n\nDet anbefales, at du lukker alle andre programmer, inden du fortsætter."
+
+msgctxt "Messages_WinVersionTooLowError"
+msgid "[name] requires Windows XP Service Pack 3 or newer to run."
+msgstr "[name] kræver Windows XP Service Pack 3 eller nyere for at køre."
+
+msgctxt "CustomMessages_comp_mpciconlib"
+msgid "Icon Library"
+msgstr "Ikon-bibliotek"
+
+msgctxt "CustomMessages_comp_mpcresources"
+msgid "Translations"
+msgstr "Oversættelser"
+
+msgctxt "CustomMessages_msg_DeleteSettings"
+msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
+msgstr "Vil du også slette MPC-HC indstillinger?\n\nHvis du har tænkt dig at installere MPC-HC igen, så behøves du ikke slette dem."
+
+msgctxt "CustomMessages_msg_simd_sse"
+msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
+msgstr "Denne version af MPC-HC kræver en CPU der understøtter SSE CPU-anvisninger.\n\nDin CPU understøtter det ikke."
+
+msgctxt "CustomMessages_msg_simd_sse2"
+msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
+msgstr "Denne version af MPC-HC kræver en CPU der understøtter SSE2 CPU-anvisninger.\n\nDin CPU understøtter det ikke."
+
+msgctxt "CustomMessages_run_DownloadToolbarImages"
+msgid "Visit our Wiki page to download toolbar images"
+msgstr "Besøg vores wiki-side for at downloade værktøjslinjebilleder"
+
+msgctxt "CustomMessages_tsk_AllUsers"
+msgid "For all users"
+msgstr "For alle brugere"
+
+msgctxt "CustomMessages_tsk_CurrentUser"
+msgid "For the current user only"
+msgstr "Kun for denne bruger"
+
+msgctxt "CustomMessages_tsk_Other"
+msgid "Other tasks:"
+msgstr "Andre opgaver:"
+
+msgctxt "CustomMessages_tsk_ResetSettings"
+msgid "Reset settings"
+msgstr "Nulstil indstillinger"
+
+msgctxt "CustomMessages_types_DefaultInstallation"
+msgid "Default installation"
+msgstr "Standardinstallation"
+
+msgctxt "CustomMessages_types_CustomInstallation"
+msgid "Custom installation"
+msgstr "Brugerdefineret installation"
+
+msgctxt "CustomMessages_ViewChangelog"
+msgid "View Changelog"
+msgstr "Vis ændringslog"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.de.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.de.strings.po
index 0bbdb6cf2..aa1b1e5bb 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.de.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.de.strings.po
@@ -1,15 +1,17 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Gaugg_Markus, 2014
+# Gaugg_Markus, 2014
+# Luan <luanmail@gmx.net>, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-08-27 11:57+0000\n"
-"Last-Translator: Gaugg_Markus\n"
-"Language-Team: German (http://www.transifex.com/projects/p/mpc-hc/language/de/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-10-30 11:22+0000\n"
+"Last-Translator: Luan <luanmail@gmx.net>\n"
+"Language-Team: German (http://www.transifex.com/mpc-hc/mpc-hc/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,39 +20,35 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Dieses Programm installiert [name] auf Ihrem Computer.\n\nEs wird empfohlen, alle laufenden Programme zu beenden, bevor Sie mit der Installation fortfahren."
+msgstr "Hiermit wird der [name] installiert. Bitte alle anderen Anwendungen schließen, bevor Sie mit der Installation fortfahren."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
-msgstr "[name] benötigt Windows XP Service Pack 3 oder höher."
+msgstr "Mindestvoraussetzung ist Windows XP mit Service Pack 3."
msgctxt "CustomMessages_comp_mpciconlib"
msgid "Icon Library"
-msgstr "Dateisymbole für verknüpfte Mediendateien"
+msgstr "Icon-Bibliothek"
msgctxt "CustomMessages_comp_mpcresources"
msgid "Translations"
-msgstr "Sprachdateien (darunter Deutsch)"
+msgstr "Übersetzungen (u.a. deutsch)"
msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
-msgstr "Wollen Sie auch die Programmeinstellungen löschen?\n\nWenn Sie den MPC-HC wieder installieren möchten, dann müssen Sie diese nicht unbedingt löschen."
-
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC Setup wird bereits ausgeführt!"
+msgstr "Bei Neuinstallation des MPC-HC können verbliebene Einstellungen problemlos übernommen werden.\n\nEinstellungen auch entfernen?"
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Dieses MPC-HC-Build benötigt einen Prozessor mit SSE-Unterstützung.\n\nIhr Prozessor besitzt nicht diese Eigenschaft."
+msgstr "Die verwendete CPU muss SSE unterstützen."
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Dieses MPC-HC-Build benötigt einen Prozessor mit SSE2-Unterstützung.\n\nIhr Prozessor besitzt nicht diese Eigenschaft."
+msgstr "Die verwendete CPU muss SSE2 unterstützen."
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr "Toolbar-Bilder von der Wiki-Seite herunterladen"
+msgstr "Wiki für Toolbar-Bilder öffnen"
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
@@ -58,19 +56,19 @@ msgstr "Für alle Benutzer"
msgctxt "CustomMessages_tsk_CurrentUser"
msgid "For the current user only"
-msgstr "Nur für den aktuellen Benutzer"
+msgstr "Für den aktuellen Benutzer"
msgctxt "CustomMessages_tsk_Other"
msgid "Other tasks:"
-msgstr "Andere Aufgaben:"
+msgstr "Weitere Aufgaben:"
msgctxt "CustomMessages_tsk_ResetSettings"
msgid "Reset settings"
-msgstr "Programmeinstellungen zurücksetzen"
+msgstr "Einstellungen zurücksetzen"
msgctxt "CustomMessages_types_DefaultInstallation"
msgid "Default installation"
-msgstr "Standard Installation"
+msgstr "Standard-Installation"
msgctxt "CustomMessages_types_CustomInstallation"
msgid "Custom installation"
@@ -78,5 +76,5 @@ msgstr "Benutzerdefinierte Installation"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
-msgstr "Änderungsprotokoll zeigen"
+msgstr "Changelog anzeigen"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.el.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.el.strings.po
index 213363722..5e15805c2 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.el.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.el.strings.po
@@ -1,16 +1,17 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# geogeo.gr <admin@geogeo.gr>, 2013-2014
+# geogeo.gr <geogeo.gr@gmail.com>, 2013-2014
# firespin <dartworldgr@hotmail.com>, 2014
+# geogeo.gr <geogeo.gr@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-08 15:01+0000\n"
-"Last-Translator: firespin <dartworldgr@hotmail.com>\n"
-"Language-Team: Greek (http://www.transifex.com/projects/p/mpc-hc/language/el/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-10-20 10:53+0000\n"
+"Last-Translator: geogeo.gr <geogeo.gr@gmail.com>\n"
+"Language-Team: Greek (http://www.transifex.com/mpc-hc/mpc-hc/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -37,10 +38,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Θέλετε να διαγράψετε τις ρυθμίσεις του MPC-HC;\n\nΑν σκοπεύετε να εγκαταστήσετε το MPC-HC ξανά, τότε δεν χρειάζεται να τις διαγράψετε."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Η εγκατάσταση του MPC-HC εκτελείται ήδη!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Αυτή η έκδοση του MPC-HC απαιτεί επεξεργαστή με υποστήριξη SSE.\n\nΟ επεξεργαστής σας δεν έχει αυτές τις δυνατότητες."
@@ -79,5 +76,5 @@ msgstr "Προσαρμοσμένη εγκατάσταση"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
-msgstr "Εμφάνιση λίστας αλλαγών"
+msgstr "Εμφάνιση μητρώου αλλαγών"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.en_GB.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.en_GB.strings.po
index acb895d95..fa76de98a 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.en_GB.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.en_GB.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Sir_Burpalot <doctor.z01db3rg@gmail.com>, 2013-2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-23 11:51+0000\n"
-"Last-Translator: Sir_Burpalot <doctor.z01db3rg@gmail.com>\n"
-"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/mpc-hc/language/en_GB/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: English (United Kingdom) (http://www.transifex.com/mpc-hc/mpc-hc/language/en_GB/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC setup is already running!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.es.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.es.strings.po
index 14e9f00bb..b4ba8a077 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.es.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.es.strings.po
@@ -1,15 +1,18 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Adolfo Jayme Barrientos <fito@libreoffice.org>, 2014
+# Adolfo Jayme-Barrientos, 2014
+# Adolfo Jayme-Barrientos, 2016
+# Adolfo Jayme-Barrientos, 2014
+# strel, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-08 16:12+0000\n"
-"Last-Translator: Adolfo Jayme Barrientos <fito@libreoffice.org>\n"
-"Language-Team: Spanish (http://www.transifex.com/projects/p/mpc-hc/language/es/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-05-03 05:23+0000\n"
+"Last-Translator: strel\n"
+"Language-Team: Spanish (http://www.transifex.com/mpc-hc/mpc-hc/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,7 +21,7 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Este programa instalará [name] en el equipo.\n\nSe recomienda que cierre el resto de las aplicaciones antes de continuar."
+msgstr "Esto instalará [name] en el equipo.\n\nSe recomienda que cierre el resto de las aplicaciones antes de continuar."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
@@ -36,21 +39,17 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "¿Quiere eliminar también las preferencias de MPC-HC?\n\nSi planea instalar de nuevo MPC-HC no necesita eliminarlas."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "La instalación de MPC-HC ya está en ejecución."
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Esta versión de MPC-HC requiere una CPU compatible con extensiones SSE.\n\nSu CPU carece de esta característica."
+msgstr "Esta versión de MPC-HC requiere una CPU que soporte instrucciones SSE.\n\nSu CPU carece de esta característica."
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Esta versión de MPC-HC requiere una CPU compatible con extensiones SSE2.\n\nSu CPU carece de esta característica."
+msgstr "Esta versión de MPC-HC requiere una CPU que soporte instrucciones SSE2.\n\nSu CPU carece de esta característica."
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr "Visite nuestra página de wiki para descargar imágenes de la barra de herramientas"
+msgstr "Visite nuestra página wiki para descargar imágenes de barra de herramientas"
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
@@ -58,7 +57,7 @@ msgstr "Para todos los usuarios"
msgctxt "CustomMessages_tsk_CurrentUser"
msgid "For the current user only"
-msgstr "Solo para el usuario actual"
+msgstr "Sólo para el usuario actual"
msgctxt "CustomMessages_tsk_Other"
msgid "Other tasks:"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.eu.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.eu.strings.po
index 5e4f6538e..5fe60068d 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.eu.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.eu.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Xabier Aramendi <azpidatziak@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 17:12+0000\n"
-"Last-Translator: Xabier Aramendi <azpidatziak@gmail.com>\n"
-"Language-Team: Basque (http://www.transifex.com/projects/p/mpc-hc/language/eu/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Basque (http://www.transifex.com/mpc-hc/mpc-hc/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "MPC-HC ezarpenak kentzea ere nahi dituzu?\n\nMPC-HC berriro ezartzeko asmoa baduzu ez dituzu ezabatu behar."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC ezarpena jadanik ekinean dago!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "MPC-HC eraiketa honek SSE hedapen sostengua duen CPU bat behar du.\n\nZure CPU-ak ez ditu gaitasun hauek."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.fi.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.fi.strings.po
new file mode 100644
index 000000000..d97c747ac
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.fi.strings.po
@@ -0,0 +1,79 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Matti Ylönen <maanylon@gmail.com>, 2016
+# Raimo K. Talvio, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-01-27 20:29+0000\n"
+"Last-Translator: Matti Ylönen <maanylon@gmail.com>\n"
+"Language-Team: Finnish (http://www.transifex.com/mpc-hc/mpc-hc/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "Messages_WelcomeLabel2"
+msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
+msgstr "Tämä asentaa [name] tietokoneellesi.\n\nOn suositeltavaa, että suljet kaikki muut ohjelmat ennen kuin jatkat."
+
+msgctxt "Messages_WinVersionTooLowError"
+msgid "[name] requires Windows XP Service Pack 3 or newer to run."
+msgstr "[name] vaatii toimiakseen Windows XP Service Pack 3 tai uudemman."
+
+msgctxt "CustomMessages_comp_mpciconlib"
+msgid "Icon Library"
+msgstr "Ikonikirjasto"
+
+msgctxt "CustomMessages_comp_mpcresources"
+msgid "Translations"
+msgstr "Käännökset"
+
+msgctxt "CustomMessages_msg_DeleteSettings"
+msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
+msgstr "Haluatko poistaa myöskin MPC-HC:n asetukset?\n\nJos aiot asentaa MPC-HC:n uudelleen, niitä ei tarvitse poistaa."
+
+msgctxt "CustomMessages_msg_simd_sse"
+msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
+msgstr "MPC-HC:n tämä versio edellyttää CPU:lta SSE-laajennusten tukea.\n\nProsessorissasi ei ole niitä ominaisuuksia."
+
+msgctxt "CustomMessages_msg_simd_sse2"
+msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
+msgstr "MPC-HC:n tämä versio edellyttää CPU:lta SSE2-laajennusten tukea.\n\nProsessorissasi ei ole niitä ominaisuuksia."
+
+msgctxt "CustomMessages_run_DownloadToolbarImages"
+msgid "Visit our Wiki page to download toolbar images"
+msgstr "Vieraile Wiki-sivustollamme ladataksesi työkalupalkin kuvat"
+
+msgctxt "CustomMessages_tsk_AllUsers"
+msgid "For all users"
+msgstr "Kaikille käyttäjille"
+
+msgctxt "CustomMessages_tsk_CurrentUser"
+msgid "For the current user only"
+msgstr "Vain nykyiselle käyttäjälle"
+
+msgctxt "CustomMessages_tsk_Other"
+msgid "Other tasks:"
+msgstr "Muut tehtävät:"
+
+msgctxt "CustomMessages_tsk_ResetSettings"
+msgid "Reset settings"
+msgstr "Palauta asetukset"
+
+msgctxt "CustomMessages_types_DefaultInstallation"
+msgid "Default installation"
+msgstr "Oletusasennus"
+
+msgctxt "CustomMessages_types_CustomInstallation"
+msgid "Custom installation"
+msgstr "Mukautettu asennus"
+
+msgctxt "CustomMessages_ViewChangelog"
+msgid "View Changelog"
+msgstr "Näytä muutosloki"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.fr.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.fr.strings.po
index 30f5f8286..db06530dd 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.fr.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.fr.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Underground78, 2013-2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-09 08:31+0000\n"
-"Last-Translator: Underground78\n"
-"Language-Team: French (http://www.transifex.com/projects/p/mpc-hc/language/fr/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: French (http://www.transifex.com/mpc-hc/mpc-hc/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Souhaitez-vous également supprimer les paramètres de MPC-HC ?\n\nSi vous prévoyez de réinstaller MPC-HC, il est conseillé de ne pas les supprimer."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "L'installation de MPC-HC est déjà en cours d'exécution !"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Cette version de MPC-HC nécessite un CPU avec support des instructions SSE.\n\nVotre processeur ne supporte pas cette fonctionnalité."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.gl.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.gl.strings.po
index 6a30c0d1c..ad2638b14 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.gl.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.gl.strings.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Rubén <feiticeiro2010@hotmail.es>, 2014
-# Toño Calo <enfeitizador@gmail.com>, 2014
+# Toño Calo <enfeitizador@gmail.com>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-10-02 00:20+0000\n"
-"Last-Translator: Toño Calo <enfeitizador@gmail.com>\n"
-"Language-Team: Galician (http://www.transifex.com/projects/p/mpc-hc/language/gl/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Galician (http://www.transifex.com/mpc-hc/mpc-hc/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -19,7 +19,7 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Isto intalará [name] no teu ordenador.\n\nRecomendase que peches todas as aplicacións antes de seguir."
+msgstr "Isto instalará [name] no teu ordenador.\n\nRecoméndase que peches todas as aplicacións antes de seguir."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
@@ -35,19 +35,15 @@ msgstr "Traducións"
msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
-msgstr " Tamén queres eliminar os axustes de MPC-HC?\n\nSe te plantexas instalar MPC-HC outra vez entón non o tes que eliminar."
-
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "O instalador de MPC-HC xa está correndo!"
+msgstr "Ques eliminar tamén os axustes de MPC-HC?\n\nSe pensas instalar MPC-HC de novo entón non o tes que eliminalos."
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Esta versión de MPC-HC require unha CPU con soporte para a extensión SSE .\n\nO seu CPU non ten estas capacidades."
+msgstr "Esta versión de MPC-HC require unha CPU con soporte para a extensión SSE .\n\nA súa CPU non ten estas capacidades."
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Esta versión de MPC-HC require unha CPU con soporte para a extensión SSE2 .\n\nO seu CPU non ten estas capacidades."
+msgstr "Esta versión de MPC-HC require unha CPU con soporte para a extensión SSE2 .\n\nA súa CPU non ten estas capacidades."
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.he.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.he.strings.po
index be6f86272..3caf46109 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.he.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.he.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Superb, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 08:49+0000\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Hebrew (http://www.transifex.com/projects/p/mpc-hc/language/he/)\n"
+"Language-Team: Hebrew (http://www.transifex.com/mpc-hc/mpc-hc/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "האם ברצונך גם למחוק את ההגדרות של MPC-HC?\n\nאם אתה מתכנן להתקין את MPC-HC בשנית, אינך חייב להסירן."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "ההתקנה של MPC-HC כבר רצה!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "גרסה זו של MPC-HC דורשת מעבד עם תמיכה בהרחבת SSE.\n\nהמעבד שברשותך אינו תומך בכך."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hr.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hr.strings.po
index f6f1dacda..e177f0acb 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hr.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hr.strings.po
@@ -1,17 +1,17 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# schop <aprcel00@fesb.hr>, 2014
# iivana24 <iivana24@gmail.com>, 2014
-# streger <stjepan.treger@gmail.com>, 2014
+# streger <stjepan.treger@gmail.com>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-09-08 12:31+0000\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-10-21 10:02+0000\n"
"Last-Translator: streger <stjepan.treger@gmail.com>\n"
-"Language-Team: Croatian (http://www.transifex.com/projects/p/mpc-hc/language/hr/)\n"
+"Language-Team: Croatian (http://www.transifex.com/mpc-hc/mpc-hc/language/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -38,10 +38,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Želite li obrisati postavke od MPC-HC?\n\nAko planirate ponovno instalirati MPC-HC, ne morate ih brisati."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC instalacija je već pokrenuta!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Ova verzija MPC-HC zahtijeva procesor sa SSE podrškom.\n\nVaš procesor nema te mogućnosti."
@@ -72,7 +68,7 @@ msgstr "Vrati na početne postavke programa"
msgctxt "CustomMessages_types_DefaultInstallation"
msgid "Default installation"
-msgstr "Standarnda instalacija"
+msgstr "Standardna instalacija"
msgctxt "CustomMessages_types_CustomInstallation"
msgid "Custom installation"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hu.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hu.strings.po
index 1095eca19..d9b5c75da 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hu.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hu.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Máté <lang.mate@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-08-07 13:10+0000\n"
-"Last-Translator: Máté <lang.mate@gmail.com>\n"
-"Language-Team: Hungarian (http://www.transifex.com/projects/p/mpc-hc/language/hu/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Hungarian (http://www.transifex.com/mpc-hc/mpc-hc/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,7 +18,7 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Ez telepíteni fogja a(z) [name]-t a számítógépére.\nAjánlott, hogy minden más alkalmazást zárjon be a folytatás előtt."
+msgstr "Ez telepíteni fogja a(z) [name]-t a számítógépére.\n\nAjánlott, hogy minden más alkalmazást zárjon be a folytatás előtt."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Az MPC-HC beállításokat is törölni szeretné?\n\nHa azt tervezi, hogy újratelepíti az MPC-HC-t, akkor nem kell törölnie őket."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Az MPC-HC telepítő már fut!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Az MPC-HC jelen változatához SSE támogatással bíró CPU-ra van szüksége.\n\nAz ön CPU-ja nem rendelkezik ilyen támogatással."
@@ -74,7 +70,7 @@ msgstr "Szokásos telepítés"
msgctxt "CustomMessages_types_CustomInstallation"
msgid "Custom installation"
-msgstr "Egyedi telepítés"
+msgstr "Egyéni telepítés"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hy.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hy.strings.po
index 8e4ad2747..dfd084bcd 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hy.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.hy.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Hrant Ohanyan <h.ohanyan@haysoft.org>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 08:49+0000\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-05-24 15:44+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Armenian (http://www.transifex.com/projects/p/mpc-hc/language/hy/)\n"
+"Language-Team: Armenian (http://www.transifex.com/mpc-hc/mpc-hc/language/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Ջնջե՞լ MPC-HC-ի կարգավորումները։\n\nԵթե նախատեսում եք վերատեղադրել MPC-HC, ապա պետք է չէ դրանք ջնջել։."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC-ի տեղակայիչը արդեն բացված է!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "MPC-HC-ի այս տարբերակը պահանջում է CPU՝ SSE-ի աջակցմամբ։\n\nՁեր CPU-ն այն չի աջակցում։"
@@ -50,7 +46,7 @@ msgstr "MPC-HC-ի այս տարբերակը պահանջում է CPU՝ SSE2-ի
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr ""
+msgstr "Այցելեք մեր Wiki էջը՝ ներբեռնելու համար գործիքագոտու պատկերներ"
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
@@ -58,7 +54,7 @@ msgstr "Բոլորի համար"
msgctxt "CustomMessages_tsk_CurrentUser"
msgid "For the current user only"
-msgstr "Միայն ձեզ համար"
+msgstr "Միայն ընթացիկ օգտվողի համար"
msgctxt "CustomMessages_tsk_Other"
msgid "Other tasks:"
@@ -66,11 +62,11 @@ msgstr "Լրացուցիչ."
msgctxt "CustomMessages_tsk_ResetSettings"
msgid "Reset settings"
-msgstr "Ետարկել կարգավորումները"
+msgstr "Վերակայել կարգավորումները"
msgctxt "CustomMessages_types_DefaultInstallation"
msgid "Default installation"
-msgstr "Տեղադրել ըստ ծրագրայինի"
+msgstr "Տեղադրել ըստ լռելյայն"
msgctxt "CustomMessages_types_CustomInstallation"
msgid "Custom installation"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.id.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.id.strings.po
new file mode 100644
index 000000000..ca24f1499
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.id.strings.po
@@ -0,0 +1,81 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Hatta.z, 2014
+# yoga.mardia <made.yoga12@gmail.com>, 2014
+# Reza Septyan .R. <ainofuyuumI@outlook.com>, 2014
+# zk, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-08-02 13:18+0000\n"
+"Last-Translator: zk\n"
+"Language-Team: Indonesian (http://www.transifex.com/mpc-hc/mpc-hc/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "Messages_WelcomeLabel2"
+msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
+msgstr "Ini akan memasang [name] di komputer Anda.\n\nSangat disarankan untuk menutup semua aplikasi lain sebelum melanjutkan."
+
+msgctxt "Messages_WinVersionTooLowError"
+msgid "[name] requires Windows XP Service Pack 3 or newer to run."
+msgstr "[name] membutuhkan Windows XP Service Pack 3 atau yang lebih baru agar bisa dijalankan."
+
+msgctxt "CustomMessages_comp_mpciconlib"
+msgid "Icon Library"
+msgstr "Pustaka Ikon"
+
+msgctxt "CustomMessages_comp_mpcresources"
+msgid "Translations"
+msgstr "Terjemahan"
+
+msgctxt "CustomMessages_msg_DeleteSettings"
+msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
+msgstr "Apakah Anda juga ingin menghapus pengaturan MPC-HC?\n\nJika Anda berencana untuk memasang MPC-HC lagi maka Anda tidak perlu menghapusnya."
+
+msgctxt "CustomMessages_msg_simd_sse"
+msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
+msgstr "Versi MPC-HC ini membutuhkan CPU dengan dukungan ekstensi SSE.\n\nCPU Anda tidak memiliki kemampuan tersebut."
+
+msgctxt "CustomMessages_msg_simd_sse2"
+msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
+msgstr "Versi MPC-HC ini membutuhkan CPU dengan dukungan ekstensi SSE2.\n\nCPU Anda tidak memiliki kemampuan tersebut."
+
+msgctxt "CustomMessages_run_DownloadToolbarImages"
+msgid "Visit our Wiki page to download toolbar images"
+msgstr "Kunjungi halaman Wiki kami untuk mengunduh gambar bilah alat"
+
+msgctxt "CustomMessages_tsk_AllUsers"
+msgid "For all users"
+msgstr "Untuk semua pengguna"
+
+msgctxt "CustomMessages_tsk_CurrentUser"
+msgid "For the current user only"
+msgstr "Hanya untuk pengguna ini saja"
+
+msgctxt "CustomMessages_tsk_Other"
+msgid "Other tasks:"
+msgstr "Tugas lain:"
+
+msgctxt "CustomMessages_tsk_ResetSettings"
+msgid "Reset settings"
+msgstr "Setel ulang pengaturan"
+
+msgctxt "CustomMessages_types_DefaultInstallation"
+msgid "Default installation"
+msgstr "Pemasangan bawaan"
+
+msgctxt "CustomMessages_types_CustomInstallation"
+msgid "Custom installation"
+msgstr "Pemasangan ubahsuai"
+
+msgctxt "CustomMessages_ViewChangelog"
+msgid "View Changelog"
+msgstr "Lihat Catatan Perubahan"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.it.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.it.strings.po
index 38f8c5732..1522621cb 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.it.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.it.strings.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Gabrix <gabrixs@outlook.com>, 2014
+# Gabrix <inactive+Gabrix@transifex.com>, 2014
# Kiba_No_Ou <kiba.no.michi@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-09-14 00:31+0000\n"
-"Last-Translator: Gabrix <gabrixs@outlook.com>\n"
-"Language-Team: Italian (http://www.transifex.com/projects/p/mpc-hc/language/it/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Italian (http://www.transifex.com/mpc-hc/mpc-hc/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -19,7 +19,7 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Questo installerà [name] sul tuo computer.\nE' consigliato chiudere tutte le altre applicazioni prima di continuare."
+msgstr "Questo installerà [name] sul tuo computer.\n\nE' consigliato chiudere tutte le altre applicazioni prima di continuare."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
@@ -37,10 +37,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Vuoi eliminare anche le impostazioni di MPC-HC?\n\nSe pensi di reinstallare MPC-HC in seguito non dovresti eliminarle."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "L'installazione di MPC-HC è già in corso!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Questa build di MPC-HC richiede una CPU con il supporto alle estensioni SSE.\n\nLa tua CPU non dispone di questa caratteristica."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ja.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ja.strings.po
index 37294a80f..267997b46 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ja.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ja.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# ever_green, 2014
+# ever_green, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-09-26 10:30+0000\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-08-23 05:11+0000\n"
"Last-Translator: ever_green\n"
-"Language-Team: Japanese (http://www.transifex.com/projects/p/mpc-hc/language/ja/)\n"
+"Language-Team: Japanese (http://www.transifex.com/mpc-hc/mpc-hc/language/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,11 +18,11 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "このプログラムはあなたのコンピュータ上に [name] をインストールします。\n\nセットアップを続行する前に他のすべてのアプリケーションを閉じることが推奨されます。"
+msgstr "このプログラムはご使用のコンピュータ上に [name] をインストールします。\n\nセットアップを続行する前に他のすべてのアプリケーションを閉じることを推奨します。"
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
-msgstr "[name] を実行する為には Windows XP Service Pack 3 以降が必要です。"
+msgstr "[name] を実行するためには Windows XP Service Pack 3 以降が必要です。"
msgctxt "CustomMessages_comp_mpciconlib"
msgid "Icon Library"
@@ -36,21 +36,17 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "MPC-HC の設定を削除してもよろしいですか?\n\nMPC-HC を再度インストールする場合、設定を削除する必要はありません。"
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC のセットアップは既に実行されています!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "このバージョンの MPC-HC には CPU の SSE 拡張サポートが必要です。\n\nお使いの CPU はこれらの機能を満たしていません。"
+msgstr "MPC-HC のこのビルドには SSE 拡張機能をサポートする CPU が必要です。\n\nご使用の CPU はこれらの機能を備えていません。"
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "このバージョンの MPC-HC には CPU の SSE2 拡張サポートが必要です。\n\nお使いの CPU はこれらの機能を満たしていません。"
+msgstr "MPC-HC のこのビルドには SSE2 拡張機能をサポートする CPU が必要です。\n\nご使用の CPU はこれらの機能を備えていません。"
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr "Wiki ページに移動してツールバーの画像をダウンロードする"
+msgstr "Wiki ページに移動してツール バーの画像をダウンロードする"
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
@@ -62,7 +58,7 @@ msgstr "現在実行しているユーザーにのみインストールする"
msgctxt "CustomMessages_tsk_Other"
msgid "Other tasks:"
-msgstr "他のタスク:"
+msgstr "その他のタスク:"
msgctxt "CustomMessages_tsk_ResetSettings"
msgid "Reset settings"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ko.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ko.strings.po
index 8704b7964..bb7e545d2 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ko.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ko.strings.po
@@ -1,14 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Level ASMer <zx132435@naver.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 08:49+0000\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Korean (http://www.transifex.com/projects/p/mpc-hc/language/ko/)\n"
+"Language-Team: Korean (http://www.transifex.com/mpc-hc/mpc-hc/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -17,11 +18,11 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "이 설치프로그램은 [name] 를(을) 당신의 컴퓨터에 설치합니다.\n\n설치를 계속하기 전에 다른 모든 프로그램을 종료하는 것을 권장합니다."
+msgstr "이것은 [name] 를(을) 당신의 컴퓨터에 설치합니다.\n\n설치를 계속하기 전에 다른 모든 프로그램을 종료하는 것을 권장합니다."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
-msgstr "[name] 는(은) Windows XP Service Pack 3 또는 그 이상의 버전에서만 설치할 수 있습니다."
+msgstr "[name] 는(은) Windows XP Service Pack 3 또는 그 이상의 버전에서만 설치할 수 있습니다."
msgctxt "CustomMessages_comp_mpciconlib"
msgid "Icon Library"
@@ -33,11 +34,7 @@ msgstr "번역"
msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
-msgstr "MPC-HC 의 설정도 삭제하시겠습니까?\n\nMPC-HC 를 다시 설치할 계획이라면 설정들을 삭제할 필요가 없습니다."
-
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC 설치프로그램이 이미 실행중입니다!"
+msgstr "MPC-HC 의 설정도 삭제 하시겠습니까?\n\nMPC-HC 를 다시 설치할 계획이라면 설정들을 삭제할 필요가 없습니다."
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
@@ -49,7 +46,7 @@ msgstr "이 버전의 MPC-HC 는 SSE2 기술을 지원하는 CPU가 필요합니
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr ""
+msgstr "툴바 이미지들을 다운로드하기 위해 위키 페이지로 방문."
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
@@ -73,7 +70,7 @@ msgstr "기본 설치"
msgctxt "CustomMessages_types_CustomInstallation"
msgid "Custom installation"
-msgstr "사용자정의 설치"
+msgstr "사용자 정의 설치"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.lt.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.lt.strings.po
new file mode 100644
index 000000000..99da6afa1
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.lt.strings.po
@@ -0,0 +1,79 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# linasmi <linasmi@mail.ru>, 2014-2015
+# Linas Tamašauskas, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-09-11 09:07+0000\n"
+"Last-Translator: linasmi <linasmi@mail.ru>\n"
+"Language-Team: Lithuanian (http://www.transifex.com/mpc-hc/mpc-hc/language/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "Messages_WelcomeLabel2"
+msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
+msgstr "Ši programa įdiegs [name] į jūsų kompiuterį.\n\nRekomenduojama išjungti visas kitas programas, prieš pradedant diegimą."
+
+msgctxt "Messages_WinVersionTooLowError"
+msgid "[name] requires Windows XP Service Pack 3 or newer to run."
+msgstr "[name] veikimui reikalingas Windows XP su 3-čiu pakeitimų paketu arba naujesne versija."
+
+msgctxt "CustomMessages_comp_mpciconlib"
+msgid "Icon Library"
+msgstr "Piktogramų biblioteka"
+
+msgctxt "CustomMessages_comp_mpcresources"
+msgid "Translations"
+msgstr "Vertimai"
+
+msgctxt "CustomMessages_msg_DeleteSettings"
+msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
+msgstr "Ar norite taip pat ištrinti MPC-HC nuostatas?\n\nJei planuojate vėl diegti MPC-HC, tada jų trinti nebūtina."
+
+msgctxt "CustomMessages_msg_simd_sse"
+msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
+msgstr "Šiai MPC-HC versijai reikalingas centrinis procesorius su SSE plėtinio palaikymu.\n\nJūsų procesorius neturi šių galimybių."
+
+msgctxt "CustomMessages_msg_simd_sse2"
+msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
+msgstr "Šiai MPC-HC versijai reikalingas centrinis CPU su SSE2 plėtinio palaikymu.\n\nJūsų procesorius neturi šių galimybių."
+
+msgctxt "CustomMessages_run_DownloadToolbarImages"
+msgid "Visit our Wiki page to download toolbar images"
+msgstr "Aplankykite mūsų Wiki puslapį įrankių juostos paveikslėliams atsisiųsti"
+
+msgctxt "CustomMessages_tsk_AllUsers"
+msgid "For all users"
+msgstr "Visiems naudotojams"
+
+msgctxt "CustomMessages_tsk_CurrentUser"
+msgid "For the current user only"
+msgstr "Dabartiniam naudotojui"
+
+msgctxt "CustomMessages_tsk_Other"
+msgid "Other tasks:"
+msgstr "Kitos užduotys:"
+
+msgctxt "CustomMessages_tsk_ResetSettings"
+msgid "Reset settings"
+msgstr "Atstatyti nustatymus"
+
+msgctxt "CustomMessages_types_DefaultInstallation"
+msgid "Default installation"
+msgstr "Numatytasis diegimas"
+
+msgctxt "CustomMessages_types_CustomInstallation"
+msgid "Custom installation"
+msgstr "Pasirinktinis diegimas"
+
+msgctxt "CustomMessages_ViewChangelog"
+msgid "View Changelog"
+msgstr "Peržiūrėti pokyčių žurnalą"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ms_MY.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ms_MY.strings.po
index 5882f3e9b..9722d19d8 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ms_MY.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ms_MY.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# abuyop <abuyop@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-20 04:30+0000\n"
-"Last-Translator: abuyop <abuyop@gmail.com>\n"
-"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/mpc-hc/language/ms_MY/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Malay (Malaysia) (http://www.transifex.com/mpc-hc/mpc-hc/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Anda mahu padam tetapan MPC-HC?\n\nJika anda bercadang untuk memasang MPC-HC lagi, maka anda tidak perlu memadamnya."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Persediaan MPC-HC sedia dijalankan!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Binaan MPC-HC ini memerlukan CPU dengan sokongan sambungan SSE.\n\nCPU anda tidak mempunyai keupayaan tersebut."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.nl.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.nl.strings.po
index 85bf1f644..dc1d7750b 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.nl.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.nl.strings.po
@@ -1,15 +1,18 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Devrim Yolo <devrim.extra@gmail.com>, 2014
+# reneweesp <bmom43@hotmail.com>, 2016
+# Devrim, 2014
+# DennisW, 2014
+# Marco Brohet <therbom@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 08:49+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Dutch (http://www.transifex.com/projects/p/mpc-hc/language/nl/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-11-12 00:35+0000\n"
+"Last-Translator: reneweesp <bmom43@hotmail.com>\n"
+"Language-Team: Dutch (http://www.transifex.com/mpc-hc/mpc-hc/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -22,35 +25,31 @@ msgstr "Dit programma zal [name] op uw computer installeren.\n\nHet is aanbevole
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
-msgstr "[name] vereist Windows XP Service Pack 3 of hoger om uit te voeren."
+msgstr "[name] vereist Windows XP Service Pack 3 of hoger om te voeren werken."
msgctxt "CustomMessages_comp_mpciconlib"
msgid "Icon Library"
-msgstr "Iconen voor mediabestanden"
+msgstr "Iconen bibliotheek"
msgctxt "CustomMessages_comp_mpcresources"
msgid "Translations"
-msgstr "Taal"
+msgstr "Talen"
msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Wilt u ook de instellingen van MPC-HC verwijderen?\n\nAls u van plan bent MPC-HC opnieuw te gaan installeren is dit niet nodig."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC installatie is al gestart!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Deze versie van MPC-HC heeft een processor nodig die SSE ondersteunt.\n\nUw processor ondersteund dit niet."
+msgstr "Deze versie van MPC-HC heeft een processor nodig die SSE ondersteunt.\n\nUw processor ondersteunt dit niet."
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Deze versie van MPC-HC heeft een processor nodig die SSE2 ondersteunt.\n\nUw processor ondersteund dit niet."
+msgstr "Deze versie van MPC-HC heeft een processor nodig die SSE2 ondersteunt.\n\nUw processor ondersteunt dit niet."
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr ""
+msgstr "Bezoek onze wiki om de werkbalkafbeeldingen op te halen"
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
@@ -58,7 +57,7 @@ msgstr "Voor alle gebruikers"
msgctxt "CustomMessages_tsk_CurrentUser"
msgid "For the current user only"
-msgstr "Allen voor de huidige gebruiker"
+msgstr "Alleen voor de huidige gebruiker"
msgctxt "CustomMessages_tsk_Other"
msgid "Other tasks:"
@@ -78,5 +77,5 @@ msgstr "Aangepaste installatie"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
-msgstr "Bekijk Wijzigingsoverzicht"
+msgstr "Toon wijziging geschiedenis"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pa.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pa.strings.po
new file mode 100644
index 000000000..5b7942c04
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pa.strings.po
@@ -0,0 +1,78 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# A S Alam <apreet.alam@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/mpc-hc/mpc-hc/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "Messages_WelcomeLabel2"
+msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
+msgstr "ਇਹ ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਉੱਤੇ [name] ਇੰਸਟਾਲ ਕਰੇਗਾ।\n\nਜਾਰੀ ਰੱਖਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਸਭ ਪਰੋਗਰਾਮ ਬੰਦ ਕਰਨ ਦੀ ਸਲਾਹ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ।"
+
+msgctxt "Messages_WinVersionTooLowError"
+msgid "[name] requires Windows XP Service Pack 3 or newer to run."
+msgstr ""
+
+msgctxt "CustomMessages_comp_mpciconlib"
+msgid "Icon Library"
+msgstr "ਆਈਕਾਨ ਲਾਇਬਰੇਰੀ"
+
+msgctxt "CustomMessages_comp_mpcresources"
+msgid "Translations"
+msgstr "ਅਨੁਵਾਦ"
+
+msgctxt "CustomMessages_msg_DeleteSettings"
+msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
+msgstr "ਕੀ ਤੁਸੀਂ MPC-HC ਸੈਟਿੰਗਾਂ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?\n\nਜੇ ਤੁਸੀਂ MPC-HC ਨੂੰ ਵਾਪਿਸ ਇੰਸਟਾਲ ਕਰਨ ਬਾਰੇ ਸੋਚਦੇ ਹੋ ਤਾਂ ਤੁਹਾਨੂੰ ਉਹਨਾਂ ਨੂੰ ਹਟਾਉਣਾ ਨਹੀਂ ਚਾਹੀਦਾ ਹੈ।"
+
+msgctxt "CustomMessages_msg_simd_sse"
+msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
+msgstr ""
+
+msgctxt "CustomMessages_msg_simd_sse2"
+msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
+msgstr ""
+
+msgctxt "CustomMessages_run_DownloadToolbarImages"
+msgid "Visit our Wiki page to download toolbar images"
+msgstr "ਟੂਲਬਾਰ ਚਿੱਤਰ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਸਾਡੇ ਵਿਕੀ ਸਫ਼ੇ ਨੂੰ ਖੋਲ੍ਹੋ"
+
+msgctxt "CustomMessages_tsk_AllUsers"
+msgid "For all users"
+msgstr "ਸਭ ਵਰਤੋਂਕਾਰਾਂ ਲਈ"
+
+msgctxt "CustomMessages_tsk_CurrentUser"
+msgid "For the current user only"
+msgstr "ਕੇਵਲ ਮੌਜੂਦਾ ਵਰਤੋਂਕਾਰ ਲਈ ਹੀ"
+
+msgctxt "CustomMessages_tsk_Other"
+msgid "Other tasks:"
+msgstr "ਹੋਰ ਟਾਸਕ:"
+
+msgctxt "CustomMessages_tsk_ResetSettings"
+msgid "Reset settings"
+msgstr "ਸੈਟਿੰਗਾਂ ਮੁੜ-ਸੈਟ ਕਰੋ"
+
+msgctxt "CustomMessages_types_DefaultInstallation"
+msgid "Default installation"
+msgstr "ਡਿਫਾਲਟ ਇੰਸਟਾਲੇਸ਼ਨ"
+
+msgctxt "CustomMessages_types_CustomInstallation"
+msgid "Custom installation"
+msgstr "ਕਸਟਮ ਇੰਸਟਾਲੇਸ਼ਨ"
+
+msgctxt "CustomMessages_ViewChangelog"
+msgid "View Changelog"
+msgstr "ਚੇਜ਼ਲਾਗ ਦੇਖੋ"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pl.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pl.strings.po
index b1621925d..6e92e2a9b 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pl.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pl.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# kasper93, 2013-2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-10 06:31+0000\n"
-"Last-Translator: kasper93\n"
-"Language-Team: Polish (http://www.transifex.com/projects/p/mpc-hc/language/pl/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Polish (http://www.transifex.com/mpc-hc/mpc-hc/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Czy chcesz usunąć ustawienia MPC-HC?\n\nJeśli planujesz ponownie zainstalować MPC-HC, nie musisz ich usuwać."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Instalator MPC-HC jest już uruchomiony!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Ta kompilacja MPC-HC wymaga procesora z obsługą zestawu instrukcji SSE.\n\nTwój procesor ich nie obsługuje."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pt_BR.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pt_BR.strings.po
index 8465312da..b44ccf405 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pt_BR.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.pt_BR.strings.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Alex Luís Silva <alex.mooca@hotmail.com>, 2014
@@ -8,10 +8,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-24 06:20+0000\n"
-"Last-Translator: Alex Luís Silva <alex.mooca@hotmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/mpc-hc/language/pt_BR/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-12-22 21:46+0000\n"
+"Last-Translator: Roger Filipe Barros <lipe2000@outlook.com>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/mpc-hc/mpc-hc/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -38,10 +38,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Gostaria de excluir as configurações do MPC-HC?\n\nSe planeja instalar o MPC-HC novamente, você não precisa excluí-las."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "A instalação do MPC-HC ja está sendo executada!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Esta versão do MPC-HC necessita uma CPU com suporte a extensões SSE.\n\nSua CPU não tem esse suporte."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ro.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ro.strings.po
index ef49ff3c3..607976628 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ro.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ro.strings.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Daniel <danny34ever@yahoo.com>, 2014
+# Daniel <danny3@tutanota.com>, 2014-2016
+# lordkag <lord.kagula@gmail.com>, 2015,2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 16:20+0000\n"
-"Last-Translator: Daniel <danny34ever@yahoo.com>\n"
-"Language-Team: Romanian (http://www.transifex.com/projects/p/mpc-hc/language/ro/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2017-06-12 20:00+0000\n"
+"Last-Translator: lordkag <lord.kagula@gmail.com>\n"
+"Language-Team: Romanian (http://www.transifex.com/mpc-hc/mpc-hc/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,7 +19,7 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Se va instala [name] pe calculatorul dumneavoastră.\n\nEste recomandat să închideţi toate celelalte aplicaţii înainte de a continua."
+msgstr "Se va instala [name] pe calculatorul dumneavoastră.\n\nEste recomandat să închideți toate celelalte aplicații înainte de a continua."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
@@ -34,19 +35,15 @@ msgstr "Traduceri"
msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
-msgstr "Doriţi de asemenea să ştergeţi setările MPC-HC?\n\nDacă doriţi a reinstala MPC-HC, atunci nu este necesar să le ştergeţi."
-
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Instalatorul MPC-HC rulează deja!"
+msgstr "Doriți de asemenea să ștergeți stabilirile MPC-HC?\n\nDacă doriți să reinstalați MPC-HC, atunci nu este necesar să le ștergeți."
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Această versiune de MPC-HC necesită un procesor cu suport pentru extensii SSE.\n\nProcesorul dumneavoastră nu are aceste capacităţi."
+msgstr "Această versiune de MPC-HC necesită un procesor cu sprijin pentru extensii SSE.\n\nProcesorul dumneavoastră nu are aceste capacități."
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Această versiune de MPC-HC necesită un procesor cu suport pentru extensii SSE2.\n\nProcesorul dumneavoastră nu are aceste capacităţi."
+msgstr "Această versiune de MPC-HC necesită un procesor cu sprijin pentru extensii SSE2.\n\nProcesorul dumneavoastră nu are aceste capacități."
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
@@ -54,19 +51,19 @@ msgstr "Vizitați pagina noastră Wiki pentru a descărca imagini pentru bara de
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
-msgstr "Pentru toţi utilizatorii"
+msgstr "Pentru toți utilizatorii"
msgctxt "CustomMessages_tsk_CurrentUser"
msgid "For the current user only"
-msgstr "Doar pentru utilizatorul curent"
+msgstr "Doar pentru utilizatorul actual"
msgctxt "CustomMessages_tsk_Other"
msgid "Other tasks:"
-msgstr "Alte activităţi:"
+msgstr "Alte activități:"
msgctxt "CustomMessages_tsk_ResetSettings"
msgid "Reset settings"
-msgstr "Resetează setările"
+msgstr "Restabilește stabilirile"
msgctxt "CustomMessages_types_DefaultInstallation"
msgid "Default installation"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ru.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ru.strings.po
index cecf79fb9..1efa6db8e 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ru.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.ru.strings.po
@@ -1,28 +1,29 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# stryaponoff <stryaponoff@gmail.com>, 2014
+# Sergey <player54@mail.ru>, 2015
+# Kirill <stryaponoff@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-14 12:51+0000\n"
-"Last-Translator: stryaponoff <stryaponoff@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.com/projects/p/mpc-hc/language/ru/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-12-21 11:37+0000\n"
+"Last-Translator: Sergey <player54@mail.ru>\n"
+"Language-Team: Russian (http://www.transifex.com/mpc-hc/mpc-hc/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Программа установит [name] на ваш компьютер.\n\nРекомендуется закрыть все прочие приложения перед тем, как продолжить."
+msgstr "Эта программа установит [name] на ваш компьютер.\n\nПеред тем, как продолжить, рекомендуется закрыть все прочие приложения."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
-msgstr "[name] Эта программа требует Windows XP Service Pack 3 или выше."
+msgstr "[name] требует Windows XP Service Pack 3 или новее."
msgctxt "CustomMessages_comp_mpciconlib"
msgid "Icon Library"
@@ -34,27 +35,23 @@ msgstr "Локализации"
msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
-msgstr "Удалить также настроенные параметры MPC-HC?\n\nЕсли запланирована переустановка MPC-HC, эти параметры не нужно удалять."
-
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Программа установки MPC-HC уже запущена!"
+msgstr "Желаете ли вы также удалить настройки MPC-HC?\n\nЕсли вы собираетесь установить MPC-HC повторно, их не нужно удалять."
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Для этой сборки MPC-HC требуется процессор с поддержкой SSE-инструкций.\n\nВ данном процессоре они не поддерживаются."
+msgstr "Для этой сборки MPC-HC необходим процессор с поддержкой SSE-инструкций.\n\nВаш процессор не соответствует данным требованиям."
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Для этой сборки MPC-HC требуется процессор с поддержкой SSE2-инструкций.\n\nВ данном процессоре они не поддерживаются."
+msgstr "Для этой сборки MPC-HC необходим процессор с поддержкой SSE2-инструкций.\n\nВаш процессор не соответствует данным требованиям."
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr "Посетите нашу Вики, чтобы скачать темы для панели управления"
+msgstr "Посетить нашу вики для загрузии темы панели инструментов"
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
-msgstr "Для всех пользователей данного компьютера"
+msgstr "Для всех пользователей"
msgctxt "CustomMessages_tsk_CurrentUser"
msgid "For the current user only"
@@ -66,7 +63,7 @@ msgstr "Другие задачи:"
msgctxt "CustomMessages_tsk_ResetSettings"
msgid "Reset settings"
-msgstr "Восстановить параметры по умолчанию"
+msgstr "Восстановить настройки по умолчанию"
msgctxt "CustomMessages_types_DefaultInstallation"
msgid "Default installation"
@@ -78,5 +75,5 @@ msgstr "Выборочная установка"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
-msgstr "Просмотреть журнал изменений"
+msgstr "Посмотреть список изменений"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sk.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sk.strings.po
index 023309189..327891d10 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sk.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sk.strings.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Marián Hikaník <podnety@mojepreklady.net>, 2013
@@ -7,10 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 10:11+0000\n"
-"Last-Translator: Marián Hikaník <podnety@mojepreklady.net>\n"
-"Language-Team: Slovak (http://www.transifex.com/projects/p/mpc-hc/language/sk/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Slovak (http://www.transifex.com/mpc-hc/mpc-hc/language/sk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -37,10 +37,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Chcete vymazať aj nastavenia programu MPC-HC?\n\nAk plánujete opätovnú inštaláciu programu MPC-HC, tak nie je potrebné ich vymazávať."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Inštalácia programu MPC-HC je už spustená!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Toto zostavenie MPC-HC vyžaduje procesor s podporou inštrukcií SSE.\n\nVáš procesor ich nepodporuje."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sl.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sl.strings.po
index 7d63fbe8f..61e2cd9d2 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sl.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sl.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# fubuzz <knedlc@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-09-02 13:51+0000\n"
-"Last-Translator: fubuzz <knedlc@gmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.com/projects/p/mpc-hc/language/sl/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Slovenian (http://www.transifex.com/mpc-hc/mpc-hc/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Želite izbrisati nastavitve MPC-HC?\n\nČe nameravate spet namestiti MPC-HC, potem vam jih ni potrebno izbrisati."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Namestitev MPC-HC je že zagnana!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Ta različica MPC-HC zahteva procesor s podporo SSE razširitvam.\n\nVaš procesor nima teh zmožnosti."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sr.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sr.strings.po
new file mode 100644
index 000000000..7de08ff78
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sr.strings.po
@@ -0,0 +1,80 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Rancher, 2014
+# Rancher, 2016
+# Zlatan Vasović <inactive+ZDroid@transifex.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2016-06-15 10:31+0000\n"
+"Last-Translator: Rancher\n"
+"Language-Team: Serbian (http://www.transifex.com/mpc-hc/mpc-hc/language/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "Messages_WelcomeLabel2"
+msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
+msgstr "Овај програм ће инсталирати [name] на ваш рачунар.\n\nПре него што наставите, препоручује се да затворите све друге програме."
+
+msgctxt "Messages_WinVersionTooLowError"
+msgid "[name] requires Windows XP Service Pack 3 or newer to run."
+msgstr "[name] захтева Windows XP Service Pack 3 или новији."
+
+msgctxt "CustomMessages_comp_mpciconlib"
+msgid "Icon Library"
+msgstr "Библиотека са иконама"
+
+msgctxt "CustomMessages_comp_mpcresources"
+msgid "Translations"
+msgstr "Преводи"
+
+msgctxt "CustomMessages_msg_DeleteSettings"
+msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
+msgstr "Желите ли да избришете и поставке MPC-HC-а?\n\nНе морате их брисати ако планирате поново да инсталирате MPC-HC."
+
+msgctxt "CustomMessages_msg_simd_sse"
+msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
+msgstr "Ова верзија MPC-HC-а захтева процесор са подршком за SSE проширења.\n\nВаш процесор нема те могућности."
+
+msgctxt "CustomMessages_msg_simd_sse2"
+msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
+msgstr "За ову верзију MPC-HC-а је потребан процесор са подршком за SSE2 инструкције.\n\nВаш процесор не испуњава тај захтев."
+
+msgctxt "CustomMessages_run_DownloadToolbarImages"
+msgid "Visit our Wiki page to download toolbar images"
+msgstr "Посети наш вики ради преузимања тема траке са алаткама"
+
+msgctxt "CustomMessages_tsk_AllUsers"
+msgid "For all users"
+msgstr "За све кориснике"
+
+msgctxt "CustomMessages_tsk_CurrentUser"
+msgid "For the current user only"
+msgstr "Само за тренутног корисника"
+
+msgctxt "CustomMessages_tsk_Other"
+msgid "Other tasks:"
+msgstr "Други задаци:"
+
+msgctxt "CustomMessages_tsk_ResetSettings"
+msgid "Reset settings"
+msgstr "Врати подразумеване поставке"
+
+msgctxt "CustomMessages_types_DefaultInstallation"
+msgid "Default installation"
+msgstr "Уобичајена инсталација"
+
+msgctxt "CustomMessages_types_CustomInstallation"
+msgid "Custom installation"
+msgstr "Прилагођена инсталација"
+
+msgctxt "CustomMessages_ViewChangelog"
+msgid "View Changelog"
+msgstr "Погледај евиденцију промена"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.strings.pot b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.strings.pot
index cdf64a504..3d3bbd157 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.strings.pot
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.strings.pot
@@ -1,10 +1,10 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -33,10 +33,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr ""
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr ""
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr ""
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sv.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sv.strings.po
index 35023235d..b42f417bc 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sv.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.sv.strings.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# JellyFrog, 2013-2014
@@ -7,10 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-31 13:51+0000\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Swedish (http://www.transifex.com/projects/p/mpc-hc/language/sv/)\n"
+"Language-Team: Swedish (http://www.transifex.com/mpc-hc/mpc-hc/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -37,10 +37,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Vill du också ta bort inställningarna för MPC-HC?\n\nOm du planerar att installera MPC-HC igen så behöver du inte ta bort dem."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Konfigurering av MPC-HC pågår redan!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Denna version av MPC-HC kräver en processor med stöd för SSE.\n\nDin processor saknar detta stöd."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.th_TH.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.th_TH.strings.po
index 4bb16cb30..060172fcc 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.th_TH.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.th_TH.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# M. Somsak, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-09-01 04:50+0000\n"
-"Last-Translator: M. Somsak\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/mpc-hc/language/th_TH/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Thai (Thailand) (http://www.transifex.com/mpc-hc/mpc-hc/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "คุณต้องการลบการตั้งค่า MPC-HC ด้วยหรือไม่?\n\nหากคุณวางแผนจะติดตั้ง MPC-HC อีกครั้ง คุณไม่จำเป็นต้องลบมันออก"
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "การติดตั้ง MPC-HC กำลังดำเนินการอยู่!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "MPC-HC รุ่นนี้ ต้องการ CPU ที่สนับสนุนส่วนเสริม SSE\n\nCPU ของคุณไม่มีความสามารถนั้น"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.tr.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.tr.strings.po
index 9b27ca9c5..c8c51dd83 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.tr.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.tr.strings.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Sinan H., 2014
+# Sinan H., 2014-2015
# Sinan H., 2013
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-20 12:41+0000\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-31 06:16+0000\n"
"Last-Translator: Sinan H.\n"
-"Language-Team: Turkish (http://www.transifex.com/projects/p/mpc-hc/language/tr/)\n"
+"Language-Team: Turkish (http://www.transifex.com/mpc-hc/mpc-hc/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -23,7 +23,7 @@ msgstr "[name] medya oynatıcısı programı bilgisayarınıza kurulacaktır.\n\
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
-msgstr "[name] kurulumu, Windows XP Servis Paketi 3 veya daha yenisi ile çalışabilir."
+msgstr "[name] kurulumu, ancak Windows XP Servis Paketi 3 veya daha yenisi ile çalışabilir."
msgctxt "CustomMessages_comp_mpciconlib"
msgid "Icon Library"
@@ -37,17 +37,13 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "MPC-HC ayarlarını da silmek istiyor musunuz?\n\nMPC-HC 'yi tekrar yüklemeyi planlıyorsanız, bu ayarları silmemenizi öneririz."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC kurulumu zaten çalışıyor!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Bu MPC-HC sürümü, SSE eklentisi destekleyen bir işlemci gerektirmektedir.\n\nİşlemciniz bu özelliği desteklemiyor."
+msgstr "Bu MPC-HC sürümü, SSE eklentisi destekleyen bir işlemci gerektirmektedir.\n\nİşlemciniz malesef bu özelliği desteklemiyor."
msgctxt "CustomMessages_msg_simd_sse2"
msgid "This build of MPC-HC requires a CPU with SSE2 extension support.\n\nYour CPU does not have those capabilities."
-msgstr "Bu MPC-HC sürümü, SSE2 eklentisi destekleyen bir işlemci gerektirmektedir.\n\nİşlemciniz bu özelliği desteklemiyor."
+msgstr "Bu MPC-HC sürümü, SSE2 eklentisi destekleyen bir işlemci gerektirmektedir.\n\nİşlemciniz malesef bu özelliği desteklemiyor."
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.tt.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.tt.strings.po
index 2c81800ef..c8d2c4397 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.tt.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.tt.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# кери <khazirek@mail.ru>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 08:49+0000\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Tatar (http://www.transifex.com/projects/p/mpc-hc/language/tt/)\n"
+"Language-Team: Tatar (http://www.transifex.com/mpc-hc/mpc-hc/language/tt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Шулай ук көйләнгән MPC-HC шартларын да бетерергәме?\n\nӘгәр ниятләнгән киредән MPC-HC урнаштыру булса, бу шартларны бетерергә кирәк түгел."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC урнаштыру программасы инде кабызылган!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Бу MPC-HC бөрмәсе өчен SSE-кагыйдәләрен кулланган процессор кирәк.\n\nӘлеге процессорда алар кулланылмый."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.uk.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.uk.strings.po
index fbb178b38..4215460f1 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.uk.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.uk.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# arestarh1986 <arestarh@ukr.net>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-18 10:01+0000\n"
-"Last-Translator: arestarh1986 <arestarh@ukr.net>\n"
-"Language-Team: Ukrainian (http://www.transifex.com/projects/p/mpc-hc/language/uk/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Ukrainian (http://www.transifex.com/mpc-hc/mpc-hc/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +36,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Чи хочете ви видалити налаштування MPC-HC?\n\nЯкщо ви плануєте просто повторно встановити MPC-HC, то вам не потрібно їх видаляти."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "Встановлення MPC-HC вже запущено!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Для використання даної версії MPC-HC необхідно, щоб ваш процесор підтримував SSE розширення.\n\nАле ваш процесор не підтримує їх."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.vi.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.vi.strings.po
index ce0087fe1..568ee8bd4 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.vi.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.vi.strings.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Dat Luong Anh <datanhlg@gmail.com>, 2014
-# TRẦN ANH MINH <anhminhvks@yahoo.com>, 2014
+# DatSoft, 2014
+# TRẦN ANH MINH <anhminhvks@yahoo.com>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-09 14:31+0000\n"
-"Last-Translator: TRẦN ANH MINH <anhminhvks@yahoo.com>\n"
-"Language-Team: Vietnamese (http://www.transifex.com/projects/p/mpc-hc/language/vi/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Vietnamese (http://www.transifex.com/mpc-hc/mpc-hc/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -19,7 +19,7 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "Chuẩn bị cài [name] vào máy tính của bạn.\n\nĐề nghị bạn đóng tất cả các ứng dụng khác trước khi tiếp tục."
+msgstr "Chuẩn bị cài đặt [name] vào máy tính của bạn.\n\nĐề nghị bạn đóng tất cả các ứng dụng khác trước khi tiếp tục."
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
@@ -37,10 +37,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "Bạn cũng muốn xóa các thiết lập của MPC-HC?\n\nNếu bạn dự định cài đặt lại MPC-HC thì bạn không cần phải xóa chúng."
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC đang được cài đặt!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "Phiên bản MPC-HC này yêu cầu CPU có hỗ trợ phần mở rộng SSE.\n\nCPU của bạn không đáp ứng được yêu cầu này."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_CN.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_CN.strings.po
index de1131ec0..011d6a62a 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_CN.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_CN.strings.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Dean Lee <xslidian@gmail.com>, 2015
# Ming Chen <yzonline@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-18 10:23+0000\n"
-"Last-Translator: Ming Chen <yzonline@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/mpc-hc/language/zh_CN/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-07-24 08:44+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Chinese (China) (http://www.transifex.com/mpc-hc/mpc-hc/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,10 +37,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "是否同时删除 MPC-HC 设置?\n\n如果您打算再次安装 MPC-HC 则不必删除。"
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "MPC-HC 安装程序已在运行中!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "此 MPC-HC 编译版本要求 CPU 支持 SSE 指令集。\n\n您的 CPU 不具备该能力。"
@@ -70,11 +67,11 @@ msgstr "重置设置"
msgctxt "CustomMessages_types_DefaultInstallation"
msgid "Default installation"
-msgstr "默认安装"
+msgstr "默认安装方案"
msgctxt "CustomMessages_types_CustomInstallation"
msgid "Custom installation"
-msgstr "自定义安装"
+msgstr "自定义安装方案"
msgctxt "CustomMessages_ViewChangelog"
msgid "View Changelog"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_TW.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_TW.strings.po
index 7c5b5281e..894be1fd6 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_TW.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.installer.zh_TW.strings.po
@@ -1,15 +1,18 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2014 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# 洪嘉鴻 <jerry9030@gmail.com>, 2015
+# Ken <ken670128@yahoo.com.tw>, 2015
# Peter Chen <petercpg@gmail.com>, 2014
+# 洪嘉鴻 <jerry9030@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-06-17 15:23:34+0000\n"
-"PO-Revision-Date: 2014-07-07 08:49+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/mpc-hc/language/zh_TW/)\n"
+"POT-Creation-Date: 2015-07-20 20:29:41+0000\n"
+"PO-Revision-Date: 2015-08-11 02:59+0000\n"
+"Last-Translator: 洪嘉鴻 <jerry9030@gmail.com>\n"
+"Language-Team: Chinese (Taiwan) (http://www.transifex.com/mpc-hc/mpc-hc/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,7 +21,7 @@ msgstr ""
msgctxt "Messages_WelcomeLabel2"
msgid "This will install [name] on your computer.\n\nIt is recommended that you close all other applications before continuing."
-msgstr "這將會安裝 [name] 在你的電腦中。\n\n建議您關閉所有其它應用程序後再繼續。"
+msgstr "這將會安裝 [name] 在您的電腦中。\n\n建議您關閉所有其它應用程式後再繼續。"
msgctxt "Messages_WinVersionTooLowError"
msgid "[name] requires Windows XP Service Pack 3 or newer to run."
@@ -36,10 +39,6 @@ msgctxt "CustomMessages_msg_DeleteSettings"
msgid "Do you also want to delete MPC-HC settings?\n\nIf you plan on installing MPC-HC again then you do not have to delete them."
msgstr "您是否也要刪除 MPC-HC 設定?\n\n如果您打算再次安裝 MPC-HC 則無需刪除。"
-msgctxt "CustomMessages_msg_SetupIsRunningWarning"
-msgid "MPC-HC setup is already running!"
-msgstr "已在執行 MPC-HC 安裝程式!"
-
msgctxt "CustomMessages_msg_simd_sse"
msgid "This build of MPC-HC requires a CPU with SSE extension support.\n\nYour CPU does not have those capabilities."
msgstr "此版的 MPC-HC 需要有支援 SSE 延伸指令集的 CPU。\n\n您的 CPU 並未相容這些功能。"
@@ -50,7 +49,7 @@ msgstr "此版的 MPC-HC 須要有支援 SSE2 延伸指令集的 CPU。\n\n您
msgctxt "CustomMessages_run_DownloadToolbarImages"
msgid "Visit our Wiki page to download toolbar images"
-msgstr ""
+msgstr "參觀我們的 Wiki 頁面以下載工具列圖示"
msgctxt "CustomMessages_tsk_AllUsers"
msgid "For all users"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.it.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.it.dialogs.po
index dea15cf2c..45912260b 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.it.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.it.dialogs.po
@@ -1,17 +1,17 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Gabrix <gabrixs@outlook.com>, 2014
+# Gabrix <inactive+Gabrix@transifex.com>, 2014
# Kiba_No_Ou <kiba.no.michi@gmail.com>, 2014
-# Tummarellox <tummarellox@gmail.com>, 2014
+# Jacopo Tumminello <tummarellox@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Italian (http://www.transifex.com/projects/p/mpc-hc/language/it/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Italian (http://www.transifex.com/mpc-hc/mpc-hc/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -111,15 +111,15 @@ msgid "Enable custom channel mapping"
msgstr "Attiva la mappatura personalizzata dei canali"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Configura altoparlanti per "
+msgid "Speaker configuration for"
+msgstr "Configura altoparlanti per"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "canali di input:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Premi Shift per applicare immediatamente i cambiamenti cliccando su un elemento"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -191,8 +191,8 @@ msgid "About"
msgstr "Informazioni"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 vedi file Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 vedi file Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -423,12 +423,16 @@ msgid "time(s)"
msgstr "volta/e"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Riproduci in seguito"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Output"
+msgid "Default zoom"
+msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -474,10 +478,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Auto-carica i file audio"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Usa il visualizzatore di sottotitoli integrato"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Controllo"
@@ -571,8 +571,8 @@ msgid "Warning"
msgstr "Attenzione"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Se imposti l'antialiasing a schermo intero nella tua scheda video, i sottotitoli NON si vedranno meglio, tuttavia la cpu avrà un carico maggiore."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Se imposti l'antialiasing a schermo intero nella tua scheda video, i sottotitoli NON si vedranno meglio, tuttavia la CPU avrà un carico maggiore."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -596,11 +596,11 @@ msgstr ""
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr ""
+msgstr "Esegui come &amministratore"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "Imposta come programma &predefinito"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -678,16 +678,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Disattiva minimizzazione con schermo intero su schermo non predefinito"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Utilizza le caratteristiche della Taskbar di Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr ""
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Apri il file precedente/successivo nella cartella con \"Salta indietro/avanti\" quando la playlist contiene un solo elemento"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Visualizza tempo:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1127,8 +1127,8 @@ msgid "Audio Renderer"
msgstr "Audio DirectShow"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Impostazioni VMR-7/VMR-9 (renderless) ed EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Impostazioni VMR-9 (renderless) ed EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1171,8 +1171,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Sottotitoli *"
+msgid "Subtitles"
+msgstr ""
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1187,8 +1187,12 @@ msgid "Rotation"
msgstr "Rotazione"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Filtri esterni (come VSFilter) possono visualizzare sottotitoli su ogni render."
+msgid "Subtitle Renderer"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1206,6 +1210,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Consenti accesso solo da localhost"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr ""
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Stampa informazioni di debug"
@@ -1231,17 +1239,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Connettori CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Sottotitoli disponibili online"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Scarica && Apri"
+msgid "Download subtitles"
+msgstr "Scarica sottotitoli"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Sostituisci i sottotitoli correntemente caricati"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opzioni"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opzioni"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Salva con nome..."
@@ -1279,8 +1315,8 @@ msgid "Enable automatic update check"
msgstr "Abilita controllo automatico aggiornamenti"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Intervallo ricerca:"
+msgid "Check every:"
+msgstr ""
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1543,16 +1579,28 @@ msgid "Reset"
msgstr "Reimposta"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Database online"
+msgid "Online search, download and upload subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr ""
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Indirizzo del database di sottotitoli online:"
+msgid "Languages in order of preference:"
+msgstr ""
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Prova"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr ""
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1654,6 +1702,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Predefinito"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr ""
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Qualità JPEG:"
@@ -1666,3 +1758,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.it.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.it.menus.po
index 8e98ab781..c50ea71c4 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.it.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.it.menus.po
@@ -1,16 +1,17 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Gabrix <gabrixs@outlook.com>, 2014
+# Gabrix <inactive+Gabrix@transifex.com>, 2014
# Kiba_No_Ou <kiba.no.michi@gmail.com>, 2014
+# Luca Bisaro <lucabisaro2@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-14 00:30+0000\n"
-"Last-Translator: Gabrix <gabrixs@outlook.com>\n"
-"Language-Team: Italian (http://www.transifex.com/projects/p/mpc-hc/language/it/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-01-31 22:01+0000\n"
+"Last-Translator: Underground78\n"
+"Language-Team: Italian (http://www.transifex.com/mpc-hc/mpc-hc/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -65,29 +66,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Salva miniature..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Apri sottotitolo..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Salva sottotitolo..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Database sottotitoli"
+msgid "S&ubtitles"
+msgstr "Sottotitoli"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Ricerca..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr ""
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Upload..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Download..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr ""
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -197,13 +194,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Test effetto tearing"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Visualizza statistiche"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr ""
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr ""
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Tempo residuo"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr ""
msgctxt "POPUP"
msgid "&Output Range"
@@ -405,17 +406,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Ritocca la finestra dall'&esterno"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Mantieni proporzioni"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Modifica proporzioni"
+msgid "&Aspect Ratio"
+msgstr ""
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Predefinito"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr ""
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -437,6 +434,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Correggi differenza proporzioni schermo/desktop"
@@ -530,9 +531,25 @@ msgid "&Stop"
msgstr "&Stop"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "&Fotogramma"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr ""
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Diminuisci velocità"
@@ -554,16 +571,16 @@ msgid "S&haders"
msgstr "S&haders"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio"
+msgid "&Audio Track"
+msgstr "&Traccia Audio"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "S&ottotitoli"
+msgid "Su&btitle Track"
+msgstr "&Traccia Sottotitolo"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "S&tream video"
+msgid "Vide&o Track"
+msgstr "&Traccia Video"
msgctxt "POPUP"
msgid "&Volume"
@@ -585,7 +602,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Dopo la riproduzione"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Riproduci &il prossimo file nella cartella"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Spegni il &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "Chiudi "
@@ -609,10 +638,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Blocca"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Spegni il &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Navigazione"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.it.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.it.strings.po
index 00e21b9e7..436de8c94 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.it.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.it.strings.po
@@ -1,17 +1,17 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Gabrix <gabrixs@outlook.com>, 2014
+# Gabrix <inactive+Gabrix@transifex.com>, 2014
# Kiba_No_Ou <kiba.no.michi@gmail.com>, 2014
-# Tummarellox <tummarellox@gmail.com>, 2014
+# Jacopo Tumminello <tummarellox@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Italian (http://www.transifex.com/projects/p/mpc-hc/language/it/)\n"
+"Language-Team: Italian (http://www.transifex.com/mpc-hc/mpc-hc/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -62,10 +62,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Proprietà"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr ""
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Stile pre&definito"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr ""
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "File"
@@ -88,7 +96,7 @@ msgstr "Compensazione Sincronia"
msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
msgid "avg: %d ms, dev: %d ms"
-msgstr "avg: %d ms, dev: %d ms"
+msgstr ""
msgctxt "IDS_STATSBAR_JITTER"
msgid "Jitter"
@@ -96,11 +104,11 @@ msgstr "Jitter"
msgctxt "IDS_STATSBAR_BITRATE"
msgid "Bitrate"
-msgstr "Bitrate"
+msgstr ""
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
-msgstr "(avg/cur)"
+msgstr ""
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
@@ -118,6 +126,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Se il rendering viene lasciato indefinito, i sottotitoli SSA/ASS saranno resi relativamente al frame video mentre tutti gli altri sottotitoli testuali saranno resi relativamente alla finestra."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Mai (metodo più veloce)"
@@ -327,12 +355,12 @@ msgid "On/Off"
msgstr "On/Off"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Dal fps"
+msgid "From (FPS)"
+msgstr "Dal (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Al fps"
+msgid "To (FPS)"
+msgstr "Al (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -466,6 +494,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Riproduzione::Shaders"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Risorse"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Varie"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "InfoMedia"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Riproduzione::Cattura"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Riproduzione::Sync Renderer Settings"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Riproduzione::Schermo intero"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr ""
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Switcher Audio"
@@ -490,18 +546,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Render Overlay Mixer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Render Video Mixing 7 (finestra)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Render Video Mixing 9 (finestra)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Render Video Mixing 7 (renderless)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Render Video Mixing 9 (renderless)"
@@ -554,34 +602,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Lettore::Interfaccia Web"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Sottotitoli::Database"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Risorse"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Varie"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "InfoMedia"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Riproduzione::Cattura"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Riproduzione::Sync Renderer Settings"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Riproduzione::Schermo intero"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Dettagli"
@@ -602,17 +622,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Renderizza sempre in overlay. Generalmente solo i formati YUV sono consentiti, ma sono presentati direttamente senza conversioni di colore in RGB. Questo è il metodo di rendering più veloce e l'unico che garantisce con sicurezza il video mirroring a schermo intero nell'uscita tv."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Video renderer predefinito di Windows XP. Molto stabile e solo leggermente più lento dell'Overlay mixer. Usa il DirectDraw e va in Overlay quando possibile."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Disponibile solo con le DirectX 9. Ha le stesse abilità del VMR-7 (in finestra), ma non usa mai l'Overlay rendering e quindi può essere considerato leggermente più lento del VMR-7 (in finestra)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Come il VMR-7 (in finestra), ma con il plugin Allocator-Presenter di MPC-HC per i sottotitoli. L'Overlay video mirroring NON funzionerà. Raccomandata la profondità di colore massima (32 bit)."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr ""
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -623,7 +635,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Come il VMR-9 (renderless), ma usa un vero resizer bicubico a 2 passaggi."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Si interfaccia a qualsiasi tipo di video e non manda i campioni in entrata da nessuna parte. Utile quando non si ha bisogno di visualizzare il video permettendo di risparmiare lavoro non necessario alla CPU."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -650,10 +662,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Renderer di Real. Gli script SMIL funzioneranno, ma probabilmente non l'interazione. Usa DirectDraw e va in Overlay quando possibile."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "L'output del motore di Real renderizzato dall'Allocator-Presenter DX7-based di VMR-7 (renderless)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "L'output del motore di Real renderizzato dall'Allocator-Presenter DX9-based di VMR-9 (renderless)."
@@ -662,10 +670,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Renderer di QuickTime. Rallenta leggermentente quando l'area video è ridimensionata o parzialmente coperta da un'altra finestra. Quando l'Overlay non è disponibile, andrà in GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "L'output del motore di QuickTime renderizzato dall'Allocator-Presenter DX7-based di VMR-7 (renderless)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "L'output del motore di QuickTime renderizzato dall'Allocator-Presenter DX9-based di VMR-9 (renderless)."
@@ -674,22 +678,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "La superficie video sarà allocata come una superficie regolare su schermo."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "il Render Audio MPC non funziona, non usare."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Render Sync"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Segnala un bug"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC è crashato ma questa versione è stata compilata senza le informazioni di debug.\nSe vuoi segnalare questo bug, dovresti prima provare una versione ufficiale.\n\nVuoi visitare adesso la pagina di download?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Superfice piana offscreen regolare"
@@ -742,9 +734,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Nullo (non compresso)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Render Audio MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr ""
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -758,9 +750,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Per poter visualizzare una risorsa incorporato nel tuo browser devi attivare l'interfaccia web.\n\nUsa il bottone \"Salva Come\" se vuoi solamente salvare l'informazione."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Scarica sottotitoli"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr ""
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -791,7 +787,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Npn posso trovare tutti i volumi archivio"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "La superficie video sarà allocata come texture ma verranno comunque usate le funzioni 2d per copiarla e ridimensionata nel backbuffer. Richiede una scheda video in grado di allocare texture RGBA a 32 bit di dimensioni non-potenza-di-due e almeno alla risoluzione del video."
msgctxt "IDC_TEXTURESURF3D"
@@ -818,6 +814,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Riduce il tearing passando il VSync predefinito creato dentro D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Scansione sintonizzatore"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Sottotitoli non caricati o renderer non supportato."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Apri VTS_xx_0.ifo per caricare i file VTS_xx_x.vob tutti insieme"
@@ -890,7 +898,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Muto"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Muto Off"
@@ -944,7 +952,7 @@ msgstr "&Seleziona shaders..."
msgctxt "IDS_SHADERS_DEBUG"
msgid "&Debug Shaders..."
-msgstr "&Debug Shaders..."
+msgstr ""
msgctxt "IDS_FAVORITES_ADD"
msgid "&Add to Favorites..."
@@ -955,11 +963,11 @@ msgid "&Organize Favorites..."
msgstr "&Organizza preferiti..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Riproduzione casuale"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Apri percorso file"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1000,11 +1008,11 @@ msgstr "Mostra finestra EDL"
msgctxt "IDS_AG_EDL_IN"
msgid "EDL set In"
-msgstr "EDL set In"
+msgstr ""
msgctxt "IDS_AG_EDL_OUT"
msgid "EDL set Out"
-msgstr "EDL set Out"
+msgstr ""
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
@@ -1043,7 +1051,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Zoom a Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Nascondi a schermo intero"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1231,7 +1239,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Aggiungi cartella contenente"
msgctxt "IDS_HW_INDICATOR"
@@ -1332,10 +1340,86 @@ msgstr "Dimensione massima (NxNpx) di una cover-art caricata in modalità solo a
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr ""
+msgstr "Il ritardo dei sottotitoli verrà aumentato/diminuito di questo valore ogni volta che i tasti corrispondenti saranno premuti (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
+msgstr "<not defined>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Guarda"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Sposta su"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Sposta giù"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Ordina per LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Rimuovi tutto"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Sei sicuro di rimuovere tutti i canali dalla lista?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Nessuna informazione disponibile"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Attendi, analisi in corso..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr ""
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr ""
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr ""
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr ""
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
msgstr ""
msgctxt "IDS_AG_OPEN_DEVICE"
@@ -1358,13 +1442,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Immagine salvata con successo"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Carica sottotitoli"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Salva sottotitoli"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1387,11 +1471,11 @@ msgid "Stop"
msgstr "Ferma"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Fotogramma"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Fotogramma indietro"
msgctxt "IDS_AG_GO_TO"
@@ -1491,8 +1575,8 @@ msgid "Thumbnails saved successfully"
msgstr "Miniature salvate con successo"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "S&tream video"
+msgid "Vide&o Track"
+msgstr "&Traccia Video"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1539,11 +1623,11 @@ msgid "Reset Rate"
msgstr "Reimposta velocità"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Ritardo audio +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Ritardo audio -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1614,14 +1698,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Scorri sottotitolo a destra"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Visualizza statistiche"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Salta all'inizio"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr ""
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr ""
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr ""
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr ""
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Sottotitoli::Misc"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Nascondi bordi"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Solo video"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Menù e intestazioni"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Nascondi menù"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Avanzate"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Vista minima"
@@ -1687,8 +1811,8 @@ msgid "PnS Dec Height"
msgstr "PnS Dim Altezza"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Scaricamento sottotitoli in corso..."
+msgid "Downloading [%s] \"%s\""
+msgstr ""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1699,8 +1823,8 @@ msgid "No subtitles found."
msgstr "Nessun sottotitolo trovato."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d sottotitoli disponibili."
+msgid "%d subtitle(s) available."
+msgstr "%d sottotitoli disponibili."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1855,12 +1979,12 @@ msgid "Boss key"
msgstr "Tasto Boss"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Menù lettore (compatto)"
+msgid "Player Menu"
+msgstr ""
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Menù lettore (esteso)"
+msgid "Player Menu (full)"
+msgstr ""
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1871,20 +1995,20 @@ msgid "Options"
msgstr "Opzioni"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Audio Succ"
+msgid "Next Audio Track"
+msgstr ""
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Audio Prec"
+msgid "Prev Audio Track"
+msgstr ""
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Sottotitoli Succ"
+msgid "Next Subtitle Track"
+msgstr ""
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Sottotitoli Prec"
+msgid "Prev Subtitle Track"
+msgstr ""
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1894,22 +2018,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Ricarica sottotitoli"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Audio Succ (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Audio Prec (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Sottotitoli Succ (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Sottotitoli Prec (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Angolo Succ (DVD)"
@@ -1919,28 +2027,28 @@ msgid "Prev Angle (DVD)"
msgstr "Angolo Prec (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Audio Succ (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Audio Prec (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Sottotitoli Succ (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Sottotitoli Prec (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Sottotitoli On/Off (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Tempo residuo"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr ""
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1966,11 +2074,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Criptato"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Si"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "No"
@@ -2027,11 +2135,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volume: %02lu/%02lu, Titolo: %02lu/%02lu, Capitolo: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Angolazione: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %uHz %dbit %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2044,7 +2152,7 @@ msgstr "Riproduci con MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr ""
+msgstr "MPC-HC non ha privilegi sufficienti per modificare le associazioni ai file nei vari formati. Avvia il programma come amministratore."
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
@@ -2122,14 +2230,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Larghezza immagine"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "L'URL sembra corretta!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Incompatibilità versioni del protocollo, aggiorna il lettore o scegli un indirizzo diverso!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Proporzioni"
@@ -2139,19 +2239,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Totale: %ld, Scartati: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Dimensioni: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Dimensioni: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Liberi: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Liberi: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2223,8 +2323,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Le miniature sarebbero troppo piccole, impossibile creare il file.\n\nProvare a ridurre il numero di miniature o aumentare la dimensione totale."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Per caricare i sottotitoli devi cambiare il tipo di render video e riaprire il file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR o Haali\n- RealMedia: Render speciale per RealMedia, o aprilo tramite DirectShow\n- QuickTime: Render DX7 o DX9 per QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Per caricare i sottotitoli devi cambiare il tipo di render video e riaprire il file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR o Haali\n- RealMedia: Render speciale per RealMedia, o aprilo tramite DirectShow\n- QuickTime: Render DX7 o DX9 per QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2235,11 +2335,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Proporzioni: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Proporzioni: predefinite"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr ""
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Ritardo Audio: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2251,8 +2351,8 @@ msgid "Out of memory"
msgstr "Memoria insufficiente"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Errore: richiesto Flash per IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Errore: richiesto Flash per Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2274,10 +2374,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Impossibile visualizzare il file"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL non corretto, impossibile trovare il database di sottotitoli!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Capitolo: "
@@ -2298,14 +2394,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Corrente"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC si è chiuso inaspettatamente. Per aiutarci a sistemare il problema, invia questo file \"%s\" al nostro bug tracker.\n\nVuoi aprire la cartella contenente il minidump e visitare ora il bug tracker?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Impossibile creare il file di dump in '%s' (errore %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Seleziona cartella"
@@ -2323,7 +2411,7 @@ msgid "Toggle Caption&Menu"
msgstr "Mostra Titolo&Menù"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Mostra Barra di ricerca"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2479,8 +2567,8 @@ msgid "Volume boost Max"
msgstr "Amplificazione volume: massimo"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Utilizzo: mpc-hc.exe \"percorso\" [opzioni]\n\n\"percorso\"\tIl file o cartella principale da caricare\n\t\t(wildcards ammesse, \"-\" denotes standard input)\n/dub \"nomedub\"\tCarica un file audio aggiuntivo\n/dubdelay \"file\"\tCarica un file audio aggiuntivo con ritardo\n\t\tdi XXms (se il file contiene\n\t\t\"...DELAY XXms...\")\n/d3dfs\t\tInizia il rendering in modalità D3D a schermo\n\t\tintero\n/sub \"subname\"\tCarica un file di sottotitoli aggiuntivo\n/filter \"nomefiltro\"\tCarica i filtri DirectShow da una DLL\n\t\t(wildcards ammesse)\n/dvd\t\tAvvia in modalità dvd, \"percorso\" indica la\n\t\tcartella del dvd (opzionale)\n/dvdpos T#C\tInizia riproduzione al titolo T, capitolo C\n/dvdpos T#hh:mm\tInizia riproduzione al titolo T,\n\t\tposizione hh:mm:ss\n/cd\t\tCarica tutte le tracce di un cd audio o (s)vcd;\n\t\t\"percorso\" indica il percorso del drive\n\t\t(opzionale)\n/device\t\tOpen the default video device\n/open\t\tApre il file, senza iniziare la riproduzione\n/play\t\tInizia la riproduzione del file non appena il\n\t\tlettore viene aperto\n/close\t\tChiudi il lettore dopo la riproduzione\n\t\t(funziona solo insieme a /play)\n/shutdown\tSpegni il computer dopo la riproduzione\n/fullscreen\tAvvia a schermo intero\n/minimized\tAvvia minimizzato\n/new\t\tUsa una nuova istanza del lettore\n/add\t\tAggiunge \"percorso\" alla playlist, può essere\n\t\tin combinazione con /open e /play\n/regvid\t\tRegistra i formati video\n/regaud\t\tRegistra i formati audio\n/regpl\t\tCrea le associazioni dei file di tipo playlist\n/regall\t\tCrea le associazioni dei file per tutti i formati\n\t\tsupportati\n/unregall\t\tRimuove tutte le associazioni dei file\n/start ms\t\tInizia la riproduzione a \"ms\" (= millisecondi)\n/startpos hh:mm:ss\tInizia la riproduzione alla posizione hh:mm:ss\n/fixedsize w,h\tImposta la dimensione fissa della finestra\n/monitor N\tAvvia nello schermo N, dove N inizia da 1\n/audiorenderer N\tAvvia con renderer audio N, dove N inizia da 1\n\t\t(vedi impostazioni di \"Output\")\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRipristina le impostazioni predefinite\n/help /h /?\tVisualizza l'aiuto sulle opzioni a riga di comando\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2566,14 +2654,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Abilita tutti i filtri"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Scansione sintonizzatore"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Sottotitoli non caricati o renderer non supportato."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Autore sconosciuto. Contattaci se hai disegnato tu questo logo!"
@@ -2662,40 +2742,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Superiore posteriore destro"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Resetta Statistiche Display"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Sottotitoli::Misc"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Nascondi bordi"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Solo video"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Menù e intestazioni"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Nascondi menù"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Avanzate"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Sopra la barra di ricerca"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Sotto la barra di ricerca"
msgctxt "IDS_VIDEO_STREAM"
@@ -2863,8 +2915,8 @@ msgid "Other Audio"
msgstr "Altro Audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr ""
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2874,6 +2926,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr ""
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2938,22 +3010,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Playlist"
@@ -2978,18 +3034,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Proporzioni"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Usa WASAPI (richiede riavvio riproduzione)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Muto nell'avanti veloce"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Dispositivo audio:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: On"
@@ -3278,6 +3322,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Riguadagno volume: Off"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3335,7 +3383,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Errore nel parsing del frame rate inserito!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Impossibile generare i fotogrammi; tentare con un video renderer differente."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3354,10 +3402,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "Le funzioni 'Salva immagine' e 'Salva miniature' non sono compatibili con il video renderer Overlay Mixer.\nModifica il video renderer nelle opzioni di output di MPC-HC e riapri il file."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Impossibile connettersi al database di sottotitoli online."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Vuoi attivare l'editor EDL?"
@@ -3426,7 +3470,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "È necessario applicare le nuove impostazioni prima di poterle testare."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Dopo la riproduzione: Esci"
@@ -3454,6 +3498,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Dopo la riproduzione: Spegnere il monitor"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Dopo la riproduzione: esegui il prossimo file nella cartella"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Dopo la riproduzione: non fare nulla"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Luminosità: %s"
@@ -3516,21 +3568,405 @@ msgstr "Se si seleziona \"ultimo keyframe\", il primo keyframe viene cercato pri
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr ""
+msgstr "Associa con tutti i formati"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr ""
+msgstr "Associa solo con i formati video"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr ""
+msgstr "Associa solo con i formati audio"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr ""
+msgstr "Elimina tutte le associazioni"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Impostazioni"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Scarica sottotitoli"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Scarica && Apri"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Reimposta"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Sposta su"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Sposta giù"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ja.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ja.dialogs.po
index c1b6ef4e6..9313fef58 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ja.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ja.dialogs.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# ever_green, 2014
+# ever_green, 2014-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-28 02:20+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-05-06 02:24+0000\n"
"Last-Translator: ever_green\n"
-"Language-Team: Japanese (http://www.transifex.com/projects/p/mpc-hc/language/ja/)\n"
+"Language-Team: Japanese (http://www.transifex.com/mpc-hc/mpc-hc/language/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -66,7 +66,7 @@ msgstr "V/A バッファ:"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
msgid "Audio to wav"
-msgstr "音声: wav"
+msgstr "音声: WAV 形式"
msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
msgid "Record"
@@ -102,14 +102,14 @@ msgstr "44100 Hz にダウンサンプリングする"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
-msgstr "音声のタイム シフト (ms):"
+msgstr "音声のタイム シフト (ミリ秒):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
msgstr "カスタム チャンネル マッピングを有効にする"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "入力スピーカーの設定:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -117,16 +117,16 @@ msgid "input channels:"
msgstr "チャンネル"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Shift キーを押したままクリックすると、即座に変更されます"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
-msgstr "再生位置を移動..."
+msgstr "指定位置に移動..."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
-msgstr "指定した時間にジャンプするには [hh:]mm:ss.ms の形式を使用してタイムコードを入力してください。区切り文字を入力する必要はありません。"
+msgstr "指定時間にジャンプするには、[hh:]mm:ss.ms の形式を使用してタイムコードを入力してください。区切り記号を入力する必要はありません。"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Time"
@@ -138,7 +138,7 @@ msgstr "移動"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
-msgstr "フレーム番号、フレーム レートの順で数値を入力し、移動先のフレームを指定してください。"
+msgstr "指定フレームにジャンプするには、フレーム番号、フレーム レートの順に二つの数値を入力してください。"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Frame"
@@ -189,8 +189,8 @@ msgid "About"
msgstr "バージョン情報"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 (Authors.txt ファイルを参照)"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 (Authors.txt ファイルを参照)"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -286,7 +286,7 @@ msgstr "OSD を表示する (再起動が必要)"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
msgid "Limit window proportions on resize"
-msgstr "リサイズ時にウィンドウ サイズの縦横比を固定する"
+msgstr "サイズ変更時にウィンドウの縦横比を固定する"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
msgid "Snap to desktop edges"
@@ -338,7 +338,7 @@ msgstr "終了時のウィンドウ サイズを記憶する"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
msgid "Remember last Pan-n-Scan Zoom"
-msgstr "最近使ったパン&スキャンの拡大率を記憶する"
+msgstr "終了時のパン&スキャンの拡大率を記憶する"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
@@ -354,7 +354,7 @@ msgstr "常に既定の場所を開く:"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Preferred language for DVD Navigator and the external OGM Splitter"
-msgstr "DVD ナビゲータと外部 OGM スプリッタでの優先言語"
+msgstr "DVD ナビゲータおよび外部 OGM スプリッタでの優先言語"
msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
msgid "Menu"
@@ -414,19 +414,23 @@ msgstr "再生"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
msgid "Repeat forever"
-msgstr "連続再生"
+msgstr "連続再生(無限)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
msgid "time(s)"
msgstr "回"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "連続再生モード:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "再生終了後の動作"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "出力"
+msgid "Default zoom"
+msgstr "既定の拡大率"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -434,7 +438,7 @@ msgstr "自動拡大:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
-msgstr "自動調整の拡大率:"
+msgstr "自動調整の倍率:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
msgid "%"
@@ -454,7 +458,7 @@ msgstr "音声:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr "外部スプリッタでの選択を上書きできるようにする"
+msgstr "外部スプリッタでの選択の上書きを許可する"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
@@ -462,7 +466,7 @@ msgstr "開くの設定"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
msgid "Use worker thread to construct the filter graph"
-msgstr "フィルタ グラフの構築にワーカー スレッドを使用する"
+msgstr "フィルタ グラフを構築するためにワーカー スレッドを使用する"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
@@ -470,11 +474,7 @@ msgstr "表示できないピンを報告する"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
-msgstr "音声ファイルを自動で読み込む"
-
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "内蔵の字幕レンダラを使用する"
+msgstr "オーディオ ファイルを自動で読み込む"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
@@ -482,7 +482,7 @@ msgstr "コントロール"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Volume step:"
-msgstr "音量のステップ:"
+msgstr "音量調節のステップ:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "%"
@@ -490,7 +490,7 @@ msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Speed step:"
-msgstr "再生速度のステップ:"
+msgstr "速度調節のステップ:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
msgid "Override placement"
@@ -518,11 +518,11 @@ msgstr "遅延のステップ"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
-msgstr "ms"
+msgstr "ミリ秒"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Texture settings (open the video again to see the changes)"
-msgstr "テクスチャの設定 (変更を有効にするにはビデオを再度開いてください)"
+msgstr "テクスチャの設定 (変更を有効にするにはビデオを開き直してください)"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Sub pictures to buffer:"
@@ -554,7 +554,7 @@ msgstr "% でアニメーション化する"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr "キューが遅れて実行されている場合、サブピクチャのドロップを許可する"
+msgstr "キューが遅れて実行されている場合、サブピクチャの欠落を許可する"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
@@ -569,12 +569,12 @@ msgid "Warning"
msgstr "警告"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "ビデオカードの設定で全画面表示のアンチエイリアスを有効にした場合、CPU を消費するのみで字幕は少しも綺麗になりません。"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "字幕の配置を強制的に指定してビデオカードの設定で全画面表示のアンチエイリアスを有効にした場合、CPU を消費するのみで字幕は少しも綺麗になりません。"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
-msgstr "拡張子"
+msgstr "ファイル拡張子"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
msgid "Default"
@@ -590,7 +590,7 @@ msgstr "関連付け"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr "ファイル形式に固有のアイコンを使用する"
+msgstr "形式固有のアイコンを使用する"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
@@ -618,7 +618,7 @@ msgstr "DirectShow"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
msgid "Check file extension first"
-msgstr "最初に拡張子を判別する"
+msgstr "最初にファイル拡張子を判別する"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Explorer Context Menu"
@@ -650,11 +650,11 @@ msgstr "DVD"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
msgid "Audio CD"
-msgstr "オーディオ CD"
+msgstr "音楽 CD"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "Jump distances (small, medium, large in ms)"
-msgstr "ジャンプの間隔 (小, 中, 大 : ms 単位)"
+msgstr "ジャンプの間隔 (小, 中, 大 : ミリ秒単位)"
msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
msgid "Default"
@@ -670,23 +670,23 @@ msgstr "シーク バーにチャプター マークを表示する"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
-msgstr "「現在再生中」 のファイル情報を Skype のムード メッセージに表示する"
+msgstr "「再生中」 のファイル情報を Skype のムード メッセージに表示する"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
-msgstr "既定のモニタ以外で全画面表示している場合、プレーヤーを最小化しない"
+msgstr "既定のモニタ以外で全画面表示している場合、プレーヤーを最小化できないようにする"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Windows 7 のタスクバーの機能を使用する"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "タスク バーの拡張機能を使用する"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "一つの項目のみが再生リストに残っている場合、 「前へ/次へ」 でフォルダ内の前/次のファイルを開く"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "再生リスト内に項目が一つしかない場合、 「前に戻る/次に進む」 でフォルダ内の前/次のファイルを開く"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "タイム ツールチップを使用する:"
+msgid "Show time tooltip:"
+msgstr "タイム ツールチップを表示する:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
@@ -742,7 +742,7 @@ msgstr "削除"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
msgid "Reset List"
-msgstr "リストをリセット"
+msgstr "一覧をリセット"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Type:"
@@ -790,7 +790,7 @@ msgstr "説明:"
msgctxt "IDD_FAVADD_CAPTION"
msgid "Add Favorite"
-msgstr "お気に入りの追加"
+msgstr "お気に入りに追加"
msgctxt "IDD_FAVADD_IDC_STATIC"
msgid "Choose a name for your shortcut:"
@@ -822,11 +822,11 @@ msgstr "名前の変更"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
msgid "Move Up"
-msgstr "上へ"
+msgstr "上へ移動"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
msgid "Move Down"
-msgstr "下へ"
+msgstr "下へ移動"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
msgid "Delete"
@@ -926,11 +926,11 @@ msgstr "遅延:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
msgid "ms"
-msgstr "ms"
+msgstr "ミリ秒"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
msgid "Save custom style"
-msgstr "ユーザー設定のスタイルを保存"
+msgstr "カスタム スタイルを保存する"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
@@ -990,15 +990,15 @@ msgstr "角度 (z,°)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Scale (x,%)"
-msgstr "サイズ (x,%)"
+msgstr "スケール (x,%)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Scale (y,%)"
-msgstr "サイズ (y,%)"
+msgstr "スケール (y,%)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Border Style"
-msgstr "境界のスタイル"
+msgstr "境界線のスタイル"
msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
msgid "Outline"
@@ -1006,11 +1006,11 @@ msgstr "輪郭"
msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
msgid "Opaque box"
-msgstr "不透明な四角"
+msgstr "不透明なボックス"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Width"
-msgstr "境界の幅"
+msgstr "太さ"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Shadow"
@@ -1070,7 +1070,7 @@ msgstr "アルファ チャンネルを連動させる"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
-msgstr "スタンドアロン版や代替フィルタを使用する場合、該当する箇所を無効にしてください。"
+msgstr "スタンドアロン版や代替フィルタを使用したい場合、ここで該当する箇所を無効にしてください。"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Source Filters"
@@ -1125,8 +1125,8 @@ msgid "Audio Renderer"
msgstr "オーディオ レンダラ"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (レンダーレス) と EVR (カスタム プレゼンタ) の設定"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (レンダーレス) および EVR (カスタム プレゼンタ) の設定"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1134,15 +1134,15 @@ msgstr "サーフェス:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Resizer:"
-msgstr "補間方法:"
+msgstr "リサイザ:"
msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
msgid "Select D3D9 Render Device"
-msgstr "Direct3D 9 レンダラ デバイスを選択"
+msgstr "Direct3D 9 レンダラ デバイスを選択する"
msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
msgid "Reinitialize when changing display"
-msgstr "表示変更時に再初期化する"
+msgstr "ディスプレイ変更時に再初期化する"
msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
msgid "D3D Fullscreen"
@@ -1169,8 +1169,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "字幕 *"
+msgid "Subtitles"
+msgstr "字幕"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1185,8 +1185,12 @@ msgid "Rotation"
msgstr "回転"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* 外部フィルタ (例えば VSFilter) は、すべてのレンダラに字幕を表示できます。"
+msgid "Subtitle Renderer"
+msgstr "字幕レンダラ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "コンパイルされたシェーダをキャッシュする"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1204,13 +1208,17 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "ローカルホストからの接続のみを許可する"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "プレビューを有効にする"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "デバッグ情報を表示する"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
msgid "Serve pages from:"
-msgstr "サーバのルート ディレクトリ:"
+msgstr "サーバーのルート ディレクトリ:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
msgid "Browse..."
@@ -1229,24 +1237,52 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI ハンドラ: (拡張子1=パス1; 拡張子2=パス2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "オンラインで利用できる字幕"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "ダウンロードして開く"
+msgid "Download subtitles"
+msgstr "字幕をダウンロード"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "現在読み込まれている字幕を置き換える"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "ダウンロード"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "更新"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "中止"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "オプション"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "字幕をアップロード"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "アップロード"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "中止"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "オプション"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "名前を付けて保存..."
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Color controls (for VMR-9, EVR and madVR)"
-msgstr "カラー コントロール (VMR-9, EVR 及び madVR 用)"
+msgstr "カラー コントロール (VMR-9, EVR および madVR 用)"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Brightness"
@@ -1274,11 +1310,11 @@ msgstr "更新の確認"
msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
msgid "Enable automatic update check"
-msgstr "自動更新の確認を有効にする"
+msgstr "更新を自動的に確認する"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "確認の間隔:"
+msgid "Check every:"
+msgstr "確認する間隔:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1298,7 +1334,7 @@ msgstr "エクスポート"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
msgid "Export keys"
-msgstr "キーバインドをエクスポート"
+msgstr "キーをエクスポート"
msgctxt "IDD_TUNER_SCAN_CAPTION"
msgid "Tuner scan"
@@ -1434,7 +1470,7 @@ msgstr "目標同期オフセット:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
msgid "ms"
-msgstr "ms"
+msgstr "ミリ秒"
msgctxt "IDD_PPAGESYNC_IDC_STATIC7"
msgid "Control limits:"
@@ -1446,11 +1482,11 @@ msgstr "+/-"
msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
msgid "ms"
-msgstr "ms"
+msgstr "ミリ秒"
msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
msgid "Changes take effect after the playback has been closed and restarted."
-msgstr "再生を終了してファイルを再度開いた後に変更が有効になります。"
+msgstr "ファイルを開き直すと、変更が有効になります。"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
msgid "Launch files in fullscreen"
@@ -1462,7 +1498,7 @@ msgstr "全画面表示でコントロールを隠す"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
msgid "ms"
-msgstr "ms"
+msgstr "ミリ秒"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
msgid "Hide docked panels"
@@ -1510,7 +1546,7 @@ msgstr "遅延"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
msgid "s"
-msgstr "s"
+msgstr "秒"
msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
msgid "Info"
@@ -1522,35 +1558,47 @@ msgstr "スキャン"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
msgid "Prefer forced and/or default subtitles tracks"
-msgstr "強制字幕及び既定の字幕トラックまたはそのどちらかを選択する"
+msgstr "強制字幕トラックおよびまたは既定の字幕トラックを優先する"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
msgid "Prefer external subtitles over embedded subtitles"
-msgstr "埋め込まれた字幕ではなく外部字幕を選択する"
+msgstr "埋め込まれた字幕ではなく外部字幕を優先する"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
-msgstr "埋め込まれた字幕を読み込まない"
+msgstr "埋め込まれた字幕を無視する"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
msgid "Autoload paths"
-msgstr "字幕ファイルの自動読み込みパスを指定"
+msgstr "字幕ファイルの自動読み込みパス"
msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
msgid "Reset"
msgstr "リセット"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "オンライン データベース"
+msgid "Online search, download and upload subtitles"
+msgstr "字幕のオンライン検索, ダウンロードおよびアップロード"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "ローカルで何も見つからない場合、字幕を自動的に検索してダウンロードする"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "聴覚障害者用の字幕を優先する (字幕プロバイダによって示された場合)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "次の単語のいずれかを含むファイルを無視する:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "オンライン字幕データベースの基本 URL:"
+msgid "Languages in order of preference:"
+msgstr "言語の優先順位:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "テスト"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "ビデオの再生終了時にアクティブな字幕を自動的にアップロードする"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1582,11 +1630,11 @@ msgstr "消去"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
msgid "Add to pre-resize"
-msgstr "リサイズ前のシェーダに追加"
+msgstr "サイズ変更前のシェーダに追加"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
msgid "Add to post-resize"
-msgstr "リサイズ後のシェーダに追加"
+msgstr "サイズ変更後のシェーダに追加"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
@@ -1606,11 +1654,11 @@ msgstr "削除"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active pre-resize shaders"
-msgstr "アクティブなリサイズ前のシェーダ"
+msgstr "アクティブなサイズ変更前のシェーダ"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active post-resize shaders"
-msgstr "アクティブなリサイズ後のシェーダ"
+msgstr "アクティブなサイズ変更後のシェーダ"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
@@ -1652,6 +1700,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "既定"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "デバイス"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "排他モード"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "ビットストリーミングを許可する"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "オプション"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "ステレオ クロスフィードを有効にする (ヘッドフォン用)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "カットオフ:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "レベル:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "注意"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "音声の歪みを最小限に抑えるために、大音量の非可逆エンコードされたコンテンツを再生する場合、プレーヤーの音量を約 85% に維持することを推奨します。"
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG の品質:"
@@ -1664,3 +1756,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "クラッシュ レポート"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "申し訳ありません。 MPC-HC がクラッシュしました。"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "問題の診断と修正に役立てるためにバグ レポートを送信する。"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "オプションの情報"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "電子メール:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "電子メールのアドレスは任意であり、開発者がより多くの情報を得るために連絡する必要がある場合にのみ使用されます。"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "問題の詳細 (英語のみを使用してください):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "MPC-HC を再起動"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "MPC-HC を終了"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ja.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ja.menus.po
index 9bfc57125..c9c9b1da4 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ja.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ja.menus.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# ever_green, 2014
+# ever_green, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-27 11:57+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-11-11 21:54+0000\n"
"Last-Translator: ever_green\n"
-"Language-Team: Japanese (http://www.transifex.com/projects/p/mpc-hc/language/ja/)\n"
+"Language-Team: Japanese (http://www.transifex.com/mpc-hc/mpc-hc/language/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +64,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "サムネイルを保存(&T)..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "字幕(&U)"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
msgstr "字幕を読み込む(&L)..."
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
msgstr "字幕を保存(&U)..."
-msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "字幕データベース(&B)"
-
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "検索(&S)..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "字幕をダウンロード(&D)..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "アップロード(&U)..."
-
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "ダウンロード(&D)..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "字幕をアップロード(&U)..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -102,7 +98,7 @@ msgstr "表示(&V)"
msgctxt "ID_VIEW_CAPTIONMENU"
msgid "Caption&&Menu"
-msgstr "タイトルとメニュー(&M)"
+msgstr "タイトル バーとメニュー バー(&M)"
msgctxt "ID_VIEW_SEEKER"
msgid "See&k Bar"
@@ -186,7 +182,7 @@ msgstr "自動調整(&F)"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "自動調整 (超過サイズのみ) (&L)"
+msgstr "自動調整 (超過サイズのみ)(&L)"
msgctxt "POPUP"
msgid "R&enderer Settings"
@@ -196,13 +192,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "テアリング テスト(&T)"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "レンダラ統計情報(&D)"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "統計情報を表示(&D)"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "現在の再生時間を表示(&I)"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "残り時間(&R)"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "ファイル名を表示(&F)"
msgctxt "POPUP"
msgid "&Output Range"
@@ -218,7 +218,7 @@ msgstr "16 - 235(&1)"
msgctxt "POPUP"
msgid "&Presentation"
-msgstr "プレゼンテーション(&P)"
+msgstr "表示(&P)"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
@@ -282,23 +282,23 @@ msgstr "SDTV PAL(&P)"
msgctxt "POPUP"
msgid "Ambient &Light"
-msgstr "アンビエント ライト(&L)"
+msgstr "環境光(&L)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
-msgstr "明るい (ガンマ 2.2) (&B)"
+msgstr "明るい (ガンマ 2.2)(&B)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
msgid "&Dim (2.35 Gamma)"
-msgstr "薄暗い (ガンマ 2.35) (&D)"
+msgstr "薄暗い (ガンマ 2.35)(&D)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
-msgstr "暗い (ガンマ 2.4) (&A)"
+msgstr "暗い (ガンマ 2.4)(&A)"
msgctxt "POPUP"
msgid "&Rendering Intent"
-msgstr "色空間変換の方法(&R)"
+msgstr "レンダリングの目的(&R)"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
@@ -306,7 +306,7 @@ msgstr "知覚的(&P)"
msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
msgid "&Relative Colorimetric"
-msgstr "相対的な色域を維持(&R)"
+msgstr "相対カラーメトリック(&R)"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
@@ -314,7 +314,7 @@ msgstr "彩度(&S)"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
-msgstr "絶対的な色域を維持(&A)"
+msgstr "絶対カラーメトリック(&A)"
msgctxt "POPUP"
msgid "&VSync"
@@ -386,11 +386,11 @@ msgstr "2 倍のサイズ(&D)"
msgctxt "ID_VIEW_VF_STRETCH"
msgid "&Stretch To Window"
-msgstr "ウィンドウ サイズに変形(&S)"
+msgstr "ウィンドウの大きさに広げる(&S)"
msgctxt "ID_VIEW_VF_FROMINSIDE"
msgid "Touch Window From &Inside"
-msgstr "ウィンドウ サイズに合わせる(&I)"
+msgstr "ウィンドウに内接させる(&I)"
msgctxt "ID_VIEW_VF_ZOOM1"
msgid "Zoom &1"
@@ -402,19 +402,15 @@ msgstr "拡大 2(&2)"
msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
-msgstr "縦か横に合わせてカット(&O)"
-
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "縦横比を保持(&K)"
+msgstr "ウィンドウに外接させる(&O)"
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "縦横比を調整(&A)"
+msgid "&Aspect Ratio"
+msgstr "縦横比(&A)"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "標準(&D)"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "標準 (DAR)(&D)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,6 +432,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100(&8)"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "正方形ピクセルを想定 (SAR)(&S)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "モニタとデスクトップの縦横比の相違を補正(&C)"
@@ -498,7 +498,7 @@ msgstr "手前に表示(&T)"
msgctxt "ID_ONTOP_DEFAULT"
msgid "&Default"
-msgstr "しない(&D)"
+msgstr "標準(&D)"
msgctxt "ID_ONTOP_ALWAYS"
msgid "&Always"
@@ -510,7 +510,7 @@ msgstr "再生中(&P)"
msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
msgid "While Playing &Video"
-msgstr "ビデオを再生中(&V)"
+msgstr "ビデオの再生中(&V)"
msgctxt "ID_VIEW_OPTIONS"
msgid "&Options..."
@@ -529,8 +529,24 @@ msgid "&Stop"
msgstr "停止(&S)"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
-msgstr "コマ送り(&R)"
+msgid "Fra&me Step"
+msgstr "コマ送り(&M)"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "連続再生(&R)"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "無限(&O)"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "ファイル(&F)"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "再生リスト(&P)"
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
@@ -553,16 +569,16 @@ msgid "S&haders"
msgstr "シェーダ(&H)"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "音声(&A)"
+msgid "&Audio Track"
+msgstr "音声トラック(&A)"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "字幕(&B)"
+msgid "Su&btitle Track"
+msgstr "字幕トラック(&B)"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "ビデオ ストリーム(&V)"
+msgid "Vide&o Track"
+msgstr "映像トラック(&O)"
msgctxt "POPUP"
msgid "&Volume"
@@ -584,7 +600,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "再生終了後の動作(&T)"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "何もしない(&T)"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "フォルダ内を順次再生する(&N)"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "モニタの電源を切る(&M)"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "終了(&E)"
@@ -608,10 +636,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "ロック(&L)"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "モニタの電源を切る(&M)"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "操作(&N)"
@@ -626,7 +650,7 @@ msgstr "次へ(&N)"
msgctxt "ID_NAVIGATE_GOTO"
msgid "&Go To..."
-msgstr "再生位置を移動(&G)..."
+msgstr "指定位置に移動(&G)..."
msgctxt "ID_NAVIGATE_TITLEMENU"
msgid "&Title Menu"
@@ -662,11 +686,11 @@ msgstr "ヘルプ(&H)"
msgctxt "ID_HELP_HOMEPAGE"
msgid "&Home Page"
-msgstr "ホームページ(&H)"
+msgstr "ホーム ページ(&H)"
msgctxt "ID_HELP_CHECKFORUPDATE"
msgid "Check for &updates"
-msgstr "更新を確認する(&U)"
+msgstr "更新の確認(&U)"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
@@ -674,11 +698,11 @@ msgstr "コマンド ライン スイッチ(&C)"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
-msgstr "ツールバーの画像をダウンロード(&T)"
+msgstr "ツール バーの画像をダウンロード(&T)"
msgctxt "ID_HELP_DONATE"
msgid "&Donate"
-msgstr "寄付する(&D)"
+msgstr "寄付(&D)"
msgctxt "ID_HELP_ABOUT"
msgid "&About..."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ja.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ja.strings.po
index 7483a9796..dd4d17907 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ja.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ja.strings.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# ever_green, 2014
+# Asakura, 2016
+# ever_green, 2014-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-02 11:31+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-05 09:10+0000\n"
"Last-Translator: ever_green\n"
-"Language-Team: Japanese (http://www.transifex.com/projects/p/mpc-hc/language/ja/)\n"
+"Language-Team: Japanese (http://www.transifex.com/mpc-hc/mpc-hc/language/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -50,7 +51,7 @@ msgstr "音楽の再生"
msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
msgid "Play Audio CD"
-msgstr "オーディオ CD の再生"
+msgstr "音楽 CD の再生"
msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
msgid "Play DVD Movie"
@@ -60,10 +61,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "プロパティ"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "ファイル"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "既定のスタイル(&D)"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "再生リスト"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "ファイル"
@@ -114,7 +123,27 @@ msgstr "スタイル"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "レンダリング ターゲットが定義されていない場合、SSA/ ASS 字幕は、ビデオ フレームに対して表示されますが、その他すべてのテキスト字幕は、ウィンドウに対して表示されます。"
+msgstr "レンダリング ターゲットが定義されていない場合、SSA/ASS 字幕は、ビデオ フレームに対して表示されますが、その他すべてのテキスト字幕は、ウィンドウに対して表示されます。"
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "連続再生モード: 再生リスト"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "連続再生モード: ファイル"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "連続再生(無限): オン"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "連続再生(無限): オフ"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "連続再生(無限)"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
@@ -122,7 +151,7 @@ msgstr "何もしない (最速のアプローチ)"
msgctxt "IDS_PPAGE_CAPTURE_FG1"
msgid "Only when switching different video types (default)"
-msgstr "異なるビデオ タイプに切り替える場合にのみ (既定)"
+msgstr "異なるビデオ タイプに切り替えた場合にのみ (既定)"
msgctxt "IDS_PPAGE_CAPTURE_FG2"
msgid "Always (slowest option)"
@@ -134,7 +163,7 @@ msgstr "一部のデバイスでサポートされていない。二つのビデ
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr "異なるビデオ ストリームに切り替える場合を除いて速い。一つのビデオ デコーダのみがフィルタ グラフに存在する。"
+msgstr "異なるビデオ ストリームに切り替えた場合を除いて速い。一つのビデオ デコーダのみがフィルタ グラフに存在する。"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
@@ -146,7 +175,7 @@ msgstr "できれば使用しない (最速だが、ほとんどのフィルタ
msgctxt "IDS_PPAGE_CAPTURE_SFG1"
msgid "Only when switching different video types (default)"
-msgstr "異なるビデオ タイプに切り替える場合にのみ (既定)"
+msgstr "異なるビデオ タイプに切り替えた場合にのみ (既定)"
msgctxt "IDS_PPAGE_CAPTURE_SFG2"
msgid "Always (may be required by some devices)"
@@ -178,7 +207,7 @@ msgstr "ニュース/時事"
msgctxt "IDS_SPEED_UNIT_G"
msgid "GB/s"
-msgstr "GB/s"
+msgstr "GB/秒"
msgctxt "IDS_FILE_FAV_ADDED"
msgid "File added to favorites"
@@ -242,7 +271,7 @@ msgstr "DVD ナビゲータ フィルタの一部のピンを表示できませ
msgctxt "IDS_DVD_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for DVD playback"
-msgstr "DVD の再生に必要なインタフェースの問合せができませんでした"
+msgstr "DVD の再生に必要なインターフェイスの問合せができませんでした"
msgctxt "IDS_CAPTURE_LIVE"
msgid "Live"
@@ -254,7 +283,7 @@ msgstr "グラフに ビデオ キャプチャ フィルタを追加できませ
msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
msgid "Can't add audio capture filter to the graph"
-msgstr "グラフに オーディオ キャプチャ フィルタを追加できません"
+msgstr "グラフにオーディオ キャプチャ フィルタを追加できません"
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
@@ -266,11 +295,11 @@ msgstr "開けません。無効な入力パラメータです"
msgctxt "IDS_EDIT_LIST_EDITOR"
msgid "Edit List Editor"
-msgstr "編集リストエディタ"
+msgstr "編集リスト エディタ"
msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
msgid "The entered time is greater than the file duration."
-msgstr "入力した時間がファイルの再生時間よりも大きくなっています。"
+msgstr "入力された時間がファイルの再生時間よりも大きくなっています。"
msgctxt "IDS_MISSING_ICONS_LIB"
msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
@@ -286,7 +315,7 @@ msgstr "言語"
msgctxt "IDS_SUBDL_DLG_FORMAT_COL"
msgid "Format"
-msgstr "ファイル形式"
+msgstr "形式"
msgctxt "IDS_SUBDL_DLG_DISC_COL"
msgid "Disc"
@@ -325,12 +354,12 @@ msgid "On/Off"
msgstr "オン/オフ"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "fps から"
+msgid "From (FPS)"
+msgstr "(FPS) から"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "fps へ"
+msgid "To (FPS)"
+msgstr "(FPS) まで"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -350,7 +379,7 @@ msgstr "システムの既定"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
-msgstr "再生に必要なインタフェースの問合せができませんでした"
+msgstr "再生に必要なインターフェイスの問合せができませんでした"
msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
msgid "Could not set target window for graph notification"
@@ -386,11 +415,11 @@ msgstr "名前を付けて保存(&S)..."
msgctxt "IDS_PLAYLIST_SORTBYLABEL"
msgid "Sort by &label"
-msgstr "名前順で並び替え(&L)"
+msgstr "名前順に並べ替える(&L)"
msgctxt "IDS_PLAYLIST_SORTBYPATH"
msgid "Sort by &path"
-msgstr "パス順で並び替え(&P)"
+msgstr "パス順に並べ替える(&P)"
msgctxt "IDS_PLAYLIST_RANDOMIZE"
msgid "R&andomize"
@@ -446,7 +475,7 @@ msgstr "字幕"
msgctxt "IDD_PPAGEFORMATS"
msgid "Player::Formats"
-msgstr "プレーヤー::ファイル形式"
+msgstr "プレーヤー::形式"
msgctxt "IDD_PPAGETWEAKS"
msgid "Tweaks"
@@ -464,6 +493,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "再生::シェーダ"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "リソース"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "その他"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "再生::キャプチャ"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "再生::同期レンダラの設定"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "再生::全画面表示"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "内部フィルタ::オーディオ レンダラ"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "音声切り替え"
@@ -488,18 +545,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "オーバーレイ ミキサ レンダラ"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "VMR-7 (ウィンドウ)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "VMR-9 (ウィンドウ)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "VMR-7 (レンダーレス)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "VMR-9 (レンダーレス)"
@@ -514,15 +563,15 @@ msgstr "EVR (カスタム プレゼンタ)"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
-msgstr "Haali ビデオ レンダラ"
+msgstr "Haali Video Renderer"
msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
msgid "Null (anything)"
-msgstr "無効 (すべて)"
+msgstr "Null (すべて)"
msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr "無効 (無圧縮)"
+msgstr "Null (非圧縮)"
msgctxt "IDS_PPAGE_OUTPUT_MADVR"
msgid "madVR"
@@ -530,7 +579,7 @@ msgstr "madVR"
msgctxt "IDD_PPAGEACCELTBL"
msgid "Player::Keys"
-msgstr "プレーヤー::キーバインド"
+msgstr "プレーヤー::キー"
msgctxt "IDD_PPAGESUBSTYLE"
msgid "Subtitles::Default Style"
@@ -552,34 +601,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "プレーヤー::ウェブ インターフェイス"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "字幕::データベース"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "リソース"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "その他"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "メディア情報"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "再生::キャプチャ"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "再生::同期レンダラの設定"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "再生::全画面表示"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "詳細"
@@ -600,33 +621,25 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "常にオーバーレイで表示します。YUV 形式の場合、RGB に色変換することなく直接表示します。これはすべての中で最も高速な表示方法で、確実にフルスクリーン ビデオ ミラーリングでテレビ出力できる唯一の方法です。"
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Windows XP の標準レンダラです。オーバーレイ ミキサよりも少し遅いですが、非常に安定しています。 DirectDraw を使用して可能ならオーバーレイで動作します。"
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "DirectX 9 がインストールされている場合にのみ使用できます。VMR-7 (ウィンドウ) と同等ですが、オーバーレイで表示しないため VMR-7 (ウィンドウ) より少し遅くなる場合があります。"
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "VMR-7 (ウィンドウ) と同じですが、字幕用の MPC-HC のアロケータ プレゼンタ プラグインを備えています。オーバーレイのビデオ ミラーリングは動作しません。デスクトップの色数を 「True Color」 にする事が推奨されます。"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "DirectX 9 がインストールされている場合にのみ使用できます。とても安定していますが、オーバーレイで表示しないためオーバーレイ ミキサより少し遅くなる場合があります。"
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
-msgstr "VMR-9 (ウィンドウ) と同じですが、字幕用の MPC-HC のアロケータ プレゼンタ プラグインを備えています。オーバーレイのビデオ ミラーリングは動作することがあります。デスクトップの色数を 「True Color」 にする事が推奨されます。Windows XP を推奨します。"
+msgstr "VMR-9 (ウィンドウ) と同じですが、字幕用の MPC-HC のアロケータ プレゼンタ プラグインを備えています。オーバーレイのビデオ ミラーリングは動作することがあります。デスクトップの色数を 「True Color」 にする事を推奨します。Windows XP で推奨します。"
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
-msgstr "VMR-9 (レンダーレス) と同じですが、真の 2 パス バイキュービック リサイザを使用します。"
+msgstr "VMR-9 (レンダーレス) と同じですが、有効な 2 パス バイキュービック リサイザを使用します。"
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "どんな動画のようなメディアタイプにも接続し、入力サンプルをどこにも出力しません。映像の表示が不要で、CPU に無駄な動作をさせたくない場合に使用してください。"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "どんな動画のようなメディア タイプにも接続して入力サンプルをどこにも出力しません。映像の表示が不要で、CPU に無駄な動作をさせたくない場合に使用してください。"
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
-msgstr "無効 (すべて) と同じですが、こちらは無圧縮タイプにのみ接続します。"
+msgstr "標準の Null レンダラと同じですが、これは非圧縮タイプにのみ接続します。"
msgctxt "IDC_DSEVR"
msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
@@ -634,7 +647,7 @@ msgstr "Vista 以降で、または少なくとも .NET Framework 3.5 をイン
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr "EVR と同じですが、字幕および後処理用の MPC-HC のアロケータ プレゼンタを備えています。Windows Vista 以降を推奨します。"
+msgstr "EVR と同じですが、字幕およびポストプロセッシング用の MPC-HC のアロケータ プレゼンタを備えています。Windows Vista 以降で推奨します。"
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
@@ -648,21 +661,13 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Real 独自のレンダラです。相互作用はないですが、SMIL スクリプトは動作します。DirectDraw を使用して可能ならオーバーレイで動作します。"
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "VMR-7 (レンダーレス) の DirectX 7 ベースのアロケータ プレゼンタで表示される Real 用の出力エンジンです。"
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "VMR-9 (レンダーレス) の DirectX 9 ベースのアロケータ プレゼンタで表示される Real 用の出力エンジンです。"
msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
-msgstr "QuickTime 独自のレンダラです。映像の表示領域がリサイズされたり、他のウィンドウによって部分的に隠されたりすると少し遅くなります。オーバーレイが使用できない場合、 GDI が使用されます。"
-
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "VMR-7 (レンダーレス) の DirectX 7 ベースのアロケータ プレゼンタで表示される QuickTime 用の出力エンジンです。"
+msgstr "QuickTime 独自のレンダラです。ビデオの表示領域がサイズ変更されたり、他のウィンドウによって部分的に隠されたりすると少し遅くなります。オーバーレイが使用できない場合、 GDI が使用されます。"
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
@@ -672,22 +677,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "ビデオ サーフェスを通常のオフスクリーン サーフェスとして割り当てます。"
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC オーディオ レンダラは壊れています。使用しないでください。"
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "同期レンダラ"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - バグを報告"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC は予期せずに終了しましたが、このビルドはデバッグ情報なしでコンパイルされています。\nこのバグを報告するには、最初に公式ビルドを試してみるべきです。\n\n今すぐダウンロード ページに移動しますか?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "通常のオフスクリーン プレーン サーフェス"
@@ -734,15 +727,15 @@ msgstr "選択されたレンダラはインストールされていません。
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
-msgstr "無効 (すべて)"
+msgstr "Null (すべて)"
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr "無効 (無圧縮)"
+msgstr "Null (非圧縮)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC オーディオ レンダラ"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "内部オーディオ レンダラ"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -754,15 +747,19 @@ msgstr "MIME タイプ"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr "お使いのブラウザに埋め込まれたリソースを表示するためには、ウェブ インターフェイスを有効にする必要があります。\n\n情報のみを保存したい場合、 「名前を付けて保存」 ボタンを使用します。"
+msgstr "ご使用のブラウザに埋め込まれたリソースを表示するためには、ウェブ インターフェイスを有効にする必要があります。\n\n情報のみを保存したい場合、 「名前を付けて保存」 ボタンを使用します。"
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "字幕をダウンロード"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "字幕をダウンロード..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "字幕をアップロード..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
-msgstr "遅延 (ms):"
+msgstr "遅延 (ミリ秒):"
msgctxt "IDS_SPEEDSTEP_AUTO"
msgid "Auto"
@@ -789,8 +786,8 @@ msgid "Couldn't find all archive volumes"
msgstr "すべてのアーカイブ ボリュームを見つけられませんでした"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "ビデオ サーフェスをテクスチャとして割り当てますが、バックバッファへのコピーと伸張には 2D 関数を使用します。少なくとも映像の解像度の表示で、32 ビット、RGBA、2 の累乗でないサイズのテクスチャを割り当てることができるビデオカードが必要です。"
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "ビデオ サーフェスをテクスチャとして割り当てますが、バックバッファへのコピーと伸張には 2D 関数を使用します。少なくともビデオの解像度の表示で、32 ビット、RGBA、2 の累乗でないサイズのテクスチャを割り当てることができるビデオ カードが必要です。"
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
@@ -798,11 +795,11 @@ msgstr "ビデオ サーフェスをテクスチャとして割り当て、3D
msgctxt "IDC_DX9RESIZER_COMBO"
msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
-msgstr "ピクセル シェーダ 2.0 をサポートしていない場合、自動で単純な線形補間が使用されます。"
+msgstr "ピクセル シェーダ 2.0 をサポートしていない場合、単純な線形補間が自動的に使用されます。"
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
-msgstr "VMR-9 (レンダーレス) をミキサ モードに設定すると、プロパティ ページのコントロールの大部分が動作し、レンダラ フレームに別々のワーカー スレッドを使用します。"
+msgstr "VMR-9 (レンダーレス) をミキサ モードに設定すると、プロパティ ページのコントロールの大部分が動作してレンダラ フレームに別々のワーカー スレッドを使用します。"
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
@@ -810,12 +807,24 @@ msgstr "レンダラの互換性を犠牲にしてパフォーマンスを向上
msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
msgid "Reduces tearing but prevents the toolbar from being shown."
-msgstr "テアリングを減らしますが、ツールバーを表示できません。"
+msgstr "テアリングを減らしますが、ツール バーが表示されなくなります。"
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Direct3D に内蔵されている既定の垂直同期をバイパスすることによってテアリングを減らします。"
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "チューナー検出"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "字幕が読み込まれていないかサポートされていないレンダラを使用しています。"
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "読み込み時間を短縮するためにローカルの AppData にコンパイルされたシェーダを保存します。"
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "VTS_xx_x.vob ファイルをまとめて読み込むには VTS_xx_0.ifo ファイルを開きます"
@@ -830,7 +839,7 @@ msgstr "LAV Filters を使用します"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr "LAV Filters を使用します。マイクロソフトのフィルタがこれらのファイル形式にはより安定しているので、既定で無効になりました。\n内部フィルタを使用する場合、より良い再生環境を得るためにソースとデコードでこれらを有効にしてください。"
+msgstr "LAV Filters を使用します。マイクロソフトのフィルタがこれらの形式にはより安定しているので、既定で無効になりました。\n内部フィルタを使用する場合、より良い再生環境を得るためにソースおよびデコードでこれらを有効にしてください。"
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
@@ -850,11 +859,11 @@ msgstr "字幕アニメーションを許可しません。このオプション
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr "バッファリングされるサブピクチャ数を増やすと、一般的に GPU 上でビデオ RAM の使用率をより高くして、レンダリングのパフォーマンスを向上させる必要があります。 "
+msgstr "バッファリングされるサブピクチャ数を増やすと、一般的に GPU 上でビデオ RAM の使用率をより高くしてレンダリングのパフォーマンスを向上させる必要があります。 "
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
-msgstr "このボタンをクリックすると、MPC-HC の実際のファイル関連付けがファイル形式グループのチェック状態に反映されます。新しく拡張子が追加されると大抵チェック ボックスは灰色になりますので、このダイアログを閉じる前に必ずに再度チェックしてください。"
+msgstr "このボタンをクリックすると、MPC-HC の実際のファイルの関連付けが形式グループのチェックの状態に反映されます。新しく拡張子を追加すると、通常チェック ボックスは灰色表示になるので、このダイアログを閉じる前に必ず再度チェックしてください。"
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
@@ -888,7 +897,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "ミュート"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "ミュート解除"
@@ -898,11 +907,11 @@ msgstr "音声なし"
msgctxt "ID_NAVIGATE_SKIPBACK"
msgid "Skip back\nSkip back"
-msgstr "前へ\n前へ"
+msgstr "前に戻る\n前に戻る"
msgctxt "ID_NAVIGATE_SKIPFORWARD"
msgid "Skip forward\nSkip forward"
-msgstr "次へ\n次へ"
+msgstr "次に進む\n次に進む"
msgctxt "IDS_SUBRESYNC_ORIGINAL"
msgid "&Original"
@@ -953,12 +962,12 @@ msgid "&Organize Favorites..."
msgstr "お気に入りの整理(&O)..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "シャッフル"
+msgid "Sh&uffle"
+msgstr "シャッフル(&U)"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "ファイルの場所を開く"
+msgid "Ope&n file location"
+msgstr "ファイルの場所を開く(&N)"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -978,11 +987,11 @@ msgstr "EDL 新しいクリップ"
msgctxt "IDS_RECENT_FILES_CLEAR"
msgid "&Clear list"
-msgstr "リストをクリア"
+msgstr "一覧をクリア(&C)"
msgctxt "IDS_RECENT_FILES_QUESTION"
msgid "Are you sure that you want to delete recent files list?"
-msgstr "最近使ったファイルのリストを削除しますか?"
+msgstr "最近使ったファイルの一覧を削除してもよろしいですか?"
msgctxt "IDS_AG_EDL_SAVE"
msgid "EDL save"
@@ -1006,7 +1015,7 @@ msgstr "EDL 終了点を設定"
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
-msgstr "PnS: 回転 X- (下回転)"
+msgstr "PnS: 回転 X- (上下反転)"
msgctxt "IDS_AG_PNS_ROTATEY_P"
msgid "PnS Rotate Y+"
@@ -1014,7 +1023,7 @@ msgstr "PnS: 回転 Y+ (左回転)"
msgctxt "IDS_AG_PNS_ROTATEY_M"
msgid "PnS Rotate Y-"
-msgstr "PnS: 回転 Y- (右回転)"
+msgstr "PnS: 回転 Y- (左右反転)"
msgctxt "IDS_AG_PNS_ROTATEZ_P"
msgid "PnS Rotate Z+"
@@ -1022,7 +1031,7 @@ msgstr "PnS: 回転 Z+ (反時計回り)"
msgctxt "IDS_AG_PNS_ROTATEZ_M"
msgid "PnS Rotate Z-"
-msgstr "PnS: 回転 Z- (時計回り)"
+msgstr "PnS: 回転 Z- (90 度反時計回り)"
msgctxt "IDS_AG_TEARING_TEST"
msgid "Tearing Test"
@@ -1030,7 +1039,7 @@ msgstr "テアリング テスト"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
-msgstr "16:9 画面に合わせる,%.3f,%.3f,%.3f,%.3f"
+msgstr "16:9 TV 画面に合わせる,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_WIDESCREEN"
msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
@@ -1041,8 +1050,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "ウルトラワイド画面に拡大,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "全画面表示で隠す"
+msgid "&Hide on Fullscreen"
+msgstr "全画面表示で隠す(&H)"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1146,7 +1155,7 @@ msgstr "すべてのファイル (*.*)|*.*|"
msgctxt "IDS_AG_AUDIOFILES"
msgid "Audio files (all types)"
-msgstr "音声ファイル (すべての種類)"
+msgstr "オーディオ ファイル (すべての種類)"
msgctxt "IDS_AG_NOT_KNOWN"
msgid "Not known"
@@ -1166,15 +1175,15 @@ msgstr "DVD/BD を開く"
msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
msgid "Failed to set post-resize shaders"
-msgstr "リサイズ後のシェーダを設定できませんでした"
+msgstr "サイズ変更後のシェーダを設定できませんでした"
msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
msgid "Failed to set both pre-resize and post-resize shaders"
-msgstr "リサイズ前とリサイズ後のシェーダを設定できませんでした"
+msgstr "サイズ変更前およびサイズ変更後のシェーダを設定できませんでした"
msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
msgid "Shaders are recompiled automatically when the corresponding files are modified."
-msgstr "対応するファイルが変更された場合、シェーダは自動で再コンパイルされます。"
+msgstr "対応するファイルが変更された場合、シェーダは自動的に再コンパイルされます。"
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
@@ -1229,8 +1238,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "ファイルが存在するフォルダを追加"
+msgid "Add containing &folder"
+msgstr "このアイテムのフォルダを追加(&F)"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1246,7 +1255,7 @@ msgstr "再生速度"
msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
msgid "&Copy filters list to clipboard"
-msgstr "フィルタ リストをクリップボードにコピー"
+msgstr "フィルタ リストをクリップボードにコピー(&C)"
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
@@ -1258,7 +1267,7 @@ msgstr "接続するために資格情報を入力してください"
msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
msgid "Save custom style"
-msgstr "ユーザー設定のスタイルを保存"
+msgstr "カスタム スタイルを保存する"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
@@ -1266,11 +1275,11 @@ msgstr "教育/科学/事実"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
-msgstr "ウィンドウ モードでもコントロールやパネルを隠します。"
+msgstr "ウィンドウ モードでもコントロールおよびパネルを隠します。"
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr "内蔵の字幕レンダラを使用している場合、外部の字幕レンダラを読み込みません。"
+msgstr "内部字幕レンダラを使用している場合、外部字幕レンダラを読み込まないようにします。"
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
@@ -1282,7 +1291,7 @@ msgstr "値"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr "「最近使ったファイル」のメニューに表示されるファイルの最大数で、再生位置が保存できるファイルの最大数です。"
+msgstr "「最近使ったファイル」のメニューに表示されるファイルおよび再生位置が保存できるファイルの最大数です。"
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
@@ -1330,12 +1339,88 @@ msgstr "オーディオ専用モードで読み込まれたカバーアートの
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr "字幕の遅延がこの値で、対応するホットキー (%s/%s) が使用されるたびに減少/増加されます。"
+msgstr "字幕の遅延は、対応するホットキー (%s/%s) が使用されるたびに、この値で減少/増加します。"
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<未定義>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "視聴"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "上へ移動"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "下へ移動"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "LCN 順に並べ替える"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "すべて削除"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "一覧からすべてのチャンネルを削除してもよろしいですか?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "利用できる情報はありません"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "お待ちください。分析中..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "縦横比 %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "ファイルへのログ記録を有効にします。 (再起動が必要)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "残り時間"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "高精細表示"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "再生終了後: 現在のファイルを巻き戻す"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "再生終了後: 閉じる"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC の初期化中に問題が発生しました。あなたのご協力によって問題を解決できるかもしれません。\n\n問題を報告しますか?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "映像よりも音声が早く再生される場合は正の値を、遅く再生される場合は負の値を入力してください。"
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "プレビューは現在無効になっています。MPC-HC のオプションで有効にすることができます。"
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "このオプションは離れた場所からメディア ファイルをプレビューするために使用されます。適切に保護されたプライベート ネットワーク上でのみ使用してください。\n\n本当にこのオプションを有効にしますか?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "内部字幕レンダラ"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "デバイスを開く"
@@ -1356,13 +1441,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "画像は正常に保存されました"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "字幕を読み込む"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "字幕を読み込む..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "字幕を保存"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "字幕を保存..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1385,16 +1470,16 @@ msgid "Stop"
msgstr "停止"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "コマ送り"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "コマ戻し"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
-msgstr "再生位置を移動"
+msgstr "指定位置に移動"
msgctxt "IDS_AG_INCREASE_RATE"
msgid "Increase Rate"
@@ -1450,19 +1535,19 @@ msgstr "MPC-HC の初期化中に問題が発生しました。 DVD の再生が
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
-msgstr "表示しない"
+msgstr "常に表示しない"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
msgid "Show when moving the cursor, hide after:"
-msgstr "カーソルを移動している時は表示する。 隠すまでの時間:"
+msgstr "カーソルを移動したときに表示する。 表示時間:"
msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
msgid "Show when hovering control, hide after:"
-msgstr "コントロールをホバリングしている時は表示する。 隠すまでの時間:"
+msgstr "コントロールをポイントしたときに表示する。 表示時間:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
-msgstr "リサイズ前のシェーダを設定できませんでした"
+msgstr "サイズ変更前のシェーダを設定できませんでした"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
@@ -1489,12 +1574,12 @@ msgid "Thumbnails saved successfully"
msgstr "サムネイルは正常に保存されました"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "ビデオ ストリーム(&V)"
+msgid "Vide&o Track"
+msgstr "映像トラック(&O)"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
-msgstr "ビデオ アングル(&L)"
+msgstr "映像アングル(&L)"
msgctxt "IDS_RESET_SETTINGS"
msgid "Reset settings"
@@ -1502,11 +1587,11 @@ msgstr "設定をリセット"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "MPC-HC を既定の設定に復元してもよろしいですか?\n現在のすべての設定は失われますのでご注意ください!"
+msgstr "MPC-HC を既定の設定に復元してもよろしいですか?\n現在の設定がすべて失われるので注意してください!"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr "既定の設定を復元する為に MPC-HC のすべてのインスタンスを閉じてください。"
+msgstr "既定の設定を復元するために MPC-HC のすべてのインスタンスを閉じてください。"
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
@@ -1537,44 +1622,44 @@ msgid "Reset Rate"
msgstr "再生速度 標準"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "音声の遅延 +10ms"
+msgid "Audio Delay +10 ms"
+msgstr "音声の遅延 +10 ミリ秒"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "音声の遅延 -10ms"
+msgid "Audio Delay -10 ms"
+msgstr "音声の遅延 -10 ミリ秒"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
-msgstr "前方にジャンプ (小)"
+msgstr "順方向にジャンプ (小)"
msgctxt "IDS_MPLAYERC_24"
msgid "Jump Backward (small)"
-msgstr "後方にジャンプ (小)"
+msgstr "逆方向にジャンプ (小)"
msgctxt "IDS_MPLAYERC_25"
msgid "Jump Forward (medium)"
-msgstr "前方にジャンプ (中)"
+msgstr "順方向にジャンプ (中)"
msgctxt "IDS_MPLAYERC_26"
msgid "Jump Backward (medium)"
-msgstr "後方にジャンプ (中)"
+msgstr "逆方向にジャンプ (中)"
msgctxt "IDS_MPLAYERC_27"
msgid "Jump Forward (large)"
-msgstr "前方にジャンプ (大)"
+msgstr "順方向にジャンプ (大)"
msgctxt "IDS_MPLAYERC_28"
msgid "Jump Backward (large)"
-msgstr "後方にジャンプ (大)"
+msgstr "逆方向にジャンプ (大)"
msgctxt "IDS_MPLAYERC_29"
msgid "Jump Forward (keyframe)"
-msgstr "前方にジャンプ (キーフレーム)"
+msgstr "順方向にジャンプ (キーフレーム)"
msgctxt "IDS_MPLAYERC_30"
msgid "Jump Backward (keyframe)"
-msgstr "後方にジャンプ (キーフレーム)"
+msgstr "逆方向にジャンプ (キーフレーム)"
msgctxt "IDS_AG_NEXT"
msgid "Next"
@@ -1598,11 +1683,11 @@ msgstr "Direct3D フルスクリーンに切り替え"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
-msgstr "前の字幕へ"
+msgstr "前の字幕に移動"
msgctxt "IDS_MPLAYERC_101"
msgid "Goto Next Subtitle"
-msgstr "次の字幕へ"
+msgstr "次の字幕に移動"
msgctxt "IDS_MPLAYERC_102"
msgid "Shift Subtitle Left"
@@ -1612,14 +1697,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "字幕を右へ移動"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "レンダラ統計情報"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "先頭にジャンプ"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: ファイル名を表示"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "DVD の再生"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "BD の再生"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: レンダラ統計情報を表示"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: レンダラ統計情報をリセット"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "字幕::その他"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "境界線を隠す(&B)"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "フレームのみ(&M)"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "タイトル バーとメニュー バーを表示(&W)"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "メニュー バーを隠す(&M)"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "高度な設定"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "最小表示"
@@ -1685,24 +1810,24 @@ msgid "PnS Dec Height"
msgstr "PnS: 高さを縮小"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "字幕をダウンロード中。しばらくお待ちください。"
+msgid "Downloading [%s] \"%s\""
+msgstr "ダウンロード中 [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
-msgstr "リストを解析中..."
+msgstr "一覧を解析中..."
msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
msgid "No subtitles found."
msgstr "字幕が見つかりません。"
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "%d 個の字幕が利用できます。"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "MPC-HC の更新を定期的に確認しますか?\n\nこの機能はオプションのその他のページから後で無効にできます。"
+msgstr "MPC-HC の更新を定期的に確認しますか?\n\nこの機能はその他のオプションのページから後で無効にできます。"
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1853,12 +1978,12 @@ msgid "Boss key"
msgstr "ボス キー"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "プレーヤー メニュー (簡約版)"
+msgid "Player Menu"
+msgstr "プレーヤー メニュー"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "プレーヤー メニュー (完全版)"
+msgid "Player Menu (full)"
+msgstr "プレーヤー メニュー (完全)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1869,20 +1994,20 @@ msgid "Options"
msgstr "オプション"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "次の音声"
+msgid "Next Audio Track"
+msgstr "次の音声トラック"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "前の音声"
+msgid "Prev Audio Track"
+msgstr "前の音声トラック"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "次の字幕"
+msgid "Next Subtitle Track"
+msgstr "次の字幕トラック"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "前の字幕"
+msgid "Prev Subtitle Track"
+msgstr "前の字幕トラック"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1892,22 +2017,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "字幕の再読み込み"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "次の音声 (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "前の音声 (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "次の字幕 (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "前の字幕 (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "次のアングル (DVD)"
@@ -1917,28 +2026,28 @@ msgid "Prev Angle (DVD)"
msgstr "前のアングル (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "次の音声 (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "次の音声トラック (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "前の音声 (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "前の音声トラック (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "次の字幕 (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "次の字幕トラック (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "前の字幕 (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "前の字幕トラック (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "字幕のオン/オフ (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "残り時間"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: 現在の再生時間を表示"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1946,7 +2055,7 @@ msgstr "ディレクトリを選択"
msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
msgid "Quick add favorite"
-msgstr "クイックお気に入りの追加"
+msgstr "お気に入りにクイック追加"
msgctxt "IDS_DVB_CHANNEL_NUMBER"
msgid "N"
@@ -1964,11 +2073,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "暗号化"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "はい"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "いいえ"
@@ -1990,7 +2099,7 @@ msgstr "TV 局"
msgctxt "IDS_DVB_CHANNEL_FORMAT"
msgid "Format"
-msgstr "ファイル形式"
+msgstr "形式"
msgctxt "IDS_MAINFRM_2"
msgid "Focus lost to: %s - %s"
@@ -2010,7 +2119,7 @@ msgstr "フレーム レート"
msgctxt "IDS_MAINFRM_6"
msgid "drawn: %d, dropped: %d"
-msgstr "再生: %d, 破棄: %d"
+msgstr "再生: %d, 欠落: %d"
msgctxt "IDS_AG_FRAMES"
msgid "Frames"
@@ -2025,12 +2134,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "ボリューム: %02lu/%02lu, タイトル: %02lu/%02lu, チャプター: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
-msgstr "アングル: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "アングル: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dビット %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d ビット %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2046,7 +2155,7 @@ msgstr "MPC-HC はファイル形式の関連付けを変更する十分な権
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr "MPC-HC は非常に軽量な Windows 用オープン ソースのメディア プレーヤーです。再生に使用される一般的なすべてのビデオ及びオーディオ ファイル形式をサポートしています。私たちは 100% スパイウェアを含まず、広告やツールバーもありません。"
+msgstr "MPC-HC は非常に軽量な Windows 用オープン ソースのメディア プレーヤーです。再生に使用される一般的なすべてのビデオおよびオーディオ ファイル形式をサポートしています。私たちは 100% スパイウェアを含まず、広告やツール バーもありません。"
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2094,11 +2203,11 @@ msgstr "DVD: ディスクのリージョンとデコーダのリージョンの
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "このオプションはテアリングを除去するために設計されていますが、動画の再生中にコンテキスト メニューとダイアログ ボックスを表示できなくなります。\n\n本当にこのオプションを有効にしますか?"
+msgstr "このオプションはテアリングを除去するために設計されていますが、再生中にコンテキスト メニューおよびダイアログ ボックスが表示できなくなります。\n\n本当にこのオプションを有効にしますか?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
-msgstr "字幕の遅延: %ld ms"
+msgstr "字幕の遅延: %ld ミリ秒"
msgctxt "IDS_AG_TITLE2"
msgid "Title: %02d/%02d"
@@ -2120,37 +2229,29 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "画像の幅"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL は正しいようです!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "プロトコルのバージョンが一致しません。プレーヤーをアップグレードするか別のアドレスを選択してください!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "縦横比"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
-msgstr ", 合計: %ld, 破棄: %ld"
+msgstr ", 合計: %ld, 欠落: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", サイズ: %I64dKB"
+msgid ", Size: %I64d KB"
+msgstr ", サイズ: %I64d KB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", サイズ: %I64dMB"
+msgid ", Size: %I64d MB"
+msgstr ", サイズ: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", フリー: %I64dKB"
+msgid ", Free: %I64d KB"
+msgstr ", フリー: %I64d KB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", フリー: %I64dMB"
+msgid ", Free: %I64d MB"
+msgstr ", フリー: %I64d MB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
@@ -2174,7 +2275,7 @@ msgstr "DVD/BD のパスを選択してください:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr "正常に読み込まれました"
+msgstr " 正常に読み込まれました"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2221,8 +2322,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "サムネイルが小さすぎて、ファイルを作成できません。\n\nサムネイルの数を減らすか、全体のサイズを大きくしてみてください。"
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "字幕を読み込むためにはビデオ レンダラを変更しファイルを​​再度開く必要があります。\n- DirectShow: VMR-7/VMR-9 (レンダーレス)、EVR (カスタム プレゼンタ)、同期、madVR、Haali\n- RealMedia: RealMedia 用の特別なレンダラまたは DirectShow を用いて開く\n- QuickTime: QuickTime 用の DirectX 7 または DirectX 9 レンダラ\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "字幕を読み込むためにはビデオ レンダラを変更してファイルを開き直す必要があります。\n- DirectShow: VMR-9 (レンダーレス)、EVR (カスタム プレゼンタ)、同期、madVR または Haali\n- RealMedia: RealMedia 用の特別なレンダラまたは DirectShow を用いて開く\n- QuickTime: QuickTime 用の DirectX 7 または DirectX 9 レンダラ\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2233,12 +2334,12 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "縦横比: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "縦横比: 標準"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "縦横比: 標準 (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "音声の遅延: %I64dms"
+msgid "Audio delay: %I64d ms"
+msgstr "音声の遅延: %I64d ミリ秒"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2249,8 +2350,8 @@ msgid "Out of memory"
msgstr "メモリが不足しています"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "エラー: IE 用の Flash player が必要です"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "エラー: Internet Explorer 用の Adobe Flash Player が必要です"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2266,16 +2367,12 @@ msgstr "無効な引数です"
msgctxt "IDS_MAINFRM_82"
msgid "Opening aborted"
-msgstr "ファイルを開きませんでした"
+msgstr "開く処理を中止しました"
msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "ファイルを表示できませんでした"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL が正しくありません。字幕データベースが見つかりません!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "チャプター: "
@@ -2296,14 +2393,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "現在のモニタ"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC は予期せずに終了しました。この問題を解決しやすくするために、私たちのバグ トラッカーにこのファイル \"%s\" を送信してください。\n\n今すぐミニダンプ ファイルを含むフォルダを開き、バグ トラッカーに移動しますか?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "\"%s\" のダンプ ファイルを作成できませんでした (エラー %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "ディレクトリを選択してください"
@@ -2318,10 +2407,10 @@ msgstr "一時停止"
msgctxt "IDS_AG_TOGGLE_CAPTION"
msgid "Toggle Caption&Menu"
-msgstr "タイトルとメニューの表示"
+msgstr "タイトル バーとメニュー バーの表示"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "シーク バーの表示"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2406,7 +2495,7 @@ msgstr "プロパティ(&R)..."
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr "ピンのプロパティ..."
+msgstr " (ピン) プロパティ..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2454,11 +2543,11 @@ msgstr "MPC-HC Direct3D フルスクリーン"
msgctxt "IDS_MAINFRM_137"
msgid "Unknown format"
-msgstr "不明なファイル形式"
+msgstr "不明な形式"
msgctxt "IDS_MAINFRM_138"
msgid "Sub shift: %ld ms"
-msgstr "字幕の移動: %ld ms"
+msgstr "字幕のシフト: %ld ミリ秒"
msgctxt "IDS_VOLUME_BOOST_INC"
msgid "Volume boost increase"
@@ -2477,12 +2566,12 @@ msgid "Volume boost Max"
msgstr "音量のブースト 最大"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "使用方法: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\t最初のファイルかフォルダが読み込まれる (ワイルドカードの使用可, \"-\" が標準入力を表す)\n/dub \"dubname\"\t追加の音声ファイルを読み込む\n/dubdelay \"file\"\t追加の音声ファイルを XXms シフトして読み込む (ファイルが \"...DELAY XXms...\" を含む場合)\n/d3dfs\t\tDirect3D フルスクリーン モードで起動する\n/sub \"subname\"\t追加の字幕ファイルを読み込む\n/filter \"filtername\"\tDLL から DirectShow フィルタを読み込む (ワイルドカードの使用可)\n/dvd\t\tDVD モードで起動する, \"pathname\" は DVD フォルダを表す (省略可能)\n/dvdpos T#C\tタイトル T のチャプター C から再生する\n/dvdpos T#hh:mm\tタイトル T の位置 hh:mm:ss から再生する\n/cd\t\tオーディオ CD または (S)VCD の全トラックを読み込む, \"pathname\" はドライブ パスを指定する (省略可能)\n/device\t\t既定のビデオ デバイスを開く\n/open\t\t自動で再生を開始せずにファイルを開く\n/play\t\tプレーヤーの起動と同時にファイルを再生する\n/close\t\t再生終了後にプレーヤーを終了する (/play 使用時のみ有効)\n/shutdown \t再生終了後に OS をシャットダウンする\n/fullscreen\t全画面表示モードで起動する\n/minimized\t最小化モードで起動する\n/new\t\t新しいプレーヤーを起動する\n/add\t\t\"pathname\" を再生リストに追加する, /open 及び /play と同時に使用できる\n/regvid\t\t動画ファイルを関連付ける\n/regaud\t\t音声ファイルを関連付ける\n/regpl\t\t再生リスト ファイルを関連付ける\n/regall\t\tサポートされているすべてのファイルの種類を関連付ける\n/unregall\t\tすべてのファイルの関連付けを解除する\n/start ms\t\t\"ms\" (ミリ秒) の位置から再生する\n/startpos hh:mm:ss\thh:mm:ss の位置から再生する\n/fixedsize w,h\tウィンドウ サイズを固定する\n/monitor N\tN 番目のモニタで起動する (N は 1 から始まる) \n/audiorenderer N\tN 番目のオーディオ レンダラを使用する (N は 1 から始まる) \n\t\t(\"出力\" 設定を参照)\n/shaderpreset \"Pr\"\t\"Pr\" シェーダ プリセットを使用する\n/reset\t\t既定の設定を復元する\n/help /h /?\tコマンド ライン スイッチのヘルプを表示する\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "使用法: mpc-hc.exe \"pathname\" [switches]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
-msgstr "コマンドライン文字列に不明なスイッチが見つかりました: \n\n"
+msgstr "コマンド ライン文字列に認識できないスイッチが見つかりました: \n\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
@@ -2530,15 +2619,15 @@ msgstr "次の縦横比のプリセット"
msgctxt "IDS_AG_VIDFRM_STRETCH"
msgid "VidFrm Stretch"
-msgstr "VidFrm: ウィンドウ サイズに変形"
+msgstr "VidFrm: ウィンドウの大きさに広げる"
msgctxt "IDS_AG_VIDFRM_INSIDE"
msgid "VidFrm Inside"
-msgstr "VidFrm: ウィンドウ サイズに合わせる"
+msgstr "VidFrm: ウィンドウに内接させる"
msgctxt "IDS_AG_VIDFRM_OUTSIDE"
msgid "VidFrm Outside"
-msgstr "VidFrm: 縦か横に合わせてカット"
+msgstr "VidFrm: ウィンドウに外接させる"
msgctxt "IDS_AG_PNS_RESET"
msgid "PnS Reset"
@@ -2564,17 +2653,9 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "すべてのフィルタを有効にする(&E)"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "チューナー検出"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "字幕が読み込まれていないかサポートされていないレンダラを使用しています。"
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
-msgstr "作者不明です。このロゴを作成された方はお知らせください!"
+msgstr "不明な作成者です。このロゴを作成された方はお知らせください!"
msgctxt "IDS_NO_MORE_MEDIA"
msgid "No more media in the current folder."
@@ -2582,11 +2663,11 @@ msgstr "現在のフォルダにはもうメディアファイルがありませ
msgctxt "IDS_FIRST_IN_FOLDER"
msgid "The first file of the folder is already loaded."
-msgstr "フォルダの最初のファイルが、すでに読み込まれています。"
+msgstr "フォルダ内の最初のファイルが既に読み込まれています。"
msgctxt "IDS_LAST_IN_FOLDER"
msgid "The last file of the folder is already loaded."
-msgstr "フォルダの最後のファイルが、すでに読み込まれています。"
+msgstr "フォルダ内の最後のファイルが既に読み込まれています。"
msgctxt "IDS_FRONT_LEFT"
msgid "Front Left"
@@ -2660,45 +2741,17 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "トップ リア 右"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "レンダラ統計情報をリセット"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "字幕::その他"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "境界線を隠す(&B)"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "フレームのみ"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "タイトルとメニューを表示する(&W)"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "メニューを隠す(&M)"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "高度な設定"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
-msgstr "シークバーの上"
+msgid "Above seek bar"
+msgstr "シーク バーの上に"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
-msgstr "シークバーの下"
+msgid "Below seek bar"
+msgstr "シーク バーの下に"
msgctxt "IDS_VIDEO_STREAM"
msgid "Video: %s"
-msgstr "ビデオ: %s"
+msgstr "映像: %s"
msgctxt "IDS_APPLY"
msgid "Apply"
@@ -2730,27 +2783,27 @@ msgstr "すべてのフィルタを無効にする(&D)"
msgctxt "IDS_ENABLE_AUDIO_FILTERS"
msgid "Enable all audio decoders"
-msgstr "すべてのオーディオ フィルタを有効にする"
+msgstr "すべてのオーディオ デコーダを有効にする"
msgctxt "IDS_DISABLE_AUDIO_FILTERS"
msgid "Disable all audio decoders"
-msgstr "すべてのオーディオ フィルタを無効にする"
+msgstr "すべてのオーディオ デコーダを無効にする"
msgctxt "IDS_ENABLE_VIDEO_FILTERS"
msgid "Enable all video decoders"
-msgstr "すべてのビデオ フィルタを有効にする"
+msgstr "すべてのビデオ デコーダを有効にする"
msgctxt "IDS_DISABLE_VIDEO_FILTERS"
msgid "Disable all video decoders"
-msgstr "すべてのビデオ フィルタを無効にする"
+msgstr "すべてのビデオ デコーダを無効にする"
msgctxt "IDS_STRETCH_TO_WINDOW"
msgid "Stretch To Window"
-msgstr "ウィンドウ サイズに変形"
+msgstr "ウィンドウの大きさに広げる"
msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
msgid "Touch Window From Inside"
-msgstr "ウィンドウ サイズに合わせる"
+msgstr "ウィンドウに内接させる"
msgctxt "IDS_ZOOM1"
msgid "Zoom 1"
@@ -2762,15 +2815,15 @@ msgstr "拡大 2"
msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
msgid "Touch Window From Outside"
-msgstr "縦か横に合わせてカット"
+msgstr "ウィンドウに外接させる"
msgctxt "IDS_AUDIO_STREAM"
msgid "Audio: %s"
-msgstr "オーディオ: %s"
+msgstr "音声: %s"
msgctxt "IDS_AG_REOPEN"
msgid "Reopen File"
-msgstr "ファイルを​​再度開く"
+msgstr "ファイルを​​開き直す"
msgctxt "IDS_MFMT_AVI"
msgid "AVI"
@@ -2861,8 +2914,8 @@ msgid "Other Audio"
msgstr "Other Audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2872,6 +2925,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2936,22 +3009,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Playlist"
@@ -2976,18 +3033,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "縦横比"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "WASAPI を使用する (再生を再開する)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "早送りでミュート"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "サウンド デバイス:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "垂直同期: オン"
@@ -3054,31 +3099,31 @@ msgstr "入力タイプ: SDTV PAL"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
msgid "Ambient Light: Bright (2.2 Gamma)"
-msgstr "アンビエント ライト: 明るい (ガンマ 2.2)"
+msgstr "環境光: 明るい (ガンマ 2.2)"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
msgid "Ambient Light: Dim (2.35 Gamma)"
-msgstr "アンビエント ライト: 薄暗い (ガンマ 2.35)"
+msgstr "環境光: 薄暗い (ガンマ 2.35)"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
msgid "Ambient Light: Dark (2.4 Gamma)"
-msgstr "アンビエント ライト: 暗い (ガンマ 2.4)"
+msgstr "環境光: 暗い (ガンマ 2.4)"
msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
msgid "Rendering Intent: Perceptual"
-msgstr "色空間変換の方法: 知覚的"
+msgstr "レンダリングの目的: 知覚的"
msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
msgid "Rendering Intent: Relative Colorimetric"
-msgstr "色空間変換の方法: 相対的な色域を維持"
+msgstr "レンダリングの目的: 相対カラーメトリック"
msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
msgid "Rendering Intent: Saturation"
-msgstr "色空間変換の方法: 彩度"
+msgstr "レンダリングの目的: 彩度"
msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
msgid "Rendering Intent: Absolute Colorimetric"
-msgstr "色空間変換の方法: 絶対的な色域を維持"
+msgstr "レンダリングの目的: 絶対カラーメトリック"
msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
msgid "Output Range: %s"
@@ -3214,7 +3259,7 @@ msgstr "カラー設定をリセット"
msgctxt "IDS_USING_LATEST_STABLE"
msgid "\nYou are already using the latest stable version."
-msgstr "\nあなたは既に最新の安定バージョンを使用しています。"
+msgstr "\n既に最新の安定バージョンを使用しています。"
msgctxt "IDS_USING_NEWER_VERSION"
msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
@@ -3226,7 +3271,7 @@ msgstr "MPC-HC v%s が使用できます。現在のバージョンは v%s. で
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
-msgstr "更新サーバーが見つかりません。\n\nインターネット接続を確認して、再試行してください。"
+msgstr "更新サーバーが見つかりません。\n\nインターネット接続を確認して再試行してください。"
msgctxt "IDS_UPDATE_CLOSE"
msgid "&Close"
@@ -3276,6 +3321,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "音量の回復: オフ"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "バイト"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3290,11 +3339,11 @@ msgstr "GB"
msgctxt "IDS_SPEED_UNIT_K"
msgid "KB/s"
-msgstr "KB/s"
+msgstr "KB/秒"
msgctxt "IDS_SPEED_UNIT_M"
msgid "MB/s"
-msgstr "MB/s"
+msgstr "MB/秒"
msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
msgid "Could not create the tuner."
@@ -3333,28 +3382,24 @@ msgid "Error parsing the entered frame rate!"
msgstr "入力されたフレーム レートの解析中にエラーが発生しました!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
-msgstr "フレーム ステップできません。別のビデオ レンダラを試してください。"
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "コマ送りできません。別のビデオ レンダラを試してください。"
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
-msgstr "「画像を保存」 と 「サムネイルを保存」 の機能は、RealMedia 用の標準ビデオ レンダラでは動作しません。\nMPC-HC の出力オプションで、RealMedia 用の DirectX レンダラのいずれかを選択し、ファイルを再度開いてください。"
+msgstr "「画像を保存」 および 「サムネイルを保存」 の機能は、RealMedia 用の標準ビデオ レンダラでは動作しません。\nMPC-HC の出力オプションで、RealMedia 用の DirectX レンダラのいずれかを選択してファイルを開き直してください。"
msgctxt "IDS_SCREENSHOT_ERROR_QT"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
-msgstr "「画像を保存」 と 「サムネイルを保存」 の機能は、QuickTime 用の標準ビデオ レンダラでは動作しません。\nMPC-HC の出力オプションで、QuickTime 用の DirectX レンダラのいずれかを選択し、ファイルを再度開いてください。"
+msgstr "「画像を保存」 および 「サムネイルを保存」 の機能は、QuickTime 用の標準ビデオ レンダラでは動作しません。\nMPC-HC の出力オプションで、QuickTime 用の DirectX レンダラのいずれかを選択してファイルを開き直してください。"
msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
-msgstr "「画像を保存」 と 「サムネイルを保存」 の機能は、Shockwave ファイルに対して動作しません。"
+msgstr "「画像を保存」 および 「サムネイルを保存」 の機能は、Shockwave ファイルに対して動作しません。"
msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgstr "「画像を保存」 と 「サムネイルを保存」 の機能は、オーバーレイ ミキサ ビデオ レンダラでは動作しません。\nMPC-HC の出力オプションでビデオレンダラを変更し、ファイルを再度開いてください。"
-
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "オンライン字幕データベースに接続できません。"
+msgstr "「画像を保存」 および 「サムネイルを保存」 の機能は、オーバーレイ ミキサ ビデオ レンダラでは動作しません。\nMPC-HC の出力オプションでビデオ レンダラを変更してファイルを開き直してください。"
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
@@ -3366,11 +3411,11 @@ msgstr "キャプチャ エラー"
msgctxt "IDS_CAPTURE_ERROR_VIDEO"
msgid "video"
-msgstr "ビデオ"
+msgstr "映像"
msgctxt "IDS_CAPTURE_ERROR_AUDIO"
msgid "audio"
-msgstr "オーディオ"
+msgstr "音声"
msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
msgid "Can't add the %s buffer filter to the graph."
@@ -3418,13 +3463,13 @@ msgstr "正しい時間の形式は [-]hh:mm:ss.ms です。 (例: 01:23:45.678)
msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
msgid "This type is already in the list!"
-msgstr "このタイプは既にリストに存在します!"
+msgstr "このタイプは既に一覧にあります!"
msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "これらをテストする前に新しい設定を適用してください。"
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "再生終了後: 終了"
@@ -3452,6 +3497,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "再生終了後: モニタの電源を切る"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "再生終了後: フォルダ内を順次再生する"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "再生終了後: 何もしない"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "明るさ: %s"
@@ -3510,19 +3563,19 @@ msgstr "チャンネル(&C)"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr "「直前のキーフレーム」を選択すると、実際のシーク ポイントより前にある最初のキーフレームをシークします。\n「最も近いキーフレーム」を選択すると、実際のシーク ポイントにどちらが最も近いかによって前または後にある最初のキーフレームをシークします。"
+msgstr "「直前のキーフレーム」を選択した場合、実際のシーク ポイントより前にある最初のキーフレームをシークします。\n「最も近いキーフレーム」を選択した場合、実際のシーク ポイントにどちらが最も近いかによって前または後にある最初のキーフレームをシークします。"
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr "すべてのファイル形式に関連付けます"
+msgstr "すべての形式に関連付けます"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr "動画ファイル形式にのみ関連付けます"
+msgstr "ビデオ形式にのみ関連付けます"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr "音声ファイル形式にのみ関連付けます"
+msgstr "オーディオ形式にのみ関連付けます"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
@@ -3532,3 +3585,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "設定"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "プロバイダ"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "聴覚障害者"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "ダウンロード数"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "スコア"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "オンライン字幕検索に失敗しました。"
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "オンライン字幕検索を中止しました。"
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "オンライン字幕検索が完了しました。%d 個の字幕が見つかりました。"
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "オンライン字幕検索が完了しました。字幕が見つかりませんでした。"
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "字幕をダウンロード"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "オンラインで字幕を検索中。しばらくお待ちください..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "オンライン字幕検索を中止しています..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "ユーザー名"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "ステータス"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "準備完了..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "実装されていません。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "アップロード中..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "字幕は正常にアップロードされました。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "字幕のアップロードに失敗しました。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "字幕のアップロードを中止しました。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "字幕は既に存在します。"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "字幕をアップロード中。しばらくお待ちください..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "アップロードが完了しました。"
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "アップロードを中止しました。"
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "アップロードに失敗しました。"
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "ダウンロードして開く"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "セットアップ"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "リセット"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "上へ移動"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "下へ移動"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "URL を開く"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "言語"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "エラー: インターネット接続が確立できませんでした。"
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Web サイトの資格情報を入力します"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "接続先の資格情報を入力します:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "縦横比: 正方形ピクセルを想定 (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "ダウンロード済み [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "字幕をアップロード"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "字幕ファイル \"%s\" をアップロードしてもよろしいですか?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "サポートされている言語を取得しています..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "\"%S\" にログインできませんでした。( ユーザー名: \"%S\" ) \n\n正しいユーザー名とパスワードを入力するか、匿名ユーザーとしてログインするために資格情報をリセットしてください。"
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "自動検索とダウンロードは、ここに入力されたパターンのいずれかがそのパスに含まれているすべてのメディア ファイルで無効になります。\n例: \"private dir\\videos|work\\\" のようにタイプします。"
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pathname\"\t最初のファイルかフォルダが読み込まれる\n\t\t(ワイルドカードの使用可, \"-\" が標準入力を表す)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"\t追加のオーディオ ファイルを読み込む"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"file\"\t追加のオーディオ ファイルを XXms シフトして読み込む\n\t\t(ファイルが \"...DELAY XXms...\" を含む場合)"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tDirect3D フルスクリーン モードで起動する"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"\t追加の字幕ファイルを読み込む"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtername\"\tDLL から DirectShow フィルタを読み込む (ワイルドカードの使用可)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tDVD モードで起動する, \"pathname\" は DVD フォルダを表す (省略可能)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tタイトル T のチャプター C から再生を開始する"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tタイトル T の位置 P (hh:mm:ss) から再生を開始する"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\t音楽 CD または (S)VCD の全トラックを読み込む\n\t\t\"pathname\" はドライブ パスを指定する (省略可能)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\t既定のビデオ デバイスを開く"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\t自動的に再生を開始せずにファイルを開く"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tプレーヤーの起動と同時にファイルを再生する"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\t再生終了後にプレーヤーを終了する (/play の使用時のみ有効)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown \t再生終了後に OS をシャットダウンする"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\t再生終了後に OS をスタンバイ モードにする"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\t\t再生終了後に OS を休止状態にする"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\t再生終了後にログオフする"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\t再生終了後にワークステーションをロックする"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\t再生終了後にモニタの電源を切る"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\t再生終了後にフォルダ内の次のファイルを開く"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\t全画面表示モードで起動する"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\t最小化モードで起動する"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\t新しいプレーヤーを起動する"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\t\"pathname\" を再生リストに追加する, /open および /play と同時に使用できる"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\t再生リストをランダム化する"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tビデオ ファイルに関連付ける"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tオーディオ ファイルに関連付ける"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\t再生リスト ファイルに関連付ける"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tサポートされているすべてのファイルの種類に関連付ける"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tすべてのファイルの関連付けを解除する"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\t\"ms\" (ミリ秒) の位置から再生を開始する"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\thh:mm:ss の位置から再生を開始する"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tウィンドウ サイズを固定する"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tN 番目 (N は 1 から始まる) のモニタでプレーヤーを起動する"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tN 番目 (N は 1 から始まる) のオーディオ レンダラを使用する (\"出力\" 設定を参照)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\t\"Pr\" シェーダ プリセットを使用する"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\t使用するパン&スキャンのプリセット名を指定する"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\t形式アイコンを再度関連付ける"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tバックグラウンドで MPC-HC を開く"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\t指定したポート上でウェブ インターフェイスを開始する"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tOSD でデバッグ情報を表示する"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tクラッシュ レポートを無効にする"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tスレーブとして MPC-HC を使用する"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tハードウェア デコーディングに使用される GPU のインデックスを設定する\n\t\tCUVID および DXVA2 (copy-back) でのみ使用できる"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\t既定の設定を復元する"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tコマンド ライン スイッチのヘルプを表示する"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "自動的にダウンロードされる字幕スコアに対する閾値です。高い値の場合、より正確に一致した字幕が読み込まれます。低い値の場合、誤った字幕が読み込まれる可能性があります。完璧な値はありません。最適なものを選んでください。"
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "音声の遅延 (ミリ秒)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "既定のツール バーのサイズ (ピクセル単位) です。"
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "ベクター化された新しいツール バーの代わりに古いものを使用します。"
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "URL をコピー"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ko.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ko.dialogs.po
index b8ea0db4c..90d9367f4 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ko.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ko.dialogs.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Level ASMer <zx132435@naver.com>, 2014-2017
# limeburst <me@limeburst.net>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Korean (http://www.transifex.com/projects/p/mpc-hc/language/ko/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-02-02 01:37+0000\n"
+"Last-Translator: Level ASMer <zx132435@naver.com>\n"
+"Language-Team: Korean (http://www.transifex.com/mpc-hc/mpc-hc/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -82,7 +83,7 @@ msgstr "노멀라이즈"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
msgid "Max amplification:"
-msgstr ""
+msgstr "최대 증폭:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
msgid "%"
@@ -109,15 +110,15 @@ msgid "Enable custom channel mapping"
msgstr "사용자정의 채널/스피커배치기능 사용"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "스피커 채널 설정 "
+msgid "Speaker configuration for"
+msgstr "스피커 채널 설정"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "입력 채널:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Shift키를 누른채로 설정을 변경시키면 즉시 설정이 반영됩니다."
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -138,7 +139,7 @@ msgstr "이동"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
-msgstr "프레임이나 프레임률을 입력하면 위치로 이동하여 재생할수 있습니다.\n예)12345, 20.25 -> 12345프레임 20.25fps"
+msgstr "프레임이나 프레임률을 입력하면 위치로 이동하여 재생할수 있습니다.\n예)12345, 20.25 -> 12345프레임 20.25FPS"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Frame"
@@ -189,8 +190,8 @@ msgid "About"
msgstr "정보"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 'Authors.txt' 파일 참조"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 'Authors.txt' 파일 참조"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -202,7 +203,7 @@ msgstr "한글번역제공: XNeo(xneokr@naver.com)"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
-msgstr ""
+msgstr "빌드 정보"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Version:"
@@ -214,7 +215,7 @@ msgstr "컴파일러:"
msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
msgid "Not used"
-msgstr ""
+msgstr "사용되지 않음"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build date:"
@@ -230,7 +231,7 @@ msgstr "이름:"
msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
msgid "Copy to clipboard"
-msgstr ""
+msgstr "클립보드에 복사"
msgctxt "IDD_ABOUTBOX_IDOK"
msgid "OK"
@@ -254,7 +255,7 @@ msgstr "언어"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Title bar"
-msgstr "제목표시줄"
+msgstr "제목 표시줄"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
msgid "Display full path"
@@ -262,7 +263,7 @@ msgstr "전체 경로 표시"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
msgid "File name only"
-msgstr "파일이름만 표시"
+msgstr "파일 이름만 표시"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
msgid "Don't prefix anything"
@@ -282,11 +283,11 @@ msgstr "트래이에 아이콘 보이기"
msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
msgid "Show OSD (requires restart)"
-msgstr "OSD보이기 (재시작필요)"
+msgstr "OSD 보이기 (재시작 필요)"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
msgid "Limit window proportions on resize"
-msgstr "리사이즈시 창비율 제한"
+msgstr "리사이즈시 창 비율 제한"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
msgid "Snap to desktop edges"
@@ -306,11 +307,11 @@ msgstr "프로세스 우선순위 높이기"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
-msgstr ""
+msgstr "커버 아트 지원시 활성화"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "History"
-msgstr "히스토리"
+msgstr "기록"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
msgid "Keep history of recently opened files"
@@ -318,7 +319,7 @@ msgstr "최근에 열었던 파일목록 기억"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
msgid "Remember last playlist"
-msgstr ""
+msgstr "최근 재생 목록를 기억"
msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
msgid "Remember File position"
@@ -330,11 +331,11 @@ msgstr "DVD 위치 기억"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
msgid "Remember last window position"
-msgstr "마지막 윈도우창위치 기억"
+msgstr "최근 창 위치 기억"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
msgid "Remember last window size"
-msgstr "마지막 윈도우창크기 기억"
+msgstr "최근 창 크기 기억"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
msgid "Remember last Pan-n-Scan Zoom"
@@ -421,12 +422,16 @@ msgid "time(s)"
msgstr "번 재생"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "반복 모드:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "출력"
+msgid "Default zoom"
+msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -472,13 +477,9 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "오디오파일을 자동으로 열기"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr ""
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
-msgstr ""
+msgstr "컨트롤"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Volume step:"
@@ -569,7 +570,7 @@ msgid "Warning"
msgstr "경고"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "만약 비디오카드 설정으로 위치설정 및 전체화면 안티앨리어싱을 설정했다면 자막이 잘 표시되지 않을수도 있습니다."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -594,11 +595,11 @@ msgstr ""
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr ""
+msgstr "관리자 권한으로 실행"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "기본 프로그램으로 설정"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -666,7 +667,7 @@ msgstr "빠른 탐색 (키프레임)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
msgid "Show chapter marks in seek bar"
-msgstr ""
+msgstr "탐색 바에 챕터 마크를 보여주기"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
@@ -676,16 +677,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "전체화면시 최소화 예방 (기본 모니터가 없을시)"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Windows 7 작업표시줄기능 사용(작업표시줄에서 컨트롤가능)"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "고도화된 작업 표시줄 기능 사용"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr ""
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "시간 툴팁 사용:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -694,7 +695,7 @@ msgstr "OSD 글꼴:"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
msgid "Enable Logitech LCD support (experimental)"
-msgstr ""
+msgstr "Logitech LCD 지원 활성화 (실험적)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
@@ -922,7 +923,7 @@ msgstr "인코딩:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
msgid "Delay:"
-msgstr ""
+msgstr "딜레이:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
msgid "ms"
@@ -930,11 +931,11 @@ msgstr "밀리초"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
msgid "Save custom style"
-msgstr ""
+msgstr "사용자 정의 스타일 저장"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr ""
+msgstr "JPEG 품질:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Thumbnails:"
@@ -1082,7 +1083,7 @@ msgstr "변환 필터"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Internal LAV Filters settings"
-msgstr ""
+msgstr "내장 LAV 필터 설정"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
msgid "Splitter"
@@ -1090,11 +1091,11 @@ msgstr ""
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
msgid "Video decoder"
-msgstr ""
+msgstr "비디오 디코더"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
msgid "Audio decoder"
-msgstr ""
+msgstr "오디오 디코더"
msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
msgid "Internal:"
@@ -1125,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "DirectShow 오디오"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr ""
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (렌더리스)와 "
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1166,26 +1167,30 @@ msgstr "EVR 버퍼:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DXVA"
-msgstr ""
+msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr ""
+msgid "Subtitles"
+msgstr "자막"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
-msgstr ""
+msgstr "스크린샷"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Shaders"
-msgstr ""
+msgstr "셰이더"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Rotation"
-msgstr ""
+msgstr "회전"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
+msgid "Subtitle Renderer"
+msgstr "자막 렌더러"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
@@ -1204,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "로컬호스트로만 접속허용"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "미리보기 활성화"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "디버그 정보 인쇄"
@@ -1229,17 +1238,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI 핸들러: (.확장명1=경로1;.확장명2=경로2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "자막파일을 찾았습니다"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "다운로드 && 열기"
+msgid "Download subtitles"
+msgstr "자막 다운로드"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "지금 로드한 자막과 대체"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "다운로드"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "새로고침"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "중단됨"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "옵션"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "자막 업로드"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "업로드"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "중단됨"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "옵션"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "다른 이름으로 저장..."
@@ -1270,19 +1307,19 @@ msgstr "리셋"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Update check"
-msgstr ""
+msgstr "업데이트 확인"
msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
msgid "Enable automatic update check"
-msgstr ""
+msgstr "자동으로 업데이트 확인 활성화"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
+msgid "Check every:"
msgstr ""
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
-msgstr ""
+msgstr "일"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Settings management"
@@ -1298,7 +1335,7 @@ msgstr "내보내기"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
msgid "Export keys"
-msgstr ""
+msgstr "키 내보내기"
msgctxt "IDD_TUNER_SCAN_CAPTION"
msgid "Tuner scan"
@@ -1398,7 +1435,7 @@ msgstr ""
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
msgid "Stop filter graph"
-msgstr ""
+msgstr "필터 그래프 중단"
msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
msgid "Sync video to display"
@@ -1442,7 +1479,7 @@ msgstr "한계:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
msgid "+/-"
-msgstr ""
+msgstr "+/-"
msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
msgid "ms"
@@ -1458,7 +1495,7 @@ msgstr "전체화면으로 재생시작"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
msgid "Hide controls in fullscreen"
-msgstr ""
+msgstr "전체화면에서 컨트롤 숨기기"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
msgid "ms"
@@ -1541,32 +1578,44 @@ msgid "Reset"
msgstr "초기화"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "온라인 데이터베이스"
+msgid "Online search, download and upload subtitles"
+msgstr "자막 온라인 검색, 다운로드와 업로드"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr ""
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "온라인 자막 데이터베이스 URL:"
+msgid "Languages in order of preference:"
+msgstr ""
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "테스트"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr ""
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
-msgstr ""
+msgstr "업데이트 검사"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
msgid "&Download now"
-msgstr ""
+msgstr "지금 다운로드"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
msgid "Remind me &later"
-msgstr ""
+msgstr "나중에 알림"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
msgid "&Ignore this update"
-msgstr ""
+msgstr "이 업데이트를 무시"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
@@ -1574,7 +1623,7 @@ msgstr ""
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
-msgstr ""
+msgstr "셰이더 파일 추가"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
msgid "Remove"
@@ -1590,11 +1639,11 @@ msgstr ""
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
-msgstr ""
+msgstr "셰이더 프리셋"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
msgid "Load"
-msgstr ""
+msgstr "불러오기"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
msgid "Save"
@@ -1614,31 +1663,31 @@ msgstr ""
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
-msgstr ""
+msgstr "셰이더 디버그"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
msgid "Debug Information"
-msgstr ""
+msgstr "디버그 정보"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
msgid "PS 2.0"
-msgstr ""
+msgstr "PS 2.0"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO2"
msgid "PS 2.0b"
-msgstr ""
+msgstr "PS 2.0b"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO3"
msgid "PS 2.0a"
-msgstr ""
+msgstr "PS 2.0a"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO4"
msgid "PS 3.0"
-msgstr ""
+msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr ""
+msgstr "고급 설정, 당신이 무엇을 하는지 모르시면 편집하지 마십시오."
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
@@ -1652,15 +1701,95 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "기본값"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "기기"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "비트스트리밍 허용"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "옵션"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "스테레오 크로스피드 활성화 (헤드폰용)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "레벨:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "참고"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr ""
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr ""
+msgstr "JPEG 품질:"
msgctxt "IDD_CMD_LINE_HELP_CAPTION"
msgid "Command line help"
-msgstr ""
+msgstr "명령 입력 도움말"
msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "확인"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "충돌 보고"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "죄송합니다, MPC-HC가 그냥 충돌 된 것 같습니다. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "임의 정보"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "이메일:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "문제 설명 (영어만 사용):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "MPC-HC 재시작"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "MPC-HC 종료"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ko.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ko.menus.po
index f2b1495d0..be4d629cf 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ko.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ko.menus.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Level ASMer <zx132435@naver.com>, 2014-2017
# limeburst <me@limeburst.net>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:01+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Korean (http://www.transifex.com/projects/p/mpc-hc/language/ko/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2017-02-02 01:14+0000\n"
+"Last-Translator: Level ASMer <zx132435@naver.com>\n"
+"Language-Team: Korean (http://www.transifex.com/mpc-hc/mpc-hc/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +65,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "썸네일 캡쳐..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "자막 불러오기(&L)..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "자막 저장하기(&S)..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "자막 데이터베이스"
+msgid "S&ubtitles"
+msgstr "자막"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "자막 불러오기"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "검색..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "자막 저장하기"
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "업로드..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "자막 다운로드"
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "다운로드..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "자막 업로드"
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -196,13 +193,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "잔상 테스트 (&T)"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "디스플레이 상태(&D)"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "통계 표시"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "남은 시간"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "현재 시간을 표시"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "파일 이름 보기"
msgctxt "POPUP"
msgid "&Output Range"
@@ -404,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "바깥쪽 윈도우창 크기/모양대로 조절(&O)"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "원본 비율 유지(&K)"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "화면비율"
+msgid "&Aspect Ratio"
+msgstr "측면 비율"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "기본값"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "기본값 (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,6 +433,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "사각형 픽셀 추정 (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "모니터/바탕화면의 비율차이 수정"
@@ -529,9 +530,25 @@ msgid "&Stop"
msgstr "정지(&S)"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "한 프레임씩 재생(&R)"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "반복"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "영원히"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "파일"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "재생 목록"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "재생속도 감소(&D)"
@@ -553,16 +570,16 @@ msgid "S&haders"
msgstr "셰이더(&H)"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "오디오(&A)"
+msgid "&Audio Track"
+msgstr "오디오 트랙"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "자막(&B)"
+msgid "Su&btitle Track"
+msgstr "자막 트랙"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "비디오 스트림(&T)"
+msgid "Vide&o Track"
+msgstr "비디오 트랙"
msgctxt "POPUP"
msgid "&Volume"
@@ -584,7 +601,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "재생이 끝나면"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "아무 것도 하지 않기"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "폴더의 다음 파일을 재생"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "모니터를 끄기"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "파일 닫기 "
@@ -608,10 +637,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "잠그기"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr ""
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "탐색(&N)"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ko.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ko.strings.po
index 28e0d0085..9323ac1d5 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ko.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ko.strings.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Level ASMer <zx132435@naver.com>, 2014
# limeburst <me@limeburst.net>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Korean (http://www.transifex.com/projects/p/mpc-hc/language/ko/)\n"
+"Language-Team: Korean (http://www.transifex.com/mpc-hc/mpc-hc/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -50,20 +51,28 @@ msgstr "음악 재생"
msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
msgid "Play Audio CD"
-msgstr "오디오CD 재생"
+msgstr "오디오 CD 재생"
msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
msgid "Play DVD Movie"
-msgstr "DVD 재생"
+msgstr "DVD 영화 재생"
msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
-msgstr "등록정보"
+msgstr "등록 정보"
+
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr ""
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "기본 스타일(&D)"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr ""
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "파일"
@@ -98,7 +107,7 @@ msgstr "비트레이트"
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
-msgstr "(avg/cur)"
+msgstr ""
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
@@ -116,6 +125,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr ""
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr ""
@@ -126,7 +155,7 @@ msgstr ""
msgctxt "IDS_PPAGE_CAPTURE_FG2"
msgid "Always (slowest option)"
-msgstr ""
+msgstr "항상 (느린 옵션)"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
msgid "Not supported by some devices. Two video decoders always present in the filter graph."
@@ -170,7 +199,7 @@ msgstr ""
msgctxt "IDS_CONTENT_MOVIE_DRAMA"
msgid "Movie/Drama"
-msgstr ""
+msgstr "영화/드라마"
msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
msgid "News/Current affairs"
@@ -186,15 +215,15 @@ msgstr ""
msgctxt "IDS_DVD_FAV_ADDED"
msgid "DVD added to favorites"
-msgstr ""
+msgstr "DVD를 즐겨찾기에 추가"
msgctxt "IDS_CAPTURE_SETTINGS"
msgid "Capture Settings"
-msgstr ""
+msgstr "캡쳐 설정"
msgctxt "IDS_NAVIGATION_BAR"
msgid "Navigation Bar"
-msgstr ""
+msgstr "내비게이션 바"
msgctxt "IDS_SUBRESYNC_CAPTION"
msgid "Subresync"
@@ -322,14 +351,14 @@ msgstr "재생목록"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
-msgstr "온/오프"
+msgstr "켬/끔"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
+msgid "From (FPS)"
msgstr ""
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr ""
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -346,7 +375,7 @@ msgstr "그외"
msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
msgid "System Default"
-msgstr ""
+msgstr "시스템 기본값"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
@@ -450,7 +479,7 @@ msgstr "플레이어::형식"
msgctxt "IDD_PPAGETWEAKS"
msgid "Tweaks"
-msgstr "최적화"
+msgstr "시스템 설정"
msgctxt "IDD_PPAGEAUDIOSWITCHER"
msgid "Internal Filters::Audio Switcher"
@@ -464,6 +493,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "재생::Shaders"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "리소스"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "기타"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "미디어 정보"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "재생::캡쳐장치"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "재생::Sync Renderer Settings"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "재생::전체화면"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr ""
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "오디오 스위처"
@@ -482,27 +539,19 @@ msgstr ""
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
-msgstr ""
+msgstr "오래된 비디오 렌더러"
msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
-msgstr ""
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr ""
+msgstr "오버레이 믹서 렌더러"
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
-msgstr ""
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr ""
+msgstr "비디오 믹싱 렌더러 9 (윈도우)"
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
-msgstr ""
+msgstr "비디오 믹싱 렌더러 9 (렌더 적게)"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
@@ -522,7 +571,7 @@ msgstr ""
msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr ""
+msgstr "Null (무압축)"
msgctxt "IDS_PPAGE_OUTPUT_MADVR"
msgid "madVR"
@@ -552,34 +601,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "플레이어::웹 인터페이스"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "자막::데이터베이스"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "리소스"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "기타"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr ""
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "재생::캡쳐장치"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "재생::Sync Renderer Settings"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "재생::전체화면"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "자세히"
@@ -598,19 +619,11 @@ msgstr "이것은 윈도우 9x/ME/2000 에서 사용하는 렌더러입니다.
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "항상 비디오를 오버레이상태로 렌더링합니다. 일반적으로 YUV의 색공간만을 허용하고, RGB색상변환을 하지않고 그대로 표현하게 됩니다. 다른 모드들과 비교해서 가장 빠른속도를 가졌지만 TV-OUT 기능을 활성화했을때만 전체화면 미러링이 작동합니다."
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "이것은 윈도우XP의 기본 렌러더입니다. 모든 렌더러 중에서 가장 안정적이지만 오버레이믹서보다는 약간 느립니다. 오버레이상태에서 실행될때 DirectDraw만 사용합니다."
+msgstr "항상 비디오를 오버레이상태로 렌더링합니다. 일반적으로 YUV의 색공간만을 허용하고, RGB색상변환을 하지않고 그대로 표현하게 됩니다. 다른 모드들과 비교해서 가장 빠른속도를 가졌지만 TV-OUT 기능을 활성화했을때만 전체화면 미러링이 작동합니다."
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "이것은 DirectX 9을 설치했을때만 사용할수 있습니다. 성능이나 품질은 VMR-7(창화면)과 같습니다. 그러나 오버레이 비디오 미러링이 불가능하고 VMR-7(창화면)보다 조금 느립니다."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "VMR-7 (창화면)과 같으나, 자막표시를 위해서 MPC-HC의 플러그인이 동작하는 렌더러입니다. 오버레이 비디오 미러링이 불가능합니다. TV-OUT기능을 사용할수 없고 바탕화면배색이 32비트로 설정되어있을때만 정상작동합니다. (YUY2출력만 가능)"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr ""
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -621,7 +634,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr ""
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "모든 비디오형식의 샘플을 출력하지 않습니다. 비디오를 출력하지않으면서 CPU가 작동하도록 하려할때 사용합니다."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -648,10 +661,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "리얼미디어의 고유렌더러입니다. SMIL형식은 작동하지만 안정적이지는 않습니다. 오버레이상태에서 실행될때 DirectDraw를 사용합니다."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "리얼미디어의 엔진을 이용해서 DX7기반의 VMR-7 (렌더리스)모드에서 렌더링합니다."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "리얼미디어의 엔진을 이용해서 DX9기반의 VMR-9 (렌더리스)모드에서 렌더링합니다."
@@ -660,10 +669,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "퀵타임의 고유렌더러입니다. 비디오화면을 조절할때 화면갱신속도가 느려질수 있고 다른 창의 뒤로 가려질수도 있습니다. 오버레이를 사용하지 못할 경우 GDI를 사용하게 됩니다."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "퀵타임의 엔진을 이용해서 DX7기반의 VMR-7 (렌더리스)모드에서 렌더링합니다."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "퀵타임의 엔진을 이용해서 DX9기반의 VMR-9 (렌더리스)모드에서 렌더링합니다."
@@ -672,21 +677,9 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "재생하는 비디오 표면을 표준 오프스크린으로 위치시킵니다."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
-msgstr ""
-
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr ""
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr ""
+msgstr "싱크 렌더러"
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
@@ -694,11 +687,11 @@ msgstr ""
msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
msgid "2D surfaces"
-msgstr ""
+msgstr "2D 표면"
msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
msgid "3D surfaces (recommended)"
-msgstr ""
+msgstr "3D 표면 (권장)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
@@ -726,11 +719,11 @@ msgstr ""
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
msgid "**unavailable**"
-msgstr ""
+msgstr "**비활성화**"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
msgid "The selected renderer is not installed."
-msgstr ""
+msgstr "선택된 렌더러가 설치 되지 않았습니다."
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
@@ -738,10 +731,10 @@ msgstr ""
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr ""
+msgstr "Null (무압축)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
msgstr ""
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
@@ -756,8 +749,12 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr ""
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
msgstr ""
msgctxt "IDS_SUBFILE_DELAY"
@@ -766,7 +763,7 @@ msgstr ""
msgctxt "IDS_SPEEDSTEP_AUTO"
msgid "Auto"
-msgstr ""
+msgstr "자동"
msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
msgid "There are no customized keys to export."
@@ -778,7 +775,7 @@ msgstr ""
msgctxt "IDS_RFS_COMPRESSED"
msgid "Compressed files are not supported"
-msgstr ""
+msgstr "압축 된 파일이 지원되지 않습니다"
msgctxt "IDS_RFS_ENCRYPTED"
msgid "Encrypted files are not supported"
@@ -789,7 +786,7 @@ msgid "Couldn't find all archive volumes"
msgstr ""
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "비디오 표면을 텍스쳐처럼 처리하고 2D모드의 버퍼가 가득찰때까지 복사/늘이기를 반복합니다. 이 모드를 사용하기 위해서는 그래픽카드에서 \"32비트, RGBA, 비디오 해상도 크기의 텍스쳐\" 를 2가지 이상 동시에 처리할수 있어야 합니다."
msgctxt "IDC_TEXTURESURF3D"
@@ -816,6 +813,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr ""
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "튜너 검색"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "자막이 로드되지않았거나 지원되지않는 렌더러입니다."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "VTS_xx_0.ifo 파일에 속해있는 VTS_xx_x.vob 파일을 로드합니다."
@@ -826,7 +835,7 @@ msgstr ""
msgctxt "IDS_INTERNAL_LAVF"
msgid "Uses LAV Filters"
-msgstr ""
+msgstr "LAV 필터 사용"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
@@ -888,7 +897,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "음소거"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "음복원"
@@ -953,11 +962,11 @@ msgid "&Organize Favorites..."
msgstr "즐겨찾기 구성(&O)..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "순서 섞기"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr ""
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1041,7 +1050,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "울트라-와이드스크린으로 확대,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "전체화면에서 숨기기"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1229,16 +1238,16 @@ msgid "+%d%%"
msgstr ""
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr ""
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
-msgstr ""
+msgstr "[H/W]"
msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
msgid "Software Decoding"
-msgstr ""
+msgstr "소프트웨어 디코딩"
msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
msgid "Playback rate"
@@ -1258,7 +1267,7 @@ msgstr ""
msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
msgid "Save custom style"
-msgstr ""
+msgstr "사용자 정의 스타일 저장"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
@@ -1278,7 +1287,7 @@ msgstr "이름"
msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
msgid "Value"
-msgstr ""
+msgstr "값"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
@@ -1294,7 +1303,7 @@ msgstr ""
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
-msgstr ""
+msgstr "아무것도 하지않음"
msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
msgid "Play next file in the folder"
@@ -1314,15 +1323,15 @@ msgstr "종료"
msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
msgid "Turn off the monitor"
-msgstr ""
+msgstr "모니터를 끄기"
msgctxt "IDS_IMAGE_JPEG_QUALITY"
msgid "JPEG Image"
-msgstr ""
+msgstr "JPEG 이미지"
msgctxt "IDS_IMAGE_QUALITY"
msgid "Quality (%):"
-msgstr ""
+msgstr "품질 (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
@@ -1336,6 +1345,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr ""
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "보기"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "위로"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "아래로"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "LCN순 정렬"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "모두 제거"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "기다려 주세요, 분석 진행 중 입니다."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr ""
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr ""
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr ""
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr ""
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr ""
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "장치 열기"
@@ -1350,19 +1435,19 @@ msgstr "이미지 저장"
msgctxt "IDS_MPLAYERC_6"
msgid "Save Image (auto)"
-msgstr " (자동)"
+msgstr ""
msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "이미지가 성공적으로 저장되었습니다."
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "자막 열기"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "자막 저장"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1385,11 +1470,11 @@ msgid "Stop"
msgstr "정지"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "프레임 재생"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "프레임 재생"
msgctxt "IDS_AG_GO_TO"
@@ -1406,11 +1491,11 @@ msgstr ""
msgctxt "IDS_CONTENT_SPORTS"
msgid "Sports"
-msgstr ""
+msgstr "스포츠"
msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
msgid "Children's/Youth programmes"
-msgstr ""
+msgstr "어린이/청소년 프로그램들"
msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
msgid "Music/Ballet/Dance"
@@ -1418,7 +1503,7 @@ msgstr ""
msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
msgid "Arts/Culture"
-msgstr ""
+msgstr "예술/문화"
msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
msgid "Social/Political issues/Economics"
@@ -1430,11 +1515,11 @@ msgstr ""
msgctxt "IDS_FILE_RECYCLE"
msgid "Move to Recycle Bin"
-msgstr ""
+msgstr "휴지통으로 이동"
msgctxt "IDS_AG_SAVE_COPY"
msgid "Save a Copy"
-msgstr ""
+msgstr "다른 이름으로 저장"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
@@ -1450,7 +1535,7 @@ msgstr ""
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
-msgstr ""
+msgstr "보여주지 않음"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
msgid "Show when moving the cursor, hide after:"
@@ -1489,8 +1574,8 @@ msgid "Thumbnails saved successfully"
msgstr "썸네일이 성공적으로 저장되었습니다."
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "비디오 스트림(&T)"
+msgid "Vide&o Track"
+msgstr "비디오 트랙"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1526,7 +1611,7 @@ msgstr "내보내기 실패! 올바른 권한을 가지고 있는지 확인하
msgctxt "IDS_BDA_ERROR"
msgid "BDA Error"
-msgstr ""
+msgstr "BDA 오류"
msgctxt "IDS_AG_DECREASE_RATE"
msgid "Decrease Rate"
@@ -1537,11 +1622,11 @@ msgid "Reset Rate"
msgstr "초기화"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "오디오 딜레이 +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "오디오 딜레이 -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1612,14 +1697,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "자막 오른쪽으로"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "디스플레이 상태"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
+msgstr "처음으로 이동"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr ""
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr ""
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
msgstr ""
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr ""
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "자막::기타"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "외곽선 숨기기"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "창 프레임만"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "제목표시줄과 메뉴 보이기"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "메뉴 숨기기"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "고급"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "최소 보기"
@@ -1685,8 +1810,8 @@ msgid "PnS Dec Height"
msgstr "PnS Dec 세로"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "자막 파일 다운로드 중,기다리세요."
+msgid "Downloading [%s] \"%s\""
+msgstr ""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1697,12 +1822,12 @@ msgid "No subtitles found."
msgstr "자막 파일이 없습니다."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d 자막 사용가능."
+msgid "%d subtitle(s) available."
+msgstr "%d 자막 사용가능."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr ""
+msgstr "MPC-HC 업데이트를 정기적으로 확인하시겠습니까?\n\n이 기능은 기타 옵션 페이지에서 나중에 비활성화 할 수 있습니다."
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1853,12 +1978,12 @@ msgid "Boss key"
msgstr "Boss 키"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "플레이어 메뉴 (짧게)"
+msgid "Player Menu"
+msgstr ""
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "플레이어 메뉴 (길게)"
+msgid "Player Menu (full)"
+msgstr ""
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1869,20 +1994,20 @@ msgid "Options"
msgstr "옵션"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "다음 오디오"
+msgid "Next Audio Track"
+msgstr ""
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "이전 오디오"
+msgid "Prev Audio Track"
+msgstr ""
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "다음 자막"
+msgid "Next Subtitle Track"
+msgstr ""
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "이전 자막"
+msgid "Prev Subtitle Track"
+msgstr ""
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1892,22 +2017,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "자막 다시 로드"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "다음 오디오 (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "이전 오디오 (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "다음 자막 (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "이전 자막 (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "다음 앵글 (DVD)"
@@ -1917,28 +2026,28 @@ msgid "Prev Angle (DVD)"
msgstr "이전 앵글 (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "다음 오디오 (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "이전 오디오 (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "다음 자막 (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "이전 자막 (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "자막 표시/표시안함 (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "남은 시간"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr ""
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1964,11 +2073,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "암호화"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "예"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "아니오"
@@ -2025,11 +2134,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "볼륨: %02lu/%02lu, 타이틀: %02lu/%02lu, 챕터: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "앵글: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr ""
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2120,36 +2229,28 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "이미지 너비"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL이 정확합니다!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "프로토콜 버전이 다릅니다. 플레이어를 업그레이드하거나 다른 주소를 선택하세요!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "화면비율"
+msgstr "화면 비율"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
msgstr ", 총: %ld, 실패: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", 크기: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", 크기: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", 여유: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", 여유: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2158,7 +2259,7 @@ msgstr ", 여유 V/A 버퍼: %03d/%03d"
msgctxt "IDS_AG_ERROR"
msgid "Error"
-msgstr "에러"
+msgstr "오류"
msgctxt "IDS_SUBTITLE_STREAM_OFF"
msgid "Subtitle: off"
@@ -2221,23 +2322,23 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr ""
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
msgstr ""
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
-msgstr ""
+msgstr "자막 파일"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
msgstr "화면 비율: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "화면 비율: 기본값"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr ""
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "오디오 지연: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2249,7 +2350,7 @@ msgid "Out of memory"
msgstr "메모리 없음"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
msgstr "에러: IE를 위한 Flash 기능이 필요합니다."
msgctxt "IDS_MAINFRM_78"
@@ -2272,10 +2373,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "파일을 렌더하는데 실패"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "부정확한 URL, 자막 데이터베이스를 위치시킬수 없습니다!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "챕터: "
@@ -2296,17 +2393,9 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "현재"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr ""
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "덤프파일을 만드는데 실패 '%s' (error %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
-msgstr "디렉토리 선택"
+msgstr "폴더 선택"
msgctxt "IDS_MAINFRM_DIR_CHECK"
msgid "Include subdirectories"
@@ -2321,7 +2410,7 @@ msgid "Toggle Caption&Menu"
msgstr "제목표시줄&메뉴 토글"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "탐색바 토글"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2430,7 +2519,7 @@ msgstr " (음성 해설 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr ""
+msgstr "DVD 자막 활성화"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
@@ -2454,7 +2543,7 @@ msgstr "MPC-HC D3D 전체화면"
msgctxt "IDS_MAINFRM_137"
msgid "Unknown format"
-msgstr "알려지지않은 형식"
+msgstr "알 수 없는 형식"
msgctxt "IDS_MAINFRM_138"
msgid "Sub shift: %ld ms"
@@ -2477,16 +2566,16 @@ msgid "Volume boost Max"
msgstr "볼륨 부스트 최대"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "사용법: mpc-hc.exe \"경로이름\" [스위치]\n\n\"경로이름\"\t로드할 파일이나 디렉토리. (와일드카드\n\t\t사용가능, \"-\" denotes standard input)\n/dub \"더빙파일\"\t추가적인 오디오 파일\n/dubdelay \"파일\"\tXXms 딜레이된 추가적인 오디오 파일 (\n\t\t파일이 다음을 포함 \"...DELAY XXms...\")\n/d3dfs\t\tD3D 전체화면모드에서 렌더링\n/sub \"자막파일\"\t추가적인 자막파일\n/filter \"필터파일\"\tDLL파일에서 다이렉트쇼 필터를 로드함 (와일드카드사용가능)\n/dvd\t\tdvd재생모드, \"경로이름\" 을 지정했을 경우, DVD 폴더를 의마함 (옵션)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\t오디오CD 또는 (S)VCD의 모든 트랙을 로드함,\n\t\t\"경로이름\" 을 지정했을 경우 드라이브를 의미함 (옵션)\n/device\t\tOpen the default video device\n/open\t\t파일을 열고 재생을 시작하지는 않음\n/play\t\t파일을 열고 재생을 시작함\n/close\t\t재생이 끝나면 플레이어 종료 (/play 스위치를 같이 써야함)\n/shutdown\t재생이 끝나면 시스템 종료\n/fullscreen\t전체화면모드로 재생시작\n/minimized\t최소화모드로 재생시작\n/new\t\t플레이어 창을 하나 더 생성\n/add\t\t재생목록에 지정한 \"경로이름\"을 추가,\n\t\t/open 과 /play 스위치와 같이 사용가능\n/regvid\t\t비디오 파일 확장명을 MPC-HC로 연결\n/regaud\t\t오디오 파일 확장명을 MPC-HC로 연결\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tMPC-HC로 연결했던 확장명 해제\n/start ms\t\t지정한 \"ms\" (= 밀리초)위치에서 재생시작\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\t지정한 가로(w), 세로(h) 크기로 고정\n/monitor N\tN번 모니터에서 시작(N은 1이상이어야함)\n/audiorenderer N\t오디오렌더러 N 번(1부터 시작)을 사용해서 시작\n\t\t(\"출력\" 설정을 참고하세요)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\t명령입력 스위치 옵션을 출력\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
-msgstr "인식불가능한 스위치가 사용됨: \n\n"
+msgstr "인식 불가능한 스위치가 사용됨: \n\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
-msgstr "파일정보 토글"
+msgstr "파일 정보 토글"
msgctxt "IDS_AG_TOGGLE_STATS"
msgid "Toggle Statistics"
@@ -2510,7 +2599,7 @@ msgstr "캡쳐 토글"
msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
msgid "Toggle Debug Shaders"
-msgstr ""
+msgstr "셰이더 디버그 토글"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
@@ -2564,14 +2653,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "모든 필터 사용(&E)"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "튜너 검색"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "자막이 로드되지않았거나 지원되지않는 렌더러입니다."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "만든이 알수없음. 이 로고를 당신이 만들었다면 나에게 연락해주세요!"
@@ -2660,40 +2741,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "위쪽 후면 우측"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr ""
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "자막::기타"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "외곽선 숨기기"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "창 프레임만"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "제목표시줄과 메뉴 보이기"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "메뉴 숨기기"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr ""
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "탐색바 위에"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "탐색바 아래에"
msgctxt "IDS_VIDEO_STREAM"
@@ -2702,7 +2755,7 @@ msgstr "비디오: %s"
msgctxt "IDS_APPLY"
msgid "Apply"
-msgstr ""
+msgstr "적용"
msgctxt "IDS_CLEAR"
msgid "Clear"
@@ -2730,19 +2783,19 @@ msgstr "모든 필터 사용안함(&D)"
msgctxt "IDS_ENABLE_AUDIO_FILTERS"
msgid "Enable all audio decoders"
-msgstr ""
+msgstr "모든 오디오 디코더 사용"
msgctxt "IDS_DISABLE_AUDIO_FILTERS"
msgid "Disable all audio decoders"
-msgstr ""
+msgstr "모든 디코더 사용안함"
msgctxt "IDS_ENABLE_VIDEO_FILTERS"
msgid "Enable all video decoders"
-msgstr ""
+msgstr "모든 비디오 디코더 사용"
msgctxt "IDS_DISABLE_VIDEO_FILTERS"
msgid "Disable all video decoders"
-msgstr ""
+msgstr "모든 비디오 디코더 사용안함"
msgctxt "IDS_STRETCH_TO_WINDOW"
msgid "Stretch To Window"
@@ -2861,8 +2914,8 @@ msgid "Other Audio"
msgstr "기타 오디오"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr ""
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2872,6 +2925,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr ""
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2936,29 +3009,13 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
-msgstr "재생목록"
+msgstr "재생 목록"
msgctxt "IDS_MFMT_BDPLS"
msgid "Blu-ray playlist"
-msgstr ""
+msgstr "블루레이 재생 목록"
msgctxt "IDS_MFMT_RAR"
msgid "RAR Archive"
@@ -2970,24 +3027,12 @@ msgstr "FPS"
msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
msgid "Resolution"
-msgstr ""
+msgstr "해상도"
msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "화면비율"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "WASAPI 사용 (재생 다시시작)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "빠른 탐색시 음소거"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "사운드 장치:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: 켜짐"
@@ -3238,7 +3283,7 @@ msgstr ""
msgctxt "IDS_OSD_ZOOM_AUTO"
msgid "Zoom: Auto"
-msgstr ""
+msgstr "확대: 자동"
msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
msgid "Toggle custom channel mapping"
@@ -3276,6 +3321,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr ""
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr ""
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3333,7 +3382,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "프레임 레이트를 파싱하는데에 오류가 발생했습니다!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "프레임 단위 이동에 문제가 있으면, 다른 비디오 렌더러를 사용해보세요."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3352,10 +3401,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "'이미지 저장' 과 '썸넴일 저장' 은 비디오 렌더러가 오버레이 믹서로 설정되어있을 때는 작동하지 않습니다.\n'출력' 옵션에서 비디오 렌더러를 변경한 후에 파일을 다시 여십시오."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "온라인 자막 디비 접속 불가."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "EDL 편집기를 활성화하시겠습니까?"
@@ -3424,7 +3469,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "설정들을 테스트해보려면 설정들을 적용시켜야 합니다."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "재생이 끝나면: 종료"
@@ -3450,6 +3495,14 @@ msgstr "재생이 끝나면: 컴퓨터 잠금모드"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
+msgstr "재생이 끝나면: 모니터를 끄기"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
msgstr ""
msgctxt "IDS_OSD_BRIGHTNESS"
@@ -3506,7 +3559,7 @@ msgstr "타이틀(&T)"
msgctxt "IDS_NAVIGATE_CHANNELS"
msgid "&Channels"
-msgstr "채널(%C)"
+msgstr "채널(&C)"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
@@ -3532,3 +3585,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "설정"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "자막 다운로드"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "다운로드 && 열기"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "초기화"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "위로"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "아래로"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "자막 업로드"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.lt.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.lt.dialogs.po
new file mode 100644
index 000000000..d5d03504d
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.lt.dialogs.po
@@ -0,0 +1,1795 @@
+# MPC-HC - Strings extracted from dialogs
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# linasmi <linasmi@mail.ru>, 2014-2015
+# Linas Tamašauskas, 2015-2016
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-02-17 11:12+0000\n"
+"Last-Translator: Linas Tamašauskas\n"
+"Language-Team: Lithuanian (http://www.transifex.com/mpc-hc/mpc-hc/language/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
+msgid "Select Media Type"
+msgstr "Pasirinkite tipą"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDOK"
+msgid "OK"
+msgstr "Gerai"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
+msgid "Cancel"
+msgstr "Atšaukti"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
+msgid "Video"
+msgstr "Vaizdas"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
+msgid "Set"
+msgstr "Nustatyti"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Audio"
+msgstr "Garsas"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Output"
+msgstr "Išvestis"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
+msgid "Record Video"
+msgstr "Įrašyti vaizdą"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
+msgid "Preview"
+msgstr "Peržiūra"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
+msgid "Record Audio"
+msgstr "Įrašyti garsą"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
+msgid "Preview"
+msgstr "Peržiūra"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "V/A Buffers:"
+msgstr "V/A Buferiai:"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
+msgid "Audio to wav"
+msgstr "Garso takelis į wav"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
+msgid "Record"
+msgstr "Įrašas"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
+msgid "Enable built-in audio switcher filter (requires restart)"
+msgstr "Įjungti įtaisytą garso takelių perjungiklį (reikalingas paleidimas iš naujo)"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
+msgid "Normalize"
+msgstr "Normalizuoti"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
+msgid "Max amplification:"
+msgstr "Maksimalus stiprinimas:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
+msgid "Regain volume"
+msgstr "Atstatyti garsą"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
+msgid "Boost:"
+msgstr "Stiprinimas:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
+msgid "Down-sample to 44100 Hz"
+msgstr "Transformuoti į 44100 Hz"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
+msgid "Audio time shift (ms):"
+msgstr "Garso poslinkis (ms):"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
+msgid "Enable custom channel mapping"
+msgstr "Įjungti vartotojo kanalų skirstymą"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
+msgid "Speaker configuration for"
+msgstr "Garsiakalbių nustatymas"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
+msgid "input channels:"
+msgstr "įeinantiems kanalams:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Laikykite nuspaustą shift pakeitimams panaudoti iš karto paspaudus"
+
+msgctxt "IDD_GOTO_DLG_CAPTION"
+msgid "Go To..."
+msgstr "Eiti į..."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
+msgstr "Įveskite laiką formatu [vv:]mm:ss.ms, kad pereiti prie nurodyto laiko."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Time"
+msgstr "Laikas"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK1"
+msgid "Go!"
+msgstr "Pirmyn!"
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
+msgstr "Įrašykite du skaičius perėjimui prie nurodyto kadro: pirmas - kadro numeris, antras - kadrų skaičius į sekundę."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Frame"
+msgstr "Kadras"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK2"
+msgid "Go!"
+msgstr "Pirmyn!"
+
+msgctxt "IDD_OPEN_DLG_CAPTION"
+msgid "Open"
+msgstr "Atverti"
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
+msgstr "Įrašykite garso ar vaizdo failo (esančio jūsų kompiuteryje arba internete) adresą ir grotuvas atidarys kūrinį jums."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Open:"
+msgstr "Atverti:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Naršyti..."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
+msgid "Dub:"
+msgstr "Dubliažas:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Naršyti..."
+
+msgctxt "IDD_OPEN_DLG_IDOK"
+msgid "OK"
+msgstr "Gerai"
+
+msgctxt "IDD_OPEN_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Ašaukti"
+
+msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
+msgid "Add to playlist without opening"
+msgstr "Pridėti į grojaraštį neatidarant"
+
+msgctxt "IDD_ABOUTBOX_CAPTION"
+msgid "About"
+msgstr "Apie"
+
+msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Autorinės teisės © 2002-2017 skaitykite Authors.txt"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "This program is freeware and released under the GNU General Public License."
+msgstr "Ši programa yra nemokama ir platinama pagal licenciją GNU General Public License."
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "English translation made by MPC-HC Team"
+msgstr "Vertė: Linasmi Linas Tamašauskas, Martynas Kybartas, Ramūnas."
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build information"
+msgstr "Sąrankos informacija"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Version:"
+msgstr "Versija:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Compiler:"
+msgstr "Kompiliatorius"
+
+msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
+msgid "Not used"
+msgstr "Nenaudojama"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build date:"
+msgstr "Sąrankos data:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Operating system"
+msgstr "Operacinė sistema"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Name:"
+msgstr "Vardas:"
+
+msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
+msgid "Copy to clipboard"
+msgstr "Kopijuoti į iškarpinę"
+
+msgctxt "IDD_ABOUTBOX_IDOK"
+msgid "OK"
+msgstr "Gerai"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Open options"
+msgstr "Atidaryti nustatymus"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
+msgid "Use the same player for each media file"
+msgstr "Tas pats grotuvas kiekvienam failui"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
+msgid "Open a new player for each media file played"
+msgstr "Kiekvienam failui atverti naują grotuvą"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Language"
+msgstr "Kalba"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Title bar"
+msgstr "Pavadinimo juostoje"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
+msgid "Display full path"
+msgstr "Rodyti pilną kelią"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
+msgid "File name only"
+msgstr "Tik failo vardą"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
+msgid "Don't prefix anything"
+msgstr "Nieko nerodyti"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
+msgid "Replace file name with title"
+msgstr "Failo vardą pakeisti pavadinimu"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Other"
+msgstr "Kita"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
+msgid "Tray icon"
+msgstr "Užduočių juostos piktograma"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
+msgid "Show OSD (requires restart)"
+msgstr "Rodyti OSD (reikalingas paleidimas iš naujo)"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
+msgid "Limit window proportions on resize"
+msgstr "Lango kraštinių proporcijos pagal kadrą"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
+msgid "Snap to desktop edges"
+msgstr "Prilipti prie ekrano kraštinių"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
+msgid "Store settings in .ini file"
+msgstr "Išsaugoti nustatymus .ini faile"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
+msgid "Disable \"Open Disc\" menu"
+msgstr "Išjungti „Atidaryti diską“ meniu"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
+msgid "Process priority above normal"
+msgstr "Padidintas proceso prioritetas"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
+msgid "Enable cover-art support"
+msgstr "Įjungti viršelio palaikymą"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "History"
+msgstr "Žurnalas"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
+msgid "Keep history of recently opened files"
+msgstr "Išsaugoti atidarytų failų istoriją"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
+msgid "Remember last playlist"
+msgstr "Įsiminti paskutinį grojimo sąrašą"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
+msgid "Remember File position"
+msgstr "Įsiminti Failo poziciją"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
+msgid "Remember DVD position"
+msgstr "Įsiminti DVD poziciją"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
+msgid "Remember last window position"
+msgstr "Įsiminti paskutinę lango poziciją"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
+msgid "Remember last window size"
+msgstr "Įsiminti paskutinį lango dydį"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
+msgid "Remember last Pan-n-Scan Zoom"
+msgstr "Įsiminti paskutinį Pan-n-Scan mastelį"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "\"Open DVD/BD\" behavior"
+msgstr "„Atverti DVD/BD“ komandos elgesys"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
+msgid "Prompt for location"
+msgstr "Pasirinkti aplanką"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
+msgid "Always open the default location:"
+msgstr "Visuomet atverti pagal nutylėjimą:"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Preferred language for DVD Navigator and the external OGM Splitter"
+msgstr "Teikti pirmenybę DVD navigatoriaus ir OGM spliterio kalbai"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
+msgid "Menu"
+msgstr "Meniu"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
+msgid "Audio"
+msgstr "Garsas"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
+msgid "Subtitles"
+msgstr "Subtitrai"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Additional settings"
+msgstr "Papildomi nustatymai"
+
+msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
+msgid "Allow closed captions in \"Line 21 Decoder\""
+msgstr "Leisti subtitrus neprigirdintiems 'Line 21 Decoder'"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio"
+msgstr "Garsas"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume"
+msgstr "Garsumas"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Min"
+msgstr "Tyliau"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Max"
+msgstr "Garsiau"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
+msgid "Balance"
+msgstr "Balansas"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "L"
+msgstr "K"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "R"
+msgstr "D"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Playback"
+msgstr "Įrašo peržiūra"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
+msgid "Play"
+msgstr "Groti"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
+msgid "Repeat forever"
+msgstr "Visada kartoti"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
+msgid "time(s)"
+msgstr "kartus(ų)"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "After Playback"
+msgstr "Baigus groti"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default zoom"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
+msgid "Auto-zoom:"
+msgstr "Automastelis"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
+msgid "Auto fit factor:"
+msgstr "Įrašyti į:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default track preference"
+msgstr "Takelių pasirinkimo prioritetas"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Subtitles:"
+msgstr "Subtitrai:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio:"
+msgstr "Garsas:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
+msgid "Allow overriding external splitter choice"
+msgstr "Leisti išorinių spliterių pasirinkimo perskirstymą"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Open settings"
+msgstr "Atidaryti nustatymus"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
+msgid "Use worker thread to construct the filter graph"
+msgstr "Darbinis srautas filtrų grandinei sukurti"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
+msgid "Report pins which fail to render"
+msgstr "Ataskaita apie srautų renderingo klaidas"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
+msgid "Auto-load audio files"
+msgstr "Automatinis garso failų įkėlimas"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Control"
+msgstr "Valdymas"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume step:"
+msgstr "Garso žingsnis:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Speed step:"
+msgstr "Greičio žingsnis:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
+msgid "Override placement"
+msgstr "Pakeisti padėtį"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
+msgid "Horizontal:"
+msgstr "Horizontaliai:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC2"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC3"
+msgid "Vertical:"
+msgstr "Vertikaliai:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC4"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Delay step"
+msgstr "Užlaikymo žingsnis"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Texture settings (open the video again to see the changes)"
+msgstr "Tekstūros nustatymas (atidarykite vaizdą iš naujo, kad pamatytumėte pakeitimus)"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Sub pictures to buffer:"
+msgstr "Fragmentų kiekis buferyje:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Maximum texture resolution:"
+msgstr "Maksimalus tekstūros dydis:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
+msgid "Never animate the subtitles"
+msgstr "Niekada neanimuoti subtitrų"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
+msgid "Render at"
+msgstr "Vaizduoti"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
+msgid "% of the animation"
+msgstr "% animacijos"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
+msgid "Animate at"
+msgstr "Animuoti"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
+msgid "% of the video frame rate"
+msgstr "% vaizdo kadro"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Allow dropping some subpictures if the queue is running late"
+msgstr "Įjungti kai kurių kadrų išmetimą vėluojant."
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Renderer Layout"
+msgstr "Renderio išdėstymas"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
+msgid "Apply aspect ratio compensation for anamorphic videos"
+msgstr "Kompensuoti anamorfinio vaizdo kraštinių santykį"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Warning"
+msgstr "Įspėjimas"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Jei jūs pakeisite padėtį ir įjungsite pilnaekranį išlyginimą vaizdo plokštės nustatymuose, subtitrai neatrodys geriau, bet papildomai eikvos procesorių."
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
+msgid "File extensions"
+msgstr "Failų išplėtimai"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
+msgid "Default"
+msgstr "Numatyta"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
+msgid "Set"
+msgstr "Nustatyti"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
+msgid "Association"
+msgstr "Susiejimas"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
+msgid "Use the format-specific icons"
+msgstr "Naudoti specialias piktogramas"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
+msgid "Run as &administrator"
+msgstr "Paleisti &administratoriaus teisėmis"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
+msgid "Set as &default program"
+msgstr "Nustatyti programą kaip pagrin&dinę"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
+msgstr "Atidaryti Real-Time Streaming Protocol (rtsp://...)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
+msgid "RealMedia"
+msgstr "RealMedia"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO2"
+msgid "QuickTime"
+msgstr "QuickTime"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO3"
+msgid "DirectShow"
+msgstr "DirectShow"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
+msgid "Check file extension first"
+msgstr "Pirmiau žiūrėti failo išplėtimą"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Explorer Context Menu"
+msgstr "Naršyklės kontekstinis meniu"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK6"
+msgid "Directory"
+msgstr "Aplankas"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK7"
+msgid "File(s)"
+msgstr "Failas(ai)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
+msgid "Autoplay"
+msgstr "Automatinis paleidimas"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
+msgid "Video"
+msgstr "Vaizdas"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK2"
+msgid "Music"
+msgstr "Muzika"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK4"
+msgid "DVD"
+msgstr "DVD"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
+msgid "Audio CD"
+msgstr "Audio CD"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "Jump distances (small, medium, large in ms)"
+msgstr "Perėjimo atstumai (trumpas, vidutinis, ilgas) ms"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
+msgid "Default"
+msgstr "Numatyta"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
+msgid "Fast seek (on keyframe)"
+msgstr "Greita prasuka (pagal raktinius kadrus)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
+msgid "Show chapter marks in seek bar"
+msgstr "Rodyti skyrių žymes prasukos juostoje"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
+msgid "Display \"Now Playing\" information in Skype's mood message"
+msgstr "Rodyti „Dabar groja“ Skype programoje (būsenos nustatymas)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
+msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
+msgstr "Neminimizuoti lango papildomame monitoriuje pilnaekranėje veiksenoje"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Naudoti patobulintas užduočių juostos funkcijas"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Atverti sekantį/ankstesnį failą aplanke su „Pirmyn/Atgal“, kai grojaraštyje tik vienas įrašas"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
+msgid "Show time tooltip:"
+msgstr "Rodyti laiką:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "OSD font:"
+msgstr "OSD šriftas:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
+msgid "Enable Logitech LCD support (experimental)"
+msgstr "Įjungti Logitech LCD palaikymą (eksperimentinis)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
+msgid "Auto-hide the mouse pointer during playback in windowed mode"
+msgstr "Automatiškai slėpti pelės žymeklį grojant lange"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
+msgid "Add Filter..."
+msgstr "Pridėti Filtrą..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
+msgid "Remove"
+msgstr "Pašalinti"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO1"
+msgid "Prefer"
+msgstr "Teikti pirmenybę"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO2"
+msgid "Block"
+msgstr "Blokuoti"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
+msgid "Set merit:"
+msgstr "Reikšmingumas:"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
+msgid "Up"
+msgstr "Aukščiau"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON4"
+msgid "Down"
+msgstr "Žemiau"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
+msgid "Add Media Type..."
+msgstr "Naujas tipas..."
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
+msgid "Add Sub Type..."
+msgstr "Naujas subtipas"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
+msgid "Delete"
+msgstr "Šalinti"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
+msgid "Reset List"
+msgstr "Išvalyti sąrašą"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Type:"
+msgstr "Tipas:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Size:"
+msgstr "Dydis:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Media length:"
+msgstr "Trukmė:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Video size:"
+msgstr "Kadro dydis:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Created:"
+msgstr "Sukurta:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Clip:"
+msgstr "Pavadinimas"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Author:"
+msgstr "Autorius:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Copyright:"
+msgstr "Autorinės teisės:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Rating:"
+msgstr "Reitingas:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Location:"
+msgstr "Vieta:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Description:"
+msgstr "Aprašymas:"
+
+msgctxt "IDD_FAVADD_CAPTION"
+msgid "Add Favorite"
+msgstr "Pridėti į parankinius"
+
+msgctxt "IDD_FAVADD_IDC_STATIC"
+msgid "Choose a name for your shortcut:"
+msgstr "Pasirinkite vardą savo nuorodai:"
+
+msgctxt "IDD_FAVADD_IDC_CHECK1"
+msgid "Remember position"
+msgstr "Įsiminti poziciją"
+
+msgctxt "IDD_FAVADD_IDCANCEL"
+msgid "Cancel"
+msgstr "Ašaukti"
+
+msgctxt "IDD_FAVADD_IDOK"
+msgid "OK"
+msgstr "Gerai"
+
+msgctxt "IDD_FAVADD_IDC_CHECK2"
+msgid "Relative drive"
+msgstr "Santykinai disko"
+
+msgctxt "IDD_FAVORGANIZE_CAPTION"
+msgid "Organize Favorites"
+msgstr "Parankiniai"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
+msgid "Rename"
+msgstr "Pervardyti"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
+msgid "Move Up"
+msgstr "Kelti Aukštyn"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
+msgid "Move Down"
+msgstr "Kelti Žemyn"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
+msgid "Delete"
+msgstr "Šalinti"
+
+msgctxt "IDD_FAVORGANIZE_IDOK"
+msgid "OK"
+msgstr "Gerai"
+
+msgctxt "IDD_PNSPRESET_DLG_CAPTION"
+msgid "Pan&Scan Presets"
+msgstr "Dydžio ir padėties priešnustatymai"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
+msgid "New"
+msgstr "Naujas"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON3"
+msgid "Delete"
+msgstr "Šalinti"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
+msgid "Up"
+msgstr "Aukščiau"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
+msgid "Down"
+msgstr "Žemiau"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
+msgid "&Set"
+msgstr "Nu&statyti"
+
+msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
+msgid "&Cancel"
+msgstr "At&šaukti"
+
+msgctxt "IDD_PNSPRESET_DLG_IDOK"
+msgid "&Save"
+msgstr "&Saugoti"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Pos: 0.0 -> 1.0"
+msgstr "Pozicija: 0.0 -> 1.0"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Zoom: 0.2 -> 3.0"
+msgstr "Mastelis: 0.2 -> 3.0"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
+msgid "Global Media Keys"
+msgstr "Globalūs multimediniai klavišai"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
+msgid "Select All"
+msgstr "Žymėti viską"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
+msgid "Reset Selected"
+msgstr "Atkurti pasirinktą"
+
+msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
+msgid "Warning"
+msgstr "Įspėjimas"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
+msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
+msgstr "MPC-HC negali groti kai kurių srautų, galbūt, pas jus nėra įdiegtas reikalingas kodekas arba filtras."
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
+msgid "The following pin(s) failed to find a connectable filter:"
+msgstr "Šiems srautams nerastas tinkamas filtras:"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDOK"
+msgid "Close"
+msgstr "Užverti"
+
+msgctxt "IDD_SAVE_DLG_CAPTION"
+msgid "Saving..."
+msgstr "Saugojama..."
+
+msgctxt "IDD_SAVE_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "Ašaukti"
+
+msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Koduotė:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Kodavimas:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "Delay:"
+msgstr "Delsa:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
+msgid "Save custom style"
+msgstr "Išsaugoti vartotojo stilių"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG kokybė:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Thumbnails:"
+msgstr "Miniatiūros:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "rows"
+msgstr "eilučių"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "columns"
+msgstr "stulpelių"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Image width:"
+msgstr "Vaizdo plotis:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "pixels"
+msgstr "taškų"
+
+msgctxt "IDD_ADDREGFILTER_CAPTION"
+msgid "Select Filter"
+msgstr "Pasirinkti filtrą"
+
+msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Naršyti..."
+
+msgctxt "IDD_ADDREGFILTER_IDOK"
+msgid "OK"
+msgstr "Gerai"
+
+msgctxt "IDD_ADDREGFILTER_IDCANCEL"
+msgid "Cancel"
+msgstr "Ašaukti"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Font"
+msgstr "Šriftas"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_BUTTON1"
+msgid "Font"
+msgstr "Šriftas"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Spacing"
+msgstr "Intervalas"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Angle (z,°)"
+msgstr "Kampas (z,°)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (x,%)"
+msgstr "Mastelis (x,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (y,%)"
+msgstr "Mastelis (y,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Border Style"
+msgstr "Kraštinės stilius"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
+msgid "Outline"
+msgstr "Kontūras"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
+msgid "Opaque box"
+msgstr "Užpildas"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Width"
+msgstr "Plotis"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Shadow"
+msgstr "Šešėlis"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Screen Alignment && Margins"
+msgstr "Išlyginimas ir įtraukos"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Left"
+msgstr "Kairėje"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Right"
+msgstr "Dešinėje"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Top"
+msgstr "Viršuje"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Bottom"
+msgstr "Apačioje"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
+msgid "Position subtitles relative to the video frame"
+msgstr "Rodyti subtitrus atitinkamai kadro"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Colors && Transparency"
+msgstr "Spalvos ir skaidrumas"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "0%"
+msgstr "0%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Primary"
+msgstr "Pirminis"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Secondary"
+msgstr "Antrinis"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Outline"
+msgstr "Kontūras"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
+msgid "Link alpha channels"
+msgstr "Susieti alfa kanalus"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
+msgstr "Jei jūs norite naudoti atskirą šių filtrų versiją ar kitą pakaitalą, išjunkite juos čia."
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Source Filters"
+msgstr "Šaltinių filtrai"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Transform Filters"
+msgstr "Dekoderiai"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Internal LAV Filters settings"
+msgstr "Vidiniai LAV Filters nustatymai"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
+msgid "Splitter"
+msgstr "Spliteris"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
+msgid "Video decoder"
+msgstr "Vaizdo dekoderis"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
+msgid "Audio decoder"
+msgstr "Garso dekoderis"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
+msgid "Internal:"
+msgstr "Vidinis:"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO2"
+msgid "External:"
+msgstr "Išorinis:"
+
+msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "Naršyti..."
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DirectShow Video"
+msgstr "DirectShow Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "RealMedia Video"
+msgstr "RealMedia Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "QuickTime Video"
+msgstr "QuickTime Video"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Audio Renderer"
+msgstr "Garso renderis"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderless) ir EVR (CP) nustatymai"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Surface:"
+msgstr "Paviršius:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Resizer:"
+msgstr "Interpoliacija:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
+msgid "Select D3D9 Render Device"
+msgstr "Pasirinkti D3D9 vaizdavimo įrenginį"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
+msgid "Reinitialize when changing display"
+msgstr "Inicializuoti iš naujo pakeitus monitorių"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "D3D Fullscreen"
+msgstr "Pilnaekranis D3D"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Alternative VSync"
+msgstr "Alternatyvi VSync"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
+msgid "VMR-9 Mixer Mode"
+msgstr "VMR-9 mikserio režimas"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
+msgid "YUV Mixing"
+msgstr "YUV Miksavimas"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
+msgid "EVR Buffers:"
+msgstr "EVR Buferiai:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitles"
+msgstr "Subtitrai"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Screenshot"
+msgstr "Ekrano nuortrauka"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Shaders"
+msgstr "Tamsinimai"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Rotation"
+msgstr "Pasukimas"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitle Renderer"
+msgstr "Subtitrų renderis"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
+msgid "Listen on port:"
+msgstr "Klausyti prievadą:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
+msgid "Launch in web browser..."
+msgstr "Paleisti interneto naršyklėje"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
+msgid "Enable compression"
+msgstr "Įgalinti glaudinimą"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
+msgid "Allow access from localhost only"
+msgstr "Leisti tik lokaliąją prieigą"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Įjungti peržiūrą"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
+msgid "Print debug information"
+msgstr "Derinimo informacijos išvedimas"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
+msgid "Serve pages from:"
+msgstr "Imti puslapius iš:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "Naršyti..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
+msgid "Deploy..."
+msgstr "Dislokuoti..."
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "Default page:"
+msgstr "Numatytasis puslapis:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
+msgstr "CGI valdikliai: (.ext1=path1;.ext2=path2;...)"
+
+msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
+msgid "Download subtitles"
+msgstr "Atsisiųsti subtitrus"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
+msgid "Replace currently loaded subtitles"
+msgstr "Pakeisti jau įkeltus subtitrus"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Nustatymai"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Nustatymai"
+
+msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
+msgid "Save As..."
+msgstr "Išsaugoti Kaip..."
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Color controls (for VMR-9, EVR and madVR)"
+msgstr "Spalvų valdymas (VMR-9, EVR, madVR)"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Brightness"
+msgstr "Šviesumas"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Contrast"
+msgstr "Kontrastas"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Hue"
+msgstr "Atspalvis"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Saturation"
+msgstr "Sodrumas"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET"
+msgid "Reset"
+msgstr "Atstatyti"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Update check"
+msgstr "Atnaujinimų tikrinimas"
+
+msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
+msgid "Enable automatic update check"
+msgstr "Įjungti atnaujinimų automatinį tikrinimą"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
+msgid "Check every:"
+msgstr "Tikrinti kas:"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
+msgid "day(s)"
+msgstr "dienas (-ų)"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Settings management"
+msgstr "Nuostatų valdymas"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
+msgid "Reset"
+msgstr "Atstatyti numatytuosius"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
+msgid "Export"
+msgstr "Eksportuoti"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
+msgid "Export keys"
+msgstr "Eksportuoti klavišus"
+
+msgctxt "IDD_TUNER_SCAN_CAPTION"
+msgid "Tuner scan"
+msgstr "Tiunerio skenavimas"
+
+msgctxt "IDD_TUNER_SCAN_ID_START"
+msgid "Start"
+msgstr "Pradėti"
+
+msgctxt "IDD_TUNER_SCAN_IDCANCEL"
+msgid "Cancel"
+msgstr "Ašaukti"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. Start"
+msgstr "Pradinis dažnis"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Bandwidth"
+msgstr "Dažnių juosta"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. End"
+msgstr "Galutinis dažnis"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
+msgid "Ignore encrypted channels"
+msgstr "Ignoruoti užšifruotus kanalus"
+
+msgctxt "IDD_TUNER_SCAN_ID_SAVE"
+msgid "Save"
+msgstr "Išsaugoti"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "S"
+msgstr "S"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Q"
+msgstr "Q"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
+msgid "Use an offset"
+msgstr "Naudoti poslinkį"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Default Device"
+msgstr "Numatytasis įrenginys"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
+msgid "Analog"
+msgstr "Analoginis"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO2"
+msgid "Digital"
+msgstr "Skaitmeninis"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Analog settings"
+msgstr "Analoginis įrenginys"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC1"
+msgid "Video"
+msgstr "Vaizdas"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC2"
+msgid "Audio"
+msgstr "Garsas"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC3"
+msgid "Country"
+msgstr "Šalis"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Digital settings (BDA)"
+msgstr "Skaitmeninio kanalo nustatymai (BDA)"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
+msgid "Network Provider"
+msgstr "Tinklo tiekėjas"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
+msgid "Tuner"
+msgstr "Tiuneris"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC6"
+msgid "Receiver"
+msgstr "Imtuvas"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
+msgid "Channel switching approach:"
+msgstr "Kanalų perjungimo būdas:"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
+msgid "Rebuild filter graph"
+msgstr "Perstatyti grafą"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
+msgid "Stop filter graph"
+msgstr "Sustabdyti grafą"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
+msgid "Sync video to display"
+msgstr "Sinchronizuoti vaizdą su displėjumi"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
+msgid "Frequency adjustment:"
+msgstr "Dažnio korekcija:"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
+msgid "Sync display to video"
+msgstr "Sinchronizuoti displėjų su vaizdu"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
+msgid "Frequency adjustment:"
+msgstr "Dažnio korekcija:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC3"
+msgid "lines"
+msgstr "linijų"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
+msgid "columns"
+msgstr "stulpelių"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
+msgid "Present at nearest VSync"
+msgstr "Pateikti su artimiausiu vsync"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
+msgid "Target sync offset:"
+msgstr "Tikslinis sinchronizacijos poslinkis:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC7"
+msgid "Control limits:"
+msgstr "Valdymo limitai:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
+msgid "+/-"
+msgstr "+/-"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
+msgid "Changes take effect after the playback has been closed and restarted."
+msgstr "Pakeitimai įsigalios sustabdžius ir paleidus iš naujo grojimą"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
+msgid "Launch files in fullscreen"
+msgstr "Paleisti failus pilnaekranėje veiksenoje"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
+msgid "Hide controls in fullscreen"
+msgstr "Slėpti valdymo elementus pilno ekrano veiksenoje"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
+msgid "ms"
+msgstr "ms"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
+msgid "Hide docked panels"
+msgstr "Slėpti užtvirtintas juostas"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
+msgid "Exit fullscreen at the end of playback"
+msgstr "Baigus groti išeiti iš pilnaekranės veiksenos"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Fullscreen monitor"
+msgstr "Monitorius pilnaekranei veiksenai"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
+msgid "Use autochange fullscreen monitor mode"
+msgstr "Perjungti monitoriaus režimą pilnaekranėje veiksenoje"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
+msgid "Add"
+msgstr "Pridėti"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
+msgid "Del"
+msgstr "Pašalinti"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
+msgid "Up"
+msgstr "Aukštyn"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON4"
+msgid "Down"
+msgstr "Žemyn"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
+msgid "Apply default monitor mode on fullscreen exit"
+msgstr "Pereinant iš pilnaekranės veiksenos panaudoti režimą „pagal nutylėjimą“"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
+msgid "Restore resolution on program exit"
+msgstr "Atstatyti skiriamąją gebą išeinant iš programos"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Delay"
+msgstr "Delsa"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
+msgid "s"
+msgstr "s"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
+msgid "Info"
+msgstr "Informacija"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_SCAN"
+msgid "Scan"
+msgstr "Skenuoti"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
+msgid "Prefer forced and/or default subtitles tracks"
+msgstr "Teikti pirmenybę forsuotiems ir subtitrams pagal nutylėjimą"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
+msgid "Prefer external subtitles over embedded subtitles"
+msgstr "Visada naudoti išorinius subtitrus kaip pagrindinius"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
+msgid "Ignore embedded subtitles"
+msgstr "Nenaudoti integruotų subtitrų"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Autoload paths"
+msgstr "Kelias išoriniams subtitrams"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
+msgid "Reset"
+msgstr "Atstatyti"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Online search, download and upload subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Languages in order of preference:"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr ""
+
+msgctxt "IDD_UPDATE_DIALOG_CAPTION"
+msgid "Update Checker"
+msgstr "Tikrinti naujinimus"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
+msgid "&Download now"
+msgstr "Atsisiųsti &dabar"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
+msgid "Remind me &later"
+msgstr "Priminti vė&liau"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
+msgid "&Ignore this update"
+msgstr "&Ignoruoti šį naujinimą"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shaders contain special effects which can be added to the video rendering process."
+msgstr "Tamsinimai turi specialius efektus, kuriuos galima įdėti atvaizdavimo metu."
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
+msgid "Add shader file"
+msgstr "Pridėti tamsinimo failą"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
+msgid "Remove"
+msgstr "Pašalinti"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
+msgid "Add to pre-resize"
+msgstr "Pridėti prie pre-resize"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
+msgid "Add to post-resize"
+msgstr "Pridėti prie post-resize"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shader presets"
+msgstr "Tamsinimo priešnustatymai"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
+msgid "Load"
+msgstr "Įkelti"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
+msgid "Save"
+msgstr "Išsaugoti"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON5"
+msgid "Delete"
+msgstr "Šalinti"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active pre-resize shaders"
+msgstr "Aktyvūs pre-resize šeideriai"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active post-resize shaders"
+msgstr "Aktyvūs post-resize šeideriai"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
+msgid "Debug Shaders"
+msgstr "Tamsinimų derinimas"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
+msgid "Debug Information"
+msgstr "Derinimo informacija"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
+msgid "PS 2.0"
+msgstr "PS 2.0"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO2"
+msgid "PS 2.0b"
+msgstr "PS 2.0b"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO3"
+msgid "PS 2.0a"
+msgstr "PS 2.0a"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO4"
+msgid "PS 3.0"
+msgstr "PS 3.0"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
+msgid "Advanced Settings, do not edit unless you know what you are doing."
+msgstr "Papildomi nustatymai. Prieš keisdami juos įsitikinkite, jog žinote ką darote. "
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
+msgid "True"
+msgstr "Tiesa"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
+msgid "False"
+msgstr "Netiesa"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
+msgid "Default"
+msgstr "Numatyta"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Įrenginys"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Monopolinis režimas"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Leisti srautinį"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Nustatymai"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Įjungti stereo žiedavimą (ausinėms)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Nukirpimas:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Lygis:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Žymė"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Norint maksimaliai sumažinti garso iškraipymus, rekomenduojama laikyti garsumo lygį apie 85 % grojant garsų kūrinį suglaudintą su nuostoliais."
+
+msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG kokybė:"
+
+msgctxt "IDD_CMD_LINE_HELP_CAPTION"
+msgid "Command line help"
+msgstr "Komandinės eilutės žinynas"
+
+msgctxt "IDD_CMD_LINE_HELP_IDOK"
+msgid "OK"
+msgstr "Gerai"
+
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Lūžio ataskaita"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Apgailestaujame, tačiau, matomai, MPC-HC nulūžo. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Atsiųskite mums klaidos ataskaitą, kad padėtumėte mums nustatyti ir ištaisyti problemą."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Papildoma informacija"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Elektroninis paštas:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Elektroninio pašto adresas nėra būtinas, tačiau jis gali būti panaudotas susisiekti kūrėjams su jumis dėl papildomos informacijos."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Problemos aprašymas (tik anglų kalba)"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Paleisti iš naujo MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Išeiti iš MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.lt.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.lt.menus.po
new file mode 100644
index 000000000..f34150225
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.lt.menus.po
@@ -0,0 +1,712 @@
+# MPC-HC - Strings extracted from menus
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# linasmi <linasmi@mail.ru>, 2015-2016
+# Linas Tamašauskas, 2014-2016
+# Martynas Kybartas <maky@super.lt>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-03-17 15:02+0000\n"
+"Last-Translator: Linas Tamašauskas\n"
+"Language-Team: Lithuanian (http://www.transifex.com/mpc-hc/mpc-hc/language/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "POPUP"
+msgid "&File"
+msgstr "&Failas"
+
+msgctxt "ID_FILE_OPENQUICK"
+msgid "&Quick Open File..."
+msgstr "&Greitai atverti failą..."
+
+msgctxt "ID_FILE_OPENMEDIA"
+msgid "&Open File..."
+msgstr "&Atverti failą..."
+
+msgctxt "ID_FILE_OPENDVDBD"
+msgid "Open &DVD/BD..."
+msgstr "Atverti &DVD/BD..."
+
+msgctxt "ID_FILE_OPENDEVICE"
+msgid "Open De&vice..."
+msgstr "Atverti į&renginį"
+
+msgctxt "ID_FILE_OPENDIRECTORY"
+msgid "Open Dir&ectory..."
+msgstr "Atverti &katalogą"
+
+msgctxt "ID_FILE_OPENDISC"
+msgid "O&pen Disc"
+msgstr "A&tverti diską"
+
+msgctxt "ID_RECENT_FILES"
+msgid "Recent &Files"
+msgstr "&Paskiausiai naudoti failai"
+
+msgctxt "ID_FILE_CLOSE_AND_RESTORE"
+msgid "&Close"
+msgstr "&Uždaryti"
+
+msgctxt "ID_FILE_SAVE_COPY"
+msgid "&Save a Copy..."
+msgstr "Įrašyti k&opiją"
+
+msgctxt "ID_FILE_SAVE_IMAGE"
+msgid "Save &Image..."
+msgstr "Įrašyti at&vaizdą"
+
+msgctxt "ID_FILE_SAVE_THUMBNAILS"
+msgid "Save &Thumbnails..."
+msgstr "Įrašyti &miniatiūras"
+
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "Subtitrai"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Įke&lti subtitrus..."
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Išsaugoti sub&titrus"
+
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "Ats&isiųsti subtitrus"
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Nusiųsti subtitrus"
+
+msgctxt "ID_FILE_PROPERTIES"
+msgid "P&roperties"
+msgstr "Sa&vybės"
+
+msgctxt "ID_FILE_EXIT"
+msgid "E&xit"
+msgstr "&Baigti"
+
+msgctxt "POPUP"
+msgid "&View"
+msgstr "&Rodymas"
+
+msgctxt "ID_VIEW_CAPTIONMENU"
+msgid "Caption&&Menu"
+msgstr "Įrašų&&meniu"
+
+msgctxt "ID_VIEW_SEEKER"
+msgid "See&k Bar"
+msgstr "Slan&kjuostė"
+
+msgctxt "ID_VIEW_CONTROLS"
+msgid "&Controls"
+msgstr "&Valdymo mygtukai"
+
+msgctxt "ID_VIEW_INFORMATION"
+msgid "&Information"
+msgstr "&Informacija"
+
+msgctxt "ID_VIEW_STATISTICS"
+msgid "&Statistics"
+msgstr "&Statistika"
+
+msgctxt "ID_VIEW_STATUS"
+msgid "St&atus"
+msgstr "&Būsenos juosta"
+
+msgctxt "ID_VIEW_SUBRESYNC"
+msgid "Su&bresync"
+msgstr "Subtitrų sin&chronizavimas"
+
+msgctxt "ID_VIEW_PLAYLIST"
+msgid "Pla&ylist"
+msgstr "&Grojaraštis"
+
+msgctxt "ID_VIEW_CAPTURE"
+msgid "Captu&re"
+msgstr "Už&fiksuoti"
+
+msgctxt "ID_VIEW_NAVIGATION"
+msgid "Na&vigation"
+msgstr "Na&vigacija"
+
+msgctxt "ID_VIEW_DEBUGSHADERS"
+msgid "&Debug Shaders"
+msgstr "Tamsinimų &derinimas"
+
+msgctxt "POPUP"
+msgid "&Presets..."
+msgstr "Sąsajos &parinktys..."
+
+msgctxt "ID_VIEW_PRESETS_MINIMAL"
+msgid "&Minimal"
+msgstr "&Minimalus"
+
+msgctxt "ID_VIEW_PRESETS_COMPACT"
+msgid "&Compact"
+msgstr "&Kompaktiškas"
+
+msgctxt "ID_VIEW_PRESETS_NORMAL"
+msgid "&Normal"
+msgstr "&Normalus"
+
+msgctxt "ID_VIEW_FULLSCREEN"
+msgid "F&ull Screen"
+msgstr "Pilno &ekrano veiksena"
+
+msgctxt "POPUP"
+msgid "&Zoom"
+msgstr "&Mastelis"
+
+msgctxt "ID_VIEW_ZOOM_50"
+msgid "&50%"
+msgstr "&50%"
+
+msgctxt "ID_VIEW_ZOOM_100"
+msgid "&100%"
+msgstr "&100%"
+
+msgctxt "ID_VIEW_ZOOM_200"
+msgid "&200%"
+msgstr "&200%"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT"
+msgid "Auto &Fit"
+msgstr "&Automatinis pritaikymas"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (&Larger Only)"
+msgstr "Automatinis pritaikymas (tik &didesniems)"
+
+msgctxt "POPUP"
+msgid "R&enderer Settings"
+msgstr "At&vaizdavimo nuostatos"
+
+msgctxt "ID_VIEW_TEARING_TEST"
+msgid "&Tearing Test"
+msgstr "&Trūkčiojimo testas"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Rodyti statistiką"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Rodyti esamą l&aiką"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Rodyti &failo vardą"
+
+msgctxt "POPUP"
+msgid "&Output Range"
+msgstr "Išvesties &diapazonas"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
+msgid "&0 - 255"
+msgstr "&0 - 255"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
+msgid "&16 - 235"
+msgstr "&16 - 235"
+
+msgctxt "POPUP"
+msgid "&Presentation"
+msgstr "&Pateikimas"
+
+msgctxt "ID_VIEW_D3DFULLSCREEN"
+msgid "D3D Fullscreen &Mode"
+msgstr "D3D &pilno ekrano veiksena"
+
+msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
+msgid "D3D Fullscreen &GUI Support"
+msgstr "D3D pilno ekrano &GUI palaikymas"
+
+msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
+msgid "10-bit &RGB Output"
+msgstr "10-bitų &RGB išvestis"
+
+msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
+msgid "Force 10-bit RGB &Input"
+msgstr "Priverstinė 10-bitų RGB į&vestis"
+
+msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
+msgid "&Full Floating Point Processing"
+msgstr "&Pilnas slankiojo kablelio vyksmas"
+
+msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
+msgid "&Half Floating Point Processing"
+msgstr "&Pusė slankiojo kablelio vyksmo"
+
+msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
+msgid "Disable desktop composition (&Aero)"
+msgstr "Išjungti darbalaukio komponavimą (&Aero)"
+
+msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time &Correction"
+msgstr "Įgalinti kadro &laiko korekciją"
+
+msgctxt "POPUP"
+msgid "&Color Management"
+msgstr "&Spalvų valdymas"
+
+msgctxt "ID_VIEW_CM_ENABLE"
+msgid "&Enable"
+msgstr "Į&galinti"
+
+msgctxt "POPUP"
+msgid "&Input Type"
+msgstr "Į&vesties tipas"
+
+msgctxt "ID_VIEW_CM_INPUT_AUTO"
+msgid "&Auto-Detect"
+msgstr "&Automatinis aptikimas"
+
+msgctxt "ID_VIEW_CM_INPUT_HDTV"
+msgid "&HDTV"
+msgstr "&HDTV"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
+msgid "SDTV &NTSC"
+msgstr "SDTV &NTSC"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
+msgid "SDTV &PAL"
+msgstr "SDTV &PAL"
+
+msgctxt "POPUP"
+msgid "Ambient &Light"
+msgstr "&Aplinkos apšvietimas"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
+msgid "&Bright (2.2 Gamma)"
+msgstr "Š&viesus (2.2 Gama)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
+msgid "&Dim (2.35 Gamma)"
+msgstr "&Pritemdytas (2.35 Gama)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
+msgid "D&ark (2.4 Gamma)"
+msgstr "&Tamsus (2.4 Gama)"
+
+msgctxt "POPUP"
+msgid "&Rendering Intent"
+msgstr "&Atvaizdavimo būdas"
+
+msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
+msgid "&Perceptual"
+msgstr "&Suvokiaminis"
+
+msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
+msgid "&Relative Colorimetric"
+msgstr "&Santykinis kolorimetrinis"
+
+msgctxt "ID_VIEW_CM_INTENT_SATURATION"
+msgid "&Saturation"
+msgstr "&Sodrumas"
+
+msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
+msgid "&Absolute Colorimetric"
+msgstr "&Absoliutus kolorimetrinis"
+
+msgctxt "POPUP"
+msgid "&VSync"
+msgstr "&Vertikali sinchronizacija"
+
+msgctxt "ID_VIEW_VSYNC"
+msgid "&VSync"
+msgstr "&Vertikali sinchronizacija"
+
+msgctxt "ID_VIEW_VSYNCACCURATE"
+msgid "&Accurate VSync"
+msgstr "&Tiksli vert. sinchr."
+
+msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
+msgid "A&lternative VSync"
+msgstr "&Alternatyvi vert. sinchr."
+
+msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
+msgid "&Decrease VSync Offset"
+msgstr "&Sumažinti vert. sinchr. atsvarą"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
+msgid "&Increase VSync Offset"
+msgstr "&Padidinti vert. sinchr. atsvarą"
+
+msgctxt "POPUP"
+msgid "&GPU Control"
+msgstr "&Grafinio procesoriaus kontrolė"
+
+msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
+msgid "Flush GPU &before VSync"
+msgstr "Išvalyti atmintį prieš vert. sinchr."
+
+msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
+msgid "Flush GPU &after Present"
+msgstr "Išvalyti atmintį po vert. sinchr."
+
+msgctxt "ID_VIEW_FLUSHGPU_WAIT"
+msgid "&Wait for flushes"
+msgstr "Laukti atminties valymų"
+
+msgctxt "POPUP"
+msgid "R&eset"
+msgstr "Atstatyti"
+
+msgctxt "ID_VIEW_RESET_DEFAULT"
+msgid "Reset to &default renderer settings"
+msgstr "Atstatyti numatytuosius atvaizdavimo nustatymus"
+
+msgctxt "ID_VIEW_RESET_OPTIMAL"
+msgid "Reset to &optimal renderer settings"
+msgstr "Nustatyti optimalius atvaizdavimo nustatymus"
+
+msgctxt "POPUP"
+msgid "Video &Frame"
+msgstr "Vaizdo &kadras"
+
+msgctxt "ID_VIEW_VF_HALF"
+msgid "&Half Size"
+msgstr "&Pusinis dydis"
+
+msgctxt "ID_VIEW_VF_NORMAL"
+msgid "&Normal Size"
+msgstr "&Normalus dydis"
+
+msgctxt "ID_VIEW_VF_DOUBLE"
+msgid "&Double Size"
+msgstr "&Dvigubas dydis"
+
+msgctxt "ID_VIEW_VF_STRETCH"
+msgid "&Stretch To Window"
+msgstr "&Ištemptas pagal langą"
+
+msgctxt "ID_VIEW_VF_FROMINSIDE"
+msgid "Touch Window From &Inside"
+msgstr "Į&terptas lango viduje"
+
+msgctxt "ID_VIEW_VF_ZOOM1"
+msgid "Zoom &1"
+msgstr "Mastelis &1"
+
+msgctxt "ID_VIEW_VF_ZOOM2"
+msgid "Zoom &2"
+msgstr "Mastelis &2"
+
+msgctxt "ID_VIEW_VF_FROMOUTSIDE"
+msgid "Touch Window From &Outside"
+msgstr "&Apkarpytas pagal langą"
+
+msgctxt "POPUP"
+msgid "&Aspect Ratio"
+msgstr ""
+
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr ""
+
+msgctxt "ID_ASPECTRATIO_4_3"
+msgid "&4:3"
+msgstr "&4:3"
+
+msgctxt "ID_ASPECTRATIO_5_4"
+msgid "&5:4"
+msgstr "&5:4"
+
+msgctxt "ID_ASPECTRATIO_16_9"
+msgid "&16:9"
+msgstr "&16:9"
+
+msgctxt "ID_ASPECTRATIO_235_100"
+msgid "&235:100"
+msgstr "&235:100"
+
+msgctxt "ID_ASPECTRATIO_185_100"
+msgid "1&85:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
+
+msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
+msgid "&Correct Monitor/Desktop AR Diff"
+msgstr "&Taisyti monitoriaus / darbalaukio kraštinių santykio skirtumą"
+
+msgctxt "POPUP"
+msgid "Pa&n&&Scan"
+msgstr "&Padėtis ir dydis"
+
+msgctxt "ID_VIEW_INCSIZE"
+msgid "&Increase Size"
+msgstr "Pa&didinti"
+
+msgctxt "ID_VIEW_DECSIZE"
+msgid "&Decrease Size"
+msgstr "Su&mažinti"
+
+msgctxt "ID_VIEW_INCWIDTH"
+msgid "I&ncrease Width"
+msgstr "Iš&tempti"
+
+msgctxt "ID_VIEW_DECWIDTH"
+msgid "D&ecrease Width"
+msgstr "Su&traukti"
+
+msgctxt "ID_VIEW_INCHEIGHT"
+msgid "In&crease Height"
+msgstr "Iš&plėsti"
+
+msgctxt "ID_VIEW_DECHEIGHT"
+msgid "Decre&ase Height"
+msgstr "Su&spausti"
+
+msgctxt "ID_PANSCAN_MOVERIGHT"
+msgid "Move &Right"
+msgstr "Pastumti dešinėn"
+
+msgctxt "ID_PANSCAN_MOVELEFT"
+msgid "Move &Left"
+msgstr "Pastumti kairėn"
+
+msgctxt "ID_PANSCAN_MOVEUP"
+msgid "Move &Up"
+msgstr "Pastumti aukštyn"
+
+msgctxt "ID_PANSCAN_MOVEDOWN"
+msgid "Move &Down"
+msgstr "Pastumti žemyn"
+
+msgctxt "ID_PANSCAN_CENTER"
+msgid "Cen&ter"
+msgstr "Centruoti"
+
+msgctxt "ID_VIEW_RESET"
+msgid "Re&set"
+msgstr "Atstatyti"
+
+msgctxt "POPUP"
+msgid "On &Top"
+msgstr "Viršuje"
+
+msgctxt "ID_ONTOP_DEFAULT"
+msgid "&Default"
+msgstr "&Numatyta"
+
+msgctxt "ID_ONTOP_ALWAYS"
+msgid "&Always"
+msgstr "Visada"
+
+msgctxt "ID_ONTOP_WHILEPLAYING"
+msgid "While &Playing"
+msgstr "&Grojant"
+
+msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
+msgid "While Playing &Video"
+msgstr "Grojant &vaizdo įrašus;"
+
+msgctxt "ID_VIEW_OPTIONS"
+msgid "&Options..."
+msgstr "&Nustatymai..."
+
+msgctxt "POPUP"
+msgid "&Play"
+msgstr "&Groti"
+
+msgctxt "ID_PLAY_PLAYPAUSE"
+msgid "&Play/Pause"
+msgstr "Groti/&Pauzė"
+
+msgctxt "ID_PLAY_STOP"
+msgid "&Stop"
+msgstr "&Stabdyti"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Fra&me Step"
+msgstr "&Kadro žingsnis"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr ""
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "&Decrease Rate"
+msgstr "Su&lėtinti"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "&Increase Rate"
+msgstr "Pa&greitinti"
+
+msgctxt "ID_PLAY_RESETRATE"
+msgid "R&eset Rate"
+msgstr "&Atstatyti greitį"
+
+msgctxt "ID_FILTERS"
+msgid "&Filters"
+msgstr "&Filtrai"
+
+msgctxt "ID_SHADERS"
+msgid "S&haders"
+msgstr "T&amsinimai"
+
+msgctxt "ID_AUDIOS"
+msgid "&Audio Track"
+msgstr "&Garso takelis"
+
+msgctxt "ID_SUBTITLES"
+msgid "Su&btitle Track"
+msgstr "Su&btitrai"
+
+msgctxt "ID_VIDEO_STREAMS"
+msgid "Vide&o Track"
+msgstr "&Vaizdo takelis"
+
+msgctxt "POPUP"
+msgid "&Volume"
+msgstr "Ga&rsumas"
+
+msgctxt "ID_VOLUME_UP"
+msgid "&Up"
+msgstr "Pa&garsinti"
+
+msgctxt "ID_VOLUME_DOWN"
+msgid "&Down"
+msgstr "Pa&tylinti"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "&Mute"
+msgstr "&Nutildyti"
+
+msgctxt "POPUP"
+msgid "Af&ter Playback"
+msgstr "P&o grojimo"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Nieko ne&daryti"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Groti &kitą aplanko failą"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Išjungti &monitorių"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
+msgid "&Exit"
+msgstr "&Uždaryti"
+
+msgctxt "ID_AFTERPLAYBACK_STANDBY"
+msgid "&Stand By"
+msgstr "&Pristabdyti"
+
+msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
+msgid "&Hibernate"
+msgstr "&Užmigdyti"
+
+msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
+msgid "Shut&down"
+msgstr "&Išjungti"
+
+msgctxt "ID_AFTERPLAYBACK_LOGOFF"
+msgid "Log &Off"
+msgstr "&Išsiregistruoti"
+
+msgctxt "ID_AFTERPLAYBACK_LOCK"
+msgid "&Lock"
+msgstr "Už&rakinti"
+
+msgctxt "POPUP"
+msgid "&Navigate"
+msgstr "&Valdyti"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "&Previous"
+msgstr "&Ankstesnis"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "&Next"
+msgstr "&Sekantis"
+
+msgctxt "ID_NAVIGATE_GOTO"
+msgid "&Go To..."
+msgstr "Š&okti į laiką..."
+
+msgctxt "ID_NAVIGATE_TITLEMENU"
+msgid "&Title Menu"
+msgstr "&Titulinis meniu"
+
+msgctxt "ID_NAVIGATE_ROOTMENU"
+msgid "&Root Menu"
+msgstr "&Pagrindinis meniu"
+
+msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
+msgid "&Subtitle Menu"
+msgstr "Su&btitrų meniu"
+
+msgctxt "ID_NAVIGATE_AUDIOMENU"
+msgid "&Audio Menu"
+msgstr "&Garso meniu"
+
+msgctxt "ID_NAVIGATE_ANGLEMENU"
+msgid "An&gle Menu"
+msgstr "&Kampinis meniu"
+
+msgctxt "ID_NAVIGATE_CHAPTERMENU"
+msgid "&Chapter Menu"
+msgstr "&Skyriaus meniu"
+
+msgctxt "ID_FAVORITES"
+msgid "F&avorites"
+msgstr "&Parankiniai"
+
+msgctxt "POPUP"
+msgid "&Help"
+msgstr "&Pagalba"
+
+msgctxt "ID_HELP_HOMEPAGE"
+msgid "&Home Page"
+msgstr "&Namų puslapis"
+
+msgctxt "ID_HELP_CHECKFORUPDATE"
+msgid "Check for &updates"
+msgstr "&Tikrinti ar yra atnaujinimų"
+
+msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
+msgid "&Command Line Switches"
+msgstr "&Komandinės eilutės parametrai"
+
+msgctxt "ID_HELP_TOOLBARIMAGES"
+msgid "Download &Toolbar Images"
+msgstr "Atsisiųsti &įrankių juostos paveikslėlius"
+
+msgctxt "ID_HELP_DONATE"
+msgid "&Donate"
+msgstr "&Paremti"
+
+msgctxt "ID_HELP_ABOUT"
+msgid "&About..."
+msgstr "&Apie..."
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.lt.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.lt.strings.po
new file mode 100644
index 000000000..df7df4ffb
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.lt.strings.po
@@ -0,0 +1,3975 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# linasmi <linasmi@mail.ru>, 2014-2016
+# Linas Tamašauskas, 2014
+# Linas Tamašauskas, 2014-2016
+# Martynas Kybartas <maky@super.lt>, 2014
+# Underground78, 2015
+# XhmikosR, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-09 22:32+0000\n"
+"Last-Translator: XhmikosR\n"
+"Language-Team: Lithuanian (http://www.transifex.com/mpc-hc/mpc-hc/language/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "IDS_INFOBAR_LOCATION"
+msgid "Location"
+msgstr "Vieta"
+
+msgctxt "IDS_INFOBAR_VIDEO"
+msgid "Video"
+msgstr "Vaizdas"
+
+msgctxt "IDS_INFOBAR_AUDIO"
+msgid "Audio"
+msgstr "Garsas"
+
+msgctxt "IDS_INFOBAR_SUBTITLES"
+msgid "Subtitles"
+msgstr "Subtitrai"
+
+msgctxt "IDS_INFOBAR_CHAPTER"
+msgid "Chapter"
+msgstr "Skyrius"
+
+msgctxt "IDS_CONTROLS_COMPLETING"
+msgid "Completing..."
+msgstr "Užbaigimas..."
+
+msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
+msgid "Play Video"
+msgstr "Groti vaizdo kūrinį"
+
+msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
+msgid "Play Music"
+msgstr "Groti garso kūrinį"
+
+msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
+msgid "Play Audio CD"
+msgstr "Groti audio CD"
+
+msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
+msgid "Play DVD Movie"
+msgstr "Groti DVD filmą"
+
+msgctxt "IDS_PROPSHEET_PROPERTIES"
+msgid "Properties"
+msgstr "Ypatybės"
+
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
+msgid "&Default Style"
+msgstr "&Numatytasis stilius"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr ""
+
+msgctxt "IDS_FAVFILES"
+msgid "Files"
+msgstr "Failai"
+
+msgctxt "IDS_FAVDVDS"
+msgid "DVDs"
+msgstr "DVD"
+
+msgctxt "IDS_INFOBAR_CHANNEL"
+msgid "Channel"
+msgstr "Kanalas"
+
+msgctxt "IDS_INFOBAR_TIME"
+msgid "Time"
+msgstr "Laikas"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET"
+msgid "Sync Offset"
+msgstr "Sinchronizacijos poslinkis"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
+msgid "avg: %d ms, dev: %d ms"
+msgstr "vid: %d ms, nuk: %d ms"
+
+msgctxt "IDS_STATSBAR_JITTER"
+msgid "Jitter"
+msgstr "Vibracija"
+
+msgctxt "IDS_STATSBAR_BITRATE"
+msgid "Bitrate"
+msgstr "Bitų sparta"
+
+msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
+msgid "(avg/cur)"
+msgstr "(vid/dab)"
+
+msgctxt "IDS_STATSBAR_SIGNAL"
+msgid "Signal"
+msgstr "Signalas"
+
+msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
+msgid "Strength: %d dB, Quality: %ld%%"
+msgstr "Stiprumas: %d dB, Kokybė: %ld%%"
+
+msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
+msgid "Styles"
+msgstr "Stiliai"
+
+msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
+msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
+msgstr "Jei atvaizdavimo tikslas liko neapibrėžtas, SPV/ASS subtitrai bus vaizduojami atitinkamai su vaizdo kadru, o visi kiti tekstiniai subtitrai bus vaizduojami atitinkamai su langu."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
+msgctxt "IDS_PPAGE_CAPTURE_FG0"
+msgid "Never (fastest approach)"
+msgstr "Niekada (greičiausiai)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG1"
+msgid "Only when switching different video types (default)"
+msgstr "Tik kai perjungiamos skirtingos vaizdo kūrinių rūšys (numatyta)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG2"
+msgid "Always (slowest option)"
+msgstr "Visada (lėčiausiai)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
+msgid "Not supported by some devices. Two video decoders always present in the filter graph."
+msgstr "Nepalaikomas kai kurių įrenginių. Du vaizdo dekoderiai visada pateikiami filtrų skyriuje."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
+msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
+msgstr "Greitas, išskyrus atvejus, kai persijungiama tarp skirtingų vaizdo srautų. Tik vienas vaizdo dekoderis pateikiamas filtrų skyriuje."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
+msgid "Not recommended. Only for testing purposes."
+msgstr "Nerekomenduojama. Tik testavimui."
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG0"
+msgid "Never if possible (fastest, but not supported by most filters)"
+msgstr "Nenaudoti, jei įmanoma (greičiausias, bet nepalaikomas daugelio filtrų)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG1"
+msgid "Only when switching different video types (default)"
+msgstr "Tik kai perjungiamos skirtingos vaizdo kūrinių rūšys (numatyta)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG2"
+msgid "Always (may be required by some devices)"
+msgstr "Visada (gali būti reikalaujama kai kurių įrenginių)"
+
+msgctxt "IDS_INFOBAR_PARENTAL_RATING"
+msgid "Parental rating"
+msgstr "Nepilnamečių apsauga"
+
+msgctxt "IDS_PARENTAL_RATING"
+msgid "%d+"
+msgstr "%d+"
+
+msgctxt "IDS_NO_PARENTAL_RATING"
+msgid "Not rated"
+msgstr "Neįvertinta"
+
+msgctxt "IDS_INFOBAR_CONTENT"
+msgid "Content"
+msgstr "Turinys"
+
+msgctxt "IDS_CONTENT_MOVIE_DRAMA"
+msgid "Movie/Drama"
+msgstr "Filmas/Drama"
+
+msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
+msgid "News/Current affairs"
+msgstr "Naujienos/Aktualijos"
+
+msgctxt "IDS_SPEED_UNIT_G"
+msgid "GB/s"
+msgstr "GB/s"
+
+msgctxt "IDS_FILE_FAV_ADDED"
+msgid "File added to favorites"
+msgstr "Failas pridėtas prie parankinių"
+
+msgctxt "IDS_DVD_FAV_ADDED"
+msgid "DVD added to favorites"
+msgstr "DVD pridėtas prie parankinių"
+
+msgctxt "IDS_CAPTURE_SETTINGS"
+msgid "Capture Settings"
+msgstr "Įrašymo nustatymai"
+
+msgctxt "IDS_NAVIGATION_BAR"
+msgid "Navigation Bar"
+msgstr "Valdymo juosta"
+
+msgctxt "IDS_SUBRESYNC_CAPTION"
+msgid "Subresync"
+msgstr "Subtitrų sinchronizacija"
+
+msgctxt "IDS_SUBRESYNC_CLN_TIME"
+msgid "Time"
+msgstr "Laikas"
+
+msgctxt "IDS_SUBRESYNC_CLN_END"
+msgid "End"
+msgstr "Pabaiga"
+
+msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
+msgid "Preview"
+msgstr "Peržiūra"
+
+msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
+msgid "Vob ID"
+msgstr "Vob ID"
+
+msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
+msgid "Cell ID"
+msgstr "Cell ID"
+
+msgctxt "IDS_SUBRESYNC_CLN_FORCED"
+msgid "Forced"
+msgstr "Priverstinai"
+
+msgctxt "IDS_SUBRESYNC_CLN_TEXT"
+msgid "Text"
+msgstr "Tekstas"
+
+msgctxt "IDS_SUBRESYNC_CLN_STYLE"
+msgid "Style"
+msgstr "Stilius"
+
+msgctxt "IDS_SUBRESYNC_CLN_FONT"
+msgid "Font"
+msgstr "Šriftas"
+
+msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
+msgid "Failed to render some of the pins of the DVD Navigator filter"
+msgstr "Nepavyko apdoroti kai kurių DVD Navigator filtrų pinų"
+
+msgctxt "IDS_DVD_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for DVD playback"
+msgstr "Nepavyko užklausti reikiamų sąsajų DVD grojimui"
+
+msgctxt "IDS_CAPTURE_LIVE"
+msgid "Live"
+msgstr "Tiesiogiai"
+
+msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
+msgid "Can't add video capture filter to the graph"
+msgstr "Neįmanoma pridėti įrašymo vaizdo filtro grafui"
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
+msgid "Can't add audio capture filter to the graph"
+msgstr "Neįmanoma pridėti įrašymo garso filtro grafui"
+
+msgctxt "IDS_CAPTURE_ERROR_DEVICE"
+msgid "Could not open capture device."
+msgstr "Neįmanoma atverti įrašymo įrenginio"
+
+msgctxt "IDS_INVALID_PARAMS_ERROR"
+msgid "Can't open, invalid input parameters"
+msgstr "Neįmanoma įjungti, neteisingi įvesties parametrai"
+
+msgctxt "IDS_EDIT_LIST_EDITOR"
+msgid "Edit List Editor"
+msgstr "Redaguoti sąrašų redaktorių"
+
+msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
+msgid "The entered time is greater than the file duration."
+msgstr "Įvestas laikas didesnis už kūrinio trukmę"
+
+msgctxt "IDS_MISSING_ICONS_LIB"
+msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
+msgstr "Nerasta „mpciconlib.dll“ piktogramų biblioteka.\nFailų susiejimams bus panaudota numatytoji grotuvo piktograma.\nPrašome įdiegti iš naujo MPC-HC, kad gautumėte „mpciconlib.dll“."
+
+msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
+msgid "File"
+msgstr "Failas"
+
+msgctxt "IDS_SUBDL_DLG_LANGUAGE_COL"
+msgid "Language"
+msgstr "Kalba"
+
+msgctxt "IDS_SUBDL_DLG_FORMAT_COL"
+msgid "Format"
+msgstr "Formatas"
+
+msgctxt "IDS_SUBDL_DLG_DISC_COL"
+msgid "Disc"
+msgstr "Diskas"
+
+msgctxt "IDS_SUBDL_DLG_TITLES_COL"
+msgid "Title(s)"
+msgstr "Pavadinimas (-ai)"
+
+msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
+msgid "CharSet"
+msgstr "Schemos"
+
+msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
+msgid "Unicode"
+msgstr "Unikodas"
+
+msgctxt "IDS_SUBRESYNC_CLN_LAYER"
+msgid "Layer"
+msgstr "Sluoksnis"
+
+msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
+msgid "Actor"
+msgstr "Aktorius"
+
+msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
+msgid "Effect"
+msgstr "Efektas"
+
+msgctxt "IDS_PLAYLIST_CAPTION"
+msgid "Playlist"
+msgstr "Grojaraštis"
+
+msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
+msgid "On/Off"
+msgstr "Įj./išj."
+
+msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
+msgid "From (FPS)"
+msgstr "Iš (KPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
+msgid "To (FPS)"
+msgstr "Į (KPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
+msgid "Display mode (Hz)"
+msgstr "Vaizdavimo režimas (Hz)"
+
+msgctxt "IDS_PPAGE_FS_DEFAULT"
+msgid "Default"
+msgstr "Numatyta"
+
+msgctxt "IDS_PPAGE_FS_OTHER"
+msgid "Other"
+msgstr "Kiti"
+
+msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
+msgid "System Default"
+msgstr "Sistemos numatyta"
+
+msgctxt "IDS_GRAPH_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for playback"
+msgstr "Nepavyko užklausti reikiamų sąsajų grojimui"
+
+msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
+msgid "Could not set target window for graph notification"
+msgstr "Nepavyko sukurti lango grafo rodymui"
+
+msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
+msgid "Failed to render all pins of the DVD Navigator filter"
+msgstr "Nepavyko apdoroti visų DVD Navigator filtro pinų"
+
+msgctxt "IDS_PLAYLIST_OPEN"
+msgid "&Open"
+msgstr "&Atverti"
+
+msgctxt "IDS_PLAYLIST_ADD"
+msgid "A&dd"
+msgstr "&Pridėti"
+
+msgctxt "IDS_PLAYLIST_REMOVE"
+msgid "&Remove"
+msgstr "Paša&linti"
+
+msgctxt "IDS_PLAYLIST_CLEAR"
+msgid "C&lear"
+msgstr "&Išvalyti"
+
+msgctxt "IDS_PLAYLIST_COPYTOCLIPBOARD"
+msgid "&Copy to clipboard"
+msgstr "K&opijuoti į iškarpinę"
+
+msgctxt "IDS_PLAYLIST_SAVEAS"
+msgid "&Save As..."
+msgstr "Išsa&ugoti kaip..."
+
+msgctxt "IDS_PLAYLIST_SORTBYLABEL"
+msgid "Sort by &label"
+msgstr "Rikiuoti pagal &pavadinimą"
+
+msgctxt "IDS_PLAYLIST_SORTBYPATH"
+msgid "Sort by &path"
+msgstr "Rikiuoti pagal &kelią"
+
+msgctxt "IDS_PLAYLIST_RANDOMIZE"
+msgid "R&andomize"
+msgstr "&Maišyti"
+
+msgctxt "IDS_PLAYLIST_RESTORE"
+msgid "R&estore"
+msgstr "A&tkurti"
+
+msgctxt "IDS_SUBRESYNC_SEPARATOR"
+msgid "&Separator"
+msgstr "&Skirtukas"
+
+msgctxt "IDS_SUBRESYNC_DELETE"
+msgid "&Delete"
+msgstr "Šali&nti"
+
+msgctxt "IDS_SUBRESYNC_DUPLICATE"
+msgid "D&uplicate"
+msgstr "D&ubliuoti"
+
+msgctxt "IDS_SUBRESYNC_RESET"
+msgid "&Reset"
+msgstr "Pra&diniai nustatymai"
+
+msgctxt "IDS_MPLAYERC_104"
+msgid "Subtitle Delay -"
+msgstr "Subtitrų delsa -"
+
+msgctxt "IDS_MPLAYERC_105"
+msgid "Subtitle Delay +"
+msgstr "Subtitrų delsa +"
+
+msgctxt "IDS_FILE_SAVE_THUMBNAILS"
+msgid "Save thumbnails"
+msgstr "Išsaugoti miniatiūras"
+
+msgctxt "IDD_PPAGEPLAYBACK"
+msgid "Playback"
+msgstr "Įrašo peržiūra"
+
+msgctxt "IDD_PPAGEPLAYER"
+msgid "Player"
+msgstr "Grotuvas"
+
+msgctxt "IDD_PPAGEDVD"
+msgid "Playback::DVD/OGM"
+msgstr "Įrašo peržiūra::DVD/OGM"
+
+msgctxt "IDD_PPAGESUBTITLES"
+msgid "Subtitles"
+msgstr "Subtitrai"
+
+msgctxt "IDD_PPAGEFORMATS"
+msgid "Player::Formats"
+msgstr "Grotuvas::Formatai"
+
+msgctxt "IDD_PPAGETWEAKS"
+msgid "Tweaks"
+msgstr "Papildomai"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER"
+msgid "Internal Filters::Audio Switcher"
+msgstr "Vidiniai filtrai::Garso perjungiklis"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS"
+msgid "External Filters"
+msgstr "Išoriniai fitrai"
+
+msgctxt "IDD_PPAGESHADERS"
+msgid "Playback::Shaders"
+msgstr "Įrašo peržiūra::Tamsinimai"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Resursai"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Įvairūs"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "Kūrinio informacija"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Įrašo peržiūra::Įrašymas"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Įrašo peržiūra::Sync atvaizdavimo nustatymai"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Įrašo peržiūra::Pilnas ekranas"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Vidiniai filtrai::Garso pateikimas"
+
+msgctxt "IDS_AUDIOSWITCHER"
+msgid "Audio Switcher"
+msgstr "Garso jungiklis"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
+msgid "New version of the icon library"
+msgstr "Nauja paveikslėlių bibliotekos versija"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
+msgid "Do you want to reassociate the icons?"
+msgstr "Ar norite iš naujo susieti piktogramas?"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
+msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
+msgstr "Tai ištaisys neteisingai po bibliotekos atnaujinimo vaizduojamas piktogramas.\nFailų susiejimai nebus pakeisti, tik atnaujintos atitinkamos piktogramos."
+
+msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
+msgid "Old Video Renderer"
+msgstr "Pasenusi vaizdo vaizdavimo priemonė"
+
+msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
+msgid "Overlay Mixer Renderer"
+msgstr "Overlay Mixer Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
+msgid "Video Mixing Renderer 9 (windowed)"
+msgstr "Video Mixing Renderer 9 (lange)"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
+msgid "Video Mixing Renderer 9 (renderless)"
+msgstr "Video Mixing Renderer 9 (lange)"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR"
+msgid "Enhanced Video Renderer"
+msgstr "Išplėstinis vaizdo renderis"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
+msgid "Enhanced Video Renderer (custom presenter)"
+msgstr "šplėstinis vaizdo renderis (savas presenter)"
+
+msgctxt "IDS_PPAGE_OUTPUT_DXR"
+msgid "Haali Video Renderer"
+msgstr "Haali Video Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Null (viskas)"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Null (be glaudinimo)"
+
+msgctxt "IDS_PPAGE_OUTPUT_MADVR"
+msgid "madVR"
+msgstr "madVR"
+
+msgctxt "IDD_PPAGEACCELTBL"
+msgid "Player::Keys"
+msgstr "Grotuvas::Greitieji klavišai"
+
+msgctxt "IDD_PPAGESUBSTYLE"
+msgid "Subtitles::Default Style"
+msgstr "Subtitrai::Numatytas stilius"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS"
+msgid "Internal Filters"
+msgstr "Vidiniai filtrai"
+
+msgctxt "IDD_PPAGELOGO"
+msgid "Player::Logo"
+msgstr "Grotuvas::Logotipas"
+
+msgctxt "IDD_PPAGEOUTPUT"
+msgid "Playback::Output"
+msgstr "Įrašo peržiūra::Išvestis"
+
+msgctxt "IDD_PPAGEWEBSERVER"
+msgid "Player::Web Interface"
+msgstr "Grotuvas::Web Sąsaja"
+
+msgctxt "IDD_FILEPROPDETAILS"
+msgid "Details"
+msgstr "Detalės"
+
+msgctxt "IDD_FILEPROPCLIP"
+msgid "Clip"
+msgstr "Klipas"
+
+msgctxt "IDC_DSSYSDEF"
+msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
+msgstr "Numatytas vaizdo rodymas DirectShow pagal nutylėjimą. Šis režimas įsijungia tais atvejais, kai kiti negali būti įkelti. Windows XP analogiškas VMR-7 (windowed)."
+
+msgctxt "IDC_DSOLD"
+msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
+msgstr "Numatytas vaizdo rodymas Windows 9x/me/2k. Priklausomai nuo vaizdo lango matomumo ir vaizdo plokštės galimybių, režimas dinamiškai persijungia tarp GDI, DirectDraw ir Overlay metodų."
+
+msgctxt "IDC_DSOVERLAYMIXER"
+msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
+msgstr "Renderingas visuomet vyksta overlay režime. Įprastai pasiekiami tik YUV formatai, bet jie pateikiami tiesiogiai, be vertimo į RGB. Tai greičiausias metodas ir tik čia šimtu procentų veikia „veidrodinė“ vaizdo išvestis (į TV-OUT)."
+
+msgctxt "IDC_DSVMR9WIN"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Galima tik jei turite įdiegtą „DirectX 9“. Labai stabilu, tačiau jis niekada nenaudoja Overlėjaus renderinimo ir dėl to jis gali būti šiek tiek lėtesnis nei Overlėjaus mikseris."
+
+msgctxt "IDC_DSVMR9REN"
+msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
+msgstr "Tas pats, kaip ir VMR-9 (windowed), bet su pluginu MPC-HC Allocator-Presenter titrams vaizduoti. \"Veidrodinis\" vaizdas overlėjuje GALI veikti. Rekomenduojamas spalvų gylis. Rekomenduojama Windows XP."
+
+msgctxt "IDC_DSDXR"
+msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
+msgstr "Tas pats, kaip ir VMR-9 (renderless), bet naudoja praėjimų tikrą dviejų eigų Bicubic resizer."
+
+msgctxt "IDC_DSNULL_COMP"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Prisijungia prie bet kurio vaizdo duomenų tipo ir išsiunčia įeinančius kadrus į niekur. Režimas gali praversti tausoti procesoriaus resursus tuo atveju, kai reikalingas tik garsas."
+
+msgctxt "IDC_DSNULL_UNCOMP"
+msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
+msgstr "Tas pats, kaip ir normalus Null-renderis, bet prisijungia tik prie nespaustų duomenų tipų."
+
+msgctxt "IDC_DSEVR"
+msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
+msgstr "Pasiekiama tik su Vista ar naujesne, galima ir su XP su įdiegtu .NET Framework 3.5."
+
+msgctxt "IDC_DSEVR_CUSTOM"
+msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
+msgstr "Tas pats, kaip ir EVR, bet naudoja Allocator-Presenter subtitrams ir apdorojimui. Rekomenduojama Windows Vista ar naujesnėms."
+
+msgctxt "IDC_DSMADVR"
+msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
+msgstr "Aukštos kokybės renderis, reikalaujantis D3D9 palaikančios vaizdo plokštės ar naujesnės."
+
+msgctxt "IDC_DSSYNC"
+msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
+msgstr "Tas pats, kaip ir EVR (CP), bet turi papildomų priemonių sinchronizuoti kadrų dažnį su ekrano naujinimo dažniu."
+
+msgctxt "IDC_RMSYSDEF"
+msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
+msgstr "Savas Real renderis. SMIL skriptai veiks, tačiau be interaktyvumo. Naudoja DirectDraw ir, pagal galimybę, pasileidžia overlėjuje."
+
+msgctxt "IDC_RMDX9"
+msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Real išvestis apdorojama su DX97 Allocator-Presenter VMR-9 (renderless)."
+
+msgctxt "IDC_QTSYSDEF"
+msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
+msgstr "Savas QuickTime renderis. Sulėtėja keičiant vaizdo kadro dydį arba jei langą dalinai uždengia kitas. Jei overlėjus nepasiekiamas, grįžta prie GDI metodo."
+
+msgctxt "IDC_QTDX9"
+msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "QuickTime išvestis apdorojama su DX9 Allocator-Presenter VMR-9 (renderless)."
+
+msgctxt "IDC_REGULARSURF"
+msgid "Video surface will be allocated as a regular offscreen surface."
+msgstr "Paviršius vaizdui išskiriamas kaip įprastas paviršius ne ekrane."
+
+msgctxt "IDS_PPAGE_OUTPUT_SYNC"
+msgid "Sync Renderer"
+msgstr "Sync Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
+msgid "Regular offscreen plain surface"
+msgstr "Įprastas paviršius ne ekrane"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
+msgid "2D surfaces"
+msgstr "2D paviršiai"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
+msgid "3D surfaces (recommended)"
+msgstr "3D paviršiai (rekomenduojama)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
+msgid "Nearest neighbor"
+msgstr "Artimiausias kaimynas"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
+msgid "Bilinear"
+msgstr "Bilinear"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
+msgid "Bilinear (PS 2.0)"
+msgstr "Bilinear (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
+msgid "Bicubic A=-0.60 (PS 2.0)"
+msgstr "Bicubic A=-0.60 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
+msgid "Bicubic A=-0.75 (PS 2.0)"
+msgstr "Bicubic A=-0.75 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
+msgid "Bicubic A=-1.00 (PS 2.0)"
+msgstr "Bicubic A=-1.00 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
+msgid "**unavailable**"
+msgstr "**neprieinama**"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
+msgid "The selected renderer is not installed."
+msgstr "Pasirinktas renderis nėra įdiegtas."
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Null (viskas)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Null (be glaudinimo)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Vidinis garso renderis"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
+msgid "Name"
+msgstr "Vardas"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
+msgid "MIME Type"
+msgstr "MIME tipas"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
+msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
+msgstr "Norint peržiūrėti įmontuotą resursą jūsų naršyklėje, būtina įjungti Web sąsają.\n\n Jei jūs norite tik išsaugoti informaciją, spragtelėkite mygtuką \"Išsaugoti kaip\"."
+
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr ""
+
+msgctxt "IDS_SUBFILE_DELAY"
+msgid "Delay (ms):"
+msgstr "Delsa (ms):"
+
+msgctxt "IDS_SPEEDSTEP_AUTO"
+msgid "Auto"
+msgstr "Automatiškai"
+
+msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
+msgid "There are no customized keys to export."
+msgstr "Nėra nustatyta jokių klavišų eksportui."
+
+msgctxt "IDS_RFS_NO_FILES"
+msgid "No media files found in the archive"
+msgstr "Archyve nerasta media failų."
+
+msgctxt "IDS_RFS_COMPRESSED"
+msgid "Compressed files are not supported"
+msgstr "Suglaudinti failai nepalaikomi."
+
+msgctxt "IDS_RFS_ENCRYPTED"
+msgid "Encrypted files are not supported"
+msgstr "Užšifruoti failai nepalaikomi"
+
+msgctxt "IDS_RFS_MISSING_VOLS"
+msgid "Couldn't find all archive volumes"
+msgstr "Negaliu rasti visų archyvo tomų"
+
+msgctxt "IDC_TEXTURESURF2D"
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Paviršius vaizdui išskiriamas kaip tekstūra, bet kopijavimui ir vaizdo ištempimui į buferį naudojamos 2D funkcijos Reikalinga vaizdo plokštė, kuri gali skirti 32bit RGBA tekstūras su rėmeliais ne 2-kartinių, bent vaizdo geboje."
+
+msgctxt "IDC_TEXTURESURF3D"
+msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
+msgstr "Paviršius vaizdui išskiriamas kaip tekstūra ir piešiamas kaip du trikampiai 3D. Glodinimo (Antialiasing) įjungimas vaizdo plokštės nustatymuose gali žymiai sulėtinti renderinimo greitį."
+
+msgctxt "IDC_DX9RESIZER_COMBO"
+msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
+msgstr "Jei nėra palaikoma pikselinių tamsinimų 2,0 versija, automatiškai bus naudojamas paprastas bilinijinis metodas."
+
+msgctxt "IDC_DSVMR9LOADMIXER"
+msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
+msgstr "Perkelia VMR-9 (renderless) režimą į mikšerio režimą, tai reiškia, jog daugumas valdymo elementų savybių puslapyje veiks ir naudos atskirą darbinį srautą kadrų apdorojimui."
+
+msgctxt "IDC_DSVMR9YUVMIXER"
+msgid "Improves performance at the cost of some compatibility of the renderer."
+msgstr "Padidina našumą, bet gali būti problemų su suderinamumu."
+
+msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "Reduces tearing but prevents the toolbar from being shown."
+msgstr "Sumažina plyšius, bet nerodo valdymo skydo."
+
+msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Reduces tearing by bypassing the default VSync built into D3D."
+msgstr "Sumažina plyšius, veikia apeinant VSync įterpta D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Imtuvo skenavimas"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Subtitrai neįkelti arba nepalaikomas renderis."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
+msgctxt "IDS_SRC_VTS"
+msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
+msgstr "Atverti VTS_xx_0.ifo, jog būtų įkeliami VTS_xx_x.vob failai kaip viena dalis"
+
+msgctxt "IDS_SRC_RFS"
+msgid "Based on RARFileSource, doesn't support compressed files"
+msgstr "Grįstas RARFileSource, nepalaiko suglaudintų failų"
+
+msgctxt "IDS_INTERNAL_LAVF"
+msgid "Uses LAV Filters"
+msgstr "Naudoja LAV filtrus"
+
+msgctxt "IDS_INTERNAL_LAVF_WMV"
+msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
+msgstr "Naudoja LAV filtrus. Išjungta, nes paprastai šių formatų „Microsoft“ filtrai yra stabilesni.\nJei pasirinksite naudoti vidinius filtrus, įgalinkite juos šaltiniui ir dekodavimui, kad pasiektumėte geresnę failų atkūrimo kokybę."
+
+msgctxt "IDS_AG_TOGGLE_NAVIGATION"
+msgid "Toggle Navigation Bar"
+msgstr "Įj./Išj. navigacijos juostą"
+
+msgctxt "IDS_AG_VSYNCACCURATE"
+msgid "Accurate VSync"
+msgstr "Tikslus VSync"
+
+msgctxt "IDC_CHECK_RELATIVETO"
+msgid "If the rendering target is left undefined, it will be inherited from the default style."
+msgstr "Jei vaizdavimo tikslas nenustatytas, tai jis bus paimtas iš numatytojo stiliaus."
+
+msgctxt "IDC_CHECK_NO_SUB_ANIM"
+msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
+msgstr "Išjungti subtitrų animaciją. Įjungus šį pasirinkimą sulėtinamas CPU darbas."
+
+msgctxt "IDC_SUBPIC_TO_BUFFER"
+msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
+msgstr "Buferinių fragmentų kiekio vaizdavimas įprastai padidina renderinimo greitį dėl GPU vaizdo atminties didesnio naudojimo."
+
+msgctxt "IDC_BUTTON_EXT_SET"
+msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
+msgstr "Spragtelėjus šį mygtuką, pasirinkta formatų grupės būsena vaizduos realius failų susiejumus su MPC-HC. Pridėti išplėtimai įprastai nustato būseną į „pilką“ būseną, todėl nepamirškite pažymėti juos vėl prieš uždarant dialogą!"
+
+msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
+msgstr "Išjungus šią funkciją bus išvengta subtitrų mirgėjimą, tačiau dėl to gali būti praleidžiami kai kurie vaizdo kadrai vaizduojant."
+
+msgctxt "ID_PLAY_PLAY"
+msgid "Play\nPlay"
+msgstr "Groti\nGroti"
+
+msgctxt "ID_PLAY_PAUSE"
+msgid "Pause\nPause"
+msgstr "Pauzė\nPauzė"
+
+msgctxt "ID_PLAY_STOP"
+msgid "Stop\nStop"
+msgstr "Stop\nStop"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Step\nStep"
+msgstr "Žingsnis\nŽingsnis"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "Decrease speed\nDecrease speed"
+msgstr "Sulėtinti\nSulėtinti"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "Increase speed\nIncrease speed"
+msgstr "Pagreitinti\nPagreitinti"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "Mute"
+msgstr "Nutildyti"
+
+msgctxt "ID_VOLUME_MUTE_OFF"
+msgid "Unmute"
+msgstr "Įjungti garsą"
+
+msgctxt "ID_VOLUME_MUTE_DISABLED"
+msgid "No audio"
+msgstr "Be garso"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "Skip back\nSkip back"
+msgstr "Peršokti atgal"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "Skip forward\nSkip forward"
+msgstr "Peršokti pirmyn"
+
+msgctxt "IDS_SUBRESYNC_ORIGINAL"
+msgid "&Original"
+msgstr "&Originalas"
+
+msgctxt "IDS_SUBRESYNC_CURRENT"
+msgid "&Current"
+msgstr "&Dabartinis"
+
+msgctxt "IDS_SUBRESYNC_EDIT"
+msgid "&Edit"
+msgstr "&Taisa"
+
+msgctxt "IDS_SUBRESYNC_YES"
+msgid "&Yes"
+msgstr "&Taip"
+
+msgctxt "IDS_SUBRESYNC_NO"
+msgid "&No"
+msgstr "&Ne"
+
+msgctxt "IDS_SUBRESYNC_DECREASE"
+msgid "&Decrease"
+msgstr "&Sumažinti"
+
+msgctxt "IDS_SUBRESYNC_INCREASE"
+msgid "&Increase"
+msgstr "&Padidinti"
+
+msgctxt "IDS_OPTIONS_CAPTION"
+msgid "Options"
+msgstr "Nustatymai"
+
+msgctxt "IDS_SHADERS_SELECT"
+msgid "&Select Shaders..."
+msgstr "Pa&sirinkite tamsinimus"
+
+msgctxt "IDS_SHADERS_DEBUG"
+msgid "&Debug Shaders..."
+msgstr "&Derinti tamsinimus"
+
+msgctxt "IDS_FAVORITES_ADD"
+msgid "&Add to Favorites..."
+msgstr "Pridėti į p&arankinius..."
+
+msgctxt "IDS_FAVORITES_ORGANIZE"
+msgid "&Organize Favorites..."
+msgstr "Tva&rkyti parankinius"
+
+msgctxt "IDS_PLAYLIST_SHUFFLE"
+msgid "Sh&uffle"
+msgstr "Maišyti"
+
+msgctxt "IDS_PLAYLIST_SHOWFOLDER"
+msgid "Ope&n file location"
+msgstr "Atidaryti failo vietą"
+
+msgctxt "IDS_CONTROLS_CLOSING"
+msgid "Closing..."
+msgstr "Uždaroma..."
+
+msgctxt "IDS_CONTROLS_PLAYING"
+msgid "Playing"
+msgstr "Grojama"
+
+msgctxt "IDS_CONTROLS_PAUSED"
+msgid "Paused"
+msgstr "Pauzė"
+
+msgctxt "IDS_AG_EDL_NEW_CLIP"
+msgid "EDL new clip"
+msgstr "Naujas EDL klipas"
+
+msgctxt "IDS_RECENT_FILES_CLEAR"
+msgid "&Clear list"
+msgstr "%Išvalyti sąrašą"
+
+msgctxt "IDS_RECENT_FILES_QUESTION"
+msgid "Are you sure that you want to delete recent files list?"
+msgstr "Ar jūs tikrai norite išvalyti nesenai atidarytų failų sąrašą?"
+
+msgctxt "IDS_AG_EDL_SAVE"
+msgid "EDL save"
+msgstr "EDL saugoti"
+
+msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time Correction"
+msgstr "Įjungti kadro laiko koregavimą"
+
+msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
+msgid "Toggle EDL window"
+msgstr "Įj./Išj. EDL langą"
+
+msgctxt "IDS_AG_EDL_IN"
+msgid "EDL set In"
+msgstr "Nustatyti EDL į vidų"
+
+msgctxt "IDS_AG_EDL_OUT"
+msgid "EDL set Out"
+msgstr "Nustatyti EDL į išorę"
+
+msgctxt "IDS_AG_PNS_ROTATEX_M"
+msgid "PnS Rotate X-"
+msgstr "Pasukti kadrą X-"
+
+msgctxt "IDS_AG_PNS_ROTATEY_P"
+msgid "PnS Rotate Y+"
+msgstr "Pasukti kadrą Y+"
+
+msgctxt "IDS_AG_PNS_ROTATEY_M"
+msgid "PnS Rotate Y-"
+msgstr "Pasukti kadrą Y-"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_P"
+msgid "PnS Rotate Z+"
+msgstr "Pasukti kadrą Z+"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_M"
+msgid "PnS Rotate Z-"
+msgstr "Pasukti kadrą Z-"
+
+msgctxt "IDS_AG_TEARING_TEST"
+msgid "Tearing Test"
+msgstr "Drebėjimo testas"
+
+msgctxt "IDS_SCALE_16_9"
+msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Nustatyti proporcijas 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_WIDESCREEN"
+msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Didinti Widescreen,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_ULTRAWIDE"
+msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Didinti Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_PLAYLIST_HIDEFS"
+msgid "&Hide on Fullscreen"
+msgstr "Slėpti pilno ekrano režime"
+
+msgctxt "IDS_CONTROLS_STOPPED"
+msgid "Stopped"
+msgstr "Sustabdyta"
+
+msgctxt "IDS_CONTROLS_BUFFERING"
+msgid "Buffering... (%d%%)"
+msgstr "Kaupiama... (%d%%)"
+
+msgctxt "IDS_CONTROLS_CAPTURING"
+msgid "Capturing..."
+msgstr "Įrašoma..."
+
+msgctxt "IDS_CONTROLS_OPENING"
+msgid "Opening..."
+msgstr "Atveriama..."
+
+msgctxt "IDS_CONTROLS_CLOSED"
+msgid "Closed"
+msgstr "Užverta"
+
+msgctxt "IDS_SUBTITLES_OPTIONS"
+msgid "&Options..."
+msgstr "&Nustatymai..."
+
+msgctxt "IDS_SUBTITLES_STYLES"
+msgid "&Styles..."
+msgstr "&Stiliai..."
+
+msgctxt "IDS_SUBTITLES_RELOAD"
+msgid "&Reload"
+msgstr "&Įkelti iš naujo"
+
+msgctxt "IDS_SUBTITLES_ENABLE"
+msgid "&Enable"
+msgstr "Į&galinti"
+
+msgctxt "IDS_PANSCAN_EDIT"
+msgid "&Edit..."
+msgstr "R&edaguoti..."
+
+msgctxt "IDS_INFOBAR_TITLE"
+msgid "Title"
+msgstr "Pavadinimas"
+
+msgctxt "IDS_INFOBAR_AUTHOR"
+msgid "Author"
+msgstr "Autorius"
+
+msgctxt "IDS_INFOBAR_COPYRIGHT"
+msgid "Copyright"
+msgstr "Autorinės teisės"
+
+msgctxt "IDS_INFOBAR_RATING"
+msgid "Rating"
+msgstr "Įvertinimas"
+
+msgctxt "IDS_INFOBAR_DESCRIPTION"
+msgid "Description"
+msgstr "Aprašymas"
+
+msgctxt "IDS_INFOBAR_DOMAIN"
+msgid "Domain"
+msgstr "Domenas"
+
+msgctxt "IDS_AG_CLOSE"
+msgid "Close"
+msgstr "Užverti"
+
+msgctxt "IDS_AG_NONE"
+msgid "None"
+msgstr "Joks"
+
+msgctxt "IDS_AG_COMMAND"
+msgid "Command"
+msgstr "Komanda"
+
+msgctxt "IDS_AG_KEY"
+msgid "Key"
+msgstr "Spartusis klavišas"
+
+msgctxt "IDS_AG_MOUSE"
+msgid "Mouse Windowed"
+msgstr "Pelė lango režime"
+
+msgctxt "IDS_AG_MOUSE_FS"
+msgid "Mouse Fullscreen"
+msgstr "Pelė pilno ekrano režime"
+
+msgctxt "IDS_AG_APP_COMMAND"
+msgid "App Command"
+msgstr "Programos komanda"
+
+msgctxt "IDS_AG_MEDIAFILES"
+msgid "Media files (all types)"
+msgstr "Vaizdo failai (visi tipai)"
+
+msgctxt "IDS_AG_ALLFILES"
+msgid "All files (*.*)|*.*|"
+msgstr "Visi failai (*.*)|*.*|"
+
+msgctxt "IDS_AG_AUDIOFILES"
+msgid "Audio files (all types)"
+msgstr "Garso failai (visi tipai)"
+
+msgctxt "IDS_AG_NOT_KNOWN"
+msgid "Not known"
+msgstr "Nežinomas"
+
+msgctxt "IDS_MPLAYERC_0"
+msgid "Quick Open File"
+msgstr "Atverti failą greitai"
+
+msgctxt "IDS_AG_OPEN_FILE"
+msgid "Open File"
+msgstr "Atverti failą"
+
+msgctxt "IDS_AG_OPEN_DVD"
+msgid "Open DVD/BD"
+msgstr "Atverti DVD/BD"
+
+msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
+msgid "Failed to set post-resize shaders"
+msgstr "Nepavyko nustatyti post-resize tamsinimų"
+
+msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
+msgid "Failed to set both pre-resize and post-resize shaders"
+msgstr "Nepavyko nustatyti pre-resize ir post-resize tamsinimų"
+
+msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
+msgid "Shaders are recompiled automatically when the corresponding files are modified."
+msgstr "Tamsinimai bus sukompiliuoti automatiškai pakeitus atitinkamus failus."
+
+msgctxt "IDS_SHADER_DLL_ERR_0"
+msgid "Cannot load %s, pixel shaders will not work."
+msgstr "Neįmanoma įkelti %s, pikseliniai tamsinimai neveiks."
+
+msgctxt "IDS_SHADER_DLL_ERR_1"
+msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
+msgstr "Nerasti %s būtinos funkcijos įėjimo taško, pikseliniai tamsinimai neveiks."
+
+msgctxt "IDS_OSD_SHADERS_PRESET"
+msgid "Shader preset: %s"
+msgstr "Tamsinimo priešnustatymas: %s"
+
+msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
+msgid "Next Shader Preset"
+msgstr "Kitas tamsinimo priešnustatymas"
+
+msgctxt "IDS_AG_SHADERS_PRESET_PREV"
+msgid "Prev Shader Preset"
+msgstr "Ankstesnis tamsinimo priešnustatymas"
+
+msgctxt "IDS_STRING_COLON"
+msgid "%s:"
+msgstr "%s:"
+
+msgctxt "IDS_RECORD_START"
+msgid "Record"
+msgstr "Įrašas"
+
+msgctxt "IDS_RECORD_STOP"
+msgid "Stop"
+msgstr "Stop"
+
+msgctxt "IDS_BALANCE"
+msgid "L = R"
+msgstr "K = D"
+
+msgctxt "IDS_BALANCE_L"
+msgid "L +%d%%"
+msgstr "K +%d%%"
+
+msgctxt "IDS_BALANCE_R"
+msgid "R +%d%%"
+msgstr "D +%d%%"
+
+msgctxt "IDS_VOLUME"
+msgid "%d%%"
+msgstr "%d%%"
+
+msgctxt "IDS_BOOST"
+msgid "+%d%%"
+msgstr "+%d%%"
+
+msgctxt "IDS_PLAYLIST_ADDFOLDER"
+msgid "Add containing &folder"
+msgstr "Pridėti aplanką su turiniu"
+
+msgctxt "IDS_HW_INDICATOR"
+msgid "[H/W]"
+msgstr "[H/W]"
+
+msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
+msgid "Software Decoding"
+msgstr "Programinis iškodavimas"
+
+msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
+msgid "Playback rate"
+msgstr "Grojimo greitis"
+
+msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
+msgid "&Copy filters list to clipboard"
+msgstr "&Kopijuoti filtrų sąrašą į buferį"
+
+msgctxt "IDS_CREDENTIALS_SERVER"
+msgid "Enter server credentials"
+msgstr "Įveskite serverio kredencialus."
+
+msgctxt "IDS_CREDENTIALS_CONNECT"
+msgid "Enter your credentials to connect"
+msgstr "Įveskite savo kredencialus prisijungimui"
+
+msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
+msgid "Save custom style"
+msgstr "Išsaugoti vartotojo stilių"
+
+msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
+msgid "Education/Science/Factual topics"
+msgstr "Švietimas/Mokslas/Faktai"
+
+msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
+msgid "Hides controls and panels also in windowed mode."
+msgstr "Slėpti valdymo ir juostos elementus taip pat ir lango veiksenoje."
+
+msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
+msgid "Prevent external subtitle renderer to be loaded when internal is in use."
+msgstr "Išvengti išorinio subtitrų renderio naudojimo, kai naudojamas vidinis."
+
+msgctxt "IDS_PPAGEADVANCED_COL_NAME"
+msgid "Name"
+msgstr "Pavadinimas"
+
+msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
+msgid "Value"
+msgstr "Reikšmė"
+
+msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
+msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
+msgstr "Maksimalus rodomų meniu „Peržiūrėta“ failų kiekis ir kokioje pozicijoje išsaugota."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
+msgid "Remember file position only for files longer than N minutes."
+msgstr "Atsiminti failų padėtį tik kūriniams ilgesniems nei N minutės."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
+msgid "Remember file position also for audio files."
+msgstr "Įsiminti failų padėtį ir garso failams."
+
+msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
+msgid "Do Nothing"
+msgstr "Nieko nedaryti"
+
+msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
+msgid "Play next file in the folder"
+msgstr "Groti kitą aplanko failą"
+
+msgctxt "IDS_AFTER_PLAYBACK_REWIND"
+msgid "Rewind current file"
+msgstr "Persukti einamąjį failą"
+
+msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
+msgid "Close"
+msgstr "Užverti"
+
+msgctxt "IDS_AFTER_PLAYBACK_EXIT"
+msgid "Exit"
+msgstr "Išeiti"
+
+msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
+msgid "Turn off the monitor"
+msgstr "Išjungti monitorių"
+
+msgctxt "IDS_IMAGE_JPEG_QUALITY"
+msgid "JPEG Image"
+msgstr "JPEG paveikslėlis"
+
+msgctxt "IDS_IMAGE_QUALITY"
+msgid "Quality (%):"
+msgstr "Kokybė (%):"
+
+msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
+msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
+msgstr "Maksimalų viršelio dydį (NxNpx) įkelti tik garso režime."
+
+msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
+msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
+msgstr "Subtitrų delsa mažės/didės su šia reikšme kas kart spragtelint karštuosius klavišus (%s/%s)."
+
+msgctxt "IDS_HOTKEY_NOT_DEFINED"
+msgid "<not defined>"
+msgstr "<neapibrėžta>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Žiūrėti"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Kelti Aukštyn"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Kelti Žemyn"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Rikuoti pagal LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Pašalinti viską"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Ar jūs tikrai norite pašalinti visus kanalus iš sąrašo?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Nėra informacijos"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Prašome palaukti, vykdoma analizė"
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "Kraštinių santykis %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Įjungti žurnalo įrašą į failą (reikalingas paleidimas iš naujo)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Liko laiko"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Didelis tikslumas"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Baigus groti: persukti einamą failą"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Baigus groti: Uždaryti"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "Inicializacijos metu MPC-HC susidūrė su problema. Su jūsų pagalba mes galime ištaisyti problemą.\n\nAr jūs norite pranešti apie ją?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Įveskite teigiamą reikšmę, jei garsas per anksti, neigiamą reikšmę, jei per vėlai."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Išankstinė peržiūra šiuo metu išjungta. Jūs galite ją įjungti MPC-HC nustatymuose."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Ši funkcija gali būti naudojama multimedijos failų peržiūrai ir nuotolinės vietos. Naudokite ją tik saugiame privačiame tinkle. \n\nAr jūs tikrai norite įjungti šią funkciją?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Vidinis subtitrų renderis"
+
+msgctxt "IDS_AG_OPEN_DEVICE"
+msgid "Open Device"
+msgstr "Atverti įrenginį"
+
+msgctxt "IDS_AG_SAVE_AS"
+msgid "Save As"
+msgstr "Išsaugoti kaip"
+
+msgctxt "IDS_AG_SAVE_IMAGE"
+msgid "Save Image"
+msgstr "Išsaugoti nuotrauką"
+
+msgctxt "IDS_MPLAYERC_6"
+msgid "Save Image (auto)"
+msgstr "Išsaugoti nuotrauką (automatiškai)"
+
+msgctxt "IDS_OSD_IMAGE_SAVED"
+msgid "Image saved successfully"
+msgstr "Nuotrauka sėkmingai išsaugota"
+
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
+
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
+
+msgctxt "IDS_AG_PROPERTIES"
+msgid "Properties"
+msgstr "Ypatybės"
+
+msgctxt "IDS_AG_EXIT"
+msgid "Exit"
+msgstr "Išeiti"
+
+msgctxt "IDS_AG_PLAYPAUSE"
+msgid "Play/Pause"
+msgstr "Groti/Pauzė"
+
+msgctxt "IDS_AG_PLAY"
+msgid "Play"
+msgstr "Groti"
+
+msgctxt "IDS_AG_STOP"
+msgid "Stop"
+msgstr "Sustabdyti"
+
+msgctxt "IDS_AG_FRAMESTEP"
+msgid "Frame-step"
+msgstr "Žingsnis pirmyn"
+
+msgctxt "IDS_MPLAYERC_16"
+msgid "Frame-step back"
+msgstr "Žingsnis atgal"
+
+msgctxt "IDS_AG_GO_TO"
+msgid "Go To"
+msgstr "Eiti į"
+
+msgctxt "IDS_AG_INCREASE_RATE"
+msgid "Increase Rate"
+msgstr "Pagreitinti"
+
+msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
+msgid "Show/Game show"
+msgstr "Laidos/Žaidimai"
+
+msgctxt "IDS_CONTENT_SPORTS"
+msgid "Sports"
+msgstr "Sportas"
+
+msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
+msgid "Children's/Youth programmes"
+msgstr "Vaikams/Jaunimui"
+
+msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
+msgid "Music/Ballet/Dance"
+msgstr "Muzika/Baletas/Šokiai"
+
+msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
+msgid "Arts/Culture"
+msgstr "Menas/Kultūra"
+
+msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
+msgid "Social/Political issues/Economics"
+msgstr "Politika/Ekonomika/Visuomeninės laidos"
+
+msgctxt "IDS_CONTENT_LEISURE"
+msgid "Leisure hobbies"
+msgstr "Laisvalaikio pomėgiai"
+
+msgctxt "IDS_FILE_RECYCLE"
+msgid "Move to Recycle Bin"
+msgstr "Perkelti į šiukšlinę"
+
+msgctxt "IDS_AG_SAVE_COPY"
+msgid "Save a Copy"
+msgstr "Išsaugoti kopiją"
+
+msgctxt "IDS_FASTSEEK_LATEST"
+msgid "Latest keyframe"
+msgstr "Paskutinis raktinis kadras"
+
+msgctxt "IDS_FASTSEEK_NEAREST"
+msgid "Nearest keyframe"
+msgstr "Artimiausias raktinis kadras"
+
+msgctxt "IDS_HOOKS_FAILED"
+msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
+msgstr "Inicializiacijos metu MPC-HC susidūrė su problema. DVD negali teisingai veikti. Tai gali sukelti saugumo įrankių nesuderinamumas.\n\nAr jūs norite pranešti apie šią problemą?"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
+msgid "Never show"
+msgstr "Niekada nerodyti"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
+msgid "Show when moving the cursor, hide after:"
+msgstr "Rodyti, kai judinamas žymeklis, slėpti po:"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
+msgid "Show when hovering control, hide after:"
+msgstr "Rodyti užvedus pelės rodyklę ant elemento, slėpti po:"
+
+msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
+msgid "Failed to set pre-resize shaders"
+msgstr "Nepavyko nustatyti pre-resize tamsinimų"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
+msgid "Frame Time Correction: On"
+msgstr "Kadrų laiko taisa: Įj."
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
+msgid "Frame Time Correction: Off"
+msgstr "Kadrų laiko taisa: Išj."
+
+msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
+msgid "Target VSync Offset: %.1f"
+msgstr "Tikslinis sinchronizacijos poslinkis: %.1f"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
+msgid "VSync Offset: %d"
+msgstr "VSync Poslinkis: %d"
+
+msgctxt "IDS_OSD_SPEED"
+msgid "Speed: %.2lfx"
+msgstr "Greitis: %.2lfx"
+
+msgctxt "IDS_OSD_THUMBS_SAVED"
+msgid "Thumbnails saved successfully"
+msgstr "Miniatiūros sėkmingai išsaugotos"
+
+msgctxt "IDS_MENU_VIDEO_STREAM"
+msgid "Vide&o Track"
+msgstr "&Vaizdo takelis"
+
+msgctxt "IDS_MENU_VIDEO_ANGLE"
+msgid "Video Ang&le"
+msgstr "Vaizdo &kampas"
+
+msgctxt "IDS_RESET_SETTINGS"
+msgid "Reset settings"
+msgstr "Atstatyti nustatymus"
+
+msgctxt "IDS_RESET_SETTINGS_WARNING"
+msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
+msgstr "Ar esate tikri, kad norite grąžinti MPC-HC numatytuosius nustatymus?\nĮspėjame, kad VISI jūsų dabartiniai nustatymai bus prarasti!"
+
+msgctxt "IDS_RESET_SETTINGS_MUTEX"
+msgid "Please close all instances of MPC-HC so that the default settings can be restored."
+msgstr "Prašom uždarykite visas MPC-HC kopijas pakeitimams įsigalioti."
+
+msgctxt "IDS_EXPORT_SETTINGS"
+msgid "Export settings"
+msgstr "Eksportuoti nustatymus"
+
+msgctxt "IDS_EXPORT_SETTINGS_WARNING"
+msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
+msgstr "Kai kurie pakeitimai dar neišsaugoti.\nAr jūs norite išsaugoti juos prieš eksportuodami?"
+
+msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
+msgid "The settings have been successfully exported."
+msgstr "Nustatymai sėkmingai eksportuoti."
+
+msgctxt "IDS_EXPORT_SETTINGS_FAILED"
+msgid "The export failed! This can happen when you don't have the correct rights."
+msgstr "Eksportavimas nepavyko! Tai galėjo nutikti, jog jūs neturite reikiamų teisių."
+
+msgctxt "IDS_BDA_ERROR"
+msgid "BDA Error"
+msgstr "BDA klaida"
+
+msgctxt "IDS_AG_DECREASE_RATE"
+msgid "Decrease Rate"
+msgstr "Sulėtinti"
+
+msgctxt "IDS_AG_RESET_RATE"
+msgid "Reset Rate"
+msgstr "Atkurti greitį"
+
+msgctxt "IDS_MPLAYERC_21"
+msgid "Audio Delay +10 ms"
+msgstr "Garso delsa +10 ms"
+
+msgctxt "IDS_MPLAYERC_22"
+msgid "Audio Delay -10 ms"
+msgstr "Garso delsa -10 ms"
+
+msgctxt "IDS_MPLAYERC_23"
+msgid "Jump Forward (small)"
+msgstr "Šuolis pirmyn (mažas)"
+
+msgctxt "IDS_MPLAYERC_24"
+msgid "Jump Backward (small)"
+msgstr "Šuolis atgal (mažas)"
+
+msgctxt "IDS_MPLAYERC_25"
+msgid "Jump Forward (medium)"
+msgstr "Šuolis pirmyn (vidutinis)"
+
+msgctxt "IDS_MPLAYERC_26"
+msgid "Jump Backward (medium)"
+msgstr "Šuolis atgal (vidutinis)"
+
+msgctxt "IDS_MPLAYERC_27"
+msgid "Jump Forward (large)"
+msgstr "Šuolis pirmyn (didelis)"
+
+msgctxt "IDS_MPLAYERC_28"
+msgid "Jump Backward (large)"
+msgstr "Šuolis atgal (didelis)"
+
+msgctxt "IDS_MPLAYERC_29"
+msgid "Jump Forward (keyframe)"
+msgstr "Šuolis pirmyn (pagrindinis kadras)"
+
+msgctxt "IDS_MPLAYERC_30"
+msgid "Jump Backward (keyframe)"
+msgstr "Šuolis atgal (pagrindinis kadras)"
+
+msgctxt "IDS_AG_NEXT"
+msgid "Next"
+msgstr "Kitas"
+
+msgctxt "IDS_AG_PREVIOUS"
+msgid "Previous"
+msgstr "Ankstesnis"
+
+msgctxt "IDS_AG_NEXT_FILE"
+msgid "Next File"
+msgstr "Kitas failas"
+
+msgctxt "IDS_AG_PREVIOUS_FILE"
+msgid "Previous File"
+msgstr "Ankstesnis failas"
+
+msgctxt "IDS_MPLAYERC_99"
+msgid "Toggle Direct3D fullscreen"
+msgstr "Perjungti Direct3D pilno ekrano veiksena"
+
+msgctxt "IDS_MPLAYERC_100"
+msgid "Goto Prev Subtitle"
+msgstr "Ankstesni subtitrai"
+
+msgctxt "IDS_MPLAYERC_101"
+msgid "Goto Next Subtitle"
+msgstr "Kiti subtitrai"
+
+msgctxt "IDS_MPLAYERC_102"
+msgid "Shift Subtitle Left"
+msgstr "Paslinkti subtitrus kairėn"
+
+msgctxt "IDS_MPLAYERC_103"
+msgid "Shift Subtitle Right"
+msgstr "Paslinkti subtitrus dešinėn"
+
+msgctxt "IDS_AG_SEEKSET"
+msgid "Jump to Beginning"
+msgstr "Groti nuo pradžių"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Rodyti failo vardą"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Groti DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Groti BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Rodyti renderio statistiką"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Atstatyti renderio statistiką"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Subtitrai::Įvairūs"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Slėpti &kraštines"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Tik vaizdo ka&dras"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "&Rodyti antraštę ir meniu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Slėpti &Meniu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Papildomai"
+
+msgctxt "IDS_AG_VIEW_MINIMAL"
+msgid "View Minimal"
+msgstr "Vaizdas minimalus"
+
+msgctxt "IDS_AG_VIEW_COMPACT"
+msgid "View Compact"
+msgstr "Vaizdas kompaktiškas"
+
+msgctxt "IDS_AG_VIEW_NORMAL"
+msgid "View Normal"
+msgstr "Vaizdas normalus"
+
+msgctxt "IDS_AG_FULLSCREEN"
+msgid "Fullscreen"
+msgstr "Pilnaekranė veiksena"
+
+msgctxt "IDS_MPLAYERC_39"
+msgid "Fullscreen (w/o res.change)"
+msgstr "Viso ekrano režimas (be skir. gebos pakeitimo)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT"
+msgid "Zoom Auto Fit"
+msgstr "Mastelio savaiminis prisitaikymas"
+
+msgctxt "IDS_AG_VIDFRM_HALF"
+msgid "VidFrm Half"
+msgstr "Pusė vaizdo kardo"
+
+msgctxt "IDS_AG_VIDFRM_NORMAL"
+msgid "VidFrm Normal"
+msgstr "Normalus vaizdo kadras"
+
+msgctxt "IDS_AG_VIDFRM_DOUBLE"
+msgid "VidFrm Double"
+msgstr "Dvigubas vaizdo kadras"
+
+msgctxt "IDS_AG_ALWAYS_ON_TOP"
+msgid "Always On Top"
+msgstr "Visada viršuje"
+
+msgctxt "IDS_AG_PNS_INC_SIZE"
+msgid "PnS Inc Size"
+msgstr "Padidinti kadro dydį"
+
+msgctxt "IDS_AG_PNS_INC_WIDTH"
+msgid "PnS Inc Width"
+msgstr "Padidinti kadro plotį"
+
+msgctxt "IDS_MPLAYERC_47"
+msgid "PnS Inc Height"
+msgstr "Padidinti kadro aukštį"
+
+msgctxt "IDS_AG_PNS_DEC_SIZE"
+msgid "PnS Dec Size"
+msgstr "Sumažinti kadro dydį"
+
+msgctxt "IDS_AG_PNS_DEC_WIDTH"
+msgid "PnS Dec Width"
+msgstr "Sumažinti kadro plotį"
+
+msgctxt "IDS_MPLAYERC_50"
+msgid "PnS Dec Height"
+msgstr "Sumažinti kadro aukštį"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
+msgid "Downloading [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PARSING"
+msgid "Parsing list..."
+msgstr "Sąrašas nagrinėjamas..."
+
+msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
+msgid "No subtitles found."
+msgstr "Subtitrai nerasti."
+
+msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
+msgid "%d subtitle(s) available."
+msgstr "%d galimi(ų) subtitrai(ų)."
+
+msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
+msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
+msgstr "Ar norite įgalinti periodišką MPC-HC atnaujinimų ieškojimą?\n\nŠią savybę vėliau galima išjungti nustatymų puslapyje „Įvairūs“."
+
+msgctxt "IDS_ZOOM_50"
+msgid "50%"
+msgstr "50%"
+
+msgctxt "IDS_ZOOM_100"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDS_ZOOM_200"
+msgid "200%"
+msgstr "200%"
+
+msgctxt "IDS_ZOOM_AUTOFIT"
+msgid "Auto Fit"
+msgstr "Savaiminis prisitaikymas"
+
+msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (Larger Only)"
+msgstr "Savaiminis prisitaikymas (tik didesniam)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
+msgid "Zoom Auto Fit (Larger Only)"
+msgstr "Mastelio savaiminis prisitaikymas (tik didesniam)"
+
+msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
+msgid "Zoom: Auto (Larger Only)"
+msgstr "Mastelis: Savaiminis (tik didesniam)"
+
+msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
+msgid "Double click to open file location"
+msgstr "Dvigubas spragtelėjimas failo vietos atvėrimui"
+
+msgctxt "IDS_TOOLTIP_REMAINING_TIME"
+msgid "Toggle between elapsed and remaining time"
+msgstr "Perjungti tarp praėjusio ir likusio laiko"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
+msgid "Invalid delay"
+msgstr "Klaidinga delsa"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
+msgid "Please enter a number between 1 and 365."
+msgstr "Prašome įvesti skaičių tarp 1 ir 365."
+
+msgctxt "IDS_AG_PNS_CENTER"
+msgid "PnS Center"
+msgstr "Kadras centre"
+
+msgctxt "IDS_AG_PNS_LEFT"
+msgid "PnS Left"
+msgstr "Kadras kairėn"
+
+msgctxt "IDS_AG_PNS_RIGHT"
+msgid "PnS Right"
+msgstr "Kadras dešinėn"
+
+msgctxt "IDS_AG_PNS_UP"
+msgid "PnS Up"
+msgstr "Kadras viršun"
+
+msgctxt "IDS_AG_PNS_DOWN"
+msgid "PnS Down"
+msgstr "Kadras apačion"
+
+msgctxt "IDS_AG_PNS_UPLEFT"
+msgid "PnS Up/Left"
+msgstr "Kadras viršun/kairėn"
+
+msgctxt "IDS_AG_PNS_UPRIGHT"
+msgid "PnS Up/Right"
+msgstr "Kadras viršun/dešinėn"
+
+msgctxt "IDS_AG_PNS_DOWNLEFT"
+msgid "PnS Down/Left"
+msgstr "Kadras apačion/kairėn"
+
+msgctxt "IDS_MPLAYERC_59"
+msgid "PnS Down/Right"
+msgstr "Kadras apačion/dešinėn"
+
+msgctxt "IDS_AG_VOLUME_UP"
+msgid "Volume Up"
+msgstr "Pagarsinti"
+
+msgctxt "IDS_AG_VOLUME_DOWN"
+msgid "Volume Down"
+msgstr "Patylinti"
+
+msgctxt "IDS_AG_VOLUME_MUTE"
+msgid "Volume Mute"
+msgstr "Nutildyti"
+
+msgctxt "IDS_MPLAYERC_63"
+msgid "DVD Title Menu"
+msgstr "DVD pagrindinis meniu"
+
+msgctxt "IDS_AG_DVD_ROOT_MENU"
+msgid "DVD Root Menu"
+msgstr "DVD antrinis meniu"
+
+msgctxt "IDS_MPLAYERC_65"
+msgid "DVD Subtitle Menu"
+msgstr "DVD subtitrų meniu"
+
+msgctxt "IDS_MPLAYERC_66"
+msgid "DVD Audio Menu"
+msgstr "DVD garso meniu"
+
+msgctxt "IDS_MPLAYERC_67"
+msgid "DVD Angle Menu"
+msgstr "DVD kampo meniu"
+
+msgctxt "IDS_MPLAYERC_68"
+msgid "DVD Chapter Menu"
+msgstr "DVD skyrių meniu"
+
+msgctxt "IDS_AG_DVD_MENU_LEFT"
+msgid "DVD Menu Left"
+msgstr "DVD meniu kairėn"
+
+msgctxt "IDS_MPLAYERC_70"
+msgid "DVD Menu Right"
+msgstr "DVD meniu dešinėn"
+
+msgctxt "IDS_AG_DVD_MENU_UP"
+msgid "DVD Menu Up"
+msgstr "DVD meniu aukštyn"
+
+msgctxt "IDS_AG_DVD_MENU_DOWN"
+msgid "DVD Menu Down"
+msgstr "DVD meniu žemyn"
+
+msgctxt "IDS_MPLAYERC_73"
+msgid "DVD Menu Activate"
+msgstr "DVD meniu aktyvuoti"
+
+msgctxt "IDS_AG_DVD_MENU_BACK"
+msgid "DVD Menu Back"
+msgstr "DVD meniu atgal"
+
+msgctxt "IDS_MPLAYERC_75"
+msgid "DVD Menu Leave"
+msgstr "DVD meniu išeiti"
+
+msgctxt "IDS_AG_BOSS_KEY"
+msgid "Boss key"
+msgstr "Pagrindinis klavišas"
+
+msgctxt "IDS_MPLAYERC_77"
+msgid "Player Menu"
+msgstr "Grotuvo meniu"
+
+msgctxt "IDS_MPLAYERC_78"
+msgid "Player Menu (full)"
+msgstr "Grotuvo meniu (pilnas)"
+
+msgctxt "IDS_AG_FILTERS_MENU"
+msgid "Filters Menu"
+msgstr "Filtrų meniu"
+
+msgctxt "IDS_AG_OPTIONS"
+msgid "Options"
+msgstr "Nustatymai"
+
+msgctxt "IDS_AG_NEXT_AUDIO"
+msgid "Next Audio Track"
+msgstr "Sekantis garso takelis"
+
+msgctxt "IDS_AG_PREV_AUDIO"
+msgid "Prev Audio Track"
+msgstr "Ankstesnis garso takelis"
+
+msgctxt "IDS_AG_NEXT_SUBTITLE"
+msgid "Next Subtitle Track"
+msgstr "Sekantys subtitrai"
+
+msgctxt "IDS_AG_PREV_SUBTITLE"
+msgid "Prev Subtitle Track"
+msgstr "Ankstesni subtitrai"
+
+msgctxt "IDS_MPLAYERC_85"
+msgid "On/Off Subtitle"
+msgstr "Įj./išj. subtitrus"
+
+msgctxt "IDS_MPLAYERC_86"
+msgid "Reload Subtitles"
+msgstr "Perkrauti subtitrus"
+
+msgctxt "IDS_MPLAYERC_91"
+msgid "Next Angle (DVD)"
+msgstr "Kitas kampas (DVD)"
+
+msgctxt "IDS_MPLAYERC_92"
+msgid "Prev Angle (DVD)"
+msgstr "Ankstesnis kampas (DVD)"
+
+msgctxt "IDS_MPLAYERC_93"
+msgid "Next Audio Track (DVD)"
+msgstr "Sekantis garso takelis (DVD)"
+
+msgctxt "IDS_MPLAYERC_94"
+msgid "Prev Audio Track (DVD)"
+msgstr "Ankstesnis garso takelis (DVD)"
+
+msgctxt "IDS_MPLAYERC_95"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Sekantys subtitrai (DVD)"
+
+msgctxt "IDS_MPLAYERC_96"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Ankstesni subtitrai (DVD)"
+
+msgctxt "IDS_MPLAYERC_97"
+msgid "On/Off Subtitle (DVD)"
+msgstr "Įj./išj. subtitrus (DVD)"
+
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Dabartinio laiko rodymas"
+
+msgctxt "IDS_PPAGEWEBSERVER_0"
+msgid "Select the directory"
+msgstr "Pasirinkti vietą"
+
+msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
+msgid "Quick add favorite"
+msgstr "Greitai pridėti prie mėgstamiausių"
+
+msgctxt "IDS_DVB_CHANNEL_NUMBER"
+msgid "N"
+msgstr "N"
+
+msgctxt "IDS_DVB_CHANNEL_NAME"
+msgid "Name"
+msgstr "Pavadinimas"
+
+msgctxt "IDS_DVB_CHANNEL_FREQUENCY"
+msgid "Frequency"
+msgstr "Dažnis"
+
+msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
+msgid "Encrypted"
+msgstr "Užšifruota"
+
+msgctxt "IDS_YES"
+msgid "Yes"
+msgstr "Taip"
+
+msgctxt "IDS_NO"
+msgid "No"
+msgstr "Ne"
+
+msgctxt "IDS_DVB_CHANNEL_START_SCAN"
+msgid "Start"
+msgstr "Pradėti"
+
+msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
+msgid "Stop"
+msgstr "Stabdyti"
+
+msgctxt "IDS_DVB_TVNAV_SEERADIO"
+msgid "Radio stations"
+msgstr "Radijo stotys"
+
+msgctxt "IDS_DVB_TVNAV_SEETV"
+msgid "TV stations"
+msgstr "TV stotys"
+
+msgctxt "IDS_DVB_CHANNEL_FORMAT"
+msgid "Format"
+msgstr "Formatas"
+
+msgctxt "IDS_MAINFRM_2"
+msgid "Focus lost to: %s - %s"
+msgstr "Židinys perėjo į: %s - %s"
+
+msgctxt "IDS_AG_SUBTITLES_SAVED"
+msgid "Subtitles saved"
+msgstr "Subtitrai išsaugoti"
+
+msgctxt "IDS_MAINFRM_4"
+msgid "Cannot save subtitles"
+msgstr "Neįmanoma išsaugoti subtitrų"
+
+msgctxt "IDS_AG_FRAMERATE"
+msgid "Frame rate"
+msgstr "Kadrų dažnis"
+
+msgctxt "IDS_MAINFRM_6"
+msgid "drawn: %d, dropped: %d"
+msgstr "įrašyta: %d, pamesta: %d"
+
+msgctxt "IDS_AG_FRAMES"
+msgid "Frames"
+msgstr "Kadrai"
+
+msgctxt "IDS_AG_BUFFERS"
+msgid "Buffers"
+msgstr "Buferiai"
+
+msgctxt "IDS_MAINFRM_9"
+msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
+msgstr "Skirsnis: %02lu/%02lu, Pavadinimas: %02lu/%02lu, Skyrius: %02lu/%02lu"
+
+msgctxt "IDS_MAINFRM_10"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Kampas: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+
+msgctxt "IDS_MAINFRM_11"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bitai %d %s"
+
+msgctxt "IDS_ADD_TO_PLAYLIST"
+msgid "Add to MPC-HC Playlist"
+msgstr "Įtraukti į MPC-HC grojaraštį"
+
+msgctxt "IDS_OPEN_WITH_MPC"
+msgid "Play with MPC-HC"
+msgstr "Groti su MPC-HC"
+
+msgctxt "IDS_CANNOT_CHANGE_FORMAT"
+msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
+msgstr "MPC-HC neturi pakankamai privilegijų pakeisti formatų susiejimą. Prašom spragtelėkite „Paleisti administratoriaus teisėmis“ mygtuką."
+
+msgctxt "IDS_APP_DESCRIPTION"
+msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
+msgstr "MPC-HC - tai nepaprastai lengvas, su atviru išeities kodu media grotuvas Windows. Jis palaiko visus populiarius vaizdo ir garso failų formatus, pasiekiamus grojimui. Mes garantuojame 100% laisvę nuo šnipinėjimo programų, reklamų ar įrankių juostų."
+
+msgctxt "IDS_MAINFRM_12"
+msgid "channel"
+msgstr "kanalas"
+
+msgctxt "IDS_MAINFRM_13"
+msgid "channels"
+msgstr "kanalai"
+
+msgctxt "IDS_AG_TITLE"
+msgid "Title %u"
+msgstr "Pavadinimas %u"
+
+msgctxt "IDS_MAINFRM_16"
+msgid "DVD: Unexpected error"
+msgstr "DVD: Netikėta klaida"
+
+msgctxt "IDS_MAINFRM_17"
+msgid "DVD: Copy-Protect Fail"
+msgstr "DVD: Problema su apsauga nuo kopijavimo"
+
+msgctxt "IDS_MAINFRM_18"
+msgid "DVD: Invalid DVD 1.x Disc"
+msgstr "DVD: Netinkamas DVD 1.x"
+
+msgctxt "IDS_MAINFRM_19"
+msgid "DVD: Invalid Disc Region"
+msgstr "DVD: Netinkamas disko regionas"
+
+msgctxt "IDS_MAINFRM_20"
+msgid "DVD: Low Parental Level"
+msgstr "DVD: Žema nepilnamečių apsauga"
+
+msgctxt "IDS_MAINFRM_21"
+msgid "DVD: Macrovision Fail"
+msgstr "DVD: Problema su Macrovision"
+
+msgctxt "IDS_MAINFRM_22"
+msgid "DVD: Incompatible System And Decoder Regions"
+msgstr "DVD: Nesuderinami sistemos ir dekoderio regionai"
+
+msgctxt "IDS_MAINFRM_23"
+msgid "DVD: Incompatible Disc And Decoder Regions"
+msgstr "DVD: Nesuderinami disko ir dekoderio regionai"
+
+msgctxt "IDS_D3DFS_WARNING"
+msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
+msgstr "Ši funkcija skirta pašalinti drebėjimą, tačiau ją įjungus trukdomas kontekstinio meniu ir dialogų vaizdavimas.\n\nAr jūs tikrai norite aktyvuoti ją?"
+
+msgctxt "IDS_MAINFRM_139"
+msgid "Sub delay: %ld ms"
+msgstr "Subtitrų delsa: %ld ms"
+
+msgctxt "IDS_AG_TITLE2"
+msgid "Title: %02d/%02d"
+msgstr "Pavadinimas: %02d/%02d"
+
+msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
+msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
+msgstr "Failo pavadinime yra nepalaikomi simboliai (naudokite A-Z, 0-9)"
+
+msgctxt "IDS_THUMB_ROWNUMBER"
+msgid "Rows:"
+msgstr "Eilutės:"
+
+msgctxt "IDS_THUMB_COLNUMBER"
+msgid "Columns:"
+msgstr "Stulpeliai:"
+
+msgctxt "IDS_THUMB_IMAGE_WIDTH"
+msgid "Image width"
+msgstr "Plotis"
+
+msgctxt "IDS_AG_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Proporcijos"
+
+msgctxt "IDS_MAINFRM_37"
+msgid ", Total: %ld, Dropped: %ld"
+msgstr ", Viso: %ld, Pamesta: %ld"
+
+msgctxt "IDS_MAINFRM_38"
+msgid ", Size: %I64d KB"
+msgstr ", Dydis: %I64d KB"
+
+msgctxt "IDS_MAINFRM_39"
+msgid ", Size: %I64d MB"
+msgstr ", Dydis: %I64d MB"
+
+msgctxt "IDS_MAINFRM_40"
+msgid ", Free: %I64d KB"
+msgstr ", Laisva: %I64d KB"
+
+msgctxt "IDS_MAINFRM_41"
+msgid ", Free: %I64d MB"
+msgstr ", Laisva: %I64d MB"
+
+msgctxt "IDS_MAINFRM_42"
+msgid ", Free V/A Buffers: %03d/%03d"
+msgstr ", Laisvi V/A Buferiai: %03d/%03d"
+
+msgctxt "IDS_AG_ERROR"
+msgid "Error"
+msgstr "Klaida"
+
+msgctxt "IDS_SUBTITLE_STREAM_OFF"
+msgid "Subtitle: off"
+msgstr "Subtitrai: išjungti"
+
+msgctxt "IDS_SUBTITLE_STREAM"
+msgid "Subtitle: %s"
+msgstr "Subtitrai: %s"
+
+msgctxt "IDS_MAINFRM_46"
+msgid "Select the path for the DVD/BD:"
+msgstr "Įveskite kelią DVD/BD:"
+
+msgctxt "IDS_SUB_LOADED_SUCCESS"
+msgid " loaded successfully"
+msgstr "įkelta pilnai"
+
+msgctxt "IDS_ALL_FILES_FILTER"
+msgid "All files (*.*)|*.*||"
+msgstr "Visi failai (*.*)|*.*||"
+
+msgctxt "IDS_GETDIB_FAILED"
+msgid "GetDIB failed, hr = %08x"
+msgstr "Problema su GetDIB, hr = %08x"
+
+msgctxt "IDS_GETCURRENTIMAGE_FAILED"
+msgid "GetCurrentImage failed, hr = %08x"
+msgstr "Problema su GetCurrentImage, hr = %08x"
+
+msgctxt "IDS_SCREENSHOT_ERROR"
+msgid "Cannot create file"
+msgstr "Neįmanoma sukurti failo"
+
+msgctxt "IDS_THUMBNAILS_NO_DURATION"
+msgid "Cannot create thumbnails for files with no duration"
+msgstr "Neįmanoma sukurti miniatiūros failams, neturintiems trukmės"
+
+msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
+msgid "Failed to get video frame size"
+msgstr "Nepavyko gauti vaizdo kadro dydžio"
+
+msgctxt "IDS_OUT_OF_MEMORY"
+msgid "Out of memory, go buy some more!"
+msgstr "Nepakanka atminties, nusipirkite dar!"
+
+msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
+msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
+msgstr "Neteisingas paveikslo formatas, neįmanoma sukurti miniatiūros iš bitmapų %d bpp."
+
+msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
+msgid "File Size: %s (%s bytes)\\N"
+msgstr "Failo dydis: %s (%s baitų)\\N"
+
+msgctxt "IDS_THUMBNAILS_INFO_HEADER"
+msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Failo vardas: %s\\N%sSkiriamoji geba: %dx%d %s\\NTrukmė: %02d:%02d:%02d"
+
+msgctxt "IDS_THUMBNAIL_TOO_SMALL"
+msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
+msgstr "Neįmanoma sukurti failo su tokiomis mažomis miniatiūromis.\n\nPamėginkite sumažinti miniatiūrų kiekį arba padidinti bendrą dydį."
+
+msgctxt "IDS_CANNOT_LOAD_SUB"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Norėdami įkelti subtitrus turite pakeisti vaizdo renderio tipą ir atidaryti failą iš naujo.\n- DirectShow: VMR-9 (renderless), EVR (KP), Sync \", madVR vs Haali\n- REALMEDIA: Specialusis RealMedia renderis, arba atidaryti jį per DirectShow\n- \"QuickTime: DX7 ar DX9 QuickTime renderis\n- Shockwave: n/d"
+
+msgctxt "IDS_SUBTITLE_FILES_FILTER"
+msgid "Subtitle files"
+msgstr "Subtitrų failai"
+
+msgctxt "IDS_MAINFRM_68"
+msgid "Aspect Ratio: %ld:%ld"
+msgstr "Proporcijos: %ld:%ld"
+
+msgctxt "IDS_MAINFRM_69"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_70"
+msgid "Audio delay: %I64d ms"
+msgstr "Garso uždelsimas: %I64d ms"
+
+msgctxt "IDS_AG_CHAPTER"
+msgid "Chapter %d"
+msgstr "Skyrius %d"
+
+msgctxt "IDS_AG_OUT_OF_MEMORY"
+msgid "Out of memory"
+msgstr "Nepakanka atminties"
+
+msgctxt "IDS_MAINFRM_77"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Klaida: Internet Explorer reikalingas Adobe Flash Player"
+
+msgctxt "IDS_MAINFRM_78"
+msgid "QuickTime not yet supported for X64 (apple library not available)"
+msgstr "QuickTime dar nepalaikomas X64 (nėra apple bibliotekos)"
+
+msgctxt "IDS_MAINFRM_80"
+msgid "Failed to create the filter graph object"
+msgstr "Nepavyksta sukurti filtro grafą"
+
+msgctxt "IDS_MAINFRM_81"
+msgid "Invalid argument"
+msgstr "Neteisingas argumentas"
+
+msgctxt "IDS_MAINFRM_82"
+msgid "Opening aborted"
+msgstr "Atidarymas nutrauktas"
+
+msgctxt "IDS_MAINFRM_83"
+msgid "Failed to render the file"
+msgstr "Nepavyko renderinti failo"
+
+msgctxt "IDS_AG_CHAPTER2"
+msgid "Chapter: "
+msgstr "Skyrius:"
+
+msgctxt "IDS_VOLUME_OSD"
+msgid "Vol: %d%%"
+msgstr "Garsumas: %d%%"
+
+msgctxt "IDS_BOOST_OSD"
+msgid "Boost: +%u%%"
+msgstr "Stiprinimas: +%u%%"
+
+msgctxt "IDS_BALANCE_OSD"
+msgid "Balance: %s"
+msgstr "Balansas: %s"
+
+msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
+msgid "Current"
+msgstr "Dabartinis"
+
+msgctxt "IDS_MAINFRM_DIR_TITLE"
+msgid "Select Directory"
+msgstr "Rinkitės aplanką"
+
+msgctxt "IDS_MAINFRM_DIR_CHECK"
+msgid "Include subdirectories"
+msgstr "Su subaplankais"
+
+msgctxt "IDS_AG_PAUSE"
+msgid "Pause"
+msgstr "Pauzė"
+
+msgctxt "IDS_AG_TOGGLE_CAPTION"
+msgid "Toggle Caption&Menu"
+msgstr "Įj./Išj. antraštę ir meniu"
+
+msgctxt "IDS_AG_TOGGLE_SEEKER"
+msgid "Toggle Seek Bar"
+msgstr "Įj./Išj. slankjuostę"
+
+msgctxt "IDS_AG_TOGGLE_CONTROLS"
+msgid "Toggle Controls"
+msgstr "Įj./Išj. valdiklius"
+
+msgctxt "IDS_MAINFRM_84"
+msgid "Invalid file name"
+msgstr "Neteisingas failo vardas"
+
+msgctxt "IDS_MAINFRM_86"
+msgid "Cannot connect the filters"
+msgstr "Negaliu prijungti filtrų"
+
+msgctxt "IDS_MAINFRM_87"
+msgid "Cannot load any source filter"
+msgstr "Negaliu įkelti jokio šaltinio filtro"
+
+msgctxt "IDS_MAINFRM_88"
+msgid "Cannot render the file"
+msgstr "Negaliu renderinti failo"
+
+msgctxt "IDS_MAINFRM_89"
+msgid "Invalid file format"
+msgstr "Neteisingas failo formatas"
+
+msgctxt "IDS_MAINFRM_90"
+msgid "File not found"
+msgstr "Failas nerastas"
+
+msgctxt "IDS_MAINFRM_91"
+msgid "Unknown file type"
+msgstr "Nežinomas failo tipas"
+
+msgctxt "IDS_MAINFRM_92"
+msgid "Unsupported stream"
+msgstr "Nepalaikomas srautas"
+
+msgctxt "IDS_MAINFRM_93"
+msgid "Cannot find DVD directory"
+msgstr "Nerastas DVD aplankas"
+
+msgctxt "IDS_MAINFRM_94"
+msgid "Can't create the DVD Navigator filter"
+msgstr "Negaliu sukurti DVD Navigator filtro"
+
+msgctxt "IDS_AG_FAILED"
+msgid "Failed"
+msgstr "Nepavyko"
+
+msgctxt "IDS_MAINFRM_96"
+msgid "Can't create video capture filter"
+msgstr "Negaliu sukurti vaizdo įrašymo filtro"
+
+msgctxt "IDS_MAINFRM_98"
+msgid "No capture filters"
+msgstr "Nėra įrašų filtrų"
+
+msgctxt "IDS_MAINFRM_99"
+msgid "Can't create capture graph builder object"
+msgstr "Negaliu sukurti objekto vaizdo įrašymo grafo statytojui"
+
+msgctxt "IDS_MAINFRM_108"
+msgid "Couldn't open any device"
+msgstr "Negaliu atidaryti jokio įrenginio"
+
+msgctxt "IDS_AG_SOUND"
+msgid "Sound"
+msgstr "Garsas"
+
+msgctxt "IDS_MAINFRM_114"
+msgid "%s was not found, please insert media containing this file."
+msgstr "%s nerasta, prašo įdėti kaupiklį su šiuo failu."
+
+msgctxt "IDS_AG_ABORTED"
+msgid "Aborted"
+msgstr "Nutraukta"
+
+msgctxt "IDS_MAINFRM_116"
+msgid "&Properties..."
+msgstr "Y&patybės"
+
+msgctxt "IDS_MAINFRM_117"
+msgid " (pin) properties..."
+msgstr " (pin) ypatybės..."
+
+msgctxt "IDS_AG_UNKNOWN_STREAM"
+msgid "Unknown Stream"
+msgstr "Nežinomas srautas"
+
+msgctxt "IDS_AG_UNKNOWN"
+msgid "Unknown %u"
+msgstr "Nežinomas %u"
+
+msgctxt "IDS_AG_VSYNC"
+msgid "VSync"
+msgstr "VSync"
+
+msgctxt "IDS_MAINFRM_121"
+msgid " (Director Comments 1)"
+msgstr " (Režisieriaus komentarai 1)"
+
+msgctxt "IDS_MAINFRM_122"
+msgid " (Director Comments 2)"
+msgstr " (Režisieriaus komentarai 2)"
+
+msgctxt "IDS_DVD_SUBTITLES_ENABLE"
+msgid "Enable DVD subtitles"
+msgstr "Įjungti DVD subtitrus"
+
+msgctxt "IDS_AG_ANGLE"
+msgid "Angle %u"
+msgstr "Kampas %u"
+
+msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
+msgid "Increase VSync Offset"
+msgstr "Padidinti VSync poslinkį"
+
+msgctxt "IDS_AG_DISABLED"
+msgid "Disabled"
+msgstr "Išjungta"
+
+msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
+msgid "Decrease VSync Offset"
+msgstr "Sumažinti VSync poslinkį"
+
+msgctxt "IDS_MAINFRM_136"
+msgid "MPC-HC D3D Fullscreen"
+msgstr "MPC-HC Pilnaekranis D3D"
+
+msgctxt "IDS_MAINFRM_137"
+msgid "Unknown format"
+msgstr "Nežinomas formatas"
+
+msgctxt "IDS_MAINFRM_138"
+msgid "Sub shift: %ld ms"
+msgstr "Subtitrų poslinkis: %ld ms"
+
+msgctxt "IDS_VOLUME_BOOST_INC"
+msgid "Volume boost increase"
+msgstr "Garso stiprinimas padidinti"
+
+msgctxt "IDS_VOLUME_BOOST_DEC"
+msgid "Volume boost decrease"
+msgstr "Garso stiprinimas sumažinti"
+
+msgctxt "IDS_VOLUME_BOOST_MIN"
+msgid "Volume boost Min"
+msgstr "Garso stiprinimas Min"
+
+msgctxt "IDS_VOLUME_BOOST_MAX"
+msgid "Volume boost Max"
+msgstr "Garso stiprinimas Max"
+
+msgctxt "IDS_USAGE"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
+
+msgctxt "IDS_UNKNOWN_SWITCH"
+msgid "Unrecognized switch(es) found in command line string: \n\n"
+msgstr "Komandinėje eilutėje rasti neatpažinti perjungikliai: \n\n"
+
+msgctxt "IDS_AG_TOGGLE_INFO"
+msgid "Toggle Information"
+msgstr "Įj./Išj. informaciją"
+
+msgctxt "IDS_AG_TOGGLE_STATS"
+msgid "Toggle Statistics"
+msgstr "Įj./Išj. statistiką"
+
+msgctxt "IDS_AG_TOGGLE_STATUS"
+msgid "Toggle Status"
+msgstr "Įj./Išj. būseną"
+
+msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
+msgid "Toggle Subresync Bar"
+msgstr "Įj./Išj. subtitrų sinchronizacijos langą"
+
+msgctxt "IDS_AG_TOGGLE_PLAYLIST"
+msgid "Toggle Playlist Bar"
+msgstr "Įj./Išj. grojaraštį"
+
+msgctxt "IDS_AG_TOGGLE_CAPTURE"
+msgid "Toggle Capture Bar"
+msgstr "Įj./Išj. įrašymo langą"
+
+msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
+msgid "Toggle Debug Shaders"
+msgstr "Įj./Išj. derinimo tamsinimus"
+
+msgctxt "IDS_AG_ZOOM_50"
+msgid "Zoom 50%"
+msgstr "Mastelis 50%"
+
+msgctxt "IDS_AG_ZOOM_100"
+msgid "Zoom 100%"
+msgstr "Mastelis 100%"
+
+msgctxt "IDS_AG_ZOOM_200"
+msgid "Zoom 200%"
+msgstr "Mastelis 200%"
+
+msgctxt "IDS_AG_NEXT_AR_PRESET"
+msgid "Next AR Preset"
+msgstr "Sekantis proporcijų priešnustatymas"
+
+msgctxt "IDS_AG_VIDFRM_STRETCH"
+msgid "VidFrm Stretch"
+msgstr "Vaizdo kadras. Išplėsti iki ekrano dydžio"
+
+msgctxt "IDS_AG_VIDFRM_INSIDE"
+msgid "VidFrm Inside"
+msgstr "Vaizdo kadras. Įrašyti į ekrano dydį"
+
+msgctxt "IDS_AG_VIDFRM_OUTSIDE"
+msgid "VidFrm Outside"
+msgstr "Vaizdo kadras. Užpildyti ekraną ir apkirpti kadrą"
+
+msgctxt "IDS_AG_PNS_RESET"
+msgid "PnS Reset"
+msgstr "Atstatyti kadro padėties nustatymus"
+
+msgctxt "IDS_AG_PNS_ROTATEX_P"
+msgid "PnS Rotate X+"
+msgstr "Pasukti kadrą pagal X+"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM1"
+msgid "VidFrm Zoom 1"
+msgstr "Vaizdo kadras Zoom 1"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM2"
+msgid "VidFrm Zoom 2"
+msgstr "Vaizdo kadras Zoom 2"
+
+msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
+msgid "VidFrm Switch Zoom"
+msgstr "Vaizdo kadras. Pakeisti mastelį"
+
+msgctxt "IDS_ENABLE_ALL_FILTERS"
+msgid "&Enable all filters"
+msgstr "&Įgalinti visus filtrus"
+
+msgctxt "IDS_LOGO_AUTHOR"
+msgid "Author unknown. Contact us if you made this logo!"
+msgstr "Nežinomas autorius. Susisiekite su mumis, jei tai jūsų logotipas."
+
+msgctxt "IDS_NO_MORE_MEDIA"
+msgid "No more media in the current folder."
+msgstr "Einamajame aplanke daugiau nėra media failų."
+
+msgctxt "IDS_FIRST_IN_FOLDER"
+msgid "The first file of the folder is already loaded."
+msgstr "Pirmas failas aplanke jau įkeltas."
+
+msgctxt "IDS_LAST_IN_FOLDER"
+msgid "The last file of the folder is already loaded."
+msgstr "Įkeltas paskutinis aplanke esantis failas."
+
+msgctxt "IDS_FRONT_LEFT"
+msgid "Front Left"
+msgstr "Priekinis kairys"
+
+msgctxt "IDS_FRONT_RIGHT"
+msgid "Front Right"
+msgstr "Priekinis dešinys"
+
+msgctxt "IDS_FRONT_CENTER"
+msgid "Front Center"
+msgstr "Priekinis centrinis"
+
+msgctxt "IDS_LOW_FREQUENCY"
+msgid "Low Frequency"
+msgstr "Žemų dažnių garsiakalbis"
+
+msgctxt "IDS_BACK_LEFT"
+msgid "Back Left"
+msgstr "Galinis kairys"
+
+msgctxt "IDS_BACK_RIGHT"
+msgid "Back Right"
+msgstr "Galinis dešinys"
+
+msgctxt "IDS_FRONT_LEFT_OF_CENTER"
+msgid "Front Left of Center"
+msgstr "Priekinis kairys centras"
+
+msgctxt "IDS_FRONT_RIGHT_OF_CENTER"
+msgid "Front Right of Center"
+msgstr "Priekinis dešinys centras"
+
+msgctxt "IDS_BACK_CENTER"
+msgid "Back Center"
+msgstr "Galinis centras"
+
+msgctxt "IDS_SIDE_LEFT"
+msgid "Side Left"
+msgstr "Kairė pusė"
+
+msgctxt "IDS_SIDE_RIGHT"
+msgid "Side Right"
+msgstr "Dešinė pusė"
+
+msgctxt "IDS_TOP_CENTER"
+msgid "Top Center"
+msgstr "Viršutinis centras"
+
+msgctxt "IDS_TOP_FRONT_LEFT"
+msgid "Top Front Left"
+msgstr "Viršutinis kairys centras"
+
+msgctxt "IDS_TOP_FRONT_CENTER"
+msgid "Top Front Center"
+msgstr "Viršutinis priekinis centras"
+
+msgctxt "IDS_TOP_FRONT_RIGHT"
+msgid "Top Front Right"
+msgstr "Viršutinis priekinis dešinys"
+
+msgctxt "IDS_TOP_BACK_LEFT"
+msgid "Top Back Left"
+msgstr "Viršutinis kairys galas"
+
+msgctxt "IDS_TOP_BACK_CENTER"
+msgid "Top Back Center"
+msgstr "Viršutinis galo centras"
+
+msgctxt "IDS_TOP_BACK_RIGHT"
+msgid "Top Back Right"
+msgstr "Viršutinis dešinys galas"
+
+msgctxt "IDS_TIME_TOOLTIP_ABOVE"
+msgid "Above seek bar"
+msgstr "Virš slankjuostės"
+
+msgctxt "IDS_TIME_TOOLTIP_BELOW"
+msgid "Below seek bar"
+msgstr "Po slankjuoste"
+
+msgctxt "IDS_VIDEO_STREAM"
+msgid "Video: %s"
+msgstr "Vaizdas: %s"
+
+msgctxt "IDS_APPLY"
+msgid "Apply"
+msgstr "Panaudoti"
+
+msgctxt "IDS_CLEAR"
+msgid "Clear"
+msgstr "Išvalyti"
+
+msgctxt "IDS_CANCEL"
+msgid "Cancel"
+msgstr "Ašaukti"
+
+msgctxt "IDS_THUMB_THUMBNAILS"
+msgid "Layout"
+msgstr "Išdėstymas"
+
+msgctxt "IDS_THUMB_PIXELS"
+msgid "Pixels:"
+msgstr "Taškų:"
+
+msgctxt "IDS_TEXTFILE_ENC"
+msgid "Encoding:"
+msgstr "Koduotė:"
+
+msgctxt "IDS_DISABLE_ALL_FILTERS"
+msgid "&Disable all filters"
+msgstr "Išjunti &visus filtrus"
+
+msgctxt "IDS_ENABLE_AUDIO_FILTERS"
+msgid "Enable all audio decoders"
+msgstr "Įjungti visus garso dekoderius"
+
+msgctxt "IDS_DISABLE_AUDIO_FILTERS"
+msgid "Disable all audio decoders"
+msgstr "Išjungti visus garso dekoderius"
+
+msgctxt "IDS_ENABLE_VIDEO_FILTERS"
+msgid "Enable all video decoders"
+msgstr "Įjungti visus vaizdo dekoderius"
+
+msgctxt "IDS_DISABLE_VIDEO_FILTERS"
+msgid "Disable all video decoders"
+msgstr "Išjungti visus vaizdo dekoderius"
+
+msgctxt "IDS_STRETCH_TO_WINDOW"
+msgid "Stretch To Window"
+msgstr "Išplėsti iki ekrano dydžio"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
+msgid "Touch Window From Inside"
+msgstr "Įrašyti į ekrano dydį"
+
+msgctxt "IDS_ZOOM1"
+msgid "Zoom 1"
+msgstr "Mastelis 1"
+
+msgctxt "IDS_ZOOM2"
+msgid "Zoom 2"
+msgstr "Mastelis 2"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
+msgid "Touch Window From Outside"
+msgstr "Užpildyti ekraną ir apkirpti kadrą"
+
+msgctxt "IDS_AUDIO_STREAM"
+msgid "Audio: %s"
+msgstr "Garsas: %s"
+
+msgctxt "IDS_AG_REOPEN"
+msgid "Reopen File"
+msgstr "Atidaryti failą iš naujo"
+
+msgctxt "IDS_MFMT_AVI"
+msgid "AVI"
+msgstr "AVI"
+
+msgctxt "IDS_MFMT_MPEG"
+msgid "MPEG"
+msgstr "MPEG"
+
+msgctxt "IDS_MFMT_MPEGTS"
+msgid "MPEG-TS"
+msgstr "MPEG-TS"
+
+msgctxt "IDS_MFMT_DVDVIDEO"
+msgid "DVD-Video"
+msgstr "DVD-Video"
+
+msgctxt "IDS_MFMT_MKV"
+msgid "Matroska"
+msgstr "Matroska"
+
+msgctxt "IDS_MFMT_WEBM"
+msgid "WebM"
+msgstr "WebM"
+
+msgctxt "IDS_MFMT_MP4"
+msgid "MP4"
+msgstr "MP4"
+
+msgctxt "IDS_MFMT_MOV"
+msgid "QuickTime Movie"
+msgstr "QuickTime filmas"
+
+msgctxt "IDS_MFMT_3GP"
+msgid "3GP"
+msgstr "3GP"
+
+msgctxt "IDS_MFMT_3G2"
+msgid "3G2"
+msgstr "3G2"
+
+msgctxt "IDS_MFMT_FLV"
+msgid "Flash Video"
+msgstr "Flash Video"
+
+msgctxt "IDS_MFMT_OGM"
+msgid "Ogg Media"
+msgstr "Ogg Media"
+
+msgctxt "IDS_MFMT_RM"
+msgid "Real Media"
+msgstr "Real Media"
+
+msgctxt "IDS_MFMT_RT"
+msgid "Real Script"
+msgstr "Real Script"
+
+msgctxt "IDS_MFMT_WMV"
+msgid "Windows Media Video"
+msgstr "Windows Media Video"
+
+msgctxt "IDS_MFMT_BINK"
+msgid "Smacker/Bink Video"
+msgstr "Smacker/Bink Video"
+
+msgctxt "IDS_MFMT_FLIC"
+msgid "FLIC Animation"
+msgstr "FLIC Animation"
+
+msgctxt "IDS_MFMT_DSM"
+msgid "DirectShow Media"
+msgstr "DirectShow Media"
+
+msgctxt "IDS_MFMT_IVF"
+msgid "Indeo Video Format"
+msgstr "Indeo Video Format"
+
+msgctxt "IDS_MFMT_OTHER"
+msgid "Other"
+msgstr "Kiti"
+
+msgctxt "IDS_MFMT_SWF"
+msgid "Shockwave Flash"
+msgstr "Shockwave Flash"
+
+msgctxt "IDS_MFMT_OTHER_AUDIO"
+msgid "Other Audio"
+msgstr "Kiti Audio"
+
+msgctxt "IDS_MFMT_AC3"
+msgid "AC-3"
+msgstr "AC-3"
+
+msgctxt "IDS_MFMT_AIFF"
+msgid "AIFF"
+msgstr "AIFF"
+
+msgctxt "IDS_MFMT_ALAC"
+msgid "Apple Lossless"
+msgstr "Apple Lossless"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
+msgctxt "IDS_MFMT_AMR"
+msgid "AMR"
+msgstr "AMR"
+
+msgctxt "IDS_MFMT_APE"
+msgid "Monkey's Audio"
+msgstr "Monkey's Audio"
+
+msgctxt "IDS_MFMT_AU"
+msgid "AU/SND"
+msgstr "AU/SND"
+
+msgctxt "IDS_MFMT_CDA"
+msgid "Audio CD track"
+msgstr "Audio CD takelis"
+
+msgctxt "IDS_MFMT_FLAC"
+msgid "FLAC"
+msgstr "FLAC"
+
+msgctxt "IDS_MFMT_M4A"
+msgid "MPEG-4 Audio"
+msgstr "MPEG-4 Audio"
+
+msgctxt "IDS_MFMT_MIDI"
+msgid "MIDI"
+msgstr "MIDI"
+
+msgctxt "IDS_MFMT_MKA"
+msgid "Matroska audio"
+msgstr "Matroska audio"
+
+msgctxt "IDS_MFMT_MP3"
+msgid "MP3"
+msgstr "MP3"
+
+msgctxt "IDS_MFMT_MPA"
+msgid "MPEG audio"
+msgstr "MPEG audio"
+
+msgctxt "IDS_MFMT_MPC"
+msgid "Musepack"
+msgstr "Musepack"
+
+msgctxt "IDS_MFMT_OFR"
+msgid "OptimFROG"
+msgstr "OptimFROG"
+
+msgctxt "IDS_MFMT_OGG"
+msgid "Ogg Vorbis"
+msgstr "Ogg Vorbis"
+
+msgctxt "IDS_MFMT_RA"
+msgid "Real Audio"
+msgstr "Real Audio"
+
+msgctxt "IDS_MFMT_TAK"
+msgid "TAK"
+msgstr "TAK"
+
+msgctxt "IDS_MFMT_TTA"
+msgid "True Audio"
+msgstr "True Audio"
+
+msgctxt "IDS_MFMT_PLS"
+msgid "Playlist"
+msgstr "Grojaraštis"
+
+msgctxt "IDS_MFMT_BDPLS"
+msgid "Blu-ray playlist"
+msgstr "Blu-ray grojaraštis"
+
+msgctxt "IDS_MFMT_RAR"
+msgid "RAR Archive"
+msgstr "RAR Archyvas"
+
+msgctxt "IDS_DVB_CHANNEL_FPS"
+msgid "FPS"
+msgstr "KPS"
+
+msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
+msgid "Resolution"
+msgstr "Skiriamoji geba"
+
+msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Proporcijos"
+
+msgctxt "IDS_OSD_RS_VSYNC_ON"
+msgid "VSync: On"
+msgstr "VSync: Įj."
+
+msgctxt "IDS_OSD_RS_VSYNC_OFF"
+msgid "VSync: Off"
+msgstr "VSync: Išj."
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
+msgid "Accurate VSync: On"
+msgstr "Tikslus VSync: Įj."
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
+msgid "Accurate VSync: Off"
+msgstr "Tikslus VSync: Išj."
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
+msgid "Synchronize Video to Display: On"
+msgstr "Sinchronizuoti vaizdą su displėjumi: Įj."
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
+msgid "Synchronize Video to Display: Off"
+msgstr "Sinchronizuoti vaizdą su displėjumi: Išj."
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
+msgid "Synchronize Display to Video: On"
+msgstr "Sinchronizuoti displėjų su vaizdu: Įj."
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
+msgid "Synchronize Display to Video: Off"
+msgstr "Sinchronizuoti displėjų su vaizdu: Išj."
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
+msgid "Present at Nearest VSync: On"
+msgstr "Teikti su artimiausiu VSync: Įj."
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
+msgid "Present at Nearest VSync: Off"
+msgstr "Teikti su artimiausiu VSync: Išj."
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
+msgid "Color Management: On"
+msgstr "Spalvų valdymas: Įj."
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
+msgid "Color Management: Off"
+msgstr "Spalvų valdymas: Išj."
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
+msgid "Input Type: Auto-Detect"
+msgstr "Įėjimo tipas: Nustatyti automatiškai"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
+msgid "Input Type: HDTV"
+msgstr "Įėjimo tipas: HDTV"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_NTSC"
+msgid "Input Type: SDTV NTSC"
+msgstr "Įėjimo tipas: SDTV NTSC"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
+msgid "Input Type: SDTV PAL"
+msgstr "Įėjimo tipas: SDTV PAL"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
+msgid "Ambient Light: Bright (2.2 Gamma)"
+msgstr "Supanti šviesa: Ryški (2.2 Gama)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
+msgid "Ambient Light: Dim (2.35 Gamma)"
+msgstr "Supanti šviesa: Blanki (2.35 Gama)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
+msgid "Ambient Light: Dark (2.4 Gamma)"
+msgstr "Supanti šviesa: Tamsi (2.4 Gama)"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
+msgid "Rendering Intent: Perceptual"
+msgstr "Vaizdavimo metodas: Suvokimas"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
+msgid "Rendering Intent: Relative Colorimetric"
+msgstr "Vaizdavimo metodas: Santykinis kolorimetrinis"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
+msgid "Rendering Intent: Saturation"
+msgstr "Vaizdavimo metodas: Sodrumas"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
+msgid "Rendering Intent: Absolute Colorimetric"
+msgstr "Vaizdavimo metodas: Absoliutus kolorimetrinis"
+
+msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
+msgid "Output Range: %s"
+msgstr "Išėjimo diapazonas: %s"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
+msgid "Flush GPU before VSync: On"
+msgstr "Užpildyti GPU prieš VSync: Įj."
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
+msgid "Flush GPU before VSync: Off"
+msgstr "Užpildyti GPU prieš VSync: Išj."
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
+msgid "Flush GPU after Present: On"
+msgstr "Užpildyti GPU po teikimo: Įj."
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
+msgid "Flush GPU after Present: Off"
+msgstr "Užpildyti GPU po teikimo: Išj."
+
+msgctxt "IDS_OSD_RS_WAIT_ON"
+msgid "Wait for GPU Flush: On"
+msgstr "Laukti GPU užpildymo: Įj."
+
+msgctxt "IDS_OSD_RS_WAIT_OFF"
+msgid "Wait for GPU Flush: Off"
+msgstr "Laukti GPU užpildymo: Išj."
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
+msgid "D3D Fullscreen: On"
+msgstr "D3D pilnas ekranas: Įjungta"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
+msgid "D3D Fullscreen: Off"
+msgstr "D3D pilnas ekranas: Išjungta"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
+msgid "Disable desktop composition: On"
+msgstr "Darbalaukio efektai: Įj."
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
+msgid "Disable desktop composition: Off"
+msgstr "Darbalaukio efektai: Išj."
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
+msgid "Alternative VSync: On"
+msgstr "Alternatyvi VSync: Įj."
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
+msgid "Alternative VSync: Off"
+msgstr "Alternatyvi VSync: Išj.."
+
+msgctxt "IDS_OSD_RS_RESET_DEFAULT"
+msgid "Renderer settings reset to default"
+msgstr "Renderio nustatymai pagal nutylėjimą"
+
+msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
+msgid "Renderer settings reset to optimal"
+msgstr "Renderio optimalūs nustatymai"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
+msgid "D3D Fullscreen GUI Support: On"
+msgstr "Pilnaekranis D3D su GUI palaikymu: įjungta"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
+msgid "D3D Fullscreen GUI Support: Off"
+msgstr "Pilnaekranis D3D su GUI palaikymu: išjungta"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
+msgid "10-bit RGB Output: On"
+msgstr "10-bitų RGB išėjimas: Įj."
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
+msgid "10-bit RGB Output: Off"
+msgstr "10-bitų RGB išėjimas: Išj."
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
+msgid "Force 10-bit RGB Input: On"
+msgstr "Forsuotas 10-bitų RGB įėjimas: įjungtas"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
+msgid "Force 10-bit RGB Input: Off"
+msgstr "Forsuotas 10-bitų RGB įėjimas: išjungtas"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
+msgid "Full Floating Point Processing: On"
+msgstr "Tikslūs skaičiavimai su slankiuoju kableliu: Įj."
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
+msgid "Full Floating Point Processing: Off"
+msgstr "Tikslūs skaičiavimai su slankiuoju kableliu: Išj."
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
+msgid "Half Floating Point Processing: On"
+msgstr "Greiti skaičiavimai su slankiuoju kableliu: Įj."
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
+msgid "Half Floating Point Processing: Off"
+msgstr "Greiti skaičiavimai su slankiuoju kableliu: Išj."
+
+msgctxt "IDS_BRIGHTNESS_DEC"
+msgid "Brightness decrease"
+msgstr "Patamsinti"
+
+msgctxt "IDS_CONTRAST_INC"
+msgid "Contrast increase"
+msgstr "Padidinti kontrastą"
+
+msgctxt "IDS_CONTRAST_DEC"
+msgid "Contrast decrease"
+msgstr "Sumažinti kontrastą"
+
+msgctxt "IDS_HUE_INC"
+msgid "Hue increase"
+msgstr "Padidinti spalvos toną"
+
+msgctxt "IDS_HUE_DEC"
+msgid "Hue decrease"
+msgstr "Sumažinti spalvos toną"
+
+msgctxt "IDS_SATURATION_INC"
+msgid "Saturation increase"
+msgstr "Padidinti sodrumą"
+
+msgctxt "IDS_SATURATION_DEC"
+msgid "Saturation decrease"
+msgstr "Sumažinti sodrumą"
+
+msgctxt "IDS_RESET_COLOR"
+msgid "Reset color settings"
+msgstr "Atstatyti spalvos nustatymą"
+
+msgctxt "IDS_USING_LATEST_STABLE"
+msgid "\nYou are already using the latest stable version."
+msgstr "\nJūs jau naudojate naujausią stabilią versiją."
+
+msgctxt "IDS_USING_NEWER_VERSION"
+msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
+msgstr "Jūsų dabartinė versija v%s.\n\nNaujausia stabili versija yra v%s."
+
+msgctxt "IDS_NEW_UPDATE_AVAILABLE"
+msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
+msgstr "MPC-HC v%s yra pasiekiama. Jūs naudojate v%s.\n\nAr norite atverti MPC-HC puslapį ir atsisiųsti ją?"
+
+msgctxt "IDS_UPDATE_ERROR"
+msgid "Update server not found.\n\nPlease check your internet connection or try again later."
+msgstr "Naujinimo serveris nerastas.\n\nPrašom patikrinkite savo interneto ryšį arba pamėginkite vėliau."
+
+msgctxt "IDS_UPDATE_CLOSE"
+msgid "&Close"
+msgstr "&Uždaryti"
+
+msgctxt "IDS_OSD_ZOOM"
+msgid "Zoom: %.0lf%%"
+msgstr "Mastelis: %.0lf%%"
+
+msgctxt "IDS_OSD_ZOOM_AUTO"
+msgid "Zoom: Auto"
+msgstr "Mastelis: Automatiškai"
+
+msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
+msgid "Toggle custom channel mapping"
+msgstr "Įj./Išj. vartotojo kanalų skirstymą"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
+msgid "Custom channel mapping: On"
+msgstr "Vartotojo kanalų skirstymas: Įj."
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
+msgid "Custom channel mapping: Off"
+msgstr "Vartotojo kanalų skirstymas: Išj."
+
+msgctxt "IDS_NORMALIZE"
+msgid "Toggle normalization"
+msgstr "Įj./Išj. normalizavimą"
+
+msgctxt "IDS_OSD_NORMALIZE_ON"
+msgid "Normalization: On"
+msgstr "Normalizacija: Įj."
+
+msgctxt "IDS_OSD_NORMALIZE_OFF"
+msgid "Normalization: Off"
+msgstr "Normalizacija: Išj."
+
+msgctxt "IDS_REGAIN_VOLUME"
+msgid "Toggle regain volume"
+msgstr "Įj./Išj. garsumo atstatymą"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
+msgid "Regain volume: On"
+msgstr "Garso atstatymas: Įj."
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
+msgid "Regain volume: Off"
+msgstr "Garso atstatymas: Išj."
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "baitų"
+
+msgctxt "IDS_SIZE_UNIT_K"
+msgid "KB"
+msgstr "KB"
+
+msgctxt "IDS_SIZE_UNIT_M"
+msgid "MB"
+msgstr "MB"
+
+msgctxt "IDS_SIZE_UNIT_G"
+msgid "GB"
+msgstr "GB"
+
+msgctxt "IDS_SPEED_UNIT_K"
+msgid "KB/s"
+msgstr "KB/s"
+
+msgctxt "IDS_SPEED_UNIT_M"
+msgid "MB/s"
+msgstr "MB/s"
+
+msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
+msgid "Could not create the tuner."
+msgstr "Neįmanoma sukurti tiunerio."
+
+msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
+msgid "Could not create the receiver."
+msgstr "Neįmanoma sukurti imtuvo."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
+msgid "Could not connect the network and the tuner."
+msgstr "Neįmanoma prisijungti prie tinklo ir tiunerio."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
+msgid "Could not connect the tuner and the receiver."
+msgstr "Neįmanoma prisijungti prie tiunerio ir imtuvo."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
+msgid "Could not connect the tuner."
+msgstr "Neįmanoma prisijungti prie tiunerio."
+
+msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
+msgid "Could not create the demultiplexer."
+msgstr "Neįmanoma sukurti demultiplekserio."
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
+msgid "Error parsing the entered time!"
+msgstr "Nekorektiškai įrašytas laikas."
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
+msgid "Error parsing the entered text!"
+msgstr "Nekorektiškai įrašytas tekstas."
+
+msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
+msgid "Error parsing the entered frame rate!"
+msgstr "Nekorektiškai įrašytas kadrų per sekundę greitis."
+
+msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Peržiūra po vieną kadrą negalima, pamėginkite kitą vaizdo renderį."
+
+msgctxt "IDS_SCREENSHOT_ERROR_REAL"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
+msgstr "Funkcijos „Išsaugoti paveikslėlį“ ir „Išsaugoti miniatiūras“ neveikia su sisteminiu renderiu, skirtu RealMedia.\nPasirinkite vieną iš DirectX renderių, skirtų RealMedia ir atidarykite failą iš naujo."
+
+msgctxt "IDS_SCREENSHOT_ERROR_QT"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
+msgstr "Funkcijos „Išsaugoti paveikslėlį“ ir „Išsaugoti miniatiūras“ neveikia su sisteminiu renderiu, skirtu QuickTime.\n Pasirinkite vieną iš DirectX renderių, skirtų QuickTime ir atidarykite failą iš naujo."
+
+msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
+msgstr "Funkcijos „Išsaugoti paveikslėlį“ ir „Išsaugoti miniatiūras“ neveikia su Shockwave failais."
+
+msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
+msgstr "Funkcijos „Išsaugoti paveikslėlį“ ir „Išsaugoti miniatiūras“ neveikia su Overlay Mixer vaizdo renderiu.\nPakeiskite vaizdo renderį MPC iššvesties nustatymuose ir atidarykite failą iš naujo."
+
+msgctxt "IDS_MB_SHOW_EDL_EDITOR"
+msgid "Do you want to activate the EDL editor?"
+msgstr "Ar jūs norite aktyvuoti EDL redaktorių?"
+
+msgctxt "IDS_CAPTURE_ERROR"
+msgid "Capture Error"
+msgstr "Įrašymo klaida"
+
+msgctxt "IDS_CAPTURE_ERROR_VIDEO"
+msgid "video"
+msgstr "vaizdas"
+
+msgctxt "IDS_CAPTURE_ERROR_AUDIO"
+msgid "audio"
+msgstr "garsas"
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
+msgid "Can't add the %s buffer filter to the graph."
+msgstr "Negalima pridėti %s bufferio filtrą į grafiką."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
+msgid "Can't connect the %s buffer filter to the graph."
+msgstr "Negalima prijungti %s bufferio filtrą į grafiką."
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
+msgid "Can't add the %s encoder filter to the graph."
+msgstr "Neįmanoma pridėti filtrą-enkoderį %s į grafą."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
+msgid "Can't connect the %s encoder filter to the graph."
+msgstr "Neįmanoma prijungti filtro-enkoderio %s prie grafo."
+
+msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
+msgid "Can't set the compression format on the %s encoder filter."
+msgstr "Nepavyksta nustatyti suglaudinimo formatą filtrui-enkoderiui %s."
+
+msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
+msgid "Can't connect the %s stream to the multiplexer filter."
+msgstr "Neįmanoma prijungti srauto %s filtrui-multiplekseriui."
+
+msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
+msgid "No video capture pin was found."
+msgstr "Nerastas vaizdo įrašymo pinas."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
+msgid "No audio capture pin was found."
+msgstr "Nerastas garso įrašymo pinas."
+
+msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
+msgid "Error initializing the output file."
+msgstr "Klaida inicializuojant išvesties failą."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
+msgid "Error initializing the audio output file."
+msgstr "Klaida inicializuojant garso išvesties failą."
+
+msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
+msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+msgstr "Teisingas laiko formatas yra [-]hh:mm:ss.ms (pvz., 01:23:45.678)."
+
+msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
+msgid "This type is already in the list!"
+msgstr "Šis tipas jau yra sąraše!"
+
+msgctxt "IDS_WEBSERVER_ERROR_TEST"
+msgid "You need to apply the new settings before testing them."
+msgstr "Jūs turite panaudoti naujus nustatymus prieš jiems įsigaliojant"
+
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
+msgid "After Playback: Exit"
+msgstr "Baigus groti: Uždaryti grotuvą"
+
+msgctxt "IDS_AFTERPLAYBACK_STANDBY"
+msgid "After Playback: Stand By"
+msgstr "Baigus groti: Perjungti į laukimo režimą"
+
+msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
+msgid "After Playback: Hibernate"
+msgstr "Baigus groti: Pereiti į miego režimą"
+
+msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
+msgid "After Playback: Shutdown"
+msgstr "Baigus groti: Išjungti kompiuterį"
+
+msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
+msgid "After Playback: Log Off"
+msgstr "Baigus groti: Išsiregistruoti"
+
+msgctxt "IDS_AFTERPLAYBACK_LOCK"
+msgid "After Playback: Lock"
+msgstr "Baigus groti: Užrakinti kompiuterį"
+
+msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
+msgid "After Playback: Turn off the monitor"
+msgstr "Baigus groti: Išjungti monitorių"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Baigus groti: Groti sekantį failą aplanke"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Baigus groti: Nieko nedaryti"
+
+msgctxt "IDS_OSD_BRIGHTNESS"
+msgid "Brightness: %s"
+msgstr "Šviesumas: %s"
+
+msgctxt "IDS_OSD_CONTRAST"
+msgid "Contrast: %s"
+msgstr "Kontrastas: %s"
+
+msgctxt "IDS_OSD_HUE"
+msgid "Hue: %s°"
+msgstr "Atspalvis: %s°"
+
+msgctxt "IDS_OSD_SATURATION"
+msgid "Saturation: %s"
+msgstr "Sodrumas: %s"
+
+msgctxt "IDS_OSD_RESET_COLOR"
+msgid "Color settings restored"
+msgstr "Spalvų nustatymai atstatyti"
+
+msgctxt "IDS_OSD_NO_COLORCONTROL"
+msgid "Color control is not supported"
+msgstr "Spalvų valdymas nepalaikomas"
+
+msgctxt "IDS_BRIGHTNESS_INC"
+msgid "Brightness increase"
+msgstr "Pašviesinti"
+
+msgctxt "IDS_LANG_PREF_EXAMPLE"
+msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
+msgstr "Įveskite savo pageidaujamas kalbas čia.\nPavyzdžiui, įrašykite \"lit rus eng\""
+
+msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
+msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
+msgstr "Išoriniai spliteriai gali turėti savus kalbų nustatymus, todėl MPC-HC elgesys pagal nutylėjimą nepakeis jų pradinio pasirinkimo.\nĮjunkite šią funkciją, jei jūs norite, jog MPC-HC valdytų išorinius spliterius."
+
+msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
+msgid "&Blu-Ray playlists"
+msgstr "&Blu-Ray grojaraštis"
+
+msgctxt "IDS_NAVIGATE_PLAYLIST"
+msgid "&Playlist"
+msgstr "&Grojaraštis"
+
+msgctxt "IDS_NAVIGATE_CHAPTERS"
+msgid "&Chapters"
+msgstr "&Skyriai"
+
+msgctxt "IDS_NAVIGATE_TITLES"
+msgid "&Titles"
+msgstr "&Pavadinimai"
+
+msgctxt "IDS_NAVIGATE_CHANNELS"
+msgid "&Channels"
+msgstr "&Kanalai"
+
+msgctxt "IDC_FASTSEEK_CHECK"
+msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
+msgstr "Jei pasirinktas \"paskutinis raktinis kadras\", tai ieškomas pirmas raktinis kadras prieš paieškos tašką.\n Jei pasirinktas \"artimiausias raktinis kadras\", tai ieškomas raktinis kadras prieš ir po paieškos taško kuris yra arčiausiai."
+
+msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
+msgid "Associate with all formats"
+msgstr "Susieti su visais formatais"
+
+msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
+msgid "Associate with video formats only"
+msgstr "Susieti tik su vaizdo formatais"
+
+msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
+msgid "Associate with audio formats only"
+msgstr "Susieti tik su garso formatais"
+
+msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
+msgid "Clear all associations"
+msgstr "Išvalyti visus susiejimus"
+
+msgctxt "IDS_FILTER_SETTINGS_CAPTION"
+msgid "Settings"
+msgstr "Nustatymai"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Atsisiųsti subtitrus"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Atsiųsti ir atverti"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Atstatyti numatytuosius"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Kelti Aukštyn"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Kelti Žemyn"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Kalbos"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.menus.pot b/src/mpc-hc/mpcresources/PO/mpc-hc.menus.pot
index 5be386a05..532af06b0 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.menus.pot
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.menus.pot
@@ -1,10 +1,10 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -61,28 +61,24 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr ""
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
+msgctxt "POPUP"
+msgid "S&ubtitles"
msgstr ""
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
msgstr ""
-msgctxt "POPUP"
-msgid "Subtitle Data&base"
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
msgstr ""
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
msgstr ""
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr ""
-
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
msgstr ""
msgctxt "ID_FILE_PROPERTIES"
@@ -193,12 +189,16 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr ""
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr ""
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr ""
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
msgstr ""
msgctxt "POPUP"
@@ -401,16 +401,12 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr ""
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr ""
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
+msgid "&Aspect Ratio"
msgstr ""
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
msgstr ""
msgctxt "ID_ASPECTRATIO_4_3"
@@ -433,6 +429,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr ""
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr ""
@@ -526,7 +526,23 @@ msgid "&Stop"
msgstr ""
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
+msgstr ""
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
msgstr ""
msgctxt "ID_PLAY_DECRATE"
@@ -550,15 +566,15 @@ msgid "S&haders"
msgstr ""
msgctxt "ID_AUDIOS"
-msgid "&Audio"
+msgid "&Audio Track"
msgstr ""
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
+msgid "Su&btitle Track"
msgstr ""
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
+msgid "Vide&o Track"
msgstr ""
msgctxt "POPUP"
@@ -581,7 +597,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr ""
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr ""
@@ -605,10 +633,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr ""
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr ""
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr ""
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.dialogs.po
index 9a118b18d..b0f14d654 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.dialogs.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# abuyop <abuyop@gmail.com>, 2014
+# abuyop <abuyop@gmail.com>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-24 20:36+0000\n"
-"Last-Translator: abuyop <abuyop@gmail.com>\n"
-"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/mpc-hc/language/ms_MY/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Malay (Malaysia) (http://www.transifex.com/mpc-hc/mpc-hc/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -109,7 +109,7 @@ msgid "Enable custom channel mapping"
msgstr "Benarkan pemetaan saluran suai"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Konfigurasi pembesar suara untuk"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -117,7 +117,7 @@ msgid "input channels:"
msgstr "saluran input:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Tahan shift untuk perubahan serta-merta bila mengklik sesuatu"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -189,8 +189,8 @@ msgid "About"
msgstr "Perihal"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Hakcipta © 2002-2014 sila rujuk Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Hakcipta © 2002-2017 sila rujuk Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -421,12 +421,16 @@ msgid "time(s)"
msgstr "masa(s)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Mod ulang:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Selepas Main Balik"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Output"
+msgid "Default zoom"
+msgstr "Zum lalai"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -472,10 +476,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Muat-sendiri fail audio"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Guna penerap sarikata terbina-dalam"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Kawalan"
@@ -569,8 +569,8 @@ msgid "Warning"
msgstr "Amaran"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Jika anda batal dan benarkan anti-alias skrin penuh pada tetapan kad video anda, sarikata tidak akan kelihatan lebih baik tetapi ia pasti banyak gunakan cpu anda."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Jika anda batal dan benarkan anti-alias skrin penuh pada tetapan kad video anda, sarikata tidak akan kelihatan lebih baik tetapi ia pasti banyak gunakan CPU anda."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -676,16 +676,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Halang pemain diminimumkan bila berskrin penuh pada monitor bukan-lalai"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Guna fitur Palang Tugas Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Guna fitur palang tugas dipertingkatkan"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Buka fail berikutnya/terdahulu dalam folder \"Langkau undur/maju\" bila hanya ada satu item dalam senarai main"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Guna tip alat masa:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1125,8 +1125,8 @@ msgid "Audio Renderer"
msgstr "Penerap Audio"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Tetapan VMR-7/VMR-9 (tak terap) dan EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Tetapan VMR-9 (tak terap) dan EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1169,8 +1169,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Sarikata *"
+msgid "Subtitles"
+msgstr "Sarikata"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1185,8 +1185,12 @@ msgid "Rotation"
msgstr "Putaran"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Penapis luaran (seperti VSFilter) dapat paparkan sarikata pada semua penerap."
+msgid "Subtitle Renderer"
+msgstr "Penerap Sarikata"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Cache Pelorek terkompil"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1204,6 +1208,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Benarkan capaian dari localhost sahaja"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Benarkan pratonton"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Cetak maklumat nyahpepijat"
@@ -1229,17 +1237,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Pengendali CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Sarikata tersedia diatas talian"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Muat Turun && Buka"
+msgid "Download subtitles"
+msgstr "Muat turun sarikata"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Ganti sarikata dimuat semasa"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Muat Turun"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Segar Semula"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Henti Paksa"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Pilihan"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Muat naik sarikata"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Muat Naik"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Henti Paksa"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Pilihan"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Simpan Sebagai..."
@@ -1277,8 +1313,8 @@ msgid "Enable automatic update check"
msgstr "Benarkan semak kemaskini berautomatik"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Lengah diantara setiap semakan:"
+msgid "Check every:"
+msgstr "Periksa setiap:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1541,16 +1577,28 @@ msgid "Reset"
msgstr "Tetap Semula"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Pangkalan data atas talian"
+msgid "Online search, download and upload subtitles"
+msgstr "Gelintar, muat turun dan muat naik sarikata secara atas-talian"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Gelintar dan muat turun sarikata secara automatik jika tiada ditemui secara dalaman"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Utamakan sarikata untuk cacat pendengaran (bila ditunjuk oleh penyedia sarikata)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Abai fail yang mengandungi mana-mana perkataan berikut(s):"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "URL dasar bagi pangkalan data sarikata atas-talian:"
+msgid "Languages in order of preference:"
+msgstr "Bahasa mengikut tertib keutamaan:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Uji"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Muat naik sarikata aktif secara automatik dipenghujung main balik video"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1652,6 +1700,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Lalai"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Peranti"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Mod ekslusif"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Benarkan penstriman-bit"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Pilihan"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Benarkan suapan-silang stereo (untuk fon kepala)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Pangkas:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Aras:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Nota"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Untuk mengurangkan herotan audio, adalah disarankan volum pemain berada pada 85% ketika memainkan kandungan terenkod-hilang yang kuat."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Kualiti JPEG:"
@@ -1664,3 +1756,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Pelapor kerosakan"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Kami mohon maaf, kelihatan MPC-HC mengalami kerosakan. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Hantar laporan pepijat untuk bantu kami mengdiagnos dan membaiki masalah."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Maklumat pilihan"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Emel:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Alamat emel anda adalah pilihan dan akan hanya digunakan jika pembangun mahu menghubungi anda untuk maklumat lanjut."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Keterangan masalah (guna bahasa Inggeris sahaja):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Mula semula MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Tutup MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.menus.po
index 6ad3d5320..82507ee51 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.menus.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# abuyop <abuyop@gmail.com>, 2014
+# abuyop <abuyop@gmail.com>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-01 10:40+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-03-10 14:39+0000\n"
"Last-Translator: abuyop <abuyop@gmail.com>\n"
-"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/mpc-hc/language/ms_MY/)\n"
+"Language-Team: Malay (Malaysia) (http://www.transifex.com/mpc-hc/mpc-hc/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +64,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Simpan &Lakaran Kenit..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "Sarikata"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
msgstr "&Muat Sarikata..."
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
msgstr "Simpan S&arikata..."
-msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Pa&ngkalan Data Sarikata"
-
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Gelintar..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "Muat &Turun Sarikata..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "M&uat Naik..."
-
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Muat &Turun..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "Muat &Naik Sarikata..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -196,13 +192,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "Ujian &Koyakan"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "Stat Papa&ran"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Papar Statistik"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Papar &Waktu Semasa"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Ma&sa Berbaki"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Tunjuk Nama &Fail"
msgctxt "POPUP"
msgid "&Output Range"
@@ -404,17 +404,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Sentuh Tetingkap Dari &Luar"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Kekal Nisbah Bidang"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Batal Nisbah &Bidang"
+msgid "&Aspect Ratio"
+msgstr "Nisbah &Bidang"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Lalai"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Lalai (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,6 +432,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Anggap &Piksel Petak (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Be&tul Perbezaan AR Desktop/Monitor"
@@ -529,9 +529,25 @@ msgid "&Stop"
msgstr "&Henti"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "Langkah B&ingkai"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Ulang"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Se&lamanya"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Fail"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Senarai Main"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "K&urangkan Kadar"
@@ -553,16 +569,16 @@ msgid "S&haders"
msgstr "Pe&lorek"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio"
+msgid "&Audio Track"
+msgstr "Trek &Audio"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Sa&rikata"
+msgid "Su&btitle Track"
+msgstr "Trek Sa&rikata"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Strim &Video"
+msgid "Vide&o Track"
+msgstr "Trek &Video"
msgctxt "POPUP"
msgid "&Volume"
@@ -584,7 +600,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Se&lepas Main Balik"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "&Jangan buat apa-apa"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Main fail &berikutnya di dalam folder"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Matikan &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Keluar"
@@ -608,10 +636,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Kun&ci"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Matikan &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Navigasi"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.strings.po
index 143b55758..15c44be9a 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ms_MY.strings.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# abuyop <abuyop@gmail.com>, 2014
+# abuyop <abuyop@gmail.com>, 2014-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-01 23:30+0000\n"
-"Last-Translator: abuyop <abuyop@gmail.com>\n"
-"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/mpc-hc/language/ms_MY/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Malay (Malaysia) (http://www.transifex.com/mpc-hc/mpc-hc/language/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -60,10 +60,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Sifat"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Fail"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Ga&ya Lalai"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Senarai Main"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Fail"
@@ -116,6 +124,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Jika sasaran penerapan dibiarkan tidak ditakrif, sarikata SSA/ASS akan diterap relatif dengan bingkai video manakala lain-lain sarikata teks akan diterap relatif dengan tetingkap."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Mod Ulang: Senarai Main"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Mod Ulang: Fail"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Ulang Selamanya: Hidup"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Ulang Selamanya: Mati"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Ulang Selamanya"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Tidak sesekali (pendekatan terpantas)"
@@ -325,12 +353,12 @@ msgid "On/Off"
msgstr "Hidup/Mati"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Dari fps"
+msgid "From (FPS)"
+msgstr "Dari (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Ke fps"
+msgid "To (FPS)"
+msgstr "Ke (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -464,6 +492,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Main Balik::Pelorek"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Sumber"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Pelbagai"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Main Balik::Tangkap"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Main Balik::Tetapan Segera Tetapan"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Main Balik::Skrin Penuh"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Penapis Dalaman::Penerap Audio"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Penukar Audio"
@@ -488,18 +544,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Penerap Pengadun Tindihan"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Penerap Adunan Video 7 (bertetingkap)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Penerap Adunan Video 9 (bertetingkap)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Penerap Adunan Video 7 (tanpa terap)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Penerap Adunan Video 9 (tak diterap)"
@@ -552,34 +600,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Pemain::Antaramuka Sesawang"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Sarikata::Pangkalan Data"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Sumber"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Pelbagai"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "Maklumat Media"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Main Balik::Tangkap"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Main Balik::Tetapan Segera Tetapan"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Main Balik::Skrin Penuh"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Terperinci"
@@ -600,17 +620,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Sentiasa terap dalam tindihan. Umumnya hanya format YUV dibenarkan, tetapi ia dipersembahkan secara langsung tanpa pertukaran warna ke RGB. Ini adalah kaedah penerapan terpantas dan dimana anda pasti mengenai pencerminan video berskrin penuh ke pengaktifan tv-out."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Penerap lalai Windows XP. Sangat stabil dan hanya sedikit lembab berbanding pengadun Tindihan. Menggunakan DirectDraw dan berjalan dalam Tindihan bila ia boleh."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Hanya tersedia jika anda mempunyai DirectX 9 dipasang. Mempunyai keupayaan yang sama seperti VMR-7 (bertetingkap), tetapi ia tidak sesekali guna penerapan Tindihan dan disebabkan ini ia menjadi lebih lembab berbanding VMR-7 (bertetingkap)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Sama seperti VMR-7 (bertetingkap), tetapi dengan pemalam Allocator-Presenter MPC-HC untuk sarikata. Pencerminan video Tindihan TIDAK AKAN berfungsi. Ruang warna desktop \"True Color\" disarankan."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Hanya tersedia jika anda mempunyai DirectX 9 dipasang. Sangat stabil tetapi ia tidak sesekali guna penerapan Tindihan Atas dan disebabkan ini ia menjadi lebih lembab berbanding pengadun Tindihan Atas."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -621,8 +633,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Sama seperti VMR-9 (tak diterap), tetapi gunakan pensaiz-semula dwi-kiub dua laluan yang sebenar."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Sambung ke mana-mana jenis media seakan-video dan akan menghantar sampel masuk ke mana-mana tempat. Guna ia bila anda tidak perlu paparan video dan mahu jimatkan cpu dari penggunaan tidak perlu."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Sambung ke mana-mana jenis media seakan-video dan akan menghantar sampel masuk ke mana-mana tempat. Guna ia bila anda tidak perlu paparan video dan mahu jimatkan CPU dari penggunaan tidak perlu."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -648,10 +660,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Penerap Real sendiri. Skrip SMIL akan berfungsi, tetapi interaksi berkemungkinan tidak berfungsi. Gunakan DirectDraw dan dijalankan dalam Tindihan bila ia boleh."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Output bagi enjin Real diterap oleh Allocator-Presenter berasaskan-DX7 bagi VMR-7 (tak diterap)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Output bagi enjin Real diterap oleh Allocator-Presenter berasaskan-DX9 bagi VMR-9 (tak diterap)."
@@ -660,10 +668,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Penerap QuikTime sendiri. Menjadi lebih perlahan jika kawasan videonya disaiz semula atau sebahagiannya ditutupi oleh tetingkap lain. Bila Tindihan tidak tersedia ia berkemungkinan akan jatuh-balik ke GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Output bagi enjin QuickTime diterap oleh Allocator-Presenter berasaskan-DX7 bagi VMR-7 (tak diterap)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Output bagi enjin QuickTime diterap oleh Allocator-Presenter berasaskan-DX9 bagi VMR-9 (tak diterap)."
@@ -672,22 +676,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Permukaan video akan diperuntuk sebagai permukaan luar-skrin biasa."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "Penerap Audio MPC telah rosak, jangan guna."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Penerap Segerak"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Melaporkan pepijat"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC mengalami kerosakan tetapi binaan ini telah dikompil tanpa maklumat\nnyahpepijat. Jika anda mahu lapor pepijat ini, anda patut cuba dahulu binaan rasmi.\n\nAnda mahu lawati laman muat turun sekarang?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Permukaan biasa luar-skrin biasa"
@@ -740,9 +732,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Nol (tak mampat)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Penerap Audio MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Penerap Audio Dalaman"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -756,9 +748,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Untuk melihat sumber terbenam dalam pelayar anda anda perlu benarkan antaramuka sesawang.\n\nGuna butang \"Simpan Sebagai\" jika anda hanya mahu simpan maklumat."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Muat turun sarikata"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Muat Turun Sarikata..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Muat Naik Sarikata..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -789,7 +785,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Tidak dapat cari semua volum arkib"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Permukaan video akan diperuntuk sebagai tekstur tetapi fungsi 2d masih digunakan untuk menyalin dan meregang ia ke penimbal belakang. Perlukan kad video yang dapat peruntuk 32bit, RGBA, tekstri bersaiz dua-tanpa-kuasa dan sekurang-kurangnya dalam resolusi video."
msgctxt "IDC_TEXTURESURF3D"
@@ -816,6 +812,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Kurangkan pengoyakan dengan melangkaui binaan VSync lalai ke D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Imbas penala"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Sarikata tidak dimuatkan atau penerap tidak disokong."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Simpan pelorek terkompil dalam AppData setempat untuk melajukan masa muat."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Buka VTS_xx_0.ifo untuk muatkan fail VTS_xx_x.vob dalam satu badan"
@@ -888,7 +896,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Senyap"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Suarakan"
@@ -953,11 +961,11 @@ msgid "&Organize Favorites..."
msgstr "&Urus Kegemaran..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Kocok"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Buka lokasi fail"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1041,7 +1049,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Zum Ke Skrin Lebar-Ultra,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Sembunyi bila Skrin Penuh"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1229,7 +1237,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Tambah folder yang dikandungi"
msgctxt "IDS_HW_INDICATOR"
@@ -1334,7 +1342,83 @@ msgstr "Lengahan sarikata akan dikurangkan/ditingkatkan dengan nilai ini setiap
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr "<not defined>"
+msgstr "<tidak ditakrif>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Tonton"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Alih ke Atas"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Alih ke Bawah"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Isih mengikut LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Buang semua"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Anda pasti mahu buang semua saluran dari senarai?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Tiada maklumat tersedia"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Tunggu sebentar, analisis dalam proses..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Benarkan mengelog ke fail (perlu mulakan semula)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Masa berbaki"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Kejituan tinggi"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Selepas Main Balik: Mandri fail semasa"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Selepas Main Balik: Tutup"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC menghadapi masalah ketika pengawalan. Dengan bantuan anda kami dapat membaiki masalah tersebut.\n\nAnda mahu laporkannya?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Masukkan nilai positif jika audio terlalu awal, nilai negatif jika ia lewat."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Pratonton buat masa ini dilumpuhkan. Anda boleh benarkannya dalam pilihan MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Pilihan ini boleh digunakan untuk membuat pratonton pada fail media dari lokasi jauh. Guna ia hanya pada rangkaian persendirian yang selamat.\n\nAnda mahu benarkan pilihan ini?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Penerap Sarikata Dalaman"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1356,13 +1440,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Imej berjaya disimpan"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Muat Sarikata"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Muat Sarikata..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Simpan Sarikata"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Simpan Sarikata..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1385,11 +1469,11 @@ msgid "Stop"
msgstr "Henti"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Langkah Bingkai"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Langkah bingkai undur"
msgctxt "IDS_AG_GO_TO"
@@ -1489,8 +1573,8 @@ msgid "Thumbnails saved successfully"
msgstr "Lakaran kenit berjaya disimpan"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Strim &Video"
+msgid "Vide&o Track"
+msgstr "Trek &Video"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1537,11 +1621,11 @@ msgid "Reset Rate"
msgstr "Tetap Semula Kadar"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Lengah Audio +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Lengah Audio -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1612,14 +1696,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Anjak Sarikata ke Kanan"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Papar Stat"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Lompat ke Permulaan"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Tunjuk Nama Fail"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Main DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Main BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Papar Statistik Penerap"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Tetap Semula Statistik Penerap"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Sarikata::Pelbagai"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Sembunyi s&empadan"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Bingkai Sahaja"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "T&unjuk Menu&&Kapsyen"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Sembunyi &Menu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Lanjutan"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Paparan Minimum"
@@ -1685,8 +1809,8 @@ msgid "PnS Dec Height"
msgstr "Tinggi PnS Turun"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Memuat turun sarikata(s), tunggu sebentar."
+msgid "Downloading [%s] \"%s\""
+msgstr "Memuat turun [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1697,7 +1821,7 @@ msgid "No subtitles found."
msgstr "Tiada sarikata ditemui."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "%d sarikata(s) tersedia."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
@@ -1853,12 +1977,12 @@ msgid "Boss key"
msgstr "Kekunci Boss"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Menu Pemain (pendek)"
+msgid "Player Menu"
+msgstr "Menu Pemain"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Menu Pemain (panjang)"
+msgid "Player Menu (full)"
+msgstr "Menu Pemain (penuh)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1869,20 +1993,20 @@ msgid "Options"
msgstr "Pilihan"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Audio Berikutnya"
+msgid "Next Audio Track"
+msgstr "Trek Audio Berikutnya"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Audio Terdahulu"
+msgid "Prev Audio Track"
+msgstr "Trek Audio Terdahulu"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Sarikata Berikutnya"
+msgid "Next Subtitle Track"
+msgstr "Trek Sarikata Berikutnya"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Sarikata Terdahulu"
+msgid "Prev Subtitle Track"
+msgstr "Trek Sarikata Terdahulu"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1892,22 +2016,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Muat Semula Sarikata"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Audio Berikutnya (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Audio Terdahulu (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Sarikata Berikutnya (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Sarikata Terdahulu (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Sudut Berikutnya (DVD)"
@@ -1917,28 +2025,28 @@ msgid "Prev Angle (DVD)"
msgstr "Sudut Terdahulu (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Audio Berikutnya (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Trek Audio Berikutnya (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Audio Terdahulu (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Trek Audio Terdahulu (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Sarikata Berikutnya (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Trek Sarikata Berikutnya (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Sarikata Terdahulu (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Trek Sarikata Terdahulu (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Sarikata Hidup/Mati (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Masa Berbaki"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Papar Waktu Semasa"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1964,11 +2072,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Disulitkan"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Ya"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Tidak"
@@ -2025,11 +2133,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volum: %02lu/%02lu, Tajuk: %02lu/%02lu, Bab: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Sudut: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %uHz %dbit %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2120,14 +2228,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Lebar imej"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL kelihatan ok!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Versi protokol tidak sepadan, sila tatar pemain anda atau pilih alamat yang lain!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Nisbah Bidang"
@@ -2137,19 +2237,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Jumlah: %ld, Dilepas: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Saiz: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Saiz: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Bebas: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Bebas: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2174,7 +2274,7 @@ msgstr "Pilih laluan untuk DVD/BD:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr "berjaya dimuatkan"
+msgstr " berjaya dimuatkan"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2221,8 +2321,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Lakaran kenit terlalu kecil, mustahil dapat hasilkan fail.\n\nCuba kurangkan bilangan lakaran kenit atau tingkatkan jumlah saiz."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Untuk muatkan sarikata anda perlu menukar jenis penerap dan buka semula fail.\n- DirectShow: VMR-7/VMR-9 (tak diterap), EVR (CP), Sync, madVR atau Haali\n- RealMedia: Penerap khas untukRealMedia, atau buka ia menerusi DirectShow\n- QuickTime: Penerap DX7 atau DX9 untuk QuickTime\n- ShockWave: t/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Untuk memuatkan sarikata anda perlu jenis ubah penerap dan buka semula fail.\n- DirectShow: VMR-9 (tak terap), EVR (CP), Segerak, madVR atau Haali\n- RealMedia: Penerap khas untukr RealMedia, atau buka ia melalui DirectShow\n- QuickTime: Penerap DX7 atau DX9 untuk QuickTime\n- ShockWave: t/s"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2233,11 +2333,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Nisbah BidangL %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Nisbah Bidang: Lalai"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Nisbah Bidang: Lalai (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Lengah Audio: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2249,8 +2349,8 @@ msgid "Out of memory"
msgstr "Kehabisan ingatan"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Ralat: Pemain Flash untuk IE diperlukan"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Ralat: Pemain Flash untuk Internet Explorer diperlukan"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2272,10 +2372,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Gagal menerap fail"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL teruk, tidak dapat cari pangkalan data sarikata di sini!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Bab:"
@@ -2296,14 +2392,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Semasa"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC ditamatkan tanpa jangka. Untuk membantu kami mengatasi masalah ini, sila hantar fail \"%s\" ini ke penjejak pepijat kami.\n\nAnda mahu buka folder yang mengandungi fail longgok mini dan lawati penjejak pepeijat sekarang?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Gagal cipta fail longgok ke \"%s\" (ralat %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Pilih Direktori"
@@ -2321,7 +2409,7 @@ msgid "Toggle Caption&Menu"
msgstr "Togol Menu&Kapsyen"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Togol Penjangkau"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2406,7 +2494,7 @@ msgstr "Si&fat..."
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr "(cemat) sifat..."
+msgstr " (cemat) sifat..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2422,11 +2510,11 @@ msgstr "VSync"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr "(Ulasan Pengarah 1)"
+msgstr " (Ulasan Pengarah 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr "(Ulasan Pengarah 2)"
+msgstr " (Ulasan Pengarah 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
@@ -2477,8 +2565,8 @@ msgid "Volume boost Max"
msgstr "Galak volum Maks"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Penggunaan: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tFail atau direktori utama akan dimuatkan (kad liar\n\t\tdibenarkan, \"-\" melibatkan input piawai)\n/dub \"dubname\"\tMuat satu fail audio tambahan\n/dubdelay \"file\"\tMuat fail audio tambahan yang dianjak denga XXms (jika\n\t\tfail mengandungi \"...DELAY XXms...\")\n/d3dfs\t\tMula menerap dalam mod skrin penuh D3D\n/sub \"subname\"\tMuat fail sarikata tambahan\n/filter \"filtername\"\tMuat penapis DirectShow dari pustaka pautan dinamik\n\t\t(kad liar dibenarkan)\n/dvd\t\tJalan dalam mod dvd, \"pathname\" bermaksud folder dvd\n\t\t(pilihan)\n/dvdpos T#C\tMula main balik pada tajuk T, bab C\n/dvdpos T#hh:mm\tMula main balik pada tajuk T, kedudukan hh:mm:ss\n/cd\t\tMuat semua trek cd audio atau (s)vcd,\n\t\t\"pathname\" bermaksud laluan pemacu (pilihan)\n/device\t\tBuka peranti video lalai\n/open\t\tBuka fail, jangan mula main balik secara automatik\n/play\t\tMula memainkan fail sebaik sahaja pemain\n\t\tdilancarkan\n/close\t\tTutup pemain selepas main balik (hanya berfungsi\n\t\tbila digunakan dengan /play)\n/shutdown\tMatikan sistem pengoperasian selepas main balik\n/fullscreen\tMula dalam mod skrin-penuh\n/minimized\tMula dalam mod diminimumkan\n/new\t\tGuna kejadian baharu pemain\n/add\t\tTambah \"pathname\" ke senarai main, boleh digabung\n\t\tdengan /open dan /play\n/regvid\t\tCipta perkaitan fail untuk fail video\n/regaud\t\tCipta perkaitan fail untuk fail audio\n/regpl\t\tCipta perkaitan fail untuk fail senarai main\n/regall\t\tCipta perkaitan fail untuk semua jenis fail disokong\n/unregall\t\tBuang semua perkaitan fail\n/start ms\t\tMula bermain pada \"ms\" (= milisaat)\n/startpos hh:mm:ss\tMula bermain pada kedudukan hh:mm:ss\n/fixedsize w,h\tTetakan saiz tetingkap tetap\n/monitor N\tMula pemain pada monitor N, dimana N bermula dari 1\n/audiorenderer N\tMula menggunakan penerap audio N, dimana N bermula dari 1\n\t\t(rujuk tetapan \"Output\")\n/shaderpreset \"Pr\"\tMula menggunakan praset pelorek \"Pr\"\n/reset\t\tPulih tetapan lalai\n/help /h /?\tTunjuk bantuan mengenai suis baris perintah\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Penggunaan: mpc-hc.exe \"pathname\" [switches]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2564,14 +2652,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "B&enarkan semua penapis"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Imbas penala"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Sarikata tidak dimuatkan atau penerap tidak disokong."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Pengarang tidak diketahui. Hubungi kami jika anda cipta logo ini!"
@@ -2660,40 +2740,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Kanan Belakang Atas"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Tetap Semula Stat Paparan"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Sarikata::Pelbagai"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Sembunyi s&empadan"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Bingkai Sahaja"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "T&unjuk Menu&&Kapsyen"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Sembunyi &Menu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Lanjutan"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Atas palang jangkau"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Bawah palang jangkau"
msgctxt "IDS_VIDEO_STREAM"
@@ -2861,8 +2913,8 @@ msgid "Other Audio"
msgstr "Audio Lain"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2872,6 +2924,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Tak Hilang Apple"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Audio Media Windows"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Kodeks Audio Opus"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2936,22 +3008,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "Audio True"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Audio Media Windows"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Kodeks Audio Opus"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Senarai Main"
@@ -2976,18 +3032,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Nisbah Bidang"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Guna WASAPI (mula semula main balik)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Senyap bila dimaju pantas"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Peranti Bunyi:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: Hidup"
@@ -3276,6 +3320,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Volum gandaan-semula: Mati"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bait"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3333,7 +3381,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Ralat menghurai kadar bingkai dimasuki!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Tidak dapat langkah bingkai, cuba penerap video yang lain."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3352,10 +3400,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "Fungsi \"Simpan Imej\" dan \"Simpan Lakaran Kenit\" tidak berfungsi dengan penerap video Pengadun Tindihan.\nUbah penerap video di dalam pilihan output MPC-HC dan buka semula fail tersebut."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Tidak dapat sambungkan pangkalan data sarikata atas-talian."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Anda mahu aktifkan penyunting EDL?"
@@ -3424,7 +3468,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Anda perlu laksanakan tetapan baharu sebelum mengunjinya."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Selepas Main Balik: Keluar"
@@ -3452,6 +3496,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Selepas Main Balik: Matikan monitor"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Selepas Main Balik: Main fail berikutnya di dalam folder"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Selepas Main Balik: Jangan buat apa-apa "
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Kecerahan: %s"
@@ -3532,3 +3584,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Tetapan"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "PenapisAss"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Penyedia"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Cacat Pendengaran"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Muat Turun..."
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Skor"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Gelintar sarikata atas-talian gagal."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Gelintar sarikata atas-talian dihenti paksa."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Gelintar sarikata atas-talian selesai, %d sarikata ditemui."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Gelintar sarikata atas-talian selesai, tiada sarikata ditemui."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Muat turun sarikata"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Menggelintar sarikata atas talian, tunggu sebentar..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Gelintar sarikata atas-talian dihenti paksa..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Nama Pengguna"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Status"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Sedia..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Tidak dilaksanakan."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Memuat naik..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Berjaya memuat naik sarikata."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Gagal memuat naik sarikata."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Muat naik sarikata dihenti paksa."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Sarikata sudah wujud."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Memuat naik sarikata, tunggu sebentar"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Muat naik selesai."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Muat naik dihenti paksa."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Muat naik gagal."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Muat Turun && Buka"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Persediaan"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Tetap Semula"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Alih ke Atas"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Alih ke Bawah"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Buka Url"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Bahasa"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "RALAT: Sambungan Internet tidak dapat dijalinkan."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Masukkan kelayakan laman sesawang"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Masukkan kelayakan anda untuk sambungkan:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Nisbah Bidang:Anggap piksel petak (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Dimuat naik [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Muat naik sarikata"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Anda pasti mahu memuat naik fail sarikata \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Mendapatkan bahasa yang disokong..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Gagal mendaftar masuk \"%S\" dengan nama pengguna \"%S\".\n\nSila masukkan nama pengguna dan kata laluan yang betul atau tetap semula kelayakan mendaftar masuk sebagai pengguna awanama."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Gelintar dan muat turun secara automatik akan dilumpuhkan untuk semua fail media yang mana laluan bagi mana-mana pola yang dimasukkan di sini.\nSebagai contoh, taip: \"private dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pathname\"\tFail atau direktori utama yang dimuatkan\n\t\t(kad liar dibenarkan, \"-\" menunjukkan input piawai)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"\tMuat fail audio tambahan"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"file\"\tMuat faul audio tambahan dianjak dengan XXms\n\t\t(jiks fail mengandungi \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tMula menerap dalam mod skrin penuh D3D"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"\tMuat fail sarikata tambahan"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtername\"\tMuat penapis DirectShow dari pustaka pautan dinamik (kad liar dibenarkan)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tJalankan dalam mod DVD, \"pathname\" bermaksud folder DVD (pilihan)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tMula main balik pada tajuk T, bab C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tMula main balik pada tajuk T, kedudukan P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tMuat semua trek cd audio atau (S)VCD,\n\t\t\"pathname\" bermaksud laluan pemacu (pilihan)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tBuka peranti video lalai"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tBuka fail, jangan mulakan main balik secara automatik"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tMula memainkan fail sebaik sahaja pemain dilancarkan"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tTutup pemain selepas main balik (hanya berfungsi bila digunakan dengan /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tMatikan sistem pengoperasian selepas main balik"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tBiarkan sistem pengoperasian dalam mod bersedia selepas main balik"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tHibernasi sistem pengoperasian selepas main balik"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tDaftar keluar selepas main balik"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tKunci stesen kerja selepas main balik"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tMatikan monitor selepas main balik"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tBuka fail berikutnya dalam folder selepas main balik"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tMula dalam mod skrin-penuh"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tMula dalam mod diminimumkan"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tGuna satu kejadian baharu pemain"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tTambah \"pathname\" ke senarai main, boleh digandingkan dengan /open dan /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tRawakkan senarai main"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tCipta perkaitan fail untuk fail video"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tCipta perkaitan fail untuk fail audio"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tCipta perkaitan fail untuk fail senarai main"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tCipta perkaitan fail untuk semua jenis fail disokong"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tBuang semua perkaitan fail"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tMula main pada \"ms\" (= milisaat)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tMula dimainkan pada kedudukan hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tTetapkan saiz tetingkap tetap"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tMulakan pemian pada monitor N, yang mana N bermula dari 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tMula menggunakan audiorenderer N, yang mana N bermula dari 1 (sila rujuk tetapan \"Output\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tMula menggunakan praset pelorek \"Pr\""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\tNyatakan nama praset Lata&Imbas yang digunakan"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tKait semula ikon format"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tBuka MPC-HC disebalik tabir"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tMula antaramuka sesawang pada port dinyatakan"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tTunjuk maklumat nyapepijat dalam OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tLumpuhkan pelapor kerosakan"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tGuna MPC-HC sebagai hamba"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tTetapkan indeks yang mana GPU gunakan untuk penyahkodan perkakasan.\n\t\tHanya tersedia untuk CUVID dan DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tPulih tetapan lalai"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tTunjuk bantuan berkenaan suis baris perintah"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Nilai ambang untuk skor sarikata yang akan dimuat turun secara automatik.Lebih tinggi nilai bermaksud lebih tepat sarikata yang sepadan dimuatkan, manakala nilai lebih rendah akan menyebabkan sarikata yang salah dimuatkan, tiada nilai yang sempurna. Oleh itu pilih yang terbaik untuk anda."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Lengah Audio (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Saiz dalam piksel bagi palang alat lalai."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Guna palang alat legasi berbanding jenis baharu bervektor."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.nl.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.nl.dialogs.po
index 1724bc02b..ad6e6fbed 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.nl.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.nl.dialogs.po
@@ -1,17 +1,21 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# B512, 2015
+# reneweesp <bmom43@hotmail.com>, 2016
# Dennis Gerritsen <frostflame@hotmail.com>, 2014
-# Devrim Yolo <devrim.extra@gmail.com>, 2013-2014
+# Devrim, 2013-2015
+# DennisW, 2014
+# mark van tilburg <markvantilburg@gmail.com>, 2016
# rjongejan <ruben.jongejan@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Dutch (http://www.transifex.com/projects/p/mpc-hc/language/nl/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-11-12 00:53+0000\n"
+"Last-Translator: reneweesp <bmom43@hotmail.com>\n"
+"Language-Team: Dutch (http://www.transifex.com/mpc-hc/mpc-hc/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -20,7 +24,7 @@ msgstr ""
msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
msgid "Select Media Type"
-msgstr "Media-type kiezen"
+msgstr "Media type kiezen"
msgctxt "IDD_SELECTMEDIATYPE_IDOK"
msgid "OK"
@@ -64,7 +68,7 @@ msgstr "Voorvertoning"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "V/A Buffers:"
-msgstr "V/A Buffers:"
+msgstr "V/A buffers:"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
msgid "Audio to wav"
@@ -76,7 +80,7 @@ msgstr "Opname"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
msgid "Enable built-in audio switcher filter (requires restart)"
-msgstr "Intern Audio-switcherfilter toepassen (vereist herstart)"
+msgstr "Intern audio switcher filter toepassen (vereist herstart)"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
msgid "Normalize"
@@ -96,31 +100,31 @@ msgstr "Herstel volume"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
msgid "Boost:"
-msgstr "Geluidsversterking"
+msgstr "Audio versterking"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
msgid "Down-sample to 44100 Hz"
-msgstr "Resample naar 44100 Hz"
+msgstr "Omzetten naar 44100 Hz"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
-msgstr "Audio tijdsverschuiving (ms):"
+msgstr "Audio tijd verschuiving (ms):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
-msgstr "Door gebruiker bepaalde kanaal-setup toepassen"
+msgstr "Door gebruiker bepaalde kanaal instelling toepassen"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Luidspreker-configuratie voor "
+msgid "Speaker configuration for"
+msgstr "Luidspreker instelling voor"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
-msgstr "ingangskanalen:"
+msgstr "ingang kanalen:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Druk op shift tijdens het klikken om de veranderingen direkt door te voeren "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Druk op shift tijdens het klikken om direct de veranderingen uit te voeren"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -128,7 +132,7 @@ msgstr "Ga naar..."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
-msgstr "Voer een tijdcode in, met een opmaak van [uu:]mm:ss.ms, om naar dat tijdstip te springen. De scheidingstekens hoeven niet expliciet ingevoerd te worden."
+msgstr "Voer een tijdcode in, met een opmaak van [uu:]mm:ss.ms, om naar dat tijdstip te springen. De scheiding tekens hoeven niet expliciet ingevoerd te worden."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Time"
@@ -136,11 +140,11 @@ msgstr "Tijd"
msgctxt "IDD_GOTO_DLG_IDC_OK1"
msgid "Go!"
-msgstr "OK"
+msgstr "Oké"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
-msgstr "Geef twee getallen om naar een specifiek frame te springen, het eerste getal is het framenummer, het tweede de framesnelheid."
+msgstr "Geef twee getallen om naar een specifiek beeld te springen, het eerste getal is het beeldnummer, het tweede de beedsnelheid."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Frame"
@@ -148,7 +152,7 @@ msgstr "Beeld"
msgctxt "IDD_GOTO_DLG_IDC_OK2"
msgid "Go!"
-msgstr "OK"
+msgstr "Oké"
msgctxt "IDD_OPEN_DLG_CAPTION"
msgid "Open"
@@ -156,7 +160,7 @@ msgstr "Openen"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Typ het adres van een film- of geluidsbestand (op het Internet of op uw computer), zodat de speler dit voor u kan openen."
+msgstr "Typ het adres van een film of geluidsbestand (op Internet of op je computer), zodat de speler dit voor je kan openen."
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
@@ -184,15 +188,15 @@ msgstr "Annuleren"
msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
msgid "Add to playlist without opening"
-msgstr "Toevoegen aan afspeellijst zonder te openen"
+msgstr "Voe toe aan afspeellijst zonder te openen"
msgctxt "IDD_ABOUTBOX_CAPTION"
msgid "About"
msgstr "Info"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 zie Authors.txt bestand"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 zie Authors.txt bestand"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -200,11 +204,11 @@ msgstr "Dit programma is gratis en uitgegeven onder de GNU General Public Licens
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Vertaald door Computer Paul"
+msgstr "Vertaald door René Maassen"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
-msgstr "Build informatie"
+msgstr "Bouw versie informatie"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Version:"
@@ -220,7 +224,7 @@ msgstr "Niet gebruikt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build date:"
-msgstr "Datum van build:"
+msgstr "Datum van bouw versie:"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Operating system"
@@ -236,7 +240,7 @@ msgstr "Kopieer naar klembord"
msgctxt "IDD_ABOUTBOX_IDOK"
msgid "OK"
-msgstr "&OK"
+msgstr "OK"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Open options"
@@ -328,7 +332,7 @@ msgstr "Bestandspositie bewaren"
msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
msgid "Remember DVD position"
-msgstr "DVD-positie bewaren"
+msgstr "DVD positie bewaren"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
msgid "Remember last window position"
@@ -344,7 +348,7 @@ msgstr "Onthoud de laatste Pan en Scan Zoom"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
-msgstr "\"Open DVD/BD\" gedrag"
+msgstr "\"Open DVD / BD\" gedrag"
msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
msgid "Prompt for location"
@@ -356,7 +360,7 @@ msgstr "Open altijd de standaard locatie:"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Preferred language for DVD Navigator and the external OGM Splitter"
-msgstr "Voorkeurstaal voor DVD Navigatie en de externe OGM Splitter"
+msgstr "Voorkeurstaal voor DVD navigatie en de externe OGM Splitter"
msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
msgid "Menu"
@@ -376,7 +380,7 @@ msgstr "Aanvullende instellingen"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
-msgstr "Sta ondertiteling voor doven en slechthorenden toe in \"Line 21 Decoder\""
+msgstr "Sta ondertiteling voor doven en slechthorenden toe in \"Line 21 decoder\""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
@@ -423,16 +427,20 @@ msgid "time(s)"
msgstr "keer"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Herhaal mode:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Na weergave"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Video"
+msgid "Default zoom"
+msgstr "Standaard zoom"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
-msgstr "Auto-zoom:"
+msgstr "Auto zoom:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
@@ -448,7 +456,7 @@ msgstr "Standaard nummer voorkeur"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
-msgstr "Ondertitelings:"
+msgstr "Ondertitelingen:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio:"
@@ -464,19 +472,15 @@ msgstr "Opties voor openen"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
msgid "Use worker thread to construct the filter graph"
-msgstr "Filter graph in aparte CPU-thread samenstellen"
+msgstr "Filter grafiek in aparte CPU taak samenstellen"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
-msgstr "Rapporteer pins die niet renderen"
+msgstr "Rapporteer pin(nen) die niet opbouwen"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
-msgstr "Geluidsbestanden autom. laden"
-
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Gebruik de ingebouwde ondertiteling renderer"
+msgstr "Geluidsbestanden automatisch laden"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
@@ -516,7 +520,7 @@ msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr ""
+msgstr "Vertragings stap"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -540,7 +544,7 @@ msgstr "Animeer de ondertiteling nooit"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
msgid "Render at"
-msgstr "Render op"
+msgstr "Opbouwen op"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
msgid "% of the animation"
@@ -552,7 +556,7 @@ msgstr "Animeer op"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
msgid "% of the video frame rate"
-msgstr "% van de videoframerate"
+msgstr "% van de videobeeld verhouding"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
@@ -560,7 +564,7 @@ msgstr "Sta het laten vallen van beeldblokken toe wanneer de wachtrij achterloop
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
-msgstr "Render Layout"
+msgstr "Opbouw sjabloon"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
msgid "Apply aspect ratio compensation for anamorphic videos"
@@ -571,8 +575,8 @@ msgid "Warning"
msgstr "Waaschuwing"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Als u de ondertitelingspositie aanpast en ergens in de instellingen van uw grafische kaart full-screen antialiasing aanzet, zal de ondertiteling er niet beter uitzien, maar de CPU wordt wel zwaar belast."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Als u de ondertitelingspositie aanpast en ergens in de instellingen van uw grafische kaart \"vol scherm\" antialiasing aanzet, zal de ondertiteling er niet beter uitzien, maar de CPU wordt wel zwaarder belast."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -592,19 +596,19 @@ msgstr "Koppeling"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr ""
+msgstr "Gebruik de formaat-specifieke iconen"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr ""
+msgstr "Start als administrateur"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "Gebruik als standaard programma"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
-msgstr "Real-Time Streaming Protocol afhandeling (voor rtsp://... URLs)"
+msgstr "Werkelijke tijd stroom protocol afhandeling (voor rtsp://... URLs)"
msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
msgid "RealMedia"
@@ -624,7 +628,7 @@ msgstr "Kijk eerst naar extensie"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Explorer Context Menu"
-msgstr "Verkenner Snelmenu"
+msgstr "Verkenner snelmenu"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK6"
msgid "Directory"
@@ -664,7 +668,7 @@ msgstr "Standaard"
msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
msgid "Fast seek (on keyframe)"
-msgstr "Snel zoeken (op keyframe)"
+msgstr "Snel zoeken (op sleutelbeeld)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
msgid "Show chapter marks in seek bar"
@@ -672,23 +676,23 @@ msgstr "Geef hoofdstukmarkeringen in zoekbalk weer"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
-msgstr "Laat \"Nu Afpselen\" informatie zien in Skype's stemmingsbericht"
+msgstr "Laat \"Nu afspelen\" informatie zien in Skype's stemmingsbericht"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Verhinder minimalizeren bij volledig scherm op niet-standaard monitor"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Gebruik mogelijkheden van Windows 7 Taakbalk "
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Gebruik uitgebreide taakbalk mogelijkheden"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Open het volgende/vorige bestand in de bestandsmap op \"Volgende/Vorige\" wanneer er maar een bestand in de afspeellijst staat"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Open het volgende / vorige bestand in de bestandsmap op \"Volgende / Vorige\" wanneer er maar een bestand in de afspeellijst staat"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "Gebruik tijd tooltip:"
+msgid "Show time tooltip:"
+msgstr "Gebruik tijd gereedschap tip:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
@@ -696,7 +700,7 @@ msgstr "OSD lettertype:"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
msgid "Enable Logitech LCD support (experimental)"
-msgstr "Logitech LCD support inschakelen (experimenteel)"
+msgstr "Logitech LCD ondersteuning inschakelen (experimenteel)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
@@ -732,11 +736,11 @@ msgstr "Omlaag"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
msgid "Add Media Type..."
-msgstr "Media Type toevoegen"
+msgstr "Media type toevoegen"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
msgid "Add Sub Type..."
-msgstr "Sub Type toevoegen"
+msgstr "Sub type toevoegen"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
msgid "Delete"
@@ -744,11 +748,11 @@ msgstr "Verwijderen"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
msgid "Reset List"
-msgstr "Reset"
+msgstr "Herstel lijst"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Type:"
-msgstr "Mediatype:"
+msgstr "Type:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Size:"
@@ -760,7 +764,7 @@ msgstr "Tijdsduur:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Video size:"
-msgstr "Videogrootte:"
+msgstr "Video grootte:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Created:"
@@ -776,7 +780,7 @@ msgstr "Auteur:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Copyright:"
-msgstr "Copyright:"
+msgstr "Auteursrechten:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Rating:"
@@ -792,11 +796,11 @@ msgstr "Beschrijving:"
msgctxt "IDD_FAVADD_CAPTION"
msgid "Add Favorite"
-msgstr "Aan Favorieten toevoegen"
+msgstr "Aan favorieten toevoegen"
msgctxt "IDD_FAVADD_IDC_STATIC"
msgid "Choose a name for your shortcut:"
-msgstr "Naam:"
+msgstr "Kies naam voor je snelkoppeling:"
msgctxt "IDD_FAVADD_IDC_CHECK1"
msgid "Remember position"
@@ -840,7 +844,7 @@ msgstr "&OK"
msgctxt "IDD_PNSPRESET_DLG_CAPTION"
msgid "Pan&Scan Presets"
-msgstr "Pan&Scan Profielen"
+msgstr "Pan&Scan profielen"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
msgid "New"
@@ -880,7 +884,7 @@ msgstr "Zoom: 0.2 -> 3.0"
msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
msgid "Global Media Keys"
-msgstr "Globale Media Toetsen"
+msgstr "Globale media toetsen"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
msgid "Select All"
@@ -896,11 +900,11 @@ msgstr "Waarschuwing"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
-msgstr "MPC-HC kon sommige pins in de graph niet renderen. Misschien zijn de nodige codecs of filters niet op het systeem geïnstalleerd."
+msgstr "MPC-HC kon sommige pinnen in de grafiek niet opbouwen. Misschien zijn de nodige codecs of filters niet op het systeem geïnstalleerd."
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
msgid "The following pin(s) failed to find a connectable filter:"
-msgstr "Voor de volgende pins(s) is/zijn geen filter gevonden:"
+msgstr "Voor de volgende pin(nen) is geen filter gevonden:"
msgctxt "IDD_MEDIATYPES_DLG_IDOK"
msgid "Close"
@@ -960,7 +964,7 @@ msgstr "pixels"
msgctxt "IDD_ADDREGFILTER_CAPTION"
msgid "Select Filter"
-msgstr "Selecteer Filter"
+msgstr "Selecteer filter"
msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
msgid "Browse..."
@@ -1068,7 +1072,7 @@ msgstr "Omlijning"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
msgid "Link alpha channels"
-msgstr "Alpha channels verbinden"
+msgstr "Alpha kanalen verbinden"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
@@ -1076,15 +1080,15 @@ msgstr "Als u een standalone-versie of een ander alternatief van een van deze fi
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Source Filters"
-msgstr "Bron Filters"
+msgstr "Bron filters"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Transform Filters"
-msgstr "Transformatie Filters"
+msgstr "Transformatie filters"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Internal LAV Filters settings"
-msgstr "Interne LAV Filters instellingen"
+msgstr "Interne LAV filters instellingen"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
msgid "Splitter"
@@ -1112,7 +1116,7 @@ msgstr "Bladeren..."
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DirectShow Video"
-msgstr "DirectShow Video"
+msgstr "DirectShow video"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "RealMedia Video"
@@ -1127,8 +1131,8 @@ msgid "Audio Renderer"
msgstr "Audio Renderer"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (renderless) en EVR (CP) instellingen"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (opbouwloos) en EVR (CP) instellingen"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1140,11 +1144,11 @@ msgstr "Methode:"
msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
msgid "Select D3D9 Render Device"
-msgstr "Kies D3D9 Render apparaat"
+msgstr "Kies D3D9 opbouw apparaat"
msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
msgid "Reinitialize when changing display"
-msgstr "Herinitialisatie bij verandering van monitor"
+msgstr "Herinitialisatie bij verandering van resolutie"
msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
msgid "D3D Fullscreen"
@@ -1156,23 +1160,23 @@ msgstr "Alternatieve VSync"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
msgid "VMR-9 Mixer Mode"
-msgstr "VMR-9 Mixer Mode"
+msgstr "VMR-9 mixer mode"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
msgid "YUV Mixing"
-msgstr "YUV Mixen"
+msgstr "YUV mixen"
msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
msgid "EVR Buffers:"
-msgstr "EVR Buffers:"
+msgstr "EVR buffers:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Ondertitels *"
+msgid "Subtitles"
+msgstr "Ondertitels"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1187,8 +1191,12 @@ msgid "Rotation"
msgstr "Rotatie"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Externe filters (zoals VSFilter) mogen ondertiteling weergeven op alle renderers."
+msgid "Subtitle Renderer"
+msgstr "Ondertitel opbouwer"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Gecompileerde shaders cachen"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1196,7 +1204,7 @@ msgstr "Poortnummer:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
msgid "Launch in web browser..."
-msgstr "Openen in Webbrowser..."
+msgstr "Openen in internet programma..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
msgid "Enable compression"
@@ -1206,6 +1214,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Geef alleen toegang via localhost"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Zet voorbeeld aan"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Print debug informatie"
@@ -1231,17 +1243,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI afhandeling: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Online beschikbare ondertiteling"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Downloaden && Openen"
+msgid "Download subtitles"
+msgstr "Ophalen ondertiteling"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Vervang huidig geladen ondertiteling"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Ophalen"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Verversen"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Afbreken"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opties"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Ondertitel opsturen"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Opsturen"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Afbreken"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opties"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Opslaan als..."
@@ -1272,15 +1312,15 @@ msgstr "Reset"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Update check"
-msgstr "Update controle"
+msgstr "Opwaardering controle"
msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
msgid "Enable automatic update check"
-msgstr "Automatisch op updates controleren"
+msgstr "Automatisch op opwaarderingen controleren"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Wachttijd tussen elke controle:"
+msgid "Check every:"
+msgstr "Controleer elke:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1316,7 +1356,7 @@ msgstr "Annuleren"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Freq. Start"
-msgstr "Freq. Start"
+msgstr "Frequentie start"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Bandwidth"
@@ -1324,7 +1364,7 @@ msgstr "Bandbreedte"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Freq. End"
-msgstr "Freq. Eind"
+msgstr "Frequentie eind"
msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
msgid "Ignore encrypted channels"
@@ -1344,11 +1384,11 @@ msgstr "Q"
msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
msgid "Use an offset"
-msgstr "Gebruik een offset"
+msgstr "Gebruik een compensatie"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Default Device"
-msgstr "Standaard Apparaat"
+msgstr "Standaard apparaat"
msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
msgid "Analog"
@@ -1380,7 +1420,7 @@ msgstr "Digital instellingen (BDA)"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
msgid "Network Provider"
-msgstr "Netwerk Provider"
+msgstr "Netwerk leverancier (ISP)"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
msgid "Tuner"
@@ -1392,7 +1432,7 @@ msgstr "Ontvanger"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
msgid "Channel switching approach:"
-msgstr "Kanaal wisselingsaanpak:"
+msgstr "Kanaal wisseling aanpak:"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
msgid "Rebuild filter graph"
@@ -1432,7 +1472,7 @@ msgstr "Toon dichtsbijzijnde vsync"
msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
msgid "Target sync offset:"
-msgstr "Synchronisatie offset:"
+msgstr "Synchronisatie compensatie:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
msgid "ms"
@@ -1444,7 +1484,7 @@ msgstr "Beperkt tot:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
msgid "+/-"
-msgstr "+/-+"
+msgstr "+/-"
msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
msgid "ms"
@@ -1488,7 +1528,7 @@ msgstr "Toevoegen"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
msgid "Del"
-msgstr "Del"
+msgstr "Verwijder"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
msgid "Up"
@@ -1532,7 +1572,7 @@ msgstr "Prefereer externe ondertiteling over interne ondertiteling"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
-msgstr "Geintegreerde ondertiteling niet laden"
+msgstr "Geïntegreerde ondertiteling niet laden"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
msgid "Autoload paths"
@@ -1543,24 +1583,36 @@ msgid "Reset"
msgstr "Reset"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Online database"
+msgid "Online search, download and upload subtitles"
+msgstr "Online zoeken, ophalen en versturen ondertitels"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Automatisch zoeken en ophalen van ondertitels als die lokaal niet worden gevonden."
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Liever ondertitels voor slechthorenden (wanneer aangegeven door ondertitel verzorger)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Negeer bestanden die enige van de volgende woorden bevatten:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "URL naar de online ondertitelings-database:"
+msgid "Languages in order of preference:"
+msgstr "Talen in voorkeur volgorde"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Test"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Automatisch opsturen van actieve ondertitels na afspelen"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
-msgstr "Update Controle"
+msgstr "Opwaardeer controle"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
msgid "&Download now"
-msgstr "&Nu downloaden"
+msgstr "&Nu ophalen"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
msgid "Remind me &later"
@@ -1568,11 +1620,11 @@ msgstr "Herinner me &later"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
msgid "&Ignore this update"
-msgstr "&Negeer deze update"
+msgstr "&Negeer deze opwaardering"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr "Shaders bevatten speciale effecten die aan het videorenderproces toegevoegd kunnen worden."
+msgstr "Shaders bevatten speciale effecten die aan het video opbouw proces toegevoegd kunnen worden."
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
@@ -1620,7 +1672,7 @@ msgstr "Shaders foutopsporing"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
msgid "Debug Information"
-msgstr "Debug Informatie"
+msgstr "Debug informatie"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
msgid "PS 2.0"
@@ -1640,7 +1692,7 @@ msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr "Geavanceerde Instellingen, pas niet aan tenzij je weet wat je doet."
+msgstr "Geavanceerde instellingen, pas niet aan tenzij je weet wat je doet."
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
@@ -1654,6 +1706,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Standaard"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Apparaat"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Exclusieve mode"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Sta \"bitstreaming\" toe"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Opties"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Zet stereo \"kruis uitsturen\" aan (voor koptelefoons)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy "
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier "
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Afgeknepen:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Hoogte:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Opmerking"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Om audio vervorming te minimaliseren, is het raadzaam om het speler volume rond de 85% te houden bij het afspelen van luide niet verliesvrije gecodeerde inhoud."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG kwaliteit:"
@@ -1666,3 +1762,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Crash rapporteur"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Het spijt ons, het lijkt er op dat MPC-HC zojuist is gecrasht. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Stuuur ons een foutrapport voor diagnose en foutoplossing"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Optionele informatie"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Email:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Een email adres is optioneel en zal enkel worden gebruikt als de ontwikkelaars contact met u moeten opnemen voor meer informatie."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Beschrijf het probleem (in het Engels)"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Herstart MPC -HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Afsluiten MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.nl.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.nl.menus.po
index ddb7bff00..09c5b37b5 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.nl.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.nl.menus.po
@@ -1,18 +1,23 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# B512, 2015
+# reneweesp <bmom43@hotmail.com>, 2016
# Dennis Gerritsen <frostflame@hotmail.com>, 2014
-# Devrim Yolo <devrim.extra@gmail.com>, 2013-2014
+# Devrim, 2013-2015
+# DennisW, 2014
+# hendrickbert <hendrickbert@gmail.com>, 2015
# kasper93, 2013
+# Marco Brohet <therbom@gmail.com>, 2015
# rjongejan <ruben.jongejan@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-13 22:09+0000\n"
-"Last-Translator: Dennis Gerritsen <frostflame@hotmail.com>\n"
-"Language-Team: Dutch (http://www.transifex.com/projects/p/mpc-hc/language/nl/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-03-21 18:43+0000\n"
+"Last-Translator: reneweesp <bmom43@hotmail.com>\n"
+"Language-Team: Dutch (http://www.transifex.com/mpc-hc/mpc-hc/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -25,7 +30,7 @@ msgstr "&Bestand"
msgctxt "ID_FILE_OPENQUICK"
msgid "&Quick Open File..."
-msgstr "Snel &Bestand openen..."
+msgstr "Snel &bestand openen..."
msgctxt "ID_FILE_OPENMEDIA"
msgid "&Open File..."
@@ -49,7 +54,7 @@ msgstr "Schijf openen"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
-msgstr "&Recentelijke Bestanden"
+msgstr "&Recente bestanden"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
@@ -67,29 +72,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Miniatuurweergaven opslaan..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Ondertiteling &laden..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Ondertiteling op&slaan..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Ondertitelings Database"
+msgid "S&ubtitles"
+msgstr "Ondertiteling"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Ondertitlel &laden"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Zoeken..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Op&slaan ondertitel"
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Versturen..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "Ophalen on&dertitel"
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Ontvangen..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "Opst&uren ondertitel"
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -105,7 +106,7 @@ msgstr "Bee&ld"
msgctxt "ID_VIEW_CAPTIONMENU"
msgid "Caption&&Menu"
-msgstr "Titelbalk && Menu"
+msgstr "Titelbalk && menu"
msgctxt "ID_VIEW_SEEKER"
msgid "See&k Bar"
@@ -129,7 +130,7 @@ msgstr "St&atus"
msgctxt "ID_VIEW_SUBRESYNC"
msgid "Su&bresync"
-msgstr "&Ondertitelings-resync"
+msgstr "&Ondertiteling resync"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
@@ -141,11 +142,11 @@ msgstr "Opnemen"
msgctxt "ID_VIEW_NAVIGATION"
msgid "Na&vigation"
-msgstr "Navigation"
+msgstr "Navigatie"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr "&Foutopsporing Shaders"
+msgstr "&Foutopsporing shaders"
msgctxt "POPUP"
msgid "&Presets..."
@@ -157,7 +158,7 @@ msgstr "&Minimum"
msgctxt "ID_VIEW_PRESETS_COMPACT"
msgid "&Compact"
-msgstr "&Compakt"
+msgstr "&Compact"
msgctxt "ID_VIEW_PRESETS_NORMAL"
msgid "&Normal"
@@ -165,7 +166,7 @@ msgstr "&Standaard"
msgctxt "ID_VIEW_FULLSCREEN"
msgid "F&ull Screen"
-msgstr "&Volledig Scherm"
+msgstr "&Volledig scherm"
msgctxt "POPUP"
msgid "&Zoom"
@@ -185,27 +186,31 @@ msgstr "&200%"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
-msgstr "Autom. passend"
+msgstr "Auto passend"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "Auto Fit (Larger Only)"
+msgstr "Auto passend (a&lleen groot)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "Renderer Instellingen"
+msgstr "Opbouw instellingen"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
-msgstr "&Tearing Test"
+msgstr "&Tearing test"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Beeld Statistieken"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Statistieken weergeven"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Resterende T&ijd"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Hu&idige tijd weergeven"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "&Bestandsnaam weergeven"
msgctxt "POPUP"
msgid "&Output Range"
@@ -225,51 +230,51 @@ msgstr "Presentatie"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
-msgstr "D3D Volledig Scherm"
+msgstr "D3D volledig scherm"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "D3D Volledig Scherm met GUI"
+msgstr "D3D volledig scherm met GUI"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "10-bit RGB Output"
+msgstr "10-bits RGB-uitvoer"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
-msgstr "Force 10-bit RGB Input"
+msgstr "10-bits RGB &invoer forceren"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
-msgstr "Full Floating Point Processing"
+msgstr "Volledige floating point verwerking"
msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
msgid "&Half Floating Point Processing"
-msgstr "Half Floating Point Processing"
+msgstr "Halve floating point verwerking"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
-msgstr "Deactiveer Aero tijdens afspelen"
+msgstr "Aero uitschakelen tijdens afspelen"
msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time &Correction"
-msgstr "Activeer Frametime Correctie"
+msgstr "Beeldtijd correctie inschakelen"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "Color Management"
+msgstr "Kleurbeheer"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
-msgstr "Activeren"
+msgstr "Inschakelen"
msgctxt "POPUP"
msgid "&Input Type"
-msgstr "Input Type"
+msgstr "Invoertype"
msgctxt "ID_VIEW_CM_INPUT_AUTO"
msgid "&Auto-Detect"
-msgstr "Auto-Detect"
+msgstr "Automatisch"
msgctxt "ID_VIEW_CM_INPUT_HDTV"
msgid "&HDTV"
@@ -277,31 +282,31 @@ msgstr "HDTV"
msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
msgid "SDTV &NTSC"
-msgstr "SDTV NTSC"
+msgstr "SDTV (NTSC)"
msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
msgid "SDTV &PAL"
-msgstr "SDTV PAL"
+msgstr "SDTV (PAL)"
msgctxt "POPUP"
msgid "Ambient &Light"
-msgstr "Ambient Light"
+msgstr "Omgevingslicht"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
-msgstr "Bright (2.2 Gamma)"
+msgstr "Helder (2.2 Gamma)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
msgid "&Dim (2.35 Gamma)"
-msgstr "Dim (2.35 Gamma)"
+msgstr "Gedimd (2.35 Gamma)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
-msgstr "Dark (2.4 Gamma)"
+msgstr "Donker (2.4 Gamma)"
msgctxt "POPUP"
msgid "&Rendering Intent"
-msgstr "Rendering Intent"
+msgstr "Opbouw intentie"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
@@ -309,15 +314,15 @@ msgstr "Perceptual"
msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
msgid "&Relative Colorimetric"
-msgstr "Relative Colorimetric"
+msgstr "Relatief kleurmetrisch"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
-msgstr "Saturation"
+msgstr "Verzadiging"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
-msgstr "Absolute Colorimetric"
+msgstr "Absoluut kleurmetrisch"
msgctxt "POPUP"
msgid "&VSync"
@@ -325,11 +330,11 @@ msgstr "VSync"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "&Activeer VSync"
+msgstr "VSync &inschakelen"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "Accurate VSync"
+msgstr "Precieze VSync"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
@@ -337,15 +342,15 @@ msgstr "Alternatieve VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "Verhoog VSync offset"
+msgstr "VSync compensatie ver&lagen"
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "Verlaag VSync offset"
+msgstr "VSync compensatie ver&hogen"
msgctxt "POPUP"
msgid "&GPU Control"
-msgstr "GPU Controle"
+msgstr "GPU beheer"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
@@ -357,19 +362,19 @@ msgstr "GPU legen na afspelen"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "Wacht tot GPU leeg"
+msgstr "Wacht tot GPU leeg is"
msgctxt "POPUP"
msgid "R&eset"
-msgstr "Reset"
+msgstr "Resetten"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "Instellingen van Renderer op &Standaard"
+msgstr "Standaardinstellingen opbouwer herstellen"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "Instellingen van Renderer op &Optimaal"
+msgstr "Optimale opbopuw instellingen herstellen"
msgctxt "POPUP"
msgid "Video &Frame"
@@ -407,17 +412,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Pas venster vanaf buiten aan"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Schaalverhouding aanhouden"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Schaalverhouding niet aanhouden"
+msgid "&Aspect Ratio"
+msgstr "Verw&achtte verhouding"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Standaard"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Stan&daard (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -439,13 +440,17 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Veronderstel verkante pixels (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
-msgstr "Scherm/Bureaublad AR-afwijking corrigeren"
+msgstr "AR afwijking scherm/bureaublad corrigeren"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
-msgstr "Pan && S&can"
+msgstr "Pa&n && scan"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
@@ -493,11 +498,11 @@ msgstr "&Centreren"
msgctxt "ID_VIEW_RESET"
msgid "Re&set"
-msgstr "Reset"
+msgstr "Resetten"
msgctxt "POPUP"
msgid "On &Top"
-msgstr "Op Voorgrond"
+msgstr "Op voorgrond"
msgctxt "ID_ONTOP_DEFAULT"
msgid "&Default"
@@ -525,15 +530,31 @@ msgstr "&Afspelen"
msgctxt "ID_PLAY_PLAYPAUSE"
msgid "&Play/Pause"
-msgstr "Afspelen/&Pauze"
+msgstr "Afspelen/&pauze"
msgctxt "ID_PLAY_STOP"
msgid "&Stop"
msgstr "&Stoppen"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
-msgstr "&Frame vooruit"
+msgid "Fra&me Step"
+msgstr "&Beeld stap"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "He&rhalen"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Eeuwig"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "Bestand"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "Afs&peellijst"
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
@@ -553,19 +574,19 @@ msgstr "&Filters"
msgctxt "ID_SHADERS"
msgid "S&haders"
-msgstr "Pixel S&hader"
+msgstr "Pixel s&hader"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio"
+msgid "&Audio Track"
+msgstr "&Geluidsspoor"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
+msgid "Su&btitle Track"
msgstr "&Ondertiteling"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Video S&tream"
+msgid "Vide&o Track"
+msgstr "&Videospoor"
msgctxt "POPUP"
msgid "&Volume"
@@ -587,7 +608,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "&Na weergave"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Niets doen"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "&Volgend bestand in map afspelen"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "&Scherm uitschakelen"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "Afsluiten"
@@ -601,7 +634,7 @@ msgstr "Slaapstand"
msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
msgid "Shut&down"
-msgstr "Windows Afsluiten"
+msgstr "Windows afsluiten"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
@@ -609,11 +642,7 @@ msgstr "Afmelden"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "Lock"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Schakel de &monitor uit"
+msgstr "Vergrendelen"
msgctxt "POPUP"
msgid "&Navigate"
@@ -633,27 +662,27 @@ msgstr "&Ga naar..."
msgctxt "ID_NAVIGATE_TITLEMENU"
msgid "&Title Menu"
-msgstr "&Titel Menu"
+msgstr "&Titelmenu"
msgctxt "ID_NAVIGATE_ROOTMENU"
msgid "&Root Menu"
-msgstr "&Hoofd Menu"
+msgstr "&Hoofdmenu"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
-msgstr "Ondertitelings Menu"
+msgstr "Ondertitelingsmenu"
msgctxt "ID_NAVIGATE_AUDIOMENU"
msgid "&Audio Menu"
-msgstr "Audio Menu"
+msgstr "Audiomenu"
msgctxt "ID_NAVIGATE_ANGLEMENU"
msgid "An&gle Menu"
-msgstr "Camerahoek Menu"
+msgstr "Camerahoekmenu"
msgctxt "ID_NAVIGATE_CHAPTERMENU"
msgid "&Chapter Menu"
-msgstr "Hoofdstuk Menu"
+msgstr "Hoofdstukmenu"
msgctxt "ID_FAVORITES"
msgid "F&avorites"
@@ -665,11 +694,11 @@ msgstr "&Help"
msgctxt "ID_HELP_HOMEPAGE"
msgid "&Home Page"
-msgstr "&Homepage"
+msgstr "T&huispagina"
msgctxt "ID_HELP_CHECKFORUPDATE"
msgid "Check for &updates"
-msgstr "Op updates &controleren"
+msgstr "Controleren op o&pwaarderingen"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
@@ -677,13 +706,13 @@ msgstr "&Opdrachtprompt parameters"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
-msgstr "Download Toolbar Images"
+msgstr "&Werkbalk afbeeldingen ophalen"
msgctxt "ID_HELP_DONATE"
msgid "&Donate"
-msgstr "Doneer"
+msgstr "Doneren"
msgctxt "ID_HELP_ABOUT"
msgid "&About..."
-msgstr "&Info..."
+msgstr "&Over"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.nl.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.nl.strings.po
index 4d7f9ee9c..a2aea5bc1 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.nl.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.nl.strings.po
@@ -1,16 +1,27 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# B512, 2015-2016
+# reneweesp <bmom43@hotmail.com>, 2016
# Dennis Gerritsen <frostflame@hotmail.com>, 2014
+# dragnadh <dragnadh@gmail.com>, 2015-2017
+# DennisW, 2014,2016
+# hendrickbert <hendrickbert@gmail.com>, 2015
+# B512, 2015
+# Marco Brohet <therbom@gmail.com>, 2015
+# mark van tilburg <markvantilburg@gmail.com>, 2016
+# Peter Pul, 2015
# rjongejan <ruben.jongejan@gmail.com>, 2014
+# Tom <inactive+nmad@transifex.com>, 2014
+# Underground78, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Dutch (http://www.transifex.com/projects/p/mpc-hc/language/nl/)\n"
+"Language-Team: Dutch (http://www.transifex.com/mpc-hc/mpc-hc/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -19,7 +30,7 @@ msgstr ""
msgctxt "IDS_INFOBAR_LOCATION"
msgid "Location"
-msgstr "Lokatie"
+msgstr "Locatie"
msgctxt "IDS_INFOBAR_VIDEO"
msgid "Video"
@@ -43,27 +54,35 @@ msgstr "Afronden..."
msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
msgid "Play Video"
-msgstr "Video Afspelen"
+msgstr "Video afspelen"
msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
msgid "Play Music"
-msgstr "Muziek Afspelen"
+msgstr "Muziek afspelen"
msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
msgid "Play Audio CD"
-msgstr "Audio CD Afspelen"
+msgstr "Audio CD afspelen"
msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
msgid "Play DVD Movie"
-msgstr "DVD Film Afspelen"
+msgstr "DVD film afspelen"
msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Eigenschappen"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Bestand"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
-msgstr "&Standaard Stijl"
+msgstr "&Standaard stijl"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Afspeellijst"
msgctxt "IDS_FAVFILES"
msgid "Files"
@@ -71,7 +90,7 @@ msgstr "Bestanden"
msgctxt "IDS_FAVDVDS"
msgid "DVDs"
-msgstr "DVDs"
+msgstr "DVD's"
msgctxt "IDS_INFOBAR_CHANNEL"
msgid "Channel"
@@ -87,7 +106,7 @@ msgstr "Synchronisatie compensatie"
msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
msgid "avg: %d ms, dev: %d ms"
-msgstr "avg: %d ms, dev: %d ms"
+msgstr "gem.: %d ms, afw.: %d ms"
msgctxt "IDS_STATSBAR_JITTER"
msgid "Jitter"
@@ -95,7 +114,7 @@ msgstr "Jitter"
msgctxt "IDS_STATSBAR_BITRATE"
msgid "Bitrate"
-msgstr "Bitrate"
+msgstr "Beeldjes per seconde"
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
@@ -107,7 +126,7 @@ msgstr "Signaal"
msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
msgid "Strength: %d dB, Quality: %ld%%"
-msgstr "Sterkte: %d dB, Kwaliteit: %ld%%"
+msgstr "Sterkte: %d dB, kwaliteit: %ld%%"
msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
msgid "Styles"
@@ -115,7 +134,27 @@ msgstr "Stijlen"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "Als het render doel ongedefinieerd is, worden SSA/ASS ondertitels relatief tot de video-omlijsting gerenderd terwijl alle andere ondertitels relatief tot het venster gerenderd worden. "
+msgstr "Als het opbouw doel ongedefinieerd is, worden SSA/ASS ondertitels relatief tot de video omlijsting opgebouwd terwijl alle andere ondertitels relatief tot het venster opgebouwd worden. "
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Herhaal mode: Afspeellijst"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Herhaal mode: Bestand"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Herhaal eeuwig: Aan"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Herhaal eeuwig: Uit"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Herhaal eeuwig"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
@@ -123,7 +162,7 @@ msgstr "Nooit (snelste optie)"
msgctxt "IDS_PPAGE_CAPTURE_FG1"
msgid "Only when switching different video types (default)"
-msgstr "Enkel bij het wisselen van verschillende videotypes (standaard optie)"
+msgstr "Enkel bij het wisselen van verschillende video typen (standaard optie)"
msgctxt "IDS_PPAGE_CAPTURE_FG2"
msgid "Always (slowest option)"
@@ -131,15 +170,15 @@ msgstr "Altijd (langzaamste optie)"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
msgid "Not supported by some devices. Two video decoders always present in the filter graph."
-msgstr "Niet ondersteund door sommige apparaten. Er zijn altijd twee videodecoders zichtbaar in de filtergrafiek."
+msgstr "Niet ondersteund door sommige apparaten. Er zijn altijd twee video decoders zichtbaar in de filter grafiek."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr "Snel, behalve wanneer er gewisseld wordt tussen verschillende videostreams. Er is maar een videodecoder zichtbaar in de filtergrafiek."
+msgstr "Snel, behalve wanneer er gewisseld wordt tussen verschillende video stromen. Er is maar een video decoder zichtbaar in de filter grafiek."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
-msgstr "Niet aanbevolen. Enkel voor testdoeleindes."
+msgstr "Niet aanbevolen. Enkel voor test doeleinden."
msgctxt "IDS_PPAGE_CAPTURE_SFG0"
msgid "Never if possible (fastest, but not supported by most filters)"
@@ -147,7 +186,7 @@ msgstr "Nooit indien mogelijk (snelst, maar niet ondersteund door de meeste filt
msgctxt "IDS_PPAGE_CAPTURE_SFG1"
msgid "Only when switching different video types (default)"
-msgstr "Enkel bij het wisselen van verschillende videotypes (standaard optie)"
+msgstr "Enkel bij het wisselen van verschillende video typen (standaard optie)"
msgctxt "IDS_PPAGE_CAPTURE_SFG2"
msgid "Always (may be required by some devices)"
@@ -171,11 +210,11 @@ msgstr "Inhoud"
msgctxt "IDS_CONTENT_MOVIE_DRAMA"
msgid "Movie/Drama"
-msgstr "Film/Drama"
+msgstr "Film / Drama"
msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
msgid "News/Current affairs"
-msgstr "Nieuws/Recente gebeurtenissen"
+msgstr "Nieuws / Recente gebeurtenissen"
msgctxt "IDS_SPEED_UNIT_G"
msgid "GB/s"
@@ -199,7 +238,7 @@ msgstr "Navigatie balk"
msgctxt "IDS_SUBRESYNC_CAPTION"
msgid "Subresync"
-msgstr "Ondertitelingshersynchronisatie"
+msgstr "Ondertiteling hersynchronisatie"
msgctxt "IDS_SUBRESYNC_CLN_TIME"
msgid "Time"
@@ -239,11 +278,11 @@ msgstr "Lettertype"
msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
msgid "Failed to render some of the pins of the DVD Navigator filter"
-msgstr "Renderen van enkele DVD navigator filter pins mislukt"
+msgstr "Opbouwen van enkele DVD navigatie filter pinnen mislukt"
msgctxt "IDS_DVD_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for DVD playback"
-msgstr "In de wachtrij plaatsen van de benodigde DVD weergaveinterfaces mislukt"
+msgstr "In de wachtrij plaatsen van de benodigde DVD weergave interfaces mislukt"
msgctxt "IDS_CAPTURE_LIVE"
msgid "Live"
@@ -251,11 +290,11 @@ msgstr "Live"
msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
msgid "Can't add video capture filter to the graph"
-msgstr "Kan geen video opnamefilter aan de grafiek toevoegen"
+msgstr "Kan geen video opname filter aan de grafiek toevoegen"
msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
msgid "Can't add audio capture filter to the graph"
-msgstr "Kan geen audio opnamefilter aan de grafiek toevoegen"
+msgstr "Kan geen audio opname filter aan de grafiek toevoegen"
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
@@ -263,11 +302,11 @@ msgstr "Kon het opnameapparaat niet openen."
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
-msgstr "Openen mislukt, ongeldige invoerparameters"
+msgstr "Openen mislukt, ongeldige invoer parameters"
msgctxt "IDS_EDIT_LIST_EDITOR"
msgid "Edit List Editor"
-msgstr "Verander Lijst Bewerker"
+msgstr "Verander lijst bewerker"
msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
msgid "The entered time is greater than the file duration."
@@ -311,7 +350,7 @@ msgstr "Laag"
msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
msgid "Actor"
-msgstr ""
+msgstr "Acteur"
msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
msgid "Effect"
@@ -323,15 +362,15 @@ msgstr "Afspeellijst"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
-msgstr "Aan/Uit"
+msgstr "Aan / Uit"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Van fps"
+msgid "From (FPS)"
+msgstr "Van (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Tot fps"
+msgid "To (FPS)"
+msgstr "Tot (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -351,7 +390,7 @@ msgstr "Systeemstandaard"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
-msgstr "in de wachtrij plaatsen van de benodigde weergaveinterfaces mislukt"
+msgstr "in de wachtrij plaatsen van de benodigde weergave interface mislukt"
msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
msgid "Could not set target window for graph notification"
@@ -359,7 +398,7 @@ msgstr "Kon het doelvenster voor grafiekmeldingen niet instellen"
msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
msgid "Failed to render all pins of the DVD Navigator filter"
-msgstr "Renderen van alle DVD navigator filter pins mislukt"
+msgstr "Opbouwen van alle DVD navigatie filter pinnen mislukt"
msgctxt "IDS_PLAYLIST_OPEN"
msgid "&Open"
@@ -383,7 +422,7 @@ msgstr "&Kopieer naar klembord"
msgctxt "IDS_PLAYLIST_SAVEAS"
msgid "&Save As..."
-msgstr "Opslaan &Als..."
+msgstr "Opslaan &als..."
msgctxt "IDS_PLAYLIST_SORTBYLABEL"
msgid "Sort by &label"
@@ -391,7 +430,7 @@ msgstr "Sorteer op &label"
msgctxt "IDS_PLAYLIST_SORTBYPATH"
msgid "Sort by &path"
-msgstr "Sorteer op &pad"
+msgstr "Sorteer op &locatie"
msgctxt "IDS_PLAYLIST_RANDOMIZE"
msgid "R&andomize"
@@ -439,7 +478,7 @@ msgstr "Speler"
msgctxt "IDD_PPAGEDVD"
msgid "Playback::DVD/OGM"
-msgstr "Weergave::DVD/OGM"
+msgstr "Weergave::DVD / OGM"
msgctxt "IDD_PPAGESUBTITLES"
msgid "Subtitles"
@@ -455,15 +494,43 @@ msgstr "Tweaks"
msgctxt "IDD_PPAGEAUDIOSWITCHER"
msgid "Internal Filters::Audio Switcher"
-msgstr "Interne Filters::Audio Switcher"
+msgstr "Interne filters::Audio switcher"
msgctxt "IDD_PPAGEEXTERNALFILTERS"
msgid "External Filters"
-msgstr "Externe Filters"
+msgstr "Externe filters"
msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
-msgstr "Weergave::Shaders"
+msgstr "Weergave::shaders"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Bronnen"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Overige"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Weergave::Opname"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Weergave::Sync opbouw instellingen"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Weergave::Volledig scherm"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Interne filters::Audio opbouwer"
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
@@ -483,47 +550,39 @@ msgstr "Dit verhelpt het probleem dat iconen verkeerd worden weergegeven na een
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
-msgstr "Oude Video Renderer"
+msgstr "Oude video opbouwer"
msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
-msgstr ""
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr ""
+msgstr "Overlay mixer opbouwer"
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
-msgstr ""
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr ""
+msgstr "Video mixing opbouwer 9 (in scherm)"
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
-msgstr ""
+msgstr "Video mixing opbouwer 9 (opbouwloos)"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
-msgstr ""
+msgstr "Verbeterde video opbouwer"
msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
msgid "Enhanced Video Renderer (custom presenter)"
-msgstr ""
+msgstr "Verbeterde video opbouwer (eigen presentator)"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
-msgstr ""
+msgstr "Haali video opbouwer"
msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
msgid "Null (anything)"
-msgstr ""
+msgstr "Ontbrekend (alles)"
msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr ""
+msgstr "Ontbrekend (ongecomprimeerd)"
msgctxt "IDS_PPAGE_OUTPUT_MADVR"
msgid "madVR"
@@ -535,11 +594,11 @@ msgstr "Speler::Toetsen"
msgctxt "IDD_PPAGESUBSTYLE"
msgid "Subtitles::Default Style"
-msgstr "Ondertiteling::Standaard Stijl"
+msgstr "Ondertiteling::Standaard stijl"
msgctxt "IDD_PPAGEINTERNALFILTERS"
msgid "Internal Filters"
-msgstr "Interne Filters"
+msgstr "Interne filters"
msgctxt "IDD_PPAGELOGO"
msgid "Player::Logo"
@@ -547,71 +606,35 @@ msgstr "Speler::Logo"
msgctxt "IDD_PPAGEOUTPUT"
msgid "Playback::Output"
-msgstr "Weergave::Output"
+msgstr "Weergave::Uitvoer"
msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
-msgstr "Speler::Web Interface"
-
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Ondertiteling::Database"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Bronnen"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Overige"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr ""
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Weergave::Opname"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Weergave::Sync Renderer Settings"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Weergave::Volledig Scherm"
+msgstr "Speler::Web interface"
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
-msgstr ""
+msgstr "Details"
msgctxt "IDD_FILEPROPCLIP"
msgid "Clip"
-msgstr ""
+msgstr "Fragment"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
-msgstr "Standaard video renderer filter voor DirectShow. Alle anderen zullen op deze terugvallen, als ze niet geladen kunnen worden. In Windown XP is dit hetzelfde als VMR-7 (venster)."
+msgstr "Standaard video opbouw filter voor DirectShow. Alle anderen zullen op deze terugvallen, als ze niet geladen kunnen worden. In Window XP is dit hetzelfde als VMR-7 (venster)."
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "Standaard Renderer voor Windows 9x/ME/2000. Afhankelijk van de zichtbaarheid van het video-venster en de mogelijkheden van de grafische kaart, schakelt deze renderer dynamisch tussen GDI, DirectDraw en Overlay Rendering."
+msgstr "Standaard opbouwer voor Windows 9x/ME/2000. Afhankelijk van de zichtbaarheid van het video venster en de mogelijkheden van de grafische kaart, schakelt deze opbouwer dynamisch tussen GDI, DirectDraw en Overlay opbouwing."
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "Rendert altijd in overlay-modus. Normaliter zijn alleen YUV-formaten toegestaan, maar ze worden zonder enige kleurconversie naar RGB getoond. Dit is de snelste rendering methode van allemaal en de enige waarbij Volledig Beeld Video Mirroring naar TV-out zeker functioneert."
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "De standaard renderer van Windows XP. Zeer stabiel en iets langzamer dan de Overlay mixer. Gebruikt DirectDraw en werkt in Overlay-modus waar mogelijk."
+msgstr "Bouwt altijd in overlay modus op. Normaliter zijn alleen YUV-formaten toegestaan, maar ze worden zonder enige kleurconversie naar RGB getoond. Dit is de snelste opbouw methode van allemaal en de enige waarbij volledig beeld video Mirroring naar TV uit zeker functioneert."
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Alleen beschikbaar als DirectX 9 is geïnstalleerd. Heeft dezelfde mogelijkheden als VMR-7 (venster), maar het zal nooit Overlay rendering gebruiken en kan daarom iets langzamer zijn dan VMR-7 (venster)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Hetzelfde als VMR-7 (venster), maar met de Allocator-Presenter plugin van MPC-HC voor ondertiteling. Overlay video mirroring ZAL NIET werken. De kleurkwaliteit van het bureaublad kan het beste 'True Color' zijn."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Alléén beschikbaar als DirectX 9 is geïnstallleerd. Zeer stabiel, maar het zal nooit \"overlay opbouwen\" gebruiken en hierdoor kan het een beetje trager zijn dan \"overlay mixen\"."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -619,131 +642,111 @@ msgstr "Hetzelfde als VMR-9 (venster), maar met de Allocator-Presenter plugin va
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
-msgstr ""
+msgstr "Hetzelfde als de VMR-9 (opbouwloos), maar maakt gebruik van een echte twee-traps \"bicubic resizer\"."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Verbind met elk video-achtig media type en zal de inkomende signalen in het, grote dan wel kleine, niets zenden. Gebruik dit als geen uitgangssignaal nodig is en de om de CPU te ontlasten."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Verbind elk video achtig media type en zal de inkomende signalen nergens heenzenden. Gebruik dit als geen uitgangssignaal nodig is en de om de CPU te ontlasten."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
-msgstr "Hetzelfde als de normale Null renderer, maar deze zal alleen verbinding maken met ongecomprimeerde types."
+msgstr "Hetzelfde als de normale Null opbouwer, maar deze zal alleen verbinding maken met ongecomprimeerde typen."
msgctxt "IDC_DSEVR"
msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
-msgstr ""
+msgstr "Alleen beschikbaar op Vista of later, of op XP met minstens .NET Framework 3.5 geïnstalleerd."
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr ""
+msgstr "Zelfde als de EVR, maar met de Allocator-Presenter van MPC-HC voor ondertiteling and postprocessing. Aanbevolen voor Windows Vista of later."
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
-msgstr ""
+msgstr "Hoge kwaliteit renderer, een GPU dat D3D9 of later ondersteund is vereist."
msgctxt "IDC_DSSYNC"
msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
-msgstr ""
+msgstr "Zelfde als de EVER (CP), maar biedt verscheidende opties om video framerate te synchroniseren met display refresh rate om dubbele of overgeslagen frames tegen te gaan."
msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Real's eigen renderer. SMIL scripts functioneren, maar interactie waarschijnlijk niet. Gebruikt DirectDraw en werkt in Overlay-modus waar mogelijk."
-
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "De output van Real's engine rendered door de op DX7 gebaseerde VMR-7 (renderless)."
+msgstr "Real's eigen opbouwer. SMIL scripts functioneren, maar interactie waarschijnlijk niet. Gebruikt DirectDraw en werkt in Overlay-modus waar mogelijk."
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "De output van Real's engine rendered door de op DX9 gebaseerde VMR-9 (renderless)."
+msgstr "De output van Real's engine rendered door de op DX9 gebaseerde VMR-9 (opbouwloos)."
msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
-msgstr "QuickTime's eigen renderer. Wordt langzaam als het venster gedeeltelijk bedekt is of als de grootte verandert wordt. Als Overlay niet toegepast kan worden, wordt normaliter GDI toegepast."
-
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "The output van QuickTime's engine wordt gerendert door de op DX7 gebasserde VMR-9 (renderless)."
+msgstr "QuickTime's eigen opbouwer. Wordt langzaam als het venster gedeeltelijk bedekt is of als de grootte verandert wordt. Als Overlay niet toegepast kan worden, wordt normaliter GDI toegepast."
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
-msgstr "The output van QuickTime's engine wordt gerendert door de op DX7 gebasserde VMR-9 (renderless)."
+msgstr "De uitvoervan QuickTime's engine wordt opgebouwd door de op DX7 gebasserde VMR-9 (opbouwloos)."
msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Video oppervlak is een normaal offscreen oppervlak."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
-msgstr ""
-
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr ""
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr ""
+msgstr "Sync opbouwer"
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
-msgstr ""
+msgstr "Regulier \"offscreen\" vlakke ondergrond"
msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
msgid "2D surfaces"
-msgstr ""
+msgstr "2D oppervlaktes"
msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
msgid "3D surfaces (recommended)"
-msgstr ""
+msgstr "3D oppervlaktes (aanbevolen)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
-msgstr ""
+msgstr "Naaste buur"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
msgid "Bilinear"
-msgstr ""
+msgstr "Bilinear"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
msgid "Bilinear (PS 2.0)"
-msgstr ""
+msgstr "Bilinear (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
msgid "Bicubic A=-0.60 (PS 2.0)"
-msgstr ""
+msgstr "Bicubic A=-0.60 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
msgid "Bicubic A=-0.75 (PS 2.0)"
-msgstr ""
+msgstr "Bicubic A=-0.75 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
msgid "Bicubic A=-1.00 (PS 2.0)"
-msgstr ""
+msgstr "Bicubic A=-1.00 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
msgid "**unavailable**"
-msgstr ""
+msgstr "**onbeschikbaar**"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
msgid "The selected renderer is not installed."
-msgstr ""
+msgstr "De geselecteerde opbouwer is niet geïnstalleerd "
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
-msgstr ""
+msgstr "Ontbrekend (alles)"
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr ""
+msgstr "Ontbrekend (ongecomprimeerd)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr ""
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Interne audio opbouwer"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -751,47 +754,51 @@ msgstr "Naam"
msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
msgid "MIME Type"
-msgstr ""
+msgstr "MIME type"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr ""
+msgstr "Om een ingebedde bron in uw browser te bekijken dient de web interface geactiveerd te zijn.\n\nGebruik de \"Opslaan als\" knop als u alleen de informatie wilt opslaan."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr ""
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Ophalen ondertitels..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Opsturen ondertitels..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
-msgstr ""
+msgstr "Vertraging (ms):"
msgctxt "IDS_SPEEDSTEP_AUTO"
msgid "Auto"
-msgstr ""
+msgstr "Automatisch"
msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
msgid "There are no customized keys to export."
-msgstr ""
+msgstr "Er zijn geen aangepaste toetsen om te exporteren."
msgctxt "IDS_RFS_NO_FILES"
msgid "No media files found in the archive"
-msgstr ""
+msgstr "Geen media bestanden gevonden in het archief"
msgctxt "IDS_RFS_COMPRESSED"
msgid "Compressed files are not supported"
-msgstr ""
+msgstr "Gecomprimeerde bestanden worden niet ondersteund"
msgctxt "IDS_RFS_ENCRYPTED"
msgid "Encrypted files are not supported"
-msgstr ""
+msgstr "Gecodeerde bestanden worden niet ondersteund"
msgctxt "IDS_RFS_MISSING_VOLS"
msgid "Couldn't find all archive volumes"
-msgstr ""
+msgstr "Kan niet alle gearchiveerde volumes vinden"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Video oppervlak is een texture-oppervlak, maar de 2Dd functies worden gebruikt om het beeld in de backbuffer te kopieren en te spreiden. Vereist een grafische kaart die 32bit, RGBA, non-power-of-two textures ondersteunt, binnen de resolutie van de video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Video oppervlak is een texture oppervlak, maar de 2Dd functies worden gebruikt om het beeld in de backbuffer te kopiëren en te spreiden. Vereist een grafische kaart die 32bit, RGBA, non-power-of-two textures ondersteunt, binnen de resolutie van de video."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
@@ -799,23 +806,35 @@ msgstr "Video oppervlak is een texture-oppervlak en wordt getekend als 2 driehoe
msgctxt "IDC_DX9RESIZER_COMBO"
msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
-msgstr "Als er geen Pixel Shader 2.0 ondersteuning is, zal automatisch Simple Bilinear gebruikt worden."
+msgstr "Als er geen pixel shader 2.0 ondersteuning is, zal automatisch simpel bilinear gebruikt worden."
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
-msgstr "Zet VMR-9 (renderless) in de mixer-modus. Dit betekent dat bij eigenschappen de meeste bedieningselementen zullen werken en een aparte thread gebruikt zal worden om frames te renderen."
+msgstr "Zet VMR-9 (opbouwloos) in de mix modus. Dit betekent dat bij eigenschappen de meeste bedieningselementen zullen werken en een in aparte taak gebruikt zal worden om beelden op te bouwen."
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
-msgstr ""
+msgstr "Verbeter prestatie ten koste van de compatibiliteit van de opbouwer."
msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
msgid "Reduces tearing but prevents the toolbar from being shown."
-msgstr ""
+msgstr "Verminderd verscheuring maar blokkeert de werkbalk"
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
-msgstr ""
+msgstr "Verminderd verscheuring door het omzeilen van de standaard VSync gebruikt in D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Tuner afzoeken"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Ondertiteling niet geladen of geen ondersteunde opbouwer."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Slaat gecompileerde shaders op in lokale AppData om de laadtijd te verkorten."
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
@@ -823,35 +842,35 @@ msgstr "Opent VTS_xx_0.ifo om VTS_xx_x.vob-bestanden in een geheel te laden"
msgctxt "IDS_SRC_RFS"
msgid "Based on RARFileSource, doesn't support compressed files"
-msgstr ""
+msgstr "Gebaseerd op RARFILESource, ondersteund geen gecompenseerde bestanden. "
msgctxt "IDS_INTERNAL_LAVF"
msgid "Uses LAV Filters"
-msgstr ""
+msgstr "Gebruikt LAV filters"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr ""
+msgstr "Gebruik LAV filters. Standaard uitgeschakeld aangezien Microsoft filters stabieler zijn voor dit formaat.\nAls u interne filters wilt gebruiken, schakel deze dan voor zowel de bron als decoderen in voor een betere afspeel ervaring."
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
-msgstr ""
+msgstr "Navigatie balk aan / uit"
msgctxt "IDS_AG_VSYNCACCURATE"
msgid "Accurate VSync"
-msgstr ""
+msgstr "Accurate VSync"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr ""
+msgstr "Als het op te bouwen doel niet is gedefineerd, zal het worden overgenomen van de standaard stijl."
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
-msgstr ""
+msgstr "Animatie ondertiteling niet toestaan. Het inschakelen van deze optie zal CPU-gebruik te verlagen. Je kunt het gebruiken als u last hebt van knipperende ondertiteling."
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr ""
+msgstr "Verhoging van het aantal gebufferde subbeelden, dient voornamelijk betere weergave prestaties ten koste van een hogere video RAM gebruik op de GPU."
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
@@ -859,7 +878,7 @@ msgstr "Als je hierop klikt zal de aangevinkte status bij de formaten-groep over
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr ""
+msgstr "Het uitschakelen van deze optie wordt voorkomen dat de ondertitels knipperen, maar het kan ertoe leiden dat de video opbouwer enkele video beelden overslaat."
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -889,9 +908,9 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Dempen"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
-msgstr ""
+msgstr "Dempen opheffen"
msgctxt "ID_VOLUME_MUTE_DISABLED"
msgid "No audio"
@@ -939,11 +958,11 @@ msgstr "Opties"
msgctxt "IDS_SHADERS_SELECT"
msgid "&Select Shaders..."
-msgstr ""
+msgstr "&Selecteer shaders"
msgctxt "IDS_SHADERS_DEBUG"
msgid "&Debug Shaders..."
-msgstr ""
+msgstr "&Foutopsporing shaders"
msgctxt "IDS_FAVORITES_ADD"
msgid "&Add to Favorites..."
@@ -954,11 +973,11 @@ msgid "&Organize Favorites..."
msgstr "Favorieten indelen..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr ""
+msgid "Sh&uffle"
+msgstr "Gehusseld"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Open bestandslocatie"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -987,15 +1006,15 @@ msgstr "Recente bestandenlijst leegmaken ?"
msgctxt "IDS_AG_EDL_SAVE"
msgid "EDL save"
-msgstr ""
+msgstr "EDL opslaan"
msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time Correction"
-msgstr "Maak Frame Tijd correctie mogelijk"
+msgstr "Maak beeld tijd correctie mogelijk"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
-msgstr "Schakel aan/uit EDL window"
+msgstr "Schakel aan / uit EDL scherm"
msgctxt "IDS_AG_EDL_IN"
msgid "EDL set In"
@@ -1003,7 +1022,7 @@ msgstr "EDL op In"
msgctxt "IDS_AG_EDL_OUT"
msgid "EDL set Out"
-msgstr "EDL op Out"
+msgstr "EDL op uit"
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
@@ -1027,7 +1046,7 @@ msgstr "PnS draaien Z-"
msgctxt "IDS_AG_TEARING_TEST"
msgid "Tearing Test"
-msgstr ""
+msgstr "Tearing test"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
@@ -1039,10 +1058,10 @@ msgstr "Zoom naar breedbeeld,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_ULTRAWIDE"
msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Zoom naar Ultra-breedbeeld,%.3f,%.3f,%.3f,%.3f"
+msgstr "Zoom naar ultra breedbeeld,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Bij volledig scherm verbergen"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1095,7 +1114,7 @@ msgstr "Auteur"
msgctxt "IDS_INFOBAR_COPYRIGHT"
msgid "Copyright"
-msgstr "Copyright"
+msgstr "Auteursrechten"
msgctxt "IDS_INFOBAR_RATING"
msgid "Rating"
@@ -1127,19 +1146,19 @@ msgstr "Toets"
msgctxt "IDS_AG_MOUSE"
msgid "Mouse Windowed"
-msgstr ""
+msgstr "Muis vast in scherm"
msgctxt "IDS_AG_MOUSE_FS"
msgid "Mouse Fullscreen"
-msgstr ""
+msgstr "Muis volledig scherm"
msgctxt "IDS_AG_APP_COMMAND"
msgid "App Command"
-msgstr "App Opdracht"
+msgstr "App opdracht"
msgctxt "IDS_AG_MEDIAFILES"
msgid "Media files (all types)"
-msgstr "Media bestanden (all types)"
+msgstr "Media bestanden (alle typen)"
msgctxt "IDS_AG_ALLFILES"
msgid "All files (*.*)|*.*|"
@@ -1147,7 +1166,7 @@ msgstr "All bestanden (*.*)|*.*|"
msgctxt "IDS_AG_AUDIOFILES"
msgid "Audio files (all types)"
-msgstr "Audio bestanden (all types)"
+msgstr "Audio bestanden (alle typen)"
msgctxt "IDS_AG_NOT_KNOWN"
msgid "Not known"
@@ -1155,7 +1174,7 @@ msgstr "Onbekend"
msgctxt "IDS_MPLAYERC_0"
msgid "Quick Open File"
-msgstr "Snel Bestand openen"
+msgstr "Snel bestand openen"
msgctxt "IDS_AG_OPEN_FILE"
msgid "Open File"
@@ -1163,39 +1182,39 @@ msgstr "Bestand openen"
msgctxt "IDS_AG_OPEN_DVD"
msgid "Open DVD/BD"
-msgstr "DVD/BD openen"
+msgstr "DVD / BD openen"
msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
msgid "Failed to set post-resize shaders"
-msgstr ""
+msgstr "Zetten voor veranderen shaders mislukt"
msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
msgid "Failed to set both pre-resize and post-resize shaders"
-msgstr ""
+msgstr "Zetten zowel voor veranderen als wachtende shaders, mislukt"
msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
msgid "Shaders are recompiled automatically when the corresponding files are modified."
-msgstr ""
+msgstr "Shader worden automatisch herberekend als bijbehorend bestand zijn veranderd."
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
-msgstr ""
+msgstr "Kan %s niet laden, pixel shaders zullen niet werken."
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
-msgstr ""
+msgstr "Kan benodigde ingangspunten van %s niet vinden, pixel shaders zullen niet werken."
msgctxt "IDS_OSD_SHADERS_PRESET"
msgid "Shader preset: %s"
-msgstr ""
+msgstr "Shader voorkeur: %s"
msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
msgid "Next Shader Preset"
-msgstr ""
+msgstr "Volgende shader voorinstelling"
msgctxt "IDS_AG_SHADERS_PRESET_PREV"
msgid "Prev Shader Preset"
-msgstr ""
+msgstr "Vorige shader voorinstelling"
msgctxt "IDS_STRING_COLON"
msgid "%s:"
@@ -1230,8 +1249,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr ""
+msgid "Add containing &folder"
+msgstr "Voeg bevattende map toe"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1239,23 +1258,23 @@ msgstr "[H/W]"
msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
msgid "Software Decoding"
-msgstr ""
+msgstr "Software decodering"
msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
msgid "Playback rate"
-msgstr ""
+msgstr "Afspeel snelheid"
msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
msgid "&Copy filters list to clipboard"
-msgstr ""
+msgstr "&Kopieer filters naar klembord"
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
-msgstr ""
+msgstr "Voer server inloggegevens in"
msgctxt "IDS_CREDENTIALS_CONNECT"
msgid "Enter your credentials to connect"
-msgstr ""
+msgstr "Voer je inloggegevens in om te verbinden"
msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
msgid "Save custom style"
@@ -1263,15 +1282,15 @@ msgstr "Sla aangepaste stijl op"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
-msgstr ""
+msgstr "Onderwijs / wetenschap / feitelijke onderwerpen"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
-msgstr ""
+msgstr "Verbergt besturingen en panelen in scherm mode."
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr ""
+msgstr "Voorkomt de externe ondertitel opbouwer wanneer interne actief is."
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
@@ -1279,31 +1298,31 @@ msgstr "Naam"
msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
msgid "Value"
-msgstr ""
+msgstr "Waarde"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr ""
+msgstr "Maximaal aantal te tonen bestanden in het \"Recente bestanden\" menu en waarvan de locatie is opgeslagen"
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
-msgstr ""
+msgstr "Onthoudt bestand locatie alléén voor bestanden langer dan N minuten."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
msgid "Remember file position also for audio files."
-msgstr ""
+msgstr "Onthoud de bestand locatie ook voor audio bestanden."
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
-msgstr ""
+msgstr "Niets doen"
msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
msgid "Play next file in the folder"
-msgstr ""
+msgstr "Speel volgend bestand af"
msgctxt "IDS_AFTER_PLAYBACK_REWIND"
msgid "Rewind current file"
-msgstr ""
+msgstr "Huidig bestand terugspoelen"
msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
msgid "Close"
@@ -1315,27 +1334,103 @@ msgstr "Afsluiten"
msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
msgid "Turn off the monitor"
-msgstr ""
+msgstr "Schakel de monitor uit"
msgctxt "IDS_IMAGE_JPEG_QUALITY"
msgid "JPEG Image"
-msgstr ""
+msgstr "JPEG afbeelding"
msgctxt "IDS_IMAGE_QUALITY"
msgid "Quality (%):"
-msgstr ""
+msgstr "Kwaliteit (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
-msgstr ""
+msgstr "Maximum grootte (NxNpx) van een geladen omslag afbeelding alléén in audio mode."
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr ""
+msgstr "De ondertiteling vertraging wordt verlaagd / verhoogd met deze waarde telkens wanneer de corresponderende sneltoetsen worden gebruikt (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<niet gedefinieerd>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Bekijk"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Omhoog"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Omlaag"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sorteer op LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Verwijder alles"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Weet u zeker dat u alle kanalen van de lijst wilt verwijderen?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Geen informatie beschikbaar"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Even geduld, analyse bezig..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Aanzetten loggen naar bestand (vereist een restart)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Resterende tijd"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Hoge precisie"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Na afspelen: Spoel huidig bestand terug"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Na afspelen: Sluiten"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "PMC-HC kwam een fout tegen tijdens het initialiseren. Met uw hulp kunnen mogelijk het \"probleem\" herstellen.\nWil je het rapporteren?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Geef een positieve waarde, indien audio te vroeg is een negatieve waarde als het te laat is."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Voorbeeld momenteel uitgezet. Je kunt het aanzetten in de MPC-HC opties."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Deze optie kan worden gebruikt om media bestanden te bekijken vanaf externe locatie. Gebruik het alleen op een goed beveiligd privé-netwerk.\n\nWil je echt deze optie inschakelen?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Interne ondertitel opbouwer"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1357,13 +1452,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Afbeelding succesvol opgeslagen"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Ondertiteling laden"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Laden ondertitels..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Ondertiteling opslaan"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Opslaan ondertitels..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1375,7 +1470,7 @@ msgstr "Afsluiten"
msgctxt "IDS_AG_PLAYPAUSE"
msgid "Play/Pause"
-msgstr "Afspelen/Pauze"
+msgstr "Afspelen / Pauze"
msgctxt "IDS_AG_PLAY"
msgid "Play"
@@ -1386,12 +1481,12 @@ msgid "Stop"
msgstr "Stoppen"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "Frame vooruit"
+msgid "Frame-step"
+msgstr "Beeld vooruit"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "Frame terug"
+msgid "Frame-step back"
+msgstr "Beeld terug"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
@@ -1403,7 +1498,7 @@ msgstr "Sneller"
msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
msgid "Show/Game show"
-msgstr ""
+msgstr "Shows / Spel programma's"
msgctxt "IDS_CONTENT_SPORTS"
msgid "Sports"
@@ -1411,27 +1506,27 @@ msgstr "Sport"
msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
msgid "Children's/Youth programmes"
-msgstr ""
+msgstr "Kinder / jeugdprogramma's"
msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
msgid "Music/Ballet/Dance"
-msgstr ""
+msgstr "Muziek / Ballet / Dans"
msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
msgid "Arts/Culture"
-msgstr ""
+msgstr "Kunst / Cultuur"
msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
msgid "Social/Political issues/Economics"
-msgstr ""
+msgstr "Sociaal / Politiek / Economie"
msgctxt "IDS_CONTENT_LEISURE"
msgid "Leisure hobbies"
-msgstr ""
+msgstr "Ontspanningshobby's"
msgctxt "IDS_FILE_RECYCLE"
msgid "Move to Recycle Bin"
-msgstr ""
+msgstr "Verplaats naar prullenbak"
msgctxt "IDS_AG_SAVE_COPY"
msgid "Save a Copy"
@@ -1439,63 +1534,63 @@ msgstr "Kopie opslaan"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
-msgstr ""
+msgstr "Laatste sleutelbeeld"
msgctxt "IDS_FASTSEEK_NEAREST"
msgid "Nearest keyframe"
-msgstr ""
+msgstr "Dichtstbijzijnde sleutelbeeld"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
-msgstr ""
+msgstr "MPC-HC kwam een probleem tegen tijdens initialisatie. DVD afspelen kan mogelijk niet goed werken. Dit kan worden veroorzaakt door een aantal onverenigbaarheden met bepaalde beveiligingsmiddelen.\n\nWil je dit feit rapporteren?"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
-msgstr ""
+msgstr "Nooit tonen"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
msgid "Show when moving the cursor, hide after:"
-msgstr ""
+msgstr "Toon aanwijzer tijdens bewegen, verberg na:"
msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
msgid "Show when hovering control, hide after:"
-msgstr ""
+msgstr "Toon \"hover over\" tekst, verberg na:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
-msgstr ""
+msgstr "Instellen voor veranderen shaders mislukt"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
-msgstr ""
+msgstr "Beeld tijdcorrectie: Aan"
msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
msgid "Frame Time Correction: Off"
-msgstr ""
+msgstr "Beeld tijdcorrectie: Uit"
msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
msgid "Target VSync Offset: %.1f"
-msgstr ""
+msgstr "Doel VSync compensatie: %.1f"
msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
msgid "VSync Offset: %d"
-msgstr ""
+msgstr "VSync compensatie: %d"
msgctxt "IDS_OSD_SPEED"
msgid "Speed: %.2lfx"
-msgstr ""
+msgstr "Snelheid: %.2lfx"
msgctxt "IDS_OSD_THUMBS_SAVED"
msgid "Thumbnails saved successfully"
msgstr "Miniatuurweergaven succesvol opgeslagen"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Video S&tream"
+msgid "Vide&o Track"
+msgstr "&Videospoor"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
-msgstr ""
+msgstr "Video hoek"
msgctxt "IDS_RESET_SETTINGS"
msgid "Reset settings"
@@ -1503,11 +1598,11 @@ msgstr "Instellingen resetten"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr ""
+msgstr "Weet je zeker dat je MPC-HC wilt herstellen naar de standaardinstellingen?\nWees gewaarschuwd, dat al uw huidige instellingen verloren zullen gaan!"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr ""
+msgstr "Sluit alle exemplaren van MPC-HC, zodat de standaardinstellingen kunnen worden hersteld."
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
@@ -1515,19 +1610,19 @@ msgstr "Exporteer instellingen"
msgctxt "IDS_EXPORT_SETTINGS_WARNING"
msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
-msgstr ""
+msgstr "Sommige veranderingen zijn nog niet bewaard.\nWil je die bewaren voordat je die exporteert? "
msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
msgid "The settings have been successfully exported."
-msgstr ""
+msgstr "De instellingen zijn succesvol geëxporteerd."
msgctxt "IDS_EXPORT_SETTINGS_FAILED"
msgid "The export failed! This can happen when you don't have the correct rights."
-msgstr ""
+msgstr "Exporteren mislukt! Dit kan gebeuren als U niet de correcte rechten heeft."
msgctxt "IDS_BDA_ERROR"
msgid "BDA Error"
-msgstr ""
+msgstr "BDA fout"
msgctxt "IDS_AG_DECREASE_RATE"
msgid "Decrease Rate"
@@ -1538,11 +1633,11 @@ msgid "Reset Rate"
msgstr "Normaal"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Audio vertragingDelay +10ms"
+msgid "Audio Delay +10 ms"
+msgstr "Audio vertraging +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Audio vertraging -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1571,11 +1666,11 @@ msgstr "Spring terug (lang)"
msgctxt "IDS_MPLAYERC_29"
msgid "Jump Forward (keyframe)"
-msgstr "Spring verder (keyframe)"
+msgstr "Spring verder (sleutelbeeld)"
msgctxt "IDS_MPLAYERC_30"
msgid "Jump Backward (keyframe)"
-msgstr "Spring terug (keyframe)"
+msgstr "Spring terug (sleutelbeeld)"
msgctxt "IDS_AG_NEXT"
msgid "Next"
@@ -1587,23 +1682,23 @@ msgstr "Vorige"
msgctxt "IDS_AG_NEXT_FILE"
msgid "Next File"
-msgstr "Volgend Bestand"
+msgstr "Volgend bestand"
msgctxt "IDS_AG_PREVIOUS_FILE"
msgid "Previous File"
-msgstr "Vorig Bestand"
+msgstr "Vorig bestand"
msgctxt "IDS_MPLAYERC_99"
msgid "Toggle Direct3D fullscreen"
-msgstr "Direct3D Volledig Scherm aan/uit"
+msgstr "Direct3D volledig scherm aan / uit"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
-msgstr "Vorige Ondertiteling"
+msgstr "Vorige ondertitel"
msgctxt "IDS_MPLAYERC_101"
msgid "Goto Next Subtitle"
-msgstr "Volgende Ondertiteling"
+msgstr "Volgende ondertitel"
msgctxt "IDS_MPLAYERC_102"
msgid "Shift Subtitle Left"
@@ -1613,37 +1708,77 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Ondertiteling naar rechts"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Statistieken tonen"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
-msgstr "Spring naar Begin"
+msgstr "Spring naar begin"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Toon bestandsnaam"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "DVD afspelen"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "BD afspelen"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Opbouw statistieken weergeven"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Opbouw statistieken resetten"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Ondertiteling::Misc"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Verberg randen"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Beeld alléé&n"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Toon Caption&&Menu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Verberg menu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Geavanceerd"
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
-msgstr "Minimaal Beeld"
+msgstr "Minimaal beeld"
msgctxt "IDS_AG_VIEW_COMPACT"
msgid "View Compact"
-msgstr "Compact Beeld"
+msgstr "Compact beeld"
msgctxt "IDS_AG_VIEW_NORMAL"
msgid "View Normal"
-msgstr "Standaard Beeld"
+msgstr "Standaard beeld"
msgctxt "IDS_AG_FULLSCREEN"
msgid "Fullscreen"
-msgstr "Volledig Scherm"
+msgstr "Volledig scherm"
msgctxt "IDS_MPLAYERC_39"
msgid "Fullscreen (w/o res.change)"
-msgstr "Volledig Scherm (zelfde resolutie)"
+msgstr "Volledig scherm (zelfde resolutie)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT"
msgid "Zoom Auto Fit"
-msgstr "Autom. passend"
+msgstr "Automatisch passend"
msgctxt "IDS_AG_VIDFRM_HALF"
msgid "VidFrm Half"
@@ -1686,24 +1821,24 @@ msgid "PnS Dec Height"
msgstr "PnS Dec Hoogte"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr ""
+msgid "Downloading [%s] \"%s\""
+msgstr "Ophalen [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
-msgstr ""
+msgstr "Lijst verwerken..."
msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
msgid "No subtitles found."
msgstr "Geen ondertitels gevonden."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr ""
+msgid "%d subtitle(s) available."
+msgstr "%d ondertitel(s) beschikbaar."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr ""
+msgstr "Wilt u automatisch controleren op opwaarderingen voor MPC-HC?\n\nDit kan later worden uitgeschakeld in de opties bij pagina \"Overige\" "
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1719,35 +1854,35 @@ msgstr "200%"
msgctxt "IDS_ZOOM_AUTOFIT"
msgid "Auto Fit"
-msgstr ""
+msgstr "Automatisch passend"
msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (Larger Only)"
-msgstr ""
+msgstr "Automatiisch passend (alléén groter)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
msgid "Zoom Auto Fit (Larger Only)"
-msgstr ""
+msgstr "Zoom auto passend (alléén groter)"
msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
msgid "Zoom: Auto (Larger Only)"
-msgstr ""
+msgstr "Zoom: Auto (alléén groter)"
msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
msgid "Double click to open file location"
-msgstr ""
+msgstr "Dubbelklik om bestandlocatie te openen"
msgctxt "IDS_TOOLTIP_REMAINING_TIME"
msgid "Toggle between elapsed and remaining time"
-msgstr ""
+msgstr "Schakel tussen verstreken en resterende tijd"
msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
msgid "Invalid delay"
-msgstr ""
+msgstr "Ongeldige vertraging"
msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
msgid "Please enter a number between 1 and 365."
-msgstr ""
+msgstr "Voer een getal in tussen 1 en 365"
msgctxt "IDS_AG_PNS_CENTER"
msgid "PnS Center"
@@ -1787,7 +1922,7 @@ msgstr "PnS laag/rechts"
msgctxt "IDS_AG_VOLUME_UP"
msgid "Volume Up"
-msgstr "Volume omhooh"
+msgstr "Volume omhoog"
msgctxt "IDS_AG_VOLUME_DOWN"
msgid "Volume Down"
@@ -1799,19 +1934,19 @@ msgstr "Volume dempen"
msgctxt "IDS_MPLAYERC_63"
msgid "DVD Title Menu"
-msgstr "DVD Titel Menu"
+msgstr "DVD titel menu"
msgctxt "IDS_AG_DVD_ROOT_MENU"
msgid "DVD Root Menu"
-msgstr ""
+msgstr "DVD Root menu"
msgctxt "IDS_MPLAYERC_65"
msgid "DVD Subtitle Menu"
-msgstr "DVD Ondertitelings Menu"
+msgstr "DVD ondertitel menu"
msgctxt "IDS_MPLAYERC_66"
msgid "DVD Audio Menu"
-msgstr "DVD Audio Menu"
+msgstr "DVD audio menu"
msgctxt "IDS_MPLAYERC_67"
msgid "DVD Angle Menu"
@@ -1819,127 +1954,111 @@ msgstr "DVD Camerahoek Menu"
msgctxt "IDS_MPLAYERC_68"
msgid "DVD Chapter Menu"
-msgstr "DVD Hoofdstuk Menu"
+msgstr "DVD hoofdstuk menu"
msgctxt "IDS_AG_DVD_MENU_LEFT"
msgid "DVD Menu Left"
-msgstr "DVD Menu links"
+msgstr "DVD menu links"
msgctxt "IDS_MPLAYERC_70"
msgid "DVD Menu Right"
-msgstr "DVD Menu rechts"
+msgstr "DVD menu rechts"
msgctxt "IDS_AG_DVD_MENU_UP"
msgid "DVD Menu Up"
-msgstr "DVD Menu omhoog"
+msgstr "DVD menu omhoog"
msgctxt "IDS_AG_DVD_MENU_DOWN"
msgid "DVD Menu Down"
-msgstr "DVD Menu omlaag"
+msgstr "DVD menu omlaag"
msgctxt "IDS_MPLAYERC_73"
msgid "DVD Menu Activate"
-msgstr "DVD Menu Activeer"
+msgstr "DVD menu activeer"
msgctxt "IDS_AG_DVD_MENU_BACK"
msgid "DVD Menu Back"
-msgstr "DVD Menu terug"
+msgstr "DVD menu terug"
msgctxt "IDS_MPLAYERC_75"
msgid "DVD Menu Leave"
-msgstr "DVD Menu verlaten"
+msgstr "DVD menu verlaten"
msgctxt "IDS_AG_BOSS_KEY"
msgid "Boss key"
msgstr "Boss toets"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Weergave Menu (kort)"
+msgid "Player Menu"
+msgstr "Speler menu"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Weergave Menu (lang)"
+msgid "Player Menu (full)"
+msgstr "Speler menu (volledig)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
-msgstr "Filters Menu"
+msgstr "Filters menu"
msgctxt "IDS_AG_OPTIONS"
msgid "Options"
msgstr "Opties"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Volgende Audio"
+msgid "Next Audio Track"
+msgstr "Volgend geluidsspoor"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Vorige Audio"
+msgid "Prev Audio Track"
+msgstr "Vorig geluidsspoor"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Volgende Ondertiteling"
+msgid "Next Subtitle Track"
+msgstr "Volgend ondertitelingsspoor"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Vorige Ondertiteling"
+msgid "Prev Subtitle Track"
+msgstr "Vorig ondertitelingsspoor"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
-msgstr "Aan/Uit Ondertiteling"
+msgstr "Ondertiteling Aan/Uit"
msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
-msgstr "Herlaad Ondertiteling"
-
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Volgende Audio (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Vorige Audio (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Volgende Ondertiteling (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Vorige Ondertiteling (OGM)"
+msgstr "Herlaad ondertitel"
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
-msgstr "Volgende Camerahoek (DVD)"
+msgstr "Volgende camerahoek (DVD)"
msgctxt "IDS_MPLAYERC_92"
msgid "Prev Angle (DVD)"
-msgstr "Vorige Camerahoek (DVD)"
+msgstr "Vorige camerahoek (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Volgende Audio (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Volgende audio spoor (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Vorige Audio (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Vorig audio spoor (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Volgende Ondertiteling (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Volgende ondertitel spoor (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Vorige Ondertiteling (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Vorige ondertitel spoor (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "On/Off Ondertiteling (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Resterende Tijd"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Toon huidige tijd"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2084,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Gecodeerd"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Ja"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Nee"
@@ -1983,11 +2102,11 @@ msgstr "Stoppen"
msgctxt "IDS_DVB_TVNAV_SEERADIO"
msgid "Radio stations"
-msgstr ""
+msgstr "Radio stations"
msgctxt "IDS_DVB_TVNAV_SEETV"
msgid "TV stations"
-msgstr ""
+msgstr "TV stations"
msgctxt "IDS_DVB_CHANNEL_FORMAT"
msgid "Format"
@@ -2007,7 +2126,7 @@ msgstr "Kan Ondertiteling niet opslaan"
msgctxt "IDS_AG_FRAMERATE"
msgid "Frame rate"
-msgstr "Framesnelheid"
+msgstr "Beeld snelheid"
msgctxt "IDS_MAINFRM_6"
msgid "drawn: %d, dropped: %d"
@@ -2015,27 +2134,27 @@ msgstr "gemaakt: %d, verworpen: %d"
msgctxt "IDS_AG_FRAMES"
msgid "Frames"
-msgstr ""
+msgstr "Beelden"
msgctxt "IDS_AG_BUFFERS"
msgid "Buffers"
-msgstr ""
+msgstr "Buffers"
msgctxt "IDS_MAINFRM_9"
msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volume: %02lu/%02lu, Title: %02lu/%02lu, Hoofdstuk: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Camerahoek: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
-msgstr "Toevoegen aan MPC-HC Afspeellijst"
+msgstr "Toevoegen aan MPC-HC afspeellijst"
msgctxt "IDS_OPEN_WITH_MPC"
msgid "Play with MPC-HC"
@@ -2043,11 +2162,11 @@ msgstr "Afspelen met MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr ""
+msgstr "MPC-HC heeft niet genoeg rechten om bestand associaties te veranderen. Klik op \"Uitvoeren als Administrateur\"."
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr ""
+msgstr "MPC-HC is een extreem lichtgewicht, open source media speler voor Windows. Het ondersteunt alle bekende, speelbare video en audio bestandsformaten. Wij zijn 100% spyware vrij, er zijn geen advertenties of werkbalken."
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2063,39 +2182,39 @@ msgstr "Titel %u"
msgctxt "IDS_MAINFRM_16"
msgid "DVD: Unexpected error"
-msgstr "DVD: Onverwachte Fout"
+msgstr "DVD: Onverwachte fout"
msgctxt "IDS_MAINFRM_17"
msgid "DVD: Copy-Protect Fail"
-msgstr "DVD: Copy-Protectie Fout"
+msgstr "DVD: Kopieer bescherming fout"
msgctxt "IDS_MAINFRM_18"
msgid "DVD: Invalid DVD 1.x Disc"
-msgstr "DVD: Ongeldige DVD 1.x Disk"
+msgstr "DVD: Ongeldige DVD 1.x disk"
msgctxt "IDS_MAINFRM_19"
msgid "DVD: Invalid Disc Region"
-msgstr "DVD: Ongeldige Disk-Regio"
+msgstr "DVD: Ongeldige disk-regio"
msgctxt "IDS_MAINFRM_20"
msgid "DVD: Low Parental Level"
-msgstr "DVD: Te laag Niveau Ouderlijk Toezicht"
+msgstr "DVD: Te laag niveau ouderlijk toezicht"
msgctxt "IDS_MAINFRM_21"
msgid "DVD: Macrovision Fail"
-msgstr "DVD: Macrovision Fout"
+msgstr "DVD: Macrovision fout"
msgctxt "IDS_MAINFRM_22"
msgid "DVD: Incompatible System And Decoder Regions"
-msgstr "DVD: Incompatibele Systeem en Decoder Regio's"
+msgstr "DVD: Incompatibele systeem en decoder regio's"
msgctxt "IDS_MAINFRM_23"
msgid "DVD: Incompatible Disc And Decoder Regions"
-msgstr "DVD: Incompatibele Disk en Decoder Regio's"
+msgstr "DVD: Incompatibele disk en decoder regio's"
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying context menus and dialog boxes during playback.\n\nDo you really want to activate this option?"
+msgstr "Deze optie is ontwikkeld om \"verscheuring\" te voorkomen. Het zal echter ook voorkomen dat MPC-HC de menu inhoud en dialoogvensters kan weergeven tijdens het afspelen.\n\nWil je echt deze optie te activeren?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
@@ -2119,15 +2238,7 @@ msgstr "Kolommen:"
msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
-msgstr ""
-
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL geverifieerd!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Protocolversie komt niet overeen, s.v.p. uw speler updaten of een andere server ingeven!"
+msgstr "Beeldbreedte"
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
@@ -2135,27 +2246,27 @@ msgstr "Beeldverhouding"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
-msgstr ", Totaal: %ld, Verworpen: %ld"
+msgstr ", Totaal: %ld, verworpen: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Grootte: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Grootte: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Beschikbaar: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Beschikbaar: %I64dMB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
-msgstr ",Beschikbare V/A Buffers: %03d/%03d"
+msgstr ", Beschikbare V/A buffers: %03d/%03d"
msgctxt "IDS_AG_ERROR"
msgid "Error"
@@ -2171,7 +2282,7 @@ msgstr "Ondertiteling: %s"
msgctxt "IDS_MAINFRM_46"
msgid "Select the path for the DVD/BD:"
-msgstr "Kies het pad naar de DVD/BD:"
+msgstr "Kies het pad naar de DVD / BD:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
@@ -2187,7 +2298,7 @@ msgstr "GetDIB niet gelukt, hr = %08x"
msgctxt "IDS_GETCURRENTIMAGE_FAILED"
msgid "GetCurrentImage failed, hr = %08x"
-msgstr "GetCurrentImage niet gelukt, hr = %08x"
+msgstr "GetCurrentImage mislukt, hr = %08x"
msgctxt "IDS_SCREENSHOT_ERROR"
msgid "Cannot create file"
@@ -2207,7 +2318,7 @@ msgstr "Te weinig geheugen!"
msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
-msgstr "Ongeldig Beeldformaat, kan geen miniaaturweergaven maken van %d bpp dibs."
+msgstr "Ongeldig beeldformaat, kan geen miniaaturweergaven maken van %d bpp dibs."
msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
msgid "File Size: %s (%s bytes)\\N"
@@ -2219,26 +2330,26 @@ msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Bestandsnaam: %s\\N%sResolut
msgctxt "IDS_THUMBNAIL_TOO_SMALL"
msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
-msgstr ""
+msgstr "Miniatuur zou te klein zijn, onmogelijk bestand aan te maken.\nProbeer aantal miniaturen te verlagen of verhoog de totale grootte."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr ""
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Om de ondertiteling te laden verander de video opbouw type en heropen het bestand.\n- DirectShow: VMR-9 (opbouwloos), EVR (CP), Sync, madVR of Haali\n- RealMedia: Speciale opbouwer voor RealMedia, of open het met DirectShow\n- QuickTime: DX7 of DX9 opbouwer voor QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
-msgstr ""
+msgstr "Ondertiteling bestanden"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
msgstr "Beeldverhouding: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Beeldverhouding: Default"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Beeldverhouding: Standaard (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Audio vertraging: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2250,8 +2361,8 @@ msgid "Out of memory"
msgstr "Te weinig geheugen"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Fout: Flash voor IE vereist"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Fout: Flash voor Internet Explorer vereist"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2259,7 +2370,7 @@ msgstr "QuickTime niet ondersteund op een x64 systeem"
msgctxt "IDS_MAINFRM_80"
msgid "Failed to create the filter graph object"
-msgstr "Kon het filter graph object niet maken"
+msgstr "Kon het filter grafiek object niet maken"
msgctxt "IDS_MAINFRM_81"
msgid "Invalid argument"
@@ -2271,11 +2382,7 @@ msgstr "Openen gestopt"
msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
-msgstr "Kon bestand niet renderen"
-
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Ondertitelings-database kon op deze URL niet gevonden worden!"
+msgstr "Kon bestand niet opbouwen"
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
@@ -2287,7 +2394,7 @@ msgstr "Vol: %d%%"
msgctxt "IDS_BOOST_OSD"
msgid "Boost: +%u%%"
-msgstr "Boost: +%u%%"
+msgstr "Versterking: +%u%%"
msgctxt "IDS_BALANCE_OSD"
msgid "Balance: %s"
@@ -2297,14 +2404,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Huidig"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr ""
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Dumpbestand '%s' kon niet gemaakt worden (fout %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Map kiezen"
@@ -2319,15 +2418,15 @@ msgstr "Pauze"
msgctxt "IDS_AG_TOGGLE_CAPTION"
msgid "Toggle Caption&Menu"
-msgstr "Titel&Menu aan/uit"
+msgstr "Titel&Menu aan / uit"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
-msgstr "Zoeken aan/uit"
+msgid "Toggle Seek Bar"
+msgstr "Zoeken aan / uit"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
msgid "Toggle Controls"
-msgstr "Knoppen aan/uit"
+msgstr "Knoppen aan / uit"
msgctxt "IDS_MAINFRM_84"
msgid "Invalid file name"
@@ -2339,11 +2438,11 @@ msgstr "Kan geen verbinding maken met filters"
msgctxt "IDS_MAINFRM_87"
msgid "Cannot load any source filter"
-msgstr "Kan source filter niet laden"
+msgstr "Kan bron filter niet laden"
msgctxt "IDS_MAINFRM_88"
msgid "Cannot render the file"
-msgstr "Kan bestand niet renderen"
+msgstr "Kan bestand niet opbouwen"
msgctxt "IDS_MAINFRM_89"
msgid "Invalid file format"
@@ -2363,11 +2462,11 @@ msgstr "Formaat niet ondersteund"
msgctxt "IDS_MAINFRM_93"
msgid "Cannot find DVD directory"
-msgstr "Kan DVD-map niet vinden"
+msgstr "Kan DVD map niet vinden"
msgctxt "IDS_MAINFRM_94"
msgid "Can't create the DVD Navigator filter"
-msgstr "Kan DVD-navigatie filter niet maken"
+msgstr "Kan DVD navigatie filter niet maken"
msgctxt "IDS_AG_FAILED"
msgid "Failed"
@@ -2375,11 +2474,11 @@ msgstr "Niet gelukt"
msgctxt "IDS_MAINFRM_96"
msgid "Can't create video capture filter"
-msgstr "Kan Video Capture Filter niet maken"
+msgstr "Kan video afvang filter niet maken"
msgctxt "IDS_MAINFRM_98"
msgid "No capture filters"
-msgstr "Geen Capture Filters gevonden"
+msgstr "Geen afvang filters gevonden"
msgctxt "IDS_MAINFRM_99"
msgid "Can't create capture graph builder object"
@@ -2387,15 +2486,15 @@ msgstr "Kan Capture Graph Builder Object niet maken"
msgctxt "IDS_MAINFRM_108"
msgid "Couldn't open any device"
-msgstr "Kon heen apparaat openen"
+msgstr "Kon geen apparaat openen"
msgctxt "IDS_AG_SOUND"
msgid "Sound"
-msgstr "audio"
+msgstr "Geluid"
msgctxt "IDS_MAINFRM_114"
msgid "%s was not found, please insert media containing this file."
-msgstr "%s niet gevonden, stop media met dit bestand erin s.v.p."
+msgstr "%s is niet gevonden, stop media met dit bestand erin s.v.p."
msgctxt "IDS_AG_ABORTED"
msgid "Aborted"
@@ -2423,15 +2522,15 @@ msgstr "VSync"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr " (Regisseur Commentaar 1)"
+msgstr " (Regisseur commentaar 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr " (Regisseur Commentaar 2)"
+msgstr " (Regisseur commentaar 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr ""
+msgstr "DVD ondertiteling inschakelen"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
@@ -2439,7 +2538,7 @@ msgstr "Camerahoek %u"
msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
msgid "Increase VSync Offset"
-msgstr "Verhoog VSync offset"
+msgstr "Verhoog VSync compensatie"
msgctxt "IDS_AG_DISABLED"
msgid "Disabled"
@@ -2447,11 +2546,11 @@ msgstr "Gedeactiveerd"
msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
msgid "Decrease VSync Offset"
-msgstr "Verlaag VSync offset"
+msgstr "Verlaag VSync compensatie"
msgctxt "IDS_MAINFRM_136"
msgid "MPC-HC D3D Fullscreen"
-msgstr "MPC-HC D3D Volledig Scherm"
+msgstr "MPC-HC D3D volledig scherm"
msgctxt "IDS_MAINFRM_137"
msgid "Unknown format"
@@ -2463,23 +2562,23 @@ msgstr "Ondertitelingsverschuiving: %ld ms"
msgctxt "IDS_VOLUME_BOOST_INC"
msgid "Volume boost increase"
-msgstr "Volume boost verhogen"
+msgstr "Volume versterking verhogen"
msgctxt "IDS_VOLUME_BOOST_DEC"
msgid "Volume boost decrease"
-msgstr "Volume boost verlagen"
+msgstr "Volume versterking verlagen"
msgctxt "IDS_VOLUME_BOOST_MIN"
msgid "Volume boost Min"
-msgstr ""
+msgstr "Volume versterking min"
msgctxt "IDS_VOLUME_BOOST_MAX"
msgid "Volume boost Max"
-msgstr ""
+msgstr "Volume versterking max"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Gebruik: mpc-hc.exe \"padnaam\" [parameters]\n\n\"padnaam\"\tHet te laden bestand of map (wildcards\n\t\ttoegestaan, \"-\" denotes standard input)\n/dub \"dubnaam\"\tLaad nog een geluidsbestand\n/dubdelay \"best\"\tLaad nog een geluidsbestand met een\n\t\tverschuiving van XXms\n\t\t (als bestand \"..vertraging XXms..\" heeft)\n/d3dfs\t\tStart renderen in D3D Volledig Scherm modus\n/sub \"ondertitel\"\tLaad nog een ondertitelingsbestand\n/filter \"filternaam\"\tLaad DirectShow filters van een DLL\n\t\t(wildcards toegestaan)\n/dvd\t\tStart in DVD-modus, \"padnaam\" betekent de DVD\n\t\tmap (hoeft niet)\n/dvdpos T#H\tStart afspelen bij titel T, hoofdstuk H\n/dvdpos T#uu:mm\tStart afspelen bij titel T, positie uu:mm:ss\n/cd\t\tLaad alle nummers van een audio cd of (s)vcd\n\t\t\"padnaam\" betekent het stationspad (hoeft niet)\n/device\t\tOpen the default video device\n/open\t\tOpen het bestand zonder automatisch af te spelen\n/play\t\tDirect afspelen, wanneer de speler wordt geopend\n/close\t\tSluit de speler af na afspelen (werkt alleen samen \n\t\tmet /play)\n/shutdown\tWindows afsluiten na afspelen\n/fullscreen\tStart in Volldig Scherm modus\n/minimized\tStart geminimaliseerd\n/new\t\tEen nieuwe speler openen\n/add\t\tVoegt \"padnaam\" aan de afspeellijst toe\n\t\tKan gecombineerd worden met /open en /play\n/regvid\t\tMaak bestandskoppelingen voor videobestanden\n/regaud\t\tMaak bestandskoppelingen voor\n\t\tgeluidsbestanden\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tVerwijder alle bestandskoppelingen\n/start ms\t\tStart afspelen op \"ms\" (= milliseconden)\n/startpos uu:mm:ss\tStart afspelen op positie uu:mm:ss\n/fixedsize B,H\tZet venstergrootte op BxH\n/monitor N\tStart op schermmonitor N (N start bij 1)\n/audiorenderer N\tStart met audiorenderer N (N start bij 1)\n\t\t(zie \"Uitgangs\" instellingen)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tToon help over opdrachtprompt parameters\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Gebruik: mpc-hc.exe \"padnaam\" [parameters]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2487,31 +2586,31 @@ msgstr "Onbekende parameter(s) in opdrachtprompt: \n\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
-msgstr "Informatie aan/uit"
+msgstr "Informatie aan / uit"
msgctxt "IDS_AG_TOGGLE_STATS"
msgid "Toggle Statistics"
-msgstr "Statistieken aan/uit"
+msgstr "Statistieken aan / uit"
msgctxt "IDS_AG_TOGGLE_STATUS"
msgid "Toggle Status"
-msgstr "Status aan/uit"
+msgstr "Status aan / uit"
msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
msgid "Toggle Subresync Bar"
-msgstr "Ondertitelingsresyncbalk aan/uit"
+msgstr "Ondertitelingsresyncbalk aan / uit"
msgctxt "IDS_AG_TOGGLE_PLAYLIST"
msgid "Toggle Playlist Bar"
-msgstr "Afspeellijstbalk aan/uit"
+msgstr "Afspeellijstbalk aan / uit"
msgctxt "IDS_AG_TOGGLE_CAPTURE"
msgid "Toggle Capture Bar"
-msgstr "Opnamebalk aan/uit"
+msgstr "Opnamebalk aan / uit"
msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
msgid "Toggle Debug Shaders"
-msgstr ""
+msgstr "Schakelen tussen foutzoek informatie shaders"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
@@ -2527,7 +2626,7 @@ msgstr "Zoom 200%"
msgctxt "IDS_AG_NEXT_AR_PRESET"
msgid "Next AR Preset"
-msgstr "Volgende AR Profiel"
+msgstr "Volgende AR profiel"
msgctxt "IDS_AG_VIDFRM_STRETCH"
msgid "VidFrm Stretch"
@@ -2543,7 +2642,7 @@ msgstr "VidFrm Buiten"
msgctxt "IDS_AG_PNS_RESET"
msgid "PnS Reset"
-msgstr ""
+msgstr "PnS reset"
msgctxt "IDS_AG_PNS_ROTATEX_P"
msgid "PnS Rotate X+"
@@ -2551,155 +2650,119 @@ msgstr "PnS Rotatie X+"
msgctxt "IDS_AG_VIDFRM_ZOOM1"
msgid "VidFrm Zoom 1"
-msgstr ""
+msgstr "VidFrm Zoom 1"
msgctxt "IDS_AG_VIDFRM_ZOOM2"
msgid "VidFrm Zoom 2"
-msgstr ""
+msgstr "VidFrm Zoom 2 "
msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
msgid "VidFrm Switch Zoom"
-msgstr ""
+msgstr "VidFrm Switch Zoom"
msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Activeer alle filters"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Tuner afzoeken"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Ondertiteling niet geladen of geen ondersteunde renderer."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Auteur onbekend. Neem contact op als je dit logo hebt gemaakt!"
msgctxt "IDS_NO_MORE_MEDIA"
msgid "No more media in the current folder."
-msgstr ""
+msgstr "Geen media meer in de huidige folder."
msgctxt "IDS_FIRST_IN_FOLDER"
msgid "The first file of the folder is already loaded."
-msgstr ""
+msgstr "Het eerste bestand in de folder is al geladen."
msgctxt "IDS_LAST_IN_FOLDER"
msgid "The last file of the folder is already loaded."
-msgstr ""
+msgstr "Het laatste bestand in de folder is al geladen."
msgctxt "IDS_FRONT_LEFT"
msgid "Front Left"
-msgstr "Voor Links"
+msgstr "Voor links"
msgctxt "IDS_FRONT_RIGHT"
msgid "Front Right"
-msgstr "Voor Rechts"
+msgstr "Voor rechts"
msgctxt "IDS_FRONT_CENTER"
msgid "Front Center"
-msgstr "Voor Midden"
+msgstr "Voor midden"
msgctxt "IDS_LOW_FREQUENCY"
msgid "Low Frequency"
-msgstr "Lage Frequentie"
+msgstr "Lage frequentie"
msgctxt "IDS_BACK_LEFT"
msgid "Back Left"
-msgstr "Achter Links"
+msgstr "Achter links"
msgctxt "IDS_BACK_RIGHT"
msgid "Back Right"
-msgstr "Achter Rechts"
+msgstr "Achter rechts"
msgctxt "IDS_FRONT_LEFT_OF_CENTER"
msgid "Front Left of Center"
-msgstr "Voor Links van Midden"
+msgstr "Voor links van midden"
msgctxt "IDS_FRONT_RIGHT_OF_CENTER"
msgid "Front Right of Center"
-msgstr "Voor Rechts van Midden"
+msgstr "Voor rechts van midden"
msgctxt "IDS_BACK_CENTER"
msgid "Back Center"
-msgstr "Achter Midden"
+msgstr "Achter midden"
msgctxt "IDS_SIDE_LEFT"
msgid "Side Left"
-msgstr "Zijkant Links"
+msgstr "Zijkant links"
msgctxt "IDS_SIDE_RIGHT"
msgid "Side Right"
-msgstr "Zijkant Rechts"
+msgstr "Zijkant rechts"
msgctxt "IDS_TOP_CENTER"
msgid "Top Center"
-msgstr "Top Midden"
+msgstr "Top midden"
msgctxt "IDS_TOP_FRONT_LEFT"
msgid "Top Front Left"
-msgstr "Top Front Links"
+msgstr "Top voor links"
msgctxt "IDS_TOP_FRONT_CENTER"
msgid "Top Front Center"
-msgstr "Top Front Midden"
+msgstr "Top voor midden"
msgctxt "IDS_TOP_FRONT_RIGHT"
msgid "Top Front Right"
-msgstr "Top Front Rechts"
+msgstr "Top voor rechts"
msgctxt "IDS_TOP_BACK_LEFT"
msgid "Top Back Left"
-msgstr "Top Back Links"
+msgstr "Top achter links"
msgctxt "IDS_TOP_BACK_CENTER"
msgid "Top Back Center"
-msgstr "Top Back Midden"
+msgstr "Top achter midden"
msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
-msgstr "Top Back Rechts"
-
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr ""
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Ondertiteling::Misc"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Hide borders"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr ""
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Show Caption&&Menu"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Verberg menu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr ""
+msgstr "Top achter rechts"
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
-msgstr ""
+msgid "Above seek bar"
+msgstr "Boven zoekbalk"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
-msgstr ""
+msgid "Below seek bar"
+msgstr "Onder zoekbalk"
msgctxt "IDS_VIDEO_STREAM"
msgid "Video: %s"
-msgstr ""
+msgstr "Video: %s"
msgctxt "IDS_APPLY"
msgid "Apply"
@@ -2707,7 +2770,7 @@ msgstr "Toepassen"
msgctxt "IDS_CLEAR"
msgid "Clear"
-msgstr ""
+msgstr "Leegmaken"
msgctxt "IDS_CANCEL"
msgid "Cancel"
@@ -2715,7 +2778,7 @@ msgstr "Annuleren"
msgctxt "IDS_THUMB_THUMBNAILS"
msgid "Layout"
-msgstr ""
+msgstr "Sjablooon"
msgctxt "IDS_THUMB_PIXELS"
msgid "Pixels:"
@@ -2731,27 +2794,27 @@ msgstr "&Deactiveer alle filters"
msgctxt "IDS_ENABLE_AUDIO_FILTERS"
msgid "Enable all audio decoders"
-msgstr ""
+msgstr "Activeer alle audio decoders"
msgctxt "IDS_DISABLE_AUDIO_FILTERS"
msgid "Disable all audio decoders"
-msgstr ""
+msgstr "Deactiveer alle audio decoders"
msgctxt "IDS_ENABLE_VIDEO_FILTERS"
msgid "Enable all video decoders"
-msgstr ""
+msgstr "Activeer alle video decoders"
msgctxt "IDS_DISABLE_VIDEO_FILTERS"
msgid "Disable all video decoders"
-msgstr ""
+msgstr "Deactiveer alle video decoders"
msgctxt "IDS_STRETCH_TO_WINDOW"
msgid "Stretch To Window"
-msgstr ""
+msgstr "Spreiden"
msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
msgid "Touch Window From Inside"
-msgstr ""
+msgstr "Pas venster vanuit binnen aan"
msgctxt "IDS_ZOOM1"
msgid "Zoom 1"
@@ -2763,15 +2826,15 @@ msgstr "Zoom 2"
msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
msgid "Touch Window From Outside"
-msgstr ""
+msgstr "Pas venster vanaf buiten aan"
msgctxt "IDS_AUDIO_STREAM"
msgid "Audio: %s"
-msgstr ""
+msgstr "Audio: %s"
msgctxt "IDS_AG_REOPEN"
msgid "Reopen File"
-msgstr ""
+msgstr "Bestand heropenen"
msgctxt "IDS_MFMT_AVI"
msgid "AVI"
@@ -2787,7 +2850,7 @@ msgstr "MPEG-TS"
msgctxt "IDS_MFMT_DVDVIDEO"
msgid "DVD-Video"
-msgstr "DVD-Video"
+msgstr "DVD video"
msgctxt "IDS_MFMT_MKV"
msgid "Matroska"
@@ -2839,7 +2902,7 @@ msgstr "Smacker/Bink Video"
msgctxt "IDS_MFMT_FLIC"
msgid "FLIC Animation"
-msgstr "FLIC Animation"
+msgstr "FLIC animatie"
msgctxt "IDS_MFMT_DSM"
msgid "DirectShow Media"
@@ -2859,11 +2922,11 @@ msgstr "Shockwave Flash"
msgctxt "IDS_MFMT_OTHER_AUDIO"
msgid "Other Audio"
-msgstr ""
+msgstr "Ander audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2871,7 +2934,27 @@ msgstr "AIFF"
msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
-msgstr "Apple Lossless"
+msgstr "Apple verliesvrij"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
@@ -2887,7 +2970,7 @@ msgstr "AU/SND"
msgctxt "IDS_MFMT_CDA"
msgid "Audio CD track"
-msgstr ""
+msgstr "Audio CD nummer"
msgctxt "IDS_MFMT_FLAC"
msgid "FLAC"
@@ -2931,39 +3014,23 @@ msgstr "Real Audio"
msgctxt "IDS_MFMT_TAK"
msgid "TAK"
-msgstr ""
+msgstr "TAK"
msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Afspeellijst"
msgctxt "IDS_MFMT_BDPLS"
msgid "Blu-ray playlist"
-msgstr ""
+msgstr "Blu-ray afspeellijst"
msgctxt "IDS_MFMT_RAR"
msgid "RAR Archive"
-msgstr ""
+msgstr "RAR Archief"
msgctxt "IDS_DVB_CHANNEL_FPS"
msgid "FPS"
@@ -2977,18 +3044,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Beeldverhouding"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr ""
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr ""
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Geluidsapparaat:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: Aan"
@@ -2999,239 +3054,239 @@ msgstr "VSync: Uit"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
msgid "Accurate VSync: On"
-msgstr ""
+msgstr "Accurate VSync: Aan"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
msgid "Accurate VSync: Off"
-msgstr ""
+msgstr "Accurate VSync: Uit"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
msgid "Synchronize Video to Display: On"
-msgstr ""
+msgstr "Synchroniseer video met scherm: Aan"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
msgid "Synchronize Video to Display: Off"
-msgstr ""
+msgstr "Synchroniseer video met scherm: Uit"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
msgid "Synchronize Display to Video: On"
-msgstr ""
+msgstr "Synchroniseer scherm met video: Aan"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
msgid "Synchronize Display to Video: Off"
-msgstr ""
+msgstr "Synchroniseer scherm met video: Uit"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
msgid "Present at Nearest VSync: On"
-msgstr ""
+msgstr "Aanwezig op dichtstbijzijnde VSync: Aan"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
msgid "Present at Nearest VSync: Off"
-msgstr ""
+msgstr "Aanwezig op dichtstbijzijnde VSync: Uit"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
msgid "Color Management: On"
-msgstr ""
+msgstr "Kleurbeheer: Aan"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
msgid "Color Management: Off"
-msgstr ""
+msgstr "Kleurbeheer: Uit"
msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
msgid "Input Type: Auto-Detect"
-msgstr ""
+msgstr "Invoer type: Automatisch detecteren"
msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
msgid "Input Type: HDTV"
-msgstr ""
+msgstr "Invoer-type: HDTV"
msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_NTSC"
msgid "Input Type: SDTV NTSC"
-msgstr ""
+msgstr "Invoer-type: SDTV NTSC"
msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
msgid "Input Type: SDTV PAL"
-msgstr ""
+msgstr "Invoer-type: SDTV PAL"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
msgid "Ambient Light: Bright (2.2 Gamma)"
-msgstr ""
+msgstr "Omgevingslicht: Helder (2.2 Gamma) "
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
msgid "Ambient Light: Dim (2.35 Gamma)"
-msgstr ""
+msgstr "Omgevingslicht: Gedimd (2.2 Gamma) "
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
msgid "Ambient Light: Dark (2.4 Gamma)"
-msgstr ""
+msgstr "Omgevingslicht: Donker (2.2 Gamma) "
msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
msgid "Rendering Intent: Perceptual"
-msgstr ""
+msgstr "Opbouw intentie: Perceptueel "
msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
msgid "Rendering Intent: Relative Colorimetric"
-msgstr ""
+msgstr "Opbouw intentie: Relatief kleurmetrisch"
msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
msgid "Rendering Intent: Saturation"
-msgstr ""
+msgstr "Opbouw intentie: Verzadiging"
msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
msgid "Rendering Intent: Absolute Colorimetric"
-msgstr ""
+msgstr "Opbouw intentie: Absoluut kleurmetrisch"
msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
msgid "Output Range: %s"
-msgstr ""
+msgstr "Uitvoer Bereik: %s"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
msgid "Flush GPU before VSync: On"
-msgstr ""
+msgstr "Leeg GPU voor VSync: Aan "
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
msgid "Flush GPU before VSync: Off"
-msgstr ""
+msgstr "Leeg GPU voor VSync: Uit"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
msgid "Flush GPU after Present: On"
-msgstr ""
+msgstr "Leeg GPU na VSync: Aan"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
msgid "Flush GPU after Present: Off"
-msgstr ""
+msgstr "Leeg GPU na VSync: Uit "
msgctxt "IDS_OSD_RS_WAIT_ON"
msgid "Wait for GPU Flush: On"
-msgstr ""
+msgstr "Wacht voor GPU leeg: Aan"
msgctxt "IDS_OSD_RS_WAIT_OFF"
msgid "Wait for GPU Flush: Off"
-msgstr ""
+msgstr "Wacht voor GPU leeg: Uit"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
msgid "D3D Fullscreen: On"
-msgstr ""
+msgstr "D3D Volledig scherm: Aan"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
msgid "D3D Fullscreen: Off"
-msgstr ""
+msgstr "D3D Volledig scherm: Uit"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
msgid "Disable desktop composition: On"
-msgstr ""
+msgstr "Uitzetten bureaublad compositie: Aan"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
msgid "Disable desktop composition: Off"
-msgstr ""
+msgstr "Uitzetten bureaublad compositie: Uit"
msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
msgid "Alternative VSync: On"
-msgstr ""
+msgstr "Alternatieve VSync: Aan"
msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
msgid "Alternative VSync: Off"
-msgstr ""
+msgstr "Alternatieve VSync: Uit"
msgctxt "IDS_OSD_RS_RESET_DEFAULT"
msgid "Renderer settings reset to default"
-msgstr ""
+msgstr "Reset opbouwer naar standaard instellingen"
msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
msgid "Renderer settings reset to optimal"
-msgstr ""
+msgstr "Reset opbouwer naar optimale instellingen"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
msgid "D3D Fullscreen GUI Support: On"
-msgstr ""
+msgstr "D3D volledig scherm GUI ondersteuning: Aan"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
msgid "D3D Fullscreen GUI Support: Off"
-msgstr ""
+msgstr "D3D volledig scherm GUI ondersteuning: Uit"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
msgid "10-bit RGB Output: On"
-msgstr ""
+msgstr "10-bit RGB uitvoer: Aan"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
msgid "10-bit RGB Output: Off"
-msgstr ""
+msgstr "10-bit RGB uitvoer: Uit"
msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
msgid "Force 10-bit RGB Input: On"
-msgstr ""
+msgstr "Verplicht 10-bit RGB invoer: Aan"
msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
msgid "Force 10-bit RGB Input: Off"
-msgstr ""
+msgstr "Verplicht 10-bit RGB invoer: Uit"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
msgid "Full Floating Point Processing: On"
-msgstr ""
+msgstr "Volledig zwevendekommagetal uitvoering: Aan"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
msgid "Full Floating Point Processing: Off"
-msgstr ""
+msgstr "Volledig zwevendekommagetal uitvoering: Uit"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
msgid "Half Floating Point Processing: On"
-msgstr ""
+msgstr "Halve zwevendekommagetal uitvoering: Aan"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
msgid "Half Floating Point Processing: Off"
-msgstr ""
+msgstr "Halve zwevendekommagetal uitvoering: Uit"
msgctxt "IDS_BRIGHTNESS_DEC"
msgid "Brightness decrease"
-msgstr ""
+msgstr "Helderheid verlagen"
msgctxt "IDS_CONTRAST_INC"
msgid "Contrast increase"
-msgstr ""
+msgstr "Contrast verhogen"
msgctxt "IDS_CONTRAST_DEC"
msgid "Contrast decrease"
-msgstr ""
+msgstr "Contrast verlagen"
msgctxt "IDS_HUE_INC"
msgid "Hue increase"
-msgstr ""
+msgstr "Tint verhogen"
msgctxt "IDS_HUE_DEC"
msgid "Hue decrease"
-msgstr ""
+msgstr "Tint verlagen"
msgctxt "IDS_SATURATION_INC"
msgid "Saturation increase"
-msgstr ""
+msgstr "Verzadiging verhogen"
msgctxt "IDS_SATURATION_DEC"
msgid "Saturation decrease"
-msgstr ""
+msgstr "Verzadiging verlagen"
msgctxt "IDS_RESET_COLOR"
msgid "Reset color settings"
-msgstr ""
+msgstr "Kleurinstellingen resetten"
msgctxt "IDS_USING_LATEST_STABLE"
msgid "\nYou are already using the latest stable version."
-msgstr ""
+msgstr "\nJe gebruikt al de laatste stabiele versie."
msgctxt "IDS_USING_NEWER_VERSION"
msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
-msgstr ""
+msgstr "Geïnstalleerde versie: v%s.\n\nDe laatste stabiele versie is v%s."
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr ""
+msgstr "MPC-HC v%s is beschikbaar. U gebruikt v%s.\n\nWilt u de nieuwste MPC-HC versie ophalen van de website?"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
-msgstr ""
+msgstr "Opwaardeer server niet gevonden.\n\nControlleer uw internet verbinding en probeer opnieuw."
msgctxt "IDS_UPDATE_CLOSE"
msgid "&Close"
-msgstr "Sl&uiten"
+msgstr "&Sluiten"
msgctxt "IDS_OSD_ZOOM"
msgid "Zoom: %.0lf%%"
@@ -3239,43 +3294,47 @@ msgstr "Zoom: %.0lf%%"
msgctxt "IDS_OSD_ZOOM_AUTO"
msgid "Zoom: Auto"
-msgstr ""
+msgstr "Zoom: Automatisch"
msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
msgid "Toggle custom channel mapping"
-msgstr ""
+msgstr "Wisselen tussen eigen kanaalindeling"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
msgid "Custom channel mapping: On"
-msgstr ""
+msgstr "Eigen kanaal indeling: Aan"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
msgid "Custom channel mapping: Off"
-msgstr ""
+msgstr "Eigen kanaal indeling: Uit"
msgctxt "IDS_NORMALIZE"
msgid "Toggle normalization"
-msgstr ""
+msgstr "Wissel normalisatie"
msgctxt "IDS_OSD_NORMALIZE_ON"
msgid "Normalization: On"
-msgstr ""
+msgstr "Normalisatie: Aan"
msgctxt "IDS_OSD_NORMALIZE_OFF"
msgid "Normalization: Off"
-msgstr ""
+msgstr "Normalisatie: Uit"
msgctxt "IDS_REGAIN_VOLUME"
msgid "Toggle regain volume"
-msgstr ""
+msgstr "Wisselen herwinnen volume"
msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
msgid "Regain volume: On"
-msgstr ""
+msgstr "Herwinnen volume: Aan"
msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
-msgstr ""
+msgstr "Herwinnen volume: Uit"
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
@@ -3299,71 +3358,67 @@ msgstr "MB/s"
msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
msgid "Could not create the tuner."
-msgstr ""
+msgstr "Kon géén tuner aanmaken."
msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
msgid "Could not create the receiver."
-msgstr ""
+msgstr "Kon géén ontvanger aanmaken."
msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
msgid "Could not connect the network and the tuner."
-msgstr ""
+msgstr "Kon niet verbinden met netwerk en tuner."
msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
msgid "Could not connect the tuner and the receiver."
-msgstr ""
+msgstr "Kon niet verbinden met tuner en ontvanger."
msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
msgid "Could not connect the tuner."
-msgstr ""
+msgstr "Kon niet met tuner verbinden."
msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
msgid "Could not create the demultiplexer."
-msgstr ""
+msgstr "Kon demultiplexer niet aanmaken."
msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
msgid "Error parsing the entered time!"
-msgstr ""
+msgstr "Fout bij ontleden ingegeven tijd!"
msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
msgid "Error parsing the entered text!"
-msgstr ""
+msgstr "Fout bij ontleden ingegeven tekst!"
msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
msgid "Error parsing the entered frame rate!"
-msgstr ""
+msgstr "Fout bij ontleden ingegeven beeld per seconde!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
-msgstr ""
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Kan géén beeld-stap doen, probeer een andere video opbouwer. "
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
-msgstr ""
+msgstr "De \"Afbeelding opslaan\" en \"Miniatuur opslaan\" werken niet met de standaard video opbouwer voor Real Media.\nSelecteer één van de DirectX opbouwers voor Real Media in MPC-HC uitvoer opties en heropen het bestand."
msgctxt "IDS_SCREENSHOT_ERROR_QT"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
-msgstr ""
+msgstr "De \"Afbeelding opslaan\" en \"Miniatuur opslaan\" werken niet met de standaard video opbouwer voor QuickTime.\nSelecteer één van de DirectX opbouwers voor QuickTime in MPC-HC uitvoer opties en heropen het bestand."
msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
-msgstr ""
+msgstr "De \"Opslaan plaatje\" en \"Opslaan miniatuur\" functies werken niet bij \"Schockwave\" bestanden."
msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgstr ""
-
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr ""
+msgstr "De \"Opslaan plaatje\" en \"Opslaan miniatuur\" functies werken niet met de Overlay Mixer video opbouwer.\nVerander de video opbouwer in MPC's uitvoer opties en heropen het bestand."
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
-msgstr ""
+msgstr "Wilt u de EDL-bewerker inschakelen?"
msgctxt "IDS_CAPTURE_ERROR"
msgid "Capture Error"
-msgstr ""
+msgstr "Opname fout"
msgctxt "IDS_CAPTURE_ERROR_VIDEO"
msgid "video"
@@ -3375,123 +3430,131 @@ msgstr "audio"
msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
msgid "Can't add the %s buffer filter to the graph."
-msgstr ""
+msgstr "Kan de %s buffer filter niet aan de grafiek toevoegen."
msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
msgid "Can't connect the %s buffer filter to the graph."
-msgstr ""
+msgstr "Kan de %s buffer filter niet verbinden op de grafiek."
msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
msgid "Can't add the %s encoder filter to the graph."
-msgstr ""
+msgstr "Kan de %s encoder filter niet aan de grafiek toevoegen"
msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
msgid "Can't connect the %s encoder filter to the graph."
-msgstr ""
+msgstr "Kan de %s encoder filter niet verbinden op de grafiek."
msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
msgid "Can't set the compression format on the %s encoder filter."
-msgstr ""
+msgstr "Kan de compressie format niet instellen op de %s encoder filter."
msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
msgid "Can't connect the %s stream to the multiplexer filter."
-msgstr ""
+msgstr "Kan de %s stroom niet verbinden aan de multiplexer filter."
msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
msgid "No video capture pin was found."
-msgstr ""
+msgstr "Geen video capture pin werd gevonden."
msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
msgid "No audio capture pin was found."
-msgstr ""
+msgstr "Geen audio capture pin werd gevonden."
msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
msgid "Error initializing the output file."
-msgstr ""
+msgstr "Fout bij initialiseren uitvoer bestand."
msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
msgid "Error initializing the audio output file."
-msgstr ""
+msgstr "Fout bij initialiseren audio bestand."
msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
-msgstr ""
+msgstr "Het juiste tijd format is [-]hh:mm:ss.ms (b.v. 01:23:45.678)."
msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
msgid "This type is already in the list!"
-msgstr ""
+msgstr "Dit type staat al in de lijst!"
msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
-msgstr ""
+msgstr "Je moet de nieuwe instellingen toepassen voordat je ze test. "
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
-msgstr ""
+msgstr "Na weergave: Sluiten"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
-msgstr ""
+msgstr "Na weergave: Stand by"
msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
msgid "After Playback: Hibernate"
-msgstr ""
+msgstr "Na weergave: Slaap modus"
msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
msgid "After Playback: Shutdown"
-msgstr ""
+msgstr "Na weergave: Afsluiten"
msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
msgid "After Playback: Log Off"
-msgstr ""
+msgstr "Na weergave: Uitloggen"
msgctxt "IDS_AFTERPLAYBACK_LOCK"
msgid "After Playback: Lock"
-msgstr ""
+msgstr "Na weergave: Vergrendelen"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr ""
+msgstr "Na weergave: Monitor uitschakelen"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Na weergave: Speel volgend bestand af in map"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Na weergave: Niets doen"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
-msgstr ""
+msgstr "Helderheid: %s"
msgctxt "IDS_OSD_CONTRAST"
msgid "Contrast: %s"
-msgstr ""
+msgstr "Contrast: %s"
msgctxt "IDS_OSD_HUE"
msgid "Hue: %s°"
-msgstr ""
+msgstr "Tint: %s°"
msgctxt "IDS_OSD_SATURATION"
msgid "Saturation: %s"
-msgstr ""
+msgstr "Verzadiging: %s"
msgctxt "IDS_OSD_RESET_COLOR"
msgid "Color settings restored"
-msgstr ""
+msgstr "Kleurinstellingen hersteld"
msgctxt "IDS_OSD_NO_COLORCONTROL"
msgid "Color control is not supported"
-msgstr ""
+msgstr "Kleur control wordt niet ondersteund"
msgctxt "IDS_BRIGHTNESS_INC"
msgid "Brightness increase"
-msgstr ""
+msgstr "Helderheid verhogen"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
-msgstr ""
+msgstr "Voer uw voorkeurstalen hier in.\nBijvoorbeeld: \"eng jap swe\""
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
-msgstr ""
+msgstr "Externe splitters kunnen eigen voorkeurstaalinstellingen hebben. MPC-HC verandert deze daarom standaard niet.\nU schakelt deze optie in als u MPC-HC de externe splitters wilt laten controleren."
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
-msgstr ""
+msgstr "&Blu-Ray afspeellijsten"
msgctxt "IDS_NAVIGATE_PLAYLIST"
msgid "&Playlist"
@@ -3511,25 +3574,409 @@ msgstr "&Kanalen"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr ""
+msgstr "Als \"laatste sleutelbeeld\" is geselecteerd, tracht om het eerste sleutelbeeld te zoeken voor de eigenlijke zoekpunt.\nAls \"dichtbijzijnde sleutelbeeld\" is geselecteerd, Als \"laatste sleutelbeeld\" is geselecteerd, tracht de eerste hoofdbeeld vóór of na de zoekpunt afhankelijk van welke het dichtstbij is."
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr ""
+msgstr "Associeer met alle formaten"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr ""
+msgstr "Alleen met videoformaten associëren "
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr ""
+msgstr "Alleen met audioformaten associëren "
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr ""
+msgstr "Verwijder alle associaties"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
-msgstr "Opties"
+msgstr "Instellingen"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub "
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "Achterwerkfilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Leverancier"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Slechthorend"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Op te halen"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Score"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Zoeken naar ondertitels online mislukt."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Zoeken naar ondertitels online gestopt."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Zoeken naar ondertitels online voltooid, %d ondertitels gevonden."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Zoeken naar ondertitels online voltooid, geen ondertitels gevonden."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Ophalen ondertiteling"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Op zoek naar ondertitels online, even geduld aub..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Stoppen met zoeken naar online ondertitels..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Status"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Klaar..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Niet geïmplementeerd."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Opsturen..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Ondertitels succesvol opgestuurd."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Ondertitels opsturen mislukt."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Ondertitels opsturen gestopt."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Ondertitel bestaat al."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Ondertitels aan het versturen, even geduld aub..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Opsturen voltooid."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Opsturen gestopt."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Opsturen mislukt."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Ophalen && Openen"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Setup"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Reset"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Omhoog"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Omlaag"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Open URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Talen"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "FOUT: Internetverbinding kon niet tot stand worden gebracht."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Geef website inlog gegevens in"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Geef je inlog gegevens om te verbinden met:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Verwachtte ratio: Aangenomen vierkante pixels (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Opgehaald [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Ondertitel opsturen"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Weet je zeker dat je ondertitel bestand \"%s\" wilt opsturen?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Ophalen ondersteunde talen..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Inloggen op \"%S\" mislukt, met de gebruikersnaam \"%S\".\n\nGeef a.u.b. de juiste gebruikersnaam en wachtwoord in of reset de referenties en log in als anonieme gebruiker."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Automatisch zoeken en ophalen zal worden uitgeschakeld voor alle media bestanden waarvan de locatie een patroon bevat van één de hier ingevoerde patronen.\nBijvoorbeeld type: \"private dir\\videos|work\\\". "
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pathname\""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"\tLaad een additioneel audio bestand"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"file\"\tLaad een additioneel audio bestand met een vertraging van XXms\n\t\t(als het bestand ..DELAY XXms... bevat\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tStart afspelen in D3D volledig scherm modus"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"ondertitel bestandsnaam\"\tLaad een additioneel ondertitel bestand"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtername\"\tLaad DirectShow filters van een dll bestand (wildcards toegestaan)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tStarten in DVD modus, (optioneel) \"pathname\" met de DVD map"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tStart met afspelen vanaf titel T, hoofdstuk C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tStart afspelen vanaf titel T, positie P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tLaad alle tracks van een Audio CD of (S)VCD,\n\t\t\"pathname\" is het drive pad (optioneel)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tOpen het standaard video apparaat"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tBestand openen, niet automatisch beginnen met afspelen"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tBegin met afspelen zodra de speler gestart is"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tSpeler sluiten na afspelen (werkt alleen indien gebruikt in combinatie met /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tSysteem afsluiten na afspelen"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tZet het besturingsysteem in standby stand na afspelen"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tSysteem in slaap stand zetten na afspelen"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tUitloggen na afspelen"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tVergrendel na afspelen"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\t\t\tZet monitor uit na afspelen"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tVolgend bestaand open na afspelen"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tStarten in volledig scherm"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tGeminimaliseerd starten"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tGebruik een nieuwe instance van de speler"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tVoeg \"pathname\" toe aan playlist, kan gecombineerd worden met open en play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tRandomizeer de speellijst"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tMaak de file associaties voor video bestanden"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tMaak de file associaties voor audio bestanden"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tMaak de file associaties voor playlist bestanden"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tMaak file associaties voor alle ondersteunde bestandsformaten"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tVerwijder alle associaties"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tBegin met afspelen vanaf \"ms\" (= milliseconden)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\t\tBegin met afspelen vanaf uu:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tGebruik een vast window formaat"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tStart player op monitor N, waar N begint bij 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tGebruik audiorenderer N, waar N begint bij 1 (zie ook \"Output\" instellingen)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tGebruik \"Pr\" shader instelling"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"naam\"\tSpecificeer Pan&Scan instelling to gebruiken"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tBestandsformaat iconen opnieuw koppelen"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tOpen MPC-HC in de achtergrond"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tStart de web interface op aangegeven poort"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tToon debug informatie op het scherm (OSD)"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tCrash rapportage uitschakelen"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tGebruik MPC-HC als slave"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tSelecteer de index van de GPU te gebruiken voor hardware decoderen.\n\t\tAlleen beschikbaar voor CUVID en DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tHerstellen naar standaard instellingen"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tToon help over de command line parameters"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Drempelwaarde voor ondertitel score voor automatisch gedownloade ondertitels. Een hogere waarde betekend dat betere ondertitels geladen worden, lage waardes kunnen ertoe leiden dat verkeerde ondertitels geladen worden. Er is geen perfecte waarde. Neem de waarde die voor jou het best werkt."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Audio vertraging (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Grootte in pixels van de standaard werkbalk."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Gebruik de veroude werkbalk in plaats van de niewe vectorized werkbalk"
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.pa.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.pa.dialogs.po
new file mode 100644
index 000000000..52e32a3e3
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.pa.dialogs.po
@@ -0,0 +1,1794 @@
+# MPC-HC - Strings extracted from dialogs
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# A S Alam <apreet.alam@gmail.com>, 2015-2016
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-12-02 01:18+0000\n"
+"Last-Translator: A S Alam <apreet.alam@gmail.com>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/mpc-hc/mpc-hc/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
+msgid "Select Media Type"
+msgstr "ਮੀਡਿਆ ਕਿਸਮ ਚੁਣੋ"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDOK"
+msgid "OK"
+msgstr "ਠੀਕ ਹੈ"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
+msgid "Video"
+msgstr "ਵਿਡੀਓ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
+msgid "Set"
+msgstr "ਸੈਟ ਕਰੋ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Audio"
+msgstr "ਆਡੀਓ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Output"
+msgstr "ਆਉਟਪੁੱਟ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
+msgid "Record Video"
+msgstr "ਵਿਡੀਓ ਰਿਕਾਰਡ ਕਰੋ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
+msgid "Preview"
+msgstr "ਝਲਕ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
+msgid "Record Audio"
+msgstr "ਆਡੀਓ ਰਿਕਾਰਡ ਕਰੋ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
+msgid "Preview"
+msgstr "ਝਲਕ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "V/A Buffers:"
+msgstr "V/A ਬਫ਼ਰ:"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
+msgid "Audio to wav"
+msgstr "ਆਡੀਓ ਤੋਂ ਵੇਵ"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
+msgid "Record"
+msgstr "ਰਿਕਾਰਡ ਕਰੋ"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
+msgid "Enable built-in audio switcher filter (requires restart)"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
+msgid "Normalize"
+msgstr "ਨਾਰਮਲਾਈਜ਼"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
+msgid "Max amplification:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
+msgid "Regain volume"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
+msgid "Boost:"
+msgstr "ਬੂਸਟ:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
+msgid "Down-sample to 44100 Hz"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
+msgid "Audio time shift (ms):"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
+msgid "Enable custom channel mapping"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
+msgid "Speaker configuration for"
+msgstr "ਇਸ ਵਾਸਤੇ ਸਪੀਕਰ ਦੀ ਸੰਰਚਨਾ"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
+msgid "input channels:"
+msgstr "ਇਨਪੁਟ ਚੈਨਲ:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr ""
+
+msgctxt "IDD_GOTO_DLG_CAPTION"
+msgid "Go To..."
+msgstr "...ਉੱਤੇ ਜਾਓ"
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
+msgstr ""
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Time"
+msgstr "ਸਮਾਂ"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK1"
+msgid "Go!"
+msgstr "ਜਾਓ!"
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
+msgstr ""
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Frame"
+msgstr "ਫਰੇਮ"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK2"
+msgid "Go!"
+msgstr "ਜਾਓ!"
+
+msgctxt "IDD_OPEN_DLG_CAPTION"
+msgid "Open"
+msgstr "ਖੋਲ੍ਹੋ"
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
+msgstr ""
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Open:"
+msgstr "ਖੋਲ੍ਹੋ:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "...ਝਲਕ"
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
+msgid "Dub:"
+msgstr "ਡੱਬ:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "...ਝਲਕ"
+
+msgctxt "IDD_OPEN_DLG_IDOK"
+msgid "OK"
+msgstr "ਠੀਕ ਹੈ"
+
+msgctxt "IDD_OPEN_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
+msgid "Add to playlist without opening"
+msgstr ""
+
+msgctxt "IDD_ABOUTBOX_CAPTION"
+msgid "About"
+msgstr "ਇਸ ਬਾਰੇ"
+
+msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 Authors.txt ਦੇਖੋ"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "This program is freeware and released under the GNU General Public License."
+msgstr "ਇਹ ਮੁਫ਼ਤ ਪ੍ਰੋਗਰਾਮ ਹੈ ਅਤੇ ਗਨੂਮ ਜਰਨਲ ਪਬਲਿਕ ਲਸੰਸ ਅਧੀਨ ਜਾਰੀ ਕੀਤਾ ਗਿਆ ਹੈ।"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "English translation made by MPC-HC Team"
+msgstr "ਅੰਗਰੇਜ਼ੀ ਅਨੁਵਾਦ MPC-HC ਟੀਮ ਵਲੋਂ ਕੀਤਾ ਗਿਆ"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build information"
+msgstr "ਬਿਲਡ ਜਾਣਕਾਰੀ"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Version:"
+msgstr "ਵਰਜ਼ਨ:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Compiler:"
+msgstr "ਕੰਪਾਇਲਰ:"
+
+msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
+msgid "Not used"
+msgstr "ਨਹੀਂ ਵਰਤਿਆ"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build date:"
+msgstr "ਬਿਲਡ ਮਿਤੀ:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Operating system"
+msgstr "ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Name:"
+msgstr "ਨਾਂ:"
+
+msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
+msgid "Copy to clipboard"
+msgstr "ਕਲਿੱਪਬੋਰਡ ਵਿੱਚ ਕਾਪੀ ਕਰੋ"
+
+msgctxt "IDD_ABOUTBOX_IDOK"
+msgid "OK"
+msgstr "ਠੀਕ ਹੈ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Open options"
+msgstr "ਚੋਣਾਂ ਖੋਲ੍ਹੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
+msgid "Use the same player for each media file"
+msgstr "ਹਰੇਕ ਮੀਡਿਆ ਫਾਈਲ ਲਈ ਉਹੀ ਪਲੇਅਰ ਵਰਤੋਂ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
+msgid "Open a new player for each media file played"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Language"
+msgstr "ਭਾਸ਼ਾ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Title bar"
+msgstr "ਟਾਈਟਲ ਪੱਟੀ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
+msgid "Display full path"
+msgstr "ਪੂਰਾ ਪਾਥ ਦਿਖਾਓ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
+msgid "File name only"
+msgstr "ਕੇਵਲ ਫ਼ਾਈਲ ਨਾਂ ਹੀ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
+msgid "Don't prefix anything"
+msgstr "ਕੁਝ ਵੀ ਅੱਗੇ ਨਾ ਲਗਾਓ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
+msgid "Replace file name with title"
+msgstr "ਫ਼ਾਈਲ ਨਾਂ ਨੂੰ ਟਾਈਟਲ ਨਾਲ ਬਦਲੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Other"
+msgstr "ਹੋਰ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
+msgid "Tray icon"
+msgstr "ਟਰੇ ਆਈਕਾਨ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
+msgid "Show OSD (requires restart)"
+msgstr "ਓਐਸਡੀ ਦਿਖਾਓ (ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ)"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
+msgid "Limit window proportions on resize"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
+msgid "Snap to desktop edges"
+msgstr "ਡੈਸਕਟਾਪ ਦੇ ਕੋਨਿਆਂ ਲਈ ਸਨੈਪ ਕਰੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
+msgid "Store settings in .ini file"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
+msgid "Disable \"Open Disc\" menu"
+msgstr "\"ਡਿਸਕ ਖੋਲ੍ਹੋ\" ਮੀਨੂ ਅਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
+msgid "Process priority above normal"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
+msgid "Enable cover-art support"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "History"
+msgstr "ਅਤੀਤ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
+msgid "Keep history of recently opened files"
+msgstr "ਤਾਜ਼ਾ ਖੋਲ੍ਹੀਆਂ ਫ਼ਾਈਲਾਂ ਦਾ ਅਤੀਤ ਰੱਖੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
+msgid "Remember last playlist"
+msgstr "ਆਖਰੀ ਪਲੇਅਲਿਸਟ ਯਾਦ ਰੱਖੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
+msgid "Remember File position"
+msgstr "ਫ਼ਾਈਲ ਸਥਿਤੀ ਯਾਦ ਰੱਖੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
+msgid "Remember DVD position"
+msgstr "DVD ਸਥਿਤੀ ਯਾਦ ਰੱਖੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
+msgid "Remember last window position"
+msgstr "ਆਖਰੀ ਵਿੰਡੋ ਸਥਿਤੀ ਯਾਦ ਰੱਖੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
+msgid "Remember last window size"
+msgstr "ਆਖਰੀ ਵਿੰਡੋ ਆਕਾਰ ਯਾਦ ਰੱਖੋ"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
+msgid "Remember last Pan-n-Scan Zoom"
+msgstr ""
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "\"Open DVD/BD\" behavior"
+msgstr ""
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
+msgid "Prompt for location"
+msgstr "ਟਿਕਾਣੇ ਲਈ ਪੁੱਛੋ"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
+msgid "Always open the default location:"
+msgstr "ਹਮੇਸ਼ਾ ਮੂਲ ਟਿਕਾਣਾ ਖੋਲ੍ਹੋ:"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Preferred language for DVD Navigator and the external OGM Splitter"
+msgstr ""
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
+msgid "Menu"
+msgstr "ਮੀਨੂ"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
+msgid "Audio"
+msgstr "ਆਡੀਓ"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
+msgid "Subtitles"
+msgstr "ਸਬ-ਟਾਈਟਲ"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Additional settings"
+msgstr "ਵਧੀਕ ਸੈਟਿੰਗਾਂ"
+
+msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
+msgid "Allow closed captions in \"Line 21 Decoder\""
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio"
+msgstr "ਆਡੀਓ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume"
+msgstr "ਵਾਲੀਅਮ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Min"
+msgstr "ਘੱਟੋ-ਘੱਟ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Max"
+msgstr "ਵੱਧੋ-ਵੱਧ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
+msgid "Balance"
+msgstr "ਸੰਤੁਲਨ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "L"
+msgstr "ਖੱ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "R"
+msgstr "ਸੱ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Playback"
+msgstr "ਚਲਾਓ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
+msgid "Play"
+msgstr "ਚਲਾਓ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
+msgid "Repeat forever"
+msgstr "ਹਮੇਸ਼ਾ ਦੁਹਰਾਓ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
+msgid "time(s)"
+msgstr "ਵਾਰ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "After Playback"
+msgstr "ਚਲਾਓ ਬਾਅਦ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default zoom"
+msgstr "ਡਿਫਾਲਟ ਜ਼ੂਮ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
+msgid "Auto-zoom:"
+msgstr "ਆਟੋ-ਜ਼ੂਮ:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
+msgid "Auto fit factor:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default track preference"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Subtitles:"
+msgstr "ਸਬ-ਟਾਈਟਲ:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio:"
+msgstr "ਆਡੀਓ:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
+msgid "Allow overriding external splitter choice"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Open settings"
+msgstr "ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
+msgid "Use worker thread to construct the filter graph"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
+msgid "Report pins which fail to render"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
+msgid "Auto-load audio files"
+msgstr "ਆਡੀਓ ਫ਼ਾਈਲਾਂ ਆਟੋ-ਲੋਡ ਕਰੋ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Control"
+msgstr "ਕੰਟਰੋਲ"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume step:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Speed step:"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
+msgid "Override placement"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
+msgid "Horizontal:"
+msgstr "ਲੇਟਵਾਂ:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC2"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC3"
+msgid "Vertical:"
+msgstr "ਖੜ੍ਹਵਾਂ:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC4"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Delay step"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "ms"
+msgstr "ਮਿ.ਸ."
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Texture settings (open the video again to see the changes)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Sub pictures to buffer:"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Maximum texture resolution:"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
+msgid "Never animate the subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
+msgid "Render at"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
+msgid "% of the animation"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
+msgid "Animate at"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
+msgid "% of the video frame rate"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Allow dropping some subpictures if the queue is running late"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Renderer Layout"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
+msgid "Apply aspect ratio compensation for anamorphic videos"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Warning"
+msgstr "ਚੇਤਾਵਨੀ"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr ""
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
+msgid "File extensions"
+msgstr "ਫ਼ਾਈਲ ਇਕਸਟੈਨਸ਼ਨਾਂ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
+msgid "Default"
+msgstr "ਡਿਫਾਲਟ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
+msgid "Set"
+msgstr "ਸੈਟ ਕਰੋ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
+msgid "Association"
+msgstr "ਸੰਬੰਧ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
+msgid "Use the format-specific icons"
+msgstr "ਖਾਸ-ਫਾਰਮੈਟ ਆਈਕਾਨ ਵਰਤੋਂ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
+msgid "Run as &administrator"
+msgstr "ਪਰਸ਼ਾਸ਼ਕ ਵਜੋਂ ਚਲਾਓ(&a)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
+msgid "Set as &default program"
+msgstr "ਡਿਫਾਲਟ ਪਰੋਗਰਾਮ ਵਜੋਂ ਸੈਟ ਕਰੋ(&d)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
+msgstr ""
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
+msgid "RealMedia"
+msgstr "RealMedia"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO2"
+msgid "QuickTime"
+msgstr "QuickTime"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO3"
+msgid "DirectShow"
+msgstr "DirectShow"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
+msgid "Check file extension first"
+msgstr ""
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Explorer Context Menu"
+msgstr ""
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK6"
+msgid "Directory"
+msgstr "ਡਾਇਰੈਕਟਰੀ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK7"
+msgid "File(s)"
+msgstr "ਫ਼ਾਈਲਾਂ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
+msgid "Autoplay"
+msgstr "ਆਟੋ-ਪਲੇਅ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
+msgid "Video"
+msgstr "ਵਿਡੀਓ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK2"
+msgid "Music"
+msgstr "ਸੰਗੀਤ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK4"
+msgid "DVD"
+msgstr "ਡੀਵੀਡੀ"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
+msgid "Audio CD"
+msgstr "ਆਡੀਓ ਸੀਡੀ"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "Jump distances (small, medium, large in ms)"
+msgstr ""
+
+msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
+msgid "Default"
+msgstr "ਡਿਫਾਲਟ"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
+msgid "Fast seek (on keyframe)"
+msgstr ""
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
+msgid "Show chapter marks in seek bar"
+msgstr ""
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
+msgid "Display \"Now Playing\" information in Skype's mood message"
+msgstr ""
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
+msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
+msgstr ""
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr ""
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr ""
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
+msgid "Show time tooltip:"
+msgstr ""
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "OSD font:"
+msgstr "OSD ਫ਼ੋਟ:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
+msgid "Enable Logitech LCD support (experimental)"
+msgstr ""
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
+msgid "Auto-hide the mouse pointer during playback in windowed mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
+msgid "Add Filter..."
+msgstr "...ਫਿਲਟਰ ਜੋੜੋ"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
+msgid "Remove"
+msgstr "ਹਟਾਓ"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO1"
+msgid "Prefer"
+msgstr "ਤਰਜੀਹ"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO2"
+msgid "Block"
+msgstr "ਪਾਬੰਦੀ"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
+msgid "Set merit:"
+msgstr ""
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
+msgid "Up"
+msgstr "ਉੱਤੇ"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON4"
+msgid "Down"
+msgstr "ਹੇਠਾਂ"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
+msgid "Add Media Type..."
+msgstr "....ਮੀਡਿਆ ਕਿਸਮ ਜੋੜੋ"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
+msgid "Add Sub Type..."
+msgstr ""
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
+msgid "Delete"
+msgstr "ਹਟਾਓ"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
+msgid "Reset List"
+msgstr "ਸੂਚੀ ਮੁੜ-ਸੈਟ ਕਰੋ"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Type:"
+msgstr "ਕਿਸਮ:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Size:"
+msgstr "ਆਕਾਰ:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Media length:"
+msgstr "ਮੀਡਿਆ ਲੰਬਾਈ:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Video size:"
+msgstr "ਵਿਡੀਓ ਆਕਾਰ:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Created:"
+msgstr "ਬਣਾਇਆ:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Clip:"
+msgstr "ਕਲਿੱਪ:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Author:"
+msgstr "ਲੇਖਕ:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Copyright:"
+msgstr "ਕਾਪੀਰਾਈਟ:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Rating:"
+msgstr "ਰੇਟਿੰਗ:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Location:"
+msgstr "ਟਿਕਾਣਾ:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Description:"
+msgstr "ਵੇਰਵਾ:"
+
+msgctxt "IDD_FAVADD_CAPTION"
+msgid "Add Favorite"
+msgstr "ਪਸੰਦ ਵਿੱਚ ਜੋੜੋ"
+
+msgctxt "IDD_FAVADD_IDC_STATIC"
+msgid "Choose a name for your shortcut:"
+msgstr ""
+
+msgctxt "IDD_FAVADD_IDC_CHECK1"
+msgid "Remember position"
+msgstr "ਸਥਿਤੀ ਯਾਦ ਰੱਖੋ"
+
+msgctxt "IDD_FAVADD_IDCANCEL"
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+msgctxt "IDD_FAVADD_IDOK"
+msgid "OK"
+msgstr "ਠੀਕ ਹੈ"
+
+msgctxt "IDD_FAVADD_IDC_CHECK2"
+msgid "Relative drive"
+msgstr "ਸੰਬੰਧਿਤ ਡਰਾਇਵ"
+
+msgctxt "IDD_FAVORGANIZE_CAPTION"
+msgid "Organize Favorites"
+msgstr "ਮਨਪਸੰਦ ਦਾ ਪਰਬੰਧ ਕਰੋ"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
+msgid "Rename"
+msgstr "ਨਾਂ ਬਦਲੋ"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
+msgid "Move Up"
+msgstr "ਉੱਤੇ ਭੇਜੋ"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
+msgid "Move Down"
+msgstr "ਹੇਠਾਂ ਭੇਜੋ"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
+msgid "Delete"
+msgstr "ਹਟਾਓ"
+
+msgctxt "IDD_FAVORGANIZE_IDOK"
+msgid "OK"
+msgstr "ਠੀਕ ਹੈ"
+
+msgctxt "IDD_PNSPRESET_DLG_CAPTION"
+msgid "Pan&Scan Presets"
+msgstr ""
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
+msgid "New"
+msgstr "ਨਵਾਂ"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON3"
+msgid "Delete"
+msgstr "ਹਟਾਓ"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
+msgid "Up"
+msgstr "ਉੱਤੇ"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
+msgid "Down"
+msgstr "ਹੇਠਾਂ"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
+msgid "&Set"
+msgstr "ਸੈੱਟ ਕਰੋ(&S)"
+
+msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
+msgid "&Cancel"
+msgstr "ਰੱਦ ਕਰੋ(&C)"
+
+msgctxt "IDD_PNSPRESET_DLG_IDOK"
+msgid "&Save"
+msgstr "ਸੰਭਾਲੋ(&S)"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Pos: 0.0 -> 1.0"
+msgstr ""
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Zoom: 0.2 -> 3.0"
+msgstr "ਜ਼ੂਮ: 0.2 -> 3.0"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
+msgid "Global Media Keys"
+msgstr "ਗਲੋਬਲ ਮੀਡੀਆ ਸਵਿੱਚਾਂ"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
+msgid "Select All"
+msgstr "ਸਭ ਚੁਣੋ"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
+msgid "Reset Selected"
+msgstr "ਚੁਣੇ ਮੁੜ-ਸੈਟ ਕਰੋ"
+
+msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
+msgid "Warning"
+msgstr "ਚੇਤਾਵਨੀ"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
+msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
+msgstr ""
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
+msgid "The following pin(s) failed to find a connectable filter:"
+msgstr ""
+
+msgctxt "IDD_MEDIATYPES_DLG_IDOK"
+msgid "Close"
+msgstr "ਬੰਦ ਕਰੋ"
+
+msgctxt "IDD_SAVE_DLG_CAPTION"
+msgid "Saving..."
+msgstr "...ਸੰਭਾਲਿਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+msgctxt "IDD_SAVE_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "ਇੰਕੋਡਿੰਗ:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "ਇੰਕੋਡਿੰਗ:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "Delay:"
+msgstr "ਦੇਰੀ:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "ms"
+msgstr "ਮਿ.ਸ."
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
+msgid "Save custom style"
+msgstr "ਕਸਟਮ ਸ਼ੈਲੀ ਸੰਭਾਲੋ"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG ਕੁਆਲਟੀ:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Thumbnails:"
+msgstr "ਥੰਮਨੇਲ:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "rows"
+msgstr "ਕਤਾਰਾਂ"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "columns"
+msgstr "ਕਾਲਮ"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Image width:"
+msgstr "ਚਿੱਤਰ ਚੌੜਾਈ:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "pixels"
+msgstr "ਪਿਕਸਲ"
+
+msgctxt "IDD_ADDREGFILTER_CAPTION"
+msgid "Select Filter"
+msgstr "ਫਿਲਟਰ ਚੁਣੋ"
+
+msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "...ਝਲਕ"
+
+msgctxt "IDD_ADDREGFILTER_IDOK"
+msgid "OK"
+msgstr "ਠੀਕ ਹੈ"
+
+msgctxt "IDD_ADDREGFILTER_IDCANCEL"
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Font"
+msgstr "ਫ਼ੋਂਟ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_BUTTON1"
+msgid "Font"
+msgstr "ਫ਼ੋਂਟ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Spacing"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Angle (z,°)"
+msgstr "ਕੋਣ (z,°)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (x,%)"
+msgstr "ਸਕੇਲ (x,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (y,%)"
+msgstr "ਸਕੇਲ (y,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Border Style"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
+msgid "Outline"
+msgstr "ਖਾਕਾ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
+msgid "Opaque box"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Width"
+msgstr "ਚੌੜਾਈ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Shadow"
+msgstr "ਛਾਂ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Screen Alignment && Margins"
+msgstr "ਸਕਰੀਨ ਤਰਤੀਬ ਤੇ ਹਾਸ਼ੀਆ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Left"
+msgstr "ਖੱਬੇ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Right"
+msgstr "ਸੱਜੇ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Top"
+msgstr "ਉੱਤੇ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Bottom"
+msgstr "ਹੇਠਾਂ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
+msgid "Position subtitles relative to the video frame"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Colors && Transparency"
+msgstr "ਰੰਗ ਤੇ ਪਾਰਦਰਸ਼ਤਾ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "0%"
+msgstr "0%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Primary"
+msgstr "ਪ੍ਰਾਇਮਰੀ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Secondary"
+msgstr "ਸੈਕੰਡਰੀ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Outline"
+msgstr "ਖਾਕਾ"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
+msgid "Link alpha channels"
+msgstr ""
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
+msgstr ""
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Source Filters"
+msgstr "ਸਰੋਤ ਫਿਲਟਰ"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Transform Filters"
+msgstr ""
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Internal LAV Filters settings"
+msgstr ""
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
+msgid "Splitter"
+msgstr "ਸਪਲਿੱਟਰ"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
+msgid "Video decoder"
+msgstr "ਵਿਡੀਓ ਡੀਕੋਡਰ"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
+msgid "Audio decoder"
+msgstr "ਆਡੀਓ ਡਿਕੋਡਰ"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
+msgid "Internal:"
+msgstr "ਅੰਦਰੂਨੀ:"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO2"
+msgid "External:"
+msgstr "ਬਾਹਰੀ:"
+
+msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "...ਝਲਕ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DirectShow Video"
+msgstr "DirectShow ਵਿਡੀਓ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "RealMedia Video"
+msgstr "RealMedia ਵਿਡੀਓ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "QuickTime Video"
+msgstr "QuickTime ਵਿਡੀਓ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Audio Renderer"
+msgstr "ਆਡੀਓ ਰੈਂਡਰਰ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Surface:"
+msgstr "ਸਰਫੇਸ:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Resizer:"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
+msgid "Select D3D9 Render Device"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
+msgid "Reinitialize when changing display"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "D3D Fullscreen"
+msgstr "D3D ਪੂਰੀ-ਸਕਰੀਨ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Alternative VSync"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
+msgid "VMR-9 Mixer Mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
+msgid "YUV Mixing"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
+msgid "EVR Buffers:"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Screenshot"
+msgstr "ਸਕਰੀਨਸ਼ਾਟ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Shaders"
+msgstr "ਸ਼ੇਡਰ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Rotation"
+msgstr "ਘੁੰਮਾਉਣਾ"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitle Renderer"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
+msgid "Listen on port:"
+msgstr "ਪੋਰਟ ਉੱਤੇ ਸੁਣੋ:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
+msgid "Launch in web browser..."
+msgstr "...ਵੈਬ ਬਰਾਊਜ਼ਰ ਵਿੱਚ ਖੋਲ੍ਹੋ"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
+msgid "Enable compression"
+msgstr "ਕੰਪਰੈਸ਼ਨ ਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
+msgid "Allow access from localhost only"
+msgstr "ਕੇਵਲ ਲੋਕਲਹੋਸਟ ਤੋਂ ਹੀ ਪਹੁੰਚ ਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr ""
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
+msgid "Print debug information"
+msgstr "ਡੀਬੱਗ ਜਾਣਕਾਰੀ ਛਾਪੋ"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
+msgid "Serve pages from:"
+msgstr "ਇਸ ਤੋਂ ਸਫ਼ੇ ਪੇਸ਼ ਕਰੋ:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "...ਝਲਕ"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
+msgid "Deploy..."
+msgstr "...ਲਾਗੂ ਕਰੋ"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "Default page:"
+msgstr "ਡਿਫਾਲਟ ਸਫ਼ਾ:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
+msgstr "CGI ਹੈਂਡਲਰ: (.ext1=path1;.ext2=path2;...)"
+
+msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
+msgid "Download subtitles"
+msgstr "ਸਬ-ਟਾਈਟਲ ਡਾਊਨਲੋਡ ਕਰੋ"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
+msgid "Replace currently loaded subtitles"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "ਡਾਊਨਲੋਡ ਕਰੋ"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "ਤਾਜ਼ਾ ਕਰੋ"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "ਅਧੂਰਾ ਛੱਡੋ"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "ਚੋਣਾਂ"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "ਸਬ-ਟਾਈਟਲ ਅੱਪਲੋਡ ਕਰੋ"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "ਅੱਪਲੋਡ ਕਰੋ"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "ਅਧੂਰਾ ਛੱਡੋ"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "ਚੋਣਾਂ"
+
+msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
+msgid "Save As..."
+msgstr "...ਇੰਝ ਸੰਭਾਲੋ"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Color controls (for VMR-9, EVR and madVR)"
+msgstr ""
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Brightness"
+msgstr "ਚਮਕ"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Contrast"
+msgstr "ਕਨਟਰਾਸਟ"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Hue"
+msgstr "ਰੰਗਤ"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Saturation"
+msgstr "ਸੰਤ੍ਰਿਪਤਾ"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET"
+msgid "Reset"
+msgstr "ਮੁੜ-ਸੈੱਟ ਕਰੋ"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Update check"
+msgstr "ਅੱਪਡੇਟ ਜਾਂਚ ਕਰੋ"
+
+msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
+msgid "Enable automatic update check"
+msgstr "ਆਟੋਮੈਟਿਕ ਅੱਪਡੇਟ ਜਾਂਚ ਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
+msgid "Check every:"
+msgstr "ਜਾਂਚ ਕਰੋ ਹਰੇਕ:"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
+msgid "day(s)"
+msgstr "ਦਿਨ"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Settings management"
+msgstr "ਸੈਟਿੰਗ ਪਰਬੰਧ"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
+msgid "Reset"
+msgstr "ਮੁੜ-ਸੈੱਟ ਕਰੋ"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
+msgid "Export"
+msgstr "ਦਰਾਮਦ"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
+msgid "Export keys"
+msgstr "ਸਵਿੱਚਾਂ ਬਰਾਮਦ ਕਰੋ"
+
+msgctxt "IDD_TUNER_SCAN_CAPTION"
+msgid "Tuner scan"
+msgstr "ਟਿਊਨਰ ਜਾਂਚ"
+
+msgctxt "IDD_TUNER_SCAN_ID_START"
+msgid "Start"
+msgstr "ਸ਼ੁਰੂ"
+
+msgctxt "IDD_TUNER_SCAN_IDCANCEL"
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. Start"
+msgstr ""
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Bandwidth"
+msgstr "ਬਰੈਂਡਵਿਡਥ"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. End"
+msgstr ""
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
+msgid "Ignore encrypted channels"
+msgstr ""
+
+msgctxt "IDD_TUNER_SCAN_ID_SAVE"
+msgid "Save"
+msgstr "ਸੰਭਾਲੋ"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "S"
+msgstr "S"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Q"
+msgstr "Q"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
+msgid "Use an offset"
+msgstr ""
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Default Device"
+msgstr "ਡਿਫਾਲਟ ਡਿਵਾਇਸ"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
+msgid "Analog"
+msgstr "ਐਨਾਲਾਗ"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO2"
+msgid "Digital"
+msgstr "ਡਿਜ਼ੀਟਲ"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Analog settings"
+msgstr "ਐਨਾਲਾਗ ਸੈਟਿੰਗਾਂ"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC1"
+msgid "Video"
+msgstr "ਵਿਡੀਓ"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC2"
+msgid "Audio"
+msgstr "ਆਡੀਓ"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC3"
+msgid "Country"
+msgstr "ਦੇਸ਼"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Digital settings (BDA)"
+msgstr "ਡਿਜ਼ਿਟਲ ਸੈਟਿੰਗਾਂ (BDA)"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
+msgid "Network Provider"
+msgstr "ਨੈਟਵਰਕ ਪਰਦਾਤਾ"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
+msgid "Tuner"
+msgstr "ਟਿਊਨਰ"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC6"
+msgid "Receiver"
+msgstr "ਰਿਸੀਵਰ"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
+msgid "Channel switching approach:"
+msgstr ""
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
+msgid "Rebuild filter graph"
+msgstr ""
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
+msgid "Stop filter graph"
+msgstr ""
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
+msgid "Sync video to display"
+msgstr ""
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
+msgid "Frequency adjustment:"
+msgstr ""
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
+msgid "Sync display to video"
+msgstr ""
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
+msgid "Frequency adjustment:"
+msgstr ""
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC3"
+msgid "lines"
+msgstr "ਲਾਈਨਾਂ"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
+msgid "columns"
+msgstr "ਕਾਲਮ"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
+msgid "Present at nearest VSync"
+msgstr ""
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
+msgid "Target sync offset:"
+msgstr ""
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
+msgid "ms"
+msgstr "ਮਿ.ਸ."
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC7"
+msgid "Control limits:"
+msgstr "ਕੰਟਰੋਲ ਲਿਮਟ:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
+msgid "+/-"
+msgstr "+/-"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
+msgid "ms"
+msgstr "ਮਿ.ਸ."
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
+msgid "Changes take effect after the playback has been closed and restarted."
+msgstr ""
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
+msgid "Launch files in fullscreen"
+msgstr "ਫ਼ਾਈਲਾਂ ਪੂਰੀ ਸਕਰੀਨ ਉੱਤੇ ਚਲਾਓ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
+msgid "Hide controls in fullscreen"
+msgstr "ਪੂਰੀ ਸਕਰੀਨ ਵਿੱਚ ਕੰਟਰੋਲ ਓਹਲੇ ਕਰੋ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
+msgid "ms"
+msgstr "ਮਿ.ਸ."
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
+msgid "Hide docked panels"
+msgstr "ਡੌਕ ਕੀਤੇ ਪੈਨਲ ਓਹਲੇ ਕਰੋ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
+msgid "Exit fullscreen at the end of playback"
+msgstr "ਚਲਾਉਣਾ ਖਤਮ ਹੋਣ ਦੇ ਬਾਅਦ ਪੂਰੀ-ਸਕਰੀਨ ਨੂੰ ਛੱਡੋ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Fullscreen monitor"
+msgstr "ਪੂਰੀ ਸਕਰੀਨ ਮਾਨੀਟਰ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
+msgid "Use autochange fullscreen monitor mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
+msgid "Add"
+msgstr "ਜੋੜੋ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
+msgid "Del"
+msgstr "ਹਟਾਓ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
+msgid "Up"
+msgstr "ਉੱਤੇ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON4"
+msgid "Down"
+msgstr "ਹੇਠਾਂ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
+msgid "Apply default monitor mode on fullscreen exit"
+msgstr ""
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
+msgid "Restore resolution on program exit"
+msgstr ""
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Delay"
+msgstr "ਦੇਰੀ"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
+msgid "s"
+msgstr "ਸ"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
+msgid "Info"
+msgstr "ਜਾਣਕਾਰੀ"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_SCAN"
+msgid "Scan"
+msgstr "ਸਕੈਨ ਕਰੋ"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
+msgid "Prefer forced and/or default subtitles tracks"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
+msgid "Prefer external subtitles over embedded subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
+msgid "Ignore embedded subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Autoload paths"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
+msgid "Reset"
+msgstr "ਮੁੜ-ਸੈੱਟ ਕਰੋ"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Online search, download and upload subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Languages in order of preference:"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr ""
+
+msgctxt "IDD_UPDATE_DIALOG_CAPTION"
+msgid "Update Checker"
+msgstr "ਅੱਪਡੇਟ ਚੈਕਰ"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
+msgid "&Download now"
+msgstr "ਹੁਣੇ ਡਾਊਨਲੋਡ ਕਰੋ(&D)"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
+msgid "Remind me &later"
+msgstr "ਮੈਨੂੰ ਬਾਅਦ ਵਿੱਚ ਯਾਦ ਕਰਵਾਉ(&l)"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
+msgid "&Ignore this update"
+msgstr "ਇਹ ਅੱਪਡੇਟ ਅਣਡਿੱਠਾ ਕਰੋ(I)"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shaders contain special effects which can be added to the video rendering process."
+msgstr ""
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
+msgid "Add shader file"
+msgstr ""
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
+msgid "Remove"
+msgstr "ਹਟਾਓ"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
+msgid "Add to pre-resize"
+msgstr ""
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
+msgid "Add to post-resize"
+msgstr ""
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shader presets"
+msgstr ""
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
+msgid "Load"
+msgstr "ਲੋਡ ਕਰੋ"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
+msgid "Save"
+msgstr "ਸੰਭਾਲੋ"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON5"
+msgid "Delete"
+msgstr "ਹਟਾਓ"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active pre-resize shaders"
+msgstr ""
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active post-resize shaders"
+msgstr ""
+
+msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
+msgid "Debug Shaders"
+msgstr ""
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
+msgid "Debug Information"
+msgstr "ਡੀਬੱਗ ਜਾਣਕਾਰੀ"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
+msgid "PS 2.0"
+msgstr "PS 2.0"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO2"
+msgid "PS 2.0b"
+msgstr "PS 2.0b"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO3"
+msgid "PS 2.0a"
+msgstr "PS 2.0a"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO4"
+msgid "PS 3.0"
+msgstr "PS 3.0"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
+msgid "Advanced Settings, do not edit unless you know what you are doing."
+msgstr "ਤਕਨੀਕੀ ਸੈਟਿੰਗਾਂ, ਉਦੋਂ ਤੱਕ ਨਾ ਸੋਧੋ, ਜਦੋਂ ਤੱਕ ਕਿ ਤੁਸੀਂ ਜਾਣਦੇ ਨਹੀਂ ਹੋ ਕਿ ਤੁਸੀਂ ਕੀ ਕਰ ਰਹੇ ਹੋ।"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
+msgid "True"
+msgstr "ਸਹੀ"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
+msgid "False"
+msgstr "ਗਲਤ"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
+msgid "Default"
+msgstr "ਡਿਫਾਲਟ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "ਡਿਵਾਇਸ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "ਚੋਣਾਂ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "ਲੈਵਲ:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "ਨੋਟ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr ""
+
+msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "JPEG ਕੁਆਲਟੀ:"
+
+msgctxt "IDD_CMD_LINE_HELP_CAPTION"
+msgid "Command line help"
+msgstr "ਕਮਾਂਡ ਲਾਈਨ ਮਦਦ"
+
+msgctxt "IDD_CMD_LINE_HELP_IDOK"
+msgid "OK"
+msgstr "ਠੀਕ ਹੈ"
+
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "ਕਰੈਸ਼ ਰਿਪੋਰਟਰ"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "ਸਾਨੂੰ ਅਫਸੋਸ ਹੈ ਕਿ MPC-HC ਕਰੈਸ਼ ਹੋ ਗਿਆ ਹੈ। :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "ਚੋਣਵੀਂ ਜਾਣਕਾਰੀ"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "ਈਮੇਲ:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "ਸਮੱਸਿਆ ਦਾ ਵੇਰਵਾ (ਕੇਵਲ ਅੰਗਰੇਜ਼ੀ ਵਿੱਚ):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "MPC-HC ਮੁੜ-ਚਾਲੂ ਕਰੋ"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "MPC-HC ਬੰਦ ਕਰੋ"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.pa.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.pa.menus.po
new file mode 100644
index 000000000..873174000
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.pa.menus.po
@@ -0,0 +1,710 @@
+# MPC-HC - Strings extracted from menus
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# A S Alam <apreet.alam@gmail.com>, 2015-2016
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-12-02 01:17+0000\n"
+"Last-Translator: A S Alam <apreet.alam@gmail.com>\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/mpc-hc/mpc-hc/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "POPUP"
+msgid "&File"
+msgstr "ਫਾਈਲ(&F)"
+
+msgctxt "ID_FILE_OPENQUICK"
+msgid "&Quick Open File..."
+msgstr "...ਤੁਰੰਤ ਫਾਈਲ ਖੋਲ੍ਹੋ(&Q)"
+
+msgctxt "ID_FILE_OPENMEDIA"
+msgid "&Open File..."
+msgstr "...ਫਾਈਲ ਖੋਲ੍ਹੋ(&O)"
+
+msgctxt "ID_FILE_OPENDVDBD"
+msgid "Open &DVD/BD..."
+msgstr "....&DVD/BD ਖੋਲ੍ਹੋ"
+
+msgctxt "ID_FILE_OPENDEVICE"
+msgid "Open De&vice..."
+msgstr "...ਡਿਵਾਇਸ ਖੋਲ੍ਹੋ(&v)"
+
+msgctxt "ID_FILE_OPENDIRECTORY"
+msgid "Open Dir&ectory..."
+msgstr "...ਡਾਇਰੈਕਟਰੀ ਖੋਲ੍ਹੋ(&e)"
+
+msgctxt "ID_FILE_OPENDISC"
+msgid "O&pen Disc"
+msgstr "ਡਿਸਕ ਖੋਲ੍ਹੋ(&p)"
+
+msgctxt "ID_RECENT_FILES"
+msgid "Recent &Files"
+msgstr "ਤਾਜ਼ਾ ਫਾਈਲਾਂ(&F)"
+
+msgctxt "ID_FILE_CLOSE_AND_RESTORE"
+msgid "&Close"
+msgstr "ਬੰਦ ਕਰੋ(&C)"
+
+msgctxt "ID_FILE_SAVE_COPY"
+msgid "&Save a Copy..."
+msgstr "...ਕਾਪੀ ਸੰਭਾਲੋ(&S)"
+
+msgctxt "ID_FILE_SAVE_IMAGE"
+msgid "Save &Image..."
+msgstr "...ਚਿੱਤਰ ਸੰਭਾਲੋ(&I)"
+
+msgctxt "ID_FILE_SAVE_THUMBNAILS"
+msgid "Save &Thumbnails..."
+msgstr "...ਥੰਮਨੇਲ ਸੰਭਾਲੋ(&T)"
+
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "ਸਬ-ਟਾਈਟਲ"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "...ਸਬਟਾਈਟਲ ਲੋਡ ਕਰੋ(&L)"
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "...ਸਬਟਾਈਟਲ ਸੰਭਾਲੋ(&u)"
+
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "...ਸਬ-ਟਾਈਟਲ ਡਾਊਨਲੋਡ ਕਰੋ(&D)"
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "...ਸਬ-ਟਾਈਟਲ ਅੱਪਲੋਡ ਕਰੋ(&U)"
+
+msgctxt "ID_FILE_PROPERTIES"
+msgid "P&roperties"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ(&r)"
+
+msgctxt "ID_FILE_EXIT"
+msgid "E&xit"
+msgstr "ਬਾਹਰ(&x)"
+
+msgctxt "POPUP"
+msgid "&View"
+msgstr "ਵੇਖੋ(&V)"
+
+msgctxt "ID_VIEW_CAPTIONMENU"
+msgid "Caption&&Menu"
+msgstr "ਸੁਰਖੀ ਤੇ ਮੀਨੂ"
+
+msgctxt "ID_VIEW_SEEKER"
+msgid "See&k Bar"
+msgstr "ਸੀਕ ਬਾਰ(&k)"
+
+msgctxt "ID_VIEW_CONTROLS"
+msgid "&Controls"
+msgstr "ਕੰਟਰੋਲ(&C)"
+
+msgctxt "ID_VIEW_INFORMATION"
+msgid "&Information"
+msgstr "ਜਾਣਕਾਰੀ(&I)"
+
+msgctxt "ID_VIEW_STATISTICS"
+msgid "&Statistics"
+msgstr "ਅੰਕੜੇ(&S)"
+
+msgctxt "ID_VIEW_STATUS"
+msgid "St&atus"
+msgstr "ਸਥਿਤੀ(&a)"
+
+msgctxt "ID_VIEW_SUBRESYNC"
+msgid "Su&bresync"
+msgstr "ਸਬ-ਰੀਸਿੰਕ(&b)"
+
+msgctxt "ID_VIEW_PLAYLIST"
+msgid "Pla&ylist"
+msgstr "ਪਲੇਅਲਿਸਟ(&y)"
+
+msgctxt "ID_VIEW_CAPTURE"
+msgid "Captu&re"
+msgstr "ਕੈਪਚਰ(&r)"
+
+msgctxt "ID_VIEW_NAVIGATION"
+msgid "Na&vigation"
+msgstr "ਨੇਵੀਗੇਸ਼ਨ(&v)"
+
+msgctxt "ID_VIEW_DEBUGSHADERS"
+msgid "&Debug Shaders"
+msgstr "ਡੀਬੱਗਰ ਸ਼ੇਡਰ(&D)"
+
+msgctxt "POPUP"
+msgid "&Presets..."
+msgstr "...ਪ੍ਰੀਸੈਟ(&P)"
+
+msgctxt "ID_VIEW_PRESETS_MINIMAL"
+msgid "&Minimal"
+msgstr "ਘੱਟੋ-ਘੱਟ(&M)"
+
+msgctxt "ID_VIEW_PRESETS_COMPACT"
+msgid "&Compact"
+msgstr "ਨਿੰਮਾ(&C)"
+
+msgctxt "ID_VIEW_PRESETS_NORMAL"
+msgid "&Normal"
+msgstr "ਆਮ(&N)"
+
+msgctxt "ID_VIEW_FULLSCREEN"
+msgid "F&ull Screen"
+msgstr "ਪੂਰਾ ਸਕਰੀਨ(&u)"
+
+msgctxt "POPUP"
+msgid "&Zoom"
+msgstr "ਜ਼ੂਮ(&Z)"
+
+msgctxt "ID_VIEW_ZOOM_50"
+msgid "&50%"
+msgstr "&50%"
+
+msgctxt "ID_VIEW_ZOOM_100"
+msgid "&100%"
+msgstr "&100%"
+
+msgctxt "ID_VIEW_ZOOM_200"
+msgid "&200%"
+msgstr "&200%"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT"
+msgid "Auto &Fit"
+msgstr "ਆਟੋ ਫਿੱਟ(&F)"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (&Larger Only)"
+msgstr "ਆਟੋ ਫਿੱਟ (ਕੇਵਲ ਵੱਡਾ)(&L)"
+
+msgctxt "POPUP"
+msgid "R&enderer Settings"
+msgstr "ਰੈਂਡਰਰ ਸੈਟਿੰਗਾਂ(&e)"
+
+msgctxt "ID_VIEW_TEARING_TEST"
+msgid "&Tearing Test"
+msgstr "ਟੀਅਰਿੰਗ ਟੈਸਟ(&T)"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "ਡਿਸਪਲੇਅ ਸੈਟਿੰਗਾਂ(&D)"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "ਮੌਜੂਦਾ ਸਮਾਂ ਦਿਖਾਉ(&i)"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "ਫਾਈਲ ਨਾਂ ਵੇਖਾਓ(&F)"
+
+msgctxt "POPUP"
+msgid "&Output Range"
+msgstr "ਆਉਟਪੁੱਟ ਰੇਜ਼(&O)"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
+msgid "&0 - 255"
+msgstr "&0 - 255"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
+msgid "&16 - 235"
+msgstr "&16 - 235"
+
+msgctxt "POPUP"
+msgid "&Presentation"
+msgstr "ਪਰਿਜੈਂਟੇਸ਼ਨ(&P)"
+
+msgctxt "ID_VIEW_D3DFULLSCREEN"
+msgid "D3D Fullscreen &Mode"
+msgstr "D3D ਪੂਰੀ-ਸਕਰੀਨ ਮੋਡ(&M)"
+
+msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
+msgid "D3D Fullscreen &GUI Support"
+msgstr "D3D ਪੂਰੀ-ਸਕਰੀਨ &GUI ਸਹਿਯੋਗ"
+
+msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
+msgid "10-bit &RGB Output"
+msgstr "10-ਬਿੱਟ &RGB ਆਉਟਪੁੱਟ"
+
+msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
+msgid "Force 10-bit RGB &Input"
+msgstr ""
+
+msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
+msgid "&Full Floating Point Processing"
+msgstr ""
+
+msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
+msgid "&Half Floating Point Processing"
+msgstr ""
+
+msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
+msgid "Disable desktop composition (&Aero)"
+msgstr "ਡੈਸਕਟਾਪ ਕੰਪੋਜ਼ਿਸ਼ਨ ਅਸਮਰੱਥ ਕਰੋ (ਏਰੋ)(&A)"
+
+msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time &Correction"
+msgstr "ਫਰੇਮ ਸਮਾਂ ਸੋਧ ਸਮਰੱਥ ਕਰੋ(&C)"
+
+msgctxt "POPUP"
+msgid "&Color Management"
+msgstr "ਰੰਗ ਪਰਬੰਧ(&C)"
+
+msgctxt "ID_VIEW_CM_ENABLE"
+msgid "&Enable"
+msgstr "ਸਮਰੱਥ ਕਰੋ(&E)"
+
+msgctxt "POPUP"
+msgid "&Input Type"
+msgstr "ਇਨਪੁਟ ਕਿਸਮ(&I)"
+
+msgctxt "ID_VIEW_CM_INPUT_AUTO"
+msgid "&Auto-Detect"
+msgstr "ਆਟੋ-ਖੋਜ(&A)"
+
+msgctxt "ID_VIEW_CM_INPUT_HDTV"
+msgid "&HDTV"
+msgstr "&HDTV"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
+msgid "SDTV &NTSC"
+msgstr "SDTV &NTSC"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
+msgid "SDTV &PAL"
+msgstr "SDTV &PAL"
+
+msgctxt "POPUP"
+msgid "Ambient &Light"
+msgstr ""
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
+msgid "&Bright (2.2 Gamma)"
+msgstr "ਚਮਕ (2.2 ਗਾਮਾ)(&B)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
+msgid "&Dim (2.35 Gamma)"
+msgstr "ਫਿੱਕਾ (2.35 ਗਾਮਾ)(&D)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
+msgid "D&ark (2.4 Gamma)"
+msgstr "ਗੂੜ੍ਹਾ (2.4 ਗਾਮਾ)(&a)"
+
+msgctxt "POPUP"
+msgid "&Rendering Intent"
+msgstr ""
+
+msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
+msgid "&Perceptual"
+msgstr ""
+
+msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
+msgid "&Relative Colorimetric"
+msgstr ""
+
+msgctxt "ID_VIEW_CM_INTENT_SATURATION"
+msgid "&Saturation"
+msgstr "ਸੰਤ੍ਰਿਪਤਾ(&S)"
+
+msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
+msgid "&Absolute Colorimetric"
+msgstr ""
+
+msgctxt "POPUP"
+msgid "&VSync"
+msgstr "&V-ਸਿੰਕ"
+
+msgctxt "ID_VIEW_VSYNC"
+msgid "&VSync"
+msgstr "&V-ਸਿੰਕ"
+
+msgctxt "ID_VIEW_VSYNCACCURATE"
+msgid "&Accurate VSync"
+msgstr ""
+
+msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
+msgid "A&lternative VSync"
+msgstr ""
+
+msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
+msgid "&Decrease VSync Offset"
+msgstr ""
+
+msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
+msgid "&Increase VSync Offset"
+msgstr ""
+
+msgctxt "POPUP"
+msgid "&GPU Control"
+msgstr "&GPU ਕੰਟਰੋਲ"
+
+msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
+msgid "Flush GPU &before VSync"
+msgstr ""
+
+msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
+msgid "Flush GPU &after Present"
+msgstr ""
+
+msgctxt "ID_VIEW_FLUSHGPU_WAIT"
+msgid "&Wait for flushes"
+msgstr ""
+
+msgctxt "POPUP"
+msgid "R&eset"
+msgstr "ਮੁੜ-ਸੈਟ ਕਰੋ(&e)"
+
+msgctxt "ID_VIEW_RESET_DEFAULT"
+msgid "Reset to &default renderer settings"
+msgstr ""
+
+msgctxt "ID_VIEW_RESET_OPTIMAL"
+msgid "Reset to &optimal renderer settings"
+msgstr ""
+
+msgctxt "POPUP"
+msgid "Video &Frame"
+msgstr "ਵਿਡੀਓ ਫਰੇਮ(&F)"
+
+msgctxt "ID_VIEW_VF_HALF"
+msgid "&Half Size"
+msgstr "ਅੱਧਾ ਆਕਾਰ(&H)"
+
+msgctxt "ID_VIEW_VF_NORMAL"
+msgid "&Normal Size"
+msgstr "ਆਮ ਆਕਾਰ(&N)"
+
+msgctxt "ID_VIEW_VF_DOUBLE"
+msgid "&Double Size"
+msgstr "ਦੁੱਗਣਾ ਆਕਾਰ(&D)"
+
+msgctxt "ID_VIEW_VF_STRETCH"
+msgid "&Stretch To Window"
+msgstr "ਵਿੰਡੋ ਲਈ ਖਿੱਚੋ(&S)"
+
+msgctxt "ID_VIEW_VF_FROMINSIDE"
+msgid "Touch Window From &Inside"
+msgstr "ਪਾਸੇ ਤੋਂ ਵਿੰਡੋ ਨੂੰ ਟੱਚ ਕਰੋ(&I)"
+
+msgctxt "ID_VIEW_VF_ZOOM1"
+msgid "Zoom &1"
+msgstr "ਜ਼ੂਮ &1"
+
+msgctxt "ID_VIEW_VF_ZOOM2"
+msgid "Zoom &2"
+msgstr "ਜ਼ੂਮ &2"
+
+msgctxt "ID_VIEW_VF_FROMOUTSIDE"
+msgid "Touch Window From &Outside"
+msgstr "ਬਾਹਰ ਤੋਂ ਵਿੰਡੋ ਟੱਚ ਕਰੋ(&O)"
+
+msgctxt "POPUP"
+msgid "&Aspect Ratio"
+msgstr ""
+
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr ""
+
+msgctxt "ID_ASPECTRATIO_4_3"
+msgid "&4:3"
+msgstr "&4:3"
+
+msgctxt "ID_ASPECTRATIO_5_4"
+msgid "&5:4"
+msgstr "&5:4"
+
+msgctxt "ID_ASPECTRATIO_16_9"
+msgid "&16:9"
+msgstr "&16:9"
+
+msgctxt "ID_ASPECTRATIO_235_100"
+msgid "&235:100"
+msgstr "&235:100"
+
+msgctxt "ID_ASPECTRATIO_185_100"
+msgid "1&85:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
+
+msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
+msgid "&Correct Monitor/Desktop AR Diff"
+msgstr ""
+
+msgctxt "POPUP"
+msgid "Pa&n&&Scan"
+msgstr "ਪੈਨ ਤੇ ਆਕਾਰ(&n)"
+
+msgctxt "ID_VIEW_INCSIZE"
+msgid "&Increase Size"
+msgstr "ਆਕਾਰ ਵਧਾਓ(&I)"
+
+msgctxt "ID_VIEW_DECSIZE"
+msgid "&Decrease Size"
+msgstr "ਆਕਾਰ ਘਟਾਓ(&D)"
+
+msgctxt "ID_VIEW_INCWIDTH"
+msgid "I&ncrease Width"
+msgstr "ਚੌੜਾਈ ਵਧਾਓ(&n)"
+
+msgctxt "ID_VIEW_DECWIDTH"
+msgid "D&ecrease Width"
+msgstr "ਚੌੜਾਈ ਘਟਾਓ(&e)"
+
+msgctxt "ID_VIEW_INCHEIGHT"
+msgid "In&crease Height"
+msgstr "ਉਚਾਈ ਵਧਾਓ(&c)"
+
+msgctxt "ID_VIEW_DECHEIGHT"
+msgid "Decre&ase Height"
+msgstr "ਉਚਾਈ ਘਟਾਓ(&a)"
+
+msgctxt "ID_PANSCAN_MOVERIGHT"
+msgid "Move &Right"
+msgstr "ਸੱਜੇ ਪਾਸੇ ਖਿਸਕਾਓ(&R)"
+
+msgctxt "ID_PANSCAN_MOVELEFT"
+msgid "Move &Left"
+msgstr "ਖੱਬੇ ਪਾਸੇ ਖਿਸਕਾਓ(&L)"
+
+msgctxt "ID_PANSCAN_MOVEUP"
+msgid "Move &Up"
+msgstr "ਉੱਤੇ ਵੱਲ ਖਿਸਕਾਓ(&U)"
+
+msgctxt "ID_PANSCAN_MOVEDOWN"
+msgid "Move &Down"
+msgstr "ਹੇਠਾਂ ਵੱਲ ਖਿਸਕਾਓ(&D)"
+
+msgctxt "ID_PANSCAN_CENTER"
+msgid "Cen&ter"
+msgstr "ਸੈਂਟਰ(&t)"
+
+msgctxt "ID_VIEW_RESET"
+msgid "Re&set"
+msgstr "ਮੁੜ-ਸੈੱਟ ਕਰੋ(&s)"
+
+msgctxt "POPUP"
+msgid "On &Top"
+msgstr "ਉੱਤੇ(&T)"
+
+msgctxt "ID_ONTOP_DEFAULT"
+msgid "&Default"
+msgstr "ਡਿਫਾਲਟ(&D)"
+
+msgctxt "ID_ONTOP_ALWAYS"
+msgid "&Always"
+msgstr "ਹਮੇਸ਼ਾ(&A)"
+
+msgctxt "ID_ONTOP_WHILEPLAYING"
+msgid "While &Playing"
+msgstr "ਚਲਾਉਣ ਦੇ ਦੌਰਾਨ(&P)"
+
+msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
+msgid "While Playing &Video"
+msgstr "ਵਿਡੀਓ ਚਲਾਉਣ ਦੇ ਦੌਰਾਨ(&V)"
+
+msgctxt "ID_VIEW_OPTIONS"
+msgid "&Options..."
+msgstr "...ਚੋਣਾਂ(&O)"
+
+msgctxt "POPUP"
+msgid "&Play"
+msgstr "ਚਲਾਓ(&P)"
+
+msgctxt "ID_PLAY_PLAYPAUSE"
+msgid "&Play/Pause"
+msgstr "ਚਲਾਓ/ਰੋਕੋ(&P)"
+
+msgctxt "ID_PLAY_STOP"
+msgid "&Stop"
+msgstr "ਰੋਕੋ(&S)"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Fra&me Step"
+msgstr "ਫਰੇਮ ਸਟੈਪ(&r)"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "ਦੁਹਰਾਓ(&R)"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "ਹਮੇਸ਼ਾ(&o)"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "ਫਾਈਲ(&F)"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "ਪਲੇਅਲਿਸਟ(&P)"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "&Decrease Rate"
+msgstr "ਦਰ ਘਟਾਓ(&D)"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "&Increase Rate"
+msgstr "ਦਰ ਵਧਾਓ(&I)"
+
+msgctxt "ID_PLAY_RESETRATE"
+msgid "R&eset Rate"
+msgstr "ਦਰ ਮੁੜ-ਸੈਟ ਕਰੋ(&e)"
+
+msgctxt "ID_FILTERS"
+msgid "&Filters"
+msgstr "ਫਿਲਟਰ(&F)"
+
+msgctxt "ID_SHADERS"
+msgid "S&haders"
+msgstr "ਸ਼ੇਡ(&h)"
+
+msgctxt "ID_AUDIOS"
+msgid "&Audio Track"
+msgstr "ਆਡੀਓ ਟਰੈਕ(&A)"
+
+msgctxt "ID_SUBTITLES"
+msgid "Su&btitle Track"
+msgstr "ਸਬਟਾਈਟਲ ਟਰੈਕ(&b)"
+
+msgctxt "ID_VIDEO_STREAMS"
+msgid "Vide&o Track"
+msgstr "ਵਿਡੀਓ ਟਰੈਕ(&V)"
+
+msgctxt "POPUP"
+msgid "&Volume"
+msgstr "ਵਾਲੀਅਮ(&V)"
+
+msgctxt "ID_VOLUME_UP"
+msgid "&Up"
+msgstr "ਉੱਤੇ(&U)"
+
+msgctxt "ID_VOLUME_DOWN"
+msgid "&Down"
+msgstr "ਹੇਠਾਂ(&D)"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "&Mute"
+msgstr "ਚੁੱਪ(&M)"
+
+msgctxt "POPUP"
+msgid "Af&ter Playback"
+msgstr "ਚਲਾਉਣ ਦੇ ਬਾਅਦ(&t)"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "ਕੁਝ ਨਾ ਕਰੋ(&t)"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "ਫੋਲਡਰ ਵਿੱਚ ਅਗਲੀ ਫਾਈਲ ਚਲਾਓ(&n)"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "ਮਾਨੀਟਰ ਬੰਦ ਕਰੋ(&m)"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
+msgid "&Exit"
+msgstr "ਬਾਹਰ ਨਿਕਲੋ(&E)"
+
+msgctxt "ID_AFTERPLAYBACK_STANDBY"
+msgid "&Stand By"
+msgstr "ਸਟੈਂਡਬਾਏ(&S)"
+
+msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
+msgid "&Hibernate"
+msgstr "ਹਾਈਬਰਨੇਟ(&H)"
+
+msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
+msgid "Shut&down"
+msgstr "ਬੰਦ ਕਰੋ(&d)"
+
+msgctxt "ID_AFTERPLAYBACK_LOGOFF"
+msgid "Log &Off"
+msgstr "ਲਾਗ ਆਫ਼(&O)"
+
+msgctxt "ID_AFTERPLAYBACK_LOCK"
+msgid "&Lock"
+msgstr "ਲਾਕ ਕਰੋ(&L)"
+
+msgctxt "POPUP"
+msgid "&Navigate"
+msgstr "ਨੇਵੀਗੇਸ਼ਨ(&N)"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "&Previous"
+msgstr "ਪਿੱਛੇ(&P)"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "&Next"
+msgstr "ਅੱਗੇ(&N)"
+
+msgctxt "ID_NAVIGATE_GOTO"
+msgid "&Go To..."
+msgstr "...ਉੱਤੇ ਜਾਓ(&G)"
+
+msgctxt "ID_NAVIGATE_TITLEMENU"
+msgid "&Title Menu"
+msgstr "ਟਾਈਟਲ ਮੀਨੂ(&T)"
+
+msgctxt "ID_NAVIGATE_ROOTMENU"
+msgid "&Root Menu"
+msgstr "ਰੂਟ ਮੀਨੂ(&R)"
+
+msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
+msgid "&Subtitle Menu"
+msgstr "ਸਬ-ਟਾਈਟਲ ਮੀਨੂ(&S)"
+
+msgctxt "ID_NAVIGATE_AUDIOMENU"
+msgid "&Audio Menu"
+msgstr "ਆਡੀਓ ਮੀਨੂ(&A)"
+
+msgctxt "ID_NAVIGATE_ANGLEMENU"
+msgid "An&gle Menu"
+msgstr "ਐਂਗਲ ਮੀਨੂ(&g)"
+
+msgctxt "ID_NAVIGATE_CHAPTERMENU"
+msgid "&Chapter Menu"
+msgstr "ਚੈਪਟਰ ਮੀਨੂ(&C)"
+
+msgctxt "ID_FAVORITES"
+msgid "F&avorites"
+msgstr "ਮਨਪਸੰਦ(&a)"
+
+msgctxt "POPUP"
+msgid "&Help"
+msgstr "ਮਦਦ(&H)"
+
+msgctxt "ID_HELP_HOMEPAGE"
+msgid "&Home Page"
+msgstr "ਮੁੱਖ ਸਫ਼ਾ(&H)"
+
+msgctxt "ID_HELP_CHECKFORUPDATE"
+msgid "Check for &updates"
+msgstr "ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ(&u)"
+
+msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
+msgid "&Command Line Switches"
+msgstr "ਕਮਾਂਡ ਲਾਈਨ ਸਵਿੱਚਾਂ(&C)"
+
+msgctxt "ID_HELP_TOOLBARIMAGES"
+msgid "Download &Toolbar Images"
+msgstr "ਟੂਲਬਾਰ ਚਿੱਤਰ ਡਾਊਨਲੋਡ ਕਰੋ(&T)"
+
+msgctxt "ID_HELP_DONATE"
+msgid "&Donate"
+msgstr "ਦਾਨ ਦਿਓ(&D)"
+
+msgctxt "ID_HELP_ABOUT"
+msgid "&About..."
+msgstr "...ਇਸ ਬਾਰੇ(&A)"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.pa.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.pa.strings.po
new file mode 100644
index 000000000..67f8c3cc0
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.pa.strings.po
@@ -0,0 +1,3970 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# A S Alam <apreet.alam@gmail.com>, 2015-2016
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/mpc-hc/mpc-hc/language/pa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "IDS_INFOBAR_LOCATION"
+msgid "Location"
+msgstr "ਟਿਕਾਣਾ:"
+
+msgctxt "IDS_INFOBAR_VIDEO"
+msgid "Video"
+msgstr "ਵਿਡੀਓ"
+
+msgctxt "IDS_INFOBAR_AUDIO"
+msgid "Audio"
+msgstr "ਆਡੀਓ"
+
+msgctxt "IDS_INFOBAR_SUBTITLES"
+msgid "Subtitles"
+msgstr "ਸਬ-ਟਾਈਟਲ"
+
+msgctxt "IDS_INFOBAR_CHAPTER"
+msgid "Chapter"
+msgstr "ਚੈਪਟਰ"
+
+msgctxt "IDS_CONTROLS_COMPLETING"
+msgid "Completing..."
+msgstr "...ਪੂਰਾ ਕਰ ਰਿਹਾ ਹੈ"
+
+msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
+msgid "Play Video"
+msgstr "ਵਿਡੀਓ ਚਲਾਓ"
+
+msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
+msgid "Play Music"
+msgstr "ਸੰਗੀਤ ਚਲਾਓ"
+
+msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
+msgid "Play Audio CD"
+msgstr "ਆਡੀਓ CD ਚਲਾਓ"
+
+msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
+msgid "Play DVD Movie"
+msgstr "DVD ਮੂਵੀ ਚਲਾਓ"
+
+msgctxt "IDS_PROPSHEET_PROPERTIES"
+msgid "Properties"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "ਫਾਈਲ"
+
+msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
+msgid "&Default Style"
+msgstr "ਡਿਫਾਲਟ ਸ਼ੈਲੀ(&D)"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "ਪਲੇਅਲਿਸਟ"
+
+msgctxt "IDS_FAVFILES"
+msgid "Files"
+msgstr "ਫ਼ਾਈਲਾਂ"
+
+msgctxt "IDS_FAVDVDS"
+msgid "DVDs"
+msgstr "DVD"
+
+msgctxt "IDS_INFOBAR_CHANNEL"
+msgid "Channel"
+msgstr "ਚੈਨਲ"
+
+msgctxt "IDS_INFOBAR_TIME"
+msgid "Time"
+msgstr "ਸਮਾਂ"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET"
+msgid "Sync Offset"
+msgstr "ਸਿੰਕ ਆਫ਼ਸੈਟ"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
+msgid "avg: %d ms, dev: %d ms"
+msgstr "ਔਸਤ: %d ms, ਡੇਵੀ.: %d ms"
+
+msgctxt "IDS_STATSBAR_JITTER"
+msgid "Jitter"
+msgstr "ਜਿੱਟਰ"
+
+msgctxt "IDS_STATSBAR_BITRATE"
+msgid "Bitrate"
+msgstr "ਬਿੱਟਰੇਟ"
+
+msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
+msgid "(avg/cur)"
+msgstr "(ਔਸਤ/ਮੌਜੂਦ)"
+
+msgctxt "IDS_STATSBAR_SIGNAL"
+msgid "Signal"
+msgstr "ਸਿਗਨਲ"
+
+msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
+msgid "Strength: %d dB, Quality: %ld%%"
+msgstr "ਮਜ਼ਬੂਤੀ: %d dB, ਕੁਆਲਟੀ: %ld%%"
+
+msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
+msgid "Styles"
+msgstr "ਸ਼ੈਲੀਆਂ"
+
+msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
+msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
+msgctxt "IDS_PPAGE_CAPTURE_FG0"
+msgid "Never (fastest approach)"
+msgstr "ਕਦੇ ਨਹੀਂ (ਸਭ ਤੋਂ ਤੇਜ਼ ਢੰਗ)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG1"
+msgid "Only when switching different video types (default)"
+msgstr "ਕੇਵਲ ਵੱਖ-ਵੱਖ ਵਿਡੀਓ ਕਿਸਮਾਂ ਬਦਲਣ ਦੌਰਾਨ ਹੀ (ਡਿਫਾਲਟ)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG2"
+msgid "Always (slowest option)"
+msgstr "ਹਮੇਸ਼ਾ (ਸਭ ਤੋਂ ਹੌਲੀ ਚੋਣ)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
+msgid "Not supported by some devices. Two video decoders always present in the filter graph."
+msgstr "ਕੁਝ ਜੰਤਰ ਸਹਾਇਕ ਨਹੀਂ ਹਨ। ਫਿਲਟਰ ਗਰਾਫ਼ ਵਿੱਚ ਦੋ ਵਿਡੀਓ ਡੀਕੋਡਰ ਹਮੇਸ਼ਾ ਮੌਜੂਦ ਹੁੰਦੇ ਹਨ।"
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
+msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
+msgstr ""
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
+msgid "Not recommended. Only for testing purposes."
+msgstr "ਸਿਫ਼ਾਰਸ਼ੀ ਨਹੀਂ ਹੈ। ਕੇਵਲ ਟੈਸਟ ਕਰਨ ਲਈ ਹੀ ਹੈ।"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG0"
+msgid "Never if possible (fastest, but not supported by most filters)"
+msgstr "ਜੇ ਸੰਭਵ ਹੋਵੇ ਤਾਂ ਕਦੇ ਨਹੀਂ (ਸਭ ਤੋਂ ਤੇਜ਼, ਪਰ ਬਹੁਤੇ ਫਿਲਟਰਾਂ ਰਾਹੀਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG1"
+msgid "Only when switching different video types (default)"
+msgstr "ਕੇਵਲ ਵੱਖ-ਵੱਖ ਵਿਡੀਓ ਕਿਸਮਾਂ ਬਦਲਣ ਦੌਰਾਨ ਹੀ (ਡਿਫਾਲਟ)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG2"
+msgid "Always (may be required by some devices)"
+msgstr "ਹਮੇਸ਼ਾ (ਕੁਝ ਜੰਤਰਾਂ ਵਲੋਂ ਚਾਹੀਦਾ ਹੋ ਸਕਦਾ ਹੈ)"
+
+msgctxt "IDS_INFOBAR_PARENTAL_RATING"
+msgid "Parental rating"
+msgstr "ਮਾਪੇ ਰੇਟਿੰਗ"
+
+msgctxt "IDS_PARENTAL_RATING"
+msgid "%d+"
+msgstr "%d+"
+
+msgctxt "IDS_NO_PARENTAL_RATING"
+msgid "Not rated"
+msgstr "ਰੇਟ ਨਹੀਂ ਕੀਤਾ"
+
+msgctxt "IDS_INFOBAR_CONTENT"
+msgid "Content"
+msgstr "ਸਮੱਗਰੀ"
+
+msgctxt "IDS_CONTENT_MOVIE_DRAMA"
+msgid "Movie/Drama"
+msgstr "ਮੂਵੀ/ਡਰਾਮਾ"
+
+msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
+msgid "News/Current affairs"
+msgstr "ਖ਼ਬਰਾਂ/ਮੌਜੂਦਾ ਮਾਮਲੇ"
+
+msgctxt "IDS_SPEED_UNIT_G"
+msgid "GB/s"
+msgstr "GB/s"
+
+msgctxt "IDS_FILE_FAV_ADDED"
+msgid "File added to favorites"
+msgstr "ਫ਼ਾਈਲ ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜੀ ਗਈ"
+
+msgctxt "IDS_DVD_FAV_ADDED"
+msgid "DVD added to favorites"
+msgstr "DVD ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜੀ ਗਈ"
+
+msgctxt "IDS_CAPTURE_SETTINGS"
+msgid "Capture Settings"
+msgstr "ਕੈਪਚਰ ਸੈਟਿੰਗਾਂ"
+
+msgctxt "IDS_NAVIGATION_BAR"
+msgid "Navigation Bar"
+msgstr "ਨੇਵੀਗੇਸ਼ਨ ਪੱਟੀ"
+
+msgctxt "IDS_SUBRESYNC_CAPTION"
+msgid "Subresync"
+msgstr "ਸਬ-ਰੀਸਿੰਕ"
+
+msgctxt "IDS_SUBRESYNC_CLN_TIME"
+msgid "Time"
+msgstr "ਸਮਾਂ"
+
+msgctxt "IDS_SUBRESYNC_CLN_END"
+msgid "End"
+msgstr "ਅੰਤ"
+
+msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
+msgid "Preview"
+msgstr "ਝਲਕ"
+
+msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
+msgid "Vob ID"
+msgstr "ਵੋਬ ID"
+
+msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
+msgid "Cell ID"
+msgstr "ਸੈਲ ID"
+
+msgctxt "IDS_SUBRESYNC_CLN_FORCED"
+msgid "Forced"
+msgstr "ਮਜ਼ਬੂਰ ਕੀਤਾ"
+
+msgctxt "IDS_SUBRESYNC_CLN_TEXT"
+msgid "Text"
+msgstr "ਟੈਕਸਟ"
+
+msgctxt "IDS_SUBRESYNC_CLN_STYLE"
+msgid "Style"
+msgstr "ਸ਼ੈਲੀ"
+
+msgctxt "IDS_SUBRESYNC_CLN_FONT"
+msgid "Font"
+msgstr "ਫ਼ੋਂਟ"
+
+msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
+msgid "Failed to render some of the pins of the DVD Navigator filter"
+msgstr ""
+
+msgctxt "IDS_DVD_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for DVD playback"
+msgstr ""
+
+msgctxt "IDS_CAPTURE_LIVE"
+msgid "Live"
+msgstr "ਲਾਈਵ"
+
+msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
+msgid "Can't add video capture filter to the graph"
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
+msgid "Can't add audio capture filter to the graph"
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_DEVICE"
+msgid "Could not open capture device."
+msgstr ""
+
+msgctxt "IDS_INVALID_PARAMS_ERROR"
+msgid "Can't open, invalid input parameters"
+msgstr ""
+
+msgctxt "IDS_EDIT_LIST_EDITOR"
+msgid "Edit List Editor"
+msgstr "ਲਿਸਟ ਐਡੀਟਰ ਸੋਧੋ"
+
+msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
+msgid "The entered time is greater than the file duration."
+msgstr ""
+
+msgctxt "IDS_MISSING_ICONS_LIB"
+msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
+msgid "File"
+msgstr "ਫ਼ਾਈਲ"
+
+msgctxt "IDS_SUBDL_DLG_LANGUAGE_COL"
+msgid "Language"
+msgstr "ਭਾਸ਼ਾ"
+
+msgctxt "IDS_SUBDL_DLG_FORMAT_COL"
+msgid "Format"
+msgstr "ਫਾਰਮੈਟ"
+
+msgctxt "IDS_SUBDL_DLG_DISC_COL"
+msgid "Disc"
+msgstr "ਡਿਸਕ"
+
+msgctxt "IDS_SUBDL_DLG_TITLES_COL"
+msgid "Title(s)"
+msgstr "ਟਾਈਟ"
+
+msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
+msgid "CharSet"
+msgstr "ਅੱਖਰ-ਸਮੂਹ"
+
+msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
+msgid "Unicode"
+msgstr "ਯੂਨੀਕੋਡ"
+
+msgctxt "IDS_SUBRESYNC_CLN_LAYER"
+msgid "Layer"
+msgstr "ਲੇਅਰ"
+
+msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
+msgid "Actor"
+msgstr "ਐਕਟਰ"
+
+msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
+msgid "Effect"
+msgstr "ਪਰਭਾਵ"
+
+msgctxt "IDS_PLAYLIST_CAPTION"
+msgid "Playlist"
+msgstr "ਪਲੇਅਲਿਸਟ"
+
+msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
+msgid "On/Off"
+msgstr "ਚਾਲੂ/ਬੰਦ"
+
+msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
+msgid "From (FPS)"
+msgstr "ਤੋਂ (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
+msgid "To (FPS)"
+msgstr "ਤੱਕ (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
+msgid "Display mode (Hz)"
+msgstr "ਡਿਸਪਲੇਅ ਮੋਡ (Hz)"
+
+msgctxt "IDS_PPAGE_FS_DEFAULT"
+msgid "Default"
+msgstr "ਡਿਫਾਲਟ"
+
+msgctxt "IDS_PPAGE_FS_OTHER"
+msgid "Other"
+msgstr "ਹੋਰ"
+
+msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
+msgid "System Default"
+msgstr "ਸਿਸਟਮ ਡਿਫਾਲਟ"
+
+msgctxt "IDS_GRAPH_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for playback"
+msgstr "ਚਲਾਓ ਲਈ ਲੋੜੀਂਦੇ ਇੰਟਰਫੇਸ ਨਾਲ ਕਿਊਰੀ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
+
+msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
+msgid "Could not set target window for graph notification"
+msgstr "ਗਰਾਫ਼ ਸੂਚਨਾ ਲਈ ਟਾਰਗੇਟ ਵਿੰਡੋ ਸੈਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ"
+
+msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
+msgid "Failed to render all pins of the DVD Navigator filter"
+msgstr "DVD ਨੇਵੀਗੇਟਰ ਫਿਲਟਰ ਦੇ ਸਭ ਪਿੰਨਾਂ ਨੂੰ ਰੈਂਡਰ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
+
+msgctxt "IDS_PLAYLIST_OPEN"
+msgid "&Open"
+msgstr "ਖੋਲ੍ਹੋ(&O)"
+
+msgctxt "IDS_PLAYLIST_ADD"
+msgid "A&dd"
+msgstr "ਜੋੜੋ(&d)"
+
+msgctxt "IDS_PLAYLIST_REMOVE"
+msgid "&Remove"
+msgstr "ਹਟਾਓ(&R)"
+
+msgctxt "IDS_PLAYLIST_CLEAR"
+msgid "C&lear"
+msgstr "ਸਾਫ਼ ਕਰੋ(&l)"
+
+msgctxt "IDS_PLAYLIST_COPYTOCLIPBOARD"
+msgid "&Copy to clipboard"
+msgstr "ਕਲਿੱਪਬੋਰਡ ਵਿੱਚ ਕਾਪੀ ਕਰੋ(&C)"
+
+msgctxt "IDS_PLAYLIST_SAVEAS"
+msgid "&Save As..."
+msgstr "...ਇੰਝ ਸੰਭਾਲੋ(&S)"
+
+msgctxt "IDS_PLAYLIST_SORTBYLABEL"
+msgid "Sort by &label"
+msgstr "ਲੇਬਲ ਨਾਲ ਲੜੀਬੱਧ(&l)"
+
+msgctxt "IDS_PLAYLIST_SORTBYPATH"
+msgid "Sort by &path"
+msgstr "ਪਾਥ ਰਾਹੀਂ ਲੜੀਬੱਧ(&p)"
+
+msgctxt "IDS_PLAYLIST_RANDOMIZE"
+msgid "R&andomize"
+msgstr "ਰੈਂਡਮਾਈਜ਼(&a)"
+
+msgctxt "IDS_PLAYLIST_RESTORE"
+msgid "R&estore"
+msgstr "ਮੁੜ-ਸਟੋਰ ਕਰੋ(&e)"
+
+msgctxt "IDS_SUBRESYNC_SEPARATOR"
+msgid "&Separator"
+msgstr "ਵੱਖਰੇਵਾਂ(&S)"
+
+msgctxt "IDS_SUBRESYNC_DELETE"
+msgid "&Delete"
+msgstr "ਹਟਾਓ(&D)"
+
+msgctxt "IDS_SUBRESYNC_DUPLICATE"
+msgid "D&uplicate"
+msgstr "ਡੁਪਲੀਕੇਟ(&u)"
+
+msgctxt "IDS_SUBRESYNC_RESET"
+msgid "&Reset"
+msgstr "ਮੁੜ-ਸੈੱਟ ਕਰੋ(&R)"
+
+msgctxt "IDS_MPLAYERC_104"
+msgid "Subtitle Delay -"
+msgstr "ਸਬ-ਟਾਈਟਲ ਦੇਰੀ -"
+
+msgctxt "IDS_MPLAYERC_105"
+msgid "Subtitle Delay +"
+msgstr "ਸਬ-ਟਾਈਟਲ ਦੇਰੀ +"
+
+msgctxt "IDS_FILE_SAVE_THUMBNAILS"
+msgid "Save thumbnails"
+msgstr "ਥੰਮਨੇਲ ਸੰਭਾਲੋ"
+
+msgctxt "IDD_PPAGEPLAYBACK"
+msgid "Playback"
+msgstr "ਚਲਾਓ"
+
+msgctxt "IDD_PPAGEPLAYER"
+msgid "Player"
+msgstr "ਪਲੇਅਰ"
+
+msgctxt "IDD_PPAGEDVD"
+msgid "Playback::DVD/OGM"
+msgstr "ਚਲਾਓ::DVD/OGM"
+
+msgctxt "IDD_PPAGESUBTITLES"
+msgid "Subtitles"
+msgstr "ਸਬ-ਟਾਈਟਲ"
+
+msgctxt "IDD_PPAGEFORMATS"
+msgid "Player::Formats"
+msgstr "ਚਲਾਓ::ਫਾਰਮੈਟ"
+
+msgctxt "IDD_PPAGETWEAKS"
+msgid "Tweaks"
+msgstr "ਟਵੀਕ"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER"
+msgid "Internal Filters::Audio Switcher"
+msgstr "ਅੰਦਰੂਨੀ ਫਿਲਟਰ::ਆਡੀਓ ਸਵਿੱਚਰ"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS"
+msgid "External Filters"
+msgstr "ਬਾਹਰੀ ਫਿਲਟਰ"
+
+msgctxt "IDD_PPAGESHADERS"
+msgid "Playback::Shaders"
+msgstr "ਚਲਾਓ::ਸ਼ੇਡਰ"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "ਸਰੋਤ"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "ਫੁਟਕਲ"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "ਮੀਡੀਆ-ਜਾਣਕਾਰੀ"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "ਚਲਾਓ::ਕੈਪਚਰ"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "ਚਲਾਓ::ਸਿੰਕ ਰੈਂਡਰਰ ਸੈਟਿੰਗਾਂ"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "ਚਲਾਓ::ਪੂਰੀ ਸਕਰੀਨ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr ""
+
+msgctxt "IDS_AUDIOSWITCHER"
+msgid "Audio Switcher"
+msgstr "ਆਡੀਓ ਸਵਿੱਚਰ"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
+msgid "New version of the icon library"
+msgstr "ਆਈਕਾਨ ਲਾਇਬਰੇਰੀ ਦਾ ਨਵਾਂ ਵਰਜ਼ਨ"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
+msgid "Do you want to reassociate the icons?"
+msgstr "ਕੀ ਤੁਸੀਂ ਆਈਕਾਨ ਨੂੰ ਮੁੜ-ਸੰਬੰਧਿਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
+msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
+msgstr ""
+
+msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
+msgid "Old Video Renderer"
+msgstr "ਪੁਰਾਣਾ ਵਿਡੀਓ ਰੈਂਡਰਰ"
+
+msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
+msgid "Overlay Mixer Renderer"
+msgstr "ਓਵਰਲੇਅ ਮਿਕਸਰ ਰੈਂਡਰਰ"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
+msgid "Video Mixing Renderer 9 (windowed)"
+msgstr "ਵਿਡੀਓ ਮਿਕਸਿੰਗ ਰੈਂਡਰਰ 9 (ਵਿੰਡੋਡ)"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
+msgid "Video Mixing Renderer 9 (renderless)"
+msgstr "ਵਿਡੀਓ ਮਿਕਸਿੰਗ ਰੈਂਡਰਰ 9 (ਰੈਂਡਰ-ਬਗੈਰ)"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR"
+msgid "Enhanced Video Renderer"
+msgstr "ਸੁਧਾਰਿਆ ਵਿਡੀਓ ਰੈਂਡਰਰ"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
+msgid "Enhanced Video Renderer (custom presenter)"
+msgstr "ਸੁਧਾਰਿਆ ਵਿਡੀਓ ਰੈਂਡਰਰ (ਕਸਟਮ ਪਰਿਸੈਂਟਰ)"
+
+msgctxt "IDS_PPAGE_OUTPUT_DXR"
+msgid "Haali Video Renderer"
+msgstr "ਹਾਲੀ ਵਿਡੀਓ ਰੈਂਡਰਰ"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
+msgid "Null (anything)"
+msgstr "ਨਲ (ਕੁਝ ਵੀ)"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "ਨਲ (ਬਿਨਾਂ-ਕੰਪੈਰਸ ਕੀਤਾ)"
+
+msgctxt "IDS_PPAGE_OUTPUT_MADVR"
+msgid "madVR"
+msgstr "madVR"
+
+msgctxt "IDD_PPAGEACCELTBL"
+msgid "Player::Keys"
+msgstr "ਪਲੇਅਰ::ਸਵਿੱਚਾਂ"
+
+msgctxt "IDD_PPAGESUBSTYLE"
+msgid "Subtitles::Default Style"
+msgstr "ਸਬ-ਟਾਈਟਲ::ਡਿਫਾਲਟ ਸ਼ੈਲੀ"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS"
+msgid "Internal Filters"
+msgstr "ਅੰਦਰੂਨੀ ਫਿਲਟਰ"
+
+msgctxt "IDD_PPAGELOGO"
+msgid "Player::Logo"
+msgstr "ਪਲੇਅਰ::ਲੋਗੋ"
+
+msgctxt "IDD_PPAGEOUTPUT"
+msgid "Playback::Output"
+msgstr "ਚਲਾਓ::ਆਉਟਪੁੱਟ"
+
+msgctxt "IDD_PPAGEWEBSERVER"
+msgid "Player::Web Interface"
+msgstr "ਪਲੇਅਰ::ਵੈਬ ਇੰਟਰਫੇਸ"
+
+msgctxt "IDD_FILEPROPDETAILS"
+msgid "Details"
+msgstr "ਵੇਰਵੇ"
+
+msgctxt "IDD_FILEPROPCLIP"
+msgid "Clip"
+msgstr "ਕਲਿੱਪ"
+
+msgctxt "IDC_DSSYSDEF"
+msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
+msgstr ""
+
+msgctxt "IDC_DSOLD"
+msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
+msgstr ""
+
+msgctxt "IDC_DSOVERLAYMIXER"
+msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
+msgstr ""
+
+msgctxt "IDC_DSVMR9WIN"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr ""
+
+msgctxt "IDC_DSVMR9REN"
+msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
+msgstr ""
+
+msgctxt "IDC_DSDXR"
+msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
+msgstr ""
+
+msgctxt "IDC_DSNULL_COMP"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr ""
+
+msgctxt "IDC_DSNULL_UNCOMP"
+msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
+msgstr ""
+
+msgctxt "IDC_DSEVR"
+msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
+msgstr ""
+
+msgctxt "IDC_DSEVR_CUSTOM"
+msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
+msgstr ""
+
+msgctxt "IDC_DSMADVR"
+msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
+msgstr ""
+
+msgctxt "IDC_DSSYNC"
+msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
+msgstr ""
+
+msgctxt "IDC_RMSYSDEF"
+msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
+msgstr ""
+
+msgctxt "IDC_RMDX9"
+msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr ""
+
+msgctxt "IDC_QTSYSDEF"
+msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
+msgstr ""
+
+msgctxt "IDC_QTDX9"
+msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr ""
+
+msgctxt "IDC_REGULARSURF"
+msgid "Video surface will be allocated as a regular offscreen surface."
+msgstr ""
+
+msgctxt "IDS_PPAGE_OUTPUT_SYNC"
+msgid "Sync Renderer"
+msgstr "ਸਿੰਕ ਰੈਂਡਰਰ"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
+msgid "Regular offscreen plain surface"
+msgstr "ਨਿਯਮਤ ਆਫਸਕਰੀਨ ਪਲੇਨ ਸਰਫੇਸ"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
+msgid "2D surfaces"
+msgstr "2D ਸਰਫੇਸ"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
+msgid "3D surfaces (recommended)"
+msgstr "3D ਸਰਫੇਸ (ਸਿਫਾਰਸ਼ੀ)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
+msgid "Nearest neighbor"
+msgstr "ਸਭ ਤੋਂ ਨੇੜਲੇ ਗੁਆਂਢੀ"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
+msgid "Bilinear"
+msgstr "ਬਾਈਲੀਨੀਅਰ"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
+msgid "Bilinear (PS 2.0)"
+msgstr "ਬਾਈਲੀਨੀਅਰ (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
+msgid "Bicubic A=-0.60 (PS 2.0)"
+msgstr "ਬਾਈਕਿਊਬਕ A=-0.60 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
+msgid "Bicubic A=-0.75 (PS 2.0)"
+msgstr "ਬਾਈਕਿਊਬਕ A=-0.75 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
+msgid "Bicubic A=-1.00 (PS 2.0)"
+msgstr "ਬਾਈਕਿਊਬਕ A=-1.00 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
+msgid "**unavailable**"
+msgstr "**ਨਾ-ਮੌਜੂਦ**"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
+msgid "The selected renderer is not installed."
+msgstr "ਚੁਣਿਆ ਰੈਂਡਰਰ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ।"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
+msgid "Null (anything)"
+msgstr "ਨਲ (ਕੁਝ ਵੀ)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "ਨਲ (ਬਿਨਾਂ-ਕੰਪੈਰਸ ਕੀਤਾ)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr ""
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
+msgid "Name"
+msgstr "ਨਾਂ"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
+msgid "MIME Type"
+msgstr "MIME ਕਿਸਮ"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
+msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "...ਸਬ-ਟਾਈਟਲ ਡਾਊਨਲੋਡ ਕਰੋ"
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "...ਸਬ-ਟਾਈਟਲ ਅੱਪਲੋਡ ਕਰੋ"
+
+msgctxt "IDS_SUBFILE_DELAY"
+msgid "Delay (ms):"
+msgstr "ਦੇਰੀ (ਮਿਲੀਸਕਿੰਟ):"
+
+msgctxt "IDS_SPEEDSTEP_AUTO"
+msgid "Auto"
+msgstr "ਆਟੋ"
+
+msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
+msgid "There are no customized keys to export."
+msgstr "ਬਰਾਮਦ ਕਰਨ ਲਈ ਕੋਈ ਕਸਟਮਾਈਜ਼ ਸਵਿੱਚਾਂ ਨਹੀਂ ਹਨ।"
+
+msgctxt "IDS_RFS_NO_FILES"
+msgid "No media files found in the archive"
+msgstr "ਅਕਾਇਵ ਵਿੱਚ ਕੋਈ ਮੀਡੀਆ ਫ਼ਾਈਲ ਨਹੀਂ ਲੱਭੀ"
+
+msgctxt "IDS_RFS_COMPRESSED"
+msgid "Compressed files are not supported"
+msgstr "ਕੰਪਰੈਸ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹਨ"
+
+msgctxt "IDS_RFS_ENCRYPTED"
+msgid "Encrypted files are not supported"
+msgstr "ਇੰਕ੍ਰਿਪਟ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹਨ"
+
+msgctxt "IDS_RFS_MISSING_VOLS"
+msgid "Couldn't find all archive volumes"
+msgstr "ਸਭ ਅਕਾਇਵ ਵਾਲੀਅਮ ਲੱਭੇ ਨਹੀਂ ਜਾ ਸਕੇ"
+
+msgctxt "IDC_TEXTURESURF2D"
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr ""
+
+msgctxt "IDC_TEXTURESURF3D"
+msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
+msgstr ""
+
+msgctxt "IDC_DX9RESIZER_COMBO"
+msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
+msgstr ""
+
+msgctxt "IDC_DSVMR9LOADMIXER"
+msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
+msgstr ""
+
+msgctxt "IDC_DSVMR9YUVMIXER"
+msgid "Improves performance at the cost of some compatibility of the renderer."
+msgstr ""
+
+msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "Reduces tearing but prevents the toolbar from being shown."
+msgstr ""
+
+msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Reduces tearing by bypassing the default VSync built into D3D."
+msgstr ""
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "ਟਿਊਨਰ ਜਾਂਚ"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr ""
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
+msgctxt "IDS_SRC_VTS"
+msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
+msgstr ""
+
+msgctxt "IDS_SRC_RFS"
+msgid "Based on RARFileSource, doesn't support compressed files"
+msgstr ""
+
+msgctxt "IDS_INTERNAL_LAVF"
+msgid "Uses LAV Filters"
+msgstr ""
+
+msgctxt "IDS_INTERNAL_LAVF_WMV"
+msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
+msgstr ""
+
+msgctxt "IDS_AG_TOGGLE_NAVIGATION"
+msgid "Toggle Navigation Bar"
+msgstr "ਨੇਵੀਗੇਸ਼ਨ ਪੱਟੀ ਬਦਲੋ"
+
+msgctxt "IDS_AG_VSYNCACCURATE"
+msgid "Accurate VSync"
+msgstr ""
+
+msgctxt "IDC_CHECK_RELATIVETO"
+msgid "If the rendering target is left undefined, it will be inherited from the default style."
+msgstr ""
+
+msgctxt "IDC_CHECK_NO_SUB_ANIM"
+msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
+msgstr ""
+
+msgctxt "IDC_SUBPIC_TO_BUFFER"
+msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
+msgstr ""
+
+msgctxt "IDC_BUTTON_EXT_SET"
+msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
+msgstr ""
+
+msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
+msgstr ""
+
+msgctxt "ID_PLAY_PLAY"
+msgid "Play\nPlay"
+msgstr "ਚਲਾਓ\nਚਲਾਓ"
+
+msgctxt "ID_PLAY_PAUSE"
+msgid "Pause\nPause"
+msgstr "ਵਿਰਾਮ\nਵਿਰਾਮ"
+
+msgctxt "ID_PLAY_STOP"
+msgid "Stop\nStop"
+msgstr "ਰੋਕੋ\nਰੋਕੋ"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Step\nStep"
+msgstr "ਸਟੈਪ\nਸਟੈਪ"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "Decrease speed\nDecrease speed"
+msgstr "ਗਤੀ ਘਟਾਓ\nਗਤੀ ਘਟਾਓ"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "Increase speed\nIncrease speed"
+msgstr "ਗਤੀ ਵਧਾਓ\nਗਤੀ ਵਧਾਓ"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "Mute"
+msgstr "ਚੁੱਪ"
+
+msgctxt "ID_VOLUME_MUTE_OFF"
+msgid "Unmute"
+msgstr "ਨਾ-ਚੁੱਪ"
+
+msgctxt "ID_VOLUME_MUTE_DISABLED"
+msgid "No audio"
+msgstr "ਆਡੀਓ ਨਹੀਂ"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "Skip back\nSkip back"
+msgstr "ਪਿੱਛੇ ਵੱਲ ਚੱਲੋ\nਪਿੱਛੇ ਵੱਲ ਚੱਲੋ"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "Skip forward\nSkip forward"
+msgstr "ਅੱਗੇ ਵਿੱਚ ਚੱਲੋ\nਅੱਗੇ ਵਿੱਚ ਚੱਲੋ"
+
+msgctxt "IDS_SUBRESYNC_ORIGINAL"
+msgid "&Original"
+msgstr "ਅਸਲ(&O)"
+
+msgctxt "IDS_SUBRESYNC_CURRENT"
+msgid "&Current"
+msgstr "ਮੌਜੂਦਾ(&C)"
+
+msgctxt "IDS_SUBRESYNC_EDIT"
+msgid "&Edit"
+msgstr "ਸੋਧ(&E)"
+
+msgctxt "IDS_SUBRESYNC_YES"
+msgid "&Yes"
+msgstr "ਹਾਂ(&Y)"
+
+msgctxt "IDS_SUBRESYNC_NO"
+msgid "&No"
+msgstr "ਨਹੀਂ(&N)"
+
+msgctxt "IDS_SUBRESYNC_DECREASE"
+msgid "&Decrease"
+msgstr "ਘਟਾਓ(&D)"
+
+msgctxt "IDS_SUBRESYNC_INCREASE"
+msgid "&Increase"
+msgstr "ਵਧਾਓ(&I)"
+
+msgctxt "IDS_OPTIONS_CAPTION"
+msgid "Options"
+msgstr "ਚੋਣਾਂ"
+
+msgctxt "IDS_SHADERS_SELECT"
+msgid "&Select Shaders..."
+msgstr "...ਸ਼ੇਡਰ ਚੁਣੋ(&S)"
+
+msgctxt "IDS_SHADERS_DEBUG"
+msgid "&Debug Shaders..."
+msgstr "...ਡੀਬੱਗ ਸ਼ੇਡਰ(&D)"
+
+msgctxt "IDS_FAVORITES_ADD"
+msgid "&Add to Favorites..."
+msgstr "...ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜੋ(&A)"
+
+msgctxt "IDS_FAVORITES_ORGANIZE"
+msgid "&Organize Favorites..."
+msgstr "...ਮਨਪਸੰਦ ਦਾ ਪਰਬੰਧ ਕਰੋ(&O)"
+
+msgctxt "IDS_PLAYLIST_SHUFFLE"
+msgid "Sh&uffle"
+msgstr "ਰਲਾਓ"
+
+msgctxt "IDS_PLAYLIST_SHOWFOLDER"
+msgid "Ope&n file location"
+msgstr "ਫ਼ਾਈਲ ਟਿਕਾਣਾ ਖੋਲ੍ਹੋ"
+
+msgctxt "IDS_CONTROLS_CLOSING"
+msgid "Closing..."
+msgstr "...ਬੰਦ ਕਰ ਰਿਹਾ ਹੈ"
+
+msgctxt "IDS_CONTROLS_PLAYING"
+msgid "Playing"
+msgstr "ਚੱਲ ਰਿਹਾ ਹੈ"
+
+msgctxt "IDS_CONTROLS_PAUSED"
+msgid "Paused"
+msgstr "ਵਿਰਾਮ ਹੈ"
+
+msgctxt "IDS_AG_EDL_NEW_CLIP"
+msgid "EDL new clip"
+msgstr "EDL ਨਵੀਂ ਕਲਿੱਪ"
+
+msgctxt "IDS_RECENT_FILES_CLEAR"
+msgid "&Clear list"
+msgstr "ਲਿਸਟ ਸਾਫ਼ ਕਰੋ(&C)"
+
+msgctxt "IDS_RECENT_FILES_QUESTION"
+msgid "Are you sure that you want to delete recent files list?"
+msgstr "ਕੀ ਤੁਸੀਂ ਤਾਜ਼ਾ ਫ਼ਾਈਲ ਸੂਚੀ ਹਟਾਉਣੀ ਚਾਹੁੰਦੇ ਹੋ?"
+
+msgctxt "IDS_AG_EDL_SAVE"
+msgid "EDL save"
+msgstr "EDL ਸੰਭਾਲੋ"
+
+msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time Correction"
+msgstr "ਫਰੇਮ ਸਮਾਂ ਸੋਧ ਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
+msgid "Toggle EDL window"
+msgstr "EDL ਵਿੰਡੋ ਬਦਲੋ"
+
+msgctxt "IDS_AG_EDL_IN"
+msgid "EDL set In"
+msgstr "EDL ਸੈਟ ਇਨ"
+
+msgctxt "IDS_AG_EDL_OUT"
+msgid "EDL set Out"
+msgstr "EDL ਸੈਟ ਆਉਟ"
+
+msgctxt "IDS_AG_PNS_ROTATEX_M"
+msgid "PnS Rotate X-"
+msgstr "PnS ਘੁੰਮਣ X-"
+
+msgctxt "IDS_AG_PNS_ROTATEY_P"
+msgid "PnS Rotate Y+"
+msgstr "PnS ਘੁੰਮਣ Y+"
+
+msgctxt "IDS_AG_PNS_ROTATEY_M"
+msgid "PnS Rotate Y-"
+msgstr "PnS ਘੁੰਮਣ Y-"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_P"
+msgid "PnS Rotate Z+"
+msgstr "PnS ਘੁੰਮਣ Z+"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_M"
+msgid "PnS Rotate Z-"
+msgstr "PnS ਘੁੰਮਣ Z-"
+
+msgctxt "IDS_AG_TEARING_TEST"
+msgid "Tearing Test"
+msgstr "ਟੀਅਰਿੰਗ ਟੈਸਟ"
+
+msgctxt "IDS_SCALE_16_9"
+msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "16:9 TV,%.3f,%.3f,%.3f,%.3f ਲਈ ਸਕੇਲ ਕਰੋ"
+
+msgctxt "IDS_SCALE_WIDESCREEN"
+msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "ਵਾਈਡਸਕਰੀਨ ਲਈ ਜ਼ੂਮ ਕਰੋ,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_ULTRAWIDE"
+msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "ਅਲਟਰਾ-ਵਾਈਡ-ਸਕਰੀਨ ਲਈ ਜ਼ੂਮ ਕਰੋ,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_PLAYLIST_HIDEFS"
+msgid "&Hide on Fullscreen"
+msgstr "ਪੂਰੀ ਸਕਰੀਨ ਉੱਤੇ ਓਹਲੇ ਕਰੋ"
+
+msgctxt "IDS_CONTROLS_STOPPED"
+msgid "Stopped"
+msgstr "ਰੋਕਿਆ"
+
+msgctxt "IDS_CONTROLS_BUFFERING"
+msgid "Buffering... (%d%%)"
+msgstr "ਬਫ਼ਰ ਕਰ ਰਿਹਾ ਹੈ... (%d%%)"
+
+msgctxt "IDS_CONTROLS_CAPTURING"
+msgid "Capturing..."
+msgstr "...ਕੈਪਚਰ ਕਰ ਰਿਹਾ ਹੈ"
+
+msgctxt "IDS_CONTROLS_OPENING"
+msgid "Opening..."
+msgstr "...ਖੋਲ੍ਹ ਰਿਹਾ ਹੈ"
+
+msgctxt "IDS_CONTROLS_CLOSED"
+msgid "Closed"
+msgstr "ਬੰਦ ਕੀਤਾ"
+
+msgctxt "IDS_SUBTITLES_OPTIONS"
+msgid "&Options..."
+msgstr "...ਚੋਣਾਂ(&O)"
+
+msgctxt "IDS_SUBTITLES_STYLES"
+msgid "&Styles..."
+msgstr "...ਸ਼ੈਲੀ(&S)"
+
+msgctxt "IDS_SUBTITLES_RELOAD"
+msgid "&Reload"
+msgstr "ਮੁੜ-ਲੋਡ ਕਰੋ(&R)"
+
+msgctxt "IDS_SUBTITLES_ENABLE"
+msgid "&Enable"
+msgstr "ਸਮਰੱਥ ਕਰੋ(&E)"
+
+msgctxt "IDS_PANSCAN_EDIT"
+msgid "&Edit..."
+msgstr "...ਸੋਧ(&E)"
+
+msgctxt "IDS_INFOBAR_TITLE"
+msgid "Title"
+msgstr "ਟਾਈਟਲ"
+
+msgctxt "IDS_INFOBAR_AUTHOR"
+msgid "Author"
+msgstr "ਲੇਖਕ"
+
+msgctxt "IDS_INFOBAR_COPYRIGHT"
+msgid "Copyright"
+msgstr "ਕਾਪੀਰਾਈਟ"
+
+msgctxt "IDS_INFOBAR_RATING"
+msgid "Rating"
+msgstr "ਰੇਟਿੰਗ"
+
+msgctxt "IDS_INFOBAR_DESCRIPTION"
+msgid "Description"
+msgstr "ਵੇਰਵਾ"
+
+msgctxt "IDS_INFOBAR_DOMAIN"
+msgid "Domain"
+msgstr "ਡੋਮੇਨ"
+
+msgctxt "IDS_AG_CLOSE"
+msgid "Close"
+msgstr "ਬੰਦ ਕਰੋ"
+
+msgctxt "IDS_AG_NONE"
+msgid "None"
+msgstr "ਕੋਈ ਨਹੀਂ"
+
+msgctxt "IDS_AG_COMMAND"
+msgid "Command"
+msgstr "ਕਮਾਂਡ"
+
+msgctxt "IDS_AG_KEY"
+msgid "Key"
+msgstr "ਸਵਿੱਚ"
+
+msgctxt "IDS_AG_MOUSE"
+msgid "Mouse Windowed"
+msgstr "ਮਾਊਸ ਵਿੰਡੋਡ"
+
+msgctxt "IDS_AG_MOUSE_FS"
+msgid "Mouse Fullscreen"
+msgstr "ਮਾਊਸ ਪੂਰੀ ਸਕਰੀ"
+
+msgctxt "IDS_AG_APP_COMMAND"
+msgid "App Command"
+msgstr "ਐਪ ਕਮਾਂਡ"
+
+msgctxt "IDS_AG_MEDIAFILES"
+msgid "Media files (all types)"
+msgstr "ਮੀਡੀਆ ਫ਼ਾਈਲਾਂ (ਸਭ ਕਿਸਮਾਂ)"
+
+msgctxt "IDS_AG_ALLFILES"
+msgid "All files (*.*)|*.*|"
+msgstr "ਸਭ ਫ਼ਾਈਲਾਂ (*.*)|*.*|"
+
+msgctxt "IDS_AG_AUDIOFILES"
+msgid "Audio files (all types)"
+msgstr "ਆਡੀਓ ਫ਼ਾਈਲਾਂ (ਸਭ ਕਿਸਮਾਂ)"
+
+msgctxt "IDS_AG_NOT_KNOWN"
+msgid "Not known"
+msgstr "ਪਤਾ ਨਹੀਂ ਹੈ"
+
+msgctxt "IDS_MPLAYERC_0"
+msgid "Quick Open File"
+msgstr "ਤੁਰੰਤ ਫ਼ਾਈਲ ਖੋਲ੍ਹੋ"
+
+msgctxt "IDS_AG_OPEN_FILE"
+msgid "Open File"
+msgstr "ਫ਼ਾਈਲ ਖੋਲ੍ਹੋ"
+
+msgctxt "IDS_AG_OPEN_DVD"
+msgid "Open DVD/BD"
+msgstr "DVD/BD ਖੋਲ੍ਹੋ"
+
+msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
+msgid "Failed to set post-resize shaders"
+msgstr "ਮੁੜ-ਆਕਾਰ ਦੇ ਬਾਅਦ ਸ਼ੇਡਰ ਸੈਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
+
+msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
+msgid "Failed to set both pre-resize and post-resize shaders"
+msgstr ""
+
+msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
+msgid "Shaders are recompiled automatically when the corresponding files are modified."
+msgstr ""
+
+msgctxt "IDS_SHADER_DLL_ERR_0"
+msgid "Cannot load %s, pixel shaders will not work."
+msgstr ""
+
+msgctxt "IDS_SHADER_DLL_ERR_1"
+msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
+msgstr ""
+
+msgctxt "IDS_OSD_SHADERS_PRESET"
+msgid "Shader preset: %s"
+msgstr "ਸ਼ੇਡਰ ਪ੍ਰੀਸੈਟ: %s"
+
+msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
+msgid "Next Shader Preset"
+msgstr "ਅਗਲਾ ਸ਼ੇਡਰ ਪ੍ਰੀਸੈਟ"
+
+msgctxt "IDS_AG_SHADERS_PRESET_PREV"
+msgid "Prev Shader Preset"
+msgstr "ਪਿਛਲੇ ਸ਼ੇਡਰ ਪ੍ਰੀਸੈਟ"
+
+msgctxt "IDS_STRING_COLON"
+msgid "%s:"
+msgstr "%s:"
+
+msgctxt "IDS_RECORD_START"
+msgid "Record"
+msgstr "ਰਿਕਾਰਡ ਕਰੋ"
+
+msgctxt "IDS_RECORD_STOP"
+msgid "Stop"
+msgstr "ਰੋਕੋ"
+
+msgctxt "IDS_BALANCE"
+msgid "L = R"
+msgstr "L = R"
+
+msgctxt "IDS_BALANCE_L"
+msgid "L +%d%%"
+msgstr "L +%d%%"
+
+msgctxt "IDS_BALANCE_R"
+msgid "R +%d%%"
+msgstr "R +%d%%"
+
+msgctxt "IDS_VOLUME"
+msgid "%d%%"
+msgstr "%d%%"
+
+msgctxt "IDS_BOOST"
+msgid "+%d%%"
+msgstr "+%d%%"
+
+msgctxt "IDS_PLAYLIST_ADDFOLDER"
+msgid "Add containing &folder"
+msgstr "ਰੱਖਣ ਵਾਲਾ ਫੋਲਡਰ ਜੋੜੋ"
+
+msgctxt "IDS_HW_INDICATOR"
+msgid "[H/W]"
+msgstr "[H/W]"
+
+msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
+msgid "Software Decoding"
+msgstr "ਸਾਫਟਵੇਅਰ ਡੀਕੋਡਿੰਗ"
+
+msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
+msgid "Playback rate"
+msgstr "ਚਲਾਓ ਦਰ"
+
+msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
+msgid "&Copy filters list to clipboard"
+msgstr "ਫਿਲਟਰਾਂ ਨੂੰ ਕਲਿੱਪਬੋਰਡ ਵਿੱਚ ਕਾਪੀ ਕਰੋ(&C)"
+
+msgctxt "IDS_CREDENTIALS_SERVER"
+msgid "Enter server credentials"
+msgstr "ਸਰਵਰ ਸਨਦ ਦਿਓ"
+
+msgctxt "IDS_CREDENTIALS_CONNECT"
+msgid "Enter your credentials to connect"
+msgstr "ਕਨੈਕਟ ਕਰਨ ਲਈ ਆਪਣੀ ਸਨਦ ਦਿਓ"
+
+msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
+msgid "Save custom style"
+msgstr "ਕਸਟਮ ਸ਼ੈਲੀ ਸੰਭਾਲੋ"
+
+msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
+msgid "Education/Science/Factual topics"
+msgstr "ਸਿੱਖਿਆ/ਵਿਗਿਆਨ/ਯਥਾਰਥਕ ਵਿਸ਼ੇ"
+
+msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
+msgid "Hides controls and panels also in windowed mode."
+msgstr "ਵਿੰਡੋ ਕਰਨ ਦੇ ਮੋਡ ਵਿੱਚ ਕੰਟਰੋਲ ਤੇ ਪੈਨਲ ਵੀ ਓਹਲੇ ਕਰੋ"
+
+msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
+msgid "Prevent external subtitle renderer to be loaded when internal is in use."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_COL_NAME"
+msgid "Name"
+msgstr "ਨਾਂ"
+
+msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
+msgid "Value"
+msgstr "ਮੁੱਲ"
+
+msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
+msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
+msgstr "\"ਤਾਜ਼ਾ ਫ਼ਾਈਲਾਂ\" ਵਿੱਚ ਵਿਖਾਈਆਂ ਫ਼ਾਈਲਾਂ ਦੇ ਵੱਧ ਤੋਂ ਵੱਧ ਗਿਣਤੀ ਹੈ ਅਤੇ ਜਿਹਨਾਂ ਲਈ ਸੰਭਵ ਰੂਪ ਵਿੱਚ ਸਥਿਤੀ ਨੂੰ ਸੰਭਾਲਿਆ ਗਿਆ ਹੈ।"
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
+msgid "Remember file position only for files longer than N minutes."
+msgstr "ਕੇਵਲ N ਮਿੰਟ ਤੋਂ ਲੰਮੀਆਂ ਫ਼ਾਈਲਾਂ ਵਾਸਤੇ ਹੀ ਫ਼ਾਈਲ ਸਥਿਤੀ ਨੂੰ ਯਾਦ ਰੱਖੋ।"
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
+msgid "Remember file position also for audio files."
+msgstr "ਆਡੀਓ ਫ਼ਾਈਲਾਂ ਲਈ ਵੀ ਫ਼ਾਈਲ ਸਥਿਤੀ ਯਾਦ ਰੱਖੋ।"
+
+msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
+msgid "Do Nothing"
+msgstr "ਕੁਝ ਨਾ ਕਰੋ"
+
+msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
+msgid "Play next file in the folder"
+msgstr "ਫੋਲਡਰ ਵਿੱਚ ਅਗਲੀ ਫ਼ਾਈਲ ਚਲਾਓ"
+
+msgctxt "IDS_AFTER_PLAYBACK_REWIND"
+msgid "Rewind current file"
+msgstr "ਮੌਜੂਦਾ ਫ਼ਾਇਲ ਨੂੰ ਵਾਪਿਸ ਪਿੱਛੇ ਕਰੋ"
+
+msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
+msgid "Close"
+msgstr "ਬੰਦ ਕਰੋ"
+
+msgctxt "IDS_AFTER_PLAYBACK_EXIT"
+msgid "Exit"
+msgstr "ਬਾਹਰ ਨਿਕਲੋ"
+
+msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
+msgid "Turn off the monitor"
+msgstr "ਮਾਨੀਟਰ ਬੰਦ ਕਰੋ"
+
+msgctxt "IDS_IMAGE_JPEG_QUALITY"
+msgid "JPEG Image"
+msgstr "JPEG ਚਿੱਤਰ"
+
+msgctxt "IDS_IMAGE_QUALITY"
+msgid "Quality (%):"
+msgstr "ਕੁਆਲਟੀ (%):"
+
+msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
+msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
+msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
+msgstr ""
+
+msgctxt "IDS_HOTKEY_NOT_DEFINED"
+msgid "<not defined>"
+msgstr "<ਪਰਿਭਾਸ਼ਿਤ ਨਹੀਂ>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "ਨਿਗਰਾਨੀ"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "ਉੱਤੇ ਭੇਜੋ"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "ਹੇਠਾਂ ਭੇਜੋ"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "LCN ਰਾਹੀਂ ਲੜੀਬੱਧ"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "ਸਭ ਹਟਾਓ"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "ਕੀ ਤੁਸੀਂ ਸੂਚੀ ਤੋਂ ਸਭ ਚੈਨਲਾਂ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "ਕੋਈ ਜਾਣਕਾਰੀ ਮੌਜੂਦ ਨਹੀਂ ਹੈ"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "...ਪੜਤਾਲ ਜਾਰੀ ਹੈ, ਉਡੀਕ ਕਰੋ ਜੀ"
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "ਫ਼ਾਈਲ ਵਿੱਚ ਲਾਗ ਰੱਖਣ ਸਮਰੱਥ ਕਰੋ (ਮੁੜ-ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "ਬਾਕੀ ਰਹਿੰਦਾ ਸਮਾਂ"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "ਉੱਚ ਸਹੀਪੁਣਾ"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "ਚਲਾਓ ਦੇ ਬਾਅਦ: ਮੌਜੂਦਾ ਫ਼ਾਇਲ ਨੂੰ ਵਾਪਿਸ ਪਿੱਛੇ ਕਰੋ"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "ਚਲਾਓ ਦੇ ਬਾਅਦ: ਬੰਦ ਕਰੋ"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr ""
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr ""
+
+msgctxt "IDS_AG_OPEN_DEVICE"
+msgid "Open Device"
+msgstr "ਡਿਵਾਇਸ ਖੋਲ੍ਹੋ"
+
+msgctxt "IDS_AG_SAVE_AS"
+msgid "Save As"
+msgstr "ਇੰਝ ਸੰਭਾਲੋ"
+
+msgctxt "IDS_AG_SAVE_IMAGE"
+msgid "Save Image"
+msgstr "ਚਿੱਤਰ ਸੰਭਾਲੋ"
+
+msgctxt "IDS_MPLAYERC_6"
+msgid "Save Image (auto)"
+msgstr "ਚਿੱਤਰ ਸੰਭਾਲੋ (ਆਟੋ)"
+
+msgctxt "IDS_OSD_IMAGE_SAVED"
+msgid "Image saved successfully"
+msgstr "ਚਿੱਤਰ ਕਾਮਯਾਬੀ ਨਾਲ ਸੰਭਾਲਿਆ"
+
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "...ਸਬਟਾਈਟਲ ਲੋਡ ਕਰੋ"
+
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "...ਸਬ-ਟਾਈਟਲ ਸੰਭਾਲੋ"
+
+msgctxt "IDS_AG_PROPERTIES"
+msgid "Properties"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+msgctxt "IDS_AG_EXIT"
+msgid "Exit"
+msgstr "ਬਾਹਰ ਨਿਕਲੋ"
+
+msgctxt "IDS_AG_PLAYPAUSE"
+msgid "Play/Pause"
+msgstr "ਚਲਾਓ/ਵਿਰਾਮ"
+
+msgctxt "IDS_AG_PLAY"
+msgid "Play"
+msgstr "ਚਲਾਓ"
+
+msgctxt "IDS_AG_STOP"
+msgid "Stop"
+msgstr "ਰੋਕੋ"
+
+msgctxt "IDS_AG_FRAMESTEP"
+msgid "Frame-step"
+msgstr "ਫਰੇਮ-ਸਟੈਪ"
+
+msgctxt "IDS_MPLAYERC_16"
+msgid "Frame-step back"
+msgstr "ਫਰੇਮ-ਸਟੈਪ ਪਿੱਛੇ"
+
+msgctxt "IDS_AG_GO_TO"
+msgid "Go To"
+msgstr "ਜਾਓ"
+
+msgctxt "IDS_AG_INCREASE_RATE"
+msgid "Increase Rate"
+msgstr "ਦਰ ਵਧਾਓ"
+
+msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
+msgid "Show/Game show"
+msgstr "ਸ਼ੋਅ/ਗੇਮ ਸ਼ੋਅ"
+
+msgctxt "IDS_CONTENT_SPORTS"
+msgid "Sports"
+msgstr "ਖੇਡਾਂ"
+
+msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
+msgid "Children's/Youth programmes"
+msgstr "ਬੱਚੇ/ਨੌਜਵਾਨਾਂ ਦੇ ਪ੍ਰੋਗਰਾ"
+
+msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
+msgid "Music/Ballet/Dance"
+msgstr "ਸੰਗੀਤ/ਬੈਲੇ/ਡਾਂਸ"
+
+msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
+msgid "Arts/Culture"
+msgstr "ਕਲਾ/ਸਭਿਆਚਾਰ"
+
+msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
+msgid "Social/Political issues/Economics"
+msgstr "ਸਮਾਜਿਕ/ਰਾਜਨੀਤੀ ਮਾਮਲੇ/ਅਰਥਚਾਰਾ"
+
+msgctxt "IDS_CONTENT_LEISURE"
+msgid "Leisure hobbies"
+msgstr ""
+
+msgctxt "IDS_FILE_RECYCLE"
+msgid "Move to Recycle Bin"
+msgstr "ਰੱਦੀ ਵਿੱਚ ਭੇਜੋ"
+
+msgctxt "IDS_AG_SAVE_COPY"
+msgid "Save a Copy"
+msgstr "ਕਾਪੀ ਸੰਭਾਲੋ"
+
+msgctxt "IDS_FASTSEEK_LATEST"
+msgid "Latest keyframe"
+msgstr "ਤਾਜ਼ਾ ਕੀ-ਫਰੇਮ"
+
+msgctxt "IDS_FASTSEEK_NEAREST"
+msgid "Nearest keyframe"
+msgstr "ਸਭ ਤੋਂ ਨੇੜਲਾ ਕੀ-ਫਰੇਮ"
+
+msgctxt "IDS_HOOKS_FAILED"
+msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
+msgstr ""
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
+msgid "Never show"
+msgstr "ਕਦੇ ਨਾ ਦਿਖਾਓ"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
+msgid "Show when moving the cursor, hide after:"
+msgstr ""
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
+msgid "Show when hovering control, hide after:"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
+msgid "Failed to set pre-resize shaders"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
+msgid "Frame Time Correction: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
+msgid "Frame Time Correction: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
+msgid "Target VSync Offset: %.1f"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
+msgid "VSync Offset: %d"
+msgstr ""
+
+msgctxt "IDS_OSD_SPEED"
+msgid "Speed: %.2lfx"
+msgstr "ਗਤੀ: %.2lfx"
+
+msgctxt "IDS_OSD_THUMBS_SAVED"
+msgid "Thumbnails saved successfully"
+msgstr "ਥੰਮਨੇਲ ਕਾਮਯਾਬੀ ਨਾਲ ਸੰਭਾਲਿਆ"
+
+msgctxt "IDS_MENU_VIDEO_STREAM"
+msgid "Vide&o Track"
+msgstr "ਵਿਡੀਓ ਟਰੈਕ(&V)"
+
+msgctxt "IDS_MENU_VIDEO_ANGLE"
+msgid "Video Ang&le"
+msgstr "ਵਿਡੀਓ ਕੋਣ(&l)"
+
+msgctxt "IDS_RESET_SETTINGS"
+msgid "Reset settings"
+msgstr "ਸੈਟਿੰਗਾਂ ਮੁੜ-ਸੈਟ ਕਰੋ"
+
+msgctxt "IDS_RESET_SETTINGS_WARNING"
+msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
+msgstr "ਕੀ ਤੁਸੀਂ MPC-HC ਨੂੰ ਇਸ ਦੀਆਂ ਮੂਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਮੁੜ-ਸਟੋਰ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?\nਸਾਵਧਾਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਕਿ ਤੁਹਾਡੀਆਂ ਸਭ ਮੌਜੂਦਾ ਸੈਟਿੰਗਾਂ ਖਤਮ ਹੋ ਜਾਣਗੀਆਂ!"
+
+msgctxt "IDS_RESET_SETTINGS_MUTEX"
+msgid "Please close all instances of MPC-HC so that the default settings can be restored."
+msgstr "MPC-HC ਦੇ ਸਭ ਮੌਕਿਆਂ ਨੂੰ ਬੰਦ ਕਰੋ ਤਾਂ ਕਿ ਡਿਫਾਲਟ ਸੈਟਿੰਗਾਂ ਨੂੰ ਮੁੜ-ਸਟੋਰ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।"
+
+msgctxt "IDS_EXPORT_SETTINGS"
+msgid "Export settings"
+msgstr "ਸੈਟਿੰਗਾਂ ਬਰਾਮਦ ਕਰੋ"
+
+msgctxt "IDS_EXPORT_SETTINGS_WARNING"
+msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
+msgstr "ਕੁਝ ਤਬਦੀਲੀਆਂ ਹਾਲੇ ਸੰਭਾਲੀਆਂ ਨਹੀਂ ਗਈਆਂ ਹਨ।\nਕੀ ਤੁਸੀਂ ਬਰਾਮਦ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਨੂੰ ਸੰਭਾਲਣਾ ਚਾਹੁੰਦੇ ਹੋ?"
+
+msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
+msgid "The settings have been successfully exported."
+msgstr "ਸੈਟਿੰਗਾਂ ਕਾਮਯਾਬੀ ਨਾਲ ਸੰਭਾਲੀਆਂ ਗਈਆਂ ਹਨ।"
+
+msgctxt "IDS_EXPORT_SETTINGS_FAILED"
+msgid "The export failed! This can happen when you don't have the correct rights."
+msgstr "ਬਰਾਮਦ ਕਰਨ ਲਈ ਫੇਲ੍ਹ! ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਜੇ ਤੁਹਾਡੇ ਕੋਲ ਠੀਕ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨ।"
+
+msgctxt "IDS_BDA_ERROR"
+msgid "BDA Error"
+msgstr "BDA ਗਲਤੀ"
+
+msgctxt "IDS_AG_DECREASE_RATE"
+msgid "Decrease Rate"
+msgstr "ਦਰ ਘਟਾਓ"
+
+msgctxt "IDS_AG_RESET_RATE"
+msgid "Reset Rate"
+msgstr "ਪ੍ਰੀ-ਸੈਟ ਦਰ"
+
+msgctxt "IDS_MPLAYERC_21"
+msgid "Audio Delay +10 ms"
+msgstr "ਆਡੀਓ ਦੇਰੀ +10ms"
+
+msgctxt "IDS_MPLAYERC_22"
+msgid "Audio Delay -10 ms"
+msgstr "ਆਡੀਓ ਦੇਰੀ -10 ms"
+
+msgctxt "IDS_MPLAYERC_23"
+msgid "Jump Forward (small)"
+msgstr "ਅੱਗੇ ਜਾਓ (ਥੋੜ੍ਹਾ)"
+
+msgctxt "IDS_MPLAYERC_24"
+msgid "Jump Backward (small)"
+msgstr "ਪਿੱਛੇ ਜਾਓ (ਥੋੜ੍ਹਾ)"
+
+msgctxt "IDS_MPLAYERC_25"
+msgid "Jump Forward (medium)"
+msgstr "ਅੱਗੇ ਜਾਓ (ਮੱਧਮ)"
+
+msgctxt "IDS_MPLAYERC_26"
+msgid "Jump Backward (medium)"
+msgstr "ਪਿੱਛੇ ਜਾਓ (ਮੱਧਮ)"
+
+msgctxt "IDS_MPLAYERC_27"
+msgid "Jump Forward (large)"
+msgstr "ਅੱਗੇ ਜਾਓ (ਵੱਧ)"
+
+msgctxt "IDS_MPLAYERC_28"
+msgid "Jump Backward (large)"
+msgstr "ਪਿੱਛੇ ਜਾਓ (ਵੱਧ)"
+
+msgctxt "IDS_MPLAYERC_29"
+msgid "Jump Forward (keyframe)"
+msgstr "ਅੱਗੇ ਜਾਓ (ਕੀਫਰੇਮ)"
+
+msgctxt "IDS_MPLAYERC_30"
+msgid "Jump Backward (keyframe)"
+msgstr "ਪਿੱਛੇ ਜਾਓ (ਕੀਫਰੇਮ)"
+
+msgctxt "IDS_AG_NEXT"
+msgid "Next"
+msgstr "ਅੱਗੇ"
+
+msgctxt "IDS_AG_PREVIOUS"
+msgid "Previous"
+msgstr "ਪਿੱਛੇ"
+
+msgctxt "IDS_AG_NEXT_FILE"
+msgid "Next File"
+msgstr "ਅਗਲੀ ਫ਼ਾਈਲ"
+
+msgctxt "IDS_AG_PREVIOUS_FILE"
+msgid "Previous File"
+msgstr "ਪਿਛਲੀ ਫ਼ਾਈਲ"
+
+msgctxt "IDS_MPLAYERC_99"
+msgid "Toggle Direct3D fullscreen"
+msgstr "Direct3D ਪੂਰੀ-ਸਕਰੀਨ ਬਦਲੋ"
+
+msgctxt "IDS_MPLAYERC_100"
+msgid "Goto Prev Subtitle"
+msgstr "ਪਿਛਲੇ ਸਬਟਾਈਟਲ ਉੱਤੇ ਜਾਓ"
+
+msgctxt "IDS_MPLAYERC_101"
+msgid "Goto Next Subtitle"
+msgstr "ਅਗਲੇ ਸਬਟਾਈਟਲ ਉੱਤੇ ਜਾਓ"
+
+msgctxt "IDS_MPLAYERC_102"
+msgid "Shift Subtitle Left"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_103"
+msgid "Shift Subtitle Right"
+msgstr ""
+
+msgctxt "IDS_AG_SEEKSET"
+msgid "Jump to Beginning"
+msgstr "ਸ਼ੁਰੂ ਉੱਤੇ ਜਾਓ"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: ਫ਼ਾਈਲ ਨਾਂ ਦਿਖਾਓ"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "DVD ਚਲਾਓ"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "BD ਚਲਾਓ"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: ਰੈਂਡਰਰ ਅੰਕੜੇ ਦਿਖਾਓ"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: ਰੈਂਡਰਰ ਅੰਕੜੇ ਮੁੜ-ਸੈਟ ਕਰੋ"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "ਸਬ-ਟਾਈਟਲ::ਫੁਟਕਲ"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "ਹਾਸ਼ੀਆ ਓਹਲੇ ਕਰੋ(&b)"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "ਕੇਵਲ ਫਰੇਮ(&m)"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "ਸੁਰਖੀ ਤੇ ਮੀਨੂ ਦਿਖਾਓ(&w)"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "ਮੀਨੂ ਓਹਲੇ ਕਰੋ(&M)"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "ਤਕਨੀਕੀ"
+
+msgctxt "IDS_AG_VIEW_MINIMAL"
+msgid "View Minimal"
+msgstr "ਘੱਟੋ-ਘੱਟ ਦਿਖਾਓ"
+
+msgctxt "IDS_AG_VIEW_COMPACT"
+msgid "View Compact"
+msgstr "ਨਿੰਮਾ ਦਿਖਾਓ"
+
+msgctxt "IDS_AG_VIEW_NORMAL"
+msgid "View Normal"
+msgstr "ਆਮ ਦਿਖਾਓ"
+
+msgctxt "IDS_AG_FULLSCREEN"
+msgid "Fullscreen"
+msgstr "ਪੂਰੀ ਸਕਰੀਨ"
+
+msgctxt "IDS_MPLAYERC_39"
+msgid "Fullscreen (w/o res.change)"
+msgstr "ਪੂਰੀ ਸਕਰੀਨ (ਬਿਨਾਂ ਰੈਜ਼ੋ. ਬਦਲੇ)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT"
+msgid "Zoom Auto Fit"
+msgstr "ਜ਼ੂਮ ਆਟੋ ਫਿੱਟ)"
+
+msgctxt "IDS_AG_VIDFRM_HALF"
+msgid "VidFrm Half"
+msgstr ""
+
+msgctxt "IDS_AG_VIDFRM_NORMAL"
+msgid "VidFrm Normal"
+msgstr ""
+
+msgctxt "IDS_AG_VIDFRM_DOUBLE"
+msgid "VidFrm Double"
+msgstr ""
+
+msgctxt "IDS_AG_ALWAYS_ON_TOP"
+msgid "Always On Top"
+msgstr "ਹਮੇਸ਼ਾ ਸਭ ਤੋਂ ਉੱਤੇ ਰੱਖੋ"
+
+msgctxt "IDS_AG_PNS_INC_SIZE"
+msgid "PnS Inc Size"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_INC_WIDTH"
+msgid "PnS Inc Width"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_47"
+msgid "PnS Inc Height"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_DEC_SIZE"
+msgid "PnS Dec Size"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_DEC_WIDTH"
+msgid "PnS Dec Width"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_50"
+msgid "PnS Dec Height"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
+msgid "Downloading [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PARSING"
+msgid "Parsing list..."
+msgstr "...ਸੂਚੀ ਪਾਰਸ ਕਰ ਰਿਹਾ ਹੈ"
+
+msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
+msgid "No subtitles found."
+msgstr "ਕੋਈ ਸਬ-ਟਾਈਟਲ ਨਹੀਂ ਲੱਭਿਆ"
+
+msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
+msgid "%d subtitle(s) available."
+msgstr "%d ਸਬਟਾਈਟਲ ਮੌਜੂਦ ਹਨ।"
+
+msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
+msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
+msgstr "ਕੀ ਤੁਸੀਂ MPC-HC ਲਈ ਨਿਯਮਤ ਰੂਪ ਵਿੱਚ ਅੱਪਡੇਟ ਵਾਸਤੇ ਚੈਕ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?\n\nਇਹ ਫੀਚਰ ਨੂੰ ਫੁਟਕਲ ਚੋਣ ਸਫ਼ੇ ਤੋਂ ਕਿਸੇ ਵੀ ਸਮੇਂ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ।"
+
+msgctxt "IDS_ZOOM_50"
+msgid "50%"
+msgstr "50%"
+
+msgctxt "IDS_ZOOM_100"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDS_ZOOM_200"
+msgid "200%"
+msgstr "200%"
+
+msgctxt "IDS_ZOOM_AUTOFIT"
+msgid "Auto Fit"
+msgstr "ਆਟੋ ਫਿੱਟ"
+
+msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (Larger Only)"
+msgstr "ਆਟੋ ਫਿੱਟ (ਕੇਵਲ ਵੱਡਾ)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
+msgid "Zoom Auto Fit (Larger Only)"
+msgstr "ਆਟੋ ਫਿੱਟ ਲਈ ਜ਼ੂਮ ਕਰੋ (ਕੇਵਲ ਵੱਡਾ)(&L)"
+
+msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
+msgid "Zoom: Auto (Larger Only)"
+msgstr "ਜ਼ੂਮ: ਆਟੋ (ਕੇਵਲ ਵੱਡਾ)"
+
+msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
+msgid "Double click to open file location"
+msgstr "ਫ਼ਾਈਲ ਟਿਕਾਣਾ ਖੋਲ੍ਹਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ"
+
+msgctxt "IDS_TOOLTIP_REMAINING_TIME"
+msgid "Toggle between elapsed and remaining time"
+msgstr "ਲੱਗੇ ਅਤੇ ਬਾਕੀ ਰਹਿੰਦੇ ਸਮੇਂ ਵਿੱਚ ਤਬਦੀਲ ਕਰੋ"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
+msgid "Invalid delay"
+msgstr "ਗਲਤ ਦੇਰੀ"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
+msgid "Please enter a number between 1 and 365."
+msgstr "1 ਤੋਂ 365 ਦੇ ਵਿੱਚੋਂ ਇੱਕ ਨੰਬਰ ਦਿਉ।"
+
+msgctxt "IDS_AG_PNS_CENTER"
+msgid "PnS Center"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_LEFT"
+msgid "PnS Left"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_RIGHT"
+msgid "PnS Right"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_UP"
+msgid "PnS Up"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_DOWN"
+msgid "PnS Down"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_UPLEFT"
+msgid "PnS Up/Left"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_UPRIGHT"
+msgid "PnS Up/Right"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_DOWNLEFT"
+msgid "PnS Down/Left"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_59"
+msgid "PnS Down/Right"
+msgstr ""
+
+msgctxt "IDS_AG_VOLUME_UP"
+msgid "Volume Up"
+msgstr "ਵਾਲੀਅਮ ਵਧਾਓ"
+
+msgctxt "IDS_AG_VOLUME_DOWN"
+msgid "Volume Down"
+msgstr "ਵਾਲੀਅਮ ਘਟਾਓ"
+
+msgctxt "IDS_AG_VOLUME_MUTE"
+msgid "Volume Mute"
+msgstr "ਵਾਲੀਅਮ ਚੁੱਪ"
+
+msgctxt "IDS_MPLAYERC_63"
+msgid "DVD Title Menu"
+msgstr "DVD ਟਾਈਟਲ ਮੀਨੂ"
+
+msgctxt "IDS_AG_DVD_ROOT_MENU"
+msgid "DVD Root Menu"
+msgstr "DVD ਰੂਟ ਮੀਨੂ"
+
+msgctxt "IDS_MPLAYERC_65"
+msgid "DVD Subtitle Menu"
+msgstr "DVD ਸਬਟਾਈਟਲ ਮੀਨੂ"
+
+msgctxt "IDS_MPLAYERC_66"
+msgid "DVD Audio Menu"
+msgstr "DVD ਆਡੀਓ ਮੀਨੂ"
+
+msgctxt "IDS_MPLAYERC_67"
+msgid "DVD Angle Menu"
+msgstr "DVD ਕੋਣ ਮੀਨੂ"
+
+msgctxt "IDS_MPLAYERC_68"
+msgid "DVD Chapter Menu"
+msgstr "DVD ਚੈਪਟਰ ਮੀਨੂ"
+
+msgctxt "IDS_AG_DVD_MENU_LEFT"
+msgid "DVD Menu Left"
+msgstr "DVD ਮੀਨੂ ਖੱਬੇ"
+
+msgctxt "IDS_MPLAYERC_70"
+msgid "DVD Menu Right"
+msgstr "DVD ਮੀਨੂ ਸੱਜੇ"
+
+msgctxt "IDS_AG_DVD_MENU_UP"
+msgid "DVD Menu Up"
+msgstr "DVD ਮੀਨੂ ਉੱਤੇ"
+
+msgctxt "IDS_AG_DVD_MENU_DOWN"
+msgid "DVD Menu Down"
+msgstr "DVD ਮੀਨੂ ਹੇਠਾਂ"
+
+msgctxt "IDS_MPLAYERC_73"
+msgid "DVD Menu Activate"
+msgstr "DVD ਮੀਨੂ ਸਰਗਰਮ ਕਰੋ"
+
+msgctxt "IDS_AG_DVD_MENU_BACK"
+msgid "DVD Menu Back"
+msgstr "DVD ਮੀਨੂ ਪਿੱਛੇ"
+
+msgctxt "IDS_MPLAYERC_75"
+msgid "DVD Menu Leave"
+msgstr "DVD ਮੀਨੂ ਛੱਡੋ"
+
+msgctxt "IDS_AG_BOSS_KEY"
+msgid "Boss key"
+msgstr "ਬਾਸ ਸਵਿੱਚ"
+
+msgctxt "IDS_MPLAYERC_77"
+msgid "Player Menu"
+msgstr "ਪਲੇਅਰ ਮੀਨੂ"
+
+msgctxt "IDS_MPLAYERC_78"
+msgid "Player Menu (full)"
+msgstr "ਪਲੇਅਰ ਮੀਨੂ (ਪੂਰਾ)"
+
+msgctxt "IDS_AG_FILTERS_MENU"
+msgid "Filters Menu"
+msgstr "ਫਿਲਟਰ ਮੀਨੂ"
+
+msgctxt "IDS_AG_OPTIONS"
+msgid "Options"
+msgstr "ਚੋਣਾਂ"
+
+msgctxt "IDS_AG_NEXT_AUDIO"
+msgid "Next Audio Track"
+msgstr ""
+
+msgctxt "IDS_AG_PREV_AUDIO"
+msgid "Prev Audio Track"
+msgstr ""
+
+msgctxt "IDS_AG_NEXT_SUBTITLE"
+msgid "Next Subtitle Track"
+msgstr ""
+
+msgctxt "IDS_AG_PREV_SUBTITLE"
+msgid "Prev Subtitle Track"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_85"
+msgid "On/Off Subtitle"
+msgstr "ਸਬ-ਟਾਈਟਲ ਚਾਲੂ/ਬੰਦ ਕਰੋ"
+
+msgctxt "IDS_MPLAYERC_86"
+msgid "Reload Subtitles"
+msgstr "ਸਬ-ਟਾਈਟਲ ਮੁੜ-ਲੋਡ ਕਰੋ"
+
+msgctxt "IDS_MPLAYERC_91"
+msgid "Next Angle (DVD)"
+msgstr "ਅਗਲਾ ਕੋਣ (DVD)"
+
+msgctxt "IDS_MPLAYERC_92"
+msgid "Prev Angle (DVD)"
+msgstr "ਪਿਛਲਾ ਕੋਣ (DVD)"
+
+msgctxt "IDS_MPLAYERC_93"
+msgid "Next Audio Track (DVD)"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_94"
+msgid "Prev Audio Track (DVD)"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_95"
+msgid "Next Subtitle Track (DVD)"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_96"
+msgid "Prev Subtitle Track (DVD)"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_97"
+msgid "On/Off Subtitle (DVD)"
+msgstr "ਸਬਟਾਈਟਲ ਚਾਲੂ/ਬੰਦ ਕਰੋ(DVD)"
+
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: ਮੌਜੂਦਾ ਸਮਾਂ ਦਿਖਾਓ"
+
+msgctxt "IDS_PPAGEWEBSERVER_0"
+msgid "Select the directory"
+msgstr "ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ"
+
+msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
+msgid "Quick add favorite"
+msgstr "ਤੁਰੰਤ ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜੋ"
+
+msgctxt "IDS_DVB_CHANNEL_NUMBER"
+msgid "N"
+msgstr "N"
+
+msgctxt "IDS_DVB_CHANNEL_NAME"
+msgid "Name"
+msgstr "ਨਾਂ"
+
+msgctxt "IDS_DVB_CHANNEL_FREQUENCY"
+msgid "Frequency"
+msgstr "ਫਰੀਕਿਊਂਸੀ"
+
+msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
+msgid "Encrypted"
+msgstr "ਇੰਕ੍ਰਿਪਟ ਹੈ"
+
+msgctxt "IDS_YES"
+msgid "Yes"
+msgstr "ਹਾਂ"
+
+msgctxt "IDS_NO"
+msgid "No"
+msgstr "ਨਹੀਂ"
+
+msgctxt "IDS_DVB_CHANNEL_START_SCAN"
+msgid "Start"
+msgstr "ਸ਼ੁਰੂ"
+
+msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
+msgid "Stop"
+msgstr "ਰੋਕੋ"
+
+msgctxt "IDS_DVB_TVNAV_SEERADIO"
+msgid "Radio stations"
+msgstr "ਰੇਡੀਓ ਸਟੇਸ਼ਨ"
+
+msgctxt "IDS_DVB_TVNAV_SEETV"
+msgid "TV stations"
+msgstr "TV ਸਟੇਸ਼ਨ"
+
+msgctxt "IDS_DVB_CHANNEL_FORMAT"
+msgid "Format"
+msgstr "ਫਾਰਮੈਟ"
+
+msgctxt "IDS_MAINFRM_2"
+msgid "Focus lost to: %s - %s"
+msgstr "ਫੋਕਸ ਗੁਆਚਾ: %s - %s"
+
+msgctxt "IDS_AG_SUBTITLES_SAVED"
+msgid "Subtitles saved"
+msgstr "ਸਬ-ਟਾਈਟਲ ਸੰਭਾਲੇ"
+
+msgctxt "IDS_MAINFRM_4"
+msgid "Cannot save subtitles"
+msgstr "ਸਬਟਾਈਟਲ ਸੰਭਾਲੇ ਨਹੀਂ ਜਾ ਸਕਦੇ"
+
+msgctxt "IDS_AG_FRAMERATE"
+msgid "Frame rate"
+msgstr "ਫਰੇਮ ਦਰ"
+
+msgctxt "IDS_MAINFRM_6"
+msgid "drawn: %d, dropped: %d"
+msgstr ""
+
+msgctxt "IDS_AG_FRAMES"
+msgid "Frames"
+msgstr "ਫਰੇਮ"
+
+msgctxt "IDS_AG_BUFFERS"
+msgid "Buffers"
+msgstr "ਬਫ਼ਰ"
+
+msgctxt "IDS_MAINFRM_9"
+msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
+msgstr "ਵਾਲੀਅਮ: %02lu/%02lu, ਟਾਈਟਲ: %02lu/%02lu, ਚੈਪਟਰ: %02lu/%02lu"
+
+msgctxt "IDS_MAINFRM_10"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "ਕੋਣ: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+
+msgctxt "IDS_MAINFRM_11"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d ਬਿੱਟ %d %s"
+
+msgctxt "IDS_ADD_TO_PLAYLIST"
+msgid "Add to MPC-HC Playlist"
+msgstr "MPC-HC ਪਲੇਅਲਿਸਟ ਵਿੱਚ ਜੋੜੋ"
+
+msgctxt "IDS_OPEN_WITH_MPC"
+msgid "Play with MPC-HC"
+msgstr "MPC-HC ਨਾਲ ਚਲਾਓ"
+
+msgctxt "IDS_CANNOT_CHANGE_FORMAT"
+msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
+msgstr ""
+
+msgctxt "IDS_APP_DESCRIPTION"
+msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
+msgstr "MPC-HC ਵਿੰਡੋਜ਼ ਲਈ ਬਹੁਤ ਹੀ ਹਲਕਾ, ਆਜ਼ਾਦ ਸਰੋਤ ਵਾਲਾ ਮੀਡੀਆ ਪਲੇਅਰ ਹੈ। ਇਹ ਚਲਾਉਣ ਵਾਲੇ ਸਭ ਆਮ ਵਿਡੀਓ ਤੇ ਆਡੀਓ ਫ਼ਾਈਲ ਫਾਰਮੈਟ ਲਈ ਸਹਾਇਕ ਹੈ। ਅਸੀਂ 100% ਸਪਾਈਵੇਅਰ ਮੁਕਤ ਹੈ। ਕੋਈ ਵੀ ਇਸ਼ਤਿਹਾਰ ਜਾਂ ਟੂਲਬਾਰ ਨਹੀਂ ਹੁੰਦੀ ਹੈ।"
+
+msgctxt "IDS_MAINFRM_12"
+msgid "channel"
+msgstr " ਚੈਨਲ"
+
+msgctxt "IDS_MAINFRM_13"
+msgid "channels"
+msgstr "ਚੈਨਲ"
+
+msgctxt "IDS_AG_TITLE"
+msgid "Title %u"
+msgstr "ਟਾਈਟਲ %u"
+
+msgctxt "IDS_MAINFRM_16"
+msgid "DVD: Unexpected error"
+msgstr "DVD: ਅਚਾਨਕ ਗਲਤੀ"
+
+msgctxt "IDS_MAINFRM_17"
+msgid "DVD: Copy-Protect Fail"
+msgstr "DVD: ਕਾਪੀ-ਸੁਰੱਖਿਆ ਫੇਲ੍ਹ ਹੈ"
+
+msgctxt "IDS_MAINFRM_18"
+msgid "DVD: Invalid DVD 1.x Disc"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_19"
+msgid "DVD: Invalid Disc Region"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_20"
+msgid "DVD: Low Parental Level"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_21"
+msgid "DVD: Macrovision Fail"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_22"
+msgid "DVD: Incompatible System And Decoder Regions"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_23"
+msgid "DVD: Incompatible Disc And Decoder Regions"
+msgstr ""
+
+msgctxt "IDS_D3DFS_WARNING"
+msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_139"
+msgid "Sub delay: %ld ms"
+msgstr "ਸਬ ਦੇਰੀ: %ld ms"
+
+msgctxt "IDS_AG_TITLE2"
+msgid "Title: %02d/%02d"
+msgstr "ਦੇਰੀ: %02d/%02d"
+
+msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
+msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
+msgstr ""
+
+msgctxt "IDS_THUMB_ROWNUMBER"
+msgid "Rows:"
+msgstr "ਕਤਾਰਾਂ:"
+
+msgctxt "IDS_THUMB_COLNUMBER"
+msgid "Columns:"
+msgstr "ਕਾਲਮ:"
+
+msgctxt "IDS_THUMB_IMAGE_WIDTH"
+msgid "Image width"
+msgstr "ਚਿੱਤਰ ਚੌੜਾਈ"
+
+msgctxt "IDS_AG_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "ਆਕਾਰ ਅਨੁਪਾਤ"
+
+msgctxt "IDS_MAINFRM_37"
+msgid ", Total: %ld, Dropped: %ld"
+msgstr ", ਕੁੱਲ: %ld, ਅਣਡਿੱਠੇ ਕੀਤੇ: %ld"
+
+msgctxt "IDS_MAINFRM_38"
+msgid ", Size: %I64d KB"
+msgstr ", ਆਕਾਰ: %I64d KB"
+
+msgctxt "IDS_MAINFRM_39"
+msgid ", Size: %I64d MB"
+msgstr ", ਆਕਾਰ: %I64d MB"
+
+msgctxt "IDS_MAINFRM_40"
+msgid ", Free: %I64d KB"
+msgstr ", ਖਾਲੀ: %I64d KB"
+
+msgctxt "IDS_MAINFRM_41"
+msgid ", Free: %I64d MB"
+msgstr ", ਖਾਲੀ: %I64d MB"
+
+msgctxt "IDS_MAINFRM_42"
+msgid ", Free V/A Buffers: %03d/%03d"
+msgstr ", ਖਾਲੀ V/A ਬਫ਼ਰ: %03d/%03d"
+
+msgctxt "IDS_AG_ERROR"
+msgid "Error"
+msgstr "ਗਲਤੀ"
+
+msgctxt "IDS_SUBTITLE_STREAM_OFF"
+msgid "Subtitle: off"
+msgstr "ਸਬਟਾਈਟਲ: ਬੰਦ"
+
+msgctxt "IDS_SUBTITLE_STREAM"
+msgid "Subtitle: %s"
+msgstr "ਸਬਟਾਈਟਲ: %s"
+
+msgctxt "IDS_MAINFRM_46"
+msgid "Select the path for the DVD/BD:"
+msgstr "DVD/BD ਲਈ ਪਾਥ ਚੁਣੋ:"
+
+msgctxt "IDS_SUB_LOADED_SUCCESS"
+msgid " loaded successfully"
+msgstr "ਕਾਮਯਾਬੀ ਨਾਲ ਲੋਡ ਕੀਤਾ"
+
+msgctxt "IDS_ALL_FILES_FILTER"
+msgid "All files (*.*)|*.*||"
+msgstr "ਸਭ ਫ਼ਾਈਲਾਂ (*.*)|*.*||"
+
+msgctxt "IDS_GETDIB_FAILED"
+msgid "GetDIB failed, hr = %08x"
+msgstr ""
+
+msgctxt "IDS_GETCURRENTIMAGE_FAILED"
+msgid "GetCurrentImage failed, hr = %08x"
+msgstr ""
+
+msgctxt "IDS_SCREENSHOT_ERROR"
+msgid "Cannot create file"
+msgstr "ਫ਼ਾਈਲ ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ"
+
+msgctxt "IDS_THUMBNAILS_NO_DURATION"
+msgid "Cannot create thumbnails for files with no duration"
+msgstr "ਬਿਨਾਂ ਅੰਤਰਾਲ ਨਾਲ ਫ਼ਾਈਲਾਂ ਵਾਸਤੇ ਥੰਮਨੇਲ ਬਣਾਏ ਨਹੀਂ ਜਾ ਸਕਦੇ"
+
+msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
+msgid "Failed to get video frame size"
+msgstr "ਵਿਡੀਓ ਫਰੇਮ ਆਕਾਰ ਲੈਣ ਲਈ ਫੇਲ੍ਹ ਹੈ"
+
+msgctxt "IDS_OUT_OF_MEMORY"
+msgid "Out of memory, go buy some more!"
+msgstr "ਮੈਮੋਰੀ ਖਤਮ ਹੋਈ, ਕੁਝ ਹੋਰ ਖਰੀਦੋ!"
+
+msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
+msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
+msgstr ""
+
+msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
+msgid "File Size: %s (%s bytes)\\N"
+msgstr "ਫ਼ਾਈਲ ਆਕਾਰ: %s (%s ਬਾਈਟ)\\N"
+
+msgctxt "IDS_THUMBNAILS_INFO_HEADER"
+msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}ਫ਼ਾਈਲ ਨਾਂ: %s\\N%sਰੋਜ਼ੂਲੇਸ਼ਨ: %dx%d %s\\Nਅੰਤਰਾਲ: %02d:%02d:%02d"
+
+msgctxt "IDS_THUMBNAIL_TOO_SMALL"
+msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
+msgstr ""
+
+msgctxt "IDS_CANNOT_LOAD_SUB"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_FILES_FILTER"
+msgid "Subtitle files"
+msgstr "ਸਬਟਾਈਟਲ ਫ਼ਾਈਲਾਂ"
+
+msgctxt "IDS_MAINFRM_68"
+msgid "Aspect Ratio: %ld:%ld"
+msgstr "ਆਕਾਰ ਅਨੁਪਾਤ: %ld:%ld"
+
+msgctxt "IDS_MAINFRM_69"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_70"
+msgid "Audio delay: %I64d ms"
+msgstr "ਆਡੀਓ ਦੇਰੀ: %I64d ms"
+
+msgctxt "IDS_AG_CHAPTER"
+msgid "Chapter %d"
+msgstr "ਚੈਪਟਰ %d"
+
+msgctxt "IDS_AG_OUT_OF_MEMORY"
+msgid "Out of memory"
+msgstr "ਮੈਮੋਰੀ ਖਤਮ ਹੋਈ"
+
+msgctxt "IDS_MAINFRM_77"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_78"
+msgid "QuickTime not yet supported for X64 (apple library not available)"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_80"
+msgid "Failed to create the filter graph object"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_81"
+msgid "Invalid argument"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_82"
+msgid "Opening aborted"
+msgstr "ਖੋਲ੍ਹਣ ਨੂੰ ਅਧੂਰਾ ਛੱਡਿਆ"
+
+msgctxt "IDS_MAINFRM_83"
+msgid "Failed to render the file"
+msgstr "ਫ਼ਾਈਲ ਪੇਸ਼ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
+
+msgctxt "IDS_AG_CHAPTER2"
+msgid "Chapter: "
+msgstr "ਚੈਪਟਰ:"
+
+msgctxt "IDS_VOLUME_OSD"
+msgid "Vol: %d%%"
+msgstr "ਵਾਲੀ: %d%%"
+
+msgctxt "IDS_BOOST_OSD"
+msgid "Boost: +%u%%"
+msgstr "ਬੂਸਟ: +%u%%"
+
+msgctxt "IDS_BALANCE_OSD"
+msgid "Balance: %s"
+msgstr "ਸੰਤੁਲਨ: %s"
+
+msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
+msgid "Current"
+msgstr "ਮੌਜੂਦਾ"
+
+msgctxt "IDS_MAINFRM_DIR_TITLE"
+msgid "Select Directory"
+msgstr "ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ"
+
+msgctxt "IDS_MAINFRM_DIR_CHECK"
+msgid "Include subdirectories"
+msgstr "ਸਬ-ਡਾਇਰੈਕਟਰੀਆਂ ਸਮੇਤ"
+
+msgctxt "IDS_AG_PAUSE"
+msgid "Pause"
+msgstr "ਵਿਰਾਮ ਕਰੋ"
+
+msgctxt "IDS_AG_TOGGLE_CAPTION"
+msgid "Toggle Caption&Menu"
+msgstr "ਸੁਰਖੀ ਮੀਨੂ ਬਦਲੋ(&M)"
+
+msgctxt "IDS_AG_TOGGLE_SEEKER"
+msgid "Toggle Seek Bar"
+msgstr "ਸੀਕ ਪੱਟੀ ਬਦਲੋ"
+
+msgctxt "IDS_AG_TOGGLE_CONTROLS"
+msgid "Toggle Controls"
+msgstr "ਕੰਟਰੋਲ ਬਦਲੋ"
+
+msgctxt "IDS_MAINFRM_84"
+msgid "Invalid file name"
+msgstr "ਗਲਤ ਫ਼ਾਈਲ ਨਾਂ"
+
+msgctxt "IDS_MAINFRM_86"
+msgid "Cannot connect the filters"
+msgstr "ਫਿਲਟਰਾਂ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+msgctxt "IDS_MAINFRM_87"
+msgid "Cannot load any source filter"
+msgstr "ਕੋਈ ਸਰੋਤ ਫਿਲਟਰ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+msgctxt "IDS_MAINFRM_88"
+msgid "Cannot render the file"
+msgstr "ਫ਼ਾਈਲ ਨੂੰ ਰੈਂਡਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+msgctxt "IDS_MAINFRM_89"
+msgid "Invalid file format"
+msgstr "ਗਲਤ ਫ਼ਾਈਲ ਫਾਰਮੈਟ"
+
+msgctxt "IDS_MAINFRM_90"
+msgid "File not found"
+msgstr "ਫ਼ਾਈਲ ਨਹੀਂ ਲੱਭੀ"
+
+msgctxt "IDS_MAINFRM_91"
+msgid "Unknown file type"
+msgstr "ਅਣਜਾਣ ਫ਼ਾਈਲ ਕਿਸਮ"
+
+msgctxt "IDS_MAINFRM_92"
+msgid "Unsupported stream"
+msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ ਸਟਰੀ"
+
+msgctxt "IDS_MAINFRM_93"
+msgid "Cannot find DVD directory"
+msgstr "DVD ਡਾਇਰੈਕਟਰੀ ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕਦੀ"
+
+msgctxt "IDS_MAINFRM_94"
+msgid "Can't create the DVD Navigator filter"
+msgstr "DVD ਨੇਵੀਗੇਟਰ ਫਿਲਟਰ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
+
+msgctxt "IDS_AG_FAILED"
+msgid "Failed"
+msgstr "ਫੇਲ੍ਹ ਹੈ"
+
+msgctxt "IDS_MAINFRM_96"
+msgid "Can't create video capture filter"
+msgstr "ਵਿੀਡਓ ਕੈਪਚਰ ਫਿਲਟਰ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
+
+msgctxt "IDS_MAINFRM_98"
+msgid "No capture filters"
+msgstr "ਕੋਈ ਕੈਪਚਰ ਫਿਲਟਰ ਨਹੀਂ"
+
+msgctxt "IDS_MAINFRM_99"
+msgid "Can't create capture graph builder object"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_108"
+msgid "Couldn't open any device"
+msgstr "ਕੋਈ ਡਿਵਾਇਸ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"
+
+msgctxt "IDS_AG_SOUND"
+msgid "Sound"
+msgstr "ਸਾਊਂਡ"
+
+msgctxt "IDS_MAINFRM_114"
+msgid "%s was not found, please insert media containing this file."
+msgstr "%s ਨਹੀਂ ਲੱਭੀ, ਇਹ ਫ਼ਾਈਲ ਰੱਖਣ ਵਾਲਾ ਮੀਡੀਆ ਪਾਉ।"
+
+msgctxt "IDS_AG_ABORTED"
+msgid "Aborted"
+msgstr "ਅਧੂਰਾ ਛੱਡਿਆ"
+
+msgctxt "IDS_MAINFRM_116"
+msgid "&Properties..."
+msgstr "...ਵਿਸ਼ੇਸ਼ਤਾ(&P)"
+
+msgctxt "IDS_MAINFRM_117"
+msgid " (pin) properties..."
+msgstr "...(ਪਿੰਨ) ਵਿਸ਼ੇਸ਼ਤਾ"
+
+msgctxt "IDS_AG_UNKNOWN_STREAM"
+msgid "Unknown Stream"
+msgstr "ਅਣਜਾਣ ਸਟਰੀ"
+
+msgctxt "IDS_AG_UNKNOWN"
+msgid "Unknown %u"
+msgstr "ਅਣਜਾਣ %u"
+
+msgctxt "IDS_AG_VSYNC"
+msgid "VSync"
+msgstr "V-ਸਿੰਕ"
+
+msgctxt "IDS_MAINFRM_121"
+msgid " (Director Comments 1)"
+msgstr "(ਡਾਇਰੈਕਟਰ ਟਿੱਪਣੀ 1)"
+
+msgctxt "IDS_MAINFRM_122"
+msgid " (Director Comments 2)"
+msgstr "(ਡਾਇਰੈਕਟਰ ਟਿੱਪਣੀ 2)"
+
+msgctxt "IDS_DVD_SUBTITLES_ENABLE"
+msgid "Enable DVD subtitles"
+msgstr "DVD ਸਬਟਾਈਟਲ ਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDS_AG_ANGLE"
+msgid "Angle %u"
+msgstr "ਕੋਣ %u"
+
+msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
+msgid "Increase VSync Offset"
+msgstr ""
+
+msgctxt "IDS_AG_DISABLED"
+msgid "Disabled"
+msgstr "ਅਸਮਰੱਥ ਹੈ"
+
+msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
+msgid "Decrease VSync Offset"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_136"
+msgid "MPC-HC D3D Fullscreen"
+msgstr "MPC-HC D3D ਪੂਰੀ-ਸਕਰੀਨ"
+
+msgctxt "IDS_MAINFRM_137"
+msgid "Unknown format"
+msgstr "ਅਣਜਾਣ ਫਾਰਮੈਟ"
+
+msgctxt "IDS_MAINFRM_138"
+msgid "Sub shift: %ld ms"
+msgstr ""
+
+msgctxt "IDS_VOLUME_BOOST_INC"
+msgid "Volume boost increase"
+msgstr ""
+
+msgctxt "IDS_VOLUME_BOOST_DEC"
+msgid "Volume boost decrease"
+msgstr ""
+
+msgctxt "IDS_VOLUME_BOOST_MIN"
+msgid "Volume boost Min"
+msgstr ""
+
+msgctxt "IDS_VOLUME_BOOST_MAX"
+msgid "Volume boost Max"
+msgstr ""
+
+msgctxt "IDS_USAGE"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
+
+msgctxt "IDS_UNKNOWN_SWITCH"
+msgid "Unrecognized switch(es) found in command line string: \n\n"
+msgstr ""
+
+msgctxt "IDS_AG_TOGGLE_INFO"
+msgid "Toggle Information"
+msgstr "ਜਾਣਕਾਰੀ ਬਦਲੋ"
+
+msgctxt "IDS_AG_TOGGLE_STATS"
+msgid "Toggle Statistics"
+msgstr "ਅੰਕੜੇ ਬਦਲੋ"
+
+msgctxt "IDS_AG_TOGGLE_STATUS"
+msgid "Toggle Status"
+msgstr "ਸਥਿਤੀ ਬਦਲੋ"
+
+msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
+msgid "Toggle Subresync Bar"
+msgstr ""
+
+msgctxt "IDS_AG_TOGGLE_PLAYLIST"
+msgid "Toggle Playlist Bar"
+msgstr "ਪਲੇਅਲਿਸਟ ਪੱਟੀ ਬਦਲੋ"
+
+msgctxt "IDS_AG_TOGGLE_CAPTURE"
+msgid "Toggle Capture Bar"
+msgstr "ਕੈਪਚਰ ਪੱਟੀ ਬਦਲੋ"
+
+msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
+msgid "Toggle Debug Shaders"
+msgstr "ਡੀਬੱਗ ਸ਼ੇਡਰ ਬਦਲੋ"
+
+msgctxt "IDS_AG_ZOOM_50"
+msgid "Zoom 50%"
+msgstr "50% ਜ਼ੂਮ"
+
+msgctxt "IDS_AG_ZOOM_100"
+msgid "Zoom 100%"
+msgstr "100% ਜ਼ੂਮ"
+
+msgctxt "IDS_AG_ZOOM_200"
+msgid "Zoom 200%"
+msgstr "200% ਜ਼ੂਮ"
+
+msgctxt "IDS_AG_NEXT_AR_PRESET"
+msgid "Next AR Preset"
+msgstr ""
+
+msgctxt "IDS_AG_VIDFRM_STRETCH"
+msgid "VidFrm Stretch"
+msgstr ""
+
+msgctxt "IDS_AG_VIDFRM_INSIDE"
+msgid "VidFrm Inside"
+msgstr ""
+
+msgctxt "IDS_AG_VIDFRM_OUTSIDE"
+msgid "VidFrm Outside"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_RESET"
+msgid "PnS Reset"
+msgstr ""
+
+msgctxt "IDS_AG_PNS_ROTATEX_P"
+msgid "PnS Rotate X+"
+msgstr ""
+
+msgctxt "IDS_AG_VIDFRM_ZOOM1"
+msgid "VidFrm Zoom 1"
+msgstr ""
+
+msgctxt "IDS_AG_VIDFRM_ZOOM2"
+msgid "VidFrm Zoom 2"
+msgstr ""
+
+msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
+msgid "VidFrm Switch Zoom"
+msgstr ""
+
+msgctxt "IDS_ENABLE_ALL_FILTERS"
+msgid "&Enable all filters"
+msgstr "ਸਭ ਫਿਲਟਰ ਸਮਰੱਥ ਕਰੋ(&E)"
+
+msgctxt "IDS_LOGO_AUTHOR"
+msgid "Author unknown. Contact us if you made this logo!"
+msgstr ""
+
+msgctxt "IDS_NO_MORE_MEDIA"
+msgid "No more media in the current folder."
+msgstr "ਮੌਜੂਦਾ ਫੋਲਡਰ ਵਿੱਚ ਕੋਈ ਹੋਰ ਮੀਡੀਆ ਨਹੀਂ ਹੈ।"
+
+msgctxt "IDS_FIRST_IN_FOLDER"
+msgid "The first file of the folder is already loaded."
+msgstr "ਫੋਲਡਰ ਦੀ ਪਹਿਲੀ ਫ਼ਾਈਲ ਪਹਿਲਾਂ ਹੀ ਲੋਡ ਹੈ।"
+
+msgctxt "IDS_LAST_IN_FOLDER"
+msgid "The last file of the folder is already loaded."
+msgstr "ਫੋਲਡਰ ਦੀ ਆਖਰੀ ਫ਼ਾਈਲ ਪਹਿਲਾਂ ਹੀ ਲੋਡ ਹੈ।"
+
+msgctxt "IDS_FRONT_LEFT"
+msgid "Front Left"
+msgstr "ਅੱਗੇ ਖੱਬਾ"
+
+msgctxt "IDS_FRONT_RIGHT"
+msgid "Front Right"
+msgstr "ਅੱਗੇ ਸੱਜਾ"
+
+msgctxt "IDS_FRONT_CENTER"
+msgid "Front Center"
+msgstr "ਅੱਗੇ ਸੈਂਟਰ"
+
+msgctxt "IDS_LOW_FREQUENCY"
+msgid "Low Frequency"
+msgstr "ਘੱਟ ਫਰੀਕਿਊਂਸੀ"
+
+msgctxt "IDS_BACK_LEFT"
+msgid "Back Left"
+msgstr "ਪਿੱਛੇ ਖੱਬੇ"
+
+msgctxt "IDS_BACK_RIGHT"
+msgid "Back Right"
+msgstr "ਪਿੱਛੇ ਸੱਜੇ"
+
+msgctxt "IDS_FRONT_LEFT_OF_CENTER"
+msgid "Front Left of Center"
+msgstr "ਸੈਂਟਰ ਦਾ ਅੱਗੇ ਖੱਬਾ"
+
+msgctxt "IDS_FRONT_RIGHT_OF_CENTER"
+msgid "Front Right of Center"
+msgstr "ਸੈਂਟਰ ਦਾ ਅੱਗੇ ਸੱਜਾ"
+
+msgctxt "IDS_BACK_CENTER"
+msgid "Back Center"
+msgstr "ਪਿੱਛੇ ਸੈਂਟਰ"
+
+msgctxt "IDS_SIDE_LEFT"
+msgid "Side Left"
+msgstr "ਪਾਸੇ ਖੱਬਾ"
+
+msgctxt "IDS_SIDE_RIGHT"
+msgid "Side Right"
+msgstr "ਪਾਸੇ ਸੱਜਾ"
+
+msgctxt "IDS_TOP_CENTER"
+msgid "Top Center"
+msgstr ""
+
+msgctxt "IDS_TOP_FRONT_LEFT"
+msgid "Top Front Left"
+msgstr ""
+
+msgctxt "IDS_TOP_FRONT_CENTER"
+msgid "Top Front Center"
+msgstr ""
+
+msgctxt "IDS_TOP_FRONT_RIGHT"
+msgid "Top Front Right"
+msgstr ""
+
+msgctxt "IDS_TOP_BACK_LEFT"
+msgid "Top Back Left"
+msgstr ""
+
+msgctxt "IDS_TOP_BACK_CENTER"
+msgid "Top Back Center"
+msgstr ""
+
+msgctxt "IDS_TOP_BACK_RIGHT"
+msgid "Top Back Right"
+msgstr ""
+
+msgctxt "IDS_TIME_TOOLTIP_ABOVE"
+msgid "Above seek bar"
+msgstr ""
+
+msgctxt "IDS_TIME_TOOLTIP_BELOW"
+msgid "Below seek bar"
+msgstr ""
+
+msgctxt "IDS_VIDEO_STREAM"
+msgid "Video: %s"
+msgstr "ਵਿਡੀਓ: %s"
+
+msgctxt "IDS_APPLY"
+msgid "Apply"
+msgstr "ਲਾਗੂ ਕਰੋ"
+
+msgctxt "IDS_CLEAR"
+msgid "Clear"
+msgstr "ਸਾਫ਼ ਕਰੋ"
+
+msgctxt "IDS_CANCEL"
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+msgctxt "IDS_THUMB_THUMBNAILS"
+msgid "Layout"
+msgstr "ਲੇਆਉਟ"
+
+msgctxt "IDS_THUMB_PIXELS"
+msgid "Pixels:"
+msgstr "ਪਿਕਸਲ:"
+
+msgctxt "IDS_TEXTFILE_ENC"
+msgid "Encoding:"
+msgstr "ਇੰਕੋਡਿੰਗ:"
+
+msgctxt "IDS_DISABLE_ALL_FILTERS"
+msgid "&Disable all filters"
+msgstr "ਸਭ ਫਿਲਟਰ ਅਸਮਰੱਥ ਕਰੋ(&D)"
+
+msgctxt "IDS_ENABLE_AUDIO_FILTERS"
+msgid "Enable all audio decoders"
+msgstr "ਸਭ ਆਡੀਓ ਡੀਕੋਡਰ ਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDS_DISABLE_AUDIO_FILTERS"
+msgid "Disable all audio decoders"
+msgstr "ਸਭ ਆਡੀਓ ਡੀਕੋਡਰ ਅਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDS_ENABLE_VIDEO_FILTERS"
+msgid "Enable all video decoders"
+msgstr "ਸਬ ਵਿਡੀਓ ਡੀਕੋਡਰ ਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDS_DISABLE_VIDEO_FILTERS"
+msgid "Disable all video decoders"
+msgstr "ਸਭ ਵਿਡੀਓ ਡੀਕੋਡਰ ਅਸਮਰੱਥ ਕਰੋ"
+
+msgctxt "IDS_STRETCH_TO_WINDOW"
+msgid "Stretch To Window"
+msgstr "ਵਿੰਡੋ ਲਈ ਖਿੱਚੋ"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
+msgid "Touch Window From Inside"
+msgstr "ਪਾਸੇ ਤੋਂ ਵਿੰਡੋ ਨੂੰ ਟੱਚ ਕਰੋ"
+
+msgctxt "IDS_ZOOM1"
+msgid "Zoom 1"
+msgstr "ਜ਼ੂਮ 1"
+
+msgctxt "IDS_ZOOM2"
+msgid "Zoom 2"
+msgstr "ਜ਼ੂਮ 2"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
+msgid "Touch Window From Outside"
+msgstr "ਬਾਹਰ ਤੋਂ ਵਿੰਡੋ ਟੱਚ ਕਰੋ"
+
+msgctxt "IDS_AUDIO_STREAM"
+msgid "Audio: %s"
+msgstr "ਆਡੀਓ: %s"
+
+msgctxt "IDS_AG_REOPEN"
+msgid "Reopen File"
+msgstr "ਫ਼ਾਈਲ ਮੁੜ-ਖੋਲ੍ਹੋ"
+
+msgctxt "IDS_MFMT_AVI"
+msgid "AVI"
+msgstr "AVI"
+
+msgctxt "IDS_MFMT_MPEG"
+msgid "MPEG"
+msgstr "MPEG"
+
+msgctxt "IDS_MFMT_MPEGTS"
+msgid "MPEG-TS"
+msgstr "MPEG-TS"
+
+msgctxt "IDS_MFMT_DVDVIDEO"
+msgid "DVD-Video"
+msgstr "DVD-ਵਿਡੀਓ"
+
+msgctxt "IDS_MFMT_MKV"
+msgid "Matroska"
+msgstr "Matroska"
+
+msgctxt "IDS_MFMT_WEBM"
+msgid "WebM"
+msgstr "WebM"
+
+msgctxt "IDS_MFMT_MP4"
+msgid "MP4"
+msgstr "MP4"
+
+msgctxt "IDS_MFMT_MOV"
+msgid "QuickTime Movie"
+msgstr "QuickTime ਮੂਵੀ"
+
+msgctxt "IDS_MFMT_3GP"
+msgid "3GP"
+msgstr "3GP"
+
+msgctxt "IDS_MFMT_3G2"
+msgid "3G2"
+msgstr "3G2"
+
+msgctxt "IDS_MFMT_FLV"
+msgid "Flash Video"
+msgstr "ਫਲੈਸ਼ ਵਿਡੀਓ"
+
+msgctxt "IDS_MFMT_OGM"
+msgid "Ogg Media"
+msgstr "Ogg ਮੀਡੀਆ"
+
+msgctxt "IDS_MFMT_RM"
+msgid "Real Media"
+msgstr "ਰੀਅਲ ਮੀਡੀਆ"
+
+msgctxt "IDS_MFMT_RT"
+msgid "Real Script"
+msgstr "ਰੀਅਲ ਸਕ੍ਰਿਪਟ"
+
+msgctxt "IDS_MFMT_WMV"
+msgid "Windows Media Video"
+msgstr "ਵਿੰਡੋਜ਼ ਮੀਡੀਆ ਵਿਡੀਓ"
+
+msgctxt "IDS_MFMT_BINK"
+msgid "Smacker/Bink Video"
+msgstr "Smacker/Bink ਵਿਡੀਓ"
+
+msgctxt "IDS_MFMT_FLIC"
+msgid "FLIC Animation"
+msgstr "FLIC ਐਨੀਮੇਸ਼ਨ"
+
+msgctxt "IDS_MFMT_DSM"
+msgid "DirectShow Media"
+msgstr "DirectShow ਮੀਡੀਆ"
+
+msgctxt "IDS_MFMT_IVF"
+msgid "Indeo Video Format"
+msgstr "Indeo ਵਿਡੀਓ ਫਾਰਮੈਟ"
+
+msgctxt "IDS_MFMT_OTHER"
+msgid "Other"
+msgstr "ਹੋਰ"
+
+msgctxt "IDS_MFMT_SWF"
+msgid "Shockwave Flash"
+msgstr "Shockwave ਫਲੈਸ਼"
+
+msgctxt "IDS_MFMT_OTHER_AUDIO"
+msgid "Other Audio"
+msgstr "ਹੋਰ ਆਡੀਓ"
+
+msgctxt "IDS_MFMT_AC3"
+msgid "AC-3"
+msgstr "AC-3"
+
+msgctxt "IDS_MFMT_AIFF"
+msgid "AIFF"
+msgstr "AIFF"
+
+msgctxt "IDS_MFMT_ALAC"
+msgid "Apple Lossless"
+msgstr "Apple ਲੂਜ਼ਲੈਸ"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "ਵਿੰਡੋਜ਼ ਮੀਡੀਆ ਆਡੀਓ"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "ਵੇਵਪੈਕ"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus ਆਡੀਓ Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
+msgctxt "IDS_MFMT_AMR"
+msgid "AMR"
+msgstr "AMR"
+
+msgctxt "IDS_MFMT_APE"
+msgid "Monkey's Audio"
+msgstr ""
+
+msgctxt "IDS_MFMT_AU"
+msgid "AU/SND"
+msgstr "AU/SND"
+
+msgctxt "IDS_MFMT_CDA"
+msgid "Audio CD track"
+msgstr "ਆਡੀਓ CD ਟਰੈਕ"
+
+msgctxt "IDS_MFMT_FLAC"
+msgid "FLAC"
+msgstr "FLAC"
+
+msgctxt "IDS_MFMT_M4A"
+msgid "MPEG-4 Audio"
+msgstr "MPEG-4 ਆਡੀਓ"
+
+msgctxt "IDS_MFMT_MIDI"
+msgid "MIDI"
+msgstr "MIDI"
+
+msgctxt "IDS_MFMT_MKA"
+msgid "Matroska audio"
+msgstr "Matroska ਆਡੀਓ"
+
+msgctxt "IDS_MFMT_MP3"
+msgid "MP3"
+msgstr "MP3"
+
+msgctxt "IDS_MFMT_MPA"
+msgid "MPEG audio"
+msgstr "MPEG ਆਡੀਓ"
+
+msgctxt "IDS_MFMT_MPC"
+msgid "Musepack"
+msgstr "Musepack"
+
+msgctxt "IDS_MFMT_OFR"
+msgid "OptimFROG"
+msgstr "OptimFROG"
+
+msgctxt "IDS_MFMT_OGG"
+msgid "Ogg Vorbis"
+msgstr "Ogg Vorbis"
+
+msgctxt "IDS_MFMT_RA"
+msgid "Real Audio"
+msgstr "Real ਆਡੀਓ"
+
+msgctxt "IDS_MFMT_TAK"
+msgid "TAK"
+msgstr "TAK"
+
+msgctxt "IDS_MFMT_TTA"
+msgid "True Audio"
+msgstr "True ਆਡੀਓ"
+
+msgctxt "IDS_MFMT_PLS"
+msgid "Playlist"
+msgstr "ਪਲੇਅਲਿਸਟ"
+
+msgctxt "IDS_MFMT_BDPLS"
+msgid "Blu-ray playlist"
+msgstr "ਬਲੂ-ਰੇਅ ਪਲੇਅਲਿਸਟ"
+
+msgctxt "IDS_MFMT_RAR"
+msgid "RAR Archive"
+msgstr "RAR ਅਕਾਇਵ"
+
+msgctxt "IDS_DVB_CHANNEL_FPS"
+msgid "FPS"
+msgstr "FPS"
+
+msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
+msgid "Resolution"
+msgstr "ਰੈਜ਼ੂਲੇਸ਼ਨ"
+
+msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "ਆਕਾਰ ਅਨੁਪਾਤ"
+
+msgctxt "IDS_OSD_RS_VSYNC_ON"
+msgid "VSync: On"
+msgstr "V-ਸਿੰਕ: ਚਾਲੂ"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFF"
+msgid "VSync: Off"
+msgstr "V-ਸਿੰਕ: ਬੰਦ"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
+msgid "Accurate VSync: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
+msgid "Accurate VSync: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
+msgid "Synchronize Video to Display: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
+msgid "Synchronize Video to Display: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
+msgid "Synchronize Display to Video: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
+msgid "Synchronize Display to Video: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
+msgid "Present at Nearest VSync: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
+msgid "Present at Nearest VSync: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
+msgid "Color Management: On"
+msgstr "ਰੰਗ ਪਰਬੰਧ: ਚਾਲੂ"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
+msgid "Color Management: Off"
+msgstr "ਰੰਗ ਪਰਬੰਧ: ਬੰਦ"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
+msgid "Input Type: Auto-Detect"
+msgstr "ਇਨਪੁਟ ਕਿਸਮ: ਆਟੋ-ਖੋਜ"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
+msgid "Input Type: HDTV"
+msgstr "ਇਨਪੁਟ ਕਿਸਮ: HDTV"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_NTSC"
+msgid "Input Type: SDTV NTSC"
+msgstr "ਇਨਪੁਟ ਕਿਸਮ: SDTV NTSC"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
+msgid "Input Type: SDTV PAL"
+msgstr "ਇਨਪੁਟ ਕਿਸਮ: SDTV PAL"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
+msgid "Ambient Light: Bright (2.2 Gamma)"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
+msgid "Ambient Light: Dim (2.35 Gamma)"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
+msgid "Ambient Light: Dark (2.4 Gamma)"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
+msgid "Rendering Intent: Perceptual"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
+msgid "Rendering Intent: Relative Colorimetric"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
+msgid "Rendering Intent: Saturation"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
+msgid "Rendering Intent: Absolute Colorimetric"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
+msgid "Output Range: %s"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
+msgid "Flush GPU before VSync: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
+msgid "Flush GPU before VSync: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
+msgid "Flush GPU after Present: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
+msgid "Flush GPU after Present: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_WAIT_ON"
+msgid "Wait for GPU Flush: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_WAIT_OFF"
+msgid "Wait for GPU Flush: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
+msgid "D3D Fullscreen: On"
+msgstr "D3D ਪੂਰੀ-ਸਕਰੀਨ: ਚਾਲੂ"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
+msgid "D3D Fullscreen: Off"
+msgstr "D3D ਪੂਰੀ-ਸਕਰੀਨ: ਬੰਦ"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
+msgid "Disable desktop composition: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
+msgid "Disable desktop composition: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
+msgid "Alternative VSync: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
+msgid "Alternative VSync: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_RESET_DEFAULT"
+msgid "Renderer settings reset to default"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
+msgid "Renderer settings reset to optimal"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
+msgid "D3D Fullscreen GUI Support: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
+msgid "D3D Fullscreen GUI Support: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
+msgid "10-bit RGB Output: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
+msgid "10-bit RGB Output: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
+msgid "Force 10-bit RGB Input: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
+msgid "Force 10-bit RGB Input: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
+msgid "Full Floating Point Processing: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
+msgid "Full Floating Point Processing: Off"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
+msgid "Half Floating Point Processing: On"
+msgstr ""
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
+msgid "Half Floating Point Processing: Off"
+msgstr ""
+
+msgctxt "IDS_BRIGHTNESS_DEC"
+msgid "Brightness decrease"
+msgstr "ਚਮਕ ਘਟਾਓ"
+
+msgctxt "IDS_CONTRAST_INC"
+msgid "Contrast increase"
+msgstr "ਕਨਟਰਾਸਟ ਵਧਾਓ"
+
+msgctxt "IDS_CONTRAST_DEC"
+msgid "Contrast decrease"
+msgstr "ਕਨਟਰਾਸਟ ਘਟਾਓ"
+
+msgctxt "IDS_HUE_INC"
+msgid "Hue increase"
+msgstr "ਰੰਗਤ ਵਧਾਓ"
+
+msgctxt "IDS_HUE_DEC"
+msgid "Hue decrease"
+msgstr "ਰੰਗਤ ਘਟਾਓ"
+
+msgctxt "IDS_SATURATION_INC"
+msgid "Saturation increase"
+msgstr "ਸੰਤ੍ਰਿਪਤ ਵਧਾਓ"
+
+msgctxt "IDS_SATURATION_DEC"
+msgid "Saturation decrease"
+msgstr "ਸੰਤ੍ਰਿਪਤਾ ਘਟਾਓ"
+
+msgctxt "IDS_RESET_COLOR"
+msgid "Reset color settings"
+msgstr "ਰੰਗ ਸੈਟਿੰਗਾਂ ਮੁੜ-ਸੈਟ ਕਰੋ"
+
+msgctxt "IDS_USING_LATEST_STABLE"
+msgid "\nYou are already using the latest stable version."
+msgstr "\nਤੁਸੀਂ ਬਿਲਕੁਲ ਨਵਾਂ ਸਟੇਬਲ ਵਰਜ਼ਨ ਵਰਤ ਰਹੇ ਹੋ।"
+
+msgctxt "IDS_USING_NEWER_VERSION"
+msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
+msgstr "ਤੁਹਾਡੇ ਕੋਲ ਇਸ ਵੇਲੇ v%s ਵਰਜ਼ਨ ਹੈ\n\nਬਿਲਕੁਲ ਨਵਾਂ ਸਟੇਬਲ ਵਰਜ਼ਨ v%s ਹੈ।"
+
+msgctxt "IDS_NEW_UPDATE_AVAILABLE"
+msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
+msgstr "MPC-HC v%s ਹੁਣ ਮੌਜੂਦ ਹੈ। ਤੁਸੀਂ v%s ਵਰਤ ਰਹੇ ਹੋ।\n\nਕੀ ਤੁਸੀਂ ਇਸ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਵਾਸਤੇ MPC-HC ਦੀ ਵੈਬਸਾਈਟ ਖੋਲ੍ਹਣੀ ਚਾਹੁੰਦੇ ਹੋ?"
+
+msgctxt "IDS_UPDATE_ERROR"
+msgid "Update server not found.\n\nPlease check your internet connection or try again later."
+msgstr "ਅਪਡੇਟ ਸਰਵਰ ਨਹੀਂ ਲੱਭਿਆ।\n\nਆਪਣੇ ਇੰਟਰਨੈਟ ਦੀ ਜਾਂਚ ਕਰੋ ਜਾਂ ਬਾਅਦ ਵਿੱਚ ਕੋਸ਼ਿਸ਼ ਕਰਕੇ ਵੇਖੋ।"
+
+msgctxt "IDS_UPDATE_CLOSE"
+msgid "&Close"
+msgstr "ਬੰਦ ਕਰੋ(&C)"
+
+msgctxt "IDS_OSD_ZOOM"
+msgid "Zoom: %.0lf%%"
+msgstr "ਜ਼ੂਮ: %.0lf%%"
+
+msgctxt "IDS_OSD_ZOOM_AUTO"
+msgid "Zoom: Auto"
+msgstr "ਜ਼ੂਮ: ਆਟੋ"
+
+msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
+msgid "Toggle custom channel mapping"
+msgstr ""
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
+msgid "Custom channel mapping: On"
+msgstr ""
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
+msgid "Custom channel mapping: Off"
+msgstr ""
+
+msgctxt "IDS_NORMALIZE"
+msgid "Toggle normalization"
+msgstr ""
+
+msgctxt "IDS_OSD_NORMALIZE_ON"
+msgid "Normalization: On"
+msgstr "ਨਾਰਮਲਾਈਜ਼: ਚਾਲੂ"
+
+msgctxt "IDS_OSD_NORMALIZE_OFF"
+msgid "Normalization: Off"
+msgstr "ਨਾਰਮਲਾਈਜ਼: ਬੰਦ"
+
+msgctxt "IDS_REGAIN_VOLUME"
+msgid "Toggle regain volume"
+msgstr ""
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
+msgid "Regain volume: On"
+msgstr ""
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
+msgid "Regain volume: Off"
+msgstr ""
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "ਬਾਈਟ"
+
+msgctxt "IDS_SIZE_UNIT_K"
+msgid "KB"
+msgstr "KB"
+
+msgctxt "IDS_SIZE_UNIT_M"
+msgid "MB"
+msgstr "MB"
+
+msgctxt "IDS_SIZE_UNIT_G"
+msgid "GB"
+msgstr "GB"
+
+msgctxt "IDS_SPEED_UNIT_K"
+msgid "KB/s"
+msgstr "KB/s"
+
+msgctxt "IDS_SPEED_UNIT_M"
+msgid "MB/s"
+msgstr "MB/s"
+
+msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
+msgid "Could not create the tuner."
+msgstr "ਟਿਊਨਰ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।"
+
+msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
+msgid "Could not create the receiver."
+msgstr "ਰਿਸੀਵਰ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।"
+
+msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
+msgid "Could not connect the network and the tuner."
+msgstr "ਨੈਟਵਰਕ ਤੇ ਟਿਊਨਰ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
+msgid "Could not connect the tuner and the receiver."
+msgstr "ਟਿਊਨਰ ਤੇ ਰਿਸੀਵਰ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕੇ।"
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
+msgid "Could not connect the tuner."
+msgstr ""
+
+msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
+msgid "Could not create the demultiplexer."
+msgstr ""
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
+msgid "Error parsing the entered time!"
+msgstr ""
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
+msgid "Error parsing the entered text!"
+msgstr ""
+
+msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
+msgid "Error parsing the entered frame rate!"
+msgstr ""
+
+msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
+msgid "Cannot frame-step, try a different video renderer."
+msgstr ""
+
+msgctxt "IDS_SCREENSHOT_ERROR_REAL"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
+msgstr ""
+
+msgctxt "IDS_SCREENSHOT_ERROR_QT"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
+msgstr ""
+
+msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
+msgstr ""
+
+msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
+msgstr ""
+
+msgctxt "IDS_MB_SHOW_EDL_EDITOR"
+msgid "Do you want to activate the EDL editor?"
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR"
+msgid "Capture Error"
+msgstr "ਕੈਪਚਰ ਗਲਤੀ"
+
+msgctxt "IDS_CAPTURE_ERROR_VIDEO"
+msgid "video"
+msgstr "ਵਿਡੀਓ"
+
+msgctxt "IDS_CAPTURE_ERROR_AUDIO"
+msgid "audio"
+msgstr "ਆਡੀਓ"
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
+msgid "Can't add the %s buffer filter to the graph."
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
+msgid "Can't connect the %s buffer filter to the graph."
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
+msgid "Can't add the %s encoder filter to the graph."
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
+msgid "Can't connect the %s encoder filter to the graph."
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
+msgid "Can't set the compression format on the %s encoder filter."
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
+msgid "Can't connect the %s stream to the multiplexer filter."
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
+msgid "No video capture pin was found."
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
+msgid "No audio capture pin was found."
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
+msgid "Error initializing the output file."
+msgstr ""
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
+msgid "Error initializing the audio output file."
+msgstr ""
+
+msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
+msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+msgstr ""
+
+msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
+msgid "This type is already in the list!"
+msgstr ""
+
+msgctxt "IDS_WEBSERVER_ERROR_TEST"
+msgid "You need to apply the new settings before testing them."
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
+msgid "After Playback: Exit"
+msgstr "ਚਲਾਓ ਦੇ ਬਾਅਦ: ਬਾਹਰ ਨਿਕਲੋ"
+
+msgctxt "IDS_AFTERPLAYBACK_STANDBY"
+msgid "After Playback: Stand By"
+msgstr "ਚਲਾਓ ਦੇ ਬਾਅਦ: ਸਟੈਂਡਬਾਏ"
+
+msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
+msgid "After Playback: Hibernate"
+msgstr "ਚਲਾਓ ਦੇ ਬਾਅਦ: ਹਾਈਬਰਨੇਟ"
+
+msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
+msgid "After Playback: Shutdown"
+msgstr "ਚਲਾਓ ਦੇ ਬਾਅਦ: ਬੰਦ ਕਰੋ"
+
+msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
+msgid "After Playback: Log Off"
+msgstr "ਚਲਾਓ ਦੇ ਬਾਅਦ: ਲਾਗ ਆਫ਼ ਕਰੋ"
+
+msgctxt "IDS_AFTERPLAYBACK_LOCK"
+msgid "After Playback: Lock"
+msgstr "ਚਲਾਉਣ ਦੇ ਬਾਅਦ: ਲਾਕ ਕਰੋ"
+
+msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
+msgid "After Playback: Turn off the monitor"
+msgstr "ਚਲਾਉਣ ਦੇ ਬਾਅਦ: ਮਾਨੀਟਰ ਬੰਦ ਕਰੋ"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "ਚਲਾਉਣ ਦੇ ਬਾਅਦ: ਫੋਲਡਰ ਵਿੱਚ ਅਗਲੀ ਫ਼ਾਈਲ ਚਲਾਓ"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "ਚਲਾਉਣ ਦੇ ਬਾਅਦ: ਕੁਝ ਨਾ ਕਰੋ"
+
+msgctxt "IDS_OSD_BRIGHTNESS"
+msgid "Brightness: %s"
+msgstr "ਚਮਕ: %s"
+
+msgctxt "IDS_OSD_CONTRAST"
+msgid "Contrast: %s"
+msgstr "ਕਨਟਰਾਸਟ: %s"
+
+msgctxt "IDS_OSD_HUE"
+msgid "Hue: %s°"
+msgstr "ਰੰਗਤ: %s°"
+
+msgctxt "IDS_OSD_SATURATION"
+msgid "Saturation: %s"
+msgstr "ਸੰਤ੍ਰਿਪਤਾ: %s"
+
+msgctxt "IDS_OSD_RESET_COLOR"
+msgid "Color settings restored"
+msgstr "ਰੰਗ ਸੈਟਿੰਗਾਂ ਮੁੜ-ਸਟੋਰ ਕੀਤੀਆਂ"
+
+msgctxt "IDS_OSD_NO_COLORCONTROL"
+msgid "Color control is not supported"
+msgstr "ਰੰਗ ਕੰਟਰੋਲ ਸਹਾਇਕ ਨਹੀਂ ਹਨ"
+
+msgctxt "IDS_BRIGHTNESS_INC"
+msgid "Brightness increase"
+msgstr "ਚਮਕ ਵਧਾਓ"
+
+msgctxt "IDS_LANG_PREF_EXAMPLE"
+msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
+msgstr "ਆਪਣੀ ਪਸੰਦ ਦੀ ਭਾਸ਼ਾ ਇੱਥੇ ਦਿਉ।\nਉਦਾਹਰਨ ਲਈ ਲਿਖੋ: \"eng pan jap\""
+
+msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
+msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
+msgstr ""
+
+msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
+msgid "&Blu-Ray playlists"
+msgstr "ਬਲੂ-ਰੇਅ ਪਲੇਅਲਿਸਟ(&B)"
+
+msgctxt "IDS_NAVIGATE_PLAYLIST"
+msgid "&Playlist"
+msgstr "ਪਲੇਅਲਿਸਟ(&P)"
+
+msgctxt "IDS_NAVIGATE_CHAPTERS"
+msgid "&Chapters"
+msgstr "ਚੈਪਟਰ(&C)"
+
+msgctxt "IDS_NAVIGATE_TITLES"
+msgid "&Titles"
+msgstr "ਟਾਈਟਲ(&T)"
+
+msgctxt "IDS_NAVIGATE_CHANNELS"
+msgid "&Channels"
+msgstr "ਚੈਨਲ(&C)"
+
+msgctxt "IDC_FASTSEEK_CHECK"
+msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
+msgstr ""
+
+msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
+msgid "Associate with all formats"
+msgstr "ਸਭ ਫਾਰਮੈਟਾਂ ਨਾਲ ਸੰਬੰਧਿਤ ਕਰੋ"
+
+msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
+msgid "Associate with video formats only"
+msgstr "ਕੇਵਲ ਵਿਡੀਓ ਫਾਰਮੈਟਾਂ ਨਾਲ ਸੰਬੰਧਿਤ ਕਰੋ"
+
+msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
+msgid "Associate with audio formats only"
+msgstr "ਕੇਵਲ ਆਡੀਓ ਫਾਰਮੈਟਾਂ ਨਾਲ ਹੀ ਸੰਬੰਧਿਤ ਕਰੋ"
+
+msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
+msgid "Clear all associations"
+msgstr "ਸਭ ਸੰਬੰਧ ਸਾਫ਼ ਕਰੋ"
+
+msgctxt "IDS_FILTER_SETTINGS_CAPTION"
+msgid "Settings"
+msgstr "ਸੈਟਿੰਗਾਂ"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "ਡਾਊਨਲੋਡ"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "ਸਕੋਰ"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "ਸਬ-ਟਾਈਟਲ ਡਾਊਨਲੋਡ ਕਰੋ"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "ਵਰਤੋਂਕਾਰ-ਨਾਂ"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "ਹਾਲਤ"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "...ਤਿਆਰ"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "...ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "ਅੱਪਲੋਡ ਕਰਨਾ ਪੂਰਾ ਹੋਇਆ।"
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "ਅੱਪਲੋਡ ਕਰਨਾ ਅਧੂਰਾ ਛੱਡਿਆ।"
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "ਅੱਪਲੋਡ ਕਰਨਾ ਫੇਲ੍ਹ ਹੈ।"
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "ਡਾਊਨਲੋਡ ਕਰੋ ਤੇ ਖੋਲ੍ਹੋ"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "ਸੈਟਅੱਪ"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "ਮੁੜ-ਸੈੱਟ ਕਰੋ"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "ਉੱਤੇ ਭੇਜੋ"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "ਹੇਠਾਂ ਭੇਜੋ"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "URL ਨੂੰ ਖੋਲ੍ਹੋ"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "ਭਾਸ਼ਾਵਾਂ"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr " [%s] \"%s\" ਡਾਊਨਲੋਡ ਕੀਤੇ"
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "ਸਬ-ਟਾਈਟਲ ਅੱਪਲੋਡ ਕਰੋ"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.pl.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.pl.dialogs.po
index fc01217a2..540020fda 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.pl.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.pl.dialogs.po
@@ -1,16 +1,17 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# kasper93, 2013-2014
-# M T <michtrz@gmail.com>, 2014
+# kasper93, 2013-2016
+# M T <michtrz@gmail.com>, 2014-2016
+# Rafał Urbanek <urbis92@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 16:00+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-11-06 16:57+0000\n"
"Last-Translator: kasper93\n"
-"Language-Team: Polish (http://www.transifex.com/projects/p/mpc-hc/language/pl/)\n"
+"Language-Team: Polish (http://www.transifex.com/mpc-hc/mpc-hc/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -110,15 +111,15 @@ msgid "Enable custom channel mapping"
msgstr "Własne mapowanie kanałów"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Konfiguracja dla "
+msgid "Speaker configuration for"
+msgstr "Konfiguracja dla"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "kanałów wejściowych:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Aby natychmiastowo wprowadzać zmiany, należy przytrzymać klawisz Shift."
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -190,8 +191,8 @@ msgid "About"
msgstr "O programie"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 szczegóły w pliku Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 szczegóły w pliku Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -422,12 +423,16 @@ msgid "time(s)"
msgstr "raz(y)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Powtarzanie:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Po zakończeniu odtwarzania"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Strumień wyjściowy"
+msgid "Default zoom"
+msgstr "Domyślny rozmiar"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -473,10 +478,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Automatycznie wczytuj dodatkowe ścieżki dźwiękowe"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Używaj wbudowanego renderera napisów"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Kontrola"
@@ -570,7 +571,7 @@ msgid "Warning"
msgstr "Ostrzeżenie"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Włączenie pełnoekranowego antyaliasingu w ustawieniach karty graficznej, nie polepszy jakości napisów, a zwiększy jedynie obciążenie CPU."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -677,17 +678,17 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Zapobiegaj minimalizacji w trybie pełnoekranowym na dodatkowych wyświetlaczach"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Korzystaj z możliwości paska zadań systemu Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Używaj rozszerzonych funkcji paska zadań"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Otwieraj kolejne pliki w folderze podczas nawigacji, gdy na liście odtwarzania znajduje się tylko jeden element"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "Używaj dymka z czasem:"
+msgid "Show time tooltip:"
+msgstr "Pokazuj dymek z czasem:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
@@ -1126,8 +1127,8 @@ msgid "Audio Renderer"
msgstr "Renderer dźwięku"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Ustawienia VMR-7/VMR-9 (Renderless) oraz EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Ustawienia VMR-9 (renderless) oraz EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1170,8 +1171,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Napisy *"
+msgid "Subtitles"
+msgstr "Napisy"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1187,12 @@ msgid "Rotation"
msgstr "Obracanie"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Zewnętrzne filtry (takie jak VSFilter) mogą wyświetlać napisy przy użyciu dowolnego renderera obrazu."
+msgid "Subtitle Renderer"
+msgstr "Renderer napisów"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Zapamiętuj skompilowane shadery"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1205,6 +1210,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Dostęp tylko z lokalnego komputera"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Włącz podgląd"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Wyświetlaj informację debugowania"
@@ -1230,17 +1239,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Obsługa interfejsu CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Dostępne napisy"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Pobierz i otwórz"
+msgid "Download subtitles"
+msgstr "Pobierz napisy"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Zastąp aktualnie załadowane napisy"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Pobierz"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Odśwież"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Przerwij"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opcje"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Wysili napisy"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Wyślij"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Przerwij"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opcje"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Zapisz jako..."
@@ -1278,8 +1315,8 @@ msgid "Enable automatic update check"
msgstr "Włącz automatyczne sprawdzanie aktualizacji"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Sprawdzanie aktualizacji co"
+msgid "Check every:"
+msgstr "Sprawdzaj co:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1542,16 +1579,28 @@ msgid "Reset"
msgstr "Domyślne"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Internetowa baza napisów"
+msgid "Online search, download and upload subtitles"
+msgstr "Wyszukiwanie, pobieranie oraz wysyłanie napisów"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Automatycznie pobieraj napisy, gdy nie znaleziono lokalnych"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Preferuj napisy dla niedosłyszący (gdy taka informacja jest udostępniona)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignoruj pliki zawierające którekolwiek z poniższych słów:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Adres internetowej bazy napisów:"
+msgid "Languages in order of preference:"
+msgstr "Języki w kolejności preferencji:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Testuj"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Automatycznie wysyłaj napisy po zakończeniu odtwarzania"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1653,6 +1702,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Domyślne"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Urządzenie"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Tryb wyłączny"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Zezwól na bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Opcje"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Włącz stereo crossfeed (dla słuchawek)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Odcięcie:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Poziom:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Porada"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "W celu zminimalizowania zniekształceń dźwięku, zalecane jest ustawienie głośności na poziomie około 85% podczas odtwarzania głośnych stratnie skompresowanych plików audio."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Jakość JPEG:"
@@ -1665,3 +1758,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Zgłaszanie usterek"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Przepraszamy, wygląda na to, że MPC-HC się zepsuł. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Wyślij nam raport błędu, aby pomóc nam go zdiagnozować oraz naprawić."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Dodatkowe informacje"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Adres e-mail:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Adres e-mail jest opcjonalny i zostanie użyty przez nasz zespół tylko jeżeli będzie potrzeba uzyskanie dodatkowych informacji na temat problemu."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Opis problemu (w języku angielskim):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Zrestartuj MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Zamknij MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.pl.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.pl.menus.po
index 360b18f78..8c24857c4 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.pl.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.pl.menus.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# kasper93, 2013-2014
+# kasper93, 2013-2016
+# Peter Korowacki <piotr.korowacki@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 16:31+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-05-29 12:07+0000\n"
"Last-Translator: kasper93\n"
-"Language-Team: Polish (http://www.transifex.com/projects/p/mpc-hc/language/pl/)\n"
+"Language-Team: Polish (http://www.transifex.com/mpc-hc/mpc-hc/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +65,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Zapisz &miniatury..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "W&czytaj napisy..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Zapisz &napisy..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Baza nap&isów"
+msgid "S&ubtitles"
+msgstr "Napisy"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Szukaj..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Wczytaj napisy..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&Wyślij..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "&Zapisz napisy..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Pobierz..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Pobierz napisy..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "W&yślij napisy..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -196,13 +193,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Test szarpania obrazu"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Statystyki odtwarzania"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "Wyświetlaj &statystyki"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Wyświetlaj aktualny &czas"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Pozostały czas odtwarzania"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Pokaż nazwę &pliku"
msgctxt "POPUP"
msgid "&Output Range"
@@ -404,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Dopasowanie na &zewnątrz"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "Zachowanie &proporcji"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "&Zmiana proporcji"
+msgid "&Aspect Ratio"
+msgstr "&Proporcje obrazu"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Domyślne"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Domyślne (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,6 +433,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Załóż &kwadratowe piksele (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Poprawianie różnicy proporcji &ekranu i pulpitu"
@@ -529,9 +530,25 @@ msgid "&Stop"
msgstr "&Zatrzymaj"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "&Następna klatka"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Powtarzanie"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "&Zawsze"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Plik"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Lista odtwarzania"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "Z&mniejsz tempo"
@@ -553,16 +570,16 @@ msgid "S&haders"
msgstr "Cieniowanie (&Shadery)"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "Ścieżka &dźwiękowa"
+msgid "&Audio Track"
+msgstr "Ścieżka &audio"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "N&apisy"
+msgid "Su&btitle Track"
+msgstr "Ścieżka &napisów"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Strum&ień wideo"
+msgid "Vide&o Track"
+msgstr "Ścieżka w&ideo"
msgctxt "POPUP"
msgid "&Volume"
@@ -584,7 +601,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "P&o zakończeniu"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Nic nie &rób"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Otwórz &następny plik w folderze"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Wyłącz &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Zamknij program"
@@ -608,10 +637,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Za&blokuj komputer"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Wyłącz &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "P&rzejdź"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.pl.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.pl.strings.po
index 062d30373..0c7be54a8 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.pl.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.pl.strings.po
@@ -1,21 +1,23 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# kasper93, 2013-2014
-# M T <michtrz@gmail.com>, 2013-2014
+# kasper93, 2013-2016
+# M T <michtrz@gmail.com>, 2013-2017
+# Peter Korowacki <piotr.korowacki@gmail.com>, 2016
+# Rafał Urbanek <urbis92@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-03 12:56+0000\n"
-"Last-Translator: kasper93\n"
-"Language-Team: Polish (http://www.transifex.com/projects/p/mpc-hc/language/pl/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-09 15:45+0000\n"
+"Last-Translator: M T <michtrz@gmail.com>\n"
+"Language-Team: Polish (http://www.transifex.com/mpc-hc/mpc-hc/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
msgctxt "IDS_INFOBAR_LOCATION"
msgid "Location"
@@ -61,10 +63,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Właściwości"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Plik"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Domyślny styl"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Lista odtwarzania"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Pliki"
@@ -117,6 +127,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Jeśli cel renderowania nie został określony, napisy SSA/ASS będą renderowane w stosunku do klatki obrazu, natomiast wszystkie inne napisy tekstowe będą renderowane w stosunku do okna."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Tryb Powtarzania: Lista odtwarzania"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Tryb Powtarzania: Plik"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Powtarzanie Ciągłe: Włączone"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Powtarzanie Ciągłe: Wyłączone"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Odtwarzanie ciągłe"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Nigdy (najszybsza opcja)"
@@ -326,11 +356,11 @@ msgid "On/Off"
msgstr "Wł./Wył."
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
+msgid "From (FPS)"
msgstr "Od kl./s"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr "Do kl./s"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -465,6 +495,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Odtwarzanie::Shadery"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Zasoby"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Różne"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Odtwarzanie::Przechwytywanie"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Odtwarzanie::Ustawienia Sync"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Odtwarzanie::Pełny ekran"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Filtry wewnętrzne::Renderer dźwięku"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Obróbka dźwięku"
@@ -489,18 +547,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (windowed)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (windowed)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderless)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (renderless)"
@@ -553,34 +603,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Program::Interfejs internetowy"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Napisy::Baza napisów"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Zasoby"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Różne"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Odtwarzanie::Przechwytywanie"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Odtwarzanie::Ustawienia Sync"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Odtwarzanie::Pełny ekran"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Szczegóły"
@@ -601,17 +623,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Renderuje zawsze w trybie nakładki. Obsługuje formaty YUV, ale bez uprzedniej konwersji przestrzeni kolorów do RGB. Najszybsza ze wszystkich metoda renderowania i jedyna pewna, dla której uzyskać można powielanie obrazu w trybie pełnego ekranu do wyjścia telewizyjnego."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Domyślny renderer obrazu dla systemu Windows XP. Bardzo stabilny i tylko trochę wolniejszy od „Overlay mixer”. Używa DirectDraw i pracuje w trybie nakładki, jeśli istnieje taka możliwość."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Dostępny tylko gdy w systemie jest zainstalowany pakiet DirectX 9. Renderer ma takie same możliwości co „VMR-7 (windowed)”, ale nie używa trybu nakładki, przez co może być trochę wolniejszy."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Renderuje przy użyciu tego samego filtra co „VMR-7 (windowed)”, lecz rozszerzono go o obsługę napisów. Nie obsługuje powielania obrazu w trybie nakładki. Sugerowana jest 24-bitowa głębia kolorów pulpitu."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Dostępny tylko gdy w systemie jest zainstalowany DirectX 9. Bardzo stabilne, ale nigdy nie używa trybu nakładki przez co może być trochę wolniejszy niż Overlay mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -622,8 +636,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Działa tak samo jak „VMR-9 (renderless)”, lecz używa prawdziwego dwuprzebiegowego skalowania bicubic."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Podpina się do dowolnego typu video i wysyła przychodzące próbki donikąd. Użycie wskazane, gdy strumień wideo nie musi być wyświetlany, dzięki czemu można zmniejszyć obciążenie CPU."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Podpina się do dowolnego typu wideo i wysyła przychodzące próbki donikąd. Użycie wskazane, gdy strumień wideo nie musi być wyświetlany, dzięki czemu można zmniejszyć obciążenie CPU."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -649,10 +663,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Renderuje pliki formatu RealMedia przy użyciu natywnego filtra. Obsługuje skrypty SMIL i czasem interakcję. Używa DirectDraw i pracuje w trybie nakładki, jeśli istnieje taka możliwość."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Renderuje strumień wyjściowy modułu RealMedia przy użyciu filtra „VMR-7 (renderless)”, który jest częścią pakietu DirectX 7."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Renderuje strumień wyjściowy modułu RealMedia przy użyciu filtra „VMR-9 (renderless)”, który jest częścią pakietu DirectX 9."
@@ -661,10 +671,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Renderuje pliku formatu QuickTime przy użyciu natywnego filtra. Nieznacznie zwalnia, gdy zmieniono rozmiar okna bądź jest ono częściowo zakryte. Jeżeli tryb nakładki jest niedostępny, najczęściej przełącza na GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Renderuje strumień wyjściowy modułu QuickTime przy użyciu filtra „VMR-7 (renderless)”, który jest częścią pakietu DirectX 7."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Renderuje strumień wyjściowy modułu QuickTime przy użyciu filtra „VMR-9 (renderless)”, który jest częścią pakietu DirectX 9."
@@ -673,22 +679,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Alokuje płaszczyznę wideo jako normalną powierzchnię ekranową."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Renderer nie jest w pełni funkcjonalny, zaleca się nie używanie."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Zgłaszanie błędu"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "Program nieoczekiwanie zakończył pracę, niestety aktualnie używana wersja została skompilowana bez informacji potrzebnych do analizy błędu.\nJeżeli chcesz zgłosić ten błąd prosimy spróbować wywołać go używając oficjalnej wersji MPC-HC.\n\nChcesz odwiedzić stronę pobierania teraz?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Zwykła poza ekranowa płaska płaszczyzna"
@@ -741,9 +735,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (uncompressed)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Wbudowany renderer dźwięku"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -757,9 +751,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Aby wyświetlić zasoby w przeglądarce należy włączyć interfejs internetowy.\n\nUżyj opcji „Zapisz jako” jeżeli chcesz tylko zapisać te informacje."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Pobierz napisy"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Pobierz napisy..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Wyślij napisy..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -790,7 +788,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Nie można znaleźć wszystkich wolumenów archiwum"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Alokuje płaszczyznę wideo jako teksturę, ale do kopiowania i rozciągania jej w tle bufora ramki nadal używa funkcji dwuwymiarowych. Wymaga karty graficznej, która potrafi wyświetlać 32-bitowy obraz RGBA, tekstury o rozmiarze innym niż potęga dwóch i rozdzielczości odpowiadającej odtwarzanemu wideo."
msgctxt "IDC_TEXTURESURF3D"
@@ -817,6 +815,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Redukuje rwanie obrazu poprzez nadpisanie domyślnego algorytmu synchronizacji pionowej zaimplementowanego w D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Skanowanie"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Napisy nie zostały wczytane lub wybrano niewspierany renderer obrazu."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Przechowuje skompilowane shadery w celu przyspieszenia czasu ładowania plików wideo."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Otwiera pliki VTS_xx_0.ifo i wczytuje w całości pliki kontenera VOB VTS_xx_x.vob"
@@ -889,7 +899,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Wycisz"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Wyłącz wyciszenie"
@@ -954,11 +964,11 @@ msgid "&Organize Favorites..."
msgstr "&Edytuj..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Losowe odtwarzanie"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Otwórz lokalizację pliku"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1042,7 +1052,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Przeskaluj do formatu ultra-szerokoekranowego,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Ukryj w trybie pełnoekranowym"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1230,7 +1240,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Dodaj pliki z folderu"
msgctxt "IDS_HW_INDICATOR"
@@ -1337,6 +1347,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<nie określono>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Oglądaj"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "W górę"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "W dół"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sortuj wg LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Usuń wszystkie"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Czy na pewno chcesz usunąć wszystkie kanały z listy?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Brak dostępnych informacji"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Proszę czekać, analiza w toku..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Włącz logowanie do pliku (wymaga restartu)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Pozostały czas"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Wysoka precyzja"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Po zakończeniu odtwarzania: Przewiń plik do początku"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Po zakończeniu odtwarzania: Zamknij plik"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC napotkał problem podczas ładowania. Z Twoją pomocą możliwe będzie naprawienie tego problemu.\n\nCzy chcesz zgłosić problem?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Wprowadź dodatnią wartość jeżeli dźwięk wyprzedza obraz lub ujemną gdy dźwięk nie nadąża za obrazem."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Podgląd jest obecnie wyłączony. Można włączyć go w opcjach MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Ta opcja może zostać użyta to zdalnego podglądu plików multimedialnych. Używaj jej tylko w prywatnej oraz zabezpieczonej sieci.\n\nCzy na pewno chcesz włączyć tę opcję?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Wbudowany renderer napisów"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Otwórz urządzenie"
@@ -1357,13 +1443,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Obraz zapisano pomyślnie"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Wczytaj napisy"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Wczytaj napisy..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Zapisz napisy"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Zapisz napisy..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,11 +1472,11 @@ msgid "Stop"
msgstr "Zatrzymaj odtwarzanie"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Następna klatka"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Poprzednia klatka"
msgctxt "IDS_AG_GO_TO"
@@ -1490,8 +1576,8 @@ msgid "Thumbnails saved successfully"
msgstr "Poprawnie zapisano miniaturki"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Strum&ień wideo"
+msgid "Vide&o Track"
+msgstr "Ścieżka w&ideo"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1538,11 +1624,11 @@ msgid "Reset Rate"
msgstr "Zwykłe tempo odtwarzania"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Zwiększ przesunięcie dźwięku o 10 ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Zmniejsz przesunięcie dźwięku o 10 ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1613,14 +1699,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Przesuń napisy w prawo (+100ms)"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Statystyki odtwarzania"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Skocz do początku"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Pokaż nazwę pliku"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Odtwarzanie DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Odtwarzanie BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Wyświetlaj statystyki renderera"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Resetuj statystyki renderera"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Napisy::Różne"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Ukryj obramowanie"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Tylko &ramka"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Pokaż pasek tytułu i menu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Ukryj &menu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Zaawansowane"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Widok minimalny"
@@ -1686,8 +1812,8 @@ msgid "PnS Dec Height"
msgstr "Zmniejsz wysokość obrazu"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Pobieranie napisów, proszę czekać."
+msgid "Downloading [%s] \"%s\""
+msgstr "Pobieranie [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1698,7 +1824,7 @@ msgid "No subtitles found."
msgstr "Nie znaleziono napisów."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "Dostępnych napisów: %d"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
@@ -1854,12 +1980,12 @@ msgid "Boss key"
msgstr "„Klawisz szefa” - natychmiast ukrywa odtwarzacz"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Krótkie menu programu"
+msgid "Player Menu"
+msgstr "Menu odtwarzacza"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Długie menu programu"
+msgid "Player Menu (full)"
+msgstr "Menu odtwarzacza (pełne)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1870,20 +1996,20 @@ msgid "Options"
msgstr "Ustawienia"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Następna ścieżka dźwiękowa"
+msgid "Next Audio Track"
+msgstr "Następna ścieżka Audio"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Poprzednia ścieżka dźwiękowa"
+msgid "Prev Audio Track"
+msgstr "Poprzednia ścieżka Audio"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Następne napisy"
+msgid "Next Subtitle Track"
+msgstr "Następna ścieżka napisów"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Poprzednie napisy"
+msgid "Prev Subtitle Track"
+msgstr "Poprzednia ścieżka napisów"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1893,22 +2019,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Wczytaj ponownie napisy"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "OGM: Następna ścieżka dźwiękowa"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "OGM: Poprzednia ścieżka dźwiękowa"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "OGM: Następne napisy"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "OGM: Poprzednie napisy"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "DVD: Następna kamera"
@@ -1918,28 +2028,28 @@ msgid "Prev Angle (DVD)"
msgstr "DVD: Poprzednia kamera"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "DVD: Następna ścieżka dźwiękowa"
+msgid "Next Audio Track (DVD)"
+msgstr "Następna ścieżka dźwiękowa (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "DVD: Poprzednia ścieżka dźwiękowa"
+msgid "Prev Audio Track (DVD)"
+msgstr "Poprzednia ścieżka dźwiękowa (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "DVD: Następne napisy"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Następna ścieżka napisów (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "DVD: Poprzednie napisy"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Poprzednia ścieżka napisów (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "DVD: Przełącz wyświetlanie napisów"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Pozostały czas odtwarzania"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Wyświetlaj aktualny czas"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2075,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Zakodowany"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Tak"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Nie"
@@ -2026,11 +2136,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Nośnik: %02lu/%02lu, tytuł: %02lu/%02lu, rozdział: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Kamera: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %u Hz %d bitów %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2121,14 +2231,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Szerokość obrazu"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "Adres internetowy jest poprawny."
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Niezgodna wersja protokołu. Proszę zaktualizować program lub wybrać inny adres."
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Proporcje obrazu"
@@ -2138,19 +2240,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", wszystkich: %ld, porzuconych: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", rozmiar: %I64d KB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", rozmiar: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", wolne: %I64d KB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", wolne: %I64d MB"
msgctxt "IDS_MAINFRM_42"
@@ -2222,8 +2324,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Miniatury są zbyt małe, nie można utworzyć pliku.\n\nSpróbuj zmniejszyć liczbę miniatur lub zwiększyć rozmiar całości."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Aby wczytać napisy, należy ponownie otworzyć plik, zmieniając wcześniej filtr renderujący na jeden z poniższych:\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR lub Haali\n- RealMedia: specjalny filtr renderujący dla RealMedia albo otwarcie za pośrednictwem DirectShow\n- QuickTime: renderer DX7 lub DX9 dla QuickTime\n- ShockWave: brak"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Aby załadować napisy musisz zmienić renderer obrazu, a następnie otworzyć ponownie plik.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Specjalny renderer dla RealMedia lub otwarcie za pośrednictwem DirectShow\n- QuickTime: DX7 lub DX9 renderer dla QuickTime\n- ShockWave: brak"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2234,11 +2336,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Proporcje obrazu: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Proporcje obrazu: domyślne"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Proporcje obrazu: Domyślne (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Przesunięcie dźwięku: %I64d ms"
msgctxt "IDS_AG_CHAPTER"
@@ -2250,8 +2352,8 @@ msgid "Out of memory"
msgstr "Brak wolnej pamięci"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Błąd: wymagany Flash player dla IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Błąd: wymagany Adobe Flash Player dla przeglądarki Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2273,10 +2375,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Nie udało się renderować pliku"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Niepoprawny adres internetowy. Nie można odnaleźć bazy napisów."
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Rozdział: "
@@ -2297,14 +2395,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Bieżący"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "Program nieoczekiwanie zakończył pracę. Aby pomóc naprawić ten problem, proszę wysłać plik „%s” na platformę zgłaszania błędów.\n\nChcesz otworzyć folder zawierający zrzut pamięci oraz odwiedzić teraz stronę, aby zgłosić błąd?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Nie udało się zapisać informacji o debugowaniu do pliku „%s” (błąd %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Proszę wybrać folder"
@@ -2322,7 +2412,7 @@ msgid "Toggle Caption&Menu"
msgstr "Przełącz widoczność paska tytułu i menu"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Przełącz widoczność paska postępu"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2478,8 +2568,8 @@ msgid "Volume boost Max"
msgstr "Maksymalne wzmocnienie głośności"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Użycie: mpc-hc.exe „ścieżka” [parametry]\n\n„ścieżka”\t\tOkreśla plik lub folder do otwarcia (symbole\n\t\twieloznaczne dozwolone, „-” oznacza\n\t\tstandardowe wejście)\n/dub „plik”\tOtwiera dodatkową ścieżkę dźwiękową\n/dubdelay „plik”\tOtwiera dodatkową ścieżkę dźwiękową opóźnioną\n\t\to XX ms jeśli nazwa pliku zawiera ciąg\n\t\t„DELAY XXms”\n/d3dfs\t\tUruchamia odtwarzanie pełnoekranowe w D3D\n/sub „plik”\tWczytuje dodatkowe napisy\n/filter „plik”\tWczytuje filtr DirectShow z biblioteki dll (symbole\n\t\twieloznaczne dozwolone)\n/dvd\t\tOtwiera płytę DVD, „ścieżka” wskazuje folder DVD\n\t\t(opcjonalnie)\n/dvdpos T#C\tUruchamia odtwarzanie tytułu T, rozdział C\n/dvdpos T#hh:mm\tUruchamia odtwarzanie tytułu T, pozycja\n\t\thh:mm:ss\n/cd\t\tOtwiera wszystkie ścieżki CD-Audio lub (s)vcd\n\t\t„Ścieżka” wskazuje literę napędu (opcjonalnie)\n/device\t\tOpen the default video device\n/open\t\tOtwiera plik, nie rozpoczyna odtwarzania\n/play\t\tRozpoczyna odtwarzanie po uruchomieniu\n\t\tprogramu\n/close\t\tKończy program po zakończeniu odtwarzania\n\t\t(działa z parametrem /play)\n/shutdown\tZamyka system operacyjny po zakończeniu\n\t\todtwarzania\n/fullscreen\tUruchamia w trybie pełnego ekranu\n/minimized\tUruchamia zminimalizowany\n/new\t\tUruchamia nowe wystąpienie programu\n/add\t\tDodaje „ścieżkę” do listy odtwarzania. Można\n\t\tłączyć z parametrami /open i /play\n/regvid\t\tRejestruje formaty wideo\n/regaud\t\tRejestruje formaty dźwiękowe\n/regpl\t\tRejestruje formaty list odtwarzania\n/regall\t\tRejestruje wszystkie obsługiwane formaty\n/unregall\t\tWyrejestrowuje wszystkie formaty\n/start ms\t\tRozpoczyna odtwarzanie od określonego\n\t\tpołożenia wyrażonego w ms\n/startpos hh:mm:ss\tRozpoczyna odtwarzanie od określonego\n\t\tpołożenia wyrażonego w gg:mm:ss\n/fixedsize x,y\tOkreśla rozmiar okna programu\n/monitor N\tUruchamia na N-tym ekranie, gdzie numer\n\t\tpierwszego ekranu to 1\n/audiorenderer N\tRenderuje dźwięk za pomocą sterownika N,\n\t\tgdzie numer pierwszego sterownika to 1\n\t\t(ustawienia „Strumień wyjściowy”)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tPrzywraca ustawienia domyślne\n/help /h /?\tWyświetla listę parametrów wiersza poleceń\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Użycie: mpc-hc.exe „ścieżka” [parametry]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2565,14 +2655,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Włącz wszystkie filtry"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Skanowanie"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Napisy nie zostały wczytane lub wybrano niewspierany renderer obrazu."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Autor nieznany. Prosimy o kontakt, jeśli jesteś twórcą tego logo."
@@ -2661,40 +2743,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Górny tylny prawy"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Resetuj statystyki wyświetlania"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Napisy::Różne"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Ukryj obramowanie"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Tylko ramka"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Pokaż pasek tytułu i menu"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Ukryj &menu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Zaawansowane"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Ponad paskiem postępu"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Poniżej paska postępu"
msgctxt "IDS_VIDEO_STREAM"
@@ -2862,8 +2916,8 @@ msgid "Other Audio"
msgstr "Inne audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2927,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3011,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Lista odtwarzania"
@@ -2977,18 +3035,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Proporcje"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Używaj WASAPI (reset odtwarzania)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Wycisz podczas przewijania"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Urządzenie dźwiękowe:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "Synchronizacja pionowa: włączona"
@@ -3277,6 +3323,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Utrzymywanie głośności: wyłączone"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bajtów"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3334,7 +3384,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Błąd podczas przetwarzania wprowadzonej liczby klatek na sekundę!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Nie można przejść o klatkę do przodu, proszę spróbować użyć innego renderera obrazu."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3353,10 +3403,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "Funkcje 'Zapisz obraz' oraz 'Zapisz miniatury' nie działają w trybie nakładki (Overlay Mixer).\nProszę wybrać inny renderer obrazu w opcjach strumienia wyjściowego oraz otworzyć plik ponownie."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Nie można połączyć się z internetową bazą napisów."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Chcesz aktywować edytor EDL?"
@@ -3425,34 +3471,42 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Musisz zastosować nowe ustawienia zanim je przetestujesz."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
-msgstr "Po zakończeniu odtwarzania: Zakończenie programu"
+msgstr "Po zakończeniu odtwarzania: Zamknij program"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
-msgstr "Po zakończeniu odtwarzania: Przejście w stan wstrzymania"
+msgstr "Po zakończeniu odtwarzania: Przejdź w stan wstrzymania"
msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
msgid "After Playback: Hibernate"
-msgstr "Po zakończeniu odtwarzania: Przejście w stan hibernacji"
+msgstr "Po zakończeniu odtwarzania: Przejdź w stan hibernacji"
msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
msgid "After Playback: Shutdown"
-msgstr "Po zakończeniu odtwarzania: Wyłączenie komputera"
+msgstr "Po zakończeniu odtwarzania: Wyłącz komputer"
msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
msgid "After Playback: Log Off"
-msgstr "Po zakończeniu odtwarzania: Wylogowanie użytkownika"
+msgstr "Po zakończeniu odtwarzania: Wyloguj użytkownika"
msgctxt "IDS_AFTERPLAYBACK_LOCK"
msgid "After Playback: Lock"
-msgstr "Po zakończeniu odtwarzania: Zablokowanie komputera"
+msgstr "Po zakończeniu odtwarzania: Zablokuj komputer"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Po zakończeniu odtwarzania: Wyłącz monitor"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Po zakończeniu odtwarzania: Odtworzenie następnego pliku z folderu"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "After Playback: Nic nie rób"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Jasność: %s"
@@ -3533,3 +3587,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Ustawienia"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Dostawca"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Dla niedosłyszących"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Pobrania"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Punkty"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Wyszukiwanie napisów w internetowej bazie nie powiodło się."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Wyszukiwanie napisów w internetowej bazie przerwane."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Wyszukiwanie napisów w internetowej bazie zakończone, znaleziono %d napisów."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Wyszukiwanie napisów w internetowej bazie zakończone, nie znaleziono napisów."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Pobierz napisy"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Wyszukiwanie napisów, proszę czekać..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Przerywanie wyszukiwania napisów..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Użytkownik:"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Status"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Gotowe..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Niezaimplementowane."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Wysyłanie..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Napisy wysłane poprawnie."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Wysyłanie napisów nie powiodło się."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Wysyłanie napisów przerwane."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Napisy już istnieją."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Wysyłanie napisów, proszę czekać..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Wysyłanie zakończone."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Wysyłanie przerwane."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Wysyłanie nie powiodło się."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Pobierz i otwórz"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Opcje"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Domyślne"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "W górę"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "W dół"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Otwórz URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Język"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "Błąd: Nie można nawiązać połączenia z Internetem."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Wprowadź poświadczenia dla strony"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Wprowadź poświadczenie użytkownika"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Proporcje obrazu: Załóż kwadratowe piksele (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Pobrano [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Wyślij napisy"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Czy na pewno chcesz wysłać napisy \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Pobieranie obsługiwanych języków..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Nie udało się zalogować na \"%S\" z nazwą użytkownika \"%S\".\n\nProszę podać poprawną nazwę użytkownika i hasło lub zresetować dane aby zalogować się jako użytkownik anonimowy."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Automatyczne wyszukiwanie i pobieranie zostanie wyłączone dla wszystkich plików multimedialnych, których ścieżka zawiera poniższe wzorce.\nNa przykład, wpisz: \"prywatny folder\\filmy|praca\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "„ścieżka”\t\tOkreśla plik lub folder do otworzenia\n\t\t(symbole wieloznaczne dozwolone, „-” oznacza standardowe wejście)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub „plik”\tOtwiera dodatkową ścieżkę dźwiękową"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay „plik”\tOtwiera dodatkową ścieżkę dźwiękową opóźnioną o XX ms\n\t\t(jeśli nazwa pliku zawiera ciąg „...DELAY XXms...”)"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tUruchamia odtwarzanie pełnoekranowe w D3D"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub „plik”\t\tWczytuje dodatkowe napisy"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter „plik”\tWczytuje filtr DirectShow z biblioteki dll (symbole wieloznaczne dozwolone)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tOtwiera płytę DVD, „ścieżka” wskazuje folder DVD (opcjonalnie)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tUruchamia odtwarzanie tytułu T, rozdział C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tUruchamia odtwarzanie tytułu T, pozycja P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tOtwiera wszystkie ścieżki CD-Audio lub (S)VCD\n\t\t„ścieżka” wskazuje literę napędu (opcjonalnie)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tOtwiera domyślne urządzenie wideo"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tOtwiera plik, nie rozpoczyna odtwarzania"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tRozpoczyna odtwarzanie po uruchomieniu programu"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tZamyka program po zakończeniu odtwarzania (działa tylko z parametrem /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tZamyka system operacyjny po zakończeniu odtwarzania"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tWprowadza system w stan wstrzymania po zakończeniu odtwarzania"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tWprowadza system w stan hibernacji po zakończeniu odtwarzania"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tWyglogowuje użytownika po zakończeniu odtwarzania"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tBlokuje stacje roboczą po zakończeniu odtwarzania"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tWyłącza monitor po zakończeniu odtwarzania"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tOtwiera następny plik w folderze po zakończeniu odtwarzania"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tUruchamia w trybie pełnego ekranu"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tUruchamia zminimalizowany"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tUruchamia nowe wystąpienie programu"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tDodaje „ścieżkę” do listy odtwarzania. Można łączyć z parametrami /open i /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tMiesza listę odtwarzania"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tRejestruje formaty wideo"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tRejestruje formaty dźwiękowe"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tRejestruje formaty list odtwarzania"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tRejestruje wszystkie obsługiwane formaty"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tWyrejestrowuje wszystkie formaty"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tRozpoczyna odtwarzanie od określonego położenia wyrażonego w ms"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tRozpoczyna odtwarzanie od określonego położenia wyrażonego w gg:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize x,y\tUstawia rozmiar okna programu"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tUruchamia na N-tym ekranie, gdzie numer pierwszego ekranu to 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tUstawia N-ty renderer dźwięku. N rozpoczyna się od 1 (ustawienia „Strumień wyjściowy”)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset „Pr”\tWybieranie konkretnego profilu shaderów"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns „name”\tWybieranie konkretnego profilu Pan&Scan"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tPrzypisz ponownie ikony do plików"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tOtwiera MPC-HC w tle"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tUruchamia interfejs internetowy na określonym porcie"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tWyświetla informacje debugowania w OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tWyłącza raportowanie usterek"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave „hWnd”\tUżyj MPC-HC jako okno zależne"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu „index”\tUstawia numer urządzenia graficznego użytego do sprzętowego odtwarzania.\n\t\tDostępne tylko dla CUVID oraz DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tPrzywraca ustawienia domyślne"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tWyświetla listę parametrów wiersza poleceń"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Wartość progowa dla które napisy zostaną automatycznie pobrane. Wyższa wartość pozwoli na uzyskanie lepszych napisów dla danej wersji filmu, natomiast niższe wartości mogą skutkować załadowania nieprawidłowych napisów. Nie ma jednej optymalnej wartości, wybierz taką która odpowiada najlepiej twoim potrzebom."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Opóźnienie dźwięku (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Rozmiar domyślnych przycisków sterowania w pikselach."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Używaj starszego paska narzędzi zamiast nowego wektorowego."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Kopiuj URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.dialogs.po
index 26df3e619..4e6e34046 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.dialogs.po
@@ -1,21 +1,27 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Alex Luís Silva <alex.mooca@hotmail.com>, 2014-2016
# Alex Luís Silva <alex.mooca@hotmail.com>, 2014
-# Alex Luís Silva <alex.mooca@hotmail.com>, 2014
-# Roger Filipe <lipe2000@outlook.com>, 2013-2014
+# Charles Fernando da Silva <eu.charles@hotmail.com>, 2015
+# Edgar Peres <edgarvperes@gmail.com>, 2015
+# Erick Simões <erick.simoes@yahoo.com.br>, 2015
+# Everton Leite <etcholeite@gmail.com>, 2016
+# Gustavo Cegolini Togni <gustavotogni@gmail.com>, 2015
+# Roger Filipe Barros <lipe2000@outlook.com>, 2013-2014
# Luis Henrique <henriqlh@gmail.com>, 2014
+# Michael Moser <michi.celin@gmail.com>, 2016
# mvpetri <mvpetri@gmail.com>, 2014
# Raphael Mendonça, 2014
-# Roger Filipe <lipe2000@outlook.com>, 2014
+# Roger Filipe Barros <lipe2000@outlook.com>, 2014,2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-10-02 02:00+0000\n"
-"Last-Translator: Alex Luís Silva <alex.mooca@hotmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/mpc-hc/language/pt_BR/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-12-22 21:43+0000\n"
+"Last-Translator: Roger Filipe Barros <lipe2000@outlook.com>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/mpc-hc/mpc-hc/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -115,7 +121,7 @@ msgid "Enable custom channel mapping"
msgstr "Ativar o mapeamento de canais personalizado"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Ajustes dos alto-falantes p/"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -123,7 +129,7 @@ msgid "input channels:"
msgstr "canais de entrada"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Pressione \"Shift\" ao clicar em algo para aplicar as alterações imediatamente."
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -195,8 +201,8 @@ msgid "About"
msgstr "Sobre"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 - veja o arquivo Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 - veja o arquivo Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -204,7 +210,7 @@ msgstr "Este programa é gratuito e foi licenciado sob os termos da Licença Ger
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Traduzido para o Português por Roger Filipe"
+msgstr "Traduzido para o Português por Roger Filipe Barros"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
@@ -420,19 +426,23 @@ msgstr "Reproduzir"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
msgid "Repeat forever"
-msgstr "Repetir sempre"
+msgstr "Repetir para sempre"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
msgid "time(s)"
msgstr "vez (vezes)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Modo de repetição:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Após reprodução"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Saída"
+msgid "Default zoom"
+msgstr "Zoom padrão"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -478,10 +488,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Autocarregamento de áudio"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Use o renderizador interno de legendas"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Controle"
@@ -575,7 +581,7 @@ msgid "Warning"
msgstr "Aviso"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Se você tiver antisserrilhamento forçado ativado nas configurações de sua placa de vídeo, é bem provável que sua CPU não conseguirá exibir as legendas em tempo real."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -682,16 +688,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Evitar MINIMIZAR quando estiver em tela cheia ou em monitor não-padrão"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Usar os recursos do Windows 7 na barra de tarefas"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Usar recursos da barra de tarefas aprimorada"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Ir para o próximo arquivo ao clicar nos botões de Pular mesmo quando houver apenas um item na lista de reprodução"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Exibir tempo decorrido na barra de progresso:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1004,7 +1010,7 @@ msgstr "Escala (y,%)"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Border Style"
-msgstr "Estilo de Bordas"
+msgstr "Estilo de bordas"
msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
msgid "Outline"
@@ -1080,11 +1086,11 @@ msgstr "Se preferir utilizar filtros externos, desative os filtros internos aqui
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Source Filters"
-msgstr "Filtros Fonte"
+msgstr "Filtros fonte"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Transform Filters"
-msgstr "Filtros de Transformação"
+msgstr "Filtros de transformação"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Internal LAV Filters settings"
@@ -1096,11 +1102,11 @@ msgstr "Divisor"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
msgid "Video decoder"
-msgstr "Decodificador Vídeo"
+msgstr "Decodificador vídeo"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
msgid "Audio decoder"
-msgstr "Decodificador Áudio"
+msgstr "Decodificador áudio"
msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
msgid "Internal:"
@@ -1131,8 +1137,8 @@ msgid "Audio Renderer"
msgstr "Áudio DirectShow"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (sem render) e ajustes EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (sem render) e ajustes EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1175,8 +1181,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Legendas *"
+msgid "Subtitles"
+msgstr "Legendas"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1191,8 +1197,12 @@ msgid "Rotation"
msgstr "Rotação"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Filtros externos (como o VSFilter) podem exibir legendas com todos os Video Renderers."
+msgid "Subtitle Renderer"
+msgstr "Renderizar legendas"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Shaders compilados em cache"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1210,6 +1220,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Permitir acesso somente do host local"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Ativar pré-visualização"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Imprimir informações de depuração"
@@ -1235,17 +1249,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Gerenciadores de CGI: (.ext1=caminho1;.ext2=caminho2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Legendas disponíveis online"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Baixar e abrir"
+msgid "Download subtitles"
+msgstr "Baixar legendas"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Substituir legendas carregadas atualmente"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Baixar"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Atualizar"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Abortar"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opções"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Enviar legendas"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Enviar"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Abortar"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opções"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Salvar Como..."
@@ -1283,8 +1325,8 @@ msgid "Enable automatic update check"
msgstr "Ativar a checagem de atualizações"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Intervalo entre checagens:"
+msgid "Check every:"
+msgstr "Verificar a cada:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1352,7 +1394,7 @@ msgstr "Use um offset"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Default Device"
-msgstr "Dispositivo Padrão"
+msgstr "Dispositivo padrão"
msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
msgid "Analog"
@@ -1384,7 +1426,7 @@ msgstr "Configurações digitais (BDA)"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
msgid "Network Provider"
-msgstr "Provedor de Sinal"
+msgstr "Provedor de rede"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
msgid "Tuner"
@@ -1547,28 +1589,40 @@ msgid "Reset"
msgstr "Resetar"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Banco de dados online"
+msgid "Online search, download and upload subtitles"
+msgstr "Procurar, baixar e enviar legendas online"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Buscar e baixar legendas automaticamente caso não exista nenhuma"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Dar preferência à legendas adaptadas para deficientes auditivos (quando for marcada como tal pelo provedor da legenda)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignorar arquivos que contenham qualquer uma da(s) seguinte(s) palavra(s):"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Digite a URL do banco de dados de legendas:"
+msgid "Languages in order of preference:"
+msgstr "Idiomas em ordem de preferência:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Testar"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Enviar automaticamente as legendas ativas no fim da reprodução dos vídeos"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
-msgstr "Verificação de Atualizações"
+msgstr "Verificação de atualizações"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
msgid "&Download now"
-msgstr "&Baixe agora"
+msgstr "Baixar agora"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
msgid "Remind me &later"
-msgstr "Lembre-me &depois"
+msgstr "Lembre-me depois"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
msgid "&Ignore this update"
@@ -1620,11 +1674,11 @@ msgstr "Ativar pós-redimensionamento de shaders"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
-msgstr "Depurar Shaders"
+msgstr "Depurar shaders"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
msgid "Debug Information"
-msgstr "Informação de Depuração"
+msgstr "Informação de depuração"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
msgid "PS 2.0"
@@ -1658,6 +1712,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Padrão"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Dispositivo"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Modo exclusivo"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Permitir bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Opções"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Habilitar crossfeed estéreo (para fones de ouvido)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Corte:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Nível:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Aviso"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Para minimizar a distorção de áudio, é recomendado manter o volume do reprodutor em 85% ao reproduzir áudio comprimido com perda de dados."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Qualidade JPEG:"
@@ -1670,3 +1768,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Relatório de falha"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Lamentamos, parece que o MPC-HC teve problemas. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Envie-nos um relatório de erros para ajudar-nos a diagnosticar e corrigir o problema."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Informação opcional"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "E-mail:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "O seu endereço de e-mail é opcional e só será usado se os desenvolvedores precisarem entrar em contato para mais informações."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Descrição do problema (usar somente Inglês):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Reiniciar o MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Sair do MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.menus.po
index e9412ea92..86b736311 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.menus.po
@@ -1,17 +1,19 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Alex Luís Silva <alex.mooca@hotmail.com>, 2014-2016
# Alex Luís Silva <alex.mooca@hotmail.com>, 2014
-# Alex Luís Silva <alex.mooca@hotmail.com>, 2014
-# Roger Filipe <lipe2000@outlook.com>, 2013-2014
+# Everton Leite <etcholeite@gmail.com>, 2016
+# Roger Filipe Barros <lipe2000@outlook.com>, 2013-2014
+# Roger Filipe Barros <lipe2000@outlook.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-10-01 23:40+0000\n"
-"Last-Translator: Alex Luís Silva <alex.mooca@hotmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/mpc-hc/language/pt_BR/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-12-22 21:11+0000\n"
+"Last-Translator: Roger Filipe Barros <lipe2000@outlook.com>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/mpc-hc/mpc-hc/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -66,29 +68,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Salvar &miniaturas..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Carregar legendas..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Salvar legendas..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Banco de dados de legendas"
+msgid "S&ubtitles"
+msgstr "Legendas"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Procurar legenda..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Carregar &legendas..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Enviar legenda..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Salvar l&egendas..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Baixar legenda..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Baixar legendas..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Enviar legendas..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -198,13 +196,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "Teste de tearing"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Mostrar estatísticas"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Exibir estatísticas"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Ex&ibir tempo atual"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Tempo restante"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Mostrar &nome do arquivo"
msgctxt "POPUP"
msgid "&Output Range"
@@ -406,17 +408,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Tocar janela por fora"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "Ma&nter proporção de vídeo"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Forçar proporção de vídeo específica"
+msgid "&Aspect Ratio"
+msgstr "&Formato de tela"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Original"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Pa&drão (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -438,6 +436,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Assumir &square pixels (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Corrigir diferença entre monitor e Área de Trabalho"
@@ -531,9 +533,25 @@ msgid "&Stop"
msgstr "&Parar"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "Avançar um &quadro"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Repetir"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Para &sempre"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Arquivo"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Lista de reprodução"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "Diminuir velocidade"
@@ -555,16 +573,16 @@ msgid "S&haders"
msgstr "S&haders"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Áudio"
+msgid "&Audio Track"
+msgstr "Faixa de &Áudio"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Legendas"
+msgid "Su&btitle Track"
+msgstr "Faixa de Legenda"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Fluxo de vídeo"
+msgid "Vide&o Track"
+msgstr "Faixa de &Vídeo"
msgctxt "POPUP"
msgid "&Volume"
@@ -586,7 +604,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Após reprodução"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Não fa&zer nada"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Reproduzir o próximo arquivo na pasta"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Desligar o &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "Fechar programa"
@@ -610,10 +640,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Trancar sessão"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Desligar o &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Navegar"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.strings.po
index d1720e088..ebba280a1 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.pt_BR.strings.po
@@ -1,21 +1,30 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Alex Luís Silva <alex.mooca@hotmail.com>, 2014
+# Alex Luís Silva <alex.mooca@hotmail.com>, 2014-2016
# Alex Luís Silva <alex.mooca@hotmail.com>, 2014
# brunoarmanelli <brunoarmanelli@me.com>, 2014
-# Roger Filipe <lipe2000@outlook.com>, 2013-2014
+# Charles Fernando da Silva <eu.charles@hotmail.com>, 2015
+# Edgar Peres <edgarvperes@gmail.com>, 2015
+# Eduardo Addad de Oliveira <duduaddad@gmail.com>, 2016
+# Erick Simões <erick.simoes@yahoo.com.br>, 2014-2015
+# Everton Leite <etcholeite@gmail.com>, 2015-2017
+# Gustavo Cegolini Togni <gustavotogni@gmail.com>, 2015
+# Roger Filipe Barros <lipe2000@outlook.com>, 2013-2014
# Luis Henrique <henriqlh@gmail.com>, 2014
+# Matheus Clemente <matheus.xb@gmail.com>, 2015
+# Michael Moser <michi.celin@gmail.com>, 2016
# mvpetri <mvpetri@gmail.com>, 2014
# Raphael Mendonça, 2014
+# Underground78, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-01 23:40+0000\n"
-"Last-Translator: Alex Luís Silva <alex.mooca@hotmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/mpc-hc/language/pt_BR/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 17:28+0000\n"
+"Last-Translator: Everton Leite <etcholeite@gmail.com>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/mpc-hc/mpc-hc/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -66,10 +75,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Propriedades"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Arquivo"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Estilo padrão"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Lista de reprodução"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Arquivos"
@@ -92,7 +109,7 @@ msgstr "Compensação de sincronia"
msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
msgid "avg: %d ms, dev: %d ms"
-msgstr "avg: %d ms, dev: %d ms"
+msgstr "méd: %d ms, desv: %d ms"
msgctxt "IDS_STATSBAR_JITTER"
msgid "Jitter"
@@ -122,6 +139,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Se o alvo de renderização é deixado indefinido, as legendas SSA / ASS serão renderizadas em relação ao quadro de vídeo, enquanto todas as outras legendas de texto será processado em relação à janela."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Modo de Repetição: Lista de reprodução"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Modo de Repetição: Arquivo"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Repetir para sempre: Ligado"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Repetir para sempre: Desligado"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Repetir para sempre"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Nunca (abordagem mais rápida)"
@@ -331,11 +368,11 @@ msgid "On/Off"
msgstr "Sim/Não"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Do fps"
+msgid "From (FPS)"
+msgstr "Do (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr "Para"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -470,6 +507,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Reprodução::Shaders"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Recursos"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Miscelânea"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Reprodução::Captura"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Reprodução::Ajuste de Sincronia do Process. vídeo"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Reprodução::Tela Cheia"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Filtros Internos::Renderizador de Áudio"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Opções de Áudio"
@@ -494,18 +559,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (Janela)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (Janela)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (sem render)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (sem render)"
@@ -558,34 +615,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Programa::Interface Web"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Legendas::Banco de Dados"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Recursos"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Miscelânea"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Reprodução::Captura"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Reprodução::Ajuste de Sincronia do Process. vídeo"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Reprodução::Tela Cheia"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Detalhes"
@@ -606,17 +635,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Sempre renderiza em Overlay. Geralmente só é permitido nos formatos YUV, mas apresentam-se diretamente sem nenhuma conversão de cor para RGB. Este é o modo de renderização mais rápido de todos e é o único que se pode ter certeza sobre o espelho de tela cheia quando se ativa a saída da TV."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Renderização padrão do Windows XP. Muito estável e somente um pouco mais lento que o misturador Overlay. Usa DirectDraw e usa o Overlay quando pode."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Somente disponível se tiver instalado o DirectX 9. Tem as mesmas habilidades que o VMR-7 (windowed), mas nunca usará o renderizador Overlay e por tal razão poderia ser um pouco mais lento que VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "O mesmo que VMR-7 (windowed), mas com o plugin \"Allocator-Presenter\" do MPC-HC para usar legendas. O espelho de Overlay NÃO funcionará. Recomenda-se usar a profundidade de cor da Área de trabalho \"True Color\"."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Disponível apenas se você possuir o DirectX 9 instalado. É muito estável, mas nunca usará renderização Overlay e por isso pode ser ligeiramente mais lento que um mixer Overlay."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -627,7 +648,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Mesmo do VMR-9 (Sem render), mas usa método real de redimensionamento bicubico em 2-pass."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Conecta-se a qualquer tipo de arquivo de vídeo e manda as amostras a nenhum lugar. Utilizá-lo quando não necessitar ver o vídeo, e quiser evitar o uso desnecessário da CPU."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -654,10 +675,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "O próprio Processador vídeo da Real. Os scripts SMIL funcionarão, mas a interação provavelmente não. Usa DirectDraw e executa em Overlay quando possivel."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "A saída do mecanismo da Real será renderizado pelo \"Allocator-Presenter\" baseado em DX7 de VMR-7 (sem processamento)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "A saída do mecanismo da Real será renderizado pelo \"Allocator-Presenter\" baseado em DX9 de VMR-9 (sem processamento)."
@@ -666,10 +683,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "O Processador de vídeo do QuickTime. Torna-se um pouco lento quando sua área de vídeo é redimensionada ou parcialmente coberta por outra janela. quando o Overlay não esta disponível ele retorna ao GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "A saída do mecanismo do QuickTime será processado pelo \"Allocator-Presenter\" baseado em DX7 de VMR-7 (sem processamento)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "A saída do mecanismo do QuickTime será processado pelo \"Allocator-Presenter\" baseado em DX9 de VMR-9 (sem processamento)."
@@ -678,22 +691,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "A superfície de vídeo será alocada como uma superfície regular fora da tela."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Renderer está danificado, não use."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Reportar um bug"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC travou mas esta compilação está sem informação de depuração.\nSe quiser reportar este bug, você deve primeiro instalar uma compilação oficial.\n\nGostaria de visitar a página de download agora?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Superfície plana fora da tela normal"
@@ -746,9 +747,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Nulo (sem compressão)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Áudio Renderer do MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Renderizador Interno de Áudio"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -762,9 +763,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "De maneira a ver um recurso embutido no seu navegador, você tem de habilitar a interface web.\n\nUse o botão \"Salvar Como\" se gostaria apenas de salvar a informação."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Baixar legendas"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Baixar Legendas..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Enviar Legendas..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -795,7 +800,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Não foi possivel encontrar todos volumes do arquivo"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "A superfície de vídeo será alocada como uma textura mas permanecerão as funções 2D usadas para copiar e alargar no backbuffer. Exige uma placa de vídeo que possa alocar RGBA de 32 bits, pelo menos a resolução do Vídeo."
msgctxt "IDC_TEXTURESURF3D"
@@ -822,6 +827,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Reduz tearing ignorando o VSync padrão construído em D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Sintonização"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Legendas não foram carregadas ou o conector não é suportado."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Armazena os Shaders Compilados na pasta local AppData para acelerar o tempo de carregamento."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Abre VTS_xx_0.ifo para carregar todos os arquivos VTS_xx_x.vob de uma só vez"
@@ -894,7 +911,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Mudo"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Cancela mudo"
@@ -959,11 +976,11 @@ msgid "&Organize Favorites..."
msgstr "&Organizar favoritos..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Misturar"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Abrir local do arquivo"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1047,7 +1064,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Zoom para Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Ocultar em tela cheia"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1235,7 +1252,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Adicionar pasta contêiner"
msgctxt "IDS_HW_INDICATOR"
@@ -1342,6 +1359,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<não definido>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Assistir"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Subir"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Descer"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Ordenar por LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Remover todos"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Tem certeza que deseja remover todos os canais da lista?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Nenhuma informação disponível"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Por favor aguarde, análise em progresso..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "RA %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Habilita o registro em arquivo de log (requer reinicialização)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Tempo restante"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Alta precisão"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Após a reprodução: Rebobinar o arquivo atual"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Após a reprodução: Fechar"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC encontrou um problema durante sua inicialização. Com a sua ajuda talvez poderemos consertar este problema.\nVocê gostaria de reportá-lo?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Se o áudio estiver adiantado utilize um valor positivo, e se estiver atrasado utilize um valor negativo."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "A pré-visualização está desativada. Você pode ativá-la nas opções do MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Essa opção pode ser usada para visualizar arquivos a partir de um local remoto. Use apenas em uma rede privada devidamente protegida.\n\nQuer ativar essa opção?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Renderizador Interno de Legenda"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Abrir dispositivo"
@@ -1362,13 +1455,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Imagem salva com sucesso"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Carregar legendas"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Carregar legendas..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Salvar legenda"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Salvar legendas..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1391,11 +1484,11 @@ msgid "Stop"
msgstr "Parar"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Avançar um quadro"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Voltar um quadro"
msgctxt "IDS_AG_GO_TO"
@@ -1495,8 +1588,8 @@ msgid "Thumbnails saved successfully"
msgstr "Miniaturas salvas com sucesso"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Faixa de vídeo"
+msgid "Vide&o Track"
+msgstr "Faixa de &Vídeo"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1543,11 +1636,11 @@ msgid "Reset Rate"
msgstr "Voltar para velocidade normal"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Ajuste de áudio em +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Ajuste de áudio em -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1618,14 +1711,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Mover legenda para direita"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Mostrar estatísticas"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Pular ao início"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Mostrar nome do arquivo"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Tocar DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Tocar Blu-Ray"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Exibir estatísticas do renderizador"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Redefinir estatísticas do renderizador"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Legendas::Outras Opções"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Esconder bordas"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Quadro somente"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Mostrar legenda&&Menu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Esconder menu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Avançado"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Modo mínimo"
@@ -1691,8 +1824,8 @@ msgid "PnS Dec Height"
msgstr "PnS Diminuir altura"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Baixando legenda(s), por favor aguarde."
+msgid "Downloading [%s] \"%s\""
+msgstr "Baixando [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1703,8 +1836,8 @@ msgid "No subtitles found."
msgstr "Nenhuma legenda foi encontrada."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d legendas(s) disponíveis."
+msgid "%d subtitle(s) available."
+msgstr "%d legendas(s) disponíveis."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1859,12 +1992,12 @@ msgid "Boss key"
msgstr "Tecla Antichefe"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Menu do reprodutor (curto)"
+msgid "Player Menu"
+msgstr "Menu do reprodutor"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Menu do reprodutor (longo)"
+msgid "Player Menu (full)"
+msgstr "Menu do reprodutor (completo)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1875,20 +2008,20 @@ msgid "Options"
msgstr "Opções"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Próximo áudio"
+msgid "Next Audio Track"
+msgstr "Próxima Faixa de Áudio"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Áudio anterior"
+msgid "Prev Audio Track"
+msgstr "Faixa de Áudio Anterior"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Próxima legenda"
+msgid "Next Subtitle Track"
+msgstr "Próxima Faixa de Legenda"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Legenda anterior"
+msgid "Prev Subtitle Track"
+msgstr "Faixa de Legenda Anterior"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1898,22 +2031,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Recarregar legendas"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Próximo áudio (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Áudio anterior (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Próxima legenda (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Legenda anterior (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Próximo ângulo (DVD)"
@@ -1923,28 +2040,28 @@ msgid "Prev Angle (DVD)"
msgstr "Ângulo anterior (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Próximo áudio (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Próxima Faixa de Áudio (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Áudio anterior (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Faixa de Áudio Anterior (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Próxima legenda (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Próxima Faixa de Legenda (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Legenda anterior (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Faixa de Legenda Anterior (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Legendas ativadas/desativadas (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Tempo restante"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Exibir tempo atual"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1970,11 +2087,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Criptografado"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Sim"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Não"
@@ -2031,12 +2148,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volume: %02lu/%02lu, Título: %02lu/%02lu, Capítulo: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Ângulo: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2126,14 +2243,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Largura da Imagem"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "A URL parece estar correta!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Versão do protocolo não compatível, atualize o MPC-HC ou escolha outro endereço."
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Razão de aspecto"
@@ -2143,19 +2252,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Total: %ld, Perdidos: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Tamanho: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Tamanho: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Livre: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Livre: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2180,7 +2289,7 @@ msgstr "Selecione o caminho para o DVD/BD:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr "Carregado com sucesso"
+msgstr " carregado com sucesso"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2227,8 +2336,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "As miniaturas seriam muito pequenas, impossível criar o arquivo.\n\nTente diminuir o número de miniaturas ou aumentar o tamanho total."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Para carregar legendas voce deve mudar o tipo de processador de vídeo e reabrir o arquivo.\n- DirectShow: VMR-7/VMR-9 (Sem processamento), EVR (CP), Sync, madVR or Haali\n- RealMedia: Processador especial para RealMedia, ou o abra atraves do DirectShow\n- QuickTime: Processador DX7 ou DX9 para QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Para carregar legendas você deve mudar o tipo de processador de vídeo e reabrir o arquivo.\n- DirectShow: VMR-9 (Sem processamento), EVR (CP), Sync, madVR or Haali\n- RealMedia: Processador especial para RealMedia, ou o abra através do DirectShow\n- QuickTime: Processador DX7 ou DX9 para QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2236,14 +2345,14 @@ msgstr "Arquivos de legendas"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
-msgstr "Aspecto proporcional: %ld:%ld"
+msgstr "Razão de aspecto: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Aspecto proporcional de vídeo: Original"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Formato de Tela: Padrão (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Diferença entre vídeo e áudio: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2255,8 +2364,8 @@ msgid "Out of memory"
msgstr "Falta de memória!!!"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Erro: Flash para IE não instalado"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Erro: Flash para Internet Explorer não instalado"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2278,10 +2387,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Falha ao renderizar o arquivo"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL ruim, não foi encontrado o banco de dados de legendas!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Capítulo: "
@@ -2302,14 +2407,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Atual"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC terminou de forma inesperada. Para nos ajudar corrigir esse problema, por favor envie o arquivo \"%s\" para o nosso bug tracker.\n\nDeseja fazer isso agora?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Falha ao criar arquivo de despejo '%s' (erro %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Selecione diretório"
@@ -2327,7 +2424,7 @@ msgid "Toggle Caption&Menu"
msgstr "Mostrar menu de captura"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Mostrar seeker"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2412,7 +2509,7 @@ msgstr "&Propriedades..."
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr "Propriedades (Pin)..."
+msgstr " (pino) propriedades..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2428,11 +2525,11 @@ msgstr "VSync (Sincronização Vertical de Tela)"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr "(Comentário do Diretor N° 1)"
+msgstr " (Comentário do Diretor N° 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr "(Comentário do Diretor N° 2)"
+msgstr " (Comentário do Diretor N° 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
@@ -2483,8 +2580,8 @@ msgid "Volume boost Max"
msgstr "Ganho de volume máximo"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Uso: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tO arquivo principal ou diretório a se carregar (wildcards\n\t\tpermitidos, \"-\" denotes standard input)\n/dub \"dubname\"\tCarregar um arquivo de áudio adicional\n/dubdelay \"file\"\tCarregar um arquivo de Áudio adicional alterado com XXms (se\n\t\to arquivo contém \"...DELAY XXms...\")\n/d3dfs\t\tIniciar rendering em D3D modo tela cheia\n/sub \"subname\"\tCarregar um arquivo de legendas adicional\n/filter \"filtername\"\tCarregar filtros DirectShow de um link dinâmico\n\t\t (wildcards allowed)\n/dvd\t\tExecutar em modo DVD, \"pathname\" significa a pasta\n\t\tdo dvd (opcional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tCarregar todas as faixas de um CD de Áudio ou (s)vcd,\n\t\t\"pathname\" significa o caminho do drive (opcional)\n/device\t\tOpen the default video device\n/open\t\tAbrir o arquivo, não inicia automaticamente a reprodução\n/play\t\tInicia a reprodução do arquivo assim que o tocado estiver\n\t\taberto\n/close\t\tFecha o programa após a reprodução (Só funciona quando\n\t\tusado com /play)\n/shutdown\tDesliga o sistema operacional após a reprodução\n/fullscreen\tInicia em modo tela cheia\n/minimized\tInicia em modo minimizado\n/new\t\tUsa o programa em uma nova instância\n/add\t\tadiciona \"pathname\" a lista de reprodução, pode ser combinada\n\t\tcom /open e com /play\n/regvid\t\tRegistra formatos de vídeo\n/regaud\t\tRegistra formatos de Áudio\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tTira o registro de todos os formatos de vídeo\n/start ms\t\tInicia a reprodução em \"ms\" (= millisegundos)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tAjusta tamanho fixo da janela\n/monitor N\tInicia monitoramento N, onde N inicia em 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestaura as configurações padrões\n/help /h /?\tMostra ajuda sobre as opções de linha de comandos\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Uso: mpc-hc.exe \"Caminho_do_Arquivo\" [switches]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2570,14 +2667,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "Habilitar todos os filtros"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Sintonização"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Legendas não foram carregadas ou o conector não é suportado."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Autor desconhecido. Contacte-nos se você fez este logo!"
@@ -2666,40 +2755,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Topo traseiro direito"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Redefinir estatísticas de exibição"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Legendas::Outras Opções"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Esconder bordas"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Quadro somente"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Mostrar legenda&&Menu"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Esconder menu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Avançado"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Acima da barra de progresso"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Abaixo da barra de progresso"
msgctxt "IDS_VIDEO_STREAM"
@@ -2867,8 +2928,8 @@ msgid "Other Audio"
msgstr "Outros Áudios"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2878,6 +2939,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2942,22 +3023,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Lista Reprodução"
@@ -2982,18 +3047,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Proporção de vídeo"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Usar WASAPI (reinicia reprodução)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Silencia no avanço rápido"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Dispositivo de áudio:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: Sim"
@@ -3282,6 +3335,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Recuperar volume: Não"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3339,7 +3396,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Erro ao tentar processar a taxa de quadros digitada!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Não é possivel pular o quadro, tente processador de vídeo diferente."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3358,10 +3415,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "As funções \"Salvar Imagem\" e \"Salvar Miniaturas\" não funcionam com o Processador de vídeo Overlay Mixer.\nMude o processador de vídeo nas opções de saída do MPC-HC e re-abra o arquivo."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Não foi possível se conectar ao servidor de legendas."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Você deseja ativar o editor de EDL?"
@@ -3430,7 +3483,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Você precisa aplicar as novas configurações antes de testar."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Após reprodução: Fechar arquivo"
@@ -3458,6 +3511,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Após reprodução: Desligar o monitor"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Após a reprodução: Reproduzir o próximo arquivo na pasta"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Após a reprodução: Fazer nada"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Brilho: %s"
@@ -3538,3 +3599,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Ajustes"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Provedor"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Deficiente Auditivo"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Downloads"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Pontos"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "A busca online de legendas falhou."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "A busca online de legendas foi abortada."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Busca online de legendas concluída, %d legenda(s) encontrada(s)."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Busca online de legendas concluída, sem resultados."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Baixar legendas"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Buscando por legendas online, por favor aguarde..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Abortando busca de legendas online..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Nome de usuário"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Estado"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Pronto..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Não implementado."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Enviando..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Legendas enviadas com sucesso."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "O envio de legendas falhou."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "O envio de legendas foi abortado."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "As legendas já existem."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Enviando legendas, por favor aguarde..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Envio terminado."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Envio abortado."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Falha no envio."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Baixar e abrir"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Configurar"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Resetar"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Subir"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Descer"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Abrir URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Idiomas"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "ERRO: não foi possível estabelecer uma conexão com a internet."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Entre com as credenciais do site"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Entre com as suas credenciais para se conectar a:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Formato de Tela: Assumir square pixels (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Baixadas [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Enviar legendas"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Tem certeza que deseja enviar o arquivo de legenda \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Buscando idiomas suportados..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Falha ao acessar \"%S\" com o nome de usuário \"%S\".\n\nPor favor, digite o nome de usuário e senha corretos ou redefina as credenciais para acessar como usuário anônimo."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Serão desabilitados a busca automática e o download para todos os arquivos de mídia cujos caminhos contenham qualquer um dos padrões inseridos aqui.\nPor exemplo, digite: \"pasta privada\\vídeos|trabalho\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"caminho\"\tO arquivo ou diretório principal a ser carregado\n\t\t(wildcards são permitidos, \"-\" indica a entrada padrão)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"nome_da_dublagem\"⇥Carrega um arquivo de audio adicional"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"arquivo\"\tCarregar um arquivo de áudio adicional deslocado com Xms\n\t\t(se o arquivo contém \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs⇥⇥Inicia renderização em modo D3D Tela Cheia "
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"nome_da_legenda\"\tCarrega um arquivo de legenda adicional"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"nome_do_filtro\"\tCarrega filtros DirectShow a partir de uma biblioteca dinâmica de link (wildcards são permitidos)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tExecutar em modo DVD, \"caminho\" indica a pasta do DVD (opcional)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tInicia a reprodução no título T, capítulo C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tIniciar a reprodução no título T, na posição P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tCarrega todas as faixas de um CD de Audio ou (S)VCD\n\t\t\"caminho\" indica o caminho do drive (opcional)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tAbre o dispositivo de vídeo padrão"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tAbre o arquivo, sem iniciar a reprodução automaticamente"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tComeça a reproduzir o arquivo assim que o player é aberto"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tFecha o player após a reprodução (funciona somente quando usado com /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tDesliga o sistema operacional após a reprodução"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tColoca o sistema operacional em modo de espera após a reprodução"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tHiberna o sistema operacional após a reprodução"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tEfetua log off após a reprodução"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tTrava a estação após a reprodução"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tDesliga o monitor após a reprodução"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tAbre o próximo arquivo da pasta após a reprodução"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tInicia o modo tela cheia"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tInicia em modo minimizado"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tUsa uma nova instância do player"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tAdiciona o \"caminho\" à lista de reprodução. Pode ser combinado com /open e /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tOrganiza a lista de reprodução aleatoriamente"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tCria associação de arquivos para arquivos de vídeo"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tCria associação de arquivos para arquivos de áudio"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tCria associação de arquivos para arquivos de playlist"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tCria associações de arquivos para todos os tipos de arquivo suportados"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tRemove todas as associações de arquivos"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tInicia a reprodução em \"ms\" (= milissegundos)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tInicia a reprodução na posição hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tDefine um tamanho fixo para a janela"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tInicia o player no monitor N, onde N começa a partir do 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tInicia usando o renderizador de áudio N, onde N começa a partir de 1 (ver configurações de \"Saída de Som\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tInicia usando o ajuste de shader \"Pr\""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\tEspecifica o nome do ajuste de Pan&Scan a ser usado"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tReassocia formato de ícones"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tAbre MPC-HC em segundo plano"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tInicia a interface web na porta especificada"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tExibe informações de debug no OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDisabilita o reportador de erros"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tUsa MPC-HC como escravo"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tDefine o índice da GPU usado para decodificação de hardware\n\t\tDisponível somente para CUVID e DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset⇥⇥Restaura configuração padrão"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tExibe ajuda a cerca das linhas de comando"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Valor limite para pontuação de legendas que serão baixadas automaticamente. Valores mais altos significam que serão baixadas legendas mais corretas e precisas, enquanto valores baixos podem resultar em legendas incorretas, mas não existe valor perfeito. Escolha um que atenda melhor sua necessidade."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Delay do Áudio (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Tamanho em pixels da barra de ferramentas padrão."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Usar barra de ferramentas antiga no lugar da nova vetorizada."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Copiar URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ro.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ro.dialogs.po
index 8617461a6..6e7ebefcf 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ro.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ro.dialogs.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Daniel <danny34ever@yahoo.com>, 2014
-# lordkag <lord.kagula@gmail.com>, 2014
+# Daniel <danny3@tutanota.com>, 2014-2016
+# lordkag <lord.kagula@gmail.com>, 2014-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 17:30+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-06-12 20:10+0000\n"
"Last-Translator: lordkag <lord.kagula@gmail.com>\n"
-"Language-Team: Romanian (http://www.transifex.com/projects/p/mpc-hc/language/ro/)\n"
+"Language-Team: Romanian (http://www.transifex.com/mpc-hc/mpc-hc/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -19,7 +19,7 @@ msgstr ""
msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
msgid "Select Media Type"
-msgstr "Selectează tipul media"
+msgstr "Selectați tipul media"
msgctxt "IDD_SELECTMEDIATYPE_IDOK"
msgid "OK"
@@ -110,16 +110,16 @@ msgid "Enable custom channel mapping"
msgstr "Activează repartizarea particularizată a canalelor "
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Configurație a difuzoarelor pentru "
+msgid "Speaker configuration for"
+msgstr "Configurație a difuzoarelor pentru"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "canale de intrare:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Țineți Shift apăsat pentru aplicarea imediată a schimbărilor când dați clic pe ceva"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Țineți apăsată tasta Shift pentru aplicarea imediată a schimbărilor când dați clic pe ceva"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -190,20 +190,20 @@ msgid "About"
msgstr "Despre"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Drepturi de autor © 2002-2014 vedeți Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Drepturi de autor © 2002-2017, vedeți Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
-msgstr "Acesta program este gratuit și distribuit sub licența GNU General Public License."
+msgstr "Acest program este gratuit și distribuit sub Licența Publică Generală GNU."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Traducerea în română realizată de Daniel Alămiță, actualizată şi corectată de lordkag"
+msgstr "Traducerea în limba română realizată de Daniel Alămiță și lordkag"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
-msgstr "Informaţii despre versiunea compilată"
+msgstr "Informații despre versiunea compilată"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Version:"
@@ -231,7 +231,7 @@ msgstr "Nume:"
msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
msgid "Copy to clipboard"
-msgstr "Copiază în clipboard"
+msgstr "Copiază în zona de transfer"
msgctxt "IDD_ABOUTBOX_IDOK"
msgid "OK"
@@ -295,7 +295,7 @@ msgstr "Extinde până la marginile ecranului"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
msgid "Store settings in .ini file"
-msgstr "Salvează setările într-un fișier .ini"
+msgstr "Salvează stabilirile într-un fișier .ini"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
@@ -303,11 +303,11 @@ msgstr "Dezactivează meniul „Deschide disc”"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
msgid "Process priority above normal"
-msgstr "Prioritatea procesării peste normal"
+msgstr "Prioritatea procesării peste normală"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
-msgstr "Activează suportul pentru coperți de albume"
+msgstr "Activează sprijinul pentru coperți de albume"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "History"
@@ -327,7 +327,7 @@ msgstr "Ține minte poziția în fișier"
msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
msgid "Remember DVD position"
-msgstr "Ține minte poziția pe DVD"
+msgstr "Ține minte poziția pe discul DVD"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
msgid "Remember last window position"
@@ -339,11 +339,11 @@ msgstr "Ține minte ultima dimensiune a ferestrei"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
msgid "Remember last Pan-n-Scan Zoom"
-msgstr "Ține minte ultima focalizare a Pan && Scan"
+msgstr "Ține minte ultima scalare a panoramării trunchiate"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
-msgstr "Acţiuni pentru meniul „Deschide DVD/BD”"
+msgstr "Acțiuni pentru meniul „Deschide disc DVD/BD”"
msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
msgid "Prompt for location"
@@ -367,15 +367,15 @@ msgstr "Audio"
msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
msgid "Subtitles"
-msgstr "Subtitrări"
+msgstr "Subtitluri"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Additional settings"
-msgstr "Setări adiționale"
+msgstr "Stabiliri adiționale"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
-msgstr "Permite subtitrări pentru persoane cu dizabilități în „Line 21 Decoder”"
+msgstr "Permite subtitluri pentru persoane cu dizabilități în „Line 21 Decoder”"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
@@ -383,7 +383,7 @@ msgstr "Audio"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Volume"
-msgstr "Volum"
+msgstr "Volum sonor"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Min"
@@ -422,16 +422,20 @@ msgid "time(s)"
msgstr "dată(ori)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Mod de repetare:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "După redare"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Ieșire"
+msgid "Default zoom"
+msgstr "Scalare implicită"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
-msgstr "Auto-scalare"
+msgstr "Scalare automată"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
@@ -447,23 +451,23 @@ msgstr "Ordinea preferată a pistelor"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
-msgstr "Subtitrări:"
+msgstr "Subtitluri:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio:"
-msgstr "Audio"
+msgstr "Audio:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr "Permite suprascrierea opţiunii separatorului (splitter) extern"
+msgstr "Permite suprascrierea opțiunii separatorului (splitter) extern"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
-msgstr "Setări pentru deschidere"
+msgstr "Stabiliri deschidere"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
msgid "Use worker thread to construct the filter graph"
-msgstr "Folosește un fir de execuţie secundar pentru a construi graficul filtrelor"
+msgstr "Folosește un fir de execuție secundar pentru a construi graficul filtrelor"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
@@ -473,17 +477,13 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Încarcă automat fișierele audio"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Folosește randorul de subtitrări integrat"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Control"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Volume step:"
-msgstr "Treaptă Volum:"
+msgstr "Treaptă volum:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "%"
@@ -491,7 +491,7 @@ msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Speed step:"
-msgstr "Treaptă Viteză:"
+msgstr "Treaptă de viteză:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
msgid "Override placement"
@@ -523,11 +523,11 @@ msgstr "ms"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Texture settings (open the video again to see the changes)"
-msgstr "Setările texturei (deschideți fișierul video din nou pentru a vedea schimbările)"
+msgstr "Stabiliri textură (deschideți fișierul video din nou pentru a vedea schimbările)"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Sub pictures to buffer:"
-msgstr "Imagini subtitrare de preîncărcat:"
+msgstr "Imagini subtitlu de preîncărcat:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Maximum texture resolution:"
@@ -535,11 +535,11 @@ msgstr "Rezoluție maximă pentru textură :"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
msgid "Never animate the subtitles"
-msgstr "Nu anima niciodată subtitrările"
+msgstr "Nu anima niciodată subtitlurile"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
msgid "Render at"
-msgstr "Randează după"
+msgstr "Randează la"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
msgid "% of the animation"
@@ -547,7 +547,7 @@ msgstr "% din animație"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
msgid "Animate at"
-msgstr "Animație la"
+msgstr "Animează la"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
msgid "% of the video frame rate"
@@ -555,7 +555,7 @@ msgstr "% din rata cadrelor video"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr "Permite abandonarea unor imagini subtitrare dacă coada de randare este în urmă"
+msgstr "Permite abandonarea unor imagini subtitlu dacă coada de randare este în urmă"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
@@ -570,8 +570,8 @@ msgid "Warning"
msgstr "Avertisment"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Dacă suprascrieţi și activați dezimțuire (antialiasing) pentru ecran complet în setările plăcii grafice, subtitrările nu o să arate mai bine, dar cu siguranță se va consuma mai mult din resursele sistemului."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Dacă suprascrieți și activați dezimțuirea (antialiasing) pentru ecran complet în stabilirile plăcii grafice, subtitlurile nu o să arate mai bine, dar cu siguranță se vor consuma mai mult din resursele sistemului."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -599,7 +599,7 @@ msgstr "Rulează ca &administrator"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr "Setează ca program &implicit"
+msgstr "Stabilește ca program &implicit"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -677,16 +677,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Împiedică minimizarea playerului din ecran complet pe un monitor care nu este implicit"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Folosește facilitățile barei de activități Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Folosește facilitățile barei de activități îmbunătățite"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Deschide următorul/precedentul fişier din dosar la comenzile „Sari înapoi/înainte” când este un singur element în lista de redare"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Deschide precedentul/următorul fișier din dosar la comenzile „Sari înapoi/înainte” când este un singur element în lista de redare"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Folosește indiciu de timp:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -695,15 +695,15 @@ msgstr "Fontul OSD:"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
msgid "Enable Logitech LCD support (experimental)"
-msgstr "Activează suportul LCD pentru tastaturi Logitech (experimental)"
+msgstr "Activează sprijunul ecranelor LCD pentru tastaturi Logitech (experimental)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
-msgstr "Ascunde automat indicatorul mouse-ului în timpul redării în mod fereastră"
+msgstr "Ascunde automat indicatorul mausului în timpul redării în mod fereastră"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
msgid "Add Filter..."
-msgstr "Adaugă filtru..."
+msgstr "Adăugare filtru..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
msgid "Remove"
@@ -731,11 +731,11 @@ msgstr "Jos"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
msgid "Add Media Type..."
-msgstr "Adaugă tip media..."
+msgstr "Adăugare tip media..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
msgid "Add Sub Type..."
-msgstr "Adaugă subtip..."
+msgstr "Adăugare subtip..."
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
msgid "Delete"
@@ -743,7 +743,7 @@ msgstr "Șterge"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
msgid "Reset List"
-msgstr "Resetează lista"
+msgstr "Restabilește lista"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Type:"
@@ -791,7 +791,7 @@ msgstr "Descriere:"
msgctxt "IDD_FAVADD_CAPTION"
msgid "Add Favorite"
-msgstr "Adaugă la favorite"
+msgstr "Adăugare la favorite"
msgctxt "IDD_FAVADD_IDC_STATIC"
msgid "Choose a name for your shortcut:"
@@ -839,7 +839,7 @@ msgstr "OK"
msgctxt "IDD_PNSPRESET_DLG_CAPTION"
msgid "Pan&Scan Presets"
-msgstr "Setări prestabilite Pan & Scan"
+msgstr "Prestabiliri panoramare trunchiată"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
msgid "New"
@@ -859,7 +859,7 @@ msgstr "Jos"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
msgid "&Set"
-msgstr "&Setează"
+msgstr "&Stabilește"
msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
msgid "&Cancel"
@@ -887,7 +887,7 @@ msgstr "Selectează toate"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
msgid "Reset Selected"
-msgstr "Resetează selectate"
+msgstr "Restabilește selectate"
msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
msgid "Warning"
@@ -1039,7 +1039,7 @@ msgstr "Jos"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
msgid "Position subtitles relative to the video frame"
-msgstr "Poziționează subtitrările relativ la cadrul video"
+msgstr "Poziționează subtitlurile relativ la cadrul video"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Colors && Transparency"
@@ -1067,7 +1067,7 @@ msgstr "Contur"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
msgid "Link alpha channels"
-msgstr "Unește canalele alpha"
+msgstr "Unește canalele alfa"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
@@ -1083,7 +1083,7 @@ msgstr "Filtre de transformare"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Internal LAV Filters settings"
-msgstr "Setările filtrelor Internal LAV Filters"
+msgstr "Stabiliri LAV Filters interne"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
msgid "Splitter"
@@ -1126,12 +1126,12 @@ msgid "Audio Renderer"
msgstr "Randor audio"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Setări pentru VMR-7/VMR-9 (fără randare) și EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Stabiliri VMR-9 (fără randare) și EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
-msgstr "Suprafaţă:"
+msgstr "Suprafață:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Resizer:"
@@ -1151,15 +1151,15 @@ msgstr "Ecran complet D3D"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Alternative VSync"
-msgstr "VSync alternativ"
+msgstr "Sincronizare verticală alternativă"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
msgid "VMR-9 Mixer Mode"
-msgstr "VMR-9 în mod mixare"
+msgstr "Mod amestecător VMR-9"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
msgid "YUV Mixing"
-msgstr "Mixare YUV"
+msgstr "Amestecare YUV"
msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
msgid "EVR Buffers:"
@@ -1170,8 +1170,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Subtitrări *"
+msgid "Subtitles"
+msgstr "Subtitluri"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1179,15 +1179,19 @@ msgstr "Captură ecran"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Shaders"
-msgstr "Shadere"
+msgstr "Nuanțatoare"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Rotation"
-msgstr "Rotaţie"
+msgstr "Rotație"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Filtrele externe (cum ar fi VSFilter) pot afişa subtitrări pe orice randor."
+msgid "Subtitle Renderer"
+msgstr "Randor subtitluri"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Salvează în cache nuanțatoarele compilate."
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1195,7 +1199,7 @@ msgstr "Ascultă pe portul:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
msgid "Launch in web browser..."
-msgstr "Lansează în navigator web..."
+msgstr "Lansează în navigatorul web..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
msgid "Enable compression"
@@ -1205,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Permite accesul numai de pe acest calculator (rețeaua internă)"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Activează previzualizare"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Afișează informații de depanare"
@@ -1230,16 +1238,44 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Operatori CGI: (.ext1=dosar1;.ext2=dosar2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Subtitrări disponibile online"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Descarcă && Deschide"
+msgid "Download subtitles"
+msgstr "Descarcă subtitluri"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Înlocuiește subtitrările încărcate curent"
+msgstr "Înlocuiește subtitlurile actual încărcate"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Descarcă"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Reîmprospătează"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Abandonează"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Opțiuni"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Încarcă subtitluri"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Încarcă"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Abandonează"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Opțiuni"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
@@ -1247,7 +1283,7 @@ msgstr "Salvează ca..."
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Color controls (for VMR-9, EVR and madVR)"
-msgstr "Controale de culoare (pentru VMR-9, EVR şi madVR)"
+msgstr "Controale de culoare (pentru VMR-9, EVR și madVR)"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Brightness"
@@ -1267,7 +1303,7 @@ msgstr "Saturație"
msgctxt "IDD_PPAGEMISC_IDC_RESET"
msgid "Reset"
-msgstr "Resetează"
+msgstr "Restabilește"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Update check"
@@ -1278,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "Activează verificarea automată a actualizărilor"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Întârziere între verificări:"
+msgid "Check every:"
+msgstr "Verifică la fiecare:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1287,11 +1323,11 @@ msgstr "zi(le)"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Settings management"
-msgstr "Administrare setări"
+msgstr "Gestionare stabiliri"
msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
msgid "Reset"
-msgstr "Resetează"
+msgstr "Restabilește"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
msgid "Export"
@@ -1303,7 +1339,7 @@ msgstr "Exportă taste rapide"
msgctxt "IDD_TUNER_SCAN_CAPTION"
msgid "Tuner scan"
-msgstr "Scanare tuner"
+msgstr "Scanare prinzător"
msgctxt "IDD_TUNER_SCAN_ID_START"
msgid "Start"
@@ -1359,7 +1395,7 @@ msgstr "Digital"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Analog settings"
-msgstr "Setări receptor analog"
+msgstr "Stabiliri receptor analog"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC1"
msgid "Video"
@@ -1375,7 +1411,7 @@ msgstr "Țară"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Digital settings (BDA)"
-msgstr "Setări receptor digital (BDA)"
+msgstr "Stabiliri receptor digital (BDA)"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
msgid "Network Provider"
@@ -1383,7 +1419,7 @@ msgstr "Furnizor rețea"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
msgid "Tuner"
-msgstr "Tuner"
+msgstr "Prinzător"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC6"
msgid "Receiver"
@@ -1395,15 +1431,15 @@ msgstr "Modalitate de schimbare a canalului:"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
msgid "Rebuild filter graph"
-msgstr "Reconstruieşte graficul filtrelor"
+msgstr "Reconstruiește graficul filtrelor"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
msgid "Stop filter graph"
-msgstr "Opreşte graficul filtrelor"
+msgstr "Oprește graficul filtrelor"
msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
msgid "Sync video to display"
-msgstr "Sincronizează frecvenţa video cu cea a ecranului"
+msgstr "Sincronizează frecvența video cu cea a ecranului"
msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
msgid "Frequency adjustment:"
@@ -1411,7 +1447,7 @@ msgstr "Frecvență de ajustare:"
msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
msgid "Sync display to video"
-msgstr "Sincronizează frecvenţa ecranului cu cea video"
+msgstr "Sincronizează frecvența ecranului cu cea video"
msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
msgid "Frequency adjustment:"
@@ -1427,11 +1463,11 @@ msgstr "coloane"
msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
msgid "Present at nearest VSync"
-msgstr "Prezintă la cel mai apropiat VSync (Sincronizare verticală)"
+msgstr "Prezintă la cea mai apropiată sincronizare verticală"
msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
msgid "Target sync offset:"
-msgstr "Decalaj de sincronizare ţintă:"
+msgstr "Decalaj de sincronizare țintă:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
msgid "ms"
@@ -1455,7 +1491,7 @@ msgstr "Modificările vor avea efect după ce redarea a fost oprită și reporni
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
msgid "Launch files in fullscreen"
-msgstr "Pornește fișierele în modul ecran complet"
+msgstr "Lansează fișierele în modul ecran complet (pe tot ecranul)"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
msgid "Hide controls in fullscreen"
@@ -1523,15 +1559,15 @@ msgstr "Scanează"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
msgid "Prefer forced and/or default subtitles tracks"
-msgstr "Preferă subtitrările forţate şi/sau implicite"
+msgstr "Preferă subtitlurile forțate și/sau implicite"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
msgid "Prefer external subtitles over embedded subtitles"
-msgstr "Preferă subtitrările externe în locul celor integrate"
+msgstr "Preferă subtitlurile externe în locul celor integrate"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
-msgstr "Ignoră subtitrările integrate"
+msgstr "Ignoră subtitlurile integrate"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
msgid "Autoload paths"
@@ -1539,19 +1575,31 @@ msgstr "Căi de încărcare automată"
msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
msgid "Reset"
-msgstr "Resetează"
+msgstr "Restabilește"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Bază de date online"
+msgid "Online search, download and upload subtitles"
+msgstr "Căutare pe Internet, descărcare și încărcare subtitluri"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Caută și descarcă automat subtitluri daca nu este găsit niciunul local"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Preferă subtitlurile pentru cei cu deficiențe de auz (când sunt indicate de furnizor)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignoră fișierele care conțin oricare din următoarele cuvinte:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "URL de bază pentru baza de date cu subtitrări online:"
+msgid "Languages in order of preference:"
+msgstr "Limbile în ordinea preferinței:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Testează"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Încarcă automat subtitlurile active la sfârșitul redării video"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1563,7 +1611,7 @@ msgstr "&Descarcă acum"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
msgid "Remind me &later"
-msgstr "Aminteşte-mi mai &târziu"
+msgstr "Amintește-mi mai &târziu"
msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
msgid "&Ignore this update"
@@ -1571,11 +1619,11 @@ msgstr "&Ignoră această actualizare"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr "Shaderele conțin efecte speciale ce pot fi adăugate în timpul procesului de randare video"
+msgstr "Nuanțatoarele conțin efecte speciale ce pot fi adăugate în timpul procesului de randare video"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
-msgstr "Adaugă fișier shader"
+msgstr "Adăugare fișier nuanțator"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
msgid "Remove"
@@ -1591,7 +1639,7 @@ msgstr "Adaugă după redimensionare"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
-msgstr "Setări prestabilite pentru shader"
+msgstr "Prestabiliri nuanțator"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
msgid "Load"
@@ -1607,15 +1655,15 @@ msgstr "Șterge"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active pre-resize shaders"
-msgstr "Shadere pre-redimensionare active"
+msgstr "Nuanțatoare pre-redimensionare active"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active post-resize shaders"
-msgstr "Shadere post-redimensionare active"
+msgstr "Nuanțatoare post-redimensionare active"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
-msgstr "Depanare Shadere"
+msgstr "Depanare nuanțatoare"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
msgid "Debug Information"
@@ -1639,7 +1687,7 @@ msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr "Setări avansate, nu modificați decât dacă știți ce faceți."
+msgstr "Stabiliri avansate, nu modificați decât dacă știți ce faceți."
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
@@ -1653,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Implicit"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Dispozitiv"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Mod exclusiv"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Permite flux de biți - bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Opțiuni"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Activează îmbinarea canalelor stereo (pentru căști)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Întrerupere"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Nivel:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Notiță"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Pentru a minimiza distorsiunile audio, este recomandat să păstrați volumul playerului la cel mult 85% în timpul redării conținutului puternic ce a fost codat cu pierderi."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Calitate JPEG:"
@@ -1665,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Raportor picări"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Ne pare rău, se pare că MPC-HC tocmai s-a prăbușit. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Trimiteți un raport de defecțiune pentru a ne ajuta să diagnosticăm și să rezolvăm problema."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Informații opționale"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Email:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Adresa dumneavoastră de email este opțională și va fi folosită doar dacă dezvoltatorii au nevoie să vă contacteze."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Descrierea problemei (folosiți doar limba engleză):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Repornește MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Închide MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ro.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ro.menus.po
index 73b835f58..22b4065ee 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ro.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ro.menus.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Daniel <danny34ever@yahoo.com>, 2014
-# lordkag <lord.kagula@gmail.com>, 2014
+# Daniel <danny3@tutanota.com>, 2014-2016
+# lordkag <lord.kagula@gmail.com>, 2014-2015,2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-22 12:40+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2017-06-12 20:01+0000\n"
"Last-Translator: lordkag <lord.kagula@gmail.com>\n"
-"Language-Team: Romanian (http://www.transifex.com/projects/p/mpc-hc/language/ro/)\n"
+"Language-Team: Romanian (http://www.transifex.com/mpc-hc/mpc-hc/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -23,23 +23,23 @@ msgstr "&Fișier"
msgctxt "ID_FILE_OPENQUICK"
msgid "&Quick Open File..."
-msgstr "Deschide &rapid un fișier..."
+msgstr "Deschidere &rapidă fișier..."
msgctxt "ID_FILE_OPENMEDIA"
msgid "&Open File..."
-msgstr "Desc&hide fișier..."
+msgstr "&Deschidere fișier..."
msgctxt "ID_FILE_OPENDVDBD"
msgid "Open &DVD/BD..."
-msgstr "Deschide &DVD/BD..."
+msgstr "Deschidere disc &DVD/BD..."
msgctxt "ID_FILE_OPENDEVICE"
msgid "Open De&vice..."
-msgstr "Deschide dis&pozitiv..."
+msgstr "Deschidere dis&pozitiv..."
msgctxt "ID_FILE_OPENDIRECTORY"
msgid "Open Dir&ectory..."
-msgstr "Deschide direc&tor..."
+msgstr "Deschidere dir&ector..."
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
@@ -55,39 +55,35 @@ msgstr "Î&nchide"
msgctxt "ID_FILE_SAVE_COPY"
msgid "&Save a Copy..."
-msgstr "Salvează o &copie..."
+msgstr "Salvare &copie..."
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
-msgstr "Salvează &imagine..."
+msgstr "Salvare &imagine..."
msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
-msgstr "Salvează &miniaturi..."
-
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Înc&arcă subtitrare..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Salvează s&ubtitrare..."
+msgstr "Salvare &miniaturi..."
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "&Bază de date a subtitrărilor"
+msgid "S&ubtitles"
+msgstr "Subtitluri"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Caută..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Î&ncărcare subtitluri..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Î&ncarcă..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Salvare s&ubtitluri..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Descarcă..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Descărcare subtitluri..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Urcare subtitluri..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -95,7 +91,7 @@ msgstr "Pr&oprietăți"
msgctxt "ID_FILE_EXIT"
msgid "E&xit"
-msgstr "I&eșire"
+msgstr "Î&nchide programul"
msgctxt "POPUP"
msgid "&View"
@@ -127,7 +123,7 @@ msgstr "St&are"
msgctxt "ID_VIEW_SUBRESYNC"
msgid "Su&bresync"
-msgstr "Resincronizare su&btitrări"
+msgstr "Resincronizare su&btitluri"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
@@ -143,11 +139,11 @@ msgstr "Na&vigare"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr "&Depanare shadere"
+msgstr "&Depanare nuanțatoare"
msgctxt "POPUP"
msgid "&Presets..."
-msgstr "Setări &prestabilite..."
+msgstr "&Prestabiliri..."
msgctxt "ID_VIEW_PRESETS_MINIMAL"
msgid "&Minimal"
@@ -191,19 +187,23 @@ msgstr "Autopotrivire (&doar cele mari)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "S&etări randor"
+msgstr "Stabiliri r&andor"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Test de rupere (tearing)"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "&Statistici de afișare"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Timp &rămas"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Afișează t&impul actual"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Arată nume &fișier"
msgctxt "POPUP"
msgid "&Output Range"
@@ -227,7 +227,7 @@ msgstr "&Mod ecran complet D3D"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "&Asistare ecran complet D3D în interfață"
+msgstr "&Sprijinire ecran complet D3D în interfață"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
@@ -239,11 +239,11 @@ msgstr "Forțează &intrare RGB pe 10 biți"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
-msgstr "Procesare &completă în virgulă mobilă (32 biţi)"
+msgstr "Procesare &completă în virgulă mobilă (32 biți)"
msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
msgid "&Half Floating Point Processing"
-msgstr "Procesare pe &jumătate în virgulă mobilă (16 biţi)"
+msgstr "Procesare pe &jumătate în virgulă mobilă (16 biți)"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
@@ -255,7 +255,7 @@ msgstr "Activează &corecția de timp a cadrelor"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "Administrare &culori"
+msgstr "Gestionare &culori"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
@@ -291,7 +291,7 @@ msgstr "L&uminos (2.2 Gamma)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
msgid "&Dim (2.35 Gamma)"
-msgstr "&Estompat (2.35 Gamma)"
+msgstr "&Estompată (2.35 Gamma)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
@@ -299,15 +299,15 @@ msgstr "În&tunecat (2.4 Gamma)"
msgctxt "POPUP"
msgid "&Rendering Intent"
-msgstr "&Intenţie de randare"
+msgstr "&Intenție de randare"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
-msgstr "&Perceptual"
+msgstr "&Perceptuală"
msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
msgid "&Relative Colorimetric"
-msgstr "&Colorimetric relativ"
+msgstr "&Colorimetrică &relativ"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
@@ -315,59 +315,59 @@ msgstr "&Saturație"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
-msgstr "Colorimetric &absolut"
+msgstr "Colorimetrică &absolută"
msgctxt "POPUP"
msgid "&VSync"
-msgstr "&VSync (Sincronizare verticală)"
+msgstr "Sincronizare &verticală"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "Activează &VSync"
+msgstr "Activează sincronizarea &verticală"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "VSync &precis"
+msgstr "Sincronizare verticală &precisă"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "VSync &alternativ"
+msgstr "Sincronizare verticală &alternativă"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "&Micșorează decalaj VSync"
+msgstr "&Micșorează decalajul sincronizării verticale"
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "&Mărește decalaj VSync"
+msgstr "&Mărește decalajul sincronizării verticale"
msgctxt "POPUP"
msgid "&GPU Control"
-msgstr "Control al &GPU"
+msgstr "Control unitate &grafică"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "Golește GPU î&nainte de VSync"
+msgstr "&Golește unitatea grafică înainte de sincronizarea verticală"
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
-msgstr "Golește GPU &după prezentare"
+msgstr "Golește unitatea grafică &după prezentare"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "&Așteaptă pentru goliri"
+msgstr "&Așteaptă după goliri"
msgctxt "POPUP"
msgid "R&eset"
-msgstr "R&esetează"
+msgstr "R&estabilește"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "Resetează la setări &implicite ale randorului"
+msgstr "Restabilește la stabilirile &implicite ale randorului"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "Resetează la setări &optime ale randorului"
+msgstr "Restabilește la stabilirile &optime ale randorului"
msgctxt "POPUP"
msgid "Video &Frame"
@@ -405,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Atinge fereastra din exteri&or"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Menține raportul de aspect"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Suprascrie raportul de &aspect"
+msgid "&Aspect Ratio"
+msgstr "Raport de &aspect"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Implicit"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Implicit (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -437,37 +433,41 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Presupune că pixelii sunt &pătrați (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "&Corectează diferența RA Monitor/Desktop"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
-msgstr "Pa&n && Scan (Panoramare trunchiată)"
+msgstr "Pa&noramare trunchiată"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
-msgstr "&Mărește dimensiune"
+msgstr "&Mărește dimensiunea"
msgctxt "ID_VIEW_DECSIZE"
msgid "&Decrease Size"
-msgstr "M&icșorează dimensiune"
+msgstr "M&icșorează dimensiunea"
msgctxt "ID_VIEW_INCWIDTH"
msgid "I&ncrease Width"
-msgstr "Mă&rește lățime"
+msgstr "Mă&rește lățimea"
msgctxt "ID_VIEW_DECWIDTH"
msgid "D&ecrease Width"
-msgstr "Mi&cșorează lățime"
+msgstr "Mi&cșorează lățimea"
msgctxt "ID_VIEW_INCHEIGHT"
msgid "In&crease Height"
-msgstr "Măr&ește înălțime"
+msgstr "Măr&ește înălțimea"
msgctxt "ID_VIEW_DECHEIGHT"
msgid "Decre&ase Height"
-msgstr "Micș&orează înălțime"
+msgstr "Micș&orează înălțimea"
msgctxt "ID_PANSCAN_MOVERIGHT"
msgid "Move &Right"
@@ -491,7 +491,7 @@ msgstr "Cen&trare"
msgctxt "ID_VIEW_RESET"
msgid "Re&set"
-msgstr "Re&setează"
+msgstr "Re&stabilește"
msgctxt "POPUP"
msgid "On &Top"
@@ -523,16 +523,32 @@ msgstr "&Redare"
msgctxt "ID_PLAY_PLAYPAUSE"
msgid "&Play/Pause"
-msgstr "&Redă/Pauză"
+msgstr "&Redă/Pauzează"
msgctxt "ID_PLAY_STOP"
msgid "&Stop"
-msgstr "&Stop"
+msgstr "&Oprește"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "Cad&rul următor"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Repetă"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "La &nesfârșit"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Fișierul"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Lista de redare"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Micșorează rata de redare"
@@ -543,7 +559,7 @@ msgstr "&Mărește rata de redare"
msgctxt "ID_PLAY_RESETRATE"
msgid "R&eset Rate"
-msgstr "R&esetează rata de redare"
+msgstr "R&estabilește rata de redare"
msgctxt "ID_FILTERS"
msgid "&Filters"
@@ -551,19 +567,19 @@ msgstr "&Filtre"
msgctxt "ID_SHADERS"
msgid "S&haders"
-msgstr "S&hadere"
+msgstr "&Nuanțatoare"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio"
+msgid "&Audio Track"
+msgstr "Pistă &audio"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Su&btitrări"
+msgid "Su&btitle Track"
+msgstr "Pistă su&btitlu"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Flux &video"
+msgid "Vide&o Track"
+msgstr "Pistă &video"
msgctxt "POPUP"
msgid "&Volume"
@@ -579,13 +595,25 @@ msgstr "&Scade"
msgctxt "ID_VOLUME_MUTE"
msgid "&Mute"
-msgstr "&Mut"
+msgstr "&Taci"
msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Du&pă redare"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "&Nicio acțiune"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Redă &următorul fișier din dosar"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Închide &monitorul"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "Î&nchide programul"
@@ -607,11 +635,7 @@ msgstr "Închide &sesiunea"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "&Blochează desktopul"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Închide &monitorul"
+msgstr "&Blochează spațiul de lucru"
msgctxt "POPUP"
msgid "&Navigate"
@@ -639,7 +663,7 @@ msgstr "Meniu &rădăcină"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
-msgstr "Meniu &subtitrări"
+msgstr "Meniu &subtitluri"
msgctxt "ID_NAVIGATE_AUDIOMENU"
msgid "&Audio Menu"
@@ -671,15 +695,15 @@ msgstr "Caută act&ualizări"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
-msgstr "&Comutatoare în linie de comandă"
+msgstr "&Comutatoare linie de comandă"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
-msgstr "Descarcă imagini pentru bara de ins&trumente"
+msgstr "Descărcare imagini pentru bara de ins&trumente"
msgctxt "ID_HELP_DONATE"
msgid "&Donate"
-msgstr "&Donează"
+msgstr "&Donare"
msgctxt "ID_HELP_ABOUT"
msgid "&About..."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ro.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ro.strings.po
index 9ce48b889..88dace714 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ro.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ro.strings.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Daniel <danny34ever@yahoo.com>, 2014
-# lordkag <lord.kagula@gmail.com>, 2014
+# Daniel <danny3@tutanota.com>, 2014-2016
+# lordkag <lord.kagula@gmail.com>, 2014-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 18:10+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-12 20:11+0000\n"
"Last-Translator: lordkag <lord.kagula@gmail.com>\n"
-"Language-Team: Romanian (http://www.transifex.com/projects/p/mpc-hc/language/ro/)\n"
+"Language-Team: Romanian (http://www.transifex.com/mpc-hc/mpc-hc/language/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -19,7 +19,7 @@ msgstr ""
msgctxt "IDS_INFOBAR_LOCATION"
msgid "Location"
-msgstr "Dosar"
+msgstr "Locație"
msgctxt "IDS_INFOBAR_VIDEO"
msgid "Video"
@@ -31,7 +31,7 @@ msgstr "Audio"
msgctxt "IDS_INFOBAR_SUBTITLES"
msgid "Subtitles"
-msgstr "Subtitrări"
+msgstr "Subtitluri"
msgctxt "IDS_INFOBAR_CHAPTER"
msgid "Chapter"
@@ -55,23 +55,31 @@ msgstr "Redă CD Audio"
msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
msgid "Play DVD Movie"
-msgstr "Redă film DVD"
+msgstr "Redă filmul de pe discul DVD"
msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Proprietăți"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Fișier"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Stil implicit"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Listă de redare"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Fișiere"
msgctxt "IDS_FAVDVDS"
msgid "DVDs"
-msgstr "DVD-uri"
+msgstr "Discuri DVD"
msgctxt "IDS_INFOBAR_CHANNEL"
msgid "Channel"
@@ -83,7 +91,7 @@ msgstr "Durată"
msgctxt "IDS_STATSBAR_SYNC_OFFSET"
msgid "Sync Offset"
-msgstr "Decalaj Sync"
+msgstr "Decalaj sincronizare"
msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
msgid "avg: %d ms, dev: %d ms"
@@ -95,11 +103,11 @@ msgstr "Fluctuații"
msgctxt "IDS_STATSBAR_BITRATE"
msgid "Bitrate"
-msgstr "Rată de biţi"
+msgstr "Rată de biți"
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
-msgstr "(medie/curentă)"
+msgstr "(medie/actuală)"
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
@@ -115,7 +123,27 @@ msgstr "Stiluri"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "Dacă zona ţintă pentru randare este nedefinită, subtitrările SSA/ASS vor fi randate relativ la cadrul video, în timp ce toate celelalte subtitrări text vor fi randate relativ la fereastră."
+msgstr "Dacă zona țintă pentru randare este nedefinită, subtitlurile SSA/ASS vor fi randate relativ la cadrul video, în timp ce toate celelalte subtitluri text vor fi randate relativ la fereastră."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Mod de repetare: Listă de redare"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Mod de repetare: Fișier"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Repetare la nesfârșit: Pornită"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Repetare la nesfârșit: Oprită"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Repetă la nesfârșit"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
@@ -123,7 +151,7 @@ msgstr "Niciodată (cea mai rapidă metodă)"
msgctxt "IDS_PPAGE_CAPTURE_FG1"
msgid "Only when switching different video types (default)"
-msgstr "Doar când se schimbă tipuri video diferite (implicit)"
+msgstr "Doar când se schimbă tipurile video diferite (implicit)"
msgctxt "IDS_PPAGE_CAPTURE_FG2"
msgid "Always (slowest option)"
@@ -131,11 +159,11 @@ msgstr "Întotdeauna (cea mai lentă metodă)"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
msgid "Not supported by some devices. Two video decoders always present in the filter graph."
-msgstr "Nu este suportată de unele dispozitive. Două decodoare video sunt întotdeauna prezente în graficul filtrelor."
+msgstr "Nu este sprijinită de unele dispozitive. Două decodoare video sunt întotdeauna prezente în graficul filtrelor."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr "Rapid, cu excepţia cazului când se schimbă fluxuri video diferite. Doar un decodor video este prezent în graficul filtrelor."
+msgstr "Rapid, cu excepția cazului când se schimbă fluxuri video diferite. Doar un decodor video este prezent în graficul filtrelor."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
@@ -143,7 +171,7 @@ msgstr "Nu este recomandată. Doar pentru testare."
msgctxt "IDS_PPAGE_CAPTURE_SFG0"
msgid "Never if possible (fastest, but not supported by most filters)"
-msgstr "Niciodată, dacă este posibil (cea mai rapidă, dar nu este suportată de cele mai multe filtre)"
+msgstr "Niciodată, dacă este posibil (cea mai rapidă, dar nu este sprijinită de cele mai multe filtre)"
msgctxt "IDS_PPAGE_CAPTURE_SFG1"
msgid "Only when switching different video types (default)"
@@ -167,7 +195,7 @@ msgstr "Fără evaluare"
msgctxt "IDS_INFOBAR_CONTENT"
msgid "Content"
-msgstr "Conţinut"
+msgstr "Conținut"
msgctxt "IDS_CONTENT_MOVIE_DRAMA"
msgid "Movie/Drama"
@@ -175,23 +203,23 @@ msgstr "Film/Dramă"
msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
msgid "News/Current affairs"
-msgstr "Ştiri/Evenimente curente"
+msgstr "Știri/Evenimente actuale"
msgctxt "IDS_SPEED_UNIT_G"
msgid "GB/s"
-msgstr "GB/s"
+msgstr "GO/s"
msgctxt "IDS_FILE_FAV_ADDED"
msgid "File added to favorites"
-msgstr "Fişier adăugat la favorite"
+msgstr "Fișier adăugat la favorite"
msgctxt "IDS_DVD_FAV_ADDED"
msgid "DVD added to favorites"
-msgstr "DVD adăugat la favorite"
+msgstr "Disc DVD adăugat la favorite"
msgctxt "IDS_CAPTURE_SETTINGS"
msgid "Capture Settings"
-msgstr "Setări pentru captură"
+msgstr "Stabiliri captură"
msgctxt "IDS_NAVIGATION_BAR"
msgid "Navigation Bar"
@@ -199,7 +227,7 @@ msgstr "Bară de Navigare"
msgctxt "IDS_SUBRESYNC_CAPTION"
msgid "Subresync"
-msgstr "Resincronizare subtitrări"
+msgstr "Resincronizare subtitluri"
msgctxt "IDS_SUBRESYNC_CLN_TIME"
msgid "Time"
@@ -207,7 +235,7 @@ msgstr "Timp"
msgctxt "IDS_SUBRESYNC_CLN_END"
msgid "End"
-msgstr "Sfârşit"
+msgstr "Sfârșit"
msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
msgid "Preview"
@@ -223,7 +251,7 @@ msgstr "ID celulă"
msgctxt "IDS_SUBRESYNC_CLN_FORCED"
msgid "Forced"
-msgstr "Forţat"
+msgstr "Forțat"
msgctxt "IDS_SUBRESYNC_CLN_TEXT"
msgid "Text"
@@ -239,11 +267,11 @@ msgstr "Font"
msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
msgid "Failed to render some of the pins of the DVD Navigator filter"
-msgstr "Eşuare la randarea unora dintre pinii filtrului DVD Navigator"
+msgstr "Eșuare la randarea unora dintre pinii filtrului navigator DVD"
msgctxt "IDS_DVD_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for DVD playback"
-msgstr "Eşuare la interogarea interfeţelor necesare pentru redare DVD"
+msgstr "Eșuare la interogarea interfețelor necesare pentru redarea discului DVD"
msgctxt "IDS_CAPTURE_LIVE"
msgid "Live"
@@ -271,15 +299,15 @@ msgstr "Editorul listei de editare"
msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
msgid "The entered time is greater than the file duration."
-msgstr "Timpul introdus este mai mare decât durata fişierului."
+msgstr "Timpul introdus este mai mare decât durata fișierului."
msgctxt "IDS_MISSING_ICONS_LIB"
msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
-msgstr "Biblioteca de pictograme „mpciconlib.dll” lipseşte.\nPictograma implicită a playerului va fi folosită pentru asocierile fişierelor.\nVă rugăm să reinstalaţi MPC-HC pentru a obţine „mpciconlib.dll”."
+msgstr "Biblioteca de pictograme „mpciconlib.dll” lipsește.\nPictograma implicită a playerului va fi folosită pentru asocierile fișierelor.\nVă rugăm să reinstalați MPC-HC pentru a obține „mpciconlib.dll”."
msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
msgid "File"
-msgstr "Fişier"
+msgstr "Fișier"
msgctxt "IDS_SUBDL_DLG_LANGUAGE_COL"
msgid "Language"
@@ -326,12 +354,12 @@ msgid "On/Off"
msgstr "Pornit/Oprit"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "De la fps"
+msgid "From (FPS)"
+msgstr "De la (CPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "La fps"
+msgid "To (FPS)"
+msgstr "La (CPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -351,15 +379,15 @@ msgstr "Implicit al sistemului"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
-msgstr "Eşuare la interogarea interfeţelor necesare pentru redare"
+msgstr "Eșuare la interogarea interfețelor necesare pentru redare"
msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
msgid "Could not set target window for graph notification"
-msgstr "Nu se poate seta fereastra ţintă pentru notificările graficului"
+msgstr "Nu se poate seta fereastra țintă pentru notificările graficului"
msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
msgid "Failed to render all pins of the DVD Navigator filter"
-msgstr "Eşuare la randarea tuturor pinilor filtrului DVD Navigator"
+msgstr "Eșuare la randarea tuturor pinilor filtrului navigator DVD"
msgctxt "IDS_PLAYLIST_OPEN"
msgid "&Open"
@@ -379,11 +407,11 @@ msgstr "Ș&terge"
msgctxt "IDS_PLAYLIST_COPYTOCLIPBOARD"
msgid "&Copy to clipboard"
-msgstr "&Copiază în clipboard"
+msgstr "&Copiază în zona de transfer"
msgctxt "IDS_PLAYLIST_SAVEAS"
msgid "&Save As..."
-msgstr "&Salvează ca..."
+msgstr "&Salvare ca..."
msgctxt "IDS_PLAYLIST_SORTBYLABEL"
msgid "Sort by &label"
@@ -415,15 +443,15 @@ msgstr "D&uplică"
msgctxt "IDS_SUBRESYNC_RESET"
msgid "&Reset"
-msgstr "&Resetează"
+msgstr "&Restabilește"
msgctxt "IDS_MPLAYERC_104"
msgid "Subtitle Delay -"
-msgstr "Întârziere subtitrare -"
+msgstr "Întârziere subtitlu -"
msgctxt "IDS_MPLAYERC_105"
msgid "Subtitle Delay +"
-msgstr "Întârziere subtitrare +"
+msgstr "Întârziere subtitlu +"
msgctxt "IDS_FILE_SAVE_THUMBNAILS"
msgid "Save thumbnails"
@@ -443,7 +471,7 @@ msgstr "Redare::DVD/OGM"
msgctxt "IDD_PPAGESUBTITLES"
msgid "Subtitles"
-msgstr "Subtitrări"
+msgstr "Subtitluri"
msgctxt "IDD_PPAGEFORMATS"
msgid "Player::Formats"
@@ -463,7 +491,35 @@ msgstr "Filtre externe"
msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
-msgstr "Redare::Shadere"
+msgstr "Redare::Nuanțatoare"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Resurse"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Diverse"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Redare::Captură"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Redare::Stabiliri randor Sincronizare"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Redare::Ecran complet"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Filtre interne::Randor audio"
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
@@ -475,7 +531,7 @@ msgstr "Versiune nouă a bibliotecii de pictograme"
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
-msgstr "Doriţi să reasociaţi pictogramele?"
+msgstr "Doriți să reasociați pictogramele?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
@@ -487,31 +543,23 @@ msgstr "Randor video vechi"
msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
-msgstr "Randor Mixare Overlay"
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "VMR-7 - Randor Mixare Video 7 (în fereastră)"
+msgstr "Randor amestecător strat suprapus"
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
-msgstr "VMR-9 - Randor Mixare Video 9 (în fereastră)"
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "VMR-7 - Randor Mixare Video 7 (fără randare)"
+msgstr "VMR-9 - Randor amestecare video 9 (în fereastră)"
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
-msgstr "VMR-9 - Randor Mixare Video 9 (fără randare)"
+msgstr "VMR-9 - Randor amestecare video 9 (fără randare)"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
-msgstr "EVR - Randor video îmbunătăţit"
+msgstr "EVR - Randor video îmbunătățit"
msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
msgid "Enhanced Video Renderer (custom presenter)"
-msgstr "EVR (CP) - Randor video îmbunătăţit (prezentator special)"
+msgstr "EVR (CP) - Randor video îmbunătățit (prezentator special)"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
@@ -535,7 +583,7 @@ msgstr "Player::Taste rapide"
msgctxt "IDD_PPAGESUBSTYLE"
msgid "Subtitles::Default Style"
-msgstr "Subtitrări::Stil implicit"
+msgstr "Subtitluri::Stil implicit"
msgctxt "IDD_PPAGEINTERNALFILTERS"
msgid "Internal Filters"
@@ -553,41 +601,13 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Player::Interfață web"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Subtitrări::Bază de date"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Resurse"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Diverse"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Redare::Captură"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Redare::Setările Randorului Sync"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Redare::Ecran complet"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Detalii"
msgctxt "IDD_FILEPROPCLIP"
msgid "Clip"
-msgstr "Informaţii"
+msgstr "Informații"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
@@ -599,30 +619,22 @@ msgstr "Acesta este randorul implicit pentru Windows 9x/me/2k. În funcție de v
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "Randează întotdeauna în overlay (suprapunere). În mod normal doar formatele YUV sunt permise, dar ele sunt prezentate direct fără nicio conversie de culoare către RGB. Aceasta este cea mai rapidă metodă de randare dintre toate și singura în care puteți fi sigur(ă) de oglindirea/recopierea videoului în ecran complet la activarea tv-out (Ieşire TV)."
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Randorul implicit pentru Windows XP. Foarte stabil și doar puțin mai încet decât mixarea Overlay. Folosește DirectDraw și rulează în Overlay atunci când poate."
+msgstr "Randează întotdeauna într-un strat suprapus. În mod normal doar formatele YUV sunt permise, dar ele sunt prezentate direct fără nicio conversie de culoare către RGB. Aceasta este cea mai rapidă metodă de randare dintre toate și singura în care puteți fi sigur(ă) de oglindirea/recopierea videoului în ecran complet la activarea ieșirii tv (tv-out)."
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Disponibil numai dacă aveți DirectX 9 instalat. Are aceleași abilităţi ca și VMR-7 (în fereastră), dar nu va folosi niciodată randare în Overlay și din această cauză s-ar putea să fie puțin mai încet decât VMR-7 (în fereastră)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Asemănător cu VMR-7 (în fereastră), dar cu modulul Allocator-Presenter din MPC-HC pentru subtitrări. Oglindirea video în overlay NU va funcționa. Spațiul de culori recomandat pentru desktop este „True Color”."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Disponibil numai dacă aveți DirectX 9 instalat. Foarte stabil, dar nu va folosi niciodată randare în strat suprapus și din această cauză s-ar putea să fie puțin mai încet decât randorul amestecător strat suprapus."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
-msgstr "Asemănător cu VMR-9 (în fereastră), dar cu modulul Allocator-Presenter din MPC-HC pentru subtitrări. Oglindirea video în overlay S-AR PUTEA să funcționeze. Spațiul de culori recomandat pentru desktop este „True Color”. Recomandat pentru Windows XP."
+msgstr "Asemănător cu VMR-9 (în fereastră), dar cu modulul Allocator-Presenter din MPC-HC pentru subtitluri. Oglindirea video în strat suprapus S-AR PUTEA să funcționeze. Spațiul de culori recomandat pentru desktop este „True Color”. Recomandat pentru Windows XP."
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
-msgstr "Asemănător cu VMR-9 (fără randare), dar foloseşte o redimensionare bicubică în doi paşi adevărată."
+msgstr "Asemănător cu VMR-9 (fără randare), dar folosește o redimensionare bicubică în doi pași adevărată."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Se conectează la orice tip de media video și mostrele video nu vor fi trimise niciunde. Folosiți-l când nu aveți nevoie de afișarea video și vreți să salvați procesorul de la o muncă inutilă."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -631,27 +643,23 @@ msgstr "La fel ca randorul normal Null, dar acesta se va conecta doar la tipuril
msgctxt "IDC_DSEVR"
msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
-msgstr "Disponibil doar pentru Vista sau mai nou, sau pentru XP cu cel puţin .NET Framework 3.5 instalat."
+msgstr "Disponibil doar pentru Vista sau mai nou, sau pentru XP cu cel puțin .NET Framework 3.5 instalat."
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr "Asemănător cu EVR, dar cu modulul Allocator-Presenter din MPC-HC pentru subtitrare şi postprocesare. Recomandat pentru Windows Vista sau mai nou."
+msgstr "Asemănător cu EVR, dar cu modulul Allocator-Presenter din MPC-HC pentru subtitlu și postprocesare. Recomandat pentru Windows Vista sau mai nou."
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
-msgstr "Randor de calitate înaltă, necesită o placă grafică ce suportă D3D9 sau mai nou."
+msgstr "Randor de calitate ridicată, necesită o placă grafică ce sprijină D3D9 sau mai nou."
msgctxt "IDC_DSSYNC"
msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
-msgstr "Asemănător cu EVR (CP), dar oferă câteva opţiuni pentru a sincroniza rata cadrelor video cu rata de reîmprospătare a dispozitivului de afișare pentru a elimina cadrele video sărite sau duplicate."
+msgstr "Asemănător cu EVR (CP), dar oferă câteva opțiuni pentru a sincroniza rata cadrelor video cu rata de reîmprospătare a dispozitivului de afișare pentru a elimina cadrele video sărite sau duplicate."
msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Randor propriu al Real. Scripturile SMIL vor funcționa, dar interacțiunea puțin probabil. Folosește DirectDraw și rulează în Overlay atunci când poate."
-
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Ieșirea motorului Real randată de modulul Allocator-Presenter bazat pe DX7 al lui VMR-7 (fără randare)."
+msgstr "Randor propriu al lui Real. Scripturile SMIL vor funcționa, dar interacțiunea puțin probabil. Folosește DirectDraw și rulează în strat suprapus atunci când poate."
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
@@ -661,10 +669,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Randor propriu al QuickTime. Încetinește puțin atunci când zona video este redimensionată sau este acoperită parțial de altă fereastră. Când Overlay nu este disponibil preferă să revină la GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Ieșirea motorului QuickTime randată de modulul Allocator-Presenter bazat pe DX7 al lui VMR-7 (fără randare)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Ieșirea motorului QuickTime randată de modulul Allocator-Presenter bazat pe DX9 al lui VMR-9 (fără randare)."
@@ -673,33 +677,21 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Suprafața video va fi alocată ca o suprafață normală offscreen."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "Randorul Audio MPC este stricat, nu îl folosiţi."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
-msgstr "Randor Sync"
-
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Raportare o eroare"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC tocmai s-a închis neaşteptat, dar această versiune nu a fost compilată cu informaţii pentru depanare. \nDacă doriţi să raportaţi această eroare, ar trebui să încercaţi mai întâi o versiune oficială.\n\nDoriţi să vizitaţi pagina pentru descărcare acum?"
+msgstr "Randor Sincronizare"
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
-msgstr "Suprafaţă netedă offscreen obişnuită"
+msgstr "Suprafață netedă offscreen obișnuită"
msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
msgid "2D surfaces"
-msgstr "suprafeţe 2D"
+msgstr "suprafețe 2D"
msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
msgid "3D surfaces (recommended)"
-msgstr "suprafeţe 3D (recomandat)"
+msgstr "suprafețe 3D (recomandat)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
@@ -707,23 +699,23 @@ msgstr "Cel mai apropiat vecin"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
msgid "Bilinear"
-msgstr "Biliniar"
+msgstr "Biliniară"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
msgid "Bilinear (PS 2.0)"
-msgstr "Biliniar (PS 2.0)"
+msgstr "Biliniară (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
msgid "Bicubic A=-0.60 (PS 2.0)"
-msgstr "Bicubic A=-0.60 (PS 2.0)"
+msgstr "Bicubică A=-0.60 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
msgid "Bicubic A=-0.75 (PS 2.0)"
-msgstr "Bicubic A=-0.75 (PS 2.0)"
+msgstr "Bicubică A=-0.75 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
msgid "Bicubic A=-1.00 (PS 2.0)"
-msgstr "Bicubic A=-1.00 (PS 2.0)"
+msgstr "Bicubică A=-1.00 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
msgid "**unavailable**"
@@ -741,9 +733,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null - Fără randare video (formate necomprimate)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Randor audio MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Randor audio intern"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -755,11 +747,15 @@ msgstr "Tip MIME"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr "Pentru a vedea o resursă încorporată în browser-ul dumneavoastră trebuie să activaţi interfaţa web.\n\nFolosiţi butonul „Salvează ca” dacă doriţi doar să salvaţi infomaţia."
+msgstr "Pentru a vedea o resursă încorporată în browser-ul dumneavoastră trebuie să activați interfața web.\n\nFolosiți butonul „Salvează ca” dacă doriți doar să salvați informația."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Descarcă subtitrări"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Descărcare subtitluri..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Încărcare subtitluri..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -775,39 +771,39 @@ msgstr "Nu există taste rapide (scurtături) pentru exportare."
msgctxt "IDS_RFS_NO_FILES"
msgid "No media files found in the archive"
-msgstr "Nu s-au găsit fişiere media în arhivă"
+msgstr "Nu s-au găsit fișiere media în arhivă"
msgctxt "IDS_RFS_COMPRESSED"
msgid "Compressed files are not supported"
-msgstr "Fişierele comprimate nu sunt suportate"
+msgstr "Fișierele comprimate nu sunt compatibile"
msgctxt "IDS_RFS_ENCRYPTED"
msgid "Encrypted files are not supported"
-msgstr "Fişierele criptate nu sunt suportate"
+msgstr "Fișierele criptate nu sunt compatibile"
msgctxt "IDS_RFS_MISSING_VOLS"
msgid "Couldn't find all archive volumes"
msgstr "Nu s-au găsit toate volumele arhivei"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Suprafața video va fi alocată ca o textură dar tot funcțiile 2D vor fi folosite pentru copierea și întinderea în backbuffer. Este necesară o placă video care poate aloca texturi pe 32 de biți RGBA, de mărimi care nu sunt puteri ale lui doi și cel puțin la rezoluția videoului."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Suprafața video va fi alocată ca o textură, dar tot funcțiile 2D vor fi folosite pentru copierea și întinderea în backbuffer. Este necesară o placă video care poate aloca texturi pe 32 de biți RGBA, de mărimi care nu sunt puteri ale lui doi și cel puțin la rezoluția videoului."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
-msgstr "Suprafața video va fi alocată ca o textură și desenată ca două triunghiuri în 3D. Activarea dezimțuirii (antialiasing) din setările de afișare ar putea avea un efect negativ asupra vitezei de randare."
+msgstr "Suprafața video va fi alocată ca o textură și desenată ca două triunghiuri în 3D. Activarea dezimțuirii (antialiasing) din stabilirile de afișare ar putea avea un efect negativ asupra vitezei de randare."
msgctxt "IDC_DX9RESIZER_COMBO"
msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
-msgstr "Dacă nu există suport pentru Pixel Shader 2.0, biliniar simplu este folosit automat."
+msgstr "Dacă nu există sprijin pentru Nuanțatorul de pixeli 2.0, biliniară simplă este folosită automat."
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
-msgstr "Pune VMR-9 (fără randare) în mod mixare, aceasta înseamnă că majoritatea controalelor de pe pagina proprie de proprietăți vor funcționa și va folosi un fir de execuţie secundar separat pentru randarea cadrelor."
+msgstr "Pune VMR-9 (fără randare) în modul amestecător, aceasta înseamnă că majoritatea controalelor de pe pagina proprie de proprietăți vor funcționa și va folosi un fir de execuție secundar separat pentru randarea cadrelor."
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
-msgstr "Îmbunătăţeste performanţa cu costul unei compatibilităţi cu randorul."
+msgstr "Îmbunătățește performanta cu costul unei compatibilități cu randorul."
msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
msgid "Reduces tearing but prevents the toolbar from being shown."
@@ -815,7 +811,19 @@ msgstr "Reduce efectul de rupere (tearing), dar împiedică afișarea barei de i
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
-msgstr "Reduce efectul de rupere (tearing) prin ocolirea sincronizării verticale (VSync) implicite încorporate în D3D."
+msgstr "Reduce efectul de rupere (tearing) prin ocolirea sincronizării verticale implicite încorporate în D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Scanare prinzător"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Subtitlurile nu sunt încărcate sau randorul este nesprijinit."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Stochează nuanțatoarele compilate în dosarul AppData local pentru a accelera timpul de încărcare."
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
@@ -823,7 +831,7 @@ msgstr "Deschideți VTS_xx_0.ifo pentru a încărca fișierele VTS_xx_x.vob dint
msgctxt "IDS_SRC_RFS"
msgid "Based on RARFileSource, doesn't support compressed files"
-msgstr "Bazat pe RARFileSource, nu suportă fişiere comprimate"
+msgstr "Bazat pe RARFileSource, nu sprijină fișierele comprimate"
msgctxt "IDS_INTERNAL_LAVF"
msgid "Uses LAV Filters"
@@ -839,19 +847,19 @@ msgstr "Comută bara de navigare"
msgctxt "IDS_AG_VSYNCACCURATE"
msgid "Accurate VSync"
-msgstr "VSync precis"
+msgstr "Sincronizare verticală precisă"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr "Dacă zona ţintă pentru randare este nedefinită, aceasta va fi moştenită din stilul implicit."
+msgstr "Dacă zona țintă pentru randare este nedefinită, aceasta va fi moștenită din stilul implicit."
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
-msgstr "Dezactivează animația subtitrărilor. Activarea acestei opțiuni va micșora folosirea procesorului. O puteți folosi dacă întâmpinați subtitrări ce clipesc."
+msgstr "Dezactivează animația subtitlurilor. Activarea acestei opțiuni va reduce folosirea procesorului. O puteți folosi dacă întâmpinați subtitluri ce clipesc."
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr "Creșterea numărului de imagini subtitrare pentru preîncărcare ar trebui, în general, să îmbunătățească performanța randării, cu costul creșterii memoriei video utilizate de GPU."
+msgstr "Creșterea numărului de imagini subtitlu pentru preîncărcare ar trebui, în general, să îmbunătățească performanța randării, cu costul creșterii memoriei video utilizate de placa video."
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
@@ -859,7 +867,7 @@ msgstr "După ce dați clic pe acest buton, starea bifată a grupului de formate
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr "Dezactivarea acestei opțiuni va preveni clipirea subtitrărilor, cu riscul abandonării unor cadre video de către randorul video."
+msgstr "Dezactivarea acestei opțiuni va preveni clipirea subtitlurilor, cu riscul omiterii unor cadre video de către randorul video."
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -867,11 +875,11 @@ msgstr "Redă\nRedă"
msgctxt "ID_PLAY_PAUSE"
msgid "Pause\nPause"
-msgstr "Pauză\nPauză"
+msgstr "Pauzează\nPauzează"
msgctxt "ID_PLAY_STOP"
msgid "Stop\nStop"
-msgstr "Stop\nStop"
+msgstr "Oprește\nOprește"
msgctxt "ID_PLAY_FRAMESTEP"
msgid "Step\nStep"
@@ -879,19 +887,19 @@ msgstr "Avansează câte un cadru\nAvansează câte un cadru"
msgctxt "ID_PLAY_DECRATE"
msgid "Decrease speed\nDecrease speed"
-msgstr "Micșorează viteză\nMicșorează viteză"
+msgstr "Micșorare viteză\nMicșorează viteza"
msgctxt "ID_PLAY_INCRATE"
msgid "Increase speed\nIncrease speed"
-msgstr "Mărește viteză\nMărește viteză"
+msgstr "Mărire viteză\nMărește viteza"
msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
-msgstr "Silențios"
+msgstr "Tăcut"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
-msgstr "Activare sunet"
+msgstr "Activează sunet"
msgctxt "ID_VOLUME_MUTE_DISABLED"
msgid "No audio"
@@ -911,7 +919,7 @@ msgstr "&Original"
msgctxt "IDS_SUBRESYNC_CURRENT"
msgid "&Current"
-msgstr "&Curent"
+msgstr "&Actual"
msgctxt "IDS_SUBRESYNC_EDIT"
msgid "&Edit"
@@ -939,11 +947,11 @@ msgstr "Opțiuni"
msgctxt "IDS_SHADERS_SELECT"
msgid "&Select Shaders..."
-msgstr "&Selectare Shadere Pixeli..."
+msgstr "&Selectare nuanțatoare..."
msgctxt "IDS_SHADERS_DEBUG"
msgid "&Debug Shaders..."
-msgstr "&Depanare Shadere..."
+msgstr "&Depanare nuanțatoare..."
msgctxt "IDS_FAVORITES_ADD"
msgid "&Add to Favorites..."
@@ -954,11 +962,11 @@ msgid "&Organize Favorites..."
msgstr "&Organizare favorite..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Amestecă"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Deschide dosarul fișierului"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -971,7 +979,7 @@ msgstr "În redare"
msgctxt "IDS_CONTROLS_PAUSED"
msgid "Paused"
-msgstr "În pauză"
+msgstr "Pauzat"
msgctxt "IDS_AG_EDL_NEW_CLIP"
msgid "EDL new clip"
@@ -1007,23 +1015,23 @@ msgstr "EDL: Punct de ieșire"
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
-msgstr "PnS: Rotație X-"
+msgstr "Panoramare trunchiată: Rotește X-"
msgctxt "IDS_AG_PNS_ROTATEY_P"
msgid "PnS Rotate Y+"
-msgstr "PnS: Rotație Y+"
+msgstr "Panoramare trunchiată: Rotește Y+"
msgctxt "IDS_AG_PNS_ROTATEY_M"
msgid "PnS Rotate Y-"
-msgstr "PnS: Rotație Y-"
+msgstr "Panoramare trunchiată: Rotește Y-"
msgctxt "IDS_AG_PNS_ROTATEZ_P"
msgid "PnS Rotate Z+"
-msgstr "PnS: Rotație Z+"
+msgstr "Panoramare trunchiată: Rotește Z+"
msgctxt "IDS_AG_PNS_ROTATEZ_M"
msgid "PnS Rotate Z-"
-msgstr "PnS: Rotație Z-"
+msgstr "Panoramare trunchiată: Rotește Z-"
msgctxt "IDS_AG_TEARING_TEST"
msgid "Tearing Test"
@@ -1031,18 +1039,18 @@ msgstr "Test de rupere (tearing)"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
-msgstr "Scalează la 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Scalează pentru televizor 16:9,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_WIDESCREEN"
msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Mărește la Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Scalează pentru ecran lat,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_SCALE_ULTRAWIDE"
msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
-msgstr "Mărește la Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Scalează pentru ecran ultra-lat,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Ascunde în modul ecran complet"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1163,39 +1171,39 @@ msgstr "Deschide fișier"
msgctxt "IDS_AG_OPEN_DVD"
msgid "Open DVD/BD"
-msgstr "Deschide DVD/BD"
+msgstr "Deschide disc DVD/BD"
msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
msgid "Failed to set post-resize shaders"
-msgstr "Eșuare la setarea shaderelor post-redimensionare"
+msgstr "Eșuare la stabilirea nuanțatoarelor post-redimensionare"
msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
msgid "Failed to set both pre-resize and post-resize shaders"
-msgstr "Eșuare la setarea shaderelor pre-redimensionare și post-redimensionare"
+msgstr "Eșuare la stabilirea nuanțatoarelor pre-redimensionare și post-redimensionare"
msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
msgid "Shaders are recompiled automatically when the corresponding files are modified."
-msgstr "Shaderele sunt recompilate automat atunci când fișierele corespunzătoare sunt modificate."
+msgstr "Nuanțatoarele sunt recompilate automat atunci când fișierele corespunzătoare sunt modificate."
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
-msgstr "Nu se poate încărca %s, shaderele pixeli nu vor funcționa."
+msgstr "Nu se poate încărca %s, nuanțatoarele de pixeli nu vor funcționa."
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
-msgstr "Nu se pot găsi punctele de intrare necesare ale funcției în %s, shaderele pixeli nu vor funcționa."
+msgstr "Nu se pot găsi punctele de intrare ale funcției necesare în %s, nuanțatoarele de pixeli nu vor funcționa."
msgctxt "IDS_OSD_SHADERS_PRESET"
msgid "Shader preset: %s"
-msgstr "Setare prestabilită pentru shader: %s"
+msgstr "Prestabilire nuanțator: %s"
msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
msgid "Next Shader Preset"
-msgstr "Următoarea setare prestabilită pentru shader"
+msgstr "Următoarea prestabilire nuanțator"
msgctxt "IDS_AG_SHADERS_PRESET_PREV"
msgid "Prev Shader Preset"
-msgstr "Precedenta setare prestabilită pentru shader"
+msgstr "Precedenta prestabilire nuanțator"
msgctxt "IDS_STRING_COLON"
msgid "%s:"
@@ -1230,7 +1238,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Adaugă dosar cu conținut"
msgctxt "IDS_HW_INDICATOR"
@@ -1247,11 +1255,11 @@ msgstr "Rata de redare"
msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
msgid "&Copy filters list to clipboard"
-msgstr "&Copiază lista de filtre în clipboard"
+msgstr "&Copiază lista de filtre în zona de transfer"
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
-msgstr "Introduceți datele de autentificare pe server"
+msgstr "Introduceți datele de autentificare pe servitor"
msgctxt "IDS_CREDENTIALS_CONNECT"
msgid "Enter your credentials to connect"
@@ -1263,15 +1271,15 @@ msgstr "Salvează stil personalizat"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
-msgstr "Educaţie/Ştiinţă/Subiecte actuale"
+msgstr "Educație/Știință/Subiecte actuale"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
-msgstr "Ascunde controale şi panouri de asemenea în modul fereastră."
+msgstr "Ascunde controalele și panourile și în modul fereastră."
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr "Împiedică încărcarea randorului extern de subtitrări când cel intern este în folosinţă."
+msgstr "Împiedică încărcarea randorului extern de subtitluri când cel intern este în folosință."
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
@@ -1283,7 +1291,7 @@ msgstr "Valoare"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr "Numărul maxim de fişiere afişate în meniul „Fişiere recente” şi a căror poziţie este posibil să fie salvată."
+msgstr "Numărul maxim de fișiere afișate în meniul „Fișiere recente” și a căror poziție este posibil să fie salvată."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
@@ -1303,7 +1311,7 @@ msgstr "Redă următorul fișier din dosar"
msgctxt "IDS_AFTER_PLAYBACK_REWIND"
msgid "Rewind current file"
-msgstr "Derulează înapoi fișierul curent"
+msgstr "Derulează înapoi fișierul actual"
msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
msgid "Close"
@@ -1311,7 +1319,7 @@ msgstr "Închide"
msgctxt "IDS_AFTER_PLAYBACK_EXIT"
msgid "Exit"
-msgstr "Ieșire"
+msgstr "Închide programul"
msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
msgid "Turn off the monitor"
@@ -1331,11 +1339,87 @@ msgstr "Mărimea maximă (NxN px) a unei coperți de album în timpul redării u
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr "Întârzierea subtitrării va scade/crește cu această valoare de fiecare dată când tastele rapide corespunzătoare vor fi utilizate (%s/%s)."
+msgstr "Întârzierea subtitlului va scade/crește cu această valoare de fiecare dată când tastele rapide corespunzătoare vor fi utilizate (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<nedefinit>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Vizualizează"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Mută în sus"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Mută în jos"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sortează după numărul logic al canalului - LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Elimină toate"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Sigur doriți să ștergeți toate canalele din listă?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Nu sunt disponibile informații"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Vă rugăm să așteptați, analiza este în curs..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "RA %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Activează jurnalizare în fișier (necesită repornire)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Timp rămas"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Precizie ridicată"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "După redare: Derulează înapoi fișierul actual"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "După redare: Închide"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC a întâmpinat o problemă în timpul inițializării. Cu ajutorul dumneavoastră ar fi posibil să rezolvăm această problemă.\n\nDoriți să o raportați?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Introduceți o valoare pozitivă dacă sunetul e înainte, o valoare negativă dacă e în urmă."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Previzualizarea este dezactivată momentan. Poate fi activată din opțiunile MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Această opțiune poate fi folosită pentru a previzualiza fișiere media de la distanță. Folosiți-o doar într-o rețea privată securizată corespunzător.\n\nSigur doriți să activați această opțiune?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Randor subtitluri intern"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1357,13 +1441,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Imagine salvată cu succes"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Încarcă subtitrare"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Încărcare subtitluri..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Salvează subtitrare"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Salvare subtitluri..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1375,22 +1459,22 @@ msgstr "Ieșire"
msgctxt "IDS_AG_PLAYPAUSE"
msgid "Play/Pause"
-msgstr "Redă/Pauză"
+msgstr "Redă/Pauzează"
msgctxt "IDS_AG_PLAY"
msgid "Play"
-msgstr "Redă"
+msgstr "Redare"
msgctxt "IDS_AG_STOP"
msgid "Stop"
msgstr "Oprire"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Cadrul următor"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Cadrul precedent"
msgctxt "IDS_AG_GO_TO"
@@ -1427,11 +1511,11 @@ msgstr "Social/Probleme politice/Economie"
msgctxt "IDS_CONTENT_LEISURE"
msgid "Leisure hobbies"
-msgstr "Activităţi pentru timpul liber"
+msgstr "Activități pentru timpul liber"
msgctxt "IDS_FILE_RECYCLE"
msgid "Move to Recycle Bin"
-msgstr "Mută în Coșul de reciclare"
+msgstr "Mută în coșul de reciclare"
msgctxt "IDS_AG_SAVE_COPY"
msgid "Save a Copy"
@@ -1463,7 +1547,7 @@ msgstr "Arată când se trece peste controale, ascunde după:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
-msgstr "Eșuare la setarea shaderelor pre-redimensionare"
+msgstr "Eșuare la stabilirea nuanțatoarelor pre-redimensionare"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
@@ -1475,23 +1559,23 @@ msgstr "Corecție de timp a cadrelor: Dezactivată"
msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
msgid "Target VSync Offset: %.1f"
-msgstr "Decalaj VSync vizat: %.1f"
+msgstr "Decalaj sincronizare verticală vizată: %.1f"
msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
msgid "VSync Offset: %d"
-msgstr "Decalaj VSync: %d"
+msgstr "Decalaj sincronizare verticală: %d"
msgctxt "IDS_OSD_SPEED"
msgid "Speed: %.2lfx"
-msgstr "Viteză redare: %.2lfx"
+msgstr "Viteză de redare: %.2lfx"
msgctxt "IDS_OSD_THUMBS_SAVED"
msgid "Thumbnails saved successfully"
msgstr "Miniaturi salvate cu succes"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Flux &video"
+msgid "Vide&o Track"
+msgstr "Pistă &video"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1499,19 +1583,19 @@ msgstr "Un&ghi video"
msgctxt "IDS_RESET_SETTINGS"
msgid "Reset settings"
-msgstr "Resetează setările"
+msgstr "Restabilește stabilirile"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "Sigur doriți să restaurați MPC-HC la setările implicite?\nTrebuie să știți că TOATE setările curente vor fi pierdute!"
+msgstr "Sigur doriți să restaurați MPC-HC la stabilirile lui implicite?\nTrebuie să știți că TOATE stabilirile (configurările) actuale vor fi pierdute!"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr "Închideți toate instanțele programului MPC-HC pentru ca setările implicite să poată fi restaurate."
+msgstr "Închideți toate instanțele programului MPC-HC pentru ca stabilirile implicite să poată fi restaurate."
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
-msgstr "Exportă setările"
+msgstr "Exportă stabilirile"
msgctxt "IDS_EXPORT_SETTINGS_WARNING"
msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
@@ -1519,7 +1603,7 @@ msgstr "Unele modificări nu au fost încă salvate.\nDoriți să le salvați î
msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
msgid "The settings have been successfully exported."
-msgstr "Setările au fost exportate cu succes."
+msgstr "Stabilirile au fost exportate cu succes."
msgctxt "IDS_EXPORT_SETTINGS_FAILED"
msgid "The export failed! This can happen when you don't have the correct rights."
@@ -1535,14 +1619,14 @@ msgstr "Micșorează rata"
msgctxt "IDS_AG_RESET_RATE"
msgid "Reset Rate"
-msgstr "Resetează rata"
+msgstr "Restabilește rata"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Întârziere audio +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Întârziere audio -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1599,28 +1683,68 @@ msgstr "Comută ecran complet Direct3D"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
-msgstr "Du-te la subtitrarea anterioară"
+msgstr "Du-te la subtitlul anterior"
msgctxt "IDS_MPLAYERC_101"
msgid "Goto Next Subtitle"
-msgstr "Du-te la subtitrarea următoare"
+msgstr "Du-te la subtitlul următor"
msgctxt "IDS_MPLAYERC_102"
msgid "Shift Subtitle Left"
-msgstr "Deplasează subtitrarea la stânga"
+msgstr "Deplasează subtitlul la stânga"
msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
-msgstr "Deplasează subtitrarea la dreapta"
-
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Afișează statistici"
+msgstr "Deplasează subtitlul la dreapta"
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Sari la început"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Arată numele fișierului"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Redare disc DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Redare BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Afișează statistici randor"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Restabilire statistici randor"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Subtitluri::Diverse"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Ascunde mar&gini"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Doar cadru video"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "&Arată Titlu && Meniu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Ascunde &meniul"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Avansate"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Vizualizare minimală"
@@ -1643,7 +1767,7 @@ msgstr "Ecran complet (fără schimbare rez.)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT"
msgid "Zoom Auto Fit"
-msgstr "Autopotrivire scalare"
+msgstr "Potrivire automată scalare"
msgctxt "IDS_AG_VIDFRM_HALF"
msgid "VidFrm Half"
@@ -1663,31 +1787,31 @@ msgstr "Întotdeauna în prim plan"
msgctxt "IDS_AG_PNS_INC_SIZE"
msgid "PnS Inc Size"
-msgstr "PnS: Crește mărimea"
+msgstr "Panoramare trunchiată: Crește mărimea"
msgctxt "IDS_AG_PNS_INC_WIDTH"
msgid "PnS Inc Width"
-msgstr "PnS: Crește lățimea"
+msgstr "Panoramare trunchiată: Crește lățimea"
msgctxt "IDS_MPLAYERC_47"
msgid "PnS Inc Height"
-msgstr "PnS: Crește înălțimea"
+msgstr "Panoramare trunchiată: Crește înălțimea"
msgctxt "IDS_AG_PNS_DEC_SIZE"
msgid "PnS Dec Size"
-msgstr "PnS: Scade mărimea"
+msgstr "Panoramare trunchiată: Scade mărimea"
msgctxt "IDS_AG_PNS_DEC_WIDTH"
msgid "PnS Dec Width"
-msgstr "PnS: Scade lățimea"
+msgstr "Panoramare trunchiată: Scade lățimea"
msgctxt "IDS_MPLAYERC_50"
msgid "PnS Dec Height"
-msgstr "PnS: Scade înălțimea"
+msgstr "Panoramare trunchiată: Scade înălțimea"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Descărcare subtitrare/subtitrări, vă rugăm să aşteptaţi."
+msgid "Downloading [%s] \"%s\""
+msgstr "Se descarcă [%s] „%s”"
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1695,15 +1819,15 @@ msgstr "Analizare listă..."
msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
msgid "No subtitles found."
-msgstr "Nu s-au găsit subtitrări."
+msgstr "Nu s-au găsit subtitluri."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr "Nr. subtitrări disponibile: %d"
+msgid "%d subtitle(s) available."
+msgstr "Nr. de subtitluri disponibile: %d"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "Doriţi să verificaţi periodic pentru actualizări ale MPC-HC?\n\nAceastă caracteristică poate fi dezactivată mai târziu din pagina de opţiuni Diverse."
+msgstr "Doriți să verificați periodic pentru actualizări ale MPC-HC?\n\nAceastă caracteristică poate fi dezactivată mai târziu din pagina de opțiuni Diverse."
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1727,7 +1851,7 @@ msgstr "Autopotrivire (doar cele mari)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
msgid "Zoom Auto Fit (Larger Only)"
-msgstr "Autopotrivire scalare (doar cele mari)"
+msgstr "Potrivire automată scalare (doar cele mari)"
msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
msgid "Zoom: Auto (Larger Only)"
@@ -1735,7 +1859,7 @@ msgstr "Scalare: Automată (doar cele mari)"
msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
msgid "Double click to open file location"
-msgstr "Dublu-clic pentru a deschide dosarul fişierului"
+msgstr "Clic dublu pentru a deschide dosarul fișierului"
msgctxt "IDS_TOOLTIP_REMAINING_TIME"
msgid "Toggle between elapsed and remaining time"
@@ -1747,43 +1871,43 @@ msgstr "Întârzierea nu este validă"
msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
msgid "Please enter a number between 1 and 365."
-msgstr "Introduceţi un număr între 1 şi 365."
+msgstr "Introduceți un număr între 1 și 365."
msgctxt "IDS_AG_PNS_CENTER"
msgid "PnS Center"
-msgstr "PnS: Centrare"
+msgstr "Panoramare trunchiată: Centrează"
msgctxt "IDS_AG_PNS_LEFT"
msgid "PnS Left"
-msgstr "PnS: Deplasare la stânga"
+msgstr "Panoramare trunchiată: Deplasează la stânga"
msgctxt "IDS_AG_PNS_RIGHT"
msgid "PnS Right"
-msgstr "PnS: Deplasare la dreapta"
+msgstr "Panoramare trunchiată: Deplasează la dreapta"
msgctxt "IDS_AG_PNS_UP"
msgid "PnS Up"
-msgstr "PnS: Deplasare în sus"
+msgstr "Panoramare trunchiată: Deplasează în sus"
msgctxt "IDS_AG_PNS_DOWN"
msgid "PnS Down"
-msgstr "PnS: Deplasare în jos"
+msgstr "Panoramare trunchiată: Deplasează în jos"
msgctxt "IDS_AG_PNS_UPLEFT"
msgid "PnS Up/Left"
-msgstr "PnS: Deplasare în Sus/Stânga"
+msgstr "Panoramare trunchiată: Deplasează în sus/stânga"
msgctxt "IDS_AG_PNS_UPRIGHT"
msgid "PnS Up/Right"
-msgstr "PnS: Deplasare în Sus/Drepta"
+msgstr "Panoramare trunchiată: Deplasează în sus/drepta"
msgctxt "IDS_AG_PNS_DOWNLEFT"
msgid "PnS Down/Left"
-msgstr "PnS: Deplasare în Jos/Stânga"
+msgstr "Panoramare trunchiată: Deplasează în jos/stânga"
msgctxt "IDS_MPLAYERC_59"
msgid "PnS Down/Right"
-msgstr "PnS: Deplasare în Jos/Dreapta"
+msgstr "Panoramare trunchiată: Deplasare în jos/dreapta"
msgctxt "IDS_AG_VOLUME_UP"
msgid "Volume Up"
@@ -1795,7 +1919,7 @@ msgstr "Scade Volum"
msgctxt "IDS_AG_VOLUME_MUTE"
msgid "Volume Mute"
-msgstr "Silențios"
+msgstr "Tăcut"
msgctxt "IDS_MPLAYERC_63"
msgid "DVD Title Menu"
@@ -1807,7 +1931,7 @@ msgstr "Meniu DVD principal"
msgctxt "IDS_MPLAYERC_65"
msgid "DVD Subtitle Menu"
-msgstr "Meniu DVD pentru subtitrări"
+msgstr "Meniu DVD pentru subtitluri"
msgctxt "IDS_MPLAYERC_66"
msgid "DVD Audio Menu"
@@ -1847,19 +1971,19 @@ msgstr "Meniu DVD: înapoi"
msgctxt "IDS_MPLAYERC_75"
msgid "DVD Menu Leave"
-msgstr "Meniu DVD: ieşire"
+msgstr "Meniu DVD: ieșire"
msgctxt "IDS_AG_BOSS_KEY"
msgid "Boss key"
msgstr "Tastă <Vine șefu!>"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Meniu player (scurt)"
+msgid "Player Menu"
+msgstr "Meniu player"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Meniu player (lung)"
+msgid "Player Menu (full)"
+msgstr "Meniu player (complet)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1870,44 +1994,28 @@ msgid "Options"
msgstr "Opțiuni"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Următorul audio"
+msgid "Next Audio Track"
+msgstr "Pista audio următoare"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Precedentul audio"
+msgid "Prev Audio Track"
+msgstr "Pista audio precedentă"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Subtitrarea următoare"
+msgid "Next Subtitle Track"
+msgstr "Subtitlul următor"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Subtitrarea precedentă"
+msgid "Prev Subtitle Track"
+msgstr "Subtitlul precedent"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
-msgstr "Activare/Dezactivare subtitrare"
+msgstr "Activare/Dezactivare subtitlu"
msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
-msgstr "Reîncarcă subtitrările"
-
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Următorul audio (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Precedentul audio (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Subtitrarea următoare (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Subtitrarea precedentă (OGM)"
+msgstr "Reîncarcă subtitlurile"
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
@@ -1918,28 +2026,28 @@ msgid "Prev Angle (DVD)"
msgstr "Unghiul precedent (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Următorul audio (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Următoarea pistă audio (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Precedentul audio (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Precedenta pistă audio (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Subtitrarea următoare (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Subtitlul următor (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Subtitrarea precedentă (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Subtitlul precedent (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
-msgstr "Activare/Dezactivare subtitrare (DVD)"
+msgstr "Activare/Dezactivare subtitlu (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Timp rămas"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Afișează ora actuală"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2073,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Criptat"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Da"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Nu"
@@ -1999,11 +2107,11 @@ msgstr "Focalizare pierdută la: %s - %s"
msgctxt "IDS_AG_SUBTITLES_SAVED"
msgid "Subtitles saved"
-msgstr "Subtitrări salvate"
+msgstr "Subtitluri salvate"
msgctxt "IDS_MAINFRM_4"
msgid "Cannot save subtitles"
-msgstr "Subtitrările nu pot fi salvate"
+msgstr "Subtitlurile nu pot fi salvate"
msgctxt "IDS_AG_FRAMERATE"
msgid "Frame rate"
@@ -2026,12 +2134,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volum: %02lu/%02lu, Titlu: %02lu/%02lu, Capitol: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Unghi: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbiți %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %uHz %d biți %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2047,7 +2155,7 @@ msgstr "MPC-HC nu are destule drepturi pentru a schimba asocierea cu formatele d
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr "MPC-HC este un player media pentru Windows, ce necesită extrem de puține resurse și are sursă publică. Suportă toate formatele comune de fișiere audio și video disponibile pentru redare. Suntem 100% curați în privința programelor de spionare, nu există reclame sau bare de instrumente externe."
+msgstr "MPC-HC este un player media pentru Windows, ce necesită extrem de puține resurse și are sursă publică. Sprijină toate formatele comune de fișiere audio și video disponibile pentru redare. Suntem 100% curați în privința programelor de spionare, nu există reclame sau bare de instrumente externe."
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2083,7 +2191,7 @@ msgstr "DVD: Nivel parental scăzut"
msgctxt "IDS_MAINFRM_21"
msgid "DVD: Macrovision Fail"
-msgstr "DVD: Eșuare la protecţie copiere Macrovision"
+msgstr "DVD: Eșuare la protecție copiere Macrovision"
msgctxt "IDS_MAINFRM_22"
msgid "DVD: Incompatible System And Decoder Regions"
@@ -2099,7 +2207,7 @@ msgstr "Această opțiune a fost proiectată pentru a evita efectul de rupere (t
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
-msgstr "Întârziere subtitrare: %ld ms"
+msgstr "Întârziere subtitlu: %ld ms"
msgctxt "IDS_AG_TITLE2"
msgid "Title: %02d/%02d"
@@ -2107,7 +2215,7 @@ msgstr "Titlu: %02d/%02d"
msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
-msgstr "Numele fișierului conține caractere nesuportate (folosiți doar A-Z, 0-9)"
+msgstr "Numele fișierului conține caractere nesprijinite (folosiți doar A-Z, 0-9)"
msgctxt "IDS_THUMB_ROWNUMBER"
msgid "Rows:"
@@ -2121,14 +2229,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Lățime imagine:"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL-ul este corect."
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Nepotrivire versiune protocol, actualizați playerul sau alegeți o altă adresă!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Raport de aspect"
@@ -2138,19 +2238,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Totale: %ld, Pierdute: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Mărime: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Mărime: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Liberă: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Liberă: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2163,11 +2263,11 @@ msgstr "Eroare"
msgctxt "IDS_SUBTITLE_STREAM_OFF"
msgid "Subtitle: off"
-msgstr "Subtitrare: oprită"
+msgstr "Subtitlu: oprit"
msgctxt "IDS_SUBTITLE_STREAM"
msgid "Subtitle: %s"
-msgstr "Subtitrare: %s"
+msgstr "Subtitlu: %s"
msgctxt "IDS_MAINFRM_46"
msgid "Select the path for the DVD/BD:"
@@ -2175,7 +2275,7 @@ msgstr "Selectați calea către DVD/BD:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr " încărcată cu succes"
+msgstr " încărcat cu succes"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2187,7 +2287,7 @@ msgstr "GetDIB a eșuat, hr = %08x"
msgctxt "IDS_GETCURRENTIMAGE_FAILED"
msgid "GetCurrentImage failed, hr = %08x"
-msgstr "Obţinerea cadrului curent a eșuat, hr = %08x"
+msgstr "Obținerea cadrului actual a eșuat, hr = %08x"
msgctxt "IDS_SCREENSHOT_ERROR"
msgid "Cannot create file"
@@ -2211,7 +2311,7 @@ msgstr "Format de imagine nevalid, nu pot fi create miniaturi de %d bpp."
msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
msgid "File Size: %s (%s bytes)\\N"
-msgstr "Dimensiune fișier: %s (%s bytes)\\N"
+msgstr "Dimensiune fișier: %s (%s octeți)\\N"
msgctxt "IDS_THUMBNAILS_INFO_HEADER"
msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
@@ -2222,40 +2322,40 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Miniaturile ar fi prea mici, imposibil de creat fișierul.\n\nÎncercați să micșorați numărul de miniaturi sau să măriți dimensiunea totală."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Pentru a încărca subtitrări trebuie să schimbați tipul randorului video și să redeschideți fișierul.\n- DirectShow: VMR-7/VMR-9 (fără randare), EVR (CP), Sync, madVR sau Haali\n- RealMedia: Randor special pentru RealMedia sau deschideţi cu DirectShow\n- QuickTime: Randor DX7 sau DX9 pentru QuickTime\n- ShockWave: indisponibil"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Pentru a încărca subtitluri trebuie să schimbați tipul randorului video și să redeschideți fișierul.\n- DirectShow: VMR-9 (fără randare), EVR (CP), Sincronizare, madVR sau Haali\n- RealMedia: Randor special pentru RealMedia sau deschideți cu DirectShow\n- QuickTime: Randor DX7 sau DX9 pentru QuickTime\n- ShockWave: indisponibil"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
-msgstr "Fişiere subtitrare"
+msgstr "Fișiere subtitlu"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
msgstr "Raport de aspect: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Raport de aspect: Implicit"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Raport de aspect: Implicit (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Întârziere audio: %I64dms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
-msgstr "Capitol %d"
+msgstr "Capitolul %d"
msgctxt "IDS_AG_OUT_OF_MEMORY"
msgid "Out of memory"
msgstr "Memorie insuficientă"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Eroare: Este necesar Flash pentru IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Eroare: Este necesar Adobe Flash Player pentru Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
-msgstr "QuickTime nu este încă compatibil cu X64 (librăria Apple nu este disponibilă)"
+msgstr "QuickTime nu este încă sprijinit pentru X64 (librăria Apple nu este disponibilă)"
msgctxt "IDS_MAINFRM_80"
msgid "Failed to create the filter graph object"
@@ -2273,10 +2373,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Fișierul nu a putut fi randat"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL nevalid, baza de date a subtitrărilor nu a putut fi localizată!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Capitol: "
@@ -2295,15 +2391,7 @@ msgstr "Balans: %s"
msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
-msgstr "Curent"
-
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC s-a închis neașteptat. Pentru a ne ajuta să rezolvăm această problemă, vă rugăm să trimiteți acest fișier „%s” către sistemul nostru de urmărire erori (bug tracker).\n\nDoriţi să deschideţi dosarul ce conţine fişierul de imagine memorie (minidump) şi să vizitaţi acum sistemul de urmărire erori?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Eșuare la crearea fișierului de depanare „%s” (eroare %u)"
+msgstr "Actual"
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
@@ -2322,7 +2410,7 @@ msgid "Toggle Caption&Menu"
msgstr "Comută meniu și titlu"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Comută bara de căutare"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2419,7 +2507,7 @@ msgstr "Necunoscut %u"
msgctxt "IDS_AG_VSYNC"
msgid "VSync"
-msgstr "Activează VSync (Sincronizare verticală)"
+msgstr "Activează sincronizarea verticală"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
@@ -2431,7 +2519,7 @@ msgstr " (Comentarii regizor 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr "Activează subtitrări DVD"
+msgstr "Activează subtitluri DVD"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
@@ -2439,7 +2527,7 @@ msgstr "Unghi %u"
msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
msgid "Increase VSync Offset"
-msgstr "Mărește decalaj VSync"
+msgstr "Mărește decalajul sincronizării verticale"
msgctxt "IDS_AG_DISABLED"
msgid "Disabled"
@@ -2447,7 +2535,7 @@ msgstr "Dezactivat"
msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
msgid "Decrease VSync Offset"
-msgstr "Micșorează decalaj VSync"
+msgstr "Micșorează decalajul sincronizării verticale"
msgctxt "IDS_MAINFRM_136"
msgid "MPC-HC D3D Fullscreen"
@@ -2459,7 +2547,7 @@ msgstr "Format necunoscut"
msgctxt "IDS_MAINFRM_138"
msgid "Sub shift: %ld ms"
-msgstr "Decalaj subtitrare: %ld ms"
+msgstr "Decalaj subtitlu: %ld ms"
msgctxt "IDS_VOLUME_BOOST_INC"
msgid "Volume boost increase"
@@ -2478,8 +2566,8 @@ msgid "Volume boost Max"
msgstr "Amplificare volum maximă"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Utilizare: mpc-hc.exe \"cale\" [comutatoare]\n\n\"cale\"\t\tFișierul principal sau directorul ce trebuie încărcat (metacaractere\n\t\tpermise, \"-\" indică intrare standard)\n/dub \"dublaj\"\tÎncarcă un fișier audio adițional\n/dubdelay \"fișier\"\tÎncarcă un fișier audio adițional decalat cu XXms (dacă\n\t\tfișierul conține \"...DELAY XXms...\")\n/d3dfs\t\tPornește randare în mod ecran complet D3D\n/sub \"subtitrare\"\tÎncarcă o subtitrare adițională\n/filter \"nume filtru\"\tÎncarcă filtre DirectShow dintr-o librărie\n\t\tcu încărcare dinamică (metacaractere permise)\n/dvd\t\tRulează în mod DVD, \"cale\" înseamnă dosarul\n\t\tdvd-ului (opțional)\n/dvdpos T#C\tPornește redarea la titlul T, capitolul C\n/dvdpos T#hh:mm\tPornește redarea la titlul T, poziția hh:mm:ss\n/cd\t\tÎncarcă toate pistele unui CD audio sau (S)VCD,\n\t\t\"cale\" înseamnă calea unității (opțional)\n/device\t\tDeschide dispozitivul video implicit\n/open\t\tDeschide fișierul, nu porni redarea în mod automat\n/play\t\tÎncepe redarea fișierului imediat ce playerul este lansat\n/close\t\tÎnchide playerul după redare (funcționează doar când\n\t\teste folosit cu /play)\n/shutdown\tÎnchide sistemul după redare\n/fullscreen\tPornește în modul ecran complet\n/minimized\tPornește în modul minimizat\n/new\t\tFolosește o instanță nouă a playerului\n/add\t\tAdaugă \"cale\" la lista de redare, poate fi combinat\n\t\tcu /open și /play\n/regvid\t\tCreează asocieri de fișiere pentru fișiere video\n/regaud\t\tCreează asocieri de fișiere pentru fișiere audio\n/regpl\t\tCreează asocieri de fișiere pentru fișiere listă de redare\n/regall\t\tCreează asocieri de fișiere pentru toate tipurile de fișiere suportate\n/unregall\t\tElimină toate asocierile de fișiere\n/start ms\t\tPornește redarea la \"ms\" (= milisecunde)\n/startpos hh:mm:ss\tPornește redarea la poziția hh:mm:ss\n/fixedsize L,l\tSetează o dimensiune fixă Lxl pentru fereastră\n/monitor N\tPornește redarea pe monitorul N, unde N începe de la 1\n/audiorenderer N\tPornește folosind randorul audio N, unde N începe de la 1\n\t\t(vedeți setările \"Ieșire\")\n/shaderpreset \"Pr\"\tFolosește setarea implicită \"Pr\" pentru shader\n/reset\t\tRestaurează setări implicite\n/help /h /?\tArată ajutor pentru comutatoarele din linia de comandă\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Utilizare: mpc-hc.exe \"cale\" [comutatoare]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2499,7 +2587,7 @@ msgstr "Comută stare"
msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
msgid "Toggle Subresync Bar"
-msgstr "Comută bara de resincronizare subtitrări"
+msgstr "Comută bara de resincronizare subtitluri"
msgctxt "IDS_AG_TOGGLE_PLAYLIST"
msgid "Toggle Playlist Bar"
@@ -2511,7 +2599,7 @@ msgstr "Comută bara de captură"
msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
msgid "Toggle Debug Shaders"
-msgstr "Comută depanatorul de shadere"
+msgstr "Comută depanatorul de nuanțatoare"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
@@ -2543,11 +2631,11 @@ msgstr "Cadru video: Atinge fereastra din exterior"
msgctxt "IDS_AG_PNS_RESET"
msgid "PnS Reset"
-msgstr "Reseteză PnS (Pan & Scan)"
+msgstr "Restabilește Panoramarea trunchiată"
msgctxt "IDS_AG_PNS_ROTATEX_P"
msgid "PnS Rotate X+"
-msgstr "PnS: Rotație X+"
+msgstr "Panoramare trunchiată: Rotește X+"
msgctxt "IDS_AG_VIDFRM_ZOOM1"
msgid "VidFrm Zoom 1"
@@ -2565,21 +2653,13 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "Activ&ează toate filtrele"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Scanare tuner"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Subtitrările nu sunt încărcate sau randorul nu este suportat."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Autor necunoscut. Dacă ai făcut acest logo, contactează-ne!"
msgctxt "IDS_NO_MORE_MEDIA"
msgid "No more media in the current folder."
-msgstr "Nu mai există media în dosarul curent."
+msgstr "Nu mai există fișiere media în dosarul actual."
msgctxt "IDS_FIRST_IN_FOLDER"
msgid "The first file of the folder is already loaded."
@@ -2661,40 +2741,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Dreapta spate sus"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Resetează statisticile de afișare"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Subtitrări::Diverse"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Ascunde mar&gini"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Doar cadru video"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "&Arată Titlu && Meniu"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Ascunde &meniu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Avansat"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Deasupra barei de căutare"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Sub bara de căutare"
msgctxt "IDS_VIDEO_STREAM"
@@ -2707,7 +2759,7 @@ msgstr "Aplică"
msgctxt "IDS_CLEAR"
msgid "Clear"
-msgstr "Goleşte"
+msgstr "Golește"
msgctxt "IDS_CANCEL"
msgid "Cancel"
@@ -2862,8 +2914,8 @@ msgid "Other Audio"
msgstr "Alt Audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2925,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Codec Audio Opus"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3009,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Codec Audio Opus"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Listă de redare"
@@ -2967,7 +3023,7 @@ msgstr "Arhivă RAR"
msgctxt "IDS_DVB_CHANNEL_FPS"
msgid "FPS"
-msgstr "FPS"
+msgstr "CPS (cadre pe secundă)"
msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
msgid "Resolution"
@@ -2977,33 +3033,21 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Raport de aspect"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Folosește WASAPI (necesită reponirea redării)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Fără sunet la derulare rapidă înainte"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Dispozitiv de sunet:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
-msgstr "VSync: Activat"
+msgstr "Sincronizare verticală: Activată"
msgctxt "IDS_OSD_RS_VSYNC_OFF"
msgid "VSync: Off"
-msgstr "VSync: oprit"
+msgstr "Sincronizare verticală: dezactivată"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
msgid "Accurate VSync: On"
-msgstr "VSync precis: Activat"
+msgstr "Sincronizare verticală precisă: Activată"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
msgid "Accurate VSync: Off"
-msgstr "VSync precis: Dezactivat"
+msgstr "Sincronizare verticală precisă: dezactivată"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
msgid "Synchronize Video to Display: On"
@@ -3023,19 +3067,19 @@ msgstr "Sincronizare afișare cu video: Dezactivată"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
msgid "Present at Nearest VSync: On"
-msgstr "Prezentare la cel mai apropiat VSync: Activată"
+msgstr "Prezentare la cel mai apropiată sincronizare verticală: Activată"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
msgid "Present at Nearest VSync: Off"
-msgstr "Prezentare la cel mai apropiat VSync: Dezactivată"
+msgstr "Prezentare la cel mai apropiată sincronizare verticală: Dezactivată"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
msgid "Color Management: On"
-msgstr "Administrare culori: Activată"
+msgstr "Gestionare culori: Activată"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
msgid "Color Management: Off"
-msgstr "Administrare culori: Dezactivată"
+msgstr "Gestionare culori: Dezactivată"
msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
msgid "Input Type: Auto-Detect"
@@ -3055,7 +3099,7 @@ msgstr "Tip de intrare: SDTV PAL"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
msgid "Ambient Light: Bright (2.2 Gamma)"
-msgstr "Lumină ambientală: Luminos (2.2 Gamma)"
+msgstr "Lumină ambientală: Luminoasă (2.2 Gamma)"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
msgid "Ambient Light: Dim (2.35 Gamma)"
@@ -3063,23 +3107,23 @@ msgstr "Lumină ambientală: Estompat (2.35 Gamma)"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
msgid "Ambient Light: Dark (2.4 Gamma)"
-msgstr "Lumină ambientală: Întunecat (2.4 Gamma)"
+msgstr "Lumină ambientală: Întunecată (2.4 Gamma)"
msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
msgid "Rendering Intent: Perceptual"
-msgstr "Intenţie de randare: Perceptual"
+msgstr "Intenție de randare: Perceptual"
msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
msgid "Rendering Intent: Relative Colorimetric"
-msgstr "Intenţie de randare: Colorimetric relativ"
+msgstr "Intenție de randare: Colorimetrică relativă"
msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
msgid "Rendering Intent: Saturation"
-msgstr "Intenţie de randare: Saturație"
+msgstr "Intenție de randare: Saturație"
msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
msgid "Rendering Intent: Absolute Colorimetric"
-msgstr "Intenţie de randare: Colorimetric absolut"
+msgstr "Intenție de randare: Colorimetrică absolută"
msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
msgid "Output Range: %s"
@@ -3087,27 +3131,27 @@ msgstr "Interval de ieșire: %s"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
msgid "Flush GPU before VSync: On"
-msgstr "Golire GPU înainte de VSync: Activată"
+msgstr "Golire unitate grafică înainte de sincronizarea verticală: Activată"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
msgid "Flush GPU before VSync: Off"
-msgstr "Golire GPU înainte de VSync: Dezactivată"
+msgstr "Golire unitate grafică înainte de sincronizarea verticală: Dezactivată"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
msgid "Flush GPU after Present: On"
-msgstr "Golire GPU după prezentare: Activată"
+msgstr "Golire unitate grafică după prezentare: Activată"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
msgid "Flush GPU after Present: Off"
-msgstr "Golire GPU după prezentare: Dezactivată"
+msgstr "Golire unitate grafică după prezentare: Dezactivată"
msgctxt "IDS_OSD_RS_WAIT_ON"
msgid "Wait for GPU Flush: On"
-msgstr "Așteptare golire GPU: Activată"
+msgstr "Așteptare golire unitate grafică: Activată"
msgctxt "IDS_OSD_RS_WAIT_OFF"
msgid "Wait for GPU Flush: Off"
-msgstr "Așteptare golire GPU: Dezactivată"
+msgstr "Așteptare golire unitate grafică: Dezactivată"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
msgid "D3D Fullscreen: On"
@@ -3127,19 +3171,19 @@ msgstr "Dezactivare compoziție desktop (Aero): Nu"
msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
msgid "Alternative VSync: On"
-msgstr "VSync alternativ: Activat"
+msgstr "Sincronizare verticală alternativă: Activată"
msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
msgid "Alternative VSync: Off"
-msgstr "VSync alternativ: Dezactivat"
+msgstr "Sincronizare verticală alternativă: Dezactivată"
msgctxt "IDS_OSD_RS_RESET_DEFAULT"
msgid "Renderer settings reset to default"
-msgstr "Setările randorului resetate la implicit"
+msgstr "Stabilirile randorului restabilite la implicite"
msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
msgid "Renderer settings reset to optimal"
-msgstr "Setările randorului resetate la optim"
+msgstr "Stabilirile randorului restabilite la optime"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
msgid "D3D Fullscreen GUI Support: On"
@@ -3167,19 +3211,19 @@ msgstr "Forțare intrare RGB pe 10 biți: Dezactivată"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
msgid "Full Floating Point Processing: On"
-msgstr "Procesare completă în virgulă mobilă (32 biţi): Activată"
+msgstr "Procesare completă în virgulă mobilă (32 biți): Activată"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
msgid "Full Floating Point Processing: Off"
-msgstr "Procesare completă în virgulă mobilă (32 biţi): Dezactivată"
+msgstr "Procesare completă în virgulă mobilă (32 biți): Dezactivată"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
msgid "Half Floating Point Processing: On"
-msgstr "Procesare pe jumătate în virgulă mobilă (16 biţi): Activată"
+msgstr "Procesare pe jumătate în virgulă mobilă (16 biți): Activată"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
msgid "Half Floating Point Processing: Off"
-msgstr "Procesare pe jumătate în virgulă mobilă (16 biţi): Dezactivată"
+msgstr "Procesare pe jumătate în virgulă mobilă (16 biți): Dezactivată"
msgctxt "IDS_BRIGHTNESS_DEC"
msgid "Brightness decrease"
@@ -3211,23 +3255,23 @@ msgstr "Micșorare saturație"
msgctxt "IDS_RESET_COLOR"
msgid "Reset color settings"
-msgstr "Resetează setările de culoare"
+msgstr "Restabilește stabilirile de culoare"
msgctxt "IDS_USING_LATEST_STABLE"
msgid "\nYou are already using the latest stable version."
-msgstr "\nFolosiţi deja ultima versiune stabilă."
+msgstr "\nFolosiți deja ultima versiune stabilă."
msgctxt "IDS_USING_NEWER_VERSION"
msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
-msgstr "Versiunea dumneavoastră curentă este v%s.\n\nUltima versiune stabilă este v%s."
+msgstr "Versiunea dumneavoastră actuală este v%s.\n\nUltima versiune stabilă este v%s."
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr "MPC-HC v%s este disponibil acum. Folosiţi v%s.\n\nDoriţi să vizitaţi site-ul MPC-HC pentru a descărca ultima versiune?"
+msgstr "MPC-HC v%s este disponibil acum. Folosiți v%s.\n\nDoriți să vizitați site-ul MPC-HC pentru a descărca ultima versiune?"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
-msgstr "Serverul pentru actualizare nu a fost găsit.\n\nVerificaţi conexiunea la internet sau încercaţi mai târziu."
+msgstr "Servitorul de actualizări nu a fost găsit.\n\nVerificați conexiunea la internet sau încercați mai târziu."
msgctxt "IDS_UPDATE_CLOSE"
msgid "&Close"
@@ -3277,29 +3321,33 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Restabilire volum: Dezactivată"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "octeți"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
-msgstr "KB"
+msgstr "KO"
msgctxt "IDS_SIZE_UNIT_M"
msgid "MB"
-msgstr "MB"
+msgstr "MO"
msgctxt "IDS_SIZE_UNIT_G"
msgid "GB"
-msgstr "GB"
+msgstr "GO"
msgctxt "IDS_SPEED_UNIT_K"
msgid "KB/s"
-msgstr "KB/s"
+msgstr "KO/s"
msgctxt "IDS_SPEED_UNIT_M"
msgid "MB/s"
-msgstr "MB/s"
+msgstr "MO/s"
msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
msgid "Could not create the tuner."
-msgstr "Tunerul nu poate fi creat."
+msgstr "Tunerul nu poate fi creat."
msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
msgid "Could not create the receiver."
@@ -3334,7 +3382,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Eroare la analizarea ratei de cadre introduse!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Nu se poate face deplasare cadru cu cadru, încercați un randor video diferit."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3351,11 +3399,7 @@ msgstr "Funcțiile „Salvează imagine” și „Salvează miniaturi” nu func
msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgstr "Funcțiile „Salvează imagine” și „Salvează miniaturi” nu funcționează cu randorul video Overlay Mixer.\nSchimbați randorul video în opțiunile de ieșire ale MPC și redeschideți fișierul."
-
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Nu se poate conecta la baza de subtitrări online."
+msgstr "Funcțiile „Salvare imagine” și „Salvare miniaturi” nu funcționează cu randorul video amestecător strat suprapus.\nSchimbați randorul video în opțiunile de ieșire ale MPC și redeschideți fișierul."
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
@@ -3423,9 +3467,9 @@ msgstr "Acest tip se află deja în listă!"
msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
-msgstr "Trebuie să aplicați noile setări înainte de a le testa."
+msgstr "Trebuie să aplicați noile stabiliri înainte de a le testa."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "După redare: Închide programul"
@@ -3453,6 +3497,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "După redare: Închide monitorul"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "După redare: Redă următorul fișier din dosar"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "După redare: Nicio acțiune"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Luminozitate: %s"
@@ -3471,11 +3523,11 @@ msgstr "Saturație: %s"
msgctxt "IDS_OSD_RESET_COLOR"
msgid "Color settings restored"
-msgstr "Setările de culoare au fost restaurate"
+msgstr "Stabilirile de culoare au fost restaurate"
msgctxt "IDS_OSD_NO_COLORCONTROL"
msgid "Color control is not supported"
-msgstr "Controalele de culoare nu sunt suportate"
+msgstr "Controalele de culoare nu sunt sprijinite"
msgctxt "IDS_BRIGHTNESS_INC"
msgid "Brightness increase"
@@ -3531,5 +3583,389 @@ msgstr "Anulează toate asocierile"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
-msgstr "Setări"
+msgstr "Stabiliri"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Furnizor"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Cu probleme de auz"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Descărcări"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Scor"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Căutarea pe Internet a subtitlurilor a eșuat."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Căutarea pe Internet a subtitlurilor a fost abandonată."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Căutarea pe Internet a subtitlurilor s-a terminat, %d subtitluri găsite."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Căutarea pe Internet a subtitlurilor s-a terminat, niciun subtitlu găsit."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Descarcă subtitluri"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Se caută subtitluri pe Internet, așteptați..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Se abandonează căutarea pe Internet a subtitlurilor..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Nume de utilizator"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Stare"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Pregătit..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Neimplementat."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Se încarcă..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Subtitlurile au fost încărcate cu succes."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Încărcarea subtitlurilor a eșuat."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Încărcarea subtitlurilor a fost abantodonată."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Subtitlurile există deja."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Se descarcă subtitluri, așteptați..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Încărcare terminată."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Încărcare abandonată."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Încărcare eșuată."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Descarcă && Deschide"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Configurare"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Restabilește"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Mută în sus"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Mută în jos"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Deschide URL-ul"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Limbi"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "EROARE: Conexiunea la Internet nu a putut fi stabilită."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Introduceți datele de autentificare pe site web"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Introduceți datele de autentificare pentru a vă conecta la: "
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Raport de aspect: Presupune că pixelii sunt pătrați (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Descărcat [%s] „%s”"
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Încarcă subtitluri"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Sigur doriți să încărcați fișierul subtitlu „%s”?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Se obțin limbile sprijinite..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Autentificarea pe „%S” cu numele de utilizator „%S” a eșuat.\n\nIntroduceți numele de utilizator sau parola corectă sau restabiliți datele de conectare pentru a vă autentifica ca un utilizator anonim."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Căutarea și descărcarea automată va fi dezactivată pentru toate fișierele media ale căror cale conține oricare dintre tiparele introduse aici.\nDe exemplu, tip: „private dir\\videos|work\\”."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"cale\"\tFișierul sau directorul principal ce trebuie încărcat\n\t\t(metacaractere permise, \"-\" indică intrare standard)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dublaj\"\tÎncarcă un fișier audio adițional"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"fișier\"\tÎncarcă un fișier audio adițional decalat cu XXms\n\t\t(dacă fișierul conține \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tPornește randarea în mod ecran complet D3D"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subtitlu\"\tÎncarcă un fișier subtitlu adițional"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtru\"\tÎncarcă filtre DirectShow dintr-o librărie cu încărcare dinamică (metacaractere permise)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tRulează în mod DVD, \"cale\" înseamnă dosarul DVD-ului (opțional)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tPornește redarea de la titlul T, capitolul C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tPornește redarea de la titlul T, poziția P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tÎncarcă toate pistele unui CD audio sau (S)VCD,\n\t\t\"cale\" înseamnă calea unității (opțional)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tDeschide dispozitivul video implicit"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tDeschide fișierul, nu porni redarea în mod automat"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tÎncepe redarea fișierului imediat ce playerul este lansat"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tÎnchide playerul după redare (funcționează doar când este folosit cu /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tÎnchide sistemul după redare"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tIntră în repaus după redare"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tIntră în hibernare după redare"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tÎnchide sesiunea după redare"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tBlochează desktopul după redare"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tÎnchide monitorul după redare"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tDeschide următorul fișier din dosar după redare"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tPornește în modul ecran complet"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tPornește în modul minimizat"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tFolosește o instanță nouă a playerului"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tAdaugă \"cale\" la lista de redare, poate fi combinat cu /open și /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tRedă lista aleatoriu"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tCreează asocieri de fișiere pentru fișiere video"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tCreează asocieri de fișiere pentru fișiere audio"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tCreează asocieri de fișiere pentru fișiere listă de redare"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tCreează asocieri de fișiere pentru toate tipurile de fișiere sprijinite"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tElimină toate asocierile de fișiere"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tPornește redarea la \"ms\" (= milisecunde)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tPornește redarea la poziția hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize L,Î\tStabilește o dimensiune fixă LxÎ pentru fereastră"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tPornește redarea pe monitorul N, unde N începe de la 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tPornește folosind randorul audio N, unde N începe de la 1 (vedeți setările \"Ieșire\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tPornește folosind prestabilirea „Pr” pentru nuanțator"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"nume\"\tSpecifică numele prestabilirii panoramării trunchiate ce va fi folosită"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tReasociază pictogramele specifice formatelor"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tDeschide MPC-HC în fundal"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tPornește interfața web pe portul specificat"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tArată informații de depanare în OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tDezactivează raportorul de defecte"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tFolosește MPC-HC în modul sclav sau dependent"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tStabilește indexul plăcii grafice ce va fi folosită pentru decodare prin componentă fizică.\n\t\tDisponibil doar pentru CUVID și DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tRestaurează stabilirile implicite"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tArată ajutor pentru comutatoarele din linia de comandă"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Valoarea limită pentru scorul subtitlurilor ce vor fi descărcate automat. Valorile mai mari corespund încărcării acelor subtitluri ce se potrivesc cu mai multă acuratețe, valorile mai mici pot rezulta în încărcarea unor subtitluri incorecte, însă nu există o valoare perfectă. Alegeți acea valoare ce funcționează cel mai bine pentru dumneavoastră."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Întârziere audio (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Mărimea în pixeli a barei de instrumente implicite."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Folosește bara de instrumente tradițională în locul celei noi vectoriale."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Copiază URL-ul"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ru.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ru.dialogs.po
index 6a7e1b361..6fef97896 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ru.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ru.dialogs.po
@@ -1,26 +1,34 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Alexander Gorishnyak <kefir500@gmail.com>, 2014
-# sayanvd <sayanvd@yandex.ru>, 2014
-# stryaponoff <stryaponoff@gmail.com>, 2014
+# Arkady Shapkin <arkadiy_s@inbox.ru>, 2015
+# birkoff <birkoff.anarchist@gmail.com>, 2015
+# Evgeniy Kupras <zheka20012@yandex.ru>, 2016
+# Pavel Otchertsov <pavel.otchertsov@gmail.com>, 2015
+# sayanvd <sayanvd@yandex.ru>, 2014-2015
+# Sergey <player54@mail.ru>, 2015-2016
+# Kirill <stryaponoff@gmail.com>, 2014,2016
+# SmilyCarrot <twisted-transistor@yandex.ru>, 2014
+# Victor Bychek, 2015-2016
+# Денис <denyspokhylenko@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:20+0000\n"
-"Last-Translator: Alexander Gorishnyak <kefir500@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.com/projects/p/mpc-hc/language/ru/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Russian (http://www.transifex.com/mpc-hc/mpc-hc/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
msgid "Select Media Type"
-msgstr "Выберите тип"
+msgstr "Выбор типа медиа"
msgctxt "IDD_SELECTMEDIATYPE_IDOK"
msgid "OK"
@@ -36,7 +44,7 @@ msgstr "Видео"
msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
msgid "Set"
-msgstr "Сохр."
+msgstr "Задать"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "Audio"
@@ -44,31 +52,31 @@ msgstr "Аудио"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "Output"
-msgstr "Сохранение"
+msgstr "Вывод"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
msgid "Record Video"
-msgstr "Видео"
+msgstr "Запись видео"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
msgid "Preview"
-msgstr "Просмотр"
+msgstr "Предпросмотр"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
msgid "Record Audio"
-msgstr "Аудио"
+msgstr "Запись аудио"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
msgid "Preview"
-msgstr "Просмотр"
+msgstr "Предпросмотр"
msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
msgid "V/A Buffers:"
-msgstr "V/A буферы:"
+msgstr "Буферы V/A:"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
msgid "Audio to wav"
-msgstr "Звук в wav"
+msgstr "Аудио в wav"
msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
msgid "Record"
@@ -76,11 +84,11 @@ msgstr "Запись"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
msgid "Enable built-in audio switcher filter (requires restart)"
-msgstr "Включить встроенный переключатель аудиодорожек (требуется перезапуск)"
+msgstr "Включить встроенный переключатель аудио (требуется перезапуск)"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
msgid "Normalize"
-msgstr "Нормализовать"
+msgstr "Нормализация"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
msgid "Max amplification:"
@@ -104,31 +112,31 @@ msgstr "Преобразовать в 44100 Гц"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
-msgstr "Смещение звука (в мс):"
+msgstr "Смещение аудио (мс):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
msgstr "Включить пользовательское распределение каналов"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Настройка колонок для "
+msgid "Speaker configuration for"
+msgstr "Настройка колонок для"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "входных каналов:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Удерживайте shift для немедленного принятия изменений при нажатии "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Удерживайте shift для немедленных изменений при нажатии."
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
-msgstr "Перейти..."
+msgstr "Переход..."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
-msgstr "Введите время в формате [чч:]мм:сс.мс, чтобы перейти к указанному времени."
+msgstr "Введите время в формате чч:мм:сс.мс, чтобы перейти к указанному моменту."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Time"
@@ -136,7 +144,7 @@ msgstr "Время"
msgctxt "IDD_GOTO_DLG_IDC_OK1"
msgid "Go!"
-msgstr "Вперед!"
+msgstr "Готово!"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
@@ -148,7 +156,7 @@ msgstr "Кадр"
msgctxt "IDD_GOTO_DLG_IDC_OK2"
msgid "Go!"
-msgstr "Вперед!"
+msgstr "Готово!"
msgctxt "IDD_OPEN_DLG_CAPTION"
msgid "Open"
@@ -156,7 +164,7 @@ msgstr "Открыть"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Введите адрес фильма или аудиофайла\n(в Интернете или на вашем компьютере)"
+msgstr "Введите адрес фильма или аудиофайла (в интернете или на вашем компьютере), чтобы проигрыватель открыл его."
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
@@ -184,23 +192,23 @@ msgstr "Отмена"
msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
msgid "Add to playlist without opening"
-msgstr "Только добавить в плейлист"
+msgstr "Добавить в плейлист, но не проигрывать"
msgctxt "IDD_ABOUTBOX_CAPTION"
msgid "About"
msgstr "О программе"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014, смотрите файл Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017, смотрите файл Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
-msgstr "Эта программа бесплатна и распространяется под лицензией GNU General Public License."
+msgstr "Эта программа бесплатна и распространяется под GNU (General Public License)."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Локализация: v0lt, Aleksoid, YDY"
+msgstr "Локализация: Sergey S., v0lt, Aleksoid, YDY"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
@@ -216,7 +224,7 @@ msgstr "Компилятор:"
msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
msgid "Not used"
-msgstr "не используется"
+msgstr "Не использ."
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build date:"
@@ -232,7 +240,7 @@ msgstr "Название:"
msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
msgid "Copy to clipboard"
-msgstr "Копировать в буфер"
+msgstr "Скопировать в буфер обмена"
msgctxt "IDD_ABOUTBOX_IDOK"
msgid "OK"
@@ -244,7 +252,7 @@ msgstr "Открывать файлы, используя"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
msgid "Use the same player for each media file"
-msgstr "один и тот же проигрыватель для каждого файла"
+msgstr "один проигрыватель для каждого файла"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
msgid "Open a new player for each media file played"
@@ -256,11 +264,11 @@ msgstr "Язык"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Title bar"
-msgstr "В заголовке"
+msgstr "В заголовке отображать"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
msgid "Display full path"
-msgstr "отображать полный путь"
+msgstr "полный путь"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
msgid "File name only"
@@ -268,11 +276,11 @@ msgstr "только имя файла"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
msgid "Don't prefix anything"
-msgstr "не отображать ничего"
+msgstr "ничего"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
msgid "Replace file name with title"
-msgstr "имя файла заменить названием"
+msgstr "заменять имя файла названием"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "Other"
@@ -280,11 +288,11 @@ msgstr "Прочее"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
msgid "Tray icon"
-msgstr "Значок в панели задач"
+msgstr "Значок в области уведомлений"
msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
msgid "Show OSD (requires restart)"
-msgstr "Показать OSD (требуется перезапуск)"
+msgstr "Показывать OSD (требуется перезапуск)"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
msgid "Limit window proportions on resize"
@@ -296,11 +304,11 @@ msgstr "Прилипать к границам экрана"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
msgid "Store settings in .ini file"
-msgstr "Сохранять настройки в .ini файле"
+msgstr "Сохранять настройки в ini-файле"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
-msgstr "Отключить меню 'Открыть диск'"
+msgstr "Отключить меню «Открыть диск»"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
msgid "Process priority above normal"
@@ -308,11 +316,11 @@ msgstr "Повышенный приоритет процесса"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
-msgstr ""
+msgstr "Включить поддержку обложек"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "History"
-msgstr "История / Позиция"
+msgstr "История"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
msgid "Keep history of recently opened files"
@@ -332,7 +340,7 @@ msgstr "Запоминать позицию DVD"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
msgid "Remember last window position"
-msgstr "Запоминать позицию окна"
+msgstr "Запоминать положение окна"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
msgid "Remember last window size"
@@ -340,23 +348,23 @@ msgstr "Запоминать размер окна"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
msgid "Remember last Pan-n-Scan Zoom"
-msgstr "Запоминать зум Pan-n-Scan"
+msgstr "Запоминать параметры Pan-n-Scan"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
-msgstr "Поведение команды \"Открыть DVD/BD...\""
+msgstr "Поведение команды «Открыть DVD/BD...»"
msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
msgid "Prompt for location"
-msgstr "Выбирать папку"
+msgstr "Переходить к выбору расположения"
msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
msgid "Always open the default location:"
-msgstr "Открывать по умолчанию:"
+msgstr "Всегда открывать расположение по умолчанию:"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Preferred language for DVD Navigator and the external OGM Splitter"
-msgstr "Предпочтительный язык для навигатора DVD и сплиттера OGM"
+msgstr "Предпочтительный язык для навигатора DVD и внешнего сплиттера OGM"
msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
msgid "Menu"
@@ -376,7 +384,7 @@ msgstr "Дополнительные настройки"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
-msgstr "Разрешить субтитры для слабослышащих в 'Line 21 Decoder'"
+msgstr "Разрешить скрытые субтитры в «Line 21 Decoder»"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
@@ -388,11 +396,11 @@ msgstr "Громкость"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Min"
-msgstr "Тише"
+msgstr "Мин"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Max"
-msgstr "Громче"
+msgstr "Макс"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
msgid "Balance"
@@ -400,11 +408,11 @@ msgstr "Баланс"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "L"
-msgstr "Левый"
+msgstr "Л"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "R"
-msgstr "Правый"
+msgstr "П"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Playback"
@@ -412,7 +420,7 @@ msgstr "Воспроизведение"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
msgid "Play"
-msgstr "Повторять"
+msgstr "Воспроизвести"
msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
msgid "Repeat forever"
@@ -420,15 +428,19 @@ msgstr "Повторять бесконечно"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
msgid "time(s)"
-msgstr "раз"
+msgstr "раз(а)"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Режим повтора:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "По окончании воспроизведения"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Вывод"
+msgid "Default zoom"
+msgstr "Масштаб по умолчанию"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -436,7 +448,7 @@ msgstr "Автомасштаб:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
-msgstr "Вписывать в"
+msgstr "Подгонять в"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
msgid "%"
@@ -444,7 +456,7 @@ msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Default track preference"
-msgstr "Приоритет выбора дорожек"
+msgstr "Выбор дорожек по умолчанию"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
@@ -452,11 +464,11 @@ msgstr "Субтитры:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio:"
-msgstr "Звук:"
+msgstr "Аудио:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr "Разрешить переопределение выбора для внешних сплиттеров"
+msgstr "Разрешить изменение выбора внешних сплиттеров"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
@@ -464,19 +476,15 @@ msgstr "Настройки открытия файлов"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
msgid "Use worker thread to construct the filter graph"
-msgstr "Рабочий поток для построения цепи фильтров"
+msgstr "Использовать рабочий поток для построения графа"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
-msgstr "Отчет об ошибках рендеринга потоков"
+msgstr "Сообщать об ошибках рендеринга потоков"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
-msgstr "Автозагрузка аудио файлов"
-
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Использовать встроенный рендерер субтитров"
+msgstr "Автозагрузка аудиофайлов"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
@@ -524,7 +532,7 @@ msgstr "мс"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Texture settings (open the video again to see the changes)"
-msgstr "Настройка текстуры (откройте видео снова, чтобы увидеть изменения)"
+msgstr "Настройки текстур (чтобы увидеть изменения, откройте видео заново)"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Sub pictures to buffer:"
@@ -532,31 +540,31 @@ msgstr "Число фрагментов в буфере:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Maximum texture resolution:"
-msgstr "Максимальный размер текстуры:"
+msgstr "Макс. разрешение текстур:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
msgid "Never animate the subtitles"
-msgstr ""
+msgstr "Никогда не анимировать субтитры"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
msgid "Render at"
-msgstr ""
+msgstr "Рендеринг"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
msgid "% of the animation"
-msgstr ""
+msgstr "% анимации"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
msgid "Animate at"
-msgstr ""
+msgstr "Анимация"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
msgid "% of the video frame rate"
-msgstr ""
+msgstr "% частоты кадров видео"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr ""
+msgstr "Включить выпадение некоторых фрагментов при запаздывании"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
@@ -564,15 +572,15 @@ msgstr "Раскладка рендера"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
msgid "Apply aspect ratio compensation for anamorphic videos"
-msgstr "Компенсировать соотношение сторон для анаморфированного видео"
+msgstr "Компенсация соотношение сторон для анаморфированного видео"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Warning"
-msgstr "Внимание"
+msgstr "Предупреждение"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Если вы измените положение и задействуете полноэкранное сглаживание в настройках видеокарты, субтитры не будут выглядеть лучше, но будут чрезмерно нагружать процессор."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "От изменения положения и полноэкранного сглаживания субтитры не станут выглядеть лучше, но это будет чрезмерно нагружать ваш процессор."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -592,19 +600,19 @@ msgstr "Ассоциации"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr ""
+msgstr "Использовать специальные иконки форматов"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr ""
+msgstr "Запуск от имени администратора"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "Сделать программой по умолчанию"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
-msgstr "Открывать Real-Time Streaming Protocol (rtsp://...) через:"
+msgstr "Обработчик Real-Time Streaming Protocol (rtsp://...):"
msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
msgid "RealMedia"
@@ -620,7 +628,7 @@ msgstr "DirectShow"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
msgid "Check file extension first"
-msgstr "Сначала смотреть расширение"
+msgstr "Сперва проверить расширение файла"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Explorer Context Menu"
@@ -636,7 +644,7 @@ msgstr "Для файлов"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
msgid "Autoplay"
-msgstr "Автовоспроизведение (только XP)"
+msgstr "Автовоспроизведение"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
msgid "Video"
@@ -652,11 +660,11 @@ msgstr "DVD"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
msgid "Audio CD"
-msgstr "Аудио CD"
+msgstr "Аудио-CD"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "Jump distances (small, medium, large in ms)"
-msgstr "Расстояния перехода (короткое, среднее, длинное) в мс"
+msgstr "Расстояния перехода в мс (короткое, среднее, длинное)"
msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
msgid "Default"
@@ -664,30 +672,30 @@ msgstr "По умолчанию"
msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
msgid "Fast seek (on keyframe)"
-msgstr "Быстрая перемотка (по ключевым кадрам)"
+msgstr "Быстрый поиск (по ключевым кадрам)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
msgid "Show chapter marks in seek bar"
-msgstr "Показывать метки глав на полосе прокрутки"
+msgstr "Показывать метки глав на ползунке"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
-msgstr "Отправлять \"Сейчас играет\" в Skype (статус настроение)"
+msgstr "Отображать имя воспроизводимого файла в настроении Skype"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
-msgstr "Не сворачивать окно на дополнительном дисплее в полноэкранном режиме"
+msgstr "Предотвращать сворачивание проигрывателя на дополнительном дисплее в полноэкранном режиме"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Использовать возможности таскбара Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Использовать расширенные функции панели задач"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Открывать следующий/предыдущий файл в папке через 'Вперед/Назад', когда в плейлисте только один пункт"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Открывать следующий/предыдущий файл в папке кнопками «Вперед/Назад», когда в списке воспроизведения только один пункт"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Показывать время"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -696,11 +704,11 @@ msgstr "Шрифт OSD:"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
msgid "Enable Logitech LCD support (experimental)"
-msgstr "Включить поддержку Logitech LCD (экспериментальное)"
+msgstr "Включить поддержку Logitech LCD"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
-msgstr "Скрывать указатель мыши при воспроизведении в окне"
+msgstr "Скрывать курсор при воспроизведении в окне"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
msgid "Add Filter..."
@@ -720,23 +728,23 @@ msgstr "Блокировать"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
msgid "Set merit:"
-msgstr "Значимость:"
+msgstr "Значение:"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
msgid "Up"
-msgstr "Выше"
+msgstr "Вверх"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON4"
msgid "Down"
-msgstr "Ниже"
+msgstr "Вниз"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
msgid "Add Media Type..."
-msgstr "Новый тип..."
+msgstr "Добавить тип"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
msgid "Add Sub Type..."
-msgstr "Новый субтип..."
+msgstr "Добавить подтип"
msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
msgid "Delete"
@@ -760,7 +768,7 @@ msgstr "Длительность:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Video size:"
-msgstr "Размер кадра:"
+msgstr "Размер видео:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Created:"
@@ -768,7 +776,7 @@ msgstr "Создан:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Clip:"
-msgstr "Название:"
+msgstr "Клип:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Author:"
@@ -824,11 +832,11 @@ msgstr "Переименовать"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
msgid "Move Up"
-msgstr "Выше"
+msgstr "Вверх"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
msgid "Move Down"
-msgstr "Ниже"
+msgstr "Вниз"
msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
msgid "Delete"
@@ -852,23 +860,23 @@ msgstr "Удалить"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
msgid "Up"
-msgstr "Выше"
+msgstr "Вверх"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
msgid "Down"
-msgstr "Ниже"
+msgstr "Вниз"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
msgid "&Set"
-msgstr "&Задать"
+msgstr "Выбрать"
msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
msgid "&Cancel"
-msgstr "&Отмена"
+msgstr "Отмена"
msgctxt "IDD_PNSPRESET_DLG_IDOK"
msgid "&Save"
-msgstr "&Сохранить"
+msgstr "Сохранить"
msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
msgid "Pos: 0.0 -> 1.0"
@@ -892,11 +900,11 @@ msgstr "Сбросить выбранные"
msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
msgid "Warning"
-msgstr "Внимание"
+msgstr "Предупреждение"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
-msgstr "MPC-HC не может воспроизвести некоторые потоки, возможно, у вас не установлен нужный кодек или фильтр."
+msgstr "MPC-HC не смог воспроизвести некоторые дорожки в графе. Возможно, у вас не установлен нужный кодек или фильтр."
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
msgid "The following pin(s) failed to find a connectable filter:"
@@ -920,7 +928,7 @@ msgstr "Кодировка:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC1"
msgid "Encoding:"
-msgstr "Кодирование:"
+msgstr "Кодировка:"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
msgid "Delay:"
@@ -932,7 +940,7 @@ msgstr "мс"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
msgid "Save custom style"
-msgstr "Сохранить пользовательский стиль"
+msgstr "Сохранить польз. стиль"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
@@ -944,11 +952,11 @@ msgstr "Миниатюры:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "rows"
-msgstr "строк"
+msgstr "строки"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "columns"
-msgstr "столбцов"
+msgstr "колонки"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Image width:"
@@ -956,11 +964,11 @@ msgstr "Ширина изображения:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "pixels"
-msgstr "пикселей"
+msgstr "пиксели"
msgctxt "IDD_ADDREGFILTER_CAPTION"
msgid "Select Filter"
-msgstr "Выберите фильтр"
+msgstr "Выбор фильтра"
msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
msgid "Browse..."
@@ -1012,7 +1020,7 @@ msgstr "Заливка"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Width"
-msgstr "Ширина границы"
+msgstr "Ширина"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Shadow"
@@ -1020,7 +1028,7 @@ msgstr "Тень"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Screen Alignment && Margins"
-msgstr "Выравнивание и отступы"
+msgstr "Выравнивание экрана и поля"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Left"
@@ -1040,7 +1048,7 @@ msgstr "Снизу"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
msgid "Position subtitles relative to the video frame"
-msgstr "Позиционировать относительно кадра"
+msgstr "Располагать субтитры относительно кадра"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Colors && Transparency"
@@ -1072,31 +1080,31 @@ msgstr "Связать альфа-каналы"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
-msgstr "Если вы хотите использовать отдельную версию этих фильтров или другую замену, отключите их здесь."
+msgstr "Если вы хотите использовать самостоятельную версию этих фильтров или другую альтернативу, отключите их здесь."
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Source Filters"
-msgstr "Фильтры источников"
+msgstr "Фильтры-источники"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Transform Filters"
-msgstr "Декодеры"
+msgstr "Фильтры-преобразователи"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Internal LAV Filters settings"
-msgstr "Внутренние настройки LAV Filters"
+msgstr "Внутренние настройки LAV filters"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
msgid "Splitter"
-msgstr "Сплитер"
+msgstr "Сплиттер"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
msgid "Video decoder"
-msgstr "Видео декодер"
+msgstr "Декодер видео "
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
msgid "Audio decoder"
-msgstr "Аудио декодер"
+msgstr "Декодер аудио"
msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
msgid "Internal:"
@@ -1112,23 +1120,23 @@ msgstr "Выбрать..."
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "DirectShow Video"
-msgstr "DirectShow видео"
+msgstr "Видео DirectShow"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "RealMedia Video"
-msgstr "RealMedia видео"
+msgstr "Видео RealMedia"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "QuickTime Video"
-msgstr "QuickTime видео"
+msgstr "Видео QuickTime"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Audio Renderer"
-msgstr "Аудио-рендерер"
+msgstr "Рендер аудио"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Настройки для VMR-7/VMR-9 (renderless) и EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Настройки VMR-9 (renderless) и EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1140,19 +1148,19 @@ msgstr "Интерполяция:"
msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
msgid "Select D3D9 Render Device"
-msgstr "Выбрать устройство D3D9-рендеринга"
+msgstr "Выбрать D3D9-устройство рендеринга"
msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
msgid "Reinitialize when changing display"
-msgstr "Реинициализация при смене монитора"
+msgstr "Реинициализация при смене дисплея"
msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
msgid "D3D Fullscreen"
-msgstr "Полноэкранный Direct3D (устраняет дрожание)"
+msgstr "Полноэкранный D3D-режим"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Alternative VSync"
-msgstr "Альт. VSync"
+msgstr "Альтернативная VSync"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
msgid "VMR-9 Mixer Mode"
@@ -1160,7 +1168,7 @@ msgstr "Режим VMR-9 Mixer"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
msgid "YUV Mixing"
-msgstr "Смешение в YUV"
+msgstr "YUV Mixing"
msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
msgid "EVR Buffers:"
@@ -1171,8 +1179,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Субтитры *"
+msgid "Subtitles"
+msgstr "Субтитры"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1184,11 +1192,15 @@ msgstr "Шейдеры"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Rotation"
-msgstr "Поворот"
+msgstr "Вращение"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Внешние фильтры (например VSFilter) могут отображать субтитры на всех рендерерах."
+msgid "Subtitle Renderer"
+msgstr "Рендер субтитров"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Кешировать скомпилированные шейдеры"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1196,7 +1208,7 @@ msgstr "Слушать порт:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
msgid "Launch in web browser..."
-msgstr "Запустить в web-браузере..."
+msgstr "Запустить в веб-браузере..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
msgid "Enable compression"
@@ -1204,7 +1216,11 @@ msgstr "Использовать сжатие"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
-msgstr "Разрешить доступ только с локального компьютера"
+msgstr "Разрешить доступ только с локального хоста"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Включить предпросмотр"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
@@ -1224,23 +1240,51 @@ msgstr "Выгрузить..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
msgid "Default page:"
-msgstr "Начальная страница:"
+msgstr "Cтраница по умолчанию:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
-msgstr "Интерпретаторы CGI: (.ext1=path1;.ext2=path2;...)"
+msgstr "Обработчики CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Список доступных субтитров"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Загрузить и открыть"
+msgid "Download subtitles"
+msgstr "Загрузить субтитры"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Заменять уже открытые субтитры"
+msgstr "Заменить уже открытые субтитры"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Загрузить"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Обновить"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Прервать"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Настройки"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Разместить субтитры"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Разместить"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Отменить"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Настройки"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
@@ -1272,15 +1316,15 @@ msgstr "Сброс"
msgctxt "IDD_PPAGEMISC_IDC_STATIC"
msgid "Update check"
-msgstr "Проверить обновление"
+msgstr "Проверка обновлений"
msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
msgid "Enable automatic update check"
msgstr "Проверять обновления автоматически"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Интервал между проверками:"
+msgid "Check every:"
+msgstr "Проверять каждые:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1336,15 +1380,15 @@ msgstr "Сохранить"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "S"
-msgstr "S"
+msgstr "С"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Q"
-msgstr "Q"
+msgstr "К"
msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
msgid "Use an offset"
-msgstr "Задать смещение"
+msgstr "Использовать сдвиг"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Default Device"
@@ -1352,11 +1396,11 @@ msgstr "Устройство по умолчанию"
msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
msgid "Analog"
-msgstr "аналоговое"
+msgstr "Аналоговое"
msgctxt "IDD_PPAGECAPTURE_IDC_RADIO2"
msgid "Digital"
-msgstr "цифровое"
+msgstr "Цифровое"
msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
msgid "Analog settings"
@@ -1420,19 +1464,19 @@ msgstr "Коррекция частоты:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC3"
msgid "lines"
-msgstr "линий"
+msgstr "линии"
msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
msgid "columns"
-msgstr "колонок"
+msgstr "колонки"
msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
msgid "Present at nearest VSync"
-msgstr "Представлять с ближайшим vsync"
+msgstr "Вывод на ближайшей VSync"
msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
msgid "Target sync offset:"
-msgstr "Целевое смещение синхр-ции:"
+msgstr "Целевое смещение:"
msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
msgid "ms"
@@ -1452,7 +1496,7 @@ msgstr "мс"
msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
msgid "Changes take effect after the playback has been closed and restarted."
-msgstr "Изменения применятся после остановки и перезапуска воспроизведения."
+msgstr "Изменения вступят в силу после перезапуска воспроизведения."
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
msgid "Launch files in fullscreen"
@@ -1460,7 +1504,7 @@ msgstr "Запускать файлы в полноэкранном режиме
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
msgid "Hide controls in fullscreen"
-msgstr "Скрывать элементы управления в полном экране"
+msgstr "Скрывать элементы управления в полноэкранном режиме"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
msgid "ms"
@@ -1476,11 +1520,11 @@ msgstr "Выход из полноэкранного режима по окон
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Fullscreen monitor"
-msgstr "Монитор для полного экрана"
+msgstr "Монитор для полноэкранного режима"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
msgid "Use autochange fullscreen monitor mode"
-msgstr "Переключать режим монитора в полноэкранном режиме"
+msgstr "Использовать автопереключение монитора в полноэкранном режиме"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
msgid "Add"
@@ -1500,7 +1544,7 @@ msgstr "Вниз"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
msgid "Apply default monitor mode on fullscreen exit"
-msgstr "Применять режим 'по умолчанию' при переходе в оконную форму"
+msgstr "Применять режим по умолчанию при выходе из полноэкранного режима"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
msgid "Restore resolution on program exit"
@@ -1512,7 +1556,7 @@ msgstr "Задержка"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
msgid "s"
-msgstr "s"
+msgstr "с"
msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
msgid "Info"
@@ -1524,15 +1568,15 @@ msgstr "Поиск"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
msgid "Prefer forced and/or default subtitles tracks"
-msgstr "Предпочитать форсированные и субтитры по умолчанию"
+msgstr "Предпочитать принудительные и/или дорожки субтитров по умолчанию"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
msgid "Prefer external subtitles over embedded subtitles"
-msgstr "Всегда использовать внешние субтитры как основные"
+msgstr "Использовать внешние субтитры вместо встроенных"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
-msgstr "Не использовать встроенные субтитры"
+msgstr "Игнорировать встроенные субтитры"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
msgid "Autoload paths"
@@ -1543,16 +1587,28 @@ msgid "Reset"
msgstr "Сброс"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "База данных в интернете"
+msgid "Online search, download and upload subtitles"
+msgstr "Онлайн-поиск, загрузка и размещение субтитров"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Автоматически искать и загружать субтитры, если они не найдены локально"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Приоритет субтитров для людей с нарушениями слуха (если указано источником субтитров)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Игнорировать файлы, содержащие любое из следующих слов:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "URL базы данных субтитров:"
+msgid "Languages in order of preference:"
+msgstr "Языки в порядке предпочтения:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Тест"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Автоматически размещать активные субтитры после окончания воспроизведения"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1572,11 +1628,11 @@ msgstr "Игнорировать это обновление"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr "Шейдеры содержат специальные эффекты, которые могут быть добавлены в процессе видео рендеринга."
+msgstr "Шейдеры содержат специальные эффекты, которые могут быть добавлены в процесс рендеринга видео."
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
-msgstr "Добавить шейдер"
+msgstr "Добавить файл шейдера"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
msgid "Remove"
@@ -1592,7 +1648,7 @@ msgstr "Добавить в post-resize"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
-msgstr "Предустановки шейдера"
+msgstr "Предустановки шейдеров"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
msgid "Load"
@@ -1640,20 +1696,64 @@ msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr "Расширенные настройки. Убедитесь, в том, что вы знаете, что делаете."
+msgstr "Это расширенные настройки. Не изменяйте их, если не знаете, что делаете."
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
-msgstr ""
+msgstr "Верно"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
msgid "False"
-msgstr ""
+msgstr "Неверно"
msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "По умолчанию"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Устройство"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Монопольный режим"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Разрешить битстриминг"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Настройки"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Включить перекрестную подачу (для наушников)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Отсечение:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Уровень:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Заметка"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Для сведения звуковых искажений к минимуму, рекомендуется держать уровень громкости около 85% при проигрывании громкого материала, сжатого с потерями."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Качество JPEG:"
@@ -1666,3 +1766,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Отчет о сбое"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Мы сожалеем, кажется, в MPC-HC произошел сбой. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Отправить отчет об ошибке, чтобы помочь нам исправить проблему."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Дополнительная информация"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Эл. почта:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Вводить адрес электронной почты не обязательно, но может быть использован для связи разработчиков с вами."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Описание проблемы (только на английском):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Перезапустить MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Выйти из MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ru.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ru.menus.po
index a89f129b1..a8033ee2c 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ru.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ru.menus.po
@@ -1,40 +1,48 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# sayanvd <sayanvd@yandex.ru>, 2014
+# Kirill <stryaponoff@gmail.com>, 2016
+# Kirill <stryaponoff@gmail.com>, 2016
+# sayanvd <sayanvd@yandex.ru>, 2014-2015
+# Sergey <player54@mail.ru>, 2015-2016
+# SmilyCarrot <twisted-transistor@yandex.ru>, 2014
+# Kirill <stryaponoff@gmail.com>, 2016
+# SmilyCarrot <twisted-transistor@yandex.ru>, 2014
+# Victor Bychek, 2016
+# Victor Bychek, 2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:01+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Russian (http://www.transifex.com/projects/p/mpc-hc/language/ru/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-12-27 08:32+0000\n"
+"Last-Translator: Kirill <stryaponoff@gmail.com>\n"
+"Language-Team: Russian (http://www.transifex.com/mpc-hc/mpc-hc/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
msgctxt "POPUP"
msgid "&File"
-msgstr "&Файл"
+msgstr "Файл"
msgctxt "ID_FILE_OPENQUICK"
msgid "&Quick Open File..."
-msgstr "&Быстро открыть файл..."
+msgstr "Быстро открыть файл..."
msgctxt "ID_FILE_OPENMEDIA"
msgid "&Open File..."
-msgstr "&Открыть файл..."
+msgstr "Открыть файл..."
msgctxt "ID_FILE_OPENDVDBD"
msgid "Open &DVD/BD..."
-msgstr "О&ткрыть DVD/BD..."
+msgstr "Открыть DVD/BD..."
msgctxt "ID_FILE_OPENDEVICE"
msgid "Open De&vice..."
-msgstr "Открыть &устройство..."
+msgstr "Открыть устройство..."
msgctxt "ID_FILE_OPENDIRECTORY"
msgid "Open Dir&ectory..."
@@ -42,127 +50,123 @@ msgstr "Открыть папку..."
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
-msgstr "Открыть &диск"
+msgstr "Открыть диск"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
-msgstr "Последние файлы"
+msgstr "Недавние файлы"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
-msgstr "&Закрыть"
+msgstr "Закрыть"
msgctxt "ID_FILE_SAVE_COPY"
msgid "&Save a Copy..."
-msgstr "&Сохранить копию..."
+msgstr "Сохранить копию..."
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
-msgstr "Сохранить &изображение..."
+msgstr "Сохранить изображение..."
msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
-msgstr "Сохранить &миниатюры..."
-
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Открыть су&бтитры..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Со&хранить субтитры..."
+msgstr "Сохранить миниатюры изображений..."
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "База субтитров"
+msgid "S&ubtitles"
+msgstr "Субтитры"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Открыть субтитры..."
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Найти..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Сохранить субтитры..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Закачать..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "Загрузить субтитры..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Скачать..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "Разместить субтитры..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
-msgstr "С&войства"
+msgstr "Свойства"
msgctxt "ID_FILE_EXIT"
msgid "E&xit"
-msgstr "В&ыход"
+msgstr "Выход"
msgctxt "POPUP"
msgid "&View"
-msgstr "&Вид"
+msgstr "Вид"
msgctxt "ID_VIEW_CAPTIONMENU"
msgid "Caption&&Menu"
-msgstr "За&головок и меню"
+msgstr "Заголовок и меню"
msgctxt "ID_VIEW_SEEKER"
msgid "See&k Bar"
-msgstr "&Полоса прокрутки"
+msgstr "Ползунок"
msgctxt "ID_VIEW_CONTROLS"
msgid "&Controls"
-msgstr "&Управление"
+msgstr "Элементы управления"
msgctxt "ID_VIEW_INFORMATION"
msgid "&Information"
-msgstr "&Информация"
+msgstr "Информация"
msgctxt "ID_VIEW_STATISTICS"
msgid "&Statistics"
-msgstr "&Статистика"
+msgstr "Статистика"
msgctxt "ID_VIEW_STATUS"
msgid "St&atus"
-msgstr "С&татусная строка"
+msgstr "Статусная строка"
msgctxt "ID_VIEW_SUBRESYNC"
msgid "Su&bresync"
-msgstr "Синхронизация су&бтитров"
+msgstr "Синхронизация субтитров"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
-msgstr "П&лейлист"
+msgstr "Список воспроизведения"
msgctxt "ID_VIEW_CAPTURE"
msgid "Captu&re"
-msgstr "&Захват"
+msgstr "Захват"
msgctxt "ID_VIEW_NAVIGATION"
msgid "Na&vigation"
-msgstr "Список каналов"
+msgstr "Навигация"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr "&Отладка шейдеров"
+msgstr "Отладка шейдеров"
msgctxt "POPUP"
msgid "&Presets..."
-msgstr "Пре&дустановки"
+msgstr "Предустановки"
msgctxt "ID_VIEW_PRESETS_MINIMAL"
msgid "&Minimal"
-msgstr "&Минимальная"
+msgstr "Минимальная"
msgctxt "ID_VIEW_PRESETS_COMPACT"
msgid "&Compact"
-msgstr "&Компактная"
+msgstr "Компактная"
msgctxt "ID_VIEW_PRESETS_NORMAL"
msgid "&Normal"
-msgstr "&Нормальная"
+msgstr "Нормальная"
msgctxt "ID_VIEW_FULLSCREEN"
msgid "F&ull Screen"
-msgstr "Во весь &экран"
+msgstr "Во весь экран"
msgctxt "POPUP"
msgid "&Zoom"
@@ -170,39 +174,43 @@ msgstr "Масштаб"
msgctxt "ID_VIEW_ZOOM_50"
msgid "&50%"
-msgstr "&50%"
+msgstr "50%"
msgctxt "ID_VIEW_ZOOM_100"
msgid "&100%"
-msgstr "&100%"
+msgstr "100%"
msgctxt "ID_VIEW_ZOOM_200"
msgid "&200%"
-msgstr "&200%"
+msgstr "200%"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
-msgstr "Вписать"
+msgstr "Подогнать"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "Вписать (только большие)"
+msgstr "Подогнать (только большие)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "Настройки рендеринга"
+msgstr "Настройки рендера"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
-msgstr "&Тест дрожания"
+msgstr "Тест разрыва изображения"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Показать статистику"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "Отображать статистику"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Оставшееся время"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Отображать текущее время"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Показать имя файла"
msgctxt "POPUP"
msgid "&Output Range"
@@ -218,31 +226,31 @@ msgstr "16 - 235"
msgctxt "POPUP"
msgid "&Presentation"
-msgstr "Представление"
+msgstr "Презентация"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
-msgstr "Полноэкранный D3D"
+msgstr "Полноэкранный D3D-режим"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "Полноэкранный D3D с поддержкой GUI"
+msgstr "Полноэкранный D3D-режим с поддержкой GUI"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "10-битный RGB вывод"
+msgstr "10-битный RGB-вывод"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
-msgstr "Форсировать 10-битный RGB вход"
+msgstr "Принудительный 10-битный RGB-ввод"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
-msgstr "Точные расчеты в числах с плавающей точкой"
+msgstr "Полные расчеты чисел с плавающей точкой"
msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
msgid "&Half Floating Point Processing"
-msgstr "Быстрые расчеты в числах с плавающей точкой"
+msgstr "Половинчатые расчеты чисел с плавающей точкой"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
@@ -262,7 +270,7 @@ msgstr "Включить"
msgctxt "POPUP"
msgid "&Input Type"
-msgstr "Тип входа"
+msgstr "Тип ввода"
msgctxt "ID_VIEW_CM_INPUT_AUTO"
msgid "&Auto-Detect"
@@ -302,7 +310,7 @@ msgstr "Метод пересчета"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
-msgstr "Восприятие"
+msgstr "Перцептуальный"
msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
msgid "&Relative Colorimetric"
@@ -326,19 +334,19 @@ msgstr "VSync"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "Аккуратный VSync"
+msgstr "Точная VSync"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "Альтернативный VSync"
+msgstr "Альтернативная VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "У&меньшить сдвиг VSync"
+msgstr "Уменьшить сдвиг VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "У&величить сдвиг VSync"
+msgstr "Увеличить сдвиг VSync"
msgctxt "POPUP"
msgid "&GPU Control"
@@ -346,15 +354,15 @@ msgstr "Управление GPU"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "Заполнить GPU перед VSync"
+msgstr "Опустошать GPU перед VSync"
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
-msgstr "Заполнить GPU после представления"
+msgstr "Опустошать GPU после вывода"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "Ожидать заполнения"
+msgstr "Ожидать опустошения"
msgctxt "POPUP"
msgid "R&eset"
@@ -362,59 +370,55 @@ msgstr "Сброс"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "Сбросить в стандартные настройки"
+msgstr "Установить настройки по умолчанию"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "Сбросить в оптимальные настройки"
+msgstr "Установить оптимальные настройки"
msgctxt "POPUP"
msgid "Video &Frame"
-msgstr "&Видеокадр"
+msgstr "Видеокадр"
msgctxt "ID_VIEW_VF_HALF"
msgid "&Half Size"
-msgstr "&Половинный размер"
+msgstr "Половинный размер"
msgctxt "ID_VIEW_VF_NORMAL"
msgid "&Normal Size"
-msgstr "&Нормальный размер"
+msgstr "Нормальный размер"
msgctxt "ID_VIEW_VF_DOUBLE"
msgid "&Double Size"
-msgstr "&Двойной размер"
+msgstr "Двойной размер"
msgctxt "ID_VIEW_VF_STRETCH"
msgid "&Stretch To Window"
-msgstr "&Растянуть до размера экрана"
+msgstr "Растянуть до размера окна"
msgctxt "ID_VIEW_VF_FROMINSIDE"
msgid "Touch Window From &Inside"
-msgstr "&Вписать в размер экрана"
+msgstr "Вписать в окно"
msgctxt "ID_VIEW_VF_ZOOM1"
msgid "Zoom &1"
-msgstr "Масштаб &1"
+msgstr "Масштаб 1"
msgctxt "ID_VIEW_VF_ZOOM2"
msgid "Zoom &2"
-msgstr "Масштаб &2"
+msgstr "Масштаб 2"
msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
-msgstr "&Заполнить экран и обрезать кадр"
-
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Сохранять пропорции"
+msgstr "Заполнить экран и обрезать кадр"
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Установить пропорции"
+msgid "&Aspect Ratio"
+msgstr "Соотношение сторон"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "По умолчанию"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "По умолчанию (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,13 +440,17 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Допускать квадратные пиксели (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
-msgstr "&Учитывать разницу аспекта монитора/раб.стола"
+msgstr "Корректировать разницу соотношения сторон монитора/раб. стола"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
-msgstr "Поло&жение и размер кадра"
+msgstr "Положение и размер кадра"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
@@ -490,11 +498,11 @@ msgstr "Центрировать"
msgctxt "ID_VIEW_RESET"
msgid "Re&set"
-msgstr "Сбросить"
+msgstr "Сброс"
msgctxt "POPUP"
msgid "On &Top"
-msgstr "П&оверх всех окон"
+msgstr "Поверх всех окон"
msgctxt "ID_ONTOP_DEFAULT"
msgid "&Default"
@@ -514,77 +522,105 @@ msgstr "При воспроизведении видео"
msgctxt "ID_VIEW_OPTIONS"
msgid "&Options..."
-msgstr "&Настройки..."
+msgstr "Настройки..."
msgctxt "POPUP"
msgid "&Play"
-msgstr "&Воспроизведение"
+msgstr "Воспроизведение"
msgctxt "ID_PLAY_PLAYPAUSE"
msgid "&Play/Pause"
-msgstr "&Воспр/Пауза"
+msgstr "Воспроизведение/Пауза"
msgctxt "ID_PLAY_STOP"
msgid "&Stop"
-msgstr "&Стоп"
+msgstr "Стоп"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
-msgstr "По &кадрам"
+msgid "Fra&me Step"
+msgstr "Шаг на кадр вперед"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "Повтор"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Бесконечно"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "Файл"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "Плейлист"
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
-msgstr "У&меньшить скорость"
+msgstr "Уменьшить скорость"
msgctxt "ID_PLAY_INCRATE"
msgid "&Increase Rate"
-msgstr "Ув&еличить скорость"
+msgstr "Увеличить скорость"
msgctxt "ID_PLAY_RESETRATE"
msgid "R&eset Rate"
-msgstr "С&бросить скорость"
+msgstr "Скорость по умолчанию"
msgctxt "ID_FILTERS"
msgid "&Filters"
-msgstr "&Фильтры"
+msgstr "Фильтры"
msgctxt "ID_SHADERS"
msgid "S&haders"
-msgstr "&Шейдеры"
+msgstr "Шейдеры"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Аудио"
+msgid "&Audio Track"
+msgstr "Дорожка аудио"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "С&убтитры"
+msgid "Su&btitle Track"
+msgstr "Дорожка субтитров"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Поток &видео"
+msgid "Vide&o Track"
+msgstr "Дорожка видео"
msgctxt "POPUP"
msgid "&Volume"
-msgstr "&Громкость"
+msgstr "Громкость"
msgctxt "ID_VOLUME_UP"
msgid "&Up"
-msgstr "&Выше"
+msgstr "Повысить"
msgctxt "ID_VOLUME_DOWN"
msgid "&Down"
-msgstr "&Ниже"
+msgstr "Понизить"
msgctxt "ID_VOLUME_MUTE"
msgid "&Mute"
-msgstr "&Отключить"
+msgstr "Отключить"
msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "По окончании воспроизведения"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Ничего не делать"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Воспроизвести следующий файл в папке"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Выключить монитор"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "Закрыть программу"
@@ -608,57 +644,53 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Блокировать компьютер"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr ""
-
msgctxt "POPUP"
msgid "&Navigate"
-msgstr "&Навигация"
+msgstr "Навигация"
msgctxt "ID_NAVIGATE_SKIPBACK"
msgid "&Previous"
-msgstr "П&редыдущий"
+msgstr "Предыдущий"
msgctxt "ID_NAVIGATE_SKIPFORWARD"
msgid "&Next"
-msgstr "&Следующий"
+msgstr "Следующий"
msgctxt "ID_NAVIGATE_GOTO"
msgid "&Go To..."
-msgstr "&Переход..."
+msgstr "Переход..."
msgctxt "ID_NAVIGATE_TITLEMENU"
msgid "&Title Menu"
-msgstr "&Заглавное меню"
+msgstr "Заглавное меню"
msgctxt "ID_NAVIGATE_ROOTMENU"
msgid "&Root Menu"
-msgstr "&Корневое меню"
+msgstr "Корневое меню"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
-msgstr "Меню суб&титров"
+msgstr "Меню субтитров"
msgctxt "ID_NAVIGATE_AUDIOMENU"
msgid "&Audio Menu"
-msgstr "Меню ау&дио"
+msgstr "Меню аудио"
msgctxt "ID_NAVIGATE_ANGLEMENU"
msgid "An&gle Menu"
-msgstr "Меню углов в&идео"
+msgstr "Меню углов видео"
msgctxt "ID_NAVIGATE_CHAPTERMENU"
msgid "&Chapter Menu"
-msgstr "Меню с&цен"
+msgstr "Меню глав"
msgctxt "ID_FAVORITES"
msgid "F&avorites"
-msgstr "&Закладки"
+msgstr "Закладки"
msgctxt "POPUP"
msgid "&Help"
-msgstr "&Помощь"
+msgstr "Помощь"
msgctxt "ID_HELP_HOMEPAGE"
msgid "&Home Page"
@@ -666,21 +698,21 @@ msgstr "Домашняя страница"
msgctxt "ID_HELP_CHECKFORUPDATE"
msgid "Check for &updates"
-msgstr "Проверить обновление"
+msgstr "Проверить доступные обновления"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
-msgstr "Параметры командной строки"
+msgstr "Переключатели командной строки"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
-msgstr "Загрузить панель навигации"
+msgstr "Загрузить темы для панели инструментов"
msgctxt "ID_HELP_DONATE"
msgid "&Donate"
-msgstr "Пожертвовать"
+msgstr "Сделать пожертвование"
msgctxt "ID_HELP_ABOUT"
msgid "&About..."
-msgstr "&О программе..."
+msgstr "О программе..."
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.ru.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.ru.strings.po
index e64e08356..6eb379970 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.ru.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.ru.strings.po
@@ -1,24 +1,36 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Alexander Gorishnyak <kefir500@gmail.com>, 2014
-# Arkady Shapkin <arkadiy_s@inbox.ru>, 2014
-# sayanvd <sayanvd@yandex.ru>, 2014
-# stryaponoff <stryaponoff@gmail.com>, 2014
+# Arkady “KindDragon” Shapkin <arkadiy_s@inbox.ru>, 2014
+# birkoff <birkoff.anarchist@gmail.com>, 2015
+# Evgeniy Kupras <zheka20012@yandex.ru>, 2016
+# Ilya, 2015
+# iron86 <serejka@email.ua>, 2016
+# Ivan Moškin <driver37rus@yandex.ru>, 2016
+# Kirill <stryaponoff@gmail.com>, 2016
+# Pavel Otchertsov <pavel.otchertsov@gmail.com>, 2015
+# Rento Nakamura <rentonakamura@gmail.com>, 2017
+# sayanvd <sayanvd@yandex.ru>, 2014-2015
+# Sergey <player54@mail.ru>, 2015-2016
+# Kirill <stryaponoff@gmail.com>, 2014,2016
+# SmilyCarrot <twisted-transistor@yandex.ru>, 2014-2015
# Underground78, 2014
+# Victor Bychek, 2015-2016
+# Денис <denyspokhylenko@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:10+0000\n"
-"Last-Translator: Alexander Gorishnyak <kefir500@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.com/projects/p/mpc-hc/language/ru/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Russian (http://www.transifex.com/mpc-hc/mpc-hc/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
msgctxt "IDS_INFOBAR_LOCATION"
msgid "Location"
@@ -54,7 +66,7 @@ msgstr "Воспроизведение музыки"
msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
msgid "Play Audio CD"
-msgstr "Воспроизведение аудиодисков"
+msgstr "Воспроизведение аудио-CD"
msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
msgid "Play DVD Movie"
@@ -64,9 +76,17 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Свойства"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Файл"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
-msgstr "&Стиль по умолчанию"
+msgstr "Стиль по умолчанию"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Плейлист"
msgctxt "IDS_FAVFILES"
msgid "Files"
@@ -90,7 +110,7 @@ msgstr "Сдвиг Sync"
msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
msgid "avg: %d ms, dev: %d ms"
-msgstr "сред: %d мс, откл: %d мс"
+msgstr "средн.: %d мс, отклон.: %d мс"
msgctxt "IDS_STATSBAR_JITTER"
msgid "Jitter"
@@ -102,7 +122,7 @@ msgstr "Битрейт"
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
-msgstr "(сред/тек)"
+msgstr "(средн./текущ.)"
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
@@ -118,11 +138,31 @@ msgstr "Стили"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr ""
+msgstr "Если цель рендеринга не определена, SSA/ASS субтитры будут обработаны относительно видеокадра, а все другие текстовые субтитры - относительно окна."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Режим повтора: Плейлист"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Режим повтора: Файл"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Повторять бесконечно: Вкл"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Повторять бесконечно: Откл"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Бесконечное повторение"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
-msgstr "Никогда (быстро)"
+msgstr "Никогда (быстрый подход)"
msgctxt "IDS_PPAGE_CAPTURE_FG1"
msgid "Only when switching different video types (default)"
@@ -130,15 +170,15 @@ msgstr "Только при изменении типа видео (по умо
msgctxt "IDS_PPAGE_CAPTURE_FG2"
msgid "Always (slowest option)"
-msgstr "Всегда (медленно)"
+msgstr "Всегда (медленный подход)"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
msgid "Not supported by some devices. Two video decoders always present in the filter graph."
-msgstr "Не поддерживается некоторыми устройствами. Два видеодекодера всегда присутствуют в графе фильтров."
+msgstr "Не поддерживается некоторыми устройствами. Два видеодекодера всегда присутствуют в графе."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr "Быстро за исключением случаем переключения видеопотоков. Только один видеодекодер присутствует в графе фильтров."
+msgstr "Быстро, за исключением случаев переключения видеопотоков. Только один видеодекодер присутствует в графе."
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
@@ -146,7 +186,7 @@ msgstr "Не рекомендуется. Только для тестирова
msgctxt "IDS_PPAGE_CAPTURE_SFG0"
msgid "Never if possible (fastest, but not supported by most filters)"
-msgstr "Никогда, если возможно (быстро, но не поддерживается большинство фильтров)"
+msgstr "Никогда, если возможно (быстро, но не поддерживается большинством фильтров)"
msgctxt "IDS_PPAGE_CAPTURE_SFG1"
msgid "Only when switching different video types (default)"
@@ -214,7 +254,7 @@ msgstr "Конец"
msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
msgid "Preview"
-msgstr "Просмотр"
+msgstr "Предпросмотр"
msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
msgid "Vob ID"
@@ -242,11 +282,11 @@ msgstr "Шрифт"
msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
msgid "Failed to render some of the pins of the DVD Navigator filter"
-msgstr "Не удалось обработать некоторые пины фильтра DVD Navigator"
+msgstr "Не удалось обработать некоторые потоки фильтра-навигатора DVD"
msgctxt "IDS_DVD_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for DVD playback"
-msgstr "Не удалось запросить необходимые интерфейсы для воспроизведения DVD"
+msgstr "Не удалось запросить интерфейсы для воспроизведения DVD"
msgctxt "IDS_CAPTURE_LIVE"
msgid "Live"
@@ -254,11 +294,11 @@ msgstr "Прямой эфир"
msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
msgid "Can't add video capture filter to the graph"
-msgstr "Невозможно добавить видеофильтр захвата к графу"
+msgstr "Невозможно добавить фильтр захвата видео в граф"
msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
msgid "Can't add audio capture filter to the graph"
-msgstr "Невозможно добавить аудиофильтр захвата к графу"
+msgstr "Невозможно добавить фильтр захвата аудио в граф"
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
@@ -266,7 +306,7 @@ msgstr "Не удалось открыть устройство захвата."
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
-msgstr "Не удается открыть, неверные входные параметры"
+msgstr "Нельзя открыть, неверные параметры ввода"
msgctxt "IDS_EDIT_LIST_EDITOR"
msgid "Edit List Editor"
@@ -278,7 +318,7 @@ msgstr "Введенное время больше длительности фа
msgctxt "IDS_MISSING_ICONS_LIB"
msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
-msgstr "Библиотека иконок 'mpciconlib.dll' не найдена.\nБудет использован обычный иконка для файловых ассоциаций.\nЧтобы получить 'mpciconlib.dll', переустановите MPC-HC."
+msgstr "Библиотека значков «mpciconlib.dll» не найдена.\nДля файловых ассоциаций будет использован обычный значок.\nЧтобы получить «mpciconlib.dll», переустановите MPC-HC."
msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
msgid "File"
@@ -302,7 +342,7 @@ msgstr "Название"
msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
msgid "CharSet"
-msgstr "CharSet"
+msgstr "Кодировка"
msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
msgid "Unicode"
@@ -322,19 +362,19 @@ msgstr "Эффект"
msgctxt "IDS_PLAYLIST_CAPTION"
msgid "Playlist"
-msgstr "Плейлист"
+msgstr "Список воспроизведения"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
-msgstr "Вкл/Выкл"
+msgstr "Вкл/Откл"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "От (fps)"
+msgid "From (FPS)"
+msgstr "От (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "До (fps)"
+msgid "To (FPS)"
+msgstr "До (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -346,15 +386,15 @@ msgstr "По умолчанию"
msgctxt "IDS_PPAGE_FS_OTHER"
msgid "Other"
-msgstr "другие"
+msgstr "Другие"
msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
msgid "System Default"
-msgstr "Системный по умолчанию"
+msgstr "Системн. по умолчанию"
msgctxt "IDS_GRAPH_INTERFACES_ERROR"
msgid "Failed to query the needed interfaces for playback"
-msgstr "Не удалось запросить необходимые интерфейсы для воспроизведения"
+msgstr "Не удалось запросить интерфейсы для воспроизведения"
msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
msgid "Could not set target window for graph notification"
@@ -362,63 +402,63 @@ msgstr "Не удалось создать окно для вывода граф
msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
msgid "Failed to render all pins of the DVD Navigator filter"
-msgstr "Не удалось обработать все пины фильтра DVD Navigator"
+msgstr "Не удалось обработать все потоки фильтра-навигатора DVD"
msgctxt "IDS_PLAYLIST_OPEN"
msgid "&Open"
-msgstr "&Запустить"
+msgstr "Открыть"
msgctxt "IDS_PLAYLIST_ADD"
msgid "A&dd"
-msgstr "&Добавить"
+msgstr "Добавить"
msgctxt "IDS_PLAYLIST_REMOVE"
msgid "&Remove"
-msgstr "&Убрать"
+msgstr "Убрать"
msgctxt "IDS_PLAYLIST_CLEAR"
msgid "C&lear"
-msgstr "&Очистить"
+msgstr "Очистить"
msgctxt "IDS_PLAYLIST_COPYTOCLIPBOARD"
msgid "&Copy to clipboard"
-msgstr "&Копировать в буфер"
+msgstr "Копировать в буфер"
msgctxt "IDS_PLAYLIST_SAVEAS"
msgid "&Save As..."
-msgstr "&Сохранить как..."
+msgstr "Сохранить как..."
msgctxt "IDS_PLAYLIST_SORTBYLABEL"
msgid "Sort by &label"
-msgstr "Сортировать по &имени"
+msgstr "Сортировать по имени"
msgctxt "IDS_PLAYLIST_SORTBYPATH"
msgid "Sort by &path"
-msgstr "Сортировать по &пути"
+msgstr "Сортировать по пути"
msgctxt "IDS_PLAYLIST_RANDOMIZE"
msgid "R&andomize"
-msgstr "П&еремешать"
+msgstr "Перемешать"
msgctxt "IDS_PLAYLIST_RESTORE"
msgid "R&estore"
-msgstr "В&осстановить"
+msgstr "Восстановить"
msgctxt "IDS_SUBRESYNC_SEPARATOR"
msgid "&Separator"
-msgstr "&Разделитель"
+msgstr "Разделитель"
msgctxt "IDS_SUBRESYNC_DELETE"
msgid "&Delete"
-msgstr "&Удалить"
+msgstr "Удалить"
msgctxt "IDS_SUBRESYNC_DUPLICATE"
msgid "D&uplicate"
-msgstr "&Дублировать"
+msgstr "Дублировать"
msgctxt "IDS_SUBRESYNC_RESET"
msgid "&Reset"
-msgstr "&Сбросить"
+msgstr "Сбросить"
msgctxt "IDS_MPLAYERC_104"
msgid "Subtitle Delay -"
@@ -468,6 +508,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Проигрыватель::Шейдеры"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Ресурсы"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Разное"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Воспроизведение::Захват"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Воспроизведение::Настройки Sync Renderer"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Воспроизведение::Полный экран"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Встроенные фильтры::Рендер аудио"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Аудиопереключатель"
@@ -482,43 +550,35 @@ msgstr "Вы хотите обновить иконки медиафайлов?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
-msgstr "Это устраняет проблему неправильного отображения иконок после обновления библиотеки иконок.\nБудет обновлены только иконки, файловые ассоциации останутся прежними."
+msgstr "Это устранит проблему неправильного отображения иконок после обновления библиотеки.\nФайловые ассоциации останутся прежними, будут обновлены только иконки."
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
-msgstr "Устаревший видео рендерер"
+msgstr "Старый рендер видео"
msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Видео Mixing Renderer 7 (оконный)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
-msgstr "Видео Mixing Renderer 9 (оконный)"
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Видео Mixing Renderer 7 (без рендера)"
+msgstr "Video Mixing Renderer 9 (оконный)"
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
-msgstr "Видео Mixing Renderer 9 (без рендера)"
+msgstr "Video Mixing Renderer 9 (renderless)"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
-msgstr "Расширенный видео рендерер"
+msgstr "Расширенный рендер видео (EVR)"
msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
msgid "Enhanced Video Renderer (custom presenter)"
-msgstr "Расширенный видео рендерер (свой presenter)"
+msgstr "Расширенный рендер видео (EVR custom presenter)"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
-msgstr "Haali видео рендерер"
+msgstr "Haali Video Renderer"
msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
msgid "Null (anything)"
@@ -554,35 +614,7 @@ msgstr "Воспроизведение::Вывод"
msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
-msgstr "Проигрыватель::Web-интерфейс"
-
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Субтитры::База"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Ресурсы"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Разное"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Воспроизведение::Захват"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Воспроизведение::Sync Renderer"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Воспроизведение::Полный экран"
+msgstr "Проигрыватель::Веб-интерфейс"
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
@@ -594,55 +626,47 @@ msgstr "Клип"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
-msgstr "Видео рендер по умолчанию для DirectShow. Этот режим всегда включается в тех случаях, когда другие рендеры не могут загрузиться. На Windows XP аналогичен VMR-7 (windowed)."
+msgstr "Рендер видео по умолчанию для DirectShow. Включается в тех случаях, когда другие рендеры не могут загрузиться. Он аналогичен VMR-7 в Windows XP (windowed)."
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "Видео рендер по умолчанию для Windows 9x/ME/2K. В зависимости от видимости видеоокна и возможностей видеокарты, режим динамически переключается между методами GDI, DirectDraw и Overlay."
+msgstr "Рендер видео по умолчанию для Windows 9x/ME/2K. В зависимости от видимости окна видео и возможностей вашей видеокарты, он динамически переключается между режимами GDI, DirectDraw и Overlay."
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "Рендеринг всегда производится в оверлее. Обычно доступны только форматы YUV, но они представляются напрямую, без преобразования в RGB. Это самый быстрый метод из всех, и только здесь стопроцентно работает \"зеркальный\" вывод видео (на TV-OUT)."
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Видео рендер по умолчанию для Windows XP. Очень стабильный и лишь немного медленнее метода Overlay mixer. Использует DirectDraw и, по возможности, запускается в оверлее."
+msgstr "Рендеринг всегда производится в оверлее. Обычно доступны только форматы YUV, но они выводятся напрямую, без преобразования в RGB. Это самый быстрый метод из всех, и только при нем всегда работает «зеркальный» вывод видео (на tv-out)."
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Доступен только при установленном DirectX 9. Возможности аналогичны VMR-7 (windowed), но никогда не использует оверлей, а потому может быть немного медленнее, чем VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "То же, что и VMR-7 (windowed),но с плагином MPC-HC Allocator-Presenter для вывода субтитров. \"Зеркальное\" отображение видео в оверлее работать НЕ БУДЕТ. Глубину цвета рекомендуется установить в 'True Color'."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Доступно, если у вас установлен DirectX 9. Очень стабилен, но не использует оверлей. Из-за этого может быть немного медленнее, чем Overlay mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
-msgstr "То же, что и VMR-9 (windowed), но с плагином MPC-HC Allocator-Presenter для вывода субтитров. \"Зеркальное\" отображение видео в оверлее МОЖЕТ работать. Глубину цвета рекомендуется установить в 'True Color'."
+msgstr "То же, что и VMR-9 (windowed), но с плагином MPC-HC Allocator-Presenter для вывода субтитров. «Зеркальное» отображение видео в оверлее МОЖЕТ работать. Глубину цвета рекомендуется установить в «True Color»."
msgctxt "IDC_DSDXR"
msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
msgstr "То же, что и VMR-9 (renderless), но использует двухпроходное бикубическое изменения размера."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Подключается к любому типу видеоданных и отсылает входящие кадры в никуда. Режим может пригодиться для сохранения ресурсов процессора в случае, если нужен только звук."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Подключается к любому типу видеоданных и отсылает входящие кадры в никуда. Используется для сохранения ресурсов процессора в случае, если вам нужен только звук."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
-msgstr "То же, что и нормальный Null-рендер, но подключается только к несжатым типам данных."
+msgstr "То же, что и обычный Null renderer, но подключается только к несжатым типам."
msgctxt "IDC_DSEVR"
msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
-msgstr "Только для Vista или новее. Возможен на XP с установленным .NET Framework 3.5"
+msgstr "Доступно только на Vista или XP с установленным .NET Framework 3.5."
msgctxt "IDC_DSEVR_CUSTOM"
msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
-msgstr "То же, что и EVR, но использует Allocator-Presenter для субтитров и обработки. Рекомендуется для Windows Vista и новее."
+msgstr "То же, что и EVR, но использует Allocator-Presenter для субтитров и постобработки. Рекомендуется для Windows Vista и новее."
msgctxt "IDC_DSMADVR"
msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
-msgstr "Высококачественный renderer, требуется видеокарта с поддержкой D3D9."
+msgstr "Высококачественный рендер, требует GPU с поддержкой D3D9 или новее."
msgctxt "IDC_DSSYNC"
msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
@@ -650,11 +674,7 @@ msgstr "То же, что EVR (CP), но имеет дополнительные
msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Собственный рендер RealMedia. Скрипты SMIL будут работать, но без интерактивности. Использует DirectDraw и, по возможности, запускается в оверлее."
-
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Вывод RealMedia обрабатывается с помощью плагина Allocator-Presenter в VMR-7 (renderless)."
+msgstr "Рендер RealMedia. Скрипты SMIL будут работать, но взаимодействие маловероятно. Использует DirectDraw и запускается в оверлее, когда это возможно."
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
@@ -662,11 +682,7 @@ msgstr "Вывод RealMedia обрабатывается с помощью пл
msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
-msgstr "Собственный рендер QuickTime. Замедляется при изменении размера видеокадра или если окно частично закрыто другим окном. Если оверлей недоступен возвращается к методу GDI."
-
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Вывод QuickTime обрабатывается с помощью плагина Allocator-Presenter в VMR-7 (renderless)."
+msgstr "Рендер QuickTime. Замедляется при изменении размера видеокадра или частичном закрытии плеера другим окном. Если оверлей недоступен, возвращается к GDI."
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
@@ -674,35 +690,23 @@ msgstr "Вывод QuickTime обрабатывается с помощью пл
msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
-msgstr "Поверхность для видео выделяется как обычная поверхность вне экрана."
-
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Renderer сломан, не используйте его."
+msgstr "Поверхность видео выделяется как обычная поверхность вне экрана."
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Сообщение об ошибке"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC упал, но эта сборка была скомпилирована без отладочной информации.\nЕсли вы хотите сообщить об этой ошибке, сначала вы должны попробовать официальную сборку.\n\nВы хотите открыть страницу загрузки?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Обычная поверхность вне экрана"
msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
msgid "2D surfaces"
-msgstr "2D-поверхность"
+msgstr "2D-поверхности"
msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
msgid "3D surfaces (recommended)"
-msgstr "3D-поверхность (рекомендуется)"
+msgstr "3D-поверхности (рекомендуется)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
@@ -730,11 +734,11 @@ msgstr "Бикубический A=-1.00 (PS 2.0)"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
msgid "**unavailable**"
-msgstr "**недоступен**"
+msgstr "**недоступно**"
msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
msgid "The selected renderer is not installed."
-msgstr "Выбранный рендерер не установлен."
+msgstr "Выбранный рендер не установлен."
msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
msgid "Null (anything)"
@@ -744,9 +748,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (без сжатия)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC аудио рендерер"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Встроенный рендер аудио"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -758,11 +762,15 @@ msgstr "MIME-тип"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr "Для того, чтобы просмотреть внедренный ресурс в вашем браузере, необходимо включить веб-интерфейс.\n\nЕсли вы хотите лишь сохранить информацию, используйте кнопку \"Сохранить как\"."
+msgstr "Для того, чтобы просмотреть внедренный ресурс в вашем браузере, необходимо включить веб-интерфейс.\n\nЕсли вы хотите лишь сохранить информацию, используйте кнопку «Сохранить как»."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Загрузить субтитры"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Загрузить субтитры..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Разместить субтитры..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -790,27 +798,27 @@ msgstr "Зашифрованные файлы не поддерживаются"
msgctxt "IDS_RFS_MISSING_VOLS"
msgid "Couldn't find all archive volumes"
-msgstr "Не могу найти все архивные тома"
+msgstr "Не удалось найти все архивные тома"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Поверхность для видео выделяется как текстура, но для копирования и растяжения видео в буфер используются функции 2D. Требует наличия видеокарты, которая может выделять 32bit RGBA текстуры, с размерами не кратными 2, хотя бы в разрешении видео."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Поверхность видео выделяется как текстура, но для копирования и растяжения видео в буфер используются функции 2D. Требует наличия видеокарты, которая может выделять 32bit RGBA-текстуры с размерами, не кратными 2, хотя бы в разрешении видео."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
-msgstr "Поверхность для видео выделяется как текстура и рисуется как два треугольника в 3D. Включение антиалиасинга в настройках видеокарты может существенно замедлить скорость рендеринга."
+msgstr "Поверхность видео выделяется как текстура и рисуется в виде двух треугольников в 3D. Включение сглаживания может существенно замедлить процесс рендеринга."
msgctxt "IDC_DX9RESIZER_COMBO"
msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
-msgstr "При отсутствии поддержки пиксельных шейдеров версии 2.0, будет автоматически использован простой билинейный метод."
+msgstr "При отсутствии поддержки пиксельных шейдеров версии 2.0, используется простой билинейный метод."
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
-msgstr "Переводит режим VMR-9 (renderless) в режим микшера, это значит, что большинство элементов управления на странице свойств будут работать и будут использовать отдельный рабочий поток для обработки кадров."
+msgstr "Переводит VMR-9 (renderless) в режим микшера. Большинство элементов управления на странице свойств будут работать, а для обработки кадров будет выделен отдельный рабочий поток."
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
-msgstr "Повышает производительность, но могут быть проблемы с совместимостью."
+msgstr "Повышает производительность, но могут возникнуть проблемы с совместимостью."
msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
msgid "Reduces tearing but prevents the toolbar from being shown."
@@ -818,7 +826,19 @@ msgstr "Уменьшает разрывы, но не отображает пан
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
-msgstr "Уменьшает разрывы, работает в обход VSync встроенной в D3D."
+msgstr "Уменьшает разрывы, обходя VSync, встроенную в D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Настройка тюнера"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Субтитры не загружены или рендер видео не поддерживается."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Сохраняет скомпилированные шейдеры в локальной папке AppData для ускорения загрузки"
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
@@ -834,27 +854,27 @@ msgstr "Использует LAV Filters"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr "Использует LAV Filters. По умолчанию отключено, так как фильтры Microsoft, как правило, более стабильны для этих форматов.\n Если вы решите использовать встроенные фильтры, включите их для источника и декодирование будет иметь более лучший опыт воспроизведения."
+msgstr "Использует LAV Filters. По умолчанию отключено, так как фильтры Microsoft более стабильны для этих форматов.\nЕсли вы решите использовать встроенные фильтры, включите их как для источника, так и для декодирования, чтобы улучшить процесс воспроизведения."
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
-msgstr "Вкл/Откл панель навигации"
+msgstr "Вкл/откл отображение панели навигации"
msgctxt "IDS_AG_VSYNCACCURATE"
msgid "Accurate VSync"
-msgstr "Аккуратный VSync"
+msgstr "Точная VSync"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr ""
+msgstr "Если цель рендеринга не определена, она будет взята из стиля по умолчанию."
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
-msgstr ""
+msgstr "Отключить анимацию субтитров. Включение данной опции замедляет работу CPU, но может помочь с мигающими субтитрами. "
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr ""
+msgstr "Увеличение числа буферных фрагментов изображения должно увеличить скорость рендеринга за счет увеличения использования видеопамяти GPU."
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
@@ -862,7 +882,7 @@ msgstr "После нажатия этой кнопки, выбранное со
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr ""
+msgstr "Отключение этой опции предотвратит мигание субтитров, но может привести к пропуску некоторых видеокадров при рендеринге."
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -892,7 +912,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Отключить звук"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Включить звук"
@@ -910,31 +930,31 @@ msgstr "Вперед\nВперед"
msgctxt "IDS_SUBRESYNC_ORIGINAL"
msgid "&Original"
-msgstr "&Оригинальный"
+msgstr "Оригинальный"
msgctxt "IDS_SUBRESYNC_CURRENT"
msgid "&Current"
-msgstr "&Текущий"
+msgstr "Текущий"
msgctxt "IDS_SUBRESYNC_EDIT"
msgid "&Edit"
-msgstr "&Изменить"
+msgstr "Изменить"
msgctxt "IDS_SUBRESYNC_YES"
msgid "&Yes"
-msgstr "&Да"
+msgstr "Да"
msgctxt "IDS_SUBRESYNC_NO"
msgid "&No"
-msgstr "&Нет"
+msgstr "Нет"
msgctxt "IDS_SUBRESYNC_DECREASE"
msgid "&Decrease"
-msgstr "У&меньшить"
+msgstr "Уменьшить"
msgctxt "IDS_SUBRESYNC_INCREASE"
msgid "&Increase"
-msgstr "Ув&еличить"
+msgstr "Увеличить"
msgctxt "IDS_OPTIONS_CAPTION"
msgid "Options"
@@ -946,22 +966,22 @@ msgstr "Выбрать..."
msgctxt "IDS_SHADERS_DEBUG"
msgid "&Debug Shaders..."
-msgstr "&Отладка шейдеров..."
+msgstr "Отладка шейдеров..."
msgctxt "IDS_FAVORITES_ADD"
msgid "&Add to Favorites..."
-msgstr "&Добавить..."
+msgstr "Добавить..."
msgctxt "IDS_FAVORITES_ORGANIZE"
msgid "&Organize Favorites..."
-msgstr "&Упорядочить..."
+msgstr "Упорядочить..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "В случайном порядке"
+msgid "Sh&uffle"
+msgstr "Перемешать"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Открыть папку"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -990,7 +1010,7 @@ msgstr "Вы уверены, что хотите очистить список
msgctxt "IDS_AG_EDL_SAVE"
msgid "EDL save"
-msgstr "EDL сохранить"
+msgstr "Сохранить EDL"
msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time Correction"
@@ -998,7 +1018,7 @@ msgstr "Включить коррекцию времени кадра"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
-msgstr "Вкл/Откл окно EDL"
+msgstr "Вкл/откл отображение окна EDL"
msgctxt "IDS_AG_EDL_IN"
msgid "EDL set In"
@@ -1010,27 +1030,27 @@ msgstr "Установить EDL наружу"
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
-msgstr "Повернуть кадр по X-"
+msgstr "Вращение кадра X-"
msgctxt "IDS_AG_PNS_ROTATEY_P"
msgid "PnS Rotate Y+"
-msgstr "Повернуть кадр по Y+"
+msgstr "Вращение кадра Y+"
msgctxt "IDS_AG_PNS_ROTATEY_M"
msgid "PnS Rotate Y-"
-msgstr "Повернуть кадр по Y-"
+msgstr "Вращение кадра Y-"
msgctxt "IDS_AG_PNS_ROTATEZ_P"
msgid "PnS Rotate Z+"
-msgstr "Повернуть кадр по Z+"
+msgstr "Вращение кадра Z+"
msgctxt "IDS_AG_PNS_ROTATEZ_M"
msgid "PnS Rotate Z-"
-msgstr "Повернуть кадр по Z-"
+msgstr "Вращение кадра Z-"
msgctxt "IDS_AG_TEARING_TEST"
msgid "Tearing Test"
-msgstr "Тест дрожания"
+msgstr "Тест разрыва"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
@@ -1045,8 +1065,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Масштабировать в Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Скрыть, когда на полный экран"
+msgid "&Hide on Fullscreen"
+msgstr "Скрыть в полноэкранном режиме"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1058,11 +1078,11 @@ msgstr "Буферизация... (%d%%)"
msgctxt "IDS_CONTROLS_CAPTURING"
msgid "Capturing..."
-msgstr "Идёт захват..."
+msgstr "Идет захват..."
msgctxt "IDS_CONTROLS_OPENING"
msgid "Opening..."
-msgstr "Открывается..."
+msgstr "Открытие..."
msgctxt "IDS_CONTROLS_CLOSED"
msgid "Closed"
@@ -1070,7 +1090,7 @@ msgstr "Закрыто"
msgctxt "IDS_SUBTITLES_OPTIONS"
msgid "&Options..."
-msgstr "&Опции..."
+msgstr "&Настройки..."
msgctxt "IDS_SUBTITLES_STYLES"
msgid "&Styles..."
@@ -1078,7 +1098,7 @@ msgstr "&Стили..."
msgctxt "IDS_SUBTITLES_RELOAD"
msgid "&Reload"
-msgstr "&Перезагрузить"
+msgstr "Перезагрузить"
msgctxt "IDS_SUBTITLES_ENABLE"
msgid "&Enable"
@@ -1098,7 +1118,7 @@ msgstr "Автор"
msgctxt "IDS_INFOBAR_COPYRIGHT"
msgid "Copyright"
-msgstr "Права"
+msgstr "Копирайт"
msgctxt "IDS_INFOBAR_RATING"
msgid "Rating"
@@ -1154,7 +1174,7 @@ msgstr "Аудиофайлы (все типы)"
msgctxt "IDS_AG_NOT_KNOWN"
msgid "Not known"
-msgstr "Неизвестный"
+msgstr "Неизвестно"
msgctxt "IDS_MPLAYERC_0"
msgid "Quick Open File"
@@ -1186,19 +1206,19 @@ msgstr "Невозможно загрузить %s, пиксельные шей
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
-msgstr "Не удается найти точку входа необходимой функции в %s, пиксельные шейдеры не будут работать."
+msgstr "Не удается найти точки входа необходимой функции в %s, пиксельные шейдеры не будут работать."
msgctxt "IDS_OSD_SHADERS_PRESET"
msgid "Shader preset: %s"
-msgstr "Предустановка шейдера: %s"
+msgstr "Предустановка шейдеров: %s"
msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
msgid "Next Shader Preset"
-msgstr "Следующая предустановка шейдера"
+msgstr "Следующая предустановка шейдеров"
msgctxt "IDS_AG_SHADERS_PRESET_PREV"
msgid "Prev Shader Preset"
-msgstr "Предыдущая предустановка шейдера"
+msgstr "Предыдущая предустановка шейдеров"
msgctxt "IDS_STRING_COLON"
msgid "%s:"
@@ -1233,7 +1253,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Добавить содержащую папку"
msgctxt "IDS_HW_INDICATOR"
@@ -1242,7 +1262,7 @@ msgstr "[H/W]"
msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
msgid "Software Decoding"
-msgstr "Программы декодирования"
+msgstr "Программное декодирование"
msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
msgid "Playback rate"
@@ -1254,7 +1274,7 @@ msgstr "&Копировать список фильтров в буфер"
msgctxt "IDS_CREDENTIALS_SERVER"
msgid "Enter server credentials"
-msgstr "Введите параметры сервера"
+msgstr "Введите данные сервера"
msgctxt "IDS_CREDENTIALS_CONNECT"
msgid "Enter your credentials to connect"
@@ -1266,7 +1286,7 @@ msgstr "Сохранить пользовательский стиль"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
-msgstr ""
+msgstr "Образование/Наука"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
@@ -1274,7 +1294,7 @@ msgstr "Скрывать элементы управления и панели
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr "Предотвратить использование внешнего рендера субтитров, когда используется встроенный."
+msgstr "Запретить загрузку внешнего рендера субтитров, когда используется встроенный."
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
@@ -1286,15 +1306,15 @@ msgstr "Значение"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr ""
+msgstr "Максимальное количество пунктов в меню «Недавние файлы» и на какой позиции сохранены."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
-msgstr ""
+msgstr "Запоминать позицию для файлов длиннее N минут."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
msgid "Remember file position also for audio files."
-msgstr ""
+msgstr "Также запоминать позицию для аудиофайлов."
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
@@ -1302,7 +1322,7 @@ msgstr "Ничего не делать"
msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
msgid "Play next file in the folder"
-msgstr ""
+msgstr "Воспроизвести следующий файл в папке"
msgctxt "IDS_AFTER_PLAYBACK_REWIND"
msgid "Rewind current file"
@@ -1314,7 +1334,7 @@ msgstr "Закрыть"
msgctxt "IDS_AFTER_PLAYBACK_EXIT"
msgid "Exit"
-msgstr "Выход"
+msgstr "Выйти"
msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
msgid "Turn off the monitor"
@@ -1330,15 +1350,91 @@ msgstr "Качество (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
-msgstr ""
+msgstr "Максимальный размер (NxNpx) загружаемой обложки в режиме аудио."
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr ""
+msgstr "Задержка субтитров будет уменьшаться/увеличиваться на это значение при каждом нажатии соответствующих клавиш (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<not defined>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Смотреть"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Вверх"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Вниз"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Сортировать по LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Удалить все"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Вы уверены, что хотите удалить все каналы из списка?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Информация недоступна"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Пожалуйста, подождите. Идет анализ..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "Соотношение сторон %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Включить запись лога в файл (требуется перезапуск)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Оставшееся время"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Высокая точность"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "По окончании воспроизведения: перемотать текущий файл"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "По окончании воспроизведения: закрыть"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC столкнулся с проблемой во время инициализации. Вы можете помочь нам исправить эту ошибку.\n\nВы хотите сообщить о ней?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Введите положительное значение, если звук спешит, или отрицательное, если он отстает."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Предпросмотр в настоящее время отключен. Вы можете включить его в настройках MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Эта опция может быть использована для удаленного предпросмотра мультимедийных файлов. Используйте ее только в безопасных частных сетях. \n\nВы действительно хотите включить эту опцию?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Встроенный рендер субтитров"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1360,13 +1456,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Изображение успешно сохранено"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Загрузить субтитры"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Открыть субтитры..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Сохранить субтитры"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Сохранить субтитры..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1389,12 +1485,12 @@ msgid "Stop"
msgstr "Стоп"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "Шаг вперед"
+msgid "Frame-step"
+msgstr "Шаг на кадр вперед"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "Шаг назад"
+msgid "Frame-step back"
+msgstr "Шаг на кадр назад"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
@@ -1414,7 +1510,7 @@ msgstr "Спорт"
msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
msgid "Children's/Youth programmes"
-msgstr "Детские/молодёжные программы"
+msgstr "Детские/Молодежные программы"
msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
msgid "Music/Ballet/Dance"
@@ -1426,11 +1522,11 @@ msgstr "Искусство/Культура"
msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
msgid "Social/Political issues/Economics"
-msgstr "Социальные/политические события/Экономика"
+msgstr "Социальные/Политические события/Экономика"
msgctxt "IDS_CONTENT_LEISURE"
msgid "Leisure hobbies"
-msgstr "Досуг и отдых"
+msgstr "Досуг и хобби"
msgctxt "IDS_FILE_RECYCLE"
msgid "Move to Recycle Bin"
@@ -1442,15 +1538,15 @@ msgstr "Сохранить копию"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
-msgstr "Последний ключевой кадр"
+msgstr "Посл. ключевой кадр"
msgctxt "IDS_FASTSEEK_NEAREST"
msgid "Nearest keyframe"
-msgstr "Ближайший ключевой кадр"
+msgstr "Ближайш. ключевой кадр"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
-msgstr "MPC-HC столкнулся с проблемой во время инициализации. Воспроизведение DVD может не работать правильно. Это может быть вызвано некоторой несовместимостью со средства безопасности.\n\nВы хотите сообщить об этой проблеме?"
+msgstr "MPC-HC столкнулся с проблемой во время инициализации. Возможно, воспроизведение DVD работает неправильно. Это может быть вызвано несовместимостью с инструментами безопасности.\n\nВы хотите сообщить об этой проблеме?"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
@@ -1458,11 +1554,11 @@ msgstr "Никогда не показывать"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
msgid "Show when moving the cursor, hide after:"
-msgstr "Отображать движущийся курсор, скрыть после:"
+msgstr "Отображать движущийся курсор:"
msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
msgid "Show when hovering control, hide after:"
-msgstr "Отображать при наведении на элемент управления, скрыть после:"
+msgstr "Отображать при наведении на элемент управления:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
@@ -1470,15 +1566,15 @@ msgstr "Не удалось установить шейдеры pre-resize"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
-msgstr "Коррекция времени кадра: включена"
+msgstr "Коррекция времени кадра: вкл"
msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
msgid "Frame Time Correction: Off"
-msgstr "Коррекция времени кадра: отключена"
+msgstr "Коррекция времени кадра: выкл"
msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
msgid "Target VSync Offset: %.1f"
-msgstr "Целевое смещение синхронизации: %.1f"
+msgstr "Целевой сдвиг VSync: %.1f"
msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
msgid "VSync Offset: %d"
@@ -1490,11 +1586,11 @@ msgstr "Скорость: %.2lfx"
msgctxt "IDS_OSD_THUMBS_SAVED"
msgid "Thumbnails saved successfully"
-msgstr "Миниатюра успешно сохранена"
+msgstr "Миниатюры успешно сохранены"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Поток &видео"
+msgid "Vide&o Track"
+msgstr "Дорожка видео"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1506,11 +1602,11 @@ msgstr "Сбросить настройки"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "Вы действительно хотите сбросить настройки плеера?\nИмейте в виду, что все ваши текущие настройки будут потеряны!"
+msgstr "Вы действительно хотите сбросить настройки MPC-HC?\nИмейте в виду, что все ваши текущие настройки будут потеряны!"
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
-msgstr "Пожалуйста, закройте другие копии MPC-HC."
+msgstr "Для восстановления настроек требуется закрыть все окна MPC-HC."
msgctxt "IDS_EXPORT_SETTINGS"
msgid "Export settings"
@@ -1518,7 +1614,7 @@ msgstr "Экспорт настроек"
msgctxt "IDS_EXPORT_SETTINGS_WARNING"
msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
-msgstr "Некоторые настройки не были сохранены.\nВы хотите сохранить их перед экспортом?"
+msgstr "Некоторые изменения не были сохранены.\nВы хотите сохранить их перед экспортом?"
msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
msgid "The settings have been successfully exported."
@@ -1526,7 +1622,7 @@ msgstr "Настройки успешно экспортированы."
msgctxt "IDS_EXPORT_SETTINGS_FAILED"
msgid "The export failed! This can happen when you don't have the correct rights."
-msgstr "Не удалось выполнить экспорт! Возможно у вас недостаточно прав."
+msgstr "Не удалось экспортировать настройки! Возможно, у вас недостаточно прав."
msgctxt "IDS_BDA_ERROR"
msgid "BDA Error"
@@ -1538,15 +1634,15 @@ msgstr "Уменьшить скорость"
msgctxt "IDS_AG_RESET_RATE"
msgid "Reset Rate"
-msgstr "Сбросить скорость в 100%"
+msgstr "Установить скорость по умолчанию"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Задержка аудио +10мс"
+msgid "Audio Delay +10 ms"
+msgstr "Задержка аудио +10 мс"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Задержка аудио -10мс"
+msgid "Audio Delay -10 ms"
+msgstr "Задержка аудио -10 мс"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
@@ -1582,11 +1678,11 @@ msgstr "Переход назад (по ключевым кадрам)"
msgctxt "IDS_AG_NEXT"
msgid "Next"
-msgstr "Следующий"
+msgstr "След."
msgctxt "IDS_AG_PREVIOUS"
msgid "Previous"
-msgstr "Предыдущий"
+msgstr "Пред."
msgctxt "IDS_AG_NEXT_FILE"
msgid "Next File"
@@ -1598,7 +1694,7 @@ msgstr "Предыдущий файл"
msgctxt "IDS_MPLAYERC_99"
msgid "Toggle Direct3D fullscreen"
-msgstr "Полноэкранный Direct3D Вкл/Откл"
+msgstr "Вкл/откл полноэкранный D3D-режим"
msgctxt "IDS_MPLAYERC_100"
msgid "Goto Prev Subtitle"
@@ -1616,14 +1712,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Сдвинуть субтитры вправо"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Показать статистику"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Перейти к началу"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Показать имя файла"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Воспроизведение DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Воспроизведение BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Показать статистику рендера"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Сброс статистики рендера"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Субтитры::Дополнительно"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Скрыть границы"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Только видеокадр"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Показать заголовок и меню"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Скрыть меню"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Расширенные"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Минимальный вид"
@@ -1689,8 +1825,8 @@ msgid "PnS Dec Height"
msgstr "Уменьшить высоту кадра"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Субтитры загружаются, пожалуйста, подождите."
+msgid "Downloading [%s] \"%s\""
+msgstr "Загрузка [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1701,12 +1837,12 @@ msgid "No subtitles found."
msgstr "Субтитры не найдены."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d субтитров доступно."
+msgid "%d subtitle(s) available."
+msgstr "%d субтитров доступно."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "Вы хотите, чтобы плеер автоматически проверял обновления?\n\nЭту функция может быть отключена в настройках на странице 'Разное'."
+msgstr "Вы хотите, чтобы плеер сам проверял наличие обновлений?\n\nЭту функция может быть отключена в настройках на странице \"Разное\"."
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1722,11 +1858,11 @@ msgstr "200%"
msgctxt "IDS_ZOOM_AUTOFIT"
msgid "Auto Fit"
-msgstr "Вписать"
+msgstr "Подогнать"
msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (Larger Only)"
-msgstr "Вписать (только большие)"
+msgstr "Подогнать (только большие)"
msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
msgid "Zoom Auto Fit (Larger Only)"
@@ -1738,7 +1874,7 @@ msgstr "Масштаб: Авто (только большие)"
msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
msgid "Double click to open file location"
-msgstr "Дважды кликните, чтобы открыть папку"
+msgstr "Кликните дважды, чтобы открыть папку"
msgctxt "IDS_TOOLTIP_REMAINING_TIME"
msgid "Toggle between elapsed and remaining time"
@@ -1746,7 +1882,7 @@ msgstr "Переключение между прошедшим и оставши
msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
msgid "Invalid delay"
-msgstr "Некорректный интервал"
+msgstr "Некорректная задержка"
msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
msgid "Please enter a number between 1 and 365."
@@ -1790,11 +1926,11 @@ msgstr "Сдвинуть кадр вниз/вправо"
msgctxt "IDS_AG_VOLUME_UP"
msgid "Volume Up"
-msgstr "Увеличить громкость"
+msgstr "Повысить громкость"
msgctxt "IDS_AG_VOLUME_DOWN"
msgid "Volume Down"
-msgstr "Уменьшить громкость"
+msgstr "Понизить громкость"
msgctxt "IDS_AG_VOLUME_MUTE"
msgid "Volume Mute"
@@ -1802,11 +1938,11 @@ msgstr "Отключить звук"
msgctxt "IDS_MPLAYERC_63"
msgid "DVD Title Menu"
-msgstr "DVD - заглавное меню"
+msgstr "Заглавное меню DVD"
msgctxt "IDS_AG_DVD_ROOT_MENU"
msgid "DVD Root Menu"
-msgstr "DVD - корневое меню"
+msgstr "Корневое меню DVD"
msgctxt "IDS_MPLAYERC_65"
msgid "DVD Subtitle Menu"
@@ -1818,11 +1954,11 @@ msgstr "DVD - меню аудио"
msgctxt "IDS_MPLAYERC_67"
msgid "DVD Angle Menu"
-msgstr "DVD - меню углов"
+msgstr "Меню углов DVD"
msgctxt "IDS_MPLAYERC_68"
msgid "DVD Chapter Menu"
-msgstr "DVD - меню сцен"
+msgstr "Меню глав DVD"
msgctxt "IDS_AG_DVD_MENU_LEFT"
msgid "DVD Menu Left"
@@ -1842,26 +1978,26 @@ msgstr "DVD меню - вниз"
msgctxt "IDS_MPLAYERC_73"
msgid "DVD Menu Activate"
-msgstr "DVD меню - активировать"
+msgstr "Меню DVD - активировать"
msgctxt "IDS_AG_DVD_MENU_BACK"
msgid "DVD Menu Back"
-msgstr "DVD меню - назад"
+msgstr "Меню DVD - назад"
msgctxt "IDS_MPLAYERC_75"
msgid "DVD Menu Leave"
-msgstr "DVD меню - покинуть"
+msgstr "Меню DVD - покинуть"
msgctxt "IDS_AG_BOSS_KEY"
msgid "Boss key"
msgstr "Босс-клавиша"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Меню проигрывателя (сокращенное)"
+msgid "Player Menu"
+msgstr "Меню проигрывателя"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
+msgid "Player Menu (full)"
msgstr "Меню проигрывателя (полное)"
msgctxt "IDS_AG_FILTERS_MENU"
@@ -1870,79 +2006,63 @@ msgstr "Меню фильтров"
msgctxt "IDS_AG_OPTIONS"
msgid "Options"
-msgstr "Опции"
+msgstr "Настройки"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Следующее аудио"
+msgid "Next Audio Track"
+msgstr "Следующая дорожка аудио"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Предыдущее аудио"
+msgid "Prev Audio Track"
+msgstr "Предыдущая дорожка аудио"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Следующие субтитры"
+msgid "Next Subtitle Track"
+msgstr "Следующая дорожка субтитров"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Предыдущие субтитры"
+msgid "Prev Subtitle Track"
+msgstr "Следующая дорожка субтитров"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
-msgstr "Субтитры Вкл/Откл"
+msgstr "Вкл/откл субтитры"
msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
-msgstr "Перезагрузить субтитры"
-
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Следующее аудио (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Предыдущее аудио (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Следующие субтитры (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Предыдущие субтитры (OGM)"
+msgstr "Перезапустить субтитры"
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
-msgstr "Следующий угол (DVD)"
+msgstr "След. угол (DVD)"
msgctxt "IDS_MPLAYERC_92"
msgid "Prev Angle (DVD)"
-msgstr "Предыдущий угол (DVD)"
+msgstr "Пред. угол (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Следующее аудио (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Следующая дорожка аудио (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Предыдущее аудио (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Предыдущая дорожка аудио (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Следующие субтитры (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Следующая дорожка субтитров (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Предыдущие субтитры (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Предыдущая дорожка субтитров (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
-msgstr "Субтитры Вкл/Откл (DVD)"
+msgstr "Вкл/откл субтитры (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Оставшееся время"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Отображение текущего времени"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1968,11 +2088,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Зашифрованный"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Да"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Нет"
@@ -2006,7 +2126,7 @@ msgstr "Субтитры сохранены"
msgctxt "IDS_MAINFRM_4"
msgid "Cannot save subtitles"
-msgstr "Не удаётся сохранить субтитры."
+msgstr "Не удается сохранить субтитры."
msgctxt "IDS_AG_FRAMERATE"
msgid "Frame rate"
@@ -2018,22 +2138,22 @@ msgstr "записано: %d, потеряно: %d"
msgctxt "IDS_AG_FRAMES"
msgid "Frames"
-msgstr "Кадров"
+msgstr "Кадры"
msgctxt "IDS_AG_BUFFERS"
msgid "Buffers"
-msgstr "Буферов"
+msgstr "Буферы"
msgctxt "IDS_MAINFRM_9"
msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Том: %02lu/%02lu, Раздел: %02lu/%02lu, Глава: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Угол: %02lu/%02lu, %lux%lu %luГц %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %u Гц %d бит %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2046,11 +2166,11 @@ msgstr "Воспроизвести в MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr ""
+msgstr "MPC-HC не имеет достаточно прав для изменения файловых ассоциаций. Нажмите кнопку «Запуск от имени администратора»."
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr "MPC-HC - это чрезвычайно легкий, с открытым исходным кодом медиа-плеер для Windows. Он поддерживает все распространенные форматы видео и аудио файлов, доступных для воспроизведения. Мы гарантируем 100% свободу от шпионских программ, рекламы или тулбаров."
+msgstr "MPC-HC - это чрезвычайно легкий и открытый медиаплеер для Windows. Он поддерживает все распространенные форматы видео- и аудиофайлов, доступные для воспроизведения. Мы гарантируем 100% свободу от шпионских программ, рекламы или панелей инструментов."
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2058,7 +2178,7 @@ msgstr "канал"
msgctxt "IDS_MAINFRM_13"
msgid "channels"
-msgstr "каналов"
+msgstr "каналы"
msgctxt "IDS_AG_TITLE"
msgid "Title %u"
@@ -2066,11 +2186,11 @@ msgstr "Раздел %u"
msgctxt "IDS_MAINFRM_16"
msgid "DVD: Unexpected error"
-msgstr "DVD: Непредвиденная ошибка."
+msgstr "DVD: Непредвиденная ошибка"
msgctxt "IDS_MAINFRM_17"
msgid "DVD: Copy-Protect Fail"
-msgstr "DVD: проблема с защитой от копирования."
+msgstr "DVD: проблема с защитой от копирования"
msgctxt "IDS_MAINFRM_18"
msgid "DVD: Invalid DVD 1.x Disc"
@@ -2078,27 +2198,27 @@ msgstr "DVD: Неправильный диск DVD 1.x"
msgctxt "IDS_MAINFRM_19"
msgid "DVD: Invalid Disc Region"
-msgstr "DVD: Неправильный регион диска."
+msgstr "DVD: Неправильный регион диска"
msgctxt "IDS_MAINFRM_20"
msgid "DVD: Low Parental Level"
-msgstr "DVD: Низкий уровень родительского контроля."
+msgstr "DVD: Низкий уровень родительского контроля"
msgctxt "IDS_MAINFRM_21"
msgid "DVD: Macrovision Fail"
-msgstr "DVD: Проблема с Macrovision."
+msgstr "DVD: Сбой Macrovision"
msgctxt "IDS_MAINFRM_22"
msgid "DVD: Incompatible System And Decoder Regions"
-msgstr "DVD: Несовместимые регионы декодера и системы."
+msgstr "DVD: Несовместимые регионы декодера и системы"
msgctxt "IDS_MAINFRM_23"
msgid "DVD: Incompatible Disc And Decoder Regions"
-msgstr "DVD: Несовместимые регионы декодера и диска."
+msgstr "DVD: Несовместимые регионы декодера и диска"
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "Эта опция служит для устранения дрожания, однако её включение препятствует отображению контекстного меню и диалогов.\n\nВы действительно хотите активировать опцию?"
+msgstr "Эта опция служит для устранения разрывов, однако ее включение препятствует отображению контекстного меню и диалогов во время воспроизведения.\n\nВы действительно хотите активировать эту опцию?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
@@ -2114,51 +2234,43 @@ msgstr "Имя файла содержит недопустимые символ
msgctxt "IDS_THUMB_ROWNUMBER"
msgid "Rows:"
-msgstr "Строк:"
+msgstr "Строки:"
msgctxt "IDS_THUMB_COLNUMBER"
msgid "Columns:"
-msgstr "Столбцов:"
+msgstr "Колонки:"
msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Ширина"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "Введённый URL верный!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Версия протокола не совпадает. Пожалуйста, обновите ваш плеер или выберите другой адрес!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "Пропорции"
+msgstr "Соотношение сторон"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
msgstr ", Всего: %ld, Потеряно: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", Размер: %I64dКб"
+msgid ", Size: %I64d KB"
+msgstr ", Размер: %I64d Кб"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", Размер: %I64dМб"
+msgid ", Size: %I64d MB"
+msgstr ", Размер: %I64d Мб"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", Свободно: %I64dКб"
+msgid ", Free: %I64d KB"
+msgstr ", Свободно: %I64d Кб"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", Свободно: %I64dМб"
+msgid ", Free: %I64d MB"
+msgstr ", Свободно: %I64d Мб"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
-msgstr ", Свободно буферов: %03d/%03d"
+msgstr ", Свободные буферы: %03d/%03d"
msgctxt "IDS_AG_ERROR"
msgid "Error"
@@ -2166,7 +2278,7 @@ msgstr "Ошибка"
msgctxt "IDS_SUBTITLE_STREAM_OFF"
msgid "Subtitle: off"
-msgstr "Субтитры: отключены"
+msgstr "Субтитры: откл"
msgctxt "IDS_SUBTITLE_STREAM"
msgid "Subtitle: %s"
@@ -2194,7 +2306,7 @@ msgstr "Проблема с GetCurrentImage, hr = %08x"
msgctxt "IDS_SCREENSHOT_ERROR"
msgid "Cannot create file"
-msgstr "Не удаётся создать файл"
+msgstr "Не удается создать файл"
msgctxt "IDS_THUMBNAILS_NO_DURATION"
msgid "Cannot create thumbnails for files with no duration"
@@ -2202,11 +2314,11 @@ msgstr "Невозможно создать миниатюры для файло
msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
msgid "Failed to get video frame size"
-msgstr "Не удаётся получить размер видеокадра"
+msgstr "Не удается получить размер видеокадра"
msgctxt "IDS_OUT_OF_MEMORY"
msgid "Out of memory, go buy some more!"
-msgstr "Не хватает памяти, купите ещё!"
+msgstr "Не хватает памяти!"
msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
@@ -2222,11 +2334,11 @@ msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Имя файла: %s\\N%sР
msgctxt "IDS_THUMBNAIL_TOO_SMALL"
msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
-msgstr "Невозможно создать файл со столь небольшими миниатюрами.\n\nПопробуйте уменьшить количество миниатюр или увеличить общий размер."
+msgstr "Невозможно создать файл со столь малыми миниатюрами.\n\nПопробуйте уменьшить количество миниатюр или увеличить общий размер."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Для загрузки субтитров необходимо изменить тип рендерера и открыть файл заново.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync или madVR\n- RealMedia: специалный рендерер для RealMedia, или открывайте через DirectShow\n- QuickTime: DX7 или DX9 рендерер для QuickTime\n- ShockWave: не поддерживается"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Для открытия субтитров вы должны изменить тип рендера видео и открыть файл заново.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR или Haali\n- RealMedia: специальный рендер для RealMedia (или откройте его через DirectShow напрямую)\n- QuickTime: DX7 или DX9-рендер для QuickTime\n- ShockWave: -"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2234,15 +2346,15 @@ msgstr "Файлы субтитров"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
-msgstr "Пропорции: %ld:%ld"
+msgstr "Соотношение сторон: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Пропорции: стандартные"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Соотношение сторон: по умолчанию (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Задержка аудио: %I64dмс"
+msgid "Audio delay: %I64d ms"
+msgstr "Задержка аудио: %I64d мс"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2253,16 +2365,16 @@ msgid "Out of memory"
msgstr "Не хватает памяти"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Ошибка: требуется Flash для IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Ошибка: требуется Adobe Flash Player для Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
-msgstr "QuickTime пока не поддерживается для X64 (библиотеки от Apple недоступны)"
+msgstr "QuickTime еще не поддерживается X64 (библиотека Apple недоступна)"
msgctxt "IDS_MAINFRM_80"
msgid "Failed to create the filter graph object"
-msgstr "Не удаётся создать граф фильтра"
+msgstr "Не удается создать граф фильтра"
msgctxt "IDS_MAINFRM_81"
msgid "Invalid argument"
@@ -2270,15 +2382,11 @@ msgstr "Неверный аргумент"
msgctxt "IDS_MAINFRM_82"
msgid "Opening aborted"
-msgstr "Открытие прервано"
+msgstr "Открытие отменено"
msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
-msgstr "Не удаётся воспроизвести файл"
-
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL неверный, невозможно обнаружить базу субтитров!"
+msgstr "Не удалось обработать файл"
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
@@ -2300,21 +2408,13 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Текущий"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "Работа MPC-HC прервана. Чтобы помочь нам в решении этой проблемы, пожалуйста, отправьте файл '%s' на наш баг-трекер.\n\nХотите ли вы сейчас открыть папку, содержащую дамп-файл, и перейти на баг-трекер?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Ошибка при создании дамп-файла '%s' (ошибка %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
-msgstr "Выберите папку"
+msgstr "Выбор папки"
msgctxt "IDS_MAINFRM_DIR_CHECK"
msgid "Include subdirectories"
-msgstr "Вкл. подпапки"
+msgstr "Вкл подпапки"
msgctxt "IDS_AG_PAUSE"
msgid "Pause"
@@ -2322,15 +2422,15 @@ msgstr "Пауза"
msgctxt "IDS_AG_TOGGLE_CAPTION"
msgid "Toggle Caption&Menu"
-msgstr "Вкл/Откл заголовок и меню"
+msgstr "Вкл/откл отображение заголовка и меню"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
-msgstr "Вкл/Откл полосу прокрутки"
+msgid "Toggle Seek Bar"
+msgstr "Вкл/откл отображение ползунка"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
msgid "Toggle Controls"
-msgstr "Вкл/Откл управление"
+msgstr "Вкл/откл отображение элементов управления"
msgctxt "IDS_MAINFRM_84"
msgid "Invalid file name"
@@ -2338,11 +2438,11 @@ msgstr "Неверное имя файла"
msgctxt "IDS_MAINFRM_86"
msgid "Cannot connect the filters"
-msgstr "Не удаётся подключить фильтры"
+msgstr "Не удается подключить фильтры"
msgctxt "IDS_MAINFRM_87"
msgid "Cannot load any source filter"
-msgstr "Не удаётся загрузить ни одного фильтра источников"
+msgstr "Не удается загрузить ни один фильтр-источник"
msgctxt "IDS_MAINFRM_88"
msgid "Cannot render the file"
@@ -2366,11 +2466,11 @@ msgstr "Неподдерживаемый поток"
msgctxt "IDS_MAINFRM_93"
msgid "Cannot find DVD directory"
-msgstr "Не удаётся найти каталог DVD"
+msgstr "Не удается найти каталог DVD"
msgctxt "IDS_MAINFRM_94"
msgid "Can't create the DVD Navigator filter"
-msgstr "Не удаётся создать фильтр DVD-навигатора"
+msgstr "Не удается создать фильтр-навигатор DVD"
msgctxt "IDS_AG_FAILED"
msgid "Failed"
@@ -2378,19 +2478,19 @@ msgstr "Неудачно"
msgctxt "IDS_MAINFRM_96"
msgid "Can't create video capture filter"
-msgstr "Не удаётся создать фильтр видеозахвата"
+msgstr "Не удается создать фильтр видеозахвата"
msgctxt "IDS_MAINFRM_98"
msgid "No capture filters"
-msgstr "Фильтры видеозахвата отсутствуют"
+msgstr "Отсутствуют фильтры видеозахвата "
msgctxt "IDS_MAINFRM_99"
msgid "Can't create capture graph builder object"
-msgstr "Не удаётся создать объект построителя графа видеозахвата"
+msgstr "Не удается создать объект построителя графа видеозахвата"
msgctxt "IDS_MAINFRM_108"
msgid "Couldn't open any device"
-msgstr "Не удаётся открыть ни одного устройства"
+msgstr "Не удается открыть ни одно устройство"
msgctxt "IDS_AG_SOUND"
msgid "Sound"
@@ -2410,7 +2510,7 @@ msgstr "&Свойства..."
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr " (pin) свойства..."
+msgstr " Свойства (pin) ..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2434,7 +2534,7 @@ msgstr " (Комментарии режиссера 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr "Включить DVD субтитры"
+msgstr "Включить субтитры DVD"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
@@ -2454,7 +2554,7 @@ msgstr "Уменьшить сдвиг VSync"
msgctxt "IDS_MAINFRM_136"
msgid "MPC-HC D3D Fullscreen"
-msgstr "MPC-HC Полноэкранный D3D"
+msgstr "MPC-HC полноэкранный D3D-режим"
msgctxt "IDS_MAINFRM_137"
msgid "Unknown format"
@@ -2462,7 +2562,7 @@ msgstr "Неизвестный формат"
msgctxt "IDS_MAINFRM_138"
msgid "Sub shift: %ld ms"
-msgstr "Смещение субтитров: %ld"
+msgstr "Сдвиг субтитров: %ld"
msgctxt "IDS_VOLUME_BOOST_INC"
msgid "Volume boost increase"
@@ -2481,40 +2581,40 @@ msgid "Volume boost Max"
msgstr "Усиление громкости - Max"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Использование: mpc-hc.exe \"путь\" [переключатели]\n\n\"путь\"\t\tФайл или каталог для загрузки (разрешены \n\t\tмаски, \"-\" denotes standard input)\n/dub \"dubname\"\tЗагрузить дополнительный звуковой файл\n/dubdelay \"file\"\tЗагрузить звуковой файл со смещением XXмс\n\t\t(если файл содержит \"...DELAY XXms...\")\n/d3dfs\t\tСтартовать в полноэкранном D3D режиме\n/sub \"subname\"\tЗагрузить дополнительные субтитры\n/filter \"filtername\"\tЗагрузить фильтры DirectShow из библиотеки\n\t\t(разрешены маски)\n/dvd\t\tЗапуск в режиме DVD, \"путь\" означает каталог\n\t\tс DVD (опционально)\n/dvdpos T#C\tНачать воспроизведение с title T, chapter C\n/dvdpos T#hh:mm\tНачать воспроизведение с title T, позиции\n\t\thh:mm:ss\n/cd\t\tЗагрузить все дорожки Audio CD или (S)VCD,\n\t\t\"путь\" означает путь к диску (опционально)\n/device\t\tOpen the default video device\n/open\t\tТолько открыть файл\n/play\t\tНачинать воспроизведение сразу после запуска\n/close\t\tЗакрыть по окончании воспроизведения\n\t\t(работает только с ключем /play)\n/shutdown\tВыключить компьютер по окончании\n\t\tвоспроизведения\n/fullscreen\tЗапуск в полноэкранном режиме\n/minimized\tЗапуск в свернутом виде\n/new\t\tИспользовать новую копию проигрывателя\n/add\t\tДобавить \"путь\" в плейлист, можно совместно\n\t\tс ключами /open и /play\n/regvid\t\tРегистрировать видеоформаты\n/regaud\t\tРегистрировать аудиоформаты\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tРазрегистрировать все форматы\n/start ms\t\tВоспроизводить с позиции \"ms\"\n\t\t(миллисекунды)\n/startpos hh:mm:ss\tВоспроизводить с позиции hh:mm:ss\n/fixedsize w,h\tУстановить фиксированный размер окна\n/monitor N\tЗапускаться на мониторе N, где N\n\t\tотсчитывается с 1\n/audiorenderer N\tИспользовать аудиорендер N, где N\n\t\tотсчитывается с 1 (смотрите настройки\n\t\t\"Вывод\")\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tВостановить настройки по умолчанию\n/help /h /?\tПоказывает эту справку\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Использование: mpc-hc.exe \"путь\" [ключи]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
-msgstr "В командной строке найдены нераспознанные переключатели: \n\n"
+msgstr "В командной строке найдены неопознанные переключатели: \n\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
-msgstr "Вкл/Откл информацию"
+msgstr "Вкл/откл отображение информации"
msgctxt "IDS_AG_TOGGLE_STATS"
msgid "Toggle Statistics"
-msgstr "Вкл/Откл статистику"
+msgstr "Вкл/откл отображение статистики"
msgctxt "IDS_AG_TOGGLE_STATUS"
msgid "Toggle Status"
-msgstr "Вкл/Откл статусную строку"
+msgstr "Вкл/откл отображение статусной строки"
msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
msgid "Toggle Subresync Bar"
-msgstr "Вкл/Откл окно синхронизации субтитров"
+msgstr "Вкл/откл отображение окна синхронизации субтитров"
msgctxt "IDS_AG_TOGGLE_PLAYLIST"
msgid "Toggle Playlist Bar"
-msgstr "Вкл/Откл плейлист"
+msgstr "Вкл/откл отображение плейлиста"
msgctxt "IDS_AG_TOGGLE_CAPTURE"
msgid "Toggle Capture Bar"
-msgstr "Вкл/Откл окно захвата"
+msgstr "Вкл/откл отображение окна захвата"
msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
msgid "Toggle Debug Shaders"
-msgstr "Вкл/Откл отладку шейдеров"
+msgstr "Вкл/откл отладку шейдеров"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
@@ -2530,15 +2630,15 @@ msgstr "Масштаб 200%"
msgctxt "IDS_AG_NEXT_AR_PRESET"
msgid "Next AR Preset"
-msgstr "Следующая предустановка пропорций"
+msgstr "След. предустановка пропорций"
msgctxt "IDS_AG_VIDFRM_STRETCH"
msgid "VidFrm Stretch"
-msgstr "Видеокадр. Растянуть до размера экрана"
+msgstr "Растянуть видеокадр до размеров экрана"
msgctxt "IDS_AG_VIDFRM_INSIDE"
msgid "VidFrm Inside"
-msgstr "Видеокадр. Вписать в размер экрана"
+msgstr "Вписать видеокадр в размер экрана"
msgctxt "IDS_AG_VIDFRM_OUTSIDE"
msgid "VidFrm Outside"
@@ -2546,43 +2646,35 @@ msgstr "Видеокадр. Заполнить экран и обрезать к
msgctxt "IDS_AG_PNS_RESET"
msgid "PnS Reset"
-msgstr "Сбросить настройки положения кадра"
+msgstr "Положение кадра по умолчанию"
msgctxt "IDS_AG_PNS_ROTATEX_P"
msgid "PnS Rotate X+"
-msgstr "Повернуть кадр по X+"
+msgstr "Вращение кадра X+"
msgctxt "IDS_AG_VIDFRM_ZOOM1"
msgid "VidFrm Zoom 1"
-msgstr "Видеокадр. Zoom 1"
+msgstr "Масштаб видеокадра 1"
msgctxt "IDS_AG_VIDFRM_ZOOM2"
msgid "VidFrm Zoom 2"
-msgstr "Видеокадр. Zoom 2"
+msgstr "Масштаб видеокадра 2"
msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
msgid "VidFrm Switch Zoom"
-msgstr "Видеокадр. Изменить масштаб"
+msgstr "Изменить масштаб видеокадра"
msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Включить все фильтры"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Настройка тюнера"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Субтитры не загружены либо неподдерживаемый видео-рендер."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
-msgstr "Свяжитесь c разработчиком, если это ваш логотип!"
+msgstr "Автор неизвестен. Свяжитесь c нами, если вы сделали этот логотип!"
msgctxt "IDS_NO_MORE_MEDIA"
msgid "No more media in the current folder."
-msgstr "Воспроизведение медиа-файлов из каталога закончено"
+msgstr "В текущей папке больше нет медиафайлов."
msgctxt "IDS_FIRST_IN_FOLDER"
msgid "The first file of the folder is already loaded."
@@ -2606,7 +2698,7 @@ msgstr "Передний центр"
msgctxt "IDS_LOW_FREQUENCY"
msgid "Low Frequency"
-msgstr "Сабвуфер"
+msgstr "Низкая частота"
msgctxt "IDS_BACK_LEFT"
msgid "Back Left"
@@ -2664,41 +2756,13 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Верх. задний правый"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Сброс статистики"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Субтитры::Дополнительно"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Скрыть границы"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Только видеокадр"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Показать заголовок и меню"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Скрыть меню"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Расширенный"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
-msgstr "над полосой прокрутки"
+msgid "Above seek bar"
+msgstr "Над полосой прокрутки"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
-msgstr "под полосой прокрутки"
+msgid "Below seek bar"
+msgstr "Под полосой прокрутки"
msgctxt "IDS_VIDEO_STREAM"
msgid "Video: %s"
@@ -2714,7 +2778,7 @@ msgstr "Очистить"
msgctxt "IDS_CANCEL"
msgid "Cancel"
-msgstr "Отменить"
+msgstr "Отмена"
msgctxt "IDS_THUMB_THUMBNAILS"
msgid "Layout"
@@ -2722,7 +2786,7 @@ msgstr "Размешение"
msgctxt "IDS_THUMB_PIXELS"
msgid "Pixels:"
-msgstr "Пикселей:"
+msgstr "Пиксели:"
msgctxt "IDS_TEXTFILE_ENC"
msgid "Encoding:"
@@ -2734,23 +2798,23 @@ msgstr "&Отключить все фильтры"
msgctxt "IDS_ENABLE_AUDIO_FILTERS"
msgid "Enable all audio decoders"
-msgstr "Включить все аудио декодеры"
+msgstr "Включить все декодеры аудио"
msgctxt "IDS_DISABLE_AUDIO_FILTERS"
msgid "Disable all audio decoders"
-msgstr "Отключить все аудио декодеры"
+msgstr "Отключить все декодеры аудио"
msgctxt "IDS_ENABLE_VIDEO_FILTERS"
msgid "Enable all video decoders"
-msgstr "Включить все видео декодеры"
+msgstr "Включить все декодеры видео"
msgctxt "IDS_DISABLE_VIDEO_FILTERS"
msgid "Disable all video decoders"
-msgstr "Отключить все видео декодеры"
+msgstr "Отключить все декодеры видео"
msgctxt "IDS_STRETCH_TO_WINDOW"
msgid "Stretch To Window"
-msgstr "Растянуть до размера экрана"
+msgstr "Растянуть до размера окна"
msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
msgid "Touch Window From Inside"
@@ -2806,7 +2870,7 @@ msgstr "MP4"
msgctxt "IDS_MFMT_MOV"
msgid "QuickTime Movie"
-msgstr "QuickTime фильм"
+msgstr "QuickTime Movie"
msgctxt "IDS_MFMT_3GP"
msgid "3GP"
@@ -2818,7 +2882,7 @@ msgstr "3G2"
msgctxt "IDS_MFMT_FLV"
msgid "Flash Video"
-msgstr "Flash видео"
+msgstr "Flash Video"
msgctxt "IDS_MFMT_OGM"
msgid "Ogg Media"
@@ -2834,15 +2898,15 @@ msgstr "Real Script"
msgctxt "IDS_MFMT_WMV"
msgid "Windows Media Video"
-msgstr "Windows Media видео"
+msgstr "Windows Media Video"
msgctxt "IDS_MFMT_BINK"
msgid "Smacker/Bink Video"
-msgstr "Smacker/Bink видео"
+msgstr "Smacker/Bink Video"
msgctxt "IDS_MFMT_FLIC"
msgid "FLIC Animation"
-msgstr "FLIC анимация"
+msgstr "FLIC Animation"
msgctxt "IDS_MFMT_DSM"
msgid "DirectShow Media"
@@ -2850,7 +2914,7 @@ msgstr "DirectShow Media"
msgctxt "IDS_MFMT_IVF"
msgid "Indeo Video Format"
-msgstr "Indeo Video формат"
+msgstr "Indeo Video Format"
msgctxt "IDS_MFMT_OTHER"
msgid "Other"
@@ -2865,8 +2929,8 @@ msgid "Other Audio"
msgstr "Прочее аудио"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2874,7 +2938,27 @@ msgstr "AIFF"
msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
-msgstr "Apple Lossless (без потерь)"
+msgstr "Apple Lossless"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
@@ -2882,7 +2966,7 @@ msgstr "AMR"
msgctxt "IDS_MFMT_APE"
msgid "Monkey's Audio"
-msgstr "Monkey аудио"
+msgstr "Monkey's Audio"
msgctxt "IDS_MFMT_AU"
msgid "AU/SND"
@@ -2890,7 +2974,7 @@ msgstr "AU/SND"
msgctxt "IDS_MFMT_CDA"
msgid "Audio CD track"
-msgstr "Дорожка аудио CD"
+msgstr "Audio CD track"
msgctxt "IDS_MFMT_FLAC"
msgid "FLAC"
@@ -2898,7 +2982,7 @@ msgstr "FLAC"
msgctxt "IDS_MFMT_M4A"
msgid "MPEG-4 Audio"
-msgstr "MPEG-4 аудио"
+msgstr "MPEG-4 Audio"
msgctxt "IDS_MFMT_MIDI"
msgid "MIDI"
@@ -2906,7 +2990,7 @@ msgstr "MIDI"
msgctxt "IDS_MFMT_MKA"
msgid "Matroska audio"
-msgstr "Matroska аудио"
+msgstr "Matroska audio"
msgctxt "IDS_MFMT_MP3"
msgid "MP3"
@@ -2914,7 +2998,7 @@ msgstr "MP3"
msgctxt "IDS_MFMT_MPA"
msgid "MPEG audio"
-msgstr "MPEG аудио"
+msgstr "MPEG audio"
msgctxt "IDS_MFMT_MPC"
msgid "Musepack"
@@ -2940,33 +3024,17 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Плейлист"
msgctxt "IDS_MFMT_BDPLS"
msgid "Blu-ray playlist"
-msgstr "Blu-ray плейлист"
+msgstr "Плейлист Blu-ray"
msgctxt "IDS_MFMT_RAR"
msgid "RAR Archive"
-msgstr "RAR архив"
+msgstr "RAR-архив"
msgctxt "IDS_DVB_CHANNEL_FPS"
msgid "FPS"
@@ -2980,81 +3048,69 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Соотношение сторон"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Использовать WASAPI (требуется перезапуск)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Отключить звук при быстрой перемотке"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Звуковое устройство:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
-msgstr "VSync: включен"
+msgstr "VSync: вкл"
msgctxt "IDS_OSD_RS_VSYNC_OFF"
msgid "VSync: Off"
-msgstr "VSync: выключен"
+msgstr "VSync: откл"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
msgid "Accurate VSync: On"
-msgstr "Аккуратный VSync: включен"
+msgstr "Точная VSync: вкл"
msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
msgid "Accurate VSync: Off"
-msgstr "Аккуратный VSync: отключен"
+msgstr "Точная VSync: откл"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
msgid "Synchronize Video to Display: On"
-msgstr "Синхронизировать видео с дисплеем: включено"
+msgstr "Синхронизировать видео с дисплеем: вкл"
msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
msgid "Synchronize Video to Display: Off"
-msgstr "Синхронизировать видео с дисплеем: отключено"
+msgstr "Синхронизировать видео с дисплеем: откл"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
msgid "Synchronize Display to Video: On"
-msgstr "Синхронизировать дисплей с видео: включено"
+msgstr "Синхронизировать дисплей с видео: вкл"
msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
msgid "Synchronize Display to Video: Off"
-msgstr "Синхронизировать дисплей с видео: отключено"
+msgstr "Синхронизировать дисплей с видео: откл"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
msgid "Present at Nearest VSync: On"
-msgstr "Представлять с ближайшим VSync: включено"
+msgstr "Вывод на ближайшей VSync: вкл"
msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
msgid "Present at Nearest VSync: Off"
-msgstr "Представлять с ближайшим VSync: отключено"
+msgstr "Вывод на ближайшей VSync: откл"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
msgid "Color Management: On"
-msgstr "Управление цветом: включено"
+msgstr "Управление цветом: вкл"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
msgid "Color Management: Off"
-msgstr "Управление цветом: отключено"
+msgstr "Управление цветом: откл"
msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
msgid "Input Type: Auto-Detect"
-msgstr "Тип входа: Автоопределение"
+msgstr "Тип ввода: Автоопределение"
msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
msgid "Input Type: HDTV"
-msgstr "Тип входа: HDTV"
+msgstr "Тип ввода: HDTV"
msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_NTSC"
msgid "Input Type: SDTV NTSC"
-msgstr "Тип входа: SDTV NTSC"
+msgstr "Тип ввода: SDTV NTSC"
msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
msgid "Input Type: SDTV PAL"
-msgstr "Тип входа: SDTV PAL"
+msgstr "Тип ввода: SDTV PAL"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
msgid "Ambient Light: Bright (2.2 Gamma)"
@@ -3070,7 +3126,7 @@ msgstr "Окружающий свет: Темный (гамма 2.4)"
msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
msgid "Rendering Intent: Perceptual"
-msgstr "Метод пересчета: Восприятие"
+msgstr "Метод пересчета: Перцептуальный"
msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
msgid "Rendering Intent: Relative Colorimetric"
@@ -3090,127 +3146,127 @@ msgstr "Диапазон вывода: %s"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
msgid "Flush GPU before VSync: On"
-msgstr "Заполнить GPU перед VSync: включено"
+msgstr "Опустошить GPU перед VSync: вкл"
msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
msgid "Flush GPU before VSync: Off"
-msgstr "Заполнить GPU перед VSync: отключено"
+msgstr "Опустошить GPU перед VSync: откл"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
msgid "Flush GPU after Present: On"
-msgstr "Заполнить GPU после представления: включено"
+msgstr "Опустошить GPU после вывода: вкл"
msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
msgid "Flush GPU after Present: Off"
-msgstr "Заполнить GPU после представления: отключено"
+msgstr "Опустошить GPU после вывода: откл"
msgctxt "IDS_OSD_RS_WAIT_ON"
msgid "Wait for GPU Flush: On"
-msgstr "Заполнить GPU перед VSync: включено"
+msgstr "Ожидать опустошения GPU: вкл"
msgctxt "IDS_OSD_RS_WAIT_OFF"
msgid "Wait for GPU Flush: Off"
-msgstr "Заполнить GPU перед VSync: отключено"
+msgstr "Ожидать опустошения GPU: откл"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
msgid "D3D Fullscreen: On"
-msgstr "Полноэкранный D3D: включен"
+msgstr "Полноэкранный D3D: вкл"
msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
msgid "D3D Fullscreen: Off"
-msgstr "Полноэкранный D3D: отключен"
+msgstr "Полноэкранный D3D: откл"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
msgid "Disable desktop composition: On"
-msgstr "эффекты рабочего стола (Aero): отключены"
+msgstr "Эффекты рабочего стола: вкл."
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
msgid "Disable desktop composition: Off"
-msgstr "эффекты рабочего стола (Aero): включены"
+msgstr "Эффекты рабочего стола: откл."
msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
msgid "Alternative VSync: On"
-msgstr "Альтернативный VSync: включен"
+msgstr "Альтернативная VSync: вкл"
msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
msgid "Alternative VSync: Off"
-msgstr "Альтернативный VSync: отключен"
+msgstr "Альтернативная VSync: откл"
msgctxt "IDS_OSD_RS_RESET_DEFAULT"
msgid "Renderer settings reset to default"
-msgstr "Настройки рендеринга по умолчанию"
+msgstr "Установлены настройки рендера по умолчанию"
msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
msgid "Renderer settings reset to optimal"
-msgstr "Настройки рендеринга оптимальные"
+msgstr "Установлены оптимальные настройки рендера"
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
msgid "D3D Fullscreen GUI Support: On"
-msgstr "Полноэкранный D3D с поддержкой GUI: включен"
+msgstr "Поддержка интерфейса в полноэкранном режиме: вкл."
msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
msgid "D3D Fullscreen GUI Support: Off"
-msgstr "Полноэкранный D3D с поддержкой GUI: отключен"
+msgstr "Поддержка интерфейса в полноэкранном режиме: откл"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
msgid "10-bit RGB Output: On"
-msgstr "10-битный RGB вывод: включен"
+msgstr "10-битный RGB-вывод: вкл"
msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
msgid "10-bit RGB Output: Off"
-msgstr "10-битный RGB вывод: отключен"
+msgstr "10-битный RGB-вывод: откл"
msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
msgid "Force 10-bit RGB Input: On"
-msgstr "Форсированный 10-битный RGB вход: включен"
+msgstr "Принудительный 10-битный RGB-ввод: вкл"
msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
msgid "Force 10-bit RGB Input: Off"
-msgstr "Форсированный 10-битный RGB вход: отключен"
+msgstr "Принудительный 10-битный RGB-ввод: откл"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
msgid "Full Floating Point Processing: On"
-msgstr "Точные расчеты в числах с плавающей точкой: Вкл"
+msgstr "Полные расчеты чисел с плавающей точкой: вкл"
msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
msgid "Full Floating Point Processing: Off"
-msgstr "Точные расчеты в числах с плавающей точкой: Выкл"
+msgstr "Полные расчеты чисел с плавающей точкой: откл"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
msgid "Half Floating Point Processing: On"
-msgstr "Быстрые расчеты в числах с плавающей точкой: Вкл"
+msgstr "Половинчатые расчеты в числах с плавающей точкой: вкл"
msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
msgid "Half Floating Point Processing: Off"
-msgstr "Быстрые расчеты в числах с плавающей точкой: Выкл"
+msgstr "Половинчатые расчеты в числах с плавающей точкой: откл"
msgctxt "IDS_BRIGHTNESS_DEC"
msgid "Brightness decrease"
-msgstr "Яркость уменьшить"
+msgstr "Уменьшить яркость"
msgctxt "IDS_CONTRAST_INC"
msgid "Contrast increase"
-msgstr "Контраст увеличить"
+msgstr "Увеличить контрастность"
msgctxt "IDS_CONTRAST_DEC"
msgid "Contrast decrease"
-msgstr "Контраст уменьшить"
+msgstr "Уменьшить контрастность"
msgctxt "IDS_HUE_INC"
msgid "Hue increase"
-msgstr "Увеличение цв. тона"
+msgstr "Увеличить тон"
msgctxt "IDS_HUE_DEC"
msgid "Hue decrease"
-msgstr "Уменьшение цв. тона"
+msgstr "Уменьшить тон"
msgctxt "IDS_SATURATION_INC"
msgid "Saturation increase"
-msgstr "Насыщенность увеличить"
+msgstr "Увеличить насыщенность"
msgctxt "IDS_SATURATION_DEC"
msgid "Saturation decrease"
-msgstr "Насыщенность уменьшить"
+msgstr "Уменьшить насыщенность"
msgctxt "IDS_RESET_COLOR"
msgid "Reset color settings"
@@ -3222,15 +3278,15 @@ msgstr "\nВы используете последнюю стабильную в
msgctxt "IDS_USING_NEWER_VERSION"
msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
-msgstr "Ваша текущая версия v%s.\n\nПоследняя стабильная версия v%s."
+msgstr "Ваша текущая версия: v%s.\n\nПоследняя стабильная версия: v%s."
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr "Доступна новая версия %s. Вы используете %s.\n\nВы хотите посетить сайт MPC-HC, чтобы скачать её ?"
+msgstr "Доступен MPC-HC версии %s. Вы используете версию %s.\n\nЖелаете ли вы посетить сайт MPC-HC для загрузки?"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
-msgstr "Сервер обновлений не найден.\n\nПожалуйста, проверьте связь с интернетом и попробуйте снова."
+msgstr "Сервер обновлений не найден.\n\nПожалуйста, проверьте ваше интернет-соединение и попробуйте снова."
msgctxt "IDS_UPDATE_CLOSE"
msgid "&Close"
@@ -3246,47 +3302,51 @@ msgstr "Масштаб: Авто"
msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
msgid "Toggle custom channel mapping"
-msgstr "Пользовательское распределение каналов Вкл/Откл"
+msgstr "Вкл/откл пользовательское распределение каналов"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
msgid "Custom channel mapping: On"
-msgstr "Пользовательское распределение каналов: включено"
+msgstr "Пользовательское распределение каналов: вкл"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
msgid "Custom channel mapping: Off"
-msgstr "Пользовательское распределение каналов: отключено"
+msgstr "Пользовательское распределение каналов: откл"
msgctxt "IDS_NORMALIZE"
msgid "Toggle normalization"
-msgstr "Нормализация Вкл/Откл"
+msgstr "Вкл/откл нормализацию"
msgctxt "IDS_OSD_NORMALIZE_ON"
msgid "Normalization: On"
-msgstr "Нормализация: включена"
+msgstr "Нормализация: вкл"
msgctxt "IDS_OSD_NORMALIZE_OFF"
msgid "Normalization: Off"
-msgstr "Нормализация: отключена"
+msgstr "Нормализация: откл"
msgctxt "IDS_REGAIN_VOLUME"
msgid "Toggle regain volume"
-msgstr "Восстанавливать громкость Вкл/Откл"
+msgstr "Вкл/откл восстановление громкости"
msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
msgid "Regain volume: On"
-msgstr "Восстанавливать громкость: включено"
+msgstr "Восстановление громкости: вкл"
msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
-msgstr "Восстанавливать громкость: отключено"
+msgstr "Восстановление громкости: откл"
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "б"
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
-msgstr "КБ"
+msgstr "Кб"
msgctxt "IDS_SIZE_UNIT_M"
msgid "MB"
-msgstr "МБ"
+msgstr "Мб"
msgctxt "IDS_SIZE_UNIT_G"
msgid "GB"
@@ -3294,75 +3354,71 @@ msgstr "ГБ"
msgctxt "IDS_SPEED_UNIT_K"
msgid "KB/s"
-msgstr "КБ/с"
+msgstr "Кб/с"
msgctxt "IDS_SPEED_UNIT_M"
msgid "MB/s"
-msgstr "МБ/с"
+msgstr "Мб/с"
msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
msgid "Could not create the tuner."
-msgstr "Невозможно создать тюнер."
+msgstr "Не удалось создать тюнер."
msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
msgid "Could not create the receiver."
-msgstr "Невозможно создать приемник."
+msgstr "Не удалось создать приемник."
msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
msgid "Could not connect the network and the tuner."
-msgstr "Невозможно подключиться к сети и тюнеру."
+msgstr "Не удалось связать сеть и тюнер."
msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
msgid "Could not connect the tuner and the receiver."
-msgstr "Невозможно подключиться к тюнеру и приемнику."
+msgstr "Не удалось связать тюнер и приемник."
msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
msgid "Could not connect the tuner."
-msgstr "Невозможно подключиться к тюнеру."
+msgstr "Не удалось подключить тюнер."
msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
msgid "Could not create the demultiplexer."
-msgstr "Невозможно создать демультиплексор."
+msgstr "Не удалось создать демультиплексор."
msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
msgid "Error parsing the entered time!"
-msgstr "Время написано некорректно!"
+msgstr "Ошибка при обработке введенного времени!"
msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
msgid "Error parsing the entered text!"
-msgstr "Текст написан некорректно!"
+msgstr "Ошибка при обработке текста!"
msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
msgid "Error parsing the entered frame rate!"
-msgstr "Количество кадров в секунду записаны некорректно!"
+msgstr "Ошибка при обработке введенной частоты кадров!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
-msgstr "Покадровый просмотр невозможен, попробуйте другой видеорендерер."
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Покадровый просмотр невозможен, попробуйте другой рендер видео."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
-msgstr "Функции 'Сохранить изображение' и 'Сохранить миниатюры' не работают с системным рендерером для RealMedia.\nВыберите один из DirectX рендереров для RealMedia и вновь откройте файл."
+msgstr "Функции \"Сохранить изображение\" и \"Сохранить миниатюры\" не работают с рендером для RealMedia по умолчанию.\nВыберите один из рендеров DirectX для RealMedia и откройте файл заново."
msgctxt "IDS_SCREENSHOT_ERROR_QT"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
-msgstr "Функции 'Сохранить изображение' и 'Сохранить миниатюры' не работают с системным рендерером для QuickTime.\nВыберите один из DirectX рендереров для QuickTime и вновь откройте файл."
+msgstr "Функции \"Сохранить изображение\" и \"Сохранить миниатюры\" не работают с рендером для QuickTime по умолчанию.\nВыберите один из рендеров DirectX для QuickTime и откройте файл заново."
msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
-msgstr "Функции 'Сохранить изображение' и 'Сохранить миниатюры' не работают для Shockwave файлов."
+msgstr "Функции \"Сохранить изображение\" и \"Сохранить миниатюры\" не работают для файлов Shockwave."
msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
-msgstr "Функции 'Сохранить изображение' и 'Сохранить миниатюры' не работают с рендерером Overlay Mixer.\nИзмените видеорендерер и вновь откройте файл."
-
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Не удается подключиться к базе субтитров."
+msgstr "Функции \"Сохранить изображение\" и \"Сохранить миниатюры\" не работают с Overlay Mixer video renderer.\nИзмените рендер видео и откройте файл заново."
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
-msgstr "Вы хотите активировать EDL редактор?"
+msgstr "Вы хотите активировать редактор EDL?"
msgctxt "IDS_CAPTURE_ERROR"
msgid "Capture Error"
@@ -3378,11 +3434,11 @@ msgstr "аудио"
msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
msgid "Can't add the %s buffer filter to the graph."
-msgstr "Невозможно добавить буферный фильтр %s к графу."
+msgstr "Невозможно добавить буферный фильтр (%s) к графу."
msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
msgid "Can't connect the %s buffer filter to the graph."
-msgstr "Невозможно подключить буферный фильтр %s к графу."
+msgstr "Невозможно подключить буферный фильтр (%s) к графу."
msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
msgid "Can't add the %s encoder filter to the graph."
@@ -3402,11 +3458,11 @@ msgstr "Невозможно подключить поток %s фильтру-
msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
msgid "No video capture pin was found."
-msgstr "Не найден пин для видео захвата."
+msgstr "Не найден поток видео захвата."
msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
msgid "No audio capture pin was found."
-msgstr "Не найден пин для аудио захвата."
+msgstr "Не найден поток аудио захвата."
msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
msgid "Error initializing the output file."
@@ -3418,17 +3474,17 @@ msgstr "Ошибка инициализации выходного аудиоф
msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
-msgstr "Правильный формат времени [-]hh:mm:ss.ms (например, 01:23:45.678)."
+msgstr "Правильный формат времени: [-]чч:мм:сс.мс (например, 01:23:45.678)."
msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
msgid "This type is already in the list!"
-msgstr "Такой тип уже есть в списке!"
+msgstr "Этот тип уже есть в списке!"
msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
-msgstr "Вы должны применить новые настройки перед их использованием"
+msgstr "Вы должны применить новые настройки перед их использованием."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "По окончании воспроизведения: закрыть плеер"
@@ -3454,7 +3510,15 @@ msgstr "По окончании воспроизведения: блокиров
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr "По окончании воспроизведения: выключить монитор"
+msgstr "По окончании воспроизведения: отключить монитор"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "По окончании воспроизведения: перейти к следующему файлу в папке"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "По окончании воспроизведения: ничего не делать"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
@@ -3482,15 +3546,15 @@ msgstr "Управление цветом не поддерживается"
msgctxt "IDS_BRIGHTNESS_INC"
msgid "Brightness increase"
-msgstr "Яркость увеличить"
+msgstr "Увеличить яркость"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
-msgstr "Введите предпочитаемый язык.\nНапример, наберите: \"eng jap swe rus\""
+msgstr "Введите ваш предпочитаемый язык.\nНапример, наберите \"eng jap rus\""
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
-msgstr "Внешние сплиттеры могут иметь свои настройки языка, поэтому, поведение MPC-HC умолчанию не изменит их изначальный выбор.\nВключите эту опцию, если вы хотите, чтобы MPC-HC управлял внешними сплиттерами."
+msgstr "Внешние сплиттеры могут иметь свои настройки языка, MPC-HC не изменит их изначальный выбор.\nВключите эту опцию, чтобы разрешить MPC-HC управлять внешними сплиттерами."
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
@@ -3514,7 +3578,7 @@ msgstr "&Каналы"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr ""
+msgstr "Если выбран \"последний ключевой кадр\", то ищется первый ключевой кадр перед точкой поиска.\nЕсли выбран \"ближайший ключевой кадр\", то ищется ближайший ключевой кадр (до или после точки поиска)."
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
@@ -3530,9 +3594,393 @@ msgstr "Ассоциировать только с аудиоформатами"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr "Убрать все ассоциации"
+msgstr "Очистить все ассоциации"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Настройки"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Провайдер"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "С нарушениями слуха"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Загрузки"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Счет"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Онлайн поиск субтитров не удался."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Онлайн поиск субтитров прерван."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Онлайн поиск субтитров завершен, найдено %d субтитров."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Онлайн поиск субтитров завершен, субтитров не найдено."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Загрузить субтитры"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Поиск субтитров онлайн, подождите..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Отмена поиска субтитров онлайн..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Имя пользователя"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Статус"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Готов..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "В разработке."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Размещение..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Субтитры успешно размещены."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Размещение субтитров не удалась."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Размещение субтитров отменено."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Субтитры уже существуют."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Размещение субтитров, подождите..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Размещение завершено."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Размещение отменено."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Размещение не удалось."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Загрузить и открыть"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Установка"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Сброс"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Вверх"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Вниз"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Открыть URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Языки"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "ОШИБКА: Интернет соединение не может быть установлено."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Введите данные сайта"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Введите свои данные для подключения:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Соотношение сторон: Assume square pixels (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Загружено [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Разместить субтитры"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Вы уверены, что хотите разместить файл субтитров \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Запрос поддерживаемых языков..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Не удалось авторизоваться в \"%S\" с именем пользователя \"%S\".\n\nПожалуйста, введите верное имя пользователя и пароль или выполните сброс учетных данных для входа в систему в качестве анонимного пользователя."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Автоматический поиск и загрузка будут отключены для всех медиа-файлов, путь которых содержит любой из путей, введенных здесь.\nНапример, \"Личная папка\\Видео\\Работа\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "«путь»\tБудет загружен файл или каталог\n\t\t(допускаются wildcards, «-» обозначает стандартный ввод)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"⇥Загрузить дополнительный звуковой файл"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"имя файла\" - Загрузка дополнительного аудио с ММ:сс (Если файл содержит информацию \"Задержка с минута:секунда\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tРендеринг в полноэкранном D3D-режиме"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"⇥Загрузить дополнительный файл субтитров"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter «имяфильтра»\tЗагрузить фильтры DirectShow из внешней библиотеки (допускаются wildcards)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tЗапуск в режиме DVD, «путь» указывает путь к папке DVD (необязательный)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tЗапустить воспроизведение части T, главы C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tЗапустить воспроизведение части T, позиции P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tЗагрузить все треки аудио CD или (S)VCD,\n\t\t«путь» указывает путь к диску (необязательный)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device⇥⇥Открыть видео устройство по умолчанию"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tОткрыть файл, но не начинать воспроизведение"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tНачать воспроизведение файла сразу после запуска плеера"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tЗакрыть плеер после окончания воспроизведения (работает только в совокупности с /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tВыключить компьютер после окончания воспроизведения"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tПеревести компьютер в спящий режим после окончания воспроизведения"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tГибернация компьютера после окончания воспроизведения"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tЗавершить сеанс после окончания воспроизведения"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tЗаблокировать компьютер после окончания воспроизведения"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tВыключить монитор после окончания воспроизведения"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tОткрыть следующий файл в папке после окончания воспроизведения"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tЗапуск в полноэкранном режиме"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tЗапуск в минимизированном режиме"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tОткрыть плеер в новом окне"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tДобавить «путь» в плейлист, может сочетаться с /open и /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tПлейлист в случайном порядке"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid⇥⇥Создать ассоциации файлов для видео файлов"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud⇥⇥Создать ассоциации файлов для аудио файлов"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl⇥⇥Создать ассоциации файлов для плейлистов"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall⇥⇥Создать ассоциации файлов для всех поддерживаемых форматов"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall⇥⇥Удалить все ассоциации файлов"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tНачать воспроизвдение с \"ms\" (= миллисекунды)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tНачать воспроизвдение с позиции hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tУстановить фиксированный размер окна"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tОткрыть плеер на мониторе N, где N начинается с 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tИспользовать рендеринг N, где N начинается с 1 (см. настройки вывода)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tИспользовать предустановки шейдеров «Pr»"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"имя файла\" - Определяют панорамирование и сканирование заданное к использованию имени файла."
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc - Конвертирование формата иконок."
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus⇥⇥Открыть MPC-HC в фоне"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N(Номер порта) - Использование веб-интерфейса по специальному порту."
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug - Показать информацию об отладке в экранном меню."
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter⇥Отключить отправку отчетов об аварийном завершении программы"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\" - Использовать MPC-HC в качестве дополнительного устройства."
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"индекс\" - Использование индекса GPU для аппаратного ускорения.\nИспользуется только для CUVID и DXVA2"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset⇥⇥Восстановить настройки по умолчанию"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help, /h, /? - Открыть окно помощи."
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Результаты субтитров, которые будут автоматически загружены. Более высокие результаты означают, что будут загружены более точные совпадения субтитров, более низкие результаты могут привести к неправильному отображению субтитров, но нет ничего совершенного. Выберите тот, который лучше подойдет для вас."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Задержка звука (мс)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Размер панели инструментов по умолчанию, в пикселях."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Использовать старую панель инструментов вместо новой, векторной."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sk.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sk.dialogs.po
index ecae86113..b8d2b4ab8 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.sk.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sk.dialogs.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Marián Hikaník <podnety@mojepreklady.net>, 2013-2014
-# Marián Hikaník <podnety@mojepreklady.net>, 2014
+# Marián Hikaník <podnety@mojepreklady.net>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 12:20+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-07 08:11+0000\n"
"Last-Translator: Marián Hikaník <podnety@mojepreklady.net>\n"
-"Language-Team: Slovak (http://www.transifex.com/projects/p/mpc-hc/language/sk/)\n"
+"Language-Team: Slovak (http://www.transifex.com/mpc-hc/mpc-hc/language/sk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -110,16 +110,16 @@ msgid "Enable custom channel mapping"
msgstr "Zapnúť mapovanie kanálov používateľom"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Konfig. reproduktory na: "
+msgid "Speaker configuration for"
+msgstr "Konfig. reproduktory na"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "vstupné kanály:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Ak chcete zmeny uplatniť okamžite, pridržte klávesu Shift "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Ak chcete zmeny uplatniť okamžite po kliknutí, pridržte klávesu Shift"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -190,8 +190,8 @@ msgid "About"
msgstr "O programe"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014, pozrite si súbor Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017, pozrite si súbor Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -422,12 +422,16 @@ msgid "time(s)"
msgstr "krát"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Režim opakovania:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Po prehratí"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Výstup"
+msgid "Default zoom"
+msgstr "Predvolené priblíženie"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -473,10 +477,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Aut. načítanie zvuk. stôp"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Použiť zabudované vykresľovanie titulkov"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Ovládač"
@@ -570,8 +570,8 @@ msgid "Warning"
msgstr "Varovanie"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Ak niekde v nastaveniach svojej grafickej karty zapnete antialiasing v režime pre celú obrazovku, vzhľad titulkov sa o nič nezlepší, zvýši sa však zaťaženie procesora."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Ak niekde v nastaveniach grafickej karty manuálne zapnete antialiasing v režime pre celú obrazovku, vzhľad titulkov sa o nič nezlepší, zvýši sa však zaťaženie procesora."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -677,16 +677,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Zabrániť minimalizovaniu pri celoobrazovkovom režime na inom monitore"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Použiť vlastnosti panela úloh Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Použiť rozšírené vlastnosti panela úloh"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Ak je v playliste iba jedna položka, otvoriť ďalší/predchádzajúci súbor v priečinku pri príkaze \"Preskočiť dozadu/dopredu\""
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Použiť časový tip:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1126,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "Vykresľovač zvuku"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Nastavenia VMR-7/VMR-9 (bezstratové) a EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Nastavenia VMR-9 (bez vykreslenia) EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1170,8 +1170,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Titulky *"
+msgid "Subtitles"
+msgstr "Titulky"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1186,12 @@ msgid "Rotation"
msgstr "Otočenie"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Externé filtre (ako napr. VSFilter) dokážu zobrazovať titulky pri všetkých vykresľovačoch."
+msgid "Subtitle Renderer"
+msgstr "Vykresľovač titulkov"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Uložiť skompilované shadery do vyrov. pamäte"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1205,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Povoliť prístup len z lokálnej stanice"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Zapnúť náhľad"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Informácie pre ladenie"
@@ -1230,17 +1238,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Obsluha CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Titulky na internete"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Stiahnuť a otvoriť"
+msgid "Download subtitles"
+msgstr "Stiahnuť titulky"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Nahradiť práve načítané titulky"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Stiahnuť"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Obnoviť"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Prerušiť"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Nastavenia"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Odoslať titulky"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Odoslať"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Prerušiť"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Nastavenia"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Uložiť ako..."
@@ -1278,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "Zapnúť automatickú kontrolu aktualizácií"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Čas medzi kontrolami:"
+msgid "Check every:"
+msgstr "Frekvencia kontroly:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1542,16 +1578,28 @@ msgid "Reset"
msgstr "Obnoviť"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Online-databáza"
+msgid "Online search, download and upload subtitles"
+msgstr "Vyhľadávanie online, stiahnutie a odoslanie titulkov"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Automaticky vyhľadať a stiahnuť titulky, ak sa nenájdu žiadne lokálne"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Preferovať titulky pre nepočujúcich (ak ich poskytovateľ označí)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Ignorovať súbory obsahujúce niektoré z týchto slov:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Základná URL adresa webovej databázy titulkov:"
+msgid "Languages in order of preference:"
+msgstr "Uprednostňované jazyky v poradí:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Test"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Automaticky odoslať aktívne titulky na konci prehrávania videa"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1653,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Predvolené"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Zariadenie"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Režim vyhradeného použitia"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Povoliť streamovanie bitov"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Nastavenia"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Zapnúť prelínanie kanálov sterea (pre slúchadlá)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Ukončenie:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Úroveň:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Poznámka"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Na minimalizovanie skreslenia zvuku sa odporúča udržiavať počas prehrávania obsahu so stratovou kompresiou hlasitosť na 85 %."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Kvalita JPEG:"
@@ -1665,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Oznamovač zlyhaní"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Prepáčte, zdá sa, že došlo k neočakávanému ukončeniu programu MPC-HC. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Ak nám chcete pomôcť s diagnostikou a riešením vzniknutého problému, pošlite nám záznam o chybe."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Doplnková informácia"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "E-mail:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Vaša e-mailová adresa nie je povinná a použije sa iba v prípade, že by vás vývojári chceli kontaktovať s cieľom získania podrobnejších informácií."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Opis problému (len v angličtine):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Reštartovať MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Ukončiť MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sk.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sk.menus.po
index 30f403f99..c022f8249 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.sk.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sk.menus.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Marián Hikaník <podnety@mojepreklady.net>, 2013
-# Marián Hikaník <podnety@mojepreklady.net>, 2014
+# Marián Hikaník <podnety@mojepreklady.net>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 16:31+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-02-01 21:39+0000\n"
"Last-Translator: Marián Hikaník <podnety@mojepreklady.net>\n"
-"Language-Team: Slovak (http://www.transifex.com/projects/p/mpc-hc/language/sk/)\n"
+"Language-Team: Slovak (http://www.transifex.com/mpc-hc/mpc-hc/language/sk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -65,29 +65,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Uložiť &náhľady obrázkov..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Načítať titulky..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Uložiť ti&tulky..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Data&báza titulkov"
+msgid "S&ubtitles"
+msgstr "Tit&ulky"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Načítať titul&ky..."
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Vy&hľadať..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Uložiť tit&ulky..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&Odoslať..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "S&tiahnuť titulky..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Sti&ahnuť..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Odoslať titulky..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -197,13 +193,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Test trhania"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Štatistika zobrazenia"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "Zo&braziť štatistiky"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Zostáva&júci čas"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Zobraz&iť aktuálny čas"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Zobraziť &názov súboru"
msgctxt "POPUP"
msgid "&Output Range"
@@ -405,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Dotýkať sa okna zv&onku"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "Dod&ržiavať stranový pomer"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Prekročiť str&anový pomer"
+msgid "&Aspect Ratio"
+msgstr "Str&anový pomer"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Pre&dvolený"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "Pre&dvolené (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -437,6 +433,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Predpokladať štvorcové pixely (&SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Upraviť nastavenie AR monitora/Pra&covnej plochy"
@@ -530,9 +530,25 @@ msgid "&Stop"
msgstr "&Stop"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "K&rokovanie obrazu"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "O&pakovať"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "Ne&ustále"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Súbor"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Playlist"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "Spo&maliť prehrávanie"
@@ -554,16 +570,16 @@ msgid "S&haders"
msgstr "S&hadery"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Zvuk"
+msgid "&Audio Track"
+msgstr "Zvuková stop&a"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Ti&tulky"
+msgid "Su&btitle Track"
+msgstr "Stopa s &titulkami"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "S&tream s videom"
+msgid "Vide&o Track"
+msgstr "Stopa s &videom"
msgctxt "POPUP"
msgid "&Volume"
@@ -585,7 +601,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Po prehra&tí"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Neuro&biť nič"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Prehrať ď&alší súbor v priečinku"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Vypnúť &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Ukončiť"
@@ -609,10 +637,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "U&zamknúť"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Vypnúť &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Navigácia"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sk.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sk.strings.po
index 2d015d077..c92aba66d 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.sk.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sk.strings.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Marián Hikaník <podnety@mojepreklady.net>, 2013-2014
-# Marián Hikaník <podnety@mojepreklady.net>, 2014
+# Marián Hikaník <podnety@mojepreklady.net>, 2014-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 12:21+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-10 20:04+0000\n"
"Last-Translator: Marián Hikaník <podnety@mojepreklady.net>\n"
-"Language-Team: Slovak (http://www.transifex.com/projects/p/mpc-hc/language/sk/)\n"
+"Language-Team: Slovak (http://www.transifex.com/mpc-hc/mpc-hc/language/sk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -61,10 +61,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Nastavenia"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Súbor"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Pre&dvolený štýl"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Playlist"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Súbory"
@@ -117,6 +125,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Ak zostane cieľ vykresľovania nedefinovaný, titulky SSA/ASS budú vykreslené relatívne k snímke videa, zatiaľ čo všetky ostatné textové titulky budú vykreslené relatívne k oknu."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Režim opakovania: playlist"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Režim opakovania: súbor"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Opakovať neustále: zapnuté"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Opakovať neustále: vypnuté"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Opakovať neustále"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Nikdy (najrýchlejší spôsob)"
@@ -326,12 +354,12 @@ msgid "On/Off"
msgstr "Zap./Vyp."
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Od snímok/sek."
+msgid "From (FPS)"
+msgstr "Od (sním,/s)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Do snímok/sek."
+msgid "To (FPS)"
+msgstr "Do (sním./s)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -465,6 +493,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Prehrávanie::Shadery"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Zdroje"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Rôzne"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Prehrávanie::Záznam"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Prehrávanie::Nastavenie vykresľovania a synchronizácie"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Prehrávanie::Režim na celú obrazovku"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Interné filtre::Vykresľovač zvuku"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Prepínač zvuku"
@@ -489,18 +545,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Vykresľovanie Overlay Mixer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "VMR 7 (v okne)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "VMR 9 (v okne)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "VMR 7 (bez vykreslenia)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "VMR 9 (bez vykreslenia)"
@@ -553,34 +601,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Prehrávač::Webové rozhranie"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Titulky::Databáza"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Zdroje"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Rôzne"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Prehrávanie::Záznam"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Prehrávanie::Nastavenie vykresľovania a synchronizácie"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Prehrávanie::Režim na celú obrazovku"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Podrobnosti"
@@ -601,17 +621,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Vždy sa bude vykresľovať prekrývanie. Povolené sú len formáty YUV, ktoré však sú zobrazované priamo, bez konverzie farieb na RGB. Toto je najrýchlejšia metóda vykresľovania. Pri použití tejto metódy si môžete byť istí, že sa video na celú obrazovku zobrazí aj na výstupe TV-out."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Predvolené vykresľovanie systému Windows XP. Tento kodek je veľmi stabilný, je však trochu pomalší ako Overlay mixer. Používa sa funkcia DirectDraw a funkcia Overlay, ak je podporovaná."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Dostupné len ak je v systéme nainštalovaný DirectX 9. Má rovnaké schopnosti ako VMR-7 (s vykresľovaním v okne), ale nikdy sa nepoužíva vykresľovania videa s prekrývaním. Preto môže mať tento kodek pomalšie vykresľovanie ako VMR-7 (s vykresľovaním v okne)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Rovnaké ako VMR-7 (v okne), ale použije sa aj modul Allocator-Presenter, pre podporu titulkovania. Zrkadlenie videa s prekrytím NEBUDE funkčné. Odporúčame nastaviť farby na hodnotu \"True Color\"."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Dostupné, len ak je nainštalovaný DirectX 9. Veľmi stabilné, ale nikdy sa nebude používať vykresľovanie s prekrývaním a preto môže byť tento spôsob pomalší, ako Overlay Mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -622,8 +634,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Rovnaké ako VMR-9 (bez vykreslenia), ale používa dvojprechodovú, bikubickú zmenu veľkosti."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Pripája sa k médiu s videom, neodosiela však prichádzajúce vzorky. Môžete ho použiť vtedy, ak nepotrebujete obrazový výstup videa a chcete obmedziť zbytočnú prácu procesora."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Pripája sa k akémukoľvek typu média s videom, neodosiela však prichádzajúce vzorky. Môžete ho použiť vtedy, keď nepotrebujete obrazový výstup videa a chcete obmedziť zbytočnú prácu procesora."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -649,10 +661,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Vlastné vykresľovanie programu Real. SMIL skripty zostanú funkčné, nebudú však interaktívne. Používa sa DirectDraw a aj funkcia Overlay, ak je podporovaná."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Výstup z engine Real vykresľovaný pomocou Allocator-Presentera na báze DX7 z VMR-7 (bez vykreslenia)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Výstup z engine Real vykresľovaný pomocou Allocator-Presentera na báze DX9 z VMR-9 (bez vykreslenia)."
@@ -661,10 +669,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Vlastné vykresľovanie QuickTime. Vykresľovanie sa spomalí pri zmene oblasti s videom alebo pri čiastočnom prekrytí iným oknom. Ak nie je dostupná funkcia Overlay, použije sa GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Výstup z enginu QuickTime vykresľovaný pomocou Allocator-Presentera na báze DX7 z VMR-7 (bez vykreslenia)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Výstup z enginu QuickTime vykresľovaný pomocou Allocator-Presentera na báze DX9 z VMR-9 (bez vykreslenia)."
@@ -673,22 +677,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Plocha videa sa vymedzí ako bežná plocha mimo obrazovky."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "Vykresľovanie zvuku MPC je nefunkčné, nepoužívajte ho."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Vykresľovanie so synchronizáciou"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Nahlásenie chyby"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC bol neočakávané ukončený, avšak toto zostavenie bolo skompilované bez informácie pre ladenie.\nAk chcete nahlásiť túto chybu, najskôr vyskúšajte oficiálne zostavenie programu.\n\nChcete navštíviť stránku pre stiahnutie programu?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Bežná plocha mimo obrazovky"
@@ -741,9 +733,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (nekomprimované)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Vykresľovač zvuku MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Interný vykresľovač zvuku"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -757,9 +749,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Pre zobrazenie vloženého zdroja vo svojom prehliadači spravidla musíte zapnúť webové rozhranie.\n\nPoužite tlačidlo \"Uložiť ako\", ak chcete len uložiť informáciu."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Stiahnuť titulky"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Stiahnuť titulky..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Odoslať titulky..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -790,7 +786,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Nemožno nájsť všetky archívne jednotky"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Plocha videa sa vymedzí ako textúra ale na kopírovanie a presúvanie do spätnej pamäte sa budú stále používať 2D funkcie. Táto funkcia vyžaduje grafickú kartu s podporou 32-bitovej alokácie, RGBA, textúr s neumocňovanou veľkosťou a minimálne v rozlíšení videa."
msgctxt "IDC_TEXTURESURF3D"
@@ -817,6 +813,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Zmenšuje trhanie ignorovaím predvol. VSync, zabudovanej do D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Skenovanie tunera"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Titulky nie sú načítané alebo ich vykresľovanie nie je podporované."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Kvôli skráteniu doby načítavania sa uložia skompilované shadery do priečinka AppData."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Ak chcete načítať VTS_xx_x.vob súbory naraz, otvorte VTS_xx_0.ifo"
@@ -889,7 +897,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Stlmiť"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Nestlmiť"
@@ -954,12 +962,12 @@ msgid "&Organize Favorites..."
msgstr "&Zoradiť obľúbené položky..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "Náhodne"
+msgid "Sh&uffle"
+msgstr "Náho&dne"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Otvoriť umiestnenie súboru"
+msgid "Ope&n file location"
+msgstr "Otvoriť umiest&nenie súboru"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -1042,8 +1050,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Priblížiť na šírku obrazovky - ultra,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Skryť pri režime na celú obrazovku"
+msgid "&Hide on Fullscreen"
+msgstr "Skryť p&ri režime na celú obrazovku"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1230,8 +1238,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "Pridať priečinok s obsahom"
+msgid "Add containing &folder"
+msgstr "Pridať priečino&k s obsahom"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1335,7 +1343,83 @@ msgstr "Oneskorenie titulkov sa zníži/zvýši o túto hodnotu vždy pri stlač
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<nedefinované>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Sledovať"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Posunúť hore"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Posunúť dole"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Zoradiť podľa logického číslovania kanálov (LCN)"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Odstrániť všetko"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Naozaj chcete odstrániť všetky kanály zo zoznamu?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Nie je dostupná žiadna informácia"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Prosím čakajte, prebieha analýza..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "Pomer strán %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Zapne zaznamenávanie do súboru (vyžaduje reštart)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Zostávajúci čas"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Veľká presnosť"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Po prehratí: Vrátiť aktuálny súbor na začiatok"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Po prehratí: Uzatvoriť"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "Program MPC-HC zaznamenal problémy počas inicializácie. S vašou pomocou by sme možno boli schopní tieto problémy opraviť.\n\nChcete ohlásiť vzniknuté problémy?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Ak je zvuk popredu, zadajte kladnú hodnotu, ak je oneskorený, zadajte zápornú hodnotu."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Náhľad je momentálne zablokovaný. Odblokovať ho môžete v nastaveniach programu MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Túto voľbu je možné použiť na zobrazenie náhľadu médií zo vzdialeného umiestnenia. Používajte ju iba v riadne zabezpečenej súkromnej sieti.\n\nNaozaj chcete túto voľbu zapnúť?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Interný vykresľovač titulkov"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1357,13 +1441,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Obrázok bol úspešne uložený"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Načítať titulky"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Načítať titulky…"
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Uložiť titulky"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Uložiť titulky..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,11 +1470,11 @@ msgid "Stop"
msgstr "Stop"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Posunúť o jednu snímku"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Posunúť o jednu snímku dozadu"
msgctxt "IDS_AG_GO_TO"
@@ -1490,8 +1574,8 @@ msgid "Thumbnails saved successfully"
msgstr "Náhľady boli úspešne uložené"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Stream s &videom"
+msgid "Vide&o Track"
+msgstr "Stopa s vide&om"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1538,11 +1622,11 @@ msgid "Reset Rate"
msgstr "Obnoviť pôvodnú rýchlosť"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Oneskorenie zvuku +10 ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Oneskorenie zvuku -10 ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1613,14 +1697,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Posunúť titulok doprava"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Zobraziť štatistiky"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Preskočiť na začiatok"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Zobraziť názov súboru"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Prehrať DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Prehrať BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Zobraziť štatistiky vykresľovača"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Reset štatistík vykresľovača"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Titulky::Rôzne"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Skryť o&kraje"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Len sním&ok"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Z&obraziť titulok&&menu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Skryť &menu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Pokročilé"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Minim. zobrazenie"
@@ -1686,8 +1810,8 @@ msgid "PnS Dec Height"
msgstr "PnS - zmenšiť výšku"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Prebieha sťahovanie titulkov, čakajte prosím."
+msgid "Downloading [%s] \"%s\""
+msgstr "Sťahovanie [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1698,7 +1822,7 @@ msgid "No subtitles found."
msgstr "Nenašli sa žiadne titulky."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "Je dostupných %d titulkov."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
@@ -1854,12 +1978,12 @@ msgid "Boss key"
msgstr "Boss key"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Menu prehrávača (krátke)"
+msgid "Player Menu"
+msgstr "Menu prehrávača"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Menu prehrávača (dlhé)"
+msgid "Player Menu (full)"
+msgstr "Menu prehrávača (úplné)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1870,20 +1994,20 @@ msgid "Options"
msgstr "Nastavenia"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Ďalší zvuk"
+msgid "Next Audio Track"
+msgstr "Ďalšia zvuková stopa"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Predchádzajúci zvuk"
+msgid "Prev Audio Track"
+msgstr "Predchádzajúca zvuková stopa"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Ďalší titulok"
+msgid "Next Subtitle Track"
+msgstr "Ďalšia stopa s titulkami"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Predchádzajúci titulok"
+msgid "Prev Subtitle Track"
+msgstr "Predchádzajúca stopa s titulkami"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1893,22 +2017,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Načítať titulky znova"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Ďalší zvuk (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Predchádzajúci zvuk (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Ďalší titulok (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Predchádzajúci titulok (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Ďalší uhol (DVD)"
@@ -1918,28 +2026,28 @@ msgid "Prev Angle (DVD)"
msgstr "Prechádzajúci uhol (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Ďalší zvuk (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Ďalšia zvuková stopa (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Predchádzajúci zvuk (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Predchádzajúca zvuková stopa (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Ďalší titulok (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Ďalšia stopa s titulkami (DVD);"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Predchádzajúci titulok (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Predchádzajúca stopa s titulkami (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Zapnúť/vypnúť titulky (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Zostávajúci čas"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Zobraziť aktuálny čas"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2073,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Kódované"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Áno"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Nie"
@@ -2026,11 +2134,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Hlasitosť: %02lu/%02lu, titul: %02lu/%02lu, kapitola: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Uhol: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %u Hz %d bitov %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2121,14 +2229,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Šírka obrázka"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL adresa je pravdepodobne správna!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Nesprávna verzia protokolu, aktualizujte prehrávač alebo zadajte inú adresu!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Stranový pomer"
@@ -2138,20 +2238,20 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", spolu: %ld, preskočené: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", veľkosť: %I64dKB"
+msgid ", Size: %I64d KB"
+msgstr ", veľkosť: %I64d KB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", veľkosť: %I64dMB"
+msgid ", Size: %I64d MB"
+msgstr ", veľkosť: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", voľné: %I64dKB"
+msgid ", Free: %I64d KB"
+msgstr ", voľné: %I64d KB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", voľné: %I64dMB"
+msgid ", Free: %I64d MB"
+msgstr ", voľné: %I64d MB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
@@ -2222,8 +2322,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Náhľady by boli príliš malé, nie je možné vytvoriť súbor.\n\nSkúste zmenšiť počet náhľadov alebo zväčšiť celkovú šírku."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Pre načítanie titulkov musíte zmeniť typ vykresľovača videa a znovu otvoriť súbor.\n- DirectShow: VMR-7/VMR-9 (bez vykreslenia), EVR (CP), Sync, madVR alebo Haali\n- RealMedia: Špeciálne vykresľovanie pre RealMedia, alebo otvorte prostredníctvom DirectShow\n- QuickTime: vykresľovač DX7 alebo DX9 pre QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Pre načítanie titulkov musíte zmeniť typ vykresľovača videa a znovu otvoriť súbor.\n- DirectShow: VMR-9 (bez vykreslenia), EVR (CP), Sync, madVR alebo Haali\n- RealMedia: Špeciálny vykresľovač pre RealMedia, alebo otvorenie prostredníctvom DirectShow\n- QuickTime: vykresľovač DX7 alebo DX9 pre QuickTime\n- ShockWave: neudáva sa"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2234,12 +2334,12 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Stranový pomer: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Stranový pomer: Predvolený"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Stranový pomer: Predvolený (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Oneskorenie zvuku: %I64dms"
+msgid "Audio delay: %I64d ms"
+msgstr "Oneskorenie zvuku: %I64d ms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2250,8 +2350,8 @@ msgid "Out of memory"
msgstr "Nedostatok pamäte"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Chyba: je potrebný Flash player pre IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Chyba: je potrebný Adobe Flash Player pre Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2273,10 +2373,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Nepodarilo sa vykresliť súbor"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Nesprávna URL adresa, databáza titulkov sa nedá nájsť!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Kapitola: "
@@ -2297,14 +2393,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Aktuálne"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "Program MPC-HC bol neočakávane ukončený. Ak nám chcete pomôcť vyriešiť tento problém, odošlite prosím súbor \"%s\" do nášho systému pre nahlasovanie chýb.\n\nChcete otvoriť priečinok obsahujúci súbor s výpisom pamäte a navštíviť systém pre nahlasovanie chýb?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Nepodarilo sa vytvoriť výpis pamäte v súbore \"%s\" (chyba %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Vybrať priečinok"
@@ -2322,7 +2410,7 @@ msgid "Toggle Caption&Menu"
msgstr "Prepnúť kapitolu&menu"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Prepnúť vyhľadávač"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2478,8 +2566,8 @@ msgid "Volume boost Max"
msgstr "Zvýraznenie hlasitosti Max"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Pouzitie: mpc-hc.exe \"cesta\" [prepinace]\n\n\"cesta\"\tHlavny subor alebo priecinok, ktoreho obsah sa nacita (zastupne znaky\n\t\tsu povolene, znakom \"-\" oznacite standardny vstup)\n/dub \"zvukova stopa\"\tNacitat dalsi zvukovy subor\n/dubdelay \"subor\"\t Nacitat dalsi zvukovy subor, oneskoreny o XX ms (ak\n\t\tsubor obsahuje \"...DELAY XXms...\")\n/d3dfs\t\tspustit vykreslovanie v rezime na celu obrazovku D3D\n/sub \"nazov titulkov\"\tNacitat pridavny subor s titulkami\n/filter \"nazov filtra\"\t Nacitat filtre DirectShow z dynamicky linkovanej\n\t\tkniznice (zastupne znaky su povolene)\n/dvd\t\tSpustit v rezime DVD, \"cesta\" oznacuje priecinok na\n\t\tDVD (volitelne)\n/dvdpos T#C\tSpustit prehravanie titulu T, kapitoly C\n/dvdpos T#hh:mm\tSpustit prehravanie titulu T, na pozicii hh:mm:ss\n/cd\t\tNacitat vsetky stopy zvukoveho CD alebo (S)VCD,\n\t\t\"cesta\" - cesta k jednotke (volitelne)\n/device\t\tOtvorit predvolene zariadenie pre video\n/open\t\tOtvorit subor, neprehrat automaticky\n/play\t\tSpustit prehravanie ihned po spusteni \n\t\tprehravaca\n/close\t\tZatvorit prehravac po prehrati (funguje len s prepinacom\n\t\t /play)\n/shutdown\tVypnut operacny system po prehrati\n/fullscreen\tSpustit v rezime na celu obrazovku\n/minimized\tSpustiť minimalizovane\n/new\t\tPouzit novu instanciu prehravaca\n/add\t\tPridat \"cestu\" k playlistu, parameter mozno kombinovat s prepinacmi\n\t\t /open a /play\n/regvid\t\tZaregistrovat formaty videa\n/regaud\t\tZaregistrovat formaty zvuku\n/regpl\t\tVytvorit asociacie k suborom pre subory v playliste\n/regall\t\tVytvorit asociacie k suborom pre vsetky podporovane typy suborov\n/unregall\t\tOdstranit vsetky asociacie k suborom\n/start ms\t\tSpustit prehravanie na pozicii v \"ms\" (= milisekundach)\n/startpos hh:mm:ss\tSpustit prehravanie na pozicii hh:mm:ss\n/fixedsize w,h\tNastavit fixnu sirku okna\n/monitor N\tSpustit na monitore N, pricom cislo N zacina na hodnote 1\n/audiorenderer N\tSpustit s pouzitim vykreslovaca zvuku N, kde N sa zacina na hodnote 1\n\t\t(pozrite si nastavenia v casti \"Vystup\")\n/shaderpreset \"Pr\"\tSpustit s pouzitim prednastavenia shadera \"Pr\"\n/reset\t\tObnovit predvolene nastavenia\n/help /h /?\tZobrazit pomocnika prepinacom na prikazovom riadku\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Použitie: mpc-hc.exe \"cesta\" [prepínače]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2565,14 +2653,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Zapnúť všetky filtre"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Skenovanie tunera"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Titulky nie sú načítané alebo ich vykresľovanie nie je podporované."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Autor neznámy. Ak ste autorom tohto loga, kontaktujte nás!"
@@ -2661,40 +2741,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Horný pravý - vzadu"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Obnoviť štatistiku zobrazenia"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Titulky::Rôzne"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Skryť o&kraje"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Len snímok"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Z&obraziť titulok&&menu"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Skryť &menu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Pokročilé"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Nad panelom vyhľadávania"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Pod panelom vyhľadávania"
msgctxt "IDS_VIDEO_STREAM"
@@ -2862,8 +2914,8 @@ msgid "Other Audio"
msgstr "Iný zvuk"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2925,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple - bezstratový"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Kodek Opus Audio"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3009,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Kodek Opus Audio"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Playlist"
@@ -2977,18 +3033,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Stranový pomer"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Použiť WASAPI (reštartovať prehrávanie)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Stlmiť zvuk pri rýchlom prevíjaní vpred"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Zvuk. zariadenie:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: zapnutá"
@@ -3277,6 +3321,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Obnovenie hlasitosti: vypnuté"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytov"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3334,7 +3382,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Chyba pri analyzovaní zadanej rýchlosti snímkovania!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Krokovanie snímkami nie je možné. Skúste použiť iný vykresľovač videa."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3353,10 +3401,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "Funkcie \"Uložiť obrázok\" a \"Uložiť náhľady\" nefungujú s vykresľovaním videa Overlay Mixer.\nZmeňte vykresľovač videa v nastaveniach výstupu MPC a znovu otvorte súbor."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Nemožno sa pripojiť k databáze online-titulkov."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Chcete aktivovať editor EDL?"
@@ -3425,7 +3469,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Pred otestovaním je potrebné aplikovať nové nastavenia."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Po prehratí: Ukončiť"
@@ -3453,6 +3497,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Po prehratí: Vypnúť monitor"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Po prehratí: prehrať ďalší súbor v priečinku"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Po prehratí: neurobiť nič"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Jas: %s"
@@ -3533,3 +3585,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Nastavenia"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter/DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Poskytovateľ"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Nepočujúci"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Stiahnutia"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Skóre"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Vyhľadávanie titulkov online bolo neúspešné."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Vyhľadávanie titulkov online bolo prerušené."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Vyhľadávanie titulkov online bolo dokončené. Nájdené titulky: %d."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Vyhľadávanie titulkov online bolo dokončené, nenašli sa žiadne titulky."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Stiahnuť titulky"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Vyhľadávanie titulkov online, prosím čakajte..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Prerušuje sa vyhľadávanie titulkov online..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Meno používateľa"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Stav"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Pripravené..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Neimplementované."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Odosiela sa na server..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Titulky boli úspešne odoslané."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Titulky sa nepodarilo odoslať."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Odosielanie titulkov bolo prerušené."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Titulky už existujú."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Prebieha odosielanie titulkov, prosím čakajte..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Odosielanie bolo dokončené."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Odosielanie bolo prerušené."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Odosielanie bolo neúspešné."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Stiahnuť a otvoriť"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Inštalácia"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Obnoviť"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Posunúť hore"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Posunúť dole"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Otvoriť URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Jazyky"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "CHYBA: nepodarilo sa vytvoriť internetové pripojenie."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Zadajte prihlasovacie údaje pre stránku"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Na pripojenie je potrebné zadať prihlasovacie údaje k:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Stranový pomer: Predpokladať štvorcové pixely (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Stiahnutý súbor [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Odoslať titulky"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Naozaj chcete odoslať súbor titulkov \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Preberanie podporovaných jazykov..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Nepodarilo sa prihlásiť na \"%S\" pomocou mena používateľa \"%S\".\n\nProsím zadajte správne meno používateľa a heslo alebo resetujte prihlasovacie údaje, ak sa chcete prihlásiť ako anonymný používateľ."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Automatické vyhľadávanie a stiahnutie bude zablokované pre všetky súbory médií, ktorých cesta obsahuje niektoré zo vzoriek zadaných tu.\nNapríklad napíšte: \"private dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"cesta\"\tHlavný súbor alebo priečinok, ktorý sa má načítať\n\t\t(sú povolené zástupné znaky, znak \"-\" označuje štandardný vstup)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"názov_stopy\"\tNačítať doplnkový zvukový súbor"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"súbor\"\tNačítať doplnkový zvukový súbor posunutý o XX ms\n\t\t(ak súbor obsahuje \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tSpustiť vykresľovanie v režime D3D na celú obrazovku"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"názov_titulkov\"\tNačítať doplnkový súbor s titulkami"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"názov_filtra\"\tNačítať filtre DirectShow z dynamicky prepojenej knižnice (sú povolené zástupné znaky)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tSpustiť v režime DVD, \"cesta\" označuje priečinok DVD (voliteľne)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tSpustiť prehrávanie na titule T, v kapitole C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tSpustiť prehrávanie na titule T, pozícii P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tNačítať všetky stopy zvukového CD alebo (S)VCD,\n\t\t\"cesta\" označuje cestu k jednotke (voliteľne)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tOtvoriť predvolené zariadenie pre video"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tOtvoriť súbor, nespustiť prehrávanie automaticky"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tSpustiť prehrávanie súboru hneď po spustení prehrávača"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tPo prehraní zatvoriť prehrávač (funguje len v spojitosti s prepínačom /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tVypnúť operačný systém po prehraní"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tPrepnúť operačný systém do pohotovostného režimu po prehraní"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tZapnúť hiberáciu operačného systému po prehraní"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tOdhlásiť po prehraní"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tUzamknúť pracovnú stanicu po prehraní"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tVypnúť monitor po prehraní"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tPo prehraní otvoriť ďalší súbor v priečinku"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tSpustiť v režime na celú obrazovku"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tSpustiť minimalizované"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tPoužiť novú inštanciu prehrávača"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tPridať \"cestu\" do playlistu, možno kombinovať s prepínačmi /open a /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tZapnúť náhodné prehrávanie v playliste"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tVytvoriť asociácie pre súbory s videom"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tVytvoriť asociácie pre zvukové súbory"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tVytvoriť asociácie pre súbory s playlistom"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tVytvoriť asociácie pre všetky podporované typy súborov"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tOdstrániť všetky asociácie súborov"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tSpustiť prehrávanie na \"ms\" (= millisekundy)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tSpustiť prehrávanie na pozícii hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tNastaviť fixnú veľkosť okna"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tSpustiť prehrávač na monitore N, pričom N začína od čísla 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tSpustiť s použitím vykresľovača zvuku N, pričom N začína od čísla 1 (pozrite si nastavenia pre \"Výstup\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tSpustiť s použitím prednastavením shadera \"Pr\""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\tŠpecifikovať názov používaného prednastavenia Pan&Scan"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tZnovu asociovať formát ikon"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tOtvoriť MPC-HC na pozadí"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tSpustiť webové rozhranie na určenom porte"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tZobraziť informácie pre ladenie priamo v OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tZablokovať oznamovanie pádov"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tPoužiť MPC-HC ako slave"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tNastaviť index GPU použitého pre hardvérové dekódovanie.\n\t\tDostupné len pre CUVID a DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tObnoviť predvolené nastavenia"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tZobraziť pomocníka k prepínačom pre príkazový riadok"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Hraničná hodnota pre skóre titulkov, ktoré sa budú sťahovať automaticky. Vyššia hodnota znamená, že budú načítané vhodnejšie titulky, nižšie hodnoty môžu viesť k načítaniu nesprávnych titulkov. Žiadnu hodnotu však nemožno považovať za perfektnú. Vyberte si tú, ktorá sa vám najviac osvedčí."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Oneskorenie zvuku (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Veľkosť predvoleného panela nástrojov v (pix.)."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Použiť pôvodný panel nástrojov namiesto vektorizovaného."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Kopírovať URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sl.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sl.dialogs.po
index 5c48592e5..c179edd72 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.sl.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sl.dialogs.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# fubuzz <knedlc@gmail.com>, 2014
-# shvala <simon.hvala@hotmail.com>, 2013-2014
+# shvala <simon.hvala@hotmail.com>, 2013-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-10-01 18:03+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-01-28 17:15+0000\n"
"Last-Translator: shvala <simon.hvala@hotmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.com/projects/p/mpc-hc/language/sl/)\n"
+"Language-Team: Slovenian (http://www.transifex.com/mpc-hc/mpc-hc/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -110,16 +110,16 @@ msgid "Enable custom channel mapping"
msgstr "Omogoči preslikavo kanalov po meri"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Konfiguracija zvočnikov za "
+msgid "Speaker configuration for"
+msgstr "Konfiguracija zvočnikov za"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "vhodne kanale:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Drži shift za takojšnje spremembe ob kliku "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Drži shift za takojšnje spremembe ob kliku"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -190,8 +190,8 @@ msgid "About"
msgstr "O programu"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Avtorske pravice © 2002-2014, glej Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Avtorske pravice © 2002-2017, glej Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -422,12 +422,16 @@ msgid "time(s)"
msgstr "krat"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Način ponavljanja:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Po predvajanju"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Izhod"
+msgid "Default zoom"
+msgstr "Privzeta povečava"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -455,7 +459,7 @@ msgstr "Zvok:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr "(Primer: eng jap swe)"
+msgstr "Dovoli preglasitev izbora zunanjega razdelilnika"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
@@ -473,10 +477,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Samodejno naloži zvočne datoteke"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Uporabi vgrajeni izrisovalnik za podnapise"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Nadzor"
@@ -570,8 +570,8 @@ msgid "Warning"
msgstr "Opozorilo"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Če preglasiš in omogočiš celozaslonsko glajenje (antialiasing) kjerkoli v nastavitvah videokartice, podnapisi ne bodo izgledali nič bolje, bo pa cpu zelo obremenjen"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Če preglasiš in omogočiš celozaslonsko glajenje (antialiasing) kjerkoli v nastavitvah videokartice, podnapisi ne bodo izgledali nič bolje, bo pa CPU zelo obremenjen"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -677,16 +677,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Prepreči minimiziranje predvajalnika v celozaslon. naćinu na neprivzetem zaslonu"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Uporabi značilnosti opravilne vrstice Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Uporabi napredne značilnosti opravilne vrstice"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Odpri naslednjo/prejšnjo datoteko v imeniku pri \"Preskoči nazaj/naprej\", če je na seznamu predvajanja samo ena postavka"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Uporabi namig o času:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1126,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "Zvočni izvajalnik"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (brez izrisovalnika) in EVR (CP) nastavitve"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (brez izrisovalnika) in EVR (CP) nastavitve"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1170,8 +1170,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Podnapisi *"
+msgid "Subtitles"
+msgstr "Podnapisi"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1186,12 @@ msgid "Rotation"
msgstr "Zasuk"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Zunanji filtri (kot je VSFilter) lahko prikažejo podnapise na vseh izrisovalnikih."
+msgid "Subtitle Renderer"
+msgstr "Izrisovalnik podnapisov"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Medpomni prevedene senčilnike"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1205,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Dovoli dostop samo iz localhost"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Omogoči predogled"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Izpiši informacije za razhroščevanje"
@@ -1230,17 +1238,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI upravljalci: (.ext1=pot1;.ext2=pot2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Podnapisi na voljo na spletu"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Prenesi in odpri"
+msgid "Download subtitles"
+msgstr "Prenesi podnapise"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Nadomesti trenutno naložene podnapise"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Prenesi"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Osveži"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Prekini"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Možnosti"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Prenesi podnapise gor"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Prenesi gor"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Prekini"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Možnosti"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Shrani kot..."
@@ -1278,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "Omogoči samodejno preverjanje za posodobitve"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Zakasnitev med preverjanjem:"
+msgid "Check every:"
+msgstr "Preveri vsake:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1542,16 +1578,28 @@ msgid "Reset"
msgstr "Ponastavi"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Medmrežna podatkovna zbirka"
+msgid "Online search, download and upload subtitles"
+msgstr "Išči, prenesi podnapise dol in gor"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Samodejno išči in prenesi podnapise če jih lokalno ni"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Uporabi podnapise za slušno prizadete (ko so tako označeni)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Prezri datoteke, ki vsebujejo katero izmed naslednjih besed:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Osnovni URL od medmrežne zbirke podnapisov:"
+msgid "Languages in order of preference:"
+msgstr "Jeziki v želenem vrstnem redu:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Test"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Samodejno prenesi gor aktivne podnapise na koncu predvajanja"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1653,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Privzeto"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Naprava"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Izključni način"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Dovoli pretočnost "
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Možnosti"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Omogoči stereo križanje (za slušalke)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Odreži:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Nivo:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Opomba"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Za minimalno avdio popačenje je priporočljivo imeti glasnost okoli 85% pri predvajanju glasnih vsebin, ki so izgubno kodirane."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG kvaliteta:"
@@ -1665,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "V redu"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Poročilo o prenehanju delovanja"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Se opravičujemo, izgleda da je se MPC-HC ravnokar sesul. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Pošljite poročilo o hrošču in nam pomagajte najti in odpraviti težavo."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Neobvezne informacije"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Epošta:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Vaš epoštni naslov ni obvezen, uporabljen pa bo samo če bodo razvojniki potrebovali stik z vami za dodatne informacije."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Opis težave (uporabljaj samo angleščino):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Ponovni zagon MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Zapusti MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sl.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sl.menus.po
index e635ff43d..51049b944 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.sl.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sl.menus.po
@@ -1,17 +1,17 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# kasper93, 2013-2014
# fubuzz <knedlc@gmail.com>, 2014
-# shvala <simon.hvala@hotmail.com>, 2013
+# shvala <simon.hvala@hotmail.com>, 2013,2015-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-09-02 13:11+0000\n"
-"Last-Translator: fubuzz <knedlc@gmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.com/projects/p/mpc-hc/language/sl/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-03-08 15:30+0000\n"
+"Last-Translator: shvala <simon.hvala@hotmail.com>\n"
+"Language-Team: Slovenian (http://www.transifex.com/mpc-hc/mpc-hc/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -66,29 +66,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Shrani predo&gledno sličico..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "Podnapisi"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
msgstr "Na&loži podnapise..."
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
msgstr "Shrani pod&napise..."
-msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Podatkovna z&birka podnapisov"
-
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "I&skanje..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "Prenesi po&dnapise"
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Prenesi &gor..."
-
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Prenesi &dol..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "Prenesi &gor podnapise"
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -198,13 +194,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Test trganja"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "Pr&ikaži statistiko"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Prikaži statistiko"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Prikaži trenutni &čas"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "P&reostali čas"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Prikaži ime &datoteke"
msgctxt "POPUP"
msgid "&Output Range"
@@ -406,17 +406,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "D&otik okna od zunaj"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Zadrži razmerje stranic"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Preglasi r&azmerje stranic"
+msgid "&Aspect Ratio"
+msgstr "R&azmerje stranic"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Privzeto"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Privzeto (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -438,6 +434,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Predvidevaj kvadratne pik&sle (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Popravi razliko razmerja strani&c Zaslon/Namizje"
@@ -531,9 +531,25 @@ msgid "&Stop"
msgstr "&Stop"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "Slika &korakoma"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Ponovi"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr " Brez k&onca"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Datoteka"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Seznam predvajanja"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "Pojdi &na..."
@@ -555,16 +571,16 @@ msgid "S&haders"
msgstr "&Senčilniki"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Audio pretok"
+msgid "&Audio Track"
+msgstr "&Zvočni zapis"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "&Podnapisi"
+msgid "Su&btitle Track"
+msgstr "Zapis &podnapisov"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "&Video pretok"
+msgid "Vide&o Track"
+msgstr "&Video zapis"
msgctxt "POPUP"
msgid "&Volume"
@@ -586,7 +602,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Po predvajanj&u"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "&Ne naredi ničesar"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Predvajaj &naslednjo datoteko v imeniku"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Izklopi &monitor"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Izhod"
@@ -610,10 +638,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "&Zakleni"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Izklopi &monitor"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Krmarjenje"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sl.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sl.strings.po
index 8a8ae531f..d8ea6aaee 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.sl.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sl.strings.po
@@ -1,17 +1,18 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# fubuzz <knedlc@gmail.com>, 2014
-# shvala <simon.hvala@hotmail.com>, 2013-2014
+# shvala <simon.hvala@hotmail.com>, 2013-2017
# Underground78, 2014
+# XhmikosR, 2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-01 18:03+0000\n"
-"Last-Translator: shvala <simon.hvala@hotmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.com/projects/p/mpc-hc/language/sl/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-09 22:30+0000\n"
+"Last-Translator: XhmikosR\n"
+"Language-Team: Slovenian (http://www.transifex.com/mpc-hc/mpc-hc/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -62,10 +63,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Lastnosti"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Datoteka"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "Privz&eti slog"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Seznam predvajanja"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Datoteke"
@@ -118,6 +127,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Če izrisovalni cilj ni določen, bodo SSA/ASS podnapisi izrisani relativno video sliki. Vsi ostali besedilni podnapisi bodo izrisani relativno oknu."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Način ponavljanja: Seznam predvajanja"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Način ponavljanja: Datoteka"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Ponavljaj brez konca: Vklj"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Ponavljaj brez konca: Izklj"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Ponavljaj brez konca"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Nikoli (najhitrejši način)"
@@ -327,12 +356,12 @@ msgid "On/Off"
msgstr "Vklj./Izklj."
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Od fps"
+msgid "From (FPS)"
+msgstr "Od (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Do fps"
+msgid "To (FPS)"
+msgstr "Do (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -466,6 +495,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Predvajanje::Senčilniki"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Viri"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Razno"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Predvajanje::Zajem"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Predvajanje::Nastavitve Sync izrisovalnika"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Predvajanje::Celozaslonsko"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Interni filtri: Zvočni predvajalnik"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Zvočni preklopnik"
@@ -490,18 +547,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Izrisovalnik mešalnik s prekrivanjem"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video mešalni izrisovalnik VMR 7 (okensko)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video mešalni izrisovalnik VMR 9 (okensko)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video mešalni izrisovalnik VMR 7 (brez izrisovanja)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video mešalni izrisovalnik VMR 9 (brez izrisovanja)"
@@ -554,34 +603,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Predvajanje::Mrežni vmesnik"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Podnapisi::Podat. zbirka"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Viri"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Razno"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Predvajanje::Zajem"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Predvajanje::Nastavitve Sync izrisovalnika"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Predvajanje::Celozaslonsko"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Podrobnosti"
@@ -602,17 +623,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Vedno izrisuje s prekrivanjem. Običajno je dovoljen samo YUV format, vendar so prikazani neposredno brez pretvorbe barv v RGB. To je najhitrejši način izrisovanja in edini, kjer je zagotovljeno celozaslonsko zrcaljenje slike na tv-izhod."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Privzeti izrisovalnik na Windows XP. Zelo stabilen in samo malo počasnejši kot prekrivni mešalnik. Uporablja DirectDraw in deluje v prekrivanju kadar lahko."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Na voljo samo če imate nameščeno DirectX 9. Ima iste zmožnosti kot VMR-7 (okensko), vendar ne bo nikoli uporabljal izrisovanja s prekrivanjem, zato pa bo tudi mogoče malo počasnejši od VMR-7 (okensko)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Enako kot VMR-7 (okensko), vendar z Allocator-Presenter vtičnikom od MPC-HC za podnapise. Video zrcaljenje s prekrivanjem NE BO delalo. \"True Color\" nastavitev barv namizja priporočena."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Na voljo samo če imate nameščeno DirectX 9. Zelo stabilno, vendar ne bo nikoli uporabljen Overlay izrisovalnik in bo zato malo počasnejše kot Overlay mešalnik."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -623,7 +636,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Isto kot VMR-9 (brez izrisovalnika), vendar uporablja pravo bikubično spreminjanje velikosti v dveh prehodih."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Se priključi na katerikoli medij tipa video, vendar ne pošilja naprej nič. Uporabi ko ne potrebujete prikaza slike in želite CPU prihraniti nepotrebno delo."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -650,10 +663,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Lastni izrisovalnik Real. SMIL skripte bodo delale, interakcija pa najbrž ne. Uporablja DirectDraw in teče s prekrivanjem, kadar lahko."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Izhod iz Real izrisan z Allocator-Presenter na osnovi DX7 od VMR-7 (brez izrisovalnika)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Izhod iz Real izrisan z Allocator-Presenter na osnovi DX9 od VMR-9 (brez izrisovalnika)."
@@ -662,10 +671,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Lastni izrisovalnik QuickTime. Postane počasen, ko je velikost video območja spremenjena ali delno prekrito z drugim oknom. Ko prekrivanje ni na voljo najraje preklopi nazaj na GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Izhod iz QuickTime izrisan z Allocator-Presenter na osnovi DX7 od VMR-7 (brez izrisovalnika)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Izhod iz QuickTime izrisan z Allocator-Presenter na osnovi DX9 od VMR-9 (brez izrisovalnika)."
@@ -674,22 +679,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Video površina bo dodeljena kot redna izvenzaslonska površina."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC zvočni izvajalnik je okvarjen, ne uporabljaj."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync izrisovalnik"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Prijava hrošča"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC se je ravnokar sesul, vendar je bila ta različica prevedena brez informacij o razhroščevanju.\nČe želite prijaviti ta hrošč, bi morali najprej poizkusiti uradno različico.\n\nŽelite obiskati spletno stran s prenosi?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Veljavna enostavna površina izven zaslona"
@@ -742,9 +735,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Nič (nestisnjeno)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Interni zvočni predvajalnik"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -758,10 +751,14 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Da bi videl vdelane vire v brskalniku, je potrebno omogočiti spletni vmesnik.\n\nUporabi gumb \"Shrani kot\" če želiš samo shraniti informacije."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
msgstr "Prenesi podnapise"
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Prenesi podnapise gor"
+
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
msgstr "Zakasnitev (ms):"
@@ -791,7 +788,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Ne najdem vseh arhivskih izvodov"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Video površina bo dodeljena kot tekstura, vendar bodo 2D funkcije uporabljene za kopiranje in raztegovanje na medpomnilnik ozadja. Zahteva video kartico, ki lahko dodeli teksture 32bit, RGBA, ki niso velikosti potence od 2 in najmanj v ločljivosti videa."
msgctxt "IDC_TEXTURESURF3D"
@@ -818,6 +815,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Zmanjšuje trganje tako, da se izogne privzetemu VSync, ki je vgrajen v D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Iskanje s kanalnikom"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Podnapisi niso naloženi ali nepodprt izrisovalnik."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Shrani prevedene senčilnike v lokalni AppData za pohitritev nalaganja."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Odprite VTS_xx_0.ifo, da bi naložili VTS_xx_x.vob datoteke v enem kosu"
@@ -890,7 +899,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Utišaj"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Vključi zvok"
@@ -955,11 +964,11 @@ msgid "&Organize Favorites..."
msgstr "&Urejaj priljubljene..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Premešaj"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Odpri lokacijo datoteke"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1043,7 +1052,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Povečaj v Ultra-Širokozaslonsko,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Skrij v celozaslonsko"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1140,7 +1149,7 @@ msgstr "Aplik. ukaz"
msgctxt "IDS_AG_MEDIAFILES"
msgid "Media files (all types)"
-msgstr "Multimedijske datoteke (vse vrste)|"
+msgstr "Multimedijske datoteke (vse vrste)"
msgctxt "IDS_AG_ALLFILES"
msgid "All files (*.*)|*.*|"
@@ -1148,7 +1157,7 @@ msgstr "Vse datoteke (*.*)|*.*|"
msgctxt "IDS_AG_AUDIOFILES"
msgid "Audio files (all types)"
-msgstr "Zvočne datoteke (vse vrste)|"
+msgstr "Zvočne datoteke (vse vrste)"
msgctxt "IDS_AG_NOT_KNOWN"
msgid "Not known"
@@ -1231,7 +1240,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Dodaj cel imenik"
msgctxt "IDS_HW_INDICATOR"
@@ -1284,7 +1293,7 @@ msgstr "Vrednost"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr "Največje število datotek prikazanih v meniju \"Nedavne datoteke\", za katere je položaj potencialno shranjen. "
+msgstr "Največje število datotek prikazanih v meniju \"Nedavne datoteke\", za katere je položaj potencialno shranjen."
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
@@ -1338,6 +1347,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<nedefinirano>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Opazuj"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Premakni gor"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Premakni dol"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sortiraj po LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Odstrani vse"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Ste prepričani, da želite odstraniti vse kanale iz seznama?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Informacije niso na voljo"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Prosimo počakajte, analiza poteka..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Omogoči beleženje v datoteko (zahteva ponovni zagon) "
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Preostali čas"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Visoka natančnost"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Po predvajanju prevrti trenutno datoteko"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Po predvajanju: Zapri"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC je naletel na težavo med inicializacijo. Z vašo pomočjo bomo mogoče lahko uredili zadevo.\n\nŽelite poslati poročilo o težavi?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Vnesi pozitivno vrednost če zvok prehiteva, negativno vrednost če zamuja."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Predogled je trenutno izključen. Lahko ga vključite v nastavitvah MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Ta možnost se lahko uporabi za predogled predstavnostnih datotek z oddaljene lokacije. Uporabite ga samo v ustrezno zavarovanemu lokalnemu omrežju."
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "grajeni izrisovalnik za podnapise"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Odpri napravo"
@@ -1358,13 +1443,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Slika uspešno shranjena"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
msgstr "Naloži podnapise"
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Shrani podnapis"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Shrani podnapise..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1387,11 +1472,11 @@ msgid "Stop"
msgstr "Stop"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Slike korakoma"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Slike korakoma nazaj"
msgctxt "IDS_AG_GO_TO"
@@ -1491,8 +1576,8 @@ msgid "Thumbnails saved successfully"
msgstr "Predogledne sličice uspešno shranjene"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "&Video pretok"
+msgid "Vide&o Track"
+msgstr "&Video zapis"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1539,11 +1624,11 @@ msgid "Reset Rate"
msgstr "Ponastavi hitrost"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Zakasnitev zvoka +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Zakasnitev zvoka -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1614,14 +1699,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Premakni podnapis v desno"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Prikaži stat."
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Skoči na začetek"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Prikaži ime datoteke"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Predvajaj DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Predvajaj BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Prikaži statistiko izrisovalnika "
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Ponastavi statistiko izrisovalnika"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Podnapisi::Razno"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "&Skrij okvir"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "&Samo slika"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Prikaži meni in napi&se"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "&Skrij meni"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Napredno"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Minimalni pogled"
@@ -1687,8 +1812,8 @@ msgid "PnS Dec Height"
msgstr "PnS Zmanjšaj višino"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Prenašam podnapis(e), prosimo počakajte."
+msgid "Downloading [%s] \"%s\""
+msgstr "Prenašam [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1699,8 +1824,8 @@ msgid "No subtitles found."
msgstr "Ne najdem podnapisov."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d podnapis(ov) na voljo."
+msgid "%d subtitle(s) available."
+msgstr "%d podnapis(ov) na voljo."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1855,12 +1980,12 @@ msgid "Boss key"
msgstr "Šef tipka (Boss key)"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Meni predvajalnika (kratek)"
+msgid "Player Menu"
+msgstr "Meni predvajalnika"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Meni predvajalnika (dolg)"
+msgid "Player Menu (full)"
+msgstr "Meni predvajalnika (poln)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1871,20 +1996,20 @@ msgid "Options"
msgstr "Možnosti"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Naslednji zvočni zapis"
+msgid "Next Audio Track"
+msgstr "Naslednji zvočni posnetek"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Prejš. zvok"
+msgid "Prev Audio Track"
+msgstr "Prejšnji zvočni posnetek"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Naslednji podnapisi"
+msgid "Next Subtitle Track"
+msgstr "Naslednji podnapis"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Prejš. podnapis"
+msgid "Prev Subtitle Track"
+msgstr "Prejšnji podnapis"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1894,22 +2019,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Ponovno naloži podnapise"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Naslednji zvok (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Prejšnji zvok (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Naslednji podnapis (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Prejšnji podnapis (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Naslednji zorni kot (DVD)"
@@ -1919,28 +2028,28 @@ msgid "Prev Angle (DVD)"
msgstr "Prejšnji zorni kot (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Naslednji zvok (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Naslednji zvočni posnetek (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Prejšnji zvok (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Prejšnji zvočni posnetek (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
+msgid "Next Subtitle Track (DVD)"
msgstr "Naslednji podnapis (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
+msgid "Prev Subtitle Track (DVD)"
msgstr "Prejšnji podnapis (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Vklj/Izklj podnapis (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Preostali čas"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Prikaži trenutni čas"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1966,11 +2075,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Šifrirano"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Da"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Ne"
@@ -2027,12 +2136,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Glasnost: %02lu/%02lu, Naslov: %02lu/%02lu, Poglavje: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Kot: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bitov %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2096,7 +2205,7 @@ msgstr "DVD: Nezdružljive regije diska in dekoderja"
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "Ta možnost je načrtovana v izogib trganju. Bo pa poleg tega preprečila MPC-HC, da prikaže priročni meni ali katerokoli drugo pogovorno okno med predvajanjem.\n\nZa izhod iz Direct3D celozaslonsko in zaustavitev predvajanja je potrebno pritisniti: Ctrl + C.\n\nRes želiš aktivirati to možnost?"
+msgstr "Ta možnost je načrtovana v izogib trganju. Bo pa poleg tega preprečila MPC-HC, da prikaže priročni meni ali katerokoli drugo pogovorno okno med predvajanjem.\n\nRes želiš aktivirati to možnost?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
@@ -2122,14 +2231,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Širina slike"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL izgleda pravilno!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Verzija protokola neusklajena, prosimo nadgraditev svoj predvajalnik ali izberite drug naslov!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Razmerje stranic"
@@ -2139,19 +2240,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Skupno: %ld, Izpuščenih: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Velikost: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Velikost: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Prosto: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Prosto: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2223,8 +2324,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Predogledne sličice bi bile premajhne, nemogoče je izdelati datoteko.\n\nPoskušaj zmanjšati število sličic ali povečati skupno velikost."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Da bi naložili podnapise morate spremeniti vrsto video izrisovalnika in ponovno odpreti datoteko.\n- DirectShow: VMR-7/VMR-9 (brez izrisovalnika), EVR (CP), Sync, madVR or Haali\n- RealMedia: Poseben prikazovalnik za RealMedia, ali pa ga odprite s pomočjo DirectShow\n- QuickTime: DX7 ali DX9 prikazovalnika za QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Da bi naložili podnapise morate spremeniti vrsto video izrisovalnika in ponovno odpreti datoteko.\n- DirectShow: VMR-9 (brez izrisovalnika), EVR (CP), Sync, madVR or Haali\n- RealMedia: Poseben prikazovalnik za RealMedia, ali pa ga odprite s pomočjo DirectShow\n- QuickTime: DX7 ali DX9 prikazovalnika za QuickTime\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2235,11 +2336,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Razmerje stranic: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Razmerje stranic: Privzeto"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Razmerje stranic: Privzeto (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Zakasnitev zvoka: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2251,8 +2352,8 @@ msgid "Out of memory"
msgstr "Zmanjkalo pomnilnika"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Napaka: Potreben je Flash predvajalnik za IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Napaka: Potreben je Flash predvajalnik za Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2274,10 +2375,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Neuspelo izrisovanje datoteke"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Nepravilen URL, ne najdem zbirke podnapisov!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Poglavje: "
@@ -2298,14 +2395,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Trenutno"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC se je nepričakovano zaustavil. Za pomoč pri razrešitvi tega problema prosimo pošljite datoteko \"%s\" našemu sledilniku hroščev.\n\nŽelite zdaj odpreti imenik z minidump datoteko in obiskati sledilnik hroščev?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Neuspela izdelava dump datoteke v \"%s\" (napaka %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Izberi imenik"
@@ -2323,7 +2412,7 @@ msgid "Toggle Caption&Menu"
msgstr "Preklopi meni in napise"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Preklopi iskalec"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2479,8 +2568,8 @@ msgid "Volume boost Max"
msgstr "Ojačitev glasnosti maks"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Uporaba: mpc-hc.exe \"pot\" [stikala]\n\n\"pot\"\t\tGlavna datoteka ali imenik, ki naj bo naložen\n\t\t(nadomestni znaki dovoljeni)\n/dub \"ime\"\tNaloži dodatno zvočno datoteko\n/dubdelay \"ime\"\tNaloži dodatno zvočno datoteko zamaknjeno za XXms\n\t\t(če datoteka vsebuje \"...DELAY XXms...\")\n/d3dfs\t\tZačni izrisovanje v D3D celozaslonskem načinu\n/sub \"ime\"\tNaloži dodatno datoteko podnapisov\n/filter \"ime filtra\"\tNaloži DirectShow filtre iz dinamično povezane\n\t\tknjižnice (nadomestni znaki dovoljeni)\n/dvd\t\tZaženi v dvd načinu, \"pot\" pomeni dvd\n\t\timenik (opcija)\n/dvdpos T#C\tZačni predvajanje z naslovom T, poglavje C\n/dvdpos T#hh:mm\tZačni predvajanje z naslovom T, pozicijo hh:mm:ss\n/cd\t\tNaloži vse zapise zvočnega CDja ali (s)vcd,\n\t\t\"ime datoteke\" pomeni pot pogona (opcija)\n/open\t\tOdpri datoteko, ne začni samodejno predvajati\n/play\t\tZačni predvajati datoteko takoj ko se predvajalnik\n\t\tzažene\n/close\t\tZapri prevajalnik po predvajanju (deluje samo ko\n\t\tje uporabljen skupaj s /play)\n/shutdown\tZaustavi operacijski sistem po predvajanju\n/fullscreen\tZačni v celozaslonskem načinu\n/minimized\tZačni minimirano\n/new\t\tUporabi novo inačico predvajalnika\n/add\t\tDodaj \"pot\" v seznam predvajanja, lahko je\n\t\tkombinirano z /open in /play\n/regvid\t\tUstvari povezave za video datoteke\n/regaud\t\tUstvari povezave za zvočne datoteke\n/regpl\t\tUstvari povezave za datoteke seznama predvajanja\n/regall\t\tustvari povezave za vse podprte vrste datotek\n/unregall\t\tOdstrani vse povezave datotek\n/start ms\t\tZačni predvajanje pri \"ms\" (= milisekund)\n/startpos hh:mm:ss\tZačni predvajanje pri poziciji hh:mm:ss\n/fixedsize w,h\tNastavi okno fiksne velikosti\n/monitor N\tZačni predvajalnik na zaslonu N, N se začne z 1\n/audiorenderer N\tZačni uporabljati zvočni predvajalnik N, N se začne z 1\n\t\t(glej nastavitve \"Izhod\")\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tPonastavi privzete nastavitve\n/help /h /?\tPrikaži pomoč glede stikal ukazne vrstice\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Uporaba: mpc-hc.exe \"pot\" [stikala]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2566,14 +2655,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Omogoči vse filtre"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Iskanje s kanalnikom"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Podnapisi niso naloženi ali nepodprt izrisovalnik."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Avtor neznan. Obrnite se na nas, če ste naredili ta logo!"
@@ -2662,40 +2743,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Zgoraj zadaj desno"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Ponastavi prikazano statistiko"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Podnapisi::Razno"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "&Skrij okvir"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "&Samo slika"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Prikaži meni in napi&se"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "&Skrij meni"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Napredno"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Nad iskalno vrstico"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Pod iskalno vrstico"
msgctxt "IDS_VIDEO_STREAM"
@@ -2863,8 +2916,8 @@ msgid "Other Audio"
msgstr "Drug zvok"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2874,6 +2927,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus zvočni kodek"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2938,22 +3011,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus zvočni kodek"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Seznam predvajanja"
@@ -2978,18 +3035,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Razmerje stranic"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Uporabi WASAPI (ponovno zaženi predvajanje)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Utišaj pri hitrem pomikanju naprej"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Zvočna naprava:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: Vklj."
@@ -3278,6 +3323,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Ponastavi jakost zvoka: Izklj."
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bajtov"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3335,7 +3384,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Napaka pri razčlenitvi vnešene hitrosti prikaza slik!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Ne morem korakoma po slikah, poskusi z drugim video izrisovalnikom."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3354,10 +3403,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "Funkciji \"Shrani sliko\" in \"Shrani predogledno sličico\" ne delujeta v video izrisovalniku - mešalniku s prekrivanjem.\nSpremeni video izrisovalnik v MPC izhodnih nastavitvah in ponovno odpri datoteko."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Ne morem se povezati s spletno zbirko podnapisov."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Želiš aktivirati EDL urejevalnik?"
@@ -3426,7 +3471,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Uveljaviti morate nove nastavitve, preden jih lahko testirate."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Po predvajanju: Izhod"
@@ -3454,6 +3499,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Po predvajanju: Izključi monitor"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Po predvajanju: predvajaj naslednjo datoteko v imeniku"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Po predvajanju: ne naredi ničesar"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Svetlost: %s"
@@ -3534,3 +3587,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Nastavitve"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Ponudnik"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Slušno prizadeti"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Prenosi"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Ocena"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "iskanje podnapisov na spletu neuspešno."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "iskanje podnapisov na spletu prekinjeno."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "iskanje podnapisov na spletu končano. Najdenih %d podnapisov."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "iskanje podnapisov na spletu končano, podnapisi niso bili najdeni."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Prenesi podnapise"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Iščem podnapise na spletu, prosimo počakajte..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Prekinjam iskanje podnapisov na spletu..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Uporabniško ime"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Stanje"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Pripravljen..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Ni izvedeno."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Prenašam gor..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Podnapisi uspešno prenešeni gor."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Prenos podnapisov gor spodletel."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Prenos podnapisov gor prekinjen."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Podnapisi že obstajajo."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Prenašanje podnapisov gor, prosimo počakajte..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Prenos gor končan."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Prenos gor prekinjen."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Prenos gor spodletel."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Prenesi in odpri"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Nastavitev"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Ponastavi"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Premakni gor"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Premakni dol"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Odpri Url"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Jeziki"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "NAPAKA: Internetne povezave ni moč vzpostaviti."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Vnesi poverilnice spletne strani"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Vnesi svoje poverilnice za povezavo na:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Razmerje stranic: Predvidevaj kvadratne piksle (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Prenešeno [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Prenesi podnapise gor"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Ste prepričani, da želite prenesti gor datoteko podnapisov \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Pridobivam podprte jezike..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Neuspela prijava v \"%S\" kot uporabnik \"%S\".\n\nProsim vnesi pravilno uporabniško ime in geslo ali ponastavi poverilnice za anonimno prijavo."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Samodejno iskanje in prenos bo onemogočen za vse multimedijske datoteke katerih pot vsebuje vpisan vzorec.\nVpiši na primer: \"private dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pot\"\tGlavna datoteka ali mapa za prenos\n\t\t(nadomestni znaki dovoljeni, \"-\" pomeni standarden vnos)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"ime\"\tNaloži dodatno zvočno datoteko"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"datoteka\"\tNaloži dodatno zvočno datoteko zamaknjeno za XXms\n\t\t(če datoteka vsebuje \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tZačni izrisovati v D3D celozaslonskem načinu"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"ime\"\tNaloži dodatno datoteko podnapisov"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"ime\"\tNaloži DirectShow filtre iz dinamično povezane knjižnice(nadomestni znaki dovoljeni)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tZaženi v DVD načinu, \"ime\" pomeni DVD mapo (opcijsko)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tZačni predvajanje pri naslovu T, poglavju C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tZačni predvajanje pri naslovu T, poziciji P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tNaloži vse posnetke z Audio CD ali (S)VCD,\n\t\t\"ime\" pomeni pot pogona (opcijsko)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tOdpri privzeto video napravo"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tOdpri datoteko, ne začni samodejno s predvajanjem"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tZačni predvajanje datoteke takoj po zagonu predvajalnika"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tZapri predvajalnik po predvajanju (deluje samo pri uporabi s /play)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tZaustavi operacijski sistem po predvajanju"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tOperacijski sistem v stanje pripravljenosti po predvajanju"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tOperacijski sistem v spanje po predvajanju"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tOdjavi se po predvajanju"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tZakleni računalnik po predvajanju"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tIzključi monitor po predvajanju"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tOdpri naslednjo datoteko po predvajanju"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tZaženi v celozaslonskem načinu"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tZaženi pomanjšano"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tUporabi nov primerek predvajlnika"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tDodaj \"ime poti\" v seznam predvajanja, možno kombiniranje z /open in /play"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tSeznam predvajanja naj bo naključen"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tUstvari povezave za video datoteke"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tUstvari povezave za zvočne datoteke"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tUstvari povezave za datoteke seznama predvajanja"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tUstvari povezave za vse podprte vrste datotek"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tOdstrani povezave za vse datoteke"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tZačni predvajanje pri \"ms\" (= milisekunde)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tZačni predvajanje pri poziciji hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tDoloči fiksno velikost okna"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tZačni predvajalnik na zaslonu N, kjer se N začne pri 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tZačni z zvočnim predvajalnikom N, kjer se N začne pri 1 (glej \"Izhod\" nastavitve)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tZačni z uporabo nastavitve senčilnika \"Pr\""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\tDoloči ime nastavitve Premakni&Spremeni"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tPonovno poveži sličice formata"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tOdpri MPC-HC v ozadju"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tZaženi spletni vmesnik na določenih vratih"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tPrikaži informacije razhroščevalnika na OSD"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tIzključi poročanje o sesutju"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tUporabi MPC-HC podrejeno"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tNastavi indeks GPU za strojno dekodiranje.\n\t\tNa voljo samo za CUVID in DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tObnovi na privzete nastavitve"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tPrikaži pomoč glede stikal ukazne vrstice"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Mejna vrednost za oceno podnapisov, ki bodo samodejno preneseni. Višja vrednost pomeni, da bodo preneseni bolj točni podnapisi, nižja pa, da bodo morda preneseni nepravilni podnapisi, vendar ne obstaja idealna vrednost. Izberite tisto, ki vam najbolj ustreza."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Zakasnitev zvoka (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Velikost privzete orodne vrstice v pikah."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Uporabi staro orodno vrstico namesto nove vektorske."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sr.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sr.dialogs.po
new file mode 100644
index 000000000..24e3de9f4
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sr.dialogs.po
@@ -0,0 +1,1797 @@
+# MPC-HC - Strings extracted from dialogs
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Rancher, 2014-2015
+# Rancher, 2016
+# Goran Džaferi <the.vbm@gmail.com>, 2014
+# Goran Džaferi <the.vbm@gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Serbian (http://www.transifex.com/mpc-hc/mpc-hc/language/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "IDD_SELECTMEDIATYPE_CAPTION"
+msgid "Select Media Type"
+msgstr "Избор типа медија"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDOK"
+msgid "OK"
+msgstr "&У реду"
+
+msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
+msgid "Cancel"
+msgstr "&Откажи"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC1"
+msgid "Video"
+msgstr "Видео"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON1"
+msgid "Set"
+msgstr "Постави"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Audio"
+msgstr "Аудио"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "Output"
+msgstr "Излаз"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK1"
+msgid "Record Video"
+msgstr "Сними видео"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK2"
+msgid "Preview"
+msgstr "Преглед"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK3"
+msgid "Record Audio"
+msgstr "Сними аудио"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK4"
+msgid "Preview"
+msgstr "Преглед"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_STATIC"
+msgid "V/A Buffers:"
+msgstr "Бафери:"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
+msgid "Audio to wav"
+msgstr "Аудио у WAV"
+
+msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
+msgid "Record"
+msgstr "Сними"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
+msgid "Enable built-in audio switcher filter (requires restart)"
+msgstr "Уграђени филтер за промену звука (захтева поновно покретање)"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
+msgid "Normalize"
+msgstr "Нормализација"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
+msgid "Max amplification:"
+msgstr "Максимално појачање:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
+msgid "Regain volume"
+msgstr "Врати јачину звука"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
+msgid "Boost:"
+msgstr "Појачање:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
+msgid "Down-sample to 44100 Hz"
+msgstr "Смањи квалитет на 44100 Hz"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
+msgid "Audio time shift (ms):"
+msgstr "Померање звука (мс):"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
+msgid "Enable custom channel mapping"
+msgstr "Прилагођено мапирање канала"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
+msgid "Speaker configuration for"
+msgstr "Подешавање звучника за"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
+msgid "input channels:"
+msgstr "улазна канала:"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Држите Shift за тренутни приказ измена након клика."
+
+msgctxt "IDD_GOTO_DLG_CAPTION"
+msgid "Go To..."
+msgstr "Прелазак на…"
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
+msgstr "Унесите време у формату чч:мм:сс.мс да бисте прешли на одређено време."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Time"
+msgstr "Време"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK1"
+msgid "Go!"
+msgstr "&Пређи"
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
+msgstr "Унесите два броја ради преласка на одређени кадар: први је број кадра а други његова брзина."
+
+msgctxt "IDD_GOTO_DLG_IDC_STATIC"
+msgid "Frame"
+msgstr "Кадар"
+
+msgctxt "IDD_GOTO_DLG_IDC_OK2"
+msgid "Go!"
+msgstr "&Пређи"
+
+msgctxt "IDD_OPEN_DLG_CAPTION"
+msgid "Open"
+msgstr "Отварање"
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
+msgstr "Унесите адресу аудио или видео датотеке (на рачунару или интернету)."
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC"
+msgid "Open:"
+msgstr "Отвори:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "&Потражи…"
+
+msgctxt "IDD_OPEN_DLG_IDC_STATIC1"
+msgid "Dub:"
+msgstr "Аудио-запис:"
+
+msgctxt "IDD_OPEN_DLG_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "&Потражи…"
+
+msgctxt "IDD_OPEN_DLG_IDOK"
+msgid "OK"
+msgstr "&У реду"
+
+msgctxt "IDD_OPEN_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "&Откажи"
+
+msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
+msgid "Add to playlist without opening"
+msgstr "Додај у плеј-листу без отварања"
+
+msgctxt "IDD_ABOUTBOX_CAPTION"
+msgid "About"
+msgstr "О програму"
+
+msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Ауторска права © 2002-2017; погледајте датотеку Authors.txt"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "This program is freeware and released under the GNU General Public License."
+msgstr "Овај програм је бесплатан и издат је под лиценцом GNU GPL."
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "English translation made by MPC-HC Team"
+msgstr "Превео Ђорђе Васиљевић"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build information"
+msgstr "Информације"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Version:"
+msgstr "Верзија:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Compiler:"
+msgstr "Компилатор:"
+
+msgctxt "IDD_ABOUTBOX_IDC_LAVFILTERS_VERSION"
+msgid "Not used"
+msgstr "Не користи се"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Build date:"
+msgstr "Датум израде:"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Operating system"
+msgstr "Оперативни систем"
+
+msgctxt "IDD_ABOUTBOX_IDC_STATIC"
+msgid "Name:"
+msgstr "Име:"
+
+msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
+msgid "Copy to clipboard"
+msgstr "&Копирај"
+
+msgctxt "IDD_ABOUTBOX_IDOK"
+msgid "OK"
+msgstr "&У реду"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Open options"
+msgstr "Опције отварања"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO1"
+msgid "Use the same player for each media file"
+msgstr "Исти плејер за сваку датотеку"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO2"
+msgid "Open a new player for each media file played"
+msgstr "Нови плејер за сваку датотеку"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Language"
+msgstr "Језик"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Title bar"
+msgstr "Насловна трака"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO3"
+msgid "Display full path"
+msgstr "Пуна путања"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
+msgid "File name only"
+msgstr "Име датотеке"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
+msgid "Don't prefix anything"
+msgstr "Ништа"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
+msgid "Replace file name with title"
+msgstr "Замени име датотеке насловом"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "Other"
+msgstr "Друго"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK3"
+msgid "Tray icon"
+msgstr "Икона у системској палети"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_SHOW_OSD"
+msgid "Show OSD (requires restart)"
+msgstr "OSD (захтева поновно покретање)"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK4"
+msgid "Limit window proportions on resize"
+msgstr "Пропорције прозора сразмерне видео-кадру"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK12"
+msgid "Snap to desktop edges"
+msgstr "Прилепи уз ивице екрана"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
+msgid "Store settings in .ini file"
+msgstr "Смести поставке у .ini датотеку"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
+msgid "Disable \"Open Disc\" menu"
+msgstr "Онемогући мени „Отвори диск“"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
+msgid "Process priority above normal"
+msgstr "Повишени приоритет процеса"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
+msgid "Enable cover-art support"
+msgstr "Подршка за омоте"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
+msgid "History"
+msgstr "Историја"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK1"
+msgid "Keep history of recently opened files"
+msgstr "Чувај историју отворених датотека"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
+msgid "Remember last playlist"
+msgstr "Запамти последњу плеј-листу"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
+msgid "Remember File position"
+msgstr "Запамти позицију датотеке"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
+msgid "Remember DVD position"
+msgstr "Запамти позицију DVD-а"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
+msgid "Remember last window position"
+msgstr "Запамти положај прозора"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
+msgid "Remember last window size"
+msgstr "Запамти величину прозора"
+
+msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
+msgid "Remember last Pan-n-Scan Zoom"
+msgstr "Запамти поставке зума"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "\"Open DVD/BD\" behavior"
+msgstr "Понашање команде „Отвори DVD/BD…“"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
+msgid "Prompt for location"
+msgstr "Питај за локацију"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
+msgid "Always open the default location:"
+msgstr "Увек отвори подразумевану локацију:"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Preferred language for DVD Navigator and the external OGM Splitter"
+msgstr "Жељени језик DVD навигатора и спољног OGM разделника"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
+msgid "Menu"
+msgstr "Мени"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
+msgid "Audio"
+msgstr "Аудио"
+
+msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
+msgid "Subtitles"
+msgstr "Титлови"
+
+msgctxt "IDD_PPAGEDVD_IDC_STATIC"
+msgid "Additional settings"
+msgstr "Додатне поставке"
+
+msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
+msgid "Allow closed captions in \"Line 21 Decoder\""
+msgstr "Помоћни титлови у Line 21 Decoder-у"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio"
+msgstr "Аудио"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume"
+msgstr "Јачина звука"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Min"
+msgstr "мин."
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Max"
+msgstr "макс."
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC_BALANCE"
+msgid "Balance"
+msgstr "Баланс"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "L"
+msgstr "Л"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "R"
+msgstr "Д"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Playback"
+msgstr "Репродукција"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO1"
+msgid "Play"
+msgstr "Репродукуј"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_RADIO2"
+msgid "Repeat forever"
+msgstr "Понављај"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC1"
+msgid "time(s)"
+msgstr "пута"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Понављање:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "After Playback"
+msgstr "Након репродукције"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default zoom"
+msgstr "Подразумевани зум"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
+msgid "Auto-zoom:"
+msgstr "Аутоматски зум:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
+msgid "Auto fit factor:"
+msgstr "Фактор уклапања:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Default track preference"
+msgstr "Подразумевани запис"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Subtitles:"
+msgstr "Титлови:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Audio:"
+msgstr "Аудио:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
+msgid "Allow overriding external splitter choice"
+msgstr "Потисни избор спољног разделника"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Open settings"
+msgstr "Поставке отварања датотека"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
+msgid "Use worker thread to construct the filter graph"
+msgstr "Користи радну нит за израду графикона филтера"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
+msgid "Report pins which fail to render"
+msgstr "Пријави неисправне пинове"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
+msgid "Auto-load audio files"
+msgstr "Аутоматски учитај аудио-датотеке"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Control"
+msgstr "Управљање"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Volume step:"
+msgstr "Корак јач. звука:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Speed step:"
+msgstr "Корак брзине:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
+msgid "Override placement"
+msgstr "Промени положај"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
+msgid "Horizontal:"
+msgstr "Водоравно:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC2"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC3"
+msgid "Vertical:"
+msgstr "Усправно:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC4"
+msgid "%"
+msgstr "%"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Delay step"
+msgstr "Корак кашњења"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "ms"
+msgstr "мс"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Texture settings (open the video again to see the changes)"
+msgstr "Текстура (потребно поновно покретање видео-записа)"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Sub pictures to buffer:"
+msgstr "Број подслика у баферу:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Maximum texture resolution:"
+msgstr "Максимална резолуција текстуре:"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
+msgid "Never animate the subtitles"
+msgstr "Никад не анимирај титлове"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
+msgid "Render at"
+msgstr "Рендеровање"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
+msgid "% of the animation"
+msgstr "% анимације"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
+msgid "Animate at"
+msgstr "Анимација"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
+msgid "% of the video frame rate"
+msgstr "% учесталости кадрова"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Allow dropping some subpictures if the queue is running late"
+msgstr "Дозволи испуштање подслика при кашњењу"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Renderer Layout"
+msgstr "Распоред рендерера"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
+msgid "Apply aspect ratio compensation for anamorphic videos"
+msgstr "Компензуј пропорције за анаморфне видео-записе"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "Warning"
+msgstr "Упозорење"
+
+msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Опција уклањања назубљености у режиму приказа преко целог екрана не доприноси квалитету титлова, већ само оптерећује процесор. Препоручујемо вам да је искључите у поставкама графичке картице."
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
+msgid "File extensions"
+msgstr "Наставци датотека"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
+msgid "Default"
+msgstr "Подразум."
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON_EXT_SET"
+msgid "Set"
+msgstr "Постави"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
+msgid "Association"
+msgstr "Повезаност"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
+msgid "Use the format-specific icons"
+msgstr "Користи иконе за одређене формате"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
+msgid "Run as &administrator"
+msgstr "Покрени као &администратор"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
+msgid "Set as &default program"
+msgstr "Постави као &подразум. програм"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
+msgstr "Руковалац Real-Time Streaming Protocol-ом (за rtsp:// адресе)"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
+msgid "RealMedia"
+msgstr "RealMedia"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO2"
+msgid "QuickTime"
+msgstr "QuickTime"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_RADIO3"
+msgid "DirectShow"
+msgstr "DirectShow"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
+msgid "Check file extension first"
+msgstr "Прво провери наставак датот."
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
+msgid "Explorer Context Menu"
+msgstr "Контекстуални мени у Explorer-у"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK6"
+msgid "Directory"
+msgstr "Фасцикла"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK7"
+msgid "File(s)"
+msgstr "Датотека"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_STATIC1"
+msgid "Autoplay"
+msgstr "Аутоматска репродукција"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
+msgid "Video"
+msgstr "Видео"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK2"
+msgid "Music"
+msgstr "Музика"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK4"
+msgid "DVD"
+msgstr "DVD"
+
+msgctxt "IDD_PPAGEFORMATS_IDC_CHECK3"
+msgid "Audio CD"
+msgstr "Аудио CD"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "Jump distances (small, medium, large in ms)"
+msgstr "Интервал преласка у милисекундама (мали, средњи и велики)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_BUTTON1"
+msgid "Default"
+msgstr "Подразум."
+
+msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
+msgid "Fast seek (on keyframe)"
+msgstr "Брзо премотавање (по кључним кадровима):"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
+msgid "Show chapter marks in seek bar"
+msgstr "Ознаке поглавља у траци за премотавање"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
+msgid "Display \"Now Playing\" information in Skype's mood message"
+msgstr "Прикажи име датотеке која се репродукује на статусу Skype-а"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
+msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
+msgstr "Спречи умањивање плејера на секундарном монитору у режиму целог екрана"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Проширене функције траке задатака"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Отвори претходну/следећу датотеку у фасцикли дугмадима „Унапред/уназад“ када је у плеј-листи само једна датотека"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
+msgid "Show time tooltip:"
+msgstr "Прикажи време:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
+msgid "OSD font:"
+msgstr "Фонт OSD-а:"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
+msgid "Enable Logitech LCD support (experimental)"
+msgstr "Подршка за Logitech LCD (експериментално)"
+
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
+msgid "Auto-hide the mouse pointer during playback in windowed mode"
+msgstr "Сакриј курсор миша при репродуковању у прозору"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON1"
+msgid "Add Filter..."
+msgstr "&Додај филтер…"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON2"
+msgid "Remove"
+msgstr "&Уклони"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO1"
+msgid "Prefer"
+msgstr "Преферирај"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO2"
+msgid "Block"
+msgstr "Блокирај"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_RADIO3"
+msgid "Set merit:"
+msgstr "Вредност:"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON3"
+msgid "Up"
+msgstr "&Горе"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON4"
+msgid "Down"
+msgstr "&Доле"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON5"
+msgid "Add Media Type..."
+msgstr "Додај &тип…"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON6"
+msgid "Add Sub Type..."
+msgstr "Додај &подтип…"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON7"
+msgid "Delete"
+msgstr "&Избриши"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS_IDC_BUTTON8"
+msgid "Reset List"
+msgstr "&Поништи списак"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Type:"
+msgstr "Тип:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Size:"
+msgstr "Величина:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Media length:"
+msgstr "Трајање:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Video size:"
+msgstr "Резолуција:"
+
+msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
+msgid "Created:"
+msgstr "Направљено:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Clip:"
+msgstr "Клип:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Author:"
+msgstr "Аутор:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Copyright:"
+msgstr "Ауторска права:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Rating:"
+msgstr "Оцена:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Location:"
+msgstr "Локација:"
+
+msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
+msgid "Description:"
+msgstr "Опис:"
+
+msgctxt "IDD_FAVADD_CAPTION"
+msgid "Add Favorite"
+msgstr "Додавање у омиљено"
+
+msgctxt "IDD_FAVADD_IDC_STATIC"
+msgid "Choose a name for your shortcut:"
+msgstr "Именујте пречицу:"
+
+msgctxt "IDD_FAVADD_IDC_CHECK1"
+msgid "Remember position"
+msgstr "&Запамти позицију"
+
+msgctxt "IDD_FAVADD_IDCANCEL"
+msgid "Cancel"
+msgstr "&Откажи"
+
+msgctxt "IDD_FAVADD_IDOK"
+msgid "OK"
+msgstr "&У реду"
+
+msgctxt "IDD_FAVADD_IDC_CHECK2"
+msgid "Relative drive"
+msgstr "&Важи за све погонске јединице"
+
+msgctxt "IDD_FAVORGANIZE_CAPTION"
+msgid "Organize Favorites"
+msgstr "Организовање омиљених"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON1"
+msgid "Rename"
+msgstr "&Преименуј"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON3"
+msgid "Move Up"
+msgstr "Помери на&горе"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON4"
+msgid "Move Down"
+msgstr "Помери на&доле"
+
+msgctxt "IDD_FAVORGANIZE_IDC_BUTTON2"
+msgid "Delete"
+msgstr "&Избриши"
+
+msgctxt "IDD_FAVORGANIZE_IDOK"
+msgid "OK"
+msgstr "&У реду"
+
+msgctxt "IDD_PNSPRESET_DLG_CAPTION"
+msgid "Pan&Scan Presets"
+msgstr "Шаблони размере и положаја"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
+msgid "New"
+msgstr "&Ново"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON3"
+msgid "Delete"
+msgstr "&Избриши"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON4"
+msgid "Up"
+msgstr "&Горе"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON5"
+msgid "Down"
+msgstr "&Доле"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON1"
+msgid "&Set"
+msgstr "&Постави"
+
+msgctxt "IDD_PNSPRESET_DLG_IDCANCEL"
+msgid "&Cancel"
+msgstr "&Откажи"
+
+msgctxt "IDD_PNSPRESET_DLG_IDOK"
+msgid "&Save"
+msgstr "&Сачувај"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Pos: 0.0 -> 1.0"
+msgstr "Позиција: 0.0 → 1.0"
+
+msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
+msgid "Zoom: 0.2 -> 3.0"
+msgstr "Размера: 0.2 → 3.0"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
+msgid "Global Media Keys"
+msgstr "Глобални тастери за медије"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
+msgid "Select All"
+msgstr "&Изабери све"
+
+msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON2"
+msgid "Reset Selected"
+msgstr "&Врати подразумевано"
+
+msgctxt "IDD_MEDIATYPES_DLG_CAPTION"
+msgid "Warning"
+msgstr "Упозорење"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
+msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
+msgstr "MPC-HC не може да обради неке од пинова у графикону. Вероватно немате потребне кодеке или филтере."
+
+msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
+msgid "The following pin(s) failed to find a connectable filter:"
+msgstr "За следеће пинове није пронађен одговарајући филтер:"
+
+msgctxt "IDD_MEDIATYPES_DLG_IDOK"
+msgid "Close"
+msgstr "&Затвори"
+
+msgctxt "IDD_SAVE_DLG_CAPTION"
+msgid "Saving..."
+msgstr "Чувам…"
+
+msgctxt "IDD_SAVE_DLG_IDCANCEL"
+msgid "Cancel"
+msgstr "&Откажи"
+
+msgctxt "IDD_SAVETEXTFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Кодирање:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC1"
+msgid "Encoding:"
+msgstr "Кодирање:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "Delay:"
+msgstr "Кашњење:"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_STATIC"
+msgid "ms"
+msgstr "мс"
+
+msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
+msgid "Save custom style"
+msgstr "Сачувај прилагођени стил"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "Квалитет JPEG-а:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Thumbnails:"
+msgstr "Сличице:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "rows"
+msgstr "редова"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "columns"
+msgstr "колона"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "Image width:"
+msgstr "Ширина слике:"
+
+msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
+msgid "pixels"
+msgstr "пиксела"
+
+msgctxt "IDD_ADDREGFILTER_CAPTION"
+msgid "Select Filter"
+msgstr "Избор филтера"
+
+msgctxt "IDD_ADDREGFILTER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "&Потражи…"
+
+msgctxt "IDD_ADDREGFILTER_IDOK"
+msgid "OK"
+msgstr "&У реду"
+
+msgctxt "IDD_ADDREGFILTER_IDCANCEL"
+msgid "Cancel"
+msgstr "&Откажи"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Font"
+msgstr "Фонт"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_BUTTON1"
+msgid "Font"
+msgstr "Фонт"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Spacing"
+msgstr "Проред"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Angle (z,°)"
+msgstr "Угао (z,°)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (x,%)"
+msgstr "Размера (x,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Scale (y,%)"
+msgstr "Размера (y,%)"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Border Style"
+msgstr "Стил ивице"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
+msgid "Outline"
+msgstr "Контура"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
+msgid "Opaque box"
+msgstr "Непровидни оквир"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Width"
+msgstr "Ширина"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Shadow"
+msgstr "Сенка"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Screen Alignment && Margins"
+msgstr "Поравнање и маргине"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Left"
+msgstr "Лева"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Right"
+msgstr "Десна"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Top"
+msgstr "Горња"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Bottom"
+msgstr "Доња"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
+msgid "Position subtitles relative to the video frame"
+msgstr "Смести титлове у односу на видео-кадар"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Colors && Transparency"
+msgstr "Боје и провидност"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "0%"
+msgstr "0%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Primary"
+msgstr "Примарна"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Secondary"
+msgstr "Секундарна"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
+msgid "Outline"
+msgstr "Контура"
+
+msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK1"
+msgid "Link alpha channels"
+msgstr "Повежи алфа канале"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
+msgstr "Ако желите да користите самосталну верзију ових филтера или другу алтернативу, овде их онемогућите."
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Source Filters"
+msgstr "Филтери за изворе"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Transform Filters"
+msgstr "Филтери за трансформацију"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
+msgid "Internal LAV Filters settings"
+msgstr "Унутрашње поставке LAV Filters-а"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_SPLITTER_CONF"
+msgid "Splitter"
+msgstr "Разделник…"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_VIDEO_DEC_CONF"
+msgid "Video decoder"
+msgstr "Видео-декодер…"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_AUDIO_DEC_CONF"
+msgid "Audio decoder"
+msgstr "Аудио-декодер…"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
+msgid "Internal:"
+msgstr "Унутрашњи:"
+
+msgctxt "IDD_PPAGELOGO_IDC_RADIO2"
+msgid "External:"
+msgstr "Спољашњи:"
+
+msgctxt "IDD_PPAGELOGO_IDC_BUTTON2"
+msgid "Browse..."
+msgstr "&Потражи…"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DirectShow Video"
+msgstr "DirectShow видео"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "RealMedia Video"
+msgstr "RealMedia видео"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "QuickTime Video"
+msgstr "QuickTime видео"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Audio Renderer"
+msgstr "Аудио-рендерер"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Поставке рендерера VMR-9 (renderless) и EVR (CP)"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Surface:"
+msgstr "Површина:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Resizer:"
+msgstr "Интерполација:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
+msgid "Select D3D9 Render Device"
+msgstr "Изабери D3D9 уређај за рендеровање"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
+msgid "Reinitialize when changing display"
+msgstr "Поново покрени при промени екрана"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "D3D Fullscreen"
+msgstr "D3D режим целог екрана"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Alternative VSync"
+msgstr "Алтернативна верт. синхр."
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
+msgid "VMR-9 Mixer Mode"
+msgstr "Режим VMR-9 Mixer"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9YUVMIXER"
+msgid "YUV Mixing"
+msgstr "YUV Mixing"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_EVR_BUFFERS_TXT"
+msgid "EVR Buffers:"
+msgstr "EVR бафера:"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "DXVA"
+msgstr "DXVA"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitles"
+msgstr "Титлови"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Screenshot"
+msgstr "Снимак екрана"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Shaders"
+msgstr "Модули за сенчење"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Rotation"
+msgstr "Ротација"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
+msgid "Subtitle Renderer"
+msgstr "Рендерер титлова"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Кеширај компилиране модуле за сенчење"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
+msgid "Listen on port:"
+msgstr "Порт за слушање:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
+msgid "Launch in web browser..."
+msgstr "Покрени у веб-прегледачу…"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
+msgid "Enable compression"
+msgstr "Компримовање"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
+msgid "Allow access from localhost only"
+msgstr "Дозволи приступ само са локалног хоста"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Омогући преглед"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
+msgid "Print debug information"
+msgstr "Одштампај извод"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
+msgid "Serve pages from:"
+msgstr "Услужи странице из:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
+msgid "Browse..."
+msgstr "&Потражи…"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
+msgid "Deploy..."
+msgstr "Распореди…"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "Default page:"
+msgstr "Подразумевана страница:"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
+msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
+msgstr "CGI руковаоци (.ext1=path1;.ext2=path2;…):"
+
+msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
+msgid "Download subtitles"
+msgstr "Преузми титл"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
+msgid "Replace currently loaded subtitles"
+msgstr "Замени учитане титлове"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Преузми"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Освежи"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Прекини"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Опције"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Отпремање титлова"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Отпреми"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Прекини"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Опције"
+
+msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
+msgid "Save As..."
+msgstr "Сачувај као…"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Color controls (for VMR-9, EVR and madVR)"
+msgstr "Управљање бојом (за VMR-9, EVR и madVR)"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Brightness"
+msgstr "Осветљеност"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Contrast"
+msgstr "Контраст"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Hue"
+msgstr "Нијанса"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Saturation"
+msgstr "Засићеност"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET"
+msgid "Reset"
+msgstr "Подразум."
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Update check"
+msgstr "Ажурирање"
+
+msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
+msgid "Enable automatic update check"
+msgstr "Аутоматска потражња ажурирања"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
+msgid "Check every:"
+msgstr "Проверавај сваких:"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
+msgid "day(s)"
+msgstr "дана"
+
+msgctxt "IDD_PPAGEMISC_IDC_STATIC"
+msgid "Settings management"
+msgstr "Управљање поставкама"
+
+msgctxt "IDD_PPAGEMISC_IDC_RESET_SETTINGS"
+msgid "Reset"
+msgstr "Подразум."
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_SETTINGS"
+msgid "Export"
+msgstr "Извези…"
+
+msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
+msgid "Export keys"
+msgstr "Извези тастере…"
+
+msgctxt "IDD_TUNER_SCAN_CAPTION"
+msgid "Tuner scan"
+msgstr "Скенирање тјунера"
+
+msgctxt "IDD_TUNER_SCAN_ID_START"
+msgid "Start"
+msgstr "&Покрени"
+
+msgctxt "IDD_TUNER_SCAN_IDCANCEL"
+msgid "Cancel"
+msgstr "&Откажи"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. Start"
+msgstr "Почетна учесталост"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Bandwidth"
+msgstr "Пропусни опсег"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Freq. End"
+msgstr "Завршна учесталост"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
+msgid "Ignore encrypted channels"
+msgstr "Занемари шифроване канале"
+
+msgctxt "IDD_TUNER_SCAN_ID_SAVE"
+msgid "Save"
+msgstr "&Сачувај"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "S"
+msgstr "S"
+
+msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
+msgid "Q"
+msgstr "Q"
+
+msgctxt "IDD_TUNER_SCAN_IDC_CHECK_OFFSET"
+msgid "Use an offset"
+msgstr "Користи помак"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Default Device"
+msgstr "Подразумевани уређај"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO1"
+msgid "Analog"
+msgstr "Аналогни"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_RADIO2"
+msgid "Digital"
+msgstr "Дигитални"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Analog settings"
+msgstr "Поставке аналогног уређаја"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC1"
+msgid "Video"
+msgstr "Видео"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC2"
+msgid "Audio"
+msgstr "Аудио"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC3"
+msgid "Country"
+msgstr "Земља"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC"
+msgid "Digital settings (BDA)"
+msgstr "Поставке дигиталног уређаја (BDA)"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC4"
+msgid "Network Provider"
+msgstr "Добављач мреже"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC5"
+msgid "Tuner"
+msgstr "Тјунер"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_STATIC6"
+msgid "Receiver"
+msgstr "Пријемник"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST10"
+msgid "Channel switching approach:"
+msgstr "Пребацивање канала:"
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
+msgid "Rebuild filter graph"
+msgstr "Изради граф. филт."
+
+msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
+msgid "Stop filter graph"
+msgstr "Заустави граф. филт."
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
+msgid "Sync video to display"
+msgstr "Синхронизуј видео са екраном"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC1"
+msgid "Frequency adjustment:"
+msgstr "Учесталост:"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCDISPLAY"
+msgid "Sync display to video"
+msgstr "Синхронизуј екран са видеом"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC2"
+msgid "Frequency adjustment:"
+msgstr "Учесталост:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC3"
+msgid "lines"
+msgstr "редова"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
+msgid "columns"
+msgstr "колона"
+
+msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
+msgid "Present at nearest VSync"
+msgstr "Прикажи са најближом верт. синхр."
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
+msgid "Target sync offset:"
+msgstr "Циљни помак верт. синхр.:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC6"
+msgid "ms"
+msgstr "мс"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC7"
+msgid "Control limits:"
+msgstr "Границе управљања:"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC8"
+msgid "+/-"
+msgstr "+/-"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC9"
+msgid "ms"
+msgstr "мс"
+
+msgctxt "IDD_PPAGESYNC_IDC_STATIC10"
+msgid "Changes take effect after the playback has been closed and restarted."
+msgstr "Измене ступају на снагу након што поново покренете репродукцију."
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
+msgid "Launch files in fullscreen"
+msgstr "Покрећи датотеке преко целог екрана"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
+msgid "Hide controls in fullscreen"
+msgstr "Сакриј контроле у режиму целог екрана"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC1"
+msgid "ms"
+msgstr "мс"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
+msgid "Hide docked panels"
+msgstr "Сакриј усидрене панеле"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
+msgid "Exit fullscreen at the end of playback"
+msgstr "Изађи из режима целог екрана на крају репродукције"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Fullscreen monitor"
+msgstr "Монитор за режим целог екрана"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK2"
+msgid "Use autochange fullscreen monitor mode"
+msgstr "Аутоматска промена монитора у режиму целог екрана"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON1"
+msgid "Add"
+msgstr "&Додај"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON2"
+msgid "Del"
+msgstr "&Избриши"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON3"
+msgid "Up"
+msgstr "&Горе"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_BUTTON4"
+msgid "Down"
+msgstr "&Доле"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK3"
+msgid "Apply default monitor mode on fullscreen exit"
+msgstr "Подразумевани режим монитора при изласку из целог екрана"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_RESTORERESCHECK"
+msgid "Restore resolution on program exit"
+msgstr "Врати резолуцију при изласку из програма"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
+msgid "Delay"
+msgstr "Кашњење"
+
+msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC2"
+msgid "s"
+msgstr "с"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_INFO"
+msgid "Info"
+msgstr "Информације"
+
+msgctxt "IDD_NAVIGATION_DLG_IDC_NAVIGATION_SCAN"
+msgid "Scan"
+msgstr "Скенирај"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK1"
+msgid "Prefer forced and/or default subtitles tracks"
+msgstr "Приоритет имају унутрашњи титлови уместо спољних"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
+msgid "Prefer external subtitles over embedded subtitles"
+msgstr "Приоритет имају спољни титлови уместо унутрашњих"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
+msgid "Ignore embedded subtitles"
+msgstr "Занемари унутрашње титлове"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Autoload paths"
+msgstr "Путања за спољне титлове"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON1"
+msgid "Reset"
+msgstr "Подразум."
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Online search, download and upload subtitles"
+msgstr "Интернет претрага, преузимање и отпремање титлова"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Аутоматски тражи и преузимај титлове ако нису пронађени локално"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Приоритет имају титлови за особе са оштећеним слухом (ако их извор наводи)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Занемари датотеке које садрже следеће речи:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
+msgid "Languages in order of preference:"
+msgstr "Језици по жељеном редоследу:"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Аутоматски отпреми активне титлове по завршетку репродукције"
+
+msgctxt "IDD_UPDATE_DIALOG_CAPTION"
+msgid "Update Checker"
+msgstr "Потражња ажурирања"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_DL_BUTTON"
+msgid "&Download now"
+msgstr "&Преузми"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_LATER_BUTTON"
+msgid "Remind me &later"
+msgstr "Подсети ме &касније"
+
+msgctxt "IDD_UPDATE_DIALOG_IDC_UPDATE_IGNORE_BUTTON"
+msgid "&Ignore this update"
+msgstr "&Занемари ово ажурирање"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shaders contain special effects which can be added to the video rendering process."
+msgstr "Модули за сенчење садрже специјалне ефекте које можете додати за време рендеровања видео-записа."
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
+msgid "Add shader file"
+msgstr "&Додај датотеку модула…"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
+msgid "Remove"
+msgstr "&Уклони"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
+msgid "Add to pre-resize"
+msgstr "П&ре промене величине"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
+msgid "Add to post-resize"
+msgstr "Пос&ле промене величине"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Shader presets"
+msgstr "Унапред дефинисани модули"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
+msgid "Load"
+msgstr "&Учитај"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON4"
+msgid "Save"
+msgstr "&Сачувај"
+
+msgctxt "IDD_PPAGESHADERS_IDC_BUTTON5"
+msgid "Delete"
+msgstr "&Избриши"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active pre-resize shaders"
+msgstr "Активни модули (пре промене величине):"
+
+msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
+msgid "Active post-resize shaders"
+msgstr "Активни модули (после промене величине):"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
+msgid "Debug Shaders"
+msgstr "Отклањање грешака модула за сенчење"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
+msgid "Debug Information"
+msgstr "Извод"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO1"
+msgid "PS 2.0"
+msgstr "PS 2.0"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO2"
+msgid "PS 2.0b"
+msgstr "PS 2.0b"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO3"
+msgid "PS 2.0a"
+msgstr "PS 2.0a"
+
+msgctxt "IDD_DEBUGSHADERS_DLG_IDC_RADIO4"
+msgid "PS 3.0"
+msgstr "PS 3.0"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
+msgid "Advanced Settings, do not edit unless you know what you are doing."
+msgstr "Напредне поставке; не мењајте их осим ако знате шта радите."
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
+msgid "True"
+msgstr "Тачно"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
+msgid "False"
+msgstr "Нетачно"
+
+msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
+msgid "Default"
+msgstr "Подразум."
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Уређај"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Искључиви режим"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Битстриминг"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Опције"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Стапање стерео-канала (за слушалице)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Праг:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Ниво:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Напомена"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "У циљу смањења изобличења, препоручена јачина звука при репродуковању гласног компримираног материјала је око 85%."
+
+msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
+msgid "JPEG quality:"
+msgstr "Квалитет JPEG-а:"
+
+msgctxt "IDD_CMD_LINE_HELP_CAPTION"
+msgid "Command line help"
+msgstr "Помоћ око командне линије"
+
+msgctxt "IDD_CMD_LINE_HELP_IDOK"
+msgid "OK"
+msgstr "&У реду"
+
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Пријава грешака"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Нажалост, MPC-HC је отказао."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Пошаљите нам извештај о грешци како бисмо пронашли и уклонили проблем."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Необавезне информације"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Е-адреса:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Е-адреса није обавезна, али се може користити ради комуницирања са програмерима."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Опис проблема (само на енглеском):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Поново покрени MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Изађи из MPC-HC-а"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sr.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sr.menus.po
new file mode 100644
index 000000000..f10bdfad6
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sr.menus.po
@@ -0,0 +1,713 @@
+# MPC-HC - Strings extracted from menus
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Rancher, 2014
+# Rancher, 2016
+# Goran Džaferi <the.vbm@gmail.com>, 2014
+# Zlatan Vasović <inactive+ZDroid@transifex.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-06-16 15:35+0000\n"
+"Last-Translator: Rancher\n"
+"Language-Team: Serbian (http://www.transifex.com/mpc-hc/mpc-hc/language/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "POPUP"
+msgid "&File"
+msgstr "&Датотека"
+
+msgctxt "ID_FILE_OPENQUICK"
+msgid "&Quick Open File..."
+msgstr "&Брзо отвори датотеку…"
+
+msgctxt "ID_FILE_OPENMEDIA"
+msgid "&Open File..."
+msgstr "&Отвори датотеку…"
+
+msgctxt "ID_FILE_OPENDVDBD"
+msgid "Open &DVD/BD..."
+msgstr "Отвори &DVD/BD…"
+
+msgctxt "ID_FILE_OPENDEVICE"
+msgid "Open De&vice..."
+msgstr "Отвори &уређај…"
+
+msgctxt "ID_FILE_OPENDIRECTORY"
+msgid "Open Dir&ectory..."
+msgstr "Отвори &фасциклу…"
+
+msgctxt "ID_FILE_OPENDISC"
+msgid "O&pen Disc"
+msgstr "Отвори &диск"
+
+msgctxt "ID_RECENT_FILES"
+msgid "Recent &Files"
+msgstr "Скора&шње датотеке"
+
+msgctxt "ID_FILE_CLOSE_AND_RESTORE"
+msgid "&Close"
+msgstr "&Затвори"
+
+msgctxt "ID_FILE_SAVE_COPY"
+msgid "&Save a Copy..."
+msgstr "Сачувај &копију…"
+
+msgctxt "ID_FILE_SAVE_IMAGE"
+msgid "Save &Image..."
+msgstr "Сачувај &слику…"
+
+msgctxt "ID_FILE_SAVE_THUMBNAILS"
+msgid "Save &Thumbnails..."
+msgstr "Сачувај с&личице…"
+
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "Титлови"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Учитај…"
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "&Сачувај…"
+
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Преузми…"
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Отпреми…"
+
+msgctxt "ID_FILE_PROPERTIES"
+msgid "P&roperties"
+msgstr "С&војства"
+
+msgctxt "ID_FILE_EXIT"
+msgid "E&xit"
+msgstr "&Изађи"
+
+msgctxt "POPUP"
+msgid "&View"
+msgstr "&Приказ"
+
+msgctxt "ID_VIEW_CAPTIONMENU"
+msgid "Caption&&Menu"
+msgstr "&Наслов и мени"
+
+msgctxt "ID_VIEW_SEEKER"
+msgid "See&k Bar"
+msgstr "Трака за пр&емотавање"
+
+msgctxt "ID_VIEW_CONTROLS"
+msgid "&Controls"
+msgstr "&Контроле"
+
+msgctxt "ID_VIEW_INFORMATION"
+msgid "&Information"
+msgstr "&Информације"
+
+msgctxt "ID_VIEW_STATISTICS"
+msgid "&Statistics"
+msgstr "&Статистика"
+
+msgctxt "ID_VIEW_STATUS"
+msgid "St&atus"
+msgstr "С&татус"
+
+msgctxt "ID_VIEW_SUBRESYNC"
+msgid "Su&bresync"
+msgstr "Син&хронизација титлова"
+
+msgctxt "ID_VIEW_PLAYLIST"
+msgid "Pla&ylist"
+msgstr "&Плеј-листа"
+
+msgctxt "ID_VIEW_CAPTURE"
+msgid "Captu&re"
+msgstr "Снима&ње"
+
+msgctxt "ID_VIEW_NAVIGATION"
+msgid "Na&vigation"
+msgstr "На&вигација"
+
+msgctxt "ID_VIEW_DEBUGSHADERS"
+msgid "&Debug Shaders"
+msgstr "&Отклањање грешака при сенчењу"
+
+msgctxt "POPUP"
+msgid "&Presets..."
+msgstr "Про&фили"
+
+msgctxt "ID_VIEW_PRESETS_MINIMAL"
+msgid "&Minimal"
+msgstr "&Минимално"
+
+msgctxt "ID_VIEW_PRESETS_COMPACT"
+msgid "&Compact"
+msgstr "&Компактно"
+
+msgctxt "ID_VIEW_PRESETS_NORMAL"
+msgid "&Normal"
+msgstr "&Нормално"
+
+msgctxt "ID_VIEW_FULLSCREEN"
+msgid "F&ull Screen"
+msgstr "&Цео екран"
+
+msgctxt "POPUP"
+msgid "&Zoom"
+msgstr "&Зумирање"
+
+msgctxt "ID_VIEW_ZOOM_50"
+msgid "&50%"
+msgstr "&50%"
+
+msgctxt "ID_VIEW_ZOOM_100"
+msgid "&100%"
+msgstr "&100%"
+
+msgctxt "ID_VIEW_ZOOM_200"
+msgid "&200%"
+msgstr "&200%"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT"
+msgid "Auto &Fit"
+msgstr "&Уклопи"
+
+msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (&Larger Only)"
+msgstr "Уклопи (само &веће)"
+
+msgctxt "POPUP"
+msgid "R&enderer Settings"
+msgstr "Поставке &рендерера"
+
+msgctxt "ID_VIEW_TEARING_TEST"
+msgid "&Tearing Test"
+msgstr "&Тест на цепање слике"
+
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Статистика"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "&Тренутно време"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "&Име датотеке"
+
+msgctxt "POPUP"
+msgid "&Output Range"
+msgstr "&Излазни опсег"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
+msgid "&0 - 255"
+msgstr "&0–255"
+
+msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
+msgid "&16 - 235"
+msgstr "&16–235"
+
+msgctxt "POPUP"
+msgid "&Presentation"
+msgstr "&Презентација"
+
+msgctxt "ID_VIEW_D3DFULLSCREEN"
+msgid "D3D Fullscreen &Mode"
+msgstr "&D3D режим целог екрана"
+
+msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
+msgid "D3D Fullscreen &GUI Support"
+msgstr "D&3D режим целог екрана уз GUI"
+
+msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
+msgid "10-bit &RGB Output"
+msgstr "10-битни &RGB излаз"
+
+msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
+msgid "Force 10-bit RGB &Input"
+msgstr "Наметни 10-битни R&GB улаз"
+
+msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
+msgid "&Full Floating Point Processing"
+msgstr "&Обрада броја с покретним зарезом са потпуном прецизношћу"
+
+msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
+msgid "&Half Floating Point Processing"
+msgstr "О&брада броја с покретним зарезом са половичном прецизношћу"
+
+msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
+msgid "Disable desktop composition (&Aero)"
+msgstr "О&немогући састављање радне површине (Aero)"
+
+msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time &Correction"
+msgstr "Исправљање &времена кадрова"
+
+msgctxt "POPUP"
+msgid "&Color Management"
+msgstr "Управљање &бојама"
+
+msgctxt "ID_VIEW_CM_ENABLE"
+msgid "&Enable"
+msgstr "&Омогући"
+
+msgctxt "POPUP"
+msgid "&Input Type"
+msgstr "&Тип улаза"
+
+msgctxt "ID_VIEW_CM_INPUT_AUTO"
+msgid "&Auto-Detect"
+msgstr "&Аутоматски"
+
+msgctxt "ID_VIEW_CM_INPUT_HDTV"
+msgid "&HDTV"
+msgstr "&HDTV"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
+msgid "SDTV &NTSC"
+msgstr "SDTV &NTSC"
+
+msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
+msgid "SDTV &PAL"
+msgstr "SDTV &PAL"
+
+msgctxt "POPUP"
+msgid "Ambient &Light"
+msgstr "О&колна осветљеност"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
+msgid "&Bright (2.2 Gamma)"
+msgstr "&Светло (гама 2.2)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
+msgid "&Dim (2.35 Gamma)"
+msgstr "&Затамњено (гама 2.35)"
+
+msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
+msgid "D&ark (2.4 Gamma)"
+msgstr "&Тамно (гама 2.4)"
+
+msgctxt "POPUP"
+msgid "&Rendering Intent"
+msgstr "&Циљ рендеровања"
+
+msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
+msgid "&Perceptual"
+msgstr "&Перцепција"
+
+msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
+msgid "&Relative Colorimetric"
+msgstr "&Релативна колориметрија"
+
+msgctxt "ID_VIEW_CM_INTENT_SATURATION"
+msgid "&Saturation"
+msgstr "&Засићеност"
+
+msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
+msgid "&Absolute Colorimetric"
+msgstr "&Апсолутна колориметрија"
+
+msgctxt "POPUP"
+msgid "&VSync"
+msgstr "&Вертикална синхронизација"
+
+msgctxt "ID_VIEW_VSYNC"
+msgid "&VSync"
+msgstr "&Вертикална синхронизација"
+
+msgctxt "ID_VIEW_VSYNCACCURATE"
+msgid "&Accurate VSync"
+msgstr "&Прецизна вертикална синхронизација"
+
+msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
+msgid "A&lternative VSync"
+msgstr "&Алтернативна вертикална синхронизација"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
+msgid "&Decrease VSync Offset"
+msgstr "&Смањи помак синхронизације"
+
+msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
+msgid "&Increase VSync Offset"
+msgstr "П&овећај помак синхронизације"
+
+msgctxt "POPUP"
+msgid "&GPU Control"
+msgstr "Управљање &GPU-ом"
+
+msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
+msgid "Flush GPU &before VSync"
+msgstr "Испразни GPU &пре верт. синхр."
+
+msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
+msgid "Flush GPU &after Present"
+msgstr "Испразни GPU &након верт. синхр."
+
+msgctxt "ID_VIEW_FLUSHGPU_WAIT"
+msgid "&Wait for flushes"
+msgstr "&Чекај на пражњење"
+
+msgctxt "POPUP"
+msgid "R&eset"
+msgstr "&Успостављање почетних вредности"
+
+msgctxt "ID_VIEW_RESET_DEFAULT"
+msgid "Reset to &default renderer settings"
+msgstr "Врати &подразумеване поставке рендерера"
+
+msgctxt "ID_VIEW_RESET_OPTIMAL"
+msgid "Reset to &optimal renderer settings"
+msgstr "Врати &оптималне поставке рендерера"
+
+msgctxt "POPUP"
+msgid "Video &Frame"
+msgstr "&Видео-кадар"
+
+msgctxt "ID_VIEW_VF_HALF"
+msgid "&Half Size"
+msgstr "&Половична величина"
+
+msgctxt "ID_VIEW_VF_NORMAL"
+msgid "&Normal Size"
+msgstr "&Нормална величина"
+
+msgctxt "ID_VIEW_VF_DOUBLE"
+msgid "&Double Size"
+msgstr "&Двострука величина"
+
+msgctxt "ID_VIEW_VF_STRETCH"
+msgid "&Stretch To Window"
+msgstr "&Растегни до величине прозора"
+
+msgctxt "ID_VIEW_VF_FROMINSIDE"
+msgid "Touch Window From &Inside"
+msgstr "Додирни прозор &изнутра"
+
+msgctxt "ID_VIEW_VF_ZOOM1"
+msgid "Zoom &1"
+msgstr "Зум &1"
+
+msgctxt "ID_VIEW_VF_ZOOM2"
+msgid "Zoom &2"
+msgstr "Зум &2"
+
+msgctxt "ID_VIEW_VF_FROMOUTSIDE"
+msgid "Touch Window From &Outside"
+msgstr "Додирни прозор &споља"
+
+msgctxt "POPUP"
+msgid "&Aspect Ratio"
+msgstr "П&ропорције"
+
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Подразумевано (DAR)"
+
+msgctxt "ID_ASPECTRATIO_4_3"
+msgid "&4:3"
+msgstr "&4:3"
+
+msgctxt "ID_ASPECTRATIO_5_4"
+msgid "&5:4"
+msgstr "&5:4"
+
+msgctxt "ID_ASPECTRATIO_16_9"
+msgid "&16:9"
+msgstr "&16:9"
+
+msgctxt "ID_ASPECTRATIO_235_100"
+msgid "&235:100"
+msgstr "&235:100"
+
+msgctxt "ID_ASPECTRATIO_185_100"
+msgid "1&85:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Претпостави да су &пиксели у облику квадрата (SAR)"
+
+msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
+msgid "&Correct Monitor/Desktop AR Diff"
+msgstr "&Исправи разлику размере слике на монитору/радној површини"
+
+msgctxt "POPUP"
+msgid "Pa&n&&Scan"
+msgstr "Размера и положај &кадра"
+
+msgctxt "ID_VIEW_INCSIZE"
+msgid "&Increase Size"
+msgstr "&Повећај размеру"
+
+msgctxt "ID_VIEW_DECSIZE"
+msgid "&Decrease Size"
+msgstr "&Смањи размеру"
+
+msgctxt "ID_VIEW_INCWIDTH"
+msgid "I&ncrease Width"
+msgstr "П&овећај ширину"
+
+msgctxt "ID_VIEW_DECWIDTH"
+msgid "D&ecrease Width"
+msgstr "С&мањи ширину"
+
+msgctxt "ID_VIEW_INCHEIGHT"
+msgid "In&crease Height"
+msgstr "По&већај висину"
+
+msgctxt "ID_VIEW_DECHEIGHT"
+msgid "Decre&ase Height"
+msgstr "См&ањи висину"
+
+msgctxt "ID_PANSCAN_MOVERIGHT"
+msgid "Move &Right"
+msgstr "Помери у&десно"
+
+msgctxt "ID_PANSCAN_MOVELEFT"
+msgid "Move &Left"
+msgstr "Помери у&лево"
+
+msgctxt "ID_PANSCAN_MOVEUP"
+msgid "Move &Up"
+msgstr "Помери на&горе"
+
+msgctxt "ID_PANSCAN_MOVEDOWN"
+msgid "Move &Down"
+msgstr "Помери на&доле"
+
+msgctxt "ID_PANSCAN_CENTER"
+msgid "Cen&ter"
+msgstr "&Центрирај"
+
+msgctxt "ID_VIEW_RESET"
+msgid "Re&set"
+msgstr "&Успостави почетне вредности"
+
+msgctxt "POPUP"
+msgid "On &Top"
+msgstr "На вр&ху"
+
+msgctxt "ID_ONTOP_DEFAULT"
+msgid "&Default"
+msgstr "&Подразумевано"
+
+msgctxt "ID_ONTOP_ALWAYS"
+msgid "&Always"
+msgstr "&Увек"
+
+msgctxt "ID_ONTOP_WHILEPLAYING"
+msgid "While &Playing"
+msgstr "Приликом &репродукције"
+
+msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
+msgid "While Playing &Video"
+msgstr "Приликом репродукције &видео-записа"
+
+msgctxt "ID_VIEW_OPTIONS"
+msgid "&Options..."
+msgstr "&Опције…"
+
+msgctxt "POPUP"
+msgid "&Play"
+msgstr "&Репродукција"
+
+msgctxt "ID_PLAY_PLAYPAUSE"
+msgid "&Play/Pause"
+msgstr "&Репродукуј/паузирај"
+
+msgctxt "ID_PLAY_STOP"
+msgid "&Stop"
+msgstr "З&аустави"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Fra&me Step"
+msgstr "По &кадровима"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Понављање"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "&у недоглед"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&датотеке"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&плеј-листе"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "&Decrease Rate"
+msgstr "У&спори"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "&Increase Rate"
+msgstr "У&брзај"
+
+msgctxt "ID_PLAY_RESETRATE"
+msgid "R&eset Rate"
+msgstr "Пр&вобитна брзина"
+
+msgctxt "ID_FILTERS"
+msgid "&Filters"
+msgstr "&Филтери"
+
+msgctxt "ID_SHADERS"
+msgid "S&haders"
+msgstr "Модули за &сенчење"
+
+msgctxt "ID_AUDIOS"
+msgid "&Audio Track"
+msgstr "&Аудио-запис"
+
+msgctxt "ID_SUBTITLES"
+msgid "Su&btitle Track"
+msgstr "&Титл"
+
+msgctxt "ID_VIDEO_STREAMS"
+msgid "Vide&o Track"
+msgstr "&Видео-запис"
+
+msgctxt "POPUP"
+msgid "&Volume"
+msgstr "&Јачина звука"
+
+msgctxt "ID_VOLUME_UP"
+msgid "&Up"
+msgstr "&Појачај"
+
+msgctxt "ID_VOLUME_DOWN"
+msgid "&Down"
+msgstr "&Смањи"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "&Mute"
+msgstr "&Искључи"
+
+msgctxt "POPUP"
+msgid "Af&ter Playback"
+msgstr "&Након репродукције"
+
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "&Не ради ништа"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Пусти &следећу датотеку"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Искључи &монитор"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
+msgid "&Exit"
+msgstr "&Изађи из програма"
+
+msgctxt "ID_AFTERPLAYBACK_STANDBY"
+msgid "&Stand By"
+msgstr "Пређи у стање &приправности"
+
+msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
+msgid "&Hibernate"
+msgstr "Пређи у &хибернацију"
+
+msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
+msgid "Shut&down"
+msgstr "Искључи &рачунар"
+
+msgctxt "ID_AFTERPLAYBACK_LOGOFF"
+msgid "Log &Off"
+msgstr "&Одјави корисника"
+
+msgctxt "ID_AFTERPLAYBACK_LOCK"
+msgid "&Lock"
+msgstr "&Закључај рачунар"
+
+msgctxt "POPUP"
+msgid "&Navigate"
+msgstr "&Навигација"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "&Previous"
+msgstr "&Претходно"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "&Next"
+msgstr "&Следеће"
+
+msgctxt "ID_NAVIGATE_GOTO"
+msgid "&Go To..."
+msgstr "Пр&еђи на…"
+
+msgctxt "ID_NAVIGATE_TITLEMENU"
+msgid "&Title Menu"
+msgstr "Мени &наслова"
+
+msgctxt "ID_NAVIGATE_ROOTMENU"
+msgid "&Root Menu"
+msgstr "Основни &мени"
+
+msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
+msgid "&Subtitle Menu"
+msgstr "Мени &титлова"
+
+msgctxt "ID_NAVIGATE_AUDIOMENU"
+msgid "&Audio Menu"
+msgstr "Мени &звука"
+
+msgctxt "ID_NAVIGATE_ANGLEMENU"
+msgid "An&gle Menu"
+msgstr "Мени &углова"
+
+msgctxt "ID_NAVIGATE_CHAPTERMENU"
+msgid "&Chapter Menu"
+msgstr "Мени п&оглавља"
+
+msgctxt "ID_FAVORITES"
+msgid "F&avorites"
+msgstr "&Омиљено"
+
+msgctxt "POPUP"
+msgid "&Help"
+msgstr "&Помоћ"
+
+msgctxt "ID_HELP_HOMEPAGE"
+msgid "&Home Page"
+msgstr "&Почетна страница"
+
+msgctxt "ID_HELP_CHECKFORUPDATE"
+msgid "Check for &updates"
+msgstr "Потражи &ажурирања"
+
+msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
+msgid "&Command Line Switches"
+msgstr "Прекидачи &командне линије"
+
+msgctxt "ID_HELP_TOOLBARIMAGES"
+msgid "Download &Toolbar Images"
+msgstr "&Слике траке са алаткама"
+
+msgctxt "ID_HELP_DONATE"
+msgid "&Donate"
+msgstr "&Донирај"
+
+msgctxt "ID_HELP_ABOUT"
+msgid "&About..."
+msgstr "&О програму…"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sr.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sr.strings.po
new file mode 100644
index 000000000..ef9fea7a8
--- /dev/null
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sr.strings.po
@@ -0,0 +1,3973 @@
+# MPC-HC - Strings extracted from string tables
+# Copyright (C) 2002 - 2017 see Authors.txt
+# This file is distributed under the same license as the MPC-HC package.
+# Translators:
+# Rancher, 2014-2015
+# Rancher, 2016
+# Goran Džaferi <the.vbm@gmail.com>, 2014
+# Goran Džaferi <the.vbm@gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: MPC-HC\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Serbian (http://www.transifex.com/mpc-hc/mpc-hc/language/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "IDS_INFOBAR_LOCATION"
+msgid "Location"
+msgstr "Локација"
+
+msgctxt "IDS_INFOBAR_VIDEO"
+msgid "Video"
+msgstr "Видео"
+
+msgctxt "IDS_INFOBAR_AUDIO"
+msgid "Audio"
+msgstr "Аудио"
+
+msgctxt "IDS_INFOBAR_SUBTITLES"
+msgid "Subtitles"
+msgstr "Титлови"
+
+msgctxt "IDS_INFOBAR_CHAPTER"
+msgid "Chapter"
+msgstr "Поглавље"
+
+msgctxt "IDS_CONTROLS_COMPLETING"
+msgid "Completing..."
+msgstr "Завршавам…"
+
+msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
+msgid "Play Video"
+msgstr "Репродуковање видео-записа"
+
+msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
+msgid "Play Music"
+msgstr "Репродуковање музике"
+
+msgctxt "IDS_AUTOPLAY_PLAYAUDIOCD"
+msgid "Play Audio CD"
+msgstr "Репродуковање аудио CD-а"
+
+msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
+msgid "Play DVD Movie"
+msgstr "Репродуковање DVD-а"
+
+msgctxt "IDS_PROPSHEET_PROPERTIES"
+msgid "Properties"
+msgstr "Својства"
+
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Датотека"
+
+msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
+msgid "&Default Style"
+msgstr "По&дразумевани стил"
+
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Плеј-листа"
+
+msgctxt "IDS_FAVFILES"
+msgid "Files"
+msgstr "Датотеке"
+
+msgctxt "IDS_FAVDVDS"
+msgid "DVDs"
+msgstr "DVD-ови"
+
+msgctxt "IDS_INFOBAR_CHANNEL"
+msgid "Channel"
+msgstr "Канал"
+
+msgctxt "IDS_INFOBAR_TIME"
+msgid "Time"
+msgstr "Време"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET"
+msgid "Sync Offset"
+msgstr "Помак синхронизације"
+
+msgctxt "IDS_STATSBAR_SYNC_OFFSET_FORMAT"
+msgid "avg: %d ms, dev: %d ms"
+msgstr "просек: %d мс, отклон: %d мс"
+
+msgctxt "IDS_STATSBAR_JITTER"
+msgid "Jitter"
+msgstr "Трзање"
+
+msgctxt "IDS_STATSBAR_BITRATE"
+msgid "Bitrate"
+msgstr "Брзина протока"
+
+msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
+msgid "(avg/cur)"
+msgstr "(просечна/тренутна)"
+
+msgctxt "IDS_STATSBAR_SIGNAL"
+msgid "Signal"
+msgstr "Сигнал"
+
+msgctxt "IDS_STATSBAR_SIGNAL_FORMAT"
+msgid "Strength: %d dB, Quality: %ld%%"
+msgstr "Јачина: %d dB, квалитет: %ld%%"
+
+msgctxt "IDS_SUBTITLES_STYLES_CAPTION"
+msgid "Styles"
+msgstr "Стилови"
+
+msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
+msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
+msgstr "Ако не наведете циљ рендеровања, SSA/ASS титлови ће бити рендеровани у односу на видео-кадар, док ће се сви други текстуални титлови приказивати у односу на прозор."
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Понављање: плеј-листа"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Понављање: датотека"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Понављање у недоглед: укључено"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Понављање у недоглед: искључено"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Понављање у недоглед"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG0"
+msgid "Never (fastest approach)"
+msgstr "Никад (брзо)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG1"
+msgid "Only when switching different video types (default)"
+msgstr "Само при мењању на друге типове видео-записа (подразумевано)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FG2"
+msgid "Always (slowest option)"
+msgstr "Увек (споро)"
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
+msgid "Not supported by some devices. Two video decoders always present in the filter graph."
+msgstr "Неки уређаји не подржавају ову опцију. У графикону филтера су увек присутна два видео-декодера."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
+msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
+msgstr "Брзо осим приликом промене тока видео-записа. Присутан је само један видео-декодер у графикону филтера."
+
+msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
+msgid "Not recommended. Only for testing purposes."
+msgstr "Не препоручује се. Само у сврхе тестирања."
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG0"
+msgid "Never if possible (fastest, but not supported by most filters)"
+msgstr "Никад, ако је могуће (најбрже, али не подржавају многи филтери)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG1"
+msgid "Only when switching different video types (default)"
+msgstr "Само при мењању на друге типове видео-записа (подразумевано)"
+
+msgctxt "IDS_PPAGE_CAPTURE_SFG2"
+msgid "Always (may be required by some devices)"
+msgstr "Увек (потребно неким уређајима)"
+
+msgctxt "IDS_INFOBAR_PARENTAL_RATING"
+msgid "Parental rating"
+msgstr "Родитељска оцена"
+
+msgctxt "IDS_PARENTAL_RATING"
+msgid "%d+"
+msgstr "%d+"
+
+msgctxt "IDS_NO_PARENTAL_RATING"
+msgid "Not rated"
+msgstr "Није оцењено"
+
+msgctxt "IDS_INFOBAR_CONTENT"
+msgid "Content"
+msgstr "Садржај"
+
+msgctxt "IDS_CONTENT_MOVIE_DRAMA"
+msgid "Movie/Drama"
+msgstr "Филм/драма"
+
+msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
+msgid "News/Current affairs"
+msgstr "Новости/актуелне афере"
+
+msgctxt "IDS_SPEED_UNIT_G"
+msgid "GB/s"
+msgstr "GB/с"
+
+msgctxt "IDS_FILE_FAV_ADDED"
+msgid "File added to favorites"
+msgstr "Датотека је додата у омиљене"
+
+msgctxt "IDS_DVD_FAV_ADDED"
+msgid "DVD added to favorites"
+msgstr "DVD је додат у омиљене"
+
+msgctxt "IDS_CAPTURE_SETTINGS"
+msgid "Capture Settings"
+msgstr "Поставке снимања"
+
+msgctxt "IDS_NAVIGATION_BAR"
+msgid "Navigation Bar"
+msgstr "Навигациона трака"
+
+msgctxt "IDS_SUBRESYNC_CAPTION"
+msgid "Subresync"
+msgstr "Синхронизација титлова"
+
+msgctxt "IDS_SUBRESYNC_CLN_TIME"
+msgid "Time"
+msgstr "Време"
+
+msgctxt "IDS_SUBRESYNC_CLN_END"
+msgid "End"
+msgstr "Крај"
+
+msgctxt "IDS_SUBRESYNC_CLN_PREVIEW"
+msgid "Preview"
+msgstr "Преглед"
+
+msgctxt "IDS_SUBRESYNC_CLN_VOB_ID"
+msgid "Vob ID"
+msgstr "ID VOB-а"
+
+msgctxt "IDS_SUBRESYNC_CLN_CELL_ID"
+msgid "Cell ID"
+msgstr "ID ћелије"
+
+msgctxt "IDS_SUBRESYNC_CLN_FORCED"
+msgid "Forced"
+msgstr "Наметнуто"
+
+msgctxt "IDS_SUBRESYNC_CLN_TEXT"
+msgid "Text"
+msgstr "Текст"
+
+msgctxt "IDS_SUBRESYNC_CLN_STYLE"
+msgid "Style"
+msgstr "Стил"
+
+msgctxt "IDS_SUBRESYNC_CLN_FONT"
+msgid "Font"
+msgstr "Фонт"
+
+msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
+msgid "Failed to render some of the pins of the DVD Navigator filter"
+msgstr "Не могу да обрадим неке од пинова филтера DVD навигатор"
+
+msgctxt "IDS_DVD_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for DVD playback"
+msgstr "Не могу да питам потребне интерфејсе за репродуковање DVD-а"
+
+msgctxt "IDS_CAPTURE_LIVE"
+msgid "Live"
+msgstr "Уживо"
+
+msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
+msgid "Can't add video capture filter to the graph"
+msgstr "Не могу да додам филтер за снимање видео-записа у графикон"
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
+msgid "Can't add audio capture filter to the graph"
+msgstr "Не могу да додам филтер за снимање аудио-записа у графикон"
+
+msgctxt "IDS_CAPTURE_ERROR_DEVICE"
+msgid "Could not open capture device."
+msgstr "Не могу да отворим уређај за снимање."
+
+msgctxt "IDS_INVALID_PARAMS_ERROR"
+msgid "Can't open, invalid input parameters"
+msgstr "Отварање није успело због неисправних улазних параметара"
+
+msgctxt "IDS_EDIT_LIST_EDITOR"
+msgid "Edit List Editor"
+msgstr "Уређивач списка измена"
+
+msgctxt "IDS_GOTO_ERROR_INVALID_TIME"
+msgid "The entered time is greater than the file duration."
+msgstr "Наведено време је веће од трајања датотеке."
+
+msgctxt "IDS_MISSING_ICONS_LIB"
+msgid "The icons library \"mpciconlib.dll\" is missing.\nThe player's default icon will be used for file associations.\nPlease, reinstall MPC-HC to get \"mpciconlib.dll\"."
+msgstr "Недостаје библиотека икона „mpciconlib.dll“.\nКористиће се подразумевана икона плејера за повезаности датотека.\nПоново инсталирајте MPC-HC да бисте имали „mpciconlib.dll“."
+
+msgctxt "IDS_SUBDL_DLG_FILENAME_COL"
+msgid "File"
+msgstr "Датотека"
+
+msgctxt "IDS_SUBDL_DLG_LANGUAGE_COL"
+msgid "Language"
+msgstr "Језик"
+
+msgctxt "IDS_SUBDL_DLG_FORMAT_COL"
+msgid "Format"
+msgstr "Формат"
+
+msgctxt "IDS_SUBDL_DLG_DISC_COL"
+msgid "Disc"
+msgstr "Диск"
+
+msgctxt "IDS_SUBDL_DLG_TITLES_COL"
+msgid "Title(s)"
+msgstr "Наслови"
+
+msgctxt "IDS_SUBRESYNC_CLN_CHARSET"
+msgid "CharSet"
+msgstr "Кодирање"
+
+msgctxt "IDS_SUBRESYNC_CLN_UNICODE"
+msgid "Unicode"
+msgstr "Unicode"
+
+msgctxt "IDS_SUBRESYNC_CLN_LAYER"
+msgid "Layer"
+msgstr "Слој"
+
+msgctxt "IDS_SUBRESYNC_CLN_ACTOR"
+msgid "Actor"
+msgstr "Глумац"
+
+msgctxt "IDS_SUBRESYNC_CLN_EFFECT"
+msgid "Effect"
+msgstr "Ефекат"
+
+msgctxt "IDS_PLAYLIST_CAPTION"
+msgid "Playlist"
+msgstr "Плеј-листа"
+
+msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
+msgid "On/Off"
+msgstr "Укључено/искључено"
+
+msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
+msgid "From (FPS)"
+msgstr "Од (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
+msgid "To (FPS)"
+msgstr "До (FPS)"
+
+msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
+msgid "Display mode (Hz)"
+msgstr "Режим приказа (Hz)"
+
+msgctxt "IDS_PPAGE_FS_DEFAULT"
+msgid "Default"
+msgstr "Подразумеван"
+
+msgctxt "IDS_PPAGE_FS_OTHER"
+msgid "Other"
+msgstr "Други"
+
+msgctxt "IDS_PPAGE_OUTPUT_SYS_DEF"
+msgid "System Default"
+msgstr "По систему"
+
+msgctxt "IDS_GRAPH_INTERFACES_ERROR"
+msgid "Failed to query the needed interfaces for playback"
+msgstr "Не могу да питам потребне интерфејсе за репродуковање"
+
+msgctxt "IDS_GRAPH_TARGET_WND_ERROR"
+msgid "Could not set target window for graph notification"
+msgstr "Не могу да поставим прозор за приказ графикона"
+
+msgctxt "IDS_DVD_NAV_ALL_PINS_ERROR"
+msgid "Failed to render all pins of the DVD Navigator filter"
+msgstr "Не могу да обрадим све пинове филтера DVD навигатор"
+
+msgctxt "IDS_PLAYLIST_OPEN"
+msgid "&Open"
+msgstr "&Отвори"
+
+msgctxt "IDS_PLAYLIST_ADD"
+msgid "A&dd"
+msgstr "&Додај"
+
+msgctxt "IDS_PLAYLIST_REMOVE"
+msgid "&Remove"
+msgstr "&Уклони"
+
+msgctxt "IDS_PLAYLIST_CLEAR"
+msgid "C&lear"
+msgstr "О&чисти"
+
+msgctxt "IDS_PLAYLIST_COPYTOCLIPBOARD"
+msgid "&Copy to clipboard"
+msgstr "&Копирај"
+
+msgctxt "IDS_PLAYLIST_SAVEAS"
+msgid "&Save As..."
+msgstr "&Сачувај као…"
+
+msgctxt "IDS_PLAYLIST_SORTBYLABEL"
+msgid "Sort by &label"
+msgstr "Сортирај по &ознаци"
+
+msgctxt "IDS_PLAYLIST_SORTBYPATH"
+msgid "Sort by &path"
+msgstr "Сортирај по &путањи"
+
+msgctxt "IDS_PLAYLIST_RANDOMIZE"
+msgid "R&andomize"
+msgstr "&Насумично"
+
+msgctxt "IDS_PLAYLIST_RESTORE"
+msgid "R&estore"
+msgstr "&Врати"
+
+msgctxt "IDS_SUBRESYNC_SEPARATOR"
+msgid "&Separator"
+msgstr "&Разделник"
+
+msgctxt "IDS_SUBRESYNC_DELETE"
+msgid "&Delete"
+msgstr "О&бриши"
+
+msgctxt "IDS_SUBRESYNC_DUPLICATE"
+msgid "D&uplicate"
+msgstr "&Дуплирај"
+
+msgctxt "IDS_SUBRESYNC_RESET"
+msgid "&Reset"
+msgstr "Врати &подразумевано"
+
+msgctxt "IDS_MPLAYERC_104"
+msgid "Subtitle Delay -"
+msgstr "Смањи кашњење титла"
+
+msgctxt "IDS_MPLAYERC_105"
+msgid "Subtitle Delay +"
+msgstr "Повећај кашњење титла"
+
+msgctxt "IDS_FILE_SAVE_THUMBNAILS"
+msgid "Save thumbnails"
+msgstr "Сачувај сличице"
+
+msgctxt "IDD_PPAGEPLAYBACK"
+msgid "Playback"
+msgstr "Репродукција"
+
+msgctxt "IDD_PPAGEPLAYER"
+msgid "Player"
+msgstr "Плејер"
+
+msgctxt "IDD_PPAGEDVD"
+msgid "Playback::DVD/OGM"
+msgstr "Репродукција::DVD/OGM"
+
+msgctxt "IDD_PPAGESUBTITLES"
+msgid "Subtitles"
+msgstr "Титлови"
+
+msgctxt "IDD_PPAGEFORMATS"
+msgid "Player::Formats"
+msgstr "Плејер::Формати"
+
+msgctxt "IDD_PPAGETWEAKS"
+msgid "Tweaks"
+msgstr "Оптимизације"
+
+msgctxt "IDD_PPAGEAUDIOSWITCHER"
+msgid "Internal Filters::Audio Switcher"
+msgstr "Унутрашњи филтери::Промена аудио-записа"
+
+msgctxt "IDD_PPAGEEXTERNALFILTERS"
+msgid "External Filters"
+msgstr "Спољни филтери"
+
+msgctxt "IDD_PPAGESHADERS"
+msgid "Playback::Shaders"
+msgstr "Репродукција::Модули за сенчење"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Ресурси"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Разно"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Репродукција::Снимање"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Репродукција::Sync Renderer"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Репродукција::Цео екран"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Унутрашњи филтери::Аудио-рендерер"
+
+msgctxt "IDS_AUDIOSWITCHER"
+msgid "Audio Switcher"
+msgstr "Промена аудио-записа"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
+msgid "New version of the icon library"
+msgstr "Нова верзија библиотеке са иконама"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
+msgid "Do you want to reassociate the icons?"
+msgstr "Желите ли да поново повежете иконе?"
+
+msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
+msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
+msgstr "Овим ћете исправити иконе које су неисправно приказане након ажурирања библиотеке икона.\nПовезаности датотека неће бити промењене, већ ће само одговарајуће иконе бити ажуриране."
+
+msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
+msgid "Old Video Renderer"
+msgstr "Стари видео-рендерер"
+
+msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
+msgid "Overlay Mixer Renderer"
+msgstr "Overlay Mixer Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
+msgid "Video Mixing Renderer 9 (windowed)"
+msgstr "Video Mixing Renderer 9 (у прозору)"
+
+msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
+msgid "Video Mixing Renderer 9 (renderless)"
+msgstr "Video Mixing Renderer 9 (без рендера)"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR"
+msgid "Enhanced Video Renderer"
+msgstr "Enhanced Video Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
+msgid "Enhanced Video Renderer (custom presenter)"
+msgstr "Enhanced Video Renderer (прилагођени излагач)"
+
+msgctxt "IDS_PPAGE_OUTPUT_DXR"
+msgid "Haali Video Renderer"
+msgstr "Haali Video Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Null (све)"
+
+msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Null (без компримирања)"
+
+msgctxt "IDS_PPAGE_OUTPUT_MADVR"
+msgid "madVR"
+msgstr "madVR"
+
+msgctxt "IDD_PPAGEACCELTBL"
+msgid "Player::Keys"
+msgstr "Плејер::Тастери"
+
+msgctxt "IDD_PPAGESUBSTYLE"
+msgid "Subtitles::Default Style"
+msgstr "Титлови::Подразумевани стил"
+
+msgctxt "IDD_PPAGEINTERNALFILTERS"
+msgid "Internal Filters"
+msgstr "Унутрашњи филтери"
+
+msgctxt "IDD_PPAGELOGO"
+msgid "Player::Logo"
+msgstr "Плејер::Логотип"
+
+msgctxt "IDD_PPAGEOUTPUT"
+msgid "Playback::Output"
+msgstr "Репродукција::Излаз"
+
+msgctxt "IDD_PPAGEWEBSERVER"
+msgid "Player::Web Interface"
+msgstr "Плејер::Веб-интерфејс"
+
+msgctxt "IDD_FILEPROPDETAILS"
+msgid "Details"
+msgstr "Подаци"
+
+msgctxt "IDD_FILEPROPCLIP"
+msgid "Clip"
+msgstr "Клип"
+
+msgctxt "IDC_DSSYSDEF"
+msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
+msgstr "Подразумевани филтер DirectShow-а за рендеровање видео-записа. Други филтери ће прећи на овај уколико дође до грешке. На Windows XP-у, овај филтер је исти као VMR-7 (у прозору)."
+
+msgctxt "IDC_DSOLD"
+msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
+msgstr "Ово је подразумевани рендерер ОС Windows 9x/ME/2000. У зависности од видљивости прозора за видео и могућности ваше графичке картице, режими за рендеровање ће се динамички мењати."
+
+msgctxt "IDC_DSOVERLAYMIXER"
+msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
+msgstr "Увек рендерује методом прекривања. Обично су доступни само YUV формати, али су они приказани директно, без претварања боје у RGB. Ово је најбржи начин рендеровања од свих и једини који гарантује ваљано пресликавање видео-записа у режиму целог екрана на друге уређаје."
+
+msgctxt "IDC_DSVMR9WIN"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr ""
+
+msgctxt "IDC_DSVMR9REN"
+msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
+msgstr "Исто као VMR-9 (у прозору), али са додатком додељивач-излагач за титловање. Пресликавање прекривајућег видео-записа ће можда радити. Препоручује се да активирате пун спектар боја. Погодно за ОС Windows XP."
+
+msgctxt "IDC_DSDXR"
+msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer."
+msgstr "Исто као и VMR-9 (без рендера), али користи двопролазни бикубни модул за промену величине."
+
+msgctxt "IDC_DSNULL_COMP"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Повезује се са било којим медијем попут видео-записа и нигде не шаље долазне узорке. Користите када вам није потребан приказ видеа у сврху штење процесорске снаге."
+
+msgctxt "IDC_DSNULL_UNCOMP"
+msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
+msgstr "Исти као и обичан Null рендерер, али овај ће се повезати само са некомпримираним типовима."
+
+msgctxt "IDC_DSEVR"
+msgid "Only available on Vista or later or on XP with at least .NET Framework 3.5 installed."
+msgstr "Доступно само на ОС Vista или новијем, или на XP-у са инсталираним .NET Framework-ом 3.5."
+
+msgctxt "IDC_DSEVR_CUSTOM"
+msgid "Same as the EVR, but with the Allocator-Presenter of MPC-HC for subtitling and postprocessing. Recommended for Windows Vista or later."
+msgstr "Исто као EVR, али са додатком додељивач-излагач за титловање и накнадну обраду. Погодно за ОС Windows Vista или новији."
+
+msgctxt "IDC_DSMADVR"
+msgid "High-quality renderer, requires a GPU that supports D3D9 or later."
+msgstr "Висококвалитетни рендерер захтева GPU који подржава D3D9 или новији."
+
+msgctxt "IDC_DSSYNC"
+msgid "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames."
+msgstr "Исто као EVR (CP), али пружа поједине опције за синхронизовање учесталости кадрова са учесталошћу освежавања екрана ради елиминисања прескочених или двоструких видео-кадрова."
+
+msgctxt "IDC_RMSYSDEF"
+msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
+msgstr "Сопствени рендерер RealMedia формата. SMIL скрипти ће радити, али интеракција вероватно неће. Користи DirectDraw и прекривање, када је то могуће."
+
+msgctxt "IDC_RMDX9"
+msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Излаз модула RealMedia који је обрађен помоћу додатка додељивач-излагач у VMR-9 (без рендера)."
+
+msgctxt "IDC_QTSYSDEF"
+msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
+msgstr "Сопствени рендерер QuickTime формата. Може успорити приликом промене величине прозора за видео или његовог делимичног покривања. Када није доступан Overlay, користи се GDI."
+
+msgctxt "IDC_QTDX9"
+msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
+msgstr "Излаз модула QuickTime-а који је обрађен помоћу додатка додељивач-излагач у VMR-9 (без рендера)."
+
+msgctxt "IDC_REGULARSURF"
+msgid "Video surface will be allocated as a regular offscreen surface."
+msgstr "Површина за видео ће бити додељена као обична површина ван екрана."
+
+msgctxt "IDS_PPAGE_OUTPUT_SYNC"
+msgid "Sync Renderer"
+msgstr "Sync Renderer"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
+msgid "Regular offscreen plain surface"
+msgstr "Обична површина ван екрана"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_2D"
+msgid "2D surfaces"
+msgstr "2D површина"
+
+msgctxt "IDS_PPAGE_OUTPUT_SURF_3D"
+msgid "3D surfaces (recommended)"
+msgstr "3D површина (препоручује се)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
+msgid "Nearest neighbor"
+msgstr "најближи сусед"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
+msgid "Bilinear"
+msgstr "билинеарна"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BIL_PS"
+msgid "Bilinear (PS 2.0)"
+msgstr "билинеарна (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB1"
+msgid "Bicubic A=-0.60 (PS 2.0)"
+msgstr "бикубна A=-0.60 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB2"
+msgid "Bicubic A=-0.75 (PS 2.0)"
+msgstr "бикубна A=-0.75 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BICUB3"
+msgid "Bicubic A=-1.00 (PS 2.0)"
+msgstr "бикубна A=-1.00 (PS 2.0)"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLE"
+msgid "**unavailable**"
+msgstr "**недоступно**"
+
+msgctxt "IDS_PPAGE_OUTPUT_UNAVAILABLEMSG"
+msgid "The selected renderer is not installed."
+msgstr "Изабрани рендерер није инсталиран."
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_COMP"
+msgid "Null (anything)"
+msgstr "Null (све)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
+msgid "Null (uncompressed)"
+msgstr "Null (без компримирања)"
+
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Унутрашњи аудио-рендерер"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
+msgid "Name"
+msgstr "Име"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_TYPE"
+msgid "MIME Type"
+msgstr "MIME тип"
+
+msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
+msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
+msgstr "Да бисте видели уграђени ресурс у прегледачу, потребно је да омогућите веб-интерфејс.\n\nКликните на дугме „Сачувај као“ ако само желите да сачувате информацију."
+
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Преузми титл…"
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Отпреми титл…"
+
+msgctxt "IDS_SUBFILE_DELAY"
+msgid "Delay (ms):"
+msgstr "Кашњење (мс):"
+
+msgctxt "IDS_SPEEDSTEP_AUTO"
+msgid "Auto"
+msgstr "аутом."
+
+msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
+msgid "There are no customized keys to export."
+msgstr "Нема прилагођених тастера за извоз."
+
+msgctxt "IDS_RFS_NO_FILES"
+msgid "No media files found in the archive"
+msgstr "У архиви нема медијских датотека"
+
+msgctxt "IDS_RFS_COMPRESSED"
+msgid "Compressed files are not supported"
+msgstr "Компримиране датотеке нису подржане"
+
+msgctxt "IDS_RFS_ENCRYPTED"
+msgid "Encrypted files are not supported"
+msgstr "Шифроване датотеке нису подржане"
+
+msgctxt "IDS_RFS_MISSING_VOLS"
+msgid "Couldn't find all archive volumes"
+msgstr "Не могу да пронађем све волумене архиве"
+
+msgctxt "IDC_TEXTURESURF2D"
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Површина за видео ће бити додељена као текстура, али за растезање и копирање видео-записа у позадински бафер и даље ће се користити 2D функција. Захтева графичку картицу која може да додели 32-битне RGBA и NPOT текстуре у резолуцији видео-записа."
+
+msgctxt "IDC_TEXTURESURF3D"
+msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
+msgstr "Површина за видео ће бити додељена као текстура и нацртана као два троугла у 3D-у. Уклањање назубљености може да има лош утицај на брзину рендеровања."
+
+msgctxt "IDC_DX9RESIZER_COMBO"
+msgid "If there is no Pixel Shader 2.0 support, simple bilinear is used automatically."
+msgstr "Ако нема подршке за Pixel Shader 2.0, користиће се билинеарни филтер."
+
+msgctxt "IDC_DSVMR9LOADMIXER"
+msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
+msgstr "Додаје VMR-9 (без рендера) у режим миксера. Ово значи да ће већина контрола на страници са својствима радити; биће коришћена и посебна радна нит за рендеровање кадрова."
+
+msgctxt "IDC_DSVMR9YUVMIXER"
+msgid "Improves performance at the cost of some compatibility of the renderer."
+msgstr "Побољшава перформансе на рачун компатибилности рендерера."
+
+msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
+msgid "Reduces tearing but prevents the toolbar from being shown."
+msgstr "Смањује цепање слике, али сакрива траку са алаткама."
+
+msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
+msgid "Reduces tearing by bypassing the default VSync built into D3D."
+msgstr "Смањује цепање слике заобилажењем вертикалне синхронизације уграђене у D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Скенирање тјунера"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Титлови нису учитани или је рендерер неподржан."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
+msgctxt "IDS_SRC_VTS"
+msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
+msgstr "Отвори VTS_xx_0.ifo ради учитавања VTS_xx_x.vob датотека из једног дела"
+
+msgctxt "IDS_SRC_RFS"
+msgid "Based on RARFileSource, doesn't support compressed files"
+msgstr "Засновано на RARFileSource-у. Не подржава компримиране датотеке"
+
+msgctxt "IDS_INTERNAL_LAVF"
+msgid "Uses LAV Filters"
+msgstr "Користи LAV Filters"
+
+msgctxt "IDS_INTERNAL_LAVF_WMV"
+msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
+msgstr "Користи LAV Filters. Онемогућено по подразумеваном јер су Microsoft-ови филтери обично стабилнији за дате формате.\nАко изаберете да користите унутрашње филтере, омогућите их и за извор и за декодирање ради боље репродукције."
+
+msgctxt "IDS_AG_TOGGLE_NAVIGATION"
+msgid "Toggle Navigation Bar"
+msgstr "Укључи/искључи навигациону траку"
+
+msgctxt "IDS_AG_VSYNCACCURATE"
+msgid "Accurate VSync"
+msgstr "Прецизна вертикална синхронизација"
+
+msgctxt "IDC_CHECK_RELATIVETO"
+msgid "If the rendering target is left undefined, it will be inherited from the default style."
+msgstr "Ако не наведете циљ рендеровања, он ће бити преузет из подразумеваног стила."
+
+msgctxt "IDC_CHECK_NO_SUB_ANIM"
+msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
+msgstr "Спречите анимирање титлова. Ако омогућите ову опцију, смањићете употребу процесора. Можете је користити ако вам титлови трепте."
+
+msgctxt "IDC_SUBPIC_TO_BUFFER"
+msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
+msgstr "Повећавањем броја баферованих подслика обично ћете побољшати перформансе рендеровања на рачун веће употребе RAM меморије."
+
+msgctxt "IDC_BUTTON_EXT_SET"
+msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
+msgstr "Након што кликнете на ово дугме, проверено стање групе формата ће одсликавати стварну повезаност датотека за MPC-HC. Нови наставак ће обично обојити стање у сиво, зато не заборавите да га поново проверите пре него што затворите овај дијалог!"
+
+msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
+msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
+msgstr "Ако онемогућите ову опцију, титлови више неће трептати, али може доћи до прескакања неких видео-кадрова."
+
+msgctxt "ID_PLAY_PLAY"
+msgid "Play\nPlay"
+msgstr "Репродукуј\nРепродукуј"
+
+msgctxt "ID_PLAY_PAUSE"
+msgid "Pause\nPause"
+msgstr "Паузирај\nПаузирај"
+
+msgctxt "ID_PLAY_STOP"
+msgid "Stop\nStop"
+msgstr "Заустави\nЗаустави"
+
+msgctxt "ID_PLAY_FRAMESTEP"
+msgid "Step\nStep"
+msgstr "По корак\nПо корак"
+
+msgctxt "ID_PLAY_DECRATE"
+msgid "Decrease speed\nDecrease speed"
+msgstr "Успори\nУспори"
+
+msgctxt "ID_PLAY_INCRATE"
+msgid "Increase speed\nIncrease speed"
+msgstr "Убрзај\nУбрзај"
+
+msgctxt "ID_VOLUME_MUTE"
+msgid "Mute"
+msgstr "Искључи звук"
+
+msgctxt "ID_VOLUME_MUTE_OFF"
+msgid "Unmute"
+msgstr "Укључи звук"
+
+msgctxt "ID_VOLUME_MUTE_DISABLED"
+msgid "No audio"
+msgstr "Без звука"
+
+msgctxt "ID_NAVIGATE_SKIPBACK"
+msgid "Skip back\nSkip back"
+msgstr "Уназад\nУназад"
+
+msgctxt "ID_NAVIGATE_SKIPFORWARD"
+msgid "Skip forward\nSkip forward"
+msgstr "Унапред\nУнапред"
+
+msgctxt "IDS_SUBRESYNC_ORIGINAL"
+msgid "&Original"
+msgstr "&Изворни"
+
+msgctxt "IDS_SUBRESYNC_CURRENT"
+msgid "&Current"
+msgstr "&Тренутни"
+
+msgctxt "IDS_SUBRESYNC_EDIT"
+msgid "&Edit"
+msgstr "&Уреди"
+
+msgctxt "IDS_SUBRESYNC_YES"
+msgid "&Yes"
+msgstr "&Да"
+
+msgctxt "IDS_SUBRESYNC_NO"
+msgid "&No"
+msgstr "&Не"
+
+msgctxt "IDS_SUBRESYNC_DECREASE"
+msgid "&Decrease"
+msgstr "&Смањи"
+
+msgctxt "IDS_SUBRESYNC_INCREASE"
+msgid "&Increase"
+msgstr "&Повећај"
+
+msgctxt "IDS_OPTIONS_CAPTION"
+msgid "Options"
+msgstr "Опције"
+
+msgctxt "IDS_SHADERS_SELECT"
+msgid "&Select Shaders..."
+msgstr "&Изабери модуле…"
+
+msgctxt "IDS_SHADERS_DEBUG"
+msgid "&Debug Shaders..."
+msgstr "&Отклони грешке…"
+
+msgctxt "IDS_FAVORITES_ADD"
+msgid "&Add to Favorites..."
+msgstr "&Додај…"
+
+msgctxt "IDS_FAVORITES_ORGANIZE"
+msgid "&Organize Favorites..."
+msgstr "&Организуј…"
+
+msgctxt "IDS_PLAYLIST_SHUFFLE"
+msgid "Sh&uffle"
+msgstr "Ме&шање"
+
+msgctxt "IDS_PLAYLIST_SHOWFOLDER"
+msgid "Ope&n file location"
+msgstr "Отвори &локацију датотеке"
+
+msgctxt "IDS_CONTROLS_CLOSING"
+msgid "Closing..."
+msgstr "Затварам…"
+
+msgctxt "IDS_CONTROLS_PLAYING"
+msgid "Playing"
+msgstr "Репродукује се"
+
+msgctxt "IDS_CONTROLS_PAUSED"
+msgid "Paused"
+msgstr "Паузирано"
+
+msgctxt "IDS_AG_EDL_NEW_CLIP"
+msgid "EDL new clip"
+msgstr "EDL – нови клип"
+
+msgctxt "IDS_RECENT_FILES_CLEAR"
+msgid "&Clear list"
+msgstr "&Очисти списак"
+
+msgctxt "IDS_RECENT_FILES_QUESTION"
+msgid "Are you sure that you want to delete recent files list?"
+msgstr "Заиста желите да избришете списак скорашњих датотека?"
+
+msgctxt "IDS_AG_EDL_SAVE"
+msgid "EDL save"
+msgstr "EDL – сачувај"
+
+msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
+msgid "Enable Frame Time Correction"
+msgstr "Исправљање времена кадрова"
+
+msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
+msgid "Toggle EDL window"
+msgstr "Отвори/затвори прозор EDL-а"
+
+msgctxt "IDS_AG_EDL_IN"
+msgid "EDL set In"
+msgstr "EDL – постави изнутра"
+
+msgctxt "IDS_AG_EDL_OUT"
+msgid "EDL set Out"
+msgstr "EDL – постави споља"
+
+msgctxt "IDS_AG_PNS_ROTATEX_M"
+msgid "PnS Rotate X-"
+msgstr "Ротирај кадар по оси X-"
+
+msgctxt "IDS_AG_PNS_ROTATEY_P"
+msgid "PnS Rotate Y+"
+msgstr "Ротирај кадар по оси Y+"
+
+msgctxt "IDS_AG_PNS_ROTATEY_M"
+msgid "PnS Rotate Y-"
+msgstr "Ротирај кадар по оси Y-"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_P"
+msgid "PnS Rotate Z+"
+msgstr "Ротирај кадар по оси Z+"
+
+msgctxt "IDS_AG_PNS_ROTATEZ_M"
+msgid "PnS Rotate Z-"
+msgstr "Ротирај кадар по оси Z-"
+
+msgctxt "IDS_AG_TEARING_TEST"
+msgid "Tearing Test"
+msgstr "Тест на цепање слике"
+
+msgctxt "IDS_SCALE_16_9"
+msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+msgstr "Подеси размеру на 16:9 TV,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_WIDESCREEN"
+msgid "Zoom To Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Зумирај за широки екран,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_SCALE_ULTRAWIDE"
+msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
+msgstr "Зумирај за ултрашироки екран,%.3f,%.3f,%.3f,%.3f"
+
+msgctxt "IDS_PLAYLIST_HIDEFS"
+msgid "&Hide on Fullscreen"
+msgstr "Сакриј у режиму &целог екрана"
+
+msgctxt "IDS_CONTROLS_STOPPED"
+msgid "Stopped"
+msgstr "Заустављено"
+
+msgctxt "IDS_CONTROLS_BUFFERING"
+msgid "Buffering... (%d%%)"
+msgstr "Стављам у бафер… (%d%%)"
+
+msgctxt "IDS_CONTROLS_CAPTURING"
+msgid "Capturing..."
+msgstr "Снимам…"
+
+msgctxt "IDS_CONTROLS_OPENING"
+msgid "Opening..."
+msgstr "Отварам…"
+
+msgctxt "IDS_CONTROLS_CLOSED"
+msgid "Closed"
+msgstr "Затворено"
+
+msgctxt "IDS_SUBTITLES_OPTIONS"
+msgid "&Options..."
+msgstr "&Опције…"
+
+msgctxt "IDS_SUBTITLES_STYLES"
+msgid "&Styles..."
+msgstr "&Стилови…"
+
+msgctxt "IDS_SUBTITLES_RELOAD"
+msgid "&Reload"
+msgstr "&Поново учитај"
+
+msgctxt "IDS_SUBTITLES_ENABLE"
+msgid "&Enable"
+msgstr "О&могући"
+
+msgctxt "IDS_PANSCAN_EDIT"
+msgid "&Edit..."
+msgstr "&Уреди…"
+
+msgctxt "IDS_INFOBAR_TITLE"
+msgid "Title"
+msgstr "Наслов"
+
+msgctxt "IDS_INFOBAR_AUTHOR"
+msgid "Author"
+msgstr "Аутор"
+
+msgctxt "IDS_INFOBAR_COPYRIGHT"
+msgid "Copyright"
+msgstr "Аутор. права"
+
+msgctxt "IDS_INFOBAR_RATING"
+msgid "Rating"
+msgstr "Оцена"
+
+msgctxt "IDS_INFOBAR_DESCRIPTION"
+msgid "Description"
+msgstr "Опис"
+
+msgctxt "IDS_INFOBAR_DOMAIN"
+msgid "Domain"
+msgstr "Домен"
+
+msgctxt "IDS_AG_CLOSE"
+msgid "Close"
+msgstr "Затвори"
+
+msgctxt "IDS_AG_NONE"
+msgid "None"
+msgstr "нема"
+
+msgctxt "IDS_AG_COMMAND"
+msgid "Command"
+msgstr "Команда"
+
+msgctxt "IDS_AG_KEY"
+msgid "Key"
+msgstr "Тастер"
+
+msgctxt "IDS_AG_MOUSE"
+msgid "Mouse Windowed"
+msgstr "Миш у прозору"
+
+msgctxt "IDS_AG_MOUSE_FS"
+msgid "Mouse Fullscreen"
+msgstr "Миш на целом екрану"
+
+msgctxt "IDS_AG_APP_COMMAND"
+msgid "App Command"
+msgstr "Команда програма"
+
+msgctxt "IDS_AG_MEDIAFILES"
+msgid "Media files (all types)"
+msgstr "Медијске датотеке (сви типови)"
+
+msgctxt "IDS_AG_ALLFILES"
+msgid "All files (*.*)|*.*|"
+msgstr "Све датотеке (*.*)|*.*|"
+
+msgctxt "IDS_AG_AUDIOFILES"
+msgid "Audio files (all types)"
+msgstr "Аудио-датотеке (сви типови)"
+
+msgctxt "IDS_AG_NOT_KNOWN"
+msgid "Not known"
+msgstr "Непознато"
+
+msgctxt "IDS_MPLAYERC_0"
+msgid "Quick Open File"
+msgstr "Брзо отвори датотеку"
+
+msgctxt "IDS_AG_OPEN_FILE"
+msgid "Open File"
+msgstr "Отвори датотеку"
+
+msgctxt "IDS_AG_OPEN_DVD"
+msgid "Open DVD/BD"
+msgstr "Отвори DVD/BD"
+
+msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
+msgid "Failed to set post-resize shaders"
+msgstr "Не могу да поставим модуле за сенчење који се извршавају након промене величине"
+
+msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
+msgid "Failed to set both pre-resize and post-resize shaders"
+msgstr "Не могу да поставим модуле за сенчење који се извршавају пре промене величине и након ње"
+
+msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
+msgid "Shaders are recompiled automatically when the corresponding files are modified."
+msgstr "Модули за сенчење се аутоматски компилирају када дође до промене одговарајућих датотека."
+
+msgctxt "IDS_SHADER_DLL_ERR_0"
+msgid "Cannot load %s, pixel shaders will not work."
+msgstr "Не могу да учитам %s. Модули за сенчење пиксела неће радити."
+
+msgctxt "IDS_SHADER_DLL_ERR_1"
+msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
+msgstr "Не могу да пронађем потребне улазне тачке функције у %s. Модули за сенчење пиксела неће радити."
+
+msgctxt "IDS_OSD_SHADERS_PRESET"
+msgid "Shader preset: %s"
+msgstr "Шаблон модула за сенчење: %s"
+
+msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
+msgid "Next Shader Preset"
+msgstr "Следећи шаблон модула за сенчење"
+
+msgctxt "IDS_AG_SHADERS_PRESET_PREV"
+msgid "Prev Shader Preset"
+msgstr "Претходни шаблон модула за сенчење"
+
+msgctxt "IDS_STRING_COLON"
+msgid "%s:"
+msgstr "%s:"
+
+msgctxt "IDS_RECORD_START"
+msgid "Record"
+msgstr "Сними"
+
+msgctxt "IDS_RECORD_STOP"
+msgid "Stop"
+msgstr "Заустави"
+
+msgctxt "IDS_BALANCE"
+msgid "L = R"
+msgstr "Л = Д"
+
+msgctxt "IDS_BALANCE_L"
+msgid "L +%d%%"
+msgstr "Л +%d%%"
+
+msgctxt "IDS_BALANCE_R"
+msgid "R +%d%%"
+msgstr "Д +%d%%"
+
+msgctxt "IDS_VOLUME"
+msgid "%d%%"
+msgstr "%d%%"
+
+msgctxt "IDS_BOOST"
+msgid "+%d%%"
+msgstr "+%d%%"
+
+msgctxt "IDS_PLAYLIST_ADDFOLDER"
+msgid "Add containing &folder"
+msgstr "Додај &фасциклу са садржајем"
+
+msgctxt "IDS_HW_INDICATOR"
+msgid "[H/W]"
+msgstr "[H/W]"
+
+msgctxt "IDS_TOOLTIP_SOFTWARE_DECODING"
+msgid "Software Decoding"
+msgstr "Софтверско декодирање"
+
+msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
+msgid "Playback rate"
+msgstr "Брзина репродукције"
+
+msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
+msgid "&Copy filters list to clipboard"
+msgstr "&Копирај списак филтера"
+
+msgctxt "IDS_CREDENTIALS_SERVER"
+msgid "Enter server credentials"
+msgstr "Унесите податке за пријаву на сервер"
+
+msgctxt "IDS_CREDENTIALS_CONNECT"
+msgid "Enter your credentials to connect"
+msgstr "Унесите податке за пријаву ради повезивања"
+
+msgctxt "IDS_SUB_SAVE_EXTERNAL_STYLE_FILE"
+msgid "Save custom style"
+msgstr "Сачувај прилагођени стил"
+
+msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
+msgid "Education/Science/Factual topics"
+msgstr "Образовање/наука/стручне теме"
+
+msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
+msgid "Hides controls and panels also in windowed mode."
+msgstr "Сакрива контроле и панеле и у режиму прозора."
+
+msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
+msgid "Prevent external subtitle renderer to be loaded when internal is in use."
+msgstr "Спречите учитавање спољног рендерера титлова док се користи унутрашњи."
+
+msgctxt "IDS_PPAGEADVANCED_COL_NAME"
+msgid "Name"
+msgstr "Име"
+
+msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
+msgid "Value"
+msgstr "Вредност"
+
+msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
+msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
+msgstr "Максималан број датотека у менију „Скорашње датотеке“."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
+msgid "Remember file position only for files longer than N minutes."
+msgstr "Запамтите позицију само датотекама дужим од N минута."
+
+msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
+msgid "Remember file position also for audio files."
+msgstr "Запамтите позицију и за аудио-датотеке."
+
+msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
+msgid "Do Nothing"
+msgstr "Не ради ништа"
+
+msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
+msgid "Play next file in the folder"
+msgstr "Пусти следећу датотеку у фасцикли"
+
+msgctxt "IDS_AFTER_PLAYBACK_REWIND"
+msgid "Rewind current file"
+msgstr "Премотај тренутну датотеку"
+
+msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
+msgid "Close"
+msgstr "Затвори"
+
+msgctxt "IDS_AFTER_PLAYBACK_EXIT"
+msgid "Exit"
+msgstr "Изађи из програма"
+
+msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
+msgid "Turn off the monitor"
+msgstr "Искључи монитор"
+
+msgctxt "IDS_IMAGE_JPEG_QUALITY"
+msgid "JPEG Image"
+msgstr "JPEG слика"
+
+msgctxt "IDS_IMAGE_QUALITY"
+msgid "Quality (%):"
+msgstr "Квалитет (%):"
+
+msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
+msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
+msgstr "Максимална величина (NxNpx) омота у режиму репродукције звука."
+
+msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
+msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
+msgstr "Кашњење титла ће бити смањено/повећано овом вредношћу сваки пут када притиснете одговарајуће пречице на тастатури (%s/%s)."
+
+msgctxt "IDS_HOTKEY_NOT_DEFINED"
+msgid "<not defined>"
+msgstr "<није дефинисано>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Погледај"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Помери нагоре"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Помери надоле"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Сортирај по LCN-у"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Уклони све"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Заиста желите да избришете све канале са списка?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Нема доступних информација"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Анализирам…"
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr ""
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Преостало време"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Велика прецизност"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Након репродукције: премотај датотеку уназад"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Након репродукције: затвори"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr ""
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Унутрашњи рендерер титлова"
+
+msgctxt "IDS_AG_OPEN_DEVICE"
+msgid "Open Device"
+msgstr "Отвори уређај"
+
+msgctxt "IDS_AG_SAVE_AS"
+msgid "Save As"
+msgstr "Чување"
+
+msgctxt "IDS_AG_SAVE_IMAGE"
+msgid "Save Image"
+msgstr "Сачувај слику"
+
+msgctxt "IDS_MPLAYERC_6"
+msgid "Save Image (auto)"
+msgstr "Сачувај слику (аутоматски)"
+
+msgctxt "IDS_OSD_IMAGE_SAVED"
+msgid "Image saved successfully"
+msgstr "Слика је успешно сачувана"
+
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Учитај титл…"
+
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Сачувај титл…"
+
+msgctxt "IDS_AG_PROPERTIES"
+msgid "Properties"
+msgstr "Својства"
+
+msgctxt "IDS_AG_EXIT"
+msgid "Exit"
+msgstr "Изађи из програма"
+
+msgctxt "IDS_AG_PLAYPAUSE"
+msgid "Play/Pause"
+msgstr "Репродукуј/паузирај"
+
+msgctxt "IDS_AG_PLAY"
+msgid "Play"
+msgstr "Репродукуј"
+
+msgctxt "IDS_AG_STOP"
+msgid "Stop"
+msgstr "Заустави"
+
+msgctxt "IDS_AG_FRAMESTEP"
+msgid "Frame-step"
+msgstr "Корак унапред"
+
+msgctxt "IDS_MPLAYERC_16"
+msgid "Frame-step back"
+msgstr "Корак уназад"
+
+msgctxt "IDS_AG_GO_TO"
+msgid "Go To"
+msgstr "Пређи на"
+
+msgctxt "IDS_AG_INCREASE_RATE"
+msgid "Increase Rate"
+msgstr "Убрзај"
+
+msgctxt "IDS_CONTENT_SHOW_GAMESHOW"
+msgid "Show/Game show"
+msgstr "Шоу / играни шоу"
+
+msgctxt "IDS_CONTENT_SPORTS"
+msgid "Sports"
+msgstr "Спорт"
+
+msgctxt "IDS_CONTENT_CHILDREN_YOUTH_PROG"
+msgid "Children's/Youth programmes"
+msgstr "Дечји програм / програм за младе"
+
+msgctxt "IDS_CONTENT_MUSIC_BALLET_DANCE"
+msgid "Music/Ballet/Dance"
+msgstr "Музика/балет/плес"
+
+msgctxt "IDS_CONTENT_MUSIC_ART_CULTURE"
+msgid "Arts/Culture"
+msgstr "Уметност/култура"
+
+msgctxt "IDS_CONTENT_SOCIAL_POLITICAL_ECO"
+msgid "Social/Political issues/Economics"
+msgstr "Друштвено-политички проблеми/економија"
+
+msgctxt "IDS_CONTENT_LEISURE"
+msgid "Leisure hobbies"
+msgstr "Слободно време и забава"
+
+msgctxt "IDS_FILE_RECYCLE"
+msgid "Move to Recycle Bin"
+msgstr "Пр&емести у корпу за отпатке"
+
+msgctxt "IDS_AG_SAVE_COPY"
+msgid "Save a Copy"
+msgstr "Сачувај копију"
+
+msgctxt "IDS_FASTSEEK_LATEST"
+msgid "Latest keyframe"
+msgstr "последњи кључни кадар"
+
+msgctxt "IDS_FASTSEEK_NEAREST"
+msgid "Nearest keyframe"
+msgstr "најближи кључни кадар"
+
+msgctxt "IDS_HOOKS_FAILED"
+msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
+msgstr "Дошло је до проблема при покретању. Репродуковање DVD-а можда неће исправно радити. Разлог томе је вероватно некомпатибилни безбедносни софтвер.\n\nЖелите ли да пријавите грешку?"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
+msgid "Never show"
+msgstr "Никад не приказуј"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOWMOVED"
+msgid "Show when moving the cursor, hide after:"
+msgstr "Прикажи приликом померања курсора, сакриј након:"
+
+msgctxt "IDS_PPAGEFULLSCREEN_SHOHHOVERED"
+msgid "Show when hovering control, hide after:"
+msgstr "Прикажи приликом задржавања курсора над контролом, сакриј након:"
+
+msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
+msgid "Failed to set pre-resize shaders"
+msgstr "Не могу да поставим модуле за сенчење који се извршавају пре промене величине"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
+msgid "Frame Time Correction: On"
+msgstr "Исправљање времена кадрова: укључено"
+
+msgctxt "IDS_OSD_RS_FT_CORRECTION_OFF"
+msgid "Frame Time Correction: Off"
+msgstr "Исправљање времена кадрова: искључено"
+
+msgctxt "IDS_OSD_RS_TARGET_VSYNC_OFFSET"
+msgid "Target VSync Offset: %.1f"
+msgstr "Циљни помак вертикалне синхронизације: %.1f"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFFSET"
+msgid "VSync Offset: %d"
+msgstr "Помак вертикалне синхронизације: %d"
+
+msgctxt "IDS_OSD_SPEED"
+msgid "Speed: %.2lfx"
+msgstr "Брзина: %.2lfx"
+
+msgctxt "IDS_OSD_THUMBS_SAVED"
+msgid "Thumbnails saved successfully"
+msgstr "Сличице су успешно сачуване"
+
+msgctxt "IDS_MENU_VIDEO_STREAM"
+msgid "Vide&o Track"
+msgstr "&Видео-запис"
+
+msgctxt "IDS_MENU_VIDEO_ANGLE"
+msgid "Video Ang&le"
+msgstr "&Угао видео-записа"
+
+msgctxt "IDS_RESET_SETTINGS"
+msgid "Reset settings"
+msgstr "Враћање подразумеваних поставки"
+
+msgctxt "IDS_RESET_SETTINGS_WARNING"
+msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
+msgstr "Заиста желите да успоставите почетне вредности MPC-HC-а?\nИмајте на уму да ће све тренутне поставке бити изгубљене!"
+
+msgctxt "IDS_RESET_SETTINGS_MUTEX"
+msgid "Please close all instances of MPC-HC so that the default settings can be restored."
+msgstr "Затворите све примерке MPC-HC-а како бисте вратили подразумеване поставке."
+
+msgctxt "IDS_EXPORT_SETTINGS"
+msgid "Export settings"
+msgstr "Поставке извоза"
+
+msgctxt "IDS_EXPORT_SETTINGS_WARNING"
+msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
+msgstr "Неке измене још увек нису сачуване.\nЖелите ли да их сачувате пре извоза?"
+
+msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
+msgid "The settings have been successfully exported."
+msgstr "Поставке су успешно извезене."
+
+msgctxt "IDS_EXPORT_SETTINGS_FAILED"
+msgid "The export failed! This can happen when you don't have the correct rights."
+msgstr "Извоз није успео. Вероватно немате одговарајућа права."
+
+msgctxt "IDS_BDA_ERROR"
+msgid "BDA Error"
+msgstr "Грешка у BDA-у"
+
+msgctxt "IDS_AG_DECREASE_RATE"
+msgid "Decrease Rate"
+msgstr "Успори"
+
+msgctxt "IDS_AG_RESET_RATE"
+msgid "Reset Rate"
+msgstr "Првобитна брзина"
+
+msgctxt "IDS_MPLAYERC_21"
+msgid "Audio Delay +10 ms"
+msgstr "Повећај кашњење звука за 10 мс"
+
+msgctxt "IDS_MPLAYERC_22"
+msgid "Audio Delay -10 ms"
+msgstr "Смањи кашњење звука за 10 мс"
+
+msgctxt "IDS_MPLAYERC_23"
+msgid "Jump Forward (small)"
+msgstr "Прескочи унапред (мало)"
+
+msgctxt "IDS_MPLAYERC_24"
+msgid "Jump Backward (small)"
+msgstr "Прескочи уназад (мало)"
+
+msgctxt "IDS_MPLAYERC_25"
+msgid "Jump Forward (medium)"
+msgstr "Прескочи унапред (средње)"
+
+msgctxt "IDS_MPLAYERC_26"
+msgid "Jump Backward (medium)"
+msgstr "Прескочи уназад (средње)"
+
+msgctxt "IDS_MPLAYERC_27"
+msgid "Jump Forward (large)"
+msgstr "Прескочи унапред (много)"
+
+msgctxt "IDS_MPLAYERC_28"
+msgid "Jump Backward (large)"
+msgstr "Прескочи уназад (много)"
+
+msgctxt "IDS_MPLAYERC_29"
+msgid "Jump Forward (keyframe)"
+msgstr "Прескочи унапред (по кључном кадру)"
+
+msgctxt "IDS_MPLAYERC_30"
+msgid "Jump Backward (keyframe)"
+msgstr "Прескочи уназад (по кључном кадру)"
+
+msgctxt "IDS_AG_NEXT"
+msgid "Next"
+msgstr "Следеће"
+
+msgctxt "IDS_AG_PREVIOUS"
+msgid "Previous"
+msgstr "Претходно"
+
+msgctxt "IDS_AG_NEXT_FILE"
+msgid "Next File"
+msgstr "Следећа датотека"
+
+msgctxt "IDS_AG_PREVIOUS_FILE"
+msgid "Previous File"
+msgstr "Претходна датотека"
+
+msgctxt "IDS_MPLAYERC_99"
+msgid "Toggle Direct3D fullscreen"
+msgstr "Укључи/искључи цео екран (Direct3D)"
+
+msgctxt "IDS_MPLAYERC_100"
+msgid "Goto Prev Subtitle"
+msgstr "Пређи на претходни титл"
+
+msgctxt "IDS_MPLAYERC_101"
+msgid "Goto Next Subtitle"
+msgstr "Пређи на следећи титл"
+
+msgctxt "IDS_MPLAYERC_102"
+msgid "Shift Subtitle Left"
+msgstr "Помери титл улево"
+
+msgctxt "IDS_MPLAYERC_103"
+msgid "Shift Subtitle Right"
+msgstr "Помери титл удесно"
+
+msgctxt "IDS_AG_SEEKSET"
+msgid "Jump to Beginning"
+msgstr "Пређи на почетак"
+
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: прикажи име датотеке"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Репродукуј DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Репродукуј BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: прикажи статистику рендерера"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Титлови::Разно"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Сакриј &ивице"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Само кадар"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "&Наслов и мени"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Сакриј &мени"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Напредно"
+
+msgctxt "IDS_AG_VIEW_MINIMAL"
+msgid "View Minimal"
+msgstr "Минимални приказ"
+
+msgctxt "IDS_AG_VIEW_COMPACT"
+msgid "View Compact"
+msgstr "Компактни приказ"
+
+msgctxt "IDS_AG_VIEW_NORMAL"
+msgid "View Normal"
+msgstr "Нормални приказ"
+
+msgctxt "IDS_AG_FULLSCREEN"
+msgid "Fullscreen"
+msgstr "Цео екран"
+
+msgctxt "IDS_MPLAYERC_39"
+msgid "Fullscreen (w/o res.change)"
+msgstr "Цео екран (без промене резолуције)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT"
+msgid "Zoom Auto Fit"
+msgstr "Уклопи"
+
+msgctxt "IDS_AG_VIDFRM_HALF"
+msgid "VidFrm Half"
+msgstr "Половични видео-кадар"
+
+msgctxt "IDS_AG_VIDFRM_NORMAL"
+msgid "VidFrm Normal"
+msgstr "Нормални видео-кадар"
+
+msgctxt "IDS_AG_VIDFRM_DOUBLE"
+msgid "VidFrm Double"
+msgstr "Двоструки видео-кадар"
+
+msgctxt "IDS_AG_ALWAYS_ON_TOP"
+msgid "Always On Top"
+msgstr "Увек на врху"
+
+msgctxt "IDS_AG_PNS_INC_SIZE"
+msgid "PnS Inc Size"
+msgstr "Повећај размеру кадра"
+
+msgctxt "IDS_AG_PNS_INC_WIDTH"
+msgid "PnS Inc Width"
+msgstr "Повећај ширину кадра"
+
+msgctxt "IDS_MPLAYERC_47"
+msgid "PnS Inc Height"
+msgstr "Повећај висину кадра"
+
+msgctxt "IDS_AG_PNS_DEC_SIZE"
+msgid "PnS Dec Size"
+msgstr "Смањи размеру кадра"
+
+msgctxt "IDS_AG_PNS_DEC_WIDTH"
+msgid "PnS Dec Width"
+msgstr "Смањи ширину кадра"
+
+msgctxt "IDS_MPLAYERC_50"
+msgid "PnS Dec Height"
+msgstr "Смањи висину кадра"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
+msgid "Downloading [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PARSING"
+msgid "Parsing list..."
+msgstr "Анализирам списак…"
+
+msgctxt "IDS_SUBDL_DLG_NOT_FOUND"
+msgid "No subtitles found."
+msgstr "Нема титлова."
+
+msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
+msgid "%d subtitle(s) available."
+msgstr "Доступно титлова: %d."
+
+msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
+msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
+msgstr "Желите ли да MPC-HC аутоматски тражи ажурирања?\n\nОву функцију можете касније онемогућити из одељка „Разно“ у опцијама."
+
+msgctxt "IDS_ZOOM_50"
+msgid "50%"
+msgstr "50%"
+
+msgctxt "IDS_ZOOM_100"
+msgid "100%"
+msgstr "100%"
+
+msgctxt "IDS_ZOOM_200"
+msgid "200%"
+msgstr "200%"
+
+msgctxt "IDS_ZOOM_AUTOFIT"
+msgid "Auto Fit"
+msgstr "Уклопи"
+
+msgctxt "IDS_ZOOM_AUTOFIT_LARGER"
+msgid "Auto Fit (Larger Only)"
+msgstr "Уклопи (само веће)"
+
+msgctxt "IDS_AG_ZOOM_AUTO_FIT_LARGER"
+msgid "Zoom Auto Fit (Larger Only)"
+msgstr "Зум: уклопи (само веће)"
+
+msgctxt "IDS_OSD_ZOOM_AUTO_LARGER"
+msgid "Zoom: Auto (Larger Only)"
+msgstr "Зум: аутоматски (само веће)"
+
+msgctxt "IDS_TOOLTIP_EXPLORE_TO_FILE"
+msgid "Double click to open file location"
+msgstr "Двокликните да бисте отворили локацију датотеке"
+
+msgctxt "IDS_TOOLTIP_REMAINING_TIME"
+msgid "Toggle between elapsed and remaining time"
+msgstr "Пребацивање између протеклог и преосталог времена"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_TITLE"
+msgid "Invalid delay"
+msgstr "Неисправно кашњење"
+
+msgctxt "IDS_UPDATE_DELAY_ERROR_MSG"
+msgid "Please enter a number between 1 and 365."
+msgstr "Унесите број између 1 и 365."
+
+msgctxt "IDS_AG_PNS_CENTER"
+msgid "PnS Center"
+msgstr "Центрирај кадар"
+
+msgctxt "IDS_AG_PNS_LEFT"
+msgid "PnS Left"
+msgstr "Помери кадар улево"
+
+msgctxt "IDS_AG_PNS_RIGHT"
+msgid "PnS Right"
+msgstr "Помери кадар удесно"
+
+msgctxt "IDS_AG_PNS_UP"
+msgid "PnS Up"
+msgstr "Помери кадар нагоре"
+
+msgctxt "IDS_AG_PNS_DOWN"
+msgid "PnS Down"
+msgstr "Помери кадар надоле"
+
+msgctxt "IDS_AG_PNS_UPLEFT"
+msgid "PnS Up/Left"
+msgstr "Помери кадар горе лево"
+
+msgctxt "IDS_AG_PNS_UPRIGHT"
+msgid "PnS Up/Right"
+msgstr "Помери кадар горе десно"
+
+msgctxt "IDS_AG_PNS_DOWNLEFT"
+msgid "PnS Down/Left"
+msgstr "Помери кадар доле лево"
+
+msgctxt "IDS_MPLAYERC_59"
+msgid "PnS Down/Right"
+msgstr "Помери кадар доле десно"
+
+msgctxt "IDS_AG_VOLUME_UP"
+msgid "Volume Up"
+msgstr "Појачај"
+
+msgctxt "IDS_AG_VOLUME_DOWN"
+msgid "Volume Down"
+msgstr "Смањи"
+
+msgctxt "IDS_AG_VOLUME_MUTE"
+msgid "Volume Mute"
+msgstr "Искључи звук"
+
+msgctxt "IDS_MPLAYERC_63"
+msgid "DVD Title Menu"
+msgstr "DVD – мени наслова"
+
+msgctxt "IDS_AG_DVD_ROOT_MENU"
+msgid "DVD Root Menu"
+msgstr "DVD – основни мени"
+
+msgctxt "IDS_MPLAYERC_65"
+msgid "DVD Subtitle Menu"
+msgstr "DVD – мени титлова"
+
+msgctxt "IDS_MPLAYERC_66"
+msgid "DVD Audio Menu"
+msgstr "DVD – мени звука"
+
+msgctxt "IDS_MPLAYERC_67"
+msgid "DVD Angle Menu"
+msgstr "DVD – мени углова"
+
+msgctxt "IDS_MPLAYERC_68"
+msgid "DVD Chapter Menu"
+msgstr "DVD – мени поглавља"
+
+msgctxt "IDS_AG_DVD_MENU_LEFT"
+msgid "DVD Menu Left"
+msgstr "DVD мени – улево"
+
+msgctxt "IDS_MPLAYERC_70"
+msgid "DVD Menu Right"
+msgstr "DVD мени – удесно"
+
+msgctxt "IDS_AG_DVD_MENU_UP"
+msgid "DVD Menu Up"
+msgstr "DVD мени – нагоре"
+
+msgctxt "IDS_AG_DVD_MENU_DOWN"
+msgid "DVD Menu Down"
+msgstr "DVD мени – надоле"
+
+msgctxt "IDS_MPLAYERC_73"
+msgid "DVD Menu Activate"
+msgstr "DVD мени – активирај"
+
+msgctxt "IDS_AG_DVD_MENU_BACK"
+msgid "DVD Menu Back"
+msgstr "DVD мени – назад"
+
+msgctxt "IDS_MPLAYERC_75"
+msgid "DVD Menu Leave"
+msgstr "DVD мени – напусти"
+
+msgctxt "IDS_AG_BOSS_KEY"
+msgid "Boss key"
+msgstr "Главни тастер"
+
+msgctxt "IDS_MPLAYERC_77"
+msgid "Player Menu"
+msgstr "Мени плејера"
+
+msgctxt "IDS_MPLAYERC_78"
+msgid "Player Menu (full)"
+msgstr "Мени плејера (пун)"
+
+msgctxt "IDS_AG_FILTERS_MENU"
+msgid "Filters Menu"
+msgstr "Мени филтера"
+
+msgctxt "IDS_AG_OPTIONS"
+msgid "Options"
+msgstr "Опције"
+
+msgctxt "IDS_AG_NEXT_AUDIO"
+msgid "Next Audio Track"
+msgstr ""
+
+msgctxt "IDS_AG_PREV_AUDIO"
+msgid "Prev Audio Track"
+msgstr ""
+
+msgctxt "IDS_AG_NEXT_SUBTITLE"
+msgid "Next Subtitle Track"
+msgstr ""
+
+msgctxt "IDS_AG_PREV_SUBTITLE"
+msgid "Prev Subtitle Track"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_85"
+msgid "On/Off Subtitle"
+msgstr "Укључи/искључи титл"
+
+msgctxt "IDS_MPLAYERC_86"
+msgid "Reload Subtitles"
+msgstr "Поново учитај титл"
+
+msgctxt "IDS_MPLAYERC_91"
+msgid "Next Angle (DVD)"
+msgstr "Следећи угао (DVD)"
+
+msgctxt "IDS_MPLAYERC_92"
+msgid "Prev Angle (DVD)"
+msgstr "Претходни угао (DVD)"
+
+msgctxt "IDS_MPLAYERC_93"
+msgid "Next Audio Track (DVD)"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_94"
+msgid "Prev Audio Track (DVD)"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_95"
+msgid "Next Subtitle Track (DVD)"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_96"
+msgid "Prev Subtitle Track (DVD)"
+msgstr ""
+
+msgctxt "IDS_MPLAYERC_97"
+msgid "On/Off Subtitle (DVD)"
+msgstr "Укључи/искључи титл (DVD)"
+
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr ""
+
+msgctxt "IDS_PPAGEWEBSERVER_0"
+msgid "Select the directory"
+msgstr "Избор фасцикле"
+
+msgctxt "IDS_FAVORITES_QUICKADDFAVORITE"
+msgid "Quick add favorite"
+msgstr "Брзо додај у омиљене"
+
+msgctxt "IDS_DVB_CHANNEL_NUMBER"
+msgid "N"
+msgstr "№"
+
+msgctxt "IDS_DVB_CHANNEL_NAME"
+msgid "Name"
+msgstr "Име"
+
+msgctxt "IDS_DVB_CHANNEL_FREQUENCY"
+msgid "Frequency"
+msgstr "Учесталост"
+
+msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
+msgid "Encrypted"
+msgstr "Шифровано"
+
+msgctxt "IDS_YES"
+msgid "Yes"
+msgstr "Да"
+
+msgctxt "IDS_NO"
+msgid "No"
+msgstr "Не"
+
+msgctxt "IDS_DVB_CHANNEL_START_SCAN"
+msgid "Start"
+msgstr "Покрени"
+
+msgctxt "IDS_DVB_CHANNEL_STOP_SCAN"
+msgid "Stop"
+msgstr "Заустави"
+
+msgctxt "IDS_DVB_TVNAV_SEERADIO"
+msgid "Radio stations"
+msgstr "Радио-станице"
+
+msgctxt "IDS_DVB_TVNAV_SEETV"
+msgid "TV stations"
+msgstr "ТВ станице"
+
+msgctxt "IDS_DVB_CHANNEL_FORMAT"
+msgid "Format"
+msgstr "Формат"
+
+msgctxt "IDS_MAINFRM_2"
+msgid "Focus lost to: %s - %s"
+msgstr "Фокус је прешао на: %s - %s"
+
+msgctxt "IDS_AG_SUBTITLES_SAVED"
+msgid "Subtitles saved"
+msgstr "Титлови су сачувани"
+
+msgctxt "IDS_MAINFRM_4"
+msgid "Cannot save subtitles"
+msgstr "Не могу да сачувам титлове"
+
+msgctxt "IDS_AG_FRAMERATE"
+msgid "Frame rate"
+msgstr "Учесталост кадрова"
+
+msgctxt "IDS_MAINFRM_6"
+msgid "drawn: %d, dropped: %d"
+msgstr "записано: %d, испуштено: %d"
+
+msgctxt "IDS_AG_FRAMES"
+msgid "Frames"
+msgstr "Кадрови"
+
+msgctxt "IDS_AG_BUFFERS"
+msgid "Buffers"
+msgstr "Бафери"
+
+msgctxt "IDS_MAINFRM_9"
+msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
+msgstr "Јачина звука: %02lu/%02lu, наслов: %02lu/%02lu, поглавље: %02lu/%02lu"
+
+msgctxt "IDS_MAINFRM_10"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Угао: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+
+msgctxt "IDS_MAINFRM_11"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d бита %d %s"
+
+msgctxt "IDS_ADD_TO_PLAYLIST"
+msgid "Add to MPC-HC Playlist"
+msgstr "Додај у плеј-листу MPC-HC-а"
+
+msgctxt "IDS_OPEN_WITH_MPC"
+msgid "Play with MPC-HC"
+msgstr "Репродукуј помоћу MPC-HC-а"
+
+msgctxt "IDS_CANNOT_CHANGE_FORMAT"
+msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
+msgstr "MPC-HC нема довољно овлашћења за промену повезаности датотека. Кликните на дугме „Покрени као администратор“."
+
+msgctxt "IDS_APP_DESCRIPTION"
+msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
+msgstr "MPC-HC је изузетно једноставан медијски плејер за Windows отвореног кода. Подржава репродуковање свих уобичајених аудио и видео формата. Не садржи шпијунски софтвер, огласе нити траке са алаткама трећих страна."
+
+msgctxt "IDS_MAINFRM_12"
+msgid "channel"
+msgstr "канал"
+
+msgctxt "IDS_MAINFRM_13"
+msgid "channels"
+msgstr "канала"
+
+msgctxt "IDS_AG_TITLE"
+msgid "Title %u"
+msgstr "Наслов %u"
+
+msgctxt "IDS_MAINFRM_16"
+msgid "DVD: Unexpected error"
+msgstr "DVD: неочекивана грешка"
+
+msgctxt "IDS_MAINFRM_17"
+msgid "DVD: Copy-Protect Fail"
+msgstr "DVD: проблем са заштитом од копирања"
+
+msgctxt "IDS_MAINFRM_18"
+msgid "DVD: Invalid DVD 1.x Disc"
+msgstr "DVD: неисправан DVD 1.x диск"
+
+msgctxt "IDS_MAINFRM_19"
+msgid "DVD: Invalid Disc Region"
+msgstr "DVD: неисправан регион диска"
+
+msgctxt "IDS_MAINFRM_20"
+msgid "DVD: Low Parental Level"
+msgstr "DVD: низак ниво родитељске контроле"
+
+msgctxt "IDS_MAINFRM_21"
+msgid "DVD: Macrovision Fail"
+msgstr "DVD: проблем са Macrovision-ом"
+
+msgctxt "IDS_MAINFRM_22"
+msgid "DVD: Incompatible System And Decoder Regions"
+msgstr "DVD: неисправни региони система и декодера"
+
+msgctxt "IDS_MAINFRM_23"
+msgid "DVD: Incompatible Disc And Decoder Regions"
+msgstr "DVD: некомпатибилни региони диска и декодера"
+
+msgctxt "IDS_D3DFS_WARNING"
+msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
+msgstr "Ова опција је намењена у сврхе спречавања цепања. Ипак, за време репродукције, контекстуални мени MPC-HC-а и било који дијалог неће моћи да се прикажу.\n\nЗаиста желите да активирате ову опцију?"
+
+msgctxt "IDS_MAINFRM_139"
+msgid "Sub delay: %ld ms"
+msgstr "Кашњење титла: %ld мс"
+
+msgctxt "IDS_AG_TITLE2"
+msgid "Title: %02d/%02d"
+msgstr "Наслов: %02d/%02d"
+
+msgctxt "IDS_REALVIDEO_INCOMPATIBLE"
+msgid "Filename contains unsupported characters (use only A-Z, 0-9)"
+msgstr "Име датотеке садржи неподржане знакове (користите само A–Z, 0–9)"
+
+msgctxt "IDS_THUMB_ROWNUMBER"
+msgid "Rows:"
+msgstr "Редова:"
+
+msgctxt "IDS_THUMB_COLNUMBER"
+msgid "Columns:"
+msgstr "Колона:"
+
+msgctxt "IDS_THUMB_IMAGE_WIDTH"
+msgid "Image width"
+msgstr "Ширина слике"
+
+msgctxt "IDS_AG_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Однос ширина/висина"
+
+msgctxt "IDS_MAINFRM_37"
+msgid ", Total: %ld, Dropped: %ld"
+msgstr ", укупно: %ld, испуштено: %ld"
+
+msgctxt "IDS_MAINFRM_38"
+msgid ", Size: %I64d KB"
+msgstr ", величина: %I64d KB"
+
+msgctxt "IDS_MAINFRM_39"
+msgid ", Size: %I64d MB"
+msgstr ", величина: %I64d MB"
+
+msgctxt "IDS_MAINFRM_40"
+msgid ", Free: %I64d KB"
+msgstr ", слободно: %I64d KB"
+
+msgctxt "IDS_MAINFRM_41"
+msgid ", Free: %I64d MB"
+msgstr ", слободно: %I64d MB"
+
+msgctxt "IDS_MAINFRM_42"
+msgid ", Free V/A Buffers: %03d/%03d"
+msgstr ", слободно бафера: %03d/%03d"
+
+msgctxt "IDS_AG_ERROR"
+msgid "Error"
+msgstr "Грешка"
+
+msgctxt "IDS_SUBTITLE_STREAM_OFF"
+msgid "Subtitle: off"
+msgstr "Титл: искључен"
+
+msgctxt "IDS_SUBTITLE_STREAM"
+msgid "Subtitle: %s"
+msgstr "Титл: %s"
+
+msgctxt "IDS_MAINFRM_46"
+msgid "Select the path for the DVD/BD:"
+msgstr "Избор путање DVD-а/BD-а"
+
+msgctxt "IDS_SUB_LOADED_SUCCESS"
+msgid " loaded successfully"
+msgstr " успешно учитано"
+
+msgctxt "IDS_ALL_FILES_FILTER"
+msgid "All files (*.*)|*.*||"
+msgstr "Све датотеке (*.*)|*.*||"
+
+msgctxt "IDS_GETDIB_FAILED"
+msgid "GetDIB failed, hr = %08x"
+msgstr "Проблем са GetDIB-ом, hr = %08x"
+
+msgctxt "IDS_GETCURRENTIMAGE_FAILED"
+msgid "GetCurrentImage failed, hr = %08x"
+msgstr "Проблем са GetCurrentImage-ом, hr = %08x"
+
+msgctxt "IDS_SCREENSHOT_ERROR"
+msgid "Cannot create file"
+msgstr "Не могу да креирам датотеку"
+
+msgctxt "IDS_THUMBNAILS_NO_DURATION"
+msgid "Cannot create thumbnails for files with no duration"
+msgstr "Не могу да креирам сличице за датотеке које немају трајање"
+
+msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
+msgid "Failed to get video frame size"
+msgstr "Не могу да преузмем величину видео-кадра"
+
+msgctxt "IDS_OUT_OF_MEMORY"
+msgid "Out of memory, go buy some more!"
+msgstr "Нема довољно слободног простора!"
+
+msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
+msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
+msgstr "Неисправан формат слике. Не могу да креирам сличице од битмапа %d bpp."
+
+msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
+msgid "File Size: %s (%s bytes)\\N"
+msgstr "Величина датотеке: %s (%s bytes)\\N"
+
+msgctxt "IDS_THUMBNAILS_INFO_HEADER"
+msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Име датотеке: %s\\N%sРезолуција: %dx%d %s\\NТрајање: %02d:%02d:%02d"
+
+msgctxt "IDS_THUMBNAIL_TOO_SMALL"
+msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
+msgstr "Не могу да креирам сличице јер би биле премале.\n\nПробајте да смањите број сличица или повећате укупну величину."
+
+msgctxt "IDS_CANNOT_LOAD_SUB"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Да бисте могли да учитате титл, потребно је да промените видео-рендерер и поново покренете датотеку.\n– DirectShow: VMR-9 (без рендера), EVR (CP), Sync, madVR или Haali\n– RealMedia: посебан рендерер за RealMedia формат; могуће је отварање и кроз DirectShow\n– QuickTime: DX7 или DX9 рендерер за QuickTime\n– ShockWave: недоступно"
+
+msgctxt "IDS_SUBTITLE_FILES_FILTER"
+msgid "Subtitle files"
+msgstr "Датотеке титлова"
+
+msgctxt "IDS_MAINFRM_68"
+msgid "Aspect Ratio: %ld:%ld"
+msgstr "Однос ширина/висина: %ld:%ld"
+
+msgctxt "IDS_MAINFRM_69"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr ""
+
+msgctxt "IDS_MAINFRM_70"
+msgid "Audio delay: %I64d ms"
+msgstr "Кашњење звука: %I64d мс"
+
+msgctxt "IDS_AG_CHAPTER"
+msgid "Chapter %d"
+msgstr "Поглавље %d"
+
+msgctxt "IDS_AG_OUT_OF_MEMORY"
+msgid "Out of memory"
+msgstr "Нема меморије"
+
+msgctxt "IDS_MAINFRM_77"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Грешка: потребан је Adobe Flash Player за Internet Explorer"
+
+msgctxt "IDS_MAINFRM_78"
+msgid "QuickTime not yet supported for X64 (apple library not available)"
+msgstr "Системи са 64 бита још увек не подржавају QuickTime (Apple-ова библиотека није доступна)"
+
+msgctxt "IDS_MAINFRM_80"
+msgid "Failed to create the filter graph object"
+msgstr "Не могу да креирам објекат у графикону филтера"
+
+msgctxt "IDS_MAINFRM_81"
+msgid "Invalid argument"
+msgstr "Неисправан аргумент"
+
+msgctxt "IDS_MAINFRM_82"
+msgid "Opening aborted"
+msgstr "Отварање је прекинуто"
+
+msgctxt "IDS_MAINFRM_83"
+msgid "Failed to render the file"
+msgstr "Не могу да обрадим датотеку"
+
+msgctxt "IDS_AG_CHAPTER2"
+msgid "Chapter: "
+msgstr "Поглавље: "
+
+msgctxt "IDS_VOLUME_OSD"
+msgid "Vol: %d%%"
+msgstr "Јачина звука: %d%%"
+
+msgctxt "IDS_BOOST_OSD"
+msgid "Boost: +%u%%"
+msgstr "Појачање: +%u%%"
+
+msgctxt "IDS_BALANCE_OSD"
+msgid "Balance: %s"
+msgstr "Баланс: %s"
+
+msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
+msgid "Current"
+msgstr "тренутни"
+
+msgctxt "IDS_MAINFRM_DIR_TITLE"
+msgid "Select Directory"
+msgstr "Избор фасцикле"
+
+msgctxt "IDS_MAINFRM_DIR_CHECK"
+msgid "Include subdirectories"
+msgstr "Укључи потфасцикле"
+
+msgctxt "IDS_AG_PAUSE"
+msgid "Pause"
+msgstr "Паузирај"
+
+msgctxt "IDS_AG_TOGGLE_CAPTION"
+msgid "Toggle Caption&Menu"
+msgstr "Укључи/искључи наслов и мени"
+
+msgctxt "IDS_AG_TOGGLE_SEEKER"
+msgid "Toggle Seek Bar"
+msgstr "Укључи/искључи траку за премотавање"
+
+msgctxt "IDS_AG_TOGGLE_CONTROLS"
+msgid "Toggle Controls"
+msgstr "Укључи/искључи контроле"
+
+msgctxt "IDS_MAINFRM_84"
+msgid "Invalid file name"
+msgstr "Неисправно име датотеке"
+
+msgctxt "IDS_MAINFRM_86"
+msgid "Cannot connect the filters"
+msgstr "Не могу да повежем филтере"
+
+msgctxt "IDS_MAINFRM_87"
+msgid "Cannot load any source filter"
+msgstr "Не могу да учитам ниједан изворни филтер"
+
+msgctxt "IDS_MAINFRM_88"
+msgid "Cannot render the file"
+msgstr "Не могу да обрадим датотеку"
+
+msgctxt "IDS_MAINFRM_89"
+msgid "Invalid file format"
+msgstr "Неисправан формат датотеке"
+
+msgctxt "IDS_MAINFRM_90"
+msgid "File not found"
+msgstr "Датотека није пронађена"
+
+msgctxt "IDS_MAINFRM_91"
+msgid "Unknown file type"
+msgstr "Непознат тип датотеке"
+
+msgctxt "IDS_MAINFRM_92"
+msgid "Unsupported stream"
+msgstr "Неподржан ток"
+
+msgctxt "IDS_MAINFRM_93"
+msgid "Cannot find DVD directory"
+msgstr "Не могу да пронађем фасциклу DVD-а"
+
+msgctxt "IDS_MAINFRM_94"
+msgid "Can't create the DVD Navigator filter"
+msgstr "Не могу да креирам филтер DVD навигатора"
+
+msgctxt "IDS_AG_FAILED"
+msgid "Failed"
+msgstr "Неуспело"
+
+msgctxt "IDS_MAINFRM_96"
+msgid "Can't create video capture filter"
+msgstr "Не могу да креирам филтер за снимање видео-записа"
+
+msgctxt "IDS_MAINFRM_98"
+msgid "No capture filters"
+msgstr "Нема филтера за снимање"
+
+msgctxt "IDS_MAINFRM_99"
+msgid "Can't create capture graph builder object"
+msgstr "Не могу да креирам објекат алатке за израду графикона снимања"
+
+msgctxt "IDS_MAINFRM_108"
+msgid "Couldn't open any device"
+msgstr "Не могу да отворим ниједан уређај"
+
+msgctxt "IDS_AG_SOUND"
+msgid "Sound"
+msgstr "Звук"
+
+msgctxt "IDS_MAINFRM_114"
+msgid "%s was not found, please insert media containing this file."
+msgstr "%s није пронађен. Унесите медијум са овом датотеком."
+
+msgctxt "IDS_AG_ABORTED"
+msgid "Aborted"
+msgstr "Прекинуто"
+
+msgctxt "IDS_MAINFRM_116"
+msgid "&Properties..."
+msgstr "&Својства…"
+
+msgctxt "IDS_MAINFRM_117"
+msgid " (pin) properties..."
+msgstr " (pin) својства…"
+
+msgctxt "IDS_AG_UNKNOWN_STREAM"
+msgid "Unknown Stream"
+msgstr "Непознат ток"
+
+msgctxt "IDS_AG_UNKNOWN"
+msgid "Unknown %u"
+msgstr "Непознат %u"
+
+msgctxt "IDS_AG_VSYNC"
+msgid "VSync"
+msgstr "Вертикална синхронизација"
+
+msgctxt "IDS_MAINFRM_121"
+msgid " (Director Comments 1)"
+msgstr " (коментари режисера 1)"
+
+msgctxt "IDS_MAINFRM_122"
+msgid " (Director Comments 2)"
+msgstr " (коментари режисера 2)"
+
+msgctxt "IDS_DVD_SUBTITLES_ENABLE"
+msgid "Enable DVD subtitles"
+msgstr "Омогући титлове DVD-а"
+
+msgctxt "IDS_AG_ANGLE"
+msgid "Angle %u"
+msgstr "Угао %u"
+
+msgctxt "IDS_AG_VSYNCOFFSET_INCREASE"
+msgid "Increase VSync Offset"
+msgstr "Повећај помак вертикалне синхронизације"
+
+msgctxt "IDS_AG_DISABLED"
+msgid "Disabled"
+msgstr "Онемогућено"
+
+msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
+msgid "Decrease VSync Offset"
+msgstr "Смањи помак вертикалне синхронизације"
+
+msgctxt "IDS_MAINFRM_136"
+msgid "MPC-HC D3D Fullscreen"
+msgstr "MPC-HC D3D режим целог екрана"
+
+msgctxt "IDS_MAINFRM_137"
+msgid "Unknown format"
+msgstr "Непознат формат"
+
+msgctxt "IDS_MAINFRM_138"
+msgid "Sub shift: %ld ms"
+msgstr "Померање титла: %ld мс"
+
+msgctxt "IDS_VOLUME_BOOST_INC"
+msgid "Volume boost increase"
+msgstr "Повиси појачање звука"
+
+msgctxt "IDS_VOLUME_BOOST_DEC"
+msgid "Volume boost decrease"
+msgstr "Понизи појачање звука"
+
+msgctxt "IDS_VOLUME_BOOST_MIN"
+msgid "Volume boost Min"
+msgstr "Минимално појачање звука"
+
+msgctxt "IDS_VOLUME_BOOST_MAX"
+msgid "Volume boost Max"
+msgstr "Максимално појачање звука"
+
+msgctxt "IDS_USAGE"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
+
+msgctxt "IDS_UNKNOWN_SWITCH"
+msgid "Unrecognized switch(es) found in command line string: \n\n"
+msgstr "У командној линији су пронађени непознати прекидачи: \n\n"
+
+msgctxt "IDS_AG_TOGGLE_INFO"
+msgid "Toggle Information"
+msgstr "Укључи/искључи информације"
+
+msgctxt "IDS_AG_TOGGLE_STATS"
+msgid "Toggle Statistics"
+msgstr "Укључи/искључи статистику"
+
+msgctxt "IDS_AG_TOGGLE_STATUS"
+msgid "Toggle Status"
+msgstr "Укључи/искључи статусну траку"
+
+msgctxt "IDS_AG_TOGGLE_SUBRESYNC"
+msgid "Toggle Subresync Bar"
+msgstr "Укључи/искључи траку за синхронизовање титлова"
+
+msgctxt "IDS_AG_TOGGLE_PLAYLIST"
+msgid "Toggle Playlist Bar"
+msgstr "Укључи/искључи траку плеј-листе"
+
+msgctxt "IDS_AG_TOGGLE_CAPTURE"
+msgid "Toggle Capture Bar"
+msgstr "Укључи/искључи траку за снимање"
+
+msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
+msgid "Toggle Debug Shaders"
+msgstr "Укључи/искључи отклањање грешака модула за сенчење"
+
+msgctxt "IDS_AG_ZOOM_50"
+msgid "Zoom 50%"
+msgstr "Зум 50%"
+
+msgctxt "IDS_AG_ZOOM_100"
+msgid "Zoom 100%"
+msgstr "Зум 100%"
+
+msgctxt "IDS_AG_ZOOM_200"
+msgid "Zoom 200%"
+msgstr "Зум 200%"
+
+msgctxt "IDS_AG_NEXT_AR_PRESET"
+msgid "Next AR Preset"
+msgstr "Следећи шаблон пропорција"
+
+msgctxt "IDS_AG_VIDFRM_STRETCH"
+msgid "VidFrm Stretch"
+msgstr "Видео-кадар: растегни до величине прозора"
+
+msgctxt "IDS_AG_VIDFRM_INSIDE"
+msgid "VidFrm Inside"
+msgstr "Видео-кадар: додирни прозор изнутра"
+
+msgctxt "IDS_AG_VIDFRM_OUTSIDE"
+msgid "VidFrm Outside"
+msgstr "Видео-кадар: додирни прозор споља"
+
+msgctxt "IDS_AG_PNS_RESET"
+msgid "PnS Reset"
+msgstr "Врати подразумевано"
+
+msgctxt "IDS_AG_PNS_ROTATEX_P"
+msgid "PnS Rotate X+"
+msgstr "Ротирај кадар по оси X+"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM1"
+msgid "VidFrm Zoom 1"
+msgstr "Видео-кадар: зум 1"
+
+msgctxt "IDS_AG_VIDFRM_ZOOM2"
+msgid "VidFrm Zoom 2"
+msgstr "Видео-кадар: зум 2"
+
+msgctxt "IDS_AG_VIDFRM_SWITCHZOOM"
+msgid "VidFrm Switch Zoom"
+msgstr "Видео-кадар: промени зум"
+
+msgctxt "IDS_ENABLE_ALL_FILTERS"
+msgid "&Enable all filters"
+msgstr "&Омогући све филтере"
+
+msgctxt "IDS_LOGO_AUTHOR"
+msgid "Author unknown. Contact us if you made this logo!"
+msgstr "Аутор је непознат. Контактирајте нас ако сте то ви!"
+
+msgctxt "IDS_NO_MORE_MEDIA"
+msgid "No more media in the current folder."
+msgstr "Нема више медија у тренутној фасцикли."
+
+msgctxt "IDS_FIRST_IN_FOLDER"
+msgid "The first file of the folder is already loaded."
+msgstr "Прва датотека фасцикле је већ учитана."
+
+msgctxt "IDS_LAST_IN_FOLDER"
+msgid "The last file of the folder is already loaded."
+msgstr "Последња датотека фасцикле је већ учитана."
+
+msgctxt "IDS_FRONT_LEFT"
+msgid "Front Left"
+msgstr "Предњи леви"
+
+msgctxt "IDS_FRONT_RIGHT"
+msgid "Front Right"
+msgstr "Предњи десни"
+
+msgctxt "IDS_FRONT_CENTER"
+msgid "Front Center"
+msgstr "Предњи центар"
+
+msgctxt "IDS_LOW_FREQUENCY"
+msgid "Low Frequency"
+msgstr "Сабвуфер"
+
+msgctxt "IDS_BACK_LEFT"
+msgid "Back Left"
+msgstr "Задњи леви"
+
+msgctxt "IDS_BACK_RIGHT"
+msgid "Back Right"
+msgstr "Задњи десни"
+
+msgctxt "IDS_FRONT_LEFT_OF_CENTER"
+msgid "Front Left of Center"
+msgstr "Предњи леви од центра"
+
+msgctxt "IDS_FRONT_RIGHT_OF_CENTER"
+msgid "Front Right of Center"
+msgstr "Предњи десни од центра"
+
+msgctxt "IDS_BACK_CENTER"
+msgid "Back Center"
+msgstr "Задњи центар"
+
+msgctxt "IDS_SIDE_LEFT"
+msgid "Side Left"
+msgstr "Леви са стране"
+
+msgctxt "IDS_SIDE_RIGHT"
+msgid "Side Right"
+msgstr "Десни са стране"
+
+msgctxt "IDS_TOP_CENTER"
+msgid "Top Center"
+msgstr "Врх центар"
+
+msgctxt "IDS_TOP_FRONT_LEFT"
+msgid "Top Front Left"
+msgstr "Врх предњи леви"
+
+msgctxt "IDS_TOP_FRONT_CENTER"
+msgid "Top Front Center"
+msgstr "Врх предњи центар"
+
+msgctxt "IDS_TOP_FRONT_RIGHT"
+msgid "Top Front Right"
+msgstr "Врх предњи десни"
+
+msgctxt "IDS_TOP_BACK_LEFT"
+msgid "Top Back Left"
+msgstr "Врх задњи леви"
+
+msgctxt "IDS_TOP_BACK_CENTER"
+msgid "Top Back Center"
+msgstr "Врх задњи центар"
+
+msgctxt "IDS_TOP_BACK_RIGHT"
+msgid "Top Back Right"
+msgstr "Врх задњи десни"
+
+msgctxt "IDS_TIME_TOOLTIP_ABOVE"
+msgid "Above seek bar"
+msgstr "изнад траке за премотавање"
+
+msgctxt "IDS_TIME_TOOLTIP_BELOW"
+msgid "Below seek bar"
+msgstr "испод траке за премотавање"
+
+msgctxt "IDS_VIDEO_STREAM"
+msgid "Video: %s"
+msgstr "Видео: %s"
+
+msgctxt "IDS_APPLY"
+msgid "Apply"
+msgstr "Примени"
+
+msgctxt "IDS_CLEAR"
+msgid "Clear"
+msgstr "Очисти"
+
+msgctxt "IDS_CANCEL"
+msgid "Cancel"
+msgstr "Откажи"
+
+msgctxt "IDS_THUMB_THUMBNAILS"
+msgid "Layout"
+msgstr "Распоред"
+
+msgctxt "IDS_THUMB_PIXELS"
+msgid "Pixels:"
+msgstr "Пиксела:"
+
+msgctxt "IDS_TEXTFILE_ENC"
+msgid "Encoding:"
+msgstr "Кодирање:"
+
+msgctxt "IDS_DISABLE_ALL_FILTERS"
+msgid "&Disable all filters"
+msgstr "&Онемогући све филтере"
+
+msgctxt "IDS_ENABLE_AUDIO_FILTERS"
+msgid "Enable all audio decoders"
+msgstr "Омогући све аудио-декодере"
+
+msgctxt "IDS_DISABLE_AUDIO_FILTERS"
+msgid "Disable all audio decoders"
+msgstr "Онемогући све аудио-декодере"
+
+msgctxt "IDS_ENABLE_VIDEO_FILTERS"
+msgid "Enable all video decoders"
+msgstr "Омогући све видео-декодере"
+
+msgctxt "IDS_DISABLE_VIDEO_FILTERS"
+msgid "Disable all video decoders"
+msgstr "Онемогући све видео-декодере"
+
+msgctxt "IDS_STRETCH_TO_WINDOW"
+msgid "Stretch To Window"
+msgstr "Растегни до величине прозора"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_INSIDE"
+msgid "Touch Window From Inside"
+msgstr "Додирни прозор изнутра"
+
+msgctxt "IDS_ZOOM1"
+msgid "Zoom 1"
+msgstr "Зум 1"
+
+msgctxt "IDS_ZOOM2"
+msgid "Zoom 2"
+msgstr "Зум 2"
+
+msgctxt "IDS_TOUCH_WINDOW_FROM_OUTSIDE"
+msgid "Touch Window From Outside"
+msgstr "Додирни прозор споља"
+
+msgctxt "IDS_AUDIO_STREAM"
+msgid "Audio: %s"
+msgstr "Аудио: %s"
+
+msgctxt "IDS_AG_REOPEN"
+msgid "Reopen File"
+msgstr "Поново отвори датотеку"
+
+msgctxt "IDS_MFMT_AVI"
+msgid "AVI"
+msgstr "AVI"
+
+msgctxt "IDS_MFMT_MPEG"
+msgid "MPEG"
+msgstr "MPEG"
+
+msgctxt "IDS_MFMT_MPEGTS"
+msgid "MPEG-TS"
+msgstr "MPEG-TS"
+
+msgctxt "IDS_MFMT_DVDVIDEO"
+msgid "DVD-Video"
+msgstr "DVD-Video"
+
+msgctxt "IDS_MFMT_MKV"
+msgid "Matroska"
+msgstr "Matroska"
+
+msgctxt "IDS_MFMT_WEBM"
+msgid "WebM"
+msgstr "WebM"
+
+msgctxt "IDS_MFMT_MP4"
+msgid "MP4"
+msgstr "MP4"
+
+msgctxt "IDS_MFMT_MOV"
+msgid "QuickTime Movie"
+msgstr "QuickTime Movie"
+
+msgctxt "IDS_MFMT_3GP"
+msgid "3GP"
+msgstr "3GP"
+
+msgctxt "IDS_MFMT_3G2"
+msgid "3G2"
+msgstr "3G2"
+
+msgctxt "IDS_MFMT_FLV"
+msgid "Flash Video"
+msgstr "Flash Video"
+
+msgctxt "IDS_MFMT_OGM"
+msgid "Ogg Media"
+msgstr "Ogg Media"
+
+msgctxt "IDS_MFMT_RM"
+msgid "Real Media"
+msgstr "RealMedia"
+
+msgctxt "IDS_MFMT_RT"
+msgid "Real Script"
+msgstr "Real Script"
+
+msgctxt "IDS_MFMT_WMV"
+msgid "Windows Media Video"
+msgstr "Windows Media Video"
+
+msgctxt "IDS_MFMT_BINK"
+msgid "Smacker/Bink Video"
+msgstr "Smacker/Bink Video"
+
+msgctxt "IDS_MFMT_FLIC"
+msgid "FLIC Animation"
+msgstr "FLIC Animation"
+
+msgctxt "IDS_MFMT_DSM"
+msgid "DirectShow Media"
+msgstr "DirectShow Media"
+
+msgctxt "IDS_MFMT_IVF"
+msgid "Indeo Video Format"
+msgstr "Indeo Video Format"
+
+msgctxt "IDS_MFMT_OTHER"
+msgid "Other"
+msgstr "Друго"
+
+msgctxt "IDS_MFMT_SWF"
+msgid "Shockwave Flash"
+msgstr "Shockwave Flash"
+
+msgctxt "IDS_MFMT_OTHER_AUDIO"
+msgid "Other Audio"
+msgstr "Други аудио-формати"
+
+msgctxt "IDS_MFMT_AC3"
+msgid "AC-3"
+msgstr ""
+
+msgctxt "IDS_MFMT_AIFF"
+msgid "AIFF"
+msgstr "AIFF"
+
+msgctxt "IDS_MFMT_ALAC"
+msgid "Apple Lossless"
+msgstr "Apple Lossless"
+
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr ""
+
+msgctxt "IDS_MFMT_AMR"
+msgid "AMR"
+msgstr "AMR"
+
+msgctxt "IDS_MFMT_APE"
+msgid "Monkey's Audio"
+msgstr "Monkey's Audio"
+
+msgctxt "IDS_MFMT_AU"
+msgid "AU/SND"
+msgstr "AU/SND"
+
+msgctxt "IDS_MFMT_CDA"
+msgid "Audio CD track"
+msgstr "Audio CD Track"
+
+msgctxt "IDS_MFMT_FLAC"
+msgid "FLAC"
+msgstr "FLAC"
+
+msgctxt "IDS_MFMT_M4A"
+msgid "MPEG-4 Audio"
+msgstr "MPEG-4 Audio"
+
+msgctxt "IDS_MFMT_MIDI"
+msgid "MIDI"
+msgstr "MIDI"
+
+msgctxt "IDS_MFMT_MKA"
+msgid "Matroska audio"
+msgstr "Matroska Audio"
+
+msgctxt "IDS_MFMT_MP3"
+msgid "MP3"
+msgstr "MP3"
+
+msgctxt "IDS_MFMT_MPA"
+msgid "MPEG audio"
+msgstr "MPEG audio"
+
+msgctxt "IDS_MFMT_MPC"
+msgid "Musepack"
+msgstr "Musepack"
+
+msgctxt "IDS_MFMT_OFR"
+msgid "OptimFROG"
+msgstr "OptimFROG"
+
+msgctxt "IDS_MFMT_OGG"
+msgid "Ogg Vorbis"
+msgstr "Ogg Vorbis"
+
+msgctxt "IDS_MFMT_RA"
+msgid "Real Audio"
+msgstr "Real Audio"
+
+msgctxt "IDS_MFMT_TAK"
+msgid "TAK"
+msgstr "TAK"
+
+msgctxt "IDS_MFMT_TTA"
+msgid "True Audio"
+msgstr "True Audio"
+
+msgctxt "IDS_MFMT_PLS"
+msgid "Playlist"
+msgstr "Плеј-листа"
+
+msgctxt "IDS_MFMT_BDPLS"
+msgid "Blu-ray playlist"
+msgstr "Blu-ray плеј-листа"
+
+msgctxt "IDS_MFMT_RAR"
+msgid "RAR Archive"
+msgstr "RAR архива"
+
+msgctxt "IDS_DVB_CHANNEL_FPS"
+msgid "FPS"
+msgstr "FPS"
+
+msgctxt "IDS_DVB_CHANNEL_RESOLUTION"
+msgid "Resolution"
+msgstr "Резолуција"
+
+msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
+msgid "Aspect Ratio"
+msgstr "Однос ширина/висина"
+
+msgctxt "IDS_OSD_RS_VSYNC_ON"
+msgid "VSync: On"
+msgstr "Вертикална синхронизација: укључено"
+
+msgctxt "IDS_OSD_RS_VSYNC_OFF"
+msgid "VSync: Off"
+msgstr "Вертикална синхронизација: искључено"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_ON"
+msgid "Accurate VSync: On"
+msgstr "Прецизна вертикална синхронизација: укључено"
+
+msgctxt "IDS_OSD_RS_ACCURATE_VSYNC_OFF"
+msgid "Accurate VSync: Off"
+msgstr "Прецизна вертикална синхронизација: искључено"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_ON"
+msgid "Synchronize Video to Display: On"
+msgstr "Синхронизовање видеа са приказом: укључено"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_DISPLAY_OFF"
+msgid "Synchronize Video to Display: Off"
+msgstr "Синхронизовање видеа са приказом: искључено"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_ON"
+msgid "Synchronize Display to Video: On"
+msgstr "Синхронизовање приказа са видеом: укључено"
+
+msgctxt "IDS_OSD_RS_SYNC_TO_VIDEO_OFF"
+msgid "Synchronize Display to Video: Off"
+msgstr "Синхронизовање приказа са видеом: искључено"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_ON"
+msgid "Present at Nearest VSync: On"
+msgstr "Прикажи са најближом верт. синхр.: укључено"
+
+msgctxt "IDS_OSD_RS_PRESENT_NEAREST_OFF"
+msgid "Present at Nearest VSync: Off"
+msgstr "Прикажи са најближом верт. синхр.: искључено"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
+msgid "Color Management: On"
+msgstr "Управљање бојама: укључено"
+
+msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
+msgid "Color Management: Off"
+msgstr "Управљање бојама: искључено"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
+msgid "Input Type: Auto-Detect"
+msgstr "Тип улаза: аутоматски"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
+msgid "Input Type: HDTV"
+msgstr "Тип улаза: HDTV"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_NTSC"
+msgid "Input Type: SDTV NTSC"
+msgstr "Тип улаза: SDTV NTSC"
+
+msgctxt "IDS_OSD_RS_INPUT_TYPE_SD_PAL"
+msgid "Input Type: SDTV PAL"
+msgstr "Тип улаза: SDTV PAL"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
+msgid "Ambient Light: Bright (2.2 Gamma)"
+msgstr "Околна осветљеност: светло (гама 2.2)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
+msgid "Ambient Light: Dim (2.35 Gamma)"
+msgstr "Околна осветљеност: затамњено (гама 2.35)"
+
+msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
+msgid "Ambient Light: Dark (2.4 Gamma)"
+msgstr "Околна осветљеност: тамно (гама 2.4)"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
+msgid "Rendering Intent: Perceptual"
+msgstr "Циљ рендеровања: перцепција"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_RELATIVE"
+msgid "Rendering Intent: Relative Colorimetric"
+msgstr "Циљ рендеровања: релативна колориметрија"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_SATUR"
+msgid "Rendering Intent: Saturation"
+msgstr "Циљ рендеровања: засићеност"
+
+msgctxt "IDS_OSD_RS_REND_INTENT_ABSOLUTE"
+msgid "Rendering Intent: Absolute Colorimetric"
+msgstr "Циљ рендеровања: апсолутна колориметрија"
+
+msgctxt "IDS_OSD_RS_OUTPUT_RANGE"
+msgid "Output Range: %s"
+msgstr "Излазни опсег: %s"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_ON"
+msgid "Flush GPU before VSync: On"
+msgstr "Испразни GPU пре верт. синхр.: укључено"
+
+msgctxt "IDS_OSD_RS_FLUSH_BEF_VSYNC_OFF"
+msgid "Flush GPU before VSync: Off"
+msgstr "Испразни GPU пре верт. синхр.: искључено"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_ON"
+msgid "Flush GPU after Present: On"
+msgstr "Испразни GPU након репродукције: укључено"
+
+msgctxt "IDS_OSD_RS_FLUSH_AFT_PRES_OFF"
+msgid "Flush GPU after Present: Off"
+msgstr "Испразни GPU након репродукције: искључено"
+
+msgctxt "IDS_OSD_RS_WAIT_ON"
+msgid "Wait for GPU Flush: On"
+msgstr "Чекај на пражњење GPU-а: укључено"
+
+msgctxt "IDS_OSD_RS_WAIT_OFF"
+msgid "Wait for GPU Flush: Off"
+msgstr "Чекај на пражњење GPU-а: искључено"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_ON"
+msgid "D3D Fullscreen: On"
+msgstr "D3D режим целог екрана: укључено"
+
+msgctxt "IDS_OSD_RS_D3D_FULLSCREEN_OFF"
+msgid "D3D Fullscreen: Off"
+msgstr "D3D режим целог екрана: искључено"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
+msgid "Disable desktop composition: On"
+msgstr "Онемогући састављање радне површине: укључено"
+
+msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
+msgid "Disable desktop composition: Off"
+msgstr "Онемогући састављање радне површине: искључено"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
+msgid "Alternative VSync: On"
+msgstr "Алтернативна вертикална синхронизација: укључено"
+
+msgctxt "IDS_OSD_RS_ALT_VSYNC_OFF"
+msgid "Alternative VSync: Off"
+msgstr "Алтернативна вертикална синхронизација: искључено"
+
+msgctxt "IDS_OSD_RS_RESET_DEFAULT"
+msgid "Renderer settings reset to default"
+msgstr "Поставке рендерера су враћене на подразумеване"
+
+msgctxt "IDS_OSD_RS_RESET_OPTIMAL"
+msgid "Renderer settings reset to optimal"
+msgstr "Поставке рендерера су враћене на оптималне"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_ON"
+msgid "D3D Fullscreen GUI Support: On"
+msgstr "D3D режим целог екрана уз GUI: укључено"
+
+msgctxt "IDS_OSD_RS_D3D_FS_GUI_SUPP_OFF"
+msgid "D3D Fullscreen GUI Support: Off"
+msgstr "D3D режим целог екрана уз GUI: искључено"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_ON"
+msgid "10-bit RGB Output: On"
+msgstr "10-битни RGB излаз: укључено"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_OUT_OFF"
+msgid "10-bit RGB Output: Off"
+msgstr "10-битни RGB излаз: искључено"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_ON"
+msgid "Force 10-bit RGB Input: On"
+msgstr "Наметни 10-битни RGB улаз: укључено"
+
+msgctxt "IDS_OSD_RS_10BIT_RBG_IN_OFF"
+msgid "Force 10-bit RGB Input: Off"
+msgstr "Наметни 10-битни RGB улаз: искључено"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_ON"
+msgid "Full Floating Point Processing: On"
+msgstr "Обрада броја с покретним зарезом са потпуном прецизношћу: укључено"
+
+msgctxt "IDS_OSD_RS_FULL_FP_PROCESS_OFF"
+msgid "Full Floating Point Processing: Off"
+msgstr "Обрада броја с покретним зарезом са потпуном прецизношћу: искључено"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_ON"
+msgid "Half Floating Point Processing: On"
+msgstr "Обрада броја с покретним зарезом са половичном прецизношћу: укључено"
+
+msgctxt "IDS_OSD_RS_HALF_FP_PROCESS_OFF"
+msgid "Half Floating Point Processing: Off"
+msgstr "Обрада броја с покретним зарезом са половичном прецизношћу: искључено"
+
+msgctxt "IDS_BRIGHTNESS_DEC"
+msgid "Brightness decrease"
+msgstr "Смањи осветљеност"
+
+msgctxt "IDS_CONTRAST_INC"
+msgid "Contrast increase"
+msgstr "Повећај контраст"
+
+msgctxt "IDS_CONTRAST_DEC"
+msgid "Contrast decrease"
+msgstr "Смањи контраст"
+
+msgctxt "IDS_HUE_INC"
+msgid "Hue increase"
+msgstr "Повећај нијансе"
+
+msgctxt "IDS_HUE_DEC"
+msgid "Hue decrease"
+msgstr "Смањи нијансе"
+
+msgctxt "IDS_SATURATION_INC"
+msgid "Saturation increase"
+msgstr "Повећај засићеност"
+
+msgctxt "IDS_SATURATION_DEC"
+msgid "Saturation decrease"
+msgstr "Смањи засићеност"
+
+msgctxt "IDS_RESET_COLOR"
+msgid "Reset color settings"
+msgstr "Врати подразумеване поставке боје"
+
+msgctxt "IDS_USING_LATEST_STABLE"
+msgid "\nYou are already using the latest stable version."
+msgstr "\nВећ користите најновију стабилну верзију."
+
+msgctxt "IDS_USING_NEWER_VERSION"
+msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
+msgstr "Ваша тренутна верзија је %s.\n\nНајновија стабилна верзија је %s."
+
+msgctxt "IDS_NEW_UPDATE_AVAILABLE"
+msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
+msgstr "MPC-HC %s је доступан. Ви користите верзију %s.\n\nЖелите ли да посетите веб-сајт MPC-HC-а и преузмете нову верзију?"
+
+msgctxt "IDS_UPDATE_ERROR"
+msgid "Update server not found.\n\nPlease check your internet connection or try again later."
+msgstr "Сервер за ажурирања није пронађен.\n\nПроверите везу са интернетом или покушајте касније."
+
+msgctxt "IDS_UPDATE_CLOSE"
+msgid "&Close"
+msgstr "&Затвори"
+
+msgctxt "IDS_OSD_ZOOM"
+msgid "Zoom: %.0lf%%"
+msgstr "Зум: %.0lf%%"
+
+msgctxt "IDS_OSD_ZOOM_AUTO"
+msgid "Zoom: Auto"
+msgstr "Зум: аутоматски"
+
+msgctxt "IDS_CUSTOM_CHANNEL_MAPPING"
+msgid "Toggle custom channel mapping"
+msgstr "Укључи/искључи мапирање прилагођених канала"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
+msgid "Custom channel mapping: On"
+msgstr "Мапирање прилагођених канала: укључено"
+
+msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
+msgid "Custom channel mapping: Off"
+msgstr "Мапирање прилагођених канала: искључено"
+
+msgctxt "IDS_NORMALIZE"
+msgid "Toggle normalization"
+msgstr "Укључи/искључи нормализацију"
+
+msgctxt "IDS_OSD_NORMALIZE_ON"
+msgid "Normalization: On"
+msgstr "Нормализација: укључено"
+
+msgctxt "IDS_OSD_NORMALIZE_OFF"
+msgid "Normalization: Off"
+msgstr "Нормализација: искључено"
+
+msgctxt "IDS_REGAIN_VOLUME"
+msgid "Toggle regain volume"
+msgstr "Укључи/искључи враћање јачине звука"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_ON"
+msgid "Regain volume: On"
+msgstr "Враћање јачине звука: укључено"
+
+msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
+msgid "Regain volume: Off"
+msgstr "Враћање јачине звука: искључено"
+
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "бајтова"
+
+msgctxt "IDS_SIZE_UNIT_K"
+msgid "KB"
+msgstr "KB"
+
+msgctxt "IDS_SIZE_UNIT_M"
+msgid "MB"
+msgstr "MB"
+
+msgctxt "IDS_SIZE_UNIT_G"
+msgid "GB"
+msgstr "GB"
+
+msgctxt "IDS_SPEED_UNIT_K"
+msgid "KB/s"
+msgstr "KB/с"
+
+msgctxt "IDS_SPEED_UNIT_M"
+msgid "MB/s"
+msgstr "MB/с"
+
+msgctxt "IDS_BDA_ERROR_CREATE_TUNER"
+msgid "Could not create the tuner."
+msgstr "Не могу да креирам тјунер."
+
+msgctxt "IDS_BDA_ERROR_CREATE_RECEIVER"
+msgid "Could not create the receiver."
+msgstr "Не могу да креирам пријемник."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_NW_TUNER"
+msgid "Could not connect the network and the tuner."
+msgstr "Не могу да повежем мрежу и тјунер."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER_REC"
+msgid "Could not connect the tuner and the receiver."
+msgstr "Не могу да повежем тјунер и пријемник."
+
+msgctxt "IDS_BDA_ERROR_CONNECT_TUNER"
+msgid "Could not connect the tuner."
+msgstr "Не могу да повежем тјунер."
+
+msgctxt "IDS_BDA_ERROR_DEMULTIPLEXER"
+msgid "Could not create the demultiplexer."
+msgstr "Не могу да креирам демултиплексер."
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TIME"
+msgid "Error parsing the entered time!"
+msgstr "Грешка приликом обраде наведеног времена!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_TEXT"
+msgid "Error parsing the entered text!"
+msgstr "Грешка приликом обраде наведеног текста!"
+
+msgctxt "IDS_GOTO_ERROR_PARSING_FPS"
+msgid "Error parsing the entered frame rate!"
+msgstr "Грешка приликом обраде наведене учесталости кадрова!"
+
+msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Не могу да премотавам по кадровима. Пробајте други видео-рендерер."
+
+msgctxt "IDS_SCREENSHOT_ERROR_REAL"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
+msgstr "Функције „Сачувај слику“ и „Сачувај сличице“ не раде са подразумеваним видео-рендерером за RealMedia.\nИзаберите један од DirectX рендерера за RealMedia у MPC-HC-овим излазним опцијама и поново отворите датотеку."
+
+msgctxt "IDS_SCREENSHOT_ERROR_QT"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for QuickTime.\nSelect one of the DirectX renderers for QuickTime in MPC-HC's output options and reopen the file."
+msgstr "Функције „Сачувај слику“ и „Сачувај сличице“ не раде са подразумеваним видео-рендерером за QuickTime.\nИзаберите један од DirectX рендерера за QuickTime у MPC-HC-овим излазним опцијама и поново отворите датотеку."
+
+msgctxt "IDS_SCREENSHOT_ERROR_SHOCKWAVE"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work for Shockwave files."
+msgstr "Функције „Сачувај слику“ и „Сачувај сличице“ не раде са Shockwave датотекама."
+
+msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
+msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
+msgstr "Функције „Сачувај слику“ и „Сачувај сличице“ не раде са видео-рендерером Overlay Mixer.\nПромените га у MPC-HC-овим излазним опцијама и поново отворите датотеку."
+
+msgctxt "IDS_MB_SHOW_EDL_EDITOR"
+msgid "Do you want to activate the EDL editor?"
+msgstr "Желите ли да активирате EDL уређивач?"
+
+msgctxt "IDS_CAPTURE_ERROR"
+msgid "Capture Error"
+msgstr "Грешка при снимању"
+
+msgctxt "IDS_CAPTURE_ERROR_VIDEO"
+msgid "video"
+msgstr "видео"
+
+msgctxt "IDS_CAPTURE_ERROR_AUDIO"
+msgid "audio"
+msgstr "аудио"
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
+msgid "Can't add the %s buffer filter to the graph."
+msgstr "Не могу да додам филтер бафера %s у графикон."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
+msgid "Can't connect the %s buffer filter to the graph."
+msgstr "Не могу да повежем филтер бафера %s са графиконом."
+
+msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
+msgid "Can't add the %s encoder filter to the graph."
+msgstr "Не могу да додам филтер за кодирање %s у графикон."
+
+msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
+msgid "Can't connect the %s encoder filter to the graph."
+msgstr "Не могу да повежем филтер за кодирање %s са графиконом."
+
+msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
+msgid "Can't set the compression format on the %s encoder filter."
+msgstr "Не могу да поставим формат за компримирање на филтер за кодирање %s."
+
+msgctxt "IDS_CAPTURE_ERROR_MULTIPLEXER"
+msgid "Can't connect the %s stream to the multiplexer filter."
+msgstr "Не могу да повежем ток %s са филтером за мултиплексирање."
+
+msgctxt "IDS_CAPTURE_ERROR_VID_CAPT_PIN"
+msgid "No video capture pin was found."
+msgstr "Није пронађен пин за снимање видео-записа."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_CAPT_PIN"
+msgid "No audio capture pin was found."
+msgstr "Није пронађен пин за снимање аудио-записа."
+
+msgctxt "IDS_CAPTURE_ERROR_OUT_FILE"
+msgid "Error initializing the output file."
+msgstr "Грешка при покретању излазне датотеке."
+
+msgctxt "IDS_CAPTURE_ERROR_AUD_OUT_FILE"
+msgid "Error initializing the audio output file."
+msgstr "Грешка при покретању излазне аудио-датотеке."
+
+msgctxt "IDS_SUBRESYNC_TIME_FORMAT"
+msgid "The correct time format is [-]hh:mm:ss.ms (e.g. 01:23:45.678)."
+msgstr "Исправан формат времена је [-]hh:mm:ss.ms (нпр. 01:23:45.678)."
+
+msgctxt "IDS_EXTERNAL_FILTERS_ERROR_MT"
+msgid "This type is already in the list!"
+msgstr "Овај тип је већ на списку!"
+
+msgctxt "IDS_WEBSERVER_ERROR_TEST"
+msgid "You need to apply the new settings before testing them."
+msgstr "Потребно је да примените нове поставке пре њиховог тестирања."
+
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
+msgid "After Playback: Exit"
+msgstr "Након репродукције: изађи из програма"
+
+msgctxt "IDS_AFTERPLAYBACK_STANDBY"
+msgid "After Playback: Stand By"
+msgstr "Након репродукције: пређи у стање приправности"
+
+msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
+msgid "After Playback: Hibernate"
+msgstr "Након репродукције: пређи у хибернацију"
+
+msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
+msgid "After Playback: Shutdown"
+msgstr "Након репродукције: искључи рачунар"
+
+msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
+msgid "After Playback: Log Off"
+msgstr "Након репродукције: одјави корисника"
+
+msgctxt "IDS_AFTERPLAYBACK_LOCK"
+msgid "After Playback: Lock"
+msgstr "Након репродукције: закључај рачунар"
+
+msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
+msgid "After Playback: Turn off the monitor"
+msgstr "Након репродукције: искључи монитор"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Након репродукције: пусти следећу датотеку"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Након репродукције: не ради ништа"
+
+msgctxt "IDS_OSD_BRIGHTNESS"
+msgid "Brightness: %s"
+msgstr "Осветљеност: %s"
+
+msgctxt "IDS_OSD_CONTRAST"
+msgid "Contrast: %s"
+msgstr "Контраст: %s"
+
+msgctxt "IDS_OSD_HUE"
+msgid "Hue: %s°"
+msgstr "Нијанса: %s°"
+
+msgctxt "IDS_OSD_SATURATION"
+msgid "Saturation: %s"
+msgstr "Засићеност: %s"
+
+msgctxt "IDS_OSD_RESET_COLOR"
+msgid "Color settings restored"
+msgstr "Враћене су поставке боје"
+
+msgctxt "IDS_OSD_NO_COLORCONTROL"
+msgid "Color control is not supported"
+msgstr "Управљање бојама није подржано"
+
+msgctxt "IDS_BRIGHTNESS_INC"
+msgid "Brightness increase"
+msgstr "Повећај осветљеност"
+
+msgctxt "IDS_LANG_PREF_EXAMPLE"
+msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
+msgstr "Овде унесите жељене језике.\nНа пример: „eng jap swe“"
+
+msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
+msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
+msgstr "Спољни разделници могу да имају сопствене поставке језика; подразумевано понашање MPC-HC-а је да не мења њихов првобитни избор.\nОмогућите ову опцију ако желите да MPC-HC управља спољним разделницима."
+
+msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
+msgid "&Blu-Ray playlists"
+msgstr "&Blu-ray плеј-листе"
+
+msgctxt "IDS_NAVIGATE_PLAYLIST"
+msgid "&Playlist"
+msgstr "&Плеј-листа"
+
+msgctxt "IDS_NAVIGATE_CHAPTERS"
+msgid "&Chapters"
+msgstr "По&главља"
+
+msgctxt "IDS_NAVIGATE_TITLES"
+msgid "&Titles"
+msgstr "&Наслови"
+
+msgctxt "IDS_NAVIGATE_CHANNELS"
+msgid "&Channels"
+msgstr "&Канали"
+
+msgctxt "IDC_FASTSEEK_CHECK"
+msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
+msgstr "Ако је изабран „последњи кључни кадар“, премотајте на први кључни кадар пре жељене тачке.\nУ случају да је изабран „најближи кључни кадар“, онда премотајте на први кључни кадар пре жељене тачке или после ње, зависно од тога који је ближи."
+
+msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
+msgid "Associate with all formats"
+msgstr "Повежи са свим форматима"
+
+msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
+msgid "Associate with video formats only"
+msgstr "Повежи само са форматима видео-записа"
+
+msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
+msgid "Associate with audio formats only"
+msgstr "Повежи само са форматима аудио-записа"
+
+msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
+msgid "Clear all associations"
+msgstr "Очисти све повезаности"
+
+msgctxt "IDS_FILTER_SETTINGS_CAPTION"
+msgid "Settings"
+msgstr "Поставке"
+
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Преузми титл"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "&Преузми и отвори"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Подразумевано"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Помери на&горе"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Помери на&доле"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Отпремање титлова"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub „име датотеке“\tУчитајте додатни аудио-запис."
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay „датотека“\tУчитајте додатни аудио-запис са кашњењем од XX мс\n\t\t(ако име датотеке садржи „DELAY XXms…“)."
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tПокрените рендеровање у D3D режиму целог екрана."
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub „име титла“\tУчитајте додатни титл."
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter „име филтера“\tУчитајте DirectShow филтере из DLL-а (дозвољени су џокери)."
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tПокрените у DVD режиму; „pathname“ означава фасциклу DVD-а (необавезно)."
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos Н#П\tПокрените репродукцију од наслова Н, поглавље П."
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tУчитајте све записе са аудио CD-а или (S)VCD-а;\n\t\t„pathname“ означава путању диска (необавезно)."
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tОтворите подразумевани видео-уређај."
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tОтворите датотеку без аутоматског покретања репродукције."
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tРепродукујте датотеку одмах по покретању плејера."
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tЗатворите плејер након репродукције (ради само уз /play)."
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tИскључите рачунар након репродукције."
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tУкључите стање приправности након репродукције."
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tУкључите хибернацију након репродукције."
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tОдјавите се са рачунара након репродукције."
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tЗакључајте рачунар након репродукције."
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tИскључите монитор након репродукције."
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tОтворите следећу датотеку у фасцикли након репродукције."
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tПокрените у режиму целог екрана."
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tПокрените у умањеном прозору."
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tКористите нови примерак плејера."
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tДодајте „pathname“ на плеј-листу; може се комбиновати са /open и /play."
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.strings.pot b/src/mpc-hc/mpcresources/PO/mpc-hc.strings.pot
index 3e38c3f37..6c53ce578 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.strings.pot
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.strings.pot
@@ -1,10 +1,10 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -57,10 +57,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr ""
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr ""
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr ""
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr ""
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr ""
@@ -113,6 +121,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr ""
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr ""
@@ -322,11 +350,11 @@ msgid "On/Off"
msgstr ""
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
+msgid "From (FPS)"
msgstr ""
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr ""
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -461,6 +489,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr ""
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr ""
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr ""
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr ""
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr ""
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr ""
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr ""
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr ""
@@ -485,18 +541,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr ""
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr ""
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr ""
@@ -549,34 +597,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr ""
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr ""
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr ""
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr ""
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr ""
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr ""
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr ""
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr ""
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr ""
@@ -597,16 +617,8 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr ""
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr ""
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr ""
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
msgstr ""
msgctxt "IDC_DSVMR9REN"
@@ -618,7 +630,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr ""
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr ""
msgctxt "IDC_DSNULL_UNCOMP"
@@ -645,10 +657,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr ""
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr ""
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr ""
@@ -657,10 +665,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr ""
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr ""
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr ""
@@ -669,22 +673,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr ""
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr ""
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr ""
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr ""
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr ""
@@ -737,8 +729,8 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr ""
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
msgstr ""
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
@@ -753,8 +745,12 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr ""
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
msgstr ""
msgctxt "IDS_SUBFILE_DELAY"
@@ -786,7 +782,7 @@ msgid "Couldn't find all archive volumes"
msgstr ""
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr ""
msgctxt "IDC_TEXTURESURF3D"
@@ -813,6 +809,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr ""
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr ""
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr ""
@@ -885,7 +893,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr ""
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr ""
@@ -950,11 +958,11 @@ msgid "&Organize Favorites..."
msgstr ""
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr ""
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr ""
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1038,7 +1046,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr ""
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr ""
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1226,7 +1234,7 @@ msgid "+%d%%"
msgstr ""
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr ""
msgctxt "IDS_HW_INDICATOR"
@@ -1333,6 +1341,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr ""
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr ""
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr ""
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr ""
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr ""
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr ""
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr ""
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr ""
@@ -1353,12 +1437,12 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr ""
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
msgstr ""
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
msgstr ""
msgctxt "IDS_AG_PROPERTIES"
@@ -1382,11 +1466,11 @@ msgid "Stop"
msgstr ""
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr ""
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr ""
msgctxt "IDS_AG_GO_TO"
@@ -1486,7 +1570,7 @@ msgid "Thumbnails saved successfully"
msgstr ""
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
+msgid "Vide&o Track"
msgstr ""
msgctxt "IDS_MENU_VIDEO_ANGLE"
@@ -1534,11 +1618,11 @@ msgid "Reset Rate"
msgstr ""
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr ""
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr ""
msgctxt "IDS_MPLAYERC_23"
@@ -1609,14 +1693,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr ""
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr ""
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr ""
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr ""
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr ""
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr ""
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr ""
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr ""
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr ""
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr ""
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr ""
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr ""
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr ""
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr ""
@@ -1682,7 +1806,7 @@ msgid "PnS Dec Height"
msgstr ""
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
+msgid "Downloading [%s] \"%s\""
msgstr ""
msgctxt "IDS_SUBDL_DLG_PARSING"
@@ -1694,7 +1818,7 @@ msgid "No subtitles found."
msgstr ""
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr ""
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
@@ -1850,11 +1974,11 @@ msgid "Boss key"
msgstr ""
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
+msgid "Player Menu"
msgstr ""
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
+msgid "Player Menu (full)"
msgstr ""
msgctxt "IDS_AG_FILTERS_MENU"
@@ -1866,19 +1990,19 @@ msgid "Options"
msgstr ""
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
+msgid "Next Audio Track"
msgstr ""
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
+msgid "Prev Audio Track"
msgstr ""
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
+msgid "Next Subtitle Track"
msgstr ""
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
+msgid "Prev Subtitle Track"
msgstr ""
msgctxt "IDS_MPLAYERC_85"
@@ -1889,22 +2013,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr ""
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr ""
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr ""
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr ""
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr ""
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr ""
@@ -1914,27 +2022,27 @@ msgid "Prev Angle (DVD)"
msgstr ""
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
+msgid "Next Audio Track (DVD)"
msgstr ""
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
+msgid "Prev Audio Track (DVD)"
msgstr ""
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
+msgid "Next Subtitle Track (DVD)"
msgstr ""
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
+msgid "Prev Subtitle Track (DVD)"
msgstr ""
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr ""
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
msgstr ""
msgctxt "IDS_PPAGEWEBSERVER_0"
@@ -1961,11 +2069,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr ""
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr ""
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr ""
@@ -2022,11 +2130,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr ""
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr ""
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr ""
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2117,14 +2225,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr ""
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr ""
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr ""
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr ""
@@ -2134,19 +2234,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ""
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ""
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ""
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ""
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ""
msgctxt "IDS_MAINFRM_42"
@@ -2218,7 +2318,7 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr ""
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
msgstr ""
msgctxt "IDS_SUBTITLE_FILES_FILTER"
@@ -2230,11 +2330,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr ""
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
+msgid "Aspect Ratio: Default (DAR)"
msgstr ""
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr ""
msgctxt "IDS_AG_CHAPTER"
@@ -2246,7 +2346,7 @@ msgid "Out of memory"
msgstr ""
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
msgstr ""
msgctxt "IDS_MAINFRM_78"
@@ -2269,10 +2369,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr ""
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr ""
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr ""
@@ -2293,14 +2389,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr ""
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr ""
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr ""
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr ""
@@ -2318,7 +2406,7 @@ msgid "Toggle Caption&Menu"
msgstr ""
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr ""
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2474,7 +2562,7 @@ msgid "Volume boost Max"
msgstr ""
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
@@ -2561,14 +2649,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr ""
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr ""
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr ""
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr ""
@@ -2657,40 +2737,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr ""
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr ""
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr ""
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr ""
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr ""
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr ""
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr ""
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr ""
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr ""
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr ""
msgctxt "IDS_VIDEO_STREAM"
@@ -2858,7 +2910,7 @@ msgid "Other Audio"
msgstr ""
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
+msgid "AC-3"
msgstr ""
msgctxt "IDS_MFMT_AIFF"
@@ -2869,6 +2921,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr ""
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr ""
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr ""
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr ""
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr ""
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr ""
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr ""
@@ -2933,22 +3005,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr ""
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr ""
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr ""
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr ""
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr ""
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr ""
@@ -2973,18 +3029,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr ""
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr ""
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr ""
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr ""
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr ""
@@ -3273,6 +3317,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr ""
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr ""
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr ""
@@ -3330,7 +3378,7 @@ msgid "Error parsing the entered frame rate!"
msgstr ""
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr ""
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3349,10 +3397,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr ""
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr ""
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr ""
@@ -3421,7 +3465,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr ""
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr ""
@@ -3449,6 +3493,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr ""
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr ""
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr ""
@@ -3529,3 +3581,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr ""
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sv.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sv.dialogs.po
index 0e33797b4..537dfa2ea 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.sv.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sv.dialogs.po
@@ -1,16 +1,18 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# JellyFrog, 2013
+# John Smith <rdb95566@foxja.com>, 2015
+# JellyFrog, 2013-2015
+# Luna Jernberg <bittin@cafe8bitar.se>, 2016
# Apa <sakcheen@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 19:20+0000\n"
-"Last-Translator: Apa <sakcheen@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.com/projects/p/mpc-hc/language/sv/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Swedish (http://www.transifex.com/mpc-hc/mpc-hc/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -75,7 +77,7 @@ msgstr "Spela in"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
msgid "Enable built-in audio switcher filter (requires restart)"
-msgstr "Aktivera inbyggt ljudväxelfilter (omstart krävs)"
+msgstr "Aktivera inbyggt ljudomkopplings-filter (omstart krävs)"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
msgid "Normalize"
@@ -107,19 +109,19 @@ msgstr "Ljudtidsförskjutning (ms):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
-msgstr "Aktivera anpassad kanalkartläggning"
+msgstr "Aktivera anpassad kanalmappning"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Högtalarkonfigurationen för "
+msgid "Speaker configuration for"
+msgstr "Högtalarkonfigurationen för"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "ingångskanaler:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Håll in skift för omedelbara förändringar när du klickar på något "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Håll in skift för omedelbara förändringar när du klickar på något"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -139,7 +141,7 @@ msgstr "Gå!"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
-msgstr "Ange två nummer för att gå till en viss bildruta, det första är numret för bildrutan, det andra är bildhastigheten."
+msgstr "Ange två nummer för att gå till en viss bildruta, det första är numret för bildrutan, det andra är bildfrekvensen."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Frame"
@@ -190,8 +192,8 @@ msgid "About"
msgstr "Om"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 se Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 se Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -303,7 +305,7 @@ msgstr "Inaktivera \"Öppna Skiva\"-menyn"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
msgid "Process priority above normal"
-msgstr "Processens prioritet högre än normal"
+msgstr "Spelarens prioritet högre än normal"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
@@ -347,11 +349,11 @@ msgstr "\"Öppna DVD/BD\"-beteende"
msgctxt "IDD_PPAGEDVD_IDC_RADIO1"
msgid "Prompt for location"
-msgstr "Fråga efter plats"
+msgstr "Fråga efter sökväg"
msgctxt "IDD_PPAGEDVD_IDC_RADIO2"
msgid "Always open the default location:"
-msgstr "Öppna alltid standardplatsen: "
+msgstr "Öppna alltid standard-sökvägen: "
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Preferred language for DVD Navigator and the external OGM Splitter"
@@ -375,7 +377,7 @@ msgstr "Ytterligare inställningar"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
-msgstr "Tillåt dold text i \"linje 21-dekodern\""
+msgstr "Tillåt dold text i \"Line 21 Decoder\""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
@@ -422,12 +424,16 @@ msgid "time(s)"
msgstr "gång(er)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Efter Uppspelning"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Utmatning"
+msgid "Default zoom"
+msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -443,7 +449,7 @@ msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Default track preference"
-msgstr "Föredraget språkval"
+msgstr "Föredraget språk"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
@@ -455,7 +461,7 @@ msgstr "Ljud:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK4"
msgid "Allow overriding external splitter choice"
-msgstr "Tillåt att kringgå externa demultiplexers val"
+msgstr "Åsidosätt externa demultiplexers inställningar"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Open settings"
@@ -463,7 +469,7 @@ msgstr "Öppna-inställningar"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
msgid "Use worker thread to construct the filter graph"
-msgstr "Använd arbetstråden för att bygga filtergrafen"
+msgstr "Använd arbetstråden för att bygga filter-grafen"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
@@ -473,10 +479,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Läs in ljudfiler automatiskt"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Använd den inbyggda undertextrenderaren"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Kontroll"
@@ -495,7 +497,7 @@ msgstr "Hastighetssteg:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK3"
msgid "Override placement"
-msgstr "Åsidosätt placering"
+msgstr "Tvingad placering"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC1"
msgid "Horizontal:"
@@ -523,7 +525,7 @@ msgstr "ms"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Texture settings (open the video again to see the changes)"
-msgstr "Texturinställningar (öppna videon igen för att se förändringarna)"
+msgstr "Texturinställningar (ladda om videon för att se förändringarna)"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Sub pictures to buffer:"
@@ -551,11 +553,11 @@ msgstr "Animera vid"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
msgid "% of the video frame rate"
-msgstr "% av videons bildhastighet"
+msgstr "% av videons bildfrekvens"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr "Tillåt att skippa några undertextbilder om kön ligger efter"
+msgstr "Hoppa över undertextbilder om kön ligger efter"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
@@ -563,15 +565,15 @@ msgstr "Renderarlayout"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
msgid "Apply aspect ratio compensation for anamorphic videos"
-msgstr "Använd bildförhållandekompensation för video med anamorfiskt format"
+msgstr "Använd bildförhållande-kompensering för videos med anamorfiskt format"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Warning"
msgstr "Varning"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Om du aktiverar helskärmskantutjämning i ditt grafikkorts inställningar kommer undertexter inte se bättre ut, men det kommer säkerligen att belasta din processor."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Om du aktiverar helskärmskantutjämning i ditt grafikkorts inställningar kommer undertexter inte se bättre ut, men det kommer troligen att belasta din processor."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -603,7 +605,7 @@ msgstr "Ange som stan&dardprogram"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
-msgstr "Real-Time Streaming Protocol-hanterare (för rtsp://... webbadresser)"
+msgstr "Real-Time Streaming Protocol-hanterare (för rtsp://... URLer)"
msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
msgid "RealMedia"
@@ -619,7 +621,7 @@ msgstr "DirectShow"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK5"
msgid "Check file extension first"
-msgstr "Titta på filnamnstillägget först"
+msgstr "Kolla filnamnstillägget först"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Explorer Context Menu"
@@ -677,16 +679,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Förhindra att minimera spelaren när helskärmsläget är aktiverat på en sekundär bildskärm"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Använd Windows 7 aktivitetsfältsfunktioner"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Använd utökade aktivitetsfältsfunktioner"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Gör så att \"Framåt/Tillbaka\" öppnar nästa/tidigare fil i mappen när det bara finns en fil i spelningslistan"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Visa tidsverktygstips:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -871,11 +873,11 @@ msgstr "&Spara"
msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
msgid "Pos: 0.0 -> 1.0"
-msgstr "Pos: 0.0 -> 1.0"
+msgstr "Pos: 0,0 -> 1,0"
msgctxt "IDD_PNSPRESET_DLG_IDC_STATIC"
msgid "Zoom: 0.2 -> 3.0"
-msgstr "Zoom: 0.2 -> 3.0"
+msgstr "Zoom: 0,2 -> 3,0"
msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
msgid "Global Media Keys"
@@ -1047,11 +1049,11 @@ msgstr "Färger && Transparens"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "0%"
-msgstr "0 %"
+msgstr "0%"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "100%"
-msgstr "100 %"
+msgstr "100%"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Primary"
@@ -1099,7 +1101,7 @@ msgstr "Ljuddekoder"
msgctxt "IDD_PPAGELOGO_IDC_RADIO1"
msgid "Internal:"
-msgstr "Intern:"
+msgstr "Inbyggd:"
msgctxt "IDD_PPAGELOGO_IDC_RADIO2"
msgid "External:"
@@ -1123,11 +1125,11 @@ msgstr "QuickTime Video"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Audio Renderer"
-msgstr "DirectShow Ljud"
+msgstr "Ljudrenderare"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (renderlös)- och EVR (CP)-inställningar"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderlös) och EVR (CP) inställningar"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1143,7 +1145,7 @@ msgstr "Välj D3D9 Render-enhet"
msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
msgid "Reinitialize when changing display"
-msgstr "Ominitialisera när man växlar skärm"
+msgstr "Initiera om vid byte av skärm"
msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
msgid "D3D Fullscreen"
@@ -1151,7 +1153,7 @@ msgstr "D3D Helskärm"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Alternative VSync"
-msgstr "Alternativ vertikalsynk"
+msgstr "Alternativ VSync"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
msgid "VMR-9 Mixer Mode"
@@ -1170,8 +1172,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Undertexter*"
+msgid "Subtitles"
+msgstr "Undertexter"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1188,12 @@ msgid "Rotation"
msgstr "Rotation"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Externa filter (så som VSFilter) kan visa undertexter oavsett renderare."
+msgid "Subtitle Renderer"
+msgstr "Undertextrenderare"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1195,7 +1201,7 @@ msgstr "Lyssna på port:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
msgid "Launch in web browser..."
-msgstr "Starta i webbläsare..."
+msgstr "Öppna i webbläsaren..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
msgid "Enable compression"
@@ -1205,13 +1211,17 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Tillåt endast åtkomst från localhost"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Aktivera förhandsvisning"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Skriv ut felsökningsinformation"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
msgid "Serve pages from:"
-msgstr "Leverera sidor från:"
+msgstr "Visa sidor från:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
msgid "Browse..."
@@ -1219,7 +1229,7 @@ msgstr "Bläddra..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
msgid "Deploy..."
-msgstr "Distribuera..."
+msgstr "Exportera..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
msgid "Default page:"
@@ -1230,16 +1240,44 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI-hanterare: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Undertexter tillgängliga online"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Ladda ner && Öppna"
+msgid "Download subtitles"
+msgstr "Ladda ner undertexter"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Ersätt nuvarande inladdade undertexter"
+msgstr "Ersätt aktuell inladdade undertexter"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Ladda ner"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Inställningar"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Ladda upp undertext"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Ladda upp"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Inställningar"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
@@ -1278,8 +1316,8 @@ msgid "Enable automatic update check"
msgstr "Aktivera automatiskt uppdateringskontroll"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Tid mellan varje kontroll:"
+msgid "Check every:"
+msgstr "Kolla varje:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1299,7 +1337,7 @@ msgstr "Exportera"
msgctxt "IDD_PPAGEMISC_IDC_EXPORT_KEYS"
msgid "Export keys"
-msgstr "Exportera knappar"
+msgstr "Exportera kortkommandon"
msgctxt "IDD_TUNER_SCAN_CAPTION"
msgid "Tuner scan"
@@ -1427,7 +1465,7 @@ msgstr "kolumner"
msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
msgid "Present at nearest VSync"
-msgstr "Visa vid närmaste vertikalsynk"
+msgstr "Visa vid närmaste VSync"
msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
msgid "Target sync offset:"
@@ -1467,11 +1505,11 @@ msgstr "ms"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK6"
msgid "Hide docked panels"
-msgstr "Göm förankrade paneler"
+msgstr "Göm dockade paneler"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK5"
msgid "Exit fullscreen at the end of playback"
-msgstr "Avsluta helskärmsläge i slutet av uppspelningen"
+msgstr "Avsluta helskärmsläget efter uppspelningen"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_STATIC"
msgid "Fullscreen monitor"
@@ -1542,16 +1580,28 @@ msgid "Reset"
msgstr "Återställ"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Online-databas"
+msgid "Online search, download and upload subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr ""
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Webbadress till databasen för undertexter:"
+msgid "Languages in order of preference:"
+msgstr ""
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Testa"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr ""
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1653,6 +1703,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Återställ"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Enhet"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Exklusivt läge"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Tillåt bitstreaming"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Inställningar"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Aktivera \"stereo crossfeed\" (för hörlurar)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Brytgräns:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Nivå:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Notera"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "För att minska ljudförvrängning är det rekommenderat att hålla volymen runt 85% när man spelar högt \"lossy-encoded\" material."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG-kvalitet:"
@@ -1665,3 +1759,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "OK"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Skicka Felrapport"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Ursäkta, det verkar som MPC-HC just kraschade :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Skicka en felrapport för att hjälpa oss felsöka och åtgärda problemet."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Valfri information"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "E-post:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Din e-post är ej obligatorisk och kommer endast att användas om utvecklarna behöver kontakta dig för mer information."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Problembeskrivning (use English only):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Starta om MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Avsluta MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sv.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sv.menus.po
index 709461154..189ce1527 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.sv.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sv.menus.po
@@ -1,17 +1,18 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# kasper93, 2013
-# JellyFrog, 2013
+# JellyFrog, 2013-2015
+# Luna Jernberg <bittin@cafe8bitar.se>, 2016
# Apa <sakcheen@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 21:10+0000\n"
-"Last-Translator: Apa <sakcheen@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.com/projects/p/mpc-hc/language/sv/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-01-31 22:01+0000\n"
+"Last-Translator: Underground78\n"
+"Language-Team: Swedish (http://www.transifex.com/mpc-hc/mpc-hc/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -66,29 +67,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Spara Miniat&yrer..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Läs in Undertext..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Spara Underte&xt..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "&Undertextsdatabas"
+msgid "S&ubtitles"
+msgstr "Undertexter"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Sök..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "Läs in Undertext..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Ladda &upp..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Spara Undertext..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Ladda &ner..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "Ladda ner undertexter"
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "Ladda upp undertext"
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -172,15 +169,15 @@ msgstr "&Zoom"
msgctxt "ID_VIEW_ZOOM_50"
msgid "&50%"
-msgstr "&50 %"
+msgstr "&50%"
msgctxt "ID_VIEW_ZOOM_100"
msgid "&100%"
-msgstr "&100 %"
+msgstr "&100%"
msgctxt "ID_VIEW_ZOOM_200"
msgid "&200%"
-msgstr "&200 %"
+msgstr "&200%"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
@@ -198,13 +195,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Tearingtest"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "&Visa Statistik"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Återstående Tid"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Visa Aktuell tid"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Visa &Filnamn"
msgctxt "POPUP"
msgid "&Output Range"
@@ -212,11 +213,11 @@ msgstr "Utmatningsomfång"
msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
msgid "&0 - 255"
-msgstr "0 - 255"
+msgstr "&0 - 255"
msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
msgid "&16 - 235"
-msgstr "16 - 235"
+msgstr "&16 - 235"
msgctxt "POPUP"
msgid "&Presentation"
@@ -288,15 +289,15 @@ msgstr "Omgivnings&ljus"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
-msgstr "&Ljust (2.2 Gamma)"
+msgstr "&Ljus (2,2 Gamma)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
msgid "&Dim (2.35 Gamma)"
-msgstr "&Svagt (2.35 Gamma)"
+msgstr "&Svag (2,35 Gamma)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
-msgstr "&Mörkt (2.4 Gamma)"
+msgstr "&Mörk (2,4 Gamma)"
msgctxt "POPUP"
msgid "&Rendering Intent"
@@ -320,27 +321,27 @@ msgstr "&Absolut kolorimetri"
msgctxt "POPUP"
msgid "&VSync"
-msgstr "&Vertikalsynk"
+msgstr "&VSync"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
-msgstr "&Vertikalsynk"
+msgstr "&VSync"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "&Exakt vertikalsynk"
+msgstr "&Exakt VSync"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "&Alternativ vertikalsynk"
+msgstr "&Alternativ VSync"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
-msgstr "&Minska vertikalsynkförskjutningen"
+msgstr "&Minska VSync-förskjutningen"
msgctxt "ID_VIEW_VSYNCOFFSET_INCREASE"
msgid "&Increase VSync Offset"
-msgstr "&Öka vertikalsynkförskjutningen"
+msgstr "&Öka VSync-förskjutningen"
msgctxt "POPUP"
msgid "&GPU Control"
@@ -348,7 +349,7 @@ msgstr "GPU-kontroll"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "Töm GPU &före vertikalsynk"
+msgstr "Töm GPU &före VSync"
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
@@ -406,37 +407,37 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Berör Fönstret Från &Utsidan"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Behåll bildförhållandet"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "&Manuellt bildförhållande"
+msgid "&Aspect Ratio"
+msgstr ""
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Standard"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr ""
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
-msgstr "4:3"
+msgstr "&4:3"
msgctxt "ID_ASPECTRATIO_5_4"
msgid "&5:4"
-msgstr "5:4"
+msgstr "&5:4"
msgctxt "ID_ASPECTRATIO_16_9"
msgid "&16:9"
-msgstr "16:9"
+msgstr "&16:9"
msgctxt "ID_ASPECTRATIO_235_100"
msgid "&235:100"
-msgstr "235:100"
+msgstr "&235:100"
msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
-msgstr "185:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
@@ -472,19 +473,19 @@ msgstr "Minska Höjd"
msgctxt "ID_PANSCAN_MOVERIGHT"
msgid "Move &Right"
-msgstr "Flytta Höger"
+msgstr "Flytta till &Höger"
msgctxt "ID_PANSCAN_MOVELEFT"
msgid "Move &Left"
-msgstr "Flytta Vänster"
+msgstr "Flytta till &Vänster"
msgctxt "ID_PANSCAN_MOVEUP"
msgid "Move &Up"
-msgstr "Flytta Upp"
+msgstr "Flytta &upp"
msgctxt "ID_PANSCAN_MOVEDOWN"
msgid "Move &Down"
-msgstr "Flytta Ner"
+msgstr "Flytta &ned"
msgctxt "ID_PANSCAN_CENTER"
msgid "Cen&ter"
@@ -531,9 +532,25 @@ msgid "&Stop"
msgstr "&Stoppa"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "&Bildrutesteg"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "Arkiv"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "Spelningslista"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Långsammare Uppspelning"
@@ -555,16 +572,16 @@ msgid "S&haders"
msgstr "S&haders"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Ljud"
+msgid "&Audio Track"
+msgstr "&Ljudspår"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Un&dertexter"
+msgid "Su&btitle Track"
+msgstr "&Undertextspår"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "Videos&tröm"
+msgid "Vide&o Track"
+msgstr "&Videospår"
msgctxt "POPUP"
msgid "&Volume"
@@ -586,7 +603,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Efter &Uppspelning"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Gör Ingen&ting"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Spela &nästa fil i mappen"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Stäng av &bildskärmen"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Avsluta"
@@ -610,10 +639,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "&Lås"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Stäng av &bildskärmen"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Navigera"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.sv.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.sv.strings.po
index e5f31d59c..455969872 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.sv.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.sv.strings.po
@@ -1,16 +1,18 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# JellyFrog, 2013-2014
+# John Smith <rdb95566@foxja.com>, 2015
+# JellyFrog, 2013-2015
+# Luna Jernberg <bittin@cafe8bitar.se>, 2016
# Apa <sakcheen@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-01 23:00+0000\n"
-"Last-Translator: Apa <sakcheen@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.com/projects/p/mpc-hc/language/sv/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Swedish (http://www.transifex.com/mpc-hc/mpc-hc/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -39,7 +41,7 @@ msgstr "Kapitel"
msgctxt "IDS_CONTROLS_COMPLETING"
msgid "Completing..."
-msgstr "Kompletterar..."
+msgstr "Slutför..."
msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
msgid "Play Video"
@@ -61,10 +63,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Egenskaper"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Fil"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Standardinställningar"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Spelningslista"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Filer"
@@ -117,6 +127,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Om renderingsmålet lämnas odefinierat kommer SSA/ASS-undertexter att renderas relativt till videobildrutan medans alla andra textbaserade undertexter kommer renderas relativt till fönstret."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Aldrig (Snabbast)"
@@ -163,7 +193,7 @@ msgstr "%d+"
msgctxt "IDS_NO_PARENTAL_RATING"
msgid "Not rated"
-msgstr "Ej klassificerad"
+msgstr "Ingen klassificering"
msgctxt "IDS_INFOBAR_CONTENT"
msgid "Content"
@@ -175,7 +205,7 @@ msgstr "Film/Drama"
msgctxt "IDS_CONTENT_NEWS_CURRENTAFFAIRS"
msgid "News/Current affairs"
-msgstr "Nyheter"
+msgstr "Nyheter/Aktuellt"
msgctxt "IDS_SPEED_UNIT_G"
msgid "GB/s"
@@ -235,7 +265,7 @@ msgstr "Stil"
msgctxt "IDS_SUBRESYNC_CLN_FONT"
msgid "Font"
-msgstr "Typsnitt"
+msgstr "Teckensnitt"
msgctxt "IDS_DVD_NAV_SOME_PINS_ERROR"
msgid "Failed to render some of the pins of the DVD Navigator filter"
@@ -323,15 +353,15 @@ msgstr "Spelningslista"
msgctxt "IDS_PPAGE_FS_CLN_ON_OFF"
msgid "On/Off"
-msgstr "På/Av"
+msgstr "Aktiverat"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Från fps"
+msgid "From (FPS)"
+msgstr "Från (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Till fps"
+msgid "To (FPS)"
+msgstr "Till (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -455,7 +485,7 @@ msgstr "Småjusteringar"
msgctxt "IDD_PPAGEAUDIOSWITCHER"
msgid "Internal Filters::Audio Switcher"
-msgstr "Interna Filter::Ljudväxel"
+msgstr "Interna Filter:: Ljudomkopplare"
msgctxt "IDD_PPAGEEXTERNALFILTERS"
msgid "External Filters"
@@ -465,9 +495,37 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Uppspelning::Shaders"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Resurser"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Diverse"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Uppspelning::Spela in"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Uppspelning::Sync Renderer-inställningar"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Uppspelning::Helskärm"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Interna Filter::Ljudrenderare"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
-msgstr "Ljudväxel"
+msgstr "Ljudomkopplare"
msgctxt "IDS_ICONS_REASSOC_DLG_TITLE"
msgid "New version of the icon library"
@@ -475,7 +533,7 @@ msgstr "Ny version av ikonbiblioteket"
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
-msgstr "Vill du återansluta ikonerna?"
+msgstr "Vill du omassociera ikonerna?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
@@ -489,18 +547,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (fönsterläge)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (fönsterläge)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderlös)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (renderlös)"
@@ -531,7 +581,7 @@ msgstr "madVR"
msgctxt "IDD_PPAGEACCELTBL"
msgid "Player::Keys"
-msgstr "Spelare::Knappar"
+msgstr "Spelare::Kortkommandon"
msgctxt "IDD_PPAGESUBSTYLE"
msgid "Subtitles::Default Style"
@@ -553,34 +603,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Spelare::Webbgränssnitt"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Undertexter::Databas"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Resurser"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Diverse"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Uppspelning::Spela in"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Uppspelning::Sync Renderer-inställningar"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Uppspelning::Helskärm"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Detaljer"
@@ -601,17 +623,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Renderar alltid i överlägg. Generellt sett är bara YUV-format tillåtna, men de presenteras direkt utan färgkonvertering till RGB. Detta är den snabbaste renderingsmetoden av alla och den enda där man kan vara säker på att skärmbildsdubblering i helskärm aktiveras på TV-utgång."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Standardrenderaren för Windows XP. Mycket stabil och bara lite långsammare än Overlay-mixern. Använder DirectDraw och körs i överlägg när den kan."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Endast tillgänglig om du har DirectX 9 installerat. Har samma egenskaper som VMR-7 (fönsterläge), men kommer aldrig att använda överläggsrendering och på grund av detta kan den vara lite långsammare än VMR-7 (fönsterläge)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Samma som VMR-7 (fönsterläge), men använder Allokerar-Presentatör-insticksmodulen från MPC-HC för undertexter. Överläggsskärmbildsdubblering kommer INTE att fungera. \"True Color\"-skrivbordsfärgdjup rekommenderas."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Endast tillgänglig om du har DirectX 9 installerat. Väldigt stabilt men den kommer aldrig att använda Overlay rendering och på grund av detta kommer den att vara lite långsammare än Overlay mixer."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -622,7 +636,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Samma som VMR-9 (renderlös), men använder en äkta tvåstegs-bikubisk omskalare."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Ansluts till vilken videoliknande medietyp som helst, men skickar inte den inkommande datan någonstans. Använd när du inte behöver se videobildrutorna och vill undvika att centralprocessorn arbetar i onödan."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -649,10 +663,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Reals egna renderare. SMIL-skript kommer att fungera, men interaktivitet är inte troligt. Använder DirectDraw och körs i överlägg när den kan."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Utmatningen av Reals motor renderad av den DX7-baserade Allokering-Presentatören från VMR-7 (renderlös)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Utmatningen av Reals motor renderad av den DX9-baserade Allokering-Presentatören från VMR-9 (renderlös)."
@@ -661,10 +671,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "QuickTimes egna renderare. Blir aningen långsam när videostorleken ändrads eller när videon blir delvis övertäckt av ett annat fönster. När Overlay inte är tillgänglig kommer den att falla tillbaka till GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Utmatningen av QuickTimes motor renderad av den DX7-baserade Allokering-Presentatören från VMR-7 (renderlös)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Utmatningen av QuickTimes motor renderad av den DX9-baserade Allokering-Presentatören från VMR-9 (renderlös)."
@@ -673,22 +679,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Videoytan kommer att allokeras som en vanlig offscreen yta."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Renderer är trasig, använd ej!"
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Rapportera en bugg"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC krashade precis, men den här versionen har kompilerats utan felsökningsverktyg.\nOm du vill rapportera det här programfelet bör du först och främst försöka med en officiell version.\n\nVill du besöka nedladdningsplatsen nu?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Vanlig offscreen plan yta"
@@ -703,7 +697,7 @@ msgstr "3D-ytor (rekommenderas)"
msgctxt "IDS_PPAGE_OUTPUT_RESIZE_NN"
msgid "Nearest neighbor"
-msgstr "Närmast intilliggande"
+msgstr "Angränsande"
msgctxt "IDS_PPAGE_OUTPUT_RESIZER_BILIN"
msgid "Bilinear"
@@ -741,9 +735,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (okomprimerat)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Audio Renderer"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Intern Ljudrenderare"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -757,10 +751,14 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "För att kunna se en inbäddad resurs i din webbläsare måste du aktivera webbgränssnittet.\n\nAnvänd \"Spara Som\"-knappen om du bara vill spara informationen."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
msgstr "Ladda ner undertexter"
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Ladda upp undertext"
+
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
msgstr "Fördröjning (ms):"
@@ -771,7 +769,7 @@ msgstr "Auto"
msgctxt "IDS_EXPORT_SETTINGS_NO_KEYS"
msgid "There are no customized keys to export."
-msgstr "Det finns inga anpassade knappar att exportera."
+msgstr "Det finns inga anpassade kortkommandon att exportera."
msgctxt "IDS_RFS_NO_FILES"
msgid "No media files found in the archive"
@@ -790,7 +788,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Kunde inte hitta alla arkivets volymer"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Videoytan kommer att allokeras som en textur, men 2D-funktionerna kommer fortfarande att användas för att kopiera och sträcka den till bakbufferten. Kräver ett grafikkort som kan allokera 32-bitars-, RGBA-, icke-tvåpotens-upplösta texturer och åtminstone i samma upplösning som videon."
msgctxt "IDC_TEXTURESURF3D"
@@ -815,7 +813,19 @@ msgstr "Reducerar \"tearing\" men förhindrar att verktygsfältet kan visas."
msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
-msgstr "Reducerar \"tearing\" genom att kringgå standard-vertikalsynken inbyggt i D3D."
+msgstr "Reducerar \"tearing\" genom att kringgå standard-VSync inbyggt i D3D."
+
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Tuner sökning"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Undertexter är inte laddade eller ej stött renderare."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
@@ -839,7 +849,7 @@ msgstr "Växla Navigeringsfält"
msgctxt "IDS_AG_VSYNCACCURATE"
msgid "Accurate VSync"
-msgstr "Noggrann vertikalsynk"
+msgstr "Noggrann VSync"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
@@ -889,9 +899,9 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Ljud av"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
-msgstr "Ljud av"
+msgstr "Ljud på"
msgctxt "ID_VOLUME_MUTE_DISABLED"
msgid "No audio"
@@ -911,7 +921,7 @@ msgstr "&Original"
msgctxt "IDS_SUBRESYNC_CURRENT"
msgid "&Current"
-msgstr "&Nuvarande"
+msgstr "&Aktuell"
msgctxt "IDS_SUBRESYNC_EDIT"
msgid "&Edit"
@@ -954,11 +964,11 @@ msgid "&Organize Favorites..."
msgstr "&Ordna Favoriter..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Blanda"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Öppna filens sökväg"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -975,7 +985,7 @@ msgstr "Pausad"
msgctxt "IDS_AG_EDL_NEW_CLIP"
msgid "EDL new clip"
-msgstr "EDL ny klip"
+msgstr "EDL nytt klipp"
msgctxt "IDS_RECENT_FILES_CLEAR"
msgid "&Clear list"
@@ -1027,7 +1037,7 @@ msgstr "PnS Rotera Z-"
msgctxt "IDS_AG_TEARING_TEST"
msgid "Tearing Test"
-msgstr "&Tearingtest"
+msgstr "Tearingtest"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
@@ -1042,7 +1052,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Zoom Till Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Göm i Helskärm"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1055,7 +1065,7 @@ msgstr "Buffrar... (%d%%)"
msgctxt "IDS_CONTROLS_CAPTURING"
msgid "Capturing..."
-msgstr "Fångar..."
+msgstr "Spelar in..."
msgctxt "IDS_CONTROLS_OPENING"
msgid "Opening..."
@@ -1139,15 +1149,15 @@ msgstr "App-kommando"
msgctxt "IDS_AG_MEDIAFILES"
msgid "Media files (all types)"
-msgstr "Media filer (alla typer)"
+msgstr "Mediefiler (alla typer)"
msgctxt "IDS_AG_ALLFILES"
msgid "All files (*.*)|*.*|"
-msgstr "All filer (*.*)|*.*|"
+msgstr "Alla filer (*.*)|*.*|"
msgctxt "IDS_AG_AUDIOFILES"
msgid "Audio files (all types)"
-msgstr "Ljud filer (alla typer)"
+msgstr "Ljudfiler (alla typer)"
msgctxt "IDS_AG_NOT_KNOWN"
msgid "Not known"
@@ -1155,7 +1165,7 @@ msgstr "Ej känt"
msgctxt "IDS_MPLAYERC_0"
msgid "Quick Open File"
-msgstr "Snabb Öppna fil"
+msgstr "Snabböppna fil"
msgctxt "IDS_AG_OPEN_FILE"
msgid "Open File"
@@ -1230,7 +1240,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Hämta alla filer i mappen"
msgctxt "IDS_HW_INDICATOR"
@@ -1303,7 +1313,7 @@ msgstr "Spela nästa fil i mappen"
msgctxt "IDS_AFTER_PLAYBACK_REWIND"
msgid "Rewind current file"
-msgstr "Spola tillbaka nuvarande fil"
+msgstr "Spola tillbaka aktuell fil"
msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
msgid "Close"
@@ -1331,12 +1341,88 @@ msgstr "Maximal storlek (N x N px) på omslagsbilderna som läses in i \"enbart
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr "Undertextfördröjningen kommer att minskas/ökas med detta värde varje gång motsvarande snabbkommando används (%s/%s)."
+msgstr "Undertextfördröjningen kommer att minskas/ökas med detta värde varje gång motsvarande kortkommando används (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<inte definierad>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Kolla"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Flytta upp"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Flytta ned"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sortera efter LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Ta bort alla"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Är du säker på att du vill ta bort alla kanaler från listan?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Ingen information tillgänglig"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Var vänlig vänta, analys pågår..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "Bildformat %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Aktiverar loggning till fil (omstart krävs)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Återstående tid"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Hög precision"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Efter Uppspelning: Spola tillbaka aktuell fil"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Efter Uppspelning: Stäng"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC stötte på ett fel vid uppstart. Med din hjälp kan vi kanske lösa det.\n\nVill du rapportera felet?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Ange ett positivt värde om ljudet är för tidigt, negativt värde om det är för sent."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Förhandsvisningen är avstängd, du kan aktivera den i MPC-HCs inställningar"
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Detta alternativ kan användas för att förhandsvisa media filer från en nätverks location. Använd endast på ett säkert nätverk.\n\nVill du verkligen aktivera detta alternativ?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Intern undertextrenderare"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Öppna Enhet"
@@ -1357,13 +1443,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Bilden sparades framgångsrikt"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Load Undertext"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Save Undertext"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,11 +1472,11 @@ msgid "Stop"
msgstr "Stoppa"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Bild steg"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Bild steg tillbaka"
msgctxt "IDS_AG_GO_TO"
@@ -1490,8 +1576,8 @@ msgid "Thumbnails saved successfully"
msgstr "Miniatyrerna har sparats"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Video S&tream"
+msgid "Vide&o Track"
+msgstr "&Videospår"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1503,7 +1589,7 @@ msgstr "Återställ inställningar"
msgctxt "IDS_RESET_SETTINGS_WARNING"
msgid "Are you sure you want to restore MPC-HC to its default settings?\nBe warned that ALL your current settings will be lost!"
-msgstr "Är du säker att du du vill återställa alla MPC-HC:s inställningar till standardvärden?\nVarning: ALLA nuvarande inställningar kommer försvinna! "
+msgstr "Är du säker att du du vill återställa alla MPC-HC:s inställningar till standardvärden?\nVarning: ALLA aktuella inställningar kommer försvinna! "
msgctxt "IDS_RESET_SETTINGS_MUTEX"
msgid "Please close all instances of MPC-HC so that the default settings can be restored."
@@ -1538,11 +1624,11 @@ msgid "Reset Rate"
msgstr "Återställ Hastighet"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Ljud Fördröjning +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Ljud Fördröjning -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1613,14 +1699,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Shift Undertext Höger"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Visa Stats"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Hoppa till början"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Visa Filnamn"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Spela DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Spela Blu-ray"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Visa Renderar-statistik"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Återställ Renderar-statistik"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Undertexter::Div"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Göm kanter"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Endast Ram"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Visa Rubrik && Meny"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Dölj menyraden"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Avancerat"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Visa Minimal"
@@ -1686,8 +1812,8 @@ msgid "PnS Dec Height"
msgstr "PnS Minska Höjd"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Laddar ner undertext(er), vänta."
+msgid "Downloading [%s] \"%s\""
+msgstr ""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1698,8 +1824,8 @@ msgid "No subtitles found."
msgstr "Inga undertexter hittades."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d undertext(er) tillgänglig."
+msgid "%d subtitle(s) available."
+msgstr "%d undertext(er) tillgängliga."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1755,19 +1881,19 @@ msgstr "PnS Center"
msgctxt "IDS_AG_PNS_LEFT"
msgid "PnS Left"
-msgstr "PnS Vänster"
+msgstr "PnS vänster"
msgctxt "IDS_AG_PNS_RIGHT"
msgid "PnS Right"
-msgstr "PnS Höger"
+msgstr "PnS höger"
msgctxt "IDS_AG_PNS_UP"
msgid "PnS Up"
-msgstr "PnS Upp"
+msgstr "PnS upp"
msgctxt "IDS_AG_PNS_DOWN"
msgid "PnS Down"
-msgstr "PnS Ner"
+msgstr "PnS ned"
msgctxt "IDS_AG_PNS_UPLEFT"
msgid "PnS Up/Left"
@@ -1803,7 +1929,7 @@ msgstr "DVD Titel Meny"
msgctxt "IDS_AG_DVD_ROOT_MENU"
msgid "DVD Root Menu"
-msgstr "DVD Root Meny"
+msgstr "DVD Rot Meny"
msgctxt "IDS_MPLAYERC_65"
msgid "DVD Subtitle Menu"
@@ -1815,7 +1941,7 @@ msgstr "DVD Ljud Meny"
msgctxt "IDS_MPLAYERC_67"
msgid "DVD Angle Menu"
-msgstr "DVD Angle Meny"
+msgstr "DVD Vinkel Meny"
msgctxt "IDS_MPLAYERC_68"
msgid "DVD Chapter Menu"
@@ -1851,38 +1977,38 @@ msgstr "DVD Meny Lämna"
msgctxt "IDS_AG_BOSS_KEY"
msgid "Boss key"
-msgstr "Boss knappen"
+msgstr "Boss-knapp"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Player Meny (short)"
+msgid "Player Menu"
+msgstr "Spelarmeny"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Player Meny (long)"
+msgid "Player Menu (full)"
+msgstr "Spelarmeny (full)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
-msgstr "Filter Meny"
+msgstr "Filtermeny"
msgctxt "IDS_AG_OPTIONS"
msgid "Options"
msgstr "Inställningar"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Nästa Ljud"
+msgid "Next Audio Track"
+msgstr "Nästa Ljudspår"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Föregående Ljud"
+msgid "Prev Audio Track"
+msgstr "Föregående Ljudspår"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
+msgid "Next Subtitle Track"
msgstr "Nästa Undertext"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
+msgid "Prev Subtitle Track"
msgstr "Föregående Undertext"
msgctxt "IDS_MPLAYERC_85"
@@ -1893,22 +2019,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Ladda om Undertext"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Nästa Ljud (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Föregående Ljud (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Nästa Undertext (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Föregående Undertext (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Nästa Vinkel (DVD)"
@@ -1918,28 +2028,28 @@ msgid "Prev Angle (DVD)"
msgstr "Föregående Vinkel (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Nästa Ljud (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Nästa Ljudspår (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Föregående Ljud (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Föregående Ljudspår (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
+msgid "Next Subtitle Track (DVD)"
msgstr "Nästa Undertext (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
+msgid "Prev Subtitle Track (DVD)"
msgstr "Föregående Undertext (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "På/Av Undertext (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Återstående tid"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Visa Aktuell tid"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2075,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Krypterad"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Ja"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Nej"
@@ -2007,7 +2117,7 @@ msgstr "Kan inte spara Undertexter"
msgctxt "IDS_AG_FRAMERATE"
msgid "Frame rate"
-msgstr "Bild-hastighet"
+msgstr "Bildfrekvens"
msgctxt "IDS_MAINFRM_6"
msgid "drawn: %d, dropped: %d"
@@ -2026,12 +2136,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Volym: %02lu/%02lu, Titel: %02lu/%02lu, Kapitel: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Vinkel: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bitar %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2121,14 +2231,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Bildbredd"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL:en verkar vara korrekt!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Protokollversionerna matchar inte. Var vänlig uppdatera din spelare eller välj en annan adress!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Bildförhållande"
@@ -2138,19 +2240,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Totalt: %ld, Förlorade: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Storlek: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Storlek: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Ledigt: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Ledigt: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2211,19 +2313,19 @@ msgstr "Ogiltigt bildformat, kan inte skapa miniatyrer ut av %d bpp dibs."
msgctxt "IDS_THUMBNAILS_INFO_FILESIZE"
msgid "File Size: %s (%s bytes)\\N"
-msgstr "Fil Storlek: %s (%s bytes)\\N"
+msgstr "Filstorlek: %s (%s bytes)\\N"
msgctxt "IDS_THUMBNAILS_INFO_HEADER"
msgid "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}File Name: %s\\N%sResolution: %dx%d %s\\NDuration: %02d:%02d:%02d"
-msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Filnamn: %s\\N%Upplösning: %dx%d %s\\NLängd: %02d:%02d:%02d"
+msgstr "{\\an7\\1c&H000000&\\fs16\\b0\\bord0\\shad0}Filnamn: %s\\N%sUpplösning: %dx%d %s\\NLängd: %02d:%02d:%02d"
msgctxt "IDS_THUMBNAIL_TOO_SMALL"
msgid "The thumbnails would be too small, impossible to create the file.\n\nTry lowering the number of thumbnails or increasing the total size."
msgstr "Miniatyrbilderna skulle bli för små, omöjligt att skapa filen.\n\nFörsök att minska antalet miniatyrbilder eller att öka den totala storleken."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "För att ladda undertexter måste du byta videorenderartyp och öppna filen igen.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR eller Haali\n- RealMedia: Specialrenderare för RealMedia, eller öppna filen via DirectShow\n- QuickTime: DX7 eller DX- rendererare för QuickTime\n- ShockWave: Fungerar ej"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "För att ladda undertexter måste du byta videorenderartyp och öppna filen igen.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR eller Haali\n- RealMedia: Specialrenderare för RealMedia, eller öppna filen via DirectShow\n- QuickTime: DX7 eller DX- rendererare för QuickTime\n- ShockWave: Fungerar ej"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2231,15 +2333,15 @@ msgstr "Undertextfiler"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
-msgstr "Aspekt Förhålland: %ld:%ld"
+msgstr "Bildförhållande: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Aspekt Förhålland: Standard"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr ""
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Ljud Fördröjning: %I64dms"
+msgid "Audio delay: %I64d ms"
+msgstr "Ljudfördröjning: %I64dms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2250,8 +2352,8 @@ msgid "Out of memory"
msgstr "Slut på ledigt minne"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Error: Flash for IE is required"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Error: Flash for Internet Explorer is required"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2273,10 +2375,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Misslyckades att rendera filen"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Felaktig URL, kunde inte hitta en undertextdatabas där!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Kapitel: "
@@ -2295,15 +2393,7 @@ msgstr "Balans: %s"
msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
-msgstr "Nuvarande"
-
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC avbröts oväntat. För att hjälpa oss fixa problemet, var vänlig skicka denna fil, \"%s\", till våran felrapportsdatabas.\n\nVill du öppna mappen med minidump-filen och besöka felrapportsdatabasen nu?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Misslyckade att skapa dump-fil i \"%s\" (fel %u)"
+msgstr "Aktuell"
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
@@ -2322,7 +2412,7 @@ msgid "Toggle Caption&Menu"
msgstr "Växla Rubrik && Meny"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Växla Sök Bar"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2359,7 +2449,7 @@ msgstr "Okänd filtyp"
msgctxt "IDS_MAINFRM_92"
msgid "Unsupported stream"
-msgstr "Strömen stöds ej"
+msgstr "Strömmen stöds inte"
msgctxt "IDS_MAINFRM_93"
msgid "Cannot find DVD directory"
@@ -2391,7 +2481,7 @@ msgstr "Kunde inte öppna någon enhet"
msgctxt "IDS_AG_SOUND"
msgid "Sound"
-msgstr "LJud"
+msgstr "Ljud"
msgctxt "IDS_MAINFRM_114"
msgid "%s was not found, please insert media containing this file."
@@ -2423,11 +2513,11 @@ msgstr "VSync"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr "(Regissörens kommentarer 1)"
+msgstr " (Regissörens kommentarer 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr "(Regissörens kommentarer 2)"
+msgstr " (Regissörens kommentarer 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
@@ -2463,23 +2553,23 @@ msgstr "Undertextförskjutning: %ld ms"
msgctxt "IDS_VOLUME_BOOST_INC"
msgid "Volume boost increase"
-msgstr "Volym boost ökning"
+msgstr "Volym-boost ökning"
msgctxt "IDS_VOLUME_BOOST_DEC"
msgid "Volume boost decrease"
-msgstr "Volym boost minskning"
+msgstr "Volym-boost minskning"
msgctxt "IDS_VOLUME_BOOST_MIN"
msgid "Volume boost Min"
-msgstr "Volym boost Min"
+msgstr "Volym-boost Min"
msgctxt "IDS_VOLUME_BOOST_MAX"
msgid "Volume boost Max"
-msgstr "Volym boost Max"
+msgstr "Volym-boost Max"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Användning: mpc-hc.exe \"sökväg\" [växlar]\n\n\"sökväg\"\t\tHuvudfilen eller katalog för att ladda (jokertecken\n\t\tstödjs, \"-\" denotes standard input)\n/dub \"fil\"\t\tLägg till ytterligare en ljudfil\n/dubdelay \"fil\"\tLägg till ytterligare en ljudfil skiftat med XXms (om\n\t\tfilen innehåller \"...DELAY XXms...\")\n/d3dfs\t\tBörja rendering i D3D helskärmsläge\n/sub \"fil\"\t\tLägg till ytterligare en undertextfil\n/filter \"filternamn\"\tLadda DirectShow filter från ett dynamiskt länk\n\t\tbibliotek (jokertecken stödjs)\n/dvd\t\tKör i DVD-läge, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStarta uppspelningen vid titel T, kapitel C\n/dvdpos T#hh:mm\tStarta uppspelningen vid titel T, tid hh:mm:ss\n/cd\t\tLadda alla spår av en ljud-CD eller (S)VCD,\n\t\t\"pathname\" innebär att enhetssökväg (valfritt)\n/device\t\tOpen the default video device\n/open\t\tÖppna filen, börja inte spela automatiskt\n/play\t\tBörja spela filen så fort spelaren\n\t\tstartar\n/close\t\tStäng spelaren efter uppspelningen (fungerar bara när\n\t\tanvänds med /play)\n/shutdown\tStänga av operativsystemet efter uppspelningen\n/fullscreen\tStarta i fullskärmsläge\n/minimerad\tStarta i minimerat läge\n/ny\t\tAnvänd en ny instans av spelaren\n/add\t\tLägg till \"pathname\" i spelningslista, kan kombineras\n\t\tmed /open och /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tSkapa filassociationer för ljudfiler\n/regpl\t\tSkapa filassociationer för spelningslista\n/regall\t\tSkapa filassociationer för för alla filtyper som stödjs\n/unregall\t\tTa bort alla filassociationer \n/start ms\t\tBörja spela vid \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tBörja spela vid tid hh:mm:ss\n/fixedsize w,h\tSätt fast fönsterstorlek\n/monitor N\tStart på bildskärm N, där N börjar från 1\n/ljudrenderare N\tBörja användaljudrenderare N, där N börjar från 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tÅterställ standardinställningar\n/help /h /?\tVisa hjälp för kommandoradsväxlar\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2515,15 +2605,15 @@ msgstr "Växla Felsöknings-shaders"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
-msgstr "Zoom 50 %"
+msgstr "Zoom 50%"
msgctxt "IDS_AG_ZOOM_100"
msgid "Zoom 100%"
-msgstr "Zoom 100 %"
+msgstr "Zoom 100%"
msgctxt "IDS_AG_ZOOM_200"
msgid "Zoom 200%"
-msgstr "Zoom 200 %"
+msgstr "Zoom 200%"
msgctxt "IDS_AG_NEXT_AR_PRESET"
msgid "Next AR Preset"
@@ -2565,21 +2655,13 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Aktivera alla filter"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Tuner sökning"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Undertexter är inte laddade eller ej stött renderare."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Författare okänd. Kontakta oss om du har gjort den här loggan!"
msgctxt "IDS_NO_MORE_MEDIA"
msgid "No more media in the current folder."
-msgstr "Inga fler medierfiler i den aktuella mappen."
+msgstr "Inga fler mediafiler i den aktuella mappen."
msgctxt "IDS_FIRST_IN_FOLDER"
msgid "The first file of the folder is already loaded."
@@ -2661,41 +2743,13 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Övre bakre höger"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Återställ visningsstatistik"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Undertexter::Misc"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Göm kanter"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Endast Ram"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Visa Bildtext&&Meny"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Dölj menyraden"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Avancerat"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
-msgstr "Ovanför seekbar"
+msgid "Above seek bar"
+msgstr "Ovanför seek bar"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
-msgstr "Nedanför seekbar"
+msgid "Below seek bar"
+msgstr "Nedanför seek bar"
msgctxt "IDS_VIDEO_STREAM"
msgid "Video: %s"
@@ -2862,8 +2916,8 @@ msgid "Other Audio"
msgstr "Annat ljudformat"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2927,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3011,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Spelningslista"
@@ -2977,18 +3035,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Bildförhållande"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Använd WASAPI (starta om uppspelning)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Dämpa ljud vid snabbspolning"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Ljudenhet:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: På"
@@ -3031,15 +3077,15 @@ msgstr "Visa vid närmaste VSync: Av"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_ON"
msgid "Color Management: On"
-msgstr "&Färghantering: På"
+msgstr "Färghantering: På"
msgctxt "IDS_OSD_RS_COLOR_MANAGEMENT_OFF"
msgid "Color Management: Off"
-msgstr "&Färghantering: Av"
+msgstr "Färghantering: Av"
msgctxt "IDS_OSD_RS_INPUT_TYPE_AUTO"
msgid "Input Type: Auto-Detect"
-msgstr " Inmatningstyp: Automatiskt"
+msgstr "Inmatningstyp: Automatiskt"
msgctxt "IDS_OSD_RS_INPUT_TYPE_HDTV"
msgid "Input Type: HDTV"
@@ -3055,15 +3101,15 @@ msgstr "Inmatningstyp: SDTV PAL"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_BRIGHT"
msgid "Ambient Light: Bright (2.2 Gamma)"
-msgstr "Omgivningsljus: Ljust (2.2 Gamma)"
+msgstr "Omgivningsljus: Ljust (2,2 Gamma)"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DIM"
msgid "Ambient Light: Dim (2.35 Gamma)"
-msgstr "Omgivningsljus: Svagt (2.35 Gamma)"
+msgstr "Omgivningsljus: Svagt (2,35 Gamma)"
msgctxt "IDS_OSD_RS_AMBIENT_LIGHT_DARK"
msgid "Ambient Light: Dark (2.4 Gamma)"
-msgstr "Omgivningsljus: Mörkt (2.4 Gamma)"
+msgstr "Omgivningsljus: Mörkt (2,4 Gamma)"
msgctxt "IDS_OSD_RS_REND_INTENT_PERCEPT"
msgid "Rendering Intent: Perceptual"
@@ -3219,7 +3265,7 @@ msgstr "\nDu använder redan den senaste stabila versionen."
msgctxt "IDS_USING_NEWER_VERSION"
msgid "Your current version is v%s.\n\nThe latest stable version is v%s."
-msgstr "Din nuvarande version är v%s.\n\nDen senaste stabila versionen är v%s."
+msgstr "Din aktuella version är v%s.\n\nDen senaste stabila versionen är v%s."
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
@@ -3277,6 +3323,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Återfå volym: Av"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bytes"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3334,7 +3384,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Tolkningsfel av inskriven uppdateringfrekvens!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Kan inte bildstega, försök med en annan videorenderare."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3353,10 +3403,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "\"Spara skärmdump\"- och \"Spara miniatyrer\"-funktionerna fungerar inte med Overlay Mixer-videorenderaren.\nÄndra videorenderare i MPC:s utmatningsinställningar och öppna filen igen."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Kan inte ansluta till online undertextdatabasen."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Vill du aktivera EDL-redigeraren?"
@@ -3425,7 +3471,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Du måste tillämpa de nya inställningarna innan du testar dem."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Efter Uppspelning: Stäng"
@@ -3453,6 +3499,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Efter Uppspelning: Stäng av bildskärmen"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Efter Uppspelning: Spela nästa fil i mappen"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Efter Uppspelning: Gör ingenting"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Ljusstyrka: %s"
@@ -3483,7 +3537,7 @@ msgstr "Öka Ljusstyrka"
msgctxt "IDS_LANG_PREF_EXAMPLE"
msgid "Enter your preferred languages here.\nFor example, type: \"eng jap swe\""
-msgstr "Skriv in dina föredragna språk här.\nTill exempel, skriv: \"eng jap swe\""
+msgstr "Skriv in dina föredragna språk här.\nTill exempel: \"eng jap swe\""
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
@@ -3527,9 +3581,393 @@ msgstr "Associera enbart med ljudformat"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr "Rensa alla associeringar"
+msgstr "Radera alla associeringar"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Inställningar"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Nerladdningar"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Ladda ner undertexter"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Användarnamn"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Ladda ner && Öppna"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Återställ"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Flytta upp"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Flytta ned"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Ladda upp undertext"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.dialogs.po
index 218c24473..50372f0d1 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.dialogs.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# M. Somsak, 2014
+# M. Somsak, 2014-2016
# M. Somsak, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-10-01 18:03+0000\n"
-"Last-Translator: M. Somsak\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/mpc-hc/language/th_TH/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Thai (Thailand) (http://www.transifex.com/mpc-hc/mpc-hc/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -110,7 +110,7 @@ msgid "Enable custom channel mapping"
msgstr "ใช้การวางตำแหน่งช่อง ที่กำหนดเอง"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "การกำหนดค่าลำโพงสำหรับ"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -118,7 +118,7 @@ msgid "input channels:"
msgstr "ช่องขาเข้า:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "เมื่อคลิกบางอย่าง กดปุ่ม Shift ค้างไว้ด้วยจะเปลี่ยนแปลงโดยทันที"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -190,8 +190,8 @@ msgid "About"
msgstr "เกี่ยวกับ"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "สงวนลิขสิทธิ์ © 2002-2014 ดูที่ Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "สงวนลิขสิทธิ์ © 2002-2017 ดูที่ Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -375,7 +375,7 @@ msgstr "การตั้งค่าเพิ่มเติม"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
-msgstr "อนุญาตศัพท์บรรยายเหตุการณ์ ใน \"Line 21 Decoder\""
+msgstr "อนุญาตศัพท์บรรยายเหตุการณ์ ใน \"Line 21 Decoder\""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio"
@@ -422,12 +422,16 @@ msgid "time(s)"
msgstr "ครั้ง"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "โหมดวนซ้ำ:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "หลังเล่นจบ"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "ขาออก"
+msgid "Default zoom"
+msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -473,10 +477,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "โหลดไฟล์เสียงอัตโนมัติ"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "ใช้ตัวแปลผลศัพท์บรรยายที่มีมาให้"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "การควบคุม"
@@ -570,8 +570,8 @@ msgid "Warning"
msgstr "คำเตือน"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "ถ้าคุณฝืนและใช้งานการลดรอยหยักในโหมดเต็มจอบางที่ที่การตั้งค่าการ์ดจอของคุณ ศัพท์บรรยายจะไม่ได้ดูดีขึ้นแต่จะเปลือง cpu ของคุณ"
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "ถ้าคุณฝืนและใช้งานการลดรอยหยักในโหมดเต็มจอบางที่ที่การตั้งค่าการ์ดจอของคุณ ศัพท์บรรยายจะไม่ได้ดูดีขึ้นแต่จะเปลือง CPU ของคุณ"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -677,16 +677,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "ป้องกันไม่ให้เครื่องเล่นย่อลง เมื่ออยู่ในแบบเต็มจอบนจอภาพที่ไม่ใช่จอตั้งต้น"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "ใช้คุณลักษณะ Windows 7 Taskbar"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "ใช้คุณลักษณะ taskbar ที่ดียิ่งขึ้น"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "เปิดไฟล์ ก่อนหน้า/ถัดไป ในโฟลเดอร์ เมื่อเลือก \"ข้ามไปหลัง/ข้ามไปหน้า\" หากมีเพียงรายการเดียวในบัญชีการเล่น"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "ใช้ตัวบอกเวลา:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -879,7 +879,7 @@ msgstr "ซูม: 0.2 -> 3.0"
msgctxt "IDD_PPAGEACCELTBL_IDC_CHECK2"
msgid "Global Media Keys"
-msgstr "ปุ่มคีย์ของสื่อโดยทั่วไป"
+msgstr "ปุ่มคีย์ของสื่อทั่วทั้งหมด"
msgctxt "IDD_PPAGEACCELTBL_IDC_BUTTON1"
msgid "Select All"
@@ -1126,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "ตัวแปลผลเสียง"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "การตั้งค่า VMR-7/VMR-9 (renderless) และ EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "การตั้งค่า VMR-9 (renderless) และ EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1170,8 +1170,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "ศัพท์บรรยาย *"
+msgid "Subtitles"
+msgstr "ศัพท์บรรยาย"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1186,12 @@ msgid "Rotation"
msgstr "การหมุน"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* ตัวกรองภายนอก (เช่น VSFilter) สามารถแสดงศัพท์บรรยายได้บนทุกตัวแปลผล"
+msgid "Subtitle Renderer"
+msgstr "ตัวแปลผลศัพท์บรรยาย"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1205,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "อนุญาตการเข้าถึงจากโฮสต์ถิ่นเท่านั้น"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "ใช้งานการแสดงตัวอย่าง"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "พิมพ์ข้อมูลดีบัก"
@@ -1230,17 +1238,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "ตัวจัดการ CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "มีศัพท์บรรยายออนไลน์"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "ดาวน์โหลด และเปิด"
+msgid "Download subtitles"
+msgstr "ดาวน์โหลดศัพท์บรรยาย"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "แทนที่ศัพท์บรรยายที่โหลดอยู่ปัจจุบัน"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "ดาวน์โหลด"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "เรียกใหม่"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "ยกเลิก"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "ตัวเลือก"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "อัพโหลดศัพท์บรรยาย"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "อัพโหลด"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "ยกเลิก"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "ตัวเลือก"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "บันทึกเป็น...."
@@ -1278,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "ใช้งานการตรวจสอบการอัพเดตอัตโนมัติ"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "ช่วงของการตรวจสอบ:"
+msgid "Check every:"
+msgstr "ตรวจสอบทุก:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1542,16 +1578,28 @@ msgid "Reset"
msgstr "คืนค่า"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "ฐานข้อมูลออนไลน์"
+msgid "Online search, download and upload subtitles"
+msgstr "ค้นหา, ดาวน์โหลด และอัพโหลดศัพท์บรรยายออนไลน์"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "ค้นหาและดาวน์โหลดศัพท์บรรยายอัตโนมัติ ถ้าค้นหาในท้องถิ่นแล้วไม่มี"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "ศัพท์บรรยายที่ชอบสำหรับผู้บกพร่องทางการได้ยิน (เมื่อได้ระบุไว้โดยผู้จัดหาศัพท์บรรยาย)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "ไม่สนใจไฟล์ที่ประกอบด้วยคำใดก็ตามต่อไปนี้:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "URL พื้่นฐานของฐานข้อมูลศัพท์บรรยายออนไลน์:"
+msgid "Languages in order of preference:"
+msgstr "ภาษาตามลำดับความชอบ:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "ทดสอบ"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "อัพโหลดศัพท์บรรยายที่แอ็คทีฟอัตโนมัติ เมื่อจบการเล่นวิดีโอ"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1653,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "ค่าตั้งต้น"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "อุปกรณ์"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "โหมดเอกสิทธิ์"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "อนุญาตบิตสตรีม"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "ตัวเลือก"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "ใช้งานการครอสฟีดสเตอริโอ (สำหรับหูฟัง)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "ระดับ:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "หมายเหตุ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "เพื่อลดเสียงผิดเพี้ยนให้น้อยที่สุด ขอแนะนำให้คงความดังเครื่องเล่นไว้ที่ประมาณ 85% เมื่อเล่นเนื้อหาที่เข้ารหัสแบบเลาด์ลอสซี่"
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "คุณภาพ JPEG:"
@@ -1665,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "ตกลง"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "รายงานข้อบกพร่อง"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "ขออภัยด้วย ดูเหมือน MPC-HC เพิ่งบกพร่องในการทำงาน :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "ส่งรายงานบั๊ก เพื่อช่วยเราวินิฉัยและแก้ปัญหา"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "ข้อมูลตัวเลือก"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "อีเมล:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "ที่อยู่อีเมลของคุณอาจไม่จำเป็นต้องให้ แต่มันจะถูกใช้กรณีถ้านักพัฒนาต้องการติดต่อคุณเพื่อขอข้อมูลเพิ่มเติมเท่านั้น"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "บรรยายปัญหา (ใช้ภาษาอังกฤษเท่านั้น):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "เริ่ม MPC-HC ใหม่"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "ออกจาก MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.menus.po
index f8dd616dd..bb32d5984 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.menus.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# M. Somsak, 2014
+# M. Somsak, 2014-2016
# M. Somsak, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-10-01 18:03+0000\n"
-"Last-Translator: M. Somsak\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/mpc-hc/language/th_TH/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-01-31 22:01+0000\n"
+"Last-Translator: Underground78\n"
+"Language-Team: Thai (Thailand) (http://www.transifex.com/mpc-hc/mpc-hc/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -65,29 +65,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "บันทึกรูป&ย่อ..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "โห&ลดศัพท์บรรยาย..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "บันทึกศัพท์&บรรยาย..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "ฐาน&ข้อมูลศัพท์บรรยาย"
+msgid "S&ubtitles"
+msgstr "ศัพท์บรรยาย"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&ค้นหา..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "โห&ลดศัพท์บรรยาย..."
+
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "&บันทึกศัพท์บรรยาย..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&อัพโหลด..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&ดาวน์โหลดศัพท์บรรยาย..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&ดาวน์โหลด..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&อัพโหลดศัพท์บรรยาย..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -197,13 +193,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "ทดสอบการฉีกของ&ภาพ"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "แสดงส&ถิติ"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "แสดง&สถิติ"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "เ&วลาที่เหลือ"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "แสดงเ&วลาปัจจุบัน"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "แสดง&ชื่อไฟล์"
msgctxt "POPUP"
msgid "&Output Range"
@@ -405,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "สัมผัสหน้าต่างจากด้านนอ&ก"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&คงอัตราส่วนภาพ"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "&ฝืนอัตราส่วนภาพ"
+msgid "&Aspect Ratio"
+msgstr "อัตราส่วน&ภาพ"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "ค่า&ตั้งต้น"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&ค่าตั้งต้น (ค่าแสดงผล)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -437,6 +433,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "แ&ก้ไขค่าต่างอัตราส่วนฯ จอภาพ/เดสก์ท็อป"
@@ -530,9 +530,25 @@ msgid "&Stop"
msgstr "ห&ยุด"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "เดินเ&ฟรม"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "การวนซ้ำ"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "&ตลอดไป"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "ไ&ฟล์"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&บัญชีการเล่น"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&ลดอัตรา"
@@ -554,16 +570,16 @@ msgid "S&haders"
msgstr "เฉดเ&ดอร์"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "เ&สียง"
+msgid "&Audio Track"
+msgstr "แทร็คเ&สียง"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "ศัพท์&บรรยาย"
+msgid "Su&btitle Track"
+msgstr "แทร็คศัพท์&บรรยาย"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "กระแส&วิดีโอ"
+msgid "Vide&o Track"
+msgstr "แทร็ค&วิดีโอ"
msgctxt "POPUP"
msgid "&Volume"
@@ -585,7 +601,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "หลังเล่น&จบ"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "ไ&ม่ต้องทำอะไร"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "เล่นไฟล์&ถัดไปในโฟลเดอร์"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "ปิด&จอภาพ"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&ออก"
@@ -609,10 +637,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "&ล็อค"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "ปิด&จอภาพ"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&นำทาง"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.strings.po
index d670ccc1d..cc92e05b9 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.th_TH.strings.po
@@ -1,17 +1,17 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# M. Somsak, 2014
+# M. Somsak, 2014-2016
# M. Somsak, 2014
# M. Somsak, 2014
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-01 18:03+0000\n"
-"Last-Translator: M. Somsak\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/mpc-hc/language/th_TH/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Thai (Thailand) (http://www.transifex.com/mpc-hc/mpc-hc/language/th_TH/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -62,10 +62,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "คุณสมบัติ"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "ไฟล์"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&ลักษณะตั้งต้น"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "บัญชีการเล่น"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "ไฟล์"
@@ -116,7 +124,27 @@ msgstr "ลักษณะ"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr "ถ้าเป้าหมายการแปลผลไม่ถูกระบุ, ศัพท์บรรยาย SSA/ASS จะถูกแปลผลสัมพันธ์กับเฟรมวิดีโอ ในขณะที่ศัพท์ฯข้อความอื่นๆ จะถูกแปลผลสัมพันธ์กับหน้าต่าง "
+msgstr "ถ้าเป้าหมายการแปลผลไม่ถูกระบุ, ศัพท์บรรยาย SSA/ASS จะถูกแปลผลสัมพันธ์กับเฟรมวิดีโอ ในขณะที่ศัพท์ฯข้อความอื่นๆ จะถูกแปลผลสัมพันธ์กับหน้าต่าง"
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "โหมดวนซ้ำ: บัญชีการเล่น"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "โหมดวนซ้ำ: ไฟล์"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "วนซ้ำตลอดไป: เปิด"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "วนซ้ำตลอดไป: ปิด"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "วนซ้ำตลอดไป"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
@@ -327,12 +355,12 @@ msgid "On/Off"
msgstr "เปิด/ปิด"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "จาก fps"
+msgid "From (FPS)"
+msgstr "จาก (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "สู่ fps"
+msgid "To (FPS)"
+msgstr "สู่ (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -466,6 +494,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "การเล่น::เฉดเดอร์"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "ทรัพยากร"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "เบ็ดเตล็ด"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "ข้อมูลสื่อ"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "การเล่น::จับข้อมูล"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "การเล่น::การตั้งค่าตัวแปลผลซิงค์"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "การเล่น::เต็มจอ"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "ตัวกรองภายใน::ตัวแปลผลเสียง"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "ตัวสลับเสียง"
@@ -490,18 +546,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (windowed)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (windowed)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderless)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (renderless)"
@@ -554,34 +602,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "เครื่องเล่น::ส่วนประสานเว็บ"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "ศัพท์บรรยาย::ฐานข้อมูล"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "ทรัพยากร"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "เบ็ดเตล็ด"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "ข้อมูลสื่อ"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "การเล่น::จับข้อมูล"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "การเล่น::การตั้งค่าตัวแปลผลซิงค์"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "การเล่น::เต็มจอ"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "รายละเอียด"
@@ -596,23 +616,15 @@ msgstr "ตัวกรองวิดีโอตั้งต้นสำหร
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "นี่คือตัวแปลผลตั้งต้นของ Windows 9x/me/2k ขึ้นกับทัศนวิสัยหน้าต่างวิดีโอและความสามารถของการ์ดจอของคุณ, มันจะสลับอย่างแปรเปลี่ยนได้ระหว่างการแปลผล GDI, DirectDraw, Overlay"
+msgstr "นี่คือตัวแปลผลตั้งต้นของ Windows 9x/me/2k ขึ้นกับทัศนวิสัยหน้าต่างวิดีโอและความสามารถของการ์ดจอของคุณ, มันจะสลับอย่างแปรเปลี่ยนได้ระหว่างการแปลผล GDI, DirectDraw, Overlay"
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "แปลผลใน overlay เสมอ โดยทั่วไปรูปแบบ YUV เท่านั้นที่ได้รับอนุญาต, แต่พวกมันจะถูกนำเสนอโดยตรงปราศจากการแปลงสีใดๆเป็น RGB นี่คือวิธีการแปลผลทั้งหมดที่เร็วที่สุด และเป็นที่เดียวที่คุณสามารถมั่นใจการทำภาพกระจกวิดีโอแบบเต็มจอ สู่การกระตุ้นโทรทัศน์ขาออก"
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "ตัวแปลผลตั้งต้นสำหรับ Windows XP เสถียรมากและช้ากว่า Overlay mixer เล็กน้อยเท่านั้น ใช้ DirectDraw และรันใน Overlay เมื่อมันสามารถ"
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "ใช้ได้เฉพาะถ้าคุณมีการติดตั้ง DirectX 9 ไว้แล้ว มีความสามารถเหมือน VMR-7 (windowed), แต่จะไม่ใช้การแปลผล Overlay ด้วยเหตุนี้มันจึงอาจช้ากว่า VMR-7 (windowed)"
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "เหมือนกับ VMR-7 (windowed) เว้นแต่ปลั๊กอิน Allocator-Presenter ของ MPC-HC สำหรับการทำศัพท์บรรยาย, ส่วนการทำภาพกระจกวิดีโอ Overlay จะใช้งานไม่ได้, พิกัดสีเดสก์ท็อปแบบ \"สีจริง\" ถูกแนะนำ"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "จะมีพร้อมใช้ถ้าคุณได้การติดตั้ง DirectX 9 ไว้เท่านั้น เสถียรมากแต่จะไม่มีการใช้การแปลผล Overlay เพราะสิ่งนี้อาจช้ากว่า Overlay mixer"
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -623,8 +635,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "เหมือนกับ VMR-9 (renderless) เว้นแต่ใช้ตัวปรับขนาด true two-pass bicubic"
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "เชื่อมต่อกับชนิดสื่อที่คล้ายวิดีโอใดๆก็ตาม และจะไม่ส่งตัวอย่างที่เข้ามาไปยังที่ใด ใช้มันถ้าคุณไม่ต้องการแสดงผลวิดีโอและต้องการประหยัดกำลัง cpu จากการทำงานที่ไม่จำเป็น"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "เชื่อมต่อกับชนิดสื่อที่คล้ายวิดีโอใดๆก็ตาม และจะไม่ส่งตัวอย่างที่เข้ามาไปยังที่ใด ใช้มันถ้าคุณไม่ต้องการแสดงผลวิดีโอและต้องการประหยัดกำลัง CPU จากการทำงานที่ไม่จำเป็น"
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -650,10 +662,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "ตัวแปลผลของ Real เอง สคริปต์ SMIL จะใช้งานได้ แต่ปฏิกิริยาไม่น่าใช่, ใช้ DirectDraw และรันใน Overlay เมื่อมันสามารถ"
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "ขาออกของ Real's engine ถูกแปลผลโดย DX7-based Allocator-Presenter ของ VMR-7 (renderless)"
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "ขาออกของ Real's engine ถูกแปลผลโดย DX9-based Allocator-Presenter ของ VMR-9 (renderless)"
@@ -662,10 +670,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "ตัวแปลผลของ QuickTime เอง ช้ากว่าเล็กน้อยเมื่อพื้นที่วิดีโอของมันถูกปรับขนาดหรือบางส่วนถูกทับโดยหน้าต่างอื่น, เมื่อไม่มี Overlay มันมักจะกลับไปที่ GDI"
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "ขาออกของ QuickTime's engine ถูกแปลผลโดย DX7-based Allocator-Presenter ของ VMR-7 (renderless)"
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "ขาออกของ QuickTime's engine ถูกแปลผลโดย DX9-based Allocator-Presenter ของ VMR-9 (renderless)"
@@ -674,22 +678,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "ผิวหน้าวิดีโอจะถูกจัดสรรเป็นผิวหน้า offscreen ปกติ"
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "ตัวแปลผลเสียง MPC เสียหาย, จงอย่าใช้"
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "ตัวแปลผลซิงค์"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - กำลังรายงานบัก"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC เพิ่งเกิดความบกพร่อง แต่รุ่นนี้ถูกคอมไพล์โดยปราศจากข้อมูลดีบัก\nถ้าคุณต้องการรายงานปัญหานี้, คุณควรลองใช้รุ่นที่เป็นทางการก่อน\n\nคุณต้องการไปที่หน้าดาวน์โหลดตอนนี้หรือไม่?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "ผิวหน้าธรรมดา offscreen ปกติ"
@@ -742,9 +734,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (ไม่มีบีบอัด)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "ตัวแปลผลเสียง MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "ตัวแปลผลเสียงภายใน"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -758,9 +750,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "เพื่อที่จะดูทรัพยากรที่ฝังไว้ในเบราว์เซอร์ของคุณ คุณต้องเลือกใช้งานส่วนประสานเว็บ\n\nใช้ปุ่ม \"บันทึกเป็น\" ถ้าคุณเพียงต้องการบันทึกข้อมูลเท่านั้น"
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "ดาวน์โหลดศัพท์บรรยาย"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "ดาวน์โหลดศัพท์บรรยาย..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "อัพโหลดศัพท์บรรยาย..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -791,7 +787,7 @@ msgid "Couldn't find all archive volumes"
msgstr "ไม่สามารถหาเอกสารได้ครบทุกภาคส่วน"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "ผิวหน้าวิดีโอจะถูกจัดสรรเป็นพื้นผิว แต่ฟังก์ชัน 2d ยังคงถูกใช้เพื่อคัดลอกและยืดมันไปยังบัฟเฟอร์เบื้องหลัง ต้องการการ์ดจอที่สามารถแบ่ง 32bit, RGBA, non-power-of-two sized textures และอย่างน้อยในความละเอียดของวิดีโอ"
msgctxt "IDC_TEXTURESURF3D"
@@ -818,6 +814,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "ลดการฉีกของภาพโดยลัด VSync ตั้งต้นที่สร้างไปยัง D3D"
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "สแกนตัวจูน"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "ศัพท์บรรยายไม่ถูกโหลด หรือตัวแปลผลไม่ถูกรองรับ"
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "เปิด VTS_xx_0.ifo เพื่อโหลดไฟล์ VTS_xx_x.vob เป็นชิ้นเดียว"
@@ -890,7 +898,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "เงียบเสียง"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "เปิดเสียง"
@@ -955,11 +963,11 @@ msgid "&Organize Favorites..."
msgstr "&จัดระเบียบรายการโปรด..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "เล่นสุ่ม"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "เปิดที่ตั้งไฟล์"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1043,7 +1051,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "ซูมเป็นจอกว้างพิเศษ,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "ซ่อนเมื่อเต็มจอ"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1231,7 +1239,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "เพิ่มโฟลเดอร์ที่บรรจุอยู่"
msgctxt "IDS_HW_INDICATOR"
@@ -1338,6 +1346,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<ไม่ได้กำหนด>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "รับชม"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "ย้ายขึ้น"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "ย้ายลง"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "เรียงตาม LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "ลบออกทั้งหมด"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "คุณต้องการลบช่องทั้งหมด ออกจากรายการหรือไม่?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "ไม่มีข้อมูล"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "โปรดรอ, การวิเคราะห์กำลังดำเนิน..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "อัตราส่วนฯ %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "ใช้งานการจดข้อมูลลงสู่ไฟล์ (ต้องเริ่มใหม่)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "เวลาที่เหลือ"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "แม่นยำสูง"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "หลังจากเล่นเสร็จ: วนซ้ำไฟล์ปัจจุบัน"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "หลังจากเล่นเสร็จ: ปิด"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC ได้ประสบปัญหาระหว่างการเริ่มต้น เราอาจแก้ปัญหานี้ได้ถ้าคุณช่วยเรา\n\nคุณต้องการรายงานหรือไม่?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "ใส่ค่าบวกถ้าเสียงเริ่มเร็วกว่าภาพ หรือใส่ค่าติดลบหากเสียงช้ากว่าภาพ"
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "การแสดงตัวอย่างไม่ถูกเปิดใช้งานในปัจจุบัน คุณสามารถเปิดใช้งานในตัวเลือกของ MPC-HC"
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "ตัวเลือกนี้สามารถใช้เพื่อแสดงตัวอย่างไฟล์สื่อจากที่ตั้งระยะไกล ใช้เฉพาะเมื่อเครือข่ายส่วนตัวได้รักษาความปลอดภัยไว้อย่างเหมาะสม\n\nคุณต้องการเปิดใช้งานตัวเลือกนี้่หรือไม่?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "ตัวแปลผลศัพท์บรรยายภายใน"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "เปิดอุปกรณ์"
@@ -1358,13 +1442,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "รูปภาพถูกบันทึกสำเร็จ"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "โหลดศัพท์บรรยาย"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "บันทึกศัพท์บรรยาย"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1387,11 +1471,11 @@ msgid "Stop"
msgstr "หยุด"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "เดินเฟรม"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "ถอยเฟรม"
msgctxt "IDS_AG_GO_TO"
@@ -1491,8 +1575,8 @@ msgid "Thumbnails saved successfully"
msgstr "รูปย่อถูกบันทึกสำเร็จ"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "กระแส&วิดีโอ"
+msgid "Vide&o Track"
+msgstr "แทร็ค&วิดีโอ"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1539,11 +1623,11 @@ msgid "Reset Rate"
msgstr "คืนค่าอัตรา"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "เสียงหน่วง +10 มว."
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "เสียงหน่วง -10 มว."
msgctxt "IDS_MPLAYERC_23"
@@ -1614,14 +1698,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "ขยับศัพท์บรรยายไปขวา"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "แสดงสถิติ"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "ก้าวไปจุดเริ่มต้น"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: แสดงชื่อไฟล์"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "เล่นดีวีดี"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "เล่นบลูเรย์"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: แสดงสถิติของตัวแปลผล"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: ตั้งค่าสถิติตัวแปลผลใหม่"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "ศัพท์บรรยาย::จิปาถะ"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "ซ่อน&ขอบ"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "เฟรมเท่านั้น"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "แ&สดงข้อความและเมนู"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "ซ่อ&นเมนู"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "ขั้นสูง"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "มุมมองน้อยที่สุด"
@@ -1687,8 +1811,8 @@ msgid "PnS Dec Height"
msgstr "ส่องกวาด ลดสูง"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "กำลังดาวน์โหลดศัพท์บรรยาย, โปรดรอ"
+msgid "Downloading [%s] \"%s\""
+msgstr "กำลังดาวน์โหลด [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1699,8 +1823,8 @@ msgid "No subtitles found."
msgstr "ไม่พบศัพท์บรรยาย"
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d ศัพท์บรรยายที่มี"
+msgid "%d subtitle(s) available."
+msgstr "%d ศัพท์บรรยายที่มี"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1855,12 +1979,12 @@ msgid "Boss key"
msgstr "ปุ่มหลบเจ้านาย"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "เมนูเครื่องเล่น (สั้น)"
+msgid "Player Menu"
+msgstr "เมนูเครื่องเล่น"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "เมนูเครื่องเล่น (ยาว)"
+msgid "Player Menu (full)"
+msgstr "เมนูเครื่องเล่น (ครบ)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1871,20 +1995,20 @@ msgid "Options"
msgstr "ตัวเลือก"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "เสียงถัดไป"
+msgid "Next Audio Track"
+msgstr "แทร็คเสียงถัดไป"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "เสียงก่อนหน้า"
+msgid "Prev Audio Track"
+msgstr "แทร็คเสียงก่อนหน้า"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "ศัพท์บรรยายถัดไป"
+msgid "Next Subtitle Track"
+msgstr "แทร็คศัพท์บรรยายถัดไป"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "ศัพท์บรรยายก่อนหน้า"
+msgid "Prev Subtitle Track"
+msgstr "แทร็คศัพท์บรรยายก่อนหน้า"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1894,22 +2018,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "โหลดศัพท์บรรยายอีกครั้ง"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "เสียงถัดไป (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "เสียงก่อนหน้า (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "ศัพท์บรรยายถัดไป (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "ศัพท์บรรยายก่อนหน้า (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "มุมกล้องถัดไป (DVD)"
@@ -1919,28 +2027,28 @@ msgid "Prev Angle (DVD)"
msgstr "มุมกล้องก่อนหน้า (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "เสียงถัดไป (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "แทร็คเสียงถัดไป (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "เสียงก่อนหน้า (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "แทร็คเสียงก่อนหน้า (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "ศัพท์บรรยายถัดไป (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "แทร็คศัพท์บรรยายถัดไป (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "ศัพท์บรรยายก่อนหน้า (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "แทร็คศัพท์บรรยายก่อนหน้า (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "เปิด/ปิด ศัพท์บรรยาย (ดีวีดี)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "เวลาที่เหลือ"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: แสดงเวลาปัจจุบัน"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1966,11 +2074,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "ถูกใส่รหัส"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "ใช่"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "ไม่"
@@ -2027,12 +2135,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "ฉบับ: %02lu/%02lu, หัวเรื่อง: %02lu/%02lu, ตอน: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "มุมกล้อง: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2122,14 +2230,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "ความกว้างรูปภาพ"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL ดูเหมือนจะถูกต้อง!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "เวอร์ชันโปรโตคอลไม่ตรงกัน โปรดปรับปรุงรุ่นเครื่องเล่นของคุณ หรือเลือกที่อยู่อื่น!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "อัตราส่วนภาพ"
@@ -2139,19 +2239,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", ทั้งหมด: %ld, ตกหล่น: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", ขนาด: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", ขนาด: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", ว่าง: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", ว่าง: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2176,7 +2276,7 @@ msgstr "เลือกเส้นทางสำหรับดีวีดี
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr "โหลดสำเร็จแล้ว"
+msgstr " โหลดสำเร็จแล้ว"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2223,8 +2323,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "รูปย่ออาจจะเล็กมาก จึงเป็นไปไม่ได้ที่จะสร้างไฟล์\n\nลองลดจำนวนของรูปย่อ หรือเพิ่มขนาดโดยรวม"
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "เพื่อโหลดศัพท์บรรยาย คุณต้องเปลี่ยนชนิดตัวแปลผลวิดีโอและเปิดไฟล์อีกครั้ง\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR หรือ Haali\n- RealMedia: ตัวแปลผลพิเศษสำหรับr RealMedia, หรือเปิดมันผ่าน DirectShow\n- QuickTime: ตัวแปลผล DX7 หรือ DX9 สำหรับ QuickTime\n- ShockWave: ไม่มีข้อมูล"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "เพื่อโหลดศัพท์บรรยายคุณจำเป็นต้องเปลี่ยนชนิดตัวแปลผลวิดีโอและเปิดไฟล์ใหม่อีกครั้ง\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR หรือ Haali\n- RealMedia: Special renderer สำหรับ RealMedia, หรือเปิดมันผ่าน DirectShow\n- QuickTime: DX7 หรือ DX9 renderer สำหรับ QuickTime\n- ShockWave: ไม่มีอยู่"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2235,11 +2335,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "อัตราส่วนภาพ: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "อัตราส่วนภาพ: ตั้งต้น"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "อัตราส่วนภาพ: ค่าตั้งต้น (ค่าแสดงผล)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "เสียงหน่วง: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2251,8 +2351,8 @@ msgid "Out of memory"
msgstr "หน่วยความจำไม่เพียงพอ"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "ผิดพลาด: ต้องการตัวเล่นแฟลชสำหรับ IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "ผิดพลาด: ต้องการตัวเล่นแฟลชสำหรับ Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2274,10 +2374,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "ล้มเหลวในการแปลผลไฟล์"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL ที่แย่, ไม่สามารถหาที่ตั้งฐานข้อมูลศัพท์บรรยายที่นั่นได้!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "ตอน:"
@@ -2298,14 +2394,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "ปัจจุบัน"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC ได้จบการทำงานอย่างไม่พึงปรารถนา เพื่อช่วยเราแก้ไขปัญหานี้ โปรดส่งไฟล์นี้ \"%s\" ไปยังตัวติดตามบักของเรา\n\nคุณต้องการเปิดโฟลเดอร์ที่เก็บไฟล์ minidump ไว้ และไปยังตัวติดตามบัก เดี๋ยวนี้หรือไม่?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "ล้มเหลวในการสร้างไฟล์ดัมพ์สู่ \"%s\" (ผิดพลาด %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "เลือกเส้นทาง"
@@ -2323,7 +2411,7 @@ msgid "Toggle Caption&Menu"
msgstr "เปิดปิด ข้อความและเมนู"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "เปิดปิด ตัวเลื่อนหา"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2479,8 +2567,8 @@ msgid "Volume boost Max"
msgstr "เสริมความดัง สูงสุด"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "วิธีใช้: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2566,14 +2654,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "ใ&ช้งานตัวกรองทั้งหมด"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "สแกนตัวจูน"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "ศัพท์บรรยายไม่ถูกโหลด หรือตัวแปลผลไม่ถูกรองรับ"
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "ไม่ทราบผู้สร้างสรรค์ ติดต่อเราหากคุณทำโลโก้นี้!"
@@ -2662,40 +2742,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "บน หลัง ขวา"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "คืนค่าสถิติแสดงผล"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "ศัพท์บรรยาย::จิปาถะ"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "ซ่อน&ขอบ"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "เฟรมเท่านั้น"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "แ&สดงข้อความและเมนู"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "ซ่อ&นเมนู"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "ขั้นสูง"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "เหนือแถบเลื่อนหา"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "ล่างแถบเลื่อนหา"
msgctxt "IDS_VIDEO_STREAM"
@@ -2863,8 +2915,8 @@ msgid "Other Audio"
msgstr "เสียงอื่นๆ"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2874,6 +2926,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2938,22 +3010,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "บัญชีการเล่น"
@@ -2978,18 +3034,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "อัตราส่วนภาพ"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "ใช้ WASAPI (เริ่มเล่นอีกครั้ง)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "เงียบเสียงเมื่อเดินหน้าอย่างเร็ว"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "อุปกรณ์เสียง:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: เปิด"
@@ -3278,6 +3322,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "ฟื้นค่าความดัง: ปิด"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "ไบต์"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3335,7 +3383,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "ผิดพลาดในการวิเคราะห์อัตราเฟรมที่ใส่!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "ไม่สามารถเดินเฟรม โปรดลองตัวแปลผลวิดีโอชนิดอื่น"
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3354,10 +3402,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "ฟังก์ชัน \"บันทึกรูปภาพ\" และ \"บันทึกรูปย่อ\" ไม่ทำงานกับตัวแปลผลวิดีโอ Overlay Mixer\nจงเปลี่ยนตัวแปลผลวิดีโอในตัวเลือกขาออกของ MPC และเปิดไฟล์อีกครั้ง"
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "ไม่สามารถเชื่อมต่อฐานข้อมูลศัพท์บรรยายออนไลน์"
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "คุณต้องการกระตุ้นตัวแก้ไข EDL หรือไม่?"
@@ -3426,7 +3470,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "คุณจำเป็นต้องใช้งานการตั้งค่าใหม่ ก่อนจะทดสอบพวกมัน"
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "หลังเล่นจบ: ออก"
@@ -3454,6 +3498,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "หลังเล่นจบ: ปิดจอภาพ"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "หลังการเล่น: เล่นไฟล์ถัดไปในโฟลเดอร์"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "หลังการเล่น: ไม่ต้องทำอะไร"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "ความสว่าง: %s"
@@ -3534,3 +3586,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "การตั้งค่า"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "ผู้จัดหา"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "ผู้บกพร่องการได้ยิน"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "ดาวน์โหลด"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "คะแนน"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "การค้นหาศัพท์บรรยายออนไลน์ล้มเหลว"
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "การค้นหาศัพท์บรรยายออนไลน์ถูกยกเลิก"
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "การค้นหาศัพท์บรรยายออนไลน์เสร็จสิ้น, พบ %d ศัพท์บรรยาย"
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "ดาวน์โหลดศัพท์บรรยาย"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "กำลังค้นหาศัพท์บรรยายออนไลน์, โปรดรอ..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "กำลังยกเลิกการค้นหาศัพท์บรรยายออนไลน์..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "ชื่อผู้ใช้"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "สถานะ"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "พร้อม..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "กำลังอัพโหลด..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "ศัพท์บรรยายถูกอัพโหลดสำเร็จแล้ว"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "ศัพท์บรรยายอัพโหลดล้มเหลว"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "ศัพท์บรรยายถูกยกเลิกการอัพโหลด"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "ศัพท์บรรยายมีอยู่แล้ว"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "กำลังอัพโหลดศัพท์บรรยาย, โปรดรอ..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "อัพโหลดเสร็จแล้ว"
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "ยกเลิกอัพโหลดแล้ว"
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "อัพโหลดล้มเหลว"
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "ดาวน์โหลด และเปิด"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "คืนค่า"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "ย้ายขึ้น"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "ย้ายลง"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "ภาษา"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "ผิดพลาด; ไม่สามารถสร้างการเชื่อมต่ออินเตอร์เน็ต"
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "ดาวน์โหลดแล้ว [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "อัพโหลดศัพท์บรรยาย"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "คุณต้องการอัพโหลดไฟล์ศัพท์บรรยาย \"%s\" หรือไม่?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.tr.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.tr.dialogs.po
index 2f9b239c5..8723fffbf 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.tr.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.tr.dialogs.po
@@ -1,17 +1,18 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Burak <burakgarci@gmail.com>, 2013
-# Sinan H., 2014
+# Mesut Aktaş <mesuthan_42@hotmail.com>, 2015
+# Sinan H., 2014-2016
# Sinan H., 2013
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 19:20+0000\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-02-11 20:33+0000\n"
"Last-Translator: Sinan H.\n"
-"Language-Team: Turkish (http://www.transifex.com/projects/p/mpc-hc/language/tr/)\n"
+"Language-Team: Turkish (http://www.transifex.com/mpc-hc/mpc-hc/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -111,7 +112,7 @@ msgid "Enable custom channel mapping"
msgstr "Özel kanal adreslemesini kullan"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Hoparlör sayısını ve çıkışını :"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -119,7 +120,7 @@ msgid "input channels:"
msgstr "kanallı olarak ayarla"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Ayarların hemen geçerli olabilmesi için tıklarken Shift tuşuna basınız"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -191,8 +192,8 @@ msgid "About"
msgstr "Hakkında"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Telif Hakkı © 2002-2014, Authors.txt dosyasına bakınız"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Telif Hakkı © 2002-2017, Authors.txt dosyasına bakınız"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -200,7 +201,7 @@ msgstr "Bu program ücretsiz olup Genel Kamusal GNU Lisansı altında sunulmakta
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "bosluk - Dr. Sinan Hunerel tarafından Türkçeleştirilmiştir"
+msgstr "bosluk - Sinan Hunerel tarafından Türkçeleştirilmiştir"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
@@ -300,7 +301,7 @@ msgstr "Ayarları .ini dosyasında sakla"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
-msgstr "CD-ROM Açma özelliğini kapat"
+msgstr "\"CD-ROM aç\" menüsünü kapat"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
msgid "Process priority above normal"
@@ -423,12 +424,16 @@ msgid "time(s)"
msgstr "kez oynat"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Tekrar kipi:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Oynatmadan Sonra"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Çıkış"
+msgid "Default zoom"
+msgstr "Varsayılan yakınlaştırma"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -448,7 +453,7 @@ msgstr "Varsayılan parça seçimi"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
-msgstr "Alt Yazı :"
+msgstr "Alt Yazılar:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Audio:"
@@ -474,10 +479,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Ses dosyalarını otomatik olarak yükle"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Dahili alt yazı işleyicisini kullan"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Kontrol"
@@ -571,7 +572,7 @@ msgid "Warning"
msgstr "Uyarı"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Ekran kartınızın ayarlarından Tam ekran keskinlik yumuşatması seçeneğini açarsanız, alt yazılar düzgün görülmeyecek ve daha fazla işlemci kullanımına neden olacaktır."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -592,7 +593,7 @@ msgstr "İlişkilendirme"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr "Her dosya biçimi için ayrı simge kullan"
+msgstr "Her dosya biçimi için ayrı bir simge kullan"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
@@ -678,16 +679,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Varsayılan monitör dışında tam ekranda iken küçültmeye izin verme"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Windows 7 görev çubuğu özelliklerini kullan"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Geliştirilmiş görev çubuğu özelliklerini kullan"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Oynatma listesinde tek nesne varken \"Geri/ileri git\" tuşuyla önceki/sonraki dosyayı aç"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Süre gösterim yerleşimi:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1072,7 +1073,7 @@ msgstr "Alfa kanallarını bağla"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
-msgstr "Eğer bu süzgeçlerin başka sürümlerini veya aynı işte görevli başka yapımlarını kullanmak istiyorsanız, onları buradan kapatınız."
+msgstr "Süzgeçlerin başka sürümlerini veya aynı işte görevli başka yapımlarını kullanmak istiyorsanız, aşağıdaki bölümden kapatıp açma işlemlerini gerçekleştirebilirsiniz."
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Source Filters"
@@ -1127,8 +1128,8 @@ msgid "Audio Renderer"
msgstr "Ses İşleyicisi"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VKI-7/VKI-9 (çevrilmeden) ve GVI (CP) ayarları"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VKI-9 (çevrilmeden) ve GVI (CP) ayarları"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1152,7 +1153,7 @@ msgstr "Tam Ekran Direct3D (kopuklukları sil)"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Alternative VSync"
-msgstr "Değişken Eşzam."
+msgstr "Değişken Eşzamanlama"
msgctxt "IDD_PPAGEOUTPUT_IDC_DSVMR9LOADMIXER"
msgid "VMR-9 Mixer Mode"
@@ -1171,8 +1172,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Alt yazılar*"
+msgid "Subtitles"
+msgstr "Alt Yazılar"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1187,12 +1188,16 @@ msgid "Rotation"
msgstr "Döndürme"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* VSFilter gibi harici süzgeçler alt yazıları tüm çeviricilerde gösterebilirler."
+msgid "Subtitle Renderer"
+msgstr "Alt Yazı İşleyicisi"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Derlenmiş Tonlayıcıları önbellekle"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
-msgstr "B. Noktası dinle:"
+msgstr "Bağlantı noktasını dinle:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC1"
msgid "Launch in web browser..."
@@ -1206,6 +1211,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Sadece yerel ağ erişimine izin ver"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Önizlemeyi aç"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Hata bilgisini yazdır"
@@ -1231,16 +1240,44 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI komutları: (.uzantı1=yol1;.uzantı2=yol2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Çevrimiçi bulunabilen alt yazılar"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "innDir && Aç"
+msgid "Download subtitles"
+msgstr "Alt yazı indir"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
-msgstr "Geçerli alt yazıları değiştir"
+msgstr "Geçerli alt yazıyı değiştir"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "İndir"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Yenile"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Durdur"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Ayarlar"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Alt yazı gönder"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Gönder"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Durdur"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Ayarlar"
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
@@ -1279,8 +1316,8 @@ msgid "Enable automatic update check"
msgstr "Otomatik güncelleştirmeleri aç"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Güncelleştirme kontrolü :"
+msgid "Check every:"
+msgstr "Kontrol süresi:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1428,7 +1465,7 @@ msgstr "sütun"
msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
msgid "Present at nearest VSync"
-msgstr "En yakın eşzamanlılık örneği"
+msgstr "En yakın eşzamanlılık örneğini kullan"
msgctxt "IDD_PPAGESYNC_IDC_STATIC5"
msgid "Target sync offset:"
@@ -1543,16 +1580,28 @@ msgid "Reset"
msgstr "Sıfırla"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Çevrimiçi veritabanı"
+msgid "Online search, download and upload subtitles"
+msgstr "Çevrimiçi alt yazı arama, indirme ve gönderme"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Geçerli konumda bulunmuyorsa alt yazıları otomatik olarak ara ve indir"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "İşitme engelliler için hazırlanmış alt yazıları tercih et (sağlayıcı tanımlamışsa)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Belirtilen kelime(leri) içeren dosyaları göz ardı et:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Çevrimiçi alt yazı veritabanı adresi:"
+msgid "Languages in order of preference:"
+msgstr "Tercih edilen dil sıralaması:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Dene"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Oynatmanın sonunda mevcut alt yazıları otomatik olarak gönder"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1654,6 +1703,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Varsayılan"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Aygıt"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Ayrıcalıklı kip"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Bit akışına izin ver"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Ayarlar"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Stereo çapraz beslemeyi etkinleştir (kulaklık için)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Kesme:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Seviye:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Not"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Ses bozunumunu en aza indirmek için, kayıplı bir kodlama ile oluşturulan içeriği yürütürken sesi %85 seviyesinde tutmanız önerilir."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG kalitesi:"
@@ -1666,3 +1759,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "Tamam"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Çökme bildirimcisi"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Özür dileriz, MPC-HC bilinmeyen bir hatadan dolayı kapatıldı. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "İnceleme ve sorun giderilmesi için hata raporunu gönderin."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "İsteğe bağlı bilgi"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "E-posta:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "E-posta adresiniz isteğe bağlı olarak alınmaktadır ve sadece program geliştiricilerinin konuyla ilgili olarak size ulaşabilmeleri için istenmektedir."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Sorun açıklaması (lütfen sadece İngilizce bildiriniz):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "MPC-HC 'yi yeniden başlat"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "MPC-HC 'yi Kapat"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.tr.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.tr.menus.po
index ad8fac48d..1fcfc2c1c 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.tr.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.tr.menus.po
@@ -1,19 +1,19 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Burak <burakgarci@gmail.com>, 2013
-# Devrim Yolo <devrim.extra@gmail.com>, 2013
+# Devrim, 2013
# kasper93, 2013
-# Sinan H., 2014
+# Sinan H., 2014-2016
# Sinan H., 2013
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-22 19:12+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-02-04 22:27+0000\n"
"Last-Translator: Sinan H.\n"
-"Language-Team: Turkish (http://www.transifex.com/projects/p/mpc-hc/language/tr/)\n"
+"Language-Team: Turkish (http://www.transifex.com/mpc-hc/mpc-hc/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -68,29 +68,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Küçük &Resim Kaydet..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Alt Yazı Yükle..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Alt Yazı K&aydet..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Alt Ya&zı Veritabanı"
+msgid "S&ubtitles"
+msgstr "A&lt Yazılar"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "A&ra..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Alt Yazı Yükle..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&Gönder..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "Alt Yazı K&aydet.."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&İndir..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Alt Yazı İndir..."
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Alt Yazı Gönder..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -146,7 +142,7 @@ msgstr "Yö&nlendirme"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr "&Tonlama hata ayıklaması"
+msgstr "&Tonlama Hata Ayıklaması"
msgctxt "POPUP"
msgid "&Presets..."
@@ -194,19 +190,23 @@ msgstr "Sığdır (&Sadece büyütme)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "Ç&evirici ayarları"
+msgstr "Ç&evirici Ayarları"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Kopukluk Testi"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "&İstatistikleri Göster"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Kalan Süre"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Geçerli Süreyi G&öster"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Dosya &Adını Göster"
msgctxt "POPUP"
msgid "&Output Range"
@@ -408,17 +408,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "Pencereye Dışarıdan U&yarla"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Taraf Oranını Koru"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Taraf Oranını &Kilitle"
+msgid "&Aspect Ratio"
+msgstr "&Taraf Oranı"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Varsayılan"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Varsayılan (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -440,6 +436,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "Kare &çerçeve oranını kullan (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Monitör/Masaüstü AR Farkını &Düzelt"
@@ -510,7 +510,7 @@ msgstr "&Her zaman"
msgctxt "ID_ONTOP_WHILEPLAYING"
msgid "While &Playing"
-msgstr "O&ynatılırken"
+msgstr "Medya o&ynatılırken"
msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
msgid "While Playing &Video"
@@ -533,9 +533,25 @@ msgid "&Stop"
msgstr "&Durdur"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "G&örüntü Atlaması"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Tekrarla"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "S&ürekli"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Dosya"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Oynatma listesi"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Oranı Azalt"
@@ -557,16 +573,16 @@ msgid "S&haders"
msgstr "T&onlamalar"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Ses"
+msgid "&Audio Track"
+msgstr "&Ses Parçası"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "Al&t Yazılar"
+msgid "Su&btitle Track"
+msgstr "Al&t Yazı Parçası"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "&Video Akışı"
+msgid "Vide&o Track"
+msgstr "Vide&o Parçası"
msgctxt "POPUP"
msgid "&Volume"
@@ -588,9 +604,21 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Oy&natmadan Sonra"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Bir &İşlem Yapma"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Klasördeki &Sıradaki Dosyayı Yürüt"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "E&kranı Kapat"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
-msgstr "&Kapat "
+msgstr "&Çıkış"
msgctxt "ID_AFTERPLAYBACK_STANDBY"
msgid "&Stand By"
@@ -610,11 +638,7 @@ msgstr "Oturumu &Kapat"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "&Kilitle"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "E&kranı kapat"
+msgstr "&Bilgisayarı Kilitle"
msgctxt "POPUP"
msgid "&Navigate"
@@ -642,7 +666,7 @@ msgstr "&Kök Menüsü"
msgctxt "ID_NAVIGATE_SUBPICTUREMENU"
msgid "&Subtitle Menu"
-msgstr "&Alt yazı Menüsü"
+msgstr "&Alt Yazı Menüsü"
msgctxt "ID_NAVIGATE_AUDIOMENU"
msgid "&Audio Menu"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.tr.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.tr.strings.po
index cae576998..dff25aee1 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.tr.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.tr.strings.po
@@ -1,17 +1,20 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# Ali Kömesöğütlü <byzlo685@gmail.com>, 2017
# Burak <burakgarci@gmail.com>, 2013
-# Sinan H., 2014
+# Kul Kuls <kul942849611@hotmail.com>, 2016
+# Mesut Aktaş <mesuthan_42@hotmail.com>, 2015
+# Sinan H., 2014-2017
# Sinan H., 2013
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-02 19:20+0000\n"
-"Last-Translator: Sinan H.\n"
-"Language-Team: Turkish (http://www.transifex.com/projects/p/mpc-hc/language/tr/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
+"Last-Translator: JellyFrog\n"
+"Language-Team: Turkish (http://www.transifex.com/mpc-hc/mpc-hc/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -62,10 +65,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Özellikler"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Dosya"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Görünüm"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Oynatma listesi"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Dosya"
@@ -118,6 +129,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "İşleyici seçimi tanımlanmamışsa, SSA/ASS alt yazıları video çerçevesine, diğer tüm alt yazılar ise pencere çerçevesine sığacak şekilde uyarlanacaktır."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Tekrarlama Yöntemi: Oynatma listesi"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Tekrarlama Yöntemi: Dosya"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Sürekli Tekrar: Açık"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Sürekli Tekrar: Kapalı"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Sürekli Tekrarla"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Hiçbir zaman (en hızlı yöntem)"
@@ -327,12 +358,12 @@ msgid "On/Off"
msgstr "Aç/Kapat"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "İlk fps"
+msgid "From (FPS)"
+msgstr "İlk (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Son fps"
+msgid "To (FPS)"
+msgstr "Son (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -466,6 +497,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Yürütme::Tonlamalar"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Kaynaklar"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Çeşitli"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "Medya Bilgisi"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Yürütme::Yakalama"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Yürütme::Eşzamanlılık Ayarları"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Yürütme::Tam Ekran"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Dahili Süzgeçler::Ses İşleyicisi"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Ses Değiştiricisi"
@@ -490,18 +549,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Ters Süzme İşleyicisi"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Karıştırma İşleyicisi 7 (pencerede)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Karıştırma İşleyicisi 9 (pencerede)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Karıştırma İşleyicisi 7 (çevrilmeden)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Karıştırma İşleyicisi 9 (çevrilmeden)"
@@ -554,34 +605,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Oynatıcı::İnternet Arabirimi"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Alt Yazılar::Veritabanı"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Kaynaklar"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Çeşitli"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "Medya Bilgisi"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Yürütme::Yakalama"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Yürütme::Eşzamanlılık Ayarları"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Yürütme::Tam Ekran"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Ayrıntılar"
@@ -602,17 +625,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Daima ters süzme olarak dönüştürülür. Genellikle sadece YUV biçimleri geçerlidir, ancak renkler RGB 'ye dönüştürülmez. Tüm yöntemler içinde en hızlısı ve TV çıkışı ile Tam ekran aynalama için kullanabileceğiniz en uygunudur."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Windows XP için varsayılan dönüştürücüdür. Oldukça kararlı ve Üst süzme dönüştürücüsünden çok az daha yavaştır. DirectDraw ve yapabildiğinde Üst süzmeyi kullanır."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Sadece DirectX 9 yüklüyse çalışır. VKI-7 (pencerede) ile aynı özelliklere sahiptir, ancak Üst süzme kipini kullanmaz ve bu yüzden VKI-7 'den (pencere) biraz daha yavaştır."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "VKI-7 (pencerede) ile aynıdır, ancak alt yazı için MPC-HC yerleşim yöneticisi ile beraberdir. Üst süzme video yansılaması ÇALIŞMAZ. 'Gerçek Renk' masaüstü renk kalitesi önerilir."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Sadece DirectX 9 yüklüyse çalışır. Oldukça uyumludur, ancak Üst süzme işleyicisini kullanmaz. Bu yüzden Üst süzme karıştırıcısından biraz daha yavaştır."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -623,8 +638,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "VKI-9 (çevrilmeden) gibidir, ancak gerçek çift-geçişli kübik boyutlandırıcı kullanır."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Her video benzeri medya biçimine bağlanır ve dahili örnekleri bir yere göndermez. Video gösterimine ihtiyaç duymadığınız ve işlemciyi pek az kullanmak istediğiniz durumlarda bu seçeneği seçiniz."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Herhangi bir video benzeri medya biçimine bağlanır ve dahili örnekleri bir yere göndermez. Video gösterimine ihtiyaç duymadığınız ve işlemciyi pek az kullanmak istediğiniz durumlarda bu seçeneği seçiniz."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -650,10 +665,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Real 'in kendi dönüştürücüsüdür. SMIL senaryoları çalışacak, ancak etkileşimli olmayacaktır. DirectDraw ve mevcutsa Üst Süzme kullanılır."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "VKI-7 'nin (çevrilmeden) DX7 tabanlı yerleşim yöneticisince çevrilen Real 'in çıktı motorudur."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "VKI-9 'un (çevrilmeden) DX9 tabanlı yerleşim yöneticisince çevrilen Real 'in çıktı motorudur."
@@ -662,10 +673,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "QuickTime 'ın kendi dönüştürücüsüdür. Video alanı boyutlandırılınca veya başka bir pencerenin arkasında kalınca yavaşlar. Üst süzme mevcut değilse GDI 'ye çevrilir."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "QuickTime motoru çıkışı DX7-tabanlı VKI-7 (çevrilmeden) Ayırıcısı-Sunucusu tarafından çevrilir."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "QuickTime motoru çıkışı DX9-tabanlı VKI-9 (çevrilmeden) Ayırıcısı-Sunucusu tarafından çevrilir."
@@ -674,22 +681,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Video yüzeyi düzgün bir dış ekran olarak ayrılacaktır."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Ses İşleyicisi bozuk durumda, lütfen kullanmayınız."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Eşzamanlama İşleyicisi"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Bir hata oluştu"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC beklenmeyen bir şekilde sonlandırıldı, ancak bu sürümde hata ayrıştırma desteği bulunmamaktadır.\nBu hatayı bildirmek istiyorsanız, resmi bir sürüm kullanmanız gerekmekte.\n\ninnDirme sayfamızı ziyaret etmek ister misiniz?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Düzgün dış ekran yüzeyi"
@@ -742,9 +737,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Boş (sıkıştırılmadan)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC Ses İşleyicisi"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Dahili Ses İşleyicisi"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -758,9 +753,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Bütünleşik bir kaynağı internet tarayıcınızda görüntüleyebilmek için internet arabirimini açmanız gerekmektedir.\n\nGeçerli bilgiyi kaydetmek için \"Farklı kaydet\" tuşuna basabilirsiniz."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Altyazı indir"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Alt Yazı İndir..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Alt Yazı Gönder..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -791,8 +790,8 @@ msgid "Couldn't find all archive volumes"
msgstr "Tüm arşiv parçaları bulunamadı"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Video yüzeyi bir doku olarak ayrılacaktır, ancak hala 2d özellikleri arka tamponlamaya kopyalamak ve uzatılmakta kullanılacaktır. 32bit, RGBA, çift boyutlu doku ayırabilen ve en az, geçerli video çözünürlüğünü destekleyebilen bir ekran kartı gerektirir."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Video yüzeyi bir doku olarak ayrılacaktır, ancak 2d özellikleri hala arka tamponlamaya kopyalamak ve uzatılmakta kullanılacaktır. 32bit, RGBA, çift boyutlu doku ayırabilen ve en az, geçerli video çözünürlüğünü destekleyebilen bir ekran kartı gerektirir."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
@@ -818,6 +817,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "D3D içine gömülü VEşzam. özelliğini atlayarak kopuklukları azaltır."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Kanal taraması"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Alt yazılar yüklü değil veya çevirici desteklenmiyor."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Yüklenme süresini hızlandırmak için derlenmiş tonlayıcıları yerel AppData klasöründe saklar."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "VTS_xx_x.vob dosyalarını açmak için VTS_xx_0.ifo dosyasını yükleyiniz"
@@ -890,7 +901,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Sesi Kıs"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Sesi Aç"
@@ -955,12 +966,12 @@ msgid "&Organize Favorites..."
msgstr "&Sık Kullanılanları Düzenle..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "Rastgele sırala"
+msgid "Sh&uffle"
+msgstr "Rastgele s&ırala"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Dosya yerleşimini aç"
+msgid "Ope&n file location"
+msgstr "Do&sya yerleşimini aç"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -1043,8 +1054,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Çok geniş ekrana sığdır,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Tam ekranda gizle"
+msgid "&Hide on Fullscreen"
+msgstr "&Tam ekranda gizle"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1231,8 +1242,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "İçeren klasörü ekle"
+msgid "Add containing &folder"
+msgstr "İçeren k&lasörü ekle"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1338,6 +1349,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<tanımlanmamış>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "İzle"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Yukarı Taşı"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Aşağı Taşı"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "LCN'ye göre sırala - Mantıksal kanal sayısı"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Tümünü sil"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Tüm kanal listesini temizlemek istediğinizden emin misiniz?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Bir bilgi bulunmuyor"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Lütfen bekleyiniz, inceleme devam ediyor..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Dosya kaydı oluşturur (yeniden başlatma gerektirir)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Kalan süre"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Yüksek hassasiyet"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Oynatmadan Sonra: Geçerli dosyayı tekrar oynat"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Oynatmadan Sonra: Kapat"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC açılırken bir hata ile karşılaştı. Neyseki değerli yardımlarınız ile bu hatayı gidermemiz mümkün olacaktır.\n\nBu durumu tarafımıza bildirmek istiyor musunuz?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Ses erken geliyorsa artı, geç geliyorsa eksi bir değer giriniz."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Önizleme kapalı durumda. MPC-HC ayarları içinden açabilirsiniz."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Bu ayar medya dosyalarını her yerden önizleyebilmenizi sağlar. Uzak herkes erişebileceği için sadece güvenli bir ağda kullanmanız önerilir.\n\nBu özelliği kullanmak istediğinizden emin misiniz?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Dahili Alt Yazı İşleyicisi"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Aygıt Aç"
@@ -1358,13 +1445,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Görüntü başarıyla kaydedildi"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Alt Yazı Yükle"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Alt Yazı Yükle..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Alt Yazı Kaydet"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Alt Yazı Kaydet..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1387,11 +1474,11 @@ msgid "Stop"
msgstr "Durdur"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Görüntü atlama"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Görüntü atlama (geriye)"
msgctxt "IDS_AG_GO_TO"
@@ -1491,8 +1578,8 @@ msgid "Thumbnails saved successfully"
msgstr "Küçük resim başarıyla kaydedildi"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Video A&kışı"
+msgid "Vide&o Track"
+msgstr "Vide&o Parçası"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1539,11 +1626,11 @@ msgid "Reset Rate"
msgstr "Oranı Sıfırla"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Ses Gecikmesi +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Ses Gecikmesi -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1614,14 +1701,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Alt Yazıyı Sağa Kaydır"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "İstatistikleri Görüntüle"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Başa dön"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Dosya Adını Göster"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "DVD Oynat"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "BD Oynat"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: İşleyici İstatistiklerini Göster"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD : İşleyici İstatistiklerini Sıfırla"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Alt Yazılar::Diğer"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Kenarları gizle"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Sad&ece Çerçevede"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Başlık && Menü'yü göster"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Menüyü &Gizle"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Gelişmiş"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "En Az Ayrıntı"
@@ -1687,8 +1814,8 @@ msgid "PnS Dec Height"
msgstr "SzT Yük Dah"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Altyazı(lar) indiriliyor, lütfen bekleyiniz."
+msgid "Downloading [%s] \"%s\""
+msgstr "[%s] \"%s\" indiriliyor"
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1699,8 +1826,8 @@ msgid "No subtitles found."
msgstr "Bir alt yazı bulunamadı."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d alt yazı bulundu."
+msgid "%d subtitle(s) available."
+msgstr "%d adet alt yazı bulundu."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1855,12 +1982,12 @@ msgid "Boss key"
msgstr "Ana Tuş"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Oynatıcı Menüsü (kısa)"
+msgid "Player Menu"
+msgstr "Oynatıcı Menüsü"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Oynatıcı Menüsü (uzun)"
+msgid "Player Menu (full)"
+msgstr "Oynatıcı Menüsü (detaylı)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1871,19 +1998,19 @@ msgid "Options"
msgstr "Ayarlar"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Sonraki Ses"
+msgid "Next Audio Track"
+msgstr "Sonraki Ses Parçası"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Önceki Ses"
+msgid "Prev Audio Track"
+msgstr "Önceki Ses Parçası"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
+msgid "Next Subtitle Track"
msgstr "Sonraki Alt Yazı"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
+msgid "Prev Subtitle Track"
msgstr "Önceki Alt Yazı"
msgctxt "IDS_MPLAYERC_85"
@@ -1894,22 +2021,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Alt Yazıları Tekrar Yükle"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Sonraki Ses (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Önceki Ses (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Sonraki Alt Yazı (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Önceki Alt Yazı (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Sonraki Açı (DVD)"
@@ -1919,28 +2030,28 @@ msgid "Prev Angle (DVD)"
msgstr "Önceki Açı (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Sonraki Ses (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Sonraki Ses Parçası (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Önceki Ses (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Önceki Ses Parçası (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
+msgid "Next Subtitle Track (DVD)"
msgstr "Sonraki Alt Yazı (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
+msgid "Prev Subtitle Track (DVD)"
msgstr "Önceki Alt Yazı (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Alt Yazıyı Aç/Kapat (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Kalan Süre"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD : Geçerli Süreyi Göster"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1966,11 +2077,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Şifreli"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Evet"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Hayır"
@@ -2027,12 +2138,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Ses: %02lu/%02lu, Başlık: %02lu/%02lu, Bölüm: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
-msgstr "Açı: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Açı: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbit %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bit %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2122,14 +2233,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Görüntü eni"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "Adres doğru gözüküyor!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Uyumsuz iletişim kuralı sürümü, lütfen oynatıcınızı güncelleyiniz ya da farklı bir adres deneyiniz!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Taraf Oranı"
@@ -2139,20 +2242,20 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Toplam: %ld, Atlanan: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", Boyut: %I64dKB"
+msgid ", Size: %I64d KB"
+msgstr ", Boyut: %I64d KB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", Boyut: %I64dMB"
+msgid ", Size: %I64d MB"
+msgstr ", Boyut: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", Boş: %I64dKB"
+msgid ", Free: %I64d KB"
+msgstr ", Boş: %I64d KB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", Boş: %I64dMB"
+msgid ", Free: %I64d MB"
+msgstr ", Boş: %I64d MB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
@@ -2223,8 +2326,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Küçük resim boyutları çok sınırlı olduğundan dosya yaratılamıyor.\n\nKüçük resim sayısını azaltmayı ya da toplam boyutu arttırmayı deneyiniz."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Altyazıları yüklemek için video işleyicisi biçimini değiştirip, dosyayı yeniden açmanız gerekmektedir.\n- DirectShow: VKI-7/VKI-9 (çevrilmeden), GVI (CP), Senk., madVR veya Haali\n- RealMedia: RealMedia için özel işleyici gereklidir, veya DirectShow üzerinden oynatabilirsiniz\n- QuickTime: Quicktime için DX7 veya DX9 işleyicisi gereklidir\n- ShockWave: boş"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Alt yazıları yüklemek için Video işleyicisini değiştirip, dosyayı yeniden açmanız gerekmektedir.\n- DirectShow: VMR-9 (çevrilmeden), GVI (CP), Senk., madVR veya Haali\n- RealMedia: RealMedia için özel işleyici gereklidir, veya DirectShow üzerinden oynatabilirsiniz\n- QuickTime: Quicktime için DX7 veya DX9 işleyicisi gereklidir\n- ShockWave: boş"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2235,12 +2338,12 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Taraf Oranı: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Taraf Oranı: Varsayılan"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Taraf Oranı: Varsayılan (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Ses Gecikmesi: %I64dms"
+msgid "Audio delay: %I64d ms"
+msgstr "Ses Gecikmesi: %I64d ms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2251,8 +2354,8 @@ msgid "Out of memory"
msgstr "Yetersiz hafıza"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Hata: IE için Flash gerekiyor"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Hata: Internet Explorer için Adobe Flash Oynatıcısı gerekiyor"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2274,10 +2377,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Dosya çözülemedi"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Hatalı adres, alt yazı veritabanı açılamıyor!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Bölüm: "
@@ -2298,14 +2397,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Geçerli"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC beklenmeyen bir şekilde sonlandırıldı. Bu sorunu giderebilmemiz için lütfen \"%s\" dosyasını hata izleyici adresimize gönderiniz.\n\nDöküm dosyasının kaydedildiği klasörü açıp, hata izleyicisi sayfamızı ziyaret etmek istiyor musunuz?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "%u hatası yüzünden \"%s\" döküm dosyası oluşturulamadı"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Lütfen bir konum seçiniz"
@@ -2323,7 +2414,7 @@ msgid "Toggle Caption&Menu"
msgstr "Başlık & Menü'ye Geç"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Aramaya Geç"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2408,7 +2499,7 @@ msgstr "&Özellikler..."
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr "(süzgeç) özellikleri..."
+msgstr " (süzgeç) özellikleri..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2479,8 +2570,8 @@ msgid "Volume boost Max"
msgstr "Ses yüksekliği en fazla"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Kullanım: mpc-hc.exe \"konum\" [anahtarlar]\n\n\"yol_adı\"\t\tYüklenecek dosya veya klasör (özel\n\t\tkarakterler desteklenir, \"-\" varsayılan girişi gösterir)\n/dub \"dublaj_adı\"\tHarici bir ses dosyası yüklemek için\n/dubdelay \"dosya\"\tXXms olarak atlanacak harici bir ses dosyası yüklemek\n için (eğer dosya \"...GECİKME_XXms...\" içeriyorsa)\n/d3dfs\t\tTam ekran D3D kipinde oynatmak için\n/sub \"alt_yazı\"\t Harici bir alt yazı kullanmak için\n/filter \"filtre_adı\" Değişken bir bağlantıdan DirectShow süzgeçlerini\n\t\tyüklemek için (karakterler desteklenir)\n/dvd\t\tDVD kipinde çalıştırmak için, \"konum\" DVD klasörünü\n gösterir (seçmeli)\n/dvdpos T#C\tOynatma T başlığının, C bölümünden başlar\n/dvdpos T#ss:dd\t Oynatma T başlığının, ss:dd:ss süresinden başlar\n/cd\t\tSes veya (s)vcd'den tüm parçaları yüklemek için,\n\t\t\"konum\" Sürücü yolunu gösterir (seçmeli)\n/device\t\tVarsayılan video aygıtını açar\n/open\t\tDosya açılır, ancak otomatik olarak oynatılmaz\n/play \t\tOynatıcı açılır açılmaz yürütme \n\t\tbaşlatılır\n/close \t\tYürütmeden sonra oynatıcı kapatılır (sadece /play komutuyla\n\t\t kullanılır)\n/shutdown\t Oynatmadan sonra bilgisayar kapatılır\n/fullscreen \tTam ekran kipinde başlatılır\n/minimized \tSimge durumunda başlatılır\n/new \t\tYeni bir oynatıcı penceresi kullanılır\n/add \t\t\"konum\" oynatma listesine eklenir, bu komutlarla birlikte\n\t\tkullanılabilir: /open ve /play\n/regvid\t\t Video biçimleri ilişkilendirilir\n/regaud \t\tSes biçimleri ilişkilendirilir\n/regpl\t\tOynatma listesi uygulamayla ilişkilendirilir\n/regall\t\tTüm dosya biçimleri uygulamayla ilişkilendirilir\n/unregall\t\tVideo biçimleri geri alınır\n/start ms \t\tOynatmaya \"ms\" (= mili saniye) sonra başlanılır\n/startpos ss:dd:ss \tOynatmaya ss:dd:ss süresinden başlanılır\n/fixedsize w,h\t Sabit pencere boyutu kullanılır\n/monitor N\tN monitöründe başlatılır; N, 1'den başlar\n/audiorenderer N \tSes çeviricisi N ile başlanılır; N, 1 ile başlar\n\t\t(\"Çıkış\" ayarlarına bakınız)\n/shaderpreset \"Pr\" \tKomut ile \"Pr\" tonlayıcı hazır ayarı kullanılır\n/reset\t\t Varsayılan ayarlara geri dönülür\n/help /h /? \tKomut satırı anahtarları yardımı görüntülenir\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Kullanım: mpc-hc.exe \"dosya yolu\" [anahtarlar]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2566,14 +2657,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Tüm süzgeçleri aç"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Kanal taraması"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Alt yazılar yüklü değil veya çevirici desteklenmiyor."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Yazar bilinmiyor. Bu tasarım size aitse lütfen irtibata geçiniz!"
@@ -2662,40 +2745,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Üst Arka - Sağ"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Gösterim İstatistiklerini Sıfırla"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Alt Yazılar::Diğer"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Kenarları gizle"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Sadece çerçevede"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Başlık && Menü'yü göster"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Menüyü &Gizle"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Gelişmiş"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Araç çubuğu üzerinde"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Araç çubuğu altında"
msgctxt "IDS_VIDEO_STREAM"
@@ -2863,8 +2918,8 @@ msgid "Other Audio"
msgstr "Other Audio"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2874,6 +2929,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Kayıpsız Apple"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Sesi"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Ses Çözücüsü"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2938,22 +3013,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Sesi"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Ses Çözücüsü"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Oynatma listesi"
@@ -2978,18 +3037,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Taraf Oranı"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "WASAPI kullan (yeniden başlatın)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "İleri alırken sesi kıs"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Ses Aygıtı:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "Eşzamanlama: Açık"
@@ -3278,6 +3325,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Ses yükseltmesi: Kapalı"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "bayt"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3335,7 +3386,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Girilen pencere oranı ayrıştırılamıyor!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Görüntü değiştirilemiyor, lütfen başka bir video karıştırıcısını deneyiniz."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3354,10 +3405,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "'Resim Kaydet' ve 'Küçük Resim Kaydet' özellikleri, Ters Süzme Karıştırıcısı video çeviricisi ile çalışmaz.\nMPC-HC çıkış ayarlarından başka bir çevirici seçip, dosyayı yeniden açınız."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Çevrimiçi alt yazı sitesine bağlanılamadı."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "EDL düzenleyicisini kullanmak istiyor musunuz?"
@@ -3426,9 +3473,9 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Önce yeni ayarları uygulamanız gerekmektedir."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
-msgstr "Oynatmadan Sonra: Kapat"
+msgstr "Oynatmadan Sonra: Çıkış"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
@@ -3452,7 +3499,15 @@ msgstr "Oynatmadan Sonra: Kilitle"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr "Oynatmadan Sonra: Ekranı kapat"
+msgstr "Oynatmadan Sonra: Ekranı Kapat"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Oynatmadan Sonra: Sıradaki Dosyayı Oynat"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Oynatmadan Sonra: Bir İşlem Yapma"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
@@ -3534,3 +3589,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Ayarlar"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Sağlayıcı"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "İşitme engelliler için"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "İndirmeler"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Beğenilme"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Çevrimiçi alt yazı araması yapılamadı."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Çevrimiçi alt yazı araması iptal edildi."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Çevrimiçi alt yazı araması tamamlandı, %d adet alt yazı bulundu."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Çevrimiçi alt yazı araması tamamlandı, bir alt yazı bulunamadı."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Alt yazı indir"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Çevrimiçi alt yazı araması yapılıyor, lütfen bekleyiniz..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Çevrimiçi alt yazı araması iptal ediliyor..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Kullanıcı adı"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Durum"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Hazır..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Henüz mevcut değil."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Gönderiliyor..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Alt yazı başarıyla gönderildi."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Alt yazı gönderilemedi."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Alt yazı gönderimi durduruldu..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Alt yazı zaten mevcut durumda."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Alt yazı gönderiliyor, lütfen bekleyiniz..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Gönderim tamamlandı."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Gönderim iptal edildi."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Gönderim başarısız oldu."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "innDir && Aç"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Ayarlar"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Sıfırla"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Yukarı Taşı"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Aşağı Taşı"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Adres Aç"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Diller"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "HATA: İnternet bağlantısı kurulamadı."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Sunucu kimlik bilgilerini giriniz"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Bağlanmak için kimlik bilgilerinizi giriniz:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Taraf Oranı: Kare çerçeve oranını kullan (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "[%s] \"%s\" indirilidi"
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Alt yazı gönder"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "\"%s\" adlı alt yazı dosyasını göndermek istediğinizden emin misiniz?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Desteklenen dillerdeki alt yazılar alınıyor..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "\"%S\" sunucusuna \"%S\" adıyla giriş yapılamadı.\n\nLütfen geçerli bir kimlik bilgisi ile tekrar deneyiniz veya anonim kullanıcı girişini aktif hale getiriniz."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Otomatik arama ve indirme, bulunduğu sunucu klasörü belirtilen kelimeleri içeren tüm medya dosyaları için atlanacaktır.\nBazı örnek tanımlamalar: \"private dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"dosya yolu\"⇥Ana dosya ya da klasör yüklenecek ⇥⇥(joker karakterler kullanılabilir, \"-\" standart girdi belirttir)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dub dosya adı\"⇥İlave ses dosyası yükle"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"dosya\"⇥İlave ses dosyası yükle XXms ile kaydırılacak ⇥⇥(Eğer dosya \"...DELAY XXms...\" içeriyorsa)"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs⇥⇥D3D tam ekran modunda görüntülemeye başla"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"sub dosya adı\"⇥İlave altyazı dosyası ekle"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtre adı\"⇥Dinamik bir bağlantı kitaplığından DirectShow filtreleri yükle(joker karakterler kullanılabilir)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd⇥⇥DVD modunda çalıştır, \"dosya yolu\" DVD klasörü anlamında(isteğe bağlı)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C⇥İsimden başlat T, bölüm C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tYürütmeyi T bölümü ile P konumundan başlat (sa:dk:sn)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd⇥⇥Ses CD'si ya da (S)VCD içerisindeki tüm ses izlerini yükle, ⇥⇥\"dosya yolu\" sürücü yolunu ifade eder(isteğe bağlı)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device⇥⇥Varsayılan video aygıtını aç"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open⇥⇥Dosyayı aç, dosya yürütmesini başlatma"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play⇥⇥Uygulama başlangıcında dosyayı yürütmeye başla"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close⇥⇥Dosyayı yürüttükten sonra uygulamayı kapat(sadece /play seçeği kullanıldığında çalışır)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown⇥Yürütme işlemi sonrasında işletim sistemini kapat"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby⇥⇥Yürütme işlemi sonrasında işletim sistemini bekleme moduna al"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate⇥Yürütme işlemi sonrasında işletim sistemini uyku moduna al"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff⇥⇥Yürütme işlemi sonrasında kullanıcı oturumunu kapat"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock⇥⇥Yürütme işlemi sonrasında kullanıcı oturumunu kilitle"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff⇥Yürütme işlemi sonrasında ekranı kapat"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext⇥⇥Yürütme işlemi sonrasında klasördeki sıradaki dosyayı yürüt"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen⇥Tam ekran modunda başlat"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized⇥Simge durumuna küçültülmüş şekilde başlat"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new⇥⇥Uygulamanın yeni bir kopyasını kullan"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add⇥⇥Birleştirmek ve/veya yürütmek /play için \"dosya yolu\" ekle"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize⇥Yürütme listesini karışık olarak yürüt"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid⇥⇥Vidyo dosyaları için dosya ilişkilendirmeleri oluştur"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud⇥⇥Ses dosyaları için dosya ilişkilendirmeleri oluştur"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl⇥⇥Yürütme listeleri için dosya ilişkilendirmeleri oluştur"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall⇥⇥Desteklenen tüm dosya türleri için dosya ilişkilendirmeleri oluştur"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall⇥⇥Tüm dosya ilişkilendirmelerini kaldır"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms⇥⇥Yürütmeye \"ms\" (= milisaniye)'den başla"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos sa:da:sn⇥Yürütmeyi sa:da:sn'den başlat"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize g,y⇥Sabit pencere boyutu ayarla"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N⇥Uygulamayı N 1'den başlayarak ekran N üzerinde başlat"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N⇥N 1'den başlayarak ses işleyici N kullanımını başlatın (\"Çıkış\" ayarlarına bakınız)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"⇥Önceden ayarlanmış gölgelendirme seçenekleri ile başlat"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"adı\"⇥Önceden ayarlanmış panoramik adını belirtin"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc⇥Biçim simgelerini yeniden ilişkilendirin"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus⇥⇥MPC-HC'yi arkaplanda başlat"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N⇥Belirtilen port üzerinden web arayüzünü başlat"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug⇥⇥Problem inceleme bilgilerini Ekran Üzerindeki Gösterge(OSD) üzerinde görüntüle"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter⇥Hata raporlayıcısını kapat"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"⇥MPC-HC'yi başka bir uygulamaya bağımlı olarak kullanın"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"⇥Donanım çözücüsü için görüntü işlemci(GPU) başlangıç numarasını ayarla.\n⇥⇥Sadece CUVID ve DXVA2 (copy-back) için uygundur"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset⇥⇥Varsayılan ayarlara dön"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?⇥Komut satırı parametleri için yardımı görüntüle"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Otomatik olarak indirilecek altyazı eşik değeri. Yüksek değerler daha doğru uyumlu altyazılar yüklenmiş olacağını, düşük değerler yanlış altyazılar yüklenebileceğine neden olabilir anlamına gelir, ama kesin bir değer yoktur. Sizin için en uygun olanı seçin."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Ses Gecikmesi(ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Varsayılan araç çubuğu piksel boyutu."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Yeni vektörize edilmiş araç çubuğunu kullanmak yerine eski araç çubuğunu kullanın."
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.tt.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.tt.dialogs.po
index 4eab41c3a..659680f00 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.tt.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.tt.dialogs.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Alexander Gorishnyak <kefir500@gmail.com>, 2014
@@ -8,10 +8,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Tatar (http://www.transifex.com/projects/p/mpc-hc/language/tt/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Tatar (http://www.transifex.com/mpc-hc/mpc-hc/language/tt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -111,16 +111,16 @@ msgid "Enable custom channel mapping"
msgstr "Кулланучының каналлар бүлүен кабызырга"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Баганаларны көйләү "
+msgid "Speaker configuration for"
+msgstr "Баганаларны көйләү"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "кергән канал:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Басканда үзгәртүләр кичекмәстән кабул ителсен өчен shift төймәсенә басып торыгыз "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Басканда үзгәртүләр кичекмәстән кабул ителсен өчен shift төймәсенә басып торыгыз"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -156,7 +156,7 @@ msgstr "Ачарга"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Фильм яки аудиофайл адресын кертегез\n(Интернетта яки сезнең санакта)"
+msgstr "Фильм яки аудиофайл адресын кертегез (Интернетта яки сезнең санакта)"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
@@ -191,8 +191,8 @@ msgid "About"
msgstr "Программа турында"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Барлык хокуклар сакланган © 2002-2014, Authors.txt файлын карагыз"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Барлык хокуклар сакланган © 2002-2017, Authors.txt файлын карагыз"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -423,12 +423,16 @@ msgid "time(s)"
msgstr "тапкыр"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Чыгару"
+msgid "Default zoom"
+msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -474,10 +478,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Аудио файлларны үзе йөкләү"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Кертелгән субтитрлар рендерерын кулланырга"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Тәртипләү"
@@ -571,7 +571,7 @@ msgid "Warning"
msgstr "Игътибар"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Әгәр сез урынны үзгәртсәгез һәм видеокарта көйләүләрендә тулы экранда тигезләүне кушсагыз, субтитрлар яхшырак күренәчәк, ләкин процессор артык төяләчәк."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -678,16 +678,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Өстәмә дисплейда тулы экран рәвешендә тәрәзәне төрмәскә"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Windows 7 аслыгы мөмкинлекләрен кулланырга 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr ""
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Папкада Киләсе/алдагы файлны 'Алга/Артка' аша, уйнату битендә бер нокта булганда ачарга"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Вакытны күрсәтергә"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1127,8 +1127,8 @@ msgid "Audio Renderer"
msgstr "Аудио-рендерер"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (renderless) һәм EVR (CP) өчен көйләүләр)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderless) һәм EVR (CP) өчен көйләүләр)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1171,8 +1171,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Субтитрлар *"
+msgid "Subtitles"
+msgstr ""
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1187,8 +1187,12 @@ msgid "Rotation"
msgstr "Борылма"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Тышкы сөзгечләр (мәсәлән VSFilter) субтитрларны барлык рендерерларда күрсәтә ала."
+msgid "Subtitle Renderer"
+msgstr ""
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1206,6 +1210,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Җирле санактан гына керүне рөхсәт итәргә"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr ""
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Көйләү мәгълүматын чыгарырга"
@@ -1231,17 +1239,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI аңлатма бирүчесе: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Мөмкин булган субтитрлар исемлеге"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Йөкләргә һәм ачарга"
+msgid "Download subtitles"
+msgstr "Субтитрларны йөкләргә"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Ачылган субтитрларны алмаштырырга"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Рәвешләр"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Рәвешләр"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Ничек сакларга..."
@@ -1279,8 +1315,8 @@ msgid "Enable automatic update check"
msgstr "Яңартуны үзе тикшерү"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Тикшерү аралыгы:"
+msgid "Check every:"
+msgstr ""
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1543,16 +1579,28 @@ msgid "Reset"
msgstr "Ташлау"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Интернетта мәгълүмат нигезе"
+msgid "Online search, download and upload subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr ""
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "Субтитрлар мәгълүмат нигезе URL:"
+msgid "Languages in order of preference:"
+msgstr ""
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Тикшерү"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr ""
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1654,6 +1702,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Килешү буенча"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr ""
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr ""
@@ -1666,3 +1758,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "Ярар"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.tt.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.tt.menus.po
index 74d50e729..0683da7fc 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.tt.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.tt.menus.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# кери <khazirek@mail.ru>, 2014
@@ -7,10 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:01+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Tatar (http://www.transifex.com/projects/p/mpc-hc/language/tt/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-01-31 22:01+0000\n"
+"Last-Translator: Underground78\n"
+"Language-Team: Tatar (http://www.transifex.com/mpc-hc/mpc-hc/language/tt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -65,29 +65,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "&Миниатюраларны сакларга..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Субтитрларны ачарга..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "&Субтитрларны сакларга..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "Субтитрлар нигезе"
+msgid "S&ubtitles"
+msgstr "Субтитрлар"
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Табарга..."
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Төяргә..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Йөкләргә..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr ""
+
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr ""
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -197,13 +193,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Калтырауны сынау"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Статистиканы күрсәтергә"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr ""
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Калган вакыт"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr ""
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr ""
msgctxt "POPUP"
msgid "&Output Range"
@@ -405,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "&Экранны тутырырга һәм кадрны кисәргә"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Пропорцияне сакларга"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "Пропорцияне урнаштырырга"
+msgid "&Aspect Ratio"
+msgstr ""
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "Килешү буенча"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr ""
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -437,6 +433,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "&Монитора/эш өстәле үзенчәлеге аермасын исәпләү"
@@ -530,9 +530,25 @@ msgid "&Stop"
msgstr "&Туктату"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "&Кадрлар буенча"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr ""
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Тизлекне киметергә"
@@ -554,16 +570,16 @@ msgid "S&haders"
msgstr "&Шейдерлар"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Тавыш"
+msgid "&Audio Track"
+msgstr ""
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "&Субтитрлар"
+msgid "Su&btitle Track"
+msgstr ""
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "&Видео ташкыны"
+msgid "Vide&o Track"
+msgstr ""
msgctxt "POPUP"
msgid "&Volume"
@@ -585,7 +601,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Уйнату тәмамлангач"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr ""
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "Программаны ябарга"
@@ -609,10 +637,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Санакны тыярга"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr ""
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Навигация"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.tt.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.tt.strings.po
index a4b1f242b..a4fe3faf7 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.tt.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.tt.strings.po
@@ -1,5 +1,5 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# Alexander Gorishnyak <kefir500@gmail.com>, 2014
@@ -10,10 +10,10 @@
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Tatar (http://www.transifex.com/projects/p/mpc-hc/language/tt/)\n"
+"Language-Team: Tatar (http://www.transifex.com/mpc-hc/mpc-hc/language/tt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,10 +64,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Үзлекләр"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr ""
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Килешү буенча стиль"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr ""
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Файллар"
@@ -120,6 +128,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr ""
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Беркайчан (тиз)"
@@ -329,12 +357,12 @@ msgid "On/Off"
msgstr "Каб./Сүн."
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Башлап (fps)"
+msgid "From (FPS)"
+msgstr "Башлап (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Кадәр (fps)"
+msgid "To (FPS)"
+msgstr "Кадәр (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -468,6 +496,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Уйнаткыч::Шейдерлар"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Чыганаклар"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Төрлеләр"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Уйнату::Эләктерү"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Уйнату::Sync Renderer"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Уйнату::Тулы экран"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr ""
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Аудиокүчергеч"
@@ -492,18 +548,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Видео Mixing Renderer 7 (оконный)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Видео Mixing Renderer 9 (оконный)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Видео Mixing Renderer 7 (без рендера)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Видео Mixing Renderer 9 (без рендера)"
@@ -556,34 +604,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Уйнаткыч::Web-интерфейс"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Субтитрлар::Нигез"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Чыганаклар"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Төрлеләр"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Уйнату::Эләктерү"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Уйнату::Sync Renderer"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Уйнату::Тулы экран"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Тулырак"
@@ -604,17 +624,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Рендеринг всегда производится в оверлее. Обычно доступны только форматы YUV, но они представляются напрямую, без преобразования в RGB. Это самый быстрый метод из всех, и только здесь стопроцентно работает \"зеркальный\" вывод видео (на TV-OUT)."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Видео рендер по умолчанию для Windows XP. Очень стабильный и лишь немного медленнее метода Overlay mixer. Использует DirectDraw и, по возможности, запускается в оверлее."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Доступен только при установленном DirectX 9. Возможности аналогичны VMR-7 (windowed), но никогда не использует оверлей, а потому может быть немного медленнее, чем VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "То же, что и VMR-7 (windowed),но с плагином MPC-HC Allocator-Presenter для вывода субтитров. \"Зеркальное\" отображение видео в оверлее работать НЕ БУДЕТ. Глубину цвета рекомендуется установить в 'True Color'."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr ""
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -625,7 +637,7 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "То же, что и VMR-9 (renderless), но использует двухпроходное бикубическое изменения размера."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
msgstr "Подключается к любому типу видеоданных и отсылает входящие кадры в никуда. Режим может пригодиться для сохранения ресурсов процессора в случае, если нужен только звук."
msgctxt "IDC_DSNULL_UNCOMP"
@@ -652,10 +664,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Собственный рендер RealMedia. Скрипты SMIL будут работать, но без интерактивности. Использует DirectDraw и, по возможности, запускается в оверлее."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Вывод RealMedia обрабатывается с помощью плагина Allocator-Presenter в VMR-7 (renderless)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Вывод RealMedia обрабатывается с помощью плагина Allocator-Presenter в VMR-9 (renderless)."
@@ -664,10 +672,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Собственный рендер QuickTime. Замедляется при изменении размера видеокадра или если окно частично закрыто другим окном. Если оверлей недоступен возвращается к методу GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Вывод QuickTime обрабатывается с помощью плагина Allocator-Presenter в VMR-7 (renderless)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Вывод QuickTime обрабатывается с помощью плагина Allocator-Presenter в VMR-9 (renderless)."
@@ -676,22 +680,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Поверхность для видео выделяется как обычная поверхность вне экрана."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Renderer сломан, не используйте его."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Хата турында хәбәр"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC упал, но эта сборка была скомпилирована без отладочной информации.\nЕсли вы хотите сообщить об этой ошибке, сначала вы должны попробовать официальную сборку.\n\nВы хотите открыть страницу загрузки?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Гади өслек экраннан тыш"
@@ -744,9 +736,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (кысусыз)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC аудио рендерер"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr ""
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -760,9 +752,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Для того, чтобы просмотреть внедренный ресурс в вашем браузере, необходимо включить веб-интерфейс.\n\nЕсли вы хотите лишь сохранить информацию, используйте кнопку \"Сохранить как\"."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Субтитрларны йөкләргә"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr ""
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -793,7 +789,7 @@ msgid "Couldn't find all archive volumes"
msgstr "Барлык архив томнарын таба алмыйм"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "Поверхность для видео выделяется как текстура, но для копирования и растяжения видео в буфер используются функции 2D. Требует наличия видеокарты, которая может выделять 32bit RGBA текстуры, с размерами не кратными 2, хотя бы в разрешении видео."
msgctxt "IDC_TEXTURESURF3D"
@@ -820,6 +816,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Уменьшает разрывы, работает в обход VSync встроенной в D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Тюнерны көйләргә"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Субтитры не загружены либо неподдерживаемый видео-рендер."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Открывает файлы VTS_xx_0.ifo для загрузки набора файлов VTS_xx_x.vob"
@@ -892,7 +900,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Тавышны сүндерү"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Тавышны кабызырга"
@@ -957,11 +965,11 @@ msgid "&Organize Favorites..."
msgstr "&Тәртипләү..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "Очраклы"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "Папка ачарга"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -1045,7 +1053,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Масштабировать в Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "Тулы экранда яшерергә"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1233,7 +1241,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Булган папканы өстәргә"
msgctxt "IDS_HW_INDICATOR"
@@ -1340,6 +1348,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr ""
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Өскәрәк"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Аскарак"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr ""
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr ""
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr ""
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr ""
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr ""
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr ""
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr ""
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr ""
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Җиһазны ачарга..."
@@ -1360,13 +1444,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Сурәт уңышлы сакланды"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Субтитрларны йөкләргә"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Субтитрларны сакларга..."
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1389,11 +1473,11 @@ msgid "Stop"
msgstr "Туктату"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "Алга адым"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "Адым алга"
msgctxt "IDS_AG_GO_TO"
@@ -1493,8 +1577,8 @@ msgid "Thumbnails saved successfully"
msgstr "Миниатюра уңышлы сакланды"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "&Видео ташкыны"
+msgid "Vide&o Track"
+msgstr ""
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1541,11 +1625,11 @@ msgid "Reset Rate"
msgstr "Тизлекне 100% ташлау 100%"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "Аудионы тоткарлау +10мс"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "Аудионы тоткарлау -10мс"
msgctxt "IDS_MPLAYERC_23"
@@ -1616,14 +1700,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Субтитрларны уңга шудырырга"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Статистиканы күрсәтергә"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Башка күчү"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr ""
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr ""
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr ""
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr ""
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Субтитрлар::Өстәмә"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Чикләрне яшерергә"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Видеокадр гына"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Башлам һәм менюны күрсәтергә"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Менюны яшерергә"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr ""
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Минималь күренеш"
@@ -1689,8 +1813,8 @@ msgid "PnS Dec Height"
msgstr "Кадр биеклеген киметергә"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Субтитрлар йөкләнә, зинһар көтегез."
+msgid "Downloading [%s] \"%s\""
+msgstr ""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1701,8 +1825,8 @@ msgid "No subtitles found."
msgstr "Субтитрлар табылмады."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d субтитр бар."
+msgid "%d subtitle(s) available."
+msgstr "%d субтитр бар."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1857,12 +1981,12 @@ msgid "Boss key"
msgstr "Босс-төймә"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Уйнаткыч менюсы (кыскартылган)"
+msgid "Player Menu"
+msgstr ""
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Уйнаткыч менюсы (тулы)"
+msgid "Player Menu (full)"
+msgstr ""
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1873,20 +1997,20 @@ msgid "Options"
msgstr "Рәвешләр"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Киләсе аудио"
+msgid "Next Audio Track"
+msgstr ""
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Алдагы аудио"
+msgid "Prev Audio Track"
+msgstr ""
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Киләсе субтитрлар"
+msgid "Next Subtitle Track"
+msgstr ""
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Алдагы субтитрлар"
+msgid "Prev Subtitle Track"
+msgstr ""
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1896,22 +2020,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Субтитрларны киредән йөкләргә"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Киләсе аудио (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Алдагы аудио (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Киләсе субтитрлар (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Алдагы субтитрлар (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Киләсе почмак (DVD)"
@@ -1921,28 +2029,28 @@ msgid "Prev Angle (DVD)"
msgstr "Алдагы почмак (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Киләсе аудио (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Алдагы аудио (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Киләсе субтитрлар (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Алдагы субтитрлар (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr ""
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Субтитрлар Каб/Сүн (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Калган вакыт"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr ""
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1968,11 +2076,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Шифрланган"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Әйе"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Юк"
@@ -2029,11 +2137,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Том: %02lu/%02lu, Раздел: %02lu/%02lu, Глава: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "Угол: %02lu/%02lu, %lux%lu %luГц %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %u Гц %d бит %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2124,14 +2232,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Киңлек"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "Кертелгән URL дөрес түгел!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Версия протокола не совпадает. Пожалуйста, обновите ваш плеер или выберите другой адрес!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Пропорция"
@@ -2141,19 +2241,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Барысы: %ld, Югалды: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", Зурлыгы: %I64dКб"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", Зурлыгы: %I64dМб"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", Буш: %I64dКб"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", Буш: %I64dМб"
msgctxt "IDS_MAINFRM_42"
@@ -2225,8 +2325,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr ""
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Для загрузки субтитров необходимо изменить тип рендерера и открыть файл заново.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync или madVR\n- RealMedia: специалный рендерер для RealMedia, или открывайте через DirectShow\n- QuickTime: DX7 или DX9 рендерер для QuickTime\n- ShockWave: не поддерживается"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Для загрузки субтитров необходимо изменить тип рендерера и открыть файл заново.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync или madVR\n- RealMedia: специалный рендерер для RealMedia, или открывайте через DirectShow\n- QuickTime: DX7 или DX9 рендерер для QuickTime\n- ShockWave: не поддерживается"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2237,11 +2337,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Пропорция: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Пропорция: стандарт"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr ""
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "Аудио тоткарлау: %I64dмс"
msgctxt "IDS_AG_CHAPTER"
@@ -2253,8 +2353,8 @@ msgid "Out of memory"
msgstr "Хәтер җитми"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Хата: IE өчен Flash кирәк"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Хата: Internet Explorer өчен Flash кирәк"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2276,10 +2376,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Файлны уйнатып булмый"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL неверный, невозможно обнаружить базу субтитров!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Бүлек: "
@@ -2300,14 +2396,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Хәзерге"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "Работа MPC-HC прервана. Чтобы помочь нам в решении этой проблемы, пожалуйста, отправьте файл '%s' на наш баг-трекер.\n\nХотите ли вы сейчас открыть папку, содержащую дамп-файл, и перейти на баг-трекер?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Ошибка при создании дамп-файла '%s' (ошибка %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Папка сайлагыз"
@@ -2325,7 +2413,7 @@ msgid "Toggle Caption&Menu"
msgstr "Башлам һәм менюны Каб/Сүн"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "Әйләндерү тасмасын Каб/Сүн"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2481,8 +2569,8 @@ msgid "Volume boost Max"
msgstr "Тавыш көчен арттыру - Max"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Использование: mpc-hc.exe \"путь\" [переключатели]\n\n\"путь\"\t\tФайл или каталог для загрузки (разрешены \n\t\tмаски, \"-\" denotes standard input)\n/dub \"dubname\"\tЗагрузить дополнительный звуковой файл\n/dubdelay \"file\"\tЗагрузить звуковой файл со смещением XXмс\n\t\t(если файл содержит \"...DELAY XXms...\")\n/d3dfs\t\tСтартовать в полноэкранном D3D режиме\n/sub \"subname\"\tЗагрузить дополнительные субтитры\n/filter \"filtername\"\tЗагрузить фильтры DirectShow из библиотеки\n\t\t(разрешены маски)\n/dvd\t\tЗапуск в режиме DVD, \"путь\" означает каталог\n\t\tс DVD (опционально)\n/dvdpos T#C\tНачать воспроизведение с title T, chapter C\n/dvdpos T#hh:mm\tНачать воспроизведение с title T, позиции\n\t\thh:mm:ss\n/cd\t\tЗагрузить все дорожки Audio CD или (S)VCD,\n\t\t\"путь\" означает путь к диску (опционально)\n/device\t\tOpen the default video device\n/open\t\tТолько открыть файл\n/play\t\tНачинать воспроизведение сразу после запуска\n/close\t\tЗакрыть по окончании воспроизведения\n\t\t(работает только с ключем /play)\n/shutdown\tВыключить компьютер по окончании\n\t\tвоспроизведения\n/fullscreen\tЗапуск в полноэкранном режиме\n/minimized\tЗапуск в свернутом виде\n/new\t\tИспользовать новую копию проигрывателя\n/add\t\tДобавить \"путь\" в плейлист, можно совместно\n\t\tс ключами /open и /play\n/regvid\t\tРегистрировать видеоформаты\n/regaud\t\tРегистрировать аудиоформаты\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tРазрегистрировать все форматы\n/start ms\t\tВоспроизводить с позиции \"ms\"\n\t\t(миллисекунды)\n/startpos hh:mm:ss\tВоспроизводить с позиции hh:mm:ss\n/fixedsize w,h\tУстановить фиксированный размер окна\n/monitor N\tЗапускаться на мониторе N, где N\n\t\tотсчитывается с 1\n/audiorenderer N\tИспользовать аудиорендер N, где N\n\t\tотсчитывается с 1 (смотрите настройки\n\t\t\"Вывод\")\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tВостановить настройки по умолчанию\n/help /h /?\tПоказывает эту справку\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2568,14 +2656,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Барлык сөзгечләрне кабызырга"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Тюнерны көйләргә"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Субтитры не загружены либо неподдерживаемый видео-рендер."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Свяжитесь c разработчиком, если это ваш логотип!"
@@ -2664,40 +2744,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Өске арткы уң"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Статистиканы ташлау"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Субтитрлар::Өстәмә"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Чикләрне яшерергә"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Видеокадр гына"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Башлам һәм менюны күрсәтергә"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Менюны яшерергә"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr ""
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "әйләндерү тасмасы өстендә"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "әйләндерү тасмасы астында"
msgctxt "IDS_VIDEO_STREAM"
@@ -2865,8 +2917,8 @@ msgid "Other Audio"
msgstr "Башка аудио"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr ""
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2876,6 +2928,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless (югалтусыз)"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr ""
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2940,22 +3012,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Уйнату бите"
@@ -2980,18 +3036,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Яклар чагыштырмасы"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Использовать WASAPI (требуется перезапуск)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Отключить звук при быстрой перемотке"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Тавыш җиһазы:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: кабызылган"
@@ -3280,6 +3324,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Восстанавливать громкость: отключено"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr ""
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "КБ"
@@ -3337,7 +3385,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Количество кадров в секунду записаны некорректно!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Покадровый просмотр невозможен, попробуйте другой видеорендерер."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3356,10 +3404,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "Функции 'Сохранить изображение' и 'Сохранить миниатюры' не работают с рендерером Overlay Mixer.\nИзмените видеорендерер и вновь откройте файл."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Не удается подключиться к базе субтитров."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Вы хотите активировать EDL редактор?"
@@ -3428,7 +3472,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Вы должны применить новые настройки перед их использованием"
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "По окончании воспроизведения: закрыть плеер"
@@ -3456,6 +3500,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr ""
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr ""
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr ""
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Яктылык: %s"
@@ -3536,3 +3588,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Көйләүләр"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Субтитрларны йөкләргә"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Йөкләргә һәм ачарга"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Ташлау"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Өскәрәк"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Аскарак"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.uk.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.uk.dialogs.po
index 245a78fbc..793461967 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.uk.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.uk.dialogs.po
@@ -1,15 +1,17 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# arestarh1986 <arestarh@ukr.net>, 2014
+# arestarh1986 <arestarh@ukr.net>, 2014-2016
+# Денис <denyspokhylenko@gmail.com>, 2015
+# Александр Невидомский <neviksasha@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Ukrainian (http://www.transifex.com/projects/p/mpc-hc/language/uk/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-10-23 10:50+0000\n"
+"Last-Translator: arestarh1986 <arestarh@ukr.net>\n"
+"Language-Team: Ukrainian (http://www.transifex.com/mpc-hc/mpc-hc/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -109,15 +111,15 @@ msgid "Enable custom channel mapping"
msgstr "Увімкнути розподіл каналів користувача"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "Налаштування колонок для "
+msgid "Speaker configuration for"
+msgstr "Налаштування колонок для"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "вхідних каналів:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "Утримуйте shift для негайного використання змін при натискуванні"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -154,7 +156,7 @@ msgstr "Відкрити"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "Введіть шлях до фільму або аудіофайлу\n(в мережі або на вашому комп'ютері)"
+msgstr "Введіть шлях до фільму або аудіофайлу (в мережі або на вашому комп'ютері)"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
@@ -189,8 +191,8 @@ msgid "About"
msgstr "Про програму"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014, див. файл Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017, див. файл Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -421,12 +423,16 @@ msgid "time(s)"
msgstr "раз"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr ""
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Після відтворення"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Вивід"
+msgid "Default zoom"
+msgstr ""
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -472,10 +478,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Автозавантаження звуку"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Використовувати вбудований рендерер субтитрів"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Регулювання"
@@ -514,7 +516,7 @@ msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr ""
+msgstr "Крок затримки"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -554,7 +556,7 @@ msgstr "% від швидк. відтвор. відео"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr "Дозволити випадання деяких фрагментів субтитрів якщо черга запущена пізно"
+msgstr "Дозволити випадан. деяких фрагмен. субтитрів якщо черга запущена пізно"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
@@ -569,7 +571,7 @@ msgid "Warning"
msgstr "Увага"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "Якщо Ви зміните положення та увімкнете повноекранне згладжування в налаштуваннях відеокарти, вигляд субтитрів не покращиться, але навантаження процесора збільшиться."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -586,19 +588,19 @@ msgstr "Встановити"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC3"
msgid "Association"
-msgstr "Ассоціації"
+msgstr "Асоціації"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr ""
+msgstr "Використовувати специфічні для формату файла іконки"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr ""
+msgstr "Запустити від імені &адміністратора"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "Встановити як &типову програму"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -676,16 +678,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Заблокувати ЗГОРТАННЯ, якщо повноекранний режим на іншому моніторі"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Використовувати особливості панелі завдань Windows 7"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Використовувати особливості панелі завдань"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "Відкривати попередній/наступний файл в теці при виконанні команд 'Крок назад/вперед' коли лише один файл у списку відтворення"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "Відображати час:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -1125,8 +1127,8 @@ msgid "Audio Renderer"
msgstr "DirectShow аудіо"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Налаштування VMR-7/VMR-9 (renderless) і EVR (користув.)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Налаштування VMR-9 (renderless) і EVR (користув.)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1169,8 +1171,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Субтитри *"
+msgid "Subtitles"
+msgstr "Субтитри"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1185,8 +1187,12 @@ msgid "Rotation"
msgstr "Обертання"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Зовнішні фільтри (як то VSFilter) допускають показ субтитрів для всіх рендерерів."
+msgid "Subtitle Renderer"
+msgstr "Рендерер субтитрів"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr ""
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1204,6 +1210,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Дозволити доступ лише з локального комп'ютера"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Ввімкнути поперед. перегляд"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "Виводити відлагоджувальну інформацію"
@@ -1229,17 +1239,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Інтерпретація CGI: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Список доступних субтитрів"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Завантажити та використати"
+msgid "Download subtitles"
+msgstr "Завантажити субтитри"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Заміняти вже відкриті субтитри"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Завантажити"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Оновити"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Перервати"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Опції"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr ""
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Перервати"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Опції"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Зберегти як..."
@@ -1277,8 +1315,8 @@ msgid "Enable automatic update check"
msgstr "Ввімкнути автоматичну перевірку оновлень"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Період між кожною перевіркою:"
+msgid "Check every:"
+msgstr "Перевіряти кожні:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1541,16 +1579,28 @@ msgid "Reset"
msgstr "Скинути"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Онлайн база"
+msgid "Online search, download and upload subtitles"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr ""
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr ""
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "URL онлайн бази субтитрів:"
+msgid "Languages in order of preference:"
+msgstr ""
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Тест"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr ""
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1652,6 +1702,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Типово"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Пристрій"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Ексклюзивний режим"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Дозволити Потоковий"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Опції"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Рівень:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr ""
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr ""
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Якість JPEG:"
@@ -1664,3 +1758,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "ОК"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Повідомити про падіння"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr ""
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Email:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Вказання вашої email-адреси є опціональним і розробники вам напишуть лише тоді, коли необхідна додаткова інформація."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Описання проблеми (лише англійською):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Перезапустити MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Вийти з MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.uk.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.uk.menus.po
index 1156a998f..c432cbcb6 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.uk.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.uk.menus.po
@@ -1,15 +1,15 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# arestarh1986 <arestarh@ukr.net>, 2014
+# arestarh1986 <arestarh@ukr.net>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-21 11:41+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-10-23 10:53+0000\n"
"Last-Translator: arestarh1986 <arestarh@ukr.net>\n"
-"Language-Team: Ukrainian (http://www.transifex.com/projects/p/mpc-hc/language/uk/)\n"
+"Language-Team: Ukrainian (http://www.transifex.com/mpc-hc/mpc-hc/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -64,29 +64,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "Зберегти м&ініатюри..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "Відкрити су&бтитри..."
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "Збере&гти субтитри..."
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "База субтитрів"
+msgid "S&ubtitles"
+msgstr "С&убтитри"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "Знайти..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "Відвантажити..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr ""
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "Завантажити..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr ""
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -196,13 +192,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Тест дрижання"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "&Показ статистики"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "Залишок часу"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "Показ поточного часу"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "Показ &назви файла"
msgctxt "POPUP"
msgid "&Output Range"
@@ -404,17 +404,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "На &висоту екрану"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Зберегти пропорції"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "В&становити пропорції"
+msgid "&Aspect Ratio"
+msgstr "&Співвідношення сторін"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Авто"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Типово (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -436,6 +432,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr ""
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "Пропорції &монітору та роб. столу різні"
@@ -529,9 +529,25 @@ msgid "&Stop"
msgstr "&Стоп"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "По&кадрово"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Повторювати"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr ""
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Файл"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Список відтворення"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "Пов&ільніше"
@@ -553,16 +569,16 @@ msgid "S&haders"
msgstr "&Шейдери"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Аудіо"
+msgid "&Audio Track"
+msgstr "&Аудіодоріжка"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "С&убтитри"
+msgid "Su&btitle Track"
+msgstr "Доріжка су&бтитрів"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "&Потік відео"
+msgid "Vide&o Track"
+msgstr "&Відеодоріжка"
msgctxt "POPUP"
msgid "&Volume"
@@ -584,7 +600,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "Наприкінці"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "Нічого не ро&бити"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "Відтворити &наступний файл у теці"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Вимкнути &монітор"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "Закрити програму"
@@ -608,10 +636,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "Заблокувати ПК"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Вимкнути &монітор"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Навігація"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.uk.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.uk.strings.po
index ed561ff34..df292a210 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.uk.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.uk.strings.po
@@ -1,15 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# arestarh1986 <arestarh@ukr.net>, 2014
+# arestarh1986 <arestarh@ukr.net>, 2014-2016
+# Max Kozachenko <symphonicon@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 15:00+0000\n"
"Last-Translator: JellyFrog\n"
-"Language-Team: Ukrainian (http://www.transifex.com/projects/p/mpc-hc/language/uk/)\n"
+"Language-Team: Ukrainian (http://www.transifex.com/mpc-hc/mpc-hc/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -60,10 +61,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Властивості"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Файл"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Стандартний стиль"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Список відтворення"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Файли"
@@ -116,6 +125,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Якщо ціль рендерингу залишилась невизначеною, то субтитри SSA/ASS будуть промальовуватися відносно кадру відео, в той час як інші текстові субтитри - відносно вікна плеєра."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr ""
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr ""
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Ніколи (найшвидший спосіб)"
@@ -325,11 +354,11 @@ msgid "On/Off"
msgstr "Ввімк./Вимк."
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
+msgid "From (FPS)"
msgstr "Від (кадри/с)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
+msgid "To (FPS)"
msgstr "До (кадри/с)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
@@ -464,6 +493,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Відтворення::Шейдери"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Ресурси"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Різне"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Відтворення::Захоплення"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Відтворення::Налаштування Sync Renderer"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Відтворення::Повноекранний режим"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Вбудовані фільтри::Аудіорендерер"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Аудіоперемикач"
@@ -488,18 +545,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Overlay Mixer Renderer"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (windowed)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (windowed)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (renderless)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (renderless)"
@@ -552,34 +601,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Програвач::Web-інтерфейс"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Субтитри::База"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Ресурси"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Різне"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Відтворення::Захоплення"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Відтворення::Налаштування Sync Renderer"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Відтворення::Повноекранний режим"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Детально"
@@ -600,17 +621,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Рендеринг завжди здійснюється в оверлеї. Зазвичай доступні лише формати YUV, але вони представляються безпосередньо, без перетворення в RGB. Це найшвидший метод, і лише тут ґарантовано працює \"дзеркальний\" вивід відео на TV-OUT."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Відеорендерер зазвичай для Windows XP. Дуже стабільний і лише трохи повільніший за Overlay mixer. Використовує DirectDraw та по-можливості запускається в оверлеї."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Доступний лише при встановленому DirectX 9. По можливостях подібний до VMR-7 (windowed), але ніколи не використовує оверлей, а отже може бути дещо повільнішим, ніж VMR-7 (windowed)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Так само як VMR-7 (windowed), але з плагіном MPC-HC Allocator-Presenter для виводу субтитрів. \"Зеркальне\" відображення відео в оверлеї працювати НЕ БУДЕ. Бажано встановити глибину кольору 'True Color'."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr ""
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -621,8 +634,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Так само як і VMR-9 (renderless), але використовує справжній двопрохідний bicubic масштабувальник."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Підключається до будь-якого типу відеоданих і відправляє вхідні кадри в нікуди. Може бути корисний для економії ресурсів процесора, якщо потрібен лише звук."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Підключається до будь-якого медіатипу відеоданих і відправляє вхідні кадри в нікуди. Може бути корисний для економії ресурсів процесора, якщо не потрібне відображення відео."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -648,10 +661,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Власний рендерер RealMedia. Скрипти SMIL будуть працювати, але без інтерактивності. Використовує DirectDraw і по-можливості запускається в оверлеї."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Вивід RealMedia обробляється за допомогою плагіна Allocator-Presenter в VMR-7 (renderless)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Вивід RealMedia обробляється за допомогою плагіна Allocator-Presenter в VMR-9 (renderless)."
@@ -660,10 +669,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Власний рендерер QuickTime. Сповільнюється при зміні розміру кадру або якщо вікно частково перекривається іншим вікном. Якщо оверлей недоступний, то використовується метод GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Вивід QuickTime обробляється за допомогою плагіна Allocator-Presenter в VMR-7 (renderless)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Вивід QuickTime обробляється за допомогою плагіна Allocator-Presenter в VMR-9 (renderless)."
@@ -672,22 +677,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Поверхня для відео виділяється як звичайна поверхня за межами екрану."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "Рендерер аудіо MPC є непрацюючим, не використовуйте його."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Sync Renderer"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Повідомлення про помилку"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "Роботу MPC-HC несподівано перервано, але данна збірка була скомпільована без підтримки відлагоджувальної інформації.\nЯкщо ви хочете повідомити про помилку, вам необхідно спочатку завантажити офіційну збірку.\n\nВи хочете зараз відвідати сторінку для завантаження?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Прості закадрові планарні поверхні"
@@ -740,9 +733,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (нестиснений)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Аудіорендерер MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr ""
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -756,9 +749,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "Для відображення вбудованих ресурсів у браузері вам необхідно ввімкнути веб-інтерфейс.\n\nВикористовуйте пункт \"Зберегти як\", якщо ви хочете зберегти лише інформацію."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Завантажити субтитри"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr ""
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr ""
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -789,8 +786,8 @@ msgid "Couldn't find all archive volumes"
msgstr "Не вдалося знайти всі томи архіва"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Поверхня для відео виділяється як текстура, але для копіювання та масштабування відео в буфер використовуються функції 2D. Відеокарта повинна вміти виділяти буфер текстур 32bit RGBA з розмірами не степеню 2, і не менше розміру відео."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Поверхню для відео буде виділено як текстуру, але для копіювання та масштабування відео в зворотній буфер будуть використовуватися функції 2D. Відеокарта повинна вміти виділяти буфер текстур 32bit RGBA з розмірами не степеню 2, і не менше розміру відео."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
@@ -816,6 +813,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Зменшує дрижання за допомогою пропуску типового VSync, що є в складі D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Налаштування тюнера"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Субтитри не завантажені або використовується непідтримуваний рендерер."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr ""
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "Відкриває файли VTS_xx_0.ifo для завантаження набору VTS_xx_x.vob"
@@ -888,7 +897,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Вимкнути звук"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "Ввімкнути звук"
@@ -953,12 +962,12 @@ msgid "&Organize Favorites..."
msgstr "&Впорядкувати.."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "У випадковому порядку"
+msgid "Sh&uffle"
+msgstr "У &випадковому порядку"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Відкрити місцерозташування файла"
+msgid "Ope&n file location"
+msgstr "Відкрити &місцерозташування файла"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -1041,8 +1050,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Збільшити до Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Приховувати якщо 'На весь екран'"
+msgid "&Hide on Fullscreen"
+msgstr "&Приховувати якщо 'На весь екран'"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1229,7 +1238,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "Додати інші файли з теки файла"
msgctxt "IDS_HW_INDICATOR"
@@ -1330,10 +1339,86 @@ msgstr "Максимальний розмір (NxNpx) обкладинки, за
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr ""
+msgstr "Затримка субтитрів буде зменшена/збільшена на дане значення кожного разу, коли використовуватимуться гарячі клавіші (%s/%s)."
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
+msgstr "<не задано>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Перегляд"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Догори"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Донизу"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Сортувати за LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Видалити усі"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Ви впевнені, що хочете видалити усі канали зі списку?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Жодної інформації не доступно"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Будь ласка, зачекайте, йде аналіз..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "Спів. стор. %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Вмикає запис логу у файл (потребує перезапуску)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Часу залишилося"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Висока точність"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Наприкінці відтворення: Перемотати файл на початок"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Наприкінці відтворення: Закрити файл"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr ""
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr ""
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr ""
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr ""
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
msgstr ""
msgctxt "IDS_AG_OPEN_DEVICE"
@@ -1356,13 +1441,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Зображення успішно збережено"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Завантажити субтитри"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr ""
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Зберегти субтитри"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr ""
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1385,12 +1470,12 @@ msgid "Stop"
msgstr "Стоп"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "Крок вперед"
+msgid "Frame-step"
+msgstr "На кадр вперед"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "Крок назад"
+msgid "Frame-step back"
+msgstr "На кадр назад"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
@@ -1489,8 +1574,8 @@ msgid "Thumbnails saved successfully"
msgstr "Мініатюри успішно збережено"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Потік в&ідео"
+msgid "Vide&o Track"
+msgstr "&Відеодоріжка"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1537,12 +1622,12 @@ msgid "Reset Rate"
msgstr "Нормальна швидкість"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Затримка аудіо +10мс"
+msgid "Audio Delay +10 ms"
+msgstr "Затримка аудіо +10 мс"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Затримка аудіо -10мс"
+msgid "Audio Delay -10 ms"
+msgstr "Затримка аудіо -10 мс"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
@@ -1612,14 +1697,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Зсунути субтитри вправо"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Показати статистику"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Перейти на початок"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: Показ назви файла"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Відтворення DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Відтворення BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: Показ статистики рендерера"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: Скидання статистики рендерера"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Субтитри::Різне"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Приховати межі"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Лише відеок&адр"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "Відобразити заголовок та меню"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Приховати меню"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Розшир. налаштув."
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Мінімальна компоновка"
@@ -1685,8 +1810,8 @@ msgid "PnS Dec Height"
msgstr "Зменшити висоту кадру"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Йде завантаження субтитрів, будь ласка, зачекайте."
+msgid "Downloading [%s] \"%s\""
+msgstr ""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1697,8 +1822,8 @@ msgid "No subtitles found."
msgstr "Субтитрів не знайдено."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
-msgstr " %d субтитрів доступно."
+msgid "%d subtitle(s) available."
+msgstr "%d субтитрів доступно."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
@@ -1853,12 +1978,12 @@ msgid "Boss key"
msgstr "Аварійна клавіша"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Меню програвача (скорочене)"
+msgid "Player Menu"
+msgstr "Меню плеєра"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Меню програвача (повне)"
+msgid "Player Menu (full)"
+msgstr "Меню плеєра (повне)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1869,20 +1994,20 @@ msgid "Options"
msgstr "Опції"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Наступне аудіо"
+msgid "Next Audio Track"
+msgstr "Наступна аудіодоріжка"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Попереднє аудіо"
+msgid "Prev Audio Track"
+msgstr "Попередня аудіодоріжка"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Наступні субтитри"
+msgid "Next Subtitle Track"
+msgstr "Наступна доріжка субтитрів"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Попередні субтитри"
+msgid "Prev Subtitle Track"
+msgstr "Попередня доріжка субтитрів"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1892,22 +2017,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Перечитати субтитри"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Наступне аудіо (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Попереднє аудіо (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Наступні субтитри (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Попередні субтитри (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Наступний кут зору (DVD)"
@@ -1917,28 +2026,28 @@ msgid "Prev Angle (DVD)"
msgstr "Попередній кут зору (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Наступне аудіо (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Наступна аудіодоріжка (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Попереднє аудіо (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Попередня аудіодоріжка (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Наступні субтитри (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Наступна доріжка субтитрів (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Попередні субтитри (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Попередня доріжка субтитрів (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Ввімк./Вимк. субтитри (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Часу залишилося"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: Показ поточного часу"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1964,11 +2073,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Зашифровано"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Так"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Ні"
@@ -2025,12 +2134,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Том: %02lu/%02lu, Розділ: %02lu/%02lu, Сцена: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
-msgstr "Кут: %02lu/%02lu, %lux%lu %luГц %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Кут: %02lu/%02lu, %lux%lu %lu Гц %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uГц %dбіт %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Гц %d біт %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2042,7 +2151,7 @@ msgstr "Відтворити в MPC-HC"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr ""
+msgstr "У MPC-HC не достатньо прав для зміни асоціацій форматів файлів. Будь ласка, натисніть кнопку \"Запустити від імені адміністратора\"."
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
@@ -2120,14 +2229,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Ширина зображення"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "Введено правильний URL (напевно)!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Версія протоколу не співпадає, Обновіть програму або виберіть інший сервер!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Пропорції"
@@ -2137,20 +2238,20 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Разом: %ld, Втрачено: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", Розмір: %I64dКб"
+msgid ", Size: %I64d KB"
+msgstr ", Розмір: %I64d Кб"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", Розмір: %I64dМб"
+msgid ", Size: %I64d MB"
+msgstr ", Розмір: %I64d Мб"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", Вільно: %I64dКб"
+msgid ", Free: %I64d KB"
+msgstr ", Вільно: %I64d Кб"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", Вільно: %I64dМб"
+msgid ", Free: %I64d MB"
+msgstr ", Вільно: %I64d Мб"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
@@ -2221,8 +2322,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Мініатюри були б замалими, неможливо створити файл.\n\nСпробуйте зменшити кількість мініатюр або збільшити сумарний розмір."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Для завантаження субтитрів Вам необхідно змінити тип рендерера та повторно відкрити файл.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (користув.), Sync, madVR або Haali\n- RealMedia: Спеціальний рендерер для RealMedia, або відкривайте файл через DirectShow\n- QuickTime: DX7 або DX9 рендерер для QuickTime\n- ShockWave: недоступно"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Для завантаження субтитрів Вам необхідно змінити тип рендерера та повторно відкрити файл.\n- DirectShow: VMR-9 (renderless), EVR (користув.), Sync, madVR або Haali\n- RealMedia: Спеціальний рендерер для RealMedia, або відкривайте файл через DirectShow\n- QuickTime: DX7 або DX9 рендерер для QuickTime\n- ShockWave: недоступно"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2233,12 +2334,12 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Пропорції: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Пропорції: стандартні"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Співвідношення сторін: Типово (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Затримка аудіо: %I64dмс"
+msgid "Audio delay: %I64d ms"
+msgstr "Затримка аудіо: %I64d мс"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2249,8 +2350,8 @@ msgid "Out of memory"
msgstr "Недостатньо памяті"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Помилка: Flash необхідний для IE"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Помилка: необхідний Adobe Flash Player для Internet Explorer"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2272,10 +2373,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Помилка відтворення файла"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "Введено неправильний URL, база субтитрів недоступна!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Сцена: "
@@ -2296,14 +2393,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Поточний"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "Роботу MPC-HC несподівано перервано. Щоб допомогти нам виправити проблему, надішліть цей файл '%s' на наш трекер з розв'язання помилок.\n\nВи хочете відкрити теку, що містить файл мінідампу і відвідати трекер?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Неможливо створити файл-дамп \"%s\" (код помилки %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Оберіть теку"
@@ -2321,8 +2410,8 @@ msgid "Toggle Caption&Menu"
msgstr "Ввімк./Вимк. заголовок і меню"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
-msgstr "Ввімк./Вимк. смуга перемотки"
+msgid "Toggle Seek Bar"
+msgstr "Ввімк./Вимк. стрічку перемотки"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
msgid "Toggle Controls"
@@ -2477,8 +2566,8 @@ msgid "Volume boost Max"
msgstr "Підсилення - Макс."
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Використання: mpc-hc.exe \"шлях\" [перемикачі]\n\n\"шлях\"\tФайл або тека для завантаження (дозволені маски, \"-\" перевизначають стандартне введення)\n/dub \"dubname\"\tЗавантажити додатковий дубляж\n/dubdelay \"file\"\tЗавантажити додатковий дубляж з затримкою XXмс\n(якщо ім'я файлу містить \"...DELAY XXms...\")\n/d3dfs\t\tСтартувати в повноекранному D3D режимі\n/sub \"subname\"\tЗавантажити додаткові субтитри\n/filter \"filtername\"\tЗавантажити фільтри DirectShow з бібліотеки (дозволені маски)\n/dvd\t\tЗапуск в режимі DVD, \"шлях\" вказує на вміст DVD (опціонально)\n/dvdpos T#C\tПочинати відтворення з заголовку T, розділу C\n/dvdpos T#hh:mm\tПочинати відтворення з заголовку T, позиції hh:mm:ss\n/cd\t\tЗавантажити всі доріжки Audio CD або (S)VCD, \"шлях\" вказує на вміст диску (опціонально)\n/device\t\tВідкрити типовий пристрій відображення відео\n/open\t\tЛише відкрити файл, не відтворювати\n/play\t\tПочинати відтворення відразу після запуску\n/close\t\tЗакрити після завершення відтворення (працює лише з /play)\n/shutdown\tВимкнути комп'ютер після завершення відтворення\n/fullscreen\tЗапуск в повноекранному режимі\n/minimized\tЗапуск в згорнутому вигляді\n/new\t\tЗапускати нову копію програвача\n/add\t\tДодати \"шлях\" в список відтворення, можна спільно з /open та /play\n/regvid\t\tЗареєструвати асоціації відеоформатів\n/regaud\t\tЗареєструвати асоціації аудіоформатів\n/regpl\t\tЗареєструвати асоціації для файлів списків відтворення\n/regall\t\tЗареєструвати асоціації для всіх підтримуваних типів файлів\n/unregall\t\tВідреєструвати асоціації відеоформатів\n/start ms\t\tВідтворювати починаючи з позиції \"ms\" (= мілісекунди)\n/startpos hh:mm:ss\tПочинати відтворення з позиції hh:mm:ss\n/fixedsize w,h\tВстановити фіксований розмір вікна\n/monitor N\tЗапустити на моніторі N, нумерація з 1\n/audiorenderer N\tЗапустити з аудіорендерером N, нумерація з 1\n\t\t(див. \"Вивід\" в налаштуваннях)\n/shaderpreset \"Pr\"\tЗапустити з використанням \"Pr\" профіля шейдерів\n/reset\t\tВідновити типові налаштування\n/help /h /?\tПоказати цю довідку\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr ""
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2564,14 +2653,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Ввімкнути всі фільтри"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Налаштування тюнера"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Субтитри не завантажені або використовується непідтримуваний рендерер."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Автор невідомий. Зв'яжіться зі мною, якщо це ваш лого!"
@@ -2660,40 +2741,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Верхній тиловий правий"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Скинути екранну статистику"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Субтитри::Різне"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Приховати межі"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Лише відеокадр"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "Відобразити заголовок та меню"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Приховати меню"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Розшир. налаштув."
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "Над стрічкою перемотування"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "Під стрічкою перемотування"
msgctxt "IDS_VIDEO_STREAM"
@@ -2861,8 +2914,8 @@ msgid "Other Audio"
msgstr "Інше аудіо"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2872,6 +2925,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus Audio Codec"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2936,22 +3009,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Список відтворення"
@@ -2976,18 +3033,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Співвіднош. сторін"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Використовувати WASAPI (необхідний перезапуск)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Вимикати звук при прискореному перемотуванні вперед"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Пристрій виведення звуку:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: Ввімк."
@@ -3276,6 +3321,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Відновлення гучності: Вимк."
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "байт"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "КБ"
@@ -3333,7 +3382,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "Помилка обробки введеної частоти кадрів!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "Покадровий перегляд неможливий, спробуйте інший рендерер відео."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3352,10 +3401,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "'Зберегти зображення' і 'Зберегти мініатюри' не працюють для рендерера відео Overlay Mixer.\nЗмініть рендерер відео у відповідному розділі налаштувань MPC-HC і повторно відкрийте файл."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Неможливо з'єднатися з онлайн-базою субтитрів."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Ви хочете активувати редактор EDL?"
@@ -3424,7 +3469,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Вам необхідно застосувати нові налаштування перед тим, як їх тестувати."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "Наприкінці відтворення: Закрити програму"
@@ -3452,6 +3497,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "Після відтворення: Вимкнути монітор"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Наприкінці відтворення: Відтворити наступний файл в теці"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Наприкінці відтворення: Нічого не робити"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "Яскравість: %s"
@@ -3514,21 +3567,405 @@ msgstr "Якщо вибрано \"Останній ключовий кадр\",
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr ""
+msgstr "Асоціювати з усіма форматами"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr ""
+msgstr "Асоціювати лише з форматами відео"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr ""
+msgstr "Асоціювати лише з форматами аудіо"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr ""
+msgstr "Скинути усі асоціації"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Налаштування"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Провайдер"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Завантажити субтитри"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Ім'я користувача"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Статус"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "Завантажити && використати"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr ""
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Скинути"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Догори"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Донизу"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Відкрити URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Мови"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr ""
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr ""
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr ""
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr ""
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr ""
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr ""
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr ""
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr ""
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr ""
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr ""
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr ""
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr ""
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr ""
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr ""
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr ""
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr ""
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr ""
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr ""
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr ""
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr ""
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr ""
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr ""
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr ""
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr ""
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr ""
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr ""
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr ""
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr ""
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr ""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr ""
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr ""
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr ""
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr ""
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr ""
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr ""
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr ""
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr ""
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr ""
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr ""
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr ""
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr ""
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr ""
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.vi.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.vi.dialogs.po
index e5e66abca..1703d6fc3 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.vi.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.vi.dialogs.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Dat Luong Anh <datanhlg@gmail.com>, 2014
-# TRẦN ANH MINH <anhminhvks@yahoo.com>, 2014
+# DatSoft, 2014
+# TRẦN ANH MINH <anhminhvks@yahoo.com>, 2014-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-10-03 17:40+0000\n"
-"Last-Translator: Dat Luong Anh <datanhlg@gmail.com>\n"
-"Language-Team: Vietnamese (http://www.transifex.com/projects/p/mpc-hc/language/vi/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-06-22 07:17+0000\n"
+"Last-Translator: TRẦN ANH MINH <anhminhvks@yahoo.com>\n"
+"Language-Team: Vietnamese (http://www.transifex.com/mpc-hc/mpc-hc/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -110,7 +110,7 @@ msgid "Enable custom channel mapping"
msgstr "Cho phép lập bản đồ kênh tùy chỉnh"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
+msgid "Speaker configuration for"
msgstr "Cấu hình loa cho"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
@@ -118,8 +118,8 @@ msgid "input channels:"
msgstr "Ngõ vào:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "Giữ shift để thay đổi ngay lập tức khi nhấn một cái gì đó"
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "Giữ phím Shift để thay đổi ngay lập tức khi bạn nhấn một cái gì đó"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -190,8 +190,8 @@ msgid "About"
msgstr "Giới thiệu"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Bản quyền © 2002-2014 xem Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Bản quyền © 2002-2017 xem Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -199,7 +199,7 @@ msgstr "Chương trình này là phần mềm miễn phí và phát hành theo g
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "Được dịch bởi anhminhvks - Trần Anh Minh"
+msgstr "Được dịch bởi Trần Anh Minh - https://www.facebook.com/anhminhvks"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
@@ -295,7 +295,7 @@ msgstr "Chụp để cạnh máy tính để bàn"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
msgid "Store settings in .ini file"
-msgstr "Lưu thiết lập ra tệp .ini"
+msgstr "Lưu thiết lập vào tập tin .ini"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
@@ -422,12 +422,16 @@ msgid "time(s)"
msgstr "thời gian(s)"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "Kiểu lặp lại:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "Sau khi phát lại"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "Ngõ ra"
+msgid "Default zoom"
+msgstr "Thu phóng mặc định"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -473,10 +477,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "Tự động nạp tệp âm thanh"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "Sử dụng bộ dựng phụ đề có sẵn"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "Điều khiển"
@@ -570,8 +570,8 @@ msgid "Warning"
msgstr "Cảnh báo"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
-msgstr "Nếu bạn ghi đè lên và cho phép toàn màn hình chống răng cưa ở đâu đó ở các cài đặt của bo của bạn, phụ đề sẽ không xem xét bất kỳ tốt hơn, nhưng nó chắc chắn sẽ ăn CPU của bạn."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
+msgstr "Nếu bạn hủy bỏ và cho phép khử răng cưa toàn màn hình trong các thiết lập của cạc màn hình, phụ đề không những sẽ không được xem rõ hơn mà nó còn làm hao tốn CPU của bạn."
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
@@ -667,7 +667,7 @@ msgstr "Nhanh chóng tìm kiếm (trên khung hình)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
msgid "Show chapter marks in seek bar"
-msgstr "Dấu cho thấy chương trong seekbar"
+msgstr "Dấu cho thấy chương trong seek bar"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
@@ -677,17 +677,17 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "Ngăn ngừa trình phát nhạc khi trong toàn màn hình trên một màn hình mặc định "
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "Sử dụng tính năng Windows 7 Taskbar"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "Dùng tính năng thanh nhiệm vụ cao cấp"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
-msgstr "Mở tập tin trước / sau trong thư mục vào \"Bỏ qua trở lại / về phía trước\" khi chỉ có một mục trong danh sách nhạc"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgstr "Mở tập tin trước/sau trong thư mục theo hướng \"Lùi lại/Tiến tới\" khi chỉ có một mục trong danh sách phát nhạc"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
-msgstr "Sử dụng thời gian tooltip:"
+msgid "Show time tooltip:"
+msgstr "Hiển thị thời gian tooltip:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
msgid "OSD font:"
@@ -1126,8 +1126,8 @@ msgid "Audio Renderer"
msgstr "Tự động render"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "Thiết lập VMR-7/VMR-9 (Renderless) và EVR (CP)"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "Thiết lập VMR-9 (Renderless) và EVR (CP)"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1170,8 +1170,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "Phụ đề *"
+msgid "Subtitles"
+msgstr "Phụ để"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1179,15 +1179,19 @@ msgstr "Ảnh màn hình"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Shaders"
-msgstr "Trình đổ bóng"
+msgstr "Bộ đổ bóng"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Rotation"
msgstr "Quay"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* Bộ lọc bên ngoài (chẳng hạn như VSFilter) có thể hiển thị phụ đề trên tất cả các kết xuất đồ họa."
+msgid "Subtitle Renderer"
+msgstr "Bộ dựng phụ đề"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "Bộ nhớ đệm cho bộ đổ bóng biên dịch"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1205,6 +1209,10 @@ msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "Cho phép chỉ truy cập từ localhost"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "Kích hoạt xem trước"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "In thông tin gỡ rối"
@@ -1230,17 +1238,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "Xử lí CGI"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "Phụ đề có sẵn trực tuyến"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "Tải về && Mở "
+msgid "Download subtitles"
+msgstr "Tải phụ đề"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "Thay thế phụ đề hiện đang được nạp"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "Tải xuống"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "Làm mới"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "Hủy bỏ"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "Tùy chọn"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "Tải phụ đề lên "
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "Tải lên"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "Hủy bỏ"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "Tùy chọn"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "Lưu thành..."
@@ -1278,8 +1314,8 @@ msgid "Enable automatic update check"
msgstr "Kích hoạt kiểm tra nâng cấp"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "Sự chậm trễ giữa mỗi lần kiểm tra:"
+msgid "Check every:"
+msgstr "Kiểm tra mỗi:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1323,7 +1359,7 @@ msgstr "Băng thông"
msgctxt "IDD_TUNER_SCAN_IDC_STATIC"
msgid "Freq. End"
-msgstr "Tần số kết thúc "
+msgstr "Tần số kết thúc "
msgctxt "IDD_TUNER_SCAN_IDC_CHECK_IGNORE_ENCRYPTED"
msgid "Ignore encrypted channels"
@@ -1542,16 +1578,28 @@ msgid "Reset"
msgstr "Đặt lại"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "Dữ liệu trực tuyến"
+msgid "Online search, download and upload subtitles"
+msgstr "Tìm kiếm trực tuyến, tải phụ đề xuống hoặc lên"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "Tự động tìm và tải xuống nếu không tìm thấy phụ đề nào trên máy tính"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "Dùng phụ đề thay thế khi âm thanh nghe không rõ (chỉ khi nguồn cấp phụ đề đã được chỉ ra)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "Bỏ qua những tập tin có chứa bất kỳ từ ngữ sau:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "URL cơ sở của cơ sở dữ liệu phụ đề trực tuyến:"
+msgid "Languages in order of preference:"
+msgstr "Thứ tự ngôn ngữ được ưu tiên:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "Kiểm thử"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "Tự động tải lên các phụ đề phù hợp sau khi phát lại đoạn phim"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1571,11 +1619,11 @@ msgstr "&Bỏ qua cập nhật này"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr "Bộ đổ bóng có hiệu ứng đặc biệt mà có thể được thêm vào quá trình dựng hình video."
+msgstr "Bộ đổ bóng có các hiệu ứng đặc biệt mà có thể được thêm vào trong quá trình dựng hình."
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
-msgstr "Thêm tập tin đổ bóng"
+msgstr "Thêm tập tin bộ đổ bóng"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
msgid "Remove"
@@ -1591,7 +1639,7 @@ msgstr "Thêm vào sau thay đổi kích cỡ"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
-msgstr "Cài đặt trước bộ đổ bóng"
+msgstr "Cài đặt bộ đổ bóng có sẵn"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
msgid "Load"
@@ -1607,11 +1655,11 @@ msgstr "Xóa"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active pre-resize shaders"
-msgstr "Hoạt động bóng đổ trước thay đổi kích cỡ"
+msgstr "Hoạt động bóng đổ trước khi thay đổi kích cỡ"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active post-resize shaders"
-msgstr "Hoạt động đổ bóng hậu thay đổi kích cỡ"
+msgstr "Hoạt động đổ bóng sau khi thay đổi kích cỡ"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
@@ -1653,6 +1701,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "Mặc định"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "Thiết bị"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "Kiểu chuyên dụng"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "Cho phép kết nối liên tục"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "Tùy chọn"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "Kích hoạt âm thanh nổi (dành cho tai nghe)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy. Được dịch bởi Trần Anh Minh - anhminhvks"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier. Được dịch bởi Trần Anh Minh - anhminhvks"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "Cắt bớt:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "Mức độ:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "Ghi chú"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "Để giảm thiểu hiện tượng méo âm, đề nghị chỉnh âm lượng ở mức 85% khi phát lại nội dung được mã hóa theo kiểu mất dữ liệu."
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "Chất lượng JPEG"
@@ -1665,3 +1757,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "Đồng ý"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "Báo cáo lỗi"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "Xin lỗi bạn, MPC-HC vừa bị lỗi dừng chương trình. :("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "Gửi báo cáo lỗi để giúp chúng tôi phân tích và sửa chữa."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "Thông tin tùy chọn"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "Thư điện tử:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "Địa chỉ thư điện tử của bạn là một tùy chọn và sẽ chỉ được sử dụng nếu các nhà phát triển cần phải liên lạc với bạn để biết thêm thông tin chi tiết."
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "Diễn tả vấn đề gặp phải (chỉ dùng tiếng Anh):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "Khởi động lại MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "Thoát MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.vi.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.vi.menus.po
index 039ec6ef0..20f915343 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.vi.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.vi.menus.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Dat Luong Anh <datanhlg@gmail.com>, 2014
-# TRẦN ANH MINH <anhminhvks@yahoo.com>, 2014
+# DatSoft, 2014
+# TRẦN ANH MINH <anhminhvks@yahoo.com>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-27 12:31+0000\n"
-"Last-Translator: Dat Luong Anh <datanhlg@gmail.com>\n"
-"Language-Team: Vietnamese (http://www.transifex.com/projects/p/mpc-hc/language/vi/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-02-26 16:54+0000\n"
+"Last-Translator: TRẦN ANH MINH <anhminhvks@yahoo.com>\n"
+"Language-Team: Vietnamese (http://www.transifex.com/mpc-hc/mpc-hc/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -65,29 +65,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "&Lưu hình ảnh thu nhỏ"
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
-msgstr "&Nạp phụ đề"
-
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
-msgstr "&Lưu phụ đề"
-
msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "&Dữ liệu phụ đề"
+msgid "S&ubtitles"
+msgstr "&Phụ đề"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
+msgstr "&Nạp phụ đề..."
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "&Tìm kiếm"
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
+msgstr "&Lưu phụ đề..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "&Tải lên"
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "&Tải phụ đề xuống..."
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "&Tải xuống"
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "&Tải phụ đề lên..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -197,13 +193,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "&Kiểm tra nhiễu"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "&Hiện thông số"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "&Hiển thị thống kê"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "&Thời gian còn lại"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "&Hiển thị thời gian hiện tại"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "&Hiển thị tên tập tin"
msgctxt "POPUP"
msgid "&Output Range"
@@ -405,17 +405,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "&Căng đầy cửa sổ đến lề ngoài"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "&Giữ tỷ lệ hiển thị"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "&Không giữ tỷ lệ hiển thị"
+msgid "&Aspect Ratio"
+msgstr "&Tỉ lệ khung hình"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "&Mặc định"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "&Mặc định (DAR)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -437,6 +433,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "&185:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "&Giả định điểm ảnh vuông (SAR)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "&Hiệu chỉnh tỷ lệ hiển thị"
@@ -530,9 +530,25 @@ msgid "&Stop"
msgstr "&Ngừng"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "&Xem từng khung hình"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "&Lặp lại"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "&Mãi mãi"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "&Tập tin"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "&Danh sách phát"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
msgstr "&Giảm tốc độ"
@@ -554,16 +570,16 @@ msgid "S&haders"
msgstr "&Bộ đổ bóng"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "&Âm thanh"
+msgid "&Audio Track"
+msgstr "&Rãnh âm thanh"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "&Phụ đề"
+msgid "Su&btitle Track"
+msgstr "&Rãnh phụ đề"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "&Hình ảnh"
+msgid "Vide&o Track"
+msgstr "&Rãnh hình ảnh"
msgctxt "POPUP"
msgid "&Volume"
@@ -585,7 +601,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "&Sau khi phát"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "&Không làm gì cả"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "&Phát tập tin kế tiếp trong thư mục"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "Tắt &màn hình"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "&Thoát"
@@ -609,10 +637,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "&Khoá máy"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "Tắt &màn hình"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "&Điều hướng"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.vi.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.vi.strings.po
index 8aa55fa54..c635c4154 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.vi.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.vi.strings.po
@@ -1,16 +1,16 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# Dat Luong Anh <datanhlg@gmail.com>, 2014
-# TRẦN ANH MINH <anhminhvks@yahoo.com>, 2014
+# DatSoft, 2014
+# TRẦN ANH MINH <anhminhvks@yahoo.com>, 2014-2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-10-03 17:40+0000\n"
-"Last-Translator: Dat Luong Anh <datanhlg@gmail.com>\n"
-"Language-Team: Vietnamese (http://www.transifex.com/projects/p/mpc-hc/language/vi/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-21 09:06+0000\n"
+"Last-Translator: TRẦN ANH MINH <anhminhvks@yahoo.com>\n"
+"Language-Team: Vietnamese (http://www.transifex.com/mpc-hc/mpc-hc/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -19,7 +19,7 @@ msgstr ""
msgctxt "IDS_INFOBAR_LOCATION"
msgid "Location"
-msgstr "Vị trí"
+msgstr "Vị trí lưu"
msgctxt "IDS_INFOBAR_VIDEO"
msgid "Video"
@@ -61,10 +61,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "Thuộc tính"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "Tập tin"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "&Phong cách mặc định"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "Danh sách phát"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "Tệp"
@@ -117,6 +125,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "Nếu loại dựng phụ đề không được xác định, thì phụ đề SSA/ASS sẽ được dựng lại tương đối so với khung hình trong khi tất cả các phụ đề văn bản sẽ được dựng lại tương đối so với cửa sổ."
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "Chế độ lặp lại: Danh sách phát"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "Chế độ lặp lại: Tập tin"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "Lặp lại mãi: Mở"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "Lặp lại mãi: Tắt"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "Lặp lại mãi"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "Không bao giờ (cách tiếp cận nhanh nhất)"
@@ -326,12 +354,12 @@ msgid "On/Off"
msgstr "Bật/Tắt"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "Từ fps"
+msgid "From (FPS)"
+msgstr "Từ (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "Đến fps"
+msgid "To (FPS)"
+msgstr "Đến (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -465,6 +493,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "Phát lại::Trình đổ bóng"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "Nguồn"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "Thông tin khác"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "Thông tin media"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "Phát lại::Bắt hình"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "Phát lại::Thiết lập đồng bộ render"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "Phát lại::Toàn màn hình"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "Bộ lọc trong::Bộ dựng âm thanh"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "Trình chuyển âm thanh"
@@ -489,18 +545,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "Bộ phủ hòa âm render"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "Video Mixing Renderer 7 (cửa sổ)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "Video Mixing Renderer 9 (cửa sổ)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "Video Mixing Renderer 7 (render ít hơn)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "Video Mixing Renderer 9 (render ít hơn)"
@@ -553,34 +601,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "Trình phát::Giao diện Web"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "Phụ đề::Cơ sở dữ liệu"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "Nguồn"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "Thông tin khác"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "Thông tin media"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "Phát lại::Bắt hình"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "Phát lại::Thiết lập đồng bộ render"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "Phát lại::Toàn màn hình"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "Chi tiết"
@@ -591,27 +611,19 @@ msgstr "Clip"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
-msgstr "Mặc định đoạn bộ lọc video render DirectShow. Những người khác sẽ trở lại một khi họ không thể được nạp cho một số lý do. Trên Windown XP điều này cũng giống như VMR-7 (cửa sổ)."
+msgstr "Bộ lọc dựng hình mặc định cho DirectShow. Bộ lọc này sẽ được sử dụng khi các bộ lọc khác không thể nạp vì lý do nào đó. Trên Windown XP, điều này cũng giống như VMR-7 (ở chế độ cửa sổ)."
msgctxt "IDC_DSOLD"
msgid "This is the default renderer of Windows 9x/me/2k. Depending on the visibility of the video window and your video card's abilities, it will switch between GDI, DirectDraw, Overlay rendering modes dynamically."
-msgstr "Đây là dựng hình mặc định của Windows 9x/me/2k. Tùy thuộc vào khả năng hiển thị của cửa sổ video và khả năng video card của bạn, nó sẽ chuyển đổi giữa GDI, DirectDraw, Overlay dựng chế độ tự động."
+msgstr "Đây là bộ dựng hình mặc định của Windows 9x/me/2k. Tùy thuộc vào khả năng hiển thị của cửa sổ hình ảnh và khả năng của cạc màn hình, nó sẽ chuyển đổi tự động giữa các chế độ dựng hình GDI, DirectDraw, Overlay."
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "Luôn luôn ám trong lớp phủ. Thường chỉ định dạng YUV được cho phép, nhưng họ được trình bày trực tiếp mà không cần bất kỳ chuyển đổi màu RGB. Đây là phương pháp dựng hình nhanh nhất của tất cả và duy nhất mà bạn có thể chắc chắn về video toàn màn hình phản chiếu để kích hoạt ngõ ra tv."
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Trình dựng hình mặc định của Windows XP. Rất ổn định và chỉ một chút chậm hơn so với bộ trộn Overlay. Sử dụng DirectDraw và chạy trong Overlay khi nó có thể."
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "Chỉ có nếu bạn có cài đặt DirectX 9. Có khả năng tương tự như VMR-7 (cửa sổ), nhưng nó sẽ không bao giờ sử dụng dựng hình Overlay và vì điều này có thể là một chút chậm hơn so với VMR-7 (cửa sổ)."
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "Giống như VMR-7 (cửa sổ), nhưng với các plugin cấp phát của MPC-HC cho phụ đề. Lớp phủ phản chiếu phim sẽ không làm việc. \"True Color\" không gian màu máy tính để bàn được khuyến khích."
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "Chỉ có giá trị nếu bạn đã cài đặt DirectX 9. Rất ổn định nhưng nó sẽ không bao giờ sử dụng bộ dựng hình Overlay và điều này có thể gây ra việc xử lý chậm hơn so với bộ trộn Overlay."
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -622,8 +634,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "Giống như VMR-9 (renderless), nhưng sử dụng một sự thật hai vượt qua bicubic thay đổi kích cỡ."
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "Kết nối với bất kỳ loại phương tiện truyền thông như video và sẽ gửi mẫu đến tới đâu cả. Sử dụng nó khi bạn không cần màn hình hiển thị video và muốn tiết kiệm CPU làm việc không cần thiết."
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "Kết nối với bất kỳ loại phương tiện truyền thông nào và sẽ không gửi mẫu hình ảnh đi đâu cả. Sử dụng điều này khi bạn không cần hiển thị hình ảnh video và muốn tiết kiệm CPU từ những việc không cần thiết."
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -649,10 +661,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Dựng hình của Real. Kịch bản SMIL sẽ làm việc, nhưng không có khả năng tương tác. Sử dụng DirectDraw và chạy trong Overlay khi nó có thể."
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Đầu ra công cụ của Real đưa ra bởi các DX7 dựa trên cấp phát của VMR-7 (ít render hơn)."
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Đầu ra công cụ của Real đưa ra bởi các DX9 dựa trên cấp phát của VMR-9 (ít render hơn)."
@@ -661,10 +669,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "Dựng hình của QuickTime. Được một chút chậm khi khu vực video của nó được thay đổi kích cỡ hoặc phủ một phần bởi một cửa sổ khác. Lớp phủ khi không có nó thích rơi trở lại GDI."
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Đầu ra công cụ của QuickTime kết xuất của DX7 dựa trên cấp phát của VMR-7 (ít render hơn)."
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Đầu ra công cụ của QuickTime kết xuất của DX9 dựa trên cấp phát của VMR-9 (ít render hơn)."
@@ -673,22 +677,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "Bề mặt video sẽ được phân bổ như một bề mặt ngoài đời thường."
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "Trình render âm thanh MPC bị hỏng, không sử dụng."
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "Đồng bộ kết xuất"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - Báo cáo lỗi"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC đã hỏng nhưng xây dựng này đã được biên soạn không có thông tin gỡ lỗi.\nNếu bạn muốn báo cáo lỗi này, trước tiên bạn nên thử một bản dựng tốt.\nBạn có muốn truy cập vào trang tải bây giờ?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "Offscreen thường xuyên bề mặt phẳng"
@@ -741,9 +733,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "Null (không nén)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "Trình render âm thanh MPC-HC"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "Bộ dựng âm thanh bên trong"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -755,11 +747,15 @@ msgstr "Loại MIME"
msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
-msgstr "Để xem một nguồn tài nguyên nhúng trong trình duyệt của bạn, bạn phải kích hoạt giao diện web.\nSử dụng \"Lưu dạng nút nếu bạn chỉ muốn để lưu thông tin."
+msgstr "Để xem một nguồn tài nguyên nhúng trong trình duyệt của bạn, bạn phải kích hoạt giao diện web.\n\nSử dụng \"Lưu dạng nút nếu bạn chỉ muốn để lưu thông tin."
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "Tải phụ đề"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "Tải phụ đề xuống..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "Tải phụ đề lên..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -790,8 +786,8 @@ msgid "Couldn't find all archive volumes"
msgstr "Không thể tìm thấy tất cả các khối lưu trữ"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
-msgstr "Bề mặt video sẽ được phân bổ như một kết cấu nhưng vẫn còn các chức năng 2d sẽ được sử dụng để sao chép và kéo nó vào backbuffer. Đòi hỏi một card video mà có thể phân bổ 32bit, RGBA, không quyền lực-của-hai kết cấu có kích thước và ít nhất ở độ phân giải của video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgstr "Bề mặt video sẽ được phân bổ như một kết cấu nhưng các chức năng 2D vẫn sẽ được sử dụng để sao chép và kéo nó vào bộ đệm nền. Yêu cầu card màn hình có thể phân bổ kết cấu cỡ 32bit, RGBA, \"non-power-of-two\" và có độ phân giải tối thiểu bằng độ phân giải của video."
msgctxt "IDC_TEXTURESURF3D"
msgid "Video surface will be allocated as a texture and drawn as two triangles in 3d. Antialiasing turned on at the display settings may have a bad effect on the rendering speed."
@@ -803,7 +799,7 @@ msgstr "Nếu không có hỗ trợ Pixel Shader 2.0, Bilinear đơn giản đư
msgctxt "IDC_DSVMR9LOADMIXER"
msgid "Puts VMR-9 (renderless) into mixer mode, this means most of the controls on its property page will work and it will use a separate worker thread to renderer frames."
-msgstr "Đặt VMR-9 (ít render hơn) vào chế độ trộn, điều này có nghĩa là hầu hết các điều khiển trên trang thuộc tính của nó sẽ làm việc và nó sẽ sử dụng một sợi nhân viên riêng biệt để dựng hình khung."
+msgstr "Đặt VMR-9 (dựng hình kém hơn) vào chế độ trộn, điều này có nghĩa là hầu hết việc điều khiển trên trang riêng của nó sẽ sử dụng các luồng riêng biệt để dựng các khung hình."
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
@@ -817,9 +813,21 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "Giảm rách bằng cách bỏ qua mặc định VSync được xây dựng vào D3D."
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "Quét"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "Phụ đề không được nạp hoặc bộ dựng không được hỗ trợ."
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "Lưu trữ bộ đổ bóng biên dịch vào AppData để tăng tốc nạp."
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
-msgstr "Mở VTS_xx_0.ifo để tải các tập tin VTS_xx_x.vob trong một mảnh"
+msgstr "Mở VTS_xx_0.ifo để nạp toàn bộ các tập tin VTS_xx_x.vob"
msgctxt "IDS_SRC_RFS"
msgid "Based on RARFileSource, doesn't support compressed files"
@@ -831,7 +839,7 @@ msgstr "Sử dụng bộ lọc LAV"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr "Sử dụng bộ lọc LAV. Tắt theo mặc định từ các bộ lọc Microsoft thường ổn định hơn cho những định dạng.\nNếu bạn chọn để sử dụng các bộ lọc nội bộ, cho phép họ cho cả nguồn và giải mã để có một kinh nghiệm phát lại tốt hơn."
+msgstr "Sử dụng bộ lọc LAV. Được tắt bởi mặc định, vì các bộ lọc Microsoft thường ổn định hơn cho các định dạng đó.\nNếu bạn chọn sử dụng các bộ lọc nội bộ, kích hoạt chúng cho cả nguồn và việc giải mã thì sẽ có một trải nghiệm phát lại tốt hơn."
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
@@ -889,9 +897,9 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "Im"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
-msgstr "Bỏ im"
+msgstr "Mở tiếng"
msgctxt "ID_VOLUME_MUTE_DISABLED"
msgid "No audio"
@@ -954,12 +962,12 @@ msgid "&Organize Favorites..."
msgstr "Tổ &chức ưa thích"
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "Xáo trộn"
+msgid "Sh&uffle"
+msgstr "&Xáo trộn"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "Mở vị trí tệp"
+msgid "Ope&n file location"
+msgstr "&Mở vị trí tập tin"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -1042,8 +1050,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "Phóng cho màn hình rộng,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "Ẩn toàn màn hình"
+msgid "&Hide on Fullscreen"
+msgstr "&Ẩn trên toàn màn hình"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1179,7 +1187,7 @@ msgstr "Trình đổ bóng được biên dịch lại tự động khi các t
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
-msgstr "Không thể tải %s, trình đổ bóng pixel sẽ không làm việc."
+msgstr "Không thể nạp %s, bộ đổ bóng pixel sẽ không làm việc."
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
@@ -1230,8 +1238,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "Thêm thư mục chứa"
+msgid "Add containing &folder"
+msgstr "&Thêm thư mục chứa"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1243,7 +1251,7 @@ msgstr "Phần mềm giải mã"
msgctxt "IDS_STATSBAR_PLAYBACK_RATE"
msgid "Playback rate"
-msgstr "&Tốc độ phát"
+msgstr "&Tốc độ phát lại"
msgctxt "IDS_FILTERS_COPY_TO_CLIPBOARD"
msgid "&Copy filters list to clipboard"
@@ -1267,7 +1275,7 @@ msgstr "Chủ đề Giáo dục/Khoa học/Thực tế"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
-msgstr "Ẩn các điều chỉnh và cửa sổ trong chế độ cửa sổ."
+msgstr "Ẩn các bảng điều khiển trong chế độ cửa sổ."
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
@@ -1327,7 +1335,7 @@ msgstr "Chất lượng (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
-msgstr "Kích thước tối đa (NxNpx) của một bìa album được tải trong chế độ âm thanh."
+msgstr "Kích thước tối đa (NxNpx) của một bìa album được nạp trong chế độ chỉ âm thanh."
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
@@ -1337,6 +1345,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<không xác định>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "Xem"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "Lên trên"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "Xuống dưới"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "Sắp xếp theo LCN"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "Xóa tất cả"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "Bạn có chắc muốn xóa tất cả các kênh trong danh sách?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "Không có thông tin"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "Vui lòng đợi, đang tiến hành phân tích..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "AR %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "Cho phép đăng nhập vào tập tin (yêu cầu khởi động lại)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "Thời gian còn lại"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "Độ chính xác cao"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "Sau khi phát xong: Tua lại tập tin hiện tại"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "Sau khi phát xong: Đóng"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC gặp vấn đề trong quá trình khởi động. Với sự giúp đỡ của bạn, chúng tôi có thể sửa lỗi.\n\nBạn có muốn báo cáo lỗi này?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "Nhập giá trị dương nếu âm thanh phát sớm, giá trị âm nếu âm thanh phát trễ."
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "Xem trước đã bị vô hiệu hóa. Bạn có thể kích hoạt lại trong phần Tùy chọn của MPC-HC."
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "Tùy chọn này có thể được sử dụng để xem trước tập tin đa phương tiện từ vị trí lưu từ xa. Chỉ sử dụng tùy chọn này trên một kết nối mạng riêng tư đảm bảo an toàn và chắc chắn.\n\nBạn có thật sự muốn kích hoạt tùy chọn này?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "Bộ dựng phụ đề bên trong"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "Mở thiết bị"
@@ -1357,13 +1441,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "Hình đã được lưu thành công"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "Nạp phụ đề"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "Nạp phụ đề..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "Lưu phụ đề"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "Lưu phụ đề..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1386,12 +1470,12 @@ msgid "Stop"
msgstr "Ngừng"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
-msgstr "Khung"
+msgid "Frame-step"
+msgstr "Khung hình kế tiếp"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
-msgstr "Khung hình trở"
+msgid "Frame-step back"
+msgstr "Khung hình trước"
msgctxt "IDS_AG_GO_TO"
msgid "Go To"
@@ -1447,7 +1531,7 @@ msgstr "Khung hình gần nhất"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
-msgstr "MPC-HC gặp một vấn đề trong quá trình khởi tạo. Phát lại DVD có thể không hoạt động chính xác. Điều này có thể được gây ra bởi một số không tương thích với các công cụ bảo mật nhất định.\nBạn có muốn báo cáo vấn đề này?"
+msgstr "MPC-HC gặp một vấn đề trong quá trình khởi tạo. Phát lại DVD có thể không hoạt động chính xác. Điều này có thể được gây ra bởi một số vấn đề không tương thích với các công cụ bảo mật nhất định.\n\nBạn có muốn báo cáo vấn đề này?"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
@@ -1490,8 +1574,8 @@ msgid "Thumbnails saved successfully"
msgstr "Hình thu nhỏ đã được lưu"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "Luồng video"
+msgid "Vide&o Track"
+msgstr "&Rãnh hình ảnh"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1538,12 +1622,12 @@ msgid "Reset Rate"
msgstr "Đặt lại đánh giá"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
-msgstr "Độ trễ âm +10 giây"
+msgid "Audio Delay +10 ms"
+msgstr "Âm thanh trễ +10 giây"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
-msgstr "Độ trễ âm -10 giây"
+msgid "Audio Delay -10 ms"
+msgstr "Âm thanh trễ -10 giây"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
@@ -1613,14 +1697,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "Phụ đề phải"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "Hiển thị thống kê số liệu"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "Nhảy đến bắt đầu"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "MHHT: Hiển thị tên tập tin"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "Phát DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "Phát BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "MHHT: Hiển thị thống kê bộ dựng hình"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "MHHT: Thiết lập lại thống kê bộ dựng hình"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "Phụ đề::Linh tinh"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "Ẩn &viền"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "Chỉ khung hình"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "H&iện Nhãn&&Menu"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "Ẩn &menu"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "Nâng cao"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "Xem tối thiểu"
@@ -1686,8 +1810,8 @@ msgid "PnS Dec Height"
msgstr "Độ rộng PnS Dec"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "Tải phụ đề(s), xin vui lòng chờ đợi."
+msgid "Downloading [%s] \"%s\""
+msgstr "Đang tải xuống [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1698,12 +1822,12 @@ msgid "No subtitles found."
msgstr "Không tìm thấy phụ đề."
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "%d phụ đề(s) có sẵn."
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "Bạn có muốn kiểm tra định kỳ cho cập nhật MPC-HC?\nTính năng này có thể bị vô hiệu hóa sau từ trang tùy chọn khác."
+msgstr "Bạn có muốn kiểm tra định kỳ cho cập nhật MPC-HC?\n\nTính năng này có thể bị vô hiệu hóa sau từ trang tùy chọn khác."
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1854,12 +1978,12 @@ msgid "Boss key"
msgstr "Phím boss"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "Menu trình phát (ngắn)"
+msgid "Player Menu"
+msgstr "Trình đơn của Trình phát nhạc"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "Menu trình phát (dài)"
+msgid "Player Menu (full)"
+msgstr "Trình đơn của Trình phát nhạc (đầy đủ)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1870,20 +1994,20 @@ msgid "Options"
msgstr "Tùy chọn"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "Âm kế"
+msgid "Next Audio Track"
+msgstr "Rãnh âm thanh kế tiếp"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "Âm trước"
+msgid "Prev Audio Track"
+msgstr "Rãnh âm thanh trước đó"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "Phụ đề kế"
+msgid "Next Subtitle Track"
+msgstr "Rãnh phụ đề kế tiếp"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "Phụ đề trước"
+msgid "Prev Subtitle Track"
+msgstr "Rãnh phụ đề trước đó"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1893,22 +2017,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "Nạp lại phụ đề"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "Âm kế (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "Âm trước (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "Phụ đề kế (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "Phụ đề trước (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "Góc kế (DVD)"
@@ -1918,28 +2026,28 @@ msgid "Prev Angle (DVD)"
msgstr "Góc trước (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "Âm kế (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "Rãnh âm thanh kế tiếp (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "Âm trước (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "Rãnh âm thanh trước đó (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "Phụ đề kế (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "Rãnh phụ đề kế tiếp (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "Phụ đề trước (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "Rãnh phụ đề trước đó (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "Bật/Tắt phụ đề (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "Thời gian còn lại"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "MHHT: Hiển thị thời gian hiện tại"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1965,11 +2073,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "Đã mã hóa"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "Có"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "Không"
@@ -2026,12 +2134,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "Âm lượng: %02lu/%02lu, Tiêu đề: %02lu/%02lu, Chương: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
-msgstr "Góc: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
+msgstr "Góc: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbit %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bit %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2047,7 +2155,7 @@ msgstr "MPC-HC không có đủ quyền để thay đổi hỗ trợ định d
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
-msgstr "MPC-HC là một phương tiện truyền thông máy nghe nhạc mở nguồn cho Windows. Nó hỗ trợ tất cả các video phổ biến và các định dạng tập tin âm thanh có sẵn để phát lại. Phần mềm này 100% phần mềm miễn phí, không có quảng cáo hoặc các thanh công cụ."
+msgstr "MPC-HC là một trình phát phương tiện truyền thông mã nguồn mở, cực kỳ nhỏ gọn dành cho Windows. Nó hỗ trợ phát lại tất cả các định dạng tập tin âm thanh và phim ảnh phổ biến. Phần mềm này 100% không chứa phần mềm gián điệp, không có quảng cáo hoặc các thanh công cụ đính kèm."
msgctxt "IDS_MAINFRM_12"
msgid "channel"
@@ -2095,7 +2203,7 @@ msgstr "DVD: Không tương thích đĩa và bộ giải mã vùng"
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "Tùy chọn này được thiết kế để tránh bị nhiễu. Tuy nhiên, nó cũng sẽ ngăn chặn MPC-HC hiển thị menu ngữ cảnh và bất kỳ hộp thoại trong khi phát.\n\nBạn có thực sự muốn kích hoạt tùy chọn này?"
+msgstr "Tùy chọn này được thiết kế để tránh làm phiền. Tuy nhiên, nó cũng sẽ ngăn chặn MPC-HC trong việc hiển thị trình đơn ngữ cảnh và các hộp thoại trong khi phát lại.\n\nBạn có thực sự muốn kích hoạt tùy chọn này?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
@@ -2121,14 +2229,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "Bề rộng hình ảnh"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL sẽ xuất hiện là đúng!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "Phiên bản giao thức không phù hợp, hãy nâng cấp máy nghe nhạc của bạn hoặc chọn một địa chỉ khác nhau!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Tỉ lệ khung hình"
@@ -2138,20 +2238,20 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", Tổng cộng: %ld, Bỏ sót: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
-msgstr ", Kích thước: %I64dKB"
+msgid ", Size: %I64d KB"
+msgstr ", Kích cỡ: %I64d KB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
-msgstr ", Kích thước: %I64dKB"
+msgid ", Size: %I64d MB"
+msgstr ", Kích cỡ: %I64d MB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
-msgstr ", Trống: %I64dKB"
+msgid ", Free: %I64d KB"
+msgstr ", Trống: %I64d KB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
-msgstr ", Trống: %I64dMB"
+msgid ", Free: %I64d MB"
+msgstr ", Trống: %I64d MB"
msgctxt "IDS_MAINFRM_42"
msgid ", Free V/A Buffers: %03d/%03d"
@@ -2175,7 +2275,7 @@ msgstr "Chọn đường dẫn cho DVD/BD:"
msgctxt "IDS_SUB_LOADED_SUCCESS"
msgid " loaded successfully"
-msgstr "đã nạp thành công"
+msgstr " đã nạp thành công"
msgctxt "IDS_ALL_FILES_FILTER"
msgid "All files (*.*)|*.*||"
@@ -2222,8 +2322,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "Các hình ảnh thu nhỏ sẽ quá nhỏ, không thể tạo tập tin.\n\nHãy giảm số lượng các hình ảnh thu nhỏ hoặc tăng tổng kích thước."
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "Để nạp phụ đề bạn phải thay đổi loại bộ dựng hình và mở lại tập tin.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR hoặc Haali\n- RealMedia: Bộ dựng hình dành riêng cho RealMedia, hoặc mở nó bằng DirectShow\n- QuickTime: Bộ dựng hình DX7 hoặc DX9 cho QuickTime\n- ShockWave: Không có sẵn"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "Để nạp phụ đề bạn phải thay đổi loại bộ dựng hình và mở lại tập tin.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR hoặc Haali\n- RealMedia: Bộ dựng hình dành riêng cho RealMedia, hoặc mở nó bằng DirectShow\n- QuickTime: Bộ dựng hình DX7 hoặc DX9 cho QuickTime\n- ShockWave: Không có sẵn"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2234,12 +2334,12 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "Tỷ lệ khung hình: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "Tỉ lệ khung hình: Mặc định"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "Tỉ lệ khung hình: Mặc định (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
-msgstr "Độ trễ âm: %I64dgiây"
+msgid "Audio delay: %I64d ms"
+msgstr "Âm thanh trễ: %I64d ms"
msgctxt "IDS_AG_CHAPTER"
msgid "Chapter %d"
@@ -2250,8 +2350,8 @@ msgid "Out of memory"
msgstr "Đầy bộ nhớ"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "Lỗi: Flash player cho trình duyệt IE là cần thiết"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "Lỗi: Adobe Flash Player cho trình duyệt Internet Explorer được yêu cầu"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2273,10 +2373,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "Thất bại trong việc dựng các tập tin"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "URL xấu, không thể xác định vị trí cơ sở dữ liệu phụ đề đó!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "Chương:"
@@ -2297,14 +2393,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "Hiện tại"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC chấm dứt đột ngột. Để giúp chúng tôi khắc phục vấn đề này, xin vui lòng gửi tập tin này \"%s\" về theo dõi lỗi của chúng tôi.\nBạn có muốn mở thư mục chứa các tập tin minidump và truy cập vào theo dõi lỗi bây giờ?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "Lỗi khi tạo tập tin kết xuất vào \"%s\" (lỗi %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "Chọn vị trí"
@@ -2322,8 +2410,8 @@ msgid "Toggle Caption&Menu"
msgstr "Chuyển Nhãn&Menu"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
-msgstr "Chuyển đổi thanh dò"
+msgid "Toggle Seek Bar"
+msgstr "Chuyển đổi thanh tìm kiếm"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
msgid "Toggle Controls"
@@ -2339,7 +2427,7 @@ msgstr "Không thể kết nối các bộ lọc"
msgctxt "IDS_MAINFRM_87"
msgid "Cannot load any source filter"
-msgstr "Không thể tải bất kỳ bộ lọc nguồn"
+msgstr "Không thể nạp bất kỳ bộ lọc nguồn"
msgctxt "IDS_MAINFRM_88"
msgid "Cannot render the file"
@@ -2407,7 +2495,7 @@ msgstr "&Thuộc tính"
msgctxt "IDS_MAINFRM_117"
msgid " (pin) properties..."
-msgstr "thuộc tính (pin)..."
+msgstr " thuộc tính (pin)..."
msgctxt "IDS_AG_UNKNOWN_STREAM"
msgid "Unknown Stream"
@@ -2423,11 +2511,11 @@ msgstr "VSync"
msgctxt "IDS_MAINFRM_121"
msgid " (Director Comments 1)"
-msgstr "(Giám đốc bình luận 1)"
+msgstr " (Giám đốc bình luận 1)"
msgctxt "IDS_MAINFRM_122"
msgid " (Director Comments 2)"
-msgstr "(Giám đốc bình luận 2)"
+msgstr " (Giám đốc bình luận 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
@@ -2478,8 +2566,8 @@ msgid "Volume boost Max"
msgstr "Khối lượng âm lớn nhất"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "Cách sử dụng: mpc-hc.exe \"pathname\" [chuyển]\n\n\"pathname\"\tCác tập tin hoặc thư mục chính được nạp (ký tự đại diện\n\t\tcho phép, \"-\" biểu thị đầu vào tiêu chuẩn)\n/dub \"dubname\"\tNạp một tập tin âm thanh khác\n/dubdelay \"file\"\tNạp một tập tin âm thanh thêm dịch chuyển XXms (nếu\n\t\ttệp chứa \"...Độ trễ XX giây...\")\n/d3dfs\t\tBắt đầu dựng hình trong chế độ toàn màn hình D3D\n/sub \"subname\"\tNạp một file phụ đề thêm\n/filter \"filtername\"\tBộ lọc DirectShow tải từ một liên thư viện\n\t\tkết động(ký tự đại diện)\n/dvd\t\tChạy chế độ dvd, \"pathname\" nghĩa là thư mục\n\t\tDVD(tùy chọn)\n/dvdpos T#C\tBắt đầu phát lại tại tiêu đề T, chương C\n/dvdpos T#hh:mm\tPhát lại tại tiêu đề T, vị trí gg:pp:gg\n/cd\t\tTải tất cả các bài hát của một đĩa CD âm thanh hoặc (s) VCD,\n\t\t\"pathname\" nghĩa là đường dẫn cd(tùy chọn)\n/device\t\tMở thiết bị video mặc định\n/open\t\tMở tập tin, không tự động bắt đầu phát lại\n/play\t\tBắt đầu chơi các tập tin ngay sau trình phát nhạc\n\t\tđã chạy\n/close\t\tĐóng trình phát nhạc sau khi phát lại (chỉ hoạt động khi\n\t\tdùng với /phát)\n/shutdown\tTắt máy tính, hệ điều hành sau khi phát lại\n/fullscreen\tBắt đầu trong chế độ toàn màn hình\n/minimized\tBắt đầu trong chế độ giảm thiểu\n/new\t\tSử dụng một trường hợp mới của trình phát nhạc\n/add\t\tThêm\"pathname\" vào danh sách phát, sẽ kết hợp\n\t\tvới/mở và/phát\n/regvid\t\tTạo ra các phần mở rộng cho các tập tin video\n/regaud\t\tTạo ra các phần mở rộng cho các tập tin âm thanh\n/regpl\t\tTạo ra các phần mở rộng cho các tập tin danh sách phát\n/regall\t\tTạo ra các phần mở rộng cho các tất cả các tập tin \n/unregall\t\tLoại bỏ phần mở rộng\n/start ms\t\tBắt đầu phát lúc \"mlg\" (= mili giây)\n/startpos hh:mm:ss\tPhát tại vị trí gg:pp:gg\n/fixedsize w,h\tThiết lập một kích thước cửa sổ cố định\n/monitor N\tBắt đầu chơi trên màn hình N, trong đó N bắt đầu từ 1\n/audiorenderer N\tBắt đầu sử dụng trình âm N, trong đó N bắt đầu từ 1\n\t\t(xem thiết lập\"Ngõ ra\")\n/shaderpreset \"Pr\"\tBắt đầu sử dụng \"Pr\" tạo bóng đặt trước\n/reset\t\tKhôi phục cài đặt mặc định\n/help /h /?\tHiện giúp đỡ về chuyển dòng lệnh\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "Cách sử dụng: \"đường dẫn\" mpc-hc.exe [chuyển đổi]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2565,14 +2653,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "&Kích hoạt bộ lọc"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "Quét"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "Phụ đề không được nạp hoặc render không được hỗ trợ."
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "Tác giả không rõ. Liên hệ với chúng tôi nếu bạn làm logo này!"
@@ -2661,41 +2741,13 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "Đỉnh trước phải"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "Thiết lập lại hiển thị thống kê số liệu"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "Phụ đề::Linh tinh"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "Ẩn &viền"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "Chỉ khung"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "H&iện Nhãn&&Menu"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "Ẩn &menu"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "Nâng cao"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
-msgstr "Trên thanh dò nhanh"
+msgid "Above seek bar"
+msgstr "Phía trên thanh tìm kiếm"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
-msgstr "Dưới thanh dò nhanh"
+msgid "Below seek bar"
+msgstr "Phía dưới thanh tìm kiếm"
msgctxt "IDS_VIDEO_STREAM"
msgid "Video: %s"
@@ -2862,8 +2914,8 @@ msgid "Other Audio"
msgstr "Âm thanh khác"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2873,6 +2925,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Âm Windows Media"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Bộ âm Opus"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2937,22 +3009,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "Âm true"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Âm Windows Media"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Bộ âm Opus"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "Danh sách phát"
@@ -2977,18 +3033,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "Tỉ lệ khung hình"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "Sử dụng WASAPI (phát lại khởi động lại)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "Im khi chạy nhan"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "Thiết bị âm thanh:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "VSync: Bật"
@@ -3223,7 +3267,7 @@ msgstr "Phiên bản hiện tại của bạn là v%s.\n\nPhiên bản ổn đ
msgctxt "IDS_NEW_UPDATE_AVAILABLE"
msgid "MPC-HC v%s is now available. You are using v%s.\n\nDo you want to visit MPC-HC's website to download it?"
-msgstr "MPC-HC v%s bây giờ đã có. Bạn đang sử dụng v%s."
+msgstr "Đã có MPC-HC phiên bản mới v%s. Bạn đang sử dụng phiên bản v%s.\n\nBạn có muốn truy cập trang web của MPC-HC để tải về?"
msgctxt "IDS_UPDATE_ERROR"
msgid "Update server not found.\n\nPlease check your internet connection or try again later."
@@ -3277,6 +3321,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "Lấy lại khối lượng: Tắt"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "byte"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3334,8 +3382,8 @@ msgid "Error parsing the entered frame rate!"
msgstr "Lỗi phân tích tỷ lệ khung hình vào!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
-msgstr "Không có thể hình thành bước, hãy thử một dựng hình video khác nhau."
+msgid "Cannot frame-step, try a different video renderer."
+msgstr "Không thể đọc khung hình kế tiếp, hãy thử một bộ dựng hình khác."
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the default video renderer for RealMedia.\nSelect one of the DirectX renderers for RealMedia in MPC-HC's output options and reopen the file."
@@ -3353,10 +3401,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "\"Lưu ảnh\" và \"Lưu hình nhỏ\" chức năng không làm việc với video dựng hình bộ trộn.\nThay đổi trình phát video trong các tùy chọn đầu ra của MPC và mở lại tập tin."
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "Không thể kết nối với cơ sở dữ liệu phụ đề trực tuyến."
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "Bạn có muốn kích hoạt  trình soạn thảo EDL?"
@@ -3425,33 +3469,41 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "Bạn cần phải áp dụng các thiết lập mới trước khi thử nghiệm chúng."
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
-msgstr "Sau khi xem lại: Thoát"
+msgstr "Sau khi phát xong: Thoát"
msgctxt "IDS_AFTERPLAYBACK_STANDBY"
msgid "After Playback: Stand By"
-msgstr "Sau khi xem lại: Chuyển chế độ"
+msgstr "Sau khi phát xong: Chế độ chờ"
msgctxt "IDS_AFTERPLAYBACK_HIBERNATE"
msgid "After Playback: Hibernate"
-msgstr "Sau khi xem lại: Ngủ đông"
+msgstr "Sau khi phát xong: Ngủ đông"
msgctxt "IDS_AFTERPLAYBACK_SHUTDOWN"
msgid "After Playback: Shutdown"
-msgstr "Sau khi xem lại: Tắt máy"
+msgstr "Sau khi phát xong: Tắt máy"
msgctxt "IDS_AFTERPLAYBACK_LOGOFF"
msgid "After Playback: Log Off"
-msgstr "Sau khi xem lại: Đổi"
+msgstr "Sau khi phát xong: Đăng xuất"
msgctxt "IDS_AFTERPLAYBACK_LOCK"
msgid "After Playback: Lock"
-msgstr "Sau khi xem lại: Khóa"
+msgstr "Sau khi phát xong: Khóa"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr "Sau khi phát lại: Tắt màn hình"
+msgstr "Sau khi phát xong: Tắt màn hình"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "Sau khi phát xong: Chạy tập tin kế tiếp trong thư mục"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "Sau khi phát xong: Không làm gì cả"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
@@ -3533,3 +3585,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "Thiết lập"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "Nguồn cấp"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "Âm thanh không rõ"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "Tải xuống"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "Bản ghi"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "Việc tìm kiếm phụ đề trực tuyến đã thất bại."
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "Việc tìm kiếm phụ đề trực tuyến đã bị hủy."
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "Việc tìm kiếm phụ đề trực tuyến đã hoàn thành, tìm thấy %d phụ đề."
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "Việc tìm kiếm phụ đề trực tuyến đã hoàn thành, nhưng không tìm thấy phụ đề nào."
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "Tải phụ đề xuống"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "Đang tìm kiếm phụ đề trực tuyến, vui lòng chờ..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "Đang hủy việc tìm kiếm phụ đề trực tuyến..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "Tên người dùng"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "Tình trạng"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "Sẵn sàng..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "Không được thực thi."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "Đang tải lên..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "Phụ đề đã được tải lên thành công."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "Việc tải phụ đề lên đã thất bại."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "Việc tải phụ đề lên đã bị hủy."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "Phụ đề này đã có sẵn."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "Đang tải phụ đề lên, vui lòng chờ..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "Việc tải lên đã hoàn thành."
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "Việc tải lên đã bị hủy."
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "Việc tải lên đã thất bại."
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "&Tải xuống & Mở "
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "Thiết lập"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "Thiết lập lại"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "Chuyển lên"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "Chuyển xuống"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "Mở URL"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "Ngôn ngữ"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "LỖI: Kết nối mạng chưa được thiết lập."
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "Nhập các chứng nhận cho trang web"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "Nhập các chứng nhận của bạn để kết nối đến:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "Tỉ lệ khung hình: Giả định điểm ảnh vuông (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "Đã tải xuống [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "Tải phụ đề lên "
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "Bạn có chắc là muốn tải tập tin phụ đề \"%s\" lên?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "Đang tìm và nạp ngôn ngữ được hỗ trợ..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "Không thể đăng nhập vào \"% S\" bằng tên người dùng \"% S\".\n\nVui lòng nhập tên người dùng và mật khẩu chính xác hoặc thiết lập lại các thông tin đăng nhập như một người dùng vô danh."
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "Tự động tìm kiếm và tải về sẽ bị vô hiệu hóa đối với mọi tập tin đa phương tiện có chứa đoạn đường dẫn như đã nhập vào đây.\nVí dụ, gõ: \"private dir\\videos|work\\\"."
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pathname\"\tTập tin hoặc thư mục chính được nạp\n\t\t(cho phép ký tự đại diện, ký tự \"-\" được coi là nhập liệu chuẩn)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"\tNạp tập tin âm thanh lồng tiếng"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"file\"\tNạp tập tin âm thanh lồng tiếng có độ chênh lệch là XXms\n\t\t(Nếu tập tin có chứa \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\tKhởi động bộ dựng hình trong chế độ D3D toàn màn hình"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"\tNạp tập tin phụ đề bổ sung"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtername\"\tNạp bộ lọc DirectShow từ thư viện liên kết động (cho phép ký tự đại diện)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\tChạy trong chế độ DVD, \"đường dẫn\" nghĩa là thư mục DVD (tùy chọn)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\tKhởi chạy tại tiêu đề T, chương C"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\tKhởi chạy tại tiêu đề T, vị trí P (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\tNạp tất cả các rãnh của CD âm thanh hoặc (S)VCD,\n\t\t\"đường dẫn\" nghĩa là đường dẫn ổ đĩa (tùy chọn)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\tMở thiết bị phim ảnh mặc định"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\tMở tập tin, không tự động khởi chạy"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\tKhởi chạy tập tin ngay khi trình phát được khởi động"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\tĐóng trình phát sau khi phát xong (chỉ khi được sử dụng với /phát)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\tTắt hệ thống sau khi phát xong"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\tĐặt hệ thống vào chế độ chờ sau khi phát xong"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\tĐặt hệ thống vào chế độ ngủ đông sau khi phát xong"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\tĐăng xuất khỏi hệ thống sau khi phát xong"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\tKhóa trạm làm việc sau khi phát xong"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\tTắt màn hình sau khi phát xong"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\tMở tập tin kế tiếp trong thư mục sau khi phát xong"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\tKhởi động trong chế độ toàn màn hình"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\tKhởi động trong chế độ cực tiểu hóa"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\tSử dụng mẫu mới của trình phát"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\tthêm \"đường dẫn\" vào danh sách phát, có thể kết hợp với /mở và /phát"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\tNgẫu nhiên hóa danh sách phát"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\tTạo liên kết cho các tập tin phim ảnh"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\tTạo liên kết cho các tập tin âm thanh"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\tTạo liên kết cho các tập tin danh sách phát"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\tTạo liên kết cho tất cả các loại tập tin được hỗ trợ"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\tXóa bỏ tất cả các liên kết tập tin"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\tKhởi chạy tại \"ms\" (= mili giây)"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\tKhởi chạy tại vị trí hh:mm:ss"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\tThiết lập kích cỡ cửa sổ đã được ấn định"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\tKhởi động trình phát trên màn hình N, với N bắt đầu bằng 1"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\tKhởi động sử dụng bộ dựng âm thanh N, với N bắt đầu bằng 1 (xem các thiết lập về \"Ngõ ra\")"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\tKhởi động sử dụng thiết lập đổ bóng sẵn có \"Pr\""
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\tChỉ định tên thiết lập Pan&Scan sẵn có để sử dụng"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\tLiên kết lại các biểu tượng định dạng"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\tMở MPC-HC dưới nền"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\tKhởi động giao diện web ở cổng được chỉ định"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\tHiện thông tin gỡ lỗi trên màn hình hiển thị"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\tTắt báo cáo lỗi"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\tSử dụng MPC-HC thụ động"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\tThiết lập bảng chỉ mục của GPU để sử dụng cho việc giải mã phần cứng.\n\t\tChỉ có hiệu lực đối với CUVID và DXVA2 (sao chép-quay lại)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\tPhục hồi các thiết lập mặc định"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\tHiện trợ giúp về chuyển đổi chế độ dòng lệnh"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "Giá trị ngưỡng cho điểm số của phụ đề sẽ được tự động tải về. Giá trị cao hơn có nghĩa là phụ đề được nạp sẽ phù hợp và chính xác hơn, giá trị thấp hơn có thể dẫn đến phụ đề được nạp không phù hợp và chính xác, tuy nhiên không có một giá trị nào là hoàn hảo. Hãy chọn một cái phù hợp nhất đối với bạn."
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "Độ trễ của âm thanh (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "Kích cỡ điểm ảnh của thanh công cụ mặc định."
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "Sử dụng thanh công cụ kiểu cũ thay vì kiểu vectơ mới"
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "Sao chép URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.dialogs.po
index 1fbbc3971..c988b6e07 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.dialogs.po
@@ -1,16 +1,18 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# bruce55 <bruce.luo+transifex@nyu.edu>, 2014
-# Ming Chen <yzonline@gmail.com>, 2013-2014
+# bruce55 <bruce.luo+transifex@nyu.edu>, 2014-2015
+# Dean Lee <xslidian@gmail.com>, 2015-2016
+# kongfl888 <kongfl888@outlook.com>, 2016
+# Ming Chen <yzonline@gmail.com>, 2013-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:40+0000\n"
-"Last-Translator: Ming Chen <yzonline@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/mpc-hc/language/zh_CN/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2017-06-08 09:17+0000\n"
+"Last-Translator: Dean Lee <xslidian@gmail.com>\n"
+"Language-Team: Chinese (China) (http://www.transifex.com/mpc-hc/mpc-hc/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -99,7 +101,7 @@ msgstr "增益:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
msgid "Down-sample to 44100 Hz"
-msgstr "降低采样率至44100 Hz"
+msgstr "降低采样率至 44100 Hz"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
@@ -110,16 +112,16 @@ msgid "Enable custom channel mapping"
msgstr "开启自定义声道映射"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "扬声器设置 "
+msgid "Speaker configuration for"
+msgstr "扬声器设置"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
msgstr "输入声道:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
-msgstr "当点击任意项目时按下 shift 键可使其立即生效 "
+msgid "Hold shift for immediate changes when clicking something"
+msgstr "当点击任意项目时按下 shift 键可使其立即生效"
msgctxt "IDD_GOTO_DLG_CAPTION"
msgid "Go To..."
@@ -127,7 +129,7 @@ msgstr "转到..."
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter a timecode using the format [hh:]mm:ss.ms to jump to a specified time. You do not need to enter the separators explicitly."
-msgstr "请使用 [hh:]mm:ss.ms 为格式的时间代码来跳转到指定的时间。您无需输入特定的分隔符。"
+msgstr "请输入 [hh:]mm:ss.ms 格式的时间码来跳转到指定位置。分隔符不必特别输入。"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Time"
@@ -139,7 +141,7 @@ msgstr "跳转!"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
-msgstr "请输入两个数字来跳转到一个指定的帧,第一个数字是帧数,第二个数字是帧率。"
+msgstr "请输入两个数字来跳转到特定的帧,第一个数字是帧序号,第二个数字是帧率。"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Frame"
@@ -183,15 +185,15 @@ msgstr "取消"
msgctxt "IDD_OPEN_DLG_IDC_CHECK1"
msgid "Add to playlist without opening"
-msgstr "添加到播放列表但不要播放"
+msgstr "添加到播放列表但不要打开"
msgctxt "IDD_ABOUTBOX_CAPTION"
msgid "About"
msgstr "关于"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "版权所有 © 2002-2014 请查看 Authors.txt"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "版权所有 © 2002-2017 请查看 Authors.txt"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -199,7 +201,7 @@ msgstr "此程序是遵守 GNU 通用公众授权协议发布的自由软件。"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "简体中文翻译由风影幻想和酷剑菲心制作"
+msgstr "简体中文翻译由Transifex上的志愿者维护"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
@@ -267,7 +269,7 @@ msgstr "仅文件名"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
msgid "Don't prefix anything"
-msgstr "不附加任何信息"
+msgstr "不附加任何前缀信息"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
msgid "Replace file name with title"
@@ -355,7 +357,7 @@ msgstr "总是打开默认的位置:"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Preferred language for DVD Navigator and the external OGM Splitter"
-msgstr "首选的 DVD 导航器和扩展 OGM 分离器语言"
+msgstr "DVD 导航器及外部 OGM 分离器的首选语言"
msgctxt "IDD_PPAGEDVD_IDC_RADIO3"
msgid "Menu"
@@ -422,12 +424,16 @@ msgid "time(s)"
msgstr "次"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "重复模式:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
msgstr "回放结束后"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "输出"
+msgid "Default zoom"
+msgstr "默认缩放"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -435,7 +441,7 @@ msgstr "自动缩放:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC2"
msgid "Auto fit factor:"
-msgstr "自动适应因素:"
+msgstr "自动适应因数:"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC3"
msgid "%"
@@ -443,7 +449,7 @@ msgstr "%"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Default track preference"
-msgstr "默认轨道优先"
+msgstr "默认轨道偏好"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Subtitles:"
@@ -467,16 +473,12 @@ msgstr "使用工作线程来创建滤镜图像"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
-msgstr "报告渲染失败的帧"
+msgstr "渲染失败时报告 pin"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "自动装载音频文件"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "使用内建的字幕渲染器"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "控制"
@@ -523,11 +525,11 @@ msgstr "毫秒"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Texture settings (open the video again to see the changes)"
-msgstr "纹理设置 (请重新打开视频来查看更改效果)"
+msgstr "纹理设置 (请重新打开视频来查看效果)"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Sub pictures to buffer:"
-msgstr "子画面到缓存:"
+msgstr "缓冲子画面:"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Maximum texture resolution:"
@@ -570,7 +572,7 @@ msgid "Warning"
msgstr "警告"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "如果您在显卡设置的某处开启了全屏抗锯齿功能并覆盖程序本身设置的话,字幕并不会变得比以前好看但是却会一定大量吞噬您的 CPU 资源。"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
@@ -603,7 +605,7 @@ msgstr "设置为默认程序(&D)"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
-msgstr "实时流协议头部 (适用于 rtsp://... URL)"
+msgstr "接管实时流协议 (即 rtsp://... URL)"
msgctxt "IDD_PPAGEFORMATS_IDC_RADIO1"
msgid "RealMedia"
@@ -663,7 +665,7 @@ msgstr "默认"
msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
msgid "Fast seek (on keyframe)"
-msgstr "快速搜索 (以关键帧)"
+msgstr "快速定位 (按关键帧)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
msgid "Show chapter marks in seek bar"
@@ -677,16 +679,16 @@ msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
msgstr "在非默认显示器上全屏时防止播放器被最小化"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "使用 Windows 7 任务栏功能"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "使用增强任务栏功能"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "在播放列表中仅有一个项目时使用 \"向前/后跳转\" 后打开文件中的下一个/上一个文件"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "使用时间工具提示:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -751,7 +753,7 @@ msgstr "类型:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Size:"
-msgstr "容量:"
+msgstr "大小:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Media length:"
@@ -787,7 +789,7 @@ msgstr "位置:"
msgctxt "IDD_FILEPROPCLIP_IDC_STATIC"
msgid "Description:"
-msgstr "注释:"
+msgstr "描述:"
msgctxt "IDD_FAVADD_CAPTION"
msgid "Add Favorite"
@@ -839,7 +841,7 @@ msgstr "确定"
msgctxt "IDD_PNSPRESET_DLG_CAPTION"
msgid "Pan&Scan Presets"
-msgstr "全景和扫描预设"
+msgstr "全景扫描预设"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
msgid "New"
@@ -895,7 +897,7 @@ msgstr "警告"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
-msgstr "MPC-HC 无法渲染图像中的某些帧,您或许未在系统中安装所需的解码器或者分离器。"
+msgstr "MPC-HC 无法渲染图像中的某些 pin,您的系统中可能没有安装所需的解码器或分离器。"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
msgid "The following pin(s) failed to find a connectable filter:"
@@ -1126,8 +1128,8 @@ msgid "Audio Renderer"
msgstr "音频渲染器"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (未渲染) 与 EVR (CP) 设置"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (未渲染) 与 EVR (CP) 设置"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1135,7 +1137,7 @@ msgstr "表面:"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Resizer:"
-msgstr "重设尺寸:"
+msgstr "缩放算法:"
msgctxt "IDD_PPAGEOUTPUT_IDC_D3D9DEVICE"
msgid "Select D3D9 Render Device"
@@ -1143,7 +1145,7 @@ msgstr "选择 D3D9 渲染设备"
msgctxt "IDD_PPAGEOUTPUT_IDC_RESETDEVICE"
msgid "Reinitialize when changing display"
-msgstr "在更改显示时重新初始化"
+msgstr "在更改显示器时重新初始化"
msgctxt "IDD_PPAGEOUTPUT_IDC_FULLSCREEN_MONITOR_CHECK"
msgid "D3D Fullscreen"
@@ -1170,8 +1172,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "字幕 *"
+msgid "Subtitles"
+msgstr "字幕"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1186,8 +1188,12 @@ msgid "Rotation"
msgstr "旋转"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* 外部滤镜 (例如 VSFilter) 可以在所有渲染器下显示字幕。"
+msgid "Subtitle Renderer"
+msgstr "字幕渲染器"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "缓存已编译的着色器"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1203,7 +1209,11 @@ msgstr "开启压缩"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
-msgstr "仅允许访问本地用户"
+msgstr "仅允许从 localhost 访问"
+
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "启用预览"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
@@ -1219,7 +1229,7 @@ msgstr "浏览..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON2"
msgid "Deploy..."
-msgstr "配置..."
+msgstr "部署..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
msgid "Default page:"
@@ -1227,20 +1237,48 @@ msgstr "默认页:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_STATIC"
msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
-msgstr "CGI 操作器: (.ext1=路径1; .ext2=路径2; ...)"
+msgstr "CGI 接管: (.扩展名1=路径1; .扩展名2=路径2; ...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "可用的在线字幕"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "下载并打开"
+msgid "Download subtitles"
+msgstr "下载字幕"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "替换当前已装载的字幕"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "下载"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "刷新"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "中止"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "选项"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "上传字幕"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "上传"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "中止"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "选项"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "另存为..."
@@ -1278,8 +1316,8 @@ msgid "Enable automatic update check"
msgstr "开启自动检测更新"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "每次检测的间隔:"
+msgid "Check every:"
+msgstr "检测间隔:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1455,7 +1493,7 @@ msgstr "更改将在播放被关闭并重新启动后生效。"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK1"
msgid "Launch files in fullscreen"
-msgstr "在全屏幕中启动文件"
+msgstr "打开文件时全屏幕启动"
msgctxt "IDD_PPAGEFULLSCREEN_IDC_CHECK4"
msgid "Hide controls in fullscreen"
@@ -1542,16 +1580,28 @@ msgid "Reset"
msgstr "重置"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "在线数据库"
+msgid "Online search, download and upload subtitles"
+msgstr "在线搜索, 下载和上传字幕"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "如果本地未找到可用字幕, 自动搜索并下载字幕"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "优先使用为听力障碍者提供的字幕 (由字母提供者标明)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "忽略包含以下任何字词的文件:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "在线字幕数据库的基础 URL:"
+msgid "Languages in order of preference:"
+msgstr "语言偏好顺序:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "测试"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "在视频回放完成时自动上传启用的字幕"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1653,6 +1703,50 @@ msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "默认"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "设备"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "独占模式"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "允许比特流"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "选项"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "启用交叉馈音 (耳机用)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "截断:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "电平:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "注释"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "为了尽可能减少音频失真,推荐在播放大音量有损编码内容的时候将播放器音量控制在85%左右。"
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
msgstr "JPEG 质量:"
@@ -1665,3 +1759,39 @@ msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "确定"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "崩溃报告"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "非常抱歉,MPC-HC看起来崩溃了。:("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "上报错误报告来帮助我们诊断和修复问题"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "可选信息"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "邮箱:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "您可以选择不填写邮箱地址。只有在开发人员需要联系您了解更多信息的时候才会向您发送邮件。"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "问题描述 (只能用英文撰写):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "重新启动 MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "退出 MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.menus.po
index 7488cd730..6729fe6ff 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.menus.po
@@ -1,17 +1,18 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
# bruce55 <bruce.luo+transifex@nyu.edu>, 2014
+# Dean Lee <xslidian@gmail.com>, 2015
# kasper93, 2013
-# Ming Chen <yzonline@gmail.com>, 2013-2014
+# Ming Chen <yzonline@gmail.com>, 2013-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:11+0000\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2016-02-01 13:35+0000\n"
"Last-Translator: Ming Chen <yzonline@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/mpc-hc/language/zh_CN/)\n"
+"Language-Team: Chinese (China) (http://www.transifex.com/mpc-hc/mpc-hc/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -56,7 +57,7 @@ msgstr "关闭(&C)"
msgctxt "ID_FILE_SAVE_COPY"
msgid "&Save a Copy..."
-msgstr "保存为一个副本(&S)..."
+msgstr "保存副本(&S)..."
msgctxt "ID_FILE_SAVE_IMAGE"
msgid "Save &Image..."
@@ -66,29 +67,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "保存缩略图(&T)..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "字幕(&U)"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
msgstr "载入字幕(&L)..."
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
msgstr "保存字幕(&U)..."
-msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "字幕数据库(&B)"
-
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "搜索(&S)..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "下载字幕(&D)..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "上传(&U)..."
-
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "下载(&D)..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "上传字幕(&U)..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -198,13 +195,17 @@ msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
msgstr "撕裂测试(&T)"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
-msgstr "显示状态(&D)"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
+msgstr "显示统计(&D)"
+
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "显示当前时间(&I)"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "剩余时间(&R)"
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "显示文件名(&F)"
msgctxt "POPUP"
msgid "&Output Range"
@@ -248,7 +249,7 @@ msgstr "半浮点处理(&H)"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
-msgstr "关闭桌面组件 (&Aero)"
+msgstr "关闭桌面合成 (&Aero)"
msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time &Correction"
@@ -406,17 +407,13 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "缩放以填满窗口(&O)"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "保持高宽比(&K)"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "替代高宽比(&A)"
+msgid "&Aspect Ratio"
+msgstr "高宽比(&A)"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "默认(&D)"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "默认 (DAR)(&D)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
@@ -438,6 +435,10 @@ msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
msgstr "1&85:100"
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "猜测是方形像素 (SAR)(&S)"
+
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
msgstr "纠正显示器/桌面高宽比差异(&C)"
@@ -512,7 +513,7 @@ msgstr "当播放时(&P)"
msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
msgid "While Playing &Video"
-msgstr "在播放视频时(&V)..."
+msgstr "仅播放视频时(&V)"
msgctxt "ID_VIEW_OPTIONS"
msgid "&Options..."
@@ -531,8 +532,24 @@ msgid "&Stop"
msgstr "停止(&S)"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
-msgstr "帧步进(&R)"
+msgid "Fra&me Step"
+msgstr "帧步进(&M)"
+
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "重复(&R)"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "循环(&O)"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "文件(&F)"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "播放列表(&P)"
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
@@ -555,16 +572,16 @@ msgid "S&haders"
msgstr "着色器(&H)"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "音频(&A)"
+msgid "&Audio Track"
+msgstr "音频轨(&A)"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "字幕(&B)"
+msgid "Su&btitle Track"
+msgstr "字幕轨(&B)"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "视频流(&V)"
+msgid "Vide&o Track"
+msgstr "视频轨(&O)"
msgctxt "POPUP"
msgid "&Volume"
@@ -572,11 +589,11 @@ msgstr "音量(&V)"
msgctxt "ID_VOLUME_UP"
msgid "&Up"
-msgstr "上升(&U)"
+msgstr "增高(&U)"
msgctxt "ID_VOLUME_DOWN"
msgid "&Down"
-msgstr "下降(&D)"
+msgstr "降低(&D)"
msgctxt "ID_VOLUME_MUTE"
msgid "&Mute"
@@ -586,7 +603,19 @@ msgctxt "POPUP"
msgid "Af&ter Playback"
msgstr "回放结束后(&T)"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "什么都不做(&N)"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "播放文件夹中的下一个文件(&N)"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "关闭显示器(&M)"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
msgstr "退出(&E)"
@@ -610,10 +639,6 @@ msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
msgstr "锁定(&L)"
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr "关闭显示器(&m)"
-
msgctxt "POPUP"
msgid "&Navigate"
msgstr "导航(&N)"
@@ -672,7 +697,7 @@ msgstr "检查更新(&U)"
msgctxt "ID_HELP_SHOWCOMMANDLINESWITCHES"
msgid "&Command Line Switches"
-msgstr "命令行开关符(&C)"
+msgstr "命令行选项(&C)"
msgctxt "ID_HELP_TOOLBARIMAGES"
msgid "Download &Toolbar Images"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.strings.po
index 2e9e40fd0..5439f7afc 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_CN.strings.po
@@ -1,17 +1,20 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
-# bruce55 <bruce.luo+transifex@nyu.edu>, 2014
+# bruce55 <bruce.luo+transifex@nyu.edu>, 2014-2015
+# Dean Lee <xslidian@gmail.com>, 2015-2017
# hkenneth <extremekeny@hotmail.com>, 2013
-# Ming Chen <yzonline@gmail.com>, 2013-2014
+# kongfl888 <kongfl888@outlook.com>, 2016
+# Ming Chen <yzonline@gmail.com>, 2013-2016
+# Ryan Zhou <sentret_c@sina.cn>, 2017
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-29 21:09:08+0000\n"
-"PO-Revision-Date: 2014-09-30 14:50+0000\n"
-"Last-Translator: Ming Chen <yzonline@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/mpc-hc/language/zh_CN/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-03 17:28+0000\n"
+"Last-Translator: Dean Lee <xslidian@gmail.com>\n"
+"Language-Team: Chinese (China) (http://www.transifex.com/mpc-hc/mpc-hc/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -56,16 +59,24 @@ msgstr "播放音频 CD"
msgctxt "IDS_AUTOPLAY_PLAYDVDMOVIE"
msgid "Play DVD Movie"
-msgstr "播放 DVD 电影"
+msgstr "播放 DVD 影片"
msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "属性"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "文件"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "默认样式(&D)"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "播放列表"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "文件"
@@ -118,6 +129,26 @@ msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
msgstr "如果渲染目标没有被定义,SSA/ASS字幕会以视频帧为参照渲染,而其他文本字幕则会以窗口为参照。"
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "重复模式: 播放列表"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "重复模式: 文件"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "循环播放: 开"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "循环播放: 关"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "循环播放"
+
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
msgstr "从不 (最快的方式)"
@@ -136,7 +167,7 @@ msgstr "不支持某些设备。在滤镜图表中总是会出现两个视频解
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr "在不同视频流之间切换的最快方式。只会在滤镜图表中出现一个视频解码器。"
+msgstr "在不同视频流之间切换以外情况下的最快方式。只会在滤镜图表中出现一个视频解码器。"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
@@ -260,7 +291,7 @@ msgstr "无法添加音频捕获滤镜到图表中"
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
-msgstr "无法打开设备。"
+msgstr "无法打开捕获设备。"
msgctxt "IDS_INVALID_PARAMS_ERROR"
msgid "Can't open, invalid input parameters"
@@ -327,12 +358,12 @@ msgid "On/Off"
msgstr "开/关"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "从 fps"
+msgid "From (FPS)"
+msgstr "从 (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "到 fps"
+msgid "To (FPS)"
+msgstr "到 (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -412,7 +443,7 @@ msgstr "删除(&D)"
msgctxt "IDS_SUBRESYNC_DUPLICATE"
msgid "D&uplicate"
-msgstr "重覆(&U)"
+msgstr "重复(&U)"
msgctxt "IDS_SUBRESYNC_RESET"
msgid "&Reset"
@@ -466,6 +497,34 @@ msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
msgstr "回放::着色器"
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "资源"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "其它"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "MediaInfo"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "回放::采集"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "回放::同步渲染器设置"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "回放::全屏幕"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "内部滤镜::音频渲染器"
+
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
msgstr "音频切换器"
@@ -476,7 +535,7 @@ msgstr "新版本的图标库"
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
-msgstr "您要关联图标吗?"
+msgstr "您想要重新关联图标吗?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
@@ -490,18 +549,10 @@ msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
msgstr "覆盖合成渲染器"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "VMR-7 (窗口化)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "VMR-9 (窗口化)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "VMR-7 (未渲染)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "VMR-9 (未渲染)"
@@ -554,34 +605,6 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "播放器::Web 界面"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "字幕::数据库"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "资源"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "其它"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "回放::采集"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "回放::同步渲染器设置"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "回放::全屏幕"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "详细信息"
@@ -602,17 +625,9 @@ msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
msgstr "总是在覆盖模式渲染。通常情况下该模式仅允许 YUV 格式, 但是它们将不被转换为RGB色彩直接输出。它是所有渲染模式中最快的,且是唯一可以确保全屏视频镜像到电视输出被激活的渲染器。"
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Windows XP 的默认视频渲染器。非常稳定而且只比覆盖合成器稍慢。当可能时它将使用 DriectDraw 并运行在覆盖模式下。"
-
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "仅在 DirectX 9 已被安装的情况下可用。与 VMR-7 (窗口化) 有相同的功能, 因为它决不会使用覆盖渲染所以这会导致比 VMR-7 (窗口化) 稍慢。"
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "与 VMR-7 (窗口化) 相同,但是拥有 MPC-HC 字幕分配传输插件。覆盖视频镜像将不会工作。推荐使用 \"真彩色\" 为桌面颜色。"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "仅在 DirectX 9 已安装的情况下可用。非常稳定,但是由于不使用覆盖渲染,会比覆盖合成器稍慢。"
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -623,8 +638,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "与 VMR-9 (未渲染) 相同, 但是使用了一个真正的双三次成形器。"
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "连接到任意视频文件类型并且会将进入的采样信息传送到任意地方。当您不需要显示视频并希望节省不必要的 cpu 资源时请使用它。"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "连接到任意类视频文件类型,并将进入的采样信息吞噬。当您不需要显示视频并希望节省不必要的 CPU 资源时请使用它。"
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -650,10 +665,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Real 自己的渲染器。SMIL 脚本将会被执行,但或许无法执行交互功能。当可能时将会使用 DirectDraw 并运行在覆盖模式下。"
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "使用基于 DX7 的 VMR-7 (未渲染) 分配传输器渲染输出的 Real 引擎。"
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "使用基于 DX9 的 VMR-9 (未渲染) 分配传输器渲染输出的 Real 引擎。"
@@ -662,10 +673,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "QuickTime 自己的渲染器。当视频区域被重新调整大小或被其它窗口部份覆盖时可能会变的稍慢一些。当覆盖不可用时它可能会完全返回至 GDI。"
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "使用基于 DX7 的 VMR-7 (未渲染) 分配传输器渲染输出的 QuickTime 引擎。"
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "使用基于 DX9 的 VMR-9 分配转换器 (未渲染) 渲染的 QuickTime 引擎输出。"
@@ -674,22 +681,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "视频层将被分配为普通的离屏层。"
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC 音频渲染器已损坏, 不要使用。"
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "同步渲染器"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - 报告一个 bug"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC 已经崩溃了但是此构建是被编译为无调试信息的。\n如果您想报告此 bug, 您应该首先尝试官方构建的版本。\n\n您要立即访问下载页吗?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "标准离屏表面"
@@ -742,9 +737,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "空 (未压缩)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC 音频渲染器"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "内部音频渲染器"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -758,9 +753,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "为了在您的浏览器中能查看内嵌的资源您应该开启 web 界面。\n\n如果您只是希望保存信息请使用 \"另存为\" 按钮。"
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "下载字幕"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "下载字幕..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "上传字幕..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -791,7 +790,7 @@ msgid "Couldn't find all archive volumes"
msgstr "找不到全部档案卷"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "视频表面将被分配为一个纹理但仍使用 2d 功能来复制和拉伸它到后台缓存中。它需要一块可以分配 32 位, RGBA, 无二次幂限制尺寸纹理并至少支持和当前视频分辨率相同的显卡支持。"
msgctxt "IDC_TEXTURESURF3D"
@@ -808,7 +807,7 @@ msgstr "将 VMR-9 (未渲染) 放置到混合器模式中,这将会使许多在
msgctxt "IDC_DSVMR9YUVMIXER"
msgid "Improves performance at the cost of some compatibility of the renderer."
-msgstr "改进某些兼容渲染器的性能。"
+msgstr "提升性能,代价是降低某些渲染器的兼容性。"
msgctxt "IDC_FULLSCREEN_MONITOR_CHECK"
msgid "Reduces tearing but prevents the toolbar from being shown."
@@ -818,9 +817,21 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "通过绕过内建于 D3D 中的垂直同步来减少撕裂现象。"
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "调谐器扫描"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "字幕未被载入或是不支持的渲染器。"
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "将已编译的着色器存储在本地的 AppData 目录,以此提高加载速度。"
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
-msgstr "打开 VTS_xx_0.ifo 以在同一处载入 VTS_xx_x.vob 文件"
+msgstr "打开 VTS_xx_0.ifo 可同时加载 VTS_xx_x.vob 文件"
msgctxt "IDS_SRC_RFS"
msgid "Based on RARFileSource, doesn't support compressed files"
@@ -890,7 +901,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "静音"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "取消静音"
@@ -955,12 +966,12 @@ msgid "&Organize Favorites..."
msgstr "管理收藏夹(&O)..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
-msgstr "拖曳"
+msgid "Sh&uffle"
+msgstr "乱序(&U)"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
-msgstr "打开文件位置"
+msgid "Ope&n file location"
+msgstr "打开文件位置(&N)"
msgctxt "IDS_CONTROLS_CLOSING"
msgid "Closing..."
@@ -992,7 +1003,7 @@ msgstr "EDL 保存"
msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time Correction"
-msgstr "开始帧计时修正"
+msgstr "开启帧计时修正"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
@@ -1000,11 +1011,11 @@ msgstr "切换 EDL 窗口"
msgctxt "IDS_AG_EDL_IN"
msgid "EDL set In"
-msgstr "EDL 装入"
+msgstr "EDL 输入"
msgctxt "IDS_AG_EDL_OUT"
msgid "EDL set Out"
-msgstr "EDL 开始"
+msgstr "EDL 输出"
msgctxt "IDS_AG_PNS_ROTATEX_M"
msgid "PnS Rotate X-"
@@ -1043,8 +1054,8 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "缩放至超宽屏幕,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
-msgstr "在全屏幕中隐藏"
+msgid "&Hide on Fullscreen"
+msgstr "在全屏幕中隐藏(&H)"
msgctxt "IDS_CONTROLS_STOPPED"
msgid "Stopped"
@@ -1104,7 +1115,7 @@ msgstr "分级"
msgctxt "IDS_INFOBAR_DESCRIPTION"
msgid "Description"
-msgstr "注释"
+msgstr "描述"
msgctxt "IDS_INFOBAR_DOMAIN"
msgid "Domain"
@@ -1128,11 +1139,11 @@ msgstr "按键"
msgctxt "IDS_AG_MOUSE"
msgid "Mouse Windowed"
-msgstr "鼠标窗口化"
+msgstr "窗口中的鼠标"
msgctxt "IDS_AG_MOUSE_FS"
msgid "Mouse Fullscreen"
-msgstr "鼠标全屏"
+msgstr "全屏状态的鼠标"
msgctxt "IDS_AG_APP_COMMAND"
msgid "App Command"
@@ -1231,8 +1242,8 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
-msgstr "添加内容文件夹"
+msgid "Add containing &folder"
+msgstr "添加子文件夹(&F)"
msgctxt "IDS_HW_INDICATOR"
msgid "[H/W]"
@@ -1296,7 +1307,7 @@ msgstr "对音频文件也记忆播放位置。"
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
-msgstr "什么也不做"
+msgstr "什么都不做"
msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
msgid "Play next file in the folder"
@@ -1338,6 +1349,82 @@ msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
msgstr "<没有定义>"
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "观看"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "向上移动"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "向下移动"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "按 LCN 排序"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "移除所有"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "您是否确认要从列表中移除所有频道?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "没有可用信息"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "请稍等,分析正在进行中..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "高宽比 %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "启用日志记录到文件中。(需要重新启动)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "剩余时间"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "高精确度"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "回放结束后: 返回当前文件"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "回放结束后: 关闭"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC在初始化时遇到问题。 您或许可以帮我们解决这个问题。\n\n您想报告问题报告吗?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "如果音频提前,输入正数,如果音频延后,输入负数。"
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "预览目前处于禁用状态。您可以在 MPC-HC 的选项面板中启用。"
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "该功能可用于从远程位置预览媒体文件。请仅在确保安全性的私有网络中启用。\n\n您真的要启用该功能吗?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "内部字幕渲染器"
+
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
msgstr "打开设备"
@@ -1358,13 +1445,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "已成功保存图像"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "载入字幕"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "载入字幕..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "保存字幕"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "保存字幕..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1387,11 +1474,11 @@ msgid "Stop"
msgstr "停止"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "帧步进"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "帧回退"
msgctxt "IDS_AG_GO_TO"
@@ -1436,19 +1523,19 @@ msgstr "移动到回收站"
msgctxt "IDS_AG_SAVE_COPY"
msgid "Save a Copy"
-msgstr "保存为一个副本"
+msgstr "保存副本"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
-msgstr "最近的关键帧"
+msgstr "向前搜寻最近关键帧"
msgctxt "IDS_FASTSEEK_NEAREST"
msgid "Nearest keyframe"
-msgstr "最接近的关键帧"
+msgstr "前后搜寻最近关键帧"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
-msgstr "MPC-HC 在初始化时遇到了一个问题。DVD 播放可能不正确。这可能是某些安全工具导致的不兼容。\n\n您要报告此问题吗?"
+msgstr "MPC-HC 在初始化时遇到了一个问题。DVD 播放可能不正常。这可能是某些安全工具导致的不兼容。\n\n您要报告此问题吗?"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
@@ -1464,7 +1551,7 @@ msgstr "光标经过控制栏区域时显示, 隐藏在:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
-msgstr "设置重绘尺寸着色器前失败"
+msgstr "设置重绘尺寸前着色器失败"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
@@ -1491,8 +1578,8 @@ msgid "Thumbnails saved successfully"
msgstr "成功保存缩略图"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "视频流(&V)"
+msgid "Vide&o Track"
+msgstr "视频轨(&O)"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1539,11 +1626,11 @@ msgid "Reset Rate"
msgstr "重置速率"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "音频延迟 +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "音频延迟 -10ms"
msgctxt "IDS_MPLAYERC_23"
@@ -1614,14 +1701,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "字幕右移"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "显示状态"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "跳转到开头"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: 显示文件名"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "播放 DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "播放 BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: 显示渲染器统计"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: 重置渲染器统计"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "字幕::其它"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "隐藏边框(&B)"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "仅图像(&M)"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "显示标题与菜单(&W)"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "隐藏菜单(&M)"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "高级"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "最小视图"
@@ -1687,8 +1814,8 @@ msgid "PnS Dec Height"
msgstr "PnS Dec 高度"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "正在下载字幕, 请稍候。"
+msgid "Downloading [%s] \"%s\""
+msgstr "正在下载 [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1699,7 +1826,7 @@ msgid "No subtitles found."
msgstr "找不到字幕。"
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "有 %d 条字幕可用。"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
@@ -1855,12 +1982,12 @@ msgid "Boss key"
msgstr "老板键"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "播放器菜单 (短)"
+msgid "Player Menu"
+msgstr "播放器菜单"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "播放器菜单 (长)"
+msgid "Player Menu (full)"
+msgstr "播放器菜单 (完整)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1871,20 +1998,20 @@ msgid "Options"
msgstr "选项"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "下一条音轨"
+msgid "Next Audio Track"
+msgstr "下一条音频轨"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "上一条音轨"
+msgid "Prev Audio Track"
+msgstr "上一条音频轨"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "下一个字幕"
+msgid "Next Subtitle Track"
+msgstr "下一个字幕轨"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "上一个字幕"
+msgid "Prev Subtitle Track"
+msgstr "上一个字幕轨"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1894,22 +2021,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "重新装载字幕"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "下一条音轨 (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "上一条音轨 (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "下一个字幕 (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "上一个字幕 (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "下一视角 (DVD)"
@@ -1919,28 +2030,28 @@ msgid "Prev Angle (DVD)"
msgstr "上一视角 (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "下一音轨 (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "下一条音频轨 (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "上一音轨 (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "上一条音频轨 (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "下一个字幕 (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "下一个字幕轨 (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "上一字幕 (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "上一个字幕轨 (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "开/关字幕 (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "剩余时间"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: 显示当前时间"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1952,7 +2063,7 @@ msgstr "快速添加至收藏夹"
msgctxt "IDS_DVB_CHANNEL_NUMBER"
msgid "N"
-msgstr "编号"
+msgstr "N"
msgctxt "IDS_DVB_CHANNEL_NAME"
msgid "Name"
@@ -1966,11 +2077,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "加密"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "是"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "否"
@@ -2027,11 +2138,11 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "音量: %02lu/%02lu, 标题: %02lu/%02lu, 章节: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "视角: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
msgstr "%s, %s %uHz %d 位 %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
@@ -2068,7 +2179,7 @@ msgstr "DVD: 未预料的错误"
msgctxt "IDS_MAINFRM_17"
msgid "DVD: Copy-Protect Fail"
-msgstr "DVD: 复制保护失败"
+msgstr "DVD: 受复制保护阻止"
msgctxt "IDS_MAINFRM_18"
msgid "DVD: Invalid DVD 1.x Disc"
@@ -2076,7 +2187,7 @@ msgstr "DVD: 无效的 DVD 1.x 光盘"
msgctxt "IDS_MAINFRM_19"
msgid "DVD: Invalid Disc Region"
-msgstr "DVD: 无效的光盘区域"
+msgstr "DVD: 无效的光盘区位码"
msgctxt "IDS_MAINFRM_20"
msgid "DVD: Low Parental Level"
@@ -2122,14 +2233,6 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "图像宽度"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "URL 看上去不正确!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "协议版本不匹配, 请升级您的播放器或选择一个不同的地址!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "高宽比"
@@ -2139,19 +2242,19 @@ msgid ", Total: %ld, Dropped: %ld"
msgstr ", 总计: %ld, 已丢弃: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", 大小: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", 大小: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", 空闲: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", 空闲: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2196,7 +2299,7 @@ msgstr "无法创建文件"
msgctxt "IDS_THUMBNAILS_NO_DURATION"
msgid "Cannot create thumbnails for files with no duration"
-msgstr "无法创建没有持续时间的缩略图文件"
+msgstr "无法为没有持续时间的文件创建缩略图"
msgctxt "IDS_THUMBNAILS_NO_FRAME_SIZE"
msgid "Failed to get video frame size"
@@ -2204,7 +2307,7 @@ msgstr "获取视频画面大小失败"
msgctxt "IDS_OUT_OF_MEMORY"
msgid "Out of memory, go buy some more!"
-msgstr "内存溢出,赶快去买!"
+msgstr "内存不足,再买几根吧!"
msgctxt "IDS_THUMBNAILS_INVALID_FORMAT"
msgid "Invalid image format, cannot create thumbnails out of %d bpp dibs."
@@ -2223,8 +2326,8 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "缩略图会太小, 而无法创建该文件。\n\n请尝试调低缩略图的数量或增加总大小。"
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "要载入字幕,您需要更改视频渲染器类型然后重新打开文件。\n- DirectShow: VMR-7/VMR-9 (未渲染)、EVR (CP)、同步、madVR 或 Haali\n- RealMedia: 用于 RealMedia 的特殊渲染器, 或通过 DirectShow 打开它\n- QuickTime: 用于 QuickTime 的 DX7 或 DX9 渲染器\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "要载入字幕,您需要更改视频渲染器类型然后重新打开文件。\n- DirectShow: VMR-9 (未渲染)、EVR (CP)、同步、madVR 或 Haali\n- RealMedia: 用于 RealMedia 的特殊渲染器, 或通过 DirectShow 打开它\n- QuickTime: 用于 QuickTime 的 DX7 或 DX9 渲染器\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
@@ -2235,11 +2338,11 @@ msgid "Aspect Ratio: %ld:%ld"
msgstr "高宽比: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "高宽比: 默认"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "高宽比: 默认(DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "音频延迟: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2248,11 +2351,11 @@ msgstr "章节 %d"
msgctxt "IDS_AG_OUT_OF_MEMORY"
msgid "Out of memory"
-msgstr "内存溢出"
+msgstr "内存不足"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "错误: 需要用于 IE 的 Flash player"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "错误: 需要用于 Internet Explorer 的 Adobe Flash Player"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2274,10 +2377,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "渲染文件失败"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "错误的 URL,无法定位字幕数据库!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "章节: "
@@ -2298,14 +2397,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "当前"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC 已被异常终止。要帮助我们修复此问题, 请将此文件 \"%s\" 发送至我们的 bug 跟踪器上。\n\n您是否要打开含有迷你转储文件的文件夹并访问 bug 跟踪器?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "创建转储文件到 \"%s\" 失败 (错误 %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "选择目录"
@@ -2323,7 +2414,7 @@ msgid "Toggle Caption&Menu"
msgstr "切换标题与菜单"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "切换进度栏"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2392,7 +2483,7 @@ msgstr "无法打开任何设备"
msgctxt "IDS_AG_SOUND"
msgid "Sound"
-msgstr "音频"
+msgstr "声音"
msgctxt "IDS_MAINFRM_114"
msgid "%s was not found, please insert media containing this file."
@@ -2479,12 +2570,12 @@ msgid "Volume boost Max"
msgstr "最大音量推进"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "用法: mpc-hc.exe \"路径名\" [开关]\n\n\"路径名\"\t\t表示要载入的主文件或目录 (允许通配符, \"-\" 表示标准输入)\n/dub \"配音名\"\t载入一个附加的音频文件\n/dubdelay \t\"文件\"载入音频文件延迟 XXms (如果该文件包含 \"...延迟 XXms...\")\n/d3dfs\t\t在 D3D 全屏幕模式开始渲染\n/sub \"字幕名\"\t载入一个附加的字幕文件\n/filter \"滤镜名\"\t从一个动态链接库中载入 DirectShow 滤镜 (允许通配符)\n/dvd\t\t运行 DVD 模式, \"路径名\" 表示 dvd 文件夹 (可选)\n/dvdpos T#C\t从标题 T, 章节 C 开始播放\n/dvdpos T#hh:mm\t从标题 T, 位置 hh:mm:ss 开始播放\n/cd\t\t从一张音频 CD 或 (S)VCD 中载入所有音轨, \"路径名\" 表示驱动器路径 (可选)\n/device\t\t打开默认的视频设备\n/open\t\t打开文件, 不自动开始回放\n/play\t\t在播放器启动后播放文件\n/close\t\t在播放后关闭播放器 (仅能和 /play 同时使用)\n/shutdown\t在播放完毕后关闭操作系统\n/fullscreen\t以全屏幕模式启动\n/minimized\t以最小化模式启动\n/new\t\t启动一个新的播放器实例\n/add\t\t添加 \"路径名\" 到播放列表中,可以和 /open 与 /play 组合使用\n/regvid\t\t为视频文件创建文件关联\n/regaud\t\t为音频文件创建文件关联\n/regpl\t\t为播放列表创建文件关联\n/regall\t\t为所有支持的文件类型创建文件关联\n/unregall\t\t移除所有文件关联\n/start ms\t\t在 \"ms\" (= 毫秒) 处开始播放\n/startpos hh:mm:ss\t在位置 hh:mm:ss 开始播放\n/fixedsize w,h\t设置一个固定的窗口大小\n/monitor N\t在显示器 N 上启动, N 从 1 开始\n/audiorenderer N\t使用音频渲染器 N 启动, N 从 1 开始\n\t\t(请查阅 \"输出\" 设置)\n/shaderpreset \"Pr\"\t开始使用 \"Pr\" 着色器预设\n/reset\t\t恢复默认设置\n/help /h /?\t显示此命令行开关帮助对话框\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "用法: mpc-hc.exe \"路径名称\" [开关参数]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
-msgstr "在命令行字串中发现未认证的开关符: \n\n"
+msgstr "在命令行字符串中发现无法识别的开关符: \n\n"
msgctxt "IDS_AG_TOGGLE_INFO"
msgid "Toggle Information"
@@ -2566,14 +2657,6 @@ msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
msgstr "开启所有滤镜(&E)"
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "调谐器扫描"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "字幕未被载入或是不支持的渲染器。"
-
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
msgstr "作者未知。如果是您制作了此标志请联系我们!"
@@ -2662,40 +2745,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "上 后 右"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "重置显示状态"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "字幕::其它"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "隐藏边框(&B)"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "仅图像"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "显示标题与菜单(&W)"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "隐藏菜单(&M)"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr "高级"
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "在进度栏之上"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "在进度栏之下"
msgctxt "IDS_VIDEO_STREAM"
@@ -2788,7 +2843,7 @@ msgstr "MPEG-TS"
msgctxt "IDS_MFMT_DVDVIDEO"
msgid "DVD-Video"
-msgstr "DVD-Video"
+msgstr "DVD-视频"
msgctxt "IDS_MFMT_MKV"
msgid "Matroska"
@@ -2804,7 +2859,7 @@ msgstr "MP4"
msgctxt "IDS_MFMT_MOV"
msgid "QuickTime Movie"
-msgstr "QuickTime Movie"
+msgstr "QuickTime 影片"
msgctxt "IDS_MFMT_3GP"
msgid "3GP"
@@ -2816,11 +2871,11 @@ msgstr "3G2"
msgctxt "IDS_MFMT_FLV"
msgid "Flash Video"
-msgstr "Flash Video"
+msgstr "Flash 视频"
msgctxt "IDS_MFMT_OGM"
msgid "Ogg Media"
-msgstr "Ogg Media"
+msgstr "Ogg 媒体"
msgctxt "IDS_MFMT_RM"
msgid "Real Media"
@@ -2828,31 +2883,31 @@ msgstr "Real Media"
msgctxt "IDS_MFMT_RT"
msgid "Real Script"
-msgstr "Real Script"
+msgstr "Real 脚本"
msgctxt "IDS_MFMT_WMV"
msgid "Windows Media Video"
-msgstr "Windows Media Video"
+msgstr "Windows Media 视频"
msgctxt "IDS_MFMT_BINK"
msgid "Smacker/Bink Video"
-msgstr "Smacker/Bink Video"
+msgstr "Smacker/Bink 视频"
msgctxt "IDS_MFMT_FLIC"
msgid "FLIC Animation"
-msgstr "FLIC Animation"
+msgstr "FLIC 动画"
msgctxt "IDS_MFMT_DSM"
msgid "DirectShow Media"
-msgstr "DirectShow Media"
+msgstr "DirectShow 媒体"
msgctxt "IDS_MFMT_IVF"
msgid "Indeo Video Format"
-msgstr "Indeo Video Format"
+msgstr "Indeo 视频格式"
msgctxt "IDS_MFMT_OTHER"
msgid "Other"
-msgstr "Other"
+msgstr "其他"
msgctxt "IDS_MFMT_SWF"
msgid "Shockwave Flash"
@@ -2860,11 +2915,11 @@ msgstr "Shockwave Flash"
msgctxt "IDS_MFMT_OTHER_AUDIO"
msgid "Other Audio"
-msgstr "Other Audio"
+msgstr "其他音频"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2874,6 +2929,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media 音频"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus 音频编解码器"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2888,7 +2963,7 @@ msgstr "AU/SND"
msgctxt "IDS_MFMT_CDA"
msgid "Audio CD track"
-msgstr "Audio CD track"
+msgstr "音频 CD 轨道"
msgctxt "IDS_MFMT_FLAC"
msgid "FLAC"
@@ -2896,7 +2971,7 @@ msgstr "FLAC"
msgctxt "IDS_MFMT_M4A"
msgid "MPEG-4 Audio"
-msgstr "MPEG-4 Audio"
+msgstr "MPEG-4 音频"
msgctxt "IDS_MFMT_MIDI"
msgid "MIDI"
@@ -2904,7 +2979,7 @@ msgstr "MIDI"
msgctxt "IDS_MFMT_MKA"
msgid "Matroska audio"
-msgstr "Matroska audio"
+msgstr "Matroska 音频"
msgctxt "IDS_MFMT_MP3"
msgid "MP3"
@@ -2912,7 +2987,7 @@ msgstr "MP3"
msgctxt "IDS_MFMT_MPA"
msgid "MPEG audio"
-msgstr "MPEG audio"
+msgstr "MPEG 音频"
msgctxt "IDS_MFMT_MPC"
msgid "Musepack"
@@ -2938,33 +3013,17 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus Audio Codec"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
-msgstr "Playlist"
+msgstr "播放列表"
msgctxt "IDS_MFMT_BDPLS"
msgid "Blu-ray playlist"
-msgstr "Blu-ray playlist"
+msgstr "Blu-ray 播放列表"
msgctxt "IDS_MFMT_RAR"
msgid "RAR Archive"
-msgstr "RAR Archive"
+msgstr "RAR 压缩包"
msgctxt "IDS_DVB_CHANNEL_FPS"
msgid "FPS"
@@ -2978,18 +3037,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "高宽比"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "使用 WASAPI (需要重启播放)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "在快进时静音"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "声音设备:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "垂直同步: 开"
@@ -3120,11 +3167,11 @@ msgstr "D3D全屏幕: 关"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
msgid "Disable desktop composition: On"
-msgstr "关闭桌面组合: 开"
+msgstr "关闭桌面合成: 开"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
msgid "Disable desktop composition: Off"
-msgstr "关闭桌面组合: 关"
+msgstr "关闭桌面合成: 关"
msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
msgid "Alternative VSync: On"
@@ -3278,6 +3325,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "增益音量: 关"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "字节"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3335,7 +3386,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "解析输入的帧率错误!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "无法进行帧步进,请尝试其它视频渲染器。"
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3354,10 +3405,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "\"保存图像\" 和 \"保存缩略图\" 功能无法工作于覆盖合成视频渲染器下。\n请在MPC的输出选项中更换视频渲染器,然后重新打开文件。"
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "无法连接到在线字幕数据库。"
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "您要激活 EDL 编辑器吗?"
@@ -3426,7 +3473,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "您需要在测试之前应用新类型。"
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "回放结束后: 退出"
@@ -3454,6 +3501,14 @@ msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
msgstr "回放结束后: 关闭显示器"
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "回放结束后: 播放文件夹中的下一个文件"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "回放结束后: 什么都不做"
+
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
msgstr "亮度: %s"
@@ -3472,7 +3527,7 @@ msgstr "饱和度: %s"
msgctxt "IDS_OSD_RESET_COLOR"
msgid "Color settings restored"
-msgstr "已重置颜色设置"
+msgstr "已恢复颜色设置"
msgctxt "IDS_OSD_NO_COLORCONTROL"
msgid "Color control is not supported"
@@ -3512,7 +3567,7 @@ msgstr "频道(&C)"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr "若选择 \"最近的关键帧\" , 在搜索时会选择实际搜索时间点前最近的关键帧。\n若选择 \"最接近的关键帧\" , 在搜索时会根据前后关键帧选择最近的。"
+msgstr "若选择 \"向前搜寻最近关键帧\", 在搜索时会选择实际搜索时间点前最近的关键帧。\n若选择 \"前后搜寻最近关键帧\", 在搜索时会根据前后关键帧选择最近的。"
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
@@ -3534,3 +3589,387 @@ msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "设置"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr "AssFilter"
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "提供者"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "听障者"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "下载量"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "评分"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "在线字幕搜索失败。"
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "在线字幕搜索已中止。"
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "在线字幕搜索已完成,找到 %d 个字幕。"
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "在线字幕搜索已完成,未找到匹配字幕。"
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "下载字幕"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "正在在线搜索字幕,请稍后.."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "正在中止在线字幕搜索..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "用户名"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "状态"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "就绪..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "尚未实现。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "上传中..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "字幕上传成功。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "字幕上传失败。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "字幕上传已中止。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "字幕已存在。"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "正在上传字幕,请稍候..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "上传完成。"
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "上传中止。"
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "上传失败。"
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "下载并打开"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "设置"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "重置"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "向上移动"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "向下移动"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "打开链接"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "语言"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "错误:无法建立网络连接。"
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "输入网站认证信息"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "输入认证信息以连接到:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "高宽比: 猜测是方形像素 (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "已下载 [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "上传字幕"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "您确认要上传字幕文件 \"%s\"?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "正在获取受支持的语言..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "无法登录 \"%S\" 当前用户名 \"%S\"。\n\n请输入正确的用户名和密码或重置凭据后作为匿名用户登录。"
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "当路径中包含有任何这里所输入的模式时所有媒体文件的自动搜索和下载的功能将被禁用。\n例如,类型:\"私有目录\\视频|工作\\\"。"
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"路径名称\"\t要加载的主文件或文件夹\n\t\t(允许使用通配符,“-”表示标准输入)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"配音文件名\"\t加载额外的音频文件"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"文件\"\t加载额外的音频文件并延迟 XXms\n\t\t(若文件名包含“...DELAY XXms...”字样)"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\t以 D3D 全屏模式开始渲染"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"字幕文件名\"\t加载额外的字幕文件"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"滤镜文件名\"\t加载动态链接库中的 DirectShow 滤镜 (允许使用通配符)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\t以 DVD 模式运行,“路径名称”表示 DVD 根目录 (可选)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\t开始播放第 T 标题,第 C 章节"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr "/dvdpos T#P\t开始播放第 T 标题的 P 位置 (hh:mm:ss)"
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\t加载音频 CD 或 (S)VCD 的所有轨道,\n\t\t“路径名称”表示驱动器路径 (可选)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\t打开默认视频设备"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\t只打开文件,但不自动开始播放"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\t启动播放器并开始播放文件"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\t播放完毕后关闭播放器 (仅当与 /play 同时使用时生效)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\t播放完毕后关闭操作系统"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\t播放完毕后将操作系统置于待机模式"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\t播放完毕后将操作系统置于休眠模式"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\t播放完毕后注销"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\t播放完毕后锁定工作站"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\t播放完毕后关闭显示器"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\t播放完毕后打开文件夹中的下一个文件"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\t以全屏模式启动"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\t以最小化模式启动"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\t使用新的播放器实例"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\t将“路径名称”添加到播放列表,可与 /open 及 /play 组合使用"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\t播放列表随机排序"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\t创建视频文件的文件关联"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\t创建音频文件的文件关联"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\t创建播放列表文件的文件关联"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\t为所有受支持的文件创建文件关联"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\t移除所有文件关联"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\t从第 ms 毫秒开始播放"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\t从 hh:mm:ss 位置开始播放"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\t设置固定的窗口尺寸"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\t在第 N 个显示器上启动播放器,其中 N 从 1 开始计数"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\t启动时使用第 N 个音频渲染器,其中 N 从 1 开始计数 (参见“输出”设置项)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\t启动时使用着色器预设“Pr”"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"名称\"\t指定要使用的 Pan&Scan 预设名称"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\t重新关联格式图标"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\t在后台打开 MPC-HC"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\t在指定端口启动 web 界面"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\t在屏幕上(OSD)显示调试信息"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\t禁用崩溃报告程序"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\t以从模式启动 MPC-HC"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"索引号\"\t设置要使用的 GPU 的索引号。\n\t\t只对 CUVID 与 DXVA2 (copy-back) 可用"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\t恢复默认设置"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\t显示命令行开关的帮助"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "自动下载字幕的评分阈值。该值设置得较高,则将加载匹配更为精确的字幕;设置得较低,则可能导致加载的字幕不正确;但没有一个确定的完美值。请根据实测情况决定该数值。"
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "音频延迟 (ms)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "默认工具栏的大小,单位为像素。"
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "使用经典版工具栏,而非新的矢量化图标。"
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "复制 URL"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.dialogs.po b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.dialogs.po
index 26459862b..e02f11a1a 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.dialogs.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.dialogs.po
@@ -1,19 +1,25 @@
# MPC-HC - Strings extracted from dialogs
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# 洪嘉鴻 <jerry9030@gmail.com>, 2015
+# Chien Wei Lin <cwlin0416@gmail.com>, 2016
# Jeff Huang <s8321414@gmail.com>, 2014
# kenelin <kenelin@gmail.com>, 2013
+# Ken <ken670128@yahoo.com.tw>, 2015
# Peter Chen <petercpg@gmail.com>, 2014
# roytam1 <roytam@gmail.com>, 2014
+# Timo Liu <timoliu@gmail.com>, 2016
+# YukiSakura <nijiko_fukada@163.com>, 2015
# Zakk <zakk0610@gmail.com>, 2014
+# 洪嘉鴻 <jerry9030@gmail.com>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 10:30+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/mpc-hc/language/zh_TW/)\n"
+"POT-Creation-Date: 2016-04-11 21:52:56+0000\n"
+"PO-Revision-Date: 2016-07-06 21:36+0000\n"
+"Last-Translator: kasper93\n"
+"Language-Team: Chinese (Taiwan) (http://www.transifex.com/mpc-hc/mpc-hc/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -26,7 +32,7 @@ msgstr "選擇媒體類型"
msgctxt "IDD_SELECTMEDIATYPE_IDOK"
msgid "OK"
-msgstr "確認"
+msgstr "確定"
msgctxt "IDD_SELECTMEDIATYPE_IDCANCEL"
msgid "Cancel"
@@ -70,7 +76,7 @@ msgstr "V/A 緩衝區:"
msgctxt "IDD_CAPTURE_DLG_IDC_CHECK5"
msgid "Audio to wav"
-msgstr "輸出成 WAV 檔案"
+msgstr "音訊輸成 WAV 檔"
msgctxt "IDD_CAPTURE_DLG_IDC_BUTTON2"
msgid "Record"
@@ -78,7 +84,7 @@ msgstr "錄製"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK2"
msgid "Enable built-in audio switcher filter (requires restart)"
-msgstr "啟用內建的音訊切換篩選器 (需要重新啟動)"
+msgstr "開啟內建的音訊切換篩選器 (需要重新啟動)"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK5"
msgid "Normalize"
@@ -86,7 +92,7 @@ msgstr "標準化"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC4"
msgid "Max amplification:"
-msgstr "最大擴增:"
+msgstr "擴大上限:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC5"
msgid "%"
@@ -94,11 +100,11 @@ msgstr "%"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK6"
msgid "Regain volume"
-msgstr "回復音量"
+msgstr "還原音量"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC6"
msgid "Boost:"
-msgstr "增益:"
+msgstr "提高:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK3"
msgid "Down-sample to 44100 Hz"
@@ -106,22 +112,22 @@ msgstr "降低取樣到 44100 Hz"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK4"
msgid "Audio time shift (ms):"
-msgstr "平移音訊時間 (ms):"
+msgstr "音訊偏移時間 (ms):"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_CHECK1"
msgid "Enable custom channel mapping"
-msgstr "啟用自訂的聲道對應"
+msgstr "開啟自訂的聲道對應"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC1"
-msgid "Speaker configuration for "
-msgstr "揚聲器組態: 給"
+msgid "Speaker configuration for"
+msgstr "喇叭設定給"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC2"
msgid "input channels:"
-msgstr "組聲道"
+msgstr "輸入聲道:"
msgctxt "IDD_PPAGEAUDIOSWITCHER_IDC_STATIC3"
-msgid "Hold shift for immediate changes when clicking something "
+msgid "Hold shift for immediate changes when clicking something"
msgstr "按住 Shift 可以立即反應點選時的改變"
msgctxt "IDD_GOTO_DLG_CAPTION"
@@ -142,7 +148,7 @@ msgstr "前往"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Enter two numbers to jump to a specified frame, the first is the frame number, the second is the frame rate."
-msgstr "輸入兩組數字來跳至指定的影格。第一個數字指的是影格號碼, 第二個數字指的是影格播放速率。"
+msgstr "輸入兩組數字來跳至指定的影格。第一個數字指的是影格號碼, 第二個數字指的是影格更新率。"
msgctxt "IDD_GOTO_DLG_IDC_STATIC"
msgid "Frame"
@@ -150,7 +156,7 @@ msgstr "影格:"
msgctxt "IDD_GOTO_DLG_IDC_OK2"
msgid "Go!"
-msgstr "前往"
+msgstr "前往!"
msgctxt "IDD_OPEN_DLG_CAPTION"
msgid "Open"
@@ -158,7 +164,7 @@ msgstr "開啟"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Type the address of a movie or audio file (on the Internet or your computer) and the player will open it for you."
-msgstr "鍵入影片或是聲音檔的位址 (在網路上或是您的電腦裡), 播放程式就會開啟它。"
+msgstr "鍵入視訊或是音訊檔的位址 (在網路上或是您的電腦裡),播放程式就會開啟它。"
msgctxt "IDD_OPEN_DLG_IDC_STATIC"
msgid "Open:"
@@ -193,8 +199,8 @@ msgid "About"
msgstr "關於"
msgctxt "IDD_ABOUTBOX_IDC_AUTHORS_LINK"
-msgid "Copyright © 2002-2014 see Authors.txt"
-msgstr "Copyright © 2002-2014 請見 Authors.txt 檔案"
+msgid "Copyright © 2002-2017 see Authors.txt"
+msgstr "Copyright © 2002-2017 請見 Authors.txt 檔案"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "This program is freeware and released under the GNU General Public License."
@@ -202,7 +208,7 @@ msgstr "本程式是自由軟體, 並依 GNU General Public License 發行。"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "English translation made by MPC-HC Team"
-msgstr "譯者: Kene Lin"
+msgstr "繁體中文翻譯由 Chien Wei Lin、Kene Lin、Chiahong Hong 製作"
msgctxt "IDD_ABOUTBOX_IDC_STATIC"
msgid "Build information"
@@ -234,7 +240,7 @@ msgstr "名稱:"
msgctxt "IDD_ABOUTBOX_IDC_BUTTON1"
msgid "Copy to clipboard"
-msgstr "複製到剪貼板"
+msgstr "複製到剪貼簿"
msgctxt "IDD_ABOUTBOX_IDOK"
msgid "OK"
@@ -266,11 +272,11 @@ msgstr "顯示完整路徑"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO4"
msgid "File name only"
-msgstr "只有檔案名稱"
+msgstr "只使用檔名"
msgctxt "IDD_PPAGEPLAYER_IDC_RADIO5"
msgid "Don't prefix anything"
-msgstr "不使用前綴字串"
+msgstr "不加字首"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK13"
msgid "Replace file name with title"
@@ -298,19 +304,19 @@ msgstr "貼齊視窗邊緣"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK8"
msgid "Store settings in .ini file"
-msgstr "儲存設定到 INI 檔"
+msgstr "儲存設定到 .ini 檔"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK10"
msgid "Disable \"Open Disc\" menu"
-msgstr "停用 \"開啟光碟\" 選單"
+msgstr "關閉 \"開啟光碟\" 選單"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK9"
msgid "Process priority above normal"
-msgstr "程式優先權調成高於一般"
+msgstr "程序優先權調成高於一般"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK14"
msgid "Enable cover-art support"
-msgstr ""
+msgstr "開啟專輯封面支援"
msgctxt "IDD_PPAGEPLAYER_IDC_STATIC"
msgid "History"
@@ -322,27 +328,27 @@ msgstr "保留最近開啟檔案的記錄"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK2"
msgid "Remember last playlist"
-msgstr "記憶上次的播放清單"
+msgstr "記住上次的播放清單"
msgctxt "IDD_PPAGEPLAYER_IDC_FILE_POS"
msgid "Remember File position"
-msgstr "記憶檔案位置"
+msgstr "記住檔案位置"
msgctxt "IDD_PPAGEPLAYER_IDC_DVD_POS"
msgid "Remember DVD position"
-msgstr "記憶 DVD 位置"
+msgstr "記住 DVD 位置"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK6"
msgid "Remember last window position"
-msgstr "記憶上次的視窗位置"
+msgstr "記住上次的視窗位置"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK7"
msgid "Remember last window size"
-msgstr "記憶上次的視窗大小"
+msgstr "記住上次的視窗大小"
msgctxt "IDD_PPAGEPLAYER_IDC_CHECK11"
msgid "Remember last Pan-n-Scan Zoom"
-msgstr "記憶上次的平移掃描縮放"
+msgstr "記住上次的平移掃描縮放"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "\"Open DVD/BD\" behavior"
@@ -366,7 +372,7 @@ msgstr "選單"
msgctxt "IDD_PPAGEDVD_IDC_RADIO4"
msgid "Audio"
-msgstr "發音"
+msgstr "音訊"
msgctxt "IDD_PPAGEDVD_IDC_RADIO5"
msgid "Subtitles"
@@ -374,7 +380,7 @@ msgstr "字幕"
msgctxt "IDD_PPAGEDVD_IDC_STATIC"
msgid "Additional settings"
-msgstr "額外設定"
+msgstr "其他設定"
msgctxt "IDD_PPAGEDVD_IDC_CHECK2"
msgid "Allow closed captions in \"Line 21 Decoder\""
@@ -425,12 +431,16 @@ msgid "time(s)"
msgstr "次"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
+msgid "Repeat mode:"
+msgstr "重複模式:"
+
+msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "After Playback"
-msgstr ""
+msgstr "播放完後"
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
-msgid "Output"
-msgstr "輸出"
+msgid "Default zoom"
+msgstr "預設縮放"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK5"
msgid "Auto-zoom:"
@@ -466,7 +476,7 @@ msgstr "開啟設定"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK7"
msgid "Use worker thread to construct the filter graph"
-msgstr "使用工作執行緒建立篩選器圖 (Filter Graph)"
+msgstr "使用 Worker 執行緒建立 Filter Graph"
msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK6"
msgid "Report pins which fail to render"
@@ -476,10 +486,6 @@ msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK2"
msgid "Auto-load audio files"
msgstr "自動載入音訊檔案"
-msgctxt "IDD_PPAGEPLAYBACK_IDC_CHECK3"
-msgid "Use the built-in subtitle renderer"
-msgstr "使用內建的字幕渲染器"
-
msgctxt "IDD_PPAGEPLAYBACK_IDC_STATIC"
msgid "Control"
msgstr "控制"
@@ -518,7 +524,7 @@ msgstr "%"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Delay step"
-msgstr ""
+msgstr "延遲間隔"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "ms"
@@ -538,47 +544,47 @@ msgstr "最大材質解析度:"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_NO_SUB_ANIM"
msgid "Never animate the subtitles"
-msgstr ""
+msgstr "永不動畫化字幕"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC5"
msgid "Render at"
-msgstr ""
+msgstr "繪製於"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC6"
msgid "% of the animation"
-msgstr ""
+msgstr "% 的動畫"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC7"
msgid "Animate at"
-msgstr ""
+msgstr "動畫化"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC8"
msgid "% of the video frame rate"
-msgstr ""
+msgstr "% 的視訊影格更新率"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Allow dropping some subpictures if the queue is running late"
-msgstr ""
+msgstr "若佇列延遲時允許丟棄一些子畫面"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Renderer Layout"
-msgstr "渲染器佈局"
+msgstr "繪製器配置"
msgctxt "IDD_PPAGESUBTITLES_IDC_CHECK_SUB_AR_COMPENSATION"
msgid "Apply aspect ratio compensation for anamorphic videos"
-msgstr "套用長寬比至變形的影片中"
+msgstr "套用長寬比至變形的視訊中"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
msgid "Warning"
msgstr "警告"
msgctxt "IDD_PPAGESUBTITLES_IDC_STATIC"
-msgid "If you override and enable full-screen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your cpu."
+msgid "If you override and enable fullscreen antialiasing somewhere at your videocard's settings, subtitles aren't going to look any better but it will surely eat your CPU."
msgstr "如果您覆寫並啟用在顯示卡裡的全螢幕反鋸齒 (FSAA) 設定, 字幕不會變得比較好看, 卻會吃更多的 CPU 資源。"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC2"
msgid "File extensions"
-msgstr "副檔名"
+msgstr "檔案副檔名"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON2"
msgid "Default"
@@ -594,15 +600,15 @@ msgstr "檔案關聯"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK8"
msgid "Use the format-specific icons"
-msgstr ""
+msgstr "為不同格式使用對應的圖示"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON1"
msgid "Run as &administrator"
-msgstr ""
+msgstr "以系統管理員身分執行 (&a)"
msgctxt "IDD_PPAGEFORMATS_IDC_BUTTON7"
msgid "Set as &default program"
-msgstr ""
+msgstr "以預設關聯程式來設定 (&d)"
msgctxt "IDD_PPAGEFORMATS_IDC_STATIC"
msgid "Real-Time Streaming Protocol handler (for rtsp://... URLs)"
@@ -642,7 +648,7 @@ msgstr "自動播放"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK1"
msgid "Video"
-msgstr "影片"
+msgstr "視訊"
msgctxt "IDD_PPAGEFORMATS_IDC_CHECK2"
msgid "Music"
@@ -666,7 +672,7 @@ msgstr "預設值"
msgctxt "IDD_PPAGETWEAKS_IDC_FASTSEEK_CHECK"
msgid "Fast seek (on keyframe)"
-msgstr "快速搜尋 (於關鍵影格)"
+msgstr "快速搜尋 (使用關鍵影格)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK2"
msgid "Show chapter marks in seek bar"
@@ -674,22 +680,22 @@ msgstr "在搜尋列中顯示章節標記"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK4"
msgid "Display \"Now Playing\" information in Skype's mood message"
-msgstr "顯示 \"Now Playing\" 的訊息於 Skype 心情小語"
+msgstr "顯示 \"現在播放\" 的資訊於 Skype 心情小語"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK6"
msgid "Prevent minimizing the player when in fullscreen on a non default monitor"
-msgstr "避免在非預設顯示器全螢幕時最小化"
+msgstr "避免在非預設顯示器全螢幕播放時最小化"
-msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_WIN7"
-msgid "Use Windows 7 Taskbar features"
-msgstr "使用 Windows 7 工作列功能"
+msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_ENHANCED_TASKBAR"
+msgid "Use enhanced taskbar features"
+msgstr "使用加強的工作列功能"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK7"
-msgid "Open next/previous file in folder on \"Skip back/forward\" when there is only one item in playlist"
+msgid "Open previous/next file in folder on \"Skip back/forward\" when there is only one item in playlist"
msgstr "當播放清單中只有一個項目時執行 \"前一段/後一段\" 時開啟前/後一個檔案"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK8"
-msgid "Use time tooltip:"
+msgid "Show time tooltip:"
msgstr "使用時間工具提示:"
msgctxt "IDD_PPAGETWEAKS_IDC_STATIC"
@@ -698,7 +704,7 @@ msgstr "OSD 字型:"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK_LCD"
msgid "Enable Logitech LCD support (experimental)"
-msgstr "啟用 Logitech LCD 支援 (實驗性)"
+msgstr "開啟 Logitech LCD 支援 (實驗性)"
msgctxt "IDD_PPAGETWEAKS_IDC_CHECK3"
msgid "Auto-hide the mouse pointer during playback in windowed mode"
@@ -758,11 +764,11 @@ msgstr "檔案大小:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Media length:"
-msgstr "時間長度:"
+msgstr "媒體長度:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Video size:"
-msgstr "畫面大小:"
+msgstr "視訊大小:"
msgctxt "IDD_FILEPROPDETAILS_IDC_STATIC"
msgid "Created:"
@@ -802,7 +808,7 @@ msgstr "請選擇捷徑的名稱:"
msgctxt "IDD_FAVADD_IDC_CHECK1"
msgid "Remember position"
-msgstr "記憶位置"
+msgstr "記住位置"
msgctxt "IDD_FAVADD_IDCANCEL"
msgid "Cancel"
@@ -842,7 +848,7 @@ msgstr "確認"
msgctxt "IDD_PNSPRESET_DLG_CAPTION"
msgid "Pan&Scan Presets"
-msgstr "平移掃描先期設定"
+msgstr "平移和掃描初始設定"
msgctxt "IDD_PNSPRESET_DLG_IDC_BUTTON2"
msgid "New"
@@ -898,7 +904,7 @@ msgstr "警告"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC1"
msgid "MPC-HC could not render some of the pins in the graph, you may not have the needed codecs or filters installed on the system."
-msgstr "MPC-HC 無法繪製篩選器圖裡的某些腳位, 您的系統可能沒有安裝需要的編解碼器或篩選器。"
+msgstr "MPC-HC 無法繪製 Filter Graph 裡的某些腳位, 您的系統可能沒有安裝需要的編解碼器或篩選器。"
msgctxt "IDD_MEDIATYPES_DLG_IDC_STATIC2"
msgid "The following pin(s) failed to find a connectable filter:"
@@ -910,7 +916,7 @@ msgstr "關閉"
msgctxt "IDD_SAVE_DLG_CAPTION"
msgid "Saving..."
-msgstr "儲存..."
+msgstr "正在儲存..."
msgctxt "IDD_SAVE_DLG_IDCANCEL"
msgid "Cancel"
@@ -934,11 +940,11 @@ msgstr "毫秒"
msgctxt "IDD_SAVESUBTITLESFILEDIALOGTEMPL_IDC_CHECK1"
msgid "Save custom style"
-msgstr "保存自訂樣式"
+msgstr "儲存自訂樣式"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr ""
+msgstr "JPEG 品質:"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Thumbnails:"
@@ -950,7 +956,7 @@ msgstr "列"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "columns"
-msgstr "行"
+msgstr "欄"
msgctxt "IDD_SAVETHUMBSDIALOGTEMPL_IDC_STATIC"
msgid "Image width:"
@@ -986,7 +992,7 @@ msgstr "字型"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Spacing"
-msgstr "空白"
+msgstr "間距"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Angle (z,°)"
@@ -1006,7 +1012,7 @@ msgstr "邊框樣式"
msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO1"
msgid "Outline"
-msgstr "邊線"
+msgstr "輪廓"
msgctxt "IDD_PPAGESUBSTYLE_IDC_RADIO2"
msgid "Opaque box"
@@ -1014,7 +1020,7 @@ msgstr "不透明框"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Width"
-msgstr "邊框寬度"
+msgstr "寬度"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Shadow"
@@ -1042,7 +1048,7 @@ msgstr "下"
msgctxt "IDD_PPAGESUBSTYLE_IDC_CHECK_RELATIVETO"
msgid "Position subtitles relative to the video frame"
-msgstr "放置字幕於視訊畫面相對位置"
+msgstr "放置字幕於視訊影格相對位置"
msgctxt "IDD_PPAGESUBSTYLE_IDC_STATIC"
msgid "Colors && Transparency"
@@ -1074,7 +1080,7 @@ msgstr "連結 Alpha 通道"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "If you would like to use the stand-alone versions of these filters or another replacement, disable them here."
-msgstr "如果您想使用這些篩選器的獨立版本或是其它的替代品, 請先在此停用。"
+msgstr "如果您想使用這些篩選器的獨立版本或是其它的替代品,請先在此關閉。"
msgctxt "IDD_PPAGEINTERNALFILTERS_IDC_STATIC"
msgid "Source Filters"
@@ -1129,8 +1135,8 @@ msgid "Audio Renderer"
msgstr "音訊譜製器"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "VMR-7/VMR-9 (renderless) and EVR (CP) settings"
-msgstr "VMR-7/VMR-9 (無轉換) 與 EVR 自訂呈現設定"
+msgid "VMR-9 (renderless) and EVR (CP) settings"
+msgstr "VMR-9 (renderless) 與 EVR (CP) 設定"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Surface:"
@@ -1173,8 +1179,8 @@ msgid "DXVA"
msgstr "DXVA"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "Subtitles *"
-msgstr "字幕 *"
+msgid "Subtitles"
+msgstr "字幕"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Screenshot"
@@ -1182,15 +1188,19 @@ msgstr "螢幕截圖"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Shaders"
-msgstr "Shader"
+msgstr "著色器"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
msgid "Rotation"
msgstr "旋轉"
msgctxt "IDD_PPAGEOUTPUT_IDC_STATIC"
-msgid "* External filters (such as VSFilter) can display subtitles on all renderers."
-msgstr "* 外部篩選器 (例如 VSFilter) 可以在任何繪製器中顯示字幕。"
+msgid "Subtitle Renderer"
+msgstr "字幕繪製器"
+
+msgctxt "IDD_PPAGEOUTPUT_IDC_CACHESHADERS"
+msgid "Cache compiled Shaders"
+msgstr "快取已編譯的著色器"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK1"
msgid "Listen on port:"
@@ -1202,19 +1212,23 @@ msgstr "於網頁瀏覽器開啟..."
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK3"
msgid "Enable compression"
-msgstr "啟用壓縮"
+msgstr "開啟壓縮"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK5"
msgid "Allow access from localhost only"
msgstr "只允許從本機存取"
+msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK6"
+msgid "Enable preview"
+msgstr "開啟預覽"
+
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK2"
msgid "Print debug information"
msgstr "列印偵錯資訊"
msgctxt "IDD_PPAGEWEBSERVER_IDC_CHECK4"
msgid "Serve pages from:"
-msgstr "服務頁面來自:"
+msgstr "頁面提供自:"
msgctxt "IDD_PPAGEWEBSERVER_IDC_BUTTON1"
msgid "Browse..."
@@ -1233,17 +1247,45 @@ msgid "CGI handlers: (.ext1=path1;.ext2=path2;...)"
msgstr "CGI 處理器: (.ext1=path1;.ext2=path2;...)"
msgctxt "IDD_SUBTITLEDL_DLG_CAPTION"
-msgid "Subtitles available online"
-msgstr "線上有可用的字幕"
-
-msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
-msgid "Download && Open"
-msgstr "下載並開啟"
+msgid "Download subtitles"
+msgstr "下載字幕"
msgctxt "IDD_SUBTITLEDL_DLG_IDC_CHECK1"
msgid "Replace currently loaded subtitles"
msgstr "取代目前載入的字幕"
+msgctxt "IDD_SUBTITLEDL_DLG_IDOK"
+msgid "Download"
+msgstr "下載"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON1"
+msgid "Refresh"
+msgstr "重新整理"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON2"
+msgid "Abort"
+msgstr "中止"
+
+msgctxt "IDD_SUBTITLEDL_DLG_IDC_BUTTON3"
+msgid "Options"
+msgstr "選項"
+
+msgctxt "IDD_SUBTITLEUP_DLG_CAPTION"
+msgid "Upload subtitles"
+msgstr "上傳字幕"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDOK"
+msgid "Upload"
+msgstr "上傳"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON1"
+msgid "Abort"
+msgstr "中止"
+
+msgctxt "IDD_SUBTITLEUP_DLG_IDC_BUTTON2"
+msgid "Options"
+msgstr "選項"
+
msgctxt "IDD_FILEPROPRES_IDC_BUTTON1"
msgid "Save As..."
msgstr "儲存為..."
@@ -1278,11 +1320,11 @@ msgstr "更新檢查"
msgctxt "IDD_PPAGEMISC_IDC_CHECK1"
msgid "Enable automatic update check"
-msgstr "啟用自動更新檢查"
+msgstr "開啟自動更新檢查"
msgctxt "IDD_PPAGEMISC_IDC_STATIC5"
-msgid "Delay between each check:"
-msgstr "每次檢查間隔:"
+msgid "Check every:"
+msgstr "檢查頻率:"
msgctxt "IDD_PPAGEMISC_IDC_STATIC6"
msgid "day(s)"
@@ -1398,11 +1440,11 @@ msgstr "切換頻道的方法:"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST11"
msgid "Rebuild filter graph"
-msgstr "重建篩選器圖"
+msgstr "重建 Filter Graph"
msgctxt "IDD_PPAGECAPTURE_IDC_PPAGECAPTURE_ST12"
msgid "Stop filter graph"
-msgstr "停止篩選器圖"
+msgstr "停止 Filter Graph"
msgctxt "IDD_PPAGESYNC_IDC_SYNCVIDEO"
msgid "Sync video to display"
@@ -1426,7 +1468,7 @@ msgstr "行"
msgctxt "IDD_PPAGESYNC_IDC_STATIC4"
msgid "columns"
-msgstr "列"
+msgstr "欄"
msgctxt "IDD_PPAGESYNC_IDC_SYNCNEAREST"
msgid "Present at nearest VSync"
@@ -1530,7 +1572,7 @@ msgstr "優先使用強迫和/或預設字幕軌道"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK2"
msgid "Prefer external subtitles over embedded subtitles"
-msgstr "外部字幕較內嵌字幕優先"
+msgstr "優先使用外部字幕替代內嵌字幕"
msgctxt "IDD_PPAGESUBMISC_IDC_CHECK3"
msgid "Ignore embedded subtitles"
@@ -1545,16 +1587,28 @@ msgid "Reset"
msgstr "重設"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Online database"
-msgstr "線上資料庫"
+msgid "Online search, download and upload subtitles"
+msgstr "線上搜尋、下載和上傳字幕"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK4"
+msgid "Automatically search and download subtitles if none are found locally"
+msgstr "如於本機找不到字幕,則自動搜尋並下載"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK5"
+msgid "Prefer subtitles for hearing impaired (when indicated by subtitles provider)"
+msgstr "偏好使用聽力受損專用字幕 (當字幕提供者有標示時)"
+
+msgctxt "IDD_PPAGESUBMISC_IDC_STATIC1"
+msgid "Ignore files containing any of the following word(s):"
+msgstr "忽略任何包含以下字詞的檔案:"
msgctxt "IDD_PPAGESUBMISC_IDC_STATIC"
-msgid "Base URL of the online subtitle database:"
-msgstr "線上字幕資料庫的基礎網址:"
+msgid "Languages in order of preference:"
+msgstr "語言偏好順序:"
-msgctxt "IDD_PPAGESUBMISC_IDC_BUTTON2"
-msgid "Test"
-msgstr "測試"
+msgctxt "IDD_PPAGESUBMISC_IDC_CHECK6"
+msgid "Automatically upload active subtitles at the end of video playback"
+msgstr "於視訊播放結束時自動上傳使用中的字幕"
msgctxt "IDD_UPDATE_DIALOG_CAPTION"
msgid "Update Checker"
@@ -1574,11 +1628,11 @@ msgstr "忽略此次更新(&I)"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shaders contain special effects which can be added to the video rendering process."
-msgstr "Shader 包含可加入至視訊渲染過程的特別效果。"
+msgstr "著色器中含有可加入至視訊繪製過程的特效。"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON12"
msgid "Add shader file"
-msgstr "加入 shader 檔案"
+msgstr "加入著色器檔案"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON13"
msgid "Remove"
@@ -1586,15 +1640,15 @@ msgstr "移除"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON1"
msgid "Add to pre-resize"
-msgstr "加入至 pre-resize"
+msgstr "加入至 Pre-resize"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON2"
msgid "Add to post-resize"
-msgstr "加入至 post-resize"
+msgstr "加入至 Post-resize"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Shader presets"
-msgstr "Shader 先期設定"
+msgstr "著色器初始設定"
msgctxt "IDD_PPAGESHADERS_IDC_BUTTON3"
msgid "Load"
@@ -1610,15 +1664,15 @@ msgstr "移除"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active pre-resize shaders"
-msgstr "活躍的 pre-resize shaders"
+msgstr "使用中的 Pre-resize 著色器"
msgctxt "IDD_PPAGESHADERS_IDC_STATIC"
msgid "Active post-resize shaders"
-msgstr "活躍的 post-resize shader"
+msgstr "使用中的 Post-resize 著色器"
msgctxt "IDD_DEBUGSHADERS_DLG_CAPTION"
msgid "Debug Shaders"
-msgstr "偵錯 Shader"
+msgstr "著色器偵錯"
msgctxt "IDD_DEBUGSHADERS_DLG_IDC_STATIC"
msgid "Debug Information"
@@ -1642,29 +1696,109 @@ msgstr "PS 3.0"
msgctxt "IDD_PPAGEADVANCED_IDC_STATIC"
msgid "Advanced Settings, do not edit unless you know what you are doing."
-msgstr ""
+msgstr "進階設定, 除非您已了解項目的功能, 否則請不要編輯任何項目。"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO1"
msgid "True"
-msgstr ""
+msgstr "啟用"
msgctxt "IDD_PPAGEADVANCED_IDC_RADIO2"
msgid "False"
-msgstr ""
+msgstr "停用"
msgctxt "IDD_PPAGEADVANCED_IDC_BUTTON1"
msgid "Default"
msgstr "預設"
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Device"
+msgstr "裝置"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK1"
+msgid "Exclusive mode"
+msgstr "獨佔模式"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK2"
+msgid "Allow bitstreaming"
+msgstr "允許位元流"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Options"
+msgstr "選項"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_CHECK3"
+msgid "Enable stereo crossfeed (for headphones)"
+msgstr "開啟立體聲 Crossfeed (適用於耳機)"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON1"
+msgid "C. Moy"
+msgstr "C. Moy"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_BUTTON2"
+msgid "J. Meier"
+msgstr "J. Meier"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC1"
+msgid "Cut-off:"
+msgstr "切斷:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC3"
+msgid "Level:"
+msgstr "層級:"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "Note"
+msgstr "備註"
+
+msgctxt "IDD_PPAGEAUDIORENDERER_IDC_STATIC"
+msgid "To minimize audio distortion, it is recommended to keep player volume at around 85% when playing loud lossy-encoded content."
+msgstr "為使音訊失真降至最低,當回放大音量有損編碼內容時,推薦將播放器音量設定為 85% 左右。"
+
msgctxt "IDD_SAVEIMAGEDIALOGTEMPL_IDC_STATIC"
msgid "JPEG quality:"
-msgstr ""
+msgstr "JPEG 品質:"
msgctxt "IDD_CMD_LINE_HELP_CAPTION"
msgid "Command line help"
-msgstr ""
+msgstr "命令列說明"
msgctxt "IDD_CMD_LINE_HELP_IDOK"
msgid "OK"
msgstr "確認"
+msgctxt "IDD_CRASH_REPORTER_CAPTION"
+msgid "Crash reporter"
+msgstr "錯誤回報"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC"
+msgid "We are sorry, it seems MPC-HC just crashed. :("
+msgstr "我們十分抱歉,MPC-HC 看來剛剛崩潰。:("
+
+msgctxt "IDD_CRASH_REPORTER_IDC_CHECK1"
+msgid "Send a bug report to help us diagnose and fix the problem."
+msgstr "傳送錯誤報告以幫助我們診斷並修復此問題。"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC1"
+msgid "Optional information"
+msgstr "選用資訊"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC2"
+msgid "Email:"
+msgstr "電子郵件:"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC3"
+msgid "Your email address is optional and will only be used if the developers need to contact you for more information."
+msgstr "您可以選擇性填寫電子郵件地址, 然而只有在開發人員需要聯絡您以取得更多資訊時, 才會向您傳送郵件。"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_STATIC4"
+msgid "Problem description (use English only):"
+msgstr "問題描述 (請使用英文):"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON1"
+msgid "Restart MPC-HC"
+msgstr "重新啟動 MPC-HC"
+
+msgctxt "IDD_CRASH_REPORTER_IDC_BUTTON2"
+msgid "Quit MPC-HC"
+msgstr "結束 MPC-HC"
+
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.menus.po b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.menus.po
index 1c1b1e500..01ff129c7 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.menus.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.menus.po
@@ -1,16 +1,21 @@
# MPC-HC - Strings extracted from menus
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# 洪嘉鴻 <jerry9030@gmail.com>, 2015
+# Chien Wei Lin <cwlin0416@gmail.com>, 2016
# kenelin <kenelin@gmail.com>, 2013
+# Ken <ken670128@yahoo.com.tw>, 2015
# Peter Chen <petercpg@gmail.com>, 2014
+# wck317 <wck317@pchome.com.tw>, 2017
+# 洪嘉鴻 <jerry9030@gmail.com>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-08-19 21:10:25+0000\n"
-"PO-Revision-Date: 2014-08-20 10:01+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/mpc-hc/language/zh_TW/)\n"
+"POT-Creation-Date: 2016-01-17 21:31:34+0000\n"
+"PO-Revision-Date: 2017-06-08 03:02+0000\n"
+"Last-Translator: wck317 <wck317@pchome.com.tw>\n"
+"Language-Team: Chinese (Taiwan) (http://www.transifex.com/mpc-hc/mpc-hc/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -39,7 +44,7 @@ msgstr "開啟裝置(&V)..."
msgctxt "ID_FILE_OPENDIRECTORY"
msgid "Open Dir&ectory..."
-msgstr "開啟目錄..."
+msgstr "開啟目錄(&E)..."
msgctxt "ID_FILE_OPENDISC"
msgid "O&pen Disc"
@@ -47,7 +52,7 @@ msgstr "開啟光碟(&P)"
msgctxt "ID_RECENT_FILES"
msgid "Recent &Files"
-msgstr "最近的檔案"
+msgstr "最近的檔案(&F)"
msgctxt "ID_FILE_CLOSE_AND_RESTORE"
msgid "&Close"
@@ -65,29 +70,25 @@ msgctxt "ID_FILE_SAVE_THUMBNAILS"
msgid "Save &Thumbnails..."
msgstr "儲存縮圖(&T)..."
-msgctxt "ID_FILE_LOAD_SUBTITLE"
-msgid "&Load Subtitle..."
+msgctxt "POPUP"
+msgid "S&ubtitles"
+msgstr "字幕"
+
+msgctxt "ID_FILE_SUBTITLES_LOAD"
+msgid "&Load Subtitles..."
msgstr "載入字幕(&L)..."
-msgctxt "ID_FILE_SAVE_SUBTITLE"
-msgid "Save S&ubtitle..."
+msgctxt "ID_FILE_SUBTITLES_SAVE"
+msgid "Save S&ubtitles..."
msgstr "儲存字幕(&U)..."
-msgctxt "POPUP"
-msgid "Subtitle Data&base"
-msgstr "字幕資料庫(&B)"
-
-msgctxt "ID_FILE_ISDB_SEARCH"
-msgid "&Search..."
-msgstr "搜尋(&S)..."
+msgctxt "ID_FILE_SUBTITLES_DOWNLOAD"
+msgid "&Download Subtitles..."
+msgstr "下載字幕(&D)..."
-msgctxt "ID_FILE_ISDB_UPLOAD"
-msgid "&Upload..."
-msgstr "上傳(&U)..."
-
-msgctxt "ID_FILE_ISDB_DOWNLOAD"
-msgid "&Download..."
-msgstr "下載(&D)..."
+msgctxt "ID_FILE_SUBTITLES_UPLOAD"
+msgid "&Upload Subtitles..."
+msgstr "上傳字幕(&U)..."
msgctxt "ID_FILE_PROPERTIES"
msgid "P&roperties"
@@ -95,7 +96,7 @@ msgstr "內容(&R)"
msgctxt "ID_FILE_EXIT"
msgid "E&xit"
-msgstr "離開(&X)"
+msgstr "結束(&X)"
msgctxt "POPUP"
msgid "&View"
@@ -103,15 +104,15 @@ msgstr "檢視(&V)"
msgctxt "ID_VIEW_CAPTIONMENU"
msgid "Caption&&Menu"
-msgstr "標題選單"
+msgstr "標題選單(&M)"
msgctxt "ID_VIEW_SEEKER"
msgid "See&k Bar"
-msgstr "搜尋列(&S)"
+msgstr "搜尋列(&K)"
msgctxt "ID_VIEW_CONTROLS"
msgid "&Controls"
-msgstr "控制項(&R)"
+msgstr "控制項(&C)"
msgctxt "ID_VIEW_INFORMATION"
msgid "&Information"
@@ -119,7 +120,7 @@ msgstr "資訊列(&I)"
msgctxt "ID_VIEW_STATISTICS"
msgid "&Statistics"
-msgstr "統計列(&T)"
+msgstr "統計列(&S)"
msgctxt "ID_VIEW_STATUS"
msgid "St&atus"
@@ -127,35 +128,35 @@ msgstr "狀態列(&A)"
msgctxt "ID_VIEW_SUBRESYNC"
msgid "Su&bresync"
-msgstr "字幕同步"
+msgstr "字幕同步(&B)"
msgctxt "ID_VIEW_PLAYLIST"
msgid "Pla&ylist"
-msgstr "播放清單"
+msgstr "播放清單(&Y)"
msgctxt "ID_VIEW_CAPTURE"
msgid "Captu&re"
-msgstr "擷取"
+msgstr "擷取(&R)"
msgctxt "ID_VIEW_NAVIGATION"
msgid "Na&vigation"
-msgstr "導覽"
+msgstr "導覽(&V)"
msgctxt "ID_VIEW_DEBUGSHADERS"
msgid "&Debug Shaders"
-msgstr "偵錯 Shader (&D)"
+msgstr "著色器除錯(&D)"
msgctxt "POPUP"
msgid "&Presets..."
-msgstr "先期設定(&P)..."
+msgstr "初始設定(&P)..."
msgctxt "ID_VIEW_PRESETS_MINIMAL"
msgid "&Minimal"
-msgstr "最小(&M)"
+msgstr "極簡(&M)"
msgctxt "ID_VIEW_PRESETS_COMPACT"
msgid "&Compact"
-msgstr "輕巧(&C)"
+msgstr "簡潔(&C)"
msgctxt "ID_VIEW_PRESETS_NORMAL"
msgid "&Normal"
@@ -183,63 +184,67 @@ msgstr "200% (&2)"
msgctxt "ID_VIEW_ZOOM_AUTOFIT"
msgid "Auto &Fit"
-msgstr "自動調整"
+msgstr "自動調整(&F)"
msgctxt "ID_VIEW_ZOOM_AUTOFIT_LARGER"
msgid "Auto Fit (&Larger Only)"
-msgstr "自動調整 (僅限解像度過大時)"
+msgstr "自動調整 (僅限解像度過大時) (&L)"
msgctxt "POPUP"
msgid "R&enderer Settings"
-msgstr "繪製器設定"
+msgstr "繪製器 (Renderer) 設定(&E)"
msgctxt "ID_VIEW_TEARING_TEST"
msgid "&Tearing Test"
-msgstr "抖動測試(&T)"
+msgstr "撕裂測試(&T)"
-msgctxt "ID_VIEW_DISPLAYSTATS"
-msgid "&Display Stats"
+msgctxt "ID_VIEW_DISPLAY_RENDERER_STATS"
+msgid "&Display Statistics"
msgstr "顯示統計(&D)"
-msgctxt "ID_VIEW_REMAINING_TIME"
-msgid "&Remaining Time"
-msgstr "剩餘時間"
+msgctxt "ID_VIEW_OSD_DISPLAY_TIME"
+msgid "Display Current T&ime"
+msgstr "顯示目前時間(&I)"
+
+msgctxt "ID_VIEW_OSD_SHOW_FILENAME"
+msgid "Show &File Name"
+msgstr "顯示檔案名稱(&F)"
msgctxt "POPUP"
msgid "&Output Range"
-msgstr "輸出範圍"
+msgstr "輸出範圍(&O)"
msgctxt "ID_VIEW_EVROUTPUTRANGE_0_255"
msgid "&0 - 255"
-msgstr "0 - 255"
+msgstr "&0 - 255"
msgctxt "ID_VIEW_EVROUTPUTRANGE_16_235"
msgid "&16 - 235"
-msgstr "16 - 235"
+msgstr "&16 - 235"
msgctxt "POPUP"
msgid "&Presentation"
-msgstr "呈現"
+msgstr "呈現(&P)"
msgctxt "ID_VIEW_D3DFULLSCREEN"
msgid "D3D Fullscreen &Mode"
-msgstr "D3D 全螢幕模式"
+msgstr "D3D 全螢幕模式(&M)"
msgctxt "ID_VIEW_FULLSCREENGUISUPPORT"
msgid "D3D Fullscreen &GUI Support"
-msgstr "D3D 全螢幕 GUI 支援"
+msgstr "D3D 全螢幕 GUI 支援(&G)"
msgctxt "ID_VIEW_HIGHCOLORRESOLUTION"
msgid "10-bit &RGB Output"
-msgstr "10-bit RGB 輸出"
+msgstr "10位元 RGB 輸出(&R)"
msgctxt "ID_VIEW_FORCEINPUTHIGHCOLORRESOLUTION"
msgid "Force 10-bit RGB &Input"
-msgstr "強制 10-bit RGB 輸入"
+msgstr "強制 10位元 RGB 輸入(&I)"
msgctxt "ID_VIEW_FULLFLOATINGPOINTPROCESSING"
msgid "&Full Floating Point Processing"
-msgstr "全浮點處理"
+msgstr "全浮點處理(&F)"
msgctxt "ID_VIEW_HALFFLOATINGPOINTPROCESSING"
msgid "&Half Floating Point Processing"
@@ -247,79 +252,79 @@ msgstr "半浮點處理"
msgctxt "ID_VIEW_DISABLEDESKTOPCOMPOSITION"
msgid "Disable desktop composition (&Aero)"
-msgstr "停用桌面轉譯 (Aero)"
+msgstr "停用桌面佈景 (&Aero)"
msgctxt "ID_VIEW_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time &Correction"
-msgstr "啟用影格時間校正"
+msgstr "啟用影格時間校正(&C)"
msgctxt "POPUP"
msgid "&Color Management"
-msgstr "色彩管理"
+msgstr "色彩管理(&C)"
msgctxt "ID_VIEW_CM_ENABLE"
msgid "&Enable"
-msgstr "啟用"
+msgstr "啟用(&E)"
msgctxt "POPUP"
msgid "&Input Type"
-msgstr "輸入類型"
+msgstr "輸入類型(&I)"
msgctxt "ID_VIEW_CM_INPUT_AUTO"
msgid "&Auto-Detect"
-msgstr "自動偵測"
+msgstr "自動偵測(&A)"
msgctxt "ID_VIEW_CM_INPUT_HDTV"
msgid "&HDTV"
-msgstr "HDTV"
+msgstr "高畫質顯示器(&H)"
msgctxt "ID_VIEW_CM_INPUT_SDTV_NTSC"
msgid "SDTV &NTSC"
-msgstr "SDTV NTSC"
+msgstr "NTSC 標準畫質顯示器(&N)"
msgctxt "ID_VIEW_CM_INPUT_SDTV_PAL"
msgid "SDTV &PAL"
-msgstr "SDTV PAL"
+msgstr "PAL 標準畫質顯示器(&P)"
msgctxt "POPUP"
msgid "Ambient &Light"
-msgstr "環境光"
+msgstr "環境光(&L)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_BRIGHT"
msgid "&Bright (2.2 Gamma)"
-msgstr "明亮 (2.2 Gamma)"
+msgstr "明亮 (2.2 Gamma) (&B)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DIM"
msgid "&Dim (2.35 Gamma)"
-msgstr "微暗 (2.35 Gamma)"
+msgstr "微暗 (2.35 Gamma) (&D)"
msgctxt "ID_VIEW_CM_AMBIENTLIGHT_DARK"
msgid "D&ark (2.4 Gamma)"
-msgstr "暗 (2.4 Gamma)"
+msgstr "暗 (2.4 Gamma) (&A)"
msgctxt "POPUP"
msgid "&Rendering Intent"
-msgstr "色彩對應方式"
+msgstr "色彩對應方式(&R)"
msgctxt "ID_VIEW_CM_INTENT_PERCEPTUAL"
msgid "&Perceptual"
-msgstr "知覺"
+msgstr "知覺(&P)"
msgctxt "ID_VIEW_CM_INTENT_RELATIVECOLORIMETRIC"
msgid "&Relative Colorimetric"
-msgstr "相對色度"
+msgstr "相對色度(&R)"
msgctxt "ID_VIEW_CM_INTENT_SATURATION"
msgid "&Saturation"
-msgstr "飽和度"
+msgstr "飽和度(&S)"
msgctxt "ID_VIEW_CM_INTENT_ABSOLUTECOLORIMETRIC"
msgid "&Absolute Colorimetric"
-msgstr "絕對色度"
+msgstr "絕對色度(&A)"
msgctxt "POPUP"
msgid "&VSync"
-msgstr "垂直同步"
+msgstr "垂直同步(&V)"
msgctxt "ID_VIEW_VSYNC"
msgid "&VSync"
@@ -327,11 +332,11 @@ msgstr "垂直同步(&V)"
msgctxt "ID_VIEW_VSYNCACCURATE"
msgid "&Accurate VSync"
-msgstr "精確式垂直同步"
+msgstr "精確式垂直同步(&A)"
msgctxt "ID_VIEW_ALTERNATIVEVSYNC"
msgid "A&lternative VSync"
-msgstr "替代式垂直同步"
+msgstr "替代式垂直同步(&L)"
msgctxt "ID_VIEW_VSYNCOFFSET_DECREASE"
msgid "&Decrease VSync Offset"
@@ -343,35 +348,35 @@ msgstr "增加垂直同步偏移量(&I)"
msgctxt "POPUP"
msgid "&GPU Control"
-msgstr "GPU 控制"
+msgstr "GPU 控制(&G)"
msgctxt "ID_VIEW_FLUSHGPU_BEFOREVSYNC"
msgid "Flush GPU &before VSync"
-msgstr "在垂直同步之前清空 GPU"
+msgstr "在垂直同步之前清空 GPU (&B)"
msgctxt "ID_VIEW_FLUSHGPU_AFTERPRESENT"
msgid "Flush GPU &after Present"
-msgstr "在呈現之後清空 GPU"
+msgstr "在呈現之後清空 GPU (&A)"
msgctxt "ID_VIEW_FLUSHGPU_WAIT"
msgid "&Wait for flushes"
-msgstr "等待清空"
+msgstr "等待清空(&W)"
msgctxt "POPUP"
msgid "R&eset"
-msgstr "重設"
+msgstr "重設(&E)"
msgctxt "ID_VIEW_RESET_DEFAULT"
msgid "Reset to &default renderer settings"
-msgstr "重設為預設的繪製器設定"
+msgstr "重設為預設的繪製器設定(˙&D)"
msgctxt "ID_VIEW_RESET_OPTIMAL"
msgid "Reset to &optimal renderer settings"
-msgstr "重設為最佳的繪製器設定"
+msgstr "重設為最佳的繪製器設定(&O)"
msgctxt "POPUP"
msgid "Video &Frame"
-msgstr "視訊畫面(&V)"
+msgstr "視訊影格(&F)"
msgctxt "ID_VIEW_VF_HALF"
msgid "&Half Size"
@@ -405,41 +410,41 @@ msgctxt "ID_VIEW_VF_FROMOUTSIDE"
msgid "Touch Window From &Outside"
msgstr "由外貼齊視窗(&O)"
-msgctxt "ID_VIEW_VF_KEEPASPECTRATIO"
-msgid "&Keep Aspect Ratio"
-msgstr "維持長寬比例(&K)"
-
msgctxt "POPUP"
-msgid "Override &Aspect Ratio"
-msgstr "覆寫長寬比例"
+msgid "&Aspect Ratio"
+msgstr "長寬比(&A)"
-msgctxt "ID_ASPECTRATIO_SOURCE"
-msgid "&Default"
-msgstr "預設值"
+msgctxt "ID_ASPECTRATIO_DAR"
+msgid "&Default (DAR)"
+msgstr "預設 (DAR) (&D)"
msgctxt "ID_ASPECTRATIO_4_3"
msgid "&4:3"
-msgstr "4:3"
+msgstr "&4:3"
msgctxt "ID_ASPECTRATIO_5_4"
msgid "&5:4"
-msgstr "5:4"
+msgstr "&5:4"
msgctxt "ID_ASPECTRATIO_16_9"
msgid "&16:9"
-msgstr "16:9"
+msgstr "&16:9"
msgctxt "ID_ASPECTRATIO_235_100"
msgid "&235:100"
-msgstr "235:100"
+msgstr "&235:100"
msgctxt "ID_ASPECTRATIO_185_100"
msgid "1&85:100"
-msgstr "185:100"
+msgstr "1&85:100"
+
+msgctxt "ID_ASPECTRATIO_SAR"
+msgid "Assume &square pixels (SAR)"
+msgstr "假設正方型像素 (SAR) (&s)"
msgctxt "ID_VIEW_VF_COMPMONDESKARDIFF"
msgid "&Correct Monitor/Desktop AR Diff"
-msgstr "修正顯示器/桌面的長寬比例差異"
+msgstr "修正顯示器/桌面的長寬比例差異(&C)"
msgctxt "POPUP"
msgid "Pa&n&&Scan"
@@ -447,55 +452,55 @@ msgstr "平移掃描(&C)"
msgctxt "ID_VIEW_INCSIZE"
msgid "&Increase Size"
-msgstr "增加大小"
+msgstr "增加大小(&I)"
msgctxt "ID_VIEW_DECSIZE"
msgid "&Decrease Size"
-msgstr "降低大小"
+msgstr "減少大小(&D)"
msgctxt "ID_VIEW_INCWIDTH"
msgid "I&ncrease Width"
-msgstr "增加寬度"
+msgstr "增加寬度(&N)"
msgctxt "ID_VIEW_DECWIDTH"
msgid "D&ecrease Width"
-msgstr "降低寬度"
+msgstr "減少寬度(&E)"
msgctxt "ID_VIEW_INCHEIGHT"
msgid "In&crease Height"
-msgstr "增加高度"
+msgstr "增加高度(&C)"
msgctxt "ID_VIEW_DECHEIGHT"
msgid "Decre&ase Height"
-msgstr "降低高度"
+msgstr "減少高度(&A)"
msgctxt "ID_PANSCAN_MOVERIGHT"
msgid "Move &Right"
-msgstr "右移"
+msgstr "右移(&R)"
msgctxt "ID_PANSCAN_MOVELEFT"
msgid "Move &Left"
-msgstr "左移"
+msgstr "左移(&L)"
msgctxt "ID_PANSCAN_MOVEUP"
msgid "Move &Up"
-msgstr "上移"
+msgstr "上移(&U)"
msgctxt "ID_PANSCAN_MOVEDOWN"
msgid "Move &Down"
-msgstr "下移"
+msgstr "下移(&D)"
msgctxt "ID_PANSCAN_CENTER"
msgid "Cen&ter"
-msgstr "置中"
+msgstr "置中(&T)"
msgctxt "ID_VIEW_RESET"
msgid "Re&set"
-msgstr "重設"
+msgstr "重設(&S)"
msgctxt "POPUP"
msgid "On &Top"
-msgstr "最上層顯示"
+msgstr "最上層顯示(&T)"
msgctxt "ID_ONTOP_DEFAULT"
msgid "&Default"
@@ -503,19 +508,19 @@ msgstr "預設(&D)"
msgctxt "ID_ONTOP_ALWAYS"
msgid "&Always"
-msgstr "總是如此"
+msgstr "總是如此(&A)"
msgctxt "ID_ONTOP_WHILEPLAYING"
msgid "While &Playing"
-msgstr "當播放時"
+msgstr "當正在播放時(&P)"
msgctxt "ID_ONTOP_WHILEPLAYINGVIDEO"
msgid "While Playing &Video"
-msgstr "當播放影片時"
+msgstr "當播放影片時(&V)"
msgctxt "ID_VIEW_OPTIONS"
msgid "&Options..."
-msgstr "設定選項(&O)..."
+msgstr "選項(&O)..."
msgctxt "POPUP"
msgid "&Play"
@@ -530,40 +535,56 @@ msgid "&Stop"
msgstr "停止(&S)"
msgctxt "ID_PLAY_FRAMESTEP"
-msgid "F&rame Step"
+msgid "Fra&me Step"
msgstr "單格步進(&R)"
+msgctxt "POPUP"
+msgid "&Repeat"
+msgstr "重複"
+
+msgctxt "ID_PLAY_REPEAT_FOREVER"
+msgid "F&orever"
+msgstr "永遠(&O)"
+
+msgctxt "ID_PLAY_REPEAT_ONEFILE"
+msgid "&File"
+msgstr "檔案(&F)"
+
+msgctxt "ID_PLAY_REPEAT_WHOLEPLAYLIST"
+msgid "&Playlist"
+msgstr "播放清單(&P)"
+
msgctxt "ID_PLAY_DECRATE"
msgid "&Decrease Rate"
-msgstr "降低頻率(&D)"
+msgstr "減速(&D)"
msgctxt "ID_PLAY_INCRATE"
msgid "&Increase Rate"
-msgstr "增加頻率(&I)"
+msgstr "加速(&I)"
msgctxt "ID_PLAY_RESETRATE"
msgid "R&eset Rate"
-msgstr "重設頻率"
+msgstr "原速(&E)"
msgctxt "ID_FILTERS"
msgid "&Filters"
-msgstr "篩選器(&F)"
+msgstr "篩選器 (Filter) (&F)"
msgctxt "ID_SHADERS"
msgid "S&haders"
-msgstr "Shaders (&H)"
+msgstr "著色器 (Shader) (&H)"
msgctxt "ID_AUDIOS"
-msgid "&Audio"
-msgstr "音訊(&A)"
+msgid "&Audio Track"
+msgstr "音訊軌道(&A)"
msgctxt "ID_SUBTITLES"
-msgid "Su&btitles"
-msgstr "字幕(&B)"
+msgid "Su&btitle Track"
+msgstr "字幕軌道(&B)"
msgctxt "ID_VIDEO_STREAMS"
-msgid "&Video Stream"
-msgstr "視訊流(&V)"
+msgid "Vide&o Track"
+msgstr "視訊軌道(&V)"
msgctxt "POPUP"
msgid "&Volume"
@@ -583,35 +604,43 @@ msgstr "靜音(&M)"
msgctxt "POPUP"
msgid "Af&ter Playback"
-msgstr "播放完後"
+msgstr "播放完後(&T)"
-msgctxt "ID_AFTERPLAYBACK_CLOSE"
+msgctxt "ID_AFTERPLAYBACK_DONOTHING"
+msgid "Do no&thing"
+msgstr "什麼都不做(&T)"
+
+msgctxt "ID_AFTERPLAYBACK_PLAYNEXT"
+msgid "Play &next file in the folder"
+msgstr "播放此資料夾的下一個檔案(&N)"
+
+msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
+msgid "Turn off the &monitor"
+msgstr "關閉螢幕(&M)"
+
+msgctxt "ID_AFTERPLAYBACK_EXIT"
msgid "&Exit"
-msgstr "離開"
+msgstr "結束(&E)"
msgctxt "ID_AFTERPLAYBACK_STANDBY"
msgid "&Stand By"
-msgstr "待命"
+msgstr "待命(&S)"
msgctxt "ID_AFTERPLAYBACK_HIBERNATE"
msgid "&Hibernate"
-msgstr "休眠"
+msgstr "休眠(&H)"
msgctxt "ID_AFTERPLAYBACK_SHUTDOWN"
msgid "Shut&down"
-msgstr "關機"
+msgstr "關機(&D)"
msgctxt "ID_AFTERPLAYBACK_LOGOFF"
msgid "Log &Off"
-msgstr "登出"
+msgstr "登出(&O)"
msgctxt "ID_AFTERPLAYBACK_LOCK"
msgid "&Lock"
-msgstr "鎖定"
-
-msgctxt "ID_AFTERPLAYBACK_MONITOROFF"
-msgid "Turn off the &monitor"
-msgstr ""
+msgstr "鎖定(&L)"
msgctxt "POPUP"
msgid "&Navigate"
diff --git a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.strings.po b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.strings.po
index d6c1eb6e4..294251252 100644
--- a/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.strings.po
+++ b/src/mpc-hc/mpcresources/PO/mpc-hc.zh_TW.strings.po
@@ -1,19 +1,26 @@
# MPC-HC - Strings extracted from string tables
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
# Translators:
+# 洪嘉鴻 <jerry9030@gmail.com>, 2015
+# Chien Wei Lin <cwlin0416@gmail.com>, 2016
# Jeff Huang <s8321414@gmail.com>, 2014
# kenelin <kenelin@gmail.com>, 2013
+# Ken <ken670128@yahoo.com.tw>, 2015
# Peter Chen <petercpg@gmail.com>, 2014
# roytam1 <roytam@gmail.com>, 2014
+# Timo Liu <timoliu@gmail.com>, 2016
+# YukiSakura <nijiko_fukada@163.com>, 2015
# Zakk <zakk0610@gmail.com>, 2014
+# 孟邦 王, 2017
+# 洪嘉鴻 <jerry9030@gmail.com>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: MPC-HC\n"
-"POT-Creation-Date: 2014-09-19 20:08:04+0000\n"
-"PO-Revision-Date: 2014-09-20 09:58+0000\n"
-"Last-Translator: JellyFrog\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/mpc-hc/language/zh_TW/)\n"
+"POT-Creation-Date: 2017-06-03 12:18:37+0000\n"
+"PO-Revision-Date: 2017-06-30 06:16+0000\n"
+"Last-Translator: 孟邦 王\n"
+"Language-Team: Chinese (Taiwan) (http://www.transifex.com/mpc-hc/mpc-hc/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -46,7 +53,7 @@ msgstr "正在完成..."
msgctxt "IDS_AUTOPLAY_PLAYVIDEO"
msgid "Play Video"
-msgstr "播放影片"
+msgstr "播放視訊"
msgctxt "IDS_AUTOPLAY_PLAYMUSIC"
msgid "Play Music"
@@ -64,10 +71,18 @@ msgctxt "IDS_PROPSHEET_PROPERTIES"
msgid "Properties"
msgstr "內容"
+msgctxt "IDS_PLAY_LOOPMODE_FILE"
+msgid "File"
+msgstr "檔案"
+
msgctxt "IDS_SUBTITLES_DEFAULT_STYLE"
msgid "&Default Style"
msgstr "預設樣式(&D)"
+msgctxt "IDS_PLAY_LOOPMODE_PLAYLIST"
+msgid "Playlist"
+msgstr "播放清單"
+
msgctxt "IDS_FAVFILES"
msgid "Files"
msgstr "檔案"
@@ -102,7 +117,7 @@ msgstr "位元率"
msgctxt "IDS_STATSBAR_BITRATE_AVG_CUR"
msgid "(avg/cur)"
-msgstr "(平均/現時)"
+msgstr "(平均/目前)"
msgctxt "IDS_STATSBAR_SIGNAL"
msgid "Signal"
@@ -118,7 +133,27 @@ msgstr "樣式"
msgctxt "IDS_TEXT_SUB_RENDERING_TARGET"
msgid "If the rendering target is left undefined, SSA/ASS subtitles will be rendered relative to the video frame while all other text subtitles will be rendered relative to the window."
-msgstr ""
+msgstr "如果繪製目標未被定義, SSA/ASS 字幕會參考視訊畫幀來繪製, 而其他文字字幕則會參考視窗畫面來繪製。"
+
+msgctxt "IDS_PLAYLOOPMODE_PLAYLIST"
+msgid "Repeat Mode: Playlist"
+msgstr "重播模式: 播放清單"
+
+msgctxt "IDS_PLAYLOOPMODE_FILE"
+msgid "Repeat Mode: File"
+msgstr "重播模式: 檔案"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_ON"
+msgid "Repeat Forever: On"
+msgstr "永遠重播: 開"
+
+msgctxt "IDS_PLAYLOOP_FOREVER_OFF"
+msgid "Repeat Forever: Off"
+msgstr "永遠重播: 關"
+
+msgctxt "IDS_PLAYLOOP_FOREVER"
+msgid "Repeat Forever"
+msgstr "永遠重播"
msgctxt "IDS_PPAGE_CAPTURE_FG0"
msgid "Never (fastest approach)"
@@ -134,11 +169,11 @@ msgstr "總是 (最慢的選項)"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC0"
msgid "Not supported by some devices. Two video decoders always present in the filter graph."
-msgstr "不被某些設備支援。在篩選器圖中總會出現兩個視訊解碼器。"
+msgstr "某些裝置不支援。在 Filter Graph 中總會出現兩個視訊解碼器。"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC1"
msgid "Fast except when switching between different video streams. Only one video decoder present in the filter graph."
-msgstr "除了在不同的視訊串流間切換時以外最快。篩選器圖中只有一個視訊解碼器。"
+msgstr "除了在不同的視訊串流間切換時以外最快。 Filter Graph 中只有一個視訊解碼器。"
msgctxt "IDS_PPAGE_CAPTURE_FGDESC2"
msgid "Not recommended. Only for testing purposes."
@@ -154,7 +189,7 @@ msgstr "僅在切換至不同的視訊類型時 (預設)"
msgctxt "IDS_PPAGE_CAPTURE_SFG2"
msgid "Always (may be required by some devices)"
-msgstr "總是 (某些設備可能需要)"
+msgstr "總是 (某些裝置可能需要)"
msgctxt "IDS_INFOBAR_PARENTAL_RATING"
msgid "Parental rating"
@@ -254,11 +289,11 @@ msgstr "現場"
msgctxt "IDS_CAPTURE_ERROR_VID_FILTER"
msgid "Can't add video capture filter to the graph"
-msgstr "不能加入視訊擷取篩選器至篩選器圖。"
+msgstr "不能加入視訊擷取篩選器至該 Filter Graph。"
msgctxt "IDS_CAPTURE_ERROR_AUD_FILTER"
msgid "Can't add audio capture filter to the graph"
-msgstr "無法加入音訊擷取篩選器至篩選器圖。"
+msgstr "無法加入音訊擷取篩選器至該 Filter Graph。"
msgctxt "IDS_CAPTURE_ERROR_DEVICE"
msgid "Could not open capture device."
@@ -329,12 +364,12 @@ msgid "On/Off"
msgstr "開/關"
msgctxt "IDS_PPAGE_FS_CLN_FROM_FPS"
-msgid "From fps"
-msgstr "由 fps"
+msgid "From (FPS)"
+msgstr "由 (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_TO_FPS"
-msgid "To fps"
-msgstr "至 fps"
+msgid "To (FPS)"
+msgstr "至 (FPS)"
msgctxt "IDS_PPAGE_FS_CLN_DISPLAY_MODE"
msgid "Display mode (Hz)"
@@ -466,7 +501,35 @@ msgstr "外部篩選器"
msgctxt "IDD_PPAGESHADERS"
msgid "Playback::Shaders"
-msgstr "播放::Shaders"
+msgstr "播放::著色器"
+
+msgctxt "IDD_FILEPROPRES"
+msgid "Resources"
+msgstr "資源"
+
+msgctxt "IDD_PPAGEMISC"
+msgid "Miscellaneous"
+msgstr "其它"
+
+msgctxt "IDD_FILEMEDIAINFO"
+msgid "MediaInfo"
+msgstr "媒體資訊"
+
+msgctxt "IDD_PPAGECAPTURE"
+msgid "Playback::Capture"
+msgstr "播放::擷取"
+
+msgctxt "IDD_PPAGESYNC"
+msgid "Playback::Sync Renderer Settings"
+msgstr "播放::同步繪製器設定"
+
+msgctxt "IDD_PPAGEFULLSCREEN"
+msgid "Playback::Fullscreen"
+msgstr "播放::全螢幕"
+
+msgctxt "IDD_PPAGEAUDIORENDERER"
+msgid "Internal Filters::Audio Renderer"
+msgstr "內部篩選器::音訊譜製器"
msgctxt "IDS_AUDIOSWITCHER"
msgid "Audio Switcher"
@@ -478,7 +541,7 @@ msgstr "新版本的圖示庫"
msgctxt "IDS_ICONS_REASSOC_DLG_INSTR"
msgid "Do you want to reassociate the icons?"
-msgstr "你要重新關聯圖示嗎?"
+msgstr "您要重新關聯圖示嗎?"
msgctxt "IDS_ICONS_REASSOC_DLG_CONTENT"
msgid "This will fix the icons being incorrectly displayed after an update of the icon library.\nThe file associations will not be modified, only the corresponding icons will be refreshed."
@@ -486,35 +549,27 @@ msgstr "將會修正在圖示庫更新後被錯誤顯示的圖示。\n檔案關
msgctxt "IDS_PPAGE_OUTPUT_OLDRENDERER"
msgid "Old Video Renderer"
-msgstr "舊版繪製器"
+msgstr "舊版視訊繪製器"
msgctxt "IDS_PPAGE_OUTPUT_OVERLAYMIXER"
msgid "Overlay Mixer Renderer"
-msgstr "覆疊合成器"
-
-msgctxt "IDS_PPAGE_OUTPUT_VMR7WINDOWED"
-msgid "Video Mixing Renderer 7 (windowed)"
-msgstr "VMR 7 (視窗)"
+msgstr "覆疊合成繪製器"
msgctxt "IDS_PPAGE_OUTPUT_VMR9WINDOWED"
msgid "Video Mixing Renderer 9 (windowed)"
msgstr "VMR 9 (視窗)"
-msgctxt "IDS_PPAGE_OUTPUT_VMR7RENDERLESS"
-msgid "Video Mixing Renderer 7 (renderless)"
-msgstr "VMR 7 (無轉換)"
-
msgctxt "IDS_PPAGE_OUTPUT_VMR9RENDERLESS"
msgid "Video Mixing Renderer 9 (renderless)"
msgstr "VMR 9 (無轉換)"
msgctxt "IDS_PPAGE_OUTPUT_EVR"
msgid "Enhanced Video Renderer"
-msgstr "EVR"
+msgstr "增強視訊繪製器"
msgctxt "IDS_PPAGE_OUTPUT_EVR_CUSTOM"
msgid "Enhanced Video Renderer (custom presenter)"
-msgstr "EVR 自訂呈現"
+msgstr "增強視訊繪製器 (自訂呈現)"
msgctxt "IDS_PPAGE_OUTPUT_DXR"
msgid "Haali Video Renderer"
@@ -526,7 +581,7 @@ msgstr "無 (所有)"
msgctxt "IDS_PPAGE_OUTPUT_NULL_UNCOMP"
msgid "Null (uncompressed)"
-msgstr "無 (非壓縮)"
+msgstr "無 (未壓縮)"
msgctxt "IDS_PPAGE_OUTPUT_MADVR"
msgid "madVR"
@@ -556,41 +611,13 @@ msgctxt "IDD_PPAGEWEBSERVER"
msgid "Player::Web Interface"
msgstr "播放程式::網頁介面"
-msgctxt "IDD_PPAGESUBDB"
-msgid "Subtitles::Database"
-msgstr "字幕::資料庫"
-
-msgctxt "IDD_FILEPROPRES"
-msgid "Resources"
-msgstr "資源"
-
-msgctxt "IDD_PPAGEMISC"
-msgid "Miscellaneous"
-msgstr "其它"
-
-msgctxt "IDD_FILEMEDIAINFO"
-msgid "MediaInfo"
-msgstr "MediaInfo 媒體資訊"
-
-msgctxt "IDD_PPAGECAPTURE"
-msgid "Playback::Capture"
-msgstr "播放::擷取"
-
-msgctxt "IDD_PPAGESYNC"
-msgid "Playback::Sync Renderer Settings"
-msgstr "播放::同步繪製器設定"
-
-msgctxt "IDD_PPAGEFULLSCREEN"
-msgid "Playback::Fullscreen"
-msgstr "播放::全螢幕"
-
msgctxt "IDD_FILEPROPDETAILS"
msgid "Details"
msgstr "詳細資訊"
msgctxt "IDD_FILEPROPCLIP"
msgid "Clip"
-msgstr "短片"
+msgstr "片段"
msgctxt "IDC_DSSYSDEF"
msgid "Default video renderer filter for DirectShow. Others will fall back to this one when they can't be loaded for some reason. On Windown XP this is the same as VMR-7 (windowed)."
@@ -602,19 +629,11 @@ msgstr "這是 Windows 9x/ME/2K 的預設繪製器。依據視訊視窗的可見
msgctxt "IDC_DSOVERLAYMIXER"
msgid "Always renders in overlay. Generally only YUV formats are allowed, but they are presented directly without any color conversion to RGB. This is the fastest rendering method of all and the only where you can be sure about fullscreen video mirroring to tv-out activating."
-msgstr "總是以覆疊模式繪製。一般說來只允許使用 YUV 格式,但這不會進行任何 RGB 色彩轉換而直接呈現。這是最快速的繪製方法,而且是你唯一能確保以全螢幕鏡射輸出到電視的方法。"
-
-msgctxt "IDC_DSVMR7WIN"
-msgid "The default renderer of Windows XP. Very stable and just a little slower than the Overlay mixer. Uses DirectDraw and runs in Overlay when it can."
-msgstr "Windows XP 的預設繪製器。非常穩定,只比覆疊合成器慢一點。使用 DirectDraw,可以的話會在覆疊模式下運行。"
+msgstr "總是以覆疊模式繪製。一般說來只允許使用 YUV 格式,但這不會進行任何 RGB 色彩轉換而直接呈現。這是最快速的繪製方法,而且是您唯一能確保以全螢幕鏡射輸出到電視的方法。"
msgctxt "IDC_DSVMR9WIN"
-msgid "Only available if you have DirectX 9 installed. Has the same abilities as VMR-7 (windowed), but it will never use Overlay rendering and because of this it may be a little slower than VMR-7 (windowed)."
-msgstr "只有在您安裝了 DirectX 9 之後才能用。它有著和 VMR-7 (視窗式) 相同的能力,但永遠不會使用覆疊模式繪製。因此這可能會比 VMR-7 (視窗式) 慢一點。"
-
-msgctxt "IDC_DSVMR7REN"
-msgid "Same as the VMR-7 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring WILL NOT work. \"True Color\" desktop color space recommended."
-msgstr "和 VMR-7 (視窗式) 相同,但藉助 MPC-HC 的配置呈現器顯示字幕。覆疊式視訊鏡射輸出將不會運作。建議使用「全彩」顯示桌面。"
+msgid "Only available if you have DirectX 9 installed. Very stable but it will never use Overlay rendering and because of this it may be a little slower than Overlay mixer."
+msgstr "僅在您有安裝 DirectX 9 時可用。非常穩定,但永遠不會使用 Overlay 繪圖,也因此可能會比 Overlay 混合器還要慢一點。"
msgctxt "IDC_DSVMR9REN"
msgid "Same as the VMR-9 (windowed), but with the Allocator-Presenter plugin of MPC-HC for subtitling. Overlay video mirroring MIGHT work. \"True Color\" desktop color space recommended. Recommended for Windows XP."
@@ -625,8 +644,8 @@ msgid "Same as the VMR-9 (renderless), but uses a true two-pass bicubic resizer.
msgstr "和 VMR-9 (無轉換) 相同,但使用了真正的 two-pass bicubic 縮放器。"
msgctxt "IDC_DSNULL_COMP"
-msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily."
-msgstr "連到任何視訊媒體類型,並且不傳送傳進來的取樣資料。當你不需要任何視訊顯示而又想節省不必要的 CPU 工作時可以用。"
+msgid "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the CPU from working unnecessarily."
+msgstr "連到任何視訊媒體類型,並且不傳送傳進來的取樣資料。當您不需要任何視訊顯示而又想節省不必要的 CPU 工作時可以用。"
msgctxt "IDC_DSNULL_UNCOMP"
msgid "Same as the normal Null renderer, but this will only connect to uncompressed types."
@@ -652,10 +671,6 @@ msgctxt "IDC_RMSYSDEF"
msgid "Real's own renderer. SMIL scripts will work, but interaction not likely. Uses DirectDraw and runs in Overlay when it can."
msgstr "Real 自己的繪製器。SMIL 腳本檔可以運作, 但可能無法互動。使用 DirectDraw, 並且可以的話會在覆疊模式下運行。"
-msgctxt "IDC_RMDX7"
-msgid "The output of Real's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "Real 引擎的輸出由基於 DX7 的 VMR-7 (無轉換) 配置呈現器繪製。"
-
msgctxt "IDC_RMDX9"
msgid "The output of Real's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "Real 引擎的輸出由基於 DX9 的 VMR-9 (無轉換) 配置呈現器繪製。"
@@ -664,10 +679,6 @@ msgctxt "IDC_QTSYSDEF"
msgid "QuickTime's own renderer. Gets a little slow when its video area is resized or partially covered by another window. When Overlay is not available it likes to fall back to GDI."
msgstr "QuickTime 自己的繪製器。當視訊區域有變更大小或是部分被其它視窗蓋住時會稍微變慢。當覆疊模式不能用的時候會回復到 GDI。"
-msgctxt "IDC_QTDX7"
-msgid "The output of QuickTime's engine rendered by the DX7-based Allocator-Presenter of VMR-7 (renderless)."
-msgstr "QuickTime 引擎的輸出由基於 DX7 的 VMR-7 (無轉換) 配置呈現器繪製。"
-
msgctxt "IDC_QTDX9"
msgid "The output of QuickTime's engine rendered by the DX9-based Allocator-Presenter of VMR-9 (renderless)."
msgstr "QuickTime 引擎的輸出由基於 DX9 的 VMR-9 (無轉換) 配置呈現器繪製。"
@@ -676,22 +687,10 @@ msgctxt "IDC_REGULARSURF"
msgid "Video surface will be allocated as a regular offscreen surface."
msgstr "螢幕繪圖頁會配置成一般幕後繪圖頁。"
-msgctxt "IDC_AUDRND_COMBO"
-msgid "MPC Audio Renderer is broken, do not use."
-msgstr "MPC Audio Renderer 是損壞的,請不要使用。"
-
msgctxt "IDS_PPAGE_OUTPUT_SYNC"
msgid "Sync Renderer"
msgstr "同步繪製器"
-msgctxt "IDS_MPC_BUG_REPORT_TITLE"
-msgid "MPC-HC - Reporting a bug"
-msgstr "MPC-HC - 回報錯誤"
-
-msgctxt "IDS_MPC_BUG_REPORT"
-msgid "MPC-HC just crashed but this build was compiled without debug information.\nIf you want to report this bug, you should first try an official build.\n\nDo you want to visit the download page now?"
-msgstr "MPC-HC 未預期終止但是這個版本並未編入除錯資訊。\n如果您想回報這個錯誤, 您需要先嘗試使用官方版本。\n\n您要立即前往下載頁面嗎?"
-
msgctxt "IDS_PPAGE_OUTPUT_SURF_OFFSCREEN"
msgid "Regular offscreen plain surface"
msgstr "一般幕後繪圖頁"
@@ -744,9 +743,9 @@ msgctxt "IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP"
msgid "Null (uncompressed)"
msgstr "無 (非壓縮)"
-msgctxt "IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND"
-msgid "MPC-HC Audio Renderer"
-msgstr "MPC-HC 音訊繪製器"
+msgctxt "IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND"
+msgid "Internal Audio Renderer"
+msgstr "內部音訊譜製器"
msgctxt "IDS_EMB_RESOURCES_VIEWER_NAME"
msgid "Name"
@@ -760,9 +759,13 @@ msgctxt "IDS_EMB_RESOURCES_VIEWER_INFO"
msgid "In order to view an embedded resource in your browser you have to enable the web interface.\n\nUse the \"Save As\" button if you only want to save the information."
msgstr "如要瀏覽器中檢視內嵌資源,您須要開啟網頁介面。\n\n如您只想儲存資訊,請使用「另存新檔」按鈕。"
-msgctxt "IDS_DOWNLOAD_SUBS"
-msgid "Download subtitles"
-msgstr "下載字幕"
+msgctxt "IDS_SUBTITLES_DOWNLOAD"
+msgid "Download Subtitles..."
+msgstr "下載字幕..."
+
+msgctxt "IDS_SUBTITLES_UPLOAD"
+msgid "Upload Subtitles..."
+msgstr "上傳字幕..."
msgctxt "IDS_SUBFILE_DELAY"
msgid "Delay (ms):"
@@ -793,7 +796,7 @@ msgid "Couldn't find all archive volumes"
msgstr "找不到所有的分割檔"
msgctxt "IDC_TEXTURESURF2D"
-msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
+msgid "Video surface will be allocated as a texture but still the 2d functions will be used to copy and stretch it onto the backbuffer. Requires a video card which can allocate 32-bit, RGBA, non-power-of-two sized textures and at least in the resolution of the video."
msgstr "螢幕繪圖頁會當作材質配置, 但依舊會使用 2D 函式來複製與延展到後緩衝區。這需要能配置 32-bit, RGBA, 材質大小非二的乘方, 與最少能配置視訊解析度的顯示卡。"
msgctxt "IDC_TEXTURESURF3D"
@@ -820,6 +823,18 @@ msgctxt "IDC_DSVMR9ALTERNATIVEVSYNC"
msgid "Reduces tearing by bypassing the default VSync built into D3D."
msgstr "繞過 D3D 的預設的垂直同步以減少畫面撕裂。"
+msgctxt "IDS_NAVIGATE_TUNERSCAN"
+msgid "Tuner scan"
+msgstr "調諧器掃描"
+
+msgctxt "IDS_SUBTITLES_ERROR"
+msgid "Subtitles are not loaded or unsupported renderer."
+msgstr "字幕未載入或是未支援的繪製器。"
+
+msgctxt "IDC_CACHESHADERS"
+msgid "Stores compiled shaders in local AppData to speed up load time."
+msgstr "在本地端儲存已編輯的著色器來加速載入時間。"
+
msgctxt "IDS_SRC_VTS"
msgid "Open VTS_xx_0.ifo to load VTS_xx_x.vob files in one piece"
msgstr "開啟 VTS_xx_0.ifo 並一同載入 VTS_xx_x.vob 這些檔案"
@@ -834,7 +849,7 @@ msgstr "使用 LAV Filters"
msgctxt "IDS_INTERNAL_LAVF_WMV"
msgid "Uses LAV Filters. Disabled by default since Microsoft filters are usually more stable for those formats.\nIf you choose to use the internal filters, enable them for both source and decoding to have a better playback experience."
-msgstr "使用 LAV Filters。因微軟的篩選器對此格式的支援更穩定而預設停用。\n如需啟用,請同時啟用作為來源和解碼以獲得較佳體驗。"
+msgstr "使用 LAV Filters。因微軟的篩選器對此格式的支援更穩定而預設關閉。\n如需開啟,請同時啟用作為來源和解碼以獲得較佳體驗。"
msgctxt "IDS_AG_TOGGLE_NAVIGATION"
msgid "Toggle Navigation Bar"
@@ -846,15 +861,15 @@ msgstr "精確式垂直同步"
msgctxt "IDC_CHECK_RELATIVETO"
msgid "If the rendering target is left undefined, it will be inherited from the default style."
-msgstr ""
+msgstr "若繪製目標未被定義, 將會使用預設樣式來繪製。"
msgctxt "IDC_CHECK_NO_SUB_ANIM"
msgid "Disallow subtitle animation. Enabling this option will lower CPU usage. You can use it if you experience flashing subtitles."
-msgstr ""
+msgstr "停用字幕動畫化。 啟用此選項可以降低 CPU 的使用資源。若你的字幕會閃爍, 您可以啟用這個選項來解決。"
msgctxt "IDC_SUBPIC_TO_BUFFER"
msgid "Increasing the number of buffered subpictures should in general improve the rendering performance at the cost of a higher video RAM usage on the GPU."
-msgstr ""
+msgstr "增加緩衝的子畫面數一般能改善繪製效能, 但是會增加 GPU 的顯示記憶體使用量。"
msgctxt "IDC_BUTTON_EXT_SET"
msgid "After clicking this button, the checked state of the format group will reflect the actual file association for MPC-HC. A newly added extension will usually make it grayed, so don't forget to check it again before closing this dialog!"
@@ -862,7 +877,7 @@ msgstr "按下此按鈕後, 格式群組中有選取的狀態會反映到 MPC-HC
msgctxt "IDC_CHECK_ALLOW_DROPPING_SUBPIC"
msgid "Disabling this option will prevent the subtitles from blinking but it may cause the video renderer to skip some video frames."
-msgstr ""
+msgstr "停用此選項將可以防止字幕閃爍, 但是可能會導致視訊繪製器忽略掉一些視訊幀數幀。"
msgctxt "ID_PLAY_PLAY"
msgid "Play\nPlay"
@@ -892,7 +907,7 @@ msgctxt "ID_VOLUME_MUTE"
msgid "Mute"
msgstr "靜音"
-msgctxt "ID_VOLUME_MUTE_ON"
+msgctxt "ID_VOLUME_MUTE_OFF"
msgid "Unmute"
msgstr "解除靜音"
@@ -942,11 +957,11 @@ msgstr "選項"
msgctxt "IDS_SHADERS_SELECT"
msgid "&Select Shaders..."
-msgstr "選擇 Shaders(&S)..."
+msgstr "選擇著色器(&S)..."
msgctxt "IDS_SHADERS_DEBUG"
msgid "&Debug Shaders..."
-msgstr "偵錯 Shader... (&D)"
+msgstr "著色器除錯(&D)... "
msgctxt "IDS_FAVORITES_ADD"
msgid "&Add to Favorites..."
@@ -957,11 +972,11 @@ msgid "&Organize Favorites..."
msgstr "組織我的最愛(&O)..."
msgctxt "IDS_PLAYLIST_SHUFFLE"
-msgid "Shuffle"
+msgid "Sh&uffle"
msgstr "打亂"
msgctxt "IDS_PLAYLIST_SHOWFOLDER"
-msgid "Open file location"
+msgid "Ope&n file location"
msgstr "開啟檔案位置"
msgctxt "IDS_CONTROLS_CLOSING"
@@ -982,7 +997,7 @@ msgstr "EDL 新影片"
msgctxt "IDS_RECENT_FILES_CLEAR"
msgid "&Clear list"
-msgstr "清除清單"
+msgstr "清除清單(&C)"
msgctxt "IDS_RECENT_FILES_QUESTION"
msgid "Are you sure that you want to delete recent files list?"
@@ -994,7 +1009,7 @@ msgstr "EDL 儲存"
msgctxt "IDS_AG_ENABLEFRAMETIMECORRECTION"
msgid "Enable Frame Time Correction"
-msgstr "啟用影格時間校正"
+msgstr "開啟影格時間校正"
msgctxt "IDS_AG_TOGGLE_EDITLISTEDITOR"
msgid "Toggle EDL window"
@@ -1030,7 +1045,7 @@ msgstr "平移掃描 - 旋轉 Z-"
msgctxt "IDS_AG_TEARING_TEST"
msgid "Tearing Test"
-msgstr "抖動測試"
+msgstr "撕裂測試"
msgctxt "IDS_SCALE_16_9"
msgid "Scale to 16:9 TV,%.3f,%.3f,%.3f,%.3f"
@@ -1045,7 +1060,7 @@ msgid "Zoom To Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgstr "縮放至 Ultra-Widescreen,%.3f,%.3f,%.3f,%.3f"
msgctxt "IDS_PLAYLIST_HIDEFS"
-msgid "Hide on Fullscreen"
+msgid "&Hide on Fullscreen"
msgstr "全螢幕時隱藏"
msgctxt "IDS_CONTROLS_STOPPED"
@@ -1082,11 +1097,11 @@ msgstr "重新載入(&R)"
msgctxt "IDS_SUBTITLES_ENABLE"
msgid "&Enable"
-msgstr "啟用(&E)"
+msgstr "開啟(&E)"
msgctxt "IDS_PANSCAN_EDIT"
msgid "&Edit..."
-msgstr "編輯..."
+msgstr "編輯(&E)..."
msgctxt "IDS_INFOBAR_TITLE"
msgid "Title"
@@ -1170,19 +1185,19 @@ msgstr "開啟 DVD/BD"
msgctxt "IDS_MAINFRM_POST_SHADERS_FAILED"
msgid "Failed to set post-resize shaders"
-msgstr "設定 post-resize shader 時失敗"
+msgstr "設定 Post-resize 著色器失敗"
msgctxt "IDS_MAINFRM_BOTH_SHADERS_FAILED"
msgid "Failed to set both pre-resize and post-resize shaders"
-msgstr "設定 pre-resize 及 post-resize shader 時失敗"
+msgstr "設定 Pre-resize 及 Post-resize 著色器失敗"
msgctxt "IDS_DEBUGSHADERS_FIRSTRUN_MSG"
msgid "Shaders are recompiled automatically when the corresponding files are modified."
-msgstr "當相關檔案被修改時 shader 將會被自動重新編譯。"
+msgstr "當相關檔案被修改時自動重新編譯著色器。"
msgctxt "IDS_SHADER_DLL_ERR_0"
msgid "Cannot load %s, pixel shaders will not work."
-msgstr "無法載入 %s, Pixel Shader 將無法運作。"
+msgstr "無法載入 %s, Pixel 著色器將無法運作。"
msgctxt "IDS_SHADER_DLL_ERR_1"
msgid "Cannot find necessary function entry points in %s, pixel shaders will not work."
@@ -1190,15 +1205,15 @@ msgstr "無法在 %s 裡面找到必要的函式進入點, Pixel Shader 將無
msgctxt "IDS_OSD_SHADERS_PRESET"
msgid "Shader preset: %s"
-msgstr "Shader 先期設定: %s"
+msgstr "著色器初始設定: %s"
msgctxt "IDS_AG_SHADERS_PRESET_NEXT"
msgid "Next Shader Preset"
-msgstr "次一 Shader 先期設定"
+msgstr "下一個著色器初始設定"
msgctxt "IDS_AG_SHADERS_PRESET_PREV"
msgid "Prev Shader Preset"
-msgstr "前一 Shader 先期設定"
+msgstr "上一個著色器初始設定"
msgctxt "IDS_STRING_COLON"
msgid "%s:"
@@ -1233,7 +1248,7 @@ msgid "+%d%%"
msgstr "+%d%%"
msgctxt "IDS_PLAYLIST_ADDFOLDER"
-msgid "Add containing folder"
+msgid "Add containing &folder"
msgstr "加入包含的資料夾"
msgctxt "IDS_HW_INDICATOR"
@@ -1266,15 +1281,15 @@ msgstr "保存自訂樣式"
msgctxt "IDS_CONTENT_EDUCATION_SCIENCE"
msgid "Education/Science/Factual topics"
-msgstr ""
+msgstr "教育/科學/事實話題"
msgctxt "IDS_PPAGEADVANCED_HIDE_WINDOWED"
msgid "Hides controls and panels also in windowed mode."
-msgstr ""
+msgstr "在視窗模式同樣也隱藏控制項及面板。"
msgctxt "IDS_PPAGEADVANCED_BLOCK_VSFILTER"
msgid "Prevent external subtitle renderer to be loaded when internal is in use."
-msgstr ""
+msgstr "當內部字幕繪製器使用時, 防止載入外部字幕繪製器。"
msgctxt "IDS_PPAGEADVANCED_COL_NAME"
msgid "Name"
@@ -1282,31 +1297,31 @@ msgstr "名稱"
msgctxt "IDS_PPAGEADVANCED_COL_VALUE"
msgid "Value"
-msgstr ""
+msgstr "數值"
msgctxt "IDS_PPAGEADVANCED_RECENT_FILES_NUMBER"
msgid "Maximum number of files shown in the \"Recent files\" menu and for which the position is potentially saved."
-msgstr ""
+msgstr "\"最近的檔案\"選單項目中所能顯示的最大檔案數量及可被儲存的位置。"
msgctxt "IDS_PPAGEADVANCED_FILE_POS_LONGER"
msgid "Remember file position only for files longer than N minutes."
-msgstr ""
+msgstr "記住檔案播放時間大於 N 分鐘的檔案位置。"
msgctxt "IDS_PPAGEADVANCED_FILE_POS_AUDIO"
msgid "Remember file position also for audio files."
-msgstr ""
+msgstr "對音訊檔案也記住檔案位置。"
msgctxt "IDS_AFTER_PLAYBACK_DO_NOTHING"
msgid "Do Nothing"
-msgstr ""
+msgstr "什麼都不做"
msgctxt "IDS_AFTER_PLAYBACK_PLAY_NEXT"
msgid "Play next file in the folder"
-msgstr ""
+msgstr "播放此資料夾的下一個檔案"
msgctxt "IDS_AFTER_PLAYBACK_REWIND"
msgid "Rewind current file"
-msgstr ""
+msgstr "倒帶目前檔案"
msgctxt "IDS_AFTER_PLAYBACK_CLOSE"
msgid "Close"
@@ -1318,27 +1333,103 @@ msgstr "離開"
msgctxt "IDS_AFTER_PLAYBACK_MONITOROFF"
msgid "Turn off the monitor"
-msgstr ""
+msgstr "關閉螢幕"
msgctxt "IDS_IMAGE_JPEG_QUALITY"
msgid "JPEG Image"
-msgstr ""
+msgstr "JPEG 影像"
msgctxt "IDS_IMAGE_QUALITY"
msgid "Quality (%):"
-msgstr ""
+msgstr "品質 (%):"
msgctxt "IDS_PPAGEADVANCED_COVER_SIZE_LIMIT"
msgid "Maximum size (NxNpx) of a cover-art loaded in the audio only mode."
-msgstr ""
+msgstr "音訊播放模式下, 所載入專輯封面的最大尺吋 (NxNpx)。"
msgctxt "IDS_SUBTITLE_DELAY_STEP_TOOLTIP"
msgid "The subtitle delay will be decreased/increased by this value each time the corresponding hotkeys are used (%s/%s)."
-msgstr ""
+msgstr "按下字幕延遲快速鍵時, 字幕延遲的時間將依此數值來減少/增加 (%s/%s)。"
msgctxt "IDS_HOTKEY_NOT_DEFINED"
msgid "<not defined>"
-msgstr ""
+msgstr "<尚未定義>"
+
+msgctxt "IDS_NAVIGATION_WATCH"
+msgid "Watch"
+msgstr "觀看"
+
+msgctxt "IDS_NAVIGATION_MOVE_UP"
+msgid "Move Up"
+msgstr "上移"
+
+msgctxt "IDS_NAVIGATION_MOVE_DOWN"
+msgid "Move Down"
+msgstr "下移"
+
+msgctxt "IDS_NAVIGATION_SORT"
+msgid "Sort by LCN"
+msgstr "以 LCN 排序"
+
+msgctxt "IDS_NAVIGATION_REMOVE_ALL"
+msgid "Remove all"
+msgstr "移除全部"
+
+msgctxt "IDS_REMOVE_CHANNELS_QUESTION"
+msgid "Are you sure you want to remove all channels from the list?"
+msgstr "您確定要移除此清單裡的所有頻道?"
+
+msgctxt "IDS_MEDIAINFO_NO_INFO_AVAILABLE"
+msgid "No information available"
+msgstr "沒有可用的資訊"
+
+msgctxt "IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS"
+msgid "Please wait, analysis in progress..."
+msgstr "請等待, 正在進行分析..."
+
+msgctxt "IDS_ASPECT_RATIO_FMT"
+msgid "AR %d:%d"
+msgstr "長寬比例 %d:%d"
+
+msgctxt "IDS_PPAGEADVANCED_LOGGER"
+msgid "Enables logging to file (requires restart)"
+msgstr "開啟日誌記錄檔案 (需重新啟動)"
+
+msgctxt "IDS_TIMER_REMAINING_TIME"
+msgid "Remaining time"
+msgstr "剩餘時間"
+
+msgctxt "IDS_TIMER_HIGH_PRECISION"
+msgid "High precision"
+msgstr "高精確度"
+
+msgctxt "IDS_AFTERPLAYBACK_REWIND"
+msgid "After Playback: Rewind current file"
+msgstr "播放完後: 倒帶目前檔案"
+
+msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgid "After Playback: Close"
+msgstr "播放完後: 關閉"
+
+msgctxt "IDS_FRAME_INIT_FAILED"
+msgid "MPC-HC encountered a problem during initialization. With your help we might be able to fix the issue.\n\nDo you want to report it?"
+msgstr "MPC-HC 在初始化時遇到了一個問題。透過您的協助我們或許可以修復這個問題。\n\n您要回報這個問題嗎?"
+
+msgctxt "IDS_TIME_SHIFT_TOOLTIP"
+msgid "Enter a positive value if the audio is early, a negative value if it is late."
+msgstr "若音訊提早請輸入正值,若延遲則輸入負值。"
+
+msgctxt "IDS_WEBUI_DISABLED_PREVIEW_MSG"
+msgid "Preview is currently disabled. You can enable it in MPC-HC's options."
+msgstr "目前已關閉預覽功能。您可以於 MPC-HC 的選項中將其開啟。"
+
+msgctxt "IDS_WEBUI_PREVIEW_WARNING"
+msgid "This option can be used to preview media files from remote location. Use it only on a properly secured private network.\n\nDo you really want to enable this option?"
+msgstr "這個選項允許由遠端預覽媒體檔案。僅能在安全的私有網路中使用。\n\n您確定要啟用此選項嗎?"
+
+msgctxt "IDS_SUBTITLE_RENDERER_INTERNAL"
+msgid "Internal Subtitle Renderer"
+msgstr "内部字幕繪製器"
msgctxt "IDS_AG_OPEN_DEVICE"
msgid "Open Device"
@@ -1360,13 +1451,13 @@ msgctxt "IDS_OSD_IMAGE_SAVED"
msgid "Image saved successfully"
msgstr "影像已成功儲存"
-msgctxt "IDS_AG_LOAD_SUBTITLE"
-msgid "Load Subtitle"
-msgstr "載入字幕"
+msgctxt "IDS_AG_LOAD_SUBTITLES"
+msgid "Load Subtitles..."
+msgstr "載入字幕..."
-msgctxt "IDS_AG_SAVE_SUBTITLE"
-msgid "Save Subtitle"
-msgstr "儲存字幕"
+msgctxt "IDS_AG_SAVE_SUBTITLES"
+msgid "Save Subtitles..."
+msgstr "儲存字幕..."
msgctxt "IDS_AG_PROPERTIES"
msgid "Properties"
@@ -1389,11 +1480,11 @@ msgid "Stop"
msgstr "停止"
msgctxt "IDS_AG_FRAMESTEP"
-msgid "Framestep"
+msgid "Frame-step"
msgstr "單格步進"
msgctxt "IDS_MPLAYERC_16"
-msgid "Framestep back"
+msgid "Frame-step back"
msgstr "單格退回"
msgctxt "IDS_AG_GO_TO"
@@ -1442,15 +1533,15 @@ msgstr "儲存複件"
msgctxt "IDS_FASTSEEK_LATEST"
msgid "Latest keyframe"
-msgstr "最近的關鍵幀"
+msgstr "最後的關鍵幀"
msgctxt "IDS_FASTSEEK_NEAREST"
msgid "Nearest keyframe"
-msgstr "最接近的關鍵幀"
+msgstr "最近的關鍵幀"
msgctxt "IDS_HOOKS_FAILED"
msgid "MPC-HC encountered a problem during initialization. DVD playback may not work correctly. This might be caused by some incompatibilities with certain security tools.\n\nDo you want to report this issue?"
-msgstr "MPC-HC 在初始化時遇到了一個問題。DVD 播放可能會不正常。這可能與某些安全工具的不兼容性所致。\n\n你要報告這個問題嗎?"
+msgstr "MPC-HC 在初始化時遇到了一個問題。DVD 播放可能會不正常。這可能與某些安全工具的不相容性所致。\n\n您要回報這個問題嗎?"
msgctxt "IDS_PPAGEFULLSCREEN_SHOWNEVER"
msgid "Never show"
@@ -1466,7 +1557,7 @@ msgstr "在控制項上停留時顯示,隱藏在:"
msgctxt "IDS_MAINFRM_PRE_SHADERS_FAILED"
msgid "Failed to set pre-resize shaders"
-msgstr "設定 pre-resize shader 時失敗"
+msgstr "設定 Pre-resize 著色器時失敗"
msgctxt "IDS_OSD_RS_FT_CORRECTION_ON"
msgid "Frame Time Correction: On"
@@ -1493,8 +1584,8 @@ msgid "Thumbnails saved successfully"
msgstr "縮圖已成功儲存"
msgctxt "IDS_MENU_VIDEO_STREAM"
-msgid "&Video Stream"
-msgstr "視訊串流(&T)"
+msgid "Vide&o Track"
+msgstr "視訊軌道(&V)"
msgctxt "IDS_MENU_VIDEO_ANGLE"
msgid "Video Ang&le"
@@ -1518,7 +1609,7 @@ msgstr "匯出設定"
msgctxt "IDS_EXPORT_SETTINGS_WARNING"
msgid "Some changes have not been saved yet.\nDo you want to save them before exporting?"
-msgstr "有些設定尚未儲存。\n你要先儲存它們後才匯出嗎?"
+msgstr "有些設定尚未儲存。\n您要先儲存它們後才匯出嗎?"
msgctxt "IDS_EXPORT_SETTINGS_SUCCESS"
msgid "The settings have been successfully exported."
@@ -1526,7 +1617,7 @@ msgstr "設定已經成功匯出。"
msgctxt "IDS_EXPORT_SETTINGS_FAILED"
msgid "The export failed! This can happen when you don't have the correct rights."
-msgstr "匯出失敗! 當你沒有正確的權限時會出現此情況。"
+msgstr "匯出失敗! 當您沒有正確的權限時會出現此情況。"
msgctxt "IDS_BDA_ERROR"
msgid "BDA Error"
@@ -1541,44 +1632,44 @@ msgid "Reset Rate"
msgstr "重設頻率"
msgctxt "IDS_MPLAYERC_21"
-msgid "Audio Delay +10ms"
+msgid "Audio Delay +10 ms"
msgstr "音訊延遲 +10ms"
msgctxt "IDS_MPLAYERC_22"
-msgid "Audio Delay -10ms"
+msgid "Audio Delay -10 ms"
msgstr "音訊延遲 -10ms"
msgctxt "IDS_MPLAYERC_23"
msgid "Jump Forward (small)"
-msgstr "跳後一段 (小)"
+msgstr "跳至後一段 (小)"
msgctxt "IDS_MPLAYERC_24"
msgid "Jump Backward (small)"
-msgstr "跳前一段 (小)"
+msgstr "跳至前一段 (小)"
msgctxt "IDS_MPLAYERC_25"
msgid "Jump Forward (medium)"
-msgstr "跳後一段 (中)"
+msgstr "跳至後一段 (中)"
msgctxt "IDS_MPLAYERC_26"
msgid "Jump Backward (medium)"
-msgstr "跳前一段 (中)"
+msgstr "跳至前一段 (中)"
msgctxt "IDS_MPLAYERC_27"
msgid "Jump Forward (large)"
-msgstr "跳後一段 (大)"
+msgstr "跳至後一段 (大)"
msgctxt "IDS_MPLAYERC_28"
msgid "Jump Backward (large)"
-msgstr "跳前一段 (大)"
+msgstr "跳至前一段 (大)"
msgctxt "IDS_MPLAYERC_29"
msgid "Jump Forward (keyframe)"
-msgstr "跳後一段 (關鍵影格)"
+msgstr "跳至後一段 (關鍵影格)"
msgctxt "IDS_MPLAYERC_30"
msgid "Jump Backward (keyframe)"
-msgstr "跳前一段 (關鍵影格)"
+msgstr "跳至前一段 (關鍵影格)"
msgctxt "IDS_AG_NEXT"
msgid "Next"
@@ -1616,14 +1707,54 @@ msgctxt "IDS_MPLAYERC_103"
msgid "Shift Subtitle Right"
msgstr "字幕向右移"
-msgctxt "IDS_AG_DISPLAY_STATS"
-msgid "Display Stats"
-msgstr "顯示統計"
-
msgctxt "IDS_AG_SEEKSET"
msgid "Jump to Beginning"
msgstr "跳至起始點"
+msgctxt "IDS_OSD_SHOW_FILENAME"
+msgid "OSD: Show File Name"
+msgstr "OSD: 顯示檔案名稱"
+
+msgctxt "IDS_PLAY_DVD"
+msgid "Play DVD"
+msgstr "播放 DVD"
+
+msgctxt "IDS_PLAY_BD"
+msgid "Play BD"
+msgstr "播放 BD"
+
+msgctxt "IDS_OSD_DISPLAY_RENDERER_STATS"
+msgid "OSD: Display Renderer Statistics"
+msgstr "OSD: 顯示繪製器統計"
+
+msgctxt "IDS_OSD_RESET_RENDERER_STATS"
+msgid "OSD: Reset Renderer Statistics"
+msgstr "OSD: 重置繪製器統計"
+
+msgctxt "IDD_PPAGESUBMISC"
+msgid "Subtitles::Misc"
+msgstr "字幕::其它"
+
+msgctxt "IDS_VIEW_BORDERLESS"
+msgid "Hide &borders"
+msgstr "隱藏邊框(&B)"
+
+msgctxt "IDS_VIEW_FRAMEONLY"
+msgid "Fra&me Only"
+msgstr "僅影格(&M)"
+
+msgctxt "IDS_VIEW_CAPTIONMENU"
+msgid "Sho&w Caption&&Menu"
+msgstr "顯示標題選單"
+
+msgctxt "IDS_VIEW_HIDEMENU"
+msgid "Hide &Menu"
+msgstr "隱藏選單(&M)"
+
+msgctxt "IDD_PPAGEADVANCED"
+msgid "Advanced"
+msgstr "進階"
+
msgctxt "IDS_AG_VIEW_MINIMAL"
msgid "View Minimal"
msgstr "最小視窗"
@@ -1689,8 +1820,8 @@ msgid "PnS Dec Height"
msgstr "平移掃描 - 減少高度"
msgctxt "IDS_SUBDL_DLG_DOWNLOADING"
-msgid "Downloading subtitle(s), please wait."
-msgstr "下載字幕中, 請稍候。"
+msgid "Downloading [%s] \"%s\""
+msgstr "正在下載 [%s] \"%s\""
msgctxt "IDS_SUBDL_DLG_PARSING"
msgid "Parsing list..."
@@ -1701,12 +1832,12 @@ msgid "No subtitles found."
msgstr "找不到字幕。"
msgctxt "IDS_SUBDL_DLG_SUBS_AVAIL"
-msgid " %d subtitle(s) available."
+msgid "%d subtitle(s) available."
msgstr "有 %d 個字幕可用。"
msgctxt "IDS_UPDATE_CONFIG_AUTO_CHECK"
msgid "Do you want to check periodically for MPC-HC updates?\n\nThis feature can be disabled later from the Miscellaneous options page."
-msgstr "您要定期檢查 MPC-HC 的更新嗎?\n\n這個功能稍後可在設定選項裡的其它頁面停用。"
+msgstr "您要定期檢查 MPC-HC 的更新嗎?\n\n這個功能稍後可在設定選項裡的其它頁面關閉。"
msgctxt "IDS_ZOOM_50"
msgid "50%"
@@ -1857,12 +1988,12 @@ msgid "Boss key"
msgstr "老闆鍵"
msgctxt "IDS_MPLAYERC_77"
-msgid "Player Menu (short)"
-msgstr "播放程式選單 (短)"
+msgid "Player Menu"
+msgstr "播放器選單"
msgctxt "IDS_MPLAYERC_78"
-msgid "Player Menu (long)"
-msgstr "播放程式選單 (長)"
+msgid "Player Menu (full)"
+msgstr "播放器選單 (完整)"
msgctxt "IDS_AG_FILTERS_MENU"
msgid "Filters Menu"
@@ -1873,20 +2004,20 @@ msgid "Options"
msgstr "選單"
msgctxt "IDS_AG_NEXT_AUDIO"
-msgid "Next Audio"
-msgstr "次一音訊"
+msgid "Next Audio Track"
+msgstr "下一段音軌"
msgctxt "IDS_AG_PREV_AUDIO"
-msgid "Prev Audio"
-msgstr "前一音訊"
+msgid "Prev Audio Track"
+msgstr "上一段音軌"
msgctxt "IDS_AG_NEXT_SUBTITLE"
-msgid "Next Subtitle"
-msgstr "次一字幕"
+msgid "Next Subtitle Track"
+msgstr "次一字幕軌"
msgctxt "IDS_AG_PREV_SUBTITLE"
-msgid "Prev Subtitle"
-msgstr "前一字幕"
+msgid "Prev Subtitle Track"
+msgstr "前一字幕軌"
msgctxt "IDS_MPLAYERC_85"
msgid "On/Off Subtitle"
@@ -1896,22 +2027,6 @@ msgctxt "IDS_MPLAYERC_86"
msgid "Reload Subtitles"
msgstr "重新載入字幕"
-msgctxt "IDS_MPLAYERC_87"
-msgid "Next Audio (OGM)"
-msgstr "次一音訊 (OGM)"
-
-msgctxt "IDS_MPLAYERC_88"
-msgid "Prev Audio (OGM)"
-msgstr "前一音訊 (OGM)"
-
-msgctxt "IDS_MPLAYERC_89"
-msgid "Next Subtitle (OGM)"
-msgstr "次一字幕 (OGM)"
-
-msgctxt "IDS_MPLAYERC_90"
-msgid "Prev Subtitle (OGM)"
-msgstr "前一字幕 (OGM)"
-
msgctxt "IDS_MPLAYERC_91"
msgid "Next Angle (DVD)"
msgstr "次一角度 (DVD)"
@@ -1921,28 +2036,28 @@ msgid "Prev Angle (DVD)"
msgstr "前一角度 (DVD)"
msgctxt "IDS_MPLAYERC_93"
-msgid "Next Audio (DVD)"
-msgstr "次一音訊 (DVD)"
+msgid "Next Audio Track (DVD)"
+msgstr "下一段音軌 (DVD)"
msgctxt "IDS_MPLAYERC_94"
-msgid "Prev Audio (DVD)"
-msgstr "前一音訊 (DVD)"
+msgid "Prev Audio Track (DVD)"
+msgstr "上一段音軌 (DVD)"
msgctxt "IDS_MPLAYERC_95"
-msgid "Next Subtitle (DVD)"
-msgstr "次一字幕 (DVD)"
+msgid "Next Subtitle Track (DVD)"
+msgstr "次一字幕軌 (DVD)"
msgctxt "IDS_MPLAYERC_96"
-msgid "Prev Subtitle (DVD)"
-msgstr "前一字幕 (DVD)"
+msgid "Prev Subtitle Track (DVD)"
+msgstr "前一字幕軌 (DVD)"
msgctxt "IDS_MPLAYERC_97"
msgid "On/Off Subtitle (DVD)"
msgstr "開啟/關閉字幕 (DVD)"
-msgctxt "IDS_MPLAYERC_98"
-msgid "Remaining Time"
-msgstr "剩餘時間"
+msgctxt "IDS_OSD_DISPLAY_CURRENT_TIME"
+msgid "OSD: Display Current Time"
+msgstr "OSD: 顯示目前時間"
msgctxt "IDS_PPAGEWEBSERVER_0"
msgid "Select the directory"
@@ -1968,11 +2083,11 @@ msgctxt "IDS_DVB_CHANNEL_ENCRYPTION"
msgid "Encrypted"
msgstr "已加密"
-msgctxt "IDS_DVB_CHANNEL_ENCRYPTED"
+msgctxt "IDS_YES"
msgid "Yes"
msgstr "是"
-msgctxt "IDS_DVB_CHANNEL_NOT_ENCRYPTED"
+msgctxt "IDS_NO"
msgid "No"
msgstr "否"
@@ -2029,12 +2144,12 @@ msgid "Volume: %02lu/%02lu, Title: %02lu/%02lu, Chapter: %02lu/%02lu"
msgstr "音量: %02lu/%02lu, 標題: %02lu/%02lu, 章節: %02lu/%02lu"
msgctxt "IDS_MAINFRM_10"
-msgid "Angle: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
+msgid "Angle: %02lu/%02lu, %lux%lu %lu Hz %lu:%lu"
msgstr "角度: %02lu/%02lu, %lux%lu %luHz %lu:%lu"
msgctxt "IDS_MAINFRM_11"
-msgid "%s, %s %uHz %dbits %d %s"
-msgstr "%s, %s %uHz %dbits %d %s"
+msgid "%s, %s %u Hz %d bits %d %s"
+msgstr "%s, %s %u Hz %d bits %d %s"
msgctxt "IDS_ADD_TO_PLAYLIST"
msgid "Add to MPC-HC Playlist"
@@ -2046,7 +2161,7 @@ msgstr "以 MPC-HC 播放"
msgctxt "IDS_CANNOT_CHANGE_FORMAT"
msgid "MPC-HC has not enough privileges to change files formats associations. Please click on the \"Run as administrator\" button."
-msgstr ""
+msgstr "MPC-HC 沒有足夠的權限變更檔案格式關聯。請點擊 \"以系統管理員身分執行\" 按鈕取得管理者權限。"
msgctxt "IDS_APP_DESCRIPTION"
msgid "MPC-HC is an extremely light-weight, open source media player for Windows. It supports all common video and audio file formats available for playback. We are 100% spyware free, there are no advertisements or toolbars."
@@ -2098,7 +2213,7 @@ msgstr "DVD: 光碟片與解碼器的區碼不相容"
msgctxt "IDS_D3DFS_WARNING"
msgid "This option is designed to avoid tearing. However, it will also prevent MPC-HC from displaying the context menu and any dialog box during playback.\n\nDo you really want to activate this option?"
-msgstr "這個選項是設計來避免抖動, 然而在播放時這也會阻礙 MPC-HC 顯示右鍵選單和對話框。\n\n您真的要開啟這個選項?"
+msgstr "這個選項是設計來避免撕裂, 然而在播放時這也會阻礙 MPC-HC 顯示右鍵選單和對話框。\n\n您真的要開啟這個選項?"
msgctxt "IDS_MAINFRM_139"
msgid "Sub delay: %ld ms"
@@ -2124,36 +2239,28 @@ msgctxt "IDS_THUMB_IMAGE_WIDTH"
msgid "Image width"
msgstr "影像寬度"
-msgctxt "IDS_PPSDB_URLCORRECT"
-msgid "The URL appears to be correct!"
-msgstr "網址應該正確!"
-
-msgctxt "IDS_PPSDB_PROTOCOLERR"
-msgid "Protocol version mismatch, please upgrade your player or choose a different address!"
-msgstr "通訊協定版本不合,請升級您的播放程式或是選擇不同的網址!"
-
msgctxt "IDS_AG_ASPECT_RATIO"
msgid "Aspect Ratio"
-msgstr "長寬比例"
+msgstr "長寬比"
msgctxt "IDS_MAINFRM_37"
msgid ", Total: %ld, Dropped: %ld"
msgstr ", 總和: %ld, 略過: %ld"
msgctxt "IDS_MAINFRM_38"
-msgid ", Size: %I64dKB"
+msgid ", Size: %I64d KB"
msgstr ", 大小: %I64dKB"
msgctxt "IDS_MAINFRM_39"
-msgid ", Size: %I64dMB"
+msgid ", Size: %I64d MB"
msgstr ", 大小: %I64dMB"
msgctxt "IDS_MAINFRM_40"
-msgid ", Free: %I64dKB"
+msgid ", Free: %I64d KB"
msgstr ", 剩餘: %I64dKB"
msgctxt "IDS_MAINFRM_41"
-msgid ", Free: %I64dMB"
+msgid ", Free: %I64d MB"
msgstr ", 剩餘: %I64dMB"
msgctxt "IDS_MAINFRM_42"
@@ -2225,23 +2332,23 @@ msgid "The thumbnails would be too small, impossible to create the file.\n\nTry
msgstr "縮圖太小了,無法創建檔案。\n\n嘗試減少縮圖的數量或是增加整體大小。"
msgctxt "IDS_CANNOT_LOAD_SUB"
-msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-7/VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
-msgstr "要載入字幕您必須變更視訊繪製器類型並重新開啟檔案。\n- DirectShow: VMR-7/VMR-9 (無轉換), EVR 自訂呈現, 同步, madVR 或是 Haali\n- RealMedia: 給 RealMedia 用的特殊繪製器, 或是透過 DirectShow 開啟\n- QuickTime: 給 QuickTime 用的 DX7 或 DX9 繪製器\n- ShockWave: n/a"
+msgid "To load subtitles you have to change the video renderer type and reopen the file.\n- DirectShow: VMR-9 (renderless), EVR (CP), Sync, madVR or Haali\n- RealMedia: Special renderer for RealMedia, or open it through DirectShow\n- QuickTime: DX7 or DX9 renderer for QuickTime\n- ShockWave: n/a"
+msgstr "要載入字幕您必須變更視訊繪製器類型並重新開啟檔案。\n- DirectShow: VMR-9 (無轉換), EVR 自訂呈現, 同步, madVR 或是 Haali\n- RealMedia: 給 RealMedia 用的特殊繪製器, 或是透過 DirectShow 開啟\n- QuickTime: 給 QuickTime 用的 DX7 或 DX9 繪製器\n- ShockWave: n/a"
msgctxt "IDS_SUBTITLE_FILES_FILTER"
msgid "Subtitle files"
-msgstr ""
+msgstr "字幕檔案"
msgctxt "IDS_MAINFRM_68"
msgid "Aspect Ratio: %ld:%ld"
-msgstr "長寬比例: %ld:%ld"
+msgstr "長寬比: %ld:%ld"
msgctxt "IDS_MAINFRM_69"
-msgid "Aspect Ratio: Default"
-msgstr "長寬比例: 預設值"
+msgid "Aspect Ratio: Default (DAR)"
+msgstr "長寬比: 預設 (DAR)"
msgctxt "IDS_MAINFRM_70"
-msgid "Audio Delay: %I64dms"
+msgid "Audio delay: %I64d ms"
msgstr "音訊延遲: %I64dms"
msgctxt "IDS_AG_CHAPTER"
@@ -2253,8 +2360,8 @@ msgid "Out of memory"
msgstr "記憶體不足"
msgctxt "IDS_MAINFRM_77"
-msgid "Error: Flash player for IE is required"
-msgstr "錯誤: 需要 IE 用的 Flash"
+msgid "Error: Adobe Flash Player for Internet Explorer is required"
+msgstr "錯誤: 需要 Internet Explorer 用的 Flash"
msgctxt "IDS_MAINFRM_78"
msgid "QuickTime not yet supported for X64 (apple library not available)"
@@ -2262,7 +2369,7 @@ msgstr "QuickTime 尚未支援 X64 (沒有 Apple 的函式庫)"
msgctxt "IDS_MAINFRM_80"
msgid "Failed to create the filter graph object"
-msgstr "無法建立篩選器圖 (Filter Graph) 物件"
+msgstr "無法建立 Filter Graph 物件"
msgctxt "IDS_MAINFRM_81"
msgid "Invalid argument"
@@ -2276,10 +2383,6 @@ msgctxt "IDS_MAINFRM_83"
msgid "Failed to render the file"
msgstr "無法繪製檔案"
-msgctxt "IDS_PPSDB_BADURL"
-msgid "Bad URL, could not locate subtitle database there!"
-msgstr "錯誤的網址, 無法定位字幕資料庫!"
-
msgctxt "IDS_AG_CHAPTER2"
msgid "Chapter: "
msgstr "章節: "
@@ -2300,14 +2403,6 @@ msgctxt "IDS_FULLSCREENMONITOR_CURRENT"
msgid "Current"
msgstr "目前的"
-msgctxt "IDS_MPC_CRASH"
-msgid "MPC-HC terminated unexpectedly. To help us fix this problem, please send this file \"%s\" to our bug tracker.\n\nDo you want to open the folder containing the minidump file and visit the bug tracker now?"
-msgstr "MPC-HC 未預期終止。為了幫助我們修正這個問題, 請傳送 '%s' 這個檔案到我們的 Bug Tracker。\n\n您要開啟內含 minidump 傾印檔案的資料夾並立即拜訪 Bug Tracker?"
-
-msgctxt "IDS_MPC_MINIDUMP_FAIL"
-msgid "Failed to create dump file to \"%s\" (error %u)"
-msgstr "無法建立傾印檔案到 '%s' (錯誤 %u)"
-
msgctxt "IDS_MAINFRM_DIR_TITLE"
msgid "Select Directory"
msgstr "選擇目錄"
@@ -2322,10 +2417,10 @@ msgstr "暫停"
msgctxt "IDS_AG_TOGGLE_CAPTION"
msgid "Toggle Caption&Menu"
-msgstr "切換標題選單"
+msgstr "切換標題選單(&M)"
msgctxt "IDS_AG_TOGGLE_SEEKER"
-msgid "Toggle Seeker"
+msgid "Toggle Seek Bar"
msgstr "切換搜尋列"
msgctxt "IDS_AG_TOGGLE_CONTROLS"
@@ -2434,7 +2529,7 @@ msgstr " (導演解說 2)"
msgctxt "IDS_DVD_SUBTITLES_ENABLE"
msgid "Enable DVD subtitles"
-msgstr "啟動DVD字幕"
+msgstr "開啟 DVD 字幕"
msgctxt "IDS_AG_ANGLE"
msgid "Angle %u"
@@ -2446,7 +2541,7 @@ msgstr "增加垂直同步偏移量"
msgctxt "IDS_AG_DISABLED"
msgid "Disabled"
-msgstr "已停用"
+msgstr "已關閉"
msgctxt "IDS_AG_VSYNCOFFSET_DECREASE"
msgid "Decrease VSync Offset"
@@ -2481,8 +2576,8 @@ msgid "Volume boost Max"
msgstr "最大音量增幅"
msgctxt "IDS_USAGE"
-msgid "Usage: mpc-hc.exe \"pathname\" [switches]\n\n\"pathname\"\tThe main file or directory to be loaded (wildcards\n\t\tallowed, \"-\" denotes standard input)\n/dub \"dubname\"\tLoad an additional audio file\n/dubdelay \"file\"\tLoad an additional audio file shifted with XXms (if\n\t\tthe file contains \"...DELAY XXms...\")\n/d3dfs\t\tStart rendering in D3D fullscreen mode\n/sub \"subname\"\tLoad an additional subtitle file\n/filter \"filtername\"\tLoad DirectShow filters from a dynamic link\n\t\tlibrary (wildcards allowed)\n/dvd\t\tRun in dvd mode, \"pathname\" means the dvd\n\t\tfolder (optional)\n/dvdpos T#C\tStart playback at title T, chapter C\n/dvdpos T#hh:mm\tStart playback at title T, position hh:mm:ss\n/cd\t\tLoad all the tracks of an audio cd or (s)vcd,\n\t\t\"pathname\" means the drive path (optional)\n/device\t\tOpen the default video device\n/open\t\tOpen the file, don't automatically start playback\n/play\t\tStart playing the file as soon the player is\n\t\tlaunched\n/close\t\tClose the player after playback (only works when\n\t\tused with /play)\n/shutdown\tShutdown the operating system after playback\n/fullscreen\tStart in full-screen mode\n/minimized\tStart in minimized mode\n/new\t\tUse a new instance of the player\n/add\t\tAdd \"pathname\" to playlist, can be combined\n\t\twith /open and /play\n/regvid\t\tCreate file associations for video files\n/regaud\t\tCreate file associations for audio files\n/regpl\t\tCreate file associations for playlist files\n/regall\t\tCreate file associations for all supported file types\n/unregall\t\tRemove all file associations\n/start ms\t\tStart playing at \"ms\" (= milliseconds)\n/startpos hh:mm:ss\tStart playing at position hh:mm:ss\n/fixedsize w,h\tSet a fixed window size\n/monitor N\tStart player on monitor N, where N starts from 1\n/audiorenderer N\tStart using audiorenderer N, where N starts from 1\n\t\t(see \"Output\" settings)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\tRestore default settings\n/help /h /?\tShow help about command line switches\n"
-msgstr "用法: mpc-hc.exe \"路徑名稱\" [選項]\n\n\"路徑名稱\"\t要載入的主要檔案或資料夾。(可使用萬用字元, \"-\" 表示標準輸入)\n/dub \"音源名稱\"\t載入額外的音訊檔案\n/dubdelay \"檔案\"\t以平移 XXms 的時間載入額外的音訊檔案。\n\t\t(如果檔案含有 \"...DELAY XXms...\")\n/d3dfs\t\t在 D3D 全螢幕模式啟動繪製\n/sub \"字幕名稱\"\t載入額外的字幕檔\n/filter \"篩選器名\"\t從動態連結函式庫載入 DirectShow 篩選器。\n\t\t(允許萬用字元)\n/dvd\t\t執行 DVD 模式, \"路徑名稱\" 代表該 DVD 資料夾\n\t\t(選用)\n/dvdpos T#C\t從第 T 標題, 第 C 章節開始播放\n/dvdpos T#hh:mm\t從第 T 標題, 時間 hh:mm:ss 開始播放\n/cd\t\t載入音樂 CD 或是 (S)VCD 的所有音軌, \"路徑名稱\"\n\t\t表示光碟機路徑 (選用)\n/device\t\t開啟預設視訊設備\n/open\t\t開啟檔案, 但不自動播放\n/play\t\t播放程式一啟動就播放檔案\n/close\t\t播放完畢後就關閉播放程式 (搭配 /play\n\t\t一起用才有效)\n/shutdown\t播放完之後關閉作業系統\n/fullscreen\t以全螢幕模式啟動\n/minimized\t以最小化模式啟動\n/new\t\t使用新的播放程式實體\n/add\t\t新增 \"路徑名稱\" 到播放清單, 可與 /open 和 /play\n\t\t合併使用\n/regvid\t\t建立視訊格式檔案關聯\n/regaud\t\t建立音訊格式檔案關聯\n/regpl\t\t建立播放清單檔案關聯\n/regall\t\t建立所有支援格式的檔案關聯\n/unregall\t\t移除所有檔案關聯\n/start ms\t\t從第 ms 毫秒開始播放\n/startpos hh:mm:ss\t從時間 hh:mm:ss 開始播放\n/fixedsize w,h\t設定固定的視窗大小\n/monitor N\t在第 N 顯示器啟動, N 從 1 開始\n/audiorenderer N\t使用第 N 音訊譜製器啟動, N 從 1 開始\n\t\t(請見 \"輸出\" 設定)\n/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset\n/reset\t\t回復預設設定\n/help /h /?\t顯示命令列選項的說明\n"
+msgid "Usage: mpc-hc.exe \"pathname\" [switches]"
+msgstr "用法: mpc-hc.exe \"pathname\" [參數]"
msgctxt "IDS_UNKNOWN_SWITCH"
msgid "Unrecognized switch(es) found in command line string: \n\n"
@@ -2514,7 +2609,7 @@ msgstr "切換擷取列"
msgctxt "IDS_AG_TOGGLE_DEBUGSHADERS"
msgid "Toggle Debug Shaders"
-msgstr "切換偵錯 Shader"
+msgstr "切換除錯著色器"
msgctxt "IDS_AG_ZOOM_50"
msgid "Zoom 50%"
@@ -2530,7 +2625,7 @@ msgstr "縮放 200%"
msgctxt "IDS_AG_NEXT_AR_PRESET"
msgid "Next AR Preset"
-msgstr "次一長寬比先期設定"
+msgstr "下一個長寬比初始設定"
msgctxt "IDS_AG_VIDFRM_STRETCH"
msgid "VidFrm Stretch"
@@ -2566,15 +2661,7 @@ msgstr "視訊畫面 - 切換縮放"
msgctxt "IDS_ENABLE_ALL_FILTERS"
msgid "&Enable all filters"
-msgstr "啟用所有篩選器(&E)"
-
-msgctxt "IDS_NAVIGATE_TUNERSCAN"
-msgid "Tuner scan"
-msgstr "調諧器掃描"
-
-msgctxt "IDS_SUBTITLES_ERROR"
-msgid "Subtitles are not loaded or unsupported renderer."
-msgstr "字幕未載入或是未支援的繪製器。"
+msgstr "開啟所有篩選器(&E)"
msgctxt "IDS_LOGO_AUTHOR"
msgid "Author unknown. Contact us if you made this logo!"
@@ -2664,40 +2751,12 @@ msgctxt "IDS_TOP_BACK_RIGHT"
msgid "Top Back Right"
msgstr "右上後側"
-msgctxt "IDS_AG_RESET_STATS"
-msgid "Reset Display Stats"
-msgstr "重設顯示統計"
-
-msgctxt "IDD_PPAGESUBMISC"
-msgid "Subtitles::Misc"
-msgstr "字幕::其它"
-
-msgctxt "IDS_VIEW_BORDERLESS"
-msgid "Hide &borders"
-msgstr "隱藏邊框"
-
-msgctxt "IDS_VIEW_FRAMEONLY"
-msgid "Frame Only"
-msgstr "僅影格"
-
-msgctxt "IDS_VIEW_CAPTIONMENU"
-msgid "Sho&w Caption&&Menu"
-msgstr "顯示標題選單"
-
-msgctxt "IDS_VIEW_HIDEMENU"
-msgid "Hide &Menu"
-msgstr "隱藏選單"
-
-msgctxt "IDD_PPAGEADVANCED"
-msgid "Advanced"
-msgstr ""
-
msgctxt "IDS_TIME_TOOLTIP_ABOVE"
-msgid "Above seekbar"
+msgid "Above seek bar"
msgstr "搜尋列之上"
msgctxt "IDS_TIME_TOOLTIP_BELOW"
-msgid "Below seekbar"
+msgid "Below seek bar"
msgstr "搜尋列之下"
msgctxt "IDS_VIDEO_STREAM"
@@ -2730,23 +2789,23 @@ msgstr "編碼:"
msgctxt "IDS_DISABLE_ALL_FILTERS"
msgid "&Disable all filters"
-msgstr "停用所有篩選器(&D)"
+msgstr "關閉所有篩選器(&D)"
msgctxt "IDS_ENABLE_AUDIO_FILTERS"
msgid "Enable all audio decoders"
-msgstr "啟用所有音訊篩選器"
+msgstr "開啟所有音訊解碼器"
msgctxt "IDS_DISABLE_AUDIO_FILTERS"
msgid "Disable all audio decoders"
-msgstr "停用所有音訊篩選器"
+msgstr "關閉所有音訊解碼器"
msgctxt "IDS_ENABLE_VIDEO_FILTERS"
msgid "Enable all video decoders"
-msgstr "啟用所有視訊篩選器"
+msgstr "開啟所有視訊解碼器"
msgctxt "IDS_DISABLE_VIDEO_FILTERS"
msgid "Disable all video decoders"
-msgstr "停用所有視訊篩選器"
+msgstr "關閉所有視訊解碼器"
msgctxt "IDS_STRETCH_TO_WINDOW"
msgid "Stretch To Window"
@@ -2865,8 +2924,8 @@ msgid "Other Audio"
msgstr "其他音訊"
msgctxt "IDS_MFMT_AC3"
-msgid "AC-3/DTS"
-msgstr "AC-3/DTS"
+msgid "AC-3"
+msgstr "AC-3"
msgctxt "IDS_MFMT_AIFF"
msgid "AIFF"
@@ -2876,6 +2935,26 @@ msgctxt "IDS_MFMT_ALAC"
msgid "Apple Lossless"
msgstr "Apple Lossless"
+msgctxt "IDS_MFMT_WAV"
+msgid "WAV"
+msgstr "WAV"
+
+msgctxt "IDS_MFMT_WMA"
+msgid "Windows Media Audio"
+msgstr "Windows Media Audio"
+
+msgctxt "IDS_MFMT_WV"
+msgid "WavPack"
+msgstr "WavPack"
+
+msgctxt "IDS_MFMT_OPUS"
+msgid "Opus Audio Codec"
+msgstr "Opus 音訊"
+
+msgctxt "IDS_MFMT_DTS"
+msgid "DTS/DTS-HD"
+msgstr "DTS/DTS-HD"
+
msgctxt "IDS_MFMT_AMR"
msgid "AMR"
msgstr "AMR"
@@ -2940,22 +3019,6 @@ msgctxt "IDS_MFMT_TTA"
msgid "True Audio"
msgstr "True Audio"
-msgctxt "IDS_MFMT_WAV"
-msgid "WAV"
-msgstr "WAV"
-
-msgctxt "IDS_MFMT_WMA"
-msgid "Windows Media Audio"
-msgstr "Windows Media Audio"
-
-msgctxt "IDS_MFMT_WV"
-msgid "WavPack"
-msgstr "WavPack"
-
-msgctxt "IDS_MFMT_OPUS"
-msgid "Opus Audio Codec"
-msgstr "Opus 音訊"
-
msgctxt "IDS_MFMT_PLS"
msgid "Playlist"
msgstr "播放清單"
@@ -2980,18 +3043,6 @@ msgctxt "IDS_DVB_CHANNEL_ASPECT_RATIO"
msgid "Aspect Ratio"
msgstr "長寬比"
-msgctxt "IDS_ARS_WASAPI_MODE"
-msgid "Use WASAPI (restart playback)"
-msgstr "使用 WASAPI (會重新播放)"
-
-msgctxt "IDS_ARS_MUTE_FAST_FORWARD"
-msgid "Mute on fast forward"
-msgstr "快轉時靜音"
-
-msgctxt "IDS_ARS_SOUND_DEVICE"
-msgid "Sound Device:"
-msgstr "聲音裝置:"
-
msgctxt "IDS_OSD_RS_VSYNC_ON"
msgid "VSync: On"
msgstr "垂直同步: 開啟"
@@ -3122,11 +3173,11 @@ msgstr "D3D 全螢幕: 關閉"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_ON"
msgid "Disable desktop composition: On"
-msgstr "停用桌面轉譯: 開啟"
+msgstr "關閉桌面轉譯: 開"
msgctxt "IDS_OSD_RS_NO_DESKTOP_COMP_OFF"
msgid "Disable desktop composition: Off"
-msgstr "停用桌面轉譯: 關閉"
+msgstr "關閉桌面轉譯: 關"
msgctxt "IDS_OSD_RS_ALT_VSYNC_ON"
msgid "Alternative VSync: On"
@@ -3250,11 +3301,11 @@ msgstr "切換自訂的聲道對應"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_ON"
msgid "Custom channel mapping: On"
-msgstr "自訂的聲道對應: 開啟"
+msgstr "自訂聲道對應: 開"
msgctxt "IDS_OSD_CUSTOM_CH_MAPPING_OFF"
msgid "Custom channel mapping: Off"
-msgstr "自訂的聲道對應: 關閉"
+msgstr "自訂聲道對應: 關"
msgctxt "IDS_NORMALIZE"
msgid "Toggle normalization"
@@ -3280,6 +3331,10 @@ msgctxt "IDS_OSD_REGAIN_VOLUME_OFF"
msgid "Regain volume: Off"
msgstr "回復音量: 關閉"
+msgctxt "IDS_SIZE_UNIT_BYTES"
+msgid "bytes"
+msgstr "位元組"
+
msgctxt "IDS_SIZE_UNIT_K"
msgid "KB"
msgstr "KB"
@@ -3337,7 +3392,7 @@ msgid "Error parsing the entered frame rate!"
msgstr "解析輸入的影格播放速率時發生錯誤!"
msgctxt "IDS_FRAME_STEP_ERROR_RENDERER"
-msgid "Cannot frame step, try a different video renderer."
+msgid "Cannot frame-step, try a different video renderer."
msgstr "不能步進影格, 請嘗試其他的視訊繪製器。"
msgctxt "IDS_SCREENSHOT_ERROR_REAL"
@@ -3356,10 +3411,6 @@ msgctxt "IDS_SCREENSHOT_ERROR_OVERLAY"
msgid "The \"Save Image\" and \"Save Thumbnails\" functions do not work with the Overlay Mixer video renderer.\nChange the video renderer in MPC's output options and reopen the file."
msgstr "\"儲存影像\" 和 \"儲存縮圖\" 功能不能與覆疊合成繪製器一同運作。\n請至 MPC-HC 輸出選項中更改繪製器設定並重新開啟檔案。"
-msgctxt "IDS_SUBDL_DLG_CONNECT_ERROR"
-msgid "Cannot connect to the online subtitles database."
-msgstr "無法連結線上字幕資料庫。"
-
msgctxt "IDS_MB_SHOW_EDL_EDITOR"
msgid "Do you want to activate the EDL editor?"
msgstr "您要啟用 EDL 編輯器嗎?"
@@ -3378,19 +3429,19 @@ msgstr "音訊"
msgctxt "IDS_CAPTURE_ERROR_ADD_BUFFER"
msgid "Can't add the %s buffer filter to the graph."
-msgstr "不能加入 %s 緩衝篩選器至篩選器圖。"
+msgstr "不能加入 %s 緩衝篩選器至 Filter Graph。"
msgctxt "IDS_CAPTURE_ERROR_CONNECT_BUFF"
msgid "Can't connect the %s buffer filter to the graph."
-msgstr "無法連接 %s 緩衝篩選器至篩選器圖。"
+msgstr "無法連接 %s 緩衝篩選器至 Filter Graph。"
msgctxt "IDS_CAPTURE_ERROR_ADD_ENCODER"
msgid "Can't add the %s encoder filter to the graph."
-msgstr "不能加入 %s 編碼篩選器至篩選器圖。"
+msgstr "不能加入 %s 編碼篩選器至 Filter Graph。"
msgctxt "IDS_CAPTURE_ERROR_CONNECT_ENC"
msgid "Can't connect the %s encoder filter to the graph."
-msgstr "無法連接 %s 編碼篩選器至篩選器圖。"
+msgstr "無法連接 %s 編碼篩選器至 Filter Graph。"
msgctxt "IDS_CAPTURE_ERROR_COMPRESSION"
msgid "Can't set the compression format on the %s encoder filter."
@@ -3428,7 +3479,7 @@ msgctxt "IDS_WEBSERVER_ERROR_TEST"
msgid "You need to apply the new settings before testing them."
msgstr "測試之前您需要套用新的設定。"
-msgctxt "IDS_AFTERPLAYBACK_CLOSE"
+msgctxt "IDS_AFTERPLAYBACK_EXIT"
msgid "After Playback: Exit"
msgstr "播放完後: 離開"
@@ -3454,7 +3505,15 @@ msgstr "播放完後: 鎖定"
msgctxt "IDS_AFTERPLAYBACK_MONITOROFF"
msgid "After Playback: Turn off the monitor"
-msgstr ""
+msgstr "播放完後: 關閉螢幕"
+
+msgctxt "IDS_AFTERPLAYBACK_PLAYNEXT"
+msgid "After Playback: Play next file in the folder"
+msgstr "播放完後: 播放此資料夾的下一個檔案"
+
+msgctxt "IDS_AFTERPLAYBACK_DONOTHING"
+msgid "After Playback: Do nothing"
+msgstr "播放完後: 什麼都不做"
msgctxt "IDS_OSD_BRIGHTNESS"
msgid "Brightness: %s"
@@ -3490,11 +3549,11 @@ msgstr "請在這裡輸入您所偏好的語言。\n例如,輸入: \"eng jap s
msgctxt "IDS_OVERRIDE_EXT_SPLITTER_CHOICE"
msgid "External splitters can have their own language preference options thus MPC-HC default behavior is not to change their initial choice.\nEnable this option if you want MPC-HC to control external splitters."
-msgstr "外部分離器可能有它們自己的語言偏好選項所以 MPC-HC 的預設行為並不改變它們內定的選擇。\n如果您想 MPC-HC 控制外部分離器的話請啟用這個選項。"
+msgstr "外部分離器可能有它們自己的語言偏好選項所以 MPC-HC 的預設行為並不改變它們內定的選擇。\n如果您想 MPC-HC 控制外部分離器的話請開啟這個選項。"
msgctxt "IDS_NAVIGATE_BD_PLAYLISTS"
msgid "&Blu-Ray playlists"
-msgstr "&Blu-Ray 播放清單"
+msgstr "藍光播放清單(&B)"
msgctxt "IDS_NAVIGATE_PLAYLIST"
msgid "&Playlist"
@@ -3514,25 +3573,409 @@ msgstr "頻道 (&C)"
msgctxt "IDC_FASTSEEK_CHECK"
msgid "If \"latest keyframe\" is selected, seek to the first keyframe before the actual seek point.\nIf \"nearest keyframe\" is selected, seek to the first keyframe before or after the seek point depending on which is the closest."
-msgstr ""
+msgstr "若選擇 \"最近的關鍵幀\", 在搜索時會選擇實際搜索時間點前最近的關鍵幀。\n若選擇 \"最接近的關鍵幀\" , 在搜索時會根據前後關鍵幀選擇最近的關鍵幀。"
msgctxt "IDC_ASSOCIATE_ALL_FORMATS"
msgid "Associate with all formats"
-msgstr ""
+msgstr "關聯所有格式"
msgctxt "IDC_ASSOCIATE_VIDEO_FORMATS"
msgid "Associate with video formats only"
-msgstr ""
+msgstr "僅關聯視訊格式"
msgctxt "IDC_ASSOCIATE_AUDIO_FORMATS"
msgid "Associate with audio formats only"
-msgstr ""
+msgstr "僅關聯音訊格式"
msgctxt "IDC_CLEAR_ALL_ASSOCIATIONS"
msgid "Clear all associations"
-msgstr ""
+msgstr "清除所有檔案關聯"
msgctxt "IDS_FILTER_SETTINGS_CAPTION"
msgid "Settings"
msgstr "設置"
+msgctxt "IDS_SUBTITLE_RENDERER_VS_FILTER"
+msgid "VSFilter / DirectVobSub"
+msgstr "VSFilter / DirectVobSub"
+
+msgctxt "IDS_SUBTITLE_RENDERER_XY_SUB_FILTER"
+msgid "XySubFilter"
+msgstr "XySubFilter"
+
+msgctxt "IDS_SUBTITLE_RENDERER_ASS_FILTER"
+msgid "AssFilter"
+msgstr ""
+
+msgctxt "IDS_SUBDL_DLG_PROVIDER_COL"
+msgid "Provider"
+msgstr "提供者"
+
+msgctxt "IDS_SUBDL_DLG_HI_COL"
+msgid "Hearing Impaired"
+msgstr "聽力受損"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADS_COL"
+msgid "Downloads"
+msgstr "下載"
+
+msgctxt "IDS_SUBDL_DLG_SCORE_COL"
+msgid "Score"
+msgstr "評分"
+
+msgctxt "IDS_SUBDL_DLG_FAILED"
+msgid "Online subtitles search failed."
+msgstr "線上字幕搜尋失敗。"
+
+msgctxt "IDS_SUBDL_DLG_ABORTED"
+msgid "Online subtitles search aborted."
+msgstr "線上字幕搜尋已中止。"
+
+msgctxt "IDS_SUBDL_DLG_FOUND"
+msgid "Online subtitles search completed, %d subtitles found."
+msgstr "線上字幕搜尋已完成,共找到 %d 筆相符的字幕。"
+
+msgctxt "IDS_SUBDL_DLG_NOTFOUND"
+msgid "Online subtitles search completed, no subtitles found."
+msgstr "線上字幕搜尋已完成,找不到任何相符字幕。"
+
+msgctxt "IDS_SUBDL_DLG_TITLE"
+msgid "Download subtitles"
+msgstr "下載字幕"
+
+msgctxt "IDS_SUBDL_DLG_SEARCHING"
+msgid "Searching for subtitles online, please wait..."
+msgstr "正在由線上搜尋字幕,請稍候..."
+
+msgctxt "IDS_SUBDL_DLG_ABORTING"
+msgid "Online subtitles search aborting..."
+msgstr "正在中止線上字幕搜尋..."
+
+msgctxt "IDS_SUBUL_DLG_USERNAME_COL"
+msgid "Username"
+msgstr "使用者名稱"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_COL"
+msgid "Status"
+msgstr "狀態"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_READY"
+msgid "Ready..."
+msgstr "準備..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED"
+msgid "Not implemented."
+msgstr "尚未實作。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADING"
+msgid "Uploading..."
+msgstr "正在上傳..."
+
+msgctxt "IDS_SUBUL_DLG_STATUS_UPLOADED"
+msgid "Subtitles uploaded successfully."
+msgstr "字幕已成功上傳。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_FAILED"
+msgid "Subtitles upload failed."
+msgstr "上傳字幕失敗。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ABORTED"
+msgid "Subtitles upload aborted."
+msgstr "字幕上傳已中止。"
+
+msgctxt "IDS_SUBUL_DLG_STATUS_ALREADYEXISTS"
+msgid "Subtitles already exist."
+msgstr "字幕已存在。"
+
+msgctxt "IDS_SUBUL_DLG_UPLOADING"
+msgid "Uploading subtitles, please wait..."
+msgstr "正在上傳字幕,請稍候..."
+
+msgctxt "IDS_SUBUL_DLG_UPLOADED"
+msgid "Upload finished."
+msgstr "上傳已完成。"
+
+msgctxt "IDS_SUBUL_DLG_ABORTED"
+msgid "Upload aborted."
+msgstr "上傳已中止。"
+
+msgctxt "IDS_SUBUL_DLG_FAILED"
+msgid "Upload failed."
+msgstr "上傳失敗。"
+
+msgctxt "IDS_SUBMENU_DOWNLOAD"
+msgid "Download && Open"
+msgstr "下載並開啟"
+
+msgctxt "IDS_SUBMENU_SETUP"
+msgid "Setup"
+msgstr "安裝"
+
+msgctxt "IDS_SUBMENU_RESET"
+msgid "Reset"
+msgstr "重設"
+
+msgctxt "IDS_SUBMENU_MOVEUP"
+msgid "Move Up"
+msgstr "上移"
+
+msgctxt "IDS_SUBMENU_MOVEDOWN"
+msgid "Move Down"
+msgstr "下移"
+
+msgctxt "IDS_SUBMENU_OPENURL"
+msgid "Open URL"
+msgstr "開啟網址"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_COL"
+msgid "Languages"
+msgstr "語言"
+
+msgctxt "IDS_SUBPP_DLG_LANGUAGES_ERROR"
+msgid "ERROR: Internet connection could not be established."
+msgstr "錯誤: 無法建立網際網路。"
+
+msgctxt "IDS_SUB_CREDENTIALS_TITLE"
+msgid "Enter website credentials"
+msgstr "輸入網站憑證"
+
+msgctxt "IDS_SUB_CREDENTIALS_MSG"
+msgid "Enter your credentials to connect to: "
+msgstr "輸入您的憑證以連線至:"
+
+msgctxt "IDS_ASPECT_RATIO_SAR"
+msgid "Aspect Ratio: Assume square pixels (SAR)"
+msgstr "長寬比: 假設正方型像素 (SAR)"
+
+msgctxt "IDS_SUBDL_DLG_DOWNLOADED"
+msgid "Downloaded [%s] \"%s\""
+msgstr "已下載 [%s] \"%s\""
+
+msgctxt "IDS_SUBUL_DLG_TITLE"
+msgid "Upload subtitles"
+msgstr "上傳字幕"
+
+msgctxt "IDS_SUBUL_DLG_CONFIRM"
+msgid "Are you sure you want to upload the subtitle file \"%s\"?"
+msgstr "您確定要上傳字幕檔案 \"%s\" 嗎?"
+
+msgctxt "IDS_SUBPP_DLG_FETCHING_LANGUAGES"
+msgid "Fetching supported languages..."
+msgstr "取得支援的語言..."
+
+msgctxt "IDS_SUB_CREDENTIALS_ERROR"
+msgid "Failed to log in on \"%S\" with username \"%S\".\n\nPlease enter the correct username and password or reset the credentials to log in as anonymous user."
+msgstr "登入 \"%S\" 使用使用者名稱 \"%S\" 失敗\n\n請輸入正確的使用者名稱及密碼或者重設使用匿名使用者登入。"
+
+msgctxt "IDS_SUB_AUTODL_IGNORE_TOOLTIP"
+msgid "Automatic search and download will be disabled for all media files whose path contains any of the patterns entered here.\nFor example, type: \"private dir\\videos|work\\\"."
+msgstr "將會關閉媒體檔所在的目錄中包含以下字詞的自動搜尋與下載功能。\n例如輸入 \"private dir\\videos|work\\\"。"
+
+msgctxt "IDS_CMD_PATHNAME"
+msgid "\"pathname\"\tThe main file or directory to be loaded\n\t\t(wildcards allowed, \"-\" denotes standard input)"
+msgstr "\"pathname\"\t要載入的主要檔案或目錄\n\t\t(允許使用萬用字元,\"-\" 代表標準輸入)"
+
+msgctxt "IDS_CMD_DUB"
+msgid "/dub \"dubname\"\tLoad an additional audio file"
+msgstr "/dub \"dubname\"\t載入額外的音訊檔"
+
+msgctxt "IDS_CMD_DUBDELAY"
+msgid "/dubdelay \"file\"\tLoad an additional audio file shifted with XXms\n\t\t(if the file contains \"...DELAY XXms...\")"
+msgstr "/dubdelay \"file\"\t載入額外的音訊檔並偏移 XXms\n\t\t(若檔案含有 \"...DELAY XXms...\")"
+
+msgctxt "IDS_CMD_D3DFS"
+msgid "/d3dfs\t\tStart rendering in D3D fullscreen mode"
+msgstr "/d3dfs\t\t開啟 D3D 全螢幕模式繪圖"
+
+msgctxt "IDS_CMD_SUB"
+msgid "/sub \"subname\"\tLoad an additional subtitle file"
+msgstr "/sub \"subname\"\t載入額外的字幕檔"
+
+msgctxt "IDS_CMD_FILTER"
+msgid "/filter \"filtername\"\tLoad DirectShow filters from a dynamic link library (wildcards allowed)"
+msgstr "/filter \"filtername\"\t從動態連結程式庫載入 DirectShow 篩選器 (允許使用萬用字元)"
+
+msgctxt "IDS_CMD_DVD"
+msgid "/dvd\t\tRun in DVD mode, \"pathname\" means the DVD folder (optional)"
+msgstr "/dvd\t\t使用 DVD 模式執行,\"pathname\" 為 DVD 的資料夾 (選填)"
+
+msgctxt "IDS_CMD_DVDPOS_TC"
+msgid "/dvdpos T#C\tStart playback at title T, chapter C"
+msgstr "/dvdpos T#C\t從標題 T 章節 C 開始播放"
+
+msgctxt "IDS_CMD_DVDPOS_TIME"
+msgid "/dvdpos T#P\tStart playback at title T, position P (hh:mm:ss)"
+msgstr ""
+
+msgctxt "IDS_CMD_CD"
+msgid "/cd\t\tLoad all the tracks of an Audio CD or (S)VCD,\n\t\t\"pathname\" means the drive path (optional)"
+msgstr "/cd\t\t載入所有音樂 cd 或 (S)VCD 的音軌,\n\t\t\"pathname\" 為磁碟機路徑 (選填)"
+
+msgctxt "IDS_CMD_DEVICE"
+msgid "/device\t\tOpen the default video device"
+msgstr "/device\t\t開啟預設的視訊裝置"
+
+msgctxt "IDS_CMD_OPEN"
+msgid "/open\t\tOpen the file, don't automatically start playback"
+msgstr "/open\t\t開啟檔案,不自動播放"
+
+msgctxt "IDS_CMD_PLAY"
+msgid "/play\t\tStart playing the file as soon the player is launched"
+msgstr "/play\t\t播放器執行後即開始播放檔案"
+
+msgctxt "IDS_CMD_CLOSE"
+msgid "/close\t\tClose the player after playback (only works when used with /play)"
+msgstr "/close\t\t播放結束後關閉播放器 (需配合 /play 使用)"
+
+msgctxt "IDS_CMD_SHUTDOWN"
+msgid "/shutdown\tShutdown the operating system after playback"
+msgstr "/shutdown\t播放結束後關機"
+
+msgctxt "IDS_CMD_STANDBY"
+msgid "/standby\t\tPut the operating system in standby mode after playback"
+msgstr "/standby\t\t播放結束後進入待命模式"
+
+msgctxt "IDS_CMD_HIBERNATE"
+msgid "/hibernate\tHibernate operating system after playback"
+msgstr "/hibernate\t播放結束後進入睡眠模式"
+
+msgctxt "IDS_CMD_LOGOFF"
+msgid "/logoff\t\tLog off after playback"
+msgstr "/logoff\t\t播放結束後登出"
+
+msgctxt "IDS_CMD_LOCK"
+msgid "/lock\t\tLock workstation after playback"
+msgstr "/lock\t\t播放結束後鎖定"
+
+msgctxt "IDS_CMD_MONITOROFF"
+msgid "/monitoroff\tTurn off the monitor after playback"
+msgstr "/monitoroff\t播放結束後關閉螢幕"
+
+msgctxt "IDS_CMD_PLAYNEXT"
+msgid "/playnext\t\tOpen next file in the folder after playback"
+msgstr "/playnext\t\t播放結束後開啟資料夾的下一個檔案"
+
+msgctxt "IDS_CMD_FULLSCREEN"
+msgid "/fullscreen\tStart in fullscreen mode"
+msgstr "/fullscreen\t使用全螢幕模式啟動"
+
+msgctxt "IDS_CMD_MINIMIZED"
+msgid "/minimized\tStart in minimized mode"
+msgstr "/minimized\t使用最小化模式啟動"
+
+msgctxt "IDS_CMD_NEW"
+msgid "/new\t\tUse a new instance of the player"
+msgstr "/new\t\t使用新的程序開啟播放器"
+
+msgctxt "IDS_CMD_ADD"
+msgid "/add\t\tAdd \"pathname\" to playlist, can be combined with /open and /play"
+msgstr "/add\t\t加入 \"pathname\" 到播放清單,可與 /open 及 /play 合併使用"
+
+msgctxt "IDS_CMD_RANDOMIZE"
+msgid "/randomize\tRandomize the playlist"
+msgstr "/randomize\t隨機播放清單"
+
+msgctxt "IDS_CMD_REGVID"
+msgid "/regvid\t\tCreate file associations for video files"
+msgstr "/regvid\t\t建立視訊檔案關聯"
+
+msgctxt "IDS_CMD_REGAUD"
+msgid "/regaud\t\tCreate file associations for audio files"
+msgstr "/regaud\t\t建立音訊檔案關聯"
+
+msgctxt "IDS_CMD_REGPL"
+msgid "/regpl\t\tCreate file associations for playlist files"
+msgstr "/regpl\t\t建立播放清單檔案關聯"
+
+msgctxt "IDS_CMD_REGALL"
+msgid "/regall\t\tCreate file associations for all supported file types"
+msgstr "/regall\t\t建立所有支援的類型檔案關聯"
+
+msgctxt "IDS_CMD_UNREGALL"
+msgid "/unregall\t\tRemove all file associations"
+msgstr "/unregall\t\t移除所有檔案關聯"
+
+msgctxt "IDS_CMD_START"
+msgid "/start ms\t\tStart playing at \"ms\" (= milliseconds)"
+msgstr "/start ms\t\t從 \"ms\" (= 毫秒) 開始播放"
+
+msgctxt "IDS_CMD_STARTPOS"
+msgid "/startpos hh:mm:ss\tStart playing at position hh:mm:ss"
+msgstr "/startpos hh:mm:ss\t從位置 hh:mm:ss 開始播放"
+
+msgctxt "IDS_CMD_FIXEDSIZE"
+msgid "/fixedsize w,h\tSet a fixed window size"
+msgstr "/fixedsize w,h\t設定固定的視窗大小"
+
+msgctxt "IDS_CMD_MONITOR"
+msgid "/monitor N\tStart player on monitor N, where N starts from 1"
+msgstr "/monitor N\t於螢幕 N 啟動播放器,N 的範圍從 1 開始"
+
+msgctxt "IDS_CMD_AUDIORENDERER"
+msgid "/audiorenderer N\tStart using audiorenderer N, where N starts from 1 (see \"Output\" settings)"
+msgstr "/audiorenderer N\t使用音訊譜製器 N 啟動播放器,N 的範圍從 1 開始 (請參考 \"輸出\" 設定)"
+
+msgctxt "IDS_CMD_SHADERPRESET"
+msgid "/shaderpreset \"Pr\"\tStart using \"Pr\" shader preset"
+msgstr "/shaderpreset \"Pr\"\t使用 \"Pr\" 著色器初始設定啟動播放器"
+
+msgctxt "IDS_CMD_PNS"
+msgid "/pns \"name\"\tSpecify Pan&Scan preset name to use"
+msgstr "/pns \"name\"\t指定要使用的 Pan&Scan 初始設定名稱"
+
+msgctxt "IDS_CMD_ICONASSOC"
+msgid "/iconsassoc\tReassociate format icons"
+msgstr "/iconsassoc\t重新關聯檔案格式圖示"
+
+msgctxt "IDS_CMD_NOFOCUS"
+msgid "/nofocus\t\tOpen MPC-HC in background"
+msgstr "/nofocus\t\t在背景開啟 MPC-HC"
+
+msgctxt "IDS_CMD_WEBPORT"
+msgid "/webport N\tStart web interface on specified port"
+msgstr "/webport N\t於指定埠號啟動網頁介面"
+
+msgctxt "IDS_CMD_DEBUG"
+msgid "/debug\t\tShow debug information in OSD"
+msgstr "/debug\t\t在 OSD 顯示除錯資訊"
+
+msgctxt "IDS_CMD_NOCRASHREPORTER"
+msgid "/nocrashreporter\tDisable the crash reporter"
+msgstr "/nocrashreporter\t關閉當機回報程式"
+
+msgctxt "IDS_CMD_SLAVE"
+msgid "/slave \"hWnd\"\tUse MPC-HC as slave"
+msgstr "/slave \"hWnd\"\t使用 MPC-HC 作為次要服務"
+
+msgctxt "IDS_CMD_HWGPU"
+msgid "/hwgpu \"index\"\tSet the index of the GPU used for hardware decoding.\n\t\tOnly available for CUVID and DXVA2 (copy-back)"
+msgstr "/hwgpu \"index\"\t設定要用來硬體解碼的 GPU 索引。\n\t\t僅支援 CUVID 及 DXVA2 (copy-back)"
+
+msgctxt "IDS_CMD_RESET"
+msgid "/reset\t\tRestore default settings"
+msgstr "/reset\t\t還原預設設定"
+
+msgctxt "IDS_CMD_HELP"
+msgid "/help /h /?\tShow help about command line switches"
+msgstr "/help /h /?\t顯示有關指令列參數的說明"
+
+msgctxt "IDS_PPAGEADVANCED_SCORE"
+msgid "Threshold value for subtitles score which are going to be automatically downloaded. Higher values means that more accurately matched subtitles will be loaded, lower values could result in incorrect subtitles being loaded, but there is no one perfect value. Pick one that works best for you."
+msgstr "用來決定是否自動下載字幕的字幕分數門檻值。較高的數值將只有準確符合的字幕會被載入,較低的數值可能會載入不正確的字幕,這沒有絕對沒問題的數值。請選擇您覺得最佳的數值。"
+
+msgctxt "IDS_PPAGE_FS_CLN_AUDIO_DELAY"
+msgid "Audio Delay (ms)"
+msgstr "音訊延遲 (毫秒)"
+
+msgctxt "IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE"
+msgid "Size in pixels of the default toolbar."
+msgstr "預設工具列字體大小 (像素)"
+
+msgctxt "IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR"
+msgid "Use legacy toolbar instead of new vectorized one."
+msgstr "使用舊版工具列取代新的向量版工具列。"
+
+msgctxt "IDS_SUBMENU_COPYURL"
+msgid "Copy URL"
+msgstr "複製網址"
+
diff --git a/src/mpc-hc/mpcresources/SyncTranslations.vcxproj b/src/mpc-hc/mpcresources/SyncTranslations.vcxproj
new file mode 100644
index 000000000..6dcf1c314
--- /dev/null
+++ b/src/mpc-hc/mpcresources/SyncTranslations.vcxproj
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{904017F7-EE7A-49B6-A000-0D2FE5D5809A}</ProjectGuid>
+ <Keyword>MakeFileProj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup>
+ <ConfigurationType>Makefile</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="..\..\platform.props" />
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ </ImportGroup>
+ <PropertyGroup>
+ <BaseIntermediateOutputPath>$(IntDir)</BaseIntermediateOutputPath>
+ <NMakeBuildCommandLine>sync.bat Silent</NMakeBuildCommandLine>
+ <NMakeCleanCommandLine>del *.rc 2&gt; NUL</NMakeCleanCommandLine>
+ <NMakeReBuildCommandLine>sync.bat Silent</NMakeReBuildCommandLine>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project> \ No newline at end of file
diff --git a/src/mpc-hc/mpcresources/TranslationData.py b/src/mpc-hc/mpcresources/TranslationData.py
index 693b94d87..f3127ff65 100644
--- a/src/mpc-hc/mpcresources/TranslationData.py
+++ b/src/mpc-hc/mpcresources/TranslationData.py
@@ -1,4 +1,4 @@
-# (C) 2013 see Authors.txt
+# (C) 2013, 2016-2017 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -50,7 +50,7 @@ def detectEncoding(filename):
potHeader = u'''# MPC-HC - %s
-# Copyright (C) 2002 - 2013 see Authors.txt
+# Copyright (C) 2002 - 2017 see Authors.txt
# This file is distributed under the same license as the MPC-HC package.
msgid ""
msgstr ""
@@ -129,7 +129,6 @@ class TranslationData:
context = None
id = None
str = None
- show = False
prevLineType = None
for line in f:
diff --git a/src/mpc-hc/mpcresources/TranslationDataIS.py b/src/mpc-hc/mpcresources/TranslationDataIS.py
index d56f00d7a..74ab1b07e 100644
--- a/src/mpc-hc/mpcresources/TranslationDataIS.py
+++ b/src/mpc-hc/mpcresources/TranslationDataIS.py
@@ -1,4 +1,4 @@
-# (C) 2013 see Authors.txt
+# (C) 2013, 2016 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -80,9 +80,11 @@ class TranslationDataIS(TranslationData):
s = self.strings.get((section + '_' + match.group(1), match.group(2).replace(u'%n', ur'\n')))
if not s:
s = match.group(2)
- line = '%s.%s=%s\r\n' % (config.get('Info', 'langShortName'), match.group(1), s.replace(ur'\n', u'%n'))
+ line = '%s.%s=%s\r\n' % (
+ config.get('Info', 'langShortName'), match.group(1), s.replace(ur'\n', u'%n'))
else:
- line = '%s.langid=%0.8d\r\n' % (config.get('Info', 'langShortName'), config.getint('Info', 'langId'))
+ line = '%s.langid=%0.8d\r\n' % (
+ config.get('Info', 'langShortName'), config.getint('Info', 'langId'))
fOut.write(line)
elif line == u'; English\r\n':
diff --git a/src/mpc-hc/mpcresources/UpdateIS.py b/src/mpc-hc/mpcresources/UpdateIS.py
index 7d68f0a1e..5ec1b6822 100644
--- a/src/mpc-hc/mpcresources/UpdateIS.py
+++ b/src/mpc-hc/mpcresources/UpdateIS.py
@@ -1,4 +1,4 @@
-# (C) 2013 see Authors.txt
+# (C) 2013, 2015-2016 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -15,12 +15,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-import sys
import glob
from TranslationDataIS import *
-if __name__ == '__main__':
+
+def UpdateIS(normalizePOFile=True):
translationsConfigAndData = []
for cfgPath in glob.glob(r'cfg\*.cfg'):
config = ConfigParser.RawConfigParser({'installerIsTranslated': 'True'})
@@ -30,9 +30,15 @@ if __name__ == '__main__':
poPath = r'PO\mpc-hc.installer.' + config.get('Info', 'langShortName')
translationData = TranslationDataIS()
translationData.loadFromPO(poPath, 'po', (False, False, True))
- # Write back the PO file to ensure it's properly normalized
- translationData.writePO(poPath, 'po', (False, False, True))
+ if normalizePOFile:
+ # Write back the PO file to ensure it's properly normalized
+ translationData.writePO(poPath, 'po', (False, False, True))
translationsConfigAndData.append((config, translationData))
- TranslationDataIS.translateIS(translationsConfigAndData, r'..\..\..\distrib\custom_messages.iss', r'..\..\..\distrib\custom_messages_translated.iss')
+ TranslationDataIS.translateIS(translationsConfigAndData,
+ r'..\..\..\distrib\custom_messages.iss',
+ r'..\..\..\distrib\custom_messages_translated.iss')
+
+if __name__ == '__main__':
+ UpdateIS()
diff --git a/src/mpc-hc/mpcresources/UpdateISPO.py b/src/mpc-hc/mpcresources/UpdateISPO.py
index 0e108a239..5fec11c4a 100644
--- a/src/mpc-hc/mpcresources/UpdateISPO.py
+++ b/src/mpc-hc/mpcresources/UpdateISPO.py
@@ -1,4 +1,4 @@
-# (C) 2013 see Authors.txt
+# (C) 2013, 2015 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -19,11 +19,9 @@ import sys
from TranslationDataIS import *
-if __name__ == '__main__':
- if len(sys.argv) != 2:
- RuntimeError('Invalid number of parameters. Usage: UpdateISPO.py <filename>')
- filename = sys.argv[1].replace('.strings', '')
+def UpdateISPO(filename):
+ filename = filename.replace('.strings', '')
translationDataOld = TranslationDataIS()
translationDataOld.loadFromPO('PO\\' + filename, 'po', (False, False, True))
@@ -32,3 +30,9 @@ if __name__ == '__main__':
translationData.loadFromPO(r'PO\mpc-hc.installer', 'pot', (False, False, True))
translationData.translate(translationDataOld)
translationData.writePO('PO\\' + filename, 'po', (False, False, True))
+
+if __name__ == '__main__':
+ if len(sys.argv) != 2:
+ RuntimeError('Invalid number of parameters. Usage: UpdateISPO.py <filename>')
+
+ UpdateISPO(sys.argv[1])
diff --git a/src/mpc-hc/mpcresources/UpdateISPOT.py b/src/mpc-hc/mpcresources/UpdateISPOT.py
index 41042747d..513d73263 100644
--- a/src/mpc-hc/mpcresources/UpdateISPOT.py
+++ b/src/mpc-hc/mpcresources/UpdateISPOT.py
@@ -1,4 +1,4 @@
-# (C) 2013 see Authors.txt
+# (C) 2013, 2015-2016 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -15,11 +15,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-import sys
-
from TranslationDataIS import *
-if __name__ == '__main__':
+
+def UpdateISPOT():
translationData = TranslationDataIS()
translationData.loadFromIS(r'..\..\..\distrib\custom_messages.iss')
@@ -28,3 +27,6 @@ if __name__ == '__main__':
output = tuple(not b for b in translationData.areEqualsSections(translationDataOld))
translationData.writePO(r'PO\mpc-hc.installer', 'pot', output)
+
+if __name__ == '__main__':
+ UpdateISPOT()
diff --git a/src/mpc-hc/mpcresources/UpdatePO.py b/src/mpc-hc/mpcresources/UpdatePO.py
index c0fd369f2..3aae35b34 100644
--- a/src/mpc-hc/mpcresources/UpdatePO.py
+++ b/src/mpc-hc/mpcresources/UpdatePO.py
@@ -1,4 +1,4 @@
-# (C) 2013 see Authors.txt
+# (C) 2013, 2015 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -19,12 +19,8 @@ import sys
from TranslationDataRC import *
-if __name__ == '__main__':
- if len(sys.argv) != 2:
- RuntimeError('Invalid number of parameters. Usage: UpdatePO.py <filename>')
-
- filename = sys.argv[1]
+def UpdatePO(filename):
translationDataOld = TranslationDataRC()
translationDataOld.loadFromPO('PO\\' + filename, 'po')
@@ -32,3 +28,9 @@ if __name__ == '__main__':
translationData.loadFromPO(r'PO\mpc-hc', 'pot')
translationData.translate(translationDataOld)
translationData.writePO('PO\\' + filename, 'po')
+
+if __name__ == '__main__':
+ if len(sys.argv) != 2:
+ RuntimeError('Invalid number of parameters. Usage: UpdatePO.py <filename>')
+
+ UpdatePO(sys.argv[1])
diff --git a/src/mpc-hc/mpcresources/UpdatePOT.py b/src/mpc-hc/mpcresources/UpdatePOT.py
index b9c1e832b..c0e9c4c3d 100644
--- a/src/mpc-hc/mpcresources/UpdatePOT.py
+++ b/src/mpc-hc/mpcresources/UpdatePOT.py
@@ -1,4 +1,4 @@
-# (C) 2013 see Authors.txt
+# (C) 2013, 2015-2016 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -15,11 +15,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-import sys
-
from TranslationDataRC import *
-if __name__ == '__main__':
+
+def UpdatePOT():
translationData = TranslationDataRC()
translationData.loadFromRC(r'..\mpc-hc.rc')
@@ -28,3 +27,6 @@ if __name__ == '__main__':
output = tuple(not b for b in translationData.areEqualsSections(translationDataOld))
translationData.writePO(r'PO\mpc-hc', 'pot', output)
+
+if __name__ == '__main__':
+ UpdatePOT()
diff --git a/src/mpc-hc/mpcresources/UpdateRC.py b/src/mpc-hc/mpcresources/UpdateRC.py
index 16b16a9e0..09cfb2d17 100644
--- a/src/mpc-hc/mpcresources/UpdateRC.py
+++ b/src/mpc-hc/mpcresources/UpdateRC.py
@@ -1,4 +1,4 @@
-# (C) 2013 see Authors.txt
+# (C) 2013, 2015 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -19,14 +19,17 @@ import sys
from TranslationDataRC import *
-if __name__ == '__main__':
- if len(sys.argv) != 2:
- RuntimeError('Invalid number of parameters. Usage: UpdateRC.py <filename>')
-
- filename = sys.argv[1]
+def UpdateRC(filename, normalizePOFile=True):
translationData = TranslationDataRC()
translationData.loadFromPO('PO\\' + filename, 'po')
translationData.translateRC(r'..\mpc-hc.rc', filename)
- # Write back the PO file to ensure it's properly normalized
- translationData.writePO('PO\\' + filename, 'po')
+ if normalizePOFile:
+ # Write back the PO file to ensure it's properly normalized
+ translationData.writePO('PO\\' + filename, 'po')
+
+if __name__ == '__main__':
+ if len(sys.argv) != 2:
+ RuntimeError('Invalid number of parameters. Usage: UpdateRC.py <filename>')
+
+ UpdateRC(sys.argv[1])
diff --git a/src/mpc-hc/mpcresources/cfg/mpc-hc.bn.cfg b/src/mpc-hc/mpcresources/cfg/mpc-hc.bn.cfg
index 9d50668ff..ce80e88cd 100644
--- a/src/mpc-hc/mpcresources/cfg/mpc-hc.bn.cfg
+++ b/src/mpc-hc/mpcresources/cfg/mpc-hc.bn.cfg
@@ -1,5 +1,5 @@
[Info]
-langName: Bengali
+langName: Bengali
LangShortName: bn
langDefine: LANG_BENGALI, SUBLANG_DEFAULT
langDefineMFC: AFX_TARG_BEN
diff --git a/src/mpc-hc/mpcresources/cfg/mpc-hc.bs_BA.cfg b/src/mpc-hc/mpcresources/cfg/mpc-hc.bs_BA.cfg
new file mode 100644
index 000000000..baa5b941a
--- /dev/null
+++ b/src/mpc-hc/mpcresources/cfg/mpc-hc.bs_BA.cfg
@@ -0,0 +1,8 @@
+[Info]
+langName: Bosnian
+LangShortName: bs_BA
+langDefine: LANG_BOSNIAN, SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN
+langDefineMFC: AFX_TARG_BOS
+langID: 5146
+fileDesc: Bosnian language resource for MPC-HC
+font: FONT 8, "MS Shell Dlg", 400, 0, 0x1
diff --git a/src/mpc-hc/mpcresources/cfg/mpc-hc.da.cfg b/src/mpc-hc/mpcresources/cfg/mpc-hc.da.cfg
new file mode 100644
index 000000000..3e88f7ee9
--- /dev/null
+++ b/src/mpc-hc/mpcresources/cfg/mpc-hc.da.cfg
@@ -0,0 +1,8 @@
+[Info]
+langName: Danish
+LangShortName: da
+langDefine: LANG_DANISH, SUBLANG_DEFAULT
+langDefineMFC: AFX_TARG_DAN
+langID: 1030
+fileDesc: Danish language resource for MPC-HC
+font: FONT 8, "MS Shell Dlg", 400, 0, 0x1
diff --git a/src/mpc-hc/mpcresources/cfg/mpc-hc.fi.cfg b/src/mpc-hc/mpcresources/cfg/mpc-hc.fi.cfg
new file mode 100644
index 000000000..59d179279
--- /dev/null
+++ b/src/mpc-hc/mpcresources/cfg/mpc-hc.fi.cfg
@@ -0,0 +1,8 @@
+[Info]
+langName: Finnish
+LangShortName: fi
+langDefine: LANG_FINNISH, SUBLANG_FINNISH_FINLAND
+langDefineMFC: AFX_TARG_FIN
+langID: 1035
+fileDesc: Finnish language resource for MPC-HC
+font: FONT 8, "MS Shell Dlg", 400, 0, 0x1
diff --git a/src/mpc-hc/mpcresources/cfg/mpc-hc.id.cfg b/src/mpc-hc/mpcresources/cfg/mpc-hc.id.cfg
new file mode 100644
index 000000000..f236ee1a1
--- /dev/null
+++ b/src/mpc-hc/mpcresources/cfg/mpc-hc.id.cfg
@@ -0,0 +1,8 @@
+[Info]
+langName: Indonesian
+LangShortName: id
+langDefine: LANG_INDONESIAN, SUBLANG_INDONESIAN_INDONESIA
+langDefineMFC: AFX_TARG_IND
+langID: 1057
+fileDesc: Indonesian language resource for MPC-HC
+font: FONT 8, "MS Shell Dlg", 400, 0, 0x1
diff --git a/src/mpc-hc/mpcresources/cfg/mpc-hc.lt.cfg b/src/mpc-hc/mpcresources/cfg/mpc-hc.lt.cfg
new file mode 100644
index 000000000..e7f1fa925
--- /dev/null
+++ b/src/mpc-hc/mpcresources/cfg/mpc-hc.lt.cfg
@@ -0,0 +1,8 @@
+[Info]
+langName: Lithuanian
+LangShortName: lt
+langDefine: LANG_LITHUANIAN, SUBLANG_DEFAULT
+langDefineMFC: AFX_TARG_LIT
+langID: 1063
+fileDesc: Lithuanian language resource for MPC-HC
+font: FONT 8, "MS Shell Dlg", 400, 0, 0x1
diff --git a/src/mpc-hc/mpcresources/cfg/mpc-hc.pa.cfg b/src/mpc-hc/mpcresources/cfg/mpc-hc.pa.cfg
new file mode 100644
index 000000000..24a75bb66
--- /dev/null
+++ b/src/mpc-hc/mpcresources/cfg/mpc-hc.pa.cfg
@@ -0,0 +1,9 @@
+[Info]
+langName: Punjabi
+LangShortName: pa
+langDefine: LANG_PUNJABI, SUBLANG_PUNJABI_INDIA
+langDefineMFC: AFX_TARG_PAN
+langID: 1094
+fileDesc: Punjabi language resource for MPC-HC
+font: FONT 8, "MS Shell Dlg", 400, 0, 0x1
+installerIsTranslated: False
diff --git a/src/mpc-hc/mpcresources/cfg/mpc-hc.sr.cfg b/src/mpc-hc/mpcresources/cfg/mpc-hc.sr.cfg
new file mode 100644
index 000000000..db8b25dd3
--- /dev/null
+++ b/src/mpc-hc/mpcresources/cfg/mpc-hc.sr.cfg
@@ -0,0 +1,8 @@
+[Info]
+langName: Serbian (Cyrillic)
+LangShortName: sr
+langDefine: LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC
+langDefineMFC: AFX_TARG_FUL
+langID: 3098
+fileDesc: Serbian (Cyrillic) language resource for MPC-HC
+font: FONT 8, "MS Shell Dlg", 400, 0, 0x1
diff --git a/src/mpc-hc/mpcresources/common_python.bat b/src/mpc-hc/mpcresources/common_python.bat
index ae8d6d499..76c6cb1ab 100755
--- a/src/mpc-hc/mpcresources/common_python.bat
+++ b/src/mpc-hc/mpcresources/common_python.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2012-2013 see Authors.txt
+REM (C) 2012-2013, 2015 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -21,11 +21,9 @@ PUSHD %~dp0
SET ROOT_DIR=..\..\..
-IF EXIST "%ROOT_DIR%\build.user.bat" (
- CALL "%ROOT_DIR%\build.user.bat"
-) ELSE (
- IF DEFINED PYTHON (SET MPCHC_PYTHON=%PYTHON%)
-)
+IF EXIST "%ROOT_DIR%\build.user.bat" CALL "%ROOT_DIR%\build.user.bat"
+
+IF NOT DEFINED MPCHC_PYTHON IF DEFINED PYTHON (SET MPCHC_PYTHON=%PYTHON%)
REM If the define wasn't set, we try to detect Python 2.7 from the registry
IF NOT DEFINED MPCHC_PYTHON (
@@ -36,16 +34,15 @@ IF NOT DEFINED MPCHC_PYTHON (
)
)
-SET PATH=%MPCHC_PYTHON%;%PATH%
+SET "PATH=%MPCHC_PYTHON%;%PATH%"
FOR %%G IN (python.exe) DO (SET PYTHON_PATH=%%~$PATH:G)
IF NOT DEFINED PYTHON_PATH GOTO MissingVar
ECHO Backing up current translation files...
IF NOT EXIST backup MD backup
-COPY /Y ..\mpc-hc.rc backup
-COPY /Y *.rc backup
+XCOPY /I /D /Y /Q ..\mpc-hc.rc backup
IF NOT EXIST backup\PO MD backup\PO
-COPY /Y PO backup\PO
+XCOPY /I /D /Y /Q PO backup\PO
ECHO ----------------------
EXIT /B
@@ -60,5 +57,4 @@ EXIT /B
ECHO Not all build dependencies were found.
ECHO.
ECHO See "%ROOT_DIR%\docs\Compilation.txt" for more information.
-ENDLOCAL
EXIT /B 1
diff --git a/src/mpc-hc/mpcresources/mpc-hc.ar.rc b/src/mpc-hc/mpcresources/mpc-hc.ar.rc
deleted file mode 100644
index e224b8fc3..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.ar.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.be.rc b/src/mpc-hc/mpcresources/mpc-hc.be.rc
deleted file mode 100644
index 3bd5ae898..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.be.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.bn.rc b/src/mpc-hc/mpcresources/mpc-hc.bn.rc
deleted file mode 100644
index 51b6bbf26..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.bn.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.ca.rc b/src/mpc-hc/mpcresources/mpc-hc.ca.rc
deleted file mode 100644
index 37ee2eeb8..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.ca.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.cs.rc b/src/mpc-hc/mpcresources/mpc-hc.cs.rc
deleted file mode 100644
index d6844e238..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.cs.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.de.rc b/src/mpc-hc/mpcresources/mpc-hc.de.rc
deleted file mode 100644
index 8a615f503..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.de.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.el.rc b/src/mpc-hc/mpcresources/mpc-hc.el.rc
deleted file mode 100644
index 2b235497c..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.el.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.en_GB.rc b/src/mpc-hc/mpcresources/mpc-hc.en_GB.rc
deleted file mode 100644
index fa69f6ce6..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.en_GB.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.es.rc b/src/mpc-hc/mpcresources/mpc-hc.es.rc
deleted file mode 100644
index 9f54f48da..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.es.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.eu.rc b/src/mpc-hc/mpcresources/mpc-hc.eu.rc
deleted file mode 100644
index 5d163f2ef..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.eu.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.fr.rc b/src/mpc-hc/mpcresources/mpc-hc.fr.rc
deleted file mode 100644
index b0f82deb8..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.fr.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.gl.rc b/src/mpc-hc/mpcresources/mpc-hc.gl.rc
deleted file mode 100644
index 86aa96f50..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.gl.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.he.rc b/src/mpc-hc/mpcresources/mpc-hc.he.rc
deleted file mode 100644
index 752b0d389..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.he.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.hr.rc b/src/mpc-hc/mpcresources/mpc-hc.hr.rc
deleted file mode 100644
index fdff52dbe..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.hr.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.hu.rc b/src/mpc-hc/mpcresources/mpc-hc.hu.rc
deleted file mode 100644
index 44b821bd9..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.hu.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.hy.rc b/src/mpc-hc/mpcresources/mpc-hc.hy.rc
deleted file mode 100644
index c55fd0c20..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.hy.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.it.rc b/src/mpc-hc/mpcresources/mpc-hc.it.rc
deleted file mode 100644
index efb35f8b9..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.it.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.ja.rc b/src/mpc-hc/mpcresources/mpc-hc.ja.rc
deleted file mode 100644
index 9d3a668d5..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.ja.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.ko.rc b/src/mpc-hc/mpcresources/mpc-hc.ko.rc
deleted file mode 100644
index 594e2d0dc..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.ko.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.ms_MY.rc b/src/mpc-hc/mpcresources/mpc-hc.ms_MY.rc
deleted file mode 100644
index fc94b9534..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.ms_MY.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.nl.rc b/src/mpc-hc/mpcresources/mpc-hc.nl.rc
deleted file mode 100644
index cd75cb8ca..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.nl.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.pl.rc b/src/mpc-hc/mpcresources/mpc-hc.pl.rc
deleted file mode 100644
index 3d7287810..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.pl.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.pt_BR.rc b/src/mpc-hc/mpcresources/mpc-hc.pt_BR.rc
deleted file mode 100644
index 88f4c8cef..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.pt_BR.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.ro.rc b/src/mpc-hc/mpcresources/mpc-hc.ro.rc
deleted file mode 100644
index b2ded6f9c..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.ro.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.ru.rc b/src/mpc-hc/mpcresources/mpc-hc.ru.rc
deleted file mode 100644
index 2c7127423..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.ru.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.sk.rc b/src/mpc-hc/mpcresources/mpc-hc.sk.rc
deleted file mode 100644
index ff6e15cc5..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.sk.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.sl.rc b/src/mpc-hc/mpcresources/mpc-hc.sl.rc
deleted file mode 100644
index 131e19e2f..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.sl.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.sv.rc b/src/mpc-hc/mpcresources/mpc-hc.sv.rc
deleted file mode 100644
index 9c0448487..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.sv.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.th_TH.rc b/src/mpc-hc/mpcresources/mpc-hc.th_TH.rc
deleted file mode 100644
index ccb1c38fe..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.th_TH.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.tr.rc b/src/mpc-hc/mpcresources/mpc-hc.tr.rc
deleted file mode 100644
index ad4c6cab8..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.tr.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.tt.rc b/src/mpc-hc/mpcresources/mpc-hc.tt.rc
deleted file mode 100644
index 385f28196..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.tt.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.uk.rc b/src/mpc-hc/mpcresources/mpc-hc.uk.rc
deleted file mode 100644
index ce9e7ae90..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.uk.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.vi.rc b/src/mpc-hc/mpcresources/mpc-hc.vi.rc
deleted file mode 100644
index 0616ee908..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.vi.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.zh_CN.rc b/src/mpc-hc/mpcresources/mpc-hc.zh_CN.rc
deleted file mode 100644
index f83a38005..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.zh_CN.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpc-hc.zh_TW.rc b/src/mpc-hc/mpcresources/mpc-hc.zh_TW.rc
deleted file mode 100644
index 261c76999..000000000
--- a/src/mpc-hc/mpcresources/mpc-hc.zh_TW.rc
+++ /dev/null
Binary files differ
diff --git a/src/mpc-hc/mpcresources/mpcresources.vcxproj b/src/mpc-hc/mpcresources/mpcresources.vcxproj
index faf073914..16cc6426c 100644
--- a/src/mpc-hc/mpcresources/mpcresources.vcxproj
+++ b/src/mpc-hc/mpcresources/mpcresources.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Release Arabic|Win32">
<Configuration>Release Arabic</Configuration>
@@ -41,6 +41,14 @@
<Configuration>Release Bengali</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release Bosnian|Win32">
+ <Configuration>Release Bosnian</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Bosnian|x64">
+ <Configuration>Release Bosnian</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release Catalan|Win32">
<Configuration>Release Catalan</Configuration>
<Platform>Win32</Platform>
@@ -81,6 +89,14 @@
<Configuration>Release Czech</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release Danish|Win32">
+ <Configuration>Release Danish</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Danish|x64">
+ <Configuration>Release Danish</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release Dutch|Win32">
<Configuration>Release Dutch</Configuration>
<Platform>Win32</Platform>
@@ -97,6 +113,14 @@
<Configuration>Release English (British)</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release Finnish|Win32">
+ <Configuration>Release Finnish</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Finnish|x64">
+ <Configuration>Release Finnish</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release French|Win32">
<Configuration>Release French</Configuration>
<Platform>Win32</Platform>
@@ -145,6 +169,14 @@
<Configuration>Release Hungarian</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release Indonesian|Win32">
+ <Configuration>Release Indonesian</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Indonesian|x64">
+ <Configuration>Release Indonesian</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release Italian|Win32">
<Configuration>Release Italian</Configuration>
<Platform>Win32</Platform>
@@ -169,6 +201,14 @@
<Configuration>Release Korean</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release Lithuanian|Win32">
+ <Configuration>Release Lithuanian</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Lithuanian|x64">
+ <Configuration>Release Lithuanian</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release Malay|Win32">
<Configuration>Release Malay</Configuration>
<Platform>Win32</Platform>
@@ -193,6 +233,14 @@
<Configuration>Release Portuguese (Brazil)</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release Punjabi|Win32">
+ <Configuration>Release Punjabi</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Punjabi|x64">
+ <Configuration>Release Punjabi</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release Romanian|Win32">
<Configuration>Release Romanian</Configuration>
<Platform>Win32</Platform>
@@ -209,6 +257,14 @@
<Configuration>Release Russian</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release Serbian|Win32">
+ <Configuration>Release Serbian</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Serbian|x64">
+ <Configuration>Release Serbian</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release Slovak|Win32">
<Configuration>Release Slovak</Configuration>
<Platform>Win32</Platform>
@@ -311,27 +367,34 @@
<TargetName Condition="'$(Configuration)'=='Release Basque'">$(ProjectName).eu</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Belarusian'">$(ProjectName).be</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Bengali'">$(ProjectName).bn</TargetName>
+ <TargetName Condition="'$(Configuration)'=='Release Bosnian'">$(ProjectName).bs_BA</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Catalan'">$(ProjectName).ca</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Chinese Simplified'">$(ProjectName).zh_CN</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Chinese Traditional'">$(ProjectName).zh_TW</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Croatian'">$(ProjectName).hr</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Czech'">$(ProjectName).cs</TargetName>
+ <TargetName Condition="'$(Configuration)'=='Release Danish'">$(ProjectName).da</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Dutch'">$(ProjectName).nl</TargetName>
<TargetName Condition="'$(Configuration)'=='Release English (British)'">$(ProjectName).en_GB</TargetName>
+ <TargetName Condition="'$(Configuration)'=='Release Finnish'">$(ProjectName).fi</TargetName>
<TargetName Condition="'$(Configuration)'=='Release French'">$(ProjectName).fr</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Galician'">$(ProjectName).gl</TargetName>
<TargetName Condition="'$(Configuration)'=='Release German'">$(ProjectName).de</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Greek'">$(ProjectName).el</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Hebrew'">$(ProjectName).he</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Hungarian'">$(ProjectName).hu</TargetName>
+ <TargetName Condition="'$(Configuration)'=='Release Indonesian'">$(ProjectName).id</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Italian'">$(ProjectName).it</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Japanese'">$(ProjectName).ja</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Korean'">$(ProjectName).ko</TargetName>
+ <TargetName Condition="'$(Configuration)'=='Release Lithuanian'">$(ProjectName).lt</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Malay'">$(ProjectName).ms_MY</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Polish'">$(ProjectName).pl</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Portuguese (Brazil)'">$(ProjectName).pt_BR</TargetName>
+ <TargetName Condition="'$(Configuration)'=='Release Punjabi'">$(ProjectName).pa</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Romanian'">$(ProjectName).ro</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Russian'">$(ProjectName).ru</TargetName>
+ <TargetName Condition="'$(Configuration)'=='Release Serbian'">$(ProjectName).sr</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Slovak'">$(ProjectName).sk</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Slovenian'">$(ProjectName).sl</TargetName>
<TargetName Condition="'$(Configuration)'=='Release Spanish'">$(ProjectName).es</TargetName>
@@ -343,7 +406,11 @@
<TargetName Condition="'$(Configuration)'=='Release Vietnamese'">$(ProjectName).vi</TargetName>
</PropertyGroup>
<ItemDefinitionGroup>
+ <Lib>
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>
+ </Lib>
<Link>
+ <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<GenerateDebugInformation>false</GenerateDebugInformation>
<NoEntryPoint>true</NoEntryPoint>
<SetChecksum>true</SetChecksum>
@@ -363,12 +430,18 @@
<ResourceCompile Include="mpc-hc.bn.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Bengali'">true</ExcludedFromBuild>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.bs_BA.rc">
+ <ExcludedFromBuild Condition="'$(Configuration)'!='Release Bosnian'">true</ExcludedFromBuild>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.ca.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Catalan'">true</ExcludedFromBuild>
</ResourceCompile>
<ResourceCompile Include="mpc-hc.cs.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Czech'">true</ExcludedFromBuild>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.da.rc">
+ <ExcludedFromBuild Condition="'$(Configuration)'!='Release Danish'">true</ExcludedFromBuild>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.de.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release German'">true</ExcludedFromBuild>
</ResourceCompile>
@@ -384,6 +457,9 @@
<ResourceCompile Include="mpc-hc.eu.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Basque'">true</ExcludedFromBuild>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.fi.rc">
+ <ExcludedFromBuild Condition="'$(Configuration)'!='Release Finnish'">true</ExcludedFromBuild>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.fr.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release French'">true</ExcludedFromBuild>
</ResourceCompile>
@@ -402,6 +478,9 @@
<ResourceCompile Include="mpc-hc.hy.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Armenian'">true</ExcludedFromBuild>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.id.rc">
+ <ExcludedFromBuild Condition="'$(Configuration)'!='Release Indonesian'">true</ExcludedFromBuild>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.it.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Italian'">true</ExcludedFromBuild>
</ResourceCompile>
@@ -411,12 +490,18 @@
<ResourceCompile Include="mpc-hc.ko.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Korean'">true</ExcludedFromBuild>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.lt.rc">
+ <ExcludedFromBuild Condition="'$(Configuration)'!='Release Lithuanian'">true</ExcludedFromBuild>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.ms_MY.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Malay'">true</ExcludedFromBuild>
</ResourceCompile>
<ResourceCompile Include="mpc-hc.nl.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Dutch'">true</ExcludedFromBuild>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.pa.rc">
+ <ExcludedFromBuild Condition="'$(Configuration)'!='Release Punjabi'">true</ExcludedFromBuild>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.pl.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Polish'">true</ExcludedFromBuild>
</ResourceCompile>
@@ -435,6 +520,9 @@
<ResourceCompile Include="mpc-hc.sl.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Slovenian'">true</ExcludedFromBuild>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.sr.rc">
+ <ExcludedFromBuild Condition="'$(Configuration)'!='Release Serbian'">true</ExcludedFromBuild>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.sv.rc">
<ExcludedFromBuild Condition="'$(Configuration)'!='Release Swedish'">true</ExcludedFromBuild>
</ResourceCompile>
@@ -467,6 +555,12 @@
<ItemGroup>
<None Include="..\res\toolbar.bmp" />
</ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="SyncTranslations.vcxproj">
+ <Project>{904017f7-ee7a-49b6-a000-0d2fe5d5809a}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
diff --git a/src/mpc-hc/mpcresources/mpcresources.vcxproj.filters b/src/mpc-hc/mpcresources/mpcresources.vcxproj.filters
index 6b1d15101..7da3208e0 100644
--- a/src/mpc-hc/mpcresources/mpcresources.vcxproj.filters
+++ b/src/mpc-hc/mpcresources/mpcresources.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
@@ -20,12 +20,18 @@
<ResourceCompile Include="mpc-hc.bn.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.bs_BA.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.ca.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
<ResourceCompile Include="mpc-hc.cs.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.da.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.de.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
@@ -41,6 +47,9 @@
<ResourceCompile Include="mpc-hc.eu.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.fi.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.fr.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
@@ -59,6 +68,9 @@
<ResourceCompile Include="mpc-hc.hy.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.id.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.it.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
@@ -68,12 +80,18 @@
<ResourceCompile Include="mpc-hc.ko.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.lt.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.ms_MY.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
<ResourceCompile Include="mpc-hc.nl.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.pa.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.pl.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
@@ -92,6 +110,9 @@
<ResourceCompile Include="mpc-hc.sl.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
+ <ResourceCompile Include="mpc-hc.sr.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
<ResourceCompile Include="mpc-hc.sv.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
diff --git a/src/mpc-hc/mpcresources/sync.bat b/src/mpc-hc/mpcresources/sync.bat
index b4d908829..2b2aed558 100755
--- a/src/mpc-hc/mpcresources/sync.bat
+++ b/src/mpc-hc/mpcresources/sync.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2013 see Authors.txt
+REM (C) 2013, 2015 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -20,23 +20,21 @@ REM along with this program. If not, see <http://www.gnu.org/licenses/>.
SETLOCAL
PUSHD %~dp0
+SET SILENT=%1
+
CALL "common_python.bat"
IF %ERRORLEVEL% NEQ 0 GOTO END
-ECHO Updating POT file
-python.exe UpdatePOT.py
-ECHO ----------------------
-
-FOR %%i IN (*.rc) DO (
- ECHO %%i
- ECHO --^> Updating PO files
- python.exe UpdatePO.py %%~ni
- ECHO --^> Updating RC file
- python.exe UpdateRC.py %%~ni
- ECHO ----------------------
-)
+python.exe sync.py
:END
-PAUSE
-ENDLOCAL
-EXIT /B
+IF NOT DEFINED SILENT (
+ PAUSE
+)
+IF %ERRORLEVEL% NEQ 0 (
+ ENDLOCAL
+ EXIT /B 1
+) ELSE (
+ ENDLOCAL
+ EXIT /B
+)
diff --git a/src/mpc-hc/mpcresources/sync.py b/src/mpc-hc/mpcresources/sync.py
new file mode 100644
index 000000000..597fd7d1d
--- /dev/null
+++ b/src/mpc-hc/mpcresources/sync.py
@@ -0,0 +1,66 @@
+# (C) 2015-2016 see Authors.txt
+#
+# This file is part of MPC-HC.
+#
+# MPC-HC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# MPC-HC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import sys
+import os
+import fnmatch
+import traceback
+
+from multiprocessing import Pool
+from UpdatePOT import *
+from UpdatePO import *
+from UpdateRC import *
+
+
+def processRC(file):
+ ret = file + '\n'
+ result = True
+ try:
+ ret += '--> Updating PO file\n'
+ UpdatePO(file)
+ except Exception:
+ ret += ''.join(traceback.format_exception(*sys.exc_info()))
+ result = False
+ else:
+ try:
+ ret += '--> Updating RC file\n'
+ UpdateRC(file, False)
+ except Exception:
+ ret += ''.join(traceback.format_exception(*sys.exc_info()))
+ result = False
+
+ ret += '----------------------'
+ return result, ret
+
+if __name__ == '__main__':
+ print 'Updating POT file'
+ UpdatePOT()
+ print '----------------------'
+
+ pool = Pool()
+ results = []
+ for file in os.listdir('PO'):
+ if fnmatch.fnmatch(file, 'mpc-hc.*.menus.po'):
+ results.append(pool.apply_async(processRC, [file[:-9]]))
+
+ pool.close()
+
+ for result in results:
+ ret = result.get(15)
+ print ret[1]
+ if (not ret[0]):
+ os.system('pause')
diff --git a/src/mpc-hc/mpcresources/syncIS.bat b/src/mpc-hc/mpcresources/syncIS.bat
index f54180730..f154d78a4 100755
--- a/src/mpc-hc/mpcresources/syncIS.bat
+++ b/src/mpc-hc/mpcresources/syncIS.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2013 see Authors.txt
+REM (C) 2013, 2015 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -23,19 +23,7 @@ PUSHD %~dp0
CALL "common_python.bat"
IF %ERRORLEVEL% NEQ 0 GOTO END
-ECHO Updating the installer POT file
-python.exe UpdateISPOT.py
-ECHO ----------------------
-
-FOR %%i IN (PO\mpc-hc.installer.*.strings.po) DO (
- ECHO Updating PO file %%i
- python.exe UpdateISPO.py %%~ni
- ECHO ----------------------
-)
-
-ECHO Updating IS file
-python.exe UpdateIS.py
-ECHO ----------------------
+python.exe syncIS.py
:END
PAUSE
diff --git a/src/mpc-hc/mpcresources/syncIS.py b/src/mpc-hc/mpcresources/syncIS.py
new file mode 100644
index 000000000..fe27f15bd
--- /dev/null
+++ b/src/mpc-hc/mpcresources/syncIS.py
@@ -0,0 +1,62 @@
+# (C) 2015-2016 see Authors.txt
+#
+# This file is part of MPC-HC.
+#
+# MPC-HC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# MPC-HC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import sys
+import os
+import fnmatch
+import traceback
+
+from multiprocessing import Pool
+from UpdateISPOT import *
+from UpdateISPO import *
+from UpdateIS import *
+
+
+def processPO(file):
+ ret = 'Updating PO file ' + file + '\n'
+ result = True
+ try:
+ UpdateISPO(file)
+ except Exception:
+ ret += ''.join(traceback.format_exception(*sys.exc_info()))
+ result = False
+
+ ret += '----------------------'
+ return result, ret
+
+if __name__ == '__main__':
+ print 'Updating POT file'
+ UpdateISPOT()
+ print '----------------------'
+
+ pool = Pool()
+ results = []
+ for file in os.listdir('PO'):
+ if fnmatch.fnmatch(file, 'mpc-hc.installer.*.strings.po'):
+ results.append(pool.apply_async(processPO, [os.path.splitext(file)[0]]))
+
+ pool.close()
+
+ for result in results:
+ ret = result.get(15)
+ print ret[1]
+ if (not ret[0]):
+ os.system('pause')
+
+ print 'Updating IS file'
+ UpdateIS(False)
+ print '----------------------'
diff --git a/src/mpc-hc/mplayerc.cpp b/src/mpc-hc/mplayerc.cpp
index 6fa1b6a4d..0a0864885 100644
--- a/src/mpc-hc/mplayerc.cpp
+++ b/src/mpc-hc/mplayerc.cpp
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2017 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -22,34 +22,33 @@
#include "stdafx.h"
#include "mplayerc.h"
#include "AboutDlg.h"
-#include <Tlhelp32.h>
-#include "MainFrm.h"
+#include "CmdLineHelpDlg.h"
+#include "CrashReporter.h"
#include "DSUtil.h"
+#include "FakeFilterMapper2.h"
+#include "FileAssoc.h"
#include "FileVersionInfo.h"
-#include "Struct.h"
#include "SysVersion.h"
-#include <winternl.h>
-#include <psapi.h>
#include "Ifo.h"
-#include "Monitors.h"
-#include "WinAPIUtils.h"
-#include "FileAssoc.h"
+#include "MainFrm.h"
+#include "MhookHelper.h"
+#include "PPageFormats.h"
+#include "PPageSheet.h"
+#include "PathUtils.h"
+#include "Struct.h"
#include "UpdateChecker.h"
+#include "WebServer.h"
+#include "WinAPIUtils.h"
+#include "mpc-hc_config.h"
#include "winddk/ntddcdvd.h"
-#include "mhook/mhook-lib/mhook.h"
#include <afxsock.h>
#include <atlsync.h>
-#include <atlutil.h>
+#include <winternl.h>
#include <regex>
-#include <share.h>
-#include "mpc-hc_config.h"
-#include "../MathLibFix/MathLibFix.h"
-#include "CmdLineHelpDlg.h"
-
#define HOOKS_BUGS_URL _T("https://trac.mpc-hc.org/ticket/3739")
-HICON LoadIcon(CString fn, bool bSmallIcon)
+HICON LoadIcon(CString fn, bool bSmallIcon, DpiHelper* pDpiHelper/* = nullptr*/)
{
if (fn.IsEmpty()) {
return nullptr;
@@ -63,6 +62,11 @@ HICON LoadIcon(CString fn, bool bSmallIcon)
CSize size(bSmallIcon ? GetSystemMetrics(SM_CXSMICON) : GetSystemMetrics(SM_CXICON),
bSmallIcon ? GetSystemMetrics(SM_CYSMICON) : GetSystemMetrics(SM_CYICON));
+ if (pDpiHelper) {
+ size.cx = pDpiHelper->ScaleSystemToOverrideX(size.cx);
+ size.cy = pDpiHelper->ScaleSystemToOverrideY(size.cy);
+ }
+
typedef HRESULT(WINAPI * LIWSD)(HINSTANCE, PCWSTR, int, int, HICON*);
auto loadIcon = [&size](PCWSTR pszName) {
LIWSD pLIWSD = (LIWSD)GetProcAddress(GetModuleHandle(_T("comctl32.dll")), "LoadIconWithScaleDown");
@@ -87,6 +91,12 @@ HICON LoadIcon(CString fn, bool bSmallIcon)
}
}
+ if (!ext.CompareNoCase(_T(".unknown"))) {
+ if (HICON hIcon = loadIcon(MAKEINTRESOURCE(IDI_UNKNOWN))) {
+ return hIcon;
+ }
+ }
+
do {
CRegKey key;
TCHAR buff[256];
@@ -277,7 +287,7 @@ static bool FindRedir(const CString& fn, CString ct, CAtlList<CString>& fns, con
}
}
- CString dir = fn.Left(max(fn.ReverseFind('/'), fn.ReverseFind('\\')) + 1); // "ReverseFindOneOf"
+ CString dir = fn.Left(std::max(fn.ReverseFind('/'), fn.ReverseFind('\\')) + 1); // "ReverseFindOneOf"
for (const auto re : res) {
std::wcmatch mc;
@@ -368,8 +378,9 @@ CStringA GetContentType(CString fn, CAtlList<CString>* redir)
if (s.Connect(
ProxyEnable ? ProxyServer : url.GetHostName(),
ProxyEnable ? ProxyPort : url.GetPortNumber())) {
- CStringA host = CStringA(url.GetHostName());
- CStringA path = CStringA(url.GetUrlPath()) + CStringA(url.GetExtraInfo());
+ CStringA host = url.GetHostName();
+ CStringA path = url.GetUrlPath();
+ path += url.GetExtraInfo();
if (ProxyEnable) {
path = "http://" + host + path;
@@ -576,12 +587,11 @@ void SetAudioRenderer(int AudioDevNo)
int i = 2;
BeginEnumSysDev(CLSID_AudioRendererCategory, pMoniker) {
- LPOLESTR olestr = nullptr;
+ CComHeapPtr<OLECHAR> olestr;
if (FAILED(pMoniker->GetDisplayName(0, 0, &olestr))) {
continue;
}
CStringW str(olestr);
- CoTaskMemFree(olestr);
m_AudioRendererDisplayNames.Add(CString(str));
i++;
}
@@ -589,7 +599,7 @@ void SetAudioRenderer(int AudioDevNo)
m_AudioRendererDisplayNames.Add(AUDRNDT_NULL_COMP);
m_AudioRendererDisplayNames.Add(AUDRNDT_NULL_UNCOMP);
- m_AudioRendererDisplayNames.Add(AUDRNDT_MPC);
+ m_AudioRendererDisplayNames.Add(AUDRNDT_INTERNAL);
i += 3;
if (AudioDevNo >= 1 && AudioDevNo <= i) {
AfxGetMyApp()->m_AudioRendererDisplayName_CL = m_AudioRendererDisplayNames[AudioDevNo - 1];
@@ -605,16 +615,13 @@ void SetHandCursor(HWND m_hWnd, UINT nID)
CMPlayerCApp::CMPlayerCApp()
: m_hNTDLL(nullptr)
- , m_fClosingState(false)
+ , m_bDelayingIdle(false)
, m_bProfileInitialized(false)
, m_bQueuedProfileFlush(false)
, m_dwProfileLastAccessTick(0)
- , m_bDelayingIdle(false)
+ , m_fClosingState(false)
{
- TCHAR strApp[MAX_PATH];
-
- GetModuleFileNameEx(GetCurrentProcess(), m_hInstance, strApp, MAX_PATH);
- m_strVersion = FileVersionInfo::GetFileVersionStr(strApp);
+ m_strVersion = FileVersionInfo::GetFileVersionStr(PathUtils::GetProgramPath(true));
ZeroMemory(&m_ColorControl, sizeof(m_ColorControl));
ResetColorControlRange();
@@ -639,6 +646,8 @@ CMPlayerCApp::~CMPlayerCApp()
if (m_hNTDLL) {
FreeLibrary(m_hNTDLL);
}
+ // Wait for any pending I/O operations to be canceled
+ while (WAIT_IO_COMPLETION == SleepEx(0, TRUE));
}
void CMPlayerCApp::DelayedIdle()
@@ -730,20 +739,20 @@ bool CMPlayerCApp::StoreSettingsToRegistry()
CString CMPlayerCApp::GetIniPath() const
{
- CString path = GetProgramPath(true);
+ CString path = PathUtils::GetProgramPath(true);
path = path.Left(path.ReverseFind('.') + 1) + _T("ini");
return path;
}
bool CMPlayerCApp::IsIniValid() const
{
- return FileExists(GetIniPath());
+ return PathUtils::Exists(GetIniPath());
}
bool CMPlayerCApp::GetAppSavePath(CString& path)
{
if (IsIniValid()) { // If settings ini file found, store stuff in the same folder as the exe file
- path = GetProgramPath();
+ path = PathUtils::GetProgramPath();
} else {
return GetAppDataPath(path);
}
@@ -848,7 +857,7 @@ void CMPlayerCApp::InitProfile()
m_dwProfileLastAccessTick = GetTickCount();
ASSERT(m_pszProfileName);
- if (!FileExists(m_pszProfileName)) {
+ if (!PathUtils::Exists(m_pszProfileName)) {
return;
}
@@ -1018,7 +1027,7 @@ BOOL CMPlayerCApp::GetProfileBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPBY
return FALSE;
}
for (UINT i = 0; i < *pBytes; i++) {
- (*ppData)[i] = (valueStr[i * 2] - 'A') | ((valueStr[i * 2 + 1] - 'A') << 4);
+ (*ppData)[i] = BYTE((valueStr[i * 2] - 'A') | ((valueStr[i * 2 + 1] - 'A') << 4));
}
return TRUE;
}
@@ -1447,17 +1456,19 @@ BOOL CMPlayerCApp::InitInstance()
// Remove the working directory from the search path to work around the DLL preloading vulnerability
SetDllDirectory(_T(""));
- WorkAroundMathLibraryBug();
+ // At this point we have not hooked this function yet so we get the real result
+ if (!IsDebuggerPresent()) {
+ CrashReporter::Enable();
+ }
if (!HeapSetInformation(nullptr, HeapEnableTerminationOnCorruption, nullptr, 0)) {
TRACE(_T("Failed to enable \"terminate on corruption\" heap option, error %u\n"), GetLastError());
ASSERT(FALSE);
}
- // At this point only main thread should be present, mhook is custom-hacked accordingly
- bool bHookingSuccessful = true;
+ bool bHookingSuccessful = MH_Initialize() == MH_OK;
- bHookingSuccessful &= !!Mhook_SetHook(&(PVOID&)Real_IsDebuggerPresent, (PVOID)Mine_IsDebuggerPresent);
+ bHookingSuccessful &= !!Mhook_SetHookEx(&Real_IsDebuggerPresent, Mine_IsDebuggerPresent);
m_hNTDLL = LoadLibrary(_T("ntdll.dll"));
#ifndef _DEBUG // Disable NtQueryInformationProcess in debug (prevent VS debugger to stop on crash address)
@@ -1465,13 +1476,15 @@ BOOL CMPlayerCApp::InitInstance()
Real_NtQueryInformationProcess = (decltype(Real_NtQueryInformationProcess))GetProcAddress(m_hNTDLL, "NtQueryInformationProcess");
if (Real_NtQueryInformationProcess) {
- bHookingSuccessful &= !!Mhook_SetHook(&(PVOID&)Real_NtQueryInformationProcess, (PVOID)Mine_NtQueryInformationProcess);
+ bHookingSuccessful &= !!Mhook_SetHookEx(&Real_NtQueryInformationProcess, Mine_NtQueryInformationProcess);
}
}
#endif
- bHookingSuccessful &= !!Mhook_SetHook(&(PVOID&)Real_CreateFileW, (PVOID)Mine_CreateFileW);
- bHookingSuccessful &= !!Mhook_SetHook(&(PVOID&)Real_DeviceIoControl, (PVOID)Mine_DeviceIoControl);
+ bHookingSuccessful &= !!Mhook_SetHookEx(&Real_CreateFileW, Mine_CreateFileW);
+ bHookingSuccessful &= !!Mhook_SetHookEx(&Real_DeviceIoControl, Mine_DeviceIoControl);
+
+ bHookingSuccessful &= MH_EnableHook(MH_ALL_HOOKS) == MH_OK;
if (!bHookingSuccessful) {
if (AfxMessageBox(IDS_HOOKS_FAILED, MB_ICONWARNING | MB_YESNO, 0) == IDYES) {
@@ -1480,11 +1493,13 @@ BOOL CMPlayerCApp::InitInstance()
}
// If those hooks fail it's annoying but try to run anyway without reporting any error in release mode
- VERIFY(Mhook_SetHook(&(PVOID&)Real_ChangeDisplaySettingsExA, (PVOID)Mine_ChangeDisplaySettingsExA));
- VERIFY(Mhook_SetHook(&(PVOID&)Real_ChangeDisplaySettingsExW, (PVOID)Mine_ChangeDisplaySettingsExW));
- VERIFY(Mhook_SetHook(&(PVOID&)Real_CreateFileA, (PVOID)Mine_CreateFileA)); // The internal splitter uses the right share mode anyway so this is no big deal
- VERIFY(Mhook_SetHook(&(PVOID&)Real_LockWindowUpdate, (PVOID)Mine_LockWindowUpdate));
- VERIFY(Mhook_SetHook(&(PVOID&)Real_mixerSetControlDetails, (PVOID)Mine_mixerSetControlDetails));
+ VERIFY(Mhook_SetHookEx(&Real_ChangeDisplaySettingsExA, Mine_ChangeDisplaySettingsExA));
+ VERIFY(Mhook_SetHookEx(&Real_ChangeDisplaySettingsExW, Mine_ChangeDisplaySettingsExW));
+ VERIFY(Mhook_SetHookEx(&Real_CreateFileA, Mine_CreateFileA)); // The internal splitter uses the right share mode anyway so this is no big deal
+ VERIFY(Mhook_SetHookEx(&Real_LockWindowUpdate, Mine_LockWindowUpdate));
+ VERIFY(Mhook_SetHookEx(&Real_mixerSetControlDetails, Mine_mixerSetControlDetails));
+
+ MH_EnableHook(MH_ALL_HOOKS);
CFilterMapper2::Init();
@@ -1530,7 +1545,7 @@ BOOL CMPlayerCApp::InitInstance()
m_s->ParseCommandLine(m_cmdln);
- VERIFY(SetCurrentDirectory(GetProgramPath()));
+ VERIFY(SetCurrentDirectory(PathUtils::GetProgramPath()));
if (m_s->nCLSwitches & (CLSW_HELP | CLSW_UNRECOGNIZEDSWITCH)) { // show commandline help window
m_s->LoadSettings();
@@ -1579,7 +1594,7 @@ BOOL CMPlayerCApp::InitInstance()
VERIFY(key.Close() == ERROR_SUCCESS);
// Set ExePath value to prevent settings migration
key.Attach(GetAppRegistryKey());
- VERIFY(key.SetStringValue(_T("ExePath"), GetProgramPath(true)) == ERROR_SUCCESS);
+ VERIFY(key.SetStringValue(_T("ExePath"), PathUtils::GetProgramPath(true)) == ERROR_SUCCESS);
VERIFY(key.Close() == ERROR_SUCCESS);
}
@@ -1589,7 +1604,7 @@ BOOL CMPlayerCApp::InitInstance()
CPath playlistPath;
playlistPath.Combine(strSavePath, _T("default.mpcpl"));
- if (FileExists(playlistPath)) {
+ if (playlistPath.FileExists()) {
CFile::Remove(playlistPath);
}
}
@@ -1715,7 +1730,7 @@ BOOL CMPlayerCApp::InitInstance()
}
}
- key.SetStringValue(_T("ExePath"), GetProgramPath(true));
+ key.SetStringValue(_T("ExePath"), PathUtils::GetProgramPath(true));
}
}
@@ -1734,7 +1749,9 @@ BOOL CMPlayerCApp::InitInstance()
CMainFrame* pFrame = DEBUG_NEW CMainFrame;
m_pMainWnd = pFrame;
if (!pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, nullptr, nullptr)) {
- AfxMessageBox(_T("CMainFrame::LoadFrame failed!"));
+ if (MessageBox(nullptr, ResStr(IDS_FRAME_INIT_FAILED), m_pszAppName, MB_ICONERROR | MB_YESNO) == IDYES) {
+ ShellExecute(nullptr, _T("open"), TRAC_URL, nullptr, nullptr, SW_SHOWDEFAULT);
+ }
return FALSE;
}
pFrame->m_controls.LoadState();
@@ -1745,9 +1762,30 @@ BOOL CMPlayerCApp::InitInstance()
pFrame->SetDefaultFullscreenState();
pFrame->UpdateControlState(CMainFrame::UPDATE_CONTROLS_VISIBILITY);
pFrame->SetIcon(icon, TRUE);
- pFrame->DragAcceptFiles();
- pFrame->ShowWindow((m_s->nCLSwitches & CLSW_MINIMIZED) ? SW_SHOWMINIMIZED : SW_SHOW);
+
+ bool bRestoreLastWindowType = m_s->fRememberWindowSize && m_s->fRememberWindowPos;
+ bool bMinimized = (m_s->nCLSwitches & CLSW_MINIMIZED) || (bRestoreLastWindowType && m_s->nLastWindowType == SIZE_MINIMIZED);
+ bool bMaximized = bRestoreLastWindowType && m_s->nLastWindowType == SIZE_MAXIMIZED;
+
+ if (bMinimized) {
+ m_nCmdShow = (m_s->nCLSwitches & CLSW_NOFOCUS) ? SW_SHOWMINNOACTIVE : SW_SHOWMINIMIZED;
+ } else if (bMaximized) {
+ // Show maximized without focus is not supported nor make sense.
+ m_nCmdShow = (m_s->nCLSwitches & CLSW_NOFOCUS) ? SW_SHOWNOACTIVATE : SW_SHOWMAXIMIZED;
+ } else {
+ m_nCmdShow = (m_s->nCLSwitches & CLSW_NOFOCUS) ? SW_SHOWNOACTIVATE : SW_SHOWNORMAL;
+ }
+
+ pFrame->ActivateFrame(m_nCmdShow);
pFrame->UpdateWindow();
+
+ if (bMinimized && bMaximized) {
+ WINDOWPLACEMENT wp;
+ GetWindowPlacement(*pFrame, &wp);
+ wp.flags = WPF_RESTORETOMAXIMIZED;
+ SetWindowPlacement(*pFrame, &wp);
+ }
+
pFrame->m_hAccelTable = m_s->hAccel;
m_s->WinLircClient.SetHWND(m_pMainWnd->m_hWnd);
if (m_s->fWinLirc) {
@@ -1765,8 +1803,6 @@ BOOL CMPlayerCApp::InitInstance()
SendCommandLine(m_pMainWnd->m_hWnd);
RegisterHotkeys();
- pFrame->SetFocus();
-
// set HIGH I/O Priority for better playback performance
if (m_hNTDLL) {
typedef NTSTATUS(WINAPI * FUNC_NTSETINFORMATIONPROCESS)(HANDLE, ULONG, PVOID, ULONG);
@@ -1917,7 +1953,7 @@ void CMPlayerCApp::RegisterHotkeys()
POSITION pos = m_s->wmcmds.GetHeadPosition();
while (pos) {
- wmcmd& wc = m_s->wmcmds.GetNext(pos);
+ const wmcmd& wc = m_s->wmcmds.GetNext(pos);
if (wc.appcmd != 0) {
RegisterHotKey(m_pMainWnd->m_hWnd, wc.appcmd, 0, GetVKFromAppCommand(wc.appcmd));
}
@@ -1931,7 +1967,7 @@ void CMPlayerCApp::UnregisterHotkeys()
POSITION pos = m_s->wmcmds.GetHeadPosition();
while (pos) {
- wmcmd& wc = m_s->wmcmds.GetNext(pos);
+ const wmcmd& wc = m_s->wmcmds.GetNext(pos);
if (wc.appcmd != 0) {
UnregisterHotKey(m_pMainWnd->m_hWnd, wc.appcmd);
}
@@ -1985,12 +2021,16 @@ UINT CMPlayerCApp::GetVKFromAppCommand(UINT nAppCommand)
int CMPlayerCApp::ExitInstance()
{
- m_s->SaveSettings();
-
- m_s = nullptr;
+ // We might be exiting before m_s is initialized.
+ if (m_s) {
+ m_s->SaveSettings();
+ m_s = nullptr;
+ }
CMPCPngImage::CleanUp();
+ MH_Uninitialize();
+
OleUninitialize();
return CWinApp::ExitInstance();
@@ -2109,7 +2149,7 @@ void CRemoteCtrlClient::OnReceive(int nErrorCode)
}
str.ReleaseBuffer(ret);
- TRACE(_T("CRemoteCtrlClient (OnReceive): %s\n"), CString(str));
+ TRACE(_T("CRemoteCtrlClient (OnReceive): %S\n"), str);
OnCommand(str);
@@ -2128,11 +2168,9 @@ void CRemoteCtrlClient::ExecuteCommand(CStringA cmd, int repcnt)
POSITION pos = s.wmcmds.GetHeadPosition();
while (pos) {
- wmcmd wc = s.wmcmds.GetNext(pos);
- CStringA name = TToA(wc.GetName());
- name.Replace(' ', '_');
+ const wmcmd& wc = s.wmcmds.GetNext(pos);
if ((repcnt == 0 && wc.rmrepcnt == 0 || wc.rmrepcnt > 0 && (repcnt % wc.rmrepcnt) == 0)
- && (!name.CompareNoCase(cmd) || !wc.rmcmd.CompareNoCase(cmd) || wc.cmd == (WORD)strtol(cmd, nullptr, 10))) {
+ && (!wc.rmcmd.CompareNoCase(cmd) || wc.cmd == (WORD)strtol(cmd, nullptr, 10))) {
CAutoLock cAutoLock(&m_csLock);
TRACE(_T("CRemoteCtrlClient (calling command): %s\n"), wc.GetName());
m_pWnd->SendMessage(WM_COMMAND, wc.cmd);
@@ -2149,7 +2187,7 @@ CWinLircClient::CWinLircClient()
void CWinLircClient::OnCommand(CStringA str)
{
- TRACE(_T("CWinLircClient (OnCommand): %s\n"), CString(str));
+ TRACE(_T("CWinLircClient (OnCommand): %S\n"), str);
int i = 0, j = 0, repcnt = 0;
for (CStringA token = str.Tokenize(" ", i);
@@ -2171,7 +2209,7 @@ CUIceClient::CUIceClient()
void CUIceClient::OnCommand(CStringA str)
{
- TRACE(_T("CUIceClient (OnCommand): %s\n"), CString(str));
+ TRACE(_T("CUIceClient (OnCommand): %S\n"), str);
CStringA cmd;
int i = 0, j = 0;
@@ -2234,28 +2272,28 @@ void CMPlayerCApp::UpdateColorControlRange(bool isEVR)
m_ColorControl[0].MinValue = FixedToInt(m_EVRColorControl[0].MinValue);
m_ColorControl[0].MaxValue = FixedToInt(m_EVRColorControl[0].MaxValue);
m_ColorControl[0].DefaultValue = FixedToInt(m_EVRColorControl[0].DefaultValue);
- m_ColorControl[0].StepSize = max(1, FixedToInt(m_EVRColorControl[0].StepSize));
+ m_ColorControl[0].StepSize = std::max(1, FixedToInt(m_EVRColorControl[0].StepSize));
// Contrast
m_ColorControl[1].MinValue = FixedToInt(m_EVRColorControl[1].MinValue, 100) - 100;
m_ColorControl[1].MaxValue = FixedToInt(m_EVRColorControl[1].MaxValue, 100) - 100;
m_ColorControl[1].DefaultValue = FixedToInt(m_EVRColorControl[1].DefaultValue, 100) - 100;
- m_ColorControl[1].StepSize = max(1, FixedToInt(m_EVRColorControl[1].StepSize, 100));
+ m_ColorControl[1].StepSize = std::max(1, FixedToInt(m_EVRColorControl[1].StepSize, 100));
// Hue
m_ColorControl[2].MinValue = FixedToInt(m_EVRColorControl[2].MinValue);
m_ColorControl[2].MaxValue = FixedToInt(m_EVRColorControl[2].MaxValue);
m_ColorControl[2].DefaultValue = FixedToInt(m_EVRColorControl[2].DefaultValue);
- m_ColorControl[2].StepSize = max(1, FixedToInt(m_EVRColorControl[2].StepSize));
+ m_ColorControl[2].StepSize = std::max(1, FixedToInt(m_EVRColorControl[2].StepSize));
// Saturation
m_ColorControl[3].MinValue = FixedToInt(m_EVRColorControl[3].MinValue, 100) - 100;
m_ColorControl[3].MaxValue = FixedToInt(m_EVRColorControl[3].MaxValue, 100) - 100;
m_ColorControl[3].DefaultValue = FixedToInt(m_EVRColorControl[3].DefaultValue, 100) - 100;
- m_ColorControl[3].StepSize = max(1, FixedToInt(m_EVRColorControl[3].StepSize, 100));
+ m_ColorControl[3].StepSize = std::max(1, FixedToInt(m_EVRColorControl[3].StepSize, 100));
} else {
// Brightness
m_ColorControl[0].MinValue = (int)floor(m_VMR9ColorControl[0].MinValue + 0.5);
m_ColorControl[0].MaxValue = (int)floor(m_VMR9ColorControl[0].MaxValue + 0.5);
m_ColorControl[0].DefaultValue = (int)floor(m_VMR9ColorControl[0].DefaultValue + 0.5);
- m_ColorControl[0].StepSize = max(1, (int)(m_VMR9ColorControl[0].StepSize + 0.5));
+ m_ColorControl[0].StepSize = std::max(1, (int)(m_VMR9ColorControl[0].StepSize + 0.5));
// Contrast
/*if (m_VMR9ColorControl[1].MinValue == 0.0999908447265625) {
m_VMR9ColorControl[1].MinValue = 0.11; //fix NVIDIA bug
@@ -2266,17 +2304,17 @@ void CMPlayerCApp::UpdateColorControlRange(bool isEVR)
m_ColorControl[1].MinValue = (int)floor(m_VMR9ColorControl[1].MinValue * 100 + 0.5) - 100;
m_ColorControl[1].MaxValue = (int)floor(m_VMR9ColorControl[1].MaxValue * 100 + 0.5) - 100;
m_ColorControl[1].DefaultValue = (int)floor(m_VMR9ColorControl[1].DefaultValue * 100 + 0.5) - 100;
- m_ColorControl[1].StepSize = max(1, (int)(m_VMR9ColorControl[1].StepSize * 100 + 0.5));
+ m_ColorControl[1].StepSize = std::max(1, (int)(m_VMR9ColorControl[1].StepSize * 100 + 0.5));
// Hue
m_ColorControl[2].MinValue = (int)floor(m_VMR9ColorControl[2].MinValue + 0.5);
m_ColorControl[2].MaxValue = (int)floor(m_VMR9ColorControl[2].MaxValue + 0.5);
m_ColorControl[2].DefaultValue = (int)floor(m_VMR9ColorControl[2].DefaultValue + 0.5);
- m_ColorControl[2].StepSize = max(1, (int)(m_VMR9ColorControl[2].StepSize + 0.5));
+ m_ColorControl[2].StepSize = std::max(1, (int)(m_VMR9ColorControl[2].StepSize + 0.5));
// Saturation
m_ColorControl[3].MinValue = (int)floor(m_VMR9ColorControl[3].MinValue * 100 + 0.5) - 100;
m_ColorControl[3].MaxValue = (int)floor(m_VMR9ColorControl[3].MaxValue * 100 + 0.5) - 100;
m_ColorControl[3].DefaultValue = (int)floor(m_VMR9ColorControl[3].DefaultValue * 100 + 0.5) - 100;
- m_ColorControl[3].StepSize = max(1, (int)(m_VMR9ColorControl[3].StepSize * 100 + 0.5));
+ m_ColorControl[3].StepSize = std::max(1, (int)(m_VMR9ColorControl[3].StepSize * 100 + 0.5));
}
// Brightness
diff --git a/src/mpc-hc/mplayerc.h b/src/mpc-hc/mplayerc.h
index dc47e41fc..97cdf2ce8 100644
--- a/src/mpc-hc/mplayerc.h
+++ b/src/mpc-hc/mplayerc.h
@@ -1,6 +1,6 @@
/*
* (C) 2003-2006 Gabest
- * (C) 2006-2014 see Authors.txt
+ * (C) 2006-2016 see Authors.txt
*
* This file is part of MPC-HC.
*
@@ -26,6 +26,8 @@
#endif
#include "EventDispatcher.h"
+#include "DpiHelper.h"
+#include "AppSettings.h"
#include "RenderersSettings.h"
#include "resource.h"
@@ -43,7 +45,7 @@
// define the default logo we use
#define DEF_LOGO IDF_LOGO3
-extern HICON LoadIcon(CString fn, bool bSmallIcon);
+extern HICON LoadIcon(CString fn, bool bSmallIcon, DpiHelper* pDpiHelper = nullptr);
extern bool LoadType(CString fn, CString& type);
extern bool LoadResource(UINT resid, CStringA& str, LPCTSTR restype);
extern CStringA GetContentType(CString fn, CAtlList<CString>* redir = nullptr);
@@ -74,7 +76,10 @@ enum {
WM_TUNER_SCAN_PROGRESS,
WM_TUNER_SCAN_END,
WM_TUNER_STATS,
- WM_TUNER_NEW_CHANNEL
+ WM_TUNER_NEW_CHANNEL,
+ WM_DVB_EIT_DATA_READY,
+ WM_LOADSUBTITLES,
+ WM_GETSUBTITLES
};
enum ControlType {
@@ -187,26 +192,7 @@ public:
afx_msg void OnHelpShowcommandlineswitches();
};
-class DPI final
-{
- int m_dpix, m_dpiy;
-public:
- DPI() {
- HDC hDC = ::GetDC(nullptr);
- m_dpix = GetDeviceCaps(hDC, LOGPIXELSX);
- m_dpiy = GetDeviceCaps(hDC, LOGPIXELSY);
- ::ReleaseDC(nullptr, hDC);
- }
- int ScaleFloorX(int x) { return x * m_dpix / 96; }
- int ScaleFloorY(int y) { return y * m_dpiy / 96; }
- int ScaleX(int x) { return MulDiv(x, m_dpix, 96); }
- int ScaleY(int y) { return MulDiv(y, m_dpiy, 96); }
- int TransposeScaledX(int x) { return MulDiv(x, m_dpiy, m_dpix); }
- int TransposeScaledY(int y) { return MulDiv(y, m_dpix, m_dpiy); }
-};
-
#define AfxGetAppSettings() (*static_cast<CMPlayerCApp*>(AfxGetApp())->m_s.get())
#define AfxGetMyApp() static_cast<CMPlayerCApp*>(AfxGetApp())
-#define AfxGetMainFrame() dynamic_cast<CMainFrame*>(AfxGetMainWnd())
#define GetEventd() AfxGetMyApp()->m_eventd
diff --git a/src/mpc-hc/res/logo.0.png b/src/mpc-hc/res/logo.0.png
index bb89de1b6..252d9502d 100644
--- a/src/mpc-hc/res/logo.0.png
+++ b/src/mpc-hc/res/logo.0.png
Binary files differ
diff --git a/src/mpc-hc/res/logo.1.png b/src/mpc-hc/res/logo.1.png
index d3de8e7a5..cc71d80cd 100644
--- a/src/mpc-hc/res/logo.1.png
+++ b/src/mpc-hc/res/logo.1.png
Binary files differ
diff --git a/src/mpc-hc/res/logo.1_x64.png b/src/mpc-hc/res/logo.1_x64.png
index 6d25b507f..9e3af7a96 100644
--- a/src/mpc-hc/res/logo.1_x64.png
+++ b/src/mpc-hc/res/logo.1_x64.png
Binary files differ
diff --git a/src/mpc-hc/res/logo.2.png b/src/mpc-hc/res/logo.2.png
index fe1193a92..e260873b7 100644
--- a/src/mpc-hc/res/logo.2.png
+++ b/src/mpc-hc/res/logo.2.png
Binary files differ
diff --git a/src/mpc-hc/res/logo.2_x64.png b/src/mpc-hc/res/logo.2_x64.png
index 10f26fed9..4f54420ba 100644
--- a/src/mpc-hc/res/logo.2_x64.png
+++ b/src/mpc-hc/res/logo.2_x64.png
Binary files differ
diff --git a/src/mpc-hc/res/logo.3.png b/src/mpc-hc/res/logo.3.png
index 897701a53..e4d23ae2e 100644
--- a/src/mpc-hc/res/logo.3.png
+++ b/src/mpc-hc/res/logo.3.png
Binary files differ
diff --git a/src/mpc-hc/res/logo.3_x64.png b/src/mpc-hc/res/logo.3_x64.png
index 71fb9c724..5ca5ec742 100644
--- a/src/mpc-hc/res/logo.3_x64.png
+++ b/src/mpc-hc/res/logo.3_x64.png
Binary files differ
diff --git a/src/mpc-hc/res/mpc-hc.exe.manifest.conf b/src/mpc-hc/res/mpc-hc.exe.manifest.conf
index f905b63b1..7ed89debd 100644
--- a/src/mpc-hc/res/mpc-hc.exe.manifest.conf
+++ b/src/mpc-hc/res/mpc-hc.exe.manifest.conf
@@ -32,11 +32,12 @@
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
- <dpiAware>true</dpiAware>
+ <dpiAware>True/PM</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly> \ No newline at end of file
diff --git a/src/mpc-hc/res/mpc-hc.rc2 b/src/mpc-hc/res/mpc-hc.rc2
index 30eb7cc7f..3d0aeb2d4 100644
--- a/src/mpc-hc/res/mpc-hc.rc2
+++ b/src/mpc-hc/res/mpc-hc.rc2
@@ -95,6 +95,12 @@ IDR_TB_STOP ICON "res\\tb_stop_16.ico"
IDI_AUDIOCD ICON "res\\Icon_41.ico"
IDI_DVD ICON "res\\Icon_114.ico"
IDI_UNKNOWN ICON "res\\Icon_116.ico"
+IDI_OPENSUBTITLES ICON "res\\subtitles\\favicon_opensubtitles.ico"
+IDI_PODNAPISI ICON "res\\subtitles\\favicon_podnapisi.ico"
+IDI_SUBDB ICON "res\\subtitles\\favicon_subdb.ico"
+IDI_TITLOVI ICON "res\\subtitles\\favicon_titlovi.ico"
+IDI_YSUBS ICON "res\\subtitles\\favicon_ysubs.ico"
+IDI_N24 ICON "res\\subtitles\\favicon_napisy24.ico"
/////////////////////////////////////////////////////////////////////////////
@@ -154,6 +160,15 @@ IDF_SHADER_EMPTY SHADER "res\\shaders\\empty.ps
IDF_SHADER_FINAL SHADER "res\\shaders\\final.psh"
IDF_SHADER_RESIZER SHADER "res\\shaders\\resizer.psh"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// SVG
+//
+
+IDF_SVG_TOOLBAR SVG "res\\toolbar.svg"
+
+
/////////////////////////////////////////////////////////////////////////////
//
// Version
diff --git a/src/mpc-hc/res/subtitles/favicon_napisy24.ico b/src/mpc-hc/res/subtitles/favicon_napisy24.ico
new file mode 100644
index 000000000..eb2449ec7
--- /dev/null
+++ b/src/mpc-hc/res/subtitles/favicon_napisy24.ico
Binary files differ
diff --git a/src/mpc-hc/res/subtitles/favicon_opensubtitles.ico b/src/mpc-hc/res/subtitles/favicon_opensubtitles.ico
new file mode 100644
index 000000000..94024dfe9
--- /dev/null
+++ b/src/mpc-hc/res/subtitles/favicon_opensubtitles.ico
Binary files differ
diff --git a/src/mpc-hc/res/subtitles/favicon_podnapisi.ico b/src/mpc-hc/res/subtitles/favicon_podnapisi.ico
new file mode 100644
index 000000000..0abfe5d4d
--- /dev/null
+++ b/src/mpc-hc/res/subtitles/favicon_podnapisi.ico
Binary files differ
diff --git a/src/mpc-hc/res/subtitles/favicon_subdb.ico b/src/mpc-hc/res/subtitles/favicon_subdb.ico
new file mode 100644
index 000000000..5ac5a6178
--- /dev/null
+++ b/src/mpc-hc/res/subtitles/favicon_subdb.ico
Binary files differ
diff --git a/src/mpc-hc/res/subtitles/favicon_titlovi.ico b/src/mpc-hc/res/subtitles/favicon_titlovi.ico
new file mode 100644
index 000000000..9fccbe456
--- /dev/null
+++ b/src/mpc-hc/res/subtitles/favicon_titlovi.ico
Binary files differ
diff --git a/src/mpc-hc/res/subtitles/favicon_tvsubtitles.ico b/src/mpc-hc/res/subtitles/favicon_tvsubtitles.ico
new file mode 100644
index 000000000..4918c72bb
--- /dev/null
+++ b/src/mpc-hc/res/subtitles/favicon_tvsubtitles.ico
Binary files differ
diff --git a/src/mpc-hc/res/subtitles/favicon_ysubs.ico b/src/mpc-hc/res/subtitles/favicon_ysubs.ico
new file mode 100644
index 000000000..6d4f9771e
--- /dev/null
+++ b/src/mpc-hc/res/subtitles/favicon_ysubs.ico
Binary files differ
diff --git a/src/mpc-hc/res/tickcross.png b/src/mpc-hc/res/tickcross.png
index 918858bbf..64b867867 100644
--- a/src/mpc-hc/res/tickcross.png
+++ b/src/mpc-hc/res/tickcross.png
Binary files differ
diff --git a/src/mpc-hc/res/toolbar-unminified.svg b/src/mpc-hc/res/toolbar-unminified.svg
new file mode 100644
index 000000000..17d14798a
--- /dev/null
+++ b/src/mpc-hc/res/toolbar-unminified.svg
@@ -0,0 +1,433 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="240"
+ height="16"
+ viewBox="0 0 240 16"
+ id="svg3341"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="toolbar.svg"
+ inkscape:export-filename="D:\src\mpc-hc\src\mpc-hc\res\toolbar2.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3343" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.0875"
+ inkscape:cx="144.97634"
+ inkscape:cy="-0.056865311"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1680"
+ inkscape:window-height="966"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:snap-grids="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3353" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3346">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Calque 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3621)">
+ <path
+ sodipodi:type="star"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4159"
+ sodipodi:sides="3"
+ sodipodi:cx="3"
+ sodipodi:cy="1039.3621"
+ sodipodi:r1="4.472136"
+ sodipodi:r2="2.236068"
+ sodipodi:arg1="2.0943951"
+ sodipodi:arg2="3.1415927"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 0.763932,1043.235 -2e-8,-7.7459 6.70820402,3.873 z"
+ inkscape:transform-center-x="-1.833329"
+ transform="matrix(1.6397794,0,0,1.4200907,1.7473283,-432.1263)"
+ inkscape:transform-center-y="-6.7848101e-005" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4161"
+ width="2.99999"
+ height="8.9999905"
+ x="20.000006"
+ y="1039.3621" />
+ <rect
+ y="1039.3621"
+ x="25.000006"
+ height="8.9999905"
+ width="2.99999"
+ id="rect4163"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4165"
+ width="7.9999905"
+ height="8.9999905"
+ x="36.000004"
+ y="1039.3621" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4167"
+ width="1"
+ height="7"
+ x="66"
+ y="1040.3621" />
+ <path
+ sodipodi:type="star"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4169"
+ sodipodi:sides="3"
+ sodipodi:cx="73"
+ sodipodi:cy="1040.3621"
+ sodipodi:r1="2"
+ sodipodi:r2="1"
+ sodipodi:arg1="3.1415927"
+ sodipodi:arg2="4.1887902"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:transform-center-x="0.66666139"
+ transform="matrix(1.3333251,0,0,2.0207177,-26.666069,-1058.4159)"
+ inkscape:transform-center-y="-3.0343961e-005" />
+ <path
+ inkscape:transform-center-y="-3.0343961e-005"
+ transform="matrix(1.3333251,0,0,2.0207177,-21.666069,-1058.4159)"
+ inkscape:transform-center-x="0.66666139"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="4.1887902"
+ sodipodi:arg1="3.1415927"
+ sodipodi:r2="1"
+ sodipodi:r1="2"
+ sodipodi:cy="1040.3621"
+ sodipodi:cx="73"
+ sodipodi:sides="3"
+ id="path4171"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star" />
+ <path
+ inkscape:transform-center-y="-3.0343961e-005"
+ transform="matrix(1.3333251,0,0,2.0207177,-11.666069,-1058.4159)"
+ inkscape:transform-center-x="0.66666139"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="4.1887902"
+ sodipodi:arg1="3.1415927"
+ sodipodi:r2="1"
+ sodipodi:r1="2"
+ sodipodi:cy="1040.3621"
+ sodipodi:cx="73"
+ sodipodi:sides="3"
+ id="path4173"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star" />
+ <path
+ sodipodi:type="star"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4175"
+ sodipodi:sides="3"
+ sodipodi:cx="73"
+ sodipodi:cy="1040.3621"
+ sodipodi:r1="2"
+ sodipodi:r2="1"
+ sodipodi:arg1="3.1415927"
+ sodipodi:arg2="4.1887902"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:transform-center-x="0.66666139"
+ transform="matrix(1.3333251,0,0,2.0207177,-6.666069,-1058.4159)"
+ inkscape:transform-center-y="-3.0343961e-005" />
+ <rect
+ y="-1047.3623"
+ x="-125"
+ height="7"
+ width="1"
+ id="rect4177"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,-1)" />
+ <path
+ transform="matrix(-1.3333251,0,0,-2.0207177,217.66606,3146.1402)"
+ inkscape:transform-center-x="-0.666658"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="4.1887902"
+ sodipodi:arg1="3.1415927"
+ sodipodi:r2="1"
+ sodipodi:r1="2"
+ sodipodi:cy="1040.3621"
+ sodipodi:cx="73"
+ sodipodi:sides="3"
+ id="path4179"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star" />
+ <path
+ sodipodi:type="star"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4181"
+ sodipodi:sides="3"
+ sodipodi:cx="73"
+ sodipodi:cy="1040.3621"
+ sodipodi:r1="2"
+ sodipodi:r2="1"
+ sodipodi:arg1="3.1415927"
+ sodipodi:arg2="4.1887902"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:transform-center-x="-0.666658"
+ transform="matrix(-1.3333251,0,0,-2.0207177,212.66606,3146.1402)" />
+ <path
+ sodipodi:type="star"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4183"
+ sodipodi:sides="3"
+ sodipodi:cx="73"
+ sodipodi:cy="1040.3621"
+ sodipodi:r1="2"
+ sodipodi:r2="1"
+ sodipodi:arg1="3.1415927"
+ sodipodi:arg2="4.1887902"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:transform-center-x="-0.666658"
+ transform="matrix(-1.3333251,0,0,-2.0207177,203.66606,3146.1402)" />
+ <path
+ transform="matrix(-1.3333251,0,0,-2.0207177,198.66606,3146.1402)"
+ inkscape:transform-center-x="-0.666658"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="4.1887902"
+ sodipodi:arg1="3.1415927"
+ sodipodi:r2="1"
+ sodipodi:r1="2"
+ sodipodi:cy="1040.3621"
+ sodipodi:cx="73"
+ sodipodi:sides="3"
+ id="path4185"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4187"
+ width="1.9999858"
+ height="6.9999857"
+ x="-149.99998"
+ y="-1047.3621" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4189"
+ width="1"
+ height="7"
+ x="-153"
+ y="-1047.3623" />
+ <path
+ sodipodi:type="star"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4191"
+ sodipodi:sides="3"
+ sodipodi:cx="73"
+ sodipodi:cy="1040.3621"
+ sodipodi:r1="2"
+ sodipodi:r2="1"
+ sodipodi:arg1="3.1415927"
+ sodipodi:arg2="4.1887902"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:transform-center-x="-0.666658"
+ transform="matrix(-1.3333251,0,0,-2.0207177,251.66606,3146.1402)" />
+ <path
+ transform="matrix(2.6666533,0,0,4.04144,2.6676424,-3160.1988)"
+ inkscape:transform-center-x="1.3333156"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="4.1887902"
+ sodipodi:arg1="3.1415927"
+ sodipodi:r2="1"
+ sodipodi:r1="2"
+ sodipodi:cy="1040.3621"
+ sodipodi:cx="73"
+ sodipodi:sides="3"
+ id="path4179-5"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star"
+ inkscape:transform-center-y="-0.00016308799" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4187-3"
+ width="3.9999909"
+ height="5.9999909"
+ x="-196"
+ y="-1047.3621" />
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4181"
+ width="15.999992"
+ height="15.999992"
+ x="224"
+ y="1020.3621" />
+ <rect
+ style="fill:#f600ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4181-4"
+ width="15.999992"
+ height="15.999992"
+ x="208"
+ y="1020.3621" />
+ <rect
+ style="fill:#7200ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4181-4-8"
+ width="15.999992"
+ height="15.999992"
+ x="192"
+ y="1020.3621" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4230"
+ sodipodi:type="arc"
+ sodipodi:cx="200.42171"
+ sodipodi:cy="1044.3516"
+ sodipodi:rx="1.1333569"
+ sodipodi:ry="1.0653899"
+ sodipodi:start="4.7996554"
+ sodipodi:end="1.4835299"
+ sodipodi:open="true"
+ d="m 200.52049,1043.2902 a 1.1333569,1.0653899 0 0 1 1.03457,1.0614 1.1333569,1.0653899 0 0 1 -1.03457,1.0613" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.60000002;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4230-0"
+ sodipodi:type="arc"
+ sodipodi:cx="201.32703"
+ sodipodi:cy="1044.3516"
+ sodipodi:rx="2.2667139"
+ sodipodi:ry="2.1307797"
+ sodipodi:start="4.7996554"
+ sodipodi:end="1.4835299"
+ sodipodi:open="true"
+ d="m 201.52458,1042.2289 a 2.2667139,2.1307797 0 0 1 2.06916,2.1227 2.2667139,2.1307797 0 0 1 -2.06916,2.1226" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4230-0-7"
+ sodipodi:type="arc"
+ sodipodi:cx="201.63358"
+ sodipodi:cy="1044.3519"
+ sodipodi:rx="4.5334277"
+ sodipodi:ry="4.2615595"
+ sodipodi:start="4.7996554"
+ sodipodi:end="1.4835299"
+ sodipodi:open="true"
+ d="m 202.02869,1040.1066 a 4.5334277,4.2615595 0 0 1 4.13831,4.2453 4.5334277,4.2615595 0 0 1 -4.13831,4.2454" />
+ <path
+ inkscape:transform-center-y="-0.00016308799"
+ sodipodi:type="star"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4262"
+ sodipodi:sides="3"
+ sodipodi:cx="73"
+ sodipodi:cy="1040.3621"
+ sodipodi:r1="2"
+ sodipodi:r2="1"
+ sodipodi:arg1="3.1415927"
+ sodipodi:arg2="4.1887902"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:transform-center-x="1.3333156"
+ transform="matrix(2.6666533,0,0,4.04144,22.667642,-3160.1988)" />
+ <rect
+ y="-1047.3621"
+ x="-216"
+ height="5.9999909"
+ width="3.9999909"
+ id="rect4264"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,-1)" />
+ <path
+ transform="matrix(2.6666533,0,0,4.04144,38.667642,-3160.1988)"
+ inkscape:transform-center-x="1.3333156"
+ d="m 71,1040.3621 3,-1.7321 0,3.4641 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="4.1887902"
+ sodipodi:arg1="3.1415927"
+ sodipodi:r2="1"
+ sodipodi:r1="2"
+ sodipodi:cy="1040.3621"
+ sodipodi:cx="73"
+ sodipodi:sides="3"
+ id="path4266"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="star"
+ inkscape:transform-center-y="-0.00016308799" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4268"
+ width="3.9999909"
+ height="5.9999909"
+ x="-232"
+ y="-1047.3621" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 210,1038.3621 12,12"
+ id="path4276"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/src/mpc-hc/res/toolbar.svg b/src/mpc-hc/res/toolbar.svg
new file mode 100644
index 000000000..e02e12e65
--- /dev/null
+++ b/src/mpc-hc/res/toolbar.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="240" height="16" viewBox="0 0 240 16">
+ <path d="M3 13V2l11 5.5zM20 3h3v9h-3zm5 0h3v9h-3zm11 0h8v9h-8zm30 1h1v7h-1zm2 3.5L72 4v7zm5 0L77 4v7zm10 0L87 4v7zm5 0L92 4v7zm37 3.5h-1V4h1zm-2-3.5l-4 3.5V4zm-5 0l-4 3.5V4zm-9 0l-4 3.5V4zm-5 0l-4 3.5V4zm46 3.5h-2V4h2zm3 0h-1V4h1zm4-3.5l-4 3.5V4zm35 .5l8-7v14z"/>
+ <path d="M196 11h-4V5h4z"/>
+ <path fill="#00f" fill-rule="evenodd" d="M224-16h16V0h-16z"/>
+ <path fill="#f600ff" fill-rule="evenodd" d="M208-16h16V0h-16z"/>
+ <path fill="#7200ff" fill-rule="evenodd" d="M192-16h16V0h-16z"/>
+ <path fill="none" stroke="#000" stroke-width=".5" d="M200.52 6.928a1.133 1.065 0 0 1 1.035 1.06 1.133 1.065 0 0 1-1.035 1.063"/>
+ <path fill="none" stroke="#000" stroke-width=".6" d="M201.525 5.867a2.267 2.13 0 0 1 2.07 2.123 2.267 2.13 0 0 1-2.07 2.122"/>
+ <path fill="none" stroke="#000" stroke-width=".7" d="M202.03 3.745a4.533 4.262 0 0 1 4.137 4.245 4.533 4.262 0 0 1-4.138 4.245"/>
+ <path d="M212 8l8-7v14z"/>
+ <path d="M216 11h-4V5h4zm12-3l8-7v14z"/>
+ <path d="M232 11h-4V5h4z"/>
+ <path fill="none" stroke="red" d="M210 2l12 12"/>
+</svg>
diff --git a/src/mpc-hc/res/toolbarw7.png b/src/mpc-hc/res/toolbarw7.png
index c48b9c14c..4721b0882 100644
--- a/src/mpc-hc/res/toolbarw7.png
+++ b/src/mpc-hc/res/toolbarw7.png
Binary files differ
diff --git a/src/mpc-hc/res/web/404.html b/src/mpc-hc/res/web/404.html
index cc1c49e59..c90f0b5a0 100644
--- a/src/mpc-hc/res/web/404.html
+++ b/src/mpc-hc/res/web/404.html
@@ -6,9 +6,10 @@
<link rel="stylesheet" href="default.css">
<link rel="icon" href="favicon.ico">
</head>
- <body>
+ <body class="page-four-oh-four">
<!--[if lt IE 8]>
- <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+ <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser.
+ Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<h1>Page Not Found</h1>
<p>Sorry, but the page you were trying to view does not exist.</p>
diff --git a/src/mpc-hc/res/web/browser.html b/src/mpc-hc/res/web/browser.html
index f5b74955d..7292503c9 100644
--- a/src/mpc-hc/res/web/browser.html
+++ b/src/mpc-hc/res/web/browser.html
@@ -6,9 +6,10 @@
<link rel="stylesheet" href="default.css">
<link rel="icon" href="favicon.ico">
</head>
- <body>
+ <body class="page-file-browser">
<!--[if lt IE 8]>
- <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+ <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser.
+ Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<div>
<table class="browser-table">
diff --git a/src/mpc-hc/res/web/controls.html b/src/mpc-hc/res/web/controls.html
index 9a93c35fa..60a374635 100644
--- a/src/mpc-hc/res/web/controls.html
+++ b/src/mpc-hc/res/web/controls.html
@@ -7,9 +7,10 @@
<link rel="icon" href="favicon.ico">
<script src="javascript.js"></script>
</head>
-<body onload='controlsInit("[filepatharg]", [position], [duration], [state], [playbackrate], [reloadtime], [volumelevel], [muted])'>
+<body onload='controlsInit("[filepatharg]", [position], [duration], [state], [playbackrate], [reloadtime], [volumelevel], [muted])' class="page-controls">
<!--[if lt IE 8]>
- <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+ <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser.
+ Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<noscript>
<p>
diff --git a/src/mpc-hc/res/web/default.css b/src/mpc-hc/res/web/default.css
index c923f6057..f004c4803 100644
--- a/src/mpc-hc/res/web/default.css
+++ b/src/mpc-hc/res/web/default.css
@@ -1,42 +1,44 @@
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
+/*! normalize.css v4.0.0 | MIT License | github.com/necolas/normalize.css */
+progress,sub,sup{vertical-align:baseline}
+button,hr,input,select{overflow:visible}
+[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
-article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
-audio,canvas,progress,video{display:inline-block;vertical-align:baseline}
+body{margin:0}
+article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}
+audio,canvas,progress,video{display:inline-block}
audio:not([controls]){display:none;height:0}
[hidden],template{display:none}
-a{background:0 0}
-a:active,a:hover{outline:0}
-abbr[title]{border-bottom:1px dotted}
-b,strong{font-weight:700}
+a{background-color:transparent}
+a:active,a:hover{outline-width:0}
+abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}
+b,strong{font-weight:bolder}
dfn{font-style:italic}
h1{font-size:2em;margin:.67em 0}
-mark{background:#ff0;color:#000}
+mark{background-color:#ff0;color:#000}
small{font-size:80%}
-sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
-sup{top:-.5em}
+sub,sup{font-size:75%;line-height:0;position:relative}
sub{bottom:-.25em}
-img{border:0}
+sup{top:-.5em}
+img{border-style:none}
svg:not(:root){overflow:hidden}
-figure{margin:1em 40px}
-hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
-pre{overflow:auto}
code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}
-button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}
-button{overflow:visible}
+figure{margin:1em 40px}
+hr{box-sizing:content-box;height:0}
+button,input,select,textarea{font:inherit;margin:0}
+optgroup{font-weight:700}
button,select{text-transform:none}
-button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
-button[disabled],html input[disabled]{cursor:default}
+[type=button],[type=reset],[type=submit],button{cursor:pointer}
+[disabled]{cursor:default}
+[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
-input{line-height:normal}
-input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}
-input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}
-input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
-input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}
+button:-moz-focusring,input:-moz-focusring{outline:ButtonText dotted 1px}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
-legend{border:0;padding:0}
+legend{color:inherit;display:table;max-width:100%;white-space:normal}
textarea{overflow:auto}
-optgroup{font-weight:700}
-/* END OF normalize.css 2.1.3 */
+[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}
+[type=search]{-webkit-appearance:textfield}
+[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}
+/* END OF normalize.css v4.0.0 */
/* common */
@@ -105,6 +107,10 @@ img {
/* controls.html */
+td,
+th {
+ padding: 0;
+}
#slider {
background: url(img/sliderback.png) no-repeat;
width: 515px;
diff --git a/src/mpc-hc/res/web/img/1pix.png b/src/mpc-hc/res/web/img/1pix.png
index 5ac15e66a..ac576dd6e 100644
--- a/src/mpc-hc/res/web/img/1pix.png
+++ b/src/mpc-hc/res/web/img/1pix.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/controlback.png b/src/mpc-hc/res/web/img/controlback.png
index f93e51219..5434a9abb 100644
--- a/src/mpc-hc/res/web/img/controlback.png
+++ b/src/mpc-hc/res/web/img/controlback.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/controlbuttonplay.png b/src/mpc-hc/res/web/img/controlbuttonplay.png
index 1150f7a48..a9f57e03e 100644
--- a/src/mpc-hc/res/web/img/controlbuttonplay.png
+++ b/src/mpc-hc/res/web/img/controlbuttonplay.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/controlbuttonskipback.png b/src/mpc-hc/res/web/img/controlbuttonskipback.png
index b527090eb..ab8029dc5 100644
--- a/src/mpc-hc/res/web/img/controlbuttonskipback.png
+++ b/src/mpc-hc/res/web/img/controlbuttonskipback.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/controlbuttonskipforward.png b/src/mpc-hc/res/web/img/controlbuttonskipforward.png
index 0e6daede5..634798bc4 100644
--- a/src/mpc-hc/res/web/img/controlbuttonskipforward.png
+++ b/src/mpc-hc/res/web/img/controlbuttonskipforward.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/controlbuttonstep.png b/src/mpc-hc/res/web/img/controlbuttonstep.png
index ce8290d86..de5894dbd 100644
--- a/src/mpc-hc/res/web/img/controlbuttonstep.png
+++ b/src/mpc-hc/res/web/img/controlbuttonstep.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/controlbuttonstop.png b/src/mpc-hc/res/web/img/controlbuttonstop.png
index 8165f50f0..611548fe8 100644
--- a/src/mpc-hc/res/web/img/controlbuttonstop.png
+++ b/src/mpc-hc/res/web/img/controlbuttonstop.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/controlvolumebar.png b/src/mpc-hc/res/web/img/controlvolumebar.png
index 06cd68299..29743b99b 100644
--- a/src/mpc-hc/res/web/img/controlvolumebar.png
+++ b/src/mpc-hc/res/web/img/controlvolumebar.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/controlvolumegrip.png b/src/mpc-hc/res/web/img/controlvolumegrip.png
index 33a3b24ab..257061a05 100644
--- a/src/mpc-hc/res/web/img/controlvolumegrip.png
+++ b/src/mpc-hc/res/web/img/controlvolumegrip.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/controlvolumeoff.png b/src/mpc-hc/res/web/img/controlvolumeoff.png
index 13603ec9d..57b61e063 100644
--- a/src/mpc-hc/res/web/img/controlvolumeoff.png
+++ b/src/mpc-hc/res/web/img/controlvolumeoff.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/headerclose.png b/src/mpc-hc/res/web/img/headerclose.png
index 7b7fc5e08..762c44788 100644
--- a/src/mpc-hc/res/web/img/headerclose.png
+++ b/src/mpc-hc/res/web/img/headerclose.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/headericon.png b/src/mpc-hc/res/web/img/headericon.png
index f0bbda661..4ee0661a8 100644
--- a/src/mpc-hc/res/web/img/headericon.png
+++ b/src/mpc-hc/res/web/img/headericon.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/leftbottomside.png b/src/mpc-hc/res/web/img/leftbottomside.png
index d3b8db4f3..7097deaa3 100644
--- a/src/mpc-hc/res/web/img/leftbottomside.png
+++ b/src/mpc-hc/res/web/img/leftbottomside.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/leftside.png b/src/mpc-hc/res/web/img/leftside.png
index ababc72f5..d46796009 100644
--- a/src/mpc-hc/res/web/img/leftside.png
+++ b/src/mpc-hc/res/web/img/leftside.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/seekbargrip.png b/src/mpc-hc/res/web/img/seekbargrip.png
index 2f096c587..6273880fa 100644
--- a/src/mpc-hc/res/web/img/seekbargrip.png
+++ b/src/mpc-hc/res/web/img/seekbargrip.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/seekbarleft.png b/src/mpc-hc/res/web/img/seekbarleft.png
index 5c07d07f4..1170ef785 100644
--- a/src/mpc-hc/res/web/img/seekbarleft.png
+++ b/src/mpc-hc/res/web/img/seekbarleft.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/seekbarright.png b/src/mpc-hc/res/web/img/seekbarright.png
index cb3445372..a37a7d1a9 100644
--- a/src/mpc-hc/res/web/img/seekbarright.png
+++ b/src/mpc-hc/res/web/img/seekbarright.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/slidergrip.png b/src/mpc-hc/res/web/img/slidergrip.png
index 10d127faa..b15dd66d4 100644
--- a/src/mpc-hc/res/web/img/slidergrip.png
+++ b/src/mpc-hc/res/web/img/slidergrip.png
Binary files differ
diff --git a/src/mpc-hc/res/web/img/vbs.png b/src/mpc-hc/res/web/img/vbs.png
index 610c50bf1..5936c78db 100644
--- a/src/mpc-hc/res/web/img/vbs.png
+++ b/src/mpc-hc/res/web/img/vbs.png
Binary files differ
diff --git a/src/mpc-hc/res/web/index.html b/src/mpc-hc/res/web/index.html
index a5aecbbd3..4cede24c5 100644
--- a/src/mpc-hc/res/web/index.html
+++ b/src/mpc-hc/res/web/index.html
@@ -6,9 +6,10 @@
<link rel="stylesheet" href="default.css">
<link rel="icon" href="favicon.ico">
</head>
- <body>
+ <body class="page-index">
<!--[if lt IE 8]>
- <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+ <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser.
+ Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<p>Demo page; submit patches if you want this page updated.</p>
<p>And if you are already here, why don't you try sending a few commands to MPC-HC, just to see if it works :)</p>
diff --git a/src/mpc-hc/res/web/info.html b/src/mpc-hc/res/web/info.html
index 5788a8abe..9818a7651 100644
--- a/src/mpc-hc/res/web/info.html
+++ b/src/mpc-hc/res/web/info.html
@@ -2,13 +2,14 @@
<html lang="en">
<head>
<meta charset="utf-8">
- <title>MPC-HC Web Server - Info</title>
+ <title>MPC-HC WebServer - Info</title>
<link rel="stylesheet" href="default.css">
<link rel="icon" href="favicon.ico">
</head>
- <body>
+ <body class="page-info">
<!--[if lt IE 8]>
- <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+ <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser.
+ Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<!-- The mpchc_np id is used by the mIRC and Python now playing snippet -->
<p id="mpchc_np">&laquo; MPC-HC v[version] &bull; [file] &bull; [position]/[duration] &bull; [size] &raquo;</p>
diff --git a/src/mpc-hc/res/web/javascript.js b/src/mpc-hc/res/web/javascript.js
index c508c4eb3..a14d7902b 100644
--- a/src/mpc-hc/res/web/javascript.js
+++ b/src/mpc-hc/res/web/javascript.js
@@ -30,7 +30,6 @@ var cpf;
var cp;
var s;
var m;
-var rpt;
var sb1;
var sb2;
var sb3;
@@ -61,7 +60,7 @@ function getOffsetX(m) {
function timeSyntax(ts) {
"use strict";
var b = "";
- for (var a = 0; a < ts.length; a++) {
+ for (var a = 0, len = ts.length; a < len; a++) {
switch (ts.charAt(a)) {
case "0":
b += "0";
@@ -167,7 +166,7 @@ function update(a, b) {
function pad(number, len) {
"use strict";
- var str = "" + number;
+ var str = String(number);
while (str.length < len) {
str = "0" + str;
}
@@ -240,7 +239,6 @@ function autoplay(a) {
}
var gg = " " + secondsToTS(cap, 5) + " ";
cp.innerHTML = gg;
- rpt = cap;
return true;
}
@@ -310,7 +308,7 @@ function controlsInit(_filePath, _curPos, _length, _state, _pbr, _eta, _volume,
}, 1000 * eta);
}
Live = len < 1;
- startTime = startTime - curPos;
+ startTime -= curPos;
rdirt = len * pbr / sliderSize;
rdirt = Math.floor(rdirt > 1000 ? 1000 : (rdirt < 300 ? 300 : rdirt));
cpf = getById("pos");
@@ -338,7 +336,6 @@ function controlsInit(_filePath, _curPos, _length, _state, _pbr, _eta, _volume,
vs1.onclick = vs2.onclick = vs3.onclick = volSliderClick;
sas.checked = true;
cp.innerHTML = cpf.value = secondsToTS(curPos, 5);
- rpt = curPos;
if (state === 2 && pbr !== 0) {
autoplay();
}
@@ -486,7 +483,7 @@ function loadSnapshot() {
"use strict";
var img = getById("snapshot");
if (img) {
- img.src = "snapshot.jpg" + "?" + snapshotCounter++;
+ img.src = "snapshot.jpg?" + snapshotCounter++;
}
}
diff --git a/src/mpc-hc/res/web/player.html b/src/mpc-hc/res/web/player.html
index 59aa35198..9126b865b 100644
--- a/src/mpc-hc/res/web/player.html
+++ b/src/mpc-hc/res/web/player.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html>
+<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
@@ -7,9 +7,10 @@
<link rel="icon" href="favicon.ico">
<script src="javascript.js"></script>
</head>
- <body onload="playerInit()">
+ <body onload="playerInit()" class="page-player">
<!--[if lt IE 8]>
- <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+ <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser.
+ Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<noscript>
<p>
@@ -49,7 +50,7 @@
</tr>
<tr>
<td id="video" onclick="onCommand(889)">
- <img src="snapshot.jpg" id="snapshot" alt="snapshot" onload="onLoadSnapshot()" onabort="onAbortErrorSnapshot()" onerror="onAbortErrorSnapshot()">
+ [preview]
</td>
</tr>
<tr>
diff --git a/src/mpc-hc/res/web/variables.html b/src/mpc-hc/res/web/variables.html
index 2c30a86c0..4f60bda96 100644
--- a/src/mpc-hc/res/web/variables.html
+++ b/src/mpc-hc/res/web/variables.html
@@ -6,10 +6,12 @@
<link rel="stylesheet" href="default.css">
<link rel="icon" href="favicon.ico">
</head>
- <body>
+ <body class="page-variables">
<!--[if lt IE 8]>
- <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+ <div class="browser-warning"><strong>Warning!</strong> You are using an <strong>outdated</strong> browser.
+ Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
+ <p id="file">[file]</p>
<p id="filepatharg">[filepatharg]</p>
<p id="filepath">[filepath]</p>
<p id="filedirarg">[filedirarg]</p>
@@ -23,7 +25,9 @@
<p id="volumelevel">[volumelevel]</p>
<p id="muted">[muted]</p>
<p id="playbackrate">[playbackrate]</p>
+ <p id="size">[size]</p>
<p id="reloadtime">[reloadtime]</p>
+ <p id="version">[version]</p>
[debug]
</body>
</html>
diff --git a/src/mpc-hc/resource.h b/src/mpc-hc/resource.h
index 11bad3bbf..b95155aa8 100644
--- a/src/mpc-hc/resource.h
+++ b/src/mpc-hc/resource.h
@@ -72,6 +72,7 @@
#define IDF_SHADER_RESIZER 700
#define IDF_SHADER_EMPTY 701
#define IDF_SHADER_FINAL 702
+#define IDF_SVG_TOOLBAR 703
#define ID_FILE_OPENMEDIA 800
#define ID_FILE_OPENDVDBD 801
#define ID_FILE_OPENDEVICE 802
@@ -81,11 +82,10 @@
#define ID_FILE_SAVE_IMAGE 806
#define ID_FILE_SAVE_IMAGE_AUTO 807
#define ID_FILE_SAVE_THUMBNAILS 808
-#define ID_FILE_LOAD_SUBTITLE 809
-#define ID_FILE_SAVE_SUBTITLE 810
-#define ID_FILE_ISDB_UPLOAD 811
-#define ID_FILE_ISDB_DOWNLOAD 812
-#define ID_FILE_ISDB_SEARCH 813
+#define ID_FILE_SUBTITLES_LOAD 809
+#define ID_FILE_SUBTITLES_SAVE 810
+#define ID_FILE_SUBTITLES_UPLOAD 811
+#define ID_FILE_SUBTITLES_DOWNLOAD 812
#define ID_FILE_PROPERTIES 814
#define ID_VIEW_OPTIONS 815
#define ID_FILE_EXIT 816
@@ -116,20 +116,20 @@
#define ID_VIEW_VF_ZOOM1 841
#define ID_VIEW_VF_ZOOM2 842
#define ID_VIEW_VF_SWITCHZOOM 843
-#define ID_VIEW_VF_KEEPASPECTRATIO 844
#define ID_VIEW_VF_COMPMONDESKARDIFF 845
#define ID_VIEW_EDITLISTEDITOR 846
#define ID_EDL_IN 847
#define ID_EDL_OUT 848
#define ID_EDL_NEWCLIP 849
#define ID_ASPECTRATIO_START 850
-#define ID_ASPECTRATIO_SOURCE 850
+#define ID_ASPECTRATIO_DAR 850
#define ID_ASPECTRATIO_4_3 851
#define ID_ASPECTRATIO_5_4 852
#define ID_ASPECTRATIO_16_9 853
#define ID_ASPECTRATIO_235_100 854
#define ID_ASPECTRATIO_185_100 855
-#define ID_ASPECTRATIO_END 858
+#define ID_ASPECTRATIO_SAR 856
+#define ID_ASPECTRATIO_END 856
#define ID_ASPECTRATIO_NEXT 859
#define ID_EDL_SAVE 860
#define ID_VIEW_RESET 861
@@ -181,9 +181,9 @@
#define ID_VOLUME_UP 907
#define ID_VOLUME_DOWN 908
#define ID_VOLUME_MUTE 909
-#define ID_VOLUME_MUTE_ON 910
+#define ID_VOLUME_MUTE_OFF 910
#define ID_VOLUME_MUTE_DISABLED 911
-#define ID_AFTERPLAYBACK_CLOSE 912
+#define ID_AFTERPLAYBACK_EXIT 912
#define ID_AFTERPLAYBACK_STANDBY 913
#define ID_AFTERPLAYBACK_HIBERNATE 914
#define ID_AFTERPLAYBACK_SHUTDOWN 915
@@ -218,6 +218,8 @@
#define ID_BOSS 944
#define ID_DUMMYSEPARATOR 945
#define ID_BUTTONSEP 946
+#define ID_AFTERPLAYBACK_PLAYNEXT 947
+#define ID_AFTERPLAYBACK_DONOTHING 948
#define ID_MENU_PLAYER_SHORT 949
#define ID_MENU_PLAYER_LONG 950
#define ID_MENU_FILTERS 951
@@ -226,10 +228,6 @@
#define ID_STREAM_SUB_NEXT 954
#define ID_STREAM_SUB_PREV 955
#define ID_STREAM_SUB_ONOFF 956
-#define ID_OGM_AUDIO_NEXT 957
-#define ID_OGM_AUDIO_PREV 958
-#define ID_OGM_SUB_NEXT 959
-#define ID_OGM_SUB_PREV 960
#define ID_DVD_ANGLE_NEXT 961
#define ID_DVD_ANGLE_PREV 962
#define ID_DVD_AUDIO_NEXT 963
@@ -288,18 +286,14 @@
#define ID_SHADERS_PRESETS_START 4201
#define ID_SHADERS_PRESETS_END 4299
#define ID_NAVIGATE_JUMPTO_SUBITEM_START 4300
-#define ID_NAVIGATE_JUMPTO_SUBITEM_END 4499
-#define ID_VIEW_ZOOM_AUTOFIT_LARGER 4500
-// filters
+#define ID_NAVIGATE_JUMPTO_SUBITEM_END 4899
+#define ID_VIEW_ZOOM_AUTOFIT_LARGER 4900
#define IDS_FILTER_SETTINGS_CAPTION 7000
-#define IDS_ARS_WASAPI_MODE 7100
-#define IDS_ARS_MUTE_FAST_FORWARD 7101
-#define IDS_ARS_SOUND_DEVICE 7102
-//
#define IDD_OPEN_DLG 10000
#define IDD_MEDIATYPES_DLG 10002
#define IDD_SAVE_DLG 10004
#define IDD_SUBTITLEDL_DLG 10005
+#define IDD_SUBTITLEUP_DLG 10006
#define IDD_FILEPROPDETAILS 10010
#define IDD_FILEPROPCLIP 10011
#define IDD_PNSPRESET_DLG 10015
@@ -325,7 +319,6 @@
#define IDD_PPAGELOGO 10037
#define IDD_PPAGEOUTPUT 10039
#define IDD_PPAGEWEBSERVER 10040
-#define IDD_PPAGESUBDB 10042
#define IDD_SAVETEXTFILEDIALOGTEMPL 10043
#define IDD_SAVESUBTITLESFILEDIALOGTEMPL 10044
#define IDD_CAPTURE_DLG 10045
@@ -340,6 +333,7 @@
#define IDD_PPAGESYNC 10055
#define IDD_PPAGEFULLSCREEN 10056
#define IDD_RFS_FILELIST_EXT 10057
+#define IDD_PPAGEAUDIORENDERER 10058
#define IDC_COMBO1 11000
#define IDC_COMBO2 11001
#define IDC_COMBO3 11002
@@ -469,9 +463,7 @@
#define IDC_DSSYSDEF 12100
#define IDC_DSOLD 12101
#define IDC_DSOVERLAYMIXER 12102
-#define IDC_DSVMR7WIN 12103
#define IDC_DSVMR9WIN 12104
-#define IDC_DSVMR7REN 12105
#define IDC_DSVMR9REN 12106
#define IDC_DSDXR 12107
#define IDC_DSNULL_COMP 12108
@@ -481,10 +473,8 @@
#define IDC_DSMADVR 12112
#define IDC_DSSYNC 12113
#define IDC_RMSYSDEF 12120
-#define IDC_RMDX7 12121
#define IDC_RMDX9 12122
#define IDC_QTSYSDEF 12123
-#define IDC_QTDX7 12124
#define IDC_QTDX9 12125
#define IDC_REGULARSURF 12127
#define IDC_TEXTURESURF2D 12128
@@ -560,7 +550,9 @@
#define IDS_AUTOPLAY_PLAYAUDIOCD 14184
#define IDS_AUTOPLAY_PLAYDVDMOVIE 14185
#define IDS_PROPSHEET_PROPERTIES 14186
+#define IDS_PLAY_LOOPMODE_FILE 14187
#define IDS_SUBTITLES_DEFAULT_STYLE 14188
+#define IDS_PLAY_LOOPMODE_PLAYLIST 14189
#define IDS_FAVFILES 14190
#define IDS_FAVDVDS 14191
#define IDS_INFOBAR_CHANNEL 14192
@@ -574,8 +566,14 @@
#define IDS_STATSBAR_SIGNAL_FORMAT 14200
#define IDS_SUBTITLES_STYLES_CAPTION 14201
#define IDS_TEXT_SUB_RENDERING_TARGET 14202
+#define IDS_PLAYLOOPMODE_PLAYLIST 14203
+#define IDS_PLAYLOOPMODE_FILE 14204
+#define IDS_PLAYLOOP_FOREVER_ON 14205
+#define IDS_PLAYLOOP_FOREVER_OFF 14206
+#define IDS_PLAYLOOP_FOREVER 14207
#define IDD_TUNER_SCAN 20002
-#define IDS_AG_RESET_STATS 20004
+#define IDS_OSD_DISPLAY_RENDERER_STATS 20003
+#define IDS_OSD_RESET_RENDERER_STATS 20004
#define IDD_NAVIGATION_DLG 20005
#define IDD_PPAGESUBMISC 20006
#define IDS_VIEW_BORDERLESS 20007
@@ -588,6 +586,13 @@
#define IDD_PPAGEADVANCED 20014
#define IDD_SAVEIMAGEDIALOGTEMPL 20015
#define IDD_CMD_LINE_HELP 20016
+#define IDD_CRASH_REPORTER 20017
+#define IDI_OPENSUBTITLES 21001
+#define IDI_PODNAPISI 21002
+#define IDI_SUBDB 21003
+#define IDI_TITLOVI 21004
+#define IDI_YSUBS 21005
+#define IDI_N24 21006
#define IDC_FULLSCREEN_MONITOR_CHECK 22002
#define IDC_SLI_CONTRAST 22003
#define IDC_RESET 22004
@@ -683,13 +688,15 @@
#define ID_VIEW_TEARING_TEST 32769
#define ID_FILE_OPENDISC 32774
#define ID_SHADERS 32775
-#define ID_VIEW_REMAINING_TIME 32778
+#define ID_VIEW_OSD_SHOW_FILENAME 32777
+#define ID_VIEW_OSD_DISPLAY_TIME 32778
#define ID_D3DFULLSCREEN_TOGGLE 32779
#define ID_GOTO_PREV_SUB 32780
#define ID_GOTO_NEXT_SUB 32781
#define ID_SHIFT_SUB_DOWN 32782
#define ID_SHIFT_SUB_UP 32783
-#define ID_VIEW_DISPLAYSTATS 32784
+#define ID_VIEW_DISPLAY_RENDERER_STATS 32784
+#define ID_VIEW_RESET_RENDERER_STATS 32785
#define IDS_AG_CLOSE 32830
#define IDS_AG_NONE 32832
#define IDS_AG_COMMAND 32833
@@ -709,8 +716,8 @@
#define IDS_AG_SAVE_IMAGE 32882
#define IDS_MPLAYERC_6 32883
#define IDS_OSD_IMAGE_SAVED 32884
-#define IDS_AG_LOAD_SUBTITLE 32885
-#define IDS_AG_SAVE_SUBTITLE 32886
+#define IDS_AG_LOAD_SUBTITLES 32885
+#define IDS_AG_SAVE_SUBTITLES 32886
#define IDS_AG_PROPERTIES 32887
#define IDS_AG_EXIT 32888
#define IDS_AG_PLAYPAUSE 32889
@@ -788,10 +795,6 @@
#define IDS_AG_PREV_SUBTITLE 32961
#define IDS_MPLAYERC_85 32962
#define IDS_MPLAYERC_86 32963
-#define IDS_MPLAYERC_87 32964
-#define IDS_MPLAYERC_88 32965
-#define IDS_MPLAYERC_89 32966
-#define IDS_MPLAYERC_90 32967
#define IDS_MPLAYERC_91 32968
#define IDS_MPLAYERC_92 32969
#define IDS_MPLAYERC_93 32970
@@ -799,14 +802,16 @@
#define IDS_MPLAYERC_95 32972
#define IDS_MPLAYERC_96 32973
#define IDS_MPLAYERC_97 32974
-#define IDS_MPLAYERC_98 32975
+#define IDS_OSD_DISPLAY_CURRENT_TIME 32975
#define IDS_MPLAYERC_99 32976
#define IDS_MPLAYERC_100 32977
#define IDS_MPLAYERC_101 32978
#define IDS_MPLAYERC_102 32979
#define IDS_MPLAYERC_103 32980
-#define IDS_AG_DISPLAY_STATS 32981
#define IDS_AG_SEEKSET 32982
+#define IDS_OSD_SHOW_FILENAME 32983
+#define IDS_PLAY_DVD 32984
+#define IDS_PLAY_BD 32985
#define IDS_PPAGEWEBSERVER_0 32996
#define IDS_MAINFRM_2 33014
#define IDS_AG_SUBTITLES_SAVED 33015
@@ -915,16 +920,11 @@
#define IDS_THUMB_ROWNUMBER 33195
#define IDS_THUMB_COLNUMBER 33196
#define IDS_THUMB_IMAGE_WIDTH 33197
-#define IDS_PPSDB_URLCORRECT 33198
-#define IDS_PPSDB_PROTOCOLERR 33199
-#define IDS_PPSDB_BADURL 33200
#define IDS_AG_CHAPTER2 33201
#define IDS_VOLUME_OSD 33202
#define IDS_BOOST_OSD 33203
#define IDS_BALANCE_OSD 33204
#define IDS_FULLSCREENMONITOR_CURRENT 33205
-#define IDS_MPC_CRASH 33206
-#define IDS_MPC_MINIDUMP_FAIL 33207
#define ID_FILE_OPENDIRECTORY 33208
#define IDS_MAINFRM_DIR_TITLE 33209
#define IDS_MAINFRM_DIR_CHECK 33210
@@ -994,8 +994,8 @@
#define IDC_RESETDEVICE 33400
#define IDS_NAVIGATE_TUNERSCAN 33401
#define IDS_SUBTITLES_ERROR 33402
-#define IDC_CHECK_WIN7 33403
-#define ID_VIEW_RESETSTATS 33405
+#define IDC_CHECK_ENHANCED_TASKBAR 33403
+#define IDC_CACHESHADERS 33404
#define ID_VIEW_SYNCHRONIZEVIDEO 33408
#define ID_VIEW_SYNCHRONIZEDISPLAY 33409
#define ID_VIEW_SYNCHRONIZENEAREST 33410
@@ -1025,6 +1025,9 @@
#define IDS_THUMB_THUMBNAILS 33446
#define IDS_THUMB_PIXELS 33447
#define IDS_TEXTFILE_ENC 33448
+#define ID_PLAY_REPEAT_FOREVER 33449
+#define ID_PLAY_REPEAT_ONEFILE 33450
+#define ID_PLAY_REPEAT_WHOLEPLAYLIST 33451
#define IDS_MFMT_AVI 39001
#define IDS_MFMT_MPEG 39002
#define IDS_MFMT_MPEGTS 39003
@@ -1070,6 +1073,7 @@
#define IDS_MFMT_WMA 39521
#define IDS_MFMT_WV 39522
#define IDS_MFMT_OPUS 39523
+#define IDS_MFMT_DTS 39524
#define IDS_MFMT_PLS 39901
#define IDS_MFMT_BDPLS 39902
#define IDS_MFMT_RAR 39903
@@ -1109,8 +1113,8 @@
#define IDS_DVB_CHANNEL_NAME 41110
#define IDS_DVB_CHANNEL_FREQUENCY 41111
#define IDS_DVB_CHANNEL_ENCRYPTION 41112
-#define IDS_DVB_CHANNEL_ENCRYPTED 41113
-#define IDS_DVB_CHANNEL_NOT_ENCRYPTED 41114
+#define IDS_YES 41113
+#define IDS_NO 41114
#define IDS_DVB_CHANNEL_START_SCAN 41115
#define IDS_DVB_CHANNEL_STOP_SCAN 41116
#define IDS_DVB_TVNAV_SEERADIO 41117
@@ -1215,13 +1219,15 @@
#define IDS_SUBRESYNC_TIME_FORMAT 41293
#define IDS_EXTERNAL_FILTERS_ERROR_MT 41294
#define IDS_WEBSERVER_ERROR_TEST 41295
-#define IDS_AFTERPLAYBACK_CLOSE 41296
+#define IDS_AFTERPLAYBACK_EXIT 41296
#define IDS_AFTERPLAYBACK_STANDBY 41297
#define IDS_AFTERPLAYBACK_HIBERNATE 41298
#define IDS_AFTERPLAYBACK_SHUTDOWN 41299
#define IDS_AFTERPLAYBACK_LOGOFF 41300
#define IDS_AFTERPLAYBACK_LOCK 41301
#define IDS_AFTERPLAYBACK_MONITOROFF 41302
+#define IDS_AFTERPLAYBACK_PLAYNEXT 41303
+#define IDS_AFTERPLAYBACK_DONOTHING 41304
#define IDS_OSD_BRIGHTNESS 41305
#define IDS_OSD_CONTRAST 41306
#define IDS_OSD_HUE 41307
@@ -1254,6 +1260,7 @@
#define IDS_REGAIN_VOLUME 41335
#define IDS_OSD_REGAIN_VOLUME_ON 41336
#define IDS_OSD_REGAIN_VOLUME_OFF 41337
+#define IDS_SIZE_UNIT_BYTES 41338
#define IDS_SIZE_UNIT_K 41339
#define IDS_SIZE_UNIT_M 41340
#define IDS_SIZE_UNIT_G 41341
@@ -1327,9 +1334,7 @@
#define IDS_ICONS_REASSOC_DLG_CONTENT 41411
#define IDS_PPAGE_OUTPUT_OLDRENDERER 41412
#define IDS_PPAGE_OUTPUT_OVERLAYMIXER 41413
-#define IDS_PPAGE_OUTPUT_VMR7WINDOWED 41414
#define IDS_PPAGE_OUTPUT_VMR9WINDOWED 41415
-#define IDS_PPAGE_OUTPUT_VMR7RENDERLESS 41416
#define IDS_PPAGE_OUTPUT_VMR9RENDERLESS 41417
#define IDS_PPAGE_OUTPUT_EVR 41418
#define IDS_PPAGE_OUTPUT_EVR_CUSTOM 41419
@@ -1338,8 +1343,6 @@
#define IDS_PPAGE_OUTPUT_NULL_UNCOMP 41422
#define IDS_PPAGE_OUTPUT_MADVR 41423
#define IDS_PPAGE_OUTPUT_SYNC 41424
-#define IDS_MPC_BUG_REPORT_TITLE 41425
-#define IDS_MPC_BUG_REPORT 41426
#define IDS_PPAGE_OUTPUT_SURF_OFFSCREEN 41427
#define IDS_PPAGE_OUTPUT_SURF_2D 41428
#define IDS_PPAGE_OUTPUT_SURF_3D 41429
@@ -1353,11 +1356,12 @@
#define IDS_PPAGE_OUTPUT_UNAVAILABLEMSG 41437
#define IDS_PPAGE_OUTPUT_AUD_NULL_COMP 41438
#define IDS_PPAGE_OUTPUT_AUD_NULL_UNCOMP 41439
-#define IDS_PPAGE_OUTPUT_AUD_MPC_HC_REND 41440
+#define IDS_PPAGE_OUTPUT_AUD_INTERNAL_REND 41440
#define IDS_EMB_RESOURCES_VIEWER_NAME 41441
#define IDS_EMB_RESOURCES_VIEWER_TYPE 41442
#define IDS_EMB_RESOURCES_VIEWER_INFO 41443
-#define IDS_DOWNLOAD_SUBS 41444
+#define IDS_SUBTITLES_DOWNLOAD 41444
+#define IDS_SUBTITLES_UPLOAD 41445
#define IDS_SUBFILE_DELAY 41448
#define IDS_SPEEDSTEP_AUTO 41449
#define IDS_EXPORT_SETTINGS_NO_KEYS 41450
@@ -1452,14 +1456,129 @@
#define IDS_PPAGEADVANCED_COVER_SIZE_LIMIT 57418
#define IDS_SUBTITLE_DELAY_STEP_TOOLTIP 57419
#define IDS_HOTKEY_NOT_DEFINED 57420
+#define IDS_NAVIGATION_WATCH 57421
+#define IDS_NAVIGATION_MOVE_UP 57422
+#define IDS_NAVIGATION_MOVE_DOWN 57423
+#define IDS_NAVIGATION_SORT 57424
+#define IDS_NAVIGATION_REMOVE_ALL 57425
+#define IDS_REMOVE_CHANNELS_QUESTION 57426
+#define IDS_MEDIAINFO_NO_INFO_AVAILABLE 57427
+#define IDS_MEDIAINFO_ANALYSIS_IN_PROGRESS 57428
+#define IDS_ASPECT_RATIO_FMT 57429
+#define IDS_PPAGEADVANCED_LOGGER 57430
+#define IDS_TIMER_REMAINING_TIME 57431
+#define IDS_TIMER_HIGH_PRECISION 57432
+#define IDS_AFTERPLAYBACK_REWIND 57433
+#define IDS_AFTERPLAYBACK_CLOSE 57434
+#define IDS_FRAME_INIT_FAILED 57435
+#define IDS_TIME_SHIFT_TOOLTIP 57436
+#define IDS_WEBUI_DISABLED_PREVIEW_MSG 57437
+#define IDS_WEBUI_PREVIEW_WARNING 57438
+#define IDS_SUBTITLE_RENDERER_INTERNAL 57439
+#define IDS_SUBTITLE_RENDERER_VS_FILTER 57440
+#define IDS_SUBTITLE_RENDERER_XY_SUB_FILTER 57441
+#define IDS_SUBDL_DLG_PROVIDER_COL 57442
+#define IDS_SUBDL_DLG_HI_COL 57443
+#define IDS_SUBDL_DLG_DOWNLOADS_COL 57444
+#define IDS_SUBDL_DLG_SCORE_COL 57445
+#define IDS_SUBDL_DLG_FAILED 57446
+#define IDS_SUBDL_DLG_ABORTED 57447
+#define IDS_SUBDL_DLG_FOUND 57448
+#define IDS_SUBDL_DLG_NOTFOUND 57449
+#define IDS_SUBDL_DLG_TITLE 57450
+#define IDS_SUBDL_DLG_SEARCHING 57451
+#define IDS_SUBDL_DLG_ABORTING 57452
+#define IDS_SUBUL_DLG_USERNAME_COL 57453
+#define IDS_SUBUL_DLG_STATUS_COL 57454
+#define IDS_SUBUL_DLG_STATUS_READY 57455
+#define IDS_SUBUL_DLG_STATUS_NOTIMPLEMENTED 57456
+#define IDS_SUBUL_DLG_STATUS_UPLOADING 57457
+#define IDS_SUBUL_DLG_STATUS_UPLOADED 57458
+#define IDS_SUBUL_DLG_STATUS_FAILED 57459
+#define IDS_SUBUL_DLG_STATUS_ABORTED 57460
+#define IDS_SUBUL_DLG_STATUS_ALREADYEXISTS 57461
+#define IDS_SUBUL_DLG_UPLOADING 57462
+#define IDS_SUBUL_DLG_UPLOADED 57463
+#define IDS_SUBUL_DLG_ABORTED 57464
+#define IDS_SUBUL_DLG_FAILED 57465
+#define IDS_SUBMENU_DOWNLOAD 57466
+#define IDS_SUBMENU_SETUP 57467
+#define IDS_SUBMENU_RESET 57468
+#define IDS_SUBMENU_MOVEUP 57469
+#define IDS_SUBMENU_MOVEDOWN 57470
+#define IDS_SUBMENU_OPENURL 57471
+#define IDS_SUBPP_DLG_LANGUAGES_COL 57472
+#define IDS_SUBPP_DLG_LANGUAGES_ERROR 57473
+#define IDS_SUB_CREDENTIALS_TITLE 57474
+#define IDS_SUB_CREDENTIALS_MSG 57475
+#define IDS_ASPECT_RATIO_SAR 57476
+#define IDS_SUBDL_DLG_DOWNLOADED 57477
+#define IDS_SUBUL_DLG_TITLE 57478
+#define IDS_SUBUL_DLG_CONFIRM 57479
+#define IDS_SUBPP_DLG_FETCHING_LANGUAGES 57480
+#define IDS_SUB_CREDENTIALS_ERROR 57481
+#define IDS_SUB_AUTODL_IGNORE_TOOLTIP 57482
+#define IDS_CMD_PATHNAME 57483
+#define IDS_CMD_DUB 57484
+#define IDS_CMD_DUBDELAY 57485
+#define IDS_CMD_D3DFS 57486
+#define IDS_CMD_SUB 57487
+#define IDS_CMD_FILTER 57488
+#define IDS_CMD_DVD 57489
+#define IDS_CMD_DVDPOS_TC 57490
+#define IDS_CMD_DVDPOS_TIME 57491
+#define IDS_CMD_CD 57492
+#define IDS_CMD_DEVICE 57493
+#define IDS_CMD_OPEN 57494
+#define IDS_CMD_PLAY 57495
+#define IDS_CMD_CLOSE 57496
+#define IDS_CMD_SHUTDOWN 57497
+#define IDS_CMD_STANDBY 57498
+#define IDS_CMD_HIBERNATE 57499
+#define IDS_CMD_LOGOFF 57500
+#define IDS_CMD_LOCK 57501
+#define IDS_CMD_MONITOROFF 57502
+#define IDS_CMD_PLAYNEXT 57503
+#define IDS_CMD_FULLSCREEN 57504
+#define IDS_CMD_MINIMIZED 57505
+#define IDS_CMD_NEW 57506
+#define IDS_CMD_ADD 57507
+#define IDS_CMD_RANDOMIZE 57508
+#define IDS_CMD_REGVID 57509
+#define IDS_CMD_REGAUD 57510
+#define IDS_CMD_REGPL 57511
+#define IDS_CMD_REGALL 57512
+#define IDS_CMD_UNREGALL 57513
+#define IDS_CMD_START 57514
+#define IDS_CMD_STARTPOS 57515
+#define IDS_CMD_FIXEDSIZE 57516
+#define IDS_CMD_MONITOR 57517
+#define IDS_CMD_AUDIORENDERER 57518
+#define IDS_CMD_SHADERPRESET 57519
+#define IDS_CMD_PNS 57520
+#define IDS_CMD_ICONASSOC 57521
+#define IDS_CMD_NOFOCUS 57522
+#define IDS_CMD_WEBPORT 57523
+#define IDS_CMD_DEBUG 57524
+#define IDS_CMD_NOCRASHREPORTER 57525
+#define IDS_CMD_SLAVE 57526
+#define IDS_CMD_HWGPU 57527
+#define IDS_CMD_RESET 57528
+#define IDS_CMD_HELP 57529
+#define IDS_PPAGEADVANCED_SCORE 57530
+#define IDS_PPAGE_FS_CLN_AUDIO_DELAY 57531
+#define IDS_PPAGEADVANCED_DEFAULTTOOLBARSIZE 57532
+#define IDS_PPAGEADVANCED_USE_LEGACY_TOOLBAR 57533
+#define IDS_SUBTITLE_RENDERER_ASS_FILTER 57534
+#define IDS_SUBMENU_COPYURL 57535
// Next default values for new objects
-//
+//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 20017
-#define _APS_NEXT_COMMAND_VALUE 33449
-#define _APS_NEXT_CONTROL_VALUE 22081
+#define _APS_NEXT_RESOURCE_VALUE 20018
+#define _APS_NEXT_COMMAND_VALUE 33452
+#define _APS_NEXT_CONTROL_VALUE 22086
#define _APS_NEXT_SYMED_VALUE 24044
#endif
#endif
diff --git a/src/mpc-hc/stdafx.h b/src/mpc-hc/stdafx.h
index df314e945..8f55ddd8c 100644
--- a/src/mpc-hc/stdafx.h
+++ b/src/mpc-hc/stdafx.h
@@ -21,11 +21,7 @@
#pragma once
-#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
-
-#ifndef STRICT_TYPED_ITEMIDS
-#define STRICT_TYPED_ITEMIDS
-#endif
+#include <SharedInclude.h>
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
@@ -36,19 +32,16 @@
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxdlgs.h>
-
-#include "SharedInclude.h"
-#include "mpc-hc_config.h"
-#include "DSUtil.h"
-
#include <algorithm>
#include <cmath>
#include <functional>
+#include <future>
#include <map>
-#include <set>
-#include <vector>
#include <memory>
+#include <regex>
+#include <set>
#include <utility>
+#include <vector>
// Workaround compilation errors when including GDI+ with NOMINMAX defined
namespace Gdiplus
@@ -58,38 +51,25 @@ namespace Gdiplus
};
#include <afxole.h>
+#include <afxinet.h>
#include <atlcoll.h>
#include <atlconv.h>
#include <atlimage.h>
#include <atlpath.h>
#include <atlsync.h>
+#include <atlutil.h>
#include <comdef.h>
#include <commdlg.h>
-#include <dlgs.h>
-#include <ks.h>
-#include <ksmedia.h>
-#include <mpconfig.h>
-#include <psapi.h>
-#include <shlobj.h>
-
#include <d3d9.h>
-#include <d3dx9.h>
-#include <dxva2api.h>
-#include <dvdevcod.h>
-#include <dsound.h>
-#include <evr.h>
#include <evr9.h>
#include <vmr9.h>
-#include <Il21dec.h>
-
#include "sizecbar/scbarg.h"
#include "ResizableLib/ResizableDialog.h"
+#include "BaseClasses/streams.h"
-#include "../Subtitles/RTS.h"
-#include "../Subtitles/STS.h"
-#include "../Subtitles/RLECodedSubtitle.h"
+#include "LcdSupport.h"
template <class T = CString, class S = CString>
class CAtlStringMap : public CAtlMap<S, T, CStringElementTraits<S>> {};
@@ -98,6 +78,6 @@ class CAtlStringMap : public CAtlMap<S, T, CStringElementTraits<S>> {};
#define CheckNoLog(x) hr = ##x; if (FAILED(hr)) { return hr; }
#define CheckNoLogBool(x) if (FAILED(x)) { return false; }
+#include "DSUtil.h"
+#include "mpc-hc_config.h"
#include "resource.h"
-#include "FakeFilterMapper2.h"
-#include "AppSettings.h"
diff --git a/src/platform.props b/src/platform.props
index 16b9dc9bd..48a049b28 100644
--- a/src/platform.props
+++ b/src/platform.props
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
- <PlatformToolset Condition="'$(ANALYZE)'!='true'">v120_xp</PlatformToolset>
- <PlatformToolset Condition="'$(ANALYZE)'=='true'">v120</PlatformToolset>
+ <PlatformToolset Condition="'$(ANALYZE)'!='true'">v140_xp</PlatformToolset>
+ <PlatformToolset Condition="'$(ANALYZE)'=='true'">v140</PlatformToolset>
</PropertyGroup>
</Project>
diff --git a/src/thirdparty/AsyncReader/AsyncReader.vcxproj b/src/thirdparty/AsyncReader/AsyncReader.vcxproj
index 537a59369..4451075cc 100644
--- a/src/thirdparty/AsyncReader/AsyncReader.vcxproj
+++ b/src/thirdparty/AsyncReader/AsyncReader.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,70 +26,23 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/src/thirdparty/AsyncReader/AsyncReader.vcxproj.filters b/src/thirdparty/AsyncReader/AsyncReader.vcxproj.filters
index 3c5084604..1d92fb5a7 100644
--- a/src/thirdparty/AsyncReader/AsyncReader.vcxproj.filters
+++ b/src/thirdparty/AsyncReader/AsyncReader.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{fa80e2e7-af1c-4fe8-8023-725cf9d0c9e8}</UniqueIdentifier>
diff --git a/src/thirdparty/AsyncReader/asyncio.cpp b/src/thirdparty/AsyncReader/asyncio.cpp
index 3cb264cc0..ada6e4815 100644
--- a/src/thirdparty/AsyncReader/asyncio.cpp
+++ b/src/thirdparty/AsyncReader/asyncio.cpp
@@ -96,16 +96,16 @@ CAsyncRequest::Complete()
// note - all events created manual reset
CAsyncIo::CAsyncIo(CAsyncStream *pStream)
- : m_hThread(NULL),
- m_evWork(TRUE),
- m_evDone(TRUE),
- m_evStop(TRUE),
+ : m_pStream(pStream),
+ m_bFlushing(FALSE),
m_listWork(NAME("Work list")),
m_listDone(NAME("Done list")),
- m_bFlushing(FALSE),
+ m_evWork(TRUE),
+ m_evDone(TRUE),
m_cItemsOut(0),
m_bWaiting(FALSE),
- m_pStream(pStream)
+ m_evStop(TRUE),
+ m_hThread(NULL)
{
}
diff --git a/src/thirdparty/AsyncReader/asyncrdr.cpp b/src/thirdparty/AsyncReader/asyncrdr.cpp
index f6ef5d846..ab7a9ec31 100644
--- a/src/thirdparty/AsyncReader/asyncrdr.cpp
+++ b/src/thirdparty/AsyncReader/asyncrdr.cpp
@@ -401,12 +401,13 @@ CAsyncReader::CAsyncReader(
clsid, // MPC-HC patch
NULL
),
+ m_Io(pStream),
m_OutputPin(
phr,
this,
&m_Io,
- &m_csFilter),
- m_Io(pStream)
+ &m_csFilter)
+
{
}
diff --git a/src/thirdparty/BaseClasses/BaseClasses.vcxproj b/src/thirdparty/BaseClasses/BaseClasses.vcxproj
index eaba9edce..08b173e65 100644
--- a/src/thirdparty/BaseClasses/BaseClasses.vcxproj
+++ b/src/thirdparty/BaseClasses/BaseClasses.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,60 +34,16 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeaderFile>streams.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>strmiids.lib;Winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeaderFile>streams.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>strmiids.lib;Winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeaderFile>streams.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>strmiids.lib;Winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>streams.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
<Lib>
<AdditionalDependencies>strmiids.lib;Winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/src/thirdparty/BaseClasses/BaseClasses.vcxproj.filters b/src/thirdparty/BaseClasses/BaseClasses.vcxproj.filters
index 97711ea9e..604be0718 100644
--- a/src/thirdparty/BaseClasses/BaseClasses.vcxproj.filters
+++ b/src/thirdparty/BaseClasses/BaseClasses.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
diff --git a/src/thirdparty/BaseClasses/amfilter.cpp b/src/thirdparty/BaseClasses/amfilter.cpp
index 02407c4d2..072041c7a 100644
--- a/src/thirdparty/BaseClasses/amfilter.cpp
+++ b/src/thirdparty/BaseClasses/amfilter.cpp
@@ -3269,7 +3269,12 @@ CMediaSample::CMediaSample(__in_opt LPCTSTR pName,
m_cRef(0), // 0 ref count
m_dwTypeSpecificFlags(0), // Type specific flags
m_dwStreamId(AM_STREAM_MEDIA), // Stream id
- m_pAllocator(pAllocator) // Allocator
+ m_pAllocator(pAllocator), // Allocator
+ m_pNext(NULL),
+ m_Start(0),
+ m_End(0),
+ m_MediaStart(0),
+ m_MediaEnd(0)
{
#ifdef DXMPERF
PERFLOG_CTOR( pName ? pName : L"CMediaSample", (IMediaSample *) this );
@@ -3300,7 +3305,12 @@ CMediaSample::CMediaSample(__in_opt LPCSTR pName,
m_cRef(0), // 0 ref count
m_dwTypeSpecificFlags(0), // Type specific flags
m_dwStreamId(AM_STREAM_MEDIA), // Stream id
- m_pAllocator(pAllocator) // Allocator
+ m_pAllocator(pAllocator), // Allocator
+ m_pNext(NULL),
+ m_Start(0),
+ m_End(0),
+ m_MediaStart(0),
+ m_MediaEnd(0)
{
#ifdef DXMPERF
PERFLOG_CTOR( L"CMediaSample", (IMediaSample *) this );
diff --git a/src/thirdparty/BaseClasses/ctlutil.cpp b/src/thirdparty/BaseClasses/ctlutil.cpp
index 793f97ace..04870767d 100644
--- a/src/thirdparty/BaseClasses/ctlutil.cpp
+++ b/src/thirdparty/BaseClasses/ctlutil.cpp
@@ -1914,7 +1914,8 @@ CDeferredCommand::CDeferredCommand(
m_DispParams(nArgs, pDispParams, phr),
m_pvarResult(pvarResult),
m_bStream(bStream),
- m_hrResult(E_ABORT)
+ m_hrResult(E_ABORT),
+ m_DispId(0)
{
// convert REFTIME to REFERENCE_TIME
diff --git a/src/thirdparty/BaseClasses/pullpin.cpp b/src/thirdparty/BaseClasses/pullpin.cpp
index 6cdc39c2c..c979270c9 100644
--- a/src/thirdparty/BaseClasses/pullpin.cpp
+++ b/src/thirdparty/BaseClasses/pullpin.cpp
@@ -19,7 +19,11 @@
CPullPin::CPullPin()
: m_pReader(NULL),
m_pAlloc(NULL),
- m_State(TM_Exit)
+ m_State(TM_Exit),
+ m_tStart(0),
+ m_tStop(0),
+ m_tDuration(0),
+ m_bSync(FALSE)
{
#ifdef DXMPERF
PERFLOG_CTOR( L"CPullPin", this );
diff --git a/src/thirdparty/BaseClasses/refclock.cpp b/src/thirdparty/BaseClasses/refclock.cpp
index 57bd63d60..993204e11 100644
--- a/src/thirdparty/BaseClasses/refclock.cpp
+++ b/src/thirdparty/BaseClasses/refclock.cpp
@@ -59,7 +59,7 @@ CBaseReferenceClock::~CBaseReferenceClock()
TriggerThread();
WaitForSingleObject( m_hThread, INFINITE );
EXECUTE_ASSERT( CloseHandle(m_hThread) );
- m_hThread = 0;
+ m_hThread = NULL;
EXECUTE_ASSERT( CloseHandle(m_pSchedule->GetEvent()) );
delete m_pSchedule;
}
@@ -77,7 +77,8 @@ CBaseReferenceClock::CBaseReferenceClock( __in_opt LPCTSTR pName,
, m_TimerResolution(0)
, m_bAbort( FALSE )
, m_pSchedule( pShed ? pShed : new CAMSchedule(CreateEvent(NULL, FALSE, FALSE, NULL)) )
-, m_hThread(0)
+, m_hThread(NULL)
+, m_rtNextAdvise(0)
{
#ifdef DXMPERF
diff --git a/src/thirdparty/BaseClasses/schedule.h b/src/thirdparty/BaseClasses/schedule.h
index 058d76442..c35e0098b 100644
--- a/src/thirdparty/BaseClasses/schedule.h
+++ b/src/thirdparty/BaseClasses/schedule.h
@@ -41,6 +41,12 @@ private:
{
public:
CAdvisePacket()
+ : m_next(NULL)
+ , m_rtEventTime(0)
+ , m_dwAdviseCookie(0)
+ , m_rtPeriod(0)
+ , m_hNotify(NULL)
+ , m_bPeriodic(FALSE)
{}
CAdvisePacket * m_next;
@@ -50,7 +56,13 @@ private:
HANDLE m_hNotify; // Handle to event or semephore
BOOL m_bPeriodic; // TRUE => Periodic event
- CAdvisePacket( __inout_opt CAdvisePacket * next, LONGLONG time ) : m_next(next), m_rtEventTime(time)
+ CAdvisePacket( __inout_opt CAdvisePacket * next, LONGLONG time )
+ : m_next(next)
+ , m_rtEventTime(time)
+ , m_dwAdviseCookie(0)
+ , m_rtPeriod(0)
+ , m_hNotify(NULL)
+ , m_bPeriodic(FALSE)
{}
void InsertAfter( __inout CAdvisePacket * p )
diff --git a/src/thirdparty/BaseClasses/strmctl.cpp b/src/thirdparty/BaseClasses/strmctl.cpp
index f13bed699..846b0d243 100644
--- a/src/thirdparty/BaseClasses/strmctl.cpp
+++ b/src/thirdparty/BaseClasses/strmctl.cpp
@@ -22,6 +22,9 @@ CBaseStreamControl::CBaseStreamControl(__inout HRESULT *phr)
, m_FilterState(State_Stopped)
, m_bIsFlushing(FALSE)
, m_bStopSendExtra(FALSE)
+, m_bStopExtraSent(FALSE)
+, m_pSink(NULL)
+, m_tRunStart(0)
{}
CBaseStreamControl::~CBaseStreamControl()
diff --git a/src/thirdparty/BaseClasses/vtrans.cpp b/src/thirdparty/BaseClasses/vtrans.cpp
index 72794ca46..e20e48360 100644
--- a/src/thirdparty/BaseClasses/vtrans.cpp
+++ b/src/thirdparty/BaseClasses/vtrans.cpp
@@ -21,6 +21,7 @@ CVideoTransformFilter::CVideoTransformFilter
, m_tDecodeStart(0)
, m_itrAvgDecode(300000) // 30mSec - probably allows skipping
, m_bQualityChanged(FALSE)
+ , m_nWaitForKey(0)
{
#ifdef PERF
RegisterPerfId();
diff --git a/src/thirdparty/BaseClasses/vtrans.h b/src/thirdparty/BaseClasses/vtrans.h
index 49b1509b1..7fda41491 100644
--- a/src/thirdparty/BaseClasses/vtrans.h
+++ b/src/thirdparty/BaseClasses/vtrans.h
@@ -130,7 +130,7 @@ class CVideoTransformFilter : public CTransformFilter
int m_tDecodeStart; // timeGetTime when decode started.
int m_itrAvgDecode; // Average decode time in reference units.
- BOOL m_bNoSkip; // debug - no skipping.
+ //BOOL m_bNoSkip; // debug - no skipping.
// We send an EC_QUALITY_CHANGE notification to the app if we have to degrade.
// We send one when we start degrading, not one for every frame, this means
diff --git a/src/thirdparty/BaseClasses/winutil.cpp b/src/thirdparty/BaseClasses/winutil.cpp
index 08bc6a03d..205567c6a 100644
--- a/src/thirdparty/BaseClasses/winutil.cpp
+++ b/src/thirdparty/BaseClasses/winutil.cpp
@@ -35,9 +35,12 @@ CBaseWindow::CBaseWindow(BOOL bDoGetDC, bool bDoPostToDestroy) :
m_bRealizing(FALSE),
#endif
m_bNoRealize(FALSE),
- m_bDoPostToDestroy(bDoPostToDestroy)
+ m_bDoPostToDestroy(bDoPostToDestroy),
+ m_bDoGetDC(bDoGetDC),
+ m_Width(0),
+ m_Height(0),
+ m_RealizePalette(0)
{
- m_bDoGetDC = bDoGetDC;
}
@@ -1457,7 +1460,8 @@ CImageAllocator::CImageAllocator(__inout CBaseFilter *pFilter,
__in_opt LPCTSTR pName,
__inout HRESULT *phr) :
CBaseAllocator(pName,NULL,phr,TRUE,TRUE),
- m_pFilter(pFilter)
+ m_pFilter(pFilter),
+ m_pMediaType(NULL)
{
ASSERT(phr);
ASSERT(pFilter);
@@ -1742,6 +1746,7 @@ CImageSample::CImageSample(__inout CBaseAllocator *pAllocator,
CMediaSample(pName,pAllocator,phr,pBuffer,length),
m_bInit(FALSE)
{
+ ZeroMemory(&m_DibData, sizeof(DIBDATA));
ASSERT(pAllocator);
ASSERT(pBuffer);
}
diff --git a/src/thirdparty/BaseClasses/winutil.h b/src/thirdparty/BaseClasses/winutil.h
index 27358f9fd..79c4642ab 100644
--- a/src/thirdparty/BaseClasses/winutil.h
+++ b/src/thirdparty/BaseClasses/winutil.h
@@ -54,7 +54,9 @@ protected:
HPALETTE m_hPalette; // Handle to any palette we may have
BYTE m_bNoRealize; // Don't realize palette now
BYTE m_bBackground; // Should we realise in background
+#ifdef _DEBUG
BYTE m_bRealizing; // already realizing the palette
+#endif
CCritSec m_WindowLock; // Serialise window object access
BOOL m_bDoGetDC; // Should this window get a DC
bool m_bDoPostToDestroy; // Use PostMessage to destroy
diff --git a/src/thirdparty/BaseClasses/wxdebug.cpp b/src/thirdparty/BaseClasses/wxdebug.cpp
index bc7c7a107..8c9971a2a 100644
--- a/src/thirdparty/BaseClasses/wxdebug.cpp
+++ b/src/thirdparty/BaseClasses/wxdebug.cpp
@@ -1068,7 +1068,7 @@ void WINAPI DbgSetWaitTimeout(DWORD dwTimeout)
/* Stuff for printing out our GUID names */
- GUID_STRING_ENTRY g_GuidNames[] = {
+ constexpr GUID_STRING_ENTRY g_GuidNames[] = {
#define OUR_GUID_ENTRY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
{ #name, { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } },
#include <uuids.h>
diff --git a/src/thirdparty/BaseClasses/wxlist.h b/src/thirdparty/BaseClasses/wxlist.h
index 900792883..4cb819446 100644
--- a/src/thirdparty/BaseClasses/wxlist.h
+++ b/src/thirdparty/BaseClasses/wxlist.h
@@ -79,9 +79,9 @@ public:
class CNode {
#endif
- CNode *m_pPrev; /* Previous node in the list */
- CNode *m_pNext; /* Next node in the list */
- void *m_pObject; /* Pointer to the object */
+ CNode *m_pPrev = NULL; /* Previous node in the list */
+ CNode *m_pNext = NULL; /* Next node in the list */
+ void *m_pObject = NULL; /* Pointer to the object */
public:
diff --git a/src/thirdparty/BaseClasses/wxutil.cpp b/src/thirdparty/BaseClasses/wxutil.cpp
index 16f6a3844..89333c953 100644
--- a/src/thirdparty/BaseClasses/wxutil.cpp
+++ b/src/thirdparty/BaseClasses/wxutil.cpp
@@ -99,9 +99,11 @@ BOOL CAMMsgEvent::WaitMsg(DWORD dwTimeout)
CAMThread::CAMThread(__inout_opt HRESULT *phr)
: m_EventSend(TRUE, phr), // must be manual-reset for CheckRequest()
- m_EventComplete(FALSE, phr)
+ m_EventComplete(FALSE, phr),
+ m_hThread(NULL),
+ m_dwParam(0),
+ m_dwReturnVal(0)
{
- m_hThread = NULL;
}
CAMThread::~CAMThread() {
diff --git a/src/thirdparty/BaseClasses/wxutil.h b/src/thirdparty/BaseClasses/wxutil.h
index c084a0e2b..1a44c255e 100644
--- a/src/thirdparty/BaseClasses/wxutil.h
+++ b/src/thirdparty/BaseClasses/wxutil.h
@@ -213,7 +213,7 @@ public:
// Return TRUE if the thread exists. FALSE otherwise
BOOL ThreadExists(void) const
{
- if (m_hThread == 0) {
+ if (m_hThread == NULL) {
return FALSE;
} else {
return TRUE;
diff --git a/src/thirdparty/DoctorDump/CrashRpt.h b/src/thirdparty/DoctorDump/CrashRpt.h
new file mode 100644
index 000000000..7ef7630f9
--- /dev/null
+++ b/src/thirdparty/DoctorDump/CrashRpt.h
@@ -0,0 +1,670 @@
+// Copyright (c) 2014, Idol Software, Inc.
+// All rights reserved.
+//
+// This file is part of Doctor Dump SDK.
+//
+// Redistribution and use in source and binary forms without modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+//
+// 2. 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.
+//
+// Project web site http://drdump.com
+
+#ifndef __CRASH_RPT_H__
+#define __CRASH_RPT_H__
+
+#include <windows.h>
+
+/** @file */
+
+#if !(defined CRASHRPT_ENABLE_RELEASE_ASSERTS)
+//! To redefine C \b assert macro behavior define macro \b CRASHRPT_ENABLE_RELEASE_ASSERTS as \b 1 and include CrashRpt.h
+//! in each translation unit as soon as possible (precompiled header is the best place for that).
+//! \code
+//! #define CRASHRPT_ENABLE_RELEASE_ASSERTS 1
+//! #include <CrashRpt.h>
+//! \endcode
+//! When \b _DEBUG define is not defined (it is Release configuration) \b assert macro evaluates an expression and, when the result is false,
+//! sends report and continues execution.
+//! When \b _DEBUG define is defined (it is Debug configuration) \b assert macro works as standard assert macro from assert.h header.
+//! \note All assert calls before CrashRpt.h inclusion would work as standard asserts.
+//! \sa crash_rpt::CrashRpt::ExceptionAssertionViolated crash_rpt::CrashRpt::SkipDoctorDump_SendAssertionViolated
+# define CRASHRPT_ENABLE_RELEASE_ASSERTS 1
+# undef CRASHRPT_ENABLE_RELEASE_ASSERTS // this is to make doxygen document CRASHRPT_ENABLE_RELEASE_ASSERTS macro
+#elif CRASHRPT_ENABLE_RELEASE_ASSERTS == 1
+# include <assert.h>
+# ifndef _DEBUG
+# undef assert
+# define assert(expr) ((void) (!(expr) && (crash_rpt::SkipDoctorDump_ReportAssertionViolation<__COUNTER__>(__FUNCTION__ ": "#expr " is false" ), true)))
+# endif // !_DEBUG
+#endif // CRASHRPT_ENABLE_RELEASE_ASSERTS
+
+namespace crash_rpt {
+
+namespace {
+
+ // This template should be in anonymous namespace since __COUNTER__ is unique only for a single translation unit (as anonymous namespace items)
+ template<unsigned uniqueAssertId>
+ __forceinline static void SkipDoctorDump_ReportAssertionViolation(LPCSTR dumpGroup)
+ {
+ static LONG volatile isAlreadyReported = FALSE;
+ if (TRUE == InterlockedCompareExchange(&isAlreadyReported, TRUE, FALSE))
+ return;
+ ::RaiseException(CrashRpt::ExceptionAssertionViolated, 0, 1, reinterpret_cast<ULONG_PTR*>(&dumpGroup));
+ }
+
+} // namespace {
+
+//! Information about exception being processed.
+struct ExceptionInfo
+{
+ DWORD ExceptionInfoSize; //!< Size of this structure. Should be set to sizeof(ExceptionInfo).
+ BOOL FromSendReport; //!< Indicates is exception processed using CrashRpt::SendReport() call.
+ PEXCEPTION_POINTERS ExceptionPointers; //!< Exception pointers. ExceptionPointers->ExceptionRecord->ExceptionCode contains SEH code or ExceptionAssertionViolated or other Exception* constants for C/C++ special handlers.
+ DWORD ThreadId; //!< Thread identifier of the crashed thread.
+};
+
+//! Stages when crash processing callback called.
+enum CrashProcessingCallbackStage
+{
+ BeforeSendReport, //!< Callback is called before report send.
+ AfterSendReport //!< Callback is called after the report has been sent.
+};
+
+//! Result code for crash processing callback.
+enum CrashProcessingCallbackResult
+{
+ DoDefaultActions, //!< Default result. Crash handler continues its default processing.
+ SkipSendReportReturnDefaultResult, //!< Crash handler doesn't send the report and returns its default result.
+ ContinueExecution, //!< Explicitly force crash handler to return EXCEPTION_CONTINUE_EXECUTION.
+ ContinueSearch, //!< Explicitly force crash handler to return EXCEPTION_CONTINUE_SEARCH.
+ ExecuteHandler //!< Explicitly force crash handler to return EXCEPTION_EXECUTE_HANDLER.
+};
+
+//! Client crash callback function prototype.
+typedef CrashProcessingCallbackResult (CALLBACK *PFNCRASHPROCESSINGCALLBACK)(
+ CrashProcessingCallbackStage stage, //!< Current crash processing stage.
+ ExceptionInfo* exceptionInfo, //!< Information about exception being processed.
+ LPVOID userData //!< Pointer to user-defined data.
+ );
+
+
+namespace custom_data_collection {
+
+//! Result of custom data collection.
+enum Result
+{
+ ShowUploadConfirmDialog, //!< Proceed to upload confirm dialog stage.
+ DoUpload, //!< Skip upload confirm dialog and proceed to upload stage.
+ CancelUpload, //!< Cancel upload.
+};
+
+//! Information about the exception.
+struct ExceptionInfo
+{
+ DWORD ExceptionInfoSize; //!< Size of this structure. Should be set to sizeof(ExceptionInfo).
+ LPBYTE UserData; //!< Pointer to user-defined data buffer.
+ DWORD UserDataSize; //!< Size of userData buffer.
+ HANDLE Process; //!< Handle to the crashed process.
+ DWORD ProcessId; //!< Process ID of the crashed process.
+ LPVOID ExceptInfo; //!< Pointer to \b MINIDUMP_EXCEPTION_INFORMATION structure.
+ BOOL WasAssert; //!< Is it assert? (see \ref crash_rpt::CrashRpt::SkipDoctorDump_SendAssertionViolated).
+ LPCSTR DumpGroup; //!< Used-defined dump group (see \ref crash_rpt::CrashRpt::SkipDoctorDump_SendAssertionViolated).
+ int DumpID; //!< Dump ID of this crash in DrDump service.
+ int DumpGroupID; //!< DumpGroup ID of this crash in DrDump service.
+ int ProblemID; //!< Problem ID of this crash in DrDump service.
+};
+
+//! This interface used to add custom data to crash report.
+struct IDataBag
+{
+ //! You may add any file to crash report. This file will be read when crash appears and will be sent within the report.
+ //! Multiple files may be added. Filename of the file in the report may be changed to any name.
+ //! \return If the function succeeds, the return value is \b true.
+ virtual bool AddFileToReport(
+ LPCWSTR path, //!< [in] Path to the file, that will be added to the report.
+ LPCWSTR reportFileName /* = NULL */ //!< [in] Filename that will be used in report for this file. If parameter is \b NULL, original name from path will be used.
+ ) = 0;
+
+ //! Remove from report the file that was registered earlier to be sent within report.
+ //! \return If the function succeeds, the return value is \b true.
+ virtual bool RemoveFileFromReport(
+ LPCWSTR path //!< [in] Path to the file, that will be removed from the report.
+ ) = 0;
+
+ //! You may add any key/value pair to crash report.
+ //! \return If the function succeeds, the return value is \b true.
+ virtual bool AddUserInfoToReport(
+ LPCWSTR key, //!< [in] key string that will be added to the report.
+ LPCWSTR value //!< [in] value for the key.
+ ) = 0;
+
+ //! You may remove any key that was added previously to crash report by \a AddUserInfoToReport.
+ //! \return If the function succeeds, the return value is \b true.
+ virtual bool RemoveUserInfoFromReport(
+ LPCWSTR key //!< [in] key string that will be removed from the report.
+ ) = 0;
+};
+
+//! Client crash callback function prototype.
+typedef Result (CALLBACK *PFNCUSTOMDATACOLLECTIONCALLBACK)(
+ const ExceptionInfo& exceptionInfo, //!< Information about exception being processed.
+ IDataBag* dataBag //!< Interface for adding custom data to crash report.
+ );
+
+//! Contains data for optional custom data collection after the crash in context of sendrpt.exe process.
+struct Settings
+{
+ DWORD SettingsSize; //!< Size of this structure. Should be set to sizeof(CustomDataCollectionSettings).
+ LPCWSTR CollectionLibraryPath; //!< Path to dll where collection function exported from.
+ LPCSTR CollectionFunctionName; //!< Name of collection function exported from \ref CollectionLibraryPath. It should have \ref crash_rpt::custom_data_collection::PFNCUSTOMDATACOLLECTIONCALLBACK prototype.
+ LPBYTE UserData; //!< Pointer to user-defined data buffer.
+ DWORD UserDataSize; //!< Size of \ref UserData buffer.
+};
+
+}
+
+//! Contains data that identifies your application.
+struct ApplicationInfo
+{
+ DWORD ApplicationInfoSize; //!< Size of this structure. Should be set to sizeof(ApplicationInfo).
+ LPCSTR ApplicationGUID; //!< GUID assigned to this application in form 00000000-0000-0000-0000-000000000000.
+ LPCSTR Prefix; //!< Prefix that will be used with the dump name: YourPrefix_v1.v2.v3.v4_YYYYMMDD_HHMMSS.mini.dmp.
+ LPCWSTR AppName; //!< Application name that will be shown in message box.
+ LPCWSTR Company; //!< Company name that will be shown in message box.
+ USHORT V[4]; //!< Version of this application.
+ USHORT Hotfix; //!< Version of hotfix for this application (reserved for future use, should be 0).
+ LPCWSTR PrivacyPolicyUrl; //!< URL to privacy policy. If NULL default privacy policy is used.
+};
+
+//! \brief Contains crash handling behavior customization parameters.
+//!
+//! Default values for all parameters is 0/FALSE.
+struct HandlerSettings
+{
+ DWORD HandlerSettingsSize; //!< Size of this structure. Should be set to sizeof(HandlerSettings).
+ BOOL LeaveDumpFilesInTempFolder; //!< To leave error reports in temp folder you should set this member to TRUE. Your support or test lab teams can use that reports later.
+ BOOL OpenProblemInBrowser; //!< To open Web-page belonging to the uploaded report after it was uploaded set this member to TRUE. It is useful for test lab to track the bug or write some comments.
+ BOOL UseWER; //!< To continue use Microsoft Windows Error Reporting (WER) set this member to TRUE. In that case after Doctor Dump send report dialog Microsoft send report dialog also will be shown. This can be necessary in case of Windows Logo program.
+ DWORD SubmitterID; //!< Doctor Dump user ID. Uploaded report will be marked as uploaded by this user. This is useful for Doctor Dump and bug tracking system integration. Set to \b 0 if user using this application is anonymous.
+ BOOL SendAdditionalDataWithoutApproval; //!< To automatically accepted the question "Do you want to send more information about the problem?" set this member to TRUE .
+ BOOL OverrideDefaultFullDumpType;//!< To override default type of data gathered by the library set this member to TRUE and set required type of data in \a FullDumpType.
+ DWORD FullDumpType; //!< The type of information to be generated when full dump is requested by Doctor Dump. This parameter can be one or more of the values from the MINIDUMP_TYPE enumeration.
+ LPCWSTR LangFilePath; //!< To customize localization set this member to the path to the language file (including file name).
+ LPCWSTR SendRptPath; //!< Set this member to NULL to use default behavior when SendRpt is named sendrpt.exe and exist in same folder with crashrpt.dll. Set to filename if sendrpt.exe has another name but it is in same folder as crashrpt.dll. Set to full path in other cases.
+ LPCWSTR DbgHelpPath; //!< Set this member to NULL to use default behavior when DbgHelp is named dbghelp.dll and exist in same folder with crashrpt.dll. Set to filename if dbghelp.dll has another name but it is in same folder as crashrpt.dll. Set to full path in other cases.
+ //!< \note You should use dbghelp.dll that distributed with crashrpt.dll and not the %SystemRoot%\\System32\\dbghelp.dll, because only that dll supports all required functionality. See <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms679294(v=vs.85).aspx">DbgHelp Versions</a> for more information.
+ PFNCRASHPROCESSINGCALLBACK CrashProcessingCallback; //!< Callback function that will be called when crash reporting occurs. Set to NULL if no special processing needed.
+ LPVOID CrashProcessingCallbackUserData; //!< User defined parameter for CrashProcessingCallback. Optional.
+ custom_data_collection::Settings* CustomDataCollectionSettings;
+ //!< Contains data for optional custom data collection after the crash in context of sendrpt.exe process.
+};
+
+//! \brief To enable crash processing you should create an instance of this class.
+//!
+//! It should be created as global static object and correctly initialized.
+//! Also you may instantiate it in your main() or WinMain() function as soon as possible.
+class CrashRpt
+{
+public:
+ //! \example Sample.cpp
+ //! This is an example of how to use the CrashRpt class.
+
+ //! CrashRpt constructor. Loads crashrpt.dll and initializes crash handling.
+ //! \note The crashrpt.dll is allowed to be missing. In that case there will be no crash handling.
+ CrashRpt(
+ LPCSTR applicationGUID, //!< [in] GUID assigned to this application.
+ LPCWSTR appName, //!< [in] Application name that will be shown in message box.
+ LPCWSTR company //!< [in] Company name that will be shown in message box.
+ ) throw()
+ {
+ if (!LoadDll())
+ return;
+
+ InitCrashRpt(applicationGUID, NULL, appName, company, TRUE);
+ }
+
+ //! CrashRpt constructor. Loads crashrpt.dll and initializes crash handling.
+ //! \note The crashrpt.dll is allowed to be missing. In that case there will be no crash handling.
+ CrashRpt(
+ LPCSTR applicationGUID, //!< [in] GUID assigned to this application.
+ LPCSTR prefix, //!< [in] Prefix that will be used with the dump name: YourPrefix_v1.v2.v3.v4_YYYYMMDD_HHMMSS.mini.dmp.
+ LPCWSTR appName, //!< [in] Application name that will be shown in message box.
+ LPCWSTR company, //!< [in] Company name that will be shown in message box.
+ BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write
+ //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly
+ //!< catch exceptions. See \ref SendReport for more information.
+ ) throw()
+ {
+ if (!LoadDll())
+ return;
+
+ InitCrashRpt(applicationGUID, prefix, appName, company, ownProcess);
+ }
+
+ //! CrashRpt constructor. Loads crashrpt.dll and initializes crash handling.
+ //! \note The crashrpt.dll is allowed to be missing. In that case there will be no crash handling.
+ CrashRpt(
+ LPCWSTR crashrptPath, //!< [in] Path to crashrpt.dll file. File may be renamed.
+ LPCSTR applicationGUID, //!< [in] GUID assigned to this application.
+ LPCSTR prefix, //!< [in] Prefix that will be used with the dump name: YourPrefix_v1.v2.v3.v4_YYYYMMDD_HHMMSS.mini.dmp.
+ LPCWSTR appName, //!< [in] Application name that will be shown in message box.
+ LPCWSTR company, //!< [in] Company name that will be shown in message box.
+ BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write
+ //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly
+ //!< catch exceptions. See \ref SendReport for more information.
+ ) throw()
+ {
+ if (!LoadDll(crashrptPath))
+ return;
+
+ InitCrashRpt(applicationGUID, prefix, appName, company, ownProcess);
+ }
+
+ //! CrashRpt constructor. Loads crashrpt.dll and initializes crash handling.
+ //! \note The crashrpt.dll is allowed to be missing. In that case there will be no crash handling.
+ CrashRpt(
+ ApplicationInfo* applicationInfo, //!< [in] Pointer to the ApplicationInfo structure that identifies your application.
+ HandlerSettings* handlerSettings, //!< [in] Pointer to the HandlerSettings structure that customizes crash handling behavior. This parameter can be \b NULL.
+ BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write
+ //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly
+ //!< catch exceptions. See \ref SendReport for more information.
+ ) throw()
+ {
+ if (!LoadDll())
+ return;
+
+ InitCrashRpt(applicationInfo, handlerSettings, ownProcess);
+ }
+
+ //! CrashRpt constructor. Loads crashrpt.dll and initializes crash handling.
+ //! \note The crashrpt.dll is allowed to be missing. In that case there will be no crash handling.
+ CrashRpt(
+ LPCWSTR crashrptPath, //!< [in] Path to crashrpt.dll file. File may be renamed.
+ ApplicationInfo* applicationInfo, //!< [in] Pointer to the ApplicationInfo structure that identifies your application.
+ HandlerSettings* handlerSettings, //!< [in] Pointer to the HandlerSettings structure that customizes crash handling behavior. This parameter can be \b NULL.
+ BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write
+ //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly
+ //!< catch exceptions. See \ref SendReport for more information.
+ ) throw()
+ {
+ if (!LoadDll(crashrptPath))
+ return;
+
+ InitCrashRpt(applicationInfo, handlerSettings, ownProcess);
+ }
+
+
+ //! CrashRpt constructor. Loads crashrpt.dll. You should call \ref InitCrashRpt to turn on crash handling.
+ //! \note The crashrpt.dll is allowed to be missing. In that case there will be no crash handling.
+ CrashRpt(
+ LPCWSTR crashrptPath = NULL //!< [in] Path to crashrpt.dll file. File may be renamed.
+ ) throw()
+ {
+ LoadDll(crashrptPath);
+ }
+
+ //! CrashRpt destructor.
+ //! \note It doesn't unload crashrpt.dll and doesn't disable crash handling since crash may appear on very late phase of application exit.
+ //! For example destructor of some static variable that is called after return from main() may crash.
+ ~CrashRpt()
+ {
+ if (!m_IsReadyToExit)
+ return;
+
+ // If crash has happen not in main thread we should wait here until report will be sent
+ // or else program will be terminated after return from main() and report sending will be halted.
+ while (!m_IsReadyToExit())
+ ::Sleep(100);
+
+#if _WIN32_WINNT >= 0x0501 /*_WIN32_WINNT_WINXP*/
+ if (m_bSkipAssertsAdded)
+ RemoveVectoredExceptionHandler(SkipAsserts);
+#endif
+ }
+
+ //! Checks that crash handling was enabled.
+ //! \return Return \b true if crash handling was enabled.
+ bool IsCrashHandlingEnabled() const
+ {
+ return m_bWorking;
+ }
+
+ //! Initializes crash handler.
+ //! \note You may call this function multiple times if some data has changed.
+ //! \return Return \b true if crash handling was enabled.
+ bool InitCrashRpt(
+ ApplicationInfo* applicationInfo, //!< [in] Pointer to the ApplicationInfo structure that identifies your application.
+ HandlerSettings* handlerSettings, //!< [in] Pointer to the HandlerSettings structure that customizes crash handling behavior. This parameter can be \b NULL.
+ BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write
+ //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly
+ //!< catch exceptions. See \ref SendReport for more information.
+ ) throw()
+ {
+ if (!m_InitCrashRpt)
+ return false;
+
+ m_bWorking = m_InitCrashRpt(applicationInfo, handlerSettings, ownProcess) != FALSE;
+
+ return m_bWorking;
+ }
+
+ //! Initializes crash handler.
+ //! \return Return \b true if crash handling was enabled.
+ //! \warning This method is deprecated. Use \ref InitCrashRpt instead.
+ __declspec(deprecated)
+ bool InitCrashHandler(
+ ApplicationInfo* applicationInfo, //!< [in] Pointer to the ApplicationInfo structure that identifies your application.
+ HandlerSettings* handlerSettings, //!< [in] Pointer to the HandlerSettings structure that customizes crash handling behavior. This parameter can be \b NULL.
+ BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write
+ //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly
+ //!< catch exceptions. See \ref SendReport for more information.
+ ) throw()
+ {
+ return InitCrashRpt(applicationInfo, handlerSettings, ownProcess);
+ }
+
+
+ //! Initializes crash handler.
+ //! \note You may call this function multiple times if some data has changed.
+ //! \return Return \b true if crash handling was enabled.
+ bool InitCrashRpt(
+ LPCSTR applicationGUID, //!< [in] GUID assigned to this application.
+ LPCSTR prefix, //!< [in] Prefix that will be used with the dump name: YourPrefix_v1.v2.v3.v4_YYYYMMDD_HHMMSS.mini.dmp.
+ LPCWSTR appName, //!< [in] Application name that will be shown in message box.
+ LPCWSTR company, //!< [in] Company name that will be shown in message box.
+ BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write
+ //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly
+ //!< catch exceptions. See \ref SendReport for more information.
+ ) throw()
+ {
+ if (!m_GetVersionFromApp)
+ return false;
+
+ ApplicationInfo appInfo;
+ memset(&appInfo, 0, sizeof(appInfo));
+ appInfo.ApplicationInfoSize = sizeof(appInfo);
+ appInfo.ApplicationGUID = applicationGUID;
+ appInfo.Prefix = prefix;
+ appInfo.AppName = appName;
+ appInfo.Company = company;
+ if (!m_GetVersionFromApp(&appInfo))
+ appInfo.V[0] = 1;
+
+ HandlerSettings handlerSettings;
+ memset(&handlerSettings, 0, sizeof(handlerSettings));
+ handlerSettings.HandlerSettingsSize = sizeof(handlerSettings);
+ handlerSettings.OpenProblemInBrowser = TRUE;
+
+ return InitCrashRpt(&appInfo, &handlerSettings, ownProcess);
+ }
+
+ //! \note This function is experimental and may not be available and may not be support by Doctor Dump in the future.
+ //! You may set custom information for your possible report.
+ //! This text will be available on Doctor Dump dumps page.
+ //! The text should not contain private information.
+ //! \return If the function succeeds, the return value is \b true.
+ bool SetCustomInfo(
+ LPCWSTR text //!< [in] custom info for the report. The text will be cut to 100 characters.
+ )
+ {
+ if (!m_SetCustomInfo)
+ return false;
+ m_SetCustomInfo(text);
+ return true;
+ }
+
+ //! You may add any key/value pair to crash report.
+ //! \return If the function succeeds, the return value is \b true.
+ //! \note This function is thread safe.
+ bool AddUserInfoToReport(
+ LPCWSTR key, //!< [in] key string that will be added to the report.
+ LPCWSTR value //!< [in] value for the key.
+ ) throw()
+ {
+ if (!m_AddUserInfoToReport)
+ return false;
+ m_AddUserInfoToReport(key, value);
+ return true;
+ }
+
+ //! You may remove any key that was added previously to crash report by \a AddUserInfoToReport.
+ //! \return If the function succeeds, the return value is \b true.
+ //! \note This function is thread safe.
+ bool RemoveUserInfoFromReport(
+ LPCWSTR key //!< [in] key string that will be removed from the report.
+ )
+ {
+ if (!m_RemoveUserInfoFromReport)
+ return false;
+ m_RemoveUserInfoFromReport(key);
+ return true;
+ }
+
+ //! You may add any file to crash report. This file will be read when crash appears and will be sent within the report.
+ //! Multiple files may be added. Filename of the file in the report may be changed to any name.
+ //! \return If the function succeeds, the return value is \b true.
+ //! \note This function is thread safe.
+ bool AddFileToReport(
+ LPCWSTR path, //!< [in] Path to the file, that will be added to the report.
+ LPCWSTR reportFileName /* = NULL */ //!< [in] Filename that will be used in report for this file. If parameter is \b NULL, original name from path will be used.
+ ) throw()
+ {
+ if (!m_AddFileToReport)
+ return false;
+ m_AddFileToReport(path, reportFileName);
+ return true;
+ }
+
+ //! Remove from report the file that was registered earlier to be sent within report.
+ //! \return If the function succeeds, the return value is \b true.
+ //! \note This function is thread safe.
+ bool RemoveFileFromReport(
+ LPCWSTR path //!< [in] Path to the file, that will be removed from the report.
+ ) throw()
+ {
+ if (!m_RemoveFileFromReport)
+ return false;
+ m_RemoveFileFromReport(path);
+ return true;
+ }
+
+ //! Fills version field (V) of ApplicationInfo with product version
+ //! found in the executable file of the current process.
+ //! \return If the function succeeds, the return value is \b true.
+ bool GetVersionFromApp(
+ ApplicationInfo* appInfo //!< [out] Pointer to ApplicationInfo structure. Its version field (V) will be set to product version.
+ ) throw()
+ {
+ if (!m_GetVersionFromApp)
+ return false;
+ return m_GetVersionFromApp(appInfo) != FALSE;
+ }
+
+ //! Fill version field (V) of ApplicationInfo with product version found in the file specified.
+ //! \return If the function succeeds, the return value is \b true.
+ bool GetVersionFromFile(
+ LPCWSTR path, //!< [in] Path to the file product version will be extracted from.
+ ApplicationInfo* appInfo //!< [out] Pointer to ApplicationInfo structure. Its version field (V) will be set to product version.
+ ) throw()
+ {
+ if (!m_GetVersionFromFile)
+ return false;
+ return m_GetVersionFromFile(path, appInfo) != FALSE;
+ }
+
+ //! If you do not own the process your code running in (for example you write a plugin to some
+ //! external application) you need to properly initialize CrashRpt using \b ownProcess option.
+ //! Also you need to explicitly catch all exceptions in all entry points to your code and in all
+ //! threads you create. To do so use this construction:
+ //! \code
+ //! bool SomeEntryPoint(PARAM p)
+ //! {
+ //! __try
+ //! {
+ //! return YouCode(p);
+ //! }
+ //! __except (CrashRpt::SendReport(GetExceptionInformation()))
+ //! {
+ //! ::ExitProcess(0); // It is better to stop the process here or else corrupted data may incomprehensibly crash it later.
+ //! return false;
+ //! }
+ //! }
+ //! \endcode
+ LONG SendReport(
+ EXCEPTION_POINTERS* exceptionPointers //!< [in] Pointer to EXCEPTION_POINTERS structure. You should get it using GetExceptionInformation()
+ //!< function inside __except keyword.
+ )
+ {
+ if (!m_SendReport)
+ {
+ // There is no crash handler but asserts should not crash application anyway, so let's continue
+ if (exceptionPointers->ExceptionRecord->ExceptionCode == ExceptionAssertionViolated)
+ return EXCEPTION_CONTINUE_EXECUTION;
+ return EXCEPTION_CONTINUE_SEARCH;
+ }
+ return m_SendReport(exceptionPointers);
+ }
+
+ //! To send a report about violated assertion you can throw exception with this exception code
+ //! using: \code RaiseException(CrashRpt::ExceptionAssertionViolated, 0, 0, NULL); \endcode
+ //! Execution will continue after report will be sent (EXCEPTION_CONTINUE_EXECUTION would be used).
+ //! You may pass grouping string as first parameter (see \a SkipDoctorDump_SendAssertionViolated).
+ //! \note If you called CrashRpt constructor and crashrpt.dll was missing you still may using this exception.
+ //! It will be caught, ignored and execution will continue. \ref SendReport function also works safely
+ //! when crashrpt.dll was missing.
+ //! \sa CRASHRPT_ENABLE_RELEASE_ASSERTS SkipDoctorDump_SendAssertionViolated
+ static const DWORD ExceptionAssertionViolated = ((DWORD)0xCCE17000);
+
+ //! Exception code for Terminate()/SIGABRT call in crash callback.
+ static const DWORD ExceptionCppTerminate = ((DWORD)0xCCE17001);
+
+ //! Exception code for pure virtual call in crash callback.
+ static const DWORD ExceptionPureCall = ((DWORD)0xCCE17002);
+
+ //! Exception code for CRT invalid parameter call in crash callback.
+ static const DWORD ExceptionInvalidParameter = ((DWORD)0xCCE17003);
+
+ //! Sends assertion violation report from this point and continue execution.
+ //! \sa ExceptionAssertionViolated
+ //! \note Functions containing "SkipDoctorDump" will be ignored in stack parsing.
+ //! \sa CRASHRPT_ENABLE_RELEASE_ASSERTS ExceptionAssertionViolated
+ void SkipDoctorDump_SendAssertionViolated(
+ LPCSTR dumpGroup = NULL //!< [in] All dumps with that group will be separated from dumps with same stack but another group. Set parameter to \b NULL if no grouping is required.
+ ) const
+ {
+ if (!m_bWorking)
+ return;
+ if (dumpGroup)
+ ::RaiseException(CrashRpt::ExceptionAssertionViolated, 0, 1, reinterpret_cast<ULONG_PTR*>(&dumpGroup));
+ else
+ ::RaiseException(CrashRpt::ExceptionAssertionViolated, 0, 0, NULL);
+ }
+
+private:
+ bool LoadDll(LPCWSTR crashrptPath = NULL) throw()
+ {
+ m_bLoaded = false;
+ m_bWorking = false;
+ m_bSkipAssertsAdded = false;
+ m_InitCrashRpt = NULL;
+ m_SendReport = NULL;
+ m_IsReadyToExit = NULL;
+ m_SetCustomInfo = NULL;
+ m_AddUserInfoToReport = NULL;
+ m_RemoveUserInfoFromReport = NULL;
+ m_AddFileToReport = NULL;
+ m_RemoveFileFromReport = NULL;
+ m_GetVersionFromApp = NULL;
+ m_GetVersionFromFile = NULL;
+
+ // hCrashrptDll should not be unloaded, crash may appear even after return from main().
+ // So hCrashrptDll is not saved after construction.
+ HMODULE hCrashrptDll = ::LoadLibraryW(crashrptPath ? crashrptPath : L"crashrpt.dll");
+ if (hCrashrptDll != NULL)
+ {
+ m_InitCrashRpt = (pfnInitCrashRpt) GetProcAddress(hCrashrptDll, "InitCrashRpt");
+ m_SendReport = (pfnSendReport) GetProcAddress(hCrashrptDll, "SendReport");
+ m_IsReadyToExit = (pfnIsReadyToExit) GetProcAddress(hCrashrptDll, "IsReadyToExit");
+ m_SetCustomInfo = (pfnSetCustomInfo) GetProcAddress(hCrashrptDll, "SetCustomInfo");
+ m_AddUserInfoToReport = (pfnAddUserInfoToReport) GetProcAddress(hCrashrptDll, "AddUserInfoToReport");
+ m_RemoveUserInfoFromReport = (pfnRemoveUserInfoFromReport) GetProcAddress(hCrashrptDll, "RemoveUserInfoFromReport");
+ m_AddFileToReport = (pfnAddFileToReport) GetProcAddress(hCrashrptDll, "AddFileToReport");
+ m_RemoveFileFromReport = (pfnRemoveFileFromReport) GetProcAddress(hCrashrptDll, "RemoveFileFromReport");
+ m_GetVersionFromApp = (pfnGetVersionFromApp) GetProcAddress(hCrashrptDll, "GetVersionFromApp");
+ m_GetVersionFromFile = (pfnGetVersionFromFile) GetProcAddress(hCrashrptDll, "GetVersionFromFile");
+
+ m_bLoaded = m_InitCrashRpt
+ && m_SendReport
+ && m_IsReadyToExit
+ && m_SetCustomInfo
+ && m_AddUserInfoToReport
+ && m_RemoveUserInfoFromReport
+ && m_AddFileToReport
+ && m_RemoveFileFromReport
+ && m_GetVersionFromApp
+ && m_GetVersionFromFile;
+ }
+
+#if _WIN32_WINNT >= 0x0501 /*_WIN32_WINNT_WINXP*/
+ // if no crash processing was started, we need to ignore ExceptionAssertionViolated exceptions.
+ if (!m_bLoaded)
+ {
+ ::AddVectoredExceptionHandler(TRUE, SkipAsserts);
+ m_bSkipAssertsAdded = true;
+ }
+#endif
+
+ return m_bLoaded;
+ }
+
+ static LONG CALLBACK SkipAsserts(EXCEPTION_POINTERS* pExceptionInfo)
+ {
+ if (pExceptionInfo->ExceptionRecord->ExceptionCode == ExceptionAssertionViolated)
+ return EXCEPTION_CONTINUE_EXECUTION;
+ return EXCEPTION_CONTINUE_SEARCH;
+ }
+
+ bool m_bLoaded;
+ bool m_bWorking;
+ bool m_bSkipAssertsAdded;
+
+ typedef BOOL (*pfnInitCrashRpt)(ApplicationInfo* applicationInfo, HandlerSettings* handlerSettings, BOOL ownProcess);
+ typedef LONG (*pfnSendReport)(EXCEPTION_POINTERS* exceptionPointers);
+ typedef BOOL (*pfnIsReadyToExit)();
+ typedef void (*pfnSetCustomInfo)(LPCWSTR text);
+ typedef void (*pfnAddUserInfoToReport)(LPCWSTR key, LPCWSTR value);
+ typedef void (*pfnRemoveUserInfoFromReport)(LPCWSTR key);
+ typedef void (*pfnAddFileToReport)(LPCWSTR path, LPCWSTR reportFileName /* = NULL */);
+ typedef void (*pfnRemoveFileFromReport)(LPCWSTR path);
+ typedef BOOL (*pfnGetVersionFromApp)(ApplicationInfo* appInfo);
+ typedef BOOL (*pfnGetVersionFromFile)(LPCWSTR path, ApplicationInfo* appInfo);
+
+ pfnInitCrashRpt m_InitCrashRpt;
+ pfnSendReport m_SendReport;
+ pfnIsReadyToExit m_IsReadyToExit;
+ pfnSetCustomInfo m_SetCustomInfo;
+ pfnAddUserInfoToReport m_AddUserInfoToReport;
+ pfnRemoveUserInfoFromReport m_RemoveUserInfoFromReport;
+ pfnAddFileToReport m_AddFileToReport;
+ pfnRemoveFileFromReport m_RemoveFileFromReport;
+ pfnGetVersionFromApp m_GetVersionFromApp;
+ pfnGetVersionFromFile m_GetVersionFromFile;
+};
+
+} // namespace crash_rpt
+
+__declspec(deprecated) typedef crash_rpt::CrashRpt CrashHandler; //!< Deprecated. Use crash_rpt::CrashRpt class instead.
+__declspec(deprecated) typedef crash_rpt::ApplicationInfo ApplicationInfo; //!< Deprecated. Use crash_rpt::ApplicationInfo class instead.
+__declspec(deprecated) typedef crash_rpt::HandlerSettings HandlerSettings; //!< Deprecated. Use crash_rpt::HandlerSettings class instead.
+
+#endif // __CRASH_RPT_H__ \ No newline at end of file
diff --git a/src/thirdparty/DoctorDump/DoctorDump.filters b/src/thirdparty/DoctorDump/DoctorDump.filters
new file mode 100644
index 000000000..c2f3e01d1
--- /dev/null
+++ b/src/thirdparty/DoctorDump/DoctorDump.filters
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/DoctorDump/DoctorDump.vcxproj b/src/thirdparty/DoctorDump/DoctorDump.vcxproj
new file mode 100644
index 000000000..e72157f9a
--- /dev/null
+++ b/src/thirdparty/DoctorDump/DoctorDump.vcxproj
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release Lite|Win32">
+ <Configuration>Release Lite</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Lite|x64">
+ <Configuration>Release Lite</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{BECEAFF9-CDCA-45EC-A1CF-658FA51818E6}</ProjectGuid>
+ <RootNamespace>DoctorDump</RootNamespace>
+ <Keyword>DoctorDump</Keyword>
+ <ProjectName>DoctorDump</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\mpc-hc_x86\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Lite|Win32'">$(SolutionDir)bin\mpc-hc_x86 Lite\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\mpc-hc_x64\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Lite|x64'">$(SolutionDir)bin\mpc-hc_x64 Lite\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup>
+ <BaseIntermediateOutputPath>$(IntDir)</BaseIntermediateOutputPath>
+ <NMakeBuildCommandLine>$(ProjectDir)deploy.bat $(Platform) "$(OutDir)"</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>$(ProjectDir)deploy.bat $(Platform) "$(OutDir)"</NMakeReBuildCommandLine>
+ </PropertyGroup>
+ <ItemGroup>
+ <ClInclude Include="CrashRpt.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/DoctorDump/deploy.bat b/src/thirdparty/DoctorDump/deploy.bat
new file mode 100644
index 000000000..02e2f1df1
--- /dev/null
+++ b/src/thirdparty/DoctorDump/deploy.bat
@@ -0,0 +1,49 @@
+@ECHO OFF
+REM (C) 2015 see Authors.txt
+REM
+REM This file is part of MPC-HC.
+REM
+REM MPC-HC is free software; you can redistribute it and/or modify
+REM it under the terms of the GNU General Public License as published by
+REM the Free Software Foundation; either version 3 of the License, or
+REM (at your option) any later version.
+REM
+REM MPC-HC is distributed in the hope that it will be useful,
+REM but WITHOUT ANY WARRANTY; without even the implied warranty of
+REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+REM GNU General Public License for more details.
+REM
+REM You should have received a copy of the GNU General Public License
+REM along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+SETLOCAL
+SET "FILE_DIR=%~dp0"
+PUSHD "%FILE_DIR%"
+
+SET ROOT_DIR=..\..\..
+SET "COMMON=%FILE_DIR%%ROOT_DIR%\common.bat"
+CALL "%COMMON%" :SubPreBuild
+
+IF "%1" == "" CALL "%COMMON%" :SubMsg "ERROR" "%~nx0, No argument was provided." & EXIT /B
+
+SET "SRCFOLDER=%MPCHC_DOCTORDUMP%\bin"
+IF /I "%~1" == "x64" (
+ SET "SRCFOLDER=%SRCFOLDER%\x64"
+)
+
+SET "DESTFOLDER=%~2CrashReporter"
+
+IF EXIST "%MPCHC_DOCTORDUMP%" (
+ IF NOT EXIST "%DESTFOLDER%" MD "%DESTFOLDER%"
+ COPY /Y /V "%SRCFOLDER%\crashrpt.dll" "%DESTFOLDER%"
+ COPY /Y /V "%SRCFOLDER%\dbghelp.dll" "%DESTFOLDER%"
+ COPY /Y /V "%SRCFOLDER%\sendrpt.exe" "%DESTFOLDER%"
+) ELSE IF DEFINED MPCHC_DOCTORDUMP (
+ CALL "%COMMON%" :SubMsg "WARNING" "Invalid path to Doctor Dump SDK, files were not copied"
+)
+
+:End
+POPD
+ENDLOCAL
+EXIT /B
diff --git a/src/thirdparty/LAVFilters/LAVFilters.vcxproj b/src/thirdparty/LAVFilters/LAVFilters.vcxproj
index 249ce37d6..b1db2b29d 100644
--- a/src/thirdparty/LAVFilters/LAVFilters.vcxproj
+++ b/src/thirdparty/LAVFilters/LAVFilters.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,55 +26,22 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Makefile</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>Makefile</ConfigurationType>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\lib\$(Configuration)_$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\obj\$(Configuration)_$(Platform)\$(ProjectName)\</IntDir>
- <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">build_lavfilters.bat Build x86 Debug Silent Nocolors</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">build_lavfilters.bat Rebuild x86 Debug Silent Nocolors</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">build_lavfilters.bat Clean x86 Debug Silent Nocolors</NMakeCleanCommandLine>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\lib\$(Configuration)_$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\obj\$(Configuration)_$(Platform)\$(ProjectName)\</IntDir>
- <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">build_lavfilters.bat Build x64 Debug Silent Nocolors</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">build_lavfilters.bat Rebuild x64 Debug Silent Nocolors</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">build_lavfilters.bat Clean x64 Debug Silent Nocolors</NMakeCleanCommandLine>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\lib\$(Configuration)_$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\obj\$(Configuration)_$(Platform)\$(ProjectName)\</IntDir>
- <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">build_lavfilters.bat Build x86 Silent Nocolors</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">build_lavfilters.bat Rebuild x86 Silent Nocolors</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">build_lavfilters.bat Clean x86 Silent Nocolors</NMakeCleanCommandLine>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\lib\$(Configuration)_$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\obj\$(Configuration)_$(Platform)\$(ProjectName)\</IntDir>
- <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">build_lavfilters.bat Build x64 Silent Nocolors</NMakeBuildCommandLine>
- <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">build_lavfilters.bat Rebuild x64 Silent Nocolors</NMakeReBuildCommandLine>
- <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">build_lavfilters.bat Clean x64 Silent Nocolors</NMakeCleanCommandLine>
+ <BaseIntermediateOutputPath>$(IntDir)</BaseIntermediateOutputPath>
+ <NMakeBuildCommandLine>build_lavfilters.bat Build $(Platform) $(Configuration) Silent Nocolors</NMakeBuildCommandLine>
+ <NMakeReBuildCommandLine>build_lavfilters.bat Rebuild $(Platform) $(Configuration) Silent Nocolors</NMakeReBuildCommandLine>
+ <NMakeCleanCommandLine>build_lavfilters.bat Clean $(Platform) $(Configuration) Silent Nocolors</NMakeCleanCommandLine>
</PropertyGroup>
<ItemDefinitionGroup>
</ItemDefinitionGroup>
diff --git a/src/thirdparty/LAVFilters/LAVFilters.vcxproj.filters b/src/thirdparty/LAVFilters/LAVFilters.vcxproj.filters
index c2f3e01d1..b1464a583 100644
--- a/src/thirdparty/LAVFilters/LAVFilters.vcxproj.filters
+++ b/src/thirdparty/LAVFilters/LAVFilters.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
diff --git a/src/thirdparty/LAVFilters/build_ffmpeg.sh b/src/thirdparty/LAVFilters/build_ffmpeg.sh
index 9e136b236..93d5af4e7 100755
--- a/src/thirdparty/LAVFilters/build_ffmpeg.sh
+++ b/src/thirdparty/LAVFilters/build_ffmpeg.sh
@@ -1,86 +1,89 @@
#!/bin/sh
+echo "$(pwd)" | grep -q '[[:blank:]]' &&
+ echo "Out of tree builds are impossible with whitespace in source path." && exit 1
+
+bin_folder=bin
+
if [ "${1}" == "x64" ]; then
arch=x86_64
archdir=x64
+ cross_prefix=x86_64-w64-mingw32-
+ lav_folder=LAVFilters64
+ mpc_hc_folder=mpc-hc_x64
else
arch=x86
archdir=Win32
+ cross_prefix=
+ lav_folder=LAVFilters
+ mpc_hc_folder=mpc-hc_x86
fi
-make_dirs() {
- if [ ! -d bin_${archdir}/lib ]; then
- mkdir -p bin_${archdir}/lib
- fi
+if [ "${2}" == "Debug" ]; then
+ FFMPEG_DLL_PATH=$(readlink -f ../../..)/${bin_folder}/${mpc_hc_folder}_Debug/${lav_folder}
+ BASEDIR=$(pwd)/src/bin_${archdir}d
+else
+ FFMPEG_DLL_PATH=$(readlink -f ../../..)/${bin_folder}/${mpc_hc_folder}/${lav_folder}
+ BASEDIR=$(pwd)/src/bin_${archdir}
+fi
- if [ ! -d bin_${archdir}d/lib ]; then
- mkdir -p bin_${archdir}d/lib
- fi
-}
+THIRDPARTYPREFIX=${BASEDIR}/thirdparty
+FFMPEG_BUILD_PATH=${THIRDPARTYPREFIX}/ffmpeg
+FFMPEG_LIB_PATH=${BASEDIR}/lib
-strip_libs() {
- if [ "${arch}" == "x86_64" ]; then
- x86_64-w64-mingw32-strip lib*/*-lav-*.dll
- else
- strip lib*/*-lav-*.dll
- fi
+make_dirs() {
+ mkdir -p ${FFMPEG_LIB_PATH}
+ mkdir -p ${FFMPEG_BUILD_PATH}
+ mkdir -p ${FFMPEG_DLL_PATH}
}
copy_libs() {
- cp lib*/*-lav-*.dll ../../bin_${archdir}
- cp lib*/*.lib ../../bin_${archdir}/lib
- cp lib*/*-lav-*.dll ../../bin_${archdir}d
- cp lib*/*.lib ../../bin_${archdir}d/lib
+ # install -s --strip-program=${cross_prefix}strip lib*/*-lav-*.dll ${FFMPEG_DLL_PATH}
+ cp lib*/*-lav-*.dll ${FFMPEG_DLL_PATH}
+ ${cross_prefix}strip ${FFMPEG_DLL_PATH}/*-lav-*.dll
+ cp -u lib*/*.lib ${FFMPEG_LIB_PATH}
}
clean() {
+ cd ${FFMPEG_BUILD_PATH}
echo Cleaning...
if [ -f config.mak ]; then
make distclean > /dev/null 2>&1
fi
+ cd ${BASEDIR}
}
configure() {
OPTIONS="
--enable-shared \
--disable-static \
+ --enable-gpl \
--enable-version3 \
--enable-w32threads \
--disable-demuxer=matroska \
- --disable-decoder=opus \
- --disable-parser=opus \
--disable-filters \
- --enable-filter=yadif \
- --enable-filter=scale \
- --disable-protocols \
- --enable-protocol=file \
- --enable-protocol=pipe \
- --enable-protocol=mmsh \
- --enable-protocol=mmst \
- --enable-protocol=rtp \
- --enable-protocol=http \
- --enable-protocol=crypto \
- --enable-protocol=rtmp \
- --enable-protocol=rtmpt \
+ --enable-filter=scale,yadif,w3fdif \
+ --disable-protocol=async,cache,concat,httpproxy,icecast,md5,subfile \
--disable-muxers \
--enable-muxer=spdif \
+ --disable-bsfs \
+ --enable-bsf=extract_extradata,vp9_superframe \
--disable-hwaccels \
--enable-hwaccel=h264_dxva2 \
--enable-hwaccel=hevc_dxva2 \
--enable-hwaccel=vc1_dxva2 \
--enable-hwaccel=wmv3_dxva2 \
--enable-hwaccel=mpeg2_dxva2 \
+ --enable-hwaccel=vp9_dxva2 \
--enable-libspeex \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
- --enable-libopus \
--enable-avresample \
--enable-avisynth \
--disable-avdevice \
--disable-postproc \
--disable-swresample \
--disable-encoders \
- --disable-bsfs \
--disable-devices \
--disable-programs \
--disable-debug \
@@ -88,30 +91,32 @@ configure() {
--build-suffix=-lav \
--arch=${arch}"
- EXTRA_CFLAGS="-D_WIN32_WINNT=0x0502 -DWINVER=0x0502 -I../../thirdparty/include"
+ EXTRA_CFLAGS="-fno-tree-vectorize -D_WIN32_WINNT=0x0502 -DWINVER=0x0502 -I../../../thirdparty/include"
EXTRA_LDFLAGS=""
if [ "${arch}" == "x86_64" ]; then
- OPTIONS="${OPTIONS} --enable-cross-compile --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32"
- EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L../../thirdparty/lib64"
+ OPTIONS="${OPTIONS} --enable-cross-compile --cross-prefix=${cross_prefix} --target-os=mingw32 --pkg-config=pkg-config"
+ EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L../../../thirdparty/lib64"
else
OPTIONS="${OPTIONS} --cpu=i686"
- EXTRA_CFLAGS="${EXTRA_CFLAGS} -mmmx -msse -mfpmath=sse"
- EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L../../thirdparty/lib32"
+ EXTRA_CFLAGS="${EXTRA_CFLAGS} -mmmx -msse -msse2 -mfpmath=sse -mstackrealign"
+ EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L../../../thirdparty/lib32"
fi
- sh ../../ffmpeg/configure --extra-ldflags="${EXTRA_LDFLAGS}" --extra-cflags="${EXTRA_CFLAGS}" ${OPTIONS}
+ sh ../../../ffmpeg/configure --extra-ldflags="${EXTRA_LDFLAGS}" --extra-cflags="${EXTRA_CFLAGS}" ${OPTIONS}
}
build() {
echo Building...
- make -j8 2>&1 | tee make.log
+ make -j$NUMBER_OF_PROCESSORS 2>&1 | tee make.log
## Check the return status and the log to detect possible errors
[ ${PIPESTATUS[0]} -eq 0 ] && ! grep -q -F "rerun configure" make.log
}
configureAndBuild() {
+ cd ${FFMPEG_BUILD_PATH}
## Don't run configure again if it was previously run
- if [ -f config.mak ]; then
+ if [ ../../../ffmpeg/configure -ot config.mak ] &&
+ [ ../../../../build_ffmpeg.sh -ot config.mak ]; then
echo Skipping configure...
else
echo Configuring...
@@ -127,27 +132,19 @@ configureAndBuild() {
## Only if configure succeeded, actually build
if [ ${CONFIGRETVAL} -eq 0 ]; then
build &&
- strip_libs &&
copy_libs
CONFIGRETVAL=$?
fi
+ cd ${BASEDIR}
}
echo Building ffmpeg in GCC ${arch} Release config...
-cd src
-
make_dirs
-out_dir=bin_${archdir}/ffmpeg
-if [ ! -d ${out_dir} ]; then
- mkdir -p ${out_dir}
-fi
-cd ${out_dir}
-
CONFIGRETVAL=0
-if [ "${2}" == "Clean" ]; then
+if [ "${3}" == "Clean" ]; then
clean
CONFIGRETVAL=$?
else
@@ -168,6 +165,4 @@ else
fi
fi
-cd ../../..
-
exit ${CONFIGRETVAL}
diff --git a/src/thirdparty/LAVFilters/build_lavfilters.bat b/src/thirdparty/LAVFilters/build_lavfilters.bat
index 0b3da5b40..dcfde96dd 100755
--- a/src/thirdparty/LAVFilters/build_lavfilters.bat
+++ b/src/thirdparty/LAVFilters/build_lavfilters.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2013-2014 see Authors.txt
+REM (C) 2013-2016 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -18,25 +18,16 @@ REM along with this program. If not, see <http://www.gnu.org/licenses/>.
SETLOCAL
-PUSHD %~dp0
+SET "FILE_DIR=%~dp0"
+PUSHD "%FILE_DIR%"
SET ROOT_DIR=..\..\..
+SET "COMMON=%FILE_DIR%%ROOT_DIR%\common.bat"
-IF EXIST "%ROOT_DIR%\build.user.bat" (
- CALL "%ROOT_DIR%\build.user.bat"
-) ELSE (
- IF DEFINED MINGW32 (SET MPCHC_MINGW32=%MINGW32%) ELSE (GOTO MissingVar)
- IF DEFINED MINGW64 (SET MPCHC_MINGW64=%MINGW64%) ELSE (GOTO MissingVar)
- IF DEFINED MSYS (SET MPCHC_MSYS=%MSYS%) ELSE (GOTO MissingVar)
-)
-
-IF NOT EXIST "%MPCHC_MINGW32%" GOTO MissingVar
-IF NOT EXIST "%MPCHC_MINGW64%" GOTO MissingVar
-IF NOT EXIST "%MPCHC_MSYS%" GOTO MissingVar
-
-SET PATH=%MPCHC_MSYS%\bin;%MPCHC_MINGW32%\bin;%PATH%
-FOR %%G IN (gcc.exe) DO (SET FOUND=%%~$PATH:G)
-IF NOT DEFINED FOUND GOTO MissingVar
+CALL "%COMMON%" :SubSetPath
+IF %ERRORLEVEL% NEQ 0 EXIT /B 1
+CALL "%COMMON%" :SubDoesExist gcc.exe
+IF %ERRORLEVEL% NEQ 0 EXIT /B 1
SET ARG=/%*
SET ARG=%ARG:/=%
@@ -61,7 +52,7 @@ FOR %%G IN (%ARG%) DO (
IF /I "%%G" == "x64" SET "ARCH=x64" & SET /A ARGPL+=1
IF /I "%%G" == "Debug" SET "RELEASETYPE=Debug" & SET /A ARGBC+=1
IF /I "%%G" == "Release" SET "RELEASETYPE=Release" & SET /A ARGBC+=1
- IF /I "%%G" == "VS2013" SET "COMPILER=VS2013" & SET /A ARGCOMP+=1
+ IF /I "%%G" == "VS2015" SET "COMPILER=VS2015" & SET /A ARGCOMP+=1
IF /I "%%G" == "Silent" SET "SILENT=True" & SET /A VALID+=1
IF /I "%%G" == "Nocolors" SET "NOCOLORS=True" & SET /A VALID+=1
)
@@ -74,10 +65,10 @@ IF %VALID% NEQ %INPUT% GOTO UnsupportedSwitch
IF %ARGB% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGB% == 0 (SET "BUILDTYPE=Build")
IF %ARGPL% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGPL% == 0 (SET "ARCH=Both")
IF %ARGBC% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGBC% == 0 (SET "RELEASETYPE=Release")
-IF %ARGCOMP% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGCOMP% == 0 (SET "COMPILER=VS2013")
+IF %ARGCOMP% GTR 1 (GOTO UnsupportedSwitch) ELSE IF %ARGCOMP% == 0 (SET "COMPILER=VS2015")
-IF NOT DEFINED VS120COMNTOOLS GOTO MissingVar
-SET "TOOLSET=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat"
+IF NOT DEFINED VS140COMNTOOLS GOTO MissingVar
+SET "TOOLSET=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat"
SET "BIN_DIR=%ROOT_DIR%\bin"
IF /I "%ARCH%" == "Both" (
@@ -114,11 +105,11 @@ EXIT /B
:End
-IF %ERRORLEVEL% NEQ 0 EXIT /B
+IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
TITLE Compiling LAV Filters %COMPILER% [FINISHED]
SET END_TIME=%TIME%
-CALL :SubGetDuration
-CALL :SubMsg "INFO" "LAV Filters compilation started on %START_DATE%-%START_TIME% and completed on %DATE%-%END_TIME% [%DURATION%]"
+CALL "%COMMON%" :SubGetDuration
+CALL "%COMMON%" :SubMsg "INFO" "LAV Filters compilation started on %START_DATE%-%START_TIME% and completed on %DATE%-%END_TIME% [%DURATION%]"
POPD
ENDLOCAL
EXIT /B
@@ -130,9 +121,9 @@ IF %ERRORLEVEL% NEQ 0 EXIT /B
IF /I "%ARCH%" == "x86" (SET "ARCHVS=Win32") ELSE (SET "ARCHVS=x64")
REM Build FFmpeg
-sh build_ffmpeg.sh %ARCH% %BUILDTYPE%
+sh build_ffmpeg.sh %ARCH% %RELEASETYPE% %BUILDTYPE% %COMPILER%
IF %ERRORLEVEL% NEQ 0 (
- CALL :SubMsg "ERROR" "'sh build_ffmpeg.sh %ARCH% %BUILDTYPE%' failed!"
+ CALL "%COMMON%" :SubMsg "ERROR" "'sh build_ffmpeg.sh %ARCH% %RELEASETYPE% %BUILDTYPE% %COMPILER%' failed!"
EXIT /B
)
@@ -141,9 +132,9 @@ PUSHD src
REM Build LAVFilters
IF /I "%ARCH%" == "x86" (SET "ARCHVS=Win32") ELSE (SET "ARCHVS=x64")
-devenv /nologo LAVFilters.sln /%BUILDTYPE% "%RELEASETYPE%|%ARCHVS%"
+MSBuild.exe LAVFilters.sln /nologo /consoleloggerparameters:Verbosity=minimal /nodeReuse:true /m /t:%BUILDTYPE% /property:Configuration=%RELEASETYPE%;Platform=%ARCHVS%
IF %ERRORLEVEL% NEQ 0 (
- CALL :SubMsg "ERROR" "'devenv /nologo LAVFilters.sln /%BUILDTYPE% "%RELEASETYPE%-%ARCHVS%"' failed!"
+ CALL "%COMMON%" :SubMsg "ERROR" "'MSBuild.exe LAVFilters.sln /nologo /consoleloggerparameters:Verbosity=minimal /nodeReuse:true /m /t:%BUILDTYPE% /property:Configuration=%RELEASETYPE%;Platform=%ARCHVS%' failed!"
EXIT /B
)
@@ -163,16 +154,11 @@ IF /I "%RELEASETYPE%" == "Debug" (
IF /I "%ARCH%" == "x64" (
SET "DESTFOLDER=%DESTFOLDER%\LAVFilters64"
- SET "GCC_PREFIX=x86_64-w64-mingw32-"
) ELSE (
SET "DESTFOLDER=%DESTFOLDER%\LAVFilters"
)
IF /I "%BUILDTYPE%" == "Build" (
- REM Build GCCInfo
- %GCC_PREFIX%gcc -c -O2 GCCInfo.c -o src\bin_%ARCHVS%\ffmpeg\GCCInfo.o
- REM ERRORLEVEL can't be checked because the variable is updated only when exiting the IF
-
REM Copy LAVFilters files to MPC-HC output directory
IF NOT EXIST %DESTFOLDER% MD %DESTFOLDER%
@@ -200,7 +186,7 @@ EXIT /B
ECHO Not all build dependencies were found.
ECHO.
ECHO See "%ROOT_DIR%\docs\Compilation.txt" for more information.
-CALL :SubMsg "ERROR" "LAV Filters compilation failed!" & EXIT /B 1
+CALL "%COMMON%" :SubMsg "ERROR" "LAV Filters compilation failed!" & EXIT /B 1
:UnsupportedSwitch
@@ -210,86 +196,21 @@ ECHO.
ECHO "%~nx0 %*"
ECHO.
ECHO Run "%~nx0 help" for details about the commandline switches.
-CALL :SubMsg "ERROR" "LAV Filters compilation failed!" & EXIT /B 1
+CALL "%COMMON%" :SubMsg "ERROR" "LAV Filters compilation failed!" & EXIT /B 1
:ShowHelp
TITLE %~nx0 Help
ECHO.
ECHO Usage:
-ECHO %~nx0 [Clean^|Build^|Rebuild] [x86^|x64^|Both] [Debug^|Release] [VS2013]
+ECHO %~nx0 [Clean^|Build^|Rebuild] [x86^|x64^|Both] [Debug^|Release] [VS2015]
ECHO.
ECHO Notes: You can also prefix the commands with "-", "--" or "/".
ECHO The arguments are not case sensitive and can be ommitted.
ECHO. & ECHO.
ECHO Executing %~nx0 without any arguments will use the default ones:
-ECHO "%~nx0 Build Both Release VS2013"
+ECHO "%~nx0 Build Both Release VS2015"
ECHO.
POPD
ENDLOCAL
EXIT /B
-
-
-:SubMsg
-ECHO. & ECHO ------------------------------
-IF /I "%~1" == "ERROR" (
- CALL :SubColorText "0C" "[%~1]" "%~2"
-) ELSE IF /I "%~1" == "INFO" (
- CALL :SubColorText "0A" "[%~1]" "%~2"
-) ELSE IF /I "%~1" == "WARNING" (
- CALL :SubColorText "0E" "[%~1]" "%~2"
-)
-ECHO ------------------------------ & ECHO.
-IF /I "%~1" == "ERROR" (
- IF NOT DEFINED SILENT (
- ECHO Press any key to exit...
- PAUSE >NUL
- )
- POPD
- ENDLOCAL
- EXIT /B 1
-) ELSE (
- EXIT /B
-)
-
-
-:SubColorText
-IF DEFINED NOCOLORS ECHO %~2 %~3 & EXIT /B
-FOR /F "tokens=1,2 delims=#" %%G IN (
- '"PROMPT #$H#$E# & ECHO ON & FOR %%H IN (1) DO REM"') DO (
- SET "DEL=%%G")
-<NUL SET /p ".=%DEL%" > "%~2"
-FINDSTR /v /a:%1 /R ".18" "%~2" NUL
-DEL "%~2" > NUL 2>&1
-REM The space in the following ECHO is intentional
-ECHO %~3
-EXIT /B
-
-
-:SubGetDuration
-SET START_TIME=%START_TIME: =%
-SET END_TIME=%END_TIME: =%
-
-FOR /F "tokens=1-4 delims=:.," %%G IN ("%START_TIME%") DO (
- SET /A "STARTTIME=(100%%G %% 100) * 360000 + (100%%H %% 100) * 6000 + (100%%I %% 100) * 100 + (100%%J %% 100)"
-)
-
-FOR /F "tokens=1-4 delims=:.," %%G IN ("%END_TIME%") DO (
- SET /A "ENDTIME=(100%%G %% 100) * 360000 + (100%%H %% 100) * 6000 + (100%%I %% 100) * 100 + (100%%J %% 100)"
-)
-
-SET /A DURATION=%ENDTIME%-%STARTTIME%
-IF %ENDTIME% LSS %STARTTIME% SET /A "DURATION+=24 * 360000"
-
-SET /A DURATIONH=%DURATION% / 360000
-SET /A DURATIONM=(%DURATION% - %DURATIONH%*360000) / 6000
-SET /A DURATIONS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000) / 100
-SET /A DURATIONHS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000 - %DURATIONS%*100)*10
-
-IF %DURATIONH% EQU 0 (SET DURATIONH=) ELSE (SET DURATIONH=%DURATIONH%h )
-IF %DURATIONM% EQU 0 (SET DURATIONM=) ELSE (SET DURATIONM=%DURATIONM%m )
-IF %DURATIONS% EQU 0 (SET DURATIONS=) ELSE (SET DURATIONS=%DURATIONS%s )
-IF %DURATIONHS% EQU 0 (SET DURATIONHS=) ELSE (SET DURATIONHS=%DURATIONHS%ms)
-
-SET "DURATION=%DURATIONH%%DURATIONM%%DURATIONS%%DURATIONHS%"
-EXIT /B
diff --git a/src/thirdparty/LAVFilters/src b/src/thirdparty/LAVFilters/src
-Subproject 7ffa7652ab6952ac46701133408858b39dc7eca
+Subproject d6dc56670ffde07eb0b4c57248544fcd9bbcb2d
diff --git a/src/thirdparty/LCDUI/LCDConnection.cpp b/src/thirdparty/LCDUI/LCDConnection.cpp
index 5086f735e..b6821b859 100644
--- a/src/thirdparty/LCDUI/LCDConnection.cpp
+++ b/src/thirdparty/LCDUI/LCDConnection.cpp
@@ -21,7 +21,8 @@
#include "LCDUI.h"
// Add the lgLcd.lib to the linker
-#pragma comment(lib, "lgLcd.lib")
+
+// #pragma comment(lib, "lgLcd.lib")
// to keep track of clients that use multiple CLCDOutput instances
// within the same app
diff --git a/src/thirdparty/LCDUI/LCDStreamingText.h b/src/thirdparty/LCDUI/LCDStreamingText.h
index beb3d10ca..d4c9880d7 100644
--- a/src/thirdparty/LCDUI/LCDStreamingText.h
+++ b/src/thirdparty/LCDUI/LCDStreamingText.h
@@ -27,7 +27,6 @@
#include "LCDText.h"
#include <string>
-using namespace std;
class CLCDStreamingText: public CLCDCollection
{
diff --git a/src/thirdparty/LCDUI/LCDUI.vcxproj b/src/thirdparty/LCDUI/LCDUI.vcxproj
index 6cccda94d..ac7966c49 100644
--- a/src/thirdparty/LCDUI/LCDUI.vcxproj
+++ b/src/thirdparty/LCDUI/LCDUI.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,94 +26,31 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros">
<NOMINMAX>False</NOMINMAX>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <EnablePREfast>false</EnablePREfast>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeaderFile>LCDUI.h</PrecompiledHeaderFile>
- <DisableSpecificWarnings>4995;%(DisableSpecificWarnings)</DisableSpecificWarnings>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>lgLcd.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <EnablePREfast>false</EnablePREfast>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeaderFile>LCDUI.h</PrecompiledHeaderFile>
- <DisableSpecificWarnings>4995;%(DisableSpecificWarnings)</DisableSpecificWarnings>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>lgLcd.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)lib64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <EnablePREfast>false</EnablePREfast>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeaderFile>LCDUI.h</PrecompiledHeaderFile>
- <DisableSpecificWarnings>4995;%(DisableSpecificWarnings)</DisableSpecificWarnings>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>lgLcd.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <EnablePREfast>false</EnablePREfast>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>LCDUI.h</PrecompiledHeaderFile>
- <DisableSpecificWarnings>4995;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Lib>
<AdditionalDependencies>lgLcd.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(SolutionDir)lib64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories Condition="'$(Platform)'=='Win32'">$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories Condition="'$(Platform)'=='x64'">$(SolutionDir)lib64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/src/thirdparty/LCDUI/LCDUI.vcxproj.filters b/src/thirdparty/LCDUI/LCDUI.vcxproj.filters
index fc865cf2c..f0c9f3709 100644
--- a/src/thirdparty/LCDUI/LCDUI.vcxproj.filters
+++ b/src/thirdparty/LCDUI/LCDUI.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
diff --git a/src/thirdparty/MediaInfo/License.html b/src/thirdparty/MediaInfo/License.html
deleted file mode 100644
index 7b94ee7b3..000000000
--- a/src/thirdparty/MediaInfo/License.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
- <title>MediaInfo(Lib) License</title>
-</head>
-
-<body>
-<div>
- <h3 style="text-align: center">MediaInfo(Lib) License</h3>
- <p>
- Copyright (c) 2002-2014 <a href="mailto:Info@MediaArea.net">MediaArea.net SARL</a>. All rights reserved.
- </p>
- <p>
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
- </p>
- <ul>
- <li>Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.</li>
- <li>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.</li>
- </ul>
- <p>
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &ldquo;AS IS&rdquo;
- 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.
- </p>
-</div>
-
-<hr/>
-<div>
-<p>Alternate license for redistributions of the library in binary form:<br/>
-Redistributions in binary form must reproduce the following sentence (including the link to the website) in the documentation and/or other materials provided with the distribution.<br/>
-This product uses <a href="http://mediaarea.net/MediaInfo">MediaInfo</a> library, Copyright (c) 2002-2014 <a href="mailto:Info@MediaArea.net">MediaArea.net SARL</a>.</p>
-</div>
-
-<hr/>
-<div>
- <h3 style="text-align: center">Third party libraries</h3>
- <p>
- The software relies on third party libraries. Such libraries have their own license:
- </p>
- <ul>
- <li>C++ standard library: <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01s02.html">libstdc++</a>,
- <a href="http://llvm.org/docs/DeveloperPolicy.html#license">libc++</a>,
- <a href="http://msdn.microsoft.com/en-us/library/vstudio/ms235299.aspx">Visual C++ library</a> or any other C++ standard library.
- </li>
- <li>Base classes library: ZenLib, (c) MediaArea.net SARL, zlib license.</li>
- <li>GUI (optional): <a href="http://qt-project.org/products/licensing">Qt</a>.</li>
- <li>GUI (optional): <a href="http://www.wxwidgets.org/about/newlicen.htm">WxWidgets</a>.</li>
- <li>XML parser (optional): <a href="http://www.grinninglizard.com/tinyxml2docs/index.html">TinyXML-2</a>.</li>
- <li>gzip decompression routine (optional): <a href="http://www.gzip.org/zlib/zlib_license.html">zlib</a>.</li>
- <li>FTP, FTPS, SFTP, HTTP, HTTPS (optional): <a href="http://curl.haxx.se/docs/copyright.html">libcurl</a>.</li>
- <li>AES (optional): <a href="http://brgladman.org/oldsite/AES/">AES routines from Brian Gladman</a>.</li>
- <li>MMS (optional): <a href="http://sourceforge.net/projects/libmms/">libmms</a>.</li>
- </ul>
-</div>
-
-<hr/>
-<div>
- <h3 style="text-align: center">Contributors</h3>
- <ul>
- <li>Jérôme Martinez (main developper)</li>
- <li>Lionel Duchateau (odd formats support)</li>
- <li>XhmikosR from MPC-HC Team (tests)</li>
- <li>FlylinkDC++ team (tests, crash corrections)</li>
- <li>Max Pozdeev (former native Mac GUI developper)</li>
- </ul>
-</div>
-
-</body>
-</html>
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_7z.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_7z.cpp
deleted file mode 100644
index e85e241fa..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_7z.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_7Z_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_7z.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_7z::FileHeader_Begin()
-{
- // Minimum buffer size
- if (Buffer_Size<6)
- return false; // Must wait for more data
-
- // Testing
- if (Buffer[0]!=0x37 // "7z...."
- || Buffer[1]!=0x7A
- || Buffer[2]!=0xBC
- || Buffer[3]!=0xAF
- || Buffer[4]!=0x27
- || Buffer[5]!=0x1C)
- {
- Reject("7-Zip");
- return false;
- }
-
- // All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_7z::Read_Buffer_Continue()
-{
- Skip_B6( "Magic");
- Skip_XX(File_Size-6, "Data");
-
- FILLING_BEGIN();
- Accept("7-Zip");
-
- Fill(Stream_General, 0, General_Format, "7-Zip");
-
- Finish("7-Zip");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_7Z_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_7z.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_7z.h
deleted file mode 100644
index e5df6c2dd..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_7z.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about 7z files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_7zH
-#define MediaInfo_File_7zH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_7z
-//***************************************************************************
-
-class File_7z : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Ace.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Ace.cpp
deleted file mode 100644
index 0acd7ac67..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Ace.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ACE_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_Ace.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ace::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<7)
- return false; //Must wait for more data
-
- if (Buffer[0]!=0x2A //"**ACE**"
- || Buffer[1]!=0x2A
- || Buffer[2]!=0x41
- || Buffer[3]!=0x43
- || Buffer[4]!=0x45
- || Buffer[5]!=0x2A
- || Buffer[6]!=0x2A)
- {
- Reject("Ace");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ace::Read_Buffer_Continue()
-{
- //Parsing
- Skip_B7( "Magic");
- Skip_XX(File_Size-7, "Data");
-
- FILLING_BEGIN();
- Accept("Ace");
-
- Fill(Stream_General, 0, General_Format, "ACE");
-
- Finish("Ace");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_ACE_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Ace.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Ace.h
deleted file mode 100644
index a1ea0cfd3..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Ace.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ACE files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_AceH
-#define MediaInfo_File_AceH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Ace
-//***************************************************************************
-
-class File_Ace : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Bzip2.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Bzip2.cpp
deleted file mode 100644
index 0094c089a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Bzip2.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_BZIP2_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_Bzip2.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Bzip2::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<2)
- return false; //Must wait for more data
-
- if (Buffer[0]!=0x42 //"BZ"
- || Buffer[1]!=0x5A)
- {
- Reject("Bzip2");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Bzip2::Read_Buffer_Continue()
-{
- //Parsing
- Skip_B7( "Magic");
- Skip_XX(File_Size-2, "Data");
-
- FILLING_BEGIN();
- Accept("Bzip2");
-
- Fill(Stream_General, 0, General_Format, "BZip2");
-
- Finish("Bzip2");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_BZIP2_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Bzip2.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Bzip2.h
deleted file mode 100644
index 829a8d632..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Bzip2.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Bzip2 files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Bzip2H
-#define MediaInfo_File_Bzip2H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Bzip2
-//***************************************************************************
-
-class File_Bzip2 : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Elf.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Elf.cpp
deleted file mode 100644
index c4e119005..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Elf.cpp
+++ /dev/null
@@ -1,234 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ELF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_Elf.h"
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Elf_osabi(int8u osabi)
-{
- switch (osabi)
- {
- case 0 : return "UNIX System V ABI";
- case 1 : return "HP-UX";
- case 2 : return "NetBSD";
- case 3 : return "Linux";
- case 6 : return "Sun Solaris";
- case 7 : return "IBM AIX";
- case 8 : return "SGI Irix";
- case 9 : return "FreeBSD";
- case 10 : return "Compaq TRU64 UNIX";
- case 11 : return "Novell Modesto";
- case 12 : return "OpenBSD";
- case 97 : return "ARM";
- case 255 : return "Standalone";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Elf_type(int16u type)
-{
- switch (type)
- {
- case 1 : return "Relocatable";
- case 2 : return "Executable";
- case 3 : return "Shared object";
- case 4 : return "Core";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Elf_machine(int16u machine)
-{
- switch (machine)
- {
- case 1 : return "AT&T WE 32100";
- case 2 : return "SUN SPARC";
- case 3 : return "Intel i386";
- case 4 : return "Motorola m68k";
- case 5 : return "Motorola m88k";
- case 7 : return "Intel i860";
- case 8 : return "MIPS R3000";
- case 9 : return "IBM System/370";
- case 10 : return "MIPS R3000";
-
- case 15 : return "HPPA";
- case 17 : return "Fujitsu VPP500";
- case 18 : return "Sun v8plus";
- case 19 : return "Intel i960";
- case 20 : return "PowerPC";
- case 21 : return "PowerPC 64-bit";
- case 22 : return "IBM S390";
-
- case 36 : return "NEC V800";
- case 37 : return "Fujitsu FR20";
- case 38 : return "TRW RH-32";
- case 39 : return "Motorola RCE";
- case 40 : return "ARM";
- case 41 : return "DEC Alpha";
- case 42 : return "Hitachi SH";
- case 43 : return "SPARC v9 64-bit";
- case 44 : return "Siemens Tricore";
- case 45 : return "Argonaut RISC Core";
- case 46 : return "Hitachi H8/300";
- case 47 : return "Hitachi H8/300H";
- case 48 : return "Hitachi H8S";
- case 49 : return "Hitachi H8/500";
- case 50 : return "Intel IA64";
- case 51 : return "Stanford MIPS-X";
- case 52 : return "Motorola Coldfire";
- case 53 : return "Motorola M68HC12";
- case 54 : return "Fujitsu MMA";
- case 55 : return "Siemens PCP";
- case 56 : return "Sony nCPU";
- case 57 : return "Denso NDR1";
- case 58 : return "Motorola Start*Core";
- case 59 : return "Toyota ME16";
- case 60 : return "STMicroelectronic ST100";
- case 61 : return "Advanced Logic Corp. Tinyj";
- case 62 : return "AMD x86-64";
- case 63 : return "Sony DSP";
-
- case 66 : return "Siemens FX66";
- case 67 : return "STMicroelectronics ST9+";
- case 68 : return "STmicroelectronics ST7";
- case 69 : return "Motorola MC68HC16";
- case 70 : return "Motorola MC68HC11";
- case 71 : return "Motorola MC68HC08";
- case 72 : return "Motorola MC68HC05";
- case 73 : return "Silicon Graphics SVx";
- case 74 : return "STMicroelectronics ST19";
- case 75 : return "DEC VAX";
- case 76 : return "Axis Communications 32-bit";
- case 77 : return "Infineon Technologies 32-bit";
- case 78 : return "Element 14 64-bit";
- case 79 : return "LSI Logic 16-bit";
- case 80 : return "Donald Knuth's educational 64-bit";
- case 81 : return "Harvard University machine-independent";
- case 82 : return "SiTera Prism";
- case 83 : return "Atmel AVR 8-bit";
- case 84 : return "Fujitsu FR30";
- case 85 : return "Mitsubishi D10V";
- case 86 : return "Mitsubishi D30V";
- case 87 : return "NEC v850";
- case 88 : return "Mitsubishi M32R";
- case 89 : return "Matsushita MN10300";
- case 90 : return "Matsushita MN10200";
- case 91 : return "picoJava";
- case 92 : return "OpenRISC 32-bit";
- case 93 : return "ARC Cores Tangent-A5";
- case 94 : return "Tensilica Xtensa";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Elf::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- if (Buffer[0]!=0x7F //".ELF"
- || Buffer[1]!=0x45
- || Buffer[2]!=0x4C
- || Buffer[3]!=0x46)
- {
- Reject("ELF");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Elf::Read_Buffer_Continue()
-{
- //Parsing
- int32u version4=(int32u)-1;
- int16u type=(int16u)-1, machine=(int16u)-1;
- int8u classs, data, version1, osabi, abiversion;
- Skip_C4( "magic");
- Get_L1 (classs, "class");
- Get_L1 (data, "data");
- Get_L1 (version1, "version");
- Get_L1 (osabi, "osabi"); Param_Info1(Elf_osabi(osabi));
- Get_L1 (abiversion, "abiversion");
- Skip_XX(7, "reserved");
- if (data==1) //LE
- {
- Get_L2 (type, "type"); Param_Info1(Elf_type(type));
- Get_L2 (machine, "machine"); Param_Info1(Elf_machine(machine));
- Get_L4 (version4, "version");
- }
- if (data==2) //BE
- {
- Get_B2 (type, "type"); Param_Info1(Elf_type(type));
- Get_B2 (machine, "machine"); Param_Info1(Elf_machine(machine));
- Get_B4 (version4, "version");
- }
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- FILLING_BEGIN();
- if (version4!=(int32u)-1 && version1!=version4)
- {
- Reject("ELF");
- return;
- }
-
- Accept("ELF");
-
- Fill(Stream_General, 0, General_Format, "ELF");
- if (type!=(int16u)-1)
- Fill(Stream_General, 0, General_Format_Profile, Elf_type(type));
- if (machine!=(int16u)-1)
- Fill(Stream_General, 0, General_Format_Profile, Elf_machine(machine));
-
- //No need of more
- Finish("ELF");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_ELF_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Elf.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Elf.h
deleted file mode 100644
index 5ef988370..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Elf.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ELF files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ElfH
-#define MediaInfo_File_ElfH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Elf
-//***************************************************************************
-
-class File_Elf : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Gzip.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Gzip.cpp
deleted file mode 100644
index 98e15e98f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Gzip.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_GZIP_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_Gzip.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Gzip::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<2)
- return false; //Must wait for more data
-
- if (Buffer[0]!=0x1F
- || Buffer[1]!=0x8B)
- {
- Reject("Gzip");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Gzip::Read_Buffer_Continue()
-{
- //Parsing
- int8u CM;
- Skip_B2( "IDentification");
- Get_B1 (CM, "Compression Method");
- Skip_B1( "FLaGs");
- Skip_B4( "Modified TIME");
- Skip_XX(File_Size-10, "Data");
-
- FILLING_BEGIN();
- //Filling
- Accept("Gzip");
-
- Fill(Stream_General, 0, General_Format, "GZip");
- Fill(Stream_General, 0, General_Format_Profile, "deflate");
-
- Finish("Gzip");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_GZIP_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Gzip.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Gzip.h
deleted file mode 100644
index b4b106f9e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Gzip.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Gzip files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_GzipH
-#define MediaInfo_File_GzipH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Gzip
-//***************************************************************************
-
-class File_Gzip : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Iso9660.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Iso9660.cpp
deleted file mode 100644
index 7b5026989..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Iso9660.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_7Z_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_Iso9660.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Iso9660::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<65536)
- return false; //Must wait for more data
-
- if (CC6(Buffer+32768)!=0x014344303031LL) //"Iso9660...."
- {
- Reject("ISO 9660");
- return false;
- }
-
- //All should be OK...
- Accept("ISO 9660");
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Iso9660::Read_Buffer_Continue()
-{
- Skip_XX(32768, "System Area");
- Primary_Volume_Descriptor();
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Format, "ISO 9660");
-
- Finish("ISO 9660");
- FILLING_END();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Iso9660::Primary_Volume_Descriptor()
-{
- int32u Volume_Space_Size;
- Element_Begin1("Volume_Descriptor");
- Skip_B1("Volume Descriptor Type");
- Skip_Local(5,"Standard Identifier");
- Skip_B1("Volume Descriptor Version");
- Skip_B1("Unused field");
- Skip_Local(32,"System Identifier");
- Skip_Local(32,"Volume Identifier");
- Skip_XX(8,"Unused field");
- Get_D4(Volume_Space_Size, "Volume Space Size"); Param_Info2(Volume_Space_Size*(int64u)2048, " bytes");
- Skip_XX(32,"Unused field");
- Skip_B4("Volume Set Size");
- Skip_B4("Volume Sequence Number");
- Skip_B4("Logical Block Size");
- Skip_B8("Path Table Size");
- Skip_B4("Location of Occurrence of Type L Path Table");
- Skip_B4("Location of Optional Occurrence of Type L Path Table");
- Skip_B4("Location of Occurrence of Type M Path Table");
- Skip_B4("Location of Optional Occurrence of Type M Path Table");
- Skip_Local(34,"Directory Record for Root Directory");
- Skip_Local(128,"Volume Set Identifier");
- Skip_Local(128,"Publisher Identifier");
- Skip_Local(128,"Data Preparer Identifier");
- Skip_Local(128,"Application Identifier");
- Skip_Local(37,"Copyright File Identifier");
- Skip_Local(37,"Abstract File Identifier");
- Skip_Local(37,"Bibliographic File Identifier");
- Skip_XX(17,"Volume Creation Date and Time");
- Element_End0();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_7Z_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Iso9660.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Iso9660.h
deleted file mode 100644
index 8b5b0555a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Iso9660.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Iso9660 files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Iso9660H
-#define MediaInfo_File_Iso9660H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Iso9660
-//***************************************************************************
-
-class File_Iso9660 : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Elements
- void Primary_Volume_Descriptor();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Mz.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Mz.cpp
deleted file mode 100644
index 742373758..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Mz.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MZ_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_Mz.h"
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Mz_Machine(int16u Machine)
-{
- switch (Machine)
- {
- case 0x014D : return "Intel i860";
- case 0x014C : return "Intel i386";
- case 0x0162 : return "MIPS R3000";
- case 0x0166 : return "MIPS R4000";
- case 0x0183 : return "DEC Alpha";
- case 0x0200 : return "Intel IA64";
- case 0x8664 : return "AMD x86-64";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mz::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<2)
- return false; //Must wait for more data
-
- if (Buffer[0]!=0x4D //"MZ"
- || Buffer[1]!=0x5A)
- {
- Reject("MZ");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mz::Read_Buffer_Continue()
-{
- //Parsing
- int32u lfanew;
- Element_Begin1("MZ");
- Skip_C2( "magic");
- Skip_L2( "cblp");
- Skip_L2( "cp");
- Skip_L2( "crlc");
- Skip_L2( "cparhdr");
- Skip_L2( "minalloc");
- Skip_L2( "maxalloc");
- Skip_L2( "ss");
- Skip_L2( "sp");
- Skip_L2( "csum");
- Skip_L2( "ip");
- Skip_L2( "cs");
- Skip_L2( "lsarlc");
- Skip_L2( "ovno");
- Skip_L2( "res");
- Skip_L2( "res");
- Skip_L2( "res");
- Skip_L2( "res");
- Skip_L2( "oemid");
- Skip_L2( "oeminfo");
- Skip_L2( "res2");
- Skip_L2( "res2");
- Skip_L2( "res2");
- Skip_L2( "res2");
- Skip_L2( "res2");
- Skip_L2( "res2");
- Skip_L2( "res2");
- Skip_L2( "res2");
- Skip_L2( "res2");
- Skip_L2( "res2");
- Get_L4 (lfanew, "lfanew");
-
- //Computing
- if (lfanew>Element_Offset)
- {
- Skip_XX(lfanew-Element_Offset, "MZ data");
- Element_End0();
- }
- if (Element_Offset>lfanew)
- {
- Element_End0();
- Element_Offset=lfanew; //Multi usage off the first bytes
- }
-
- //Parsing
- int32u Signature, TimeDateStamp=0;
- int16u Machine=0, Characteristics=0;
- Peek_B4(Signature);
- if (Signature==0x50450000) //"PE"
- {
- Element_Begin1("PE");
- Skip_C4( "Header");
- Get_L2 (Machine, "Machine"); Param_Info1(Mz_Machine(Machine));
- Skip_L2( "NumberOfSections");
- Get_L4 (TimeDateStamp, "TimeDateStamp"); Param_Info1(Ztring().Date_From_Seconds_1970(TimeDateStamp));
- Skip_L4( "PointerToSymbolTable");
- Skip_L4( "NumberOfSymbols");
- Skip_L2( "SizeOfOptionalHeader");
- Get_L2 (Characteristics, "Characteristics");
- Element_End0();
- }
-
- FILLING_BEGIN();
- Accept("MZ");
-
- Fill(Stream_General, 0, General_Format, "MZ");
- if (Characteristics&0x2000)
- Fill(Stream_General, 0, General_Format_Profile, "DLL");
- else if (Characteristics&0x0002)
- Fill(Stream_General, 0, General_Format_Profile, "Executable");
- Fill(Stream_General, 0, General_Format_Profile, Mz_Machine(Machine));
- if (TimeDateStamp)
- Fill(Stream_General, 0, General_Encoded_Date, Ztring().Date_From_Seconds_1970(TimeDateStamp));
-
- //No more need data
- Finish("MZ");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_MZ_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Mz.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Mz.h
deleted file mode 100644
index be344d6d7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Mz.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MZ files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_MzH
-#define MediaInfo_File_MzH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Mz
-//***************************************************************************
-
-class File_Mz : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Rar.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Rar.cpp
deleted file mode 100644
index 1b198fe3a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Rar.cpp
+++ /dev/null
@@ -1,322 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_RAR_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_Rar.h"
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-
-//---------------------------------------------------------------------------
-const char* Rar_host_os[6]=
-{
- "MS DOS",
- "OS/2",
- "Win32",
- "Unix",
- "Mac OS",
- "BeOS"
-};
-
-//---------------------------------------------------------------------------
-const char* Rar_packing_method[6]=
-{
- "storing",
- "fastest compression",
- "fast compression",
- "normal compression",
- "good compression",
- "best compression"
-};
-
-//---------------------------------------------------------------------------
-const char* Rar_HEADER_TYPE(int8u HEADER_TYPE)
-{
- switch(HEADER_TYPE)
- {
- case 0x72 : return "marker block";
- case 0x73 : return "archive header";
- case 0x74 : return "file header";
- case 0x75 : return "old style comment header";
- case 0x76 : return "old style authenticity information";
- case 0x77 : return "old style subblock";
- case 0x78 : return "old style recovery record";
- case 0x79 : return "old style authenticity informatio";
- case 0x7A : return "subblock";
- case 0x7B : return "end of file";
- default : return "";
- }
-};
-
-//---------------------------------------------------------------------------
-Ztring Rar_version_number(int8u byte)
-{
- //Version number is encoded as 10 * Major version + minor version.
- return Ztring::ToZtring(byte/10)+Ztring(".")+Ztring::ToZtring(byte%10);
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Rar::File_Rar()
-:File__Analyze()
-{
- //Configuration
- DataMustAlwaysBeComplete=false;
-}
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Rar::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<7)
- return false; //Must wait for more data
-
- if (Buffer[0]!=0x52 //"Rar!"
- || Buffer[1]!=0x61
- || Buffer[2]!=0x72
- || Buffer[3]!=0x21
- || Buffer[4]!=0x1A
- || Buffer[5]!=0x07
- || Buffer[6]!=0x00)
- {
- Reject("RAR");
- return false;
- }
-
- state=0;
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Rar::Header_Begin()
-{
- if (Element_Offset+7>Element_Size)
- return false; //Not enough data for header size
- int16u HEAD_SIZE=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset+5);
-
- if (Element_Offset+HEAD_SIZE>Element_Size)
- return false; //Not enough data for header
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Rar::Header_Parse()
-{
- //Config
- HIGH_PACK_SIZE=0;
- PACK_SIZE=0;
-
- //Parsing
- int16u HEAD_SIZE;
- Skip_L2( "HEAD_CRC"); //CRC of total block or block part
- Get_L1 (HEAD_TYPE, "HEAD_TYPE"); //Block type
- Get_L2 (HEAD_FLAGS, "HEAD_FLAGS");
- Header_Parse_Flags();
- Get_L2 (HEAD_SIZE, "HEAD_SIZE");
- Header_Parse_Content();
- Skip_XX(HEAD_SIZE-(size_t)Element_Offset, "REST OF HEADER");
-
- //Filling
- Header_Fill_Size(HEAD_SIZE+HIGH_PACK_SIZE*0x100000000LL+PACK_SIZE);
- Header_Fill_Code(HEAD_TYPE, Rar_HEADER_TYPE(HEAD_TYPE));
-}
-
-//---------------------------------------------------------------------------
-void File_Rar::Header_Parse_Flags()
-{
- switch (HEAD_TYPE)
- {
- case 0x73 : Header_Parse_Flags_73(); break;
- case 0x74 : Header_Parse_Flags_74(); break;
- default : Header_Parse_Flags_XX();
- }
-}
-
-//---------------------------------------------------------------------------
-// archive header
-void File_Rar::Header_Parse_Flags_73()
-{
- Skip_Flags(HEAD_FLAGS, 1, "Volume attribute (archive volume)");
- Skip_Flags(HEAD_FLAGS, 2, "Archive comment present");
- Skip_Flags(HEAD_FLAGS, 3, "Archive lock attribute");
- Skip_Flags(HEAD_FLAGS, 4, "Solid attribute (solid archive)");
- Skip_Flags(HEAD_FLAGS, 5, "New volume naming scheme"); // (\'volname.partN.rar\')
- Skip_Flags(HEAD_FLAGS, 6, "Authenticity information present");
- Skip_Flags(HEAD_FLAGS, 7, "Recovery record present");
- Skip_Flags(HEAD_FLAGS, 8, "Block headers are encrypted");
- Skip_Flags(HEAD_FLAGS, 9, "First volume (set only by RAR 3.0 and later)");
- Get_Flags (HEAD_FLAGS, 15, add_size, "ADD_SIZE present");
-}
-
-//---------------------------------------------------------------------------
-// file header
-void File_Rar::Header_Parse_Flags_74()
-{
- Skip_Flags(HEAD_FLAGS,0, "file continued from previous volume");
- Skip_Flags(HEAD_FLAGS,1, "file continued in next volume");
- Skip_Flags(HEAD_FLAGS,2, "file encrypted with password");
- Skip_Flags(HEAD_FLAGS,3, "file comment present");
- Skip_Flags(HEAD_FLAGS,4, "information from previous files is used"); // (solid flag)
- // bits 7 6 5 (for RAR 2.0 and later)
- // 0 0 0 - dictionary size 64 KB
- // 0 0 1 - dictionary size 128 KB
- // 0 1 0 - dictionary size 256 KB
- // 0 1 1 - dictionary size 512 KB
- // 1 0 0 - dictionary size 1024 KB
- // 1 0 1 - dictionary size 2048 KB
- // 1 1 0 - dictionary size 4096 KB
- // 1 1 1 - file is directory
- Get_Flags (HEAD_FLAGS, 8, high_fields, "HIGH_PACK_SIZE and HIGH_UNP_SIZE fields");
- Get_Flags (HEAD_FLAGS, 9, usual_or_utf8, "FILE_NAME contains usual and encoded unicode");
- Get_Flags (HEAD_FLAGS, 10, salt, "SALT present");
- Skip_Flags(HEAD_FLAGS, 11, "Version flag.");
- Get_Flags (HEAD_FLAGS, 12, exttime, "Extended time field present");
- Get_Flags (HEAD_FLAGS, 15, add_size, "ADD_SIZE present");
-}
-
-//---------------------------------------------------------------------------
-// Generic
-void File_Rar::Header_Parse_Flags_XX()
-{
- Get_Flags (HEAD_FLAGS, 15, add_size, "ADD_SIZE present");
-}
-
-//---------------------------------------------------------------------------
-void File_Rar::Header_Parse_Content()
-{
- switch (HEAD_TYPE)
- {
- case 0x73 : Header_Parse_Content_73(); break;
- case 0x74 : Header_Parse_Content_74(); break;
- default : Header_Parse_Content_XX(); break;
- }
-}
-
-//---------------------------------------------------------------------------
-// archive header
-void File_Rar::Header_Parse_Content_73()
-{
- Skip_L2( "RESERVED_1");
- Skip_L4( "RESERVED_2");
-}
-
-//---------------------------------------------------------------------------
-// file header
-void File_Rar::Header_Parse_Content_74()
-{
- int16u name_size;
- int8u HOST_OS, METHOD, UNP_VER;
- Get_L4 (PACK_SIZE, "PACK_SIZE"); //Compressed file size
- Skip_L4( "UNP_SIZE"); //Uncompressed file size
- Get_L1 (HOST_OS, "HOST_OS"); Param_Info1((HOST_OS<6?Rar_host_os[HOST_OS]:"Unknown"));
- Skip_L4( "FILE_CRC");
- Skip_L4( "FTIME"); //Date and time in standard MS DOS format
- Get_L1 (UNP_VER, "UNP_VER"); Param_Info1(Rar_version_number(UNP_VER)); //RAR version needed to extract file
- Get_L1 (METHOD, "METHOD"); Param_Info1(((METHOD>=0x30)&&(METHOD<0x36)?Rar_packing_method[METHOD-0x30]:"Unknown"));
- Get_L2 (name_size, "NAME_SIZE"); //File name size
- Skip_L4( "ATTR"); //File attributes
- if(high_fields)
- {
- Get_L4 (HIGH_PACK_SIZE, "HIGH_PACK_SIZE"); //High 4 bytes of 64 bit value of compressed file size.
- Skip_L4( "HIGH_UNP_SIZE"); //High 4 bytes of 64 bit value of uncompressed file size.
- }
- else
- HIGH_PACK_SIZE=0;
- if (usual_or_utf8)
- {
- //Must test the content before reading, looking fore zero byte
- if (Element_Offset+name_size>Element_Size)
- {
- Skip_XX(Element_Size-Element_Offset, "Error");
- return;
- }
- int64u ZeroPos=0;
- while (ZeroPos<name_size)
- {
- if (Buffer[Buffer_Offset+(size_t)(Element_Offset+ZeroPos)]==0)
- break; //Found
- ZeroPos++;
- }
-
- if (ZeroPos==name_size)
- Skip_UTF8(name_size, "FILE_NAME");
- else
- {
- Skip_Local(ZeroPos, "FILE_NAME"); //Up to ZeroPos
- Skip_L1( "Zero");
- Skip_UTF16L(name_size-(ZeroPos+1), "FILE_NAME"); //Spec is not precise, "Unicode" without encoding format (character size, endianess), because RAR is from Windows, we hope this is the format from Windows (UTF-16 Little Endian)
- }
- }
- else
- Skip_Local(name_size, "FILE_NAME");
-
- if (salt)
- Skip_L8( "SALT");
- //if(exttime)
- //Skip_XX("EXT_TIME"); //Which size?
-}
-
-//---------------------------------------------------------------------------
-// Generic
-void File_Rar::Header_Parse_Content_XX()
-{
- if (add_size)
- Get_L4 (PACK_SIZE, "ADD_SIZE"); //Additional data size
-}
-
-//---------------------------------------------------------------------------
-void File_Rar::Data_Parse()
-{
- switch (Element_Code)
- {
- case 0x72 : Accept("RAR"); Fill(Stream_General, 0, General_Format, "RAR"); break;
- default : ;
- }
-
- Skip_XX(Element_Size, "Data");
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_RAR_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Rar.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Rar.h
deleted file mode 100644
index 507d86922..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Rar.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about RAR files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_RarH
-#define MediaInfo_File_RarH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Rar
-//***************************************************************************
-
-class File_Rar : public File__Analyze
-{
-public :
- File_Rar();
-
-protected :
- int state;
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Per element
- bool Header_Begin();
- void Header_Parse();
- void Header_Parse_Flags();
- void Header_Parse_Flags_73();
- void Header_Parse_Flags_74();
- void Header_Parse_Flags_XX();
- void Header_Parse_Content();
- void Header_Parse_Content_73();
- void Header_Parse_Content_74();
- void Header_Parse_Content_XX();
- void Data_Parse();
-
- //Temp
- int8u HEAD_TYPE;
- int32u PACK_SIZE;
- int32u HIGH_PACK_SIZE;
- int16u HEAD_FLAGS;
- bool high_fields;
- bool usual_or_utf8;
- bool salt;
- bool exttime;
- bool add_size;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Tar.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Tar.cpp
deleted file mode 100644
index 077a07e57..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Tar.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_TAR_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_Tar.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tar::Read_Buffer_Continue()
-{
- if (File_Size<257)
- {
- Reject();
- return;
- }
- if (Buffer_Size<257)
- return; //Wait for more data
-
- //Parsing
- Ztring ChecksumO;
- Skip_Local(100, "File name");
- Skip_Local( 8, "File mode");
- Skip_Local( 8, "Owner's numeric user ID");
- Skip_Local( 12, "Group's numeric user ID");
- Skip_Local( 12, "File size in bytes");
- Skip_Local( 8, "Last modification time in numeric Unix time format");
- Get_Local ( 8, ChecksumO, "Checksum for header block");
- Skip_B1( "Link indicator (file type)");
- Skip_Local(100, "Name of linked file");
- Skip_XX(File_Size-257, "Data");
-
- FILLING_BEGIN();
- //Handling Checksum
- int32u Checksum=ChecksumO.To_int32u(8);
- int32u ChecksumU=0;
- int32u ChecksumS=0;
- for (size_t Pos=0; Pos<257; Pos++)
- {
- if (Pos==148)
- {
- ChecksumU+=32*8; //8 spaces
- ChecksumS+=32*8; //8 spaces
- Pos+=7; //Skiping Checksum
- }
- ChecksumU+=(int8u)Buffer[Pos];
- ChecksumS+=(int8s)Buffer[Pos];
- }
-
- if (ChecksumU!=Checksum && ChecksumS!=Checksum)
- {
- Reject("Tar");
- return;
- }
-
- //Filling
- Accept("Tar");
-
- Fill(Stream_General, 0, General_Format, "Tar");
-
- Reject("Tar");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_TAR_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Tar.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Tar.h
deleted file mode 100644
index 102b7cced..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Tar.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Tar files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TarH
-#define MediaInfo_File_TarH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Tar
-//***************************************************************************
-
-class File_Tar : public File__Analyze
-{
-protected :
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Zip.cpp b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Zip.cpp
deleted file mode 100644
index 62c1b183b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Zip.cpp
+++ /dev/null
@@ -1,477 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ZIP_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Archive/File_Zip.h"
-#include "ZenLib/Utils.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-
-//---------------------------------------------------------------------------
-const char* Zip_made_by[20]=
-{
- "MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems)",
- "Amiga",
- "OpenVMS",
- "UNIX",
- "VM/CMS",
- "Atari ST",
- "OS/2 H.P.F.S.",
- "Macintosh",
- "Z-System",
- "CP/M",
- "Windows NTFS",
- "MVS (OS/390 - Z/OS)",
- "VSE",
- "Acorn Risc",
- "VFAT",
- "alternate MVS",
- "BeOS",
- "Tandem",
- "OS/400",
- "OS/X (Darwin)"
-};
-
-//---------------------------------------------------------------------------
-const char* Zip_compression_method[22]=
-{
- "stored (no compression)",
- "Shrunk",
- "Reduced with compression factor 1",
- "Reduced with compression factor 2",
- "Reduced with compression factor 3",
- "Reduced with compression factor 4",
- "Imploded",
- "Tokenizing compression algorithm",
- "Deflated",
- "Enhanced Deflating using Deflate64(tm)",
- "PKWARE Data Compression Library Imploding (old IBM TERSE)",
- "Reserved by PKWARE",
- "compressed using BZIP2 algorithm",
- "Reserved by PKWARE",
- "LZMA (EFS)",
- "Reserved by PKWARE",
- "Reserved by PKWARE",
- "Reserved by PKWARE",
- "File is compressed using IBM TERSE (new)",
- "IBM LZ77 z Architecture (PFS)",
- "WavPack compressed data", // 97
- "PPMd version I, Rev 1" // 98
-};
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Zip::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- if (Buffer[0]!=0x50 //"PK.."
- || Buffer[1]!=0x4B
- || Buffer[2]!=0x03
- || Buffer[3]!=0x04)
- {
- Reject("ZIP");
- return false;
- }
-
- //This is OK, ZIP detected
- Accept();
- Fill(Stream_General, 0, General_Format, "ZIP");
-
- //Init
- signature=0x00000000;
- local_file_Step=0;
- end_of_central_directory_IsParsed=false;
-
- //Jumping to the end of the file minus end_of_central_directory size (we hope there is no comment)
- GoTo(File_Size-22);
-
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Zip::Read_Buffer_Continue()
-{
- for (;;)
- {
- //Probing
- if (signature==0x00000000) //If not already tested (else an element is being parsed)
- {
- if (Element_Offset+4>Element_Size) //signature size
- return; //Not enough data
- signature=LittleEndian2int32u(Buffer+(size_t)Element_Offset);
- }
-
- //Parsing
- switch (signature)
- {
- case 0x04034b50 : if (!local_file())
- return; //Not enough data
- break;
- case 0x02014b50 : if (!central_directory())
- return; //Not enough data
- break;
- case 0x05054b50 : if (!digital_signature())
- return; //Not enough data
- break;
- case 0x06054b50 : if (!end_of_central_directory())
- return; //Not enough data
- break;
- case 0x08064b50 : if(!archive_extra_data_record())
- return;
- break;
- case 0x06064b50 : if(!Zip64_end_of_central_directory_record())
- return;
- break;
- case 0x07064b50 : if(!Zip64_end_of_central_directory_locator())
- return;
- break;
- default: Finish(); return; //Reject(); return; //Unknown value //Décommenter quand toutes les signatures sont implémentées
- }
-
- //Cleanup
- signature=0x00000000; //Reset, must probe again the signature (next element)
- }
-}
-
-//***************************************************************************
-// Files
-//***************************************************************************
-
-bool File_Zip::local_file()
-{
- switch(local_file_Step)
- {
- case 0 :
- if (!local_file_header())
- return false;
- local_file_Step=1; //local_file_header parsed
- break;
- case 1 :
- local_file_Step=2; //file_data is always parsed
- if (!file_data())
- return false;
- break;
- case 2:
- if (!data_descriptor())
- return false;
- local_file_Step=0; //data_descriptor is parsed, back to begin
- break;
- default: ; //Should never happen
- }
-
- return true;
-}
-
-bool File_Zip::archive_extra_data_record()
-{
- if (Element_Offset+8>Element_Size) //archive_extra_data_record
- return false; //Not enough data
-
- //Retrieving complete archive_extra_data_record size
- int32u extra_field_length=LittleEndian2int32u(Buffer+(size_t)Element_Offset+4);
-
- //Parsing
- Element_Begin1("archive_extra_data_record");
- Skip_C4("Archive extra data signature");
- Skip_L4("extra field length");
- Skip_XX(extra_field_length,"extra_field_data");
- Element_End0();
-
- return true;
-}
-
-bool File_Zip::digital_signature()
-{
- if (Element_Offset+6>Element_Size) //digital_signature
- return false; //Not enough data
-
- //Retrieving complete archive_extra_data_record size
- int16u size_of_data=LittleEndian2int16u(Buffer+(size_t)Element_Offset+4);
-
- //Parsing
- Element_Begin1("digital_signature");
- Skip_C4("Header signature");
- Skip_L2("size of data");
- Skip_XX(size_of_data,"signature data");
- Element_End0();
-
- return true;
-}
-
-bool File_Zip::local_file_header()
-{
- if (Element_Offset+30>Element_Size) //local_file_header up to extra_field_length included
- return false; //Not enough data
-
- //Retrieving complete local_file_header size
- int16u file_name_length=LittleEndian2int16u(Buffer+(size_t)Element_Offset+26);
- int16u extra_field_length=LittleEndian2int16u(Buffer+(size_t)Element_Offset+28);
- if (Element_Offset+30+file_name_length+extra_field_length>Element_Size) //local_file_header all included
- return false; //Not enough data
-
- //Parsing
- Element_Begin1("local_file_header");
- int16u general_purpose_bit_flag,compression_method;
- bool efs;
- Skip_C4("Local file header signature");
- Skip_L2("Version needed to extract");
- Get_L2 (general_purpose_bit_flag,"general purpose bit flag");
- Skip_Flags(general_purpose_bit_flag, 0, "encrypted file");
- Skip_Flags(general_purpose_bit_flag, 1, "8K sliding dictionary");
- Skip_Flags(general_purpose_bit_flag, 2, "3 Shannon-Fano trees");
- Get_Flags (general_purpose_bit_flag, 3, data_descriptor_set, "data descriptor");
- Skip_Flags(general_purpose_bit_flag, 4, "Reserved for use with method 8");
- Skip_Flags(general_purpose_bit_flag, 4, "file is compressed patched data");
- Skip_Flags(general_purpose_bit_flag, 4, "Strong encryption");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Currently unused");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Currently unused");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Currently unused");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Currently unused");
- Get_Flags (general_purpose_bit_flag, 11, efs, "Language encoding flag (EFS)");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Reserved by PKWARE for enhanced compression");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Reserved by PKWARE");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Reserved by PKWARE");
- Get_L2 (compression_method,"compression method");
- Param_Info1C((compression_method<20), Zip_compression_method[compression_method]);
- Param_Info1C((compression_method==97||compression_method==98), Zip_compression_method[compression_method-97+20]);
- Skip_L2("last mod file time");
- Skip_L2("last mod file date");
- Skip_L4("crc-32");
- Get_L4(compressed_size,"compressed size");
- Skip_L4("uncompressed size");
- Get_L2(file_name_length,"file name lenth");
- Get_L2(extra_field_length,"extra field length");
- if(efs) {
- Skip_UTF8(file_name_length,"file name");
- Skip_UTF8(extra_field_length,"extra field");
- } else {
- Skip_Local(file_name_length,"file name");
- Skip_Local(extra_field_length,"extra field");
- }
- Element_End0();
-
- FILLING_BEGIN();
- Accept("Zip");
- Fill(Stream_General, 0, General_Format, "ZIP");
- FILLING_END();
- return true;
-}
-
-bool File_Zip::file_data()
-{
- Element_Begin1("file_data");
- Skip_XX(compressed_size,"File_data");
- Element_End0();
-
- if (Element_Offset>Element_Size)
- {
- GoTo(File_Offset+Element_Offset);
- return false;
- }
- return true;
-
-}
-
-bool File_Zip::data_descriptor()
-{
- if(data_descriptor_set)
- {
- if (Element_Offset+12>Element_Size)
- return false; //Not enough data
-
- Element_Begin1("data_descriptor");
- Skip_L4("crc-32");
- Skip_L4("compressed size");
- Skip_L4("uncompressed size");
- Element_End0();
- }
- return true;
-}
-
-bool File_Zip::central_directory()
-{
- if (Element_Offset+46>Element_Size) //central_directory up to relative offset of local header included
- return false; //Not enough data
-
- //Retrieving complete local_file_header size
- int16u file_name_length=LittleEndian2int16u(Buffer+(size_t)Element_Offset+28);
- int16u extra_field_length=LittleEndian2int16u(Buffer+(size_t)Element_Offset+30);
- int16u file_comment_length=LittleEndian2int16u(Buffer+(size_t)Element_Offset+32);
- if (Element_Offset+46+file_name_length+extra_field_length+file_comment_length>Element_Size) //central_directory_structure all included
- return false; //Not enough data
-
- int16u general_purpose_bit_flag;
- bool efs;
- int16u version_made_by,compression_method;
-
- //Parsing
- Element_Begin1("Central directory");
- Skip_C4("central file header signature");
- Get_L2 (version_made_by,"version made by");Param_Info1((version_made_by>>8)>20?"unused":Zip_made_by[version_made_by>>8]);
- Skip_L2("version needed to extract");
- Get_L2 (general_purpose_bit_flag,"general purpose bit flag");
- Skip_Flags(general_purpose_bit_flag, 0, "encrypted file");
- Skip_Flags(general_purpose_bit_flag, 1, "8K sliding dictionary");
- Skip_Flags(general_purpose_bit_flag, 2, "3 Shannon-Fano trees");
- Skip_Flags(general_purpose_bit_flag, 3, "data descriptor");
- Skip_Flags(general_purpose_bit_flag, 4, "Reserved for use with method 8");
- Skip_Flags(general_purpose_bit_flag, 4, "file is compressed patched data");
- Skip_Flags(general_purpose_bit_flag, 4, "Strong encryption");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Currently unused");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Currently unused");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Currently unused");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Currently unused");
- Get_Flags (general_purpose_bit_flag, 11, efs, "Language encoding flag (EFS)");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Reserved by PKWARE for enhanced compression");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Reserved by PKWARE");
- //~ Skip_Flags(general_purpose_bit_flag, 4, "Reserved by PKWARE");
- Get_L2 (compression_method,"compression method");
- Param_Info1C((compression_method<20), Zip_compression_method[compression_method]);
- Param_Info1C((compression_method==97||compression_method==98), Zip_compression_method[compression_method-97+20]);
- Skip_L2("last mod file time");
- Skip_L2("last mod file date");
- Skip_L4("crc-32");
- Skip_L4("compressed size");
- Skip_L4("uncompressed size");
- Skip_L2("file name length");
- Skip_L2("extra field length");
- Skip_L2("file comment length");
- Skip_L2("disk number start");
- Skip_L2("internal file attributes");
- Skip_L4("external file attributes");
- Skip_L4("relative offset of local header");
- if(efs) {
- Skip_UTF8(file_name_length,"file name");
- Skip_UTF8(extra_field_length,"extra field");
- Skip_UTF8(file_comment_length,"file comment");
- } else {
- Skip_Local(file_name_length,"file name");
- Skip_Local(extra_field_length,"extra field");
- Skip_Local(file_comment_length,"file comment");
- }
- Element_End0();
-
- return true;
-}
-
-bool File_Zip::end_of_central_directory()
-{
- if (Element_Offset+22>Element_Size) //end_of_central_directory up to relative offset of .ZIP file comment length included
- return false; //Not enough data
-
- //Retrieving complete local_file_header size
- int16u zip_comment_length=LittleEndian2int16u(Buffer+(size_t)Element_Offset+20);
- if (Element_Offset+22+zip_comment_length>Element_Size) //end_of_central_directory all included
- return false; //Not enough data
-
- //Parsing
- int32u offset;
- Element_Begin1("End of central directory");
- Skip_C4( "end of central dir signature");
- Skip_L2( "number of this disk");
- Skip_L2( "number of the disk");// with the start of the central directory
- Skip_L2( "total number of entries on this disk");// in the central directory
- Skip_L2( "total number of entries");// in the central directory
- Skip_L4( "size of the central directory");
- Get_L4 (offset, "offset of start of central directory");// with respect to the starting disk number
- Skip_L2( "zip file comment length");
- Skip_XX(zip_comment_length, "zip file comment");
- Element_End0();
-
- //Going to first central directory (once)
- if (!end_of_central_directory_IsParsed)
- {
- end_of_central_directory_IsParsed=true;
- GoTo(offset);
- }
- return true;
-}
-
-bool File_Zip::Zip64_end_of_central_directory_record()
-{
- if (Element_Offset+12>Element_Size) //Zip64_end_of_central_directory_record
- return false; //Not enough data
-
- //Retrieving complete Zip64_end_of_central_directory_record size
- int64u size_of_Zip64_end_of_central_directory_record=LittleEndian2int64u(Buffer+(size_t)Element_Offset+4);
- if (Element_Offset+12+size_of_Zip64_end_of_central_directory_record>Element_Size) //end_of_central_directory all included
- return false; //Not enough data
-
- //Parsing
- //~ int32u offset;
- int16u version_made_by;
- Element_Begin1("Zip64 End of central directory record");
- Skip_C4( "Zip64 end of central dir signature");
- Skip_L8( "size of zip64 end of central directory record");
- Get_L2 (version_made_by, "version made by");
- Param_Info1((version_made_by>>8)>20?"unused":Zip_made_by[version_made_by>>8]);
- Skip_L2( "version needed to extract");
- Skip_L4( "number of this disk");
- Skip_L4( "number of the disk");// with the start of the central directory
- Skip_L8( "total number of entries on this disk");// in the central directory
- Skip_L8( "total number of entries");// in the central directory
- Skip_L8( "size of the central directory");
- Skip_L8( "offset of start of central directory"); // with respect to the starting disk number
- Skip_XX(size_of_Zip64_end_of_central_directory_record-44, "zip64 extensible data sector");
- Element_End0();
-
- return true;
-}
-
-bool File_Zip::Zip64_end_of_central_directory_locator()
-{
- if (Element_Offset+20>Element_Size) //Zip64_end_of_central_directory_locator
- return false; //Not enough data
-
- //Parsing
- Element_Begin1("Zip64 end of central directory locator");
- Skip_C4("zip64 end of central dir locator signature");
- Skip_L4("number of the disk");// with the start of the zip64 end of central directory
- Skip_L8("relative offset of the zip64 end of central directory record");
- Skip_L4("total number of disks");
- Element_End0();
-
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_ZIP_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Zip.h b/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Zip.h
deleted file mode 100644
index 673e49473..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Archive/File_Zip.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ZIP files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ZipH
-#define MediaInfo_File_ZipH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Zip
-//***************************************************************************
-
-class File_Zip : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- int32u compressed_size;
- bool data_descriptor_set;
- int32u signature;
- int8u local_file_Step;
- bool end_of_central_directory_IsParsed;
-
- bool local_file();
- bool local_file_header();
- bool file_data();
- bool data_descriptor();
- bool archive_extra_data_record();
- bool central_directory();
- bool digital_signature();
- bool end_of_central_directory();
- bool Zip64_end_of_central_directory_record();
- bool Zip64_end_of_central_directory_locator();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac.cpp
deleted file mode 100644
index 5d29f8613..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac.cpp
+++ /dev/null
@@ -1,768 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AAC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Aac.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Aac::File_Aac()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-
- //Configuration
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- PTS_DTS_Needed=true;
- IsRawStream=true;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.5?128:(MediaInfoLib::Config.ParseSpeed_Get()>=0.3?32:8);
- FrameIsAlwaysComplete=false;
- Mode=Mode_Unknown;
-
- audioObjectType=(int8u)-1;
- extensionAudioObjectType=(int8u)-1;
- channelConfiguration=(int8u)-1;
- frame_length=1024;
- sampling_frequency_index=(int8u)-1;
- sampling_frequency=(int32u)-1;
- extension_sampling_frequency_index=(int8u)-1;
- extension_sampling_frequency=(int32u)-1;
- aacSpectralDataResilienceFlag=false;
- aacSectionDataResilienceFlag=false;
- aacScalefactorDataResilienceFlag=false;
- FrameSize_Min=(int64u)-1;
- FrameSize_Max=0;
- adts_buffer_fullness_Is7FF=false;
- #if MEDIAINFO_ADVANCED
- aac_frame_length_Total=0;
- #endif //MEDIAINFO_ADVANCED
-
- //Temp - Main
- muxConfigPresent=true;
- audioMuxVersionA=false;
-
- //Temp - General Audio
- sbr=NULL;
- ps=NULL;
-
- //Temp
- CanFill=true;
-}
-
-//---------------------------------------------------------------------------
-File_Aac::~File_Aac()
-{
- delete sbr;
- delete ps;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::Streams_Accept()
-{
- switch (Mode)
- {
- case Mode_ADTS :
- if (!IsSub)
- TestContinuousFileNames();
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Streams_Fill()
-{
- switch(Mode)
- {
- case Mode_LATM : Fill(Stream_General, 0, General_Format, "LATM"); if (IsSub) Fill(Stream_Audio, 0, Audio_MuxingMode, "LATM"); break;
- default : ;
- }
-
- for (std::map<std::string, Ztring>::iterator Info=Infos_General.begin(); Info!=Infos_General.end(); ++Info)
- Fill(Stream_General, 0, Info->first.c_str(), Info->second);
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- for (std::map<std::string, Ztring>::iterator Info=Infos.begin(); Info!=Infos.end(); ++Info)
- Fill(Stream_Audio, StreamPos_Last, Info->first.c_str(), Info->second);
-
- switch(Mode)
- {
- case Mode_ADTS : File__Tags_Helper::Streams_Fill(); break;
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Streams_Update()
-{
- if (Frame_Count)
- {
- if (Mode==Mode_ADTS)
- Infos["BitRate_Mode"].From_Local(adts_buffer_fullness_Is7FF?"VBR":"CBR");
-
- #if MEDIAINFO_ADVANCED
- switch(Mode)
- {
- case Mode_ADTS :
- case Mode_LATM : if (Config->File_RiskyBitRateEstimation_Get() && !adts_buffer_fullness_Is7FF)
- {
- int64u BitRate=(sampling_frequency/1024);
- BitRate*=aac_frame_length_Total*8;
- BitRate/=Frame_Count;
-
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate, 10, true);
- }
- break;
- default : ;
- }
- #endif //MEDIAINFO_ADVANCED
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Streams_Finish()
-{
- switch(Mode)
- {
- case Mode_ADIF :
- case Mode_ADTS : File__Tags_Helper::Streams_Finish(); break;
- default : ;
- }
-
- if (FrameSize_Min!=(int32u)-1 && FrameSize_Max)
- {
- if (FrameSize_Max>FrameSize_Min*1.02)
- {
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "VBR", Unlimited, true, true);
- if (Config->ParseSpeed>=1.0)
- {
- Fill(Stream_Audio, 0, Audio_BitRate_Minimum, ((float64)FrameSize_Min)/1024*48000*8, 0);
- Fill(Stream_Audio, 0, Audio_BitRate_Maximum, ((float64)FrameSize_Max)/1024*48000*8, 0);
- }
- }
- else if (Config->ParseSpeed>=1.0)
- {
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
- }
- }
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Aac::FileHeader_Begin()
-{
- switch(Mode)
- {
- case Mode_AudioSpecificConfig :
- case Mode_ADIF :
- MustSynchronize=false; break;
- default : ; //Synchronization is requested, and this is the default
- }
-
- switch(Mode)
- {
- case Mode_Unknown :
- case Mode_ADIF :
- case Mode_ADTS :
- break;
- default : return true; //no file header test with other modes
- }
-
- //Tags
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- //Testing
- if (Buffer_Size<4)
- return false;
- if (Buffer[0]==0x41 //"ADIF"
- && Buffer[1]==0x44
- && Buffer[2]==0x49
- && Buffer[3]==0x46)
- {
- Mode=Mode_ADIF;
- File__Tags_Helper::Accept("ADIF");
- MustSynchronize=false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::FileHeader_Parse()
-{
- switch (Mode)
- {
- case Mode_ADIF : FileHeader_Parse_ADIF(); break;
- default : ; //no file header test with other modes
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::FileHeader_Parse_ADIF()
-{
- adif_header();
- BS_Begin();
- raw_data_block();
- BS_End();
-
- FILLING_BEGIN();
- File__Tags_Helper::Finish();
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::Read_Buffer_Continue()
-{
- if (Element_Size==0)
- return;
-
- if (Frame_Count==0)
- PTS_Begin=FrameInfo.PTS;
-
- switch(Mode)
- {
- case Mode_AudioSpecificConfig : Read_Buffer_Continue_AudioSpecificConfig(); break;
- case Mode_raw_data_block : Read_Buffer_Continue_raw_data_block(); break;
- case Mode_ADIF :
- case Mode_ADTS : File__Tags_Helper::Read_Buffer_Continue(); break;
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Read_Buffer_Continue_AudioSpecificConfig()
-{
- File__Analyze::Accept(); //We automaticly trust it
-
- BS_Begin();
- AudioSpecificConfig(0); //Up to the end of the block
- BS_End();
-
- Mode=Mode_raw_data_block; //Mode_AudioSpecificConfig only once
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Read_Buffer_Continue_raw_data_block()
-{
- if (Frame_Count>Frame_Count_Valid)
- {
- Skip_XX(Element_Size, "Data");
- return; //Parsing completely only the 1st frame
- }
-
- BS_Begin();
- raw_data_block();
- BS_End();
- if (FrameIsAlwaysComplete && Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- FILLING_BEGIN();
- //Counting
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- Element_Info1(Ztring::ToZtring(Frame_Count));
-
- //Filling
- if (!Status[IsAccepted])
- File__Analyze::Accept();
- if (Frame_Count>=Frame_Count_Valid)
- {
- //No more need data
- if (Mode==Mode_LATM)
- File__Analyze::Accept();
- File__Analyze::Finish();
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Aac::Synchronize()
-{
- switch (Mode)
- {
- case Mode_Unknown : if (Synchronize_LATM()) return true; Buffer_Offset=0; return Synchronize_ADTS();
- case Mode_ADTS : return Synchronize_ADTS();
- case Mode_LATM : return Synchronize_LATM();
- default : return true; //No synchro
- }
-}
-
-//---------------------------------------------------------------------------
-bool File_Aac::Synchronize_ADTS()
-{
- //Tags
- bool Tag_Found;
- if (!File__Tags_Helper::Synchronize(Tag_Found))
- return false;
- if (Tag_Found)
- return true;
-
- //Synchronizing
- while (Buffer_Offset+6<=Buffer_Size)
- {
- while (Buffer_Offset+6<=Buffer_Size && (Buffer[Buffer_Offset ]!=0xFF
- || (Buffer[Buffer_Offset+1]&0xF6)!=0xF0))
- Buffer_Offset++;
-
- if (Buffer_Offset+6<=Buffer_Size)//Testing if size is coherant
- {
- //Testing next start, to be sure
- int16u aac_frame_length=(CC3(Buffer+Buffer_Offset+3)>>5)&0x1FFF;
- if (IsSub && Buffer_Offset+aac_frame_length==Buffer_Size)
- break;
- if (File_Offset+Buffer_Offset+aac_frame_length!=File_Size-File_EndTagSize)
- {
- //Padding
- while (Buffer_Offset+aac_frame_length+2<=Buffer_Size && Buffer[Buffer_Offset+aac_frame_length]==0x00)
- aac_frame_length++;
-
- if (IsSub && Buffer_Offset+aac_frame_length==Buffer_Size)
- break; //while()
- if (Buffer_Offset+aac_frame_length+2>Buffer_Size)
- return false; //Need more data
-
- //Testing
- if (aac_frame_length<=7 || (CC2(Buffer+Buffer_Offset+aac_frame_length)&0xFFF6)!=0xFFF0)
- Buffer_Offset++;
- else
- {
- //Testing next start, to be sure
- if (Buffer_Offset+aac_frame_length+3+3>Buffer_Size)
- return false; //Need more data
- int16u aac_frame_length2=(CC3(Buffer+Buffer_Offset+aac_frame_length+3)>>5)&0x1FFF;
- if (File_Offset+Buffer_Offset+aac_frame_length+aac_frame_length2!=File_Size-File_EndTagSize)
- {
- //Padding
- while (Buffer_Offset+aac_frame_length+aac_frame_length2+2<=Buffer_Size && Buffer[Buffer_Offset+aac_frame_length+aac_frame_length2]==0x00)
- aac_frame_length2++;
-
- if (IsSub && Buffer_Offset+aac_frame_length+aac_frame_length2==Buffer_Size)
- break; //while()
- if (Buffer_Offset+aac_frame_length+aac_frame_length2+2>Buffer_Size)
- return false; //Need more data
-
- //Testing
- if (aac_frame_length2<=7 || (CC2(Buffer+Buffer_Offset+aac_frame_length+aac_frame_length2)&0xFFF6)!=0xFFF0)
- Buffer_Offset++;
- else
- {
- //Testing next start, to be sure
- if (Buffer_Offset+aac_frame_length+aac_frame_length2+3+3>Buffer_Size)
- return false; //Need more data
- int16u aac_frame_length3=(CC3(Buffer+Buffer_Offset+aac_frame_length+aac_frame_length2+3)>>5)&0x1FFF;
- if (File_Offset+Buffer_Offset+aac_frame_length+aac_frame_length2+aac_frame_length3!=File_Size-File_EndTagSize)
- {
- //Padding
- while (Buffer_Offset+aac_frame_length+aac_frame_length2+aac_frame_length3+2<=Buffer_Size && Buffer[Buffer_Offset+aac_frame_length+aac_frame_length2+aac_frame_length3]==0x00)
- aac_frame_length3++;
-
- if (IsSub && Buffer_Offset+aac_frame_length+aac_frame_length2+aac_frame_length3==Buffer_Size)
- break; //while()
- if (Buffer_Offset+aac_frame_length+aac_frame_length2+aac_frame_length3+2>Buffer_Size)
- return false; //Need more data
-
- //Testing
- if (aac_frame_length3<=7 || (CC2(Buffer+Buffer_Offset+aac_frame_length+aac_frame_length2+aac_frame_length3)&0xFFF6)!=0xFFF0)
- Buffer_Offset++;
- else
- break; //while()
- }
- else
- break; //while()
- }
- }
- else
- break; //while()
- }
- }
- else
- break; //while()
- }
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+6>Buffer_Size)
- {
- if (Buffer_Offset+5==Buffer_Size && (CC2(Buffer+Buffer_Offset)&0xFFF6)!=0xFFF0)
- Buffer_Offset++;
- if (Buffer_Offset+4==Buffer_Size && (CC2(Buffer+Buffer_Offset)&0xFFF6)!=0xFFF0)
- Buffer_Offset++;
- if (Buffer_Offset+3==Buffer_Size && (CC2(Buffer+Buffer_Offset)&0xFFF6)!=0xFFF0)
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && (CC2(Buffer+Buffer_Offset)&0xFFF6)!=0xFFF0)
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0xFF)
- Buffer_Offset++;
- return false;
- }
-
- //Synched is OK
- Mode=Mode_ADTS;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Aac::Synchronize_LATM()
-{
- //Synchronizing
- while (Buffer_Offset+3<=Buffer_Size)
- {
- while (Buffer_Offset+3<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x56
- || (Buffer[Buffer_Offset+1]&0xE0)!=0xE0))
- Buffer_Offset++;
-
- if (Buffer_Offset+3<=Buffer_Size)//Testing if size is coherant
- {
- //Testing next start, to be sure
- int16u audioMuxLengthBytes=CC2(Buffer+Buffer_Offset+1)&0x1FFF;
- if (IsSub && Buffer_Offset+3+audioMuxLengthBytes==Buffer_Size)
- break;
- if (File_Offset+Buffer_Offset+3+audioMuxLengthBytes!=File_Size)
- {
- if (Buffer_Offset+3+audioMuxLengthBytes+3>Buffer_Size)
- return false; //Need more data
-
- //Testing
- if ((CC2(Buffer+Buffer_Offset+3+audioMuxLengthBytes)&0xFFE0)!=0x56E0)
- Buffer_Offset++;
- else
- {
- //Testing next start, to be sure
- int16u audioMuxLengthBytes2=CC2(Buffer+Buffer_Offset+3+audioMuxLengthBytes+1)&0x1FFF;
- if (File_Offset+Buffer_Offset+3+audioMuxLengthBytes+3+audioMuxLengthBytes2!=File_Size)
- {
- if (Buffer_Offset+3+audioMuxLengthBytes+3+audioMuxLengthBytes2+3>Buffer_Size)
- return false; //Need more data
-
- //Testing
- if ((CC2(Buffer+Buffer_Offset+3+audioMuxLengthBytes+3+audioMuxLengthBytes2)&0xFFE0)!=0x56E0)
- Buffer_Offset++;
- else
- break; //while()
- }
- else
- break; //while()
- }
- }
- else
- break; //while()
- }
- }
-
-
- //Synchronizing
- while (Buffer_Offset+2<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x56
- || (Buffer[Buffer_Offset+1]&0xE0)!=0xE0))
- Buffer_Offset++;
- if (Buffer_Offset+2>=Buffer_Size)
- return false;
-
- //Synched is OK
- Mode=Mode_LATM;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Aac::Synched_Test()
-{
- switch (Mode)
- {
- case Mode_ADTS : return Synched_Test_ADTS();
- case Mode_LATM : return Synched_Test_LATM();
- default : return true; //No synchro
- }
-}
-
-//---------------------------------------------------------------------------
-bool File_Aac::Synched_Test_ADTS()
-{
- //Tags
- if (!File__Tags_Helper::Synched_Test())
- return false;
-
- //Null padding
- while (Buffer_Offset+2<=Buffer_Size && Buffer[Buffer_Offset]==0x00)
- Buffer_Offset++;
-
- //Must have enough buffer for having header
- if (Buffer_Offset+2>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if ((CC2(Buffer+Buffer_Offset)&0xFFF6)!=0xFFF0)
- Synched=false;
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Aac::Synched_Test_LATM()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+2>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if ((CC2(Buffer+Buffer_Offset)&0xFFE0)!=0x56E0)
- Synched=false;
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Aac::Demux_UnpacketizeContainer_Test()
-{
- switch (Mode)
- {
- case Mode_ADTS : return Demux_UnpacketizeContainer_Test_ADTS();
- case Mode_LATM : return Demux_UnpacketizeContainer_Test_LATM();
- default : return true; //No header
- }
-}
-bool File_Aac::Demux_UnpacketizeContainer_Test_ADTS()
-{
- int16u aac_frame_length=(BigEndian2int24u(Buffer+Buffer_Offset+3)>>5)&0x1FFF; //13 bits
- Demux_Offset=Buffer_Offset+aac_frame_length;
-
- if (Demux_Offset>Buffer_Size && File_Offset+Buffer_Size!=File_Size)
- return false; //No complete frame
-
- Demux_UnpacketizeContainer_Demux();
-
- return true;
-}
-bool File_Aac::Demux_UnpacketizeContainer_Test_LATM()
-{
- int16u audioMuxLengthBytes=BigEndian2int16u(Buffer+Buffer_Offset+1)&0x1FFF; //13 bits
- Demux_Offset=Buffer_Offset+3+audioMuxLengthBytes;
-
- if (Demux_Offset>Buffer_Size && File_Offset+Buffer_Size!=File_Size)
- return false; //No complete frame
-
- Demux_UnpacketizeContainer_Demux();
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Aac::Header_Begin()
-{
- switch (Mode)
- {
- case Mode_ADTS : return Header_Begin_ADTS();
- case Mode_LATM : return Header_Begin_LATM();
- default : return true; //No header
- }
-}
-
-//---------------------------------------------------------------------------
-bool File_Aac::Header_Begin_ADTS()
-{
- //There is no real header in ADTS, retrieving only the frame length
- if (Buffer_Offset+8>Buffer_Size) //size of adts_fixed_header + adts_variable_header
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Aac::Header_Begin_LATM()
-{
- if (Buffer_Offset+3>Buffer_Size) //fixed 24-bit header
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Header_Parse()
-{
- switch (Mode)
- {
- case Mode_ADTS : Header_Parse_ADTS(); break;
- case Mode_LATM : Header_Parse_LATM(); break;
- default : ; //No header
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Header_Parse_ADTS()
-{
- //There is no "header" in ADTS, retrieving only the frame length
- int16u aac_frame_length=(BigEndian2int24u(Buffer+Buffer_Offset+3)>>5)&0x1FFF; //13 bits
-
- //Filling
- Header_Fill_Size(aac_frame_length);
- Header_Fill_Code(0, "adts_frame");
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Header_Parse_LATM()
-{
- int16u audioMuxLengthBytes;
- BS_Begin();
- Skip_S2(11, "syncword");
- Get_S2 (13, audioMuxLengthBytes, "audioMuxLengthBytes");
- BS_End();
-
- //Filling
- Header_Fill_Size(3+audioMuxLengthBytes);
- Header_Fill_Code(0, "LATM");
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Data_Parse()
-{
- if (FrameSize_Min>Header_Size+Element_Size)
- FrameSize_Min=Header_Size+Element_Size;
- if (FrameSize_Max<Header_Size+Element_Size)
- FrameSize_Max=Header_Size+Element_Size;
-
- if (Frame_Count>Frame_Count_Valid)
- {
- Skip_XX(Element_Size, "Data");
- FrameInfo.DTS+=float64_int64s(((float64)frame_length)*1000000000/sampling_frequency);
- FrameInfo.PTS=FrameInfo.DTS;
- return; //Parsing completely only the 1st frame
- }
-
- switch (Mode)
- {
- case Mode_ADTS : Data_Parse_ADTS(); break;
- case Mode_LATM : Data_Parse_LATM(); break;
- default : ; //No header
- }
-
- FILLING_BEGIN();
- //Counting
- if (File_Offset+Buffer_Offset+Element_Size==File_Size)
- Frame_Count_Valid=Frame_Count; //Finish frames in case of there are less than Frame_Count_Valid frames
- if (CanFill)
- {
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- Element_Info1(Ztring::ToZtring(Frame_Count));
- }
-
- #if MEDIAINFO_ADVANCED
- switch(Mode)
- {
- case Mode_LATM :
- aac_frame_length_Total+=Element_Size;
- break;
- default : ;
- }
- #endif //MEDIAINFO_ADVANCED
-
- if (!Status[IsAccepted])
- File__Analyze::Accept();
-
- //Filling
- if (Frame_Count>=Frame_Count_Valid && Config->ParseSpeed<1.0)
- {
- //No more need data
- switch (Mode)
- {
- case Mode_ADTS :
- case Mode_LATM :
- if (!Status[IsFilled])
- {
- Fill();
- if (!IsSub)
- File__Tags_Helper::Finish();
- }
- break;
- default : ; //No header
- }
-
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Data_Parse_ADTS()
-{
- //Parsing
- BS_Begin();
- adts_frame();
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::Data_Parse_LATM()
-{
- BS_Begin();
- AudioMuxElement();
- BS_End();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_AAC_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac.h
deleted file mode 100644
index 0756008cd..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac.h
+++ /dev/null
@@ -1,371 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about AAC files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_AacH
-#define MediaInfo_File_AacH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_MPEG4_YES
- #include "MediaInfo/Multiple/File_Mpeg4_Descriptors.h"
-#endif
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Aac
-//***************************************************************************
-
-struct sbr_handler
-{
- //sbr_header
- int8u bs_amp_res[2];
- int8u bs_amp_res_FromHeader;
- int8u bs_start_freq;
- int8u bs_stop_freq;
- int8u bs_xover_band;
- int8u bs_freq_scale;
- int8u bs_alter_scale;
- int8u bs_noise_bands;
-
- //sbr_grid
- int8u bs_num_env[2];
- bool bs_freq_res[2][8];
- int8u bs_num_noise[2];
-
- //sbr_dtdf
- int8u bs_df_env[2][4];
- int8u bs_df_noise[2][2];
-
- //Computed values
- int8u num_noise_bands;
- int8u num_env_bands[2];
-};
-
-struct ps_handler
-{
- bool enable_iid;
- bool enable_icc;
- bool enable_ext;
- int8u iid_mode;
- int8u icc_mode;
-};
-
-typedef const int8s (*sbr_huffman)[2];
-
-class File_Aac : public File__Analyze, public File__Tags_Helper
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool FrameIsAlwaysComplete;
- enum mode
- {
- Mode_Unknown,
- Mode_AudioSpecificConfig,
- Mode_raw_data_block,
- Mode_ADIF,
- Mode_ADTS,
- Mode_LATM,
- };
- mode Mode;
- void AudioSpecificConfig_OutOfBand(int32u sampling_frequency, int8u audioObjectType=(int8u)-1, bool sbrData=false, bool psData=false, bool sbrPresentFlag=false, bool psPresentFlag=false);
-
- //Constructor/Destructor
- File_Aac();
- ~File_Aac();
-
-protected :
- //Streams management
- void Streams_Accept();
- void Streams_Fill();
- void Streams_Update();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
- void FileHeader_Parse_ADIF();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
- void Read_Buffer_Continue_AudioSpecificConfig();
- void Read_Buffer_Continue_raw_data_block();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synchronize_ADTS();
- bool Synchronize_LATM();
- bool Synched_Test();
- bool Synched_Test_ADTS();
- bool Synched_Test_LATM();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- bool Demux_UnpacketizeContainer_Test_ADTS();
- bool Demux_UnpacketizeContainer_Test_LATM();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Per element
- bool Header_Begin();
- bool Header_Begin_ADTS();
- bool Header_Begin_LATM();
- void Header_Parse();
- void Header_Parse_ADTS();
- void Header_Parse_LATM();
- void Data_Parse();
- void Data_Parse_ADTS();
- void Data_Parse_LATM();
-
- //***********************************************************************
- // Elements - Main
- //***********************************************************************
-
- //Elements - Interface to MPEG-4 container
- void AudioSpecificConfig (size_t End=(size_t)-1);
- void GetAudioObjectType (int8u &ObjectType, const char* Name);
-
- //Elements - Multiplex layer
- void EPMuxElement ();
- void AudioMuxElement ();
- void StreamMuxConfig ();
- int32u LatmGetValue ();
- void PayloadLengthInfo ();
- void PayloadMux ();
- bool muxConfigPresent;
-
- //Elements - Error protection
- void ErrorProtectionSpecificConfig ();
-
- //Elements - MPEG-2 AAC Audio_Data_Interchange_Format, ADIF
- void adif_header ();
-
- //Elements - Audio_Data_Transport_Stream frame, ADTS
- void adts_frame ();
- void adts_fixed_header ();
- void adts_variable_header ();
-
- //Temp
- int8u numSubFrames;
- int8u numProgram;
- int8u numLayer;
- int8u numChunk;
- bool audioMuxVersionA;
- int8u streamID[16][8];
- int8u progSIndx[128];
- int8u laySIndx[128];
- int8u progCIndx[128];
- int8u layCIndx[128];
- int8u frameLengthType[128];
- int16u frameLength[128];
- int32u MuxSlotLengthBytes[128];
- int32u otherDataLenBits;
- bool otherDataPresent;
- bool allStreamsSameTimeFraming;
- int8u audioObjectType;
- int8u extensionAudioObjectType;
- int8u channelConfiguration;
- int16u frame_length;
- int8u sampling_frequency_index;
- int32u sampling_frequency;
- int8u extension_sampling_frequency_index;
- int32u extension_sampling_frequency;
- bool aacScalefactorDataResilienceFlag;
- bool aacSectionDataResilienceFlag;
- bool aacSpectralDataResilienceFlag;
- int8u num_raw_data_blocks;
- bool protection_absent;
- int64u FrameSize_Min;
- int64u FrameSize_Max;
- bool adts_buffer_fullness_Is7FF;
- #if MEDIAINFO_ADVANCED
- int64u aac_frame_length_Total;
- #endif //MEDIAINFO_ADVANCED
-
- //***********************************************************************
- // Elements - Speech coding (HVXC)
- //***********************************************************************
-
- void HvxcSpecificConfig ();
- void HVXCconfig ();
- void ErrorResilientHvxcSpecificConfig ();
- void ErHVXCconfig ();
-
- //***********************************************************************
- // Elements - Speech Coding (CELP)
- //***********************************************************************
-
- void CelpSpecificConfig ();
- void CelpHeader ();
- void ErrorResilientCelpSpecificConfig ();
- void ER_SC_CelpHeader ();
-
- //***********************************************************************
- // Elements - General Audio (GA)
- //***********************************************************************
-
- //Elements - Decoder configuration
- void GASpecificConfig ();
- void program_config_element ();
-
- //Elements - GA bitstream
- void raw_data_block ();
- void single_channel_element ();
- void channel_pair_element ();
- void ics_info ();
- void pulse_data ();
- void coupling_channel_element ();
- void lfe_channel_element ();
- void data_stream_element ();
- void fill_element (int8u old_id);
- void gain_control_data ();
-
- //Elements - Subsidiary
- void individual_channel_stream (bool common_window, bool scale_flag);
- void section_data ();
- void scale_factor_data ();
- void tns_data ();
- void ltp_data ();
- void spectral_data ();
- void extension_payload (size_t End, int8u id_aac);
- void dynamic_range_info ();
- void sac_extension_data (size_t End);
-
- //Elements - SBR
- void sbr_extension_data (size_t End, int8u id_aac, bool crc_flag);
- void sbr_header ();
- void sbr_data (int8u id_aac);
- void sbr_single_channel_element ();
- void sbr_channel_pair_element ();
- void sbr_grid (bool ch);
- void sbr_dtdf (bool ch);
- void sbr_invf (bool ch);
- void sbr_envelope (bool ch, bool bs_coupling);
- void sbr_noise (bool ch, bool bs_coupling);
- void sbr_sinusoidal_coding (bool ch);
- int16u sbr_huff_dec (sbr_huffman Table, const char* Name);
-
- //Elements - SBR - PS
- void ps_data (size_t End);
-
- //Elements - Perceptual noise substitution (PNS)
- bool is_noise (size_t group, size_t sfb);
- int is_intensity (size_t group, size_t sfb);
-
- //Elements - Enhanced Low Delay Codec
- void ELDSpecificConfig ();
- void ld_sbr_header ();
-
- //Helpers
- void hcod (int8u sect_cb, const char* Name);
- void hcod_sf (const char* Name);
- void hcod_binary (int8u CodeBook, int8s* Values, int8u Values_Count);
- void hcod_2step (int8u CodeBook, int8s* Values, int8u Values_Count);
-
- //Temp - channel_pair_element
- bool common_window;
-
- //Temp - ics_info
- int8u window_sequence;
- int8u max_sfb;
- int8u scale_factor_grouping;
- int8u num_windows;
- int8u num_window_groups;
- int8u window_group_length [8];
- int16u sect_sfb_offset [8][1024];
- int16u swb_offset [64];
- int8u sfb_cb [8][64];
- int8u num_swb;
-
- //Temp - section_data
- int8u num_sec [8];
- int8u sect_cb [8][64];
- int16u sect_start [8][64];
- int16u sect_end [8][64];
-
- //Temp - ltp_data
- int16u ltp_lag;
-
- //Temp - SBR
- sbr_handler* sbr;
-
- //Temp - PS
- ps_handler* ps;
-
- //***********************************************************************
- // Elements - Structured Audio (SA)
- //***********************************************************************
-
- void StructuredAudioSpecificConfig ();
-
- //***********************************************************************
- // Elements - Text to Speech Interface (TTSI)
- //***********************************************************************
-
- void TTSSpecificConfig ();
-
- //***********************************************************************
- // Elements - Parametric Audio (HILN)
- //***********************************************************************
-
- void HILNconfig ();
- void HILNenexConfig ();
- void ParametricSpecificConfig ();
- void PARAconfig ();
-
- //***********************************************************************
- // Elements - Technical description of parametric coding for high quality audio
- //***********************************************************************
-
- void SSCSpecificConfig ();
-
- //***********************************************************************
- // Elements - MPEG-1/2 Audio
- //***********************************************************************
-
- void MPEG_1_2_SpecificConfig ();
-
- //***********************************************************************
- // Elements - Technical description of lossless coding of oversampled audio
- //***********************************************************************
-
- void DSTSpecificConfig ();
- //***********************************************************************
- // Elements - Audio Lossless
- //***********************************************************************
-
- void ALSSpecificConfig ();
-
- //***********************************************************************
- // Elements - Scalable lossless
- //***********************************************************************
-
- void SLSSpecificConfig ();
-
- //***********************************************************************
- // Temp
- //***********************************************************************
-
- std::map<std::string, Ztring> Infos_General;
- std::map<std::string, Ztring> Infos;
- bool CanFill;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio.cpp
deleted file mode 100644
index 067df04fb..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio.cpp
+++ /dev/null
@@ -1,1432 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AAC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Aac.h"
-#include "MediaInfo/Audio/File_Aac_GeneralAudio.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-extern const int32u Aac_sampling_frequency[];
-extern const char* Aac_audioObjectType(int8u audioObjectType);
-extern const char* Aac_Format_Profile(int8u ID);
-
-//---------------------------------------------------------------------------
-const char* Aac_id_syn_ele[8]=
-{
- "SCE - single_channel_element",
- "CPE - channel_pair_element",
- "CCE - coupling_channel_element",
- "LFE - lfe_channel_element",
- "DSE - data_stream_element",
- "PCE - program_config_element",
- "FIL - fill_element",
- "END - End"
-};
-
-//---------------------------------------------------------------------------
-const char* Aac_window_sequence[4]=
-{
- "ONLY_LONG_SEQUENCE",
- "LONG_START_SEQUENCE",
- "EIGHT_SHORT_SEQUENCE",
- "LONG_STOP_SEQUENCE"
-};
-
-//***************************************************************************
-// Elements - Decoder configuration
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::GASpecificConfig ()
-{
- //Parsing
- Element_Begin1("GASpecificConfig");
- bool frameLengthFlag, dependsOnCoreCoder, extensionFlag;
- Get_SB ( frameLengthFlag, "frameLengthFlag");
- frame_length=frameLengthFlag==0?1024:960; Param_Info2(frame_length, " bytes");
- Get_SB ( dependsOnCoreCoder, "dependsOnCoreCoder");
- if (dependsOnCoreCoder)
- Skip_S2(14, "coreCoderDelay");
- Get_SB ( extensionFlag, "extensionFlag");
- if (channelConfiguration==0)
- program_config_element();
- if (audioObjectType==06 || audioObjectType==20)
- Skip_S1(3, "layerNr");
- if (extensionFlag)
- {
- bool extensionFlag3;
- if (audioObjectType==22)
- {
- Skip_S1( 5, "numOfSubFrame");
- Skip_S2(11, "layer_length");
- }
- if (audioObjectType==17
- || audioObjectType==19
- || audioObjectType==20
- || audioObjectType==23)
- {
- Skip_SB( "aacSectionDataResilienceFlag");
- Skip_SB( "aacScalefactorDataResilienceFlag");
- Skip_SB( "aacSpectralDataResilienceFlag");
- }
- Get_SB ( extensionFlag3, "extensionFlag3");
- if (extensionFlag3)
- {
- Skip_BS(Data_BS_Remain(), "Not implemented");
- }
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::program_config_element()
-{
- Element_Begin1("program_config_element");
- Ztring comment_field_data;
- int8u Channels=0, Channels_Front=0, Channels_Side=0, Channels_Back=0, Channels_LFE=0;
- int8u num_front_channel_elements, num_side_channel_elements, num_back_channel_elements, num_lfe_channel_elements, num_assoc_data_elements, num_valid_cc_elements, comment_field_bytes;
- int8u audioObjectType_Temp, sampling_frequency_index_Temp;
- Skip_S1(4, "element_instance_tag");
- Get_S1 (2, audioObjectType_Temp, "object_type"); audioObjectType_Temp++; Param_Info1(Aac_audioObjectType(audioObjectType_Temp));
- Get_S1 (4, sampling_frequency_index_Temp, "sampling_frequency_index"); Param_Info1(Aac_sampling_frequency[sampling_frequency_index_Temp]);
- Get_S1 (4, num_front_channel_elements, "num_front_channel_elements");
- Get_S1 (4, num_side_channel_elements, "num_side_channel_elements");
- Get_S1 (4, num_back_channel_elements, "num_back_channel_elements");
- Get_S1 (2, num_lfe_channel_elements, "num_lfe_channel_elements");
- Get_S1 (3, num_assoc_data_elements, "num_assoc_data_elements");
- Get_S1 (4, num_valid_cc_elements, "num_valid_cc_elements");
- TEST_SB_SKIP( "mono_mixdown_present");
- Skip_S1(4, "mono_mixdown_element_number");
- TEST_SB_END();
- TEST_SB_SKIP( "stereo_mixdown_present");
- Skip_S1(4, "stereo_mixdown_element_number");
- TEST_SB_END();
- TEST_SB_SKIP( "matrix_mixdown_idx_present");
- Skip_S1(2, "matrix_mixdown_idx");
- Skip_SB( "pseudo_surround_enable");
- TEST_SB_END();
- bool front1_element_is_cpe=false;
- if (!num_side_channel_elements && num_back_channel_elements && num_back_channel_elements<3) // Hack: e.g. in case of 5.1,
- {
- num_side_channel_elements=num_back_channel_elements;
- num_back_channel_elements=0;
- }
- for (int8u Pos=0; Pos<num_front_channel_elements; Pos++)
- {
- Element_Begin1("front_element");
- bool front_element_is_cpe;
- Get_SB ( front_element_is_cpe, "front_element_is_cpe");
- Skip_S1(4, "front_element_tag_select");
- if (front_element_is_cpe)
- {
- Channels_Front+=2;
- Channels+=2;
- if (Pos==0)
- front1_element_is_cpe=true;
- }
- else
- {
- Channels_Front++;
- Channels++;
- }
- Element_End0();
- }
- for (int8u Pos=0; Pos<num_side_channel_elements; Pos++)
- {
- Element_Begin1("side_element");
- bool side_element_is_cpe;
- Get_SB ( side_element_is_cpe, "side_element_is_cpe");
- Skip_S1(4, "side_element_tag_select");
- if (side_element_is_cpe)
- {
- Channels_Side+=2;
- Channels+=2;
- }
- else
- {
- Channels_Side++;
- Channels++;
- }
- Element_End0();
- }
- for (int8u Pos=0; Pos<num_back_channel_elements; Pos++)
- {
- Element_Begin1("back_element");
- bool back_element_is_cpe;
- Get_SB ( back_element_is_cpe, "back_element_is_cpe");
- Skip_S1(4, "back_element_tag_select");
- if (back_element_is_cpe)
- {
- Channels_Back+=2;
- Channels+=2;
- }
- else
- {
- Channels_Back++;
- Channels++;
- }
- Element_End0();
- }
- for (int8u Pos=0; Pos<num_lfe_channel_elements; Pos++)
- {
- Element_Begin1("lfe_element");
- Skip_S1(4, "lfe_element_tag_select");
- Channels_LFE++;
- Channels++;
- Element_End0();
- }
- for (int8u Pos=0; Pos<num_assoc_data_elements; Pos++)
- {
- Element_Begin1("assoc_data_element");
- Skip_S1(4, "assoc_data_element_tag_select");
- Element_End0();
- }
- for (int8u Pos=0; Pos<num_valid_cc_elements; Pos++)
- {
- Element_Begin1("valid_cc_element");
- Skip_SB( "cc_element_is_ind_sw");
- Skip_S1(4, "valid_cc_element_tag_select");
- Element_End0();
- }
- BS_End(); //Byte align
- Get_B1 (comment_field_bytes, "comment_field_bytes");
- if (comment_field_bytes)
- Get_Local(comment_field_bytes, comment_field_data, "comment_field_data");
- BS_Begin(); //The stream needs continuity in the bitstream
- Element_End0();
-
- //Filling
- Ztring Channels_Positions, Channels_Positions2, ChannelLayout;
- switch (Channels_Front)
- {
- case 0 : break;
- case 1 : Channels_Positions+=__T("Front: C"); ChannelLayout+=__T("C "); break;
- case 2 : Channels_Positions+=__T("Front: L R"); ChannelLayout+=__T("L R "); break;
- case 3 : Channels_Positions+=__T("Front: L C R"); ChannelLayout+=num_front_channel_elements==2?(front1_element_is_cpe?__T("L R C "):__T("C L R ")):__T("? ? ? "); break;
- default : Channels_Positions+=__T("Front: "); Channels_Positions+=Ztring::ToZtring(Channels_Front); ChannelLayout+=__T("? "); //Which config?
- }
- switch (Channels_Side)
- {
- case 0 : break;
- case 1 : Channels_Positions+=__T(", Side: C"); ChannelLayout+=__T("Cs "); break;
- case 2 : Channels_Positions+=__T(", Side: L R"); ChannelLayout+=__T("Ls Rs "); break;
- case 3 : Channels_Positions+=__T(", Side: L C R"); ChannelLayout+=__T("? ? ? "); break;
- default : Channels_Positions+=__T(", Side: "); Channels_Positions+=Ztring::ToZtring(Channels_Side); ChannelLayout+=__T("? "); //Which config?
- }
- switch (Channels_Back)
- {
- case 0 : break;
- case 1 : Channels_Positions+=__T(", Back: C"); ChannelLayout+=__T("Cs "); break;
- case 2 : Channels_Positions+=__T(", Back: L R"); ChannelLayout+=__T("Rls Rrs "); break;
- case 3 : Channels_Positions+=__T(", Back: L C R"); ChannelLayout+=__T("Rls Cs Rrs "); break;
- default : Channels_Positions+=__T(", Back: "); Channels_Positions+=Ztring::ToZtring(Channels_Back); ChannelLayout+=__T("? "); //Which config?
- }
- switch (Channels_LFE)
- {
- case 0 : break;
- case 1 : Channels_Positions+=__T(", LFE"); ChannelLayout+=__T("LFE "); break;
- default : Channels_Positions+=__T(", LFE= "); Channels_Positions+=Ztring::ToZtring(Channels_LFE); ChannelLayout+=__T("? "); //Which config?
- }
- Channels_Positions2=Ztring::ToZtring(Channels_Front)+__T('/')
- +Ztring::ToZtring(Channels_Side)+__T('/')
- +Ztring::ToZtring(Channels_Back)
- +(Channels_LFE?__T(".1"):__T(""));
- if (!ChannelLayout.empty())
- ChannelLayout.resize(ChannelLayout.size()-1);
-
- FILLING_BEGIN();
- //Integrity test
- if (Aac_sampling_frequency[sampling_frequency_index_Temp]==0 || Channels>24) // TODO: full_2023548870.mp4 is buggy
- {
- Trusted_IsNot("sampling frequency / channels");
- Skip_BS(Data_BS_Remain(), "(Unknown frequency)");
- return;
- }
-
- if (audioObjectType==(int8u)-1)
- audioObjectType=audioObjectType_Temp;
- if (sampling_frequency_index==(int8u)-1)
- sampling_frequency_index=sampling_frequency_index_Temp;
-
- Infos_General["Comment"]=comment_field_data;
-
- Infos["Format"].From_Local("AAC");
- Infos["Format_Profile"].From_Local(Aac_Format_Profile(audioObjectType));
- Infos["Codec"].From_Local(Aac_audioObjectType(audioObjectType));
- Infos["SamplingRate"].From_Number(Aac_sampling_frequency[sampling_frequency_index]);
- Infos["Channel(s)"].From_Number(Channels);
- Infos["ChannelPositions"]=Channels_Positions;
- Infos["ChannelPositions/String2"]=Channels_Positions2;
- Infos["ChannelLayout"]=ChannelLayout;
-
- if (!Infos["Format_Settings_SBR"].empty())
- {
- Infos["Format_Profile"]=__T("HE-AAC");
- Ztring SamplingRate=Infos["SamplingRate"];
- Infos["SamplingRate"].From_Number((extension_sampling_frequency_index==(int8u)-1)?(sampling_frequency*2):extension_sampling_frequency, 10);
- if (MediaInfoLib::Config.LegacyStreamDisplay_Get())
- {
- Infos["Format_Profile"]+=__T(" / LC");
- Infos["SamplingRate"]+=__T(" / ")+SamplingRate;
- }
- Infos["Format_Settings_SBR"]=__T("Yes (Implicit)");
- Infos["Codec"]=Ztring().From_Local(Aac_audioObjectType(audioObjectType))+__T("-SBR");
- }
-
- if (!Infos["Format_Settings_PS"].empty())
- {
- Infos["Format_Profile"]=__T("HE-AACv2");
- Ztring Channels=Infos["Channel(s)"];
- Ztring ChannelPositions=Infos["ChannelPositions"];
- Ztring SamplingRate=Infos["SamplingRate"];
- Infos["Channel(s)"]=__T("2");
- Infos["ChannelPositions"]=__T("Front: L R");
- if (MediaInfoLib::Config.LegacyStreamDisplay_Get())
- {
- Infos["Format_Profile"]+=__T(" / HE-AAC / LC");
- Infos["Channel(s)"]+=__T(" / ")+Channels+__T(" / ")+Channels;
- Infos["ChannelPositions"]+=__T(" / ")+ChannelPositions+__T(" / ")+ChannelPositions;
- Infos["SamplingRate"]=Ztring().From_Number((extension_sampling_frequency_index==(int8u)-1)?(sampling_frequency*2):extension_sampling_frequency, 10)+__T(" / ")+SamplingRate;
- }
- Infos["Format_Settings_PS"]=__T("Yes (Implicit)");
- Ztring Codec=Retrieve(Stream_Audio, StreamPos_Last, Audio_Codec);
- Infos["Codec"]=Ztring().From_Local(Aac_audioObjectType(audioObjectType))+__T("-SBR-PS");
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// Elements - GA bitstream
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::raw_data_block()
-{
- if (sampling_frequency_index>=13)
- {
- Trusted_IsNot("(Problem)");
- Skip_BS(Data_BS_Remain(), "(Problem)");
- return;
- }
-
- if (audioObjectType!=2)
- {
- Skip_BS(Data_BS_Remain(), "Data");
- return; //We test only AAC LC
- }
-
- //Parsing
- Element_Begin1("raw_data_block");
- int8u id_syn_ele=0, id_syn_ele_Previous;
- do
- {
- Element_Begin0();
- id_syn_ele_Previous=id_syn_ele;
- Get_S1 (3, id_syn_ele, "id_syn_ele"); Param_Info1(Aac_id_syn_ele[id_syn_ele]); Element_Name(Aac_id_syn_ele[id_syn_ele]);
- switch (id_syn_ele)
- {
- case 0x00 : single_channel_element(); break; //ID_SCE
- case 0x01 : channel_pair_element(); break; //ID_CPE
- case 0x02 : coupling_channel_element(); break; //ID_CCE
- case 0x03 : lfe_channel_element(); break; //ID_LFE
- case 0x04 : data_stream_element(); break; //ID_DSE
- case 0x05 : program_config_element(); break; //ID_PCE
- case 0x06 : fill_element(id_syn_ele_Previous); break; //ID_FIL
- case 0x07 : break; //ID_END
- default : ; //Can not happen
- }
- Element_End0();
- }
- while(Element_IsOK() && Data_BS_Remain() && id_syn_ele!=0x07); //ID_END
- if (Element_IsOK() && Data_BS_Remain()%8)
- Skip_S1(Data_BS_Remain()%8, "byte_alignment");
- Element_End0();
-
- if (sampling_frequency)
- {
- #if MEDIAINFO_TRACE
- if (FrameInfo.PTS!=(int64u)-1)
- Element_Info1(__T("PTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/1000000)));
- if (FrameInfo.DTS!=(int64u)-1)
- Element_Info1(__T("DTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.DTS)/1000000)));
- #endif //MEDIAINFO_TRACE
- FrameInfo.DUR=float64_int64s(((float64)frame_length)*1000000000/sampling_frequency);
- FrameInfo.DTS+=FrameInfo.DUR;
- FrameInfo.PTS=FrameInfo.DTS;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::single_channel_element()
-{
- //Parsing
- Skip_S1 (4, "element_instance_tag");
- individual_channel_stream(false, false);
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::channel_pair_element()
-{
- //Parsing
- Skip_S1(4, "element_instance_tag");
- Get_SB (common_window, "common_window");
- if (common_window)
- {
- int8u ms_mask_present;
- ics_info();
- Get_S1(2, ms_mask_present, "ms_mask_present");
- if (ms_mask_present==1)
- {
- Element_Begin1("ms_mask");
- for (int8u g=0; g<num_window_groups; g++)
- {
- Element_Begin1("window");
- for (int8u sfb=0; sfb<max_sfb; sfb++)
- Skip_SB( "ms_used[g][sfb]");
- Element_End0();
- }
- Element_End0();
- }
- }
- individual_channel_stream(common_window, false);
- if (!Element_IsOK())
- return;
- individual_channel_stream(common_window, false);
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::ics_info()
-{
- //Parsing
- Element_Begin1("ics_info");
- Skip_SB( "ics_reserved_bit");
- Get_S1 (2, window_sequence, "window_sequence"); Param_Info1(Aac_window_sequence[window_sequence]);
- Skip_SB( "window_shape");
- if (window_sequence==2) //EIGHT_SHORT_SEQUENCE
- {
- Get_S1 (4, max_sfb, "max_sfb");
- Get_S1 (7, scale_factor_grouping, "scale_factor_grouping");
- }
- else
- {
- bool predictor_data_present;
- Get_S1 (6, max_sfb, "max_sfb");
- Get_SB ( predictor_data_present, "predictor_data_present");
- if (predictor_data_present)
- {
- if (audioObjectType==1) //AAC Main
- {
- bool predictor_reset;
- Get_SB (predictor_reset, "predictor_reset");
- if (predictor_reset)
- Skip_S1(5, "predictor_reset_group_number");
- int8u PRED_SFB_MAX=max_sfb;
- if (PRED_SFB_MAX>Aac_PRED_SFB_MAX[sampling_frequency_index])
- PRED_SFB_MAX=Aac_PRED_SFB_MAX[sampling_frequency_index];
- for (int8u sfb=0; sfb<PRED_SFB_MAX; sfb++)
- Skip_SB( "prediction_used[sfb]");
- }
- else
- {
- bool ltp_data_present;
- Get_SB (ltp_data_present, "ltp_data_present");
- if (ltp_data_present)
- ltp_data();
- if (common_window)
- {
- Get_SB (ltp_data_present, "ltp_data_present");
- if (ltp_data_present)
- ltp_data();
- }
- }
- }
- }
- Element_End0();
-
- //Calculation of windows
- switch (window_sequence)
- {
- case 0 : //ONLY_LONG_SEQUENCE
- case 1 : //LONG_START_SEQUENCE
- case 3 : //LONG_STOP_SEQUENCE
- num_windows=1;
- num_window_groups=1;
- window_group_length[0]=1;
- num_swb=Aac_swb_offset_long_window[sampling_frequency_index]->num_swb;
- for (int8u i=0; i<num_swb+1; i++)
- {
- if (Aac_swb_offset_long_window[sampling_frequency_index]->swb_offset[i]<frame_length)
- swb_offset[i]=Aac_swb_offset_long_window[sampling_frequency_index]->swb_offset[i];
- else
- swb_offset[i]=frame_length;
- sect_sfb_offset[0][i]=swb_offset[i];
- }
- break;
- case 2 : //EIGHT_SHORT_SEQUENCE
- num_windows=8;
- num_window_groups=1;
- window_group_length[0]=1;
- num_swb=Aac_swb_offset_short_window[sampling_frequency_index]->num_swb;
- for (int8u i=0; i<num_swb + 1; i++)
- swb_offset[i] = Aac_swb_offset_short_window[sampling_frequency_index]->swb_offset[i];
- swb_offset[num_swb] = frame_length/8;
- for (int8u i=0; i<num_windows-1; i++)
- {
- if (!(scale_factor_grouping&(1<<(6-i))))
- {
- num_window_groups++;
- window_group_length[num_window_groups-1]=1;
- }
- else
- window_group_length[num_window_groups-1]++;
- }
- for (int g = 0; g < num_window_groups; g++)
- {
- int8u sect_sfb = 0;
- int16u offset = 0;
- for (int8u i=0; i<num_swb; i++)
- {
- int16u width = Aac_swb_offset_short_window[sampling_frequency_index]->swb_offset[i+1] - Aac_swb_offset_short_window[sampling_frequency_index]->swb_offset[i];
- width *= window_group_length[g];
- sect_sfb_offset[g][sect_sfb++] = offset;
- offset += width;
- }
- sect_sfb_offset[g][sect_sfb] = offset;
- }
- break;
- default: ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::pulse_data()
-{
- //Parsing
- int8u number_pulse;
- Get_S1(2,number_pulse, "number_pulse");
- Skip_S1(6, "pulse_start_sfb");
- for (int i = 0; i < number_pulse+1; i++)
- {
- Skip_S1(5, "pulse_offset[i]");
- Skip_S1(4, "pulse_amp[i]");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::coupling_channel_element()
-{
- //Parsing
- int8u num_coupled_elements;
- bool ind_sw_cce_flag;
- Skip_S1(4, "element_instance_tag");
- Get_SB ( ind_sw_cce_flag, "ind_sw_cce_flag");
- Get_S1 (3, num_coupled_elements, "num_coupled_elements");
- size_t num_gain_element_lists=0;
- for (int8u c=0; c<num_coupled_elements+1; c++)
- {
- num_gain_element_lists++;
- bool cc_target_is_cpe;
- Get_SB ( cc_target_is_cpe, "cc_target_is_cpe[c]");
- Skip_S1(4, "cc_target_tag_select[c]");
- if (cc_target_is_cpe)
- {
- bool cc_l, cc_r;
- Get_SB (cc_l, "cc_l[c]");
- Get_SB (cc_r, "cc_r[c]");
- if (cc_l && cc_r)
- num_gain_element_lists++;
- }
- }
- Skip_SB( "cc_domain");
- Skip_SB( "gain_element_sign");
- Skip_S1(2, "gain_element_scale");
- individual_channel_stream(false, false);
- if (!Element_IsOK())
- return;
- bool cge;
- for (size_t c=1; c<num_gain_element_lists; c++)
- {
- if (ind_sw_cce_flag)
- cge = true;
- else
- Get_SB (cge, "common_gain_element_present[c]");
- if (cge)
- hcod_sf( "hcod_sf[common_gain_element[c]]");
- else
- {
- for (int g = 0; g < num_window_groups; g++)
- {
- for (int sfb=0; sfb<max_sfb; sfb++)
- {
- if (sfb_cb[g][sfb]) //Not ZERO_HCB
- hcod_sf( "hcod_sf[dpcm_gain_element[c][g][sfb]]");
- }
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::lfe_channel_element()
-{
- Skip_S1(4, "element_instance_tag");
- individual_channel_stream(false, false);
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::data_stream_element()
-{
- bool data_byte_align_flag;
- int16u cnt;
- int8u count;
- Skip_S1(4, "element_instance_tag");
- Get_SB ( data_byte_align_flag, "data_byte_align_flag");
- Get_S1 (8, count, "count");
- cnt=count;
- if (cnt==255)
- {
- Get_S1(8, count, "esc_count");
- cnt+=count;
- }
- if (data_byte_align_flag)
- {
- if (Data_BS_Remain()%8)
- Skip_S1(Data_BS_Remain()%8, "byte_alignment");
- }
- Element_Begin1("data_stream_byte[element_instance_tag]");
- for (int16u i=0; i<cnt; i++)
- Skip_S1(8, "[i]");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::fill_element(int8u id_syn_ele)
-{
- //Parsing
- int8u count;
- Get_S1 (4, count, "count");
- size_t cnt=count;
- if (count==15)
- {
- int8u esc_count;
- Get_S1 (8, esc_count, "esc_count");
- cnt+=esc_count-1;
- }
- if (cnt)
- {
- if (Data_BS_Remain()>=8*cnt)
- {
- size_t End=Data_BS_Remain()-8*cnt;
- extension_payload(End, id_syn_ele);
- }
- else
- Skip_BS(Data_BS_Remain(), "(Error)");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::gain_control_data()
-{
- int8u max_band, adjust_num, aloc_bits, aloc_bits0;
- int8u wd_max=0;
- switch(window_sequence)
- {
- case 0 : //ONLY_LONG_SEQUENCE
- wd_max = 1;
- aloc_bits0 = 5;
- aloc_bits = 5;
- break;
- case 1 : //LONG_START_SEQUENCE
- wd_max = 2;
- aloc_bits0 = 4;
- aloc_bits = 2;
- break;
- case 2 : //EIGHT_SHORT_SEQUENCE
- wd_max = 8;
- aloc_bits0 = 2;
- aloc_bits = 2;
- break;
- case 3 : //LONG_STOP_SEQUENCE
- wd_max = 2;
- aloc_bits0 = 4;
- aloc_bits = 5;
- break;
- default: return; //Never happens but makes compiler happy
- }
- Get_S1 (2, max_band, "max_band");
- for (int8u bd=1; bd<=max_band; bd++)
- {
- for (int8u wd=0; wd<wd_max; wd++)
- {
- Get_S1(3, adjust_num, "adjust_num[bd][wd]");
- for (int8u ad=0; ad<adjust_num; ad++)
- {
- Skip_S1(4, "alevcode[bd][wd][ad]");
- Skip_S1(wd==0?aloc_bits0:aloc_bits, "aloccode[bd][wd][ad]");
- }
- }
- }
-}
-
-//***************************************************************************
-// Elements - Subsidiary
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::individual_channel_stream (bool common_window, bool scale_flag)
-{
- Element_Begin1("individual_channel_stream");
- Skip_S1(8, "global_gain");
- if (!common_window && !scale_flag)
- ics_info();
- if (!Element_IsOK())
- {
- Element_End0();
- return;
- }
- section_data();
- if (!Element_IsOK())
- {
- Element_End0();
- return;
- }
- scale_factor_data();
- if (!Element_IsOK())
- {
- Element_End0();
- return;
- }
- if (!scale_flag)
- {
- bool pulse_data_present;
- Get_SB (pulse_data_present, "pulse_data_present");
- if (pulse_data_present)
- pulse_data ();
- bool tns_data_present;
- Get_SB(tns_data_present, "tns_data_present");
- if (tns_data_present)
- tns_data ();
- bool gain_control_data_present;
- Get_SB(gain_control_data_present, "gain_control_data_present");
- if (gain_control_data_present)
- gain_control_data ();
- }
- if (!aacSpectralDataResilienceFlag)
- spectral_data ();
- else
- {
- Skip_BS(Data_BS_Remain(), "Not implemented");
- //~ length_of_reordered_spectral_data;
- //~ length_of_longest_codeword;
- //~ reordered_spectral_data ();
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::section_data()
-{
- Element_Begin1("section_data");
- int8u sect_esc_val;
- if (window_sequence==2) //EIGHT_SHORT_SEQUENCE
- sect_esc_val=(1<<3)-1;
- else
- sect_esc_val=(1<<5)-1;
- for (int8u g=0; g<num_window_groups; g++)
- {
- if (num_window_groups>1)
- Element_Begin1("windows");
- int8u k=0;
- int8u i=0;
- while (k<max_sfb)
- {
- if (aacSectionDataResilienceFlag)
- Get_S1(5, sect_cb[g][i], "sect_cb[g][i]");
- else
- Get_S1(4, sect_cb[g][i], "sect_cb[g][i]");
- int8u sect_len=0;
- int8u sect_len_incr;
- if (!aacSectionDataResilienceFlag || sect_cb[g][i]<11 || (sect_cb[g][i]>11 && sect_cb[g][i]<16))
- {
- for (;;)
- {
- if (Data_BS_Remain()==0)
- {
- Trusted_IsNot("Size is wrong");
- if (num_window_groups>1)
- Element_End0();
- Element_End0();
- return; //Error
- }
- Get_S1 ((window_sequence==2?3:5), sect_len_incr, "sect_len_incr"); // (window_sequence == EIGHT_SHORT_SEQUENCE) => 3
- if (sect_len_incr!=sect_esc_val)
- break;
- sect_len+=sect_esc_val;
- }
- }
- else
- sect_len_incr=1;
- sect_len+=sect_len_incr;
- sect_start[g][i]=k;
- sect_end[g][i]=k+sect_len;
- for (int16u sfb=k; sfb<k+sect_len; sfb++)
- sfb_cb[g][sfb]=sect_cb[g][i];
- k+= sect_len;
- i++;
- if (i>64)
- {
- Trusted_IsNot("Increment is wrong");
- if (num_window_groups>1)
- Element_End0();
- Element_End0();
- return; //Error
- }
- }
- num_sec[g]=i;
- if (num_window_groups>1)
- Element_End0();
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::scale_factor_data()
-{
- Element_Begin1("scale_factor_data");
- if (!aacScalefactorDataResilienceFlag)
- {
- bool noise_pcm_flag=true;
- for (int g=0; g<num_window_groups; g++)
- {
- for (int8u sfb=0; sfb<max_sfb; sfb++)
- {
- if (sfb_cb[g][sfb]) //Not ZERO_HCB
- {
- if (is_intensity( g, sfb))
- hcod_sf( "hcod_sf[dpcm_is_position[g][sfb]]");
- else
- {
- if (is_noise(g, sfb))
- {
- if (noise_pcm_flag)
- {
- noise_pcm_flag = 0;
- Skip_S2(9, "dpcm_noise_nrg[g][sfb]");
- }
- else
- hcod_sf( "hcod_sf[dpcm_noise_nrg[g][sfb]]");
- }
- else
- hcod_sf( "hcod_sf[dpcm_sf[g][sfb]]");
- }
- }
- }
- }
- }
- else
- {
- //scale_factor_data - part not implemented
- Skip_BS(Data_BS_Remain(), "Not implemented");
- //~ intensity_used = 0;
- //~ noise_used = 0;
- //~ sf_concealment;
- //~ rev_global_gain;
- //~ length_of_rvlc_sf;
- //~ for ( g = 0; g < num_window_groups; g++ ) {
- //~ for ( sfb=0; sfb < max_sfb; sfb++ ) {
- //~ if ( sfb_cb[g][sfb] ) { //Not ZERO_HCB
- //~ if ( is_intensity ( g, sfb) ) {
- //~ intensity_used = 1;
- //~ rvlc_cod_sf[dpcm_is_position[g][sfb]];
- //~ } else {
- //~ if ( is_noise(g,sfb) ) {
- //~ if ( ! noise_used ) {
- //~ noise_used = 1;
- //~ dpcm_noise_nrg[g][sfb];
- //~ } else {
- //~ rvlc_cod_sf[dpcm_noise_nrg[g][sfb]];
- //~ }
- //~ } else {
- //~ rvlc_cod_sf[dpcm_sf[g][sfb]];
- //~ }
- //~ }
- //~ }
- //~ }
- //~ }
- //~ if ( intensity_used ) {
- //~ rvlc_cod_sf[dpcm_is_last_position];
- //~ }
- //~ noise_used = 0;
- //~ sf_escapes_present;
- //~ if ( sf_escapes_present ) {
- //~ length_of_rvlc_escapes;
- //~ for ( g = 0; g < num_window_groups; g++ ) {
- //~ for ( sfb = 0; sfb < max_sfb; sfb++ ) {
- //~ if ( sfb_cb[g][sfb]) { //Not ZERO_HCB
- //~ if ( is_intensity ( g, sfb ) && dpcm_is_position[g][sfb] == ESC_FLAG ) {
- //~ rvlc_esc_sf[dpcm_is_position[g][sfb]];
- //~ } else {
- //~ if ( is_noise ( g, sfb ) {
- //~ if ( ! noise_used ) {
- //~ noise_used = 1;
- //~ } else {
- //~ if (dpcm_noise_nrg[g][sfb] == ESC_FLAG ) {
- //~ rvlc_esc_sf[dpcm_noise_nrg[g][sfb]];
- //~ }
- //~ }
- //~ } else {
- //~ if (dpcm_sf[g][sfb] == ESC_FLAG ) {
- //~ rvlc_esc_sf[dpcm_sf[g][sfb]];
- //~ }
- //~ }
- //~ }
- //~ }
- //~ }
- //~ }
- //~ if ( intensity_used && dpcm_is_last_position == ESC_FLAG ) {
- //~ rvlc_esc_sf[dpcm_is_last_position];
- //~ }
- //~ }
- //~ if ( noise_used ) {
- //~ dpcm_noise_last_position;
- //~ }
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::tns_data()
-{
- int8u n_filt_bits=2;
- int8u length_bits=6;
- int8u order_bits=5;
-
- if (window_sequence==2) //EIGHT_SHORT_SEQUENCE
- {
- n_filt_bits=1;
- length_bits=4;
- order_bits=3;
- }
-
- for (int8u w=0; w<num_windows; w++)
- {
- int8u start_coef_bits, n_filt;
- Get_S1(n_filt_bits, n_filt, "n_filt[w]");
- if (n_filt)
- {
- bool coef_res;
- Get_SB (coef_res, "coef_res[w]");
- start_coef_bits=coef_res?4:3;
-
- for (int8u filt=0; filt<n_filt; filt++)
- {
- int8u order;
- Skip_S1(length_bits, "length[w][filt]");
- Get_S1 (order_bits, order, "order[w][filt]");
- if (order)
- {
- bool coef_compress;
- Skip_SB( "direction[w][filt]");
- Get_SB (coef_compress, "coef_compress[w][filt]");
- int8u coef_bits=start_coef_bits-(coef_compress?1:0);
- for (int8u i=0; i<order; i++)
- Skip_S1(coef_bits, "coef[w][filt][i]");
- }
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::ltp_data()
-{
- Element_Begin1("ltp_data");
- //int sfb;
- //bool ltp_lag_update;
- //if (AudioObjectType == ER_AAC_LD ) {
- //~ Get_SB(ltp_lag_update,"ltp_lag_update");
- //~ if ( ltp_lag_update ) {
- //~ Get_S2(10,ltp_lag,"ltp_lag");
- //~ } else {
- //~ //ltp_lag = ltp_prev_lag;
- //~ }
- //~ Skip_S1(3,"ltp_coef");
- //~ for (sfb = 0; sfb <(max_sfb<MAX_LTP_LONG_SFB?max_sfb:MAX_LTP_LONG_SFB);& sfb++ ) {
- //~ Skip_SB("ltp_long_used[sfb]");
- //~ }
- //} else {
- Get_S2(11,ltp_lag, "ltp_lag");
- Skip_S1(3, "ltp_coef");
- if(window_sequence!=2) //EIGHT_SHORT_SEQUENCE
- {
- for (int8u sfb=0; sfb<(max_sfb<40?max_sfb:40); sfb++ ) //MAX_LTP_LONG_SFB=40
- Skip_SB("ltp_long_used[sfb]");
- }
- //}
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::spectral_data()
-{
- Element_Begin1("spectral_data");
- for (int g = 0; g < num_window_groups; g++)
- {
- if (num_window_groups>1)
- Element_Begin1("windows");
- for (int8u i=0; i<num_sec[g]; i++)
- {
- switch (sect_cb[g][i])
- {
- case 0 : //ZERO_HCB
- case 13 : //NOISE_HCB
- case 14 : //INTENSITY_HCB2
- case 15 : //INTENSITY_HCB
- break;
- default :
- if (sect_end[g][i]>=num_swb+1)
- {
- Trusted_IsNot("(Problem)");
- Skip_BS(Data_BS_Remain(), "(Problem)");
- if (num_window_groups>1)
- Element_End0();
- Element_End0();
- return;
- }
- for (int16u k=sect_sfb_offset[g][sect_start[g][i]]; k<sect_sfb_offset[g][sect_end[g][i]]; k+=(sect_cb[g][i]<5?4:2))
- {
- hcod(sect_cb[g][i], "sect_cb");
- if (!Element_IsOK())
- {
- Skip_BS(Data_BS_Remain(), "(Problem)");
- if (num_window_groups>1)
- Element_End0();
- Element_End0();
- return;
- }
- }
- }
- }
- if (num_window_groups>1)
- Element_End0();
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::extension_payload(size_t End, int8u id_aac)
-{
- Element_Begin1("extension_payload");
- int8u extension_type;
- Get_S1 (4, extension_type, "extension_type");
- switch(extension_type)
- {
- case 11 : dynamic_range_info(); break; //EXT_DYNAMIC_RANGE
- case 12 : sac_extension_data(End); break; //EXT_SAC_DATA
- case 13 : sbr_extension_data(End, id_aac, 0); break; //EXT_SBR_DATA
- case 14 : sbr_extension_data(End, id_aac, 1); break; //EXT_SBR_DATA_CRC
- case 1 : //EXT_FILL_DATA
- Skip_S1(4, "fill_nibble"); Param_Info1("must be 0000");
- if (Data_BS_Remain()>End)
- {
- Element_Begin1("fill_byte");
- while (Data_BS_Remain()>End)
- Skip_S1(8, "fill_byte[i]"); Param_Info1("must be 10100101");
- Element_End0();
- }
- break;
- case 2 : //EXT_DATA_ELEMENT
- int8u data_element_version;
- Get_S1 (4,data_element_version, "data_element_version");
- switch(data_element_version)
- {
- case 0 : //ANC_DATA
- {
- int16u dataElementLength=0;
- int8u dataElementLengthPart;
- do
- {
- Get_S1 (8, dataElementLengthPart, "dataElementLengthPart");
- dataElementLength+=dataElementLengthPart;
- }
- while (dataElementLengthPart==255);
- Skip_BS(8*dataElementLength, "data_element_byte[i]");
- }
- break;
- default: ;
- }
- break;
- case 0 : //EXT_FILL
- default:
- Skip_BS(Data_BS_Remain()-End, "other_bits");
- }
-
- Element_End0();
- if (End<Data_BS_Remain())
- Skip_BS(Data_BS_Remain()-End, "padding");
- if (Data_BS_Remain()!=End)
- {
- Skip_BS(Data_BS_Remain(), "Wrong size");
- Trusted_IsNot("Wrong size");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::dynamic_range_info()
-{
- Element_Begin1("dynamic_range_info");
- int8u drc_num_bands=1;
- bool present;
- Get_SB (present, "pce_tag_present");
- if (present)
- {
- Skip_S1(4, "pce_ instance_tag");
- Skip_S1(4, "drc_tag_reserved_bits");
- }
- Skip_SB( "excluded_chns_present");
- Get_SB (present, "drc_bands_present");
- if (present)
- {
- int8u drc_band_incr;
- Get_S1 (4, drc_band_incr, "drc_band_incr");
- Skip_S1(4, "drc_interpolation_scheme");
- drc_num_bands+=drc_band_incr;
- for (int8u i=0; i<drc_num_bands; i++)
- {
- Skip_S1(8, "drc_band_top[i]");
- }
- }
- Get_SB (present, "prog_ref_level_present");
- if (present)
- {
- Skip_S1(7, "prog_ref_level");
- Skip_S1(1, "prog_ref_level_reserved_bits");
- }
- for (int8u i=0; i<drc_num_bands; i++)
- {
- Skip_S1(1, "dyn_rng_sgn[i]");
- Skip_S1(7, "dyn_rng_ctl[i]");
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sac_extension_data(size_t End)
-{
- Element_Begin1("sac_extension_data");
- Skip_S1(2, "ancType");
- Skip_SB( "ancStart");
- Skip_SB( "ancStop");
- Element_Begin1("ancDataSegmentByte");
- while (Data_BS_Remain()>End)
- Skip_S1(8, "ancDataSegmentByte[i]");
- Element_End0();
- Element_End0();
-}
-
-//***************************************************************************
-// Elements - Perceptual noise substitution (PNS)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-int File_Aac::is_intensity(size_t group, size_t sfb)
-{
- switch (sfb_cb[group][sfb])
- {
- case 14 : return 1;
- case 15 : return -1;
- default : return 0;
- }
-}
-
-//---------------------------------------------------------------------------
-bool File_Aac::is_noise(size_t group, size_t sfb)
-{
- return (sfb_cb[group][sfb]==13);
-}
-//---------------------------------------------------------------------------
-void File_Aac::hcod_sf(const char* Name)
-{
- Element_Begin1(Name);
- int16u Pos=0;
-
- while (huffman_sf[Pos][1])
- {
- bool h;
- Get_SB (h, "huffman");
- Pos+=huffman_sf[Pos][h];
-
- if (Pos>240)
- {
- Skip_BS(Data_BS_Remain(), "Error");
- Element_End0();
- return;
- }
- }
- Element_Info1(huffman_sf[Pos][0]-60);
- Element_End0();
-
- return;
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::hcod_2step(int8u CodeBook, int8s* Values, int8u Values_Count)
-{
- int8u CodeWord;
- int8u ToRead=hcb_2step_Bytes[CodeBook];
- if ((size_t)ToRead>Data_BS_Remain())
- ToRead=(int8u)Data_BS_Remain(); //Read a maximum of remaining bytes
- Peek_S1(ToRead, CodeWord);
- int16u Offset=hcb_2step[CodeBook][CodeWord].Offset;
- int8u Extra=hcb_2step[CodeBook][CodeWord].Extra;
-
- if (Extra)
- {
- Skip_BS(hcb_2step_Bytes[CodeBook], "extra");
- int8u Offset_inc;
- Peek_S1(Extra, Offset_inc);
- Offset+=Offset_inc;
- if(hcb_table[CodeBook][Offset][0]-hcb_2step_Bytes[CodeBook])
- Skip_BS(hcb_table[CodeBook][Offset][0]-hcb_2step_Bytes[CodeBook],"extra");
- }
- else
- {
- Skip_BS(hcb_table[CodeBook][Offset][0], "bits");
- }
-
- if (Offset>=hcb_table_size[CodeBook])
- {
- Skip_BS(Data_BS_Remain(), "Error");
- return;
- }
-
- for (int8u Pos=0; Pos<Values_Count; Pos++)
- Values[Pos]=hcb_table[CodeBook][Offset][Pos+1];
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::hcod_binary(int8u CodeBook, int8s* Values, int8u Values_Count)
-{
- int16u Offset=0;
- while (!hcb_table[CodeBook][Offset][0])
- {
- bool b;
- Get_SB(b, "huffman binary");
- Offset+=hcb_table[CodeBook][Offset][1+(b?1:0)];
- }
-
- if (Offset>=hcb_table_size[CodeBook])
- {
- Skip_BS(Data_BS_Remain(), "Error");
- return;
- }
-
- for (int8u Pos=0; Pos<Values_Count; Pos++)
- Values[Pos]=hcb_table[CodeBook][Offset][Pos+1];
-}
-
-
-
-//***************************************************************************
-// Elements - Enhanced Low Delay Codec
-//***************************************************************************
-
-
-//---------------------------------------------------------------------------
-void File_Aac::ELDSpecificConfig ()
-{
- Element_Begin1("ELDSpecificConfig");
- Skip_SB("frameLengthFlag");
- Skip_SB("aacSectionDataResilienceFlag");
- Skip_SB("aacScalefactorDataResilienceFlag");
- Skip_SB("aacSpectralDataResilienceFlag");
-
- bool ldSbrPresentFlag;
- Get_SB(ldSbrPresentFlag,"ldSbrPresentFlag");
- if (ldSbrPresentFlag)
- {
- Skip_SB("ldSbrSamplingRate");
- Skip_SB("ldSbrCrcFlag");
- ld_sbr_header();
- }
-
- int8u eldExtType;
- for (;;)
- {
- Get_S1(4,eldExtType,"eldExtType");
- if (eldExtType == 0/*ELDEXT_TERM*/)
- break;
-
- int8u eldExtLen,eldExtLenAdd=0;
- int16u eldExtLenAddAdd;
- Get_S1(4,eldExtLen,"eldExtLen");
- int32u len = eldExtLen;
- if (eldExtLen == 15)
- {
- Get_S1(8,eldExtLenAdd,"eldExtLenAdd");
- len += eldExtLenAdd;
- }
- if (eldExtLenAdd==255)
- {
- Get_S2(16,eldExtLenAddAdd,"eldExtLenAddAdd");
- len += eldExtLenAdd;
- }
- //~ switch (eldExtType) {
- /* add future eld extension configs here */
- //~ default:
- for(int32u cnt=0; cnt<len; cnt++)
- Skip_S1(8,"other_byte");
- //~ break;
- //~ }
-
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::ld_sbr_header()
-{
- int8u numSbrHeader;
- switch (channelConfiguration)
- {
- case 1:
- case 2:
- numSbrHeader = 1;
- break;
- case 3:
- numSbrHeader = 2;
- break;
- case 4:
- case 5:
- case 6:
- numSbrHeader = 3;
- break;
- case 7:
- numSbrHeader = 4;
- break;
- default:
- numSbrHeader = 0;
- break;
- }
-
- for (int el=0; el<numSbrHeader; el++) {
- //~ sbr_header();
- Element_Begin1("not implemented");
- Element_End0();
- }
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::hcod(int8u sect_cb, const char* Name)
-{
- int8s Values[4];
-
- Element_Begin1(Name);
- switch (sect_cb)
- {
- case 1 :
- case 2 :
- case 4 : //4-values, 2-step method
- hcod_2step(sect_cb, Values, 4);
- break;
- case 3 : //4-values, binary search method
- hcod_binary(sect_cb, Values, 4);
- break;
- case 5 :
- case 7 :
- case 9 : //2-values, binary search method
- hcod_binary(sect_cb, Values, 2);
- break;
- case 6 :
- case 8 :
- case 10 :
- case 11 : //2-values, 2-step method
- hcod_2step(sect_cb, Values, 2);
- break;
- default: Trusted_IsNot("(Problem)");
- Element_End0();
- return;
- }
-
- switch (sect_cb)
- {
- case 1 :
- case 2 :
- case 5 :
- case 6 :
- break;
- default : //With sign
- for(int i=0; i<((sect_cb<5)?4:2); i++)
- if(Values[i])
- Skip_SB( "sign");
- }
-
- switch (sect_cb)
- {
- case 11 : //With hcod_esc
- for (int i=0; i<2; i++)
- if (Values[i]==16 || Values[i] == -16)
- {
- Element_Begin1("hcod_esc");
- bool Escape;
- int BitCount=3;
- do
- {
- BitCount++;
- Get_SB(Escape, "bit count");
- }
- while (Escape);
-
-
- Skip_BS(BitCount, "value");
- Element_End0();
-
- }
- break;
- default: ;
- }
-
- Element_End0();
-}
-
-
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_AAC_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio.h
deleted file mode 100644
index 66efff705..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio.h
+++ /dev/null
@@ -1,2837 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Aac_GeneralAudioH
-#define MediaInfo_File_Aac_GeneralAudioH
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Huffman tables
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Optimal huffman from:
-// "SELECTING AN OPTIMAL HUFFMAN DECODER FOR AAC"
-// VLADIMIR Z. MESAROVIC , RAGHUNATH RAO, MIROSLAV V. DOKIC, and SACHIN DEO
-// AES Convention Paper 5436
-
-//---------------------------------------------------------------------------
-//2-step 1st pass
-struct hcb_struct_1
-{
- int8u Offset;
- int8u Extra;
-};
-
-//2-step 2nd pass or binary
-typedef int8s hcb_struct[5]; //0=bits to read (2step) or more to read (binary), 1-4: data (1-2 in case of pairs)
-
-//---------------------------------------------------------------------------
-// Scalefactor Huffman Codebook
-static int8u huffman_sf[241][2]=
-{
- { 1, 2 },
- { 60, 0 },
- { 1, 2 },
- { 2, 3 },
- { 3, 4 },
- { 59, 0 },
- { 3, 4 },
- { 4, 5 },
- { 5, 6 },
- { 61, 0 },
- { 58, 0 },
- { 62, 0 },
- { 3, 4 },
- { 4, 5 },
- { 5, 6 },
- { 57, 0 },
- { 63, 0 },
- { 4, 5 },
- { 5, 6 },
- { 6, 7 },
- { 7, 8 },
- { 56, 0 },
- { 64, 0 },
- { 55, 0 },
- { 65, 0 },
- { 4, 5 },
- { 5, 6 },
- { 6, 7 },
- { 7, 8 },
- { 66, 0 },
- { 54, 0 },
- { 67, 0 },
- { 5, 6 },
- { 6, 7 },
- { 7, 8 },
- { 8, 9 },
- { 9, 10 },
- { 53, 0 },
- { 68, 0 },
- { 52, 0 },
- { 69, 0 },
- { 51, 0 },
- { 5, 6 },
- { 6, 7 },
- { 7, 8 },
- { 8, 9 },
- { 9, 10 },
- { 70, 0 },
- { 50, 0 },
- { 49, 0 },
- { 71, 0 },
- { 6, 7 },
- { 7, 8 },
- { 8, 9 },
- { 9, 10 },
- { 10, 11 },
- { 11, 12 },
- { 72, 0 },
- { 48, 0 },
- { 73, 0 },
- { 47, 0 },
- { 74, 0 },
- { 46, 0 },
- { 6, 7 },
- { 7, 8 },
- { 8, 9 },
- { 9, 10 },
- { 10, 11 },
- { 11, 12 },
- { 76, 0 },
- { 75, 0 },
- { 77, 0 },
- { 78, 0 },
- { 45, 0 },
- { 43, 0 },
- { 6, 7 },
- { 7, 8 },
- { 8, 9 },
- { 9, 10 },
- { 10, 11 },
- { 11, 12 },
- { 44, 0 },
- { 79, 0 },
- { 42, 0 },
- { 41, 0 },
- { 80, 0 },
- { 40, 0 },
- { 6, 7 },
- { 7, 8 },
- { 8, 9 },
- { 9, 10 },
- { 10, 11 },
- { 11, 12 },
- { 81, 0 },
- { 39, 0 },
- { 82, 0 },
- { 38, 0 },
- { 83, 0 },
- { 7, 8 },
- { 8, 9 },
- { 9, 10 },
- { 10, 11 },
- { 11, 12 },
- { 12, 13 },
- { 13, 14 },
- { 37, 0 },
- { 35, 0 },
- { 85, 0 },
- { 33, 0 },
- { 36, 0 },
- { 34, 0 },
- { 84, 0 },
- { 32, 0 },
- { 6, 7 },
- { 7, 8 },
- { 8, 9 },
- { 9, 10 },
- { 10, 11 },
- { 11, 12 },
- { 87, 0 },
- { 89, 0 },
- { 30, 0 },
- { 31, 0 },
- { 8, 9 },
- { 9, 10 },
- { 10, 11 },
- { 11, 12 },
- { 12, 13 },
- { 13, 14 },
- { 14, 15 },
- { 15, 16 },
- { 86, 0 },
- { 29, 0 },
- { 26, 0 },
- { 27, 0 },
- { 28, 0 },
- { 24, 0 },
- { 88, 0 },
- { 9, 10 },
- { 10, 11 },
- { 11, 12 },
- { 12, 13 },
- { 13, 14 },
- { 14, 15 },
- { 15, 16 },
- { 16, 17 },
- { 17, 18 },
- { 25, 0 },
- { 22, 0 },
- { 23, 0 },
- { 15, 16 },
- { 16, 17 },
- { 17, 18 },
- { 18, 19 },
- { 19, 20 },
- { 20, 21 },
- { 21, 22 },
- { 22, 23 },
- { 23, 24 },
- { 24, 25 },
- { 25, 26 },
- { 26, 27 },
- { 27, 28 },
- { 28, 29 },
- { 29, 30 },
- { 90, 0 },
- { 21, 0 },
- { 19, 0 },
- { 3, 0 },
- { 1, 0 },
- { 2, 0 },
- { 0, 0 },
- { 23, 24 },
- { 24, 25 },
- { 25, 26 },
- { 26, 27 },
- { 27, 28 },
- { 28, 29 },
- { 29, 30 },
- { 30, 31 },
- { 31, 32 },
- { 32, 33 },
- { 33, 34 },
- { 34, 35 },
- { 35, 36 },
- { 36, 37 },
- { 37, 38 },
- { 38, 39 },
- { 39, 40 },
- { 40, 41 },
- { 41, 42 },
- { 42, 43 },
- { 43, 44 },
- { 44, 45 },
- { 45, 46 },
- { 98, 0 },
- { 99, 0 },
- { 100, 0 },
- { 101, 0 },
- { 102, 0 },
- { 117, 0 },
- { 97, 0 },
- { 91, 0 },
- { 92, 0 },
- { 93, 0 },
- { 94, 0 },
- { 95, 0 },
- { 96, 0 },
- { 104, 0 },
- { 111, 0 },
- { 112, 0 },
- { 113, 0 },
- { 114, 0 },
- { 115, 0 },
- { 116, 0 },
- { 110, 0 },
- { 105, 0 },
- { 106, 0 },
- { 107, 0 },
- { 108, 0 },
- { 109, 0 },
- { 118, 0 },
- { 6, 0 },
- { 8, 0 },
- { 9, 0 },
- { 10, 0 },
- { 5, 0 },
- { 103, 0 },
- { 120, 0 },
- { 119, 0 },
- { 4, 0 },
- { 7, 0 },
- { 15, 0 },
- { 16, 0 },
- { 18, 0 },
- { 20, 0 },
- { 17, 0 },
- { 11, 0 },
- { 12, 0 },
- { 14, 0 },
- { 13, 0 }
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 1
-static hcb_struct_1 huffman_01_1[32]=
-{
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 1, 0 },
- { 2, 0 },
- { 3, 0 },
- { 4, 0 },
- { 5, 0 },
- { 6, 0 },
- { 7, 0 },
- { 8, 0 },
- { 9, 2 },
- { 13, 2 },
- { 17, 2 },
- { 21, 2 },
- { 25, 2 },
- { 29, 2 },
- { 33, 4 },
- { 49, 6 }
-};
-
-static hcb_struct huffman_01[114]=
-{
- { 1, 0, 0, 0, 0 },
- { 5, 1, 0, 0, 0 },
- { 5, -1, 0, 0, 0 },
- { 5, 0, 0, 0, -1 },
- { 5, 0, 1, 0, 0 },
- { 5, 0, 0, 0, 1 },
- { 5, 0, 0, -1, 0 },
- { 5, 0, 0, 1, 0 },
- { 5, 0, -1, 0, 0 },
- { 7, 1, -1, 0, 0 },
- { 7, -1, 1, 0, 0 },
- { 7, 0, 0, -1, 1 },
- { 7, 0, 1, -1, 0 },
- { 7, 0, -1, 1, 0 },
- { 7, 0, 0, 1, -1 },
- { 7, 1, 1, 0, 0 },
- { 7, 0, 0, -1, -1 },
- { 7, -1, -1, 0, 0 },
- { 7, 0, -1, -1, 0 },
- { 7, 1, 0, -1, 0 },
- { 7, 0, 1, 0, -1 },
- { 7, -1, 0, 1, 0 },
- { 7, 0, 0, 1, 1 },
- { 7, 1, 0, 1, 0 },
- { 7, 0, -1, 0, 1 },
- { 7, 0, 1, 1, 0 },
- { 7, 0, 1, 0, 1 },
- { 7, -1, 0, -1, 0 },
- { 7, 1, 0, 0, 1 },
- { 7, -1, 0, 0, -1 },
- { 7, 1, 0, 0, -1 },
- { 7, -1, 0, 0, 1 },
- { 7, 0, -1, 0, -1 },
- { 9, 1, 1, -1, 0 },
- { 9, -1, 1, -1, 0 },
- { 9, 1, -1, 1, 0 },
- { 9, 0, 1, 1, -1 },
- { 9, 0, 1, -1, 1 },
- { 9, 0, -1, 1, 1 },
- { 9, 0, -1, 1, -1 },
- { 9, 1, -1, -1, 0 },
- { 9, 1, 0, -1, 1 },
- { 9, 0, 1, -1, -1 },
- { 9, -1, 1, 1, 0 },
- { 9, -1, 0, 1, -1 },
- { 9, -1, -1, 1, 0 },
- { 9, 0, -1, -1, 1 },
- { 9, 1, -1, 0, 1 },
- { 9, 1, -1, 0, -1 },
- { 9, -1, 1, 0, -1 },
- { 9, -1, 1, 0, -1 },
- { 9, -1, 1, 0, -1 },
- { 9, -1, 1, 0, -1 },
- { 9, -1, -1, -1, 0 },
- { 9, -1, -1, -1, 0 },
- { 9, -1, -1, -1, 0 },
- { 9, -1, -1, -1, 0 },
- { 9, 0, -1, -1, -1 },
- { 9, 0, -1, -1, -1 },
- { 9, 0, -1, -1, -1 },
- { 9, 0, -1, -1, -1 },
- { 9, 0, 1, 1, 1 },
- { 9, 0, 1, 1, 1 },
- { 9, 0, 1, 1, 1 },
- { 9, 0, 1, 1, 1 },
- { 9, 1, 0, 1, -1 },
- { 9, 1, 0, 1, -1 },
- { 9, 1, 0, 1, -1 },
- { 9, 1, 0, 1, -1 },
- { 9, 1, 1, 0, 1 },
- { 9, 1, 1, 0, 1 },
- { 9, 1, 1, 0, 1 },
- { 9, 1, 1, 0, 1 },
- { 9, -1, 1, 0, 1 },
- { 9, -1, 1, 0, 1 },
- { 9, -1, 1, 0, 1 },
- { 9, -1, 1, 0, 1 },
- { 9, 1, 1, 1, 0 },
- { 9, 1, 1, 1, 0 },
- { 9, 1, 1, 1, 0 },
- { 9, 1, 1, 1, 0 },
- { 10, -1, -1, 0, 1 },
- { 10, -1, -1, 0, 1 },
- { 10, -1, 0, -1, -1 },
- { 10, -1, 0, -1, -1 },
- { 10, 1, 1, 0, -1 },
- { 10, 1, 1, 0, -1 },
- { 10, 1, 0, -1, -1 },
- { 10, 1, 0, -1, -1 },
- { 10, -1, 0, -1, 1 },
- { 10, -1, 0, -1, 1 },
- { 10, -1, -1, 0, -1 },
- { 10, -1, -1, 0, -1 },
- { 10, -1, 0, 1, 1 },
- { 10, -1, 0, 1, 1 },
- { 10, 1, 0, 1, 1 },
- { 10, 1, 0, 1, 1 },
- { 11, 1, -1, 1, -1 },
- { 11, -1, 1, -1, 1 },
- { 11, -1, 1, 1, -1 },
- { 11, 1, -1, -1, 1 },
- { 11, 1, 1, 1, 1 },
- { 11, -1, -1, 1, 1 },
- { 11, 1, 1, -1, -1 },
- { 11, -1, -1, 1, -1 },
- { 11, -1, -1, -1, -1 },
- { 11, 1, 1, -1, 1 },
- { 11, 1, -1, 1, 1 },
- { 11, -1, 1, 1, 1 },
- { 11, -1, 1, -1, -1 },
- { 11, -1, -1, -1, 1 },
- { 11, 1, -1, -1, -1 },
- { 11, 1, 1, 1, -1 }
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 2
-static hcb_struct_1 huffman_02_1[] =
-{
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 1, 0 },
- { 1, 0 },
- { 2, 0 },
- { 3, 0 },
- { 4, 0 },
- { 5, 0 },
- { 6, 0 },
- { 7, 0 },
- { 8, 0 },
- { 9, 1 },
- { 11, 1 },
- { 13, 1 },
- { 15, 1 },
- { 17, 1 },
- { 19, 1 },
- { 21, 1 },
- { 23, 1 },
- { 25, 1 },
- { 27, 1 },
- { 29, 1 },
- { 31, 1 },
- { 33, 2 },
- { 37, 2 },
- { 41, 2 },
- { 45, 3 },
- { 53, 3 },
- { 61, 3 },
- { 69, 4 }
-};
-
-static hcb_struct huffman_02[86]=
-{
- { 3, 0, 0, 0, 0 },
- { 4, 1, 0, 0, 0 },
- { 5, -1, 0, 0, 0 },
- { 5, 0, 0, 0, 1 },
- { 5, 0, 0, -1, 0 },
- { 5, 0, 0, 0, -1 },
- { 5, 0, -1, 0, 0 },
- { 5, 0, 0, 1, 0 },
- { 5, 0, 1, 0, 0 },
- { 6, 0, -1, 1, 0 },
- { 6, -1, 1, 0, 0 },
- { 6, 0, 1, -1, 0 },
- { 6, 0, 0, 1, -1 },
- { 6, 0, 1, 0, -1 },
- { 6, 0, 0, -1, 1 },
- { 6, -1, 0, 0, -1 },
- { 6, 1, -1, 0, 0 },
- { 6, 1, 0, -1, 0 },
- { 6, -1, -1, 0, 0 },
- { 6, 0, 0, -1, -1 },
- { 6, 1, 0, 1, 0 },
- { 6, 1, 0, 0, 1 },
- { 6, 0, -1, 0, 1 },
- { 6, -1, 0, 1, 0 },
- { 6, 0, 1, 0, 1 },
- { 6, 0, -1, -1, 0 },
- { 6, -1, 0, 0, 1 },
- { 6, 0, -1, 0, -1 },
- { 6, -1, 0, -1, 0 },
- { 6, 1, 1, 0, 0 },
- { 6, 0, 1, 1, 0 },
- { 6, 0, 0, 1, 1 },
- { 6, 1, 0, 0, -1 },
- { 7, 0, 1, -1, 1 },
- { 7, 1, 0, -1, 1 },
- { 7, -1, 1, -1, 0 },
- { 7, 0, -1, 1, -1 },
- { 7, 1, -1, 1, 0 },
- { 7, 1, 1, 0, -1 },
- { 7, 1, 0, 1, 1 },
- { 7, -1, 1, 1, 0 },
- { 7, 0, -1, -1, 1 },
- { 7, 1, 1, 1, 0 },
- { 7, -1, 0, 1, -1 },
- { 7, -1, -1, -1, 0 },
- { 7, -1, 0, -1, 1 },
- { 7, -1, 0, -1, 1 },
- { 7, 1, -1, -1, 0 },
- { 7, 1, -1, -1, 0 },
- { 7, 1, 1, -1, 0 },
- { 7, 1, 1, -1, 0 },
- { 8, 1, -1, 0, 1 },
- { 8, -1, 1, 0, -1 },
- { 8, -1, -1, 1, 0 },
- { 8, -1, 0, 1, 1 },
- { 8, -1, -1, 0, 1 },
- { 8, -1, -1, 0, -1 },
- { 8, 0, -1, -1, -1 },
- { 8, 1, 0, 1, -1 },
- { 8, 1, 0, -1, -1 },
- { 8, 0, 1, -1, -1 },
- { 8, 0, 1, 1, 1 },
- { 8, -1, 1, 0, 1 },
- { 8, -1, 0, -1, -1 },
- { 8, 0, 1, 1, -1 },
- { 8, 1, -1, 0, -1 },
- { 8, 0, -1, 1, 1 },
- { 8, 1, 1, 0, 1 },
- { 8, 1, -1, 1, -1 },
- { 8, -1, 1, -1, 1 },
- { 8, -1, 1, -1, 1 },
- { 9, 1, -1, -1, 1 },
- { 9, -1, -1, -1, -1 },
- { 9, -1, 1, 1, -1 },
- { 9, -1, 1, 1, 1 },
- { 9, 1, 1, 1, 1 },
- { 9, -1, -1, 1, -1 },
- { 9, 1, -1, 1, 1 },
- { 9, -1, 1, -1, -1 },
- { 9, -1, -1, 1, 1 },
- { 9, 1, 1, -1, -1 },
- { 9, 1, -1, -1, -1 },
- { 9, -1, -1, -1, 1 },
- { 9, 1, 1, -1, 1 },
- { 9, 1, 1, 1, -1 }
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 2
-static hcb_struct huffman_03[161] =
-{
- { 0, 1, 2 },
- { 1, 0, 0 },
- { 0, 1, 2 },
- { 0, 2, 3 },
- { 0, 3, 4 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 1, 1, 0 },
- { 1, 0, 0, 0, 1 },
- { 1, 0, 1, 0, 0 },
- { 1, 0, 0, 1, 0 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 1, 1, 1 },
- { 1, 0, 0, 1, 1 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 1, 0, 1, 1, 0 },
- { 1, 0, 1, 0, 1 },
- { 1, 1, 0, 1, 0 },
- { 1, 0, 1, 1, 1 },
- { 1, 1, 0, 0, 1 },
- { 1, 1, 1, 1, 0 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 1, 1, 1, 1, 1 },
- { 1, 1, 0, 1, 1 },
- { 1, 1, 1, 0, 1 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 1, 2, 0, 0, 0 },
- { 1, 0, 0, 0, 2 },
- { 1, 0, 0, 1, 2 },
- { 1, 2, 1, 0, 0 },
- { 1, 1, 2, 1, 0 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 0, 22, 23 },
- { 0, 23, 24 },
- { 0, 24, 25 },
- { 0, 25, 26 },
- { 1, 0, 0, 2, 1 },
- { 1, 0, 1, 2, 1 },
- { 1, 1, 2, 0, 0 },
- { 1, 0, 1, 1, 2 },
- { 1, 2, 1, 1, 0 },
- { 1, 0, 0, 2, 0 },
- { 1, 0, 2, 1, 0 },
- { 1, 0, 1, 2, 0 },
- { 1, 0, 2, 0, 0 },
- { 1, 0, 1, 0, 2 },
- { 1, 2, 0, 1, 0 },
- { 1, 1, 2, 1, 1 },
- { 1, 0, 2, 1, 1 },
- { 1, 1, 1, 2, 0 },
- { 1, 1, 1, 2, 1 },
- { 0, 11, 12 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 1, 1, 2, 0, 1 },
- { 1, 1, 0, 2, 0 },
- { 1, 1, 0, 2, 1 },
- { 1, 0, 2, 0, 1 },
- { 1, 2, 1, 1, 1 },
- { 1, 1, 1, 1, 2 },
- { 1, 2, 1, 0, 1 },
- { 1, 1, 0, 1, 2 },
- { 1, 0, 0, 2, 2 },
- { 1, 0, 1, 2, 2 },
- { 1, 2, 2, 1, 0 },
- { 1, 1, 2, 2, 0 },
- { 1, 1, 0, 0, 2 },
- { 1, 2, 0, 0, 1 },
- { 1, 0, 2, 2, 1 },
- { 0, 7, 8 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 1, 2, 2, 0, 0 },
- { 1, 1, 2, 2, 1 },
- { 1, 1, 1, 0, 2 },
- { 1, 2, 0, 1, 1 },
- { 1, 1, 1, 2, 2 },
- { 1, 2, 2, 1, 1 },
- { 1, 0, 2, 2, 0 },
- { 1, 0, 2, 1, 2 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 1, 1, 0, 2, 2 },
- { 1, 2, 2, 0, 1 },
- { 1, 2, 1, 2, 0 },
- { 1, 2, 2, 2, 0 },
- { 1, 0, 2, 2, 2 },
- { 1, 2, 2, 2, 1 },
- { 1, 2, 1, 2, 1 },
- { 1, 1, 2, 1, 2 },
- { 1, 1, 2, 2, 2 },
- { 0, 3, 4 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 1, 0, 2, 0, 2 },
- { 1, 2, 0, 2, 0 },
- { 1, 1, 2, 0, 2 },
- { 0, 3, 4 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 1, 2, 0, 2, 1 },
- { 1, 2, 1, 1, 2 },
- { 1, 2, 1, 0, 2 },
- { 0, 3, 4 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 1, 2, 2, 2, 2 },
- { 1, 2, 2, 1, 2 },
- { 1, 2, 1, 2, 2 },
- { 1, 2, 0, 1, 2 },
- { 1, 2, 0, 0, 2 },
- { 0, 1, 2 },
- { 1, 2, 2, 0, 2 },
- { 1, 2, 0, 2, 2 },
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 4
-static hcb_struct_1 huffman_04_1[32]=
-{
- { 0, 0 },
- { 0, 0 },
- { 1, 0 },
- { 1, 0 },
- { 2, 0 },
- { 2, 0 },
- { 3, 0 },
- { 3, 0 },
- { 4, 0 },
- { 4, 0 },
- { 5, 0 },
- { 5, 0 },
- { 6, 0 },
- { 6, 0 },
- { 7, 0 },
- { 7, 0 },
- { 8, 0 },
- { 8, 0 },
- { 9, 0 },
- { 9, 0 },
- { 10, 0 },
- { 11, 0 },
- { 12, 0 },
- { 13, 0 },
- { 14, 0 },
- { 15, 0 },
- { 16, 2 },
- { 20, 2 },
- { 24, 3 },
- { 32, 3 },
- { 40, 4 },
- { 56, 7 }
-};
-
-static hcb_struct huffman_04[185]=
-{
- { 4, 1, 1, 1, 1 },
- { 4, 0, 1, 1, 1 },
- { 4, 1, 1, 0, 1 },
- { 4, 1, 1, 1, 0 },
- { 4, 1, 0, 1, 1 },
- { 4, 1, 0, 0, 0 },
- { 4, 1, 1, 0, 0 },
- { 4, 0, 0, 0, 0 },
- { 4, 0, 0, 1, 1 },
- { 4, 1, 0, 1, 0 },
- { 5, 1, 0, 0, 1 },
- { 5, 0, 1, 1, 0 },
- { 5, 0, 0, 0, 1 },
- { 5, 0, 1, 0, 1 },
- { 5, 0, 0, 1, 0 },
- { 5, 0, 1, 0, 0 },
- { 7, 2, 1, 1, 1 },
- { 7, 1, 1, 2, 1 },
- { 7, 1, 2, 1, 1 },
- { 7, 1, 1, 1, 2 },
- { 7, 2, 1, 1, 0 },
- { 7, 2, 1, 0, 1 },
- { 7, 1, 2, 1, 0 },
- { 7, 2, 0, 1, 1 },
- { 7, 0, 1, 2, 1 },
- { 7, 0, 1, 2, 1 },
- { 8, 0, 1, 1, 2 },
- { 8, 1, 1, 2, 0 },
- { 8, 0, 2, 1, 1 },
- { 8, 1, 0, 1, 2 },
- { 8, 1, 2, 0, 1 },
- { 8, 1, 1, 0, 2 },
- { 8, 1, 0, 2, 1 },
- { 8, 2, 1, 0, 0 },
- { 8, 2, 0, 1, 0 },
- { 8, 1, 2, 0, 0 },
- { 8, 2, 0, 0, 1 },
- { 8, 0, 1, 0, 2 },
- { 8, 0, 2, 1, 0 },
- { 8, 0, 0, 1, 2 },
- { 8, 0, 1, 2, 0 },
- { 8, 0, 1, 2, 0 },
- { 8, 0, 2, 0, 1 },
- { 8, 0, 2, 0, 1 },
- { 8, 1, 0, 0, 2 },
- { 8, 1, 0, 0, 2 },
- { 8, 0, 0, 2, 1 },
- { 8, 0, 0, 2, 1 },
- { 8, 1, 0, 2, 0 },
- { 8, 1, 0, 2, 0 },
- { 8, 2, 0, 0, 0 },
- { 8, 2, 0, 0, 0 },
- { 8, 0, 0, 0, 2 },
- { 8, 0, 0, 0, 2 },
- { 9, 0, 2, 0, 0 },
- { 9, 0, 0, 2, 0 },
- { 9, 1, 2, 2, 1 },
- { 9, 1, 2, 2, 1 },
- { 9, 1, 2, 2, 1 },
- { 9, 1, 2, 2, 1 },
- { 9, 1, 2, 2, 1 },
- { 9, 1, 2, 2, 1 },
- { 9, 1, 2, 2, 1 },
- { 9, 1, 2, 2, 1 },
- { 9, 2, 2, 1, 1 },
- { 9, 2, 2, 1, 1 },
- { 9, 2, 2, 1, 1 },
- { 9, 2, 2, 1, 1 },
- { 9, 2, 2, 1, 1 },
- { 9, 2, 2, 1, 1 },
- { 9, 2, 2, 1, 1 },
- { 9, 2, 2, 1, 1 },
- { 9, 2, 1, 2, 1 },
- { 9, 2, 1, 2, 1 },
- { 9, 2, 1, 2, 1 },
- { 9, 2, 1, 2, 1 },
- { 9, 2, 1, 2, 1 },
- { 9, 2, 1, 2, 1 },
- { 9, 2, 1, 2, 1 },
- { 9, 2, 1, 2, 1 },
- { 9, 1, 1, 2, 2 },
- { 9, 1, 1, 2, 2 },
- { 9, 1, 1, 2, 2 },
- { 9, 1, 1, 2, 2 },
- { 9, 1, 1, 2, 2 },
- { 9, 1, 1, 2, 2 },
- { 9, 1, 1, 2, 2 },
- { 9, 1, 1, 2, 2 },
- { 9, 1, 2, 1, 2 },
- { 9, 1, 2, 1, 2 },
- { 9, 1, 2, 1, 2 },
- { 9, 1, 2, 1, 2 },
- { 9, 1, 2, 1, 2 },
- { 9, 1, 2, 1, 2 },
- { 9, 1, 2, 1, 2 },
- { 9, 1, 2, 1, 2 },
- { 9, 2, 1, 1, 2 },
- { 9, 2, 1, 1, 2 },
- { 9, 2, 1, 1, 2 },
- { 9, 2, 1, 1, 2 },
- { 9, 2, 1, 1, 2 },
- { 9, 2, 1, 1, 2 },
- { 9, 2, 1, 1, 2 },
- { 9, 2, 1, 1, 2 },
- { 10, 1, 2, 2, 0 },
- { 10, 1, 2, 2, 0 },
- { 10, 1, 2, 2, 0 },
- { 10, 1, 2, 2, 0 },
- { 10, 2, 2, 1, 0 },
- { 10, 2, 2, 1, 0 },
- { 10, 2, 2, 1, 0 },
- { 10, 2, 2, 1, 0 },
- { 10, 2, 1, 2, 0 },
- { 10, 2, 1, 2, 0 },
- { 10, 2, 1, 2, 0 },
- { 10, 2, 1, 2, 0 },
- { 10, 0, 2, 2, 1 },
- { 10, 0, 2, 2, 1 },
- { 10, 0, 2, 2, 1 },
- { 10, 0, 2, 2, 1 },
- { 10, 0, 1, 2, 2 },
- { 10, 0, 1, 2, 2 },
- { 10, 0, 1, 2, 2 },
- { 10, 0, 1, 2, 2 },
- { 10, 2, 2, 0, 1 },
- { 10, 2, 2, 0, 1 },
- { 10, 2, 2, 0, 1 },
- { 10, 2, 2, 0, 1 },
- { 10, 0, 2, 1, 2 },
- { 10, 0, 2, 1, 2 },
- { 10, 0, 2, 1, 2 },
- { 10, 0, 2, 1, 2 },
- { 10, 2, 0, 2, 1 },
- { 10, 2, 0, 2, 1 },
- { 10, 2, 0, 2, 1 },
- { 10, 2, 0, 2, 1 },
- { 10, 1, 0, 2, 2 },
- { 10, 1, 0, 2, 2 },
- { 10, 1, 0, 2, 2 },
- { 10, 1, 0, 2, 2 },
- { 10, 2, 2, 2, 1 },
- { 10, 2, 2, 2, 1 },
- { 10, 2, 2, 2, 1 },
- { 10, 2, 2, 2, 1 },
- { 10, 1, 2, 0, 2 },
- { 10, 1, 2, 0, 2 },
- { 10, 1, 2, 0, 2 },
- { 10, 1, 2, 0, 2 },
- { 10, 2, 0, 1, 2 },
- { 10, 2, 0, 1, 2 },
- { 10, 2, 0, 1, 2 },
- { 10, 2, 0, 1, 2 },
- { 10, 2, 1, 0, 2 },
- { 10, 2, 1, 0, 2 },
- { 10, 2, 1, 0, 2 },
- { 10, 2, 1, 0, 2 },
- { 10, 1, 2, 2, 2 },
- { 10, 1, 2, 2, 2 },
- { 10, 1, 2, 2, 2 },
- { 10, 1, 2, 2, 2 },
- { 11, 2, 1, 2, 2 },
- { 11, 2, 1, 2, 2 },
- { 11, 2, 2, 1, 2 },
- { 11, 2, 2, 1, 2 },
- { 11, 0, 2, 2, 0 },
- { 11, 0, 2, 2, 0 },
- { 11, 2, 2, 0, 0 },
- { 11, 2, 2, 0, 0 },
- { 11, 0, 0, 2, 2 },
- { 11, 0, 0, 2, 2 },
- { 11, 2, 0, 2, 0 },
- { 11, 2, 0, 2, 0 },
- { 11, 0, 2, 0, 2 },
- { 11, 0, 2, 0, 2 },
- { 11, 2, 0, 0, 2 },
- { 11, 2, 0, 0, 2 },
- { 11, 2, 2, 2, 2 },
- { 11, 2, 2, 2, 2 },
- { 11, 0, 2, 2, 2 },
- { 11, 0, 2, 2, 2 },
- { 11, 2, 2, 2, 0 },
- { 11, 2, 2, 2, 0 },
- { 12, 2, 2, 0, 2 },
- { 12, 2, 0, 2, 2 },
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 5
-static hcb_struct huffman_05[161]=
-{
- { 0, 1, 2 },
- { 1, 0, 0 },
- { 0, 1, 2 },
- { 0, 2, 3 },
- { 0, 3, 4 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 1, -1, 0 },
- { 1, 1, 0 },
- { 1, 0, 1 },
- { 1, 0, -1 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 1, 1, -1 },
- { 1, -1, 1 },
- { 1, -1, -1 },
- { 1, 1, 1 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 1, -2, 0 },
- { 1, 0, 2 },
- { 1, 2, 0 },
- { 1, 0, -2 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 0, 22, 23 },
- { 0, 23, 24 },
- { 1, -2, -1 },
- { 1, 2, 1 },
- { 1, -1, -2 },
- { 1, 1, 2 },
- { 1, -2, 1 },
- { 1, 2, -1 },
- { 1, -1, 2 },
- { 1, 1, -2 },
- { 1, -3, 0 },
- { 1, 3, 0 },
- { 1, 0, -3 },
- { 1, 0, 3 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 0, 22, 23 },
- { 0, 23, 24 },
- { 1, -3, -1 },
- { 1, 1, 3 },
- { 1, 3, 1 },
- { 1, -1, -3 },
- { 1, -3, 1 },
- { 1, 3, -1 },
- { 1, 1, -3 },
- { 1, -1, 3 },
- { 1, -2, 2 },
- { 1, 2, 2 },
- { 1, -2, -2 },
- { 1, 2, -2 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 0, 22, 23 },
- { 0, 23, 24 },
- { 1, -3, -2 },
- { 1, 3, -2 },
- { 1, -2, 3 },
- { 1, 2, -3 },
- { 1, 3, 2 },
- { 1, 2, 3 },
- { 1, -3, 2 },
- { 1, -2, -3 },
- { 1, 0, -4 },
- { 1, -4, 0 },
- { 1, 4, 1 },
- { 1, 4, 0 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 0, 22, 23 },
- { 0, 23, 24 },
- { 1, -4, -1 },
- { 1, 0, 4 },
- { 1, 4, -1 },
- { 1, -1, -4 },
- { 1, 1, 4 },
- { 1, -1, 4 },
- { 1, -4, 1 },
- { 1, 1, -4 },
- { 1, 3, -3 },
- { 1, -3, -3 },
- { 1, -3, 3 },
- { 1, -2, 4 },
- { 1, -4, -2 },
- { 1, 4, 2 },
- { 1, 2, -4 },
- { 1, 2, 4 },
- { 1, 3, 3 },
- { 1, -4, 2 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 1, -2, -4 },
- { 1, 4, -2 },
- { 1, 3, -4 },
- { 1, -4, -3 },
- { 1, -4, 3 },
- { 1, 3, 4 },
- { 1, -3, 4 },
- { 1, 4, 3 },
- { 1, 4, -3 },
- { 1, -3, -4 },
- { 0, 2, 3 },
- { 0, 3, 4 },
- { 1, 4, -4 },
- { 1, -4, 4 },
- { 1, 4, 4 },
- { 1, -4, -4 }
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 6
-static hcb_struct_1 huffman_06_1[32] = {
- { 0, 0 },
- { 0, 0 },
- { 1, 0 },
- { 1, 0 },
- { 2, 0 },
- { 2, 0 },
- { 3, 0 },
- { 3, 0 },
- { 4, 0 },
- { 4, 0 },
- { 5, 0 },
- { 5, 0 },
- { 6, 0 },
- { 6, 0 },
- { 7, 0 },
- { 7, 0 },
- { 8, 0 },
- { 8, 0 },
- { 9, 1 },
- { 11, 1 },
- { 13, 1 },
- { 15, 1 },
- { 17, 1 },
- { 19, 1 },
- { 21, 1 },
- { 23, 1 },
- { 25, 2 },
- { 29, 2 },
- { 33, 2 },
- { 37, 3 },
- { 45, 4 },
- { 61, 6 }
-};
-
-static hcb_struct huffman_06[126]=
-{
- { 4, 0, 0 },
- { 4, 1, 0 },
- { 4, 0, -1 },
- { 4, 0, 1 },
- { 4, -1, 0 },
- { 4, 1, 1 },
- { 4, -1, 1 },
- { 4, 1, -1 },
- { 4, -1, -1 },
- { 6, 2, -1 },
- { 6, 2, 1 },
- { 6, -2, 1 },
- { 6, -2, -1 },
- { 6, -2, 0 },
- { 6, -1, 2 },
- { 6, 2, 0 },
- { 6, 1, -2 },
- { 6, 1, 2 },
- { 6, 0, -2 },
- { 6, -1, -2 },
- { 6, 0, 2 },
- { 6, 2, -2 },
- { 6, -2, 2 },
- { 6, -2, -2 },
- { 6, 2, 2 },
- { 7, -3, 1 },
- { 7, 3, 1 },
- { 7, 3, -1 },
- { 7, -1, 3 },
- { 7, -3, -1 },
- { 7, 1, 3 },
- { 7, 1, -3 },
- { 7, -1, -3 },
- { 7, 3, 0 },
- { 7, -3, 0 },
- { 7, 0, -3 },
- { 7, 0, 3 },
- { 7, 3, 2 },
- { 7, 3, 2 },
- { 8, -3, -2 },
- { 8, -2, 3 },
- { 8, 2, 3 },
- { 8, 3, -2 },
- { 8, 2, -3 },
- { 8, -2, -3 },
- { 8, -3, 2 },
- { 8, -3, 2 },
- { 8, 3, 3 },
- { 8, 3, 3 },
- { 9, 3, -3 },
- { 9, -3, -3 },
- { 9, -3, 3 },
- { 9, 1, -4 },
- { 9, -1, -4 },
- { 9, 4, 1 },
- { 9, -4, 1 },
- { 9, -4, -1 },
- { 9, 1, 4 },
- { 9, 4, -1 },
- { 9, -1, 4 },
- { 9, 0, -4 },
- { 9, -4, 2 },
- { 9, -4, 2 },
- { 9, -4, 2 },
- { 9, -4, 2 },
- { 9, -4, -2 },
- { 9, -4, -2 },
- { 9, -4, -2 },
- { 9, -4, -2 },
- { 9, 2, 4 },
- { 9, 2, 4 },
- { 9, 2, 4 },
- { 9, 2, 4 },
- { 9, -2, -4 },
- { 9, -2, -4 },
- { 9, -2, -4 },
- { 9, -2, -4 },
- { 9, -4, 0 },
- { 9, -4, 0 },
- { 9, -4, 0 },
- { 9, -4, 0 },
- { 9, 4, 2 },
- { 9, 4, 2 },
- { 9, 4, 2 },
- { 9, 4, 2 },
- { 9, 4, -2 },
- { 9, 4, -2 },
- { 9, 4, -2 },
- { 9, 4, -2 },
- { 9, -2, 4 },
- { 9, -2, 4 },
- { 9, -2, 4 },
- { 9, -2, 4 },
- { 9, 4, 0 },
- { 9, 4, 0 },
- { 9, 4, 0 },
- { 9, 4, 0 },
- { 9, 2, -4 },
- { 9, 2, -4 },
- { 9, 2, -4 },
- { 9, 2, -4 },
- { 9, 0, 4 },
- { 9, 0, 4 },
- { 9, 0, 4 },
- { 9, 0, 4 },
- { 10, -3, -4 },
- { 10, -3, -4 },
- { 10, -3, 4 },
- { 10, -3, 4 },
- { 10, 3, -4 },
- { 10, 3, -4 },
- { 10, 4, -3 },
- { 10, 4, -3 },
- { 10, 3, 4 },
- { 10, 3, 4 },
- { 10, 4, 3 },
- { 10, 4, 3 },
- { 10, -4, 3 },
- { 10, -4, 3 },
- { 10, -4, -3 },
- { 10, -4, -3 },
- { 11, 4, 4 },
- { 11, -4, 4 },
- { 11, -4, -4 },
- { 11, 4, -4 }
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 7
-static hcb_struct huffman_07[127] =
-{
- { 0, 1, 2 },
- { 1, 0, 0 },
- { 0, 1, 2 },
- { 0, 2, 3 },
- { 0, 3, 4 },
- { 1, 1, 0 },
- { 1, 0, 1 },
- { 0, 2, 3 },
- { 0, 3, 4 },
- { 1, 1, 1 },
- { 0, 3, 4 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 1, 2, 1 },
- { 1, 1, 2 },
- { 1, 2, 0 },
- { 1, 0, 2 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 1, 3, 1 },
- { 1, 1, 3 },
- { 1, 2, 2 },
- { 1, 3, 0 },
- { 1, 0, 3 },
- { 0, 11, 12 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 1, 2, 3 },
- { 1, 3, 2 },
- { 1, 1, 4 },
- { 1, 4, 1 },
- { 1, 1, 5 },
- { 1, 5, 1 },
- { 1, 3, 3 },
- { 1, 2, 4 },
- { 1, 0, 4 },
- { 1, 4, 0 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 0, 22, 23 },
- { 0, 23, 24 },
- { 1, 4, 2 },
- { 1, 2, 5 },
- { 1, 5, 2 },
- { 1, 0, 5 },
- { 1, 6, 1 },
- { 1, 5, 0 },
- { 1, 1, 6 },
- { 1, 4, 3 },
- { 1, 3, 5 },
- { 1, 3, 4 },
- { 1, 5, 3 },
- { 1, 2, 6 },
- { 1, 6, 2 },
- { 1, 1, 7 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 1, 3, 6 },
- { 1, 0, 6 },
- { 1, 6, 0 },
- { 1, 4, 4 },
- { 1, 7, 1 },
- { 1, 4, 5 },
- { 1, 7, 2 },
- { 1, 5, 4 },
- { 1, 6, 3 },
- { 1, 2, 7 },
- { 1, 7, 3 },
- { 1, 6, 4 },
- { 1, 5, 5 },
- { 1, 4, 6 },
- { 1, 3, 7 },
- { 0, 5, 6 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 1, 7, 0 },
- { 1, 0, 7 },
- { 1, 6, 5 },
- { 1, 5, 6 },
- { 1, 7, 4 },
- { 1, 4, 7 },
- { 1, 5, 7 },
- { 1, 7, 5 },
- { 0, 2, 3 },
- { 0, 3, 4 },
- { 1, 7, 6 },
- { 1, 6, 6 },
- { 1, 6, 7 },
- { 1, 7, 7 }
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 8
-static hcb_struct_1 huffman_08_1[32]=
-{
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 1, 0 },
- { 1, 0 },
- { 2, 0 },
- { 2, 0 },
- { 3, 0 },
- { 3, 0 },
- { 4, 0 },
- { 4, 0 },
- { 5, 0 },
- { 5, 0 },
- { 6, 0 },
- { 7, 0 },
- { 8, 0 },
- { 9, 0 },
- { 10, 0 },
- { 11, 0 },
- { 12, 0 },
- { 13, 1 },
- { 15, 1 },
- { 17, 1 },
- { 19, 1 },
- { 21, 1 },
- { 23, 2 },
- { 27, 2 },
- { 31, 2 },
- { 35, 3 },
- { 43, 3 },
- { 51, 5 }
-};
-
-static hcb_struct huffman_08[83]=
-{
- { 3, 1, 1 },
- { 4, 2, 1 },
- { 4, 1, 0 },
- { 4, 1, 2 },
- { 4, 0, 1 },
- { 4, 2, 2 },
- { 5, 0, 0 },
- { 5, 2, 0 },
- { 5, 0, 2 },
- { 5, 3, 1 },
- { 5, 1, 3 },
- { 5, 3, 2 },
- { 5, 2, 3 },
- { 6, 3, 3 },
- { 6, 4, 1 },
- { 6, 1, 4 },
- { 6, 4, 2 },
- { 6, 2, 4 },
- { 6, 3, 0 },
- { 6, 0, 3 },
- { 6, 4, 3 },
- { 6, 3, 4 },
- { 6, 5, 2 },
- { 7, 5, 1 },
- { 7, 2, 5 },
- { 7, 1, 5 },
- { 7, 5, 3 },
- { 7, 3, 5 },
- { 7, 4, 4 },
- { 7, 5, 4 },
- { 7, 0, 4 },
- { 7, 4, 5 },
- { 7, 4, 0 },
- { 7, 2, 6 },
- { 7, 6, 2 },
- { 7, 6, 1 },
- { 7, 6, 1 },
- { 7, 1, 6 },
- { 7, 1, 6 },
- { 8, 3, 6 },
- { 8, 6, 3 },
- { 8, 5, 5 },
- { 8, 5, 0 },
- { 8, 6, 4 },
- { 8, 0, 5 },
- { 8, 4, 6 },
- { 8, 7, 1 },
- { 8, 7, 2 },
- { 8, 2, 7 },
- { 8, 6, 5 },
- { 8, 7, 3 },
- { 8, 1, 7 },
- { 8, 1, 7 },
- { 8, 1, 7 },
- { 8, 1, 7 },
- { 8, 5, 6 },
- { 8, 5, 6 },
- { 8, 5, 6 },
- { 8, 5, 6 },
- { 8, 3, 7 },
- { 8, 3, 7 },
- { 8, 3, 7 },
- { 8, 3, 7 },
- { 9, 6, 6 },
- { 9, 6, 6 },
- { 9, 7, 4 },
- { 9, 7, 4 },
- { 9, 6, 0 },
- { 9, 6, 0 },
- { 9, 4, 7 },
- { 9, 4, 7 },
- { 9, 0, 6 },
- { 9, 0, 6 },
- { 9, 7, 5 },
- { 9, 7, 5 },
- { 9, 7, 6 },
- { 9, 7, 6 },
- { 9, 6, 7 },
- { 9, 6, 7 },
- { 10, 5, 7 },
- { 10, 7, 0 },
- { 10, 0, 7 },
- { 10, 7, 7 }
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 9
-static hcb_struct huffman_09[337]=
-{
- { 0, 1, 2 },
- { 1, 0, 0 },
- { 0, 1, 2 },
- { 0, 2, 3 },
- { 0, 3, 4 },
- { 1, 1, 0 },
- { 1, 0, 1 },
- { 0, 2, 3 },
- { 0, 3, 4 },
- { 1, 1, 1 },
- { 0, 3, 4 },
- { 0, 4, 5 },
- { 0, 5, 6 },
- { 0, 6, 7 },
- { 0, 7, 8 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 1, 2, 1 },
- { 1, 1, 2 },
- { 1, 2, 0 },
- { 1, 0, 2 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 1, 3, 1 },
- { 1, 2, 2 },
- { 1, 1, 3 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 0, 16, 17 },
- { 0, 17, 18 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 0, 22, 23 },
- { 0, 23, 24 },
- { 0, 24, 25 },
- { 0, 25, 26 },
- { 1, 3, 0 },
- { 1, 0, 3 },
- { 1, 2, 3 },
- { 1, 3, 2 },
- { 1, 1, 4 },
- { 1, 4, 1 },
- { 1, 2, 4 },
- { 1, 1, 5 },
- { 0, 18, 19 },
- { 0, 19, 20 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 0, 22, 23 },
- { 0, 23, 24 },
- { 0, 24, 25 },
- { 0, 25, 26 },
- { 0, 26, 27 },
- { 0, 27, 28 },
- { 0, 28, 29 },
- { 0, 29, 30 },
- { 0, 30, 31 },
- { 0, 31, 32 },
- { 0, 32, 33 },
- { 0, 33, 34 },
- { 0, 34, 35 },
- { 0, 35, 36 },
- { 1, 4, 2 },
- { 1, 3, 3 },
- { 1, 0, 4 },
- { 1, 4, 0 },
- { 1, 5, 1 },
- { 1, 2, 5 },
- { 1, 1, 6 },
- { 1, 3, 4 },
- { 1, 5, 2 },
- { 1, 6, 1 },
- { 1, 4, 3 },
- { 0, 25, 26 },
- { 0, 26, 27 },
- { 0, 27, 28 },
- { 0, 28, 29 },
- { 0, 29, 30 },
- { 0, 30, 31 },
- { 0, 31, 32 },
- { 0, 32, 33 },
- { 0, 33, 34 },
- { 0, 34, 35 },
- { 0, 35, 36 },
- { 0, 36, 37 },
- { 0, 37, 38 },
- { 0, 38, 39 },
- { 0, 39, 40 },
- { 0, 40, 41 },
- { 0, 41, 42 },
- { 0, 42, 43 },
- { 0, 43, 44 },
- { 0, 44, 45 },
- { 0, 45, 46 },
- { 0, 46, 47 },
- { 0, 47, 48 },
- { 0, 48, 49 },
- { 0, 49, 50 },
- { 1, 0, 5 },
- { 1, 2, 6 },
- { 1, 5, 0 },
- { 1, 1, 7 },
- { 1, 3, 5 },
- { 1, 1, 8 },
- { 1, 8, 1 },
- { 1, 4, 4 },
- { 1, 5, 3 },
- { 1, 6, 2 },
- { 1, 7, 1 },
- { 1, 0, 6 },
- { 1, 8, 2 },
- { 1, 2, 8 },
- { 1, 3, 6 },
- { 1, 2, 7 },
- { 1, 4, 5 },
- { 1, 9, 1 },
- { 1, 1, 9 },
- { 1, 7, 2 },
- { 0, 30, 31 },
- { 0, 31, 32 },
- { 0, 32, 33 },
- { 0, 33, 34 },
- { 0, 34, 35 },
- { 0, 35, 36 },
- { 0, 36, 37 },
- { 0, 37, 38 },
- { 0, 38, 39 },
- { 0, 39, 40 },
- { 0, 40, 41 },
- { 0, 41, 42 },
- { 0, 42, 43 },
- { 0, 43, 44 },
- { 0, 44, 45 },
- { 0, 45, 46 },
- { 0, 46, 47 },
- { 0, 47, 48 },
- { 0, 48, 49 },
- { 0, 49, 50 },
- { 0, 50, 51 },
- { 0, 51, 52 },
- { 0, 52, 53 },
- { 0, 53, 54 },
- { 0, 54, 55 },
- { 0, 55, 56 },
- { 0, 56, 57 },
- { 0, 57, 58 },
- { 0, 58, 59 },
- { 0, 59, 60 },
- { 1, 6, 0 },
- { 1, 5, 4 },
- { 1, 6, 3 },
- { 1, 8, 3 },
- { 1, 0, 7 },
- { 1, 9, 2 },
- { 1, 3, 8 },
- { 1, 4, 6 },
- { 1, 3, 7 },
- { 1, 0, 8 },
- { 1, 10, 1 },
- { 1, 6, 4 },
- { 1, 2, 9 },
- { 1, 5, 5 },
- { 1, 8, 0 },
- { 1, 7, 0 },
- { 1, 7, 3 },
- { 1, 10, 2 },
- { 1, 9, 3 },
- { 1, 8, 4 },
- { 1, 1, 10 },
- { 1, 7, 4 },
- { 1, 6, 5 },
- { 1, 5, 6 },
- { 1, 4, 8 },
- { 1, 4, 7 },
- { 1, 3, 9 },
- { 1, 11, 1 },
- { 1, 5, 8 },
- { 1, 9, 0 },
- { 1, 8, 5 },
- { 0, 29, 30 },
- { 0, 30, 31 },
- { 0, 31, 32 },
- { 0, 32, 33 },
- { 0, 33, 34 },
- { 0, 34, 35 },
- { 0, 35, 36 },
- { 0, 36, 37 },
- { 0, 37, 38 },
- { 0, 38, 39 },
- { 0, 39, 40 },
- { 0, 40, 41 },
- { 0, 41, 42 },
- { 0, 42, 43 },
- { 0, 43, 44 },
- { 0, 44, 45 },
- { 0, 45, 46 },
- { 0, 46, 47 },
- { 0, 47, 48 },
- { 0, 48, 49 },
- { 0, 49, 50 },
- { 0, 50, 51 },
- { 0, 51, 52 },
- { 0, 52, 53 },
- { 0, 53, 54 },
- { 0, 54, 55 },
- { 0, 55, 56 },
- { 0, 56, 57 },
- { 0, 57, 58 },
- { 1, 10, 3 },
- { 1, 2, 10 },
- { 1, 0, 9 },
- { 1, 11, 2 },
- { 1, 9, 4 },
- { 1, 6, 6 },
- { 1, 12, 1 },
- { 1, 4, 9 },
- { 1, 8, 6 },
- { 1, 1, 11 },
- { 1, 9, 5 },
- { 1, 10, 4 },
- { 1, 5, 7 },
- { 1, 7, 5 },
- { 1, 2, 11 },
- { 1, 1, 12 },
- { 1, 12, 2 },
- { 1, 11, 3 },
- { 1, 3, 10 },
- { 1, 5, 9 },
- { 1, 6, 7 },
- { 1, 8, 7 },
- { 1, 11, 4 },
- { 1, 0, 10 },
- { 1, 7, 6 },
- { 1, 12, 3 },
- { 1, 10, 0 },
- { 1, 10, 5 },
- { 1, 4, 10 },
- { 1, 6, 8 },
- { 1, 2, 12 },
- { 1, 9, 6 },
- { 1, 9, 7 },
- { 1, 4, 11 },
- { 1, 11, 0 },
- { 1, 6, 9 },
- { 1, 3, 11 },
- { 1, 5, 10 },
- { 0, 20, 21 },
- { 0, 21, 22 },
- { 0, 22, 23 },
- { 0, 23, 24 },
- { 0, 24, 25 },
- { 0, 25, 26 },
- { 0, 26, 27 },
- { 0, 27, 28 },
- { 0, 28, 29 },
- { 0, 29, 30 },
- { 0, 30, 31 },
- { 0, 31, 32 },
- { 0, 32, 33 },
- { 0, 33, 34 },
- { 0, 34, 35 },
- { 0, 35, 36 },
- { 0, 36, 37 },
- { 0, 37, 38 },
- { 0, 38, 39 },
- { 0, 39, 40 },
- { 1, 8, 8 },
- { 1, 7, 8 },
- { 1, 12, 5 },
- { 1, 3, 12 },
- { 1, 11, 5 },
- { 1, 7, 7 },
- { 1, 12, 4 },
- { 1, 11, 6 },
- { 1, 10, 6 },
- { 1, 4, 12 },
- { 1, 7, 9 },
- { 1, 5, 11 },
- { 1, 0, 11 },
- { 1, 12, 6 },
- { 1, 6, 10 },
- { 1, 12, 0 },
- { 1, 10, 7 },
- { 1, 5, 12 },
- { 1, 7, 10 },
- { 1, 9, 8 },
- { 1, 0, 12 },
- { 1, 11, 7 },
- { 1, 8, 9 },
- { 1, 9, 9 },
- { 1, 10, 8 },
- { 1, 7, 11 },
- { 1, 12, 7 },
- { 1, 6, 11 },
- { 1, 8, 11 },
- { 1, 11, 8 },
- { 1, 7, 12 },
- { 1, 6, 12 },
- { 0, 8, 9 },
- { 0, 9, 10 },
- { 0, 10, 11 },
- { 0, 11, 12 },
- { 0, 12, 13 },
- { 0, 13, 14 },
- { 0, 14, 15 },
- { 0, 15, 16 },
- { 1, 8, 10 },
- { 1, 10, 9 },
- { 1, 8, 12 },
- { 1, 9, 10 },
- { 1, 9, 11 },
- { 1, 9, 12 },
- { 1, 10, 11 },
- { 1, 12, 9 },
- { 1, 10, 10 },
- { 1, 11, 9 },
- { 1, 12, 8 },
- { 1, 11, 10 },
- { 1, 12, 10 },
- { 1, 12, 11 },
- { 0, 2, 3 },
- { 0, 3, 4 },
- { 1, 10, 12 },
- { 1, 11, 11 },
- { 1, 11, 12 },
- { 1, 12, 12 }
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 10
-static hcb_struct_1 huffman_10_1[64]=
-{
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 1, 0 },
- { 1, 0 },
- { 1, 0 },
- { 1, 0 },
- { 2, 0 },
- { 2, 0 },
- { 2, 0 },
- { 2, 0 },
- { 3, 0 },
- { 3, 0 },
- { 4, 0 },
- { 4, 0 },
- { 5, 0 },
- { 5, 0 },
- { 6, 0 },
- { 6, 0 },
- { 7, 0 },
- { 7, 0 },
- { 8, 0 },
- { 8, 0 },
- { 9, 0 },
- { 9, 0 },
- { 10, 0 },
- { 10, 0 },
- { 11, 0 },
- { 12, 0 },
- { 13, 0 },
- { 14, 0 },
- { 15, 0 },
- { 16, 0 },
- { 17, 0 },
- { 18, 0 },
- { 19, 0 },
- { 20, 0 },
- { 21, 0 },
- { 22, 0 },
- { 23, 0 },
- { 24, 0 },
- { 25, 1 },
- { 27, 1 },
- { 29, 1 },
- { 31, 1 },
- { 33, 1 },
- { 35, 1 },
- { 37, 1 },
- { 39, 1 },
- { 41, 2 },
- { 45, 2 },
- { 49, 2 },
- { 53, 2 },
- { 57, 2 },
- { 61, 2 },
- { 65, 3 },
- { 73, 3 },
- { 81, 3 },
- { 89, 3 },
- { 97, 4 },
- { 113, 4 },
- { 129, 4 },
- { 145, 6 }
-};
-
-static hcb_struct huffman_10[210]=
-{
- { 4, 1, 1 },
- { 4, 1, 2 },
- { 4, 2, 1 },
- { 5, 2, 2 },
- { 5, 1, 0 },
- { 5, 0, 1 },
- { 5, 1, 3 },
- { 5, 3, 2 },
- { 5, 3, 1 },
- { 5, 2, 3 },
- { 5, 3, 3 },
- { 6, 2, 0 },
- { 6, 0, 2 },
- { 6, 2, 4 },
- { 6, 4, 2 },
- { 6, 1, 4 },
- { 6, 4, 1 },
- { 6, 0, 0 },
- { 6, 4, 3 },
- { 6, 3, 4 },
- { 6, 3, 0 },
- { 6, 0, 3 },
- { 6, 4, 4 },
- { 6, 2, 5 },
- { 6, 5, 2 },
- { 7, 1, 5 },
- { 7, 5, 1 },
- { 7, 5, 3 },
- { 7, 3, 5 },
- { 7, 5, 4 },
- { 7, 4, 5 },
- { 7, 6, 2 },
- { 7, 2, 6 },
- { 7, 6, 3 },
- { 7, 4, 0 },
- { 7, 6, 1 },
- { 7, 0, 4 },
- { 7, 1, 6 },
- { 7, 3, 6 },
- { 7, 5, 5 },
- { 7, 6, 4 },
- { 7, 4, 6 },
- { 7, 4, 6 },
- { 8, 6, 5 },
- { 8, 7, 2 },
- { 8, 3, 7 },
- { 8, 2, 7 },
- { 8, 5, 6 },
- { 8, 8, 2 },
- { 8, 7, 3 },
- { 8, 5, 0 },
- { 8, 7, 1 },
- { 8, 0, 5 },
- { 8, 8, 1 },
- { 8, 1, 7 },
- { 8, 8, 3 },
- { 8, 7, 4 },
- { 8, 4, 7 },
- { 8, 2, 8 },
- { 8, 6, 6 },
- { 8, 7, 5 },
- { 8, 1, 8 },
- { 8, 3, 8 },
- { 8, 8, 4 },
- { 8, 4, 8 },
- { 8, 5, 7 },
- { 8, 5, 7 },
- { 8, 8, 5 },
- { 8, 8, 5 },
- { 8, 5, 8 },
- { 8, 5, 8 },
- { 9, 7, 6 },
- { 9, 6, 7 },
- { 9, 9, 2 },
- { 9, 6, 0 },
- { 9, 6, 8 },
- { 9, 9, 3 },
- { 9, 3, 9 },
- { 9, 9, 1 },
- { 9, 2, 9 },
- { 9, 0, 6 },
- { 9, 8, 6 },
- { 9, 9, 4 },
- { 9, 4, 9 },
- { 9, 10, 2 },
- { 9, 1, 9 },
- { 9, 7, 7 },
- { 9, 8, 7 },
- { 9, 9, 5 },
- { 9, 7, 8 },
- { 9, 10, 3 },
- { 9, 5, 9 },
- { 9, 10, 4 },
- { 9, 2, 10 },
- { 9, 10, 1 },
- { 9, 3, 10 },
- { 9, 9, 6 },
- { 9, 6, 9 },
- { 9, 6, 9 },
- { 9, 8, 0 },
- { 9, 8, 0 },
- { 9, 4, 10 },
- { 9, 4, 10 },
- { 9, 7, 0 },
- { 9, 7, 0 },
- { 9, 11, 2 },
- { 9, 11, 2 },
- { 10, 7, 9 },
- { 10, 11, 3 },
- { 10, 10, 6 },
- { 10, 1, 10 },
- { 10, 11, 1 },
- { 10, 9, 7 },
- { 10, 0, 7 },
- { 10, 8, 8 },
- { 10, 10, 5 },
- { 10, 3, 11 },
- { 10, 5, 10 },
- { 10, 8, 9 },
- { 10, 11, 5 },
- { 10, 0, 8 },
- { 10, 11, 4 },
- { 10, 2, 11 },
- { 10, 7, 10 },
- { 10, 6, 10 },
- { 10, 10, 7 },
- { 10, 4, 11 },
- { 10, 1, 11 },
- { 10, 12, 2 },
- { 10, 9, 8 },
- { 10, 12, 3 },
- { 10, 11, 6 },
- { 10, 5, 11 },
- { 10, 12, 4 },
- { 10, 11, 7 },
- { 10, 12, 5 },
- { 10, 3, 12 },
- { 10, 6, 11 },
- { 10, 9, 0 },
- { 10, 10, 8 },
- { 10, 10, 0 },
- { 10, 12, 1 },
- { 10, 0, 9 },
- { 10, 4, 12 },
- { 10, 9, 9 },
- { 10, 12, 6 },
- { 10, 12, 6 },
- { 10, 12, 6 },
- { 10, 12, 6 },
- { 10, 2, 12 },
- { 10, 2, 12 },
- { 10, 2, 12 },
- { 10, 2, 12 },
- { 10, 8, 10 },
- { 10, 8, 10 },
- { 10, 8, 10 },
- { 10, 8, 10 },
- { 11, 9, 10 },
- { 11, 9, 10 },
- { 11, 1, 12 },
- { 11, 1, 12 },
- { 11, 11, 8 },
- { 11, 11, 8 },
- { 11, 12, 7 },
- { 11, 12, 7 },
- { 11, 7, 11 },
- { 11, 7, 11 },
- { 11, 5, 12 },
- { 11, 5, 12 },
- { 11, 6, 12 },
- { 11, 6, 12 },
- { 11, 10, 9 },
- { 11, 10, 9 },
- { 11, 8, 11 },
- { 11, 8, 11 },
- { 11, 12, 8 },
- { 11, 12, 8 },
- { 11, 0, 10 },
- { 11, 0, 10 },
- { 11, 7, 12 },
- { 11, 7, 12 },
- { 11, 11, 0 },
- { 11, 11, 0 },
- { 11, 10, 10 },
- { 11, 10, 10 },
- { 11, 11, 9 },
- { 11, 11, 9 },
- { 11, 11, 10 },
- { 11, 11, 10 },
- { 11, 0, 11 },
- { 11, 0, 11 },
- { 11, 11, 11 },
- { 11, 11, 11 },
- { 11, 9, 11 },
- { 11, 9, 11 },
- { 11, 10, 11 },
- { 11, 10, 11 },
- { 11, 12, 0 },
- { 11, 12, 0 },
- { 11, 8, 12 },
- { 11, 8, 12 },
- { 12, 12, 9 },
- { 12, 10, 12 },
- { 12, 9, 12 },
- { 12, 11, 12 },
- { 12, 12, 11 },
- { 12, 0, 12 },
- { 12, 12, 10 },
- { 12, 12, 12 }
-};
-
-//---------------------------------------------------------------------------
-// Spectrum Huffman Codebook 11
-static hcb_struct_1 huffman_11_1[32]=
-{
- { 0, 0 },
- { 0, 0 },
- { 1, 0 },
- { 1, 0 },
- { 2, 0 },
- { 3, 0 },
- { 4, 0 },
- { 5, 0 },
- { 6, 0 },
- { 7, 0 },
- { 8, 1 },
- { 10, 1 },
- { 12, 1 },
- { 14, 2 },
- { 18, 2 },
- { 22, 2 },
- { 26, 2 },
- { 30, 3 },
- { 38, 3 },
- { 46, 3 },
- { 54, 3 },
- { 62, 3 },
- { 70, 3 },
- { 78, 3 },
- { 86, 4 },
- { 102, 4 },
- { 118, 4 },
- { 134, 4 },
- { 150, 5 },
- { 182, 5 },
- { 214, 5 },
- { 246, 7 }
-};
-
-static hcb_struct huffman_11[374]=
-{
- { 4, 0, 0 },
- { 4, 1, 1 },
- { 5, 16, 16 },
- { 5, 1, 0 },
- { 5, 0, 1 },
- { 5, 2, 1 },
- { 5, 1, 2 },
- { 5, 2, 2 },
- { 6, 1, 3 },
- { 6, 3, 1 },
- { 6, 3, 2 },
- { 6, 2, 0 },
- { 6, 2, 3 },
- { 6, 0, 2 },
- { 6, 3, 3 },
- { 6, 3, 3 },
- { 7, 4, 1 },
- { 7, 1, 4 },
- { 7, 4, 2 },
- { 7, 2, 4 },
- { 7, 4, 3 },
- { 7, 3, 4 },
- { 7, 3, 0 },
- { 7, 0, 3 },
- { 7, 5, 1 },
- { 7, 5, 2 },
- { 7, 2, 5 },
- { 7, 4, 4 },
- { 7, 1, 5 },
- { 7, 5, 3 },
- { 7, 3, 5 },
- { 7, 3, 5 },
- { 7, 5, 4 },
- { 7, 5, 4 },
- { 8, 4, 5 },
- { 8, 6, 2 },
- { 8, 2, 6 },
- { 8, 6, 1 },
- { 8, 6, 3 },
- { 8, 3, 6 },
- { 8, 1, 6 },
- { 8, 4, 16 },
- { 8, 3, 16 },
- { 8, 16, 5 },
- { 8, 16, 3 },
- { 8, 16, 4 },
- { 8, 6, 4 },
- { 8, 16, 6 },
- { 8, 4, 0 },
- { 8, 4, 6 },
- { 8, 0, 4 },
- { 8, 2, 16 },
- { 8, 5, 5 },
- { 8, 5, 16 },
- { 8, 16, 7 },
- { 8, 16, 2 },
- { 8, 16, 8 },
- { 8, 2, 7 },
- { 8, 7, 2 },
- { 8, 3, 7 },
- { 8, 6, 5 },
- { 8, 5, 6 },
- { 8, 6, 16 },
- { 8, 16, 10 },
- { 8, 7, 3 },
- { 8, 7, 1 },
- { 8, 16, 9 },
- { 8, 7, 16 },
- { 8, 1, 16 },
- { 8, 1, 7 },
- { 8, 4, 7 },
- { 8, 16, 11 },
- { 8, 7, 4 },
- { 8, 16, 12 },
- { 8, 8, 16 },
- { 8, 16, 1 },
- { 8, 6, 6 },
- { 8, 9, 16 },
- { 8, 2, 8 },
- { 8, 5, 7 },
- { 8, 10, 16 },
- { 8, 16, 13 },
- { 8, 8, 3 },
- { 8, 8, 2 },
- { 8, 3, 8 },
- { 8, 5, 0 },
- { 8, 16, 14 },
- { 8, 16, 14 },
- { 8, 11, 16 },
- { 8, 11, 16 },
- { 8, 7, 5 },
- { 8, 7, 5 },
- { 8, 4, 8 },
- { 8, 4, 8 },
- { 8, 6, 7 },
- { 8, 6, 7 },
- { 8, 7, 6 },
- { 8, 7, 6 },
- { 8, 0, 5 },
- { 8, 0, 5 },
- { 9, 8, 4 },
- { 9, 16, 15 },
- { 9, 12, 16 },
- { 9, 1, 8 },
- { 9, 8, 1 },
- { 9, 14, 16 },
- { 9, 5, 8 },
- { 9, 13, 16 },
- { 9, 3, 9 },
- { 9, 8, 5 },
- { 9, 7, 7 },
- { 9, 2, 9 },
- { 9, 8, 6 },
- { 9, 9, 2 },
- { 9, 9, 3 },
- { 9, 15, 16 },
- { 9, 4, 9 },
- { 9, 6, 8 },
- { 9, 6, 0 },
- { 9, 9, 4 },
- { 9, 5, 9 },
- { 9, 8, 7 },
- { 9, 7, 8 },
- { 9, 1, 9 },
- { 9, 10, 3 },
- { 9, 0, 6 },
- { 9, 10, 2 },
- { 9, 9, 1 },
- { 9, 9, 5 },
- { 9, 4, 10 },
- { 9, 2, 10 },
- { 9, 9, 6 },
- { 9, 3, 10 },
- { 9, 6, 9 },
- { 9, 10, 4 },
- { 9, 8, 8 },
- { 9, 10, 5 },
- { 9, 9, 7 },
- { 9, 11, 3 },
- { 9, 1, 10 },
- { 9, 7, 0 },
- { 9, 10, 6 },
- { 9, 7, 9 },
- { 9, 3, 11 },
- { 9, 5, 10 },
- { 9, 10, 1 },
- { 9, 4, 11 },
- { 9, 11, 2 },
- { 9, 13, 2 },
- { 9, 6, 10 },
- { 9, 13, 3 },
- { 9, 13, 3 },
- { 9, 2, 11 },
- { 9, 2, 11 },
- { 9, 16, 0 },
- { 9, 16, 0 },
- { 9, 5, 11 },
- { 9, 5, 11 },
- { 9, 11, 5 },
- { 9, 11, 5 },
- { 10, 11, 4 },
- { 10, 9, 8 },
- { 10, 7, 10 },
- { 10, 8, 9 },
- { 10, 0, 16 },
- { 10, 4, 13 },
- { 10, 0, 7 },
- { 10, 3, 13 },
- { 10, 11, 6 },
- { 10, 13, 1 },
- { 10, 13, 4 },
- { 10, 12, 3 },
- { 10, 2, 13 },
- { 10, 13, 5 },
- { 10, 8, 10 },
- { 10, 6, 11 },
- { 10, 10, 8 },
- { 10, 10, 7 },
- { 10, 14, 2 },
- { 10, 12, 4 },
- { 10, 1, 11 },
- { 10, 4, 12 },
- { 10, 11, 1 },
- { 10, 3, 12 },
- { 10, 1, 13 },
- { 10, 12, 2 },
- { 10, 7, 11 },
- { 10, 3, 14 },
- { 10, 5, 12 },
- { 10, 5, 13 },
- { 10, 14, 4 },
- { 10, 4, 14 },
- { 10, 11, 7 },
- { 10, 14, 3 },
- { 10, 12, 5 },
- { 10, 13, 6 },
- { 10, 12, 6 },
- { 10, 8, 0 },
- { 10, 11, 8 },
- { 10, 2, 12 },
- { 10, 9, 9 },
- { 10, 14, 5 },
- { 10, 6, 13 },
- { 10, 10, 10 },
- { 10, 15, 2 },
- { 10, 8, 11 },
- { 10, 9, 10 },
- { 10, 14, 6 },
- { 10, 10, 9 },
- { 10, 5, 14 },
- { 10, 11, 9 },
- { 10, 14, 1 },
- { 10, 2, 14 },
- { 10, 6, 12 },
- { 10, 1, 12 },
- { 10, 13, 8 },
- { 10, 0, 8 },
- { 10, 13, 7 },
- { 10, 7, 12 },
- { 10, 12, 7 },
- { 10, 7, 13 },
- { 10, 15, 3 },
- { 10, 12, 1 },
- { 10, 6, 14 },
- { 10, 2, 15 },
- { 10, 15, 5 },
- { 10, 15, 4 },
- { 10, 1, 14 },
- { 10, 9, 11 },
- { 10, 4, 15 },
- { 10, 14, 7 },
- { 10, 8, 13 },
- { 10, 13, 9 },
- { 10, 8, 12 },
- { 10, 5, 15 },
- { 10, 3, 15 },
- { 10, 10, 11 },
- { 10, 11, 10 },
- { 10, 12, 8 },
- { 10, 15, 6 },
- { 10, 15, 7 },
- { 10, 8, 14 },
- { 10, 15, 1 },
- { 10, 7, 14 },
- { 10, 9, 0 },
- { 10, 0, 9 },
- { 10, 9, 13 },
- { 10, 9, 13 },
- { 10, 9, 13 },
- { 10, 9, 13 },
- { 10, 9, 12 },
- { 10, 9, 12 },
- { 10, 9, 12 },
- { 10, 9, 12 },
- { 10, 12, 9 },
- { 10, 12, 9 },
- { 10, 12, 9 },
- { 10, 12, 9 },
- { 10, 14, 8 },
- { 10, 14, 8 },
- { 10, 14, 8 },
- { 10, 14, 8 },
- { 10, 10, 13 },
- { 10, 10, 13 },
- { 10, 10, 13 },
- { 10, 10, 13 },
- { 10, 14, 9 },
- { 10, 14, 9 },
- { 10, 14, 9 },
- { 10, 14, 9 },
- { 10, 12, 10 },
- { 10, 12, 10 },
- { 10, 12, 10 },
- { 10, 12, 10 },
- { 10, 6, 15 },
- { 10, 6, 15 },
- { 10, 6, 15 },
- { 10, 6, 15 },
- { 10, 7, 15 },
- { 10, 7, 15 },
- { 10, 7, 15 },
- { 10, 7, 15 },
- { 11, 9, 14 },
- { 11, 9, 14 },
- { 11, 15, 8 },
- { 11, 15, 8 },
- { 11, 11, 11 },
- { 11, 11, 11 },
- { 11, 11, 14 },
- { 11, 11, 14 },
- { 11, 1, 15 },
- { 11, 1, 15 },
- { 11, 10, 12 },
- { 11, 10, 12 },
- { 11, 10, 14 },
- { 11, 10, 14 },
- { 11, 13, 11 },
- { 11, 13, 11 },
- { 11, 13, 10 },
- { 11, 13, 10 },
- { 11, 11, 13 },
- { 11, 11, 13 },
- { 11, 11, 12 },
- { 11, 11, 12 },
- { 11, 8, 15 },
- { 11, 8, 15 },
- { 11, 14, 11 },
- { 11, 14, 11 },
- { 11, 13, 12 },
- { 11, 13, 12 },
- { 11, 12, 13 },
- { 11, 12, 13 },
- { 11, 15, 9 },
- { 11, 15, 9 },
- { 11, 14, 10 },
- { 11, 14, 10 },
- { 11, 10, 0 },
- { 11, 10, 0 },
- { 11, 12, 11 },
- { 11, 12, 11 },
- { 11, 9, 15 },
- { 11, 9, 15 },
- { 11, 0, 10 },
- { 11, 0, 10 },
- { 11, 12, 12 },
- { 11, 12, 12 },
- { 11, 11, 0 },
- { 11, 11, 0 },
- { 11, 12, 14 },
- { 11, 12, 14 },
- { 11, 10, 15 },
- { 11, 10, 15 },
- { 11, 13, 13 },
- { 11, 13, 13 },
- { 11, 0, 13 },
- { 11, 0, 13 },
- { 11, 14, 12 },
- { 11, 14, 12 },
- { 11, 15, 10 },
- { 11, 15, 10 },
- { 11, 15, 11 },
- { 11, 15, 11 },
- { 11, 11, 15 },
- { 11, 11, 15 },
- { 11, 14, 13 },
- { 11, 14, 13 },
- { 11, 13, 0 },
- { 11, 13, 0 },
- { 11, 0, 11 },
- { 11, 0, 11 },
- { 11, 13, 14 },
- { 11, 13, 14 },
- { 11, 15, 12 },
- { 11, 15, 12 },
- { 11, 15, 13 },
- { 11, 15, 13 },
- { 11, 12, 15 },
- { 11, 12, 15 },
- { 11, 14, 0 },
- { 11, 14, 0 },
- { 11, 14, 14 },
- { 11, 14, 14 },
- { 11, 13, 15 },
- { 11, 13, 15 },
- { 11, 12, 0 },
- { 11, 12, 0 },
- { 11, 14, 15 },
- { 11, 14, 15 },
- { 12, 0, 14 },
- { 12, 0, 12 },
- { 12, 15, 14 },
- { 12, 15, 0 },
- { 12, 0, 15 },
- { 12, 15, 15 },
-};
-
-//---------------------------------------------------------------------------
-const int8u hcb_2step_Bytes[]=
-{
- 0, 5, 5, 0, 5, 0, 5, 0, 5, 0, 6, 5
-};
-
-const hcb_struct_1* hcb_2step[]=
-{
- 0, huffman_01_1, huffman_02_1, 0, huffman_04_1, 0, huffman_06_1, 0, huffman_08_1, 0, huffman_10_1, huffman_11_1
-};
-
-//---------------------------------------------------------------------------
-const int16u hcb_table_size[]=
-{
- 0, 114, 86, 161, 185, 161, 126, 127, 83, 337, 210, 374
-};
-const hcb_struct* hcb_table[]=
-{
- 0, huffman_01, huffman_02, huffman_03, huffman_04, huffman_05, huffman_06, huffman_07, huffman_08, huffman_09, huffman_10, huffman_11
-};
-
-//***************************************************************************
-// PRED_SFB_MAX
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const int8u Aac_PRED_SFB_MAX[16]=
-{
- 33, 33, 38, 40, 40, 40, 41, 41, 37, 37, 37, 34, 64, 64, 64, 64
-};
-
-//***************************************************************************
-// swb offsets
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-struct Aac_swb_offset
-{
- int8u num_swb;
- int16u swb_offset[64];
-};
-
-//---------------------------------------------------------------------------
-const Aac_swb_offset Aac_swb_short_window_96[] =
-{
- {
- 12,
- {
- 0, 4, 8, 12, 16, 20, 24, 32, 40, 48,
- 64, 92, 128
- }
- }
-};
-
-const Aac_swb_offset Aac_swb_short_window_64[] =
-{
- {
- 12,
- {
- 0, 4, 8, 12, 16, 20, 24, 32, 40, 48,
- 64, 92, 128
- }
- }
-};
-
-const Aac_swb_offset Aac_swb_short_window_48[] =
-{
- {
- 14,
- {
- 0, 4, 8, 12, 16, 20, 28, 36, 44, 56,
- 68, 80, 96, 112, 128
- }
- }
-};
-
-const Aac_swb_offset Aac_swb_short_window_24[] =
-{
- {
- 15,
- {
- 0, 4, 8, 12, 16, 20, 24, 28, 36, 44,
- 52, 64, 76, 92, 108, 128
- }
- }
-};
-
-const Aac_swb_offset Aac_swb_short_window_16[] =
-{
- {
- 15,
- {
- 0, 4, 8, 12, 16, 20, 24, 28, 32, 40,
- 48, 60, 72, 88, 108, 128
- }
- }
-};
-
-const Aac_swb_offset Aac_swb_short_window_8[] =
-{
- {
- 15,
- {
- 0, 4, 8, 12, 16, 20, 24, 28, 36, 44,
- 52, 60, 72, 88, 108, 128
- }
- }
-};
-
-const Aac_swb_offset* Aac_swb_offset_short_window[13] =
-{
- Aac_swb_short_window_96, //96000
- Aac_swb_short_window_96, //88200
- Aac_swb_short_window_64, //64000
- Aac_swb_short_window_48, //48000
- Aac_swb_short_window_48, //44100
- Aac_swb_short_window_48, //32000
- Aac_swb_short_window_24, //24000
- Aac_swb_short_window_24, //22050
- Aac_swb_short_window_16, //16000
- Aac_swb_short_window_16, //12000
- Aac_swb_short_window_16, //11025
- Aac_swb_short_window_8, //8000
- Aac_swb_short_window_8 //7350
-};
-
-//---------------------------------------------------------------------------
-const Aac_swb_offset Aac_swb_long_window_96[]=
-{
- {
- 41,
- {
- 0, 4, 8, 12, 16, 20, 24, 28, 32, 36,
- 40, 44, 48, 52, 56, 64, 72, 80, 88, 96,
- 108, 120, 132, 144, 156, 172, 188, 212, 240, 276,
- 320, 384, 448, 512, 576, 640, 704, 768, 832, 896,
- 960, 1024
- }
- }
-};
-
-const Aac_swb_offset Aac_swb_long_window_64[]=
-{
- {
- 47,
- {
- 0, 4, 8, 12, 16, 20, 24, 28, 32, 36,
- 40, 44, 48, 52, 56, 64, 72, 80, 88, 100,
- 112, 124, 140, 156, 172, 192, 216, 240, 268, 304,
- 344, 384, 424, 464, 504, 544, 584, 624, 664, 704,
- 744, 784, 824, 864, 904, 944, 984, 1024
- }
- }
-};
-//---------------------------------------------------------------------------
-const Aac_swb_offset Aac_swb_long_window_48[]=
-{
- {
- 49,
- {
- 0, 4, 8, 12, 16, 20, 24, 28, 32, 36,
- 40, 48, 56, 64, 72, 80, 88, 96, 108, 120,
- 132, 144, 160, 176, 196, 216, 240, 264, 292, 320,
- 352, 384, 416, 448, 480, 512, 544, 576, 608, 640,
- 672, 704, 736, 768, 800, 832, 864, 896, 928, 1024
- }
- }
-};
-//---------------------------------------------------------------------------
-const Aac_swb_offset Aac_swb_long_window_32[]=
-{
- {
- 51,
- {
- 0, 4, 8, 12, 16, 20, 24, 28, 32, 36,
- 40, 48, 56, 64, 72, 80, 88, 96, 108, 120,
- 132, 144, 160, 176, 196, 216, 240, 264, 292, 320,
- 352, 384, 416, 448, 480, 512, 544, 576, 608, 640,
- 672, 704, 736, 768, 800, 832, 864, 896, 928, 960,
- 992, 1024
- }
- }
-};
-//---------------------------------------------------------------------------
-const Aac_swb_offset Aac_swb_long_window_24[]=
-{
- {
- 47,
- {
- 0, 4, 8, 12, 16, 20, 24, 28, 32, 36,
- 40, 44, 52, 60, 68, 76, 84, 92, 100, 108,
- 116, 124, 136, 148, 160, 172, 188, 204, 220, 240,
- 260, 284, 308, 336, 364, 396, 432, 468, 508, 552,
- 600, 652, 704, 768, 832, 896, 960, 1024
- }
- }
-};
-//---------------------------------------------------------------------------
-const Aac_swb_offset Aac_swb_long_window_16[]=
-{
- {
- 43,
- {
- 0, 8, 16, 24, 32, 40, 48, 56, 64, 72,
- 80, 88, 100, 112, 124, 136, 148, 160, 172, 184,
- 196, 212, 228, 244, 260, 280, 300, 320, 344, 368,
- 396, 424, 456, 492, 532, 572, 616, 664, 716, 772,
- 832, 896, 960, 1024
- }
- }
-};
-//---------------------------------------------------------------------------
-const Aac_swb_offset Aac_swb_long_window_8[]=
-{
- {
- 40,
- {
- 0, 12, 24, 36, 48, 60, 72, 84, 96, 108,
- 120, 132, 144, 156, 172, 188, 204, 220, 236, 252,
- 268, 288, 308, 328, 348, 372, 396, 420, 448, 476,
- 508, 544, 580, 620, 664, 712, 764, 820, 880, 944,
- 1024
- }
- }
-};
-
-//---------------------------------------------------------------------------
-const Aac_swb_offset* Aac_swb_offset_long_window[13]=
-{
- Aac_swb_long_window_96, //96000
- Aac_swb_long_window_96, //88200
- Aac_swb_long_window_64, //64000
- Aac_swb_long_window_48, //48000
- Aac_swb_long_window_48, //44100
- Aac_swb_long_window_32, //32000
- Aac_swb_long_window_24, //24000
- Aac_swb_long_window_24, //22050
- Aac_swb_long_window_16, //16000
- Aac_swb_long_window_16, //12000
- Aac_swb_long_window_16, //11025
- Aac_swb_long_window_8, //8000
- Aac_swb_long_window_8 //7350
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr.cpp
deleted file mode 100644
index 8f275f278..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr.cpp
+++ /dev/null
@@ -1,753 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AAC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Aac.h"
-#include "MediaInfo/Audio/File_Aac_GeneralAudio_Sbr.h"
-#include <cmath>
-#include <algorithm>
-#include <cstring>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern const char* Aac_audioObjectType(int8u audioObjectType);
-
-//---------------------------------------------------------------------------
-int8u Aac_AudioSpecificConfig_sampling_frequency_index(const int32u sampling_frequency);
-
-//---------------------------------------------------------------------------
-// Master frequency band table
-// k0 = lower frequency boundary
-int8u Aac_k0_Compute(int8u bs_start_freq, int8u extension_sampling_frequency_index)
-{
- return Aac_k0_startMin[extension_sampling_frequency_index]+Aac_k0_offset[extension_sampling_frequency_index][bs_start_freq];
-}
-
-//---------------------------------------------------------------------------
-// Master frequency band table
-// k2 = upper frequency boundary
-int8u Aac_k2_Compute(int8u bs_stop_freq, int8u extension_sampling_frequency_index, int8u k0)
-{
- switch (bs_stop_freq)
- {
- case 14 : return (int8u)min(64, 2*k0);
- case 15 : return (int8u)min(64, 3*k0);
- default : ;
- }
-
- return (int8u)min(64, Aac_k2_stopMin[extension_sampling_frequency_index]+Aac_k2_offset[extension_sampling_frequency_index][bs_stop_freq]);
-}
-
-//---------------------------------------------------------------------------
-//Helper
-int8u Aac_bands_Compute(bool warp, int8u bands, int8u a0, int8u a1)
-{
- float div=(float)log(2.0);
- if (warp)
- div*=(float)1.3;
-
- return (int8u)(bands*log((float)a1/(float)a0)/div+0.5);
-}
-
-//---------------------------------------------------------------------------
-// Master frequency band table
-// Computing for bs_freq_scale = 0
-bool Aac_f_master_Compute_0(int8u &num_env_bands_Master, int8u* f_Master, sbr_handler *sbr, int8u k0, int8u k2)
-{
- int8u dk, numBands;
- if (sbr->bs_alter_scale)
- {
- dk=1;
- numBands=(((k2-k0+2)>>2)<<1);
- }
- else
- {
- dk=2;
- numBands=(((k2-k0)>>1)<<1);
- }
-
- int8u k2Achieved=k0+numBands*dk;
- int8s k2Diff=k2-k2Achieved;
- int8s vDk[64] = { 0 };
- for (int8u k=0; k<numBands; k++)
- vDk[k]=dk;
-
- if (k2Diff)
- {
- int8s incr;
- int8u k;
- if (k2Diff>0)
- {
- incr=-1;
- k=numBands-1;
- }
- else
- {
- incr=1;
- k=0;
- }
-
- while (k2Diff)
- {
- if (k >= 64)
- break;
- vDk[k]-=incr;
- k+=incr;
- k2Diff+=incr;
- }
- }
-
- f_Master[0]=k0;
- for (int8u k=1; k<=numBands; k++)
- f_Master[k]=f_Master[k-1]+vDk[k-1];
-
- num_env_bands_Master=numBands;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-// Master frequency band table
-// Computing for bs_freq_scale != 0
-int int8u_cmp(const void *a, const void *b)
-{
- return ((int8u)(*(int8u*)a - *(int8u*)b));
-}
-bool Aac_f_master_Compute(int8u &num_env_bands_Master, int8u* f_Master, sbr_handler *sbr, int8u k0, int8u k2)
-{
- int8u temp1[]={6, 5, 4 };
- int8u bands=temp1[sbr->bs_freq_scale-1];
-
- int8u twoRegions, k1;
- if ((float)k2/(float)k0>2.2449)
- {
- twoRegions=1;
- k1=2*k0;
- }
- else
- {
- twoRegions=0;
- k1=k2;
- }
-
- int8u numBands0=2*Aac_bands_Compute(false, bands, k0, k1);
- if (numBands0 == 0 || numBands0 >= 64)
- return false;
-
- int8u vDk0[64];
- int8u vk0[64];
- float Power=pow((float)k1/(float)k0, (float)1/(float)numBands0);
- float Power2=(float)k0;
- int8s Temp1=(int8s)(Power2+0.5);
- for (int8u k=0; k<=numBands0-1; k++)
- {
- int8s Temp0=Temp1;
- Power2*=Power;
- Temp1=(int8s)(Power2+0.5);
- vDk0[k]=Temp1-Temp0;
- }
- qsort(vDk0, numBands0, sizeof(int8u), int8u_cmp);
- vk0[0]=k0;
- for (int8u k=1; k<=numBands0; k++)
- {
- if (vDk0[k-1]==0)
- return false;
- vk0[k]=vk0[k-1]+vDk0[k-1];
- }
-
- if (!twoRegions)
- {
- for (int8u k=0; k<=numBands0; k++)
- f_Master[k]=vk0[k];
- num_env_bands_Master=numBands0;
- return true;
- }
-
- //With twoRegions
- int8u numBands1;
- int8u vDk1[64] = { 0 };
- int8u vk1[64];
- numBands1=2*Aac_bands_Compute(true, bands, k1, k2);
- if (numBands1 == 0 || numBands0 + numBands1 >= 64)
- return false;
-
- Power=(float)pow((float)k2/(float)k1, (float)1/(float)numBands1);
- Power2=(float)k1;
- Temp1=(int8s)(Power2+0.5);
- for (int8u k=0; k<=numBands1-1; k++)
- {
- int8s Temp0=Temp1;
- Power2*=Power;
- Temp1=(int8s)(Power2+0.5);
- vDk1[k]=Temp1-Temp0;
- }
-
- if (vDk1[0]<vDk0[numBands0-1])
- {
- qsort(vDk1, numBands1+1, sizeof(int8u), int8u_cmp);
- int8u change=vDk0[numBands0-1]-vDk1[0];
- vDk1[0]=vDk0[numBands0-1];
- vDk1[numBands1 - 1] = vDk1[numBands1 - 1] - change;
- }
-
- qsort(vDk1, numBands1, sizeof(int8u), int8u_cmp);
- vk1[0]=k1;
- for (int8u k=1; k<=numBands1; k++)
- {
- if (vDk1[k-1]==0)
- return false;
- vk1[k]=vk1[k-1]+vDk1[k-1];
- }
-
- num_env_bands_Master=numBands0+numBands1;
- for (int8u k=0; k<=numBands0; k++)
- f_Master[k]=vk0[k];
- for (int8u k=numBands0+1; k <=num_env_bands_Master; k++)
- f_Master[k]=vk1[k-numBands0];
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-// Derived frequency border tables
-bool Aac_bands_Compute(int8u &num_env_bands_Master, int8u* f_Master, sbr_handler *sbr, int8u k2)
-{
- sbr->num_env_bands[1]=num_env_bands_Master-sbr->bs_xover_band;
- sbr->num_env_bands[0]=(sbr->num_env_bands[1]>>1)+(sbr->num_env_bands[1]-((sbr->num_env_bands[1]>>1)<<1));
-
- if (f_Master[sbr->bs_xover_band]>32)
- return false;
-
- if (sbr->bs_noise_bands==0)
- sbr->num_noise_bands=1;
- else
- {
- sbr->num_noise_bands=Aac_bands_Compute(false, sbr->bs_noise_bands, f_Master[sbr->bs_xover_band], k2);
- if (sbr->num_noise_bands<1 || sbr->num_noise_bands>5)
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool Aac_Sbr_Compute(sbr_handler *sbr, int8u extension_sampling_frequency_index)
-{
- if (extension_sampling_frequency_index>=9)
- return 0; //Not supported
- int8u k0=Aac_k0_Compute(sbr->bs_start_freq, extension_sampling_frequency_index);
- int8u k2=Aac_k2_Compute(sbr->bs_stop_freq, extension_sampling_frequency_index, k0);
- if (k2<=k0) return false;
- switch (extension_sampling_frequency_index)
- {
- case 0 :
- case 1 :
- case 2 :
- case 3 : if ((k2-k0)>32) return false; break;
- case 4 : if ((k2-k0)>35) return false; break;
- case 5 :
- case 6 :
- case 7 :
- case 8 : if ((k2-k0)>48) return false; break;
- default : ;
- }
-
- int8u num_env_bands_Master;
- int8u f_Master[64];
- if (sbr->bs_freq_scale==0)
- {
- if (!Aac_f_master_Compute_0(num_env_bands_Master, f_Master, sbr, k0, k2))
- return false;
- }
- else
- {
- if (!Aac_f_master_Compute(num_env_bands_Master, f_Master, sbr, k0, k2))
- return false;
- }
- if (num_env_bands_Master<=sbr->bs_xover_band)
- return false;
- if (!Aac_bands_Compute(num_env_bands_Master, f_Master, sbr, k2))
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-int16u File_Aac::sbr_huff_dec(sbr_huffman Table, const char* Name)
-{
- int8u bit;
- int16s index = 0;
-
- Element_Begin1(Name);
- while (index>=0)
- {
- Get_S1(1, bit, "bit");
- index=Table[index][bit];
- }
- Element_End0();
-
- return index+64;
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_extension_data(size_t End, int8u id_aac, bool crc_flag)
-{
- FILLING_BEGIN();
- if (Infos["Format_Settings_SBR"].empty())
- {
- Infos["Format_Profile"]=__T("HE-AAC");
- Ztring SamplingRate=Infos["SamplingRate"];
- if (SamplingRate.empty())
- SamplingRate.From_Number(sampling_frequency);
- Infos["SamplingRate"].From_Number((extension_sampling_frequency_index==(int8u)-1)?(sampling_frequency*2):extension_sampling_frequency, 10);
- if (MediaInfoLib::Config.LegacyStreamDisplay_Get())
- {
- Infos["Format_Profile"]+=__T(" / LC");
- Infos["SamplingRate"]+=__T(" / ")+SamplingRate;
- }
- Infos["Format_Settings_SBR"]=__T("Yes (Implicit)");
- Infos["Codec"]=Ztring().From_Local(Aac_audioObjectType(audioObjectType))+__T("-SBR");
-
- if (Frame_Count_Valid<32)
- Frame_Count_Valid=32; //We need to find the SBR header
- }
- FILLING_END();
-
- Element_Begin1("sbr_extension_data");
- bool bs_header_flag;
- if (crc_flag)
- Skip_S2(10, "bs_sbr_crc_bits");
- //~ if (sbr_layer != SBR_STEREO_ENHANCE)
- //~ {
- Get_SB(bs_header_flag, "bs_header_flag");
- if (bs_header_flag)
- {
- if (extension_sampling_frequency_index==(int8u)-1)
- {
- extension_sampling_frequency=sampling_frequency*2;
- extension_sampling_frequency_index=Aac_AudioSpecificConfig_sampling_frequency_index(extension_sampling_frequency);
- }
-
- delete sbr;
- sbr=new sbr_handler;
-
- sbr_header();
-
- if (!Aac_Sbr_Compute(sbr, extension_sampling_frequency_index))
- {
- delete sbr; sbr=NULL;
- }
- }
- //~ }
-
- //Parsing
- if (sbr) //only if a header is found
- {
- sbr->bs_amp_res[0]=sbr->bs_amp_res_FromHeader; //Set up with header data
- sbr->bs_amp_res[1]=sbr->bs_amp_res_FromHeader; //Set up with header data
- sbr_data(id_aac);
-
- FILLING_BEGIN();
- if (MediaInfoLib::Config.ParseSpeed_Get()<0.3)
- {
- Frame_Count_Valid=Frame_Count+1;
- if (Frame_Count<8)
- Frame_Count_Valid+=8-Frame_Count;
- }
- FILLING_END();
- }
- if (Data_BS_Remain()>End)
- Skip_BS(Data_BS_Remain()-End, "bs_fill_bits");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_header()
-{
- Element_Begin1("sbr_header");
- Get_S1 (1, sbr->bs_amp_res_FromHeader, "bs_amp_res");
- Get_S1 (4, sbr->bs_start_freq, "bs_start_freq");
- Get_S1 (4, sbr->bs_stop_freq, "bs_stop_freq");
- Get_S1 (3, sbr->bs_xover_band, "bs_xover_band");
- Skip_S1(2, "bs_reserved");
- bool bs_header_extra_1, bs_header_extra_2;
- Get_SB (bs_header_extra_1, "bs_header_extra_1");
- Get_SB (bs_header_extra_2, "bs_header_extra_2");
- if(bs_header_extra_1)
- {
- Get_S1 (2, sbr->bs_freq_scale, "bs_freq_scale");
- Get_S1 (1, sbr->bs_alter_scale, "bs_alter_scale");
- Get_S1 (2, sbr->bs_noise_bands, "bs_noise_bands");
- }
- else
- {
- sbr->bs_freq_scale=2;
- sbr->bs_alter_scale=1;
- sbr->bs_noise_bands=2;
- }
- if(bs_header_extra_2)
- {
- Skip_S1(2, "bs_limiter_bands");
- Skip_S1(2, "bs_limiter_gains");
- Skip_SB( "bs_interpol_freq");
- Skip_SB( "bs_smoothing_mode");
- }
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_data(int8u id_aac)
-{
- Element_Begin1("sbr_data");
- switch (id_aac)
- {
- case 0 : sbr_single_channel_element(); break; //ID_SCE
- case 1 : sbr_channel_pair_element(); break; //ID_CPE
- default : ;
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_single_channel_element()
-{
- Element_Begin1("sbr_single_channel_element");
- bool bs_data_extra, bs_add_harmonic_flag, bs_extended_data;
- int8u bs_extension_size, bs_esc_count, bs_extension_id;
- Get_SB (bs_data_extra, "bs_data_extra");
- if (bs_data_extra)
- {
- Skip_S1(4, "bs_reserved");
- }
- sbr_grid(0);
- sbr_dtdf(0);
- sbr_invf(0);
- sbr_envelope(0, 0);
- sbr_noise(0, 0);
- Get_SB (bs_add_harmonic_flag, "bs_add_harmonic_flag[0]");
- if (bs_add_harmonic_flag)
- sbr_sinusoidal_coding(0);
-
- Get_SB (bs_extended_data, "bs_extended_data[0]");
- if (bs_extended_data) {
- Get_S1 (4,bs_extension_size, "bs_extension_size");
- size_t cnt=bs_extension_size;
- if (cnt==15)
- {
- Get_S1 (8, bs_esc_count, "bs_esc_count");
- cnt+=bs_esc_count;
- }
-
- if (Data_BS_Remain()>=8*cnt)
- {
- size_t End=Data_BS_Remain()-8*cnt;
- while (Data_BS_Remain()>End+7)
- {
- Get_S1 (2,bs_extension_id, "bs_extension_id");
- switch (bs_extension_id)
- {
- case 2 : ps_data(End); break; //EXTENSION_ID_PS
- default: ;
- }
- }
- if (End<Data_BS_Remain())
- Skip_BS(Data_BS_Remain()-End, "bs_fill_bits");
- }
- else
- Skip_BS(Data_BS_Remain(), "(Error)");
-
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_grid(bool ch)
-{
- Element_Begin1("sbr_grid");
- int8u bs_frame_class, bs_num_rel_0, bs_num_rel_1, tmp;
- int ptr_bits;
- Get_S1(2, bs_frame_class, "bs_frame_class");
- switch (bs_frame_class)
- {
- case 0 : //FIXFIX
- Get_S1 (2, tmp, "tmp");
- sbr->bs_num_env[ch]=(int8u)pow(2.0, tmp);
- if (sbr->bs_num_env[ch]==1)
- sbr->bs_amp_res[ch]=0;
- Get_SB ( sbr->bs_freq_res[ch][0], "bs_freq_res[ch][0]");
- for (int8u env=1; env<sbr->bs_num_env[ch]; env++)
- sbr->bs_freq_res[ch][env]=sbr->bs_freq_res[ch][0];
- break;
- case 1 : //FIXVAR
- Skip_S1(2, "bs_var_bord_1[ch]");
- Get_S1 (2, bs_num_rel_1, "bs_num_rel_1[ch]");
- sbr->bs_num_env[ch]=bs_num_rel_1+1;
- for (int8u rel=0; rel<sbr->bs_num_env[ch]-1; rel++) {
- Skip_S1(2, "tmp");
- }
- ptr_bits=(int8u)ceil(log((double)sbr->bs_num_env[ch]+1)/log((double)2));
- Skip_BS(ptr_bits, "bs_pointer[ch]");
- Element_Begin1("bs_freq_res[ch]");
- for (int8u env=0; env<sbr->bs_num_env[ch]; env++)
- Get_SB (sbr->bs_freq_res[ch][sbr->bs_num_env[ch]-1-env], "bs_freq_res[ch][bs_num_env[ch]-1-env]");
- Element_End0();
- break;
- case 2 : //VARFIX
- Skip_S1(2, "bs_var_bord_0[ch]");
- Get_S1 (2,bs_num_rel_0, "bs_num_rel_0[ch]");
- sbr->bs_num_env[ch] = bs_num_rel_0 + 1;
- for (int8u rel=0; rel<sbr->bs_num_env[ch]-1; rel++)
- Skip_S1(2, "tmp");
- ptr_bits=(int8u)ceil(log((double)sbr->bs_num_env[ch]+1)/log((double)2));
- Skip_BS(ptr_bits, "bs_pointer[ch]");
- Element_Begin1("bs_freq_res[ch]");
- for (int8u env = 0; env < sbr->bs_num_env[ch]; env++)
- Get_SB (sbr->bs_freq_res[ch][env], "bs_freq_res[ch][env]");
- Element_End0();
- break;
- case 3 : //VARVAR
- Skip_S1(2, "bs_var_bord_0[ch]");
- Skip_S1(2, "bs_var_bord_1[ch]");
- Get_S1 (2,bs_num_rel_0, "bs_num_rel_0[ch]");
- Get_S1 (2,bs_num_rel_1, "bs_num_rel_1[ch]");
- sbr->bs_num_env[ch] = bs_num_rel_0 + bs_num_rel_1 + 1;
- for (int8u rel=0; rel<bs_num_rel_0; rel++)
- Skip_S1(2, "tmp");
- for (int8u rel=0; rel<bs_num_rel_1; rel++)
- Skip_S1(2, "tmp");
- ptr_bits=(int8u)ceil(log((double)(sbr->bs_num_env[ch]+1))/log((double)2));
- Skip_BS(ptr_bits, "bs_pointer[ch]");
- Element_Begin1("bs_freq_res[ch]");
- for (int8u env=0; env<sbr->bs_num_env[ch]; env++)
- Get_SB (sbr->bs_freq_res[ch][env], "bs_freq_res[ch][env]");
- Element_End0();
- break;
- }
- if (sbr->bs_num_env[ch]>1)
- sbr->bs_num_noise[ch]=2;
- else
- sbr->bs_num_noise[ch]=1;
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_channel_pair_element()
-{
- Element_Begin1("sbr_channel_pair_element");
- bool bs_data_extra,bs_coupling,bs_add_harmonic_flag,bs_extended_data;
- int8u bs_extension_size,bs_esc_count,bs_extension_id;
- Get_SB (bs_data_extra, "bs_data_extra");
- if (bs_data_extra) {
- Skip_S1(4, "bs_reserved");
- Skip_S1(4, "bs_reserved");
- }
-
- Get_SB (bs_coupling, "bs_coupling");
- sbr_grid(0);
- if (bs_coupling)
- {
- //Coupling
- sbr->bs_num_env [1]=sbr->bs_num_env [0];
- sbr->bs_num_noise [1]=sbr->bs_num_noise [0];
- for (int8u env=0; env<sbr->bs_num_env[0]; env++)
- sbr->bs_freq_res[1][env]=sbr->bs_freq_res[0][env];
- }
- else
- sbr_grid(1);
- sbr_dtdf(0);
- sbr_dtdf(1);
- sbr_invf(0);
- if (!bs_coupling)
- sbr_invf(1);
- sbr_envelope(0, bs_coupling);
- if (bs_coupling)
- {
- sbr_noise(0, bs_coupling);
- sbr_envelope(1, bs_coupling);
- }
- else
- {
- sbr_envelope(1, bs_coupling);
- sbr_noise(0, bs_coupling);
- }
- sbr_noise(1, bs_coupling);
- Get_SB (bs_add_harmonic_flag, "bs_add_harmonic_flag[0]");
- if (bs_add_harmonic_flag)
- sbr_sinusoidal_coding(0);
- Get_SB (bs_add_harmonic_flag, "bs_add_harmonic_flag[1]");
- if (bs_add_harmonic_flag)
- sbr_sinusoidal_coding(1);
-
- Get_SB (bs_extended_data, "bs_extended_data");
- if (bs_extended_data) {
- Get_S1(4,bs_extension_size, "bs_extension_size");
- size_t cnt = bs_extension_size;
- if (cnt == 15)
- {
- Get_S1(8,bs_esc_count, "bs_esc_count");
- cnt += bs_esc_count;
- }
- if (Data_BS_Remain()>=8*cnt)
- {
- size_t End=Data_BS_Remain()-8*cnt;
- while (Data_BS_Remain()>End+7)
- {
- Get_S1 (2,bs_extension_id, "bs_extension_id");
- switch (bs_extension_id)
- {
- case 2 : ps_data(End); break; //EXTENSION_ID_PS
- default: ;
- }
- }
- if (End<Data_BS_Remain())
- Skip_BS(Data_BS_Remain()-End, "bs_fill_bits");
- }
- else
- Skip_BS(Data_BS_Remain(), "(Error)");
-
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_dtdf(bool ch)
-{
- Element_Begin1("sbr_dtdf");
- for (int env=0; env<sbr->bs_num_env[ch]; env++)
- Get_S1 (1, sbr->bs_df_env[ch][env], "bs_df_env[ch][env]");
- for (int noise=0; noise<sbr->bs_num_noise[ch]; noise++)
- Get_S1 (1, sbr->bs_df_noise[ch][noise], "bs_df_noise[ch][noise]");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_invf(bool)
-{
- Element_Begin1("sbr_invf");
- for (int n = 0; n<sbr->num_noise_bands; n++ )
- Skip_S1(2, "bs_invf_mode[ch][n]");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_envelope(bool ch, bool bs_coupling)
-{
- sbr_huffman t_huff, f_huff;
- Element_Begin1("sbr_envelope");
- if (bs_coupling && ch)
- {
- if (sbr->bs_amp_res[ch])
- {
- t_huff = t_huffman_env_bal_3_0dB;
- f_huff = f_huffman_env_bal_3_0dB;
- }
- else
- {
- t_huff = t_huffman_env_bal_1_5dB;
- f_huff = f_huffman_env_bal_1_5dB;
- }
- }
- else
- {
- if (sbr->bs_amp_res[ch])
- {
- t_huff = t_huffman_env_3_0dB;
- f_huff = f_huffman_env_3_0dB;
- }
- else
- {
- t_huff = t_huffman_env_1_5dB;
- f_huff = f_huffman_env_1_5dB;
- }
- }
-
- for (int8u env=0; env<sbr->bs_num_env[ch]; env++)
- {
- if (sbr->bs_df_env[ch][env] == 0)
- {
- if (bs_coupling && ch)
- Skip_S1(sbr->bs_amp_res[ch]?5:6, "bs_env_start_value_balance");
- else
- Skip_S1(sbr->bs_amp_res[ch]?6:7, "bs_env_start_value_level");
- for (int8u band = 1; band < sbr->num_env_bands[sbr->bs_freq_res[ch][env]]; band++)
- sbr_huff_dec(f_huff, "bs_data_env[ch][env][band]");
- }
- else
- {
- for (int8u band = 0; band < sbr->num_env_bands[sbr->bs_freq_res[ch][env]]; band++)
- sbr_huff_dec(t_huff, "bs_data_env[ch][env][band]");
- }
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_noise(bool ch, bool bs_coupling)
-{
- sbr_huffman t_huff, f_huff;
- Element_Begin1("sbr_noise");
- if (bs_coupling && ch)
- {
- t_huff = t_huffman_noise_bal_3_0dB;
- f_huff = f_huffman_env_bal_3_0dB;
- }
- else
- {
- t_huff = t_huffman_noise_3_0dB;
- f_huff = f_huffman_env_3_0dB;
- }
-
- for (int noise=0; noise<sbr->bs_num_noise[ch]; noise++)
- {
- if (sbr->bs_df_noise[ch][noise] == 0)
- {
- Skip_S1(5, (bs_coupling && ch)?"bs_noise_start_value_balance":"bs_noise_start_value_level");
- for (int8u band=1; band<sbr->num_noise_bands; band++)
- sbr_huff_dec(f_huff, "bs_data_noise[ch][noise][band]");
- }
- else
- {
- for (int8u band = 0; band < sbr->num_noise_bands; band++)
- sbr_huff_dec(t_huff, "bs_data_noise[ch][noise][band]");
- }
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::sbr_sinusoidal_coding(bool)
-{
- Element_Begin1("sbr_sinusoidal_coding");
- for (int8u n=0; n<sbr->num_env_bands[1]; n++)
- Skip_SB( "bs_add_harmonic[ch][n]");
- Element_End0();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_AAC_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr.h
deleted file mode 100644
index abd73fac8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr.h
+++ /dev/null
@@ -1,715 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Aac_GeneralAudio_SbrH
-#define MediaInfo_File_Aac_GeneralAudio_SbrH
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-const int8s t_huffman_env_1_5dB[120][2]=
-{
- { 1, 2 },
- { -64, -65 },
- { 3, 4 },
- { -63, -66 },
- { 5, 6 },
- { -62, -67 },
- { 7, 8 },
- { -61, -68 },
- { 9, 10 },
- { -60, -69 },
- { 11, 12 },
- { -59, -70 },
- { 13, 14 },
- { -58, -71 },
- { 15, 16 },
- { -57, -72 },
- { 17, 18 },
- { -73, -56 },
- { 19, 21 },
- { -74, 20 },
- { -55, -75 },
- { 22, 26 },
- { 23, 24 },
- { -54, -76 },
- { -77, 25 },
- { -53, -78 },
- { 27, 34 },
- { 28, 29 },
- { -52, -79 },
- { 30, 31 },
- { -80, -51 },
- { 32, 33 },
- { -83, -82 },
- { -81, -50 },
- { 35, 57 },
- { 36, 40 },
- { 37, 38 },
- { -88, -84 },
- { -48, 39 },
- { -90, -85 },
- { 41, 46 },
- { 42, 43 },
- { -49, -87 },
- { 44, 45 },
- { -89, -86 },
- {-124, -123 },
- { 47, 50 },
- { 48, 49 },
- {-122, -121 },
- {-120, -119 },
- { 51, 54 },
- { 52, 53 },
- {-118, -117 },
- {-116, -115 },
- { 55, 56 },
- {-114, -113 },
- {-112, -111 },
- { 58, 89 },
- { 59, 74 },
- { 60, 67 },
- { 61, 64 },
- { 62, 63 },
- {-110, -109 },
- {-108, -107 },
- { 65, 66 },
- {-106, -105 },
- {-104, -103 },
- { 68, 71 },
- { 69, 70 },
- {-102, -101 },
- {-100, -99 },
- { 72, 73 },
- { -98, -97 },
- { -96, -95 },
- { 75, 82 },
- { 76, 79 },
- { 77, 78 },
- { -94, -93 },
- { -92, -91 },
- { 80, 81 },
- { -47, -46 },
- { -45, -44 },
- { 83, 86 },
- { 84, 85 },
- { -43, -42 },
- { -41, -40 },
- { 87, 88 },
- { -39, -38 },
- { -37, -36 },
- { 90, 105 },
- { 91, 98 },
- { 92, 95 },
- { 93, 94 },
- { -35, -34 },
- { -33, -32 },
- { 96, 97 },
- { -31, -30 },
- { -29, -28 },
- { 99, 102 },
- { 100, 101 },
- { -27, -26 },
- { -25, -24 },
- { 103, 104 },
- { -23, -22 },
- { -21, -20 },
- { 106, 113 },
- { 107, 110 },
- { 108, 109 },
- { -19, -18 },
- { -17, -16 },
- { 111, 112 },
- { -15, -14 },
- { -13, -12 },
- { 114, 117 },
- { 115, 116 },
- { -11, -10 },
- { -9, -8 },
- { 118, 119 },
- { -7, -6 },
- { -5, -4 }
-};
-
-const int8s f_huffman_env_1_5dB[120][2]=
-{
- { 1, 2 },
- { -64, -65 },
- { 3, 4 },
- { -63, -66 },
- { 5, 6 },
- { -67, -62 },
- { 7, 8 },
- { -68, -61 },
- { 9, 10 },
- { -69, -60 },
- { 11, 13 },
- { -70, 12 },
- { -59, -71 },
- { 14, 16 },
- { -58, 15 },
- { -72, -57 },
- { 17, 19 },
- { -73, 18 },
- { -56, -74 },
- { 20, 23 },
- { 21, 22 },
- { -55, -75 },
- { -54, -53 },
- { 24, 27 },
- { 25, 26 },
- { -76, -52 },
- { -77, -51 },
- { 28, 31 },
- { 29, 30 },
- { -50, -78 },
- { -79, -49 },
- { 32, 36 },
- { 33, 34 },
- { -48, -47 },
- { -80, 35 },
- { -81, -82 },
- { 37, 47 },
- { 38, 41 },
- { 39, 40 },
- { -83, -46 },
- { -45, -84 },
- { 42, 44 },
- { -85, 43 },
- { -44, -43 },
- { 45, 46 },
- { -88, -87 },
- { -86, -90 },
- { 48, 66 },
- { 49, 56 },
- { 50, 53 },
- { 51, 52 },
- { -92, -42 },
- { -41, -39 },
- { 54, 55 },
- {-105, -89 },
- { -38, -37 },
- { 57, 60 },
- { 58, 59 },
- { -94, -91 },
- { -40, -36 },
- { 61, 63 },
- { -20, 62 },
- {-115, -110 },
- { 64, 65 },
- {-108, -107 },
- {-101, -97 },
- { 67, 89 },
- { 68, 75 },
- { 69, 72 },
- { 70, 71 },
- { -95, -93 },
- { -34, -27 },
- { 73, 74 },
- { -22, -17 },
- { -16, -124 },
- { 76, 82 },
- { 77, 79 },
- {-123, 78 },
- {-122, -121 },
- { 80, 81 },
- {-120, -119 },
- {-118, -117 },
- { 83, 86 },
- { 84, 85 },
- {-116, -114 },
- {-113, -112 },
- { 87, 88 },
- {-111, -109 },
- {-106, -104 },
- { 90, 105 },
- { 91, 98 },
- { 92, 95 },
- { 93, 94 },
- {-103, -102 },
- {-100, -99 },
- { 96, 97 },
- { -98, -96 },
- { -35, -33 },
- { 99, 102 },
- { 100, 101 },
- { -32, -31 },
- { -30, -29 },
- { 103, 104 },
- { -28, -26 },
- { -25, -24 },
- { 106, 113 },
- { 107, 110 },
- { 108, 109 },
- { -23, -21 },
- { -19, -18 },
- { 111, 112 },
- { -15, -14 },
- { -13, -12 },
- { 114, 117 },
- { 115, 116 },
- { -11, -10 },
- { -9, -8 },
- { 118, 119 },
- { -7, -6 },
- { -5, -4 }
-};
-
-const int8s t_huffman_env_bal_1_5dB[48][2]=
-{
- { -64, 1 },
- { -63, 2 },
- { -65, 3 },
- { -62, 4 },
- { -66, 5 },
- { -61, 6 },
- { -67, 7 },
- { -60, 8 },
- { -68, 9 },
- { 10, 11 },
- { -69, -59 },
- { 12, 13 },
- { -70, -58 },
- { 14, 28 },
- { 15, 21 },
- { 16, 18 },
- { -57, 17 },
- { -71, -56 },
- { 19, 20 },
- { -88, -87 },
- { -86, -85 },
- { 22, 25 },
- { 23, 24 },
- { -84, -83 },
- { -82, -81 },
- { 26, 27 },
- { -80, -79 },
- { -78, -77 },
- { 29, 36 },
- { 30, 33 },
- { 31, 32 },
- { -76, -75 },
- { -74, -73 },
- { 34, 35 },
- { -72, -55 },
- { -54, -53 },
- { 37, 41 },
- { 38, 39 },
- { -52, -51 },
- { -50, 40 },
- { -49, -48 },
- { 42, 45 },
- { 43, 44 },
- { -47, -46 },
- { -45, -44 },
- { 46, 47 },
- { -43, -42 },
- { -41, -40 }
-};
-
-const int8s f_huffman_env_bal_1_5dB[48][2]=
-{
- { -64, 1 },
- { -65, 2 },
- { -63, 3 },
- { -66, 4 },
- { -62, 5 },
- { -61, 6 },
- { -67, 7 },
- { -68, 8 },
- { -60, 9 },
- { 10, 11 },
- { -69, -59 },
- { -70, 12 },
- { -58, 13 },
- { 14, 17 },
- { -71, 15 },
- { -57, 16 },
- { -56, -73 },
- { 18, 32 },
- { 19, 25 },
- { 20, 22 },
- { -72, 21 },
- { -88, -87 },
- { 23, 24 },
- { -86, -85 },
- { -84, -83 },
- { 26, 29 },
- { 27, 28 },
- { -82, -81 },
- { -80, -79 },
- { 30, 31 },
- { -78, -77 },
- { -76, -75 },
- { 33, 40 },
- { 34, 37 },
- { 35, 36 },
- { -74, -55 },
- { -54, -53 },
- { 38, 39 },
- { -52, -51 },
- { -50, -49 },
- { 41, 44 },
- { 42, 43 },
- { -48, -47 },
- { -46, -45 },
- { 45, 46 },
- { -44, -43 },
- { -42, 47 },
- { -41, -40 }
-};
-
-const int8s t_huffman_env_3_0dB[62][2]=
-{
- { -64, 1 },
- { -65, 2 },
- { -63, 3 },
- { -66, 4 },
- { -62, 5 },
- { -67, 6 },
- { -61, 7 },
- { -68, 8 },
- { -60, 9 },
- { 10, 11 },
- { -69, -59 },
- { 12, 14 },
- { -70, 13 },
- { -71, -58 },
- { 15, 18 },
- { 16, 17 },
- { -72, -57 },
- { -73, -74 },
- { 19, 22 },
- { -56, 20 },
- { -55, 21 },
- { -54, -77 },
- { 23, 31 },
- { 24, 25 },
- { -75, -76 },
- { 26, 27 },
- { -78, -53 },
- { 28, 29 },
- { -52, -95 },
- { -94, 30 },
- { -93, -92 },
- { 32, 47 },
- { 33, 40 },
- { 34, 37 },
- { 35, 36 },
- { -91, -90 },
- { -89, -88 },
- { 38, 39 },
- { -87, -86 },
- { -85, -84 },
- { 41, 44 },
- { 42, 43 },
- { -83, -82 },
- { -81, -80 },
- { 45, 46 },
- { -79, -51 },
- { -50, -49 },
- { 48, 55 },
- { 49, 52 },
- { 50, 51 },
- { -48, -47 },
- { -46, -45 },
- { 53, 54 },
- { -44, -43 },
- { -42, -41 },
- { 56, 59 },
- { 57, 58 },
- { -40, -39 },
- { -38, -37 },
- { 60, 61 },
- { -36, -35 },
- { -34, -33 }
-};
-
-const int8s f_huffman_env_3_0dB[62][2]=
-{
- { -64, 1 },
- { -65, 2 },
- { -63, 3 },
- { -66, 4 },
- { -62, 5 },
- { -67, 6 },
- { 7, 8 },
- { -61, -68 },
- { 9, 10 },
- { -60, -69 },
- { 11, 12 },
- { -59, -70 },
- { 13, 14 },
- { -58, -71 },
- { 15, 16 },
- { -57, -72 },
- { 17, 19 },
- { -56, 18 },
- { -55, -73 },
- { 20, 24 },
- { 21, 22 },
- { -74, -54 },
- { -53, 23 },
- { -75, -76 },
- { 25, 30 },
- { 26, 27 },
- { -52, -51 },
- { 28, 29 },
- { -77, -79 },
- { -50, -49 },
- { 31, 39 },
- { 32, 35 },
- { 33, 34 },
- { -78, -46 },
- { -82, -88 },
- { 36, 37 },
- { -83, -48 },
- { -47, 38 },
- { -86, -85 },
- { 40, 47 },
- { 41, 44 },
- { 42, 43 },
- { -80, -44 },
- { -43, -42 },
- { 45, 46 },
- { -39, -87 },
- { -84, -40 },
- { 48, 55 },
- { 49, 52 },
- { 50, 51 },
- { -95, -94 },
- { -93, -92 },
- { 53, 54 },
- { -91, -90 },
- { -89, -81 },
- { 56, 59 },
- { 57, 58 },
- { -45, -41 },
- { -38, -37 },
- { 60, 61 },
- { -36, -35 },
- { -34, -33 }
-};
-
-const int8s t_huffman_env_bal_3_0dB[24][2]=
-{
- { -64, 1 },
- { -63, 2 },
- { -65, 3 },
- { -66, 4 },
- { -62, 5 },
- { -61, 6 },
- { -67, 7 },
- { -68, 8 },
- { -60, 9 },
- { 10, 16 },
- { 11, 13 },
- { -69, 12 },
- { -76, -75 },
- { 14, 15 },
- { -74, -73 },
- { -72, -71 },
- { 17, 20 },
- { 18, 19 },
- { -70, -59 },
- { -58, -57 },
- { 21, 22 },
- { -56, -55 },
- { -54, 23 },
- { -53, -52 }
-};
-
-const int8s f_huffman_env_bal_3_0dB[24][2]=
-{
- { -64, 1 },
- { -65, 2 },
- { -63, 3 },
- { -66, 4 },
- { -62, 5 },
- { -61, 6 },
- { -67, 7 },
- { -68, 8 },
- { -60, 9 },
- { 10, 13 },
- { -69, 11 },
- { -59, 12 },
- { -58, -76 },
- { 14, 17 },
- { 15, 16 },
- { -75, -74 },
- { -73, -72 },
- { 18, 21 },
- { 19, 20 },
- { -71, -70 },
- { -57, -56 },
- { 22, 23 },
- { -55, -54 },
- { -53, -52 }
-};
-
-const int8s t_huffman_noise_3_0dB[62][2]=
-{
- { -64, 1 },
- { -63, 2 },
- { -65, 3 },
- { -66, 4 },
- { -62, 5 },
- { -67, 6 },
- { 7, 8 },
- { -61, -68 },
- { 9, 30 },
- { 10, 15 },
- { -60, 11 },
- { -69, 12 },
- { 13, 14 },
- { -59, -53 },
- { -95, -94 },
- { 16, 23 },
- { 17, 20 },
- { 18, 19 },
- { -93, -92 },
- { -91, -90 },
- { 21, 22 },
- { -89, -88 },
- { -87, -86 },
- { 24, 27 },
- { 25, 26 },
- { -85, -84 },
- { -83, -82 },
- { 28, 29 },
- { -81, -80 },
- { -79, -78 },
- { 31, 46 },
- { 32, 39 },
- { 33, 36 },
- { 34, 35 },
- { -77, -76 },
- { -75, -74 },
- { 37, 38 },
- { -73, -72 },
- { -71, -70 },
- { 40, 43 },
- { 41, 42 },
- { -58, -57 },
- { -56, -55 },
- { 44, 45 },
- { -54, -52 },
- { -51, -50 },
- { 47, 54 },
- { 48, 51 },
- { 49, 50 },
- { -49, -48 },
- { -47, -46 },
- { 52, 53 },
- { -45, -44 },
- { -43, -42 },
- { 55, 58 },
- { 56, 57 },
- { -41, -40 },
- { -39, -38 },
- { 59, 60 },
- { -37, -36 },
- { -35, 61 },
- { -34, -33 }
-};
-
-const int8s t_huffman_noise_bal_3_0dB[24][2]=
-{
- { -64, 1 },
- { -65, 2 },
- { -63, 3 },
- { 4, 9 },
- { -66, 5 },
- { -62, 6 },
- { 7, 8 },
- { -76, -75 },
- { -74, -73 },
- { 10, 17 },
- { 11, 14 },
- { 12, 13 },
- { -72, -71 },
- { -70, -69 },
- { 15, 16 },
- { -68, -67 },
- { -61, -60 },
- { 18, 21 },
- { 19, 20 },
- { -59, -58 },
- { -57, -56 },
- { 22, 23 },
- { -55, -54 },
- { -53, -52 }
-};
-
-//---------------------------------------------------------------------------
-// Master frequency band table
-// k0 = lower frequency boundary
-const int8s Aac_k0_offset_16[16]=
-{
- -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7,
-};
-const int8s Aac_k0_offset_22[16]=
-{
- -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13,
-};
-const int8s Aac_k0_offset_24[16]=
-{
- -5, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16,
-};
-const int8s Aac_k0_offset_32[16]=
-{
- -6, -4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16,
-};
-const int8s Aac_k0_offset_64[16]=
-{
- -4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20,
-};
-const int8s Aac_k0_offset_96[16]=
-{
- -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20, 24,
-};
-const int8s* Aac_k0_offset[9]=
-{
- Aac_k0_offset_96, //96000
- Aac_k0_offset_96, //88200
- Aac_k0_offset_64, //64000
- Aac_k0_offset_64, //48000
- Aac_k0_offset_64, //44100
- Aac_k0_offset_32, //32000
- Aac_k0_offset_24, //24000
- Aac_k0_offset_22, //22050
- Aac_k0_offset_16, //16000
-};
-const int8u Aac_k0_startMin[9]=
-{
- 7, 7, 10, 11, 12, 16, 16, 17, 24, //32, 35, 48, 0, 0, 0, 0,
-};
-
-//---------------------------------------------------------------------------
-// Master frequency band table
-// k2 = upper frequency boundary
-const int8u Aac_k2_stopMin[9]=
-{
- 13, 15, 20, 21, 23, 32, 32, 35, 48, //64, 70, 96, 0, 0, 0, 0,
-};
-const int8s Aac_k2_offset[9][14]=
-{
- { 0, 2, 4, 6, 8, 11, 14, 18, 22, 26, 31, 37, 44, 51 },
- { 0, 2, 4, 6, 8, 11, 14, 18, 22, 26, 31, 36, 42, 49 },
- { 0, 2, 4, 6, 8, 11, 14, 17, 21, 25, 29, 34, 39, 44 },
- { 0, 2, 4, 6, 8, 11, 14, 17, 20, 24, 28, 33, 38, 43 },
- { 0, 2, 4, 6, 8, 11, 14, 17, 20, 24, 28, 32, 36, 41 },
- { 0, 2, 4, 6, 8, 10, 12, 14, 17, 20, 23, 26, 29, 32 },
- { 0, 2, 4, 6, 8, 10, 12, 14, 17, 20, 23, 26, 29, 32 },
- { 0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 20, 23, 26, 29 },
- { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16 },
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr_Ps.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr_Ps.cpp
deleted file mode 100644
index 0edff9ce7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr_Ps.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AAC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Aac.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern const char* Aac_audioObjectType(int8u audioObjectType);
-
-//---------------------------------------------------------------------------
-void File_Aac::ps_data(size_t End)
-{
- FILLING_BEGIN();
- if (Infos["Format_Settings_PS"].empty())
- {
- Infos["Format_Profile"]=__T("HE-AACv2");
- Ztring Channels=Infos["Channel(s)"];
- Ztring ChannelPositions=Infos["ChannelPositions"];
- Ztring SamplingRate=Infos["SamplingRate"];
- Infos["Channel(s)"]=__T("2");
- Infos["ChannelPositions"]=__T("Front: L R");
- if (MediaInfoLib::Config.LegacyStreamDisplay_Get())
- {
- Infos["Format_Profile"]+=__T(" / HE-AAC / LC");
- Infos["Channel(s)"]+=__T(" / ")+Channels+__T(" / ")+Channels;
- Infos["ChannelPositions"]+=__T(" / ")+ChannelPositions+__T(" / ")+ChannelPositions;
- Infos["SamplingRate"]=Ztring().From_Number((extension_sampling_frequency_index==(int8u)-1)?(sampling_frequency*2):extension_sampling_frequency, 10)+__T(" / ")+SamplingRate;
- }
- Infos["Format_Settings_PS"]=__T("Yes (Implicit)");
- Ztring Codec=Retrieve(Stream_Audio, StreamPos_Last, Audio_Codec);
- Infos["Codec"]=Ztring().From_Local(Aac_audioObjectType(audioObjectType))+__T("-SBR-PS");
- }
- FILLING_END();
-
- //Parsing
- Element_Begin1("ps_data");
- bool enable_ps_header;
- Get_SB(enable_ps_header, "enable_ps_header");
- if (enable_ps_header)
- {
- //Init
- delete ps; ps=new ps_handler();
-
- Get_SB(ps->enable_iid, "enable_iid");
- if (ps->enable_iid)
- {
- Get_S1 (3, ps->iid_mode, "iid_mode");
- }
- Get_SB(ps->enable_icc, "enable_icc");
- if (ps->enable_icc)
- {
- Get_S1 (3, ps->icc_mode, "icc_mode");
- }
- Get_SB(ps->enable_ext, "enable_ext");
- }
-
- if (ps==NULL)
- {
- if (Data_BS_Remain()>End)
- Skip_BS(Data_BS_Remain()-End, "(Waiting for header)");
- Element_End0();
- return;
- }
-
- //PS not yet parsed
- if (Data_BS_Remain()>End)
- Skip_BS(Data_BS_Remain()-End, "Data");
- Element_End0();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_AAC_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr_Ps.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr_Ps.h
deleted file mode 100644
index fcf61da18..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_GeneralAudio_Sbr_Ps.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Aac_GeneralAudio_Sbr_PsH
-#define MediaInfo_File_Aac_GeneralAudio_Sbr_PsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Aac.h"
-
-
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-typedef float complex_t[2];
-typedef complex_t qmf_t;
-#define MAX_PS_ENVELOPES 5
-#define NO_ALLPASS_LINKS 3
-
-struct hyb_info
-{
- int8u frame_len;
- int8u resolution20[3];
- int8u resolution34[5];
-
- qmf_t *work;
- qmf_t **buffer;
- qmf_t **temp;
-
- hyb_info(int8u numTimeSlotsRate);
- ~hyb_info();
-};
-
-struct ps_info
-{
- //ps_data
- bool enable_ps_header;
- bool enable_iid;
- bool enable_icc;
- bool enable_ext;
- int8u iid_mode;
- int8u nr_iid_par;
- int8u nr_ipdopd_par;
- int8u icc_mode;
- int8u nr_icc_par;
- bool frame_class;
- int8u num_env;
-
- int8u border_position[MAX_PS_ENVELOPES+1];
-
- int8u iid_dt[MAX_PS_ENVELOPES];
- int8u icc_dt[MAX_PS_ENVELOPES];
-
- int8u enable_ipdopd;
- int8u ipd_mode;
- int8u ipd_dt[MAX_PS_ENVELOPES];
- int8u opd_dt[MAX_PS_ENVELOPES];
-
- /* indices */
- int8s iid_index_prev[34];
- int8s icc_index_prev[34];
- int8s ipd_index_prev[17];
- int8s opd_index_prev[17];
- int8s iid_index[MAX_PS_ENVELOPES][34];
- int8s icc_index[MAX_PS_ENVELOPES][34];
- int8s ipd_index[MAX_PS_ENVELOPES][17];
- int8s opd_index[MAX_PS_ENVELOPES][17];
-
- int8s ipd_index_1[17];
- int8s opd_index_1[17];
- int8s ipd_index_2[17];
- int8s opd_index_2[17];
-
- /* ps data was correctly read */
- int8u ps_data_available;
-
- /* a header has been read */
- int8u header_read;
-
- /* hybrid filterbank parameters */
- hyb_info *hyb;
- int8u use34hybrid_bands;
- int8u numTimeSlotsRate;
-
- /**/
- int8u num_groups;
- int8u num_hybrid_groups;
- int8u nr_par_bands;
- int8u nr_allpass_bands;
- int8u decay_cutoff;
-
- int8u *group_border;
- int16u *map_group2bk;
-
- /* filter delay handling */
- int8u saved_delay;
- int8u delay_buf_index_ser[NO_ALLPASS_LINKS];
- int8u num_sample_delay_ser[NO_ALLPASS_LINKS];
- int8u delay_D[64];
- int8u delay_buf_index_delay[64];
-
- complex_t delay_Qmf[14][64]; /* 14 samples delay max, 64 QMF channels */
- complex_t delay_SubQmf[2][32]; /* 2 samples delay max (SubQmf is always allpass filtered) */
- complex_t delay_Qmf_ser[NO_ALLPASS_LINKS][5][64]; /* 5 samples delay max (table 8.34), 64 QMF channels */
- complex_t delay_SubQmf_ser[NO_ALLPASS_LINKS][5][32]; /* 5 samples delay max (table 8.34) */
-
- /* transients */
- float alpha_decay;
- float alpha_smooth;
-
- float P_PeakDecayNrg[34];
- float P_prev[34];
- float P_SmoothPeakDecayDiffNrg_prev[34];
-
- /* mixing and phase */
- complex_t h11_prev[50];
- complex_t h12_prev[50];
- complex_t h21_prev[50];
- complex_t h22_prev[50];
- int8u phase_hist;
- complex_t ipd_prev[20][2];
- complex_t opd_prev[20][2];
-
- ps_info(int8u sr_index, int8u numTimeSlotsRate);
- ~ps_info();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_Main.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_Main.cpp
deleted file mode 100644
index 46cca974e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_Main.cpp
+++ /dev/null
@@ -1,1143 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AAC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Aac.h"
-#if MEDIAINFO_ADVANCED
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#endif //MEDIAINFO_ADVANCED
-#include <cmath>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-extern const int32u Aac_sampling_frequency[13]=
-{96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050,
- 16000, 12000, 11025, 8000, 7350};
-
-//---------------------------------------------------------------------------
-const char* Aac_Adts_ID[]=
-{
- "MPEG-4",
- "MPEG-2",
-};
-
-//---------------------------------------------------------------------------
-const char* Aac_Format(int8u ID)
-{
- switch (ID)
- {
- case 1 :
- case 2 :
- case 3 :
- case 4 : return "AAC";
- case 5 : return "SBR";
- case 6 : return "AAC Scalable";
- case 7 : return "TwinVQ";
- case 8 : return "CELP";
- case 9 : return "HVXC";
- case 12 : return "TTSI";
- case 13 : return "Main synthetic";
- case 14 : return "Wavetable synthesis";
- case 15 : return "General MIDI";
- case 16 : return "Algorithmic Synthesis and Audio FX";
- case 17 :
- case 19 :
- case 20 : return "ER AAC";
- case 21 : return "ER TwinVQ";
- case 22 : return "ER BSAC";
- case 23 : return "ER AAC LD";
- case 24 : return "ER CELP";
- case 25 : return "ER HVXC";
- case 26 : return "ER HILN";
- case 27 : return "ER Parametric";
- case 28 : return "SSC";
- case 29 : return "ParametricStereo";
- case 32 : return "Layer-1";
- case 33 : return "Layer-2";
- case 34 : return "Layer-3";
- case 35 : return "DST";
- case 36 : return "ALS";
- case 37 :
- case 38 : return "SLS";
- case 39 : return "ER AAC ELD";
- case 40 : return "SMR Simple";
- case 41 : return "SMR Main";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Aac_Format_Profile(int8u ID)
-{
- switch (ID)
- {
- case 1 : return "Main";
- case 2 : return "LC";
- case 3 : return "SSR";
- case 4 : return "LTP";
- case 17 : return "LC";
- case 19 : return "LTP";
- case 37 : return "non-core";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Aac_audioObjectType(int8u audioObjectType)
-{
- switch (audioObjectType)
- {
- case 1 : return "AAC Main";
- case 2 : return "AAC LC";
- case 3 : return "AAC SSR";
- case 4 : return "AAC LTP";
- case 5 : return "SBR";
- case 6 : return "AAC Scalable";
- case 7 : return "TwinVQ";
- case 8 : return "CELP";
- case 9 : return "HVXC";
- case 12 : return "TTSI";
- case 13 : return "Main synthetic";
- case 14 : return "Wavetable synthesis";
- case 15 : return "General MIDI";
- case 16 : return "Algorithmic Synthesis and Audio FX";
- case 17 : return "ER AAC LC";
- case 19 : return "ER AAC LTP";
- case 20 : return "ER AAC Scalable";
- case 21 : return "ER TwinVQ";
- case 22 : return "ER BSAC";
- case 23 : return "ER AAC LD";
- case 24 : return "ER CELP";
- case 25 : return "ER HVXC";
- case 26 : return "ER HILN";
- case 27 : return "ER Parametric";
- case 28 : return "SSC";
- case 29 : return "PS";
- case 31 : return "(escape)";
- case 32 : return "Layer-1";
- case 33 : return "Layer-2";
- case 34 : return "Layer-3";
- case 35 : return "DST";
- case 36 : return "ALS";
- case 37 : return "SLS";
- case 38 : return "SLS non-core";
- case 39 : return "ER AAC ELD";
- case 40 : return "SMR Simple";
- case 41 : return "SMR Main";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const int8u Aac_Channels[]=
-{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-const char* Aac_ChannelConfiguration[]=
-{
- "",
- "Front: C",
- "Front: L R",
- "Front: L C R",
- "Front: L C R, Side: C",
- "Front: L C R, Side: L R",
- "Front: L C R, Side: L R, LFE",
- "Front: L C R, Side: L R, Back: L R, LFE",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Aac_ChannelConfiguration2[]=
-{
- "",
- "1/0/0",
- "2/0/0",
- "3/0/0",
- "3/1/0",
- "3/2/0",
- "3/2/0.1",
- "3/2/2.1",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Aac_ChannelLayout[]=
-{
- "",
- "C",
- "L R",
- "C L R",
- "C L R Cs",
- "C L R Ls Rs",
- "C L R Ls Rs LFE",
- "C L R Ls Rs Lrs Rrs LFE",
-};
-
-int8u Aac_AudioSpecificConfig_sampling_frequency_index(const int32u sampling_frequency)
-{
- if (sampling_frequency>=92017) return 0;
- if (sampling_frequency>=75132) return 1;
- if (sampling_frequency>=55426) return 2;
- if (sampling_frequency>=46009) return 3;
- if (sampling_frequency>=37566) return 4;
- if (sampling_frequency>=27713) return 5;
- if (sampling_frequency>=23004) return 6;
- if (sampling_frequency>=18783) return 7;
- if (sampling_frequency>=13856) return 8;
- if (sampling_frequency>=11502) return 9;
- if (sampling_frequency>=9391) return 10;
- return 11;
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::AudioSpecificConfig (size_t End)
-{
- //Parsing
- bool sbrData=false, sbrPresentFlag=false, psData=false, psPresentFlag=false;
- Element_Begin1("AudioSpecificConfig");
- GetAudioObjectType(audioObjectType, "audioObjectType");
- Get_S1 (4, sampling_frequency_index, "samplingFrequencyIndex"); Param_Info1(Aac_sampling_frequency[sampling_frequency_index]);
- if (sampling_frequency_index==0xF)
- {
- Get_S3 (24, sampling_frequency, "samplingFrequency");
- sampling_frequency_index=Aac_AudioSpecificConfig_sampling_frequency_index(sampling_frequency);
- }
- else
- sampling_frequency=Aac_sampling_frequency[sampling_frequency_index];
- Get_S1 (4, channelConfiguration, "channelConfiguration"); Param_Info1(Aac_ChannelConfiguration[channelConfiguration]);
- if (audioObjectType==5 || audioObjectType==29)
- {
- extensionAudioObjectType=5;
- sbrPresentFlag=true;
- if (audioObjectType==29)
- psPresentFlag=true;
- Get_S1 (4, extension_sampling_frequency_index, "extensionSamplingFrequencyIndex"); Param_Info1(Aac_sampling_frequency[extension_sampling_frequency_index]);
- if (extension_sampling_frequency_index==0xF)
- {
- Get_S3 (24, extension_sampling_frequency, "extensionSamplingFrequency");
- sampling_frequency_index=Aac_AudioSpecificConfig_sampling_frequency_index(extension_sampling_frequency);
- }
- else
- extension_sampling_frequency=Aac_sampling_frequency[extension_sampling_frequency_index];
- GetAudioObjectType(audioObjectType, "audioObjectType");
- if (audioObjectType==22) //BSAC
- Skip_S1(4, "extensionChannelConfiguration");
- }
- else
- extensionAudioObjectType=0x00;
-
- switch (audioObjectType)
- {
- case 1:
- case 2:
- case 3:
- case 4:
- case 6:
- case 7:
- case 17:
- case 19:
- case 20:
- case 21:
- case 22:
- case 23:
- GASpecificConfig();
- break;
- case 8:
- CelpSpecificConfig();
- break;
- case 9:
- HvxcSpecificConfig();
- break;
- case 12:
- TTSSpecificConfig();
- break;
- //~ case 13:
- //~ case 14:
- //~ case 15:
- //~ case 16:
- //~ StructuredAudioSpecificConfig();
- //~ break;
- case 24:
- ErrorResilientCelpSpecificConfig();
- break;
- case 25:
- ErrorResilientHvxcSpecificConfig();
- break;
- case 26:
- case 27:
- ParametricSpecificConfig();
- break;
- case 28:
- SSCSpecificConfig();
- break;
- //~ case 30:
- //~ Skip_S1(1, "sacPayloadEmbedding");
- //~ SpatialSpecificConfig(); //ISO/IEC 23003-1
- //~ break;
- case 32:
- case 33:
- case 34:
- MPEG_1_2_SpecificConfig();
- break;
- case 35:
- DSTSpecificConfig();
- break;
- case 36:
- Skip_S1(5, "fillBits");
- ALSSpecificConfig();
- break;
- case 37:
- case 38:
- SLSSpecificConfig();
- break;
- case 39:
- ELDSpecificConfig();
- break;
- //~ case 40:
- //~ case 41:
- //~ SymbolicMusicSpecificConfig(); //ISO/IEC 14496-23
- //~ break;
- default:
- Element_Begin1("not implemented part");
- Skip_BS(Data_BS_Remain()-((End==(size_t)-1)?0:End), "(Not implemented)");
- Element_End0();
- FILLING_BEGIN()
- if (Mode==File_Aac::Mode_ADIF || Mode==File_Aac::Mode_ADTS)
- File__Tags_Helper::Finish();
- else if (Mode==Mode_AudioSpecificConfig)
- File__Analyze::Finish();
- Frame_Count=(size_t)-1; //Forcing not to parse following data anymore (if ParseSpeed==1)
- FILLING_END()
- return;
- }
-
- switch (audioObjectType)
- {
- case 17:
- case 19:
- case 20:
- case 21:
- case 22:
- case 23:
- case 24:
- case 25:
- case 26:
- case 27:
- case 39:
- int8u epConfig;
- Get_S1(2,epConfig, "epConfig");
- if ( epConfig == 2 || epConfig == 3 )
- ErrorProtectionSpecificConfig();
- if ( epConfig == 3 )
- {
- bool directMapping;
- Get_SB(directMapping, "directMapping");
- if ( ! directMapping )
- {
- Element_Begin1("not implemented part");
- Skip_BS(Data_BS_Remain()-((End==(size_t)-1)?0:End), "(Not implemented)");
- Element_End0();
- if (Mode==File_Aac::Mode_ADIF || Mode==File_Aac::Mode_ADTS)
- File__Tags_Helper::Finish();
- else
- {
- if (Mode==Mode_LATM)
- File__Analyze::Accept();
- File__Analyze::Finish();
- }
- Frame_Count=(size_t)-1; //Forcing not to parse following data anymore (if ParseSpeed==1)
- return;
- }
- }
- default : ;
- }
-
- if (extensionAudioObjectType!=5 && End!=(size_t)-1 && Data_BS_Remain()>=End+16)
- {
- int16u syncExtensionType;
- Get_S2(11,syncExtensionType, "syncExtensionType");
- if (syncExtensionType == 0x2b7)
- {
- sbrData=true;
- GetAudioObjectType(extensionAudioObjectType, "extensionAudioObjectType");
- if (extensionAudioObjectType==5 )
- {
- Get_SB(sbrPresentFlag, "sbrPresentFlag");
- if (sbrPresentFlag)
- {
- Get_S1 (4, extension_sampling_frequency_index, "extensionSamplingFrequencyIndex"); Param_Info1(Aac_sampling_frequency[extension_sampling_frequency_index]);
- if (extension_sampling_frequency_index==0xF)
- {
- Get_S3 (24, extension_sampling_frequency, "extensionSamplingFrequency");
- extension_sampling_frequency_index=Aac_AudioSpecificConfig_sampling_frequency_index(extension_sampling_frequency);
- }
- else
- extension_sampling_frequency=Aac_sampling_frequency[extension_sampling_frequency_index];
- if (End!=(size_t)-1 && Data_BS_Remain()>=End+12)
- {
- int16u syncExtensionType;
- Get_S2(11,syncExtensionType, "syncExtensionType");
- if (syncExtensionType == 0x548)
- {
- psData=true;
- Get_SB (psPresentFlag, "psPresentFlag");
- }
- }
- }
- }
- if ( extensionAudioObjectType == 22 )
- {
- Get_SB(sbrPresentFlag, "sbrPresentFlag");
- if (sbrPresentFlag)
- {
- Get_S1 (4, extension_sampling_frequency_index, "extensionSamplingFrequencyIndex"); Param_Info1(Aac_sampling_frequency[extension_sampling_frequency_index]);
- if (extension_sampling_frequency_index==0xF)
- {
- Get_S3 (24, extension_sampling_frequency, "extensionSamplingFrequency");
- extension_sampling_frequency_index=Aac_AudioSpecificConfig_sampling_frequency_index(extension_sampling_frequency);
- }
- else
- extension_sampling_frequency=Aac_sampling_frequency[extension_sampling_frequency_index];
- }
- Skip_S1(4, "extensionChannelConfiguration");
- }
- }
- }
- Element_End0();
- if (Data_BS_Remain()>End)
- {
- int8u LastByte=0xFF;
- if (Data_BS_Remain()-End<8)
- Peek_S1((int8u)(Data_BS_Remain()-End), LastByte);
- Skip_BS(Data_BS_Remain()-End, LastByte?"Unknown":"Padding");
- }
-
- FILLING_BEGIN();
- AudioSpecificConfig_OutOfBand (sampling_frequency, audioObjectType, sbrData, psData, sbrPresentFlag, psPresentFlag);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::AudioSpecificConfig_OutOfBand (int32u sampling_frequency_, int8u audioObjectType_, bool sbrData, bool psData, bool sbrPresentFlag, bool psPresentFlag)
-{
- if (sampling_frequency==(int32u)-1 && sampling_frequency_) //Only if not yet set
- {
- sampling_frequency=sampling_frequency_;
- sampling_frequency_index=Aac_AudioSpecificConfig_sampling_frequency_index(sampling_frequency);
- }
-
- if (audioObjectType_==(int8u)-1)
- {
- if (audioObjectType==(int8u)-1)
- return; //All data is not yet available
- if (Infos.find("Format_Settings_SBR")!=Infos.end())
- {
- sbrData=true;
- sbrPresentFlag=Infos["Format_Settings_SBR"].find(__T("Yes"))!=string::npos;
- }
- else
- {
- sbrData=false;
- sbrPresentFlag=false;
- }
- if (Infos.find("Format_Settings_PS")!=Infos.end())
- {
- psData=true;
- psPresentFlag=Infos["Format_Settings_PS"].find(__T("Yes"))!=string::npos;
- }
- else
- {
- psData=false;
- psPresentFlag=false;
- }
- }
- else
- audioObjectType=audioObjectType_;
-
- if (sampling_frequency)
- Infos["SamplingRate"].From_Number(sampling_frequency);
- Infos["Format"].From_Local(Aac_Format(audioObjectType));
- Infos["Format_Profile"].From_Local(Aac_Format_Profile(audioObjectType));
- Infos["Codec"].From_Local(Aac_audioObjectType(audioObjectType));
- if (channelConfiguration && channelConfiguration<8)
- {
- Infos["Channel(s)"].From_Number(Aac_Channels[channelConfiguration]);
- Infos["ChannelPositions"].From_Local(Aac_ChannelConfiguration[channelConfiguration]);
- Infos["ChannelPositions/String2"].From_Local(Aac_ChannelConfiguration2[channelConfiguration]);
- Infos["ChannelLayout"].From_Local(Aac_ChannelLayout[channelConfiguration]);
- }
-
- if (sbrPresentFlag || !Infos["Format_Settings_SBR"].empty())
- {
- Infos["Format_Profile"]=__T("HE-AAC");
- Ztring SamplingRate_Previous=Infos["SamplingRate"];
- int32u SamplingRate=(extension_sampling_frequency_index==(int8u)-1)?(sampling_frequency*2):extension_sampling_frequency;
- if (SamplingRate)
- {
- Infos["SamplingRate"].From_Number(SamplingRate, 10);
- if (MediaInfoLib::Config.LegacyStreamDisplay_Get())
- {
- Infos["Format_Profile"]+=__T(" / LC");
- Infos["SamplingRate"]+=__T(" / ")+SamplingRate_Previous;
- }
- }
- Infos["Format_Settings_SBR"]=__T("Yes (Implicit)");
- Infos["Codec"]=Ztring().From_Local(Aac_audioObjectType(audioObjectType))+__T("-SBR");
- }
- else if (sbrData)
- Infos["Format_Settings_SBR"]=__T("No (Explicit)");
-
- if (psPresentFlag || !Infos["Format_Settings_PS"].empty())
- {
- Infos["Format_Profile"]=__T("HE-AACv2");
- Ztring Channels=Infos["Channel(s)"];
- Ztring ChannelPositions=Infos["ChannelPositions"];
- Ztring SamplingRate_Previous=Infos["SamplingRate"];
- Infos["Channel(s)"]=__T("2");
- Infos["ChannelPositions"]=__T("Front: L R");
- if (MediaInfoLib::Config.LegacyStreamDisplay_Get())
- {
- Infos["Format_Profile"]+=__T(" / HE-AAC / LC");
- Infos["Channel(s)"]+=__T(" / ")+Channels+__T(" / ")+Channels;
- Infos["ChannelPositions"]+=__T(" / ")+ChannelPositions+__T(" / ")+ChannelPositions;
- int32u SamplingRate=(extension_sampling_frequency_index==(int8u)-1)?(sampling_frequency*2):extension_sampling_frequency;
- if (SamplingRate)
- Infos["SamplingRate"]=Ztring().From_Number(SamplingRate, 10)+__T(" / ")+SamplingRate_Previous;
- }
- Infos["Format_Settings_PS"]=__T("Yes (Implicit)");
- if (StreamPos_Last!=(size_t)-1)
- {
- Ztring Codec=Retrieve(Stream_Audio, StreamPos_Last, Audio_Codec);
- Infos["Codec"]=Ztring().From_Local(Aac_audioObjectType(audioObjectType))+__T("-SBR-PS");
- }
- }
- else if (psData)
- Infos["Format_Settings_PS"]=__T("No (Explicit)");
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::GetAudioObjectType(int8u &ObjectType, const char* Name)
-{
- Element_Begin1(Name);
- Get_S1(5, ObjectType, "audioObjectType");
- if (ObjectType==31)
- {
- Get_S1(6, ObjectType, "audioObjectTypeExt");
- ObjectType+=32;
- }
- Element_Info1(ObjectType); Element_Info1(Aac_Format_Profile(ObjectType));
- Element_End0();
-}
-
-//***************************************************************************
-// Elements - Multiplex layer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::AudioMuxElement()
-{
- Element_Begin1("AudioMuxElement");
- if (muxConfigPresent)
- {
- bool useSameStreamMux;
- Get_SB (useSameStreamMux, "useSameStreamMux");
- if (!useSameStreamMux)
- StreamMuxConfig();
- }
- if (sampling_frequency_index==(int8u)-1) //No previous config
- {
- CanFill=false;
- Skip_BS(Data_BS_Remain(), "(Waiting for configuration)");
- return;
- }
- if (audioMuxVersionA==0)
- {
- for (int8u i=0; i<=numSubFrames; i++)
- {
- PayloadLengthInfo();
- PayloadMux();
- }
- if (otherDataPresent)
- {
- for(int32u i=0; i<otherDataLenBits; i++)
- Skip_SB( "otherDataBit");
- }
- }
- else
- {
- Element_Begin1("(not implemented)");
- Skip_BS(Data_BS_Remain(), "(not implemented)");
- Element_End0();
- }
- if (Data_BS_Remain()%8)
- Skip_S1(Data_BS_Remain()%8, "byte_alignment");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::StreamMuxConfig()
-{
- Element_Begin1("StreamMuxConfig");
-
- bool audioMuxVersion;
- Get_SB (audioMuxVersion, "audioMuxVersion");
- if (audioMuxVersion)
- Get_SB (audioMuxVersionA, "audioMuxVersionA");
- else
- audioMuxVersionA=false;
-
- if (!audioMuxVersionA)
- {
- if (audioMuxVersion==1)
- {
- Element_Begin1("(not implemented)");
- Skip_BS(Data_BS_Remain(), "(not implemented)");
- Element_End0();
- //taraBufferFullness=LatmGetValue();
- }
-
- int8u streamCnt = 0;
- bool useSameConfig;
-
- Get_SB (allStreamsSameTimeFraming, "allStreamsSameTimeFraming");
- Get_S1 (6, numSubFrames, "numSubFrames");
- Get_S1 (4, numProgram, "numProgram");
-
- for (int8u prog=0; prog<=numProgram; prog++)
- {
- Get_S1(3,numLayer, "numLayer");
- for (int8u lay=0; lay<=numLayer; lay++)
- {
- progSIndx[streamCnt]=prog;
- laySIndx[streamCnt]=lay;
- streamID[prog][lay]=streamCnt++;
- if (prog==0 && lay==0)
- useSameConfig=0;
- else
- Get_SB(useSameConfig, "useSameConfig");
-
- if (!useSameConfig)
- {
- if (audioMuxVersion==0)
- AudioSpecificConfig();
- else
- {
- int ascLen=LatmGetValue();
- AudioSpecificConfig(Data_BS_Remain()-ascLen);
- }
- }
-
- Get_S1(3,frameLengthType[streamID[prog][lay]], "frameLengthType[streamID[prog][lay]]");
- switch(frameLengthType[streamID[prog][lay]])
- {
- case 0 :
- Skip_S1(8, "latmBufferFullness[streamID[prog][lay]]");
- if(!allStreamsSameTimeFraming)
- {
- Element_Begin1("(not implemented)");
- Skip_BS(Data_BS_Remain(), "(not implemented)");
- Element_End0();
- }
- //~ if ((!allStreamsSameTimeFraming) &&
- //~ (AudioObjectType[lay] == 6 || AudioObjectType[lay] == 20) &&
- //~ (AudioObjectType[lay-1] == 8 || AudioObjectType[lay-1] == 24))
- //~ {
- //~ Skip_S1(6, "coreFrameOffset");
- //~ }
- break;
- case 1 :
- Get_S2(9,frameLength[streamID[prog][lay]],"frameLength[streamID[prog][lay]]");
- break;
- case 3 :
- case 4 :
- case 5 :
- Skip_S1(6, "CELPframeLengthTableIndex[streamID[prog][lay]]");
- break;
- case 6 :
- case 7 :
- Skip_S1(1, "HVXCframeLengthTableIndex[streamID[prog][lay]]");
- break;
- default :
- Element_Begin1("(not implemented)");
- Skip_BS(Data_BS_Remain(), "(not implemented)");
- Element_End0();
- }
- }
- }
- bool crcCheckPresent;
- Get_SB (otherDataPresent, "otherDataPresent");
- if (otherDataPresent)
- {
- if (audioMuxVersion==1)
- otherDataLenBits=LatmGetValue();
- else
- {
- otherDataLenBits=0;
- bool otherDataLenEsc;
- do
- {
- int8u otherDataLenTmp;
- otherDataLenBits<<=8;
- Get_SB( otherDataLenEsc, "otherDataLenEsc");
- Get_S1(8, otherDataLenTmp, "otherDataLenTmp");
- otherDataLenBits+=otherDataLenTmp;
- }
- while (otherDataLenEsc);
- }
- }
- Get_SB(crcCheckPresent, "crcCheckPresent");
- if(crcCheckPresent)
- Skip_S1(8, "crcCheckSum");
- }
- else
- {
- Element_Begin1("(not implemented)");
- Skip_BS(Data_BS_Remain(), "(not implemented)");
- Element_End0();
- }
- Element_End0();
-
- FILLING_BEGIN();
- CanFill=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-int32u File_Aac::LatmGetValue()
-{
- Element_Begin1("LatmGetValue");
- int8u valueTmp, bytesForValue;
- Get_S1(2, bytesForValue, "bytesForValue");
- int32u value=0;
- for (int8u i=0; i<=bytesForValue; i++)
- {
- value<<=8;
- Get_S1(8, valueTmp, "valueTmp");
- value+=valueTmp;
- }
- Element_End0();
- return value;
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::PayloadLengthInfo()
-{
- Element_Begin1("PayloadLengthInfo");
- int8u tmp;
- if (allStreamsSameTimeFraming)
- {
- for (int8u prog=0; prog<=numProgram; prog++)
- {
- for (int8u lay=0; lay<=numLayer; lay++)
- {
- if (frameLengthType[streamID[prog][lay]]==0)
- {
- MuxSlotLengthBytes[streamID[prog][lay]]=0;
- do
- {
- Get_S1(8, tmp, "tmp");
- MuxSlotLengthBytes[streamID[prog][lay]]+=tmp;
- }
- while(tmp==255);
- }
- else if (frameLengthType[streamID[prog][lay]]==3
- || frameLengthType[streamID[prog][lay]]==5
- || frameLengthType[streamID[prog][lay]]==7)
- {
- Skip_S1(2, "MuxSlotLengthCoded[streamID[prog][lay]]");
- }
- }
- }
- }
- else
- {
- int8u streamIndx;
- int8u prog, lay;
- Get_S1(4, numChunk, "numChunk");
- for (int chunkCnt=0; chunkCnt<=numChunk; chunkCnt++)
- {
- Get_S1(4,streamIndx, "streamIndx");
- prog=progCIndx[chunkCnt]=progSIndx[streamIndx];
- lay=layCIndx[chunkCnt]=laySIndx[streamIndx];
- if (frameLengthType[streamID[prog][lay]]==0)
- {
- MuxSlotLengthBytes[streamID[prog][lay]]=0;
- do
- {
- Get_S1(8, tmp, "tmp");
- MuxSlotLengthBytes[streamID[prog][lay]]+=tmp;
- }
- while(tmp==255);
- Skip_SB( "AuEndFlag[streamID[prog][lay]]");
- }
- else if (frameLengthType[streamID[prog][lay]]==3
- || frameLengthType[streamID[prog][lay]]==5
- || frameLengthType[streamID[prog][lay]]==7)
- {
- Skip_S1(2, "MuxSlotLengthCoded[streamID[prog][lay]]");
- }
- }
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::PayloadMux()
-{
- Element_Begin1("PayloadMux");
- if (allStreamsSameTimeFraming)
- {
- for (int8u prog=0; prog<=numProgram; prog++)
- for (int8u lay=0; lay<=numLayer; lay++)
- {
- switch(frameLengthType[streamID[prog][lay]])
- {
- case 0 :
- if (CA_system_ID_MustSkipSlices)
- {
- //Encryption management
- Skip_BS(8*MuxSlotLengthBytes[streamID[prog][lay]], "Encrypted payload[streamID[prog][lay]]");
- Frame_Count_Valid=0;
- }
- else
- raw_data_block();
- break;
- case 1 :
- Skip_BS(8 * (frameLength[streamID[prog][lay]] + 20),"payload[streamID[prog][lay]]");
- break;
- default:
- Element_Begin1("(not implemented)");
- Skip_BS(Data_BS_Remain(), "(not implemented)");
- Element_End0();
- }
- }
- }
- else
- {
- for (int8u chunkCnt=0; chunkCnt<=numChunk; chunkCnt++)
- {
- int8u prog=progCIndx[chunkCnt];
- int8u lay=layCIndx[chunkCnt];
- switch(frameLengthType[streamID[prog][lay]])
- {
- case 0 :
- raw_data_block(); //Skip_BS(MuxSlotLengthBytes[streamID[prog][lay]], "payload[streamID[prog][lay]]");
- break;
- case 1 :
- Skip_BS(8*(frameLength[streamID[prog][lay]]+20), "payload[streamID[prog][lay]]");
- break;
- default:
- Element_Begin1("not implemented");
- Element_End0();
- }
- }
- }
- Element_End0();
-}
-
-//***************************************************************************
-// Elements - Error protection
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::ErrorProtectionSpecificConfig()
-{
- Element_Begin1("ErrorProtectionSpecificConfig");
- int8u number_of_predefined_set,number_of_concatenated_frame,interleave_type;
- Get_S1(8,number_of_predefined_set, "number_of_predefined_set");
- Get_S1(2,interleave_type, "interleave_type");
- Skip_S1(3, "bit_stuffing");
- Get_S1(3,number_of_concatenated_frame, "number_of_concatenated_frame");
- for (int8u i = 0; i < number_of_predefined_set; i++ )
- {
- int8u number_of_class;
- Get_S1(6,number_of_class, "number_of_class[i]");
- for (int8u j = 0; j < number_of_class; j++)
- {
- bool length_escape,fec_type,rate_escape,crclen_escape;
- Get_SB(length_escape, "length_escape[i][j]");
- Get_SB(rate_escape, "rate_escape[i][j]");
- Get_SB(crclen_escape, "crclen_escape[i][j]");
- if (number_of_concatenated_frame != 1)
- Skip_SB( "concatenate_flag[i][j]");
- Get_SB(fec_type, "fec_type[i][j]");
- if(!fec_type)
- Skip_SB( "termination_switch[i][j]");
- if (interleave_type == 2)
- Skip_S1(2, "interleave_switch[i][j]");
- Skip_SB( "class_optional");
- if (length_escape)
- {
- /* ESC */
- Skip_S1(4, "number_of_bits_for_length[i][j]");
- }
- else
- {
- Skip_S2(16, "class_length[i][j]");
- }
- if (!rate_escape)
- { /* not ESC */
- if(fec_type)
- {
- Skip_S1(7, "class_rate[i][j]");
- }
- else
- {
- Skip_S1(5, "class_rate[i][j]");
- }
- }
- if (!crclen_escape)
- {
- /* not ESC */
- Skip_S1(5, "class_crclen[i][j]");
- }
- }
- bool class_reordered_output;
- Get_SB(class_reordered_output, "class_reordered_output");
- if ( class_reordered_output )
- {
- for (int j = 0; j < number_of_class; j++ )
- {
- Skip_S1(6, "class_output_order[i][j]");
- }
- }
- }
- bool header_protection;
- Get_SB(header_protection, "header_protection");
- if (header_protection)
- {
- Skip_S1(5, "header_rate");
- Skip_S1(5, "header_crclen");
- }
- Element_End0();
-}
-
-//***************************************************************************
-// Elements - MPEG-2 AAC Audio_Data_Interchange_Format, ADIF
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::adif_header()
-{
- //Parsing
- int32u bitrate;
- int8u num_program_config_elements;
- bool bitstream_type;
- Skip_C4( "adif_id");
- BS_Begin();
- TEST_SB_SKIP( "copyright_id_present");
- Skip_S4(32, "copyright_id");
- Skip_S4(32, "copyright_id");
- Skip_S4( 8, "copyright_id");
- TEST_SB_END();
- Skip_SB( "original_copy");
- Skip_SB( "home");
- Get_SB ( bitstream_type, "bitstream_type"); Param_Info1(bitstream_type?"VBR":"CBR");
- Get_S3 (23, bitrate, "bitrate");
- Get_S1 ( 4, num_program_config_elements, "num_program_config_elements");
- if (!bitstream_type)
- Skip_S3(20, "adif_buffer_fullness");
- for (int8u Pos=0; Pos<num_program_config_elements+1; Pos++)
- program_config_element();
- BS_End();
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Format, "ADIF", Unlimited, true, true);
- Fill(Stream_General, 0, General_HeaderSize, Element_Size);
- Fill(Stream_General, 0, General_OverallBitRate_Mode, bitstream_type?"VBR":"CBR");
-
- for (size_t StreamPos=0; StreamPos<Count_Get(Stream_Audio); StreamPos++)
- Fill(Stream_Audio, StreamPos, Audio_MuxingMode, "ADIF");
- if (num_program_config_elements==0) //Easy to fill only if 1 audio stream
- {
- Infos["BitRate_Mode"].From_Local(bitstream_type?"VBR":"CBR");
- if (bitrate>0)
- Infos[bitstream_type?"BitRate_Maximum":"BitRate"].From_Number(bitrate);
- }
-
- //No more need data
- File__Tags_Helper::Finish("ADIF");
- FILLING_END();
-}
-
-//***************************************************************************
-// Elements - Audio_Data_Transport_Stream frame, ADTS
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::adts_frame()
-{
- //Parsing
- adts_fixed_header();
- adts_variable_header();
-
- //Encryption management
- if (CA_system_ID_MustSkipSlices)
- {
- //Is not decodable
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "Encrypted data");
- Frame_Count_Valid=0;
- return;
- }
-
- if (num_raw_data_blocks==0)
- {
- if (!protection_absent)
- {
- Element_Begin1("adts_error_check");
- Skip_S2(16, "crc_check");
- Element_End0();
- }
- raw_data_block();
- }
- else
- {
- Element_Begin1("adts_header_error_check");
- if (!protection_absent)
- for (int i=1; i<=num_raw_data_blocks; i++)
- Skip_S2(16, "raw_data_block_position(i)");
- Skip_S2(16, "crc_check");
- Element_End0();
-
- for(int i=0; i<=num_raw_data_blocks; i++)
- {
- raw_data_block();
- if (!protection_absent)
- {
- Element_Begin1("adts_raw_data_block_error_check");
- Skip_BS(16, "crc_check");
- Element_End0();
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::adts_fixed_header()
-{
- //Parsing
- bool id;
- Element_Begin1("adts_fixed_header");
- Skip_BS(12, "syncword");
- Get_SB ( id, "id"); Param_Info1(Aac_Adts_ID[id]);
- Skip_BS( 2, "layer");
- Get_SB ( protection_absent, "protection_absent");
- Get_S1 ( 2, audioObjectType, "profile_ObjectType"); audioObjectType++; Param_Info1(Aac_audioObjectType(audioObjectType));
- Get_S1 ( 4, sampling_frequency_index, "sampling_frequency_index"); Param_Info2(Aac_sampling_frequency[sampling_frequency_index], " Hz");
- sampling_frequency=Aac_sampling_frequency[sampling_frequency_index];
- Skip_SB( "private");
- Get_S1 ( 3, channelConfiguration, "channel_configuration");
- Skip_SB( "original");
- Skip_SB( "home");
- Element_End0();
-
- FILLING_BEGIN();
- if (Infos["Format"].empty())
- {
- Infos_General["Format"].From_Local("ADTS");
-
- Infos["Format"].From_Local("AAC");
- Infos["Format_Version"].From_Local(id?"Version 2":"Version 4");
- Infos["Format_Profile"].From_Local(Aac_Format_Profile(audioObjectType));
- Infos["Codec"].From_Local(Aac_audioObjectType(audioObjectType));
- if (Aac_sampling_frequency[sampling_frequency_index])
- Infos["SamplingRate"].From_Number(Aac_sampling_frequency[sampling_frequency_index]);
- Infos["Channel(s)"].From_Number(channelConfiguration);
- Infos["ChannelPositions"].From_Local(Aac_ChannelConfiguration[channelConfiguration]);
- Infos["ChannelPositions/String2"].From_Local(Aac_ChannelConfiguration2[channelConfiguration]);
- Infos["ChannelLayout"].From_Local(Aac_ChannelLayout[channelConfiguration]);
- if (IsSub)
- Infos["MuxingMode"].From_Local("ADTS");
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::adts_variable_header()
-{
- //Parsing
- int16u aac_frame_length, adts_buffer_fullness;
- Element_Begin1("adts_variable_header");
- Skip_SB( "copyright_id");
- Skip_SB( "copyright_id_start");
- Get_S2 (13, aac_frame_length, "aac_frame_length");
- Get_S2 (11, adts_buffer_fullness, "adts_buffer_fullness"); Param_Info1(adts_buffer_fullness==0x7FF?"VBR":"CBR");
- Get_S1 ( 2, num_raw_data_blocks, "num_raw_data_blocks");
- Element_End0();
-
- FILLING_BEGIN();
- if (adts_buffer_fullness==0x7FF)
- adts_buffer_fullness=true;
- #if MEDIAINFO_ADVANCED
- aac_frame_length_Total+=aac_frame_length;
- #endif //MEDIAINFO_ADVANCED
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_AAC_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_Others.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_Others.cpp
deleted file mode 100644
index f964d6319..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Aac_Others.cpp
+++ /dev/null
@@ -1,459 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AAC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Aac.h"
-#if defined(MEDIAINFO_RIFF_YES)
- #include "MediaInfo/Multiple/File_Riff.h"
-#endif
-#include <cmath>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Speech coding (HVXC)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::HvxcSpecificConfig()
-{
- Element_Begin1("HvxcSpecificConfig");
- bool isBaseLayer;
- Get_SB(isBaseLayer, "isBaseLayer");
- if (isBaseLayer)
- HVXCconfig();
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::HVXCconfig()
-{
- Element_Begin1("HVXCconfig");
- Skip_SB( "HVXCvarMode");
- Skip_S1(2, "HVXCrateMode");
- Skip_SB( "extensionFlag");
- //~ if (extensionFlag) {
- /*< to be defined in MPEG-4 Version 2 >*/
- //~ }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::ErrorResilientHvxcSpecificConfig() {
- Element_Begin1("ErrorResilientHvxcSpecificConfig");
- bool isBaseLayer;
- Get_SB(isBaseLayer,"isBaseLayer");
- if (isBaseLayer) {
- ErHVXCconfig();
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::ErHVXCconfig()
-{
- Element_Begin1("ErHVXCconfig");
- bool extensionFlag;
- Skip_SB( "HVXCvarMode");
- Skip_S1(2, "HVXCrateMode");
- Get_SB (extensionFlag, "extensionFlag");
-
- if (extensionFlag) {
- Skip_SB( "var_ScalableFlag");
- }
- Element_End0();
-}
-
-//***************************************************************************
-// Speech Coding (CELP)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::CelpSpecificConfig ()
-{
- Element_Begin1("CelpSpecificConfig");
- bool isBaseLayer;
- Get_SB(isBaseLayer, "isBaseLayer");
- if (isBaseLayer)
- {
- CelpHeader ();
- }
- else
- {
- bool isBWSLayer;
- Get_SB(isBWSLayer, "isBWSLayer");
- if (isBWSLayer)
- {
- //~ CelpBWSenhHeader ()
- //~ {
- Skip_S1(2, "BWS_configuration");
- //~ }
-
- }
- else
- {
- Skip_S1(2, "CELP-BRS-id");
- }
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::CelpHeader ()
-{
- Element_Begin1("CelpHeader");
- bool ExcitationMode;
- Get_SB(ExcitationMode, "ExcitationMode");
- Skip_SB( "SampleRateMode");
- Skip_SB( "FineRateControl");
- if (ExcitationMode == 1/*RPE*/)
- {
- Skip_S1(3, "RPE_Configuration");
- }
- if (ExcitationMode == 0/*MPE*/)
- {
- Skip_S1(5, "MPE_Configuration");
- Skip_S1(2, "NumEnhLayers");
- Skip_SB( "BandwidthScalabilityMode");
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::ErrorResilientCelpSpecificConfig ()
-{
- Element_Begin1("ErrorResilientCelpSpecificConfig");
- bool isBaseLayer;
- Get_SB(isBaseLayer, "isBaseLayer");
- if (isBaseLayer)
- {
- ER_SC_CelpHeader ();
- }
- else
- {
- bool isBWSLayer;
- Get_SB(isBWSLayer, "isBWSLayer");
- if (isBWSLayer)
- {
- //~ CelpBWSenhHeader ()
- //~ {
- Skip_S1(2, "BWS_configuration");
- //~ }
-
- }
- else
- {
- Skip_S1(2, "CELP-BRS-id");
- }
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::ER_SC_CelpHeader ()
-{
- Element_Begin1("ER_SC_CelpHeader");
- bool ExcitationMode;
- Get_SB(ExcitationMode, "ExcitationMode");
- Skip_SB( "SampleRateMode");
- Skip_SB( "FineRateControl");
- Skip_SB( "SilenceCompression");
-
- if (ExcitationMode == 1/*RPE*/) {
- Skip_S1(3, "RPE_Configuration");
- }
- if (ExcitationMode == 0/*MPE*/) {
- Skip_S1(5, "MPE_Configuration");
- Skip_S1(2, "NumEnhLayers");
- Skip_SB( "BandwidthScalabilityMode");
- }
- Element_End0();
-}
-
-//***************************************************************************
-// Structured Audio (SA)
-//***************************************************************************
-
-//***************************************************************************
-// Text to Speech Interface (TTSI)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::TTSSpecificConfig()
-{
- Element_Begin1("TTSSpecificConfig");
- //~ TTS_Sequence()
- //~ {
- Skip_S1(5, "TTS_Sequence_ID");
- Skip_BS(18, "Language_Code");
- Skip_SB( "Gender_Enable");
- Skip_SB( "Age_Enable");
- Skip_SB( "Speech_Rate_Enable");
- Skip_SB( "Prosody_Enable");
- Skip_SB( "Video_Enable");
- Skip_SB( "Lip_Shape_Enable");
- Skip_SB( "Trick_Mode_Enable");
- //~ }
- Element_End0();
-}
-
-//***************************************************************************
-// Parametric Audio (HILN)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::HILNconfig()
-{
- Element_Begin1("HILNconfig");
- Skip_SB( "HILNquantMode");
- Skip_S1(8, "HILNmaxNumLine");
- Skip_S1(4, "HILNsampleRateCode");
- Skip_S2(12, "HILNframeLength");
- Skip_S1(2, "HILNcontMode");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::HILNenexConfig()
-{
- Element_Begin1("HILNenexConfig");
- bool HILNenhaLayer;
- Get_SB(HILNenhaLayer, "HILNenhaLayer");
- if (HILNenhaLayer)
- Skip_S1(2, "HILNenhaQuantMode");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::ParametricSpecificConfig()
-{
- Element_Begin1("ParametricSpecificConfig");
- bool isBaseLayer;
- Get_SB(isBaseLayer, "isBaseLayer");
- if (isBaseLayer)
- PARAconfig();
- else
- HILNenexConfig();
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Aac::PARAconfig()
-{
- Element_Begin1("PARAconfig");
- int8u PARAmode;
- Get_S1(2,PARAmode, "PARAmode");
- if (PARAmode != 1)
- ErHVXCconfig();
- if (PARAmode != 0)
- HILNconfig();
- bool PARAextensionFlag;
- Get_SB(PARAextensionFlag, "PARAextensionFlag");
- if (PARAextensionFlag) {
- /* to be defined in MPEG-4 Phase 3 */
- }
- Element_End0();
-}
-
-//***************************************************************************
-// Technical description of parametric coding for high quality audio
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::SSCSpecificConfig ()
-{
- Element_Begin1("SSCSpecificConfig");
- Skip_S1(2,"decoder_level");
- Skip_S1(4,"update_rate");
- Skip_S1(2,"synthesis_method");
- if (channelConfiguration != 1)
- {
- int8u mode_ext;
- Get_S1(2,mode_ext,"mode_ext");
- if ((channelConfiguration == 2) && (mode_ext == 1))
- {
- /*reserved*/
- }
- }
- Element_End0();
-}
-
-//***************************************************************************
-// MPEG-1/2 Audio
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::MPEG_1_2_SpecificConfig()
-{
- Element_Begin1("MPEG_1_2_SpecificConfig");
- Skip_SB( "extension");
- Element_End0();
-}
-
-//***************************************************************************
-// Technical description of lossless coding of oversampled audio
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::DSTSpecificConfig()
-{
- Element_Begin1("DSTSpecificConfig");
- Skip_SB("DSDDST_Coded");
- Skip_S2(14,"N_Channels");
- Skip_SB("reserved");
- Element_End0();
-}
-
-//***************************************************************************
-// Audio Lossless
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::ALSSpecificConfig()
-{
- //Not in spec, but something weird in the example I have
- int32u Junk;
- while (Data_BS_Remain())
- {
- Peek_S4(32, Junk);
- if (Junk!=0x414C5300)
- {
- Skip_SB( "Unknown");
- }
- else
- break;
- }
- if (Data_BS_Remain()==0)
- return; //There is a problem
-
- Element_Begin1("ALSSpecificConfig");
- bool chan_config,chan_sort,crc_enabled,aux_data_enabled;
- int32u samp_freq, samples;
- int16u channels,frame_length;
- int8u ra_flag,random_access, file_type;
- Skip_BS(32,"als_id");
- Get_BS (32, samp_freq, "samp_freq");
- Get_BS (32, samples, "samples");
- Get_S2 (16, channels, "channels"); Param_Info2(channels+1, " channel(s)");
- Get_S1 (3, file_type, "file_type");
- Skip_S1(3,"resolution");
- Skip_SB("floating");
- Skip_SB("msb_first");
- Get_S2 (16,frame_length,"frame_length");
- Get_S1 (8,random_access,"random_access");
- Get_S1 (2,ra_flag,"ra_flag");
- Skip_SB("adapt_order");
- Skip_S1(2,"coef_table");
- Skip_SB("long_term_prediction");
- Skip_S2(10,"max_order");
- Skip_S1(2,"block_switching");
- Skip_SB("bgmc_mode");
- Skip_SB("sb_part");
- Skip_SB("joint_stereo");
- Skip_SB("mc_coding");
- Get_SB (chan_config,"chan_config");
- Get_SB (chan_sort,"chan_sort");
- Get_SB (crc_enabled,"crc_enabled");
- Skip_SB("RLSLMS");
- Skip_BS(5,"(reserved)");
- Get_SB (aux_data_enabled,"aux_data_enabled");
- if (chan_config)
- Skip_S2(16,"chan_config_info");
- if (chan_sort)
- {
- int16u ChBits=(int16u)ceil(log((double)(channels+1))/log((double)2));
- for (int8u c=0; c<=channels; c++)
- Skip_BS(ChBits, "chan_pos[c]");
- }
- if(Data_BS_Remain()%8)
- Skip_S1(Data_BS_Remain()%8, "byte_align");
- BS_End();
- int32u header_size,trailer_size;
- Get_B4(header_size, "header_size");
- Get_B4(trailer_size, "trailer_size");
- #ifdef MEDIAINFO_RIFF_YES
- if (file_type==1) //WAVE file
- {
- Element_Begin1("orig_header");
- File_Riff MI;
- Open_Buffer_Init(&MI);
- Open_Buffer_Continue(&MI, Buffer+Buffer_Offset+(size_t)Element_Offset, header_size);
- Element_Offset+=header_size;
- File__Analyze::Finish(&MI); //No merge of data, only for trace information, because this is the data about the decoded stream, not the encoded stream
- Element_End0();
- }
- else
- #endif //MEDIAINFO_RIFF_YES
- Skip_XX(header_size, "orig_header[]");
-
- Skip_XX(trailer_size, "orig_trailer[]");
- if (crc_enabled)
- Skip_B4( "crc");
- if ((ra_flag == 2) && (random_access > 0))
- for (int32u f=0; f<((samples-1)/(frame_length+1))+1; f++)
- Skip_B4( "ra_unit_size[f]");
- if (aux_data_enabled)
- {
- int32u aux_size;
- Get_B4(aux_size, "aux_size");
- Skip_XX(aux_size, "aux_data[]");
- }
- Element_End0();
- BS_Begin(); //To be in sync with other objectTypes
-
- FILLING_BEGIN();
- //Filling
- File__Analyze::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, channels+1);
-
- //Forcing default confignuration (something weird in the example I have)
- channelConfiguration=0;
- sampling_frequency_index=(int8u)-1;
- sampling_frequency=samp_freq;
- FILLING_END();
-}
-
-//***************************************************************************
-// Scalable lossless
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aac::SLSSpecificConfig()
-{
- Element_Begin1("SLSSpecificConfig");
- Skip_S1(3,"pcmWordLength");
- Skip_SB("aac_core_present");
- Skip_SB("lle_main_stream");
- Skip_SB("reserved_bit");
- Skip_S1(3,"frameLength");
- if (!channelConfiguration)
- program_config_element();
- Element_End0();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_AAC_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ac3.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ac3.cpp
deleted file mode 100644
index 94830c68d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ac3.cpp
+++ /dev/null
@@ -1,2483 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos (Common)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AC3_YES) || defined(MEDIAINFO_DVDV_YES) || defined(MEDIAINFO_MPEGPS_YES) || defined(MEDIAINFO_MPEGTS_YES)
-//---------------------------------------------------------------------------
-
-#include "ZenLib/Conf.h"
-using namespace ZenLib;
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern const int32u AC3_SamplingRate[]=
-{ 48000, 44100, 32000, 0,};
-
-//---------------------------------------------------------------------------
-const char* AC3_Mode[]=
-{
- "CM (complete main)",
- "ME (music and effects)",
- "VI (visually impaired)",
- "HI (hearing impaired)",
- "D (dialogue)",
- "C (commentary)",
- "E (emergency)",
- "VO (voice over)",
-};
-
-//---------------------------------------------------------------------------
-const char* AC3_Surround[]=
-{
- "",
- "Not Dolby Surround encoded",
- "Dolby Surround encoded",
- "",
-};
-
-//---------------------------------------------------------------------------
-extern const int16u AC3_BitRate[]=
-{
-
- 32,
- 40,
- 48,
- 56,
- 64,
- 80,
- 96,
- 112,
- 128,
- 160,
- 192,
- 224,
- 256,
- 320,
- 384,
- 448,
- 512,
- 576,
- 640,
-};
-
-//---------------------------------------------------------------------------
-extern const int8u AC3_Channels[]=
-{2, 1, 2, 3, 3, 4, 4, 5};
-
-//---------------------------------------------------------------------------
-} //NameSpace
-
-//---------------------------------------------------------------------------
-#endif //...
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-//
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AC3_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Ac3.h"
-#include <vector>
-#include <cmath>
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-#include "MediaInfo/MediaInfo_Internal.h"
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const int32u AC3_SamplingRate2[]=
-{ 24000, 22050, 16000, 0,};
-
-//---------------------------------------------------------------------------
-const char* AC3_ChannelPositions[]=
-{
- "Dual mono",
- "Front: C",
- "Front: L R",
- "Front: L C R",
- "Front: L R, Back: C",
- "Front: L C R, Back: C",
- "Front: L R, Side: L R",
- "Front: L C R, Side: L R",
-};
-
-//---------------------------------------------------------------------------
-const char* AC3_ChannelPositions2[]=
-{
- "1+1",
- "1/0/0",
- "2/0/0",
- "3/0/0",
- "2/1/0",
- "3/1/0",
- "2/2/0",
- "3/2/0",
-};
-
-//---------------------------------------------------------------------------
-const char* AC3_ChannelLayout_lfeoff[]=
-{
- "1+1",
- "C",
- "L R",
- "L C R",
- "L R S",
- "L C R Cs",
- "L R Ls Rs",
- "L C R Ls Rs",
-};
-
-//---------------------------------------------------------------------------
-const char* AC3_ChannelLayout_lfeon[]=
-{
- "1+1 LFE",
- "C LFE",
- "L R LFE",
- "L C R LFE",
- "L R S LFE",
- "L C R LFE Cs",
- "L R LFE Ls Rs",
- "L C R LFE Ls Rs",
-};
-
-//---------------------------------------------------------------------------
-int16u AC3_acmod2chanmap[]=
-{
- 0xA000,
- 0x4000,
- 0xA000,
- 0xE000,
- 0xA100,
- 0xE100,
- 0xB900,
- 0xF800,
-};
-
-//---------------------------------------------------------------------------
-Ztring AC3_chanmap_ChannelPositions (int16u chanmap)
-{
- Ztring Front;
- Ztring Side;
- Ztring Back;
- Ztring More;
-
- for (int8u Pos=0; Pos<16; Pos++)
- {
- if (chanmap&(1<<(15-Pos)))
- {
- switch (Pos)
- {
- case 0 : Front+=__T(" L"); break;
- case 1 : Front+=__T(" C"); break;
- case 2 : Front+=__T(" R"); break;
- case 3 : Side+=__T(" L"); break;
- case 4 : Side+=__T(" R"); break;
- case 5 : {
- bool HasR=false;
- if (Front.find(__T(" R"))!=string::npos)
- {
- Front.resize(Front.size()-2);
- HasR=true;
- }
- Front+=__T(" C C");
- if (HasR)
- Front+=__T(" R");
- }
- break;
- case 6 : Back+=__T(" L R"); break;
- case 7 : if (Back.empty())
- Back=__T(" C");
- else
- Back=__T(" L C R");
- break;
- case 15 : More+=__T(", LFE");
- break;
- default: ;
- }
- }
- }
-
- Ztring ToReturn;
- if (!Front.empty())
- {
- ToReturn+=__T("Front:")+Front;
- }
- if (!Side.empty())
- {
- if (!ToReturn.empty())
- ToReturn+=__T(", ");
- ToReturn+=__T("Side:")+Side;
- }
- if (!Back.empty())
- {
- if (!ToReturn.empty())
- ToReturn+=__T(", ");
- ToReturn+=__T("Back:")+Back;
- }
- ToReturn+=More;
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-int8u AC3_chanmap_Channels (int16u chanmap)
-{
- int8u Channels=0;
-
- for (int8u Pos=0; Pos<16; Pos++)
- {
- if (chanmap&(1<<(15-Pos)))
- {
- switch (Pos)
- {
- case 5 :
- case 6 :
- case 9 :
- case 10 :
- case 11 :
- Channels+=2; break;
- default:
- Channels++; break;
- }
- }
- }
-
- return Channels;
-}
-
-//---------------------------------------------------------------------------
-Ztring AC3_chanmap_ChannelLayout (int16u chanmap, const Ztring &ChannelLayout0)
-{
- Ztring ToReturn=ChannelLayout0;
-
- for (int8u Pos=0; Pos<16; Pos++)
- {
- if (chanmap&(1<<(15-Pos)))
- {
- switch (Pos)
- {
- case 5 : ToReturn+=__T(" Lc Rc"); break;
- case 6 : ToReturn+=__T(" Lrs Rrs"); break;
- case 7 : ToReturn+=__T(" Cs");
- default: ;
- }
- }
- }
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-const int16u AC3_FrameSize[27][4]=
-{
- { 128, 138, 192, 0},
- { 160, 174, 240, 0},
- { 192, 208, 288, 0},
- { 224, 242, 336, 0},
- { 256, 278, 384, 0},
- { 320, 348, 480, 0},
- { 384, 416, 576, 0},
- { 448, 486, 672, 0},
- { 512, 556, 768, 0},
- { 640, 696, 960, 0},
- { 768, 834, 1152, 0},
- { 896, 974, 1344, 0},
- {1024, 1114, 1536, 0},
- {1280, 1392, 1920, 0},
- {1536, 1670, 2304, 0},
- {1792, 1950, 2688, 0},
- {2048, 2228, 3072, 0},
- {2304, 2506, 3456, 0},
- {2560, 2786, 3840, 0},
- { 0, 0, 0, 0},
- { 0, 0, 0, 0},
- { 0, 0, 0, 0},
- { 0, 0, 0, 0},
- { 0, 0, 0, 0},
- { 0, 0, 0, 0},
- { 0, 0, 0, 0},
- { 768, 0, 0, 0},
-};
-
-//---------------------------------------------------------------------------
-int16u AC3_FrameSize_Get(int8u frmsizecod, int8u fscod)
-{
- bool Padding=(frmsizecod%2)?true:false;
- int16u frame_size_id=frmsizecod/2;
-
- if (frame_size_id>26 || fscod>3)
- return 0;
-
- int16u FrameSize=AC3_FrameSize[frame_size_id][fscod];
- if (fscod==1 && Padding)
- FrameSize+=2; // frame lengths are padded by 1 word (16 bits) at 44100 Hz
- return FrameSize;
-}
-
-//---------------------------------------------------------------------------
-// CRC_16_Table
-// A CRC is computed like this:
-// Init: int32u CRC_16 = 0x0000;
-// for each data byte do
-// CRC_16=(CRC_16<<8) ^ CRC_16_Table[(CRC_16>>8)^(data_byte)];
-int16u CRC_16_Table[256] =
-{
- 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011,
- 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022,
- 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072,
- 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041,
- 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2,
- 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1,
- 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1,
- 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082,
- 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192,
- 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1,
- 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
- 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2,
- 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151,
- 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162,
- 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132,
- 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101,
- 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312,
- 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321,
- 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371,
- 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342,
- 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1,
- 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
- 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2,
- 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381,
- 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291,
- 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2,
- 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2,
- 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1,
- 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252,
- 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261,
- 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231,
- 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202
-};
-
-int CRC16_Init(int16u *Table, int16u Polynomial)
-{
- for (size_t Pos=0; Pos<256; Pos++)
- {
- Table[Pos]=(int16u)Pos<<8;
-
- for(int8u bit=0; bit<8; bit++)
- {
- if (Table[Pos]&0x8000)
- Table[Pos]=(Table[Pos]<<1)^Polynomial;
- else
- Table[Pos]=Table[Pos]<<1;
- }
- }
- return 0;
-}
-
-//---------------------------------------------------------------------------
-const float64 AC3_dynrng[]=
-{
- 6.02,
- 12.04,
- 18.06,
- 24.08,
- -18.06,
- -12.04,
- - 6.02,
- 0.00,
-};
-
-//---------------------------------------------------------------------------
-const float64 AC3_compr[]=
-{
- 6.02,
- 12.04,
- 18.06,
- 24.08,
- 30.10,
- 36.12,
- 42.14,
- 48.16,
- -42.14,
- -36.12,
- -30.10,
- -24.08,
- -18.06,
- -12.04,
- - 6.02,
- 0.00,
-};
-
-//---------------------------------------------------------------------------
-const char* AC3_HD_StreamType(int8u StreamType)
-{
- switch (StreamType)
- {
- case 0xBA : return "TrueHD";
- case 0xBB : return "MLP";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-int32u AC3_HD_SamplingRate(int8u SamplingRate)
-{
- if (SamplingRate==0xF)
- return 0;
-
- return ((SamplingRate&8)?44100:48000)<<(SamplingRate&7) ;
-}
-
-//---------------------------------------------------------------------------
-static const int8u AC3_TrueHD_ChannelCountPerBit[13]=
-{
- 2, //LR
- 1, //C
- 1, //LFE
- 2, //LRs
- 2, //LRvh
- 2, //LRc
- 2, //LRrs
- 1, //Cs
- 1, //Ts
- 2, //LRsd
- 2, //LRw
- 1, //Cvh
- 1, //LFE2
-};
-
-//---------------------------------------------------------------------------
-int8u AC3_TrueHD_Channels(int16u ChannelsMap)
-{
- int8u Channels=0;
-
- for (int8u Pos=0; Pos<13; Pos++)
- Channels+=AC3_TrueHD_ChannelCountPerBit[Pos]*((ChannelsMap>>Pos)&0x1);
-
- return Channels;
-}
-
-//---------------------------------------------------------------------------
-std::string AC3_TrueHD_Channels_Positions(int16u ChannelsMap)
-{
- std::string Text;
- if ((ChannelsMap&0x0003)==0x0003)
- Text+="Front: L C R";
- else
- {
- if (ChannelsMap&0x0001)
- Text+="Front: C";
- if (ChannelsMap&0x0002)
- Text+="Front: L, R";
- }
-
- if (ChannelsMap&0x08)
- Text+=", Side: L R";
-
- if (ChannelsMap&0x80)
- Text+=", Back: C";
-
- if ((ChannelsMap&0x0810)==0x0810)
- Text+=", vh: L C R";
- else
- {
- if (ChannelsMap&0x0010)
- Text+=", vh: L R";
- if (ChannelsMap&0x0800)
- Text+=", vh: C";
- }
-
- if (ChannelsMap&0x0020)
- Text+=", c: L R";
- if (ChannelsMap&0x0040)
- Text+=", Back: L R";
- if (ChannelsMap&0x0100)
- Text+=", s: T";
- if (ChannelsMap&0x0200)
- Text+=", sd: L R";
- if (ChannelsMap&0x0400)
- Text+=", w: L R";
-
- if (ChannelsMap&0x0004)
- Text+=", LFE";
- if (ChannelsMap&0x1000)
- Text+=", LFE2";
-
- return Text;
-}
-
-//---------------------------------------------------------------------------
-Ztring AC3_TrueHD_Channels_Positions2(int16u ChannelsMap)
-{
- int8u Front=0, Surround=0, Rear=0, LFE=0;
-
- if (ChannelsMap&0x0001)
- Front++;
- if (ChannelsMap&0x0002)
- Front+=2;
-
- if (ChannelsMap&0x08)
- Surround+=2;
- if (ChannelsMap&0x80)
- Surround++;
-
- if (ChannelsMap&0x0010)
- Rear+=2; //vh
- if (ChannelsMap&0x0800)
- Rear++; //vh
-
-
- if (ChannelsMap&0x0020)
- Rear+=2; //c
- if (ChannelsMap&0x0040)
- Rear+=2; //rs
- if (ChannelsMap&0x0100)
- Rear+=2; //s
- if (ChannelsMap&0x0200)
- Rear+=2; //sd
- if (ChannelsMap&0x0400)
- Rear+=2; //w
-
- if (ChannelsMap&0x0004)
- LFE++;
- if (ChannelsMap&0x1000)
- LFE++;
-
- Ztring Text;
- Text+=Ztring::ToZtring(Front);
- Text+=__T('/')+Ztring::ToZtring(Surround);
- Text+=__T('/')+Ztring::ToZtring(Rear);
- Text+=__T('.')+Ztring::ToZtring(LFE);
- return Text;
-}
-
-//---------------------------------------------------------------------------
-static const int32u AC3_MLP_Channels[32]=
-{
- 1,
- 2,
- 3,
- 4,
- 3,
- 4,
- 5,
- 3,
- 4,
- 5,
- 4,
- 5,
- 6,
- 4,
- 5,
- 4,
- 5,
- 6,
- 5,
- 5,
- 6,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-static const int32u AC3_MLP_Resolution[16]=
-{
- 16,
- 20,
- 24,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ac3::File_Ac3()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Ac3;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=32*1024;
- Buffer_TotalBytes_Fill_Max=1024*1024;
- PTS_DTS_Needed=true;
- IsRawStream=true;
- Frame_Count_NotParsedIncluded=0;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.3?32:2;
- MustParse_dac3=false;
- MustParse_dec3=false;
- CalculateDelay=false;
-
- //Buffer
- Save_Buffer=NULL;
-
- //Temp
- Frame_Count_HD=0;
- fscod=0;
- fscod2=0;
- frmsizecod=0;
- bsid_Max=(int8u)-1;
- for (int8u Pos=0; Pos<8; Pos++)
- for (int8u Pos2=0; Pos2<9; Pos2++)
- {
- frmsizplus1_Max[Pos][Pos2]=0;
- acmod_Max[Pos][Pos2]=(int8u)-1;
- lfeon_Max[Pos][Pos2]=false;
- bsmod_Max[Pos][Pos2]=0;
- dsurmod_Max[Pos][Pos2]=0;
- chanmape_Max[Pos][Pos2]=false;
- chanmap_Max[Pos][Pos2]=0;
- }
- numblkscod=0;
- substreamid_Independant_Current=0;
- substreams_Count=0;
- dxc3_Parsed=false;
- HD_MajorSync_Parsed=false;
- Core_IsPresent=false;
- HD_IsPresent=false;
- dynrnge_Exists=false;
- TimeStamp_IsPresent=false;
- TimeStamp_IsParsing=false;
- TimeStamp_Parsed=false;
- TimeStamp_DropFrame_IsValid=false;
- BigEndian=true;
- IgnoreCrc_Done=false;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ac3::Streams_Fill()
-{
- if (HD_MajorSync_Parsed)
- {
- Stream_Prepare(Stream_Audio);
- if (HD_BitRate_Max)
- Fill(Stream_Audio, 0, Audio_BitRate_Maximum, (HD_BitRate_Max*AC3_HD_SamplingRate(HD_SamplingRate2)+8)>>4);
-
- if (HD_StreamType==0xBA) //TrueHD
- {
- Fill(Stream_General, 0, General_Format, "TrueHD");
- Fill(Stream_Audio, 0, Audio_Format, "TrueHD");
-
- Fill(Stream_Audio, 0, Audio_Codec, "TrueHD");
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "VBR");
- Fill(Stream_Audio, 0, Audio_SamplingRate, AC3_HD_SamplingRate(HD_SamplingRate1));
- Fill(Stream_Audio, 0, Audio_Channel_s_, AC3_TrueHD_Channels(HD_Channels2));
- Fill(Stream_Audio, 0, Audio_ChannelPositions, AC3_TrueHD_Channels_Positions(HD_Channels2));
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, AC3_TrueHD_Channels_Positions2(HD_Channels2));
- if (Core_IsPresent && !IsSub)
- Fill(Stream_Audio, 0, Audio_MuxingMode, "After core data");
- }
-
- if (HD_StreamType==0xBB) //TrueHD
- {
- Fill(Stream_General, 0, General_Format, "MLP");
- if (!Core_IsPresent)
- {
- Fill(Stream_Audio, 0, Audio_Format, "MLP");
- Fill(Stream_Audio, 0, Audio_Codec, "MLP");
- }
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "VBR");
- Fill(Stream_Audio, 0, Audio_SamplingRate, AC3_HD_SamplingRate(HD_SamplingRate2));
- if (HD_SamplingRate1!=HD_SamplingRate2)
- Fill(Stream_Audio, 0, Audio_SamplingRate, AC3_HD_SamplingRate(HD_SamplingRate2));
- Fill(Stream_Audio, 0, Audio_Channel_s_, AC3_MLP_Channels[HD_Channels1]);
- if (HD_Channels1!=HD_Channels2)
- Fill(Stream_Audio, 0, Audio_Channel_s_, AC3_MLP_Channels[HD_Channels1]);
- Fill(Stream_Audio, 0, Audio_BitDepth, AC3_MLP_Resolution[HD_Resolution2]);
- if (HD_Resolution1!=HD_Resolution2)
- Fill(Stream_Audio, 0, Audio_BitDepth, AC3_MLP_Resolution[HD_Resolution1]);
- }
- }
-
- //AC-3
- if (bsid_Max<=0x09)
- {
- if (Count_Get(Stream_Audio)==0)
- Stream_Prepare(Stream_Audio);
- Fill(Stream_General, 0, General_Format, "AC-3");
- Fill(Stream_Audio, 0, Audio_Format, "AC-3");
- Fill(Stream_Audio, 0, Audio_Codec, "AC3");
- Fill(Stream_Audio, 0, Audio_BitDepth, 16);
-
- int32u Divider=bsid_Max==9?2:1; // Unofficial hack for low sample rate (e.g. 22.05 kHz)
- if (Ztring::ToZtring(AC3_SamplingRate[fscod]/Divider)!=Retrieve(Stream_Audio, 0, Audio_SamplingRate))
- Fill(Stream_Audio, 0, Audio_SamplingRate, AC3_SamplingRate[fscod]/Divider);
- if (frmsizecod/2<19)
- {
- if (Frame_Count_HD)
- Fill(Stream_Audio, 0, Audio_BitRate, "Unknown");
- int32u BitRate=AC3_BitRate[frmsizecod/2]*1000;
- int32u Divider=bsid_Max==9?2:1; // Unofficial hack for low sample rate (e.g. 22.05 kHz)
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate/Divider);
- if (CalculateDelay && Buffer_TotalBytes_FirstSynched>100 && BitRate>0)
- {
- Fill(Stream_Audio, 0, Audio_Delay, (float)Buffer_TotalBytes_FirstSynched*8*1000/BitRate, 0);
- Fill(Stream_Audio, 0, Audio_Delay_Source, "Stream");
- }
- }
-
- Fill(Stream_Audio, 0, Audio_Format_Settings_ModeExtension, AC3_Mode[bsmod_Max[0][0]]);
- if (acmod_Max[0][0]==0)
- Fill(Stream_Audio, 0, Audio_Format_Settings_Mode, "Dual Mono");
- if (acmod_Max[0][0]!=(int8u)-1)
- {
- int8u Channels=AC3_Channels[acmod_Max[0][0]];
- Ztring ChannelPositions; ChannelPositions.From_Local(AC3_ChannelPositions[acmod_Max[0][0]]);
- Ztring ChannelPositions2; ChannelPositions2.From_Local(AC3_ChannelPositions2[acmod_Max[0][0]]);
- Ztring ChannelLayout; ChannelLayout.From_Local(lfeon_Max[0][0]?AC3_ChannelLayout_lfeon[acmod_Max[0][0]]:AC3_ChannelLayout_lfeoff[acmod_Max[0][0]]);
- if (lfeon_Max[0][0])
- {
- Channels+=1;
- ChannelPositions+=__T(", LFE");
- ChannelPositions2+=__T(".1");
- }
- if (Ztring::ToZtring(Channels)!=Retrieve(Stream_Audio, 0, Audio_Channel_s_))
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- if (ChannelPositions!=Retrieve(Stream_Audio, 0, Audio_ChannelPositions))
- Fill(Stream_Audio, 0, Audio_ChannelPositions, ChannelPositions);
- if (ChannelPositions2!=Retrieve(Stream_Audio, 0, Audio_ChannelPositions_String2))
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, ChannelPositions2);
- if (ChannelLayout!=Retrieve(Stream_Audio, 0, Audio_ChannelLayout))
- Fill(Stream_Audio, 0, Audio_ChannelLayout, ChannelLayout);
- }
- if (dsurmod_Max[0][0]==2)
- {
- Fill(Stream_Audio, 0, Audio_Format_Profile, "Dolby Digital");
- Fill(Stream_Audio, 0, Audio_Codec_Profile, "Dolby Digital");
- }
- if (__T("CBR")!=Retrieve(Stream_Audio, 0, Audio_BitRate_Mode))
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
- }
-
- //E-AC-3
- else if (bsid_Max<=0x10)
- {
- for (size_t Pos=0; Pos<8; Pos++)
- if (acmod_Max[Pos][0]!=(int8u)-1)
- {
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "E-AC-3");
- Fill(Stream_Audio, 0, Audio_Codec, "AC3+");
-
- if (acmod_Max[1][0]!=(int8u)-1)
- Fill(Stream_Audio, 0, Audio_ID, 1+Pos);
-
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
- int8u numblks=numblkscod==3?6:numblkscod+1;
- int32u frmsiz_Total=0;
- for (size_t Pos2=0; Pos2<8; Pos2++)
- frmsiz_Total+=frmsizplus1_Max[Pos][Pos2];
- if (numblks)
- {
- Fill(Stream_Audio, 0, Audio_BitRate, ((frmsiz_Total*2)*8*(750/((int32u)numblks)))/4);
- if (frmsizplus1_Max[Pos][1]) //If dependand substreams
- Fill(Stream_Audio, 0, Audio_BitRate, ((frmsizplus1_Max[Pos][0]*2)*8*(750/((int16u)numblks)))/4);
-
- }
-
- if (fscod!=2)
- Fill(Stream_Audio, 0, Audio_SamplingRate, AC3_SamplingRate[fscod]);
- else
- Fill(Stream_Audio, 0, Audio_SamplingRate, AC3_SamplingRate2[fscod2]);
-
- if (acmod_Max[Pos][1]!=(int8u)-1)
- {
- int16u chanmap_Final=0;
- for (int8u Pos2=0; Pos2<9; Pos2++)
- if (acmod_Max[Pos][Pos2]!=(int8u)-1)
- {
- if (chanmape_Max[Pos][Pos2])
- chanmap_Final|=chanmap_Max[Pos][Pos2];
- else
- {
- chanmap_Final|=AC3_acmod2chanmap[acmod_Max[Pos][Pos2]];
- if (lfeon_Max[Pos][Pos2])
- chanmap_Final|=1; // LFE position in chanmap is bit 0
- }
- }
-
- Fill(Stream_Audio, 0, Audio_Channel_s_, AC3_chanmap_Channels(chanmap_Final));
- Fill(Stream_Audio, 0, Audio_ChannelPositions, AC3_chanmap_ChannelPositions(chanmap_Final));
- Ztring ChannelLayout; ChannelLayout.From_Local(lfeon_Max[0][0]?AC3_ChannelLayout_lfeon[acmod_Max[0][0]]:AC3_ChannelLayout_lfeoff[acmod_Max[0][0]]);
- Fill(Stream_Audio, 0, Audio_ChannelLayout, AC3_chanmap_ChannelLayout(chanmap_Final, ChannelLayout));
- }
- if (acmod_Max[Pos][0]==0)
- {
- Fill(Stream_Audio, 0, Audio_Format_Profile, "Dual Mono");
- Fill(Stream_Audio, 0, Audio_Codec_Profile, "Dual Mono");
- }
- else if (acmod_Max[Pos][0]!=(int8u)-1)
- {
- int8u Channels=AC3_Channels[acmod_Max[Pos][0]];
- Ztring ChannelPositions; ChannelPositions.From_Local(AC3_ChannelPositions[acmod_Max[Pos][0]]);
- if (lfeon_Max[Pos][0])
- {
- Channels+=1;
- ChannelPositions+=__T(", LFE");
- }
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- Fill(Stream_Audio, 0, Audio_ChannelPositions, ChannelPositions);
- Fill(Stream_Audio, 0, Audio_ChannelLayout, lfeon_Max[0][0]?AC3_ChannelLayout_lfeon[acmod_Max[0][0]]:AC3_ChannelLayout_lfeoff[acmod_Max[0][0]]);
- }
- }
- }
-
- if (HD_MajorSync_Parsed)
- {
- //Filling Maximum bitrate with the constant core bitrate for better coherancy
- ZtringList List;
- List.Separator_Set(0, __T(" / "));
- List.Write(Retrieve(Stream_Audio, 0, Audio_BitRate));
- if (List.size()>=2)
- Fill(Stream_Audio, 0, Audio_BitRate_Maximum, List[1]);
- }
-
- //Dolby Metadata
- if (Core_IsPresent)
- {
- //Endianess
- Fill(Stream_Audio, 0, Audio_Format_Settings_Endianness, BigEndian?"Big":"Little");
- Fill(Stream_Audio, 0, "bsid", bsid_Max);
-
- Fill(Stream_Audio, 0, "dialnorm", FirstFrame_Dolby.dialnorm==0?-31:-FirstFrame_Dolby.dialnorm);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dialnorm"), Info_Options)=__T("N NT");
- Fill(Stream_Audio, 0, "dialnorm/String", Ztring::ToZtring(FirstFrame_Dolby.dialnorm==0?-31:-FirstFrame_Dolby.dialnorm)+__T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dialnorm/String"), Info_Options)=__T("N NT");
- if (FirstFrame_Dolby.compre)
- {
- float64 Value=AC3_compr[FirstFrame_Dolby.compr>>4]+20*std::log10(((float)(0x10+(FirstFrame_Dolby.compr&0x0F)))/32);
- Fill(Stream_Audio, 0, "compr", Value, 2);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("compr"), Info_Options)=__T("N NT");
- Fill(Stream_Audio, 0, "compr/String", Ztring::ToZtring(Value, 2)+__T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("compr/String"), Info_Options)=__T("N NT");
- }
- if (FirstFrame_Dolby.dynrnge)
- {
- float64 Value;
- if (FirstFrame_Dolby.dynrng==0)
- Value=0; //Special case in the formula
- else
- Value=AC3_dynrng[FirstFrame_Dolby.dynrng>>5]+20*std::log10(((float)(0x20+(FirstFrame_Dolby.dynrng&0x1F)))/64);
- Fill(Stream_Audio, 0, "dynrng", Value, 2);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dynrng"), Info_Options)=__T("N NT");
- Fill(Stream_Audio, 0, "dynrng/String", Ztring::ToZtring(Value, 2)+__T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dynrng/String"), Info_Options)=__T("N NT");
- }
-
- for (int8u Pos=0; Pos<8; Pos++)
- for (int8u Pos2=0; Pos2<9; Pos2++)
- {
- if (acmod_Max[Pos][Pos2]==(int8u)-1)
- break;
- if (acmod_Max[Pos][Pos2]!=(int8u)-1)
- {
- if (acmod_Max[Pos][Pos2]==2)
- {
- Fill(Stream_Audio, 0, "dsurmod", dsurmod_Max[Pos][Pos2]);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dsurmod"), Info_Options)=__T("N NT");
- Fill(Stream_Audio, 0, "dsurmod/String", AC3_Surround[dsurmod_Max[Pos][Pos2]]);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dsurmod/String"), Info_Options)=__T("N NT");
- }
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("bsid"), Info_Options)=__T("N NT");
- Fill(Stream_Audio, 0, "acmod", acmod_Max[Pos][Pos2]);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("acmod"), Info_Options)=__T("N NT");
- Fill(Stream_Audio, 0, "lfeon", (lfeon_Max[Pos][Pos2])?1:0);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("lfeon"), Info_Options)=__T("N NT");
- }
- }
- }
-
- //TimeStamp
- if (TimeStamp_IsPresent)
- {
- Fill(Stream_Audio, 0, Audio_Delay, TimeStamp_Content*1000, 0);
- Fill(Stream_Audio, 0, Audio_Delay_Source, "Stream");
- if (TimeStamp_DropFrame_IsValid)
- Fill(Stream_Audio, 0, Audio_Delay_Settings, TimeStamp_DropFrame_Content?"drop_frame_flag=1":"drop_frame_flag=0");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::Streams_Finish()
-{
- //Stats
- if (!dialnorms.empty())
- {
- int8u Minimum_Raw=1;
- int8u Maximum_Raw=31;
- float64 Sum_Intensity=0;
- int64u Count=0;
- for (int8u Pos=0; (size_t)Pos<dialnorms.size(); Pos++)
- if (dialnorms[Pos])
- {
- if (Minimum_Raw<(Pos==0?31:Pos))
- Minimum_Raw=(Pos==0?31:Pos);
- if (Maximum_Raw>(Pos==0?31:Pos))
- Maximum_Raw=(Pos==0?31:Pos);
- Sum_Intensity+=dialnorms[Pos]*pow(10, -((float64)Pos)/10);
- Count+=dialnorms[Pos];
- }
- if (Count)
- {
- float64 Average_dB = log10(Sum_Intensity / Count) * 10;
- Fill(Stream_Audio, 0, "dialnorm_Average", Average_dB, 0);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dialnorm_Average"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dialnorm_Average/String", Ztring::ToZtring(Average_dB, 0) + __T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dialnorm_Average/String"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dialnorm_Minimum", -Minimum_Raw);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dialnorm_Minimum"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dialnorm_Minimum/String", Ztring::ToZtring(-Minimum_Raw) + __T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dialnorm_Minimum/String"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dialnorm_Maximum", -Maximum_Raw);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dialnorm_Maximum"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dialnorm_Maximum/String", Ztring::ToZtring(-Maximum_Raw) + __T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dialnorm_Maximum/String"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dialnorm_Count", Count);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dialnorm_Count"), Info_Options) = __T("N NT");
- }
- }
- if (!comprs.empty())
- {
- float64 Minimum_dB=47.89;
- float64 Maximum_dB=-48.16;
- float64 Sum_Intensity=0;
- int64u Count=0;
- for (size_t Pos=0; Pos<comprs.size(); Pos++)
- if (comprs[Pos])
- {
- float64 Value=AC3_compr[Pos>>4]+20*std::log10(((float)(0x10+(Pos&0x0F)))/32);
- if (Minimum_dB>Value)
- Minimum_dB=Value;
- if (Maximum_dB<Value)
- Maximum_dB=Value;
- Sum_Intensity+=comprs[Pos]*pow(10, Value/10);
- Count+=comprs[Pos];
- }
- if (Count)
- {
- float64 Average_dB = log10(Sum_Intensity / Count) * 10;
- Fill(Stream_Audio, 0, "compr_Average", Average_dB, 2);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("compr_Average"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "compr_Average/String", Ztring::ToZtring(Average_dB, 2) + __T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("compr_Average/String"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "compr_Minimum", Minimum_dB, 2);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("compr_Minimum"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "compr_Minimum/String", Ztring::ToZtring(Minimum_dB, 2) + __T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("compr_Minimum/String"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "compr_Maximum", Maximum_dB, 2);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("compr_Maximum"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "compr_Maximum/String", Ztring::ToZtring(Maximum_dB, 2) + __T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("compr_Maximum/String"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "compr_Count", Count);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("compr_Count"), Info_Options) = __T("N NT");
- }
- }
- if (dynrnge_Exists && !dynrngs.empty())
- {
- float64 Minimum_dB=23.95;
- float64 Maximum_dB=-24.08;
- float64 Sum_Intensity=0;
- int64u Count=0;
- for (size_t Pos=0; Pos<dynrngs.size(); Pos++)
- if (dynrngs[Pos])
- {
- float64 Value;
- if (Pos==0)
- Value=0; //Special case in the formula
- else
- Value=AC3_dynrng[Pos>>5]+20*std::log10(((float)(0x20+(Pos&0x1F)))/64);
- if (Minimum_dB>Value)
- Minimum_dB=Value;
- if (Maximum_dB<Value)
- Maximum_dB=Value;
- Sum_Intensity+=dynrngs[Pos]*pow(10, Value/10);
- Count+=dynrngs[Pos];
- }
- if (Count)
- {
- float64 Average_dB = log10(Sum_Intensity / Count) * 10;
- Fill(Stream_Audio, 0, "dynrng_Average", Average_dB, 2);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dynrng_Average"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dynrng_Average/String", Ztring::ToZtring(Average_dB, 2) + __T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dynrng_Average/String"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dynrng_Minimum", Minimum_dB, 2);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dynrng_Minimum"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dynrng_Minimum/String", Ztring::ToZtring(Minimum_dB, 2) + __T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dynrng_Minimum/String"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dynrng_Maximum", Maximum_dB, 2);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dynrng_Maximum"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dynrng_Maximum/String", Ztring::ToZtring(Maximum_dB, 2) + __T(" dB"));
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dynrng_Maximum/String"), Info_Options) = __T("N NT");
- Fill(Stream_Audio, 0, "dynrng_Count", Count);
- (*Stream_More)[Stream_Audio][0](Ztring().From_Local("dynrng_Count"), Info_Options) = __T("N NT");
- }
- }
-
- //Duration
- if (!IsSub)
- {
- int64u Frame_Count_ForDuration=0;
- if (MediaInfoLib::Config.ParseSpeed_Get()==1)
- {
- Frame_Count_ForDuration=Frame_Count; //We have the exact count of frames
- Fill(Stream_Audio, 0, Audio_StreamSize, File_Offset+Buffer_Offset+Element_Size-File_Offset_FirstSynched);
- }
- else if (bsid_Max<=9 && frmsizecods.size()==1 && fscods.size()==1 && Frame_Count_HD==0)
- {
- int16u Size=AC3_FrameSize_Get(frmsizecods.begin()->first, fscods.begin()->first);
- if (Size)
- {
- if (TimeStamp_IsPresent)
- Size+=16;
- Frame_Count_ForDuration=(File_Size-File_Offset_FirstSynched)/Size; //Only complete frames
- Fill(Stream_Audio, 0, Audio_StreamSize, Frame_Count_ForDuration*Size);
- }
- }
- if (Frame_Count_ForDuration)
- {
- Clear(Stream_Audio, 0, Audio_BitRate);
-
- //HD part
- if (Frame_Count_HD)
- {
- int32u HD_SamplingRate=AC3_HD_SamplingRate(HD_SamplingRate1);
- if (HD_SamplingRate)
- {
- int8u FrameDuration; //In samples
- if (HD_SamplingRate<44100)
- FrameDuration=0; //Unknown
- else if (HD_SamplingRate<=48000)
- FrameDuration=40;
- else if (HD_SamplingRate<=96000)
- FrameDuration=80;
- else if (HD_SamplingRate<=192000)
- FrameDuration=160;
- else
- FrameDuration=0; //Unknown
- if (FrameDuration)
- {
- int64u SamplingCount=Frame_Count_HD*FrameDuration;
- Fill(Stream_Audio, 0, Audio_Duration, SamplingCount/(((float64)HD_SamplingRate)/1000), 0);
- Fill(Stream_Audio, 0, Audio_SamplingCount, SamplingCount);
- Fill(Stream_Audio, 0, Audio_BitRate, (File_Size-File_Offset_FirstSynched)/(SamplingCount/(((float64)HD_SamplingRate)/1000))*8, 0);
- }
- Fill(Stream_Audio, 0, Audio_FrameCount, Frame_Count_HD);
- }
- }
- if (Core_IsPresent)
- {
- Fill(Stream_Audio, 0, Audio_FrameCount, Frame_Count_ForDuration);
- if (AC3_SamplingRate[fscod])
- {
- float64 FrameDuration;
- if (bsid_Max<=0x08)
- FrameDuration=32;
- else if (bsid_Max<=0x09)
- FrameDuration=16; // Unofficial hack for low sample rate (e.g. 22.05 kHz)
- else
- FrameDuration=0;
- if (FrameDuration)
- {
- FrameDuration*=((float64)48000)/AC3_SamplingRate[fscod]; //32 ms for 48 KHz, else proportional (34.83 for 44.1 KHz, 48 ms for 32 KHz)
- Fill(Stream_Audio, 0, Audio_SamplingCount, Frame_Count_ForDuration*1536);
- Fill(Stream_Audio, 0, Audio_Duration, Frame_Count_ForDuration*FrameDuration, 0);
- int32u BitRate=AC3_BitRate[frmsizecod/2]*1000;
- int32u Divider=bsid_Max==9?2:1; // Unofficial hack for low sample rate (e.g. 22.05 kHz)
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate/Divider);
- }
- }
- }
- }
- }
- else if (FrameInfo.PTS!=(int64u)-1 && FrameInfo.PTS>PTS_Begin)
- {
- Fill(Stream_Audio, 0, Audio_Duration, float64_int64s(((float64)(FrameInfo.PTS-PTS_Begin))/1000000));
- float64 FrameDuration;
- if (bsid_Max<=0x08)
- FrameDuration=32;
- else if (bsid_Max<=0x09)
- FrameDuration=16; // Unofficial hack for low sample rate (e.g. 22.05 kHz)
- else if (bsid_Max>0x0A && bsid_Max<=0x10)
- FrameDuration=((float64)32)/6;
- else
- FrameDuration=0;
- if (FrameDuration)
- Fill(Stream_Audio, 0, Audio_FrameCount, float64_int64s(((float64)(FrameInfo.PTS-PTS_Begin))/1000000/FrameDuration));
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::Read_Buffer_Unsynched()
-{
- delete[] Save_Buffer; Save_Buffer=NULL;
-
- if (File_GoTo==0)
- Synched_Init();
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Ac3::Read_Buffer_Seek (size_t Method, int64u Value, int64u /*ID*/)
-{
- GoTo(0);
- Open_Buffer_Unsynch();
- return 1;
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ac3::FileHeader_Begin()
-{
- //Specific cases
- if (MustParse_dac3 || MustParse_dec3)
- return true;
-
- //Must have enough buffer for having header
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- //False positives detection: detect Matroska files, AC-3 parser is not smart enough
- if (!FileHeader_Begin_0x000001())
- {
- Finish("AC-3");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ac3::Synchronize()
-{
- //Specific cases
- if (MustParse_dac3 || MustParse_dec3)
- return true;
-
- //Synchronizing
- while (Buffer_Offset+8<=Buffer_Size)
- {
- if (!FrameSynchPoint_Test())
- return false; //Need more data
- if (Synched)
- break;
- Buffer_Offset++;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+8>Buffer_Size)
- {
- //We must keep more bytes in order to detect TimeStamp
- if (Frame_Count==0)
- {
- if (Buffer_Offset>=16)
- Buffer_Offset-=16;
- else
- Buffer_Offset=0;
- return false;
- }
-
- if (Buffer_Offset+7==Buffer_Size && CC3(Buffer+Buffer_Offset+4)!=0xF8726F && CC2(Buffer+Buffer_Offset)!=0x0B77 && CC2(Buffer+Buffer_Offset)!=0x770B)
- Buffer_Offset++;
- if (Buffer_Offset+6==Buffer_Size && CC2(Buffer+Buffer_Offset+4)!=0xF872 && CC2(Buffer+Buffer_Offset)!=0x0B77 && CC2(Buffer+Buffer_Offset)!=0x770B)
- Buffer_Offset++;
- if (Buffer_Offset+5==Buffer_Size && CC1(Buffer+Buffer_Offset+4)!=0xF8 && CC2(Buffer+Buffer_Offset)!=0x0B77 && CC2(Buffer+Buffer_Offset)!=0x770B)
- Buffer_Offset++;
- if (Buffer_Offset+4==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x0B77 && CC2(Buffer+Buffer_Offset)!=0x770B)
- Buffer_Offset++;
- if (Buffer_Offset+3==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x0B77 && CC2(Buffer+Buffer_Offset)!=0x770B)
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x0B77 && CC2(Buffer+Buffer_Offset)!=0x770B)
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0x0B && CC1(Buffer+Buffer_Offset)!=0x77)
- Buffer_Offset++;
- return false;
- }
-
- //Testing if we have TimeStamp
- if (Buffer_Offset>=16)
- {
- if ( Buffer[Buffer_Offset-0x10+0x00]==0x01 //Magic value? Always 0x01
- && Buffer[Buffer_Offset-0x10+0x01]==0x10 //Size? Always 0x10
- && Buffer[Buffer_Offset-0x10+0x02]==0x00 //First byte of HH? Always 0x00
- && (Buffer[Buffer_Offset-0x10+0x03]>>4 )<0x6 //Second byte of HH? First 4 bits must be <0x6
- && (Buffer[Buffer_Offset-0x10+0x03]&0xF)<0xA //Second byte of HH? Second 4 bits must be <0xA
- && Buffer[Buffer_Offset-0x10+0x04]==0x00 //First byte of MM? Always 0x00
- && (Buffer[Buffer_Offset-0x10+0x05]>>4 )<0x6 //Second byte of MM? First 4 bits must be <0x6
- && (Buffer[Buffer_Offset-0x10+0x05]&0xF)<0xA //Second byte of MM? Second 4 bits must be <0xA
- && Buffer[Buffer_Offset-0x10+0x06]==0x00 //First byte of SS? Always 0x00
- && (Buffer[Buffer_Offset-0x10+0x07]>>4 )<0x6 //Second byte of SS? First 4 bits must be <0x6
- && (Buffer[Buffer_Offset-0x10+0x07]&0xF)<0xA //Second byte of SS? Second 4 bits must be <0xA
- && Buffer[Buffer_Offset-0x10+0x08]==0x00 //First byte of FF? Always 0x00
- && (Buffer[Buffer_Offset-0x10+0x09]>>4 )<0x4 //Second byte of FF? First 4 bits must be <0x4
- && (Buffer[Buffer_Offset-0x10+0x09]&0xF)<0xA //Second byte of FF? Second 4 bits must be <0xA
- && !(Buffer[Buffer_Offset-0x10+0x00]==0x00 //We want at least a byte not zero, in order to differentiate TimeStamp from padding
- && Buffer[Buffer_Offset-0x10+0x01]==0x00
- && Buffer[Buffer_Offset-0x10+0x0C]==0x00
- && Buffer[Buffer_Offset-0x10+0x0D]==0x00
- && Buffer[Buffer_Offset-0x10+0x0E]==0x00
- && Buffer[Buffer_Offset-0x10+0x0F]==0x00))
- {
- TimeStamp_IsPresent=true;
- Buffer_Offset-=16;
-
- if (Frame_Count_Valid<10000)
- Frame_Count_Valid=10000; //Setting it to 10000 in order to be able to have the drop frame for extreme stream (60 fps...)
- }
- }
-
- //Synched
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::Synched_Init()
-{
- //FrameInfo
- PTS_End=0;
- if (FrameInfo.DTS==(int64u)-1)
- FrameInfo.DTS=0; //No DTS in container
- if (FrameInfo.PTS==(int64u)-1)
- FrameInfo.PTS=0; //No PTS in container
- DTS_Begin=FrameInfo.DTS;
- DTS_End=FrameInfo.DTS;
- if (Frame_Count_NotParsedIncluded==(int64u)-1)
- Frame_Count_NotParsedIncluded=0; //No Frame_Count_NotParsedIncluded in the container
-}
-
-//---------------------------------------------------------------------------
-bool File_Ac3::Synched_Test()
-{
- //Specific cases
- if (MustParse_dac3 || MustParse_dec3)
- return true;
-
- //Must have enough buffer for having header
- if (Buffer_Offset+(TimeStamp_IsPresent?16:0)+6>Buffer_Size)
- return false;
-
- //TimeStamp
- if (TimeStamp_IsPresent && !TimeStamp_Parsed)
- {
- if (!( Buffer[Buffer_Offset+0x00]==0x01 //Magic value? Always 0x01
- && Buffer[Buffer_Offset+0x01]==0x10 //Size? Always 0x10
- && Buffer[Buffer_Offset+0x02]==0x00 //First byte of HH? Always 0x00
- && (Buffer[Buffer_Offset+0x03]>>4 )<0x6 //Second byte of HH? First 4 bits must be <0x6
- && (Buffer[Buffer_Offset+0x03]&0xF)<0xA //Second byte of HH? Second 4 bits must be <0xA
- && Buffer[Buffer_Offset+0x04]==0x00 //First byte of MM? Always 0x00
- && (Buffer[Buffer_Offset+0x05]>>4 )<0x6 //Second byte of MM? First 4 bits must be <0x6
- && (Buffer[Buffer_Offset+0x05]&0xF)<0xA //Second byte of MM? Second 4 bits must be <0xA
- && Buffer[Buffer_Offset+0x06]==0x00 //First byte of SS? Always 0x00
- && (Buffer[Buffer_Offset+0x07]>>4 )<0x6 //Second byte of SS? First 4 bits must be <0x6
- && (Buffer[Buffer_Offset+0x07]&0xF)<0xA //Second byte of SS? Second 4 bits must be <0xA
- && Buffer[Buffer_Offset+0x08]==0x00 //First byte of FF? Always 0x00
- && (Buffer[Buffer_Offset+0x09]>>4 )<0x4 //Second byte of FF? First 4 bits must be <0x4
- && (Buffer[Buffer_Offset+0x09]&0xF)<0xA)) //Second byte of FF? Second 4 bits must be <0xA
- TimeStamp_IsPresent=false;
- }
- if (TimeStamp_IsPresent && !TimeStamp_Parsed)
- Buffer_Offset+=16;
-
- //Quick test of synchro
- if (!FrameSynchPoint_Test())
- return false; //Need more data
- if (!Synched)
- return true;
-
- //TimeStamp
- if (TimeStamp_IsPresent && !TimeStamp_Parsed)
- {
- Buffer_Offset-=16;
- if (Synched)
- {
- TimeStamp_IsParsing=true;
- TimeStamp_Parsed=false;
- }
- else
- {
- TimeStamp_IsParsing=false;
- TimeStamp_Parsed=false;
- }
- }
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Ac3::Demux_UnpacketizeContainer_Test()
-{
- if (TimeStamp_IsPresent)
- Buffer_Offset+=16;
-
- if (!HD_IsPresent && Frame_Count==0 && Save_Buffer==NULL)
- {
- //Searching HD part
- size_t Buffer_Offset_Save=Buffer_Offset;
- Buffer_Offset++;
- Synched=false;
- while (Buffer_Offset+8<=Buffer_Size)
- {
- if (!FrameSynchPoint_Test())
- {
- Buffer_Offset=Buffer_Offset_Save;
- return false; //Need more data
- }
- if (Synched)
- break;
- Buffer_Offset++;
- }
- Buffer_Offset=Buffer_Offset_Save;
- if (!Synched)
- {
- Synched=true;
- if (TimeStamp_IsPresent)
- Buffer_Offset-=16;
- return false; //Need more data
- }
- }
-
- if (Save_Buffer)
- {
- Demux_TotalBytes-=Buffer_Offset;
- Demux_Offset-=Buffer_Offset;
- File_Offset+=Buffer_Offset;
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
- }
-
- if (Buffer[Buffer_Offset]==0x0B && Buffer[Buffer_Offset+1]==0x77)
- {
- int8u bsid=Buffer[Buffer_Offset+5]>>3;
- if (bsid<=0x08)
- FrameInfo.DUR=32000000;
- else if (bsid<=0x09)
- FrameInfo.DUR=16000000; // Unofficial hack for low sample rate (e.g. 22.05 kHz)
- else if (bsid>0x0A && bsid<=0x10)
- {
- numblkscod=(Buffer[Buffer_Offset+4]>>4)&0x3;
- int64u numblks=numblkscod==3?6:numblkscod+1;
- FrameInfo.DUR=32000000*numblks/6;
- }
-
- Demux_Offset=Buffer_Offset+Core_Size_Get();
-
- //Core part
- if (HD_IsPresent)
- {
- if (TimeStamp_IsPresent)
- Buffer_Offset-=16;
-
- if (Save_Buffer)
- {
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
- Demux_TotalBytes+=Buffer_Offset;
- Demux_Offset+=Buffer_Offset;
- File_Offset-=Buffer_Offset;
- }
-
- return true; //No AC-3 demux
- }
- }
- else
- {
- Demux_Offset=Buffer_Offset+HD_Size_Get();
- }
-
- if (Demux_Offset>Buffer_Size && File_Offset+Buffer_Size!=File_Size)
- {
- if (TimeStamp_IsPresent)
- Buffer_Offset-=16;
-
- if (Save_Buffer)
- {
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
- Demux_TotalBytes+=Buffer_Offset;
- Demux_Offset+=Buffer_Offset;
- File_Offset-=Buffer_Offset;
- }
-
- return false; //No complete frame
- }
-
- Demux_UnpacketizeContainer_Demux();
-
- if (Save_Buffer)
- {
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
- Demux_TotalBytes+=Buffer_Offset;
- Demux_Offset+=Buffer_Offset;
- File_Offset-=Buffer_Offset;
- }
-
- if (TimeStamp_IsPresent)
- Buffer_Offset-=16;
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ac3::Read_Buffer_Continue()
-{
- if (MustParse_dac3)
- {
- dac3();
- return;
- }
- if (MustParse_dec3)
- {
- dec3();
- return;
- }
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ac3::Header_Parse()
-{
- //TimeStamp
- if (TimeStamp_IsParsing)
- {
- Header_Fill_Size(16);
- Header_Fill_Code(2, "TimeStamp");
- return;
- }
- else
- TimeStamp_Parsed=false; //Currently, only one kind of intermediate element is detected (no TimeStamp and HD part together), and we don't know the precise specification of MLP nor TimeStamp, so we consider next eleemnt is TimeStamp
-
- if (Save_Buffer)
- {
- File_Offset+=Buffer_Offset;
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
- }
-
- //Filling
- if ((Buffer[Buffer_Offset]==0x0B && Buffer[Buffer_Offset+1]==0x77)
- || (Buffer[Buffer_Offset]==0x77 && Buffer[Buffer_Offset+1]==0x0B))
- {
- Header_Fill_Size(Core_Size_Get());
- Header_Fill_Code(0, "syncframe");
-
- //Little Endian management
- if (Save_Buffer)
- {
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
- File_Offset-=Buffer_Offset;
- }
-
- return;
- }
-
- //MLP or TrueHD specific
- int16u Size;
- BS_Begin();
- Skip_S1( 4, "CRC?");
- Get_S2 (12, Size, "Size");
- BS_End();
- Skip_B2( "Timestamp?");
-
- //Little Endian management
- if (Save_Buffer)
- {
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
- }
-
- //Filling
- if (Size<2)
- {
- Synched=false;
- Size=2;
- }
-
- Size*=2;
- Header_Fill_Size(Size);
- Header_Fill_Code(1, "HD");
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::Data_Parse()
-{
- if (Save_Buffer)
- {
- File_Offset+=Buffer_Offset;
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
- }
-
- //Parsing
- switch (Element_Code)
- {
- case 0 :
- Element_Info1C((FrameInfo.PTS!=(int64u)-1), __T("PTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/1000000)));
- Element_Info1(Frame_Count);
- Core();
- break;
- case 1 :
- Element_Info1C((FrameInfo.PTS!=(int64u)-1), __T("PTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/1000000)));
- Element_Info1(Frame_Count);
- HD();
- break;
- case 2 : TimeStamp(); break;
- default: ;
- }
-
- //Little Endian management
- if (Save_Buffer)
- {
- delete[] Buffer;
- Buffer=Save_Buffer; Save_Buffer=NULL;
- Buffer_Offset=Save_Buffer_Offset;
- Buffer_Size=Save_Buffer_Size;
- File_Offset-=Buffer_Offset;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::Core()
-{
- while (Element_Offset<Element_Size)
- {
- if (substreams_Count)
- {
- Element_Name("Block");
- Element_Begin1("syncframe");
- }
- Core_Frame();
- if (substreams_Count)
- Element_End0();
- }
-
- if (acmod_Max[0][0]==(int8u)-1)
- return; //Waiting for the first sync frame
-
- FILLING_BEGIN();
- //Counting
- if (Frame_Count==0)
- {
- Core_IsPresent=true;
- PTS_Begin=FrameInfo.PTS;
- }
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (bsid<=0x08)
- FrameInfo.DUR=32000000;
- else if (bsid<=0x09)
- FrameInfo.DUR=16000000; // Unofficial hack for low sample rate (e.g. 22.05 kHz)
- else if (bsid>0x0A && bsid<=0x10)
- {
- int64u numblks = numblkscod == 3 ? 6 : numblkscod + 1;
- FrameInfo.DUR=32000000*numblks/6;
- }
- if (fscod && AC3_SamplingRate[fscod])
- {
- FrameInfo.DUR*=48000;
- FrameInfo.DUR/=AC3_SamplingRate[fscod];
- }
- if (fscod==3 && AC3_SamplingRate2[fscod2])
- {
- FrameInfo.DUR*=48000;
- FrameInfo.DUR/=AC3_SamplingRate2[fscod2];
- }
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.DTS+=FrameInfo.DUR;
- if (FrameInfo.PTS!=(int64u)-1)
- FrameInfo.PTS=FrameInfo.DTS;
-
- if (File_Offset+Buffer_Offset+Element_Size==File_Size)
- Frame_Count_Valid=Frame_Count; //Finish frames in case of there are less than Frame_Count_Valid frames
-
- //Filling
- if (!Status[IsAccepted])
- Accept("AC-3");
- if (!Status[IsFilled] && Frame_Count>=Frame_Count_Valid)
- {
- Fill("AC-3");
-
- //No more need data
- if (!IsSub && MediaInfoLib::Config.ParseSpeed_Get()<1)
- Finish("AC-3");
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::Core_Frame()
-{
- //Parsing
- int16u frmsiz=0, chanmap=0;
- int8u dialnorm=(int8u)-1, dialnorm2=(int8u)-1, compr=(int8u)-1, compr2=(int8u)-1, dynrng=(int8u)-1, dynrng2=(int8u)-1;
- int8u strmtyp=0, substreamid=0, acmod=0, bsmod=0, dsurmod=0;
- bool compre=false, compr2e=false, dynrnge=false, dynrng2e=false;
- bool lfeon=false, chanmape=false;
- if (bsid<=0x09)
- {
- Element_Begin1("synchinfo");
- Skip_B2( "syncword");
- Skip_B2( "crc1");
- BS_Begin();
- Get_S1 (2, fscod, "fscod - Sample Rate Code"); Param_Info2(AC3_SamplingRate[fscod], " Hz");
- Get_S1 (6, frmsizecod, "frmsizecod - Frame Size Code"); if (frmsizecod/2<19) {Param_Info2(AC3_BitRate[frmsizecod/2]*1000, " bps");}
- Element_End0();
- Element_Begin1("bsi");
- Get_S1 (5, bsid, "bsid - Bit Stream Identification");
- Get_S1 (3, bsmod, "bsmod - Bit Stream Mode"); Param_Info1(AC3_Mode[bsmod]);
- Get_S1 (3, acmod, "acmod - Audio Coding Mode"); Param_Info1(AC3_ChannelPositions[acmod]);
- if ((acmod&1) && acmod!=1) //central present
- Skip_S1(2, "cmixlev - Center Mix Level");
- if (acmod&4) //back present
- Skip_S1(2, "surmixlev - Surround Mix Level");
- if (acmod==2)
- Get_S1 (2, dsurmod, "dsurmod - Dolby Surround Mode"); Param_Info1(AC3_Surround[dsurmod]);
- Get_SB ( lfeon, "lfeon - Low Frequency Effects");
- Get_S1 (5, dialnorm, "dialnorm - Dialogue Normalization");
- Get_SB ( compre, "compre - Compression Gain Word Exists");
- if (compre)
- Get_S1 (8, compr, "compr - Compression Gain Word");
- TEST_SB_SKIP( "langcode - Language Code Exists");
- Skip_S1(8, "langcod - Language Code");
- TEST_SB_END();
- TEST_SB_SKIP( "audprodie - Audio Production Information Exists");
- Skip_S1(8, "mixlevel - Mixing Level");
- Skip_S1(2, "roomtyp - Room Type");
- TEST_SB_END();
- if (acmod==0) //1+1 mode
- {
- Get_S1 (5, dialnorm2, "dialnorm2 - Dialogue Normalization");
- Get_SB ( compr2e, "compr2e - Compression Gain Word Exists");
- if (compr2e)
- Get_S1 (8, compr2, "compr2 - Compression Gain Word");
- TEST_SB_SKIP( "langcod2e - Language Code Exists");
- Skip_S1(8, "langcod2 - Language Code");
- TEST_SB_END();
- TEST_SB_SKIP( "audprodi2e - Audio Production Information Exists");
- Skip_S1(8, "mixlevel2 - Mixing Level");
- Skip_S1(2, "roomtyp2 - Room Type");
- TEST_SB_END();
- }
- Skip_SB( "copyrightb - Copyright Bit");
- Skip_SB( "origbs - Original Bit Stream");
- TEST_SB_SKIP( "timecod1e");
- Skip_S1(14, "timecod1"); //Note: if timecod is used, change the bitstream parsing for bsid==0x06
- TEST_SB_END();
- TEST_SB_SKIP( "timecod2e");
- Skip_S1(14, "timecod2"); //Note: if timecod is used, change the bitstream parsing for bsid==0x06
- TEST_SB_END();
- TEST_SB_SKIP( "addbsie");
- int8u addbsil;
- Get_S1 (6, addbsil, "addbsil");
- for (int8u Pos=0; Pos<=addbsil; Pos++) //addbsil+1 bytes
- Skip_S1(8, "addbsi");
- TEST_SB_END();
- Element_End0();
- Element_Begin1("audblk");
- for (int8u Pos=0; Pos<AC3_Channels[acmod]; Pos++)
- Skip_SB( "blksw - Block Switch Flag");
- for (int8u Pos=0; Pos<AC3_Channels[acmod]; Pos++)
- Skip_SB( "dithflag - Dither Flag");
- Get_SB ( dynrnge, "dynrnge - Dynamic Range Gain Word Exists");
- if (dynrnge)
- Get_S1 (8, dynrng, "dynrng - Dynamic Range Gain Word");
- if (acmod==0) //1+1 mode
- {
- Get_SB ( dynrng2e, "dynrng2e - Dynamic Range Gain Word Exists");
- if (dynrng2e)
- Get_S1 (8, dynrng2, "dynrng2 - Dynamic Range Gain Word");
- }
- BS_End();
- Element_End0();
- Skip_XX(Element_Size-Element_Offset, "audblk(continue)+5*audblk+auxdata+errorcheck");
- }
- else if (bsid>0x0A && bsid<=0x10)
- {
- Element_Begin1("synchinfo");
- Skip_B2( "syncword");
- Element_End0();
- Element_Begin1("bsi");
- BS_Begin();
- size_t Bits_Begin=Data_BS_Remain();
- Get_S1 ( 2, strmtyp, "strmtyp");
- Get_S1 ( 3, substreamid, "substreamid");
- Get_S2 (11, frmsiz, "frmsiz");
- Get_S1 ( 2, fscod, "fscod"); Param_Info2(AC3_SamplingRate[fscod], " Hz");
- if (fscod==3)
- {
- Get_S1 ( 2, fscod2, "fscod2"); Param_Info2(AC3_SamplingRate2[fscod2], " Hz");
- numblkscod=3;
- }
- else
- Get_S1 ( 2, numblkscod, "numblkscod");
- Get_S1 (3, acmod, "acmod - Audio Coding Mode"); Param_Info1(AC3_ChannelPositions[acmod]);
- Get_SB ( lfeon, "lfeon - Low Frequency Effects");
- Get_S1 (5, bsid, "bsid - Bit Stream Identification");
- Get_S1 (5, dialnorm, "dialnorm");
- TEST_SB_GET(compre, "compre");
- Get_S1 (8, compr, "compr");
- TEST_SB_END();
- if (acmod==0) //1+1 mode
- {
- Get_S1 (5, dialnorm2, "dialnorm2");
- TEST_SB_GET(compr2e, "compr2e");
- Get_S1 (8, compr2, "compr2");
- TEST_SB_END();
- }
- if (strmtyp==1) //dependent stream
- {
- TEST_SB_GET (chanmape, "chanmape");
- Get_S2(16, chanmap, "chanmap"); Param_Info1(AC3_chanmap_ChannelPositions(chanmap));
- TEST_SB_END();
- }
- Element_End0();
- if (Data_BS_Remain()<17)
- {
- BS_End();
- Trusted_IsNot("Not enough data");
- }
- else
- {
- Element_Begin1("errorcheck");
- size_t BitsUpToEndOfFrame=(frmsiz*2)*8-(Bits_Begin-Data_BS_Remain());
- Skip_BS(BitsUpToEndOfFrame-17, "bsi(continue)+audfrm+x*audblk+auxdata+errorcheck");
- Skip_SB( "encinfo");
- BS_End();
- Skip_B2( "crc2");
- Element_End0();
- }
- }
-
- FILLING_BEGIN();
- if (bsid>0x10)
- return; //Not supported
-
- //Information
- if (strmtyp>1)
- strmtyp=0; //TODO: check a file with strmtyp==2
- if (strmtyp==0)
- substreamid_Independant_Current=substreamid;
- if (bsid_Max==(int8u)-1 || bsid>bsid_Max)
- bsid_Max=bsid;
-
- //Specific to first frame
- if (Frame_Count==0)
- {
- frmsizplus1_Max[substreamid_Independant_Current][strmtyp+substreamid]=frmsiz+1;
- acmod_Max[substreamid_Independant_Current][strmtyp+substreamid]=acmod;
- lfeon_Max[substreamid_Independant_Current][strmtyp+substreamid]=lfeon;
- bsmod_Max[substreamid_Independant_Current][strmtyp+substreamid]=bsmod;
- dsurmod_Max[substreamid_Independant_Current][strmtyp+substreamid]=dsurmod;
- chanmape_Max[substreamid_Independant_Current][strmtyp+substreamid]=chanmape;
- chanmap_Max[substreamid_Independant_Current][strmtyp+substreamid]=chanmap;
-
- FirstFrame_Dolby.dialnorm=dialnorm;
- if (compre)
- FirstFrame_Dolby.compr=compr;
- if (dynrnge)
- FirstFrame_Dolby.dynrng=dynrng;
- FirstFrame_Dolby.compre=compre;
- FirstFrame_Dolby.dynrnge=dynrnge;
- if (acmod==0) //1+1 mode
- {
- FirstFrame_Dolby2.dialnorm=dialnorm2;
- if (compr2e)
- FirstFrame_Dolby2.compr=compr2;
- if (dynrng2e)
- FirstFrame_Dolby2.dynrng=dynrng2;
- FirstFrame_Dolby2.compre=compr2e;
- FirstFrame_Dolby2.dynrnge=dynrng2e;
- }
- }
-
- //Stats
- if (dialnorms.empty())
- dialnorms.resize(32);
- dialnorms[dialnorm]++;
- if (compre)
- {
- if (comprs.empty())
- comprs.resize(256);
- comprs[compr]++;
- }
- if (dynrnge)
- {
- //Saving new value
- dynrnge_Exists=true;
- dynrng_Old=dynrng;
- }
- if (!dynrnge)
- dynrng=0;
- if (dynrngs.empty())
- dynrngs.resize(256);
- dynrngs[dynrng]++;
- if (acmod==0) //1+1 mode
- {
- if (dialnorm2s.empty())
- dialnorm2s.resize(32);
- dialnorm2s[dialnorm2]++;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::HD()
-{
- //Parsing
- int32u Synch;
- Peek_B3(Synch);
- if (Synch==0xF8726F)
- {
- if (Buffer_Offset+28>Buffer_Size)
- {
- Trusted_IsNot("Not enough data");
- return; //Need more data
- }
-
- //Testing
- /* Not working
- int16u CRC_16_Table_HD[256];
- CRC16_Init(CRC_16_Table_HD, 0x002D);
-
- int16u CRC_16=0x0000;
- const int8u* CRC_16_Buffer=Buffer+Buffer_Offset;
- while(CRC_16_Buffer<Buffer+Buffer_Offset+24)
- {
- CRC_16=(CRC_16<<8) ^ CRC_16_Table_HD[(CRC_16>>8)^(*CRC_16_Buffer)];
- CRC_16_Buffer++;
- }
- CRC_16^=LittleEndian2int16u(Buffer+Buffer_Offset+24);
- */
-
- Element_Begin1("MajorSync");
- Skip_B3( "Synch");
- Get_B1 (HD_StreamType, "Stream type"); Param_Info1(AC3_HD_StreamType(HD_StreamType));
-
- if (HD_StreamType==0xBA)
- {
- BS_Begin();
- Get_S1 ( 4, HD_SamplingRate1, "Sampling rate"); Param_Info2(AC3_HD_SamplingRate(HD_SamplingRate1), " Hz");
- Skip_S1( 8, "Unknown");
- Get_S1 ( 5, HD_Channels1, "Channels (1st substream)"); Param_Info1(AC3_TrueHD_Channels(HD_Channels1)); Param_Info1(Ztring().From_Local(AC3_TrueHD_Channels_Positions(HD_Channels1)));
- Skip_S1( 2, "Unknown");
- Get_S2 (13, HD_Channels2, "Channels (2nd substream)"); Param_Info1(AC3_TrueHD_Channels(HD_Channels2)); Param_Info1(Ztring().From_Local(AC3_TrueHD_Channels_Positions(HD_Channels2)));
- BS_End();
- HD_Resolution2=HD_Resolution1=24; //Not sure
- HD_SamplingRate2=HD_SamplingRate1;
- }
- else if (HD_StreamType==0xBB)
- {
- BS_Begin();
- Get_S1 ( 4, HD_Resolution1, "Resolution1"); Param_Info2(AC3_MLP_Resolution[HD_Resolution1], " bits");
- Get_S1 ( 4, HD_Resolution2, "Resolution2"); Param_Info2(AC3_MLP_Resolution[HD_Resolution2], " bits");
- Get_S1 ( 4, HD_SamplingRate1, "Sampling rate"); Param_Info2(AC3_HD_SamplingRate(HD_SamplingRate1), " Hz");
- Get_S1 ( 4, HD_SamplingRate2, "Sampling rate"); Param_Info2(AC3_HD_SamplingRate(HD_SamplingRate2), " Hz");
- Skip_S1(11, "Unknown");
- Get_S1 ( 5, HD_Channels1, "Channels"); Param_Info1(AC3_MLP_Channels[HD_Channels1]);
- BS_End();
- HD_Channels2=HD_Channels1;
- }
- else
- {
- Skip_XX(Element_Size-Element_Offset, "Data");
- return;
- }
-
- Skip_B6( "Unknown");
- BS_Begin();
- Get_SB ( HD_IsVBR, "Is VBR");
- Get_S2 (15, HD_BitRate_Max, "Maximum bitrate"); Param_Info2((HD_BitRate_Max*(AC3_HD_SamplingRate(HD_SamplingRate2)?AC3_HD_SamplingRate(HD_SamplingRate2):AC3_HD_SamplingRate(HD_SamplingRate1))+8)>>4, " bps");
- Get_S1 ( 4, HD_SubStreams_Count, "SubStreams_Count");
- Skip_S1( 4, "Unknown");
- BS_End();
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Element_End0();
-
- FILLING_BEGIN();
- HD_MajorSync_Parsed=true;
-
- if (HD_SubStreams_Count==1 && HD_StreamType==0xBB) //MLP with only 1 stream
- {
- HD_Resolution2=HD_Resolution1;
- HD_SamplingRate2=HD_SamplingRate1;
- }
- FILLING_END();
- }
-
- /*
- if (HD_MajorSync_Parsed)
- {
- Element_Begin1("Sizes");
- std::vector<int16u> Sizes;
- for (int8u Pos=0; Pos<HD_SubStreams_Count; Pos++)
- {
- Element_Begin1("Size");
- int16u Size;
- bool HD_Unknown1_Present, HD_NoRestart, HD_ExtraParity;
- BS_Begin();
- Get_SB ( HD_Unknown1_Present, "Unknown present"); //Only TrueHD
- Get_SB ( HD_NoRestart, "No restart"); //Not present if MajorSync, present if no MajorSync
- Get_SB ( HD_ExtraParity, "Extra parity information");
- Skip_SB( "Unknown");
- Get_S2 (12, Size, "Size");
- BS_End();
- if (HD_Unknown1_Present)
- Skip_B2( "Unknown");
- Sizes.push_back(Size);
- Element_End0();
- }
- Element_End0();
-
- int64u Element_Offset_Begin=Element_Offset;
- for (int8u Pos=0; Pos<HD_SubStreams_Count; Pos++)
- {
- Element_Begin1("Block");
- bool DecodingParameterBlockPresent;
- BS_Begin();
- Get_SB (DecodingParameterBlockPresent, "Decoding parameter block is present");
- if (DecodingParameterBlockPresent)
- {
- TEST_SB_SKIP( "Restart header");
- int16u SyncWord;
- int8u max_matrix_channel;
- Get_S2(13, SyncWord, "SyncWord");
- if (SyncWord==0x18F5)
- {
- Skip_SB( "noise_type"); //Only for TrueHD
- Skip_S2(16, "Output timestamp");
- Skip_S1( 4, "min_channel");
- Skip_S1( 4, "max_channel");
- Get_S1 ( 4, max_matrix_channel, "max_matrix_channel");
- Skip_S1( 4, "noise_shift");
- Skip_S3(23, "noisegen_seed");
- Skip_S3(19, "unknown");
- Skip_SB( "data_check_present");
- Skip_S1( 8, "lossless_check");
- Skip_S2(16, "unknown");
- for (int8u matrix_channel=0; matrix_channel<max_matrix_channel; matrix_channel++)
- Skip_S1(6, "ch_assign");
- Skip_S1( 8, "checksum");
- }
- TEST_SB_END();
- }
- BS_End();
- Skip_XX(Element_Offset_Begin+Sizes[Pos]*2-Element_Offset, "Data");
- Element_End0();
- }
- }
- else
- Skip_XX(Element_Size-Element_Offset, "Waiting for MajorSync...");
- */
- Skip_XX(Element_Size-Element_Offset, "(Data)");
-
- FILLING_BEGIN_PRECISE();
- if (Frame_Count==0)
- PTS_Begin=FrameInfo.PTS;
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- FrameInfo.DUR=833333;
- int64u HD_SamplingRate=AC3_HD_SamplingRate(HD_SamplingRate1);
- if (HD_SamplingRate && HD_SamplingRate!=48000)
- {
- FrameInfo.DUR*=48000;
- FrameInfo.DUR/=HD_SamplingRate;
- }
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.DTS+=FrameInfo.DUR;
- if (FrameInfo.PTS!=(int64u)-1)
- FrameInfo.PTS=FrameInfo.DTS;
-
- //Filling
- if (!Status[IsAccepted])
- {
- Accept("AC-3");
- if (Frame_Count_Valid<10000)
- Frame_Count_Valid*=32;
- }
- if (!Status[IsFilled] && !Core_IsPresent && Frame_Count>=Frame_Count_Valid)
- {
- Fill("AC-3");
-
- //No more need data
- if (!IsSub && MediaInfoLib::Config.ParseSpeed_Get()<1)
- Finish("AC-3");
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::TimeStamp()
-{
- //Parsing
- int8u H1, H2, M1, M2, S1, S2, F1, F2;
- Skip_B1( "Magic value");
- Skip_B1( "Size?");
- BS_Begin();
- Skip_S1(8, "H");
- Get_S1 (4, H1, "H");
- Get_S1( 4, H2, "H");
- Skip_S1(8, "M");
- Get_S1 (4, M1, "M");
- Get_S1( 4, M2, "M");
- Skip_S1(8, "S");
- Get_S1 (4, S1, "S");
- Get_S1( 4, S2, "S");
- Skip_S1(8, "F");
- Get_S1 (4, F1, "F");
- Get_S1( 4, F2, "F");
- BS_End();
- Skip_B2( "Unknown");
- Skip_B2( "Unknown");
- Skip_B2( "Unknown (fixed)");
-
- FILLING_BEGIN();
- float64 Temp=H1*10*60*60
- + H2 *60*60
- + M1 *10*60
- + M2 *60
- + S1 *10
- + S2
- + (F1*10+F2)/29.97; //No idea about where is the frame rate
- #ifdef MEDIAINFO_TRACE
- Element_Info1(Ztring::ToZtring(H1)+Ztring::ToZtring(H2)+__T(':')
- + Ztring::ToZtring(M1)+Ztring::ToZtring(M2)+__T(':')
- + Ztring::ToZtring(S1)+Ztring::ToZtring(S2)+__T(':')
- + Ztring::ToZtring(F1)+Ztring::ToZtring(F2));
- #endif //MEDIAINFO_TRACE
- if (Frame_Count==0)
- TimeStamp_Content=Temp;
- TimeStamp_IsParsing=false;
- TimeStamp_Parsed=true;
-
- if (!TimeStamp_DropFrame_IsValid && M2 && !S2 && !S1 && !F1)
- {
- //If drop frame configuration, frames 0 and 1 are dropped for every minutes except 00 10 20 30 40 50
- switch (F2)
- {
- case 0 :
- case 1 :
- TimeStamp_DropFrame_IsValid=true;
- TimeStamp_DropFrame_Content=false;
- break;
- case 2 :
- if (Frame_Count>=2)
- {
- TimeStamp_DropFrame_IsValid=true;
- TimeStamp_DropFrame_Content=true;
- }
- default: ;
- }
-
- if (TimeStamp_DropFrame_IsValid)
- Frame_Count_Valid=32; //Reset
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::dac3()
-{
- BS_Begin();
- Get_S1 (2, fscod, "fscod");
- Get_S1 (5, bsid, "bsid");
- Get_S1 (3, bsmod_Max[0][0], "bsmod");
- Get_S1 (3, acmod_Max[0][0], "acmod");
- Get_SB ( lfeon_Max[0][0], "lfeon");
- Get_S1 (5, frmsizecod, "bit_rate_code"); frmsizecod*=2;
- Skip_S1(5, "reserved");
- BS_End();
-
- MustParse_dac3=false;
- dxc3_Parsed=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Ac3::dec3()
-{
- //Parsing
- BS_Begin();
- int8u num_ind_sub;
- Skip_S2(13, "data_rate");
- Get_S1 ( 3, num_ind_sub, "num_ind_sub");
- for (int8u Pos=0; Pos<=num_ind_sub; Pos++)
- {
- Element_Begin1("independent substream");
- int8u num_dep_sub;
- Get_S1 (2, fscod, "fscod");
- Get_S1 (5, bsid, "bsid");
- Get_S1 (3, bsmod_Max[Pos][0], "bsmod");
- Get_S1 (3, acmod_Max[Pos][0], "acmod");
- Get_SB ( lfeon_Max[Pos][0], "lfeon");
- Skip_S1(3, "reserved");
- Get_S1 (4, num_dep_sub, "num_dep_sub");
- if (num_dep_sub>0)
- Skip_S2(9, "chan_loc");
- else
- Skip_SB( "reserved");
- Element_End0();
- }
- BS_End();
-
- MustParse_dec3=false;
- dxc3_Parsed=true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Ac3::FrameSynchPoint_Test()
-{
- if (Save_Buffer)
- return true; //Test already made by Synchronize()
-
- if (Buffer[Buffer_Offset ]==0x0B
- && Buffer[Buffer_Offset+1]==0x77) //AC-3
- {
- bsid=CC1(Buffer+Buffer_Offset+5)>>3;
- int16u Size=0;
- if (bsid<=0x09)
- {
- int8u fscod =(CC1(Buffer+Buffer_Offset+4)>>6)&0x03;
- int8u frmsizecod=(CC1(Buffer+Buffer_Offset+4) )&0x3F;
- Size=AC3_FrameSize_Get(frmsizecod, fscod);
- }
- else if (bsid>0x0A && bsid<=0x10)
- {
- int16u frmsiz=CC2(Buffer+Buffer_Offset+2)&0x07FF;
- Size=2+frmsiz*2;
- }
- if (Size>=6)
- {
- if (Buffer_Offset+Size>Buffer_Size)
- return false; //Need more data
- if (CRC_Compute(Size))
- {
- Synched=true;
- return true;
- }
- }
- }
-
- if (Buffer[Buffer_Offset+0]==0x77
- && Buffer[Buffer_Offset+1]==0x0B) //AC-3 LE
- {
- bsid=CC1(Buffer+Buffer_Offset+4)>>3;
- int16u Size=0;
- if (bsid<=0x09)
- {
- int8u fscod =(CC1(Buffer+Buffer_Offset+5)>>6)&0x03;
- int8u frmsizecod=(CC1(Buffer+Buffer_Offset+5) )&0x3F;
- Size=AC3_FrameSize_Get(frmsizecod, fscod);
- }
- else if (bsid>0x0A && bsid<=0x10)
- {
- int16u frmsiz=LittleEndian2int16u(Buffer+Buffer_Offset+2)&0x07FF;
- Size=2+frmsiz*2;
- }
- if (Size>=6)
- {
- if (Buffer_Offset+Size>Buffer_Size)
- return false; //Need more data
-
- Save_Buffer=Buffer;
- Save_Buffer_Offset=Buffer_Offset;
- Save_Buffer_Size=Buffer_Size;
-
- //Exception handling
- try
- {
- int8u* Buffer_Little=new int8u[Size];
- for (size_t Pos=0; Pos+1<Size; Pos+=2)
- {
- Buffer_Little[Pos+1]=Save_Buffer[Buffer_Offset+Pos ];
- Buffer_Little[Pos ]=Save_Buffer[Buffer_Offset+Pos+1];
- }
- Buffer=Buffer_Little;
- Buffer_Offset=0;
- Buffer_Size=Size;
-
- Synched=CRC_Compute(Size);
-
- if (Synched)
- {
- BigEndian=false;
-
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
-
- return true;
- }
-
- delete[] Buffer_Little;
- }
- catch(...)
- {
- }
- Buffer=Save_Buffer; Save_Buffer=NULL;
- Buffer_Offset=Save_Buffer_Offset;
- Buffer_Size=Save_Buffer_Size;
- }
- }
-
- if (HD_MajorSync_Parsed
- || (Buffer[Buffer_Offset+4]==0xF8
- && Buffer[Buffer_Offset+5]==0x72
- && Buffer[Buffer_Offset+6]==0x6F
- && (Buffer[Buffer_Offset+7]&0xFE)==0xBA)) //TrueHD or MLP
- {
- HD_IsPresent=true;
- Synched=true;
- return true;
- }
-
- Synched=false;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Ac3::CRC_Compute(size_t Size)
-{
- //Config
- if (!IgnoreCrc_Done)
- {
- IgnoreCrc=Config->File_Ac3_IgnoreCrc_Get();
- IgnoreCrc_Done=true;
- }
- if (IgnoreCrc && !Status[IsAccepted]) //Else there are some wrong synchronizations
- {
- MediaInfo_Internal MI;
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- size_t MiOpenResult=MI.Open(File_Name);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (MiOpenResult)
- {
- Ztring Format=MI.Get(Stream_General, 0, General_Format);
- if (Format!=__T("AC-3") && Format!=__T("E-AC-3"))
- IgnoreCrc=false;
- }
- else
- IgnoreCrc=false; // Problem
- }
- if (IgnoreCrc)
- return true;
-
- int16u CRC_16=0x0000;
- const int8u* CRC_16_Buffer=Buffer+Buffer_Offset+2; //After syncword
- const int8u* CRC_16_Buffer_5_8=Buffer+Buffer_Offset+(((Size>>2)+(Size>>4))<<1); //Magic formula to meet 5/8 frame size from Dolby
- const int8u* CRC_16_Buffer_EndMinus3=Buffer+Buffer_Offset+Size-3; //End of frame minus 3
- const int8u* CRC_16_Buffer_End=Buffer+Buffer_Offset+Size; //End of frame
- while(CRC_16_Buffer<CRC_16_Buffer_End)
- {
- CRC_16=(CRC_16<<8) ^ CRC_16_Table[(CRC_16>>8)^(*CRC_16_Buffer)];
-
- //CRC bytes inversion
- if (CRC_16_Buffer==CRC_16_Buffer_EndMinus3 && bsid<=0x09 && ((*CRC_16_Buffer)&0x01)) //CRC inversion bit
- {
- CRC_16_Buffer++;
- CRC_16=(CRC_16<<8) ^ CRC_16_Table[(CRC_16>>8)^((int8u)(~(*CRC_16_Buffer)))];
- CRC_16_Buffer++;
- CRC_16=(CRC_16<<8) ^ CRC_16_Table[(CRC_16>>8)^((int8u)(~(*CRC_16_Buffer)))];
- }
-
- CRC_16_Buffer++;
-
- //5/8 intermediate test
- if (CRC_16_Buffer==CRC_16_Buffer_5_8 && bsid<=0x09 && CRC_16!=0x0000)
- break;
- }
-
- return (CRC_16==0x0000);
-}
-
-//---------------------------------------------------------------------------
-size_t File_Ac3::Core_Size_Get()
-{
- int16u Size=1;
- bsid=(Buffer[(size_t)(Buffer_Offset+5)]&0xF8)>>3;
- if (bsid<=0x09)
- {
- fscod =(Buffer[(size_t)(Buffer_Offset+4)]&0xC0)>>6;
- frmsizecod= Buffer[(size_t)(Buffer_Offset+4)]&0x3F;
-
- //Filling
- fscods[fscod]++;
- frmsizecods[frmsizecod]++;
- Size=AC3_FrameSize_Get(frmsizecod, fscod);
- }
- else if (bsid>0x0A && bsid<=0x10)
- {
- int16u frmsiz =((int16u)(Buffer[(size_t)(Buffer_Offset+2)]&0x07)<<8)
- | ( Buffer[(size_t)(Buffer_Offset+3)] );
-
- //Filling
- Size=2+frmsiz*2;
-
- substreams_Count=0;
- int8u substreams_Count_Independant=0;
- int8u substreams_Count_Dependant=0;
- for (;;)
- {
- if (Buffer_Offset+Size+6>Buffer_Size)
- {
- if (!IsSub && !Save_Buffer)
- Element_WaitForMoreData();
- break;
- }
-
- int8u bsid=Buffer[Buffer_Offset+Size+5]>>3;
- if (bsid<=0x09 || bsid>0x10)
- break; //Not E-AC-3
-
- int8u substreamid=(Buffer[Buffer_Offset+Size+2]>>3)&0x07;
- if (substreamid!=substreams_Count_Independant)
- break; //Problem
- if (substreamid!=substreams_Count_Dependant)
- break; //Problem
-
- frmsiz =((int16u)(Buffer[(size_t)(Buffer_Offset+Size+2)]&0x07)<<8)
- | ( Buffer[(size_t)(Buffer_Offset+Size+3)] );
-
- //Filling
- Size+=2+frmsiz*2;
-
- int8u strmtyp = Buffer[Buffer_Offset + Size + 2] >> 6;
- if (strmtyp == 0)
- substreams_Count_Independant++;
- else
- substreams_Count_Dependant++;
- substreams_Count++;
- }
- }
-
- return Size;
-}
-
-//---------------------------------------------------------------------------
-size_t File_Ac3::HD_Size_Get()
-{
- size_t Size=BigEndian2int16u(Buffer+Buffer_Offset)&0x0FFF;
- Size*=2;
-
- return Size;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_AC3_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ac3.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ac3.h
deleted file mode 100644
index 4a5f28018..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ac3.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Ac3H
-#define MediaInfo_Ac3H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Ac3
-//***************************************************************************
-
-class File_Ac3 : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool MustParse_dac3;
- bool MustParse_dec3;
- bool CalculateDelay;
-
- //Constructor/Destructor
- File_Ac3();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- void Synched_Init();
- bool Synched_Test();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- void Read_Buffer_Continue ();
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Core();
- void Core_Frame();
- void HD();
- void TimeStamp();
- void dac3();
- void dec3();
- bool FrameSynchPoint_Test();
- bool CRC_Compute(size_t Size);
- size_t Core_Size_Get();
- size_t HD_Size_Get();
-
- //Buffer
- const int8u* Save_Buffer;
- size_t Save_Buffer_Offset;
- size_t Save_Buffer_Size;
-
- //Temp
- struct dolby
- {
- int8u dialnorm;
- int8u compr;
- int8u dynrng; //This is only the first occurence of aufblk
- bool compre;
- bool dynrnge; //This is only the first occurence of aufblk
-
- dolby()
- :
- dialnorm(0),
- compr(0),
- dynrng(0),
- compre(false),
- dynrnge(false)
- {
- }
- };
- dolby FirstFrame_Dolby;
- dolby FirstFrame_Dolby2;
- std::vector<int64u> dialnorms;
- std::vector<int64u> dialnorm2s;
- std::vector<int64u> comprs;
- std::vector<int64u> compr2s;
- std::vector<int64u> dynrngs;
- std::vector<int64u> dynrng2s;
- std::map<int8u, int64u> fscods;
- std::map<int8u, int64u> frmsizecods;
- int64u Frame_Count_HD;
- int16u chanmap_Max[8][9];
- int16u frmsizplus1_Max[8][9];
- int16u HD_BitRate_Max;
- int16u HD_Channels2;
- int8u fscod;
- int8u fscod2;
- int8u frmsizecod;
- int8u bsid;
- int8u bsid_Max;
- int8u bsmod_Max[8][9];
- int8u acmod_Max[8][9];
- int8u dsurmod_Max[8][9];
- int8u numblkscod;
- int8u HD_StreamType;
- int8u HD_SubStreams_Count;
- int8u HD_SamplingRate1;
- int8u HD_SamplingRate2;
- int8u HD_Channels1;
- int8u HD_Resolution1;
- int8u HD_Resolution2;
- int8u dynrng_Old;
- int8u substreamid_Independant_Current;
- int8u substreams_Count;
- bool lfeon_Max[8][9];
- bool dxc3_Parsed;
- bool HD_MajorSync_Parsed;
- bool HD_NoRestart;
- bool HD_ExtraParity;
- bool HD_IsVBR;
- bool Core_IsPresent;
- bool HD_IsPresent;
- bool dynrnge_Exists;
- bool chanmape_Max[8][9];
- bool TimeStamp_IsPresent;
- bool TimeStamp_IsParsing;
- bool TimeStamp_Parsed;
- bool TimeStamp_DropFrame_IsValid;
- bool TimeStamp_DropFrame_Content;
- bool BigEndian;
- bool IgnoreCrc_Done;
- bool IgnoreCrc;
- float64 TimeStamp_Content;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Adpcm.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Adpcm.cpp
deleted file mode 100644
index 2e8611c0a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Adpcm.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ADPCM_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Adpcm.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Adpcm::Read_Buffer_Continue()
-{
- //It is impossible to detect... Default is no detection, only filling
-
- //Filling
- Accept("ADPCM");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_General, 0, Audio_Format, "ADPCM");
- Fill(Stream_General, 0, Audio_Codec, "ADPCM");
- Ztring Profile, Firm;
- if (Codec==__T("alaw")) {Profile=__T("A-Law");}
- else if (Codec==__T("ulaw")) {Profile=__T("U-Law");}
- else if (Codec==__T("ima4")) { Firm=__T("IMA");}
- else if (Codec==__T("6")) {Profile=__T("A-Law");}
- else if (Codec==__T("7")) {Profile=__T("U-Law");}
- else if (Codec==__T("102")) {Profile=__T("A-Law");}
- else if (Codec==__T("171")) {Profile=__T("U-Law"); Firm=__T("Unisys");}
- else if (Codec==__T("172")) {Profile=__T("A-Law"); Firm=__T("Unisys");}
-
- if (!Profile.empty())
- Fill(Stream_Audio, 0, Audio_Format_Profile, Profile);
- if (!Firm.empty())
- {
- Fill(Stream_Audio, 0, Audio_Format_Settings, Firm);
- Fill(Stream_Audio, 0, Audio_Format_Settings_Firm, Firm);
- Fill(Stream_Audio, 0, Audio_Codec_Settings, Firm);
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Firm, Firm);
- }
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
-
- //No more need data
- Finish("ADPCM");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_ADPCM_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Adpcm.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Adpcm.h
deleted file mode 100644
index c111bcb34..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Adpcm.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ADPCM files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_AdpcmH
-#define MediaInfo_File_AdpcmH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Adpcm
-//***************************************************************************
-
-class File_Adpcm : public File__Analyze
-{
-public :
- //In
- ZenLib::Ztring Codec;
-
-protected :
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Als.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Als.cpp
deleted file mode 100644
index 6a7809a27..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Als.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG-4 ALS files
-// http://www.nue.tu-berlin.de/forschung/projekte/lossless/mp4als.html
-// http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio_Lossless_Coding_%28ALS%29
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ALS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Als.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Als::File_Als()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Als::Streams_Finish()
-{
- //Filling
- int64u CompressedSize=File_Size-TagsSize;
- float32 CompressionRatio=((float32)UncompressedSize)/CompressedSize;
-
- Fill(Stream_Audio, 0, Audio_StreamSize, CompressedSize);
- Fill(Stream_Audio, 0, Audio_Compression_Ratio, CompressionRatio);
-
- File__Tags_Helper::Streams_Finish();
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Als::FileHeader_Begin()
-{
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- //Synchro
- if (Buffer_Size<4)
- return false;
- if (Buffer[0]!=0x41 //"ALS\0"
- || Buffer[1]!=0x4C
- || Buffer[2]!=0x53
- || Buffer[3]!=0x00)
- {
- File__Tags_Helper::Reject("ALS");
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Als::FileHeader_Parse()
-{
- //Parsing
- int32u SampleRate, Samples;
- int16u Channels;
- int8u BitsPerSample, FileType;
- Skip_C4( "signature");
- Get_B4 (SampleRate, "sample rate");
- Get_B4 (Samples, "samples");
- Get_B2 (Channels, "channels-1"); Param_Info2(Channels+1, " channel(s)");
- BS_Begin();
- Get_S1 (3, FileType, "file type"); // WAV, RIFF, AIFF
- Get_S1 (3, BitsPerSample, "bits per sample"); Param_Info2((BitsPerSample+1)*8, " bits");
- Skip_SB( "floating point");
- Skip_SB( "samples are big-endian");
- BS_End();
-
- FILLING_BEGIN();
- if (SampleRate==0)
- return;
- Duration=((int64u)Samples)*1000/SampleRate;
- if (Duration==0)
- return;
- UncompressedSize=((int64u)Samples)*Channels*(BitsPerSample+1/8);
- if (UncompressedSize==0)
- return;
-
- File__Tags_Helper::Accept("ALS");
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "ALS");
- Fill(Stream_Audio, 0, Audio_Codec, "ALS");
- Fill(Stream_Audio, 0, Audio_BitDepth, (BitsPerSample+1)*8);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels+1);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SampleRate);
- Fill(Stream_Audio, 0, Audio_Duration, Duration);
-
- //No more need data
- File__Tags_Helper::Finish("ALS");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_ALS_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Als.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Als.h
deleted file mode 100644
index a0d8440fb..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Als.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_AlsH
-#define MediaInfo_File_AlsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Als
-//***************************************************************************
-
-class File_Als : public File__Analyze, public File__Tags_Helper
-{
-public :
- //Constructor/Destructor
- File_Als();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue() {File__Tags_Helper::Read_Buffer_Continue();}
-
- //Temp
- int64u Duration;
- int64u UncompressedSize;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amr.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amr.cpp
deleted file mode 100644
index c1e8ad552..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amr.cpp
+++ /dev/null
@@ -1,262 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AMR_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Amr.h"
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-int16u Amr_BitRate[]=
-{
- 5200,
- 5600,
- 6400,
- 7200,
- 8000,
- 8400,
- 10800,
- 12800,
- 3600,
- 3600,
- 3600,
- 3600,
- 0,
- 0,
- 0,
- 400,
-};
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Amr::File_Amr()
-:File__Analyze()
-{
- //Temp
- Header_Size=(int64u)-1;
- Frame_Number=0;
- FrameType=(int8u)-1;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Amr::FileHeader_Begin()
-{
- if (!Codec.empty()) //Test of header only if it is a file --> The codec field is empty
- return true;
-
- //Testing
- if (Buffer_Size<5)
- return false; //Must wait for more data
- if (CC5(Buffer)!=0x2321414D52LL) //"#!AMR"
- {
- Reject("AMR");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Amr::Streams_Fill()
-{
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "AMR");
- Fill(Stream_Audio, 0, Audio_Codec, "AMR");
- if (!Codec.empty())
- {
- if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Mpeg4, Codec, InfoCodecID_Profile)==__T("Narrow band"))
- IsWB=false;
- if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Mpeg4, Codec, InfoCodecID_Profile)==__T("Wide band"))
- IsWB=true;
- Channels=1;
- }
- if (Channels==0)
- return; //No more info
-
- if (Header_Size!=(int64u)-1)
- Fill(Stream_General, 0, General_StreamSize, Header_Size);
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- if (IsWB)
- {
- Fill(Stream_Audio, 0, Audio_Format_Profile, "Wide band");
- Fill(Stream_Audio, 0, Audio_Codec, "sawb", Unlimited, true, true);
- if (Codec.empty()) //If there is a container, trusting the container sampling rate
- Fill(Stream_Audio, 0, Audio_SamplingRate, 16000);
- Fill(Stream_Audio, 0, Audio_BitDepth, 14);
- //Fill(Stream_Audio, 0, Audio_InternetMediaType, "audio/AMR-WB", Unlimited, true, true);
- }
- else
- {
- Fill(Stream_Audio, 0, Audio_Format_Profile, "Narrow band");
- Fill(Stream_Audio, 0, Audio_Codec, "samr", Unlimited, true, true);
- if (Codec.empty()) //If there is a container, trusting the container sampling rate
- Fill(Stream_Audio, 0, Audio_SamplingRate, 8000);
- Fill(Stream_Audio, 0, Audio_BitDepth, 13);
- if (FrameType!=(int8u)-1 && Amr_BitRate[FrameType] && FrameTypes.size()==1)
- {
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
- Fill(Stream_Audio, 0, Audio_BitRate, Amr_BitRate[FrameType]);
- Fill(Stream_General, 0, General_OverallBitRate, Amr_BitRate[FrameType]);
- if (File_Size!=(int64u)-1)
- {
- Fill(Stream_Audio, 0, Audio_Duration, ((float32)(File_Size-Header_Size))*8*1000/Amr_BitRate[FrameType]);
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Amr::Streams_Finish()
-{
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Amr::FileHeader_Parse()
-{
- //From a container
- if (!Codec.empty())
- {
- Accept("AMR");
- Finish("AMR");
- return;
- }
-
- //Parsing
- int64u Signature;
- Skip_C5( "Signature (Common)");
- Peek_B8(Signature);
- if ((Signature&0xFF00000000000000LL)==0x0A00000000000000LL) //\n
- {
- IsWB=false;
- Channels=1;
- }
- else if ((Signature&0xFFFFFFFFFFFFFF00LL)==0x5F4D43312E300A00LL) //_MC1.0\n
- {
- IsWB=false;
- Channels=2; //Or more, see later
- }
- else if ((Signature&0xFFFFFF0000000000LL)==0x2D57420000000000LL) //-WB
- {
- Skip_C3( "Signature (WB)");
- IsWB=true;
-
- Peek_B8(Signature);
- if ((Signature&0xFF00000000000000LL)==0x0A00000000000000LL) //\n
- {
- Channels=1;
- }
- else if ((Signature&0xFFFFFFFFFFFFFF00LL)==0x5F4D43312E300A00LL) //_MC1.0\n
- {
- Channels=2; //Or more, see later
- }
- }
- else
- Channels=0;
- Skip_B1( "Signature (Carriage return)");
- /*
- if (Channels==2) //Mutli-channels
- {
- BS_Begin();
- Skip_S4(28, "Reserved");
- Get_S1 ( 4, Channels, "Channels");
- }
- */
- Header_Size=(int8u)Element_Offset;
-
-
- FILLING_BEGIN();
- Accept("AMR");
-
- if (Channels!=1 || IsWB)
- Finish("AMR");
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Amr::Header_Parse()
-{
- BS_Begin();
- Skip_SB( "Frame Following");
- Get_S1 ( 4, FrameType, "Frame Type");
- Skip_SB( "Frame Quality");
- Skip_SB( "Unknown");
- Skip_SB( "Unknown");
- BS_End();
-
- //Filling
- if (Amr_BitRate[FrameType]==0)
- {
- Finish("AMR");
- return;
- }
- Header_Fill_Size(Amr_BitRate[FrameType]/400);
- Header_Fill_Code(0, "frame");
-}
-
-//---------------------------------------------------------------------------
-void File_Amr::Data_Parse()
-{
- Element_Info1(Frame_Number);
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-
-
- FILLING_BEGIN();
- Frame_Number++;
- FrameTypes[FrameType]++;
- if (Frame_Number>=32)
- Finish("AMR");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_AMR_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amr.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amr.h
deleted file mode 100644
index c29f270d7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amr.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Musepack files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_AmrH
-#define MediaInfo_File_AmrH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <map>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Amr
-//***************************************************************************
-
-class File_Amr : public File__Analyze
-{
-public :
- //In
- ZenLib::Ztring Codec;
-
-public :
- File_Amr();
-
-protected :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse ();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Temp
- size_t Frame_Number;
- std::map<int8u, size_t> FrameTypes;
- int64u Header_Size;
- int8u FrameType;
- int8u Channels;
- bool IsWB;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amv.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amv.cpp
deleted file mode 100644
index 30d7a41db..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amv.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AMV_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Amv.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Amv::Read_Buffer_Continue()
-{
- Reject("AMV");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_AMV_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amv.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amv.h
deleted file mode 100644
index 667bc35b3..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Amv.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about asian AMV files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_AmvH
-#define MediaInfo_File_AmvH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Amv
-//***************************************************************************
-
-class File_Amv : public File__Analyze
-{
-protected :
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ape.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ape.cpp
deleted file mode 100644
index 422bb636f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ape.cpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_APE_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Ape.h"
-using namespace std;
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-int32u Ape_SamplesPerFrame(int16u Version, int16u CompressionLevel)
-{
- if (Version>=3950)
- return 73728*4;
- else if (Version>=3900)
- return 73728;
- else if (Version>=3800 && CompressionLevel==4000)
- return 73728;
- else
- return 9216;
-}
-
-//---------------------------------------------------------------------------
-const char* Ape_Codec_Settings(int16u Setting)
-{
- switch (Setting)
- {
- case 1000 : return "Fast";
- case 2000 : return "Normal";
- case 3000 : return "High";
- case 4000 : return "Extra-high";
- case 5000 : return "Insane";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ape::File_Ape()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ape::Streams_Finish()
-{
- //Filling
- int64u CompressedSize=File_Size-TagsSize;
- float32 CompressionRatio=((float32)UncompressedSize)/CompressedSize;
- int64u BitRate=Duration?(CompressedSize*8*1000/Duration):0;
-
- Fill(Stream_Audio, 0, Audio_Compression_Ratio, CompressionRatio);
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate);
-
- File__Tags_Helper::Streams_Finish();
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ape::FileHeader_Begin()
-{
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- //Testing
- if (Buffer_Size<Buffer_Offset+4)
- return false;
- if (Buffer[Buffer_Offset ]!=0x4D //"MAC "
- || Buffer[Buffer_Offset+1]!=0x41
- || Buffer[Buffer_Offset+2]!=0x43
- || Buffer[Buffer_Offset+3]!=0x20)
- {
- File__Tags_Helper::Reject("APE");
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Ape::FileHeader_Parse()
-{
- //Parsing
- int32u SampleRate=0, TotalFrames=0, FinalFrameSamples=0, SamplesPerFrame=0, SeekElements;
- int16u Version, CompressionLevel=0, Flags=0, Channels=0, Resolution=0;
- Skip_C4( "Identifier");
- Get_L2 (Version, "Version");
- if (Version<3980) //<3.98
- {
- bool Resolution8=false, Resolution24=false, no_wav_header;
- Get_L2 (CompressionLevel, "CompressionLevel"); Param_Info1(Ape_Codec_Settings(CompressionLevel));
- Get_L2 (Flags, "FormatFlags");
- Get_Flags (Flags, 0, Resolution8, "8-bit");
- Skip_Flags(Flags, 1, "crc-32");
- Skip_Flags(Flags, 2, "peak_level");
- Get_Flags (Flags, 3, Resolution24, "24-bit");
- Skip_Flags(Flags, 4, "seek_elements");
- Get_Flags (Flags, 5, no_wav_header, "no_wav_header");
- if (Resolution8)
- Resolution=8;
- else if (Resolution24)
- Resolution=24;
- else
- Resolution=16;
- Get_L2 (Channels, "Channels");
- Get_L4 (SampleRate, "SampleRate");
- Skip_L4( "WavHeaderDataBytes");
- Skip_L4( "WavTerminatingBytes");
- Get_L4 (TotalFrames, "TotalFrames");
- Get_L4 (FinalFrameSamples, "FinalFrameSamples");
- SamplesPerFrame=Ape_SamplesPerFrame(Version, CompressionLevel);
- Skip_L4( "PeakLevel");
- Get_L4 (SeekElements, "SeekElements");
- if (!no_wav_header)
- Skip_XX(44, "RIFF header");
- Skip_XX(SeekElements*4, "Seek table");
- }
- else
- {
- Skip_L2( "Version_High");
- Skip_L4( "DescriptorBytes");
- Skip_L4( "HeaderBytes");
- Skip_L4( "SeekTableBytes");
- Skip_L4( "WavHeaderDataBytes");
- Skip_L4( "APEFrameDataBytes");
- Skip_L4( "APEFrameDataBytesHigh");
- Skip_L4( "WavTerminatingDataBytes");
- Skip_L16( "FileMD5");
- Get_L2 (CompressionLevel, "CompressionLevel"); Param_Info1(Ape_Codec_Settings(CompressionLevel));
- Get_L2 (Flags, "FormatFlags");
- Get_L4 (SamplesPerFrame, "BlocksPerFrame");
- Get_L4 (FinalFrameSamples, "FinalFrameBlocks");
- Get_L4 (TotalFrames, "TotalFrames");
- Get_L2 (Resolution, "BitsPerSample");
- Get_L2 (Channels, "Channels");
- Get_L4 (SampleRate, "SampleRate");
- }
-
- FILLING_BEGIN();
- //Coherancy
- int32u Samples=(TotalFrames-1)*SamplesPerFrame+FinalFrameSamples;
- if (Samples==0 || SampleRate==0 || Channels==0 || Resolution==0)
- {
- File__Tags_Helper::Reject("APE");
- return;
- }
-
- //Filling
- File__Tags_Helper::Accept("APE");
- File__Tags_Helper::Streams_Fill();
-
- Duration=((int64u)Samples)*1000/SampleRate;
- UncompressedSize=Samples*Channels*(Resolution/8);
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "Monkey's Audio");
- Fill(Stream_Audio, 0, Audio_Encoded_Library_Settings, Ape_Codec_Settings(CompressionLevel));
- Fill(Stream_Audio, 0, Audio_Codec, "APE");
- Fill(Stream_Audio, 0, Audio_BitDepth, Resolution);
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- Fill(Stream_Audio, 0, Audio_SamplingRate, SampleRate);
- Fill(Stream_Audio, 0, Audio_Duration, Duration);
-
- //No more need data
- File__Tags_Helper::Finish("APE");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_APE_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ape.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ape.h
deleted file mode 100644
index 4cfa61aa4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ape.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Ape files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ApeH
-#define MediaInfo_File_ApeH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Ape
-//***************************************************************************
-
-class File_Ape : public File__Analyze, public File__Tags_Helper
-{
-public :
- //Constructor/Destructor
- File_Ape();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue() {File__Tags_Helper::Read_Buffer_Continue();}
-
- //Temp
- int64u Duration;
- int64u UncompressedSize;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Au.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Au.cpp
deleted file mode 100644
index 60e8db8f0..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Au.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Source: http://wiki.multimedia.cx/index.php?title=Au/snd
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AU_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Au.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Au_Format(int32u sample_format)
-{
- switch (sample_format)
- {
- case 1 : return "ADPCM";
- case 2 : return "PCM";
- case 3 : return "PCM";
- case 4 : return "PCM";
- case 5 : return "PCM";
- case 6 : return "PCM";
- case 7 : return "PCM";
- case 8 : return "fragmented sampled data";
- case 10 : return "DSP program";
- case 11 : return "PCM";
- case 12 : return "PCM";
- case 13 : return "PCM";
- case 14 : return "PCM";
- case 17 : return "ADPCM";
- case 18 : return "PCM";
- case 19 : return "PCM";
- case 20 : return "PCM";
- case 21 : return "Music Kit DSP commands";
- case 22 : return "Music Kit DSP samples";
- case 23 : return "ADPCM";
- case 24 : return "ADPCM";
- case 25 : return "ADPCM";
- case 26 : return "ADPCM";
- case 27 : return "ADPCM";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Au_sample_format(int32u sample_format)
-{
- switch (sample_format)
- {
- case 1 : return "8-bit mu-law";
- case 2 : return "8-bit signed linear";
- case 3 : return "16-bit signed linear";
- case 4 : return "24-bit signed linear";
- case 5 : return "32-bit signed linear";
- case 6 : return "floating-point";
- case 7 : return "double precision float";
- case 8 : return "fragmented sampled data";
- case 10 : return "DSP program";
- case 11 : return "8-bit fixed-point";
- case 12 : return "16-bit fixed-point";
- case 13 : return "24-bit fixed-point";
- case 14 : return "32-bit fixed-point";
- case 17 : return "mu-law squelch";
- case 18 : return "16-bit linear with emphasis";
- case 19 : return "16-bit linear with compression";
- case 20 : return "16-bit linear with emphasis and compression";
- case 21 : return "Music Kit DSP commands";
- case 22 : return "Music Kit DSP samples";
- case 23 : return "G.721 ADPCM";
- case 24 : return "G.722 ADPCM";
- case 25 : return "G.723 ADPCM";
- case 26 : return "5-bit G.723 ADPCM";
- case 27 : return "8-bit a-law";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Au::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- if (CC4(Buffer)!=0x2E736E64) //".snd"
- {
- Reject("AU");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Au::FileHeader_Parse()
-{
- //Parsing
- Ztring arbitrary;
- int32u data_start, data_size, sample_format, sample_rate, channels;
- Skip_B4( "Magic");
- Get_B4 (data_start, "data_start");
- Get_B4 (data_size, "data_size");
- Get_B4 (sample_format, "sample_format");
- Get_B4 (sample_rate, "sample_rate");
- Get_B4 (channels, "channels");
- if (data_start>24)
- Get_Local(data_start-24, arbitrary, "arbitrary data");
-
- FILLING_BEGIN();
- Accept("AU");
-
- Fill(Stream_General, 0, General_Format, "AU");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, Au_Format(sample_format));
- Fill(Stream_Audio, 0, Audio_CodecID, Au_sample_format(sample_format));
- Fill(Stream_Audio, 0, Audio_Codec, Au_sample_format(sample_format));
- Fill(Stream_Audio, 0, Audio_Channel_s_, channels);
- Fill(Stream_Audio, 0, Audio_SamplingRate, sample_rate);
- if (File_Size!=(int64u)-1)
- data_size=(int32u)File_Size-data_start; //Priority for File size
- if (sample_rate && data_size!=0 && data_size!=0xFFFFFFFF)
- Fill(Stream_Audio, 0, Audio_Duration, ((int64u)data_size)*1000/sample_rate);
- Fill(Stream_Audio, 0, Audio_StreamSize, File_Size-Element_Offset);
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
- Fill(Stream_General, 0, General_Comment, arbitrary);
-
- //No more need data
- Finish("AU");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_AU_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Au.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Au.h
deleted file mode 100644
index 7488039c8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Au.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about AU files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_AuH
-#define MediaInfo_File_AuH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Au
-//***************************************************************************
-
-class File_Au : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Celt.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Celt.cpp
deleted file mode 100644
index 09a8d25de..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Celt.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-// Note : the buffer must be given in ONE call
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_CELT_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Celt.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Celt::File_Celt()
-:File__Analyze()
-{
- //Internal
- Identification_Done=false;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Celt::Header_Parse()
-{
- //Filling
- Header_Fill_Code(0, "CELT");
- Header_Fill_Size(Element_Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Celt::Data_Parse()
-{
- //Parsing
- if (Identification_Done)
- Comment();
- else
- Identification();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Celt::Identification()
-{
- Element_Name("Identification");
-
- //Parsing
- Ztring celt_version;
- int32u Celt_version_id, sample_rate, nb_channels;
- Skip_Local(8, "celt_codec_id");
- Get_Local(20, celt_version, "celt_version");
- Get_L4 (Celt_version_id, "celt_version_id");
- Skip_L4( "header_size");
- Get_L4 (sample_rate, "rate");
- Get_L4 (nb_channels, "nb_channels");
- Skip_L4( "frame_size");
- Skip_L4( "overlap");
- Skip_L4( "bytes_per_packet");
- Skip_L4( "extra_headers");
-
- //Filling
- FILLING_BEGIN();
- Accept("CELT");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "CELT");
- Fill(Stream_Audio, 0, Audio_Codec, "CELT");
-
- if (!celt_version.empty())
- {
- //Fill(Stream_Audio, 0, Audio_Encoded_Library, celt_version); //Need more info about hte different possibilities, in the meanwhile trusting more the comment part
- Fill(Stream_Audio, 0, Audio_SamplingRate, sample_rate);
- Fill(Stream_Audio, 0, Audio_Channel_s_, nb_channels);
- }
-
- FILLING_END();
-
- //Filling
- Identification_Done=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Celt::Comment()
-{
- Element_Name("Comment?");
-
- while (Element_Offset<Element_Size)
- {
- Ztring value;
- int32u size;
- Get_L4(size, "size");
- if (size)
- Get_Local(size, value, "value");
-
- //Filling
- if (value.find(__T("CELT "))!=std::string::npos)
- {
- Ztring Version=value.SubString(__T("CELT "), __T(" ("));
- Fill(Stream_Audio, 0, Audio_Encoded_Library, __T("CELT ")+Version);
- Fill(Stream_Audio, 0, Audio_Encoded_Library_Name, __T("CELT"));
- Fill(Stream_Audio, 0, Audio_Encoded_Library_Version, Version);
- }
- else if (!value.empty())
- Fill(Stream_Audio, 0, "Comment", value);
- }
-
- Finish("CELT");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_CELT_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Celt.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Celt.h
deleted file mode 100644
index bbefc2bea..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Celt.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about CELT files
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_CeltH
-#define MediaInfo_File_CeltH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Celt
-//***************************************************************************
-
-class File_Celt : public File__Analyze
-{
-public :
- File_Celt();
-
-private :
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Identification();
- void Comment();
-
- //Temp
- bool Identification_Done;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ChannelGrouping.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ChannelGrouping.cpp
deleted file mode 100644
index 4c79f4e24..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ChannelGrouping.cpp
+++ /dev/null
@@ -1,389 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SMPTEST0337_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_ChannelGrouping.h"
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_SmpteSt0337.h"
-#endif
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-File_ChannelGrouping::File_ChannelGrouping()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_ChannelGrouping;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(0); //Container1
- #endif //MEDIAINFO_TRACE
- IsRawStream=true;
-
- //In
- BitDepth=0;
- SamplingRate=0;
- Endianness=0;
- Aligned=false;
- CanBePcm=false;
- Common=NULL;
- Channel_Pos=0;
- Channel_Total=1;
-}
-
-File_ChannelGrouping::~File_ChannelGrouping()
-{
- Common->Instances--;
-
- if (Common->Instances==0)
- {
- for (size_t Pos=0; Pos<Common->Channels.size(); Pos++)
- delete Common->Channels[Pos]; //Common->Channels[Pos]=NULL;
- delete Common; //Common=NULL;
- }
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ChannelGrouping::Streams_Fill()
-{
- Fill(Stream_General, 0, General_Format, "ChannelGrouping");
-
- if (Channel_Pos!=Common->Channels.size()-1)
- return;
-
- if (Common->Parsers.size()!=1 && CanBePcm) // Last parser is PCM, impossible to detect with another method if htere is only one block
- {
- for (size_t Pos=0; Pos<Common->Parsers.size()-1; Pos++)
- delete Common->Parsers[Pos];
- Common->Parsers.erase(Common->Parsers.begin(), Common->Parsers.begin()+Common->Parsers.size()-1);
- Common->Parsers[0]->Accept();
- Common->Parsers[0]->Fill();
- }
-
- if (Common->Parsers.size()!=1)
- return;
-
- Fill(Common->Parsers[0]);
- Merge(*Common->Parsers[0]);
-}
-
-//---------------------------------------------------------------------------
-void File_ChannelGrouping::Streams_Finish()
-{
- if (Channel_Pos!=Common->Channels.size()-1 || Common->Parsers.size()!=1)
- return;
-
- Finish(Common->Parsers[0]);
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ChannelGrouping::Read_Buffer_Init()
-{
- if (Common==NULL)
- {
- //Common
- Common=new common;
- Common->Channels.resize(Channel_Total);
- for (size_t Pos=0; Pos<Common->Channels.size(); Pos++)
- Common->Channels[Pos]=new common::channel;
- Element_Code=(int64u)-1;
-
- //SMPTE ST 337
- {
- File_SmpteSt0337* Parser=new File_SmpteSt0337;
- Parser->Container_Bits=BitDepth;
- Parser->Endianness=Endianness;
- Parser->Aligned=Aligned;
- Common->Parsers.push_back(Parser);
- }
-
- //PCM
- if (CanBePcm)
- {
- File_Pcm* Parser=new File_Pcm;
- Parser->BitDepth=BitDepth;
- Parser->Channels=Channel_Total;
- Parser->SamplingRate=SamplingRate;
- Parser->Endianness=Endianness;
- Common->Parsers.push_back(Parser);
- }
-
- //for all parsers
- for (size_t Pos=0; Pos<Common->Parsers.size(); Pos++)
- {
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Common->Parsers[Pos]->Demux_UnpacketizeContainer=true;
- Common->Parsers[Pos]->Demux_Level=2; //Container
- Demux_Level=4; //Intermediate
- }
- #endif //MEDIAINFO_DEMUX
- Open_Buffer_Init(Common->Parsers[Pos]);
- }
- }
- Common->Instances++;
- Common->Instances_Max++;
-}
-
-//---------------------------------------------------------------------------
-void File_ChannelGrouping::Read_Buffer_Continue()
-{
- //Verifying that all instances are still present
- if (Common->Instances!=Common->Instances_Max)
- {
- Reject();
- return;
- }
-
- //Handling of multiple frames in one block
- if (Buffer_Size==0)
- {
- Offsets_Stream.clear();
- Offsets_Buffer.clear();
- for (size_t Pos=0; Pos<Common->Parsers.size(); Pos++)
- Open_Buffer_Continue(Common->Parsers[Pos], Common->MergedChannel.Buffer+Common->MergedChannel.Buffer_Offset, 0, false);
- return;
- }
-
- //Demux
- #if MEDIAINFO_DEMUX
- Demux(Common->MergedChannel.Buffer+Common->MergedChannel.Buffer_Offset, Common->MergedChannel.Buffer_Size-Common->MergedChannel.Buffer_Offset, ContentType_MainStream);
- #endif //MEDIAINFO_EVENTS
-
- //Copying to Channel buffer
- if (Common->Channels[Channel_Pos]->Buffer_Size+Buffer_Size>Common->Channels[Channel_Pos]->Buffer_Size_Max)
- Common->Channels[Channel_Pos]->resize(Common->Channels[Channel_Pos]->Buffer_Size+Buffer_Size);
- memcpy(Common->Channels[Channel_Pos]->Buffer+Common->Channels[Channel_Pos]->Buffer_Size, Buffer, Buffer_Size);
- Common->Channels[Channel_Pos]->Buffer_Size+=Buffer_Size;
- Common->Channels[Channel_Pos]->Offsets_Stream.insert(Common->Channels[Channel_Pos]->Offsets_Stream.begin(), Offsets_Stream.begin(), Offsets_Stream.end());
- Offsets_Stream.clear();
- Common->Channels[Channel_Pos]->Offsets_Buffer.insert(Common->Channels[Channel_Pos]->Offsets_Buffer.begin(), Offsets_Buffer.begin(), Offsets_Buffer.end());
- Offsets_Buffer.clear();
- Skip_XX(Buffer_Size, "Channel grouping data");
- Common->Channel_Current++;
- if (Common->Channel_Current>=Channel_Total)
- Common->Channel_Current=0;
-
- //Copying to merged channel
- size_t Minimum=(size_t)-1;
- for (size_t Pos=0; Pos<Common->Channels.size(); Pos++)
- if (Minimum>Common->Channels[Pos]->Buffer_Size-Common->Channels[Pos]->Buffer_Offset)
- Minimum=Common->Channels[Pos]->Buffer_Size-Common->Channels[Pos]->Buffer_Offset;
- if (Minimum*8>=BitDepth)
- {
- for (size_t Pos=0; Pos<Common->Channels.size(); Pos++)
- {
- Common->MergedChannel.Offsets_Stream.insert(Common->MergedChannel.Offsets_Stream.end(), Common->Channels[Pos]->Offsets_Stream.begin(), Common->Channels[Pos]->Offsets_Stream.end());
- Common->Channels[Pos]->Offsets_Stream.clear();
- Common->MergedChannel.Offsets_Buffer.insert(Common->MergedChannel.Offsets_Buffer.end(), Common->Channels[Pos]->Offsets_Buffer.begin(), Common->Channels[Pos]->Offsets_Buffer.end());
- Common->Channels[Pos]->Offsets_Buffer.clear();
- }
-
- while (Minimum*8>=BitDepth)
- {
- switch (BitDepth)
- {
- case 16:
- // Source: 16XE / L3L2 L1L0 + R3R2 R1R0
- // Dest : 16XE / L3L2 L1L0 R3R2 R1R0
- for (size_t Pos=0; Pos<Common->Channels.size(); Pos++)
- {
- if (Common->MergedChannel.Buffer_Size+Minimum>Common->MergedChannel.Buffer_Size_Max)
- Common->MergedChannel.resize(Common->MergedChannel.Buffer_Size+Minimum);
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Common->Channels[Pos]->Buffer[Common->Channels[Pos]->Buffer_Offset++];
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Common->Channels[Pos]->Buffer[Common->Channels[Pos]->Buffer_Offset++];
- }
- Minimum-=2;
- break;
- case 20:
- // Source: 20BE / L4L3 L2L1 L0L4 L3L2 L1L0 + R4R3 R2R1 R0R4 R3R2 R1R0
- // Dest : 20BE / L4L3 L2L1 L0R4 R3R2 R1R0 L4L3 L2L1 L0R4 R2R1 R1R0
- if (Endianness=='B')
- for (size_t Pos=0; Pos+1<Common->Channels.size(); Pos+=2)
- {
- if (Common->MergedChannel.Buffer_Size+Minimum*2>Common->MergedChannel.Buffer_Size_Max)
- Common->MergedChannel.resize(Common->MergedChannel.Buffer_Size+Minimum*2);
- int8u* Channel1=Common->Channels[Pos]->Buffer+Common->Channels[Pos]->Buffer_Offset;
- int8u* Channel2=Common->Channels[Pos]->Buffer+Common->Channels[Pos]->Buffer_Offset;
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Channel1[0];
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Channel1[1];
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel1[0]&0xF0) | (Channel2[0]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel2[0]<<4 ) | (Channel2[1]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel2[1]<<4 ) | (Channel2[2]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel1[2]<<4 ) | (Channel1[3]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel1[3]<<4 ) | (Channel1[4]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel1[4]<<4 ) | (Channel2[2]&0x0F);
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Channel2[3];
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Channel2[4];
- Common->Channels[Pos]->Buffer_Offset+=5;
- Common->Channels[Pos+1]->Buffer_Offset+=5;
- }
- // Source: 20LE / L1L0 L3L2 L0L4 L2L1 L4L3 + R1R0 R3R2 R0R4 R2R1 R4R3
- // Dest : 20LE / L1L0 L3L2 R0L4 R2R1 R4R3 L1L0 L3L2 R0L4 R2R1 R4R3
- else
- for (size_t Pos=0; Pos+1<Common->Channels.size(); Pos+=2)
- {
- if (Common->MergedChannel.Buffer_Size+Minimum*2>Common->MergedChannel.Buffer_Size_Max)
- Common->MergedChannel.resize(Common->MergedChannel.Buffer_Size+Minimum*2);
- int8u* Channel1=Common->Channels[Pos]->Buffer+Common->Channels[Pos]->Buffer_Offset;
- int8u* Channel2=Common->Channels[Pos]->Buffer+Common->Channels[Pos]->Buffer_Offset;
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Channel1[0];
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Channel1[1];
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel2[0]<<4 ) | (Channel1[2]&0x0F);
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel2[1]<<4 ) | (Channel2[0]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel2[2]<<4 ) | (Channel2[1]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel1[3]<<4 ) | (Channel1[2]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel1[4]<<4 ) | (Channel1[3]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]=(Channel2[2]&0xF0) | (Channel1[4]>>4 );
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Channel2[3];
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Channel2[4];
- Common->Channels[Pos]->Buffer_Offset+=5;
- Common->Channels[Pos+1]->Buffer_Offset+=5;
- }
- Minimum-=5; //2.5 twice
- break;
- case 24:
- // Source: 24XE / L5L4 L3L2 L1L0 + R5R4 R3R2 R1R0
- // Dest : 24XE / L5L4 L3L2 L1L0 R5R4 R3R2 R1R0
- for (size_t Pos=0; Pos<Common->Channels.size(); Pos++)
- {
- if (Common->MergedChannel.Buffer_Size+Minimum>Common->MergedChannel.Buffer_Size_Max)
- Common->MergedChannel.resize(Common->MergedChannel.Buffer_Size+Minimum);
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Common->Channels[Pos]->Buffer[Common->Channels[Pos]->Buffer_Offset++];
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Common->Channels[Pos]->Buffer[Common->Channels[Pos]->Buffer_Offset++];
- Common->MergedChannel.Buffer[Common->MergedChannel.Buffer_Size++]= Common->Channels[Pos]->Buffer[Common->Channels[Pos]->Buffer_Offset++];
- }
- Minimum-=3;
- break;
- default: ;
- // Not supported
- Reject();
- return;
- }
- }
- }
-
- if (Common->MergedChannel.Buffer_Size>Common->MergedChannel.Buffer_Offset)
- {
- for (size_t Pos=0; Pos<Common->Parsers.size(); Pos++)
- {
- if (FrameInfo_Next.DTS!=(int64u)-1)
- Common->Parsers[Pos]->FrameInfo=FrameInfo_Next; //AES3 parse has its own buffer management
- else if (FrameInfo.DTS!=(int64u)-1)
- {
- Common->Parsers[Pos]->FrameInfo=FrameInfo;
- FrameInfo=frame_info();
- }
- Common->Parsers[Pos]->Offsets_Stream.insert(Common->Parsers[Pos]->Offsets_Stream.end(), Common->MergedChannel.Offsets_Stream.begin(), Common->MergedChannel.Offsets_Stream.end());
- Common->Parsers[Pos]->Offsets_Buffer.insert(Common->Parsers[Pos]->Offsets_Buffer.end(), Common->MergedChannel.Offsets_Buffer.begin(), Common->MergedChannel.Offsets_Buffer.end());
- for (size_t Offsets_Pos_Temp=Common->Parsers[Pos]->Offsets_Buffer.size()-Common->MergedChannel.Offsets_Buffer.size(); Offsets_Pos_Temp<Common->Parsers[Pos]->Offsets_Buffer.size(); Offsets_Pos_Temp++)
- Common->Parsers[Pos]->Offsets_Buffer[Offsets_Pos_Temp]+=Common->Parsers[Pos]->Buffer_Size/Common->Channels.size();
- Open_Buffer_Continue(Common->Parsers[Pos], Common->MergedChannel.Buffer+Common->MergedChannel.Buffer_Offset, Common->MergedChannel.Buffer_Size-Common->MergedChannel.Buffer_Offset, false);
-
- //Multiple parsers
- if (Common->Parsers.size()>1)
- {
- if (!Common->Parsers[Pos]->Status[IsAccepted] && Common->Parsers[Pos]->Status[IsFinished])
- {
- delete *(Common->Parsers.begin()+Pos);
- Common->Parsers.erase(Common->Parsers.begin()+Pos);
- Pos--;
- }
- else if (Common->Parsers.size()>1 && Common->Parsers[Pos]->Status[IsAccepted])
- {
- File__Analyze* Parser=Common->Parsers[Pos];
- for (size_t Pos2=0; Pos2<Common->Parsers.size(); Pos2++)
- {
- if (Pos2!=Pos)
- delete *(Common->Parsers.begin()+Pos2);
- }
- Common->Parsers.clear();
- Common->Parsers.push_back(Parser);
- }
- }
- }
- Common->MergedChannel.Buffer_Offset=Common->MergedChannel.Buffer_Size;
- Common->MergedChannel.Offsets_Stream.clear();
- Common->MergedChannel.Offsets_Buffer.clear();
- }
- if (!Status[IsAccepted] && Common->Parsers.size()==1 && Common->Parsers[0]->Status[IsAccepted])
- Accept();
- if (!Status[IsFilled] && Common->Parsers.size()==1 && Common->Parsers[0]->Status[IsFilled])
- Fill();
- if (!Status[IsFinished] && Common->Parsers.size()==1 && Common->Parsers[0]->Status[IsFinished])
- Finish();
-
- //Optimize buffer
- for (size_t Pos=0; Pos<Common->Channels.size(); Pos++)
- Common->Channels[Pos]->optimize();
- Common->MergedChannel.optimize();
-}
-
-//---------------------------------------------------------------------------
-void File_ChannelGrouping::Read_Buffer_Unsynched()
-{
- for (size_t Pos=0; Pos<Common->Parsers.size(); Pos++)
- if (Common->Parsers[Pos])
- Common->Parsers[Pos]->Open_Buffer_Unsynch();
-
- Common->MergedChannel.Buffer_Offset=0;
- Common->MergedChannel.Buffer_Size=0;
- for (size_t Pos=0; Pos<Common->Channels.size(); Pos++)
- {
- Common->Channels[Pos]->Buffer_Offset=0;
- Common->Channels[Pos]->Buffer_Size=0;
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_SMPTEST0337_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ChannelGrouping.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ChannelGrouping.h
deleted file mode 100644
index 920d3cf8c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ChannelGrouping.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Some containers use mono stream for AES3 (Stereo) grouping
-// We need to group the 2-mono streams in one before sending
-// data to AES parser
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ChannelGroupingH
-#define MediaInfo_File_ChannelGroupingH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <cstring>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_ChannelGrouping
-//***************************************************************************
-
-class File_ChannelGrouping : public File__Analyze
-{
-public :
- //In
- int8u BitDepth;
- int16u SamplingRate;
- int8u Endianness;
- bool Aligned;
- bool CanBePcm;
-
- struct common
- {
- struct channel
- {
- int8u* Buffer;
- size_t Buffer_Offset;
- size_t Buffer_Size;
- size_t Buffer_Size_Max;
- std::vector<int64u> Offsets_Stream;
- std::vector<int64u> Offsets_Buffer;
-
- channel()
- {
- Buffer=new int8u[32768];
- Buffer_Offset=0;
- Buffer_Size=0;
- Buffer_Size_Max=32768;
- }
-
- ~channel()
- {
- delete[] Buffer; //Buffer=NULL;
- }
-
- void resize(size_t NewSize)
- {
- if (NewSize<Buffer_Size_Max)
- return;
- int8u* Old=Buffer;
- if (NewSize<2*Buffer_Size_Max)
- Buffer_Size_Max*=2;
- else
- Buffer_Size_Max=NewSize;
- Buffer=new int8u[Buffer_Size_Max];
- std::memcpy(Buffer, Old, Buffer_Size);
- delete[] Old; //Old=NULL;
- }
-
- void optimize()
- {
- if (Buffer_Offset<Buffer_Size_Max/2)
- return;
- std::memcpy(Buffer, Buffer+Buffer_Offset, Buffer_Size-Buffer_Offset);
- Buffer_Size-=Buffer_Offset;
- Buffer_Offset=0;
- }
-
- };
- vector<channel*> Channels;
- channel MergedChannel;
- size_t Channel_Current;
- std::vector<File__Analyze*> Parsers;
- size_t Instances;
- size_t Instances_Max;
-
- common()
- {
- Channel_Current=0;
- Instances=0;
- Instances_Max=0;
- }
-
- ~common()
- {
- for (size_t Pos=0; Pos<Parsers.size(); Pos++)
- delete Parsers[Pos];
- }
- };
- int64u StreamID;
- common* Common;
- int8u Channel_Pos;
- int8u Channel_Total;
-
- //Constructor/Destructor
- File_ChannelGrouping();
- ~File_ChannelGrouping();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - Global
- void Read_Buffer_Init ();
- void Read_Buffer_Continue ();
- void Read_Buffer_Unsynched ();
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_DolbyE.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_DolbyE.cpp
deleted file mode 100644
index 5d56cedd5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_DolbyE.cpp
+++ /dev/null
@@ -1,969 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Important note about Dolby E parser:
-// Open-Source version of MediaInfo has basic support of Dolby E,
-// created by reverse engineering by an anonymous third-party,
-// with the limitions due to reverse engineering: there is a risk
-// of wrong interpretation of the reverse engineeried bitstream.
-// If you want a safer Dolby E support, based on Dolby E specifications,
-// contact http://www.dolby.com/about/contact_us/contactus.aspx?goto=28
-// for a license before asking it in a specific (and not Open-Source) version
-// of MediaInfo.
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DOLBYE_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_DolbyE.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const int8u DolbyE_Programs[64]=
-{2, 3, 2, 3, 4, 5, 4, 5, 6, 7, 8, 1, 2, 3, 3, 4, 5, 6, 1, 2, 3, 4, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-//---------------------------------------------------------------------------
-const int8u DolbyE_Channels[64]=
-{8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-//---------------------------------------------------------------------------
-const int8u DolbyE_Channels_PerProgram(int8u program_config, int8u program)
-{
- switch (program_config)
- {
- case 0 : switch (program)
- {
- case 0 : return 6;
- default : return 2;
- }
- case 1 : switch (program)
- {
- case 0 : return 6;
- default : return 1;
- }
- case 2 :
- case 18 : return 4;
- case 3 :
- case 12 : switch (program)
- {
- case 0 : return 4;
- default : return 2;
- }
- case 4 : switch (program)
- {
- case 0 : return 4;
- case 1 : return 2;
- default : return 1;
- }
- case 5 :
- case 13 : switch (program)
- {
- case 0 : return 4;
- default : return 1;
- }
- case 6 :
- case 14 :
- case 19 : return 2;
- case 7 : switch (program)
- {
- case 0 :
- case 1 :
- case 2 : return 2;
- default : return 1;
- }
- case 8 :
- case 15 : switch (program)
- {
- case 0 :
- case 1 : return 2;
- default : return 1;
- }
- case 9 :
- case 16 :
- case 20 : switch (program)
- {
- case 0 : return 2;
- default : return 1;
- }
- case 10 :
- case 17 :
- case 21 : return 1;
- case 11 : return 6;
- case 22 : return 8;
- case 23 : return 8;
- default : return 0;
- }
-};
-
-//---------------------------------------------------------------------------
-const char* DolbyE_ChannelPositions[64]=
-{
- "Front: L C R, Side: L R, LFE / Front: L R",
- "Front: L C R, Side: L R, LFE / Front: C / Front: C",
- "Front: L C R, LFE / Front: L C R, LFE",
- "Front: L C R, LFE / Front: L R / Front: L R",
- "Front: L C R, LFE / Front: L R / Front: C / Front: C",
- "Front: L C R, LFE / Front: C / Front: C / Front: C / Front: C",
- "Front: L R / Front: L R / Front: L R / Front: L R",
- "Front: L R / Front: L R / Front: L R / Front: C / Front: C",
- "Front: L R / Front: L R / Front: C / Front: C / Front: C / Front: C",
- "Front: L R / Front: C / Front: C / Front: C / Front: C / Front: C / Front: C",
- "Front: C / Front: C / Front: C / Front: C / Front: C / Front: C / Front: C / Front: C",
- "Front: L C R, Side: L R, LFE",
- "Front: L C R, LFE / Front: L R",
- "Front: L C R, LFE / Front: C / Front: C",
- "Front: L R / Front: L R / Front: L R",
- "Front: L R / Front: L R / Front: C / Front: C",
- "Front: L R / Front: C / Front: C / Front: C / Front: C",
- "Front: C / Front: C / Front: C / Front: C / Front: C / Front: C",
- "Front: L C R, LFE",
- "Front: L R / Front: L R",
- "Front: L R / Front: C / Front: C",
- "Front: C / Front: C / Front: C / Front: C",
- "Front: L C R, Side: L R, Rear: L R, LFE",
- "Front: L C C C R, Side: L R, LFE",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* DolbyE_ChannelPositions_PerProgram(int8u program_config, int8u program)
-{
- switch (program_config)
- {
- case 0 : switch (program)
- {
- case 0 : return "Front: L C R, Side: L R, LFE";
- default : return "Front: L R";
- }
- case 1 : switch (program)
- {
- case 0 : return "Front: L C R, Side: L R, LFE";
- default : return "Front: C";
- }
- case 2 :
- case 18 : return "Front: L C R, LFE";
- case 3 :
- case 12 : switch (program)
- {
- case 0 : return "Front: L C R, LFE";
- default : return "Front: L R";
- }
- case 4 : switch (program)
- {
- case 0 : return "Front: L C R, LFE";
- case 1 : return "Front: L R";
- default : return "Front: C";
- }
- case 5 :
- case 13 : switch (program)
- {
- case 0 : return "Front: L C R, LFE";
- default : return "Front: C";
- }
- case 6 :
- case 14 :
- case 19 : return "Front: L R";
- case 7 : switch (program)
- {
- case 0 :
- case 1 :
- case 2 : return "Front: L R";
- default : return "Front: C";
- }
- case 8 :
- case 15 : switch (program)
- {
- case 0 :
- case 1 : return "Front: L R";
- default : return "Front: C";
- }
- case 9 :
- case 16 :
- case 20 : switch (program)
- {
- case 0 : return "Front: L R";
- default : return "Front: C";
- }
- case 10 :
- case 17 :
- case 21 : return "Front: C";
- case 11 : return "Front: L C R, Side: L R, LFE";
- case 22 : return "Front: L C R, Side: L R, Rear: L R, LFE";
- case 23 : return "Front: L C C C R, Side: L R, LFE";
- default : return "";
- }
-};
-
-//---------------------------------------------------------------------------
-const char* DolbyE_ChannelPositions2[64]=
-{
- "3/2/0.1 / 2/0/0",
- "3/2/0.1 / 1/0/0 / 1/0/0",
- "3/0/0.1 / 3/0/0.1",
- "3/0/0.1 / 2/0/0 / 2/0/0",
- "3/0/0.1 / 2/0/0 / 1/0/0 / 1/0/0",
- "3/0/0.1 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0",
- "2/0/0 / 2/0/0 / 2/0/0 / 2/0/0",
- "2/0/0 / 2/0/0 / 2/0/0 / 1/0/0 / 1/0/0",
- "2/0/0 / 2/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0",
- "2/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0",
- "1/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0",
- "3/2/0.1",
- "3/0/0.1 / 2/0/0",
- "3/0/0.1 / 1/0/0 / 1/0/0",
- "2/0/0 / 2/0/0 / 2/0/0",
- "2/0/0 / 2/0/0 / 1/0/0 / 1/0/0",
- "2/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0",
- "1/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0 / 1/0/0",
- "3/0/0.1",
- "2/0/0 / 2/0/0",
- "2/0/0 / 1/0/0 / 1/0/0",
- "1/0/0 / 1/0/0 / 1/0/0 / 1/0/0",
- "3/2/2.1",
- "5/2/0.1",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* DolbyE_ChannelPositions2_PerProgram(int8u program_config, int8u program)
-{
- switch (program_config)
- {
- case 0 : switch (program)
- {
- case 0 : return "3/2/0.1";
- default : return "2/0/0";
- }
- case 1 : switch (program)
- {
- case 0 : return "3/2/0.1";
- default : return "1/0/0";
- }
- case 2 :
- case 18 : return "3/0/0.1";
- case 3 :
- case 12 : switch (program)
- {
- case 0 : return "3/0/0.1";
- default : return "2/0/0";
- }
- case 4 : switch (program)
- {
- case 0 : return "3/0/0.1";
- case 1 : return "2/0/0";
- default : return "1/0/0";
- }
- case 5 :
- case 13 : switch (program)
- {
- case 0 : return "3/0/0.1";
- default : return "1/0/0";
- }
- case 6 :
- case 14 :
- case 19 : return "Front: L R";
- case 7 : switch (program)
- {
- case 0 :
- case 1 :
- case 2 : return "2/0/0";
- default : return "1/0/0";
- }
- case 8 :
- case 15 : switch (program)
- {
- case 0 :
- case 1 : return "2/0/0";
- default : return "1/0/0";
- }
- case 9 :
- case 16 :
- case 20 : switch (program)
- {
- case 0 : return "2/0/0";
- default : return "1/0/0";
- }
- case 10 :
- case 17 :
- case 21 : return "1/0/0";
- case 11 : return "3/2/0.1";
- case 22 : return "3/2/2.1";
- case 23 : return "5/2/0.1";
- default : return "";
- }
-};
-
-extern const char* AC3_Surround[];
-
-//---------------------------------------------------------------------------
-const char* DolbyE_ChannelLayout_PerProgram(int8u ProgramConfiguration, int8u ProgramNumber)
-{
- switch (ProgramConfiguration)
- {
- case 0 : switch (ProgramNumber)
- {
- case 0 : return "L C Ls X R LFE Rs X";
- default : return "X X X L X X X R";
- }
- case 1 : switch (ProgramNumber)
- {
- case 0 : return "L C Ls X R LFE Rs X";
- case 1 : return "X X X C X X X X";
- default : return "X X X X X X X C";
- }
- case 2 : switch (ProgramNumber)
- {
- case 0 : return "L C X X R S X X";
- default : return "X X L C X X R S";
- }
- case 3 : switch (ProgramNumber)
- {
- case 0 : return "L C X X R S X X";
- case 1 : return "X X L X X X R X";
- default : return "X X X L X X X R";
- }
- case 4 : switch (ProgramNumber)
- {
- case 0 : return "L C X X R S X X";
- case 1 : return "X X L X X X R X";
- case 2 : return "X X X C X X X X";
- default : return "X X X X X X X C";
- }
- case 5 : switch (ProgramNumber)
- {
- case 0 : return "L C X X R S X X";
- case 1 : return "X X C X X X X X";
- case 2 : return "X X X X X X C X";
- case 3 : return "X X X C X X X X";
- default : return "X X X X X X X C";
- }
- case 6 : switch (ProgramNumber)
- {
- case 0 : return "L X X X R X X X";
- case 1 : return "X L X X X R X X";
- case 2 : return "X X L X X X R X";
- default : return "X X X L X X X R";
- }
- case 7 : switch (ProgramNumber)
- {
- case 0 : return "L X X X R X X X";
- case 1 : return "X L X X X R X X";
- case 2 : return "X X L X X X R X";
- case 3 : return "X X X C X X X X";
- default : return "X X X X X X X C";
- }
- case 8 : switch (ProgramNumber)
- {
- case 0 : return "L X X X R X X X";
- case 1 : return "X L X X X R X X";
- case 2 : return "X X C X X X X X";
- case 3 : return "X X X X X X C X";
- case 4 : return "X X X C X X X X";
- default : return "X X X X X X X C";
- }
- case 9 : switch (ProgramNumber)
- {
- case 0 : return "L X X X R X X X";
- case 1 : return "X C X X X X X X";
- case 2 : return "X X X X X C X X";
- case 3 : return "X X C X X X X X";
- case 4 : return "X X X X X X C X";
- case 5 : return "X X X C X X X X";
- default : return "X X X X X X X C";
- }
- case 10 : switch (ProgramNumber)
- {
- case 0 : return "C X X X X X X X";
- case 1 : return "X X X X C X X X";
- case 2 : return "X C X X X X X X";
- case 3 : return "X X X X X C X X";
- case 4 : return "X X C X X X X X";
- case 5 : return "X X X X X X C X";
- case 6 : return "X X X C X X X X";
- default : return "X X X X X X X C";
- }
- case 11 : return "L C Ls R LFE Rs";
- case 12 : switch (ProgramNumber)
- {
- case 0 : return "L C X R S X";
- default : return "X X L X X R";
- }
- case 13 : switch (ProgramNumber)
- {
- case 0 : return "L C X R S X";
- case 1 : return "X X C X X X";
- default : return "X X X X X C";
- }
- case 14 : switch (ProgramNumber)
- {
- case 0 : return "L X X R X X";
- case 1 : return "X L X X R X";
- default : return "X X L X X R";
- }
- case 15 : switch (ProgramNumber)
- {
- case 0 : return "L X X R X X";
- case 1 : return "X L X R X";
- case 2 : return "X X C X X X";
- default : return "X X X X X C";
- }
- case 16 : switch (ProgramNumber)
- {
- case 0 : return "L X X R X X";
- case 1 : return "X C X X X X";
- case 2 : return "X X X X C X";
- case 3 : return "X X C X X X";
- default : return "X X X X X C";
- }
- case 17 : switch (ProgramNumber)
- {
- case 0 : return "C X X X X X";
- case 1 : return "X X X C X X";
- case 2 : return "X C X X X X";
- case 3 : return "X X X X C X";
- case 4 : return "X X C X X X";
- default : return "X X X X X C";
- }
- case 18 : return "L C R S";
- case 19 : switch (ProgramNumber)
- {
- case 0 : return "L X R X";
- default : return "X L X R";
- }
- case 20 : switch (ProgramNumber)
- {
- case 0 : return "L X R X";
- case 1 : return "X C X X";
- default : return "X X X C";
- }
- case 21 : switch (ProgramNumber)
- {
- case 0 : return "C X X X";
- case 1 : return "X X C X";
- case 2 : return "X C X X";
- default : return "X X X C";
- }
- case 22 : return "L C Ls Lrs R LFE Rs Rrs";
- case 23 : return "L C Ls Lc R LFE Rs Rc";
- default : return "";
- }
-};
-
-extern const float32 Mpegv_frame_rate[16];
-
-const bool Mpegv_frame_rate_type[16]=
-{false, false, false, false, false, false, true, true, true, false, false, false, false, false, false, false};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_DolbyE::File_DolbyE()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_DolbyE;
- #endif //MEDIAINFO_EVENTS
-
- //Configuration
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=32*1024;
-
- //In
- GuardBand_Before=0;
- GuardBand_After=0;
-
- //Temp
- SMPTE_time_code_StartTimecode=(int64u)-1;
- FrameInfo.DTS=0;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DolbyE::Streams_Fill()
-{
- Fill(Stream_General, 0, General_Format, "Dolby E");
- for (int8u program=0; program<DolbyE_Programs[ProgramConfiguration]; program++)
- {
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, "Dolby E");
- if (DolbyE_Programs[ProgramConfiguration]>1)
- Fill(Stream_Audio, StreamPos_Last, Audio_ID, Count_Get(Stream_Audio));
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, DolbyE_Channels_PerProgram(ProgramConfiguration, program));
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, DolbyE_ChannelPositions_PerProgram(ProgramConfiguration, program));
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions_String2, DolbyE_ChannelPositions2_PerProgram(ProgramConfiguration, program));
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelLayout, DolbyE_ChannelLayout_PerProgram(ProgramConfiguration, program));
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, 48000);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, BitDepth);
- if (SMPTE_time_code_StartTimecode!=(int64u)-1)
- {
- Fill(StreamKind_Last, StreamPos_Last, Audio_Delay, SMPTE_time_code_StartTimecode);
- Fill(StreamKind_Last, StreamPos_Last, Audio_Delay_Source, "Stream");
- }
-
- Fill(Stream_Audio, StreamPos_Last, Audio_FrameRate, Mpegv_frame_rate[FrameRate]);
- if (FrameInfo.PTS!=(int64u)-1 && BitDepth)
- {
- float BitRate=(float)(96000*BitDepth);
-
- if (GuardBand_Before_Initial)
- {
- float GuardBand_Before_Initial_Duration=GuardBand_Before_Initial*8/BitRate;
- Fill(Stream_Audio, StreamPos_Last, "GuardBand_Before", GuardBand_Before_Initial_Duration, 9);
- Fill(Stream_Audio, StreamPos_Last, "GuardBand_Before/String", Ztring::ToZtring(GuardBand_Before_Initial_Duration*1000000, 0)+Ztring().From_UTF8(" \xC2xB5s")); //0xC2 0xB5 = micro sign
- (*Stream_More)[Stream_Audio][StreamPos_Last](Ztring().From_Local("GuardBand_Before"), Info_Options)=__T("N NT");
- (*Stream_More)[Stream_Audio][StreamPos_Last](Ztring().From_Local("GuardBand_Before/String"), Info_Options)=__T("N NT");
- }
- if (GuardBand_Before_Initial)
- {
- float GuardBand_After_Initial_Duration=GuardBand_After_Initial*8/BitRate;
- Fill(Stream_Audio, StreamPos_Last, "GuardBand_After", GuardBand_After_Initial_Duration, 9);
- Fill(Stream_Audio, StreamPos_Last, "GuardBand_After/String", Ztring::ToZtring(GuardBand_After_Initial_Duration*1000000, 0)+Ztring().From_UTF8(" \xC2xB5s")); //0xC2 0xB5 = micro sign
- (*Stream_More)[Stream_Audio][StreamPos_Last](Ztring().From_Local("GuardBand_After"), Info_Options)=__T("N NT");
- (*Stream_More)[Stream_Audio][StreamPos_Last](Ztring().From_Local("GuardBand_After/String"), Info_Options)=__T("N NT");
- }
- }
- }
- Fill(Stream_General, 0, General_OverallBitRate, Element_Size*8*Mpegv_frame_rate[FrameRate], 0);
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_DolbyE::Synchronize()
-{
- //Synchronizing
- while (Buffer_Offset+32<=Buffer_Size)
- {
- if ((CC2(Buffer+Buffer_Offset_Temp)&0xFFFE)==0x078E) //16-bit
- {
- BitDepth=16;
- ScrambledBitStream=(CC2(Buffer+Buffer_Offset)&0x0001)?true:false;
- break; //while()
- }
- if ((CC3(Buffer+Buffer_Offset)&0xFFFFE0)==0x0788E0) //20-bit
- {
- BitDepth=20;
- ScrambledBitStream=(CC3(Buffer+Buffer_Offset)&0x000010)?true:false;
- break; //while()
- }
- if ((CC3(Buffer+Buffer_Offset)&0xFFFFFE)==0x07888E) //24-bit
- {
- BitDepth=24;
- ScrambledBitStream=(CC3(Buffer+Buffer_Offset)&0x000001)?true:false;
- break; //while()
- }
- Buffer_Offset++;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+8>Buffer_Size)
- return false;
-
- //Synched
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_DolbyE::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+32>Buffer_Size)
- return false;
-
- //Quick test of synchro
- switch (BitDepth)
- {
- case 16 : if ((CC2(Buffer+Buffer_Offset)&0xFFFE )!=0x078E ) {Synched=false; return true;} break;
- case 20 : if ((CC3(Buffer+Buffer_Offset)&0xFFFFE0)!=0x0788E0) {Synched=false; return true;} break;
- case 24 : if ((CC3(Buffer+Buffer_Offset)&0xFFFFFE)!=0x07888E) {Synched=false; return true;} break;
- default : ;
- }
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DolbyE::Header_Parse()
-{
- //Filling
- if (IsSub)
- Header_Fill_Size(Buffer_Size-Buffer_Offset);
- else
- {
- //Looking for synchro
- //Synchronizing
- Buffer_Offset_Temp=Buffer_Offset+3;
- if (BitDepth==16)
- while (Buffer_Offset_Temp+2<=Buffer_Size)
- {
- if ((CC2(Buffer+Buffer_Offset_Temp)&0xFFFE)==0x078E) //16-bit
- break; //while()
- Buffer_Offset_Temp++;
- }
- if (BitDepth==20)
- while (Buffer_Offset_Temp+3<=Buffer_Size)
- {
- if ((CC3(Buffer+Buffer_Offset_Temp)&0xFFFFE0)==0x0788E0) //20-bit
- break; //while()
- Buffer_Offset_Temp++;
- }
- if (BitDepth==24)
- while (Buffer_Offset_Temp+3<=Buffer_Size)
- {
- if ((CC3(Buffer+Buffer_Offset_Temp)&0xFFFFFE)==0x07888E) //24-bit
- break; //while()
- Buffer_Offset_Temp++;
- }
-
- if (Buffer_Offset_Temp+(BitDepth>16?3:2)>Buffer_Size)
- {
- if (File_Offset+Buffer_Size==File_Size)
- Buffer_Offset_Temp=Buffer_Size;
- else
- {
- Element_WaitForMoreData();
- return;
- }
- }
-
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- }
- Header_Fill_Code(0, "Frame");
-}
-
-//---------------------------------------------------------------------------
-void File_DolbyE::Data_Parse()
-{
- //In case of scrambling
- const int8u* Save_Buffer=NULL;
- size_t Save_Buffer_Offset=0;
- int64u Save_File_Offset=0;
- if (ScrambledBitStream)
- {
- //We must change the buffer,
- Save_Buffer=Buffer;
- Save_Buffer_Offset=Buffer_Offset;
- Save_File_Offset=File_Offset;
- File_Offset+=Buffer_Offset;
- Buffer_Offset=0;
- Descrambled_Buffer=new int8u[(size_t)Element_Size];
- std::memcpy(Descrambled_Buffer, Save_Buffer+Save_Buffer_Offset, (size_t)Element_Size);
- Buffer=Descrambled_Buffer;
- }
-
- //Parsing
- BS_Begin();
- Block();
- BS_End();
-
- //In case of scrambling
- if (ScrambledBitStream)
- {
- delete[] Buffer; Buffer=Save_Buffer;
- Buffer_Offset=Save_Buffer_Offset;
- File_Offset=Save_File_Offset;
- }
-
- FILLING_BEGIN();
- if (!Status[IsAccepted])
- {
- Accept("Dolby E");
-
- //Guard band
- GuardBand_Before_Initial=GuardBand_Before;
- GuardBand_After_Initial=GuardBand_After;
- }
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (Mpegv_frame_rate[FrameRate])
- FrameInfo.DUR=float64_int64s(1000000000/Mpegv_frame_rate[FrameRate]);
- else
- FrameInfo.DUR=(int64u)-1;
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.PTS=FrameInfo.DTS+=FrameInfo.DUR;
- if (Frame_Count==1)
- {
- Finish("Dolby E");
- }
- FILLING_END();
- if (Frame_Count==0 && Buffer_TotalBytes>Buffer_TotalBytes_FirstSynched_Max)
- Reject("Dolby E");
-}
-
-//---------------------------------------------------------------------------
-void File_DolbyE::Block()
-{
- //Parsing
- Skip_S3(BitDepth, "Synchro");
- if (ScrambledBitStream)
- {
- //We must change the buffer
- switch (BitDepth)
- {
- case 16 :
- if (!Descramble_16bit())
- return;
- break;
- case 20 :
- if (!Descramble_20bit())
- return;
- break;
- case 24 :
- if (!Descramble_24bit())
- return;
- break;
- default : ;
- }
- }
- Skip_S2(14, "Unknown");
- Get_S1 ( 6, ProgramConfiguration, "Program configuration"); Param_Info1(DolbyE_ChannelPositions[ProgramConfiguration]);
- Get_S1 ( 4, FrameRate, "Frame rate 1"); Param_Info3(Mpegv_frame_rate[FrameRate], 3, " fps");
- Skip_S1( 4, "Frame rate 2? Always same as Frame rate 1");
- Skip_S2(16, "Frame number?");
- Element_Begin1("SMPTE time code?");
- int8u Frames_Units, Frames_Tens, Seconds_Units, Seconds_Tens, Minutes_Units, Minutes_Tens, Hours_Units, Hours_Tens;
- bool DropFrame;
-
- Skip_S1(4, "BG8");
- Skip_S1(4, "BG7");
-
- Skip_SB( "BGF2 / Field Phase");
- Skip_SB( "BGF1");
- Get_S1 (2, Hours_Tens, "Hours (Tens)");
- Get_S1 (4, Hours_Units, "Hours (Units)");
-
- Skip_S1(4, "BG6");
- Skip_S1(4, "BG5");
-
- Skip_SB( "BGF0 / BGF2");
- Get_S1 (3, Minutes_Tens, "Minutes (Tens)");
- Get_S1 (4, Minutes_Units, "Minutes (Units)");
-
- Skip_S1(4, "BG4");
- Skip_S1(4, "BG3");
-
- Skip_SB( "FP - Field Phase / BGF0");
- Get_S1 (3, Seconds_Tens, "Seconds (Tens)");
- Get_S1 (4, Seconds_Units, "Seconds (Units)");
-
- Skip_S1(4, "BG2");
- Skip_S1(4, "BG1");
-
- Skip_SB( "CF - Color fame");
- Get_SB ( DropFrame, "DP - Drop frame");
- Get_S1 (2, Frames_Tens, "Frames (Tens)");
- Get_S1 (4, Frames_Units, "Frames (Units)");
-
- Skip_BS(Data_BS_Remain(), "Unknown");
-
- if (Hours_Tens<3)
- {
- int64u TimeCode=(int64u)(Hours_Tens *10*60*60*1000
- + Hours_Units *60*60*1000
- + Minutes_Tens *10*60*1000
- + Minutes_Units *60*1000
- + Seconds_Tens *10*1000
- + Seconds_Units *1000
- + (Mpegv_frame_rate[FrameRate]?float64_int32s((Frames_Tens*10+Frames_Units)*1000/Mpegv_frame_rate[FrameRate]):0));
-
- Element_Info1(Ztring().Duration_From_Milliseconds(TimeCode));
-
- //TimeCode
- if (SMPTE_time_code_StartTimecode==(int64u)-1)
- SMPTE_time_code_StartTimecode=TimeCode;
- }
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_DolbyE::Descramble_16bit ()
-{
- int16u ScrambleMask;
- Get_S2 (16, ScrambleMask, "Scramble mask");
- int16u Size=((BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Size-Data_BS_Remain()/8)^ScrambleMask)>>2)&0x3FF;
-
- if (Data_BS_Remain()<(size_t)((Size+1)*BitDepth)) //+1 for additional unknown word
- return false; //There is a problem
-
- int8u* Temp=Descrambled_Buffer+(size_t)Element_Size-Data_BS_Remain()/8;
- for (int16u Pos=0; Pos<Size; Pos++)
- int16u2BigEndian(Temp+Pos*2, BigEndian2int16u(Temp+Pos*2)^ScrambleMask);
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_DolbyE::Descramble_20bit ()
-{
- int32u ScrambleMask;
- Get_S3 (20, ScrambleMask, "Scramble mask");
- int16u Size=((BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Size-Data_BS_Remain()/8)^(ScrambleMask>>4))>>2)&0x3FF;
-
- if (Data_BS_Remain()<(size_t)((Size+1)*BitDepth)) //+1 for additional unknown word
- return false; //There is a problem
-
- int8u* Temp=Descrambled_Buffer+(size_t)Element_Size-Data_BS_Remain()/8;
- int64u ScrambleMasks=(((int64u)ScrambleMask)<<20)|ScrambleMask;
- bool Half;
- if (Data_BS_Remain()%8)
- {
- Temp--;
- int24u2BigEndian(Temp, BigEndian2int24u(Temp)^(ScrambleMask));
- Half=true;
- }
- else
- Half=false;
- for (int16u Pos=0; Pos<Size-(Half?1:0); Pos+=2)
- int40u2BigEndian(Temp+(Half?3:0)+Pos*5/2, BigEndian2int40u(Temp+(Half?3:0)+Pos*5/2)^ScrambleMasks);
- if ((Size-((Size && Half)?1:0))%2==0)
- int24u2BigEndian(Temp+(Half?3:0)+(Size-((Size && Half)?1:0))*5/2, BigEndian2int24u(Temp+(Half?3:0)+(Size-((Size && Half)?1:0))*5/2)^(((int32u)ScrambleMasks)<<4));
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_DolbyE::Descramble_24bit ()
-{
- int32u ScrambleMask;
- Get_S3 (24, ScrambleMask, "Scramble mask");
- int32u Size=((BigEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Size-Data_BS_Remain()/8)^ScrambleMask)>>2)&0x3FF;
-
- if (Data_BS_Remain()<(size_t)((Size+1)*BitDepth)) //+1 for additional unknown word
- return false; //There is a problem
-
- int8u* Temp=Descrambled_Buffer+(size_t)Element_Size-Data_BS_Remain()/8;
- for (int16u Pos=0; Pos<Size; Pos++)
- int24u2BigEndian(Temp+Pos*2, BigEndian2int24u(Temp+Pos*2)^ScrambleMask);
-
- return true;
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_DOLBYE_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_DolbyE.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_DolbyE.h
deleted file mode 100644
index 0ab35e6f6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_DolbyE.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Dolby E files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DolbyEH
-#define MediaInfo_File_DolbyEH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_DolbyE
-//***************************************************************************
-
-class File_DolbyE : public File__Analyze
-{
-public :
- //In
- int64u GuardBand_Before;
- int64u GuardBand_After;
-
- //Constructor/Destructor
- File_DolbyE();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Block();
-
- //Helpers
- bool Descramble_16bit();
- bool Descramble_20bit();
- bool Descramble_24bit();
-
- //Temp
- int64u SMPTE_time_code_StartTimecode;
- int8u ProgramConfiguration;
- int8u FrameRate;
- int8u BitDepth;
- bool ScrambledBitStream;
- int8u* Descrambled_Buffer; //Used in case of scrambled bitstream
- int64u GuardBand_Before_Initial;
- int64u GuardBand_After_Initial;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Dts.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Dts.cpp
deleted file mode 100644
index 355a3e2e9..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Dts.cpp
+++ /dev/null
@@ -1,1407 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DTS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Dts.h"
-#include "ZenLib/Utils.h"
-#include "ZenLib/BitStream.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#include <algorithm>
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* DTS_FrameType[]=
-{
- "Termination",
- "Normal",
-};
-
-//---------------------------------------------------------------------------
-const int32u DTS_SamplingRate[]=
-{
- 0, 8000, 16000, 32000, 0, 0, 11025, 22050,
- 44100, 0, 0, 12000, 24000, 48000, 96000, 192000,
-};
-
-//---------------------------------------------------------------------------
-const int32u DTS_BitRate[]=
-{
- 32000, 56000, 64000, 96000, 112000, 128000, 192000, 224000,
- 256000, 320000, 384000, 448000, 512000, 576000, 640000, 754500,
- 960000, 1024000, 1152000, 1280000, 1344000, 1408000, 1411200, 1472000,
- 1509750, 1920000, 2048000, 3072000, 3840000, 0, 0, 0,
-};
-
-//---------------------------------------------------------------------------
-const int8u DTS_Channels[]=
-{
- 1, 2, 2, 2, 2, 3, 3, 4,
- 4, 5, 6, 6, 6, 7, 8, 8,
-};
-
-//---------------------------------------------------------------------------
-const int8u DTS_Resolution[]=
-{16, 20, 24, 24};
-
-//---------------------------------------------------------------------------
-const char* DTS_ChannelPositions[16]=
-{
- "Front: C",
- "Front: C C",
- "Front: L R",
- "Front: L R",
- "Front: L R",
- "Front: L C R",
- "Front: L R, Back: C",
- "Front: L C R, Back: C",
- "Front: L R, Side: L R",
- "Front: L C R, Side: L R",
- "Front: L C C R, Side: L R",
- "Front: L C R, Side: L R",
- "Front: L R, Side: L R, Back: L R",
- "Front: L C R, Side: L R, Back: L R",
- "Front: L R, Side: L R, Back: L C C R",
- "Front: L C R, Side: L R, Back: L C R",
-};
-
-//---------------------------------------------------------------------------
-const char* DTS_ChannelPositions2[16]=
-{
- "1/0/0",
- "2/0/0",
- "2/0/0",
- "2/0/0",
- "2/0/0",
- "3/0/0",
- "2/1/0",
- "3/1/0",
- "2/2/0",
- "3/2/0",
- "4/2/0",
- "3/2/0",
- "2/2/2",
- "3/2/2",
- "2/2/4",
- "3/2/3",
-};
-
-//---------------------------------------------------------------------------
-const char* DTS_ChannelLayout[16]=
-{
- "C",
- "1+1",
- "L R",
- "L R",
- "Lt Rt",
- "C L R",
- "L R Cs",
- "C L R Cs",
- "L R Ls Rs",
- "C L R Ls Rs",
- "Cl Cr L R Ls Rs",
- "C L R Ls Rs",
- "C L R Ls Rs Rls Rrs",
- "C L R Ls Rs Rls Rrs",
- "L R Ls Rs Rls Cs Cs Rrs",
- "C L R Ls Rs Rls Cs Rrs",
-};
-
-//---------------------------------------------------------------------------
-const char* DTS_ExtensionAudioDescriptor[]=
-{
- "Channel Extension",
- "Reserved",
- "Frequency Extension",
- "Channel Extension + Frequency Extension",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* DTS_HD_RefClockCode[]=
-{
- "1/32000",
- "1/44100",
- "1/48000",
- "",
-};
-
-//---------------------------------------------------------------------------
-std::string DTS_HD_SpeakerActivityMask (int16u SpeakerActivityMask)
-{
- std::string Text;
- if ((SpeakerActivityMask&0x0003)==0x0003)
- Text+="Front: L C R";
- else
- {
- if (SpeakerActivityMask&0x0001)
- Text+="Front: C";
- if (SpeakerActivityMask&0x0002)
- Text+="Front: L R";
- }
-
- if (SpeakerActivityMask&0x0004)
- Text+=", Side: L R";
-
- if (SpeakerActivityMask&0x0010)
- Text+=", Back: C";
-
- if ((SpeakerActivityMask&0x00A0)==0x00A0)
- Text+=", High: L C R";
- else
- {
- if (SpeakerActivityMask&0x0020)
- Text+=", High: L R";
- if (SpeakerActivityMask&0x0080)
- Text+=", High: C";
- }
-
- if (SpeakerActivityMask&0x0800)
- Text+=", Side: L R";
-
- if (SpeakerActivityMask&0x0040)
- Text+=", Back: L R";
-
- if (SpeakerActivityMask&0x0100)
- Text+=", TopCtrSrrd";
- if (SpeakerActivityMask&0x0200)
- Text+=", Ctr: L R";
- if (SpeakerActivityMask&0x0400)
- Text+=", Wide: L R";
- if (SpeakerActivityMask&0x2000)
- Text+=", HiSide: L R";
-
- if ((SpeakerActivityMask&0xC000)==0x0C000)
- Text+=", HiRear: L C R";
- else
- {
- if (SpeakerActivityMask&0x4000)
- Text+=", HiRear: C";
- if (SpeakerActivityMask&0x8000)
- Text+=", HiRear: L R";
- }
-
- if (SpeakerActivityMask&0x0008)
- Text+=", LFE";
- if (SpeakerActivityMask&0x1000)
- Text+=", LFE2";
-
- return Text;
-}
-
-//---------------------------------------------------------------------------
-std::string DTS_HD_SpeakerActivityMask2 (int16u SpeakerActivityMask)
-{
- std::string Text;
- if ((SpeakerActivityMask&0x0003)==0x0003)
- Text+="3";
- else
- {
- if (SpeakerActivityMask&0x0001)
- Text+="1";
- else if (SpeakerActivityMask&0x0002)
- Text+="2";
- else
- Text+="0";
- }
-
- if (SpeakerActivityMask&0x0004)
- Text+="/2";
- else if ((SpeakerActivityMask&0x0840)==0x0000)
- Text+="/0";
-
- if (SpeakerActivityMask&0x0010)
- Text+="/1";
- else if ((SpeakerActivityMask&0x0840)==0x0000)
- Text+="/0";
-
- if ((SpeakerActivityMask&0x00A0)==0x00A0)
- Text+=".3";
- else
- {
- if (SpeakerActivityMask&0x0020)
- Text+=".2";
- if (SpeakerActivityMask&0x0080)
- Text+=".2";
- }
-
- if (SpeakerActivityMask&0x0800)
- Text+="/2";
- if (SpeakerActivityMask&0x0040)
- Text+="/2";
-
- if (SpeakerActivityMask&0x0100)
- Text+=".1";
- if (SpeakerActivityMask&0x0200)
- Text+=".2";
- if (SpeakerActivityMask&0x0400)
- Text+=".2";
- if (SpeakerActivityMask&0x2000)
- Text+=".2";
-
- if ((SpeakerActivityMask&0xC000)==0x0C000)
- Text+=".3";
- else
- {
- if (SpeakerActivityMask&0x4000)
- Text+=".1";
- if (SpeakerActivityMask&0x8000)
- Text+=".2";
- }
-
- if (SpeakerActivityMask&0x0008)
- Text+=".1";
- if (SpeakerActivityMask&0x1000)
- Text+=".1";
-
- return Text;
-}
-
-//---------------------------------------------------------------------------
-const char* DTS_HD_TypeDescriptor[]=
-{
- "Music",
- "Effects",
- "Dialog",
- "Commentary",
- "Visually Impaired",
- "Hearing Impaired",
- "Isolated Music Object",
- "Music and Effects",
- "Dialog and Commentary",
- "Effects and Commentary",
- "Isolated Music Object and Commentary",
- "Isolated Music Object and Effects",
- "Karaoke",
- "Music, Effects, Dialog",
- "Complete Audio Presentation",
- "",
-};
-
-//---------------------------------------------------------------------------
-int32u DTS_HD_MaximumSampleRate[]=
-{
- 8000,
- 16000,
- 32000,
- 64000,
- 128000,
- 22050,
- 44100,
- 88200,
- 176400,
- 352800,
- 12000,
- 24000,
- 48000,
- 96000,
- 192000,
- 384000,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Dts::File_Dts()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("Dts");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Dts;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=32*1024;
- PTS_DTS_Needed=true;
- IsRawStream=true;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.3?32:2;
-
- //Buffer
- Save_Buffer=NULL;
-
- //Temp
- HD_size=0;
- Primary_Frame_Byte_Size=0;
- HD_SpeakerActivityMask=(int16u)-1;
- channel_arrangement=(int8u)-1;
- channel_arrangement_XCh=(int8u)-1;
- sample_frequency=(int8u)-1;
- sample_frequency_X96k=(int8u)-1;
- bit_rate=(int8u)-1;
- lfe_effects=(int8u)-1;
- bits_per_sample=(int8u)-1;
- ExtensionAudioDescriptor=(int8u)-1;
- HD_BitResolution=(int8u)-1;
- HD_MaximumSampleRate=(int8u)-1;
- HD_TotalNumberChannels=(int8u)-1;
- HD_ExSSFrameDurationCode=(int8u)-1;
- ExtendedCoding=false;
- ES=false;
- Core_Exists=false;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dts::Streams_Fill()
-{
- Fill(Stream_General, 0, General_Format, "DTS");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "DTS");
-
- if (!Profile.empty())
- Fill(Stream_Audio, 0, Audio_Format_Profile, Profile+(Core_Exists?__T(" / Core"):__T("")));
- else if (ES)
- Fill(Stream_Audio, 0, Audio_Format_Profile, "ES");
- Fill(Stream_General, 0, General_Format_Profile, Retrieve(Stream_Audio, 0, Audio_Format_Profile));
- Fill(Stream_Audio, 0, Audio_Codec, (Profile.find(__T("MA"))==0 || Profile.find(__T("HRA"))==0)?"DTS-HD":"DTS");
-
- //HD data
- if ((ExtendedCoding && (ExtensionAudioDescriptor==0 || ExtensionAudioDescriptor==3 || ExtensionAudioDescriptor==6)))
- {
- switch(channel_arrangement_XCh)
- {
- case 1 :
- Fill(Stream_Audio, 0, Audio_Channel_s_, 7);
- Fill(Stream_Audio, 0, Audio_ChannelPositions, Ztring("Front: L C R, Side: L R, Back: C")+(lfe_effects?__T(", LFE"):__T("")));
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, Ztring("3/2/1")+(lfe_effects?__T(".1"):__T(".0")));
- break;
- case 2 :
- Fill(Stream_Audio, 0, Audio_Channel_s_, 8);
- Fill(Stream_Audio, 0, Audio_ChannelPositions, Ztring("Front: L C R, Side: L R, Back: L R")+(lfe_effects?__T(", LFE"):__T("")));
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, Ztring("3/2/2")+(lfe_effects?__T(".1"):__T(".0")));
- break;
- default:;
- }
- }
- else
- {
- if (HD_SpeakerActivityMask!=(int16u)-1)
- {
- Fill(Stream_Audio, 0, Audio_ChannelPositions, DTS_HD_SpeakerActivityMask(HD_SpeakerActivityMask).c_str());
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, DTS_HD_SpeakerActivityMask2(HD_SpeakerActivityMask).c_str());
- }
- if(HD_BitResolution!=(int8u)-1)
- Fill(Stream_Audio, 0, Audio_BitDepth, HD_BitResolution);
- if(HD_MaximumSampleRate!=(int8u)-1)
- Fill(Stream_Audio, 0, Audio_SamplingRate, DTS_HD_MaximumSampleRate[HD_MaximumSampleRate]);
- else if (sample_frequency_X96k!=(int8u)-1)
- Fill(Stream_Audio, 0, Audio_SamplingRate, DTS_SamplingRate[sample_frequency_X96k]);
- if(HD_TotalNumberChannels!=(int8u)-1)
- Fill(Stream_Audio, 0, Audio_Channel_s_, HD_TotalNumberChannels);
- if (Profile==__T("Express"))
- {
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate_Get(true), 0);
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
- }
- }
-
- //Core data
- if (Core_Exists)
- {
- if ((Profile.find(__T("MA"))==0?__T("VBR"):__T("CBR"))!=Retrieve(Stream_Audio, 0, Audio_BitRate_Mode))
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, Profile.find(__T("MA"))==0?"VBR":"CBR");
- if (DTS_SamplingRate[sample_frequency]!=Retrieve(Stream_Audio, 0, Audio_SamplingRate).To_int32u())
- Fill(Stream_Audio, 0, Audio_SamplingRate, DTS_SamplingRate[sample_frequency]);
- Ztring BitRate;
- if (bit_rate<29 || Profile==__T("Express"))
- BitRate=Ztring::ToZtring(BitRate_Get(), 0);
- else if (bit_rate==29)
- BitRate=__T("Open");
- else if (bit_rate==30)
- BitRate=__T("Variable");
- else if (bit_rate==31)
- BitRate=__T("LossLess");
- if (Profile==__T("HRA"))
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate_Get(true), 0);
- if ( Profile==__T("MA"))
- Fill(Stream_Audio, 0, Audio_BitRate, "Unknown");
- if (BitRate!=Retrieve(Stream_Audio, 0, Audio_BitRate))
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate);
- if (Profile.find(__T("MA"))==0 || bit_rate==31)
- Fill(Stream_Audio, 0, Audio_Compression_Mode, "Lossless / Lossy", Unlimited, true, true);
-
- int8u Channels;
- Ztring ChannelPositions, ChannelPositions2, ChannelLayout;
- if (channel_arrangement<16)
- {
- Channels=DTS_Channels[channel_arrangement]+(lfe_effects?1:0);
- ChannelPositions.From_Local(DTS_ChannelPositions[channel_arrangement]);
- ChannelPositions2.From_Local(DTS_ChannelPositions2[channel_arrangement]);
- ChannelLayout.From_Local(DTS_ChannelLayout[channel_arrangement]);
- }
- else
- {
- Channels=8;
- ChannelPositions.From_Local("User defined");
- }
- if (lfe_effects)
- {
- ChannelPositions+=__T(", LFE");
- ChannelPositions2+=__T(".1");
- ChannelLayout+=__T(" LFE");
- }
- if (Channels!=Retrieve(Stream_Audio, 0, Audio_Channel_s_).To_int8u())
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- if (ChannelPositions!=Retrieve(Stream_Audio, 0, Audio_ChannelPositions))
- Fill(Stream_Audio, 0, Audio_ChannelPositions, ChannelPositions);
- if (ChannelPositions2!=Retrieve(Stream_Audio, 0, Audio_ChannelPositions_String2))
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, ChannelPositions2);
- if (ChannelLayout!=Retrieve(Stream_Audio, 0, Audio_ChannelLayout))
- Fill(Stream_Audio, 0, Audio_ChannelLayout, ChannelLayout);
- if (DTS_Resolution[bits_per_sample]!=Retrieve(Stream_Audio, 0, Audio_BitDepth).To_int8u())
- Fill(Stream_Audio, 0, Audio_BitDepth, DTS_Resolution[bits_per_sample]);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::Streams_Finish()
-{
- Fill(Stream_Audio, 0, Audio_Format_Settings_Endianness, BigEndian?"Big":"Little", Unlimited, true, true);
- Fill(Stream_Audio, 0, Audio_Format_Settings_Mode, Word?"16":"14", Unlimited, true, true);
-
- if (FrameInfo.PTS!=(int64u)-1 && FrameInfo.PTS>PTS_Begin)
- {
- Fill(Stream_Audio, 0, Audio_Duration, ((float64)(FrameInfo.PTS-PTS_Begin))/1000000, 0, true);
- Fill(Stream_Audio, 0, Audio_FrameCount, ((float64)(FrameInfo.PTS-PTS_Begin))/1000000/32, 0, true);
- }
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Dts::FileHeader_Begin()
-{
- //Must have enough buffer for having header
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- //False positives detection: Detect WAV files, the parser can't detect it easily, there is only 70 bytes of beginning for saying WAV
- switch (CC4(Buffer))
- {
- case 0x52494646 : //"RIFF"
- case 0x000001FD : //MPEG-PS private
- Finish("DTS");
- return false;
- default : ;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Dts::Synchronize()
-{
- //Synchronizing
- while (Buffer_Offset+6<=Buffer_Size)
- {
- if (!FrameSynchPoint_Test())
- return false; //Need more data
- if (Synched)
- break;
- Buffer_Offset++;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+6>Buffer_Size)
- {
- if (Buffer_Offset+5==Buffer_Size)
- {
- int64u Value=CC5(Buffer+Buffer_Offset);
- if ((Value&0xFFFFFFFFFCLL)!=0x7FFE8001FCLL //16 bits and big endian Core
- && (Value&0xFFFFFFFF00LL)!=0xFE7F018000LL //16 bits and little endian Core
- && (Value&0xFFFFFFFFF7LL)!=0x1FFFE80007LL //14 bits and big endian Core
- && (Value&0xFFFFFFFFF0LL)!=0xFF1F00E8F0LL //14 bits and little endian Core
- && (Value&0xFFFFFFFF00LL)!=0x6458202500LL) //16 bits and big endian HD
- Buffer_Offset++;
- }
- if (Buffer_Offset+4==Buffer_Size)
- {
- int32u Value=CC4(Buffer+Buffer_Offset);
- if (Value!=0x7FFE8001 //16 bits and big endian Core
- && Value!=0xFE7F0180 //16 bits and little endian Core
- && Value!=0x1FFFE800 //14 bits and big endian Core
- && Value!=0xFF1F00E8 //14 bits and little endian Core
- && Value!=0x64582025) //16 bits and big endian HD
- Buffer_Offset++;
- }
- if (Buffer_Offset+3==Buffer_Size)
- {
- int32u Value=CC3(Buffer+Buffer_Offset);
- if (Value!=0x7FFE80 //16 bits and big endian Core
- && Value!=0xFE7F01 //16 bits and little endian Core
- && Value!=0x1FFFE8 //14 bits and big endian Core
- && Value!=0xFF1F00 //14 bits and little endian Core
- && Value!=0x645820) //16 bits and big endian HD
- Buffer_Offset++;
- }
- if (Buffer_Offset+2==Buffer_Size)
- {
- int16u Value=CC2(Buffer+Buffer_Offset);
- if (Value!=0x7FFE //16 bits and big endian Core
- && Value!=0xFE7F //16 bits and little endian Core
- && Value!=0x1FFF //14 bits and big endian Core
- && Value!=0xFF1F //14 bits and little endian Core
- && Value!=0x6458) //16 bits and big endian HD
- Buffer_Offset++;
- }
- if (Buffer_Offset+1==Buffer_Size)
- {
- int8u Value=CC1(Buffer+Buffer_Offset);
- if (Value!=0x7F //16 bits and big endian Core
- && Value!=0xFE //16 bits and little endian Core
- && Value!=0x1F //14 bits and big endian Core
- && Value!=0xFF //14 bits and little endian Core
- && Value!=0x64) //16 bits and big endian HD
- Buffer_Offset++;
- }
- return false;
- }
-
- //Synched
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Dts::Synched_Test()
-{
- //Padding
- while (Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]==0x00)
- Buffer_Offset++;
-
- //Must have enough buffer for having header
- if (Buffer_Offset+6>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (!FrameSynchPoint_Test())
- return false; //Need more data
- if (!Synched)
- return true;
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::Read_Buffer_Unsynched()
-{
- FrameInfo=frame_info();
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Dts::Demux_UnpacketizeContainer_Test()
-{
- int32u Value=CC4(Buffer+Buffer_Offset);
- if (Value==0x7FFE8001)
- {
- int16u Size=((BigEndian2int24u(Buffer+Buffer_Offset+5)>>4)&0x3FFF)+1;
- Demux_Offset=Buffer_Offset+Size;
-
- if (Buffer_Offset+Size>Buffer_Size && File_Offset+Buffer_Size!=File_Size)
- return false; //No complete frame
-
- Demux_UnpacketizeContainer_Demux();
- }
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dts::Header_Parse()
-{
- Header_Fill_Size(Original_Size);
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dts::Data_Parse()
-{
- if (Save_Buffer)
- {
- File_Offset+=Buffer_Offset;
- swap(Buffer, Save_Buffer);
- swap(Buffer_Offset, Save_Buffer_Offset);
- swap(Buffer_Size, Save_Buffer_Size);
- if (!Word)
- Element_Size=Element_Size*14/16;
- }
-
- //Parsing
- int32u Sync;
- Get_B4 (Sync, "Sync");
- if (Sync==0x64582025)
- {
- //HD
- Element_Name("HD");
- Element_Code=1;
-
- int16u header_size;
- int8u SubStreamIndex, NumAssets, NumAudioPresent;
- bool isBlownUpHeader, StaticFieldsPresent;
- Skip_B1( "Unknown");
- BS_Begin();
- Get_S1 (2, SubStreamIndex, "Substream index");
- Get_SB (isBlownUpHeader, "Is blown up header");
- if (isBlownUpHeader)
- {
- Get_S2 (12, header_size, "Header size"); header_size++; Param_Info2(header_size, " bytes");
- Get_S3 (20, HD_size, "HD block size"); HD_size++; Param_Info2(HD_size, " bytes");
- }
- else
- {
- Get_S2 ( 8, header_size, "Header size"); header_size++; Param_Info2(header_size, " bytes");
- Get_S3 (16, HD_size, "HD block size"); HD_size++; Param_Info2(HD_size, " bytes");
- }
- TESTELSE_SB_GET(StaticFieldsPresent, "Static fields present");
- std::vector<int32u> ActiveExSSMasks;
- Info_S1(2, RefClockCode, "Reference clock code"); Param_Info1(DTS_HD_RefClockCode[RefClockCode]);
- Get_S1 (3, HD_ExSSFrameDurationCode, "ExSS frame duration code"); HD_ExSSFrameDurationCode++; Param_Info1(HD_ExSSFrameDurationCode);
- TEST_SB_SKIP( "Timestamp flag");
- Skip_S5(36, "Timestamp");
- TEST_SB_END();
- Get_S1 (3, NumAudioPresent, "Num audio present"); NumAudioPresent++; Param_Info2(NumAudioPresent, " channels");
- Get_S1 (3, NumAssets, "Num assets"); NumAssets++; Param_Info2(NumAssets, " assets");
- Element_Begin1("Active masks");
- for (int8u Pos=0; Pos<NumAudioPresent; Pos++)
- {
- int32u ActiveExSSMask;
- Get_S4 (SubStreamIndex+1, ActiveExSSMask, "Active ExSS mask");
- ActiveExSSMasks.push_back(ActiveExSSMask);
- }
- Element_End0();
- Element_Begin1("Active masks 2");
- for (int8u Pos=0; Pos<NumAudioPresent; Pos++)
- for (int8u Pos2=0; Pos2<SubStreamIndex+1; Pos2+=2)
- if (ActiveExSSMasks[Pos]%2)
- Skip_S1(8, "Active ExSS Mask");
- Element_End0();
- TEST_SB_SKIP( "Mix metadata Enabled");
- int8u Bits4MixOutMask, NumMixOutConfigs;
- Skip_S1(2, "Mix metadata adjustment level");
- Get_S1 (2, Bits4MixOutMask, "Bits4Mix out mask"); Bits4MixOutMask=4+Bits4MixOutMask*4; Param_Info2(Bits4MixOutMask, " bits");
- Get_S1 (2, NumMixOutConfigs, "Number of mix out configs"); NumMixOutConfigs++; Param_Info2(NumMixOutConfigs, " configs");
- for (int8u Pos=0; Pos<NumMixOutConfigs; Pos++)
- Skip_S1(Bits4MixOutMask, "MixOutChMask");
- TEST_SB_END();
- TESTELSE_SB_ELSE("Static fields present");
- NumAudioPresent=1;
- NumAssets=1;
- TESTELSE_SB_END();
- Asset_Sizes.clear();
- Element_Begin1("Sizes");
- for (int8u Pos=0; Pos<NumAssets; Pos++)
- {
- int32u Size;
- if (isBlownUpHeader)
- {
- Get_S3 (20, Size, "Size"); Size++; Param_Info2(Size, " bytes");
- }
- else
- {
- Get_S3 (16, Size, "Size"); Size++; Param_Info2(Size, " bytes");
- }
- Asset_Sizes.push_back(Size);
- }
- Element_End0();
- for (int8u Asset_Pos=0; Asset_Pos<NumAssets; Asset_Pos++)
- {
- Element_Begin1("Asset");
- int16u AssetSize;
- Get_S2 (9, AssetSize, "Asset size");
- AssetSize++; Param_Info2(AssetSize, " bytes?");
- Skip_S1(3, "Descriptor data for asset index");
- if (StaticFieldsPresent)
- {
- TEST_SB_SKIP( "Asset type descriptor present");
- Info_S1( 4, TypeDescriptor, "Asset type descriptor"); Param_Info1(DTS_HD_TypeDescriptor[TypeDescriptor]);
- TEST_SB_END();
- TEST_SB_SKIP( "Language descriptor present");
- Info_S3(24, LanguageDescriptor, "Language descriptor"); Param_Info1(Ztring().From_CC3(LanguageDescriptor));
- TEST_SB_END();
- TEST_SB_SKIP( "Info text present");
- int16u InfoTextByteSize;
- Get_S2(10, InfoTextByteSize, "Info text size"); InfoTextByteSize++; Param_Info2(InfoTextByteSize, "bytes");
- for (int16u Pos=0; Pos<InfoTextByteSize; Pos++)
- Skip_S1(8, "Info text");
- TEST_SB_END();
- Get_S1 (5, HD_BitResolution, "Bit resolution"); HD_BitResolution++; Param_Info2(HD_BitResolution, " bits");
- Get_S1 (4, HD_MaximumSampleRate, "Maximum sample rate"); Param_Info2(DTS_HD_MaximumSampleRate[HD_MaximumSampleRate], " Hz");
- Get_S1 (8, HD_TotalNumberChannels, "Total number of channels"); HD_TotalNumberChannels++; Param_Info2(HD_TotalNumberChannels, " channels");
- TEST_SB_SKIP( "1 to 1 map channels to speakers");
- int8u SpeakerActivityMaskBits, SpeakerRemapSetsCount;
- if (HD_TotalNumberChannels>2)
- Skip_SB( "Embedded stereo flag"); //else is 0
- if (HD_TotalNumberChannels>6)
- Skip_SB( "Embedded 6 Channels flag"); //else is 0
- TESTELSE_SB_SKIP( "Speaker mask enabled");
- Get_S1 (2, SpeakerActivityMaskBits, "Speaker activity mask bits"); Param_Info2(4+SpeakerActivityMaskBits*4, " bits");
- SpeakerActivityMaskBits=4+SpeakerActivityMaskBits*4;
- Get_S2 (SpeakerActivityMaskBits, HD_SpeakerActivityMask, "Speaker activity mask"); Param_Info1(DTS_HD_SpeakerActivityMask(HD_SpeakerActivityMask).c_str());
- TESTELSE_SB_ELSE( "Speaker mask enabled");
- SpeakerActivityMaskBits=0;
- TESTELSE_SB_END();
- Get_S1 (3, SpeakerRemapSetsCount, "Speaker remap sets count");
- for (int8u Pos=0; Pos<SpeakerRemapSetsCount; Pos++)
- Skip_S2(SpeakerActivityMaskBits, "Standard speaker layout mask");
- for (int8u Pos=0; Pos<SpeakerRemapSetsCount; Pos++)
- {
- int8u NumDecCh4Remap;
- Get_S1(5, NumDecCh4Remap, "NumDecCh4Remap");
- //Not finnished!
- }
- TEST_SB_END();
- Element_End0();
- }
- }
- BS_End();
- Skip_XX(header_size-Element_Offset, "Unknown");
- }
- else
- {
- //Frame
- Element_Name("Frame");
- Element_Code=0;
-
- int8u EncoderSoftwareRevision;
- bool crc_present;
- BS_Begin();
- Info_SB( FrameType, "Frame Type"); Param_Info1(DTS_FrameType[FrameType]);
- Skip_S1( 5, "Deficit Sample Count");
- Get_SB ( crc_present, "CRC Present");
- Get_S2 ( 7, Number_Of_PCM_Sample_Blocks, "Number of PCM Sample Blocks");
- Number_Of_PCM_Sample_Blocks++;
- Get_S2 (14, Primary_Frame_Byte_Size, "Primary Frame Byte Size minus 1");
- Primary_Frame_Byte_Size++;
- if (!Word)
- Primary_Frame_Byte_Size=Primary_Frame_Byte_Size*16/14; //Word is on 14 bits
- Param_Info2(Primary_Frame_Byte_Size, " bytes");
- Get_S1 ( 6, channel_arrangement, "Audio Channel Arrangement"); Param_Info2(DTS_Channels[channel_arrangement], " channels");
- Get_S1 ( 4, sample_frequency, "Core Audio Sampling Frequency"); Param_Info2(DTS_SamplingRate[sample_frequency], " Hz");
- Get_S1 ( 5, bit_rate, "Transmission Bit Rate"); Param_Info2(DTS_BitRate[bit_rate], " bps");
- Skip_SB( "Embedded Down Mix Enabled");
- Skip_SB( "Embedded Dynamic Range");
- Skip_SB( "Embedded Time Stamp");
- Skip_SB( "Auxiliary Data");
- Skip_SB( "HDCD");
- Get_S1 ( 3, ExtensionAudioDescriptor, "Extension Audio Descriptor"); Param_Info1(DTS_ExtensionAudioDescriptor[ExtensionAudioDescriptor]);
- Get_SB ( ExtendedCoding, "Extended Coding");
- Skip_SB( "Audio Sync Word Insertion");
- Get_S1 ( 2, lfe_effects, "Low Frequency Effects");
- Skip_SB( "Predictor History");
- if (crc_present)
- Skip_S2(16, "Header CRC Check");
- Skip_SB( "Multirate Interpolator");
- Get_S1 ( 4, EncoderSoftwareRevision, "Encoder Software Revision");
- Skip_S1( 2, "Copy History");
- Get_S1 ( 2, bits_per_sample, "Source PCM Resolution"); Param_Info1(Ztring::ToZtring(DTS_Resolution[bits_per_sample])+__T(" bits"));
- Get_SB ( ES, "ES");
- Skip_SB( "Front Sum/Difference");
- Skip_SB( "Surrounds Sum/Difference");
- Skip_S1( 4, "Dialog Normalisation Parameter");
- switch (EncoderSoftwareRevision)
- {
- case 6 :
- Skip_S1( 4, "Dialog Normalisation Parameter");
- break;
- case 7 :
- Skip_S1( 4, "Dialog Normalisation Parameter");
- break;
- default :
- Skip_S1( 4, "Unspecified");
- break;
- }
- BS_End();
- }
-
- //Name
- Element_Info1(Ztring::ToZtring(Frame_Count));
-
- //PTS
- Element_Info1C((FrameInfo.PTS!=(int64u)-1), __T("PTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/1000000)));
-
- //Counting
- if (File_Offset+Buffer_Offset+Element_Size==File_Size)
- Frame_Count_Valid=Frame_Count; //Finish frames in case of there are less than Frame_Count_Valid frames
- if (Element_Code==0 || !Core_Exists)
- {
- if (Frame_Count==0)
- PTS_Begin=FrameInfo.PTS;
- Frame_Count++;
- Frame_Count_InThisBlock++;
- float64 BitRate=BitRate_Get();
- if (BitRate)
- {
- FrameInfo.DUR=float64_int64s(((float64)(Element_Size+Header_Size))*8/BitRate*1000000000);
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.DTS+=FrameInfo.DUR;
- if (FrameInfo.PTS!=(int64u)-1)
- FrameInfo.PTS=FrameInfo.DTS;
- }
- }
-
- //If filled
- if (Status[IsFilled])
- {
- //Little Endian and 14-bit streams management
- if (Save_Buffer)
- {
- delete[] Buffer;
- Buffer=Save_Buffer; Save_Buffer=NULL;
- Buffer_Offset=Save_Buffer_Offset;
- Buffer_Size=Save_Buffer_Size;
- File_Offset-=Buffer_Offset;
- if (!Word)
- Element_Size=Element_Size*16/14;
- }
-
- Skip_XX(Element_Size-Element_Offset, "Data");
- return;
- }
-
- //Parsing
- switch(Element_Code)
- {
- case 0 : Core(); break;
- case 1 : HD(); break;
- default : Skip_XX(Element_Size, "Data");
- }
-
- //Little Endian and 14-bit streams management
- if (Save_Buffer)
- {
- delete[] Buffer;
- Buffer=Save_Buffer; Save_Buffer=NULL;
- Buffer_Offset=Save_Buffer_Offset;
- Buffer_Size=Save_Buffer_Size;
- File_Offset-=Buffer_Offset;
- if (!Word)
- Element_Size=Element_Size*16/14;
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dts::Core()
-{
- Element_Name("Frame");
-
- //It exists (not in XSA streams)
- Core_Exists=true;
-
- //Looking for extensions
- int64u Core_Size=Element_Size, XCh_Sync=Element_Size, XXCh_Sync=Element_Size, X96k_Sync=Element_Size;
- if (ExtendedCoding)
- {
- //XCh
- if (ExtensionAudioDescriptor==0 || ExtensionAudioDescriptor==3)
- for (size_t Pos=0; Pos+4<=Element_Size; Pos++)
- if (CC4(Buffer+Buffer_Offset+Pos)==0x5A5A5A5A)
- XCh_Sync=Pos;
-
- //XXCh
- if (ExtensionAudioDescriptor==6)
- for (size_t Pos=0; Pos+4<=Element_Size; Pos++)
- if (CC4(Buffer+Buffer_Offset+Pos)==0x47004A03)
- XXCh_Sync=Pos;
-
- //X96k
- if (ExtensionAudioDescriptor==2 || ExtensionAudioDescriptor==3)
- for (size_t Pos=0; Pos+4<=Element_Size; Pos++)
- if (CC4(Buffer+Buffer_Offset+Pos)==0x1D95F262)
- X96k_Sync=Pos;
-
- //Finding core size
- if (XCh_Sync<Core_Size)
- Core_Size=XCh_Sync;
- if (XXCh_Sync<Core_Size)
- Core_Size=XXCh_Sync;
- if (X96k_Sync<Core_Size)
- Core_Size=X96k_Sync;
- }
-
- //Parsing
- Skip_XX(Core_Size-Element_Offset, "Core data");
- if (ExtendedCoding && (ExtensionAudioDescriptor==2 || ExtensionAudioDescriptor==3))
- {
- Element_Begin0();
- Skip_B4( "Magic");
- Core_X96k(XCh_Sync-Element_Offset);
- Element_End0();
- }
- if (ExtendedCoding && (ExtensionAudioDescriptor==0 || ExtensionAudioDescriptor==3))
- {
- Element_Begin0();
- Skip_B4( "Magic");
- Core_XCh(Element_Size-Element_Offset);
- Element_End0();
- }
- if (ExtendedCoding && ExtensionAudioDescriptor==6)
- {
- Element_Begin0();
- Skip_B4( "Magic");
- Core_XXCh(Element_Size-Element_Offset);
- Element_End0();
- }
-
- //Filling
- FILLING_BEGIN();
- if (Count_Get(Stream_Audio)==0 && Frame_Count>=Frame_Count_Valid)
- {
- Accept("DTS");
- Fill("DTS");
-
- //No more need data
- if (!IsSub && MediaInfoLib::Config.ParseSpeed_Get()<1)
- Finish("DTS");
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::Core_XCh(int64u Size)
-{
- //Parsing
- Element_Name("XCh (6.1 channels)");
- int16u XChFSIZE;
- int8u AMODE;
- BS_Begin();
- Get_S2 (10, XChFSIZE, "Primary Frame Byte Size");
- Get_S1 ( 4, AMODE, "Extension Channel Arrangement");
- BS_End();
- if (XChFSIZE==Element_Size-(Element_Offset-6))
- XChFSIZE--; //Compatibility reason (from specs)
- if ((int64u)XChFSIZE+1-6<=Size-2)
- Skip_XX(XChFSIZE+1-6, "XCh data");
- else
- Skip_XX(Size-2, "XCh data (with problem)");
-
- FILLING_BEGIN();
- channel_arrangement_XCh=AMODE;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::Core_XXCh(int64u Size)
-{
- Element_Name("XXCh (6.1 or 7.1 channels)");
- int8u ChannelsAdded;
- BS_Begin();
- Skip_S1 (8, "?");
- Get_S1 (2, ChannelsAdded, "Channels added?");
- Skip_S1 (6, "?");
- BS_End();
- Skip_XX(Size-2, "Data");
-
- FILLING_BEGIN();
- channel_arrangement_XCh=ChannelsAdded;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::Core_X96k(int64u Size)
-{
- //Parsing
- Element_Name("X96k (96 KHz)");
- int16u FSIZE96;
- int8u REVNO;
- BS_Begin();
- Get_S2 (12, FSIZE96, "96 kHz Extension Frame Byte Data Size");
- Get_S1 ( 4, REVNO, "Revision Number");
- BS_End();
- Skip_XX(Size-2, "X96k data"); //FSIZE96 is until end, not X96k size
-
- FILLING_BEGIN();
- sample_frequency_X96k=14; //96KHz
- Profile="96/24";
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::HD()
-{
- //Parsing
- while (Element_Offset<Element_Size)
-
- {
- //Looking for size
- int64u Next=Element_Offset+4;
- while (Next+4<=Element_Size)
- {
- int32u CC=CC4(Buffer+Buffer_Offset+(size_t)Next);
- if (CC==0x0A801921
- || CC==0x1D95F262
- || CC==0x41A29547
- || CC==0x47004A03
- || CC==0x5A5A5A5A
- || CC==0x655E315E)
- break;
- Next++;
- }
- if (Next+4>Element_Size)
- Next=Element_Size;
-
- Element_Begin0();
- int32u Magic;
- Get_B4 (Magic, "Magic");
- switch (Magic)
- {
- case 0x0A801921 : HD_XSA(Next-Element_Offset); break;
- case 0x1D95F262 : HD_X96k(Next-Element_Offset); break;
- case 0x41A29547 : HD_XLL(Next-Element_Offset); break;
- case 0x47004A03 : HD_XXCh(Next-Element_Offset); break;
- case 0x5A5A5A5A : HD_XCh(Next-Element_Offset); break;
- case 0x655E315E : HD_XBR(Next-Element_Offset); break;
- default :
- //Magic value is unknown
- if (Profile.empty())
- Profile="HD";
- Skip_XX(Next-Element_Offset, "Data");
- }
- Element_End0();
- }
-
- //Filling
- FILLING_BEGIN();
- if (Count_Get(Stream_Audio)==0 && Frame_Count>=Frame_Count_Valid)
- {
- Accept("DTS");
- Fill("DTS");
-
- //No more need data
- if (!IsSub && MediaInfoLib::Config.ParseSpeed_Get()<1)
- Finish("DTS");
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::HD_XCh(int64u Size)
-{
- //Parsing
- Element_Name("XCh (6.1 channels)");
- Skip_XX(Size, "Data");
-
- FILLING_BEGIN();
- channel_arrangement_XCh=1;
- if (Profile.empty())
- Profile="HRA";
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::HD_XXCh(int64u Size)
-{
- Element_Name("XXCh (6.1 or 7.1 channels)");
- int8u ChannelsAdded;
- BS_Begin();
- Skip_S1 (8, "?");
- Get_S1 (2, ChannelsAdded, "Channels added?");
- Skip_S1 (6, "?");
- BS_End();
- Skip_XX(Size-2, "Data");
-
- FILLING_BEGIN();
- channel_arrangement_XCh=ChannelsAdded;
- if (Profile.empty())
- Profile="HRA";
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::HD_X96k(int64u Size)
-{
- //Parsing
- Element_Name("X96k (96 KHz)");
- Skip_XX(Size, "Data");
-
- FILLING_BEGIN();
- sample_frequency=14; //96KHz
- Profile="HRA";
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::HD_XLL(int64u Size)
-{
- Element_Name("XLL (LossLess)");
- Skip_XX(Size, "Data");
-
- FILLING_BEGIN();
- Profile="MA";
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::HD_XBR(int64u Size)
-{
- Element_Name("XBR (BitRate extension)");
- Skip_XX(Size, "Data");
-
- FILLING_BEGIN();
- Profile="HRA";
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dts::HD_XSA(int64u Size)
-{
- Element_Name("XSA (low bitrate)");
- Skip_XX(Size, "Data");
-
- FILLING_BEGIN();
- Profile="Express";
- FILLING_END();
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-float64 File_Dts::BitRate_Get(bool WithHD)
-{
- if (bit_rate<29 || Profile==__T("Express"))
- {
- float64 BitRate;
- if (Profile==__T("Express"))
- BitRate=0; //No core bitrate
- else if (DTS_SamplingRate[sample_frequency])
- BitRate=((float64)Primary_Frame_Byte_Size)*8/(Number_Of_PCM_Sample_Blocks*32)*DTS_SamplingRate[sample_frequency]; //(float64)DTS_BitRate[bit_rate];
- else
- BitRate=0; //Problem
- if (WithHD && HD_ExSSFrameDurationCode!=(int8u)-1)
- {
- int32u SamplePerFrames=HD_ExSSFrameDurationCode;
- switch (HD_MaximumSampleRate)
- {
- case 0 : // 8000
- case 10 : // 12000
- SamplePerFrames*= 128; break;
- case 1 : // 16000
- case 5 : // 22050
- case 11 : // 24000
- SamplePerFrames*= 256; break;
- case 2 : // 32000
- case 6 : // 44100
- case 12 : // 48000
- SamplePerFrames*= 512; break;
- case 3 : // 64000
- case 7 : // 88200
- case 13 : // 96000
- SamplePerFrames*=1024; break;
- case 4 : //128000
- case 8 : //176400
- case 14 : //192000
- SamplePerFrames*=2048; break;
- case 9 : //352800
- case 15 : //384000
- SamplePerFrames*=4096; break;
- default : SamplePerFrames= 0; break; //Can never happen (4 bits)
- }
- if (SamplePerFrames)
- BitRate+=((float64)HD_size)*8*DTS_HD_MaximumSampleRate[HD_MaximumSampleRate]/SamplePerFrames;
- }
- //if (Primary_Frame_Byte_Size && Profile==__T("HRA"))
- // BitRate*=1+((float64)HD_size)/Primary_Frame_Byte_Size; //HD block are not in the nominal bitrate
- return BitRate;
- }
- else
- return 0;
-}
-
-//---------------------------------------------------------------------------
-bool File_Dts::FrameSynchPoint_Test()
-{
- if (Save_Buffer)
- return true; //Test already made by Synchronize()
-
- int64u Value=CC6(Buffer+Buffer_Offset);
- if ((Value&0xFFFFFFFFFC00LL)==0x7FFE8001FC00LL //16 bits and big endian Core
- || (Value&0xFFFFFFFF00FCLL)==0xFE7F018000FCLL //16 bits and little endian Core
- || (Value&0xFFFFFFFFF7F0LL)==0x1FFFE80007F0LL //14 bits and big endian Core
- || (Value&0xFFFFFFFFF0F7LL)==0xFF1F00E8F007LL //14 bits and little endian Core
- || (Value&0xFFFFFFFF0000LL)==0x645820250000LL) //16 bits and big endian HD
- {
- //Configuration - 14 bits or Little Endian
- switch (Buffer[Buffer_Offset])
- {
- default : Word=true; BigEndian=true; break; //16 bits and big endian bitstream
- case 0xFE : Word=true; BigEndian=false; break; //16 bits and little endian bitstream
- case 0x1F : Word=false; BigEndian=true; break; //14 bits and big endian bitstream
- case 0xFF : Word=false; BigEndian=false; break; //14 bits and little endian bitstream
- }
-
- int32u Size;
- if (Buffer[Buffer_Offset]==0x64) //HD
- {
- if (Buffer_Offset+10>Buffer_Size)
- return false; //Need more data
-
- bool isBlownUpHeader=(Buffer[Buffer_Offset+5]&0x20)?true:false;
- if (isBlownUpHeader)
- Size=((Buffer[Buffer_Offset+6]&0x01)<<19)
- | ( Buffer[Buffer_Offset+7] <<11)
- | ( Buffer[Buffer_Offset+8] << 3)
- | ( Buffer[Buffer_Offset+9] >> 5);
- else
- Size=((Buffer[Buffer_Offset+6]&0x1F)<<13)
- | ( Buffer[Buffer_Offset+7] << 3)
- | ( Buffer[Buffer_Offset+8] >> 5);
- Size++;
- Original_Size=Size;
- }
- else
- {
- if (Word)
- {
- if (BigEndian)
- Size=((Buffer[Buffer_Offset+5]&0x03)<<12)
- | ( Buffer[Buffer_Offset+6] << 4)
- | ( Buffer[Buffer_Offset+7] >> 4);
- else
- Size=((Buffer[Buffer_Offset+4]&0x03)<<12)
- | ( Buffer[Buffer_Offset+7] << 4)
- | ( Buffer[Buffer_Offset+6] >> 4);
- Size++;
- Original_Size=Size;
- }
- else
- {
- if (BigEndian)
- Size=((Buffer[Buffer_Offset+6]&0x03)<<12)
- | ( Buffer[Buffer_Offset+7] << 4)
- | ((Buffer[Buffer_Offset+8]&0x3C)>> 2);
- else
- Size=((Buffer[Buffer_Offset+7]&0x03)<<12)
- | ( Buffer[Buffer_Offset+6] << 4)
- | ((Buffer[Buffer_Offset+9]&0x3C)>> 2);
- Size++;
- Original_Size=Size*16/14;
- }
- }
- if (Buffer_Offset+Size>Buffer_Size)
- return false; //Need more data
-
- if (!Word || !BigEndian)
- {
- Save_Buffer=Buffer;
- Save_Buffer_Offset=Buffer_Offset;
- Save_Buffer_Size=Buffer_Size;
-
- //Preparing new buffer
- if (Word)
- {
- int8u* Buffer_Little=new int8u[Size];
- for (size_t Pos=0; Pos+1<Size; Pos+=2)
- {
- Buffer_Little[Pos+1]=Save_Buffer[Buffer_Offset+Pos ];
- Buffer_Little[Pos ]=Save_Buffer[Buffer_Offset+Pos+1];
- }
- Save_Buffer=Buffer_Little;
- Save_Buffer_Offset=0;
- Save_Buffer_Size=Size;
- }
- else
- {
- int8u* Dest=new int8u[Size];
- for (size_t Pos=0; Pos+8<=Original_Size; Pos+=8)
- {
- int64u Value;
- if (BigEndian)
- Value =(((int64u)( BigEndian2int16u(Buffer+Pos )&0x3FFF))<<42)
- | (((int64u)( BigEndian2int16u(Buffer+Pos+2)&0x3FFF))<<28)
- | (((int64u)( BigEndian2int16u(Buffer+Pos+4)&0x3FFF))<<14)
- | (((int64u)( BigEndian2int16u(Buffer+Pos+6)&0x3FFF)) );
- else
- Value =(((int64u)(LittleEndian2int16u(Buffer+Pos )&0x3FFF))<<42)
- | (((int64u)(LittleEndian2int16u(Buffer+Pos+2)&0x3FFF))<<28)
- | (((int64u)(LittleEndian2int16u(Buffer+Pos+4)&0x3FFF))<<14)
- | (((int64u)(LittleEndian2int16u(Buffer+Pos+6)&0x3FFF)) );
- int56u2BigEndian(Dest+Pos*14/16, Value);
- }
- Save_Buffer=Dest;
- Save_Buffer_Offset=0;
- Save_Buffer_Size=Size;
- }
- }
-
- Synched=true;
- }
- else
- Synched=false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-} //NameSpace
-
-#endif //MEDIAINFO_DTS_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Dts.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Dts.h
deleted file mode 100644
index 549fd1afa..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Dts.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_DtsH
-#define MediaInfo_DtsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#ifdef ES
- #undef ES //Solaris defines this somewhere
-#endif
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Dts
-//***************************************************************************
-
-class File_Dts : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
-
- //Constructor/Destructor
- File_Dts();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Read_Buffer_Unsynched();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Core();
- void Core_XCh(int64u Size);
- void Core_XXCh(int64u Size);
- void Core_X96k(int64u Size);
- void HD();
- void HD_XCh(int64u Size);
- void HD_XXCh(int64u Size);
- void HD_X96k(int64u Size);
- void HD_XLL(int64u Size);
- void HD_XBR(int64u Size);
- void HD_XSA(int64u Size);
-
- //Buffer
- bool FrameSynchPoint_Test();
- const int8u* Save_Buffer;
- size_t Save_Buffer_Offset;
- size_t Save_Buffer_Size;
-
- //Temp
- std::vector<ZenLib::int32u> Asset_Sizes;
- Ztring Profile;
- int32u Original_Size;
- int32u HD_size;
- int16u Primary_Frame_Byte_Size;
- int16u Number_Of_PCM_Sample_Blocks;
- int16u HD_SpeakerActivityMask;
- int8u channel_arrangement;
- int8u channel_arrangement_XCh;
- int8u sample_frequency;
- int8u sample_frequency_X96k;
- int8u bit_rate;
- int8u lfe_effects;
- int8u bits_per_sample;
- int8u ExtensionAudioDescriptor;
- int8u HD_BitResolution;
- int8u HD_MaximumSampleRate;
- int8u HD_TotalNumberChannels;
- int8u HD_ExSSFrameDurationCode;
- bool ExtendedCoding;
- bool Word;
- bool BigEndian;
- bool ES;
- bool Core_Exists;
-
- //Helpers
- float64 BitRate_Get(bool WithHD=false);
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ExtendedModule.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ExtendedModule.cpp
deleted file mode 100644
index 9f7f17e0d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ExtendedModule.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_XM_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_ExtendedModule.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_ExtendedModule::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<38)
- return false; //Must wait for more data
-
- if (CC8(Buffer)!=0x457874656E646564LL || CC8(Buffer+8)!=0x204D6F64756C653ALL //"Extended Module: "
- || CC1(Buffer+16)!=0x20 || CC1(Buffer+37)!=0x1A)
- {
- Reject("Extended Module");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ExtendedModule::Read_Buffer_Continue()
-{
- //Parsing
- Ztring ModuleName, TrackerName;
- int32u HeaderSize;
- int16u Length, Channels, Patterns, Instruments, Flags, Tempo, BPM;
- int8u VersionMinor, VersionMajor;
- Skip_String(17, "Signature");
- Get_Local(20, ModuleName, "Module name");
- Skip_L1( "0x1A");
- Get_Local(20, TrackerName, "Tracker name");
- Get_L1 (VersionMinor, "Version (minor)");
- Get_L1 (VersionMajor, "Version (major)");
- Get_L4 (HeaderSize, "Header size");
- Get_L2 (Length, "Song Length");
- Skip_L2( "Restart position");
- Get_L2 (Channels, "Number of channels");
- Get_L2 (Patterns, "Number of patterns");
- Get_L2 (Instruments, "Number of instruments");
- Get_L2 (Flags, "Flags");
- Get_L2 (Tempo, "Tempo");
- Get_L2 (BPM, "BPM");
- Skip_XX(256, "Pattern order table");
-
- FILLING_BEGIN();
- Accept("Extended Module");
-
- Fill(Stream_General, 0, General_Format, "Extended Module");
- Fill(Stream_General, 0, General_Format_Version, Ztring::ToZtring(VersionMajor)+__T(".")+Ztring::ToZtring(VersionMinor/10)+Ztring::ToZtring(VersionMinor%10));
- Fill(Stream_General, 0, General_Track, ModuleName.Trim(__T(' ')));
- Fill(Stream_General, 0, General_Encoded_Application, TrackerName.Trim(__T(' ')));
- Fill(Stream_General, 0, "Tempo", Tempo);
- Fill(Stream_General, 0, "BPM", BPM);
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, "Sampler, Channels", Channels);
- Fill(Stream_Audio, 0, "Sampler, Patterns", Patterns);
- Fill(Stream_Audio, 0, "Sampler, Instruments", Instruments);
-
- //No more need data
- Finish("Extended Module");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_XM_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ExtendedModule.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ExtendedModule.h
deleted file mode 100644
index 7ad78f5d0..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ExtendedModule.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Extended Module files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ExtendedModuleH
-#define MediaInfo_File_ExtendedModuleH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_ExtendedModule
-//***************************************************************************
-
-class File_ExtendedModule : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Flac.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Flac.cpp
deleted file mode 100644
index 5aede74c2..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Flac.cpp
+++ /dev/null
@@ -1,252 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_FLAC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Flac.h"
-#include "MediaInfo/Tag/File_VorbisCom.h"
-#include "base64.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-extern const char* Id3v2_PictureType(int8u Type); //In Tag/File_Id3v2.cpp
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Flac::File_Flac()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-
- //In
- VorbisHeader=false;
-
- //Temp
- Last_metadata_block=false;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Flac::FileHeader_Begin()
-{
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- //Element_Size
- if (Buffer_Size<Buffer_Offset+4+(VorbisHeader?9:0))
- return false; //Must wait for more data
-
- if (CC4(Buffer+Buffer_Offset+(VorbisHeader?9:0))!=0x664C6143) //"fLaC"
- {
- File__Tags_Helper::Finish("Flac");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Flac::FileHeader_Parse()
-{
- //Parsing
- if (VorbisHeader)
- {
- Skip_B1( "Signature");
- Skip_Local(4, "Signature");
- Skip_B1( "Major version");
- Skip_B1( "Minor version");
- Skip_B2( "Number of header");
- }
- Skip_C4( "Signature");
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Flac::Header_Parse()
-{
- //Parsing
- int32u Length;
- int8u BLOCK_TYPE;
- BS_Begin();
- Get_SB ( Last_metadata_block, "Last-metadata-block");
- Get_S1 (7, BLOCK_TYPE, "BLOCK_TYPE");
- BS_End();
- Get_B3 (Length, "Length");
-
- //Filling
- Header_Fill_Code(BLOCK_TYPE, Ztring().From_CC1(BLOCK_TYPE));
- Header_Fill_Size(Element_Offset+Length);
-}
-
-//---------------------------------------------------------------------------
-void File_Flac::Data_Parse()
-{
- #define CASE_INFO(_NAME) \
- case Flac::_NAME : Element_Info1(#_NAME); _NAME(); break;
-
- //Parsing
- switch ((int16u)Element_Code)
- {
- CASE_INFO(STREAMINFO);
- CASE_INFO(PADDING);
- CASE_INFO(APPLICATION);
- CASE_INFO(SEEKTABLE);
- CASE_INFO(VORBIS_COMMENT);
- CASE_INFO(CUESHEET);
- CASE_INFO(PICTURE);
- default : Skip_XX(Element_Size, "Data");
- }
-
- if (Last_metadata_block)
- {
- if (!IsSub)
- Fill(Stream_Audio, 0, Audio_StreamSize, File_Size-(File_Offset+Buffer_Offset+Element_Size));
-
- //No more need data
- File__Tags_Helper::Finish("Flac");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Flac::STREAMINFO()
-{
- //Parsing
- int64u Samples;
- int32u FrameSize_Min, FrameSize_Max, SampleRate;
- int8u Channels, BitPerSample;
- Skip_B2( "BlockSize_Min"); //The minimum block size (in samples) used in the stream.
- Skip_B2( "BlockSize_Max"); //The maximum block size (in samples) used in the stream. (Minimum blocksize == maximum blocksize) implies a fixed-blocksize stream.
- Get_B3 ( FrameSize_Min, "FrameSize_Min"); //The minimum frame size (in bytes) used in the stream. May be 0 to imply the value is not known.
- Get_B3 ( FrameSize_Max, "FrameSize_Max"); //The maximum frame size (in bytes) used in the stream. May be 0 to imply the value is not known.
- BS_Begin();
- Get_S3 (20, SampleRate, "SampleRate"); //Sample rate in Hz. Though 20 bits are available, the maximum sample rate is limited by the structure of frame headers to 1048570Hz. Also, a value of 0 is invalid.
- Get_S1 ( 3, Channels, "Channels"); Param_Info2(Channels+1, " channels"); //(number of channels)-1. FLAC supports from 1 to 8 channels
- Get_S1 ( 5, BitPerSample, "BitPerSample"); Param_Info2(BitPerSample+1, " bits"); //(bits per sample)-1. FLAC supports from 4 to 32 bits per sample. Currently the reference encoder and decoders only support up to 24 bits per sample.
- Get_S5 (36, Samples, "Samples");
- BS_End();
- Skip_B16( "MD5 signature of the unencoded audio data");
-
- FILLING_BEGIN();
- if (SampleRate==0)
- return;
- File__Tags_Helper::Accept("FLAC");
-
- File__Tags_Helper::Streams_Fill();
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "FLAC");
- Fill(Stream_Audio, 0, Audio_Codec, "FLAC");
- if (FrameSize_Min==FrameSize_Max && FrameSize_Min!=0 ) // 0 means it is unknown
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
- else
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "VBR");
- Fill(Stream_Audio, 0, Audio_SamplingRate, SampleRate);
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels+1);
- Fill(Stream_Audio, 0, Audio_BitDepth, BitPerSample+1);
- if (!IsSub)
- Fill(Stream_Audio, 0, Audio_Duration, Samples*1000/SampleRate);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Flac::APPLICATION()
-{
- //Parsing
- Skip_C4( "Application");
- if (Element_Size>4)
- Skip_XX(Element_Size-4, "(Application specific)");
-}
-
-//---------------------------------------------------------------------------
-void File_Flac::VORBIS_COMMENT()
-{
- //Parsing
- #if defined(MEDIAINFO_VORBISCOM_YES)
- File_VorbisCom VorbisCom;
- VorbisCom.StreamKind_Specific=Stream_Audio;
- Open_Buffer_Init(&VorbisCom);
- Open_Buffer_Continue(&VorbisCom);
- File__Analyze::Finish(&VorbisCom);
- Merge(VorbisCom, Stream_General, 0, 0);
- Merge(VorbisCom, Stream_Audio, 0, 0);
- Merge(VorbisCom, Stream_Menu, 0, 0);
- #else
- Skip_XX(Element_Offset, "Data");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Flac::PICTURE()
-{
- //Parsing
- int32u PictureType, MimeType_Size, Description_Size, Data_Size;
- Ztring MimeType, Description;
- Get_B4 (PictureType, "Picture type"); Element_Info1(Id3v2_PictureType((int8u)PictureType));
- Get_B4 (MimeType_Size, "MIME type size");
- Get_Local(MimeType_Size, MimeType, "MIME type");
- Get_B4 (Description_Size, "Description size");
- Get_UTF8(Description_Size, Description, "Description");
- Skip_B4( "Width");
- Skip_B4( "Height");
- Skip_B4( "Color depth");
- Skip_B4( "Number of colors used");
- Get_B4 (Data_Size, "Data size");
- if (Element_Offset+Data_Size>Element_Size)
- return; //There is a problem
- std::string Data_Raw((const char*)(Buffer+(size_t)(Buffer_Offset+Element_Offset)), Data_Size);
- std::string Data_Base64(Base64::encode(Data_Raw));
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- //Filling
- Fill(Stream_General, 0, General_Cover, "Yes");
- Fill(Stream_General, 0, General_Cover_Description, Description);
- Fill(Stream_General, 0, General_Cover_Type, Id3v2_PictureType((int8u)PictureType));
- Fill(Stream_General, 0, General_Cover_Mime, MimeType);
- Fill(Stream_General, 0, General_Cover_Data, Data_Base64);
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_FLAC_YES
-
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Flac.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Flac.h
deleted file mode 100644
index 33abd5eda..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Flac.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Flac files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_FlacH
-#define MediaInfo_File_FlacH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Flac
-//***************************************************************************
-
-class File_Flac : public File__Analyze, public File__Tags_Helper
-{
-public :
- //In
- bool VorbisHeader;
-
- //Constructor/Destructor
- File_Flac();
-
-private :
- //Streams management
- void Streams_Finish() {File__Tags_Helper::Streams_Finish();}
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue() {File__Tags_Helper::Read_Buffer_Continue();}
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void STREAMINFO();
- void PADDING() {Skip_XX(Element_Size, "Data");}
- void APPLICATION();
- void SEEKTABLE() {Skip_XX(Element_Size, "Data");}
- void VORBIS_COMMENT();
- void CUESHEET() {Skip_XX(Element_Size, "Data");}
- void PICTURE();
-
- //Temp
- bool Last_metadata_block;
-};
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-namespace Flac
-{
- const int16u STREAMINFO =0x00;
- const int16u PADDING =0x01;
- const int16u APPLICATION =0x02;
- const int16u SEEKTABLE =0x03;
- const int16u VORBIS_COMMENT =0x04;
- const int16u CUESHEET =0x05;
- const int16u PICTURE =0x06;
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ImpulseTracker.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ImpulseTracker.cpp
deleted file mode 100644
index 6f7bf1834..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ImpulseTracker.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_IT_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_ImpulseTracker.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_ImpulseTracker::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- if (CC4(Buffer)!=0x494D504D) //"IMPM"
- {
- Reject("Impulse Tracker");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ImpulseTracker::Read_Buffer_Continue()
-{
- //Parsing
- Ztring SongName;
- int16u OrdNum, InsNum, SmpNum, PatNum, Flags, Special;
- int8u VersionMajor, VersionMinor, SoftwareVersionMajor, SoftwareVersionMinor, IS, TS;
- bool Stereo;
- Skip_B4( "Signature");
-
- Get_Local(26, SongName, "Song name");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Get_L2 (OrdNum, "Orders count");
- Get_L2 (InsNum, "Instruments count");
- Get_L2 (SmpNum, "Samples count");
- Get_L2 (PatNum, "Paterns count");
- Get_L1 (SoftwareVersionMinor, "Cwt/v (Minor)");
- Get_L1 (SoftwareVersionMajor, "Cwt/v (Major)");
- Get_L1 (VersionMinor, "Cwt (Minor)");
- Get_L1 (VersionMajor, "Cwt (Major)");
- Get_L2 (Flags, "Flags");
- Get_Flags (Flags, 0, Stereo, "Stereo");
- Skip_Flags(Flags, 1, "Vol0MixOptimizations");
- Skip_Flags(Flags, 2, "Use instruments/Samples");
- Skip_Flags(Flags, 3, "Linear/Amiga slides");
- Skip_Flags(Flags, 4, "Old/IT Effects");
- Get_L2 (Special, "Special");
- Skip_Flags(Special, 0, "Song Message attached");
- Skip_L1( "Global volume");
- Skip_L1( "Mix volume");
- Get_L1 (IS, "Initial Speed");
- Get_L1 (TS, "Initial Temp");
- Skip_L1( "Panning separation between channels");
- Skip_L1( "0");
- Skip_L2( "Message Length");
- Skip_L4( "Message Offset");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_XX(64, "Chnl Pan");
- Skip_XX(64, "Chnl Vol");
- Skip_XX(OrdNum, "Orders");
- Skip_XX(InsNum*4, "Instruments");
- Skip_XX(SmpNum*4, "Samples");
- Skip_XX(PatNum*4, "Patterns");
-
- FILLING_BEGIN();
- Accept("Impulse Tracker");
-
- Fill(Stream_General, 0, General_Format, "Impulse Tracker");
- Fill(Stream_General, 0, General_Format_Version, Ztring(__T("Version "))+Ztring::ToZtring(VersionMajor)+__T(".")+Ztring::ToZtring(VersionMinor/16)+Ztring::ToZtring(VersionMinor%16));
- Fill(Stream_General, 0, General_Track, SongName);
- Fill(Stream_General, 0, General_Encoded_Application, Ztring(__T("Impulse Tracker ")+Ztring::ToZtring(SoftwareVersionMajor)+__T(".")+Ztring::ToZtring(SoftwareVersionMinor/16)+Ztring::ToZtring(SoftwareVersionMinor%16)));
- Fill(Stream_General, 0, "BPM", TS);
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Stereo?2:1);
-
- //No more need data
- Finish("Impulse Tracker");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_IT_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ImpulseTracker.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ImpulseTracker.h
deleted file mode 100644
index bcfae2353..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ImpulseTracker.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Impulse Tracker files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ImpulseTrackerH
-#define MediaInfo_File_ImpulseTrackerH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_ImpulseTracker
-//***************************************************************************
-
-class File_ImpulseTracker : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_La.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_La.cpp
deleted file mode 100644
index 843639706..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_La.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_LA_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_La.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_La::File_La()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_La::Streams_Finish()
-{
- //Filling
- int64u CompressedSize=File_Size-TagsSize;
- float32 CompressionRatio=((float32)UncompressedSize)/CompressedSize;
-
- Fill(Stream_Audio, 0, Audio_StreamSize, CompressedSize);
- Fill(Stream_Audio, 0, Audio_Compression_Ratio, CompressionRatio);
-
- File__Tags_Helper::Streams_Finish();
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_La::FileHeader_Begin()
-{
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- //Synchro
- if (Buffer_Offset+2>Buffer_Size)
- return false;
- if (CC3(Buffer+Buffer_Offset)!=0x4C4130) //"LA0"
- {
- File__Tags_Helper::Reject("LA");
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_La::FileHeader_Parse()
-{
- //Parsing
- Ztring Major, Minor;
- int32u SampleRate, Samples, BytesPerSecond, UnCompSize, WAVEChunk, FmtSize, FmtChunk, CRC32;
- int16u RawFormat, Channels, BytesPerSample, BitsPerSample;
-
- Skip_Local(2, "signature");
- Get_Local (1, Major, "major_version");
- Get_Local (1, Minor, "minor_version");
- Get_L4 (UnCompSize, "uncompressed_size");
- Get_L4 (WAVEChunk, "chunk");
- Skip_L4( "fmt_size");
- Get_L4 (FmtChunk, "fmt_chunk");
- Get_L4 (FmtSize, "fmt_size");
- Get_L2 (RawFormat, "raw_format");
- Get_L2 (Channels, "channels"); Param_Info2(Channels, " channel(s)");
- Get_L4 (SampleRate, "sample_rate");
- Get_L4 (BytesPerSecond, "bytes_per_second");
- Get_L2 (BytesPerSample, "bytes_per_sample");
- Get_L2 (BitsPerSample, "bits_per_sample");
- Get_L4 (Samples, "samples");
- Skip_L1( "flags");
- Get_L4 (CRC32, "crc");
-
- FILLING_BEGIN();
- if (SampleRate==0)
- return;
- Duration=((int64u)Samples/Channels)*1000/SampleRate; // Seems that it's samples per channels otherwise Duration is doubled ??!!
- if (Duration==0)
- return;
- UncompressedSize=((int64u)Samples)*Channels*(BitsPerSample/8);
- if (UncompressedSize==0)
- return;
-
- File__Tags_Helper::Accept("LA");
- Fill(Stream_General, 0, General_Format_Version, Major+__T('.')+Minor);
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "LA");
- Fill(Stream_Audio, 0, Audio_Codec, "LA");
- Fill(Stream_Audio, 0, Audio_Format_Version, Major+__T('.')+Minor);
- Fill(Stream_Audio, 0, Audio_BitDepth, BitsPerSample);
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- Fill(Stream_Audio, 0, Audio_SamplingRate, SampleRate);
- Fill(Stream_Audio, 0, Audio_Duration, Duration);
-
- //No more need data
- File__Tags_Helper::Finish("LA");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_LA_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_La.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_La.h
deleted file mode 100644
index a373c528a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_La.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_LaH
-#define MediaInfo_File_LaH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_La
-//***************************************************************************
-
-class File_La : public File__Analyze, public File__Tags_Helper
-{
-public :
- //Constructor/Destructor
- File_La();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue() {File__Tags_Helper::Read_Buffer_Continue();}
-
- //Temp
- int64u Duration;
- int64u UncompressedSize;
- bool seekable;
- bool high;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Midi.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Midi.cpp
deleted file mode 100644
index 907158ffa..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Midi.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MIDI_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Midi.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Midi::Read_Buffer_Continue()
-{
- Reject("MIDI");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MIDI_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Midi.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Midi.h
deleted file mode 100644
index 8d3a875c3..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Midi.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MIDI files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_MidiH
-#define MediaInfo_File_MidiH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Midi
-//***************************************************************************
-
-class File_Midi : public File__Analyze
-{
-protected :
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Module.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Module.cpp
deleted file mode 100644
index 2ae5619bf..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Module.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MOD_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Module.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Module::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<1084)
- return false; //Must wait for more data
-
- int32u Signature=CC4(Buffer+1080);
- switch (Signature)
- {
- case 0x4D2E4B2E : //M.K.
- case 0x4D214B21 : //M!K!
- case 0x664C5434 : //FLT4
- case 0x664C5438 : //FLT8
- case 0x3663684E : //6CHN
- case 0x3863684E : //8CHN
- break;
- default : Reject("Module");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Module::Read_Buffer_Continue()
-{
- //Parsing
- Ztring ModuleName, SamplesName;
- Get_Local (20, ModuleName, "Module name");
- for (int8u Pos=0; Pos<31; Pos++)
- {
- Element_Begin0();
- Get_Local(22, SamplesName, "Sample's name"); Element_Name(SamplesName);
- Skip_B2( "Sample length");
- Skip_B1( "Finetune value for the sample");
- Skip_B1( "Volume of the sample");
- Skip_B2( "Start of sample repeat offset");
- Skip_B2( "Length of sample repeat");
- Element_End0();
- }
- Skip_B1( "Number of song positions");
- Skip_B1( "0x8F");
- Skip_XX(128, "Pattern table");
- Skip_C4( "Signature");
-
- FILLING_BEGIN();
- Accept("Module");
-
- Fill(Stream_General, 0, General_Format, "Module");
-
- Stream_Prepare(Stream_Audio);
-
- //No more need data
- Finish("Module");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MOD_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Module.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Module.h
deleted file mode 100644
index 0dd94926a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Module.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Module files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ModuleH
-#define MediaInfo_File_ModuleH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Module
-//***************************************************************************
-
-class File_Module : public File__Analyze
-{
-public :
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpc.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpc.cpp
deleted file mode 100644
index 59082bbb9..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpc.cpp
+++ /dev/null
@@ -1,213 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Source: http://trac.musepack.net/trac/wiki/SV7Specification
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos (Common)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPC_YES) || defined(MEDIAINFO_MPCSV8_YES)
-//---------------------------------------------------------------------------
-
-#include "ZenLib/Conf.h"
-using namespace ZenLib;
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern const int16u Mpc_SampleFreq[]=
-{
- 44100, //CD
- 48000, //DAT, DVC, ADR
- 37800, //CD-ROM-XA
- 32000, //DSR, DAT-LP, DVC-LP
-};
-
-//---------------------------------------------------------------------------
-} //NameSpace
-
-//---------------------------------------------------------------------------
-#endif //...
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-//
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Mpc.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Mpc_Profile[]=
-{
- "no profile",
- "Unstable/Experimental",
- "",
- "",
- "",
- "Below Telephone (q=0)",
- "Below Telephone (q=1)",
- "Telephone (q=2)",
- "Thumb (q=3)",
- "Radio (q=4)",
- "Standard (q=5)",
- "Xtreme (q=6)",
- "Insane (q=7)",
- "BrainDead (q=8)",
- "Above BrainDead (q=9)",
- "Above BrainDead (q=10)",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpc_Link[]=
-{
- "Starts or ends with a very low level",
- "Ends loudly",
- "Starts loudly",
- "Starts loudly and ends loudly",
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mpc::File_Mpc()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-}
-
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mpc::FileHeader_Begin()
-{
- //Tags
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- if (Buffer_Offset+4>Buffer_Size)
- return false;
-
- //Test
- if (CC3(Buffer)!=0x4D502B || (CC1(Buffer+3)&0x0F)!=7) //"MP+" version 7
- {
- File__Tags_Helper::Reject("Musepack SV7");
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpc::FileHeader_Parse()
-{
- //Parsing
- Element_Begin1("SV7 header");
- Ztring Encoder;
- int32u FrameCount;
- int16u TitleGain, AlbumGain;
- int8u Profile, Link, SampleFreq, EncoderVersion;
-
- Skip_C3( "Signature");
- BS_Begin();
- Skip_S1(4, "PNS");
- Skip_S1(4, "Version");
- BS_End();
-
- Get_L4 (FrameCount, "FrameCount");
-
- Skip_L2( "MaxLevel");
- BS_Begin();
- Get_S1 (4, Profile, "Profile"); Param_Info1(Mpc_Profile[Profile]);
- Get_S1 (2, Link, "Link"); Param_Info1(Mpc_Link[Link]);
- Get_S1 (2, SampleFreq, "SampleFreq"); Param_Info1(Mpc_SampleFreq[SampleFreq]);
- Skip_SB( "IntensityStereo");
- Skip_SB( "MidSideStereo");
- Skip_S1(6, "MaxBand");
- BS_End();
-
- Skip_L2( "TitlePeak");
- Get_L2 (TitleGain, "TitleGain"); Param_Info3(((float32)((int16s)TitleGain))/1000, 2, " dB");
-
- Skip_L2( "AlbumPeak");
- Get_L2 (AlbumGain, "AlbumGain"); Param_Info3(((float32)((int16s)TitleGain))/1000, 2, " dB");
-
- BS_Begin();
- Skip_S2(16, "unused");
- Skip_S1( 4, "LastFrameLength (part 1)");
- Skip_SB( "FastSeekingSafe");
- Skip_S1( 3, "unused");
- Skip_SB( "TrueGapless");
- Skip_S1( 7, "LastFrameLength (part 2)");
- BS_End();
-
- Get_L1 (EncoderVersion, "EncoderVersion");
- Encoder.From_Number(((float)EncoderVersion)/100, 2); if (EncoderVersion%10==0); else if (EncoderVersion%2==0) Encoder+=__T(" Beta"); else if (EncoderVersion%2==1) Encoder+=__T(" Alpha"); Param_Info1(Encoder);
-
- Element_End0();
-
- FILLING_BEGIN();
- File__Tags_Helper::Accept("Musepack SV7");
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_SamplingRate, Mpc_SampleFreq[SampleFreq]);
- Fill(Stream_Audio, 0, Audio_SamplingCount, FrameCount*1152);
- Fill(Stream_Audio, 0, Audio_Format, "Musepack SV7");
- Fill(Stream_Audio, 0, Audio_Codec, "SV7");
- Fill(Stream_Audio, 0, Audio_Codec_Settings, Mpc_Profile[Profile]);
- Fill(Stream_Audio, 0, Audio_Encoded_Library, Encoder);
- Fill(Stream_Audio, 0, Audio_BitDepth, 16); //MPC support only 16 bits
- Fill(Stream_Audio, 0, Audio_Duration, ((int64u)FrameCount)*1152*1000/Mpc_SampleFreq[SampleFreq]);
- if (FrameCount)
- Fill(Stream_Audio, 0, Audio_BitRate, (File_Size-25)*8*Mpc_SampleFreq[SampleFreq]/FrameCount/1152);
-
- //No more need data
- File__Tags_Helper::Finish("Musepack SV7");
- FILLING_END();
-}
-
-} //Namespace
-
-#endif //MEDIAINFO_MPC_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpc.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpc.h
deleted file mode 100644
index d1b472aee..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpc.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Musepack files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_MpcH
-#define MediaInfo_File_MpcH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Mpc
-//***************************************************************************
-
-class File_Mpc : public File__Analyze, public File__Tags_Helper
-{
-public :
- //Constructor/Destructor
- File_Mpc();
-
-private :
- //Streams management
- void Streams_Finish() {File__Tags_Helper::Streams_Finish();}
-
- //Buffer - Global
- void Read_Buffer_Continue() {File__Tags_Helper::Read_Buffer_Continue();}
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_MpcSv8.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_MpcSv8.cpp
deleted file mode 100644
index 7f34558c5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_MpcSv8.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Source: http://trac.musepack.net/trac/wiki/SV8Specification
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPCSV8_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_MpcSv8.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-extern const int16u Mpc_SampleFreq[];
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- const int32u AP=0x4150;
- const int32u CT=0x4354;
- const int32u EI=0x4549;
- const int32u RG=0x5247;
- const int32u SE=0x5345;
- const int32u SH=0x5348;
- const int32u SO=0x534F;
- const int32u ST=0x5354;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_MpcSv8::File_MpcSv8()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-}
-
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_MpcSv8::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- if (CC4(Buffer)!=0x4D50434B) //"MPCK"
- {
- File__Tags_Helper::Reject("Musepack SV8");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpcSv8::FileHeader_Parse()
-{
- //Parsing
- Skip_C4( "Magic Number");
-
- FILLING_BEGIN();
- File__Tags_Helper::Accept("MpcSv8");
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "Musepack SV8");
- Fill(Stream_Audio, 0, Audio_Codec, "SV8");
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_MpcSv8::Header_Begin()
-{
- //Tags
- if (!File__Tags_Helper::Header_Begin())
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_MpcSv8::Header_Parse()
-{
- //Parsing
- int64u Size;
- int16u Key;
- Get_C2 (Key, "Key");
- Get_VS (Size, "Size");
-
- //Filling
- Header_Fill_Code(Key, Ztring().From_CC4(Key<<16)); //Quick filling for CC2 with text
- Header_Fill_Size(Key==Elements::AP?Element_Offset:Size); //We don't need the data of audio packet, and we will stop here...
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpcSv8::Data_Parse()
-{
- #define CASE_INFO(_NAME, _DETAIL) \
- case Elements::_NAME : Element_Info1(_DETAIL); _NAME(); break;
-
- //Parsing
- switch (Element_Code)
- {
- CASE_INFO(AP, "Audio Packet");
- CASE_INFO(CT, "Chapter-Tag");
- CASE_INFO(EI, "Encoder Info");
- CASE_INFO(RG, "Replay Gain");
- CASE_INFO(SE, "Stream End");
- CASE_INFO(SH, "Stream Header");
- CASE_INFO(SO, "Seek Table Offset");
- CASE_INFO(ST, "Seek Table");
- default : Skip_XX(Element_Size, "Data");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpcSv8::AP()
-{
- //No more need data
- File__Tags_Helper::Finish("MpcSv8");
-}
-
-//---------------------------------------------------------------------------
-void File_MpcSv8::EI()
-{
- //Parsing
- int8u Quality, Version1, Version2, Version3;
- bool PNS;
- BS_Begin();
- Get_S1 (7, Quality, "Quality");
- Get_SB ( PNS, "PNS");
- BS_End();
- Get_B1 (Version1, "Major version");
- Get_B1 (Version2, "Minor version");
- Get_B1 (Version3, "Build");
-}
-
-//---------------------------------------------------------------------------
-void File_MpcSv8::RG()
-{
- //Parsing
- int16u TitleGain, AlbumGain;
- Skip_B1( "Version");
- Get_L2 (TitleGain, "Title gain"); Param_Info3(((float32)((int16s)TitleGain))/1000, 2, " dB");
- Skip_L2( "Title peak");
- Get_L2 (AlbumGain, "Album gain"); Param_Info3(((float32)((int16s)TitleGain))/1000, 2, " dB");
- Skip_L2( "Album peak");
-}
-
-//---------------------------------------------------------------------------
-void File_MpcSv8::SH()
-{
- //Parsing
- int64u SampleCount;
- int8u Version, SampleFrequency, ChannelCount;
- bool MidSideStereo;
- Skip_B4( "CRC32");
- Get_B1 (Version, "Version");
- Get_VS (SampleCount, "Sample count");
- Skip_VS( "Beginning silence");
- BS_Begin();
- Get_S1 (3, SampleFrequency, "Sample frequency"); Param_Info1(Mpc_SampleFreq[SampleFrequency]);
- Skip_S1(5, "Max used bands");
- Get_S1 (4, ChannelCount, "Channel count");
- Get_SB ( MidSideStereo, "Mid side stereo used");
- Skip_S1(3, "Audio block frames");
- BS_End();
-
- //Filling
- FILLING_BEGIN();
- Fill(Stream_Audio, 0, Audio_SamplingRate, Mpc_SampleFreq[SampleFrequency]);
- if (SampleCount)
- {
- Fill(Stream_Audio, 0, Audio_SamplingCount, SampleCount);
- Fill(Stream_Audio, 0, Audio_Duration, SampleCount*1000/Mpc_SampleFreq[SampleFrequency]);
- Fill(Stream_Audio, 0, Audio_BitRate, File_Size*8*Mpc_SampleFreq[SampleFrequency]/SampleCount); //Should be more precise...
- }
- Fill(Stream_Audio, 0, Audio_BitDepth, 16); //MPC support only 16 bits
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_MpcSv8::SO()
-{
- //Parsing
- Skip_VS( "Offset");
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPCSV8_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_MpcSv8.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_MpcSv8.h
deleted file mode 100644
index 6ab836f14..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_MpcSv8.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Musepack files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_MpcSv8H
-#define MediaInfo_File_MpcSv8H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_MpcSv8
-//***************************************************************************
-
-class File_MpcSv8 : public File__Analyze, public File__Tags_Helper
-{
-public :
- //Constructor/Destructor
- File_MpcSv8();
-
-private :
- //Streams management
- void Streams_Finish() {File__Tags_Helper::Streams_Finish();}
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue() {File__Tags_Helper::Read_Buffer_Continue();}
-
- //Buffer - Per element
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void AP();
- void CT() {Skip_XX(Element_Size, "Data");}
- void EI();
- void RG();
- void SE() {Skip_XX(Element_Size, "Data");}
- void SH();
- void SO();
- void ST() {Skip_XX(Element_Size, "Data");}
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpega.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpega.cpp
deleted file mode 100644
index a779d3c42..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpega.cpp
+++ /dev/null
@@ -1,1658 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// A good start : http://www.codeproject.com/audio/MPEGAudioInfo.asp
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constants (Common)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGA_YES) || defined(MEDIAINFO_MPEGTS_YES) || defined(MEDIAINFO_MPEGPS_YES)
-//---------------------------------------------------------------------------
-
-#include "ZenLib/Conf.h"
-using namespace ZenLib;
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-const char* Mpega_Version[4]=
-{
- "MPA2.5",
- "",
- "MPA2",
- "MPA1"
-};
-
-//---------------------------------------------------------------------------
-const char* Mpega_Layer[4]=
-{
- "",
- "L3",
- "L2",
- "L1",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpega_Format_Profile_Version[4]=
-{
- "Version 2.5",
- "",
- "Version 2",
- "Version 1"
-};
-
-//---------------------------------------------------------------------------
-const char* Mpega_Format_Profile_Layer[4]=
-{
- "",
- "Layer 3",
- "Layer 2",
- "Layer 1",
-};
-
-//---------------------------------------------------------------------------
-} //NameSpace
-
-//---------------------------------------------------------------------------
-#endif //...
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-//
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGA_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Mpega.h"
-#include "ZenLib/BitStream.h"
-#include "ZenLib/Utils.h"
-#if MEDIAINFO_ADVANCED
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#endif //MEDIAINFO_ADVANCED
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Mpega_Version_String[4]=
-{
- "MPEG-2.5 Audio",
- "",
- "MPEG-2 Audio",
- "MPEG-1 Audio",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpega_Layer_String[4]=
-{
- "",
- " layer 3",
- " layer 2",
- " layer 1",
-};
-
-//---------------------------------------------------------------------------
-const int16u Mpega_BitRate[4][4][16]=
-{
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //MPEG Audio 2.5 layer X
- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0}, //MPEG Audio 2.5 layer 3
- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0}, //MPEG Audio 2.5 layer 2
- {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0}}, //MPEG Audio 2.5 layer 1
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //MPEG Audio X layer X
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //MPEG Audio X layer 3
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //MPEG Audio X layer 2
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, //MPEG Audio X layer 1
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //MPEG Audio 2 layer X
- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0}, //MPEG Audio 2 layer 3
- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0}, //MPEG Audio 2 layer 2
- {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0}}, //MPEG Audio 2 layer 1
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //MPEG Audio 1 layer X
- {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0}, //MPEG Audio 1 layer 3
- {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 0}, //MPEG Audio 1 layer 2
- {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0}}, //MPEG Audio 1 layer 1
-};
-
-//---------------------------------------------------------------------------
-const int16u Mpega_SamplingRate[4][4]=
-{
- {11025, 12000, 8000, 0}, //MPEG Audio 2.5
- { 0, 0, 0, 0}, //MPEG Audio X
- {22050, 24000, 16000, 0}, //MPEG Audio 2
- {44100, 48000, 32000, 0}, //MPEG Audio 1
-};
-
-//---------------------------------------------------------------------------
-const int16u Mpega_Channels[4]=
-{
- 2,
- 2,
- 2,
- 1,
-};
-
-//---------------------------------------------------------------------------
-const char* Mpega_Codec_Profile[4]=
-{
- "",
- "Joint stereo",
- "Dual mono",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpega_Codec_Profile_Extension[]=
-{
- "",
- "Intensity Stereo",
- "MS Stereo",
- "Intensity Stereo + MS Stereo",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpega_Emphasis[]=
-{
- "",
- "50/15ms",
- "Reserved",
- "CCITT",
-};
-
-//---------------------------------------------------------------------------
-const char* Lame_BitRate_Mode[]=
-{
- "",
- "CBR",
- "VBR",
- "VBR",
- "VBR",
- "VBR",
- "VBR",
- "",
- "CBR",
- "VBR",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Lame_Method[]=
-{
- "",
- "CBR",
- "ABR",
- "VBR (rh)",
- "VBR (mtrh)",
- "VBR (rh)",
- "VBR",
- "",
- "CBR (2-pass)",
- "ABR (2-pass)",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const int8u Mpega_Coefficient[4][4] = //Samples per Frame / 8
-{
- { 0, 72, 144, 12}, //MPEG Audio 2.5
- { 0, 0, 0, 0}, //MPEG Audio X
- { 0, 72, 144, 12}, //MPEG Audio 2
- { 0, 144, 144, 12}, //MPEG Audio 1
-};
-
-//---------------------------------------------------------------------------
-const int8u Mpega_SlotSize[4]= //A frame is coposed of slots
-{
- 0, // Layer X
- 1, // Layer3
- 1, // Layer2
- 4, // Layer1
-};
-
-//---------------------------------------------------------------------------
-const int16u Mpega_CRC12_Table[]=
-{
- 0x000, 0x80f, 0x811, 0x01e, 0x82d, 0x022, 0x03c, 0x833,
- 0x855, 0x05a, 0x044, 0x84b, 0x078, 0x877, 0x869, 0x066,
- 0x8a5, 0x0aa, 0x0b4, 0x8bb, 0x088, 0x887, 0x899, 0x096,
- 0x0f0, 0x8ff, 0x8e1, 0x0ee, 0x8dd, 0x0d2, 0x0cc, 0x8c3,
- 0x945, 0x14a, 0x154, 0x95b, 0x168, 0x967, 0x979, 0x176,
- 0x110, 0x91f, 0x901, 0x10e, 0x93d, 0x132, 0x12c, 0x923,
- 0x1e0, 0x9ef, 0x9f1, 0x1fe, 0x9cd, 0x1c2, 0x1dc, 0x9d3,
- 0x9b5, 0x1ba, 0x1a4, 0x9ab, 0x198, 0x997, 0x989, 0x186,
- 0xa85, 0x28a, 0x294, 0xa9b, 0x2a8, 0xaa7, 0xab9, 0x2b6,
- 0x2d0, 0xadf, 0xac1, 0x2ce, 0xafd, 0x2f2, 0x2ec, 0xae3,
- 0x220, 0xa2f, 0xa31, 0x23e, 0xa0d, 0x202, 0x21c, 0xa13,
- 0xa75, 0x27a, 0x264, 0xa6b, 0x258, 0xa57, 0xa49, 0x246,
- 0x3c0, 0xbcf, 0xbd1, 0x3de, 0xbed, 0x3e2, 0x3fc, 0xbf3,
- 0xb95, 0x39a, 0x384, 0xb8b, 0x3b8, 0xbb7, 0xba9, 0x3a6,
- 0xb65, 0x36a, 0x374, 0xb7b, 0x348, 0xb47, 0xb59, 0x356,
- 0x330, 0xb3f, 0xb21, 0x32e, 0xb1d, 0x312, 0x30c, 0xb03,
- 0xd05, 0x50a, 0x514, 0xd1b, 0x528, 0xd27, 0xd39, 0x536,
- 0x550, 0xd5f, 0xd41, 0x54e, 0xd7d, 0x572, 0x56c, 0xd63,
- 0x5a0, 0xdaf, 0xdb1, 0x5be, 0xd8d, 0x582, 0x59c, 0xd93,
- 0xdf5, 0x5fa, 0x5e4, 0xdeb, 0x5d8, 0xdd7, 0xdc9, 0x5c6,
- 0x440, 0xc4f, 0xc51, 0x45e, 0xc6d, 0x462, 0x47c, 0xc73,
- 0xc15, 0x41a, 0x404, 0xc0b, 0x438, 0xc37, 0xc29, 0x426,
- 0xce5, 0x4ea, 0x4f4, 0xcfb, 0x4c8, 0xcc7, 0xcd9, 0x4d6,
- 0x4b0, 0xcbf, 0xca1, 0x4ae, 0xc9d, 0x492, 0x48c, 0xc83,
- 0x780, 0xf8f, 0xf91, 0x79e, 0xfad, 0x7a2, 0x7bc, 0xfb3,
- 0xfd5, 0x7da, 0x7c4, 0xfcb, 0x7f8, 0xff7, 0xfe9, 0x7e6,
- 0xf25, 0x72a, 0x734, 0xf3b, 0x708, 0xf07, 0xf19, 0x716,
- 0x770, 0xf7f, 0xf61, 0x76e, 0xf5d, 0x752, 0x74c, 0xf43,
- 0xec5, 0x6ca, 0x6d4, 0xedb, 0x6e8, 0xee7, 0xef9, 0x6f6,
- 0x690, 0xe9f, 0xe81, 0x68e, 0xebd, 0x6b2, 0x6ac, 0xea3,
- 0x660, 0xe6f, 0xe71, 0x67e, 0xe4d, 0x642, 0x65c, 0xe53,
- 0xe35, 0x63a, 0x624, 0xe2b, 0x618, 0xe17, 0xe09, 0x606
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mpega::File_Mpega()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-
- //Configuration
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- PTS_DTS_Needed=true;
- IsRawStream=true;
- Frame_Count_NotParsedIncluded=0;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.5?128:(MediaInfoLib::Config.ParseSpeed_Get()>=0.3?32:4);
- FrameIsAlwaysComplete=false;
- CalculateDelay=false;
-
- //Temp - BitStream info
- Surround_Frames=0;
- Block_Count[0]=0;
- Block_Count[1]=0;
- Block_Count[2]=0;
- Channels_Count[0]=0;
- Channels_Count[1]=0;
- Channels_Count[2]=0;
- Channels_Count[3]=0;
- Extension_Count[0]=0;
- Extension_Count[1]=0;
- Extension_Count[2]=0;
- Extension_Count[3]=0;
- Emphasis_Count[0]=0;
- Emphasis_Count[1]=0;
- Emphasis_Count[2]=0;
- Emphasis_Count[3]=0;
- Scfsi=0;
- Scalefac=0;
- Reservoir=0;
- LastSync_Offset=(int64u)-1;
- VBR_FileSize=0;
- VBR_Frames=0;
- Reservoir_Max=0;
- Xing_Scale=0;
- BitRate=0;
- MpegPsPattern_Count=0;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpega::Streams_Fill()
-{
- //VBR detection without header
- if (VBR_Frames==0)
- {
- //How much kinds of bitrates?
- if (BitRate_Count.size()>1)
- BitRate_Mode=__T("VBR");
- }
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "MPEG Audio");
- Fill(Stream_Audio, 0, Audio_Format_Version, Mpega_Format_Profile_Version[ID]);
- Fill(Stream_Audio, 0, Audio_Format_Profile, Mpega_Format_Profile_Layer[layer]);
- if (mode && mode<4)
- {
- Fill(Stream_Audio, 0, Audio_Format_Settings, Mpega_Codec_Profile[mode]);
- Fill(Stream_Audio, 0, Audio_Format_Settings_Mode, Mpega_Codec_Profile[mode]);
- }
- if (mode_extension && mode_extension<4)
- {
- Fill(Stream_Audio, 0, Audio_Format_Settings, Mpega_Codec_Profile_Extension[mode_extension]);
- Fill(Stream_Audio, 0, Audio_Format_Settings_ModeExtension, Mpega_Codec_Profile_Extension[mode_extension]);
- }
- if (emphasis && emphasis<4)
- {
- Fill(Stream_Audio, 0, Audio_Format_Settings, Mpega_Emphasis[emphasis]);
- Fill(Stream_Audio, 0, Audio_Format_Settings_Emphasis, Mpega_Emphasis[emphasis]);
- }
- Fill(Stream_Audio, 0, Audio_Codec, Ztring(Mpega_Version[ID])+Ztring(Mpega_Layer[layer]));
- Fill(Stream_Audio, 0, Audio_Codec_String, Ztring(Mpega_Version_String[ID])+Ztring(Mpega_Layer_String[layer]), true);
- Fill(Stream_Audio, 0, Audio_SamplingRate, Mpega_SamplingRate[ID][sampling_frequency]);
- if (mode<4)
- {
- Fill(Stream_Audio, 0, Audio_Channel_s_, Mpega_Channels[mode]);
- Fill(Stream_Audio, 0, Audio_Codec_Profile, Mpega_Codec_Profile[mode]);
- }
-
- //Bitrate, if CBR
- if (VBR_Frames==0 && BitRate_Mode!=__T("VBR"))
- {
- BitRate_Mode=__T("CBR");
- BitRate=Mpega_BitRate[ID][layer][bitrate_index]*1000;
- Fill(Stream_General, 0, General_OverallBitRate, BitRate);
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate);
- if (CalculateDelay && Buffer_TotalBytes_FirstSynched>10 && BitRate>0)
- {
- Fill(Stream_Audio, 0, Audio_Delay, Buffer_TotalBytes_FirstSynched*8*1000/BitRate, 0);
- Fill(Stream_Audio, 0, Audio_Delay_Source, "Stream");
- }
- }
-
- //Bitrate mode
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, BitRate_Mode);
- Fill(Stream_Audio, 0, Audio_BitRate_Minimum, BitRate_Minimum);
- Fill(Stream_Audio, 0, Audio_BitRate_Nominal, BitRate_Nominal);
-
- //Tags
- File__Tags_Helper::Streams_Fill();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpega::Streams_Finish()
-{
- //Reservoir
- //Fill("Reservoir_Avg", Reservoir/Frame_Count);
- //Fill("Reservoir_Max", Reservoir_Max);
- //size_t Granules=(Mpeg==3?2:1);
- //size_t Ch=Mpega_Channels[Channels];
- //Fill("Scalefactors", Ztring::ToZtring(Scalefac*100/(Granules*Ch*Frame_Count))+__T('%'));
-
- //VBR_FileSize calculation
- if (!IsSub && (File_Size!=(int64u)-1 || LastSync_Offset!=(int64u)-1) && VBR_FileSize==0)
- {
- //We calculate VBR_FileSize from the last synch or File_Size
- if (LastSync_Offset!=(int64u)-1)
- {
- VBR_FileSize=LastSync_Offset;
- VBR_FileSize-=File_BeginTagSize;
- }
- else
- {
- VBR_FileSize=File_Size;
- VBR_FileSize-=File_BeginTagSize;
- VBR_FileSize-=File_EndTagSize;
- }
- }
-
- //Bitrate calculation if VBR
- int64u FrameCount=0;
- if (VBR_Frames>0)
- {
- FrameCount=VBR_Frames;
- float32 FrameLength=((float32)(VBR_FileSize?VBR_FileSize:File_Size-File_EndTagSize-File_BeginTagSize))/VBR_Frames;
- size_t Divider;
- if (ID==3 && layer==3) //MPEG 1 layer 1
- Divider=384/8;
- else if ((ID==2 || ID==0) && layer==3) ///MPEG 2 or 2.5 layer 1
- Divider=192/8;
- else if ((ID==2 || ID==0) && layer==1) //MPEG 2 or 2.5 layer 3
- Divider=576/8;
- else
- Divider=1152/8;
- if (ID<4 && sampling_frequency<4)
- BitRate=(int32u)(FrameLength*Mpega_SamplingRate[ID][sampling_frequency]/Divider);
- BitRate_Mode=__T("VBR");
- }
- //if (BitRate_Count.size()>1)
- //{
- // Ztring BitRate_VBR;
- // if (!BitRate_VBR.empty())
- // BitRate_VBR+=__T(' ');
- // BitRate_VBR+=Ztring::ToZtring(8);
- // BitRate_VBR+=__T(':');
- // BitRate_VBR+=Ztring::ToZtring(BitRate_Count[8]);
- // Fill("BitRate_VBR", Ztring::ToZtring(BitRate_Count[8]));
- //}
- if (VBR_FileSize)
- {
- if (BitRate)
- {
- Fill(Stream_General, 0, General_Duration, VBR_FileSize*8*1000/BitRate, 10, true);
- Fill(Stream_General, 0, General_OverallBitRate, BitRate, 10, true);
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate, 10, true);
- if (CalculateDelay && Buffer_TotalBytes_FirstSynched>10 && BitRate>0)
- {
- Fill(Stream_Audio, 0, Audio_Delay, Buffer_TotalBytes_FirstSynched*8*1000/BitRate, 0, true);
- Fill(Stream_Audio, 0, Audio_Delay_Source, "Stream", Unlimited, true, true);
- }
- }
- Fill(Stream_Audio, 0, Audio_StreamSize, VBR_FileSize);
- }
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, BitRate_Mode, true);
-
- //Encoding library
- if (!Encoded_Library.empty())
- Fill(Stream_General, 0, General_Encoded_Library, Encoded_Library, true);
- if (Encoded_Library.empty())
- Encoded_Library_Guess();
- Fill(Stream_Audio, 0, Audio_Encoded_Library, Encoded_Library, true);
- Fill(Stream_Audio, 0, Audio_Encoded_Library_Settings, Encoded_Library_Settings, true);
-
- //Surround
- if (Surround_Frames>=Frame_Count*0.9)
- {
- //Fill(Stream_Audio, 0, Audio_Channel_s_, 6);
- }
-
- if (FrameInfo.PTS!=(int64u)-1 && FrameInfo.PTS>PTS_Begin)
- {
- Fill(Stream_Audio, 0, Audio_Duration, float64_int64s(((float64)(FrameInfo.PTS-PTS_Begin))/1000000));
- if (Retrieve(Stream_Audio, 0, Audio_BitRate_Mode)==__T("CBR") && ID<4 && sampling_frequency<4)
- {
- int16u Samples;
- if (ID==3 && layer==3) //MPEG 1 layer 1
- Samples=384;
- else if ((ID==2 || ID==0) && layer==1) //MPEG 2 or 2.5 layer 3
- Samples=576;
- else
- Samples=1152;
-
- float64 Frame_Duration=((float64)1)/Mpega_SamplingRate[ID][sampling_frequency]*Samples;
- FrameCount=float64_int64s(((float64)(FrameInfo.PTS-PTS_Begin))/1000000000/Frame_Duration);
- }
- }
-
- if (FrameCount==0 && VBR_FileSize && Retrieve(Stream_Audio, 0, Audio_BitRate_Mode)==__T("CBR") && ID<4 && layer<4 && sampling_frequency<4 && bitrate_index<16 && Mpega_SamplingRate[ID][sampling_frequency])
- {
- size_t Size=(Mpega_Coefficient[ID][layer]*Mpega_BitRate[ID][layer][bitrate_index]*1000/Mpega_SamplingRate[ID][sampling_frequency])*Mpega_SlotSize[layer];
- if (Size)
- FrameCount=float64_int64s(((float64)VBR_FileSize)/Size);
- }
-
- if (FrameCount)
- {
- int16u Samples;
- if (ID==3 && layer==3) //MPEG 1 layer 1
- Samples=384;
- else if ((ID==2 || ID==0) && layer==1) //MPEG 2 or 2.5 layer 3
- Samples=576;
- else
- Samples=1152;
- Fill(Stream_Audio, 0, Audio_FrameCount, FrameCount, 10, true);
- Fill(Stream_Audio, 0, Audio_SamplingCount, FrameCount*Samples, 10, true);
- }
-
- File__Tags_Helper::Streams_Finish();
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mpega::FileHeader_Begin()
-{
- //Buffer size
- if (Buffer_Size<8)
- return File_Size<8; //Must wait for more data
-
- //Detecting WAV/SWF/FLV/ELF/DPG/WM/MZ/DLG files
- int32u Magic4=CC4(Buffer);
- int32u Magic3=Magic4>>8;
- int16u Magic2=Magic4>>16;
- if (Magic4==0x52494646 || Magic3==0x465753 || Magic3==0x464C56 || Magic4==0x7F454C46 || Magic4==0x44504730 || Magic4==0x3026B275 || Magic2==0x4D5A || Magic4==0x000001BA || Magic4==0x000001B3 || Magic4==0x00000100 || CC8(Buffer+Buffer_Offset)==0x444C472056312E30LL)
- {
- File__Tags_Helper::Reject("MPEG Audio");
- return false;
- }
-
- //Seems OK
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mpega::Synchronize()
-{
- //Tags
- bool Tag_Found_Begin;
- if (!File__Tags_Helper::Synchronize(Tag_Found_Begin))
- return false;
- if (Tag_Found_Begin)
- return true;
-
- //Synchronizing
- while (Buffer_Offset+4<=Buffer_Size)
- {
- while (Buffer_Offset+4<=Buffer_Size)
- {
- if (Buffer[Buffer_Offset ]==0xFF
- && (Buffer[Buffer_Offset+1]&0xE0)==0xE0
- && (Buffer[Buffer_Offset+2]&0xF0)!=0xF0
- && (Buffer[Buffer_Offset+2]&0x0C)!=0x0C)
- break; //while()
-
- //Tags
- bool Tag_Found_Synchro;
- if (!File__Tags_Helper::Synchronize(Tag_Found_Synchro))
- return false;
- if (Tag_Found_Synchro)
- return true;
-
- //Better detect MPEG-PS
- if (Frame_Count==0
- && Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x01
- && Buffer[Buffer_Offset+3]==0xBA)
- {
- MpegPsPattern_Count++;
- if (MpegPsPattern_Count>=2)
- {
- File__Tags_Helper::Reject("MPEG Audio");
- return false;
- }
- }
-
- Buffer_Offset++;
- }
-
- if (Buffer_Offset+4<=Buffer_Size)//Testing if size is coherant
- {
- //Retrieving some info
- int8u ID0 =(CC1(Buffer+Buffer_Offset+1)>>3)&0x03;
- int8u layer0 =(CC1(Buffer+Buffer_Offset+1)>>1)&0x03;
- int8u bitrate_index0 =(CC1(Buffer+Buffer_Offset+2)>>4)&0x0F;
- int8u sampling_frequency0=(CC1(Buffer+Buffer_Offset+2)>>2)&0x03;
- int8u padding_bit0 =(CC1(Buffer+Buffer_Offset+2)>>1)&0x01;
- //Coherancy
- if (Mpega_SamplingRate[ID0][sampling_frequency0]==0 || Mpega_Coefficient[ID0][layer0]==0 || Mpega_BitRate[ID0][layer0][bitrate_index0]==0 || Mpega_SlotSize[layer0]==0)
- Buffer_Offset++; //False start
- else
- {
- //Testing next start, to be sure
- size_t Size0=(Mpega_Coefficient[ID0][layer0]*Mpega_BitRate[ID0][layer0][bitrate_index0]*1000/Mpega_SamplingRate[ID0][sampling_frequency0]+(padding_bit0?1:0))*Mpega_SlotSize[layer0];
- if (IsSub && Buffer_Offset+Size0==Buffer_Size)
- break;
- if (File_Offset+Buffer_Offset+Size0!=File_Size-File_EndTagSize)
- {
- //Padding
- while (Buffer_Offset+Size0+4<=Buffer_Size && Buffer[Buffer_Offset+Size0]==0x00)
- Size0++;
-
- if (Buffer_Offset+Size0+4>Buffer_Size)
- return false; //Need more data
-
- //Tags
- bool Tag_Found0;
- if (!File__Tags_Helper::Synchronize(Tag_Found0, Size0))
- return false;
- if (Tag_Found0)
- return true;
- if (File_Offset+Buffer_Offset+Size0==File_Size-File_EndTagSize)
- break;
-
- //Testing
- if ((CC2(Buffer+Buffer_Offset+Size0)&0xFFE0)!=0xFFE0 || (CC1(Buffer+Buffer_Offset+Size0+2)&0xF0)==0xF0 || (CC1(Buffer+Buffer_Offset+Size0+2)&0x0C)==0x0C)
- {
- //Testing VBRI in a malformed frame
- bool VbriFound=false;
- for (size_t Pos=Buffer_Offset+3; Pos+4<Buffer_Offset+Size0; Pos++)
- {
- if (Buffer[Pos ]==0x56
- && Buffer[Pos+1]==0x42
- && Buffer[Pos+2]==0x52
- && Buffer[Pos+3]==0x49)
- {
- VbriFound=true;
- break;
- }
- if (Buffer[Pos])
- break; //Only NULL bytes are authorized before VBRI header
- }
- if (VbriFound)
- break;
- Buffer_Offset++;
- }
- else
- {
- //Retrieving some info
- int8u ID1 =(CC1(Buffer+Buffer_Offset+Size0+1)>>3)&0x03;
- int8u layer1 =(CC1(Buffer+Buffer_Offset+Size0+1)>>1)&0x03;
- int8u bitrate_index1 =(CC1(Buffer+Buffer_Offset+Size0+2)>>4)&0x0F;
- int8u sampling_frequency1=(CC1(Buffer+Buffer_Offset+Size0+2)>>2)&0x03;
- int8u padding_bit1 =(CC1(Buffer+Buffer_Offset+Size0+2)>>1)&0x01;
- //Coherancy
- if (Mpega_SamplingRate[ID1][sampling_frequency1]==0 || Mpega_Coefficient[ID1][layer1]==0 || Mpega_BitRate[ID1][layer1][bitrate_index1]==0 || Mpega_SlotSize[layer1]==0)
- Buffer_Offset++; //False start
- else
- {
- //Testing next start, to be sure
- size_t Size1=(Mpega_Coefficient[ID1][layer1]*Mpega_BitRate[ID1][layer1][bitrate_index1]*1000/Mpega_SamplingRate[ID1][sampling_frequency1]+(padding_bit1?1:0))*Mpega_SlotSize[layer1];
- if (IsSub && Buffer_Offset+Size0+Size1==Buffer_Size)
- break;
- if (File_Offset+Buffer_Offset+Size0+Size1!=File_Size-File_EndTagSize)
- {
- //Padding
- while (Buffer_Offset+Size0+Size1+4<=Buffer_Size && Buffer[Buffer_Offset+Size0+Size1]==0x00)
- Size0++;
-
- if (Buffer_Offset+Size0+Size1+4>Buffer_Size)
- return false; //Need more data
-
- //Tags
- bool Tag_Found1;
- if (!File__Tags_Helper::Synchronize(Tag_Found1, Size0+Size1))
- return false;
- if (Tag_Found1)
- return true;
- if (File_Offset+Buffer_Offset+Size0+Size1==File_Size-File_EndTagSize)
- break;
-
- //Testing
- if ((CC2(Buffer+Buffer_Offset+Size0+Size1)&0xFFE0)!=0xFFE0 || (CC1(Buffer+Buffer_Offset+Size0+Size1+2)&0xF0)==0xF0 || (CC1(Buffer+Buffer_Offset+Size0+Size1+2)&0x0C)==0x0C)
- Buffer_Offset++;
- else
- {
- //Retrieving some info
- int8u ID2 =(CC1(Buffer+Buffer_Offset+Size0+Size1+1)>>3)&0x03;
- int8u layer2 =(CC1(Buffer+Buffer_Offset+Size0+Size1+1)>>1)&0x03;
- int8u bitrate_index2 =(CC1(Buffer+Buffer_Offset+Size0+Size1+2)>>4)&0x0F;
- int8u sampling_frequency2=(CC1(Buffer+Buffer_Offset+Size0+Size1+2)>>2)&0x03;
- int8u padding_bit2 =(CC1(Buffer+Buffer_Offset+Size0+Size1+2)>>1)&0x01;
- //Coherancy
- if (Mpega_SamplingRate[ID2][sampling_frequency2]==0 || Mpega_Coefficient[ID2][layer2]==0 || Mpega_BitRate[ID2][layer2][bitrate_index2]==0 || Mpega_SlotSize[layer2]==0)
- Buffer_Offset++; //False start
- else
- {
- //Testing next start, to be sure
- size_t Size2=(Mpega_Coefficient[ID2][layer2]*Mpega_BitRate[ID2][layer2][bitrate_index2]*1000/Mpega_SamplingRate[ID2][sampling_frequency2]+(padding_bit2?1:0))*Mpega_SlotSize[layer2];
- if (IsSub && Buffer_Offset+Size0+Size1+Size2==Buffer_Size)
- break;
- if (File_Offset+Buffer_Offset+Size0+Size1+Size2!=File_Size-File_EndTagSize)
- {
- //Padding
- while (Buffer_Offset+Size0+Size1+Size2+4<=Buffer_Size && Buffer[Buffer_Offset+Size0+Size1+Size2]==0x00)
- Size0++;
-
- if (Buffer_Offset+Size0+Size1+Size2+4>Buffer_Size)
- {
- if (IsSub || File_Offset+Buffer_Offset+Size0+Size1+Size2<File_Size)
- break;
- return false; //Need more data
- }
-
- //Tags
- bool Tag_Found2;
- if (!File__Tags_Helper::Synchronize(Tag_Found2, Size0+Size1+Size2))
- return false;
- if (Tag_Found2)
- return true;
- if (File_Offset+Buffer_Offset+Size0+Size1+Size2==File_Size-File_EndTagSize)
- break;
-
- //Testing
- if ((CC2(Buffer+Buffer_Offset+Size0+Size1+Size2)&0xFFE0)!=0xFFE0 || (CC1(Buffer+Buffer_Offset+Size0+Size1+Size2+2)&0xF0)==0xF0 || (CC1(Buffer+Buffer_Offset+Size0+Size1+Size2+2)&0x0C)==0x0C)
- Buffer_Offset++;
- else
- break; //while()
- }
- else
- break; //while()
- }
- }
- }
- else
- break; //while()
- }
- }
- }
- else
- break; //while()
- }
- }
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+4>Buffer_Size)
- {
- if (Buffer_Offset+3==Buffer_Size && (CC2(Buffer+Buffer_Offset)&0xFFE0)!=0xFFE0)
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && (CC2(Buffer+Buffer_Offset)&0xFFE0)!=0xFFE0)
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0x00)
- Buffer_Offset++;
- return false;
- }
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Mpega::Synched_Test()
-{
- //Tags
- if (!File__Tags_Helper::Synched_Test())
- return false;
-
- //Padding
- while (Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]==0x00)
- Buffer_Offset++;
-
- //Must have enough buffer for having header
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0xFF
- || (Buffer[Buffer_Offset+1]&0xE0)!=0xE0
- || (Buffer[Buffer_Offset+2]&0xF0)==0xF0
- || (Buffer[Buffer_Offset+2]&0x0C)==0x0C)
- {
- Synched=false;
- return true;
- }
-
- //Retrieving some info
- int8u ID0 =(CC1(Buffer+Buffer_Offset+1)>>3)&0x03;
- int8u layer0 =(CC1(Buffer+Buffer_Offset+1)>>1)&0x03;
- int8u bitrate_index0 =(CC1(Buffer+Buffer_Offset+2)>>4)&0x0F;
- int8u sampling_frequency0=(CC1(Buffer+Buffer_Offset+2)>>2)&0x03;
- if (Mpega_SamplingRate[ID0][sampling_frequency0]==0 || Mpega_Coefficient[ID0][layer0]==0 || Mpega_BitRate[ID0][layer0][bitrate_index0]==0 || Mpega_SlotSize[layer0]==0)
- {
- Synched=false;
- return true;
- }
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Mpega::Demux_UnpacketizeContainer_Test()
-{
- //Retrieving some info
- int8u ID0 =(CC1(Buffer+Buffer_Offset+1)>>3)&0x03;
- int8u layer0 =(CC1(Buffer+Buffer_Offset+1)>>1)&0x03;
- int8u bitrate_index0 =(CC1(Buffer+Buffer_Offset+2)>>4)&0x0F;
- int8u sampling_frequency0=(CC1(Buffer+Buffer_Offset+2)>>2)&0x03;
- int8u padding_bit0 =(CC1(Buffer+Buffer_Offset+2)>>1)&0x01;
-
- if (Mpega_SamplingRate[ID][sampling_frequency]==0 || Mpega_Coefficient[ID][layer]==0 || Mpega_BitRate[ID][layer][bitrate_index]==0 || Mpega_SlotSize[layer]==0)
- return true; //Synhro issue
-
- #if MEDIAINFO_ADVANCED
- if (Frame_Count && File_Demux_Unpacketize_StreamLayoutChange_Skip)
- {
- int8u mode0 =CC1(Buffer+Buffer_Offset+3)>>6;
- if (sampling_frequency0!=sampling_frequency_Frame0 || Mpega_Channels[mode0]!=Mpega_Channels[mode_Frame0])
- {
- return true;
- }
- }
- #endif //MEDIAINFO_ADVANCED
-
- Demux_Offset=Buffer_Offset+(Mpega_Coefficient[ID0][layer0]*Mpega_BitRate[ID0][layer0][bitrate_index0]*1000/Mpega_SamplingRate[ID0][sampling_frequency0]+(padding_bit0?1:0))*Mpega_SlotSize[layer0];
-
- if (Demux_Offset>Buffer_Size)
- return false;
-
- Demux_UnpacketizeContainer_Demux();
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpega::Header_Parse()
-{
- //Parsing
- BS_Begin();
- Skip_S2(11, "syncword");
- Get_S1 (2, ID, "ID"); Param_Info1(Mpega_Version[ID]);
- Get_S1 (2, layer, "layer"); Param_Info1(Mpega_Layer[layer]);
- Get_SB ( protection_bit, "protection_bit");
- Get_S1 (4, bitrate_index, "bitrate_index"); Param_Info2(Mpega_BitRate[ID][layer][bitrate_index], " Kbps");
- Get_S1 (2, sampling_frequency, "sampling_frequency"); Param_Info2(Mpega_SamplingRate[ID][sampling_frequency], " Hz");
- Get_SB ( padding_bit, "padding_bit");
- Skip_SB( "private_bit");
- Get_S1 (2, mode, "mode"); Param_Info2(Mpega_Channels[mode], " channels"); Param_Info1(Mpega_Codec_Profile[mode]);
- Get_S1 (2, mode_extension, "mode_extension"); Param_Info1(Mpega_Codec_Profile_Extension[mode_extension]);
- Get_SB ( copyright, "copyright");
- Get_SB ( original_home, "original_home");
- Get_S1 (2, emphasis, "emphasis"); Param_Info1(Mpega_Emphasis[emphasis]);
- BS_End();
-
- //Coherancy
- if (Mpega_SamplingRate[ID][sampling_frequency]==0 || Mpega_Coefficient[ID][layer]==0 || Mpega_BitRate[ID][layer][bitrate_index]==0 || Mpega_SlotSize[layer]==0)
- {
- Element_Offset=1;
- Header_Fill_Size(1);
- Header_Fill_Code(0, "False start");
- Synched=false;
- return;
- }
-
- //Filling
- int64u Size = ((int64u)Mpega_Coefficient[ID][layer] * (int64u)Mpega_BitRate[ID][layer][bitrate_index] * 1000 / (int64u)Mpega_SamplingRate[ID][sampling_frequency] + (padding_bit ? 1 : 0)) * (int64u)Mpega_SlotSize[layer];
-
- //Special case: tags is inside the last frame
- if (File_Offset+Buffer_Offset+Size>=File_Size-File_EndTagSize)
- Size=File_Size-File_EndTagSize-(File_Offset+Buffer_Offset);
-
- Header_Fill_Size(Size);
- Header_Fill_Code(0, "frame");
-
- //Filling error detection
- sampling_frequency_Count[sampling_frequency]++;
- mode_Count[mode]++;
-
- FILLING_BEGIN();
- #if MEDIAINFO_DEMUX
- #if MEDIAINFO_ADVANCED
- if (!Frame_Count)
- {
- File_Demux_Unpacketize_StreamLayoutChange_Skip=Config->File_Demux_Unpacketize_StreamLayoutChange_Skip_Get();
- if (File_Demux_Unpacketize_StreamLayoutChange_Skip)
- {
- sampling_frequency_Frame0=sampling_frequency;
- mode_Frame0=mode;
- }
- }
- #endif //MEDIAINFO_ADVANCED
- #endif //MEDIAINFO_DEMUX
- FILLING_END();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpega::Data_Parse()
-{
- //If false start
- if (Element_Size==0)
- {
- Element_DoNotShow();
- return;
- }
-
- //Partial frame
- if (Header_Size + Element_Size<((int64u)Mpega_Coefficient[ID][layer] * (int64u)Mpega_BitRate[ID][layer][bitrate_index] * 1000 / (int64u)Mpega_SamplingRate[ID][sampling_frequency] + (padding_bit ? 1 : 0)) * (int64u)Mpega_SlotSize[layer])
- {
- Element_Name("Partial frame");
- Skip_XX(Element_Size, "Data");
- return;
- }
-
- //PTS
- Element_Info1C((FrameInfo.PTS!=(int64u)-1), __T("PTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/1000000)));
-
- //Name
- Element_Info1(__T("Frame ")+Ztring::ToZtring(Frame_Count));
-
- //VBR and library headers
- if (Frame_Count<3) //No need to do it too much
- {
- if (!Header_Xing())
- Header_VBRI();
- }
-
- //Counting
- if (File_Offset+Buffer_Offset+Element_Size==File_Size-File_EndTagSize)
- Frame_Count_Valid=Frame_Count; //Finish MPEG Audio frames in case of there are less than Frame_Count_Valid frames
- if (Frame_Count==0 && Frame_Count_NotParsedIncluded==0)
- PTS_Begin=FrameInfo.PTS;
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- LastSync_Offset=File_Offset+Buffer_Offset+Element_Size;
- {
- int16u Samples;
- if (ID==3 && layer==3) //MPEG 1 layer 1
- Samples=384;
- else if ((ID==2 || ID==0) && layer==1) //MPEG 2 or 2.5 layer 3
- Samples=576;
- else
- Samples=1152;
- FrameInfo.DUR=float64_int64s(((float64)1)/Mpega_SamplingRate[ID][sampling_frequency]*Samples*1000000000);
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.DTS+=FrameInfo.DUR;
- if (FrameInfo.PTS!=(int64u)-1)
- FrameInfo.PTS=FrameInfo.DTS;
- }
-
- //LAME
- if (Encoded_Library.empty() && (Frame_Count<Frame_Count_Valid || File_Offset+Buffer_Offset+Element_Size==File_Size-File_EndTagSize)) //Can be elsewhere... At the start, or end frame
- Header_Encoders();
-
- //Filling
- BitRate_Count[Mpega_BitRate[ID][layer][bitrate_index]]++;
- Channels_Count[mode]++;
- Extension_Count[mode_extension]++;
- Emphasis_Count[emphasis]++;
-
- if (Status[IsFilled])
- {
- Skip_XX(Element_Size, "Data");
- return;
- }
-
- //error_check
- if (protection_bit)
- {
- Element_Begin1("error_check");
- Skip_B2( "crc_check");
- Element_End0();
- }
-
- //audio_data
- Element_Begin1("audio_data");
- switch (layer)
- {
- case 1 : //Layer 3
- audio_data_Layer3();
- break;
- default: Skip_XX(Element_Size-Element_Offset, "(data)");
- }
- Element_End0();
-
- //MP3 Surround detection
- for (int64u Element_Offset_S=Element_Offset; Element_Offset_S+4<Element_Size; Element_Offset_S++)
- {
- if ( Buffer[(size_t)(Buffer_Offset+Element_Offset_S )] ==0xCF
- && (Buffer[(size_t)(Buffer_Offset+Element_Offset_S+1)]&0xF0)==0x30) //12 bits, 0xCF3x
- {
- int8u Surround_Size=((Buffer[(size_t)(Buffer_Offset+Element_Offset_S+1)]&0x0F)<<4)
- | ((Buffer[(size_t)(Buffer_Offset+Element_Offset_S+2)]&0xF0)>>4);
- int16u CRC12 =((Buffer[(size_t)(Buffer_Offset+Element_Offset_S+2)]&0x0F)<<8)
- | Buffer[(size_t)(Buffer_Offset+Element_Offset_S+3)];
- if (Element_Offset_S+Surround_Size-4>Element_Size)
- break;
-
- //CRC
- int16u CRC12_Calculated=0x0FFF;
- int8u* Data=(int8u*)Buffer+(size_t)(Buffer_Offset+Element_Offset_S+4);
- if (Element_Offset_S+Surround_Size+4>=Element_Size)
- break;
- for (int8u Surround_Pos=0; Surround_Pos<Surround_Size-4; Surround_Pos++)
- CRC12_Calculated=0x0FFF & (((CRC12_Calculated<<8)&0xff00)^Mpega_CRC12_Table[((CRC12_Calculated>>4) ^ *Data++) & 0xff]);
- if (CRC12_Calculated!=CRC12)
- break;
-
- //Parsing
- Skip_XX(Element_Offset_S-Element_Offset, "data");
- BS_Begin();
- Element_Begin1("Surround");
- Skip_S2(12, "Sync");
- Skip_S1( 8, "Size");
- Skip_S2(12, "CRC12");
- BS_End();
- Skip_XX(Surround_Size-4, "data");
- Element_End0();
-
- //Filling
- Surround_Frames++;
- break;
- }
- }
-
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "next data");
-
- FILLING_BEGIN();
- //Filling
- if (IsSub && BitRate_Count.size()>1 && !Encoded_Library.empty())
- Frame_Count_Valid=Frame_Count;
- if (!Status[IsAccepted])
- File__Analyze::Accept("MPEG Audio");
- if (!Status[IsFilled] && Frame_Count>=Frame_Count_Valid)
- {
- Fill("MPEG Audio");
-
- //Jumping
- if (!IsSub && MediaInfoLib::Config.ParseSpeed_Get()<1.0 && File_Offset+Buffer_Offset<File_Size/2)
- {
- File__Tags_Helper::GoToFromEnd(16*1024, "MPEG-A");
- LastSync_Offset=(int64u)-1;
- if (File_GoTo!=(int64u)-1)
- Open_Buffer_Unsynch();
- }
- }
-
- //Detect Id3v1 tags inside a frame
- if (!IsSub && File_Offset+Buffer_Offset+(size_t)Element_Size>File_Size-File_EndTagSize)
- {
- Open_Buffer_Unsynch();
- File__Analyze::Data_GoTo(File_Size-File_EndTagSize, "Tags inside a frame, parsing the tags");
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpega::audio_data_Layer3()
-{
- int16u main_data_end;
- BS_Begin();
- if (ID==3) //MPEG-1
- Get_S2 (9, main_data_end, "main_data_end");
- else
- Get_S2 (8, main_data_end, "main_data_end");
- if ((int32u)main_data_end>Reservoir_Max)
- Reservoir_Max=main_data_end;
- Reservoir+=main_data_end;
- if (ID==3) //MPEG-1
- {
- if (mode==3) //Mono
- Skip_S1(5, "private_bits");
- else
- Skip_S1(3, "private_bits");
- }
- else
- {
- if (mode==3) //Mono
- Skip_S1(1, "private_bits");
- else
- Skip_S1(2, "private_bits");
- }
- if (ID==3) //MPEG-1
- {
- Element_Begin1("scfsi");
- for(int8u ch=0; ch<Mpega_Channels[mode]; ch++)
- for(int8u scfsi_band=0; scfsi_band<4; scfsi_band++)
- {
- bool scfsi;
- Get_SB ( scfsi, "scfsi");
- if (scfsi)
- Scfsi++;
- }
- Element_End0();
- }
- for(int8u gr=0; gr<(ID==3?2:1); gr++)
- {
- Element_Begin1("granule");
- if (mode>=4)
- return;
- for(int8u ch=0; ch<Mpega_Channels[mode]; ch++)
- {
- Element_Begin1("channel");
- Skip_S2(12, "part2_3_length");
- Skip_S2(9, "big_values");
- Skip_S1(8, "global_gain");
- if (ID==3) //MPEG-1
- Skip_S1(4, "scalefac_compress");
- else
- Skip_S2(9, "scalefac_compress");
- bool blocksplit_flag;
- Get_SB ( blocksplit_flag, "blocksplit_flag");
- if (blocksplit_flag==1)
- {
- int8u block_type;
- bool mixed_block_flag;
- Get_S1 (2, block_type, "block_type");
- Get_SB ( mixed_block_flag, "mixed_block_flag");
- for (int8u region=0; region<2; region++)
- Skip_S1(5, "table_select");
- for (int8u window=0; window<3; window++)
- Skip_S1(3, "subblock_gain");
- if (block_type == 2)
- {
- if (mixed_block_flag==1)
- {
- Param_Info1("Mixed");
- Block_Count[2]++; //Mixed
- }
- else
- {
- Param_Info1("Short");
- Block_Count[1]++; //Short
- }
- }
- else
- {
- Param_Info1("Long");
- Block_Count[0]++; //Long
- }
- }
- else
- {
- for (int8u region=0; region<3; region++)
- Skip_S1(5, "table_select");
- Skip_S1(4, "region0_count");
- Skip_S1(3, "region1_count");
- Param_Info1("Long");
- Block_Count[0]++; //Long
- }
- if (ID==3) //MPEG-1
- Skip_SB( "preflag");
- bool scalefac;
- Get_SB ( scalefac, "scalefac_scale");
- if (scalefac)
- Scalefac++;
- Skip_SB( "count1table_select");
- Element_End0();
- } //channels
- Element_End0();
- } //granules
- BS_End();
- //Skip_XX(Element_Size-main_data_end-Element_Offset, "main_data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpega::Data_Parse_Fill()
-{
-}
-
-//---------------------------------------------------------------------------
-bool File_Mpega::Header_Xing()
-{
- int32u Xing_Header_Offset;
- if (ID==3) //MPEG-1
- if (mode==3) //Mono
- Xing_Header_Offset=21-4;
- else
- Xing_Header_Offset=36-4;
- else //MPEG-2 or 2.5
- if (mode==3) //Mono
- Xing_Header_Offset=13-4;
- else
- Xing_Header_Offset=21-4;
- if (Buffer_Offset+Xing_Header_Offset+128<Buffer_Size)
- {
- const int8u* Xing_Header=Buffer+Buffer_Offset+Xing_Header_Offset;
- if (CC4(Xing_Header)==CC4("Xing") || CC4(Xing_Header)==CC4("Info"))
- {
- //This is a "tag"
- Element_Info1("Tag (Xing)");
-
- //Parsing
- Element_Begin1("Xing");
- Element_Begin1("Xing header");
- Skip_XX(Xing_Header_Offset, "Junk");
- int32u Flags;
- bool FrameCount, FileSize, TOC, Scale, Lame;
- Skip_C4( "Xing");
- Get_B4 (Flags, "Flags");
- Get_Flags(Flags, 0, FrameCount, "FrameCount");
- Get_Flags(Flags, 1, FileSize, "FileSize");
- Get_Flags(Flags, 2, TOC, "TOC");
- Get_Flags(Flags, 3, Scale, "Scale");
- Get_Flags(Flags, 4, Lame, "Lame");
- int32u Xing_Header_Size=8
- +(FrameCount? 4:0) //FrameCount
- +(FileSize? 4:0) //FileSize
- +(TOC? 100:0) //TOC
- +(Scale? 4:0) //Scale
- +(Lame? 348:0); //Lame
- Element_End0();
- //Element size
- if (Xing_Header_Size>Element_Size-Xing_Header_Offset)
- return false; //Error tag size
-
- //Parsing
- if (FrameCount)
- Get_B4 (VBR_Frames, "FrameCount"); //FrameCount exclude this frame
- if (FileSize)
- {
- int32u VBR_FileSize_Temp;
- Get_B4 (VBR_FileSize_Temp, "FileSize");
- if (VBR_FileSize_Temp>4+Element_Size)
- VBR_FileSize=VBR_FileSize_Temp-4-Element_Size; //FileSize include the Xing element
- }
- if (TOC)
- Skip_XX(100, "TOC");
- if (Scale)
- Get_B4 (Xing_Scale, "Scale");
- Ztring Lib;
- Element_End0();
- Peek_Local(4, Lib);
- if (Lame || Lib==__T("LAME") || Lib==__T("GOGO") || Lib==__T("L3.9"))
- Header_Encoders_Lame();
-
- if (CC4(Xing_Header)==CC4("Info"))
- VBR_Frames=0; //This is not a VBR file
-
- //Clearing Error detection
- sampling_frequency_Count.clear();
- mode_Count.clear();
-
- return true;
- }
- }
- return false;
-}
-
-//---------------------------------------------------------------------------
-bool File_Mpega::Header_VBRI()
-{
- const size_t Fraunhofer_Header_Offset=36-4;
- if (Buffer_Offset+Fraunhofer_Header_Offset+32<Buffer_Size)
- {
- const int8u* Fraunhofer_Header=Buffer+Buffer_Offset+Fraunhofer_Header_Offset;
- if (CC4(Fraunhofer_Header)==CC4("VBRI") && CC2(Fraunhofer_Header+4)==0x0001) //VBRI v1 only
- {
- //This is a "tag"
-
- Element_Info1("Tag (VBRI)");
-
- //Parsing
- int32u VBR_FileSize_Temp;
- int16u TableSize, TableScale, EntryBytes;
- Skip_XX(Fraunhofer_Header_Offset, "Junk");
- Element_Begin1("VBRI");
- Skip_C4( "Sync");
- Skip_B2( "Version");
- Skip_B2( "Delay");
- Skip_B2( "Quality");
- Get_B4 (VBR_FileSize_Temp, "StreamBytes");
- Get_B4 (VBR_Frames, "StreamFrames"); //Multiplied by SamplesPerFrame (1152 for >=32KHz, else 576) --> Duration in samples
- Get_B2 (TableSize, "TableSize");
- Get_B2 (TableScale, "TableScale");
- Get_B2 (EntryBytes, "EntryBytes");
- Skip_B2( "EntryFrames"); //Count of frames per entry
- Element_Begin1("Table");
- for (int16u Pos=0; Pos<TableSize; Pos++)
- {
- switch (EntryBytes)
- {
- case 1 : {Info_B1(Entry, "Entry"); Param_Info2 (Entry*TableScale, " bytes");} break;
- case 2 : {Info_B2(Entry, "Entry"); Param_Info2 (Entry*TableScale, " bytes");} break;
- case 4 : {Info_B4(Entry, "Entry"); Param_Info2 (Entry*TableScale, " bytes");} break;
- default: Skip_XX(EntryBytes, "Entry");
- }
- }
- Element_End0();
- Element_End0();
- VBR_FileSize=VBR_FileSize_Temp;
-
- //Clearing Error detection
- sampling_frequency_Count.clear();
- mode_Count.clear();
-
- return true;
- }
- }
- return false;
-}
-
-//---------------------------------------------------------------------------
-bool File_Mpega::Header_Encoders()
-{
- std::string BufferS((const char*)(Buffer+Buffer_Offset), (size_t)Element_Size);
- size_t Buffer_Pos;
-
- //Lame
- Buffer_Pos=BufferS.find("LAME");
- if (Buffer_Pos!=std::string::npos && Buffer_Pos<=Element_Size-8)
- {
- Element_Info1("With tag (Lame)");
- Element_Offset=Buffer_Pos;
- if (Element_Offset+20<=Element_Size)
- Get_Local(20, Encoded_Library, "Encoded_Library");
- else
- Get_Local( 8, Encoded_Library, "Encoded_Library");
- Encoded_Library.Trim(__T('A'));
- Encoded_Library.Trim(__T('U'));
- Encoded_Library.Trim(__T('\xAA'));
- Element_Offset=0; //Reseting it
- return true;
- }
-
- //RCA
- Buffer_Pos=BufferS.find("RCA mp3PRO Encoder");
- if (Buffer_Pos!=std::string::npos && Buffer_Pos<Element_Size-23)
- {
- Element_Info1("With tag (RCA)");
- Encoded_Library="RCA ";
- Encoded_Library+=Ztring((const char*)(Buffer+Buffer_Offset+18), 5);
- return true;
- }
-
- //Thomson
- Buffer_Pos=BufferS.find("THOMSON mp3PRO Encoder");
- if (Buffer_Pos!=std::string::npos && Buffer_Pos<Element_Size-29)
- {
- Element_Info1("With tag (Thomson)");
- Encoded_Library="Thomson ";
- Encoded_Library+=Ztring((const char*)(Buffer+Buffer_Offset+22), 6);
- return true;
- }
-
- //Gogo (old)
- Buffer_Pos=BufferS.find("MPGE");
- if (Buffer_Pos!=std::string::npos)
- {
- Element_Info1("With tag (Gogo)");
- Encoded_Library="Gogo <3.0";
- return true;
- }
-
- //Gogo (new)
- Buffer_Pos=BufferS.find("GOGO");
- if (Buffer_Pos!=std::string::npos)
- {
- Element_Info1("With tag (Gogo)");
- Encoded_Library="Gogo >=3.0";
- return true;
- }
-
- return false;
-}
-
-void File_Mpega::Header_Encoders_Lame()
-{
- Peek_Local(8, Encoded_Library);
- if (Encoded_Library.find(__T("L3.99"))==0)
- Encoded_Library.insert(1, __T("AME")); //Ugly version string in Lame 3.99.1 "L3.99r1\0"
- if ((Encoded_Library>=__T("LAME3.90")) && Element_IsNotFinished())
- {
- int8u Flags, lowpass, EncodingFlags, BitRate, StereoMode;
- Param_Info1(Ztring(__T("V "))+Ztring::ToZtring((100-Xing_Scale)/10));
- Param_Info1(Ztring(__T("q "))+Ztring::ToZtring((100-Xing_Scale)%10));
- Get_Local(9, Encoded_Library, "Encoded_Library");
- Get_B1 (Flags, "Flags");
- if ((Flags&0xF0)<=0x20) //Rev. 0 or 1, http://gabriel.mp3-tech.org/mp3infotag.html and Rev. 2 was seen.
- {
- Param_Info1(Lame_Method[Flags&0x0F]);
- BitRate_Mode=Lame_BitRate_Mode[Flags&0x0F];
- if ((Flags&0x0F)==1 || (Flags&0x0F)==8) //2 possible values for CBR
- VBR_Frames=0;
- }
- Get_B1 (lowpass, "Lowpass filter value"); Param_Info2(lowpass*100, " Hz");
- Skip_B4( "Peak signal amplitude");
- Skip_B2( "Radio Replay Gain");
- Skip_B2( "Audiophile Replay Gain");
- Get_B1 (EncodingFlags, "Encoding Flags"); Param_Info1(Ztring(__T("ATH Type="))+Ztring::ToZtring(Flags&0x0F));
- Skip_Flags(EncodingFlags, 4, "nspsytune");
- Skip_Flags(EncodingFlags, 5, "nssafejoint");
- Skip_Flags(EncodingFlags, 6, "nogap (after)");
- Skip_Flags(EncodingFlags, 7, "nogap (before)");
- Get_B1 (BitRate, "BitRate");
- Skip_B3( "Encoder delays");
- BS_Begin();
- Skip_S1(2, "Source sample frequency");
- Skip_SB( "unwise settings used");
- Get_S1 (3, StereoMode, "Stereo mode");
- Skip_S1(2, "noise shapings");
- BS_End();
- Skip_B1( "MP3 Gain");
- Skip_B2( "Preset and surround info");
- Skip_B4( "MusicLength");
- Skip_B2( "MusicCRC");
- Skip_B2( "CRC-16 of Info Tag");
-
- FILLING_BEGIN();
- Encoded_Library_Settings+=__T("-m ");
- switch(StereoMode)
- {
- case 0 : Encoded_Library_Settings+=__T("m"); break;
- case 1 : Encoded_Library_Settings+=__T("s"); break;
- case 2 : Encoded_Library_Settings+=__T("d"); break;
- case 3 : Encoded_Library_Settings+=__T("j"); break;
- case 4 : Encoded_Library_Settings+=__T("f"); break;
- case 5 : Encoded_Library_Settings+=__T("a"); break;
- case 6 : Encoded_Library_Settings+=__T("i"); break;
- default: ;
- }
- if (Xing_Scale<=100) //Xing_Scale is used for LAME quality
- {
- Encoded_Library_Settings+=__T( " -V ")+Ztring::ToZtring((100-Xing_Scale)/10);
- Encoded_Library_Settings+=__T( " -q ")+Ztring::ToZtring((100-Xing_Scale)%10);
- }
- if (lowpass)
- Encoded_Library_Settings+=(Encoded_Library_Settings.empty()?__T("-lowpass "):__T(" -lowpass "))+((lowpass%10)?Ztring::ToZtring(((float)lowpass)/10, 1):Ztring::ToZtring(lowpass/10));
- switch (Flags&0x0F)
- {
- case 2 :
- case 9 : //ABR
- Encoded_Library_Settings+=__T(" --abr"); break;
- case 3 : //VBR (old/rh)
- Encoded_Library_Settings+=__T(" --vbr-old"); break;
- case 4 : //VBR (new/mtrh)
- Encoded_Library_Settings+=__T(" --vbr-new"); break;
- case 5 : //VBR (?/mt)
- Encoded_Library_Settings+=__T(" --vbr-mt"); break;
- default : ;
- }
- if (BitRate!=0x00 && BitRate!=0xFF)
- {
- switch (Flags&0x0F)
- {
- case 1 :
- case 8 : //CBR
- Encoded_Library_Settings+=__T(" -b ")+Ztring::ToZtring(BitRate);
- break;
- case 2 :
- case 9 : //ABR
- BitRate_Nominal.From_Number(BitRate*1000);
- Encoded_Library_Settings+=__T(" ")+Ztring::ToZtring(BitRate);
- break;
- case 3 : //VBR (old/rh)
- case 4 : //VBR (new/mtrh)
- case 5 : //VBR (?/mt)
- BitRate_Minimum.From_Number(BitRate*1000);
- Encoded_Library_Settings+=__T(" -b ")+Ztring::ToZtring(BitRate);
- break;
- default : ;
- }
- }
- FILLING_END();
- }
- else
- Get_Local(20, Encoded_Library, "Encoded_Library");
-}
-
-void File_Mpega::Encoded_Library_Guess()
-{
- //TODO: Not yet enough precise
-
- /*
- if (Block_Count[1]==0) //No short blocks
- {
- if (mode==2) //Dual Mono
- {
- if (Scfsi>0) //scfsi used
- {}
- else //no scfsi
- {
- if (Scalefac>0) //scalefacors used
- {}
- else //scalefacors not used
- Encoded_Library="Shine";
- }
- }
- else //Other than dual mono
- {
- if (Extension_Count[1]>0 || Extension_Count[3]>0) //Intensity Stereo
- Encoded_Library="Xing (very old)";
- else //No Intensity Stereo
- {
- if (Scfsi>0) //Scfsi used
- Encoded_Library="Xing (new)";
- else //Scsfi not used
- {
- if (Channels_Count[2]>0) //Joint Stereo
- {
- if (Channels_Count[0]>0) //also includes no Joint Stereo frames
- {
- if (padding_bit) //Padding
- {
- if (original_home)
- Encoded_Library="FhG (l3enc)";
- else
- Encoded_Library="FhG (fastenc or mp3enc)";
- }
- else //No padding
- Encoded_Library="FhG (ACM or producer pro)";
- }
- else //No stereo frames: joint stereo was forced
- {
- if (padding_bit && !original_home && !copyright)
- Encoded_Library="QDesign (fast mode)";
- }
- }
- else
- {
- if (Channels_Count[0]>0 && Scalefac==0 && !original_home) //Stereo
- Encoded_Library="Plugger";
- else
- Encoded_Library="Xing (old)";
- }
- }
- }
- }
- }
- else //Short blocks
- {
- if (Scfsi) //scfsi used
- {
- if (Scalefac>0) //Scalefactor used
- Encoded_Library="Gogo (after 3.0)"; //Could be lame, but with a label, detected elsewhere before
- else
- Encoded_Library="Lame (old) or m3e";
- }
- else //Scfsi not used
- {
- if (Scalefac>0) //Scalefactor used
- {
- if (padding_bit)
- {
- if (original_home)
- {
- //10 last bytes
- //int sum = get_final_sum(data);
- //if (sum==0)
- // return guess = __T("FhG (fastenc, low quality mode)");
- //else if (sum==10 * 0xFF)
- // return guess = __T("FhG (l3enc)");
- //else if (sum==5 * 0x20)
- // return guess = __T("FhG (fastenc, medium or high quality mode)");
- //else
- // return guess = __T("FhG (l3enc or fastenc)");
- }
- else
- {
- if (Channels_Count[1]>0 && Extension_Count[1]>0) //Joint Stereo and some Intensity Stereo
- Encoded_Library="Thomson mp3PRO Encoder";
- else
- Encoded_Library="FhG (fastenc or mp3enc)";
- }
- }
- else //No padding
- {
- if (BitRate_Mode.find(__T("VBR"))==0) //VBR
- Encoded_Library="FhG (fastenc)";
- else
- Encoded_Library="FhG (ACM or producer pro)";
- }
- }
- else //scalefactors not used
- {
- if (Channels_Count[1]>0) //Joint Stereo
- {
- if (padding_bit && !original_home && !copyright)
- Encoded_Library="QDesign";
- }
- else //Joint Stereo not used
- {
- if (BitRate_Mode.find(__T("VBR"))==0) //VBR
- Encoded_Library="Lame (old)";
- else //CBR
- {
-
- if (mode==2) //Dual Mono
- {
- if (padding_bit)
- Encoded_Library="Blade";
- else
- Encoded_Library="dist10 encoder or other encoder";
- }
- else //Stereo or Mono
- {
- //if (data.av_reservoir < 40 && !data.vbr) //ISO based encoders are unable to properly use bit reservoir... average reservoir usage is about 10
- //{
- // if (data.padding)
- // return guess = __T("Blade");
- // else
- // return guess = __T("dist10 encoder or other encoder");
- //}
- //else
- // return guess = __T("Gogo (before 3.0)");
- }
- }
- }
- }
- }
- }
- */
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEGA_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpega.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpega.h
deleted file mode 100644
index 9aa990b5d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Mpega.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_MpegaH
-#define MediaInfo_File_MpegaH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-#include <map>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Mpega
-//***************************************************************************
-
-class File_Mpega : public File__Analyze, public File__Tags_Helper
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool FrameIsAlwaysComplete;
- bool CalculateDelay;
-
- //Constructor/Destructor
- File_Mpega();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Demux
- bool Demux_UnpacketizeContainer_Test();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
- void Data_Parse_Fill();
- void audio_data_Layer3();
-
- //Element
- bool Header_Xing();
- bool Header_VBRI();
- bool Header_Encoders();
- void Header_Encoders_Lame();
- void Encoded_Library_Guess();
-
- //Temp
- Ztring BitRate_Mode;
- Ztring BitRate_Nominal;
- Ztring BitRate_Minimum;
- Ztring Encoded_Library;
- Ztring Encoded_Library_Settings;
- std::map<int16u, size_t> BitRate_Count;
- std::map<int8u, size_t> sampling_frequency_Count;
- std::map<int8u, size_t> mode_Count;
- size_t Surround_Frames;
- size_t Block_Count[3]; //long, short, mixed
- size_t Channels_Count[4]; //Stereo, Join Stereo, Dual mono, mono
- size_t Extension_Count[4]; //No, IS, MS, IS+MS
- size_t Emphasis_Count[4]; //No, 50/15ms, Reserved, CCITT
- size_t Scfsi; //Total
- size_t Scalefac; //Total
- size_t Reservoir; //Total
- int64u LastSync_Offset;
- int64u VBR_FileSize;
- int32u VBR_Frames;
- int32u Reservoir_Max;
- int32u Xing_Scale;
- int32u BitRate; //Average
- int8u ID;
- int8u layer;
- int8u bitrate_index;
- int8u sampling_frequency;
- int8u mode;
- int8u mode_extension;
- int8u emphasis;
- bool protection_bit;
- bool padding_bit;
- bool copyright;
- bool original_home;
- size_t MpegPsPattern_Count;
-
- //Helpers
- bool Element_Name_IsOK();
-
- #if MEDIAINFO_DEMUX
- #if MEDIAINFO_ADVANCED
- int8u sampling_frequency_Frame0;
- int8u mode_Frame0;
- bool File_Demux_Unpacketize_StreamLayoutChange_Skip;
- #endif //MEDIAINFO_ADVANCED
- #endif //MEDIAINFO_DEMUX
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_OpenMG.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_OpenMG.cpp
deleted file mode 100644
index 084dad3c8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_OpenMG.cpp
+++ /dev/null
@@ -1,233 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about OpenMG (OMA) files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_OPENMG_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_OpenMG.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* OpenMG_CodecID_Format (int8u CodecID)
-{
- switch (CodecID)
- {
- case 0 :
- case 1 :
- return "Atrac3";
- case 3 : return "MPEG Audio";
- case 4 : return "PCM";
- case 5 : return "WMA";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* OpenMG_CodecID_Encryption (int8u CodecID)
-{
- switch (CodecID)
- {
- case 1 : return "SDMI";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-int32u OpenMG_SamplingRate (int8u SamplingRate_Code)
-{
- switch (SamplingRate_Code)
- {
- case 0 : return 32000;
- case 1 : return 44100;
- case 2 : return 44800;
- case 3 : return 88200;
- case 4 : return 96000;
- default : return 0;
- }
-}
-
-//---------------------------------------------------------------------------
-int8u OpenMG_Channels (int8u Channels_Code)
-{
- if (Channels_Code<=4)
- return Channels_Code;
- else
- return Channels_Code+1; //+LFE
-}
-
-//---------------------------------------------------------------------------
-const char* OpenMG_ChannelPositions (int8u Channels_Code)
-{
- switch (Channels_Code)
- {
- case 1 : return "Front: C";
- case 2 : return "Front: L R";
- case 3 : return "Front: L R, Side: C";
- case 4 : return "Front: L R, Back: L R";
- case 5 : return "Front: L C R, Side: L R, LFE";
- case 6 : return "Front: L C R, Side: L R, Back: C, LFE";
- case 7 : return "Front: L C R, Side: L R, Back: L R, LFE";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_OpenMG::File_OpenMG()
-{
- //File__Tags_Helper
- Base=this;
-
- //Config
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- IsRawStream=true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_OpenMG::Streams_Fill()
-{
- Fill(Stream_General, 0, General_Format, "OpenMG");
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
-
- File__Tags_Helper::Streams_Fill();
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_OpenMG::FileHeader_Begin()
-{
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- //Synchro
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- // Testing
- if (Buffer[Buffer_Offset ]!=0x45 // "EA3"
- || Buffer[Buffer_Offset+1]!=0x41
- || Buffer[Buffer_Offset+2]!=0x33)
- {
- File__Tags_Helper::Reject();
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_OpenMG::FileHeader_Parse()
-{
- //Parsing
- int16u Size, FrameSize=0;
- int8u Flags, CodecID, SamplingRate_Code=0, Channels_Code=0;
- bool JointStereo=false;
- Skip_C3( "Code");
- Get_B1 (Flags, "Flags");
- Get_B2 (Size, "Size");
- Skip_XX(26, "Unknown");
- Get_B1 (CodecID, "Coded ID"); Param_Info1(OpenMG_CodecID_Format(CodecID));
- if (CodecID<=1) //Atrac3
- {
- BS_Begin();
- Skip_S1(7, "Unknown");
- Get_SB ( JointStereo, "Joint Stereo");
- Get_S1 (3, SamplingRate_Code, "Sampling Rate"); Param_Info2(OpenMG_SamplingRate(SamplingRate_Code), " Hz");
- Get_S1 (3, Channels_Code, "Channels"); Param_Info2(OpenMG_Channels(Channels_Code), " channel(s)");
- Get_S2 (10, FrameSize, "Frame size");
- BS_End();
- }
- Skip_XX(Size-Element_Offset, "Unknown");
-
- FILLING_BEGIN();
- if (!Status[IsAccepted])
- {
- File__Tags_Helper::Accept();
-
- Fill(Stream_Audio, 0, Audio_Format, OpenMG_CodecID_Format(CodecID));
- Fill(Stream_Audio, 0, Audio_Encryption, OpenMG_CodecID_Encryption(CodecID));
- int64u StreamSize=(int64u)-1;
- if (File_Size!=(int64u)-1)
- {
- StreamSize=File_Size-(Buffer_Offset+Element_Size);
- Fill(Stream_Audio, 0, Audio_StreamSize, StreamSize);
- }
- if (CodecID<=1) // Atrac3
- {
- Fill(Stream_Audio, 0, Audio_Channel_s_, OpenMG_Channels(Channels_Code));
- Fill(Stream_Audio, 0, Audio_ChannelPositions, OpenMG_ChannelPositions(Channels_Code));
- if (Channels_Code==1 && JointStereo)
- Fill(Stream_Audio, 0, Audio_Format_Settings_Mode, "Joint Stereo");
- Fill(Stream_Audio, 0, Audio_SamplingRate, OpenMG_SamplingRate(SamplingRate_Code));
-
- if (CodecID==1) //Protected
- FrameSize++; //Not sure
- FrameSize<<=3; //8-byte blocks
- int64u BitRate=OpenMG_SamplingRate(SamplingRate_Code)*FrameSize/256;
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate);
- if (StreamSize!=(int64u)-1 && BitRate)
- Fill(Stream_Audio, 0, Audio_Duration, StreamSize*8*1000/BitRate);
- }
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_OpenMG::Read_Buffer_Continue()
-{
- //Parsing
- Skip_XX(File_Size-Buffer_Offset, "Data");
-
- File__Analyze::Finish();
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_OpenMG.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_OpenMG.h
deleted file mode 100644
index d7a4abb17..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_OpenMG.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about OpenMG (OMA) files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_OpenMGH
-#define MediaInfo_File_OpenMGH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_OpenMG
-//***************************************************************************
-
-class File_OpenMG : public File__Analyze, public File__Tags_Helper
-{
-public :
- //Constructor/Destructor
- File_OpenMG();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish() {File__Tags_Helper::Streams_Finish();}
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Opus.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Opus.cpp
deleted file mode 100644
index 129b95c79..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Opus.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-// Note : the buffer must be given in ONE call
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_OPUS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Opus.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-const char* Opus_ChannelPositions[]=
-{
- "",
- "Front: C",
- "Front: L R",
- "Front: L C R",
- "Front: L R, Rear: L R",
- "Front: L C R, Rear: L R",
- "Front: L C R, Rear: L R, LFE",
- "Front: L C R, Side: L R, Rear: C, LFE",
- "Front: L C R, Side: L R, Rear: L R, LFE",
-};
-
-//---------------------------------------------------------------------------
-const char* Opus_ChannelPositions2[]=
-{
- "",
- "1/0/0",
- "2/0/0",
- "2/1/0",
- "2/2/0",
- "3/2/0",
- "3/2/1",
- "3/2/2",
- "3/2/3",
-};
-
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Opus::File_Opus()
-:File__Analyze()
-{
- //Internal
- Identification_Done=false;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Opus::Header_Parse()
-{
- //Filling
- Header_Fill_Code(0, "Opus");
- Header_Fill_Size(Element_Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Opus::Data_Parse()
-{
- //Parsing
- if (Identification_Done)
- Stream();
- else
- Identification();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Opus::Identification()
-{
- Element_Name("Identification");
-
- //Parsing
- Ztring opus_version, Channels_Positions;
- int8u Opus_version_id, ch_count, ch_map;
- int16u preskip;
- int32u sample_rate;
- Get_Local(8,opus_version, "opus_codec_id");
- Get_L1 (Opus_version_id, "opus_version_id");
- Get_L1 (ch_count, "channel_count");
- Get_L2 (preskip, "preskip");
- Get_L4 (sample_rate, "rate");
- Skip_L2( "ouput_gain");
- Get_L1 (ch_map, "channel_map");
- if (ch_map)
- {
- Skip_L1( "Stream count (N)");
- Skip_L1( "Two-channel stream count (M)");
- for (int8u Pos=0; Pos<ch_count; Pos++)
- Skip_L1( "Channel mapping");
- }
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "unknown");
-
- //Filling
- FILLING_BEGIN();
- Accept("Opus");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "Opus");
- Fill(Stream_Audio, 0, Audio_Codec, "Opus");
-
- if (!opus_version.empty())
- {
- Fill(Stream_Audio, 0, Audio_SamplingRate, sample_rate?sample_rate:48000);
- Fill(Stream_Audio, 0, Audio_Channel_s_, ch_count);
- }
-
- switch (ch_map)
- {
- case 0 : // Mono/Stereo
- if (ch_count>2)
- break; // Not in spec
- // else it is as Vorbis specs, no break
- case 1 : // Vorbis order
- {
- Ztring ChannelPositions; ChannelPositions.From_Local(Opus_ChannelPositions[ch_count]);
- Ztring ChannelPositions2; ChannelPositions2.From_Local(Opus_ChannelPositions2[ch_count]);
- if (ChannelPositions!=Retrieve(Stream_Audio, 0, Audio_ChannelPositions))
- Fill(Stream_Audio, 0, Audio_ChannelPositions, ChannelPositions);
- if (ChannelPositions2!=Retrieve(Stream_Audio, 0, Audio_ChannelPositions_String2))
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, ChannelPositions2);
- }
- default: ; //Unknown
- }
-
- FILLING_END();
-
- //Filling
- Identification_Done=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Opus::Stream()
-{
- Element_Name("Stream");
-
- Skip_XX(Element_Size, "Data");
-
- Finish("Opus");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_OPUS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Opus.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Opus.h
deleted file mode 100644
index f98f70493..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Opus.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about OPUS files
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_OpusH
-#define MediaInfo_File_OpusH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Opus
-//***************************************************************************
-
-class File_Opus : public File__Analyze
-{
-public :
- File_Opus();
-
-private :
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Identification();
- void Stream();
-
- //Temp
- bool Identification_Done;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm.cpp
deleted file mode 100644
index 6acc5b335..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm.cpp
+++ /dev/null
@@ -1,417 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PCM_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Pcm.h"
-#if MEDIAINFO_DEMUX
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#endif //MEDIAINFO_DEMUX
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Smpte_St0302_ChannelsPositions(int8u Channels)
-{
- switch (Channels)
- {
- case 2 : return "Front: L R"; //2 channels
- case 4 : return "Front: L C R, LFE"; //4 channels
- case 6 : return "Front: L C R, Side: L R, LFE"; //6 channels
- case 8 : return "Front: L C R, Side: L R, Back: L R, LFE"; //8 channels
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Smpte_St0302_ChannelsPositions2(int8u Channels)
-{
- switch (Channels)
- {
- case 2 : return "2/0/0.0"; //2 channels
- case 4 : return "3/0/0.1"; //4 channels
- case 6 : return "3/2/0.1"; //6 channels
- case 8 : return "3/2/2.1"; //8 channels
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Pcm::File_Pcm()
-{
- //Configuration
- ParserName=__T("PCM");
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- IsRawStream=true;
- PTS_DTS_Needed=true;
-
- //In
- Frame_Count_Valid=4;
- BitDepth=0;
- BitDepth_Significant=0;
- Channels=0;
- SamplingRate=0;
- Endianness='\0';
- Sign='\0';
- #if MEDIAINFO_DEMUX
- Frame_Count_Valid_Demux=0;
- #endif //MEDIAINFO_DEMUX
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pcm::Streams_Fill()
-{
- if (Count_Get(Stream_Audio)==0)
- {
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "PCM");
- Fill(Stream_Audio, 0, Audio_Codec, "PCM");
- }
-
- //Filling
- Ztring Firm, ITU;
- if (Codec==__T("EVOB")) {Firm=__T(""); Endianness='B'; Sign='S';} //PCM Signed 16 bits Big Endian, Interleavement is for 2 samples*2 channels L0-1/L0-0/R0-1/R0-0/L1-1/L1-0/R1-1/R1-0/L0-2/R0-2/L1-2/R1-2, http://wiki.multimedia.cx/index.php?title=PCM
- else if (Codec==__T("VOB")) {Firm=__T(""); Endianness='B'; Sign='S';} //PCM Signed 16 bits Big Endian, Interleavement is for 2 samples*2 channels L0-1/L0-0/R0-1/R0-0/L1-1/L1-0/R1-1/R1-0/L0-2/R0-2/L1-2/R1-2, http://wiki.multimedia.cx/index.php?title=PCM
- else if (Codec==__T("M2TS")) {Firm=__T(""); Endianness='B'; Sign='S';} //PCM Signed Big Endian
- else if (Codec==__T("A_PCM/INT/BIG")) {Firm=__T(""); Endianness='B';}
- else if (Codec==__T("A_PCM/INT/LITTLE")) {Firm=__T(""); Endianness='L';}
- else if (Codec==__T("A_PCM/INT/FLOAT")) {Firm=__T(""); Endianness='B'; Sign='F';}
- else if (Codec==__T("fl32")) { if (!Endianness) Endianness='B'; if (!Sign) Sign='F'; BitDepth=32;}
- else if (Codec==__T("fl64")) { if (!Endianness) Endianness='B'; if (!Sign) Sign='F'; BitDepth=64;}
- else if (Codec==__T("in24")) { if (!Endianness) Endianness='B'; if (!Sign) Sign='U'; BitDepth=24;}
- else if (Codec==__T("in32")) { if (!Endianness) Endianness='B'; if (!Sign) Sign='U'; BitDepth=32;}
- else if (Codec==__T("raw ")) { if (!Endianness) Endianness='L'; Sign='U';}
- else if (Codec==__T("twos")) { Endianness='B'; Sign='S';}
- else if (Codec==__T("sowt")) { Endianness='L'; Sign='S';}
- else if (Codec==__T("lpcm")) { if (!Endianness) Endianness='B'; if (!Sign) Sign='S';}
- else if (Codec==__T("SWF ADPCM")) {Firm=__T("SWF");}
- else if (Codec==__T("1")) { if (BitDepth)
- {
- if (BitDepth>8)
- { Endianness='L'; Sign='S';}
- else
- { Sign='U';}
- }
- }
- else if (Codec==__T("2")) {Firm=__T("Microsoft");}
- else if (Codec==__T("3")) { Endianness='F';}
- else if (Codec==__T("10")) {Firm=__T("OKI");}
- else if (Codec==__T("11")) {Firm=__T("Intel");}
- else if (Codec==__T("12")) {Firm=__T("Mediaspace");}
- else if (Codec==__T("13")) {Firm=__T("Sierra");}
- else if (Codec==__T("14")) {Firm=__T("Antex");}
- else if (Codec==__T("17")) {Firm=__T("Dialogic");}
- else if (Codec==__T("18")) {Firm=__T("Mediavision");}
- else if (Codec==__T("20")) {Firm=__T("Yamaha");}
- else if (Codec==__T("33")) {Firm=__T("Antex");}
- else if (Codec==__T("36")) {Firm=__T("DSP Solution");}
- else if (Codec==__T("38")) {Firm=__T("Natural MicroSystems");}
- else if (Codec==__T("39")) {Firm=__T("Crystal Semiconductor");}
- else if (Codec==__T("3B")) {Firm=__T("Rockwell");}
- else if (Codec==__T("40")) {Firm=__T("Antex Electronics");}
- else if (Codec==__T("42")) {Firm=__T("IBM");}
- else if (Codec==__T("45")) {Firm=__T("Microsoft"); ITU=__T("G.726");}
- else if (Codec==__T("64")) {Firm=__T("Apicom"); ITU=__T("G.726");}
- else if (Codec==__T("65")) {Firm=__T("Apicom"); ITU=__T("G.722");}
- else if (Codec==__T("85")) {Firm=__T("DataFusion Systems"); ITU=__T("G.726");}
- else if (Codec==__T("8B")) {Firm=__T("Infocom"); ITU=__T("G.721");}
- else if (Codec==__T("97")) {Firm=__T("ZyXEL");}
- else if (Codec==__T("100")) {Firm=__T("Rhetorex");}
- else if (Codec==__T("125")) {Firm=__T("Sanyo");}
- else if (Codec==__T("140")) {Firm=__T("Dictaphone"); ITU=__T("G.726");}
- else if (Codec==__T("170")) {Firm=__T("Unisys");}
- else if (Codec==__T("175")) {Firm=__T("SyCom"); ITU=__T("G.726");}
- else if (Codec==__T("178")) {Firm=__T("Knownledge");}
- else if (Codec==__T("200")) {Firm=__T("Creative");}
- else if (Codec==__T("210")) {Firm=__T("Uher");}
- else if (Codec==__T("285")) {Firm=__T("Norcom Voice Systems");}
- else if (Codec==__T("1001")) {Firm=__T("Olivetti");}
- else if (Codec==__T("1C03")) {Firm=__T("Lucent"); ITU=__T("G.723");}
- else if (Codec==__T("1C0C")) {Firm=__T("Lucent"); ITU=__T("G.723");}
- else if (Codec==__T("4243")) {ITU=__T("G.726");}
- else if (Codec==__T("A105")) {ITU=__T("G.726");}
- else if (Codec==__T("A107")) {ITU=__T("G.726");}
-
- //Format
- Fill(Stream_Audio, 0, Audio_Codec_String, "PCM");
- Fill(Stream_Audio, 0, Audio_Codec_Family, "PCM");
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
-
- //SamplingRate
- if (SamplingRate)
- Fill(Stream_Audio, 0, Audio_SamplingRate, SamplingRate);
-
- //Firm
- Fill(Stream_Audio, 0, Audio_Format_Settings, Firm);
- Fill(Stream_Audio, 0, Audio_Format_Settings_Firm, Firm);
- Fill(Stream_Audio, 0, Audio_Codec_Settings, Firm);
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Firm, Firm);
-
- //Endianess
- const char* Value;
- switch (Endianness)
- {
- case 'B': Value="Big"; break;
- case 'L': Value="Little"; break;
- default : Value="";
- }
- Fill(Stream_Audio, 0, Audio_Format_Settings, Value);
- Fill(Stream_Audio, 0, Audio_Format_Settings_Endianness, Value);
- Fill(Stream_Audio, 0, Audio_Codec_Settings, Value);
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Endianness, Value);
-
- //Sign
- switch (Sign)
- {
- case 'S': Value="Signed"; break;
- case 'U': Value="Unsigned"; break;
- default : Value="";
- }
- Fill(Stream_Audio, 0, Audio_Format_Settings, Value);
- Fill(Stream_Audio, 0, Audio_Format_Settings_Sign, Value);
- Fill(Stream_Audio, 0, Audio_Codec_Settings, Value);
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Sign, Value);
-
- //ITU
- Fill(Stream_Audio, 0, Audio_Format_Settings, ITU);
- Fill(Stream_Audio, 0, Audio_Format_Settings_ITU, ITU);
- Fill(Stream_Audio, 0, Audio_Codec_Settings, ITU);
- Fill(Stream_Audio, 0, Audio_Codec_Settings_ITU, ITU);
-
- //BitDepth
- if (BitDepth_Significant)
- {
- Fill(Stream_Audio, 0, Audio_BitDepth, BitDepth_Significant);
- Fill(Stream_Audio, 0, Audio_BitDepth_Stored, BitDepth);
- }
- else if (BitDepth)
- Fill(Stream_Audio, 0, Audio_BitDepth, BitDepth);
-
- //Channels
- if (Channels)
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
-
- //Bit rate
- if (SamplingRate && BitDepth && Channels)
- Fill(Stream_Audio, 0, Audio_BitRate, SamplingRate*BitDepth*Channels);
-
- //ChannelsPositions
- if (Codec==__T("SMPTE ST 337"))
- {
- Fill(Stream_Audio, 0, Audio_ChannelPositions, Smpte_St0302_ChannelsPositions(Channels));
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, Smpte_St0302_ChannelsPositions2(Channels));
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Pcm::Streams_Finish()
-{
- //No frames in PCM!
- Frame_Count=(int64u)-1;
- Frame_Count_NotParsedIncluded=(int64u)-1;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-void File_Pcm::Read_Buffer_Continue()
-{
- if (Demux_UnpacketizeContainer && !Status[IsAccepted])
- {
- Frame_Count_Valid_Demux++;
- if (Frame_Count_Valid_Demux<Frame_Count_Valid)
- Element_WaitForMoreData();
- }
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Pcm::FileHeader_Begin()
-{
- if (!Frame_Count_Valid)
- {
- Accept();
- Finish();
- }
-
- return true;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pcm::Header_Parse()
-{
- //Filling
- Header_Fill_Code(0, "Block");
- if (BitDepth && Channels)
- {
- int64u Size=(Element_Size/(BitDepth*Channels/8))*(BitDepth*Channels/8); //A complete sample
- if (Element_Size && Size==0)
- {
- Element_WaitForMoreData();
- return;
- }
- Header_Fill_Size(Size);
- }
- else
- Header_Fill_Size(Element_Size); // Unknown sample size
-}
-
-//---------------------------------------------------------------------------
-void File_Pcm::Data_Parse()
-{
- #if MEDIAINFO_DEMUX
- FrameInfo.PTS=FrameInfo.DTS;
- if (Frame_Count_Valid_Demux)
- {
- if (FrameInfo.DUR!=(int64u)-1)
- FrameInfo.DUR*=Frame_Count_Valid_Demux;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1 && Frame_Count_NotParsedIncluded>=Frame_Count_Valid_Demux)
- Frame_Count_NotParsedIncluded-=Frame_Count_Valid_Demux-1;
- }
- Demux_random_access=true;
- Element_Code=(int64u)-1;
-
- if (BitDepth==20 && Endianness=='L' && Config->Demux_PCM_20bitTo16bit_Get())
- {
- size_t Info_Offset=(size_t)Element_Size;
- const int8u* Info=Buffer+Buffer_Offset;
- size_t Info2_Size=Info_Offset*4/5;
- int8u* Info2=new int8u[Info2_Size];
- size_t Info2_Pos=0;
- size_t Info_Pos=0;
-
- //Removing bits 3-0 (Little endian)
- // Dest : 20LE / L1L0 L3L2 R0L4 R2R1 R4R3
- // Source: L2L1 L4L3 R2R1 R4R2
- while (Info_Pos+5<=Info_Offset)
- {
- Info2[Info2_Pos ] =(Info[Info_Pos+1]<<4 ) | (Info[Info_Pos+0]>>4 );
- Info2[Info2_Pos+1] =(Info[Info_Pos+2]<<4 ) | (Info[Info_Pos+1]>>4 );
- Info2[Info2_Pos+2] = Info[Info_Pos+3] ;
- Info2[Info2_Pos+3] = Info[Info_Pos+4] ;
-
- Info2_Pos+=4;
- Info_Pos+=5;
- }
-
- Demux(Info2, Info2_Pos, ContentType_MainStream);
-
- delete[] Info2;
- }
- else if (BitDepth==20 && Endianness=='L' && Config->Demux_PCM_20bitTo24bit_Get())
- {
- size_t Info_Offset=(size_t)Element_Size;
- const int8u* Info=Buffer+Buffer_Offset;
- size_t Info2_Size=Info_Offset*6/5;
- int8u* Info2=new int8u[Info2_Size];
- size_t Info2_Pos=0;
- size_t Info_Pos=0;
-
- //Padding bits 3-0 (Little endian)
- // Dest : 20LE / L1L0 L3L2 R0L4 R2R1 R4R3
- // Source: L0XX L2L1 L4L3 R0XX R2R1 R4R2
- while (Info_Pos+5<=Info_Offset)
- {
- Info2[Info2_Pos ] = Info[Info_Pos+0]<<4 ;
- Info2[Info2_Pos+1] =(Info[Info_Pos+1]<<4 ) | (Info[Info_Pos+0]>>4 );
- Info2[Info2_Pos+2] =(Info[Info_Pos+2]<<4 ) | (Info[Info_Pos+1]>>4 );
- Info2[Info2_Pos+3] = Info[Info_Pos+2]&0xF0 ;
- Info2[Info2_Pos+4] = Info[Info_Pos+3] ;
- Info2[Info2_Pos+5] = Info[Info_Pos+4] ;
-
- Info2_Pos+=6;
- Info_Pos+=5;
- }
-
- Demux(Info2, Info2_Pos, ContentType_MainStream);
-
- delete[] Info2;
- }
- else
- {
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- }
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- Skip_XX(Element_Size, "Data"); //It is impossible to detect... Default is no detection, only filling
-
- #if MEDIAINFO_DEMUX
- if (Frame_Count_Valid_Demux)
- {
- Frame_Count+=Frame_Count_Valid_Demux-1;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded+=Frame_Count_Valid_Demux-1;
- FrameInfo.DUR/=Frame_Count_Valid_Demux;
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.DTS+=FrameInfo.DUR*Frame_Count;
- Frame_Count_Valid_Demux=0;
- }
- #endif //MEDIAINFO_DEMUX
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (FrameInfo.DTS!=(int64u)-1 && FrameInfo.DUR!=(int64u)-1)
- {
- FrameInfo.DTS+=FrameInfo.DUR;
- FrameInfo.PTS=FrameInfo.DTS;
- }
- if ((!Status[IsAccepted] && Frame_Count>=Frame_Count_Valid) || File_Offset+Buffer_Size>=File_Size)
- {
- Accept();
- Fill();
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_PCM_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm.h
deleted file mode 100644
index 7c6c1e075..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PCM files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_PcmH
-#define MediaInfo_File_PcmH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Pcm
-//***************************************************************************
-
-class File_Pcm : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- ZenLib::Ztring Codec;
- int32u SamplingRate;
- int8u BitDepth;
- int8u BitDepth_Significant;
- int8u Channels;
- int8u Endianness;
- int8u Sign;
-
- //Buffer - Global
- #if MEDIAINFO_DEMUX
- void Read_Buffer_Continue ();
- int64u Frame_Count_Valid_Demux;
- #endif //MEDIAINFO_DEMUX
-
- //Constructor/Destructor
- File_Pcm();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_M2ts.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_M2ts.cpp
deleted file mode 100644
index eb9565515..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_M2ts.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PCMM2TS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Pcm_M2ts.h"
-#if MEDIAINFO_DEMUX
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#endif //MEDIAINFO_DEMUX
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-int8u Pcm_M2TS_channel_assignment[16]=
-{
- 0,
- 1,
- 0,
- 2,
- 3,
- 3,
- 4,
- 4,
- 5,
- 6,
- 7,
- 8,
- 0,
- 0,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-int32u Pcm_M2TS_sampling_frequency[16]=
-{
- 0,
- 48000,
- 0,
- 0,
- 96000,
- 192000,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-int8u Pcm_M2TS_bits_per_sample[4]=
-{
- 0,
- 16,
- 20,
- 24,
-};
-
-//---------------------------------------------------------------------------
-extern const char* Pcm_VOB_ChannelsPositions(int8u channel_assignment);
-extern const char* Pcm_VOB_ChannelsPositions2(int8u channel_assignment);
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Pcm_M2ts::File_Pcm_M2ts()
-{
- //Configuration
- ParserName=__T("PCM M2TS");
- IsRawStream=true;
- PTS_DTS_Needed=true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pcm_M2ts::Streams_Fill()
-{
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "PCM");
- Fill(Stream_Audio, 0, Audio_Codec, "PCM");
- Fill(Stream_Audio, 0, Audio_Codec_Family, "PCM");
- Fill(Stream_Audio, 0, Audio_MuxingMode, "Blu-ray");
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
-
- int8u Channels=Pcm_M2TS_channel_assignment[channel_assignment];
- if (Channels)
- {
- if (Pcm_M2TS_sampling_frequency[sampling_frequency])
- Fill(Stream_Audio, 0, Audio_SamplingRate, Pcm_M2TS_sampling_frequency[sampling_frequency]);
- if (Pcm_M2TS_bits_per_sample[bits_per_sample])
- Fill(Stream_Audio, 0, Audio_BitDepth, Pcm_M2TS_bits_per_sample[bits_per_sample]);
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- Fill(Stream_Audio, 0, Audio_ChannelPositions, Pcm_VOB_ChannelsPositions(channel_assignment));
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, Pcm_VOB_ChannelsPositions2(channel_assignment));
- if (Pcm_M2TS_sampling_frequency[sampling_frequency] && Pcm_M2TS_bits_per_sample[bits_per_sample])
- {
- if (Channels%2)
- Fill(Stream_Audio, 0, Audio_BitRate_Encoded, Pcm_M2TS_sampling_frequency[sampling_frequency]*(Channels+1)*Pcm_M2TS_bits_per_sample[bits_per_sample]); //Always by pair
- Fill(Stream_Audio, 0, Audio_BitRate, Pcm_M2TS_sampling_frequency[sampling_frequency]*Channels*Pcm_M2TS_bits_per_sample[bits_per_sample]);
- }
- }
-
- Fill(Stream_Audio, 0, Audio_Format_Settings, "Big");
- Fill(Stream_Audio, 0, Audio_Format_Settings_Endianness, "Big");
- Fill(Stream_Audio, 0, Audio_Codec_Settings, "Big");
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Endianness, "Big");
- Fill(Stream_Audio, 0, Audio_Format_Settings, "Signed");
- Fill(Stream_Audio, 0, Audio_Format_Settings_Sign, "Signed");
- Fill(Stream_Audio, 0, Audio_Codec_Settings, "Signed");
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Sign, "Signed");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pcm_M2ts::Read_Buffer_Continue()
-{
- if (Buffer_Size==0)
- return;
-
- //Parsing
- int16u audio_data_payload_size;
- Get_B2 ( audio_data_payload_size, "audio_data_payload_size");
- BS_Begin();
- Get_S1 (4, channel_assignment, "channel_assignment"); Param_Info2(Pcm_M2TS_channel_assignment[channel_assignment], " channel(s)");
- Get_S1 (4, sampling_frequency, "sampling_frequency"); Param_Info2(Pcm_M2TS_sampling_frequency[sampling_frequency], " Hz");
- Get_S1 (2, bits_per_sample, "bits_per_sample"); Param_Info2(Pcm_M2TS_bits_per_sample[bits_per_sample], " bits");
- Skip_SB( "start_flag");
- Skip_S1(5, "reserved");
- BS_End();
- Skip_XX(audio_data_payload_size, "audio_data_payload");
-
- FILLING_BEGIN_PRECISE();
- if (!Status[IsAccepted])
- {
- Accept();
- Finish();
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_PCMM2TS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_M2ts.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_M2ts.h
deleted file mode 100644
index c7d932d94..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_M2ts.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PCM (from Blu-ray) streams
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Pcm_M2tsH
-#define MediaInfo_File_Pcm_M2tsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Pcm_M2ts
-//***************************************************************************
-
-class File_Pcm_M2ts : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Pcm_M2ts();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Temp
- int8u channel_assignment;
- int8u sampling_frequency;
- int8u bits_per_sample;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_Vob.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_Vob.cpp
deleted file mode 100644
index 6fb2d8d16..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_Vob.cpp
+++ /dev/null
@@ -1,221 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PCMVOB_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Pcm_Vob.h"
-#if MEDIAINFO_DEMUX
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#endif //MEDIAINFO_DEMUX
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-int32u Pcm_VOB_BitDepth[]=
-{
- 16,
- 20,
- 24,
- 0,
-};
-
-//---------------------------------------------------------------------------
-int32u Pcm_VOB_Frequency[]=
-{
- 48000,
- 32000,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-const char* Pcm_VOB_ChannelsPositions(int8u channel_assignment)
-{
- switch (channel_assignment)
- {
- case 1 : return "Front: C"; //1 channel
- case 3 : return "Front: L R"; //2 channels
- case 4 : return "Front: L C R"; //3 channels
- case 5 : return "Front: L R, LFE"; //3 channels
- case 6 : return "Front: L C R, LFE"; //4 channels
- case 7 : return "Front: L R, Side: L R"; //4 channels
- case 8 : return "Front: L C R, Side: L R"; //5 channels
- case 9 : return "Front: L C R, Side: L R, LFE"; //6 channels
- case 10 : return "Front: L C R, Side: L R, Back: L R"; //7 channels
- case 11 : return "Front: L C R, Side: L R, Back: L R, LFE"; //8 channels
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Pcm_VOB_ChannelsPositions2(int8u channel_assignment)
-{
- switch (channel_assignment)
- {
- case 1 : return "1/0/0.0"; //1 channel
- case 3 : return "2/0/0.0"; //2 channels
- case 4 : return "3/0/0.0"; //3 channels
- case 5 : return "2/0/0.1"; //3 channels
- case 6 : return "3/0/0.1"; //4 channels
- case 7 : return "2/2/0.0"; //4 channels
- case 8 : return "3/2/0.0"; //5 channels
- case 9 : return "3/2/0.1"; //6 channels
- case 10 : return "3/2/2.0"; //7 channels
- case 11 : return "3/2/2.1"; //8 channels
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Pcm_Vob::File_Pcm_Vob()
-{
- //Configuration
- ParserName=__T("PCM VOB");
- IsRawStream=true;
- PTS_DTS_Needed=true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pcm_Vob::Streams_Fill()
-{
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "PCM");
- Fill(Stream_Audio, 0, Audio_Codec, "PCM");
- Fill(Stream_Audio, 0, Audio_Codec_Family, "PCM");
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
-
- Fill(Stream_Audio, 0, Audio_BitDepth, Pcm_VOB_BitDepth[BitDepth]);
- Fill(Stream_Audio, 0, Audio_SamplingRate, Pcm_VOB_Frequency[Frequency]);
- Fill(Stream_Audio, 0, Audio_Channel_s_, NumberOfChannelsMinusOne+1);
- Fill(Stream_Audio, 0, Audio_ChannelPositions, Pcm_VOB_ChannelsPositions(NumberOfChannelsMinusOne+1));
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, Pcm_VOB_ChannelsPositions2(NumberOfChannelsMinusOne+1));
- Fill(Stream_Audio, 0, Audio_BitRate, Pcm_VOB_Frequency[Frequency]*(NumberOfChannelsMinusOne+1)*16);
-
- //PCM Signed 16 bits Big Endian, Interleavement is for 2 samples*2 channels L0-1/L0-0/R0-1/R0-0/L1-1/L1-0/R1-1/R1-0/L0-2/R0-2/L1-2/R1-2, http://wiki.multimedia.cx/index.php?title=PCM
- Fill(Stream_Audio, 0, Audio_Format_Settings, "Big");
- Fill(Stream_Audio, 0, Audio_Format_Settings_Endianness, "Big");
- Fill(Stream_Audio, 0, Audio_Codec_Settings, "Big");
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Endianness, "Big");
- Fill(Stream_Audio, 0, Audio_Format_Settings, "Signed");
- Fill(Stream_Audio, 0, Audio_Format_Settings_Sign, "Signed");
- Fill(Stream_Audio, 0, Audio_Codec_Settings, "Signed");
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Sign, "Signed");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pcm_Vob::Read_Buffer_Continue()
-{
- if (Buffer_Size==0)
- return;
-
- //Parsing
- Skip_B1( "Frame number");
- Skip_B2( "Bytes to skip (+1?)");
- Skip_B1( "Unknown");
- BS_Begin();
- Get_S1 (2, BitDepth, "Bit depth"); Param_Info1(Pcm_VOB_BitDepth[BitDepth]);
- Get_S1 (2, Frequency, "Frequency"); Param_Info1(Pcm_VOB_Frequency[Frequency]);
- Skip_SB( "Unknown");
- Get_S1 (3, NumberOfChannelsMinusOne, "Number of channels (minus 1)");
- BS_End();
- Skip_B1( "Start code");
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_PCM_20bitTo16bit_Get() && BitDepth==1) //20-bit
- {
- int8u* Info=new int8u[(size_t)((Element_Size-6)*4/5)];
- size_t Info_Offset=0;
-
- while (Element_Offset+5*(NumberOfChannelsMinusOne+1)<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- std::memcpy(Info+Info_Offset, Buffer+Buffer_Pos, 4*(NumberOfChannelsMinusOne+1));
-
- Info_Offset+=4*(NumberOfChannelsMinusOne+1);
- Element_Offset+=5*(NumberOfChannelsMinusOne+1);
- }
- Element_Offset=6;
-
- FrameInfo.PTS=FrameInfo.DTS;
- if (Pcm_VOB_Frequency[Frequency])
- FrameInfo.DUR=(Element_Size-6)/5*1000000000/Pcm_VOB_Frequency[Frequency];
- Demux_random_access=true;
- Element_Code=(int64u)-1;
- Demux(Info, Info_Offset, ContentType_MainStream);
-
- delete[] Info;
- }
- else
- {
- Demux_Offset=Buffer_Offset+(size_t)Element_Size;
- Buffer_Offset+=6; //Header is dropped
- Demux_UnpacketizeContainer_Demux();
- Buffer_Offset-=6;
- }
- #endif //MEDIAINFO_DEMUX
-
- Skip_XX(Element_Size-6, "Data");
-
- FILLING_BEGIN();
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (FrameInfo.DTS!=(int64u)-1 && FrameInfo.DUR!=(int64u)-1)
- {
- FrameInfo.DTS+=FrameInfo.DUR;
- FrameInfo.PTS=FrameInfo.DTS;
- }
-
- if (!Status[IsAccepted])
- {
- Accept();
- Finish();
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_PCMVOB_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_Vob.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_Vob.h
deleted file mode 100644
index 0baa44c14..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Pcm_Vob.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PCM (from DVD) files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Pcm_VobH
-#define MediaInfo_File_Pcm_VobH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Pcm_Vob
-//***************************************************************************
-
-class File_Pcm_Vob : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Pcm_Vob();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Temp
- int8u BitDepth;
- int8u Frequency;
- int8u NumberOfChannelsMinusOne;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ps2Audio.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ps2Audio.cpp
deleted file mode 100644
index 510792127..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ps2Audio.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PS2A_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Ps2Audio.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ps2Audio::Read_Buffer_Continue()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- {
- int32u ID;
- Peek_B4(ID);
- switch (ID)
- {
- case 0x53536264 : SSbd(); break;
- case 0x53536864 : SShd(); break;
- default : Element_Offset=Element_Size; Reject("PS2 Audio");
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Ps2Audio::SSbd()
-{
- if (Count_Get(Stream_Audio)!=1)
- {
- Trusted_IsNot("Element should not be here");
- return;
- }
-
- Element_Begin1("SSbd (Body)");
- int32u Size;
- Skip_C4( "ID");
- Get_L4 (Size, "Size");
- Skip_XX(Element_Size-Element_Offset, "Data (Partial)");
- Element_End0();
-
- FILLING_BEGIN();
- Fill(Stream_Audio, 0, Audio_StreamSize, Size);
- if (BitRate)
- Fill(Stream_Audio, 0, Audio_Duration, ((int64u)Size)*1000*8/BitRate);
-
- Finish("PS2 Audio");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Ps2Audio::SShd()
-{
- Element_Begin1("SShd (Header)");
- //Parsing
- int32u Size, Format, SamplingRate, Channels;
- Skip_C4( "ID");
- Get_L4 (Size, "Size");
- if (Size!=0x18)
- {
- Trusted_IsNot("Bad size");
- return;
- }
- Get_L4 (Format, "Format");
- Get_L4 (SamplingRate, "Sampling rate");
- Get_L4 (Channels, "Channels");
- Skip_L4( "Bytes per channel");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Element_End0();
-
- FILLING_BEGIN();
- Accept("PS2 Audio");
-
- BitRate=SamplingRate*Channels*16; //Always 16 bits
-
- Stream_Prepare(Stream_Audio);
- Ztring FormatS;
- switch(Format)
- {
- case 0x00000001 : FormatS=__T("PCM"); break;
- case 0x00000010 : FormatS=__T("ADPCM"); break;
- default : ;
- }
- Fill(Stream_Audio, 0, Audio_Format, FormatS);
- Fill(Stream_Audio, 0, Audio_Codec, FormatS);
- Fill(Stream_Audio, 0, Audio_MuxingMode, "PS2");
- Fill(Stream_Audio, 0, Audio_SamplingRate, SamplingRate);
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate);
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_PS2A_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ps2Audio.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ps2Audio.h
deleted file mode 100644
index 9ea1fece5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Ps2Audio.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Ps2AudioH
-#define MediaInfo_Ps2AudioH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Ps2Audio
-//***************************************************************************
-
-class File_Ps2Audio : public File__Analyze
-{
-private :
- //Buffer - Global
- void Read_Buffer_Continue();
-
- //Elements
- void SSbd();
- void SShd();
-
- //Temp
- int32u BitRate;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Rkau.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Rkau.cpp
deleted file mode 100644
index 5d45ae36a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Rkau.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_RKAU_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Rkau.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Rkau::File_Rkau()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Rkau::Streams_Finish()
-{
- //Filling
- int64u CompressedSize=File_Size-TagsSize;
- float32 CompressionRatio=((float32)UncompressedSize)/CompressedSize;
-
- Fill(Stream_Audio, 0, Audio_StreamSize, CompressedSize);
- Fill(Stream_Audio, 0, Audio_Compression_Ratio, CompressionRatio);
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "VBR");
-
- File__Tags_Helper::Streams_Finish();
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Rkau::FileHeader_Begin()
-{
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- //Synchro
- if (Buffer_Offset+3>Buffer_Size)
- return false;
- if (CC3(Buffer+Buffer_Offset)!=0x524B41) //"RKA"
- {
- File__Tags_Helper::Reject("RKAU");
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Rkau::FileHeader_Parse()
-{
- //Parsing
- Ztring version;
- int32u SampleRate, source_bytes;
- int8u Channels, BitsPerSample, Quality, Flags;
- bool joint_stereo, streaming, vrq_lossy_mode;
-
- Skip_Local(3, "Signature");
- Get_Local (1, version, "Version");
- Get_L4 (source_bytes, "SourceBytes");
- Get_L4 (SampleRate, "SampleRate");
- Get_L1 (Channels, "Channels");
- Get_L1 (BitsPerSample, "BitsPerSample");
- Get_L1 (Quality, "Quality");
- Get_L1 (Flags, "Flags");
- Get_Flags (Flags, 0, joint_stereo, "JointStereo");
- Get_Flags (Flags, 1, streaming, "Streaming");
- Get_Flags (Flags, 2, vrq_lossy_mode, "VRQLossyMode");
-
- FILLING_BEGIN();
- if (SampleRate==0)
- return;
- Duration=(((int64u)source_bytes*1000)/4)/SampleRate;
- if (Duration==0)
- return;
- UncompressedSize = ((int64u)Channels) * ((int64u)BitsPerSample / 8);
- if (UncompressedSize==0)
- return;
-
- //Filling data
- File__Tags_Helper::Accept("RKAU");
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "RK Audio");
- Fill(Stream_Audio, 0, Audio_Codec, "Rkau");
- Fill(Stream_Audio, 0, Audio_Encoded_Library, __T("1.0") + version);
- Fill(Stream_Audio, 0, Audio_Compression_Mode, (Quality==0)?"Lossless":"Lossy");
- Fill(Stream_Audio, 0, Audio_BitDepth, BitsPerSample);
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- Fill(Stream_Audio, 0, Audio_SamplingRate, SampleRate);
- Fill(Stream_Audio, 0, Audio_Duration, Duration);
-
- FILLING_END();
-
- //No more needed data
- File__Tags_Helper::Finish("RKAU");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_RKAU_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Rkau.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Rkau.h
deleted file mode 100644
index 038d4b96d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Rkau.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about RKAU files
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_RkauH
-#define MediaInfo_File_RkauH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Rkau
-//***************************************************************************
-
-class File_Rkau : public File__Analyze, public File__Tags_Helper
-{
-public :
- //Constructor/Destructor
- File_Rkau();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue() {File__Tags_Helper::Read_Buffer_Continue();}
-
- //Temp
- int64u Duration;
- int64u UncompressedSize;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ScreamTracker3.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ScreamTracker3.cpp
deleted file mode 100644
index ae54c06dd..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ScreamTracker3.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_S3M_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_ScreamTracker3.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_ScreamTracker3::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<44)
- return false; //Must wait for more data
-
- if (CC1(Buffer+28)!=0x1A || CC4(Buffer+44)!=0x5343524D) //"SCRM"
- {
- Reject("Scream Tracker 3");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ScreamTracker3::Read_Buffer_Continue()
-{
- //Parsing
- Ztring SongName;
- int16u OrdNum, InsNum, PatNum, Flags, Special;
- int8u SoftwareVersionMajor, SoftwareVersionMinor, IS, TS;
- Get_Local(28, SongName, "Song name");
- Skip_L1( "0x1A");
- Skip_L1( "Type");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Get_L2 (OrdNum, "Orders count");
- Get_L2 (InsNum, "Instruments count");
- Get_L2 (PatNum, "Paterns count");
- Get_L2 (Flags, "Flags");
- Skip_Flags(Flags, 0, "st2vibrato");
- Skip_Flags(Flags, 1, "st2tempo");
- Skip_Flags(Flags, 2, "amigaslides");
- Skip_Flags(Flags, 3, "0vol optimizations");
- Skip_Flags(Flags, 4, "amiga limits");
- Skip_Flags(Flags, 5, "enable filter/sfx with sb");
- Skip_Flags(Flags, 6, "st3.00 volumeslides");
- Skip_Flags(Flags, 7, "pecial custom data in file");
- Get_L1 (SoftwareVersionMajor, "Cwt/v (Major)");
- Get_L1 (SoftwareVersionMinor, "Cwt/v (Minor)");
- Skip_L2( "File format information");
- Skip_B4( "Signature");
- Skip_L1( "global volume");
- Get_L1 (IS, "Initial Speed");
- Get_L1 (TS, "Initial Temp");
- Skip_L1( "master volume");
- Skip_L1( "ultra click removal");
- Skip_L1( "Default channel pan positions are present");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Skip_L1( "Unknown");
- Get_L2 (Special, "Special");
- Skip_XX(32, "Channel settings");
- Skip_XX(OrdNum, "Orders");
- Skip_XX(InsNum*2, "Instruments");
- Skip_XX(PatNum*2, "Patterns");
-
- FILLING_BEGIN();
- Accept("Scream Tracker 3");
-
- Fill(Stream_General, 0, General_Format, "Scream Tracker 3");
- Fill(Stream_General, 0, General_Track, SongName);
- if ((SoftwareVersionMajor&0xF0)==0x10)
- Fill(Stream_General, 0, General_Encoded_Application, Ztring(__T("Scream Tracker ")+Ztring::ToZtring(SoftwareVersionMajor)+__T(".")+Ztring::ToZtring(SoftwareVersionMinor/16)+Ztring::ToZtring(SoftwareVersionMinor%16)));
- Fill(Stream_General, 0, "BPM", TS);
-
- Stream_Prepare(Stream_Audio);
-
- Finish("Scream Tracker 3");
- FILLING_END();
-
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_S3M_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ScreamTracker3.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ScreamTracker3.h
deleted file mode 100644
index df4faebb3..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_ScreamTracker3.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ScreamTracker3 files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ScreamTracker3H
-#define MediaInfo_File_ScreamTracker3H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_ScreamTracker3
-//***************************************************************************
-
-class File_ScreamTracker3 : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0302.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0302.cpp
deleted file mode 100644
index 6420878cd..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0302.cpp
+++ /dev/null
@@ -1,307 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SMPTEST0302_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_SmpteSt0302.h"
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_SmpteSt0337.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#if MEDIAINFO_DEMUX
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#endif //MEDIAINFO_EVENTS
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_SmpteSt0302::File_SmpteSt0302()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Aes3;
- #endif //MEDIAINFO_EVENTS
- PTS_DTS_Needed=true;
- IsRawStream=true;
-}
-
-//---------------------------------------------------------------------------
-File_SmpteSt0302::~File_SmpteSt0302()
-{
- for (size_t Pos=0; Pos<Parsers.size(); Pos++)
- delete Parsers[Pos]; //Parsers[Pos]=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0302::Streams_Accept()
-{
- // SMPTE ST 337
- {
- File_SmpteSt0337* SmpteSt0337=new File_SmpteSt0337();
- SmpteSt0337->Container_Bits=(4+bits_per_sample)*4;
- SmpteSt0337->Endianness='L';
- SmpteSt0337->Aligned=true;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_Level=4; //Intermediate
- SmpteSt0337->Demux_Level=2; //Container
- SmpteSt0337->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- Parsers.push_back(SmpteSt0337);
- }
-
- // Raw PCM
- {
- File_Pcm* Pcm=new File_Pcm();
- Pcm->Codec.From_Local("SMPTE ST 302");
- Pcm->BitDepth=(4+bits_per_sample)*4;
- Pcm->Channels=(1+number_channels)*2;
- Pcm->SamplingRate=48000;
- Pcm->Endianness='L';
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_Level=4; //Intermediate
- Pcm->Demux_Level=2; //Container
- Pcm->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- Parsers.push_back(Pcm);
- }
-
- // Init
- for (size_t Pos=0; Pos<Parsers.size(); Pos++)
- Open_Buffer_Init(Parsers[Pos]);
-}
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0302::Streams_Fill()
-{
- if (Parsers.size()==1 && Parsers[0]->Status[IsAccepted])
- {
- Fill(Parsers[0]);
- Merge(*Parsers[0]);
- }
-
- for (size_t Pos=0; Pos<Count_Get(Stream_Audio); Pos++)
- if (Retrieve(Stream_Audio, Pos, Audio_MuxingMode).empty()) //TODO: put "SMPTE ST 302" in this field, the current name is there only for legacy
- Fill(Stream_Audio, 0, Audio_MuxingMode, "AES3");
-
- if (Count_Get(Stream_Audio)==1)
- {
- if (Retrieve(Stream_Audio, 0, Audio_BitRate).empty())
- Fill(Stream_Audio, 0, Audio_BitRate, (4+bits_per_sample)*(1+number_channels)*8*48000);
- if (Retrieve(Stream_Audio, 0, Audio_Format)==__T("PCM"))
- {
- Fill(Stream_Audio, 0, Audio_Codec, "AES3", Unlimited, true, true);
- Fill(Stream_Audio, 0, Audio_Codec_String, "AES3", Unlimited, true, true);
- Clear(Stream_Audio, 0, Audio_Codec_Family);
- }
- }
-
- Fill(Stream_Audio, 0, Audio_BitRate_Encoded, (5+bits_per_sample)*(1+number_channels)*8*48000);
- for (size_t Pos=1; Pos<Count_Get(Stream_Audio); Pos++)
- Fill(Stream_Audio, Pos, Audio_BitRate_Encoded, 0);
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-static inline int8u Reverse8(int n)
-{
- // Input: bit order is 76543210
- //Output: bit order is 45670123
- n=((n>>1)&0x55) | ((n<<1) & 0xaa);
- n=((n>>2)&0x33) | ((n<<2) & 0xcc);
- n=((n>>4)&0x0f) | ((n<<4) & 0xf0);
- return (int8u)n;
-}
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0302::Read_Buffer_Continue()
-{
- //Parsing
- Get_B2 (audio_packet_size, "audio_packet_size");
- BS_Begin();
- Get_S1 (2, number_channels, "number_channels"); Param_Info2((1+number_channels)*2, " channels");
- Info_S1(8, channel_identification, "channel_identification");
- Get_S1 (2, bits_per_sample, "bits_per_sample"); Param_Info2((4+bits_per_sample)*4, " bits");
- Info_S1(4, alignment_bits, "alignment_bits");
- BS_End();
-
- //Enough data
- if (Element_Size<4+(int64u)audio_packet_size)
- {
- Element_Offset=0;
- Element_WaitForMoreData();
- return;
- }
-
- //Cohenrancy test
- if (Element_Size!=4+(int64u)audio_packet_size || bits_per_sample==3 || audio_packet_size%((1+number_channels)*(5+bits_per_sample)))
- {
- Trusted_IsNot("Wrong size");
- Skip_XX(Element_Size-4, "Problem?");
- return;
- }
-
- if (!Status[IsAccepted])
- Accept("SMPTE ST 302");
-
- //Decyphering
- size_t PcmSize=0;
- float64 Ratio=0;
- switch (bits_per_sample)
- {
- case 0 : PcmSize=audio_packet_size*4/5; Ratio=4.0/5.0; break;
- case 1 : PcmSize=audio_packet_size*5/6; Ratio=5.0/6.0; break;
- case 2 : PcmSize=audio_packet_size*6/7; Ratio=6.0/7.0; break;
- case 3 : Reject(); return;
- default: ;
- }
-
- int8u* Info=new int8u[PcmSize];
- size_t Info_Offset=0;
-
- while (Element_Offset<Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- switch (bits_per_sample)
- {
- case 0 : //16 bits
- // Source: L1L0 L3L2 R0XX R2R1 XXR3
- // Dest : 16LE / L1L0 L3L2 R1R0 R3R2
- Info[Info_Offset+0]= Reverse8(Buffer[Buffer_Pos+0]);
- Info[Info_Offset+1]= Reverse8(Buffer[Buffer_Pos+1]);
- Info[Info_Offset+2]=(Reverse8(Buffer[Buffer_Pos+3])<<4 ) | (Reverse8(Buffer[Buffer_Pos+2])>>4 );
- Info[Info_Offset+3]=(Reverse8(Buffer[Buffer_Pos+4])<<4 ) | (Reverse8(Buffer[Buffer_Pos+3])>>4 );
-
- Info_Offset+=4;
- Element_Offset+=5;
- break;
-
- case 1 : //20 bits
- // Source: L1L0 L3L2 XXL4 R1R0 R3R2 XXR4
- // Dest : 20LE / L1L0 L3L2 R0L4 R2R1 R4R3
- Info[Info_Offset+0]= Reverse8(Buffer[Buffer_Pos+0]) ;
- Info[Info_Offset+1]= Reverse8(Buffer[Buffer_Pos+1]) ;
- Info[Info_Offset+2]=(Reverse8(Buffer[Buffer_Pos+3])<<4 ) | (Reverse8(Buffer[Buffer_Pos+2])&0x0F);
- Info[Info_Offset+3]=(Reverse8(Buffer[Buffer_Pos+4])<<4 ) | (Reverse8(Buffer[Buffer_Pos+3])>>4 );
- Info[Info_Offset+4]=(Reverse8(Buffer[Buffer_Pos+5])<<4 ) | (Reverse8(Buffer[Buffer_Pos+4])>>4 );
-
- Info_Offset+=5;
- Element_Offset+=6;
- break;
-
- case 2 : //24 bits
- // Source: L1L0 L3L2 L5L4 R0XX R2R1 R4R3 XXR5
- // Dest : 16LE / L1L0 L3L2 L5L4 R1R0 R3R2 R5R4
- Info[Info_Offset+0] = Reverse8(Buffer[Buffer_Pos+0]) ;
- Info[Info_Offset+1] = Reverse8(Buffer[Buffer_Pos+1]) ;
- Info[Info_Offset+2] = Reverse8(Buffer[Buffer_Pos+2]) ;
- Info[Info_Offset+3] =(Reverse8(Buffer[Buffer_Pos+4])<<4 ) | (Reverse8(Buffer[Buffer_Pos+3])>>4 );
- Info[Info_Offset+4] =(Reverse8(Buffer[Buffer_Pos+5])<<4 ) | (Reverse8(Buffer[Buffer_Pos+4])>>4 );
- Info[Info_Offset+5] =(Reverse8(Buffer[Buffer_Pos+6])<<4 ) | (Reverse8(Buffer[Buffer_Pos+5])>>4 );
-
- Info_Offset+=6;
- Element_Offset+=7;
- break;
- default : ;
- }
- }
- Element_Offset=4;
-
- FrameInfo.PTS=FrameInfo.DTS;
- FrameInfo.DUR=((int64u)audio_packet_size)*1000000000/((1+number_channels)*(5+bits_per_sample)*48000);
-
- #if MEDIAINFO_DEMUX
- Demux_random_access=true;
- Demux(Info, Info_Offset, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- //Parsers
- for (size_t Pos=0; Pos<Parsers.size(); Pos++)
- {
- Parsers[Pos]->FrameInfo=FrameInfo;
- Open_Buffer_Continue(Parsers[Pos], Info, Info_Offset, true, Ratio);
-
- if (Parsers.size()>1 && Parsers[Pos]->Status[IsAccepted])
- {
- for (size_t Pos2=0; Pos2<Pos; Pos2++)
- delete Parsers[Pos2]; //Parsers[Pos2]=NULL;
- for (size_t Pos2=Pos+1; Pos2<Parsers.size(); Pos2++)
- delete Parsers[Pos2]; //Parsers[Pos2]=NULL;
- Parsers.resize(Pos+1);
- Parsers.erase(Parsers.begin(), Parsers.begin()+Parsers.size()-1);
- }
- }
- Element_Offset=Element_Size;
-
- delete[] Info;
-
- FrameInfo.DTS+=FrameInfo.DUR;
-
- //Filling
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (Parsers.size()>1 && Frame_Count>=2)
- {
- for (size_t Pos=0; Pos<Parsers.size()-1; Pos++)
- delete Parsers[Pos]; //Parsers[Pos]=NULL;
- Parsers.erase(Parsers.begin(), Parsers.begin()+Parsers.size()-1);
- }
-
- if (!Status[IsFilled] && Parsers.size()==1 && Parsers[0]->Status[IsFinished])
- {
- //Filling
- Finish("SMPTE ST 302");
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_SMPTEST0302_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0302.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0302.h
deleted file mode 100644
index 2c7549ca7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0302.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about SMPTE ST0302
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_SmpteSt0302H
-#define MediaInfo_File_SmpteSt0302H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_SmpteSt0302
-//***************************************************************************
-
-class File_SmpteSt0302 : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_SmpteSt0302();
- ~File_SmpteSt0302();
-
-private :
- //Streams management
- void Streams_Accept();
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Temp
- int16u audio_packet_size;
- int8u number_channels;
- int8u bits_per_sample;
-
- //Parsers
- std::vector<File__Analyze*> Parsers;
- void Parsers_Init();
- void Parsers_Parse(const int8u* Parser_Buffer, size_t Parser_Buffer_Size);
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0331.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0331.cpp
deleted file mode 100644
index 64e53a737..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0331.cpp
+++ /dev/null
@@ -1,227 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// AES3 PCM and non-PCM (SMPTE 337M)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SMPTEST0331_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_SmpteSt0331.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#if MEDIAINFO_SEEK
- #include "MediaInfo/MediaInfo_Internal.h"
-#endif //MEDIAINFO_SEEK
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Smpte_St0331_ChannelsPositions(int8u number_channels)
-{
- switch (number_channels)
- {
- case 0 : return "Front: L R"; //2 channels
- case 1 : return "Front: L C R, LFE"; //4 channels
- case 2 : return "Front: L C R, Side: L R, LFE"; //6 channels
- case 3 : return "Front: L C R, Side: L R, Back: L R, LFE"; //8 channels
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Smpte_St0331_ChannelsPositions2(int8u number_channels)
-{
- switch (number_channels)
- {
- case 0 : return "2/0/0.0"; //2 channels
- case 1 : return "3/0/0.1"; //4 channels
- case 2 : return "3/2/0.1"; //6 channels
- case 3 : return "3/2/2.1"; //8 channels
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_SmpteSt0331::File_SmpteSt0331()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Aes3;
- #endif //MEDIAINFO_EVENTS
- PTS_DTS_Needed=true;
- IsRawStream=true;
-
- //In
- QuantizationBits=0;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0331::Streams_Fill()
-{
- int8u Channels_Count=0;
- for (int8u Pos=0; Pos<8; Pos++)
- if (Channels_valid&(1<<Pos))
- Channels_Count++;
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "PCM");
- Fill(Stream_Audio, 0, Audio_Codec, "PCM");
- Fill(Stream_Audio, 0, Audio_SamplingRate, 48000);
- Fill(Stream_Audio, 0, Audio_BitRate, 8*32*48000);
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
-
- Fill(Stream_Audio, 0, Audio_Format_Settings_Endianness, "Little");
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels_Count);
- Fill(Stream_Audio, 0, Audio_ChannelPositions, Smpte_St0331_ChannelsPositions(Channels_Count));
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, Smpte_St0331_ChannelsPositions2(Channels_Count));
- if (QuantizationBits)
- Fill(Stream_Audio, 0, Audio_BitDepth, QuantizationBits);
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0331::Read_Buffer_Continue()
-{
- if (!Status[IsAccepted])
- Accept("SMPTE ST 331");
-
- //SMPTE 331M
- BS_Begin();
- Skip_SB( "FVUCP Valid Flag");
- Skip_S1(4, "Reserved");
- Skip_S1(3, "5-sequence count");
- BS_End();
- Skip_L2( "Audio Sample Count");
- Get_B1 (Channels_valid, "Channels valid");
-
- if (QuantizationBits && Element_Offset<Element_Size)
- {
- int8u* Info = new int8u[(size_t)((Element_Size - Element_Offset)*((QuantizationBits == 16) ? 2 : 3) / 4)];
- size_t Info_Offset=0;
-
- while (Element_Offset+8*4<=Element_Size)
- {
- for (int8u Pos=0; Pos<8; Pos++)
- {
- if (Channels_valid&(1<<Pos))
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- if (QuantizationBits==16)
- {
- Info[Info_Offset+0] = (Buffer[Buffer_Pos+1]>>4) | ((Buffer[Buffer_Pos+2]<<4)&0xF0 );
- Info[Info_Offset+1] = (Buffer[Buffer_Pos+2]>>4) | ((Buffer[Buffer_Pos+3]<<4)&0xF0 );
- }
- else
- {
- Info[Info_Offset+0] = (Buffer[Buffer_Pos+0]>>4) | ((Buffer[Buffer_Pos+1]<<4)&0xF0 );
- Info[Info_Offset+1] = (Buffer[Buffer_Pos+1]>>4) | ((Buffer[Buffer_Pos+2]<<4)&0xF0 );
- Info[Info_Offset+2] = (Buffer[Buffer_Pos+2]>>4) | ((Buffer[Buffer_Pos+3]<<4)&0xF0 );
- }
-
- Info_Offset+=QuantizationBits==16?2:3;
- }
- Element_Offset+=4;
- }
- }
- Element_Offset=4;
-
- #if MEDIAINFO_DEMUX
- OriginalBuffer_Size=(size_t)Element_Size;
- OriginalBuffer=(int8u*)(Buffer+Buffer_Offset);
-
- FrameInfo.PTS=FrameInfo.DTS;
- FrameInfo.DUR=(Element_Size-4)*1000000000/48000/32; // 48 kHz, 4 bytes per sample
- Demux_random_access=true;
- Element_Code=(int64u)-1;
- Element_Offset=0;
- Demux(Info, Info_Offset, ContentType_MainStream);
- Element_Offset=4;
-
- OriginalBuffer_Size=0;
- OriginalBuffer=NULL;
- #endif //MEDIAINFO_DEMUX
-
- delete[] Info;
- }
-
- Skip_XX(Element_Size-4, "Data");
-
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- #if MEDIAINFO_DEMUX
- if (FrameInfo.DTS!=(int64u)-1 && FrameInfo.DUR!=(int64u)-1)
- {
- FrameInfo.DTS+=FrameInfo.DUR;
- FrameInfo.PTS=FrameInfo.DTS;
- }
- #endif //MEDIAINFO_DEMUX
-
- FILLING_BEGIN();
- if (!Status[IsAccepted])
- {
- Accept("AES3");
-
- int8u Channels=0;
- for (int8u Pos=0; Pos<8; Pos++)
- {
- if (Channels_valid&(1<<Pos))
- Channels++;
- Element_Offset+=4;
- }
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "PCM");
- Fill(Stream_Audio, 0, Audio_Channel_s_, Channels);
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_SMPTEST0331_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0331.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0331.h
deleted file mode 100644
index e9c70e71b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0331.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about SMPTE ST 331 streams
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_SmpteSt0331H
-#define MediaInfo_File_SmpteSt0331H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_SmpteSt0331
-//***************************************************************************
-
-class File_SmpteSt0331 : public File__Analyze
-{
-public :
- //In
- int32u QuantizationBits;
-
- //Constructor/Destructor
- File_SmpteSt0331();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Temp
- int8u Channels_valid;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0337.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0337.cpp
deleted file mode 100644
index 68bbed40d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0337.cpp
+++ /dev/null
@@ -1,1324 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SMPTEST0337_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_SmpteSt0337.h"
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_DOLBYE_YES)
- #include "MediaInfo/Audio/File_DolbyE.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif // MEDIAINFO_EVENTS
-#if MEDIAINFO_SEEK
- #include "MediaInfo/MediaInfo_Internal.h"
-#endif // MEDIAINFO_SEEK
-#include "MediaInfo/File_Unknown.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Smpte_St0337_data_type[32]= // SMPTE ST 338
-{
- "",
- "AC-3",
- "Time stamp",
- "Pause",
- "MPEG Audio",
- "MPEG Audio",
- "MPEG Audio",
- "AAC",
- "MPEG Audio",
- "MPEG Audio",
- "AAC",
- "AAC",
- "",
- "",
- "",
- "",
- "E-AC-3",
- "",
- "",
- "AAC",
- "",
- "E-AC-3",
- "",
- "",
- "",
- "",
- "Utility",
- "KLV",
- "Dolby E",
- "Captioning",
- "User defined",
- "",
-};
-
-//---------------------------------------------------------------------------
-stream_t Smpte_St0337_data_type_StreamKind[32]= // SMPTE 338M
-{
- Stream_Max,
- Stream_Audio,
- Stream_Max,
- Stream_Max,
- Stream_Audio,
- Stream_Audio,
- Stream_Audio,
- Stream_Max,
- Stream_Audio,
- Stream_Audio,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Max,
- Stream_Menu,
- Stream_Audio,
- Stream_Text,
- Stream_Max,
- Stream_Max,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_SmpteSt0337::File_SmpteSt0337()
-:File__Analyze()
-{
- // Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Aes3;
- #endif // MEDIAINFO_EVENTS
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=256*1024;
- PTS_DTS_Needed=true;
-
- // In
- Container_Bits=0;
- Endianness=0x00;
- Aligned=false;
-
- // Temp
- FrameRate=0;
- Stream_Bits=0;
- data_type=(int8u)-1;
- GuardBand_Before=0;
- GuardBand_After=0;
- NullPadding_Size=0;
-
- // Parser
- Parser=NULL;
-
- #if MEDIAINFO_SEEK
- Duration_Detected=false;
- #endif // MEDIAINFO_SEEK
-}
-
-//---------------------------------------------------------------------------
-File_SmpteSt0337::~File_SmpteSt0337()
-{
- delete Parser; // Parser=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0337::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "AES3");
- Fill(Stream_General, 0, General_OverallBitRate_Mode, "CBR");
-}
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0337::Streams_Fill()
-{
- if (Parser && Parser->Status[IsAccepted])
- {
- Fill(Parser);
- Merge(*Parser);
-
- int64u OverallBitRate=Parser->Retrieve(Stream_General, 0, General_OverallBitRate).To_int64u();
- if (OverallBitRate)
- {
- OverallBitRate*=Element_Size; OverallBitRate/=Element_Size-Stream_Bits*4/8;
- Fill(Stream_General, 0, General_OverallBitRate, Ztring::ToZtring(OverallBitRate)+__T(" / ")+Parser->Retrieve(Stream_General, 0, General_OverallBitRate));
- }
- if (Parser->Count_Get(Stream_Audio))
- FrameRate=Retrieve(Stream_Audio, 0, Audio_FrameRate).To_float64();
- }
- else if (data_type!=(int8u)-1)
- {
- if (Retrieve(Stream_Audio, 0, Audio_Format).empty() && Smpte_St0337_data_type_StreamKind[data_type]!=Stream_Max)
- {
- Stream_Prepare(Smpte_St0337_data_type_StreamKind[data_type]);
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Format), Smpte_St0337_data_type[data_type]);
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Codec), Smpte_St0337_data_type[data_type]);
- }
- }
-
- // Guard band
- if (GuardBand_Before) // With guard band, there is big chances that AES3 bit rate is respected
- {
- Fill(Stream_General, 0, General_OverallBitRate, Container_Bits*2*48000);
- if (!IsSub && File_Size!=(int64u)-1)
- Fill(Stream_General, 0, General_Duration, ((float64)File_Size)*8/(Container_Bits*2*48000)*1000);
- }
-
- if (FrameRate && FrameSizes.size()==1)
- {
- Fill(Stream_General, 0, General_OverallBitRate, FrameSizes.begin()->first*Container_Bits*FrameRate, 0);
- }
-
- for (size_t Pos=0; Pos<Count_Get(StreamKind_Last); Pos++)
- {
- if (Endianness=='L' && Retrieve(StreamKind_Last, Pos, "Format_Settings_Endianness")==__T("Little"))
- Endianness='B';
- switch (Endianness)
- {
- case 'B' :
- Fill(StreamKind_Last, Pos, "Format_Settings", "Big");
- Fill(StreamKind_Last, Pos, "Format_Settings_Endianness", "Big", Unlimited, true, true);
- break;
- case 'L' :
- Fill(StreamKind_Last, Pos, "Format_Settings", "Little");
- Fill(StreamKind_Last, Pos, "Format_Settings_Endianness", "Little", Unlimited, true, true);
- break;
- default : ;
- }
- Fill(StreamKind_Last, Pos, "Format_Settings_Mode", Container_Bits);
- if (Retrieve(StreamKind_Last, Pos, Fill_Parameter(StreamKind_Last, Generic_BitDepth)).empty())
- Fill(StreamKind_Last, Pos, Fill_Parameter(StreamKind_Last, Generic_BitDepth), Stream_Bits);
-
- Fill(StreamKind_Last, Pos, "MuxingMode", "AES3");
- if (Retrieve(StreamKind_Last, Pos, Fill_Parameter(StreamKind_Last, Generic_BitRate_Mode))!=__T("CBR"))
- Fill(StreamKind_Last, Pos, Fill_Parameter(StreamKind_Last, Generic_BitRate_Mode), "CBR");
- if (File_Size!=(int64u)-1 && FrameSizes.size()==1)
- Fill(StreamKind_Last, Pos, Fill_Parameter(StreamKind_Last, Generic_FrameCount), File_Size/FrameSizes.begin()->first);
- if (Retrieve(StreamKind_Last, Pos, Fill_Parameter(StreamKind_Last, Generic_Duration)).empty())
- Fill(StreamKind_Last, Pos, Fill_Parameter(StreamKind_Last, Generic_Duration), Retrieve(Stream_General, 0, General_Duration));
- }
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-#if MEDIAINFO_SEEK
-//---------------------------------------------------------------------------
-void File_SmpteSt0337::Read_Buffer_Unsynched()
-{
- if (Frame_Count_NotParsedIncluded!=(int64u)-1 && FrameRate)
- {
- Frame_Count_NotParsedIncluded=float64_int64s(File_GoTo/FrameRate);
- FrameInfo.DTS=Frame_Count_NotParsedIncluded*1000000000/48000;
- }
-}
-#endif // MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_SmpteSt0337::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- // Init
- if (!Duration_Detected)
- {
- MediaInfo_Internal MI;
- MI.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- size_t MiOpenResult=MI.Open(File_Name);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); // This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); // This is a global value, need to reset it. TODO: local value
- if (!MiOpenResult)
- return 0;
-
- FrameRate=MI.Get(Stream_Audio, 0, __T("FrameRate")).To_float64();
-
- Duration_Detected=true;
- }
-
- // Parsing
- switch (Method)
- {
- case 0 :
- if (FrameRate)
- {
- float64 FrameSize=3072000/FrameRate;
- int64u FrameCount=float64_int64s(Value/FrameSize);
- Value=float64_int64s(FrameCount*FrameSize);
- }
- GoTo(Value);
- Open_Buffer_Unsynch();
- return 1;
- case 1 :
- return Read_Buffer_Seek(0, File_Size*Value/10000, ID);
- case 2 : // Timestamp
- {
- if (FrameRate)
- return (size_t)-1; // Not supported
-
- {
- float64 FrameSize=3072000/FrameRate;
- Unsynch_Frame_Count=float64_int64s(((float64)Value)/1000000000*FrameRate);
- GoTo(float64_int64s(Unsynch_Frame_Count*FrameSize));
- Open_Buffer_Unsynch();
- return 1;
- }
- }
- case 3 : // FrameNumber
- {
- if (FrameRate)
- return (size_t)-1; // Not supported
-
- {
- float64 FrameSize=3072000/FrameRate;
- Unsynch_Frame_Count=Value;
- GoTo(float64_int64s(Unsynch_Frame_Count*FrameSize));
- Open_Buffer_Unsynch();
- return 1;
- }
- }
- default : return (size_t)-1; // Not supported
- }
-}
-#endif // MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_SmpteSt0337::Synchronize()
-{
- // Guard band
- size_t Buffer_Offset_Base=Buffer_Offset;
-
- // Synchronizing
- while (Buffer_Offset+16<=Buffer_Size)
- {
- if (!Status[IsAccepted] && !IsSub && File_Offset_FirstSynched==(int64u)-1 && Buffer_TotalBytes+Buffer_Offset>=Buffer_TotalBytes_FirstSynched_Max)
- {
- Reject();
- return false;
- }
-
- if ((Container_Bits==0 || Container_Bits==16) && (!Aligned || ((Buffer_TotalBytes+Buffer_Offset)%4)==0))
- {
- if (Buffer[Buffer_Offset ]==0xF8
- && Buffer[Buffer_Offset+1]==0x72
- && Buffer[Buffer_Offset+2]==0x4E
- && Buffer[Buffer_Offset+3]==0x1F) // 16-bit, BE
- {
- Container_Bits=16;
- Stream_Bits=16;
- Endianness='B'; // BE
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x72
- && Buffer[Buffer_Offset+1]==0xF8
- && Buffer[Buffer_Offset+2]==0x1F
- && Buffer[Buffer_Offset+3]==0x4E) // 16-bit, LE
- {
- Container_Bits=16;
- Stream_Bits=16;
- Endianness='L'; // LE
- break; // while()
- }
- }
- if ((Container_Bits==0 || Container_Bits==20) && (!Aligned || ((Buffer_TotalBytes+Buffer_Offset)%5)==0))
- {
- if (Buffer[Buffer_Offset ]==0x6F
- && Buffer[Buffer_Offset+1]==0x87
- && Buffer[Buffer_Offset+2]==0x25
- && Buffer[Buffer_Offset+3]==0x4E
- && Buffer[Buffer_Offset+4]==0x1F) // 20-bit, BE
- {
- Container_Bits=20;
- Stream_Bits=20;
- Endianness='B'; // BE
- break; // while()
- }
- }
- if ((Container_Bits==0 || Container_Bits==20) && (!Aligned || ((Buffer_TotalBytes+Buffer_Offset)%5)==0))
- {
- if (Buffer[Buffer_Offset ]==0x72
- && Buffer[Buffer_Offset+1]==0xF8
- && Buffer[Buffer_Offset+2]==0xF6
- && Buffer[Buffer_Offset+3]==0xE1
- && Buffer[Buffer_Offset+4]==0x54) // 20-bit, LE
- {
- Container_Bits=20;
- Stream_Bits=20;
- Endianness='L'; // BE
- break; // while()
- }
- }
- if ((Container_Bits==0 || Container_Bits==24) && (!Aligned || ((Buffer_TotalBytes+Buffer_Offset)%6)==0))
- {
- if (Buffer[Buffer_Offset ]==0x96
- && Buffer[Buffer_Offset+1]==0xF8
- && Buffer[Buffer_Offset+2]==0x72
- && Buffer[Buffer_Offset+3]==0xA5
- && Buffer[Buffer_Offset+4]==0x4E
- && Buffer[Buffer_Offset+5]==0x1F) // 24-bit, BE
- {
- Container_Bits=24;
- Stream_Bits=24;
- Endianness='B'; // BE
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x72
- && Buffer[Buffer_Offset+1]==0xF8
- && Buffer[Buffer_Offset+2]==0x96
- && Buffer[Buffer_Offset+3]==0x1F
- && Buffer[Buffer_Offset+4]==0x4E
- && Buffer[Buffer_Offset+5]==0xA5) // 24-bit, LE
- {
- Container_Bits=24;
- Stream_Bits=24;
- Endianness='L'; // LE
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0xF8
- && Buffer[Buffer_Offset+2]==0x72
- && Buffer[Buffer_Offset+3]==0x00
- && Buffer[Buffer_Offset+4]==0x4E
- && Buffer[Buffer_Offset+5]==0x1F) // 16-bit in 24-bit, BE
- {
- Container_Bits=24;
- Stream_Bits=16;
- Endianness='B'; // BE
- NullPadding_Size=1;
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x72
- && Buffer[Buffer_Offset+2]==0xF8
- && Buffer[Buffer_Offset+3]==0x00
- && Buffer[Buffer_Offset+4]==0x1F
- && Buffer[Buffer_Offset+5]==0x4E) // 16-bit in 24-bit, LE
- {
- Container_Bits=24;
- Stream_Bits=16;
- Endianness='L'; // LE
- NullPadding_Size=1;
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x6F
- && Buffer[Buffer_Offset+1]==0x87
- && Buffer[Buffer_Offset+2]==0x20
- && Buffer[Buffer_Offset+3]==0x54
- && Buffer[Buffer_Offset+4]==0xE1
- && Buffer[Buffer_Offset+5]==0xF0) // 20-bit in 24-bit, BE
- {
- Container_Bits=24;
- Stream_Bits=20;
- Endianness='B'; // BE
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x20
- && Buffer[Buffer_Offset+1]==0x87
- && Buffer[Buffer_Offset+2]==0x6F
- && Buffer[Buffer_Offset+3]==0xF0
- && Buffer[Buffer_Offset+4]==0xE1
- && Buffer[Buffer_Offset+5]==0x54) // 20-bit in 24-bit, LE
- {
- Container_Bits=24;
- Stream_Bits=20;
- Endianness='L'; // LE
- break; // while()
- }
- }
- if ((Container_Bits==0 || Container_Bits==32) && (!Aligned || ((Buffer_TotalBytes+Buffer_Offset)%8)==0))
- {
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0xF8
- && Buffer[Buffer_Offset+3]==0x72
- && Buffer[Buffer_Offset+4]==0x00
- && Buffer[Buffer_Offset+5]==0x00
- && Buffer[Buffer_Offset+6]==0x4E
- && Buffer[Buffer_Offset+7]==0x1F) // 16-bit in 32-bit, BE
- {
- Container_Bits=32;
- Stream_Bits=16;
- Endianness='B'; // BE
- NullPadding_Size=2;
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x72
- && Buffer[Buffer_Offset+3]==0xF8
- && Buffer[Buffer_Offset+4]==0x00
- && Buffer[Buffer_Offset+5]==0x00
- && Buffer[Buffer_Offset+6]==0x1F
- && Buffer[Buffer_Offset+7]==0x4E) // 16-bit in 32-bit, LE
- {
- Container_Bits=32;
- Stream_Bits=16;
- Endianness='L'; // LE
- NullPadding_Size=2;
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x6F
- && Buffer[Buffer_Offset+2]==0x87
- && Buffer[Buffer_Offset+3]==0x20
- && Buffer[Buffer_Offset+4]==0x00
- && Buffer[Buffer_Offset+5]==0x54
- && Buffer[Buffer_Offset+6]==0xE1
- && Buffer[Buffer_Offset+7]==0xF0) // 20-bit in 32-bit, BE
- {
- Container_Bits=32;
- Stream_Bits=20;
- Endianness='B'; // BE
- NullPadding_Size=1;
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x20
- && Buffer[Buffer_Offset+2]==0x87
- && Buffer[Buffer_Offset+3]==0x6F
- && Buffer[Buffer_Offset+4]==0x00
- && Buffer[Buffer_Offset+5]==0xF0
- && Buffer[Buffer_Offset+6]==0xE1
- && Buffer[Buffer_Offset+7]==0x54) // 20-bit in 32-bit, LE
- {
- Container_Bits=32;
- Stream_Bits=20;
- Endianness='L'; // LE
- NullPadding_Size=1;
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x96
- && Buffer[Buffer_Offset+2]==0xF8
- && Buffer[Buffer_Offset+3]==0x72
- && Buffer[Buffer_Offset+4]==0x00
- && Buffer[Buffer_Offset+5]==0xA5
- && Buffer[Buffer_Offset+6]==0x4E
- && Buffer[Buffer_Offset+7]==0x1F) // 24-bit in 32-bit, BE
- {
- Container_Bits=32;
- Stream_Bits=24;
- Endianness='B'; // BE
- NullPadding_Size=1;
- break; // while()
- }
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x72
- && Buffer[Buffer_Offset+2]==0xF8
- && Buffer[Buffer_Offset+3]==0x96
- && Buffer[Buffer_Offset+4]==0x00
- && Buffer[Buffer_Offset+5]==0x1F
- && Buffer[Buffer_Offset+6]==0x4E
- && Buffer[Buffer_Offset+7]==0xA5) // 24-bit in 32-bit, LE
- {
- Container_Bits=32;
- Stream_Bits=24;
- Endianness='L'; // LE
- NullPadding_Size=1;
- break; // while()
- }
- }
-
- if (Container_Bits>=4 && Aligned)
- Buffer_Offset+=Container_Bits/4;
- else
- Buffer_Offset++;
- }
-
- // Guard band
- GuardBand_Before+=Buffer_Offset-Buffer_Offset_Base;
-
- // Parsing last bytes if needed
- if (Buffer_Offset+16>Buffer_Size)
- {
- return false;
- }
-
- if (!Status[IsAccepted])
- Accept("AES3");
-
- // Synched
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_SmpteSt0337::Synched_Test()
-{
- // Skip NULL padding
- size_t Buffer_Offset_Temp=Buffer_Offset;
- if (Aligned)
- {
- if (Container_Bits==16)
- {
- while ((Buffer_TotalBytes+Buffer_Offset_Temp)%4) // Padding in part of the AES3 block
- {
- if (Buffer_Offset_Temp+1>Buffer_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
- if (Buffer[Buffer_Offset_Temp])
- {
- Trusted_IsNot("Bad sync");
- return true;
- }
- Buffer_Offset_Temp++;
- }
- while(Buffer_Offset_Temp+4<=Buffer_Size && CC4(Buffer+Buffer_Offset_Temp)==0x00000000)
- Buffer_Offset_Temp+=4;
- if (Buffer_Offset_Temp+4>Buffer_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
- }
- if (Container_Bits==20)
- {
- while ((Buffer_TotalBytes+Buffer_Offset_Temp)%5) // Padding in part of the AES3 block
- {
- if (Buffer_Offset_Temp+1>Buffer_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
- if (Buffer[Buffer_Offset_Temp])
- {
- Trusted_IsNot("Bad sync");
- return true;
- }
- Buffer_Offset_Temp++;
- }
- while(Buffer_Offset_Temp+5<=Buffer_Size && CC5(Buffer+Buffer_Offset_Temp)==0x0000000000LL)
- Buffer_Offset_Temp+=5;
- if (Buffer_Offset_Temp+5>Buffer_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
- }
- if (Container_Bits==24)
- {
- while ((Buffer_TotalBytes+Buffer_Offset_Temp)%6) // Padding in part of the AES3 block
- {
- if (Buffer_Offset_Temp+1>Buffer_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
- if (Buffer[Buffer_Offset_Temp])
- {
- Trusted_IsNot("Bad sync");
- return true;
- }
- Buffer_Offset_Temp++;
- }
- while(Buffer_Offset_Temp+6<=Buffer_Size && CC6(Buffer+Buffer_Offset_Temp)==0x000000000000LL)
- Buffer_Offset_Temp+=6;
- if (Buffer_Offset_Temp+6>Buffer_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
- }
- else if (Container_Bits==32)
- {
- while ((Buffer_TotalBytes+Buffer_Offset_Temp)%8) // Padding in part of the AES3 block
- {
- if (Buffer_Offset_Temp+1>Buffer_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
- if (Buffer[Buffer_Offset_Temp])
- {
- Trusted_IsNot("Bad sync");
- return true;
- }
- Buffer_Offset_Temp++;
- }
- while(Buffer_Offset_Temp+8<=Buffer_Size && CC8(Buffer+Buffer_Offset_Temp)==0x0000000000000000LL)
- Buffer_Offset_Temp+=8;
- if (Buffer_Offset_Temp+8>Buffer_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
- }
- }
- else
- {
- while(Buffer_Offset_Temp+NullPadding_Size<Buffer_Size && !Buffer[Buffer_Offset_Temp+NullPadding_Size])
- Buffer_Offset_Temp++;
- if (Buffer_Offset_Temp+NullPadding_Size>=Buffer_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
- }
-
- #if MEDIAINFO_TRACE
- if (Buffer_Offset_Temp-Buffer_Offset)
- {
- Element_Size=Buffer_Offset_Temp-Buffer_Offset;
- Skip_XX(Buffer_Offset_Temp-Buffer_Offset, "Guard band");
-
- GuardBand_Before+=Buffer_Offset_Temp-Buffer_Offset;
- }
- #endif // MEDIAINFO_TRACE
- Buffer_Offset=Buffer_Offset_Temp;
-
- // Must have enough buffer for having header
- if (Buffer_Offset+16>Buffer_Size)
- return false;
-
- // Quick test of synchro
- switch (Endianness)
- {
- case 'B' :
- switch (Container_Bits)
- {
- case 16 : if (CC4(Buffer+Buffer_Offset)!=0xF8724E1F) {Synched=false; return true;} break;
- case 20 : if (CC5(Buffer+Buffer_Offset)!=0x6F87254E1FLL) {Synched=false; return true;} break;
- case 24 :
- switch (Stream_Bits)
- {
- case 16 : if (CC6(Buffer+Buffer_Offset)!=0xF872004E1F00LL) {Synched=false; return true;} break;
- case 20 : if (CC6(Buffer+Buffer_Offset)!=0x6F872054E1F0LL) {Synched=false; return true;} break;
- case 24 : if (CC6(Buffer+Buffer_Offset)!=0x96F872A54E1FLL) {Synched=false; return true;} break;
- default : ;
- }
- break;
- case 32 :
- switch (Stream_Bits)
- {
- case 16 : if (CC8(Buffer+Buffer_Offset)!=0x0000F87200004E1FLL) {Synched=false; return true;} break;
- case 20 : if (CC8(Buffer+Buffer_Offset)!=0x006F87200054E1F0LL) {Synched=false; return true;} break;
- case 24 : if (CC8(Buffer+Buffer_Offset)!=0x0096F87200A5F41FLL) {Synched=false; return true;} break;
- default : ;
- }
- break;
- default : ;
- }
- break;
- case 'L' :
- switch (Container_Bits)
- {
- case 16 : if (CC4(Buffer+Buffer_Offset)!=0x72F81F4E) {Synched=false; return true;} break;
- case 20 : if (CC5(Buffer+Buffer_Offset)!=0x72F8F6E154LL) {Synched=false; return true;} break;
- case 24 :
- switch (Stream_Bits)
- {
- case 16 : if (CC6(Buffer+Buffer_Offset)!=0x0072F8001F4ELL) {Synched=false; return true;} break;
- case 20 : if (CC6(Buffer+Buffer_Offset)!=0x20876FF0E154LL) {Synched=false; return true;} break;
- case 24 : if (CC6(Buffer+Buffer_Offset)!=0x72F8961F4EA5LL) {Synched=false; return true;} break;
- default : ;
- }
- break;
- case 32 :
- switch (Stream_Bits)
- {
- case 16 : if (CC8(Buffer+Buffer_Offset)!=0x000072F800001F4ELL) {Synched=false; return true;} break;
- case 20 : if (CC8(Buffer+Buffer_Offset)!=0x0020876F00F0E154LL) {Synched=false; return true;} break;
- case 24 : if (CC8(Buffer+Buffer_Offset)!=0x0072F896001F4EA5LL) {Synched=false; return true;} break;
- default : ;
- }
- break;
- default : ;
- }
- break;
- default : ; // Should never happen
- }
-
- // We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0337::Synched_Init()
-{
- if (Frame_Count_NotParsedIncluded==(int64u)-1)
- Frame_Count_NotParsedIncluded=0;
- if (FrameInfo.DTS==(int64u)-1)
- FrameInfo.DTS=0;
-}
-
-//***************************************************************************
-// Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0337::Header_Parse()
-{
- // Parsing
- int32u Size=0;
- switch (Endianness)
- {
- case 'B' :
- switch (Container_Bits)
- {
- case 16 : Size=BigEndian2int16u(Buffer+Buffer_Offset+6) ; break;
- case 20 : Size=BigEndian2int24u(Buffer+Buffer_Offset+7)&0x0FFFFF; break;
- case 24 :
- switch (Stream_Bits)
- {
- case 16 : Size=BigEndian2int16u(Buffer+Buffer_Offset+9) ; break;
- case 20 : Size=BigEndian2int24u(Buffer+Buffer_Offset+9)>>4; break;
- case 24 : Size=BigEndian2int24u(Buffer+Buffer_Offset+9) ; break;
- default : ;
- }
- break;
- case 32 :
- switch (Stream_Bits)
- {
- case 16 : Size=BigEndian2int16u(Buffer+Buffer_Offset+0xE) ; break;
- case 20 : Size=BigEndian2int24u(Buffer+Buffer_Offset+0xD)>>4; break;
- case 24 : Size=BigEndian2int24u(Buffer+Buffer_Offset+0xD) ; break;
- default : ;
- }
- break;
- default : ;
- }
- break;
- case 'L' :
- switch (Container_Bits)
- {
- case 16 : Size=LittleEndian2int16u(Buffer+Buffer_Offset+6) ; break;
- case 20 : Size=LittleEndian2int24u(Buffer+Buffer_Offset+7)>>4; break;
- case 24 :
- switch (Stream_Bits)
- {
- case 16 : Size=LittleEndian2int16u(Buffer+Buffer_Offset+0xA) ; break;
- case 20 : Size=LittleEndian2int24u(Buffer+Buffer_Offset+0x9)>>4; break;
- case 24 : Size=LittleEndian2int24u(Buffer+Buffer_Offset+0x9) ; break;
- default : ;
- }
- break;
- case 32 :
- switch (Stream_Bits)
- {
- case 16 : Size=LittleEndian2int16u(Buffer+Buffer_Offset+0xE) ; break;
- case 20 : Size=LittleEndian2int24u(Buffer+Buffer_Offset+0xD)>>4; break;
- case 24 : Size=LittleEndian2int24u(Buffer+Buffer_Offset+0xD) ; break;
- default : ;
- }
- break;
- default : ;
- }
- break;
- default : ; // Should never happen
- }
-
- // Adaptation
- if (Container_Bits!=Stream_Bits)
- {
- Size*=Container_Bits; Size/=Stream_Bits;
- GuardBand_Before*=Container_Bits; GuardBand_Before/=Stream_Bits;
- }
-
- // Coherency test
- if (!IsSub && !Status[IsAccepted])
- {
- size_t Offset=Buffer_Offset+(size_t)(Container_Bits*4/8+Size/8);
- while (Offset<Buffer_Size && Buffer[Offset]==0x00)
- Offset++;
- if (Offset+Container_Bits/4>Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
- Offset/=Container_Bits/4;
- Offset*=Container_Bits/4;
- bool IsOK=true;
- for (int8u Pos=0; Pos<Container_Bits/4; Pos++)
- if (Buffer[Buffer_Offset+Pos]!=Buffer[Offset+Pos])
- {
- IsOK=false;
- break;
- }
- if (!IsOK)
- {
- Trusted_IsNot("Bad sync");
- Buffer_Offset++;
- return;
- }
- }
-
- // Filling
- Header_Fill_Size(Container_Bits*4/8+Size/8);
- Header_Fill_Code(0, "AES3");
-
- //Guard band
- if (IsSub && FrameInfo.DTS!=(int64u)-1)
- GuardBand_After+=Element_Size-(Container_Bits*4/8+Size/8);
-}
-
-//---------------------------------------------------------------------------
-void File_SmpteSt0337::Data_Parse()
-{
- #if MEDIAINFO_DEMUX
- FrameInfo.PTS=FrameInfo.DTS;
- Demux_random_access=true;
- Element_Code=(int64u)-1;
- #endif //MEDIAINFO_DEMUX
-
- // Adapting
- const int8u* Save_Buffer=NULL;
- size_t Save_Buffer_Offset=0;
- size_t Save_Buffer_Size=0;
- int64u Save_Element_Size=0;
-
- if (Endianness=='L'|| Container_Bits!=Stream_Bits)
- {
- int8u* Info=new int8u[(size_t)Element_Size];
- int8u* Info_Temp=Info;
-
- if (Endianness=='L' && Container_Bits==16 && Stream_Bits==16)
- {
- // Source: 16LE / L1L0 L3L2 R1R0 R3R2
- // Dest : 16BE / L3L2 L1L0 R3R2 R1R0
- while (Element_Offset+4<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)= Buffer[Buffer_Pos+1] ;
- *(Info_Temp++)= Buffer[Buffer_Pos ] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+3] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+2] ;
-
- Element_Offset+=4;
- }
- if (Element_Offset+2<=Element_Size) // Only in half of the AES3 stream
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)= Buffer[Buffer_Pos+1] ;
- *(Info_Temp++)= Buffer[Buffer_Pos ] ;
-
- Element_Offset+=2;
- }
- }
-
- if (Endianness=='L' && Container_Bits==20 && Stream_Bits==20)
- {
- // Source: 20LE / L1L0 L3L2 R0L4 R2R1 R4R3
- // Dest : 20BE / L4L3 L2L1 L0R4 R3R2 R1R0
- while (Element_Offset+5<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)=(Buffer[Buffer_Pos+2]<<4 ) | (Buffer[Buffer_Pos+1]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+1]<<4 ) | (Buffer[Buffer_Pos+0]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+0]<<4 ) | (Buffer[Buffer_Pos+4]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+4]<<4 ) | (Buffer[Buffer_Pos+3]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+3]<<4 ) | (Buffer[Buffer_Pos+2]>>4 );
-
- Element_Offset+=5;
- }
- }
-
- if (Endianness=='L' && Container_Bits==24 && Stream_Bits==16)
- {
- // Source: XXXX L1L0 L3L2 XXXX R1R0 R3R2
- // Dest : 16BE / L3L2 L1L0 R3R2 R1R0
- while (Element_Offset+6<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)= Buffer[Buffer_Pos+2] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+1] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+5] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+4] ;
-
- Element_Offset+=6;
- }
- }
-
- if (Endianness=='L' && Container_Bits==24 && Stream_Bits==20)
- {
- // Source: L0XX L2L1 L4L3 R0XX R2R1 R4R3
- // Dest : 20BE / L4L3 L2L1 L0R4 R3R2 R1R0
- while (Element_Offset+6<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)= Buffer[Buffer_Pos+2] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+1] ;
- *(Info_Temp++)=(Buffer[Buffer_Pos ]&0xF0) | (Buffer[Buffer_Pos+5]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+5]<<4 ) | (Buffer[Buffer_Pos+4]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+4]<<4 ) | (Buffer[Buffer_Pos+3]>>4 );
-
- Element_Offset+=6;
- }
- }
-
- if (Endianness=='L' && Container_Bits==24 && Stream_Bits==24)
- {
- // Source: 24LE / L1L0 L3L2 L5L3 R1R0 R3R2 R5R4
- // Dest : 24BE / L5L3 L3L2 L1L0 R5R4 R3R2 R1R0
- while (Element_Offset+6<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)= Buffer[Buffer_Pos+2] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+1] ;
- *(Info_Temp++)= Buffer[Buffer_Pos ] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+5] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+4] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+3] ;
-
- Element_Offset+=6;
- }
- }
-
- if (Endianness=='L' && Container_Bits==32 && Stream_Bits==16)
- {
- // Source: XXXX XXXX L1L0 L3L2 XXXX XXXX R1R0 R3R2
- // Dest : 16BE / L3L2 L1L0 R3R2 R1R0
- while (Element_Offset+8<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)= Buffer[Buffer_Pos+3] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+2] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+7] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+6] ;
-
- Element_Offset+=8;
- }
- }
- if (Endianness=='L' && Container_Bits==32 && Stream_Bits==20)
- {
- // Source: XXXX L0XX L2L1 L4L3 XXXX R0XX R2R1 R4R3
- // Dest : 20BE / L4L3 L2L1 L0R4 R3R2 R1R0
- while (Element_Offset+8<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)= Buffer[Buffer_Pos+3] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+2] ;
- *(Info_Temp++)=(Buffer[Buffer_Pos+1]&0xF0) | (Buffer[Buffer_Pos+7]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+7]<<4 ) | (Buffer[Buffer_Pos+6]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+6]<<4 ) | (Buffer[Buffer_Pos+5]>>4 );
-
- Element_Offset+=8;
- }
- }
-
- if (Endianness=='L' && Container_Bits==32 && Stream_Bits==24)
- {
- // Source: XXXX L1L0 L3L2 L5L3 XXXX R1R0 R3R2 R5R4
- // Dest : 24BE / L5L3 L3L2 L1L0 R5R4 R3R2 R1R0
- while (Element_Offset+8<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)= Buffer[Buffer_Pos+3] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+2] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+1] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+7] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+6] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+5] ;
-
- Element_Offset+=8;
- }
- }
-
- if (Endianness=='B' && Container_Bits==24 && Stream_Bits==20)
- {
- // Source: L4L3 L2L1 L0XX R4R3 R2R1 R0XX
- // Dest : 20BE / L4L3 L2L1 L0R4 R3R2 R1R0
- while (Element_Offset+6<=Element_Size)
- {
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
-
- *(Info_Temp++)= Buffer[Buffer_Pos ] ;
- *(Info_Temp++)= Buffer[Buffer_Pos+1] ;
- *(Info_Temp++)=(Buffer[Buffer_Pos+2]&0xF0) | (Buffer[Buffer_Pos+3]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+3]<<4 ) | (Buffer[Buffer_Pos+4]>>4 );
- *(Info_Temp++)=(Buffer[Buffer_Pos+4]<<4 ) | (Buffer[Buffer_Pos+5]>>4 );
-
- Element_Offset+=6;
- }
- }
-
- Save_Buffer=Buffer;
- Save_Buffer_Offset=Buffer_Offset;
- Save_Buffer_Size=Buffer_Size;
- Save_Element_Size=Element_Size;
- File_Offset+=Buffer_Offset;
- Buffer=Info;
- Buffer_Offset=0;
- Buffer_Size=Info_Temp-Info;
- Element_Offset=0;
- Element_Size=Buffer_Size;
- }
-
- // Parsing
- int32u length_code;
- Element_Begin1("Header");
- BS_Begin();
- Skip_S3(Stream_Bits, "Pa");
- Skip_S3(Stream_Bits, "Pb");
- Element_Begin1("Pc");
- Skip_S1( 3, "data_stream_number");
- Skip_S1( 5, "data_type_dependent");
- Skip_SB( "error_flag");
- Info_S1( 2, data_mode, "data_mode"); Param_Info2(16+4*data_mode, " bits");
- Get_S1 ( 5, data_type, "data_type"); Param_Info1(Smpte_St0337_data_type[data_type]);
- if (Stream_Bits>16)
- Skip_S1( 4, "reserved");
- if (Stream_Bits>20)
- Skip_S1( 4, "reserved");
- Element_End0();
- Get_S3 (Stream_Bits, length_code, "length_code"); Param_Info2(length_code/8, " bytes");
- BS_End();
- Element_End0();
-
- if (Parser==NULL)
- {
- switch(data_type)
- {
- // SMPTE ST338
- case 1 : // AC-3
- case 16 : // E-AC-3 (professional)
- case 21 : // E-AC-3 (consumer)
- Parser=new File_Ac3();
- ((File_Ac3*)Parser)->Frame_Count_Valid=2;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- break;
- case 4 : // MPEG-1 Layer 1
- case 5 : // MPEG-1 Layer 2/3, MPEG-2 Layer 1/2/3 without extension
- case 6 : // MPEG-2 Layer 1/2/3 with extension
- case 8 : // MPEG-2 Layer 1 low frequency
- case 9 : // MPEG-2 Layer 2/3 low frequency
- Parser=new File_Mpega();
- break;
- case 7 : // MPEG-2 AAC in ADTS
- case 19 : // MPEG-2 AAC in ADTS low frequency
- #if defined(MEDIAINFO_AAC_YES)
- Parser=new File_Aac();
- ((File_Aac*)Parser)->Mode=File_Aac::Mode_ADTS;
- #else
- {
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "AAC");
- Parser->Fill(Stream_Audio, 0, Audio_MuxingMode, "ADTS");
- }
- #endif //defined(MEDIAINFO_AAC_YES)
- break;
- case 10 : // MPEG-4 AAC in ADTS or LATM
- case 11 : // MPEG-4 AAC in ADTS or LATM
- #if defined(MEDIAINFO_AAC_YES)
- Parser=new File_Aac();
- #else
- {
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "AAC");
- }
- #endif //defined(MEDIAINFO_AAC_YES)
- break;
- case 28 : // Dolby E
- Parser=new File_DolbyE();
- break;
- default : ;
- }
-
- if (Parser)
- {
- Open_Buffer_Init(Parser);
- }
- }
-
- #if MEDIAINFO_DEMUX
- if (Save_Buffer)
- {
- std::swap(Buffer, Save_Buffer);
- std::swap(Buffer_Offset, Save_Buffer_Offset);
- std::swap(Buffer_Size, Save_Buffer_Size);
- std::swap(Element_Size, Save_Element_Size);
- File_Offset-=Buffer_Offset;
- }
-
- if (data_type==28) //If Dolby E, we must demux the SMPTE ST 337 header too (TODO: add an option for forcing SMPTE ST 337 header)
- {
- int64u Demux_Element_Offset=Element_Offset;
- Element_Offset=0;
-
- if (Container_Bits==20)
- {
- //We must pad to 24 bits
- int8u* Info2=new int8u[(size_t)Element_Size*6/5];
- size_t Info2_Offset=0;
- const int8u* Demux_Buffer=Buffer+Buffer_Offset;
- size_t Demux_Buffer_Size=(size_t)Element_Size;
- size_t Demux_Buffer_Pos=0;
-
- // Source: 20LE L1L0 L3L2 R0L4 R2R1 R4R3
- // Dest : L0XX L2L1 L4L3 R0XX R2R1 R4R3
- while (Demux_Buffer_Pos+5<=Demux_Buffer_Size)
- {
- Info2[Info2_Offset+0]= Demux_Buffer[Demux_Buffer_Pos+0]<<4 ;
- Info2[Info2_Offset+1]=(Demux_Buffer[Demux_Buffer_Pos+1]<<4 ) | (Demux_Buffer[Demux_Buffer_Pos+0]>>4 );
- Info2[Info2_Offset+2]=(Demux_Buffer[Demux_Buffer_Pos+2]<<4 ) | (Demux_Buffer[Demux_Buffer_Pos+1]>>4 );
- Info2[Info2_Offset+3]= Demux_Buffer[Demux_Buffer_Pos+2]&0xF0 ;
- Info2[Info2_Offset+4]= Demux_Buffer[Demux_Buffer_Pos+3] ;
- Info2[Info2_Offset+5]= Demux_Buffer[Demux_Buffer_Pos+4] ;
-
- Info2_Offset+=6;
- Demux_Buffer_Pos+=5;
- }
-
- Demux(Info2, Info2_Offset, ContentType_MainStream);
-
- delete[] Info2;
- }
- else
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
-
- Element_Offset=Demux_Element_Offset;
- }
- else
- Demux(Buffer+Buffer_Offset+Container_Bits/2, (size_t)(Element_Size-Container_Bits/2), ContentType_MainStream);
-
- if (Save_Buffer)
- {
- File_Offset+=Buffer_Offset;
- std::swap(Buffer, Save_Buffer);
- std::swap(Buffer_Offset, Save_Buffer_Offset);
- std::swap(Buffer_Size, Save_Buffer_Size);
- std::swap(Element_Size, Save_Element_Size);
- }
- #endif //MEDIAINFO_DEMUX
-
- if (Parser && !Parser->Status[IsFinished])
- {
- switch(data_type)
- {
- case 28 :
- ((File_DolbyE*)Parser)->GuardBand_Before+=GuardBand_Before;
- ((File_DolbyE*)Parser)->GuardBand_After+=GuardBand_After;
- break;
- default : ;
- }
-
- Parser->FrameInfo=FrameInfo;
- Open_Buffer_Continue(Parser, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- Element_Offset=Element_Size;
- #if MEDIAINFO_DEMUX
- FrameInfo.DUR=Parser->FrameInfo.DUR;
- if (FrameInfo.DUR!=(int64u)-1)
- FrameInfo.DTS+=FrameInfo.DUR;
- else
- FrameInfo.DTS=(int64u)-1;
- FrameInfo.PTS=FrameInfo.DTS;
- #endif // MEDIAINFO_DEMUX
- }
- else
- {
- Skip_XX(Element_Size-Element_Offset, "Data");
- }
-
- FILLING_BEGIN();
- FrameSizes[IsSub?Buffer_Size:((GuardBand_Before+Element_Size)*Container_Bits/Stream_Bits)]++;
-
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
-
- if (Parser==NULL || (Frame_Count>=2 && Parser->Status[IsFilled]))
- Fill("AES3");
- if (Parser==NULL || (Frame_Count>=2 && Parser->Status[IsFinished]))
- Finish("AES3");
- FILLING_END();
-
- if (Save_Buffer)
- {
- delete[] Buffer;
- Buffer=Save_Buffer;
- Buffer_Offset=Save_Buffer_Offset;
- Buffer_Size=Save_Buffer_Size;
- File_Offset-=Buffer_Offset;
- }
-
- // Guard band
- GuardBand_Before=0;
- GuardBand_After=0;
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} // NameSpace
-
-#endif // MEDIAINFO_SMPTEST0337_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0337.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0337.h
deleted file mode 100644
index cd98039d3..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_SmpteSt0337.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Non-PCM Audio and Data in an AES3
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_SmpteSt0337H
-#define MediaInfo_File_SmpteSt0337H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_SmpteSt0337
-//***************************************************************************
-
-class File_SmpteSt0337 : public File__Analyze
-{
-public :
- // In
- int8u Container_Bits;
- int8u Endianness;
- bool Aligned;
-
- // Constructor/Destructor
- File_SmpteSt0337();
- ~File_SmpteSt0337();
-
-private :
- // Streams management
- void Streams_Accept();
- void Streams_Fill();
-
- // Buffer - Global
- #if MEDIAINFO_SEEK
- void Read_Buffer_Unsynched();
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif // MEDIAINFO_SEEK
-
- // Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Synched_Init();
-
- // Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- // Elements
- void Raw();
- void Frame();
- void Frame_WithPadding();
- void Frame_FromMpegPs();
-
- // Temp
- float64 FrameRate;
- int8u Stream_Bits;
- int8u data_type;
- std::map<int64u, int64u> FrameSizes;
- int64u GuardBand_Before;
- int64u GuardBand_After;
- size_t NullPadding_Size;
-
- // Parser
- File__Analyze* Parser;
- void Parser_Parse(const int8u* Parser_Buffer, size_t Parser_Buffer_Size);
-
- #if MEDIAINFO_SEEK
- bool Duration_Detected;
- #endif // MEDIAINFO_SEEK
-};
-
-} // NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Speex.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Speex.cpp
deleted file mode 100644
index f611d6455..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Speex.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Note : the buffer must be given in ONE call
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SPEEX_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Speex.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Speex::File_Speex()
-:File__Analyze()
-{
- //Internal
- Identification_Done=false;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Speex::Header_Parse()
-{
- //Filling
- Header_Fill_Code(0, "Speex");
- Header_Fill_Size(Element_Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Speex::Data_Parse()
-{
- //Parsing
- if (Identification_Done)
- Comment();
- else
- Identification();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Speex::Identification()
-{
- Element_Name("Identification");
-
- //Parsing
- Ztring speex_version;
- int32u Speex_version_id, header_size, rate, nb_channels, bitrate, vbr;
- Skip_Local(8, "speex_string");
- Get_Local(20, speex_version, "speex_version");
- Get_L4 (Speex_version_id, "Speex_version_id");
- if (Speex_version_id==1)
- {
- Get_L4 (header_size, "header_size");
- Get_L4 (rate, "rate");
- Skip_L4( "mode");
- Skip_L4( "mode_bitstream_version");
- Get_L4 (nb_channels, "nb_channels");
- Get_L4 (bitrate, "bitrate");
- Skip_L4( "frame_size");
- Get_L4 (vbr, "vbr");
- Skip_L4( "frames_per_packet");
- Skip_L4( "extra_headers");
- Skip_L4( "reserved1");
- Skip_L4( "reserved2");
- if (header_size<Element_Size)
- Skip_XX(Element_Size-header_size, "Unknown");
-
- //Filling
- FILLING_BEGIN();
- Accept("Speex");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "Speex");
- Fill(Stream_Audio, 0, Audio_Codec, "Speex");
- if (Speex_version_id==1)
- {
- if (!speex_version.empty())
- Fill(Stream_Audio, 0, Audio_Encoded_Library, speex_version);
- Fill(Stream_Audio, 0, Audio_SamplingRate, rate);
- Fill(Stream_Audio, 0, Audio_Channel_s_, nb_channels);
- if (bitrate!=(int32u)-1)
- Fill(Stream_Audio, 0, Audio_BitRate, bitrate);
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, vbr?"VBR":"CBR");
- }
- FILLING_END();
- }
-
- //Filling
- Identification_Done=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Speex::Comment()
-{
- Element_Name("Comment?");
-
- while (Element_Offset<Element_Size)
- {
- Ztring value;
- int32u size;
- Get_L4(size, "size");
- if (size)
- Get_Local(size, value, "value");
-
- //Filling
- if (!value.empty())
- Fill(Stream_Audio, 0, "Comment", value);
- }
-
- Finish("Speex");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_SPEEX_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Speex.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Speex.h
deleted file mode 100644
index 9f38f3b92..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Speex.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Speex files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_SpeexH
-#define MediaInfo_File_SpeexH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Speex
-//***************************************************************************
-
-class File_Speex : public File__Analyze
-{
-public :
- File_Speex();
-
-private :
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Identification();
- void Comment();
-
- //Temp
- bool Identification_Done;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tak.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tak.cpp
deleted file mode 100644
index 8a0492a8e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tak.cpp
+++ /dev/null
@@ -1,303 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Tak files
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-// Specifications : http://linuxstb.cream.org/tak_format.html
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_TAK_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Tak.h"
-#if defined(MEDIAINFO_RIFF_YES)
- #include "MediaInfo/Multiple/File_Riff.h"
-#endif
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-namespace Elements
-{
- const int16u ENDOFMETADATA =0x00;
- const int16u STREAMINFO =0x01;
- const int16u SEEKTABLE =0x02;
- const int16u WAVEMETADATA =0x03;
- const int16u ENCODERINFO =0x04;
- const int16u PADDING =0x05;
-}
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-int8u Tak_samplesize[]=
-{
- 8,
- 16,
- 24,
- 0,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Tak::File_Tak()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Tak::FileHeader_Begin()
-{
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- //Synchro
- if (Buffer_Offset+4>Buffer_Size)
- return false;
- if (CC4(Buffer+Buffer_Offset)!=0x7442614B) //"tBaK"
- {
- File__Tags_Helper::Reject("TAK");
- return false;
- }
-
- return true;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tak::FileHeader_Parse()
-{
- Skip_C4( "Signature");
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tak::Header_Parse()
-{
- //Parsing
- int32u block_length;
- int8u block_type;
- Get_L1 (block_type, "Block Type");
- Get_L3 (block_length, "Block Length");
-
- //Filling
- Header_Fill_Code(block_type, Ztring().From_CC1(block_type));
- Header_Fill_Size(Element_Offset+block_length);
-}
-
-//---------------------------------------------------------------------------
-void File_Tak::Data_Parse()
-{
- #define CASE_INFO(_NAME) \
- case Elements::_NAME : Element_Info1(#_NAME); _NAME(); break;
-
- //Parsing
- switch (Element_Code)
- {
- CASE_INFO(ENDOFMETADATA);
- CASE_INFO(STREAMINFO);
- CASE_INFO(SEEKTABLE);
- CASE_INFO(WAVEMETADATA);
- CASE_INFO(ENCODERINFO);
- CASE_INFO(PADDING);
- default : Skip_XX(Element_Size, "Data");
- }
-
- Element_Offset=Element_Size;
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tak::ENDOFMETADATA()
-{
- //Filling
- Fill(Stream_General, 0, General_StreamSize, 0); //File_Offset+Buffer_Offset+Element_Size);
- Fill(Stream_Audio, 0, Audio_StreamSize, File_Size-(File_Offset+Buffer_Offset+Element_Size));
- File__Tags_Helper::Finish("TAK");
-}
-
-//---------------------------------------------------------------------------
-void File_Tak::STREAMINFO()
-{
- //Parsing
- int32u num_samples_hi, samplerate;
- int8u num_samples_lo, framesizecode, samplesize;
- bool channels;
-
- Skip_L1 ( "unknown");
- BS_Begin();
- Get_S1 ( 2, num_samples_lo, "num_samples (lo)");
- Get_S1 ( 3, framesizecode, "framesizecode");
- Skip_S1( 2, "unknown");
- BS_End();
- Get_L4 (num_samples_hi, "num_samples (hi)"); Param_Info2((((int64u)num_samples_hi)<<2 | num_samples_lo), " samples");
- Get_L3 (samplerate, "samplerate"); Param_Info2((samplerate/16)+6000, " Hz");
- BS_Begin();
- Skip_S1( 4, "unknown");
- Get_SB ( channels, "channels"); Param_Info1(channels?"Stereo":"Mono");
- Get_S1 ( 2, samplesize, "samplesize"); Param_Info1(Tak_samplesize[samplesize]);
- Skip_SB( "unknown");
- BS_End();
- Skip_L3( "crc");
-
- FILLING_BEGIN();
- //Coherency
- if (samplerate==0)
- return;
-
- //Computing
- int64u Samples=((int64u)num_samples_hi)<<2 | num_samples_lo;
- int32u SamplingRate=(samplerate/16)+6000;
-
- //Filling
- File__Tags_Helper::Accept("TAK");
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "TAK");
- Fill(Stream_Audio, 0, Audio_Codec, "TAK");
- Fill(Stream_Audio, 0, Audio_SamplingRate, SamplingRate);
- Fill(Stream_Audio, 0, Audio_Channel_s_, channels?2:1);
- if (Tak_samplesize[samplesize])
- Fill(Stream_Audio, 0, Audio_BitDepth, Tak_samplesize[samplesize]);
- Fill(Stream_Audio, 0, Audio_Duration, Samples*1000/SamplingRate);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Tak::SEEKTABLE()
-{
- //Parsing
- int16u num_seekpoints;
- Get_L2 (num_seekpoints, "num_seekpoints");
- Skip_L1 ( "unknown");
- Skip_L1 ( "seek interval");
- Element_Begin1("seekpoints");
- for (int16u Pos=0; Pos<num_seekpoints; Pos++)
- Skip_L5 ( "seekpoint");
- Element_End0();
- Skip_L3( "crc");
-}
-
-//---------------------------------------------------------------------------
-void File_Tak::WAVEMETADATA()
-{
- //Parsing
- int32u HeaderLength, FooterLength;
- Get_L3 (HeaderLength, "HeaderLength");
- Get_L3 (FooterLength, "FooterLength");
- #if defined(MEDIAINFO_RIFF_YES)
- //Creating the parser
- File_Riff MI;
- Open_Buffer_Init(&MI);
-
- //Parsing
- Open_Buffer_Continue(&MI, HeaderLength);
- Element_Offset+=HeaderLength;
-
- //Filling
- //Finish(&MI);
- //Merge(MI, StreamKind_Last, 0, StreamPos_Last);
-
- //The RIFF header is for PCM
- //Clear(Stream_Audio, StreamPos_Last, Audio_ID);
- //Fill(Stream_Audio, StreamPos_Last, Audio_Format, "TAK", Unlimited, true, true);
- //Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "TAK", Unlimited, true, true);
- //Clear(Stream_Audio, StreamPos_Last, Audio_CodecID);
- //Clear(Stream_Audio, StreamPos_Last, Audio_CodecID_Hint);
- //Clear(Stream_Audio, StreamPos_Last, Audio_CodecID_Url);
- //Clear(Stream_Audio, StreamPos_Last, Audio_BitRate);
- //Clear(Stream_Audio, StreamPos_Last, Audio_BitRate_Mode);
- //Clear(Stream_Audio, StreamPos_Last, Audio_Codec_CC);
- #else
- Skip_XX(HeaderLength, "Wave header");
- #endif
- if (FooterLength)
- Skip_XX(FooterLength, "Wave footer");
- Skip_L3( "crc");
-}
-
-//---------------------------------------------------------------------------
-void File_Tak::ENCODERINFO()
-{
- //Parsing
- int8u Revision, Minor, Major, Preset_hi, Preset_lo;
- Get_L1 (Revision, "Revision");
- Get_L1 (Minor, "Minor");
- Get_L1 (Major, "Major");
- BS_Begin();
- Get_S1 (4, Preset_hi, "Preset (hi)");
- Get_S1 (4, Preset_lo, "Preset (lo)");
- BS_End();
-
- FILLING_BEGIN();
- Ztring Version=Ztring::ToZtring(Major)+__T('.')+Ztring::ToZtring(Minor)+__T('.')+Ztring::ToZtring(Revision);
- Ztring Preset=__T("-p")+Ztring::ToZtring(Preset_lo);
- switch (Preset_hi)
- {
- case 0x00 : break;
- case 0x01 : Preset+=__T('e'); break;
- case 0x02 : Preset+=__T('m'); break;
- default : Preset+=__T('-')+Ztring::ToZtring(Preset_hi, 16); //Unknown
- }
-
- Fill(Stream_Audio, 0, Audio_Encoded_Library, "TAK");
- Fill(Stream_Audio, 0, Audio_Encoded_Library_String, __T("TAK ")+Version);
- Fill(Stream_Audio, 0, Audio_Encoded_Library_Name, "TAK");
- Fill(Stream_Audio, 0, Audio_Encoded_Library_Version, Version);
- Fill(Stream_Audio, 0, Audio_Encoded_Library_Settings, Preset);
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_TAK_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tak.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tak.h
deleted file mode 100644
index a3d75274d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tak.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Tak files
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TakH
-#define MediaInfo_File_TakH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Tak
-//***************************************************************************
-
-class File_Tak : public File__Analyze, public File__Tags_Helper
-{
-public :
- //In
- bool VorbisHeader;
-
- //Constructor/Destructor
- File_Tak();
-
-private :
- //Streams management
- void Streams_Finish() {File__Tags_Helper::Streams_Finish();}
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue() {File__Tags_Helper::Read_Buffer_Continue();}
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void ENDOFMETADATA();
- void STREAMINFO();
- void SEEKTABLE();
- void WAVEMETADATA();
- void ENCODERINFO();
- void PADDING() {Skip_XX(Element_Size, "Padding");}
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tta.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tta.cpp
deleted file mode 100644
index d77e73403..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tta.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Source : http://tta.sourceforge.net/codec.format
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_TTA_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Tta.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Tta::File_Tta()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tta::Streams_Finish()
-{
- //Filling
- int64u CompressedSize=File_Size-TagsSize;
- float32 CompressionRatio=((float32)UncompressedSize)/CompressedSize;
-
- Fill(Stream_Audio, 0, Audio_StreamSize, CompressedSize);
- Fill(Stream_Audio, 0, Audio_Compression_Ratio, CompressionRatio);
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "VBR");
-
- File__Tags_Helper::Streams_Finish();
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Tta::FileHeader_Begin()
-{
- if (!File__Tags_Helper::FileHeader_Begin())
- return false;
-
- //Synchro
- if (Buffer_Offset+4>Buffer_Size)
- return false;
- if (CC4(Buffer+Buffer_Offset)!=0x54544131) //"TTA1"
- {
- File__Tags_Helper::Reject("TTA");
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Tta::FileHeader_Parse()
-{
- //Parsing
- int32u SampleRate, Samples, CRC32;
- int16u AudioFormat, Channels, BitsPerSample;
- Skip_C4( "Signature");
- Get_L2 (AudioFormat, "AudioFormat");
- Get_L2 (Channels, "NumChannels");
- Get_L2 (BitsPerSample, "BitsPerSample");
- Get_L4 (SampleRate, "SampleRate");
- Get_L4 (Samples, "DataLength");
- Get_L4 (CRC32, "CRC32");
-
- FILLING_BEGIN();
- if (SampleRate==0)
- return;
- Duration=((int64u)Samples)*1000/SampleRate;
- if (Duration==0)
- return;
- UncompressedSize=((int64u)Samples)*Channels*(BitsPerSample/8);
- if (UncompressedSize==0)
- return;
-
- //Filling data
- File__Tags_Helper::Accept("TTA");
-
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "TTA");
- Fill(Stream_Audio, 0, Audio_Codec, "TTA ");
- Fill(Stream_Audio, 0, Audio_BitDepth, BitsPerSample);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SampleRate);
- Fill(Stream_Audio, 0, Audio_Duration, Duration);
- FILLING_END();
-
- //No more need data
- File__Tags_Helper::Finish("TTA");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_TTA_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tta.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tta.h
deleted file mode 100644
index 72c9c85d8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Tta.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about TTA files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TtaH
-#define MediaInfo_File_TtaH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Tta
-//***************************************************************************
-
-class File_Tta : public File__Analyze, public File__Tags_Helper
-{
-public :
- //Constructor/Destructor
- File_Tta();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue() {File__Tags_Helper::Read_Buffer_Continue();}
-
- //Temp
- int64u Duration;
- int64u UncompressedSize;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_TwinVQ.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_TwinVQ.cpp
deleted file mode 100644
index 989506546..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_TwinVQ.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Source: http://wiki.multimedia.cx/index.php?title=VQF
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_TWINVQ_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_TwinVQ.h"
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* TwinVQ_samplerate(int32u samplerate)
-{
- switch (samplerate)
- {
- case 11 : return "11025";
- case 22 : return "22050";
- case 44 : return "44100";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- const int32u _c__=0x28632920;
- const int32u AUTH=0x41555448;
- const int32u COMM=0x434F4D4D;
- const int32u COMT=0x434F4D54;
- const int32u DATA=0x44415441;
- const int32u DSIZ=0x4453495A;
- const int32u FILE=0x46494C45;
- const int32u NAME=0x4E414D45;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_TwinVQ::FileHeader_Begin()
-{
- //Testing
- if (Buffer_Offset+4>Buffer_Size)
- return false;
- if (CC4(Buffer+Buffer_Offset)!=0x5457494E) //"TWIN"
- {
- Reject("TwinVQ");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_TwinVQ::FileHeader_Parse()
-{
- //Parsing
- Skip_C4( "magic");
- Skip_Local(8, "version");
- Skip_B4( "subchunks_size");
-
- FILLING_BEGIN();
- Accept("TwinVQ");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "TwinVQ");
- Fill(Stream_Audio, 0, Audio_Codec, "TwinVQ");
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_TwinVQ::Header_Parse()
-{
- //Parsing
- int32u id, size;
- Get_C4 (id, "id");
- Get_B4 (size, "size");
-
- //Filling
- Header_Fill_Code(id, Ztring().From_CC4(id));
- Header_Fill_Size(8+(id==Elements::DATA?0:size)); //DATA chunk indicates the end of the header, with no chunk size
-}
-
-//---------------------------------------------------------------------------
-void File_TwinVQ::Data_Parse()
-{
- #define ELEMENT_CASE(_NAME, _DETAIL) \
- case Elements::_NAME : Element_Info1(_DETAIL); _NAME(); break;
-
- //Parsing
- switch (Element_Code)
- {
- ELEMENT_CASE(_c__, "Copyright");
- ELEMENT_CASE(AUTH, "Author");
- ELEMENT_CASE(COMM, "Mandatory information");
- ELEMENT_CASE(COMT, "Comment");
- ELEMENT_CASE(DATA, "Data");
- ELEMENT_CASE(DSIZ, "Data size");
- ELEMENT_CASE(FILE, "Filename");
- ELEMENT_CASE(NAME, "Song title");
- default : Skip_XX(Element_Size, "Unknown");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_TwinVQ::COMM()
-{
- //Parsing
- int32u channel_mode, bitrate, samplerate;
- Get_B4 (channel_mode, "channel_mode");
- Get_B4 (bitrate, "bitrate");
- Get_B4 (samplerate, "samplerate");
- Skip_B4( "security_level");
-
- //Filling
- Fill(Stream_Audio, 0, Audio_Channel_s_, channel_mode+1);
- Fill(Stream_Audio, 0, Audio_BitRate, bitrate*1000);
- Fill(Stream_Audio, 0, Audio_SamplingRate, TwinVQ_samplerate(samplerate));
- if (!IsSub && File_Size!=(int64u)-1)
- Fill(Stream_Audio, 0, Audio_StreamSize, File_Size);
-}
-
-//---------------------------------------------------------------------------
-void File_TwinVQ::DATA()
-{
- //This is the end of the parsing (DATA chunk format is unknown)
- Finish("TwinVQ");
-}
-
-//---------------------------------------------------------------------------
-void File_TwinVQ::DSIZ()
-{
- //Parsing
- Skip_B4( "Value");
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_TwinVQ::_____char()
-{
- //Parsing
- Skip_Local(Element_Size, "Value");
-}
-
-//---------------------------------------------------------------------------
-void File_TwinVQ::_____char(const char* Parameter)
-{
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Value");
-
- //Filling
- Fill(Stream_General, 0, Parameter, Value);
-}
-
-} //Namespace
-
-#endif //MEDIAINFO_TWINVQ_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_TwinVQ.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_TwinVQ.h
deleted file mode 100644
index 6a2acd054..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_TwinVQ.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Musepack files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TwinVQH
-#define MediaInfo_File_TwinVQH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_TwinVQ
-//***************************************************************************
-
-class File_TwinVQ : public File__Analyze
-{
-private :
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void _c__() {_____char("Copyright");}
- void ALBM() {_____char("Album");}
- void AUTH() {_____char("Performer");}
- void COMM();
- void COMT() {_____char("Comment");}
- void DATA();
- void DSIZ();
- void FILE() {_____char();}
- void NAME() {_____char("Title");}
-
- //Helpers
- void _____char();
- void _____char(const char* Parameter);
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Vorbis.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Vorbis.cpp
deleted file mode 100644
index 93112140a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Vorbis.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Note : the buffer must be given in ONE call
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_VORBIS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Vorbis.h"
-#include <cmath>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-int8u ilog(int32u Value)
-{
- int8u ToReturn=0;
- while(Value)
- {
- ToReturn++;
- Value>>=1;
- }
- return ToReturn;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Vorbis::Header_Parse()
-{
- //Filling
- Header_Fill_Code(0, "Vorbis");
- Header_Fill_Size(Buffer_Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Vorbis::Data_Parse()
-{
- //Parsing
- if (Status[IsAccepted])
- Setup();
- else
- Identification();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Vorbis::Identification()
-{
- Element_Name("Identification");
-
- //Parsing
- int32u Version, SamplingRate, BitRate_Maximum, BitRate_Nominal, BitRate_Minimum;
- int8u Channels;
- Skip_B1 ( "Signature");
- Skip_Local(6, "Signature");
- Get_L4 (Version, "Version");
- if (Version>0)
- return; //Not supported
- Get_L1 (Channels, "Channels");
- Get_L4 (SamplingRate, "SamplingRate");
- Get_L4 (BitRate_Maximum, "BitRate_Maximum");
- Get_L4 (BitRate_Nominal, "BitRate_Nominal");
- Get_L4 (BitRate_Minimum, "BitRate_Minimum");
- BS_Begin();
- Skip_BS(4, "BlockSize_0"); //2^Value
- Skip_BS(4, "BlockSize_1"); //2^Value
- BS_End();
- Skip_L1( "Framing");
-
- //Filling
- FILLING_BEGIN();
- Accept("Vorbis");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, "Vorbis");
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "Vorbis");
- if (BitRate_Maximum!=0 && BitRate_Maximum<0x80000000) //This is a signed value, and negative values are not OK
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate_Maximum, BitRate_Maximum);
- if (BitRate_Nominal!=0 && BitRate_Nominal<0x80000000) //This is a signed value, and negative values are not OK
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, BitRate_Nominal);
- if (BitRate_Minimum!=0 && BitRate_Minimum<0x80000000) //This is a signed value, and negative values are not OK
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate_Minimum, BitRate_Minimum);
- if (BitRate_Nominal && BitRate_Maximum==BitRate_Nominal && BitRate_Nominal==BitRate_Minimum)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate_Mode, "CBR");
- else
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate_Mode, "VBR");
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SamplingRate);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Vorbis::Setup()
-{
- Element_Name("Setup");
-
- //Parsing
- Skip_Local(6, "Signature");
- int32u codebook, codebook_dimensions, codebook_entries, ordered, codebook_lookup_type;
- int8u vorbis_codebook_count;
- Get_L1 (vorbis_codebook_count, "vorbis_codebook_count");
- BS_Begin_LE(); //Vorbis bitstream is Little Endian
- vorbis_codebook_count+=1;
- for (int Pos=0; Pos<vorbis_codebook_count; Pos++)
- {
- Element_Begin1("codebook");
- Get_T4 (24, codebook, "codebook");
- if (codebook!=0x564342)
- return;
- Get_BT (16, codebook_dimensions, "codebook_dimensions");
- Get_BT (24, codebook_entries, "codebook_entries");
- Get_BT (1, ordered, "ordered");
- if (!ordered)
- {
- int32u sparse;
- Get_BT (1, sparse, "sparse");
- for (int32u Pos2=0; Pos2<codebook_entries; Pos2++)
- {
- if (sparse)
- {
- int32u flag;
- Get_BT (1, flag, "flag");
- if (flag)
- {
- Info_BT(5, length, "length");
- }
- }
- else
- {
- Info_BT(5, length, "length");
- }
- }
- }
- else
- {
- Skip_BT(5, "length");
- int32u num;
- for(int32u i=0; i<codebook_entries; )
- {
- Get_BT (ilog(codebook_entries-i), num, "num");
- for(int32u j=0; j<num && i<codebook_entries; j++, i++);
- }
- }
- Get_BT (4, codebook_lookup_type, "codebook_lookup_type");
- if (codebook_lookup_type>2)
- return; //Not decodable
- if (codebook_lookup_type>0)
- {
- int8u codebook_value_bits;
- Info_BT(32, codebook_minimum_value, "codebook_minimum_value");
- Info_BT(32, codebook_delta_value, "codebook_delta_value");
- Get_T1 ( 4, codebook_value_bits, "codebook_value_bits");
- codebook_value_bits++;
- Info_BT( 1, codebook_sequence_p, "codebook_sequence_p");
- int32s vals;
- if (codebook_lookup_type==1)
- {
- vals=(int32u)floor(pow((float)codebook_entries,1.f/codebook_dimensions));
- for (;;)
- {
- int32u acc=1, acc1=1;
- for(int32u i=0; i<codebook_dimensions; i++)
- {
- acc*=vals;
- acc1*=vals+1;
- }
- if(acc<=codebook_entries && acc1>codebook_entries)
- break;
- else if(acc>codebook_entries)
- vals--;
- else
- vals++;
- }
- }
- else //codebook_lookup_type==2
- vals=codebook_entries*codebook_dimensions;
- int32u codebook_multiplicands;
- for(int i=0; i<vals; i++)
- Get_BT (codebook_value_bits, codebook_multiplicands, "codebook_multiplicands");
- }
- Element_End0();
- }
-
- //Time domain transforms
- int32u vorbis_time_count;
- Get_BT (6, vorbis_time_count, "vorbis_time_count");
- for (int32u Pos=0; Pos<vorbis_time_count+1; Pos++)
- Skip_BT(16, "zero");
-
- //Floors
- int32u vorbis_floor_count;
- Get_BT (6, vorbis_floor_count, "vorbis_floor_count");
- for (int32u Pos=0; Pos<vorbis_floor_count; Pos++)
- {
- int16u vorbis_floor_types;
- Get_T2(16, vorbis_floor_types, "vorbis_floor_types");
-
- FILLING_BEGIN();
- Fill(Stream_Audio, 0, Audio_Format_Settings_Floor, vorbis_floor_types);
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Floor, vorbis_floor_types);
- if (vorbis_floor_types==0)
- {
- Fill(Stream_Audio, 0, Audio_Format_Settings, "Floor0");
- Fill(Stream_Audio, 0, Audio_Codec_Settings, "Floor0");
- }
- FILLING_END();
- //Must continue parsing...
- }
- BS_End_LE();
-
- Finish("Vorbis");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_VORBIS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Vorbis.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Vorbis.h
deleted file mode 100644
index 2aa038b1d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Vorbis.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Vorbis files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_VorbisH
-#define MediaInfo_File_VorbisH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Vorbis
-//***************************************************************************
-
-class File_Vorbis : public File__Analyze
-{
-private :
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Identification();
- void Setup();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Wvpk.cpp b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Wvpk.cpp
deleted file mode 100644
index 91825934e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Wvpk.cpp
+++ /dev/null
@@ -1,723 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Source : http://www.wavpack.com/file_format.txt
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_WVPK_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Audio/File_Wvpk.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const int16u Wvpk_Resolution[]=
-{
- 8,
- 16,
- 24,
- 32,
-};
-
-//---------------------------------------------------------------------------
-const int32u Wvpk_SamplingRate[]=
-{
- 6000,
- 8000,
- 9600,
- 11025,
- 12000,
- 16000,
- 22050,
- 24000,
- 32000,
- 44100,
- 48000,
- 64000,
- 88200,
- 96000,
- 192000,
- 0,
-};
-
-//---------------------------------------------------------------------------
-const char* Wvpk_id(int8u ID)
-{
- switch (ID)
- {
- case 0x00 : return "could be used to pad WavPack blocks";
- case 0x02 : return "decorrelation terms & deltas";
- case 0x03 : return "initial decorrelation weights";
- case 0x04 : return "decorrelation sample history";
- case 0x05 : return "initial entropy variables";
- case 0x06 : return "entropy variables specific to hybrid mode";
- case 0x07 : return "info needed for hybrid lossless (wvc) mode";
- case 0x08 : return "specific info for floating point decode";
- case 0x09 : return "specific info for decoding integers > 24 bits";
- case 0x0A : return "normal compressed audio bitstream (wv file)";
- case 0x0B : return "correction file bitstream (wvc file)";
- case 0x0C : return "special extended bitstream for floating point data or integers > 24 bit";
- case 0x0D : return "contains channel count and channel_mask";
- case 0x21 : return "RIFF header for .wav files (before audio)";
- case 0x22 : return "RIFF trailer for .wav files (after audio)";
- case 0x25 : return "some encoding details for info purposes";
- case 0x26 : return "16-byte MD5 sum of raw audio data";
- case 0x27 : return "non-standard sampling rate info";
- default: return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Wvpk::File_Wvpk()
-:File__Analyze(), File__Tags_Helper()
-{
- //File__Tags_Helper
- Base=this;
-
- //Configuration
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=32*1024;
-
- //In
- Frame_Count_Valid=2;
- FromMKV=false;
- FromMKV_CodecPrivateParsed=false;
-
- //Temp - Technical info
- total_samples_FirstFrame=(int32u)-1;
- block_index_FirstFrame=0;
- block_index_LastFrame=0;
- SamplingRate=(int8u)-1;
- num_channels=0;
- channel_mask=0;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Wvpk::Streams_Finish()
-{
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "VBR");
-
- //Specific case
- if (FromMKV)
- return;
-
- //Duration
- if (SamplingRate<15)
- {
- int64u Duration=(((int64u)(block_index_LastFrame+block_samples_LastFrame-block_index_FirstFrame))*1000/Wvpk_SamplingRate[SamplingRate]); //Don't forget the last frame with block_samples...
- int64u CompressedSize=File_Size-TagsSize;
- int64u UncompressedSize=Duration*(mono?1:2)*Wvpk_Resolution[(resolution1?1:0)*2+(resolution0?1:0)]*Wvpk_SamplingRate[SamplingRate]/8/1000;
- float32 CompressionRatio=((float32)UncompressedSize)/CompressedSize;
- Fill(Stream_Audio, 0, Audio_StreamSize, CompressedSize, 3, true);
- Fill(Stream_Audio, 0, Audio_Duration, Duration, 10, true);
- Fill(Stream_Audio, 0, Audio_Compression_Ratio, CompressionRatio, 3, true);
- }
-
- File__Tags_Helper::Streams_Finish();
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Wvpk::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<2)
- return false; //Must wait for more data
-
- if (CC2(Buffer)==0x4D5A) //"MZ"
- {
- File__Tags_Helper::Reject("WavPack");
- return false; //Executable with WavPack data are currently not well supported --> It is preferable to set them as executable
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Wvpk::Synchronize()
-{
- //Specific case
- if (FromMKV)
- return true;
-
- //Tags
- bool Tag_Found;
- if (!File__Tags_Helper::Synchronize(Tag_Found))
- return false;
- if (Tag_Found)
- return true;
-
- //Synchronizing
- while (Buffer_Offset+4<=Buffer_Size)
- {
- while (Buffer_Offset+4<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x77
- || Buffer[Buffer_Offset+1]!=0x76
- || Buffer[Buffer_Offset+2]!=0x70
- || Buffer[Buffer_Offset+3]!=0x6B)) //"wvpk"
- Buffer_Offset++;
-
- if (Buffer_Offset+4<=Buffer_Size)//Testing if size is coherant
- {
- //Testing next start, to be sure
- size_t Size=LittleEndian2int32u(Buffer+Buffer_Offset+4)+8;
- if (Buffer_Offset+Size+4>Buffer_Size)
- return false; //Need more data
-
- //Testing
- if (Buffer[Buffer_Offset+Size ]!=0x77
- || Buffer[Buffer_Offset+Size+1]!=0x76
- || Buffer[Buffer_Offset+Size+2]!=0x70
- || Buffer[Buffer_Offset+Size+3]!=0x6B) //"wvpk"
- Buffer_Offset++;
- else
- break; //while()
- }
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+4>Buffer_Size)
- {
- if (Buffer_Offset+3==Buffer_Size && CC3(Buffer+Buffer_Offset)!=0x777670) //"wvp"
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x7776) //"wv"
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0x77) //"w"
- Buffer_Offset++;
- return false;
- }
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Wvpk::Synched_Test()
-{
- //Specific case
- if (FromMKV)
- return true;
-
- //Tags
- if (!File__Tags_Helper::Synched_Test())
- return false;
-
- //Must have enough buffer for having header
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0x77
- || Buffer[Buffer_Offset+1]!=0x76
- || Buffer[Buffer_Offset+2]!=0x70
- || Buffer[Buffer_Offset+3]!=0x6B) //"wvpk"
- Synched=false;
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Wvpk::Read_Buffer_Continue()
-{
- //Tags
- if (!FromMKV)
- File__Tags_Helper::Read_Buffer_Continue();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Wvpk::Header_Parse()
-{
- //Specific cases
- if (FromMKV)
- {
- Header_Fill_Size(Element_Size);
- Header_Fill_Code(0, "Block");
- return;
- }
-
- //Parsing
- int32u ckSize;
- Skip_C4( "ckID");
- Get_L4 (ckSize, "ckSize");
-
- //Filling
- Header_Fill_Size(8+ckSize);
- Header_Fill_Code(0, "Block");
-}
-
-//---------------------------------------------------------------------------
-void File_Wvpk::Data_Parse()
-{
- //Specific
- if (FromMKV && !FromMKV_CodecPrivateParsed)
- {
- //Parsing
- Get_L2 (version, "version");
-
- FILLING_BEGIN();
- FromMKV_CodecPrivateParsed=true;
- FILLING_END();
- return;
- }
-
- //Counting
- Frame_Count++;
-
- //Parsing
- Element_Begin1("Block Header");
- if (!FromMKV)
- Get_L2 (version, "version");
- if (version/0x100==0x4)
- {
- while (Element_Offset<Element_Size)
- {
- int32u total_samples=(int32u)-1, block_index=(int32u)-1, block_samples=0, flags, blocksize=(int32u)-1;
- bool initial_block=true, final_block=true;
- if (!FromMKV)
- {
- Skip_L1( "track_no");
- Skip_L1( "index_no");
- Get_L4 (total_samples, "total_samples");
- Get_L4 (block_index, "block_index");
- }
- if (!FromMKV || (FromMKV && Element_Offset==0))
- Get_L4 (block_samples, "block_samples");
- if (block_samples!=0) //empty frames have other values empty
- {
- if (!FromMKV)
- {
- if (block_index==0) //Only the frame with block_index==0
- total_samples_FirstFrame=total_samples; //Note: total_samples is not trustable for a cutted file
- if (Frame_Count==1)
- block_index_FirstFrame=block_index; //Save the block_index of the first block
- block_index_LastFrame=block_index;
- block_samples_LastFrame=block_samples;
- }
- Get_L4 (flags, "flags");
- Get_Flags (flags, 0, resolution0, "resolution0");
- Get_Flags (flags, 1, resolution1, "resolution1");
- Get_Flags (flags, 2, mono, "mono");
- Get_Flags (flags, 3, hybrid, "hybrid");
- Get_Flags (flags, 4, joint_stereo, "joint stereo");
- Get_Flags (flags, 5, cross_channel_decorrelation, "cross-channel decorrelation");
- Skip_Flags(flags, 6, "hybrid noise shaping");
- Skip_Flags(flags, 7, "floating point data");
- Skip_Flags(flags, 8, "extended size integers");
- Skip_Flags(flags, 9, "hybrid mode parameters control bitrate");
- Skip_Flags(flags, 10, "hybrid noise balanced between channels");
- Get_Flags (flags, 11, initial_block, "initial block in sequence");
- Get_Flags (flags, 12, final_block, "final block in sequence");
- Skip_Flags(flags, 13, "amount of data left-shift after decode");
- Skip_Flags(flags, 14, "amount of data left-shift after decode");
- Skip_Flags(flags, 15, "amount of data left-shift after decode");
- Skip_Flags(flags, 16, "amount of data left-shift after decode");
- Skip_Flags(flags, 17, "amount of data left-shift after decode");
- Skip_Flags(flags, 18, "maximum magnitude of decoded data");
- Skip_Flags(flags, 19, "maximum magnitude of decoded data");
- Skip_Flags(flags, 20, "maximum magnitude of decoded data");
- Skip_Flags(flags, 21, "maximum magnitude of decoded data");
- Skip_Flags(flags, 22, "maximum magnitude of decoded data");
- Skip_Flags(flags, 23, "sampling rate");
- Skip_Flags(flags, 24, "sampling rate");
- Skip_Flags(flags, 25, "sampling rate");
- Skip_Flags(flags, 26, "sampling rate"); SamplingRate=(int8u)(((flags>>23)&0xF)); Param_Info1(Wvpk_SamplingRate[SamplingRate]);
- Skip_Flags(flags, 27, "reserved");
- Skip_Flags(flags, 28, "reserved");
- Skip_Flags(flags, 29, "use IIR for negative hybrid noise shaping");
- Skip_Flags(flags, 30, "false stereo");
- Skip_Flags(flags, 31, "reserved");
- }
- else
- {
- Skip_L4( "flags (empty)");
-
- //Counting
- Frame_Count--; //This is not a real frame
- }
- Skip_L4( "crc");
- Element_End0();
-
- int64u End=Element_Size;
- if (FromMKV && !(initial_block && final_block))
- {
- Get_L4 (blocksize, "blocksize");
- End=Element_Offset+blocksize;
- if (End>=Element_Size)
- End=Element_Size;
- }
-
- //Sub-block
- int8u id;
- while (Element_Offset<End)
- {
- Element_Begin0();
- int32u word_size;
- bool large, odd_size;
- BS_Begin();
- Get_SB (large, "large");
- Get_SB (odd_size, "odd_size");
- Get_S1 (6, id, "id"); Element_Info1(Wvpk_id(id));
- BS_End();
- if (large)
- {
- Get_L3 (word_size, "word_size");
- }
- else
- {
- int8u word_size1;
- Get_L1 (word_size1, "word_size");
- word_size=word_size1;
- }
- if (word_size==0 && odd_size)
- Size=0; //Problem!
- else
- Size=word_size*2-(odd_size?1:0);
- Element_Name(Ztring().From_CC1(id));
- switch (id)
- {
- case 0x07 : id_07(); break;
- case 0x0D : id_0D(); break;
- case 0x25 : id_25(); break;
- default : if (word_size)
- Skip_XX(Size, "data");
- }
- if (odd_size)
- Skip_XX(1, "padding");
- Element_End0();
- }
- }
- }
-
- //Filling
- if (!Status[IsAccepted] && Frame_Count>=Frame_Count_Valid)
- {
- File__Tags_Helper::Accept("WavPack");
- Data_Parse_Fill();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wvpk::Data_Parse_Fill()
-{
- //Filling
- File__Tags_Helper::Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "WavPack");
- Ztring Version_Minor=Ztring::ToZtring(version%0x100);
- if (Version_Minor.size()==1)
- Version_Minor.insert(0, 1, __T('0'));
- Fill(Stream_Audio, 0, Audio_Format_Profile, Ztring::ToZtring(version/0x100)+__T('.')+Version_Minor);
- Fill(Stream_Audio, 0, Audio_Codec, "Wavpack");
- Fill(Stream_Audio, 0, Audio_BitDepth, Wvpk_Resolution[(resolution1?1:0)*2+(resolution0?1:0)]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, num_channels?num_channels:(mono?1:2));
- if (channel_mask)
- {
- Ztring Channels_Positions, Channels_Positions2;
- if (channel_mask&0x00C7)
- {
- int8u Count=0;
- Channels_Positions+=__T("Front:");
- if (channel_mask&0x0001)
- {
- Channels_Positions+=__T(" L");
- Count++;
- }
- if (channel_mask&0x0004)
- {
- Channels_Positions+=__T(" C");
- Count++;
- }
- if (channel_mask&0x0040)
- {
- Channels_Positions+=__T(" C");
- Count++;
- }
- if (channel_mask&0x0080)
- {
- Channels_Positions+=__T(" C");
- Count++;
- }
- if (channel_mask&0x0002)
- {
- Channels_Positions+=__T(" R");
- Count++;
- }
- Channels_Positions2+=Ztring::ToZtring(Count);
- }
- if (channel_mask&0x0600)
- {
- int8u Count=0;
- if (!Channels_Positions.empty())
- Channels_Positions+=__T(", ");
- Channels_Positions+=__T("Side:");
- if (channel_mask&0x0200)
- {
- Channels_Positions+=__T(" L");
- Count++;
- }
- if (channel_mask&0x0400)
- {
- Channels_Positions+=__T(" R");
- Count++;
- }
- Channels_Positions2+=__T('.')+Ztring::ToZtring(Count);
- }
- else
- Channels_Positions2+=__T("/0");
- if (channel_mask&0x0130)
- {
- int8u Count=0;
- if (!Channels_Positions.empty())
- Channels_Positions+=__T(", ");
- Channels_Positions+=__T("Back:");
- if (channel_mask&0x0010)
- {
- Channels_Positions+=__T(" L");
- Count++;
- }
- if (channel_mask&0x0100)
- {
- Channels_Positions+=__T(" C");
- Count++;
- }
- if (channel_mask&0x0020)
- {
- Channels_Positions+=__T(" R");
- Count++;
- }
- Channels_Positions2+=__T('/')+Ztring::ToZtring(Count);
- }
- else
- Channels_Positions2+=__T("/0");
- if (channel_mask&0x0008)
- {
- if (!Channels_Positions.empty())
- Channels_Positions+=__T(", ");
- Channels_Positions+=__T("LFE");
- Channels_Positions2+=__T(".1");
- }
- Fill(Stream_Audio, 0, Audio_ChannelPositions, Channels_Positions);
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, Channels_Positions2);
- }
-
- if (!FromMKV && SamplingRate<15)
- {
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, Wvpk_SamplingRate[SamplingRate]);
- if (total_samples_FirstFrame!=(int32u)-1) //--> this is a valid value
- Fill(Stream_Audio, 0, Audio_Duration, ((int64u)total_samples_FirstFrame)*1000/Wvpk_SamplingRate[SamplingRate]);
- }
- Fill(Stream_Audio, 0, Audio_Format_Settings, hybrid?"Hybrid lossy":"Lossless");
- Fill(Stream_Audio, 0, Audio_Codec_Settings, hybrid?"hybrid lossy":"lossless");
- Fill(Stream_Audio, 0, Audio_Encoded_Library_Settings, Encoded_Library_Settings);
-
- //No more need data
- File__Tags_Helper::GoToFromEnd(512*1024, "WavPack");
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Wvpk::id_07()
-{
- //Parsing
- Skip_XX(Size, "Data (Not decoded yet)");
-
- FILLING_BEGIN();
- if (Retrieve(Stream_Audio, 0, Audio_Compression_Mode).empty())
- Fill(Stream_Audio, 0, Audio_Compression_Mode, "Lossless");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Wvpk::id_0D()
-{
- //Parsing
- Get_L1 (num_channels, "num_channels");
- switch (Size)
- {
- case 1 :
- break;
- case 2 :
- {
- int8u channel_mask_1;
- Get_L1 (channel_mask_1, "channel_mask");
- channel_mask=channel_mask_1;
- }
- break;
- case 3 :
- {
- int16u channel_mask_2;
- Get_L2 (channel_mask_2, "channel_mask");
- channel_mask=channel_mask_2;
- }
- break;
- case 4 :
- Get_L3 (channel_mask, "channel_mask");
- break;
- case 5 :
- Get_L4 (channel_mask, "channel_mask");
- break;
- default : Skip_XX(Size, "unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wvpk::id_25()
-{
- //Parsing
- int32u flags;
- int8u extra=1;
- Get_L3 (flags, "flags");
- Skip_Flags(flags, 0, "");
- Skip_Flags(flags, 1, "fast mode");
- Skip_Flags(flags, 2, "");
- Skip_Flags(flags, 3, "high quality mode");
-
- Skip_Flags(flags, 4, "very high quality mode");
- Skip_Flags(flags, 5, "bitrate is kbps, not bits/sample");
- Skip_Flags(flags, 6, "automatic noise shaping");
- Skip_Flags(flags, 7, "shaping mode specified");
-
- Skip_Flags(flags, 8, "joint-stereo mode specified");
- Skip_Flags(flags, 9, "dynamic noise shaping");
- Skip_Flags(flags, 10, "create executable");
- Skip_Flags(flags, 11, "create correction file");
-
- Skip_Flags(flags, 12, "maximize bybrid compression");
- Skip_Flags(flags, 13, "");
- Skip_Flags(flags, 14, "");
- Skip_Flags(flags, 15, "calc noise in hybrid mode");
-
- Skip_Flags(flags, 16, "lossy mode");
- Skip_Flags(flags, 17, "extra processing mode");
- Skip_Flags(flags, 18, "no wvx stream w/ floats & big ints");
- Skip_Flags(flags, 19, "store MD5 signature");
-
- Skip_Flags(flags, 20, "merge blocks of equal redundancy (for lossyWAV)");
- Skip_Flags(flags, 21, "");
- Skip_Flags(flags, 22, "");
- Skip_Flags(flags, 23, "optimize for mono streams posing as stereo");
- if (flags&0x20000 && Size>=4)
- {
- Get_L1(extra, "extra");
- }
-
- if ((flags&0x20000 && Size>4) || (!(flags&0x20000) && Size>3))
- Skip_XX(Size-3-(flags&0x20000?1:0), "unknown");
-
- //Filling
- if (flags&0x000001)
- Encoded_Library_Settings+=__T(" -?");
- if (flags&0x000002)
- Encoded_Library_Settings+=__T(" -f");
- if (flags&0x000004)
- Encoded_Library_Settings+=__T(" -?");
- if (flags&0x000008)
- Encoded_Library_Settings+=__T(" -h");
- if (flags&0x000010)
- Encoded_Library_Settings+=__T(" -hh");
- if (flags&0x000020)
- Encoded_Library_Settings+=__T(" -?(bitrate is kbps, not bits/sample)");
- if (flags&0x000040)
- Encoded_Library_Settings+=__T(" -?(automatic noise shaping)");
- if (flags&0x000080)
- Encoded_Library_Settings+=__T(" -sn");
- if (flags&0x000100)
- Encoded_Library_Settings+=__T(" -jn");
- if (flags&0x000200)
- Encoded_Library_Settings+=__T(" -use-dns");
- if (flags&0x000400)
- Encoded_Library_Settings+=__T(" -e");
- if (flags&0x000800)
- Encoded_Library_Settings+=__T(" -c");
- if (flags&0x001000)
- Encoded_Library_Settings+=__T(" -cc");
- if (flags&0x002000)
- Encoded_Library_Settings+=__T(" -?");
- if (flags&0x004000)
- Encoded_Library_Settings+=__T(" -?");
- if (flags&0x008000)
- Encoded_Library_Settings+=__T(" -n");
- if (flags&0x010000)
- Encoded_Library_Settings+=__T(" -?(lossy mode)");
- if (flags&0x020000)
- {
- Encoded_Library_Settings+=__T(" -x");
- if (extra)
- Encoded_Library_Settings+=Ztring::ToZtring(extra);
- }
- if (flags&0x04000)
- Encoded_Library_Settings+=__T(" -?");
- if (flags&0x080000)
- Encoded_Library_Settings+=__T(" -m");
- if (flags&0x100000)
- Encoded_Library_Settings+=__T(" --merge-blocks");
- if (flags&0x200000)
- Encoded_Library_Settings+=__T(" -?");
- if (flags&0x400000)
- Encoded_Library_Settings+=__T(" -?");
- if (flags&0x800000)
- Encoded_Library_Settings+=__T(" --optimize-mono");
- if (!Encoded_Library_Settings.empty())
- Encoded_Library_Settings.erase(Encoded_Library_Settings.begin());
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_WVPK_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Wvpk.h b/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Wvpk.h
deleted file mode 100644
index e39edb4c2..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Audio/File_Wvpk.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about WavePack files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_WvpkH
-#define MediaInfo_File_WvpkH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Wvpk
-//***************************************************************************
-
-class File_Wvpk : public File__Analyze, public File__Tags_Helper
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool FromMKV;
- bool FromMKV_CodecPrivateParsed;
-
- //Constructor - Destructor
- File_Wvpk();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
- void Data_Parse_Fill();
-
- //Elements
- void id_07();
- void id_0D();
- void id_25();
-
- //Temp - Technical info
- int32u total_samples_FirstFrame;
- int32u block_index_FirstFrame;
- int32u block_index_LastFrame;
- int32u block_samples_LastFrame;
- bool resolution0;
- bool resolution1;
- bool mono;
- bool hybrid;
- bool joint_stereo;
- bool cross_channel_decorrelation;
- int8u SamplingRate;
- int8u num_channels;
- int32u channel_mask;
- int32u Size;
- int16u version;
- Ztring Encoded_Library_Settings;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate_MpegTs.cpp b/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate_MpegTs.cpp
deleted file mode 100644
index fddcf06ff..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate_MpegTs.cpp
+++ /dev/null
@@ -1,481 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Duplication helper for some specific formats
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGPS_YES) || defined(MEDIAINFO_MPEGTS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Duplicate/File__Duplicate_MpegTs.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "ZenLib/ZtringList.h"
-#include "ZenLib/File.h"
-#include <cstring>
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-// CRC_32_Table
-// A CRC is computed like this:
-// Init: int32u CRC_32 = 0xFFFFFFFF;
-// for each data byte do
-// CRC_32=(CRC_32<<8) ^ CRC_32_Table[(CRC_32>>24)^(data_byte)];
-extern int32u Psi_CRC_32_Table[256];
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-File__Duplicate_MpegTs::File__Duplicate_MpegTs (const Ztring &Target)
-: File__Duplicate__Base()
-{
- Writer.Configure(Target);
-
- //Current
- program_map_PIDs.resize(0x2000, 0);
- elementary_PIDs.resize(0x2000, 0);
- elementary_PIDs_program_map_PIDs.resize(0x2000, 0);
-}
-
-//***************************************************************************
-// Set
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__Duplicate_MpegTs::Configure (const Ztring &Value, bool ToRemove)
-{
- //Form: "program_number"
- if (Value.find(__T("program_number="))==0)
- {
- int16u program_number=Ztring(Value.substr(15, std::string::npos)).To_int16u();
- if (ToRemove)
- {
- if (Wanted_program_numbers.find(program_number)!=Wanted_program_numbers.end())
- Wanted_program_numbers.erase(program_number);
- else if (Remove_program_numbers.find(program_number)==Remove_program_numbers.end())
- Remove_program_numbers.insert(program_number);
- }
- else
- {
- if (Remove_program_numbers.find(program_number)!=Remove_program_numbers.end())
- Remove_program_numbers.erase(program_number);
- if (Wanted_program_numbers.find(program_number)==Wanted_program_numbers.end())
- Wanted_program_numbers.insert(program_number);
- }
- if (!PAT.empty())
- PAT.begin()->second.ConfigurationHasChanged=true;
- }
- //Form: "program_map_PID"
- else if (Value.find(__T("program_map_PID="))==0)
- {
- int16u program_map_PID=Ztring(Value.substr(16, std::string::npos)).To_int16u();
- if (ToRemove)
- {
- if (Wanted_program_map_PIDs.find(program_map_PID)!=Wanted_program_map_PIDs.end())
- Wanted_program_map_PIDs.erase(program_map_PID);
- else if (Remove_program_map_PIDs.find(program_map_PID)==Remove_program_map_PIDs.end())
- Remove_program_map_PIDs.insert(program_map_PID);
- }
- else
- {
- if (Remove_program_map_PIDs.find(program_map_PID)!=Remove_program_map_PIDs.end())
- Remove_program_map_PIDs.erase(program_map_PID);
- if (Wanted_program_map_PIDs.find(program_map_PID)==Wanted_program_map_PIDs.end())
- Wanted_program_map_PIDs.insert(program_map_PID);
- }
- if (PMT.find(program_map_PID)!=PMT.end())
- PMT[program_map_PID].ConfigurationHasChanged=true;
- }
- //Form: "elementary_PID"
- else if (Value.find(__T("elementary_PID="))==0)
- {
- int16u elementary_PID=Ztring(Value.substr(15, std::string::npos)).To_int16u();
- if (ToRemove)
- {
- if (Wanted_elementary_PIDs.find(elementary_PID)!=Wanted_elementary_PIDs.end())
- Wanted_elementary_PIDs.erase(elementary_PID);
- else if (Remove_elementary_PIDs.find(elementary_PID)==Remove_elementary_PIDs.end())
- Remove_elementary_PIDs.insert(elementary_PID);
- }
- else
- {
- if (Remove_elementary_PIDs.find(elementary_PID)!=Remove_elementary_PIDs.end())
- Remove_elementary_PIDs.erase(elementary_PID);
- if (Wanted_elementary_PIDs.find(elementary_PID)==Wanted_elementary_PIDs.end())
- Wanted_elementary_PIDs.insert(elementary_PID);
- }
- if (PMT.find(elementary_PIDs_program_map_PIDs[elementary_PID])!=PMT.end())
- PMT[elementary_PIDs_program_map_PIDs[elementary_PID]].ConfigurationHasChanged=true;
- }
- //Old
- else
- {
- int16u program_number=Ztring(Value).To_int16u();
- if (ToRemove)
- {
- if (Wanted_program_numbers.find(program_number)!=Wanted_program_numbers.end())
- Wanted_program_numbers.erase(program_number);
- else if (Remove_program_numbers.find(program_number)==Remove_program_numbers.end())
- Remove_program_numbers.insert(program_number);
- }
- else
- {
- if (Remove_program_numbers.find(program_number)!=Remove_program_numbers.end())
- Remove_program_numbers.erase(program_number);
- if (Wanted_program_numbers.find(program_number)==Wanted_program_numbers.end())
- Wanted_program_numbers.insert(program_number);
- }
- if (!PAT.empty())
- PAT.begin()->second.ConfigurationHasChanged=true;
- }
-
- //Can be disabled?
- if (Wanted_program_numbers.empty()
- && Wanted_program_map_PIDs.empty()
- && Wanted_elementary_PIDs.empty()
- && Remove_program_numbers.empty()
- && Remove_program_map_PIDs.empty()
- && Remove_elementary_PIDs.empty())
- return true; //It can be erased
- else
- return false; //We always need it
-}
-
-//***************************************************************************
-// Write
-//***************************************************************************
-
-bool File__Duplicate_MpegTs::Write (int16u PID, const int8u* ToAdd, size_t ToAdd_Size)
-{
- if (elementary_PIDs[PID])
- {
- Writer.Write(ToAdd, ToAdd_Size);
- return false;
- }
- else if (program_map_PIDs[PID])
- return Manage_PMT(ToAdd, ToAdd_Size);
- else if (PID==0x0000)
- return Manage_PAT(ToAdd, ToAdd_Size);
- else
- return false;
-}
-
-bool File__Duplicate_MpegTs::Manage_PAT (const int8u* ToAdd, size_t ToAdd_Size)
-{
- if (!Parsing_Begin(ToAdd, ToAdd_Size, PAT))
- return false;
-
- //Programs
- program_map_PIDs.clear();
- program_map_PIDs.resize(0x2000, 0);
- elementary_PIDs.clear();
- elementary_PIDs.resize(0x2000, 0);
- while (FromTS.Offset+4<=FromTS.End)
- {
- //For each program
- int16u program_number =CC2(FromTS.Buffer+FromTS.Offset+0);
- int16u program_map_PID=CC2(FromTS.Buffer+FromTS.Offset+2)&0x1FFF;
- if (Wanted_program_numbers.find(program_number) !=Wanted_program_numbers.end()
- || Wanted_program_map_PIDs.find(program_map_PID)!=Wanted_program_map_PIDs.end())
- {
- //Integrating it
- program_map_PIDs[program_map_PID]=1;
- std::memcpy(PAT[StreamID].Buffer+PAT[StreamID].Offset, FromTS.Buffer+FromTS.Offset, 4);
- PAT[StreamID].Offset+=4;
- PMT[program_number].ConfigurationHasChanged=true;
- }
- FromTS.Offset+=4;
- }
-
- Parsing_End(PAT);
-
- //Reseting
- std::vector<int16u> StreamID_List;
- for (std::map<int16u, buffer>::iterator PAT_=PAT.begin(); PAT_!=PAT.end(); ++PAT_)
- if (PAT_->first!=StreamID)
- StreamID_List.push_back(PAT_->first);
- for (size_t Pos=0; Pos<StreamID_List.size(); Pos++)
- PAT[StreamID_List[Pos]].FromTS_version_number_Last=0xFF;
-
- return true;
-}
-
-bool File__Duplicate_MpegTs::Manage_PMT (const int8u* ToAdd, size_t ToAdd_Size)
-{
- if (!Parsing_Begin(ToAdd, ToAdd_Size, PMT))
- return false;
-
- //Testing program_number
- if (Wanted_program_numbers.find(StreamID)==Wanted_program_numbers.end()
- && Wanted_program_map_PIDs.find(elementary_PIDs_program_map_PIDs[StreamID]) == Wanted_program_map_PIDs.end())
- {
- delete[] PMT[StreamID].Buffer; PMT[StreamID].Buffer=NULL;
- return false;
- }
-
- //program_info_length
- int16u program_info_length=CC2(FromTS.Buffer+FromTS.Offset+2)&0x0FFF;
- std::memcpy(PMT[StreamID].Buffer+PMT[StreamID].Offset, FromTS.Buffer+FromTS.Offset, 4+program_info_length);
- FromTS.Offset+=4+program_info_length;
- PMT[StreamID].Offset+=4+program_info_length;
-
- //elementary_PIDs
- while (FromTS.Offset+5<=FromTS.End)
- {
- //For each elementary_PID
- int16u elementary_PID=CC2(FromTS.Buffer+FromTS.Offset+1)&0x1FFF;
- int16u ES_info_length=CC2(FromTS.Buffer+FromTS.Offset+3)&0x0FFF;
- if (Wanted_elementary_PIDs.empty() || Wanted_elementary_PIDs.find(elementary_PID)!=Wanted_elementary_PIDs.end())
- {
- //Integrating it
- elementary_PIDs[elementary_PID]=1;
- elementary_PIDs_program_map_PIDs[elementary_PID]=StreamID;
- std::memcpy(PMT[StreamID].Buffer+PMT[StreamID].Offset, FromTS.Buffer+FromTS.Offset, 5+ES_info_length);
- PMT[StreamID].Offset+=5+ES_info_length;
- }
- else
- elementary_PIDs[elementary_PID]=0;
- FromTS.Offset+=5+ES_info_length;
- }
-
- Parsing_End(PMT);
- return true;
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-bool File__Duplicate_MpegTs::Parsing_Begin (const int8u* ToAdd, size_t ToAdd_Size, std::map<int16u, buffer> &ToModify_)
-{
- //Managing big chunks
- int16u PID=((ToAdd[1]&0x1F)<<8)|ToAdd[2]; //BigEndian2int16u(ToAdd+1)&0x1FFF;
- if (ToAdd[1]&0x40) //payload_unit_start_indicator
- {
- FromTS.Buffer=ToAdd;
- FromTS.Size=ToAdd_Size;
- FromTS.Offset=0;
- }
- else
- {
- if (BigBuffers.find(PID)==BigBuffers.end())
- return false; //Start is missing
- if (ToAdd_Size<4 || BigBuffers[PID].Buffer_Size+ToAdd_Size-4>BigBuffers[PID].Buffer_Size_Max)
- return false; //Problem
- std::memcpy(BigBuffers[PID].Buffer+BigBuffers[PID].Buffer_Size, ToAdd+4, ToAdd_Size-4);
- BigBuffers[PID].Buffer_Size+=ToAdd_Size-4;
-
- FromTS.Buffer=BigBuffers[PID].Buffer;
- FromTS.Size=BigBuffers[PID].Buffer_Size;
- FromTS.Offset=0;
- }
-
- //adaptation_field_length
- int8u adaptation_field_length=0;
- if (CC1(FromTS.Buffer+3)&0x20) //adaptation_field_control (adaptation) == true
- adaptation_field_length=1+CC1(FromTS.Buffer+4);
-
- //pointer_field
- FromTS.Offset+=4+adaptation_field_length;
- int8u pointer_field=CC1(FromTS.Buffer+FromTS.Offset);
-
- //table_id
- FromTS.Offset+=1+pointer_field;
- int8u table_id=FromTS.Buffer[FromTS.Offset];
- if (table_id!=0x00 && table_id!=0x02) //Currently only PAT and PMT are handled
- return false;
-
- //section_length
- FromTS.Offset++;
- if (FromTS.Offset+2>FromTS.Size)
- return false;
- FromTS.Begin=FromTS.Offset-1;
- int16u section_length=CC2(FromTS.Buffer+FromTS.Offset)&0x0FFF;
- FromTS.End=4+adaptation_field_length+section_length;
-
- //Positionning just after section_length
- FromTS.Offset+=2;
-
- //Retrieving StreamID
- StreamID=CC2(FromTS.Buffer+FromTS.Offset);
- buffer &ToModify=ToModify_[StreamID];
-
- //version_number
- int8u FromTS_version_number=(CC1(FromTS.Buffer+FromTS.Offset+2)>>1)&0x1F;
- if (ToModify.version_number==0xFF && FromTS.End<=FromTS.Size-4) //Only if we have enough data
- ToModify.version_number=FromTS_version_number;
- if (ToModify.continuity_counter==0xFF && FromTS.End<=FromTS.Size-4) //Only if we have enough data
- ToModify.continuity_counter=FromTS.Buffer[3]&0xF;
- if (FromTS_version_number!=ToModify.FromTS_version_number_Last || ToModify.ConfigurationHasChanged)
- {
- if (FromTS.End<=FromTS.Size-4) //Only if we have enough data
- {
- ToModify.version_number++;
- if (ToModify.version_number>0x1F)
- ToModify.version_number=0;
- ToModify.FromTS_version_number_Last=FromTS_version_number;
- ToModify.ConfigurationHasChanged=false;
- }
- }
- else
- {
- if (ToModify.Buffer==NULL)
- return false;
-
- //This is the same as before --> Copying the last version, except continuity_counter (incremented)
- for (size_t Pos=0; Pos<ToModify.Size; Pos+=188)
- {
- ToModify.continuity_counter++;
- if (ToModify.continuity_counter>0x0F)
- ToModify.continuity_counter=0x00;
- ToModify.Buffer[Pos+3]&=0xF0;
- ToModify.Buffer[Pos+3]|=ToModify.continuity_counter;
- }
-
- //Managing big chunks
- if (BigBuffers.find(PID)!=BigBuffers.end())
- BigBuffers.erase(BigBuffers.find(PID));
-
- Writer.Write(ToModify.Buffer, ToModify.Size);
- return false;
- }
-
- //Test if we have enough data
- if (FromTS.End>FromTS.Size-4)
- {
- //Waiting for more data
- if (BigBuffers[PID].Buffer==NULL)
- {
- //Saving the data (not done at the beginning)
- BigBuffers[PID].Buffer_Size=FromTS.Size;
- BigBuffers[PID].Buffer_Size_Max=FromTS.End+188;
- BigBuffers[PID].Buffer=new int8u[BigBuffers[PID].Buffer_Size_Max];
- std::memcpy(BigBuffers[PID].Buffer, ToAdd, ToAdd_Size);
- }
- return false;
- }
-
- //Verifying CRC
- int32u CRC_32=0xFFFFFFFF;
- for (int32u CRC_32_Offset=(int32u)FromTS.Begin; CRC_32_Offset<FromTS.End+4; CRC_32_Offset++) //After syncword
- CRC_32=(CRC_32<<8) ^ Psi_CRC_32_Table[(CRC_32>>24)^(FromTS.Buffer[CRC_32_Offset])];
- if (CRC_32)
- return false; //Problem
-
- //Copying
- if (ToModify.Buffer!=NULL && ToModify.Size<FromTS.Size)
- {delete[] ToModify.Buffer; ToModify.Buffer=NULL;}
- if (ToModify.Buffer==NULL)
- ToModify.Buffer=new int8u[FromTS.Size+(FromTS.Size/188)*4];
- std::memcpy(ToModify.Buffer, FromTS.Buffer, FromTS.Begin+8); //Only up to last_section_number included
- ToModify.Offset=FromTS.Offset;
- ToModify.Begin=FromTS.Begin;
- ToModify.End=FromTS.End;
- ToModify.Size=FromTS.Size;
-
- //Changing version_number
- int8u ToReplace=FromTS.Buffer[FromTS.Offset+2];
- ToReplace&=0xC1; //11000001, for removing old version_number
- ToReplace|=ToModify.version_number<<1; //merging, with 1 bit offset
- ToModify.Buffer[ToModify.Offset+2]=ToReplace;
-
- //Positionning after last_section_number
- ToModify.Offset+=5;
- FromTS.Offset+=5;
-
- return true;
-}
-
-void File__Duplicate_MpegTs::Parsing_End (std::map<int16u, buffer> &ToModify_)
-{
- buffer &ToModify=ToModify_[StreamID];
-
- ToModify.End=ToModify.Offset;
- if (ToModify.End+4>ToModify.Size)
- return; //There was an error somewhere!
-
- //section_length
- int8u ToReplace=CC1(ToModify.Buffer+ToModify.Begin+1)&0xF0; //before section_length
- int16u section_length=(int16u)(ToModify.End-ToModify.Begin+1); //+4 for CRC, -3 for header size
- ToReplace|=section_length>>8;
- ToModify.Buffer[ToModify.Begin+1+0]=ToReplace;
- ToModify.Buffer[ToModify.Begin+1+1]=(int8u)(section_length&0xFF);
-
- //CRC32
- int32u CRC_32=0xFFFFFFFF;
- for (size_t Buffer_CRC_Pos=ToModify.Begin; Buffer_CRC_Pos<ToModify.End; Buffer_CRC_Pos++)
- CRC_32=(CRC_32<<8) ^ Psi_CRC_32_Table[(CRC_32>>24)^(ToModify.Buffer[Buffer_CRC_Pos])];
-
- ToModify.Buffer[ToModify.Offset+0]=(CRC_32>>24)&0xFF;
- ToModify.Buffer[ToModify.Offset+1]=(CRC_32>>16)&0xFF;
- ToModify.Buffer[ToModify.Offset+2]=(CRC_32>> 8)&0xFF;
- ToModify.Buffer[ToModify.Offset+3]= CRC_32 &0xFF;
-
- //Managing big chunks
- for (size_t Pos=188; Pos<ToModify.Size; Pos+=188)
- {
- std::memmove(ToModify.Buffer+Pos+4, ToModify.Buffer+Pos, ToModify.Size-Pos);
- std::memcpy(ToModify.Buffer+Pos, ToModify.Buffer, 4);
- ToModify.Buffer[Pos+1]&=0xBF; //Removing payload_unit_start_indicator
- ToModify.Offset+=4;
- ToModify.Size+=4;
-
- ToModify.continuity_counter++;
- if (ToModify.continuity_counter>0x0F)
- ToModify.continuity_counter=0x00;
- ToModify.Buffer[Pos+3]&=0xF0;
- ToModify.Buffer[Pos+3]|=ToModify.continuity_counter;
- }
- while (ToModify.Size-(ToModify.Offset+4)>188)
- ToModify.Size-=188;
-
- //Padding
- for (size_t Buffer_CRC_Pos=ToModify.End+4; Buffer_CRC_Pos<ToModify.Size; Buffer_CRC_Pos++)
- ToModify.Buffer[Buffer_CRC_Pos]=0xFF;
-
- Writer.Write(ToModify.Buffer, ToModify.Size);
-
- //Managing big chunks
- int16u PID=((ToModify.Buffer[1]&0x1F)<<8)|ToModify.Buffer[2]; //BigEndian2int16u(ToAdd+1)&0x1FFF;
- if (BigBuffers.find(PID)!=BigBuffers.end())
- BigBuffers.erase(BigBuffers.find(PID));
-}
-
-//***************************************************************************
-// Output_Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t File__Duplicate_MpegTs::Output_Buffer_Get (unsigned char** Output_Buffer)
-{
- return Writer.Output_Buffer_Get(Output_Buffer);
-}
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate_MpegTs.h b/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate_MpegTs.h
deleted file mode 100644
index d57ebd8c6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate_MpegTs.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef File__Duplicate_MpegTsH
-#define File__Duplicate_MpegTsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Duplicate/File__Duplicate__Base.h"
-#include "MediaInfo/Duplicate/File__Duplicate__Writer.h"
-#include <set>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File__Duplicate_MpegTs
-//***************************************************************************
-
-class File__Duplicate_MpegTs : public File__Duplicate__Base
-{
-public :
- //Constructor/Destructor
- File__Duplicate_MpegTs(const Ztring &Target);
-
- //Set
- bool Configure (const Ztring &Value, bool ToRemove);
-
- //Write
- bool Write (int16u PID, const int8u* ToAdd=NULL, size_t ToAdd_Size=0);
-
- //Output buffer
- size_t Output_Buffer_Get (unsigned char** Output_Buffer=NULL);
-
-//private :
- File__Duplicate__Writer Writer;
-
- //Configuration
- std::set<int16u> Wanted_program_numbers;
- std::set<int16u> Wanted_program_map_PIDs;
- std::set<int16u> Wanted_elementary_PIDs;
- std::set<int16u> Remove_program_numbers;
- std::set<int16u> Remove_program_map_PIDs;
- std::set<int16u> Remove_elementary_PIDs;
-
- //Current
- std::vector<int8u> program_map_PIDs;
- std::vector<int8u> elementary_PIDs;
- std::vector<int16u> elementary_PIDs_program_map_PIDs;
-
- struct buffer
- {
- int8u* Buffer;
- size_t Offset;
- size_t Begin; //After pointer_field
- size_t End; //Before CRC
- size_t Size;
- int8u continuity_counter;
- int8u version_number;
- int8u FromTS_version_number_Last;
- bool ConfigurationHasChanged;
-
- buffer()
- {
- Buffer=NULL;
- Offset=0;
- Begin=0;
- End=0;
- Size=0;
- continuity_counter=0xFF;
- version_number=0xFF;
- FromTS_version_number_Last=0xFF;
- ConfigurationHasChanged=true;
- }
- ~buffer()
- {
- delete[] Buffer; //Buffer=NULL;
- }
- };
-
- struct buffer_const
- {
- const int8u* Buffer;
- size_t Offset;
- size_t Begin; //After pointer_field
- size_t End; //Before CRC
- size_t Size;
-
- buffer_const()
- {
- Buffer=NULL;
- Offset=0;
- Begin=0;
- End=0;
- Size=0;
- }
- };
-
- struct buffer_big
- {
- int8u* Buffer;
- size_t Buffer_Size;
- size_t Buffer_Size_Max;
-
- buffer_big()
- {
- Buffer=NULL;
- Buffer_Size=0;
- Buffer_Size_Max=0;
- }
- ~buffer_big()
- {
- delete[] Buffer; //Buffer=NULL;
- }
- };
-
- //Data
- bool Manage_PAT(const int8u* ToAdd, size_t ToAdd_Size);
- bool Manage_PMT(const int8u* ToAdd, size_t ToAdd_Size);
-
- //Buffers
- buffer_const FromTS;
- std::map<int16u, buffer> PAT;
- std::map<int16u, buffer> PMT;
- std::map<int16u, buffer_big> BigBuffers; //key is pid
-
- //Helpers
- bool Parsing_Begin(const int8u* ToAdd, size_t ToAdd_Size, std::map<int16u, buffer> &ToModify);
- void Parsing_End(std::map<int16u, buffer> &ToModify);
-
- //Temp
- int16u StreamID;
-};
-
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Base.cpp b/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Base.cpp
deleted file mode 100644
index cbcefc1e5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Base.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Duplication helper for some specific formats
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-//---------------------------------------------------------------------------
-#include "MediaInfo/Duplicate/File__Duplicate__Base.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-File__Duplicate__Base::File__Duplicate__Base ()
-{
-}
-
-} //NameSpace
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Base.h b/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Base.h
deleted file mode 100644
index af68da6e6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Base.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef File__Duplicate__BaseH
-#define File__Duplicate__BaseH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <map>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File__Duplicate__Base
-//***************************************************************************
-
-class File__Duplicate__Base
-{
-public :
- //Constructor/Destructor
- File__Duplicate__Base();
- //~File__Duplicate__Base();
-
-};
-
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Writer.cpp b/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Writer.cpp
deleted file mode 100644
index 2e319f765..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Writer.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Duplication helper for some specific formats
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-//---------------------------------------------------------------------------
-#include "MediaInfo/Duplicate/File__Duplicate__Writer.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "ZenLib/ZtringList.h"
-#include "ZenLib/File.h"
-#include <cstring>
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File__Duplicate__Writer::File__Duplicate__Writer ()
-{
- //Out
- Output_Buffer_Configured=false;
-
- //Buffer
- Method=method_none;
- Buffer=NULL;
- Buffer_Size=0;
- Buffer_Size_Max=0;
- File_Pointer=NULL;
- Registered_Count=0; //Count of registerd streams
-}
-
-//---------------------------------------------------------------------------
-File__Duplicate__Writer::~File__Duplicate__Writer ()
-{
- //Buffer
- delete (File*)File_Pointer; //File_Pointer=NULL
-}
-
-//***************************************************************************
-// Configure
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Duplicate__Writer::Configure (const Ztring &Target)
-{
- //Form: "memory://pointer:size" <--Memory block is specified by user
- //WARNING: pointer must be in ***DECIMAL*** format.
- //Example: "memory://123456789:1316"
- if (Target.find(__T("memory://"))==0 && Target.find(__T(":"), 9)!=std::string::npos)
- {
- size_t SemiColumn_Pos=Target.find(__T(":"), 9);
- Ztring Address=Target.substr(9, SemiColumn_Pos-9);
- Ztring Size=Target.substr(SemiColumn_Pos+1);
- Method=method_buffer;
- Buffer=(int8u*)Address.To_int64u();
- Buffer_Size_Max=(size_t)Size.To_int64u();
- }
-
- //Form: "file://filename" or <--the exported filename is specified by user
- else if (Target.find(__T("file://"))==0)
- {
- Method=method_filename;
- File_Name=Target.substr(7, std::string::npos);
- }
-}
-
-//***************************************************************************
-// Write
-//***************************************************************************
-
-void File__Duplicate__Writer::Write (const int8u* ToAdd, size_t ToAdd_Size)
-{
- //Integrity
- if (ToAdd==NULL || ToAdd_Size==0)
- return;
-
- //Writing
- switch (Method)
- {
- //File based
- case method_filename :
- //Open the file if not yet done
- if (File_Pointer==NULL)
- {
- File_Pointer=new File;
- ((File*)File_Pointer)->Open(File_Name, File::Access_Write_Append);
- }
- //Write to the file
- ((File*)File_Pointer)->Write(ToAdd, ToAdd_Size);
- break;
-
- //Memory based
- case method_buffer :
- //Testing if enough place
- if (Buffer_Size+ToAdd_Size>Buffer_Size_Max)
- {
- Buffer_Size=0; //Buffer underrun, cleaning the buffer
- if (ToAdd_Size>Buffer_Size_Max)
- ToAdd_Size=0; //Buffer is too small, writing nothing
- }
-
- //Copying buffer
- std::memcpy(Buffer+Buffer_Size, ToAdd, ToAdd_Size);
- Buffer_Size+=ToAdd_Size;
- break;
- default : ;
- }
-}
-
-//***************************************************************************
-// Output_Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t File__Duplicate__Writer::Output_Buffer_Get ()
-{
- size_t Output_Buffer_Size=Buffer_Size;
- Buffer_Size=0; //Can be erased later...
- return Output_Buffer_Size;
-}
-
-//---------------------------------------------------------------------------
-size_t File__Duplicate__Writer::Output_Buffer_Get (unsigned char** Output_Buffer)
-{
- if (Output_Buffer)
- *Output_Buffer=Buffer;
- size_t Output_Buffer_Size=Buffer_Size;
- Buffer_Size=0; //Can be erased later...
- return Output_Buffer_Size;
-}
-
-} //NameSpace
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Writer.h b/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Writer.h
deleted file mode 100644
index 881d7e4a1..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Duplicate/File__Duplicate__Writer.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef File__Duplicate__WriterH
-#define File__Duplicate__WriterH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File__Duplicate__Writer
-//***************************************************************************
-
-class File__Duplicate__Writer
-{
-public :
- //Constructor/Destructor
- File__Duplicate__Writer();
- ~File__Duplicate__Writer();
-
- //Out
- bool Output_Buffer_Configured;
-
- //Configure
- void Configure (const Ztring &Target);
- void UnRegister(); //
-
- //Write
- void Write (const int8u* ToAdd, size_t ToAdd_Size);
-
- //Output buffer
- size_t Output_Buffer_Get ();
- size_t Output_Buffer_Get (unsigned char** Output_Buffer);
-
-private :
- //Buffer
- enum method
- {
- method_none,
- method_buffer,
- method_filename,
- };
- method Method;
- int8u* Buffer;
- size_t Buffer_Size;
- size_t Buffer_Size_Max;
- Ztring File_Name;
- void* File_Pointer; //ZenLib::File*
-public :
- size_t Registered_Count;
-};
-
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_EbuCore.cpp b/src/thirdparty/MediaInfo/MediaInfo/Export/Export_EbuCore.cpp
deleted file mode 100644
index d51b7973b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_EbuCore.cpp
+++ /dev/null
@@ -1,1192 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Export/Export_EbuCore.h"
-#include "MediaInfo/File__Analyse_Automatic.h"
-#include <ctime>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-int32u EbuCore_VideoCompressionCodeCS_termID(MediaInfo_Internal &MI, size_t StreamPos)
-{
- const Ztring &Format=MI.Get(Stream_Video, StreamPos, Video_Format);
- const Ztring &Version=MI.Get(Stream_Video, StreamPos, Video_Format_Version);
- const Ztring &Profile=MI.Get(Stream_Video, StreamPos, Video_Format_Profile);
-
- if (Format==__T("MPEG Video"))
- {
- if (Version.find(__T("1"))!=string::npos)
- return 10000;
- if (Version.find(__T("2"))!=string::npos)
- {
- if (Profile.find(__T("Simple@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20101;
- return 20100;
- }
- if (Profile.find(__T("Main@"))!=string::npos)
- {
- if (Profile.find(__T("Low"))!=string::npos)
- return 20201;
- if (Profile.find(__T("@Main"))!=string::npos)
- return 20202;
- if (Profile.find(__T("High 1440"))!=string::npos)
- return 20203;
- if (Profile.find(__T("High"))!=string::npos)
- return 20204;
- return 20200;
- }
- if (Profile.find(__T("SNR Scalable@"))!=string::npos)
- {
- if (Profile.find(__T("Low"))!=string::npos)
- return 20301;
- if (Profile.find(__T("Main"))!=string::npos)
- return 20302;
- return 20300;
- }
- if (Profile.find(__T("Spatial Sclable@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20401;
- if (Profile.find(__T("High 1440"))!=string::npos)
- return 20402;
- if (Profile.find(__T("High"))!=string::npos)
- return 20403;
- return 20400;
- }
- if (Profile.find(__T("High@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20501;
- if (Profile.find(__T("High 1440"))!=string::npos)
- return 20502;
- if (Profile.find(__T("High"))!=string::npos)
- return 20503;
- return 20500;
- }
- if (Profile.find(__T("Multi-view@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20601;
- return 20600;
- }
- if (Profile.find(__T("4:2:2@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20701;
- return 20700;
- }
- return 20000;
- }
- }
- if (Format==__T("MPEG-4 Visual"))
- {
- if (Profile.find(__T("Simple@"))==0)
- {
- if (Profile.find(__T("L0"))!=string::npos)
- return 30101;
- if (Profile.find(__T("L1"))!=string::npos)
- return 30102;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30103;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30104;
- if (Profile.find(__T("L4"))!=string::npos)
- return 30105;
- if (Profile.find(__T("L5"))!=string::npos)
- return 30106;
- return 30100;
- }
- if (Profile.find(__T("Simple Scalable@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30201;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30202;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30203;
- return 30200;
- }
- if (Profile.find(__T("Advanced Simple@"))==0)
- {
- if (Profile.find(__T("L0"))!=string::npos)
- return 30301;
- if (Profile.find(__T("L1"))!=string::npos)
- return 30302;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30303;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30304;
- if (Profile.find(__T("L4"))!=string::npos)
- return 30305;
- if (Profile.find(__T("L5"))!=string::npos)
- return 30306;
- return 30100;
- }
- if (Profile.find(__T("Core@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30401;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30402;
- return 30400;
- }
- if (Profile.find(__T("Core Scalable@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30501;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30502;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30503;
- return 30500;
- }
- if (Profile.find(__T("Advanced Core@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30601;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30602;
- return 30600;
- }
- if (Profile.find(__T("Main@"))==0)
- {
- if (Profile.find(__T("L2"))!=string::npos)
- return 30701;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30702;
- if (Profile.find(__T("L4"))!=string::npos)
- return 30703;
- return 30700;
- }
- if (Profile.find(__T("N-bit@"))==0)
- {
- if (Profile.find(__T("L2"))!=string::npos)
- return 30801;
- return 30800;
- }
- if (Profile.find(__T("Advanced Real Time Simple@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30901;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30902;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30903;
- if (Profile.find(__T("L4"))!=string::npos)
- return 30904;
- return 30900;
- }
- if (Profile.find(__T("Advanced Coding Efficiency@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31001;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31002;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31003;
- if (Profile.find(__T("L4"))!=string::npos)
- return 31004;
- return 31000;
- }
- if (Profile.find(__T("Simple Studio@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31101;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31102;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31103;
- if (Profile.find(__T("L4"))!=string::npos)
- return 31104;
- return 31100;
- }
- if (Profile.find(__T("Core Studio@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31201;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31202;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31203;
- if (Profile.find(__T("L4"))!=string::npos)
- return 31204;
- return 31200;
- }
- if (Profile.find(__T("Fine Granularity Scalable@"))==0)
- {
- if (Profile.find(__T("L0"))!=string::npos)
- return 31301;
- if (Profile.find(__T("L1"))!=string::npos)
- return 31302;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31303;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31304;
- if (Profile.find(__T("L4"))!=string::npos)
- return 31305;
- if (Profile.find(__T("L5"))!=string::npos)
- return 31306;
- return 31300;
- }
- if (Profile.find(__T("Simple Face Animation@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31401;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31402;
- return 31400;
- }
- if (Profile.find(__T("Simple FBA@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31501;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31502;
- return 31500;
- }
- if (Profile.find(__T("Basic Animated Texture@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31601;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31602;
- return 31600;
- }
- if (Profile.find(__T("Scalable Texture@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31701;
- return 31700;
- }
- if (Profile.find(__T("Advanced Scalable Texture@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31801;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31802;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31803;
- return 31800;
- }
- if (Profile.find(__T("Hybrid@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31901;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31902;
- return 31900;
- }
- return 30000;
- }
- if (Format==__T("JPEG"))
- return 50000;
- if (Format==__T("JPEG 2000"))
- {
- const Ztring &CodecID=MI.Get(Stream_Video, StreamPos, Video_CodecID);
- if (CodecID==__T("mjp2"))
- return 60100;
- if (CodecID==__T("mjs2"))
- return 60200;
- return 60000;
- }
- if (Format==__T("H.261"))
- return 70000;
- if (Format==__T("H.263"))
- return 80000;
-
- return 0;
-}
-
-Ztring EbuCore_VideoCompressionCodeCS_Name(int32u termID, MediaInfo_Internal &MI, size_t StreamPos) //xxyyzz: xx=main number, yy=sub-number, zz=sub-sub-number
-{
- switch (termID/10000)
- {
- case 1 : return __T("MPEG-1 Video");
- case 2 : switch ((termID%10000)/100)
- {
- case 1 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video Simple Profile @ Main Level");
- default: return __T("MPEG-2 Video Simple Profile");
- }
- case 2 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video Main Profile @ Low Level");
- case 2 : return __T("MPEG-2 Video Main Profile @ Main Level");
- case 3 : return __T("MPEG-2 Video Main Profile @ High 1440 Level");
- case 4 : return __T("MPEG-2 Video Main Profile @ High Level");
- default: return __T("MPEG-2 Video Main Profile");
- }
- case 3 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video SNR Scalable Profile @ Low Level");
- case 2 : return __T("MPEG-2 Video SNR Scalable Profile @ Main Level");
- default: return __T("MPEG-2 Video SNR Scalable Profile");
- }
- case 4 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video Spatial Scalable Profile @ Main Level");
- case 2 : return __T("MPEG-2 Video Spatial Scalable Profile @ High 1440 Level");
- case 3 : return __T("MPEG-2 Video Spatial Scalable Profile @ High Level");
- default: return __T("MPEG-2 Video Spatial Scalable Profile");
- }
- case 5 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video High Profile @ Main Level");
- case 2 : return __T("MPEG-2 Video High Profile @ High 1440 Level");
- case 3 : return __T("MPEG-2 Video High Profile @ High Level");
- default: return __T("MPEG-2 Video High Profile");
- }
- case 6 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video Multiview Profile @ Main Level");
- default: return __T("MPEG-2 Video Multiview Profile");
- }
- case 7 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video 4:2:2 Profile @ Main Level");
- default: return __T("MPEG-2 Video 4:2:2 Profile");
- }
- default: return __T("MPEG-2 Video");
- }
- case 3 : switch ((termID%10000)/100)
- {
- case 1 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Simple Profile @ Level 0");
- case 2 : return __T("MPEG-4 Visual Simple Profile @ Level 1");
- case 3 : return __T("MPEG-4 Visual Simple Profile @ Level 2");
- case 4 : return __T("MPEG-4 Visual Simple Profile @ Level 3");
- default: return __T("MPEG-4 Visual Simple Profile");
- }
- case 2 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Simple Scalable Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Simple Scalable Profile @ Level 2");
- default: return __T("MPEG-4 Visual Simple Scalable Profile");
- }
- case 3 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 0");
- case 2 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 1");
- case 3 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 2");
- case 4 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 3");
- case 5 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 4");
- case 6 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 5");
- default: return __T("MPEG-4 Advanced Visual Simple Profile");
- }
- case 4 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Core Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Core Profile @ Level 2");
- default: return __T("MPEG-4 Visual Core Profile");
- }
- case 5 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Core-Scalable Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Core-Scalable Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Core-Scalable Profile @ Level 3");
- default: return __T("MPEG-4 Visual Core-Scalable Profile");
- }
- case 6 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual AdvancedCore Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual AdvancedCore Profile @ Level 2");
- default: return __T("MPEG-4 Visual AdvancedCore Profile");
- }
- case 7 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Main Profile @ Level 2");
- case 2 : return __T("MPEG-4 Visual Main Profile @ Level 3");
- case 3 : return __T("MPEG-4 Visual Main Profile @ Level 4");
- default: return __T("MPEG-4 Visual Main Profile");
- }
- case 8 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual N-bit Profile @ Level 2");
- default: return __T("MPEG-4 Visual Main Profile");
- }
- case 9 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Advanced Real Time Simple Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Advanced Real Time Simple Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Advanced Real Time Simple Profile @ Level 3");
- case 4 : return __T("MPEG-4 Visual Advanced Real Time Simple Profile @ Level 4");
- default: return __T("MPEG-4 Visual Advanced Real Time Simple Profile");
- }
- case 10 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Advanced Coding Efficiency Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Advanced Coding Efficiency Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Advanced Coding Efficiency Profile @ Level 3");
- case 4 : return __T("MPEG-4 Visual Advanced Coding Efficiency Profile @ Level 4");
- default: return __T("MPEG-4 Visual Advanced Coding Efficiency Profile");
- }
- case 11 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Simple Studio Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Simple Studio Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Simple Studio Profile @ Level 3");
- case 4 : return __T("MPEG-4 Visual Simple Studio Profile @ Level 4");
- default: return __T("MPEG-4 Visual Simple Studio Profile");
- }
- case 12 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Core Studio Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Core Studio Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Core Studio Profile @ Level 3");
- case 4 : return __T("MPEG-4 Visual Core Studio Profile @ Level 4");
- default: return __T("MPEG-4 Visual Core Studio Profile");
- }
- case 13 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 0");
- case 2 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 1");
- case 3 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 2");
- case 4 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 3");
- case 5 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 4");
- case 6 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 5");
- default: return __T("MPEG-4 Visual Fine Granularity Scalable Profile");
- }
- case 14 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Simple Face Animation Profile @ Level 1");
- case 2 : return __T("MPEG-4 Simple Face Animation Profile @ Level 2");
- default: return __T("MPEG-4 Simple Face Animation Profile");
- }
- case 15 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Simple FBA Profile @ Level 1");
- case 2 : return __T("MPEG-4 Simple FBA Profile @ Level 2");
- default: return __T("MPEG-4 Simple FBA Profile");
- }
- case 16 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Basic Animated Texture Profile @ Level 1");
- case 2 : return __T("MPEG-4 Basic Animated Texture Profile @ Level 2");
- default: return __T("MPEG-4 Basic Animated Texture Profile");
- }
- case 17 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Advanced Scalable Texture Profile @ Level 1");
- default: return __T("MPEG-4 Advanced Scalable Texture Profile");
- }
- case 18 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Advanced Scalable Texture Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Advanced Scalable Texture Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Advanced Scalable Texture Profile @ Level 3");
- default: return __T("MPEG-4 Visual Advanced Scalable Texture Profile");
- }
- case 19 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Hybrid Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Hybrid Profile @ Level 2");
- default: return __T("MPEG-4 Visual Hybrid Profile");
- }
- default: return __T("MPEG-4 Visual");
- }
- case 4 : return __T("JPEG");
- case 5 : return __T("MJPEG");
- case 6 : return __T("JPEG2000");
- case 7 : return __T("H261");
- case 8 : return __T("H263");
- default: return MI.Get(Stream_Video, StreamPos, Video_Format);
- }
-}
-
-//---------------------------------------------------------------------------
-int32u EbuCore_AudioCompressionCodeCS_termID(MediaInfo_Internal &MI, size_t StreamPos)
-{
- const Ztring &Format=MI.Get(Stream_Audio, StreamPos, Audio_Format);
- const Ztring &Version=MI.Get(Stream_Audio, StreamPos, Audio_Format_Version);
- const Ztring &Profile=MI.Get(Stream_Audio, StreamPos, Audio_Format_Profile);
-
- if (Format==__T("AC-3"))
- return 40200;
- if (Format==__T("E-AC-3"))
- return 40300;
- if (Format==__T("Dolby E"))
- return 40600;
- if (Format==__T("DTS"))
- return 50000;
- if (Format==__T("MPEG Audio"))
- {
- if (Version.find(__T("1"))!=string::npos)
- {
- if (Profile.find(__T("1"))!=string::npos)
- return 70100;
- if (Profile.find(__T("2"))!=string::npos)
- return 70200;
- if (Profile.find(__T("3"))!=string::npos)
- return 70300;
- return 70000;
- }
- if (Version.find(__T("2"))!=string::npos)
- {
- if (Profile.find(__T("1"))!=string::npos)
- return 90100;
- if (Profile.find(__T("2"))!=string::npos)
- return 90200;
- if (Profile.find(__T("3"))!=string::npos)
- return 90300;
- return 90000;
- }
- return 0;
- }
- if (Format==__T("PCM"))
- return 110000;
-
- return 0;
-}
-
-Ztring EbuCore_AudioCompressionCodeCS_Name(int32u termID, MediaInfo_Internal &MI, size_t StreamPos) //xxyyzz: xx=main number, yy=sub-number, zz=sub-sub-number
-{
- switch (termID/10000)
- {
- case 4 : switch ((termID%10000)/100)
- {
- case 2 : return __T("AC3");
- case 3 : return __T("E-AC3");
- case 6 : return __T("Dolby E");
- default: return __T("Dolby");
- }
- case 5 : return __T("DTS");
- case 7 : switch ((termID%10000)/100)
- {
- case 1 : return __T("MPEG-1 Audio Layer I");
- case 2 : return __T("MPEG-1 Audio Layer II");
- case 3 : return __T("MPEG-1 Audio Layer III");
- default: return __T("MPEG-1 Audio");
- }
- case 9 : switch ((termID%10000)/100)
- {
- case 1 : return __T("MPEG-2 Audio Layer I");
- case 2 : return __T("MPEG-2 Audio Layer II");
- case 3 : return __T("MPEG-2 Audio Layer III");
- default: return __T("MPEG-2 Audio");
- }
- default: return MI.Get(Stream_Audio, StreamPos, Video_Format);
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Export_EbuCore::Export_EbuCore ()
-{
-}
-
-//---------------------------------------------------------------------------
-Export_EbuCore::~Export_EbuCore ()
-{
-}
-
-//***************************************************************************
-// Input
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring EbuCore_Transform_Video(Ztring &ToReturn, MediaInfo_Internal &MI, size_t StreamPos)
-{
- ToReturn+=__T("\t\t\t<ebucore:videoFormat");
- //if (!MI.Get(Stream_Video, StreamPos, Video_ID).empty())
- // ToReturn+=__T(" videoFormatId=\"")+MI.Get(Stream_Video, StreamPos, Video_ID)+__T("\"");
- if (!MI.Get(Stream_Video, StreamPos, Video_Format).empty())
- ToReturn+=__T(" videoFormatName=\"")+MI.Get(Stream_Video, StreamPos, Video_Format)+__T("\"");
- if (!MI.Get(Stream_Video, StreamPos, Video_Format_Version).empty())
- ToReturn+=__T(" videoFormatVersionId=\"")+MI.Get(Stream_Video, StreamPos, Video_Format_Version)+__T("\"");
- ToReturn+=__T(">\n");
-
- //width
- if (!MI.Get(Stream_Video, StreamPos, Video_Width).empty())
- {
- Ztring Width;
- if (!MI.Get(Stream_Video, StreamPos, Video_Width_Original).empty())
- Width=MI.Get(Stream_Video, StreamPos, Video_Width_Original);
- else
- Width=MI.Get(Stream_Video, StreamPos, Video_Width);
- ToReturn+=__T("\t\t\t\t<ebucore:width unit=\"pixel\">")+MI.Get(Stream_Video, StreamPos, Video_Width)+__T("</ebucore:width>\n");
- }
-
- //height
- if (!MI.Get(Stream_Video, StreamPos, Video_Height).empty())
- {
- Ztring Height;
- if (!MI.Get(Stream_Video, StreamPos, Video_Height_Original).empty())
- Height=MI.Get(Stream_Video, StreamPos, Video_Height_Original);
- else
- Height=MI.Get(Stream_Video, StreamPos, Video_Height);
- ToReturn+=__T("\t\t\t\t<ebucore:height unit=\"pixel\">")+Height+__T("</ebucore:height>\n");
- }
-
- //lines
- if (!MI.Get(Stream_Video, StreamPos, Video_Height_Original).empty())
- ToReturn+=__T("\t\t\t\t<ebucore:lines>")+MI.Get(Stream_Video, StreamPos, Video_Height_Original)+__T("</ebucore:lines>\n");
-
- //frameRate
- if (!MI.Get(Stream_Video, StreamPos, Video_FrameRate).empty())
- {
- Ztring FrameRateString=MI.Get(Stream_Video, StreamPos, Video_FrameRate);
- Ztring factorNumerator, factorDenominator;
- if (FrameRateString==__T("23.976"))
- {
- factorNumerator=__T("24000");
- factorDenominator=__T("1001");
- }
- if (FrameRateString==__T("29.970"))
- {
- factorNumerator=__T("30000");
- factorDenominator=__T("1001");
- }
- if (FrameRateString==__T("59.940"))
- {
- factorNumerator=__T("60000");
- factorDenominator=__T("1001");
- }
- if (factorNumerator.empty())
- {
- factorNumerator=Ztring::ToZtring(FrameRateString.To_float64()*1000, 0);
- factorDenominator=__T("1000");
- }
- ToReturn+=__T("\t\t\t\t<ebucore:frameRate");
- ToReturn+=__T(" factorNumerator=\"")+factorNumerator+__T("\"");
- ToReturn+=__T(" factorDenominator=\"")+factorDenominator+__T("\"");
- ToReturn+=__T(">")+Ztring::ToZtring(FrameRateString.To_float64(), 0);
- ToReturn+=__T("</ebucore:frameRate>\n");
- }
-
- //aspectRatio
- if (!MI.Get(Stream_Video, StreamPos, Video_DisplayAspectRatio).empty())
- {
- Ztring AspectRatioString=MI.Get(Stream_Video, StreamPos, Video_DisplayAspectRatio_String);
- size_t AspectRatioString_Pos=AspectRatioString.find(__T(':'));
- Ztring factorNumerator, factorDenominator;
- if (AspectRatioString_Pos!=(size_t)-1)
- {
- factorNumerator=AspectRatioString.substr(0, AspectRatioString_Pos);
- factorDenominator=AspectRatioString.substr(AspectRatioString_Pos+1);
- }
- if (factorNumerator.empty())
- ToReturn+=__T("\t\t\t\t<ebucore:aspectRatio typeLabel=\"display\">")+MI.Get(Stream_Video, StreamPos, Video_DisplayAspectRatio)+__T("</ebucore:aspectRatio>\n");
- else
- {
- ToReturn+=__T("\t\t\t\t<ebucore:aspectRatio typeLabel=\"display\">\n");
- ToReturn+=__T("\t\t\t\t\t<ebucore:factorNumerator>")+factorNumerator+__T("</ebucore:factorNumerator>\n");
- ToReturn+=__T("\t\t\t\t\t<ebucore:factorDenominator>")+factorDenominator+__T("</ebucore:factorDenominator>\n");
- ToReturn+=__T("\t\t\t\t</ebucore:aspectRatio>\n");
- }
- }
-
- //videoEncoding
- //if (!MI.Get(Stream_Video, StreamPos, Video_Format_Profile).empty())
- {
- int32u TermID=EbuCore_VideoCompressionCodeCS_termID(MI, StreamPos);
- Ztring typeLabel;
- Ztring TermID_String;
- if (TermID)
- {
- typeLabel=EbuCore_VideoCompressionCodeCS_Name(TermID, MI, StreamPos);
- TermID_String=Ztring::ToZtring(TermID/10000);
- if (TermID%10000)
- {
- TermID_String+=__T('.');
- TermID_String+=Ztring::ToZtring((TermID%10000)/100);
- if (TermID%100)
- {
- TermID_String+=__T('.');
- TermID_String+=Ztring::ToZtring(TermID%100);
- }
- }
- }
- else
- typeLabel=MI.Get(Stream_Video, StreamPos, Video_Format_Profile);
- ToReturn+=__T("\t\t\t\t<ebucore:videoEncoding typeLabel=\"")+typeLabel+__T("\"");
- if (!TermID_String.empty())
- ToReturn+=__T(" typeLink=\"http://www.ebu.ch/metadata/cs/ebu_VideoCompressionCodeCS.xml#")+TermID_String+__T("\"");
- ToReturn+=__T("/>\n");
- }
-
- //codec
- if (!MI.Get(Stream_Video, StreamPos, Video_CodecID).empty() || !MI.Get(Stream_Video, StreamPos, Video_Format_Commercial_IfAny).empty())
- {
- ToReturn+=__T("\t\t\t\t<ebucore:codec>\n");
- if (!MI.Get(Stream_Video, StreamPos, Video_CodecID).empty())
- {
- ToReturn+=__T("\t\t\t\t\t<ebucore:codecIdentifier>\n");
- ToReturn+=__T("\t\t\t\t\t\t<dc:identifier>")+MI.Get(Stream_Video, StreamPos, Video_CodecID)+__T("</dc:identifier>\n");
- ToReturn+=__T("\t\t\t\t\t</ebucore:codecIdentifier>\n");
- }
- if (!MI.Get(Stream_Video, StreamPos, Video_Format_Commercial_IfAny).empty())
- ToReturn+=__T("\t\t\t\t\t<ebucore:name>")+MI.Get(Stream_Video, StreamPos, Video_Format_Commercial_IfAny)+__T("</ebucore:name>\n");
- ToReturn+=__T("\t\t\t\t</ebucore:codec>\n");
- }
-
- //bitRate
- if (!MI.Get(Stream_Video, StreamPos, Video_BitRate).empty())
- ToReturn+=__T("\t\t\t\t<ebucore:bitRate>")+MI.Get(Stream_Video, StreamPos, Video_BitRate)+__T("</ebucore:bitRate>\n");
-
- //bitRateMax
- if (!MI.Get(Stream_Video, StreamPos, Video_BitRate_Maximum).empty())
- ToReturn+=__T("\t\t\t\t<ebucore:bitRateMax>")+MI.Get(Stream_Video, StreamPos, Video_BitRate_Maximum)+__T("</ebucore:bitRateMax>\n");
-
- //bitRateMode
- if (!MI.Get(Stream_Video, StreamPos, Video_BitRate_Mode).empty())
- {
- Ztring bitRateMode=MI.Get(Stream_Video, StreamPos, Video_BitRate_Mode);
- if (bitRateMode==__T("CBR"))
- bitRateMode=__T("constant");
- if (bitRateMode==__T("VBR"))
- bitRateMode=__T("variable");
- ToReturn+=__T("\t\t\t\t<ebucore:bitRateMode>")+bitRateMode+__T("</ebucore:bitRateMode>\n");
- }
-
- //scanningFormat
- if (!MI.Get(Stream_Video, StreamPos, Video_ScanType).empty())
- {
- Ztring ScanType=MI.Get(Stream_Video, 0, Video_ScanType);
- if (ScanType==__T("MBAFF"))
- ScanType=__T("Interlaced");
- ScanType.MakeLowerCase();
- ToReturn+=__T("\t\t\t\t<ebucore:scanningFormat>")+ScanType+__T("</ebucore:scanningFormat>\n");
- }
-
- //scanningOrder
- if (!MI.Get(Stream_Video, StreamPos, Video_ScanOrder).empty())
- {
- Ztring ScanOrder=MI.Get(Stream_Video, 0, Video_ScanOrder);
- if (ScanOrder==__T("TFF"))
- ScanOrder=__T("top");
- if (ScanOrder==__T("BFF"))
- ScanOrder=__T("bottom");
- if (ScanOrder.find(__T("Pulldown"))!=string::npos)
- ScanOrder=__T("pulldown");
- ToReturn+=__T("\t\t\t\t<ebucore:scanningOrder>")+ScanOrder+__T("</ebucore:scanningOrder>\n");
- }
-
- //videoTrack
- if (!MI.Get(Stream_Video, StreamPos, Video_ID).empty() || !MI.Get(Stream_Video, StreamPos, Video_Title).empty())
- {
- ToReturn+=__T("\t\t\t\t<ebucore:videoTrack");
- if (!MI.Get(Stream_Video, StreamPos, Video_ID).empty())
- ToReturn+=__T(" trackId=\"")+MI.Get(Stream_Video, StreamPos, Video_ID)+__T("\"");
- if (!MI.Get(Stream_Video, StreamPos, Video_Title).empty())
- ToReturn+=__T(" trackName=\"")+MI.Get(Stream_Video, StreamPos, Video_Title)+__T("\"");
- ToReturn+=__T("/>\n");
- }
-
- //flag_3D
- if (!MI.Get(Stream_Video, StreamPos, Video_MultiView_Count).empty())
- ToReturn+=__T("\t\t\t\t<ebucore:flag_3D>true</ebucore:flag_3D>\n");
-
- ToReturn+=__T("\t\t\t</ebucore:videoFormat>\n");
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-Ztring EbuCore_Transform_Audio(Ztring &ToReturn, MediaInfo_Internal &MI, size_t StreamPos)
-{
- ToReturn+=__T("\t\t\t<ebucore:audioFormat");
- //if (!MI.Get(Stream_Audio, StreamPos, Audio_ID).empty())
- // ToReturn+=__T(" audioFormatId=\"")+MI.Get(Stream_Audio, StreamPos, Audio_ID)+__T("\"");
- if (!MI.Get(Stream_Audio, StreamPos, Audio_Format).empty())
- ToReturn+=__T(" audioFormatName=\"")+MI.Get(Stream_Audio, StreamPos, Audio_Format)+__T("\"");
- if (!MI.Get(Stream_Audio, StreamPos, Audio_Format_Version).empty())
- ToReturn+=__T(" audioFormatVersionId=\"")+MI.Get(Stream_Audio, StreamPos, Audio_Format_Version)+__T("\"");
- ToReturn+=__T(">\n");
-
- //audioEncoding
- //if (!MI.Get(Stream_Audio, StreamPos, Audio_Format_Profile).empty())
- {
- int32u TermID=EbuCore_AudioCompressionCodeCS_termID(MI, StreamPos);
- Ztring typeLabel;
- Ztring TermID_String;
- if (TermID)
- {
- typeLabel=EbuCore_AudioCompressionCodeCS_Name(TermID, MI, StreamPos);
- TermID_String=Ztring::ToZtring(TermID/10000);
- if (TermID%10000)
- {
- TermID_String+=__T('.');
- TermID_String+=Ztring::ToZtring((TermID%10000)/100);
- if (TermID%100)
- {
- TermID_String+=__T('.');
- TermID_String+=Ztring::ToZtring(TermID%100);
- }
- }
- }
- else
- typeLabel=MI.Get(Stream_Audio, StreamPos, Audio_Format_Profile);
- ToReturn+=__T("\t\t\t\t<ebucore:audioEncoding typeLabel=\"")+typeLabel+__T("\"");
- if (!TermID_String.empty())
- ToReturn+=__T(" typeLink=\"http://www.ebu.ch/metadata/cs/ebu_AudioCompressionCodeCS.xml#")+TermID_String+__T("\"");
- ToReturn+=__T("/>\n");
- }
-
- //codec
- if (!MI.Get(Stream_Audio, StreamPos, Audio_CodecID).empty() || !MI.Get(Stream_Audio, StreamPos, Audio_Format_Commercial_IfAny).empty())
- {
- ToReturn+=__T("\t\t\t\t<ebucore:codec>\n");
- if (!MI.Get(Stream_Audio, StreamPos, Audio_CodecID).empty())
- {
- ToReturn+=__T("\t\t\t\t\t<ebucore:codecIdentifier>\n");
- ToReturn+=__T("\t\t\t\t\t\t<dc:identifier>")+MI.Get(Stream_Audio, StreamPos, Audio_CodecID)+__T("</dc:identifier>\n");
- ToReturn+=__T("\t\t\t\t\t</ebucore:codecIdentifier>\n");
- }
- if (!MI.Get(Stream_Audio, StreamPos, Audio_Format_Commercial_IfAny).empty())
- ToReturn+=__T("\t\t\t\t\t<ebucore:name>")+MI.Get(Stream_Audio, StreamPos, Audio_Format_Commercial_IfAny)+__T("</ebucore:name>\n");
- ToReturn+=__T("\t\t\t\t</ebucore:codec>\n");
- }
-
- //audioTrackConfiguration //TODO
- if (!MI.Get(Stream_Audio, StreamPos, Audio_ChannelPositions).empty())
- {
- Ztring ChannelPositions=MI.Get(Stream_Audio, StreamPos, Audio_ChannelPositions);
- ToReturn+=__T("\t\t\t\t<ebucore:audioTrackConfiguration typeLabel=\"")+ChannelPositions+__T("\"/>\n");
- }
-
- //samplingRate
- if (!MI.Get(Stream_Audio, StreamPos, Audio_SamplingRate).empty())
- ToReturn+=__T("\t\t\t\t<ebucore:samplingRate>")+MI.Get(Stream_Audio, StreamPos, Audio_SamplingRate)+__T("</ebucore:samplingRate>\n");
-
- //sampleSize
- if (!MI.Get(Stream_Audio, StreamPos, Audio_BitDepth).empty())
- ToReturn+=__T("\t\t\t\t<ebucore:sampleSize>")+MI.Get(Stream_Audio, StreamPos, Audio_BitDepth)+__T("</ebucore:sampleSize>\n");
-
- //bitRate
- if (!MI.Get(Stream_Audio, StreamPos, Audio_BitRate).empty())
- ToReturn+=__T("\t\t\t\t<ebucore:bitRate>")+MI.Get(Stream_Audio, StreamPos, Audio_BitRate)+__T("</ebucore:bitRate>\n");
-
- //bitRateMax
- if (!MI.Get(Stream_Audio, StreamPos, Audio_BitRate_Maximum).empty())
- ToReturn+=__T("\t\t\t\t<ebucore:bitRateMax>")+MI.Get(Stream_Audio, StreamPos, Audio_BitRate_Maximum)+__T("</ebucore:bitRateMax>\n");
-
- //bitRateMode
- if (!MI.Get(Stream_Audio, StreamPos, Audio_BitRate_Mode).empty())
- {
- Ztring bitRateMode=MI.Get(Stream_Audio, StreamPos, Audio_BitRate_Mode);
- if (bitRateMode==__T("CBR"))
- bitRateMode=__T("constant");
- if (bitRateMode==__T("VBR"))
- bitRateMode=__T("variable");
- ToReturn+=__T("\t\t\t\t<ebucore:bitRateMode>")+bitRateMode+__T("</ebucore:bitRateMode>\n");
- }
-
- //audioTrack
- if (!MI.Get(Stream_Audio, StreamPos, Audio_ID).empty() || !MI.Get(Stream_Audio, StreamPos, Audio_Title).empty() || !MI.Get(Stream_Audio, StreamPos, Audio_Language).empty())
- {
- ToReturn+=__T("\t\t\t\t<ebucore:audioTrack");
- if (!MI.Get(Stream_Audio, StreamPos, Audio_ID).empty())
- {
- Ztring ID=MI.Get(Stream_Audio, StreamPos, Audio_ID);
- ID.FindAndReplace(__T(" / "), __T("_"));
- ToReturn+=__T(" trackId=\"")+ID+__T("\"");
- }
- if (!MI.Get(Stream_Audio, StreamPos, Audio_Title).empty())
- ToReturn+=__T(" trackName=\"")+MI.Get(Stream_Audio, StreamPos, Audio_Title)+__T("\"");
- if (!MI.Get(Stream_Audio, StreamPos, Audio_Language).empty())
- ToReturn+=__T(" trackLanguage=\"")+MI.Get(Stream_Audio, StreamPos, Audio_Language)+__T("\"");
- ToReturn+=__T("/>\n");
- }
-
- //channels
- if (!MI.Get(Stream_Audio, StreamPos, Audio_Channel_s_).empty())
- ToReturn+=__T("\t\t\t\t<ebucore:channels>")+MI.Get(Stream_Audio, StreamPos, Audio_Channel_s_)+__T("</ebucore:channels>\n");
-
- ToReturn+=__T("\t\t\t</ebucore:audioFormat>\n");
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-Ztring EbuCore_Transform_Text(Ztring &ToReturn, MediaInfo_Internal &MI, size_t StreamPos)
-{
- ToReturn+=__T("\t\t\t<ebucore:dataFormat");
- //if (!MI.Get(Stream_Text, StreamPos, Text_ID).empty())
- // ToReturn+=__T(" dataFormatId=\"")+MI.Get(Stream_Text, StreamPos, Text_ID)+__T("\"");
- if (!MI.Get(Stream_Text, StreamPos, Text_Format_Version).empty())
- ToReturn+=__T(" dataFormatVersionId=\"")+MI.Get(Stream_Text, StreamPos, Text_Format_Version)+__T("\"");
- if (!MI.Get(Stream_Text, StreamPos, Text_Format).empty())
- ToReturn+=__T(" dataFormatName=\"")+MI.Get(Stream_Text, StreamPos, Text_Format)+__T("\"");
- if (!MI.Get(Stream_Text, StreamPos, Text_ID).empty())
- ToReturn+=__T(" dataTrackId=\"")+MI.Get(Stream_Text, StreamPos, Text_ID)+__T("\"");
- ToReturn+=__T(">\n");
-
- //subtitlingTrack
- {
- ToReturn+=__T("\t\t\t\t<ebucore:captioningFormat");
- if (!MI.Get(Stream_Text, StreamPos, Text_Format).empty())
- ToReturn+=__T(" captioningFormatName=\"")+MI.Get(Stream_Text, StreamPos, Text_Format)+__T("\"");
- if (!MI.Get(Stream_Text, StreamPos, Text_ID).empty())
- ToReturn+=__T(" trackId=\"")+MI.Get(Stream_Text, StreamPos, Text_ID)+__T("\"");
- if (!MI.Get(Stream_Text, StreamPos, Text_Title).empty())
- ToReturn+=__T(" typeLabel=\"")+MI.Get(Stream_Text, StreamPos, Text_Title)+__T("\"");
- if (!MI.Get(Stream_Text, StreamPos, Text_Language).empty())
- ToReturn+=__T(" language=\"")+MI.Get(Stream_Text, StreamPos, Text_Language)+__T("\"");
- ToReturn+=__T("/>\n");
- if (!MI.Get(Stream_Text, StreamPos, Text_CodecID).empty() || !MI.Get(Stream_Text, StreamPos, Text_Format_Commercial_IfAny).empty())
- {
- ToReturn+=__T("\t\t\t\t<ebucore:codec>\n");
- if (!MI.Get(Stream_Text, StreamPos, Text_CodecID).empty())
- {
- ToReturn+=__T("\t\t\t\t\t<ebucore:codecIdentifier>\n");
- ToReturn+=__T("\t\t\t\t\t\t<dc:identifier>")+MI.Get(Stream_Text, StreamPos, Text_CodecID)+__T("</dc:identifier>\n");
- ToReturn+=__T("\t\t\t\t\t</ebucore:codecIdentifier>\n");
- }
- if (!MI.Get(Stream_Text, StreamPos, Text_Format_Commercial_IfAny).empty())
- ToReturn+=__T("\t\t\t\t\t<ebucore:name>")+MI.Get(Stream_Text, StreamPos, Text_Format_Commercial_IfAny)+__T("</ebucore:name>\n");
- ToReturn+=__T("\t\t\t\t</ebucore:codec>\n");
- }
- }
-
- ToReturn+=__T("\t\t\t</ebucore:dataFormat>\n");
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-Ztring Export_EbuCore::Transform(MediaInfo_Internal &MI)
-{
- //Current date/time is ISO format
- time_t Seconds=time(NULL);
- Ztring DateTime; DateTime.Date_From_Seconds_1970((int32u)Seconds);
- DateTime.FindAndReplace(__T("UTC "), __T(""));
- DateTime.FindAndReplace(__T(" "), __T("T"));
- Ztring Date=DateTime.substr(0, 10);
- Ztring Time=DateTime.substr(11, 8);
-
- Ztring ToReturn;
-
- //ebuCoreMain
- ToReturn+=__T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
- ToReturn+=__T("<!-- Generated by ")+MediaInfoLib::Config.Info_Version_Get()+__T(" -->\n");
- ToReturn+=__T("<ebucore:ebuCoreMain xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:ebucore=\"urn:ebu:metadata-schema:ebuCore_2014\" xmlns:xalan=\"http://xml.apache.org/xalan\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"urn:ebu:metadata-schema:ebuCore_2014 http://www.ebu.ch/metadata/schemas/EBUCore/20140318/EBU_CORE_20140318.xsd\" version=\"1.5\" dateLastModified=\"")+Date+__T("\" timeLastModified=\"")+Time+__T("Z\">\n");
-
- //coreMetadata
- ToReturn+=__T("\t<ebucore:coreMetadata>\n");
-
- //format
- ToReturn+=__T("\t\t<ebucore:format>\n");
-
- //format - videoFormat
- for (size_t Pos=0; Pos<MI.Count_Get(Stream_Video); Pos++)
- EbuCore_Transform_Video(ToReturn, MI, Pos);
-
- //format - audioFormat
- for (size_t Pos=0; Pos<MI.Count_Get(Stream_Audio); Pos++)
- EbuCore_Transform_Audio(ToReturn, MI, Pos);
-
- //format - containerFormat
- ToReturn+=__T("\t\t\t<ebucore:containerFormat");
- if (!MI.Get(Stream_General, 0, General_Format).empty())
- ToReturn+=__T(" formatLabel=\"")+MI.Get(Stream_General, 0, General_Format)+__T("\"");
- if (!MI.Get(Stream_General, 0, General_ID).empty())
- ToReturn+=__T(" containerFormatId=\"")+MI.Get(Stream_General, 0, General_ID)+__T("\"");
- if (!MI.Get(Stream_General, 0, General_CodecID).empty() || !MI.Get(Stream_General, 0, General_Format_Commercial_IfAny).empty())
- {
- ToReturn+=__T(">\n");
- if (!MI.Get(Stream_General, 0, General_CodecID).empty() || (!MI.Get(Stream_General, 0, General_Format_Commercial_IfAny).empty()))
- {
- ToReturn+=__T("\t\t\t\t<ebucore:codec>\n");
- if (!MI.Get(Stream_General, 0, General_CodecID).empty())
- {
- ToReturn+=__T("\t\t\t\t\t<ebucore:codecIdentifier>\n");
- ToReturn+=__T("\t\t\t\t\t\t<dc:identifier>")+MI.Get(Stream_General, 0, General_CodecID)+__T("</dc:identifier>\n");
- ToReturn+=__T("\t\t\t\t\t</ebucore:codecIdentifier>\n");
- }
- if (!MI.Get(Stream_General, 0, General_Format_Commercial_IfAny).empty())
- ToReturn+=__T("\t\t\t\t\t<ebucore:name>")+MI.Get(Stream_General, 0, General_Format_Commercial_IfAny)+__T("</ebucore:name>\n");
- ToReturn+=__T("\t\t\t\t</ebucore:codec>\n");
- }
- ToReturn+=__T("\t\t\t</ebucore:containerFormat>\n");
- }
- else
- ToReturn+=__T("/>\n");
-
- //format - dataFormat
- for (size_t Pos=0; Pos<MI.Count_Get(Stream_Text); Pos++)
- EbuCore_Transform_Text(ToReturn, MI, Pos);
-
- //format - start
- bool startCount=false;
- for (size_t StreamPos=0; StreamPos<MI.Count_Get(Stream_Other); ++StreamPos)
- {
- if (MI.Get(Stream_Other, StreamPos, Other_Type)==__T("Time code"))
- {
- if (startCount)
- ToReturn+=__T("\t\t\t<!-- (Not in XSD)\n");
- if (!(!MI.Get(Stream_Video, StreamPos, Video_ID).empty() || !MI.Get(Stream_Video, StreamPos, Video_Title).empty())) //No extra out of spec fields
- ToReturn+=__T("\t\t\t<ebucore:start>\n");
- else if (startCount) //No out of spec in all cases
- {
- ToReturn+=__T("\t\t\t<ebucore:start");
- if (!MI.Get(Stream_Video, StreamPos, Video_ID).empty() || !MI.Get(Stream_Video, StreamPos, Video_Title).empty())
- {
- if (!MI.Get(Stream_Video, StreamPos, Video_ID).empty())
- ToReturn+=__T(" trackId=\"")+MI.Get(Stream_Video, StreamPos, Video_ID)+__T("\"");
- if (!MI.Get(Stream_Video, StreamPos, Video_Title).empty())
- ToReturn+=__T(" trackName=\"")+MI.Get(Stream_Video, StreamPos, Video_Title)+__T("\"");
- }
- ToReturn+=__T(">\n");
- }
- else //Extra out of spec fields
- {
- ToReturn+=__T("\t\t\t<ebucore:start><!-- (Not in XSD)");
- if (!MI.Get(Stream_Video, StreamPos, Video_ID).empty())
- ToReturn+=__T(" trackId=\"")+MI.Get(Stream_Video, StreamPos, Video_ID)+__T("\"");
- if (!MI.Get(Stream_Video, StreamPos, Video_Title).empty())
- ToReturn+=__T(" trackName=\"")+MI.Get(Stream_Video, StreamPos, Video_Title)+__T("\"");
- ToReturn+=__T("-->\n");
- }
- ToReturn+=__T("\t\t\t\t<ebucore:timecode>")+MI.Get(Stream_Other, StreamPos, Other_TimeCode_FirstFrame)+__T("</ebucore:timecode>\n");
- if (!MI.Get(Stream_Other, 0, Other_MuxingMode).empty())
- {
- if (!startCount)
- ToReturn+=__T("\t\t\t\t<!-- (Not in XSD)\n");
- ToReturn+=__T("\t\t\t\t<ebucore:source>")+MI.Get(Stream_Other, StreamPos, Other_MuxingMode)+__T("</ebucore:source>\n");
- if (!startCount)
- ToReturn+=__T("\t\t\t\t-->\n");
- }
- ToReturn+=__T("\t\t\t</ebucore:start>\n");
- if (startCount)
- ToReturn+=__T("\t\t\t-->\n");
- startCount=true;
- }
- }
-
- //format - duration
- if (!MI.Get(Stream_General, 0, General_Duration).empty())
- {
- float64 DurationS=MI.Get(Stream_General, 0, General_Duration).To_float64()/1000;
- int64u DurationH=(int64u)(DurationS/60/60);
- DurationS-=DurationH*60*60;
- int64u DurationM=(int64u)(DurationS/60);
- DurationS-=DurationM*60;
- Ztring Duration;
- if (DurationH)
- Duration+=Ztring::ToZtring(DurationH)+__T('H');
- if (DurationM)
- Duration+=Ztring::ToZtring(DurationM)+__T('M');
- Duration+=Ztring::ToZtring(DurationS, 3)+__T('S');
- ToReturn+=__T("\t\t\t<ebucore:duration>\n");
- ToReturn+=__T("\t\t\t\t<ebucore:normalPlayTime>PT")+Duration+__T("</ebucore:normalPlayTime>\n");
- ToReturn+=__T("\t\t\t</ebucore:duration>\n");
- }
-
- //format - fileSize
- if (!MI.Get(Stream_General, 0, General_FileSize).empty())
- ToReturn+=__T("\t\t\t<ebucore:fileSize>")+MI.Get(Stream_General, 0, General_FileSize)+__T("</ebucore:fileSize>\n");
-
- //format - fileName
- if (!MI.Get(Stream_General, 0, General_FileName).empty())
- {
- Ztring Name=MI.Get(Stream_General, 0, General_FileName);
- if (!MI.Get(Stream_General, 0, General_FileExtension).empty())
- {
- Name+=__T('.');
- Name+=MI.Get(Stream_General, 0, General_FileExtension);
- }
- Name.FindAndReplace(__T("&"), __T("&amp;"), 0, Ztring_Recursive);
- Name.FindAndReplace(__T("<"), __T("&lt;"), 0, Ztring_Recursive);
- Name.FindAndReplace(__T(">"), __T("&gt;"), 0, Ztring_Recursive);
- Name.FindAndReplace(__T("\""), __T("&quot;"), 0, Ztring_Recursive);
- Name.FindAndReplace(__T("'"), __T("&apos;"), 0, Ztring_Recursive);
- ToReturn+=__T("\t\t\t<ebucore:fileName>")+Name+__T("</ebucore:fileName>\n");
- }
-
- //format - locator
- if (!MI.Get(Stream_General, 0, General_CompleteName).empty())
- {
- Ztring Name=MI.Get(Stream_General, 0, General_CompleteName);
- Name.FindAndReplace(__T("&"), __T("&amp;"), 0, Ztring_Recursive);
- Name.FindAndReplace(__T("<"), __T("&lt;"), 0, Ztring_Recursive);
- Name.FindAndReplace(__T(">"), __T("&gt;"), 0, Ztring_Recursive);
- Name.FindAndReplace(__T("\""), __T("&quot;"), 0, Ztring_Recursive);
- Name.FindAndReplace(__T("'"), __T("&apos;"), 0, Ztring_Recursive);
- ToReturn+=__T("\t\t\t<ebucore:locator>")+Name+__T("</ebucore:locator>\n");
- }
-
- //format - technicalAttributeString - overallBitRate
- if (!MI.Get(Stream_General, 0, General_OverallBitRate).empty())
- {
- ToReturn+=__T("\t\t\t<ebucore:technicalAttributeString typeLabel=\"overallBitRate\">\">")+MI.Get(Stream_General, 0, General_OverallBitRate)+__T("</ebucore:technicalAttributeString>\n");
- }
-
- //format - dateCreated
- if (!MI.Get(Stream_General, 0, General_Encoded_Date).empty())
- {
- Ztring DateTime=MI.Get(Stream_General, 0, General_Encoded_Date);
- DateTime.FindAndReplace(__T("UTC "), __T(""));
- DateTime.FindAndReplace(__T(" "), __T("T"));
- Ztring Date=DateTime.substr(0, 10);
- Ztring Time=DateTime.substr(11, 8);
-
- ToReturn+=__T("\t\t\t<ebucore:dateCreated startDate=\"")+Date+__T("\" startTime=\"")+Time+__T("Z\"/>\n");
- }
-
- //format - dateModified
- if (!MI.Get(Stream_General, 0, General_Tagged_Date).empty())
- {
- Ztring DateTime=MI.Get(Stream_General, 0, General_Tagged_Date);
- DateTime.FindAndReplace(__T("UTC "), __T(""));
- DateTime.FindAndReplace(__T(" "), __T("T"));
- Ztring Date=DateTime.substr(0, 10);
- Ztring Time=DateTime.substr(11, 8);
-
- ToReturn+=__T("\t\t\t<ebucore:dateModified startDate=\"")+Date+__T("\" startTime=\"")+Time+__T("Z\"/>\n");
- }
-
- //format
- ToReturn+=__T("\t\t</ebucore:format>\n");
-
- //coreMetadata
- ToReturn+=__T("\t</ebucore:coreMetadata>\n");
-
- //ebuCoreMain
- ToReturn+=__T("</ebucore:ebuCoreMain>\n");
-
- //Carriage return
- ToReturn.FindAndReplace(__T("\n"), EOL, 0, Ztring_Recursive);
-
- return ToReturn;
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_EbuCore.h b/src/thirdparty/MediaInfo/MediaInfo/Export/Export_EbuCore.h
deleted file mode 100644
index 27a0b1d21..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_EbuCore.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef Export_EbuCoreH
-#define Export_EbuCoreH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Internal.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-/// @brief Export_EbuCore
-//***************************************************************************
-
-class Export_EbuCore
-{
-public :
- //Constructeur/Destructeur
- Export_EbuCore ();
- ~Export_EbuCore ();
-
- //Input
- Ztring Transform(MediaInfo_Internal &MI);
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_Mpeg7.cpp b/src/thirdparty/MediaInfo/MediaInfo/Export/Export_Mpeg7.cpp
deleted file mode 100644
index 1df5605eb..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_Mpeg7.cpp
+++ /dev/null
@@ -1,1548 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Export/Export_Mpeg7.h"
-#include "MediaInfo/File__Analyse_Automatic.h"
-#include <ctime>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const Char* Mpeg7_Type(MediaInfo_Internal &MI) //TO ADAPT
-{
- if (MI.Count_Get(Stream_Image))
- {
- if (MI.Count_Get(Stream_Video) || MI.Count_Get(Stream_Audio))
- return __T("Multimedia");
- else
- return __T("Image");
- }
- else if (MI.Count_Get(Stream_Video))
- {
- if (MI.Count_Get(Stream_Audio))
- return __T("AudioVisual");
- else
- return __T("Video");
- }
- else if (MI.Count_Get(Stream_Audio))
- return __T("Audio");
-
- //Not known
- const Ztring &Format=MI.Get(Stream_General, 0, General_Format);
- if (Format==__T("AVI") || Format==__T("DV") || Format==__T("MPEG-4") || Format==__T("MPEG-PS") || Format==__T("MPEG-TS") || Format==__T("QuickTime") || Format==__T("Windows Media"))
- return __T("Video");
- if (Format==__T("MPEG Audio") || Format==__T("Wave"))
- return __T("Audio");
- if (Format==__T("BMP") || Format==__T("GIF") || Format==__T("JPEG") || Format==__T("JPEG 2000") || Format==__T("JPEG 2000") || Format==__T("PNG") || Format==__T("TIFF"))
- return __T("Image");
- return __T("Multimedia");
-}
-
-//---------------------------------------------------------------------------
-int32u Mpeg7_ContentCS_termID(MediaInfo_Internal &MI)
-{
- if (MI.Count_Get(Stream_Image))
- {
- if (MI.Count_Get(Stream_Video) || MI.Count_Get(Stream_Audio))
- return 20000;
- else
- return 40100;
- }
- else if (MI.Count_Get(Stream_Video))
- {
- if (MI.Count_Get(Stream_Audio))
- return 20000;
- else
- return 40200;
- }
- else if (MI.Count_Get(Stream_Audio))
- return 10000;
-
- //Not known
- const Ztring &Format=MI.Get(Stream_General, 0, General_Format);
- if (Format==__T("AVI") || Format==__T("DV") || Format==__T("MPEG-4") || Format==__T("MPEG-PS") || Format==__T("MPEG-TS") || Format==__T("QuickTime") || Format==__T("Windows Media"))
- return 40200;
- if (Format==__T("MPEG Audio") || Format==__T("Wave"))
- return 10000;
- if (Format==__T("BMP") || Format==__T("GIF") || Format==__T("JPEG") || Format==__T("JPEG 2000") || Format==__T("JPEG 2000") || Format==__T("PNG") || Format==__T("TIFF"))
- return 40100;
- return 500000;
-}
-
-Ztring Mpeg7_ContentCS_Name(int32u termID, MediaInfo_Internal &) //xxyyzz: xx=main number, yy=sub-number, zz=sub-sub-number
-{
- switch (termID/10000)
- {
- case 1 : return __T("Audio");
- case 2 : return __T("Audiovisual");
- case 3 : return __T("Scene");
- case 4 : switch ((termID%10000)/100)
- {
- case 1 : return __T("Image");
- case 2 : return __T("Video");
- case 3 : return __T("Graphics");
- }
- case 50 : return Ztring(); //Unknown
- default : return Ztring();
- }
-}
-
-//---------------------------------------------------------------------------
-int32u Mpeg7_FileFormatCS_termID_MediaInfo(MediaInfo_Internal &MI)
-{
- const Ztring &Format=MI.Get(Stream_General, 0, General_Format);
-
- if (Format==__T("MPEG Audio"))
- {
- if (MI.Get(Stream_Audio, 0, Audio_Format_Profile).find(__T("2"))!=string::npos)
- return 500000; //mp2
- if (MI.Get(Stream_Audio, 0, Audio_Format_Profile).find(__T("1"))!=string::npos)
- return 510000; //mp1
- return 0;
- }
- if (Format==__T("Wave") && MI.Get(Stream_General, 0, General_Format_Profile)==__T("RF64"))
- return 520000; //Wav (RF64)
- if (Format==__T("Wave64"))
- return 530000;
- return 0;
-}
-
-//---------------------------------------------------------------------------
-int32u Mpeg7_FileFormatCS_termID(MediaInfo_Internal &MI)
-{
- const Ztring &Format=MI.Get(Stream_General, 0, General_Format);
-
- if (Format==__T("AVI"))
- return 70000;
- if (Format==__T("BMP"))
- return 110000;
- if (Format==__T("GIF"))
- return 120000;
- if (Format==__T("DV"))
- return 60000;
- if (Format==__T("JPEG"))
- return 10000;
- if (Format==__T("JPEG 2000") || Format==__T("JPEG 2000"))
- return 20000;
- if (Format==__T("MPEG Audio"))
- return (MI.Get(Stream_Audio, 0, Audio_Format_Profile).find(__T("3"))!=string::npos)?40000:0;
- if (Format==__T("MPEG-4"))
- return 50000;
- if (Format==__T("MPEG-PS"))
- return 30100;
- if (Format==__T("MPEG-TS"))
- return 30200;
- if (Format==__T("PNG"))
- return 150000;
- if (Format==__T("QuickTime"))
- return 160000;
- if (Format==__T("TIFF"))
- return 180000;
- if (Format==__T("Wave"))
- {
- if (!MI.Get(Stream_General, 0, General_Format_Profile).empty())
- return Mpeg7_FileFormatCS_termID_MediaInfo(MI); //Out of specs
- else
- return 90000;
- }
- if (Format==__T("Windows Media"))
- return 190000;
- if (Format==__T("ZIP"))
- return 100000;
-
- //Out of specs
- return Mpeg7_FileFormatCS_termID_MediaInfo(MI);
-}
-
-Ztring Mpeg7_FileFormatCS_Name(int32u termID, MediaInfo_Internal &MI) //xxyyzz: xx=main number, yy=sub-number, zz=sub-sub-number
-{
- switch (termID/10000)
- {
- case 1 : return __T("jpeg");
- case 2 : return __T("JPEG 2000");
- case 3 : switch ((termID%10000)/100)
- {
- case 1 : return __T("mpeg-ps");
- case 2 : return __T("mpeg-ts");
- default: return __T("mpeg");
- }
- case 4 : return __T("mp3");
- case 5 : return __T("mp4");
- case 6 : return __T("dv");
- case 7 : return __T("avi");
- case 8 : return __T("bdf");
- case 9 : return __T("wav");
- case 10 : return __T("zip");
- case 11 : return __T("bmp");
- case 12 : return __T("gif");
- case 13 : return __T("photocd");
- case 14 : return __T("ppm");
- case 15 : return __T("png");
- case 16 : return __T("quicktime");
- case 17 : return __T("spiff");
- case 18 : return __T("tiff");
- case 19 : return __T("asf");
- case 20 : return __T("iff");
- case 21 : return __T("miff");
- case 22 : return __T("pcx");
- //Out of specs --> MediaInfo CS
- case 50 : return __T("mp1");
- case 51 : return __T("mp2");
- case 52 : return __T("wav-rf64");
- case 53 : return __T("wave64");
- default : return MI.Get(Stream_General, 0, General_Format);
- }
-}
-
-//---------------------------------------------------------------------------
-int32u Mpeg7_VisualCodingFormatCS_termID(MediaInfo_Internal &MI, size_t StreamPos)
-{
- const Ztring &Format=MI.Get(Stream_Video, StreamPos, Video_Format);
- const Ztring &Version=MI.Get(Stream_Video, StreamPos, Video_Format_Version);
- const Ztring &Profile=MI.Get(Stream_Video, StreamPos, Video_Format_Profile);
-
- if (Format==__T("MPEG Video"))
- {
- if (Version.find(__T("1"))!=string::npos)
- return 10000;
- if (Version.find(__T("2"))!=string::npos)
- {
- if (Profile.find(__T("Simple@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20101;
- return 20100;
- }
- if (Profile.find(__T("Main@"))!=string::npos)
- {
- if (Profile.find(__T("Low"))!=string::npos)
- return 20201;
- if (Profile.find(__T("@Main"))!=string::npos)
- return 20202;
- if (Profile.find(__T("High 1440"))!=string::npos)
- return 20203;
- if (Profile.find(__T("High"))!=string::npos)
- return 20204;
- return 20200;
- }
- if (Profile.find(__T("SNR Scalable@"))!=string::npos)
- {
- if (Profile.find(__T("Low"))!=string::npos)
- return 20301;
- if (Profile.find(__T("Main"))!=string::npos)
- return 20302;
- return 20300;
- }
- if (Profile.find(__T("Spatial Sclable@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20401;
- if (Profile.find(__T("High 1440"))!=string::npos)
- return 20402;
- if (Profile.find(__T("High"))!=string::npos)
- return 20403;
- return 20400;
- }
- if (Profile.find(__T("High@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20501;
- if (Profile.find(__T("High 1440"))!=string::npos)
- return 20502;
- if (Profile.find(__T("High"))!=string::npos)
- return 20503;
- return 20500;
- }
- if (Profile.find(__T("Multi-view@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20601;
- return 20600;
- }
- if (Profile.find(__T("4:2:2@"))!=string::npos)
- {
- if (Profile.find(__T("Main"))!=string::npos)
- return 20701;
- return 20700;
- }
- return 20000;
- }
- }
- if (Format==__T("MPEG-4 Visual"))
- {
- if (Profile.find(__T("Simple@"))==0)
- {
- if (Profile.find(__T("L0"))!=string::npos)
- return 30101;
- if (Profile.find(__T("L1"))!=string::npos)
- return 30102;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30103;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30104;
- if (Profile.find(__T("L4"))!=string::npos)
- return 30105;
- if (Profile.find(__T("L5"))!=string::npos)
- return 30106;
- return 30100;
- }
- if (Profile.find(__T("Simple Scalable@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30201;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30202;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30203;
- return 30200;
- }
- if (Profile.find(__T("Advanced Simple@"))==0)
- {
- if (Profile.find(__T("L0"))!=string::npos)
- return 30301;
- if (Profile.find(__T("L1"))!=string::npos)
- return 30302;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30303;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30304;
- if (Profile.find(__T("L4"))!=string::npos)
- return 30305;
- if (Profile.find(__T("L5"))!=string::npos)
- return 30306;
- return 30100;
- }
- if (Profile.find(__T("Core@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30401;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30402;
- return 30400;
- }
- if (Profile.find(__T("Core Scalable@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30501;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30502;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30503;
- return 30500;
- }
- if (Profile.find(__T("Advanced Core@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30601;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30602;
- return 30600;
- }
- if (Profile.find(__T("Main@"))==0)
- {
- if (Profile.find(__T("L2"))!=string::npos)
- return 30701;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30702;
- if (Profile.find(__T("L4"))!=string::npos)
- return 30703;
- return 30700;
- }
- if (Profile.find(__T("N-bit@"))==0)
- {
- if (Profile.find(__T("L2"))!=string::npos)
- return 30801;
- return 30800;
- }
- if (Profile.find(__T("Advanced Real Time Simple@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 30901;
- if (Profile.find(__T("L2"))!=string::npos)
- return 30902;
- if (Profile.find(__T("L3"))!=string::npos)
- return 30903;
- if (Profile.find(__T("L4"))!=string::npos)
- return 30904;
- return 30900;
- }
- if (Profile.find(__T("Advanced Coding Efficiency@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31001;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31002;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31003;
- if (Profile.find(__T("L4"))!=string::npos)
- return 31004;
- return 31000;
- }
- if (Profile.find(__T("Simple Studio@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31101;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31102;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31103;
- if (Profile.find(__T("L4"))!=string::npos)
- return 31104;
- return 31100;
- }
- if (Profile.find(__T("Core Studio@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31201;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31202;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31203;
- if (Profile.find(__T("L4"))!=string::npos)
- return 31204;
- return 31200;
- }
- if (Profile.find(__T("Fine Granularity Scalable@"))==0)
- {
- if (Profile.find(__T("L0"))!=string::npos)
- return 31301;
- if (Profile.find(__T("L1"))!=string::npos)
- return 31302;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31303;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31304;
- if (Profile.find(__T("L4"))!=string::npos)
- return 31305;
- if (Profile.find(__T("L5"))!=string::npos)
- return 31306;
- return 31300;
- }
- if (Profile.find(__T("Simple Face Animation@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31401;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31402;
- return 31400;
- }
- if (Profile.find(__T("Simple FBA@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31501;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31502;
- return 31500;
- }
- if (Profile.find(__T("Basic Animated Texture@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31601;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31602;
- return 31600;
- }
- if (Profile.find(__T("Scalable Texture@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31701;
- return 31700;
- }
- if (Profile.find(__T("Advanced Scalable Texture@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31801;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31802;
- if (Profile.find(__T("L3"))!=string::npos)
- return 31803;
- return 31800;
- }
- if (Profile.find(__T("Hybrid@"))==0)
- {
- if (Profile.find(__T("L1"))!=string::npos)
- return 31901;
- if (Profile.find(__T("L2"))!=string::npos)
- return 31902;
- return 31900;
- }
- return 30000;
- }
- if (Format==__T("JPEG"))
- return 50000;
- if (Format==__T("JPEG 2000"))
- {
- const Ztring &CodecID=MI.Get(Stream_Video, StreamPos, Video_CodecID);
- if (CodecID==__T("mjp2"))
- return 60100;
- if (CodecID==__T("mjs2"))
- return 60200;
- return 60000;
- }
- if (Format==__T("H.261"))
- return 70000;
- if (Format==__T("H.263"))
- return 80000;
-
- return 0;
-}
-
-Ztring Mpeg7_VisualCodingFormatCS_Name(int32u termID, MediaInfo_Internal &MI, size_t StreamPos) //xxyyzz: xx=main number, yy=sub-number, zz=sub-sub-number
-{
- switch (termID/10000)
- {
- case 1 : return __T("MPEG-1 Video");
- case 2 : switch ((termID%10000)/100)
- {
- case 1 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video Simple Profile @ Main Level");
- default: return __T("MPEG-2 Video Simple Profile");
- }
- case 2 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video Main Profile @ Low Level");
- case 2 : return __T("MPEG-2 Video Main Profile @ Main Level");
- case 3 : return __T("MPEG-2 Video Main Profile @ High 1440 Level");
- case 4 : return __T("MPEG-2 Video Main Profile @ High Level");
- default: return __T("MPEG-2 Video Main Profile");
- }
- case 3 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video SNR Scalable Profile @ Low Level");
- case 2 : return __T("MPEG-2 Video SNR Scalable Profile @ Main Level");
- default: return __T("MPEG-2 Video SNR Scalable Profile");
- }
- case 4 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video Spatial Scalable Profile @ Main Level");
- case 2 : return __T("MPEG-2 Video Spatial Scalable Profile @ High 1440 Level");
- case 3 : return __T("MPEG-2 Video Spatial Scalable Profile @ High Level");
- default: return __T("MPEG-2 Video Spatial Scalable Profile");
- }
- case 5 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video High Profile @ Main Level");
- case 2 : return __T("MPEG-2 Video High Profile @ High 1440 Level");
- case 3 : return __T("MPEG-2 Video High Profile @ High Level");
- default: return __T("MPEG-2 Video High Profile");
- }
- case 6 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video Multiview Profile @ Main Level");
- default: return __T("MPEG-2 Video Multiview Profile");
- }
- case 7 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Video 4:2:2 Profile @ Main Level");
- default: return __T("MPEG-2 Video 4:2:2 Profile");
- }
- default: return __T("MPEG-2 Video");
- }
- case 3 : switch ((termID%10000)/100)
- {
- case 1 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Simple Profile @ Level 0");
- case 2 : return __T("MPEG-4 Visual Simple Profile @ Level 1");
- case 3 : return __T("MPEG-4 Visual Simple Profile @ Level 2");
- case 4 : return __T("MPEG-4 Visual Simple Profile @ Level 3");
- default: return __T("MPEG-4 Visual Simple Profile");
- }
- case 2 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Simple Scalable Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Simple Scalable Profile @ Level 2");
- default: return __T("MPEG-4 Visual Simple Scalable Profile");
- }
- case 3 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 0");
- case 2 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 1");
- case 3 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 2");
- case 4 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 3");
- case 5 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 4");
- case 6 : return __T("MPEG-4 Advanced Visual Simple Profile @ Level 5");
- default: return __T("MPEG-4 Advanced Visual Simple Profile");
- }
- case 4 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Core Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Core Profile @ Level 2");
- default: return __T("MPEG-4 Visual Core Profile");
- }
- case 5 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Core-Scalable Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Core-Scalable Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Core-Scalable Profile @ Level 3");
- default: return __T("MPEG-4 Visual Core-Scalable Profile");
- }
- case 6 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual AdvancedCore Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual AdvancedCore Profile @ Level 2");
- default: return __T("MPEG-4 Visual AdvancedCore Profile");
- }
- case 7 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Main Profile @ Level 2");
- case 2 : return __T("MPEG-4 Visual Main Profile @ Level 3");
- case 3 : return __T("MPEG-4 Visual Main Profile @ Level 4");
- default: return __T("MPEG-4 Visual Main Profile");
- }
- case 8 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual N-bit Profile @ Level 2");
- default: return __T("MPEG-4 Visual Main Profile");
- }
- case 9 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Advanced Real Time Simple Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Advanced Real Time Simple Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Advanced Real Time Simple Profile @ Level 3");
- case 4 : return __T("MPEG-4 Visual Advanced Real Time Simple Profile @ Level 4");
- default: return __T("MPEG-4 Visual Advanced Real Time Simple Profile");
- }
- case 10 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Advanced Coding Efficiency Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Advanced Coding Efficiency Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Advanced Coding Efficiency Profile @ Level 3");
- case 4 : return __T("MPEG-4 Visual Advanced Coding Efficiency Profile @ Level 4");
- default: return __T("MPEG-4 Visual Advanced Coding Efficiency Profile");
- }
- case 11 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Simple Studio Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Simple Studio Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Simple Studio Profile @ Level 3");
- case 4 : return __T("MPEG-4 Visual Simple Studio Profile @ Level 4");
- default: return __T("MPEG-4 Visual Simple Studio Profile");
- }
- case 12 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Core Studio Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Core Studio Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Core Studio Profile @ Level 3");
- case 4 : return __T("MPEG-4 Visual Core Studio Profile @ Level 4");
- default: return __T("MPEG-4 Visual Core Studio Profile");
- }
- case 13 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 0");
- case 2 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 1");
- case 3 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 2");
- case 4 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 3");
- case 5 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 4");
- case 6 : return __T("MPEG-4 Visual Fine Granularity Scalable Profile @ Level 5");
- default: return __T("MPEG-4 Visual Fine Granularity Scalable Profile");
- }
- case 14 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Simple Face Animation Profile @ Level 1");
- case 2 : return __T("MPEG-4 Simple Face Animation Profile @ Level 2");
- default: return __T("MPEG-4 Simple Face Animation Profile");
- }
- case 15 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Simple FBA Profile @ Level 1");
- case 2 : return __T("MPEG-4 Simple FBA Profile @ Level 2");
- default: return __T("MPEG-4 Simple FBA Profile");
- }
- case 16 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Basic Animated Texture Profile @ Level 1");
- case 2 : return __T("MPEG-4 Basic Animated Texture Profile @ Level 2");
- default: return __T("MPEG-4 Basic Animated Texture Profile");
- }
- case 17 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Advanced Scalable Texture Profile @ Level 1");
- default: return __T("MPEG-4 Advanced Scalable Texture Profile");
- }
- case 18 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Advanced Scalable Texture Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Advanced Scalable Texture Profile @ Level 2");
- case 3 : return __T("MPEG-4 Visual Advanced Scalable Texture Profile @ Level 3");
- default: return __T("MPEG-4 Visual Advanced Scalable Texture Profile");
- }
- case 19 : switch (termID%100)
- {
- case 1 : return __T("MPEG-4 Visual Hybrid Profile @ Level 1");
- case 2 : return __T("MPEG-4 Visual Hybrid Profile @ Level 2");
- default: return __T("MPEG-4 Visual Hybrid Profile");
- }
- default: return __T("MPEG-4 Visual");
- }
- case 4 : return __T("JPEG");
- case 5 : return __T("MJPEG");
- case 6 : return __T("JPEG2000");
- case 7 : return __T("H261");
- case 8 : return __T("H263");
- default: return MI.Get(Stream_Video, StreamPos, Video_Format);
- }
-}
-
-//---------------------------------------------------------------------------
-Ztring Mpeg7_Visual_colorDomain(MediaInfo_Internal &MI, size_t StreamPos)
-{
- const Ztring &Colorimetry=MI.Get(Stream_Video, StreamPos, Video_Colorimetry);
- if (Colorimetry.find(__T("4:"))!=string::npos)
- return __T(" colorDomain=\"color\"");
- if (Colorimetry==__T("Gray"))
- return __T(" colorDomain=\"graylevel\"");
- return __T("");
-}
-
-//---------------------------------------------------------------------------
-int32u Mpeg7_SystemCS_termID(MediaInfo_Internal &MI, size_t StreamPos)
-{
- if (MI.Get(Stream_Video, StreamPos, Video_Standard)==__T("PAL"))
- return 10000;
- if (MI.Get(Stream_Video, StreamPos, Video_Standard)==__T("SECAM"))
- return 20000;
- if (MI.Get(Stream_Video, StreamPos, Video_Standard)==__T("NTSC"))
- return 30000;
- return 0;
-}
-
-Ztring Mpeg7_SystemCS_Name(int32u termID) //xxyyzz: xx=main number, yy=sub-number, zz=sub-sub-number
-{
- switch (termID/10000)
- {
- case 1 : return __T("PAL");
- case 2 : return __T("SECAM");
- case 3 : return __T("NTSC");
- default : return Ztring();
- }
-}
-
-//---------------------------------------------------------------------------
-int32u Mpeg7_AudioCodingFormatCS_termID(MediaInfo_Internal &MI, size_t StreamPos)
-{
- const Ztring &Format=MI.Get(Stream_Audio, StreamPos, Audio_Format);
- const Ztring &Version=MI.Get(Stream_Audio, StreamPos, Audio_Format_Version);
- const Ztring &Profile=MI.Get(Stream_Audio, StreamPos, Audio_Format_Profile);
-
- if (Format==__T("AC-3"))
- return 10000;
- if (Format==__T("DTS"))
- return 20000;
- if (Format==__T("MPEG Audio"))
- {
- if (Version.find(__T("1"))!=string::npos)
- {
- if (Profile.find(__T("1"))!=string::npos)
- return 30100;
- if (Profile.find(__T("2"))!=string::npos)
- return 30200;
- if (Profile.find(__T("3"))!=string::npos)
- return 30300;
- return 30000;
- }
- if (Version.find(__T("2"))!=string::npos)
- {
- if (Profile.find(__T("1"))!=string::npos)
- return 40100;
- if (Profile.find(__T("2"))!=string::npos)
- return 40200;
- if (Profile.find(__T("3"))!=string::npos)
- return 40300;
- return 40000;
- }
- return 0;
- }
- if (Format==__T("PCM"))
- return 80000;
-
- return 0;
-}
-
-Ztring Mpeg7_AudioCodingFormatCS_Name(int32u termID, MediaInfo_Internal &MI, size_t StreamPos) //xxyyzz: xx=main number, yy=sub-number, zz=sub-sub-number
-{
- switch (termID/10000)
- {
- case 1 : return __T("AC3");
- case 2 : return __T("DTS");
- case 3 : switch ((termID%10000)/100)
- {
- case 1 : return __T("MPEG-1 Audio Layer I");
- case 2 : return __T("MPEG-1 Audio Layer II");
- case 3 : return __T("MPEG-1 Audio Layer III");
- default: return __T("MPEG-1 Audio");
- }
- case 4 : switch ((termID%10000)/100)
- {
- case 1 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Audio Low Sampling Rate Layer I");
- case 2 : return __T("MPEG-2 Audio Low Sampling Rate Layer II");
- case 3 : return __T("MPEG-2 Audio Low Sampling Rate Layer III");
- default: return __T("MPEG-2 Audio Low Sampling Rate");
- }
- case 2 : switch (termID%100)
- {
- case 1 : return __T("MPEG-2 Backward Compatible Multi-Channel Layer I");
- case 2 : return __T("MPEG-2 Backward Compatible Multi-Channel Layer II");
- case 3 : return __T("MPEG-2 Backward Compatible Multi-Channel Layer III");
- default: return __T("MPEG-2 Backward Compatible Multi-Channel");
- }
- default: return __T("MPEG-2 Audio");
- }
- case 8 : return __T("Linear PCM");
- default: return MI.Get(Stream_Audio, StreamPos, Video_Format);
- }
-}
-
-//---------------------------------------------------------------------------
-int32u Mpeg7_AudioPresentationCS_termID(MediaInfo_Internal &MI, size_t StreamPos)
-{
- const Ztring &Channels=MI.Get(Stream_Audio, StreamPos, Audio_Channel_s_);
- const Ztring &ChannelPositions2=MI.Get(Stream_Audio, StreamPos, Audio_ChannelPositions_String2);
- if (Channels==__T("6") && ChannelPositions2==__T("3/2.1"))
- return 50000;
- if (Channels==__T("8") && ChannelPositions2==__T("3/2/2.1"))
- return 60000;
- if (Channels==__T("2"))
- return 30000;
- if (Channels==__T("1"))
- return 20000;
- return 0;
-}
-
-Ztring Mpeg7_AudioPresentationCS_Name(int32u termID, MediaInfo_Internal &, size_t)
-{
- switch (termID/10000)
- {
- case 2 : return __T("mono");
- case 3 : return __T("stereo");
- case 5 : return __T("Home theater 5.1");
- case 6 : return __T("Movie theater");
- default: return Ztring();
- }
-}
-
-//---------------------------------------------------------------------------
-Ztring Mpeg7_AudioEmphasis(MediaInfo_Internal &MI, size_t StreamPos)
-{
- const Ztring &Emphasis=MI.Get(Stream_Audio, StreamPos, Audio_Format_Settings_Emphasis);
- if (Emphasis==__T("50/15ms"))
- return __T("50over15Microseconds");
- if (Emphasis==__T("CCITT"))
- return __T("ccittJ17");
- if (Emphasis==__T("Reserved"))
- return __T("reserved");
- return __T("none");
-}
-
-//---------------------------------------------------------------------------
-Ztring Mpeg7_MediaTimePoint(MediaInfo_Internal &MI)
-{
- if (MI.Count_Get(Stream_Video)==1 && MI.Get(Stream_General, 0, General_Format)==__T("MPEG-PS"))
- {
- int64u Delay=(int64u)(MI.Get(Stream_Video, 0, Video_Delay).To_float64()*90);
- int64u Rate=90000;
- int64u DD=Delay/(24*60*60*Rate);
- Delay=Delay%(24*60*60*Rate);
- int64u HH=Delay/(60*60*Rate);
- Delay=Delay%(60*60*Rate);
- int64u MM=Delay/(60*Rate);
- Delay=Delay%(60*Rate);
- int64u Sec=Delay/Rate;
- Delay=Delay%Rate;
- Ztring ToReturn;
- if (DD)
- ToReturn+=Ztring::ToZtring(DD);
- ToReturn+=__T('T');
- ToReturn+=(HH<10?__T("0"):__T(""))+Ztring::ToZtring(HH)+__T(':');
- ToReturn+=(MM<10?__T("0"):__T(""))+Ztring::ToZtring(MM)+__T(':');
- ToReturn+=(Sec<10?__T("0"):__T(""))+Ztring::ToZtring(Sec)+__T(':');
- ToReturn+=Ztring::ToZtring(Delay)+__T('F');
- ToReturn+=Ztring::ToZtring(Rate);
- return ToReturn;
- }
-
- //Default: In milliseconds
- int64u Milliseconds=MI.Get(Stream_Video, 0, Video_Delay).To_int64u();
- int64u DD=Milliseconds/(24*60*60*1000);
- Milliseconds=Milliseconds%(24*60*60*1000);
- int64u HH=Milliseconds/(60*60*1000);
- Milliseconds=Milliseconds%(60*60*1000);
- int64u MM=Milliseconds/(60*1000);
- Milliseconds=Milliseconds%(60*1000);
- int64u Sec=Milliseconds/1000;
- int64u NN=Milliseconds%1000;
- int64u FF=1000;
- Ztring ToReturn;
- if (DD)
- ToReturn+=Ztring::ToZtring(DD);
- ToReturn+=__T('T');
- ToReturn+=(HH<10?__T("0"):__T(""))+Ztring::ToZtring(HH)+__T(':');
- ToReturn+=(MM<10?__T("0"):__T(""))+Ztring::ToZtring(MM)+__T(':');
- ToReturn+=(Sec<10?__T("0"):__T(""))+Ztring::ToZtring(Sec)+__T(':');
- ToReturn+=Ztring::ToZtring(NN)+__T('F');
- ToReturn+=Ztring::ToZtring(FF);
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-Ztring Mpeg7_MediaDuration(MediaInfo_Internal &MI)
-{
- if (MI.Count_Get(Stream_Video)==1)
- {
- int64u FrameCount=MI.Get(Stream_Video, 0, Video_FrameCount).To_int64u();
- int64u FrameRate=MI.Get(Stream_Video, 0, Video_FrameRate).To_int64u();
- if (FrameRate==0)
- return Ztring();
- int64u DD=FrameCount/(24*60*60*FrameRate);
- FrameCount=FrameCount%(24*60*60*FrameRate);
- int64u HH=FrameCount/(60*60*FrameRate);
- FrameCount=FrameCount%(60*60*FrameRate);
- int64u MM=FrameCount/(60*FrameRate);
- FrameCount=FrameCount%(60*FrameRate);
- int64u Sec=FrameCount/FrameRate;
- FrameCount=FrameCount%FrameRate;
- Ztring ToReturn;
- ToReturn+=__T('P');
- if (DD)
- ToReturn+=Ztring::ToZtring(DD)+__T('D');
- ToReturn+=__T('T');
- ToReturn+=Ztring::ToZtring(HH)+__T('H');
- ToReturn+=Ztring::ToZtring(MM)+__T('M');
- ToReturn+=Ztring::ToZtring(Sec)+__T('S');
- ToReturn+=Ztring::ToZtring(FrameCount)+__T('N');
- ToReturn+=Ztring::ToZtring(FrameRate)+__T('F');
- return ToReturn;
- }
-
- if (MI.Count_Get(Stream_Audio)==1)
- {
- int64u SamplingCount=MI.Get(Stream_Audio, 0, Audio_SamplingCount).To_int64u();
- int64u SamplingRate=MI.Get(Stream_Audio, 0, Audio_SamplingRate).To_int64u();
- if (SamplingRate==0)
- return Ztring();
- int64u DD=SamplingCount/(24*60*60*SamplingRate);
- SamplingCount=SamplingCount%(24*60*60*SamplingRate);
- int64u HH=SamplingCount/(60*60*SamplingRate);
- SamplingCount=SamplingCount%(60*60*SamplingRate);
- int64u MM=SamplingCount/(60*SamplingRate);
- SamplingCount=SamplingCount%(60*SamplingRate);
- int64u Sec=SamplingCount/SamplingRate;
- SamplingCount=SamplingCount%SamplingRate;
- Ztring ToReturn;
- ToReturn+=__T('P');
- if (DD)
- ToReturn+=Ztring::ToZtring(DD)+__T('D');
- ToReturn+=__T('T');
- ToReturn+=Ztring::ToZtring(HH)+__T('H');
- ToReturn+=Ztring::ToZtring(MM)+__T('M');
- ToReturn+=Ztring::ToZtring(Sec)+__T('S');
- ToReturn+=Ztring::ToZtring(SamplingCount)+__T('N');
- ToReturn+=Ztring::ToZtring(SamplingRate)+__T('F');
- return ToReturn;
- }
-
- //Default: In milliseconds
- int64u Milliseconds=MI.Get(Stream_General, 0, General_Duration).To_int64u();
- int64u DD=Milliseconds/(24*60*60*1000);
- Milliseconds=Milliseconds%(24*60*60*1000);
- int64u HH=Milliseconds/(60*60*1000);
- Milliseconds=Milliseconds%(60*60*1000);
- int64u MM=Milliseconds/(60*1000);
- Milliseconds=Milliseconds%(60*1000);
- int64u Sec=Milliseconds/1000;
- int64u NN=Milliseconds%1000;
- int64u FF=1000;
- Ztring ToReturn;
- ToReturn+=__T('P');
- if (DD)
- ToReturn+=Ztring::ToZtring(DD)+__T('D');
- ToReturn+=__T('T');
- ToReturn+=Ztring::ToZtring(HH)+__T('H');
- ToReturn+=Ztring::ToZtring(MM)+__T('M');
- ToReturn+=Ztring::ToZtring(Sec)+__T('S');
- ToReturn+=Ztring::ToZtring(NN)+__T('N');
- ToReturn+=Ztring::ToZtring(FF)+__T('F');
- return ToReturn;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Export_Mpeg7::Export_Mpeg7 ()
-{
-}
-
-//---------------------------------------------------------------------------
-Export_Mpeg7::~Export_Mpeg7 ()
-{
-}
-
-//***************************************************************************
-// Input
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring Mpeg7_Transform_Visual(Ztring &ToReturn, MediaInfo_Internal &MI, size_t StreamPos)
-{
- ToReturn+=__T("\t\t\t\t\t\t\t<mpeg7:VisualCoding>\n");
-
- //Format
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:Format");
- int32u VisualCodingFormatCS_termID=Mpeg7_VisualCodingFormatCS_termID(MI, StreamPos);
- if (VisualCodingFormatCS_termID)
- {
- ToReturn+=__T(" href=\"urn:mpeg:mpeg7:cs:VisualCodingFormatCS:2001:");
- ToReturn+=Ztring::ToZtring(VisualCodingFormatCS_termID/10000);
- ToReturn+=__T("\"");
- }
- ToReturn+=Mpeg7_Visual_colorDomain(MI, StreamPos); //Algo puts empty string if not known
- ToReturn+=__T(">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_VisualCodingFormatCS_Name((VisualCodingFormatCS_termID/10000)*10000, MI, StreamPos); ToReturn+=__T("</mpeg7:Name>\n");
- if (VisualCodingFormatCS_termID%10000)
- {
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Term termID=\"");
- ToReturn+=Ztring::ToZtring(VisualCodingFormatCS_termID/10000);
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring((VisualCodingFormatCS_termID%10000)/100);
- ToReturn+=__T("\">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_VisualCodingFormatCS_Name((VisualCodingFormatCS_termID/100)*100, MI, StreamPos); ToReturn+=__T("</mpeg7:Name>\n");
- if (VisualCodingFormatCS_termID%100)
- {
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Term termID=\"");
- ToReturn+=Ztring::ToZtring(VisualCodingFormatCS_termID/10000);
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring((VisualCodingFormatCS_termID%10000)/100);
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring(VisualCodingFormatCS_termID%100);
- ToReturn+=__T("\">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_VisualCodingFormatCS_Name(VisualCodingFormatCS_termID, MI, StreamPos); ToReturn+=__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t</mpeg7:Term>\n");
- }
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t</mpeg7:Term>\n");
- }
- ToReturn+=__T("\t\t\t\t\t\t\t\t</mpeg7:Format>\n");
-
- //Pixel
- if (!MI.Get(Stream_Video, 0, Video_PixelAspectRatio).empty()
- || !MI.Get(Stream_Video, 0, Video_Resolution).empty())
- {
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:Pixel");
- if (!MI.Get(Stream_Video, 0, Video_PixelAspectRatio).empty())
- {
- ToReturn+=__T(" aspectRatio=\"");
- ToReturn+=MI.Get(Stream_Video, 0, Video_PixelAspectRatio);
- ToReturn+=__T("\"");
- }
- if (!MI.Get(Stream_Video, 0, Video_Resolution).empty())
- {
- ToReturn+=__T(" bitsPer=\"");
- ToReturn+=MI.Get(Stream_Video, 0, Video_Resolution);
- ToReturn+=__T("\"");
- }
- ToReturn+=__T("/>\n");
- }
-
- //Frame
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:Frame aspectRatio=\"")+MI.Get(Stream_Video, 0, Video_DisplayAspectRatio); ToReturn+=__T("\" height=\""); ToReturn+=MI.Get(Stream_Video, 0, Video_Height); ToReturn+=__T("\" width=\""); ToReturn+=MI.Get(Stream_Video, 0, Video_Width); ToReturn+=__T("\" rate=\""); ToReturn+=MI.Get(Stream_Video, 0, Video_FrameRate); ToReturn+=__T("\" structure=\""); ToReturn+=MI.Get(Stream_Video, 0, Video_ScanType).MakeLowerCase(); ToReturn+=__T("\"/>\n");
-
- //Colorimetry
- if (MI.Get(Stream_Video, StreamPos, Video_Colorimetry).find(__T("4:2:0"))!=string::npos)
- {
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:ColorSampling> <!-- YUV 4:2:0 Interlaced -->\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Lattice height=\"720\" width=\"486\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Field temporalOrder=\"0\" positionalOrder=\"0\">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Name>Luminance</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Offset horizontal=\"0.0\" vertical=\"0.0\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Period horizontal=\"1.0\" vertical=\"2.0\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t</mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Name>ChrominanceBlueDifference</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Offset horizontal=\"0.0\" vertical=\"0.5\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Period horizontal=\"2.0\" vertical=\"4.0\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t</mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Name>ChrominanceRedDifference</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Offset horizontal=\"0.0\" vertical=\"0.5\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Period horizontal=\"2.0\" vertical=\"4.0\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t</mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t</mpeg7:Field>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Field temporalOrder=\"1\" positionalOrder=\"1\">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Name>Luminance</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Offset horizontal=\"0.0\" vertical=\"1.0\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Period horizontal=\"1.0\" vertical=\"2.0\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t</mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Name>ChrominanceBlueDifference</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Offset horizontal=\"0.0\" vertical=\"2.5\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Period horizontal=\"2.0\" vertical=\"4.0\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t</mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Name>ChrominanceRedDifference</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Offset horizontal=\"0.0\" vertical=\"2.5\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Period horizontal=\"4.0\" vertical=\"2.0\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t</mpeg7:Component>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t</mpeg7:Field>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t</mpeg7:ColorSampling>\n");
- }
-
- ToReturn+=__T("\t\t\t\t\t\t\t</mpeg7:VisualCoding>\n");
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-Ztring Mpeg7_Transform_Audio(Ztring &ToReturn, MediaInfo_Internal &MI, size_t StreamPos)
-{
- ToReturn+=__T("\t\t\t\t\t\t\t<mpeg7:AudioCoding>\n");
-
- //Format
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:Format");
- int32u AudioCodingFormatCS_termID=Mpeg7_AudioCodingFormatCS_termID(MI, StreamPos);
- if (AudioCodingFormatCS_termID)
- {
- ToReturn+=__T(" href=\"urn:mpeg:mpeg7:cs:AudioCodingFormatCS:2001:");
- ToReturn+=Ztring::ToZtring(AudioCodingFormatCS_termID/10000);
- ToReturn+=__T("\"");
- }
- ToReturn+=__T(">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_AudioCodingFormatCS_Name((AudioCodingFormatCS_termID/10000)*10000, MI, StreamPos); ToReturn+=__T("</mpeg7:Name>\n");
- if (AudioCodingFormatCS_termID%10000)
- {
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Term termID=\"");
- ToReturn+=Ztring::ToZtring(AudioCodingFormatCS_termID/10000);
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring((AudioCodingFormatCS_termID%10000)/100);
- ToReturn+=__T("\">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_AudioCodingFormatCS_Name((AudioCodingFormatCS_termID/100)*100, MI, StreamPos); ToReturn+=__T("</mpeg7:Name>\n");
- if (AudioCodingFormatCS_termID%100)
- {
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Term termID=\"");
- ToReturn+=Ztring::ToZtring(AudioCodingFormatCS_termID/10000);
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring((AudioCodingFormatCS_termID%10000)/100);
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring(AudioCodingFormatCS_termID%100);
- ToReturn+=__T("\">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_AudioCodingFormatCS_Name(AudioCodingFormatCS_termID, MI, StreamPos); ToReturn+=__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t</mpeg7:Term>\n");
- }
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t</mpeg7:Term>\n");
- }
- ToReturn+=__T("\t\t\t\t\t\t\t\t</mpeg7:Format>\n");
-
- //AudioChannels
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:AudioChannels>"); ToReturn+=MI.Get(Stream_Audio, StreamPos, Audio_Channel_s_); ToReturn+=__T("</mpeg7:AudioChannels>\n");
-
- //Sample
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:Sample rate=\""); ToReturn+=MI.Get(Stream_Audio, StreamPos, Audio_SamplingRate); ToReturn+=__T("\""); if (!MI.Get(Stream_Audio, StreamPos, Audio_BitDepth).empty()) {ToReturn+=__T(" bitsPer=\""); ToReturn+=MI.Get(Stream_Audio, StreamPos, Audio_BitDepth); ToReturn+=__T("\"");} ToReturn+=__T("/>\n");
-
- //Emphasis
- if (MI.Get(Stream_Audio, StreamPos, Audio_Format)==__T("MPEG Audio"))
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:Emphasis>")+Mpeg7_AudioEmphasis(MI, StreamPos)+__T("</mpeg7:Emphasis>\n");
-
- //Presentation
- int32u AudioPresentationCS_termID=Mpeg7_AudioPresentationCS_termID(MI, StreamPos);
- if (AudioPresentationCS_termID)
- {
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:Presentation href=\"urn:mpeg:mpeg7:cs:AudioPresentationCS:2001:");
- ToReturn+=Ztring::ToZtring(AudioPresentationCS_termID/10000);
- if (AudioPresentationCS_termID%10000)
- {
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring((AudioPresentationCS_termID%10000)/100);
- if (AudioPresentationCS_termID%100)
- {
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring(AudioPresentationCS_termID%100);
- }
- }
- ToReturn+=__T("\">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Name>")+Mpeg7_AudioPresentationCS_Name(AudioPresentationCS_termID, MI, StreamPos)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t</mpeg7:Presentation>\n");
- }
-
- ToReturn+=__T("\t\t\t\t\t\t\t</mpeg7:AudioCoding>\n");
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-Ztring Export_Mpeg7::Transform(MediaInfo_Internal &MI)
-{
- //Current date/time is ISO format
- time_t Time=time(NULL);
- Ztring TimeS; TimeS.Date_From_Seconds_1970((int32u)Time);
- TimeS.FindAndReplace(__T("UTC "), __T(""));
- TimeS.FindAndReplace(__T(" "), __T("T"));
- TimeS+=__T("+00:00");
-
- Ztring ToReturn;
-
- //Mpeg7
- ToReturn+=__T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
- ToReturn+=__T("<!-- Generated at ")+TimeS+__T(" by ")+MediaInfoLib::Config.Info_Version_Get()+__T(" -->\n");
- ToReturn+=__T("<mpeg7:Mpeg7 xmlns=\"urn:mpeg:mpeg7:schema:2004\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:mpeg7=\"urn:mpeg:mpeg7:schema:2004\" xsi:schemaLocation=\"urn:mpeg:mpeg7:schema:2004 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-7_schema_files/mpeg7-v2.xsd\">\n");
-
- //Description - DescriptionMetadata
- {
- ToReturn+=__T("\t<mpeg7:DescriptionMetadata>\n");
- Ztring FileName=MI.Get(Stream_General, 0, General_FileName);
- Ztring Extension=MI.Get(Stream_General, 0, General_FileExtension);
- if (!Extension.empty())
- FileName+=__T('.')+Extension;
- if (!FileName.empty())
- ToReturn+=__T("\t\t<mpeg7:PrivateIdentifier>")+FileName+__T("</mpeg7:PrivateIdentifier>\n");
- ToReturn+=__T("\t\t<mpeg7:CreationTime>")+TimeS+__T("</mpeg7:CreationTime>\n");
- ToReturn+=__T("\t\t<mpeg7:Instrument>\n");
- ToReturn+=__T("\t\t\t<mpeg7:Tool>\n");
- ToReturn+=__T("\t\t\t\t<mpeg7:Name>")+MediaInfoLib::Config.Info_Version_Get()+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t</mpeg7:Tool>\n");
- ToReturn+=__T("\t\t</mpeg7:Instrument>\n");
- ToReturn+=__T("\t</mpeg7:DescriptionMetadata>\n");
- }
-
- //Description - CreationDescription
- if (!MI.Get(Stream_General, 0, General_Movie).empty()
- || !MI.Get(Stream_General, 0, General_Track).empty()
- || !MI.Get(Stream_General, 0, General_Album).empty()
- || !MI.Get(Stream_General, 0, General_Encoded_Library).empty()
- || !MI.Get(Stream_General, 0, General_Performer).empty())
- {
- ToReturn+=__T("\t<mpeg7:Description xsi:type=\"CreationDescriptionType\">\n");
- ToReturn+=__T("\t\t<mpeg7:CreationInformation>\n");
- ToReturn+=__T("\t\t\t<mpeg7:Creation>\n");
- if (!MI.Get(Stream_General, 0, General_Movie).empty())
- ToReturn+=__T("\t\t\t\t<mpeg7:Title type=\"songTitle\">")+MI.Get(Stream_General, 0, General_Movie)+__T("</mpeg7:Title>\n");
- if (!MI.Get(Stream_General, 0, General_Track).empty())
- ToReturn+=__T("\t\t\t\t<mpeg7:Title type=\"songTitle\">")+MI.Get(Stream_General, 0, General_Title)+__T("</mpeg7:Title>\n");
- if (!MI.Get(Stream_General, 0, General_Album).empty())
- ToReturn+=__T("\t\t\t\t<mpeg7:Title type=\"albumTitle\">")+MI.Get(Stream_General, 0, General_Album)+__T("</mpeg7:Title>\n");
- if (!MI.Get(Stream_General, 0, General_WrittenBy).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:AUTHOR\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_WrittenBy)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_Performer).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:PERFORMER\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_Performer)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_ExecutiveProducer).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:EXECUTIVE-PRODUCER\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_ExecutiveProducer)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_Producer).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:PRODUCER\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_Producer)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_Director).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:PRODUCER\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_Director)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_Composer).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:COMPOSER\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_Composer)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_CostumeDesigner).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:COSTUME-SUPERVISOR\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_CostumeDesigner)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_ProductionDesigner).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:PRODUCTION-DESIGNER\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_ProductionDesigner)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_Publisher).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:PUBLISHER\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_Publisher)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_DistributedBy).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:Creator>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Role href=\"urn:mpeg:mpeg7:cs:RoleCS:2001:DISTRIBUTOR\"/>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Agent xsi:type=\"PersonGroupType\">\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_DistributedBy)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Agent>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:Creator>\n");
- }
- if (!MI.Get(Stream_General, 0, General_Encoded_Library).empty())
- {
- ToReturn+=__T("\t\t\t\t<mpeg7:CreationTool>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:Tool>\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:Name>")+MI.Get(Stream_General, 0, General_Encoded_Library)+__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t</mpeg7:Tool>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:CreationTool>\n");
- }
- ToReturn+=__T("\t\t\t</mpeg7:Creation>\n");
- ToReturn+=__T("\t\t</mpeg7:CreationInformation>\n");
- ToReturn+=__T("\t</mpeg7:Description>\n");
- }
-
- //Description - ContentEntity
- ToReturn+=__T("\t<mpeg7:Description xsi:type=\"ContentEntityType\">\n");
-
- //MultimediaContent
- ToReturn+=__T("\t\t<mpeg7:MultimediaContent xsi:type=\""); ToReturn+=Mpeg7_Type(MI); ToReturn+=__T("Type\">\n");
-
- //(Type)
- ToReturn+=__T("\t\t\t<mpeg7:"); ToReturn+=Mpeg7_Type(MI); ToReturn+=__T(">\n");
-
- //MediaFormat header
- ToReturn+=__T("\t\t\t\t<mpeg7:MediaInformation>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:MediaProfile>\n");
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:MediaFormat>\n");
-
- //Content
- ToReturn+=__T("\t\t\t\t\t\t\t<mpeg7:Content");
- int32u ContentCS_termID=Mpeg7_ContentCS_termID(MI);
- if (ContentCS_termID>=500000) //Out of spec
- ToReturn+=__T(" href=\"urn:x-mpeg7-mediainfo:cs:ContentCS:2009:");
- else
- ToReturn+=__T(" href=\"urn:mpeg:mpeg7:cs:ContentCS:2001:");
- ToReturn+=Ztring::ToZtring(ContentCS_termID/10000);
- if (ContentCS_termID%10000)
- {
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring((ContentCS_termID%10000)/100);
- if (ContentCS_termID%100)
- {
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring(ContentCS_termID%100);
- }
- }
- ToReturn+=__T("\"");
- ToReturn+=__T(">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_ContentCS_Name(ContentCS_termID, MI); ToReturn+=__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t</mpeg7:Content>\n");
-
- //FileFormat
- if (!MI.Get(Stream_General, 0, General_Format).empty())
- {
- ToReturn+=__T("\t\t\t\t\t\t\t<mpeg7:FileFormat");
- int32u FileFormatCS_termID=Mpeg7_FileFormatCS_termID(MI);
- if (FileFormatCS_termID)
- {
- if (FileFormatCS_termID>=500000) //Out of spec
- ToReturn+=__T(" href=\"urn:x-mpeg7-mediainfo:cs:FileFormatCS:2009:");
- else
- ToReturn+=__T(" href=\"urn:mpeg:mpeg7:cs:FileFormatCS:2001:");
- ToReturn+=Ztring::ToZtring(FileFormatCS_termID/10000);
- ToReturn+=__T("\"");
- }
- ToReturn+=__T(">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_FileFormatCS_Name((FileFormatCS_termID/10000)*10000, MI); ToReturn+=__T("</mpeg7:Name>\n");
- if (FileFormatCS_termID%10000)
- {
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t<mpeg7:Term termID=\"");
- ToReturn+=Ztring::ToZtring(FileFormatCS_termID/10000);
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring((FileFormatCS_termID%10000)/100);
- ToReturn+=__T("\">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_FileFormatCS_Name((FileFormatCS_termID/100)*100, MI); ToReturn+=__T("</mpeg7:Name>\n");
- if (FileFormatCS_termID%100)
- {
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t<mpeg7:Term termID=\"");
- ToReturn+=Ztring::ToZtring(FileFormatCS_termID/10000);
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring((FileFormatCS_termID%10000)/100);
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring(FileFormatCS_termID%100);
- ToReturn+=__T("\">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_FileFormatCS_Name(FileFormatCS_termID, MI); ToReturn+=__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t\t</mpeg7:Term>\n");
- }
- ToReturn+=__T("\t\t\t\t\t\t\t\t\t</mpeg7:Term>\n");
- }
- ToReturn+=__T("\t\t\t\t\t\t\t</mpeg7:FileFormat>\n");
- }
-
- //FileSize
- ToReturn+=__T("\t\t\t\t\t\t\t<mpeg7:FileSize>"); ToReturn+=MI.Get(Stream_General, 0, General_FileSize); ToReturn+=__T("</mpeg7:FileSize>\n");
-
- //System
- if (!MI.Get(Stream_Video, 0, Video_Standard).empty())
- {
- ToReturn+=__T("\t\t\t\t\t\t\t<mpeg7:System");
- int32u SystemCS_termID=Mpeg7_SystemCS_termID(MI, 0); //2 video streams are not supported
- if (SystemCS_termID)
- {
- ToReturn+=__T(" href=\"urn:mpeg:mpeg7:cs:SystemCS:2001:");
- ToReturn+=Ztring::ToZtring(SystemCS_termID/10000);
- if (SystemCS_termID%10000)
- {
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring((SystemCS_termID%10000)/100);
- if (SystemCS_termID%100)
- {
- ToReturn+=__T(".");
- ToReturn+=Ztring::ToZtring(SystemCS_termID%100);
- }
- }
- ToReturn+=__T("\"");
- }
- ToReturn+=__T(">\n");
- ToReturn+=__T("\t\t\t\t\t\t\t\t<mpeg7:Name xml:lang=\"en\">"); ToReturn+=Mpeg7_SystemCS_Name(SystemCS_termID); ToReturn+=__T("</mpeg7:Name>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t</mpeg7:System>\n");
- }
-
- //BitRate
- if (!MI.Get(Stream_General, 0, General_OverallBitRate).empty())
- {
- ToReturn+=__T("\t\t\t\t\t\t\t<mpeg7:BitRate");
- bool IsCBR=true;
- bool IsVBR=true;
- for (size_t StreamKind=Stream_Video; StreamKind<=Stream_Audio; StreamKind++)
- for (size_t StreamPos=0; StreamPos<MI.Count_Get((stream_t)StreamKind); StreamPos++)
- {
- if (IsCBR && MI.Get((stream_t)StreamKind, StreamPos, __T("BitRate_Mode"))==__T("VBR"))
- IsCBR=false;
- if (IsVBR && MI.Get((stream_t)StreamKind, StreamPos, __T("BitRate_Mode"))==__T("CBR"))
- IsVBR=false;
- }
- if (IsCBR && IsVBR)
- {
- IsCBR=false;
- IsVBR=false;
- }
- if (IsCBR)
- ToReturn+=__T(" variable=\"false\"");
- if (IsVBR)
- ToReturn+=__T(" variable=\"true\"");
- ToReturn+=__T(">"); ToReturn+=MI.Get(Stream_General, 0, General_OverallBitRate); ToReturn+=__T("</mpeg7:BitRate>\n");
- }
-
- //xxxCoding
- for (size_t Pos=0; Pos<MI.Count_Get(Stream_Video); Pos++)
- Mpeg7_Transform_Visual(ToReturn, MI, Pos);
- for (size_t Pos=0; Pos<MI.Count_Get(Stream_Audio); Pos++)
- Mpeg7_Transform_Audio(ToReturn, MI, Pos);
-
- //MediaFormat header
- ToReturn+=__T("\t\t\t\t\t\t</mpeg7:MediaFormat>\n");
-
- //MediaTranscodingHints, intraFrameDistance and anchorFrameDistance
- if (!MI.Get(Stream_Video, 0, Video_Format_Settings_GOP).empty())
- {
- Ztring M=MI.Get(Stream_Video, 0, Video_Format_Settings_GOP).SubString(__T("M="), __T(","));
- Ztring N=MI.Get(Stream_Video, 0, Video_Format_Settings_GOP).SubString(__T("N="), __T(""));
- ToReturn+=__T("\t\t\t\t\t\t<mpeg7:MediaTranscodingHints>\n");
- ToReturn+=__T("\t\t\t\t\t\t\t<mpeg7:CodingHints");
- if (!N.empty())
- ToReturn+=__T(" intraFrameDistance=\"")+N;
- if (!M.empty())
- ToReturn+=__T("\" anchorFrameDistance=\"")+M;
- ToReturn+=__T("\"/>\n");
- ToReturn+=__T("\t\t\t\t\t\t</mpeg7:MediaTranscodingHints>\n");
- }
-
- ToReturn+=__T("\t\t\t\t\t</mpeg7:MediaProfile>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:MediaInformation>\n");
-
- if (MI.Count_Get(Stream_Video)==1 || MI.Count_Get(Stream_Audio)==1)
- {
- //MediaTimePoint
- ToReturn+=__T("\t\t\t\t<mpeg7:MediaTime>\n");
- ToReturn+=__T("\t\t\t\t\t<mpeg7:MediaTimePoint>")+Mpeg7_MediaTimePoint(MI)+__T("</mpeg7:MediaTimePoint>\n");
-
- //MediaDuration
- ToReturn+=__T("\t\t\t\t\t<mpeg7:MediaDuration>"); ToReturn+=Mpeg7_MediaDuration(MI); ToReturn+=__T("</mpeg7:MediaDuration>\n");
- ToReturn+=__T("\t\t\t\t</mpeg7:MediaTime>\n");
- }
-
- //Mpeg7 footer
- ToReturn+=__T("\t\t\t</mpeg7:"); ToReturn+=Mpeg7_Type(MI); ToReturn+=__T(">\n");
- ToReturn+=__T("\t\t</mpeg7:MultimediaContent>\n");
- ToReturn+=__T("\t</mpeg7:Description>\n");
- ToReturn+=__T("</mpeg7:Mpeg7>\n");
-
- //Carriage return
- ToReturn.FindAndReplace(__T("\n"), EOL, 0, Ztring_Recursive);
-
- //Find and replace
- ZtringListList ToReplace=MediaInfoLib::Config.Inform_Replace_Get_All();
- for (size_t Pos=0; Pos<ToReplace.size(); Pos++)
- ToReturn.FindAndReplace(ToReplace[Pos][0], ToReplace[Pos][1], 0, Ztring_Recursive);
-
- return ToReturn;
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_Mpeg7.h b/src/thirdparty/MediaInfo/MediaInfo/Export/Export_Mpeg7.h
deleted file mode 100644
index 85506024e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_Mpeg7.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef Export_Mpeg7H
-#define Export_Mpeg7H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Internal.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-/// @brief Export_Mpeg7
-//***************************************************************************
-
-class Export_Mpeg7
-{
-public :
- //Constructeur/Destructeur
- Export_Mpeg7 ();
- ~Export_Mpeg7 ();
-
- //Input
- Ztring Transform(MediaInfo_Internal &MI);
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_PBCore.cpp b/src/thirdparty/MediaInfo/MediaInfo/Export/Export_PBCore.cpp
deleted file mode 100644
index 5f28e3e43..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_PBCore.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Export/Export_PBCore.h"
-#include "MediaInfo/File__Analyse_Automatic.h"
-#include <ctime>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring PBCore_MediaType(MediaInfo_Internal &MI)
-{
- if (MI.Count_Get(Stream_Video))
- return __T("Video");
- else if (MI.Count_Get(Stream_Audio))
- return __T("Sound");
- else if (MI.Count_Get(Stream_Image))
- return __T("Static Image");
- else if (MI.Count_Get(Stream_Text))
- return __T("Text");
- else
- return Ztring();
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Export_PBCore::Export_PBCore ()
-{
-}
-
-//---------------------------------------------------------------------------
-Export_PBCore::~Export_PBCore ()
-{
-}
-
-//***************************************************************************
-// Input
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void PBCore_Transform(Ztring &ToReturn, MediaInfo_Internal &MI, stream_t StreamKind, size_t StreamPos)
-{
- //Menu: only if TimeCode
- if (StreamKind==Stream_Menu && MI.Get(Stream_Menu, StreamPos, Menu_Format)!=__T("TimeCode"))
- return;
-
- ToReturn+=__T("\t\t<pbcoreEssenceTrack>\n");
-
- //essenceTrackType
- Ztring essenceTrackType;
- switch (StreamKind)
- {
- case Stream_Video:
- essenceTrackType=__T("Video");
- break;
- case Stream_Audio:
- essenceTrackType=__T("Audio");
- break;
- case Stream_Text:
- {
- Ztring Format=MI.Get(Stream_Text, StreamPos, Text_Format);
- if (Format==__T("EIA-608") || Format==__T("EIA-708"))
- essenceTrackType=__T("CC");
- else
- essenceTrackType=__T("Text");
- }
- break;
- case Stream_Menu:
- if (MI.Get(Stream_Menu, StreamPos, Menu_Format)==__T("TimeCode"))
- {
- essenceTrackType=__T("TimeCode");
- break;
- }
- else
- return; //Not supported
- default: return; //Not supported
- }
- ToReturn+=__T("\t\t\t<essenceTrackType>")+essenceTrackType+__T("</essenceTrackType>\n");
-
- //essenceTrackIdentifier
- if (!MI.Get(StreamKind, StreamPos, __T("ID")).empty())
- {
- ToReturn+=__T("\t\t\t<essenceTrackIdentifier>")+MI.Get(StreamKind, StreamPos, __T("ID"))+__T("</essenceTrackIdentifier>\n");
- ToReturn+=__T("\t\t\t<essenceTrackIdentifierSource>ID (Mediainfo)</essenceTrackIdentifierSource>\n");
- }
- else if (!MI.Get(StreamKind, StreamPos, __T("UniqueID")).empty())
- {
- ToReturn+=__T("\t\t\t<essenceTrackIdentifier>")+MI.Get(StreamKind, StreamPos, __T("UniqueID"))+__T("</essenceTrackIdentifier>\n");
- ToReturn+=__T("\t\t\t<essenceTrackIdentifierSource>UniqueID (Mediainfo)</essenceTrackIdentifierSource>\n");
- }
- else if (!MI.Get(StreamKind, StreamPos, __T("StreamKindID")).empty())
- {
- ToReturn+=__T("\t\t\t<essenceTrackIdentifier>")+MI.Get(StreamKind, StreamPos, __T("StreamKindID"))+__T("</essenceTrackIdentifier>\n");
- ToReturn+=__T("\t\t\t<essenceTrackIdentifierSource>StreamKindID (Mediainfo)</essenceTrackIdentifierSource>\n");
- }
-
- //essenceTrackStandard
- if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_Standard).empty())
- ToReturn+=__T("\t\t\t<essenceTrackStandard>")+MI.Get(Stream_Video, StreamPos, Video_Standard)+__T("</essenceTrackStandard>\n");
-
- //essenceTrackEncoding
- if (!MI.Get(StreamKind, StreamPos, __T("Format")).empty())
- {
- ToReturn+=__T("\t\t\t<essenceTrackEncoding>");
- ToReturn+=MI.Get(StreamKind, StreamPos, __T("Format"));
- if (!MI.Get(StreamKind, StreamPos, __T("Format_Profile")).empty()) ToReturn+=__T(' ')+MI.Get(StreamKind, StreamPos, __T("Format_Profile"));
- if (!MI.Get(StreamKind, StreamPos, __T("CodecID")).empty()) ToReturn+=__T(" (")+MI.Get(StreamKind, StreamPos, __T("CodecID"))+__T(')');
- ToReturn+=__T("</essenceTrackEncoding>\n");
- }
-
- //essenceTrackDataRate
- if (!MI.Get(StreamKind, StreamPos, __T("BitRate")).empty())
- {
- ToReturn+=__T("\t\t\t<essenceTrackDataRate>");
- ToReturn+=MI.Get(StreamKind, StreamPos, __T("BitRate"));
- if (!MI.Get(StreamKind, StreamPos, __T("BitRate_Mode")).empty())
- ToReturn+=__T(' ')+MI.Get(StreamKind, StreamPos, __T("BitRate_Mode"));
- ToReturn+=__T("</essenceTrackDataRate>\n");
- }
-
- //essenceTrackFrameRate
- if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_FrameRate).empty())
- {
- ToReturn+=__T("\t\t\t<essenceTrackFrameRate>");
- ToReturn+=MI.Get(Stream_Video, StreamPos, Video_FrameRate);
- if (!MI.Get(Stream_Video, StreamPos, Video_FrameRate_Mode).empty())
- ToReturn+=__T(' ')+MI.Get(Stream_Video, StreamPos, Video_FrameRate_Mode);
- ToReturn+=__T("</essenceTrackFrameRate>\n");
- }
-
- //essenceTrackSamplingRate
- if (StreamKind==Stream_Audio && !MI.Get(Stream_Audio, StreamPos, Audio_SamplingRate).empty())
- ToReturn+=__T("\t\t\t<essenceTrackSamplingRate>")+MI.Get(Stream_Audio, StreamPos, Audio_SamplingRate)+__T("</essenceTrackSamplingRate>\n");
-
- //essenceTrackBitDepth
- if (!MI.Get(StreamKind, StreamPos, __T("BitDepth")).empty())
- ToReturn+=__T("\t\t\t<essenceTrackBitDepth version=\"PBCoreXSD_Ver_1.2_D1\">")+MI.Get(StreamKind, StreamPos, __T("BitDepth"))+__T("</essenceTrackBitDepth>\n");
-
- //essenceTrackFrameSize
- if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_Width).empty())
- ToReturn+=__T("\t\t\t<essenceTrackFrameSize>")+MI.Get(Stream_Video, StreamPos, Video_Width)+__T('x')+MI.Get(Stream_Video, StreamPos, Video_Height)+__T("</essenceTrackFrameSize>\n");
-
- //essenceTrackAspectRatio
- if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_DisplayAspectRatio).empty())
- ToReturn+=__T("\t\t\t<essenceTrackAspectRatio>")+MI.Get(Stream_Video, StreamPos, Video_DisplayAspectRatio)+__T("</essenceTrackAspectRatio>\n");
-
- //essenceTrackDuration
- if (!MI.Get(StreamKind, StreamPos, __T("Duration")).empty())
- ToReturn+=__T("\t\t\t<essenceTrackDuration>")+MI.Get(StreamKind, StreamPos, __T("Duration"))+__T("</essenceTrackDuration>\n");
-
- //essenceTrackLanguage
- if (!MI.Get(StreamKind, StreamPos, __T("Language")).empty())
- ToReturn+=__T("\t\t\t<essenceTrackLanguage>")+MediaInfoLib::Config.Iso639_2_Get(MI.Get(StreamKind, StreamPos, __T("Language")))+__T("</essenceTrackLanguage>\n");
-
- //essenceTrackAnnotation - all fields (except *_String*) separated by |
- Ztring Temp;
- for (size_t Pos=0; Pos<MI.Count_Get(StreamKind, StreamPos); Pos++)
- if (MI.Get(StreamKind, StreamPos, Pos, Info_Name).find(__T("String"))==std::string::npos && !MI.Get(StreamKind, StreamPos, Pos).empty())
- Temp+=MI.Get(StreamKind, StreamPos, Pos, Info_Name)+__T(": ")+MI.Get(StreamKind, StreamPos, Pos)+__T('|');
- if (!Temp.empty())
- {
- Temp.resize(Temp.size()-1);
- ToReturn+=__T("\t\t\t<essenceTrackAnnotation>"); ToReturn+=Temp; ToReturn+=__T("</essenceTrackAnnotation>\n");
- }
-
- ToReturn+=__T("\t\t</pbcoreEssenceTrack>\n");
-}
-
-//---------------------------------------------------------------------------
-Ztring Export_PBCore::Transform(MediaInfo_Internal &MI)
-{
- //Current date/time is ISO format
- time_t Time=time(NULL);
- Ztring TimeS; TimeS.Date_From_Seconds_1970((int32u)Time);
- TimeS.FindAndReplace(__T("UTC "), __T(""));
- TimeS.FindAndReplace(__T(" "), __T("T"));
- TimeS+=__T('Z');
-
- Ztring ToReturn;
- ToReturn+=__T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
- ToReturn+=__T("<PBCoreDescriptionDocument xsi:schemaLocation=\"http://www.pbcore.org/PBCore/PBCoreNamespace.html http://www.pbcore.org/PBCore/PBCoreXSD_Ver_1-2-1.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.pbcore.org/PBCore/PBCoreNamespace.html\">\n");
- ToReturn+=__T("\t<!-- Generated at ")+TimeS+__T(" by ")+MediaInfoLib::Config.Info_Version_Get()+__T(" -->\n");
- ToReturn+=__T("\t<!-- Warning: MediaInfo outputs only pbcoreInstantiation, other mandatory PBCore data is junk -->\n");
- ToReturn+=__T("\t<pbcoreIdentifier>\n");
- ToReturn+=__T("\t\t<identifier>***</identifier>\n");
- ToReturn+=__T("\t\t<identifierSource>***</identifierSource>\n");
- ToReturn+=__T("\t</pbcoreIdentifier>\n");
- ToReturn+=__T("\t<pbcoreTitle>\n");
- ToReturn+=__T("\t\t<title>***</title>\n");
- ToReturn+=__T("\t</pbcoreTitle>\n");
- ToReturn+=__T("\t<pbcoreDescription>\n");
- ToReturn+=__T("\t\t<description>***</description>\n");
- ToReturn+=__T("\t\t<descriptionType>***</descriptionType>\n");
- ToReturn+=__T("\t</pbcoreDescription>\n");
- ToReturn+=__T("\t<pbcoreInstantiation>\n");
-
-
- //pbcoreFormatID
- ToReturn+=__T("\t\t<pbcoreFormatID>\n");
- //formatIdentifier
- ToReturn+=__T("\t\t\t<formatIdentifier>")+MI.Get(Stream_General, 0, General_FileName)+__T("</formatIdentifier>\n");
- //formatIdentifierSource
- ToReturn+=__T("\t\t\t<formatIdentifierSource version=\"PBCoreXSD_Ver_1.2_D1\">File Name</formatIdentifierSource>\n");
- ToReturn+=__T("\t\t</pbcoreFormatID>\n");
-
- //formatDigital
- if (!MI.Get(Stream_General, 0, General_InternetMediaType).empty())
- {
- ToReturn+=__T("\t\t<formatDigital>");
- ToReturn+=MI.Get(Stream_General, 0, General_InternetMediaType);
- ToReturn+=__T("</formatDigital>\n");
- }
- else
- {
- //TODO: how to implement formats without Media Type?
- ToReturn+=__T("\t\t<formatDigital>");
- if (MI.Count_Get(Stream_Video))
- ToReturn+=__T("video/x-");
- else if (MI.Count_Get(Stream_Image))
- ToReturn+=__T("image/x-");
- else if (MI.Count_Get(Stream_Audio))
- ToReturn+=__T("audio/x-");
- else
- ToReturn+=__T("application/x-");
- ToReturn+=Ztring(MI.Get(Stream_General, 0, __T("Format"))).MakeLowerCase();
- ToReturn+=__T("</formatDigital>\n");
- }
-
- //formatLocation
- ToReturn+=__T("\t\t<formatLocation>")+MI.Get(Stream_General, 0, General_CompleteName)+__T("</formatLocation>\n");
-
- //dateCreated
- if (!MI.Get(Stream_General, 0, General_Encoded_Date).empty())
- {
- Ztring dateCreated=MI.Get(Stream_General, 0, General_Recorded_Date);
- dateCreated.FindAndReplace(__T("UTC"), __T("-"));
- dateCreated.FindAndReplace(__T(" "), __T("T"));
- dateCreated+=__T('Z');
- ToReturn+=__T("\t\t<dateCreated>")+dateCreated+__T("</dateCreated>\n");
- }
-
- //dateIssued
- if (!MI.Get(Stream_General, 0, General_Recorded_Date).empty())
- {
- Ztring dateIssued=MI.Get(Stream_General, 0, General_Recorded_Date);
- dateIssued.FindAndReplace(__T("UTC"), __T("-"));
- dateIssued.FindAndReplace(__T(" "), __T("T"));
- dateIssued+=__T('Z');
- ToReturn+=__T("\t\t<dateIssued>")+dateIssued+__T("</dateIssued>\n");
- }
-
- //formatMediaType
- if (!PBCore_MediaType(MI).empty())
- ToReturn+=__T("\t\t<formatMediaType version=\"PBCoreXSD_Ver_1.2_D1\">")+PBCore_MediaType(MI)+__T("</formatMediaType>\n");
- else
- ToReturn+=__T("\t\t<formatMediaType version=\"PBCoreXSD_Ver_1.2_D1\">application/octet-stream</formatMediaType>\n");
-
- //formatGenerations
- ToReturn+=__T("\t\t<formatGenerations version=\"PBCoreXSD_Ver_1.2_D1\" />\n");
-
- //formatFileSize
- if (!MI.Get(Stream_General, 0, General_FileSize).empty())
- ToReturn+=__T("\t\t<formatFileSize>")+MI.Get(Stream_General, 0, General_FileSize)+__T("</formatFileSize>\n");
-
- //formatTimeStart
- if (!MI.Get(Stream_Video, 0, Video_Delay_Original_String3).empty())
- ToReturn+=__T("\t\t<formatTimeStart>")+MI.Get(Stream_Video, 0, Video_Delay_Original_String3)+__T("</formatTimeStart>\n");
- else if (!MI.Get(Stream_Video, 0, Video_Delay_String3).empty())
- ToReturn+=__T("\t\t<formatTimeStart>")+MI.Get(Stream_Video, 0, Video_Delay_String3)+__T("</formatTimeStart>\n");
-
- //formatDuration
- if (!MI.Get(Stream_General, 0, General_Duration_String3).empty())
- ToReturn+=__T("\t\t<formatDuration>")+MI.Get(Stream_General, 0, General_Duration_String3)+__T("</formatDuration>\n");
-
- //formatDataRate
- if (!MI.Get(Stream_General, 0, General_OverallBitRate).empty())
- {
- ToReturn+=__T("\t\t<formatDataRate>");
- ToReturn+=MI.Get(Stream_General, 0, General_OverallBitRate);
- if (!MI.Get(Stream_General, 0, General_OverallBitRate_Mode).empty())
- ToReturn+=__T(' ')+MI.Get(Stream_General, 0, General_OverallBitRate_Mode);
- ToReturn+=__T("</formatDataRate>\n");
- }
-
- //formatTracks
- ToReturn+=__T("\t\t<formatTracks>")+Ztring::ToZtring(MI.Count_Get(Stream_Video)+MI.Count_Get(Stream_Audio)+MI.Count_Get(Stream_Image)+MI.Count_Get(Stream_Text))+__T("</formatTracks>\n");
-
- //Streams
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<MI.Count_Get((stream_t)StreamKind); StreamPos++)
- PBCore_Transform(ToReturn, MI, (stream_t)StreamKind, StreamPos);
-
- ToReturn+=__T("\t</pbcoreInstantiation>\n");
- ToReturn+=__T("</PBCoreDescriptionDocument>\n");
-
- //Carriage return
- ToReturn.FindAndReplace(__T("\n"), EOL, 0, Ztring_Recursive);
-
- return ToReturn;
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_PBCore.h b/src/thirdparty/MediaInfo/MediaInfo/Export/Export_PBCore.h
deleted file mode 100644
index a3742b11e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_PBCore.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef Export_PBCoreH
-#define Export_PBCoreH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Internal.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-/// @brief Export_PBCore
-//***************************************************************************
-
-class Export_PBCore
-{
-public :
- //Constructeur/Destructeur
- Export_PBCore ();
- ~Export_PBCore ();
-
- //Input
- Ztring Transform(MediaInfo_Internal &MI);
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_reVTMD.cpp b/src/thirdparty/MediaInfo/MediaInfo/Export/Export_reVTMD.cpp
deleted file mode 100644
index 9c65a0f7e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_reVTMD.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-// reVTMD is disabled due to its non-free licensing.
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_reVTMD.h b/src/thirdparty/MediaInfo/MediaInfo/Export/Export_reVTMD.h
deleted file mode 100644
index 2eef20021..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Export/Export_reVTMD.h
+++ /dev/null
@@ -1 +0,0 @@
-// reVTMD is disabled due to its non-compatible licensing.
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File_Dummy.cpp b/src/thirdparty/MediaInfo/MediaInfo/File_Dummy.cpp
deleted file mode 100644
index 90aa49ed4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File_Dummy.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DUMMY_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File_Dummy.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dummy::FileHeader_Parse()
-{
- File_Name=__T("D:\\Example\\"); File_Name+=KindOfDummy;
- if (KindOfDummy==__T("Album"))
- {
- Fill_Dummy_General();
- Fill_Dummy_Audio();
- }
- else if (KindOfDummy==__T("Comic"))
- {
- Fill_Dummy_General();
- Fill_Dummy_Video();
- }
- else if (KindOfDummy==__T("Movie"))
- {
- Fill_Dummy_General();
- Fill_Dummy_Video();
- Fill_Dummy_Video();
- Fill_Dummy_Audio();
- Fill_Dummy_Audio();
- Fill_Dummy_Audio();
- Fill_Dummy_Audio();
- Fill_Dummy_Text();
- Fill_Dummy_Text();
- Fill_Dummy_Text();
- Fill_Dummy_Text();
- Fill_Dummy_Chapters();
- Fill_Dummy_Chapters();
- }
- else
- {
- File_Name=__T("D:\\WhatIsIt.mkv");
- Fill(Stream_General, 0, General_Domain, "Starwars saga");
- Fill(Stream_General, 0, General_Movie, "Starwars 4");
- Fill(Stream_General, 0, General_Movie_More, "A new hope");
- Fill(Stream_General, 0, General_Director, "Georges Lucas");
- Fill(Stream_General, 0, General_Released_Date, "1977");
- Fill(Stream_General, 0, General_FileSize, "734000000");
- Fill(Stream_General, 0, General_Format, "Matroska");
- Fill(Stream_General, 0, General_Format_Url, "http://MediaArea.net/MediaInfo");
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Codec, "XVID");
- Fill(Stream_Video, 0, Video_Codec_Url, "http://MediaArea.net/MediaInfo");
- Fill(Stream_Video, 0, Video_BitRate, "800000");
- Fill(Stream_Video, 0, Video_Width, "720");
- Fill(Stream_Video, 0, Video_Height, "320");
- Fill(Stream_Video, 0, Video_FrameRate, "24.976");
- Fill(Stream_Video, 0, Video_BitDepth, "8");
- Fill(Stream_Video, 0, Video_Language, "en");
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "AC-3");
- Fill(Stream_Audio, 0, Audio_Codec, "AC3");
- Fill(Stream_Audio, 0, Audio_Codec_Url, "http://MediaArea.net/MediaInfo");
- Fill(Stream_Audio, 0, Audio_BitRate, "384000");
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
- Fill(Stream_Audio, 0, Audio_Channel_s_, "6");
- Fill(Stream_Audio, 0, Audio_SamplingRate, "48000");
- Fill(Stream_Audio, 0, Audio_Language, "en");
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Codec, "SSA");
- Fill(Stream_Text, 0, Text_Codec_Url, "http://MediaArea.net/MediaInfo");
- Fill(Stream_Text, 0, Text_Language, "en");
- Fill(Stream_Text, 0, Text_Language_More, "Forced");
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, 0, Chapters_Total, "16");
- Fill(Stream_Other, 0, Chapters_Language, "en");
- }
-
- Accept();
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dummy::Fill_Dummy_General()
-{
- Fill(Stream_General, 0, General_Format, "Format");
- Fill(Stream_General, 0, General_Format_Url, "http://MediaArea.net/MediaInfo");
- Fill(Stream_General, 0, General_Format_Extensions, "fmt fmt fmt");
- Fill(Stream_General, 0, General_FileSize, "1000000");
- Fill(Stream_General, 0, General_Duration, "10000");
- Fill(Stream_General, 0, General_Domain, "Domain");
- Fill(Stream_General, 0, General_Collection, "Collection");
- Fill(Stream_General, 0, General_Season, "Season");
- Fill(Stream_General, 0, General_Season_Position_Total, "Season/Position_Total");
- if (KindOfDummy==__T("Album"))
- {
- Fill(Stream_General, 0, General_Album, "Album name");
- Fill(Stream_General, 0, General_Album_More, "More information about the album");
- Fill(Stream_General, 0, General_Part, "Part");
- Fill(Stream_General, 0, General_Part_Position_Total, "Part/Position_Total");
- Fill(Stream_General, 0, General_Part_Position, "Part/Position");
- Fill(Stream_General, 0, General_Track, "Track");
- Fill(Stream_General, 0, General_Track_Position, "Track/Position");
- Fill(Stream_General, 0, General_Track_More, "More information about the track");
- }
- else if (KindOfDummy==__T("Comic"))
- {
- Fill(Stream_General, 0, General_Comic, "Comic name");
- Fill(Stream_General, 0, General_Comic_More, "More information about the comic");
- }
- else //if (KindOfDummy==__T("Movie"))
- {
- Fill(Stream_General, 0, General_Movie, "Movie name");
- Fill(Stream_General, 0, General_Movie_More, "More information about the movie");
- }
- Fill(Stream_General, 0, General_Performer, "Performer");
- Fill(Stream_General, 0, General_Performer_Sort, "Performer/Sort");
- Fill(Stream_General, 0, General_Performer_Url, "Performer/Url");
- Fill(Stream_General, 0, General_Original_Performer, "Original/Performer");
- Fill(Stream_General, 0, General_Accompaniment, "Accompaniment");
- Fill(Stream_General, 0, General_Composer, "Composer");
- Fill(Stream_General, 0, General_Composer_Nationality, "Composer/Nationality");
- Fill(Stream_General, 0, General_Arranger, "Arranger");
- Fill(Stream_General, 0, General_Lyricist, "Lyricist");
- Fill(Stream_General, 0, General_Original_Lyricist, "Original/Lyricist");
- Fill(Stream_General, 0, General_Conductor, "Conductor");
- Fill(Stream_General, 0, General_Actor, "Actor");
- Fill(Stream_General, 0, General_Actor_Character, "Actor_Character");
- Fill(Stream_General, 0, General_WrittenBy, "WrittenBy");
- Fill(Stream_General, 0, General_ScreenplayBy, "ScreenplayBy");
- Fill(Stream_General, 0, General_Director, "Director");
- Fill(Stream_General, 0, General_AssistantDirector, "AssistantDirector");
- Fill(Stream_General, 0, General_DirectorOfPhotography, "DirectorOfPhotography");
- Fill(Stream_General, 0, General_ArtDirector, "ArtDirector");
- Fill(Stream_General, 0, General_EditedBy, "EditedBy");
- Fill(Stream_General, 0, General_Producer, "Producer");
- Fill(Stream_General, 0, General_CoProducer, "CoProducer");
- Fill(Stream_General, 0, General_ExecutiveProducer, "ExecutiveProducer");
- Fill(Stream_General, 0, General_ProductionDesigner, "ProductionDesigner");
- Fill(Stream_General, 0, General_CostumeDesigner, "CostumeDesigner");
- Fill(Stream_General, 0, General_Choregrapher, "Choregrapher");
- Fill(Stream_General, 0, General_SoundEngineer, "SoundEngineer");
- Fill(Stream_General, 0, General_MasteredBy, "MasteredBy");
- Fill(Stream_General, 0, General_RemixedBy, "RemixedBy");
- Fill(Stream_General, 0, General_ProductionStudio, "ProductionStudio");
- Fill(Stream_General, 0, General_Label, "Label");
- Fill(Stream_General, 0, General_Publisher, "Publisher");
- Fill(Stream_General, 0, General_Publisher_URL, "Publisher/URL");
- Fill(Stream_General, 0, General_DistributedBy, "DistributedBy");
- Fill(Stream_General, 0, General_EncodedBy, "EncodedBy");
- Fill(Stream_General, 0, General_ThanksTo, "ThanksTo");
- Fill(Stream_General, 0, General_ServiceName, "ServiceNeme");
- Fill(Stream_General, 0, General_ServiceProvider, "ServiceProvider");
- Fill(Stream_General, 0, General_Service_Url, "Service/URL");
- Fill(Stream_General, 0, General_ContentType, "ContentType");
- Fill(Stream_General, 0, General_Subject, "Subject");
- Fill(Stream_General, 0, General_Synopsis, "Synopsis");
- Fill(Stream_General, 0, General_Summary, "Summary");
- Fill(Stream_General, 0, General_Description, "Description");
- Fill(Stream_General, 0, General_Keywords, "Keywords");
- Fill(Stream_General, 0, General_Period, "Period");
- Fill(Stream_General, 0, General_LawRating, "LawRating");
- Fill(Stream_General, 0, General_Written_Date, "Written_Date");
- Fill(Stream_General, 0, General_Recorded_Date, "Recorded_Date");
- Fill(Stream_General, 0, General_Released_Date, "Released_Date");
- Fill(Stream_General, 0, General_Mastered_Date, "Mastered_Date");
- Fill(Stream_General, 0, General_Encoded_Date, "Encoded_Date");
- Fill(Stream_General, 0, General_Tagged_Date, "Tagged_Date");
- Fill(Stream_General, 0, General_Original_Released_Date, "Original/Released_Date");
- Fill(Stream_General, 0, General_Written_Location, "Written_Location");
- Fill(Stream_General, 0, General_Recorded_Location, "Recorded_Location");
- Fill(Stream_General, 0, General_Archival_Location, "Archival_Location");
- Fill(Stream_General, 0, General_Genre, "Genre");
- Fill(Stream_General, 0, General_Mood, "Mood");
- Fill(Stream_General, 0, General_Comment, "Comment");
- Fill(Stream_General, 0, General_Rating , "Rating ");
- Fill(Stream_General, 0, General_Encoded_Application, "Encoded_Application");
- Fill(Stream_General, 0, General_Encoded_Library, "Encoded_Library");
- Fill(Stream_General, 0, General_Encoded_Library_Settings, "Encoded_Library_Settings");
- Fill(Stream_General, 0, General_Copyright, "Copyright");
- Fill(Stream_General, 0, General_Producer_Copyright, "Producer_Copyright");
- Fill(Stream_General, 0, General_TermsOfUse, "TermsOfUse");
- Fill(Stream_General, 0, General_Copyright_Url, "Copyright/Url");
- Fill(Stream_General, 0, General_ISRC, "ISRC");
- Fill(Stream_General, 0, General_ISBN, "ISBN");
- Fill(Stream_General, 0, General_BarCode, "BarCode");
- Fill(Stream_General, 0, General_LCCN, "LCCN");
- Fill(Stream_General, 0, General_CatalogNumber, "CatalogNumber");
- Fill(Stream_General, 0, General_LabelCode, "LabelCode");
- Fill(Stream_General, 0, General_Cover, "Y");
- Fill(Stream_General, 0, General_Cover_Data, "Cover_Datas");
- Fill(Stream_General, 0, General_Summary, "Summary");
- Fill(Stream_General, 0, General_BPM, "100");
-}
-
-//---------------------------------------------------------------------------
-void File_Dummy::Fill_Dummy_Video()
-{
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_ID, "ID");
- Fill(Stream_Video, 0, Video_UniqueID, "UniqueID");
- Fill(Stream_Video, 0, Video_Title, "Title");
- Fill(Stream_Video, 0, Video_Codec, "Codec");
- Fill(Stream_Video, 0, Video_Codec_Info, "Codec/Info");
- Fill(Stream_Video, 0, Video_Codec_Url, "http://--Codec/Url--");
- Fill(Stream_Video, 0, Video_BitRate, "10000");
- Fill(Stream_Video, 0, Video_BitRate_Mode, "BitRate_Mode");
- Fill(Stream_Video, 0, Video_Encoded_Library, "Encoded_Library");
- Fill(Stream_Video, 0, Video_Encoded_Library_Settings, "Encoded_Library_Settings");
- if (KindOfDummy==__T("Album"))
- {
- Fill(Stream_Video, 0, Video_Width, "2000");
- Fill(Stream_Video, 0, Video_Height, "3000");
- }
- else //if (KindOfDummy==__T("Movie"))
- {
- Fill(Stream_Video, 0, Video_DisplayAspectRatio, "2");
- Fill(Stream_Video, 0, Video_FrameRate, "24.976");
- Fill(Stream_Video, 0, Video_FrameCount, "FrameCount");
- Fill(Stream_Video, 0, Video_BitDepth, "8");
- Fill(Stream_Video, 0, Video_Bits__Pixel_Frame_, "Bits/(Pixel*Frame)");
- Fill(Stream_Video, 0, Video_Delay, "100");
- Fill(Stream_Video, 0, Video_Duration, "990000");
- }
- Fill(Stream_Video, 0, Video_Language, "eng");
- Fill(Stream_Video, 0, Video_Language_More, "Language_More");
-}
-
-//---------------------------------------------------------------------------
-void File_Dummy::Fill_Dummy_Audio()
-{
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_ID, "ID");
- Fill(Stream_Audio, 0, Audio_UniqueID, "UniqueID");
- Fill(Stream_Audio, 0, Audio_Title, "Title");
- Fill(Stream_Audio, 0, Audio_Format, "Format");
- Fill(Stream_Audio, 0, Audio_Format_Info, "Format/Info");
- Fill(Stream_Audio, 0, Audio_Format_Url, "http://--Format/Url--");
- Fill(Stream_Audio, 0, Audio_Codec, "Codec");
- Fill(Stream_Audio, 0, Audio_Codec_Info, "Codec/Info");
- Fill(Stream_Audio, 0, Audio_Codec_Url, "http://--Codec/Url--");
- Fill(Stream_Audio, 0, Audio_BitRate, "1000");
- Fill(Stream_Audio, 0, Audio_BitRate_Mode, "BitRate_Mode");
- Fill(Stream_Audio, 0, Audio_Encoded_Library, "Encoded_Library");
- Fill(Stream_Audio, 0, Audio_Encoded_Library_Settings, "Encoded_Library_Settings");
- Fill(Stream_Audio, 0, Audio_Channel_s_, 2);
- Fill(Stream_Audio, 0, Audio_ChannelPositions, "ChannelPositions");
- Fill(Stream_Audio, 0, Audio_SamplingRate, "48000");
- Fill(Stream_Audio, 0, Audio_SamplingCount, "SamplingCount");
- Fill(Stream_Audio, 0, Audio_BitDepth, "BitDepth");
- Fill(Stream_Audio, 0, Audio_Delay, "10");
- Fill(Stream_Audio, 0, Audio_Duration, "100000");
- Fill(Stream_Audio, 0, Audio_Language, "fre");
- Fill(Stream_Audio, 0, Audio_Language_More, "Language_More");
-}
-
-//---------------------------------------------------------------------------
-void File_Dummy::Fill_Dummy_Text()
-{
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_ID, "ID");
- Fill(Stream_Text, 0, Text_UniqueID, "UniqueID");
- Fill(Stream_Text, 0, Text_Title, "Title");
- Fill(Stream_Text, 0, Text_Codec, "Codec");
- Fill(Stream_Text, 0, Text_Codec_Url, "http://--Codec/Url--");
- Fill(Stream_Text, 0, Text_Delay, "100");
- Fill(Stream_Text, 0, Text_Duration, "100");
- Fill(Stream_Text, 0, Text_Language, "de");
- Fill(Stream_Text, 0, Text_Language_More, "Language_More");
- Fill(Stream_Text, 0, Text_Summary, "Summary");
-}
-
-//---------------------------------------------------------------------------
-void File_Dummy::Fill_Dummy_Chapters()
-{
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, 0, Chapters_ID, "ID");
- Fill(Stream_Other, 0, Chapters_UniqueID, "UniqueID");
- Fill(Stream_Other, 0, Chapters_Title, "Title");
- Fill(Stream_Other, 0, Chapters_Total, "Total");
- Fill(Stream_Other, 0, Chapters_Language, "de");
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File_Dummy.h b/src/thirdparty/MediaInfo/MediaInfo/File_Dummy.h
deleted file mode 100644
index f9ab4ee57..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File_Dummy.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Fill with Name of tags
-// Used to give an example to the GUI of what MediaInfo can do
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DummyH
-#define MediaInfo_File_DummyH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Dummy
-//***************************************************************************
-
-class File_Dummy : public File__Analyze
-{
-public :
- Ztring KindOfDummy;
-
-protected :
- //Buffer - File header
- void FileHeader_Parse ();
-
-private :
- void Fill_Dummy_General();
- void Fill_Dummy_Video();
- void Fill_Dummy_Audio();
- void Fill_Dummy_Text();
- void Fill_Dummy_Chapters();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File_Other.cpp b/src/thirdparty/MediaInfo/MediaInfo/File_Other.cpp
deleted file mode 100644
index 75ad3f03f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File_Other.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_OTHER_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File_Other.h"
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Other::Read_Buffer_Continue()
-{
- //Integrity
- if (Buffer_Size<16)
- {
- Element_WaitForMoreData();
- return;
- }
-
- Ztring Format;
- if (CC4(Buffer)==0xC5C6CBC3) {Format=__T("RISC OS Chunk data");}
- else if (CC4(Buffer)==0x110000EF) {Format=__T("RISC OS AIF executable");}
- else if (CC4(Buffer)==CC4("Draw")) {Format=__T("RISC OS Draw");}
- else if (CC4(Buffer)==CC4("FONT")) {Format=__T("RISC OS Font");}
- else if (CC8(Buffer)==CC8("Maestro\r")) {Format=__T("RISC OS music file");}
- else if (CC4(Buffer)==CC4("FC14")) {Format=__T("Amiga Future Composer");}
- else if (CC4(Buffer)==CC4("SMOD")) {Format=__T("Amiga Future Composer");}
- else if (CC4(Buffer)==CC4("AON4")) {Format=__T("Amiga Art Of Noise");}
- else if (CC8(Buffer+1)==CC8("MUGICIAN")) {Format=__T("Amiga Mugician");}
- else if (Buffer_Size>=66 && CC8(Buffer+58)==CC8("SIDMON I")) {Format=__T("Amiga Sidmon");}
- else if (CC8(Buffer)==CC8("Synth4.0")) {Format=__T("Amiga Synthesis");}
- else if (CC4(Buffer)==CC4("ARP.")) {Format=__T("Amiga Holy Noise");}
- else if (CC4(Buffer)==CC4("BeEp")) {Format=__T("Amiga JamCracker");}
- else if (CC4(Buffer)==CC4("COSO")) {Format=__T("Amiga Hippel-COSO");}
- else if (CC3(Buffer)==CC3("LSX")) {Format=__T("Amiga LZX");}
- else if (CC4(Buffer)==CC4("MOVI")) {Format=__T("Silicon Graphics movie");}
- else if (CC4(Buffer+10)==CC4("Vivo")) {Format=__T("Vivo");}
- else if (CC4(Buffer+1)==CC4("VRML")) {Format=__T("VRML");}
- else if (CC5(Buffer)==CC5("HVQM4")) {Format=__T("GameCube Movie");}
- else if (CC8(Buffer)==CC8("KW-DIRAC"))
- {
- Accept("Dirac");
-
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "Dirac");
-
- Finish("Dirac");
- return;
- }
- else if (CC5(Buffer)==CC5("ustar")) {Format=__T("Tar archive");}
- //TODO: all archive magic numbers
- else if (CC4(Buffer+1)==CC4("MSCB")) {Format=__T("MS Cabinet");}
- else if (CC4(Buffer)==CC4(".snd")) {Format=__T("SUN Audio");}
- else if (CC4(Buffer)==0x2E736400) {Format=__T("DEC Audio");}
- else if (CC4(Buffer)==CC4("MThd")) {Format=__T("MIDI");}
- else if (CC4(Buffer)==CC4("CTMF")) {Format=__T("CMF");}
- else if (CC3(Buffer)==CC3("SBI")) {Format=__T("SoundBlaster");}
- else if (CC4(Buffer)==CC4("EMOD")) {Format=__T("Ext. MOD");}
- //TODO: Other Sound magic numbers
- else if (CC7(Buffer)==CC7("BLENDER")) {Format=__T("Blender");}
- else if (CC4(Buffer)==CC4("AC10")) {Format=__T("AutoCAD"); ;}
- else if (CC2(Buffer)==0x1F9D) {Format=__T("Compress");}
- else if (CC2(Buffer)==0x1F8B) {Format=__T("GZip");}
- else if (CC2(Buffer)==0x1F1E) {Format=__T("Huffman");}
- else if (CC3(Buffer)==CC3("BZh")) {Format=__T("BZip2");}
- else if (CC2(Buffer)==CC2("BZ")) {Format=__T("BZip1");}
- else if (CC3(Buffer)==CC3("NES")) {Format=__T("NES ROM");}
- else if (Buffer_Size>=0x108 && CC4(Buffer+0x104)==0xCEED6666) {Format=__T("GameBoy");}
- else if (Buffer_Size>=0x104 && CC4(Buffer+0x100)==CC4("SEGA")) {Format=__T("MegaDrive");}
- else if (Buffer_Size>=0x284 && CC4(Buffer+0x280)==CC4("EAGN")) {Format=__T("SupeMegaDrive");}
- else if (Buffer_Size>=0x284 && CC4(Buffer+0x280)==CC4("EAMG")) {Format=__T("SupeMegaDrive");}
- else if (CC4(Buffer)==0x21068028) {Format=__T("Dreamcast");}
- else if (CC4(Buffer)==CC4("LCDi")) {Format=__T("Dreamcast");}
- else if (CC4(Buffer)==0x37804012) {Format=__T("Nintendo64");}
- else if (CC8(Buffer)==CC8("PS-X EXE")) {Format=__T("Playstation");}
- else if (CC4(Buffer)==CC4("LCDi")) {Format=__T("Dreamcast");}
- else if (CC4(Buffer)==CC4("XBEH")) {Format=__T("X-Box");}
- else if (CC4(Buffer)==CC4("XIP0")) {Format=__T("X-Box");}
- else if (CC4(Buffer)==CC4("XTF0")) {Format=__T("X-Box");}
- else if (CC2(Buffer)==0x8008) {Format=__T("Lynx");}
- else if (CC7(Buffer)==CC7("\x01ZZZZZ\x01")) {Format=__T("");}
- else if (CC6(Buffer)==CC6("1\x0A\x0D""00:"))
- {
- Accept("SRT");
-
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Format, "SRT");
-
- Finish("SRT");
- return;
- }
- else if ((CC1(Buffer+0)==CC1("[") && CC1(Buffer+2)==CC1("S") && CC1(Buffer+22)==CC1("o") && CC1(Buffer+24)==CC1("]")) //Unicode Text is : "[Script Info]
- || (CC1(Buffer+2)==CC1("[") && CC1(Buffer+4)==CC1("S") && CC1(Buffer+24)==CC1("o") && CC1(Buffer+26)==CC1("]")))
- {
- Accept("SSA");
-
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Format, "SSA");
-
- Finish("SSA");
- return;
- }
- else if (CC4(Buffer)==CC4("RIFF") && CC4(Buffer+8)==CC4("AMV ")) {Format=__T("AMV");}
- else if (CC4(Buffer)==CC4("RIFF") && CC4(Buffer+8)==CC4("WEBP"))
- {
- Accept("WEBP");
-
- Stream_Prepare(Stream_Image);
- Fill(Stream_Image, 0, Image_Format, "WebP");
-
- Finish("WEBP");
- return;
- }
- else if (CC4(Buffer)==0x414D5697) {Format=__T("MTV");}
- else if (CC6(Buffer)==CC6("Z\0W\0F\0"))
- {
- Accept("ZWF");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "ZWF");
-
- Finish("ZWF");
- return;
- }
- else if (CC4(Buffer)==0x616A6B67) //"ajkg"
- {
- Accept("Shorten");
-
- Fill(Stream_General, 0, General_Format_Version, CC1(Buffer+4));
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "Shorten");
-
- Finish("Shorten");
- return;
- }
- else if (CC4(Buffer)==0x504C5646) {Format=__T("PlayLater Video");}
- else if (CC4(Buffer)==CC4("")) {Format=__T("");}
-
- if (Format.empty())
- {
- Reject();
- return;
- }
-
- Accept();
-
- Element_Offset=File_Size-(File_Offset+Buffer_Offset);
- Fill(Stream_General, 0, General_Format, Format);
-
- Finish();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_OTHER_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File_Other.h b/src/thirdparty/MediaInfo/MediaInfo/File_Other.h
deleted file mode 100644
index b3632453e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File_Other.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Use magic number to detect only the format
-// Theses formats are not planned to be expanded, this is only to detect
-// well all files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_OtherH
-#define MediaInfo_File_OtherH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Other
-//***************************************************************************
-
-class File_Other : public File__Analyze
-{
-protected :
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File_Unknown.cpp b/src/thirdparty/MediaInfo/MediaInfo/File_Unknown.cpp
deleted file mode 100644
index 7c6c86160..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File_Unknown.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_UNKNOWN_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File_Unknown.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Unknown::Read_Buffer_Init()
-{
- Accept("Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Unknown::Read_Buffer_Continue()
-{
- Element_Offset=File_Size;
- Finish("Unknown");
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_UNKNOWN_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File_Unknown.h b/src/thirdparty/MediaInfo/MediaInfo/File_Unknown.h
deleted file mode 100644
index 29159ef59..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File_Unknown.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Empty container
-// This is only to have a void parser
-// It fill basic fields (filename...) only
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_UnknownH
-#define MediaInfo_File_UnknownH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Unknown
-//***************************************************************************
-
-class File_Unknown : public File__Analyze
-{
-protected :
- //Buffer - Global
- void Read_Buffer_Init ();
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Analyse_Automatic.h b/src/thirdparty/MediaInfo/MediaInfo/File__Analyse_Automatic.h
deleted file mode 100644
index 0ee2ed7ec..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Analyse_Automatic.h
+++ /dev/null
@@ -1,1408 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Automaticly generated methods for MediaInfo
-// Don't modify, this will be deleted at the next automatic update
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File__Analyze_AutomaticH
-#define MediaInfo_File__Analyze_AutomaticH
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-enum generic
-{
- Generic_Format,
- Generic_Format_Info,
- Generic_Format_Url,
- Generic_Format_Commercial,
- Generic_Format_Commercial_IfAny,
- Generic_Format_Version,
- Generic_Format_Profile,
- Generic_Format_Compression,
- Generic_Format_Settings,
- Generic_InternetMediaType,
- Generic_CodecID,
- Generic_CodecID_Info,
- Generic_CodecID_Hint,
- Generic_CodecID_Url,
- Generic_CodecID_Description,
- Generic_Codec,
- Generic_Codec_String,
- Generic_Codec_Info,
- Generic_Codec_Url,
- Generic_Codec_CC,
- Generic_Duration,
- Generic_Duration_String,
- Generic_Duration_String1,
- Generic_Duration_String2,
- Generic_Duration_String3,
- Generic_Source_Duration,
- Generic_Source_Duration_String,
- Generic_Source_Duration_String1,
- Generic_Source_Duration_String2,
- Generic_Source_Duration_String3,
- Generic_BitRate_Mode,
- Generic_BitRate_Mode_String,
- Generic_BitRate,
- Generic_BitRate_String,
- Generic_BitRate_Minimum,
- Generic_BitRate_Minimum_String,
- Generic_BitRate_Nominal,
- Generic_BitRate_Nominal_String,
- Generic_BitRate_Maximum,
- Generic_BitRate_Maximum_String,
- Generic_BitRate_Encoded,
- Generic_BitRate_Encoded_String,
- Generic_FrameCount,
- Generic_Source_FrameCount,
- Generic_ColorSpace,
- Generic_ChromaSubsampling,
- Generic_Resolution,
- Generic_Resolution_String,
- Generic_BitDepth,
- Generic_BitDepth_String,
- Generic_Compression_Mode,
- Generic_Compression_Mode_String,
- Generic_Compression_Ratio,
- Generic_Delay,
- Generic_Delay_String,
- Generic_Delay_String1,
- Generic_Delay_String2,
- Generic_Delay_String3,
- Generic_Delay_String4,
- Generic_Delay_Settings,
- Generic_Delay_DropFrame,
- Generic_Delay_Source,
- Generic_Delay_Source_String,
- Generic_Delay_Original,
- Generic_Delay_Original_String,
- Generic_Delay_Original_String1,
- Generic_Delay_Original_String2,
- Generic_Delay_Original_String3,
- Generic_Delay_Original_String4,
- Generic_Delay_Original_Settings,
- Generic_Delay_Original_DropFrame,
- Generic_Delay_Original_Source,
- Generic_Video_Delay,
- Generic_Video_Delay_String,
- Generic_Video_Delay_String1,
- Generic_Video_Delay_String2,
- Generic_Video_Delay_String3,
- Generic_Video_Delay_String4,
- Generic_StreamSize,
- Generic_StreamSize_String,
- Generic_StreamSize_String1,
- Generic_StreamSize_String2,
- Generic_StreamSize_String3,
- Generic_StreamSize_String4,
- Generic_StreamSize_String5,
- Generic_StreamSize_Proportion,
- Generic_Source_StreamSize,
- Generic_Source_StreamSize_String,
- Generic_Source_StreamSize_String1,
- Generic_Source_StreamSize_String2,
- Generic_Source_StreamSize_String3,
- Generic_Source_StreamSize_String4,
- Generic_Source_StreamSize_String5,
- Generic_Source_StreamSize_Proportion,
- Generic_StreamSize_Encoded,
- Generic_StreamSize_Encoded_String,
- Generic_StreamSize_Encoded_String1,
- Generic_StreamSize_Encoded_String2,
- Generic_StreamSize_Encoded_String3,
- Generic_StreamSize_Encoded_String4,
- Generic_StreamSize_Encoded_String5,
- Generic_StreamSize_Encoded_Proportion,
- Generic_Source_StreamSize_Encoded,
- Generic_Source_StreamSize_Encoded_String,
- Generic_Source_StreamSize_Encoded_String1,
- Generic_Source_StreamSize_Encoded_String2,
- Generic_Source_StreamSize_Encoded_String3,
- Generic_Source_StreamSize_Encoded_String4,
- Generic_Source_StreamSize_Encoded_String5,
- Generic_Source_StreamSize_Encoded_Proportion,
- Generic_Language,
- Generic_ServiceName,
- Generic_ServiceProvider,
-};
-
-//---------------------------------------------------------------------------
-enum general
-{
- General_Count,
- General_Status,
- General_StreamCount,
- General_StreamKind,
- General_StreamKind_String,
- General_StreamKindID,
- General_StreamKindPos,
- General_StreamOrder,
- General_FirstPacketOrder,
- General_Inform,
- General_ID,
- General_ID_String,
- General_UniqueID,
- General_UniqueID_String,
- General_MenuID,
- General_MenuID_String,
- General_GeneralCount,
- General_VideoCount,
- General_AudioCount,
- General_TextCount,
- General_OtherCount,
- General_ImageCount,
- General_MenuCount,
- General_Video_Format_List,
- General_Video_Format_WithHint_List,
- General_Video_Codec_List,
- General_Video_Language_List,
- General_Audio_Format_List,
- General_Audio_Format_WithHint_List,
- General_Audio_Codec_List,
- General_Audio_Language_List,
- General_Text_Format_List,
- General_Text_Format_WithHint_List,
- General_Text_Codec_List,
- General_Text_Language_List,
- General_Other_Format_List,
- General_Other_Format_WithHint_List,
- General_Other_Codec_List,
- General_Other_Language_List,
- General_Image_Format_List,
- General_Image_Format_WithHint_List,
- General_Image_Codec_List,
- General_Image_Language_List,
- General_Menu_Format_List,
- General_Menu_Format_WithHint_List,
- General_Menu_Codec_List,
- General_Menu_Language_List,
- General_CompleteName,
- General_FolderName,
- General_FileName,
- General_FileExtension,
- General_CompleteName_Last,
- General_FolderName_Last,
- General_FileName_Last,
- General_FileExtension_Last,
- General_Format,
- General_Format_String,
- General_Format_Info,
- General_Format_Url,
- General_Format_Extensions,
- General_Format_Commercial,
- General_Format_Commercial_IfAny,
- General_Format_Version,
- General_Format_Profile,
- General_Format_Compression,
- General_Format_Settings,
- General_InternetMediaType,
- General_CodecID,
- General_CodecID_String,
- General_CodecID_Info,
- General_CodecID_Hint,
- General_CodecID_Url,
- General_CodecID_Description,
- General_Interleaved,
- General_Codec,
- General_Codec_String,
- General_Codec_Info,
- General_Codec_Url,
- General_Codec_Extensions,
- General_Codec_Settings,
- General_Codec_Settings_Automatic,
- General_FileSize,
- General_FileSize_String,
- General_FileSize_String1,
- General_FileSize_String2,
- General_FileSize_String3,
- General_FileSize_String4,
- General_Duration,
- General_Duration_String,
- General_Duration_String1,
- General_Duration_String2,
- General_Duration_String3,
- General_Duration_Start,
- General_Duration_End,
- General_OverallBitRate_Mode,
- General_OverallBitRate_Mode_String,
- General_OverallBitRate,
- General_OverallBitRate_String,
- General_OverallBitRate_Minimum,
- General_OverallBitRate_Minimum_String,
- General_OverallBitRate_Nominal,
- General_OverallBitRate_Nominal_String,
- General_OverallBitRate_Maximum,
- General_OverallBitRate_Maximum_String,
- General_Delay,
- General_Delay_String,
- General_Delay_String1,
- General_Delay_String2,
- General_Delay_String3,
- General_StreamSize,
- General_StreamSize_String,
- General_StreamSize_String1,
- General_StreamSize_String2,
- General_StreamSize_String3,
- General_StreamSize_String4,
- General_StreamSize_String5,
- General_StreamSize_Proportion,
- General_HeaderSize,
- General_DataSize,
- General_FooterSize,
- General_IsStreamable,
- General_Album_ReplayGain_Gain,
- General_Album_ReplayGain_Gain_String,
- General_Album_ReplayGain_Peak,
- General_Encryption,
- General_Encryption_Format,
- General_Encryption_Length,
- General_Encryption_Method,
- General_Encryption_Mode,
- General_Encryption_Padding,
- General_Encryption_InitializationVector,
- General_Title,
- General_Title_More,
- General_Title_Url,
- General_Domain,
- General_Collection,
- General_Season,
- General_Season_Position,
- General_Season_Position_Total,
- General_Movie,
- General_Movie_More,
- General_Movie_Country,
- General_Movie_Url,
- General_Album,
- General_Album_More,
- General_Album_Sort,
- General_Album_Performer,
- General_Album_Performer_Sort,
- General_Album_Performer_Url,
- General_Comic,
- General_Comic_More,
- General_Comic_Position_Total,
- General_Part,
- General_Part_Position,
- General_Part_Position_Total,
- General_Track,
- General_Track_More,
- General_Track_Url,
- General_Track_Sort,
- General_Track_Position,
- General_Track_Position_Total,
- General_Grouping,
- General_Chapter,
- General_SubTrack,
- General_Original_Album,
- General_Original_Movie,
- General_Original_Part,
- General_Original_Track,
- General_Compilation,
- General_Compilation_String,
- General_Performer,
- General_Performer_Sort,
- General_Performer_Url,
- General_Original_Performer,
- General_Accompaniment,
- General_Composer,
- General_Composer_Nationality,
- General_Arranger,
- General_Lyricist,
- General_Original_Lyricist,
- General_Conductor,
- General_Director,
- General_AssistantDirector,
- General_DirectorOfPhotography,
- General_SoundEngineer,
- General_ArtDirector,
- General_ProductionDesigner,
- General_Choregrapher,
- General_CostumeDesigner,
- General_Actor,
- General_Actor_Character,
- General_WrittenBy,
- General_ScreenplayBy,
- General_EditedBy,
- General_CommissionedBy,
- General_Producer,
- General_CoProducer,
- General_ExecutiveProducer,
- General_MusicBy,
- General_DistributedBy,
- General_OriginalSourceForm_DistributedBy,
- General_MasteredBy,
- General_EncodedBy,
- General_RemixedBy,
- General_ProductionStudio,
- General_ThanksTo,
- General_Publisher,
- General_Publisher_URL,
- General_Label,
- General_Genre,
- General_Mood,
- General_ContentType,
- General_Subject,
- General_Description,
- General_Keywords,
- General_Summary,
- General_Synopsis,
- General_Period,
- General_LawRating,
- General_LawRating_Reason,
- General_ICRA,
- General_Released_Date,
- General_Original_Released_Date,
- General_Recorded_Date,
- General_Encoded_Date,
- General_Tagged_Date,
- General_Written_Date,
- General_Mastered_Date,
- General_File_Created_Date,
- General_File_Created_Date_Local,
- General_File_Modified_Date,
- General_File_Modified_Date_Local,
- General_Recorded_Location,
- General_Written_Location,
- General_Archival_Location,
- General_Encoded_Application,
- General_Encoded_Application_Url,
- General_Encoded_Library,
- General_Encoded_Library_String,
- General_Encoded_Library_Name,
- General_Encoded_Library_Version,
- General_Encoded_Library_Date,
- General_Encoded_Library_Settings,
- General_Cropped,
- General_Dimensions,
- General_DotsPerInch,
- General_Lightness,
- General_OriginalSourceMedium,
- General_OriginalSourceForm,
- General_OriginalSourceForm_NumColors,
- General_OriginalSourceForm_Name,
- General_OriginalSourceForm_Cropped,
- General_OriginalSourceForm_Sharpness,
- General_Tagged_Application,
- General_BPM,
- General_ISRC,
- General_ISBN,
- General_BarCode,
- General_LCCN,
- General_CatalogNumber,
- General_LabelCode,
- General_Owner,
- General_Copyright,
- General_Copyright_Url,
- General_Producer_Copyright,
- General_TermsOfUse,
- General_ServiceName,
- General_ServiceChannel,
- General_Service_Url,
- General_ServiceProvider,
- General_ServiceProviderr_Url,
- General_ServiceType,
- General_NetworkName,
- General_OriginalNetworkName,
- General_Country,
- General_TimeZone,
- General_Cover,
- General_Cover_Description,
- General_Cover_Type,
- General_Cover_Mime,
- General_Cover_Data,
- General_Lyrics,
- General_Comment,
- General_Rating,
- General_Added_Date,
- General_Played_First_Date,
- General_Played_Last_Date,
- General_Played_Count,
- General_EPG_Positions_Begin,
- General_EPG_Positions_End,
-};
-
-//---------------------------------------------------------------------------
-enum video
-{
- Video_Count,
- Video_Status,
- Video_StreamCount,
- Video_StreamKind,
- Video_StreamKind_String,
- Video_StreamKindID,
- Video_StreamKindPos,
- Video_StreamOrder,
- Video_FirstPacketOrder,
- Video_Inform,
- Video_ID,
- Video_ID_String,
- Video_UniqueID,
- Video_UniqueID_String,
- Video_MenuID,
- Video_MenuID_String,
- Video_Format,
- Video_Format_Info,
- Video_Format_Url,
- Video_Format_Commercial,
- Video_Format_Commercial_IfAny,
- Video_Format_Version,
- Video_Format_Profile,
- Video_Format_Compression,
- Video_MultiView_BaseProfile,
- Video_MultiView_Count,
- Video_MultiView_Layout,
- Video_Format_Settings,
- Video_Format_Settings_BVOP,
- Video_Format_Settings_BVOP_String,
- Video_Format_Settings_QPel,
- Video_Format_Settings_QPel_String,
- Video_Format_Settings_GMC,
- Video_Format_Settings_GMC_String,
- Video_Format_Settings_Matrix,
- Video_Format_Settings_Matrix_String,
- Video_Format_Settings_Matrix_Data,
- Video_Format_Settings_CABAC,
- Video_Format_Settings_CABAC_String,
- Video_Format_Settings_RefFrames,
- Video_Format_Settings_RefFrames_String,
- Video_Format_Settings_Pulldown,
- Video_Format_Settings_FrameMode,
- Video_Format_Settings_GOP,
- Video_Format_Settings_PictureStructure,
- Video_Format_Settings_Wrapping,
- Video_InternetMediaType,
- Video_MuxingMode,
- Video_CodecID,
- Video_CodecID_String,
- Video_CodecID_Info,
- Video_CodecID_Hint,
- Video_CodecID_Url,
- Video_CodecID_Description,
- Video_Codec,
- Video_Codec_String,
- Video_Codec_Family,
- Video_Codec_Info,
- Video_Codec_Url,
- Video_Codec_CC,
- Video_Codec_Profile,
- Video_Codec_Description,
- Video_Codec_Settings,
- Video_Codec_Settings_PacketBitStream,
- Video_Codec_Settings_BVOP,
- Video_Codec_Settings_QPel,
- Video_Codec_Settings_GMC,
- Video_Codec_Settings_GMC_String,
- Video_Codec_Settings_Matrix,
- Video_Codec_Settings_Matrix_Data,
- Video_Codec_Settings_CABAC,
- Video_Codec_Settings_RefFrames,
- Video_Duration,
- Video_Duration_String,
- Video_Duration_String1,
- Video_Duration_String2,
- Video_Duration_String3,
- Video_Duration_String4,
- Video_Duration_FirstFrame,
- Video_Duration_FirstFrame_String,
- Video_Duration_FirstFrame_String1,
- Video_Duration_FirstFrame_String2,
- Video_Duration_FirstFrame_String3,
- Video_Duration_LastFrame,
- Video_Duration_LastFrame_String,
- Video_Duration_LastFrame_String1,
- Video_Duration_LastFrame_String2,
- Video_Duration_LastFrame_String3,
- Video_Source_Duration,
- Video_Source_Duration_String,
- Video_Source_Duration_String1,
- Video_Source_Duration_String2,
- Video_Source_Duration_String3,
- Video_Source_Duration_FirstFrame,
- Video_Source_Duration_FirstFrame_String,
- Video_Source_Duration_FirstFrame_String1,
- Video_Source_Duration_FirstFrame_String2,
- Video_Source_Duration_FirstFrame_String3,
- Video_Source_Duration_LastFrame,
- Video_Source_Duration_LastFrame_String,
- Video_Source_Duration_LastFrame_String1,
- Video_Source_Duration_LastFrame_String2,
- Video_Source_Duration_LastFrame_String3,
- Video_BitRate_Mode,
- Video_BitRate_Mode_String,
- Video_BitRate,
- Video_BitRate_String,
- Video_BitRate_Minimum,
- Video_BitRate_Minimum_String,
- Video_BitRate_Nominal,
- Video_BitRate_Nominal_String,
- Video_BitRate_Maximum,
- Video_BitRate_Maximum_String,
- Video_BitRate_Encoded,
- Video_BitRate_Encoded_String,
- Video_Width,
- Video_Width_String,
- Video_Width_Offset,
- Video_Width_Offset_String,
- Video_Width_Original,
- Video_Width_Original_String,
- Video_Height,
- Video_Height_String,
- Video_Height_Offset,
- Video_Height_Offset_String,
- Video_Height_Original,
- Video_Height_Original_String,
- Video_PixelAspectRatio,
- Video_PixelAspectRatio_String,
- Video_PixelAspectRatio_Original,
- Video_PixelAspectRatio_Original_String,
- Video_DisplayAspectRatio,
- Video_DisplayAspectRatio_String,
- Video_DisplayAspectRatio_Original,
- Video_DisplayAspectRatio_Original_String,
- Video_ActiveFormatDescription,
- Video_ActiveFormatDescription_String,
- Video_ActiveFormatDescription_MuxingMode,
- Video_Rotation,
- Video_Rotation_String,
- Video_FrameRate_Mode,
- Video_FrameRate_Mode_String,
- Video_FrameRate_Mode_Original,
- Video_FrameRate_Mode_Original_String,
- Video_FrameRate,
- Video_FrameRate_String,
- Video_FrameRate_Original,
- Video_FrameRate_Original_String,
- Video_FrameRate_Minimum,
- Video_FrameRate_Minimum_String,
- Video_FrameRate_Nominal,
- Video_FrameRate_Nominal_String,
- Video_FrameRate_Maximum,
- Video_FrameRate_Maximum_String,
- Video_FrameCount,
- Video_Source_FrameCount,
- Video_Standard,
- Video_Resolution,
- Video_Resolution_String,
- Video_Colorimetry,
- Video_ColorSpace,
- Video_ChromaSubsampling,
- Video_BitDepth,
- Video_BitDepth_String,
- Video_ScanType,
- Video_ScanType_String,
- Video_ScanType_Original,
- Video_ScanType_Original_String,
- Video_ScanType_StoreMethod,
- Video_ScanType_StoreMethod_FieldsPerBlock,
- Video_ScanType_StoreMethod_String,
- Video_ScanOrder,
- Video_ScanOrder_String,
- Video_ScanOrder_Stored,
- Video_ScanOrder_Stored_String,
- Video_ScanOrder_StoredDisplayedInverted,
- Video_ScanOrder_Original,
- Video_ScanOrder_Original_String,
- Video_Interlacement,
- Video_Interlacement_String,
- Video_Compression_Mode,
- Video_Compression_Mode_String,
- Video_Compression_Ratio,
- Video_Bits__Pixel_Frame_,
- Video_Delay,
- Video_Delay_String,
- Video_Delay_String1,
- Video_Delay_String2,
- Video_Delay_String3,
- Video_Delay_String4,
- Video_Delay_Settings,
- Video_Delay_DropFrame,
- Video_Delay_Source,
- Video_Delay_Source_String,
- Video_Delay_Original,
- Video_Delay_Original_String,
- Video_Delay_Original_String1,
- Video_Delay_Original_String2,
- Video_Delay_Original_String3,
- Video_Delay_Original_String4,
- Video_Delay_Original_Settings,
- Video_Delay_Original_DropFrame,
- Video_Delay_Original_Source,
- Video_TimeStamp_FirstFrame,
- Video_TimeStamp_FirstFrame_String,
- Video_TimeStamp_FirstFrame_String1,
- Video_TimeStamp_FirstFrame_String2,
- Video_TimeStamp_FirstFrame_String3,
- Video_TimeCode_FirstFrame,
- Video_TimeCode_Settings,
- Video_TimeCode_Source,
- Video_StreamSize,
- Video_StreamSize_String,
- Video_StreamSize_String1,
- Video_StreamSize_String2,
- Video_StreamSize_String3,
- Video_StreamSize_String4,
- Video_StreamSize_String5,
- Video_StreamSize_Proportion,
- Video_Source_StreamSize,
- Video_Source_StreamSize_String,
- Video_Source_StreamSize_String1,
- Video_Source_StreamSize_String2,
- Video_Source_StreamSize_String3,
- Video_Source_StreamSize_String4,
- Video_Source_StreamSize_String5,
- Video_Source_StreamSize_Proportion,
- Video_StreamSize_Encoded,
- Video_StreamSize_Encoded_String,
- Video_StreamSize_Encoded_String1,
- Video_StreamSize_Encoded_String2,
- Video_StreamSize_Encoded_String3,
- Video_StreamSize_Encoded_String4,
- Video_StreamSize_Encoded_String5,
- Video_StreamSize_Encoded_Proportion,
- Video_Source_StreamSize_Encoded,
- Video_Source_StreamSize_Encoded_String,
- Video_Source_StreamSize_Encoded_String1,
- Video_Source_StreamSize_Encoded_String2,
- Video_Source_StreamSize_Encoded_String3,
- Video_Source_StreamSize_Encoded_String4,
- Video_Source_StreamSize_Encoded_String5,
- Video_Source_StreamSize_Encoded_Proportion,
- Video_Alignment,
- Video_Alignment_String,
- Video_Title,
- Video_Encoded_Application,
- Video_Encoded_Application_Url,
- Video_Encoded_Library,
- Video_Encoded_Library_String,
- Video_Encoded_Library_Name,
- Video_Encoded_Library_Version,
- Video_Encoded_Library_Date,
- Video_Encoded_Library_Settings,
- Video_Language,
- Video_Language_String,
- Video_Language_String1,
- Video_Language_String2,
- Video_Language_String3,
- Video_Language_String4,
- Video_Language_More,
- Video_Default,
- Video_Default_String,
- Video_Forced,
- Video_Forced_String,
- Video_Encoded_Date,
- Video_Tagged_Date,
- Video_Encryption,
- Video_BufferSize,
- Video_colour_description_present,
- Video_colour_primaries,
- Video_transfer_characteristics,
- Video_matrix_coefficients,
- Video_colour_description_present_Original,
- Video_colour_primaries_Original,
- Video_transfer_characteristics_Original,
- Video_matrix_coefficients_Original,
-};
-
-//---------------------------------------------------------------------------
-enum audio
-{
- Audio_Count,
- Audio_Status,
- Audio_StreamCount,
- Audio_StreamKind,
- Audio_StreamKind_String,
- Audio_StreamKindID,
- Audio_StreamKindPos,
- Audio_StreamOrder,
- Audio_FirstPacketOrder,
- Audio_Inform,
- Audio_ID,
- Audio_ID_String,
- Audio_UniqueID,
- Audio_UniqueID_String,
- Audio_MenuID,
- Audio_MenuID_String,
- Audio_Format,
- Audio_Format_Info,
- Audio_Format_Url,
- Audio_Format_Commercial,
- Audio_Format_Commercial_IfAny,
- Audio_Format_Version,
- Audio_Format_Profile,
- Audio_Format_Compression,
- Audio_Format_Settings,
- Audio_Format_Settings_SBR,
- Audio_Format_Settings_SBR_String,
- Audio_Format_Settings_PS,
- Audio_Format_Settings_PS_String,
- Audio_Format_Settings_Mode,
- Audio_Format_Settings_ModeExtension,
- Audio_Format_Settings_Emphasis,
- Audio_Format_Settings_Floor,
- Audio_Format_Settings_Firm,
- Audio_Format_Settings_Endianness,
- Audio_Format_Settings_Sign,
- Audio_Format_Settings_Law,
- Audio_Format_Settings_ITU,
- Audio_Format_Settings_Wrapping,
- Audio_Matrix_Format,
- Audio_InternetMediaType,
- Audio_MuxingMode,
- Audio_MuxingMode_MoreInfo,
- Audio_CodecID,
- Audio_CodecID_String,
- Audio_CodecID_Info,
- Audio_CodecID_Hint,
- Audio_CodecID_Url,
- Audio_CodecID_Description,
- Audio_Codec,
- Audio_Codec_String,
- Audio_Codec_Family,
- Audio_Codec_Info,
- Audio_Codec_Url,
- Audio_Codec_CC,
- Audio_Codec_Description,
- Audio_Codec_Profile,
- Audio_Codec_Settings,
- Audio_Codec_Settings_Automatic,
- Audio_Codec_Settings_Floor,
- Audio_Codec_Settings_Firm,
- Audio_Codec_Settings_Endianness,
- Audio_Codec_Settings_Sign,
- Audio_Codec_Settings_Law,
- Audio_Codec_Settings_ITU,
- Audio_Duration,
- Audio_Duration_String,
- Audio_Duration_String1,
- Audio_Duration_String2,
- Audio_Duration_String3,
- Audio_Duration_FirstFrame,
- Audio_Duration_FirstFrame_String,
- Audio_Duration_FirstFrame_String1,
- Audio_Duration_FirstFrame_String2,
- Audio_Duration_FirstFrame_String3,
- Audio_Duration_LastFrame,
- Audio_Duration_LastFrame_String,
- Audio_Duration_LastFrame_String1,
- Audio_Duration_LastFrame_String2,
- Audio_Duration_LastFrame_String3,
- Audio_Source_Duration,
- Audio_Source_Duration_String,
- Audio_Source_Duration_String1,
- Audio_Source_Duration_String2,
- Audio_Source_Duration_String3,
- Audio_Source_Duration_FirstFrame,
- Audio_Source_Duration_FirstFrame_String,
- Audio_Source_Duration_FirstFrame_String1,
- Audio_Source_Duration_FirstFrame_String2,
- Audio_Source_Duration_FirstFrame_String3,
- Audio_Source_Duration_LastFrame,
- Audio_Source_Duration_LastFrame_String,
- Audio_Source_Duration_LastFrame_String1,
- Audio_Source_Duration_LastFrame_String2,
- Audio_Source_Duration_LastFrame_String3,
- Audio_BitRate_Mode,
- Audio_BitRate_Mode_String,
- Audio_BitRate,
- Audio_BitRate_String,
- Audio_BitRate_Minimum,
- Audio_BitRate_Minimum_String,
- Audio_BitRate_Nominal,
- Audio_BitRate_Nominal_String,
- Audio_BitRate_Maximum,
- Audio_BitRate_Maximum_String,
- Audio_BitRate_Encoded,
- Audio_BitRate_Encoded_String,
- Audio_Channel_s_,
- Audio_Channel_s__String,
- Audio_Channel_s__Original,
- Audio_Channel_s__Original_String,
- Audio_Matrix_Channel_s_,
- Audio_Matrix_Channel_s__String,
- Audio_ChannelPositions,
- Audio_ChannelPositions_String2,
- Audio_Matrix_ChannelPositions,
- Audio_Matrix_ChannelPositions_String2,
- Audio_ChannelLayout,
- Audio_ChannelLayoutID,
- Audio_SamplingRate,
- Audio_SamplingRate_String,
- Audio_SamplingCount,
- Audio_Source_SamplingCount,
- Audio_FrameRate,
- Audio_FrameRate_String,
- Audio_FrameCount,
- Audio_Source_FrameCount,
- Audio_Resolution,
- Audio_Resolution_String,
- Audio_BitDepth,
- Audio_BitDepth_String,
- Audio_BitDepth_Stored,
- Audio_BitDepth_Stored_String,
- Audio_Compression_Mode,
- Audio_Compression_Mode_String,
- Audio_Compression_Ratio,
- Audio_Delay,
- Audio_Delay_String,
- Audio_Delay_String1,
- Audio_Delay_String2,
- Audio_Delay_String3,
- Audio_Delay_String4,
- Audio_Delay_Settings,
- Audio_Delay_DropFrame,
- Audio_Delay_Source,
- Audio_Delay_Source_String,
- Audio_Delay_Original,
- Audio_Delay_Original_String,
- Audio_Delay_Original_String1,
- Audio_Delay_Original_String2,
- Audio_Delay_Original_String3,
- Audio_Delay_Original_String4,
- Audio_Delay_Original_Settings,
- Audio_Delay_Original_DropFrame,
- Audio_Delay_Original_Source,
- Audio_Video_Delay,
- Audio_Video_Delay_String,
- Audio_Video_Delay_String1,
- Audio_Video_Delay_String2,
- Audio_Video_Delay_String3,
- Audio_Video_Delay_String4,
- Audio_Video0_Delay,
- Audio_Video0_Delay_String,
- Audio_Video0_Delay_String1,
- Audio_Video0_Delay_String2,
- Audio_Video0_Delay_String3,
- Audio_Video0_Delay_String4,
- Audio_ReplayGain_Gain,
- Audio_ReplayGain_Gain_String,
- Audio_ReplayGain_Peak,
- Audio_StreamSize,
- Audio_StreamSize_String,
- Audio_StreamSize_String1,
- Audio_StreamSize_String2,
- Audio_StreamSize_String3,
- Audio_StreamSize_String4,
- Audio_StreamSize_String5,
- Audio_StreamSize_Proportion,
- Audio_Source_StreamSize,
- Audio_Source_StreamSize_String,
- Audio_Source_StreamSize_String1,
- Audio_Source_StreamSize_String2,
- Audio_Source_StreamSize_String3,
- Audio_Source_StreamSize_String4,
- Audio_Source_StreamSize_String5,
- Audio_Source_StreamSize_Proportion,
- Audio_StreamSize_Encoded,
- Audio_StreamSize_Encoded_String,
- Audio_StreamSize_Encoded_String1,
- Audio_StreamSize_Encoded_String2,
- Audio_StreamSize_Encoded_String3,
- Audio_StreamSize_Encoded_String4,
- Audio_StreamSize_Encoded_String5,
- Audio_StreamSize_Encoded_Proportion,
- Audio_Source_StreamSize_Encoded,
- Audio_Source_StreamSize_Encoded_String,
- Audio_Source_StreamSize_Encoded_String1,
- Audio_Source_StreamSize_Encoded_String2,
- Audio_Source_StreamSize_Encoded_String3,
- Audio_Source_StreamSize_Encoded_String4,
- Audio_Source_StreamSize_Encoded_String5,
- Audio_Source_StreamSize_Encoded_Proportion,
- Audio_Alignment,
- Audio_Alignment_String,
- Audio_Interleave_VideoFrames,
- Audio_Interleave_Duration,
- Audio_Interleave_Duration_String,
- Audio_Interleave_Preload,
- Audio_Interleave_Preload_String,
- Audio_Title,
- Audio_Encoded_Library,
- Audio_Encoded_Library_String,
- Audio_Encoded_Library_Name,
- Audio_Encoded_Library_Version,
- Audio_Encoded_Library_Date,
- Audio_Encoded_Library_Settings,
- Audio_Language,
- Audio_Language_String,
- Audio_Language_String1,
- Audio_Language_String2,
- Audio_Language_String3,
- Audio_Language_String4,
- Audio_Language_More,
- Audio_Default,
- Audio_Default_String,
- Audio_Forced,
- Audio_Forced_String,
- Audio_Encoded_Date,
- Audio_Tagged_Date,
- Audio_Encryption,
-};
-
-//---------------------------------------------------------------------------
-enum text
-{
- Text_Count,
- Text_Status,
- Text_StreamCount,
- Text_StreamKind,
- Text_StreamKind_String,
- Text_StreamKindID,
- Text_StreamKindPos,
- Text_StreamOrder,
- Text_FirstPacketOrder,
- Text_Inform,
- Text_ID,
- Text_ID_String,
- Text_UniqueID,
- Text_UniqueID_String,
- Text_MenuID,
- Text_MenuID_String,
- Text_Format,
- Text_Format_Info,
- Text_Format_Url,
- Text_Format_Commercial,
- Text_Format_Commercial_IfAny,
- Text_Format_Version,
- Text_Format_Profile,
- Text_Format_Compression,
- Text_Format_Settings,
- Text_Format_Settings_Wrapping,
- Text_InternetMediaType,
- Text_MuxingMode,
- Text_MuxingMode_MoreInfo,
- Text_CodecID,
- Text_CodecID_String,
- Text_CodecID_Info,
- Text_CodecID_Hint,
- Text_CodecID_Url,
- Text_CodecID_Description,
- Text_Codec,
- Text_Codec_String,
- Text_Codec_Info,
- Text_Codec_Url,
- Text_Codec_CC,
- Text_Duration,
- Text_Duration_String,
- Text_Duration_String1,
- Text_Duration_String2,
- Text_Duration_String3,
- Text_Duration_String4,
- Text_Duration_FirstFrame,
- Text_Duration_FirstFrame_String,
- Text_Duration_FirstFrame_String1,
- Text_Duration_FirstFrame_String2,
- Text_Duration_FirstFrame_String3,
- Text_Duration_LastFrame,
- Text_Duration_LastFrame_String,
- Text_Duration_LastFrame_String1,
- Text_Duration_LastFrame_String2,
- Text_Duration_LastFrame_String3,
- Text_Source_Duration,
- Text_Source_Duration_String,
- Text_Source_Duration_String1,
- Text_Source_Duration_String2,
- Text_Source_Duration_String3,
- Text_Source_Duration_FirstFrame,
- Text_Source_Duration_FirstFrame_String,
- Text_Source_Duration_FirstFrame_String1,
- Text_Source_Duration_FirstFrame_String2,
- Text_Source_Duration_FirstFrame_String3,
- Text_Source_Duration_LastFrame,
- Text_Source_Duration_LastFrame_String,
- Text_Source_Duration_LastFrame_String1,
- Text_Source_Duration_LastFrame_String2,
- Text_Source_Duration_LastFrame_String3,
- Text_BitRate_Mode,
- Text_BitRate_Mode_String,
- Text_BitRate,
- Text_BitRate_String,
- Text_BitRate_Minimum,
- Text_BitRate_Minimum_String,
- Text_BitRate_Nominal,
- Text_BitRate_Nominal_String,
- Text_BitRate_Maximum,
- Text_BitRate_Maximum_String,
- Text_BitRate_Encoded,
- Text_BitRate_Encoded_String,
- Text_Width,
- Text_Width_String,
- Text_Height,
- Text_Height_String,
- Text_FrameRate_Mode,
- Text_FrameRate_Mode_String,
- Text_FrameRate,
- Text_FrameRate_String,
- Text_FrameRate_Minimum,
- Text_FrameRate_Minimum_String,
- Text_FrameRate_Nominal,
- Text_FrameRate_Nominal_String,
- Text_FrameRate_Maximum,
- Text_FrameRate_Maximum_String,
- Text_FrameRate_Original,
- Text_FrameRate_Original_String,
- Text_FrameCount,
- Text_Source_FrameCount,
- Text_ColorSpace,
- Text_ChromaSubsampling,
- Text_Resolution,
- Text_Resolution_String,
- Text_BitDepth,
- Text_BitDepth_String,
- Text_Compression_Mode,
- Text_Compression_Mode_String,
- Text_Compression_Ratio,
- Text_Delay,
- Text_Delay_String,
- Text_Delay_String1,
- Text_Delay_String2,
- Text_Delay_String3,
- Text_Delay_String4,
- Text_Delay_Settings,
- Text_Delay_DropFrame,
- Text_Delay_Source,
- Text_Delay_Source_String,
- Text_Delay_Original,
- Text_Delay_Original_String,
- Text_Delay_Original_String1,
- Text_Delay_Original_String2,
- Text_Delay_Original_String3,
- Text_Delay_Original_String4,
- Text_Delay_Original_Settings,
- Text_Delay_Original_DropFrame,
- Text_Delay_Original_Source,
- Text_Video_Delay,
- Text_Video_Delay_String,
- Text_Video_Delay_String1,
- Text_Video_Delay_String2,
- Text_Video_Delay_String3,
- Text_Video_Delay_String4,
- Text_Video0_Delay,
- Text_Video0_Delay_String,
- Text_Video0_Delay_String1,
- Text_Video0_Delay_String2,
- Text_Video0_Delay_String3,
- Text_Video0_Delay_String4,
- Text_StreamSize,
- Text_StreamSize_String,
- Text_StreamSize_String1,
- Text_StreamSize_String2,
- Text_StreamSize_String3,
- Text_StreamSize_String4,
- Text_StreamSize_String5,
- Text_StreamSize_Proportion,
- Text_Source_StreamSize,
- Text_Source_StreamSize_String,
- Text_Source_StreamSize_String1,
- Text_Source_StreamSize_String2,
- Text_Source_StreamSize_String3,
- Text_Source_StreamSize_String4,
- Text_Source_StreamSize_String5,
- Text_Source_StreamSize_Proportion,
- Text_StreamSize_Encoded,
- Text_StreamSize_Encoded_String,
- Text_StreamSize_Encoded_String1,
- Text_StreamSize_Encoded_String2,
- Text_StreamSize_Encoded_String3,
- Text_StreamSize_Encoded_String4,
- Text_StreamSize_Encoded_String5,
- Text_StreamSize_Encoded_Proportion,
- Text_Source_StreamSize_Encoded,
- Text_Source_StreamSize_Encoded_String,
- Text_Source_StreamSize_Encoded_String1,
- Text_Source_StreamSize_Encoded_String2,
- Text_Source_StreamSize_Encoded_String3,
- Text_Source_StreamSize_Encoded_String4,
- Text_Source_StreamSize_Encoded_String5,
- Text_Source_StreamSize_Encoded_Proportion,
- Text_Title,
- Text_Encoded_Library,
- Text_Encoded_Library_String,
- Text_Encoded_Library_Name,
- Text_Encoded_Library_Version,
- Text_Encoded_Library_Date,
- Text_Encoded_Library_Settings,
- Text_Language,
- Text_Language_String,
- Text_Language_String1,
- Text_Language_String2,
- Text_Language_String3,
- Text_Language_String4,
- Text_Language_More,
- Text_Default,
- Text_Default_String,
- Text_Forced,
- Text_Forced_String,
- Text_Summary,
- Text_Encoded_Date,
- Text_Tagged_Date,
- Text_Encryption,
-};
-
-//---------------------------------------------------------------------------
-enum other
-{
- Other_Count,
- Other_Status,
- Other_StreamCount,
- Other_StreamKind,
- Other_StreamKind_String,
- Other_StreamKindID,
- Other_StreamKindPos,
- Other_StreamOrder,
- Other_FirstPacketOrder,
- Other_Inform,
- Other_ID,
- Other_ID_String,
- Other_UniqueID,
- Other_UniqueID_String,
- Other_MenuID,
- Other_MenuID_String,
- Other_Type,
- Other_Format,
- Other_Format_Info,
- Other_Format_Url,
- Other_Format_Commercial,
- Other_Format_Commercial_IfAny,
- Other_Format_Version,
- Other_Format_Profile,
- Other_Format_Compression,
- Other_Format_Settings,
- Other_MuxingMode,
- Other_CodecID,
- Other_CodecID_String,
- Other_CodecID_Info,
- Other_CodecID_Hint,
- Other_CodecID_Url,
- Other_CodecID_Description,
- Other_Duration,
- Other_Duration_String,
- Other_Duration_String1,
- Other_Duration_String2,
- Other_Duration_String3,
- Other_Duration_Start,
- Other_Duration_End,
- Other_FrameRate,
- Other_FrameRate_String,
- Other_FrameCount,
- Other_TimeStamp_FirstFrame,
- Other_TimeStamp_FirstFrame_String,
- Other_TimeStamp_FirstFrame_String1,
- Other_TimeStamp_FirstFrame_String2,
- Other_TimeStamp_FirstFrame_String3,
- Other_TimeCode_FirstFrame,
- Other_TimeCode_Settings,
- Other_Title,
- Other_Language,
- Other_Language_String,
- Other_Language_String1,
- Other_Language_String2,
- Other_Language_String3,
- Other_Language_String4,
- Other_Language_More,
-};
-
-//---------------------------------------------------------------------------
-enum image
-{
- Image_Count,
- Image_Status,
- Image_StreamCount,
- Image_StreamKind,
- Image_StreamKind_String,
- Image_StreamKindID,
- Image_StreamKindPos,
- Image_StreamOrder,
- Image_FirstPacketOrder,
- Image_Inform,
- Image_ID,
- Image_ID_String,
- Image_UniqueID,
- Image_UniqueID_String,
- Image_MenuID,
- Image_MenuID_String,
- Image_Title,
- Image_Format,
- Image_Format_Info,
- Image_Format_Url,
- Image_Format_Commercial,
- Image_Format_Commercial_IfAny,
- Image_Format_Version,
- Image_Format_Profile,
- Image_Format_Compression,
- Image_Format_Settings,
- Image_Format_Settings_Wrapping,
- Image_InternetMediaType,
- Image_CodecID,
- Image_CodecID_String,
- Image_CodecID_Info,
- Image_CodecID_Hint,
- Image_CodecID_Url,
- Image_CodecID_Description,
- Image_Codec,
- Image_Codec_String,
- Image_Codec_Family,
- Image_Codec_Info,
- Image_Codec_Url,
- Image_Width,
- Image_Width_String,
- Image_Width_Offset,
- Image_Width_Offset_String,
- Image_Width_Original,
- Image_Width_Original_String,
- Image_Height,
- Image_Height_String,
- Image_Height_Offset,
- Image_Height_Offset_String,
- Image_Height_Original,
- Image_Height_Original_String,
- Image_PixelAspectRatio,
- Image_PixelAspectRatio_String,
- Image_PixelAspectRatio_Original,
- Image_PixelAspectRatio_Original_String,
- Image_DisplayAspectRatio,
- Image_DisplayAspectRatio_String,
- Image_DisplayAspectRatio_Original,
- Image_DisplayAspectRatio_Original_String,
- Image_ColorSpace,
- Image_ChromaSubsampling,
- Image_Resolution,
- Image_Resolution_String,
- Image_BitDepth,
- Image_BitDepth_String,
- Image_Compression_Mode,
- Image_Compression_Mode_String,
- Image_Compression_Ratio,
- Image_StreamSize,
- Image_StreamSize_String,
- Image_StreamSize_String1,
- Image_StreamSize_String2,
- Image_StreamSize_String3,
- Image_StreamSize_String4,
- Image_StreamSize_String5,
- Image_StreamSize_Proportion,
- Image_Encoded_Library,
- Image_Encoded_Library_String,
- Image_Encoded_Library_Name,
- Image_Encoded_Library_Version,
- Image_Encoded_Library_Date,
- Image_Encoded_Library_Settings,
- Image_Language,
- Image_Language_String,
- Image_Language_String1,
- Image_Language_String2,
- Image_Language_String3,
- Image_Language_String4,
- Image_Language_More,
- Image_Default,
- Image_Default_String,
- Image_Forced,
- Image_Forced_String,
- Image_Summary,
- Image_Encoded_Date,
- Image_Tagged_Date,
- Image_Encryption,
- Image_colour_description_present,
- Image_colour_primaries,
- Image_transfer_characteristics,
- Image_matrix_coefficients,
- Image_colour_description_present_Original,
- Image_colour_primaries_Original,
- Image_transfer_characteristics_Original,
- Image_matrix_coefficients_Original,
-};
-
-//---------------------------------------------------------------------------
-enum menu
-{
- Menu_Count,
- Menu_Status,
- Menu_StreamCount,
- Menu_StreamKind,
- Menu_StreamKind_String,
- Menu_StreamKindID,
- Menu_StreamKindPos,
- Menu_StreamOrder,
- Menu_FirstPacketOrder,
- Menu_Inform,
- Menu_ID,
- Menu_ID_String,
- Menu_UniqueID,
- Menu_UniqueID_String,
- Menu_MenuID,
- Menu_MenuID_String,
- Menu_Format,
- Menu_Format_Info,
- Menu_Format_Url,
- Menu_Format_Commercial,
- Menu_Format_Commercial_IfAny,
- Menu_Format_Version,
- Menu_Format_Profile,
- Menu_Format_Compression,
- Menu_Format_Settings,
- Menu_CodecID,
- Menu_CodecID_String,
- Menu_CodecID_Info,
- Menu_CodecID_Hint,
- Menu_CodecID_Url,
- Menu_CodecID_Description,
- Menu_Codec,
- Menu_Codec_String,
- Menu_Codec_Info,
- Menu_Codec_Url,
- Menu_Duration,
- Menu_Duration_String,
- Menu_Duration_String1,
- Menu_Duration_String2,
- Menu_Duration_String3,
- Menu_Duration_Start,
- Menu_Duration_End,
- Menu_Delay,
- Menu_Delay_String,
- Menu_Delay_String1,
- Menu_Delay_String2,
- Menu_Delay_String3,
- Menu_Delay_String4,
- Menu_Delay_Settings,
- Menu_Delay_DropFrame,
- Menu_Delay_Source,
- Menu_List_StreamKind,
- Menu_List_StreamPos,
- Menu_List,
- Menu_List_String,
- Menu_Title,
- Menu_Language,
- Menu_Language_String,
- Menu_Language_String1,
- Menu_Language_String2,
- Menu_Language_String3,
- Menu_Language_String4,
- Menu_Language_More,
- Menu_ServiceName,
- Menu_ServiceChannel,
- Menu_Service_Url,
- Menu_ServiceProvider,
- Menu_ServiceProviderr_Url,
- Menu_ServiceType,
- Menu_NetworkName,
- Menu_Original_NetworkName,
- Menu_Countries,
- Menu_TimeZones,
- Menu_LawRating,
- Menu_LawRating_Reason,
- Menu_Chapters_Pos_Begin,
- Menu_Chapters_Pos_End,
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze.cpp b/src/thirdparty/MediaInfo/MediaInfo/File__Analyze.cpp
deleted file mode 100644
index 33e0b6907..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze.cpp
+++ /dev/null
@@ -1,3828 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#if MEDIAINFO_IBI
- #if MEDIAINFO_SEEK
- #include "MediaInfo/Multiple/File_Ibi.h"
- #endif //MEDIAINFO_SEEK
- #include "MediaInfo/Multiple/File_Ibi_Creation.h"
-#endif //MEDIAINFO_IBI
-#include <cstring>
-using namespace std;
-using namespace tinyxml2;
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-#ifdef MEDIAINFO_SSE2_YES
- #ifndef ZENLIB_MEMUTILS_SSE2
- #define ZENLIB_MEMUTILS_SSE2
- #endif //ZENLIB_MEMUTILS_SSE2
- #include "ZenLib/MemoryUtils.h"
-#else //MEDIAINFO_SSE2_YES
- #define memcpy_Unaligned_Unaligned std::memcpy
- #define memcpy_Unaligned_Unaligned_Once1024 std::memcpy
-#endif //MEDIAINFO_SSE2_YES
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File__Analyze::File__Analyze ()
-:File__Base()
-{
- //Info for speed optimization
- #if MEDIAINFO_TRACE
- Config_Trace_Level=MediaInfoLib::Config.Trace_Level_Get();
- Config_Trace_Layers=MediaInfoLib::Config.Trace_Layers_Get();
- Config_Trace_Format=MediaInfoLib::Config.Trace_Format_Get();
- Trace_DoNotSave=false;
- Trace_Layers.set();
- Trace_Layers_Update();
- #endif //MEDIAINFO_TRACE
- Config_Demux=MediaInfoLib::Config.Demux_Get();
- Config_LineSeparator=MediaInfoLib::Config.LineSeparator_Get();
- IsSub=false;
- IsRawStream=false;
-
- //In
- #if MEDIAINFO_EVENTS
- StreamIDs_Size=1;
- ParserIDs[0]=0x0;
- StreamIDs[0]=0;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=1; //Frame
- Demux_random_access=false;
- Demux_UnpacketizeContainer=false;
- Demux_IntermediateItemFound=true;
- Demux_Offset=0;
- Demux_TotalBytes=0;
- Demux_CurrentParser=NULL;
- Demux_EventWasSent_Accept_Specific=false;
- #endif //MEDIAINFO_DEMUX
- PTS_DTS_Needed=false;
- PTS_Begin=(int64u)-1;
- #if MEDIAINFO_ADVANCED2
- PTS_Begin_Segment=(int64u)-1;
- #endif //MEDIAINFO_ADVANCED2
- PTS_End=0;
- DTS_Begin=(int64u)-1;
- DTS_End=0;
- Offsets_Pos=(size_t)-1;
- OriginalBuffer=NULL;
- OriginalBuffer_Size=0;
- OriginalBuffer_Capacity=0;
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- ServiceDescriptors=NULL;
- #endif
-
- //Out
- Frame_Count=0;
- Frame_Count_Previous=0;
- Frame_Count_InThisBlock=0;
- Field_Count=0;
- Field_Count_Previous=0;
- Field_Count_InThisBlock=0;
- Frame_Count_NotParsedIncluded=(int64u)-1;
- FrameNumber_PresentationOrder=(int64u)-1;
-
- //Configuration
- DataMustAlwaysBeComplete=true;
- MustUseAlternativeParser=false;
- MustSynchronize=false;
- CA_system_ID_MustSkipSlices=false;
-
- //Buffer
- #if MEDIAINFO_SEEK
- Seek_Duration_Detected=false;
- #endif //MEDIAINFO_SEEK
- Buffer=NULL;
- Buffer_Temp=NULL;
- Buffer_Size=0;
- Buffer_Temp_Size=0;
- Buffer_Temp_Size_Max=0;
- Buffer_Offset=0;
- Buffer_Offset_Temp=0;
- Buffer_MinimumSize=0;
- Buffer_MaximumSize=16*1024*1024;
- Buffer_TotalBytes_FirstSynched=0;
- Buffer_TotalBytes_LastSynched=0;
- Buffer_TotalBytes=0;
- if (MediaInfoLib::Config.FormatDetection_MaximumOffset_Get())
- Buffer_TotalBytes_FirstSynched_Max=MediaInfoLib::Config.FormatDetection_MaximumOffset_Get();
- else
- Buffer_TotalBytes_FirstSynched_Max=1024*1024;
- if (Buffer_TotalBytes_FirstSynched_Max<(int64u)-1-64*1024*1024)
- Buffer_TotalBytes_Fill_Max=Buffer_TotalBytes_FirstSynched_Max+64*1024*1024;
- else
- Buffer_TotalBytes_Fill_Max=(int64u)-1;
- Buffer_PaddingBytes=0;
- Buffer_JunkBytes=0;
- Stream_BitRateFromContainer=0;
-
- //EOF
- EOF_AlreadyDetected=(MediaInfoLib::Config.ParseSpeed_Get()==1.0)?true:false;
-
- //Synchro
- MustParseTheHeaderFile=true;
- Synched=false;
- UnSynched_IsNotJunk=false;
- MustExtendParsingDuration=false;
- Trusted=Error;
- Trusted_Multiplier=1;
-
- //Header
- Header_Size=0;
-
- //Element
- Element_Offset=0;
- Element_Size=0;
-
- //Elements
- Element.resize(64);
- Element[0].Code=0;
- Element[0].Next=File_Size;
- Element[0].WaitForMoreData=false;
- Element[0].UnTrusted=false;
- Element[0].IsComplete=false;
- #if MEDIAINFO_TRACE
- if (Config_Trace_Level!=0)
- {
- //ToShow part
- Element[0].ToShow.Name.clear();
- Element[0].ToShow.Info.clear();
- Element[0].ToShow.Details.clear();
- Element[0].ToShow.NoShow=false;
- }
- #endif //MEDIAINFO_TRACE
- Element_Level_Base=0;
- Element_Level=0;
-
- //BitStream
- BS=new BitStream_Fast;
- BT=new BitStream_LE;
-
- //Temp
- Status[IsAccepted]=false;
- Status[IsFilled]=false;
- Status[IsUpdated]=false;
- Status[IsFinished]=false;
- ShouldContinueParsing=false;
-
- //Events data
- PES_FirstByte_IsAvailable=false;
-
- //AES
- #if MEDIAINFO_AES
- AES=NULL;
- AES_IV=NULL;
- AES_Decrypted=NULL;
- AES_Decrypted_Size=0;
- #endif //MEDIAINFO_AES
-
- //MD5
- #if MEDIAINFO_MD5
- MD5=NULL;
- Md5_ParseUpTo=0;
- #endif //MEDIAINFO_MD5
-
- Unsynch_Frame_Count=(int64u)-1;
- #if MEDIAINFO_IBI
- Config_Ibi_Create=false;
- Ibi_SynchronizationOffset_Current=0;
- Ibi_SynchronizationOffset_BeginOfFrame=0;
- IbiStream=NULL;
- #endif //MEDIAINFO_IBI
-}
-
-//---------------------------------------------------------------------------
-File__Analyze::~File__Analyze ()
-{
- //Buffer
- delete[] Buffer_Temp; //Buffer_Temp=NULL;
- delete[] OriginalBuffer;
-
- //BitStream
- delete BS; //BS=NULL;
- delete BT; //BS=NULL;
-
- //AES
- #if MEDIAINFO_AES
- delete AES; //AES=NULL;
- delete AES_IV; //AES_IV=NULL;
- delete AES_Decrypted; //AES_Decrypted=NULL;
- #endif //MEDIAINFO_AES
-
- //MD5
- #if MEDIAINFO_MD5
- delete MD5; //MD5=NULL;
- #endif //MEDIAINFO_MD5
-
- #if MEDIAINFO_IBI
- if (!IsSub)
- delete IbiStream; //IbiStream=NULL;
- #endif //MEDIAINFO_IBI
-}
-
-//***************************************************************************
-// Open
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Open_Buffer_Init (int64u File_Size_)
-{
- //Preparing
- File_Size=File_Size_;
- Element[0].Next=File_Size;
-
- //Buffer - Global
- Read_Buffer_Init();
-
- //Integrity
- if (File_Offset>File_Size)
- {
- Reject();
- return; //There is a problem
- }
-
- //Jump handling
- if (File_GoTo!=(int64u)-1)
- {
- Open_Buffer_Unsynch();
- File_GoTo=(int64u)-1;
- }
-
- //Configuring
- if (MediaInfoLib::Config.FormatDetection_MaximumOffset_Get())
- Buffer_TotalBytes_FirstSynched_Max=MediaInfoLib::Config.FormatDetection_MaximumOffset_Get();
- Config->ParseSpeed=MediaInfoLib::Config.ParseSpeed_Get();
- if (Config->File_IsSub_Get())
- IsSub=true;
- #if MEDIAINFO_DEMUX
- if (Demux_Level==1 && !IsSub && Config->Demux_Unpacketize_Get()) //If Demux_Level is Frame
- {
- Demux_Level=2; //Container
- Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_EVENTS
- if (StreamIDs_Size && IsRawStream)
- StreamIDs[StreamIDs_Size-1]=(int64u)-1;
- if (!IsSub)
- {
- ZtringListList SubFile_IDs;
- SubFile_IDs.Separator_Set(0, EOL);
- SubFile_IDs.Separator_Set(1, __T(","));
- SubFile_IDs.Write(Config->SubFile_IDs_Get());
- if (!SubFile_IDs.empty())
- {
- StreamIDs_Size=1+SubFile_IDs.size();
- StreamIDs[SubFile_IDs.size()]=IsRawStream?(int64u)-1:StreamIDs[0];
- StreamIDs_Width[SubFile_IDs.size()]=StreamIDs_Width[0];
- ParserIDs[SubFile_IDs.size()]=ParserIDs[0];
- for (size_t Pos=0; Pos<SubFile_IDs.size(); Pos++)
- {
- StreamIDs[Pos]=SubFile_IDs[Pos](0).To_int64u();
- StreamIDs_Width[Pos]=SubFile_IDs[Pos](1).To_int8u();
- ParserIDs[Pos]=SubFile_IDs[Pos](2).To_int8u();
- }
- }
- }
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_IBI
- Config_Ibi_Create=Config->Ibi_Create_Get() && Config->ParseSpeed==1.0;
- if (Config_Ibi_Create && !IsSub && IbiStream==NULL)
- IbiStream=new ibi::stream;
- #endif //MEDIAINFO_IBI
-}
-
-void File__Analyze::Open_Buffer_Init (File__Analyze* Sub)
-{
- Open_Buffer_Init(Sub, File_Size);
-}
-
-void File__Analyze::Open_Buffer_Init (File__Analyze* Sub, int64u File_Size_)
-{
- //Integrity
- if (Sub==NULL)
- return;
-
- //Parsing
- #if MEDIAINFO_TRACE
- Sub->Init(Config, Details);
- #else //MEDIAINFO_TRACE
- Sub->Init(Config);
- #endif //MEDIAINFO_TRACE
- #if MEDIAINFO_EVENTS
- Sub->ParserIDs[StreamIDs_Size]=Sub->ParserIDs[0];
- Sub->StreamIDs_Width[StreamIDs_Size]=Sub->StreamIDs_Width[0];
- for (size_t Pos=0; Pos<StreamIDs_Size; Pos++)
- {
- Sub->ParserIDs[Pos]=ParserIDs[Pos];
- Sub->StreamIDs[Pos]=StreamIDs[Pos];
- Sub->StreamIDs_Width[Pos]=StreamIDs_Width[Pos];
- }
- Sub->StreamIDs[StreamIDs_Size-1]=Element_Code;
- Sub->StreamIDs_Size=StreamIDs_Size+1;
- #endif //MEDIAINFO_EVENTS
- Sub->IsSub=true;
- Sub->File_Name_WithoutDemux=IsSub?File_Name_WithoutDemux:File_Name;
- Sub->Open_Buffer_Init(File_Size_);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Open_Buffer_Continue (const int8u* ToAdd, size_t ToAdd_Size)
-{
- //Deleyed events
- #if MEDIAINFO_DEMUX
- if (Config->Events_Delayed_CurrentSource)
- {
- File__Analyze* Temp=Config->Events_Delayed_CurrentSource;
- Config->Events_Delayed_CurrentSource=NULL;
- Config->Event_Accepted(Temp);
- if (Config->Events_Delayed_CurrentSource)
- return;
- }
- #endif //MEDIAINFO_DEMUX
-
- if (ToAdd_Size)
- {
- Frame_Count_InThisBlock=0;
- Field_Count_InThisBlock=0;
- }
-
- //MD5
- #if MEDIAINFO_MD5
- if (ToAdd_Size)
- {
- if (!IsSub && !Buffer_Temp_Size && File_Offset==Config->File_Current_Offset && Config->File_Md5_Get())
- {
- delete MD5; MD5=new struct MD5Context;
- MD5Init(MD5);
- }
- if (MD5)
- MD5Update(MD5, ToAdd, (unsigned int)ToAdd_Size);
- }
- #endif //MEDIAINFO_MD5
-
- //AES
- #if MEDIAINFO_AES
- if (ToAdd_Size)
- {
- if (!IsSub && !Buffer_Temp_Size && File_Offset==Config->File_Current_Offset
- && Config->Encryption_Format_Get()==Encryption_Format_Aes
- && Config->Encryption_Key_Get().size()==16
- && Config->Encryption_Method_Get()==Encryption_Method_Segment
- && Config->Encryption_Mode_Get()==Encryption_Mode_Cbc
- && Config->Encryption_Padding_Get()==Encryption_Padding_Pkcs7
- && Config->Encryption_InitializationVector_Get()=="Sequence number")
- {
- delete AES; AES=new AESdecrypt;
- AES->key128((const unsigned char*)Config->Encryption_Key_Get().c_str());
- AES_IV=new int8u[16];
- int128u2BigEndian(AES_IV, int128u((int64u)Config->File_Names_Pos-1));
- }
- if (AES)
- {
- if (AES_Decrypted_Size<ToAdd_Size)
- {
- delete AES_Decrypted; AES_Decrypted=new int8u[ToAdd_Size*2];
- AES_Decrypted_Size=ToAdd_Size*2;
- }
- AES->cbc_decrypt(ToAdd, AES_Decrypted, ToAdd_Size, AES_IV);
- if (File_Offset+Buffer_Size+ToAdd_Size>=Config->File_Current_Size && ToAdd_Size)
- {
- int8u LastByte=AES_Decrypted[ToAdd_Size-1];
- ToAdd_Size-=LastByte;
- if (Config->File_Names_Pos && Config->File_Names_Pos-1<Config->File_Sizes.size())
- Config->File_Sizes[Config->File_Names_Pos-1]-=LastByte;
- Config->File_Current_Size-=LastByte;
- }
- ToAdd=AES_Decrypted;
- }
- }
- #endif //MEDIAINFO_AES
-
- //Integrity
- if (Status[IsFinished])
- return;
- //{File F; F.Open(Ztring(__T("d:\\direct"))+Ztring::ToZtring((size_t)this, 16), File::Access_Write_Append); F.Write(ToAdd, ToAdd_Size);}
-
- //Demand to go elsewhere
- if (File_GoTo!=(int64u)-1)
- {
- if (File_GoTo<File_Offset)
- return; //Seek must be done before
- if (File_GoTo>=File_Offset+ToAdd_Size)
- {
- File_Offset+=ToAdd_Size;
- return; //No need of this piece of data
- }
- }
-
- #if MEDIAINFO_MD5
- //MD5 parsing only
- if (Md5_ParseUpTo>File_Offset+Buffer_Size+ToAdd_Size)
- {
- File_Offset+=ToAdd_Size;
- return; //No need of this piece of data
- }
- if (Md5_ParseUpTo>File_Offset && Md5_ParseUpTo<=File_Offset+ToAdd_Size)
- {
- Buffer_Offset+=(size_t)(Md5_ParseUpTo-File_Offset);
- Md5_ParseUpTo=0;
- }
- #endif //MEDIAINFO_MD5
-
- if (Buffer_Temp_Size) //There is buffered data from before
- {
- //Allocating new buffer if needed
- if (Buffer_Temp_Size+ToAdd_Size>Buffer_Temp_Size_Max)
- {
- int8u* Old=Buffer_Temp;
- size_t Buffer_Temp_Size_Max_ToAdd=ToAdd_Size>32768?ToAdd_Size:32768;
- if (Buffer_Temp_Size_Max_ToAdd<Buffer_Temp_Size_Max) Buffer_Temp_Size_Max_ToAdd=Buffer_Temp_Size_Max;
- Buffer_Temp_Size_Max+=Buffer_Temp_Size_Max_ToAdd;
- Buffer_Temp=new int8u[Buffer_Temp_Size_Max];
- memcpy_Unaligned_Unaligned(Buffer_Temp, Old, Buffer_Temp_Size);
- delete[] Old; //Old=NULL;
- }
-
- //Copying buffer
- if (ToAdd_Size>0)
- {
- memcpy_Unaligned_Unaligned(Buffer_Temp+Buffer_Size, ToAdd, ToAdd_Size);
- Buffer_Temp_Size+=ToAdd_Size;
- }
-
- //Buffer
- Buffer=Buffer_Temp;
- Buffer_Size=Buffer_Temp_Size;
- }
- else
- {
- Buffer=ToAdd;
- Buffer_Size=ToAdd_Size;
- }
-
- //Preparing
- Trusted=(Buffer_Size>2*8*1024?Buffer_Size/8/1024:2)*Trusted_Multiplier; //Never less than 2 acceptable errors
-
- //Demand to go elsewhere
- if (File_GoTo!=(int64u)-1)
- {
- //The needed offset is in the new buffer
- Buffer_Offset+=(size_t)(File_GoTo-File_Offset);
- File_GoTo=(int64u)-1;
- }
-
- //Parsing
- if (!IsSub)
- {
- if (Config->File_Size && Config->File_Size!=(int64u)-1)
- Config->State_Set(((float)Buffer_TotalBytes)/Config->File_Size);
- else if (Config->File_Names.size()>1)
- Config->State_Set(((float)Config->File_Names_Pos)/Config->File_Names.size());
- }
- if (Buffer_Size>=Buffer_MinimumSize || File_Offset+Buffer_Size==File_Size) //Parsing only if we have enough buffer
- while (Open_Buffer_Continue_Loop());
-
- //MD5
- #if MEDIAINFO_MD5
- if (Md5_ParseUpTo>File_Size)
- Md5_ParseUpTo=File_Size;
-
- if (MD5 && File_Offset+Buffer_Size>=Config->File_Current_Size && Status[IsAccepted])
- {
- unsigned char Digest[16];
- MD5Final(Digest, MD5);
- Ztring Temp;
- Temp+=Ztring().From_CC2(BigEndian2int16u(Digest+ 0));
- Temp+=Ztring().From_CC2(BigEndian2int16u(Digest+ 2));
- Temp+=Ztring().From_CC2(BigEndian2int16u(Digest+ 4));
- Temp+=Ztring().From_CC2(BigEndian2int16u(Digest+ 6));
- Temp+=Ztring().From_CC2(BigEndian2int16u(Digest+ 8));
- Temp+=Ztring().From_CC2(BigEndian2int16u(Digest+10));
- Temp+=Ztring().From_CC2(BigEndian2int16u(Digest+12));
- Temp+=Ztring().From_CC2(BigEndian2int16u(Digest+14));
- Temp.MakeLowerCase();
- const char* MD5Pos=Config->File_Names.size()>1?"Source_List_MD5_Generated":"MD5_Generated";
- if (Config->File_Names_Pos<=1 && !Retrieve(Stream_General, 0, MD5Pos).empty() && Retrieve(Stream_General, 0, MD5Pos)==Temp)
- Clear(Stream_General, 0, MD5Pos);
- Fill(Stream_General, 0, MD5Pos, Temp);
- if (Config->File_Names_Pos<=1)
- (*Stream_More)[Stream_General][0](Ztring().From_Local(MD5Pos), Info_Options)=__T("N NT");
-
- delete MD5; MD5=NULL;
- }
-
- if (MD5 && File_GoTo!=(int64u)-1)
- {
- delete MD5; MD5=NULL; //MD5 not possible with a seek
- }
-
- if (MD5 && Buffer_Offset>Buffer_Size)
- {
- //We need the next data
- Md5_ParseUpTo=File_Offset+Buffer_Offset;
- Buffer_Offset=Buffer_Size;
- }
- #endif //MEDIAINFO_MD5
-
- //Should parse again?
- if (((File_GoTo==File_Size && File_Size!=(int64u)-1) || File_Offset+Buffer_Offset>=File_Size)
- #if MEDIAINFO_DEMUX
- && !Config->Demux_EventWasSent
- #endif //MEDIAINFO_DEMUX
- )
- {
- if (!BookMark_Code.empty())
- BookMark_Get();
-
- if (File_GoTo>=File_Size)
- {
- Element_Show(); //If Element_Level is >0, we must show what is in the details buffer
- while (Element_Level>0)
- Element_End0(); //This is Finish, must flush
- Buffer_Clear();
- File_Offset=File_Size;
- if (!IsSub && !Config->File_Names.empty())
- {
- if (Config->File_Sizes.size()>=Config->File_Names.size())
- Config->File_Current_Size=Config->File_Sizes[Config->File_Names.size()-1];
- Config->File_Current_Offset=Config->File_Current_Size;
- Config->File_Names_Pos=Config->File_Names.size()-1;
- }
- ForceFinish();
- return;
- }
- }
-
- //Demand to go elsewhere
- if (File_GoTo!=(int64u)-1)
- {
- if (Config->File_IsSeekable_Get())
- {
- if (File_GoTo>=File_Size)
- File_GoTo=File_Size;
- Buffer_Clear();
- }
- else
- File_Offset+=Buffer_Offset;
-
- return;
- }
- #if MEDIAINFO_MD5
- if (Md5_ParseUpTo)
- {
- Buffer_Clear();
- return;
- }
- #endif //MEDIAINFO_MD5
- if (Buffer_Offset>=Buffer_Size
- #if MEDIAINFO_MD5
- && MD5==NULL
- #endif //MEDIAINFO_MD5
- )
- {
- if (Buffer_Offset>Buffer_Size)
- File_GoTo=File_Offset+Buffer_Offset;
- Buffer_Clear();
- return;
- }
-
- //Buffer handling
- if (Buffer_Size && Buffer_Offset<=Buffer_Size) //all is not used
- {
- if (File_Offset+Buffer_Size>=File_Size //No more data will come
- #if MEDIAINFO_DEMUX
- && !Config->Demux_EventWasSent
- #endif //MEDIAINFO_DEMUX
- )
- {
- ForceFinish();
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
- }
-
- if (Buffer_Temp_Size==0) //If there was no copy
- {
- #if MEDIAINFO_DEMUX
- if (!IsSub && Config->Demux_EventWasSent && Config->File_Buffer_Repeat_IsSupported && Buffer_Offset==0) //If there was no byte consumed
- {
- Config->File_Buffer_Repeat=true;
- }
- else
- #endif //MEDIAINFO_DEMUX
- {
- if (Buffer_Temp!=NULL && Buffer_Temp_Size_Max<ToAdd_Size-Buffer_Offset)
- {
- delete[] Buffer_Temp; Buffer_Temp=NULL; Buffer_Temp_Size=0; Buffer_Temp_Size_Max=0;
- }
- if (Buffer_Temp==NULL)
- {
- size_t Buffer_Temp_Size_Max_ToAdd=ToAdd_Size-Buffer_Offset>32768?ToAdd_Size-Buffer_Offset:32768;
- if (Buffer_Temp_Size_Max_ToAdd<Buffer_Temp_Size_Max) Buffer_Temp_Size_Max_ToAdd=Buffer_Temp_Size_Max;
- Buffer_Temp_Size_Max=Buffer_Temp_Size_Max_ToAdd;
- Buffer_Temp=new int8u[Buffer_Temp_Size_Max];
- }
- Buffer_Temp_Size=ToAdd_Size-Buffer_Offset;
- memcpy_Unaligned_Unaligned(Buffer_Temp, ToAdd+Buffer_Offset, Buffer_Temp_Size);
- }
- }
- else if (Buffer_Offset) //Already a copy, just moving it
- {
- std::memmove(Buffer_Temp, Buffer_Temp+Buffer_Offset, Buffer_Size-Buffer_Offset);
- Buffer_Temp_Size=Buffer_Size-Buffer_Offset;
- }
- }
- else if (Buffer_Temp_Size)
- Buffer_Temp_Size=0;
-
- //Reserving unused data
- if ((int64u)-1-Buffer_Offset<File_Offset) //In case of unknown filesize, File_Offset may be (int64u)-1
- Buffer_Offset=(size_t)((int64u)-1-File_Offset);
- if (Buffer_Offset)
- {
- if (Buffer_Offset>=FrameInfo.Buffer_Offset_End && FrameInfo_Next.DTS!=(int64u)-1)
- {
- FrameInfo=FrameInfo_Next;
- FrameInfo_Next=frame_info();
- }
-
- float64 Ratio=1;
- if (OriginalBuffer)
- {
- Ratio=((float64)OriginalBuffer_Size)/Buffer_Size;
- size_t Temp_Size=(size_t)float64_int64s(((float64)Buffer_Offset)*Ratio);
-
- OriginalBuffer_Size-=Temp_Size;
- memmove(OriginalBuffer, OriginalBuffer+Buffer_Offset, OriginalBuffer_Size);
- }
-
- Buffer_Size-=Buffer_Offset;
- File_Offset+=Buffer_Offset;
- if (Buffer_Offset_Temp>=Buffer_Offset)
- Buffer_Offset_Temp-=Buffer_Offset;
- if (FrameInfo.Buffer_Offset_End!=(int64u)-1 && FrameInfo.Buffer_Offset_End>=Buffer_Offset)
- FrameInfo.Buffer_Offset_End-=Buffer_Offset;
- if (FrameInfo_Next.Buffer_Offset_End!=(int64u)-1 && FrameInfo_Next.Buffer_Offset_End>=Buffer_Offset)
- FrameInfo_Next.Buffer_Offset_End-=Buffer_Offset;
- if (!Offsets_Buffer.empty())
- {
- if (Offsets_Buffer.size()>=2 && Offsets_Buffer.size()%2==0 && Offsets_Buffer[0]==Offsets_Buffer[1])
- {
- size_t Pos=Offsets_Buffer.size()-2;
- do
- {
- if (Offsets_Buffer[Pos]>Buffer_Offset)
- {
- Offsets_Buffer[Pos]-=Buffer_Offset;
- Offsets_Buffer[Pos+1]-=Buffer_Offset;
- }
- else
- {
- Offsets_Stream[Pos]+=float64_int64s(Buffer_Offset*Ratio/2)-Offsets_Buffer[Pos];
- Offsets_Stream[Pos+1]+=float64_int64s(Buffer_Offset*Ratio/2)-Offsets_Buffer[Pos+1];
- Offsets_Buffer[Pos]=0;
- Offsets_Buffer[Pos+1]=0;
- Offsets_Buffer.erase(Offsets_Buffer.begin(), Offsets_Buffer.begin()+Pos);
- Offsets_Stream.erase(Offsets_Stream.begin(), Offsets_Stream.begin()+Pos);
- if (Offsets_Pos!=(size_t)-1 && Pos)
- {
- if (Pos<Offsets_Pos)
- Offsets_Pos-=Pos;
- else
- Offsets_Pos=0;
- }
- break;
- }
- if (Pos==0)
- break;
- Pos-=2;
- }
- while (Pos);
- }
- else
- {
- size_t Pos=Offsets_Buffer.size()-1;
- do
- {
- if (Offsets_Buffer[Pos]>Buffer_Offset*Ratio)
- Offsets_Buffer[Pos]-=float64_int64s(Buffer_Offset*Ratio);
- else
- {
- Offsets_Stream[Pos]+=float64_int64s(Buffer_Offset*Ratio)-Offsets_Buffer[Pos];
- Offsets_Buffer[Pos]=0;
- Offsets_Buffer.erase(Offsets_Buffer.begin(), Offsets_Buffer.begin()+Pos);
- Offsets_Stream.erase(Offsets_Stream.begin(), Offsets_Stream.begin()+Pos);
- if (Offsets_Pos!=(size_t)-1 && Pos)
- {
- if (Pos<Offsets_Pos)
- Offsets_Pos-=Pos;
- else
- Offsets_Pos=0;
- }
- break;
- }
- if (Pos==0)
- break;
- Pos--;
- }
- while (Pos);
- }
- }
-
- Buffer_Offset=0;
- }
-
- //Is it OK?
- if (Buffer_Size>Buffer_MaximumSize)
- {
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get() && MD5 && Status[IsAccepted])
- {
- Buffer_Clear();
- Md5_ParseUpTo=File_Size;
- }
- else
- #endif //MEDIAINFO_MD5
- ForceFinish();
- return;
- }
-}
-
-void File__Analyze::Open_Buffer_Continue (File__Analyze* Sub, const int8u* ToAdd, size_t ToAdd_Size, bool IsNewPacket, float64 Ratio)
-{
- if (Sub==NULL)
- return;
-
- //Sub
- if (Sub->File_GoTo!=(int64u)-1)
- Sub->File_GoTo=(int64u)-1;
- Sub->File_Offset=File_Offset+Buffer_Offset+Element_Offset;
- if (Sub->File_Size!=File_Size)
- {
- for (size_t Pos=0; Pos<=Sub->Element_Level; Pos++)
- if (Sub->Element[Pos].Next==Sub->File_Size)
- Sub->Element[Pos].Next=File_Size;
- Sub->File_Size=File_Size;
- }
- #if MEDIAINFO_TRACE
- Sub->Element_Level_Base=Element_Level_Base+Element_Level;
- #endif
-
- //{File F; F.Open(Ztring(__T("d:\\direct"))+Ztring::ToZtring((size_t)this, 16), File::Access_Write_Append); F.Write(ToAdd, ToAdd_Size);}
-
- //Adaptating File_Offset
- if (Sub!=this && Sub->Buffer_Size<=Sub->File_Offset)
- Sub->File_Offset-=Sub->Buffer_Size;
-
- //Parsing
- Sub->PES_FirstByte_IsAvailable=PES_FirstByte_IsAvailable;
- Sub->PES_FirstByte_Value=PES_FirstByte_Value;
- if (IsNewPacket && ToAdd_Size)
- {
- if (Offsets_Stream.empty())
- {
- Sub->Offsets_Stream.push_back(File_Offset+float64_int64s((Buffer_Offset+Element_Offset)*Ratio));
- Sub->Offsets_Buffer.push_back(Sub->Buffer_Size);
- }
- else
- {
- if (Offsets_Buffer[0]>=Buffer_Offset-Header_Size && (Sub->Offsets_Stream.empty() || Sub->Offsets_Stream[Sub->Offsets_Stream.size()-1]+Sub->Buffer_Size-Sub->Offsets_Buffer[Sub->Offsets_Stream.size()-1]!=Offsets_Stream[0]))
- {
- if ((Buffer_Offset-Header_Size)*Ratio<Offsets_Buffer[0])
- {
- Sub->Offsets_Stream.push_back(Offsets_Stream[0]);
- Sub->Offsets_Buffer.push_back((Sub->OriginalBuffer_Size?Sub->OriginalBuffer_Size:Sub->Buffer_Size)+Offsets_Buffer[0]-(Buffer_Offset+Element_Offset));
- }
- else
- {
- Sub->Offsets_Stream.push_back(Offsets_Stream[0]+Buffer_Offset+Element_Offset-Offsets_Buffer[0]);
- Sub->Offsets_Buffer.push_back(Sub->OriginalBuffer_Size?Sub->OriginalBuffer_Size:Sub->Buffer_Size);
- }
- }
- for (size_t Pos=1; Pos<Offsets_Stream.size(); Pos++)
- if (Offsets_Buffer[Pos]>=Buffer_Offset+Element_Offset && Offsets_Buffer[Pos]<Buffer_Offset+Element_Size)
- {
- if ((Buffer_Offset-Header_Size)*Ratio<Offsets_Buffer[Pos])
- {
- Sub->Offsets_Stream.push_back(Offsets_Stream[Pos]);
- Sub->Offsets_Buffer.push_back((Sub->OriginalBuffer_Size?Sub->OriginalBuffer_Size:Sub->Buffer_Size)+Offsets_Buffer[Pos]-(Buffer_Offset+Element_Offset));
- }
- else
- {
- Sub->Offsets_Stream.push_back(Offsets_Stream[Pos]+Buffer_Offset+Element_Offset-Offsets_Buffer[Pos]);
- Sub->Offsets_Buffer.push_back(Sub->OriginalBuffer_Size?Sub->OriginalBuffer_Size:Sub->Buffer_Size);
- }
- }
- }
- }
-
- if (Ratio!=1)
- {
- if (Sub->OriginalBuffer_Size+Element_Size-Element_Offset>Sub->OriginalBuffer_Capacity)
- {
- int8u* Temp=Sub->OriginalBuffer;
- Sub->OriginalBuffer_Capacity=(size_t)(Sub->OriginalBuffer_Size+Element_Size-Element_Offset);
- Sub->OriginalBuffer=new int8u[Sub->OriginalBuffer_Capacity];
- memcpy_Unaligned_Unaligned(Sub->OriginalBuffer, Temp, Sub->OriginalBuffer_Size);
- delete[] Temp;
- }
- memcpy_Unaligned_Unaligned(Sub->OriginalBuffer+Sub->OriginalBuffer_Size, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- Sub->OriginalBuffer_Size+=(size_t)(Element_Size-Element_Offset);
- }
-
- if (Sub->FrameInfo.DTS!=(int64u)-1)
- Sub->FrameInfo.Buffer_Offset_End=Sub->Buffer_Offset+Sub->Buffer_Size+ToAdd_Size;
- else if (Sub->FrameInfo_Previous.DTS!=(int64u)-1)
- Sub->FrameInfo_Previous.Buffer_Offset_End=Sub->Buffer_Offset+Sub->Buffer_Size+ToAdd_Size;
- if (Sub->FrameInfo_Previous.DTS!=(int64u)-1)
- {
- Sub->FrameInfo_Next=Sub->FrameInfo;
- Sub->FrameInfo=Sub->FrameInfo_Previous;
- Sub->FrameInfo_Previous=frame_info();
-
- Sub->Frame_Count_Previous=Sub->Frame_Count;
- Sub->Field_Count_Previous=Sub->Field_Count;
- }
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Sub->Frame_Count_NotParsedIncluded=Frame_Count_NotParsedIncluded;
- #if MEDIAINFO_DEMUX
- bool Demux_EventWasSent_Save=Config->Demux_EventWasSent;
- Config->Demux_EventWasSent=false;
- #endif //MEDIAINFO_DEMUX
- Sub->Open_Buffer_Continue(ToAdd, ToAdd_Size);
- #if MEDIAINFO_DEMUX
- if (Demux_EventWasSent_Save)
- Config->Demux_EventWasSent=true;
- #endif //MEDIAINFO_DEMUX
- if (Sub->Buffer_Size)
- {
- Sub->FrameInfo_Previous=Sub->FrameInfo;
- Sub->FrameInfo=Sub->FrameInfo_Next;
- Sub->FrameInfo_Next=frame_info();
- }
-
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- //Details handling
- if (!Sub->Element[0].ToShow.Details.empty() && !Trace_DoNotSave)
- {
- //Line separator
- if (!Element[Element_Level].ToShow.Details.empty())
- Element[Element_Level].ToShow.Details+=Config_LineSeparator;
-
- //From Sub
- while(Sub->Element_Level)
- Sub->Element_End0();
- Element[Element_Level].ToShow.Details+=Sub->Element[0].ToShow.Details;
- Sub->Element[0].ToShow.Details.clear();
- }
- else
- Element[Element_Level].ToShow.NoShow=true; //We don't want to show this item because there is no info in it
- }
- #endif
-}
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Open_Buffer_Continue_Loop ()
-{
- //Header
- if (MustParseTheHeaderFile)
- {
- if (!FileHeader_Manage())
- return false; //Wait for more data
- if (Status[IsFinished] || File_GoTo!=(int64u)-1)
- return false; //Finish
- }
-
- //Parsing specific
- Element_Offset=0;
- Element_Size=Buffer_Size;
- Element[Element_Level].WaitForMoreData=false;
- Read_Buffer_Continue();
- if (Element_IsWaitingForMoreData())
- return false; //Wait for more data
- if (sizeof(size_t)<sizeof(int64u) && Buffer_Offset+Element_Offset>=(int64u)(size_t)-1)
- GoTo(File_Offset+Buffer_Offset+Element_Offset);
- else
- Buffer_Offset+=(size_t)Element_Offset;
- if ((Status[IsFinished] && !ShouldContinueParsing) || Buffer_Offset>Buffer_Size || File_GoTo!=(int64u)-1)
- return false; //Finish
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return false;
- #endif //MEDIAINFO_DEMUX
-
- //Parsing;
- while (Buffer_Offset<Buffer_Size)
- if (!Buffer_Parse())
- break;
- Buffer_TotalBytes+=Buffer_Offset;
-
- //Handling of File_GoTo with already buffered data
- #if MEDIAINFO_MD5
- if (File_GoTo==(int64u)-1 && Md5_ParseUpTo && Md5_ParseUpTo>=File_Offset && Md5_ParseUpTo<File_Offset+Buffer_Size)
- {
- File_GoTo=Md5_ParseUpTo;
- Md5_ParseUpTo=0;
- }
- #endif //MEDIAINFO_MD5
- if (File_GoTo!=(int64u)-1 && File_GoTo>=File_Offset && File_GoTo<File_Offset+Buffer_Size)
- {
- if (Buffer_Temp_Size==0) //If there was no copy
- {
- Buffer_Temp_Size=(size_t)(File_Offset+Buffer_Size-File_GoTo);
- if (Buffer_Temp!=NULL && Buffer_Temp_Size_Max<Buffer_Temp_Size)
- {
- delete[] Buffer_Temp; Buffer_Temp=NULL; Buffer_Temp_Size=0; Buffer_Temp_Size_Max=0;
- }
- if (Buffer_Temp==NULL)
- {
- size_t Buffer_Temp_Size_Max_ToAdd=Buffer_Temp_Size>32768?Buffer_Temp_Size:32768;
- if (Buffer_Temp_Size_Max_ToAdd<Buffer_Temp_Size_Max) Buffer_Temp_Size_Max_ToAdd=Buffer_Temp_Size_Max;
- Buffer_Temp_Size_Max=Buffer_Temp_Size_Max_ToAdd;
- Buffer_Temp=new int8u[Buffer_Temp_Size_Max];
- }
- memcpy_Unaligned_Unaligned(Buffer_Temp, Buffer+Buffer_Size-Buffer_Temp_Size, Buffer_Temp_Size);
- }
- else //Already a copy, just moving it
- {
- Buffer_Temp_Size=(size_t)(File_Offset+Buffer_Size-File_GoTo);
- std::memmove(Buffer_Temp, Buffer+Buffer_Size-Buffer_Temp_Size, Buffer_Temp_Size);
- }
- File_Offset+=Buffer_Size-Buffer_Temp_Size;
- Buffer=Buffer_Temp;
- Buffer_Offset=0;
- Buffer_Size=Buffer_Temp_Size;
- File_GoTo=(int64u)-1;
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return false;
- #endif //MEDIAINFO_DEMUX
-
- return true;
- }
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return false;
- #endif //MEDIAINFO_DEMUX
-
- //Parsing specific
- Read_Buffer_AfterParsing();
-
- //Jumping to the end of the file if needed
- if (!IsSub && !EOF_AlreadyDetected && Config->ParseSpeed<1 && Count_Get(Stream_General))
- {
- Element[Element_Level].WaitForMoreData=false;
- Detect_EOF();
- if ((File_GoTo!=(int64u)-1 && File_GoTo>File_Offset+Buffer_Offset) || (Status[IsFinished] && !ShouldContinueParsing))
- {
- EOF_AlreadyDetected=true;
- return false;
- }
- }
-
- return false;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File__Analyze::Open_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- #if MEDIAINFO_DEMUX
- Config->Demux_EventWasSent=false;
- #endif //MEDIAINFO_DEMUX
-
- size_t ToReturn=Read_Buffer_Seek(Method, Value, ID);
-
- if (File_GoTo!=(int64u)-1)
- Buffer_Clear();
-
- return ToReturn;
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-void File__Analyze::Open_Buffer_Position_Set (int64u File_Offset_)
-{
- if (File_Offset_==(int64u)-1)
- return;
-
- File_Offset=File_Offset_-Buffer_Temp_Size;
- File_GoTo=(int64u)-1;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED2
-void File__Analyze::Open_Buffer_SegmentChange ()
-{
- Read_Buffer_SegmentChange();
-}
-#endif //MEDIAINFO_ADVANCED2
-
-//---------------------------------------------------------------------------
-void File__Analyze::Open_Buffer_Unsynch ()
-{
- Status[IsFinished]=false;
- FrameInfo=frame_info();
- FrameInfo_Previous=frame_info();
- FrameInfo_Next=frame_info();
- Frame_Count_NotParsedIncluded=Unsynch_Frame_Count;
- Unsynch_Frame_Count=(int64u)-1;
- PTS_End=0;
- DTS_End=0;
- #if MEDIAINFO_DEMUX
- Demux_IntermediateItemFound=true;
- Demux_Offset=0;
- Demux_TotalBytes=Buffer_TotalBytes;
- Config->Demux_EventWasSent=false;
- #endif //MEDIAINFO_DEMUX
-
- //Clearing duration
- if (Synched)
- {
- for (size_t StreamKind=(size_t)Stream_General; StreamKind<(size_t)Stream_Menu; StreamKind++)
- {
- size_t StreamPos_Count=Count_Get((stream_t)StreamKind);
- for (size_t StreamPos=0; StreamPos<StreamPos_Count; StreamPos++)
- Clear((stream_t)StreamKind, StreamPos, Fill_Parameter((stream_t)StreamKind, Generic_Duration));
- }
- }
-
- //if (Synched)
- if (!MustSynchronize || (MustSynchronize && File_Offset_FirstSynched!=(int64u)-1)) //Synched at least once
- {
- Synched=false;
- UnSynched_IsNotJunk=true;
- Read_Buffer_Unsynched();
- Ibi_Read_Buffer_Unsynched();
- }
- Buffer_Clear();
-
- //Some default values
- if (IsRawStream && File_GoTo==0)
- {
- FrameInfo.DTS=0;
- Frame_Count_NotParsedIncluded=0;
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Open_Buffer_Update ()
-{
- if (Status[IsAccepted])
- Streams_Update();
-
- Status[File__Analyze::IsUpdated]=false;
- for (size_t Pos=File__Analyze::User_16; Pos<File__Analyze::User_16+16; Pos++)
- Status[Pos]=false;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Open_Buffer_Finalize (bool NoBufferModification)
-{
- //File with unknown size (stream...), finnishing
- if (!NoBufferModification && File_Size==(int64u)-1)
- {
- File_Size=File_Offset+Buffer_Size;
- Open_Buffer_Continue((const int8u*)NULL, 0);
- }
-
- //Element must be Finish
- while (Element_Level>0)
- Element_End0();
-
- //Buffer - Global
- Fill();
- if (!NoBufferModification)
- {
- ForceFinish();
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
- Buffer_Clear();
- }
-
- #if MEDIAINFO_TRACE
- if (Details && Details->empty())
- Details->assign(Element[0].ToShow.Details);
- #endif //MEDIAINFO_TRACE
-
- #if MEDIAINFO_EVENTS
- if (Status[IsAccepted])
- {
- EVENT_BEGIN (General, End, 0)
- if (Event.StreamIDs_Size>=1)
- Event.StreamIDs[Event.StreamIDs_Size-1]=(int64u)-1;
- Event.PCR=(int64u)-1;
- Event.DTS=(int64u)-1;
- Event.PTS=(int64u)-1;
- Event.DUR=(int64u)-1;
- Event.Stream_Bytes_Analyzed=Buffer_TotalBytes;
- Event.Stream_Size=File_Size;
- Event.Stream_Bytes_Padding=Buffer_PaddingBytes;
- Event.Stream_Bytes_Junk=Buffer_JunkBytes;
- if (!IsSub && MustSynchronize && !Synched && !UnSynched_IsNotJunk)
- Event.Stream_Bytes_Junk+=Buffer_TotalBytes+Buffer_Offset-Buffer_TotalBytes_LastSynched;
- EVENT_END ()
- }
- #endif //MEDIAINFO_EVENTS
-}
-
-void File__Analyze::Open_Buffer_Finalize (File__Analyze* Sub)
-{
- if (Sub==NULL)
- return;
-
- //Finalize
- Open_Buffer_Init(Sub);
- Sub->Open_Buffer_Finalize();
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File__Analyze::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- #if MEDIAINFO_IBI
- if (!IsSub)
- {
- size_t ReturnValue=Ibi_Read_Buffer_Seek(Method, Value, ID);
- if (ReturnValue!=(size_t)-1) // If IBI file is supported
- return ReturnValue;
- }
- #endif //MEDIAINFO_IBI
-
- //Parsing
- switch (Method)
- {
- case 0 : //Default stream seek (byte offset)
- GoTo(Value);
- Open_Buffer_Unsynch();
- return 1;
- case 1 : //Default stream seek (percentage)
- GoTo(File_Size*Value/10000);
- Open_Buffer_Unsynch();
- return 1;
- default :
- return (size_t)-1; //Not supported
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File__Analyze::Read_Buffer_Seek_OneFramePerFile (size_t Method, int64u Value, int64u ID)
-{
- //Parsing
- switch (Method)
- {
- case 0 :
- {
- if (Value>=Config->File_Size)
- return 2; //Invalid value
- int64u Offset=0;
- for (size_t Pos=0; Pos<Config->File_Sizes.size(); Pos++)
- {
- Offset+=Config->File_Sizes[Pos];
- if (Offset>=Value)
- {
- Offset-=Config->File_Sizes[Pos];
- break;
- }
- }
- GoTo(Offset);
- Open_Buffer_Unsynch();
- return 1;
- }
- case 1 :
- {
- if (Value>=10000)
- return 2; //Invalid value
- size_t FilePos=(size_t)((((float32)Value)/10000)*Config->File_Sizes.size());
- int64u Offset=0;
- for (size_t Pos=0; Pos<FilePos; Pos++)
- Offset+=Config->File_Sizes[Pos];
- GoTo(Offset);
- Open_Buffer_Unsynch();
- return 1;
- }
- case 2 : //Timestamp
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Rate_Get()==0)
- return (size_t)-1; //Not supported
- Value=float64_int64s(((float64)Value)/1000000000*Config->Demux_Rate_Get());
- #else //MEDIAINFO_DEMUX
- return (size_t)-1; //Not supported
- #endif //MEDIAINFO_DEMUX
- case 3 : //FrameNumber
- {
- if (Value>=Config->File_Names.size())
- return 2; //Invalid value
- int64u Offset=0;
- if (Config->File_Sizes.size()!=Config->File_Names.size())
- {
- Offset=Value; //File_GoTo is the frame offset in that case
- Config->File_GoTo_IsFrameOffset=true;
- }
- else
- for (size_t Pos=0; Pos<Value; Pos++)
- Offset+=Config->File_Sizes[Pos];
- GoTo(Offset);
- Open_Buffer_Unsynch();
- return 1;
- }
- default : return (size_t)-1; //Not supported
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-void File__Analyze::Read_Buffer_Unsynched_OneFramePerFile()
-{
- #if MEDIAINFO_ADVANCED
- if (Config->File_Sizes.size()!=Config->File_Names.size())
- {
- Frame_Count_NotParsedIncluded=File_GoTo;
- }
- else
- #endif //MEDIAINFO_ADVANCED
- {
- int64u GoTo=File_GoTo;
- for (Frame_Count_NotParsedIncluded=0; Frame_Count_NotParsedIncluded<Config->File_Sizes.size(); Frame_Count_NotParsedIncluded++)
- {
- if (GoTo>=Config->File_Sizes[(size_t)Frame_Count_NotParsedIncluded])
- GoTo-=Config->File_Sizes[(size_t)Frame_Count_NotParsedIncluded];
- else
- break;
- }
- }
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Rate_Get())
- {
- FrameInfo.DTS=float64_int64s(Frame_Count_NotParsedIncluded*((float64)1000000000)/Config->Demux_Rate_Get());
- FrameInfo.PTS=FrameInfo.DTS;
- }
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Buffer_Parse()
-{
- //End of this level?
- if (File_Offset+Buffer_Offset>=Element[Element_Level].Next)
- {
- //There is no loop handler, so we make the level down here
- while (Element_Level>0 && File_Offset+Buffer_Offset>=Element[Element_Level].Next)
- Element_End0(); //This is a buffer restart, must sync to Element level
- if (File_Offset+Buffer_Offset==File_Size)
- return false; //End of file
- MustUseAlternativeParser=false; //Reset it if we go out of an element
- }
-
- //Synchro
- if (MustSynchronize)
- do
- {
- if (!Synchro_Manage())
- return false; //Wait for more data
- }
- while (!Synched);
- #if MEDIAINFO_DEMUX
- else if (Demux_TotalBytes<=Buffer_TotalBytes+Buffer_Offset)
- {
- if (Demux_UnpacketizeContainer && !Demux_UnpacketizeContainer_Test())
- {
- Demux_Offset-=Buffer_Offset;
- return false; //Wait for more data
- }
- if (Config->Demux_EventWasSent)
- return false;
- }
- #endif //MEDIAINFO_DEMUX
-
- //Offsets
- if (Offsets_Pos==(size_t)-1 && !Offsets_Buffer.empty())
- Offsets_Pos=0;
- if (Offsets_Pos!=(size_t)-1)
- {
- while (Offsets_Pos<Offsets_Buffer.size() && Buffer_Offset>Offsets_Buffer[Offsets_Pos])
- Offsets_Pos++;
- if (Offsets_Pos>=Offsets_Buffer.size() || Buffer_Offset!=Offsets_Buffer[Offsets_Pos])
- Offsets_Pos--;
- }
-
- //Header
- if (!Header_Manage())
- return false; //Wait for more data
-
- //Data
- if (!Data_Manage())
- return false; //Wait for more data
-
- Buffer_TotalBytes_LastSynched=Buffer_TotalBytes+Buffer_Offset;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Buffer_Clear()
-{
- //Buffer
- BS->Attach(NULL, 0);
- delete[] Buffer_Temp; Buffer_Temp=NULL;
- if (!Status[IsFinished])
- File_Offset+=Buffer_Size;
- else
- {
- File_Offset=File_Size;
- if (!IsSub && !Config->File_Names.empty())
- {
- if (Config->File_Sizes.size()>=Config->File_Names.size())
- Config->File_Current_Size=Config->File_Sizes[Config->File_Names.size()-1];
- Config->File_Current_Offset=Config->File_Current_Size;
- Config->File_Names_Pos=Config->File_Names.size()-1;
- }
- }
- Buffer_Size=0;
- Buffer_Temp_Size=0;
- Buffer_Offset=0;
- Buffer_Offset_Temp=0;
- Buffer_MinimumSize=0;
-
- OriginalBuffer_Size=0;
- Offsets_Stream.clear();
- Offsets_Buffer.clear();
- Offsets_Pos=(size_t)-1;
-
- //Details
- #if MEDIAINFO_TRACE
- Element[Element_Level].WaitForMoreData=false; //We must finalize the details
- Element[Element_Level].IsComplete=true; //We must finalize the details
- #endif //MEDIAINFO_TRACE
-
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Synchronize_0x000001()
-{
- //Synchronizing
- while(Buffer_Offset+3<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01))
- {
- Buffer_Offset+=2;
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Buffer_Offset+=2;
- if ((Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset-1]==0x00) || Buffer_Offset>=Buffer_Size)
- Buffer_Offset--;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+3==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01))
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00))
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && Buffer[Buffer_Offset ]!=0x00)
- Buffer_Offset++;
-
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- //Synched is OK
- Synched=true;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File__Analyze::FileHeader_Begin_0x000001()
-{
- //Element_Size
- if (Buffer_Size<192*4)
- return true; //Not enough buffer for a test
-
- //Detecting OldDirac/WAV/SWF/FLV/ELF/DPG/WM files
- int64u Magic8=CC8(Buffer);
- int32u Magic4=Magic8>>32;
- int32u Magic3=Magic4>> 8;
- int16u Magic2=Magic4>>16;
- if (Magic8==0x4B572D4449524143LL || Magic4==0x52494646 || Magic3==0x465753 || Magic3==0x464C56 || Magic4==0x7F454C46 || Magic4==0x44504730 || Magic4==0x3026B275 || Magic2==0x4D5A || Magic4==0x1A45DFA3)
- {
- Reject();
- return false;
- }
-
- //GXF
- if (CC5(Buffer)==0x0000000001 && CC2(Buffer+14)==0xE1E2)
- {
- Reject();
- return false;
- }
-
- //Detecting MPEG-4 files (ftyp/mdat/skip/free)
- Magic4=CC4(Buffer+4);
- switch (Magic4)
- {
- case 0x66747970 : //ftyp
- case 0x6D646174 : //mdat
- case 0x736B6970 : //skip
- case 0x66726565 : //free
- Reject();
- return false;
- default : break;
- }
-
- //Detect TS files, and the parser is not enough precise to detect them later
- size_t Buffer_Offset=0;
- while (Buffer_Offset<188 && Buffer[Buffer_Offset]!=0x47) //Look for first Sync word
- Buffer_Offset++;
- if (Buffer_Offset<188 && Buffer[Buffer_Offset+188]==0x47 && Buffer[Buffer_Offset+188*2]==0x47 && Buffer[Buffer_Offset+188*3]==0x47)
- {
- Status[IsFinished]=true;
- return false;
- }
- Buffer_Offset=0;
-
- //Detect BDAV files, and the parser is not enough precise to detect them later
- while (Buffer_Offset<192 && CC1(Buffer+Buffer_Offset+4)!=0x47) //Look for first Sync word
- Buffer_Offset++;
- if (Buffer_Offset<192 && CC1(Buffer+Buffer_Offset+192+4)==0x47 && CC1(Buffer+Buffer_Offset+192*2+4)==0x47 && CC1(Buffer+Buffer_Offset+192*3+4)==0x47)
- {
- Status[IsFinished]=true;
- return false;
- }
- Buffer_Offset=0;
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File__Analyze::FileHeader_Begin_XML(XMLDocument &Document)
-{
- //Element_Size
- if (!IsSub && (File_Size<32 || File_Size>16*1024*1024))
- {
- Reject();
- return false; //XML files are not expected to be so big
- }
-
- //Element_Size
- if (!IsSub && Buffer_Size<File_Size)
- {
- Element_WaitForMoreData();
- return false; //Must wait for more data
- }
-
- //XML header
- Ztring Data;
- if ((Buffer[0]=='<'
- && Buffer[1]==0x00)
- || (Buffer[0]==0xFF
- && Buffer[1]==0xFE
- && Buffer[2]=='<'
- && Buffer[3]==0x00))
- Data.From_UTF16LE((const char*)Buffer, Buffer_Size);
- else if ((Buffer[0]==0x00
- && Buffer[1]=='<')
- || (Buffer[0]==0xFE
- && Buffer[1]==0xFF
- && Buffer[2]==0x00
- && Buffer[3]=='<'))
- Data.From_UTF16BE((const char*)Buffer, Buffer_Size);
- else if ((Buffer[0]=='<')
- || (Buffer[0]==0xEF
- && Buffer[1]==0xBB
- && Buffer[2]==0xBF
- && Buffer[3]=='<'))
- Data.From_UTF8((const char*)Buffer, Buffer_Size);
- else
- {
- Reject();
- return false;
- }
-
- string DataUTF8=Data.To_UTF8();
- if (Document.Parse(DataUTF8.c_str()))
- {
- Reject();
- return false;
- }
-
- return true;
-}
-
-//***************************************************************************
-// Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Synchro_Manage()
-{
- //Testing if synchro is OK
- if (Synched)
- {
- if (!IsSub)
- Buffer_TotalBytes_LastSynched=Buffer_TotalBytes+Buffer_Offset;
-
- if (!Synchro_Manage_Test())
- return false;
- }
-
- //Trying to synchronize
- if (!Synched)
- {
- //Buffer_TotalBytes_Fill_Max
- if (!Status[IsFilled] && Buffer_TotalBytes>=Buffer_TotalBytes_Fill_Max)
- {
- Open_Buffer_Unsynch();
- GoToFromEnd(0);
- return false;
- }
- if (!Synchronize())
- {
- if (Status[IsFinished])
- Finish(); //Finish
- if (!IsSub && File_Offset_FirstSynched==(int64u)-1 && Buffer_TotalBytes+Buffer_Offset>=Buffer_TotalBytes_FirstSynched_Max)
- {
- Open_Buffer_Unsynch();
- GoToFromEnd(0);
- }
- return false; //Wait for more data
- }
- Synched=true;
- if (!IsSub)
- {
- if (!UnSynched_IsNotJunk)
- Buffer_JunkBytes+=Buffer_TotalBytes+Buffer_Offset-Buffer_TotalBytes_LastSynched;
- Buffer_TotalBytes_LastSynched=Buffer_TotalBytes+Buffer_Offset;
- UnSynched_IsNotJunk=false;
- }
- if (File_Offset_FirstSynched==(int64u)-1)
- {
- Synched_Init();
- Buffer_TotalBytes_FirstSynched+=Buffer_TotalBytes+Buffer_Offset;
- File_Offset_FirstSynched=File_Offset+Buffer_Offset;
- }
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return false;
- #endif //MEDIAINFO_DEMUX
- if (!Synchro_Manage_Test())
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Synchro_Manage_Test()
-{
- //Testing if synchro is OK
- if (Synched)
- {
- if (!Synched_Test())
- return false;
- #if MEDIAINFO_DEMUX
- if (Synched && Demux_TotalBytes<=Buffer_TotalBytes+Buffer_Offset)
- {
- if (Demux_UnpacketizeContainer && !Demux_UnpacketizeContainer_Test())
- {
- Demux_Offset-=Buffer_Offset;
- return false; //Wait for more data
- }
- if (Config->Demux_EventWasSent)
- return false;
- }
- #endif //MEDIAINFO_DEMUX
- if (Buffer_Offset>=FrameInfo.Buffer_Offset_End && FrameInfo_Next.DTS!=(int64u)-1)
- {
- FrameInfo=FrameInfo_Next;
- FrameInfo_Next=frame_info();
- }
- if (Synched)
- {
- if (!IsSub)
- Buffer_TotalBytes_LastSynched=Buffer_TotalBytes+Buffer_Offset;
- }
- else
- {
- Element[Element_Level].IsComplete=true; //Else the trusting algo will think it
- Trusted_IsNot("Synchronisation lost");
- while (Element_Level)
- Element_End();
- }
- }
-
- //Trying to synchronize
- if (!Synched)
- {
- if (!Synchronize())
- {
- if (Status[IsFinished])
- Finish(); //Finish
- if (!IsSub && File_Offset_FirstSynched==(int64u)-1 && Buffer_TotalBytes+Buffer_Offset>=Buffer_TotalBytes_FirstSynched_Max)
- Reject();
- return false; //Wait for more data
- }
- Synched=true;
- if (!IsSub)
- {
- if (!UnSynched_IsNotJunk)
- Buffer_JunkBytes+=Buffer_TotalBytes+Buffer_Offset-Buffer_TotalBytes_LastSynched;
- Buffer_TotalBytes_LastSynched=Buffer_TotalBytes+Buffer_Offset;
- UnSynched_IsNotJunk=false;
- }
- if (File_Offset_FirstSynched==(int64u)-1)
- {
- Synched_Init();
- Buffer_TotalBytes_FirstSynched+=Buffer_TotalBytes+Buffer_Offset;
- File_Offset_FirstSynched=File_Offset+Buffer_Offset;
- }
- if (!Synched_Test())
- return false;
- #if MEDIAINFO_DEMUX
- if (Synched && Demux_TotalBytes<=Buffer_TotalBytes+Buffer_Offset)
- {
- if (Demux_UnpacketizeContainer && !Demux_UnpacketizeContainer_Test())
- {
- Demux_Offset-=Buffer_Offset;
- return false; //Wait for more data
- }
- if (Config->Demux_EventWasSent)
- return false;
- }
- #endif //MEDIAINFO_DEMUX
- }
-
- return true;
-}
-
-//***************************************************************************
-// File Header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__Analyze::FileHeader_Manage()
-{
- //From the parser
- if (!Status[IsAccepted] && !FileHeader_Begin())
- {
- if (Status[IsFinished]) //Newest parsers set this bool if there is an error
- Reject();
- if (File_Offset+Buffer_Size>=File_Size)
- Reject();
- return false; //Wait for more data
- }
-
- //Positionning
- if ((Buffer_Size && Buffer_Offset+Element_Offset>Buffer_Size) || (sizeof(size_t)<sizeof(int64u) && Buffer_Offset+Element_Offset>=(int64u)(size_t)-1))
- {
- GoTo(File_Offset+Buffer_Offset+Element_Offset);
- return false;
- }
- else
- {
- Buffer_Offset+=(size_t)Element_Offset;
- Element_Offset=0;
- }
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return false;
- #endif //MEDIAINFO_DEMUX
-
- //From the parser
- Element_Size=Buffer_Size-Buffer_Offset;
- Element_Begin1("File Header");
- FileHeader_Parse();
- if (Element_Offset==0)
- Element_DoNotShow();
- Element_End0();
- if (Status[IsFinished]) //Newest parsers set this bool if there is an error
- {
- Finish();
- return false;
- }
-
- //Testing the parser result
- if (Element_IsWaitingForMoreData() || Element[Element_Level].UnTrusted) //Wait or problem
- {
- //The header is not complete, need more data
- #if MEDIAINFO_TRACE
- Element[Element_Level].ToShow.Details.clear();
- #endif //MEDIAINFO_TRACE
- return false;
- }
-
- //Positionning
- if ((Buffer_Size && Buffer_Offset+Element_Offset>Buffer_Size) || (sizeof(size_t)<sizeof(int64u) && Buffer_Offset+Element_Offset>=(int64u)(size_t)-1))
- {
- GoTo(File_Offset+Buffer_Offset+Element_Offset);
- return false;
- }
- else
- {
- Buffer_Offset+=(size_t)Element_Offset;
- Element_Offset=0;
- }
-
- MustParseTheHeaderFile=false;
- return true;
-}
-
-//***************************************************************************
-// Header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Header_Manage()
-{
- //Test
- if (Buffer_Offset>=Buffer_Size)
- return false;
-
- //Header begin
- Element_Size=Element[Element_Level].Next-(File_Offset+Buffer_Offset);
- Element_Offset=0;
- if (!Header_Begin())
- {
- //Jumping to the end of the file if needed
- if (!EOF_AlreadyDetected && Config->ParseSpeed<1 && File_GoTo==(int64u)-1)
- {
- Element[Element_Level].WaitForMoreData=false;
- Detect_EOF();
- if ((File_GoTo!=(int64u)-1 && File_GoTo>File_Offset+Buffer_Offset) || (Status[IsFinished] && !ShouldContinueParsing))
- EOF_AlreadyDetected=true;
- }
- return false; //Wait for more data
- }
-
- //Going in a lower level
- Element_Size=Element[Element_Level].Next-(File_Offset+Buffer_Offset+Element_Offset);
- Element[Element_Level].UnTrusted=false;
- if (Buffer_Offset+Element_Size>Buffer_Size)
- {
- Element_Size=Buffer_Size-Buffer_Offset;
- Element[Element_Level].IsComplete=false;
- }
- else
- Element[Element_Level].IsComplete=true;
- if (Element_Size==0)
- return false;
- Element_Offset=0;
- Element_Begin0(); //Element
- #if MEDIAINFO_TRACE
- Data_Level=Element_Level;
- #endif //MEDIAINFO_TRACE
- Element_Begin1("Header"); //Header
-
- //Header parsing
- Header_Parse();
-
- //Testing the parser result
- if (Element[Element_Level].UnTrusted) //Problem
- {
- Element[Element_Level].UnTrusted=false;
- Header_Fill_Code(0, "Problem");
- if (MustSynchronize)
- {
- //Unsynchronizing to the next byte
- Element_Offset=1;
- Header_Fill_Size(1);
- Synched=false;
- }
- else
- {
- //Can not synchronize anymore in this block
- Element_Offset=Element[Element_Level-2].Next-(File_Offset+Buffer_Offset);
- Header_Fill_Size(Element_Offset);
- }
- }
-
- if (Element_IsWaitingForMoreData() || ((DataMustAlwaysBeComplete && Element[Element_Level-1].Next>File_Offset+Buffer_Size) || File_GoTo!=(int64u)-1) //Wait or want to have a comple data chunk
- #if MEDIAINFO_DEMUX
- || (Config->Demux_EventWasSent)
- #endif //MEDIAINFO_DEMUX
- )
- {
- //The header is not complete, need more data
- Element[Element_Level].WaitForMoreData=true;
- Element_End0(); //Header
- Element_End0(); //Element
- return false;
- }
-
- //Filling
- Element[Element_Level].WaitForMoreData=false;
- Element[Element_Level].IsComplete=true;
-
- //ToShow
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- if (Element[Element_Level-1].ToShow.Name.empty())
- Element[Element_Level-1].ToShow.Name=__T("Unknown");
- Element[Element_Level].ToShow.Size=Element_Offset;
- Element[Element_Level].ToShow.Header_Size=0;
- Element[Element_Level-1].ToShow.Header_Size=Header_Size;
- if (Element_Offset==0)
- Element_DoNotShow();
- }
- #endif //MEDIAINFO_TRACE
-
- //Integrity
- if (Element[Element_Level-1].Next<(File_Offset+Buffer_Offset+Element_Offset))
- Element[Element_Level-1].Next=File_Offset+Buffer_Offset+Element_Offset; //Size is not good
-
- //Positionning
- Element_Size=Element[Element_Level-1].Next-(File_Offset+Buffer_Offset+Element_Offset);
- Header_Size=Element_Offset;
- Buffer_Offset+=(size_t)Header_Size;
- Element_Offset=0;
- if (Buffer_Offset+Element_Size>Buffer_Size)
- {
- if (Buffer_Size>Buffer_Offset)
- Element_Size=Buffer_Size-Buffer_Offset;
- else
- Element_Size=0; //There is an error in the parsing
- Element[Element_Level-1].IsComplete=false;
- }
-
- Element_End0(); //Header
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Header_Parse()
-{
- //Filling
- Header_Fill_Code(0);
- Header_Fill_Size(Element_Size);
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Header_Fill_Code(int64u Code, const Ztring &Name)
-{
- //Filling
- Element[Element_Level-1].Code=Code;
-
- //ToShow
- if (Config_Trace_Level!=0)
- {
- Element_Level--;
- Element_Name(Name);
- Element_Level++;
- }
-}
-#endif //MEDIAINFO_TRACE
-
-void File__Analyze::Header_Fill_Code(int64u Code)
-{
- //Filling
- Element[Element_Level-1].Code=Code;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Header_Fill_Size(int64u Size)
-{
- if (Size==0)
- Trusted_IsNot("Block can't have a size of 0");
- if (DataMustAlwaysBeComplete && Size>Buffer_MaximumSize)
- {
- Element[Element_Level].IsComplete=true;
- Element[Element_Level-1].IsComplete=true;
- Trusted_IsNot("Block is too big");
- }
-
- if (Element[Element_Level].UnTrusted)
- return;
-
- //Integrity
- if (Size<Element_Offset)
- Size=Element_Offset; //At least what we read before!!!
-
- //Filling
- if (Element_Level==1)
- Element[0].Next=File_Offset+Buffer_Offset+Size;
- else if (File_Offset+Buffer_Offset+Size>Element[Element_Level-2].Next)
- Element[Element_Level-1].Next=Element[Element_Level-2].Next;
- else
- Element[Element_Level-1].Next=File_Offset+Buffer_Offset+Size;
- Element[Element_Level-1].IsComplete=true;
-
- //ToShow
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- Element[Element_Level-1].ToShow.Pos=File_Offset+Buffer_Offset;
- Element[Element_Level-1].ToShow.Size=Element[Element_Level-1].Next-(File_Offset+Buffer_Offset);
- }
- #endif //MEDIAINFO_TRACE
-}
-
-//***************************************************************************
-// Data
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Data_Manage()
-{
- Element_WantNextLevel=false;
- if (!Element[Element_Level].UnTrusted)
- {
- Element_Code=Element[Element_Level].Code;
- //size_t Element_Level_Save=Element_Level;
- Data_Parse();
- BS->Attach(NULL, 0); //Clear it
- //Element_Level=Element_Level_Save;
-
- if (Buffer_Offset+(Element_WantNextLevel?Element_Offset:Element_Size)>=FrameInfo.Buffer_Offset_End)
- {
- if (Frame_Count_Previous<Frame_Count)
- Frame_Count_Previous=Frame_Count;
- if (Field_Count_Previous<Field_Count)
- Field_Count_Previous=Field_Count;
- }
-
- if (Buffer_Offset+(Element_WantNextLevel?Element_Offset:Element_Size)>=FrameInfo.Buffer_Offset_End && FrameInfo_Next.DTS!=(int64u)-1)
- {
- FrameInfo=FrameInfo_Next;
- FrameInfo_Next=frame_info();
- }
-
- //Testing the parser result
- if (Element_IsWaitingForMoreData())
- {
- //The data is not complete, need more data
- Element_End0(); //Element
- Buffer_Offset-=(size_t)Header_Size;
- return false;
- }
-
- Element[Element_Level].IsComplete=true;
-
- if (!Element_WantNextLevel && DataMustAlwaysBeComplete && Element_Offset<Element_Size)
- Element_Offset=Element_Size; //In case the element is not fully parsed, an element with size from the header is assumed
- }
-
- //If no need of more
- if (File_GoTo!=(int64u)-1 || (Status[IsFinished] && !ShouldContinueParsing)
- #if MEDIAINFO_MD5
- || Md5_ParseUpTo
- #endif //MEDIAINFO_MD5
- )
- {
- if (!Element_WantNextLevel)
- Element_End0(); //Element
- if (!Element_WantNextLevel && Element_Offset<Element_Size)
- Buffer_Offset+=(size_t)Element_Size;
- else
- {
- if (sizeof(size_t)<sizeof(int64u) && Buffer_Offset+Element_Offset>=(int64u)(size_t)-1)
- GoTo(File_Offset+Buffer_Offset+Element_Offset);
- else
- Buffer_Offset+=(size_t)Element_Offset;
- }
- Header_Size=0;
- Element_Size=0;
- Element_Offset=0;
- return false;
- }
-
- //Next element
- if (!Element_WantNextLevel
- #if MEDIAINFO_MD5
- && MD5==NULL
- #endif //MEDIAINFO_MD5
- )
- {
- if (Element[Element_Level].Next<=File_Offset+Buffer_Size)
- {
- if (Element_Offset<(size_t)(Element[Element_Level].Next-File_Offset-Buffer_Offset))
- Element_Offset=(size_t)(Element[Element_Level].Next-File_Offset-Buffer_Offset);
- }
- else if (!Status[IsFinished])
- {
- GoTo(Element[Element_Level].Next);
- if (!Element_WantNextLevel)
- Element_End0(); //Element
- return false;
- }
- }
-
- if (!Element_WantNextLevel && Element_Offset<Element_Size)
- Buffer_Offset+=(size_t)Element_Size;
- else
- {
- if (sizeof(size_t)<sizeof(int64u) && Buffer_Offset+Element_Offset>=(int64u)(size_t)-1)
- GoTo(File_Offset+Buffer_Offset+Element_Offset);
- else
- Buffer_Offset+=(size_t)Element_Offset;
- }
- Header_Size=0;
- Element_Size=0;
- Element_Offset=0;
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- {
- if (!Element_WantNextLevel)
- Element_End0();
- return false;
- }
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_TRACE
- if (Element_Level>0)
- Element[Element_Level-1].ToShow.NoShow=Element[Element_Level].ToShow.NoShow; //If data must not be shown, we hide the header too
- else
- Element[0].ToShow.NoShow=false; //This should never happen, but in case of
- #endif //MEDIAINFO_TRACE
- Element_End0(); //Element
- if (Element_WantNextLevel)
- Element_Level++;
- Element[Element_Level].UnTrusted=false;
-
- //Jumping to the end of the file if needed
- if (!EOF_AlreadyDetected && Config->ParseSpeed<1 && File_GoTo==(int64u)-1)
- {
- Element[Element_Level].WaitForMoreData=false;
- Detect_EOF();
- if ((File_GoTo!=(int64u)-1 && File_GoTo>File_Offset+Buffer_Offset) || (Status[IsFinished] && !ShouldContinueParsing))
- {
- EOF_AlreadyDetected=true;
- return false;
- }
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Data_Info (const Ztring &Parameter)
-{
- size_t Element_Level_Temp=Element_Level;
- Element_Level=Data_Level;
- Element_Info(Parameter);
- Element_Level=Element_Level_Temp;
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Data_Accept (const char* ParserName)
-{
- if (Status[IsAccepted] || Status[IsFinished])
- return;
-
- if (ParserName)
- Info(Ztring(ParserName)+__T(", accepted"));
-
- Accept(ParserName);
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Data_Finish (const char* ParserName)
-{
- if (ShouldContinueParsing)
- {
- //if (ParserName)
- // Info(Ztring(ParserName)+__T(", wants to finish, but should continue parsing"));
- return;
- }
-
- if (ParserName)
- Info(Ztring(ParserName)+__T(", finished"));
-
- Finish();
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Data_Reject (const char* ParserName)
-{
- Status[IsAccepted]=false;
- Status[IsFinished]=true;
- Clear();
-
- if (ParserName)// && File_Offset+Buffer_Offset+Element_Size<File_Size)
- Info(Ztring(ParserName)+__T(", rejected"));
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Data_GoTo (int64u GoTo_, const char* ParserName)
-{
- Element_Show();
-
- if (ShouldContinueParsing)
- {
- if (ParserName)
- Info(Ztring(ParserName)+__T(", wants to go to somewhere, but should continue parsing"));
- return;
- }
-
- if (IsSub)
- {
- if (ParserName)
- Info(Ztring(ParserName)+__T(", wants to go to somewhere, but is sub, waiting data"));
- return;
- }
-
- Info(Ztring(ParserName)+__T(", jumping to offset ")+Ztring::ToZtring(GoTo_, 16));
- GoTo(GoTo_);
- Element_End0();
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Data_GoToFromEnd (int64u GoToFromEnd, const char* ParserName)
-{
- if (IsSub && Config->ParseSpeed==1)
- return;
-
- if (GoToFromEnd>File_Size)
- {
- if (ParserName)
- Info(Ztring(ParserName)+__T(", wants to go to somewhere, but not valid"));
- return;
- }
-
- Data_GoTo(File_Size-GoToFromEnd, ParserName);
-}
-#endif //MEDIAINFO_TRACE
-
-
-//***************************************************************************
-// Element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-Ztring Log_Offset (int64u OffsetToShow, MediaInfo_Config::trace_Format Config_Trace_Format)
-{
- if (OffsetToShow==(int64u)-1)
- return __T(" ");
- int64u Offset=OffsetToShow%0x100000000ULL; //Only 32 bits
- Ztring Pos1; Pos1.From_Number(Offset, 16);
- Ztring Pos2;
- Pos2.resize(8-Pos1.size(), __T('0'));
- Pos2+=Pos1;
- Pos2.MakeUpperCase();
- switch (Config_Trace_Format)
- {
- case MediaInfo_Config::Trace_Format_Tree : Pos2+=__T(' '); break;
- case MediaInfo_Config::Trace_Format_CSV : Pos2+=__T(','); break;
- default : ;
- }
- return Pos2;
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-void File__Analyze::Element_Begin()
-{
- //Level
- Element_Level++;
-
- //Element
- Element[Element_Level].Code=0;
- Element[Element_Level].Next=Element[Element_Level-1].Next;
- Element[Element_Level].WaitForMoreData=Element[Element_Level-1].WaitForMoreData;
- Element[Element_Level].UnTrusted=Element[Element_Level-1].UnTrusted;
- Element[Element_Level].IsComplete=Element[Element_Level-1].IsComplete;
-
- //ToShow
- #if MEDIAINFO_TRACE
- Element[Element_Level].ToShow.Pos=File_Offset+Buffer_Offset+Element_Offset+BS->OffsetBeforeLastCall_Get(); //TODO: change this, used in Element_End0()
- if (Trace_Activated)
- {
- Element[Element_Level].ToShow.Size=Element[Element_Level].Next-(File_Offset+Buffer_Offset+Element_Offset+BS->OffsetBeforeLastCall_Get());
- Element[Element_Level].ToShow.Header_Size=0;
- Element[Element_Level].ToShow.Name.clear();
- Element[Element_Level].ToShow.Info.clear();
- Element[Element_Level].ToShow.Details.clear();
- Element[Element_Level].ToShow.NoShow=false;
- }
- #endif //MEDIAINFO_TRACE
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Element_Begin(const Ztring &Name)
-{
- //Level
- Element_Level++;
-
- //Element
- Element[Element_Level].Code=0;
- Element[Element_Level].Next=Element[Element_Level-1].Next;
- Element[Element_Level].WaitForMoreData=false;
- Element[Element_Level].UnTrusted=Element[Element_Level-1].UnTrusted;
- Element[Element_Level].IsComplete=Element[Element_Level-1].IsComplete;
-
- //ToShow
- Element[Element_Level].ToShow.Pos=File_Offset+Buffer_Offset+Element_Offset+BS->OffsetBeforeLastCall_Get(); //TODO: change this, used in Element_End0()
- if (Trace_Activated)
- {
- Element[Element_Level].ToShow.Size=Element[Element_Level].Next-(File_Offset+Buffer_Offset+Element_Offset+BS->OffsetBeforeLastCall_Get());
- Element[Element_Level].ToShow.Header_Size=0;
- Element_Name(Name);
- Element[Element_Level].ToShow.Info.clear();
- Element[Element_Level].ToShow.Details.clear();
- Element[Element_Level].ToShow.NoShow=false;
- }
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Element_Name(const Ztring &Name)
-{
- //ToShow
- if (Trace_Activated)
- {
- if (!Name.empty())
- {
- Ztring Name2=Name;
- Name2.FindAndReplace(__T("\r\n"), __T("__"), 0, Ztring_Recursive);
- Name2.FindAndReplace(__T("\r"), __T("_"), 0, Ztring_Recursive);
- Name2.FindAndReplace(__T("\n"), __T("_"), 0, Ztring_Recursive);
- if (Name2[0]==__T(' '))
- Name2[0]=__T('_');
- Element[Element_Level].ToShow.Name=Name2;
- }
- else
- Element[Element_Level].ToShow.Name=__T("(Empty)");
- }
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Element_Info(const Ztring &Parameter)
-{
- //Coherancy
- if (Config_Trace_Level==0 || !(Trace_Layers.to_ulong()&Config_Trace_Layers.to_ulong()) || Element[Element_Level].ToShow.Details.size()>64*1024*1024)
- return;
-
- //Needed?
- if (Config_Trace_Level<=0.7)
- return;
-
- //ToShow
- Ztring Parameter2(Parameter);
- Parameter2.FindAndReplace(__T("\r\n"), __T(" / "));
- Parameter2.FindAndReplace(__T("\r"), __T(" / "));
- Parameter2.FindAndReplace(__T("\n"), __T(" / "));
- switch (Config_Trace_Format)
- {
- case MediaInfo_Config::Trace_Format_Tree :
- case MediaInfo_Config::Trace_Format_CSV : Element[Element_Level].ToShow.Info+=__T(" - "); break;
- default : ;
- }
- Element[Element_Level].ToShow.Info+=Parameter2;
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Element_End(const Ztring &Name)
-{
- //ToShow
- if (Trace_Activated)
- {
- Element[Element_Level].ToShow.Size=Element[Element_Level].Next-Element[Element_Level].ToShow.Pos;
- if (!Name.empty())
- Element[Element_Level].ToShow.Name=Name;
- }
-
- Element_End_Common_Flush();
-}
-#endif //MEDIAINFO_TRACE
-
-//***************************************************************************
-// Element - Common
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Element_End_Common_Flush()
-{
- #if MEDIAINFO_TRACE
- //Size if not filled
- if (File_Offset+Buffer_Offset+Element_Offset+BS->Offset_Get()<Element[Element_Level].Next)
- Element[Element_Level].ToShow.Size=File_Offset+Buffer_Offset+Element_Offset+BS->Offset_Get()-Element[Element_Level].ToShow.Pos;
- #endif //MEDIAINFO_TRACE
-
- //Level
- if (Element_Level==0)
- return;
-
- //Element level
- Element_Level--;
-
- //Element
- Element[Element_Level].UnTrusted=Element[Element_Level+1].UnTrusted;
- Element[Element_Level].WaitForMoreData=Element[Element_Level+1].WaitForMoreData;
-
- #if MEDIAINFO_TRACE
- Element_End_Common_Flush_Details();
- #endif //MEDIAINFO_TRACE
-}
-
-#if MEDIAINFO_TRACE
-//---------------------------------------------------------------------------
-void File__Analyze::Element_End_Common_Flush_Details()
-{
- if (Trace_Activated)
- {
- if (!Element[Element_Level+1].WaitForMoreData && (Element[Element_Level+1].IsComplete || !Element[Element_Level+1].UnTrusted) && !Element[Element_Level+1].ToShow.NoShow)// && Config_Trace_Level!=0 && Element[Element_Level].ToShow.Details.size()<=64*1024*1024)
- {
- //Element
- if (!Element[Element_Level+1].ToShow.Name.empty())
- {
- if (!Element[Element_Level].ToShow.Details.empty())
- Element[Element_Level].ToShow.Details+=Config_LineSeparator;
- Element[Element_Level].ToShow.Details+=Element_End_Common_Flush_Build();
- Element[Element_Level+1].ToShow.Name.clear();
- }
-
- //Info
- if (!Element[Element_Level+1].ToShow.Details.empty())
- {
- if (!Element[Element_Level].ToShow.Details.empty())
- Element[Element_Level].ToShow.Details+=Config_LineSeparator;
- Element[Element_Level].ToShow.Details+=Element[Element_Level+1].ToShow.Details;
- Element[Element_Level+1].ToShow.Details.clear();
- }
- }
- }
-}
-#endif //MEDIAINFO_TRACE
-
-#if MEDIAINFO_TRACE
-//---------------------------------------------------------------------------
-Ztring File__Analyze::Element_End_Common_Flush_Build()
-{
- Ztring ToReturn;
-
- //Show Offset
- if (Config_Trace_Level>0.7)
- {
- ToReturn+=Log_Offset(Element[Element_Level+1].ToShow.Pos, Config_Trace_Format);
- }
-
- //Name
- switch (Config_Trace_Format)
- {
- case MediaInfo_Config::Trace_Format_Tree : ToReturn.resize(ToReturn.size()+Element_Level_Base+Element_Level, __T(' ')); break;
- case MediaInfo_Config::Trace_Format_CSV :
- ToReturn+=__T("G,");
- ToReturn+=Ztring::ToZtring(Element_Level_Base+Element_Level);
- ToReturn+=__T(',');
- break;
- default : ;
- }
- ToReturn+=Element[Element_Level+1].ToShow.Name;
-
- //Info
- ToReturn+=Element[Element_Level+1].ToShow.Info;
- Element[Element_Level+1].ToShow.Info.clear();
-
- //Size
- if (Config_Trace_Level>0.3)
- {
- switch (Config_Trace_Format)
- {
- case MediaInfo_Config::Trace_Format_Tree :
- ToReturn+=__T(" (");
- break;
- case MediaInfo_Config::Trace_Format_CSV :
- ToReturn+=__T(",(");
- break;
- default : ;
- }
- ToReturn+=Ztring::ToZtring(Element[Element_Level+1].ToShow.Size);
- if (Element[Element_Level+1].ToShow.Header_Size>0)
- {
- ToReturn+=__T("/");
- ToReturn+=Ztring::ToZtring(Element[Element_Level+1].ToShow.Size-Element[Element_Level+1].ToShow.Header_Size);
- }
- ToReturn+=__T(" bytes)");
- }
-
- return ToReturn;
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-void File__Analyze::Element_Prepare (int64u Size)
-{
- Element_Offset=0;
- Element_Size=Size;
- #if MEDIAINFO_TRACE
- Element[Element_Level].ToShow.Size=Size;
- #endif //MEDIAINFO_TRACE
-}
-//***************************************************************************
-// Param
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Param(const Ztring& Parameter, const Ztring& Value)
-{
- if (Config_Trace_Level==0 || !(Trace_Layers.to_ulong()&Config_Trace_Layers.to_ulong()))
- return;
-
- //Position
- int64u Pos=Element_Offset+BS->OffsetBeforeLastCall_Get();
-
- //Coherancy
- if (Element[Element_Level].UnTrusted)
- return;
-
- //Line separator
- if (!Element[Element_Level].ToShow.Details.empty())
- Element[Element_Level].ToShow.Details+=Config_LineSeparator;
-
- //Show Offset
- if (Config_Trace_Level>0.7)
- {
- Element[Element_Level].ToShow.Details+=Log_Offset(Pos==(int64u)-1?Pos:(File_Offset+Buffer_Offset+Pos), Config_Trace_Format);
- }
-
- //Show Parameter+Value
- switch (Config_Trace_Format)
- {
- case MediaInfo_Config::Trace_Format_Tree :
- {
- const size_t Padding_Value=40;
-
- //Show Parameter
- Ztring Param; Param=Parameter;
- if (Param.size()>Padding_Value) Param.resize(Padding_Value);
- Element[Element_Level].ToShow.Details.resize(Element[Element_Level].ToShow.Details.size()+Element_Level_Base+Element_Level, __T(' '));
- Element[Element_Level].ToShow.Details+=Param;
-
- //Show Value
- if (!Value.empty())
- {
- Element[Element_Level].ToShow.Details+=__T(": ");
- Element[Element_Level].ToShow.Details.resize(Element[Element_Level].ToShow.Details.size()+Padding_Value-Param.size()-Element_Level+1, __T(' '));
- Ztring Value2(Value);
- Value2.FindAndReplace(__T("\r\n"), __T(" / "), 0, Ztring_Recursive);
- Value2.FindAndReplace(__T("\r"), __T(" / "), 0, Ztring_Recursive);
- Value2.FindAndReplace(__T("\n"), __T(" / "), 0, Ztring_Recursive);
- Element[Element_Level].ToShow.Details+=Value2;
- }
- }
- break;
- case MediaInfo_Config::Trace_Format_CSV :
- Element[Element_Level].ToShow.Details+=__T("T,");
- Element[Element_Level].ToShow.Details+=Ztring::ToZtring(Element_Level_Base+Element_Level);
- Element[Element_Level].ToShow.Details+=__T(',');
- Element[Element_Level].ToShow.Details+=Parameter;
- Element[Element_Level].ToShow.Details+=__T(',');
- Element[Element_Level].ToShow.Details+=Value;
- break;
- default : ;
- }
-}
-#endif //MEDIAINFO_TRACE
-
-//***************************************************************************
-// Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Info(const Ztring& Value, size_t Element_Level_Minus)
-{
- if (Config_Trace_Format==MediaInfo_Config::Trace_Format_CSV)
- return; //Do not display info
-
- //Handling a different level (only Element_Level_Minus to 1 is currently well supported)
- size_t Element_Level_Final=Element_Level;
- if (Element_Level_Minus<=Element_Level)
- {
- if (Element_Level_Minus==1)
- {
- Element_Level--;
- Element_End_Common_Flush_Details();
- Element_Level++;
- }
- Element_Level_Final-=Element_Level_Minus;
- }
-
- if (Config_Trace_Level==0 || !(Trace_Layers.to_ulong()&Config_Trace_Layers.to_ulong()))
- return;
-
- //Coherancy
- if (Element[Element_Level_Final].UnTrusted)
- return;
-
- //Line separator
- if (!Element[Element_Level_Final].ToShow.Details.empty())
- Element[Element_Level_Final].ToShow.Details+=Config_LineSeparator;
-
- //Preparing
- Ztring ToShow; ToShow.resize(Element_Level_Final, __T(' '));
- ToShow+=__T("--- ");
- ToShow+=Value;
- ToShow+=__T(" ---");
- Ztring Separator; Separator.resize(Element_Level_Final, __T(' '));
- Separator.resize(ToShow.size(), __T('-'));
-
- //Show Offset
- Ztring Offset;
- if (Config_Trace_Level>0.7)
- Offset=Log_Offset(File_Offset+Buffer_Offset+Element_Offset+BS->Offset_Get(), Config_Trace_Format);
- Offset.resize(Offset.size()+Element_Level_Base, __T(' '));
-
- //Show Value
- Element[Element_Level_Final].ToShow.Details+=Offset;
- Element[Element_Level_Final].ToShow.Details+=Separator;
- Element[Element_Level_Final].ToShow.Details+=Config_LineSeparator;
- Element[Element_Level_Final].ToShow.Details+=Offset;
- Element[Element_Level_Final].ToShow.Details+=ToShow;
- Element[Element_Level_Final].ToShow.Details+=Config_LineSeparator;
- Element[Element_Level_Final].ToShow.Details+=Offset;
- Element[Element_Level_Final].ToShow.Details+=Separator;
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Param_Info (const Ztring &Text)
-{
- //Coherancy
- if (Element[Element_Level].UnTrusted)
- return;
- if (Config_Trace_Level==0 || !(Trace_Layers.to_ulong()&Config_Trace_Layers.to_ulong()) || Element[Element_Level].ToShow.Details.size()>64*1024*1024)
- return;
-
- //Needed?
- if (Config_Trace_Level<=0.7)
- return;
-
- //Filling
- Element[Element_Level].ToShow.Details+=__T(" - ")+Text;
-}
-#endif //MEDIAINFO_TRACE
-
-//***************************************************************************
-// Next code planning
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::NextCode_Add (int64u Code)
-{
- NextCode[Code]=true;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::NextCode_Clear ()
-{
- NextCode.clear();
-}
-
-//---------------------------------------------------------------------------
-bool File__Analyze::NextCode_Test ()
-{
- if (NextCode.find(Element_Code)==NextCode.end())
- {
- Trusted_IsNot("Frames are not in the right order");
- return false;
- }
-
- return true;
-}
-
-//***************************************************************************
-// Element trusting
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Trusted_IsNot (const char* Reason)
-#else //MEDIAINFO_TRACE
-void File__Analyze::Trusted_IsNot ()
-#endif //MEDIAINFO_TRACE
-{
- Element_Offset=Element_Size;
- BS->Attach(NULL, 0);
-
- if (!Element[Element_Level].UnTrusted)
- {
- #if MEDIAINFO_TRACE
- Param(Reason, 0);
- #endif //MEDIAINFO_TRACE
-
- //Enough data?
- if (!Element[Element_Level].IsComplete)
- {
- Element_WaitForMoreData();
- return;
- }
-
- Element[Element_Level].UnTrusted=true;
- Synched=false;
- if (!Status[IsFilled] && Trusted>0)
- Trusted--;
- }
-
- if (Trusted==0 && !Status[IsAccepted])
- Reject();
-}
-
-//***************************************************************************
-// Actions
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Accept (const char* ParserName_Char)
-#else //MEDIAINFO_TRACE
-void File__Analyze::Accept ()
-#endif //MEDIAINFO_TRACE
-{
- if (Status[IsAccepted] || Status[IsFinished])
- return;
-
- #if MEDIAINFO_TRACE
- if (ParserName.empty())
- ParserName.From_Local(ParserName_Char);
-
- if (!ParserName.empty())
- {
- bool MustElementBegin=Element_Level?true:false;
- if (Element_Level>0)
- Element_End0(); //Element
- Info(ParserName+__T(", accepted"));
- if (MustElementBegin)
- Element_Level++;
- }
- #endif //MEDIAINFO_TRACE
-
- Status[IsAccepted]=true;
- if (Count_Get(Stream_General)==0)
- {
- Stream_Prepare(Stream_General);
- Streams_Accept();
- }
-
- #if MEDIAINFO_EVENTS
- if (!IsSub)
- {
- EVENT_BEGIN (General, Parser_Selected, 0)
- std::memset(Event.Name, 0, 16);
- if (!ParserName.empty())
- strncpy(Event.Name, ParserName.To_Local().c_str(), 15);
- EVENT_END ()
-
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- if (!Demux_EventWasSent_Accept_Specific && Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet())
- Config->Demux_EventWasSent=true;
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- }
-
- Config->Event_Accepted(this);
- #endif //MEDIAINFO_EVENTS
-}
-
-void File__Analyze::Accept (File__Analyze* Parser)
-{
- if (Parser==NULL)
- return;
-
- Parser->Accept();
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Update (const char* ParserName_Char)
-#else //MEDIAINFO_TRACE
-void File__Analyze::Update ()
-#endif //MEDIAINFO_TRACE
-{
- if (!Status[IsAccepted])
- return;
-
- Open_Buffer_Update();
-}
-
-void File__Analyze::Update (File__Analyze* Parser)
-{
- if (Parser==NULL)
- return;
-
- Parser->Update();
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Fill (const char* ParserName_Char)
-#else //MEDIAINFO_TRACE
-void File__Analyze::Fill ()
-#endif //MEDIAINFO_TRACE
-{
- if (!Status[IsAccepted] || Status[IsFilled] || Status[IsFinished])
- return;
-
- #if MEDIAINFO_TRACE
- if (ParserName.empty())
- ParserName.From_Local(ParserName_Char);
-
- if (!ParserName.empty())
- {
- bool MustElementBegin=Element_Level?true:false;
- if (Element_Level>0)
- Element_End0(); //Element
- Info(ParserName+__T(", filling"));
- if (MustElementBegin)
- Element_Level++;
- }
- #endif //MEDIAINFO_TRACE
-
- Streams_Fill();
- Status[IsFilled]=true;
- Status[IsUpdated]=true;
-
- //Instantaneous bitrate at the "fill" level
- if (File_Size==(int64u)-1 && FrameInfo.PTS!=(int64u)-1 && PTS_Begin!=(int64u)-1 && FrameInfo.PTS-PTS_Begin && StreamKind_Last!=Stream_General && StreamKind_Last!=Stream_Max)
- {
- Fill(StreamKind_Last, 0, "BitRate_Instantaneous", Buffer_TotalBytes*8*1000000000/(FrameInfo.PTS-PTS_Begin));
- (*Stream_More)[StreamKind_Last][0](Ztring().From_Local("BitRate_Instantaneous"), Info_Options)=__T("N NI");
- }
-}
-
-void File__Analyze::Fill (File__Analyze* Parser)
-{
- if (Parser==NULL)
- return;
-
- Parser->Fill();
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Finish (const char* ParserName_Char)
-#else //MEDIAINFO_TRACE
-void File__Analyze::Finish ()
-#endif //MEDIAINFO_TRACE
-{
- if (Status[IsFinished])
- return;
-
- if (!ShouldContinueParsing && !Status[IsFilled])
- Fill();
-
- if (ShouldContinueParsing || Config->ParseSpeed==1)
- {
- #if MEDIAINFO_TRACE
- if (!ParserName.empty())
- {
- bool MustElementBegin=Element_Level?true:false;
- if (Element_Level>0)
- Element_End0(); //Element
- //Info(Ztring(ParserName)+__T(", wants to finish, but should continue parsing"));
- if (MustElementBegin)
- Element_Level++;
- }
- #endif //MEDIAINFO_TRACE
-
- return;
- }
-
- ForceFinish();
-}
-
-void File__Analyze::Finish (File__Analyze* Parser)
-{
- ForceFinish(Parser); //The base parser wants, and is prepared to it, so nothing can be cancelled --> ForceFinish() instead of Finish()
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::ForceFinish (const char* ParserName_Char)
-#else //MEDIAINFO_TRACE
-void File__Analyze::ForceFinish ()
-#endif //MEDIAINFO_TRACE
-{
- if (Status[IsFinished])
- return;
-
- #if MEDIAINFO_TRACE
- if (ParserName.empty())
- ParserName.From_Local(ParserName_Char);
-
- if (!ParserName.empty())
- {
- bool MustElementBegin=Element_Level?true:false;
- if (Element_Level>0)
- Element_End0(); //Element
- Info(ParserName+__T(", finished"));
- if (MustElementBegin)
- Element_Level++;
- }
- #endif //MEDIAINFO_TRACE
-
- if (Status[IsAccepted])
- {
- //Total file size
- #if MEDIAINFO_ADVANCED
- if (!IsSub && !(!Config->File_IgnoreSequenceFileSize_Get() || Config->File_Names.size()<=1) && Config->ParseSpeed>=1.0 && Config->File_Names.size()>1 && Config->File_Names_Pos+1>=Config->File_Names.size())
- {
- Fill (Stream_General, 0, General_FileSize, Config->File_Current_Size, 10, true);
- }
- #endif //MEDIAINFO_ADVANCED
-
- Fill();
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
- Streams_Finish();
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
- if (Status[IsUpdated])
- {
- Open_Buffer_Update();
- if (IsSub)
- Status[IsUpdated]=true; //We want that container merges the result
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
- }
- Streams_Finish_Global();
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
- Ibi_Stream_Finish();
- }
-
- Status[IsFinished]=true;
-
- //Real stream size
- if (Config->ParseSpeed==1 && IsRawStream && Buffer_TotalBytes)
- {
- //Exception with text streams embedded in video
- if (StreamKind_Last==Stream_Text)
- StreamKind_Last=Stream_Video;
-
- Fill(StreamKind_Last, 0, "StreamSize", Buffer_TotalBytes, 10, true);
- }
-
- //Frame count
- if (Config->ParseSpeed==1 && IsRawStream && Frame_Count && Frame_Count!=(int64u)-1 && Retrieve(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_FrameCount)).empty())
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_FrameCount), Frame_Count);
-}
-
-void File__Analyze::ForceFinish (File__Analyze* Parser)
-{
- if (Parser==NULL)
- return;
-
- if (File_Offset+Buffer_Offset+Element_Size>=File_Size)
- {
- Element_Size=0;
- Parser->Buffer_Offset=(size_t)(Parser->File_Size-Parser->File_Offset);
- }
-
- Parser->ForceFinish();
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Reject (const char* ParserName)
-#else //MEDIAINFO_TRACE
-void File__Analyze::Reject ()
-#endif //MEDIAINFO_TRACE
-{
- Status[IsAccepted]=false;
- Status[IsFinished]=true;
- Clear();
-
- #if MEDIAINFO_TRACE
- if (ParserName)// && File_Offset+Buffer_Offset+Element_Size<File_Size)
- {
- bool MustElementBegin=Element_Level?true:false;
- if (Element_Level>0)
- Element_End0(); //Element
- Info(Ztring(ParserName)+__T(", rejected"));
- if (MustElementBegin)
- Element_Level++;
- }
- #endif //MEDIAINFO_TRACE
-}
-
-void File__Analyze::Reject (File__Analyze* Parser)
-{
- if (Parser==NULL)
- return;
-
- Parser->Reject();
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::GoTo (int64u GoTo, const char* ParserName)
-{
- if (!Status[IsAccepted])
- {
- Reject();
- return;
- }
-
- Element_Show();
-
- if (IsSub && Config->ParseSpeed==1)
- return;
-
- if (GoTo==File_Size)
- {
- if (!BookMark_Code.empty())
- BookMark_Get();
- if (File_GoTo==(int64u)-1)
- ForceFinish();
- return;
- }
-
- if (ShouldContinueParsing)
- {
- if (ParserName)
- {
- bool MustElementBegin=Element_Level?true:false;
- if (Element_Level>0)
- Element_End0(); //Element
- Info(Ztring(ParserName)+__T(", wants to go to somewhere, but should continue parsing"));
- if (MustElementBegin)
- Element_Level++;
- }
- return;
- }
-
- if (IsSub)
- {
- if (ParserName)
- {
- bool MustElementBegin=Element_Level?true:false;
- if (Element_Level>0)
- Element_End0(); //Element
- Info(Ztring(ParserName)+__T(", wants to go to somewhere, but is sub, waiting data"));
- if (MustElementBegin)
- Element_Level++;
- }
- return;
- }
-
- if (ParserName)
- {
- bool MustElementBegin=Element_Level?true:false;
- if (Element_Level>0)
- Element_End0(); //Element
- Info(Ztring(ParserName)+__T(", jumping to offset ")+Ztring::ToZtring(GoTo, 16));
- if (MustElementBegin)
- Element_Level++; //Element
- }
-
- File_GoTo=GoTo;
-
- #if MEDIAINFO_EVENTS
- EVENT_BEGIN (General, Move_Request, 0)
- Event.StreamOffset=File_GoTo;
- EVENT_END ()
- #endif //MEDIAINFO_EVENTS
-}
-#else //MEDIAINFO_TRACE
-void File__Analyze::GoTo (int64u GoTo)
-{
- if (!Status[IsAccepted])
- {
- Reject();
- return;
- }
-
- if (IsSub && Config->ParseSpeed==1)
- return;
-
- if (GoTo==File_Size)
- {
- if (!BookMark_Code.empty())
- BookMark_Get();
- if (File_GoTo==(int64u)-1)
- ForceFinish();
- return;
- }
-
- if (ShouldContinueParsing)
- {
- return;
- }
-
- if (IsSub)
- {
- return;
- }
-
- File_GoTo=GoTo;
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::GoToFromEnd (int64u GoToFromEnd, const char* ParserName)
-{
- if (GoToFromEnd>File_Size)
- {
- if (ParserName)
- {
- bool MustElementBegin=Element_Level?true:false;
- if (Element_Level>0)
- Element_End0(); //Element
- Info(Ztring(ParserName)+__T(", wants to go to somewhere, but not valid"));
- if (MustElementBegin)
- Element_Level++;
- }
- return;
- }
-
- if (File_Size==(int64u)-1)
- {
- #if MEDIAINFO_SEEK
- if (Config->File_IgnoreSequenceFileSize_Get() && GoToFromEnd)
- {
- File_GoTo=Config->File_Names.size()-1;
- File_Offset=(int64u)-1;
- Config->File_Current_Offset=(int64u)-1;
- Config->File_GoTo_IsFrameOffset=true;
- }
- else
- #endif //MEDIAINFO_SEEK
- ForceFinish(); //We can not jump
- return;
- }
-
- GoTo(File_Size-GoToFromEnd, ParserName);
-}
-#else //MEDIAINFO_TRACE
-void File__Analyze::GoToFromEnd (int64u GoToFromEnd)
-{
- if (GoToFromEnd>File_Size)
- return;
-
- if (File_Size==(int64u)-1)
- {
- #if MEDIAINFO_SEEK
- if (Config->File_IgnoreSequenceFileSize_Get() && GoToFromEnd)
- {
- File_GoTo=Config->File_Names.size()-1;
- File_Offset=(int64u)-1;
- Config->File_Current_Offset=(int64u)-1;
- Config->File_GoTo_IsFrameOffset=true;
- }
- else
- #endif //MEDIAINFO_SEEK
- ForceFinish(); //We can not jump
- return;
- }
-
- GoTo(File_Size-GoToFromEnd);
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-int64u File__Analyze::Element_Code_Get (size_t Level)
-{
- return Element[Level].Code;
-}
-
-//---------------------------------------------------------------------------
-int64u File__Analyze::Element_TotalSize_Get (size_t LevelLess)
-{
- return Element[Element_Level-LevelLess].Next-(File_Offset+Buffer_Offset);
-}
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Element_IsComplete_Get ()
-{
- return Element[Element_Level].IsComplete;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Element_ThisIsAList ()
-{
- Element_WantNextLevel=true;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Element_WaitForMoreData ()
-{
- //if (File_Offset+Buffer_Size<File_Size)
- Element[Element_Level].WaitForMoreData=true;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Element_DoNotTrust (const char* Reason)
-#else //MEDIAINFO_TRACE
-void File__Analyze::Element_DoNotTrust ()
-#endif //MEDIAINFO_TRACE
-{
- Element[Element_Level].WaitForMoreData=false;
- Element[Element_Level].IsComplete=true;
- #if MEDIAINFO_TRACE
- Trusted_IsNot(Reason);
- #else //MEDIAINFO_TRACE
- Trusted_IsNot();
- #endif //MEDIAINFO_TRACE
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Element_DoNotShow ()
-{
- Element[Element_Level].ToShow.NoShow=true;
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Element_Show ()
-{
- Element[Element_Level].ToShow.NoShow=false;
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-bool File__Analyze::Element_Show_Get ()
-{
- return !Element[Element_Level].ToShow.NoShow;
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Element_Show_Add (const Ztring &ToShow)
-{
- if (ToShow.empty())
- return;
-
- //Line separator
- if (!Element[Element_Level].ToShow.Details.empty())
- Element[Element_Level].ToShow.Details+=Config_LineSeparator;
-
- //From Sub
- Element[Element_Level].ToShow.Details+=ToShow;
-}
-#endif //MEDIAINFO_TRACE
-
-#if MEDIAINFO_TRACE
-void File__Analyze::Trace_Layers_Update(size_t Layer)
-{
- if (Layer!=(size_t)-1)
- {
- Trace_Layers.reset();
- Trace_Layers.set(Layer);
- }
- Trace_Activated=(Config_Trace_Level!=0 && (Trace_Layers&Config_Trace_Layers)!=0);
-}
-#endif //MEDIAINFO_TRACE
-
-//***************************************************************************
-// Status
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Element_IsOK ()
-{
- #if !MEDIAINFO_TRACE
- if (BS && BS->BufferUnderRun)
- Trusted_IsNot();
- #endif //MEDIAINFO_TRACE
-
- return !Element[Element_Level].WaitForMoreData && !Element[Element_Level].UnTrusted;
-}
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Element_IsNotFinished ()
-{
- if (BS->Remain()>0 || Element_Offset+BS->Offset_Get()<Element_Size)
- return true;
- else
- return false;
-}
-
-//---------------------------------------------------------------------------
-bool File__Analyze::Element_IsWaitingForMoreData ()
-{
- return Element[Element_Level].WaitForMoreData;
-}
-
-//***************************************************************************
-// BookMarks
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::BookMark_Set (size_t Element_Level_ToSet)
-{
- Element_Level_ToSet=Element_Level;
- BookMark_Element_Level=Element_Level_ToSet;
- BookMark_Code.resize(BookMark_Element_Level+1);
- BookMark_Next.resize(BookMark_Element_Level+1);
- for (size_t Pos=0; Pos<=BookMark_Element_Level; Pos++)
- {
- BookMark_Code[Pos]=Element[Pos].Code;
- BookMark_Next[Pos]=Element[Pos].Next;
- }
- BookMark_GoTo=File_Offset+Buffer_Offset+Element_Offset;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::BookMark_Get ()
-{
- if (!BookMark_Needed())
- return;
-
- Element_Show();
- while (Element_Level>0)
- Element_End0();
- while (Element_Level<BookMark_Element_Level)
- {
- Element_Begin1("Restarting parsing...");
- Element_WantNextLevel=true;
- }
-
- for (size_t Pos=0; Pos<=Element_Level; Pos++)
- {
- Element[Pos].Code=BookMark_Code[Pos];
- Element[Pos].Next=BookMark_Next[Pos];
- }
- BookMark_Code.clear();
- BookMark_Next.clear();
- if (File_GoTo==(int64u)-1)
- {
- #if MEDIAINFO_MD5
- delete MD5; MD5=NULL;
- #endif //MEDIAINFO_MD5
- File_GoTo=BookMark_GoTo;
- }
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File__Analyze::Details_Clear()
-{
- Details->clear();
- Element[0].ToShow.Details.clear();
-}
-#endif //MEDIAINFO_TRACE
-
-#if MEDIAINFO_EVENTS
-void File__Analyze::Event_Prepare(struct MediaInfo_Event_Generic* Event)
-{
- memset(Event, 0xFF, sizeof(struct MediaInfo_Event_Generic));
- Event->StreamIDs_Size=StreamIDs_Size;
- memcpy_Unaligned_Unaligned_Once1024(Event->StreamIDs, StreamIDs, 128);
- memcpy(Event->StreamIDs_Width, StreamIDs_Width, sizeof(StreamIDs_Width));
- memcpy(Event->ParserIDs, ParserIDs, sizeof(ParserIDs));
- Event->StreamOffset=File_Offset+Buffer_Offset+Element_Offset;
- Event->FrameNumber=Frame_Count_NotParsedIncluded;
- Event->PCR=FrameInfo.PCR;
- Event->DTS=(FrameInfo.DTS==(int64u)-1?FrameInfo.PTS:FrameInfo.DTS);
- Event->PTS=FrameInfo.PTS;
- Event->DUR=FrameInfo.DUR;
- //Event->FrameNumber_PresentationOrder=FrameNumber_PresentationOrder;
-}
-#endif //MEDIAINFO_EVENTS
-
-//***************************************************************************
-// Demux
-//***************************************************************************
-#if MEDIAINFO_DEMUX
-void File__Analyze::Demux (const int8u* Buffer, size_t Buffer_Size, contenttype Content_Type, const int8u* xx, size_t xxx)
-{
- if (!(Config_Demux&Demux_Level))
- return;
-
- if (!Buffer_Size)
- return;
-
- #if MEDIAINFO_DEMUX && MEDIAINFO_SEEK
- if (Config->Demux_IsSeeking)
- return;
- #endif //MEDIAINFO_SEEK
-
- #if MEDIAINFO_EVENTS
- //Demux
- if (StreamIDs_Size)
- StreamIDs[StreamIDs_Size-1]=Element_Code;
-
- EVENT_BEGIN(Global, Demux, 4)
- if (StreamIDs_Size)
- Event.EventCode|=((int32u)ParserIDs[StreamIDs_Size-1]<<24);
- Event.Content_Type=(int8u)Content_Type;
- Event.Content_Size=Buffer_Size;
- Event.Content=Buffer;
- Event.Flags=0;
- if (Demux_random_access)
- Event.Flags|=0x1; //Bit 0
- Event.Offsets_Size=Offsets_Buffer.size();
- std::vector<int64u> Offsets_Stream_Temp;
- std::vector<int64u> Offsets_Buffer_Temp;
- float64 Ratio=1;
- if (OriginalBuffer_Size)
- Ratio=((float64)File__Analyze::OriginalBuffer_Size)/File__Analyze::Buffer_Size;
- if (Offsets_Buffer.empty())
- {
- Event.Offsets_Stream=NULL;
- Event.Offsets_Content=NULL;
- }
- else if (Buffer_Offset+Element_Offset)
- {
- Offsets_Stream_Temp=Offsets_Stream;
- Offsets_Buffer_Temp=Offsets_Buffer;
- size_t Pos=0;
- if (Offsets_Buffer.size()>=2 && Offsets_Buffer.size()%2==0 && Offsets_Buffer[0]==Offsets_Buffer[1])
- {
- while (Pos+2<Offsets_Buffer_Temp.size() && Offsets_Buffer_Temp[Pos+2]<Buffer_Offset+Element_Offset)
- Pos+=2;
- if (Pos)
- {
- Offsets_Buffer_Temp.erase(Offsets_Buffer_Temp.begin(), Offsets_Buffer_Temp.begin()+Pos);
- Offsets_Stream_Temp.erase(Offsets_Stream_Temp.begin(), Offsets_Stream_Temp.begin()+Pos);
- Event.Offsets_Size-=Pos;
- }
- Offsets_Stream_Temp[0]+=(Buffer_Offset+Element_Offset)/2-Offsets_Buffer_Temp[0];
- Offsets_Stream_Temp[1]+=(Buffer_Offset+Element_Offset)/2-Offsets_Buffer_Temp[1];
- Offsets_Buffer_Temp[0]=0;
- Offsets_Buffer_Temp[1]=0;
- for (size_t Pos=2; Pos<Offsets_Buffer_Temp.size(); Pos+=2)
- {
- Offsets_Buffer_Temp[Pos]-=(Buffer_Offset+Element_Offset)/2;
- Offsets_Buffer_Temp[Pos+1]-=(Buffer_Offset+Element_Offset)/2;
- }
- }
- else
- {
- while (Pos+1<Offsets_Buffer_Temp.size() && Offsets_Buffer_Temp[Pos+1]<(Buffer_Offset+Element_Offset)*Ratio)
- Pos++;
- if (Pos)
- {
- Offsets_Buffer_Temp.erase(Offsets_Buffer_Temp.begin(), Offsets_Buffer_Temp.begin()+Pos);
- Offsets_Stream_Temp.erase(Offsets_Stream_Temp.begin(), Offsets_Stream_Temp.begin()+Pos);
- Event.Offsets_Size-=Pos;
- }
- Offsets_Stream_Temp[0]+=float64_int64s((Buffer_Offset+Element_Offset)*Ratio)-Offsets_Buffer_Temp[0];
- Offsets_Buffer_Temp[0]=0;
- for (size_t Pos=1; Pos<Offsets_Buffer_Temp.size(); Pos++)
- Offsets_Buffer_Temp[Pos]-=float64_int64s((Buffer_Offset+Element_Offset)*Ratio);
- }
- Event.Offsets_Stream=&Offsets_Stream_Temp.front();
- Event.Offsets_Content=&Offsets_Buffer_Temp.front();
- }
- else
- {
- Event.Offsets_Stream=&Offsets_Stream.front();
- Event.Offsets_Content=&Offsets_Buffer.front();
- }
- Event.OriginalContent_Size=OriginalBuffer_Size?((size_t)float64_int64s(((float64)(Element_Size-Element_Offset))*Ratio)):0;
- Event.OriginalContent=OriginalBuffer_Size?(OriginalBuffer+(size_t)float64_int64s(((float64)(Buffer_Offset+Element_Offset))*Ratio)):NULL;
- EVENT_END()
-
- if (StreamIDs_Size)
- StreamIDs[StreamIDs_Size-1]=(int64u)-1;
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- if (Status[IsAccepted] && Config->NextPacket_Get())
- Config->Demux_EventWasSent=true;
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- if (StreamIDs_Size)
- StreamIDs[StreamIDs_Size-1]=(int64u)-1;
- #endif //MEDIAINFO_EVENTS
-}
-#endif //MEDIAINFO_DEMUX
-
-#if MEDIAINFO_DEMUX
-void File__Analyze::Demux_UnpacketizeContainer_Demux (bool random_access)
-{
- Demux_random_access=random_access;
-
- if (StreamIDs_Size>=2)
- Element_Code=StreamIDs[StreamIDs_Size-2];
- StreamIDs_Size--;
- Demux(Buffer+Buffer_Offset, Demux_Offset-Buffer_Offset, ContentType_MainStream);
- StreamIDs_Size++;
- if (StreamIDs_Size>=2)
- StreamIDs[StreamIDs_Size-2]=Element_Code;
- Demux_UnpacketizeContainer_Demux_Clear();
-}
-
-bool File__Analyze::Demux_UnpacketizeContainer_Test_OneFramePerFile ()
-{
- if (!IsSub && Buffer_Size<Config->File_Current_Size-Config->File_Current_Offset)
- {
- size_t* File_Buffer_Size_Hint_Pointer=Config->File_Buffer_Size_Hint_Pointer_Get();
- if (File_Buffer_Size_Hint_Pointer)
- (*File_Buffer_Size_Hint_Pointer) = (size_t)(Config->File_Current_Size - Config->File_Current_Offset - Buffer_Size);
- return false;
- }
-
- float64 Demux_Rate=Config->Demux_Rate_Get();
- if (!Demux_Rate)
- Demux_Rate=24;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- FrameInfo.DTS=float64_int64s(Frame_Count_NotParsedIncluded*1000000000/Demux_Rate);
- else
- FrameInfo.DTS=(int64u)-1;
- FrameInfo.PTS=FrameInfo.DTS;
- FrameInfo.DUR=float64_int64s(1000000000/Demux_Rate);
- Demux_Offset=Buffer_Size;
- Demux_UnpacketizeContainer_Demux();
-
- return true;
-}
-
-void File__Analyze::Demux_UnpacketizeContainer_Demux_Clear ()
-{
- Demux_TotalBytes=Buffer_TotalBytes+Demux_Offset;
- Demux_Offset=0;
- //if (Frame_Count || Field_Count)
- // Element_End0();
- //Element_Begin1("Frame or Field");
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// IBI
-//***************************************************************************
-#if MEDIAINFO_IBI
-void File__Analyze::Ibi_Read_Buffer_Unsynched ()
-{
- Ibi_SynchronizationOffset_Current=(int64u)-1;
-
- if (IbiStream==NULL)
- return;
-
- IbiStream->Unsynch();
- for (size_t Pos=0; Pos<IbiStream->Infos.size(); Pos++)
- {
- if (File_GoTo==IbiStream->Infos[Pos].StreamOffset)
- {
- FrameInfo.DTS=(IbiStream->Infos[Pos].Dts!=(int64u)-1)?float64_int64s((((float64)IbiStream->Infos[Pos].Dts)*1000000000*IbiStream->DtsFrequencyDenominator/IbiStream->DtsFrequencyNumerator)):(int64u)-1;
- Frame_Count_NotParsedIncluded=IbiStream->Infos[Pos].FrameNumber;
- break;
- }
- }
-}
-
-size_t File__Analyze::Ibi_Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (IbiStream==NULL)
- return (size_t)-1;
-
- //Init
- if (!Seek_Duration_Detected)
- {
- if (!IsSub)
- {
- //External IBI
- std::string IbiFile=Config->Ibi_Get();
- if (!IbiFile.empty())
- {
- IbiStream->Infos.clear(); //TODO: support IBI data from different inputs
-
- File_Ibi MI;
- Open_Buffer_Init(&MI, IbiFile.size());
- MI.Ibi=new ibi;
- MI.Open_Buffer_Continue((const int8u*)IbiFile.c_str(), IbiFile.size());
- (*IbiStream)=(*MI.Ibi->Streams.begin()->second);
- }
- }
-
- Seek_Duration_Detected=true;
- }
-
- //Parsing
- switch (Method)
- {
- case 0 :
- #if MEDIAINFO_IBI
- {
- for (size_t Pos=0; Pos<IbiStream->Infos.size(); Pos++)
- {
- if (Value<=IbiStream->Infos[Pos].StreamOffset)
- {
- if (Value<IbiStream->Infos[Pos].StreamOffset && Pos)
- Pos--;
-
- //Checking continuity of Ibi
- if (!IbiStream->Infos[Pos].IsContinuous && Pos+1<IbiStream->Infos.size())
- {
- Config->Demux_IsSeeking=true;
- GoTo((IbiStream->Infos[Pos].StreamOffset+IbiStream->Infos[Pos+1].StreamOffset)/2);
- Open_Buffer_Unsynch();
-
- return 1;
- }
-
- Config->Demux_IsSeeking=false;
-
- GoTo(IbiStream->Infos[Pos].StreamOffset);
- Open_Buffer_Unsynch();
-
- return 1;
- }
- }
-
- if (IbiStream->Infos.empty())
- {
- GoTo(0);
- Open_Buffer_Unsynch();
- }
- else if (!IbiStream->Infos[IbiStream->Infos.size()-1].IsContinuous)
- {
- GoTo(IbiStream->Infos[IbiStream->Infos.size()-1].StreamOffset);
- Open_Buffer_Unsynch();
- }
- else
- return 2; //Invalid value
- return 1;
- }
- #else //MEDIAINFO_IBI
- return (size_t)-2; //Not supported / IBI disabled
- #endif //MEDIAINFO_IBI
- case 1 :
- return Ibi_Read_Buffer_Seek(0, File_Size*Value/10000, ID);
- case 2 : //Timestamp
- #if MEDIAINFO_IBI
- {
- if (!(IbiStream->DtsFrequencyNumerator==1000000000 && IbiStream->DtsFrequencyDenominator==1))
- {
- float64 ValueF=(float64)Value;
- ValueF/=1000000000; //Value is in ns
- ValueF/=IbiStream->DtsFrequencyDenominator;
- ValueF*=IbiStream->DtsFrequencyNumerator;
- Value=float64_int64s(ValueF);
- }
-
- for (size_t Pos=0; Pos<IbiStream->Infos.size(); Pos++)
- {
- if (Value<=IbiStream->Infos[Pos].Dts)
- {
- if (Value<IbiStream->Infos[Pos].Dts && Pos)
- Pos--;
-
- //Checking continuity of Ibi
- if (!IbiStream->Infos[Pos].IsContinuous && Pos+1<IbiStream->Infos.size())
- {
- Config->Demux_IsSeeking=true;
- GoTo((IbiStream->Infos[Pos].StreamOffset+IbiStream->Infos[Pos+1].StreamOffset)/2);
- Open_Buffer_Unsynch();
-
- return 1;
- }
-
- Config->Demux_IsSeeking=false;
-
- GoTo(IbiStream->Infos[Pos].StreamOffset);
- Open_Buffer_Unsynch();
-
- return 1;
- }
- }
-
- if (IbiStream->Infos.empty())
- {
- GoTo(0);
- Open_Buffer_Unsynch();
- }
- else if (!IbiStream->Infos[IbiStream->Infos.size()-1].IsContinuous)
- {
- GoTo(IbiStream->Infos[IbiStream->Infos.size()-1].StreamOffset);
- Open_Buffer_Unsynch();
- }
- else
- return 2; //Invalid value
- return 1;
- }
- #else //MEDIAINFO_IBI
- return (size_t)-2; //Not supported / IBI disabled
- #endif //MEDIAINFO_IBI
- case 3 : //FrameNumber
- #if MEDIAINFO_IBI
- {
- for (size_t Pos=0; Pos<IbiStream->Infos.size(); Pos++)
- {
- if (Value<=IbiStream->Infos[Pos].FrameNumber)
- {
- if (Value<IbiStream->Infos[Pos].FrameNumber && Pos)
- Pos--;
-
- //Checking continuity of Ibi
- if (!IbiStream->Infos[Pos].IsContinuous && Pos+1<IbiStream->Infos.size())
- {
- Config->Demux_IsSeeking=true;
- GoTo((IbiStream->Infos[Pos].StreamOffset+IbiStream->Infos[Pos+1].StreamOffset)/2);
- Open_Buffer_Unsynch();
-
- return 1;
- }
-
- Config->Demux_IsSeeking=false;
-
- GoTo(IbiStream->Infos[Pos].StreamOffset);
- Open_Buffer_Unsynch();
-
- return 1;
- }
- }
-
- if (IbiStream->Infos.empty())
- {
- GoTo(0);
- Open_Buffer_Unsynch();
- }
- else if (!IbiStream->Infos[IbiStream->Infos.size()-1].IsContinuous)
- {
- GoTo(IbiStream->Infos[IbiStream->Infos.size()-1].StreamOffset);
- Open_Buffer_Unsynch();
- }
- else
- return 2; //Invalid value
- return 1;
- }
- #else //MEDIAINFO_IBI
- return (size_t)-2; //Not supported / IBI disabled
- #endif //MEDIAINFO_IBI
- default : return (size_t)-1; //Not supported
- }
-}
-
-void File__Analyze::Ibi_Stream_Finish ()
-{
- if (IsSub)
- return;
-
- if (!(IbiStream==NULL || IbiStream->Infos.empty()) && File_Offset+Buffer_Size==File_Size)
- {
- ibi::stream::info IbiInfo;
- IbiInfo.StreamOffset=File_Offset+Buffer_Size;
- IbiInfo.FrameNumber=Frame_Count_NotParsedIncluded;
- IbiInfo.Dts=(FrameInfo.DTS!=(int64u)-1)?float64_int64s(((float64)FrameInfo.DTS)/1000000000*IbiStream->DtsFrequencyNumerator/IbiStream->DtsFrequencyDenominator):(int64u)-1;
- IbiInfo.IsContinuous=true;
- IbiStream->Add(IbiInfo);
- }
-
- if (Config_Ibi_Create)
- {
- if (!(IbiStream==NULL || IbiStream->Infos.empty()))
- Ibi.Streams[(int64u)-1]=new ibi::stream(*IbiStream);
-
- //Inform_Data
- ZtringListList Content;
- for (size_t StreamKind=Stream_General; StreamKind<Stream_Max; ++StreamKind)
- {
- ZtringListList Source=MediaInfoLib::Config.Info_Get((stream_t)StreamKind);
-
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); ++StreamPos)
- {
- ZtringList KindAndPos;
- KindAndPos.push_back(Get((stream_t)StreamKind, StreamPos, __T("StreamKind")));
- Content.push_back(KindAndPos);
-
- //Standard
- for (size_t Pos=0; Pos<Source.size(); ++Pos)
- {
- Ztring &Options=Source[Pos](Info_Options);
- if (InfoOption_ShowInSupported<Options.size() && Options[InfoOption_ShowInSupported]==__T('Y') && Pos<(*Stream)[StreamKind][StreamPos].size() && !(*Stream)[StreamKind][StreamPos][Pos].empty())
- {
- ZtringList Line;
- Line.push_back(Source[Pos][Info_Name]);
- Line.push_back((*Stream)[StreamKind][StreamPos][Pos]);
- Content.push_back(Line);
- }
- }
-
- //Additional
- for (size_t Pos=0; Pos<(*Stream_More)[StreamKind][StreamPos].size(); ++Pos)
- {
- ZtringList Line=(*Stream_More)[StreamKind][StreamPos][Pos];
- Line.resize(Info_Options+1);
- Content.push_back(Line);
- }
-
- //Separator
- Content.push_back(Ztring());
- }
- }
- if (!Content.empty())
- Content.resize(Content.size()-1);
- Ibi.Inform_Data=Content.Read();
-
- //IBI Creation
- File_Ibi_Creation IbiCreation(Ibi);
- Ztring IbiText=IbiCreation.Finish();
- if (!IbiText.empty())
- {
- Fill(Stream_General, 0, "IBI", IbiText);
- (*Stream_More)[Stream_General][0]("IBI", Info_Options)=__T("N NT");
- }
- }
-}
-
-void File__Analyze::Ibi_Stream_Finish (int64u Numerator, int64u Denominator)
-{
- if (IsSub || IbiStream==NULL)
- return;
-
- if (IbiStream->DtsFrequencyNumerator==1000000000 && IbiStream->DtsFrequencyDenominator==1 && !IbiStream->Infos.empty())
- {
- IbiStream->DtsFrequencyNumerator=Numerator;
- IbiStream->DtsFrequencyDenominator=Denominator;
- for (size_t Pos=0; Pos<IbiStream->Infos.size(); Pos++)
- if (IbiStream->Infos[Pos].Dts!=(int64u)-1)
- IbiStream->Infos[Pos].Dts=float64_int64s(((float64)IbiStream->Infos[Pos].Dts)/1000000000/Denominator*Numerator);
- }
-}
-
-void File__Analyze::Ibi_Add ()
-{
- if (IbiStream==NULL)
- return;
-
- ibi::stream::info IbiInfo;
- IbiInfo.StreamOffset=IsSub?Ibi_SynchronizationOffset_Current:(File_Offset+Buffer_Offset);
- IbiInfo.FrameNumber=Frame_Count_NotParsedIncluded;
- IbiInfo.Dts=FrameInfo.DTS;
- IbiStream->Add(IbiInfo);
-
- if (Frame_Count_NotParsedIncluded==(int64u)-1)
- Frame_Count_NotParsedIncluded=IbiStream->Infos[IbiStream->Infos_Pos-1].FrameNumber;
-}
-
-#endif //MEDIAINFO_IBI
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze.h b/src/thirdparty/MediaInfo/MediaInfo/File__Analyze.h
deleted file mode 100644
index d28a56326..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze.h
+++ /dev/null
@@ -1,1514 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File__AnalyzeH
-#define MediaInfo_File__AnalyzeH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Base.h"
-#include "MediaInfo/File__Analyse_Automatic.h"
-#include "ZenLib/BitStream_Fast.h"
-#include "ZenLib/BitStream_LE.h"
-#if MEDIAINFO_IBI
- #include "MediaInfo/Multiple/File_Ibi_Creation.h"
-#endif //MEDIAINFO_IBI
-#include "tinyxml2.h"
-#if MEDIAINFO_AES
- #include <aescpp.h>
-#endif //MEDIAINFO_AES
-#if MEDIAINFO_MD5
- extern "C"
- {
- #include <md5.h>
- }
-#endif //MEDIAINFO_MD5
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class MediaInfo_Internal;
-
-#if !MEDIAINFO_TRACE
- #include "MediaInfo/File__Analyze_MinimizeSize.h"
-#else
-
-//***************************************************************************
-// Class File__Base
-//***************************************************************************
-
-class File__Analyze : public File__Base
-{
-public :
- //***************************************************************************
- // Constructor/Destructor
- //***************************************************************************
-
- File__Analyze();
- virtual ~File__Analyze();
-
- //***************************************************************************
- // Open
- //***************************************************************************
-
- void Open_Buffer_Init ( int64u File_Size);
- void Open_Buffer_Init (File__Analyze* Sub);
- void Open_Buffer_Init (File__Analyze* Sub, int64u File_Size);
- void Open_Buffer_Continue ( const int8u* Buffer, size_t Buffer_Size);
- void Open_Buffer_Continue (File__Analyze* Sub, const int8u* Buffer, size_t Buffer_Size, bool IsNewPacket=true, float64 Ratio=1.0);
- void Open_Buffer_Continue (File__Analyze* Sub, size_t Buffer_Size) {if (Element_Offset+Buffer_Size<=Element_Size) Open_Buffer_Continue(Sub, Buffer+Buffer_Offset+(size_t)Element_Offset, Buffer_Size); Element_Offset+=Buffer_Size;}
- void Open_Buffer_Continue (File__Analyze* Sub) {if (Element_Offset<=Element_Size) Open_Buffer_Continue(Sub, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset)); Element_Offset=Element_Size;}
- void Open_Buffer_Position_Set(int64u File_Offset);
- #if MEDIAINFO_SEEK
- size_t Open_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- #if MEDIAINFO_ADVANCED2
- void Open_Buffer_SegmentChange();
- #endif //MEDIAINFO_ADVANCED2
- void Open_Buffer_Update ();
- void Open_Buffer_Update (File__Analyze* Sub);
- void Open_Buffer_Unsynch ();
- void Open_Buffer_Finalize (bool NoBufferModification=false);
- void Open_Buffer_Finalize (File__Analyze* Sub);
-
- //***************************************************************************
- // In/Out (for parsers)
- //***************************************************************************
-
- //In
- Ztring ParserName;
- #if MEDIAINFO_EVENTS
- size_t StreamIDs_Size;
- int64u StreamIDs[16];
- int8u StreamIDs_Width[16];
- int8u ParserIDs[16];
- void Event_Prepare (struct MediaInfo_Event_Generic* Event);
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- int8u Demux_Level; //bit 0=frame, bit 1=container, bit 2=elementary (eg MPEG-TS), bit 3=ancillary (e.g. DTVCC), default with frame set
- bool Demux_random_access;
- bool Demux_UnpacketizeContainer;
- bool Demux_IntermediateItemFound;
- size_t Demux_Offset;
- int64u Demux_TotalBytes;
- File__Analyze* Demux_CurrentParser;
- #endif //MEDIAINFO_DEMUX
- Ztring File_Name_WithoutDemux;
- bool PTS_DTS_Needed;
- struct frame_info
- {
- int64u Buffer_Offset_End;
- int64u PCR; //In nanoseconds
- int64u PTS; //In nanoseconds
- int64u DTS; //In nanoseconds
- int64u DUR; //In nanoseconds
-
- frame_info()
- {
- Buffer_Offset_End=(int64u)-1;
- PCR=(int64u)-1;
- PTS=(int64u)-1;
- DTS=(int64u)-1;
- DUR=(int64u)-1;
- }
- };
- frame_info FrameInfo;
- frame_info FrameInfo_Previous;
- frame_info FrameInfo_Next;
- std::vector<int64u> Offsets_Stream;
- std::vector<int64u> Offsets_Buffer;
- size_t Offsets_Pos;
- int8u* OriginalBuffer;
- size_t OriginalBuffer_Size;
- size_t OriginalBuffer_Capacity;
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- struct servicedescriptor
- {
- string language;
- };
- typedef std::map<int8u, servicedescriptor> servicedescriptors608;
- typedef std::map<int8u, servicedescriptor> servicedescriptors708;
- struct servicedescriptors
- {
- #if defined(MEDIAINFO_EIA608_YES)
- std::map<int8u, servicedescriptor> ServiceDescriptors608;
- #endif
- #if defined(MEDIAINFO_EIA708_YES)
- std::map<int8u, servicedescriptor> ServiceDescriptors708;
- #endif
- };
- servicedescriptors* ServiceDescriptors;
- #endif
-
- //Out
- int64u PTS_Begin; //In nanoseconds
- #if MEDIAINFO_ADVANCED2
- int64u PTS_Begin_Segment; //In nanoseconds
- #endif //MEDIAINFO_ADVANCED2
- int64u PTS_End; //In nanoseconds
- int64u DTS_Begin; //In nanoseconds
- int64u DTS_End; //In nanoseconds
- int64u Frame_Count;
- int64u Frame_Count_Previous;
- int64u Frame_Count_InThisBlock;
- int64u Field_Count;
- int64u Field_Count_Previous;
- int64u Field_Count_InThisBlock;
- int64u Frame_Count_NotParsedIncluded;
- int64u FrameNumber_PresentationOrder;
- bool Synched; //Data is synched
- bool UnSynched_IsNotJunk; //Data is actually synched
- bool MustExtendParsingDuration; //Data has some substreams difficult to detect (e.g. captions), must wait a bit before final filling
-
-protected :
- //***************************************************************************
- // Streams management
- //***************************************************************************
-
- virtual void Streams_Accept() {};
- virtual void Streams_Fill() {};
- virtual void Streams_Update() {};
- virtual void Streams_Finish() {};
-
- //***************************************************************************
- // Synchro
- //***************************************************************************
-
- virtual bool Synchronize() {Synched=true; return true;}; //Look for the synchro
- virtual bool Synched_Test() {return true;}; //Test is synchro is OK
- virtual void Synched_Init() {}; //When synched, we can Init data
- bool Synchro_Manage();
- bool Synchro_Manage_Test();
-
- //***************************************************************************
- // Buffer
- //***************************************************************************
-
- //Buffer
- virtual void Read_Buffer_Init () {}; //Temp, should be in File__Base caller
- virtual void Read_Buffer_Continue () {}; //Temp, should be in File__Base caller
- virtual void Read_Buffer_AfterParsing () {}; //Temp, should be in File__Base caller
- #if MEDIAINFO_SEEK
- virtual size_t Read_Buffer_Seek (size_t, int64u, int64u); //Temp, should be in File__Base caller
- size_t Read_Buffer_Seek_OneFramePerFile (size_t, int64u, int64u);
- #endif //MEDIAINFO_SEEK
- #if MEDIAINFO_ADVANCED2
- virtual void Read_Buffer_SegmentChange () {}; //Temp, should be in File__Base caller
- #endif //MEDIAINFO_ADVANCED2
- virtual void Read_Buffer_Unsynched () {}; //Temp, should be in File__Base caller
- void Read_Buffer_Unsynched_OneFramePerFile ();
- virtual void Read_Buffer_Finalize () {}; //Temp, should be in File__Base caller
- bool Buffer_Parse();
-
- //***************************************************************************
- // BitStream init
- //***************************************************************************
-
- void BS_Begin();
- void BS_Begin_LE(); //Little Endian version
- void BS_End();
- void BS_End_LE(); //Little Endian version
-
- //***************************************************************************
- // File Header
- //***************************************************************************
-
- //File Header - Management
- bool FileHeader_Manage ();
-
- //File Header - Begin
- virtual bool FileHeader_Begin () {return true;};
-
- //File Header - Parse
- virtual void FileHeader_Parse () {Element_DoNotShow();};
-
- //***************************************************************************
- // Header
- //***************************************************************************
-
- //Header - Management
- bool Header_Manage ();
-
- //Header - Begin
- virtual bool Header_Begin () {return true;};
-
- //Header - Parse
- virtual void Header_Parse ();
-
- //Header - Info
- void Header_Fill_Code (int64u Code);
- void Header_Fill_Code (int64u Code, const Ztring &Name);
- #define Header_Fill_Code2(A,B) Header_Fill_Code(A,B)
- void Header_Fill_Size (int64u Size);
-
- //***************************************************************************
- // Data
- //***************************************************************************
-
- //Header - Management
- bool Data_Manage ();
-
- //Data - Parse
- virtual void Data_Parse () {};
-
- //Data - Info
- void Data_Info (const Ztring &Parameter);
- inline void Data_Info_From_Milliseconds (int64u Parameter) {Data_Info(Ztring().Duration_From_Milliseconds(Parameter));}
-
- //Data - Get info
- size_t Data_Remain () {return (size_t)(Element_Size-(Element_Offset+BS->Offset_Get()));};
- size_t Data_BS_Remain () {return (size_t)BS->Remain();};
-
- //Data - Detect EOF
- virtual void Detect_EOF () {};
- bool EOF_AlreadyDetected;
-
- //Data - Helpers
- void Data_Accept (const char* ParserName);
- void Data_Reject (const char* ParserName);
- void Data_Finish (const char* ParserName);
- void Data_GoTo (int64u GoTo, const char* ParserName);
- void Data_GoToFromEnd (int64u GoToFromEnd, const char* ParserName);
-
- //***************************************************************************
- // Elements
- //***************************************************************************
-
- //Elements - Begin
- void Element_Begin ();
- void Element_Begin (const Ztring &Name);
- inline void Element_Begin (const char *Name) {Element_Begin(Ztring().From_UTF8(Name));}
- #define Element_Begin0() Element_Begin()
- #define Element_Begin1(_NAME) Element_Begin(_NAME)
- #define Element_Trace_Begin0() Element_Begin()
- #define Element_Trace_Begin1(_NAME) Element_Begin(_NAME)
-
- //Elements - Name
- void Element_Name (const Ztring &Name);
- inline void Element_Name (const char* Name) {Element_Name(Ztring().From_UTF8(Name));}
-
- //Elements - Info
- void Element_Info (const Ztring &Parameter);
- inline void Element_Info (const char* Parameter) {Element_Info(Ztring().From_UTF8(Parameter));}
- inline void Element_Info (const char* Parameter, const char* Measure) {Element_Info(Ztring().From_UTF8(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (int8s Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (int8u Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (int16s Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (int16u Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (int32s Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (int32u Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (int64s Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (int64u Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (int128u Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- #ifdef SIZE_T_IS_LONG
- inline void Element_Info (size_t Parameter, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- #endif //SIZE_T_IS_LONG
- inline void Element_Info (float32 Parameter, int8u AfterComma=3, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter, AfterComma)+Ztring().From_UTF8(Measure));}
- inline void Element_Info (float64 Parameter, int8u AfterComma=3, const char* Measure=NULL) {Element_Info(Ztring::ToZtring(Parameter, AfterComma)+Ztring().From_UTF8(Measure));}
- #define Element_Info1(_A) Element_Info(_A)
- #define Element_Info2(_A,_B) Element_Info(_A, _B)
- #define Element_Info3(_A,_B,_C) Element_Info(_A, _B, _C)
- #define Element_Info1C(_CONDITION,_A) if (_CONDITION) Element_Info(_A)
- inline void Element_Info_From_Milliseconds (int64u Parameter) {Element_Info(Ztring().Duration_From_Milliseconds(Parameter));}
-
- //Elements - End
- inline void Element_End () {Element_End_Common_Flush();}
- void Element_End (const Ztring &Name);
- inline void Element_End (const char *Name) {Element_End(Ztring().From_UTF8(Name));}
- #define Element_End0() Element_End()
- #define Element_End1(_NAME) Element_End(_NAME)
- #define Element_Trace_End0() Element_End()
- #define Element_Trace_End1(_NAME) Element_End(_NAME)
-
- //Elements - Preparation of element from external app
- void Element_Prepare (int64u Size);
-
-protected :
- //Element - Common
- void Element_End_Common_Flush();
- void Element_End_Common_Flush_Details();
- Ztring Element_End_Common_Flush_Build();
-public :
-
- //***************************************************************************
- // Param
- //***************************************************************************
-
- //TODO: put this in Ztring()
- Ztring ToZtring(const char* Value, size_t Value_Size=Unlimited, bool Utf8=true)
- {
- if (Utf8)
- return Ztring().From_UTF8(Value, Value_Size);
- else
- return Ztring().From_Local(Value, Value_Size);
- }
- #define VALUE(Value) \
- Ztring::ToZtring(Value).MakeUpperCase()+__T(" (0x")+Ztring::ToZtring(Value, 16).MakeUpperCase()+__T(")")
-
- //Param - Main
- void Param (const Ztring &Parameter, const Ztring& Value);
- inline void Param (const char* Parameter, const Ztring& Value) {Param(Ztring().From_Local(Parameter), Value);};
- inline void Param (const char* Parameter, const std::string& Value) {Param(Parameter, Ztring().From_Local(Value.c_str()));}
- inline void Param (const char* Parameter, const char* Value, size_t Value_Size=Unlimited, bool Utf8=true) {Param(Parameter, ToZtring(Value, Value_Size, Utf8));}
- inline void Param (const char* Parameter, const int8u* Value, size_t Value_Size=Unlimited, bool Utf8=true) {Param(Parameter, (const char*)Value, Value_Size, Utf8);}
- inline void Param (const char* Parameter, bool Value) {if (Value) Param(Parameter, "Yes"); else Param(Parameter, "No");}
- inline void Param (const char* Parameter, int8u Value) {Param(Parameter, Ztring::ToZtring(Value)+__T(" (0x")+Ztring().From_CC1(Value)+__T(")"));}
- inline void Param (const char* Parameter, int8s Value) {Param(Parameter, Ztring::ToZtring(Value)+__T(" (0x")+Ztring().From_CC1(Value)+__T(")"));}
- inline void Param (const char* Parameter, int16u Value) {Param(Parameter, Ztring::ToZtring(Value)+__T(" (0x")+Ztring().From_CC2(Value)+__T(")"));}
- inline void Param (const char* Parameter, int16s Value) {Param(Parameter, Ztring::ToZtring(Value)+__T(" (0x")+Ztring().From_CC2(Value)+__T(")"));}
- inline void Param (const char* Parameter, int32u Value) {Param(Parameter, Ztring::ToZtring(Value)+__T(" (0x")+Ztring::ToZtring(Value, 16)+__T(")"));}
- inline void Param (const char* Parameter, int32s Value) {Param(Parameter, Ztring::ToZtring(Value)+__T(" (0x")+Ztring::ToZtring(Value, 16)+__T(")"));}
- inline void Param (const char* Parameter, int64u Value) {Param(Parameter, Ztring::ToZtring(Value)+__T(" (0x")+Ztring::ToZtring(Value, 16)+__T(")"));}
- inline void Param (const char* Parameter, int64s Value) {Param(Parameter, Ztring::ToZtring(Value)+__T(" (0x")+Ztring::ToZtring(Value, 16)+__T(")"));}
- inline void Param (const char* Parameter, int128u Value){Param(Parameter, Ztring::ToZtring(Value)+__T(" (0x")+Ztring::ToZtring(Value, 16)+__T(")"));}
- inline void Param_GUID (const char* Parameter, int128u Value){Param(Parameter, Ztring().From_GUID(Value));}
- inline void Param_UUID (const char* Parameter, int128u Value){Param(Parameter, Ztring().From_UUID(Value));}
- #ifdef SIZE_T_IS_LONG
- inline void Param (const char* Parameter, size_t Value, intu Radix=16) {Param(Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase()+__T(" (")+Ztring::ToZtring(Value, 10).MakeUpperCase()+__T(")"));}
- #endif //SIZE_T_IS_LONG
- inline void Param (const char* Parameter, float32 Value, int8u AfterComma=3) {Param(Parameter, Ztring::ToZtring(Value, AfterComma));}
- inline void Param (const char* Parameter, float64 Value, int8u AfterComma=3) {Param(Parameter, Ztring::ToZtring(Value, AfterComma));}
- inline void Param (const char* Parameter, float80 Value, int8u AfterComma=3) {Param(Parameter, Ztring::ToZtring(Value, AfterComma));}
- inline void Param (const int32u Parameter, const Ztring& Value) {Param(Ztring().From_CC4(Parameter), Value);};
- inline void Param (const int16u Parameter, const Ztring& Value) {Param(Ztring().From_CC2(Parameter), Value);};
- #define Param1(_A) Param_(_A)
- #define Param2(_A,_B) Param(_A, _B)
- #define Param3(_A,_B,_C) Param(_A, _B, _C)
-
- //Param - Info
- void Param_Info (const Ztring &Parameter);
- inline void Param_Info (const char* Parameter) {Param_Info(Ztring().From_UTF8(Parameter));}
- inline void Param_Info (const char* Parameter, const char* Measure) {Param_Info(Ztring().From_UTF8(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (int64u Parameter, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (int64s Parameter, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (int32u Parameter, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (int32s Parameter, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (int16u Parameter, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (int16s Parameter, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (int8u Parameter, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (int8s Parameter, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (float32 Parameter, int8u AfterComma=3, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter, AfterComma)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (float64 Parameter, int8u AfterComma=3, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter, AfterComma)+Ztring().From_UTF8(Measure));}
- inline void Param_Info (float80 Parameter, int8u AfterComma=3, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter, AfterComma)+Ztring().From_UTF8(Measure));}
- #ifdef SIZE_T_IS_LONG
- inline void Param_Info (size_t Parameter, const char* Measure=NULL) {Param_Info(Ztring::ToZtring(Parameter)+Ztring().From_UTF8(Measure));}
- #endif //SIZE_T_IS_LONG
- #define Param_Info1(_A) Param_Info(_A)
- #define Param_Info2(_A,_B) Param_Info(_A, _B)
- #define Param_Info3(_A,_B,_C) Param_Info(_A, _B, _C)
- #define Param_Info1C(_CONDITION,_A) if (_CONDITION) Param_Info(_A)
- #define Param_Info2C(_CONDITION,_A,_B) if (_CONDITION) Param_Info(_A, _B)
- #define Param_Info3C(_CONDITION,_A,_B,_C) if (_CONDITION) Param_Info(_A, _B, _C)
- inline void Param_Info_From_Milliseconds (int64u Parameter) {Param_Info(Ztring().Duration_From_Milliseconds(Parameter));}
-
- //***************************************************************************
- // Information
- //***************************************************************************
-
- void Info (const Ztring& Value, size_t Element_Level_Minus=0);
-
- //***************************************************************************
- // Big Endian (Integer, Float, Fixed-Point)
- //***************************************************************************
-
- void Get_B1 (int8u &Info, const char* Name);
- void Get_B2 (int16u &Info, const char* Name);
- void Get_B3 (int32u &Info, const char* Name);
- void Get_B4 (int32u &Info, const char* Name);
- void Get_B5 (int64u &Info, const char* Name);
- void Get_B6 (int64u &Info, const char* Name);
- void Get_B7 (int64u &Info, const char* Name);
- void Get_B8 (int64u &Info, const char* Name);
- void Get_B16 (int128u &Info, const char* Name);
- void Get_BF4 (float32 &Info, const char* Name);
- void Get_BF8 (float64 &Info, const char* Name);
- void Get_BF10 (float80 &Info, const char* Name);
- void Get_BFP4 (int8u Bits, float32 &Info, const char* Name);
- void Peek_B1 (int8u &Info);
- void Peek_B2 (int16u &Info);
- void Peek_B3 (int32u &Info);
- void Peek_B4 (int32u &Info);
- void Peek_B5 (int64u &Info);
- void Peek_B6 (int64u &Info);
- void Peek_B7 (int64u &Info);
- void Peek_B8 (int64u &Info);
- void Peek_B16 (int128u &Info);
- void Peek_BF4 (float32 &Info);
- void Peek_BF8 (float64 &Info);
- void Peek_BF10(float64 &Info);
- void Peek_BFP4(size_t Bits, float64 &Info);
- void Skip_B1 ( const char* Name);
- void Skip_B2 ( const char* Name);
- void Skip_B3 ( const char* Name);
- void Skip_B4 ( const char* Name);
- void Skip_B5 ( const char* Name);
- void Skip_B6 ( const char* Name);
- void Skip_B7 ( const char* Name);
- void Skip_B8 ( const char* Name);
- void Skip_B16 ( const char* Name);
- void Skip_BF4 ( const char* Name);
- void Skip_BF8 ( const char* Name);
- void Skip_BF10( const char* Name);
- void Skip_BFP4(int8u Bits, const char* Name);
- #define Info_B1(_INFO, _NAME) int8u _INFO; Get_B1 (_INFO, _NAME)
- #define Info_B2(_INFO, _NAME) int16u _INFO; Get_B2 (_INFO, _NAME)
- #define Info_B3(_INFO, _NAME) int32u _INFO; Get_B3 (_INFO, _NAME)
- #define Info_B4(_INFO, _NAME) int32u _INFO; Get_B4 (_INFO, _NAME)
- #define Info_B5(_INFO, _NAME) int64u _INFO; Get_B5 (_INFO, _NAME)
- #define Info_B6(_INFO, _NAME) int64u _INFO; Get_B6 (_INFO, _NAME)
- #define Info_B7(_INFO, _NAME) int64u _INFO; Get_B7 (_INFO, _NAME)
- #define Info_B8(_INFO, _NAME) int64u _INFO; Get_B8 (_INFO, _NAME)
- #define Info_B16(_INFO, _NAME) int128u _INFO; Get_B16 (_INFO, _NAME)
- #define Info_BF4(_INFO, _NAME) float32 _INFO; Get_BF4 (_INFO, _NAME)
- #define Info_BF8(_INFO, _NAME) float64 _INFO; Get_BF8 (_INFO, _NAME)
- #define Info_BF10(_INFO, _NAME) float80 _INFO; Get_BF10(_INFO, _NAME)
- #define Info_BFP4(_BITS, _INFO, _NAME) float32 _INFO; Get_BFP4(_BITS, _INFO, _NAME)
-
- //***************************************************************************
- // Little Endian
- //***************************************************************************
-
- void Get_L1 (int8u &Info, const char* Name);
- void Get_L2 (int16u &Info, const char* Name);
- void Get_L3 (int32u &Info, const char* Name);
- void Get_L4 (int32u &Info, const char* Name);
- void Get_L5 (int64u &Info, const char* Name);
- void Get_L6 (int64u &Info, const char* Name);
- void Get_L7 (int64u &Info, const char* Name);
- void Get_L8 (int64u &Info, const char* Name);
- void Get_L16 (int128u &Info, const char* Name);
- void Get_LF4 (float32 &Info, const char* Name);
- void Get_LF8 (float64 &Info, const char* Name);
- void Peek_L1 (int8u &Info);
- void Peek_L2 (int16u &Info);
- void Peek_L3 (int32u &Info);
- void Peek_L4 (int32u &Info);
- void Peek_L5 (int64u &Info);
- void Peek_L6 (int64u &Info);
- void Peek_L7 (int64u &Info);
- void Peek_L8 (int64u &Info);
- void Peek_L16(int128u &Info);
- void Peek_LF4(float32 &Info);
- void Peek_LF8(float64 &Info);
- void Skip_L1 ( const char* Name);
- void Skip_L2 ( const char* Name);
- void Skip_L3 ( const char* Name);
- void Skip_L4 ( const char* Name);
- void Skip_L5 ( const char* Name);
- void Skip_L6 ( const char* Name);
- void Skip_L7 ( const char* Name);
- void Skip_L8 ( const char* Name);
- void Skip_LF4( const char* Name);
- void Skip_LF8( const char* Name);
- void Skip_L16( const char* Name);
- #define Info_L1(_INFO, _NAME) int8u _INFO; Get_L1 (_INFO, _NAME)
- #define Info_L2(_INFO, _NAME) int16u _INFO; Get_L2 (_INFO, _NAME)
- #define Info_L3(_INFO, _NAME) int32u _INFO; Get_L3 (_INFO, _NAME)
- #define Info_L4(_INFO, _NAME) int32u _INFO; Get_L4 (_INFO, _NAME)
- #define Info_L5(_INFO, _NAME) int64u _INFO; Get_L5 (_INFO, _NAME)
- #define Info_L6(_INFO, _NAME) int64u _INFO; Get_L6 (_INFO, _NAME)
- #define Info_L7(_INFO, _NAME) int64u _INFO; Get_L7 (_INFO, _NAME)
- #define Info_L8(_INFO, _NAME) int64u _INFO; Get_L8 (_INFO, _NAME)
- #define Info_L16(_INFO, _NAME) int128u _INFO; Get_L16(_INFO, _NAME)
- #define Info_LF4(_INFO, _NAME) float32 _INFO; Get_LF4(_INFO, _NAME)
- #define Info_LF8(_INFO, _NAME) float64 _INFO; Get_LF8(_INFO, _NAME)
-
- //***************************************************************************
- // Little and Big Endian together
- //***************************************************************************
-
- void Get_D1 (int8u &Info, const char* Name);
- void Get_D2 (int16u &Info, const char* Name);
- void Get_D3 (int32u &Info, const char* Name);
- void Get_D4 (int32u &Info, const char* Name);
- void Get_D5 (int64u &Info, const char* Name);
- void Get_D6 (int64u &Info, const char* Name);
- void Get_D7 (int64u &Info, const char* Name);
- void Get_D8 (int64u &Info, const char* Name);
- void Get_D16 (int128u &Info, const char* Name);
- void Get_DF4 (float32 &Info, const char* Name);
- void Get_DF8 (float64 &Info, const char* Name);
- void Peek_D1 (int8u &Info);
- void Peek_D2 (int16u &Info);
- void Peek_D3 (int32u &Info);
- void Peek_D4 (int32u &Info);
- void Peek_D5 (int64u &Info);
- void Peek_D6 (int64u &Info);
- void Peek_D7 (int64u &Info);
- void Peek_D8 (int64u &Info);
- void Peek_D16(int128u &Info);
- void Peek_DF4(float32 &Info);
- void Peek_DF8(float64 &Info);
- void Skip_D1 ( const char* Name);
- void Skip_D2 ( const char* Name);
- void Skip_D3 ( const char* Name);
- void Skip_D4 ( const char* Name);
- void Skip_D5 ( const char* Name);
- void Skip_D6 ( const char* Name);
- void Skip_D7 ( const char* Name);
- void Skip_D8 ( const char* Name);
- void Skip_DF4( const char* Name);
- void Skip_DF8( const char* Name);
- void Skip_D16( const char* Name);
- #define Info_D1(_INFO, _NAME) int8u _INFO; Get_D1 (_INFO, _NAME)
- #define Info_D2(_INFO, _NAME) int16u _INFO; Get_D2 (_INFO, _NAME)
- #define Info_D3(_INFO, _NAME) int32u _INFO; Get_D3 (_INFO, _NAME)
- #define Info_D4(_INFO, _NAME) int32u _INFO; Get_D4 (_INFO, _NAME)
- #define Info_D5(_INFO, _NAME) int64u _INFO; Get_D5 (_INFO, _NAME)
- #define Info_D6(_INFO, _NAME) int64u _INFO; Get_D6 (_INFO, _NAME)
- #define Info_D7(_INFO, _NAME) int64u _INFO; Get_D7 (_INFO, _NAME)
- #define Info_D8(_INFO, _NAME) int64u _INFO; Get_D8 (_INFO, _NAME)
- #define Info_D16(_INFO, _NAME) int128u _INFO; Get_D16(_INFO, _NAME)
- #define Info_DF4(_INFO, _NAME) float32 _INFO; Get_DF4(_INFO, _NAME)
- #define Info_DF8(_INFO, _NAME) float64 _INFO; Get_DF8(_INFO, _NAME)
-
- //***************************************************************************
- // GUID
- //***************************************************************************
-
- void Get_GUID (int128u &Info, const char* Name);
- void Peek_GUID(int128u &Info);
- void Skip_GUID( const char* Name);
- #define Info_GUID(_INFO, _NAME) int128u _INFO; Get_GUID(_INFO, _NAME)
-
- //***************************************************************************
- // UUID
- //***************************************************************************
-
- void Get_UUID (int128u &Info, const char* Name);
- void Peek_UUID(int128u &Info);
- void Skip_UUID( const char* Name);
- #define Info_UUID(_INFO, _NAME) int128u _INFO; Get_UUID(_INFO, _NAME)
-
- //***************************************************************************
- // EBML
- //***************************************************************************
-
- void Get_EB (int64u &Info, const char* Name);
- void Get_ES (int64s &Info, const char* Name);
- void Skip_EB( const char* Name);
- void Skip_ES( const char* Name);
- #define Info_EB(_INFO, _NAME) int64u _INFO; Get_EB(_INFO, _NAME)
- #define Info_ES(_INFO, _NAME) int64s _INFO; Get_ES(_INFO, _NAME)
-
- //***************************************************************************
- // Variable Size Value
- //***************************************************************************
-
- void Get_VS (int64u &Info, const char* Name);
- void Skip_VS( const char* Name);
- #define Info_VS(_INFO, _NAME) int64u _INFO; Get_VS(_INFO, _NAME)
-
- //***************************************************************************
- // Exp-Golomb
- //***************************************************************************
-
- void Get_UE (int32u &Info, const char* Name);
- void Get_SE (int32s &Info, const char* Name);
- void Skip_UE( const char* Name);
- void Skip_SE( const char* Name);
- #define Info_UE(_INFO, _NAME) int32u _INFO; Get_UE(_INFO, _NAME)
- #define Info_SE(_INFO, _NAME) int32s _INFO; Get_SE(_INFO, _NAME)
-
- //***************************************************************************
- // Interleaved Exp-Golomb
- //***************************************************************************
-
- void Get_UI (int32u &Info, const char* Name);
- void Get_SI (int32s &Info, const char* Name);
- void Skip_UI( const char* Name);
- void Skip_SI( const char* Name);
- #define Info_UI(_INFO, _NAME) int32u _INFO; Get_UI(_INFO, _NAME)
- #define Info_SI(_INFO, _NAME) int32s _INFO; Get_SI(_INFO, _NAME)
-
- //***************************************************************************
- // Variable Length Code
- //***************************************************************************
-
- struct vlc
- {
- int32u value;
- int8u bit_increment;
- int8s mapped_to1;
- int8s mapped_to2;
- int8s mapped_to3;
- };
- struct vlc_fast
- {
- int8u* Array;
- int8u* BitsToSkip;
- const vlc* Vlc;
- int8u Size;
- };
- #define VLC_END \
- {(int32u)-1, (int8u)-1, 0, 0, 0}
- void Get_VL_Prepare(vlc_fast &Vlc);
- void Get_VL (const vlc Vlc[], size_t &Info, const char* Name);
- void Get_VL (vlc_fast &Vlc, size_t &Info, const char* Name);
- void Skip_VL(const vlc Vlc[], const char* Name);
- void Skip_VL(vlc_fast &Vlc, const char* Name);
- #define Info_VL(Vlc, Info, Name) size_t Info; Get_VL(Vlc, Info, Name)
-
- //***************************************************************************
- // Characters
- //***************************************************************************
-
- void Get_C1 (int8u &Info, const char* Name);
- void Get_C2 (int16u &Info, const char* Name);
- void Get_C3 (int32u &Info, const char* Name);
- void Get_C4 (int32u &Info, const char* Name);
- void Get_C5 (int64u &Info, const char* Name);
- void Get_C6 (int64u &Info, const char* Name);
- void Get_C7 (int64u &Info, const char* Name);
- void Get_C8 (int64u &Info, const char* Name);
- void Skip_C1( const char* Name);
- void Skip_C2( const char* Name);
- void Skip_C3( const char* Name);
- void Skip_C4( const char* Name);
- void Skip_C5( const char* Name);
- void Skip_C6( const char* Name);
- void Skip_C7( const char* Name);
- void Skip_C8( const char* Name);
- #define Info_C1(_INFO, _NAME) int8u _INFO; Get_C1(_INFO, _NAME)
- #define Info_C2(_INFO, _NAME) int16u _INFO; Get_C2(_INFO, _NAME)
- #define Info_C3(_INFO, _NAME) int32u _INFO; Get_C3(_INFO, _NAME)
- #define Info_C4(_INFO, _NAME) int32u _INFO; Get_C4(_INFO, _NAME)
- #define Info_C5(_INFO, _NAME) int64u _INFO; Get_C5(_INFO, _NAME)
- #define Info_C6(_INFO, _NAME) int64u _INFO; Get_C6(_INFO, _NAME)
- #define Info_C7(_INFO, _NAME) int64u _INFO; Get_C7(_INFO, _NAME)
- #define Info_C8(_INFO, _NAME) int64u _INFO; Get_C8(_INFO, _NAME)
-
- //***************************************************************************
- // Text
- //***************************************************************************
-
- void Get_Local (int64u Bytes, Ztring &Info, const char* Name);
- void Get_ISO_6937_2(int64u Bytes, Ztring &Info, const char* Name);
- void Get_ISO_8859_1(int64u Bytes, Ztring &Info, const char* Name);
- void Get_ISO_8859_2(int64u Bytes, Ztring &Info, const char* Name);
- void Get_ISO_8859_5(int64u Bytes, Ztring &Info, const char* Name);
- void Get_String (int64u Bytes, std::string &Info, const char* Name);
- void Get_UTF8 (int64u Bytes, Ztring &Info, const char* Name);
- void Get_UTF16 (int64u Bytes, Ztring &Info, const char* Name);
- void Get_UTF16B (int64u Bytes, Ztring &Info, const char* Name);
- void Get_UTF16L (int64u Bytes, Ztring &Info, const char* Name);
- void Peek_Local (int64u Bytes, Ztring &Info);
- void Peek_String(int64u Bytes, std::string &Info);
- void Skip_Local (int64u Bytes, const char* Name);
- void Skip_ISO_6937_2(int64u Bytes, const char* Name);
- void Skip_String(int64u Bytes, const char* Name);
- void Skip_UTF8 (int64u Bytes, const char* Name);
- void Skip_UTF16B(int64u Bytes, const char* Name);
- void Skip_UTF16L(int64u Bytes, const char* Name);
- #define Info_Local(_BYTES, _INFO, _NAME) Ztring _INFO; Get_Local (_BYTES, _INFO, _NAME)
- #define Info_ISO_6937_2(_BYTES, _INFO, _NAME) Ztring _INFO; Get_ISO_6937_2 (_BYTES, _INFO, _NAME)
- #define Info_UTF8(_BYTES, _INFO, _NAME) Ztring _INFO; Get_UTF8 (_BYTES, _INFO, _NAME)
- #define Info_UTF16B(_BYTES, _INFO, _NAME) Ztring _INFO; Get_UTF16B(_BYTES, _INFO, _NAME)
- #define Info_UTF16L(_BYTES, _INFO, _NAME) Ztring _INFO; Get_UTF16L(_BYTES, _INFO, _NAME)
-
- //***************************************************************************
- // PAscal strings
- //***************************************************************************
-
- void Get_PA (std::string &Info, const char* Name);
- void Peek_PA(std::string &Info);
- void Skip_PA( const char* Name);
- #define Info_PA(_INFO, _NAME) Ztring _INFO; Get_PA (_INFO, _NAME)
-
- //***************************************************************************
- // Unknown
- //***************************************************************************
-
- void Skip_XX(int64u Bytes, const char* Name);
-
- //***************************************************************************
- // Flags
- //***************************************************************************
-
- void Get_Flags (int64u Flags, size_t Order, bool &Info, const char* Name);
- void Get_Flags (int64u ValueToPut, int8u &Info, const char* Name);
- void Skip_Flags(int64u Flags, size_t Order, const char* Name);
- void Skip_Flags(int64u ValueToPut, const char* Name);
- #define Get_FlagsM(_VALUE, _INFO, _NAME) Get_Flags(_VALUE, _INFO, _NAME)
- #define Skip_FlagsM(_VALUE, _NAME) Skip_Flags(_VALUE, _NAME)
- #define Info_Flags(_FLAGS, _ORDER, _INFO, _NAME) bool _INFO; Get_Flags (_FLAGS, _ORDER, _INFO, _NAME)
-
- //***************************************************************************
- // BitStream
- //***************************************************************************
-
- void Get_BS (int8u Bits, int32u &Info, const char* Name);
- void Get_SB ( bool &Info, const char* Name);
- bool Get_SB( const char* Name) {bool Temp; Get_SB(Temp, Name); return Temp;}
- void Get_S1 (int8u Bits, int8u &Info, const char* Name);
- void Get_S2 (int8u Bits, int16u &Info, const char* Name);
- void Get_S3 (int8u Bits, int32u &Info, const char* Name);
- void Get_S4 (int8u Bits, int32u &Info, const char* Name);
- void Get_S5 (int8u Bits, int64u &Info, const char* Name);
- void Get_S6 (int8u Bits, int64u &Info, const char* Name);
- void Get_S7 (int8u Bits, int64u &Info, const char* Name);
- void Get_S8 (int8u Bits, int64u &Info, const char* Name);
- void Peek_BS(int8u Bits, int32u &Info);
- void Peek_SB( bool &Info);
- bool Peek_SB() {bool Temp; Peek_SB(Temp); return Temp;}
- void Peek_S1(int8u Bits, int8u &Info);
- void Peek_S2(int8u Bits, int16u &Info);
- void Peek_S3(int8u Bits, int32u &Info);
- void Peek_S4(int8u Bits, int32u &Info);
- void Peek_S5(int8u Bits, int64u &Info);
- void Peek_S6(int8u Bits, int64u &Info);
- void Peek_S7(int8u Bits, int64u &Info);
- void Peek_S8(int8u Bits, int64u &Info);
- void Skip_BS(size_t Bits, const char* Name);
- void Skip_SB( const char* Name);
- void Skip_S1(int8u Bits, const char* Name);
- void Skip_S2(int8u Bits, const char* Name);
- void Skip_S3(int8u Bits, const char* Name);
- void Skip_S4(int8u Bits, const char* Name);
- void Skip_S5(int8u Bits, const char* Name);
- void Skip_S6(int8u Bits, const char* Name);
- void Skip_S7(int8u Bits, const char* Name);
- void Skip_S8(int8u Bits, const char* Name);
- void Mark_0 ();
- void Mark_0_NoTrustError (); //Use it for providing a warning instead of a non-trusting error
- void Mark_1 ();
- void Mark_1_NoTrustError (); //Use it for providing a warning instead of a non-trusting error
- #define Info_BS(_BITS, _INFO, _NAME) int32u _INFO; Get_BS(_BITS, _INFO, _NAME)
- #define Info_SB(_INFO, _NAME) bool _INFO; Get_SB( _INFO, _NAME)
- #define Info_S1(_BITS, _INFO, _NAME) int8u _INFO; Get_S1(_BITS, _INFO, _NAME)
- #define Info_S2(_BITS, _INFO, _NAME) int16u _INFO; Get_S2(_BITS, _INFO, _NAME)
- #define Info_S3(_BITS, _INFO, _NAME) int32u _INFO; Get_S4(_BITS, _INFO, _NAME)
- #define Info_S4(_BITS, _INFO, _NAME) int32u _INFO; Get_S4(_BITS, _INFO, _NAME)
- #define Info_S5(_BITS, _INFO, _NAME) int64u _INFO; Get_S5(_BITS, _INFO, _NAME)
- #define Info_S6(_BITS, _INFO, _NAME) int64u _INFO; Get_S6(_BITS, _INFO, _NAME)
- #define Info_S7(_BITS, _INFO, _NAME) int64u _INFO; Get_S7(_BITS, _INFO, _NAME)
- #define Info_S8(_BITS, _INFO, _NAME) int64u _INFO; Get_S8(_BITS, _INFO, _NAME)
-
- #define TEST_SB_GET(_CODE, _NAME) \
- { \
- Peek_SB(_CODE); \
- if (!_CODE) \
- Skip_SB( _NAME); \
- else \
- { \
- Element_Begin1(_NAME); \
- Skip_SB( _NAME); \
-
- #define TEST_SB_SKIP(_NAME) \
- { \
- if (!Peek_SB()) \
- Skip_SB( _NAME); \
- else \
- { \
- Element_Begin1(_NAME); \
- Skip_SB( _NAME); \
-
- #define TESTELSE_SB_GET(_CODE, _NAME) \
- { \
- Peek_SB(_CODE); \
- if (_CODE) \
- { \
- Element_Begin1(_NAME); \
- Skip_SB( _NAME); \
-
- #define TESTELSE_SB_SKIP(_NAME) \
- { \
- if (Peek_SB()) \
- { \
- Element_Begin1(_NAME); \
- Skip_SB( _NAME); \
-
- #define TESTELSE_SB_ELSE(_NAME) \
- Element_End0(); \
- } \
- else \
- { \
- Skip_SB( _NAME); \
-
- #define TESTELSE_SB_END() \
- } \
- } \
-
- #define TEST_SB_END() \
- Element_End0(); \
- } \
- } \
-
- //***************************************************************************
- // BitStream (Little Endian)
- //***************************************************************************
-
- void Get_BT (size_t Bits, int32u &Info, const char* Name);
- void Get_TB ( bool &Info, const char* Name);
- bool Get_TB( const char* Name) {bool Temp; Get_TB(Temp, Name); return Temp;}
- void Get_T1 (size_t Bits, int8u &Info, const char* Name);
- void Get_T2 (size_t Bits, int16u &Info, const char* Name);
- void Get_T4 (size_t Bits, int32u &Info, const char* Name);
- void Get_T8 (size_t Bits, int64u &Info, const char* Name);
- void Peek_BT(size_t Bits, int32u &Info);
- void Peek_TB( bool &Info);
- bool Peek_TB() {bool Temp; Peek_TB(Temp); return Temp;}
- void Peek_T1(size_t Bits, int8u &Info);
- void Peek_T2(size_t Bits, int16u &Info);
- void Peek_T4(size_t Bits, int32u &Info);
- void Peek_T8(size_t Bits, int64u &Info);
- void Skip_BT(size_t Bits, const char* Name);
- void Skip_TB( const char* Name);
- void Skip_T1(size_t Bits, const char* Name);
- void Skip_T2(size_t Bits, const char* Name);
- void Skip_T4(size_t Bits, const char* Name);
- void Skip_T8(size_t Bits, const char* Name);
- #define Info_BT(_BITS, _INFO, _NAME) int32u _INFO; Get_BT(_BITS, _INFO, _NAME)
- #define Info_TB(_INFO, _NAME) bool _INFO; Get_TB( _INFO, _NAME)
- #define Info_T1(_BITS, _INFO, _NAME) int8u _INFO; Get_T1(_BITS, _INFO, _NAME)
- #define Info_T2(_BITS, _INFO, _NAME) int16u _INFO; Get_T2(_BITS, _INFO, _NAME)
- #define Info_T4(_BITS, _INFO, _NAME) int32u _INFO; Get_T4(_BITS, _INFO, _NAME)
- #define Info_T8(_BITS, _INFO, _NAME) int64u _INFO; Get_T8(_BITS, _INFO, _NAME)
-
- #define TEST_TB_GET(_CODE, _NAME) \
- { \
- Peek_TB(_CODE); \
- if (!_CODE) \
- Skip_TB( _NAME); \
- else \
- { \
- Element_Begin1(_NAME); \
- Skip_TB( _NAME); \
-
- #define TEST_TB_SKIP(_NAME) \
- { \
- if (!Peek_TB()) \
- Skip_TB( _NAME); \
- else \
- { \
- Element_Begin1(_NAME); \
- Skip_TB( _NAME); \
-
- #define TESTELSE_TB_GET(_CODE, _NAME) \
- { \
- Peek_TB(_CODE); \
- if (_CODE) \
- { \
- Element_Begin1(_NAME); \
- Skip_TB( _NAME); \
-
- #define TESTELSE_TB_SKIP(_NAME) \
- { \
- if (Peek_TB()) \
- { \
- Element_Begin1(_NAME); \
- Skip_TB( _NAME); \
-
- #define TESTELSE_TB_ELSE(_NAME) \
- Element_End0(); \
- } \
- else \
- { \
- Skip_TB( _NAME); \
-
- #define TESTELSE_TB_END() \
- } \
- } \
-
- #define TEST_TB_END() \
- Element_End0(); \
- } \
- } \
-
- //***************************************************************************
- // Next code planning
- //***************************************************************************
-
- void NextCode_Add(int64u Code);
- void NextCode_Clear();
- bool NextCode_Test();
-
- //***************************************************************************
- // Element trusting
- //***************************************************************************
-
- void Trusted_IsNot (const char* Reason);
-
- //***************************************************************************
- // Stream filling
- //***************************************************************************
-
- //Elements - Preparation of element from external app
- size_t Stream_Prepare (stream_t KindOfStream, size_t StreamPos=(size_t)-1);
- size_t Stream_Erase (stream_t KindOfStream, size_t StreamPos);
-
- //Fill with datas (with parameter as a size_t)
- void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, const Ztring &Value, bool Replace=false);
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, const std::string &Value, bool Utf8=true, bool Replace=false) {if (Utf8) Fill(StreamKind, StreamPos, Parameter, Ztring().From_UTF8(Value.c_str(), Value.size()), Replace); else Fill(StreamKind, StreamPos, Parameter, Ztring().From_Local(Value.c_str(), Value.size()), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, const char* Value, size_t Value_Size=Unlimited, bool Utf8=true, bool Replace=false) {if (Utf8) Fill(StreamKind, StreamPos, Parameter, Ztring().From_UTF8(Value, Value_Size), Replace); else Fill(StreamKind, StreamPos, Parameter, Ztring().From_Local(Value, Value_Size), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, const wchar_t* Value, size_t Value_Size=Unlimited, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring().From_Unicode(Value, Value_Size), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int8u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int8s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int16u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int16s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int32u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int32s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int64u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int64s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, float32 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, float64 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, float80 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- #ifdef SIZE_T_IS_LONG
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, size_t Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- #endif //SIZE_T_IS_LONG
- //Fill with datas
- void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, const Ztring &Value, bool Replace=false);
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, const std::string &Value, bool Utf8=true, bool Replace=false) {if (Utf8) Fill(StreamKind, StreamPos, Parameter, Ztring().From_UTF8(Value.c_str(), Value.size())); else Fill(StreamKind, StreamPos, Parameter, Ztring().From_Local(Value.c_str(), Value.size()), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, const char* Value, size_t Value_Size=Unlimited, bool Utf8=true, bool Replace=false) {if (Utf8) Fill(StreamKind, StreamPos, Parameter, Ztring().From_UTF8(Value, Value_Size), Replace); else Fill(StreamKind, StreamPos, Parameter, Ztring().From_Local(Value, Value_Size), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, const wchar_t* Value, size_t Value_Size=Unlimited, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring().From_Unicode(Value, Value_Size), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int8u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int8s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int16u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int16s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int32u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int32s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int64u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int64s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, float32 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, float64 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, float80 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- #ifdef SIZE_T_IS_LONG
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, size_t Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- #endif //SIZE_T_IS_LONG
- ZtringListList Fill_Temp;
- void Fill_Flush ();
- size_t Fill_Parameter(stream_t StreamKind, generic StreamPos);
-
- const Ztring &Retrieve_Const (stream_t StreamKind, size_t StreamPos, size_t Parameter, info_t KindOfInfo=Info_Text);
- Ztring Retrieve (stream_t StreamKind, size_t StreamPos, size_t Parameter, info_t KindOfInfo=Info_Text);
- const Ztring &Retrieve_Const (stream_t StreamKind, size_t StreamPos, const char* Parameter, info_t KindOfInfo=Info_Text);
- Ztring Retrieve (stream_t StreamKind, size_t StreamPos, const char* Parameter, info_t KindOfInfo=Info_Text);
-
- void Clear (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void Clear (stream_t StreamKind, size_t StreamPos, const char* Parameter);
- void Clear (stream_t StreamKind, size_t StreamPos);
- void Clear (stream_t StreamKind);
- inline void Clear () {File__Base::Clear();}
-
- //***************************************************************************
- // Filling
- //***************************************************************************
-
- //Actions
- void Accept (const char* ParserName=NULL);
- void Accept (File__Analyze* Parser);
- void Reject (const char* ParserName=NULL);
- void Reject (File__Analyze* Parser);
- void Update (const char* ParserName=NULL);
- void Update (File__Analyze* Parser);
- void Fill (const char* ParserName=NULL);
- void Fill (File__Analyze* Parser);
- void Finish (const char* ParserName=NULL);
- void Finish (File__Analyze* Parser);
- void ForceFinish (const char* ParserName=NULL);
- void ForceFinish (File__Analyze* Parser);
- void GoTo (int64u GoTo, const char* ParserName=NULL);
- void GoToFromEnd (int64u GoToFromEnd, const char* ParserName=NULL);
- int64u Element_Code_Get (size_t Level);
- int64u Element_TotalSize_Get (size_t LevelLess=0);
- bool Element_IsComplete_Get ();
- void Element_ThisIsAList ();
- void Element_WaitForMoreData ();
- void Element_DoNotTrust (const char* Reason);
- void Element_DoNotShow ();
- void Element_Show ();
- bool Element_Show_Get ();
- void Element_Show_Add (const Ztring &ToShow);
-
- //Status
- bool Element_IsOK ();
- bool Element_IsNotFinished ();
- bool Element_IsWaitingForMoreData ();
-
- //***************************************************************************
- // Merging
- //***************************************************************************
-
- //Utils
-public :
- size_t Merge(MediaInfo_Internal &ToAdd, bool Erase=true); //Merge 2 File_Base
- size_t Merge(MediaInfo_Internal &ToAdd, stream_t StreamKind, size_t StreamPos_From, size_t StreamPos_To, bool Erase=true); //Merge 2 streams
- size_t Merge(File__Analyze &ToAdd, bool Erase=true); //Merge 2 File_Base
- size_t Merge(File__Analyze &ToAdd, stream_t StreamKind, size_t StreamPos_From, size_t StreamPos_To, bool Erase=true); //Merge 2 streams
-
- void CodecID_Fill (const Ztring &Value, stream_t StreamKind, size_t StreamPos, infocodecid_format_t Format, stream_t StreamKind_CodecID=Stream_Max);
-
- //***************************************************************************
- // Finalize
- //***************************************************************************
-
- //End
- void Streams_Finish_Global();
-
-protected :
- void Streams_Finish_StreamOnly();
- void Streams_Finish_StreamOnly(stream_t StreamKid, size_t StreamPos);
- void Streams_Finish_StreamOnly_General(size_t StreamPos);
- void Streams_Finish_StreamOnly_Video(size_t StreamPos);
- void Streams_Finish_StreamOnly_Audio(size_t StreamPos);
- void Streams_Finish_StreamOnly_Text(size_t StreamPos);
- void Streams_Finish_StreamOnly_Other(size_t StreamPos);
- void Streams_Finish_StreamOnly_Image(size_t StreamPos);
- void Streams_Finish_StreamOnly_Menu(size_t StreamPos);
- void Streams_Finish_InterStreams();
- void Streams_Finish_Cosmetic();
- void Streams_Finish_Cosmetic(stream_t StreamKid, size_t StreamPos);
- void Streams_Finish_Cosmetic_General(size_t StreamPos);
- void Streams_Finish_Cosmetic_Video(size_t StreamPos);
- void Streams_Finish_Cosmetic_Audio(size_t StreamPos);
- void Streams_Finish_Cosmetic_Text(size_t StreamPos);
- void Streams_Finish_Cosmetic_Chapters(size_t StreamPos);
- void Streams_Finish_Cosmetic_Image(size_t StreamPos);
- void Streams_Finish_Cosmetic_Menu(size_t StreamPos);
-
- void Tags ();
- void Video_FrameRate_Rounding (size_t Pos, video Parameter);
- void Video_BitRate_Rounding (size_t Pos, video Parameter);
- void Audio_BitRate_Rounding (size_t Pos, audio Parameter);
-
- //Utils - Finalize
- void Duration_Duration123 (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void FileSize_FileSize123 (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void Kilo_Kilo123 (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void Value_Value123 (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void YesNo_YesNo (stream_t StreamKind, size_t StreamPos, size_t Parameter);
-
- //***************************************************************************
- //
- //***************************************************************************
-
-protected :
- //Save for speed improvement
- float Config_Trace_Level;
- std::bitset<32> Config_Trace_Layers;
- MediaInfo_Config::trace_Format Config_Trace_Format;
- int8u Config_Demux;
- Ztring Config_LineSeparator;
- bool IsSub;
- bool IsRawStream;
-
- //Configuration
- bool DataMustAlwaysBeComplete; //Data must always be complete, else wait for more data
- bool MustUseAlternativeParser; //Must use the second parser (example: for Data part)
-
- //Synchro
- bool MustParseTheHeaderFile; //There is an header part, must parse it
- size_t Trusted;
- size_t Trusted_Multiplier;
-
- //Elements
- size_t Element_Level; //Current level
- bool Element_WantNextLevel; //Want to go to the next leavel instead of the same level
-
- //Element
- int64u Element_Code; //Code filled in the file, copy of Element[Element_Level].Code
- int64u Element_Offset; //Position in the Element (without header)
- int64u Element_Size; //Size of the Element (without header)
-
-private :
- //***************************************************************************
- // Buffer
- //***************************************************************************
-
- void Buffer_Clear(); //Clear the buffer
-protected :
- //Buffer
- bool Open_Buffer_Continue_Loop();
- const int8u* Buffer;
-public : //TO CHANGE
- size_t Buffer_Size;
- int64u Buffer_TotalBytes;
- int64u Buffer_TotalBytes_FirstSynched;
- int64u Buffer_TotalBytes_LastSynched;
- int64u Buffer_PaddingBytes;
- int64u Buffer_JunkBytes;
- float64 Stream_BitRateFromContainer;
-protected :
- int8u* Buffer_Temp;
- size_t Buffer_Temp_Size;
- size_t Buffer_Temp_Size_Max;
- size_t Buffer_Offset; //Temporary usage in this parser
- size_t Buffer_Offset_Temp; //Temporary usage in this parser
- size_t Buffer_MinimumSize;
- size_t Buffer_MaximumSize;
- int64u Buffer_TotalBytes_FirstSynched_Max;
- int64u Buffer_TotalBytes_Fill_Max;
- friend class File__Tags_Helper;
-
- //***************************************************************************
- // Helpers
- //***************************************************************************
-
- bool FileHeader_Begin_0x000001();
- bool FileHeader_Begin_XML(tinyxml2::XMLDocument &Document);
- bool Synchronize_0x000001();
-public:
- void TestContinuousFileNames(size_t CountOfFiles=24, Ztring FileExtension=Ztring());
-
-private :
-
- //***************************************************************************
- // Elements
- //***************************************************************************
-
- //Data
- size_t Data_Level; //Current level for Data ("Top level")
-
- //Element
- BitStream_Fast* BS; //For conversion from bytes to bitstream
- BitStream* BT; //For conversion from bytes to bitstream
-public : //TO CHANGE
- int64u Header_Size; //Size of the header of the current element
- const Ztring &Details_Get() {return Element[0].ToShow.Details;} //Direct access to details
- void Details_Clear();
-protected :
- bool Trace_DoNotSave;
- bool Trace_Activated;
- std::bitset<32> Trace_Layers;
- void Trace_Layers_Update (size_t Layer=(size_t)-1);
-private :
-
- //Elements
- size_t Element_Level_Base; //From other parsers
-
- struct element_details
- {
- struct to_show
- {
- int64u Pos; //Position of the element in the file
- int64u Size; //Size of the element (including header and sub-elements)
- int64u Header_Size; //Size of the header of the element
- Ztring Name; //Name planned for this element
- Ztring Info; //More info about the element
- Ztring Details; //The main text
- bool NoShow; //Don't show this element
- };
-
- int64u Code; //Code filled in the file
- int64u Next; //
- bool WaitForMoreData; //This element is not complete, we need more data
- bool UnTrusted; //This element has a problem
- bool IsComplete; //This element is fully buffered, no need of more
- to_show ToShow;
- };
- std::vector<element_details> Element;
-
- //NextCode
- std::map<int64u, bool> NextCode;
-
- //BookMarks
- size_t BookMark_Element_Level;
- int64u BookMark_GoTo;
- std::vector<int64u> BookMark_Code;
- std::vector<int64u> BookMark_Next;
-
-public :
- void BookMark_Set(size_t Element_Level_ToGet=(size_t)-1);
- void BookMark_Get();
- virtual bool BookMark_Needed() {return false;};
-
- //Temp
- std::bitset<32> Status;
- enum status
- {
- IsAccepted,
- IsFilled,
- IsUpdated,
- IsFinished,
- Reserved_04,
- Reserved_05,
- Reserved_06,
- Reserved_07,
- Reserved_08,
- Reserved_09,
- Reserved_10,
- Reserved_11,
- Reserved_12,
- Reserved_13,
- Reserved_14,
- Reserved_15,
- User_16,
- User_17,
- User_18,
- User_19,
- User_20,
- User_21,
- User_22,
- User_23,
- User_24,
- User_25,
- User_26,
- User_27,
- User_28,
- User_29,
- User_30,
- User_31,
- };
- bool ShouldContinueParsing;
-
- //Configuration
- bool MustSynchronize;
- bool CA_system_ID_MustSkipSlices;
-
- //Demux
- enum contenttype
- {
- ContentType_MainStream,
- ContentType_SubStream,
- ContentType_Header,
- ContentType_Synchro
- };
- #if MEDIAINFO_DEMUX
- void Demux (const int8u* Buffer, size_t Buffer_Size, contenttype ContentType, const int8u* OriginalBuffer=NULL, size_t OriginalBuffer_Size=0);
- virtual bool Demux_UnpacketizeContainer_Test() {return true;}
- bool Demux_UnpacketizeContainer_Test_OneFramePerFile();
- void Demux_UnpacketizeContainer_Demux(bool random_access=true);
- void Demux_UnpacketizeContainer_Demux_Clear();
- bool Demux_EventWasSent_Accept_Specific;
- #else //MEDIAINFO_DEMUX
- #define Demux(_A, _B, _C)
- #endif //MEDIAINFO_DEMUX
-
- //Events data
- bool PES_FirstByte_IsAvailable;
- bool PES_FirstByte_Value;
-
- int64u Unsynch_Frame_Count;
-
- //AES
- #if MEDIAINFO_AES
- AESdecrypt* AES;
- int8u* AES_IV;
- int8u* AES_Decrypted;
- size_t AES_Decrypted_Size;
- #endif //MEDIAINFO_AES
-
- //MD5
- #if MEDIAINFO_MD5
- struct MD5Context* MD5;
- int64u Md5_ParseUpTo;
- #endif //MEDIAINFO_MD5
-
- #if MEDIAINFO_SEEK
- private:
- bool Seek_Duration_Detected;
- #endif //MEDIAINFO_SEEK
-
- #if MEDIAINFO_IBI
- public:
- bool Config_Ibi_Create;
- int64u Ibi_SynchronizationOffset_Current;
- int64u Ibi_SynchronizationOffset_BeginOfFrame;
- ibi Ibi; //If Main only
- ibi::stream* IbiStream; //If sub only
- size_t Ibi_Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- void Ibi_Read_Buffer_Unsynched ();
- void Ibi_Stream_Finish ();
- void Ibi_Stream_Finish (int64u Numerator, int64u Denominator); //Partial
- void Ibi_Add ();
- #else //MEDIAINFO_IBI
- size_t Ibi_Read_Buffer_Seek (size_t, int64u, int64u) {return (size_t)-1;}
- void Ibi_Read_Buffer_Unsynched () {}
- void Ibi_Stream_Finish () {}
- void Ibi_Stream_Finish (int64u, int64u) {}
- void Ibi_Add () {}
- #endif //MEDIAINFO_IBI
-};
-
-//Helpers
-#define DETAILS_INFO(_DATA) _DATA
-
-#endif //MEDIAINFO_TRACE
-
-} //NameSpace
-
-
-
-/*
-#define BS_END() \
- { \
- BS.Byte_Align(); \
- int32u BS_Value=0x00; \
- while(BS.Remain()>0 && BS_Value==0x00) \
- BS_Value=BS.Get(8); \
- if (BS_Value!=0x00) \
- INTEGRITY_SIZE(BS.Offset_Get()-1, BS.Offset_Get()) \
- else \
- INTEGRITY_SIZE(BS.Offset_Get(), BS.Offset_Get()) \
- } \
-
-#define BS_END_FF() \
- { \
- BS.Byte_Align(); \
- int32u BS_Value=0xFF; \
- while(BS.Remain()>0 && BS_Value==0x00) \
- BS_Value=BS.Get(8); \
- if (BS_Value!=0xFF) \
- INTEGRITY_SIZE(BS.Offset_Get()-1, BS.Offset_Get()) \
- else \
- INTEGRITY_SIZE(BS.Offset_Get(), BS.Offset_Get()) \
- } \
-
-#define BS_END_CANBEMORE() \
- { \
- } \
-*/
-
-
- //Begin
- #define FILLING_BEGIN() \
- if (Element_IsOK()) \
- {
-
- #define FILLING_BEGIN_PRECISE() \
- if (Element_IsOK() && Element_Offset==Element_Size) \
- {
-
- //Else
- #define FILLING_ELSE() \
- } \
- else \
- { \
-
- //End
- #define FILLING_END() \
- }
-
-#define ATOM_BEGIN \
- if (Level!=Element_Level) \
- { \
- Level++; \
- switch (Element_Code_Get(Level)) \
- { \
-
-#define ATOM(_ATOM) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- { \
- if (Element_IsComplete_Get()) \
- _ATOM(); \
- else \
- { \
- Element_WaitForMoreData(); \
- return; \
- } \
- } \
- break; \
-
-#define ATOM_PARTIAL(_ATOM) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- _ATOM(); \
- break; \
-
-#define ATOM_DEFAULT(_ATOM) \
- default : \
- if (Level==Element_Level) \
- { \
- if (Element_IsComplete_Get()) \
- _ATOM(); \
- else \
- { \
- Element_WaitForMoreData(); \
- return; \
- } \
- } \
- break; \
-
-#define ATOM_END \
- default : \
- Skip_XX(Element_TotalSize_Get(), "Unknown"); \
- } \
- } \
- break; \
-
-#define LIST(_ATOM) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- { \
- Element_ThisIsAList(); \
- _ATOM(); \
- } \
-
-#define LIST_DEFAULT(_ATOM) \
- default : \
- if (Level==Element_Level) \
- { \
- Element_ThisIsAList(); \
- _ATOM(); \
- } \
-
-#define ATOM_END_DEFAULT \
- } \
- } \
- break; \
-
-#define ATOM_DEFAULT_ALONE(_ATOM) \
- if (Level!=Element_Level) \
- { \
- Level++; \
- if (Level==Element_Level) \
- { \
- if (Element_IsComplete_Get()) \
- _ATOM(); \
- else \
- { \
- Element_WaitForMoreData(); \
- return; \
- } \
- } \
- } \
- break; \
-
-#define LIST_DEFAULT_ALONE_BEGIN(_ATOM) \
- if (Level!=Element_Level) \
- { \
- Level++; \
- if (Level==Element_Level) \
- { \
- Element_ThisIsAList(); \
- _ATOM(); \
- } \
-
-#define LIST_DEFAULT_ALONE_END \
- } \
- break; \
-
-#define LIST_SKIP(_ATOM) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- { \
- Element_ThisIsAList(); \
- _ATOM(); \
- } \
- break; \
-
-
-#define DATA_BEGIN \
- size_t Level=0; \
- ATOM_BEGIN \
-
-#define DATA_END \
- default : ; \
- Skip_XX(Element_TotalSize_Get(), "Unknown"); \
- } \
- } \
-
-#define DATA_DEFAULT \
- default : \
-
-#define DATA_END_DEFAULT \
- } \
- } \
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Buffer.cpp b/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Buffer.cpp
deleted file mode 100644
index dc009cfc4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Buffer.cpp
+++ /dev/null
@@ -1,2500 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-#if MEDIAINFO_TRACE
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "ZenLib/BitStream_LE.h"
-#include <cmath>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//Integrity test
-#define INTEGRITY(TOVALIDATE, ERRORTEXT, OFFSET) \
- if (!(TOVALIDATE)) \
- { \
- Trusted_IsNot(ERRORTEXT); \
- return; \
- } \
-
-#define INTEGRITY_INT(TOVALIDATE, ERRORTEXT, OFFSET) \
- if (!(TOVALIDATE)) \
- { \
- Trusted_IsNot(ERRORTEXT); \
- Info=0; \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST(_BYTES) \
- if (Element_Offset+_BYTES>Element_Size) \
- { \
- Trusted_IsNot("Size is wrong"); \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST_STRING(_BYTES) \
- if (Element_Offset+_BYTES>Element_Size) \
- { \
- Trusted_IsNot("Size is wrong"); \
- Info.clear(); \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST_INT(_BYTES) \
- if (Element_Offset+_BYTES>Element_Size) \
- { \
- Trusted_IsNot("Size is wrong"); \
- Info=0; \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST_BUFFER() \
- if (BS->Remain()==0) \
- { \
- Trusted_IsNot("Size is wrong"); \
- Info=0; \
- return; \
- } \
-
-//***************************************************************************
-// Init
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::BS_Begin()
-{
- size_t BS_Size;
- if (Element_Offset>=Element_Size)
- BS_Size=0;
- else if (Buffer_Offset+Element_Size<=Buffer_Size)
- BS_Size=(size_t)(Element_Size-Element_Offset);
- else if (Buffer_Offset+Element_Offset<=Buffer_Size)
- BS_Size=Buffer_Size-(size_t)(Buffer_Offset+Element_Offset);
- else
- BS_Size=0;
-
- BS->Attach(Buffer+Buffer_Offset+(size_t)Element_Offset, BS_Size);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::BS_Begin_LE()
-{
- size_t BS_Size;
- if (Buffer_Offset+Element_Size<=Buffer_Size)
- BS_Size=(size_t)(Element_Size-Element_Offset);
- else if (Buffer_Offset+Element_Offset<=Buffer_Size)
- BS_Size=Buffer_Size-(size_t)(Buffer_Offset+Element_Offset);
- else
- BS_Size=0;
-
- BT->Attach(Buffer+Buffer_Offset+(size_t)Element_Offset, BS_Size);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::BS_End()
-{
- BS->Byte_Align();
- Element_Offset+=BS->Offset_Get();
- BS->Attach(NULL, 0);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::BS_End_LE()
-{
- BT->Byte_Align();
- Element_Offset+=BT->Offset_Get();
- BT->Attach(NULL, 0);
-}
-
-//***************************************************************************
-// Big Endian
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B1(int8u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=BigEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=1;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B2(int16u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B3(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=BigEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated)
- {
- Ztring Pos1; Pos1.From_Number(Info, 16);
- Ztring Temp;
- Temp.resize(6-Pos1.size(), __T('0'));
- Temp.append(Pos1);
- Temp.MakeUpperCase();
- Param(Name, Ztring::ToZtring(Info)+__T(" (0x")+Temp+__T(")"));
- }
- Element_Offset+=3;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B4(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated)
- {
- Ztring Pos1; Pos1.From_Number(Info, 16);
- Ztring Temp;
- Temp.resize(8-Pos1.size(), __T('0'));
- Temp.append(Pos1);
- Temp.MakeUpperCase();
- Param(Name, Ztring::ToZtring(Info)+__T(" (0x")+Temp+__T(")"));
- }
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B5(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=BigEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B6(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=BigEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B7(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=BigEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=7;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B8(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B16(int128u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- //Info=BigEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.hi=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.lo=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset+8);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BF4(float32 &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=BigEndian2float32(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BF8(float64 &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=BigEndian2float64(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BF10(float80 &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(10);
- Info=BigEndian2float80(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=10;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BFP4(int8u Bits, float32 &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- BS_Begin();
- int32s Integer=(int32s)BS->Get4(Bits);
- int32u Fraction=BS->Get4(32-Bits);
- BS_End();
- Element_Offset-=4; //Because of BS_End()
- if (Integer>=(1<<Bits)/2)
- Integer-=1<<Bits;
- Info=Integer+((float32)Fraction)/(1<<(32-Bits));
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B1(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=BigEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B2(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B3(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=BigEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B4(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B5(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=BigEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B6(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=BigEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B7(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=BigEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B8(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B16(int128u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info=BigEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_B1(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(1);
- if (Trace_Activated) Param(Name, BigEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=1;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_B2(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(2);
- if (Trace_Activated) Param(Name, BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_B3(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(3);
- if (Trace_Activated)
- {
- int32u Info=BigEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Ztring Pos1; Pos1.From_Number(Info, 16);
- Ztring Temp;
- Temp.resize(6-Pos1.size(), __T('0'));
- Temp.append(Pos1);
- Temp.MakeUpperCase();
- Param(Name, Ztring::ToZtring(Info)+__T(" (0x")+Temp+__T(")"));
- }
- Element_Offset+=3;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_B4(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(4);
- if (Trace_Activated)
- {
- int32u Info=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Ztring Pos1; Pos1.From_Number(Info, 16);
- Ztring Temp;
- Temp.resize(8-Pos1.size(), __T('0'));
- Temp.append(Pos1);
- Temp.MakeUpperCase();
- Param(Name, Ztring::ToZtring(Info)+__T(" (0x")+Temp+__T(")"));
- }
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_B5(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(5);
- if (Trace_Activated) Param(Name, BigEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_B6(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(6);
- if (Trace_Activated) Param(Name, BigEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_B7(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(7);
- if (Trace_Activated) Param(Name, BigEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=7;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_B8(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(8);
- if (Trace_Activated) Param(Name, BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_B16(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(16);
- if (Trace_Activated) Param(Name, BigEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_BF4(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(4);
- if (Trace_Activated) Param(Name, BigEndian2float32(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_BFP4(int8u Bits, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(4);
- BS_Begin();
- int32u Integer=BS->Get4(Bits);
- int32u Fraction=BS->Get4(32-Bits);
- BS_End();
- Element_Offset-=4; //Because of BS_End()
- if (Trace_Activated) Param(Name, Integer+((float32)Fraction)/(1<<(32-Bits)));
- Element_Offset+=4;
-}
-
-//***************************************************************************
-// Little Endian
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L1(int8u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=1;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L2(int16u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L3(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=3;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L4(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L5(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L6(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L7(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=7;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L8(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L16(int128u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- //Info=LittleEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.hi=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.lo=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset+8);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_LF4(float32 &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2float32(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_LF8(float64 &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2float64(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L1(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L2(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L3(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L4(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L5(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L6(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L7(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L8(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_L1(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(1);
- if (Trace_Activated) Param(Name, LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=1;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_L2(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(2);
- if (Trace_Activated) Param(Name, LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_L3(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(3);
- if (Trace_Activated)
- {
- int32u Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Ztring Pos1; Pos1.From_Number(Info, 16);
- Ztring Temp;
- Temp.resize(6-Pos1.size(), __T('0'));
- Temp.append(Pos1);
- Temp.MakeUpperCase();
- Param(Name, Ztring::ToZtring(Info)+__T(" (0x")+Temp+__T(")"));
- }
- Element_Offset+=3;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_L4(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(4);
- if (Trace_Activated)
- {
- int32u Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Ztring Pos1; Pos1.From_Number(Info, 16);
- Ztring Temp;
- Temp.resize(8-Pos1.size(), __T('0'));
- Temp.append(Pos1);
- Temp.MakeUpperCase();
- Param(Name, Ztring::ToZtring(Info)+__T(" (0x")+Temp+__T(")"));
- }
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_L5(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(5);
- if (Trace_Activated) Param(Name, LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_L6(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(6);
- if (Trace_Activated) Param(Name, LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_L7(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(7);
- if (Trace_Activated) Param(Name, LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=7;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_L8(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(8);
- if (Trace_Activated) Param(Name, LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_L16(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(16);
- if (Trace_Activated) Param(Name, LittleEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=16;
-}
-
-//***************************************************************************
-// Little and Big Endian together
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D1(int8u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D2(int16u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D3(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D4(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D5(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(10);
- Info=LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=10;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D6(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(12);
- Info=LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=12;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D7(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(14);
- Info=LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=14;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D8(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D16(int128u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(32);
- //Info=LittleEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.hi=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.lo=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset+8);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=32;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_DF4(float32 &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2float32(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_DF8(float64 &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info=LittleEndian2float64(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D1(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D2(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D3(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D4(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D5(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(10);
- Info=LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D6(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(12);
- Info=LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D7(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(14);
- Info=LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D8(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_D1(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(2);
- if (Trace_Activated) Param(Name, LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_D2(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(4);
- if (Trace_Activated) Param(Name, LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_D3(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(6);
- if (Trace_Activated)
- {
- int32u Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Ztring Pos1; Pos1.From_Number(Info, 16);
- Ztring Temp;
- Temp.resize(6-Pos1.size(), __T('0'));
- Temp.append(Pos1);
- Temp.MakeUpperCase();
- Param(Name, Ztring::ToZtring(Info)+__T(" (0x")+Temp+__T(")"));
- }
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_D4(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(8);
- if (Trace_Activated)
- {
- int32u Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Ztring Pos1; Pos1.From_Number(Info, 16);
- Ztring Temp;
- Temp.resize(8-Pos1.size(), __T('0'));
- Temp.append(Pos1);
- Temp.MakeUpperCase();
- Param(Name, Ztring::ToZtring(Info)+__T(" (0x")+Temp+__T(")"));
- }
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_D5(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(10);
- if (Trace_Activated) Param(Name, LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_D6(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(12);
- if (Trace_Activated) Param(Name, LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=12;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_D7(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(14);
- if (Trace_Activated) Param(Name, LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=14;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_D8(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(16);
- if (Trace_Activated) Param(Name, LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_D16(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(32);
- if (Trace_Activated) Param(Name, LittleEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=32;
-}
-
-//***************************************************************************
-// GUID
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_GUID(int128u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info.hi=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.lo=BigEndian2int64u (Buffer+Buffer_Offset+(size_t)Element_Offset+8);
- if (Trace_Activated) Param_GUID(Name, Info);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_GUID(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(16);
- if (Trace_Activated) Param_GUID(Name, BigEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=16;
-}
-
-//***************************************************************************
-// UUID
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UUID(int128u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info.hi=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.lo=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset+8);
- if (Trace_Activated) Param_UUID(Name, Info);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_UUID(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(16);
- if (Trace_Activated) Param_UUID(Name, BigEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset));
- Element_Offset+=16;
-}
-
-//***************************************************************************
-// EBML
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_EB(int64u &Info, const char* Name)
-{
- //Element size
- INTEGRITY_SIZE_ATLEAST_INT(1);
- if (Buffer[Buffer_Offset+(size_t)Element_Offset]==0xFF)
- {
- Info=File_Size-(File_Offset+Buffer_Offset+Element_Offset);
- if (Trace_Activated) Param(Name, "Unlimited");
- Element_Offset++;
- return;
- }
- int8u Size=0;
- int32u Size_Mark=0;
- BS_Begin();
- while (Size_Mark==0 && BS->Remain() && Size<=8)
- {
- Size++;
- Peek_BS(Size, Size_Mark);
- }
-
- //Integrity
- if (!BS->Remain() || Size>8)
- {
- if (Size>8)
- {
- //Element[Element_Level].IsComplete=true; //If it is in a header
- Trusted_IsNot("EBML integer parsing error");
- }
- Info=0;
- return;
- }
- BS_End();
- if (File_Offset+Buffer_Offset+Element_Offset>=Element[Element_Level].Next)
- {
- //Element[Element_Level].IsComplete=true; //If it is in a header
- Trusted_IsNot("Not enough place to have an EBML");
- Info=0;
- return; //Not enough space
- }
- INTEGRITY_SIZE_ATLEAST_INT(Size);
-
- //Element Name
- switch (Size)
- {
- case 1 : {
- int8u Element_Name;
- Peek_B1 (Element_Name);
- Info=Element_Name&0x7F; //Keep out first bit
- }
- break;
- case 2 : {
- int16u Element_Name;
- Peek_B2(Element_Name);
- Info=Element_Name&0x3FFF; //Keep out first bits
- }
- break;
- case 3 : {
- int32u Element_Name;
- Peek_B3(Element_Name);
- Info=Element_Name&0x1FFFFF; //Keep out first bits
- }
- break;
- case 4 : {
- int32u Element_Name;
- Peek_B4(Element_Name);
- Info=Element_Name&0x0FFFFFFF; //Keep out first bits
- }
- break;
- case 5 : {
- int64u Element_Name;
- Peek_B5(Element_Name);
- Info=Element_Name&0x07FFFFFFFFLL; //Keep out first bits
- }
- break;
- case 6 : {
- int64u Element_Name;
- Peek_B6(Element_Name);
- Info=Element_Name&0x03FFFFFFFFFFLL; //Keep out first bits
- }
- break;
- case 7 : {
- int64u Element_Name;
- Peek_B7(Element_Name);
- Info=Element_Name&0x01FFFFFFFFFFFFLL; //Keep out first bits
- }
- break;
- case 8 : {
- int64u Element_Name;
- Peek_B8(Element_Name);
- Info=Element_Name&0x00FFFFFFFFFFFFFFLL; //Keep out first bits
- }
- break;
- }
-
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=Size;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ES(int64s &Info, const char* Name)
-{
- //Element size
- INTEGRITY_SIZE_ATLEAST_INT(1);
- int8u Size=0;
- int32u Size_Mark=0;
- BS_Begin();
- while (Size_Mark==0 && BS->Remain() && Size<=8)
- {
- Size++;
- Peek_BS(Size, Size_Mark);
- }
-
- //Integrity
- if (!BS->Remain() || Size>8)
- {
- if (Size>8)
- {
- //Element[Element_Level].IsComplete=true; //If it is in a header
- Trusted_IsNot("EBML integer parsing error");
- }
- Info=0;
- return;
- }
- BS_End();
- if (File_Offset+Buffer_Offset+Element_Offset>=Element[Element_Level].Next)
- {
- //Element[Element_Level].IsComplete=true; //If it is in a header
- Trusted_IsNot("Not enough place to have an EBML");
- Info=0;
- return; //Not enough space
- }
- INTEGRITY_SIZE_ATLEAST_INT(Size);
-
- //Element Name
- switch (Size)
- {
- case 1 : {
- int8u Element_Name;
- Peek_B1 (Element_Name);
- Info=(Element_Name&0x7F)-0x3F; //Keep out first bit and sign
- }
- break;
- case 2 : {
- int16u Element_Name;
- Peek_B2(Element_Name);
- Info=(Element_Name&0x3FFF)-0x1FFF; //Keep out first bits and sign
- }
- break;
- case 3 : {
- int32u Element_Name;
- Peek_B3(Element_Name);
- Info=(Element_Name&0x1FFFFF)-0x0FFFFF; //Keep out first bits and sign
- }
- break;
- case 4 : {
- int32u Element_Name;
- Peek_B4(Element_Name);
- Info=(Element_Name&0x0FFFFFFF)-0x07FFFFFF; //Keep out first bits and sign
- }
- break;
- case 5 : {
- int64u Element_Name;
- Peek_B5(Element_Name);
- Info=(Element_Name&0x07FFFFFFFFLL)-0x03FFFFFFFFLL; //Keep out first bits and sign
- }
- break;
- case 6 : {
- int64u Element_Name;
- Peek_B6(Element_Name);
- Info=(Element_Name&0x03FFFFFFFFFFLL)-0x01FFFFFFFFFFLL; //Keep out first bits and sign
- }
- break;
- case 7 : {
- int64u Element_Name;
- Peek_B7(Element_Name);
- Info=(Element_Name&0x01FFFFFFFFFFFFLL)-0x00FFFFFFFFFFFFLL; //Keep out first bits and sign
- }
- break;
- case 8 : {
- int64u Element_Name;
- Peek_B8(Element_Name);
- Info=(Element_Name&0x00FFFFFFFFFFFFFFLL)-0x007FFFFFFFFFFFFFLL; //Keep out first bits and sign
- }
- break;
- }
-
- if (Trace_Activated) Param(Name, Info);
- Element_Offset+=Size;
-}
-
-//***************************************************************************
-// Variable Size Value
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_VS(int64u &Info, const char* Name)
-{
- //Element size
- Info=0;
- int8u Size=0;
- bool more_data;
- BS_Begin();
- do
- {
- Size++;
- INTEGRITY_INT(8<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- more_data=BS->GetB();
- Info=128*Info+BS->Get1(7);
- }
- while (more_data && Size<=8 && BS->Remain());
- BS_End();
-
- //Integrity
- if (Size>8)
- {
- Trusted_IsNot("Variable Size Value parsing error");
- Info=0;
- return;
- }
- if (File_Offset+Buffer_Offset+Element_Offset>=Element[Element_Level].Next)
- {
- Trusted_IsNot("Not enough place to have a Variable Size Value");
- Info=0;
- return; //Not enough space
- }
-
- if (Trace_Activated)
- {
- Element_Offset-=Size;
- Param(Name, Info);
- Element_Offset+=Size;
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_VS(const char* Name)
-{
- //Element size
- int64u Info=0;
- int8u Size=0;
- bool more_data;
- BS_Begin();
- do
- {
- Size++;
- INTEGRITY_INT(8<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- more_data=BS->GetB();
- Info=128*Info+BS->Get1(7);
- }
- while (more_data && Size<=8 && BS->Remain());
- BS_End();
-
- //Integrity
- if (Size>8)
- {
- Trusted_IsNot("Variable Size Value parsing error");
- Info=0;
- return;
- }
- if (File_Offset+Buffer_Offset+Element_Offset>=Element[Element_Level].Next)
- {
- Trusted_IsNot("Not enough place to have a Variable Size Value");
- Info=0;
- return; //Not enough space
- }
-
- if (Trace_Activated)
- {
- Element_Offset-=Size;
- Param(Name, Info);
- Element_Offset+=Size;
- }
-}
-
-//***************************************************************************
-// Exp-Golomb
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_SE(int32s &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_BUFFER();
- int8u LeadingZeroBits=0;
- while(BS->Remain()>0 && !BS->GetB())
- LeadingZeroBits++;
- INTEGRITY(LeadingZeroBits<=32, "(Problem)", 0)
- double InfoD=pow((float)2, (float)LeadingZeroBits)-1+BS->Get4(LeadingZeroBits);
- INTEGRITY(InfoD<int32u(-1), "(Problem)", 0)
- Info=(int32s)(pow((double)-1, InfoD+1)*(int32u)ceil(InfoD/2));
-
- if (Trace_Activated)
- Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_SE(const char* Name)
-{
- INTEGRITY(BS->Remain(), "Size is wrong", 0)
- int8u LeadingZeroBits=0;
- while(BS->Remain()>0 && !BS->GetB())
- LeadingZeroBits++;
- if (Trace_Activated)
- {
- INTEGRITY(LeadingZeroBits<=32, "(Problem)", 0)
- double InfoD=pow((float)2, (float)LeadingZeroBits)-1+BS->Get4(LeadingZeroBits);
- INTEGRITY(InfoD<int32u(-1), "(Problem)", 0)
- Param(Name, (int32s)(pow(-1, InfoD+1)*(int32u)ceil(InfoD/2)));
- }
- else
- BS->Skip(LeadingZeroBits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UE(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_BUFFER();
- int8u LeadingZeroBits=0;
- while(BS->Remain()>0 && !BS->GetB())
- LeadingZeroBits++;
- INTEGRITY(LeadingZeroBits<=32, "(Problem)", 0)
- double InfoD=pow(2, (float)LeadingZeroBits);
- Info=(int32u)InfoD-1+BS->Get4(LeadingZeroBits);
-
- if (Trace_Activated)
- Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_UE(const char* Name)
-{
- INTEGRITY(BS->Remain(), "Size is wrong", 0)
- int8u LeadingZeroBits=0;
- while(BS->Remain()>0 && !BS->GetB())
- LeadingZeroBits++;
- if (Trace_Activated)
- {
- INTEGRITY(LeadingZeroBits<=32, "(Problem)", 0)
- double InfoD=pow(2, (float)LeadingZeroBits);
- Param(Name, (int32u)InfoD-1+BS->Get4(LeadingZeroBits));
- }
- else
- BS->Skip(LeadingZeroBits);
-}
-
-//***************************************************************************
-// Inverted Exp-Golomb
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_SI(int32s &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_BUFFER();
-
- Info=1;
- while(BS->Remain()>0 && BS->GetB()==0)
- {
- Info<<=1;
- if (BS->Remain()==0)
- {
- Trusted_IsNot("(Problem)");
- Info=0;
- return;
- }
- if(BS->GetB()==1)
- Info++;
- }
- Info--;
-
- if (Info!=0 && BS->Remain()>0 && BS->GetB()==1)
- Info=-Info;
-
- if (Trace_Activated)
- Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_SI(const char* Name)
-{
- int32s Info;
- Get_SI(Info, Name);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UI(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_BUFFER();
- Info=1;
- while(BS->Remain()>0 && BS->GetB()==0)
- {
- Info<<=1;
- if (BS->Remain()==0)
- {
- Trusted_IsNot("(Problem)");
- Info=0;
- return;
- }
- if(BS->GetB()==1)
- Info++;
- }
- Info--;
-
- if (Trace_Activated)
- Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_UI(const char* Name)
-{
- int32u Info;
- Get_UI(Info, Name);
-}
-
-//***************************************************************************
-// Variable Length Code
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_VL(const vlc Vlc[], size_t &Info, const char* Name)
-{
- Info=0;
- int32u Value=0;
-
- int8u CountOfBits=0;
- for(;;)
- {
- switch (Vlc[Info].bit_increment)
- {
- case 255 :
- Trusted_IsNot("Variable Length Code error");
- return;
- default : ;
- Value<<=Vlc[Info].bit_increment;
- Value|=BS->Get1(Vlc[Info].bit_increment);
- CountOfBits+=Vlc[Info].bit_increment;
- break;
- case 1 :
- Value<<=1;
- if (BS->GetB())
- Value++;
- CountOfBits++;
- case 0 : ;
- }
-
- if (Value==Vlc[Info].value)
- {
- if (Trace_Activated)
- {
- Ztring ToDisplay=Ztring::ToZtring(Value, 2);
- ToDisplay.insert(0, CountOfBits-ToDisplay.size(), __T('0'));
- ToDisplay+=__T(" (")+Ztring::ToZtring(CountOfBits)+__T(" bits)");
- Param(Name, ToDisplay);
- }
- return;
- }
- Info++;
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_VL_Prepare(vlc_fast &Vlc)
-{
- Vlc.Array=new int8u[((size_t)1)<<Vlc.Size];
- Vlc.BitsToSkip=new int8u[((size_t)1)<<Vlc.Size];
- memset(Vlc.Array, 0xFF, ((size_t)1)<<Vlc.Size);
- int8u Increment=0;
- int8u Pos=0;
- for(; ; Pos++)
- {
- if (Vlc.Vlc[Pos].bit_increment==255)
- break;
- Increment+=Vlc.Vlc[Pos].bit_increment;
- size_t Value=Vlc.Vlc[Pos].value<<(Vlc.Size-Increment);
- size_t ToFill_Size=1<<(Vlc.Size-Increment);
- for (size_t ToFill_Pos=0; ToFill_Pos<ToFill_Size; ToFill_Pos++)
- {
- Vlc.Array[Value+ToFill_Pos]=Pos;
- Vlc.BitsToSkip[Value+ToFill_Pos]=Increment;
- }
- }
- for (size_t Pos2=0; Pos2<(((size_t)1)<<Vlc.Size); Pos2++)
- if (Vlc.Array[Pos2]==(int8u)-1)
- {
- Vlc.Array[Pos2]=Pos;
- Vlc.BitsToSkip[Pos2]=(int8u)-1;
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_VL(vlc_fast &Vlc, size_t &Info, const char* Name)
-{
- if (BS->Remain()<Vlc.Size)
- {
- Get_VL(Vlc.Vlc, Info, Name);
- return;
- }
-
- int32u Value=BS->Peek4(Vlc.Size);
- Info=Vlc.Array[Value];
-
- if (Vlc.BitsToSkip[Value]==(int8u)-1)
- {
- Trusted_IsNot("Variable Length Code error");
- return;
- }
-
- if (Trace_Activated)
- {
- Ztring ToDisplay=Ztring::ToZtring(Value, 2);
- ToDisplay.insert(0, Vlc.Size-ToDisplay.size(), __T('0'));
- ToDisplay.resize(Vlc.BitsToSkip[Value]);
- ToDisplay+=__T(" (")+Ztring::ToZtring(Vlc.BitsToSkip[Value])+__T(" bits)");
- Param(Name, ToDisplay);
- }
-
- BS->Skip(Vlc.BitsToSkip[Value]);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_VL(const vlc Vlc[], const char* Name)
-{
- size_t Info;
- Get_VL(Vlc, Info, Name);
-}
-
-//***************************************************************************
-// Characters
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C1(int8u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=CC1(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 1);
- Element_Offset+=1;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C2(int16u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=CC2(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 2);
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C3(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=CC3(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 3);
- Element_Offset+=3;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C4(int32u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=CC4(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 4, false);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C5(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=CC5(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 5);
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C6(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=CC6(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 6);
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C7(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=CC7(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 7);
- Element_Offset+=7;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C8(int64u &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=CC8(Buffer+Buffer_Offset+(size_t)Element_Offset);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 8);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_C1(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(1);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 1);
- Element_Offset+=1;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_C2(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(2);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 2);
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_C3(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(3);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 3);
- Element_Offset+=3;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_C4(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(4);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 4);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_C5(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(5);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 5);
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_C6(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(6);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 6);
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_C7(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(7);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 7);
- Element_Offset+=7;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_C8(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(8);
- if (Trace_Activated) Param(Name, Buffer+Buffer_Offset+(size_t)Element_Offset, 8);
- Element_Offset+=8;
-}
-
-//***************************************************************************
-// Text
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_Local(int64u Bytes, Ztring &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_Local((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ISO_6937_2(int64u Bytes, Ztring &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.clear();
- size_t End = Buffer_Offset + (size_t)Element_Offset + (size_t)Bytes;
- for (size_t Pos=Buffer_Offset+(size_t)Element_Offset; Pos<End; ++Pos)
- {
- wchar_t EscapeChar=L'\x0000';
- wchar_t NewChar=L'\x0000';
- switch (Buffer[Pos])
- {
- case 0xA9 : NewChar=L'\x2018'; break;
- case 0xAA : NewChar=L'\x201C'; break;
- case 0xAC : NewChar=L'\x2190'; break;
- case 0xAD : NewChar=L'\x2191'; break;
- case 0xAE : NewChar=L'\x2192'; break;
- case 0xAF : NewChar=L'\x2193'; break;
- case 0xB4 : NewChar=L'\x00D7'; break;
- case 0xB8 : NewChar=L'\x00F7'; break;
- case 0xB9 : NewChar=L'\x2019'; break;
- case 0xBA : NewChar=L'\x201D'; break;
- case 0xC1 : EscapeChar=L'\x0300'; break;
- case 0xC2 : EscapeChar=L'\x0301'; break;
- case 0xC3 : EscapeChar=L'\x0302'; break;
- case 0xC4 : EscapeChar=L'\x0303'; break;
- case 0xC5 : EscapeChar=L'\x0304'; break;
- case 0xC6 : EscapeChar=L'\x0306'; break;
- case 0xC7 : EscapeChar=L'\x0307'; break;
- case 0xC8 : EscapeChar=L'\x0308'; break;
- case 0xCA : EscapeChar=L'\x030A'; break;
- case 0xCB : EscapeChar=L'\x0327'; break;
- case 0xCD : EscapeChar=L'\x030B'; break;
- case 0xCE : EscapeChar=L'\x0328'; break;
- case 0xCF : EscapeChar=L'\x030C'; break;
- case 0xD0 : NewChar=L'\x2015'; break;
- case 0xD1 : NewChar=L'\x00B9'; break;
- case 0xD2 : NewChar=L'\x00AE'; break;
- case 0xD3 : NewChar=L'\x00A9'; break;
- case 0xD4 : NewChar=L'\x2122'; break;
- case 0xD5 : NewChar=L'\x266A'; break;
- case 0xD6 : NewChar=L'\x00AC'; break;
- case 0xD7 : NewChar=L'\x00A6'; break;
- case 0xDC : NewChar=L'\x215B'; break;
- case 0xDD : NewChar=L'\x215C'; break;
- case 0xDE : NewChar=L'\x215D'; break;
- case 0xDF : NewChar=L'\x215E'; break;
- case 0xE0 : NewChar=L'\x2126'; break;
- case 0xE1 : NewChar=L'\x00C6'; break;
- case 0xE2 : NewChar=L'\x0110'; break;
- case 0xE3 : NewChar=L'\x00AA'; break;
- case 0xE4 : NewChar=L'\x0126'; break;
- case 0xE6 : NewChar=L'\x0132'; break;
- case 0xE7 : NewChar=L'\x013F'; break;
- case 0xE8 : NewChar=L'\x0141'; break;
- case 0xE9 : NewChar=L'\x00D8'; break;
- case 0xEA : NewChar=L'\x0152'; break;
- case 0xEB : NewChar=L'\x00BA'; break;
- case 0xEC : NewChar=L'\x00DE'; break;
- case 0xED : NewChar=L'\x0166'; break;
- case 0xEE : NewChar=L'\x014A'; break;
- case 0xEF : NewChar=L'\x0149'; break;
- case 0xF0 : NewChar=L'\x0138'; break;
- case 0xF1 : NewChar=L'\x00E6'; break;
- case 0xF2 : NewChar=L'\x0111'; break;
- case 0xF3 : NewChar=L'\x00F0'; break;
- case 0xF4 : NewChar=L'\x0127'; break;
- case 0xF5 : NewChar=L'\x0131'; break;
- case 0xF6 : NewChar=L'\x0133'; break;
- case 0xF7 : NewChar=L'\x0140'; break;
- case 0xF8 : NewChar=L'\x0142'; break;
- case 0xF9 : NewChar=L'\x00F8'; break;
- case 0xFA : NewChar=L'\x0153'; break;
- case 0xFB : NewChar=L'\x0153'; break;
- case 0xFC : NewChar=L'\x00FE'; break;
- case 0xFD : NewChar=L'\x00FE'; break;
- case 0xFE : NewChar=L'\x014B'; break;
- case 0xFF : NewChar=L'\x00AD'; break;
- case 0xC0 :
- case 0xC9 :
- case 0xCC :
- case 0xD8 :
- case 0xD9 :
- case 0xDA :
- case 0xDB :
- case 0xE5 :
- break;
- default : NewChar=(Char)(Buffer[Pos]);
- }
-
- if (EscapeChar)
- {
- if (Pos+1<End)
- {
- Info+=(Char)(Buffer[Pos+1]);
- Info+=Ztring().From_Unicode(&EscapeChar, 1); //(EscapeChar) after new ZenLib release
- EscapeChar=L'\x0000';
- Pos++;
- }
- }
- else if (NewChar)
- Info+=Ztring().From_Unicode(&NewChar, 1); //(NewChar) after new ZenLib release
- }
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ISO_8859_1(int64u Bytes, Ztring &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_ISO_8859_1((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ISO_8859_2(int64u Bytes, Ztring &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_ISO_8859_2((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ISO_8859_5(int64u Bytes, Ztring &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.clear();
- size_t End = Buffer_Offset + (size_t)Element_Offset + (size_t)Bytes;
- for (size_t Pos=Buffer_Offset+(size_t)Element_Offset; Pos<End; ++Pos)
- {
- switch (Buffer[Pos])
- {
- case 0xAD : Info+=Ztring().From_Unicode(L"\xAD"); break; //L'\xAD' after new ZenLib release
- case 0xF0 : Info+=Ztring().From_Unicode(L"\x2116"); break; //L'\x2116' after new ZenLib release
- case 0xFD : Info+=Ztring().From_Unicode(L"\xA7"); break; //L'\xA7' after new ZenLib release
- default :
- {
- wchar_t NewChar=(Buffer[Pos]<=0xA0?0x0000:0x0360)+Buffer[Pos];
- Info+=Ztring().From_Unicode(&NewChar, 1); //(NewChar) after new ZenLib release
- }
- }
- }
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_String(int64u Bytes, std::string &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.assign((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_Local(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_Local((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_String(int64u Bytes, std::string &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.assign((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UTF8(int64u Bytes, Ztring &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_UTF8((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UTF16(int64u Bytes, Ztring &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_UTF16((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UTF16B(int64u Bytes, Ztring &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_UTF16BE((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UTF16L(int64u Bytes, Ztring &Info, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_UTF16LE((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- if (Trace_Activated && Bytes) Param(Name, Info);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_Local(int64u Bytes, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(Bytes);
- if (Trace_Activated && Bytes) Param(Name, Ztring().From_Local((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes));
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_ISO_6937_2(int64u Bytes, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(Bytes);
- if (Trace_Activated && Bytes)
- {
- Ztring Temp;
- Get_ISO_6937_2(Bytes, Temp, Name);
- }
- else
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_String(int64u Bytes, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(Bytes);
- if (Trace_Activated && Bytes) Param(Name, Ztring().From_Local((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes));
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_UTF8(int64u Bytes, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(Bytes);
- if (Trace_Activated && Bytes) Param(Name, Ztring().From_UTF8((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes));
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_UTF16B(int64u Bytes, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(Bytes);
- if (Trace_Activated && Bytes) Param(Name, Ztring().From_UTF16BE((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes));
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_UTF16L(int64u Bytes, const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(Bytes);
- if (Trace_Activated && Bytes) Param(Name, Ztring().From_UTF16LE((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes));
- Element_Offset+=Bytes;
-}
-
-//***************************************************************************
-// Text
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_PA(const char* Name)
-{
- INTEGRITY_SIZE_ATLEAST(1);
- int8u Size=Buffer[Buffer_Offset+(size_t)Element_Offset];
- INTEGRITY_SIZE_ATLEAST(1+Size);
- if (Trace_Activated && Size) Param(Name, Ztring().From_Local((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset+1), (size_t)Size));
- Element_Offset+=1+Size;
-}
-
-//***************************************************************************
-// Unknown
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_XX(int64u Bytes, const char* Name)
-{
- if (Element_Offset+Bytes!=Element_TotalSize_Get()) //Exception for seek to end of the element
- {
- INTEGRITY_SIZE_ATLEAST(Bytes);
- }
- if (Trace_Activated && Bytes) Param(Name, Ztring("(")+Ztring::ToZtring(Bytes)+Ztring(" bytes)"));
- Element_Offset+=Bytes;
-}
-
-//***************************************************************************
-// Flags
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_Flags (int64u Flags, size_t Order, bool &Info, const char* Name)
-{
- if (Flags&((int64u)1<<Order))
- Info=true;
- else
- Info=false;
-
- Element_Begin0();
- if (Trace_Activated) Param(Name, Info?"Yes":"No");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_Flags (int64u ValueToPut, int8u &Info, const char* Name)
-{
- Info=(int8u)ValueToPut;
-
- Element_Begin0();
- if (Trace_Activated) Param(Name, Info);
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_Flags(int64u Flags, size_t Order, const char* Name)
-{
- Element_Begin0();
- if (Trace_Activated) Param(Name, (Flags&((int64u)1<<Order))?"Yes":"No");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_Flags(int64u ValueToPut, const char* Name)
-{
- Element_Begin0();
- if (Trace_Activated) Param(Name, ValueToPut);
- Element_End0();
-}
-
-//***************************************************************************
-// BitStream
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BS(int8u Bits, int32u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Get4(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_SB( bool &Info, const char* Name)
-{
- INTEGRITY_INT(1<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->GetB();
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S1(int8u Bits, int8u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Get1(Bits);
- if (Trace_Activated)
- {
- Param(Name, Info);
- Param_Info(__T("(")+Ztring::ToZtring(Bits)+__T(" bits)"));
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S2(int8u Bits, int16u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Get2(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S3(int8u Bits, int32u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Get4(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S4(int8u Bits, int32u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Get4(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S5(int8u Bits, int64u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Get8(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S6(int8u Bits, int64u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Get8(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S7(int8u Bits, int64u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Get8(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S8(int8u Bits, int64u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Get8(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_BS(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Peek4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_SB( bool &Info)
-{
- INTEGRITY_INT(1<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->PeekB();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S1(int8u Bits, int8u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Peek1(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S2(int8u Bits, int16u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Peek2(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S3(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Peek4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S4(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Peek4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S5(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Peek8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S6(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Peek8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S7(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Peek8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S8(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- Info=BS->Peek8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_BS(size_t Bits, const char* Name)
-{
- INTEGRITY(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- {
- if (Bits<=32) //TODO: in BitStream.h, handle >32 bit gets
- Param(Name, BS->Get4((int8u)Bits));
- else
- {
- Param(Name, "(Data)");
- BS->Skip(Bits);
- }
- }
- else
- BS->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_SB( const char* Name)
-{
- INTEGRITY(1<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- Param(Name, BS->GetB());
- else
- BS->Skip(1);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_S1(int8u Bits, const char* Name)
-{
- INTEGRITY(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- {
- Param(Name, BS->Get1(Bits));
- Param_Info(__T("(")+Ztring::ToZtring(Bits)+__T(" bits)"));
- }
- else
- BS->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_S2(int8u Bits, const char* Name)
-{
- INTEGRITY(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- Param(Name, BS->Get2(Bits));
- else
- BS->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_S3(int8u Bits, const char* Name)
-{
- INTEGRITY(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- Param(Name, BS->Get4(Bits));
- else
- BS->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_S4(int8u Bits, const char* Name)
-{
- INTEGRITY(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- Param(Name, BS->Get4(Bits));
- else
- BS->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_S5(int8u Bits, const char* Name)
-{
- INTEGRITY(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- Param(Name, BS->Get8(Bits));
- else
- BS->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_S6(int8u Bits, const char* Name)
-{
- INTEGRITY(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- Param(Name, BS->Get8(Bits));
- else
- BS->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_S7(int8u Bits, const char* Name)
-{
- INTEGRITY(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- Param(Name, BS->Get8(Bits));
- else
- BS->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_S8(int8u Bits, const char* Name)
-{
- INTEGRITY(Bits<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- if (Trace_Activated)
- Param(Name, BS->Get8(Bits));
- else
- BS->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Mark_0()
-{
- INTEGRITY(1<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- bool Info=BS->GetB();
- if (Info)
- {
- Param("0", Info);
- Element_DoNotTrust("Mark bit is wrong");
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Mark_0_NoTrustError()
-{
- INTEGRITY(1<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- bool Info=BS->GetB();
- if (Info)
- {
- Param("0", Info);
- Param_Info("Warning: should be 0");
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Mark_1()
-{
- INTEGRITY(1<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- bool Info=BS->GetB();
- if (!Info)
- {
- Param("1", Info);
- Element_DoNotTrust("Mark bit is wrong");
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Mark_1_NoTrustError()
-{
- INTEGRITY(1<=BS->Remain(), "Size is wrong", BS->Offset_Get())
- bool Info=BS->GetB();
- if (!Info)
- {
- Param("1", Info);
- Param_Info("Warning: should be 1");
- }
-}
-
-//***************************************************************************
-// BitStream (Little Endian)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BT(size_t Bits, int32u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Get(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_TB( bool &Info, const char* Name)
-{
- INTEGRITY_INT(1<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->GetB();
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_T1(size_t Bits, int8u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Get1(Bits);
- if (Trace_Activated)
- {
- Param(Name, Info);
- Param_Info(__T("(")+Ztring::ToZtring(Bits)+__T(" bits)"));
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_T2(size_t Bits, int16u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Get2(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_T4(size_t Bits, int32u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Get4(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_T8(size_t Bits, int64u &Info, const char* Name)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Get8(Bits);
- if (Trace_Activated) Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_BT(size_t Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Peek(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_TB( bool &Info)
-{
- INTEGRITY_INT(1<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->PeekB();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_T1(size_t Bits, int8u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Peek1(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_T2(size_t Bits, int16u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Peek2(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_T4(size_t Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Peek4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_T8(size_t Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- Info=BT->Peek8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_BT(size_t Bits, const char* Name)
-{
- INTEGRITY(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- if (Trace_Activated)
- {
- if (Bits<=32) //TODO: in BitStream.h, handle >32 bit gets
- Param(Name, BT->Get(Bits));
- else
- {
- Param(Name, "(Data)");
- BT->Skip(Bits);
- }
- }
- else
- BT->Skip(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_TB( const char* Name)
-{
- INTEGRITY(1<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- if (Trace_Activated)
- Param(Name, BT->GetB());
- else
- BT->SkipB();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_T1(size_t Bits, const char* Name)
-{
- INTEGRITY(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- if (Trace_Activated)
- {
- Param(Name, BT->Get1(Bits));
- Param_Info(__T("(")+Ztring::ToZtring(Bits)+__T(" bits)"));
- }
- else
- BT->Skip1(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_T2(size_t Bits, const char* Name)
-{
- INTEGRITY(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- if (Trace_Activated)
- Param(Name, BT->Get2(Bits));
- else
- BT->Skip2(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_T4(size_t Bits, const char* Name)
-{
- INTEGRITY(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- if (Trace_Activated)
- Param(Name, BT->Get4(Bits));
- else
- BT->Skip4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_T8(size_t Bits, const char* Name)
-{
- INTEGRITY(Bits<=BT->Remain(), "Size is wrong", BT->Offset_Get())
- if (Trace_Activated)
- Param(Name, BT->Get8(Bits));
- else
- BT->Skip8(Bits);
-}
-
-} //NameSpace
-#endif //MEDIAINFO_TRACE
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Buffer_MinimizeSize.cpp b/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Buffer_MinimizeSize.cpp
deleted file mode 100644
index a434ba068..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Buffer_MinimizeSize.cpp
+++ /dev/null
@@ -1,1704 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-#if !MEDIAINFO_TRACE
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "ZenLib/BitStream_LE.h"
-#include <cmath>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//Integrity test
-#define INTEGRITY(TOVALIDATE) \
- if (!(TOVALIDATE)) \
- { \
- Trusted_IsNot(); \
- return; \
- } \
-
-#define INTEGRITY_BOOL(TOVALIDATE) \
- if (!(TOVALIDATE)) \
- { \
- Trusted_IsNot(); \
- Info=false; \
- return; \
- } \
-
-#define INTEGRITY_INT(TOVALIDATE) \
- if (!(TOVALIDATE)) \
- { \
- Trusted_IsNot(); \
- Info=0; \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST(_BYTES) \
- if (Element_Offset+_BYTES>Element_Size) \
- { \
- Trusted_IsNot(); \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST_STRING(_BYTES) \
- if (Element_Offset+_BYTES>Element_Size) \
- { \
- Trusted_IsNot(); \
- Info.clear(); \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST_INT(_BYTES) \
- if (Element_Offset+_BYTES>Element_Size) \
- { \
- Trusted_IsNot(); \
- Info=0; \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST_BUFFER() \
- if (BS->Remain()==0) \
- { \
- Trusted_IsNot(); \
- Info=0; \
- return; \
- } \
-
-//***************************************************************************
-// Init
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::BS_Begin()
-{
- size_t BS_Size;
- if (Element_Offset>=Element_Size)
- BS_Size=0;
- else if (Buffer_Offset+Element_Size<=Buffer_Size)
- BS_Size=(size_t)(Element_Size-Element_Offset);
- else if (Buffer_Offset+Element_Offset<=Buffer_Size)
- BS_Size=Buffer_Size-(size_t)(Buffer_Offset+Element_Offset);
- else
- BS_Size=0;
-
- BS->Attach(Buffer+Buffer_Offset+(size_t)Element_Offset, BS_Size);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::BS_Begin_LE()
-{
- size_t BS_Size;
- if (Buffer_Offset+Element_Size<=Buffer_Size)
- BS_Size=(size_t)(Element_Size-Element_Offset);
- else if (Buffer_Offset+Element_Offset<=Buffer_Size)
- BS_Size=Buffer_Size-(size_t)(Buffer_Offset+Element_Offset);
- else
- BS_Size=0;
-
- BT->Attach(Buffer+Buffer_Offset+(size_t)Element_Offset, BS_Size);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::BS_End()
-{
- BS->Byte_Align();
- Element_Offset+=BS->Offset_Get();
- BS->Attach(NULL, 0);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::BS_End_LE()
-{
- BT->Byte_Align();
- Element_Offset+=BT->Offset_Get();
- BT->Attach(NULL, 0);
-}
-
-//***************************************************************************
-// Big Endian
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B1_(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=BigEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=1;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B2_(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B3_(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=BigEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=3;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B4_(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B5_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=BigEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B6_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=BigEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B7_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=BigEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=7;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B8_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_B16_(int128u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- //Info=BigEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.hi=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.lo=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset+8);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BF4_(float32 &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=BigEndian2float32(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BF8_(float64 &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=BigEndian2float64(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BF10_(float80 &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(10);
- Info=BigEndian2float80(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=10;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BFP4_(int8u Bits, float32 &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- BS_Begin();
- int32s Integer=(int32s)BS->Get4(Bits);
- int32u Fraction=BS->Get4(32-Bits);
- BS_End();
- if (Integer>=(1<<Bits)/2)
- Integer-=1<<Bits;
- Info=Integer+((float32)Fraction)/(1<<(32-Bits));
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B1(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=BigEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B2(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B3(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=BigEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B4(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B5(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=BigEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B6(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=BigEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B7(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=BigEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B8(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_B16(int128u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info=BigEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//***************************************************************************
-// Little Endian
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L1_(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=1;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L2_(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L3_(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=3;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L4_(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L5_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L6_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L7_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=7;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L8_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_L16_(int128u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- //Info=LittleEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.lo=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.hi=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset+8);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_LF4_(float32 &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2float32(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_LF8_(float64 &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2float64(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L1(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L2(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L3(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L4(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L5(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L6(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L7(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_L8(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//***************************************************************************
-// Little and Big Endian together
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D1_(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D2_(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D3_(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D4_(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D5_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(10);
- Info=LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=10;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D6_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(12);
- Info=LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=12;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D7_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(14);
- Info=LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=14;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D8_(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_D16_(int128u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(32);
- //Info=LittleEndian2int128u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.lo=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.hi=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset+8);
- Element_Offset+=32;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_DF4_(float32 &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2float32(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=8;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_DF8_(float64 &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info=LittleEndian2float64(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=16;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D1(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D2(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D3(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=LittleEndian2int24u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D4(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D5(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(10);
- Info=LittleEndian2int40u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D6(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(12);
- Info=LittleEndian2int48u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D7(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(14);
- Info=LittleEndian2int56u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_D8(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
-}
-
-//***************************************************************************
-// GUID
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_GUID(int128u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(16);
- Info.hi=LittleEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Info.lo=BigEndian2int64u (Buffer+Buffer_Offset+(size_t)Element_Offset+8);
- Element_Offset+=16;
-}
-
-//***************************************************************************
-// EBML
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_EB(int64u &Info)
-{
- //Element size
- INTEGRITY_SIZE_ATLEAST_INT(1);
- if (Buffer[Buffer_Offset+Element_Offset]==0xFF)
- {
- Info=File_Size-(File_Offset+Buffer_Offset+Element_Offset);
- Element_Offset++;
- return;
- }
- int8u Size=0;
- int8u Size_Mark=0;
- BS_Begin();
- while (Size_Mark==0 && BS->Remain() && Size<=8)
- {
- Size++;
- Peek_S1(Size, Size_Mark);
- }
-
- //Integrity
- if (!BS->Remain() || Size>8)
- {
- if (Size>8)
- {
- //Element[Element_Level].IsComplete=true; //If it is in a header
- Trusted_IsNot("EBML integer parsing error");
- }
- Info=0;
- return;
- }
- BS_End();
- if (File_Offset+Buffer_Offset+Element_Offset>=Element[Element_Level].Next)
- {
- //Element[Element_Level].IsComplete=true; //If it is in a header
- Trusted_IsNot("Not enough place to have an EBML");
- Info=0;
- return; //Not enough space
- }
- INTEGRITY_SIZE_ATLEAST_INT(Size);
-
- //Element Name
- switch (Size)
- {
- case 1 : {
- int8u Element_Name;
- Peek_B1 (Element_Name);
- Info=Element_Name&0x7F; //Keep out first bit
- }
- break;
- case 2 : {
- int16u Element_Name;
- Peek_B2(Element_Name);
- Info=Element_Name&0x3FFF; //Keep out first bits
- }
- break;
- case 3 : {
- int32u Element_Name;
- Peek_B3(Element_Name);
- Info=Element_Name&0x1FFFFF; //Keep out first bits
- }
- break;
- case 4 : {
- int32u Element_Name;
- Peek_B4(Element_Name);
- Info=Element_Name&0x0FFFFFFF; //Keep out first bits
- }
- break;
- case 5 : {
- int64u Element_Name;
- Peek_B5(Element_Name);
- Info=Element_Name&0x07FFFFFFFFLL; //Keep out first bits
- }
- break;
- case 6 : {
- int64u Element_Name;
- Peek_B6(Element_Name);
- Info=Element_Name&0x03FFFFFFFFFFLL; //Keep out first bits
- }
- break;
- case 7 : {
- int64u Element_Name;
- Peek_B7(Element_Name);
- Info=Element_Name&0x01FFFFFFFFFFFFLL; //Keep out first bits
- }
- break;
- case 8 : {
- int64u Element_Name;
- Peek_B8(Element_Name);
- Info=Element_Name&0x00FFFFFFFFFFFFFFLL; //Keep out first bits
- }
- break;
- }
-
- Element_Offset+=Size;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ES(int64s &Info)
-{
- //Element size
- INTEGRITY_SIZE_ATLEAST_INT(1);
- int8u Size=0;
- int8u Size_Mark=0;
- BS_Begin();
- while (Size_Mark==0 && BS->Remain() && Size<=8)
- {
- Size++;
- Peek_S1(Size, Size_Mark);
- }
-
- //Integrity
- if (!BS->Remain() || Size>8)
- {
- if (Size>8)
- {
- //Element[Element_Level].IsComplete=true; //If it is in a header
- Trusted_IsNot("EBML integer parsing error");
- }
- Info=0;
- return;
- }
- BS_End();
- if (File_Offset+Buffer_Offset+Element_Offset>=Element[Element_Level].Next)
- {
- //Element[Element_Level].IsComplete=true; //If it is in a header
- Trusted_IsNot("Not enough place to have an EBML");
- Info=0;
- return; //Not enough space
- }
- INTEGRITY_SIZE_ATLEAST_INT(Size);
-
- //Element Name
- switch (Size)
- {
- case 1 : {
- int8u Element_Name;
- Peek_B1 (Element_Name);
- Info=(Element_Name&0x7F)-0x3F; //Keep out first bit and sign
- }
- break;
- case 2 : {
- int16u Element_Name;
- Peek_B2(Element_Name);
- Info=(Element_Name&0x3FFF)-0x1FFF; //Keep out first bits and sign
- }
- break;
- case 3 : {
- int32u Element_Name;
- Peek_B3(Element_Name);
- Info=(Element_Name&0x1FFFFF)-0x0FFFFF; //Keep out first bits and sign
- }
- break;
- case 4 : {
- int32u Element_Name;
- Peek_B4(Element_Name);
- Info=(Element_Name&0x0FFFFFFF)-0x07FFFFFF; //Keep out first bits and sign
- }
- break;
- case 5 : {
- int64u Element_Name;
- Peek_B5(Element_Name);
- Info=(Element_Name&0x07FFFFFFFFLL)-0x03FFFFFFFFLL; //Keep out first bits and sign
- }
- break;
- case 6 : {
- int64u Element_Name;
- Peek_B6(Element_Name);
- Info=(Element_Name&0x03FFFFFFFFFFLL)-0x01FFFFFFFFFFLL; //Keep out first bits and sign
- }
- break;
- case 7 : {
- int64u Element_Name;
- Peek_B7(Element_Name);
- Info=(Element_Name&0x01FFFFFFFFFFFFLL)-0x00FFFFFFFFFFFFLL; //Keep out first bits and sign
- }
- break;
- case 8 : {
- int64u Element_Name;
- Peek_B8(Element_Name);
- Info=(Element_Name&0x00FFFFFFFFFFFFFFLL)-0x007FFFFFFFFFFFFFLL; //Keep out first bits and sign
- }
- break;
- }
-
- Element_Offset+=Size;
-}
-
-//***************************************************************************
-// Variable Length Value
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_VS(int64u &Info)
-{
- //Element size
- Info=0;
- int8u Size=0;
- bool more_data;
- BS_Begin();
- do
- {
- Size++;
- INTEGRITY_INT(8<=BS->Remain())
- more_data=BS->GetB();
- Info=128*Info+BS->Get1(7);
- }
- while (more_data && Size<=8 && BS->Remain());
- BS_End();
-
- //Integrity
- if (Size>8)
- {
- Trusted_IsNot("Variable Length Value parsing error");
- Info=0;
- return;
- }
- if (File_Offset+Buffer_Offset+Element_Offset>=Element[Element_Level].Next)
- {
- Trusted_IsNot("Not enough place to have a Variable Length Value");
- Info=0;
- return; //Not enough space
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_VS()
-{
- //Element size
- int64u Info=0;
- int8u Size=0;
- bool more_data;
- BS_Begin();
- do
- {
- Size++;
- INTEGRITY_INT(8<=BS->Remain())
- more_data=BS->GetB();
- Info=128*Info+BS->Get1(7);
- }
- while (more_data && Size<=8 && BS->Remain());
- BS_End();
-
- //Integrity
- if (Size>8)
- {
- Trusted_IsNot("Variable Size Value parsing error");
- Info=0;
- return;
- }
- if (File_Offset+Buffer_Offset+Element_Offset>=Element[Element_Level].Next)
- {
- Trusted_IsNot("Not enough place to have a Variable Size Value");
- Info=0;
- return; //Not enough space
- }
-}
-
-//***************************************************************************
-// Exp-Golomb
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_SE(int32s &Info)
-{
- INTEGRITY_SIZE_ATLEAST_BUFFER();
- int8u LeadingZeroBits=0;
- while(BS->Remain()>0 && !BS->GetB())
- LeadingZeroBits++;
- INTEGRITY(LeadingZeroBits<=32)
- double InfoD=pow((float)2, (float)LeadingZeroBits)-1+BS->Get4(LeadingZeroBits);
- INTEGRITY(InfoD<int32u(-1))
- Info=(int32s)(pow((double)-1, InfoD+1)*(int32u)ceil(InfoD/2));
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UE(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_BUFFER();
- int8u LeadingZeroBits=0;
- while(BS->Remain()>0 && !BS->GetB())
- LeadingZeroBits++;
- INTEGRITY(LeadingZeroBits<=32)
- double InfoD=pow((float)2, (float)LeadingZeroBits);
- Info=(int32u)InfoD-1+BS->Get4(LeadingZeroBits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_UE()
-{
- INTEGRITY(BS->Remain())
- int8u LeadingZeroBits=0;
- while(BS->Remain()>0 && !BS->GetB())
- LeadingZeroBits++;
- BS->Skip(LeadingZeroBits);
-}
-
-//***************************************************************************
-// Inverted Exp-Golomb
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_SI(int32s &Info)
-{
- INTEGRITY_SIZE_ATLEAST_BUFFER();
-
- Info=1;
- while(BS->Remain()>0 && BS->GetB()==0)
- {
- Info<<=1;
- if (BS->Remain()==0)
- {
- Trusted_IsNot("(Problem)");
- Info=0;
- return;
- }
- if(BS->GetB()==1)
- Info++;
- }
- Info--;
-
- if (Info!=0 && BS->Remain()>0 && BS->GetB()==1)
- Info=-Info;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_SI()
-{
- int32s Info;
- Get_SI(Info);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UI(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_BUFFER();
- Info=1;
- while(BS->Remain()>0 && BS->GetB()==0)
- {
- Info<<=1;
- if (BS->Remain()==0)
- {
- Trusted_IsNot("(Problem)");
- Info=0;
- return;
- }
- if(BS->GetB()==1)
- Info++;
- }
- Info--;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_UI()
-{
- int32u Info;
- Get_UI(Info);
-}
-
-//***************************************************************************
-// Variable Length Code
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_VL_(const vlc Vlc[], size_t &Info)
-{
- Info=0;
- int32u Value=0;
-
- for(;;)
- {
- switch (Vlc[Info].bit_increment)
- {
- case 255 :
- Trusted_IsNot();
- return;
- default : ;
- Value<<=Vlc[Info].bit_increment;
- Value|=BS->Get1(Vlc[Info].bit_increment);
- break;
- case 1 :
- Value<<=1;
- if (BS->GetB())
- Value++;
- case 0 : ;
- }
-
- if (Value==Vlc[Info].value)
- return;
- Info++;
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_VL_(const vlc Vlc[])
-{
- size_t Info=0;
- int32u Value=0;
-
- for(;;)
- {
- switch (Vlc[Info].bit_increment)
- {
- case 255 :
- Trusted_IsNot();
- return;
- default : ;
- Value<<=Vlc[Info].bit_increment;
- Value|=BS->Get1(Vlc[Info].bit_increment);
- break;
- case 1 :
- Value<<=1;
- if (BS->GetB())
- Value++;
- case 0 : ;
- }
-
- if (Value==Vlc[Info].value)
- return;
- Info++;
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_VL_Prepare(vlc_fast &Vlc)
-{
- Vlc.Array=new int8u[((size_t)1)<<Vlc.Size];
- Vlc.BitsToSkip=new int8u[((size_t)1)<<Vlc.Size];
- memset(Vlc.Array, 0xFF, ((size_t)1)<<Vlc.Size);
- int8u Increment=0;
- int8u Pos=0;
- for(; ; Pos++)
- {
- if (Vlc.Vlc[Pos].bit_increment==255)
- break;
- Increment+=Vlc.Vlc[Pos].bit_increment;
- size_t Value = ((size_t)Vlc.Vlc[Pos].value) << (Vlc.Size - Increment);
- size_t ToFill_Size=((size_t)1)<<(Vlc.Size-Increment);
- for (size_t ToFill_Pos=0; ToFill_Pos<ToFill_Size; ToFill_Pos++)
- {
- Vlc.Array[Value+ToFill_Pos]=Pos;
- Vlc.BitsToSkip[Value+ToFill_Pos]=Increment;
- }
- }
- for (size_t Pos2=0; Pos2<(((size_t)1)<<Vlc.Size); Pos2++)
- if (Vlc.Array[Pos2]==(int8u)-1)
- {
- Vlc.Array[Pos2]=Pos;
- Vlc.BitsToSkip[Pos2]=(int8u)-1;
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_VL_(const vlc_fast &Vlc, size_t &Info)
-{
- if (BS->Remain()<Vlc.Size)
- {
- Get_VL(Vlc.Vlc, Info, Name);
- return;
- }
-
- int32u Value=BS->Peek4(Vlc.Size);
- Info=Vlc.Array[Value];
-
- if (Vlc.BitsToSkip[Value]==(int8u)-1)
- {
- Trusted_IsNot();
- return;
- }
-
- BS->Skip(Vlc.BitsToSkip[Value]);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_VL_(const vlc_fast &Vlc)
-{
- if (BS->Remain()<Vlc.Size)
- {
- Skip_VL_(Vlc.Vlc);
- return;
- }
-
- int32u Value=BS->Peek4(Vlc.Size);
-
- if (Vlc.BitsToSkip[Value]==(int8u)-1)
- {
- Trusted_IsNot();
- return;
- }
-
- BS->Skip(Vlc.BitsToSkip[Value]);
-}
-
-//***************************************************************************
-// Characters
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C1(int8u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(1);
- Info=CC1(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=1;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C2(int16u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(2);
- Info=CC2(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=2;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C3(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(3);
- Info=CC3(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=3;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C4(int32u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(4);
- Info=CC4(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C5(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(5);
- Info=CC5(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=5;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C6(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(6);
- Info=CC6(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=6;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C7(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(7);
- Info=CC7(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=7;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_C8(int64u &Info)
-{
- INTEGRITY_SIZE_ATLEAST_INT(8);
- Info=CC8(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=8;
-}
-
-//***************************************************************************
-// Text
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_Local(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_Local((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ISO_6937_2(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.clear();
- size_t End = Buffer_Offset + (size_t)Element_Offset + (size_t)Bytes;
- for (size_t Pos=Buffer_Offset+(size_t)Element_Offset; Pos<End; ++Pos)
- {
- wchar_t EscapeChar=__T('\x0000');
- wchar_t NewChar=__T('\x0000');
- switch (Buffer[Pos])
- {
- case 0xA9 : NewChar=__T('\x2018'); break;
- case 0xAA : NewChar=__T('\x201C'); break;
- case 0xAC : NewChar=__T('\x2190'); break;
- case 0xAD : NewChar=__T('\x2191'); break;
- case 0xAE : NewChar=__T('\x2192'); break;
- case 0xAF : NewChar=__T('\x2193'); break;
- case 0xB4 : NewChar=__T('\x00D7'); break;
- case 0xB8 : NewChar=__T('\x00F7'); break;
- case 0xB9 : NewChar=__T('\x2019'); break;
- case 0xBA : NewChar=__T('\x201D'); break;
- case 0xC1 : EscapeChar=__T('\x0300'); break;
- case 0xC2 : EscapeChar=__T('\x0301'); break;
- case 0xC3 : EscapeChar=__T('\x0302'); break;
- case 0xC4 : EscapeChar=__T('\x0303'); break;
- case 0xC5 : EscapeChar=__T('\x0304'); break;
- case 0xC6 : EscapeChar=__T('\x0306'); break;
- case 0xC7 : EscapeChar=__T('\x0307'); break;
- case 0xC8 : EscapeChar=__T('\x0308'); break;
- case 0xCA : EscapeChar=__T('\x030A'); break;
- case 0xCB : EscapeChar=__T('\x0327'); break;
- case 0xCD : EscapeChar=__T('\x030B'); break;
- case 0xCE : EscapeChar=__T('\x0328'); break;
- case 0xCF : EscapeChar=__T('\x030C'); break;
- case 0xD0 : NewChar=__T('\x2015'); break;
- case 0xD1 : NewChar=__T('\x00B9'); break;
- case 0xD2 : NewChar=__T('\x00AE'); break;
- case 0xD3 : NewChar=__T('\x00A9'); break;
- case 0xD4 : NewChar=__T('\x2122'); break;
- case 0xD5 : NewChar=__T('\x266A'); break;
- case 0xD6 : NewChar=__T('\x00AC'); break;
- case 0xD7 : NewChar=__T('\x00A6'); break;
- case 0xDC : NewChar=__T('\x215B'); break;
- case 0xDD : NewChar=__T('\x215C'); break;
- case 0xDE : NewChar=__T('\x215D'); break;
- case 0xDF : NewChar=__T('\x215E'); break;
- case 0xE0 : NewChar=__T('\x2126'); break;
- case 0xE1 : NewChar=__T('\x00C6'); break;
- case 0xE2 : NewChar=__T('\x0110'); break;
- case 0xE3 : NewChar=__T('\x00AA'); break;
- case 0xE4 : NewChar=__T('\x0126'); break;
- case 0xE6 : NewChar=__T('\x0132'); break;
- case 0xE7 : NewChar=__T('\x013F'); break;
- case 0xE8 : NewChar=__T('\x0141'); break;
- case 0xE9 : NewChar=__T('\x00D8'); break;
- case 0xEA : NewChar=__T('\x0152'); break;
- case 0xEB : NewChar=__T('\x00BA'); break;
- case 0xEC : NewChar=__T('\x00DE'); break;
- case 0xED : NewChar=__T('\x0166'); break;
- case 0xEE : NewChar=__T('\x014A'); break;
- case 0xEF : NewChar=__T('\x0149'); break;
- case 0xF0 : NewChar=__T('\x0138'); break;
- case 0xF1 : NewChar=__T('\x00E6'); break;
- case 0xF2 : NewChar=__T('\x0111'); break;
- case 0xF3 : NewChar=__T('\x00F0'); break;
- case 0xF4 : NewChar=__T('\x0127'); break;
- case 0xF5 : NewChar=__T('\x0131'); break;
- case 0xF6 : NewChar=__T('\x0133'); break;
- case 0xF7 : NewChar=__T('\x0140'); break;
- case 0xF8 : NewChar=__T('\x0142'); break;
- case 0xF9 : NewChar=__T('\x00F8'); break;
- case 0xFA : NewChar=__T('\x0153'); break;
- case 0xFB : NewChar=__T('\x0153'); break;
- case 0xFC : NewChar=__T('\x00FE'); break;
- case 0xFD : NewChar=__T('\x00FE'); break;
- case 0xFE : NewChar=__T('\x014B'); break;
- case 0xFF : NewChar=__T('\x00AD'); break;
- case 0xC0 :
- case 0xC9 :
- case 0xCC :
- case 0xD8 :
- case 0xD9 :
- case 0xDA :
- case 0xDB :
- case 0xE5 :
- break;
- default : NewChar=(wchar_t)(Buffer[Pos]);
- }
-
- if (EscapeChar)
- {
- if (Pos+1<End)
- {
- Info+=(Char)(Buffer[Pos+1]);
- Info+=Ztring().From_Unicode(&EscapeChar, 1); //(EscapeChar) after new ZenLib release
- EscapeChar=__T('\x0000');
- Pos++;
- }
- }
- else if (NewChar)
- Info+=Ztring().From_Unicode(&NewChar, 1); //(NewChar) after new ZenLib release
-
- }
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ISO_8859_1(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_ISO_8859_1((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ISO_8859_2(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_ISO_8859_2((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_ISO_8859_5(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.clear();
- size_t End = Buffer_Offset + (size_t)Element_Offset + (size_t)Bytes;
- for (size_t Pos=Buffer_Offset+(size_t)Element_Offset; Pos<End; ++Pos)
- {
- switch (Buffer[Pos])
- {
- case 0xAD : Info+=Ztring().From_Unicode(L"\xAD"); break; //L'\xAD' after new ZenLib release
- case 0xF0 : Info+=Ztring().From_Unicode(L"\x2116"); break; //L'\x2116' after new ZenLib release
- case 0xFD : Info+=Ztring().From_Unicode(L"\xA7"); break; //L'\xA7' after new ZenLib release
- default :
- {
- wchar_t NewChar=(Buffer[Pos]<=0xA0?0x0000:0x0360)+Buffer[Pos];
- Info+=Ztring().From_Unicode(&NewChar, 1); //(NewChar) after new ZenLib release
- }
- }
- }
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_String(int64u Bytes, std::string &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.assign((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_Local(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_Local((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_String(int64u Bytes, std::string &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.assign((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UTF8(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_UTF8((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UTF16(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_UTF16((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UTF16B(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_UTF16BE((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- Element_Offset+=Bytes;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_UTF16L(int64u Bytes, Ztring &Info)
-{
- INTEGRITY_SIZE_ATLEAST_STRING(Bytes);
- Info.From_UTF16LE((const char*)(Buffer+Buffer_Offset+(size_t)Element_Offset), (size_t)Bytes);
- Element_Offset+=Bytes;
-}
-
-//***************************************************************************
-// Text
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_PA()
-{
- INTEGRITY_SIZE_ATLEAST(1);
- int8u Size=Buffer[Buffer_Offset+Element_Offset];
- int8u Pad=(Size%2)?0:1;
- INTEGRITY_SIZE_ATLEAST(1+Size+Pad);
- Element_Offset+=(size_t)(1+Size+Pad);
-}
-
-//***************************************************************************
-// Unknown
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Skip_XX(int64u Bytes)
-{
- if (Element_Offset+Bytes!=Element_TotalSize_Get()) //Exception for seek to end of the element
- {
- INTEGRITY_SIZE_ATLEAST(Bytes);
- }
- Element_Offset+=Bytes;
-}
-
-//***************************************************************************
-// Flags
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_Flags_ (int64u Flags, size_t Order, bool &Info)
-{
- if (Flags&((int64u)1<<Order))
- Info=true;
- else
- Info=false;
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_FlagsM_ (int64u ValueToPut, int8u &Info)
-{
- Info=(int8u)ValueToPut;
-}
-
-//***************************************************************************
-// BitStream
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BS_(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Get4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_SB_( bool &Info)
-{
- INTEGRITY_INT(1<=BS->Remain())
- Info=BS->GetB();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S1_(int8u Bits, int8u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Get1(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S2_(int8u Bits, int16u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Get2(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S3_(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Get4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S4_(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Get4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S5_(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Get8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S6_(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Get8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S7_(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Get8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_S8_(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Get8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_BS(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Peek4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_SB( bool &Info)
-{
- INTEGRITY_INT(1<=BS->Remain())
- Info=BS->PeekB();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S1(int8u Bits, int8u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Peek1(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S2(int8u Bits, int16u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Peek2(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S3(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Peek4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S4(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Peek4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S5(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Peek8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S6(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Peek8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S7(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Peek8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_S8(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BS->Remain())
- Info=BS->Peek8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Mark_0()
-{
- INTEGRITY(1<=BS->Remain())
- if (BS->GetB())
- Element_DoNotTrust("Mark bit is wrong");
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Mark_1()
-{
- INTEGRITY(1<=BS->Remain())
- if (!BS->GetB())
- Element_DoNotTrust("Mark bit is wrong");
-}
-
-//***************************************************************************
-// BitStream (Little Endian)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_BT_(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Get(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_TB_( bool &Info)
-{
- INTEGRITY_INT(1<=BT->Remain())
- Info=BT->GetB();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_T1_(int8u Bits, int8u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Get1(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_T2_(int8u Bits, int16u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Get2(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_T4_(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Get4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Get_T8_(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Get8(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_BT(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Peek(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_TB( bool &Info)
-{
- INTEGRITY_INT(1<=BT->Remain())
- Info=BT->PeekB();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_T1(int8u Bits, int8u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Peek1(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_T2(int8u Bits, int16u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Peek2(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_T4(int8u Bits, int32u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Peek4(Bits);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Peek_T8(int8u Bits, int64u &Info)
-{
- INTEGRITY_INT(Bits<=BT->Remain())
- Info=BT->Peek8(Bits);
-}
-
-} //NameSpace
-#endif //MEDIAINFO_TRACE
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_MinimizeSize.h b/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_MinimizeSize.h
deleted file mode 100644
index a78265331..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_MinimizeSize.h
+++ /dev/null
@@ -1,1342 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File__AnalyzeMinimizeSizeH
-#define MediaInfo_File__AnalyzeMinimizeSizeH
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Class File__Analyze
-//***************************************************************************
-
-class File__Analyze : public File__Base
-{
-public :
- //***************************************************************************
- // Constructor/Destructor
- //***************************************************************************
-
- File__Analyze();
- virtual ~File__Analyze();
-
- //***************************************************************************
- // Open
- //***************************************************************************
-
- void Open_Buffer_Init ( int64u File_Size);
- void Open_Buffer_Init (File__Analyze* Sub);
- void Open_Buffer_Init (File__Analyze* Sub, int64u File_Size);
- void Open_Buffer_Continue ( const int8u* Buffer, size_t Buffer_Size);
- void Open_Buffer_Continue (File__Analyze* Sub, const int8u* Buffer, size_t Buffer_Size, bool IsNewPacket=true, float64 Ratio=1.0);
- void Open_Buffer_Continue (File__Analyze* Sub, size_t Buffer_Size) {if (Element_Offset+Buffer_Size<=Element_Size) Open_Buffer_Continue(Sub, Buffer+Buffer_Offset+(size_t)Element_Offset, Buffer_Size); Element_Offset+=Buffer_Size;}
- void Open_Buffer_Continue (File__Analyze* Sub) {if (Element_Offset<=Element_Size) Open_Buffer_Continue(Sub, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset)); Element_Offset=Element_Size;}
- void Open_Buffer_Position_Set(int64u File_Offset);
- #if MEDIAINFO_SEEK
- size_t Open_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- #if MEDIAINFO_ADVANCED2
- void Open_Buffer_SegmentChange();
- #endif //MEDIAINFO_ADVANCED2
- void Open_Buffer_Unsynch ();
- void Open_Buffer_Update ();
- void Open_Buffer_Update (File__Analyze* Sub);
- void Open_Buffer_Finalize (bool NoBufferModification=false);
- void Open_Buffer_Finalize (File__Analyze* Sub);
-
- //***************************************************************************
- // In/Out (for parsers)
- //***************************************************************************
-
- //In
- Ztring ParserName;
- #if MEDIAINFO_EVENTS
- size_t StreamIDs_Size;
- int64u StreamIDs[16];
- int8u StreamIDs_Width[16];
- int8u ParserIDs[16];
- void Event_Prepare (struct MediaInfo_Event_Generic* Event);
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- int8u Demux_Level; //bit 0=frame, bit 1=container, bit 2=elementary (eg MPEG-TS), bit 3=ancillary (e.g. DTVCC), default with frame set
- bool Demux_random_access;
- bool Demux_UnpacketizeContainer;
- bool Demux_IntermediateItemFound;
- size_t Demux_Offset;
- int64u Demux_TotalBytes;
- File__Analyze* Demux_CurrentParser;
- #endif //MEDIAINFO_DEMUX
- Ztring File_Name_WithoutDemux;
- bool PTS_DTS_Needed;
- struct frame_info
- {
- int64u Buffer_Offset_End;
- int64u PCR; //In nanoseconds
- int64u PTS; //In nanoseconds
- int64u DTS; //In nanoseconds
- int64u DUR; //In nanoseconds
-
- frame_info()
- {
- Buffer_Offset_End=(int64u)-1;
- PCR=(int64u)-1;
- PTS=(int64u)-1;
- DTS=(int64u)-1;
- DUR=(int64u)-1;
- }
- };
- frame_info FrameInfo;
- frame_info FrameInfo_Previous;
- frame_info FrameInfo_Next;
- std::vector<int64u> Offsets_Stream;
- std::vector<int64u> Offsets_Buffer;
- size_t Offsets_Pos;
- int8u* OriginalBuffer;
- size_t OriginalBuffer_Size;
- size_t OriginalBuffer_Capacity;
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- struct servicedescriptor
- {
- string language;
- };
- typedef std::map<int8u, servicedescriptor> servicedescriptors608;
- typedef std::map<int8u, servicedescriptor> servicedescriptors708;
- struct servicedescriptors
- {
- #if defined(MEDIAINFO_EIA608_YES)
- std::map<int8u, servicedescriptor> ServiceDescriptors608;
- #endif
- #if defined(MEDIAINFO_EIA708_YES)
- std::map<int8u, servicedescriptor> ServiceDescriptors708;
- #endif
- };
- servicedescriptors* ServiceDescriptors;
- #endif
-
- //Out
- int64u PTS_Begin; //In nanoseconds
- #if MEDIAINFO_ADVANCED2
- int64u PTS_Begin_Segment; //In nanoseconds
- #endif //MEDIAINFO_ADVANCED2
- int64u PTS_End; //In nanoseconds
- int64u DTS_Begin; //In nanoseconds
- int64u DTS_End; //In nanoseconds
- int64u Frame_Count;
- int64u Frame_Count_Previous;
- int64u Frame_Count_InThisBlock;
- int64u Field_Count;
- int64u Field_Count_Previous;
- int64u Field_Count_InThisBlock;
- int64u Frame_Count_NotParsedIncluded;
- int64u FrameNumber_PresentationOrder;
- bool Synched; //Data is synched
- bool UnSynched_IsNotJunk; //Data is actually synched
- bool MustExtendParsingDuration; //Data has some substreams difficult to detect (e.g. captions), must wait a bit before final filling
-
-protected :
- //***************************************************************************
- // Streams management
- //***************************************************************************
-
- virtual void Streams_Accept() {};
- virtual void Streams_Fill() {};
- virtual void Streams_Update() {};
- virtual void Streams_Finish() {};
-
- //***************************************************************************
- // Synchro
- //***************************************************************************
-
- virtual bool Synchronize() {Synched=true; return true;}; //Look for the synchro
- virtual bool Synched_Test() {return true;}; //Test is synchro is OK
- virtual void Synched_Init() {}; //When synched, we can Init data
- bool Synchro_Manage();
- bool Synchro_Manage_Test();
-
- //***************************************************************************
- // Buffer
- //***************************************************************************
-
- //Buffer
- virtual void Read_Buffer_Init () {}; //Temp, should be in File__Base caller
- virtual void Read_Buffer_Continue () {}; //Temp, should be in File__Base caller
- virtual void Read_Buffer_AfterParsing () {}; //Temp, should be in File__Base caller
- #if MEDIAINFO_SEEK
- virtual size_t Read_Buffer_Seek (size_t, int64u, int64u); //Temp, should be in File__Base caller
- size_t Read_Buffer_Seek_OneFramePerFile (size_t, int64u, int64u);
- #endif //MEDIAINFO_SEEK
- #if MEDIAINFO_ADVANCED2
- virtual void Read_Buffer_SegmentChange () {}; //Temp, should be in File__Base caller
- #endif //MEDIAINFO_ADVANCED2
- virtual void Read_Buffer_Unsynched () {}; //Temp, should be in File__Base caller
- void Read_Buffer_Unsynched_OneFramePerFile ();
- virtual void Read_Buffer_Finalize () {}; //Temp, should be in File__Base caller
- bool Buffer_Parse();
-
- //***************************************************************************
- // BitStream init
- //***************************************************************************
-
- void BS_Begin();
- void BS_Begin_LE(); //Little Endian version
- void BS_End();
- void BS_End_LE(); //Little Endian version
-
- //***************************************************************************
- // File Header
- //***************************************************************************
-
- //File Header - Management
- bool FileHeader_Manage ();
-
- //File Header - Begin
- virtual bool FileHeader_Begin () {return true;};
-
- //File Header - Parse
- virtual void FileHeader_Parse () {Element_DoNotShow();};
-
- //***************************************************************************
- // Header
- //***************************************************************************
-
- //Header - Management
- bool Header_Manage ();
-
- //Header - Begin
- virtual bool Header_Begin () {return true;};
-
- //Header - Parse
- virtual void Header_Parse ();
-
- //Header - Info
- void Header_Fill_Code (int64u Code);
- inline void Header_Fill_Code (int64u Code, const Ztring &) {Header_Fill_Code(Code);};
- #define Header_Fill_Code2(A,B) Header_Fill_Code(A)
- void Header_Fill_Size (int64u Size);
-
- //***************************************************************************
- // Data
- //***************************************************************************
-
- //Header - Management
- bool Data_Manage ();
-
- //Data - Parse
- virtual void Data_Parse () {};
-
- //Data - Info
- inline void Data_Info (const Ztring &) {};
- inline void Data_Info_From_Milliseconds (int64u) {}
-
- //Data - Get info
- size_t Data_Remain () {return (size_t)(Element_Size-(Element_Offset+BS->Offset_Get()));};
- size_t Data_BS_Remain () {return (size_t)BS->Remain();};
-
- //Data - Detect EOF
- virtual void Detect_EOF () {};
- bool EOF_AlreadyDetected;
-
- //Data - Helpers
- void Data_Accept (const char*) {Accept();}
- void Data_Accept () {Accept();}
- void Data_Reject (const char*) {Reject();}
- void Data_Reject () {Reject();}
- void Data_Finish (const char*) {ForceFinish();}
- void Data_Finish () {ForceFinish();}
- void Data_GoTo (int64u GoTo_, const char*) {GoTo(GoTo_);}
- void Data_GoTo (int64u GoTo_) {GoTo(GoTo_);}
- void Data_GoToFromEnd (int64u GoToFromEnd_, const char*) {GoToFromEnd(GoToFromEnd_);}
- void Data_GoToFromEnd (int64u GoToFromEnd_) {GoToFromEnd(GoToFromEnd_);}
-
- //***************************************************************************
- // Elements
- //***************************************************************************
-
- //Elements - Begin
- void Element_Begin ();
- #define Element_Begin0() Element_Begin()
- #define Element_Begin1(_NAME) Element_Begin()
- #define Element_Trace_Begin0()
- #define Element_Trace_Begin1(_NAME)
-
- //Elements - Name
- #define Element_Name(_A)
-
- //Elements - Info
- #define Element_Info1(_A)
- #define Element_Info2(_A,_B)
- #define Element_Info3(_A,_B,_C)
- #define Element_Info1C(_CONDITION,_A)
- #define Element_Info_From_Milliseconds(_A)
-
- //Elements - End
- inline void Element_End () {Element_End_Common_Flush();}
- #define Element_End0() Element_End()
- #define Element_End1(_NAME) Element_End()
- #define Element_Trace_End0()
- #define Element_Trace_End1(_NAME)
-
- //Elements - Preparation of element from external app
- void Element_Prepare (int64u Size);
-
-protected :
- //Element - Common
- void Element_End_Common_Flush();
- Ztring Element_End_Common_Flush_Build();
-public :
-
- //***************************************************************************
- // Param
- //***************************************************************************
-
- //Param - Main
- #define Param1(_A)
- #define Param2(_A,_B)
- #define Param3(_A,_B,_C)
-
- //Param - Info
- #define Param_Info1(_A)
- #define Param_Info2(_A,_B)
- #define Param_Info3(_A,_B,_C)
- #define Param_Info1C(_CONDITION,_A)
- #define Param_Info2C(_CONDITION,_A,_B)
- #define Param_Info3C(_CONDITION,_A,_B,_C)
- #define Param_Info_From_Milliseconds(A)
-
- //***************************************************************************
- // Information
- //***************************************************************************
-
- inline void Info (const Ztring&, size_t =0) {}
-
- //***************************************************************************
- // Big Endian (Integer, Float, Fixed-Point)
- //***************************************************************************
-
- void Get_B1_ (int8u &Info);
- void Get_B2_ (int16u &Info);
- void Get_B3_ (int32u &Info);
- void Get_B4_ (int32u &Info);
- void Get_B5_ (int64u &Info);
- void Get_B6_ (int64u &Info);
- void Get_B7_ (int64u &Info);
- void Get_B8_ (int64u &Info);
- void Get_B16_ (int128u &Info);
- void Get_BF4_ (float32 &Info);
- void Get_BF8_ (float64 &Info);
- void Get_BF10_ (float80 &Info);
- void Get_BFP4_ (int8u Bits, float32 &Info);
- #define Get_B1(Info, Name) Get_B1_(Info)
- #define Get_B2(Info, Name) Get_B2_(Info)
- #define Get_B3(Info, Name) Get_B3_(Info)
- #define Get_B4(Info, Name) Get_B4_(Info)
- #define Get_B5(Info, Name) Get_B5_(Info)
- #define Get_B6(Info, Name) Get_B6_(Info)
- #define Get_B7(Info, Name) Get_B7_(Info)
- #define Get_B8(Info, Name) Get_B8_(Info)
- #define Get_B16(Info, Name) Get_B16_(Info)
- #define Get_BF4(Info, Name) Get_BF4_(Info)
- #define Get_BF8(Info, Name) Get_BF8_(Info)
- #define Get_BF10(Info, Name) Get_BF10_(Info)
- #define Get_BFP4(Bits, Info, Name) Get_BFP4_(Bits, Info)
- void Peek_B1 (int8u &Info);
- void Peek_B2 (int16u &Info);
- void Peek_B3 (int32u &Info);
- void Peek_B4 (int32u &Info);
- void Peek_B5 (int64u &Info);
- void Peek_B6 (int64u &Info);
- void Peek_B7 (int64u &Info);
- void Peek_B8 (int64u &Info);
- void Peek_B16 (int128u &Info);
- void Peek_BF4 (float32 &Info);
- void Peek_BF8 (float64 &Info);
- void Peek_BF10(float64 &Info);
- void Peek_BFP4(int8u Bits, float64 &Info);
- #define Skip_B1(Name) Element_Offset++
- #define Skip_B2(Name) Element_Offset+=2
- #define Skip_B3(Name) Element_Offset+=3
- #define Skip_B4(Name) Element_Offset+=4
- #define Skip_B5(Name) Element_Offset+=5
- #define Skip_B6(Name) Element_Offset+=6
- #define Skip_B7(Name) Element_Offset+=7
- #define Skip_B8(Name) Element_Offset+=8
- #define Skip_BF4(Name) Element_Offset+=4
- #define Skip_BF8(Name) Element_Offset+=8
- #define Skip_B16(Name) Element_Offset+=16
- #define Skip_BFP4(Size, Name) Element_Offset+=4
- #define Info_B1(_INFO, _NAME) Element_Offset++
- #define Info_B2(_INFO, _NAME) Element_Offset+=2
- #define Info_B3(_INFO, _NAME) Element_Offset+=3
- #define Info_B4(_INFO, _NAME) Element_Offset+=4
- #define Info_B5(_INFO, _NAME) Element_Offset+=5
- #define Info_B6(_INFO, _NAME) Element_Offset+=6
- #define Info_B7(_INFO, _NAME) Element_Offset+=7
- #define Info_B8(_INFO, _NAME) Element_Offset+=8
- #define Info_B16(_INFO, _NAME) Element_Offset+=16
- #define Info_BF4(_INFO, _NAME) Element_Offset+=4
- #define Info_BF8(_INFO, _NAME) Element_Offset+=8
- #define Info_BF10(_INFO, _NAME) Element_Offset+=10
- #define Info_BFP4(_BITS, _INFO, _NAME) Element_Offset+=4
-
- //***************************************************************************
- // Little Endian
- //***************************************************************************
-
- void Get_L1_ (int8u &Info);
- void Get_L2_ (int16u &Info);
- void Get_L3_ (int32u &Info);
- void Get_L4_ (int32u &Info);
- void Get_L5_ (int64u &Info);
- void Get_L6_ (int64u &Info);
- void Get_L7_ (int64u &Info);
- void Get_L8_ (int64u &Info);
- void Get_L16_ (int128u &Info);
- void Get_LF4_ (float32 &Info);
- void Get_LF8_ (float64 &Info);
- void Get_LF10_ (float80 &Info);
- void Get_LFP4_ (int8u Bits, float32 &Info);
- #define Get_L1(Info, Name) Get_L1_(Info)
- #define Get_L2(Info, Name) Get_L2_(Info)
- #define Get_L3(Info, Name) Get_L3_(Info)
- #define Get_L4(Info, Name) Get_L4_(Info)
- #define Get_L5(Info, Name) Get_L5_(Info)
- #define Get_L6(Info, Name) Get_L6_(Info)
- #define Get_L7(Info, Name) Get_L7_(Info)
- #define Get_L8(Info, Name) Get_L8_(Info)
- #define Get_L16(Info, Name) Get_L16_(Info)
- #define Get_LF4(Info, Name) Get_LF4_(Info)
- #define Get_LF8(Info, Name) Get_LF8_(Info)
- #define Get_LF10(Info, Name) Get_LF10_(Info)
- #define Get_LFP4(Bits, Info, Name) Get_LFP4_(Bits, Info)
- void Peek_L1 (int8u &Info);
- void Peek_L2 (int16u &Info);
- void Peek_L3 (int32u &Info);
- void Peek_L4 (int32u &Info);
- void Peek_L5 (int64u &Info);
- void Peek_L6 (int64u &Info);
- void Peek_L7 (int64u &Info);
- void Peek_L8 (int64u &Info);
- void Peek_L16 (int128u &Info);
- void Peek_LF4 (float32 &Info);
- void Peek_LF8 (float64 &Info);
- void Peek_LF10(float64 &Info);
- void Peek_LFP4(int8u Bits, float64 &Info);
- #define Skip_L1(Name) Element_Offset++
- #define Skip_L2(Name) Element_Offset+=2
- #define Skip_L3(Name) Element_Offset+=3
- #define Skip_L4(Name) Element_Offset+=4
- #define Skip_L5(Name) Element_Offset+=5
- #define Skip_L6(Name) Element_Offset+=6
- #define Skip_L7(Name) Element_Offset+=7
- #define Skip_L8(Name) Element_Offset+=8
- #define Skip_LF4(Name) Element_Offset+=4
- #define Skip_LF8(Name) Element_Offset+=8
- #define Skip_L16(Name) Element_Offset+=16
- #define Skip_LFP4(Size, Name) Element_Offset+=4
- #define Info_L1(_INFO, _NAME) Element_Offset++
- #define Info_L2(_INFO, _NAME) Element_Offset+=2
- #define Info_L3(_INFO, _NAME) Element_Offset+=3
- #define Info_L4(_INFO, _NAME) Element_Offset+=4
- #define Info_L5(_INFO, _NAME) Element_Offset+=5
- #define Info_L6(_INFO, _NAME) Element_Offset+=6
- #define Info_L7(_INFO, _NAME) Element_Offset+=7
- #define Info_L8(_INFO, _NAME) Element_Offset+=8
- #define Info_L16(_INFO, _NAME) Element_Offset+=16
- #define Info_LF4(_INFO, _NAME) Element_Offset+=4
- #define Info_LF8(_INFO, _NAME) Element_Offset+=8
- #define Info_LF10(_INFO, _NAME) Element_Offset+=10
- #define Info_LFP4(_LITS, _INFO, _NAME) Element_Offset+=4
-
- //***************************************************************************
- // Little and Big Endian together
- //***************************************************************************
-
- void Get_D1_ (int8u &Info);
- void Get_D2_ (int16u &Info);
- void Get_D3_ (int32u &Info);
- void Get_D4_ (int32u &Info);
- void Get_D5_ (int64u &Info);
- void Get_D6_ (int64u &Info);
- void Get_D7_ (int64u &Info);
- void Get_D8_ (int64u &Info);
- void Get_D16_ (int128u &Info);
- void Get_DF4_ (float32 &Info);
- void Get_DF8_ (float64 &Info);
- void Get_DF10_ (float80 &Info);
- void Get_DFP4_ (int8u Bits, float32 &Info);
- #define Get_D1(Info, Name) Get_D1_(Info)
- #define Get_D2(Info, Name) Get_D2_(Info)
- #define Get_D3(Info, Name) Get_D3_(Info)
- #define Get_D4(Info, Name) Get_D4_(Info)
- #define Get_D5(Info, Name) Get_D5_(Info)
- #define Get_D6(Info, Name) Get_D6_(Info)
- #define Get_D7(Info, Name) Get_D7_(Info)
- #define Get_D8(Info, Name) Get_D8_(Info)
- #define Get_D16(Info, Name) Get_D16_(Info)
- #define Get_DF4(Info, Name) Get_DF4_(Info)
- #define Get_DF8(Info, Name) Get_DF8_(Info)
- #define Get_DF10(Info, Name) Get_DF10_(Info)
- #define Get_DFP4(Bits, Info, Name) Get_DFP4_(Bits, Info)
- void Peek_D1 (int8u &Info);
- void Peek_D2 (int16u &Info);
- void Peek_D3 (int32u &Info);
- void Peek_D4 (int32u &Info);
- void Peek_D5 (int64u &Info);
- void Peek_D6 (int64u &Info);
- void Peek_D7 (int64u &Info);
- void Peek_D8 (int64u &Info);
- void Peek_D16 (int128u &Info);
- void Peek_DF4 (float32 &Info);
- void Peek_DF8 (float64 &Info);
- void Peek_DF10(float64 &Info);
- void Peek_DFP4(int8u Bits, float64 &Info);
- #define Skip_D1(Name) Element_Offset++
- #define Skip_D2(Name) Element_Offset+=2
- #define Skip_D3(Name) Element_Offset+=3
- #define Skip_D4(Name) Element_Offset+=4
- #define Skip_D5(Name) Element_Offset+=5
- #define Skip_D6(Name) Element_Offset+=6
- #define Skip_D7(Name) Element_Offset+=7
- #define Skip_D8(Name) Element_Offset+=8
- #define Skip_DF4(Name) Element_Offset+=4
- #define Skip_DF8(Name) Element_Offset+=8
- #define Skip_D16(Name) Element_Offset+=16
- #define Skip_DFP4(Size, Name) Element_Offset+=4
- #define Info_D1(_INFO, _NAME) Element_Offset++
- #define Info_D2(_INFO, _NAME) Element_Offset+=2
- #define Info_D3(_INFO, _NAME) Element_Offset+=3
- #define Info_D4(_INFO, _NAME) Element_Offset+=4
- #define Info_D5(_INFO, _NAME) Element_Offset+=5
- #define Info_D6(_INFO, _NAME) Element_Offset+=6
- #define Info_D7(_INFO, _NAME) Element_Offset+=7
- #define Info_D8(_INFO, _NAME) Element_Offset+=8
- #define Info_D16(_INFO, _NAME) Element_Offset+=16
- #define Info_DF4(_INFO, _NAME) Element_Offset+=4
- #define Info_DF8(_INFO, _NAME) Element_Offset+=8
- #define Info_DF10(_INFO, _NAME) Element_Offset+=10
- #define Info_DFP4(_DITS, _INFO, _NAME) Element_Offset+=4
-
- //***************************************************************************
- // GUID
- //***************************************************************************
-
- void Get_GUID (int128u &Info);
- inline void Get_GUID (int128u &Info, const char*) {Get_GUID(Info);}
- void Peek_GUID(int128u &Info);
- inline void Skip_GUID( const char*) {if (Element_Offset+16>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=16;}
- #define Info_GUID(_INFO, _NAME) int128u _INFO; Get_GUID(_INFO, _NAME)
-
- //***************************************************************************
- // UUID
- //***************************************************************************
-
- inline void Get_UUID (int128u &Info) {Get_B16_(Info);}
- inline void Get_UUID (int128u &Info, const char*) {Get_B16_(Info);}
- inline void Peek_UUID(int128u &Info) {Peek_B16(Info);}
- inline void Skip_UUID( const char*) {if (Element_Offset+16>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=16;}
- #define Info_UUID(_INFO, _NAME) int128u _INFO; Get_UUID(_INFO, _NAME)
-
- //***************************************************************************
- // EBML
- //***************************************************************************
-
- void Get_EB (int64u &Info);
- void Get_ES (int64s &Info);
- inline void Get_EB (int64u &Info, const char*) {Get_EB(Info);}
- inline void Get_ES (int64s &Info, const char*) {Get_ES(Info);}
- void Skip_EB();
- void Skip_ES();
- inline void Skip_EB( const char*) {Skip_EB();}
- inline void Skip_ES( const char*) {Skip_ES();}
- #define Info_EB(_INFO, _NAME) int64u _INFO; Get_EB(_INFO, _NAME)
- #define Info_ES(_INFO, _NAME) int64s _INFO; Get_ES(_INFO, _NAME)
-
- //***************************************************************************
- // Variable Size Value
- //***************************************************************************
-
- void Get_VS (int64u &Info);
- inline void Get_VS (int64u &Info, const char*) {Get_VS(Info);}
- void Skip_VS();
- inline void Skip_VS( const char*) {Skip_VS();}
- #define Info_VS(_INFO, _NAME) int64u _INFO; Get_VS(_INFO, _NAME)
-
- //***************************************************************************
- // Exp-Golomb
- //***************************************************************************
-
- void Get_UE (int32u &Info);
- void Get_SE (int32s &Info);
- inline void Get_UE (int32u &Info, const char*) {Get_UE(Info);}
- inline void Get_SE (int32s &Info, const char*) {Get_SE(Info);}
- void Skip_UE();
- inline void Skip_SE() {Skip_UE();}
- inline void Skip_UE( const char*) {Skip_UE();}
- inline void Skip_SE( const char*) {Skip_SE();}
- #define Info_UE(_INFO, _NAME) int32u _INFO; Get_UE(_INFO, _NAME)
- #define Info_SE(_INFO, _NAME) int32s _INFO; Get_SE(_INFO, _NAME)
-
- //***************************************************************************
- // Interleaved Exp-Golomb
- //***************************************************************************
-
- void Get_UI (int32u &Info);
- void Get_SI (int32s &Info);
- inline void Get_UI (int32u &Info, const char*) {Get_UI(Info);}
- inline void Get_SI (int32s &Info, const char*) {Get_SI(Info);}
- void Skip_UI();
- void Skip_SI();
- inline void Skip_UI( const char*) {Skip_UI();}
- inline void Skip_SI( const char*) {Skip_SI();}
- #define Info_UI(_INFO, _NAME) int32u _INFO; Get_UI(_INFO, _NAME)
- #define Info_SI(_INFO, _NAME) int32s _INFO; Get_SI(_INFO, _NAME)
-
- //***************************************************************************
- // Variable Length Code
- //***************************************************************************
-
- struct vlc
- {
- int32u value;
- int8u bit_increment;
- int8s mapped_to1;
- int8s mapped_to2;
- int8s mapped_to3;
- };
- struct vlc_fast
- {
- int8u* Array;
- int8u* BitsToSkip;
- const vlc* Vlc;
- int8u Size;
- };
- #define VLC_END \
- {(int32u)-1, (int8u)-1, 0, 0, 0}
- void Get_VL_Prepare(vlc_fast &Vlc);
- void Get_VL_ (const vlc Vlc[], size_t &Info);
- void Get_VL_ (const vlc_fast &Vlc, size_t &Info);
- #define Get_VL(Vlc, Info, Name) Get_VL_(Vlc, Info);
- void Skip_VL_(const vlc Vlc[]);
- void Skip_VL_(const vlc_fast &Vlc);
- #define Skip_VL(Vlc, Name) Skip_VL_(Vlc);
- #define Info_VL(Vlc, Info, Name) Skip_VL_(Vlc)
-
- //***************************************************************************
- // Characters
- //***************************************************************************
-
- void Get_C1 (int8u &Info);
- void Get_C2 (int16u &Info);
- void Get_C3 (int32u &Info);
- void Get_C4 (int32u &Info);
- void Get_C5 (int64u &Info);
- void Get_C6 (int64u &Info);
- void Get_C7 (int64u &Info);
- void Get_C8 (int64u &Info);
- inline void Get_C1 (int8u &Info, const char*) {Get_C1(Info);}
- inline void Get_C2 (int16u &Info, const char*) {Get_C2(Info);}
- inline void Get_C3 (int32u &Info, const char*) {Get_C3(Info);}
- inline void Get_C4 (int32u &Info, const char*) {Get_C4(Info);}
- inline void Get_C5 (int64u &Info, const char*) {Get_C5(Info);}
- inline void Get_C6 (int64u &Info, const char*) {Get_C6(Info);}
- inline void Get_C7 (int64u &Info, const char*) {Get_C7(Info);}
- inline void Get_C8 (int64u &Info, const char*) {Get_C8(Info);}
- inline void Skip_C1( const char*) {if (Element_Offset+1>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=1;}
- inline void Skip_C2( const char*) {if (Element_Offset+2>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=2;}
- inline void Skip_C3( const char*) {if (Element_Offset+3>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=3;}
- inline void Skip_C4( const char*) {if (Element_Offset+4>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=4;}
- inline void Skip_C5( const char*) {if (Element_Offset+5>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=5;}
- inline void Skip_C6( const char*) {if (Element_Offset+6>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=6;}
- inline void Skip_C7( const char*) {if (Element_Offset+7>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=7;}
- inline void Skip_C8( const char*) {if (Element_Offset+8>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=8;}
- #define Info_C1(_INFO, _NAME) int8u _INFO; Get_C1(_INFO, _NAME)
- #define Info_C2(_INFO, _NAME) int16u _INFO; Get_C2(_INFO, _NAME)
- #define Info_C3(_INFO, _NAME) int32u _INFO; Get_C3(_INFO, _NAME)
- #define Info_C4(_INFO, _NAME) int32u _INFO; Get_C4(_INFO, _NAME)
- #define Info_C5(_INFO, _NAME) int64u _INFO; Get_C5(_INFO, _NAME)
- #define Info_C6(_INFO, _NAME) int64u _INFO; Get_C6(_INFO, _NAME)
- #define Info_C7(_INFO, _NAME) int64u _INFO; Get_C7(_INFO, _NAME)
- #define Info_C8(_INFO, _NAME) int64u _INFO; Get_C8(_INFO, _NAME)
-
- //***************************************************************************
- // Text
- //***************************************************************************
-
- void Get_Local (int64u Bytes, Ztring &Info);
- void Get_ISO_6937_2 (int64u Bytes, Ztring &Info);
- void Get_ISO_8859_1 (int64u Bytes, Ztring &Info);
- void Get_ISO_8859_2 (int64u Bytes, Ztring &Info);
- void Get_ISO_8859_5 (int64u Bytes, Ztring &Info);
- void Get_String (int64u Bytes, std::string &Info);
- void Get_UTF8 (int64u Bytes, Ztring &Info);
- void Get_UTF16 (int64u Bytes, Ztring &Info);
- void Get_UTF16B (int64u Bytes, Ztring &Info);
- void Get_UTF16L (int64u Bytes, Ztring &Info);
- inline void Get_Local (int64u Bytes, Ztring &Info, const char*) {Get_Local(Bytes, Info);}
- inline void Get_ISO_6937_2 (int64u Bytes, Ztring &Info, const char*) {Get_ISO_6937_2(Bytes, Info);}
- inline void Get_ISO_8859_1 (int64u Bytes, Ztring &Info, const char*) {Get_ISO_8859_1(Bytes, Info);}
- inline void Get_ISO_8859_2 (int64u Bytes, Ztring &Info, const char*) {Get_ISO_8859_2(Bytes, Info);}
- inline void Get_ISO_8859_5 (int64u Bytes, Ztring &Info, const char*) {Get_ISO_8859_5(Bytes, Info);}
- inline void Get_String (int64u Bytes, std::string &Info, const char*) {Get_String(Bytes, Info);}
- inline void Get_UTF8 (int64u Bytes, Ztring &Info, const char*) {Get_UTF8(Bytes, Info);}
- inline void Get_UTF16 (int64u Bytes, Ztring &Info, const char*) {Get_UTF16(Bytes, Info);}
- inline void Get_UTF16B (int64u Bytes, Ztring &Info, const char*) {Get_UTF16B(Bytes, Info);}
- inline void Get_UTF16L (int64u Bytes, Ztring &Info, const char*) {Get_UTF16L(Bytes, Info);}
- void Peek_Local (int64u Bytes, Ztring &Info);
- void Peek_String(int64u Bytes, std::string &Info);
- void Skip_Local (int64u Bytes, const char*) {if (Element_Offset+Bytes>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=(size_t)Bytes;}
- void Skip_ISO_6937_2(int64u Bytes, const char*) {if (Element_Offset+Bytes>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=(size_t)Bytes;}
- void Skip_String(int64u Bytes, const char*) {if (Element_Offset+Bytes>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=(size_t)Bytes;}
- void Skip_UTF8 (int64u Bytes, const char*) {if (Element_Offset+Bytes>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=(size_t)Bytes;}
- void Skip_UTF16B(int64u Bytes, const char*) {if (Element_Offset+Bytes>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=(size_t)Bytes;}
- void Skip_UTF16L(int64u Bytes, const char*) {if (Element_Offset+Bytes>Element_Size) {Trusted_IsNot(); return;} Element_Offset+=(size_t)Bytes;}
- #define Info_Local(_BYTES, _INFO, _NAME) Ztring _INFO; Get_Local (_BYTES, _INFO, _NAME)
- #define Info_ISO_6937_2(_BYTES, _INFO, _NAME) Ztring _INFO; Info_ISO_6937_2(_BYTES, _INFO, _NAME)
- #define Info_UTF8(_BYTES, _INFO, _NAME) Ztring _INFO; Get_UTF8 (_BYTES, _INFO, _NAME)
- #define Info_UTF16B(_BYTES, _INFO, _NAME) Ztring _INFO; Get_UTF16B(_BYTES, _INFO, _NAME)
- #define Info_UTF16L(_BYTES, _INFO, _NAME) Ztring _INFO; Get_UTF16L(_BYTES, _INFO, _NAME)
-
- //***************************************************************************
- // Pascal strings
- //***************************************************************************
-
- void Get_PA (std::string &Info);
- inline void Get_PA (std::string &Info, const char*) {Get_PA(Info);}
- void Peek_PA(std::string &Info);
- void Skip_PA();
- inline void Skip_PA( const char*) {Skip_PA();}
- #define Info_PA(_INFO, _NAME) Ztring _INFO; Get_PA (_INFO, _NAME)
-
- //***************************************************************************
- // Unknown
- //***************************************************************************
-
- void Skip_XX(int64u Bytes);
- inline void Skip_XX(int64u Bytes, const char*) {Skip_XX(Bytes);}
-
- //***************************************************************************
- // Flags
- //***************************************************************************
-
- void Get_Flags_ (int64u Flags, size_t Order, bool &Info);
- void Get_FlagsM_ (int64u ValueToPut, int8u &Info); //Multiple
- #define Get_Flags(_FLAGS, _ORDER, _INFO, _NAME) Get_Flags_(_FLAGS, _ORDER, _INFO)
- #define Get_FlagsM(_VALUE, _INFO, _NAME) Get_FlagsM_(_VALUE, _INFO)
- #define Skip_Flags(_FLAGS, _ORDER, _NAME)
- #define Skip_FlagsM(_VALUE, _NAME)
- #define Info_Flags(_FLAGS, _ORDER, _INFO, _NAME)
-
- //***************************************************************************
- // BitStream
- //***************************************************************************
-
- void Get_BS_ (int8u Bits, int32u &Info);
- void Get_SB_ ( bool &Info);
- bool Get_SB_ () {return BS->GetB();}
- void Get_S1_ (int8u Bits, int8u &Info);
- void Get_S2_ (int8u Bits, int16u &Info);
- void Get_S3_ (int8u Bits, int32u &Info);
- void Get_S4_ (int8u Bits, int32u &Info);
- void Get_S5_ (int8u Bits, int64u &Info);
- void Get_S6_ (int8u Bits, int64u &Info);
- void Get_S7_ (int8u Bits, int64u &Info);
- void Get_S8_ (int8u Bits, int64u &Info);
- #define Get_BS(Bits, Info, Name) Get_BS_(Bits, Info)
- #define Get_SB( Info, Name) Get_SB_( Info)
- #define Get_S1(Bits, Info, Name) Get_S1_(Bits, Info)
- #define Get_S2(Bits, Info, Name) Get_S2_(Bits, Info)
- #define Get_S3(Bits, Info, Name) Get_S3_(Bits, Info)
- #define Get_S4(Bits, Info, Name) Get_S4_(Bits, Info)
- #define Get_S5(Bits, Info, Name) Get_S5_(Bits, Info)
- #define Get_S6(Bits, Info, Name) Get_S6_(Bits, Info)
- #define Get_S7(Bits, Info, Name) Get_S7_(Bits, Info)
- #define Get_S8(Bits, Info, Name) Get_S8_(Bits, Info)
- void Peek_BS(int8u Bits, int32u &Info);
- void Peek_SB( bool &Info);
- bool Peek_SB() {return BS->PeekB();}
- void Peek_S1(int8u Bits, int8u &Info);
- void Peek_S2(int8u Bits, int16u &Info);
- void Peek_S3(int8u Bits, int32u &Info);
- void Peek_S4(int8u Bits, int32u &Info);
- void Peek_S5(int8u Bits, int64u &Info);
- void Peek_S6(int8u Bits, int64u &Info);
- void Peek_S7(int8u Bits, int64u &Info);
- void Peek_S8(int8u Bits, int64u &Info);
- inline void Skip_BS_(size_t Bits) {BS->Skip(Bits);}
- inline void Skip_SB_( ) {BS->Skip(1);}
- inline void Skip_S1_(int8u Bits) {BS->Skip(Bits);}
- inline void Skip_S2_(int8u Bits) {BS->Skip(Bits);}
- inline void Skip_S3_(int8u Bits) {BS->Skip(Bits);}
- inline void Skip_S4_(int8u Bits) {BS->Skip(Bits);}
- inline void Skip_S5_(int8u Bits) {BS->Skip(Bits);}
- inline void Skip_S6_(int8u Bits) {BS->Skip(Bits);}
- inline void Skip_S7_(int8u Bits) {BS->Skip(Bits);}
- inline void Skip_S8_(int8u Bits) {BS->Skip(Bits);}
- #define Skip_BS(Bits, Name) Skip_BS_(Bits)
- #define Skip_SB( Name) Skip_SB_()
- #define Skip_S1(Bits, Name) Skip_S1_(Bits)
- #define Skip_S2(Bits, Name) Skip_S2_(Bits)
- #define Skip_S3(Bits, Name) Skip_S3_(Bits)
- #define Skip_S4(Bits, Name) Skip_S4_(Bits)
- #define Skip_S5(Bits, Name) Skip_S5_(Bits)
- #define Skip_S6(Bits, Name) Skip_S6_(Bits)
- #define Skip_S7(Bits, Name) Skip_S7_(Bits)
- #define Skip_S8(Bits, Name) Skip_S8_(Bits)
- void Mark_0 ();
- #define Mark_0_NoTrustError() Skip_SB_() //Use it for providing a warning instead of a non-trusting error
- void Mark_1 ();
- #define Mark_1_NoTrustError() Skip_SB_() //Use it for providing a warning instead of a non-trusting error
- #define Info_BS(_BITS, _INFO, _NAME) Skip_BS_(_BITS)
- #define Info_SB(_INFO, _NAME) Skip_SB_( )
- #define Info_S1(_BITS, _INFO, _NAME) Skip_S1_(_BITS)
- #define Info_S2(_BITS, _INFO, _NAME) Skip_S2_(_BITS)
- #define Info_S3(_BITS, _INFO, _NAME) Skip_S3_(_BITS)
- #define Info_S4(_BITS, _INFO, _NAME) Skip_S4_(_BITS)
- #define Info_S5(_BITS, _INFO, _NAME) Skip_S5_(_BITS)
- #define Info_S6(_BITS, _INFO, _NAME) Skip_S6_(_BITS)
- #define Info_S7(_BITS, _INFO, _NAME) Skip_S7_(_BITS)
- #define Info_S8(_BITS, _INFO, _NAME) Skip_S8_(_BITS)
-
- #define TEST_SB_GET(_CODE, _NAME) \
- { \
- Peek_SB(_CODE); \
- if (!_CODE) \
- Skip_SB_(); \
- else \
- { \
- Element_Begin0(); \
- Skip_SB_(); \
-
- #define TEST_SB_SKIP(_NAME) \
- { \
- if (!Peek_SB()) \
- Skip_SB_(); \
- else \
- { \
- Element_Begin0(); \
- Skip_SB_(); \
-
- #define TESTELSE_SB_GET(_CODE, _NAME) \
- { \
- Peek_SB(_CODE); \
- if (_CODE) \
- { \
- Element_Begin0(); \
- Skip_SB_(); \
-
- #define TESTELSE_SB_SKIP(_NAME) \
- { \
- if (Peek_SB()) \
- { \
- Element_Begin0(); \
- Skip_SB_(); \
-
- #define TESTELSE_SB_ELSE(_NAME) \
- Element_End0(); \
- } \
- else \
- { \
- Skip_SB_(); \
-
- #define TESTELSE_SB_END() \
- } \
- } \
-
- #define TEST_SB_END() \
- Element_End0(); \
- } \
- } \
-
- //***************************************************************************
- // BitStream (Little Endian)
- //***************************************************************************
-
- void Get_BT_ (int8u Bits, int32u &Info);
- void Get_TB_ ( bool &Info);
- bool Get_TB_ () {bool Temp; Get_TB_(Temp); return Temp;}
- void Get_T1_ (int8u Bits, int8u &Info);
- void Get_T2_ (int8u Bits, int16u &Info);
- void Get_T4_ (int8u Bits, int32u &Info);
- void Get_T8_ (int8u Bits, int64u &Info);
- #define Get_BT(Bits, Info, Name) Get_BT_(Bits, Info)
- #define Get_TB( Info, Name) Get_TB_( Info)
- #define Get_T1(Bits, Info, Name) Get_T1_(Bits, Info)
- #define Get_T2(Bits, Info, Name) Get_T2_(Bits, Info)
- #define Get_T4(Bits, Info, Name) Get_T4_(Bits, Info)
- #define Get_T8(Bits, Info, Name) Get_T8_(Bits, Info)
- void Peek_BT(int8u Bits, int32u &Info);
- void Peek_TB( bool &Info);
- bool Peek_TB() {bool Temp; Peek_TB(Temp); return Temp;}
- void Peek_T1(int8u Bits, int8u &Info);
- void Peek_T2(int8u Bits, int16u &Info);
- void Peek_T4(int8u Bits, int32u &Info);
- void Peek_T8(int8u Bits, int64u &Info);
- inline void Skip_BT_(size_t Bits) {BT->Skip(Bits);}
- inline void Skip_TB_( ) {BT->SkipB();}
- inline void Skip_T1_(int8u Bits) {BT->Skip1(Bits);}
- inline void Skip_T2_(int8u Bits) {BT->Skip2(Bits);}
- inline void Skip_T4_(int8u Bits) {BT->Skip4(Bits);}
- inline void Skip_T8_(int8u Bits) {BT->Skip8(Bits);}
- #define Skip_BT(Bits, Name) Skip_BT_(Bits)
- #define Skip_TB( Name) Skip_TB_()
- #define Skip_T1(Bits, Name) Skip_T1_(Bits)
- #define Skip_T2(Bits, Name) Skip_T2_(Bits)
- #define Skip_T4(Bits, Name) Skip_T4_(Bits)
- #define Skip_T8(Bits, Name) Skip_T8_(Bits)
- #define Info_BT(_BITS, _INFO, _NAME) Skip_BT_(_BITS)
- #define Info_TB(_INFO, _NAME) Skip_TB_( )
- #define Info_T1(_BITS, _INFO, _NAME) Skip_T1_(_BITS)
- #define Info_T2(_BITS, _INFO, _NAME) Skip_T2_(_BITS)
- #define Info_T4(_BITS, _INFO, _NAME) Skip_T4_(_BITS)
- #define Info_T8(_BITS, _INFO, _NAME) Skip_T8_(_BITS)
-
- #define TEST_TB_GET(_CODE, _NAME) \
- { \
- Peek_TB(_CODE); \
- if (!_CODE) \
- Skip_TB_(); \
- else \
- { \
- Element_Begin0(); \
- Skip_TB_(); \
-
- #define TEST_TB_TKIP(_NAME) \
- { \
- if (!Peek_TB()) \
- Skip_TB_(); \
- else \
- { \
- Element_Begin0(); \
- Skip_TB_(); \
-
- #define TESTELSE_TB_GET(_CODE, _NAME) \
- { \
- Peek_TB(_CODE); \
- if (_CODE) \
- { \
- Element_Begin0(); \
- Skip_TB_(); \
-
- #define TESTELSE_TB_TKIP(_NAME) \
- { \
- if (Peek_TB()) \
- { \
- Element_Begin0(); \
- Skip_TB_(); \
-
- #define TESTELSE_TB_ELSE(_NAME) \
- Element_End0(); \
- } \
- else \
- { \
- Skip_TB_(); \
-
- #define TESTELSE_TB_END() \
- } \
- } \
-
- #define TEST_TB_END() \
- Element_End0(); \
- } \
- } \
-
- //***************************************************************************
- // Next code planning
- //***************************************************************************
-
- void NextCode_Add(int64u Code);
- void NextCode_Clear();
- bool NextCode_Test();
-
- //***************************************************************************
- // Element trusting
- //***************************************************************************
-
- void Trusted_IsNot (const char*) {Trusted_IsNot();}
- void Trusted_IsNot ();
-
- //***************************************************************************
- // Stream filling
- //***************************************************************************
-
- //Elements - Preparation of element from external app
- size_t Stream_Prepare (stream_t KindOfStream, size_t StreamPos=(size_t)-1);
- size_t Stream_Erase (stream_t KindOfStream, size_t StreamPos);
-
- //Fill with datas (with parameter as a size_t)
- void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, const Ztring &Value, bool Replace=false);
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, const std::string &Value, bool Utf8=true, bool Replace=false) {if (Utf8) Fill(StreamKind, StreamPos, Parameter, Ztring().From_UTF8(Value.c_str(), Value.size()), Replace); else Fill(StreamKind, StreamPos, Parameter, Ztring().From_Local(Value.c_str(), Value.size()), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, const char* Value, size_t Value_Size=Unlimited, bool Utf8=true, bool Replace=false) {if (Utf8) Fill(StreamKind, StreamPos, Parameter, Ztring().From_UTF8(Value, Value_Size), Replace); else Fill(StreamKind, StreamPos, Parameter, Ztring().From_Local(Value, Value_Size), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, const wchar_t* Value, size_t Value_Size=Unlimited, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring().From_Unicode(Value, Value_Size), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int8u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int8s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int16u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int16s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int32u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int32s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int64u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, int64s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, float32 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, float64 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, float80 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- #ifdef SIZE_T_IS_LONG
- inline void Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, size_t Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- #endif //SIZE_T_IS_LONG
- //Fill with datas
- void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, const Ztring &Value, bool Replace=false);
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, const std::string &Value, bool Utf8=true, bool Replace=false) {if (Utf8) Fill(StreamKind, StreamPos, Parameter, Ztring().From_UTF8(Value.c_str(), Value.size())); else Fill(StreamKind, StreamPos, Parameter, Ztring().From_Local(Value.c_str(), Value.size()), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, const char* Value, size_t Value_Size=Unlimited, bool Utf8=true, bool Replace=false) {if (Utf8) Fill(StreamKind, StreamPos, Parameter, Ztring().From_UTF8(Value, Value_Size), Replace); else Fill(StreamKind, StreamPos, Parameter, Ztring().From_Local(Value, Value_Size), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, const wchar_t* Value, size_t Value_Size=Unlimited, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring().From_Unicode(Value, Value_Size), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int8u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int8s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int16u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int16s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int32u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int32s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int64u Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, int64s Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, float32 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, float64 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, float80 Value, int8u AfterComma=3, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, AfterComma), Replace);}
- #ifdef SIZE_T_IS_LONG
- inline void Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, size_t Value, int8u Radix=10, bool Replace=false) {Fill(StreamKind, StreamPos, Parameter, Ztring::ToZtring(Value, Radix).MakeUpperCase(), Replace);}
- #endif //SIZE_T_IS_LONG
- ZtringListList Fill_Temp;
- void Fill_Flush ();
- size_t Fill_Parameter(stream_t StreamKind, generic StreamPos);
-
- const Ztring &Retrieve_Const (stream_t StreamKind, size_t StreamPos, size_t Parameter, info_t KindOfInfo=Info_Text);
- Ztring Retrieve (stream_t StreamKind, size_t StreamPos, size_t Parameter, info_t KindOfInfo=Info_Text);
- const Ztring &Retrieve_Const (stream_t StreamKind, size_t StreamPos, const char* Parameter, info_t KindOfInfo=Info_Text);
- Ztring Retrieve (stream_t StreamKind, size_t StreamPos, const char* Parameter, info_t KindOfInfo=Info_Text);
-
- void Clear (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void Clear (stream_t StreamKind, size_t StreamPos, const char* Parameter);
- void Clear (stream_t StreamKind, size_t StreamPos);
- void Clear (stream_t StreamKind);
- inline void Clear () {File__Base::Clear();}
-
- //***************************************************************************
- // Filling
- //***************************************************************************
-
- //Actions
- void Accept (const char*) {Accept();}
- void Accept ();
- void Accept (File__Analyze* Parser);
- void Reject (const char*) {Reject();}
- void Reject ();
- void Reject (File__Analyze* Parser);
- void Fill (const char*) {Fill();}
- void Fill ();
- void Fill (File__Analyze* Parser);
- void Update (const char*) {Fill();}
- void Update ();
- void Update (File__Analyze* Parser);
- void Finish (const char*) {Finish();}
- void Finish ();
- void Finish (File__Analyze* Parser);
- void ForceFinish (const char*) {ForceFinish();}
- void ForceFinish ();
- void ForceFinish (File__Analyze* Parser);
- void GoTo (int64u GoTo_, const char*) {GoTo(GoTo_);}
- void GoTo (int64u GoTo);
- void GoToFromEnd (int64u GoToFromEnd_, const char*) {GoToFromEnd(GoToFromEnd_);}
- void GoToFromEnd (int64u GoToFromEnd);
- int64u Element_Code_Get (size_t Level);
- int64u Element_TotalSize_Get (size_t LevelLess=0);
- bool Element_IsComplete_Get ();
- void Element_ThisIsAList ();
- void Element_WaitForMoreData ();
- void Element_DoNotTrust (const char*) {Element_DoNotTrust();}
- void Element_DoNotTrust ();
- inline void Element_DoNotShow () {}
- inline void Element_Show () {}
- inline bool Element_Show_Get () {return false;}
- inline void Element_Show_Add (const Ztring &) {}
-
- //Status
- bool Element_IsOK ();
- bool Element_IsNotFinished ();
- bool Element_IsWaitingForMoreData ();
-
- //***************************************************************************
- // Merging
- //***************************************************************************
-
- //Utils
-public :
- size_t Merge(MediaInfo_Internal &ToAdd, bool Erase=true); //Merge 2 File_Base
- size_t Merge(MediaInfo_Internal &ToAdd, stream_t StreamKind, size_t StreamPos_From, size_t StreamPos_To, bool Erase=true); //Merge 2 streams
- size_t Merge(File__Analyze &ToAdd, bool Erase=true); //Merge 2 File_Base
- size_t Merge(File__Analyze &ToAdd, stream_t StreamKind, size_t StreamPos_From, size_t StreamPos_To, bool Erase=true); //Merge 2 streams
-
- void CodecID_Fill (const Ztring &Value, stream_t StreamKind, size_t StreamPos, infocodecid_format_t Format, stream_t StreamKind_CodecID=Stream_Max);
-
- //***************************************************************************
- // Finalize
- //***************************************************************************
-
- //End
- void Streams_Finish_Global();
-
-protected :
- void Streams_Finish_StreamOnly();
- void Streams_Finish_StreamOnly(stream_t StreamKid, size_t StreamPos);
- void Streams_Finish_StreamOnly_General(size_t StreamPos);
- void Streams_Finish_StreamOnly_Video(size_t StreamPos);
- void Streams_Finish_StreamOnly_Audio(size_t StreamPos);
- void Streams_Finish_StreamOnly_Text(size_t StreamPos);
- void Streams_Finish_StreamOnly_Other(size_t StreamPos);
- void Streams_Finish_StreamOnly_Image(size_t StreamPos);
- void Streams_Finish_StreamOnly_Menu(size_t StreamPos);
- void Streams_Finish_InterStreams();
- void Streams_Finish_Cosmetic();
- void Streams_Finish_Cosmetic(stream_t StreamKid, size_t StreamPos);
- void Streams_Finish_Cosmetic_General(size_t StreamPos);
- void Streams_Finish_Cosmetic_Video(size_t StreamPos);
- void Streams_Finish_Cosmetic_Audio(size_t StreamPos);
- void Streams_Finish_Cosmetic_Text(size_t StreamPos);
- void Streams_Finish_Cosmetic_Chapters(size_t StreamPos);
- void Streams_Finish_Cosmetic_Image(size_t StreamPos);
- void Streams_Finish_Cosmetic_Menu(size_t StreamPos);
-
- void Tags ();
- void Video_FrameRate_Rounding (size_t Pos, video Parameter);
- void Video_BitRate_Rounding (size_t Pos, video Parameter);
- void Audio_BitRate_Rounding (size_t Pos, audio Parameter);
-
- //Utils - Finalize
- void Duration_Duration123 (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void FileSize_FileSize123 (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void Kilo_Kilo123 (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void Value_Value123 (stream_t StreamKind, size_t StreamPos, size_t Parameter);
- void YesNo_YesNo (stream_t StreamKind, size_t StreamPos, size_t Parameter);
-
- //***************************************************************************
- //
- //***************************************************************************
-
-protected :
- //Save for speed improvement
- int8u Config_Demux;
- Ztring Config_LineSeparator;
- bool IsSub;
- bool IsRawStream;
-
- //Configuration
- bool DataMustAlwaysBeComplete; //Data must always be complete, else wait for more data
- bool MustUseAlternativeParser; //Must use the second parser (example: for Data part)
-
- //Synchro
- bool MustParseTheHeaderFile; //There is an header part, must parse it
- size_t Trusted;
- size_t Trusted_Multiplier;
-
- //Elements
- size_t Element_Level; //Current level
- bool Element_WantNextLevel; //Want to go to the next leavel instead of the same level
-
- //Element
- int64u Element_Code; //Code filled in the file, copy of Element[Element_Level].Code
- int64u Element_Offset; //Position in the Element (without header)
- int64u Element_Size; //Size of the Element (without header)
-
-private :
- //***************************************************************************
- // Buffer
- //***************************************************************************
-
- void Buffer_Clear(); //Clear the buffer
-protected :
- //Buffer
- bool Open_Buffer_Continue_Loop();
- const int8u* Buffer;
-public : //TO CHANGE
- size_t Buffer_Size;
- int64u Buffer_TotalBytes;
- int64u Buffer_TotalBytes_FirstSynched;
- int64u Buffer_TotalBytes_LastSynched;
- int64u Buffer_PaddingBytes;
- int64u Buffer_JunkBytes;
- float64 Stream_BitRateFromContainer;
-protected :
- int8u* Buffer_Temp;
- size_t Buffer_Temp_Size;
- size_t Buffer_Temp_Size_Max;
- size_t Buffer_Offset; //Temporary usage in this parser
- size_t Buffer_Offset_Temp; //Temporary usage in this parser
- size_t Buffer_MinimumSize;
- size_t Buffer_MaximumSize;
- int64u Buffer_TotalBytes_FirstSynched_Max;
- int64u Buffer_TotalBytes_Fill_Max;
- friend class File__Tags_Helper;
-
- //***************************************************************************
- // Helpers
- //***************************************************************************
-
- bool FileHeader_Begin_0x000001();
- bool FileHeader_Begin_XML(tinyxml2::XMLDocument &Document);
- bool Synchronize_0x000001();
-public:
- void TestContinuousFileNames(size_t CountOfFiles=24, Ztring FileExtension=Ztring());
-
-private :
-
- //***************************************************************************
- // Elements
- //***************************************************************************
-
- //Element
- BitStream_Fast* BS; //For conversion from bytes to bitstream
- BitStream* BT; //For conversion from bytes to bitstream (Little Endian)
-public : //TO CHANGE
- int64u Header_Size; //Size of the header of the current element
-private :
-
- //Elements
- size_t Element_Level_Base; //From other parsers
-
-public : //For very quick access, to not use except if you know what you do
- struct element_details
- {
- int64u Code; //Code filled in the file
- int64u Next; //
- bool WaitForMoreData; //This element is not complete, we need more data
- bool UnTrusted; //This element has a problem
- bool IsComplete; //This element is fully buffered, no need of more
- };
- std::vector<element_details> Element;
-
-private :
-
- //NextCode
- std::map<int64u, bool> NextCode;
-
- //BookMarks
- size_t BookMark_Element_Level;
- int64u BookMark_GoTo;
- std::vector<int64u> BookMark_Code;
- std::vector<int64u> BookMark_Next;
-
-public :
- void BookMark_Set(size_t Element_Level_ToGet=(size_t)-1);
- void BookMark_Get();
- virtual bool BookMark_Needed() {return false;};
-
- //Temp
- std::bitset<32> Status;
- enum status
- {
- IsAccepted,
- IsFilled,
- IsUpdated,
- IsFinished,
- Reserved_04,
- Reserved_05,
- Reserved_06,
- Reserved_07,
- Reserved_08,
- Reserved_09,
- Reserved_10,
- Reserved_11,
- Reserved_12,
- Reserved_13,
- Reserved_14,
- Reserved_15,
- User_16,
- User_17,
- User_18,
- User_19,
- User_20,
- User_21,
- User_22,
- User_23,
- User_24,
- User_25,
- User_26,
- User_27,
- User_28,
- User_29,
- User_30,
- User_31,
- };
- bool ShouldContinueParsing;
-
- //Configuration
- bool MustSynchronize;
- bool CA_system_ID_MustSkipSlices;
-
- //Demux
- enum contenttype
- {
- ContentType_MainStream,
- ContentType_SubStream,
- ContentType_Header,
- ContentType_Synchro
- };
- #if MEDIAINFO_DEMUX
- void Demux (const int8u* Buffer, size_t Buffer_Size, contenttype ContentType, const int8u* OriginalBuffer=NULL, size_t OriginalBuffer_Size=0);
- virtual bool Demux_UnpacketizeContainer_Test() {return true;}
- bool Demux_UnpacketizeContainer_Test_OneFramePerFile();
- void Demux_UnpacketizeContainer_Demux(bool random_access=true);
- void Demux_UnpacketizeContainer_Demux_Clear();
- bool Demux_EventWasSent_Accept_Specific;
- #else //MEDIAINFO_DEMUX
- #define Demux(_A, _B, _C)
- #endif //MEDIAINFO_DEMUX
-
- //Events data
- bool PES_FirstByte_IsAvailable;
- bool PES_FirstByte_Value;
-
- int64u Unsynch_Frame_Count;
-
- //AES
- #if MEDIAINFO_AES
- AESdecrypt* AES;
- int8u* AES_IV;
- int8u* AES_Decrypted;
- size_t AES_Decrypted_Size;
- #endif //MEDIAINFO_AES
-
- //MD5
- #if MEDIAINFO_MD5
- struct MD5Context* MD5;
- int64u Md5_ParseUpTo;
- #endif //MEDIAINFO_MD5
-
- #if MEDIAINFO_SEEK
- private:
- bool Seek_Duration_Detected;
- #endif //MEDIAINFO_SEEK
-
- #if MEDIAINFO_IBI
- public:
- bool Config_Ibi_Create;
- int64u Ibi_SynchronizationOffset_Current;
- int64u Ibi_SynchronizationOffset_BeginOfFrame;
- ibi Ibi; //If Main only
- ibi::stream* IbiStream; //If sub only
- size_t Ibi_Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- void Ibi_Read_Buffer_Unsynched ();
- void Ibi_Stream_Finish ();
- void Ibi_Stream_Finish (int64u Numerator, int64u Denominator); //Partial
- void Ibi_Add ();
- #else //MEDIAINFO_IBI
- size_t Ibi_Read_Buffer_Seek (size_t, int64u, int64u) {return (size_t)-1;}
- void Ibi_Read_Buffer_Unsynched () {}
- void Ibi_Stream_Finish () {}
- void Ibi_Stream_Finish (int64u, int64u) {}
- void Ibi_Add () {}
- #endif //MEDIAINFO_IBI
-};
-
-//Helpers
-#define DETAILS_INFO(_DATA)
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Streams.cpp b/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Streams.cpp
deleted file mode 100644
index 2c30ad3e4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Streams.cpp
+++ /dev/null
@@ -1,2739 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "ZenLib/File.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/BitStream_LE.h"
-#include <cmath>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Preparation des streams
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t File__Analyze::Stream_Prepare (stream_t KindOfStream, size_t StreamPos)
-{
- //Integrity
- if (!Status[IsAccepted] || KindOfStream>Stream_Max)
- return Error;
-
- //Clear
- if (KindOfStream==Stream_Max)
- {
- StreamKind_Last=Stream_Max;
- StreamPos_Last=(size_t)-1;
- return 0;
- }
-
- if (StreamPos>=Count_Get(KindOfStream))
- {
- //Add a stream
- (*Stream)[KindOfStream].resize((*Stream)[KindOfStream].size()+1);
- (*Stream_More)[KindOfStream].resize((*Stream_More)[KindOfStream].size()+1);
- StreamKind_Last=KindOfStream;
- StreamPos_Last=(*Stream)[KindOfStream].size()-1;
- }
- else
- {
- //Insert a stream
- (*Stream)[KindOfStream].insert((*Stream)[KindOfStream].begin()+StreamPos, ZtringList());
- (*Stream_More)[KindOfStream].insert((*Stream_More)[KindOfStream].begin()+StreamPos, ZtringListList());
- StreamKind_Last=KindOfStream;
- StreamPos_Last=StreamPos;
- }
-
- //Filling basic info
- Fill(StreamKind_Last, StreamPos_Last, (size_t)General_Count, Count_Get(StreamKind_Last, StreamPos_Last));
- Fill(StreamKind_Last, StreamPos_Last, General_StreamKind, MediaInfoLib::Config.Info_Get(StreamKind_Last).Read(General_StreamKind, Info_Text));
- Fill(StreamKind_Last, StreamPos_Last, General_StreamKind_String, MediaInfoLib::Config.Language_Get(MediaInfoLib::Config.Info_Get(StreamKind_Last).Read(General_StreamKind, Info_Text)), true);
- for (size_t Pos=0; Pos<Count_Get(KindOfStream); Pos++)
- {
- Fill(StreamKind_Last, Pos, General_StreamCount, Count_Get(StreamKind_Last), 10, true);
- Fill(StreamKind_Last, Pos, General_StreamKindID, Pos, 10, true);
- if (Count_Get(StreamKind_Last)>1)
- Fill(StreamKind_Last, Pos, General_StreamKindPos, Pos+1, 10, true);
- else
- Clear(StreamKind_Last, Pos, General_StreamKindPos);
- }
-
- //Filling Lists & Counts
- if (!IsSub && KindOfStream!=Stream_General)
- {
- const Ztring& StreamKind_Text=Get(KindOfStream, 0, General_StreamKind, Info_Text);
- if (Count_Get(KindOfStream)>1)
- {
- ZtringList Temp; Temp.Separator_Set(0, __T(" / "));
- Temp.Write(Retrieve(Stream_General, 0, Ztring(StreamKind_Text+__T("_Codec_List")).To_Local().c_str()));
- if (StreamPos<Temp.size())
- Temp.insert(Temp.begin()+StreamPos, Ztring());
- else
- Temp.push_back(Ztring());
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Codec_List")).To_Local().c_str(), Temp.Read(), true);
- Temp.Write(Retrieve(Stream_General, 0, Ztring(StreamKind_Text+__T("_Language_List")).To_Local().c_str()));
- if (StreamPos<Temp.size())
- Temp.insert(Temp.begin()+StreamPos, Ztring());
- else
- Temp.push_back(Ztring());
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Language_List")).To_Local().c_str(), Temp.Read(), true);
- Temp.Write(Retrieve(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_List")).To_Local().c_str()));
- if (StreamPos<Temp.size())
- Temp.insert(Temp.begin()+StreamPos, Ztring());
- else
- Temp.push_back(Ztring());
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_List")).To_Local().c_str(), Temp.Read(), true);
- Temp.Write(Retrieve(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_WithHint_List")).To_Local().c_str()));
- if (StreamPos<Temp.size())
- Temp.insert(Temp.begin()+StreamPos, Ztring());
- else
- Temp.push_back(Ztring());
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_WithHint_List")).To_Local().c_str(), Temp.Read(), true);
- }
-
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("Count")).To_Local().c_str(), Count_Get(KindOfStream), 10, true);
- }
-
- //File name and dates
- if (!IsSub && KindOfStream==Stream_General && File_Name.size()>0)
- {
- //File name
- if (File_Name.find(__T("://"))==string::npos)
- {
- Fill (Stream_General, 0, General_CompleteName, File_Name);
- Fill (Stream_General, 0, General_FolderName, FileName::Path_Get(File_Name));
- Fill (Stream_General, 0, General_FileName, FileName::Name_Get(File_Name));
- Fill (Stream_General, 0, General_FileExtension, FileName::Extension_Get(File_Name));
- }
- else
- {
- Ztring FileName_Modified=File_Name;
- size_t Begin=FileName_Modified.find(__T(':'), 6);
- size_t End=FileName_Modified.find(__T('@'));
- if (Begin!=string::npos && End!=string::npos && Begin<End)
- FileName_Modified.erase(Begin, End-Begin);
- Fill (Stream_General, 0, General_CompleteName, FileName_Modified);
- size_t FileName_Modified_PathSeparatorOffset=FileName_Modified.find_last_of(__T('/'));
- if (FileName_Modified_PathSeparatorOffset!=string::npos)
- {
- Fill (Stream_General, 0, General_FolderName, FileName_Modified.substr(0, FileName_Modified_PathSeparatorOffset));
- size_t FileName_Modified_ExtensionSeparatorOffset=FileName_Modified.find_last_of(__T('.'));
- if (FileName_Modified_ExtensionSeparatorOffset!=string::npos && FileName_Modified_ExtensionSeparatorOffset>FileName_Modified_PathSeparatorOffset)
- {
- Fill (Stream_General, 0, General_FileName, FileName_Modified.substr(FileName_Modified_PathSeparatorOffset+1, FileName_Modified_ExtensionSeparatorOffset-(FileName_Modified_PathSeparatorOffset+1)));
- Fill (Stream_General, 0, General_FileExtension, FileName_Modified.substr(FileName_Modified_ExtensionSeparatorOffset+1));
- }
- else
- Fill (Stream_General, 0, General_FileName, FileName_Modified.substr(FileName_Modified_PathSeparatorOffset+1));
- }
- }
-
- //File dates
- File F(File_Name);
- Fill (Stream_General, 0, General_File_Created_Date, F.Created_Get());
- Fill (Stream_General, 0, General_File_Created_Date_Local, F.Created_Local_Get());
- Fill (Stream_General, 0, General_File_Modified_Date, F.Modified_Get());
- Fill (Stream_General, 0, General_File_Modified_Date_Local, F.Modified_Local_Get());
- }
-
- //File size
- if (((!IsSub || !File_Name.empty()) && KindOfStream==Stream_General && File_Size!=(int64u)-1))
- Fill (Stream_General, 0, General_FileSize, File_Size);
-
- //Fill with already ready data
- for (size_t Pos=0; Pos<Fill_Temp.size(); Pos++)
- if (Fill_Temp(Pos, 0).IsNumber())
- Fill(StreamKind_Last, StreamPos_Last, Fill_Temp(Pos, 0).To_int32u(), Fill_Temp(Pos, 1));
- else
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Temp(Pos, 0).To_UTF8().c_str(), Fill_Temp(Pos, 1));
- #if MEDIAINFO_DEMUX
- if (!Retrieve(KindOfStream, StreamPos_Last, "Demux_InitBytes").empty())
- (*Stream_More)[KindOfStream][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT"); //TODO: find a better way to hide additional fields by default
- #endif //MEDIAINFO_DEMUX
- }
- Fill_Temp.clear();
-
- return StreamPos_Last; //The position in the stream count
-}
-
-size_t File__Analyze::Stream_Erase (stream_t KindOfStream, size_t StreamPos)
-{
- //Integrity
- if (!Status[IsAccepted] || KindOfStream>Stream_Max || StreamPos>=Count_Get(KindOfStream))
- return Error;
-
- //Filling Lists & Counts
- if (!IsSub && KindOfStream!=Stream_General)
- {
- const Ztring& StreamKind_Text=Get(KindOfStream, 0, General_StreamKind, Info_Text);
- ZtringList Temp; Temp.Separator_Set(0, __T(" / "));
- Temp.Write(Retrieve(Stream_General, 0, Ztring(StreamKind_Text+__T("_Codec_List")).To_Local().c_str()));
- if (StreamPos<Temp.size())
- Temp.erase(Temp.begin()+StreamPos);
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Codec_List")).To_Local().c_str(), Temp.Read(), true);
- Temp.Write(Retrieve(Stream_General, 0, Ztring(StreamKind_Text+__T("_Language_List")).To_Local().c_str()));
- if (StreamPos<Temp.size())
- Temp.erase(Temp.begin()+StreamPos);
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Language_List")).To_Local().c_str(), Temp.Read(), true);
- Temp.Write(Retrieve(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_List")).To_Local().c_str()));
- if (StreamPos<Temp.size())
- Temp.erase(Temp.begin()+StreamPos);
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_List")).To_Local().c_str(), Temp.Read(), true);
- Temp.Write(Retrieve(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_WithHint_List")).To_Local().c_str()));
- if (StreamPos<Temp.size())
- Temp.erase(Temp.begin()+StreamPos);
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_WithHint_List")).To_Local().c_str(), Temp.Read(), true);
-
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("Count")).To_Local().c_str(), Count_Get(KindOfStream)-1, 10, true);
- }
-
- //Insert a stream
- (*Stream)[KindOfStream].erase((*Stream)[KindOfStream].begin()+StreamPos);
- (*Stream_More)[KindOfStream].erase((*Stream_More)[KindOfStream].begin()+StreamPos);
-
- //Filling basic info
- for (size_t Pos=0; Pos<Count_Get(KindOfStream); Pos++)
- {
- Fill(KindOfStream, Pos, General_StreamCount, Count_Get(StreamKind_Last), 10, true);
- Fill(KindOfStream, Pos, General_StreamKindID, Pos, 10, true);
- if (Count_Get(KindOfStream)>1)
- Fill(KindOfStream, Pos, General_StreamKindPos, Pos+1, 10, true);
- else
- Clear(KindOfStream, Pos, General_StreamKindPos);
- }
-
- StreamKind_Last=Stream_Max;
- StreamPos_Last=(size_t)-1;
-
- return (*Stream)[KindOfStream].size()-1; //The position in the stream count
-}
-
-
-//***************************************************************************
-// Filling
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Fill (stream_t StreamKind, size_t StreamPos, size_t Parameter, const Ztring &Value, bool Replace)
-{
- //Integrity
- if (!Status[IsAccepted] || StreamKind>Stream_Max || Parameter==(size_t)-1)
- return;
-
- //Handling values with \r\n inside
- if (Value.find(__T('\r'))!=string::npos || Value.find(__T('\n'))!=string::npos)
- {
- Ztring NewValue=Value;
- NewValue.FindAndReplace(__T("\r\n"), __T(" / "), 0, Ztring_Recursive);
- NewValue.FindAndReplace(__T("\r"), __T(" / "), 0, Ztring_Recursive);
- NewValue.FindAndReplace(__T("\n"), __T(" / "), 0, Ztring_Recursive);
- if (NewValue.size()>=3 && NewValue.rfind(__T(" / "))==NewValue.size()-3)
- NewValue.resize(NewValue.size()-3);
- Fill(StreamKind, StreamPos, Parameter, NewValue, Replace);
- return;
- }
-
- //Handle Value before StreamKind
- if (StreamKind==Stream_Max || StreamPos>=(*Stream)[StreamKind].size())
- {
- ZtringList NewList;
- NewList.push_back(Ztring().From_Number(Parameter));
- NewList.push_back(Value);
- Fill_Temp.push_back(NewList);
- return; //No streams
- }
-
- //Some defaults
- if (Parameter==Fill_Parameter(StreamKind, Generic_Format_Commercial))
- Replace=true;
- if (Parameter==Fill_Parameter(StreamKind, Generic_Format_Commercial_IfAny))
- Replace=true;
-
- if (!Replace && Value.empty())
- return;
- if (Replace && Value.empty())
- {
- Clear(StreamKind, StreamPos, Parameter);
- return;
- }
-
- Ztring &Target=(*Stream)[StreamKind][StreamPos](Parameter);
- if (Target.empty() || Replace)
- Target=Value; //First value
- else
- {
- Target+=MediaInfoLib::Config.TagSeparator_Get();
- Target+=Value;
- }
- Status[IsUpdated]=true;
-
- //Deprecated
- if (Parameter==Fill_Parameter(StreamKind, Generic_BitDepth))
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Resolution), Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_BitDepth)), true);
- if (StreamKind==Stream_Video && Parameter==Video_Colorimetry)
- Fill(Stream_Video, StreamPos, Video_ChromaSubsampling, Value, Replace);
-
- if (StreamKind==Stream_Video && Parameter==Video_DisplayAspectRatio && !Value.empty() && Retrieve(Stream_Video, StreamPos, Video_PixelAspectRatio).empty())
- {
- float DAR =Retrieve(Stream_Video, StreamPos, Video_DisplayAspectRatio).To_float32();
- float Width =Retrieve(Stream_Video, StreamPos, Video_Width ).To_float32();
- float Height=Retrieve(Stream_Video, StreamPos, Video_Height ).To_float32();
- if (DAR && Height && Width)
- {
- if (Retrieve(Stream_Video, StreamPos, Video_DisplayAspectRatio)==__T("1.778"))
- DAR=((float)16)/9; //More exact value
- if (Retrieve(Stream_Video, StreamPos, Video_DisplayAspectRatio)==__T("1.333"))
- DAR=((float)4)/3; //More exact value
- Fill(Stream_Video, StreamPos, Video_PixelAspectRatio, DAR/(((float32)Width)/Height));
- }
- }
-
- if (StreamKind==Stream_Video && Parameter==Video_PixelAspectRatio && !Value.empty() && Retrieve(Stream_Video, StreamPos, Video_DisplayAspectRatio).empty())
- {
- float32 PAR =Retrieve(Stream_Video, StreamPos, Video_PixelAspectRatio ).To_float32();
- if (PAR>(float32)12/(float32)11*0.999 && PAR<(float32)12/(float32)11*1.001)
- PAR=(float32)12/(float32)11;
- if (PAR>(float32)10/(float32)11*0.999 && PAR<(float32)10/(float32)11*1.001)
- PAR=(float32)10/(float32)11;
- if (PAR>(float32)16/(float32)11*0.999 && PAR<(float32)16/(float32)11*1.001)
- PAR=(float32)16/(float32)11;
- if (PAR>(float32)40/(float32)33*0.999 && PAR<(float32)40/(float32)33*1.001)
- PAR=(float32)40/(float32)33;
- if (PAR>(float32)24/(float32)11*0.999 && PAR<(float32)24/(float32)11*1.001)
- PAR=(float32)24/(float32)11;
- if (PAR>(float32)20/(float32)11*0.999 && PAR<(float32)20/(float32)11*1.001)
- PAR=(float32)20/(float32)11;
- if (PAR>(float32)32/(float32)11*0.999 && PAR<(float32)32/(float32)11*1.001)
- PAR=(float32)32/(float32)11;
- if (PAR>(float32)80/(float32)33*0.999 && PAR<(float32)80/(float32)33*1.001)
- PAR=(float32)80/(float32)33;
- if (PAR>(float32)18/(float32)11*0.999 && PAR<(float32)18/(float32)11*1.001)
- PAR=(float32)18/(float32)11;
- if (PAR>(float32)15/(float32)11*0.999 && PAR<(float32)15/(float32)11*1.001)
- PAR=(float32)15/(float32)11;
- if (PAR>(float32)64/(float32)33*0.999 && PAR<(float32)64/(float32)33*1.001)
- PAR=(float32)64/(float32)33;
- if (PAR>(float32)160/(float32)99*0.999 && PAR<(float32)160/(float32)99*1.001)
- PAR=(float32)160/(float32)99;
- if (PAR>(float32)4/(float32)3*0.999 && PAR<(float32)4/(float32)3*1.01)
- PAR=(float32)4/(float32)3;
- if (PAR>(float32)3/(float32)2*0.999 && PAR<(float32)3/(float32)2*1.001)
- PAR=(float32)3/(float32)2;
- if (PAR>(float32)2/(float32)1*0.999 && PAR<(float32)2/(float32)1*1.001)
- PAR=(float32)2;
- if (PAR>(float32)59/(float32)54*0.999 && PAR<(float32)59/(float32)54*1.001)
- PAR=(float32)59/(float32)54;
- float32 Width =Retrieve(Stream_Video, StreamPos, Video_Width ).To_float32();
- float32 Height=Retrieve(Stream_Video, StreamPos, Video_Height ).To_float32();
- if (PAR && Height && Width)
- Fill(Stream_Video, StreamPos, Video_DisplayAspectRatio, ((float32)Width)/Height*PAR);
- }
-
- if (StreamKind==Stream_Image && Parameter==Image_DisplayAspectRatio && !Value.empty() && Retrieve(Stream_Image, StreamPos, Image_PixelAspectRatio).empty())
- {
- float DAR =Retrieve(Stream_Image, StreamPos, Image_DisplayAspectRatio).To_float32();
- float Width =Retrieve(Stream_Image, StreamPos, Image_Width ).To_float32();
- float Height=Retrieve(Stream_Image, StreamPos, Image_Height ).To_float32();
- if (DAR && Height && Width)
- {
- if (Retrieve(Stream_Image, StreamPos, Image_DisplayAspectRatio)==__T("1.778"))
- DAR=((float)16)/9; //More exact value
- if (Retrieve(Stream_Image, StreamPos, Image_DisplayAspectRatio)==__T("1.333"))
- DAR=((float)4)/3; //More exact value
- Fill(Stream_Image, StreamPos, Image_PixelAspectRatio, DAR/(((float32)Width)/Height));
- }
- }
-
- if (StreamKind==Stream_Image && Parameter==Image_PixelAspectRatio && !Value.empty() && Retrieve(Stream_Image, StreamPos, Image_DisplayAspectRatio).empty())
- {
- float32 PAR =Retrieve(Stream_Image, StreamPos, Image_PixelAspectRatio ).To_float32();
- if (PAR>(float32)12/(float32)11*0.999 && PAR<(float32)12/(float32)11*1.001)
- PAR=(float32)12/(float32)11;
- if (PAR>(float32)10/(float32)11*0.999 && PAR<(float32)10/(float32)11*1.001)
- PAR=(float32)10/(float32)11;
- if (PAR>(float32)16/(float32)11*0.999 && PAR<(float32)16/(float32)11*1.001)
- PAR=(float32)16/(float32)11;
- if (PAR>(float32)40/(float32)33*0.999 && PAR<(float32)40/(float32)33*1.001)
- PAR=(float32)40/(float32)33;
- if (PAR>(float32)24/(float32)11*0.999 && PAR<(float32)24/(float32)11*1.001)
- PAR=(float32)24/(float32)11;
- if (PAR>(float32)20/(float32)11*0.999 && PAR<(float32)20/(float32)11*1.001)
- PAR=(float32)20/(float32)11;
- if (PAR>(float32)32/(float32)11*0.999 && PAR<(float32)32/(float32)11*1.001)
- PAR=(float32)32/(float32)11;
- if (PAR>(float32)80/(float32)33*0.999 && PAR<(float32)80/(float32)33*1.001)
- PAR=(float32)80/(float32)33;
- if (PAR>(float32)18/(float32)11*0.999 && PAR<(float32)18/(float32)11*1.001)
- PAR=(float32)18/(float32)11;
- if (PAR>(float32)15/(float32)11*0.999 && PAR<(float32)15/(float32)11*1.001)
- PAR=(float32)15/(float32)11;
- if (PAR>(float32)64/(float32)33*0.999 && PAR<(float32)64/(float32)33*1.001)
- PAR=(float32)64/(float32)33;
- if (PAR>(float32)160/(float32)99*0.999 && PAR<(float32)160/(float32)99*1.001)
- PAR=(float32)160/(float32)99;
- if (PAR>(float32)4/(float32)3*0.999 && PAR<(float32)4/(float32)3*1.01)
- PAR=(float32)4/(float32)3;
- if (PAR>(float32)3/(float32)2*0.999 && PAR<(float32)3/(float32)2*1.001)
- PAR=(float32)3/(float32)2;
- if (PAR>(float32)2/(float32)1*0.999 && PAR<(float32)2/(float32)1*1.001)
- PAR=(float32)2;
- if (PAR>(float32)59/(float32)54*0.999 && PAR<(float32)59/(float32)54*1.001)
- PAR=(float32)59/(float32)54;
- float32 Width =Retrieve(Stream_Image, StreamPos, Image_Width ).To_float32();
- float32 Height=Retrieve(Stream_Image, StreamPos, Image_Height ).To_float32();
- if (PAR && Height && Width)
- Fill(Stream_Image, StreamPos, Image_DisplayAspectRatio, ((float32)Width)/Height*PAR);
- }
-
- //Commercial name
- if (Parameter==Fill_Parameter(StreamKind, Generic_Format))
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format_Commercial), Value);
- if (Parameter==Fill_Parameter(StreamKind, Generic_Format_Commercial_IfAny))
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format_Commercial), Value, true);
-
- if (!IsSub)
- {
- Ztring ParameterName=Retrieve(StreamKind, StreamPos, Parameter, Info_Name);
-
- //Lists
- if (StreamKind!=Stream_General && (ParameterName==__T("Codec/String")
- || ParameterName==__T("Language/String")
- || ParameterName==__T("Format")
- || ParameterName==__T("CodecID/Hint")))
- {
- Ztring Temp1, Temp2;
- for (size_t StreamPos_Local=0; StreamPos_Local<(*Stream)[StreamKind].size(); StreamPos_Local++)
- {
- if (ParameterName==__T("CodecID/Hint"))
- Temp1+=Retrieve(StreamKind, StreamPos_Local, Fill_Parameter(StreamKind, Generic_Format))+__T(" / ");
- else
- Temp1+=Retrieve(StreamKind, StreamPos_Local, Parameter)+__T(" / ");
- if (ParameterName==__T("Format")
- || ParameterName==__T("CodecID/Hint"))
- {
- Temp2+=Retrieve(StreamKind, StreamPos_Local, Fill_Parameter(StreamKind, Generic_Format));
- if (!Retrieve(StreamKind, StreamPos_Local, Fill_Parameter(StreamKind, Generic_CodecID_Hint)).empty())
- {
- Temp2+=__T(" (");
- Temp2+=Retrieve(StreamKind, StreamPos_Local, Fill_Parameter(StreamKind, Generic_CodecID_Hint));
- Temp2+=__T(")");
- }
- Temp2+=__T(" / ");
- }
- }
- if (!Temp1.empty())
- Temp1.resize(Temp1.size()-3); //Delete extra " / "
- if (!Temp2.empty())
- Temp2.resize(Temp2.size()-3); //Delete extra " / "
- Ztring StreamKind_Text=Get(StreamKind, 0, General_StreamKind, Info_Text);
- if (ParameterName==__T("Codec/String"))
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Codec_List")).To_Local().c_str(), Temp1, true);
- if (ParameterName==__T("Language/String"))
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Language_List")).To_Local().c_str(), Temp1, true);
- if (ParameterName==__T("Format")
- || ParameterName==__T("CodecID/Hint"))
- {
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_List")).To_Local().c_str(), Temp1, true);
- Fill(Stream_General, 0, Ztring(StreamKind_Text+__T("_Format_WithHint_List")).To_Local().c_str(), Temp2, true);
- }
- }
-
- //Human readable
- if (MediaInfoLib::Config.ReadByHuman_Get())
- {
- //Strings
- const Ztring &List_Measure_Value=MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter, Info_Measure);
- if (List_Measure_Value==__T(" byte"))
- FileSize_FileSize123(StreamKind, StreamPos, Parameter);
- else if (List_Measure_Value==__T(" bps") || List_Measure_Value==__T(" Hz"))
- Kilo_Kilo123(StreamKind, StreamPos, Parameter);
- else if (List_Measure_Value==__T(" ms"))
- Duration_Duration123(StreamKind, StreamPos, Parameter);
- else if (List_Measure_Value==__T("Yes"))
- YesNo_YesNo(StreamKind, StreamPos, Parameter);
- else
- Value_Value123(StreamKind, StreamPos, Parameter);
-
- //BitRate_Mode / OverallBitRate_Mode
- if (ParameterName==(StreamKind==Stream_General?__T("OverallBitRate_Mode"):__T("BitRate_Mode")) && MediaInfoLib::Config.ReadByHuman_Get())
- {
- Clear(StreamKind, StreamPos, StreamKind==Stream_General?"OverallBitRate_Mode/String":"BitRate_Mode/String");
-
- ZtringList List;
- List.Separator_Set(0, __T(" / "));
- List.Write(Retrieve(StreamKind, StreamPos, Parameter));
-
- //Per value
- for (size_t Pos=0; Pos<List.size(); Pos++)
- List[Pos]=MediaInfoLib::Config.Language_Get(Ztring(__T("BitRate_Mode_"))+List[Pos]);
-
- Ztring Translated=List.Read();
- Fill(StreamKind, StreamPos, StreamKind==Stream_General?"OverallBitRate_Mode/String":"BitRate_Mode/String", Translated.find(__T("BitRate_Mode_"))?Translated:Value);
- }
-
- //Encoded_Library
- if (ParameterName==__T("Encoded_Library")
- || ParameterName==__T("Encoded_Library/Name")
- || ParameterName==__T("Encoded_Library/Version")
- || ParameterName==__T("Encoded_Library/Date"))
- {
- Ztring Name=Retrieve(StreamKind, StreamPos, "Encoded_Library/Name");
- Ztring Version=Retrieve(StreamKind, StreamPos, "Encoded_Library/Version");
- Ztring Date=Retrieve(StreamKind, StreamPos, "Encoded_Library/Date");
- if (!Name.empty())
- {
- Ztring String=Name;
- if (!Version.empty())
- {
- String+=__T(" ");
- String+=Version;
- }
- if (!Date.empty())
- {
- String+=__T(" (");
- String+=Date;
- String+=__T(")");
- }
- Fill(StreamKind, StreamPos, "Encoded_Library/String", String, true);
- }
- else
- Fill(StreamKind, StreamPos, "Encoded_Library/String", Retrieve(StreamKind, StreamPos, "Encoded_Library"), true);
- }
-
- //Format_Settings_Matrix
- if (StreamKind==Stream_Video && Parameter==Video_Format_Settings_Matrix)
- {
- Ztring Translated=MediaInfoLib::Config.Language_Get(Ztring(__T("Format_Settings_Matrix_"))+Value);
- Fill(Stream_Video, StreamPos, Video_Format_Settings_Matrix_String, Translated.find(__T("Format_Settings_Matrix_"))?Translated:Value, Replace);
- }
-
- //Scan type
- if (StreamKind==Stream_Video && Parameter==Video_ScanType)
- {
- Ztring Translated=MediaInfoLib::Config.Language_Get(Ztring(__T("Interlaced_"))+Value);
- Fill(Stream_Video, StreamPos, Video_ScanType_String, Translated.find(__T("Interlaced_"))?Translated:Value, Replace);
- }
- if (StreamKind==Stream_Video && Parameter==Video_ScanType_Original)
- {
- Ztring Translated=MediaInfoLib::Config.Language_Get(Ztring(__T("Interlaced_"))+Value);
- Fill(Stream_Video, StreamPos, Video_ScanType_Original_String, Translated.find(__T("Interlaced_"))?Translated:Value, Replace);
- }
- if (StreamKind==Stream_Video && Parameter==Video_ScanType_StoreMethod)
- {
- Ztring ToTranslate=Ztring(__T("StoreMethod_"))+Value;
- if (!Retrieve(Stream_Video, StreamPos, Video_ScanType_StoreMethod_FieldsPerBlock).empty())
- ToTranslate+=__T('_')+Retrieve(Stream_Video, StreamPos, Video_ScanType_StoreMethod_FieldsPerBlock);
- Ztring Translated=MediaInfoLib::Config.Language_Get(ToTranslate);
- Fill(Stream_Video, StreamPos, Video_ScanType_StoreMethod_String, Translated.find(__T("StoreMethod_"))?Translated:Value, Replace);
- }
-
- //Scan order
- if (StreamKind==Stream_Video && Parameter==Video_ScanOrder)
- {
- Ztring Translated=MediaInfoLib::Config.Language_Get(Ztring(__T("Interlaced_"))+Value);
- Fill(Stream_Video, StreamPos, Video_ScanOrder_String, Translated.find(__T("Interlaced_"))?Translated:Value, Replace);
- }
- if (StreamKind==Stream_Video && Parameter==Video_ScanOrder_Stored)
- {
- Ztring Translated=MediaInfoLib::Config.Language_Get(Ztring(__T("Interlaced_"))+Value);
- Fill(Stream_Video, StreamPos, Video_ScanOrder_Stored_String, Translated.find(__T("Interlaced_"))?Translated:Value, Replace);
- }
- if (StreamKind==Stream_Video && Parameter==Video_ScanOrder_Original)
- {
- Ztring Translated=MediaInfoLib::Config.Language_Get(Ztring(__T("Interlaced_"))+Value);
- Fill(Stream_Video, StreamPos, Video_ScanOrder_Original_String, Translated.find(__T("Interlaced_"))?Translated:Value, Replace);
- }
-
- //Interlacement
- if (StreamKind==Stream_Video && Parameter==Video_Interlacement)
- {
- const Ztring &Z1=Retrieve(Stream_Video, StreamPos, Video_Interlacement);
- if (Z1.size()==3)
- Fill(Stream_Video, StreamPos, Video_Interlacement_String, MediaInfoLib::Config.Language_Get(Ztring(__T("Interlaced_"))+Z1), Replace);
- else
- Fill(Stream_Video, StreamPos, Video_Interlacement_String, MediaInfoLib::Config.Language_Get(Z1), Replace);
- if (Retrieve(Stream_Video, StreamPos, Video_Interlacement_String).empty())
- Fill(Stream_Video, StreamPos, Video_Interlacement_String, Z1, true);
- }
-
- //FrameRate_Mode
- if (StreamKind==Stream_Video && Parameter==Video_FrameRate_Mode)
- {
- Ztring Translated=MediaInfoLib::Config.Language_Get(Ztring(__T("FrameRate_Mode_"))+Value);
- Fill(Stream_Video, StreamPos, Video_FrameRate_Mode_String, Translated.find(__T("FrameRate_Mode_"))?Translated:Value, Replace);
- }
-
- //Compression_Mode
- if (Parameter==Fill_Parameter(StreamKind, Generic_Compression_Mode))
- {
- Ztring Translated=MediaInfoLib::Config.Language_Get(Ztring(__T("Compression_Mode_"))+Value);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Compression_Mode_String), Translated.find(__T("Compression_Mode_"))?Translated:Value, Replace);
- }
-
- //Delay_Source
- if (Parameter==Fill_Parameter(StreamKind, Generic_Delay_Source))
- {
- Ztring Translated=MediaInfoLib::Config.Language_Get(Ztring(__T("Delay_Source_"))+Value);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Delay_Source_String), Translated.find(__T("Delay_Source_"))?Translated:Value, Replace);
- }
- }
-
- //General Format
- if (Parameter==Fill_Parameter(StreamKind, Generic_Format) && Retrieve(Stream_General, 0, General_Format).empty() && !Value.empty())
- Fill(Stream_General, 0, General_Format, Value); //If not already filled, we are filling with the stream format
-
- //ID
- if (Parameter==General_ID)
- Fill(StreamKind, StreamPos, General_ID_String, Value, Replace);
-
- //Format
- if (Parameter==Fill_Parameter(StreamKind, Generic_Format))
- {
- if ((Replace && !MediaInfoLib::Config.Format_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format)), InfoFormat_Info).empty()) || Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format_Info)).empty())
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format_Info), MediaInfoLib::Config.Format_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format)), InfoFormat_Info), true);
- if ((Replace && !MediaInfoLib::Config.Format_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format)), InfoFormat_Url).empty()) || Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format_Url)).empty())
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format_Url) , MediaInfoLib::Config.Format_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format)), InfoFormat_Url), true);
- if (StreamKind!=Stream_Menu)
- {
- if ((Replace && !MediaInfoLib::Config.Format_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format)), InfoFormat_InternetMediaType).empty()) || Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_InternetMediaType)).empty())
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_InternetMediaType), MediaInfoLib::Config.Format_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format)), InfoFormat_InternetMediaType), true);
- if ((Replace && !MediaInfoLib::Config.Format_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format)), InfoFormat_Compression_Mode).empty()) || Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Compression_Mode)).empty())
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Compression_Mode), MediaInfoLib::Config.Format_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format)), InfoFormat_Compression_Mode), true);
- }
- if (StreamKind==Stream_General)
- {
- Fill(Stream_General, 0, General_Format_Extensions, MediaInfoLib::Config.Format_Get(Value, InfoFormat_Extensions), true);
- Fill(Stream_General, 0, General_Format_String, Value, true);
- Fill(Stream_General, 0, General_Codec, Value, true);
- Fill(Stream_General, 0, General_Codec_String, Value, true);
- }
- }
- if (StreamKind==Stream_General && Parameter==General_Format_Info)
- (*Stream)[Stream_General][0](General_Codec_Info)=Value;
- if (StreamKind==Stream_General && Parameter==General_Format_Url)
- (*Stream)[Stream_General][0](General_Codec_Url)=Value;
- if (StreamKind==Stream_General && Parameter==General_Format_Extensions)
- (*Stream)[Stream_General][0](General_Codec_Extensions)=Value;
- if (StreamKind==Stream_General && Parameter==General_Format_Settings)
- (*Stream)[Stream_General][0](General_Codec_Settings)=Value;
-
- //Codec
- if (Parameter==Fill_Parameter(StreamKind, Generic_Codec))
- {
- const Ztring &C1=MediaInfoLib::Config.Codec_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Codec)), InfoCodec_Name, (stream_t)StreamKind);
- if (C1.empty())
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Codec_String), Value, true);
- else
- {
- Ztring D=Retrieve(StreamKind, StreamPos, "Codec/Family");
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Codec_String), C1, true);
- Fill(StreamKind, StreamPos, "Codec/Family", MediaInfoLib::Config.Codec_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Codec)), InfoCodec_KindofCodec, StreamKind), true);
- Ztring B=Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Codec));
- Ztring C=MediaInfoLib::Config.Codec_Get(B, InfoCodec_KindofCodec, StreamKind);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Codec_Info) , MediaInfoLib::Config.Codec_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Codec)), InfoCodec_Description, StreamKind), true);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Codec_Url) , MediaInfoLib::Config.Codec_Get(Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Codec)), InfoCodec_Url, StreamKind), true);
- }
- }
-
- //CodecID_Description
- if (Parameter==Fill_Parameter(StreamKind, Generic_CodecID_Info) && Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_CodecID_Description))==Value)
- Clear(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_CodecID_Description));
-
- //BitRate from BitRate_Nominal
- if (Parameter==Fill_Parameter(StreamKind, Generic_BitRate)
- || Parameter==Fill_Parameter(StreamKind, Generic_BitRate_Nominal))
- {
- float32 BitRate=Retrieve(StreamKind, StreamPos, "BitRate").To_float32();
- float32 BitRate_Nominal=Retrieve(StreamKind, StreamPos, "BitRate_Nominal").To_float32();
- if (BitRate_Nominal>BitRate*0.95 && BitRate_Nominal<BitRate*1.05)
- {
- Ztring Temp=Retrieve(StreamKind, StreamPos, "BitRate_Nominal");
- Clear(StreamKind, StreamPos, "BitRate_Nominal");
- Fill(StreamKind, StreamPos, "BitRate", Temp, true);
- }
- }
-
- //BitRate from BitRate_Maximum
- if (Parameter==Fill_Parameter(StreamKind, Generic_BitRate)
- || Parameter==Fill_Parameter(StreamKind, Generic_BitRate_Maximum))
- {
- float32 BitRate=Retrieve(StreamKind, StreamPos, "BitRate").To_float32();
- float32 BitRate_Maximum=Retrieve(StreamKind, StreamPos, "BitRate_Maximum").To_float32();
- if (BitRate>BitRate_Maximum*0.99 && BitRate<BitRate_Maximum*1.01)
- {
- Ztring Temp=Retrieve(StreamKind, StreamPos, "BitRate_Maximum");
- Clear(StreamKind, StreamPos, "BitRate_Maximum");
- Fill(StreamKind, StreamPos, "BitRate", Temp, true);
- }
- }
-
- //File size
- if (StreamKind==Stream_General && Parameter==General_FileSize)
- {
- int64u File_Size_Save=File_Size;
- File_Size=Value.To_int64u();
- for (size_t Kind=Stream_Video; Kind<Stream_Menu; Kind++)
- for (size_t Pos=0; Pos<Count_Get((stream_t)Kind); Pos++)
- FileSize_FileSize123((stream_t)Kind, Pos, Fill_Parameter((stream_t)Kind, Generic_StreamSize));
- File_Size=File_Size_Save;
- }
-
- //Delay/Video
- if (StreamKind==Stream_Video && StreamPos==0 && Parameter==Video_Delay)
- {
- for (size_t Pos=0; Pos<Count_Get(Stream_Audio); Pos++)
- if (!Retrieve(Stream_Audio, Pos, Audio_Delay).empty())
- {
- Fill(Stream_Audio, Pos, Audio_Video_Delay, Retrieve(Stream_Audio, Pos, Audio_Delay).To_int64s()-Value.To_int64s(), 10, true);
- if (Retrieve(Stream_Audio, Pos, Audio_Video_Delay).To_int64u()==0)
- for (size_t Param_Pos=Audio_Video_Delay+1; Param_Pos<=Audio_Video_Delay+4; Param_Pos++)
- if (Param_Pos<(*Stream)[Stream_Audio][Pos].size())
- (*Stream)[Stream_Audio][Pos][Param_Pos].clear();
- }
- for (size_t Pos=0; Pos<Count_Get(Stream_Text); Pos++)
- if (!Retrieve(Stream_Text, Pos, Text_Delay).empty())
- {
- Fill(Stream_Text, Pos, Text_Video_Delay, Retrieve(Stream_Text, Pos, Text_Delay).To_int64s()-Value.To_int64s(), 10, true);
- if (Retrieve(Stream_Text, Pos, Text_Video_Delay).To_int64u()==0)
- for (size_t Param_Pos=Text_Video_Delay+1; Param_Pos<=Text_Video_Delay+4; Param_Pos++)
- if (Param_Pos<(*Stream)[Stream_Text][Pos].size())
- (*Stream)[Stream_Text][Pos][Param_Pos].clear();
- }
- }
- if (StreamKind==Stream_Audio && Parameter==Audio_Delay && Count_Get(Stream_Video) && !Retrieve(Stream_Audio, StreamPos, Audio_Delay).empty() && !Retrieve(Stream_Video, 0, Video_Delay).empty())
- {
- if (Replace)
- Clear(Stream_Audio, StreamPos, Audio_Video_Delay);
- ZtringList AudioDelay; AudioDelay.Separator_Set(0, __T(" / ")); AudioDelay.Write(Retrieve(Stream_Audio, StreamPos, Audio_Delay));
- ZtringList VideoDelay; VideoDelay.Separator_Set(0, __T(" / ")); VideoDelay.Write(Retrieve(Stream_Video, 0, Video_Delay));
- if (!AudioDelay.empty() && !VideoDelay.empty() && AudioDelay.size() <= VideoDelay.size())
- {
- Fill(Stream_Audio, StreamPos, Audio_Video_Delay, AudioDelay(AudioDelay.size()-1).To_int64s()-VideoDelay(VideoDelay.size()-1).To_int64s(), 10);
- if (VideoDelay.size()==1 && Retrieve(Stream_Audio, StreamPos, Audio_Video_Delay).To_int64u()==0)
- for (size_t Pos=Audio_Video_Delay+1; Pos<=Audio_Video_Delay+4; Pos++)
- if (Pos<(*Stream)[Stream_Audio][StreamPos].size())
- (*Stream)[Stream_Audio][StreamPos][Pos].clear();
- }
- }
- if (StreamKind==Stream_Text && Parameter==Text_Delay && Count_Get(Stream_Video) && !Retrieve(Stream_Text, StreamPos, Text_Delay).empty() && !Retrieve(Stream_Video, 0, Video_Delay).empty())
- {
- Ztring MuxingMode_MoreInfo=Get(Stream_Text, StreamPos, "MuxingMode_MoreInfo");
- Ztring StreamID=MuxingMode_MoreInfo.SubString(__T("Muxed in Video #"), Ztring());
- size_t StreamID_Int=(size_t)StreamID.To_int64u();
- if (StreamID_Int)
- StreamID_Int--;
- Fill(Stream_Text, StreamPos, Text_Video_Delay, Value.To_int64s()-Retrieve(Stream_Video, StreamID_Int, Video_Delay).To_int64s(), 10, true);
- if (Retrieve(Stream_Text, StreamPos, Text_Video_Delay).To_int64u()==0)
- for (size_t Pos=Text_Video_Delay+1; Pos<=Text_Video_Delay+4; Pos++)
- if (Pos<(*Stream)[Stream_Text][StreamPos].size())
- (*Stream)[Stream_Text][StreamPos][Pos].clear();
- }
-
- //Delay/Video0
- if (StreamKind==Stream_Video && StreamPos==0 && Parameter==Video_Delay)
- {
- for (size_t Pos=0; Pos<Count_Get(Stream_Audio); Pos++)
- if (!Retrieve(Stream_Audio, Pos, Audio_Delay).empty())
- {
- Fill(Stream_Audio, Pos, Audio_Video0_Delay, Retrieve(Stream_Audio, Pos, Audio_Delay).To_int64s()-Value.To_int64s(), 10, true);
- if (Retrieve(Stream_Audio, Pos, Audio_Video0_Delay).To_int64u()==0)
- for (size_t Param_Pos=Audio_Video0_Delay+1; Param_Pos<=Audio_Video0_Delay+4; Param_Pos++)
- if (Param_Pos<(*Stream)[Stream_Audio][Pos].size())
- (*Stream)[Stream_Audio][Pos][Param_Pos].clear();
- }
- for (size_t Pos=0; Pos<Count_Get(Stream_Text); Pos++)
- if (!Retrieve(Stream_Text, Pos, Text_Delay).empty())
- {
- Fill(Stream_Text, Pos, Text_Video0_Delay, Retrieve(Stream_Text, Pos, Text_Delay).To_int64s()-Value.To_int64s(), 10, true);
- if (Retrieve(Stream_Text, Pos, Text_Video0_Delay).To_int64u()==0)
- for (size_t Param_Pos=Text_Video0_Delay+1; Param_Pos<=Text_Video0_Delay+4; Param_Pos++)
- if (Param_Pos<(*Stream)[Stream_Text][Pos].size())
- (*Stream)[Stream_Text][Pos][Param_Pos].clear();
- }
- }
- if (StreamKind==Stream_Audio && Parameter==Audio_Delay && Count_Get(Stream_Video) && !Retrieve(Stream_Audio, StreamPos, Audio_Delay).empty() && !Retrieve(Stream_Video, 0, Video_Delay).empty())
- {
- if (Replace)
- Clear(Stream_Audio, StreamPos, Audio_Video0_Delay);
- ZtringList AudioDelay; AudioDelay.Separator_Set(0, __T(" / ")); AudioDelay.Write(Retrieve(Stream_Audio, StreamPos, Audio_Delay));
- ZtringList VideoDelay; VideoDelay.Separator_Set(0, __T(" / ")); VideoDelay.Write(Retrieve(Stream_Video, 0, Video_Delay));
- if (!AudioDelay.empty() && !VideoDelay.empty() && AudioDelay.size() <= VideoDelay.size())
- {
- Fill(Stream_Audio, StreamPos, Audio_Video0_Delay, AudioDelay(AudioDelay.size() - 1).To_int64s() - VideoDelay(VideoDelay.size() - 1).To_int64s(), 10);
- if (VideoDelay.size()==1 && Retrieve(Stream_Audio, StreamPos, Audio_Video0_Delay).To_int64u()==0)
- for (size_t Pos=Audio_Video0_Delay+1; Pos<=Audio_Video0_Delay+4; Pos++)
- if (Pos<(*Stream)[Stream_Audio][StreamPos].size())
- (*Stream)[Stream_Audio][StreamPos][Pos].clear();
- }
- }
- if (StreamKind==Stream_Text && Parameter==Text_Delay && Count_Get(Stream_Video) && !Retrieve(Stream_Text, StreamPos, Text_Delay).empty() && !Retrieve(Stream_Video, 0, Video_Delay).empty())
- {
- Ztring MuxingMode_MoreInfo=Get(Stream_Text, StreamPos, "MuxingMode_MoreInfo");
- Ztring StreamID=MuxingMode_MoreInfo.SubString(__T("Muxed in Video #"), Ztring());
- size_t StreamID_Int=(size_t)StreamID.To_int64u();
- if (StreamID_Int)
- StreamID_Int--;
- Fill(Stream_Text, StreamPos, Text_Video0_Delay, Value.To_int64s()-Retrieve(Stream_Video, StreamID_Int, Video_Delay).To_int64s(), 10, true);
- if (Retrieve(Stream_Text, StreamPos, Text_Video0_Delay).To_int64u()==0)
- for (size_t Pos=Text_Video0_Delay+1; Pos<=Text_Video0_Delay+4; Pos++)
- if (Pos<(*Stream)[Stream_Text][StreamPos].size())
- (*Stream)[Stream_Text][StreamPos][Pos].clear();
- }
-
- //Language
- //-Find 2-digit language
- if (Parameter==Fill_Parameter(StreamKind, Generic_Language))
- {
- //Removing old strings
- Clear(StreamKind, StreamPos, Parameter+1); //String
- Clear(StreamKind, StreamPos, Parameter+2); //String1
- Clear(StreamKind, StreamPos, Parameter+3); //String2
- Clear(StreamKind, StreamPos, Parameter+4); //String3
- Clear(StreamKind, StreamPos, Parameter+5); //String4
-
- ZtringListList Languages;
- Languages.Separator_Set(0, __T(" / "));
- Languages.Separator_Set(1, __T("-"));
- Languages.Write((*Stream)[StreamKind][StreamPos][Parameter]);
-
- //Canonizing
- for (size_t Pos=0; Pos<Languages.size(); Pos++)
- {
- Ztring Language_Orig;
-
- //Removing undefined languages
- if (Languages[Pos].size()>=1)
- {
- Language_Orig=Languages[Pos][0];
- Languages[Pos][0].MakeLowerCase();
- if ((Languages[Pos][0].size()==3 && (Languages[Pos][0]==__T("mis")
- || Languages[Pos][0]==__T("und")
- || Languages[Pos][0]==__T("???")
- || Languages[Pos][0]==__T(" ")))
- || (Languages[Pos][0].size()==2 && Languages[Pos][0]==__T(" ")))
- Languages[Pos].clear();
- }
-
- //Finding ISO-639-1 from ISO-639-2 or translated name
- if (Languages[Pos].size()>=1)
- {
- if (Languages[Pos][0].size()==3 && !MediaInfoLib::Config.Iso639_1_Get(Languages[Pos][0]).empty())
- Languages[Pos][0]=MediaInfoLib::Config.Iso639_1_Get(Languages[Pos][0]);
- if (Languages[Pos][0].size()>3 && !MediaInfoLib::Config.Iso639_Find(Languages[Pos][0]).empty())
- Languages[Pos][0]=MediaInfoLib::Config.Iso639_Find(Languages[Pos][0]);
- if (Languages[Pos][0].size()>3)
- Languages[Pos][0]=Language_Orig; //We failed to detect language, using the original version
- }
- }
-
- if (Languages.Read()!=Retrieve(StreamKind, StreamPos, Parameter))
- Fill(StreamKind, StreamPos, Parameter, Languages.Read(), true);
- else
- {
- ZtringList Language1; Language1.Separator_Set(0, __T(" / "));
- ZtringList Language2; Language2.Separator_Set(0, __T(" / "));
- ZtringList Language3; Language3.Separator_Set(0, __T(" / "));
- ZtringList Language4; Language4.Separator_Set(0, __T(" / "));
-
- for (size_t Pos=0; Pos<Languages.size(); Pos++)
- {
- if (Languages[Pos].size()>=1)
- {
- Ztring Language_Translated=MediaInfoLib::Config.Language_Get(__T("Language_")+Languages[Pos][0]);
- if (Language_Translated.find(__T("Language_"))==0)
- Language_Translated=Languages[Pos][0]; //No translation found
- if (Languages[Pos].size()>=2)
- {
- if (Languages[Pos].size()==2 && Languages[Pos][1].size()>=2 && Languages[Pos][1].size()<=3 && (Languages[Pos][1][0]&0xDF)>=__T('A') && (Languages[Pos][1][0]&0xDF)<=__T('Z') && (Languages[Pos][1][1]&0xDF)>=__T('A') && (Languages[Pos][1][1]&0xDF)<=__T('Z'))
- {
- Language_Translated+=__T(" (");
- Language_Translated+=Ztring(Languages[Pos][1]).MakeUpperCase();
- Language_Translated+=__T(")");
- }
- else
- for (size_t Pos2=1; Pos2<Languages[Pos].size(); Pos2++)
- {
- Language_Translated+=__T('-'); //As the original string
- Language_Translated+=Languages[Pos][Pos2];
- }
- }
- Language1.push_back(Language_Translated);
- if (Languages[Pos][0].size()==2)
- {
- Language2.push_back(Languages[Pos][0]);
- Language4.push_back(Languages[Pos].Read());
- }
- else
- {
- Language2.push_back(Ztring());
- Language4.push_back(Ztring());
- }
- if (Languages[Pos][0].size()==3)
- Language3.push_back(Languages[Pos][0]);
- else if (!MediaInfoLib::Config.Iso639_2_Get(Languages[Pos][0]).empty())
- Language3.push_back(MediaInfoLib::Config.Iso639_2_Get(Languages[Pos][0]));
- else
- Language3.push_back(Ztring());
- }
- else
- {
- Language1.push_back(Ztring());
- Language2.push_back(Ztring());
- Language3.push_back(Ztring());
- Language4.push_back(Ztring());
- }
- }
-
- Fill(StreamKind, StreamPos, Parameter+2, Language1.Read()); //String1
- Fill(StreamKind, StreamPos, Parameter+3, Language2.Read()); //String2
- Fill(StreamKind, StreamPos, Parameter+4, Language3.Read()); //String3
- Fill(StreamKind, StreamPos, Parameter+5, Language4.Read()); //String4
- Fill(StreamKind, StreamPos, Parameter+1, Retrieve(StreamKind, StreamPos, Parameter+2)); //String
- }
- }
-
- //ServiceName / ServiceProvider
- if (Parameter==Fill_Parameter(StreamKind, Generic_ServiceName)
- || Parameter==Fill_Parameter(StreamKind, Generic_ServiceProvider))
- {
- if (Retrieve(StreamKind, StreamPos, Parameter).find(__T(" - "))==string::npos && (Retrieve(StreamKind, StreamPos, Parameter).find(__T(":"))==2 || Retrieve(StreamKind, StreamPos, Parameter).find(__T(":"))==3))
- {
- Ztring Temp=Retrieve(StreamKind, StreamPos, Parameter);
- Temp.erase(0, Retrieve(StreamKind, StreamPos, Parameter).find(__T(":"))+1);
- (*Stream)[StreamKind][StreamPos](Parameter)=Temp;
- }
- }
-
- //FrameRate Nominal
- if (StreamKind==Stream_Video && (Parameter==Video_FrameRate || Parameter==Video_FrameRate_Nominal))
- {
- float32 FrameRate=Retrieve(Stream_Video, StreamPos, Video_FrameRate).To_float32();
- float32 FrameRate_Nominal=Retrieve(Stream_Video, StreamPos, Video_FrameRate_Nominal).To_float32();
- if (FrameRate_Nominal>FrameRate*0.995 && FrameRate_Nominal<FrameRate*1.005)
- {
- Ztring Temp=Retrieve(StreamKind, StreamPos, Video_FrameRate_Nominal);
- Clear(StreamKind, StreamPos, Video_FrameRate_Nominal);
- if (Parameter==Video_FrameRate)
- Fill(StreamKind, StreamPos, Parameter, Temp, true);
- }
- }
-
- //Well known framerate values
- if (StreamKind==Stream_Video && (Parameter==Video_FrameRate || Parameter==Video_FrameRate_Nominal || Parameter==Video_FrameRate_Original))
- {
- Video_FrameRate_Rounding(StreamPos, (video)Parameter);
- if (Retrieve(Stream_Video, StreamPos, Video_FrameRate_Nominal)==Retrieve(Stream_Video, StreamPos, Video_FrameRate))
- Clear(Stream_Video, StreamPos, Video_FrameRate_Nominal);
- if (Parameter!=Video_FrameRate_Original && Retrieve(Stream_Video, StreamPos, Video_FrameRate_Original)==Retrieve(Stream_Video, StreamPos, Video_FrameRate))
- Clear(Stream_Video, StreamPos, Video_FrameRate_Original);
- }
-
- //Display Aspect Ratio and Pixel Aspect Ratio
- if (StreamKind==Stream_Video && Parameter==Video_DisplayAspectRatio && !Value.empty())
- {
- float F1=Retrieve(Stream_Video, StreamPos, Video_DisplayAspectRatio).To_float32();
- Ztring C1;
- if (F1>=(float)1.23 && F1<(float)1.27) C1=__T("5:4");
- else if (F1>=(float)1.30 && F1<(float)1.37) C1=__T("4:3");
- else if (F1>=(float)1.45 && F1<(float)1.55) C1=__T("3:2");
- else if (F1>=(float)1.55 && F1<(float)1.65) C1=__T("16:10");
- else if (F1>=(float)1.74 && F1<(float)1.82) C1=__T("16:9");
- else if (F1>=(float)1.82 && F1<(float)1.88) C1=__T("1.85:1");
- else if (F1>=(float)2.15 && F1<(float)2.22) C1=__T("2.2:1");
- else if (F1>=(float)2.23 && F1<(float)2.30) C1=__T("2.25:1");
- else if (F1>=(float)2.30 && F1<(float)2.37) C1=__T("2.35:1");
- else if (F1>=(float)2.37 && F1<(float)2.45) C1=__T("2.40:1");
- else C1.From_Number(F1);
- C1.FindAndReplace(__T("."), MediaInfoLib::Config.Language_Get(__T(" Config_Text_FloatSeparator")));
- if (MediaInfoLib::Config.Language_Get(__T(" Language_ISO639"))==__T("fr") && C1.find(__T(":1"))==string::npos)
- C1.FindAndReplace(__T(":"), __T("/"));
- Fill(Stream_Video, StreamPos, Video_DisplayAspectRatio_String, C1, true);
- }
-
- //Original Display Aspect Ratio and Original Pixel Aspect Ratio
- if (StreamKind==Stream_Video && Parameter==Video_DisplayAspectRatio_Original)
- {
- float F1=Retrieve(Stream_Video, StreamPos, Video_DisplayAspectRatio_Original).To_float32();
- Ztring C1;
- if (F1>=(float)1.23 && F1<(float)1.27) C1=__T("5:4");
- else if (F1>=(float)1.30 && F1<(float)1.37) C1=__T("4:3");
- else if (F1>=(float)1.45 && F1<(float)1.55) C1=__T("3:2");
- else if (F1>=(float)1.55 && F1<(float)1.65) C1=__T("16:10");
- else if (F1>=(float)1.74 && F1<(float)1.82) C1=__T("16:9");
- else if (F1>=(float)1.82 && F1<(float)1.88) C1=__T("1.85:1");
- else if (F1>=(float)2.15 && F1<(float)2.22) C1=__T("2.2:1");
- else if (F1>=(float)2.23 && F1<(float)2.30) C1=__T("2.25:1");
- else if (F1>=(float)2.30 && F1<(float)2.37) C1=__T("2.35:1");
- else if (F1>=(float)2.37 && F1<(float)2.45) C1=__T("2.40:1");
- else C1.From_Number(F1);
- C1.FindAndReplace(__T("."), MediaInfoLib::Config.Language_Get(__T(" Config_Text_FloatSeparator")));
- if (MediaInfoLib::Config.Language_Get(__T(" Language_ISO639"))==__T("fr") && C1.find(__T(":1"))==string::npos)
- C1.FindAndReplace(__T(":"), __T("/"));
- Fill(Stream_Video, StreamPos, Video_DisplayAspectRatio_Original_String, C1, true);
- }
-
- //Display Aspect Ratio and Pixel Aspect Ratio
- if (StreamKind==Stream_Image && Parameter==Image_DisplayAspectRatio && !Value.empty())
- {
- float F1=Retrieve(Stream_Image, StreamPos, Image_DisplayAspectRatio).To_float32();
- Ztring C1;
- if (F1>=(float)1.23 && F1<(float)1.27) C1=__T("5:4");
- else if (F1>=(float)1.30 && F1<(float)1.37) C1=__T("4:3");
- else if (F1>=(float)1.45 && F1<(float)1.55) C1=__T("3:2");
- else if (F1>=(float)1.55 && F1<(float)1.65) C1=__T("16:10");
- else if (F1>=(float)1.74 && F1<(float)1.82) C1=__T("16:9");
- else if (F1>=(float)1.82 && F1<(float)1.88) C1=__T("1.85:1");
- else if (F1>=(float)2.15 && F1<(float)2.22) C1=__T("2.2:1");
- else if (F1>=(float)2.23 && F1<(float)2.30) C1=__T("2.25:1");
- else if (F1>=(float)2.30 && F1<(float)2.37) C1=__T("2.35:1");
- else if (F1>=(float)2.37 && F1<(float)2.45) C1=__T("2.40:1");
- else C1.From_Number(F1);
- C1.FindAndReplace(__T("."), MediaInfoLib::Config.Language_Get(__T(" Config_Text_FloatSeparator")));
- if (MediaInfoLib::Config.Language_Get(__T(" Language_ISO639"))==__T("fr") && C1.find(__T(":1"))==string::npos)
- C1.FindAndReplace(__T(":"), __T("/"));
- Fill(Stream_Image, StreamPos, Image_DisplayAspectRatio_String, C1, true);
- }
-
- //Original Display Aspect Ratio and Original Pixel Aspect Ratio
- if (StreamKind==Stream_Image && Parameter==Image_DisplayAspectRatio_Original)
- {
- float F1=Retrieve(Stream_Image, StreamPos, Image_DisplayAspectRatio_Original).To_float32();
- Ztring C1;
- if (F1>=(float)1.23 && F1<(float)1.27) C1=__T("5:4");
- else if (F1>=(float)1.30 && F1<(float)1.37) C1=__T("4:3");
- else if (F1>=(float)1.45 && F1<(float)1.55) C1=__T("3:2");
- else if (F1>=(float)1.55 && F1<(float)1.65) C1=__T("16:10");
- else if (F1>=(float)1.74 && F1<(float)1.82) C1=__T("16:9");
- else if (F1>=(float)1.82 && F1<(float)1.88) C1=__T("1.85:1");
- else if (F1>=(float)2.15 && F1<(float)2.22) C1=__T("2.2:1");
- else if (F1>=(float)2.23 && F1<(float)2.30) C1=__T("2.25:1");
- else if (F1>=(float)2.30 && F1<(float)2.37) C1=__T("2.35:1");
- else if (F1>=(float)2.37 && F1<(float)2.45) C1=__T("2.40:1");
- else C1.From_Number(F1);
- C1.FindAndReplace(__T("."), MediaInfoLib::Config.Language_Get(__T(" Config_Text_FloatSeparator")));
- if (MediaInfoLib::Config.Language_Get(__T(" Language_ISO639"))==__T("fr") && C1.find(__T(":1"))==string::npos)
- C1.FindAndReplace(__T(":"), __T("/"));
- Fill(Stream_Image, StreamPos, Image_DisplayAspectRatio_Original_String, C1, true);
- }
-
- //Bits/(Pixel*Frame)
- if (StreamKind==Stream_Video && (Parameter==Video_BitRate || Parameter==Video_BitRate_Nominal || Parameter==Video_Width || Parameter==Video_Height || Parameter==Video_FrameRate))
- {
- float32 BitRate=Retrieve(Stream_Video, StreamPos, Video_BitRate).To_float32();
- if (BitRate==0)
- BitRate=Retrieve(Stream_Video, StreamPos, Video_BitRate_Nominal).To_float32();
- float F1=(float)Retrieve(Stream_Video, StreamPos, Video_Width).To_int32s()*(float)Retrieve(Stream_Video, StreamPos, Video_Height).To_int32s()*Retrieve(Stream_Video, StreamPos, Video_FrameRate).To_float32();
- if (BitRate && F1)
- Fill(Stream_Video, StreamPos, Video_Bits__Pixel_Frame_, BitRate/F1, 3, true);
- }
-
- //Special audio cases
- if (StreamKind==Stream_Audio && Parameter==Audio_CodecID
- && Retrieve(Stream_Audio, StreamPos, Audio_Channel_s_).empty()
- &&(Value==__T("samr")
- || Value==__T("sawb")
- || Value==__T("7A21")
- || Value==__T("7A22"))
- )
- Fill(Stream_Audio, StreamPos, Audio_Channel_s_, 1, 10, true); //AMR is always with 1 channel
-
- //Well known bitrate values
- if (StreamKind==Stream_Video && (Parameter==Video_BitRate || Parameter==Video_BitRate_Nominal))
- Video_BitRate_Rounding(StreamPos, (video)Parameter);
- if (StreamKind==Stream_Audio && (Parameter==Audio_BitRate || Parameter==Audio_BitRate_Nominal))
- Audio_BitRate_Rounding(StreamPos, (audio)Parameter);
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Fill (stream_t StreamKind, size_t StreamPos, const char* Parameter, const Ztring &Value, bool Replace)
-{
- //Integrity
- if (!Status[IsAccepted] || StreamKind>Stream_Max || Parameter==NULL || Parameter[0]=='\0')
- return;
-
- //Handling values with \r\n inside
- if (Value.find(__T('\r'))!=string::npos || Value.find(__T('\n'))!=string::npos)
- {
- Ztring NewValue=Value;
- NewValue.FindAndReplace(__T("\r\n"), __T(" / "), 0, Ztring_Recursive);
- NewValue.FindAndReplace(__T("\r"), __T(" / "), 0, Ztring_Recursive);
- NewValue.FindAndReplace(__T("\n"), __T(" / "), 0, Ztring_Recursive);
- if (NewValue.size()>=3 && NewValue.rfind(__T(" / "))==NewValue.size()-3)
- NewValue.resize(NewValue.size()-3);
- Fill(StreamKind, StreamPos, Parameter, NewValue, Replace);
- return;
- }
-
- //Handle Value before StreamKind
- if (StreamKind==Stream_Max || StreamPos>=(*Stream)[StreamKind].size())
- {
- Ztring ParameterZ=Ztring().From_UTF8(Parameter);
- if (Replace)
- for (size_t Pos=0; Pos<Fill_Temp.size(); Pos++)
- if (Fill_Temp[Pos](0)==ParameterZ)
- {
- Fill_Temp.erase(Fill_Temp.begin()+Pos);
- Pos--;
- }
- ZtringList NewList;
- NewList.push_back(ParameterZ);
- NewList.push_back(Value);
- Fill_Temp.push_back(NewList);
- return; //No streams
- }
-
- //Handling of well known parameters
- size_t Pos=MediaInfoLib::Config.Info_Get(StreamKind).Find(Ztring().From_Local(Parameter));
- if (Pos!=Error)
- {
- Fill(StreamKind, StreamPos, Pos, Value, Replace);
- return;
- }
-
- //Handling of unknown parameters
- if (Value.empty())
- {
- if (Replace)
- {
- size_t Pos_ToReplace=(*Stream_More)[StreamKind][StreamPos].Find(Ztring().From_ISO_8859_1(Parameter), Info_Name);
- if (Pos_ToReplace!=(size_t)-1)
- (*Stream_More)[StreamKind][StreamPos].erase((*Stream_More)[StreamKind][StreamPos].begin()+Pos_ToReplace); //Empty value --> remove the line
- }
- }
- else
- {
- Ztring &Target=(*Stream_More)[StreamKind][StreamPos](Ztring().From_ISO_8859_1(Parameter), Info_Text);
- if (Target.empty() || Replace)
- {
- Target=Value; //First value
- (*Stream_More)[StreamKind][StreamPos](Ztring().From_ISO_8859_1(Parameter), Info_Name_Text)=MediaInfoLib::Config.Language_Get(Ztring().From_Local(Parameter));
- (*Stream_More)[StreamKind][StreamPos](Ztring().From_ISO_8859_1(Parameter), Info_Options)=__T("Y NT");
- }
- else
- {
- Target+=MediaInfoLib::Config.TagSeparator_Get();
- Target+=Value;
- }
- }
- Fill(StreamKind, StreamPos, (size_t)General_Count, Count_Get(StreamKind, StreamPos), 10, true);
-}
-
-//---------------------------------------------------------------------------
-const Ztring &File__Analyze::Retrieve_Const (stream_t StreamKind, size_t StreamPos, size_t Parameter, info_t KindOfInfo)
-{
- //Integrity
- if (StreamKind>=Stream_Max
- || StreamPos>=(*Stream)[StreamKind].size()
- || Parameter>=(*Stream)[StreamKind][StreamPos].size())
- return MediaInfoLib::Config.EmptyString_Get();
-
- if (KindOfInfo!=Info_Text)
- return MediaInfoLib::Config.Info_Get(StreamKind, Parameter, KindOfInfo);
- return (*Stream)[StreamKind][StreamPos](Parameter);
-}
-
-//---------------------------------------------------------------------------
-Ztring File__Analyze::Retrieve (stream_t StreamKind, size_t StreamPos, size_t Parameter, info_t KindOfInfo)
-{
- //Integrity
- if (StreamKind>=Stream_Max
- || StreamPos>=(*Stream)[StreamKind].size()
- || Parameter>=(*Stream)[StreamKind][StreamPos].size())
- return MediaInfoLib::Config.EmptyString_Get();
-
- if (KindOfInfo!=Info_Text)
- return MediaInfoLib::Config.Info_Get(StreamKind, Parameter, KindOfInfo);
- return (*Stream)[StreamKind][StreamPos](Parameter);
-}
-
-//---------------------------------------------------------------------------
-const Ztring &File__Analyze::Retrieve_Const (stream_t StreamKind, size_t StreamPos, const char* Parameter, info_t KindOfInfo)
-{
- //Integrity
- if (StreamKind>=Stream_Max
- || StreamPos>=(*Stream)[StreamKind].size()
- || Parameter==NULL
- || Parameter[0]=='\0')
- return MediaInfoLib::Config.EmptyString_Get();
-
- if (KindOfInfo!=Info_Text)
- return MediaInfoLib::Config.Info_Get(StreamKind, Parameter, KindOfInfo);
- size_t Parameter_Pos=MediaInfoLib::Config.Info_Get(StreamKind).Find(Ztring().From_Local(Parameter));
- if (Parameter_Pos==Error)
- {
- Parameter_Pos=(*Stream_More)[StreamKind][StreamPos].Find(Ztring().From_Local(Parameter));
- if (Parameter_Pos==Error)
- return MediaInfoLib::Config.EmptyString_Get();
- return (*Stream_More)[StreamKind][StreamPos](Parameter_Pos, 1);
- }
- return (*Stream)[StreamKind][StreamPos](Parameter_Pos);
-}
-
-//---------------------------------------------------------------------------
-Ztring File__Analyze::Retrieve (stream_t StreamKind, size_t StreamPos, const char* Parameter, info_t KindOfInfo)
-{
- //Integrity
- if (StreamKind>=Stream_Max
- || StreamPos>=(*Stream)[StreamKind].size()
- || Parameter==NULL
- || Parameter[0]=='\0')
- return MediaInfoLib::Config.EmptyString_Get();
-
- if (KindOfInfo!=Info_Text)
- return MediaInfoLib::Config.Info_Get(StreamKind, Parameter, KindOfInfo);
- size_t Parameter_Pos=MediaInfoLib::Config.Info_Get(StreamKind).Find(Ztring().From_Local(Parameter));
- if (Parameter_Pos==Error)
- {
- Parameter_Pos=(*Stream_More)[StreamKind][StreamPos].Find(Ztring().From_Local(Parameter));
- if (Parameter_Pos==Error)
- return MediaInfoLib::Config.EmptyString_Get();
- return (*Stream_More)[StreamKind][StreamPos](Parameter_Pos, 1);
- }
- return (*Stream)[StreamKind][StreamPos](Parameter_Pos);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Clear (stream_t StreamKind, size_t StreamPos, const char* Parameter)
-{
- //Integrity
- if (StreamKind>=Stream_Max
- || Parameter==NULL
- || Parameter[0]=='\0')
- return;
-
- if (StreamPos>=(*Stream)[StreamKind].size())
- {
- size_t Pos=Fill_Temp.Find(Ztring().From_UTF8(Parameter));
- if (Pos!=string::npos)
- Fill_Temp.erase(Fill_Temp.begin()+Pos);
- return;
- }
-
- size_t Parameter_Pos=MediaInfoLib::Config.Info_Get(StreamKind).Find(Ztring().From_Local(Parameter));
- if (Parameter_Pos==Error)
- {
- Parameter_Pos=(*Stream_More)[StreamKind][StreamPos].Find(Ztring().From_Local(Parameter));
- if (Parameter_Pos==Error)
- return;
- (*Stream_More)[StreamKind][StreamPos](Parameter_Pos, 1).clear();
- return;
- }
-
- Clear(StreamKind, StreamPos, Parameter_Pos);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Clear (stream_t StreamKind, size_t StreamPos, size_t Parameter)
-{
- //Integrity
- if (StreamKind>=Stream_Max
- || StreamPos>=(*Stream)[StreamKind].size())
- return;
-
- //Normal
- if (Parameter<MediaInfoLib::Config.Info_Get(StreamKind).size())
- {
- //Is something available?
- if (Parameter>=(*Stream)[StreamKind][StreamPos].size())
- return; //Was never filled, no nead to clear it
-
- //Clearing
- (*Stream)[StreamKind][StreamPos][Parameter].clear();
-
- //Human readable
- if (MediaInfoLib::Config.ReadByHuman_Get())
- {
- //Strings
- const Ztring &List_Measure_Value=MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter, Info_Measure);
- if (List_Measure_Value==__T(" byte"))
- {
- const Ztring &Temp=MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter, Info_Name);
- size_t List_Size=Temp.find(__T("StreamSize"))==string::npos?5:7; //for /String5, with percentage, and proportion
- for (size_t Pos=Parameter+1; Pos<=Parameter+List_Size; Pos++)
- if (Pos<(*Stream)[StreamKind][StreamPos].size())
- (*Stream)[StreamKind][StreamPos][Pos].clear();
- }
- else if (List_Measure_Value==__T(" bps") || List_Measure_Value==__T(" Hz"))
- {
- if (Parameter+1<(*Stream)[StreamKind][StreamPos].size())
- (*Stream)[StreamKind][StreamPos][Parameter+1].clear();
- }
- else if (List_Measure_Value==__T(" ms"))
- {
- for (size_t Pos=Parameter+1; Pos<=Parameter+4; Pos++)
- if (Pos<(*Stream)[StreamKind][StreamPos].size())
- (*Stream)[StreamKind][StreamPos][Pos].clear();
- }
- else if (List_Measure_Value==__T("Yes"))
- {
- if (Parameter+1<(*Stream)[StreamKind][StreamPos].size())
- (*Stream)[StreamKind][StreamPos][Parameter+1].clear();
- }
- else if (!List_Measure_Value.empty())
- {
- if (Parameter+1<(*Stream)[StreamKind][StreamPos].size())
- (*Stream)[StreamKind][StreamPos][Parameter+1].clear();
- }
- else if (Parameter+1<(*Stream)[StreamKind][StreamPos].size() && MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter+1, Info_Name).find(__T("/String"))!=string::npos)
- {
- (*Stream)[StreamKind][StreamPos][Parameter+1].clear();
- }
- }
-
- return;
- }
-
- //More
- Parameter-=(*Stream)[StreamKind][StreamPos].size(); //For having Stream_More position
- if (Parameter<(*Stream_More)[StreamKind][StreamPos].size())
- {
- (*Stream_More)[StreamKind][StreamPos].erase((*Stream_More)[StreamKind][StreamPos].begin()+Parameter);
- return;
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Clear (stream_t StreamKind, size_t StreamPos)
-{
- //Integrity
- if (StreamKind>=Stream_Max
- || StreamPos>=(*Stream)[StreamKind].size())
- return;
-
- (*Stream)[StreamKind].erase((*Stream)[StreamKind].begin()+StreamPos);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Clear (stream_t StreamKind)
-{
- //Integrity
- if (StreamKind>=Stream_Max)
- return;
-
- (*Stream)[StreamKind].clear();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Fill_Flush()
-{
- Stream_Prepare(Stream_Max); //clear filling
- Fill_Temp.clear();
-}
-
-//---------------------------------------------------------------------------
-size_t File__Analyze::Merge(MediaInfo_Internal &ToAdd, bool)
-{
- size_t Count=0;
- for (size_t StreamKind=(size_t)Stream_General; StreamKind<(size_t)Stream_Max; StreamKind++)
- {
- size_t StreamPos_Count=ToAdd.Count_Get((stream_t)StreamKind);
- for (size_t StreamPos=0; StreamPos<StreamPos_Count; StreamPos++)
- {
- //Prepare a new stream
- if (StreamPos>=Count_Get((stream_t)StreamKind))
- Stream_Prepare((stream_t)StreamKind);
-
- //Merge
- size_t Pos_Count=ToAdd.Count_Get((stream_t)StreamKind, StreamPos);
- for (size_t Pos=0; Pos<Pos_Count; Pos++)
- {
- if (StreamKind!=Stream_General
- || !(Pos==General_CompleteName
- || Pos==General_FolderName
- || Pos==General_FileName
- || Pos==General_FileExtension
- || Pos==General_File_Created_Date
- || Pos==General_Format
- || Pos==General_Format_String
- || Pos==General_Format_Extensions
- || Pos==General_Format_Info
- || Pos==General_Codec
- || Pos==General_Codec_String
- || Pos==General_Codec_Extensions
- || Pos==General_FileSize
- || Pos==General_FileSize_String
- || Pos==General_FileSize_String1
- || Pos==General_FileSize_String2
- || Pos==General_FileSize_String3
- || Pos==General_FileSize_String4
- || Pos==General_File_Created_Date_Local
- || Pos==General_File_Modified_Date
- || Pos==General_File_Modified_Date_Local))
- Fill((stream_t)StreamKind, StreamPos, Ztring(ToAdd.Get((stream_t)StreamKind, StreamPos, Pos, Info_Name)).To_UTF8().c_str(), ToAdd.Get((stream_t)StreamKind, StreamPos, Pos), true);
- }
-
- Count++;
- }
- }
-
- return Count;
-}
-
-//---------------------------------------------------------------------------
-size_t File__Analyze::Merge(MediaInfo_Internal &ToAdd, stream_t StreamKind, size_t StreamPos_From, size_t StreamPos_To, bool)
-{
- size_t Pos_Count=ToAdd.Count_Get(StreamKind, StreamPos_From);
- for (size_t Pos=General_Inform; Pos<Pos_Count; Pos++)
- if (!ToAdd.Get(StreamKind, StreamPos_From, Pos).empty())
- Fill(StreamKind, StreamPos_To, Ztring(ToAdd.Get((stream_t)StreamKind, StreamPos_From, Pos, Info_Name)).To_UTF8().c_str(), ToAdd.Get(StreamKind, StreamPos_From, Pos), true);
-
- return 1;
-}
-
-//---------------------------------------------------------------------------
-size_t File__Analyze::Merge(File__Analyze &ToAdd, bool Erase)
-{
- size_t Count=0;
- for (size_t StreamKind=(size_t)Stream_General+1; StreamKind<(size_t)Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<(*ToAdd.Stream)[StreamKind].size(); StreamPos++)
- {
- //Prepare a new stream
- Stream_Prepare((stream_t)StreamKind);
-
- //Merge
- Merge(ToAdd, (stream_t)StreamKind, StreamPos, StreamPos_Last, Erase);
-
- Count++;
- }
- return Count;
-}
-
-//---------------------------------------------------------------------------
-size_t File__Analyze::Merge(File__Analyze &ToAdd, stream_t StreamKind, size_t StreamPos_From, size_t StreamPos_To, bool Erase)
-{
- //Integrity
- if (!Status[IsAccepted] || &ToAdd==NULL || StreamKind>=Stream_Max || !ToAdd.Stream || StreamPos_From>=(*ToAdd.Stream)[StreamKind].size())
- return 0;
-
- //Destination
- while (StreamPos_To>=(*Stream)[StreamKind].size())
- Stream_Prepare(StreamKind);
-
- //Specific stuff
- Ztring Width_Temp, Height_Temp, PixelAspectRatio_Temp, DisplayAspectRatio_Temp, FrameRate_Temp, FrameRate_Mode_Temp, ScanType_Temp, ScanOrder_Temp, Channels_Temp, Delay_Temp, Delay_DropFrame_Temp, Delay_Source_Temp, Delay_Settings_Temp, Source_Temp, Source_Kind_Temp, Source_Info_Temp;
- Ztring colour_description_present_Temp, colour_primaries_Temp, transfer_characteristics_Temp, matrix_coefficients_Temp;
- if (StreamKind==Stream_Video)
- {
- Width_Temp=Retrieve(Stream_Video, StreamPos_To, Video_Width);
- Height_Temp=Retrieve(Stream_Video, StreamPos_To, Video_Height);
- PixelAspectRatio_Temp=Retrieve(Stream_Video, StreamPos_To, Video_PixelAspectRatio); //We want to keep the PixelAspectRatio_Temp of the video stream
- DisplayAspectRatio_Temp=Retrieve(Stream_Video, StreamPos_To, Video_DisplayAspectRatio); //We want to keep the DisplayAspectRatio_Temp of the video stream
- FrameRate_Temp=Retrieve(Stream_Video, StreamPos_To, Video_FrameRate); //We want to keep the FrameRate of AVI 120 fps
- FrameRate_Mode_Temp=Retrieve(Stream_Video, StreamPos_To, Video_FrameRate_Mode); //We want to keep the FrameRate_Mode of AVI 120 fps
- ScanType_Temp=Retrieve(Stream_Video, StreamPos_To, Video_ScanType);
- ScanOrder_Temp=Retrieve(Stream_Video, StreamPos_To, Video_ScanOrder);
- colour_description_present_Temp=Retrieve(Stream_Video, StreamPos_To, Video_colour_description_present);
- if (!colour_description_present_Temp.empty())
- {
- colour_primaries_Temp=Retrieve(Stream_Video, StreamPos_To, Video_colour_primaries);
- transfer_characteristics_Temp=Retrieve(Stream_Video, StreamPos_To, Video_transfer_characteristics);
- matrix_coefficients_Temp=Retrieve(Stream_Video, StreamPos_To, Video_matrix_coefficients);
- }
- Clear(Stream_Video, StreamPos_To, Video_colour_description_present);
- Clear(Stream_Video, StreamPos_To, Video_colour_primaries);
- Clear(Stream_Video, StreamPos_To, Video_transfer_characteristics);
- Clear(Stream_Video, StreamPos_To, Video_matrix_coefficients);
- }
- if (StreamKind==Stream_Audio)
- {
- Channels_Temp=Retrieve(Stream_Audio, StreamPos_To, Audio_Channel_s_);
- }
- if (ToAdd.Retrieve(StreamKind, StreamPos_From, Fill_Parameter(StreamKind, Generic_Delay_Source))==__T("Container"))
- {
- Fill(StreamKind, StreamPos_To, "Delay_Original", Retrieve(StreamKind, StreamPos_To, "Delay"), true);
- Clear(StreamKind, StreamPos_To, "Delay");
- Fill(StreamKind, StreamPos_To, "Delay_Original_DropFrame", Retrieve(StreamKind, StreamPos_To, "Delay_DropFrame"), true);
- Clear(StreamKind, StreamPos_To, "Delay_DropFrame");
- Fill(StreamKind, StreamPos_To, "Delay_Original_Source", Retrieve(StreamKind, StreamPos_To, "Delay_Source"), true);
- Clear(StreamKind, StreamPos_To, "Delay_Source");
- if (!ToAdd.Retrieve(StreamKind, StreamPos_To, "Format").empty()) //Exception: MPEG-4 TimeCode, settings are in the MPEG-4 header
- {
- Fill(StreamKind, StreamPos_To, "Delay_Original_Settings", Retrieve(StreamKind, StreamPos_To, "Delay_Settings"), true);
- Clear(StreamKind, StreamPos_To, "Delay_Settings");
- }
- }
- else
- {
- Delay_Temp=Retrieve(StreamKind, StreamPos_To, "Delay"); //We want to keep the Delay from the stream
- Delay_Settings_Temp=Retrieve(StreamKind, StreamPos_To, "Delay_Settings"); //We want to keep the Delay_Settings from the stream
- Delay_DropFrame_Temp=Retrieve(StreamKind, StreamPos_To, "Delay_DropFrame"); //We want to keep the Delay_Source from the stream
- Delay_Source_Temp=Retrieve(StreamKind, StreamPos_To, "Delay_Source"); //We want to keep the Delay_Source from the stream
- }
- Source_Temp=Retrieve(StreamKind, StreamPos_To, "Source");
- Source_Kind_Temp=Retrieve(StreamKind, StreamPos_To, "Source_Kind");
- Source_Info_Temp=Retrieve(StreamKind, StreamPos_To, "Source_Info");
-
- //Merging
- size_t Count=0;
- size_t Size=ToAdd.Count_Get(StreamKind, StreamPos_From);
- for (size_t Pos=General_Inform; Pos<Size; Pos++)
- {
- const Ztring &ToFill_Value=ToAdd.Get(StreamKind, StreamPos_From, Pos);
- if (!ToFill_Value.empty() && (Erase || Get(StreamKind, StreamPos_To, Pos).empty()))
- {
- if (Pos<MediaInfoLib::Config.Info_Get(StreamKind).size())
- Fill(StreamKind, StreamPos_To, Pos, ToFill_Value, true);
- else
- {
- Fill(StreamKind, StreamPos_To, ToAdd.Get(StreamKind, StreamPos_From, Pos, Info_Name).To_UTF8().c_str(), ToFill_Value, true);
- (*Stream_More)[StreamKind][StreamPos_To](ToAdd.Get(StreamKind, StreamPos_From, Pos, Info_Name), Info_Options)=ToAdd.Get(StreamKind, StreamPos_From, Pos, Info_Options);
- }
- Count++;
- }
- }
-
- //Specific stuff
- if (StreamKind==Stream_Video)
- {
- Ztring PixelAspectRatio_Original=Retrieve(Stream_Video, StreamPos_To, Video_PixelAspectRatio);
- Ztring DisplayAspectRatio_Original=Retrieve(Stream_Video, StreamPos_To, Video_DisplayAspectRatio);
-
- if (!Width_Temp.empty() && Width_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_Width))
- {
- Fill(Stream_Video, StreamPos_To, Video_Width_Original, (*Stream)[Stream_Video][StreamPos_To][Video_Width], true);
- Fill(Stream_Video, StreamPos_To, Video_Width, Width_Temp, true);
- }
- if (!Height_Temp.empty() && Height_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_Height))
- {
- Fill(Stream_Video, StreamPos_To, Video_Height_Original, (*Stream)[Stream_Video][StreamPos_To][Video_Height], true);
- Fill(Stream_Video, StreamPos_To, Video_Height, Height_Temp, true);
- }
- if (!PixelAspectRatio_Temp.empty() && PixelAspectRatio_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_PixelAspectRatio))
- {
- Fill(Stream_Video, StreamPos_To, Video_PixelAspectRatio_Original, PixelAspectRatio_Original, true);
- Fill(Stream_Video, StreamPos_To, Video_PixelAspectRatio, PixelAspectRatio_Temp, true);
- }
- if (!DisplayAspectRatio_Temp.empty() && DisplayAspectRatio_Temp!=DisplayAspectRatio_Original)
- {
- Fill(Stream_Video, StreamPos_To, Video_DisplayAspectRatio_Original, DisplayAspectRatio_Original, true);
- Fill(Stream_Video, StreamPos_To, Video_DisplayAspectRatio, DisplayAspectRatio_Temp, true);
- }
- if (!FrameRate_Temp.empty() && FrameRate_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_FrameRate))
- {
- Fill(Stream_Video, StreamPos_To, Video_FrameRate_Original, (*Stream)[Stream_Video][StreamPos_To][Video_FrameRate], true);
- Fill(Stream_Video, StreamPos_To, Video_FrameRate, FrameRate_Temp, true);
- }
- if (!FrameRate_Mode_Temp.empty() && FrameRate_Mode_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_FrameRate_Mode))
- {
- Fill(Stream_Video, StreamPos_To, Video_FrameRate_Mode_Original, (*Stream)[Stream_Video][StreamPos_To][Video_FrameRate_Mode], true);
- Fill(Stream_Video, StreamPos_To, Video_FrameRate_Mode, FrameRate_Mode_Temp, true);
- }
- if (!ScanType_Temp.empty() && (ScanType_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_ScanType) && !(ScanType_Temp==__T("Interlaced") && Retrieve(Stream_Video, StreamPos_To, Video_ScanType)==__T("MBAFF"))))
- {
- Fill(Stream_Video, StreamPos_To, Video_ScanType_Original, (*Stream)[Stream_Video][StreamPos_To][Video_ScanType], true);
- Fill(Stream_Video, StreamPos_To, Video_ScanType, ScanType_Temp, true);
- }
- if (Retrieve(Stream_Video, StreamPos_To, Video_ScanType_Original)!=__T("Progressive") && ((!ScanOrder_Temp.empty() && ScanOrder_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_ScanOrder)) || !Retrieve(Stream_Video, StreamPos_To, Video_ScanType_Original).empty()))
- {
- Fill(Stream_Video, StreamPos_To, Video_ScanOrder_Original, (*Stream)[Stream_Video][StreamPos_To][Video_ScanOrder], true);
- if (ScanOrder_Temp.empty())
- {
- Clear(Stream_Video, StreamPos_To, Video_ScanOrder);
- Clear(Stream_Video, StreamPos_To, Video_ScanOrder_String);
- }
- else
- Fill(Stream_Video, StreamPos_To, Video_ScanOrder, ScanOrder_Temp, true);
- }
- if (!colour_description_present_Temp.empty())
- {
- if (!colour_description_present_Temp.empty() && !Retrieve(Stream_Video, StreamPos_To, Video_colour_description_present).empty()
- && (colour_primaries_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_colour_primaries)
- || transfer_characteristics_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_transfer_characteristics)
- || matrix_coefficients_Temp!=Retrieve(Stream_Video, StreamPos_To, Video_matrix_coefficients)))
- {
- Fill(Stream_Video, StreamPos_To, Video_colour_description_present_Original, (*Stream)[Stream_Video][StreamPos_To][Video_colour_description_present], true);
- Fill(Stream_Video, StreamPos_To, Video_colour_description_present, colour_description_present_Temp, true);
- Fill(Stream_Video, StreamPos_To, Video_colour_primaries_Original, (*Stream)[Stream_Video][StreamPos_To][Video_colour_primaries], true);
- Fill(Stream_Video, StreamPos_To, Video_colour_primaries, colour_primaries_Temp, true);
- Fill(Stream_Video, StreamPos_To, Video_transfer_characteristics_Original, (*Stream)[Stream_Video][StreamPos_To][Video_transfer_characteristics], true);
- Fill(Stream_Video, StreamPos_To, Video_transfer_characteristics, transfer_characteristics_Temp, true);
- Fill(Stream_Video, StreamPos_To, Video_matrix_coefficients_Original, (*Stream)[Stream_Video][StreamPos_To][Video_matrix_coefficients], true);
- Fill(Stream_Video, StreamPos_To, Video_matrix_coefficients, matrix_coefficients_Temp, true);
- }
- else
- {
- Fill(Stream_Video, StreamPos_To, Video_colour_description_present, colour_description_present_Temp, true);
- Fill(Stream_Video, StreamPos_To, Video_colour_primaries, colour_primaries_Temp, true);
- Fill(Stream_Video, StreamPos_To, Video_transfer_characteristics, transfer_characteristics_Temp, true);
- Fill(Stream_Video, StreamPos_To, Video_matrix_coefficients, matrix_coefficients_Temp, true);
- }
- }
- }
- if (StreamKind==Stream_Audio)
- {
- if (!Channels_Temp.empty())
- {
- //Test with legacy streams information
- bool IsOk=(Channels_Temp==Retrieve(Stream_Audio, StreamPos_To, Audio_Channel_s_));
- if (!IsOk)
- {
- ZtringList Temp; Temp.Separator_Set(0, __T(" / "));
- Temp.Write(Retrieve(Stream_Audio, StreamPos_To, Audio_Channel_s_));
- for (size_t Pos=0; Pos<Temp.size(); Pos++)
- if (Channels_Temp==Temp[Pos])
- IsOk=true;
- }
-
- if (!IsOk)
- {
- Fill(Stream_Audio, StreamPos_To, Audio_Channel_s__Original, (*Stream)[Stream_Audio][StreamPos_To][Audio_Channel_s_], true);
- Fill(Stream_Audio, StreamPos_To, Audio_Channel_s_, Channels_Temp, true);
- }
- }
- }
- if (!Delay_Source_Temp.empty() && Delay_Source_Temp!=Retrieve(StreamKind, StreamPos_To, "Delay_Source"))
- {
- Fill(StreamKind, StreamPos_To, "Delay_Original", Retrieve(StreamKind, StreamPos_To, "Delay"), true);
- Fill(StreamKind, StreamPos_To, "Delay", Delay_Temp, true);
- Fill(StreamKind, StreamPos_To, "Delay_Original_Settings", Retrieve(StreamKind, StreamPos_To, "Delay_Settings"), true);
- Fill(StreamKind, StreamPos_To, "Delay_Settings", Delay_Settings_Temp, true);
- Fill(StreamKind, StreamPos_To, "Delay_Original_DropFrame", Retrieve(StreamKind, StreamPos_To, "Delay_DropFrame"), true);
- Fill(StreamKind, StreamPos_To, "Delay_DropFrame", Delay_DropFrame_Temp, true);
- Fill(StreamKind, StreamPos_To, "Delay_Original_Source", Retrieve(StreamKind, StreamPos_To, "Delay_Source"), true);
- Fill(StreamKind, StreamPos_To, "Delay_Source", Delay_Source_Temp, true);
- }
- if (!Source_Temp.empty() && Source_Temp!=Retrieve(StreamKind, StreamPos_To, "Source"))
- {
- Fill(StreamKind, StreamPos_To, "Source_Original", Retrieve(StreamKind, StreamPos_To, "Source"), true);
- Fill(StreamKind, StreamPos_To, "Source", Source_Temp, true);
- Fill(StreamKind, StreamPos_To, "Source_Original_Kind", Retrieve(StreamKind, StreamPos_To, "Source_Kind"), true);
- Fill(StreamKind, StreamPos_To, "Source_Kind", Source_Info_Temp, true);
- Fill(StreamKind, StreamPos_To, "Source_Original_Info", Retrieve(StreamKind, StreamPos_To, "Source_Info"), true);
- Fill(StreamKind, StreamPos_To, "Source_Info", Source_Info_Temp, true);
- }
-
- Fill(StreamKind, StreamPos_To, (size_t)General_Count, Count_Get(StreamKind, StreamPos_To), 10, true);
- return 1;
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Analyze::Video_FrameRate_Rounding(size_t Pos, video Parameter)
-{
- float64 FrameRate=Retrieve(Stream_Video, Pos, Parameter).To_float64();
- float64 FrameRate_Sav=FrameRate;
-
- if (FrameRate> 9.990 && FrameRate<=10.010) FrameRate=10.000;
- else if (FrameRate>14.990 && FrameRate<=15.010) FrameRate=15.000;
- else if (FrameRate>23.952 && FrameRate<=23.988) FrameRate=23.976;
- else if (FrameRate>23.988 && FrameRate<=24.024) FrameRate=24.000;
- else if (FrameRate>24.975 && FrameRate<=25.025) FrameRate=25.000;
- else if (FrameRate>29.940 && FrameRate<=29.985) FrameRate=29.970;
- else if (FrameRate>29.970 && FrameRate<=30.030) FrameRate=30.000;
- else if (FrameRate>23.952*2 && FrameRate<=23.988*2) FrameRate=23.976*2;
- else if (FrameRate>23.988*2 && FrameRate<=24.024*2) FrameRate=24.000*2;
- else if (FrameRate>24.975*2 && FrameRate<=25.025*2) FrameRate=25.000*2;
- else if (FrameRate>29.940*2 && FrameRate<=29.985*2) FrameRate=29.970*2;
- else if (FrameRate>29.970*2 && FrameRate<=30.030*2) FrameRate=30.000*2;
-
- if (FrameRate!=FrameRate_Sav)
- Fill(Stream_Video, Pos, Parameter, FrameRate, 3, true);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Video_BitRate_Rounding(size_t Pos, video Parameter)
-{
- const Ztring& Format=Retrieve(Stream_Video, Pos, Video_Format);
- int32u BitRate=Retrieve(Stream_Video, Pos, Parameter).To_int32u();
- int32u BitRate_Sav=BitRate;
- if (Format==__T("AVC"))
- {
- if (BitRate>= 54942720 && BitRate<= 57185280) BitRate= 56064000; //AVC-INTRA50
- if (BitRate>=111390720 && BitRate<=115937280) BitRate=113664000; //AVC-INTRA100
- }
-
- if (BitRate!=BitRate_Sav)
- Fill(Stream_Video, Pos, Parameter, BitRate, 0, true);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Audio_BitRate_Rounding(size_t Pos, audio Parameter)
-{
- const Ztring& Format=Retrieve(Stream_Audio, Pos, Audio_Format);
- const Ztring& Codec=Retrieve(Stream_Audio, Pos, Audio_Codec);
- int32u BitRate=Retrieve(Stream_Audio, Pos, Parameter).To_int32u();
- int32u BitRate_Sav=BitRate;
- if (MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_KindofCodec, Stream_Audio).find(__T("MPEG-"))==0
- || Retrieve(Stream_Audio, Pos, Audio_Codec_String).find(__T("MPEG-"))==0)
- {
- if (BitRate>= 7500 && BitRate<= 8500) BitRate= 8000;
- if (BitRate>= 15000 && BitRate<= 17000) BitRate= 16000;
- if (BitRate>= 23000 && BitRate<= 25000) BitRate= 24000;
- if (BitRate>= 31000 && BitRate<= 33000) BitRate= 32000;
- if (BitRate>= 38000 && BitRate<= 42000) BitRate= 40000;
- if (BitRate>= 46000 && BitRate<= 50000) BitRate= 48000;
- if (BitRate>= 54000 && BitRate<= 58000) BitRate= 56000;
- if (BitRate>= 62720 && BitRate<= 65280) BitRate= 64000;
- if (BitRate>= 78400 && BitRate<= 81600) BitRate= 80000;
- if (BitRate>= 94080 && BitRate<= 97920) BitRate= 96000;
- if (BitRate>= 109760 && BitRate<= 114240) BitRate= 112000;
- if (BitRate>= 125440 && BitRate<= 130560) BitRate= 128000;
- if (BitRate>= 156800 && BitRate<= 163200) BitRate= 160000;
- if (BitRate>= 156800 && BitRate<= 163200) BitRate= 160000;
- if (BitRate>= 188160 && BitRate<= 195840) BitRate= 192000;
- if (BitRate>= 219520 && BitRate<= 228480) BitRate= 224000;
- if (BitRate>= 219520 && BitRate<= 228480) BitRate= 224000;
- if (BitRate>= 250880 && BitRate<= 261120) BitRate= 256000;
- if (BitRate>= 282240 && BitRate<= 293760) BitRate= 288000;
- if (BitRate>= 313600 && BitRate<= 326400) BitRate= 320000;
- if (BitRate>= 344960 && BitRate<= 359040) BitRate= 352000;
- if (BitRate>= 376320 && BitRate<= 391680) BitRate= 384000;
- if (BitRate>= 407680 && BitRate<= 424320) BitRate= 416000;
- if (BitRate>= 439040 && BitRate<= 456960) BitRate= 448000;
- if (Retrieve(Stream_Audio, Pos, "BitRate_Mode")==__T("VBR"))
- BitRate=BitRate_Sav; //If VBR, we want the exact value
- }
-
- else if (MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_Name, Stream_Audio).find(__T("AC3"))==0)
- {
- if (BitRate>= 31000 && BitRate<= 33000) BitRate= 32000;
- if (BitRate>= 39000 && BitRate<= 41000) BitRate= 40000;
- if (BitRate>= 46000 && BitRate<= 50000) BitRate= 48000;
- if (BitRate>= 54000 && BitRate<= 58000) BitRate= 56000;
- if (BitRate>= 62720 && BitRate<= 65280) BitRate= 64000;
- if (BitRate>= 78400 && BitRate<= 81600) BitRate= 80000;
- if (BitRate>= 94080 && BitRate<= 97920) BitRate= 96000;
- if (BitRate>= 109760 && BitRate<= 114240) BitRate= 112000;
- if (BitRate>= 125440 && BitRate<= 130560) BitRate= 128000;
- if (BitRate>= 156800 && BitRate<= 163200) BitRate= 160000;
- if (BitRate>= 188160 && BitRate<= 195840) BitRate= 192000;
- if (BitRate>= 219520 && BitRate<= 228480) BitRate= 224000;
- if (BitRate>= 250880 && BitRate<= 261120) BitRate= 256000;
- if (BitRate>= 313600 && BitRate<= 326400) BitRate= 320000;
- if (BitRate>= 376320 && BitRate<= 391680) BitRate= 384000;
- if (BitRate>= 439040 && BitRate<= 456960) BitRate= 448000;
- if (BitRate>= 501760 && BitRate<= 522240) BitRate= 512000;
- if (BitRate>= 564480 && BitRate<= 587520) BitRate= 576000;
- if (BitRate>= 627200 && BitRate<= 652800) BitRate= 640000;
- }
-
- else if (MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_Name, Stream_Audio).find(__T("DTS"))==0)
- {
- if (BitRate>= 31000 && BitRate<= 33000) BitRate= 32000;
- if (BitRate>= 54000 && BitRate<= 58000) BitRate= 56000;
- if (BitRate>= 62720 && BitRate<= 65280) BitRate= 64000;
- if (BitRate>= 94080 && BitRate<= 97920) BitRate= 96000;
- if (BitRate>= 109760 && BitRate<= 114240) BitRate= 112000;
- if (BitRate>= 125440 && BitRate<= 130560) BitRate= 128000;
- if (BitRate>= 188160 && BitRate<= 195840) BitRate= 192000;
- if (BitRate>= 219520 && BitRate<= 228480) BitRate= 224000;
- if (BitRate>= 250880 && BitRate<= 261120) BitRate= 256000;
- if (BitRate>= 313600 && BitRate<= 326400) BitRate= 320000;
- if (BitRate>= 376320 && BitRate<= 391680) BitRate= 384000;
- if (BitRate>= 439040 && BitRate<= 456960) BitRate= 448000;
- if (BitRate>= 501760 && BitRate<= 522240) BitRate= 512000;
- if (BitRate>= 564480 && BitRate<= 587520) BitRate= 576000;
- if (BitRate>= 627200 && BitRate<= 652800) BitRate= 640000;
- if (BitRate>= 752640 && BitRate<= 783360) BitRate= 768000;
- if (BitRate>= 940800 && BitRate<= 979200) BitRate= 960000;
- if (BitRate>=1003520 && BitRate<=1044480) BitRate=1024000;
- if (BitRate>=1128960 && BitRate<=1175040) BitRate=1152000;
- if (BitRate>=1254400 && BitRate<=1305600) BitRate=1280000;
- if (BitRate>=1317120 && BitRate<=1370880) BitRate=1344000;
- if (BitRate>=1379840 && BitRate<=1436160) BitRate=1408000;
- if (BitRate>=1382976 && BitRate<=1439424) BitRate=1411200;
- if (BitRate>=1442560 && BitRate<=1501440) BitRate=1472000;
- if (BitRate>=1505280 && BitRate<=1566720) BitRate=1536000;
- if (BitRate>=1881600 && BitRate<=1958400) BitRate=1920000;
- if (BitRate>=2007040 && BitRate<=2088960) BitRate=2048000;
- if (BitRate>=3010560 && BitRate<=3133440) BitRate=3072000;
- if (BitRate>=3763200 && BitRate<=3916800) BitRate=3840000;
- }
-
- else if (Codec.find(__T("AAC"))==0 || MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_Name, Stream_Audio).find(__T("AAC"))==0)
- {
- if (BitRate>= 46000 && BitRate<= 50000) BitRate= 48000;
- if (BitRate>= 64827 && BitRate<= 67473) BitRate= 66150;
- if (BitRate>= 70560 && BitRate<= 73440) BitRate= 72000;
- if (BitRate>= 94080 && BitRate<= 97920) BitRate= 96000;
- if (BitRate>= 94080 && BitRate<= 97920) BitRate= 96000;
- if (BitRate>= 129654 && BitRate<= 134946) BitRate= 132300;
- if (BitRate>= 141120 && BitRate<= 146880) BitRate= 144000;
- if (BitRate>= 188160 && BitRate<= 195840) BitRate= 192000;
- if (BitRate>= 259308 && BitRate<= 269892) BitRate= 264600;
- if (BitRate>= 282240 && BitRate<= 293760) BitRate= 288000;
- if (BitRate>= 345744 && BitRate<= 359856) BitRate= 352800;
- if (BitRate>= 376320 && BitRate<= 391680) BitRate= 384000;
- if (BitRate>= 518616 && BitRate<= 539784) BitRate= 529200;
- if (BitRate>= 564480 && BitRate<= 587520) BitRate= 576000;
- if (BitRate>= 648270 && BitRate<= 674730) BitRate= 661500;
- }
-
- else if (Codec==__T("PCM") || Codec==__T("QDM2") || MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_Name, Stream_Audio).find(__T("PCM"))==0)
- {
- if (BitRate>= 62720 && BitRate<= 65280) BitRate= 64000;
- if (BitRate>= 86436 && BitRate<= 89964) BitRate= 88200;
- if (BitRate>= 125440 && BitRate<= 130560) BitRate= 128000;
- if (BitRate>= 172872 && BitRate<= 179928) BitRate= 176400;
- if (BitRate>= 188160 && BitRate<= 195840) BitRate= 192000;
- if (BitRate>= 250880 && BitRate<= 261120) BitRate= 256000;
- if (BitRate>= 345744 && BitRate<= 359856) BitRate= 352800;
- if (BitRate>= 376320 && BitRate<= 391680) BitRate= 384000;
- if (BitRate>= 501760 && BitRate<= 522240) BitRate= 512000;
- if (BitRate>= 691488 && BitRate<= 719712) BitRate= 705600;
- if (BitRate>= 752640 && BitRate<= 783360) BitRate= 768000;
- if (BitRate>=1003520 && BitRate<=1044480) BitRate=1024000;
- if (BitRate>=1128960 && BitRate<=1175040) BitRate=1152000;
- if (BitRate>=1382976 && BitRate<=1439424) BitRate=1411200;
- if (BitRate>=1505280 && BitRate<=1566720) BitRate=1536000;
- if (BitRate>=4515840 && BitRate<=4700160) BitRate=4608000;
- if (BitRate>=6021120 && BitRate<=6266880) BitRate=6144000;
- }
-
- else if (MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_Name, Stream_Audio).find(__T("ADPCM"))==0
- || MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_Name, Stream_Audio).find(__T("U-Law"))==0
- || MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_KindofCodec, Stream_Audio)==__T("ADPCM")
- || MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_KindofCodec, Stream_Audio)==__T("U-Law")
- || Format==__T("ADPCM"))
- {
- if (BitRate>= 42000 && BitRate<= 46000) BitRate= 44100;
- if (BitRate>= 62720 && BitRate<= 65280) BitRate= 64000;
- if (BitRate>= 86436 && BitRate<= 89964) BitRate= 88200;
- if (BitRate>= 125440 && BitRate<= 130560) BitRate= 128000;
- if (BitRate>= 172872 && BitRate<= 179928) BitRate= 176400;
- if (BitRate>= 188160 && BitRate<= 195840) BitRate= 192000;
- if (BitRate>= 250880 && BitRate<= 261120) BitRate= 256000;
- if (BitRate>= 345744 && BitRate<= 359856) BitRate= 352800;
- if (BitRate>= 376320 && BitRate<= 391680) BitRate= 384000;
- }
-
- if (BitRate!=BitRate_Sav)
- Fill(Stream_Audio, Pos, Parameter, BitRate, 0, true);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Tags()
-{
- //Integrity
- if (!Count_Get(Stream_General))
- return;
-
- //-Movie/Album
- if (!Retrieve(Stream_General, 0, General_Title).empty() && Retrieve(Stream_General, 0, General_Movie).empty() && Retrieve(Stream_General, 0, General_Track).empty())
- {
- if (Count_Get(Stream_Video) && Retrieve(Stream_General, 0, General_Collection).empty())
- Fill(Stream_General, 0, "Movie", Retrieve(Stream_General, 0, General_Title));
- else
- Fill(Stream_General, 0, "Track", Retrieve(Stream_General, 0, General_Title));
- }
- if (!Retrieve(Stream_General, 0, General_Title_More).empty() && Retrieve(Stream_General, 0, General_Movie_More).empty() && Retrieve(Stream_General, 0, General_Track_More).empty())
- {
- if (Count_Get(Stream_Video) && Retrieve(Stream_General, 0, General_Collection).empty())
- Fill(Stream_General, 0, "Movie/More", Retrieve(Stream_General, 0, General_Title_More));
- else
- Fill(Stream_General, 0, "Track/More", Retrieve(Stream_General, 0, General_Title_More));
- }
- if (!Retrieve(Stream_General, 0, General_Title_Url).empty() && Retrieve(Stream_General, 0, General_Movie_Url).empty() && Retrieve(Stream_General, 0, General_Track_Url).empty())
- {
- if (Count_Get(Stream_Video) && Retrieve(Stream_General, 0, General_Collection).empty())
- Fill(Stream_General, 0, "Movie/Url", Retrieve(Stream_General, 0, General_Title_Url));
- else
- Fill(Stream_General, 0, "Track/Url", Retrieve(Stream_General, 0, General_Title_Url));
- }
- //-Title
- if (Retrieve(Stream_General, 0, General_Title).empty() && !Retrieve(Stream_General, 0, General_Movie).empty())
- Fill(Stream_General, 0, "Title", Retrieve(Stream_General, 0, General_Movie));
- if (Retrieve(Stream_General, 0, General_Title).empty() && !Retrieve(Stream_General, 0, General_Track).empty())
- Fill(Stream_General, 0, "Title", Retrieve(Stream_General, 0, General_Track));
- if (Retrieve(Stream_General, 0, General_Title_More).empty() && !Retrieve(Stream_General, 0, General_Movie_More).empty())
- Fill(Stream_General, 0, "Title/More", Retrieve(Stream_General, 0, General_Movie_More));
- if (Retrieve(Stream_General, 0, General_Title_More).empty() && !Retrieve(Stream_General, 0, General_Track_More).empty())
- Fill(Stream_General, 0, "Title/More", Retrieve(Stream_General, 0, General_Track_More));
- if (Retrieve(Stream_General, 0, General_Title_Url).empty() && !Retrieve(Stream_General, 0, General_Movie_Url).empty())
- Fill(Stream_General, 0, "Title/Url", Retrieve(Stream_General, 0, General_Movie_Url));
- if (Retrieve(Stream_General, 0, General_Title_Url).empty() && !Retrieve(Stream_General, 0, General_Track_Url).empty())
- Fill(Stream_General, 0, "Title/Url", Retrieve(Stream_General, 0, General_Track_Url));
-
- //-Genre
- if (!Retrieve(Stream_General, 0, General_Genre).empty() && Retrieve(Stream_General, 0, General_Genre).size()<4 && Retrieve(Stream_General, 0, General_Genre)[0]>=__T('0') && Retrieve(Stream_General, 0, General_Genre)[0]<=__T('9'))
- {
- Ztring Genre;
- if (Retrieve(Stream_General, 0, General_Genre).size()==1) Genre=Ztring(__T("Genre_00"))+Retrieve(Stream_General, 0, General_Genre);
- if (Retrieve(Stream_General, 0, General_Genre).size()==2) Genre=Ztring(__T("Genre_0" ))+Retrieve(Stream_General, 0, General_Genre);
- if (Retrieve(Stream_General, 0, General_Genre).size()==3) Genre=Ztring(__T("Genre_" ))+Retrieve(Stream_General, 0, General_Genre);
- Fill(Stream_General, 0, "Genre", MediaInfoLib::Config.Language_Get(Genre), true);
- }
-}
-
-//***************************************************************************
-// Internal Functions
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Duration
-void File__Analyze::Duration_Duration123(stream_t StreamKind, size_t StreamPos, size_t Parameter)
-{
- if (Retrieve(StreamKind, StreamPos, Parameter).empty())
- return;
-
- //Clearing old data
- Clear(StreamKind, StreamPos, Parameter+1);
- Clear(StreamKind, StreamPos, Parameter+2);
- Clear(StreamKind, StreamPos, Parameter+3);
- Clear(StreamKind, StreamPos, Parameter+4);
-
- //Retrieving multiple values
- ZtringList List;
- List.Separator_Set(0, __T(" / "));
- List.Write(Retrieve(StreamKind, StreamPos, Parameter));
-
- //Per value
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- int32s HH, MM, Sec, MS;
- Ztring DurationString1, DurationString2, DurationString3;
- bool Negative=false;
- MS=List[Pos].To_int32s(); //in ms
-
- if (MS<0)
- {
- Negative=true;
- MS=-MS;
- }
-
- //Hours
- HH=MS/1000/60/60; //h
- if (HH>0)
- {
- DurationString1+=Ztring::ToZtring(HH)+MediaInfoLib::Config.Language_Get(__T("h"));
- DurationString2+=Ztring::ToZtring(HH)+MediaInfoLib::Config.Language_Get(__T("h"));
- if (HH<10)
- DurationString3+=Ztring(__T("0"))+Ztring::ToZtring(HH)+__T(":");
- else
- DurationString3+=Ztring::ToZtring(HH)+__T(":");
- MS-=HH*60*60*1000;
- }
- else
- {
- DurationString3+=__T("00:");
- }
-
- //Minutes
- MM=MS/1000/60; //mn
- if (MM>0 || HH>0)
- {
- if (DurationString1.size()>0)
- DurationString1+=__T(" ");
- DurationString1+=Ztring::ToZtring(MM)+MediaInfoLib::Config.Language_Get(__T("mn"));
- if (DurationString2.size()<5)
- {
- if (DurationString2.size()>0)
- DurationString2+=__T(" ");
- DurationString2+=Ztring::ToZtring(MM)+MediaInfoLib::Config.Language_Get(__T("mn"));
- }
- if (MM<10)
- DurationString3+=Ztring(__T("0"))+Ztring::ToZtring(MM)+__T(":");
- else
- DurationString3+=Ztring::ToZtring(MM)+__T(":");
- MS-=MM*60*1000;
- }
- else
- {
- DurationString3+=__T("00:");
- }
-
- //Seconds
- Sec=MS/1000; //s
- if (Sec>0 || MM>0 || HH>0)
- {
- if (DurationString1.size()>0)
- DurationString1+=__T(" ");
- DurationString1+=Ztring::ToZtring(Sec)+MediaInfoLib::Config.Language_Get(__T("s"));
- if (DurationString2.size()<5)
- {
- if (DurationString2.size()>0)
- DurationString2+=__T(" ");
- DurationString2+=Ztring::ToZtring(Sec)+MediaInfoLib::Config.Language_Get(__T("s"));
- }
- else if (DurationString2.size()==0)
- DurationString2+=Ztring::ToZtring(Sec)+MediaInfoLib::Config.Language_Get(__T("s"));
- if (Sec<10)
- DurationString3+=Ztring(__T("0"))+Ztring::ToZtring(Sec)+__T(".");
- else
- DurationString3+=Ztring::ToZtring(Sec)+__T(".");
- MS-=Sec*1000;
- }
- else
- {
- DurationString3+=__T("00.");
- }
-
- //Milliseconds
- if (MS>0 || Sec>0 || MM>0 || HH>0)
- {
- if (DurationString1.size()>0)
- DurationString1+=__T(" ");
- DurationString1+=Ztring::ToZtring(MS)+MediaInfoLib::Config.Language_Get(__T("ms"));
- if (DurationString2.size()<5)
- {
- if (DurationString2.size()>0)
- DurationString2+=__T(" ");
- DurationString2+=Ztring::ToZtring(MS)+MediaInfoLib::Config.Language_Get(__T("ms"));
- }
- if (MS<10)
- DurationString3+=Ztring(__T("00"))+Ztring::ToZtring(MS);
- else if (MS<100)
- DurationString3+=Ztring(__T("0"))+Ztring::ToZtring(MS);
- else
- DurationString3+=Ztring::ToZtring(MS);
- }
- else
- {
- DurationString3+=__T("000");
- }
-
- if (Negative)
- {
- DurationString1=Ztring(__T("-"))+DurationString1;
- DurationString2=Ztring(__T("-"))+DurationString2;
- DurationString3=Ztring(__T("-"))+DurationString3;
- }
-
- Fill(StreamKind, StreamPos, Parameter+1, DurationString2); // /String
- Fill(StreamKind, StreamPos, Parameter+2, DurationString1); // /String1
- Fill(StreamKind, StreamPos, Parameter+3, DurationString2); // /String2
- Fill(StreamKind, StreamPos, Parameter+4, DurationString3); // /String3
- }
-}
-
-//---------------------------------------------------------------------------
-//FileSize
-void File__Analyze::FileSize_FileSize123(stream_t StreamKind, size_t StreamPos, size_t Parameter)
-{
- if (Retrieve(StreamKind, StreamPos, Parameter).empty())
- return;
-
- float F1=(float)Retrieve(StreamKind, StreamPos, Parameter).To_int64s(); //Video C++ 6 patch, should be int64u
-
- //--Bytes, KiB, MiB or GiB...
- int32u Pow3=0;
- while(F1>=1024)
- {
- F1/=1024;
- Pow3++;
- }
- //--Count of digits
- int8u I2, I3, I4;
- if (F1>=100)
- {
- I2=0;
- I3=0;
- I4=1;
- }
- else if (F1>=10)
- {
- I2=0;
- I3=1;
- I4=2;
- }
- else //if (F1>=1)
- {
- I2=1;
- I3=2;
- I4=3;
- }
- Ztring Measure; bool MeasureIsAlwaysSame;
- switch (Pow3)
- {
- case 0 : Measure=__T(" Byte"); MeasureIsAlwaysSame=false; break;
- case 1 : Measure=__T(" KiB"); MeasureIsAlwaysSame=true; break;
- case 2 : Measure=__T(" MiB"); MeasureIsAlwaysSame=true; break;
- case 3 : Measure=__T(" GiB"); MeasureIsAlwaysSame=true; break;
- default : Measure=__T(" ?iB"); MeasureIsAlwaysSame=true;
- }
- Fill(StreamKind, StreamPos, Parameter+2, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, 0), Measure, MeasureIsAlwaysSame), true); // /String1
- Fill(StreamKind, StreamPos, Parameter+3, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I2), Measure, MeasureIsAlwaysSame), true); // /String2
- Fill(StreamKind, StreamPos, Parameter+4, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame), true); // /String3
- Fill(StreamKind, StreamPos, Parameter+5, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I4), Measure, MeasureIsAlwaysSame), true); // /String4
- float64 F2=(float)Retrieve(StreamKind, StreamPos, Parameter).To_float64();
- float64 File_Size_WithReferencedFiles=(float)Retrieve(Stream_General, 0, General_FileSize).To_float64();
- if (File_Size_WithReferencedFiles>0 && Parameter==Fill_Parameter(StreamKind, Generic_StreamSize) && F2*100/File_Size_WithReferencedFiles<=100)
- {
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_StreamSize_Proportion), F2/File_Size_WithReferencedFiles, 5, true);
- Fill(StreamKind, StreamPos, Parameter+6, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame)+__T(" (")+Ztring::ToZtring(F2*100/File_Size_WithReferencedFiles, 0)+__T("%)"), true); // /String5
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame)+__T(" (")+Ztring::ToZtring(F2*100/File_Size_WithReferencedFiles, 0)+__T("%)"), true);
- }
- else if (File_Size_WithReferencedFiles>0 && Parameter==Fill_Parameter(StreamKind, Generic_StreamSize_Encoded) && F2*100/File_Size_WithReferencedFiles<=100)
- {
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_StreamSize_Encoded_Proportion), F2/File_Size_WithReferencedFiles, 5, true);
- Fill(StreamKind, StreamPos, Parameter+6, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame)+__T(" (")+Ztring::ToZtring(F2*100/File_Size_WithReferencedFiles, 0)+__T("%)"), true); // /String5
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame)+__T(" (")+Ztring::ToZtring(F2*100/File_Size_WithReferencedFiles, 0)+__T("%)"), true);
- }
- else if (File_Size_WithReferencedFiles>0 && Parameter==Fill_Parameter(StreamKind, Generic_Source_StreamSize) && F2*100/File_Size_WithReferencedFiles<=100)
- {
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Source_StreamSize_Proportion), F2/File_Size_WithReferencedFiles, 5, true);
- Fill(StreamKind, StreamPos, Parameter+6, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame)+__T(" (")+Ztring::ToZtring(F2*100/File_Size_WithReferencedFiles, 0)+__T("%)"), true); // /String5
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame)+__T(" (")+Ztring::ToZtring(F2*100/File_Size_WithReferencedFiles, 0)+__T("%)"), true);
- }
- else if (File_Size_WithReferencedFiles>0 && Parameter==Fill_Parameter(StreamKind, Generic_Source_StreamSize_Encoded) && F2*100/File_Size_WithReferencedFiles<=100)
- {
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Source_StreamSize_Encoded_Proportion), F2/File_Size_WithReferencedFiles, 5, true);
- Fill(StreamKind, StreamPos, Parameter+6, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame)+__T(" (")+Ztring::ToZtring(F2*100/File_Size_WithReferencedFiles, 0)+__T("%)"), true); // /String5
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame)+__T(" (")+Ztring::ToZtring(F2*100/File_Size_WithReferencedFiles, 0)+__T("%)"), true);
- }
- else
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(F1, I3), Measure, MeasureIsAlwaysSame), true);
-}
-
-//---------------------------------------------------------------------------
-//FileSize
-void File__Analyze::Kilo_Kilo123(stream_t StreamKind, size_t StreamPos, size_t Parameter)
-{
- if (Retrieve(StreamKind, StreamPos, Parameter).empty())
- return;
-
- //Clearing old data
- Clear(StreamKind, StreamPos, Parameter+1);
-
- //Retrieving multiple values
- ZtringList List;
- List.Separator_Set(0, __T(" / "));
- List.Write(Retrieve(StreamKind, StreamPos, Parameter));
-
- //Per value
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- int64u BitRate=List[Pos].To_int64u();
-
- //Text
- if (BitRate==0 && (List[Pos].empty() || List[Pos][0]>__T('9')))
- {
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(List[Pos]));
- }
- else
- {
- //Well known values
- Ztring BitRateS;
- if (StreamKind==Stream_Audio)
- {
- if (Parameter==Audio_BitRate
- && (Retrieve(Stream_Audio, StreamPos, Audio_Format)==__T("PCM")
- || Retrieve(Stream_Audio, StreamPos, Audio_Format)==__T("ADPCM")
- || Retrieve(Stream_Audio, StreamPos, Audio_Format)==__T("U-Law")
- || Retrieve(Stream_Audio, StreamPos, Audio_Format)==__T("Qdesign 1")
- || Retrieve(Stream_Audio, StreamPos, Audio_Format)==__T("Qdesign 2")
- || Retrieve(Stream_Audio, StreamPos, Audio_Format)==__T("DTS")))
- {
- if (BitRate== 66150) BitRateS= "66.15";
- if (BitRate== 132300) BitRateS= "132.3";
- if (BitRate== 176400) BitRateS= "176.4";
- if (BitRate== 264600) BitRateS= "264.6";
- if (BitRate== 352800) BitRateS= "352.8";
- if (BitRate== 529200) BitRateS= "529.2";
- if (BitRate== 705600) BitRateS= "705.6";
- if (BitRate==1411200) BitRateS="1411.2";
- }
- if (Parameter==Audio_SamplingRate)
- {
- if (BitRate== 11024) BitRateS= "11.024";
- if (BitRate== 11025) BitRateS= "11.025";
- if (BitRate== 22050) BitRateS= "22.05";
- if (BitRate== 44100) BitRateS= "44.1";
- if (BitRate== 88200) BitRateS= "88.2";
- if (BitRate== 176400) BitRateS= "176.4";
- if (BitRate== 352800) BitRateS= "352.8";
- }
- }
- if (!BitRateS.empty())
- {
- Ztring Measure=MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter, Info_Measure);
- Measure.insert(1, __T("K"));
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(BitRateS, Measure, true));
- }
- else
- {
- //Standard
- if (BitRate>10000000000LL)
- {
- Ztring Measure=MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter, Info_Measure);
- Measure.insert(1, __T("G"));
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(((float)BitRate)/1000000000, BitRate>100000000000LL?0:1), Measure, true));
- }
- else if (BitRate>10000000)
- {
- Ztring Measure=MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter, Info_Measure);
- Measure.insert(1, __T("M"));
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(((float)BitRate)/1000000, BitRate>100000000?0:1), Measure, true));
- }
- else if (BitRate>10000)
- {
- Ztring Measure=MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter, Info_Measure);
- Measure.insert(1, __T("K"));
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(((float)BitRate)/1000, BitRate>100000?0:1), Measure, true));
- }
- else
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Ztring::ToZtring(BitRate), MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter, Info_Measure), true));
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-//Value --> Value with measure
-void File__Analyze::Value_Value123(stream_t StreamKind, size_t StreamPos, size_t Parameter)
-{
- if (Retrieve(StreamKind, StreamPos, Parameter, Info_Measure).empty())
- return;
-
- //Clearing old data
- Clear(StreamKind, StreamPos, Parameter+1);
-
- //Retrieving multiple values
- ZtringList List;
- List.Separator_Set(0, __T(" / "));
- List.Write(Retrieve(StreamKind, StreamPos, Parameter));
-
- //Per value
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- //Filling
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(List[Pos], MediaInfoLib::Config.Info_Get(StreamKind).Read(Parameter, Info_Measure)));
- }
-
-}
-
-//---------------------------------------------------------------------------
-//Value --> Yes or No
-void File__Analyze::YesNo_YesNo(stream_t StreamKind, size_t StreamPos, size_t Parameter)
-{
- //Filling
- Fill(StreamKind, StreamPos, Parameter+1, MediaInfoLib::Config.Language_Get(Retrieve(StreamKind, StreamPos, Parameter)), true);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::CodecID_Fill(const Ztring &Value, stream_t StreamKind, size_t StreamPos, infocodecid_format_t Format, stream_t StreamKind_CodecID)
-{
- if (StreamKind_CodecID==Stream_Max)
- StreamKind_CodecID=StreamKind;
-
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_CodecID), Value);
- const Ztring &C1=MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_Format);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format), C1.empty()?Value:C1, true);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_CodecID_Info), MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_Description), true);
- Fill(StreamKind, StreamPos, "CodecID/Hint", MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_Hint), true);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_CodecID_Url), MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_Url), true);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format_Version), MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_Version), true);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Format_Profile), MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_Profile), true);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_ColorSpace), MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_ColorSpace), true);
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_ChromaSubsampling), MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_ChromaSubsampling), true);
- if (Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_BitDepth)).empty())
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_BitDepth), MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_BitDepth), true);
- if (Retrieve(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Compression_Mode)).empty())
- Fill(StreamKind, StreamPos, Fill_Parameter(StreamKind, Generic_Compression_Mode), MediaInfoLib::Config.CodecID_Get(StreamKind_CodecID, Format, Value, InfoCodecID_Compression_Mode), true);
-
- //Specific cases
- if (Value==__T("v210") || Value==__T("V210"))
- Fill(Stream_Video, StreamPos, Video_BitDepth, 10);
-}
-
-//---------------------------------------------------------------------------
-size_t File__Analyze::Fill_Parameter(stream_t StreamKind, generic StreamPos)
-{
- switch (StreamKind)
- {
- case Stream_General :
- switch (StreamPos)
- {
- case Generic_Format : return General_Format;
- case Generic_Format_Info : return General_Format_Info;
- case Generic_Format_Url : return General_Format_Url;
- case Generic_Format_Version : return General_Format_Version;
- case Generic_Format_Commercial : return General_Format_Commercial;
- case Generic_Format_Commercial_IfAny : return General_Format_Commercial_IfAny;
- case Generic_Format_Profile : return General_Format_Profile;
- case Generic_Format_Settings : return General_Format_Settings;
- case Generic_InternetMediaType : return General_InternetMediaType;
- case Generic_CodecID : return General_CodecID;
- case Generic_CodecID_Info : return General_CodecID_Info;
- case Generic_CodecID_Hint : return General_CodecID_Hint;
- case Generic_CodecID_Url : return General_CodecID_Url;
- case Generic_CodecID_Description : return General_CodecID_Description;
- case Generic_Codec : return General_Codec;
- case Generic_Codec_String : return General_Codec_String;
- case Generic_Codec_Info : return General_Codec_Info;
- case Generic_Codec_Url : return General_Codec_Url;
- case Generic_Duration : return General_Duration;
- case Generic_Duration_String : return General_Duration_String;
- case Generic_Duration_String1 : return General_Duration_String1;
- case Generic_Duration_String2 : return General_Duration_String2;
- case Generic_Duration_String3 : return General_Duration_String3;
- case Generic_StreamSize : return General_StreamSize;
- case Generic_StreamSize_String : return General_StreamSize_String;
- case Generic_StreamSize_String1 : return General_StreamSize_String1;
- case Generic_StreamSize_String2 : return General_StreamSize_String2;
- case Generic_StreamSize_String3 : return General_StreamSize_String3;
- case Generic_StreamSize_String4 : return General_StreamSize_String4;
- case Generic_StreamSize_String5 : return General_StreamSize_String5;
- case Generic_StreamSize_Proportion : return General_StreamSize_Proportion;
- case Generic_ServiceName : return General_ServiceName;
- case Generic_ServiceProvider : return General_ServiceProvider;
- default: return (size_t)-1;
- }
- case Stream_Video :
- switch (StreamPos)
- {
- case Generic_Format : return Video_Format;
- case Generic_Format_Info : return Video_Format_Info;
- case Generic_Format_Url : return Video_Format_Url;
- case Generic_Format_Commercial : return Video_Format_Commercial;
- case Generic_Format_Commercial_IfAny : return Video_Format_Commercial_IfAny;
- case Generic_Format_Version : return Video_Format_Version;
- case Generic_Format_Profile : return Video_Format_Profile;
- case Generic_Format_Settings : return Video_Format_Settings;
- case Generic_InternetMediaType : return Video_InternetMediaType;
- case Generic_CodecID : return Video_CodecID;
- case Generic_CodecID_Info : return Video_CodecID_Info;
- case Generic_CodecID_Hint : return Video_CodecID_Hint;
- case Generic_CodecID_Url : return Video_CodecID_Url;
- case Generic_CodecID_Description : return Video_CodecID_Description;
- case Generic_Codec : return Video_Codec;
- case Generic_Codec_String : return Video_Codec_String;
- case Generic_Codec_Info : return Video_Codec_Info;
- case Generic_Codec_Url : return Video_Codec_Url;
- case Generic_Codec_CC : return Video_Codec_CC;
- case Generic_Duration : return Video_Duration;
- case Generic_Duration_String : return Video_Duration_String;
- case Generic_Duration_String1 : return Video_Duration_String1;
- case Generic_Duration_String2 : return Video_Duration_String2;
- case Generic_Duration_String3 : return Video_Duration_String3;
- case Generic_Source_Duration : return Video_Source_Duration;
- case Generic_Source_Duration_String : return Video_Source_Duration_String;
- case Generic_Source_Duration_String1 : return Video_Source_Duration_String1;
- case Generic_Source_Duration_String2 : return Video_Source_Duration_String2;
- case Generic_Source_Duration_String3 : return Video_Source_Duration_String3;
- case Generic_BitRate_Mode : return Video_BitRate_Mode;
- case Generic_BitRate_Mode_String : return Video_BitRate_Mode_String;
- case Generic_BitRate : return Video_BitRate;
- case Generic_BitRate_String : return Video_BitRate_String;
- case Generic_BitRate_Minimum : return Video_BitRate_Minimum;
- case Generic_BitRate_Minimum_String : return Video_BitRate_Minimum_String;
- case Generic_BitRate_Nominal : return Video_BitRate_Nominal;
- case Generic_BitRate_Nominal_String : return Video_BitRate_Nominal_String;
- case Generic_BitRate_Maximum : return Video_BitRate_Maximum;
- case Generic_BitRate_Maximum_String : return Video_BitRate_Maximum_String;
- case Generic_BitRate_Encoded : return Video_BitRate_Encoded;
- case Generic_BitRate_Encoded_String : return Video_BitRate_Encoded_String;
- case Generic_FrameCount : return Video_FrameCount;
- case Generic_Source_FrameCount : return Video_Source_FrameCount;
- case Generic_ColorSpace : return Video_ColorSpace;
- case Generic_ChromaSubsampling : return Video_ChromaSubsampling;
- case Generic_Resolution : return Video_Resolution;
- case Generic_Resolution_String : return Video_Resolution_String;
- case Generic_BitDepth : return Video_BitDepth;
- case Generic_BitDepth_String : return Video_BitDepth_String;
- case Generic_Compression_Mode : return Video_Compression_Mode;
- case Generic_Compression_Mode_String : return Video_Compression_Mode_String;
- case Generic_Compression_Ratio : return Video_Compression_Ratio;
- case Generic_Delay : return Video_Delay;
- case Generic_Delay_String : return Video_Delay_String;
- case Generic_Delay_String1 : return Video_Delay_String1;
- case Generic_Delay_String2 : return Video_Delay_String2;
- case Generic_Delay_String3 : return Video_Delay_String3;
- case Generic_Delay_String4 : return Video_Delay_String4;
- case Generic_Delay_Settings : return Video_Delay_Settings;
- case Generic_Delay_DropFrame : return Video_Delay_DropFrame;
- case Generic_Delay_Source : return Video_Delay_Source;
- case Generic_Delay_Source_String : return Video_Delay_Source_String;
- case Generic_Delay_Original : return Video_Delay_Original;
- case Generic_Delay_Original_String : return Video_Delay_Original_String;
- case Generic_Delay_Original_String1 : return Video_Delay_Original_String1;
- case Generic_Delay_Original_String2 : return Video_Delay_Original_String2;
- case Generic_Delay_Original_String3 : return Video_Delay_Original_String3;
- case Generic_Delay_Original_String4 : return Video_Delay_Original_String4;
- case Generic_Delay_Original_Settings : return Video_Delay_Original_Settings;
- case Generic_Delay_Original_DropFrame : return Video_Delay_Original_DropFrame;
- case Generic_Delay_Original_Source : return Video_Delay_Original_Source;
- case Generic_StreamSize : return Video_StreamSize;
- case Generic_StreamSize_String : return Video_StreamSize_String;
- case Generic_StreamSize_String1 : return Video_StreamSize_String1;
- case Generic_StreamSize_String2 : return Video_StreamSize_String2;
- case Generic_StreamSize_String3 : return Video_StreamSize_String3;
- case Generic_StreamSize_String4 : return Video_StreamSize_String4;
- case Generic_StreamSize_String5 : return Video_StreamSize_String5;
- case Generic_StreamSize_Proportion : return Video_StreamSize_Proportion;
- case Generic_StreamSize_Encoded : return Video_StreamSize_Encoded;
- case Generic_StreamSize_Encoded_String : return Video_StreamSize_Encoded_String;
- case Generic_StreamSize_Encoded_String1 : return Video_StreamSize_Encoded_String1;
- case Generic_StreamSize_Encoded_String2 : return Video_StreamSize_Encoded_String2;
- case Generic_StreamSize_Encoded_String3 : return Video_StreamSize_Encoded_String3;
- case Generic_StreamSize_Encoded_String4 : return Video_StreamSize_Encoded_String4;
- case Generic_StreamSize_Encoded_String5 : return Video_StreamSize_Encoded_String5;
- case Generic_StreamSize_Encoded_Proportion : return Video_StreamSize_Encoded_Proportion;
- case Generic_Source_StreamSize : return Video_Source_StreamSize;
- case Generic_Source_StreamSize_String : return Video_Source_StreamSize_String;
- case Generic_Source_StreamSize_String1 : return Video_Source_StreamSize_String1;
- case Generic_Source_StreamSize_String2 : return Video_Source_StreamSize_String2;
- case Generic_Source_StreamSize_String3 : return Video_Source_StreamSize_String3;
- case Generic_Source_StreamSize_String4 : return Video_Source_StreamSize_String4;
- case Generic_Source_StreamSize_String5 : return Video_Source_StreamSize_String5;
- case Generic_Source_StreamSize_Proportion : return Video_Source_StreamSize_Proportion;
- case Generic_Source_StreamSize_Encoded : return Video_Source_StreamSize_Encoded;
- case Generic_Source_StreamSize_Encoded_String : return Video_Source_StreamSize_Encoded_String;
- case Generic_Source_StreamSize_Encoded_String1 : return Video_Source_StreamSize_Encoded_String1;
- case Generic_Source_StreamSize_Encoded_String2 : return Video_Source_StreamSize_Encoded_String2;
- case Generic_Source_StreamSize_Encoded_String3 : return Video_Source_StreamSize_Encoded_String3;
- case Generic_Source_StreamSize_Encoded_String4 : return Video_Source_StreamSize_Encoded_String4;
- case Generic_Source_StreamSize_Encoded_String5 : return Video_Source_StreamSize_Encoded_String5;
- case Generic_Source_StreamSize_Encoded_Proportion : return Video_Source_StreamSize_Encoded_Proportion;
- case Generic_Language : return Video_Language;
- default: return (size_t)-1;
- }
- case Stream_Audio :
- switch (StreamPos)
- {
- case Generic_Format : return Audio_Format;
- case Generic_Format_Info : return Audio_Format_Info;
- case Generic_Format_Url : return Audio_Format_Url;
- case Generic_Format_Commercial : return Audio_Format_Commercial;
- case Generic_Format_Commercial_IfAny : return Audio_Format_Commercial_IfAny;
- case Generic_Format_Version : return Audio_Format_Version;
- case Generic_Format_Profile : return Audio_Format_Profile;
- case Generic_Format_Settings : return Audio_Format_Settings;
- case Generic_InternetMediaType : return Audio_InternetMediaType;
- case Generic_CodecID : return Audio_CodecID;
- case Generic_CodecID_Info : return Audio_CodecID_Info;
- case Generic_CodecID_Hint : return Audio_CodecID_Hint;
- case Generic_CodecID_Url : return Audio_CodecID_Url;
- case Generic_CodecID_Description : return Audio_CodecID_Description;
- case Generic_Codec : return Audio_Codec;
- case Generic_Codec_String : return Audio_Codec_String;
- case Generic_Codec_Info : return Audio_Codec_Info;
- case Generic_Codec_Url : return Audio_Codec_Url;
- case Generic_Codec_CC : return Audio_Codec_CC;
- case Generic_Duration : return Audio_Duration;
- case Generic_Duration_String : return Audio_Duration_String;
- case Generic_Duration_String1 : return Audio_Duration_String1;
- case Generic_Duration_String2 : return Audio_Duration_String2;
- case Generic_Duration_String3 : return Audio_Duration_String3;
- case Generic_Source_Duration : return Audio_Source_Duration;
- case Generic_Source_Duration_String : return Audio_Source_Duration_String;
- case Generic_Source_Duration_String1 : return Audio_Source_Duration_String1;
- case Generic_Source_Duration_String2 : return Audio_Source_Duration_String2;
- case Generic_Source_Duration_String3 : return Audio_Source_Duration_String3;
- case Generic_BitRate_Mode : return Audio_BitRate_Mode;
- case Generic_BitRate_Mode_String : return Audio_BitRate_Mode_String;
- case Generic_BitRate : return Audio_BitRate;
- case Generic_BitRate_String : return Audio_BitRate_String;
- case Generic_BitRate_Minimum : return Audio_BitRate_Minimum;
- case Generic_BitRate_Minimum_String : return Audio_BitRate_Minimum_String;
- case Generic_BitRate_Nominal : return Audio_BitRate_Nominal;
- case Generic_BitRate_Nominal_String : return Audio_BitRate_Nominal_String;
- case Generic_BitRate_Maximum : return Audio_BitRate_Maximum;
- case Generic_BitRate_Maximum_String : return Audio_BitRate_Maximum_String;
- case Generic_BitRate_Encoded : return Audio_BitRate_Encoded;
- case Generic_BitRate_Encoded_String : return Audio_BitRate_Encoded_String;
- case Generic_FrameCount : return Audio_FrameCount;
- case Generic_Source_FrameCount : return Audio_Source_FrameCount;
- case Generic_Resolution : return Audio_Resolution;
- case Generic_Resolution_String : return Audio_Resolution_String;
- case Generic_BitDepth : return Audio_BitDepth;
- case Generic_BitDepth_String : return Audio_BitDepth_String;
- case Generic_Compression_Mode : return Audio_Compression_Mode;
- case Generic_Compression_Mode_String : return Audio_Compression_Mode_String;
- case Generic_Compression_Ratio : return Audio_Compression_Ratio;
- case Generic_Delay : return Audio_Delay;
- case Generic_Delay_String : return Audio_Delay_String;
- case Generic_Delay_String1 : return Audio_Delay_String1;
- case Generic_Delay_String2 : return Audio_Delay_String2;
- case Generic_Delay_String3 : return Audio_Delay_String3;
- case Generic_Delay_String4 : return Audio_Delay_String4;
- case Generic_Delay_Settings : return Audio_Delay_Settings;
- case Generic_Delay_DropFrame : return Audio_Delay_DropFrame;
- case Generic_Delay_Source : return Audio_Delay_Source;
- case Generic_Delay_Source_String : return Audio_Delay_Source_String;
- case Generic_Delay_Original : return Audio_Delay_Original;
- case Generic_Delay_Original_String : return Audio_Delay_Original_String;
- case Generic_Delay_Original_String1 : return Audio_Delay_Original_String1;
- case Generic_Delay_Original_String2 : return Audio_Delay_Original_String2;
- case Generic_Delay_Original_String3 : return Audio_Delay_Original_String3;
- case Generic_Delay_Original_String4 : return Audio_Delay_Original_String4;
- case Generic_Delay_Original_Settings : return Audio_Delay_Original_Settings;
- case Generic_Delay_Original_DropFrame : return Audio_Delay_Original_DropFrame;
- case Generic_Delay_Original_Source : return Audio_Delay_Original_Source;
- case Generic_Video_Delay : return Audio_Video_Delay;
- case Generic_Video_Delay_String : return Audio_Video_Delay_String;
- case Generic_Video_Delay_String1 : return Audio_Video_Delay_String1;
- case Generic_Video_Delay_String2 : return Audio_Video_Delay_String2;
- case Generic_Video_Delay_String3 : return Audio_Video_Delay_String3;
- case Generic_Video_Delay_String4 : return Audio_Video_Delay_String4;
- case Generic_StreamSize : return Audio_StreamSize;
- case Generic_StreamSize_String : return Audio_StreamSize_String;
- case Generic_StreamSize_String1 : return Audio_StreamSize_String1;
- case Generic_StreamSize_String2 : return Audio_StreamSize_String2;
- case Generic_StreamSize_String3 : return Audio_StreamSize_String3;
- case Generic_StreamSize_String4 : return Audio_StreamSize_String4;
- case Generic_StreamSize_String5 : return Audio_StreamSize_String5;
- case Generic_StreamSize_Proportion : return Audio_StreamSize_Proportion;
- case Generic_StreamSize_Encoded : return Audio_StreamSize_Encoded;
- case Generic_StreamSize_Encoded_String : return Audio_StreamSize_Encoded_String;
- case Generic_StreamSize_Encoded_String1 : return Audio_StreamSize_Encoded_String1;
- case Generic_StreamSize_Encoded_String2 : return Audio_StreamSize_Encoded_String2;
- case Generic_StreamSize_Encoded_String3 : return Audio_StreamSize_Encoded_String3;
- case Generic_StreamSize_Encoded_String4 : return Audio_StreamSize_Encoded_String4;
- case Generic_StreamSize_Encoded_String5 : return Audio_StreamSize_Encoded_String5;
- case Generic_StreamSize_Encoded_Proportion : return Audio_StreamSize_Encoded_Proportion;
- case Generic_Source_StreamSize : return Audio_Source_StreamSize;
- case Generic_Source_StreamSize_String : return Audio_Source_StreamSize_String;
- case Generic_Source_StreamSize_String1 : return Audio_Source_StreamSize_String1;
- case Generic_Source_StreamSize_String2 : return Audio_Source_StreamSize_String2;
- case Generic_Source_StreamSize_String3 : return Audio_Source_StreamSize_String3;
- case Generic_Source_StreamSize_String4 : return Audio_Source_StreamSize_String4;
- case Generic_Source_StreamSize_String5 : return Audio_Source_StreamSize_String5;
- case Generic_Source_StreamSize_Proportion : return Audio_Source_StreamSize_Proportion;
- case Generic_Source_StreamSize_Encoded : return Audio_Source_StreamSize_Encoded;
- case Generic_Source_StreamSize_Encoded_String : return Audio_Source_StreamSize_Encoded_String;
- case Generic_Source_StreamSize_Encoded_String1 : return Audio_Source_StreamSize_Encoded_String1;
- case Generic_Source_StreamSize_Encoded_String2 : return Audio_Source_StreamSize_Encoded_String2;
- case Generic_Source_StreamSize_Encoded_String3 : return Audio_Source_StreamSize_Encoded_String3;
- case Generic_Source_StreamSize_Encoded_String4 : return Audio_Source_StreamSize_Encoded_String4;
- case Generic_Source_StreamSize_Encoded_String5 : return Audio_Source_StreamSize_Encoded_String5;
- case Generic_Source_StreamSize_Encoded_Proportion : return Audio_Source_StreamSize_Encoded_Proportion;
- case Generic_Language : return Audio_Language;
- default: return (size_t)-1;
- }
- case Stream_Text :
- switch (StreamPos)
- {
- case Generic_Format : return Text_Format;
- case Generic_Format_Info : return Text_Format_Info;
- case Generic_Format_Url : return Text_Format_Url;
- case Generic_Format_Commercial : return Text_Format_Commercial;
- case Generic_Format_Commercial_IfAny : return Text_Format_Commercial_IfAny;
- case Generic_Format_Version : return Text_Format_Version;
- case Generic_Format_Profile : return Text_Format_Profile;
- case Generic_Format_Settings : return Text_Format_Settings;
- case Generic_InternetMediaType : return Text_InternetMediaType;
- case Generic_CodecID : return Text_CodecID;
- case Generic_CodecID_Info : return Text_CodecID_Info;
- case Generic_CodecID_Hint : return Text_CodecID_Hint;
- case Generic_CodecID_Url : return Text_CodecID_Url;
- case Generic_CodecID_Description : return Text_CodecID_Description;
- case Generic_Codec : return Text_Codec;
- case Generic_Codec_String : return Text_Codec_String;
- case Generic_Codec_Info : return Text_Codec_Info;
- case Generic_Codec_Url : return Text_Codec_Url;
- case Generic_Codec_CC : return Text_Codec_CC;
- case Generic_Duration : return Text_Duration;
- case Generic_Duration_String : return Text_Duration_String;
- case Generic_Duration_String1 : return Text_Duration_String1;
- case Generic_Duration_String2 : return Text_Duration_String2;
- case Generic_Duration_String3 : return Text_Duration_String3;
- case Generic_Source_Duration : return Text_Source_Duration;
- case Generic_Source_Duration_String : return Text_Source_Duration_String;
- case Generic_Source_Duration_String1 : return Text_Source_Duration_String1;
- case Generic_Source_Duration_String2 : return Text_Source_Duration_String2;
- case Generic_Source_Duration_String3 : return Text_Source_Duration_String3;
- case Generic_BitRate_Mode : return Text_BitRate_Mode;
- case Generic_BitRate_Mode_String : return Text_BitRate_Mode_String;
- case Generic_BitRate : return Text_BitRate;
- case Generic_BitRate_String : return Text_BitRate_String;
- case Generic_BitRate_Minimum : return Text_BitRate_Minimum;
- case Generic_BitRate_Minimum_String : return Text_BitRate_Minimum_String;
- case Generic_BitRate_Nominal : return Text_BitRate_Nominal;
- case Generic_BitRate_Nominal_String : return Text_BitRate_Nominal_String;
- case Generic_BitRate_Maximum : return Text_BitRate_Maximum;
- case Generic_BitRate_Maximum_String : return Text_BitRate_Maximum_String;
- case Generic_BitRate_Encoded : return Text_BitRate_Encoded;
- case Generic_BitRate_Encoded_String : return Text_BitRate_Encoded_String;
- case Generic_FrameCount : return Text_FrameCount;
- case Generic_Source_FrameCount : return Text_Source_FrameCount;
- case Generic_ColorSpace : return Text_ColorSpace;
- case Generic_ChromaSubsampling : return Text_ChromaSubsampling;
- case Generic_Resolution : return Text_Resolution;
- case Generic_Resolution_String : return Text_Resolution_String;
- case Generic_BitDepth : return Text_BitDepth;
- case Generic_BitDepth_String : return Text_BitDepth_String;
- case Generic_Compression_Mode : return Text_Compression_Mode;
- case Generic_Compression_Mode_String : return Text_Compression_Mode_String;
- case Generic_Compression_Ratio : return Text_Compression_Ratio;
- case Generic_Delay : return Text_Delay;
- case Generic_Delay_String : return Text_Delay_String;
- case Generic_Delay_String1 : return Text_Delay_String1;
- case Generic_Delay_String2 : return Text_Delay_String2;
- case Generic_Delay_String3 : return Text_Delay_String3;
- case Generic_Delay_String4 : return Text_Delay_String4;
- case Generic_Delay_Settings : return Text_Delay_Settings;
- case Generic_Delay_DropFrame : return Text_Delay_DropFrame;
- case Generic_Delay_Source : return Text_Delay_Source;
- case Generic_Delay_Source_String : return Text_Delay_Source_String;
- case Generic_Delay_Original : return Text_Delay_Original;
- case Generic_Delay_Original_String : return Text_Delay_Original_String;
- case Generic_Delay_Original_String1 : return Text_Delay_Original_String1;
- case Generic_Delay_Original_String2 : return Text_Delay_Original_String2;
- case Generic_Delay_Original_String3 : return Text_Delay_Original_String3;
- case Generic_Delay_Original_String4 : return Text_Delay_Original_String4;
- case Generic_Delay_Original_Settings : return Text_Delay_Original_Settings;
- case Generic_Delay_Original_DropFrame : return Text_Delay_Original_DropFrame;
- case Generic_Delay_Original_Source : return Text_Delay_Original_Source;
- case Generic_Video_Delay : return Text_Video_Delay;
- case Generic_Video_Delay_String : return Text_Video_Delay_String;
- case Generic_Video_Delay_String1 : return Text_Video_Delay_String1;
- case Generic_Video_Delay_String2 : return Text_Video_Delay_String2;
- case Generic_Video_Delay_String3 : return Text_Video_Delay_String3;
- case Generic_Video_Delay_String4 : return Text_Video_Delay_String4;
- case Generic_StreamSize : return Text_StreamSize;
- case Generic_StreamSize_String : return Text_StreamSize_String;
- case Generic_StreamSize_String1 : return Text_StreamSize_String1;
- case Generic_StreamSize_String2 : return Text_StreamSize_String2;
- case Generic_StreamSize_String3 : return Text_StreamSize_String3;
- case Generic_StreamSize_String4 : return Text_StreamSize_String4;
- case Generic_StreamSize_String5 : return Text_StreamSize_String5;
- case Generic_StreamSize_Proportion : return Text_StreamSize_Proportion;
- case Generic_StreamSize_Encoded : return Text_StreamSize_Encoded;
- case Generic_StreamSize_Encoded_String : return Text_StreamSize_Encoded_String;
- case Generic_StreamSize_Encoded_String1 : return Text_StreamSize_Encoded_String1;
- case Generic_StreamSize_Encoded_String2 : return Text_StreamSize_Encoded_String2;
- case Generic_StreamSize_Encoded_String3 : return Text_StreamSize_Encoded_String3;
- case Generic_StreamSize_Encoded_String4 : return Text_StreamSize_Encoded_String4;
- case Generic_StreamSize_Encoded_String5 : return Text_StreamSize_Encoded_String5;
- case Generic_StreamSize_Encoded_Proportion : return Text_StreamSize_Encoded_Proportion;
- case Generic_Source_StreamSize : return Text_Source_StreamSize;
- case Generic_Source_StreamSize_String : return Text_Source_StreamSize_String;
- case Generic_Source_StreamSize_String1 : return Text_Source_StreamSize_String1;
- case Generic_Source_StreamSize_String2 : return Text_Source_StreamSize_String2;
- case Generic_Source_StreamSize_String3 : return Text_Source_StreamSize_String3;
- case Generic_Source_StreamSize_String4 : return Text_Source_StreamSize_String4;
- case Generic_Source_StreamSize_String5 : return Text_Source_StreamSize_String5;
- case Generic_Source_StreamSize_Proportion : return Text_Source_StreamSize_Proportion;
- case Generic_Source_StreamSize_Encoded : return Text_Source_StreamSize_Encoded;
- case Generic_Source_StreamSize_Encoded_String : return Text_Source_StreamSize_Encoded_String;
- case Generic_Source_StreamSize_Encoded_String1 : return Text_Source_StreamSize_Encoded_String1;
- case Generic_Source_StreamSize_Encoded_String2 : return Text_Source_StreamSize_Encoded_String2;
- case Generic_Source_StreamSize_Encoded_String3 : return Text_Source_StreamSize_Encoded_String3;
- case Generic_Source_StreamSize_Encoded_String4 : return Text_Source_StreamSize_Encoded_String4;
- case Generic_Source_StreamSize_Encoded_String5 : return Text_Source_StreamSize_Encoded_String5;
- case Generic_Source_StreamSize_Encoded_Proportion : return Text_Source_StreamSize_Encoded_Proportion;
- case Generic_Language : return Text_Language;
- default: return (size_t)-1;
- }
- case Stream_Other :
- switch (StreamPos)
- {
- case Generic_Format : return Other_Format;
- case Generic_Format_Info : return Other_Format_Info;
- case Generic_Format_Url : return Other_Format_Url;
- case Generic_Format_Commercial : return Other_Format_Commercial;
- case Generic_Format_Commercial_IfAny : return Other_Format_Commercial_IfAny;
- case Generic_Format_Version : return Other_Format_Version;
- case Generic_Format_Profile : return Other_Format_Profile;
- case Generic_Format_Settings : return Other_Format_Settings;
- case Generic_CodecID : return Other_CodecID;
- case Generic_CodecID_Info : return Other_CodecID_Info;
- case Generic_CodecID_Hint : return Other_CodecID_Hint;
- case Generic_CodecID_Url : return Other_CodecID_Url;
- case Generic_CodecID_Description : return Other_CodecID_Description;
- case Generic_Duration : return Other_Duration;
- case Generic_Duration_String : return Other_Duration_String;
- case Generic_Duration_String1 : return Other_Duration_String1;
- case Generic_Duration_String2 : return Other_Duration_String2;
- case Generic_Duration_String3 : return Other_Duration_String3;
- case Generic_FrameCount : return Other_FrameCount;
- case Generic_Language : return Other_Language;
- default: return (size_t)-1;
- }
- case Stream_Image :
- switch (StreamPos)
- {
- case Generic_Format : return Image_Format;
- case Generic_Format_Info : return Image_Format_Info;
- case Generic_Format_Url : return Image_Format_Url;
- case Generic_Format_Commercial : return Image_Format_Commercial;
- case Generic_Format_Commercial_IfAny : return Image_Format_Commercial_IfAny;
- case Generic_Format_Version : return Image_Format_Version;
- case Generic_Format_Profile : return Image_Format_Profile;
- case Generic_InternetMediaType : return Image_InternetMediaType;
- case Generic_CodecID : return Image_CodecID;
- case Generic_CodecID_Info : return Image_CodecID_Info;
- case Generic_CodecID_Hint : return Image_CodecID_Hint;
- case Generic_CodecID_Url : return Image_CodecID_Url;
- case Generic_CodecID_Description : return Image_CodecID_Description;
- case Generic_Codec : return Image_Codec;
- case Generic_Codec_String : return Image_Codec_String;
- case Generic_Codec_Info : return Image_Codec_Info;
- case Generic_Codec_Url : return Image_Codec_Url;
- case Generic_ColorSpace : return Image_ColorSpace;
- case Generic_ChromaSubsampling : return Image_ChromaSubsampling;
- case Generic_Resolution : return Image_Resolution;
- case Generic_Resolution_String : return Image_Resolution_String;
- case Generic_BitDepth : return Image_BitDepth;
- case Generic_BitDepth_String : return Image_BitDepth_String;
- case Generic_Compression_Mode : return Image_Compression_Mode;
- case Generic_Compression_Mode_String : return Image_Compression_Mode_String;
- case Generic_Compression_Ratio : return Image_Compression_Ratio;
- case Generic_StreamSize : return Image_StreamSize;
- case Generic_StreamSize_String : return Image_StreamSize_String;
- case Generic_StreamSize_String1 : return Image_StreamSize_String1;
- case Generic_StreamSize_String2 : return Image_StreamSize_String2;
- case Generic_StreamSize_String3 : return Image_StreamSize_String3;
- case Generic_StreamSize_String4 : return Image_StreamSize_String4;
- case Generic_StreamSize_String5 : return Image_StreamSize_String5;
- case Generic_StreamSize_Proportion : return Image_StreamSize_Proportion;
- case Generic_Language : return Image_Language;
- default: return (size_t)-1;
- }
- case Stream_Menu :
- switch (StreamPos)
- {
- case Generic_Format : return Menu_Format;
- case Generic_Format_Info : return Menu_Format_Info;
- case Generic_Format_Url : return Menu_Format_Url;
- case Generic_Format_Commercial : return Menu_Format_Commercial;
- case Generic_Format_Commercial_IfAny : return Menu_Format_Commercial_IfAny;
- case Generic_Format_Version : return Menu_Format_Version;
- case Generic_Format_Profile : return Menu_Format_Profile;
- case Generic_Format_Settings : return Menu_Format_Settings;
- case Generic_CodecID : return Menu_CodecID;
- case Generic_CodecID_Info : return Menu_CodecID_Info;
- case Generic_CodecID_Hint : return Menu_CodecID_Hint;
- case Generic_CodecID_Url : return Menu_CodecID_Url;
- case Generic_CodecID_Description : return Menu_CodecID_Description;
- case Generic_Codec : return Menu_Codec;
- case Generic_Codec_String : return Menu_Codec_String;
- case Generic_Codec_Info : return Menu_Codec_Info;
- case Generic_Codec_Url : return Menu_Codec_Url;
- case Generic_Duration : return Menu_Duration;
- case Generic_Duration_String : return Menu_Duration_String;
- case Generic_Duration_String1 : return Menu_Duration_String1;
- case Generic_Duration_String2 : return Menu_Duration_String2;
- case Generic_Duration_String3 : return Menu_Duration_String3;
- case Generic_Language : return Menu_Language;
- case Generic_ServiceName : return Menu_ServiceName;
- case Generic_ServiceProvider : return Menu_ServiceProvider;
- default: return (size_t)-1;
- }
- default: return (size_t)-1;
- }
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Streams_Finish.cpp b/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Streams_Finish.cpp
deleted file mode 100644
index d260cbe34..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Analyze_Streams_Finish.cpp
+++ /dev/null
@@ -1,858 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Init and Finalize part
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Utils.h"
-#include "ZenLib/File.h"
-#include "ZenLib/FileName.h"
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#if MEDIAINFO_IBI
- #include "MediaInfo/Multiple/File_Ibi.h"
-#endif //MEDIAINFO_IBI
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_Global()
-{
- if (IsSub)
- return;
-
- #if MEDIAINFO_ADVANCED
- //Default frame rate
- if (Count_Get(Stream_Video)==1 && Retrieve(Stream_Video, 0, Video_FrameRate).empty() && Config->File_DefaultFrameRate_Get())
- Fill(Stream_Video, 0, Video_FrameRate, Config->File_DefaultFrameRate_Get());
- #endif //MEDIAINFO_ADVANCED
-
- //Video Frame count
- if (Count_Get(Stream_Video)==1 && Count_Get(Stream_Audio)==0 && Retrieve(Stream_Video, 0, Video_FrameCount).empty())
- {
- if (Frame_Count_NotParsedIncluded!=(int64u)-1 && File_Offset+Buffer_Size==File_Size)
- Fill(Stream_Video, 0, Video_FrameCount, Frame_Count_NotParsedIncluded);
- else if (Config->File_Names.size()>1)
- Fill(Stream_Video, 0, Video_FrameCount, Config->File_Names.size());
- #if MEDIAINFO_IBI
- else
- {
- //External IBI
- std::string IbiFile=Config->Ibi_Get();
- if (!IbiFile.empty())
- {
- if (IbiStream)
- IbiStream->Infos.clear(); //TODO: support IBI data from different inputs
- else
- IbiStream=new ibi::stream;
-
- File_Ibi MI;
- Open_Buffer_Init(&MI, IbiFile.size());
- MI.Ibi=new ibi;
- MI.Open_Buffer_Continue((const int8u*)IbiFile.c_str(), IbiFile.size());
- if (!MI.Ibi->Streams.empty())
- (*IbiStream)=(*MI.Ibi->Streams.begin()->second);
- }
-
- if (IbiStream && !IbiStream->Infos.empty() && IbiStream->Infos[IbiStream->Infos.size()-1].IsContinuous && IbiStream->Infos[IbiStream->Infos.size()-1].FrameNumber!=(int64u)-1)
- Fill(Stream_Video, 0, Video_FrameCount, IbiStream->Infos[IbiStream->Infos.size()-1].FrameNumber);
- }
- #endif //MEDIAINFO_IBI
- }
-
- Streams_Finish_StreamOnly();
- Streams_Finish_StreamOnly();
- Streams_Finish_InterStreams();
- Streams_Finish_StreamOnly();
- Streams_Finish_InterStreams();
- Streams_Finish_StreamOnly();
- Streams_Finish_InterStreams();
- Streams_Finish_StreamOnly();
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::TestContinuousFileNames(size_t CountOfFiles, Ztring FileExtension)
-{
- if (IsSub || !Config->File_TestContinuousFileNames_Get())
- return;
-
- size_t Pos=Config->File_Names.size();
- if (!Pos)
- return;
-
- //Trying to detect continuous file names (e.g. video stream as an image or HLS)
- bool AlreadyPresent=Config->File_Names.size()==1?true:false;
- FileName FileToTest(Config->File_Names.Read(Config->File_Names.size()-1));
- Ztring FileToTest_Name=FileToTest.Name_Get();
- Ztring FileToTest_Name_After=FileToTest_Name;
- size_t FileNameToTest_End=FileToTest_Name.size();
- while (FileNameToTest_End && !(FileToTest_Name[FileNameToTest_End-1]>=__T('0') && FileToTest_Name[FileNameToTest_End-1]<=__T('9')))
- FileNameToTest_End--;
- size_t FileNameToTest_Pos=FileNameToTest_End;
- while (FileNameToTest_Pos && FileToTest_Name[FileNameToTest_Pos-1]>=__T('0') && FileToTest_Name[FileNameToTest_Pos-1]<=__T('9'))
- FileNameToTest_Pos--;
- if (FileNameToTest_Pos!=FileToTest_Name.size() && FileNameToTest_Pos!=FileNameToTest_End)
- {
- size_t Numbers_Size=FileNameToTest_End-FileNameToTest_Pos;
- int64u Pos=Ztring(FileToTest_Name.substr(FileNameToTest_Pos)).To_int64u();
- FileToTest_Name.resize(FileNameToTest_Pos);
- FileToTest_Name_After.erase(0, FileToTest_Name.size()+Numbers_Size);
-
- /*
- for (;;)
- {
- Pos++;
- Ztring Pos_Ztring; Pos_Ztring.From_Number(Pos);
- if (Numbers_Size>Pos_Ztring.size())
- Pos_Ztring.insert(0, Numbers_Size-Pos_Ztring.size(), __T('0'));
- Ztring Next=FileToTest.Path_Get()+PathSeparator+FileToTest_Name+Pos_Ztring+__T('.')+(FileExtension.empty()?FileToTest.Extension_Get():FileExtension);
- if (!File::Exists(Next))
- break;
- Config->File_Names.push_back(Next);
- }
- */
-
- //Detecting with a smarter algo (but missing frames are not detected)
- Ztring FileToTest_Name_Begin=FileToTest.Path_Get()+PathSeparator+FileToTest_Name;
- Ztring FileToTest_Name_End=FileToTest_Name_After+__T('.')+(FileExtension.empty()?FileToTest.Extension_Get():FileExtension);
- size_t Pos_Base = (size_t)Pos;
- size_t Pos_Add_Max = 1;
- #if MEDIAINFO_ADVANCED
- bool File_IgnoreSequenceFileSize=Config->File_IgnoreSequenceFilesCount_Get();
- #endif //MEDIAINFO_ADVANCED
- for (;;)
- {
- Ztring Pos_Ztring; Pos_Ztring.From_Number(Pos_Base+Pos_Add_Max);
- if (Numbers_Size>Pos_Ztring.size())
- Pos_Ztring.insert(0, Numbers_Size-Pos_Ztring.size(), __T('0'));
- Ztring Next=FileToTest_Name_Begin+Pos_Ztring+FileToTest_Name_End;
- if (!File::Exists(Next))
- break;
- Pos_Add_Max<<=1;
- #if MEDIAINFO_ADVANCED
- if (File_IgnoreSequenceFileSize && Pos_Add_Max>=CountOfFiles)
- break;
- #endif //MEDIAINFO_ADVANCED
- }
- size_t Pos_Add_Min = Pos_Add_Max >> 1;
- while (Pos_Add_Min+1<Pos_Add_Max)
- {
- size_t Pos_Add_Middle = Pos_Add_Min + ((Pos_Add_Max - Pos_Add_Min) >> 1);
- Ztring Pos_Ztring; Pos_Ztring.From_Number(Pos_Base+Pos_Add_Middle);
- if (Numbers_Size>Pos_Ztring.size())
- Pos_Ztring.insert(0, Numbers_Size-Pos_Ztring.size(), __T('0'));
- Ztring Next=FileToTest_Name_Begin+Pos_Ztring+FileToTest_Name_End;
- if (File::Exists(Next))
- Pos_Add_Min=Pos_Add_Middle;
- else
- Pos_Add_Max=Pos_Add_Middle;
- }
-
- size_t Pos_Max = Pos_Base + Pos_Add_Max;
- Config->File_Names.reserve(Pos_Add_Max);
- for (Pos=Pos_Base+1; Pos<Pos_Max; ++Pos)
- {
- Ztring Pos_Ztring; Pos_Ztring.From_Number(Pos);
- if (Numbers_Size>Pos_Ztring.size())
- Pos_Ztring.insert(0, Numbers_Size-Pos_Ztring.size(), __T('0'));
- Config->File_Names.push_back(FileToTest_Name_Begin+Pos_Ztring+FileToTest_Name_End);
- }
-
- if (!Config->File_IsReferenced_Get() && Config->File_Names.size()<CountOfFiles && AlreadyPresent)
- Config->File_Names.resize(1); //Removing files, wrong detection
- }
-
- if (Config->File_Names.size()==Pos)
- return;
-
- #if MEDIAINFO_ADVANCED
- if (!Config->File_IgnoreSequenceFileSize_Get() || Config->File_Names.size()<=1)
- #endif //MEDIAINFO_ADVANCED
- {
- for (; Pos<Config->File_Names.size(); Pos++)
- {
- int64u Size=File::Size_Get(Config->File_Names[Pos]);
- Config->File_Sizes.push_back(Size);
- Config->File_Size+=Size;
- }
- }
- #if MEDIAINFO_ADVANCED
- else
- {
- Config->File_Size=(int64u)-1;
- File_Size=(int64u)-1;
- Clear(Stream_General, 0, General_FileSize);
- }
- #endif //MEDIAINFO_ADVANCED
-
- File_Size=Config->File_Size;
- Element[0].Next=File_Size;
- #if MEDIAINFO_ADVANCED
- if (!Config->File_IgnoreSequenceFileSize_Get() || Config->File_Names.size()<=1)
- #endif //MEDIAINFO_ADVANCED
- Fill (Stream_General, 0, General_FileSize, File_Size, 10, true);
- #if MEDIAINFO_ADVANCED
- if (!Config->File_IgnoreSequenceFilesCount_Get())
- #endif //MEDIAINFO_ADVANCED
- {
- Fill (Stream_General, 0, General_CompleteName_Last, Config->File_Names[Config->File_Names.size()-1], true);
- Fill (Stream_General, 0, General_FolderName_Last, FileName::Path_Get(Config->File_Names[Config->File_Names.size()-1]), true);
- Fill (Stream_General, 0, General_FileName_Last, FileName::Name_Get(Config->File_Names[Config->File_Names.size()-1]), true);
- Fill (Stream_General, 0, General_FileExtension_Last, FileName::Extension_Get(Config->File_Names[Config->File_Names.size()-1]), true);
- }
-
- #if MEDIAINFO_ADVANCED
- if (Config->File_Source_List_Get())
- {
- Ztring SourcePath=FileName::Path_Get(Retrieve(Stream_General, 0, General_CompleteName));
- size_t SourcePath_Size=SourcePath.size()+1; //Path size + path separator size
- for (size_t Pos=0; Pos<Config->File_Names.size(); Pos++)
- {
- Ztring Temp=Config->File_Names[Pos];
- Temp.erase(0, SourcePath_Size);
- Fill(Stream_General, 0, "Source_List", Temp);
- }
- (*Stream_More)[Stream_General][0](Ztring().From_Local("Source_List"), Info_Options)=__T("N NT");
- }
- #endif //MEDIAINFO_ADVANCED
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_StreamOnly()
-{
- //Generic
- for (size_t StreamKind=Stream_General; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- Streams_Finish_StreamOnly((stream_t)StreamKind, StreamPos);
-
- //For each kind of (*Stream)
- for (size_t Pos=0; Pos<Count_Get(Stream_General); Pos++) Streams_Finish_StreamOnly_General(Pos);
- for (size_t Pos=0; Pos<Count_Get(Stream_Video); Pos++) Streams_Finish_StreamOnly_Video(Pos);
- for (size_t Pos=0; Pos<Count_Get(Stream_Audio); Pos++) Streams_Finish_StreamOnly_Audio(Pos);
- for (size_t Pos=0; Pos<Count_Get(Stream_Text); Pos++) Streams_Finish_StreamOnly_Text(Pos);
- for (size_t Pos=0; Pos<Count_Get(Stream_Other); Pos++) Streams_Finish_StreamOnly_Other(Pos);
- for (size_t Pos=0; Pos<Count_Get(Stream_Image); Pos++) Streams_Finish_StreamOnly_Image(Pos);
- for (size_t Pos=0; Pos<Count_Get(Stream_Menu); Pos++) Streams_Finish_StreamOnly_Menu(Pos);
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_StreamOnly(stream_t StreamKind, size_t Pos)
-{
- //BitRate from Duration and StreamSize
- if (StreamKind!=Stream_General && StreamKind!=Stream_Other && StreamKind!=Stream_Menu && Retrieve(StreamKind, Pos, "BitRate").empty() && !Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_StreamSize)).empty() && !Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_Duration)).empty())
- {
- float64 Duration=0;
- if (StreamKind==Stream_Video && !Retrieve(Stream_Video, Pos, Video_FrameCount).empty() && !Retrieve(Stream_Video, Pos, Video_FrameRate).empty())
- {
- int64u FrameCount=Retrieve(Stream_Video, Pos, Video_FrameCount).To_int64u();
- float64 FrameRate=Retrieve(Stream_Video, Pos, Video_FrameRate).To_float64();
- if (FrameCount && FrameRate)
- Duration=FrameCount*1000/FrameRate; //More precise (example: 1 frame at 29.97 fps)
- }
- if (Duration==0)
- Duration=Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_Duration)).To_float64();
- int64u StreamSize=Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_StreamSize)).To_int64u();
- if (Duration>0 && StreamSize>0)
- Fill(StreamKind, Pos, "BitRate", StreamSize*8*1000/Duration, 0);
- }
-
- //BitRate_Encoded from Duration and StreamSize_Encoded
- if (StreamKind!=Stream_General && StreamKind!=Stream_Other && StreamKind!=Stream_Menu && Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_BitRate_Encoded)).empty() && !Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_StreamSize_Encoded)).empty() && !Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_Duration)).empty())
- {
- float64 Duration=0;
- if (StreamKind==Stream_Video && !Retrieve(Stream_Video, Pos, Video_FrameCount).empty() && !Retrieve(Stream_Video, Pos, Video_FrameRate).empty())
- {
- int64u FrameCount=Retrieve(Stream_Video, Pos, Video_FrameCount).To_int64u();
- float64 FrameRate=Retrieve(Stream_Video, Pos, Video_FrameRate).To_float64();
- if (FrameCount && FrameRate)
- Duration=FrameCount*1000/FrameRate; //More precise (example: 1 frame at 29.97 fps)
- }
- if (Duration==0)
- Duration=Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_Duration)).To_float64();
- int64u StreamSize_Encoded=Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_StreamSize_Encoded)).To_int64u();
- if (Duration>0 && StreamSize_Encoded>0)
- Fill(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_BitRate_Encoded), StreamSize_Encoded*8*1000/Duration, 0);
- }
-
- //Duration from Bitrate and StreamSize
- if (StreamKind!=Stream_Other && Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_Duration)).empty() && !Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_StreamSize)).empty() && !Retrieve(StreamKind, Pos, "BitRate").empty() && Count_Get(Stream_Video)+Count_Get(Stream_Audio)>1) //If only one stream, duration will be copied later, useful for exact bitrate calculation
- {
- int64u BitRate=Retrieve(StreamKind, Pos, "BitRate").To_int64u();
- int64u StreamSize=Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_StreamSize)).To_int64u();
- if (BitRate>0 && StreamSize>0)
- Fill(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_Duration), StreamSize*8*1000/BitRate);
- }
-
- //StreamSize from BitRate and Duration
- if (StreamKind!=Stream_Other && Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_StreamSize)).empty() && !Retrieve(StreamKind, Pos, "BitRate").empty() && !Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_Duration)).empty() && Retrieve(StreamKind, Pos, "BitRate").find(__T(" / "))==std::string::npos) //If not done the first time or by other routine
- {
- int64u BitRate=Retrieve(StreamKind, Pos, "BitRate").To_int64u();
- int64u Duration=Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_Duration)).To_int64u();
- if (BitRate>0 && Duration>0)
- Fill(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_StreamSize), BitRate*Duration/8/1000);
- }
-
- //Bit rate and maximum bit rate
- if (!Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_BitRate)).empty() && Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_BitRate))==Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_BitRate_Maximum)))
- {
- Clear(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_BitRate_Maximum));
- if (Retrieve(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_BitRate_Mode)).empty())
- Fill(StreamKind, Pos, Fill_Parameter(StreamKind, Generic_BitRate_Mode), "CBR");
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_StreamOnly_General(size_t UNUSED(StreamPos))
-{
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_StreamOnly_Video(size_t Pos)
-{
- //Frame count
- if (Retrieve(Stream_Video, Pos, Video_FrameCount).empty() && Frame_Count_NotParsedIncluded!=(int64u)-1 && File_Offset+Buffer_Size==File_Size)
- {
- if (Count_Get(Stream_Video)==1 && Count_Get(Stream_Audio)==0)
- Fill(Stream_Video, 0, Video_FrameCount, Frame_Count_NotParsedIncluded);
- }
-
- //FrameCount from Duration and FrameRate
- if (Retrieve(Stream_Video, Pos, Video_FrameCount).empty())
- {
- int64s Duration=Retrieve(Stream_Video, Pos, Video_Duration).To_int64s();
- if (Duration==0)
- Duration=Retrieve(Stream_General, 0, General_Duration).To_int64s();
- float64 FrameRate=Retrieve(Stream_Video, Pos, Video_FrameRate).To_float64();
- if (Duration && FrameRate)
- Fill(Stream_Video, Pos, Video_FrameCount, Duration*FrameRate/1000, 0);
- }
-
- //Duration from FrameCount and FrameRate
- if (Retrieve(Stream_Video, Pos, Video_Duration).empty())
- {
- int64u FrameCount=Retrieve(Stream_Video, Pos, Video_FrameCount).To_int64u();
- float64 FrameRate=Retrieve(Stream_Video, Pos, "FrameRate").To_float64();
- if (FrameCount && FrameRate)
- Fill(Stream_Video, Pos, Video_Duration, FrameCount/FrameRate*1000, 0);
- }
-
- //FrameRate from FrameCount and Duration
- if (Retrieve(Stream_Video, Pos, Video_FrameRate).empty())
- {
- int64u FrameCount=Retrieve(Stream_Video, Pos, Video_FrameCount).To_int64u();
- float64 Duration=Retrieve(Stream_Video, Pos, Video_Duration).To_float64()/1000;
- if (FrameCount && Duration)
- Fill(Stream_Video, Pos, Video_FrameRate, FrameCount/Duration, 3);
- }
-
- //Pixel Aspect Ratio forced to 1.000 if none
- if (Retrieve(Stream_Video, Pos, Video_PixelAspectRatio).empty())
- Fill(Stream_Video, Pos, Video_PixelAspectRatio, 1.000);
-
- //Standard
- if (Retrieve(Stream_Video, Pos, Video_Standard).empty() && (Retrieve(Stream_Video, Pos, Video_Width)==__T("720") || Retrieve(Stream_Video, Pos, Video_Width)==__T("704")))
- {
- if (Retrieve(Stream_Video, Pos, Video_Height)==__T("576"))
- Fill(Stream_Video, Pos, Video_Standard, "PAL");
- else if (Retrieve(Stream_Video, Pos, Video_Height)==__T("486") || Retrieve(Stream_Video, Pos, Video_Height)==__T("480"))
- Fill(Stream_Video, Pos, Video_Standard, "NTSC");
- }
- if (Retrieve(Stream_Video, Pos, Video_Standard).empty() && Retrieve(Stream_Video, Pos, Video_Width)==__T("352"))
- {
- if (Retrieve(Stream_Video, Pos, Video_Height)==__T("576") || Retrieve(Stream_Video, Pos, Video_Height)==__T("288"))
- Fill(Stream_Video, Pos, Video_Standard, "PAL");
- else if (Retrieve(Stream_Video, Pos, Video_Height)==__T("486") || Retrieve(Stream_Video, Pos, Video_Height)==__T("480") || Retrieve(Stream_Video, Pos, Video_Height)==__T("243") || Retrieve(Stream_Video, Pos, Video_Height)==__T("240"))
- Fill(Stream_Video, Pos, Video_Standard, "NTSC");
- }
-
- //Known ScanTypes
- if (Retrieve(Stream_Video, Pos, Video_ScanType).empty()
- && (Retrieve(Stream_Video, Pos, Video_Format)==__T("RED")
- || Retrieve(Stream_Video, Pos, Video_Format)==__T("CineForm")
- || Retrieve(Stream_Video, Pos, Video_Format)==__T("DPX")
- || Retrieve(Stream_Video, Pos, Video_Format)==__T("EXR")))
- Fill(Stream_Video, Pos, Video_ScanType, "Progressive");
-
- //Commercial name
- #if defined(MEDIAINFO_VC3_YES)
- if (Retrieve(Stream_Video, Pos, Video_Format_Commercial_IfAny).empty() && Retrieve(Stream_Video, Pos, Video_Format)==__T("VC-3"))
- {
- //http://www.avid.com/static/resources/US/documents/dnxhd.pdf
- int64u Height=Retrieve(Stream_Video, Pos, Video_Height).To_int64u();
- int64u BitRate=float64_int64s(Retrieve(Stream_Video, Pos, Video_BitRate).To_float64()/1000000);
- int64u FrameRate=float64_int64s(Retrieve(Stream_Video, Pos, Video_FrameRate).To_float64());
- int64u BitRate_Final=0;
- if (Height>=900 && Height<=1300)
- {
- if (FrameRate==60)
- {
- if (BitRate>=420 && BitRate<440) //440
- BitRate_Final=440;
- if (BitRate>=271 && BitRate<311) //291
- BitRate_Final=290;
- if (BitRate>=80 && BitRate<100) //90
- BitRate_Final=90;
- }
- if (FrameRate==50)
- {
- if (BitRate>=347 && BitRate<387) //367
- BitRate_Final=365;
- if (BitRate>=222 && BitRate<262) //242
- BitRate_Final=240;
- if (BitRate>=65 && BitRate<85) //75
- BitRate_Final=75;
- }
- if (FrameRate==30)
- {
- if (BitRate>=420 && BitRate<440) //440
- BitRate_Final=440;
- if (BitRate>=200 && BitRate<240) //220
- BitRate_Final=220;
- if (BitRate>=130 && BitRate<160) //145
- BitRate_Final=145;
- if (BitRate>=90 && BitRate<110) //100
- BitRate_Final=100;
- if (BitRate>=40 && BitRate<50) //45
- BitRate_Final=45;
- }
- if (FrameRate==25)
- {
- if (BitRate>=347 && BitRate<387) //367
- BitRate_Final=365;
- if (BitRate>=164 && BitRate<204) //184
- BitRate_Final=185;
- if (BitRate>=111 && BitRate<131) //121
- BitRate_Final=120;
- if (BitRate>=74 && BitRate<94) //84
- BitRate_Final=85;
- if (BitRate>=31 && BitRate<41) //36
- BitRate_Final=36;
- }
- if (FrameRate==24)
- {
- if (BitRate>=332 && BitRate<372) //352
- BitRate_Final=350;
- if (BitRate>=156 && BitRate<196) //176
- BitRate_Final=175;
- if (BitRate>=105 && BitRate<125) //116
- BitRate_Final=116;
- if (BitRate>=70 && BitRate<90) //80
- BitRate_Final=80;
- if (BitRate>=31 && BitRate<41) //36
- BitRate_Final=36;
- }
- }
- if (Height>=600 && Height<=800)
- {
- if (FrameRate==60)
- {
- if (BitRate>=200 && BitRate<240) //220
- BitRate_Final=220;
- if (BitRate>=130 && BitRate<160) //145
- BitRate_Final=145;
- if (BitRate>=90 && BitRate<110) //110
- BitRate_Final=100;
- }
- if (FrameRate==50)
- {
- if (BitRate>=155 && BitRate<195) //175
- BitRate_Final=175;
- if (BitRate>=105 && BitRate<125) //115
- BitRate_Final=115;
- if (BitRate>=75 && BitRate<95) //85
- BitRate_Final=85;
- }
- if (FrameRate==30)
- {
- if (BitRate>=100 && BitRate<120) //110
- BitRate_Final=110;
- if (BitRate>=62 && BitRate<82) //72
- BitRate_Final=75;
- if (BitRate>=44 && BitRate<56) //51
- BitRate_Final=50;
- }
- if (FrameRate==25)
- {
- if (BitRate>=82 && BitRate<102) //92
- BitRate_Final=90;
- if (BitRate>=55 && BitRate<65) //60
- BitRate_Final=60;
- if (BitRate>=38 && BitRate<48) //43
- BitRate_Final=45;
- }
- if (FrameRate==24)
- {
- if (BitRate>=78 && BitRate<98) //88
- BitRate_Final=90;
- if (BitRate>=53 && BitRate<63) //58
- BitRate_Final=60;
- if (BitRate>=36 && BitRate<46) //41
- BitRate_Final=41;
- }
- }
-
- if (BitRate_Final)
- {
- int64u BitDepth=Retrieve(Stream_Video, Pos, Video_BitDepth).To_int64u();
- if (BitDepth==8 || BitDepth==10)
- Fill(Stream_Video, Pos, Video_Format_Commercial_IfAny, __T("DNxHD ")+Ztring::ToZtring(BitRate_Final)+(BitDepth==10?__T("x"):__T(""))); //"x"=10-bit
- }
- }
- #endif //defined(MEDIAINFO_VC3_YES)
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_StreamOnly_Audio(size_t Pos)
-{
- //SamplingCount
- if (Retrieve(Stream_Audio, Pos, Audio_SamplingCount).empty())
- {
- int64s Duration=Retrieve(Stream_Audio, Pos, Audio_Duration).To_int64s();
- if (Duration==0)
- Duration=Retrieve(Stream_General, 0, General_Duration).To_int64s();
- float SamplingRate=Retrieve(Stream_Audio, Pos, Audio_SamplingRate).To_float32();
- if (Duration && SamplingRate)
- Fill(Stream_Audio, Pos, Audio_SamplingCount, ((float64)Duration)/1000*SamplingRate, 0);
- }
-
- //Frame count
- if (Retrieve(Stream_Audio, Pos, Audio_FrameCount).empty() && Frame_Count_NotParsedIncluded!=(int64u)-1 && File_Offset+Buffer_Size==File_Size)
- {
- if (Count_Get(Stream_Video)==0 && Count_Get(Stream_Audio)==1)
- Fill(Stream_Audio, 0, Audio_FrameCount, Frame_Count_NotParsedIncluded);
- }
-
- //Duration
- if (Retrieve(Stream_Audio, Pos, Audio_Duration).empty() && Retrieve(Stream_Audio, Pos, Audio_SamplingRate).To_int64u()!=0)
- {
- int64u Duration=Retrieve(Stream_Audio, Pos, Audio_SamplingCount).To_int64u()*1000/Retrieve(Stream_Audio, Pos, Audio_SamplingRate).To_int64u();
- if (Duration)
- Fill(Stream_Audio, Pos, Audio_Duration, Duration);
- }
-
- //Stream size
- if (Retrieve(Stream_Audio, Pos, Audio_StreamSize).empty() && !Retrieve(Stream_Audio, Pos, Audio_BitRate).empty() && !Retrieve(Stream_Audio, Pos, Audio_Duration).empty() && Retrieve(Stream_Audio, Pos, Audio_BitRate_Mode)==__T("CBR"))
- {
- int64u Duration=Retrieve(Stream_Audio, Pos, Audio_Duration).To_int64u();
- int64u BitRate=Retrieve(Stream_Audio, Pos, Audio_BitRate).To_int64u();
- if (Duration && BitRate)
- Fill(Stream_Audio, Pos, Audio_StreamSize, Duration*BitRate/8/1000);
- }
-
- //CBR/VBR
- if (Retrieve(Stream_Audio, Pos, Audio_BitRate_Mode).empty() && !Retrieve(Stream_Audio, Pos, Audio_Codec).empty())
- {
- Ztring Z1=MediaInfoLib::Config.Codec_Get(Retrieve(Stream_Audio, Pos, Audio_Codec), InfoCodec_BitRate_Mode, Stream_Audio);
- if (!Z1.empty())
- Fill(Stream_Audio, Pos, Audio_BitRate_Mode, Z1);
- }
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_StreamOnly_Text(size_t UNUSED(Pos))
-{
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_StreamOnly_Other(size_t UNUSED(StreamPos))
-{
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_StreamOnly_Image(size_t UNUSED(StreamPos))
-{
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_StreamOnly_Menu(size_t UNUSED(StreamPos))
-{
-}
-
-//---------------------------------------------------------------------------
-void File__Analyze::Streams_Finish_InterStreams()
-{
- //Duration if General not filled
- if (Retrieve(Stream_General, 0, General_Duration).empty())
- {
- int64u Duration=0;
- //For all streams (Generic)
- for (size_t StreamKind=Stream_Video; StreamKind<Stream_Max; StreamKind++)
- for (size_t Pos=0; Pos<Count_Get((stream_t)StreamKind); Pos++)
- {
- if (!Retrieve((stream_t)StreamKind, Pos, Fill_Parameter((stream_t)StreamKind, Generic_Duration)).empty())
- {
- int64u Duration_Stream=Retrieve((stream_t)StreamKind, Pos, Fill_Parameter((stream_t)StreamKind, Generic_Duration)).To_int64u();
- if (Duration_Stream>Duration)
- Duration=Duration_Stream;
- }
- }
-
- //Filling
- if (Duration>0)
- Fill(Stream_General, 0, General_Duration, Duration);
- }
-
- //(*Stream) size if all stream sizes are OK
- if (Retrieve(Stream_General, 0, General_StreamSize).empty())
- {
- int64u StreamSize_Total=0;
- bool IsOK=true;
- //For all streams (Generic)
- for (size_t StreamKind=Stream_Video; StreamKind<Stream_Max; StreamKind++)
- {
- if (StreamKind!=Stream_Other && StreamKind!=Stream_Menu) //They have no big size, we never calculate them
- for (size_t Pos=0; Pos<Count_Get((stream_t)StreamKind); Pos++)
- {
- if (!Retrieve((stream_t)StreamKind, Pos, Fill_Parameter((stream_t)StreamKind, Generic_StreamSize_Encoded)).empty())
- StreamSize_Total+=Retrieve((stream_t)StreamKind, Pos, Fill_Parameter((stream_t)StreamKind, Generic_StreamSize_Encoded)).To_int64u();
- else if (!Retrieve((stream_t)StreamKind, Pos, Fill_Parameter((stream_t)StreamKind, Generic_StreamSize)).empty())
- StreamSize_Total+=Retrieve((stream_t)StreamKind, Pos, Fill_Parameter((stream_t)StreamKind, Generic_StreamSize)).To_int64u();
- else
- IsOK=false; //StreamSize not available for 1 stream, we can't calculate
- }
- }
-
- //Filling
- if (IsOK && StreamSize_Total>0 && StreamSize_Total<File_Size)
- Fill(Stream_General, 0, General_StreamSize, File_Size-StreamSize_Total);
- }
-
- //OverallBitRate if we have one Audio stream with bitrate
- if (Retrieve(Stream_General, 0, General_Duration).empty() && Retrieve(Stream_General, 0, General_OverallBitRate).empty() && Count_Get(Stream_Video)==0 && Count_Get(Stream_Audio)==1 && Retrieve(Stream_Audio, 0, Audio_BitRate).To_int64u()!=0 && (Retrieve(Stream_General, 0, General_Format)==Retrieve(Stream_Audio, 0, Audio_Format) || !Retrieve(Stream_General, 0, General_HeaderSize).empty()))
- Fill(Stream_General, 0, General_OverallBitRate, Retrieve(Stream_Audio, 0, Audio_BitRate));
-
- //OverallBitRate if Duration
- if (Retrieve(Stream_General, 0, General_OverallBitRate).empty() && Retrieve(Stream_General, 0, General_Duration).To_int64u()!=0 && !Retrieve(Stream_General, 0, General_FileSize).empty())
- {
- float64 Duration=0;
- if (Count_Get(Stream_Video)==1 && Retrieve(Stream_General, 0, General_Duration)==Retrieve(Stream_Video, 0, General_Duration) && !Retrieve(Stream_Video, 0, Video_FrameCount).empty() && !Retrieve(Stream_Video, 0, Video_FrameRate).empty())
- {
- int64u FrameCount=Retrieve(Stream_Video, 0, Video_FrameCount).To_int64u();
- float64 FrameRate=Retrieve(Stream_Video, 0, Video_FrameRate).To_float64();
- if (FrameCount && FrameRate)
- Duration=FrameCount*1000/FrameRate; //More precise (example: 1 frame at 29.97 fps)
- }
- if (Duration==0)
- Duration=Retrieve(Stream_General, 0, General_Duration).To_float64();
- Fill(Stream_General, 0, General_OverallBitRate, Retrieve(Stream_General, 0, General_FileSize).To_int64u()*8*1000/Duration, 0);
- }
-
- //Duration if OverallBitRate
- if (Retrieve(Stream_General, 0, General_Duration).empty() && Retrieve(Stream_General, 0, General_OverallBitRate).To_int64u()!=0)
- Fill(Stream_General, 0, General_Duration, Retrieve(Stream_General, 0, General_FileSize).To_float64()*8*1000/Retrieve(Stream_General, 0, General_OverallBitRate).To_float64(), 0);
-
- //Video bitrate can be the nominal one if <4s (bitrate estimation is not enough precise
- if (Count_Get(Stream_Video)==1 && Retrieve(Stream_Video, 0, Video_BitRate).empty() && Retrieve(Stream_General, 0, General_Duration).To_int64u()<4000)
- {
- Fill(Stream_Video, 0, Video_BitRate, Retrieve(Stream_Video, 0, Video_BitRate_Nominal));
- Clear(Stream_Video, 0, Video_BitRate_Nominal);
- }
-
- //Video bitrate if we have all audio bitrates and overal bitrate
- if (Count_Get(Stream_Video)==1 && Retrieve(Stream_General, 0, General_OverallBitRate).size()>4 && Retrieve(Stream_Video, 0, Video_BitRate).empty() && Retrieve(Stream_Video, 0, Video_BitRate_Encoded).empty() && Retrieve(Stream_General, 0, General_Duration).To_int64u()>=1000) //BitRate is > 10 000 and Duration>10s, to avoid strange behavior
- {
- double GeneralBitRate_Ratio=0.98; //Default container overhead=2%
- int32u GeneralBitRate_Minus=5000; //5000 bps because of a "classic" stream overhead
- double VideoBitRate_Ratio =0.98; //Default container overhead=2%
- int32u VideoBitRate_Minus =2000; //2000 bps because of a "classic" stream overhead
- double AudioBitRate_Ratio =0.98; //Default container overhead=2%
- int32u AudioBitRate_Minus =2000; //2000 bps because of a "classic" stream overhead
- double TextBitRate_Ratio =0.98; //Default container overhead=2%
- int32u TextBitRate_Minus =2000; //2000 bps because of a "classic" stream overhead
- //Specific value depends of Container
- if (IsRawStream)
- {
- GeneralBitRate_Ratio=1;
- GeneralBitRate_Minus=0;
- VideoBitRate_Ratio =1;
- VideoBitRate_Minus =0;
- AudioBitRate_Ratio =1;
- AudioBitRate_Minus =0;
- TextBitRate_Ratio =1;
- TextBitRate_Minus =0;
- }
- if (Get(Stream_General, 0, __T("Format"))==__T("MPEG-TS"))
- {
- GeneralBitRate_Ratio=0.98;
- GeneralBitRate_Minus=0;
- VideoBitRate_Ratio =0.97;
- VideoBitRate_Minus =0;
- AudioBitRate_Ratio =0.96;
- AudioBitRate_Minus =0;
- TextBitRate_Ratio =0.96;
- TextBitRate_Minus =0;
- }
- if (Get(Stream_General, 0, __T("Format"))==__T("MPEG-PS"))
- {
- GeneralBitRate_Ratio=0.99;
- GeneralBitRate_Minus=0;
- VideoBitRate_Ratio =0.99;
- VideoBitRate_Minus =0;
- AudioBitRate_Ratio =0.99;
- AudioBitRate_Minus =0;
- TextBitRate_Ratio =0.99;
- TextBitRate_Minus =0;
- }
- if (MediaInfoLib::Config.Format_Get(Retrieve(Stream_General, 0, General_Format), InfoFormat_KindofFormat)==__T("MPEG-4"))
- {
- GeneralBitRate_Ratio=1;
- GeneralBitRate_Minus=0;
- VideoBitRate_Ratio =1;
- VideoBitRate_Minus =0;
- AudioBitRate_Ratio =1;
- AudioBitRate_Minus =0;
- TextBitRate_Ratio =1;
- TextBitRate_Minus =0;
- }
- if (Get(Stream_General, 0, __T("Format"))==__T("Matroska"))
- {
- GeneralBitRate_Ratio=0.99;
- GeneralBitRate_Minus=0;
- VideoBitRate_Ratio =0.99;
- VideoBitRate_Minus =0;
- AudioBitRate_Ratio =0.99;
- AudioBitRate_Minus =0;
- TextBitRate_Ratio =0.99;
- TextBitRate_Minus =0;
- }
- if (Get(Stream_General, 0, __T("Format"))==__T("MXF"))
- {
- GeneralBitRate_Ratio=1;
- GeneralBitRate_Minus=1000;
- VideoBitRate_Ratio =1.00;
- VideoBitRate_Minus =1000;
- AudioBitRate_Ratio =1.00;
- AudioBitRate_Minus =1000;
- TextBitRate_Ratio =1.00;
- TextBitRate_Minus =1000;
- }
-
- //Testing
- float64 VideoBitRate=Retrieve(Stream_General, 0, General_OverallBitRate).To_float64()*GeneralBitRate_Ratio-GeneralBitRate_Minus;
- bool VideobitRateIsValid=true;
- for (size_t Pos=0; Pos<Count_Get(Stream_Audio); Pos++)
- {
- float64 AudioBitRate=0;
- if (!Retrieve(Stream_Audio, Pos, Audio_BitRate_Encoded).empty() && Retrieve(Stream_Audio, Pos, Audio_BitRate_Encoded)[0]<=__T('9')) //Note: quick test if it is a number
- AudioBitRate=Retrieve(Stream_Audio, Pos, Audio_BitRate_Encoded).To_float64();
- else if (!Retrieve(Stream_Audio, Pos, Audio_BitRate).empty() && Retrieve(Stream_Audio, Pos, Audio_BitRate)[0]<=__T('9')) //Note: quick test if it is a number
- AudioBitRate=Retrieve(Stream_Audio, Pos, Audio_BitRate).To_float64();
- else
- VideobitRateIsValid=false;
- if (VideobitRateIsValid && AudioBitRate_Ratio)
- VideoBitRate-=AudioBitRate/AudioBitRate_Ratio+AudioBitRate_Minus;
- }
- for (size_t Pos=0; Pos<Count_Get(Stream_Text); Pos++)
- {
- float64 TextBitRate;
- if (Retrieve(Stream_Text, Pos, Text_BitRate_Encoded).empty())
- TextBitRate=Retrieve(Stream_Text, Pos, Text_BitRate).To_float64();
- else
- TextBitRate=Retrieve(Stream_Text, Pos, Text_BitRate_Encoded).To_float64();
- if (TextBitRate_Ratio)
- VideoBitRate-=TextBitRate/TextBitRate_Ratio+TextBitRate_Minus;
- else
- VideoBitRate-=1000; //Estimation: Text stream are not often big
- }
- if (VideobitRateIsValid && VideoBitRate>=10000) //to avoid strange behavior
- {
- VideoBitRate=VideoBitRate*VideoBitRate_Ratio-VideoBitRate_Minus;
- Fill(Stream_Video, 0, Video_BitRate, VideoBitRate, 0); //Default container overhead=2%
- if (Retrieve(Stream_Video, 0, Video_StreamSize).empty() && !Retrieve(Stream_Video, 0, Video_Duration).empty())
- {
- float64 Duration=0;
- if (!Retrieve(Stream_Video, 0, Video_FrameCount).empty() && !Retrieve(Stream_Video, 0, Video_FrameRate).empty())
- {
- int64u FrameCount=Retrieve(Stream_Video, 0, Video_FrameCount).To_int64u();
- float64 FrameRate=Retrieve(Stream_Video, 0, Video_FrameRate).To_float64();
- if (FrameCount && FrameRate)
- Duration=FrameCount*1000/FrameRate; //More precise (example: 1 frame at 29.97 fps)
- }
- if (Duration==0)
- Duration=Retrieve(Stream_Video, 0, Video_Duration).To_float64();
- if (Duration)
- {
- int64u StreamSize=float64_int64s(VideoBitRate/8*Duration/1000);
- if (IsRawStream && File_Size!=(int64u)-1 && StreamSize>=File_Size*0.99)
- StreamSize=File_Size;
- Fill(Stream_Video, 0, Video_StreamSize, StreamSize);
- }
- }
- }
- }
-
- //General stream size if we have all streamsize
- if (File_Size!=(int64u)-1 && Retrieve(Stream_General, 0, General_StreamSize).empty())
- {
- //Testing
- int64s StreamSize=File_Size;
- bool StreamSizeIsValid=true;
- for (size_t StreamKind_Pos=Stream_General+1; StreamKind_Pos<Stream_Menu; StreamKind_Pos++)
- for (size_t Pos=0; Pos<Count_Get((stream_t)StreamKind_Pos); Pos++)
- {
- int64u StreamXX_StreamSize=Retrieve((stream_t)StreamKind_Pos, Pos, Fill_Parameter((stream_t)StreamKind_Pos, Generic_StreamSize)).To_int64u();
- if (StreamXX_StreamSize>0 || StreamKind_Pos==Stream_Text)
- StreamSize-=StreamXX_StreamSize;
- else
- StreamSizeIsValid=false;
- }
- if (StreamSizeIsValid && StreamSize>=0) //to avoid strange behavior
- Fill(Stream_General, 0, General_StreamSize, StreamSize);
- }
-
- //General_OverallBitRate_Mode
- if (Retrieve(Stream_General, 0, General_OverallBitRate_Mode).empty())
- {
- bool IsValid=false;
- bool IsCBR=true;
- bool IsVBR=false;
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Menu; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- {
- if (!IsValid)
- IsValid=true;
- if (Retrieve((stream_t)StreamKind, StreamPos, Fill_Parameter((stream_t)StreamKind, Generic_BitRate_Mode))!=__T("CBR"))
- IsCBR=false;
- if (Retrieve((stream_t)StreamKind, StreamPos, Fill_Parameter((stream_t)StreamKind, Generic_BitRate_Mode))==__T("VBR"))
- IsVBR=true;
- }
- if (IsValid)
- {
- if (IsCBR)
- Fill(Stream_General, 0, General_OverallBitRate_Mode, "CBR");
- if (IsVBR)
- Fill(Stream_General, 0, General_OverallBitRate_Mode, "VBR");
- }
- }
-
- //Tags
- Tags();
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Base.cpp b/src/thirdparty/MediaInfo/MediaInfo/File__Base.cpp
deleted file mode 100644
index 62d640b9d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Base.cpp
+++ /dev/null
@@ -1,214 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Base.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/File.h"
-#include <cstring>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Gestion de la classe
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Constructeurs
-File__Base::File__Base ()
-{
- //Init pointers
- #if MEDIAINFO_TRACE
- Details=NULL;
- #endif //MEDIAINFO_TRACE
- Stream=NULL;
- Stream_More=NULL;
- Stream_MustBeDeleted=false;
-
- //File
- File_Size=(int64u)-1;
- File_Offset=0;
- File_Offset_FirstSynched=(int64u)-1;
- File_GoTo=(int64u)-1;
-
- //Optimization init
- StreamKind_Last=Stream_Max;
- StreamPos_Last=Error;
-
- //Config
- Config=NULL;
-}
-
-//---------------------------------------------------------------------------
-//Constructeurs
-File__Base::~File__Base ()
-{
- if (Stream_MustBeDeleted)
- {
- delete Stream; //Stream=NULL;
- delete Stream_More; //Stream_More=NULL;
- }
-}
-
-//---------------------------------------------------------------------------
-//Base
-#if MEDIAINFO_TRACE
-void File__Base::Init (MediaInfo_Config_MediaInfo * Config_, Ztring* Details_, std::vector<std::vector<ZtringList> > * Stream_, std::vector<std::vector<ZtringListList> > * Stream_More_)
-#else //MEDIAINFO_TRACE
-void File__Base::Init (MediaInfo_Config_MediaInfo * Config_, std::vector<std::vector<ZtringList> > * Stream_, std::vector<std::vector<ZtringListList> > * Stream_More_)
-#endif //MEDIAINFO_TRACE
-{
- if (Config)
- return; //Already done
-
- if (Stream_)
- {
- Stream=Stream_;
- Stream_More=Stream_More_;
- Stream_MustBeDeleted=false;
- }
- else
- {
- Stream=new std::vector<std::vector<ZtringList> >;
- Stream->resize(Stream_Max);
- Stream_More=new std::vector<std::vector<ZtringListList> >;
- Stream_More->resize(Stream_Max);
- Stream_MustBeDeleted=true;
- }
-
- Config=Config_;
- #if MEDIAINFO_TRACE
- Details=Details_;
- #endif //MEDIAINFO_TRACE
-}
-
-//***************************************************************************
-// Fonctions
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t File__Base::Count_Get (stream_t StreamKind, size_t Pos) const
-{
- //Integrity
- if (StreamKind>=Stream_Max)
- return 0;
-
- //Count of streams
- if (!Stream)
- return 0;
- if (Pos==Error)
- return (*Stream)[StreamKind].size();
-
- //Integrity
- if (Pos>=(*Stream)[StreamKind].size())
- return 0;
-
- //Count of piece of information in a stream
- return MediaInfoLib::Config.Info_Get(StreamKind).size()+(*Stream_More)[StreamKind][Pos].size();
-}
-
-//---------------------------------------------------------------------------
-const Ztring &File__Base::Get (stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t KindOfInfo)
-{
- //Check integrity
- if (StreamKind>=Stream_Max || StreamNumber>=(*Stream)[StreamKind].size() || Parameter>=MediaInfoLib::Config.Info_Get(StreamKind).size()+(*Stream_More)[StreamKind][StreamNumber].size() || KindOfInfo>=Info_Max)
- return MediaInfoLib::Config.EmptyString_Get(); //Parameter is unknown
-
- else if (Parameter<MediaInfoLib::Config.Info_Get(StreamKind).size())
- {
- //Optimization : KindOfInfo>Info_Text is in static lists
- if (KindOfInfo!=Info_Text)
- return MediaInfoLib::Config.Info_Get(StreamKind)[Parameter][KindOfInfo]; //look for static information only
- else if (Parameter<(*Stream)[StreamKind][StreamNumber].size())
- return (*Stream)[StreamKind][StreamNumber][Parameter];
- else
- return MediaInfoLib::Config.EmptyString_Get(); //This parameter is known, but not filled
- }
- else
- {
- if (((size_t)(Parameter-MediaInfoLib::Config.Info_Get(StreamKind).size()))<(*Stream_More)[StreamKind][StreamNumber].size() && ((size_t)KindOfInfo)<(*Stream_More)[StreamKind][StreamNumber][Parameter-MediaInfoLib::Config.Info_Get(StreamKind).size()].size())
- return (*Stream_More)[StreamKind][StreamNumber][Parameter-MediaInfoLib::Config.Info_Get(StreamKind).size()][KindOfInfo];
- else
- return MediaInfoLib::Config.EmptyString_Get(); //Not filled
- }
-}
-
-//---------------------------------------------------------------------------
-const Ztring &File__Base::Get (stream_t StreamKind, size_t StreamPos, const Ztring &Parameter, info_t KindOfInfo, info_t KindOfSearch)
-{
- size_t ParameterI=0;
-
- //Check integrity
- if (StreamKind>=Stream_Max || StreamPos>=(*Stream)[StreamKind].size() || KindOfInfo>=Info_Max)
- return MediaInfoLib::Config.EmptyString_Get();
- if ((ParameterI=MediaInfoLib::Config.Info_Get(StreamKind).Find(Parameter, KindOfSearch))==Error)
- {
- ParameterI=(*Stream_More)[StreamKind][StreamPos].Find(Parameter, KindOfSearch);
- if (ParameterI==Error)
- return MediaInfoLib::Config.EmptyString_Get(); //Parameter is unknown
- return (*Stream_More)[StreamKind][StreamPos][ParameterI](KindOfInfo);
- }
-
- return Get(StreamKind, StreamPos, ParameterI, KindOfInfo);
-}
-
-//---------------------------------------------------------------------------
-int File__Base::Set (stream_t StreamKind, size_t StreamNumber, size_t Parameter, const Ztring &ToSet, const Ztring &OldValue)
-{
- //Integrity
- if (Count_Get(StreamKind)<=StreamNumber)
- return 0;
-
- return Set(StreamKind, StreamNumber, Get(StreamKind, StreamNumber, Parameter, Info_Name), ToSet, OldValue);
-}
-
-//---------------------------------------------------------------------------
-int File__Base::Set (stream_t StreamKind, size_t StreamNumber, const Ztring &Parameter, const Ztring &ToSet, const Ztring &OldValue)
-{
- //Integrity
- if (Count_Get(StreamKind)<=StreamNumber)
- return 0;
-
- return Write(StreamKind, StreamNumber, Parameter, ToSet, OldValue);
-}
-
-//---------------------------------------------------------------------------
-void File__Base::Language_Set()
-{
-}
-
-//***************************************************************************
-// Divers
-//***************************************************************************
-
-void File__Base::Clear()
-{
- for (size_t StreamKind=0; StreamKind<Stream_Max; StreamKind++)
- {
- (*Stream)[StreamKind].clear();
- (*Stream_More)[StreamKind].clear();
- }
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Base.h b/src/thirdparty/MediaInfo/MediaInfo/File__Base.h
deleted file mode 100644
index 75090ba2d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Base.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give common methods for all file types
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo__BaseH
-#define MediaInfo__BaseH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Config.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class MediaInfo_Config_MediaInfo;
-
-//***************************************************************************
-// Class File__Base
-//***************************************************************************
-
-class File__Base
-{
-public :
- //Constructor/Destructor
- File__Base();
- virtual ~File__Base();
- #if MEDIAINFO_TRACE
- void Init(MediaInfo_Config_MediaInfo * Config, Ztring* Details, std::vector<std::vector<ZtringList> > * Stream_=NULL, std::vector<std::vector<ZtringListList> > * Stream_More=NULL);
- #else //MEDIAINFO_TRACE
- void Init(MediaInfo_Config_MediaInfo * Config, std::vector<std::vector<ZtringList> > * Stream_=NULL, std::vector<std::vector<ZtringListList> > * Stream_More=NULL);
- #endif //MEDIAINFO_TRACE
-
- //Save
- int Save ();
-
- //Get information
- const Ztring &Get (stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t KindOfInfo=Info_Text);
- virtual const Ztring &Get (stream_t StreamKind, size_t StreamNumber, const Ztring &Parameter, info_t KindOfInfo=Info_Text, info_t KindOfSearch=Info_Name);
-
- //Set information
- int Set (stream_t StreamKind, size_t StreamNumber, size_t Parameter, const Ztring &ToSet, const Ztring &OldValue=__T(""));
- int Set (stream_t StreamKind, size_t StreamNumber, const Ztring &Parameter, const Ztring &ToSet, const Ztring &OldValue=__T(""));
-
- //Output buffer
- virtual size_t Output_Buffer_Get (const String &) {return 0;};
- virtual size_t Output_Buffer_Get (size_t) {return 0;};
-
- //Options
- size_t Count_Get (stream_t StreamKind, size_t Pos=Error) const;
- void Language_Set (); //Update language for an existing File__Base
-
-protected :
- //Read
- virtual void Read_Buffer_Init () {} //To overload
- virtual void Read_Buffer_Unsynched() {} //To overload
- virtual void Read_Buffer_Continue () {} //To overload
- virtual void Read_Buffer_Finalize () {} //To overload
-
- //Write
- virtual int Write (stream_t /*StreamKind*/, size_t /*StreamNumber*/, const Ztring &/*Parameter*/, const Ztring &/*ToSet*/, const Ztring &/*OldValue*/) {return -1;} //Write the value in memory
- virtual int WriteToDisk () {return -1;} //Write modified tags on disk
-
- //Arrays
-public : //TODO:put it as private
- std::vector<std::vector<ZtringList> > * Stream; //pointer to others listed streams
- std::vector<std::vector<ZtringListList> > * Stream_More; //pointer to others listed streams
- bool Stream_MustBeDeleted;
-protected :
- stream_t StreamKind_Last;
- size_t StreamPos_Last;
-
- //Config
- MediaInfo_Config_MediaInfo* Config;
-
- //Details
- #if MEDIAINFO_TRACE
- Ztring* Details;
- #endif //MEDIAINFO_TRACE
-
-public :
- #if MEDIAINFO_TRACE
- void Details_Add(const char* Parameter);
- #endif //MEDIAINFO_TRACE
- virtual void Option_Manage() {};
-
- //File
- Ztring File_Name;
- int64u File_Size;
- int64u File_Offset;
- int64u File_Offset_FirstSynched;
- int64u File_GoTo; //How many byte to skip?
-
- //Divers
- void Clear();
-
-private :
- //Constructor
- File__Base (const File__Base&); // Prevent copy-construction
- File__Base& operator=(const File__Base&); // Prevent assignment
-
-public : //A virer
- friend class File__Analyze;
- friend class File__MultipleParsing;
- friend class File__ReferenceFilesHelper;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Duplicate.cpp b/src/thirdparty/MediaInfo/MediaInfo/File__Duplicate.cpp
deleted file mode 100644
index f4d53ab11..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Duplicate.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Duplication helper for some specific formats
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DUPLICATE
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Duplicate.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/ZtringList.h"
-#include "ZenLib/File.h"
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-File__Duplicate::File__Duplicate ()
-:File__Analyze()
-{
- //Temp
- File__Duplicate_HasChanged_=false;
- File__Duplicate_Needed=false;
- Config_File_Duplicate_Get_AlwaysNeeded_Count=0;
-}
-
-File__Duplicate::~File__Duplicate ()
-{
-}
-
-//***************************************************************************
-// Get
-//***************************************************************************
-
-bool File__Duplicate::File__Duplicate_Get ()
-{
- return File__Duplicate_Needed;
-}
-
-bool File__Duplicate::File__Duplicate_HasChanged ()
-{
- //Retrieving general configuration
- while (Config->File_Duplicate_Get_AlwaysNeeded(Config_File_Duplicate_Get_AlwaysNeeded_Count))
- {
- if (File__Duplicate_Set(Config->File_Duplicate_Get(Config_File_Duplicate_Get_AlwaysNeeded_Count)))
- File__Duplicate_HasChanged_=true;
- Config_File_Duplicate_Get_AlwaysNeeded_Count++;
- }
-
- bool File__Duplicate_HasChanged_Temp=File__Duplicate_HasChanged_;
- File__Duplicate_HasChanged_=false;
- return File__Duplicate_HasChanged_Temp;
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_DUPLICATE
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__Duplicate.h b/src/thirdparty/MediaInfo/MediaInfo/File__Duplicate.h
deleted file mode 100644
index f1715aeb4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__Duplicate.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef File__DuplicateH
-#define File__DuplicateH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Duplicate/File__Duplicate__Writer.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File__Duplicate
-//***************************************************************************
-
-class File__Duplicate : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File__Duplicate();
- virtual ~File__Duplicate();
-
-protected :
- virtual bool File__Duplicate_Set (const Ztring &Value)=0; //Fill a new File__Duplicate value
-
- //Get
- bool File__Duplicate_Get ();
-
- //Modifications
- bool File__Duplicate_HasChanged();
-
-private :
- bool File__Duplicate_HasChanged_;
- bool File__Duplicate_Needed;
- size_t Config_File_Duplicate_Get_AlwaysNeeded_Count;
-};
-
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__MultipleParsing.cpp b/src/thirdparty/MediaInfo/MediaInfo/File__MultipleParsing.cpp
deleted file mode 100644
index ed6ef8f00..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__MultipleParsing.cpp
+++ /dev/null
@@ -1,837 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__MultipleParsing.h"
-//---------------------------------------------------------------------------
-// Multiple
-#if defined(MEDIAINFO_AAF_YES)
- #include "MediaInfo/Multiple/File_Aaf.h"
-#endif
-#if defined(MEDIAINFO_BDMV_YES)
- #include "MediaInfo/Multiple/File_Bdmv.h"
-#endif
-#if defined(MEDIAINFO_CDXA_YES)
- #include "MediaInfo/Multiple/File_Cdxa.h"
-#endif
-#if defined(MEDIAINFO_DASHMPD_YES)
- #include "MediaInfo/Multiple/File_DashMpd.h"
-#endif
-#if defined(MEDIAINFO_DCP_YES)
- #include "MediaInfo/Multiple/File_DcpAm.h"
-#endif
-#if defined(MEDIAINFO_DCP_YES)
- #include "MediaInfo/Multiple/File_DcpCpl.h"
-#endif
-#if defined(MEDIAINFO_DCP_YES)
- #include "MediaInfo/Multiple/File_DcpPkl.h"
-#endif
-#if defined(MEDIAINFO_DPG_YES)
- #include "MediaInfo/Multiple/File_Dpg.h"
-#endif
-#if defined(MEDIAINFO_DVDIF_YES)
- #include "MediaInfo/Multiple/File_DvDif.h"
-#endif
-#if defined(MEDIAINFO_DVDV_YES)
- #include "MediaInfo/Multiple/File_Dvdv.h"
-#endif
-#if defined(MEDIAINFO_DXW_YES)
- #include "MediaInfo/Multiple/File_Dxw.h"
-#endif
-#if defined(MEDIAINFO_FLV_YES)
- #include "MediaInfo/Multiple/File_Flv.h"
-#endif
-#if defined(MEDIAINFO_GXF_YES)
- #include "MediaInfo/Multiple/File_Gxf.h"
-#endif
-#if defined(MEDIAINFO_HDSF4M_YES)
- #include "MediaInfo/Multiple/File_HdsF4m.h"
-#endif
-#if defined(MEDIAINFO_HLS_YES)
- #include "MediaInfo/Multiple/File_Hls.h"
-#endif
-#if defined(MEDIAINFO_IBI_YES)
- #include "MediaInfo/Multiple/File_Ibi.h"
-#endif
-#if defined(MEDIAINFO_ISM_YES)
- #include "MediaInfo/Multiple/File_Ism.h"
-#endif
-#if defined(MEDIAINFO_IMF_YES)
- #include "MediaInfo/Multiple/File_ImfCpl.h"
-#endif
-#if defined(MEDIAINFO_IVF_YES)
- #include "MediaInfo/Multiple/File_Ivf.h"
-#endif
-#if defined(MEDIAINFO_LXF_YES)
- #include "MediaInfo/Multiple/File_Lxf.h"
-#endif
-#if defined(MEDIAINFO_MK_YES)
- #include "MediaInfo/Multiple/File_Mk.h"
-#endif
-#if defined(MEDIAINFO_MPEG4_YES)
- #include "MediaInfo/Multiple/File_Mpeg4.h"
-#endif
-#if defined(MEDIAINFO_MPEGPS_YES)
- #include "MediaInfo/Multiple/File_MpegPs.h"
-#endif
-#if defined(MEDIAINFO_MPEGTS_YES) || defined(MEDIAINFO_BDAV_YES) || defined(MEDIAINFO_TSP_YES)
- #include "MediaInfo/Multiple/File_MpegTs.h"
-#endif
-#if defined(MEDIAINFO_MXF_YES)
- #include "MediaInfo/Multiple/File_Mxf.h"
-#endif
-#if defined(MEDIAINFO_NUT_YES)
- #include "MediaInfo/Multiple/File_Nut.h"
-#endif
-#if defined(MEDIAINFO_OGG_YES)
- #include "MediaInfo/Multiple/File_Ogg.h"
-#endif
-#if defined(MEDIAINFO_P2_YES)
- #include "MediaInfo/Multiple/File_P2_Clip.h"
-#endif
-#if defined(MEDIAINFO_PMP_YES)
- #include "MediaInfo/Multiple/File_Pmp.h"
-#endif
-#if defined(MEDIAINFO_PTX_YES)
- #include "MediaInfo/Multiple/File_Ptx.h"
-#endif
-#if defined(MEDIAINFO_RIFF_YES)
- #include "MediaInfo/Multiple/File_Riff.h"
-#endif
-#if defined(MEDIAINFO_RM_YES)
- #include "MediaInfo/Multiple/File_Rm.h"
-#endif
-#if defined(MEDIAINFO_SEQUENCEINFO_YES)
- #include "MediaInfo/Multiple/File_SequenceInfo.h"
-#endif
-#if defined(MEDIAINFO_SKM_YES)
- #include "MediaInfo/Multiple/File_Skm.h"
-#endif
-#if defined(MEDIAINFO_SWF_YES)
- #include "MediaInfo/Multiple/File_Swf.h"
-#endif
-#if defined(MEDIAINFO_WM_YES)
- #include "MediaInfo/Multiple/File_Wm.h"
-#endif
-#if defined(MEDIAINFO_XDCAM_YES)
- #include "MediaInfo/Multiple/File_Xdcam_Clip.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Video
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_AVSV_YES)
- #include "MediaInfo/Video/File_AvsV.h"
-#endif
-#if defined(MEDIAINFO_DIRAC_YES)
- #include "MediaInfo/Video/File_Dirac.h"
-#endif
-#if defined(MEDIAINFO_FLIC_YES)
- #include "MediaInfo/Video/File_Flic.h"
-#endif
-#if defined(MEDIAINFO_H263_YES)
- #include "MediaInfo/Video/File_H263.h"
-#endif
-#if defined(MEDIAINFO_HEVC_YES)
- #include "MediaInfo/Video/File_Hevc.h"
-#endif
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_VC1_YES)
- #include "MediaInfo/Video/File_Vc1.h"
-#endif
-#if defined(MEDIAINFO_VC3_YES)
- #include "MediaInfo/Video/File_Vc3.h"
-#endif
-#if defined(MEDIAINFO_Y4M_YES)
- #include "MediaInfo/Video/File_Y4m.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Audio
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_ALS_YES)
- #include "MediaInfo/Audio/File_Als.h"
-#endif
-#if defined(MEDIAINFO_AMR_YES)
- #include "MediaInfo/Audio/File_Amr.h"
-#endif
-#if defined(MEDIAINFO_AMV_YES)
- #include "MediaInfo/Audio/File_Amv.h"
-#endif
-#if defined(MEDIAINFO_APE_YES)
- #include "MediaInfo/Audio/File_Ape.h"
-#endif
-#if defined(MEDIAINFO_AU_YES)
- #include "MediaInfo/Audio/File_Au.h"
-#endif
-#if defined(MEDIAINFO_DTS_YES)
- #include "MediaInfo/Audio/File_Dts.h"
-#endif
-#if defined(MEDIAINFO_DOLBYE_YES)
- #include "MediaInfo/Audio/File_DolbyE.h"
-#endif
-#if defined(MEDIAINFO_FLAC_YES)
- #include "MediaInfo/Audio/File_Flac.h"
-#endif
-#if defined(MEDIAINFO_IT_YES)
- #include "MediaInfo/Audio/File_ImpulseTracker.h"
-#endif
-#if defined(MEDIAINFO_LA_YES)
- #include "MediaInfo/Audio/File_La.h"
-#endif
-#if defined(MEDIAINFO_MIDI_YES)
- #include "MediaInfo/Audio/File_Midi.h"
-#endif
-#if defined(MEDIAINFO_MOD_YES)
- #include "MediaInfo/Audio/File_Module.h"
-#endif
-#if defined(MEDIAINFO_MPC_YES)
- #include "MediaInfo/Audio/File_Mpc.h"
-#endif
-#if defined(MEDIAINFO_MPCSV8_YES)
- #include "MediaInfo/Audio/File_MpcSv8.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_OPENMG_YES)
- #include "MediaInfo/Audio/File_OpenMG.h"
-#endif
-#if defined(MEDIAINFO_RKAU_YES)
- #include "MediaInfo/Audio/File_Rkau.h"
-#endif
-#if defined(MEDIAINFO_S3M_YES)
- #include "MediaInfo/Audio/File_ScreamTracker3.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_SmpteSt0337.h"
-#endif
-#if defined(MEDIAINFO_TAK_YES)
- #include "MediaInfo/Audio/File_Tak.h"
-#endif
-#if defined(MEDIAINFO_TTA_YES)
- #include "MediaInfo/Audio/File_Tta.h"
-#endif
-#if defined(MEDIAINFO_TWINVQ_YES)
- #include "MediaInfo/Audio/File_TwinVQ.h"
-#endif
-#if defined(MEDIAINFO_WVPK_YES)
- #include "MediaInfo/Audio/File_Wvpk.h"
-#endif
-#if defined(MEDIAINFO_XM_YES)
- #include "MediaInfo/Audio/File_ExtendedModule.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Text
-#if defined(MEDIAINFO_EIA608_YES)
- #include "MediaInfo/Text/File_Eia608.h"
-#endif
-#if defined(MEDIAINFO_N19_YES)
- #include "MediaInfo/Text/File_N19.h"
-#endif
-#if defined(MEDIAINFO_PDF_YES)
- #include "MediaInfo/Text/File_Pdf.h"
-#endif
-#if defined(MEDIAINFO_SCC_YES)
- #include "MediaInfo/Text/File_Scc.h"
-#endif
-#if defined(MEDIAINFO_SUBRIP_YES)
- #include "MediaInfo/Text/File_SubRip.h"
-#endif
-#if defined(MEDIAINFO_TTML_YES)
- #include "MediaInfo/Text/File_Ttml.h"
-#endif
-#if defined(MEDIAINFO_OTHERTEXT_YES)
- #include "MediaInfo/Text/File_OtherText.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Image
-#if defined(MEDIAINFO_ARRIRAW_YES)
- #include "MediaInfo/Image/File_ArriRaw.h"
-#endif
-#if defined(MEDIAINFO_BMP_YES)
- #include "MediaInfo/Image/File_Bmp.h"
-#endif
-#if defined(MEDIAINFO_DDS_YES)
- #include "MediaInfo/Image/File_Dds.h"
-#endif
-#if defined(MEDIAINFO_DPX_YES)
- #include "MediaInfo/Image/File_Dpx.h"
-#endif
-#if defined(MEDIAINFO_EXR_YES)
- #include "MediaInfo/Image/File_Exr.h"
-#endif
-#if defined(MEDIAINFO_GIF_YES)
- #include "MediaInfo/Image/File_Gif.h"
-#endif
-#if defined(MEDIAINFO_ICO_YES)
- #include "MediaInfo/Image/File_Ico.h"
-#endif
-#if defined(MEDIAINFO_JPEG_YES)
- #include "MediaInfo/Image/File_Jpeg.h"
-#endif
-#if defined(MEDIAINFO_PCX_YES)
- #include "MediaInfo/Image/File_Pcx.h"
-#endif
-#if defined(MEDIAINFO_PNG_YES)
- #include "MediaInfo/Image/File_Png.h"
-#endif
-#if defined(MEDIAINFO_PSD_YES)
- #include "MediaInfo/Image/File_Psd.h"
-#endif
-#if defined(MEDIAINFO_TIFF_YES)
- #include "MediaInfo/Image/File_Tiff.h"
-#endif
-#if defined(MEDIAINFO_TGA_YES)
- #include "MediaInfo/Image/File_Tga.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Archive
-#if defined(MEDIAINFO_7Z_YES)
- #include "MediaInfo/Archive/File_7z.h"
-#endif
-#if defined(MEDIAINFO_ACE_YES)
- #include "MediaInfo/Archive/File_Ace.h"
-#endif
-#if defined(MEDIAINFO_BZIP2_YES)
- #include "MediaInfo/Archive/File_Bzip2.h"
-#endif
-#if defined(MEDIAINFO_ELF_YES)
- #include "MediaInfo/Archive/File_Elf.h"
-#endif
-#if defined(MEDIAINFO_GZIP_YES)
- #include "MediaInfo/Archive/File_Gzip.h"
-#endif
-#if defined(MEDIAINFO_ISO9660_YES)
- #include "MediaInfo/Archive/File_Iso9660.h"
-#endif
-#if defined(MEDIAINFO_MZ_YES)
- #include "MediaInfo/Archive/File_Mz.h"
-#endif
-#if defined(MEDIAINFO_RAR_YES)
- #include "MediaInfo/Archive/File_Rar.h"
-#endif
-#if defined(MEDIAINFO_TAR_YES)
- #include "MediaInfo/Archive/File_Tar.h"
-#endif
-#if defined(MEDIAINFO_ZIP_YES)
- #include "MediaInfo/Archive/File_Zip.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Other
-#if !defined(MEDIAINFO_OTHER_NO)
- #include "MediaInfo/File_Other.h"
-#endif
-#include "MediaInfo/File_Unknown.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Out
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File__Analyze* File__MultipleParsing::Parser_Get()
-{
- if (Parser.size()!=1)
- return NULL;
-
- File__Analyze* ToReturn=Parser[0]; //The first parser
- Parser.clear();
- return ToReturn;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File__MultipleParsing::File__MultipleParsing()
-:File__Analyze()
-{
- #if MEDIAINFO_TRACE
- Trace_DoNotSave=true;
- #endif //MEDIAINFO_TRACE
-
- // Multiple
- #if defined(MEDIAINFO_AAF_YES)
- Parser.push_back(new File_Aaf());
- #endif
- #if defined(MEDIAINFO_BDAV_YES)
- {File_MpegTs* Temp=new File_MpegTs(); Temp->BDAV_Size=4; Parser.push_back(Temp);}
- #endif
-// Only with directories, no By Buffer interface
-// #if defined(MEDIAINFO_BDMV_YES)
-// Parser.push_back(new File_Bdmv());
-// #endif
- #if defined(MEDIAINFO_CDXA_YES)
- Parser.push_back(new File_Cdxa());
- #endif
- #if defined(MEDIAINFO_DASHMPD_YES)
- Parser.push_back(new File_DashMpd());
- #endif
- #if defined(MEDIAINFO_DCP_YES)
- Parser.push_back(new File_DcpAm());
- #endif
- #if defined(MEDIAINFO_DCP_YES)
- Parser.push_back(new File_DcpCpl());
- #endif
- #if defined(MEDIAINFO_DCP_YES)
- Parser.push_back(new File_DcpPkl());
- #endif
- #if defined(MEDIAINFO_DPG_YES)
- Parser.push_back(new File_Dpg());
- #endif
- #if defined(MEDIAINFO_DVDIF_YES)
- Parser.push_back(new File_DvDif());
- #endif
- #if defined(MEDIAINFO_DVDV_YES)
- Parser.push_back(new File_Dvdv());
- #endif
- #if defined(MEDIAINFO_DXW_YES)
- Parser.push_back(new File_Dxw());
- #endif
- #if defined(MEDIAINFO_FLV_YES)
- Parser.push_back(new File_Flv());
- #endif
- #if defined(MEDIAINFO_GXF_YES)
- Parser.push_back(new File_Gxf());
- #endif
- #if defined(MEDIAINFO_HDSF4M_YES)
- Parser.push_back(new File_HdsF4m());
- #endif
- #if defined(MEDIAINFO_HLS_YES)
- Parser.push_back(new File_Hls());
- #endif
- #if defined(MEDIAINFO_ISM_YES)
- Parser.push_back(new File_Ism());
- #endif
- #if defined(MEDIAINFO_IVF_YES)
- Parser.push_back(new File_Ivf());
- #endif
- #if defined(MEDIAINFO_LXF_YES)
- Parser.push_back(new File_Lxf());
- #endif
- #if defined(MEDIAINFO_MK_YES)
- Parser.push_back(new File_Mk());
- #endif
- #if defined(MEDIAINFO_MPEG4_YES)
- Parser.push_back(new File_Mpeg4());
- #endif
- #if defined(MEDIAINFO_MPEGPS_YES)
- Parser.push_back(new File_MpegPs());
- #endif
- #if defined(MEDIAINFO_MPEGTS_YES)
- Parser.push_back(new File_MpegTs());
- #endif
- #if defined(MEDIAINFO_TSP_YES)
- {File_MpegTs* Temp=new File_MpegTs(); Temp->TSP_Size=16; Parser.push_back(Temp);}
- #endif
- #if defined(MEDIAINFO_MXF_YES)
- Parser.push_back(new File_Mxf());
- #endif
- #if defined(MEDIAINFO_NUT_YES)
- Parser.push_back(new File_Nut());
- #endif
- #if defined(MEDIAINFO_OGG_YES)
- Parser.push_back(new File_Ogg());
- #endif
- #if defined(MEDIAINFO_P2_YES)
- Parser.push_back(new File_P2_Clip());
- #endif
- #if defined(MEDIAINFO_PMP_YES)
- Parser.push_back(new File_Pmp());
- #endif
- #if defined(MEDIAINFO_PTX_YES)
- Parser.push_back(new File_Ptx());
- #endif
- #if defined(MEDIAINFO_RIFF_YES)
- Parser.push_back(new File_Riff());
- #endif
- #if defined(MEDIAINFO_RM_YES)
- Parser.push_back(new File_Rm());
- #endif
- #if defined(MEDIAINFO_SEQUENCEINFO_YES)
- Parser.push_back(new File_SequenceInfo());
- #endif
- #if defined(MEDIAINFO_SKM_YES)
- Parser.push_back(new File_Skm());
- #endif
- #if defined(MEDIAINFO_SWF_YES)
- Parser.push_back(new File_Swf());
- #endif
- #if defined(MEDIAINFO_WM_YES)
- Parser.push_back(new File_Wm());
- #endif
- #if defined(MEDIAINFO_XDCAM_YES)
- Parser.push_back(new File_Xdcam_Clip());
- #endif
-
- // Video
- #if defined(MEDIAINFO_AVC_YES)
- Parser.push_back(new File_Avc());
- #endif
- #if defined(MEDIAINFO_HEVC_YES)
- Parser.push_back(new File_Hevc());
- #endif
- #if defined(MEDIAINFO_AVSV_YES)
- Parser.push_back(new File_AvsV());
- #endif
- #if defined(MEDIAINFO_DIRAC_YES)
- Parser.push_back(new File_Dirac());
- #endif
- #if defined(MEDIAINFO_FLIC_YES)
- Parser.push_back(new File_Flic());
- #endif
- #if defined(MEDIAINFO_H263_YES)
- Parser.push_back(new File_H263());
- #endif
- #if defined(MEDIAINFO_MPEG4V_YES)
- Parser.push_back(new File_Mpeg4v());
- #endif
- #if defined(MEDIAINFO_MPEGV_YES)
- Parser.push_back(new File_Mpegv());
- #endif
- #if defined(MEDIAINFO_VC1_YES)
- Parser.push_back(new File_Vc1());
- #endif
- #if defined(MEDIAINFO_VC3_YES)
- Parser.push_back(new File_Vc3());
- #endif
- #if defined(MEDIAINFO_Y4M_YES)
- Parser.push_back(new File_Y4m());
- #endif
-
- // Audio
- #if defined(MEDIAINFO_AAC_YES)
- {File_Aac* Temp=new File_Aac(); Temp->Mode=File_Aac::Mode_ADIF; Parser.push_back(Temp);}
- #endif
- #if defined(MEDIAINFO_AAC_YES)
- {File_Aac* Temp=new File_Aac(); Temp->Mode=File_Aac::Mode_ADTS; Parser.push_back(Temp);}
- #endif
- #if defined(MEDIAINFO_AC3_YES)
- Parser.push_back(new File_Ac3());
- #endif
- #if defined(MEDIAINFO_SMPTEST0337_YES)
- Parser.push_back(new File_SmpteSt0337());
- #endif
- #if defined(MEDIAINFO_ALS_YES)
- Parser.push_back(new File_Als());
- #endif
- #if defined(MEDIAINFO_AMR_YES)
- Parser.push_back(new File_Amr());
- #endif
- #if defined(MEDIAINFO_AMV_YES)
- Parser.push_back(new File_Amv());
- #endif
- #if defined(MEDIAINFO_APE_YES)
- Parser.push_back(new File_Ape());
- #endif
- #if defined(MEDIAINFO_AU_YES)
- Parser.push_back(new File_Au());
- #endif
- #if defined(MEDIAINFO_DTS_YES)
- Parser.push_back(new File_Dts());
- #endif
-// Too many false-positives
-// #if defined(MEDIAINFO_DOLBYE_YES)
-// Parser.push_back(new File_DolbyE());
-// #endif
- #if defined(MEDIAINFO_FLAC_YES)
- Parser.push_back(new File_Flac());
- #endif
- #if defined(MEDIAINFO_IT_YES)
- Parser.push_back(new File_ImpulseTracker());
- #endif
- #if defined(MEDIAINFO_LA_YES)
- Parser.push_back(new File_La());
- #endif
- #if defined(MEDIAINFO_MIDI_YES)
- Parser.push_back(new File_Midi());
- #endif
- #if defined(MEDIAINFO_MOD_YES)
- Parser.push_back(new File_Module());
- #endif
- #if defined(MEDIAINFO_MPC_YES)
- Parser.push_back(new File_Mpc());
- #endif
- #if defined(MEDIAINFO_MPCSV8_YES)
- Parser.push_back(new File_MpcSv8());
- #endif
- #if defined(MEDIAINFO_MPEGA_YES)
- Parser.push_back(new File_Mpega());
- #endif
- #if defined(MEDIAINFO_OPENMG_YES)
- Parser.push_back(new File_OpenMG());
- #endif
- #if defined(MEDIAINFO_RKAU_YES)
- Parser.push_back(new File_Rkau());
- #endif
- #if defined(MEDIAINFO_S3M_YES)
- Parser.push_back(new File_ScreamTracker3());
- #endif
- #if defined(MEDIAINFO_TAK_YES)
- Parser.push_back(new File_Tak());
- #endif
- #if defined(MEDIAINFO_TTA_YES)
- Parser.push_back(new File_Tta());
- #endif
- #if defined(MEDIAINFO_TWINVQ_YES)
- Parser.push_back(new File_TwinVQ());
- #endif
- #if defined(MEDIAINFO_WVPK_YES)
- Parser.push_back(new File_Wvpk());
- #endif
- #if defined(MEDIAINFO_XM_YES)
- Parser.push_back(new File_ExtendedModule());
- #endif
-
- // Text
-// Too many false-positives
-// #if defined(MEDIAINFO_EIA608_YES)
-// Parser.push_back(new File_Eia608());
-// #endif
- #if defined(MEDIAINFO_N19_YES)
- Parser.push_back(new File_N19());
- #endif
- #if defined(MEDIAINFO_PDF_YES)
- Parser.push_back(new File_Pdf());
- #endif
- #if defined(MEDIAINFO_SCC_YES)
- Parser.push_back(new File_Scc());
- #endif
- #if defined(MEDIAINFO_SUBRIP_YES)
- Parser.push_back(new File_SubRip());
- #endif
- #if defined(MEDIAINFO_TTML_YES)
- Parser.push_back(new File_Ttml());
- #endif
- #if defined(MEDIAINFO_OTHERTEXT_YES)
- Parser.push_back(new File_OtherText());
- #endif
-
- // Image
- #if defined(MEDIAINFO_ARRIRAW_YES)
- Parser.push_back(new File_ArriRaw());
- #endif
- #if defined(MEDIAINFO_BMP_YES)
- Parser.push_back(new File_Bmp());
- #endif
- #if defined(MEDIAINFO_DDS_YES)
- Parser.push_back(new File_Dds());
- #endif
- #if defined(MEDIAINFO_DPX_YES)
- Parser.push_back(new File_Dpx());
- #endif
- #if defined(MEDIAINFO_EXR_YES)
- Parser.push_back(new File_Exr());
- #endif
- #if defined(MEDIAINFO_GIF_YES)
- Parser.push_back(new File_Gif());
- #endif
- #if defined(MEDIAINFO_ICO_YES)
- Parser.push_back(new File_Ico());
- #endif
- #if defined(MEDIAINFO_JPEG_YES)
- Parser.push_back(new File_Jpeg());
- #endif
- #if defined(MEDIAINFO_PCX_YES)
- Parser.push_back(new File_Pcx());
- #endif
- #if defined(MEDIAINFO_PNG_YES)
- Parser.push_back(new File_Png());
- #endif
- #if defined(MEDIAINFO_PSD_YES)
- Parser.push_back(new File_Psd());
- #endif
- #if defined(MEDIAINFO_TIFF_YES)
- Parser.push_back(new File_Tiff());
- #endif
- #if defined(MEDIAINFO_TGA_YES)
- Parser.push_back(new File_Tga());
- #endif
-
- // Archive
- #if defined(MEDIAINFO_7Z_YES)
- Parser.push_back(new File_7z());
- #endif
- #if defined(MEDIAINFO_ACE_YES)
- Parser.push_back(new File_Ace());
- #endif
- #if defined(MEDIAINFO_BZIP2_YES)
- Parser.push_back(new File_Bzip2());
- #endif
- #if defined(MEDIAINFO_ELF_YES)
- Parser.push_back(new File_Elf());
- #endif
- #if defined(MEDIAINFO_GZIP_YES)
- Parser.push_back(new File_Gzip());
- #endif
- #if defined(MEDIAINFO_ISO9660_YES)
- Parser.push_back(new File_Iso9660());
- #endif
- #if defined(MEDIAINFO_MZ_YES)
- Parser.push_back(new File_Mz());
- #endif
- #if defined(MEDIAINFO_RAR_YES)
- Parser.push_back(new File_Rar());
- #endif
- #if defined(MEDIAINFO_TAR_YES)
- Parser.push_back(new File_Tar());
- #endif
- #if defined(MEDIAINFO_ZIP_YES)
- Parser.push_back(new File_Zip());
- #endif
-
- // Other
- #if defined(MEDIAINFO_OTHER_YES)
- Parser.push_back(new File_Other());
- #endif
-}
-
-//---------------------------------------------------------------------------
-File__MultipleParsing::~File__MultipleParsing()
-{
- for (size_t Pos=0; Pos<Parser.size(); Pos++)
- delete Parser[Pos]; //Parser[Pos]=NULL
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__MultipleParsing::Streams_Finish()
-{
- if (Parser.size()!=1)
- return;
-
- Parser[0]->Open_Buffer_Finalize();
- #if MEDIAINFO_TRACE
- Details=Parser[0]->Details;
- #endif //MEDIAINFO_TRACE
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__MultipleParsing::Read_Buffer_Init()
-{
- //Parsing
- for (size_t Pos=0; Pos<Parser.size(); Pos++)
- {
- //Parsing
- #if MEDIAINFO_TRACE
- Parser[Pos]->Init(Config, Details, Stream, Stream_More);
- #else //MEDIAINFO_TRACE
- Parser[Pos]->Init(Config, Stream, Stream_More);
- #endif //MEDIAINFO_TRACE
- Parser[Pos]->File_Name=File_Name;
- Parser[Pos]->Open_Buffer_Init(File_Size);
- }
-}
-
-//---------------------------------------------------------------------------
-void File__MultipleParsing::Read_Buffer_Unsynched()
-{
- //Parsing
- for (size_t Pos=0; Pos<Parser.size(); Pos++)
- Parser[Pos]->Open_Buffer_Unsynch();
-}
-
-//---------------------------------------------------------------------------
-void File__MultipleParsing::Read_Buffer_Continue()
-{
- //Parsing
- for (size_t Pos=0; Pos<Parser.size(); Pos++)
- {
- //Parsing
- Parser[Pos]->Open_Buffer_Continue(Buffer+Buffer_Offset, (size_t)Element_Size);
- if (File_Offset+Buffer_Size==File_Size)
- Parser[Pos]->Open_Buffer_Finalize();
-
- //Testing if the parser failed
- if (Parser[Pos]->Status[IsFinished] && !Parser[Pos]->Status[IsAccepted])
- {
- delete Parser[Pos];
- Parser.erase(Parser.begin()+Pos);
- Pos--; //for the next position
-
- if (Parser.empty())
- {
- File__Analyze* Temp=new File_Unknown(); Parser.push_back(Temp);
- Read_Buffer_Init();
- }
- }
- else
- {
- //If Parser is found, erasing all the other parsers
- if (Parser.size()>1 && Parser[Pos]->Status[IsAccepted])
- {
- File__Analyze* Temp=Parser[Pos];
- for (size_t To_Delete_Pos=0; To_Delete_Pos<Parser.size(); To_Delete_Pos++)
- if (To_Delete_Pos!=Pos)
- delete Parser[To_Delete_Pos]; //Parser[Pos]=NULL
- Parser.clear();
- Parser.push_back(Temp);
- Pos=0;
- }
-
- if (Parser.size()==1)
- {
- //Status
- if (!Status[IsAccepted] && Parser[Pos]->Status[IsAccepted])
- Status[IsAccepted]=true;
- if (!Status[IsFilled] && Parser[Pos]->Status[IsFilled])
- Status[IsFilled]=true;
- if (!Status[IsUpdated] && Parser[Pos]->Status[IsUpdated])
- Status[IsUpdated]=true;
- if (!Status[IsFinished] && Parser[Pos]->Status[IsFinished])
- Status[IsFinished]=true;
-
- //Positionning if requested
- if (Parser[0]->File_GoTo!=(int64u)-1)
- File_GoTo=Parser[0]->File_GoTo;
- }
- }
- }
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/File__MultipleParsing.h b/src/thirdparty/MediaInfo/MediaInfo/File__MultipleParsing.h
deleted file mode 100644
index 56283b3ef..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/File__MultipleParsing.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_MpegH
-#define MediaInfo_MpegH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File__MultipleParsing
-//***************************************************************************
-
-class File__MultipleParsing : public File__Analyze
-{
-public :
- //Out
- File__Analyze* Parser_Get();
-
- //Constructor
- File__MultipleParsing();
- ~File__MultipleParsing();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - Global
- void Read_Buffer_Init();
- void Read_Buffer_Unsynched();
- void Read_Buffer_Continue();
-
- //Temp
- std::vector<File__Analyze*> Parser;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_ArriRaw.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_ArriRaw.cpp
deleted file mode 100644
index 486a61194..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_ArriRaw.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ARRI RAW files
-//
-// From http://www.fileformat.info/format/png/
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ARRIRAW_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_ArriRaw.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_ArriRaw::File_ArriRaw()
-{
- //Config
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- IsRawStream=true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ArriRaw::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "Arri Raw");
-
- if (!IsSub)
- {
- TestContinuousFileNames();
-
- Stream_Prepare((Config->File_Names.size()>1 || Config->File_IsReferenced_Get())?Stream_Video:Stream_Image);
- Fill(StreamKind_Last, StreamPos_Last, "StreamSize", File_Size);
- if (StreamKind_Last==Stream_Video)
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, Config->File_Names.size());
- }
- else
- Stream_Prepare(StreamKind_Last);
-
- //Configuration
- Frame_Count_NotParsedIncluded=0;
-}
-
-//***************************************************************************
-// Header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_ArriRaw::FileHeader_Begin()
-{
- // Minimum buffer size
- if (Buffer_Size<8)
- return false; // Must wait for more data
-
- // Testing
- if (Buffer[0]!=0x41 // "ARRI.4Vx"
- || Buffer[1]!=0x52
- || Buffer[2]!=0x52
- || Buffer[3]!=0x49
- || Buffer[4]!=0x12
- || Buffer[5]!=0x34
- || Buffer[6]!=0x56
- || Buffer[7]!=0x78)
- {
- Reject("Arri Raw");
- return false;
- }
-
- Accept();
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ArriRaw::Read_Buffer_Unsynched()
-{
- Read_Buffer_Unsynched_OneFramePerFile();
-}
-
-//---------------------------------------------------------------------------
-void File_ArriRaw::Read_Buffer_Continue()
-{
- //Parsing
- Skip_C4( "Signature");
- Skip_C1( "Signature");
- Skip_C3( "Signature");
- Skip_XX(File_Size-8, "Data");
-
- FILLING_BEGIN();
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (!Status[IsFilled])
- {
- Fill();
- if (Config->ParseSpeed<1.0)
- Finish();
- }
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_ArriRaw.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_ArriRaw.h
deleted file mode 100644
index 95617d1ca..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_ArriRaw.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ARRI RAW files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ArriRawH
-#define MediaInfo_File_ArriRawH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_ArriRaw
-//***************************************************************************
-
-class File_ArriRaw : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_ArriRaw();
-
-private :
- //Streams management
- void Streams_Accept();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test() {return Demux_UnpacketizeContainer_Test_OneFramePerFile();}
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID) {return Read_Buffer_Seek_OneFramePerFile(Method, Value, ID);}
- #endif //MEDIAINFO_SEEK
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Bmp.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Bmp.cpp
deleted file mode 100644
index 726aef006..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Bmp.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// BMP - Format
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// From http://www.onicos.com/staff/iz/formats/bmp.html
-//
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_BMP_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Bmp.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Bmp_CompressionMethod(int32u CompressionMethod)
-{
- switch(CompressionMethod)
- {
- case 0 : return "RGB";
- case 1 : return "RLE";
- case 2 : return "RLE";
- case 3 : return "Bit field";
- case 4 : return "JPEG";
- case 5 : return "PNG";
- default: return "";
- }
-}
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Bmp::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<2)
- return false; //Must wait for more data
-
- if (CC2(Buffer)!=0x424D) //"BM"
- {
- Reject("BMP");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Bmp::Read_Buffer_Continue()
-{
- //Parsing
- int32u Size, DIB_Size, Offset;
- Element_Begin1("File header");
- Skip_C2( "Magic");
- Get_L4 (Size, "Size");
- Skip_L2( "Reserved");
- Skip_L2( "Reserved");
- Get_L4 (Offset, "Offset of data");
- Element_End0();
-
- FILLING_BEGIN();
- if (Size!=File_Size)
- {
- Reject("BMP");
- return;
- }
-
- Accept("BMP");
-
- Fill(Stream_General, 0, General_Format, "Bitmap");
-
- Stream_Prepare(Stream_Image);
- FILLING_END();
-
- Element_Begin1("DIB header");
- Peek_L4 (DIB_Size);
- switch (DIB_Size)
- {
- case 12 : BitmapCoreHeader(1); break;
- case 40 : BitmapInfoHeader(1); break;
- case 52 : BitmapInfoHeader(2); break;
- case 56 : BitmapInfoHeader(3); break;
- case 64 : BitmapCoreHeader(2); break;
- case 108 : BitmapInfoHeader(4); break;
- case 124 : BitmapInfoHeader(5); break;
- default : if (DIB_Size>124)
- {
- BitmapInfoHeader((int8u)-1); //Future versions of BitmapInfoHeader (OS/2 is abandonned)
- Skip_XX(14+124-Element_Offset, "Unknown");
- }
- }
- Element_End0();
-
- if (Element_Offset<Offset)
- Skip_XX(Offset-Element_Offset, "Other header data");
- Skip_XX(File_Size-Offset, "Image data");
-
- //No need of more
- Finish("BMP");
-}
-
-//***************************************************************************
-// Buffer - Elements
-//***************************************************************************
-
-void File_Bmp::BitmapCoreHeader(int8u Version)
-{
- #if MEDIAINFO_TRACE
- switch (Version)
- {
- case 1 : Element_Info1("OS/2 1.x BITMAPCOREHEADER"); break;
- case 2 : Element_Info1("OS/2 2.x BITMAPCOREHEADER"); break;
- default: Element_Info1("OS/2 ? BITMAPCOREHEADER");
- }
- #endif //MEDIAINFO_TRACE
-
- //Parsing
- int16u Width, Height, BitsPerPixel;
- Skip_L4( "Size");
- Get_L2 (Width, "Width");
- Get_L2 (Height, "Height");
- Skip_L2( "Color planes");
- Get_L2 (BitsPerPixel, "Bits per pixel");
-
- FILLING_BEGIN();
- if (BitsPerPixel<8)
- BitsPerPixel=8; //It is a palette
-
- Fill(Stream_Image, 0, Image_Width, Width);
- Fill(Stream_Image, 0, Image_Height, Height);
- Fill(Stream_Image, 0, Image_BitDepth, BitsPerPixel);
- Fill(Stream_Image, 0, Image_ColorSpace, "RGB");
- FILLING_END();
-
- if (Version>1) //V2 additional fields for information only
- {
- Skip_L4( "Compression");
- Skip_L4( "ImageDataSize");
- Skip_L4( "XResolution");
- Skip_L4( "YResolution");
- Skip_L4( "ColorsUsed");
- Skip_L4( "ColorsImportant");
- Skip_L2( "Units");
- Skip_L2( "Reserved");
- Skip_L2( "Recording");
- Skip_L2( "Rendering");
- Skip_L4( "Size1");
- Skip_L4( "Size2");
- Skip_L4( "ColorEncoding");
- Skip_L4( "Identifier");
- }
-}
-
-void File_Bmp::BitmapInfoHeader(int8u Version)
-{
- #if MEDIAINFO_TRACE
- switch (Version)
- {
- case 1 : Element_Info1("BITMAPINFOHEADER"); break;
- case 2 : Element_Info1("BITMAPV2INFOHEADER"); break;
- case 3 : Element_Info1("BITMAPV3INFOHEADER"); break;
- case 4 : Element_Info1("BITMAPV4HEADER"); break;
- case 5 : Element_Info1("BITMAPV5HEADER"); break;
- default: Element_Info1("BITMAPV?HEADER");
- }
- #endif //MEDIAINFO_TRACE
-
- //Parsing
- int32u Width, Height, CompressionMethod;
- int16u BitsPerPixel;
- Skip_L4( "Size");
- Get_L4 (Width, "Width");
- Get_L4 (Height, "Height");
- Skip_L2( "Color planes");
- Get_L2 (BitsPerPixel, "Bits per pixel");
- Get_L4 (CompressionMethod, "Compression method"); Param_Info1(Bmp_CompressionMethod(CompressionMethod));
- Skip_L4( "Image size");
- Skip_L4( "Horizontal resolution");
- Skip_L4( "Vertical resolution");
- Skip_L4( "Number of colors in the color palette");
- Skip_L4( "Number of important colors used");
-
- FILLING_BEGIN();
- if (BitsPerPixel<8)
- BitsPerPixel=8; //It is a palette
-
- Fill(Stream_Image, 0, Image_Width, Width);
- Fill(Stream_Image, 0, Image_Height, Height);
- Fill(Stream_Image, 0, Image_BitDepth, BitsPerPixel);
- Fill(Stream_Image, 0, Image_Format, Bmp_CompressionMethod(CompressionMethod));
- Fill(Stream_Image, 0, Image_Codec, Bmp_CompressionMethod(CompressionMethod));
- Fill(Stream_Image, 0, Image_ColorSpace, "RGB");
- FILLING_END();
-
- if (Version>1)
- {
- Skip_L4( "Red Channel bit mask");
- Skip_L4( "Green Channel bit mask");
- Skip_L4( "Blue Channel bit mask");
- if (Version>2)
- {
- Skip_L4( "Alpha Channel bit mask");
- if (Version>3)
- {
- Skip_L4( "Color Space endpoints");
- Skip_L4( "Color Space endpoints");
- Skip_L4( "Color Space endpoints");
- Skip_L4( "Color Space endpoints");
- Skip_L4( "Color Space endpoints");
- Skip_L4( "Color Space endpoints");
- Skip_L4( "Color Space endpoints");
- Skip_L4( "Red Gamma");
- Skip_L4( "Green Gamma");
- Skip_L4( "Blue Gamma");
- if (Version>4)
- {
- Skip_L4( "Intent");
- Skip_L4( "ProfileData");
- Skip_L4( "ProfileSize");
- Skip_L4( "Reserved");
- }
- }
- }
- }
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Bmp.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Bmp.h
deleted file mode 100644
index c3b65c160..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Bmp.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Bitmap files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_BmpH
-#define MediaInfo_File_BmpH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Bmp
-//***************************************************************************
-
-class File_Bmp : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Elements
- void BitmapCoreHeader(int8u Version); //OS/2
- void BitmapInfoHeader(int8u Version); //Windows
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dds.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dds.cpp
deleted file mode 100644
index 67e896938..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dds.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DDS (DirectDraw Surface) files
-//
-// From http://msdn.microsoft.com/en-us/library/windows/desktop/bb943982%28v=vs.85%29.aspx
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DDS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Dds.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Dds::File_Dds()
-{
- //Config
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- IsRawStream=true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dds::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "DDS");
-
- if (!IsSub)
- {
- TestContinuousFileNames();
-
- Stream_Prepare((Config->File_Names.size()>1 || Config->File_IsReferenced_Get())?Stream_Video:Stream_Image);
- Fill(StreamKind_Last, StreamPos_Last, "StreamSize", File_Size);
- if (StreamKind_Last==Stream_Video)
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, Config->File_Names.size());
- if (pfFlags&0x4) //DDPF_FOURCC
- CodecID_Fill(Ztring().From_CC4(FourCC), StreamKind_Last, StreamPos_Last, InfoCodecID_Format_Riff, Stream_Video);
- if (Flags&0x2) //DDSD_HEIGHT
- Fill(StreamKind_Last, 0, "Height", Height);
- if (Flags&0x4) //DDSD_WIDTH
- Fill(StreamKind_Last, 0, "Width", Width);
- if (Flags&0x800000) //DDSD_DEPTH
- Fill(StreamKind_Last, 0, "BitDepth", Depth);
- }
- else
- Stream_Prepare(StreamKind_Last);
-
- //Configuration
- Frame_Count_NotParsedIncluded=0;
-}
-
-//***************************************************************************
-// Header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Dds::FileHeader_Begin()
-{
- // Minimum buffer size
- if (Buffer_Size<8)
- return false; // Must wait for more data
-
- // Testing
- if (Buffer[0]!=0x44 // "DDS "
- || Buffer[1]!=0x44
- || Buffer[2]!=0x53
- || Buffer[3]!=0x20
- || LittleEndian2int32u(Buffer+4)<124)
- {
- Reject();
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Dds::FileHeader_Parse()
-{
- //Parsing
- int32u Size;
- Skip_C4( "Magic");
- Get_L4 (Size, "Size");
- Get_L4 (Flags, "Flags");
- Get_L4 (Height, "Height");
- Get_L4 (Width, "Width");
- Skip_L4( "PitchOrLinearSize");
- Skip_L4( "Depth");
- Skip_L4( "MipMapCount");
- Skip_XX(4*11, "Reserved1");
- Element_Begin1("Pixel format");
- int32u pf_Size;
- Get_L4 (pf_Size, "Size");
- if (pf_Size>=32)
- {
- Get_L4 (pfFlags, "Flags");
- Get_C4 (FourCC, "FourCC");
- Skip_L4( "RGBBitCount");
- Skip_L4( "RBitMask");
- Skip_L4( "GBitMask");
- Skip_L4( "BBitMask");
- Skip_L4( "ABitMask");
- if (pf_Size>32)
- Skip_XX(Size-32, "(Data)");
- }
- else if (pf_Size>4)
- Skip_XX(pf_Size-4, "");
- Element_End0();
- Skip_L4( "Caps");
- Skip_L4( "Caps2");
- Skip_L4( "Caps3");
- Skip_L4( "Caps4");
- Skip_L4( "Reserved2");
- if (Size>124)
- Skip_XX(Size-124, "(Data)");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dds::Read_Buffer_Unsynched()
-{
- Read_Buffer_Unsynched_OneFramePerFile();
-}
-
-//---------------------------------------------------------------------------
-void File_Dds::Read_Buffer_Continue()
-{
- Skip_XX(File_Size-(File_Offset+Buffer_Offset), "Data");
-
- FILLING_BEGIN();
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (!Status[IsAccepted])
- {
- Accept();
- Fill();
- if (Config->ParseSpeed<1.0)
- Finish();
- }
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dds.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dds.h
deleted file mode 100644
index 5871ed0eb..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dds.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DDS (DirectDraw Surface) files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DdsH
-#define MediaInfo_File_DdsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Dds
-//***************************************************************************
-
-class File_Dds : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Dds();
-
-private :
- //Streams management
- void Streams_Accept();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test() {return Demux_UnpacketizeContainer_Test_OneFramePerFile();}
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID) {return Read_Buffer_Seek_OneFramePerFile(Method, Value, ID);}
- #endif //MEDIAINFO_SEEK
- void Read_Buffer_Continue ();
-
- // Temp
- int32u Flags;
- int32u Width;
- int32u Height;
- int32u Depth;
- int32u pfFlags;
- int32u FourCC;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dpx.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dpx.cpp
deleted file mode 100644
index 554958b1d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dpx.cpp
+++ /dev/null
@@ -1,848 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DPX_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Dpx.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* DPX_Orientation[]=
-{
- "Left to right, Top to bottom",
- "Right to left, Top to bottom",
- "Left to right, Bottom to top",
- "Right to left, Bottom to top",
- "Top to bottom, Left to right",
- "Top to bottom, Right to left",
- "Bottom to top, Left to right",
- "Bottom to top, Right to left",
- "Reserved for future use"
-};
-
-//---------------------------------------------------------------------------
-const char* DPX_Descriptors0[]=
-{
- "User defined (or unspecified single component)",
- "Red (R)",
- "Green (G)",
- "Blue (B)",
- "Alpha (matte)",
- "", //No info
- "Luma (Y)",
- "Color Difference (CB, CR, subsampled by two)",
- "Depth (Z)",
- "Composite video"
-};
-
-const char* DPX_Descriptors50[]=
-{
- "R,G,B",
- "R,G,B, Alpha (A)",
- "A, B, G, R"
-};
-
-const char* DPX_Descriptors100[]=
-{
- "CB, Y, CR, Y (4:2:2) ---- based on SMPTE 125M",
- "CB, Y, A, CR, Y, A (4:2:2:4)",
- "CB, Y, CR (4:4:4)",
- "CB, Y, CR, A (4:4:4:4)"
-};
-
-const char* DPX_Descriptors150[]=
-{
- "User-defined 2-component element",
- "User-defined 3-component element",
- "User-defined 4-component element",
- "User-defined 5-component element",
- "User-defined 6-component element",
- "User-defined 7-component element",
- "User-defined 8-component element"
-};
-
-const char* DPX_Descriptors(int8u i)
-{
- if(i<10)
- return DPX_Descriptors0[i];
- if(i<50)
- return "Reserved for future single components";
- if(i<53)
- return DPX_Descriptors50[i-50];
- if(i<100)
- return "Reserved for future RGB ++ formats";
- if(i<104)
- return DPX_Descriptors100[i-100];
- if(i<150)
- return "Reserved for future CBYCR ++ formats";
- if(i<157)
- return "Reserved for future single components";
- return "Reserved for future formats";
-}
-
-//---------------------------------------------------------------------------
-const char* Mpegv_transfer_characteristics(int8u transfer_characteristics);
-const char* DPX_TransferCharacteristic(int8u TransferCharacteristic)
-{
- switch (TransferCharacteristic)
- {
- case 1 : return "Printing density";
- case 2 : return Mpegv_transfer_characteristics(8); //Linear
- case 3 : return "Logarithmic"; //Value not specified in specs
- case 5 : //SMPTE 274M, for HDTV, mapped to BT.709
- case 6 : return Mpegv_transfer_characteristics(1); //BT.709
- case 7 : return Mpegv_transfer_characteristics(5); //BT.470 System B, BT.470 System G (typo in specs?)
- case 8 : return Mpegv_transfer_characteristics(4); //BT.470 System M (typo in specs?)
- case 9 : //BT.601 (NTSC)
- case 10 : return Mpegv_transfer_characteristics(6); //BT.601 (PAL)
- case 11 : return "Z (depth) - linear";
- case 12 : return "Z (depth) - homogeneous";
- default : return "";
- }
-};
-
-//---------------------------------------------------------------------------
-//---------------------------------------------------------------------------
-const char* Mpegv_colour_primaries(int8u colour_primaries);
-const char* DPX_ColorimetricSpecification(int8u ColorimetricSpecification)
-{
- switch (ColorimetricSpecification)
- {
- case 1 : return "Printing density";
- case 5 : //SMPTE 274M, for HDTV, mapped to BT.709
- case 6 : return Mpegv_colour_primaries(1); //BT.709
- case 7 : return Mpegv_colour_primaries(5); //BT.470 System B, BT.470 System G (typo in specs?), mapped to BT.601 PAL
- case 8 : return Mpegv_colour_primaries(6); //BT.470 System M (typo in specs?), mapped to BT.601 NTSC
- case 9 : return Mpegv_colour_primaries(6); //BT.601 NTSC
- case 10 : return Mpegv_colour_primaries(5); //BT.601 PAL
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* DPX_ValidBitDephs(int8u i)
-{
- switch(i)
- {
- case 1 :
- case 8 :
- case 10 :
- case 12 :
- case 16 :
- return "integer";
- case 32 :
- return "IEEE floating point (R32)";
- case 64 :
- return "IEEE floating point (R64)";
- default :
- return "invalid";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* DPX_ComponentDataPackingMethod[]=
-{
- "Packed into 32-bit words",
- "Filled to 32-bit words, method A",
- "Filled to 32-bit words, method B",
- "Reserved for future use",
- "Reserved for future use",
- "Reserved for future use",
- "Reserved for future use",
- "Reserved for future use"
-};
-
-//---------------------------------------------------------------------------
-const char* DPX_ComponentDataEncodingMethod[]=
-{
- "No encoding applied",
- "Run-length encoded",
- "Reserved for future use",
- "Reserved for future use",
- "Reserved for future use",
- "Reserved for future use",
- "Reserved for future use",
- "Reserved for future use"
-};
-
-//---------------------------------------------------------------------------
-const char* DPX_VideoSignalStandard0[]=
-{
- "Undefined",
- "NTSC",
- "PAL",
- "PAL-M",
- "SECAM"
-};
-
-const char* DPX_VideoSignalStandard50[]=
-{
- "YCBCR ITU-R 601-5 525-line, 2:1 interlace, 4:3 aspect ratio",
- "YCBCR ITU-R 601-5 625-line, 2:1 interlace, 4:3 aspect ratio"
-};
-
-const char* DPX_VideoSignalStandard100[]=
-{
- "YCBCR ITU-R 601-5 525-line, 2:1 interlace, 16:9 aspect ratio",
- "YCBCR ITU-R 601-5 625-line, 2:1 interlace, 16:9 aspect ratio"
-};
-
-const char* DPX_VideoSignalStandard150[]=
-{
- "YCBCR 1050-line, 2:1 interlace, 16:9 aspect ratio",
- "YCBCR 1125-line, 2:1 interlace, 16:9 aspect ratio (SMPTE 274M)",
- "YCBCR 1250-line, 2:1 interlace, 16:9 aspect ratio",
- "YCBCR 1125-line, 2:1 interlace, 16:9 aspect ratio (SMPTE 240M)"
-};
-
-const char* DPX_VideoSignalStandard200[]=
-{
- "YCBCR 525-line, 1:1 progressive, 16:9 aspect ratio",
- "YCBCR 625-line, 1:1 progressive, 16:9 aspect ratio",
- "YCBCR 750-line, 1:1 progressive, 16:9 aspect ratio (SMPTE 296M)",
- "YCBCR 1125-line, 1:1 progressive, 16:9 aspect ratio (SMPTE 274M)"
-};
-
-const char* DPX_VideoSignalStandard(int8u i)
-{
- if(i<5)
- return DPX_VideoSignalStandard0[i];
- if(i<50)
- return "Reserved for other composite video";
- if(i<52)
- return DPX_VideoSignalStandard50[i-50];
- if(i<100)
- return "Reserved for future component video";
- if(i<102)
- return DPX_VideoSignalStandard100[i-100];
- if(i<150)
- return "Reserved for future widescreen";
- if(i<154)
- return DPX_VideoSignalStandard150[i-150];
- if(i<200)
- return "Reserved for future high-definition interlace";
- if(i<204)
- return DPX_VideoSignalStandard200[i-200];
- return "Reserved for future high-definition progressive";
-}
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-enum Elements
-{
- Pos_GenericSection,
- Pos_IndustrySpecific,
- Pos_UserDefined,
- Pos_Padding,
- Pos_ImageData,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Dpx::File_Dpx()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("DPX");
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dpx::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "DPX");
- Fill(Stream_General, 0, General_Format_Version, Version==1?"Version 1":"Version 2");
-
- if (!IsSub)
- {
- TestContinuousFileNames();
-
- Stream_Prepare((Config->File_Names.size()>1 || Config->File_IsReferenced_Get())?Stream_Video:Stream_Image);
- if (File_Size!=(int64u)-1)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize), File_Size);
- if (StreamKind_Last==Stream_Video)
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, Config->File_Names.size());
- }
- else
- Stream_Prepare(Stream_Image);
-
- //Configuration
- Buffer_MaximumSize=64*1024*1024; //Some big frames are possible (e.g YUV 4:2:2 10 bits 1080p)
- Frame_Count_NotParsedIncluded=0;
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Dpx::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- int32u Magic=CC4(Buffer);
- switch (Magic)
- {
- case 0x802A5FD7 : // (v1 Big)
- case 0xD75F2A80 : // (v1 Little)
- case 0x53445058 : //"SPDX" (v2 Big)
- case 0x58504453 : //"XDPS" (v2 Little)
- break;
- default :
- Reject();
- return false;
- }
-
- //Generic Section size
- if (Buffer_Size<28)
- return false; //Must wait for more data
- Sizes_Pos=Pos_GenericSection;
- switch (Magic)
- {
- case 0x802A5FD7 : // (v1 Big)
- case 0xD75F2A80 : // (v1 Little)
- Version=1;
- break;
- case 0x58504453 : //"XDPS" (v2 Little)
- case 0x53445058 : //"SPDX" (v2 Big)
- Version=2;
- break;
- default : ;
- }
- switch (Magic)
- {
- case 0xD75F2A80 : // (v1 Little)
- case 0x58504453 : //"XDPS" (v2 Little)
- LittleEndian=true;
- break;
- case 0x802A5FD7 : // (v1 Big)
- case 0x53445058 : //"SPDX" (v2 Big)
- LittleEndian=false;
- break;
- default : ;
- }
-
- //All should be OK...
- Accept();
-
- return true;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dpx::Header_Parse()
-{
- //Filling
- Header_Fill_Code(Sizes_Pos); //We use Sizes_Pos as the unique key
- if (Sizes.empty())
- {
- if (Element_Size<28)
- {
- Element_WaitForMoreData();
- return;
- }
- int32u Size=LittleEndian?LittleEndian2int32u(Buffer+Buffer_Offset+24):BigEndian2int32u(Buffer+Buffer_Offset+24);
- if (Size==(int32u)-1)
- Size=LittleEndian?LittleEndian2int32u(Buffer+Buffer_Offset+4):BigEndian2int32u(Buffer+Buffer_Offset+4);
- Header_Fill_Size(Size);
- }
- else
- Header_Fill_Size(Sizes[Sizes_Pos]);
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::Data_Parse()
-{
- if (Version==1)
- {
- switch (Element_Code)
- {
- case Pos_GenericSection : GenericSectionHeader_v1(); break;
- case Pos_IndustrySpecific : IndustrySpecificHeader_v1(); break;
- case Pos_UserDefined : UserDefinedHeader_v1(); break;
- case Pos_Padding : Padding(); break;
- case Pos_ImageData : ImageData(); break;
- default : ;
- }
- }
- else
- {
- switch (Element_Code)
- {
- case Pos_GenericSection : GenericSectionHeader_v2(); break;
- case Pos_IndustrySpecific : IndustrySpecificHeader_v2(); break;
- case Pos_UserDefined : UserDefinedHeader_v2(); break;
- case Pos_Padding : Padding(); break;
- case Pos_ImageData : ImageData(); break;
- default : ;
- }
- }
-
- do
- Sizes_Pos++; //We go automaticly to the next block
- while (Sizes_Pos<Sizes.size() && Sizes[Sizes_Pos]==0);
- if (Sizes_Pos>=Sizes.size())
- {
- Sizes.clear();
- Sizes_Pos=0;
-
- if (!Status[IsFilled])
- Fill();
- if (File_Offset+Buffer_Offset+Element_Size<Config->File_Current_Size)
- GoTo(Config->File_Current_Size);
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dpx::GenericSectionHeader_v1()
-{
- Element_Name("Generic section header");
-
- //Parsing
- Element_Begin1("File information");
- Ztring CreationDate, CreationTime;
- int32u Size_Header, Size_Total, Size_Generic, Size_Industry, Size_User;
- Skip_B4( "Magic number");
- Get_X4 (Size_Header, "Offset to image data");
- Get_X4 (Size_Generic, "Generic section header length");
- Get_X4 (Size_Industry, "Industry specific header length");
- Get_X4 (Size_User, "User-defined header length");
- Get_X4 (Size_Total, "Total image file size");
- Skip_String(8, "Version number of header format");
- Skip_UTF8 (100, "FileName");
- Get_UTF8 (12, CreationDate, "Creation Date");
- Get_UTF8 (12, CreationTime, "Creation Time");
- Skip_XX(36, "Reserved for future use");
- Element_End0();
-
- Element_Begin1("Image information");
- int8u ImageElements;
- Info_B1(ImageOrientation, "Image orientation"); Param_Info1(DPX_Orientation[ImageOrientation>8?8:ImageOrientation]);
- Get_B1 (ImageElements, "Number of image elements");
- Skip_B2( "Unused");
- if (ImageElements>8)
- ImageElements=8;
- for(int8u ImageElement=0; ImageElement<ImageElements; ImageElement++)
- GenericSectionHeader_v1_ImageElement();
- if (ImageElements!=8)
- Skip_XX((8-ImageElements)*28, "Padding");
- Skip_BFP4(9, "White point - x");
- Skip_BFP4(9, "White point - y");
- Skip_BFP4(9, "Red primary chromaticity - x");
- Skip_BFP4(9, "Red primary chromaticity - u");
- Skip_BFP4(9, "Green primary chromaticity - x");
- Skip_BFP4(9, "Green primary chromaticity - y");
- Skip_BFP4(9, "Blue primary chromaticity - x");
- Skip_BFP4(9, "Blue primary chromaticity - y");
- Skip_UTF8(200, "Label text");
- Skip_XX(28, "Reserved for future use");
- Element_End0();
-
- Element_Begin1("Image Data Format Information");
- Skip_B1( "Data interleave");
- Skip_B1( "Packing");
- Skip_B1( "Data signed or unsigned");
- Skip_B1( "Image sense");
- Skip_B4( "End of line padding");
- Skip_B4( "End of channel padding");
- Skip_XX(20, "Reserved for future use");
-
- Element_Begin1("Image Origination Information");
- Skip_B4( "X offset");
- Skip_B4( "Y offset");
- Skip_UTF8 (100, "FileName");
- Get_UTF8 (12, CreationDate, "Creation Date");
- Get_UTF8 (12, CreationTime, "Creation Time");
- Skip_UTF8(64, "Input device");
- Skip_UTF8(32, "Input device model number");
- Skip_UTF8(32, "Input device serial number");
- Skip_BFP4(9, "X input device pitch");
- Skip_BFP4(9, "Y input device pitch");
- Skip_BFP4(9, "Image gamma of capture device");
- Skip_XX(40, "Reserved for future use");
- Element_End0();
-
- FILLING_BEGIN();
- //Coherency tests
- if (File_Offset+Buffer_Offset+Size_Total>=Config->File_Current_Size)
- Size_Total=(int32u)(Config->File_Current_Size-(File_Offset+Buffer_Offset)); //The total size is bigger than the real size
- if (Size_Generic+Size_Industry+Size_User>Size_Header || Size_Header>Size_Total)
- {
- Reject();
- return;
- }
-
- //Filling sizes
- Sizes.push_back(Size_Header);
- Sizes.push_back(Size_Industry);
- Sizes.push_back(Size_User);
- Sizes.push_back(Size_Header-(Size_Generic+Size_Industry+Size_User)); //Size of padding
- Sizes.push_back(Size_Total-Size_Header); //Size of image
-
- //Filling meta
- if (Frame_Count==0)
- {
- Fill(Stream_General, 0, General_Encoded_Date, CreationDate+__T(' ')+CreationTime); //ToDo: transform it in UTC
- Fill(StreamKind_Last, StreamPos_Last, "Encoded_Date", CreationDate+__T(' ')+CreationTime); //ToDo: transform it in UTC
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::GenericSectionHeader_v1_ImageElement()
-{
- Element_Begin1("image element");
- int32u Width, Height;
- Skip_B1( "Designator - Byte 0");
- Skip_B1( "Designator - Byte 1");
- Skip_B1( "Bits per pixel");
- Skip_B1( "Unused");
- Get_X4 (Width, "Pixels per line");
- Get_X4 (Height, "Lines per image element");
- Skip_BFP4(9, "Minimum data value");
- Skip_BFP4(9, "Minimum quantity represented");
- Skip_BFP4(9, "Maximum data value");
- Skip_BFP4(9, "Maximum quantity represented");
- Element_End0();
-
- FILLING_BEGIN();
- if (Frame_Count==0)
- {
- Fill(StreamKind_Last, StreamPos_Last, "Format", "DPX");
- Fill(StreamKind_Last, StreamPos_Last, "Format_Version", "Version 1");
- Fill(StreamKind_Last, StreamPos_Last, "Width", Width);
- Fill(StreamKind_Last, StreamPos_Last, "Height", Height);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::GenericSectionHeader_v2()
-{
- Element_Name("Generic section header");
-
- //Parsing
- Element_Begin1("File information");
- std::string CreationDate, Creator, Project, Copyright;
- int32u Size_Header, Size_Total, Size_Generic, Size_Industry, Size_User;
- Skip_String(4, "Magic number");
- Get_X4 (Size_Header, "Offset to image data");
- Skip_String(8, "Version number of header format");
- Get_X4 (Size_Total, "Total image file size");
- Skip_B4( "Ditto Key");
- Get_X4 (Size_Generic, "Generic section header length");
- Get_X4 (Size_Industry, "Industry specific header length");
- Get_X4 (Size_User, "User-defined header length");
- Skip_UTF8 (100, "FileName");
- Get_String (24, CreationDate, "Creation Date");
- Get_String (100, Creator, "Creator");
- Get_String (200, Project, "Project");
- Get_String (200, Copyright, "Right to use or copyright statement");
- Skip_B4( "Encryption key");
- Skip_XX(104, "Reserved for future use");
- Element_End0();
-
- Element_Begin1("Image information");
- int32u Width, Height, PAR_H, PAR_V;
- int16u ImageElements;
- Info_B2(ImageOrientation, "Image orientation");Param_Info1(DPX_Orientation[ImageOrientation]);
- Get_X2 (ImageElements, "Number of image elements");
- if (ImageElements>8)
- ImageElements=8;
- Get_X4 (Width, "Pixels per line");
- Get_X4 (Height, "Lines per image element");
- for(int16u ImageElement=0; ImageElement<ImageElements; ImageElement++)
- GenericSectionHeader_v2_ImageElement();
- if (ImageElements!=8)
- Skip_XX((8-ImageElements)*72, "Padding");
- Skip_XX(52, "Reserved for future use");
- Element_End0();
-
- Element_Begin1("Image source information");
- Skip_B4( "X Offset");
- Skip_B4( "Y Offset");
- Skip_BFP4(9, "X center");
- Skip_BFP4(9, "Y center");
- Skip_B4( "X original size");
- Skip_B4( "Y original size");
- Skip_UTF8(100, "Source image filename");
- Skip_UTF8(24, "Source image date/time");
- Skip_UTF8(32, "Input device name");
- Skip_UTF8(32, "Input device serial number");
- Element_Begin1("Border validity");
- Skip_B2( "XL border");
- Skip_B2( "XR border");
- Skip_B2( "YT border");
- Skip_B2( "YB border");
- Element_End0();
- Get_X4 (PAR_H, "Pixel ratio : horizontal");
- Get_X4 (PAR_V, "Pixel ratio : vertical");
-
- Element_Begin1("Additional source image information");
- Skip_BFP4(9, "X scanned size");
- Skip_BFP4(9, "Y scanned size");
- Skip_XX(20, "Reserved for future use");
- Element_End0();
-
- FILLING_BEGIN();
- //Coherency tests
- if (File_Offset+Buffer_Offset+Size_Total!=Config->File_Current_Size)
- Size_Total=(int32u)(Config->File_Current_Size-(File_Offset+Buffer_Offset)); //The total size is bigger than the real size
- if (Size_Generic==(int32u)-1)
- Size_Generic=(int32u)Element_Size;
- if (Size_Industry==(int32u)-1)
- Size_Industry=0;
- if (Size_User==(int32u)-1)
- Size_User=0;
- if (Size_Generic+Size_Industry+Size_User>Size_Header || Size_Header>Size_Total)
- {
- Reject();
- return;
- }
-
- //Filling sizes
- Sizes.push_back(Size_Header);
- Sizes.push_back(Size_Industry);
- Sizes.push_back(Size_User);
- Sizes.push_back(Size_Header-(Size_Generic+Size_Industry+Size_User)); //Size of padding
- Sizes.push_back(Size_Total-Size_Header); //Size of image
-
- //Filling meta
- if (Frame_Count==0)
- {
- Fill(Stream_General, 0, General_Encoded_Date, CreationDate); //ToDo: transform it in UTC
- Fill(StreamKind_Last, StreamPos_Last, "Encoded_Date", CreationDate); //ToDo: transform it in UTC
- Fill(Stream_General, 0, General_Encoded_Library, Creator);
- Fill(StreamKind_Last, StreamPos_Last, "Encoded_Library", Creator);
- Fill(Stream_General, 0, "Project", Project); //ToDo: map to a MediaInfo field (which one?)
- Fill(Stream_General, 0, General_Copyright, Copyright);
-
- Fill(StreamKind_Last, StreamPos_Last, "Width", Width);
- Fill(StreamKind_Last, StreamPos_Last, "Height", Height);
- if (PAR_V && PAR_H!=(int32u)-1 && PAR_V!=(int32u)-1)
- Fill(StreamKind_Last, StreamPos_Last, "PixelAspectRatio", ((float)PAR_H)/PAR_V);
- else
- Fill(StreamKind_Last, StreamPos_Last, "PixelAspectRatio", (float)1, 3);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::GenericSectionHeader_v2_ImageElement()
-{
- Element_Begin1("image element");
- int8u TransferCharacteristic, ColorimetricSpecification, BitDephs;
- Info_B4(DataSign, "Data sign");Param_Info1((DataSign==0?"unsigned":"signed"));
- Skip_B4( "Reference low data code value");
- Skip_BFP4(9, "Reference low quantity represented");
- Skip_B4( "Reference high data code value");
- Skip_BFP4(9, "Reference high quantity represented");
- Info_B1(Descriptor, "Descriptor");Param_Info1(DPX_Descriptors(Descriptor));
- Get_B1 (TransferCharacteristic, "Transfer characteristic");Param_Info1(DPX_TransferCharacteristic(TransferCharacteristic));
- Get_B1 (ColorimetricSpecification, "Colorimetric specification");Param_Info1(DPX_ColorimetricSpecification(ColorimetricSpecification));
- Get_B1 (BitDephs, "Bit depth");Param_Info1(DPX_ValidBitDephs(BitDephs));
- Info_B2(ComponentDataPackingMethod, "Packing");Param_Info1((ComponentDataPackingMethod<8?DPX_ComponentDataPackingMethod[ComponentDataPackingMethod]:"invalid"));
- Info_B2(ComponentDataEncodingMethod, "Encoding");Param_Info1((ComponentDataEncodingMethod<8?DPX_ComponentDataEncodingMethod[ComponentDataEncodingMethod]:"invalid"));
- Skip_B4( "Offset to data");
- Skip_B4( "End-of-line padding");
- Skip_B4( "End-of-image padding");
- Skip_UTF8(32, "Description of image element");
- Element_End0();
-
- FILLING_BEGIN();
- if (Frame_Count==0)
- {
- Fill(StreamKind_Last, StreamPos_Last, "Format", "DPX");
- Fill(StreamKind_Last, StreamPos_Last, "Format_Version", "Version 2");
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", BitDephs);
- Fill(StreamKind_Last, StreamPos_Last, "colour_description_present", "Yes");
- Fill(StreamKind_Last, StreamPos_Last, "colour_primaries", DPX_TransferCharacteristic(TransferCharacteristic));
- Fill(StreamKind_Last, StreamPos_Last, "transfer_characteristics", DPX_ColorimetricSpecification(ColorimetricSpecification));
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::IndustrySpecificHeader_v1()
-{
- Element_Name("Motion picture industry specific header");
-
- //Parsing
- Element_Begin1("Motion-picture film information");
- Skip_B1( "?");
- Skip_B1( "?");
- Skip_B1( "?");
- Skip_B1( "?");
- Skip_B4( "?");
- Skip_B4( "?");
- Skip_UTF8(32, "?");
- Skip_B4( "?");
- Skip_B4( "?");
- Skip_UTF8(32, "?");
- Skip_UTF8(200, "?");
- Skip_XX(740, "Reserved for future use");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::IndustrySpecificHeader_v2()
-{
- Element_Name("Industry specific header");
-
- //Parsing
- Element_Begin1("Motion-picture film information");
- Skip_String(2, "Film mfg. ID code");
- Skip_String(2, "Film type");
- Skip_String(2, "Offset in perfs");
- Skip_String(6, "Prefix");
- Skip_String(4, "Count");
- Skip_String(32, "Format - e.g. Academy");
- Skip_B4( "Frame position in sequence");
- Skip_B4( "Sequence length (frames)");
- Skip_B4( "Held count (1 = default)");
- Skip_BFP4(9, "Frame rate of original (frames/s)");
- Skip_BFP4(9, "Shutter angle of camera in degrees");
- Skip_UTF8(32, "Frame identification - e.g. keyframe");
- Skip_UTF8(100, "Slate information");
- Skip_XX(56, "Reserved for future use");
- Element_End0();
-
- Element_Begin1("Television information");
- Skip_B4( "SMPTE time code");
- Skip_B4( "SMPTE user bits");
- Info_B1(Interlace, "Interlace");Param_Info1((Interlace==0?"noninterlaced":"2:1 interlace"));
- Skip_B1( "Field number");
- Info_B1(VideoSignalStandard, "Video signal standard");Param_Info1(DPX_VideoSignalStandard(VideoSignalStandard));
- Skip_B1( "Zero");
- Skip_BFP4(9, "Horizontal sampling rate (Hz)");
- Skip_BFP4(9, "Vertical sampling rate (Hz)");
- Skip_BFP4(9, "Temporal sampling rate or frame rate (Hz)");
- Skip_BFP4(9, "Time offset from sync to first pixel (ms)");
- Skip_BFP4(9, "Gamma");
- Skip_BFP4(9, "Black level code value");
- Skip_BFP4(9, "Black gain");
- Skip_BFP4(9, "Breakpoint");
- Skip_BFP4(9, "Reference white level code value");
- Skip_BFP4(9, "Integration time (s)");
- Skip_XX(76, "Reserved for future use");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::UserDefinedHeader_v1()
-{
- Element_Name("User defined header");
-
- //Parsing
- Skip_XX(Sizes[Pos_UserDefined], "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::UserDefinedHeader_v2()
-{
- Element_Name("User defined header");
-
- //Parsing
- if (Sizes[Pos_UserDefined]<32)
- {
- //Not in spec
- Skip_XX(Sizes[Pos_UserDefined], "Unknown");
- return;
- }
- Skip_UTF8(32, "User identification");
- Skip_XX(Sizes[Pos_UserDefined]-32, "User defined");
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::Padding()
-{
- Element_Name("Padding");
-
- //Parsing
- Skip_XX(Sizes[Pos_Padding], "Padding");
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::ImageData()
-{
- Element_Name("Image Data");
-
- //Parsing
- Skip_XX(Sizes[Pos_ImageData], "Data");
-
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
-
- if (Config->ParseSpeed<1.0)
- Finish("DPX"); //No need of more
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dpx::Get_X2(int16u &Info, const char* Name)
-{
- if (LittleEndian)
- Get_L2 (Info, Name);
- else
- Get_B2 (Info, Name);
-}
-
-//---------------------------------------------------------------------------
-void File_Dpx::Get_X4(int32u &Info, const char* Name)
-{
- if (LittleEndian)
- Get_L4 (Info, Name);
- else
- Get_B4 (Info, Name);
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_DPX_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dpx.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dpx.h
deleted file mode 100644
index 784ddf5b5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Dpx.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DPX files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DpxH
-#define MediaInfo_File_DpxH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Dpx
-//***************************************************************************
-
-class File_Dpx : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Dpx();
-
-private :
- //Streams management
- void Streams_Accept();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test() {return Demux_UnpacketizeContainer_Test_OneFramePerFile();}
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Unsynched() {Read_Buffer_Unsynched_OneFramePerFile();}
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID) {return Read_Buffer_Seek_OneFramePerFile(Method, Value, ID);}
- #endif //MEDIAINFO_SEEK
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void GenericSectionHeader_v1();
- void GenericSectionHeader_v2();
- void GenericSectionHeader_v1_ImageElement();
- void GenericSectionHeader_v2_ImageElement();
- void IndustrySpecificHeader_v1();
- void IndustrySpecificHeader_v2();
- void UserDefinedHeader_v1();
- void UserDefinedHeader_v2();
- void Padding();
- void ImageData();
-
- //Temp
- std::vector<int32u> Sizes;
- size_t Sizes_Pos;
- int8u Version;
- bool LittleEndian;
-
- //Helpers
- void Get_X2 (int16u &Info, const char* Name);
- void Get_X4 (int32u &Info, const char* Name);
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Exr.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Exr.cpp
deleted file mode 100644
index 85f32d03d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Exr.cpp
+++ /dev/null
@@ -1,339 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_EXR_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Exr.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-enum Elements
-{
- Pos_FileInformation,
- Pos_GenericSection,
- Pos_IndustrySpecific,
- Pos_UserDefined,
- Pos_Padding,
- Pos_ImageData,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Exr::File_Exr()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("EXR");
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Exr::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "EXR");
-
- if (!IsSub)
- {
- TestContinuousFileNames();
-
- Stream_Prepare((Config->File_Names.size()>1 || Config->File_IsReferenced_Get())?Stream_Video:Stream_Image);
- if (File_Size!=(int64u)-1)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize), File_Size);
- if (StreamKind_Last==Stream_Video)
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, Config->File_Names.size());
- }
- else
- Stream_Prepare(Stream_Image);
-
- //Configuration
- Buffer_MaximumSize=64*1024*1024; //Some big frames are possible (e.g YUV 4:2:2 10 bits 1080p)
- Frame_Count_NotParsedIncluded=0;
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Exr::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- if (CC4(Buffer)!=0x762F3101) //"v/1"+1
- {
- Reject();
- return false;
- }
-
- //All should be OK...
- Accept();
-
- return true;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Exr::Header_Begin()
-{
- //Header
- if (Buffer_Offset+4>Buffer_Size)
- return false;
- if (CC4(Buffer+Buffer_Offset)==0x762F3101) //"v/1"+1
- return Buffer_Offset+12<=Buffer_Size;
-
- //Name
- name_End=0;
- while (Buffer_Offset+name_End<Buffer_Size)
- {
- if (Buffer[Buffer_Offset+name_End]=='\0')
- break;
- if (name_End==31)
- break;
- name_End++;
- }
- if (Buffer_Offset+name_End>=Buffer_Size)
- return false;
- if (name_End>=31)
- {
- Reject();
- return false;
- }
- if (name_End==0)
- return true;
-
- //Type
- type_End=0;
- while (Buffer_Offset+name_End+1+type_End<Buffer_Size)
- {
- if (Buffer[Buffer_Offset+name_End+1+type_End]=='\0')
- break;
- if (type_End==31)
- break;
- type_End++;
- }
-
- if (Buffer_Offset+name_End+1+type_End>=Buffer_Size)
- return false;
- if (type_End>=31)
- {
- Reject();
- return false;
- }
-
- if (Buffer_Offset+name_End+1+type_End+1+4>=Buffer_Size)
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Exr::Header_Parse()
-{
- //Header
- if (CC4(Buffer+Buffer_Offset)==0x762F3101) //"v/1"+1
- {
- //Filling
- Header_Fill_Code(0, "File header");
- Header_Fill_Size(12);
- return;
- }
-
- //Image data
- if (name_End==0)
- {
- //Filling
- Header_Fill_Code(0, "Image data");
- Header_Fill_Size(ImageData_End-(File_Offset+Buffer_Offset));
- return;
- }
-
- int32u size;
- Get_String(name_End, name, "name");
- Element_Offset++; //Null byte
- Get_String(type_End, type, "type");
- Element_Offset++; //Null byte
- Get_L4 (size, "size");
-
- //Filling
- Header_Fill_Code(0, Ztring().From_Local(name.c_str()));
- Header_Fill_Size(name_End+1+type_End+1+4+size);
-}
-
-//---------------------------------------------------------------------------
-void File_Exr::Data_Parse()
-{
- if (CC4(Buffer+Buffer_Offset)==0x762F3101) //"v/1"+1 //Header
- Header();
- else if (name_End==0)
- ImageData();
- else if (name=="comments" && type=="string")
- comments();
- else if (name=="compression" && type=="compression" && Element_Size==1)
- compression();
- else if (name=="dataWindow" && type=="box2i" && Element_Size==16)
- dataWindow();
- else if (name=="displayWindow" && type=="box2i" && Element_Size==16)
- displayWindow();
- else if (name=="pixelAspectRatio" && type=="float" && Element_Size==4)
- pixelAspectRatio();
- else
- Skip_XX(Element_Size, "value");
-}
-
-//---------------------------------------------------------------------------
-void File_Exr::Header()
-{
- //Parsing
- int32u Flags;
- int8u Version;
- Skip_L4( "Magic number");
- Get_L1 (Version, "Version field");
- Get_L3 (Flags, "Flags");
-
- //Filling
- if (Frame_Count==0)
- {
- Fill(Stream_General, 0, General_Format_Version, __T("Version ")+Ztring::ToZtring(Version));
- Fill(StreamKind_Last, 0, "Format", "EXR");
- Fill(StreamKind_Last, 0, "Format_Version", __T("Version ")+Ztring::ToZtring(Version));
- Fill(StreamKind_Last, 0, "Format_Profile", (Flags&0x02)?"Tile":"Line");
- }
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- ImageData_End=Config->File_Current_Size;
-}
-
-//---------------------------------------------------------------------------
-void File_Exr::ImageData()
-{
- Skip_XX(Element_Size, "data");
-
- if (!Status[IsFilled])
- Fill();
- if (Config->ParseSpeed<1.0)
- Finish();
-}
-
-//---------------------------------------------------------------------------
-void File_Exr::comments ()
-{
- //Parsing
- Ztring value;
- Get_Local(Element_Size, value, "value");
-
- //Filling
- if (Frame_Count==1)
- Fill(StreamKind_Last, 0, General_Comment, value);
-}
-
-//---------------------------------------------------------------------------
-void File_Exr::compression ()
-{
- //Parsing
- int8u value;
- Get_L1 (value, "value");
-
- //Filling
- std::string Compression;
- switch (value)
- {
- case 0x00 : Compression="raw"; break;
- case 0x01 : Compression="RLZ"; break;
- case 0x02 : Compression="ZIPS"; break;
- case 0x03 : Compression="ZIP"; break;
- case 0x04 : Compression="PIZ"; break;
- case 0x05 : Compression="PXR24"; break;
- case 0x06 : Compression="B44"; break;
- case 0x07 : Compression="B44A"; break;
- default : ;
- }
-
- if (Frame_Count==1)
- Fill(StreamKind_Last, 0, "Format_Compression", Compression.c_str());
-}
-
-//---------------------------------------------------------------------------
-void File_Exr::dataWindow ()
-{
- //Parsing
- int32u xMin, yMin, xMax, yMax;
- Get_L4 (xMin, "xMin");
- Get_L4 (yMin, "yMin");
- Get_L4 (xMax, "xMax");
- Get_L4 (yMax, "yMax");
-}
-
-//---------------------------------------------------------------------------
-void File_Exr::displayWindow ()
-{
- //Parsing
- int32u xMin, yMin, xMax, yMax;
- Get_L4 (xMin, "xMin");
- Get_L4 (yMin, "yMin");
- Get_L4 (xMax, "xMax");
- Get_L4 (yMax, "yMax");
-
- //Filling
- if (Frame_Count==1)
- {
- Fill(StreamKind_Last, 0, "Width", xMax-xMin+1);
- Fill(StreamKind_Last, 0, "Height", yMax-yMin+1);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Exr::pixelAspectRatio ()
-{
- //Parsing
- float value;
- Get_LF4(value, "value");
-
- //Filling
- if (Frame_Count==1)
- Fill(StreamKind_Last, 0, "PixelAspectRatio", value?value:1, 3);
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_EXR_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Exr.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Exr.h
deleted file mode 100644
index 84e651233..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Exr.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about EXR files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ExrH
-#define MediaInfo_File_ExrH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Exr
-//***************************************************************************
-
-class File_Exr : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Exr();
-
-private :
- //Streams management
- void Streams_Accept();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test() {return Demux_UnpacketizeContainer_Test_OneFramePerFile();}
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Unsynched() {Read_Buffer_Unsynched_OneFramePerFile();}
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID) {return Read_Buffer_Seek_OneFramePerFile(Method, Value, ID);}
- #endif //MEDIAINFO_SEEK
-
- //Buffer - Per element
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Header();
- void ImageData();
- void comments();
- void compression();
- void dataWindow();
- void displayWindow();
- void pixelAspectRatio();
-
- //Temp
- std::string name;
- std::string type;
- size_t name_End;
- size_t type_End;
- int64u ImageData_End;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Gif.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Gif.cpp
deleted file mode 100644
index 8998a31e8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Gif.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// From http://www.onicos.com/staff/iz/formats/gif.html
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_GIF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Gif.h"
-#include <cmath>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Gif::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<3)
- return false; //Must wait for more data
-
- if (CC3(Buffer)!=0x474946) //"GIF"
- {
- Reject("GIF");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Gif::Read_Buffer_Continue()
-{
- //Parsing
- Ztring Version;
- int16u Width, Height;
- int8u BackgroundColorIndex, PixelAspectRatio, Resolution, GCT_Size;
- bool GCT_Flag, Sort;
- Skip_Local(3, "Header");
- Get_Local (3, Version, "Version");
- Get_L2 (Width, "Logical Screen Width");
- Get_L2 (Height, "Logical Screen Height");
- BS_Begin();
- Get_SB ( GCT_Flag, "Global Color Table Flag");
- Get_S1 (3, Resolution, "Color Resolution");
- Get_SB ( Sort, "Sort Flag to Global Color Table");
- Get_S1 (3, GCT_Size, "Size of Global Color Table"); Param_Info1(Ztring::ToZtring((int16u)pow(2.0, 1+GCT_Size)));
- BS_End();
- Get_L1 (BackgroundColorIndex, "Background Color Index");
- Get_L1 (PixelAspectRatio, "Pixel Aspect Ratio");
- if (GCT_Flag)
- Skip_XX((int16u)pow(2.0, 1+GCT_Size)*3, "Global Color Table");
- Element_End0();
-
- FILLING_BEGIN();
- Accept("GIF");
-
- Stream_Prepare(Stream_Image);
- Fill(Stream_Image, 0, Image_Width, Width);
- Fill(Stream_Image, 0, Image_Height, Height);
- Fill(Stream_Image, 0, Image_Format, __T("GIF"));
- Fill(Stream_Image, 0, Image_Format_Profile, Version);
- Fill(Stream_Image, 0, Image_Codec, __T("GIF")+Version);
- if (PixelAspectRatio)
- Fill(Stream_Image, 0, Image_PixelAspectRatio, (((float)PixelAspectRatio)+15)/64);
-
- Finish("GIF");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Gif.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Gif.h
deleted file mode 100644
index 80d6db7e3..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Gif.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about GIF files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_GifH
-#define MediaInfo_File_GifH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Gif
-//***************************************************************************
-
-class File_Gif : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Ico.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Ico.cpp
deleted file mode 100644
index 7e98a6163..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Ico.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ICO_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Ico.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ico::File_Ico()
-{
- IcoDataSize=0;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ico::Streams_Fill()
-{
- Fill(Stream_General, 0, General_Format, Type==1?"ICO":"CUR");
-
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- {
- Stream_Prepare(Stream_Image);
- Fill(Stream_Image, StreamPos_Last, Image_Width, Streams[Pos].Width?Streams[Pos].Width:256);
- Fill(Stream_Image, StreamPos_Last, Image_Height, Streams[Pos].Height?Streams[Pos].Height:256);
- if (Type==1)
- Fill(Stream_Image, StreamPos_Last, Image_BitDepth, Streams[Pos].BitsPerPixel);
- Fill(Stream_Image, StreamPos_Last, Image_StreamSize, Streams[Pos].Size);
- }
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ico::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- if (CC2(Buffer) || (LittleEndian2int16u(Buffer+2)!=1 && LittleEndian2int16u(Buffer+2)!=2))
- {
- Reject("ICO");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Ico::FileHeader_Parse()
-{
- //Parsing
- Skip_L2( "Reserved");
- Get_L2 (Type, "Type");
- Get_L2 (Count, "Count");
-}
-
-//***************************************************************************
-
-// Buffer - Per element
-//***************************************************************************
-//---------------------------------------------------------------------------
-void File_Ico::Header_Parse()
-{
- Header_Fill_Size(16);
- Header_Fill_Code(0, "Directory");
-}
-
-//---------------------------------------------------------------------------
-void File_Ico::Data_Parse()
-{
- //Parsing
- int32u Size, Offset;
- int16u BitsPerPixel;
- int8u Width, Height;
- Get_L1 (Width, "Width");
- Get_L1 (Height, "Height");
- Skip_L1( "Colour count");
- Skip_L1( "Reserved");
- Skip_L2( Type==1?"Colour planes":"X hotspot");
- Get_L2 (BitsPerPixel, Type==1?"Bits per pixel":"Y hotspot");
- Get_L4 (Size, "Size of the bitmap data");
- Get_L4 (Offset, "Offset of the bitmap data");
-
- FILLING_BEGIN_PRECISE();
- stream Stream;
- Stream.Width=Width;
- Stream.Height=Height;
- Stream.BitsPerPixel=BitsPerPixel;
- Stream.Size=Size;
- Stream.Offset=Offset;
- Streams.push_back(Stream);
-
- IcoDataSize+=Size;
- if (Offset>File_Size || File_Offset+Buffer_Offset+Element_Size+IcoDataSize>File_Size)
- Reject("ICO");
- Count--;
- if (Count==0)
- {
- if (File_Offset+Buffer_Offset+Element_Size+IcoDataSize!=File_Size)
- Reject("ICO");
- else
- {
- Accept("ICO");
- Finish("ICO");
- }
- }
- FILLING_END();
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Ico.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Ico.h
deleted file mode 100644
index d125b55ff..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Ico.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Icon files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_IcoH
-#define MediaInfo_File_IcoH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Ico
-//***************************************************************************
-
-class File_Ico : public File__Analyze
-{
-public:
- //Constructor/Destructor
- File_Ico();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse ();
-
- //Buffer - Per element
- void Header_Parse ();
- void Data_Parse ();
-
- //Temp
- int64u IcoDataSize;
- int16u Type;
- int16u Count;
- struct stream
- {
- int32u Size;
- int32u Offset;
- int16u BitsPerPixel;
- int8u Width;
- int8u Height;
- };
- std::vector<stream> Streams;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Jpeg.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Jpeg.cpp
deleted file mode 100644
index e016f4c21..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Jpeg.cpp
+++ /dev/null
@@ -1,1149 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Links:
-//
-// http://www.fileformat.info/format/jpeg/
-// http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html
-// http://www.w3.org/Graphics/JPEG/jfif3.pdf
-// http://www.sentex.net/~mwandel/jhead/
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_JPEG_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Jpeg.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/Utils.h"
-#include <vector>
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- const int16u TEM =0xFF01;
- const int16u SOC =0xFF4F; //JPEG 2000
- const int16u SIZ =0xFF51; //JPEG 2000
- const int16u COD =0xFF52; //JPEG 2000
- const int16u COC =0xFF53; //JPEG 2000
- const int16u TLM =0xFF55; //JPEG 2000
- const int16u PLM =0xFF57; //JPEG 2000
- const int16u PLT =0xFF58; //JPEG 2000
- const int16u QCD =0xFF5C; //JPEG 2000
- const int16u QCC =0xFF5D; //JPEG 2000
- const int16u RGN =0xFF5E; //JPEG 2000
- const int16u PPM =0xFF60; //JPEG 2000
- const int16u PPT =0xFF61; //JPEG 2000
- const int16u CME =0xFF64; //JPEG 2000
- const int16u SOT =0xFF90; //JPEG 2000
- const int16u SOP =0xFF91; //JPEG 2000
- const int16u EPH =0xFF92; //JPEG 2000
- const int16u SOD =0xFF93; //JPEG 2000
- const int16u S0F0=0xFFC0;
- const int16u S0F1=0xFFC1;
- const int16u S0F2=0xFFC2;
- const int16u S0F3=0xFFC3;
- const int16u DHT =0xFFC4;
- const int16u S0F5=0xFFC5;
- const int16u S0F6=0xFFC6;
- const int16u S0F7=0xFFC7;
- const int16u JPG =0xFFC8;
- const int16u S0F9=0xFFC9;
- const int16u S0FA=0xFFCA;
- const int16u S0FB=0xFFCB;
- const int16u DAC =0xFFCC;
- const int16u S0FD=0xFFCD;
- const int16u S0FE=0xFFCE;
- const int16u S0FF=0xFFCF;
- const int16u RST0=0xFFD0;
- const int16u RST1=0xFFD1;
- const int16u RST2=0xFFD2;
- const int16u RST3=0xFFD3;
- const int16u RST4=0xFFD4;
- const int16u RST5=0xFFD5;
- const int16u RST6=0xFFD6;
- const int16u RST7=0xFFD7;
- const int16u SOI =0xFFD8;
- const int16u EOI =0xFFD9; //EOC in JPEG 2000
- const int16u SOS =0xFFDA;
- const int16u DQT =0xFFDB;
- const int16u DNL =0xFFDC;
- const int16u DRI =0xFFDD;
- const int16u DHP =0xFFDE;
- const int16u EXP =0xFFDF;
- const int16u APP0=0xFFE0;
- const int16u APP1=0xFFE1;
- const int16u APP2=0xFFE2;
- const int16u APP3=0xFFE3;
- const int16u APP4=0xFFE4;
- const int16u APP5=0xFFE5;
- const int16u APP6=0xFFE6;
- const int16u APP7=0xFFE7;
- const int16u APP8=0xFFE8;
- const int16u APP9=0xFFE9;
- const int16u APPA=0xFFEA;
- const int16u APPB=0xFFEB;
- const int16u APPC=0xFFEC;
- const int16u APPD=0xFFED;
- const int16u APPE=0xFFEE;
- const int16u APPF=0xFFEF;
- const int16u JPG0=0xFFF0;
- const int16u JPG1=0xFFF1;
- const int16u JPG2=0xFFF2;
- const int16u JPG3=0xFFF3;
- const int16u JPG4=0xFFF4;
- const int16u JPG5=0xFFF5;
- const int16u JPG6=0xFFF6;
- const int16u JPG7=0xFFF7;
- const int16u JPG8=0xFFF8;
- const int16u JPG9=0xFFF9;
- const int16u JPGA=0xFFFA;
- const int16u JPGB=0xFFFB;
- const int16u JPGC=0xFFFC;
- const int16u JPGD=0xFFFD;
- const int16u COM =0xFFFE;
-}
-
-//---------------------------------------------------------------------------
-// Borland C++ does not accept local template
-struct Jpeg_samplingfactor
-{
- int8u Ci;
- int8u Hi;
- int8u Vi;
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Jpeg::File_Jpeg()
-{
- //Config
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Jpeg;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- MustSynchronize=true;
- IsRawStream=true;
-
- //In
- StreamKind=Stream_Image;
- Interlaced=false;
- #if MEDIAINFO_DEMUX
- FrameRate=0;
- #endif //MEDIAINFO_DEMUX
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Jpeg::Streams_Accept()
-{
- if (!IsSub)
- {
- TestContinuousFileNames();
-
- Stream_Prepare(Config->File_Names.size()>1?Stream_Video:StreamKind);
- if (File_Size!=(int64u)-1)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize), File_Size);
- if (StreamKind_Last==Stream_Video)
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, Config->File_Names.size());
- }
- else
- Stream_Prepare(StreamKind);
-
- //Configuration
- Buffer_MaximumSize=64*1024*1024; //Some big frames are possible (e.g YUV 4:2:2 10 bits 1080p)
- Frame_Count_NotParsedIncluded=0;
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::Streams_Finish()
-{
- if (StreamKind_Last==Stream_Video && Config->ParseSpeed>=1.0)
- Fill (Stream_Video, 0, Video_StreamSize, Buffer_TotalBytes, 10, true);
-}
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Jpeg::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<3)
- return false; //Must wait for more data
-
- if (Buffer[2]!=0xFF
- || (CC2(Buffer)!=Elements::SOI
- && CC2(Buffer)!=Elements::SOC))
- {
- Reject("JPEG");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Jpeg::Synchronize()
-{
- //Synchronizing
- while(Buffer_Offset+2<=Buffer_Size && (Buffer[Buffer_Offset ]!=0xFF
- || Buffer[Buffer_Offset+1]==0x00))
- Buffer_Offset++;
-
- if (Buffer_Offset+1==Buffer_Size && Buffer[Buffer_Offset ]!=0xFF)
- Buffer_Offset++;
-
- if (Buffer_Offset+2>Buffer_Size)
- return false;
-
- //Synched is OK
- Synched=true;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Jpeg::Synched_Test()
-{
- if (SOS_SOD_Parsed)
- return true; ///No sync after SOD
-
- //Must have enough buffer for having header
- if (Buffer_Offset+2>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset]!=0xFF)
- {
- Synched=false;
- return true;
- }
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::Synched_Init()
-{
- APP0_JFIF_Parsed=false;
- SOS_SOD_Parsed=false;
- APPE_Adobe0_transform=(int8u)-1;
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Jpeg::Demux_UnpacketizeContainer_Test()
-{
- if (!IsSub)
- {
- if (!Status[IsAccepted])
- Accept();
- if (Config->File_Names.size()>1)
- return Demux_UnpacketizeContainer_Test_OneFramePerFile();
- }
-
- if (Interlaced && Buffer_Offset==0)
- {
- bool StartIsFound=false;
- while (Demux_Offset+2<=Buffer_Size)
- {
- int16u code=BigEndian2int16u(Buffer+Demux_Offset);
- Demux_Offset+=2;
- switch (code)
- {
- case Elements::SOD : //JPEG-2000 start
- StartIsFound=true;
- case Elements::TEM :
- case Elements::RST0 :
- case Elements::RST1 :
- case Elements::RST2 :
- case Elements::RST3 :
- case Elements::RST4 :
- case Elements::RST5 :
- case Elements::RST6 :
- case Elements::RST7 :
- case Elements::SOC :
- case Elements::SOI :
- case Elements::EOI :
- break;
- default :
- if (Demux_Offset+2>Buffer_Size)
- break;
- {
- int16u size=BigEndian2int16u(Buffer+Demux_Offset);
- if (Demux_Offset+2+size>Buffer_Size)
- break;
- Demux_Offset+=size;
- if (code==Elements::SOS) //JPEG start
- StartIsFound=true;
- }
- }
- if (StartIsFound)
- break;
- }
-
- while (Demux_Offset+2<=Buffer_Size)
- {
- while (Demux_Offset<Buffer_Size && Buffer[Demux_Offset]!=0xFF)
- Demux_Offset++;
- if (Demux_Offset+2<=Buffer_Size && Buffer[Demux_Offset+1]==0xD9) //EOI (JPEG 2000)
- break;
- Demux_Offset++;
- }
- if (Demux_Offset+2<=Buffer_Size)
- Demux_Offset+=2;
- }
- else
- Demux_Offset=Buffer_Size;
-
- if (Interlaced)
- {
- if (Field_Count==0 && FrameRate && Demux_Offset!=Buffer_Size)
- FrameRate*=2; //Now field rate
- if (FrameRate)
- FrameInfo.DUR=float64_int64s(1000000000/FrameRate); //Actually, field or frame rate
- }
-
- Demux_UnpacketizeContainer_Demux();
-
- if (Interlaced)
- {
- if (FrameInfo.DTS!=(int64u)-1 && FrameInfo.DUR!=(int64u)-1)
- FrameInfo.DTS+=FrameInfo.DUR;
- }
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Jpeg::Read_Buffer_Unsynched()
-{
- SOS_SOD_Parsed=false;
-
- Read_Buffer_Unsynched_OneFramePerFile();
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::Read_Buffer_Continue()
-{
- if (Config->ParseSpeed>=1.0 && IsSub && Status[IsFilled])
- {
- #if MEDIAINFO_DEMUX
- if (Buffer_TotalBytes<Demux_TotalBytes)
- {
- Skip_XX(Demux_TotalBytes-Buffer_TotalBytes, "Data"); //We currently don't want to parse data during demux
- Param_Info1(Frame_Count);
- if (Interlaced)
- {
- Field_Count++;
- Field_Count_InThisBlock++;
- }
- if (!Interlaced || Field_Count%2==0)
- {
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- }
- return;
- }
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_DEMUX
- if (!Demux_UnpacketizeContainer)
- #endif //MEDIAINFO_DEMUX
- {
- Skip_XX(Buffer_Size, "Data"); //We currently don't want to parse data during demux
- Param_Info1(Frame_Count);
- if (Interlaced)
- Field_Count+=2;
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- }
- }
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Jpeg::Header_Parse()
-{
- if (SOS_SOD_Parsed)
- {
- Header_Fill_Code(0, "Data");
- if (!Header_Parser_Fill_Size())
- {
- Element_WaitForMoreData();
- return;
- }
- return;
- }
-
- //Parsing
- int16u code, size;
- Get_B2 (code, "Marker");
- switch (code)
- {
- case Elements::TEM :
- case Elements::RST0 :
- case Elements::RST1 :
- case Elements::RST2 :
- case Elements::RST3 :
- case Elements::RST4 :
- case Elements::RST5 :
- case Elements::RST6 :
- case Elements::RST7 :
- case Elements::SOC :
- case Elements::SOD :
- case Elements::SOI :
- case Elements::EOI :
- size=0; break;
- default : Get_B2 (size, "Fl - Frame header length");
- }
-
- //Filling
- Header_Fill_Code(code, Ztring().From_CC2(code));
- Header_Fill_Size(2+size);
-}
-
-//---------------------------------------------------------------------------
-bool File_Jpeg::Header_Parser_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset;
-
- #if MEDIAINFO_DEMUX
- if (Buffer_TotalBytes+2<Demux_TotalBytes)
- Buffer_Offset_Temp=(size_t)(Demux_TotalBytes-(Buffer_TotalBytes+2));
- #endif //MEDIAINFO_DEMUX
-
- while (Buffer_Offset_Temp+2<=Buffer_Size)
- {
- while (Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0xFF)
- Buffer_Offset_Temp++;
- if (Buffer_Offset_Temp+2<=Buffer_Size && Buffer[Buffer_Offset_Temp+1]==0xD9) //EOI
- break;
- Buffer_Offset_Temp++;
- }
-
- //Must wait more data?
- if (Buffer_Offset_Temp+2>Buffer_Size)
- {
- if (/*FrameIsAlwaysComplete ||*/ File_Offset+Buffer_Size>=File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::Data_Parse()
-{
- #define CASE_INFO(_NAME, _DETAIL) \
- case Elements::_NAME : Element_Info1(#_NAME); Element_Info1(_DETAIL); _NAME(); break;
-
- //Parsing
- if (SOS_SOD_Parsed)
- {
- Skip_XX(Element_Size, "Data");
- SOS_SOD_Parsed=false;
- return;
- }
- switch (Element_Code)
- {
- CASE_INFO(TEM , "TEM");
- CASE_INFO(SOC , "Start of codestream"); //JPEG 2000
- CASE_INFO(SIZ , "Image and tile size"); //JPEG 2000
- CASE_INFO(COD , "Coding style default"); //JPEG 2000
- CASE_INFO(COC , "Coding style component"); //JPEG 2000
- CASE_INFO(TLM , "Tile-part lengths, main header"); //JPEG 2000
- CASE_INFO(PLM , "Packet length, main header"); //JPEG 2000
- CASE_INFO(PLT , "Packet length, tile-part header"); //JPEG 2000
- CASE_INFO(QCD , "Quantization default"); //JPEG 2000
- CASE_INFO(QCC , "Quantization component "); //JPEG 2000
- CASE_INFO(RGN , "Region-of-interest"); //JPEG 2000
- CASE_INFO(PPM , "Packed packet headers, main header"); //JPEG 2000
- CASE_INFO(PPT , "Packed packet headers, tile-part header"); //JPEG 2000
- CASE_INFO(CME , "Comment and extension"); //JPEG 2000
- CASE_INFO(SOT , "Start of tile-part"); //JPEG 2000
- CASE_INFO(SOP , "Start of packet"); //JPEG 2000
- CASE_INFO(EPH , "End of packet header"); //JPEG 2000
- CASE_INFO(SOD , "Start of data"); //JPEG 2000
- CASE_INFO(S0F0, "Baseline DCT (Huffman)");
- CASE_INFO(S0F1, "Extended sequential DCT (Huffman)");
- CASE_INFO(S0F2, "Progressive DCT (Huffman)");
- CASE_INFO(S0F3, "Lossless (sequential) (Huffman)");
- CASE_INFO(DHT , "Define Huffman Tables");
- CASE_INFO(S0F5, "Differential sequential DCT (Huffman)");
- CASE_INFO(S0F6, "Differential progressive DCT (Huffman)");
- CASE_INFO(S0F7, "Differential lossless (sequential) (Huffman)");
- CASE_INFO(JPG , "Reserved for JPEG extensions");
- CASE_INFO(S0F9, "Extended sequential DCT (Arithmetic)");
- CASE_INFO(S0FA, "Progressive DCT (Arithmetic)");
- CASE_INFO(S0FB, "Lossless (sequential) (Arithmetic)");
- CASE_INFO(DAC , "Define Arithmetic Coding");
- CASE_INFO(S0FD, "Differential sequential DCT (Arithmetic)");
- CASE_INFO(S0FE, "Differential progressive DCT (Arithmetic)");
- CASE_INFO(S0FF, "Differential lossless (sequential) (Arithmetic)");
- CASE_INFO(RST0, "Restart Interval Termination 0");
- CASE_INFO(RST1, "Restart Interval Termination 1");
- CASE_INFO(RST2, "Restart Interval Termination 2");
- CASE_INFO(RST3, "Restart Interval Termination 3");
- CASE_INFO(RST4, "Restart Interval Termination 4");
- CASE_INFO(RST5, "Restart Interval Termination 5");
- CASE_INFO(RST6, "Restart Interval Termination 6");
- CASE_INFO(RST7, "Restart Interval Termination 7");
- CASE_INFO(SOI , "Start Of Image");
- CASE_INFO(EOI , "End Of Image"); //Is EOC (End of codestream) in JPEG 2000
- CASE_INFO(SOS , "Start Of Scan");
- CASE_INFO(DQT , "Define Quantization Tables");
- CASE_INFO(DNL , "Define Number of Lines");
- CASE_INFO(DRI , "Define Restart Interval");
- CASE_INFO(DHP , "Define Hierarchical Progression");
- CASE_INFO(EXP , "Expand Reference Components");
- CASE_INFO(APP0, "Application-specific marker 0");
- CASE_INFO(APP1, "Application-specific marker 1");
- CASE_INFO(APP2, "Application-specific marker 2");
- CASE_INFO(APP3, "Application-specific marker 3");
- CASE_INFO(APP4, "Application-specific marker 4");
- CASE_INFO(APP5, "Application-specific marker 5");
- CASE_INFO(APP6, "Application-specific marker 6");
- CASE_INFO(APP7, "Application-specific marker 7");
- CASE_INFO(APP8, "Application-specific marker 8");
- CASE_INFO(APP9, "Application-specific marker 9");
- CASE_INFO(APPA, "Application-specific marker 10");
- CASE_INFO(APPB, "Application-specific marker 11");
- CASE_INFO(APPC, "Application-specific marker 12");
- CASE_INFO(APPD, "Application-specific marker 13");
- CASE_INFO(APPE, "Application-specific marker 14");
- CASE_INFO(APPF, "Application-specific marker 15");
- CASE_INFO(JPG0, "JPG");
- CASE_INFO(JPG1, "JPG");
- CASE_INFO(JPG2, "JPG");
- CASE_INFO(JPG3, "JPG");
- CASE_INFO(JPG4, "JPG");
- CASE_INFO(JPG5, "JPG");
- CASE_INFO(JPG6, "JPG");
- CASE_INFO(JPG7, "JPG");
- CASE_INFO(JPG8, "JPG");
- CASE_INFO(JPG9, "JPG");
- CASE_INFO(JPGA, "JPG");
- CASE_INFO(JPGB, "JPG");
- CASE_INFO(JPGC, "JPG");
- CASE_INFO(JPGD, "JPG");
- CASE_INFO(COM , "Comment");
- default : Element_Info1("Reserved");
- Skip_XX(Element_Size, "Data");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Jpeg::SIZ()
-{
- //Parsing
- vector<float> SamplingFactors;
- vector<int8u> BitDepths;
- int8u SamplingFactors_Max=0;
- int32u Xsiz, Ysiz;
- int16u Count;
- Skip_B2( "Rsiz - Capability of the codestream");
- Get_B4 (Xsiz, "Xsiz - Image size X");
- Get_B4 (Ysiz, "Ysiz - Image size Y");
- Skip_B4( "XOsiz - Image offset X");
- Skip_B4( "YOsiz - Image offset Y");
- Skip_B4( "tileW - Size of tile W");
- Skip_B4( "tileH - Size of tile H");
- Skip_B4( "XTOsiz - Upper-left tile offset X");
- Skip_B4( "YTOsiz - Upper-left tile offset Y");
- Get_B2 (Count, "Components and initialize related arrays");
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Initialize related array");
- int8u BitDepth, compSubsX, compSubsY;
- BS_Begin();
- Skip_SB( "Signed");
- Get_S1 (7, BitDepth, "BitDepth"); Param_Info1(1+BitDepth); Element_Info1(1+BitDepth);
- BS_End();
- Get_B1 ( compSubsX, "compSubsX"); Element_Info1(compSubsX);
- Get_B1 ( compSubsY, "compSubsY"); Element_Info1(compSubsY);
- Element_End0();
-
- //Filling list of HiVi
- if (compSubsX)
- {
- SamplingFactors.push_back(((float)compSubsY)/compSubsX);
- if (((float)compSubsY)/compSubsX>SamplingFactors_Max)
- SamplingFactors_Max=(int8u)((float)compSubsY)/compSubsX;
- }
-
- if (BitDepths.empty() || BitDepth!=BitDepths[0])
- BitDepths.push_back(BitDepth);
- }
-
- FILLING_BEGIN_PRECISE();
- if (Frame_Count==0 && Field_Count==0)
- {
- Accept("JPEG 2000");
- Fill("JPEG 2000");
-
- if (Count_Get(StreamKind_Last)==0)
- Stream_Prepare(StreamKind_Last);
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Format), "JPEG 2000");
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Codec), "JPEG 2000");
- if (StreamKind_Last==Stream_Image)
- Fill(Stream_Image, 0, Image_Codec_String, "JPEG 2000", Unlimited, true, true); //To Avoid automatic filling
- Fill(StreamKind_Last, 0, StreamKind_Last==Stream_Image?(size_t)Image_Width:(size_t)Video_Width, Xsiz);
- Fill(StreamKind_Last, 0, StreamKind_Last==Stream_Image?(size_t)Image_Height:(size_t)Video_Height, Ysiz*(Interlaced?2:1)); //If image is from interlaced content, must multiply height by 2
-
- if (BitDepths.size()==1)
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_BitDepth), 1+BitDepths[0]);
-
- //Chroma subsampling
- if (SamplingFactors_Max)
- while (SamplingFactors_Max<4)
- {
- for (size_t Pos=0; Pos<SamplingFactors.size(); Pos++)
- SamplingFactors[Pos]*=2;
- SamplingFactors_Max*=2;
- }
- while (SamplingFactors.size()<3)
- SamplingFactors.push_back(0);
- Ztring ChromaSubsampling;
- for (size_t Pos=0; Pos<SamplingFactors.size(); Pos++)
- ChromaSubsampling+=Ztring::ToZtring(SamplingFactors[Pos], 0)+__T(':');
- if (!ChromaSubsampling.empty())
- {
- ChromaSubsampling.resize(ChromaSubsampling.size()-1);
- Fill(StreamKind_Last, 0, "ChromaSubsampling", ChromaSubsampling);
-
- //Not for sure
- if (!IsSub)
- {
- if (ChromaSubsampling==__T("4:2:0") || ChromaSubsampling==__T("4:2:2"))
- Fill(StreamKind_Last, 0, "ColorSpace", "YUV");
- else if (ChromaSubsampling==__T("4:4:4"))
- Fill(StreamKind_Last, 0, "ColorSpace", "RGB");
- }
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::COD()
-{
- //Parsing
- int8u Style, Style2, Levels, MultipleComponentTransform;
- bool PrecinctUsed;
- Get_B1 (Style, "Scod - Style");
- Get_Flags (Style, 0, PrecinctUsed, "Precinct used");
- Skip_Flags(Style, 1, "Use SOP (start of packet)");
- Skip_Flags(Style, 2, "Use EPH (end of packet header)");
- Get_B1 (Levels, "Number of decomposition levels");
- Skip_B1( "Progression order");
- Skip_B2( "Number of layers");
- Info_B1(DimX, "Code-blocks dimensions X (2^(n+2))"); Param_Info2(1<<(DimX+2), " pixels");
- Info_B1(DimY, "Code-blocks dimensions Y (2^(n+2))"); Param_Info2(1<<(DimY+2), " pixels");
- Get_B1 (Style2, "Style of the code-block coding passes");
- Skip_Flags(Style2, 0, "Selective arithmetic coding bypass");
- Skip_Flags(Style2, 1, "MQ states for all contexts");
- Skip_Flags(Style2, 2, "Regular termination");
- Skip_Flags(Style2, 3, "Vertically stripe-causal context formation");
- Skip_Flags(Style2, 4, "Error resilience info is embedded on MQ termination");
- Skip_Flags(Style2, 5, "Segmentation marker is to be inserted at the end of each normalization coding pass");
- Skip_B1( "Transform");
- Get_B1(MultipleComponentTransform, "Multiple component transform");
- if (PrecinctUsed)
- {
- BS_Begin();
- Skip_S1(4, "LL sub-band width");
- Skip_S1(4, "LL sub-band height");
- BS_End();
- for (int16u Pos=0; Pos<Levels; Pos++)
- {
- Element_Begin1("Decomposition level");
- BS_Begin();
- Skip_S1(4, "decomposition level width");
- Skip_S1(4, "decomposition level height");
- BS_End();
- Element_End0();
- }
- }
-
- FILLING_BEGIN();
- if (Frame_Count==0 && Field_Count==0)
- {
- switch (MultipleComponentTransform)
- {
- case 0x01 : Fill(StreamKind_Last, 0, "Compression_Mode", "Lossless"); break;
- case 0x02 : Fill(StreamKind_Last, 0, "Compression_Mode", "Lossy"); break;
- default : ;
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::QCD()
-{
- //Parsing
- Skip_B1( "Sqcd - Style");
- Skip_XX(Element_Size-Element_Offset, "QCD data");
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::SOD()
-{
- SOS_SOD_Parsed=true;
- if (Interlaced)
- {
- Field_Count++;
- Field_Count_InThisBlock++;
- }
- if (!Interlaced || Field_Count%2==0)
- {
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (Status[IsFilled])
- Fill();
- if (Config->ParseSpeed<1.0)
- Finish("JPEG 2000"); //No need of more
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::SOF_()
-{
- //Parsing
- vector<Jpeg_samplingfactor> SamplingFactors;
- int16u Height, Width;
- int8u Resolution, Count;
- Get_B1 (Resolution, "P - Sample precision");
- Get_B2 (Height, "Y - Number of lines");
- Get_B2 (Width, "X - Number of samples per line");
- Get_B1 (Count, "Nf - Number of image components in frame");
- for (int8u Pos=0; Pos<Count; Pos++)
- {
- Jpeg_samplingfactor SamplingFactor;
- Element_Begin1("Component");
- Get_B1 ( SamplingFactor.Ci, "Ci - Component identifier"); if (SamplingFactor.Ci>Count) Element_Info1(Ztring().append(1, (Char)SamplingFactor.Ci)); else Element_Info1(SamplingFactor.Ci);
- BS_Begin();
- Get_S1 (4, SamplingFactor.Hi, "Hi - Horizontal sampling factor"); Element_Info1(SamplingFactor.Hi);
- Get_S1 (4, SamplingFactor.Vi, "Vi - Vertical sampling factor"); Element_Info1(SamplingFactor.Vi);
- BS_End();
- Skip_B1( "Tqi - Quantization table destination selector");
- Element_End0();
-
- //Filling list of HiVi
- SamplingFactors.push_back(SamplingFactor);
- }
-
- FILLING_BEGIN_PRECISE();
- if (Frame_Count==0 && Field_Count==0)
- {
- Accept("JPEG");
- Fill("JPEG");
-
- if (Count_Get(StreamKind_Last)==0)
- Stream_Prepare(StreamKind_Last);
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Format), "JPEG");
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Codec), "JPEG");
- if (StreamKind_Last==Stream_Image)
- Fill(Stream_Image, 0, Image_Codec_String, "JPEG", Unlimited, true, true); //To Avoid automatic filling
- if (StreamKind_Last==Stream_Video)
- Fill(Stream_Video, 0, Video_InternetMediaType, "video/JPEG", Unlimited, true, true);
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_BitDepth), Resolution);
- Fill(StreamKind_Last, 0, "Height", Height*(Interlaced?2:1));
- Fill(StreamKind_Last, 0, "Width", Width);
-
- //ColorSpace from http://docs.oracle.com/javase/1.4.2/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html
- switch (APPE_Adobe0_transform)
- {
- case 0x01 :
- if (Count==3)
- Fill(StreamKind_Last, 0, "ColorSpace", "YUV");
- break;
- case 0x02 :
- if (Count==4)
- Fill(StreamKind_Last, 0, "ColorSpace", "YCCB");
- break;
- default :
- {
- int8u Ci[256];
- memset(Ci, 0, 256);
- for (int8u Pos=0; Pos<Count; Pos++)
- Ci[SamplingFactors[Pos].Ci]++;
-
- switch (Count)
- {
- case 1 : Fill(StreamKind_Last, 0, "ColorSpace", "Y"); break;
- case 2 : Fill(StreamKind_Last, 0, "ColorSpace", "YA"); break;
- case 3 :
- if (!APP0_JFIF_Parsed && Ci['R']==1 && Ci['G']==1 && Ci['B']==1) //RGB
- Fill(StreamKind_Last, 0, "ColorSpace", "RGB");
- else if ((Ci['Y']==1 && ((Ci['C']==1 && Ci['c']==1) //YCc
- || Ci['C']==2)) //YCC
- || APP0_JFIF_Parsed //APP0 JFIF header present so YCC
- || APPE_Adobe0_transform==0 //transform set to YCC
- || (SamplingFactors[0].Ci==0 && SamplingFactors[1].Ci==1 && SamplingFactors[2].Ci==2) //012
- || (SamplingFactors[0].Ci==1 && SamplingFactors[1].Ci==2 && SamplingFactors[2].Ci==3)) //123
- Fill(StreamKind_Last, 0, "ColorSpace", "YUV");
- break;
- case 4 :
- if (!APP0_JFIF_Parsed && Ci['R']==1 && Ci['G']==1 && Ci['B']==1 && Ci['A']==1) //RGBA
- Fill(StreamKind_Last, 0, "ColorSpace", "RGBA");
- else if ((Ci['Y']==1 && Ci['A']==1 && ((Ci['C']==1 && Ci['c']==1) //YCcA
- || Ci['C']==2)) //YCCA
- || APP0_JFIF_Parsed //APP0 JFIF header present so YCCA
- || (SamplingFactors[0].Ci==0 && SamplingFactors[1].Ci==1 && SamplingFactors[2].Ci==2 && SamplingFactors[3].Ci==3) //0123
- || (SamplingFactors[0].Ci==1 && SamplingFactors[1].Ci==2 && SamplingFactors[2].Ci==3 && SamplingFactors[3].Ci==4)) //1234
- Fill(StreamKind_Last, 0, "ColorSpace", "YUVA");
- else if (APPE_Adobe0_transform==0) //transform set to CMYK
- Fill(StreamKind_Last, 0, "ColorSpace", "YCCB");
- break;
- default: ;
- }
- }
- }
-
- //Chroma subsampling
- if ((SamplingFactors.size()==3 || SamplingFactors.size()==4) && SamplingFactors[1].Hi==1 && SamplingFactors[2].Hi==1 && SamplingFactors[1].Vi==1 && SamplingFactors[2].Vi==1)
- {
- string ChromaSubsampling;
- switch (SamplingFactors[0].Hi)
- {
- case 1 :
- switch (SamplingFactors[0].Vi)
- {
- case 1 : ChromaSubsampling="4:4:4"; break;
- default: ;
- }
- break;
- case 2 :
- switch (SamplingFactors[0].Vi)
- {
- case 1 : ChromaSubsampling="4:2:2"; break;
- case 2 : ChromaSubsampling="4:2:0"; break;
- default: ;
- }
- break;
- case 4 :
- switch (SamplingFactors[0].Vi)
- {
- case 1 : ChromaSubsampling="4:1:1"; break;
- case 2 : ChromaSubsampling="4:1:0"; break;
- default: ;
- }
- break;
- default: ;
- }
- if (!ChromaSubsampling.empty())
- {
- if (SamplingFactors.size()==4)
- {
- if (ChromaSubsampling=="4:4:4" && SamplingFactors[3].Hi==1 && SamplingFactors[3].Vi==1)
- ChromaSubsampling+=":4";
- else
- ChromaSubsampling+=":?";
- }
- Fill(StreamKind_Last, 0, "ChromaSubsampling", ChromaSubsampling);
- }
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::SOS()
-{
- //Parsing
- int8u Count;
- Get_B1 (Count, "Number of image components in scan");
- for (int8u Pos=0; Pos<Count; Pos++)
- {
- Skip_B1( "Scan component selector");
- Skip_B1( "Entropy coding table destination selector");
- }
- Skip_B1( "Start of spectral or predictor selection");
- Skip_B1( "End of spectral selection");
- Skip_B1( "Successive approximation bit position");
-
- FILLING_BEGIN_PRECISE();
- SOS_SOD_Parsed=true;
- if (Interlaced)
- {
- Field_Count++;
- Field_Count_InThisBlock++;
- }
- if (!Interlaced || Field_Count%2==0)
- {
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- }
- if (Status[IsFilled])
- Fill();
- if (Config->ParseSpeed<1.0)
- Finish("JPEG"); //No need of more
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APP0()
-{
- //Parsing
- int32u Name;
- Get_C4(Name, "Name");
- switch (Name)
- {
- case 0x41564931 : APP0_AVI1(); break; //"AVI1"
- case 0x4A464946 : APP0_JFIF(); break; //"JFIF"
- case 0x4A464646 : APP0_JFFF(); break; //"JFFF"
- default : Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APP0_AVI1()
-{
- Element_Info1("AVI1");
-
- //Parsing
- int8u FieldOrder=(int8u)-1;
- if (Element_Size==16-4)
- {
- Get_B1 (FieldOrder, "Polarity");
- Skip_XX(7, "Zeroes");
- }
- if (Element_Size==18-4)
- {
- int32u FieldSizeLessPadding;
- Get_B1 (FieldOrder, "Field Order");
- Skip_B1( "Zero");
- Skip_B4( "FieldSize");
- Get_B4 (FieldSizeLessPadding, "FieldSizeLessPadding");
-
- //Coherency
- if (FieldOrder==0 && IsSub && FieldSizeLessPadding!=Buffer_Size)
- FieldOrder=(int8u)-1; //Not coherant
- }
-
- FILLING_BEGIN();
- if (Frame_Count==0 && Field_Count==0)
- {
- Accept();
-
- switch (FieldOrder)
- {
- case 0x00 : Fill(Stream_Video, 0, Video_Interlacement, "PPF"); Fill(Stream_Video, 0, Video_ScanType, "Progressive"); break;
- case 0x01 : Fill(Stream_Video, 0, Video_Interlacement, "TFF"); Fill(Stream_Video, 0, Video_ScanType, "Interlaced"); Fill(Stream_Video, 0, Video_ScanOrder, "TFF"); Interlaced=true; break;
- case 0x02 : Fill(Stream_Video, 0, Video_Interlacement, "BFF"); Fill(Stream_Video, 0, Video_ScanType, "Interlaced"); Fill(Stream_Video, 0, Video_ScanOrder, "BFF"); Interlaced=true; break;
- case 0xFF : Fill(Stream_Video, 0, Video_ScanType, "Interlaced"); Interlaced=true; break;
- default : ;
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APP0_JFIF()
-{
- Element_Info1("JFIF");
-
- //Parsing
- Skip_B1( "Zero");
- int16u Width, Height;
- int8u Unit, ThumbailX, ThumbailY;
- Skip_B2( "Version");
- Get_B1 (Unit, "Unit"); //0=Pixels, 1=dpi, 2=dpcm
- Get_B2 (Width, "Xdensity");
- Get_B2 (Height, "Ydensity");
- Get_B1 (ThumbailX, "Xthumbail");
- Get_B1 (ThumbailY, "Ythumbail");
- Skip_XX(3*ThumbailX*ThumbailY, "RGB Thumbail");
-
- APP0_JFIF_Parsed=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APP0_JFFF()
-{
- Element_Info1("JFFF");
-
- Skip_B1( "Zero");
- Skip_B1( "extension_code"); //0x10 Thumbnail coded using JPEG, 0x11 Thumbnail stored using 1 byte/pixel, 0x13 Thumbnail stored using 3 bytes/pixel
- if (Element_Size>Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "extension_data");
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APP0_JFFF_JPEG()
-{
- //Parsing
- Element_Begin1("Thumbail JPEG");
- if (Element_Size>Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Data");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APP0_JFFF_1B()
-{
- //Parsing
- Element_Begin1("Thumbail 1 byte per pixel");
- int8u ThumbailX, ThumbailY;
- Get_B1 (ThumbailX, "Xthumbail");
- Get_B1 (ThumbailY, "Ythumbail");
- Skip_XX(768, "Palette");
- Skip_XX(ThumbailX*ThumbailY, "Thumbail");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APP0_JFFF_3B()
-{
- //Parsing
- Element_Begin1("Thumbail 3 bytes per pixel");
- int8u ThumbailX, ThumbailY;
- Get_B1 (ThumbailX, "Xthumbail");
- Get_B1 (ThumbailY, "Ythumbail");
- Skip_XX(3*ThumbailX*ThumbailY, "RGB Thumbail");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APP1()
-{
- //Parsing
- int64u Name;
- Get_C6(Name, "Name");
-
- switch (Name)
- {
- case 0x457869660000LL : APP1_EXIF(); break; //"Exif\0\0"
- default : Skip_XX(Element_Size-Element_Offset, "Data");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APP1_EXIF()
-{
- Element_Info1("Exif");
-
- //Parsing
- int32u Alignment;
- Get_C4(Alignment, "Alignment");
- if (Alignment==0x49492A00)
- Skip_B4( "First_IFD");
- if (Alignment==0x4D4D2A00)
- Skip_L4( "First_IFD");
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APPE()
-{
- //Parsing
- int64u Name;
- Get_C6(Name, "Name");
- switch (Name)
- {
- case 0x41646F626500LL : APPE_Adobe0(); break; //"AVI1"
- default : Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Jpeg::APPE_Adobe0()
-{
- Element_Info1("Adobe");
-
- //Parsing
- int8u Version;
- Get_B1(Version, "Version");
- if (Version==100)
- {
- int8u transform;
- Skip_B2( "flags0");
- Skip_B2( "flags1");
- Get_B1 (transform, "transform");
-
- FILLING_BEGIN();
- APPE_Adobe0_transform=transform;
- FILLING_END();
- }
- else
- Skip_XX(Element_Size-Element_Offset, "unknown");
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Jpeg.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Jpeg.h
deleted file mode 100644
index 824f05391..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Jpeg.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about JPEG files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_JpegH
-#define MediaInfo_File_JpegH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Jpeg
-//***************************************************************************
-
-class File_Jpeg : public File__Analyze
-{
-public :
- //In
- stream_t StreamKind;
- bool Interlaced;
- #if MEDIAINFO_DEMUX
- float64 FrameRate;
- #endif //MEDIAINFO_DEMUX
-
- //Constructor/Destructor
- File_Jpeg();
-
-private :
- //Streams management
- void Streams_Accept();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
- void Read_Buffer_Continue();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID) {return Read_Buffer_Seek_OneFramePerFile(Method, Value, ID);}
- #endif //MEDIAINFO_SEEK
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parser_Fill_Size();
- void Data_Parse();
-
- //Elements
- void TEM () {};
- void SOC () {}
- void SIZ ();
- void COD ();
- void COC () {Skip_XX(Element_Size, "Data");}
- void TLM () {Skip_XX(Element_Size, "Data");}
- void PLM () {Skip_XX(Element_Size, "Data");}
- void PLT () {Skip_XX(Element_Size, "Data");}
- void QCD ();
- void QCC () {Skip_XX(Element_Size, "Data");}
- void RGN () {Skip_XX(Element_Size, "Data");}
- void PPM () {Skip_XX(Element_Size, "Data");}
- void PPT () {Skip_XX(Element_Size, "Data");}
- void CME () {Skip_XX(Element_Size, "Data");}
- void SOT () {Skip_XX(Element_Size, "Data");}
- void SOP () {Skip_XX(Element_Size, "Data");}
- void EPH () {Skip_XX(Element_Size, "Data");}
- void SOD ();
- void SOF_();
- void S0F0() {SOF_();};
- void S0F1() {SOF_();};
- void S0F2() {SOF_();};
- void S0F3() {SOF_();}
- void DHT () {Skip_XX(Element_Size, "Data");}
- void S0F5() {SOF_();}
- void S0F6() {SOF_();}
- void S0F7() {SOF_();}
- void JPG () {Skip_XX(Element_Size, "Data");}
- void S0F9() {SOF_();}
- void S0FA() {SOF_();}
- void S0FB() {SOF_();}
- void DAC () {Skip_XX(Element_Size, "Data");}
- void S0FD() {SOF_();}
- void S0FE() {SOF_();}
- void S0FF() {SOF_();}
- void RST0() {};
- void RST1() {};
- void RST2() {};
- void RST3() {};
- void RST4() {};
- void RST5() {};
- void RST6() {};
- void RST7() {};
- void SOI () {};
- void EOI () {};
- void SOS ();
- void DQT () {Skip_XX(Element_Size, "Data");}
- void DNL () {Skip_XX(Element_Size, "Data");}
- void DRI () {Skip_XX(Element_Size, "Data");}
- void DHP () {Skip_XX(Element_Size, "Data");}
- void EXP () {Skip_XX(Element_Size, "Data");}
- void APP0();
- void APP0_AVI1();
- void APP0_JFIF();
- void APP0_JFFF();
- void APP0_JFFF_JPEG();
- void APP0_JFFF_1B();
- void APP0_JFFF_3B();
- void APP1();
- void APP1_EXIF();
- void APP2() {Skip_XX(Element_Size, "Data");}
- void APP3() {Skip_XX(Element_Size, "Data");}
- void APP4() {Skip_XX(Element_Size, "Data");}
- void APP5() {Skip_XX(Element_Size, "Data");}
- void APP6() {Skip_XX(Element_Size, "Data");}
- void APP7() {Skip_XX(Element_Size, "Data");}
- void APP8() {Skip_XX(Element_Size, "Data");}
- void APP9() {Skip_XX(Element_Size, "Data");}
- void APPA() {Skip_XX(Element_Size, "Data");}
- void APPB() {Skip_XX(Element_Size, "Data");}
- void APPC() {Skip_XX(Element_Size, "Data");}
- void APPD() {Skip_XX(Element_Size, "Data");}
- void APPE();
- void APPE_Adobe0();
- void APPF() {Skip_XX(Element_Size, "Data");}
- void JPG0() {Skip_XX(Element_Size, "Data");}
- void JPG1() {Skip_XX(Element_Size, "Data");}
- void JPG2() {Skip_XX(Element_Size, "Data");}
- void JPG3() {Skip_XX(Element_Size, "Data");}
- void JPG4() {Skip_XX(Element_Size, "Data");}
- void JPG5() {Skip_XX(Element_Size, "Data");}
- void JPG6() {Skip_XX(Element_Size, "Data");}
- void JPG7() {Skip_XX(Element_Size, "Data");}
- void JPG8() {Skip_XX(Element_Size, "Data");}
- void JPG9() {Skip_XX(Element_Size, "Data");}
- void JPGA() {Skip_XX(Element_Size, "Data");}
- void JPGB() {Skip_XX(Element_Size, "Data");}
- void JPGC() {Skip_XX(Element_Size, "Data");}
- void JPGD() {Skip_XX(Element_Size, "Data");}
- void COM () {Skip_XX(Element_Size, "Data");}
-
- //Temp
- int8u APPE_Adobe0_transform;
- bool APP0_JFIF_Parsed;
- bool SOS_SOD_Parsed;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Pcx.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Pcx.cpp
deleted file mode 100644
index 29622e645..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Pcx.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-// From http://courses.engr.illinois.edu/ece390/books/labmanual/graphics-pcx.html
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PCX_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Pcx.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Pcx_VersionInfo(int16u Version)
-{
- switch(Version)
- {
- case 0 : return "Paintbrush v2.5";
- case 2 : return "Paintbrush v2.8 with palette information";
- case 3 : return "Paintbrush v2.8 without palette information";
- case 4 : return "Paintbrush/Windows";
- case 5 : return "Paintbrush v3.0+";
- default: return "";
- }
-}
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Pcx::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<130) //Size of the header
- return false; //Must wait for more data
-
- if (Buffer[0]!=0x0A
- || Buffer[1]>0x05
- || Buffer[2]!=0x01
- || !(Buffer[3]==1 || Buffer[3]==4 || Buffer[3]==8 || Buffer[3]==24))
- {
- Reject("PCX");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// File Header Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pcx::Read_Buffer_Continue()
-{
- //Parsing
- int16u XMin, YMin, XMax, YMax, HorDPI, VertDPI, BytesPerLine, PaletteType, HScrSize, VScrSize;
- int8u Manufacturer, Version, EncodingScheme, BitsPerPixel, ColorPlanes;
-
- Get_L1 (Manufacturer, "Manufacturer");
- Get_L1 (Version, "Version"); // 0,2,3,4,5
- Get_L1 (EncodingScheme, "EncodingScheme"); // RLE=1
- Get_L1 (BitsPerPixel, "Bits Per Pixel"); // 1,4,8,24
- Get_L2 (XMin, "Left margin of image");
- Get_L2 (YMin, "Upper margin of image");
- Get_L2 (XMax, "Right margin of image");
- Get_L2 (YMax, "Lower margin of image");
- Get_L2 (HorDPI, "Horizontal Resolution");
- Get_L2 (VertDPI, "Vertical Resolution");
- Skip_XX(48, "Palette");
- Skip_L1( "Reserved");
- Get_L1 (ColorPlanes, "ColorPlanes");
- Get_L2 (BytesPerLine, "BytesPerLine");
- Get_L2 (PaletteType, "PaletteType");
- Get_L2 (HScrSize, "Horizontal Screen Size");
- Get_L2 (VScrSize, "Vertical Screen Size");
- Skip_XX(56, "Filler");
-
-
- FILLING_BEGIN();
- //Integrity tests
- if (XMax<=XMin
- || YMax<=YMin
- || BytesPerLine<XMax-XMin)
- {
- Reject("PCX");
- return;
- }
-
- Accept("PCX");
- Stream_Prepare(Stream_Image);
- Fill(Stream_Image, 0, Image_Format, "PCX");
- Fill(Stream_Image, 0, Image_Format_Version, Pcx_VersionInfo(Version));
- Fill(Stream_Image, 0, Image_Width, XMax-XMin);
- Fill(Stream_Image, 0, Image_Height, YMax-YMin);
- Fill(Stream_Image, 0, Image_BitDepth, BitsPerPixel);
- Fill(Stream_Image, 0, "DPI", Ztring::ToZtring(VertDPI) + __T(" x ") + Ztring::ToZtring(HorDPI));
- Finish("PCX");
- FILLING_END();
-}
-
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Pcx.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Pcx.h
deleted file mode 100644
index e92ad0c06..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Pcx.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PCX files
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_PcxH
-#define MediaInfo_File_PcxH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Pcx
-//***************************************************************************
-
-class File_Pcx : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Elements
- void Read_Buffer_Continue();
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Png.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Png.cpp
deleted file mode 100644
index 7169d645e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Png.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PNG files
-//
-// From http://www.fileformat.info/format/png/
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PNG_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Png.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Png_Colour_type(int8u Colour_type)
-{
- switch (Colour_type)
- {
- case 0 : return "Greyscale";
- case 2 : return "Truecolour";
- case 3 : return "Indexed-colour";
- case 4 : return "Greyscale with alpha";
- case 6 : return "Truecolour with alpha";
- default: return "";
- }
-}
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- const int32u IDAT=0x49444154;
- const int32u IEND=0x49454E44;
- const int32u IHDR=0x49484452;
- const int32u PLTE=0x506C5445;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Png::File_Png()
-{
- //Config
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- IsRawStream=true;
-
- //Temp
- Signature_Parsed=false;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Png::Streams_Accept()
-{
- if (!IsSub)
- {
- TestContinuousFileNames();
-
- Stream_Prepare((Config->File_Names.size()>1 || Config->File_IsReferenced_Get())?Stream_Video:Stream_Image);
- if (File_Size!=(int64u)-1)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize), File_Size);
- if (StreamKind_Last==Stream_Video)
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, Config->File_Names.size());
- }
- else
- Stream_Prepare(StreamKind_Last);
-
- //Configuration
- Frame_Count_NotParsedIncluded=0;
-}
-
-//***************************************************************************
-// Header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Png::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<8)
- return false; //Must wait for more data
-
- if (CC4(Buffer+4)!=0x0D0A1A0A) //Byte order
- {
- Reject("PNG");
- return false;
- }
-
- switch (CC4(Buffer)) //Signature
- {
- case 0x89504E47 :
- Accept("PNG");
-
- Fill(Stream_General, 0, General_Format, "PNG");
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Format), "PNG");
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Codec), "PNG");
-
- break;
-
- case 0x8A4E4E47 :
- Accept("PNG");
-
- Fill(Stream_General, 0, General_Format, "MNG");
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Format), "MNG");
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Codec), "MNG");
-
- Finish("PNG");
- break;
-
- case 0x8B4A4E47 :
- Accept("PNG");
-
- Fill(Stream_General, 0, General_Format, "JNG");
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Format), "JNG");
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Codec), "JNG");
-
- Finish("PNG");
- break;
-
- default:
- Reject("PNG");
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Png::Read_Buffer_Unsynched()
-{
- Signature_Parsed=false;
-
- Read_Buffer_Unsynched_OneFramePerFile();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Png::Header_Parse()
-{
- if (!Signature_Parsed)
- {
- //Filling
- Header_Fill_Size(8);
- Header_Fill_Code(0, "File header");
-
- return;
- }
-
- //Parsing
- int32u Length, Chunk_Type;
- Get_B4 (Length, "Length");
- Get_C4 (Chunk_Type, "Chunk Type");
-
- //Filling
- Header_Fill_Size(12+Length); //+4 for CRC
- Header_Fill_Code(Chunk_Type, Ztring().From_CC4(Chunk_Type));
-}
-
-//---------------------------------------------------------------------------
-void File_Png::Data_Parse()
-{
- if (!Signature_Parsed)
- {
- Signature();
- return;
- }
-
- Element_Size-=4; //For CRC
-
- #define CASE_INFO(_NAME, _DETAIL) \
- case Elements::_NAME : Element_Info1(_DETAIL); _NAME(); break;
-
- //Parsing
- switch (Element_Code)
- {
- CASE_INFO(IDAT, "Image data");
- CASE_INFO(IEND, "Image trailer");
- CASE_INFO(IHDR, "Image header");
- CASE_INFO(PLTE, "Palette table");
- default : Skip_XX(Element_Size, "Unknown");
- }
-
- Element_Size+=4; //For CRC
- Skip_B4( "CRC");
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Png::Signature()
-{
- //Parsing
- Skip_B4( "Signature");
- Skip_B4( "ByteOrder");
-
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- Signature_Parsed=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Png::IEND()
-{
- Signature_Parsed=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Png::IHDR()
-{
- //Parsing
- int32u Width, Height;
- int8u Bit_depth, Colour_type, Compression_method, Interlace_method;
- Get_B4 (Width, "Width");
- Get_B4 (Height, "Height");
- Get_B1 (Bit_depth, "Bit depth");
- Get_B1 (Colour_type, "Colour type"); Param_Info1(Png_Colour_type(Colour_type));
- Get_B1 (Compression_method, "Compression method");
- Skip_B1( "Filter method");
- Get_B1 (Interlace_method, "Interlace method");
-
- FILLING_BEGIN_PRECISE();
- if (!Status[IsFilled])
- {
- Fill(StreamKind_Last, 0, "Width", Width);
- Fill(StreamKind_Last, 0, "Height", Height);
- int8u Resolution;
- switch (Colour_type)
- {
- case 0 : Resolution=Bit_depth; break;
- case 2 : Resolution=Bit_depth*3; break;
- case 3 : Resolution=Bit_depth; break;
- case 4 : Resolution=Bit_depth*2; break;
- case 6 : Resolution=Bit_depth*4; break;
- default: Resolution=0;
- }
- if (Resolution)
- Fill(StreamKind_Last, 0, "BitDepth", Resolution);
- switch (Compression_method)
- {
- case 0 :
- Fill(StreamKind_Last, 0, "Format_Compression", "LZ77");
- break;
- default: ;
- }
- switch (Interlace_method)
- {
- case 0 :
- break;
- case 1 :
- break;
- default: ;
- }
-
- Fill();
- }
-
- if (Config->ParseSpeed<1.0)
- Finish("PNG"); //No need of more
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Png.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Png.h
deleted file mode 100644
index 5975b7edf..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Png.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PNG files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_PngH
-#define MediaInfo_File_PngH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Png
-//***************************************************************************
-
-class File_Png : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Png();
-
-private :
- //Streams management
- void Streams_Accept();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test() {return Demux_UnpacketizeContainer_Test_OneFramePerFile();}
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID) {return Read_Buffer_Seek_OneFramePerFile(Method, Value, ID);}
- #endif //MEDIAINFO_SEEK
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Signature();
- void IDAT() {Skip_XX(Element_Size, "Data");}
- void IEND();
- void IHDR();
- void PLTE() {Skip_XX(Element_Size, "Data");}
-
- //Temp
- bool Signature_Parsed;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Psd.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Psd.cpp
deleted file mode 100644
index 69566d169..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Psd.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PSD files
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-// From http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/PhotoshopFileFormats.htm
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PSD_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Psd.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Psd_ColorMode(int16u ColorMode)
-{
- switch(ColorMode)
- {
- case 0 : return "Bitmap";
- case 1 : return "Grayscale";
- case 2 : return "Indexed";
- case 3 : return "RGB";
- case 4 : return "CMYK";
- case 7 : return "Multichannel";
- case 8 : return "Duotone";
- case 9 : return "Lab";
- default: return "";
- }
-}
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Psd::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- if (CC4(Buffer)!=0x38425053) //"8BPS"
- {
- Reject("PSD");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// File Header Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Psd::Read_Buffer_Continue()
-{
- //Parsing
- int32u Width, Height;
- int16u BitsDepth, Version, channels, ColorMode;
- Skip_C4( "Signature");
- Get_B2 (Version, "Version"); // 1 = PSD, 2 = PSB
- Skip_B6( "Reserved");
- Get_B2 (channels, "channels"); // 1 to 56, including alpha channel
- Get_B4 (Height, "Height");
- Get_B4 (Width, "Width");
- Get_B2 (BitsDepth, "Depth"); // 1,8,16 or 32
- Get_B2 (ColorMode, "Color Mode"); Param_Info1(Psd_ColorMode(ColorMode));
-
- FILLING_BEGIN();
- Accept("PSD");
- Stream_Prepare(Stream_Image);
- Fill(Stream_Image, 0, Image_Format, Version==1?"PSD":"PSB");
- Fill(Stream_Image, 0, Image_Format_Version, Version);
- Fill(Stream_Image, 0, Image_ColorSpace, Psd_ColorMode(ColorMode));
- Fill(Stream_Image, 0, Image_Width, Width);
- Fill(Stream_Image, 0, Image_Height, Height);
- Fill(Stream_Image, 0, Image_BitDepth, BitsDepth);
- Finish("PSD");
- FILLING_END();
-}
-
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Psd.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Psd.h
deleted file mode 100644
index c05870e6e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Psd.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PSD files
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_PsdH
-#define MediaInfo_File_PsdH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Psd
-//***************************************************************************
-
-class File_Psd : public File__Analyze
-{
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Elements
- void Read_Buffer_Continue();
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Rle.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Rle.cpp
deleted file mode 100644
index 44e5ceee0..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Rle.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_RLE_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Rle.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Rle::File_Rle()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("RLE");
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Rle::Streams_Fill()
-{
- Stream_Prepare(Stream_General);
- Fill(Stream_General, 0, General_Format, "RLE");
-
- Stream_Prepare(Stream_Text); //TODO: This is currenlty only text
- Fill(Stream_Text, 0, Text_Format, "RLE");
- Fill(Stream_Text, 0, Text_Codec, "RLE");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Rle::Read_Buffer_Continue()
-{
- //Filling
- Accept();
- Finish("RLE");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_RLE_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Rle.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Rle.h
deleted file mode 100644
index 755e4ca3d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Rle.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about RLE files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_RleH
-#define MediaInfo_File_RleH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Rle
-//***************************************************************************
-
-class File_Rle : public File__Analyze
-{
-public :
- File_Rle();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tga.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tga.cpp
deleted file mode 100644
index 56094744f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tga.cpp
+++ /dev/null
@@ -1,306 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// TGA format
-//
-// From http://www.dca.fee.unicamp.br/~martino/disciplinas/ea978/tgaffs.pdf
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_TGA_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Tga.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Tga_Image_Type_Compression(int8u Image_Type)
-{
- switch (Image_Type)
- {
- case 1 : return "Color-mapped";
- case 2 :
- case 3 : return "Raw";
- case 9 : return "Color-mapped + RLE";
- case 10 :
- case 11 : return "RLE";
- case 32 :
- case 33 : return "Huffman";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Tga_Image_Type_ColorSpace(int8u Image_Type)
-{
- switch (Image_Type)
- {
- case 1 :
- case 2 :
- case 9 :
- case 10 :
- case 32 :
- case 33 : return "RGB";
- case 3 :
- case 11 : return "Y";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Tga::File_Tga()
-{
- //Configuration
- ParserName=__T("TGA");
- Buffer_MaximumSize=64*1024*1024; //Some big frames are possible (e.g YUV 4:2:2 10 bits 1080p)
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tga::Streams_Fill()
-{
- Fill(Stream_General, 0, General_Format, "TGA");
- Fill(Stream_General, 0, General_Format_Version, __T("Version ")+Ztring::ToZtring(Version));
- Fill(Stream_General, 0, General_Title, Image_ID);
-
- Stream_Prepare(Stream_Image);
- Fill(Stream_Image, 0, Image_Format, Tga_Image_Type_Compression(Image_Type));
- Fill(Stream_Image, 0, Image_ColorSpace, Tga_Image_Type_ColorSpace(Image_Type));
- Fill(Stream_Image, 0, Image_CodecID, Image_Type);
- Fill(Stream_Image, 0, Image_Width, Image_Width_);
- Fill(Stream_Image, 0, Image_Height, Image_Height_);
- Fill(Stream_Image, 0, Image_BitDepth, Pixel_Depth);
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Tga::FileHeader_Begin()
-{
- //Synchro
- if (18>Buffer_Size)
- return false;
- if (Buffer[2]==0x00
- || Buffer[16]>32) //bit depth
- {
- Reject();
- return false;
- }
- if (Buffer_Size<File_Size)
- return false; //Must wait for more data
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tga::Read_Buffer_Continue()
-{
- //Parsing
- Tga_File_Header();
- Image_Color_Map_Data();
- Tga_File_Footer();
-
- FILLING_BEGIN();
- //Coherency in case of no magic value
- if (Version==1)
- {
- switch (Image_Type)
- {
- case 1 : //Color mapped images
- case 9 : //Color mapped images, RLE
- if (Color_Map_Type!=1)
- {
- Reject();
- return;
- }
- break;
- case 2 : //True-color images
- case 10 : //True-color images, RLE
- if (Color_Map_Type)
- {
- Reject();
- return;
- }
- break;
- case 3 : //Black and White
- case 11 : //Black and White, RLE
- if (Color_Map_Type)
- {
- Reject();
- return;
- }
- break;
- default : Reject();
- return;
- }
- switch (Color_Map_Type)
- {
- case 0 :
- if (First_Entry_Index || Color_map_Length || Color_map_Entry_Size)
- {
- Reject();
- return;
- }
- break;
- case 1 :
- switch (Color_map_Entry_Size)
- {
- case 15 :
- case 16 :
- case 24 :
- case 32 :
- break;
- default : Reject();
- return;
- ;
- }
- break;
- default : Reject();
- return;
- }
- switch (Pixel_Depth)
- {
- case 8 :
- case 16 :
- case 24 :
- case 32 :
- break;
- default : Reject();
- return;
- ;
- }
- }
-
- Accept();
- Fill();
- Finish();
- FILLING_END();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tga::Tga_File_Header()
-{
- //Parsing
- Element_Begin1("Tga File Header");
- Get_L1 (ID_Length, "ID Length");
- Get_L1 (Color_Map_Type, "Color Map Type");
- Get_L1 (Image_Type, "Image Type"); Param_Info1(Tga_Image_Type_Compression(Image_Type));
- Element_End0();
- Element_Begin1("Color Map Specification");
- Get_L2 (First_Entry_Index, "First Entry Index");
- Get_L2 (Color_map_Length, "Color map Length");
- Get_L1 (Color_map_Entry_Size, "Color map Entry Size");
- Element_End0();
- Element_Begin1("Image Specification");
- Skip_L2( "X-origin of Image");
- Skip_L2( "Y-origin of Image");
- Get_L2 (Image_Width_, "Image Width");
- Get_L2 (Image_Height_, "Image Height");
- Get_L1 (Pixel_Depth, "Pixel Depth");
- Get_L1 (Image_Descriptor, "Image Descriptor");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Tga::Image_Color_Map_Data()
-{
- Element_Begin1("Image/Color Map Data");
- Get_Local(ID_Length, Image_ID, "Image ID");
- if (Color_Map_Type==1)
- {
- int64u EntrySizeInBits=8;
- if (Color_map_Entry_Size<24)
- EntrySizeInBits=Color_map_Entry_Size/3;
-
- Skip_XX(Color_map_Length*EntrySizeInBits/8, "Color Map Data");
-
- }
- if (Element_Offset+26<Element_Size
- && Buffer[Buffer_Size- 18]==0x54
- && Buffer[Buffer_Size- 17]==0x52
- && Buffer[Buffer_Size- 16]==0x55
- && Buffer[Buffer_Size- 15]==0x45
- && Buffer[Buffer_Size- 14]==0x56
- && Buffer[Buffer_Size- 13]==0x49
- && Buffer[Buffer_Size- 12]==0x53
- && Buffer[Buffer_Size- 11]==0x49
- && Buffer[Buffer_Size- 10]==0x4F
- && Buffer[Buffer_Size- 9]==0x4E
- && Buffer[Buffer_Size- 8]==0x2D
- && Buffer[Buffer_Size- 7]==0x58
- && Buffer[Buffer_Size- 6]==0x46
- && Buffer[Buffer_Size- 5]==0x49
- && Buffer[Buffer_Size- 4]==0x4C
- && Buffer[Buffer_Size- 3]==0x45
- && Buffer[Buffer_Size- 2]==0x2E
- && Buffer[Buffer_Size- 1]==0x00)
- Version=2;
- else
- Version=1;
- Skip_XX(Element_Size-Element_Offset-(Version==2?26:0), "Image Data");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Tga::Tga_File_Footer()
-{
- if (Version==1)
- return; //No footer
-
- Element_Begin1("Image/color Map Data");
- Skip_L4( "Extension Area Offset");
- Skip_L4( "Developer Directory Offset");
- Skip_Local(16, "Signature");
- Skip_Local( 1, "Reserved Character");
- Skip_L1( "Binary Zero String Terminator");
- Element_End0();
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tga.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tga.h
deleted file mode 100644
index 9d7f4a74b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tga.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about TGA files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TgaH
-#define MediaInfo_File_TgaH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Tga
-//***************************************************************************
-
-class File_Tga : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Tga();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Elements
- void Tga_File_Header();
- void Image_Color_Map_Data();
- void Tga_File_Footer();
-
- //Temp - File Header
- int16u First_Entry_Index;
- int16u Color_map_Length;
- int16u Image_Width_;
- int16u Image_Height_;
- int8u ID_Length;
- int8u Color_Map_Type;
- int8u Image_Type;
- int8u Color_map_Entry_Size;
- int8u Pixel_Depth;
- int8u Image_Descriptor;
-
- //Temp - File Footer
- Ztring Image_ID;
- int8u Version;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tiff.cpp b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tiff.cpp
deleted file mode 100644
index 9ffe5362b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tiff.cpp
+++ /dev/null
@@ -1,565 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// TIFF Format
-//
-// From
-// http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf
-// http://www.fileformat.info/format/tiff/
-// http://en.wikipedia.org/wiki/Tagged_Image_File_Format
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_TIFF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Image/File_Tiff.h"
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-namespace Tiff_Tag
-{
- const int16u ImageWidth = 256;
- const int16u ImageLength = 257;
- const int16u BitsPerSample = 258;
- const int16u Compression = 259;
- const int16u PhotometricInterpretation = 262;
- const int16u ImageDescription = 270;
- const int16u SamplesPerPixel = 277;
- const int16u ExtraSamples = 338;
-}
-
-//---------------------------------------------------------------------------
-const char* Tiff_Tag_Name(int32u Tag)
-{
- switch (Tag)
- {
- case Tiff_Tag::ImageWidth : return "ImageWidth";
- case Tiff_Tag::ImageLength : return "ImageLength";
- case Tiff_Tag::BitsPerSample : return "BitsPerSample";
- case Tiff_Tag::Compression : return "Compression";
- case Tiff_Tag::PhotometricInterpretation : return "PhotometricInterpretation";
- case Tiff_Tag::ImageDescription : return "ImageDescription";
- case Tiff_Tag::SamplesPerPixel : return "SamplesPerPixel";
- case Tiff_Tag::ExtraSamples : return "ExtraSamples";
- default : return "Unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-namespace Tiff_Type
-{
- const int16u Byte = 1;
- const int16u Short = 3;
- const int16u Long = 4;
-}
-
-//---------------------------------------------------------------------------
-const char* Tiff_Type_Name(int32u Type)
-{
- switch (Type)
- {
- case Tiff_Type::Byte : return "Byte";
- case Tiff_Type::Short : return "Short";
- case Tiff_Type::Long : return "Long";
- default : return ""; //Unknown
- }
-}
-
-//---------------------------------------------------------------------------
-const int8u Tiff_Type_Size(int32u Type)
-{
- switch (Type)
- {
- case Tiff_Type::Byte : return 1;
- case Tiff_Type::Short : return 2;
- case Tiff_Type::Long : return 4;
- default : return 0; //Unknown
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Tiff_Compression(int32u Compression)
-{
- switch (Compression)
- {
- case 1 : return "Raw";
- case 2 : return "CCITT Group 3";
- case 3 : return "CCITT T.4";
- case 5 : return "LZW";
- case 6 : return "JPEG";
- case 32773 : return "PackBits";
- default : return ""; //Unknown
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Tiff_Compression_Mode(int32u Compression)
-{
- switch (Compression)
- {
- case 1 :
- case 2 :
- case 3 :
- case 5 :
- case 32773 : return "Lossless";
- default : return ""; //Unknown or depends of the compresser (e.g. JPEG can be lossless or lossy)
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Tiff_PhotometricInterpretation(int32u PhotometricInterpretation)
-{
- switch (PhotometricInterpretation)
- {
- case 0 :
- case 1 : return "B/W or Grey scale";
- case 2 : return "RGB";
- case 3 : return "Palette";
- case 4 : return "Transparency mask";
- case 5 : return "CMYK";
- case 6 : return "YCbCr";
- case 8 : return "CIELAB";
- default : return ""; //Unknown
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Tiff_PhotometricInterpretation_ColorSpace (int32u PhotometricInterpretation)
-{
- switch (PhotometricInterpretation)
- {
- case 0 :
- case 1 : return "Y";
- case 2 : return "RGB";
- case 3 : return "RGB"; //Palette
- case 4 : return "A"; //Transparency mask;
- case 5 : return "CMYK";
- case 6 : return "YUV"; //YCbCr
- case 8 : return "CIELAB"; //What is it?
- default : return ""; //Unknown
- }
-}
-
-const char* Tiff_ExtraSamples(int32u ExtraSamples)
-{
- switch (ExtraSamples)
- {
- case 0 :
- case 1 : return "Associated Alpha";
- case 2 : return "Unassocieted Alpha";
- default : return ""; //Unknown
- }
-}
-
-const char* Tiff_ExtraSamples_ColorSpace(int32u ExtraSamples)
-{
- switch (ExtraSamples)
- {
- case 1 : return "A";
- default : return ""; //Unknown
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Tiff::File_Tiff()
-{
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Tiff::FileHeader_Begin()
-{
- //Element_Size
- /* Minimum header for a tiff file is 8 byte */
- if (Buffer_Size<8)
- return false; //Must wait for more data
- if (CC4(Buffer)==0x49492A00)
- LittleEndian = true;
- else if (CC4(Buffer)==0x4D4D002A)
- LittleEndian = false;
- else
- {
- Reject("TIFF");
- return false;
- }
-
- //All should be OK...
- Accept("TIFF");
- Fill(Stream_General, 0, General_Format, "TIFF");
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Tiff::FileHeader_Parse()
-{
- //The only IFD that is known at forehand is the first one, it's offset is placed byte 4-7 in the file.
- int32u IFDOffset;
- Skip_B4( "Magic");
- Get_X4 (IFDOffset, "IFDOffset");
-
- FILLING_BEGIN();
- //Initial IFD
- GoTo(IFDOffset, "TIFF");
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tiff::Header_Parse()
-{
- //Handling remaining IFD data
- if (!IfdItems.empty())
- {
- if (File_Offset+Buffer_Offset!=IfdItems.begin()->first)
- IfdItems.clear(); //There was a problem during the seek, trashing remaining positions from last IFD
- else
- {
- Header_Fill_Code(IfdItems.begin()->second.Tag, Tiff_Tag_Name(IfdItems.begin()->second.Tag));
- Header_Fill_Size(Tiff_Type_Size(IfdItems.begin()->second.Type)*IfdItems.begin()->second.Count);
- return;
- }
- }
-
- /* A tiff images consist in principle of two types of blocks, IFD's and data blocks */
- /* Each datablock, which could be a image, tiles, transperancy filter is described by one IFD. */
- /* These IFD's can be placed at any offset in the file and are linked in a chain fashion way. */
- /* where one IFD points out where the next IFD is placed */
- /* */
- /* A creator of a tiff file must describe the "main image" in the first IFD, this means that a */
- /* reader, such this one, only need to read the first IFD in order to get the bitdepth, resolution etc. */
- /* of the main image. */
-
- /* Read one IFD and print out the result */
-
- /* Scan the tiff file for the IFD's (Image File Directory) */
- /* As long as the IFD offset to the next IFD in the file is not 0 */
-
- /* Get number of directories for this IFD */
- int16u NrOfDirectories;
- Get_X2 (NrOfDirectories, "NrOfDirectories");
-
- //Filling
- Header_Fill_Code(0xFFFFFFFF, "IFD"); //OxFFFFFFFF can not be a Tag, so using it as a magic value
- Header_Fill_Size(2+12*((int64u)NrOfDirectories)+4); //2 for header + 12 per directory + 4 for next IFD offset
-}
-
-//---------------------------------------------------------------------------
-void File_Tiff::Data_Parse()
-{
- int32u IFDOffset=0;
- if (IfdItems.empty())
- {
- //Default values
- Infos.clear();
- Infos[Tiff_Tag::BitsPerSample]=__T("1");
-
- //Parsing new IFD
- while (Element_Offset+8+4<Element_Size)
- Read_Directory();
- Get_X4 (IFDOffset, "IFDOffset");
- }
- else
- {
- //Handling remaining IFD data from a previous IFD
- GetValueOffsetu(IfdItems.begin()->second); //Parsing the IFD item
- IfdItems.erase(IfdItems.begin()->first); //Removing IFD item from the list of IFD items to parse
- }
-
- //Some items are not inside the directory, jumping to the offset
- if (!IfdItems.empty())
- GoTo(IfdItems.begin()->first, "TIFF");
- else
- {
- //This IFD is finished, filling data then going to next IFD
- Data_Parse_Fill();
- if (IFDOffset)
- GoTo(IFDOffset, "TIFF");
- else
- {
- Finish(); //No more IFDs
- GoToFromEnd(0);
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Tiff::Data_Parse_Fill()
-{
- Stream_Prepare(Stream_Image);
-
- infos::iterator Info;
-
- //Width
- Info=Infos.find(Tiff_Tag::ImageWidth);
- if (Info!=Infos.end())
- Fill(Stream_Image, StreamPos_Last, Image_Width, Info->second.Read());
-
- //Height
- Info=Infos.find(Tiff_Tag::ImageLength);
- if (Info!=Infos.end())
- Fill(Stream_Image, StreamPos_Last, Image_Height, Info->second.Read());
-
- //BitsPerSample
- Info=Infos.find(Tiff_Tag::BitsPerSample);
- if (Info!=Infos.end())
- {
- if (Info->second.size()>1)
- {
- bool IsOk=true;
- for (size_t Pos=1; Pos<Info->second.size(); ++Pos)
- if (Info->second[Pos]!=Info->second[0])
- IsOk=false;
- if (IsOk)
- Info->second.resize(1); //They are all same, we display 1 piece of information
- }
-
- Fill(Stream_Image, StreamPos_Last, Image_BitDepth, Info->second.Read());
- }
-
- //Compression
- Info=Infos.find(Tiff_Tag::Compression);
- if (Info!=Infos.end())
- {
- int32u Value=Info->second.Read().To_int32u();
- Fill(Stream_Image, StreamPos_Last, Image_Format, Tiff_Compression(Value));
- Fill(Stream_Image, StreamPos_Last, Image_Codec, Tiff_Compression(Value));
- Fill(Stream_Image, StreamPos_Last, Image_Compression_Mode, Tiff_Compression_Mode(Value));
- }
-
- //PhotometricInterpretation
- Info=Infos.find(Tiff_Tag::PhotometricInterpretation);
- if (Info!=Infos.end())
- {
- int32u Value=Info->second.Read().To_int32u();
- Fill(Stream_Image, StreamPos_Last, Image_ColorSpace, Tiff_PhotometricInterpretation_ColorSpace(Value));
- //Note: should we differeniate between raw RGB and palette (also RGB actually...)
- }
-
- //ImageDescription
- Info=Infos.find(Tiff_Tag::ImageDescription);
- if (Info!=Infos.end())
- Fill(Stream_Image, StreamPos_Last, Image_Title, Info->second.Read());
-
- //ExtraSamples
- Info=Infos.find(Tiff_Tag::ExtraSamples);
- if (Info!=Infos.end())
- {
- Ztring ColorSpace=Retrieve(Stream_Image, StreamPos_Last, Image_ColorSpace);
- ColorSpace+=Ztring().From_Local(Tiff_ExtraSamples_ColorSpace(Info->second.Read().To_int32u()));
- Fill(Stream_Image, StreamPos_Last, Image_ColorSpace, ColorSpace, true);
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tiff::Read_Directory()
-{
- /* Each directory consist of 4 fields */
- /* Get information for this directory */
- Element_Begin0();
- ifditem IfdItem;
- Get_X2 (IfdItem.Tag, "Tag"); Param_Info1(Tiff_Tag_Name(IfdItem.Tag));
- Get_X2 (IfdItem.Type, "Type"); Param_Info1(Tiff_Type_Name(IfdItem.Type));
- Get_X4 (IfdItem.Count, "Count");
- Element_Name(Tiff_Tag_Name(IfdItem.Tag));
-
- if (Tiff_Type_Size(IfdItem.Type)*IfdItem.Count<=4)
- {
- GetValueOffsetu(IfdItem);
-
- /* Padding up, skip dummy bytes */
- if (Tiff_Type_Size(IfdItem.Type)==0)
- {
- if (Element_Offset+4<Element_Size)
- Skip_XX(Element_Size-(Element_Offset+4), "Unknown");
- }
- else if (Tiff_Type_Size(IfdItem.Type)*IfdItem.Count<4)
- Skip_XX(Tiff_Type_Size(IfdItem.Type)*IfdItem.Count, "Padding");
- }
- else
- {
- int32u IFDOffset;
- Get_X4 (IFDOffset, "IFDOffset");
- IfdItems[IFDOffset]=IfdItem;
- }
- Element_End0();
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Tiff::Get_X2(int16u &Info, const char* Name)
-{
- if (LittleEndian)
- Get_L2 (Info, Name);
- else
- Get_B2 (Info, Name);
-}
-
-//---------------------------------------------------------------------------
-void File_Tiff::Get_X4(int32u &Info, const char* Name)
-{
- if (LittleEndian)
- Get_L4 (Info, Name);
- else
- Get_B4 (Info, Name);
-}
-
-//---------------------------------------------------------------------------
-void File_Tiff::GetValueOffsetu(ifditem &IfdItem)
-{
- ZtringList &Info=Infos[IfdItem.Tag]; Info.clear(); Info.Separator_Set(0, __T(" / "));
- const char* Name=Tiff_Tag_Name(IfdItem.Tag);
-
- if (IfdItem.Count>=10)
- {
- //Too many data, we don't currently need it and we skip it
- Skip_XX(Element_Size-(Element_Offset+4), Name);
- Info.clear();
- return;
- }
-
- switch (IfdItem.Type)
- {
- case 1: /* 8-bit unsigned integer. */
- for (int16u Pos=0; Pos<IfdItem.Count; Pos++)
- {
- int8u Ret8;
- #if MEDIAINFO_TRACE
- if (LittleEndian)
- Get_L1 (Ret8, Name);
- else
- Get_B1 (Ret8, Name);
- Element_Info1(Ztring::ToZtring(Ret8));
- #else //MEDIAINFO_TRACE
- if (Element_Offset+1>Element_Size)
- {
- Trusted_IsNot();
- break;
- }
- if (LittleEndian)
- Ret8=LittleEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- else
- Ret8=BigEndian2int8u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset++;
- #endif //MEDIAINFO_TRACE
- Info.push_back(Ztring::ToZtring(Ret8));
- }
- break;
-
- case 3: /* 16-bit (2-byte) unsigned integer. */
- for (int16u Pos=0; Pos<IfdItem.Count; Pos++)
- {
- int16u Ret16;
- #if MEDIAINFO_TRACE
- if (LittleEndian)
- Get_L2 (Ret16, Name);
- else
- Get_B2 (Ret16, Name);
- switch (IfdItem.Tag)
- {
- case Tiff_Tag::Compression : Element_Info1(Tiff_Compression(Ret16)); break;
- case Tiff_Tag::PhotometricInterpretation : Element_Info1(Tiff_PhotometricInterpretation(Ret16)); break;
- default : Element_Info1(Ztring::ToZtring(Ret16));
- }
- #else //MEDIAINFO_TRACE
- if (Element_Offset+2>Element_Size)
- {
- Trusted_IsNot();
- break;
- }
- if (LittleEndian)
- Ret16=LittleEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- else
- Ret16=BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=2;
- #endif //MEDIAINFO_TRACE
- Info.push_back(Ztring::ToZtring(Ret16));
- }
- break;
-
- case 4: /* 32-bit (4-byte) unsigned integer */
- for (int16u Pos=0; Pos<IfdItem.Count; Pos++)
- {
- int32u Ret32;
- #if MEDIAINFO_TRACE
- if (LittleEndian)
- Get_L4 (Ret32, Name);
- else
- Get_B4 (Ret32, Name);
- Element_Info1(Ztring::ToZtring(Ret32));
- #else //MEDIAINFO_TRACE
- if (Element_Offset+4>Element_Size)
- {
- Trusted_IsNot();
- break;
- }
- if (LittleEndian)
- Ret32=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- else
- Ret32=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
- #endif //MEDIAINFO_TRACE
- Info.push_back(Ztring::ToZtring(Ret32));
- }
- break;
-
- default: //Unknown
- {
- if (LittleEndian)
- Skip_L4( Name);
- else
- Skip_B4( Name);
- Info.clear(); //We actually do not know the type
- }
- }
-}
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tiff.h b/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tiff.h
deleted file mode 100644
index 9b514861a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Image/File_Tiff.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about TIFF files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TiffH
-#define MediaInfo_File_TiffH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Tiff
-//***************************************************************************
-
-class File_Tiff : public File__Analyze
-{
-public:
- //Constructor/Destructor
- File_Tiff();
-
-private :
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
- void Data_Parse_Fill();
-
- //Elements
- void Read_Directories();
- void Read_Directory();
-
- //Temp
- struct ifditem
- {
- int16u Tag;
- int16u Type;
- int32u Count;
- };
- typedef std::map<int32u, ifditem> ifditems; //Key is byte offset
- ifditems IfdItems;
- typedef std::map<int16u, ZtringList> infos; //Key is Tag value
- infos Infos;
- bool LittleEndian;
-
- //Helpers
- void Get_X2 (int16u &Info, const char* Name);
- void Get_X4 (int32u &Info, const char* Name);
- void GetValueOffsetu(ifditem &IfdItem);
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo.cpp
deleted file mode 100644
index 175c0b46a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-// MediaInfo - All info about media files
-
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-//To clarify the code
-namespace MediaInfo_Debug_MediaInfo
-{
-
-#if defined (MEDIAINFO_DEBUG_CONFIG) || defined (MEDIAINFO_DEBUG_BUFFER) || defined (MEDIAINFO_DEBUG_OUTPUT)
- #ifdef WINDOWS
- const Char* MediaInfo_Debug_Name=__T("MediaInfo_Debug");
- #else
- const Char* MediaInfo_Debug_Name=__T("/tmp/MediaInfo_Debug");
- #endif
-#endif
-
-#ifdef MEDIAINFO_DEBUG_CONFIG
- #define MEDIAINFO_DEBUG_STATIC(_TOAPPEND) \
- { \
- File F(Ztring(MediaInfo_Debug_Name)+__T(".Config.static.txt"), File::Access_Write_Append); \
- Ztring Debug; \
- _TOAPPEND; \
- Debug+=__T("\r\n"); \
- F.Write(Debug); \
- F.Close(); \
- }
-#else // MEDIAINFO_DEBUG_CONFIG
- #define MEDIAINFO_DEBUG_STATIC(_TOAPPEND)
-#endif // MEDIAINFO_DEBUG_CONFIG
-
-}
-using namespace MediaInfo_Debug_MediaInfo;
-
-//***************************************************************************
-// Constructor/destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-MediaInfo::MediaInfo()
-{
- Internal=new MediaInfo_Internal();
-}
-
-//---------------------------------------------------------------------------
-MediaInfo::~MediaInfo()
-{
- delete Internal; //Internal=NULL;
-}
-
-//***************************************************************************
-// Files
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Open(const String &File_Name_)
-{
- return Internal->Open(File_Name_);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Open (const int8u* Begin, size_t Begin_Size, const int8u* End, size_t End_Size, int64u File_Size)
-{
- return Internal->Open(Begin, Begin_Size, End, End_Size, (File_Size<Begin_Size+End_Size)?(Begin_Size+End_Size):File_Size);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Open_Buffer_Init (int64u File_Size, int64u File_Offset)
-{
- return Internal->Open_Buffer_Init(File_Size, File_Offset);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Open_Buffer_Continue (const int8u* ToAdd, size_t ToAdd_Size)
-{
- return Internal->Open_Buffer_Continue(ToAdd, ToAdd_Size).to_ulong();
-}
-
-//---------------------------------------------------------------------------
-int64u MediaInfo::Open_Buffer_Continue_GoTo_Get ()
-{
- return Internal->Open_Buffer_Continue_GoTo_Get();
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Open_Buffer_Finalize ()
-{
- return Internal->Open_Buffer_Finalize();
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Open_NextPacket ()
-{
- return Internal->Open_NextPacket().to_ulong();
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Save()
-{
- return 0; //Not yet implemented
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo::Close()
-{
- return Internal->Close();
-}
-
-//***************************************************************************
-// Get File info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-String MediaInfo::Inform(size_t)
-{
- return Internal->Inform();
-}
-
-//---------------------------------------------------------------------------
-String MediaInfo::Get(stream_t StreamKind, size_t StreamPos, size_t Parameter, info_t KindOfInfo)
-{
- return Internal->Get(StreamKind, StreamPos, Parameter, KindOfInfo);
-}
-
-//---------------------------------------------------------------------------
-String MediaInfo::Get(stream_t StreamKind, size_t StreamPos, const String &Parameter, info_t KindOfInfo, info_t KindOfSearch)
-{
- return Internal->Get(StreamKind, StreamPos, Parameter, KindOfInfo, KindOfSearch);
-}
-
-//***************************************************************************
-// Set File info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Set(const String &, stream_t, size_t, size_t, const String &)
-{
- return 0; //Not yet implemented
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Set(const String &, stream_t, size_t, const String &, const String &)
-{
- return 0; //Not yet implemented
-}
-
-//***************************************************************************
-// Output buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Output_Buffer_Get (const String &Value)
-{
- return Internal->Output_Buffer_Get(Value);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Output_Buffer_Get (size_t Pos)
-{
- return Internal->Output_Buffer_Get(Pos);
-}
-
-//***************************************************************************
-// Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-String MediaInfo::Option (const String &Option, const String &Value)
-{
- return Internal->Option(Option, Value);
-}
-
-//---------------------------------------------------------------------------
-String MediaInfo::Option_Static (const String &Option, const String &Value)
-{
- MEDIAINFO_DEBUG_STATIC(Debug+=__T("Option_Static, Option=");Debug+=Ztring(Option);Debug+=__T(", Value=");Debug+=Ztring(Value);)
- MediaInfoLib::Config.Init(); //Initialize Configuration
-
- if (Option==__T("Info_Capacities"))
- {
- return __T("Option disactivated for this version, will come back soon!");
- //MediaInfo_Internal MI;
- //return MI.Option(Option);
- }
- else if (Option==__T("Info_Version"))
- {
- Ztring ToReturn=MediaInfoLib::Config.Info_Version_Get();
- if (MediaInfo_Internal::LibraryIsModified())
- ToReturn+=__T(" modified");
- return ToReturn;
- }
- else
- return MediaInfoLib::Config.Option(Option, Value);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::Count_Get (stream_t StreamKind, size_t StreamPos)
-{
- return Internal->Count_Get(StreamKind, StreamPos);
-
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo::State_Get ()
-{
- return Internal->State_Get();
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo.h
deleted file mode 100644
index be2be16f7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo.h
+++ /dev/null
@@ -1,252 +0,0 @@
-// MediaInfo - All information about media files
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give information about a lot of media files
-// Dispatch the file to be tested by all containers
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfoH
-#define MediaInfoH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Const.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#undef MEDIAINFO_EXP
-#if defined(_WIN32) && !defined(__MINGW32__) //MinGW32 does not support _declspec
- #ifdef MEDIAINFO_DLL_EXPORT
- #define MEDIAINFO_EXP
- #else
- #define MEDIAINFO_EXP
- #endif
-#else //defined(_WIN32) && !defined(__MINGW32__)
- #if __GNUC__ >= 4
- #define MEDIAINFO_EXP __attribute__ ((visibility("default")))
- #else
- #define MEDIAINFO_EXP
- #endif
-#endif //defined(_WIN32) && !defined(__MINGW32__)
-
-#if !defined(__WINDOWS__)
- #define __stdcall //Supported only on windows
-#endif //!defined(_WIN32)
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class MediaInfo_Internal;
-
-//***************************************************************************
-/// @brief MediaInfo
-/// @version 0.7
-//***************************************************************************
-
-class MEDIAINFO_EXP MediaInfo
-{
-public :
- //Constructor/Destructor
- MediaInfo ();
- ~MediaInfo ();
- //File
- /// Open a file and collect information about it (technical information and tags)
- /// @brief Open a file
- /// @param File_Name Full name of file to open
- /// @retval 0 File not opened
- /// @retval 1 File opened
- size_t Open (const String &File_Name);
- /// Open a Buffer (Begin and end of the stream) and collect information about it (technical information and tags)
- /// @brief Open a buffer
- /// @param Begin First bytes of the buffer
- /// @param Begin_Size Size of Begin
- /// @param End Last bytes of the buffer
- /// @param End_Size Size of End
- /// @param File_Size Total size of the file
- /// @retval 0 File not opened
- /// @retval 1 File opened
- size_t Open (const ZenLib::int8u* Begin, size_t Begin_Size, const ZenLib::int8u* End=NULL, size_t End_Size=0, ZenLib::int64u File_Size=0);
- /// Open a stream and collect information about it (technical information and tags)
- /// @brief Open a stream (Init)
- /// @param File_Size Estimated file size
- /// @param File_Offset Offset of the file (if we don't have the beginning of the file)
- /// @retval 0 File not opened
- /// @retval 1 File opened
- size_t Open_Buffer_Init (ZenLib::int64u File_Size=(ZenLib::int64u)-1, ZenLib::int64u File_Offset=0);
- /// Open a stream and collect information about it (technical information and tags)
- /// @brief Open a stream (Continue)
- /// @param Buffer pointer to the stream
- /// @param Buffer_Size Count of bytes to read
- /// @return a bitfield \n
- /// bit 0: Is Accepted (format is known)
- /// bit 1: Is Filled (main data is collected)
- /// bit 2: Is Updated (some data have beed updated, example: duration for a real time MPEG-TS stream)
- /// bit 3: Is Finalized (No more data is needed, will not use further data)
- /// bit 4-15: Reserved
- /// bit 16-31: User defined
- size_t Open_Buffer_Continue (const ZenLib::int8u* Buffer, size_t Buffer_Size);
- /// Open a stream and collect information about it (technical information and tags)
- /// @brief Open a stream (Get the needed file Offset)
- /// @return the needed offset of the file \n
- /// File size if no more bytes are needed
- ZenLib::int64u Open_Buffer_Continue_GoTo_Get ();
- /// Open a stream and collect information about it (technical information and tags)
- /// @brief Open a stream (Finalize)
- /// @retval 0 failed
- /// @retval 1 succeed
- size_t Open_Buffer_Finalize ();
- /// If Open() is used in "PerPacket" mode, parse only one packet and return
- /// @brief Read one packet (if "PerPacket" mode is set)
- /// @return a bitfield \n
- /// bit 0: A packet was read
- size_t Open_NextPacket ();
- /// (NOT IMPLEMENTED YET) Save the file opened before with Open() (modifications of tags)
- /// @brief (NOT IMPLEMENTED YET) Save the file
- /// @retval 0 failed
- /// @retval 1 suceed
- size_t Save ();
- /// Close a file opened before with Open() (without saving)
- /// @brief Close a file
- /// @warning without have saved before, modifications are lost
- void Close ();
-
- //General information
- /// Get all details about a file in one string
- /// @brief Get all details about a file
- /// @param Reserved Reserved, do not use
- /// @pre You can change default presentation with Inform_Set()
- /// @return Text with information about the file
- String Inform (size_t Reserved=0);
-
- //Get
- /// Get a piece of information about a file (parameter is an integer)
- /// @brief Get a piece of information about a file (parameter is an integer)
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in Kind of stream (first, second...)
- /// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in integer format (first parameter, second parameter...)
- /// @param InfoKind Kind of information you want about the parameter (the text, the measure, the help...)
- /// @return a string about information you search \n
- /// an empty string if there is a problem
- String Get (stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t InfoKind=Info_Text);
- /// Get a piece of information about a file (parameter is a string)
- /// @brief Get a piece of information about a file (parameter is a string)
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in Kind of stream (first, second...)
- /// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in string format ("Codec", "Width"...) \n
- /// See MediaInfo::Option("Info_Parameters") to have the full list
- /// @param InfoKind Kind of information you want about the parameter (the text, the measure, the help...)
- /// @param SearchKind Where to look for the parameter
- /// @return a string about information you search \n
- /// an empty string if there is a problem
- String Get (stream_t StreamKind, size_t StreamNumber, const String &Parameter, info_t InfoKind=Info_Text, info_t SearchKind=Info_Name);
-
- //Set
- /// (NOT IMPLEMENTED YET) Set a piece of information about a file (parameter is an integer)
- /// @brief (NOT IMPLEMENTED YET) Set a piece of information about a file (parameter is an int)
- /// @warning Not yet implemented, do not use it
- /// @param ToSet Piece of information
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in Kind of stream (first, second...)
- /// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in integer format (first parameter, second parameter...)
- /// @param OldValue The old value of the parameter \n if OldValue is empty and ToSet is filled: tag is added \n if OldValue is filled and ToSet is filled: tag is replaced \n if OldValue is filled and ToSet is empty: tag is deleted
- /// @retval >0 succeed
- /// @retval 0 failed
- size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue=String());
- /// (NOT IMPLEMENTED YET) Set a piece of information about a file (parameter is a string)
- /// @warning Not yet implemented, do not use it
- /// @brief (NOT IMPLEMENTED YET) Set information about a file (parameter is a string)
- /// @param ToSet Piece of information
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in Kind of stream (first, second...)
- /// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in string format
- /// @param OldValue The old value of the parameter \n if OldValue is empty and ToSet is filled: tag is added \n if OldValue is filled and ToSet is filled: tag is replaced \n if OldValue is filled and ToSet is empty: tag is deleted
- /// @retval >0 succeed
- /// @retval 0 failed
- size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue=String());
-
- //Output_Buffered
- /// Output the written size when "File_Duplicate" option is used.
- /// @brief Output the written size when "File_Duplicate" option is used.
- /// @param Value The unique name of the duplicated stream (begin with "memory://")
- /// @return The size of the used buffer
- size_t Output_Buffer_Get (const String &Value);
- /// Output the written size when "File_Duplicate" option is used.
- /// @brief Output the written size when "File_Duplicate" option is used.
- /// @param Pos The order of calling
- /// @return The size of the used buffer
- size_t Output_Buffer_Get (size_t Pos);
-
- //Info
- /// Configure or get information about MediaInfoLib
- /// @param Option The name of option
- /// @param Value The value of option
- /// @return Depend of the option: by default "" (nothing) means No, other means Yes
- /// @post Known options are: \n
- /// * (NOT IMPLEMENTED YET) "BlockMethod": Configure when Open Method must return (default or not command not understood: "1") \n
- /// "0": Immediatly \n
- /// "1": After geting local information \n
- /// "2": When user interaction is needed, or whan Internet information is get
- /// * "Complete": For debug, configure if MediaInfoLib::Inform() show all information (doesn't care of InfoOption_NoShow tag): shows all information if true, shows only useful for user information if false (No by default)\n
- /// * "Complete_Get": return the state of "Complete" \n
- /// * "Language": Configure language (default language, and this object); Value is Description of language (format: "Column1;Colum2\n...) \n
- /// Column 1: Unique name ("Bytes", "Title") \n
- /// Column 2: translation ("Octets", "Titre") \n
- /// * "Language_Get": Get the language file in memory
- /// * "Language_Update": Configure language of this object only (for optimisation); Value is Description of language (format: "Column1;Colum2\n...) \n
- /// Column 1: Unique name ("Bytes", "Title") \n
- /// Column 2: translation ("Octets", "Titre") \n
- /// * "Inform": Configure custom text, See MediaInfoLib::Inform() function; Description of views (format: "Column1;Colum2...) \n
- /// Column 1: code (11 lines: "General", "Video", "Audio", "Text", "Other", "Begin", "End", "Page_Begin", "Page_Middle", "Page_End") \n
- /// Column 2: The text to show (exemple: "Audio: %FileName% is at %BitRate/String%") \n
- /// * "ParseUnknownExtensions": Configure if MediaInfo parse files with unknown extension\n
- /// * "ParseUnknownExtensions_Get": Get if MediaInfo parse files with unknown extension\n
- /// * "ShowFiles": Configure if MediaInfo keep in memory files with specific kind of streams (or no streams); Value is Description of components (format: "Column1;Colum2\n...) \n\n
- /// Column 1: code (available: "Nothing" for unknown format, "VideoAudio" for at least 1 video and 1 audio, "VideoOnly" for video streams only, "AudioOnly", "TextOnly") \n
- /// Column 2: "" (nothing) not keeping, other for keeping
- /// * (NOT IMPLEMENTED YET) "TagSeparator": Configure the separator if there are multiple same tags (" | " by default)\n
- /// * (NOT IMPLEMENTED YET) "TagSeparator_Get": return the state of "TagSeparator" \n
- /// * (NOT IMPLEMENTED YET) "Internet": Authorize Internet connection (Yes by default)
- /// * (NOT IMPLEMENTED YET) "Internet_Title_Get": When State=5000, give all possible titles for this file (one per line) \n
- /// Form: Author TagSeparator Title TagSeparator Year\n...
- /// * (NOT IMPLEMENTED YET) "Internet_Title_Set": Set the Good title (same as given by Internet_Title_Get) \n
- /// Form: Author TagSeparator Title TagSeparator Year
- /// * "Info_Parameters": Information about what are known unique names for parameters \n
- /// * "Info_Parameters_CSV": Information about what are known unique names for parameters, in CSV format \n
- /// * "Info_Codecs": Information about which codec is known \n
- /// * "Info_Version": Information about the version of MediaInfoLib
- /// * "Info_Url": Information about where to find the last version
- String Option (const String &Option, const String &Value=String());
- /// Configure or get information about MediaInfoLib
- /// @param Option The name of option
- /// @param Value The value of option
- /// @return Depend of the option: by default "" (nothing) means No, other means Yes
- /// @post Known options are: See MediaInfo::Option()
- static String Option_Static (const String &Option, const String &Value=String());
- /// @brief (NOT IMPLEMENTED YET) Get the state of the library
- /// @retval <1000 No information is available for the file yet
- /// @retval >=1000_<5000 Only local (into the file) information is available, getting Internet information (titles only) is no finished yet
- /// @retval 5000 (only if Internet connection is accepted) User interaction is needed (use Option() with "Internet_Title_Get") \n
- /// Warning: even there is only one possible, user interaction (or the software) is needed
- /// @retval >5000<=10000 Only local (into the file) information is available, getting Internet information (all) is no finished yet
- /// @retval <10000 Done
- size_t State_Get ();
- /// @brief Count of streams of a stream kind (StreamNumber not filled), or count of piece of information in this stream
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in this kind of stream (first, second...)
- /// @return The count of fields for this stream kind / stream number if stream number is provided, else the count of streams for this stream kind
- size_t Count_Get (stream_t StreamKind, size_t StreamNumber=(size_t)-1);
-
-private :
- MediaInfo_Internal* Internal;
-
- //Constructor
- MediaInfo (const MediaInfo&); // Prevent copy-construction
- MediaInfo& operator=(const MediaInfo&); // Prevent assignment
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList.cpp
deleted file mode 100644
index 7e8b2b32f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// For user: you can disable or enable it
-//#define MEDIAINFO_DEBUG
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(__BORLANDC__) && defined (_DEBUG)
- //Why? in Debug mode with release Wx Libs, wxAssert is not defined?
- void wxAssert (int, const wchar_t*, int, const wchar_t*, const wchar_t*){return;}
- void wxAssert (int, const char*, int, const char*, const char*){return;}
-#endif
-#include "MediaInfoList.h"
-#include "MediaInfoList_Internal.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//To clarify the code
-namespace MediaInfoList_Debug
-{
-#ifdef MEDIAINFO_DEBUG
- #include <stdio.h>
- FILE* F;
- std::string Debug;
-
- #undef MEDIAINFO_DEBUG
- #define MEDIAINFO_DEBUG(_TOAPPEND) \
- F=fopen("MediaInfoList_Debug.txt", "a+t"); \
- Debug.clear(); \
- _TOAPPEND; \
- Debug+="\r\n"; \
- fwrite(Debug.c_str(), Debug.size(), 1, F); \
- fclose(F);
-#else // MEDIAINFO_DEBUG
- #define MEDIAINFO_DEBUG(_TOAPPEND)
-#endif // MEDIAINFO_DEBUG
-
-#ifdef MEDIAINFO_DEBUG
-#define EXECUTE_VOID(_METHOD,_DEBUGB) \
- ((MediaInfo_Internal*)Internal)->_METHOD;
-#else //MEDIAINFO_DEBUG
-#define EXECUTE_VOID(_METHOD,_DEBUGB) \
- ((MediaInfo_Internal*)Internal)->_METHOD; \
- MEDIAINFO_DEBUG(_DEBUGB)
-#endif //MEDIAINFO_DEBUG
-
-#ifdef MEDIAINFO_DEBUG
-#define EXECUTE_INT(_METHOD,_DEBUGB) \
- return ((MediaInfo_Internal*)Internal)->_METHOD;
-#else //MEDIAINFO_DEBUG
-#define EXECUTE_INT(_METHOD, _DEBUGB) \
- int64u ToReturn=((MediaInfo_Internal*)Internal)->_METHOD; \
- MEDIAINFO_DEBUG(_DEBUGB) \
- return ToReturn;
-#endif //MEDIAINFO_DEBUG
-
-#ifdef MEDIAINFO_DEBUG
-#define EXECUTE_STRING(_METHOD,_DEBUGB) \
- return ((MediaInfo_Internal*)Internal)->_METHOD;
-#else //MEDIAINFO_DEBUG
-#define EXECUTE_STRING(_METHOD,_DEBUGB) \
- Ztring ToReturn=((MediaInfo_Internal*)Internal)->_METHOD; \
- MEDIAINFO_DEBUG(_DEBUGB) \
- return ToReturn;
-#endif //MEDIAINFO_DEBUG
-}
-using namespace MediaInfoList_Debug;
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Gestion de la classe
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Constructeurs
-MediaInfoList::MediaInfoList(size_t Count_Init)
-{
- MEDIAINFO_DEBUG(Debug+="Construction";)
- Internal=new MediaInfoList_Internal(Count_Init);
-}
-
-//---------------------------------------------------------------------------
-//Destructeur
-MediaInfoList::~MediaInfoList()
-{
- MEDIAINFO_DEBUG(Debug+="Destruction";)
- delete Internal; //Internal=NULL;
-}
-
-//***************************************************************************
-// Files
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::Open(const String &File, const fileoptions_t Options)
-{
- MEDIAINFO_DEBUG(Debug+="Open, File=";Debug+=Ztring(File).To_Local().c_str();)
- return Internal->Open(File, Options);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::Open_Buffer_Init (int64u File_Size_, int64u File_Offset_)
-{
- return Internal->Open_Buffer_Init(File_Size_, File_Offset_);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::Open_Buffer_Continue (size_t FilePos, const int8u* ToAdd, size_t ToAdd_Size)
-{
- return Internal->Open_Buffer_Continue(FilePos, ToAdd, ToAdd_Size);
-}
-
-//---------------------------------------------------------------------------
-int64u MediaInfoList::Open_Buffer_Continue_GoTo_Get (size_t FilePos)
-{
- return Internal->Open_Buffer_Continue_GoTo_Get(FilePos);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::Open_Buffer_Finalize (size_t FilePos)
-{
- return Internal->Open_Buffer_Finalize(FilePos);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::Save(size_t)
-{
- return 0; //Not yet implemented
-}
-
-//---------------------------------------------------------------------------
-void MediaInfoList::Close(size_t FilePos)
-{
- Internal->Close(FilePos);
-}
-
-//***************************************************************************
-// Get File info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-String MediaInfoList::Inform(size_t FilePos, size_t)
-{
- return Internal->Inform(FilePos);
-}
-
-//---------------------------------------------------------------------------
-String MediaInfoList::Get(size_t FilePos, stream_t KindOfStream, size_t StreamNumber, size_t Parameter, info_t KindOfInfo)
-{
- return Internal->Get(FilePos, KindOfStream, StreamNumber, Parameter, KindOfInfo);
-}
-
-//---------------------------------------------------------------------------
-String MediaInfoList::Get(size_t FilePos, stream_t KindOfStream, size_t StreamNumber, const String &Parameter, info_t KindOfInfo, info_t KindOfSearch)
-{
- //TRACE(Trace+=__T("Get(L), CompleteName=");Trace+=Info[FilePos].Get(Stream_General, 0, __T("CompleteName")).c_str();)
- //TRACE(Trace+=__T("Get(L), StreamKind=");Trace+=ZenLib::Ztring::ToZtring((int8u)KindOfStream);Trace+=__T(", StreamNumber=");Trace+=ZenLib::Ztring::ToZtring((int8u)StreamNumber);Trace+=__T(", Parameter=");Trace+=ZenLib::Ztring(Parameter);Trace+=__T(", KindOfInfo=");Trace+=ZenLib::Ztring::ToZtring((int8u)KindOfInfo);Trace+=__T(", KindOfSearch=");Trace+=ZenLib::Ztring::ToZtring((int8u)KindOfSearch);)
- //TRACE(Trace+=__T("Get(L), will return ");Trace+=Info[FilePos].Get(KindOfStream, StreamNumber, Parameter, KindOfInfo, KindOfSearch).c_str();)
-
- return Internal->Get(FilePos, KindOfStream, StreamNumber, Parameter, KindOfInfo, KindOfSearch);
-}
-
-//***************************************************************************
-// Set File info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::Set(const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue)
-{
- return Internal->Set(ToSet, FilePos, StreamKind, StreamNumber, Parameter, OldValue);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::Set(const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue)
-{
- return Internal->Set(ToSet, FilePos, StreamKind, StreamNumber, Parameter, OldValue);
-}
-
-//***************************************************************************
-// Output buffer
-//***************************************************************************
-
-/*
-//---------------------------------------------------------------------------
-char* MediaInfoList::Output_Buffer_Get (size_t FilePos, size_t &Output_Buffer_Size)
-{
- return Internal->Output_Buffer_Get(FilePos, Output_Buffer_Size);
-}
-*/
-
-//***************************************************************************
-// Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-String MediaInfoList::Option (const String &Option, const String &Value)
-{
- return Internal->Option(Option, Value);
-
-}
-
-//---------------------------------------------------------------------------
-String MediaInfoList::Option_Static (const String &Option, const String &Value)
-{
- return MediaInfo::Option_Static(Option, Value);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::State_Get()
-{
- return Internal->State_Get();
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::Count_Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber)
-{
- return Internal->Count_Get(FilePos, StreamKind, StreamNumber);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList::Count_Get()
-{
- return Internal->Count_Get();
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList.h
deleted file mode 100644
index 90f8b2e70..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give information about a lot of media files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfoListH
-#define MediaInfoListH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#undef MEDIAINFO_EXP
-#if defined(_WIN32) && !defined(__MINGW32__) //MinGW32 does not support _declspec
- #ifdef MEDIAINFO_DLL_EXPORT
- #define MEDIAINFO_EXP
- #else
- #define MEDIAINFO_EXP
- #endif
-#else //defined(_WIN32) && !defined(__MINGW32__)
- #if __GNUC__ >= 4
- #define MEDIAINFO_EXP __attribute__ ((visibility("default")))
- #else
- #define MEDIAINFO_EXP
- #endif
-#endif //defined(_WIN32) && !defined(__MINGW32__)
-
-#if !defined(__WINDOWS__)
- #define __stdcall //Supported only on windows
-#endif //!defined(_WIN32)
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class MediaInfoList_Internal;
-
-//***************************************************************************
-/// @brief MediaInfoList
-/// @version 0.7
-//***************************************************************************
-
-class MEDIAINFO_EXP MediaInfoList
-{
-public :
- //Class
- /// @brief Constructor
- /// @param Count_Init optimization information: How many files do you plan to handle?
- MediaInfoList (size_t Count_Init=64);
- ~MediaInfoList ();
-
- //Files
- /// Open one or more files and collect information about them (technical information and tags)
- /// @brief Open files
- /// @param File Full name of file(s) to open \n
- /// or Full name of folder(s) to open \n
- /// (if multiple names, names must be separated by "|")
- /// @param Options: FileOption_Recursive = Recursive mode for folders \n
- /// FileOption_Close = Close all already opened files before
- /// @return Number of files successfuly added
- size_t Open (const String &File, const fileoptions_t Options=FileOption_Nothing);
- /// Open a stream and collect information about it (technical information and tags)
- /// @brief Open a stream (Init)
- /// @param File_Size Estimated file size
- /// @param File_Offset Offset of the file (if we don't have the beginning of the file)
- /// @retval 0 failed
- /// @retval 1 succeed
- size_t Open_Buffer_Init (ZenLib::int64u File_Size=(ZenLib::int64u)-1, ZenLib::int64u File_Offset=0);
- /// Open a stream and collect information about it (technical information and tags)
- /// @brief Open a stream (Continue)
- /// @param FilePos File position
- /// @param Buffer pointer to the stream
- /// @param Buffer_Size Count of bytes to read
- /// @retval 0 failed
- /// @retval 1 succeed
- size_t Open_Buffer_Continue (size_t FilePos, const ZenLib::int8u* Buffer, size_t Buffer_Size);
- /// Open a stream and collect information about it (technical information and tags)
- /// @brief Open a stream (Get the needed file Offset)
- /// @param FilePos File position
- /// @return the needed offset of the file \n
- /// File size if no more bytes are needed
- ZenLib::int64u Open_Buffer_Continue_GoTo_Get (size_t FilePos);
- /// Open a stream and collect information about it (technical information and tags)
- /// @brief Open a stream (Finalize)
- /// @param FilePos File position
- /// @retval 0 failed
- /// @retval 1 succeed
- size_t Open_Buffer_Finalize (size_t FilePos);
- /// Save the file opened before with Open() (modifications of tags)
- /// @brief Save the file
- /// @param FilePos File position \n
- /// (you can know the position in searching the filename with MediaInfoList::Get(FilePos, 0, 0, "CompleteName") )
- /// @retval 0 failed
- /// @retval 1 succeed
- size_t Save (size_t FilePos);
- /// (NOT IMPLEMENTED YET) Save all files opened before with Open() (modifications of tags)
- /// @brief (NOT IMPLEMENTED YET) Save all files
- /// @param FilePos File position \n
- /// (you can know the position in searching the filename with MediaInfoList::Get(FilePos, 0, 0, "CompleteName") )
- /// @retval Count of files saved
- void Close (size_t FilePos=(size_t)-1);
-
- /// Get all details about a file in one string
- /// @brief Get all details about a file
- /// @param FilePos File position \n
- /// (you can know the position in searching the filename with MediaInfoList::Get(FilePos, 0, 0, "CompleteName") )
- /// @param Reserved Deprecated, do not use it anymore
- /// @pre You can change default presentation with Inform_Set()
- /// @return Text with information about the file
- String Inform (size_t FilePos=(size_t)-1, size_t Reserved=0);
-
- //Get
- /// Get a piece of information about a file (parameter is an integer)
- /// @brief Get a piece of information about a file (parameter is an integer)
- /// @param FilePos File position \n
- /// (you can know the position in searching the filename with MediaInfoList::Get(FilePos, 0, 0, "CompleteName") )
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in Kind of stream (first, second...)
- /// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in integer format (first parameter, second parameter...)
- /// @param KindOfInfo Kind of information you want about the parameter (the text, the measure, the help...)
- /// @return a string about information you search \n
- /// an empty string if there is a problem
- String Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t KindOfInfo=Info_Text); //Get info, FilePos=File position, StreamKind=General video audio text chapter, StreamNumber=stream number, PosInStream=parameter you want, KindOfInfo=name, text, measure, options, name (language), measure (language), info, how to
- /// Get a piece of information about a file (parameter is a string)
- /// @brief Get a piece of information about a file (parameter is a string)
- /// @param FilePos File position \n
- /// (you can know the position in searching the filename with MediaInfoList::Get(FilePos, 0, 0, "CompleteName") )
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in Kind of stream (first, second...)
- /// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in string format ("Codec", "Width"...) \n
- /// See MediaInfo::Option("Info_Parameters") to have the full list
- /// @param KindOfInfo Kind of information you want about the parameter (the text, the measure, the help...)
- /// @param KindOfSearch Where to look for the parameter
- /// @return a string about information you search \n
- /// an empty string if there is a problem
- String Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, info_t KindOfInfo=Info_Text, info_t KindOfSearch=Info_Name); //Get info, FilePos=File position, StreamKind=General video audio text chapter, StreamNumber=stream number, PosInStream=parameter you want, KindOfInfo=name text measure options name(language) measure(language) information how to, KindOfSearch=which Kind Of information Parameter must be searched?
-
- //Set
- /// (NOT IMPLEMENTED YET) Set a piece of information about a file (parameter is an int)
- /// @brief (NOT IMPLEMENTED YET) Set a piece of information about a file (parameter is an int)
- /// @warning Not yet implemented, do not use it
- /// @param ToSet Piece of information
- /// @param FilePos File position \n
- /// (you can know the position in searching the filename with MediaInfoList::Get(FilePos, 0, 0, "CompleteName") )
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in Kind of stream (first, second...)
- /// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in integer format (first parameter, second parameter...)
- /// @param OldValue The old value of the parameter \n if OldValue is empty and ToSet is filled: tag is added \n if OldValue is filled and ToSet is filled: tag is replaced \n if OldValue is filled and ToSet is empty: tag is deleted
- /// @retval >0 succeed
- /// @retval 0 failed
- size_t Set (const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue=String()); //Get info, FilePos=File position, StreamKind=General video audio text chapter, StreamNumber=stream number, PosInStream=parameter you want, KindOfInfo=name, text, measure, options name(language) measure(language) information how to
- /// @brief (NOT IMPLEMENTED YET) Get information about a file (parameter is a string)
- /// @warning Not yet implemented, do not use it
- /// @param ToSet Piece of information
- /// @param FilePos File position \n
- /// (you can know the position in searching the filename with MediaInfoList::Get(FilePos, 0, 0, "CompleteName") )
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in Kind of stream (first, second...)
- /// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in string format ("Codec", "Width"...) \n
- /// See Option("Info_Parameters") to have the full list
- /// @param OldValue The old value of the parameter \n if OldValue is empty and ToSet is filled: tag is added \n if OldValue is filled and ToSet is filled: tag is replaced \n if OldValue is filled and ToSet is empty: tag is deleted
- /// @retval >0 succeed
- /// @retval 0 failed
- size_t Set (const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue=String()); //Get info, FilePos=File position, StreamKind=General video audio text chapter, StreamNumber=stream number, PosInStream=parameter you want, KindOfInfo=name text measure options name (language) measure (language) information how to, KindOfSearch=which Kind Of information Parameter must be searched?
-
- //Output_Buffered
- /// Output buffer retrieving, used for File_Duplicate option.
- /// @brief Output buffer retrieving
- /// @param FilePos File position
- /// @param Output_Buffer_Size A pointer to the variable that receives the size of the buffer \n
- /// Note: you must use all the size of the buffer before the next call to this procedure
- /// @return A pointer on the output buffer, NULL if there is nothing in the buffer
- char* Output_Buffer_Get (size_t FilePos, size_t &Output_Buffer_Size);
-
- //Info
- /// Configure or get information about MediaInfoLib
- /// @param Option The name of option
- /// @param Value The value of option
- /// @return Depend of the option: by default "" (nothing) means No, other means Yes
- /// @post Known options are: See MediaInfo::Option()
- String Option (const String &Option, const String &Value=String());
- /// Configure or get information about MediaInfoLib (static version)
- /// @param Option The name of option
- /// @param Value The value of option
- /// @return Depend of the option: by default "" (nothing) means No, other means Yes
- /// @post Known options are: See MediaInfo::Option()
- static String Option_Static (const String &Option, const String &Value=String());
- /// @brief (NOT IMPLEMENTED YET) Get the state of the library
- /// @retval <1000 No information is available for the file yet
- /// @retval >=1000_<5000 Only local (into the file) information is available, getting Internet information (titles only) is no finished yet
- /// @retval 5000 (only if Internet connection is accepted) User interaction is needed (use Option() with "Internet_Title_Get") \n
- /// Warning: even there is only one possible, user interaction (or the software) is needed
- /// @retval >5000<=10000 Only local (into the file) information is available, getting Internet information (all) is no finished yet
- /// @retval <10000 Done
- size_t State_Get ();
- /// @brief Count of streams, or count of piece of information in this stream
- /// @param FilePos File position \n
- /// (you can know the position in searching the filename with MediaInfoList::Get(FilePos, 0, 0, "CompleteName") )
- /// @param StreamKind Kind of stream (general, video, audio...)
- /// @param StreamNumber Stream number in this kind of stream (first, second...)
- /// @return The count of fields for this stream kind / stream number if stream number is provided, else the count of streams for this stream kind
- size_t Count_Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber=(size_t)-1);
- /// @brief Get the count of opened files
- /// @return Count of files opened
- size_t Count_Get ();
-
-private :
- MediaInfoList_Internal* Internal;
-
- //Constructor
- MediaInfoList (const MediaInfoList&); // Prevent copy-construction
- MediaInfoList& operator=(const MediaInfoList&); // Prevent assignment
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList_Internal.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList_Internal.cpp
deleted file mode 100644
index 87336899b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList_Internal.cpp
+++ /dev/null
@@ -1,468 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfoList_Internal.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "ZenLib/File.h"
-#include "ZenLib/Dir.h"
-#include "MediaInfo/Reader/Reader_Directory.h"
-#include "MediaInfo/File__Analyse_Automatic.h"
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Gestion de la classe
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Constructeurs
-MediaInfoList_Internal::MediaInfoList_Internal(size_t Count_Init)
-: Thread()
-{
- CriticalSectionLocker CSL(CS);
-
- //Initialisation
- Info.reserve(Count_Init);
- for (size_t Pos=0; Pos<Info.size(); Pos++)
- Info[Pos]=NULL;
- ToParse_AlreadyDone=0;
- ToParse_Total=0;
- CountValid=0;
-
- //Threading
- BlockMethod=0;
- State=0;
- IsInThread=false;
-}
-
-//---------------------------------------------------------------------------
-//Destructeur
-MediaInfoList_Internal::~MediaInfoList_Internal()
-{
- Close();
-}
-
-//***************************************************************************
-// Fichiers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::Open(const String &File_Name, const fileoptions_t Options)
-{
- //Option FileOption_Close
- if (Options & FileOption_CloseAll)
- Close(All);
-
- //Option Recursive
- //TODO
-
- //Get all filenames
- ZtringList List;
- size_t Pos=File_Name.find(__T(':'));
- if (Pos!=string::npos && Pos!=1)
- List.push_back(File_Name);
- else if (File::Exists(File_Name))
- List.push_back(File_Name);
- else
- List=Dir::GetAllFileNames(File_Name, (Options&FileOption_NoRecursive)?Dir::Include_Files:((Dir::dirlist_t)(Dir::Include_Files|Dir::Parse_SubDirs)));
-
- #if defined(MEDIAINFO_DIRECTORY_YES)
- Reader_Directory().Directory_Cleanup(List);
- #endif //defined(MEDIAINFO_DIRECTORY_YES)
-
- //Registering files
- CS.Enter();
- if (ToParse.empty())
- CountValid=0;
- for (ZtringList::iterator L=List.begin(); L!=List.end(); ++L)
- ToParse.push(*L);
- ToParse_Total+=List.size();
- if (ToParse_Total)
- State=ToParse_AlreadyDone*10000/ToParse_Total;
- else
- State=10000;
- CS.Leave();
-
- //Parsing
- if (BlockMethod==1)
- {
- CS.Enter();
- if (!IsRunning()) //If already created, the routine will read the new files
- {
- RunAgain();
- IsInThread=true;
- }
- CS.Leave();
- return 0;
- }
- else
- {
- Entry(); //Normal parsing
- return Count_Get();
- }
-}
-
-void MediaInfoList_Internal::Entry()
-{
- if (ToParse_Total==0)
- return;
-
- for (;;)
- {
- CS.Enter();
- if (!ToParse.empty())
- {
- MediaInfo_Internal* MI=new MediaInfo_Internal();
- for (std::map<String, String>::iterator Config_MediaInfo_Item=Config_MediaInfo_Items.begin(); Config_MediaInfo_Item!=Config_MediaInfo_Items.end(); ++Config_MediaInfo_Item)
- MI->Option(Config_MediaInfo_Item->first, Config_MediaInfo_Item->second);
- if (BlockMethod==1)
- MI->Option(__T("Thread"), __T("1"));
- MI->Open(ToParse.front());
-
- if (BlockMethod==1)
- {
- CS.Leave();
- while (MI->State_Get()<10000)
- {
- size_t A=MI->State_Get();
- CS.Enter();
- State=(ToParse_AlreadyDone*10000+A)/ToParse_Total;
- CS.Leave();
- if (IsTerminating())
- {
- break;
- }
- Yield();
- }
- CS.Enter();
- }
- Info.push_back(MI);
- ToParse.pop();
- ToParse_AlreadyDone++;
-
- //Removing sequences of files from the list
- if (!MI->Get(Stream_General, 0, General_CompleteName_Last).empty())
- {
- Ztring CompleteName_Begin=MI->Get(Stream_General, 0, General_CompleteName);
- Ztring CompleteName_Last=MI->Get(Stream_General, 0, General_CompleteName_Last);
- size_t Pos=0;
- for (; Pos<CompleteName_Begin.size(); Pos++)
- {
- if (Pos>=CompleteName_Last.size())
- break;
- if (CompleteName_Begin[Pos]!=CompleteName_Last[Pos])
- break;
- }
- if (Pos<CompleteName_Begin.size())
- {
- CompleteName_Begin.resize(Pos);
- while (!ToParse.empty() && ToParse.front().find(CompleteName_Begin)==0)
- {
- ToParse.pop();
- ToParse_Total--;
- }
- }
- }
-
- State=ToParse_AlreadyDone*10000/ToParse_Total;
- //if ((ToParse_AlreadyDone%10)==0)
- // printf("%f done (%i/%i %s)\n", ((float)State)/100, (int)ToParse_AlreadyDone, (int)ToParse_Total, Ztring(ToParse.front()).To_UTF8().c_str());
- }
- if (IsTerminating() || State==10000)
- {
- CS.Leave();
- break;
- }
- CS.Leave();
- Yield();
- }
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::Open_Buffer_Init (int64u File_Size_, int64u File_Offset_)
-{
- MediaInfo_Internal* MI=new MediaInfo_Internal();
- MI->Open_Buffer_Init(File_Size_, File_Offset_);
-
- CriticalSectionLocker CSL(CS);
- size_t Pos=Info.size();
- Info.push_back(MI);
- return Pos;
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::Open_Buffer_Continue (size_t FilePos, const int8u* ToAdd, size_t ToAdd_Size)
-{
- CriticalSectionLocker CSL(CS);
- if (FilePos>=Info.size() || Info[FilePos]==NULL)
- return 0;
-
- return Info[FilePos]->Open_Buffer_Continue(ToAdd, ToAdd_Size).to_ulong();
-}
-
-//---------------------------------------------------------------------------
-int64u MediaInfoList_Internal::Open_Buffer_Continue_GoTo_Get (size_t FilePos)
-{
- CriticalSectionLocker CSL(CS);
- if (FilePos>=Info.size() || Info[FilePos]==NULL)
- return (int64u)-1;
-
- return Info[FilePos]->Open_Buffer_Continue_GoTo_Get();
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::Open_Buffer_Finalize (size_t FilePos)
-{
- CriticalSectionLocker CSL(CS);
- if (FilePos>=Info.size() || Info[FilePos]==NULL)
- return 0;
-
- return Info[FilePos]->Open_Buffer_Finalize();
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::Save(size_t)
-{
- CriticalSectionLocker CSL(CS);
- return 0; //Not yet implemented
-}
-
-//---------------------------------------------------------------------------
-void MediaInfoList_Internal::Close(size_t FilePos)
-{
- if (IsRunning())
- {
- RequestTerminate();
- while(IsExited())
- Yield();
- }
-
- CriticalSectionLocker CSL(CS);
- if (FilePos==Unlimited)
- {
- for (size_t Pos=0; Pos<Info.size(); Pos++)
- {
- delete Info[Pos]; Info[Pos]=NULL;
- }
- Info.clear();
- }
- else if (FilePos<Info.size())
- {
- delete Info[FilePos]; Info[FilePos]=NULL;
- Info.erase(Info.begin()+FilePos);
- }
-
- ToParse_AlreadyDone=0;
- ToParse_Total=0;
-}
-
-//***************************************************************************
-// Get File info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-String MediaInfoList_Internal::Inform(size_t FilePos, size_t)
-{
- if (FilePos==Error)
- {
- Ztring Retour;
- FilePos=0;
- ZtringListList MediaInfo_Custom_View; MediaInfo_Custom_View.Write(Option(__T("Inform_Get")));
- bool XML=false;
- if (MediaInfoLib::Config.Inform_Get()==__T("XML"))
- XML=true;
- if (XML) Retour+=__T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")+MediaInfoLib::Config.LineSeparator_Get()+__T("<Mediainfo version=\"")+MediaInfoLib::Config.Info_Version_Get().SubString(__T(" v"), Ztring())+__T("\">")+MediaInfoLib::Config.LineSeparator_Get();
- else
- Retour+=MediaInfo_Custom_View("Page_Begin");
- while (FilePos<Info.size())
- {
- Retour+=Inform(FilePos);
- if (FilePos<Info.size()-1)
- {
- Retour+=MediaInfo_Custom_View("Page_Middle");
- }
- FilePos++;
- }
- if (XML) Retour+=__T("</Mediainfo>")+MediaInfoLib::Config.LineSeparator_Get();
- else Retour+=MediaInfo_Custom_View("Page_End");//
- return Retour.c_str();
- }
-
- CriticalSectionLocker CSL(CS);
-
- if (FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0)
- return MediaInfoLib::Config.EmptyString_Get();
-
- Info[FilePos]->IsFirst=FilePos==0;
- Info[FilePos]->IsLast=(FilePos+1)==Info.size();
- return Info[FilePos]->Inform();
-}
-
-//---------------------------------------------------------------------------
-String MediaInfoList_Internal::Get(size_t FilePos, stream_t KindOfStream, size_t StreamNumber, size_t Parameter, info_t KindOfInfo)
-{
- CriticalSectionLocker CSL(CS);
- if (FilePos==Error || FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0)
- return MediaInfoLib::Config.EmptyString_Get();
-
- return Info[FilePos]->Get(KindOfStream, StreamNumber, Parameter, KindOfInfo);
-}
-
-//---------------------------------------------------------------------------
-String MediaInfoList_Internal::Get(size_t FilePos, stream_t KindOfStream, size_t StreamNumber, const String &Parameter, info_t KindOfInfo, info_t KindOfSearch)
-{
- CriticalSectionLocker CSL(CS);
- if (FilePos==Error || FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0)
- return MediaInfoLib::Config.EmptyString_Get();
-
- return Info[FilePos]->Get(KindOfStream, StreamNumber, Parameter, KindOfInfo, KindOfSearch);
-}
-
-//***************************************************************************
-// Set File info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::Set(const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue)
-{
- CriticalSectionLocker CSL(CS);
- if (FilePos==(size_t)-1)
- FilePos=0; //TODO : average
-
- if (FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0)
- return 0;
-
- return Info[FilePos]->Set(ToSet, StreamKind, StreamNumber, Parameter, OldValue);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::Set(const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue)
-{
- CriticalSectionLocker CSL(CS);
- if (FilePos==(size_t)-1)
- FilePos=0; //TODO : average
-
- if (FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0)
- return 0;
-
- return Info[FilePos]->Set(ToSet, StreamKind, StreamNumber, Parameter, OldValue);
-}
-
-//***************************************************************************
-// Output buffer
-//***************************************************************************
-
-/*
-//---------------------------------------------------------------------------
-char* MediaInfoList_Internal::Output_Buffer_Get (size_t FilePos, size_t &Output_Buffer_Size)
-{
- if (FilePos==(size_t)-1)
- FilePos=0; //TODO : average
-
- if (FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0)
- return 0;
-
- return Info[FilePos]->Output_Buffer_Get(Output_Buffer_Size);
-}
-*/
-
-//***************************************************************************
-// Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-String MediaInfoList_Internal::Option (const String &Option, const String &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ztring OptionLower=Option; OptionLower.MakeLowerCase();
- if (Option==__T(""))
- return __T("");
- else if (OptionLower==__T("manguage_update"))
- {
- //Special case : Language_Update must update all MediaInfo classes
- for (unsigned int Pos=0; Pos<Info.size(); Pos++)
- if (Info[Pos])
- Info[Pos]->Option(__T("language_update"), Value);
-
- return __T("");
- }
- else if (OptionLower==__T("create_dummy"))
- {
- Info.resize(Info.size()+1);
- Info[Info.size()-1]=new MediaInfo_Internal();
- Info[Info.size()-1]->Option(Option, Value);
- return __T("");
- }
- else if (OptionLower==__T("thread"))
- {
- BlockMethod=1;
- return __T("");
- }
- else if (OptionLower.find(__T("file_"))==0)
- {
- Config_MediaInfo_Items[Option]=Value;
- return __T("");
- }
- else
- return MediaInfo::Option_Static(Option, Value);
-}
-
-//---------------------------------------------------------------------------
-String MediaInfoList_Internal::Option_Static (const String &Option, const String &Value)
-{
- return MediaInfo::Option_Static(Option, Value);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::State_Get()
-{
- CriticalSectionLocker CSL(CS);
- if (State==10000)
- {
- //Pause();
- IsInThread=false;
- }
- return State;
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::Count_Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber)
-{
- CriticalSectionLocker CSL(CS);
- if (FilePos>=Info.size() || Info[FilePos]==NULL)
- return 0;
-
- return Info[FilePos]->Count_Get(StreamKind, StreamNumber);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfoList_Internal::Count_Get()
-{
- CriticalSectionLocker CSL(CS);
- return Info.size();
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList_Internal.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList_Internal.h
deleted file mode 100644
index acbaa2aa8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfoList_Internal.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give information about a lot of media files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfoList_InternalH
-#define MediaInfoList_InternalH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include <queue>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class MediaInfoList_Internal : public ZenLib::Thread
-{
-public :
- //Class
- MediaInfoList_Internal (size_t Count_Init=64);
- virtual ~MediaInfoList_Internal ();
-
- //Files
- size_t Open (const String &File, const fileoptions_t Options=FileOption_Nothing);
- size_t Open_Buffer_Init (ZenLib::int64u File_Size=(ZenLib::int64u)-1, ZenLib::int64u File_Offset=0);
- size_t Open_Buffer_Continue (size_t FilePos, const ZenLib::int8u* Buffer, size_t Buffer_Size);
- ZenLib::int64u Open_Buffer_Continue_GoTo_Get (size_t FilePos);
- size_t Open_Buffer_Finalize (size_t FilePos);
- size_t Save (size_t FilePos);
- void Close (size_t FilePos=(size_t)-1);
- String Inform (size_t FilePos=(size_t)-1, size_t Reserved=0);
-
- //Get
- String Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t KindOfInfo=Info_Text); //Get info, FilePos=File position, StreamKind=General video audio text chapter, StreamNumber=stream number, PosInStream=parameter you want, KindOfInfo=name, text, measure, options, name (language), measure (language), info, how to
- String Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, info_t KindOfInfo=Info_Text, info_t KindOfSearch=Info_Name); //Get info, FilePos=File position, StreamKind=General video audio text chapter, StreamNumber=stream number, PosInStream=parameter you want, KindOfInfo=name text measure options name(language) measure(language) information how to, KindOfSearch=which Kind Of information Parameter must be searched?
-
- //Set
- size_t Set (const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue=__T("")); //Get info, FilePos=File position, StreamKind=General video audio text chapter, StreamNumber=stream number, PosInStream=parameter you want, KindOfInfo=name, text, measure, options name(language) measure(language) information how to
- size_t Set (const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue=__T("")); //Get info, FilePos=File position, StreamKind=General video audio text chapter, StreamNumber=stream number, PosInStream=parameter you want, KindOfInfo=name text measure options name (language) measure (language) information how to, KindOfSearch=which Kind Of information Parameter must be searched?
-
- //Output_Buffered
- char* Output_Buffer_Get (size_t File_Pos, size_t &Output_Buffer_Size);
-
- //Info
- String Option (const String &Option, const String &Value=String(__T("")));
- static String Option_Static (const String &Option, const String &Value=String(__T("")));
- size_t State_Get ();
- size_t Count_Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber=(size_t)-1);
- size_t Count_Get ();
-
-private :
- std::vector<MediaInfo_Internal*> Info;
- std::queue<String> ToParse;
- std::map<String, String> Config_MediaInfo_Items; //Config per file
- size_t ToParse_AlreadyDone;
- size_t ToParse_Total;
- size_t CountValid;
- MediaInfo_Config_MediaInfo Config;
-
- //Threading
- size_t BlockMethod; //Open() return: 0=immedialtly, 1=after local info, 2=when user interaction is needed
- size_t State;
- bool IsInThread;
- void Entry();
- ZenLib::CriticalSection CS;
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config.cpp
deleted file mode 100644
index ac65644ee..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config.cpp
+++ /dev/null
@@ -1,2321 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Global configuration of MediaInfo
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Config.h"
-#include "ZenLib/ZtringListListF.h"
-#include "ZenLib/File.h"
-#include <algorithm>
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-const Char* MediaInfo_Version=__T("MediaInfoLib - v0.7.70");
-const Char* MediaInfo_Url=__T("http://MediaArea.net/MediaInfo");
- Ztring EmptyZtring; //Use it when we can't return a reference to a true Ztring
-const Ztring EmptyZtring_Const; //Use it when we can't return a reference to a true Ztring, const version
-const ZtringListList EmptyZtringListList_Const; //Use it when we can't return a reference to a true ZtringListList, const version
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_General_Mpeg4 (InfoMap &Info);
-void MediaInfo_Config_CodecID_Video_Matroska (InfoMap &Info);
-void MediaInfo_Config_CodecID_Video_Mpeg4 (InfoMap &Info);
-void MediaInfo_Config_CodecID_Video_Ogg (InfoMap &Info);
-void MediaInfo_Config_CodecID_Video_Real (InfoMap &Info);
-void MediaInfo_Config_CodecID_Video_Riff (InfoMap &Info);
-void MediaInfo_Config_CodecID_Audio_Matroska (InfoMap &Info);
-void MediaInfo_Config_CodecID_Audio_Mpeg4 (InfoMap &Info);
-void MediaInfo_Config_CodecID_Audio_Ogg (InfoMap &Info);
-void MediaInfo_Config_CodecID_Audio_Real (InfoMap &Info);
-void MediaInfo_Config_CodecID_Audio_Riff (InfoMap &Info);
-void MediaInfo_Config_CodecID_Text_Matroska (InfoMap &Info);
-void MediaInfo_Config_CodecID_Text_Mpeg4 (InfoMap &Info);
-void MediaInfo_Config_CodecID_Text_Riff (InfoMap &Info);
-void MediaInfo_Config_CodecID_Other_Mpeg4 (InfoMap &Info);
-void MediaInfo_Config_Codec (InfoMap &Info);
-void MediaInfo_Config_DefaultLanguage (Translation &Info);
-void MediaInfo_Config_Iso639_1 (InfoMap &Info);
-void MediaInfo_Config_Iso639_2 (InfoMap &Info);
-void MediaInfo_Config_General (ZtringListList &Info);
-void MediaInfo_Config_Video (ZtringListList &Info);
-void MediaInfo_Config_Audio (ZtringListList &Info);
-void MediaInfo_Config_Text (ZtringListList &Info);
-void MediaInfo_Config_Other (ZtringListList &Info);
-void MediaInfo_Config_Image (ZtringListList &Info);
-void MediaInfo_Config_Menu (ZtringListList &Info);
-void MediaInfo_Config_Summary (ZtringListList &Info);
-void MediaInfo_Config_Format (InfoMap &Info);
-void MediaInfo_Config_Library_DivX (InfoMap &Info);
-void MediaInfo_Config_Library_XviD (InfoMap &Info);
-void MediaInfo_Config_Library_MainConcept_Avc (InfoMap &Info);
-void MediaInfo_Config_Library_VorbisCom (InfoMap &Info);
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-void MediaInfo_Config::Init()
-{
- CS.Enter();
- //We use Init() instead of COnstructor because for some backends (like WxWidgets...) does NOT like constructor of static object with Unicode conversion
-
- //Test
- if (!LineSeparator.empty())
- {
- CS.Leave();
- return; //Already done
- }
-
- //Filling
- FormatDetection_MaximumOffset=0;
- #if MEDIAINFO_ADVANCED
- VariableGopDetection_Occurences=4;
- VariableGopDetection_GiveUp=false;
- InitDataNotRepeated_Occurences=(int64u)-1; //Disabled by default
- InitDataNotRepeated_GiveUp=false;
- #endif //MEDIAINFO_ADVANCED
- MpegTs_MaximumOffset=64*1024*1024;
- MpegTs_MaximumScanDuration=30000000000LL;
- MpegTs_ForceStreamDisplay=false;
- #if MEDIAINFO_ADVANCED
- MpegTs_VbrDetection_Delta=0;
- MpegTs_VbrDetection_Occurences=4;
- MpegTs_VbrDetection_GiveUp=false;
- #endif //MEDIAINFO_ADVANCED
- Complete=0;
- BlockMethod=0;
- Internet=0;
- MultipleValues=0;
- ParseUnknownExtensions=1;
- ShowFiles_Nothing=1;
- ShowFiles_VideoAudio=1;
- ShowFiles_VideoOnly=1;
- ShowFiles_AudioOnly=1;
- ShowFiles_TextOnly=1;
- ParseSpeed=(float32)0.5;
- Verbosity=(float32)0.5;
- Trace_Level=(float32)0.0;
- Trace_TimeSection_OnlyFirstOccurrence=false;
- Trace_Format=Trace_Format_Tree;
- Language_Raw=false;
- ReadByHuman=true;
- LegacyStreamDisplay=true;
- SkipBinaryData=false;
- Demux=0;
- LineSeparator=EOL;
- ColumnSeparator=__T(";");
- TagSeparator=__T(" / ");
- Quote=__T("\"");
- DecimalPoint=__T(".");
- ThousandsPoint=Ztring();
- #if MEDIAINFO_EVENTS
- Event_CallBackFunction=NULL;
- Event_UserHandler=NULL;
- #endif //MEDIAINFO_EVENTS
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssh_IgnoreSecurity=false;
- Ssl_IgnoreSecurity=false;
- #endif //defined(MEDIAINFO_LIBCURL_YES)
-
- CS.Leave();
-
- ZtringListList ZLL1; Language_Set(ZLL1);
-}
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-Ztring MediaInfo_Config::Option (const String &Option, const String &Value_Raw)
-{
- SubFile_Config(Option)=Value_Raw;
-
- String Option_Lower(Option);
- size_t Egal_Pos=Option_Lower.find(__T('='));
- if (Egal_Pos==string::npos)
- Egal_Pos=Option_Lower.size();
- transform(Option_Lower.begin(), Option_Lower.begin()+Egal_Pos, Option_Lower.begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix
-
- //Parsing pointer to a file
- Ztring Value;
- if (Value_Raw.find(__T("file://"))==0)
- {
- //Open
- Ztring FileName(Value_Raw, 7, Ztring::npos);
- File F(FileName.c_str());
-
- //Read
- int64u Size=F.Size_Get();
- if (Size>=0xFFFFFFFF)
- Size=1024*1024;
- int8u* Buffer=new int8u[(size_t)Size+1];
- size_t Pos=F.Read(Buffer, (size_t)Size);
- F.Close();
- Buffer[Pos]='\0';
- Ztring FromFile; FromFile.From_UTF8((char*)Buffer);
- if (FromFile.empty())
- FromFile.From_Local((char*)Buffer);
- delete[] Buffer; //Buffer=NULL;
-
- //Merge
- Value=FromFile;
- }
- else
- Value=Value_Raw;
-
- if (Option_Lower.empty())
- {
- return Ztring();
- }
- else if (Option_Lower==__T("charset_config"))
- {
- return Ztring(); //Only used in DLL, no Library action
- }
- else if (Option_Lower==__T("charset_output"))
- {
- return Ztring(); //Only used in DLL, no Library action
- }
- else if (Option_Lower==__T("complete"))
- {
- Complete_Set(Value.To_int8u()?true:false);
- return Ztring();
- }
- else if (Option_Lower==__T("complete_get"))
- {
- if (Complete_Get())
- return __T("1");
- else
- return Ztring();
- }
- else if (Option_Lower==__T("blockmethod"))
- {
- if (Value.empty())
- BlockMethod_Set(0);
- else
- BlockMethod_Set(1);
- return Ztring();
- }
- else if (Option_Lower==__T("blockmethod_get"))
- {
- if (BlockMethod_Get())
- return __T("1");
- else
- return Ztring();
- }
- else if (Option_Lower==__T("internet"))
- {
- if (Value.empty())
- Internet_Set(0);
- else
- Internet_Set(1);
- return Ztring();
- }
- else if (Option_Lower==__T("internet_get"))
- {
- if (Internet_Get())
- return __T("1");
- else
- return Ztring();
- }
- else if (Option_Lower==__T("demux"))
- {
- String Value_Lower(Value);
- transform(Value_Lower.begin(), Value_Lower.end(), Value_Lower.begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix
-
- if (Value_Lower==__T("all"))
- Demux_Set(7);
- else if (Value_Lower==__T("frame"))
- Demux_Set(1);
- else if (Value_Lower==__T("container"))
- Demux_Set(2);
- else if (Value_Lower==__T("elementary"))
- Demux_Set(4);
- else
- Demux_Set(0);
- return Ztring();
- }
- else if (Option_Lower==__T("demux_get"))
- {
- switch (Demux_Get())
- {
- case 7 : return __T("All");
- case 1 : return __T("Frame");
- case 2 : return __T("Container");
- case 4 : return __T("Elementary");
- default: return Ztring();
- }
- }
- else if (Option_Lower==__T("multiplevalues"))
- {
- if (Value.empty())
- MultipleValues_Set(0);
- else
- MultipleValues_Set(1);
- return Ztring();
- }
- else if (Option_Lower==__T("multiplevalues_get"))
- {
- if (MultipleValues_Get())
- return __T("1");
- else
- return Ztring();
- }
- else if (Option_Lower==__T("parseunknownextensions"))
- {
- if (Value.empty())
- ParseUnknownExtensions_Set(0);
- else
- ParseUnknownExtensions_Set(1);
- return Ztring();
- }
- else if (Option_Lower==__T("parseunknownextensions_get"))
- {
- if (ParseUnknownExtensions_Get())
- return __T("1");
- else
- return Ztring();
- }
- else if (Option_Lower==__T("showfiles_set"))
- {
- ShowFiles_Set(Value.c_str());
- return Ztring();
- }
- else if (Option_Lower==__T("readbyhuman"))
- {
- ReadByHuman_Set(Value.To_int8u()?true:false);
- return Ztring();
- }
- else if (Option_Lower==__T("readbyhuman_get"))
- {
- return ReadByHuman_Get()?__T("1"):__T("0");
- }
- else if (Option_Lower==__T("legacystreamdisplay"))
- {
- LegacyStreamDisplay_Set(Value.To_int8u()?true:false);
- return Ztring();
- }
- else if (Option_Lower==__T("legacystreamdisplay_get"))
- {
- return LegacyStreamDisplay_Get()?__T("1"):__T("0");
- }
- else if (Option_Lower==__T("skipbinarydata"))
- {
- SkipBinaryData_Set(Value.To_int8u()?true:false);
- return Ztring();
- }
- else if (Option_Lower==__T("skipbinarydata_get"))
- {
- return SkipBinaryData_Get()?__T("1"):__T("0");
- }
- else if (Option_Lower==__T("parsespeed"))
- {
- ParseSpeed_Set(Value.To_float32());
- return Ztring();
- }
- else if (Option_Lower==__T("parsespeed_get"))
- {
- return Ztring::ToZtring(ParseSpeed_Get(), 3);
- }
- else if (Option_Lower==__T("verbosity"))
- {
- Verbosity_Set(Value.To_float32());
- return Ztring();
- }
- else if (Option_Lower==__T("verbosity_get"))
- {
- return Ztring::ToZtring(Verbosity_Get(), 3);
- }
- else if (Option_Lower==__T("lineseparator"))
- {
- LineSeparator_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("lineseparator_get"))
- {
- return LineSeparator_Get();
- }
- else if (Option_Lower==__T("version"))
- {
- Version_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("version_get"))
- {
- return Version_Get();
- }
- else if (Option_Lower==__T("columnseparator"))
- {
- ColumnSeparator_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("columnseparator_get"))
- {
- return ColumnSeparator_Get();
- }
- else if (Option_Lower==__T("tagseparator"))
- {
- TagSeparator_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("tagseparator_get"))
- {
- return TagSeparator_Get();
- }
- else if (Option_Lower==__T("quote"))
- {
- Quote_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("quote_get"))
- {
- return Quote_Get();
- }
- else if (Option_Lower==__T("decimalpoint"))
- {
- DecimalPoint_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("decimalpoint_get"))
- {
- return DecimalPoint_Get();
- }
- else if (Option_Lower==__T("thousandspoint"))
- {
- ThousandsPoint_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("thousandspoint_get"))
- {
- return ThousandsPoint_Get();
- }
- else if (Option_Lower==__T("streammax"))
- {
- ZtringListList StreamMax=Value.c_str();
- StreamMax_Set(StreamMax);
- return Ztring();
- }
- else if (Option_Lower==__T("streammax_get"))
- {
- return StreamMax_Get();
- }
- else if (Option_Lower==__T("language"))
- {
- ZtringListList Language=Value.c_str();
- Language_Set(Language);
- return Ztring();
- }
- else if (Option_Lower==__T("language_get"))
- {
- return Language_Get();
- }
- else if (Option_Lower==__T("inform"))
- {
- Inform_Set(Value.c_str());
- return Ztring();
- }
- else if (Option_Lower==__T("output"))
- {
- Inform_Set(Value.c_str());
- return Ztring();
- }
- else if (Option_Lower==__T("inform_get"))
- {
- return Inform_Get();
- }
- else if (Option_Lower==__T("output_get"))
- {
- return Inform_Get();
- }
- else if (Option_Lower==__T("inform_replace"))
- {
- Inform_Replace_Set(Value.c_str());
- return Ztring();
- }
- else if (Option_Lower==__T("inform_replace_get"))
- {
- return Inform_Get();
- }
- else if (Option_Lower==__T("details")) //Legacy for trace_level
- {
- return MediaInfo_Config::Option(__T("Trace_Level"), Value);
- }
- else if (Option_Lower==__T("details_get")) //Legacy for trace_level
- {
- return MediaInfo_Config::Option(__T("Trace_Level_Get"), Value);
- }
- else if (Option_Lower==__T("detailslevel")) //Legacy for trace_level
- {
- return MediaInfo_Config::Option(__T("Trace_Level"), Value);
- }
- else if (Option_Lower==__T("detailslevel_get")) //Legacy for trace_level
- {
- return MediaInfo_Config::Option(__T("Trace_Level_Get"), Value);
- }
- else if (Option_Lower==__T("trace_level"))
- {
- Trace_Level_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("trace_level_get"))
- {
- return Ztring::ToZtring(Trace_Level_Get());
- }
- else if (Option_Lower==__T("trace_timesection_onlyfirstoccurrence"))
- {
- Trace_TimeSection_OnlyFirstOccurrence_Set(Value.To_int64u()?true:false);
- return Ztring();
- }
- else if (Option_Lower==__T("trace_timesection_onlyfirstoccurrence_get"))
- {
- return Trace_TimeSection_OnlyFirstOccurrence_Get()?__T("1"):__T("0");
- }
- else if (Option_Lower==__T("detailsformat")) //Legacy for trace_format
- {
- return MediaInfo_Config::Option(__T("Trace_Format"), Value);
- }
- else if (Option_Lower==__T("detailsformat_get")) //Legacy for trace_format
- {
- return MediaInfo_Config::Option(__T("Trace_Format_Get"), Value);
- }
- else if (Option_Lower==__T("trace_format"))
- {
- String NewValue_Lower(Value);
- transform(NewValue_Lower.begin(), NewValue_Lower.end(), NewValue_Lower.begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix
-
- CriticalSectionLocker CSL(CS);
- if (NewValue_Lower==__T("csv"))
- Trace_Format_Set(Trace_Format_CSV);
- else
- Trace_Format_Set(Trace_Format_Tree);
- return Ztring();
- }
- else if (Option_Lower==__T("trace_format_get"))
- {
- switch (Trace_Format_Get())
- {
- case Trace_Format_CSV : return __T("CSV");
- default : return __T("Tree");
- }
- }
- else if (Option_Lower==__T("detailsmodificator"))
- {
- Trace_Modificator_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("detailsmodificator_get"))
- {
- return Trace_Modificator_Get(Value);
- }
- else if (Option_Lower==__T("info_parameters"))
- {
- ZtringListList ToReturn=Info_Parameters_Get();
-
- //Adapt first column
- for (size_t Pos=0; Pos<ToReturn.size(); Pos++)
- {
- Ztring &C1=ToReturn(Pos, 0);
- if (!ToReturn(Pos, 1).empty())
- {
- C1.resize(25, ' ');
- ToReturn(Pos, 0)=C1 + __T(" :");
- }
- }
-
- ToReturn.Separator_Set(0, LineSeparator_Get());
- ToReturn.Separator_Set(1, __T(" "));
- ToReturn.Quote_Set(Ztring());
- return ToReturn.Read();
- }
- else if (Option_Lower==__T("info_parameters_csv"))
- {
- return Info_Parameters_Get(Value==__T("Complete"));
- }
- else if (Option_Lower==__T("info_codecs"))
- {
- return Info_Codecs_Get();
- }
- else if (Option_Lower==__T("info_version"))
- {
- return Info_Version_Get();
- }
- else if (Option_Lower==__T("info_url"))
- {
- return Info_Url_Get();
- }
- else if (Option_Lower==__T("formatdetection_maximumoffset"))
- {
- FormatDetection_MaximumOffset_Set(Value==__T("-1")?(int64u)-1:((Ztring*)&Value)->To_int64u());
- return Ztring();
- }
- else if (Option_Lower==__T("formatdetection_maximumoffset_get"))
- {
- return FormatDetection_MaximumOffset_Get()==(int64u)-1?Ztring(__T("-1")):Ztring::ToZtring(FormatDetection_MaximumOffset_Get());
- }
- else if (Option_Lower==__T("variablegopdetection_occurences"))
- {
- #if MEDIAINFO_ADVANCED
- VariableGopDetection_Occurences_Set(Value.To_int64u());
- return Ztring();
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("variablegopdetection_occurences_get"))
- {
- #if MEDIAINFO_ADVANCED
- return Ztring::ToZtring(VariableGopDetection_Occurences_Get());
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("variablegopdetection_giveup"))
- {
- #if MEDIAINFO_ADVANCED
- VariableGopDetection_GiveUp_Set(Value.To_int8u()?true:false);
- return Ztring();
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("variablegopdetection_giveup_get"))
- {
- #if MEDIAINFO_ADVANCED
- return VariableGopDetection_GiveUp_Get()?__T("1"):__T("0");
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("initdatanotrepeated_occurences"))
- {
- #if MEDIAINFO_ADVANCED
- InitDataNotRepeated_Occurences_Set(Value.To_int64u());
- return Ztring();
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("initdatanotrepeated_occurences_get"))
- {
- #if MEDIAINFO_ADVANCED
- return Ztring::ToZtring(InitDataNotRepeated_Occurences_Get());
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("initdatanotrepeated_giveup"))
- {
- #if MEDIAINFO_ADVANCED
- InitDataNotRepeated_GiveUp_Set(Value.To_int8u()?true:false);
- return Ztring();
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("initdatanotrepeated_giveup_get"))
- {
- #if MEDIAINFO_ADVANCED
- return InitDataNotRepeated_GiveUp_Get()?__T("1"):__T("0");
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("mpegts_maximumoffset"))
- {
- MpegTs_MaximumOffset_Set(Value==__T("-1")?(int64u)-1:((Ztring*)&Value)->To_int64u());
- return Ztring();
- }
- else if (Option_Lower==__T("mpegts_maximumoffset_get"))
- {
- return MpegTs_MaximumOffset_Get()==(int64u)-1?Ztring(__T("-1")):Ztring::ToZtring(MpegTs_MaximumOffset_Get());
- }
- else if (Option_Lower==__T("mpegts_vbrdetection_delta"))
- {
- #if MEDIAINFO_ADVANCED
- MpegTs_VbrDetection_Delta_Set(Value.To_float64());
- return Ztring();
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("mpegts_vbrdetection_delta_get"))
- {
- #if MEDIAINFO_ADVANCED
- return Ztring::ToZtring(MpegTs_VbrDetection_Delta_Get(), 9);
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("mpegts_vbrdetection_occurences"))
- {
- #if MEDIAINFO_ADVANCED
- MpegTs_VbrDetection_Occurences_Set(Value.To_int64u());
- return Ztring();
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("mpegts_vbrdetection_occurences_get"))
- {
- #if MEDIAINFO_ADVANCED
- return Ztring::ToZtring(MpegTs_VbrDetection_Occurences_Get());
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("mpegts_vbrdetection_giveup"))
- {
- #if MEDIAINFO_ADVANCED
- MpegTs_VbrDetection_GiveUp_Set(Value.To_int8u()?true:false);
- return Ztring();
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("mpegts_vbrdetection_giveup_get"))
- {
- #if MEDIAINFO_ADVANCED
- return MpegTs_VbrDetection_GiveUp_Get()?__T("1"):__T("0");
- #else // MEDIAINFO_ADVANCED
- return __T("advanced features are disabled due to compilation options");
- #endif // MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("mpegts_maximumscanduration"))
- {
- MpegTs_MaximumScanDuration_Set(float64_int64s((((Ztring*)&Value)->To_float64())*1000000000));
- return Ztring();
- }
- else if (Option_Lower==__T("mpegts_maximumscanduration_get"))
- {
- return MpegTs_MaximumScanDuration_Get()==(int64u)-1?Ztring(__T("-1")):Ztring::ToZtring(MpegTs_MaximumOffset_Get());
- }
- else if (Option_Lower==__T("mpegts_forcestreamdisplay"))
- {
- MpegTs_ForceStreamDisplay_Set(Value.To_int8u()?true:false);
- return Ztring();
- }
- else if (Option_Lower==__T("mpegts_forcestreamdisplay_get"))
- {
- return MpegTs_ForceStreamDisplay_Get()?__T("1"):__T("0");
- }
- else if (Option_Lower==__T("custommapping"))
- {
- CustomMapping_Set(Value);
- return Ztring();
- }
- else if (Option_Lower==__T("event_callbackfunction"))
- {
- #if MEDIAINFO_EVENTS
- return Event_CallBackFunction_Set(Value);
- #else //MEDIAINFO_EVENTS
- return __T("Event manager is disabled due to compilation options");
- #endif //MEDIAINFO_EVENTS
- }
- else if (Option_Lower==__T("ssh_knownhostsfilename"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssh_KnownHostsFileName_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssh_publickeyfilename"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssh_PublicKeyFileName_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssh_privatekeyfilename"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssh_PrivateKeyFileName_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssh_ignoresecurity"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssh_IgnoreSecurity_Set(Value.empty() || Value.To_float32());
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssl_certificatefilename"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssl_CertificateFileName_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssl_certificateFormat"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssl_CertificateFormat_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssl_privatekeyfilename"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssl_PrivateKeyFileName_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssl_privatekeyformat"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssl_PrivateKeyFormat_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssl_certificateauthorityfilename"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssl_CertificateAuthorityFileName_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssl_certificateauthoritypath"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssl_CertificateAuthorityPath_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssl_certificaterevocationlistfilename"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssl_CertificateRevocationListFileName_Set(Value);
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("ssl_ignoresecurity"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ssl_IgnoreSecurity_Set(Value.empty() || Value.To_float32());
- return Ztring();
- #else // defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif // defined(MEDIAINFO_LIBCURL_YES)
- }
- else
- return __T("Option not known");
-}
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Complete_Set (size_t NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Complete=NewValue;
-}
-
-size_t MediaInfo_Config::Complete_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Complete;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::BlockMethod_Set (size_t NewValue)
-{
- CriticalSectionLocker CSL(CS);
- BlockMethod=NewValue;
-}
-
-size_t MediaInfo_Config::BlockMethod_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return BlockMethod;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Internet_Set (size_t NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Internet=NewValue;
-}
-
-size_t MediaInfo_Config::Internet_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Internet;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::MultipleValues_Set (size_t NewValue)
-{
- CriticalSectionLocker CSL(CS);
- MultipleValues=NewValue;
-}
-
-size_t MediaInfo_Config::MultipleValues_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return MultipleValues;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::ParseUnknownExtensions_Set (size_t NewValue)
-{
- CriticalSectionLocker CSL(CS);
- ParseUnknownExtensions=NewValue;
-}
-
-size_t MediaInfo_Config::ParseUnknownExtensions_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ParseUnknownExtensions;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::ShowFiles_Set (const ZtringListList &NewShowFiles)
-{
- CriticalSectionLocker CSL(CS);
- for (size_t Pos=0; Pos<NewShowFiles.size(); Pos++)
- {
- const Ztring& Object=NewShowFiles.Read(Pos, 0);
- if (Object==__T("Nothing"))
- ShowFiles_Nothing=NewShowFiles.Read(Pos, 1).empty()?1:0;
- else if (Object==__T("VideoAudio"))
- ShowFiles_VideoAudio=NewShowFiles.Read(Pos, 1).empty()?1:0;
- else if (Object==__T("VideoOnly"))
- ShowFiles_VideoOnly=NewShowFiles.Read(Pos, 1).empty()?1:0;
- else if (Object==__T("AudioOnly"))
- ShowFiles_AudioOnly=NewShowFiles.Read(Pos, 1).empty()?1:0;
- else if (Object==__T("TextOnly"))
- ShowFiles_TextOnly=NewShowFiles.Read(Pos, 1).empty()?1:0;
- }
-}
-
-size_t MediaInfo_Config::ShowFiles_Nothing_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ShowFiles_Nothing;
-}
-
-size_t MediaInfo_Config::ShowFiles_VideoAudio_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ShowFiles_VideoAudio;
-}
-
-size_t MediaInfo_Config::ShowFiles_VideoOnly_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ShowFiles_VideoOnly;
-}
-
-size_t MediaInfo_Config::ShowFiles_AudioOnly_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ShowFiles_AudioOnly;
-}
-
-size_t MediaInfo_Config::ShowFiles_TextOnly_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ShowFiles_TextOnly;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::ParseSpeed_Set (float32 NewValue)
-{
- CriticalSectionLocker CSL(CS);
- ParseSpeed=NewValue;
-}
-
-float32 MediaInfo_Config::ParseSpeed_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ParseSpeed;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Verbosity_Set (float32 NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Verbosity=NewValue;
-}
-
-float32 MediaInfo_Config::Verbosity_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Verbosity;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::ReadByHuman_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- ReadByHuman=NewValue;
-}
-
-bool MediaInfo_Config::ReadByHuman_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ReadByHuman;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::LegacyStreamDisplay_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- LegacyStreamDisplay=NewValue;
-}
-
-bool MediaInfo_Config::LegacyStreamDisplay_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return LegacyStreamDisplay;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::SkipBinaryData_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- SkipBinaryData=NewValue;
-}
-
-bool MediaInfo_Config::SkipBinaryData_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return SkipBinaryData;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Trace_Level_Set (const ZtringListList &NewTrace_Level)
-{
- CriticalSectionLocker CSL(CS);
-
- //Global
- if (NewTrace_Level.size()==1 && NewTrace_Level[0].size()==1)
- {
- Trace_Level=NewTrace_Level[0][0].To_float32();
- if (Trace_Layers.to_ulong()==0) //if not set to a specific layer
- Trace_Layers.set();
- return;
- }
-
- //Per item
- else
- {
- Trace_Layers.reset();
- for (size_t Pos=0; Pos<NewTrace_Level.size(); Pos++)
- {
- if (NewTrace_Level[Pos].size()==2)
- {
- if (NewTrace_Level[Pos][0]==__T("Container1"))
- Trace_Layers.set(0, NewTrace_Level[Pos][1].To_int64u()?true:false);
- }
- }
- }
-}
-
-float32 MediaInfo_Config::Trace_Level_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Trace_Level;
-}
-
-std::bitset<32> MediaInfo_Config::Trace_Layers_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Trace_Layers;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Trace_TimeSection_OnlyFirstOccurrence_Set (bool Value)
-{
- CriticalSectionLocker CSL(CS);
- Trace_TimeSection_OnlyFirstOccurrence=Value;
-}
-
-bool MediaInfo_Config::Trace_TimeSection_OnlyFirstOccurrence_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Trace_TimeSection_OnlyFirstOccurrence;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Trace_Format_Set (trace_Format NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Trace_Format=NewValue;
-}
-
-MediaInfo_Config::trace_Format MediaInfo_Config::Trace_Format_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Trace_Format;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Trace_Modificator_Set (const ZtringList &NewValue)
-{
- ZtringList List(NewValue);
- if (List.size()!=2)
- return;
- transform(List[0].begin(), List[0].end(), List[0].begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix
-
- CriticalSectionLocker CSL(CS);
- Trace_Modificators[List[0]]=List[1]==__T("1");
-}
-
-Ztring MediaInfo_Config::Trace_Modificator_Get (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- std::map<Ztring, bool>::iterator ToReturn=Trace_Modificators.find(Value);
- if (ToReturn!=Trace_Modificators.end())
- return ToReturn->second?__T("1"):__T("0");
- else
- return Ztring();
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Demux_Set (int8u NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux=NewValue;
-}
-
-int8u MediaInfo_Config::Demux_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::LineSeparator_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- LineSeparator=NewValue;
-}
-
-Ztring MediaInfo_Config::LineSeparator_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return LineSeparator;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Version_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Version=ZtringListList(NewValue).Read(0); //Only the 1st value
-}
-
-Ztring MediaInfo_Config::Version_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Version;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::ColumnSeparator_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- ColumnSeparator=NewValue;
-}
-
-Ztring MediaInfo_Config::ColumnSeparator_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ColumnSeparator;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::TagSeparator_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- TagSeparator=NewValue;
-}
-
-Ztring MediaInfo_Config::TagSeparator_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return TagSeparator;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Quote_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Quote=NewValue;
-}
-
-Ztring MediaInfo_Config::Quote_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Quote;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::DecimalPoint_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- DecimalPoint=NewValue;
-}
-
-Ztring MediaInfo_Config::DecimalPoint_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return DecimalPoint;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::ThousandsPoint_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- ThousandsPoint=NewValue;
-}
-
-Ztring MediaInfo_Config::ThousandsPoint_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return ThousandsPoint;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::StreamMax_Set (const ZtringListList &)
-{
- CriticalSectionLocker CSL(CS);
- //TODO : implementation
-}
-
-Ztring MediaInfo_Config::StreamMax_Get ()
-{
- CriticalSectionLocker CSL(CS);
- ZtringListList StreamMax;
- //TODO : implementation
- return StreamMax.Read();
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Language_Set (const ZtringListList &NewValue)
-{
- CriticalSectionLocker CSL(CS);
-
- //Which language to choose?
- //-Raw
- if (NewValue.size()==1 && NewValue[0].size()==1 && NewValue[0][0]==__T("raw"))
- {
- Language_Raw=true;
- Language.clear();
- //Exceptions
- Language.Write(__T(" Config_Text_ColumnSize"), __T("32"));
- Language.Write(__T(" Config_Text_Separator"), __T(" : "));
- Language.Write(__T(" Config_Text_NumberTag"), __T(" #"));
- Language.Write(__T(" Config_Text_FloatSeparator"), __T("."));
- Language.Write(__T(" Config_Text_ThousandsSeparator"), Ztring());
- }
- //-Add custom language to English language
- else
- {
- Language_Raw=false;
- //Fill base words (with English translation)
- MediaInfo_Config_DefaultLanguage(Language);
- //Add custom language to English language
- for (size_t Pos=0; Pos<NewValue.size(); Pos++)
- if (NewValue[Pos].size()>=2)
- Language.Write(NewValue[Pos][0], NewValue[Pos][1]);
- else if (NewValue[Pos].size()==1)
- Language.Write(NewValue[Pos][0], Ztring());
- }
-
- //Fill Info
- for (size_t StreamKind=0; StreamKind<Stream_Max; StreamKind++)
- if (!Info[StreamKind].empty())
- Language_Set((stream_t)StreamKind);
-}
-
-void MediaInfo_Config::Language_Set (stream_t StreamKind)
-{
- //CriticalSectionLocker CSL(CS); //No, only used internaly
-
- //Fill Info
- for (size_t Pos=0; Pos<Info[StreamKind].size(); Pos++)
- {
- //Strings - Info_Name_Text
- Ztring ToReplace=Info[StreamKind](Pos, Info_Name);
- if (!Language_Raw && ToReplace.find(__T("/String"))!=Error)
- {
- ToReplace.FindAndReplace(__T("/String1"), Ztring());
- ToReplace.FindAndReplace(__T("/String2"), Ztring());
- ToReplace.FindAndReplace(__T("/String3"), Ztring());
- ToReplace.FindAndReplace(__T("/String4"), Ztring());
- ToReplace.FindAndReplace(__T("/String5"), Ztring());
- ToReplace.FindAndReplace(__T("/String6"), Ztring());
- ToReplace.FindAndReplace(__T("/String7"), Ztring());
- ToReplace.FindAndReplace(__T("/String8"), Ztring());
- ToReplace.FindAndReplace(__T("/String9"), Ztring());
- ToReplace.FindAndReplace(__T("/String"), Ztring());
- }
- if (!Language_Raw && ToReplace.find(__T("/"))!=Error) //Complex values, like XXX/YYY --> We translate both XXX and YYY
- {
- Ztring ToReplace1=ToReplace.SubString(Ztring(), __T("/"));
- Ztring ToReplace2=ToReplace.SubString(__T("/"), Ztring());
- Info[StreamKind](Pos, Info_Name_Text)=Language.Get(ToReplace1);
- Info[StreamKind](Pos, Info_Name_Text)+=__T("/");
- Info[StreamKind](Pos, Info_Name_Text)+=Language.Get(ToReplace2);
- }
- else
- Info[StreamKind](Pos, Info_Name_Text)=Language.Get(ToReplace);
- //Strings - Info_Measure_Text
- Info[StreamKind](Pos, Info_Measure_Text).clear(); //I don(t know why, but if I don't do this Delphi/C# debugger make crashing the calling program
- Info[StreamKind](Pos, Info_Measure_Text)=Language.Get(Info[StreamKind](Pos, Info_Measure));
- //Slashes
-
- }
-}
-
-Ztring MediaInfo_Config::Language_Get ()
-{
- CriticalSectionLocker CSL(CS);
- Ztring ToReturn;//TODO =Language.Read();
- return ToReturn;
-}
-
-Ztring MediaInfo_Config::Language_Get (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
-
- if (Value.find(__T(" / "))==string::npos)
- return Language.Get(Value);
-
- ZtringList List;
- List.Separator_Set(0, __T(" / "));
- List.Write(Value);
-
- //Per value
- for (size_t Pos=0; Pos<List.size(); Pos++)
- List[Pos]=Language.Get(List[Pos]);
-
- return List.Read();
-}
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Config::Language_Get (const Ztring &Count, const Ztring &Value, bool ValueIsAlwaysSame)
-{
- //Integrity
- if (Count.empty())
- return EmptyString_Get();
-
- //Different Plurals are available or not?
- if (Language_Get(Value+__T("1")).empty())
- {
- //if (Count==__T("0") || Count==__T("1"))
- return Count+Language_Get(Value);
- //else
- //return Count+Language_Get(Value+__T("s"));
- }
-
- //Detecting plural form for multiple plurals
- int8u Form=(int8u)-1;
-
- if (!ValueIsAlwaysSame)
- {
- //Polish has 2 plurial, Algorithm of Polish
- size_t CountI=Count.To_int32u();
- size_t Pos3=CountI/100;
- int8u Pos2=(int8u)((CountI-Pos3*100)/10);
- int8u Pos1=(int8u)(CountI-Pos3*100-Pos2*10);
- if (Pos3==0)
- {
- if (Pos2==0)
- {
- if (Pos1==0 && Count.size()==1) //Only "0", not "0.xxx"
- Form=0; //000 to 000 kanal?
- else if (Pos1<=1)
- Form=1; //001 to 001 kanal
- else if (Pos1<=4)
- Form=2; //002 to 004 kanaly
- else //if (Pos1>=5)
- Form=3; //005 to 009 kanalow
- }
- else if (Pos2==1)
- Form=3; //010 to 019 kanalow
- else //if (Pos2>=2)
- {
- if (Pos1<=1)
- Form=3; //020 to 021, 090 to 091 kanalow
- else if (Pos1<=4)
- Form=2; //022 to 024, 092 to 094 kanali
- else //if (Pos1>=5)
- Form=3; //025 to 029, 095 to 099 kanalow
- }
- }
- else //if (Pos3>=1)
- {
- if (Pos2==0)
- {
- if (Pos1<=1)
- Form=3; //100 to 101 kanalow
- else if (Pos1<=4)
- Form=2; //102 to 104 kanaly
- else //if (Pos1>=5)
- Form=3; //105 to 109 kanalow
- }
- else if (Pos2==1)
- Form=3; //110 to 119 kanalow
- else //if (Pos2>=2)
- {
- if (Pos1<=1)
- Form=3; //120 to 121, 990 to 991 kanalow
- else if (Pos1<=4)
- Form=2; //122 to 124, 992 to 994 kanali
- else //if (Pos1>=5)
- Form=3; //125 to 129, 995 to 999 kanalow
- }
- }
- }
-
- //Replace dot and thousand separator
- Ztring ToReturn=Count;
- Ztring DecimalPoint=Ztring().From_Number(0.0, 1).substr(1, 1); //Getting Decimal point
- size_t DotPos=ToReturn.find(DecimalPoint);
- if (DotPos!=string::npos)
- ToReturn.FindAndReplace(DecimalPoint, Language_Get(__T(" Config_Text_FloatSeparator")), DotPos);
- else
- DotPos=ToReturn.size();
- if (DotPos>3)
- ToReturn.insert(DotPos-3, Language_Get(__T(" Config_Text_ThousandsSeparator")));
-
- //Selecting the form
- if (Form==0)
- ToReturn =Language_Get(Value+__T("0")); //Only the translation
- else if (Form==1)
- ToReturn+=Language_Get(Value+__T("1"));
- else if (Form==2)
- ToReturn+=Language_Get(Value+__T("2"));
- else if (Form==3)
- ToReturn+=Language_Get(Value+__T("3"));
- else
- ToReturn+=Language_Get(Value);
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Inform_Set (const ZtringListList &NewValue)
-{
- if (NewValue.Read(0, 0)==__T("Details"))
- Trace_Level_Set(NewValue.Read(0, 1));
- else
- {
- Trace_Level_Set(__T("0"));
-
- CriticalSectionLocker CSL(CS);
-
- //Inform
- if (NewValue==__T("Summary"))
- MediaInfo_Config_Summary(Custom_View);
- else
- Custom_View=NewValue;
- }
-
- CriticalSectionLocker CSL(CS);
-
- //Parsing pointers to files in streams
- for (size_t Pos=0; Pos<Custom_View.size(); Pos++)
- {
- if (Custom_View[Pos].size()>1 && Custom_View(Pos, 1).find(__T("file://"))==0)
- {
- //Open
- Ztring FileName(Custom_View(Pos, 1), 7, Ztring::npos);
- File F(FileName.c_str());
-
- //Read
- int64u Size=F.Size_Get();
- if (Size>=0xFFFFFFFF)
- Size=1024*1024;
- int8u* Buffer=new int8u[(size_t)Size+1];
- size_t F_Offset=F.Read(Buffer, (size_t)Size);
- F.Close();
- Buffer[F_Offset]='\0';
- Ztring FromFile; FromFile.From_Local((char*)Buffer);
- delete[] Buffer; //Buffer=NULL;
-
- //Merge
- FromFile.FindAndReplace(__T("\r\n"), __T("\\r\\n"), 0, Ztring_Recursive);
- FromFile.FindAndReplace(__T("\n"), __T("\\r\\n"), 0, Ztring_Recursive);
- Custom_View(Pos, 1)=FromFile;
- }
- }
-}
-
-Ztring MediaInfo_Config::Inform_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Custom_View.Read();
-}
-
-Ztring MediaInfo_Config::Inform_Get (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- size_t Pos=Custom_View.Find(Value);
- if (Pos==Error || 1>=Custom_View[Pos].size())
- return EmptyString_Get();
- return Custom_View[Pos][1];
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config::Inform_Replace_Set (const ZtringListList &NewValue_Replace)
-{
- CriticalSectionLocker CSL(CS);
-
- //Parsing
- for (size_t Pos=0; Pos<NewValue_Replace.size(); Pos++)
- {
- if (NewValue_Replace[Pos].size()==2)
- Custom_View_Replace(NewValue_Replace[Pos][0])=NewValue_Replace[Pos][1];
- }
-}
-
-ZtringListList MediaInfo_Config::Inform_Replace_Get_All ()
-{
- CriticalSectionLocker CSL(CS);
- return Custom_View_Replace;
-}
-
-//---------------------------------------------------------------------------
-const Ztring &MediaInfo_Config::Format_Get (const Ztring &Value, infoformat_t KindOfFormatInfo)
-{
- //Loading codec table if not yet done
- CS.Enter();
- if (Format.empty())
- MediaInfo_Config_Format(Format);
- CS.Leave();
-
- return Format.Get(Value, KindOfFormatInfo);
-}
-
-//---------------------------------------------------------------------------
-InfoMap &MediaInfo_Config::Format_Get ()
-{
- //Loading codec table if not yet done
- CS.Enter();
- if (Format.empty())
- MediaInfo_Config_Format(Format);
- CS.Leave();
-
- return Format;
-}
-
-//---------------------------------------------------------------------------
-const Ztring &MediaInfo_Config::Codec_Get (const Ztring &Value, infocodec_t KindOfCodecInfo)
-{
- //Loading codec table if not yet done
- CS.Enter();
- if (Codec.empty())
- MediaInfo_Config_Codec(Codec);
- CS.Leave();
-
- return Codec.Get(Value, KindOfCodecInfo);
-}
-
-//---------------------------------------------------------------------------
-const Ztring &MediaInfo_Config::Codec_Get (const Ztring &Value, infocodec_t KindOfCodecInfo, stream_t KindOfStream)
-{
- //Loading codec table if not yet done
- CS.Enter();
- if (Codec.empty())
- MediaInfo_Config_Codec(Codec);
- CS.Leave();
-
- //Transform to text
- Ztring KindOfStreamS;
- switch (KindOfStream)
- {
- case Stream_General : KindOfStreamS=__T("G"); break;
- case Stream_Video : KindOfStreamS=__T("V"); break;
- case Stream_Audio : KindOfStreamS=__T("A"); break;
- case Stream_Text : KindOfStreamS=__T("T"); break;
- case Stream_Image : KindOfStreamS=__T("I"); break;
- case Stream_Other : KindOfStreamS=__T("C"); break;
- case Stream_Menu : KindOfStreamS=__T("M"); break;
- case Stream_Max : KindOfStreamS=__T(" "); break;
- }
-
- return Codec.Get(Value, KindOfCodecInfo, KindOfStreamS, InfoCodec_KindOfStream);
-}
-
-//---------------------------------------------------------------------------
-const Ztring &MediaInfo_Config::CodecID_Get (stream_t KindOfStream, infocodecid_format_t Format, const Ztring &Value, infocodecid_t KindOfCodecIDInfo)
-{
- if (Format>=InfoCodecID_Format_Max || KindOfStream>=Stream_Max)
- return EmptyString_Get();
-
- CS.Enter();
- if (CodecID[Format][KindOfStream].empty())
- {
- switch (KindOfStream)
- {
- case Stream_General :
- switch (Format)
- {
- case InfoCodecID_Format_Mpeg4 : MediaInfo_Config_CodecID_General_Mpeg4(CodecID[Format][KindOfStream]); break;
- default: ;
- }
- break;
- case Stream_Video :
- switch (Format)
- {
- case InfoCodecID_Format_Matroska : MediaInfo_Config_CodecID_Video_Matroska(CodecID[Format][KindOfStream]); break;
- case InfoCodecID_Format_Mpeg4 : MediaInfo_Config_CodecID_Video_Mpeg4(CodecID[Format][KindOfStream]); break;
- case InfoCodecID_Format_Real : MediaInfo_Config_CodecID_Video_Real(CodecID[Format][KindOfStream]); break;
- case InfoCodecID_Format_Riff : MediaInfo_Config_CodecID_Video_Riff(CodecID[Format][KindOfStream]); break;
- default: ;
- }
- break;
- case Stream_Audio :
- switch (Format)
- {
- case InfoCodecID_Format_Matroska : MediaInfo_Config_CodecID_Audio_Matroska(CodecID[Format][KindOfStream]); break;
- case InfoCodecID_Format_Mpeg4 : MediaInfo_Config_CodecID_Audio_Mpeg4(CodecID[Format][KindOfStream]); break;
- case InfoCodecID_Format_Real : MediaInfo_Config_CodecID_Audio_Real(CodecID[Format][KindOfStream]); break;
- case InfoCodecID_Format_Riff : MediaInfo_Config_CodecID_Audio_Riff(CodecID[Format][KindOfStream]); break;
- default: ;
- }
- break;
- case Stream_Text :
- switch (Format)
- {
- case InfoCodecID_Format_Matroska : MediaInfo_Config_CodecID_Text_Matroska(CodecID[Format][KindOfStream]); break;
- case InfoCodecID_Format_Mpeg4 : MediaInfo_Config_CodecID_Text_Mpeg4(CodecID[Format][KindOfStream]); break;
- case InfoCodecID_Format_Riff : MediaInfo_Config_CodecID_Text_Riff(CodecID[Format][KindOfStream]); break;
- default: ;
- }
- break;
- case Stream_Other :
- switch (Format)
- {
- case InfoCodecID_Format_Mpeg4 : MediaInfo_Config_CodecID_Other_Mpeg4(CodecID[Format][KindOfStream]); break;
- default: ;
- }
- break;
- default: ;
- }
- }
- CS.Leave();
- return CodecID[Format][KindOfStream].Get(Value, KindOfCodecIDInfo);
-}
-
-//---------------------------------------------------------------------------
-const Ztring &MediaInfo_Config::Library_Get (infolibrary_format_t Format, const Ztring &Value, infolibrary_t KindOfLibraryInfo)
-{
- if (Format>=InfoLibrary_Format_Max)
- return EmptyString_Get();
-
- CS.Enter();
- if (Library[Format].empty())
- {
- switch (Format)
- {
- case InfoLibrary_Format_DivX : MediaInfo_Config_Library_DivX(Library[Format]); break;
- case InfoLibrary_Format_XviD : MediaInfo_Config_Library_XviD(Library[Format]); break;
- case InfoLibrary_Format_MainConcept_Avc : MediaInfo_Config_Library_MainConcept_Avc(Library[Format]); break;
- case InfoLibrary_Format_VorbisCom : MediaInfo_Config_Library_VorbisCom(Library[Format]); break;
- default: ;
- }
- }
- CS.Leave();
- return Library[Format].Get(Value, KindOfLibraryInfo);
-}
-
-//---------------------------------------------------------------------------
-const Ztring &MediaInfo_Config::Iso639_1_Get (const Ztring &Value)
-{
- //Loading codec table if not yet done
- CS.Enter();
- if (Iso639_1.empty())
- MediaInfo_Config_Iso639_1(Iso639_1);
- CS.Leave();
-
- return Iso639_1.Get(Ztring(Value).MakeLowerCase(), 1);
-}
-
-//---------------------------------------------------------------------------
-const Ztring &MediaInfo_Config::Iso639_2_Get (const Ztring &Value)
-{
- //Loading codec table if not yet done
- CS.Enter();
- if (Iso639_2.empty())
- MediaInfo_Config_Iso639_2(Iso639_2);
- CS.Leave();
-
- return Iso639_2.Get(Ztring(Value).MakeLowerCase(), 1);
-}
-
-//---------------------------------------------------------------------------
-const Ztring MediaInfo_Config::Iso639_Find (const Ztring &Value)
-{
- Translation Info;
- MediaInfo_Config_DefaultLanguage (Info);
- Ztring Value_Lower(Value);
- Value_Lower.MakeLowerCase();
-
- for (Translation::iterator Trans=Info.begin(); Trans!=Info.end(); ++Trans)
- {
- Trans->second.MakeLowerCase();
- if (Trans->second==Value_Lower && Trans->first.find(__T("Language_"))==0)
- return Trans->first.substr(9, string::npos);
- }
- return Ztring();
-}
-
-//---------------------------------------------------------------------------
-const Ztring &MediaInfo_Config::Info_Get (stream_t KindOfStream, const Ztring &Value, info_t KindOfInfo)
-{
- //Loading codec table if not yet done
- CS.Enter();
- if (Info[KindOfStream].empty())
- switch (KindOfStream)
- {
- case Stream_General : MediaInfo_Config_General(Info[Stream_General]); Language_Set(Stream_General); break;
- case Stream_Video : MediaInfo_Config_Video(Info[Stream_Video]); Language_Set(Stream_Video); break;
- case Stream_Audio : MediaInfo_Config_Audio(Info[Stream_Audio]); Language_Set(Stream_Audio); break;
- case Stream_Text : MediaInfo_Config_Text(Info[Stream_Text]); Language_Set(Stream_Text); break;
- case Stream_Other : MediaInfo_Config_Other(Info[Stream_Other]); Language_Set(Stream_Other); break;
- case Stream_Image : MediaInfo_Config_Image(Info[Stream_Image]); Language_Set(Stream_Image); break;
- case Stream_Menu : MediaInfo_Config_Menu(Info[Stream_Menu]); Language_Set(Stream_Menu); break;
- default:;
- }
- CS.Leave();
-
- if (KindOfStream>=Stream_Max)
- return EmptyString_Get();
- size_t Pos=Info[KindOfStream].Find(Value);
- if (Pos==Error || (size_t)KindOfInfo>=Info[KindOfStream][Pos].size())
- return EmptyString_Get();
- return Info[KindOfStream][Pos][KindOfInfo];
-}
-
-const Ztring &MediaInfo_Config::Info_Get (stream_t KindOfStream, size_t Pos, info_t KindOfInfo)
-{
- //Loading codec table if not yet done
- CS.Enter();
- if (Info[KindOfStream].empty())
- switch (KindOfStream)
- {
- case Stream_General : MediaInfo_Config_General(Info[Stream_General]); Language_Set(Stream_General); break;
- case Stream_Video : MediaInfo_Config_Video(Info[Stream_Video]); Language_Set(Stream_Video); break;
- case Stream_Audio : MediaInfo_Config_Audio(Info[Stream_Audio]); Language_Set(Stream_Audio); break;
- case Stream_Text : MediaInfo_Config_Text(Info[Stream_Text]); Language_Set(Stream_Text); break;
- case Stream_Other : MediaInfo_Config_Other(Info[Stream_Other]); Language_Set(Stream_Other); break;
- case Stream_Image : MediaInfo_Config_Image(Info[Stream_Image]); Language_Set(Stream_Image); break;
- case Stream_Menu : MediaInfo_Config_Menu(Info[Stream_Menu]); Language_Set(Stream_Menu); break;
- default:;
- }
- CS.Leave();
-
- if (KindOfStream>=Stream_Max)
- return EmptyString_Get();
- if (Pos>=Info[KindOfStream].size() || (size_t)KindOfInfo>=Info[KindOfStream][Pos].size())
- return EmptyString_Get();
- return Info[KindOfStream][Pos][KindOfInfo];
-}
-
-const ZtringListList &MediaInfo_Config::Info_Get(stream_t KindOfStream)
-{
- if (KindOfStream>=Stream_Max)
- return EmptyStringListList_Get();
-
- //Loading codec table if not yet done
- CS.Enter();
- if (Info[KindOfStream].empty())
- switch (KindOfStream)
- {
- case Stream_General : MediaInfo_Config_General(Info[Stream_General]); Language_Set(Stream_General); break;
- case Stream_Video : MediaInfo_Config_Video(Info[Stream_Video]); Language_Set(Stream_Video); break;
- case Stream_Audio : MediaInfo_Config_Audio(Info[Stream_Audio]); Language_Set(Stream_Audio); break;
- case Stream_Text : MediaInfo_Config_Text(Info[Stream_Text]); Language_Set(Stream_Text); break;
- case Stream_Other : MediaInfo_Config_Other(Info[Stream_Other]); Language_Set(Stream_Other); break;
- case Stream_Image : MediaInfo_Config_Image(Info[Stream_Image]); Language_Set(Stream_Image); break;
- case Stream_Menu : MediaInfo_Config_Menu(Info[Stream_Menu]); Language_Set(Stream_Menu); break;
- default:;
- }
- CS.Leave();
-
- return Info[KindOfStream];
-}
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Config::Info_Parameters_Get (bool Complete)
-{
- CriticalSectionLocker CSL(CS);
-
- //Loading all
- MediaInfo_Config_General(Info[Stream_General]);
- MediaInfo_Config_Video(Info[Stream_Video]);
- MediaInfo_Config_Audio(Info[Stream_Audio]);
- MediaInfo_Config_Text(Info[Stream_Text]);
- MediaInfo_Config_Other(Info[Stream_Other]);
- MediaInfo_Config_Image(Info[Stream_Image]);
- MediaInfo_Config_Menu(Info[Stream_Menu]);
-
- //Building
- ZtringListList ToReturn;
- size_t ToReturn_Pos=0;
-
- for (size_t StreamKind=0; StreamKind<Stream_Max; StreamKind++)
- {
- ToReturn(ToReturn_Pos, 0)=Info[StreamKind].Read(__T("StreamKind"), Info_Text);
- ToReturn_Pos++;
- for (size_t Pos=0; Pos<Info[StreamKind].size(); Pos++)
- if (!Info[StreamKind].Read(Pos, Info_Name).empty())
- {
- if (Complete)
- ToReturn.push_back(Info[StreamKind].Read(Pos));
- else
- {
- ToReturn(ToReturn_Pos, 0)=Info[StreamKind].Read(Pos, Info_Name);
- ToReturn(ToReturn_Pos, 1)=Info[StreamKind].Read(Pos, Info_Info);
- }
- ToReturn_Pos++;
- }
- ToReturn_Pos++;
- }
- return ToReturn.Read();
-}
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Config::Info_Tags_Get () const
-{
- return Ztring();
-}
-
-Ztring MediaInfo_Config::Info_Codecs_Get ()
-{
- CriticalSectionLocker CSL(CS);
-
- //Loading
- MediaInfo_Config_Codec(Codec);
-
- //Building
- Ztring ToReturn;
- InfoMap::iterator Temp=Codec.begin();
- while (Temp!=Codec.end())
- {
- ToReturn+=Temp->second.Read();
- ToReturn+=EOL;
- ++Temp;
- }
-
- return ToReturn;
-}
-
-Ztring MediaInfo_Config::Info_Version_Get () const
-{
- return MediaInfo_Version;
-}
-
-Ztring MediaInfo_Config::Info_Url_Get () const
-{
- return MediaInfo_Url;
-}
-
-const Ztring &MediaInfo_Config::EmptyString_Get () const
-{
- return EmptyZtring_Const;
-}
-
-const ZtringListList &MediaInfo_Config::EmptyStringListList_Get () const
-{
- return EmptyZtringListList_Const;
-}
-
-void MediaInfo_Config::FormatDetection_MaximumOffset_Set (int64u Value)
-{
- CriticalSectionLocker CSL(CS);
- FormatDetection_MaximumOffset=Value;
-}
-
-int64u MediaInfo_Config::FormatDetection_MaximumOffset_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return FormatDetection_MaximumOffset;
-}
-
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config::VariableGopDetection_Occurences_Set (int64u Value)
-{
- CriticalSectionLocker CSL(CS);
- VariableGopDetection_Occurences=Value;
-}
-
-int64u MediaInfo_Config::VariableGopDetection_Occurences_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return VariableGopDetection_Occurences;
-}
-#endif // MEDIAINFO_ADVANCED
-
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config::VariableGopDetection_GiveUp_Set (bool Value)
-{
- CriticalSectionLocker CSL(CS);
- VariableGopDetection_GiveUp=Value;
-}
-
-bool MediaInfo_Config::VariableGopDetection_GiveUp_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return VariableGopDetection_GiveUp;
-}
-#endif // MEDIAINFO_ADVANCED
-
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config::InitDataNotRepeated_Occurences_Set (int64u Value)
-{
- CriticalSectionLocker CSL(CS);
- InitDataNotRepeated_Occurences=Value;
-}
-
-int64u MediaInfo_Config::InitDataNotRepeated_Occurences_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return InitDataNotRepeated_Occurences;
-}
-#endif // MEDIAINFO_ADVANCED
-
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config::InitDataNotRepeated_GiveUp_Set (bool Value)
-{
- CriticalSectionLocker CSL(CS);
- InitDataNotRepeated_GiveUp=Value;
-}
-
-bool MediaInfo_Config::InitDataNotRepeated_GiveUp_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return InitDataNotRepeated_GiveUp;
-}
-#endif // MEDIAINFO_ADVANCED
-
-void MediaInfo_Config::MpegTs_MaximumOffset_Set (int64u Value)
-{
- CriticalSectionLocker CSL(CS);
- MpegTs_MaximumOffset=Value;
-}
-
-int64u MediaInfo_Config::MpegTs_MaximumOffset_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return MpegTs_MaximumOffset;
-}
-
-void MediaInfo_Config::MpegTs_MaximumScanDuration_Set (int64u Value)
-{
- CriticalSectionLocker CSL(CS);
- MpegTs_MaximumScanDuration=Value;
-}
-
-int64u MediaInfo_Config::MpegTs_MaximumScanDuration_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return MpegTs_MaximumScanDuration;
-}
-
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config::MpegTs_VbrDetection_Delta_Set (float64 Value)
-{
- CriticalSectionLocker CSL(CS);
- MpegTs_VbrDetection_Delta=Value;
-}
-
-float64 MediaInfo_Config::MpegTs_VbrDetection_Delta_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return MpegTs_VbrDetection_Delta;
-}
-#endif // MEDIAINFO_ADVANCED
-
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config::MpegTs_VbrDetection_Occurences_Set (int64u Value)
-{
- CriticalSectionLocker CSL(CS);
- MpegTs_VbrDetection_Occurences=Value;
-}
-
-int64u MediaInfo_Config::MpegTs_VbrDetection_Occurences_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return MpegTs_VbrDetection_Occurences;
-}
-#endif // MEDIAINFO_ADVANCED
-
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config::MpegTs_VbrDetection_GiveUp_Set (bool Value)
-{
- CriticalSectionLocker CSL(CS);
- MpegTs_VbrDetection_GiveUp=Value;
-}
-
-bool MediaInfo_Config::MpegTs_VbrDetection_GiveUp_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return MpegTs_VbrDetection_GiveUp;
-}
-#endif // MEDIAINFO_ADVANCED
-
-void MediaInfo_Config::MpegTs_ForceStreamDisplay_Set (bool Value)
-{
- CriticalSectionLocker CSL(CS);
- MpegTs_ForceStreamDisplay=Value;
-}
-
-bool MediaInfo_Config::MpegTs_ForceStreamDisplay_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return MpegTs_ForceStreamDisplay;
-}
-
-//***************************************************************************
-// SubFile
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-ZtringListList MediaInfo_Config::SubFile_Config_Get ()
-{
- CriticalSectionLocker CSL(CS);
-
- return SubFile_Config;
-}
-
-//***************************************************************************
-// Custom mapping
-//***************************************************************************
-
-void MediaInfo_Config::CustomMapping_Set (const Ztring &Value)
-{
- ZtringList List; List.Separator_Set(0, __T(","));
- List.Write(Value);
- if (List.size()==3)
- {
- CriticalSectionLocker CSL(CS);
- CustomMapping[List[0]][List[1]]=List[2];
- }
-}
-
-Ztring MediaInfo_Config::CustomMapping_Get (const Ztring &Format, const Ztring &Field)
-{
- CriticalSectionLocker CSL(CS);
- return CustomMapping[Format][Field];
-}
-
-bool MediaInfo_Config::CustomMapping_IsPresent(const Ztring &Format, const Ztring &Field)
-{
- CriticalSectionLocker CSL(CS);
- std::map<Ztring, std::map<Ztring, Ztring> >::iterator PerFormat=CustomMapping.find(Format);
- if (PerFormat==CustomMapping.end())
- return false;
- std::map<Ztring, Ztring>::iterator PerField=PerFormat->second.find(Field);
- if (PerField==PerFormat->second.end())
- return false;
- return true;
-}
-
-//***************************************************************************
-// Event
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-bool MediaInfo_Config::Event_CallBackFunction_IsSet ()
-{
- CriticalSectionLocker CSL(CS);
-
- return Event_CallBackFunction?true:false;
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-Ztring MediaInfo_Config::Event_CallBackFunction_Set (const Ztring &Value)
-{
- ZtringList List=Value;
-
- CriticalSectionLocker CSL(CS);
-
- if (List.empty())
- {
- Event_CallBackFunction=(MediaInfo_Event_CallBackFunction*)NULL;
- Event_UserHandler=NULL;
- }
- else
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (List[Pos].find(__T("CallBack=memory://"))==0)
- Event_CallBackFunction=(MediaInfo_Event_CallBackFunction*)Ztring(List[Pos].substr(18, std::string::npos)).To_int64u();
- else if (List[Pos].find(__T("UserHandle=memory://"))==0)
- Event_UserHandler=(void*)Ztring(List[Pos].substr(20, std::string::npos)).To_int64u();
- else if (List[Pos].find(__T("UserHandler=memory://"))==0)
- Event_UserHandler=(void*)Ztring(List[Pos].substr(21, std::string::npos)).To_int64u();
- else
- return("Problem during Event_CallBackFunction value parsing");
- }
-
- return Ztring();
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-Ztring MediaInfo_Config::Event_CallBackFunction_Get ()
-{
- CriticalSectionLocker CSL(CS);
-
- return __T("CallBack=memory://")+Ztring::ToZtring((size_t)Event_CallBackFunction)+__T(";UserHandler=memory://")+Ztring::ToZtring((size_t)Event_UserHandler);
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-void MediaInfo_Config::Event_Send (const int8u* Data_Content, size_t Data_Size)
-{
- CriticalSectionLocker CSL(CS);
-
- if (Event_CallBackFunction)
- Event_CallBackFunction ((unsigned char*)Data_Content, Data_Size, Event_UserHandler);
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-void MediaInfo_Config::Event_Send (const int8u* Data_Content, size_t Data_Size, const Ztring &File_Name)
-{
- CriticalSectionLocker CSL(CS);
-
- if (Event_CallBackFunction)
- Event_CallBackFunction ((unsigned char*)Data_Content, Data_Size, Event_UserHandler);
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-void MediaInfo_Config::Log_Send (int8u Type, int8u Severity, int32u MessageCode, const Ztring &Message)
-{
- struct MediaInfo_Event_Log_0 Event;
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_Log, 0);
- Event.Type=Type;
- Event.Severity=Severity;
- Event.Reserved2=(int8u)-1;
- Event.Reserved3=(int8u)-1;
- Event.MessageCode=MessageCode;
- Event.Reserved4=(int32u)-1;
- wstring MessageU=Message.To_Unicode();
- string MessageA=Message.To_Local();
- Event.MessageStringU=MessageU.c_str();
- Event.MessageStringA=MessageA.c_str();
- Event_Send((const int8u*)&Event, sizeof(MediaInfo_Event_Log_0));
-}
-#endif //MEDIAINFO_EVENTS
-
-//***************************************************************************
-// Curl
-//***************************************************************************
-
-#if defined(MEDIAINFO_LIBCURL_YES)
-void MediaInfo_Config::Ssh_PublicKeyFileName_Set (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssh_PublicKeyFileName=Value;
-}
-
-Ztring MediaInfo_Config::Ssh_PublicKeyFileName_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssh_PublicKeyFileName;
-}
-
-void MediaInfo_Config::Ssh_PrivateKeyFileName_Set (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssh_PrivateKeyFileName=Value;
-}
-
-Ztring MediaInfo_Config::Ssh_PrivateKeyFileName_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssh_PrivateKeyFileName;
-}
-
-void MediaInfo_Config::Ssh_KnownHostsFileName_Set (const Ztring &Value)
-{
- if (Value.empty())
- return; //empty value means "disable security" for libcurl, not acceptable
-
- CriticalSectionLocker CSL(CS);
- Ssh_KnownHostsFileName=Value;
-}
-
-Ztring MediaInfo_Config::Ssh_KnownHostsFileName_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssh_KnownHostsFileName;
-}
-
-void MediaInfo_Config::Ssh_IgnoreSecurity_Set (bool Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssh_IgnoreSecurity=Value;
-}
-
-bool MediaInfo_Config::Ssh_IgnoreSecurity_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssh_IgnoreSecurity;
-}
-
-void MediaInfo_Config::Ssl_CertificateFileName_Set (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssl_CertificateFileName=Value;
-}
-
-Ztring MediaInfo_Config::Ssl_CertificateFileName_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssl_CertificateFileName;
-}
-
-void MediaInfo_Config::Ssl_CertificateFormat_Set (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssl_CertificateFormat=Value;
-}
-
-Ztring MediaInfo_Config::Ssl_CertificateFormat_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssl_CertificateFormat;
-}
-
-void MediaInfo_Config::Ssl_PrivateKeyFileName_Set (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssl_PrivateKeyFileName=Value;
-}
-
-Ztring MediaInfo_Config::Ssl_PrivateKeyFileName_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssl_PrivateKeyFileName;
-}
-
-void MediaInfo_Config::Ssl_PrivateKeyFormat_Set (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssl_PrivateKeyFormat=Value;
-}
-
-Ztring MediaInfo_Config::Ssl_PrivateKeyFormat_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssl_PrivateKeyFormat;
-}
-
-void MediaInfo_Config::Ssl_CertificateAuthorityFileName_Set (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssl_CertificateAuthorityFileName=Value;
-}
-
-Ztring MediaInfo_Config::Ssl_CertificateAuthorityFileName_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssl_CertificateAuthorityFileName;
-}
-
-void MediaInfo_Config::Ssl_CertificateAuthorityPath_Set (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssl_CertificateAuthorityPath=Value;
-}
-
-Ztring MediaInfo_Config::Ssl_CertificateAuthorityPath_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssl_CertificateAuthorityPath;
-}
-
-void MediaInfo_Config::Ssl_CertificateRevocationListFileName_Set (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssl_CertificateRevocationListFileName=Value;
-}
-
-Ztring MediaInfo_Config::Ssl_CertificateRevocationListFileName_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssl_CertificateRevocationListFileName;
-}
-
-void MediaInfo_Config::Ssl_IgnoreSecurity_Set (bool Value)
-{
- CriticalSectionLocker CSL(CS);
- Ssl_IgnoreSecurity=Value;
-}
-
-bool MediaInfo_Config::Ssl_IgnoreSecurity_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ssl_IgnoreSecurity;
-}
-
-#endif //defined(MEDIAINFO_LIBCURL_YES)
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config.h
deleted file mode 100644
index 8a90f4628..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config.h
+++ /dev/null
@@ -1,350 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Global configuration of MediaInfo
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_ConfigH
-#define MediaInfo_ConfigH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Internal_Const.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#include "ZenLib/CriticalSection.h"
-#include "ZenLib/ZtringListList.h"
-#include "ZenLib/Translation.h"
-#include "ZenLib/InfoMap.h"
-#include <bitset>
-using namespace ZenLib;
-using std::vector;
-using std::string;
-using std::map;
-using std::make_pair;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class MediaInfo_Config
-//***************************************************************************
-
-class MediaInfo_Config
-{
-public :
- //Constructor/Destructor
- MediaInfo_Config() {}
- void Init(); //Must be called instead of constructor
-
- //General
- Ztring Option (const String &Option, const String &Value=Ztring());
-
- //Info
- void Complete_Set (size_t NewValue);
- size_t Complete_Get ();
-
- void BlockMethod_Set (size_t NewValue);
- size_t BlockMethod_Get ();
-
- void Internet_Set (size_t NewValue);
- size_t Internet_Get ();
-
- void MultipleValues_Set (size_t NewValue);
- size_t MultipleValues_Get ();
-
- void ParseUnknownExtensions_Set (size_t NewValue);
- size_t ParseUnknownExtensions_Get ();
-
- void ShowFiles_Set (const ZtringListList &NewShowFiles);
- size_t ShowFiles_Nothing_Get ();
- size_t ShowFiles_VideoAudio_Get ();
- size_t ShowFiles_VideoOnly_Get ();
- size_t ShowFiles_AudioOnly_Get ();
- size_t ShowFiles_TextOnly_Get ();
-
- void ReadByHuman_Set (bool NewValue);
- bool ReadByHuman_Get ();
-
- void LegacyStreamDisplay_Set (bool Value);
- bool LegacyStreamDisplay_Get ();
-
- void SkipBinaryData_Set (bool Value);
- bool SkipBinaryData_Get ();
-
- void ParseSpeed_Set (float32 NewValue);
- float32 ParseSpeed_Get ();
-
- void Verbosity_Set (float32 NewValue);
- float32 Verbosity_Get ();
-
- void Trace_Level_Set (const ZtringListList &NewDetailsLevel);
- float32 Trace_Level_Get ();
- std::bitset<32> Trace_Layers_Get ();
-
- void Trace_TimeSection_OnlyFirstOccurrence_Set (bool Value);
- bool Trace_TimeSection_OnlyFirstOccurrence_Get ();
-
- enum trace_Format
- {
- Trace_Format_Tree,
- Trace_Format_CSV,
- };
- void Trace_Format_Set (trace_Format NewValue);
- trace_Format Trace_Format_Get ();
-
- void Trace_Modificator_Set (const ZtringList &NewModifcator); //Not implemented
- Ztring Trace_Modificator_Get (const Ztring &Modificator); //Not implemented
-
- void Demux_Set (int8u NewValue);
- int8u Demux_Get ();
-
- void LineSeparator_Set (const Ztring &NewValue);
- Ztring LineSeparator_Get ();
-
- void Version_Set (const Ztring &NewValue);
- Ztring Version_Get ();
-
- void ColumnSeparator_Set (const Ztring &NewValue);
- Ztring ColumnSeparator_Get ();
-
- void TagSeparator_Set (const Ztring &NewValue);
- Ztring TagSeparator_Get ();
-
- void Quote_Set (const Ztring &NewValue);
- Ztring Quote_Get ();
-
- void DecimalPoint_Set (const Ztring &NewValue);
- Ztring DecimalPoint_Get ();
-
- void ThousandsPoint_Set (const Ztring &NewValue);
- Ztring ThousandsPoint_Get ();
-
- void StreamMax_Set (const ZtringListList &NewValue);
- Ztring StreamMax_Get ();
-
- void Language_Set (const ZtringListList &NewLanguage);
- Ztring Language_Get ();
- Ztring Language_Get (const Ztring &Value);
- Ztring Language_Get (const Ztring &Count, const Ztring &Value, bool ValueIsAlwaysSame=false);
-
- void Inform_Set (const ZtringListList &NewInform);
- Ztring Inform_Get ();
- Ztring Inform_Get (const Ztring &Value);
-
- void Inform_Replace_Set (const ZtringListList &NewInform_Replace);
- ZtringListList Inform_Replace_Get_All ();
-
- const Ztring &Format_Get (const Ztring &Value, infoformat_t KindOfFormatInfo=InfoFormat_Name);
- InfoMap &Format_Get(); //Should not be, but too difficult to hide it
-
- const Ztring &Codec_Get (const Ztring &Value, infocodec_t KindOfCodecInfo=InfoCodec_Name);
- const Ztring &Codec_Get (const Ztring &Value, infocodec_t KindOfCodecInfo, stream_t KindOfStream);
-
- const Ztring &CodecID_Get (stream_t KindOfStream, infocodecid_format_t Format, const Ztring &Value, infocodecid_t KindOfCodecIDInfo=InfoCodecID_Format);
-
- const Ztring &Library_Get (infolibrary_format_t Format, const Ztring &Value, infolibrary_t KindOfLibraryInfo=InfoLibrary_Version);
-
- const Ztring &Iso639_1_Get (const Ztring &Value);
- const Ztring &Iso639_2_Get (const Ztring &Value);
- const Ztring Iso639_Find (const Ztring &Value);
-
- const Ztring &Info_Get (stream_t KindOfStream, const Ztring &Value, info_t KindOfInfo=Info_Text);
- const Ztring &Info_Get (stream_t KindOfStream, size_t Pos, info_t KindOfInfo=Info_Text);
- const ZtringListList &Info_Get(stream_t KindOfStream); //Should not be, but too difficult to hide it
-
- Ztring Info_Parameters_Get (bool Complete=false);
- Ztring Info_Tags_Get () const;
- Ztring Info_CodecsID_Get ();
- Ztring Info_Codecs_Get ();
- Ztring Info_Version_Get () const;
- Ztring Info_Url_Get () const;
-
- const Ztring &EmptyString_Get() const; //Use it when we can't return a reference to a true string
- const ZtringListList &EmptyStringListList_Get() const; //Use it when we can't return a reference to a true string list list
-
- void FormatDetection_MaximumOffset_Set (int64u Value);
- int64u FormatDetection_MaximumOffset_Get ();
-
- #if MEDIAINFO_ADVANCED
- void VariableGopDetection_Occurences_Set (int64u Value);
- int64u VariableGopDetection_Occurences_Get ();
- void VariableGopDetection_GiveUp_Set (bool Value);
- bool VariableGopDetection_GiveUp_Get ();
- void InitDataNotRepeated_Occurences_Set (int64u Value);
- int64u InitDataNotRepeated_Occurences_Get ();
- void InitDataNotRepeated_GiveUp_Set (bool Value);
- bool InitDataNotRepeated_GiveUp_Get ();
- #endif //MEDIAINFO_ADVANCED
-
- void MpegTs_MaximumOffset_Set (int64u Value);
- int64u MpegTs_MaximumOffset_Get ();
- void MpegTs_MaximumScanDuration_Set (int64u Value);
- int64u MpegTs_MaximumScanDuration_Get ();
- void MpegTs_ForceStreamDisplay_Set (bool Value);
- bool MpegTs_ForceStreamDisplay_Get ();
- #if MEDIAINFO_ADVANCED
- void MpegTs_VbrDetection_Delta_Set (float64 Value);
- float64 MpegTs_VbrDetection_Delta_Get ();
- void MpegTs_VbrDetection_Occurences_Set (int64u Value);
- int64u MpegTs_VbrDetection_Occurences_Get ();
- void MpegTs_VbrDetection_GiveUp_Set (bool Value);
- bool MpegTs_VbrDetection_GiveUp_Get ();
- #endif //MEDIAINFO_ADVANCED
-
- ZtringListList SubFile_Config_Get ();
-
- void CustomMapping_Set (const Ztring &Value);
- Ztring CustomMapping_Get (const Ztring &Format, const Ztring &Field);
- bool CustomMapping_IsPresent (const Ztring &Format, const Ztring &Field);
-
- void ErrorLog_Callback_Set(const Ztring &Value);
- void ErrorLog(const Ztring &Value);
-
- #if MEDIAINFO_EVENTS
- bool Event_CallBackFunction_IsSet ();
- Ztring Event_CallBackFunction_Set (const Ztring &Value);
- Ztring Event_CallBackFunction_Get ();
- void Event_Send(const int8u* Data_Content, size_t Data_Size);
- void Event_Send(const int8u* Data_Content, size_t Data_Size, const Ztring &File_Name);
- void Log_Send(int8u Type, int8u Severity, int32u MessageCode, const Ztring &Message);
- void Log_Send(int8u Type, int8u Severity, int32u MessageCode, const char* Message) {return Log_Send(Type, Severity, MessageCode, Ztring().From_Local(Message));}
- #endif //MEDIAINFO_EVENTS
-
- #if defined(MEDIAINFO_LIBCURL_YES)
- void Ssh_PublicKeyFileName_Set (const Ztring &NewValue);
- Ztring Ssh_PublicKeyFileName_Get ();
- void Ssh_PrivateKeyFileName_Set (const Ztring &NewValue);
- Ztring Ssh_PrivateKeyFileName_Get ();
- void Ssh_IgnoreSecurity_Set (bool NewValue);
- void Ssh_KnownHostsFileName_Set (const Ztring &NewValue);
- Ztring Ssh_KnownHostsFileName_Get ();
- bool Ssh_IgnoreSecurity_Get ();
- void Ssl_CertificateFileName_Set (const Ztring &NewValue);
- Ztring Ssl_CertificateFileName_Get ();
- void Ssl_CertificateFormat_Set (const Ztring &NewValue);
- Ztring Ssl_CertificateFormat_Get ();
- void Ssl_PrivateKeyFileName_Set (const Ztring &NewValue);
- Ztring Ssl_PrivateKeyFileName_Get ();
- void Ssl_PrivateKeyFormat_Set (const Ztring &NewValue);
- Ztring Ssl_PrivateKeyFormat_Get ();
- void Ssl_CertificateAuthorityFileName_Set (const Ztring &NewValue);
- Ztring Ssl_CertificateAuthorityFileName_Get ();
- void Ssl_CertificateAuthorityPath_Set (const Ztring &NewValue);
- Ztring Ssl_CertificateAuthorityPath_Get ();
- void Ssl_CertificateRevocationListFileName_Set (const Ztring &NewValue);
- Ztring Ssl_CertificateRevocationListFileName_Get ();
- void Ssl_IgnoreSecurity_Set (bool NewValue);
- bool Ssl_IgnoreSecurity_Get ();
- #endif //defined(MEDIAINFO_LIBCURL_YES)
-
-private :
- int64u FormatDetection_MaximumOffset;
- #if MEDIAINFO_ADVANCED
- int64u VariableGopDetection_Occurences;
- bool VariableGopDetection_GiveUp;
- int64u InitDataNotRepeated_Occurences;
- bool InitDataNotRepeated_GiveUp;
- #endif //MEDIAINFO_ADVANCED
- int64u MpegTs_MaximumOffset;
- int64u MpegTs_MaximumScanDuration;
- bool MpegTs_ForceStreamDisplay;
- #if MEDIAINFO_ADVANCED
- float64 MpegTs_VbrDetection_Delta;
- int64u MpegTs_VbrDetection_Occurences;
- bool MpegTs_VbrDetection_GiveUp;
- #endif //MEDIAINFO_ADVANCED
- size_t Complete;
- size_t BlockMethod;
- size_t Internet;
- size_t MultipleValues;
- size_t ParseUnknownExtensions;
- size_t ShowFiles_Nothing;
- size_t ShowFiles_VideoAudio;
- size_t ShowFiles_VideoOnly;
- size_t ShowFiles_AudioOnly;
- size_t ShowFiles_TextOnly;
- float32 ParseSpeed;
- float32 Verbosity;
- float32 Trace_Level;
- bool Trace_TimeSection_OnlyFirstOccurrence;
- std::bitset<32> Trace_Layers; //0-7: Container, 8: Stream
- std::map<Ztring, bool> Trace_Modificators; //If we want to add/remove some details
- bool Language_Raw;
- bool ReadByHuman;
- bool LegacyStreamDisplay;
- bool SkipBinaryData;
- int8u Demux;
- Ztring Version;
- Ztring ColumnSeparator;
- Ztring LineSeparator;
- Ztring TagSeparator;
- Ztring Quote;
- Ztring DecimalPoint;
- Ztring ThousandsPoint;
- Translation Language; //ex. : "KB;Ko"
- ZtringListList Custom_View; //Definition of "General", "Video", "Audio", "Text", "Other", "Image"
- ZtringListList Custom_View_Replace; //ToReplace;ReplaceBy
- trace_Format Trace_Format;
-
- InfoMap Container;
- InfoMap CodecID[InfoCodecID_Format_Max][Stream_Max];
- InfoMap Format;
- InfoMap Codec;
- InfoMap Library[InfoLibrary_Format_Max];
- InfoMap Iso639_1;
- InfoMap Iso639_2;
- ZtringListList Info[Stream_Max]; //General info
-
- ZtringListList SubFile_Config;
-
- std::map<Ztring, std::map<Ztring, Ztring> > CustomMapping;
-
- ZenLib::CriticalSection CS;
-
- void Language_Set (stream_t StreamKind);
-
- //Event
- #if MEDIAINFO_EVENTS
- MediaInfo_Event_CallBackFunction* Event_CallBackFunction; //void Event_Handler(unsigned char* Data_Content, size_t Data_Size, void* UserHandler)
- void* Event_UserHandler;
- #endif //MEDIAINFO_EVENTS
-
- #if defined(MEDIAINFO_LIBCURL_YES)
- Ztring Ssh_PublicKeyFileName;
- Ztring Ssh_PrivateKeyFileName;
- Ztring Ssh_KnownHostsFileName;
- bool Ssh_IgnoreSecurity;
- Ztring Ssl_CertificateFileName;
- Ztring Ssl_CertificateFormat;
- Ztring Ssl_PrivateKeyFileName;
- Ztring Ssl_PrivateKeyFormat;
- Ztring Ssl_CertificateAuthorityFileName;
- Ztring Ssl_CertificateAuthorityPath;
- Ztring Ssl_CertificateRevocationListFileName;
- bool Ssl_IgnoreSecurity;
- #endif //defined(MEDIAINFO_LIBCURL_YES)
-
- //Constructor
- MediaInfo_Config (const MediaInfo_Config&); // Prevent copy-construction
- MediaInfo_Config& operator=(const MediaInfo_Config&); // Prevent assignment
-};
-
-extern MediaInfo_Config Config;
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_Automatic.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_Automatic.cpp
deleted file mode 100644
index ab37b57ec..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_Automatic.cpp
+++ /dev/null
@@ -1,5824 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Automaticly generated methods for MediaInfo
-// Don't modify, this will be deleted at the next automatic update
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/PreComp.h"
-#include "ZenLib/ZtringListList.h"
-#include "ZenLib/InfoMap.h"
-#include "ZenLib/Translation.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_DefaultLanguage (Translation &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- " Language_ISO639;en\n"
- " Author_Email;Info@MediaArea.net\n"
- " Author_Name;Zen\n"
- " Author_OldNames;Initial translator\n"
- " Language_Name;English\n"
- " Config_Text_ColumnSize;40\n"
- " Config_Text_Separator; : \n"
- " Config_Text_NumberTag; #\n"
- " Config_Text_FloatSeparator;.\n"
- " Config_Text_ThousandsSeparator; \n"
- " audio stream1; audio stream\n"
- " audio stream2; audio streams\n"
- " audio stream3; audio streams\n"
- " bit1; bit\n"
- " bit2; bits\n"
- " bit3; bits\n"
- " bps; bps\n"
- " Bps; Bps\n"
- " Byte1; Byte\n"
- " Byte2; Bytes\n"
- " Byte3; Bytes\n"
- " channel1; channel\n"
- " channel2; channels\n"
- " channel3; channels\n"
- " chapter1; chapter\n"
- " chapter2; chapters\n"
- " chapter3; chapters\n"
- " chapters stream1; chapters stream\n"
- " chapters stream2; chapters streams\n"
- " chapters stream3; chapters streams\n"
- " day1; day\n"
- " day2; days\n"
- " day3; days\n"
- " dB1; dB\n"
- " dB2; dB\n"
- " dB3; dB\n"
- " file1; file\n"
- " file2; files\n"
- " file3; files\n"
- " frame1; frame\n"
- " frame2; frames\n"
- " frame3; frames\n"
- " fps1; fps\n"
- " fps2; fps\n"
- " fps3; fps\n"
- " GB; GB\n"
- " Gb; Gb\n"
- " Gbps; Gbps\n"
- " GBps; GBps\n"
- " GHz; GHz\n"
- " GiB; GiB\n"
- " GibiByte1; GibiBytes\n"
- " GibiByte2; GibiBytes\n"
- " GibiByte3; GibiBytes\n"
- " GiBps; GiBps\n"
- " GigaBit1; GigaBit\n"
- " GigaBit2; GigaBits\n"
- " GigaBit3; GigaBits\n"
- " GigaByte1; GigaByte\n"
- " GigaByte2; GigaBytes\n"
- " GigaByte3; GigaBytes\n"
- " hour1; hour\n"
- " hour2; hours\n"
- " hour3; hours\n"
- " Hz; Hz\n"
- " image stream1; image stream\n"
- " image stream2; image streams\n"
- " image stream3; image streams\n"
- " KB; KB\n"
- " Kb; Kb\n"
- " KBps; KBps\n"
- " Kbps; Kbps\n"
- " KHz; KHz\n"
- " KiB; KiB\n"
- " KibiBit1; KibiBit\n"
- " KibiBit2; KibiBits\n"
- " KibiBit3; KibiBits\n"
- " KibiByte1; KibiByte\n"
- " KibiByte2; KibiBytes\n"
- " KibiByte3; KibiBytes\n"
- " KiBps; KiBps\n"
- " KiloBit1; KiloBit\n"
- " KiloBit2; KiloBits\n"
- " KiloBit3; KiloBits\n"
- " KiloByte1; KiloByte\n"
- " KiloByte2; KiloBytes\n"
- " KiloByte3; KiloBytes\n"
- " MB; MB\n"
- " Mb; Mb\n"
- " Mbps; Mbps\n"
- " MBps; MebiBytes\n"
- " MebiBit1; MebiBit\n"
- " MebiBit2; MebiBits\n"
- " MebiBit3; MebiBits\n"
- " MebiByte1; MebiByte\n"
- " MebiByte2; MebiBytes\n"
- " MebiByte3; MebiBytes\n"
- " MegaBit1; MegaBit\n"
- " MegaBit2; MegaBits\n"
- " MegaBit3; MegaBits\n"
- " MegaByte1; MegaByte\n"
- " MegaByte2; MegaBytes\n"
- " MegaByte3; MegaBytes\n"
- " MHz; MHz\n"
- " MiB; MiB\n"
- " Mib; Mib\n"
- " MiBps; MiBps\n"
- " millisecond1; millisecond\n"
- " millisecond2; milliseconds\n"
- " millisecond3; milliseconds\n"
- " minute1; minute\n"
- " minute2; minutes\n"
- " minute3; minutes\n"
- " month1; month\n"
- " month2; months\n"
- " month3; months\n"
- " pixel1; pixel\n"
- " pixel2; pixels\n"
- " pixel3; pixels\n"
- " second1; second\n"
- " second2; seconds\n"
- " second3; seconds\n"
- " text stream1; text stream\n"
- " text stream2; text streams\n"
- " text stream3; text streams\n"
- " video frames1; video frame\n"
- " video frames2; video frames\n"
- " video frames3; video frames\n"
- " video stream1; video stream\n"
- " video stream2; video streams\n"
- " video stream3; video streams\n"
- " warppoint0;No warppoints\n"
- " warppoint1; warppoint\n"
- " warppoint2; warppoints\n"
- " warppoint3; warppoints\n"
- " week1; week\n"
- " week2; weeks\n"
- " week3; weeks\n"
- " year1; year\n"
- " year2; years\n"
- " year3; years\n"
- ", ;, \n"
- ": ;: \n"
- "About;About\n"
- "About_Hint;How to contact me and find last version\n"
- "Accompaniment;Accompaniment\n"
- "ActiveFormatDescription;Active Format Description\n"
- "ActiveFormatDescription_MuxingMode;Active Format Description, Muxing mode\n"
- "Actor;Actor\n"
- "Actor_Character;Character played\n"
- "Added_Date;Added date\n"
- "Address;Address\n"
- "Advanced;Advanced\n"
- "Advanced mode;Advanced mode\n"
- "Album;Album\n"
- "Album_ReplayGain_Gain;Album replay gain\n"
- "Album_ReplayGain_Peak;Album replay gain peak\n"
- "Alignment;Alignment\n"
- "Alignment_Aligned;Aligned on interleaves\n"
- "Alignment_Split;Split accross interleaves\n"
- "All;All\n"
- "Archival_Location;Archival location\n"
- "Arranger;Arranger\n"
- "ArtDirector;ArtDirector\n"
- "AspectRatio;Aspect ratio\n"
- "AssistantDirector;AssistantDirector\n"
- "at;at\n"
- "At least one file;(You must at least open one file)\n"
- "Audio;Audio\n"
- "Audio stream(s);Audio streams\n"
- "Audio_Codec_List;Audio codecs\n"
- "Audio_No;No audio\n"
- "Audio1;First audio stream\n"
- "Audio2;Second audio stream\n"
- "AudioCount;Count of audio streams\n"
- "Author;Author\n"
- "BarCode;BarCode\n"
- "Basic;Basic\n"
- "Basic_Note;Note : for more information about this file, you must select a different view (Sheet, Tree...)\n"
- "BitDepth;Bit depth\n"
- "BitDepth_Stored;Stored bit depth\n"
- "BitRate;Bit rate\n"
- "BitRate_Maximum;Maximum bit rate\n"
- "BitRate_Minimum;Minimum bit rate\n"
- "BitRate_Mode;Bit rate mode\n"
- "BitRate_Mode_CBR;Constant\n"
- "BitRate_Mode_VBR;Variable\n"
- "BitRate_Nominal;Nominal bit rate\n"
- "BitRate_Encoded;Encoded bit rate\n"
- "Bits-(Pixel*Frame);Bits/(Pixel*Frame)\n"
- "BufferSize;Buffer size\n"
- "Cancel;Cancel\n"
- "Channel(s);Channel(s)\n"
- "ChannelPositions;Channel positions\n"
- "Chapter(s);Chapter(s)\n"
- "Chapters;Chapters\n"
- "Chapters stream(s);Chapters stream(s)\n"
- "Chapters_Codec_List;Chapters Codecs\n"
- "Chapters_No;No chapters\n"
- "ChaptersCount;Count of chapter streams\n"
- "CheckNewVersion;Check for new version\n"
- "Choose custom;Choose custom\n"
- "Choose custom sheet;Choose your desired custom sheet\n"
- "Choose custom text;Choose your desired custom text\n"
- "Choose export format;Choose your desired export format\n"
- "Choose file(s);Choose the files to open\n"
- "Choose filename;Choose your desired filename\n"
- "Choose language;Choose your desired language\n"
- "Choregrapher;Choregrapher\n"
- "Chroma;Chroma\n"
- "ChromaSubsampling;Chroma subsampling\n"
- "Close;Close\n"
- "Close all before open;Close all before open\n"
- "Codec;Codec\n"
- "Codec_Description;Codec description\n"
- "Codec_Info;Details for codec\n"
- "Codec_Settings;Codec settings\n"
- "Codec_Settings_PacketBitStream;Codec settings, Packet bitstream\n"
- "Codec_Settings_BVOP;Codec settings, BVOP\n"
- "Codec_Settings_QPel;Codec settings, QPel\n"
- "Codec_Settings_GMC;Codec settings, GMC\n"
- "Codec_Settings_Matrix;Codec settings, Matrix\n"
- "Codec_Settings_Floor;Codec settings, Floor\n"
- "Codec_Settings_CABAC;Codec settings, CABAC\n"
- "Codec_Settings_Firm;Codec settings, Firm\n"
- "Codec_Settings_Endianness;Codec settings, Endianness\n"
- "Codec_Settings_Sign;Codec settings, Sign\n"
- "Codec_Settings_Law;Codec settings, Law\n"
- "Codec_Settings_ITU;Codec settings, ITU\n"
- "Codec_Profile;Codec profile\n"
- "Codec_Url;Weblink for codec\n"
- "CodecID;Codec ID\n"
- "CodecID_Description;Description of the codec\n"
- "Collection;Collection\n"
- "Colorimetry;Colorimetry\n"
- "ColorSpace;Color space\n"
- "colour_primaries;Color primaries\n"
- "Comment;Comment\n"
- "CommissionedBy;Commissioned by\n"
- "Compilation;Compilation\n"
- "CompleteName;Complete name\n"
- "Composer;Composer\n"
- "Compression_Mode;Compression mode\n"
- "Compression_Mode_Lossless;Lossless\n"
- "Compression_Mode_Lossy;Lossy\n"
- "Compression_Ratio;Compression ratio\n"
- "Conductor;Conductor\n"
- "Container and general information;Container and general information\n"
- "ContentType;ContentType\n"
- "CoProducer;Coproducer\n"
- "Copyright;Copyright\n"
- "CostumeDesigner;Costume designer\n"
- "Count;Count\n"
- "Country;Country\n"
- "Cover;Cover\n"
- "Cover_Datas;Cover datas\n"
- "Cover_Description;Cover description\n"
- "Cover_Mime;Cover MIME\n"
- "Cover_Type;Cover type\n"
- "Cropped;Crop dimensions\n"
- "Custom;Custom\n"
- "Customize;Customize\n"
- "Date;Date\n"
- "Debug;Debug\n"
- "Decimal point;Decimal point\n"
- "Delay;Delay\n"
- "Delay_Source;Delay, origin\n"
- "Delay_Source_Container;Container\n"
- "Delay_Source_Stream;Raw stream\n"
- "Delete;Delete\n"
- "Description;Description\n"
- "Digitized_Date;Digitized date\n"
- "Dimensions;Dimensions\n"
- "Director;Director\n"
- "DirectorOfPhotography;Director of photography\n"
- "DisplayAspectRatio;Display aspect ratio\n"
- "DisplayAspectRatio_Original;Original display aspect ratio\n"
- "DistributedBy;Distributed by\n"
- "Donate;Donate\n"
- "DotsPerInch;Dots per inch\n"
- "Duration;Duration\n"
- "Duration_End;End time\n"
- "Duration_Start;Start time\n"
- "Edit;Edit\n"
- "EditedBy;Edited by\n"
- "EMail;E-Mail\n"
- "Encoded_Application;Writing application\n"
- "Encoded_Date;Encoded date\n"
- "Encoded_Library;Writing library\n"
- "Encoded_Library_Settings;Encoding settings\n"
- "Encoded_Original;Original support\n"
- "EncodedBy;Encoded by\n"
- "EPG_Positions;EPG positions (internal)\n"
- "Error_File;Error while reading file\n"
- "ExecutiveProducer;Executive producer\n"
- "Exit;Exit\n"
- "Exit_Hint;Quit the program\n"
- "Export;Export\n"
- "Export_Hint;Export in a customized format\n"
- "Extensions;Extensions usually used\n"
- "Family;Family\n"
- "Fax;Fax\n"
- "File;File\n"
- "File size;File size\n"
- "File_Append;Append to the existing file (Warning : be careful to have the same parameters)\n"
- "File_Created_Date;File creation date\n"
- "File_Created_Date_Local;File creation date (local)\n"
- "File_Hint;Select a multimedia file to examine\n"
- "File_Modified_Date;File last modification date\n"
- "File_Modified_Date_Local;File last modification date (local)\n"
- "FileExtension;File extension\n"
- "FileName;File name\n"
- "FileSize;File size\n"
- "Folder;Folder\n"
- "Folder (R);Folder (R)\n"
- "Folder (R)_Hint;Select a folder to examine (with all folders recursively)\n"
- "Folder (Recursively);Folder (Recursively)\n"
- "Folder_Hint;Select a folder to examine\n"
- "FolderName;Folder name\n"
- "Format;Format\n"
- "Format_Commercial;Commercial name\n"
- "Format_Commercial_IfAny;Commercial name\n"
- "Format_Description;Format description\n"
- "Format_Info;Details for format\n"
- "Format_Profile;Format profile\n"
- "Format_Settings;Format settings\n"
- "Format_Settings_PacketBitStream;Format settings, Packet bitstream\n"
- "Format_Settings_BVOP;Format settings, BVOP\n"
- "Format_Settings_QPel;Format settings, QPel\n"
- "Format_Settings_GMC;Format settings, GMC\n"
- "Format_Settings_Matrix;Format settings, Matrix\n"
- "Format_Settings_Matrix_Custom;Custom\n"
- "Format_Settings_Matrix_Default;Default\n"
- "Format_Settings_Floor;Format settings, Floor\n"
- "Format_Settings_CABAC;Format settings, CABAC\n"
- "Format_Settings_Firm;Format settings, Firm\n"
- "Format_Settings_Endianness;Format settings, Endianness\n"
- "Format_Settings_RefFrames;Format settings, ReFrames\n"
- "Format_Settings_Sign;Format settings, Sign\n"
- "Format_Settings_Law;Format settings, Law\n"
- "Format_Settings_ITU;Format settings, ITU\n"
- "Format_Settings_SBR;Format settings, SBR\n"
- "Format_Settings_PS;Format settings, PS\n"
- "Format_Settings_Pulldown;Format settings, Pulldown\n"
- "Format_Settings_Mode;Mode\n"
- "Format_Settings_FrameMode;Frame mode\n"
- "Format_Settings_Emphasis;Emphasis\n"
- "Format_Settings_ModeExtension;Mode extension\n"
- "Format_Settings_GOP;Format settings, GOP\n"
- "Format_Settings_PictureStructure;Format settings, picture structure\n"
- "Format_Settings_Wrapping;Format settings, wrapping mode\n"
- "Format_Version;Format version\n"
- "Format_Url;Weblink for format\n"
- "FrameCount;Frame count\n"
- "FrameRate;Frame rate\n"
- "FrameRate_Mode;Frame rate mode\n"
- "FrameRate_Mode_CFR;Constant\n"
- "FrameRate_Mode_VFR;Variable\n"
- "FrameRate_Minimum;Minimum frame rate\n"
- "FrameRate_Nominal;Nominal frame rate\n"
- "FrameRate_Maximum;Maximum frame rate\n"
- "FrameRate_Original;Original frame rate\n"
- "General;General\n"
- "Genre;Genre\n"
- "Genre_000;Blues\n"
- "Genre_001;Classic Rock\n"
- "Genre_002;Country\n"
- "Genre_003;Dance\n"
- "Genre_004;Disco\n"
- "Genre_005;Funk\n"
- "Genre_006;Grunge\n"
- "Genre_007;Hip-Hop\n"
- "Genre_008;Jazz\n"
- "Genre_009;Metal\n"
- "Genre_010;New Age\n"
- "Genre_011;Oldies\n"
- "Genre_012;Other\n"
- "Genre_013;Pop\n"
- "Genre_014;R&B\n"
- "Genre_015;Rap\n"
- "Genre_016;Reggae\n"
- "Genre_017;Rock\n"
- "Genre_018;Techno\n"
- "Genre_019;Industrial\n"
- "Genre_020;Alternative\n"
- "Genre_021;Ska\n"
- "Genre_022;Death Metal\n"
- "Genre_023;Pranks\n"
- "Genre_024;Soundtrack\n"
- "Genre_025;Euro-Techno\n"
- "Genre_026;Ambient\n"
- "Genre_027;Trip-Hop\n"
- "Genre_028;Vocal\n"
- "Genre_029;Jazz+Funk\n"
- "Genre_030;Fusion\n"
- "Genre_031;Trance\n"
- "Genre_032;Classical\n"
- "Genre_033;Instrumental\n"
- "Genre_034;Acid\n"
- "Genre_035;House\n"
- "Genre_036;Game\n"
- "Genre_037;Sound Clip\n"
- "Genre_038;Gospel\n"
- "Genre_039;Noise\n"
- "Genre_040;Alt. Rock\n"
- "Genre_041;Bass\n"
- "Genre_042;Soul\n"
- "Genre_043;Punk\n"
- "Genre_044;Space\n"
- "Genre_045;Meditative\n"
- "Genre_046;Instrumental Pop\n"
- "Genre_047;Instrumental Rock\n"
- "Genre_048;Ethnic\n"
- "Genre_049;Gothic\n"
- "Genre_050;Darkwave\n"
- "Genre_051;Techno-Industrial\n"
- "Genre_052;Electronic\n"
- "Genre_053;Pop-Folk\n"
- "Genre_054;Eurodance\n"
- "Genre_055;Dream\n"
- "Genre_056;Southern Rock\n"
- "Genre_057;Comedy\n"
- "Genre_058;Cult\n"
- "Genre_059;Gangsta Rap\n"
- "Genre_060;Top 40\n"
- "Genre_061;Christian Rap\n"
- "Genre_062;Pop/Funk\n"
- "Genre_063;Jungle\n"
- "Genre_064;Native American\n"
- "Genre_065;Cabaret\n"
- "Genre_066;New Wave\n"
- "Genre_067;Psychedelic\n"
- "Genre_068;Rave\n"
- "Genre_069;Showtunes\n"
- "Genre_070;Trailer\n"
- "Genre_071;Lo-Fi\n"
- "Genre_072;Tribal\n"
- "Genre_073;Acid Punk\n"
- "Genre_074;Acid Jazz\n"
- "Genre_075;Polka\n"
- "Genre_076;Retro\n"
- "Genre_077;Musical\n"
- "Genre_078;Rock & Roll\n"
- "Genre_079;Hard Rock\n"
- "Genre_080;Folk\n"
- "Genre_081;Folk-Rock\n"
- "Genre_082;National Folk\n"
- "Genre_083;Swing\n"
- "Genre_084;Fast-Fusion\n"
- "Genre_085;Bebop\n"
- "Genre_086;Latin\n"
- "Genre_087;Revival\n"
- "Genre_088;Celtic\n"
- "Genre_089;Bluegrass\n"
- "Genre_090;Avantgarde\n"
- "Genre_091;Gothic Rock\n"
- "Genre_092;Progressive Rock\n"
- "Genre_093;Psychedelic Rock\n"
- "Genre_094;Symphonic Rock\n"
- "Genre_095;Slow Rock\n"
- "Genre_096;Big Band\n"
- "Genre_097;Chorus\n"
- "Genre_098;Easy Listening\n"
- "Genre_099;Acoustic\n"
- "Genre_100;Humour\n"
- "Genre_101;Speech\n"
- "Genre_102;Chanson\n"
- "Genre_103;Opera\n"
- "Genre_104;Chamber Music\n"
- "Genre_105;Sonata\n"
- "Genre_106;Symphony\n"
- "Genre_107;Booty Bass\n"
- "Genre_108;Primus\n"
- "Genre_109;Porn Groove\n"
- "Genre_110;Satire\n"
- "Genre_111;Slow Jam\n"
- "Genre_112;Club\n"
- "Genre_113;Tango\n"
- "Genre_114;Samba\n"
- "Genre_115;Folklore\n"
- "Genre_116;Ballad\n"
- "Genre_117;Power Ballad\n"
- "Genre_118;Rhythmic Soul\n"
- "Genre_119;Freestyle\n"
- "Genre_120;Duet\n"
- "Genre_121;Punk Rock\n"
- "Genre_122;Drum Solo\n"
- "Genre_123;A Cappella\n"
- "Genre_124;Euro-House\n"
- "Genre_125;Dance Hall\n"
- "Genre_126;Goa\n"
- "Genre_127;Drum & Bass\n"
- "Genre_128;Club-House\n"
- "Genre_129;Hardcore\n"
- "Genre_130;Terror\n"
- "Genre_131;Indie\n"
- "Genre_132;BritPop\n"
- "Genre_133;Afro-Punk\n"
- "Genre_134;Polsk Punk\n"
- "Genre_135;Beat\n"
- "Genre_136;Christian Gangsta Rap\n"
- "Genre_137;Heavy Metal\n"
- "Genre_138;Black Metal\n"
- "Genre_139;Crossover\n"
- "Genre_140;Contemporary Christian\n"
- "Genre_141;Christian Rock\n"
- "Genre_142;Merengue\n"
- "Genre_143;Salsa\n"
- "Genre_144;Thrash Metal\n"
- "Genre_145;Anime\n"
- "Genre_146;JPop\n"
- "Genre_147;Synthpop\n"
- "Genre_148;Abstract\n"
- "Genre_149;Art Rock\n"
- "Genre_150;Baroque\n"
- "Genre_151;Bhangra\n"
- "Genre_152;Big Beat\n"
- "Genre_153;Breakbeat\n"
- "Genre_154;Chillout\n"
- "Genre_155;Downtempo\n"
- "Genre_156;Dub\n"
- "Genre_157;EBM\n"
- "Genre_158;Eclectic\n"
- "Genre_159;Electro\n"
- "Genre_160;Electroclash\n"
- "Genre_161;Emo\n"
- "Genre_162;Experimental\n"
- "Genre_163;Garage\n"
- "Genre_164;Global\n"
- "Genre_165;IDM\n"
- "Genre_166;Illbient\n"
- "Genre_167;Industro-Goth\n"
- "Genre_168;Jam Band\n"
- "Genre_169;Krautrock\n"
- "Genre_170;Leftfield\n"
- "Genre_171;Lounge\n"
- "Genre_172;Math Rock\n"
- "Genre_173;New Romantic\n"
- "Genre_174;Nu-Breakz\n"
- "Genre_175;Post-Punk\n"
- "Genre_176;Post-Rock\n"
- "Genre_177;Psytrance\n"
- "Genre_178;Shoegaze\n"
- "Genre_179;Space Rock\n"
- "Genre_180;Trop Rock\n"
- "Genre_181;World Music\n"
- "Genre_182;Neoclassical\n"
- "Genre_183;Audiobook\n"
- "Genre_184;Audio Theatre\n"
- "Genre_185;Neue Deutsche Welle\n"
- "Genre_186;Podcast\n"
- "Genre_187;Indie Rock\n"
- "Genre_188;G-Funk\n"
- "Genre_189;Dubstep\n"
- "Genre_190;Garage Rock\n"
- "Genre_191;Psybient\n"
- "Go to WebSite;Go to website\n"
- "Grouping;Grouping\n"
- "h;h\n"
- "Header file;Create a header file\n"
- "Height;Height\n"
- "Height_Original;Original height\n"
- "Help;Help\n"
- "Hint;Hint\n"
- "How many audio streams?;How many audio streams?\n"
- "How many chapters streams?;How many chapters streams?\n"
- "How many text streams?;How many text streams?\n"
- "How many video streams?;How many video streams?\n"
- "HTML;HTML\n"
- "ID;ID\n"
- "Image;Image\n"
- "Image stream(s);Image streams\n"
- "Image_Codec_List;Codecs Image\n"
- "ImageCount;Count of image streams\n"
- "Info;Info\n"
- "Instruments;Instruments\n"
- "Interlacement;Interlacement\n"
- "Interlaced_Interlaced;Interlaced\n"
- "Interlaced_TFF;Top Field First\n"
- "Interlaced_BFF;Bottom Field First\n"
- "Interlaced_PPF;Progressive\n"
- "Interlaced_Progressive;Progressive\n"
- "Interleaved;Interleaved\n"
- "Interleave_Duration;Interleave, duration\n"
- "Interleave_Preload;Interleave, preload duration\n"
- "Interleave_VideoFrames;Interleave, duration\n"
- "InternetMediaType;Internet media type\n"
- "IRCA;IRCA\n"
- "ISBN;ISBN\n"
- "ISRC;ISRC\n"
- "Keywords;Keywords\n"
- "Known codecs;Known codecs\n"
- "Known formats;Known formats\n"
- "Known parameters;Known parameters\n"
- "Label;Label\n"
- "Language;Language\n"
- "Language_More;Language, more info\n"
- "Language_aa;Afar\n"
- "Language_ab;Abkhazian\n"
- "Language_ae;Avestan\n"
- "Language_af;Afrikaans\n"
- "Language_ak;Akan\n"
- "Language_am;Amharic\n"
- "Language_an;Aragonese\n"
- "Language_ar;Arabic\n"
- "Language_as;Assamese\n"
- "Language_av;Avaric\n"
- "Language_ay;Aymara\n"
- "Language_az;Azerbaijani\n"
- "Language_ba;Bashkir\n"
- "Language_be;Belarusian\n"
- "Language_bg;Bulgarian\n"
- "Language_bh;Bihari\n"
- "Language_bi;Bislama\n"
- "Language_bm;Bambara\n"
- "Language_bn;Bengali\n"
- "Language_bo;Tibetan\n"
- "Language_br;Breton\n"
- "Language_bs;Bosnian\n"
- "Language_ca;Catalan\n"
- "Language_ce;Chechen\n"
- "Language_ch;Chamorro\n"
- "Language_co;Corsican\n"
- "Language_cr;Cree\n"
- "Language_cs;Czech\n"
- "Language_cu;Slave\n"
- "Language_cv;Chuvash\n"
- "Language_cy;Welsh\n"
- "Language_da;Danish\n"
- "Language_de;German\n"
- "Language_dv;Divehi\n"
- "Language_dz;Dzongkha\n"
- "Language_ee;Ewe\n"
- "Language_el;Greek\n"
- "Language_en;English\n"
- "Language_en-gb;English (Great Britain)\n"
- "Language_en-us;English (United States)\n"
- "Language_eo;Esperanto\n"
- "Language_es;Spanish\n"
- "Language_et;Estonian\n"
- "Language_eu;Basque\n"
- "Language_fa;Persian\n"
- "Language_ff;Fulah\n"
- "Language_fi;Finnish\n"
- "Language_fj;Fijian\n"
- "Language_fo;Faroese\n"
- "Language_fr;French\n"
- "Language_fy;Frisian\n"
- "Language_ga;Irish\n"
- "Language_gd;Gaelic\n"
- "Language_gl;Galician\n"
- "Language_gn;Guarani\n"
- "Language_gu;Gujarati\n"
- "Language_gv;Manx\n"
- "Language_ha;Hausa\n"
- "Language_he;Hebrew\n"
- "Language_hi;Hindi\n"
- "Language_ho;Hiri Motu\n"
- "Language_hr;Croatian\n"
- "Language_ht;Haitian\n"
- "Language_hu;Hungarian\n"
- "Language_hy;Armenian\n"
- "Language_hz;Herero\n"
- "Language_ia;Auxiliary Language Association\n"
- "Language_id;Indonesian\n"
- "Language_ie;Interlingue\n"
- "Language_ig;Igbo\n"
- "Language_ii;Sichuan Yi\n"
- "Language_ik;Inupiaq\n"
- "Language_Info;Language info\n"
- "Language_io;Ido\n"
- "Language_is;Icelandic\n"
- "Language_it;Italian\n"
- "Language_iu;Inuktitut\n"
- "Language_ja;Japanese\n"
- "Language_jv;Javanese\n"
- "Language_ka;Georgian\n"
- "Language_kg;Kongo\n"
- "Language_ki;Kikuyu\n"
- "Language_kj;Kuanyama\n"
- "Language_kk;Kazakh\n"
- "Language_kl;Kalaallisut\n"
- "Language_km;Khmer\n"
- "Language_kn;Kannada\n"
- "Language_ko;Korean\n"
- "Language_kr;Kanuri\n"
- "Language_ks;Kashmiri\n"
- "Language_ku;Kurdish\n"
- "Language_kv;Komi\n"
- "Language_kw;Cornish\n"
- "Language_ky;Kirghiz\n"
- "Language_la;Latin\n"
- "Language_lb;Luxembourgish\n"
- "Language_lg;Ganda\n"
- "Language_li;Limburgish\n"
- "Language_ln;Lingala\n"
- "Language_lo;Lao\n"
- "Language_lt;Lithuanian\n"
- "Language_lu;Luba-Katanga\n"
- "Language_lv;Latvian\n"
- "Language_mg;Malagasy\n"
- "Language_mh;Marshallese\n"
- "Language_mi;Maori\n"
- "Language_mk;Macedonian\n"
- "Language_ml;Malayalam\n"
- "Language_mn;Mongolian\n"
- "Language_mo;Moldavian\n"
- "Language_mr;Marathi\n"
- "Language_ms;Malay\n"
- "Language_mt;Maltese\n"
- "Language_mul;Multiple languages\n"
- "Language_my;Burmese\n"
- "Language_na;Nauru\n"
- "Language_nb;Norwegian Bokmal\n"
- "Language_nd;Ndebele\n"
- "Language_ne;Nepali\n"
- "Language_ng;Ndonga\n"
- "Language_nl;Dutch\n"
- "Language_nn;Norwegian Nynorsk\n"
- "Language_no;Norwegian\n"
- "Language_nr;Ndebele\n"
- "Language_nv;Navaho\n"
- "Language_ny;Nyanja\n"
- "Language_oc;Occitan\n"
- "Language_oj;Ojibwa\n"
- "Language_om;Oromo\n"
- "Language_or;Oriya\n"
- "Language_os;Ossetic\n"
- "Language_pa;Panjabi\n"
- "Language_pi;Pali\n"
- "Language_pl;Polish\n"
- "Language_ps;Pushto\n"
- "Language_pt;Portuguese\n"
- "Language_pt-br;Portuguese (Brazil)\n"
- "Language_qu;Quechua\n"
- "Language_rm;Raeto-Romance\n"
- "Language_rn;Rundi\n"
- "Language_ro;Romanian\n"
- "Language_ru;Russian\n"
- "Language_rw;Kinyarwanda\n"
- "Language_sa;Sanskrit\n"
- "Language_sc;Sardinian\n"
- "Language_sd;Sindhi\n"
- "Language_se;Northern Sami\n"
- "Language_sg;Sango\n"
- "Language_si;Sinhala\n"
- "Language_sk;Slovak\n"
- "Language_sl;Slovenian\n"
- "Language_sm;Samoan\n"
- "Language_sn;Shona\n"
- "Language_so;Somali\n"
- "Language_sq;Albanian\n"
- "Language_sr;Serbian\n"
- "Language_ss;Swati\n"
- "Language_st;Sotho\n"
- "Language_su;Sundanese\n"
- "Language_sv;Swedish\n"
- "Language_sw;Swahili\n"
- "Language_ta;Tamil\n"
- "Language_te;Telugu\n"
- "Language_tg;Tajik\n"
- "Language_th;Thai\n"
- "Language_ti;Tigrinya\n"
- "Language_tk;Turkmen\n"
- "Language_tl;Tagalog\n"
- "Language_tn;Tswana\n"
- "Language_to;Tonga\n"
- "Language_tr;Turkish\n"
- "Language_ts;Tsonga\n"
- "Language_tt;Tatar\n"
- "Language_tw;Twi\n"
- "Language_ty;Tahitian\n"
- "Language_ug;Uighur\n"
- "Language_uk;Ukrainian\n"
- "Language_ur;Urdu\n"
- "Language_uz;Uzbek\n"
- "Language_ve;Venda\n"
- "Language_vi;Vietnamese\n"
- "Language_vo;Volapuk\n"
- "Language_wa;Walloon\n"
- "Language_wo;Wolof\n"
- "Language_xh;Xhosa\n"
- "Language_yi;Yiddish\n"
- "Language_yo;Yoruba\n"
- "Language_za;Zhuang\n"
- "Language_zh;Chinese\n"
- "Language_zh-cn;Chinese (China)\n"
- "Language_zh-tw;Chinese (Taiwan)\n"
- "Language_zu;Zulu\n"
- "LawRating;Law rating\n"
- "LCCN;LCCN\n"
- "Library;Muxing library\n"
- "Lightness;Lightness\n"
- "List;List\n"
- "Lyrics;Lyrics\n"
- "Lyricist;Lyricist\n"
- "Mastered_Date;Mastered date\n"
- "MasteredBy;Mastered by\n"
- "matrix_coefficients;Matrix coefficients\n"
- "Matrix_Format;Matrix encoding, format\n"
- "Matrix_Channel(s);Matrix encoding, Channel(s)\n"
- "Matrix_ChannelPositions;Matrix encoding, channel positions\n"
- "MediaInfo_About;MediaInfo provides easy access to technical and tag information about video and audio files.\r\nExcept the Mac App Store graphical user interface, it is open-source software, 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)\n"
- "Menu;Menu\n"
- "Menu stream(s);Menu streams\n"
- "Menu_Codec_List;Menu codecs\n"
- "Menu_No;No menu\n"
- "MenuCount;Count of menu streams\n"
- "Menu_Hint;More possibilities\n"
- "MenuID;Menu ID\n"
- "mn;mn\n"
- "Mood;Mood\n"
- "More;More\n"
- "Movie;Movie name\n"
- "ms;ms\n"
- "MSDI;MSDI\n"
- "MusicBy;Music by\n"
- "MuxingMode;Muxing mode\n"
- "MuxingMode_MoreInfo;Muxing mode, more info\n"
- "MuxingMode_PackedBitstream;Packed bitstream\n"
- "Name;Name\n"
- "Nationality;Nationality\n"
- "NetworkName;Network name\n"
- "New;New\n"
- "Newest version;Check for new versions (requires Internet connection)\n"
- "NewVersion_Menu;A new version is available\n"
- "NewVersion_Question_Title;A new version was released!\n"
- "NewVersion_Question_Content;A new version (v%Version%) is available, would you like to download it?\n"
- "No;No\n"
- "Not yet;Not yet\n"
- "NumColors;Number of colors\n"
- "OK;OK\n"
- "One output file per input file;One output file per input file\n"
- "Open;Open\n"
- "OpenCandy_01;Downloading ________\n"
- "OpenCandy_02;__% Complete\n"
- "OpenCandy_03;Internet connection interrupted\n"
- "OpenCandy_04;________ download complete\n"
- "OpenCandy_05;Click to install ________\n"
- "OpenCandy_06;Are you sure you wish to cancel the install?\r\nIf you wish to postpone the install until later, select 'No'.\r\nNote: You may select Exit from the menu to defer installation until after the next time you reboot.\n"
- "OpenCandy_07;Download of ________ has been paused.\r\nClick on the tray icon to resume downloading.\n"
- "OpenCandy_08;A critical error has occurred. Installation of _________ will be aborted.\n"
- "OpenCandy_09;Pause download\n"
- "OpenCandy_10;Cancel install\n"
- "OpenCandy_11;Resume download\n"
- "OpenCandy_12;Exit Installer\n"
- "OpenCandy_13;___________ - Recommended by ____________\n"
- "OpenCandy_14;Downloading _________\n"
- "OpenCandy_15;___________, the software recommended to you by ___________, is now downloading at your requestWe will let you know when it is ready to be installed.\n"
- "OpenCandy_16;___________ is ready for installation\n"
- "OpenCandy_17;___________ is now fully downloaded. Please click on 'Install' to proceed.\n"
- "OpenCandy_18;___________ of ___________ downloaded\n"
- "OpenCandy_19;Powered by OpenCandy\n"
- "OpenCandy_20;Learn more at OpenCandy.com\n"
- "OpenCandy_21;Install\n"
- "OpenCandy_22;Installation of ___________\n"
- "OpenCandy_23;This will cancel the installation of ___________\r\nAre you sure you wish to exit?\n"
- "OpenCandy_24;Pause\n"
- "OpenCandy_25;Your download has been paused. Click 'Resume' when you are ready to continue.\n"
- "OpenCandy_26;Resume\n"
- "OpenCandy_27;Install Now\n"
- "OpenCandy_28;Pause Download\n"
- "OpenCandy_29;Resume Download\n"
- "OpenCandy_30;Cancel Install\n"
- "OpenCandy_31;Please choose an installation option\n"
- "OpenCandy_32;Install ___________\n"
- "OpenCandy_33;Don't Install\n"
- "OpenCandy_34;Please select an install option\n"
- "OpenCandy_35;______ recommends this software\n"
- "OpenCandy_36;Your current installation will not be interrupted\n"
- "Options;Options\n"
- "Options_Hint;Preferences\n"
- "Original;Original\n"
- "OriginalNetworkName;Original network name\n"
- "OriginalSourceForm;Original source form\n"
- "OriginalSourceMedium;Original source medium\n"
- "Other;Other\n"
- "Output;Output\n"
- "Output format;Output format\n"
- "OverallBitRate;Overall bit rate\n"
- "OverallBitRate_Maximum;Maximum Overall bit rate\n"
- "OverallBitRate_Minimum;Minimum Overall bit rate\n"
- "OverallBitRate_Mode;Overall bit rate mode\n"
- "OverallBitRate_Nominal;Nominal Overall bit rate\n"
- "Part;Part\n"
- "Part_Count;Total count\n"
- "Performer;Performer\n"
- "Period;Period\n"
- "Phone;Phone\n"
- "PixelAspectRatio;Pixel aspect ratio\n"
- "PixelAspectRatio_Original;Original pixel aspect ratio\n"
- "PlayCounter;PlayCounter\n"
- "Played_Count;Times played\n"
- "Played_First_Date;First played\n"
- "Played_Last_Date;Last played\n"
- "PlayTime;PlayTime\n"
- "Position;Position\n"
- "Position_Total;Total\n"
- "Preferences;Preferences\n"
- "Producer;Producer\n"
- "ProductionDesigner;Production designer\n"
- "ProductionStudio;Production studio\n"
- "Publisher;Publisher\n"
- "Purchased_Date;purchased date\n"
- "Quote character;Quote character\n"
- "RadioStation;Radio station\n"
- "Rating;Rating\n"
- "Recorded_Date;Recorded date\n"
- "Recorded_Location;Recorded location\n"
- "Released_Date;Released date\n"
- "RemixedBy;Remixed by\n"
- "ReplayGain_Gain;Replay gain\n"
- "ReplayGain_Peak;Replay gain peak\n"
- "Resolution;Resolution\n"
- "s;s\n"
- "SamplingRate;Sampling rate\n"
- "Save;Save\n"
- "ScanType;Scan type\n"
- "ScanType_Original;Original scan type\n"
- "ScanType_StoreMethod;Scan type, store method\n"
- "ScanOrder;Scan order\n"
- "ScanOrder_Original;Original scan order\n"
- "ScanOrder_Stored;Stored scan order\n"
- "ScanOrder_StoredDisplayedInverted;Scan order, stored/displayed order inverted\n"
- "ScanOrder_StoreMethod;Scan order, store method\n"
- "ScreenplayBy;Screenplay by\n"
- "Season;Season\n"
- "see below;see below\n"
- "Send HeaderFile;Please send me the Header file here : http://sourceforge.net/projects/mediainfo/ (Bug section)\n"
- "Separator_Columns;columns separator\n"
- "Separator_Lines;lines separator\n"
- "ServiceChannel;Service channel number\n"
- "ServiceName;Service name\n"
- "ServiceProvider;Service provider\n"
- "ServiceType;Service type\n"
- "Set;Set\n"
- "Set_Count;Set count\n"
- "Setup;Setup\n"
- "Sharpness;Sharpness\n"
- "Sheet;Sheet\n"
- "Sheet (Complete);Sheet (Complete)\n"
- "Shell extension;Explorer extension (in Windows Explorer, right click on a file, there will be a MediaInfo option)\n"
- "Shell extension, folder;For folders too\n"
- "Shell InfoTip;Explorer Tooltip (in Windows Explorer, move the mouse over the file, info will be displayed)\n"
- "Show menu;Show menu\n"
- "Show toolbar;Show toolbar\n"
- "Sort;Sorted by\n"
- "SamplingCount;Samples count\n"
- "SoundEngineer;Sound engineer\n"
- "Source;Source\n"
- "Source_Duration;Source duration\n"
- "Source_FrameCount;Source frame count\n"
- "Source_SamplingCount;Source sample count\n"
- "Source_StreamSize;Source stream size\n"
- "Source_StreamSize_Encoded;Source encoded stream size\n"
- "Standard;Standard\n"
- "StoreMethod_InterleavedFields;Interleaved fields\n"
- "StoreMethod_SeparatedFields;Separated fields\n"
- "StoreMethod_SeparatedFields_1;Separated fields (1 field per block)\n"
- "StoreMethod_SeparatedFields_2;Separated fields (2 fields per block)\n"
- "Stream;Stream\n"
- "Stream_MoreInfo;More information about the stream\n"
- "StreamCount;Count of stream of this kind\n"
- "StreamID;Stream ID\n"
- "StreamKind;Kind of stream\n"
- "StreamKindID;Stream identifier\n"
- "StreamKindPos;Stream identifier\n"
- "StreamSize;Stream size\n"
- "StreamSize_Encoded;Encoded stream size\n"
- "StreamSize_Proportion;Proportion of this stream\n"
- "Subject;Subject\n"
- "SubTrack;SubTrack\n"
- "Summary;Summary\n"
- "Supported formats;Supported formats\n"
- "Supported?;Supported?\n"
- "Synopsis;Synopsis\n"
- "SystemId;Id\n"
- "Tagged_Application;Tagging application\n"
- "Tagged_Date;Tagged date\n"
- "Technician;Technician\n"
- "TermsOfUse;Terms of use\n"
- "Text;Text\n"
- "Text - Custom;Text - Custom\n"
- "Text (HTML);Text (HTML)\n"
- "Text stream(s);Text streams\n"
- "Text streams;Text streams\n"
- "Text_Codec_List;Text codecs\n"
- "Text_No;No text\n"
- "Text1;First text stream\n"
- "Text2;Second text stream\n"
- "Text3;Third text stream\n"
- "TextCount;Count of text streams\n"
- "ThanksTo;Thanks to\n"
- "Thousands separator;Thousands separator\n"
- "Title;Title\n"
- "Title_More;Title, more info\n"
- "TimeCode;Time code\n"
- "TimeCode_FirstFrame;Time code of first frame\n"
- "TimeCode_Settings;Time code settings\n"
- "TimeCode_Source;Time code source\n"
- "TimeStamp;Time stamp\n"
- "TimeZone;Timezone\n"
- "Total;Total\n"
- "Track;Track name\n"
- "Track_Count;Track count\n"
- "transfer_characteristics;Transfer characteristics\n"
- "Translator;Translator\n"
- "Tree;Tree\n"
- "Tree & Text;Tree & Text\n"
- "Type;Type\n"
- "UniqueID;Unique ID\n"
- "Unknown;Unknown\n"
- "Url;Url\n"
- "Video;Video\n"
- "Video stream(s);Video stream(s)\n"
- "Video_Codec_List;Codecs Video\n"
- "Video_Delay;Delay relative to video\n"
- "Video_No;No video\n"
- "Video0_Delay;Video0 delay\n"
- "Video1;First video stream\n"
- "VideoCount;Count of video streams\n"
- "View;View\n"
- "View_Hint;Change the means of viewing information\n"
- "Warning : more streams in the files;Warning : there are more streams in the files\n"
- "Web;Web\n"
- "WebSite_Audio;Go to the web site of this audio codec\n"
- "WebSite_Audio_More;Go to the web site (%Url%) to find this audio codec\n"
- "WebSite_General;Go to the web site of a player for this file\n"
- "WebSite_General_More;Go to the web site of a player for this file\n"
- "WebSite_Text;Go to the web site of this text codec\n"
- "WebSite_Text_More;Go to the web site (%Url%) to find this text codec\n"
- "WebSite_Url;http://MediaArea.net/MediaInfo\n"
- "WebSite_Video;Go to the web site of this video codec\n"
- "WebSite_Video_More;Go to the web site (%Url%) to find this video codec\n"
- "Width;Width\n"
- "Width_Original;Original width\n"
- "WriteMe;Write mail to author\n"
- "WriteToTranslator;Write to translator\n"
- "Written_Date;Written date\n"
- "Written_Location;Written location\n"
- "WrittenBy;Written by\n"
- "Yes;Yes\n"
- "Your system;Your system\n"
- "ZZ_Automatic_Percent;100\n"
- "ZZ_AutomaticLanguage_Percent;100\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Format (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "AAF;;;M;Aaf;;aaf;;\n"
- "AIFF;;;M;Riff;Apple/SGI;aiff aifc aif;audio/x-aiff;\n"
- "AMV;;;M;Riff;Chinese hack of AVI;amv;;http://en.wikipedia.org/wiki/AMV_video_format\n"
- "AVI;;;M;Riff;Audio Video Interleave;avi;video/vnd.avi;\n"
- "BDAV;;;M;Bdav;Blu-ray Video;m2ts;;\n"
- "Blu-ray Clip info;;;M;Bdmv;;clpi;;\n"
- "Blu-ray Index;;;M;Bdmv;;bdmv;;\n"
- "Blu-ray Movie object;;;M;Bdmv;;bdmv;;\n"
- "Blu-ray Playlist;;;M;Bdmv;;mpls;;\n"
- "CDDA;;;M;Riff;;cda;;\n"
- "CDXA;;;M;Cdxa;;dat;;\n"
- "DASH MPD;;;M;DashMpd;;mpd;application/dash+xml;;Lossy\n"
- "DV;;;M;DvdDif;;dv dif;video/DV;;Lossy\n"
- "DivX;;;M;Riff;Hack of AVI;divx;video/vnd.avi;http://www.divx.com\n"
- "DPG;;;M;Dpg;Nintendo DS;dpg;;\n"
- "DVD Video;;;M;Dvdv;;ifo;;\n"
- "Flash Video;;;M;Flv;;flv;application/x-shockwave-flash;http://www.macromedia.com/go/getflashplayer\n"
- "GXF;;;M;Gxf;SMPTE 360M;gxf;;\n"
- "HDS F4M;Flash Media Manifest;;M;HdsF4m;;f4m\n"
- "HLS;;;M;Hls;;m3u8;\n"
- "Google Video;;;M;Riff;Hack of AVI;gvi;;http://video.google.com/playerdownload.html\n"
- "ISM;Internet Streaming Media;;M;Ism;;ism;;\n"
- "IVF;;;M;Ivf;;ivf;;\n"
- "LXF;;;M;Lxf;;lxf;video/lxf;\n"
- "Matroska;;;M;Mk;;mkv mk3d mka mks;;http://packs.matroska.org/\n"
- "MPEG-PS;;;M;MpegPs;;mpeg mpg m2p vob pss;video/MP2P;\n"
- "MPEG-TS;;;M;MpegTs;;ts m2t m2s m2ts m4t m4s ts tp trp;video/MP2T;\n"
- "MPEG-4;;;M;Mpeg4;;mp4 m4v m4a m4b m4p 3gpp 3gp 3gpp2 3g2 k3g jpm jpx mqv ismv isma f4v;video/mp4;\n"
- "MTV;;;M;Other;Chinese hack of MPEG-1 layer 3;mtv;;http://en.wikipedia.org/wiki/Chinese_MP4/MTV_Player\n"
- "MXF;;;M;Mxf;;mxf;application/mxf;\n"
- "NSV;;;M;Nsv;Nullsoft Streaming Video;nsv;;http://winamp.com\n"
- "Ogg;;;M;Ogg;;ogg ogm opus;video/ogg;http://www.free-codecs.com/Ogg_DirectShow_Filters_download.htm\n"
- "PMP;;;M;Pmp;Playstation Portable;pmp;;\n"
- "PTX;;;M;Ptx;;ptx;;\n"
- "QuickTime;;;M;Mpeg4;Original Apple specifications;mov qt;video/quicktime;http://www.apple.com/quicktime/download/standalone.html\n"
- "RealMedia;;;M;Rm;;rm rmvb ra;application/vnd.rn-realmedia;\n"
- "RIFF-MMP;;;M;Riff;RIFF Multimedia Movie;;;\n"
- "ShockWave;;;M;Swf;;swf;application/x-shockwave;http://www.macromedia.com/go/getflashplayer\n"
- "SKM;;;M;Skm;Sky Korean Mobilephone;skm;;http://www.isky.co.kr/html/cs/download.jsp\n"
- "Windows Media;;;M;Wm;;asf wmv wma;video/x-ms-wmv;\n"
- "WebM;;;M;Mkv;;webm;video/webm;http://www.webmproject.org/\n"
- "AVC;;;V;Avc;Advanced Video Codec;avc h264;video/H264;http://developers.videolan.org/x264.html\n"
- "AVS Video;;;V;AvsV;Audio Video Standard, Video part;;;http://www.avs.org.cn/;Lossy\n"
- "Dirac;;;V;Dirac;;drc;;http://diracvideo.org/;Lossy\n"
- "FFV1;;;V;;;;;;Lossless\n"
- "FFV2;;;V;;;;;;Lossless\n"
- "FLC;;;V;Flic;;fli flc;;http://www.chem.nott.ac.uk/flc.html;Lossy\n"
- "FLI;;;V;Flic;;fli flc;;http://www.chem.nott.ac.uk/flc.html;Lossy\n"
- "FLIC;;;V;Flic;;fli flc;;http://www.chem.nott.ac.uk/flc.html;Lossy\n"
- "H.261;;;V;;;h261;video/H261;;Lossy\n"
- "H.263;;;V;;;h263;video/H263;;Lossy\n"
- "HEVC;;;V;Hevc;High Efficiency Video Coding;avc h264;video/H265;http://www.itu.int\n"
- "MPEG Video;;;V;Mpegv;;mpgv mpv mp1v m1v mp2v m2v;video/MPV;;Lossy\n"
- "MPEG-4 Visual;;;V;Mpeg4;;m4v mp4v;video/MP4V-ES;;Lossy\n"
- "Theora;;;V;;;;;http://www.theora.org/;Lossy\n"
- "VC-1;;;V;Vc1;;vc1;video/vc1;;Lossy\n"
- "YUV4MPEG2;;;V;Y4m;;y4m;;;Lossless\n"
- "VP8;;;V;;;;;http://www.webmproject.org/;Lossy\n"
- "YUV;;;V;;;;;;Lossless\n"
- "AAC;;;A;;Advanced Audio Codec;;;;Lossy\n"
- "AC-3;;;A;Ac3;Audio Coding 3;ac3;;;Lossy\n"
- "ADIF;;;A;Adif;Audio Data Interchange Format;;;\n"
- "ADTS;;;A;Adts;Audio Data Transport Stream;aac;;\n"
- "ALS;;;A;Als;MPEG-4 Audio Lossless Coding;als;;http://www.nue.tu-berlin.de/forschung/projekte/lossless/mp4als.html#downloads;Lossless\n"
- "AMR;;;A;Amr;Adaptive Multi-Rate;amr;audio/AMR;http://www.apple.com/quicktime/download/standalone.html\n"
- "Atrac;;;A;;;;audio/ATRAC;;Lossy\n"
- "Atrac3;;;A;;;;audio/ATRAC3;;Lossy\n"
- "AU;;;A;Au;uLaw/AU Audio File;au;audio/basic;\n"
- "DolbyE;;;A;Aes3;;dde\n"
- "DTS;;;A;Dts;Digital Theater Systems;dts;;;Lossy\n"
- "DTS-HD;;;A;Dts;Digital Theater Systems;dts;;;Lossy\n"
- "E-AC-3;;;A;Ac3;Audio Coding 3;dd+ ec3;audio/eac3;;Lossy\n"
- "Extended Module;;;A;ExtendedModule;;xm;;\n"
- "FLAC;;;A;Flac;Free Lossless Audio Codec;flac;;http://flac.sourceforge.net/\n"
- "G.719;;;A;;;;audio/G719;;Lossy\n"
- "G.722;;;A;;;;audio/G722;;Lossy\n"
- "G.722.1;;;A;;;;audio/G7221;;Lossy\n"
- "G.723;;;A;;;;audio/G723;;Lossy\n"
- "G.729;;;A;;;;audio/G729;;Lossy\n"
- "G.729.1;;;A;;;;audio/G7291;;Lossy\n"
- "Impulse Tracker;;;A;ImpulseTracker;;it;;\n"
- "LA;;;A;La;Lossless Audio Codec;la;;http://www.lossless-audio.com/;Lossless\n"
- "MIDI;;;A;Riff;RIFF Musical Instrument Digital Interface;midi mid kar;audio/midi;\n"
- "Module;;;A;Module;;mod;;\n"
- "Monkey's Audio;;;A;Ape;;ape mac;;http://www.monkeysaudio.com/;Lossless\n"
- "MPEG Audio;;;A;Mpega;;m1a mpa1 mp1 m2a mpa2 mp2 mp3;audio/mpeg;;Lossy\n"
- "OpenMG;;;A;OpenMG;;oma omg aa3;;;Lossy\n"
- "Musepack SV7;;;A;Mpc;;mpc;;http://www.musepack.net;Lossy\n"
- "Musepack SV8;;;A;Mpc;;mp+;;http://www.musepack.net;Lossy\n"
- "QCELP;;;A;;;;audio/QCELP;\n"
- "RIFF-MIDI;;;A;Riff;RIFF Musical Instrument Digital Interface;;;\n"
- "RKAU;RK Audio;;A;Rkau;;rka;;http://www.msoftware.co.nz\n"
- "Scream Tracker 3;;;A;S3m;;s3m;;\n"
- "Shorten;;;A;;;shn;;http://etree.org/shnutils/shorten/;Lossless\n"
- "SLS;;;A;;MPEG-4 Scalable Lossless Coding;sls;;http://www.chiariglione.org/mpeg/technologies/mp04-sls/index.htm;Lossless\n"
- "Speex;;;A;;;;audio/speex;http://www.speex.org/;Lossy\n"
- "Opus;;;A;;;;audio/opus;http://opus-codec.org/;Lossy\n"
- "TAK;;;A;;;tak;;http://thbeck.de/Tak/Tak.html;Lossless\n"
- "TrueHD;;;A;Ac3;;dts;;;Lossless\n"
- "TwinVQ;;;A;TwinVQ;Transform domain Weighted INterleave Vector Quantization;vqf;;http://www.twinvq.org/english/index_en.html\n"
- "Vorbis;;;A;;;;audio/vorbis;http://www.vorbis.com/;Lossy\n"
- "Wave;;;A;Riff;;wav;audio/vnd.wave;\n"
- "Wave64;;;A;Riff;;w64;;\n"
- "WavPack;;;A;Wvpk;;wv wvc;;http://www.wavpack.com\n"
- "Arri Raw;;;I;ArriRaw;;ari;;\n"
- "Bitmap;;;I;Bmp;;bmp;image/bmp;;Lossless\n"
- "DDS;;;I;Dds;DirectDraw Surface;dds;;\n"
- "DPX;;;I;Dpx;;dpx cin;;;Lossless\n"
- "EXR;;;I;Exr;;exr;;;Lossless\n"
- "DIB;;;I;Riff;RIFF Device Independent Bitmap;;;;Lossless\n"
- "GIF;;;I;Gif;Graphics Interchange Format;gif;image/gif;;Lossless\n"
- "ICO;;;I;Ico;;ico;image/vnd.microsoft.icon;;Lossless\n"
- "JNG;;;I;Jng;JPEG Network Graphic;jng;;;Lossy\n"
- "JPEG;;;I;Jpeg;;jpeg jpg jpe;image/jpeg;;Lossy\n"
- "JPEG 2000;;;I;Jpeg;;jp2;image/jp2;http://www.morgan-multimedia.com/JPEG 2000/\n"
- "LZ77;;;I;;;;;\n"
- "MNG;;;I;Mng;Multiple-Image Network Graphic;mng;;;Lossless\n"
- "PCX;;;I;pcx;Personal Computer eXchange;pcx;image/pcx;;Lossless\n"
- "PNG;;;I;Png;Portable Network Graphic;png;image/png;;Lossless\n"
- "PSD;;;I;Psd;Photoshop File Format;psd;image/psd;http://www.adobe.com/;Lossless\n"
- "RIFF Palette;;;I;Riff;RIFF Palette;;;\n"
- "RLE;;;I;;Run-length encoding;rle;;\n"
- "TIFF;;;I;Tiff;;tiff tif;image/tiff;\n"
- "TGA;;;I;Tga;;tga;image/tga;\n"
- "7-Zip;;;C;7z;;7z;;http://7-zip.org\n"
- "ACE;;;C;Ace;;ace;;http://winace.com\n"
- "ELF;;;C;Elf;;so;;\n"
- "ISO 9660;;;C;Iso9660;;iso;;\n"
- "MZ;;;C;Mz;;exe dll;;\n"
- "RAR;;;C;Rar;From Rarlabs;rar;application/x-rar-compressed;http://rarlabs.com\n"
- "ZIP;;;C;Zip;;zip;application/zip;http://winzip.com\n"
- "Adobe encore DVD;;;T;Other;;txt;;http://www.adobe.fr/products/encore/;Lossless\n"
- "AQTitle;;;T;Other;;aqt;;http://www.volny.cz/aberka/czech/aqt.html;Lossless\n"
- "ASS;;;T;Other;;ssa;;http://ffdshow.sourceforge.net/tikiwiki/tiki-index.php?page=Getting+ffdshow;Lossless\n"
- "Captions 32;;;T;Other;;txt;;;Lossless\n"
- "Captions Inc;;;T;Other;;txt;;;Lossless\n"
- "CPC Captioning;;;T;Other;;txt;;http://www.cpcweb.com/Captioning/cap_software.htm;Lossless\n"
- "Cheeta;;;T;Other;;asc;;;Lossless\n"
- "N19;;;T;N19;;stl;;;Lossless\n"
- "PDF;;;T;Pdf;;pdf;;\n"
- "SAMI;;;T;Sami;;smi sami;;;Lossless\n"
- "SCC;;;T;SCC;;scc sc2;;;Lossless\n"
- "SubRip;;;T;SubRip;;srt;;http://ffdshow.sourceforge.net/tikiwiki/tiki-index.php?page=Getting+ffdshow;Lossless\n"
- "TTML;;;T;TTML;;dfxp;;;Lossless\n"
- "SSA;;;T;Other;;ssa;;http://ffdshow.sourceforge.net/tikiwiki/tiki-index.php?page=Getting+ffdshow;Lossless\n"
- "WebVTT;;;T;WebVTT;;vtt;;;Lossless\n"
- "Blender;;;O;Other;;blenders;;http://www.blender3d.com\n"
- "AutoCAD;;;O;Other;;;;http://www.autodesk.com\n"
- "PlayLater Video;;;V;Other;;;;http://www.playon.tv/playlater\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_General_Mpeg4 (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "M4V ;MPEG-4;;;\n"
- "isom;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;Base Media\n"
- "iso2;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;Base Media\n"
- "iso4;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;Base Media\n"
- "mp41;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;Base Media / Version 1\n"
- "mp42;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;Base Media / Version 2\n"
- "avc1;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;JVT\n"
- "3gp1;MPEG-4;;;http://www.3gpp.org/;3GPP Media Release 1\n"
- "3gp2;MPEG-4;;;http://www.3gpp.org/;3GPP Media Release 2\n"
- "3gp3;MPEG-4;;;http://www.3gpp.org/;3GPP Media Release 3\n"
- "3gp4;MPEG-4;;;http://www.3gpp.org/;3GPP Media Release 4\n"
- "3gp5;MPEG-4;;;http://www.3gpp.org/;3GPP Media Release 5\n"
- "3gp6;MPEG-4;;;http://www.3gpp.org/;3GPP Media Release 6 Basic\n"
- "3gp6;MPEG-4;;;http://www.3gpp.org/;3GPP Media Release 6 Progressive Download\n"
- "3gp6;MPEG-4;;;http://www.3gpp.org/;3GPP Media Release 6 Streaming Servers\n"
- "3gp7;MPEG-4;;;http://www.3gpp.org/;3GPP Media Release 7 Streaming Servers\n"
- "3g2a;MPEG-4;;;http://www.3gpp2.org/;3GPP2 Media\n"
- "3ge6;MPEG-4;;;http://www.3gpp.org/;3GPP Release 6 MBMS Extended Presentation\n"
- "3ge7;MPEG-4;;;http://www.3gpp.org/;3GPP Release 7 MBMS Extended Presentation\n"
- "3gg6;MPEG-4;;;http://www.3gpp.org/;3GPP Release 6 General\n"
- "3gp8;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "3gp9;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "CAQV;MPEG-4;;;http://world.casio.com/;Casio\n"
- "FACE;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;Facebook\n"
- "isml;MPEG-4;IIS Smooth Streaming file format;;http://www.apple.com/quicktime/download/standalone.html;ISML\n"
- "JP20;MPEG-4;;;http://gpac.sourceforge.net/;JPEG 2000\n"
- "JPM ;MPEG-4;;;http://www.iso.org/;JPEG 2000 Compound Image\n"
- "JPX ;MPEG-4;;;http://www.iso.org/;JPEG 2000 w/ extensions\n"
- "KDDI;MPEG-4;;;http://www.3gpp2.org/;3GPP2 EZMovie for KDDI 3G Cellphones\n"
- "MJ2S;MPEG-4;;;http://www.iso.org/;Motion JPEG 2000 Simple Profile\n"
- "MJP2;MPEG-4;;;http://www.iso.org/;Motion JPEG 2000 General Profile\n"
- "MQT ;MPEG-4;;;http://www.sony.com/;Sony/Mobile QuickTime\n"
- "MSNV;MPEG-4;;;http://www.sony.com/;Sony PSP\n"
- "ndas;MPEG-4;;;http://www.nerodigital.com;Nero Digital AAC Audio\n"
- "ndsc;MPEG-4;;;http://www.nerodigital.com;Nero Digital Cinema Profile\n"
- "ndsh;MPEG-4;;;http://www.nerodigital.com;Nero Digital HDTV Profile\n"
- "ndsm;MPEG-4;;;http://www.nerodigital.com;Nero Digital Mobile Profile\n"
- "ndsp;MPEG-4;;;http://www.nerodigital.com;Nero Digital Portable Profile\n"
- "ndss;MPEG-4;;;http://www.nerodigital.com;Nero Digital Standard Profile\n"
- "ndxc;MPEG-4;;;http://www.nerodigital.com;Nero Digital AVC Cinema Profile\n"
- "ndxh;MPEG-4;;;http://www.nerodigital.com;Nero Digital AVC HDTV Profile\n"
- "ndxm;MPEG-4;;;http://www.nerodigital.com;Nero Digital AVC Mobile Profile\n"
- "ndxp;MPEG-4;;;http://www.nerodigital.com;Nero Digital AVC Portable Profile\n"
- "ndxs;MPEG-4;;;http://www.nerodigital.com;Nero Digital AVC Standard Profile\n"
- "mmp4;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;Mobile version\n"
- "mp71;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;ISO 14496-12 MPEG-7 meta data\n"
- "mp7b;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;ISO 14496-12 MPEG-7 meta data\n"
- "piff;MPEG-4;Protected Interoperable File Format;;http://www.apple.com/quicktime/download/standalone.html;PIFF\n"
- "qt ;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;QuickTime\n"
- "SDV ;MPEG-4;;;http://www.sdcard.org/;SD Memory Card Video\n"
- "M4A ;MPEG-4;;;http://www.apple.com/itunes/;Apple audio with iTunes info\n"
- "M4B ;MPEG-4;;;http://www.apple.com/itunes/;Apple audio with iTunes position\n"
- "M4P ;MPEG-4;;;http://www.apple.com/itunes/;AES encrypted audio\n"
- "M4VP;MPEG-4;;;http://www.apple.com/iphone/;Apple iPhone\n"
- "iphE;MPEG-4;;;http://www.apple.com/iphone/;Apple iPhone (Cellular)\n"
- "M4VH;MPEG-4;;;http://www.apple.com/appletv/;Apple TV\n"
- "QTCA;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;Quicktime compressed archive\n"
- "CAQV;MPEG-4;;;;Casio Digital Camera\n"
- "QTI ;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;QuickTime Image\n"
- "f4v ;MPEG-4;;;http://www.apple.com/quicktime/download/standalone.html;Adobe Flash\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Video_Matroska (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "V_UNCOMPRESSED;RGB;;Raw uncompressed video frames\n"
- "V_DIRAC;Dirac;;;http://diracvideo.org/\n"
- "V_MPEG4/IS0/SP;MPEG-4 Visual;;There is a zero instead of a O, may be a problem;http://www.divx.com\n"
- "V_MPEG4/IS0/ASP;MPEG-4 Visual;;There is a zero instead of a O, may be a problem;http://www.xvid.org/Downloads.15.0.html\n"
- "V_MPEG4/IS0/AP;MPEG-4 Visual;;There is a zero instead of a O, may be a problem;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG4/IS0/AVC;AVC;;There is a zero instead of a O, may be a problem;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG4/ISO/SP;MPEG-4 Visual;;Simple Profile;http://www.divx.com\n"
- "V_MPEG4/ISO/ASP;MPEG-4 Visual;;Advanced Simple Profile;http://www.xvid.org/Downloads.15.0.html\n"
- "V_MPEG4/ISO/AP;MPEG-4 Visual;;Advanced Profile;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG4/ISO/AVC;AVC;;;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEGH/ISO/HEVC;HEVC;;\n"
- "V_MPEG4/MS/V2;MPEG-4 Visual;MS MPEG-4 v2;MS MPEG-4 v2;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG4/MS/V3;MPEG-4 Visual;MS MPEG-4 v3;MS MPEG-4 v3;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG1;MPEG Video;;MPEG 1 or 2 Video;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG2;MPEG Video;;MPEG 1 or 2 Video;http://ffdshow-tryout.sourceforge.net/\n"
- "V_PRORES;ProRes;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "V_REAL/RV10;RealVideo 1;;RealVideo 1.0 aka RealVideo 5;http://www.real.com\n"
- "V_REAL/RV20;RealVideo 2;;RealVideo 2.0 aka G2 and RealVideo G2+SVT;http://www.real.com\n"
- "V_REAL/RV30;RealVideo 3;;RealVideo 3.0 aka RealVideo 8;http://www.real.com\n"
- "V_REAL/RV40;RealVideo 4;;RealVideo 4.0 aka RealVideo 9;http://www.real.com\n"
- "V_THEORA;Theora;;;http://www.theora.org\n"
- "V_VP8;VP8;;;http://www.webmproject.org/\n"
- "V_VP9;VP9;;;http://www.webmproject.org/\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Video_Mpeg4 (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "2vuy;YUV;;;;;;YUV;4:2:2\n"
- "2Vuy;YUV;;;;;;YUV;4:2:2\n"
- "8BPS;RGB;;;;;;RGB;8:8:8\n"
- "ac16;YUV;;;;;;YUV;4:2:2\n"
- "ac32;YUV;;;;;;YUV;4:2:2\n"
- "acBG;YUV;;;;;;YUV;4:2:2\n"
- "apch;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;High;;YUV;4:2:2\n"
- "apcn;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "apcs;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;LT;;YUV;4:2:2\n"
- "apco;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;Proxy;;YUV;4:2:2\n"
- "ap4c;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;;;;4:4:4\n"
- "ap4h;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;;;;4:4:4\n"
- "ai11;AVC;;Advanced Video Coding;http://ffdshow-tryout.sourceforge.net;;\n"
- "ai12;AVC;;Advanced Video Coding;http://ffdshow-tryout.sourceforge.net;;\n"
- "ai13;AVC;;Advanced Video Coding;http://ffdshow-tryout.sourceforge.net;;\n"
- "ai14;AVC;;Advanced Video Coding;http://ffdshow-tryout.sourceforge.net;;\n"
- "ai15;AVC;;Advanced Video Coding;http://ffdshow-tryout.sourceforge.net;;\n"
- "ai1q;AVC;;Advanced Video Coding;http://ffdshow-tryout.sourceforge.net;;\n"
- "ai5q;AVC;;Advanced Video Coding;http://ffdshow-tryout.sourceforge.net;;\n"
- "AV1x;YUV;;;;;;YUV;4:2:2\n"
- "avc1;AVC;;Advanced Video Coding;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "avcp;AVC;;Advanced Video Coding Parameters;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "AVDJ;JPEG;;Avid\n"
- "AVdv;DV;;Avid;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "AVd1;DV;;Avid;http://www.apple.com/quicktime/download/standalone.html;;\n"
- "AVdn;VC-3;DNxHD;Avid;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "AVmp;MPEG Video;Avid IMX;;;;Version 2;;\n"
- "avr ;JPEG;;;;;;\n"
- "b16g;Gray;;;;;;Y;16\n"
- "b32a;Gray/Alpha;;;;;;YA;16:16\n"
- "b48r;RGB;;;;;;RGB;16:16:16\n"
- "b64a;RGBA;;;;;;RGBA;16:16:16:16\n"
- "base;RGBA;;;;;;RGBA;16:16:16:16\n"
- "blit;RGBA;;;;;;RGBA;16:16:16:16\n"
- "blnd;Alpha Compositor;;;;;;\n"
- "blur;Blur;;;;;;CMYK\n"
- "CFHD;CineForm;;CineForm High-Definition (HD) wavelet codec;http://www.cineform.com/;;;\n"
- "CHQX;Canopus HQX;;;;;;\n"
- "CLLC;Canopus Lossless;;;;;;\n"
- "CUVC;Canopus HQ;;;;;;\n"
- "cmyk;CMYK;;;;;;\n"
- "cvid;Cinepack;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "drac;Dirac;;Dirac Video Coder;http://www.bbc.co.uk/rd/projects/dirac/index.shtml;;;\n"
- "dslv;Cross Fade;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "DV10;Digital Voodoo;;Digital Voodoo 10 bit Uncompressed 4:2:2 codec;http://www.digitalvoodoo.net/;;;\n"
- "dv5n;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dv5p;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvc ;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvcp;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvh1;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvh2;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvh3;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvh4;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvh5;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvh6;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvhp;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "dvhq;DV;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "DVOO;Digital Voodoo;;Digital Voodoo 8 bit Uncompressed 4:2:2 codec;http://www.digitalvoodoo.net/;;;\n"
- "DVOR;Digital Voodoo;;Digital Voodoo intermediate raw;http://www.digitalvoodoo.net/;;;\n"
- "dvpp;DV;DVCPRO;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "DVTV;Digital Voodoo;;Digital Voodoo intermediate 2vuy;http://www.digitalvoodoo.net/;;;\n"
- "DVVT;Digital Voodoo;;Digital Voodoo intermediate v210;http://www.digitalvoodoo.net/;;;\n"
- "encv;(Encrypted);;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "gif ;M-GIF;;;;;;\n"
- "Hap1;Hap;;Hap Video Codec;https://github.com/Vidvox/hap;;;\n"
- "Hap5;Hap Alpha;;Hap Video Codec;https://github.com/Vidvox/hap;;;\n"
- "HapY;Hap Q;;Hap Video Codec;https://github.com/Vidvox/hap;;;\n"
- "h261;H.261;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "h263;H.263;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "H263;H.263;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "h264;H.264;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "hcpa;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;High;;YUV;4:2:2\n"
- "HD10;Digital Voodoo;;Digital Voodoo 10 bit Uncompressed 4:2:2 HD codec;http://www.digitalvoodoo.net/;;;\n"
- "hdv1;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdv2;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdv3;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdv4;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdv5;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdv6;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdv7;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdv8;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdv9;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdva;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdvb;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdvc;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdvd;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdve;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hdvf;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "hvc1;HEVC;;High Efficiency Video Coding;http://www.itu.int/;;;\n"
- "hev1;HEVC;;High Efficiency Video Coding;http://www.itu.int/;;;\n"
- "icod;AIC;;Apple Intermediate Codec;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:0\n"
- "j420;YUV;;;;;;YUV;4:2:0\n"
- "jpeg;JPEG;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "kpcd;Photo CD;;;;;;\n"
- "LMP2;MPEG Video;;;;;;YUV\n"
- "M105;Matrox;;;http://www.matrox.com/;;;\n"
- "MMES;MPEG Video;;;;;;YUV\n"
- "mmes;MPEG Video;;;;;;YUV\n"
- "mjp2;JPEG 2000;;;;;;\n"
- "mjpa;JPEG;;;;;;\n"
- "mjpb;JPEG;;;;;;\n"
- "mp4v;MPEG-4 Visual;;;;;;\n"
- "mpeg;MPEG Video;;;;;;\n"
- "mx3n;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "mx3p;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "mx4n;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "mx4p;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "mx5n;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "mx5p;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "myuv;YUV;;;;;;YUV;4:2:0\n"
- "ncpa;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;Normal;;YUV;4:2:2\n"
- "ovc1;VC-1;;Smooth Streaming Media Video;http://alexzambelli.com/blog/2009/02/10/smooth-streaming-architecture/;;;\n"
- "png ;PNG;;;;;;\n"
- "PIM1;MPEG Video;;;;;;YUV\n"
- "PIM2;MPEG Video;;;;;;YUV\n"
- "PNTG;MacPaint;;Apple MacPaint image format;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "raw ;RGB;;;http://www.apple.com/quicktime/download/standalone.html;;;RGB\n"
- "rle ;RLE;;;http://www.apple.com/quicktime/download/standalone.html;;;RGB\n"
- "rpza;Road Pizza;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "s263;H.263;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "Shr0;SheerVideo;;Generic SheerVideo codec;http://www.bitjazz.com/;;;\n"
- "Shr1;SheerVideo;;SheerVideo RGB;http://www.bitjazz.com/;;;\n"
- "Shr2;SheerVideo;;SheerVideo Y'CbCr[A] 4:4:4;http://www.bitjazz.com/;;;\n"
- "Shr3;SheerVideo;;SheerVideo Y'CbCr 4:2:2;http://www.bitjazz.com/;;;\n"
- "Shr4;SheerVideo;;SheerVideo Y'CbCr 4:2:2;http://www.bitjazz.com/;;;\n"
- "SV10;Sorenson;;Sorenson Media Video R1;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "SVQ1;Sorenson 1;;Sorenson Media Video 1 (Apple QuickTime 3);http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "SVQ2;Sorenson 2;;Sorenson Media Video 2 (Apple QuickTime 4);http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "SVQ3;Sorenson 3;;Sorenson Media Video 3 (Apple QuickTime 5);http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "v210;YUV;AJA Video Systems Xena;;;;;YUV;4:2:2\n"
- "vc-1;VC-1;;SMPTE VC-1;http://www.smpte.org/;;;YUV\n"
- "WMV3;VC-1;WMV3;Windows Media Video 9;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;;;\n"
- "WRLE;Bitmap;;Windows BMP image format;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd50;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd51;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd52;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd53;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd54;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd55;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd56;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd57;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd58;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd59;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd5a;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd5b;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd5c;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd5d;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd5e;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xd5f;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdhd;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdh2;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv0;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv1;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv2;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv3;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv4;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv5;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv6;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv7;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv8;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdv9;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdva;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdvb;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdvc;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdvd;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdve;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "xdvf;MPEG Video;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "yuv2;YUV;;;;;;YUV;4:2:2\n"
- "yuvs;YUV;;;;;;YUV;4:2:2\n"
- "yuvu;YUV;;;;;;YUV;4:2:2\n"
- "yuvx;YUV;;;;;;YUV;4:2:2\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Video_Real (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "RV10;RealVideo 1;;Based on H.263, Real Player 5;http://www.real.com\n"
- "RV13;RealVideo 1.3;;Based on H.263, Real Player 5;http://www.real.com\n"
- "RV20;RealVideo 2;;Based on H.263, Real Player 6;http://www.real.com\n"
- "RV30;RealVideo 3;;Between H.263 and AVC (H.264), Real Player 8;http://www.real.com\n"
- "RV40;RealVideo 4;;Based on AVC (H.264), Real Player 9;http://www.real.com\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Video_Riff (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "0x00000000;RGB;;Basic Windows bitmap format. 1, 4 and 8 bpp versions are palettised. 16, 24 and 32bpp contain raw RGB samples;http://www.fourcc.org/indexrgb.htm;;;;\n"
- "0x01000000;RLE;;Run length encoded 8bpp RGB image;http://www.fourcc.org/indexrgb.htm;;;;\n"
- "0x02000010;MPEG Video;;;;;;YUV;4:2:0\n"
- "0x02000000;RLE;;Run length encoded 4bpp RGB image;http://www.fourcc.org/indexrgb.htm;;;;\n"
- "0x03000000;RGB;;Raw RGB with arbitrary sample packing within a pixel. Packing and precision of R, G and B components is determined by bit masks for each;http://www.fourcc.org/indexrgb.htm;;;;\n"
- "1978;RGB;A.M.Paredes predictor;;http://www.pegasusimaging.com/cgi-bin/download2.cgi?LVIDB;;;RGB;\n"
- " BIT;RGB;;;;;;RGB;\n"
- " JPG;JPEG;;;;;;YUV\n"
- " PNG;PNG;;;;;;RGB;\n"
- " RAW;RGB;;;http://www.fourcc.org/indexrgb.htm;;;RGB;\n"
- " raw;RGB;;;http://www.fourcc.org/indexrgb.htm;;;RGB;\n"
- " RGB;RGB;;;http://www.fourcc.org/indexrgb.htm;;;RGB;\n"
- " RL4;RLE;;;http://www.fourcc.org/indexrgb.htm;;;RGB;;4\n"
- " RL8;RLE;;;http://www.fourcc.org/indexrgb.htm;;;RGB;;8\n"
- "2VUY;YUV;Optibase VideoPump;;;;;YUV;4:2:2\n"
- "3IV0;MPEG-4 Visual;3ivX;3ivX pre-1.0;http://www.3ivx.com/download/;;;YUV;4:2:0\n"
- "3IV1;MPEG-4 Visual;3ivX;3ivX 1.0-3.5;http://www.3ivx.com/download/;;;YUV;4:2:0\n"
- "3IV2;MPEG-4 Visual;3ivX;3ivX 4.0;http://www.3ivx.com/download/;;;YUV;4:2:0\n"
- "3IVD;MPEG-4 Visual;3ivX;;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "3IVX;MPEG-4 Visual;3ivX;;http://www.3ivx.com/download/;;;YUV;4:2:0\n"
- "3VID;MPEG-4 Visual;3ivX;;http://www.3ivx.com/download/;;;YUV;4:2:0\n"
- "8BPS;RGB;Apple;;http://ffdshow-tryout.sourceforge.net/;;;RGBA\n"
- "AAS4;RLE;Autodesk;;http://mirror01.iptelecom.net.ua/~video/codecs/Autodesk.Animator.v1.11.Codec.exe;;;RGB\n"
- "AASC;RLE;Autodesk;;http://mirror01.iptelecom.net.ua/~video/codecs/Autodesk.Animator.v1.11.Codec.exe;;;RGB\n"
- "ABYR;Kensigton low;Kensington;Low resolution, low frame rate (6fps) for digital cameras;;;;\n"
- "ACTL;ACT-L2;Streambox;;http://www.streambox.com/products/act-L2_codec.htm;;;\n"
- "ADV1;WaveCodec;Loronix;;http://www.loronix.com/products/video_clips/wavecodec.asp;;;\n"
- "ADVJ;JPEG;Avid;;;;;YUV\n"
- "AEIK;Indeo 3.2;;Vector Quantization;;;;\n"
- "AEMI;MPEG Video;VideoONE;MPEG-1-I Capture;http://www.array.com;;;YUV;4:2:0\n"
- "AFLC;FLC;Autodesk;;http://mirror01.iptelecom.net.ua/~video/codecs/Autodesk.Animator.v1.11.Codec.exe;;;\n"
- "AFLI;FLI;Autodesk;;http://mirror01.iptelecom.net.ua/~video/codecs/Autodesk.Animator.v1.11.Codec.exe;;;\n"
- "AHDV;CineForm;CineForm HD;;http://www.cineform.com/products/ConnectHD.htm;;;\n"
- "AJPG;JPEG;;22fps for digital cameras;;;;YUV\n"
- "ALPH;Ziracom;;Ziracom Digital Communications Inc.;;;;\n"
- "AMM2;AMV2 MT;AMV2 MT Video Codec Version 2;;http://amamaman.hp.infoseek.co.jp/english/amv2_e.html;;;\n"
- "AMPG;MPEG-1;VideoONE;;http://www.array.com;;;YUV;4:2:0\n"
- "AMR ;AMR;;Speech codec;;;;\n"
- "AMV3;AMV3;AMV3 Video Codec Version 3;;http://amamaman.hp.infoseek.co.jp/english/amv2_e.html;;;YUV;4:2:0\n"
- "ANIM;RDX;Intel;;;;;\n"
- "AP41;MPEG-4 Visual;AngelPotion;Hack of MS MPEG-4 v3;http://www.divxity.com/download/ap4v1-702.exe;;;YUV;4:2:0\n"
- "AP42;MPEG-4 Visual;AngelPotion;Hack of MS MPEG-4 v3;http://www.divxity.com/download/ap4v1-702.exe;;;YUV;4:2:0\n"
- "apch;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;High;;YUV;4:2:2\n"
- "apcn;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV;4:2:2\n"
- "apcs;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;LT;;YUV;4:2:2\n"
- "apco;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;Proxy;;YUV;4:2:2\n"
- "ap4c;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;;;;4:4:4\n"
- "ap4h;ProRes;;;http://www.apple.com/quicktime/download/standalone.html;;;;4:4:4\n"
- "ASLC;AlparySoft Lossless;;;http://www.free-codecs.com/download/Alparysoft_Lossless_Video_Codec.htm;;;\n"
- "ASV1;Asus 1;;;ftp://ftp.asuscom.de/pub/asuscom/treiber/vga/ASUS_VGA_TOOLS/asv2dec.zip;;;\n"
- "ASV2;Asus 2;;;ftp://ftp.asuscom.de/pub/asuscom/treiber/vga/ASUS_VGA_TOOLS/asv2dec.zip;;;\n"
- "ASVX;Asus X;;;ftp://ftp.asuscom.de/pub/asuscom/treiber/vga/ASUS_VGA_TOOLS/asv2dec.zip;;;\n"
- "ATM4;MPEG-4 Visual;Nero;;http://www.nero.com;;;YUV;4:2:0\n"
- "AUR2;YUV;;Auravision Aura 2;;;;YUV;4:2:2\n"
- "AURA;YUV;;Auravision Aura 1;;;;YUV;4:1:1\n"
- "AUVX;AUVX;;USH GmbH;;;;\n"
- "AV1X;Avid 1:1;;;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;\n"
- "AVC1;AVC;;;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "avc1;AVC;;;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "AVD1;DV;Avid;;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;YUV;\n"
- "AVDJ;JPEG;Avid;;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;YUV\n"
- "AVDN;Avid HD;;;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;;\n"
- "AVDV;DV;Avid;;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;YUV;\n"
- "AVI1;JPEG;MainConcept;;;;;YUV\n"
- "AVI2;JPEG;MainConcept;;;;;YUV\n"
- "AVID;JPEG;Avid;;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;YUV\n"
- "AVIS;AviSynth;;Wrapper for AviSynth (Dummy);http://ffdshow-tryout.sourceforge.net/;;;;\n"
- "AVMP;Avid IMX;;;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;;\n"
- "AVR ;JPEG;Avid NuVista;Avid ABVB/NuVista JPEG with Alpha-channel;;;;YUV\n"
- "AVRn;JPEG;Avid JPEG;;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;YUV\n"
- "AVRN;JPEG;Avid JPEG;;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;YUV\n"
- "AVUI;Avid;;Avid Meridien Uncompressed with Alpha-channel;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;;\n"
- "AVUP;Avid;;Avid 10bit Packed (Quick Time);http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe;;;;\n"
- "AYUV;YUV;YUV;;;;;YUVA;4:4:4;8\n"
- "AZPR;QuickTime;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "AZRP;QuickTime;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "BGR ;RGB;RGB;;;;;RGB\n"
- "BHIV;BeHere iVideo;;;;;;\n"
- "BINK;Bink;;;;;;\n"
- "BIT ;RGB;RGB;;;;;RGB\n"
- "BITM;H.261;Microsoft;;;;;YUV\n"
- "BLOX;MPEG Video;Blox;;http://www.ii.uj.edu.pl/~jezabek/blox/blox-0.1.0b.zip;;;YUV;4:2:0\n"
- "BLZ0;MPEG-4 Visual;DivX;DivX for Blizzard Decoder Filter;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "BT20;MediaStream;;Conexant ProSummer MediaStream;;;;\n"
- "BTCV;Composite;;Conexant Composite Video;;;;\n"
- "BTVC;Composite;;Conexant Composite Video;;;;\n"
- "BW00;Wavelet;BergWave;;;;;\n"
- "BW10;MPEG-1;Broadway;Data Translation Broadway MPEG Capture/Compression;;;;YUV\n"
- "BXBG;RGB;Boxx;;;;;RGB\n"
- "BXRG;RGB;Boxx;;;;;RGB\n"
- "BXY2;YUV;Boxx;10-bit;;;;YUV\n"
- "BXYV;YUV;Boxx;;;;;YUV\n"
- "CC12;YUV;Intel;;;;;YUV\n"
- "CDV5;DV;Canopus;Canopus SD50/DVHD;http://www.cineform.com/products/ConnectHD.htm;;;YUV\n"
- "CDVC;DV;Canopus;Canopus DV (DV);http://www.cineform.com/products/ConnectHD.htm;;;YUV\n"
- "CDVH;DV;Canopus;Canopus SD50/DVHD;http://www.cineform.com/products/ConnectHD.htm;;;YUV\n"
- "CFCC;JPEG;DPS Perception;Dummy format - only AVI header;;;;YUV\n"
- "CFHD;CineForm;;CineForm 10-bit Visually Perfect HD (Wavelet);;;;\n"
- "CGDI;Camcorder;;Camcorder Video (MS Office 97);;;;\n"
- "CHAM;Champagne;;Winnov Caviara Champagne;;;;\n"
- "CHQX;Canopus HQX;;;;;;\n"
- "CJPG;JPEG;Creative;Creative Video Blaster Webcam Go JPEG;;;;YUV\n"
- "CLJR;YUV;Cirrus Logic;Less than 8 bits per Y, U and V sample.;http://www.fourcc.org/indexyuv.htm;;;YUV;4:1:1\n"
- "CLLC;Canopus Lossless;;;;;;\n"
- "CLPL;YUV;;Format similar to YV12 but including a level of indirection.;;;;YUV\n"
- "CM10;MediaShow;;CyberLink Corporation;http://www.cyberlink.com;;;\n"
- "CMYK;CMYK;;Common Data Format in Printing;;;;\n"
- "COL0;MPEG-4 Visual;;Hacked MS MPEG-4 v3;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "COL1;MPEG-4 Visual;;Hacked MS MPEG-4 v3;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "CPLA;YUV;Weitek;;;;;YUV;4:2:0\n"
- "CRAM;MS Video;;Microsoft Video 1;;;;\n"
- "CSCD;CamStudio;;RenderSoft CamStudio lossless (LZO & GZIP compression);;;;\n"
- "CT10;TalkingShow;;CyberLink Corporation;http://www.cyberlink.com;;;\n"
- "CTRX;Citrix;;Citrix Scalable Video;;;;\n"
- "CUVC;Canopus HQ;;;;;;\n"
- "CVID;Cinepack;;;http://www.cinepak.com/text.html;;;\n"
- "cvid;Cinepack;;;http://www.cinepak.com/text.html;;;\n"
- "CWLT;WLT;;Microsoft Color WLT DIB;;;;\n"
- "CYUV;YUV;Creative Labs;;http://www.fourcc.org/indexyuv.htm;;;YUV;4:2:2\n"
- "cyuv;YUV;;;http://www.fourcc.org/indexyuv.htm;;;YUV;4:2:2\n"
- "CYUY;YUV;ATI;;http://www.fourcc.org/indexyuv.htm;;;YUV;4:2:2\n"
- "D261;H.261;DEC;;;;;\n"
- "D263;H.263;DEC;;;;;\n"
- "DAVC;AVC;Dicas;;;;;YUV;4:2:0\n"
- "DC25;DV;MainConcept;;;;;YUV\n"
- "DCAP;DV;Pinnacle;;;;;YUV\n"
- "DCL1;Data Connextion;;Conferencing;;;;\n"
- "DCT0;WniWni;;;;;;\n"
- "DFSC;VFW;;DebugMode FrameServer VFW;;;;\n"
- "DIB ;RGB;;;;;;RGB\n"
- "DIV1;MPEG-4 Visual;FFMpeg;Hacked MS MPEG-4 V1;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "DIV2;MPEG-4 Visual;MS MPEG-4 1/2;;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "DIV3;MPEG-4 Visual;DivX 3 Low;;http://www.divx.com;;;YUV;4:2:0\n"
- "DIV4;MPEG-4 Visual;DivX 3 Fast;;http://www.divx.com;;;YUV;4:2:0\n"
- "DIV5;MPEG-4 Visual;DivX 5;;http://www.divx.com;;;YUV;4:2:0\n"
- "DIV6;MPEG-4 Visual;MS MPEG-4 v3;;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "DIVX;MPEG-4 Visual;DivX 4;Project Mayo;http://mediaarea.net/DIVX;;;YUV;4:2:0\n"
- "divx;MPEG-4 Visual;DivX;Mainly used by Google;http://www.divx.com;;;YUV;4:2:0\n"
- "DJPG;JPEG;Broadway 101;Data Translation, Inc.;;;;YUV\n"
- "DM4V;MPEG-4 Visual;Dicas;;;;;YUV;4:2:0\n"
- "DMB1;JPEG;Rainbow;Matrox Rainbow Runner hardware compression;http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.MJPG.v2.10.27.codec.exe;;;YUV\n"
- "DMB2;JPEG;Paradigm;;;;;YUV\n"
- "DMK2;V36 PDA;;ViewSonic V36 PDA Video;;;;\n"
- "DP02;MPEG-4 Visual;DynaPel;;;;;YUV;4:2:0\n"
- "DP16;YUV;Matsushita;With DPCM 6-bit compression;;;;YUV;4:1:1\n"
- "DP18;YUV;Matsushita;With DPCM 8-bit compression;;;;YUV;4:1:1\n"
- "DP26;YUV;Matsushita;With DPCM 6-bit compression;;;;YUV;4:2:2\n"
- "DP28;YUV;Matsushita;With DPCM 8-bit compression;;;;YUV;4:2:2\n"
- "DP96;YUV;Matsushita;With DPCM 6-bit compression;;;;YUV\n"
- "DP98;YUV;Matsushita;With DPCM 8-bit compression;;;;YUV\n"
- "DP9L;YUV;Matsushita;With DPCM 6-bit compression;;;;YUV\n"
- "DPS0;JPEG;DPS Reality;Dummy format - only AVI header;;;;YUV\n"
- "DPSC;JPEG;DPS PAR;Dummy format - only AVI header;;;;YUV\n"
- "DRWX;DV;Pinnacle;;;;;YUV\n"
- "DSVD;DV;Microsoft;;;;;YUV\n"
- "DTMT;Media-100;;;;;\n"
- "DTNT;Media-100;;;;;\n"
- "DUCK;TrueMotion S;Duck Corporation;;;;\n"
- "DV10;RGB;BlueFish;BlueFish444 (lossless RGBA, YUV 10-bit);;;;RGB\n"
- "DV25;DV;DVCPro;;;;;YUV\n"
- "dv25;DV;DVCPro;;;;;YUV\n"
- "DV50;DV;DVCPro5;;;;;YUV\n"
- "dv50;DV;DVCPro5;;;;;YUV\n"
- "DVAN;DV;Pinnacle DV300;;;;;YUV\n"
- "DVC ;DV;Apple;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "DVCP;DV;Apple;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "DVCS;DV;MainConcept;;;;;YUV\n"
- "DVE2;DV;Insoft DVE-2;InSoft DVE-2 Videoconferencing;;;;YUV\n"
- "DVH1;DV;Pinnacle;;;;;YUV\n"
- "dvhd;DV;HD;;;;;YUV\n"
- "DVIS;DV;DualMoon;;;;;YUV\n"
- "DVL ;DV;Radius;;;;;YUV\n"
- "DVLP;DV;Radius;;;;;YUV\n"
- "DVMA;DV;Darim;;;;;YUV\n"
- "DVNM;DVNM;;Matsushita Electric Industrial Co., Ltd.;;;;\n"
- "DVOR;RGB;BlueFish;BlueFish444 (lossless RGBA, YUV 10-bit);;;;RGB\n"
- "DVPN;DV;Apple;;;;;YUV\n"
- "DVPP;DV;Apple;;;;;YUV\n"
- "DVR ;MPEG Video;ASF;;;;;YUV;4:2:0\n"
- "DVR1;Targa2000;;;;;;\n"
- "DVRS;DV;DualMoon;;;;;YUV\n"
- "dvsd;DV;Sony;;;;;YUV\n"
- "dvsl;DV;Sony;;;;;YUV\n"
- "DVSL;DV;;;;;;YUV\n"
- "DVX1;DVX 1 SP;;Lucent DVX1000SP Video Decoder;;;;\n"
- "DVX2;DVX 2 S;;Lucent DVX2000S Video Decoder;;;;\n"
- "DVX3;DVX 3 S;;Lucent DVX3000S Video Decoder;;;;\n"
- "DX50;MPEG-4 Visual;DivX 5;;http://mediaarea.net/DX50;;;YUV;4:2:0\n"
- "DXGM;EA GameVideo;;;;;;\n"
- "DXT1;DirectX TC;;DirectX Compressed Texture (1bit alpha channel)\n"
- "DXT2;DirectX TC;;DirectX Compressed Texture\n"
- "DXT3;DirectX TC;;DirectX Compressed Texture (4bit alpha channel)\n"
- "DXT4;DirectX TC;;DirectX Compressed Texture\n"
- "DXT5;DirectX TC;;DirectX Compressed Texture (3bit alpha channel with interpolation)\n"
- "DXTC;DirectX TC;;DirectX Texture Compression\n"
- "DXTn;DirectX TC;;Microsoft Compressed Texture\n"
- "DXTN;DirectX TC;;Microsoft DirectX Compressed Texture (DXTn)\n"
- "EKQ0;Elsa KQ;;Elsa graphics card quick\n"
- "ELK0;Elsa LK;;Elsa graphics card\n"
- "EM2V;Elymonyx MPEG-2;;Etymonix MPEG-2 I-frame\n"
- "EQK0;Elsa;;Elsa graphics card quick\n"
- "ESCP;Escape;;Eidos Escape\n"
- "ETV1;eTreppid 1;;eTreppid Video 1\n"
- "ETV2;eTreppid 2;;eTreppid Video 2\n"
- "ETVC;eTreppid C;;eTreppid Video C\n"
- "FFDS;FFDS;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "FFV1;FFV1;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "FFV2;FFV2;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "FFVH;HuffYUV;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "FLIC;FLI/FLC;Autodesk;;;;;\n"
- "FLJP;DField JPEG;;D-Vision Field Encoded JPEG with LSI (or Targa emulation);;;;\n"
- "FLV1;Sorenson Spark;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "FLV4;VP6;On2;;http://ftp.pub.cri74.org/pub/win9x/video/codecs/VP6/vp6_vfw_codec.exe;Heightened Sharpness;;\n"
- "FMJP;JPEG;D-Vision;;;;;YUV\n"
- "FMP4;MPEG-4 Visual;;;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "FPS1;Fraps;;;http://www.fraps.com/;;;\n"
- "FRLE;JPEG;SoftLab-Nsk;SoftLab-NSK Y16 + Alpha RLE;;;;YUV\n"
- "FRWA;JPEG;SoftLab-Nsk;SoftLab-NSK Vision Forward JPEG with Alpha-channel;;;;YUV\n"
- "FRWD;JPEG;SoftLab-Nsk;SoftLab-NSK Vision Forward JPEG;;;;YUV\n"
- "FRWT;JPEG;SoftLab-Nsk;SoftLab-NSK Vision Forward JPEG with Alpha-channel;;;;YUV\n"
- "FRWU;JPEG;SoftLab-Nsk;SoftLab-NSK Vision Forward Uncompressed;;;;YUV\n"
- "FVF1;Itered Fractal;;;;;;\n"
- "FVFW;FVFW;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "FXT1;3DFX;;;;;;\n"
- "G2M2;GoToMeeting2;;Citrix Systems, Inc.;http://www.gotomeeting.com/;;;\n"
- "G2M3;GoToMeeting3;;Citrix Systems, Inc.;http://www.gotomeeting.com/;;;\n"
- "GEPJ;JPEG;White Pine;;;;;YUV\n"
- "GJPG;Grand Tech GT891x;;;;;;\n"
- "GLCC;GigaLink;;;;;;\n"
- "GLZW;LZW;Gabest;;http://sourceforge.net/project/showfiles.php?group_id=82303&package_id=84358;;;\n"
- "GMP4;GeoVision Advanced MPEG-4;;;http://www.geovision.com.tw/;;;\n"
- "GM40;GeoVision Advanced MPEG-4;;;http://www.geovision.com.tw/;;;\n"
- "GPEG;JPEG;Gabest;;http://sourceforge.net/project/showfiles.php?group_id=82303&package_id=84358;;;YUV\n"
- "GPJM;JPEG;Pinnacle;;;;;YUV\n"
- "GREY;YUV;;Simple grayscale video;http://www.fourcc.org/indexyuv.htm;;;YUV\n"
- "GWLT;MS GWLT;;Microsoft Greyscale WLT DIB;;;;\n"
- "GXVE;ViVD V2;SoftMedia;;;;;\n"
- "H260;H.260;;;;;;\n"
- "H261;H.261;;;;;;\n"
- "H262;MPEG Video;;;;;;YUV;4:2:0\n"
- "H263;H.263;;;;;;\n"
- "h263;H.263;;;http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "H264;AVC;;;;;;YUV;4:2:0\n"
- "h264;AVC;;;;;;YUV;4:2:0\n"
- "H265;H.265;;;;;;\n"
- "H266;H.266;;;;;;\n"
- "H267;H.267;;;;;;\n"
- "H268;H.268;;;;;;\n"
- "H269;H.263;;;;;;\n"
- "HD10;RGB;BlueFish;BlueFish444 (lossless RGBA, YUV 10-bit);;;;RGB\n"
- "HDX4;Jomigo HDX4;;;;;;\n"
- "HFYU;HuffYUV;;;;;;\n"
- "HMCR;Rendition;;Rendition Motion Compensation Format;;;;\n"
- "HMRR;Rendition;;Rendition Motion Compensation Format;;;;\n"
- "i263;H.263;;;;;;\n"
- "I420;YUV;;8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes.;;;;\n"
- "IAN ;Indeo 4;;;;;;\n"
- "ICLB;CellB;;InSoft CellB Videoconferencing;;;;\n"
- "IDM0;Wavelets 2;;IDM Motion Wavelets 2.0;;;;\n"
- "IF09;H.261;Microsoft;;;;;\n"
- "IFO9;YUV;Intel;;;;;YUV\n"
- "IGOR;PowerDVD;;;;;;\n"
- "IJPG;JPEG;Intergraph;;;;;YUV\n"
- "ILVC;Layered Video;Intel;;;;;\n"
- "ILVR;H.263+;;;;;;\n"
- "IMAC;MotionComp;;Intel hardware motion compensation.;;;;\n"
- "IMC1;YUV;;As YV12, except the U and V planes each have the same stride as the Y plane;;;;YUV\n"
- "IMC2;YUV;;Similar to IMC1, except that the U and V lines are interleaved at half stride boundaries;;;;YUV\n"
- "IMC3;YUV;;As IMC1, except that U and V are swapped;;;;YUV\n"
- "IMC4;YUV;;As IMC2, except that U and V are swapped;;;;YUV\n"
- "IMG ;YUV;;;;;;YUV\n"
- "IMJG;Accom JPEG;;Accom SphereOUS JPEG with Alpha-channel;;;;\n"
- "IPDV;I-O DV;;I-O Data Device Giga AVI DV;;;\n"
- "IPJ2;JPEG 2000;;Image Power JPEG 2000;;;\n"
- "IR21;Indeo 2.1;;;;;\n"
- "IRAW;YUV;;;http://www.fourcc.org/indexyuv.htm;;;YUV\n"
- "ISME;ISME;;Intel;;;\n"
- "IUYV;YUV;;Lead 16bpp. Interlaced version of UYVY (line order 0, 2, 4,....,1, 3, 5....);;;;YUV\n"
- "IV30;Indeo 3;;Intel Indeo Video 3;;;\n"
- "IV31;Indeo 3;;Intel Indeo Video 3.1;;;\n"
- "IV32;Indeo 3;;Intel Indeo Video 3.2;;;\n"
- "IV33;Indeo 3;;Intel Indeo Video 3.3;;;\n"
- "IV34;Indeo 3;;Intel Indeo Video 3.4;;;\n"
- "IV35;Indeo 3;;Intel Indeo Video 3.5;;;\n"
- "IV36;Indeo 3;;Intel Indeo Video 3.6;;;\n"
- "IV37;Indeo 3;;Intel Indeo Video 3.7;;;\n"
- "IV38;Indeo 3;;Intel Indeo Video 3.8;;;\n"
- "IV39;Indeo 3;;Intel Indeo Video 3.9;;;\n"
- "IV40;Indeo 4;;Intel Indeo Video 4.0;;;\n"
- "IV41;Indeo 4;;Intel Indeo Video 4.1;;;\n"
- "IV42;Indeo 4;;Intel Indeo Video 4.2;;;\n"
- "IV43;Indeo 4;;Intel Indeo Video 4.3;;;\n"
- "IV44;Indeo 4;;Intel Indeo Video 4.4;;;\n"
- "IV45;Indeo 4;;Intel Indeo Video 4.5;;;\n"
- "IV46;Indeo 4;;Intel Indeo Video 4.6;;;\n"
- "IV47;Indeo 4;;Intel Indeo Video 4.7;;;\n"
- "IV48;Indeo 4;;Intel Indeo Video 4.8;;;\n"
- "IV49;Indeo 4;;Intel Indeo Video 4.9;;;\n"
- "IV50;Indeo 4;;Intel Indeo Video 5.0 Wavelet;http://www.fourcc.org/indexyuv.htm;;\n"
- "IY41;YUV;;Lead 16bpp. Interlaced version of Y41P (line order 0, 2, 4,....,1, 3, 5....);http://www.fourcc.org/indexyuv.htm;;;YUV\n"
- "IYU1;YUV;;IEEE1394 12bpp. 12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec;http://www.fourcc.org/indexyuv.htm;;;YUV\n"
- "IYU2;YUV;;IEEE1394 24bpp. 24 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec;;;;YUV\n"
- "IYUV;YUV;;Intel Indeo iYUV 4:2:0;;;;YUV\n"
- "JBYR;Kensington;;Kensington Video;http://ffdshow-tryout.sourceforge.net/;;\n"
- "JFIF;JPEG;;;;;;YUV\n"
- "JPEG;JPEG;;;http://www.apple.com/quicktime/download/standalone.html;;;YUV\n"
- "JPG;JPEG;;;http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.Lossless.JPEG.codec.v2.10.27.exe;;;YUV\n"
- "JPGL;JPEG;Pegasus;DIVIO JPEG Light for WebCams (Pegasus Lossless JPEG);;;;YUV\n"
- "KMVC;Karl;;Karl Morton's Video (presumably);http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "kpcd;Photo CD;;Kodak Photo CD;;;;\n"
- "L261;H.261;Lead Technologies;;;;;\n"
- "L263;H.263+;Lead Technologies;;;;;\n"
- "LAGS;Lagarith;;;;;;\n"
- "LBYR;Creative WebCam;;;;;;\n"
- "LCMW;Lead CMW;;Lead Technologies Motion CMW;;;;\n"
- "LCW2;Lead MCMW;;LEADTools MCMW 9Motion Wavelet;http://mirror01.iptelecom.net.ua/~video/codecs/LEAD.MCMP-JPEG.v1.016.codec.exe;;;\n"
- "LEAD;Lead Video;;;;;;\n"
- "LGRY;Lead GrayScale;;;;;;\n"
- "LIA1;Liafail;;Liafail, Inc.;;;;\n"
- "LJ2K;JPEG 2000;Lead;;http://mirror01.iptelecom.net.ua/~video/codecs/LEAD.MCMP-JPEG.v1.016.codec.exe;;;\n"
- "LJPG;JPEG;Lead;;http://mirror01.iptelecom.net.ua/~video/codecs/LEAD.MCMP-JPEG.v1.016.codec.exe;;;YUV\n"
- "Ljpg;JPEG;Lead;;;;;YUV\n"
- "LMP2;MPEG-PS;Lead;;;;;\n"
- "LOCO;LOCO;;Lossless;;;;\n"
- "LSCR;Lead Screen capture;;;;;;\n"
- "LSV0;LSV0;;Infinop Inc.;;;;\n"
- "LSVC;Vmail;;Vianet Lighting Strike Vmail (Streaming);;;;\n"
- "LSVM;Vmail;;Vianet Lighting Strike Vmail (Streaming);;;;\n"
- "LSVW;Infinop;;Infinop Lightning Strike multiple bit rate video codec.;;;;\n"
- "LSVX;Vmail;;Vianet Lightning Strike Video Codec;;;;\n"
- "LZO1;LZO;;LZO compressed (lossless);;;;\n"
- "M101;YUV;Matrox;;;;;YUV\n"
- "M261;H.261;Microsoft;;;;;\n"
- "M263;H.263;Microsoft;;;;;\n"
- "M4CC;MPEG-4 Visual;ESS Divo;;;;;YUV;4:2:0\n"
- "M4S2;MPEG-4 Visual;Microsoft;;;;;YUV;4:2:0\n"
- "MC12;ATI Motion;;ATI Motion Compensation Format;;;;\n"
- "MC24;JPEG;MainConcept;;;;;YUV\n"
- "MCAM;ATI Motion;;ATI Motion Compensation Format;;;;\n"
- "MCZM;RGB;;Theory MicroCosm Lossless 64bit RGB with Alpha-channel;;;;RGB\n"
- "MDVD;MicroDVD;;Alex MicroDVD Video (hacked MS MPEG-4);;;;\n"
- "MDVF;DV;Pinnacle;Pinnacle DV/DV50/DVHD100;;;;YUV\n"
- "MHFY;YUV;;A.M.Paredes mhuffyYUV (LossLess);http://mirror01.iptelecom.net.ua/~video/codecs/Pinnacle.ReelTime.v2.5.software.only.codec.exe;;;YUV\n"
- "MJ2C;JPEG 2000;;Morgan Multimedia JPEG 2000 Compression;http://mirror01.iptelecom.net.ua/~video/codecs/Pinnacle.ReelTime.v2.5.software.only.codec.exe;;;\n"
- "MJPA;JPEG;Pinacle;Pinnacle ReelTime MJPG hardware;http://mediaxw.sourceforge.net;;;YUV\n"
- "MJPB;JPEG;Pinacle B;;;;;YUV\n"
- "MJPG;JPEG;;;;;;YUV\n"
- "mJPG;JPEG;IBM;Including Huffman Tables;;;;YUV\n"
- "MJPX;JPEG;Pegasus;Pegasus PICVideo JPEG;;;;YUV\n"
- "ML20;Webcam;;Mimic MSN Messenger Webcam;;;;\n"
- "MLCY;MLC;;MLC Lossless Codec;http://www.linek.sk/mlc/;;;;;;Lossless\n"
- "MMES;MPEG Video;Matrox;I-frame;;;;YUV;4:2:0\n"
- "MMIF;MPEG Video;Matrox;I-frame;;;;YUV;4:2:0\n"
- "MNVD;MindVid;;MindBend MindVid LossLess;;;;\n"
- "MP2V;MPEG Video;;Media Excel MPEG-2 Video;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "MP2v;MPEG Video;;MPEG-2 Video;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "MP41;MPEG-4 Visual;Microsoft;Microsoft MPEG-4 v1 (pre-standard);http://ffdshow-tryout.sourceforge.net/;;;\n"
- "MP42;MPEG-4 Visual;Microsoft;Microsoft MPEG-4 v2 (pre-standard);http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "MP43;MPEG-4 Visual;Microsoft;Microsoft MPEG-4 v3 (pre-standard);;;;\n"
- "MP4S;MPEG-4 Visual;MS MPEG-4 v3;Microsoft MPEG-4 (Windows Media 7.0);;;;YUV;4:2:0\n"
- "MP4V;MPEG-4 Visual;;Apple QuickTime MPEG-4 native;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "MPEG;MPEG Video;;Chromatic MPEG 1 Video I Frame;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "mpeg;MPEG Video;;MPEG-1 Video;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "MPG1;MPEG Video;Ffmpeg;(MPEG-1/2) FFmpeg;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "mpg1;MPEG Video;Ffmpeg;(MPEG-1/2) FFmpeg;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "MPG2;MPEG Video;Ffmpeg;(MPEG-1/2) FFmpeg;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "mpg2;MPEG Video;Ffmpeg;(MPEG-1/2) FFmpeg;http://ffdshow-tryout.sourceforge.net/;;;YUV;4:2:0\n"
- "MPG3;MPEG-4 Visual;FFmpeg DivX 3;(MPEG-4) MS MPEG-4 v3;;;;YUV;4:2:0\n"
- "MPG4;MPEG-4 Visual;MS MPEG-4 v1;Microsoft MPEG-4 v1;;;;YUV;4:2:0\n"
- "MPGI;MPEG Video;Sigma;Sigma Design MPEG-1 I-frame;;;;YUV;4:2:0\n"
- "MPNG;PNG;;Motion PNG;;;;\n"
- "MRCA;Mrcodec;;FAST Multimedia;;;;\n"
- "MRLE;RLE;;Microsoft RLE;;;;RGB\n"
- "MSS1;Screen Video;Windows;Windows Screen Video;;;;\n"
- "MSS2;Windows Media;;Windows Media 9;;;;\n"
- "MSUC;MSU;;MSU LossLess;;;;\n"
- "MSUD;MSU;;MSU LossLess;;;;\n"
- "MSV1;Microsoft Video 1;;Microsoft Video 1;;;;\n"
- "MSVC;Microsoft Video 1;;Microsoft Video 1;;;;\n"
- "MSZH;AVImszh;;Lossless (ZIP compression);;;;\n"
- "MTGA;TGA;;Motion TGA images (24, 32 bpp);;;;\n"
- "MTX1;JPEG;Matrox;;;;;YUV\n"
- "MTX2;JPEG;Matrox;;;;;YUV\n"
- "MTX3;JPEG;Matrox;;;;;YUV\n"
- "MTX4;JPEG;Matrox;;;;;YUV\n"
- "MTX5;JPEG;Matrox;;;;;YUV\n"
- "MTX6;JPEG;Matrox;;;;;YUV\n"
- "MTX7;JPEG;Matrox;;;;;YUV\n"
- "MTX8;JPEG;Matrox;;;;;YUV\n"
- "MTX9;JPEG;Matrox;;;;;YUV\n"
- "MV10;Nokia;;Nokia Mobile Phones;;;;\n"
- "MV11;Nokia;;Nokia Mobile Phones;;;;\n"
- "MV12;MVI;;Motion Pixels (old);;;;\n"
- "MV99;Nokia;;Nokia Mobile Phones;;;;\n"
- "MVC1;Nokia;;Nokia Mobile Phones;;;;\n"
- "MVC2;Nokia;;Nokia Mobile Phones;;;;\n"
- "MVC9;Nokia;;Nokia Mobile Phones;;;;\n"
- "MVI1;MVI;;Motion Pixels MVI;;;;\n"
- "MVI2;MVI;;Motion Pixels MVI;;;;\n"
- "MWV1;Aware Motion Wavelets;;Aware Motion Wavelets;;;;\n"
- "MYUV;RGB;;Media-100 844/X Uncompressed;;;;RGB\n"
- "NAVI;MPEG-4 Visual;;nAVI video (hacked MS MPEG-4);;;;YUV;4:2:0\n"
- "NDIG;MPEG-4 Visual;Ahead;Ahead Nero Digital MPEG-4;;;;YUV;4:2:0\n"
- "NHVU;Nvidia Texture;;Nvidia Texture Format (GEForce 3);;;;\n"
- "NO16;RGB;;Theory None16 64bit uncompressed Uncompressed;;;;RGB\n"
- "NT00;YUV;LightWave;NewTek LightWave HDTV YUV with Alpha-channel;;;;YUV\n"
- "NTN1;NogaTech Video 1;;Nogatech Video Compression 1;;;;\n"
- "NTN2;NogaTech Video 2;;Nogatech Video Compression 2 (GrabBee hardware coder);;;;\n"
- "NUV1;Nuppel;;NuppelVideo;;;;\n"
- "NV12;YUV;;8-bit Y plane followed by an interleaved U/V plane with 2x2 subsampling;;;;YUV\n"
- "NV21;YUV;;As NV12 with U and V reversed in the interleaved plane;;;;YUV\n"
- "NVDS;Nvidia Texture;;Nvidia Texture Format;;;;\n"
- "NVHS;Nvidia Texture;;Nvidia Texture Format (GeForce 3);;;;\n"
- "NVHU;Nvidia Texture;;Nvidia Texture Format;;;;\n"
- "NVS0;Nvidia Texture;;Nvidia Texture Compression Format;;;;\n"
- "NVS1;Nvidia Texture;;Nvidia Texture Compression Format;;;;\n"
- "NVS2;Nvidia Texture;;Nvidia Texture Compression Format;;;;\n"
- "NVS3;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVS4;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVS5;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVS6;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVS7;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVS8;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVS9;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT0;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT1;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT2;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT3;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT4;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT5;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT6;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT7;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT8;Nvidia Texture;;Nvidia Texture Compression Format\n"
- "NVT9;Nvidia Texture;;Nvidia Texture Compression Format;;;;\n"
- "NY12;YUV;Nogatech;;;;;YUV\n"
- "NYUV;YUV;Nogatech;;;;;YUV\n"
- "ONYX;VP7;On2;;http://www.on2.com/vp7.php3;;;\n"
- "PCLE;Studio400;Pinnacle;;;;;\n"
- "PDVC;DV;Panasonic;;;;;YUV\n"
- "PGVV;Radius Video Vision;;;;;;\n"
- "PHMO;Photomotion;IBM;;;;;\n"
- "PIM1;JPEG;Pegasus;Pinnacle DC1000 hardware (MPEG compression);http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.Lossless.JPEG.codec.v2.10.27.exe;;;YUV\n"
- "PIM2;JPEG;Pegasus;Pegasus Imaging;http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.Lossless.JPEG.codec.v2.10.27.exe;;;YUV\n"
- "PIMJ;JPEG;Pegasus;Pegasus Imaging PICvideo Lossless JPEG;http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.Lossless.JPEG.codec.v2.10.27.exe;;;YUV\n"
- "PIXL;JPEG;Miro;MiroVideo XL (JPEG);;;;YUV\n"
- "PNG;PNG;;;;;;\n"
- "PNG1;PNG;;Corecodec.org CorePNG;;;;\n"
- "PVEZ;PowerEZ;;Horizons Technology PowerEZ;;;;\n"
- "PVMM;MPEG-4 Visual;Pegasus;PacketVideo Corporation MPEG-4;;;;YUV;4:2:0\n"
- "PVW2;Wavelet;Pegasus;Pegasus Imaging Wavelet 2000;;;;\n"
- "PVWV;Wavelet;Pegasus;Pegasus Imaging Wavelet 2000;;;;\n"
- "PXLT;Pixlet;;Apple Pixlet (Wavelet);;;;\n"
- "Q1.0;QPEG 1.0;;Q-Team QPEG 1.0;http://www.q-team.de;;;\n"
- "Q1.1;QPEG 1.1;;Q-Team QPEG 1.1;http://www.q-team.de;;;\n"
- "QDGX;Apple GX;;Apple QuickDUncompressed GX;;;;\n"
- "QDRW;Palettized Video;;Apple;;;;\n"
- "QPEG;QPEG 1.1;;Q-Team QPEG 1.1;;;;\n"
- "QPEQ;QPEG 1.1;;Q-Team QPEG 1.1;;;;\n"
- "R210;YUV;;BlackMagic YUV (Quick Time);;;;YUV\n"
- "R411;DV;Radius;Radius DV NTSC YUV;;;;YUV\n"
- "R420;DV;Radius;Radius DV PAL YUV;;;;YUV\n"
- "RAV_;MPEG-1;GroupTron;GroupTRON ReferenceAVI (dummy for MPEG compressor);;;;YUV;4:2:0\n"
- "RAVI;MPEG-1;GroupTron;GroupTRON ReferenceAVI (dummy for MPEG compressor);;;;YUV;4:2:0\n"
- "RAW ;RGB;;Full Frames (Uncompressed);;;;RGB\n"
- "raw ;RGB;;Full Frames (Uncompressed);http://www.apple.com/quicktime/download/standalone.html;;;RGB\n"
- "RGB ;RGB;;;;;;RGB;8:8:8\n"
- "RGB1;RGB;;;;;;RGB 3:3:2;3:3:2\n"
- "RGB2;RGB;;;;;;RGB 3:3:2;3:3:2\n"
- "RGBA;RGB;;;http://www.fourcc.org/indexrgb.htm;;;RGB\n"
- "RGBO;RGB;;Little Endian;;;;RGB 5:5:5;5:5:5\n"
- "RGBP;RGB;;Little Endian;;;;RGB 5:6:5;5:6:5\n"
- "RGBQ;RGB;;Big Endian;;;;RGB 5:5:5;5:5:5\n"
- "RGBR;RGB;;Big Endian;;;;RGB 5:6:5;5:6:5\n"
- "RGBT;RGBA;;;http://www.fourcc.org/indexrgb.htm;;;RGBA\n"
- "RIVA;Swizzled texture;;Nvidia;;;;\n"
- "RL4;RLE;;RLE 4bpp RGB;;;;RGB\n"
- "RL8;RLE;;RLE 8bpp RGB;;;;RGB\n"
- "RLE ;RLE;;RLE RGB with arbitrary sample packing within a pixel;http://www.fourcc.org/indexrgb.htm;;;RGB\n"
- "RLE4;RLE;;RLE 4bpp RGB;http://www.fourcc.org/indexrgb.htm;;;RGB\n"
- "RLE8;RLE;;RLE 8bpp RGB;http://www.fourcc.org/indexrgb.htm;;;RGB\n"
- "RLND;Roland;;Roland Corporation;;;;\n"
- "RMP4;MPEG-4 Visual;RealMagic;REALmagic MPEG-4 Video (Sigma Design, built on XviD);;;;YUV;4:2:0\n"
- "ROQV;Id RoQ;;Id RoQ File Video Decoder;;;;\n"
- "RT21;Intel Video 2.1;;Intel Real Time Video 2.1;;;;\n"
- "RTV0;NewTek VideoToaster;;NewTek VideoToaster (dummy format - only AVI header);;;;\n"
- "RUD0;Rududu;;Rududu video;;;;\n"
- "RV10;RealVideo 1;;H263, RealVideo 5;http://www.real.com;;;\n"
- "RV13;RealVideo 1;;H263, RealVideo 5;http://www.real.com;;;\n"
- "RV20;RealVideo 2;;H263, RealVideo 6;http://www.real.com;;;\n"
- "RV30;RealVideo 3;;Between H263 and H264, RealVideo 8;http://www.real.com;;;\n"
- "RV40;RealVideo 4;;H264, RealVideo 9;http://www.real.com;;;\n"
- "RVX ;RDX;;Intel RDX;;;;\n"
- "S263;H.263;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "S422;YUV;VideoCap C210;VideoCap C210;;;;YUV\n"
- "SAN3;MPEG-4 Visual;;Direct copy of DivX 3.11;;;;YUV;4:2:0\n"
- "SANM;Smush v2;;LucasArts;http://www.lucasarts.com/;;;\n"
- "SCCD;SoftCam;;;;;;\n"
- "SDCC;DV;Sun;Sun Digital Camera;;;;YUV;4:1:1\n"
- "SEDG;MPEG-4 Visual;Samsung;Samsung MPEG-4;;;;YUV;4:2:0\n"
- "SEG4;Cinepak;;;http://www.sega.com/;;;\n"
- "SEGA;Cinepak;;;http://www.sega.com/;;;\n"
- "SFMC;CrystalNet;;CrystalNet Surface Fitting Method;;;;\n"
- "SHR0;BitJazz SheerVideo;;BitJazz SheerVideo (realtime lossless);;;;\n"
- "SHR1;BitJazz SheerVideo;;BitJazz SheerVideo (realtime lossless);;;;\n"
- "SHR2;BitJazz SheerVideo;;BitJazz SheerVideo (realtime lossless);;;;\n"
- "SHR3;BitJazz SheerVideo;;BitJazz SheerVideo (realtime lossless);;;;\n"
- "SHR4;BitJazz SheerVideo;;BitJazz SheerVideo (realtime lossless);;;;\n"
- "SHR5;BitJazz SheerVideo;;BitJazz SheerVideo (realtime lossless);;;;\n"
- "SHR6;BitJazz SheerVideo;;BitJazz SheerVideo (realtime lossless);;;;\n"
- "SHR7;BitJazz SheerVideo;;BitJazz SheerVideo (realtime lossless);;;;\n"
- "SIF1;SIF1;;;http://mysif.ru/SIF1_dd_Eng.htm;;;\n"
- "SJPG;JPEG;CuSeeMe;CuSeeMe;http://mirror01.iptelecom.net.ua/~video/codecs/CUseeMe.JPEG.CODEC.v1.17.exe;;;YUV\n"
- "SL25;DV;SoftLab DVCPro;SoftLab-NSK DVCPRO;;;;YUV;4:1:1\n"
- "SL50;DV;SoftLab DVCPro5;SoftLab-NSK ;;;;YUV;4:1:1\n"
- "SLDV;DV;SoftLab;SoftLab-NSK Forward DV Draw;;;;YUV;4:1:1\n"
- "SLIF;MPEG Video;SoftLab;SoftLab-NSK MPEG-2 I-frames;;;;YUV;4:2:0\n"
- "SLMJ;JPEG;SoftLab;SoftLab-NSK Forward JPEG;;;;YUV\n"
- "smc ;SMC;;Apple Graphics (SMC);http://www.apple.com/quicktime/download/standalone.html;;;\n"
- "SMSC;Radius;;;;;;\n"
- "SMSD;Radius;;;;;;\n"
- "SMSV;Wavelet Video;;WorldConnect Wavelet Streaming Video;;;;\n"
- "SNOW;Snow;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "SP40;YUV;SunPlus;SunPlus YUV;;;;YUV\n"
- "SP44;MegaCam;;SunPlus Aiptek MegaCam;;;;\n"
- "SP53;MegaCam;;SunPlus Aiptek MegaCam;;;;\n"
- "SP54;MegaCam;;SunPlus Aiptek MegaCam;;;;\n"
- "SP55;MegaCam;;SunPlus Aiptek MegaCam;;;;\n"
- "SP56;MegaCam;;SunPlus Aiptek MegaCam;;;;\n"
- "SP57;MegaCam;;SunPlus Aiptek MegaCam;;;;\n"
- "SP58;MegaCam;;SunPlus Aiptek MegaCam;;;;\n"
- "SP61;MegaCam;;SunPlus Aiptek MegaCam;;;;\n"
- "SPIG;Spigot;;Radius Spigot;;;;\n"
- "SPLC;ACM audio;;Splash Studios ACM Audio;;;;\n"
- "SPRK;Spark;;;;;;\n"
- "SQZ2;VXTreme 2;;Microsoft VXTreme Video V2;;;;\n"
- "STVA;ST Imager;;ST Microelectronics CMOS Imager Data (Bayer);;;;\n"
- "STVB;ST Imager;;ST Microelectronics CMOS Imager Data (Nudged Bayer);;;;\n"
- "STVC;ST Imager;;ST Microelectronics CMOS Imager Data (Bunched);;;;\n"
- "STVX;ST Imager;;ST Microelectronics CMOS Imager Data (Extended Data Format);;;;\n"
- "STVY;ST Imager;;ST Microelectronics CMOS Imager Data (Extended Data Format with Correction Data);;;;\n"
- "SV10;Sorenson;;Sorenson Media Video R1;;;;\n"
- "SVQ1;AVC;Sorenson 1;Sorenson Media Video 1 (Apple QuickTime 3);;;;\n"
- "SVQ2;AVC;Sorenson 2;Sorenson Media Video 2 (Apple QuickTime 4);;;;\n"
- "SVQ3;AVC;Sorenson 3;Sorenson Media Video 3 (Apple QuickTime 5);;;;\n"
- "SWC1;JPEG;MainConcept;MainConcept JPEG;;;;YUV\n"
- "T420;YUV;Toshiba;Toshiba YUV 4:2:0;;;;YUV\n"
- "TGA ;TGA;Apple;Apple TGA (with Alpha-channel)\n"
- "THEO;Theora;;FFVFW Supported\n"
- "TIFF;Apple TIFF;;Apple TIFF (with Alpha-channel)\n"
- "TIM2;Pinnacle DVI;;Pinnacle RAL DVI\n"
- "TLMS;TeraLogic;;TeraLogic Motion Intraframe\n"
- "TLST;TeraLogic;;TeraLogic Motion Intraframe\n"
- "TM10;Duck;;Duck TrueMotion\n"
- "TM20;Duck 2;;Duck TrueMotion 2.0\n"
- "TM2A;Duck Archiver 2;;Duck TrueMotion Archiver 2.0\n"
- "TM2X;Duck 2;;Duck TrueMotion 2X\n"
- "TMIC;TeraLogic;;TeraLogic Motion Intraframe\n"
- "TMOT;Horizons TM S;;Horizons Technology TrueMotion Video\n"
- "TR20;Duck TM RT2;;Duck TrueMotion RT 2.0\n"
- "TRLE;Akula;;Akula Alpha Pro Custom AVI (LossLess)\n"
- "TSCC;TechSmith;;TechSmith Screen Capture\n"
- "tscc;TechSmith;;TechSmith Screen Capture\n"
- "TV10;Tecomac;;Tecomac Low-Bit Rate;;;;\n"
- "TVJP;Pinnacle/Truevision;;TrueVision Field Encoded JPEG (Targa emulation);;;;\n"
- "TVMJ;Pinnacle/Truevision;;Truevision TARGA JPEG Hardware (or Targa emulation);;;;\n"
- "TY0N;Trident;;Trident Decompression Driver;;;;\n"
- "TY2C;Trident;;Trident Decompression Driver;;;;\n"
- "TY2N;Trident;;Trident Decompression Driver;;;;\n"
- "U<Y ;YUV;Discreet;Discreet UC YUV 4:2:2:4 10 bit;;;;YUV\n"
- "U<YA;YUV;Discreet;Discreet UC YUV 4:2:2:4 10 bit (with Alpha-channel);;;;YUV\n"
- "U263;H.263;UB;UB Video H.263/H.263+/H.263++ Decoder;http://eMajix.com;;;\n"
- "UCOD;ClearVideo;;ClearVideo (fractal compression-based);;;;\n"
- "ULH0;YUV;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;YUV;4:2:0\n"
- "ULH2;YUV;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;YUV;4:2:2\n"
- "ULRA;RGBA;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;RGBA;4:4:4:4\n"
- "ULRG;RGB;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;RGB;4:4:4\n"
- "ULTI;Ultimotion;;IBM Ultimotion;;;;\n"
- "ULY0;YUV;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;YUV;4:2:0\n"
- "ULY2;YUV;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;YUV;4:2:2\n"
- "UMP4;MPEG-4 Visual;UB;UB Video MPEG 4;http://www.fourcc.org/indexyuv.htm;;;YUV;4:2:0\n"
- "UYNV;YUV;;Nvidia 16bpp. A direct copy of UYVY registered by Nvidia to work around problems in some olds which did not like hardware which offered more than 2 UYVY surfaces.;http://www.fourcc.org/indexyuv.htm;;;YUV\n"
- "UYVP;YUV;;Evans & Sutherland 24bpp. YUV 4:2:2 extended precision 10-bits per component in U0Y0V0Y1 order;;;;YUV\n"
- "UYVU;YUV;SoftLab;SoftLab-NSK Forward YUV;http://www.fourcc.org/indexyuv.htm;;;YUV\n"
- "UYVY;YUV;;Uncompressed 16bpp. YUV 4:2:2 (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). A macropixel contains 2 pixels in 1 u_int32.;;;;YUV;4:2:2\n"
- "V210;YUV;;Optibase VideoPump 10-bit 4:2:2 Component YUV;;;;\n"
- "v210;YUV;AJA Video Systems Xena;;;;;YUV;4:2:2\n"
- "V261;VX3000S;;Lucent VX3000S;;;;\n"
- "V422;YUV;Vitec;;;;;YUV;4:2:2\n"
- "V655;YUV;Vitec;Vitec Multimedia 16 bit YUV 4:2:2 (6:5:5) format;;;;YUV\n"
- "VBLE;MarcFD VBLE;;MarcFD VBLE Lossless;;;;\n"
- "VCR1;ATI Video 1;;ATI VCR 1.0;;;;\n"
- "VCR2;ATI Video 2;;ATI VCR 2.0 (MPEG YV12);;;;\n"
- "VCR3;ATI Video 3;;ATI VCR 3.0;;;;\n"
- "VCR4;ATI Video 4;;ATI VCR 4.0;;;;\n"
- "VCR5;ATI Video 5;;ATI VCR 5.0;;;;\n"
- "VCR6;ATI Video 6;;ATI VCR 6.0;;;;\n"
- "VCR7;ATI Video 7;;ATI VCR 7.0;;;;\n"
- "VCR8;ATI Video 8;;ATI VCR 8.0;;;;\n"
- "VCR9;ATI Video 9;;ATI VCR 9.0;;;;\n"
- "VCWV;Wavelet;;VideoCon;;;;\n"
- "VDCT;RGB;VideoMaker;Video Maker Pro DIB;;;;RGB\n"
- "VDOM;VDOWave;;VDONet Wave;;;;\n"
- "VDOW;VDOLive;;VDONet Live (H,263);;;;\n"
- "VDST;VirtualDub;;VirtualDub remote frameclient ICM driver;;;;\n"
- "VDTZ;YUV;;VideoTizer / Darim Vision YUV;;;;YUV;4:2:2\n"
- "VGPX;VGP;;Alaris VideoGramPixel;;;;\n"
- "VIDM;MPEG-4 Visual;DivX 5 Pro;DivX 5.0 Pro Supported;;;;YUV;4:2:0\n"
- "VIDS;Vitec;;Vitec Multimedia YUV 4:2:2;www.yks.ne.jp/~hori/;;;\n"
- "VIFP;VFAPI;;Virtual Frame API (VFAPI dummy format);;;;\n"
- "VIV1;H.263;Vivo;;;;;\n"
- "VIV2;H.263;Vivo;;;;;\n"
- "VIVO;H.263;Vivo;;;;;\n"
- "VIXL;JPEG;Miro XL;Miro Video XL;http://mirror01.iptelecom.net.ua/~video/codecs/miroVIDEO-XL.codec.v2.2.exe;;;YUV\n"
- "VJPG;JPEG;;;;;;YUV\n"
- "VLV1;Videologic;;;;;;\n"
- "VMNC;Vmware;;;http://www.vmware.com/;;;\n"
- "VP30;VP3;On2;;;;;\n"
- "VP31;VP3;On2;;;;;\n"
- "VP32;VP3;On2;;;;;\n"
- "VP40;VP4;On2;;;;;\n"
- "VP50;VP5;On2;;;;;\n"
- "VP60;VP6;On2;;http://ftp.pub.cri74.org/pub/win9x/video/codecs/VP6/vp6_vfw_codec.exe;Simple;;\n"
- "VP61;VP6;On2;;http://ftp.pub.cri74.org/pub/win9x/video/codecs/VP6/vp6_vfw_codec.exe;Advanced;;\n"
- "VP62;VP6;On2;;http://ftp.pub.cri74.org/pub/win9x/video/codecs/VP6/vp6_vfw_codec.exe;Heightened Sharpness;;\n"
- "VP6A;VP6;On2;;http://ftp.pub.cri74.org/pub/win9x/video/codecs/VP6/vp6_vfw_codec.exe;Alpha;;\n"
- "VP6F;VP6;On2;;http://ftp.pub.cri74.org/pub/win9x/video/codecs/VP6/vp6_vfw_codec.exe;Heightened Sharpness;;\n"
- "VP70;VP7;On2;;;General;;\n"
- "VP71;VP7;On2;;;Error Resilient;;\n"
- "VP72;VP7;On2;;;;;\n"
- "VP80;VP8;;;http://www.webmproject.org;;;YUV;4:2:0\n"
- "VQC1;Vector 1;;Vector-quantised 1 (high compression) http://eprints.ecs.soton.ac.uk/archive/00001310/01/VTC97-js.pdf;;;;\n"
- "VQC2;Vector 2;;Vector-quantised 2 (high robustness against channel errors) http://eprints.ecs.soton.ac.uk/archive/00001310/01/VTC97-js.pdf;;;;\n"
- "VQJP;VQ630;;Dual-mode digital camera;;;;\n"
- "VQS4;VQ110;;DV camera;;;;\n"
- "VR21;YUV;BlckMagic;BlackMagic YUV (Quick Time);;;;YUV\n"
- "VSSH;AVC;Vanguard VSS;;;;;YUV;4:2:0\n"
- "VSSV;Vanguard Video;Vanguard VSS;;;;;\n"
- "VSSW;AVC;Vanguard VSS;;;;;YUV;4:2:0\n"
- "VTLP;GGP;;Alaris VideoGramPixel;;;;\n"
- "VX1K;DVX 1 S;;Lucent VX1000S Video;;;;\n"
- "VX2K;DVX 2 S;;Lucent VX2000S Video;;;;\n"
- "VXSP;DVX 1 SP;;Lucent VX1000SP Video;;;;\n"
- "VYU9;YUV;ATI;;;;;YUV\n"
- "VYUY;YUV;ATI;;;;;YUV\n"
- "WBVC;W9960;;Winbond Electronics W9960;;;;\n"
- "WHAM;Microsoft Video 1;;;;;;\n"
- "WINX;Winnov;;;;;;\n"
- "WJPG;JPEG;Winbond ;Winbond JPEG (AverMedia USB devices);;;;YUV\n"
- "WMV1;WMV1;;Windows Media Video 7;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;;;\n"
- "WMV2;WMV2;;Windows Media Video 8;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;;;\n"
- "WMV3;VC-1;WMV3;Windows Media Video 9;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;;;\n"
- "WMVA;VC-1;WMV;Windows Media Video;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "WMVP;WMV3;;Windows Media Video V9;;;;\n"
- "WNIX;WniWni;;WniWni;;;;\n"
- "WNV1;WinNov;;WinNov Videum Hardware Compression;http://www.winnov.com/;;;\n"
- "WNVA;WinNov;;WinNov Videum Hardware Compression;http://www.winnov.com/;;;\n"
- "WRLE;RGB;Apple;Apple QuickTime BMP;;;;RGB\n"
- "WRPR;AVideoTools;;VideoTools VideoServer Client (wrapper for AviSynth);;;;\n"
- "WV1F;;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "WVC1;VC-1;Microsoft;;;;;\n"
- "WVLT;IllusionHope Wavelet 9/7;;IllusionHope Wavelet 9/7;;;;\n"
- "WVP2;;;;http://ffdshow-tryout.sourceforge.net/;;;\n"
- "WZCD;iScan;;CORE Co. Ltd.;;;;\n"
- "WZDC;iSnap;;CORE Co. Ltd.;;;;\n"
- "X263;H.263;Xirlink;;;;;\n"
- "X264;AVC;;XiWave GNU GPL x264 MPEG-4;;;;\n"
- "XJPG;JPEG;Xirlink;;;;;YUV\n"
- "XLV0;NetXL Video;;NetXL Inc. XL Video Decoder;;;;\n"
- "XMPG;MPEG Video;Xing;XING MPEG (I frame only);;;;YUV;4:2:0\n"
- "XVID;MPEG-4 Visual;XviD;;http://mediaarea.net/XVID;;;YUV;4:2:0\n"
- "XVIX;MPEG-4 Visual;XviD;Based on XviD MPEG-4;http://www.xvid.org/Downloads.15.0.html;;;YUV;4:2:0\n"
- "XWV0;XiWave Video;;;;;;\n"
- "XWV1;XiWave Video;;;;;;\n"
- "XWV2;XiWave Video;;;;;;\n"
- "XWV3;XiWave Video;;;;;;\n"
- "XWV4;XiWave Video;;;;;;\n"
- "XWV5;XiWave Video;;;;;;\n"
- "XWV6;XiWave Video;;;;;;\n"
- "XWV7;XiWave Video;;;;;;\n"
- "XWV8;XiWave Video;;;;;;\n"
- "XWV9;XiWave Video;;;;;;\n"
- "XXAN;Origin VideoGame;;Used in Wing Commander 3 and 4;;;;\n"
- "XYZP;YUV;;Extended PAL format XYZ palette;;;;YUV\n"
- "Y211;YUV;;Packed YUV format with Y sampled at every second pixel across each line and U and V sampled at every fourth pixel;;;;YUV\n"
- "Y216;YUV;Targa;Pinnacle TARGA CineWave YUV (Quick Time);;;;YUV\n"
- "Y411;YUV;;YUV 4:1:1 Packed;;;;YUV;4:1:1\n"
- "Y41B;YUV;;YUV 4:1:1 Planar;;;;YUV;4:1:1\n"
- "Y41P;YUV;;Conexant (ex Brooktree) YUV 4:1:1 Raw;http://www.fourcc.org/indexyuv.htm;;;YUV;4:1:1\n"
- "Y41T;YUV;;Format as for Y41P, but the lsb of each Y component is used to signal pixel transparency;;;;YUVA;4:1:1\n"
- "Y422;YUV;;Direct copy of UYVY as used by ADS Technologies Pyro WebCam firewire camera;;;;YUV;4:2:2\n"
- "Y42B;YUV;;YUV 4:2:2 Planar;;;;YUV;4:2:2\n"
- "Y42T;YUV;;Format as for UYVY, but the lsb of each Y component is used to signal pixel transparency;;;;YUVA;4:2:2\n"
- "Y444;YUV;;IYU2 (iRez Stealth Fire camera);;;;YUV\n"
- "Y8 ;GrayScale;;Simple grayscale video;;;;Y\n"
- "Y800;GrayScale;;Simple grayscale video;;;;Y\n"
- "YC12;YUV;;Intel YUV12;http://www.fourcc.org/indexyuv.htm;;;YUV\n"
- "YCCK;YUV;;;;;;YUV\n"
- "YMPG;MPEG-PS;;YMPEG Alpha (dummy for MPEG-2 compressor);;;;\n"
- "YU12;YUV;;ATI YV12 4:2:0 Planar;;;;YUV;4:2:0\n"
- "YU92;YUV;;Intel - YUV;;;;YUV\n"
- "YUNV;YUV;;A direct copy of YUY2 registered by Nvidia to work around problems in some olds which did not like hardware that offered more than 2 YUY2 surfaces;;;;YUV\n"
- "YUV2;YUV;;Apple Component Video (YUV 4:2:2);http://www.apple.com/quicktime/download/standalone.html;;;YUV;\n"
- "YUV8;YUV;;Winnov Caviar YUV8 ;http://www.fourcc.org/indexyuv.htm;;;YUV;\n"
- "YUV9;YUV;;Intel YUV9;;;;YUV;\n"
- "YUVP;YUV;;YUV 4:2:2 extended precision 10-bits per component in Y0U0Y1V0 order;;;;YUV;4:2:2;10\n"
- "YUY2;YUV;;YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel;http://www.fourcc.org/indexyuv.htm;;;YUV;4:2:2\n"
- "YUYP;YUV;;Evans & Sutherland;;;;YUV;\n"
- "YUYV;YUV;;Canopus YUV format;http://www.fourcc.org/indexyuv.htm;;;YUV;\n"
- "YV12;YUV;;ATI YVU12 4:2:0 Planar;http://www.fourcc.org/indexyuv.htm;;;YUV;4:2:0\n"
- "YV16;YUV;;Elecard YUV 4:2:2 Planar;;;;YUV;4:2:2\n"
- "YV92;YUV;;Intel Smart Video Recorder YVU9;;;;YUV;\n"
- "YVU9;YUV;;Brooktree YVU9 Raw (YVU9 Planar);http://www.fourcc.org/indexyuv.htm;;;YUV;\n"
- "YVYU;YUV;;YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel;;;;YUV;4:2:2\n"
- "ZLIB;AVIzlib;;Lossless (ZIP compression);;;;;\n"
- "ZMBV;Zip;;Zip Motion Blocks Video;;;;;\n"
- "ZPEG;Video Zipper;;Metheus Video Zipper;;;;;\n"
- "ZYGO;ZyGo;;ZyGo Video;;;;;\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Audio_Matroska (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "A_MPEG/L1;MPEG Audio;MP1;;http://www.iis.fraunhofer.de/amm/index.html\n"
- "A_MPEG/L2;MPEG Audio;MP2;;http://www.iis.fraunhofer.de/amm/index.html\n"
- "A_MPEG/L3;MPEG Audio;MP3;;http://www.iis.fraunhofer.de/amm/index.html\n"
- "A_PCM/INT/BIG;PCM;;\n"
- "A_PCM/INT/LIT;PCM;;\n"
- "A_PCM/FLOAT/IEEE;PCM;;\n"
- "A_AC3;AC-3;;\n"
- "A_AC3/BSID9;AC-3;;\n"
- "A_AC3/BSID10;AC-3;;\n"
- "A_DTS;DTS;;\n"
- "A_EAC3;E-AC-3;;\n"
- "A_FLAC;Flac;;;http://flac.sourceforge.net\n"
- "A_OPUS;Opus;;;http://opus-codec.org\n"
- "A_TTA1;TTA;;The True Audio Lossless Codec;http://true-audio.com\n"
- "A_VORBIS;Vorbis;;;http://www.vorbis.com\n"
- "A_WAVPACK4;WavPack;;;http://www.wavpack.com\n"
- "A_REAL/14_4;VSELP;;Real Audio 1 (14.4);http://www.real.com\n"
- "A_REAL/28_8;G.728;;Real Audio 2 (28.8);http://www.real.com\n"
- "A_REAL/COOK;Cooker;;Real Audio Cook Codec (codename: Gecko);http://www.real.com\n"
- "A_REAL/SIPR;G.729;;Real & Sipro Voice Codec;http://www.real.com\n"
- "A_REAL/RALF;RealAudio Lossless;;Real Audio Lossless Format;http://www.real.com\n"
- "A_REAL/ATRC;Atrac;;Real & Sony Atrac3 Codec;http://www.real.com\n"
- "A_TRUEHD;TrueHD;;;http://www.dolby.com/consumer/technology/trueHD.html\n"
- "A_MLP;MLP;;Meridian Lossless Packing;http://www.meridian-audio.com\n"
- "A_AAC;AAC;;\n"
- "A_AAC/MPEG2/MAIN;AAC;;\n"
- "A_AAC/MPEG2/LC;AAC;;\n"
- "A_AAC/MPEG2/LC/SBR;AAC;;\n"
- "A_AAC/MPEG2/SSR;AAC;;\n"
- "A_AAC/MPEG4/MAIN;AAC;;\n"
- "A_AAC/MPEG4/LC;AAC;;\n"
- "A_AAC/MPEG4/LC/SBR;AAC;;\n"
- "A_AAC/MPEG4/LC/SBR/PS;AAC;;\n"
- "A_AAC/MPEG4/SSR;AAC\n"
- "A_AAC/MPEG4/LTP;AAC\n"
- "A_ALAC;ALAC;;Apple Lossless Audio Codec;http://www.apple.com/quicktime/download/standalone.html\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Audio_Mpeg4 (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- ".mp3;MPEG Audio;;;\n"
- "A104;AMR;;;http://www.apple.com/quicktime/download/standalone.html;Wide band\n"
- "ac-3;AC-3;;;\n"
- "alac;ALAC;;Apple Lossless Audio Codec;http://www.apple.com/quicktime/download/standalone.html\n"
- "alaw;ADPCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "dtsc;DTS;;Digital Theater Systems;http://www.dts.com\n"
- "dtsh;DTS;HRA;Digital Theater Systems High Res;http://www.dts.com\n"
- "dtsl;DTS;MA;Digital Theater Systems Master Audio;http://www.dts.com\n"
- "dtse;DTS;Express;;Digital Theater Systems Low Bitrate;http://www.dts.com\n"
- "dvca;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "ec-3;E-AC-3;;;\n"
- "enca;(Encrypted);;;\n"
- "fl32;PCM ; ;;http://www.apple.com/quicktime/download/standalone.html\n"
- "fl64;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "ima4;ADPCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "in24;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "in32;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "lpcm;PCM;;;\n"
- "MAC3;MACE 3;;;\n"
- "MAC6;MACE 6;;;\n"
- "nmos;Nellymoser;;;http://www.nellymoser.com/\n"
- "NONE;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "owma;WMA Pro;;Smooth Streaming Media Audio;http://alexzambelli.com/blog/2009/02/10/smooth-streaming-architecture/\n"
- "Qclp;QCELP;;Qualcomm PureVoice;\n"
- "QDM1;QDesign 1;;QDesign Music 1;http://www.apple.com/quicktime/download/standalone.html\n"
- "QDM2;Qdesign 2;;QDesign Music 2;http://www.apple.com/quicktime/download/standalone.html\n"
- "QDMC;Qdesign 2;(Old);QDesign Music 2 (old version, rare);http://www.apple.com/quicktime/download/standalone.html\n"
- "raw ;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "sac3;AC-3;;Made by Nero;http://www.nerodigital.com\n"
- "samr;AMR;;;http://www.apple.com/quicktime/download/standalone.html;Narrow band\n"
- "sawb;AMR;;;http://www.apple.com/quicktime/download/standalone.html;Wide band\n"
- "sevc;EVRC;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "sowt;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "twos;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "ulaw;ADPCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "vdva;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "WMA2;WMA;;Windows Media Audio;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;;Version 2\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Audio_Real (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "14.4;VSELP;;Real Player 1;http://www.real.com\n"
- "14_4;VSELP;;Real Player 1;http://www.real.com\n"
- "28.8;G.728;;Real Player 2;http://www.real.com\n"
- "28_8;G.728;;Real Player 2;http://www.real.com\n"
- "atrc;Atrac;;Real Player 8;http://www.real.com\n"
- "audio/X-MP3-draft-00;MPEG Audio;;\n"
- "audio/x-ralf-mpeg4;RealAudio Lossless;;Real Audio Lossless Format, Real Player 10;http://www.real.com;;;;;;Lossless\n"
- "audio/x-ralf-mpeg4-generic;RealAudio Lossless;;Real Audio Lossless Format, Real Player 10;http://www.real.com;;;;;;Lossless\n"
- "cook;Cooker;;Based on G.722.1, Real Player 6;http://www.real.com\n"
- "dnet;AC-3;;Real Player 3;http://www.real.com\n"
- "lpcJ;VSELP;;Real Player 1;http://www.real.com\n"
- "raac;AAC;;Real Player 9;http://www.real.com;LC\n"
- "racp;AAC;;Real Player 10;http://www.real.com;HE-AAC\n"
- "rtrc;RealAudio 8;;;http://www.real.com\n"
- "sipr;ACELP;;Real Player 4;http://www.real.com\n"
- "whrl;RealAudio Multi-Channel;;Real Audio Multi-Channel;http://www.real.com\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Audio_Riff (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "0;;;;\n"
- "1;PCM;;;http://www.microsoft.com/windows/\n"
- "2;ADPCM;;;http://www.microsoft.com/windows/\n"
- "3;PCM;IEEE ;;http://www.microsoft.com/windows/;Float\n"
- "4;VSELP;Compaq;;\n"
- "5;CVSD;IBM;;\n"
- "6;ADPCM;CCITT;;http://www.microsoft.com/windows/;A-Law\n"
- "7;ADPCM;CCITT;;http://www.microsoft.com/windows/;U-Law\n"
- "8;DTS;;Digital Theater Systems;\n"
- "9;DRM;Microsoft;;\n"
- "A;WMA;;Windows Media Audio;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;Voice\n"
- "C;MPEG Audio;;;;MPEG-2 5.1\n"
- "10;ADPCM;OKI;;\n"
- "11;ADPCM;Intel;;\n"
- "12;ADPCM;Mediaspace;;\n"
- "13;ADPCM;Sierra;;\n"
- "14;ADPCM;Antex;G.723\n"
- "15;STD;DSP solutions;\n"
- "16;FIX;DSP solutions;\n"
- "17;ADPCM;Dialogic-OKI;;http://www.microsoft.com/windows/\n"
- "18;ADPCM;;\n"
- "19;CU;HP;\n"
- "1A;Dynamic Voice;HP;\n"
- "20;ADPCM;Yamaha;\n"
- "21;SONARC;Speech Compression;\n"
- "22;Truespeech;DSP Group;;http://www.microsoft.com/windows/\n"
- "23;SC1;Echo Speech;\n"
- "24;AudioFile 36;Virtual Music ;\n"
- "25;APTX;;Audio Processing Technology X\n"
- "26;AudioFile 10;Virtual Music;\n"
- "27;Prosody 1612;Aculab plc;\n"
- "28;LRC;Merging Technologies;\n"
- "30;AC-2;Dolby Laboratories;\n"
- "31;GSM 6.10;Microsoft;;http://www.microsoft.com/windows/\n"
- "32;Microsoft Audio;;\n"
- "33;ADPCM;Antex;\n"
- "34;VQLPC;Control Resources;\n"
- "35;REAL;DSP Solutions;\n"
- "36;ADPCM;DSP Solutions;\n"
- "37;CR10;;Control Resources 10\n"
- "38;ADPCM;Natural MicroSystems VBX;\n"
- "39;ADPCM;Crystal Semiconductor IMA;\n"
- "3A;SC3;Echo Speech;\n"
- "3B;ADPCM;Rockwell;\n"
- "3C;DigiTalk;Rockwell DigiTalk;\n"
- "3D;Xebec;;Xebec Multimedia Solutions\n"
- "40;ADPCM;Antex Electronics;G.721\n"
- "41;CELP;Antex Electronics;G.728\n"
- "42;G.723.1;Microsoft;;http://www.microsoft.com/windows/;\n"
- "42;ADPCM;;IBM;;\n"
- "42;G.729;Microsoft;;;\n"
- "45;ADPCM;Microsoft;G.726;http://www.microsoft.com/windows/;\n"
- "50;MPEG Audio;;;http://www.iis.fraunhofer.de/amm/index.html;;Version 1\n"
- "51;MPEG Audio;;;http://www.iis.fraunhofer.de/amm/index.html;;Version 2\n"
- "52;RT24;InSoft, Inc.;;;\n"
- "53;PAC;InSoft, Inc.;;;\n"
- "55;MPEG Audio;MP3;;http://www.iis.fraunhofer.de/amm/index.html;\n"
- "59;G.723;Lucent;G.723;;\n"
- "60;Cirrus;;Cirrus Logic;;\n"
- "61;PCM;ESS Technology;;;\n"
- "62;Voxware;;;;\n"
- "63;Atrac;Canopus;;;\n"
- "64;ADPCM;APICOM;G.726;;\n"
- "65;ADPCM;APICOM;G.722;;\n"
- "66;DSAT;Microsoft;\n"
- "67;DSAT Display;Microsoft;\n"
- "69;BYTE_ALIGNED;Voxware;;http://www.voxware.com/\n"
- "70;AC8;Voxware;;http://www.voxware.com/\n"
- "71;AC10;Voxware;;http://www.voxware.com/\n"
- "72;AC16;Voxware;;http://www.voxware.com/\n"
- "73;AC20;Voxware;;http://www.voxware.com/\n"
- "74;RT24;Voxware;MetaVoice;http://www.voxware.com/\n"
- "75;RT29;Voxware;MetaSound;http://www.voxware.com/\n"
- "76;RT29HW;Voxware;;http://www.voxware.com/\n"
- "77;VR12;Voxware;;http://www.voxware.com/\n"
- "78;VR18;Voxware;;http://www.voxware.com/\n"
- "79;TQ40;Voxware;;http://www.voxware.com/\n"
- "7A;SC3;Voxware;\n"
- "7B;SC3;Voxware;\n"
- "80;Softsound;;\n"
- "81;TQ60;Voxware;;http://www.voxware.com/\n"
- "82;MSRT24;Microsoft;\n"
- "83;G.729a;AT&T;\n"
- "84;MVI_MVI2;Motion Pixels;\n"
- "85;ADPCM;DataFusion Systems;G.726\n"
- "86;GSM 6.10;DataFusion Systems;\n"
- "88;ISI AUDIO;;Iterated Systems AUDIO\n"
- "89;Onlive;;OnLive! Technologies\n"
- "8A;SX20;Multitude;\n"
- "8B;ADPCM;Infocom ITS A/S;\n"
- "8C;G.729;Convedia Corporation;\n"
- "91;SBC24;;Siemens Business Communications Sys 24\n"
- "92;AC-3;Sonic Foundry;\n"
- "93;G.723;MediaSonic;\n"
- "94;Prosody 8KBPS;Aculab plc;\n"
- "97;ADPCM;ZyXEL Communications;\n"
- "98;LPCBB;Philips Speech Processing;;\n"
- "99;Packed;;Studer Professional Audio AG Packed;\n"
- "A0;PHONYTALK;Malden Electronics;;\n"
- "A1;GSM;Racal Recorders;;\n"
- "A2;G.720a;Racal Recorders;;\n"
- "A3;G.723.1;Racal Recorders;;\n"
- "A4;ACELP;Racal Recorders;;\n"
- "B0;AAC;NEC Corporation;;\n"
- "FF;AAC;;;\n"
- "100;ADPCM;;;\n"
- "101;IRAT;BeCubed;;\n"
- "102;ADPCM;IBM;;;A-law\n"
- "103;ADPCM;IBM AVC;;\n"
- "111;G.723;Vivo;;\n"
- "112;SIREN;Vivo;;\n"
- "120;CELP;Philips Speech Processing;;\n"
- "121;Grundig;Philips Speech Processing;;\n"
- "123;G.723;Digital Equipment Corporation;;\n"
- "125;ADPCM;;;\n"
- "130;ACELP;Sipro;;http://dividix.host.sk;.net\n"
- "131;ACELP;Sipro;;;4800\n"
- "132;ACELP;Sipro;;;8V3\n"
- "133;G.729;Sipro;;\n"
- "134;G.729a;Sipro;;\n"
- "135;KELVIN;Sipro;;\n"
- "135;AMR;VoiceAge Corporation;;\n"
- "140;ADPCM;Dictaphone Corporation;G.726;\n"
- "140;CELP68;Dictaphone Corporation;;\n"
- "140;CELP54;Dictaphone Corporation;;\n"
- "150;PureVoice;Qualcomm;;\n"
- "151;HalfRate;Qualcomm;;\n"
- "155;TUBGSM;Ring Zero Systems;;\n"
- "160;WMA;;Windows Media Audio;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;;Version 1\n"
- "161;WMA;;Windows Media Audio;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;;Version 2\n"
- "162;WMA;;Windows Media Audio;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;Pro\n"
- "163;WMA;;Windows Media Audio;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx;Lossless\n"
- "170;ADPCM;Unisys Nap;;;\n"
- "171;ADPCM;Unisys Nap;;;U-law\n"
- "172;ADPCM;Unisys Nap;;;A-law\n"
- "173;16K;Unisys Nap;;;\n"
- "174;G.700;SyCom Technologies;;;\n"
- "175;ADPCM;SyCom Technologies;;;\n"
- "176;CELP54;SyCom Technologies;;;\n"
- "177;CELP68;SyCom Technologies;;;\n"
- "178;ADPCM;Knowledge Adventure, Inc.;;;\n"
- "180;AAC;Fraunhofer IIS;;;\n"
- "190;DTS;;Digital Theater Systems;;\n"
- "200;ADPCM;Creative Labs;;;\n"
- "202;Fast Speech 8;Creative Labs\n"
- "203;Fast Speech 10;Creative Labs\n"
- "210;ADPCM;UHER informatic GmbH\n"
- "215;ACM;Ulead\n"
- "216;ACM;Ulead\n"
- "220;QuaterDeck;\n"
- "230;VC;;I-link VC\n"
- "240;RAW_SPORT;;Aureal\n"
- "241;AC-3;ESST\n"
- "250;HSX;Interactive Products, Inc.\n"
- "251;RPELP;Interactive Products, Inc.\n"
- "260;CS2;Consistent Software\n"
- "270;Atrac3;Sony\n"
- "271;SCY;Sony\n"
- "272;Atrac3;Sony\n"
- "273;SPC;Sony\n"
- "280;Telum;;\n"
- "281;TelumIA;;\n"
- "285;ADPCM;Norcom Voice Systems;\n"
- "300;FM_TOWNS_SND;Fujitsu;\n"
- "350;Dev;Micronas Semiconductors, Inc.;\n"
- "351;CELP833;Micronas Semiconductors, Inc.;\n"
- "400;DIGITAL;Brooktree;\n"
- "401;Music Coder;Intel;;http://www.intel.com/\n"
- "402;IAC2;Ligos;;http://www.ligos.com\n"
- "450;Qdesign;;QDesign Music\n"
- "500;VP7;;On2\n"
- "501;VP6;;On2\n"
- "680;VM;;AT&T VME_VMPCM\n"
- "681;TPC;;AT&T TPC\n"
- "700;YMPEG;;YMPEG Alpha\n"
- "8AE;LiteWave;;ClearJump LiteWave\n"
- "AAC;AAC;;;\n"
- "1000;GSM;Ing C. Olivetti & C., S.p.A.;;\n"
- "1001;ADPCM;Ing C. Olivetti & C., S.p.A.;;\n"
- "1002;CELP;Ing C. Olivetti & C., S.p.A.;;\n"
- "1003;SBC;Ing C. Olivetti & C., S.p.A.;;\n"
- "1004;OPR;Ing C. Olivetti & C., S.p.A.;;\n"
- "1100;LH_CODEC;Lernout & Hauspie; Codec;\n"
- "1101;CELP;Lernout & Hauspie;;http://www.microsoft.com/windows/;4.8 kb/s\n"
- "1102;SBC;Lernout & Hauspie;;http://www.microsoft.com/windows/;8 kb/s\n"
- "1103;SBC;Lernout & Hauspie;;http://www.microsoft.com/windows/;12 kb/s\n"
- "1104;SBC;Lernout & Hauspie;;http://www.microsoft.com/windows/;16 kb/s\n"
- "1400;Norris;;Norris Communications, Inc.;\n"
- "1401;ISIAudio;;;\n"
- "1500;MUSICOMPRESS;;Soundspace Music Compression;\n"
- "181C;RT24;VoxWare;;\n"
- "181E;AX24000P;Lucent elemedia;;\n"
- "1971;SonicFoundry;;Lossless\n"
- "1C03;ADPCM;Lucent;G.723\n"
- "1C07;SX8300P;Lucent\n"
- "1C0C;ADPCM;Lucent;G.723\n"
- "1F03;DigiTalk;;CUseeMe (ex-Rocwell)\n"
- "1FC4;ALF2CD;NCT Soft\n"
- "2000;AC-3;\n"
- "2001;DTS;;Digital Theater Systems\n"
- "2002;VSELP;;RealAudio 1/2 14.4\n"
- "2003;VSELP;;RealAudio 1/2 28.8\n"
- "2004;Cooker;;RealAudio G2/8 Cook (low bitrate)\n"
- "2005;DNET;;RealAudio 3/4/5 Music (DNET)\n"
- "2006;AAC;;RealAudio 10 AAC (RAAC)\n"
- "2007;AAC;;RealAudio 10 AAC+ (RACP)\n"
- "2048;Sonic;\n"
- "3313;AviSynth;;makeAVIS (fake AVI sound from AviSynth scripts)\n"
- "4143;AAC;;Divio MPEG-4 AAC audio;;\n"
- "4201;Nokia;;;;\n"
- "4243;ADPCM;;G.726;;\n"
- "43AC;Speex;;;;\n"
- "564C;Vorbis;;;;\n"
- "566F;Vorbis;;;http://www.vorbis.com;\n"
- "5756;WavPack;;;http://www.wavpack.com/;\n"
- "674F;Vorbis;;;http://www.vorbis.com;;Mode 1\n"
- "6750;Vorbis;;;http://www.vorbis.com;;Mode 2\n"
- "6751;Vorbis;;;http://www.vorbis.com;;Mode 3\n"
- "676F;Vorbis;;;http://www.vorbis.com;;Mode 1+\n"
- "6770;Vorbis;;;http://www.vorbis.com;;Mode 2+\n"
- "6771;Vorbis;;;http://www.vorbis.com;;Mode 3+\n"
- "8180;AAC\n"
- "7A21;AMR;;GSM-AMR (CBR, no SID);http://www.microsoft.com;\n"
- "7A22;AMR;;GSM-AMR (VBR, including SID);http://www.microsoft.com;\n"
- "A100;G.723.1;;;;\n"
- "A101;AVQSBC;;\n"
- "A102;ODSBC;;\n"
- "A103;G729A;;\n"
- "A104;AMR;;\n"
- "A105;ADPCM;;G.726\n"
- "A106;AAC;;\n"
- "A107;ADPCM;;G.726\n"
- "A109;Speex;;;http://www.speex.org/\n"
- "DFAC;FrameServer;;DebugMode SonicFoundry Vegas FrameServer ACM Codec\n"
- "F1AC;FLAC;;Free Lossless Audio Codec\n"
- "FFFE;Extensible;;\n"
- "FFFF;In Development;;\n"
- "58CB7144-23E9-BFAA-A119-FFFA01E4CE62;Atrac3;;\n"
- "AD98D184-AAC3-11D0-A41C-00A0C9223196;VC;;\n"
- "05589F81-C356-11CE-BF01-00AA0055595A;WaveFormatEx;;\n"
- "518590A2-A184-11D0-8522-00C04FD9BAF3;DSound;;\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Text_Matroska (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "S_ASS;ASS;;Advanced Sub Station Alpha\n"
- "S_IMAGE/BMP;Bitmap;;Basic image based subtitle format\n"
- "S_SSA;SSA;;Sub Station Alpha\n"
- "S_TEXT/ASS;ASS;;Advanced Sub Station Alpha\n"
- "S_TEXT/SSA;SSA;;Sub Station Alpha\n"
- "S_TEXT/USF;USF;;Universal Subtitle Format\n"
- "S_TEXT/UTF8;UTF-8;;UTF-8 Plain Text\n"
- "S_USF;USF;;Universal Subtitle Format\n"
- "S_UTF8;UTF-8;;UTF-8 Plain Text\n"
- "S_VOBSUB;VobSub;;The same subtitle format used on DVDs\n"
- "S_HDMV/PGS;PGS;;The same subtitle format used on BDs/HD-DVDs\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Text_Mpeg4 (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "c608;EIA-608\n"
- "c708;EIA-708\n"
- "subp;VobSub;;The same subtitle format used on DVDs\n"
- "text;Apple text;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "sbtl;Apple text;(iPhone);;http://www.apple.com/quicktime/download/standalone.html\n"
- "dfxp;TTML\n"
- "tx3g;Timed text;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "enct;(Encrypted);;\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Text_Riff (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "DXSB;DivX Subtitle;;Subtitle in AVI from DivX networks;http://www.divx.com\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_CodecID_Other_Mpeg4 (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "rtp ;RTP\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Codec (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- " BIT;RGB;4CC;V;RGB;;Uncompressed\n"
- " JPG;JPEG;4CC;V;JPEG;;\n"
- " PNG;PNG;4CC;V;RGB;;\n"
- " RAW;RGB;4CC;V;RGB;;Uncompressed;http://www.fourcc.org/indexrgb.htm\n"
- " RGB;RGB;4CC;V;RGB;;Uncompressed. Basic Windows bitmap format. 1, 4 and 8 bpp versions are palettised. 16, 24 and 32bpp contain Uncompressed RGB samples.;http://www.fourcc.org/indexrgb.htm\n"
- " RL4;RGB;4CC;V;RGB;;RLE 4bpp;http://www.fourcc.org/indexrgb.htm\n"
- " RL8;RGB;4CC;V;RGB;;RLE 8bpp;http://www.fourcc.org/indexrgb.htm\n"
- "1978;RGB;4CC;V;JPEG;;A.M.Paredes predictor;http://www.pegasusimaging.com/cgi-bin/download2.cgi?LVIDB\n"
- "2VUY;YUV;4CC;V;YUV;;Optibase VideoPump 8-bit 4:2:2 Component YCbCr\n"
- "3IV0;3ivX;4CC;V;MPEG-4V;;3ivX pre-1.0;http://www.3ivx.com/download/\n"
- "3IV1;3ivX;4CC;V;MPEG-4V;;3ivX 1.0-3.5;http://www.3ivx.com/download/\n"
- "3IV2;3ivX;4CC;V;MPEG-4V;;3ivX 4.0;http://www.3ivx.com/download/\n"
- "3IVD;3ivX;4CC;V;MPEG-4V;;;http://ffdshow-tryout.sourceforge.net/\n"
- "3IVX;3ivX;4CC;V;MPEG-4V;;;http://www.3ivx.com/download/\n"
- "3VID;3ivX;4CC;V;MPEG-4V;;;http://www.3ivx.com/download/\n"
- "8BPS;QuickTime 8bps;4CC;V;RGB;;Apple QuickTime Planar RGB with Alpha-channel;http://ffdshow-tryout.sourceforge.net/\n"
- "AAS4;Autodesk;4CC;V;RGB;;Autodesk Animator Studio RLE (warning: this is a discoutinued product);http://mirror01.iptelecom.net.ua/~video/codecs/Autodesk.Animator.v1.11.Codec.exe\n"
- "AASC;Autodesk;4CC;V;RGB;;Autodesk Animator Studio RLE (warning: this is a discoutinued product);http://mirror01.iptelecom.net.ua/~video/codecs/Autodesk.Animator.v1.11.Codec.exe\n"
- "ABYR;Kensigton low;4CC;V;;;Kensington (low resolution, low frame rate (6fps) for digital cameras)\n"
- "ACTL;ACT-L2;4CC;V;;;Streambox ACT-L2;http://www.streambox.com/products/act-L2_codec.htm\n"
- "ADV1;WaveCodec;4CC;V;Wavelet;;Loronix WaveCodec;http://www.loronix.com/products/video_clips/wavecodec.asp\n"
- "ADVJ;Avid;4CC;V;JPEG;;Avid JPEG. Aka AVRn\n"
- "AEIK;Indeo 3.2;4CC;V;;;Intel Indeo Video 3.2 (Vector Quantization)\n"
- "AEMI;VideoONE;4CC;V;MPEG-V;;Array VideoONE MPEG-1-I Capture. Array's used for I frame only MPEG-1 AVI files;http://www.array.com\n"
- "AFLC;Autodesk;4CC;V;;;Autodesk Animator Studio FLI (256 color) (warning: this is a discoutinued product);http://mirror01.iptelecom.net.ua/~video/codecs/Autodesk.Animator.v1.11.Codec.exe\n"
- "AFLI;Autodesk;4CC;V;;;Autodesk Animator Studio FLI (256 color) (warning: this is a discoutinued product);http://mirror01.iptelecom.net.ua/~video/codecs/Autodesk.Animator.v1.11.Codec.exe\n"
- "AHDV;CineForm;4CC;V;Wavelet;;CineForm 10-bit Visually Perfect HD (Wavelet);http://www.cineform.com/products/ConnectHD.htm\n"
- "AJPG;JPEG;4CC;V;JPEG;;22fps JPEG-based for digital cameras\n"
- "ALPH;Ziracom;4CC;V;;;Ziracom Digital Communications Inc.\n"
- "AMPG;VideoONE;4CC;V;MPEG-1;;Array VideoONE MPEG;http://www.array.com\n"
- "AMR ;AMR;4CC;V;;;Speech codec\n"
- "ANIM;RDX;4CC;V;;;Intel RDX\n"
- "AP41;AngelPotion;4CC;V;MPEG-4V;;AngelPotion Definitive 1 (hack of MS MPEG-4 v3);http://www.divxity.com/download/ap4v1-702.exe\n"
- "AP42;AngelPotion;4CC;V;MPEG-4V;;AngelPotion Definitive 2 (hack of MS MPEG-4 v3);http://www.divxity.com/download/ap4v1-702.exe\n"
- "ASLC;AlparySoft Lossless;4CC;V;;;AlparySoft Lossless;http://www.free-codecs.com/download/Alparysoft_Lossless_Video_Codec.htm\n"
- "ASV1;Asus 1;4CC;V;;;Asus Video 1;ftp://ftp.asuscom.de/pub/asuscom/treiber/vga/ASUS_VGA_TOOLS/asv2dec.zip\n"
- "ASV2;Asus 2;4CC;V;;;Asus Video 2;ftp://ftp.asuscom.de/pub/asuscom/treiber/vga/ASUS_VGA_TOOLS/asv2dec.zip\n"
- "ASVX;Asus X;4CC;V;;;Asus Video X;ftp://ftp.asuscom.de/pub/asuscom/treiber/vga/ASUS_VGA_TOOLS/asv2dec.zip\n"
- "ATM4;Nero MPEG-4;4CC;V;MPEG-4V;;Ahead Nero Digital MPEG-4;http://www.nero.com\n"
- "AUR2;YUV;4CC;V;YUV;;Auravision Aura 2 - YUV 422\n"
- "AURA;YUV;4CC;V;YUV;;Auravision Aura 1 - YUV 411\n"
- "AUVX;AUVX;4CC;V;;;USH GmbH\n"
- "AV1X;Avid 1:1;4CC;V;;;Avid 1:1x (Quick Time);http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVC1;AVC;4CC;V;AVC;;Advanced Video Codec;http://ffdshow-tryout.sourceforge.net/\n"
- "AVD1;Avid DV;4CC;V;DV;;Avid DV (Quick Time);http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVDJ;Avid JFIF;4CC;V;JPEG;;Avid Meridien JFIF with Alpha-channel;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVDN;Avid HD;4CC;V;;;Avid DNxHD (Quick Time);http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVDV;Avid DV;4CC;V;DV;;Avid DV;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVI1;MainConcept;4CC;V;JPEG;;MainConcept JPEG\n"
- "AVI2;MainConcept;4CC;V;JPEG;;MainConcept JPEG\n"
- "AVID;Avid JPEG;4CC;V;JPEG;;Avid JPEG;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVIS;AviSynth;4CC;V;;;Wrapper for AviSynth (Dummy);http://ffdshow-tryout.sourceforge.net/\n"
- "AVMP;Avid IMX;4CC;V;;;Avid IMX (Quick Time);http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVR ;Avid NuVista;4CC;V;JPEG;;Avid ABVB/NuVista JPEG with Alpha-channel\n"
- "AVRn;Avid JPEG;4CC;V;JPEG;;Avid JPEG;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVRN;Avid JPEG;4CC;V;JPEG;;Avid JPEG;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVUI;Avid;4CC;V;;;Avid Meridien Uncompressed with Alpha-channel;http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AVUP;Avid;4CC;V;;;Avid 10bit Packed (Quick Time);http://mirror01.iptelecom.net.ua/~video/codecs/Avid.VfW.codec.v2.0d2.exe\n"
- "AYUV;YUV;4CC;V;YUV;;4:4:4 YUV (AYUV)\n"
- "AZPR;QuickTime;4CC;V;;;Quicktime Apple Video;http://www.apple.com/quicktime/download/standalone.html\n"
- "AZRP;QuickTime;4CC;V;;;Quicktime Apple Video;http://www.apple.com/quicktime/download/standalone.html\n"
- "BGR ;RGB;4CC;V;RGB;;Uncompressed RGB32\n"
- "BHIV;BeHere iVideo;4CC;V;;;BeHere iVideo\n"
- "BINK;Bink;4CC;V;;;RAD Game Tools Bink Video\n"
- "BIT ;RGB;4CC;V;RGB;;Uncompressed. BI_BITFIELDS\n"
- "BITM;H.261;4CC;V;;;Microsoft H.261\n"
- "BLOX;Blox;4CC;V;;;Jan Jezabek BLOX MPEG;http://www.ii.uj.edu.pl/~jezabek/blox/blox-0.1.0b.zip\n"
- "BLZ0;DivX;4CC;V;MPEG-4V;;DivX for Blizzard Decoder Filter;http://ffdshow-tryout.sourceforge.net/\n"
- "BT20;MediaStream;4CC;V;;;Conexant ProSummer MediaStream\n"
- "BTCV;Composite;4CC;V;;;Conexant Composite Video\n"
- "BTVC;Composite;4CC;V;;;Conexant Composite Video\n"
- "BW00;BergWave;4CC;V;Wavelet;;BergWave (Wavelet)\n"
- "BW10;Broadway;4CC;V;MPEG-1;;Data Translation Broadway MPEG Capture/Compression\n"
- "BXBG;Boxx RGB;4CC;V;;;BOXX BGR\n"
- "BXRG;Boxx RGB;4CC;V;;;BOXX RGB\n"
- "BXY2;Boxx YUV;4CC;V;;;BOXX 10-bit YUV\n"
- "BXYV;Boxx YUV;4CC;V;;;BOXX YUV\n"
- "CC12;Intel YUV;4CC;V;YUV;;Intel YUV12\n"
- "CDV5;Canopus DV;4CC;V;DV;;Canopus SD50/DVHD;http://www.cineform.com/products/ConnectHD.htm\n"
- "CDVC;Canopus DV;4CC;V;DV;;Canopus DV (DV);http://www.cineform.com/products/ConnectHD.htm\n"
- "CDVH;Canopus DV;4CC;V;DV;;Canopus SD50/DVHD;http://www.cineform.com/products/ConnectHD.htm\n"
- "CFCC;Perception;4CC;V;;;DPS Perception JPEG (dummy format - only AVI header)\n"
- "CFHD;CineForm;4CC;V;;;CineForm 10-bit Visually Perfect HD (Wavelet)\n"
- "CGDI;Camcorder;4CC;V;;;Camcorder Video (MS Office 97)\n"
- "CHAM;Champagne;4CC;V;;;Winnov Caviara Champagne\n"
- "CJPG;Creative JPEG;4CC;V;JPEG;;Creative Video Blaster Webcam Go JPEG\n"
- "CLJR;YUV;4CC;V;YUV;;Cirrus Logic YUV 4:1:1;http://www.fourcc.org/indexyuv.htm\n"
- "CLLC;Canopus;4CC;V;;;Canopus LossLess\n"
- "CLPL;YUV;4CC;V;YUV;;Format similar to YV12 but including a level of indirection.\n"
- "CM10;MediaShow;4CC;V;;;CyberLink Corporation;http://www.cyberlink.com\n"
- "CMYK;CMYK;4CC;V;;;Common Data Format in Printing\n"
- "COL0;MS MPEG-4 v3;4CC;V;MPEG-4V;;Hacked MS MPEG-4 v3;http://ffdshow-tryout.sourceforge.net/\n"
- "COL1;MS MPEG-4 v3;4CC;V;MPEG-4V;;Hacked MS MPEG-4 v3;http://ffdshow-tryout.sourceforge.net/\n"
- "CPLA;YUV;4CC;V;YUV;;Weitek YUV 4:2:0 Planar\n"
- "CRAM;MS Video;4CC;V;;;Microsoft Video 1\n"
- "CSCD;CamStudio;4CC;V;;;RenderSoft CamStudio lossless (LZO & GZIP compression)\n"
- "CT10;TalkingShow;4CC;V;;;CyberLink Corporation;http://www.cyberlink.com\n"
- "CTRX;Citrix;4CC;V;;;Citrix Scalable Video\n"
- "CUVC;Canopus HQ;4CC;V;;;Canopus HQ\n"
- "CVID;Cinepack;4CC;V;;;Cinepak by CTi (ex. Radius) Vector Quantization;http://www.cinepak.com/text.html\n"
- "cvid;Cinepack;4CC;V;;;Cinepak by CTi (ex. Radius) Vector Quantization;http://www.apple.com/quicktime/download/standalone.html\n"
- "CWLT;WLT;4CC;V;;;Microsoft Color WLT DIB\n"
- "CYUV;YUV;4CC;V;YUV;;Creative Labs YUV 4:2:2;http://www.fourcc.org/indexyuv.htm\n"
- "CYUY;YUV;4CC;V;YUV;;ATI Technologies YUV;http://www.fourcc.org/indexyuv.htm\n"
- "D261;H.261;4CC;V;;;DEC H.261\n"
- "D263;H.263;4CC;V;;;DEC H.263\n"
- "DAVC;AVC;4CC;V;AVC;;Dicas MPEGable H.264/MPEG-4 AVC base profile\n"
- "DC25;MainConcept DV;4CC;V;DV;;MainConcept ProDV\n"
- "DCAP;Pinnacle DV25;4CC;V;DV;;Pinnacle DV25\n"
- "DCL1;Data Connextion;4CC;V;;;Data Connection Conferencing\n"
- "DCT0;WniWni;4CC;V;;;WniWni\n"
- "DFSC;VFW;4CC;V;;;DebugMode FrameServer VFW\n"
- "DIB ;RGB;4CC;V;RGB;;Device Independent Bitmap\n"
- "DIV1;FFMpeg;4CC;V;MPEG-4V;;FFmpeg-4 V1 (hacked MS MPEG-4 V1);http://ffdshow-tryout.sourceforge.net/\n"
- "DIV2;MS MPEG-4 1/2;4CC;V;MPEG-4V;;;http://ffdshow-tryout.sourceforge.net/\n"
- "DIV3;DivX 3 Low;4CC;V;MPEG-4V;;;http://www.divx.com\n"
- "DIV4;DivX 3 Fast;4CC;V;MPEG-4V;;;http://www.divx.com\n"
- "DIV5;DivX 5;4CC;V;MPEG-4V;;;http://www.divx.com\n"
- "DIV6;MS MPEG-4 v3;4CC;V;MPEG-4V;;MS MPEG-4 v3;http://ffdshow-tryout.sourceforge.net/\n"
- "DIVX;DivX 4;4CC;V;MPEG-4V;;Project Mayo DivX 4;http://www.divx.com\n"
- "divx;DivX;4CC;V;MPEG-4V;;Mainly used by Google;http://www.divx.com\n"
- "DJPG;Broadway 101;4CC;V;JPEG;;Data Translation, Inc.\n"
- "DM4V;Dicas;4CC;V;MPEG-4V;;Dicas MPEGable MPEG-4\n"
- "DMB1;Rainbow;4CC;V;JPEG;;Matrox Rainbow Runner hardware compression;http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.MJPG.v2.10.27.codec.exe\n"
- "DMB2;Paradigm JPEG;4CC;V;JPEG;;JPEG used by Paradigm\n"
- "DMK2;V36 PDA;4CC;V;;;ViewSonic V36 PDA Video\n"
- "DP02;DynaPel;4CC;V;MPEG-4V;;DynaPel MPEG-4\n"
- "DP16;YUV411;4CC;V;YUV;;Matsushita Electric Industrial Co., Ltd. (With DPCM 6-bit compression)\n"
- "DP18;YUV411;4CC;V;YUV;;Matsushita Electric Industrial Co., Ltd. (With DPCM 8-bit compression)\n"
- "DP26;YUV422;4CC;V;YUV;;Matsushita Electric Industrial Co., Ltd. (With DPCM 6-bit compression)\n"
- "DP28;YUV422;4CC;V;YUV;;Matsushita Electric Industrial Co., Ltd. (With DPCM 8-bit compression)\n"
- "DP96;YVU9;4CC;V;YUV;;Matsushita Electric Industrial Co., Ltd. (With DPCM 6-bit compression)\n"
- "DP98;YVU9;4CC;V;YUV;;Matsushita Electric Industrial Co., Ltd. (With DPCM 8-bit compression)\n"
- "DP9L;YVU9;4CC;V;YUV;;Matsushita Electric Industrial Co., Ltd. (With DPCM 6-bit compression)\n"
- "DPS0;DPS Reality;4CC;V;JPEG;;DPS Reality JPEG (dummy format - only AVI header)\n"
- "DPSC;DPS PAR;4CC;V;JPEG;;DPS PAR JPEG (dummy format - only AVI header)\n"
- "DRWX;Pinnacle DV25;4CC;V;DV;;Pinnacle DV25\n"
- "DSVD;DV;4CC;V;DV;;Microsoft DirectShow DV\n"
- "DTMT;Media-100;4CC;V;;;Media-100\n"
- "DTNT;Media-100;4CC;V;;;Media-100\n"
- "DUCK;TrueMotion S;4CC;V;;;Duck Corporation True Motion S\n"
- "DV10;BlueFish;4CC;V;;;BlueFish444 (lossless RGBA, YUV 10-bit)\n"
- "DV25;DVCPro;4CC;V;DV;;Matrox DVCPRO\n"
- "DV50;DVCPro5;4CC;V;DV;;Matrox\n"
- "DVAN;Pinnacle DV300;4CC;V;DV;;Pinnacle miroVideo DV300 SW only\n"
- "DVC ;Apple DV NTSC;4CC;V;DV;;Apple QuickTime DV (DVCPRO NTSC);http://www.apple.com/quicktime/download/standalone.html\n"
- "dvc ;Apple DV NTSC;4CC;V;DV;;Apple QuickTime DV (DVCPRO NTSC);http://www.apple.com/quicktime/download/standalone.html\n"
- "DVCP;Apple DV PAL;4CC;V;DV;;Apple QuickTime DV (DVCPRO PAL);http://www.apple.com/quicktime/download/standalone.html\n"
- "dvcp;Apple DV PAL;4CC;V;DV;;Apple QuickTime DV (DVCPRO PAL);http://www.apple.com/quicktime/download/standalone.html\n"
- "DVCS;MainConcept DV;4CC;V;DV;;MainConcept DV\n"
- "DVE2;Insoft DVE-2;4CC;V;DV;;InSoft DVE-2 Videoconferencing\n"
- "DVH1;Pinnacle DV;4CC;V;DV;;Pinnacle DVHD100\n"
- "dvhd;DV HD;4CC;V;DV;;DV 1125 lines at 30.00 Hz or 1250 lines at 25.00 Hz\n"
- "dvhd;DV HD;4CC;A;DV;;Sony DV (DV), audio part\n"
- "DVIS;DualMoon DV;4CC;V;DV;;VSYNC DualMoon Iris DV\n"
- "DVL ;Radius DV NTSC;4CC;V;DV;;Radius SoftDV 16:9 NTSC\n"
- "DVLP;Radius DV PAL;4CC;V;DV;;Radius SoftDV 16:9 PAL\n"
- "DVMA;Darim DV;4CC;V;DV;;Darim Vision DVMPEG (dummy for MPEG compressor)\n"
- "DVNM;DVNM;4CC;V;;;Matsushita Electric Industrial Co., Ltd.\n"
- "DVOR;BlueFish;4CC;V;;;BlueFish444 (lossless RGBA, YUV 10-bit)\n"
- "DVPN;Apple DV NTSC;4CC;V;DV;;Apple QuickTime DV (DV NTSC)\n"
- "DVPP;Apple DV PAL;4CC;V;DV;;Apple QuickTime DV (DV PAL)\n"
- "DVR ;MPEG-2 Video;4CC;V;MPEG-2;;MPEG-2 Video in a ASF container\n"
- "DVR1;Targa2000;4CC;V;;;TARGA2000\n"
- "DVRS;DualMoon DV;4CC;V;DV;;VSYNC DualMoon Iris DV\n"
- "DVSD;DV;4CC;V;DV;;IEC 61834 and SMPTE 314M\n"
- "dvsd;Sony DV;4CC;V;DV;;Sony DV (DV) 525 lines at 29.97 Hz or 625 lines at 25.00 Hz\n"
- "dvsd;Sony DV;4CC;A;DV;;Sony DV (DV), audio part\n"
- "dvsl;Sony DV;4CC;V;DV;;Sony DV (DV) 525 lines at 29.97 Hz or 625 lines at 25.00 Hz\n"
- "dvsl;Sony DV;4CC;A;DV;;Sony DV (DV), audio part\n"
- "DVSL;DSL DV;4CC;V;DV;;DV compressed in SD (SDL)\n"
- "DVX1;DVX 1 SP;4CC;V;;;Lucent DVX1000SP Video Decoder\n"
- "DVX2;DVX 2 S;4CC;V;;;Lucent DVX2000S Video Decoder\n"
- "DVX3;DVX 3 S;4CC;V;;;Lucent DVX3000S Video Decoder\n"
- "DX50;DivX 5;4CC;V;MPEG-4V;;;http://www.divx.com\n"
- "DXGM;EA GameVideo;4CC;V;;;Electronic Arts Game Video\n"
- "DXSB;DivX.com Subtitle;4CC;T;;;Subtitle in AVI from DivX networks;http://www.divx.com\n"
- "DXT1;DirectX TC;4CC;V;;;DirectX Compressed Texture (1bit alpha channel)\n"
- "DXT2;DirectX TC;4CC;V;;;DirectX Compressed Texture\n"
- "DXT3;DirectX TC;4CC;V;;;DirectX Compressed Texture (4bit alpha channel)\n"
- "DXT4;DirectX TC;4CC;V;;;DirectX Compressed Texture\n"
- "DXT5;DirectX TC;4CC;V;;;DirectX Compressed Texture (3bit alpha channel with interpolation)\n"
- "DXTC;DirectX TC;4CC;V;;;DirectX Texture Compression\n"
- "DXTn;DirectX TC;4CC;V;;;Microsoft Compressed Texture\n"
- "DXTN;DirectX TC;4CC;V;;;Microsoft DirectX Compressed Texture (DXTn)\n"
- "EKQ0;Elsa KQ;4CC;V;;;Elsa graphics card quick\n"
- "ELK0;Elsa LK;4CC;V;;;Elsa graphics card\n"
- "EM2V;Elymonyx MPEG-2;4CC;V;;;Etymonix MPEG-2 I-frame\n"
- "EMWC;WMA;;A;;;EverAd, Inc.\n"
- "EQK0;Elsa;4CC;V;;;Elsa graphics card quick\n"
- "ESCP;Escape;4CC;V;;;Eidos Escape\n"
- "ETV1;eTreppid 1;4CC;V;;;eTreppid Video 1\n"
- "ETV2;eTreppid 2;4CC;V;;;eTreppid Video 2\n"
- "ETVC;eTreppid C;4CC;V;;;eTreppid Video C\n"
- "FFDS;FFDS;4CC;V;;;;http://ffdshow-tryout.sourceforge.net/\n"
- "FFV1;FFV1;4CC;V;;;;http://ffdshow-tryout.sourceforge.net/\n"
- "FFVH;FFVH;4CC;V;;;;http://ffdshow-tryout.sourceforge.net/\n"
- "FLIC;FLI/FLC;4CC;V;;;Autodesk FLI/FLC Animation\n"
- "FLJP;DField JPEG;4CC;V;;;D-Vision Field Encoded JPEG with LSI (or Targa emulation)\n"
- "FLV1;H.263;;4CC;V;;;;http://ffdshow-tryout.sourceforge.net/\n"
- "FLV4;VP6;4CC;V;;;Flash, On2 Technologies;http://www.on2.com\n"
- "FMJP;D-Vision JPEG;4CC;V;;;D-Vision fieldbased ISO JPEG\n"
- "FMP4;MPEG-4 Visual;4CC;V;MPEG-4V;;;http://ffdshow-tryout.sourceforge.net/\n"
- "FPS1;FRAPS;4CC;V;;;;http://www.fraps.com/\n"
- "FRLE;SoftLab-Nsk JPEG;4CC;V;;;SoftLab-NSK Y16 + Alpha RLE\n"
- "FRWA;SoftLab-Nsk JPEG (w Alpha);4CC;V;;;SoftLab-NSK Vision Forward JPEG with Alpha-channel\n"
- "FRWD;SoftLab-Nsk JPEG;4CC;V;;;SoftLab-NSK Vision Forward JPEG\n"
- "FRWT;SoftLab-Nsk JPEG;4CC;V;;;SoftLab-NSK Vision Forward JPEG with Alpha-channel\n"
- "FRWU;SoftLab-Nsk JPEG;4CC;V;;;SoftLab-NSK Vision Forward Uncompressed\n"
- "FVF1;Itered Fractal;4CC;V;;;Iterated Systems Fractal Video Frame\n"
- "FVFW;FVFW;4CC;V;;;;http://ffdshow-tryout.sourceforge.net/\n"
- "FXT1;3DFX;4CC;V;;;3dfx Interactive, Inc.\n"
- "G2M2;GoToMeeting2;4CC;V;;;Citrix Systems, Inc.;http://www.gotomeeting.com/\n"
- "G2M3;GoToMeeting3;4CC;V;;;Citrix Systems, Inc.;http://www.gotomeeting.com/\n"
- "GEPJ;White Pine JPEG;4CC;V;;;White Pine JPEG\n"
- "GJPG;Grand Tech GT891x;4CC;V;;;Grand Tech GT891x\n"
- "GLCC;GigaLink;4CC;V;;;GigaLink AV Capture\n"
- "GLZW;Gabest;4CC;V;;;Motion LZW by Gabest;http://sourceforge.net/project/showfiles.php?group_id=82303&package_id=84358\n"
- "GPEG;Gabest;4CC;V;JPEG;;JPEG by Gabest (with floating point);http://sourceforge.net/project/showfiles.php?group_id=82303&package_id=84358\n"
- "GPJM;Pinnacle JPEG;4CC;V;JPEG;;Pinnacle ReelTime JPEG\n"
- "GREY;YUV;4CC;V;YUV;;Simple grayscale video;http://www.fourcc.org/indexyuv.htm\n"
- "GWLT;MS GWLT;4CC;V;;;Microsoft Greyscale WLT DIB\n"
- "GXVE;ViVD V2;4CC;V;;;SoftMedia\n"
- "H260;Intel H.260;4CC;V;;;Intel H.260\n"
- "H261;Intel H.261;4CC;V;;;Intel H.261\n"
- "H262;Intel H.262;4CC;V;;;Intel H.262\n"
- "H263;Intel H.263;4CC;V;;;Intel H.263\n"
- "H264;AVC;4CC;V;AVC;;Intel H.264\n"
- "h264;AVC;4CC;V;AVC;;Intel H.264\n"
- "H265;Intel H.265;4CC;V;;;Intel H.265\n"
- "H266;Intel H.266;4CC;V;;;Intel H.266\n"
- "H267;Intel H.267;4CC;V;;;Intel H.267\n"
- "H268;Intel H.268;4CC;V;;;Intel H.268\n"
- "H269;Intel H.263;4CC;V;;;Intel H.263 for POTS-based videoconferencing\n"
- "HD10;BlueFish;4CC;V;;;BlueFish444 (lossless RGBA, YUV 10-bit)\n"
- "HDX4;Jomigo;4CC;V;;;Jomigo HDX4\n"
- "HFYU;Huffman;4CC;V;;;Huffman Lossless YUV and RGB formats (with Alpha-channel)\n"
- "HMCR;Rendition;4CC;V;;;Rendition Motion Compensation Format\n"
- "HMRR;Rendition;4CC;V;;;Rendition Motion Compensation Format\n"
- "i263;Intel H.263;4CC;V;;;Intel H.263\n"
- "I420;YUV;4CC;V;;\n"
- "IAN ;Indeo 4;4CC;V;;;Intel Indeo 4\n"
- "ICLB;CellB;4CC;V;;;InSoft CellB Videoconferencing\n"
- "IDM0;Wavelets 2;4CC;V;;;IDM Motion Wavelets 2.0\n"
- "IF09;H.261;4CC;V;;;Microsoft H.261\n"
- "IFO9;YUV9;4CC;V;YUV;;Intel\n"
- "IGOR;PowerDVD;4CC;V;;;Power DVD\n"
- "IJPG;Intergraph JPEG;4CC;V;JPEG;;Intergraph\n"
- "ILVC;Layered Video;4CC;V;;;Intel Layered Video\n"
- "ILVR;H.263+;4CC;V;;;Intel H.263+\n"
- "IMAC;MotionComp;4CC;V;;;Intel hardware motion compensation.\n"
- "IMC1;YUV;4CC;V;YUV;;As YV12, except the U and V planes each have the same stride as the Y plane\n"
- "IMC2;YUV;4CC;V;YUV;;Similar to IMC1, except that the U and V lines are interleaved at half stride boundaries\n"
- "IMC3;YUV;4CC;V;YUV;;As IMC1, except that U and V are swapped\n"
- "IMC4;YUV;4CC;V;YUV;;As IMC2, except that U and V are swapped\n"
- "IMG ;YUV;4CC;V;YUV;\n"
- "IMJG;Accom JPEG;4CC;V;;;Accom SphereOUS JPEG with Alpha-channel\n"
- "IPDV;I-O DV;4CC;V;;;I-O Data Device Giga AVI DV\n"
- "IPJ2;JPEG 2000;4CC;V;;;Image Power JPEG 2000\n"
- "IR21;Indeo 2.1;4CC;V;;;Intel Indeo 2.1\n"
- "IRAW;YUV;4CC;V;YUV;;Intel YUV Uncompressed;http://www.fourcc.org/indexyuv.htm\n"
- "ISME;ISME;4CC;V;;;Intel\n"
- "IUYV;YUV;4CC;V;YUV;;Lead 16bpp. Interlaced version of UYVY (line order 0, 2, 4,....,1, 3, 5....)\n"
- "IV30;Indeo 3;4CC;V;;;Intel Indeo Video 3\n"
- "IV31;Indeo 3;4CC;V;;;Intel Indeo Video 3.1\n"
- "IV32;Indeo 3;4CC;V;;;Intel Indeo Video 3.2\n"
- "IV33;Indeo 3;4CC;V;;;Intel Indeo Video 3.3\n"
- "IV34;Indeo 3;4CC;V;;;Intel Indeo Video 3.4\n"
- "IV35;Indeo 3;4CC;V;;;Intel Indeo Video 3.5\n"
- "IV36;Indeo 3;4CC;V;;;Intel Indeo Video 3.6\n"
- "IV37;Indeo 3;4CC;V;;;Intel Indeo Video 3.7\n"
- "IV38;Indeo 3;4CC;V;;;Intel Indeo Video 3.8\n"
- "IV39;Indeo 3;4CC;V;;;Intel Indeo Video 3.9\n"
- "IV40;Indeo 4;4CC;V;;;Intel Indeo Video 4.0\n"
- "IV41;Indeo 4;4CC;V;;;Intel Indeo Video 4.1\n"
- "IV42;Indeo 4;4CC;V;;;Intel Indeo Video 4.2\n"
- "IV43;Indeo 4;4CC;V;;;Intel Indeo Video 4.3\n"
- "IV44;Indeo 4;4CC;V;;;Intel Indeo Video 4.4\n"
- "IV45;Indeo 4;4CC;V;;;Intel Indeo Video 4.5\n"
- "IV46;Indeo 4;4CC;V;;;Intel Indeo Video 4.6\n"
- "IV47;Indeo 4;4CC;V;;;Intel Indeo Video 4.7\n"
- "IV48;Indeo 4;4CC;V;;;Intel Indeo Video 4.8\n"
- "IV49;Indeo 4;4CC;V;;;Intel Indeo Video 4.9\n"
- "IV50;Indeo 4;4CC;V;;;Intel Indeo Video 5.0 Wavelet;http://www.fourcc.org/indexyuv.htm\n"
- "IY41;YUV;4CC;V;YUV;;Lead 16bpp. Interlaced version of Y41P (line order 0, 2, 4,....,1, 3, 5....);http://www.fourcc.org/indexyuv.htm\n"
- "IYU1;YUV;4CC;V;YUV;;IEEE1394 12bpp. 12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec;http://www.fourcc.org/indexyuv.htm\n"
- "IYU2;YUV;4CC;V;YUV;;IEEE1394 24bpp. 24 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec\n"
- "IYUV;YUV;4CC;V;YUV;;Intel Indeo iYUV 4:2:0\n"
- "JBYR;Kensington;4CC;V;;;Kensington Video;http://ffdshow-tryout.sourceforge.net/\n"
- "JFIF;JPEG;4CC;V;JPEG;;\n"
- "JPEG;JPEG;4CC;V;JPEG;;JPEG compressed;http://www.apple.com/quicktime/download/standalone.html\n"
- "jpeg;JPEG;4CC;V;JPEG;;JPEG compressed\n"
- "JPG;JPEG;4CC;V;JPEG;;JPEG compressed;http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.Lossless.JPEG.codec.v2.10.27.exe\n"
- "JPGL;Pegasus JPEG;4CC;V;;;DIVIO JPEG Light for WebCams (Pegasus Lossless JPEG)\n"
- "KMVC;Karl;4CC;V;;;Karl Morton's Video (presumably);http://www.apple.com/quicktime/download/standalone.html\n"
- "kpcd;Photo CD;4CC;V;;;Kodak Photo CD\n"
- "L261;H.261;4CC;V;;;Lead Technologies H.261\n"
- "L263;H.263+;4CC;V;;;Lead Technologies H.263\n"
- "LAGS;Lagarith;4CC;V;;;Lagarith LossLess\n"
- "LBYR;Creative WebCam;4CC;V;;;Creative WebCam\n"
- "LCMW;Lead CMW;4CC;V;;;Lead Technologies Motion CMW\n"
- "LCW2;Lead MCMW;4CC;V;;;LEADTools MCMW 9Motion Wavelet;http://mirror01.iptelecom.net.ua/~video/codecs/LEAD.MCMP-JPEG.v1.016.codec.exe\n"
- "LEAD;Lead Video;4CC;V;;;LEAD Video\n"
- "LGRY;Lead GrayScale;4CC;V;;;Lead Technologies Grayscale Image\n"
- "LIA1;Liafail;4CC;V;;;Liafail, Inc.\n"
- "LJ2K;Lead JPEG 2000;4CC;V;;;LEADTools JPEG 2000;http://mirror01.iptelecom.net.ua/~video/codecs/LEAD.MCMP-JPEG.v1.016.codec.exe\n"
- "LJPG;Lead JPEG;4CC;V;JPEG;;LEAD JPEG;http://mirror01.iptelecom.net.ua/~video/codecs/LEAD.MCMP-JPEG.v1.016.codec.exe\n"
- "Ljpg;Lead JPEG;4CC;V;JPEG;;LEAD JPEG\n"
- "LMP2;Lead MPEG-2;4CC;V;;;LEADTools MPEG-2\n"
- "LOCO;LOCO;4CC;V;;;LOCO Lossless\n"
- "LSCR;Lead Screen capture;4CC;V;;;LEAD Screen Capture\n"
- "LSV0;LSV0;4CC;V;;;Infinop Inc.\n"
- "LSVC;Vmail;4CC;V;;;Vianet Lighting Strike Vmail (Streaming)\n"
- "LSVM;Vmail;4CC;V;;;Vianet Lighting Strike Vmail (Streaming)\n"
- "LSVW;Infinop;4CC;V;;;Infinop Lightning Strike multiple bit rate video codec.\n"
- "LSVX;Vmail;4CC;V;;;Vianet Lightning Strike Video Codec\n"
- "LZO1;LZO;4CC;V;;;LZO compressed (lossless)\n"
- "M101;YUV;4CC;V;YUV;;Matrox\n"
- "M261;H.261;4CC;V;;;Microsoft H.261\n"
- "M263;H.263;4CC;V;;;Microsoft H.263\n"
- "M4CC;ESS Divo;4CC;V;MPEG-4V;;ESS MPEG-4 Divio\n"
- "M4S2;FFmpeg MPEG-4;4CC;V;;;Microsoft MPEG-4 (hacked MS MPEG-4)\n"
- "MC12;ATI Motion;4CC;V;;;ATI Motion Compensation Format\n"
- "MC24;MainConcept JPEG;4CC;V;JPEG;;MainConcept JPEG\n"
- "MCAM;ATI Motion;4CC;V;;;ATI Motion Compensation Format\n"
- "MCZM;RGB;4CC;V;RGB;;Theory MicroCosm Lossless 64bit RGB with Alpha-channel\n"
- "MDVD;MicroDVD;4CC;V;;;Alex MicroDVD Video (hacked MS MPEG-4)\n"
- "MDVF;Pinnacle DV;4CC;V;DV;;Pinnacle DV/DV50/DVHD100\n"
- "MHFY;YUB;4CC;V;YUV;;A.M.Paredes mhuffyYUV (LossLess);http://mirror01.iptelecom.net.ua/~video/codecs/Pinnacle.ReelTime.v2.5.software.only.codec.exe\n"
- "MJ2C;JPEG 2000;4CC;V;;;Morgan Multimedia JPEG 2000 Compression;http://mirror01.iptelecom.net.ua/~video/codecs/Pinnacle.ReelTime.v2.5.software.only.codec.exe\n"
- "MJPA;Pinacle JPEG A;4CC;V;;;Pinnacle ReelTime MJPG hardware;http://mediaxw.sourceforge.net\n"
- "MJPB;Pinacle JPEG B;4CC;V;JPEG;;JPEG\n"
- "MJPG;JPEG;4CC;V;JPEG;;JPEG including Huffman Tables\n"
- "mJPG;IBM JPEG (w Huffman);4CC;V;JPEG;;IBM JPEG including Huffman Tables\n"
- "MJPX;Pegasus JPEG;4CC;V;;;Pegasus PICVideo JPEG\n"
- "ML20;Webcam;4CC;V;;;Mimic MSN Messenger Webcam\n"
- "MMES;Matrox MPEG-2;4CC;V;MPEG-V;;Matrox MPEG-2 I-frame\n"
- "MMIF;Matrox MPEG-2;4CC;V;MPEG-V;;Matrox MPEG-2 I-frame\n"
- "MNVD;MindVid;4CC;V;;;MindBend MindVid LossLess\n"
- "MP2A;MPEG-2 Audio;4CC;A;MPEG-A;;Media Excel MPEG-2 Audio\n"
- "MP2T;MPEG-2 TS;4CC;M;MPEG-TS;;Media Excel MPEG-2 Transport Stream\n"
- "MP2V;MPEG-2 Video;4CC;V;MPEG-V;;Media Excel MPEG-2 Video;http://ffdshow-tryout.sourceforge.net/\n"
- "MP2v;MPEG-2 Video;4CC;V;MPEG-V;;MPEG-2 Video;http://ffdshow-tryout.sourceforge.net/\n"
- "MP41;S-Mpeg 4 v1;4CC;V;;;Microsoft MPEG-4 V1 (enhansed H263);http://ffdshow-tryout.sourceforge.net/\n"
- "MP42;S-Mpeg 4 v2;4CC;V;;;Microsoft MPEG-4 V2;http://www.apple.com/quicktime/download/standalone.html\n"
- "MP43;S-Mpeg 4 v3;4CC;V;;;Microsoft MPEG-4 V3\n"
- "mp4a;AAC;4CC;A;AAC;;AAC;http://ffdshow-tryout.sourceforge.net/\n"
- "MP4A;MPEG-4 Audio;4CC;A;AAC;;Media Excel MPEG-4 Audio;http://www.apple.com/quicktime/download/standalone.html\n"
- "MP4S;MS MPEG-4 v3;4CC;V;MPEG-4V;;Microsoft MPEG-4 (Windows Media 7.0)\n"
- "mp4s;MPEG-4 TS;4CC;M;MPEG-TS;;(MPEG-4) Apple MPEG-4 Transport Stream;http://ffdshow-tryout.sourceforge.net/\n"
- "MP4T;MPEG-4 TS;4CC;M;MPEG-TS;;Media Excel MPEG-4 Transport Stream;http://www.apple.com/quicktime/download/standalone.html\n"
- "MP4V;MPEG-4 Video;4CC;V;MPEG-4V;;Apple QuickTime MPEG-4 native;http://ffdshow-tryout.sourceforge.net/\n"
- "mp4v;MPEG-4 Video;4CC;V;MPEG-4V;;(MPEG-4) Apple MPEG-4 Video;http://www.apple.com/quicktime/download/standalone.html\n"
- "MPEG;MPEG;4CC;V;MPEG-V;;Chromatic MPEG 1 Video I Frame;http://ffdshow-tryout.sourceforge.net/\n"
- "mpeg;MPEG;4CC;V;MPEG-V;;MPEG-1 Video;http://ffdshow-tryout.sourceforge.net/\n"
- "MPG1;FFmpeg MPEG 1/2;4CC;V;MPEG-V;;(MPEG-1/2) FFmpeg;http://ffdshow-tryout.sourceforge.net/\n"
- "MPG2;FFmpeg MPEG 1/2;4CC;V;MPEG-V;;(MPEG-1/2) FFmpeg;http://ffdshow-tryout.sourceforge.net/\n"
- "MPG3;FFmpeg DivX 3;4CC;V;MPEG-4V;;(MPEG-4) MS MPEG-4 v3\n"
- "MPG4;MS MPEG-4 v1;4CC;V;MPEG-4V;;Microsoft MPEG-4 v1\n"
- "MPGI;Sigma MPEG;4CC;V;MPEG-V;;Sigma Design MPEG-1 I-frame\n"
- "MPNG;PNG;4CC;V;RGB;;Motion PNG\n"
- "MRCA;Mrcodec;4CC;V;;;FAST Multimedia\n"
- "MRLE;RLE;4CC;V;RGB;;Microsoft RLE\n"
- "MSS1;Windows Screen Video;4CC;V;;;Windows Screen Video\n"
- "MSS2;Windows Media;4CC;V;;;Windows Media 9\n"
- "MSUC;MSU;4CC;V;;;MSU LossLess\n"
- "MSUD;MSU;4CC;V;;;MSU LossLess\n"
- "MSV1;Microsoft Video 1;4CC;V;;;Microsoft Video 1\n"
- "MSVC;Microsoft Video 1;4CC;V;;;Microsoft Video 1\n"
- "MSZH;AVImszh;4CC;V;;;Lossless (ZIP compression)\n"
- "MTGA;TGA;4CC;V;RGB;;Motion TGA images (24, 32 bpp)\n"
- "MTX1;Matrox JPEG;4CC;V;JPEG;;Matrox JPEG\n"
- "MTX2;Matrox JPEG;4CC;V;JPEG;;Matrox JPEG\n"
- "MTX3;Matrox JPEG;4CC;V;JPEG;;Matrox JPEG\n"
- "MTX4;Matrox JPEG;4CC;V;JPEG;;Matrox JPEG\n"
- "MTX5;Matrox JPEG;4CC;V;JPEG;;Matrox JPEG\n"
- "MTX6;Matrox JPEG;4CC;V;JPEG;;Matrox JPEG\n"
- "MTX7;Matrox JPEG;4CC;V;JPEG;;Matrox JPEG\n"
- "MTX8;Matrox JPEG;4CC;V;JPEG;;Matrox JPEG\n"
- "MTX9;Matrox JPEG;4CC;V;JPEG;;Matrox JPEG\n"
- "MV10;Nokia;4CC;V;;;Nokia Mobile Phones\n"
- "MV11;Nokia;4CC;V;;;Nokia Mobile Phones\n"
- "MV12;MVI;4CC;V;;;Motion Pixels (old)\n"
- "MV99;Nokia;4CC;V;;;Nokia Mobile Phones\n"
- "MVC1;Nokia;4CC;V;;;Nokia Mobile Phones\n"
- "MVC2;Nokia;4CC;V;;;Nokia Mobile Phones\n"
- "MVC9;Nokia;4CC;V;;;Nokia Mobile Phones\n"
- "MVI1;MVI;4CC;V;;;Motion Pixels MVI\n"
- "MVI2;MVI;4CC;V;;;Motion Pixels MVI\n"
- "MWV1;Aware Motion Wavelets;4CC;V;;;Aware Motion Wavelets\n"
- "MYUV;RGB;4CC;V;RGB;;Media-100 844/X Uncompressed\n"
- "NAVI;MS MPEG-4;4CC;V;MPEG-4V;;nAVI video (hacked MS MPEG-4)\n"
- "NDIG;Ahead MPEG-4;4CC;V;MPEG-4V;;Ahead Nero Digital MPEG-4\n"
- "NHVU;Nvidia Texture;4CC;V;;;Nvidia Texture Format (GEForce 3)\n"
- "NO16;RGB;4CC;V;RGB;;Theory None16 64bit uncompressed Uncompressed\n"
- "NT00;LightWave;4CC;V;YUV;;NewTek LightWave HDTV YUV with Alpha-channel\n"
- "NTN1;NogaTech Video 1;4CC;V;;;Nogatech Video Compression 1\n"
- "NTN2;NogaTech Video 2;4CC;V;;;Nogatech Video Compression 2 (GrabBee hardware coder)\n"
- "NUV1;Nuppel;4CC;V;;;NuppelVideo\n"
- "NV12;YUV;4CC;V;YUV;;8-bit Y plane followed by an interleaved U/V plane with 2x2 subsampling\n"
- "NV21;YUV;4CC;V;YUV;;As NV12 with U and V reversed in the interleaved plane\n"
- "NVDS;Nvidia Texture;4CC;V;;;Nvidia Texture Format\n"
- "NVHS;Nvidia Texture;4CC;V;;;Nvidia Texture Format (GeForce 3)\n"
- "NVHU;Nvidia Texture;4CC;V;;;Nvidia Texture Format\n"
- "NVS0;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVS1;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVS2;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVS3;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVS4;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVS5;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVS6;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVS7;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVS8;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVS9;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT0;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT1;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT2;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT3;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT4;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT5;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT6;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT7;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT8;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NVT9;Nvidia Texture;4CC;V;;;Nvidia Texture Compression Format\n"
- "NY12;YUV;4CC;V;YUV;;Nogatech Ltd.\n"
- "NYUV;YUV;4CC;V;YUV;;Nogatech Ltd.\n"
- "ONYX;VP7;4CC;V;;;On2 VP7;http://www.on2.com/vp7.php3\n"
- "PCLE;Studio400;4CC;V;;;Pinnacle Systems, Inc.\n"
- "PDVC;Panasonic DV;4CC;V;DV;;Panasonic DV\n"
- "PGVV;Radius Video Vision;4CC;V;;;Radius Video Vision Telecast (adaptive JPEG)\n"
- "PHMO;Photomotion;4CC;V;;;IBM Photomotion\n"
- "PIM1;Pegasus JPEG;4CC;V;JPEG;;Pinnacle DC1000 hardware (MPEG compression);http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.Lossless.JPEG.codec.v2.10.27.exe\n"
- "PIM2;Pegasus JPEG;4CC;V;JPEG;;Pegasus Imaging;http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.Lossless.JPEG.codec.v2.10.27.exe\n"
- "PIMJ;Pegasus JPEG;4CC;V;JPEG;;Pegasus Imaging PICvideo Lossless JPEG;http://mirror01.iptelecom.net.ua/~video/codecs/PICVideo.Lossless.JPEG.codec.v2.10.27.exe\n"
- "PIXL;Miro JPEG;4CC;V;JPEG;;MiroVideo XL (JPEG)\n"
- "PNG;PNG;4CC;V;RGB;;\n"
- "PNG1;PNG;4CC;V;RGB;;Corecodec.org CorePNG\n"
- "PVEZ;PowerEZ;4CC;V;;;Horizons Technology PowerEZ\n"
- "PVMM;Pegasus MPEG-4;4CC;V;MPEG-4V;;PacketVideo Corporation MPEG-4\n"
- "PVW2;Pegasus Wavelet;4CC;V;;;Pegasus Imaging Wavelet 2000\n"
- "PVWV;Pegasus Wavelet;4CC;V;;;Pegasus Imaging Wavelet 2000\n"
- "PXLT;Pixlet;4CC;V;;;Apple Pixlet (Wavelet)\n"
- "Q1.0;QPEG 1.0;4CC;V;;;Q-Team QPEG 1.0;http://www.q-team.de\n"
- "Q1.1;QPEG 1.1;4CC;V;;;Q-Team QPEG 1.1;http://www.q-team.de\n"
- "Qclp;QCLP;4CC;A;;;\n"
- "QDGX;Apple GX;4CC;V;;;Apple QuickDUncompressed GX\n"
- "QDM1;QDesign 1;4CC;A;;;QDesign Music 1\n"
- "QDM2;Qdesign 2;4CC;A;;;QDesign Music 2\n"
- "QDRW;Palettized Video;4CC;V;;;Apple\n"
- "QPEG;QPEG 1.1;4CC;V;;;Q-Team QPEG 1.1\n"
- "QPEQ;QPEG 1.1;4CC;V;;;Q-Team QPEG 1.1\n"
- "R210;YUV;4CC;V;YUV;;BlackMagic YUV (Quick Time)\n"
- "R411;Radius DV;4CC;V;DV;;Radius DV NTSC YUV\n"
- "R420;Radius DV;4CC;V;DV;;Radius DV PAL YUV\n"
- "RAV_;GroupTron;4CC;V;MPEG-1;;GroupTRON ReferenceAVI (dummy for MPEG compressor)\n"
- "RAVI;GroupTron;4CC;V;MPEG-1;;GroupTRON ReferenceAVI (dummy for MPEG compressor)\n"
- "RAW ;RGB;4CC;V;RGB;;Full Frames (Uncompressed)\n"
- "raw ;RGB;4CC;V;RGB;;Full Frames (Uncompressed);http://www.apple.com/quicktime/download/standalone.html\n"
- "RGB ;RGB;4CC;V;RGB;;Uncompressed RGB32\n"
- "RGB1;RGB;4CC;V;RGB;;Uncompressed RGB332 3:3:2\n"
- "RGBA;RGB;4CC;V;RGB;;Uncompressed w/ Alpha. Uncompressed RGB with alpha. Sample precision and packing is arbitrary and determined using bit masks for each component, as for BI_BITFIELDS.;http://www.fourcc.org/indexrgb.htm\n"
- "RGBO;RGB;4CC;V;RGB;;Uncompressed RGB555 5:5:5\n"
- "RGBP;RGB;4CC;V;RGB;;Uncompressed RGB565 5:6:5\n"
- "RGBQ;RGB;4CC;V;RGB;;Uncompressed RGB555X 5:5:5 BE\n"
- "RGBR;RGB;4CC;V;RGB;;Uncompressed RGB565X 5:6:5 BE\n"
- "RGBT;RGB;4CC;V;RGB;;Uncompressed RGB with transparency;http://www.fourcc.org/indexrgb.htm\n"
- "RIVA;Swizzled texture;4CC;V;;;Nvidia\n"
- "RL4;RLE;4CC;V;RGB;;RLE 4bpp RGB\n"
- "RL8;RLE;4CC;V;RGB;;RLE 8bpp RGB\n"
- "RLE ;RLE;4CC;V;RGB;;RLE RGB with arbitrary sample packing within a pixel;http://www.fourcc.org/indexrgb.htm\n"
- "rle ;Animation;4CC;V;RGB;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "RLE4;RLE;4CC;V;RGB;;RLE 4bpp RGB;http://www.fourcc.org/indexrgb.htm\n"
- "RLE8;RLE;4CC;V;RGB;;RLE 8bpp RGB;http://www.fourcc.org/indexrgb.htm\n"
- "RLND;Roland;4CC;V;;;Roland Corporation\n"
- "RMP4;RealMagic MPEG-4;4CC;V;MPEG-4V;;REALmagic MPEG-4 Video (Sigma Design, built on XviD)\n"
- "ROQV;Id RoQ;4CC;V;;;Id RoQ File Video Decoder\n"
- "rpza;Road Pizza;4CC;V;;;Apple Video 16 bit road pizza;http://www.apple.com/quicktime/download/standalone.html\n"
- "RT21;Intel Video 2.1;4CC;V;;;Intel Real Time Video 2.1\n"
- "RTV0;NewTek VideoToaster;4CC;V;;;NewTek VideoToaster (dummy format - only AVI header)\n"
- "RUD0;Rududu;4CC;V;;;Rududu video\n"
- "RV10;RealVideo 1;4CC;V;;;H263, RealVideo 5;http://www.real.com\n"
- "rv10;RealVideo 1;Real;V;;;H263, RealVideo 5;http://www.real.com\n"
- "RV13;RealVideo 1;4CC;V;;;H263, RealVideo 5;http://www.real.com\n"
- "rv20;RealVideo 2;Real;V;;;H263, RealVideo 6;http://www.real.com\n"
- "RV20;RealVideo 2;4CC;V;;;H263, RealVideo 6;http://www.real.com\n"
- "rv30;RealVideo 3;Real;V;;;Between H263 and H264, RealVideo 8;http://www.real.com\n"
- "RV30;RealVideo 3;4CC;V;;;Between H263 and H264, RealVideo 8;http://www.real.com\n"
- "rv40;RealVideo 4;Real;V;;;H264, RealVideo 9;http://www.real.com\n"
- "RV40;RealVideo 4;4CC;V;;;H264, RealVideo 9;http://www.real.com\n"
- "RVX ;RDX;4CC;V;;;Intel RDX\n"
- "S263;S263;4CC;V;;;;http://ffdshow-tryout.sourceforge.net/\n"
- "S422;VideoCap C210;4CC;V;YUV;;VideoCap C210\n"
- "s422;VideoCap C210;4CC;V;YUV;;VideoCap C210\n"
- "SAMR;AMR;4CC;A;;;\n"
- "SAN3;SAN3;4CC;V;MPEG-4V;;Direct copy of DivX 3.11\n"
- "SANM;Smush v2;4CC;V;;;LucasArts;http://www.lucasarts.com/\n"
- "SCCD;SoftCam;4CC;V;;;\n"
- "SDCC;Sun DV;4CC;V;DV;;Sun Digital Camera\n"
- "SEDG;Samsung MPEG-4;4CC;V;MPEG-4V;;Samsung MPEG-4\n"
- "SEG4;Cinepak;4CC;V;;;;http://www.sega.com/\n"
- "SEGA;Cinepak;4CC;V;;;;http://www.sega.com/\n"
- "SFMC;CrystalNet;4CC;V;;;CrystalNet Surface Fitting Method\n"
- "SHR0;BitJazz SheerVideo;4CC;V;;;BitJazz SheerVideo (realtime lossless)\n"
- "SHR1;BitJazz SheerVideo;4CC;V;;;BitJazz SheerVideo (realtime lossless)\n"
- "SHR2;BitJazz SheerVideo;4CC;V;;;BitJazz SheerVideo (realtime lossless)\n"
- "SHR3;BitJazz SheerVideo;4CC;V;;;BitJazz SheerVideo (realtime lossless)\n"
- "SHR4;BitJazz SheerVideo;4CC;V;;;BitJazz SheerVideo (realtime lossless)\n"
- "SHR5;BitJazz SheerVideo;4CC;V;;;BitJazz SheerVideo (realtime lossless)\n"
- "SHR6;BitJazz SheerVideo;4CC;V;;;BitJazz SheerVideo (realtime lossless)\n"
- "SHR7;BitJazz SheerVideo;4CC;V;;;BitJazz SheerVideo (realtime lossless)\n"
- "SJPG;CuSeeMe;4CC;V;JPEG;;CuSeeMe;http://mirror01.iptelecom.net.ua/~video/codecs/CUseeMe.JPEG.CODEC.v1.17.exe\n"
- "SL25;SoftLab DVCPro;4CC;V;;;SoftLab-NSK DVCPRO\n"
- "SL50;SoftLab DVCPro5;4CC;V;;;SoftLab-NSK \n"
- "SLDV;SoftLab DV;4CC;V;;;SoftLab-NSK Forward DV Draw\n"
- "SLIF;SoftLab MPEG-2;4CC;V;MPEG-V;;SoftLab-NSK MPEG-2 I-frames\n"
- "SLMJ;SoftLab JPEG;4CC;V;JPEG;;SoftLab-NSK Forward JPEG\n"
- "smc ;SMC;4CC;V;;;Apple Graphics (SMC);http://www.apple.com/quicktime/download/standalone.html\n"
- "SMSC;Radius;4CC;V;;;\n"
- "SMSD;Radius;4CC;V;;;\n"
- "SMSV;Wavelet Video;4CC;V;;;WorldConnect Wavelet Streaming Video\n"
- "smsv;Wavelet Video;4CC;V;;;WorldConnect Wavelet Video\n"
- "SNOW;Snow;4CC;V;;;;http://ffdshow-tryout.sourceforge.net/\n"
- "SP40;SunPlus YUV;4CC;V;YUV;;SunPlus YUV\n"
- "SP44;MegaCam;4CC;V;;;SunPlus Aiptek MegaCam\n"
- "SP53;MegaCam;4CC;V;;;SunPlus Aiptek MegaCam\n"
- "SP54;MegaCam;4CC;V;;;SunPlus Aiptek MegaCam\n"
- "SP55;MegaCam;4CC;V;;;SunPlus Aiptek MegaCam\n"
- "SP56;MegaCam;4CC;V;;;SunPlus Aiptek MegaCam\n"
- "SP57;MegaCam;4CC;V;;;SunPlus Aiptek MegaCam\n"
- "SP58;MegaCam;4CC;V;;;SunPlus Aiptek MegaCam\n"
- "SP61;MegaCam;4CC;V;;;SunPlus Aiptek MegaCam\n"
- "SPIG;Spigot;4CC;V;;;Radius Spigot\n"
- "SPLC;ACM audio;4CC;V;;;Splash Studios ACM Audio\n"
- "SPRK;Spark;4CC;V;;\n"
- "SQZ2;VXTreme 2;4CC;V;;;Microsoft VXTreme Video V2\n"
- "STVA;ST Imager;4CC;V;;;ST Microelectronics CMOS Imager Data (Bayer)\n"
- "STVB;ST Imager;4CC;V;;;ST Microelectronics CMOS Imager Data (Nudged Bayer)\n"
- "STVC;ST Imager;4CC;V;;;ST Microelectronics CMOS Imager Data (Bunched)\n"
- "STVX;ST Imager;4CC;V;;;ST Microelectronics CMOS Imager Data (Extended Data Format)\n"
- "STVY;ST Imager;4CC;V;;;ST Microelectronics CMOS Imager Data (Extended Data Format with Correction Data)\n"
- "subp;VobSub;4CC;T;;;The same subtitle format used on DVDs\n"
- "SV10;Sorenson;4CC;V;;;Sorenson Media Video R1\n"
- "SVQ1;Sorenson 1;4CC;V;;;Sorenson Media Video 1 (Apple QuickTime 3)\n"
- "SVQ2;Sorenson 2;4CC;V;;;Sorenson Media Video 2 (Apple QuickTime 4)\n"
- "SVQ3;Sorenson 3;4CC;V;;;Sorenson Media Video 3 (Apple QuickTime 5)\n"
- "SWC1;MainConcept JPEG;4CC;V;JPEG;;MainConcept JPEG\n"
- "T420;Toshiba YUV;4CC;V;YUV;;Toshiba YUV 4:2:0\n"
- "TGA ;Apple TGA;4CC;V;;;Apple TGA (with Alpha-channel)\n"
- "THEO;Theora;4CC;V;;;FFVFW Supported\n"
- "TIFF;Apple TIFF;4CC;V;;;Apple TIFF (with Alpha-channel)\n"
- "TIM2;Pinnacle DVI;4CC;V;;;Pinnacle RAL DVI\n"
- "TLMS;TeraLogic;4CC;V;;;TeraLogic Motion Intraframe\n"
- "TLST;TeraLogic;4CC;V;;;TeraLogic Motion Intraframe\n"
- "TM10;Duck;4CC;V;;;Duck TrueMotion\n"
- "TM20;Duck 2;4CC;V;;;Duck TrueMotion 2.0\n"
- "TM2A;Duck Archiver 2;4CC;V;;;Duck TrueMotion Archiver 2.0\n"
- "TM2X;Duck 2;4CC;V;;;Duck TrueMotion 2X\n"
- "TMIC;TeraLogic;4CC;V;;;TeraLogic Motion Intraframe\n"
- "TMOT;Horizons TM S;4CC;V;;;Horizons Technology TrueMotion Video\n"
- "TR20;Duck TM RT2;4CC;V;;;Duck TrueMotion RT 2.0\n"
- "TRLE;Akula;4CC;V;;;Akula Alpha Pro Custom AVI (LossLess)\n"
- "TSCC;TechSmith;4CC;V;;;TechSmith Screen Capture\n"
- "TV10;Tecomac;4CC;V;;;Tecomac Low-Bit Rate\n"
- "TVJP;Pinnacle/Truevision;4CC;V;;;TrueVision Field Encoded JPEG (Targa emulation)\n"
- "TVMJ;Pinnacle/Truevision;4CC;V;;;Truevision TARGA JPEG Hardware (or Targa emulation)\n"
- "TY0N;Trident;4CC;V;;;Trident Decompression Driver\n"
- "TY2C;Trident;4CC;V;;;Trident Decompression Driver\n"
- "TY2N;Trident;4CC;V;;;Trident Decompression Driver\n"
- "U<Y ;Discreet YUV;4CC;V;YUV;;Discreet UC YUV 4:2:2:4 10 bit\n"
- "U<YA;Discreet YUV;4CC;V;;;Discreet UC YUV 4:2:2:4 10 bit (with Alpha-channel)\n"
- "U263;UB H.263;4CC;V;;;UB Video H.263/H.263+/H.263++ Decoder;http://eMajix.com\n"
- "UCOD;ClearVideo;4CC;V;;;ClearVideo (fractal compression-based)\n"
- "ULH0;YUV;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;YUV;4:2:0\n"
- "ULH2;YUV;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;YUV;4:2:2\n"
- "ULRA;RGBA;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;RGBA;4:4:4:4\n"
- "ULRG;RGB;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;RGB;4:4:4\n"
- "ULTI;Ultimotion;4CC;V;;;IBM Ultimotion\n"
- "ULY0;YUV;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;YUV;4:2:2\n"
- "ULY2;YUV;Ut Video;Ut Video Lossless Codec;http://umezawa.dyndns.info/archive/utvideo;;;YUV;4:2:0\n"
- "UMP4;UB MPEG-4;4CC;V;MPEG-4V;;UB Video MPEG 4;http://www.fourcc.org/indexyuv.htm\n"
- "UYNV;YUV;4CC;V;YUV;;Nvidia 16bpp. A direct copy of UYVY registered by Nvidia to work around problems in some olds which did not like hardware which offered more than 2 UYVY surfaces.;http://www.fourcc.org/indexyuv.htm\n"
- "UYVP;YUV;4CC;V;YUV;;Evans & Sutherland 24bpp. YCbCr 4:2:2 extended precision 10-bits per component in U0Y0V0Y1 order\n"
- "UYVU;SoftLab YUV;4CC;V;YUV;;SoftLab-NSK Forward YUV;http://www.fourcc.org/indexyuv.htm\n"
- "UYVY;YUV;4CC;V;YUV;;Uncompressed 16bpp. YUV 4:2:2 (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). A macropixel contains 2 pixels in 1 u_int32.\n"
- "V210;Optibase;4CC;V;;;Optibase VideoPump 10-bit 4:2:2 Component YCbCr\n"
- "V261;VX3000S;4CC;V;;;Lucent VX3000S\n"
- "V422;Vitec YUV;4CC;V;YUV;;Vitec Multimedia YUV 4:2:2 as for UYVY, but with different component ordering within the u_int32 macropixel\n"
- "V655;Vitec YUV;4CC;V;YUV;;Vitec Multimedia 16 bit YUV 4:2:2 (6:5:5) format\n"
- "VBLE;MarcFD VBLE;4CC;V;;;MarcFD VBLE Lossless\n"
- "VCR1;ATI Video 1;4CC;V;;;ATI VCR 1.0\n"
- "VCR2;ATI Video 2;4CC;V;;;ATI VCR 2.0 (MPEG YV12)\n"
- "VCR3;ATI Video 3;4CC;V;;;ATI VCR 3.0\n"
- "VCR4;ATI Video 4;4CC;V;;;ATI VCR 4.0\n"
- "VCR5;ATI Video 5;4CC;V;;;ATI VCR 5.0\n"
- "VCR6;ATI Video 6;4CC;V;;;ATI VCR 6.0\n"
- "VCR7;ATI Video 7;4CC;V;;;ATI VCR 7.0\n"
- "VCR8;ATI Video 8;4CC;V;;;ATI VCR 8.0\n"
- "VCR9;ATI Video 9;4CC;V;;;ATI VCR 9.0\n"
- "VCWV;Wavelet;4CC;V;;;VideoCon\n"
- "VDCT;VideoMaker RGB;4CC;V;RGB;;Video Maker Pro DIB\n"
- "VDOM;VDOWave;4CC;V;;;VDONet Wave\n"
- "VDOW;VDOLive;4CC;V;;;VDONet Live (H,263)\n"
- "VDST;VirtualDub;4CC;V;;;VirtualDub remote frameclient ICM driver\n"
- "VDTZ;YUV;4CC;V;YUV;;VideoTizer / Darim Vision YUV\n"
- "VGPX;VGP;4CC;V;;;Alaris VideoGramPixel\n"
- "VIDM;DivX 5 pro;4CC;V;MPEG-4V;;DivX 5.0 Pro Supported\n"
- "VIDS;Vitec;4CC;V;;;Vitec Multimedia YUV 4:2:2;www.yks.ne.jp/~hori/\n"
- "VIFP;VFAPI;4CC;V;;;Virtual Frame API (VFAPI dummy format)\n"
- "VIV1;H.263;4CC;V;;;Vivo H.263\n"
- "VIV2;H.263;4CC;V;;;Vivo H.263\n"
- "VIVO;H.263;4CC;V;;;Vivo H.263\n"
- "VIXL;Miro XL;4CC;V;JPEG;;Miro Video XL;http://mirror01.iptelecom.net.ua/~video/codecs/miroVIDEO-XL.codec.v2.2.exe\n"
- "VJPG;JPEG;4CC;V;JPEG;;\n"
- "VLV1;Videologic;4CC;V;;;\n"
- "VMNC;Vmware;4CC;V;;;;http://www.vmware.com/\n"
- "VP30;VP3;4CC;V;;;On2 VP3\n"
- "VP31;VP3;4CC;V;;;On2 VP3\n"
- "VP32;VP3;4CC;V;;;On2 VP3\n"
- "VP40;VP4;4CC;V;;;On2 TrueCast VP4\n"
- "VP50;VP5;4CC;V;;;On2 TrueCast VP5\n"
- "VP60;VP6;4CC;V;;;On2 TrueCast VP6\n"
- "VP61;VP6;4CC;V;;;On2 TrueCast VP6.1\n"
- "VP62;VP6;4CC;V;;;On2 TrueCast VP6.2;http://ftp.pub.cri74.org/pub/win9x/video/codecs/VP6/vp6_vfw_codec.exe\n"
- "VP6A;VP6;4CC;V;;;On2 TrueCast VP6.2;http://ftp.pub.cri74.org/pub/win9x/video/codecs/VP6/vp6_vfw_codec.exe\n"
- "VP6F;VP6;4CC;V;;;On2 TrueCast VP6.2;http://ftp.pub.cri74.org/pub/win9x/video/codecs/VP6/vp6_vfw_codec.exe\n"
- "VP70;VP7;4CC;V;;;On2 TrueMotion VP7\n"
- "VP71;VP7;4CC;V;;;On2 TrueMotion VP7\n"
- "VP72;VP7;4CC;V;;;On2 TrueMotion VP7\n"
- "VQC1;Vector 1;4CC;V;;;Vector-quantised 1 (high compression) http://eprints.ecs.soton.ac.uk/archive/00001310/01/VTC97-js.pdf\n"
- "VQC2;Vector 2;4CC;V;;;Vector-quantised 2 (high robustness against channel errors) http://eprints.ecs.soton.ac.uk/archive/00001310/01/VTC97-js.pdf\n"
- "VQJP;VQ630;4CC;V;;;Dual-mode digital camera\n"
- "VQS4;VQ110;4CC;V;;;DV camera\n"
- "VR21;BlckMagic YUV;4CC;V;YUV;;BlackMagic YUV (Quick Time)\n"
- "VSSH;AVC;4CC;V;AVC;;Vanguard VSS H.264\n"
- "VSSV;Vanguard Video;4CC;V;;;Vanguard Software Solutions Video\n"
- "VSSW;AVC;4CC;V;AVC;;Vanguard VSS H.264\n"
- "VTLP;GGP;4CC;V;;;Alaris VideoGramPixel\n"
- "VX1K;DVX 1 S;4CC;V;;;Lucent VX1000S Video\n"
- "VX2K;DVX 2 S;4CC;V;;;Lucent VX2000S Video\n"
- "VXSP;DVX 1 SP;4CC;V;;;Lucent VX1000SP Video\n"
- "VYU9;YUV;4CC;V;YUV;;ATI YUV\n"
- "VYUY;YUV;4CC;V;YUV;;ATI Packed YUV Data\n"
- "WBVC;W9960;4CC;V;;;Winbond Electronics W9960\n"
- "WHAM;Microsoft Video 1;4CC;V;;;\n"
- "WINX;Winnov;4CC;V;;;\n"
- "WJPG;Winbond JPEG;4CC;V;JPEG;;Winbond JPEG (AverMedia USB devices)\n"
- "WMV1;WMV1;4CC;V;;;Windows Media Video 7;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx\n"
- "WMV2;WMV2;4CC;V;;;Windows Media Video 8;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx\n"
- "WMV3;WMV3;4CC;V;VC-1;;Windows Media Video 9;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx\n"
- "WMVA;WMV;4CC;V;VC-1;;Windows Media Video;http://ffdshow-tryout.sourceforge.net/\n"
- "WMVP;WMV3;4CC;V;;;Windows Media Video V9\n"
- "WNIX;WniWni;4CC;V;;;WniWni\n"
- "WNV1;WinNov;4CC;V;;;WinNov Videum Hardware Compression;http://www.winnov.com/\n"
- "WNVA;WinNov;4CC;V;;;WinNov Videum Hardware Compression;http://www.winnov.com/\n"
- "WRLE;Apple BMP;4CC;V;RGB;;Apple QuickTime BMP\n"
- "WRPR;AVideoTools;4CC;V;;;VideoTools VideoServer Client (wrapper for AviSynth)\n"
- "WV1F;WV1F;4CC;V;;;;http://ffdshow-tryout.sourceforge.net/\n"
- "WVC1;VC-1;4CC;V;VC-1;;Microsoft\n"
- "WVLT;IllusionHope Wavelet 9/7;4CC;V;;;IllusionHope Wavelet 9/7\n"
- "WVP2;WVP2;4CC;V;;;;http://ffdshow-tryout.sourceforge.net/\n"
- "WZCD;iScan;4CC;V;;;CORE Co. Ltd.\n"
- "WZDC;iSnap;4CC;V;;;CORE Co. Ltd.\n"
- "X263;H.263;4CC;V;;;Xirlink H.263\n"
- "x263;Xirlink;4CC;V;;;\n"
- "X264;AVC;4CC;V;AVC;;XiWave GNU GPL x264 MPEG-4\n"
- "x264;AVC;4CC;V;AVC;;XiWave GNU GPL x264 MPEG-4\n"
- "XJPG;Xirlink;4CC;V;JPEG;;Xirlink, Inc.\n"
- "XLV0;NetXL Video;4CC;V;;;NetXL Inc. XL Video Decoder\n"
- "XMPG;Xing MPEG;4CC;V;MPEG-V;;XING MPEG (I frame only)\n"
- "XVID;XviD;4CC;V;MPEG-4V;;XviD project;http://www.xvid.org/Downloads.15.0.html\n"
- "XVIX;XviD;4CC;V;MPEG-4V;;Based on XviD MPEG-4;http://www.xvid.org/Downloads.15.0.html\n"
- "XWV0;XiWave Video;4CC;V;;;XiWave Video\n"
- "XWV1;XiWave Video;4CC;V;;;XiWave Video\n"
- "XWV2;XiWave Video;4CC;V;;;XiWave Video\n"
- "XWV3;XiWave Video;4CC;V;;;XiWave Video (Xi-3 Video)\n"
- "XWV4;XiWave Video;4CC;V;;;XiWave Video\n"
- "XWV5;XiWave Video;4CC;V;;;XiWave Video\n"
- "XWV6;XiWave Video;4CC;V;;;XiWave Video\n"
- "XWV7;XiWave Video;4CC;V;;;XiWave Video\n"
- "XWV8;XiWave Video;4CC;V;;;XiWave Video\n"
- "XWV9;XiWave Video;4CC;V;;;XiWave Video\n"
- "XXAN;Origin VideoGame;4CC;V;;;Origin Video (used in Wing Commander 3 and 4)\n"
- "XYZP;PAL;4CC;V;;;Extended PAL format XYZ palette\n"
- "Y211;YUV;4CC;V;YUV;;Packed YUV format with Y sampled at every second pixel across each line and U and V sampled at every fourth pixel\n"
- "Y216;Targa YUV;4CC;V;YUV;;Pinnacle TARGA CineWave YUV (Quick Time)\n"
- "Y411;YUV;4CC;V;YUV;;YUV 4:1:1 Packed\n"
- "Y41B;YUV;4CC;V;YUV;;YUV 4:1:1 Planar\n"
- "Y41P;YUV;4CC;V;YUV;;Conexant (ex Brooktree) YUV 4:1:1 Raw;http://www.fourcc.org/indexyuv.htm\n"
- "Y41T;YUV;4CC;V;YUV;;Format as for Y41P, but the lsb of each Y component is used to signal pixel transparency\n"
- "Y422;YUV;4CC;V;YUV;;Direct copy of UYVY as used by ADS Technologies Pyro WebCam firewire camera\n"
- "Y42B;YUV;4CC;V;YUV;;YUV 4:2:2 Planar\n"
- "Y42T;YUV;4CC;V;YUV;;Format as for UYVY, but the lsb of each Y component is used to signal pixel transparency\n"
- "Y444;YUV;4CC;V;YUV;;IYU2 (iRez Stealth Fire camera)\n"
- "Y8 ;GrayScale;4CC;V;;;Simple grayscale video\n"
- "Y800;GrayScale;4CC;V;;;Simple grayscale video\n"
- "YC12;YUV;4CC;V;YUV;;Intel YUV12;http://www.fourcc.org/indexyuv.htm\n"
- "YCCK;YUV;4CC;V;YUV;;\n"
- "YMPG;MPEG-2;4CC;V;MPEG-2;;YMPEG Alpha (dummy for MPEG-2 compressor)\n"
- "YU12;YUV;4CC;V;YUV;;ATI YV12 4:2:0 Planar\n"
- "YU92;YUV;4CC;V;YUV;;Intel - YUV\n"
- "YUNV;YUV;4CC;V;YUV;;A direct copy of YUY2 registered by Nvidia to work around problems in some olds which did not like hardware that offered more than 2 YUY2 surfaces\n"
- "YUV2;YUV;4CC;V;YUV;;Apple Component Video (YUV 4:2:2);http://www.apple.com/quicktime/download/standalone.html\n"
- "YUV8;YUV;4CC;V;YUV;;Winnov Caviar YUV8 ;http://www.fourcc.org/indexyuv.htm\n"
- "YUV9;YUV;4CC;V;YUV;;Intel YUV9\n"
- "YUVP;YUV;4CC;V;YUV;;YCbCr 4:2:2 extended precision 10-bits per component in Y0U0Y1V0 order\n"
- "YUY2;YUV;4CC;V;YUV;;YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel;http://www.fourcc.org/indexyuv.htm\n"
- "YUYP;YUV;4CC;V;YUV;;Evans & Sutherland\n"
- "YUYV;YUV;4CC;V;YUV;;Canopus YUV format;http://www.fourcc.org/indexyuv.htm\n"
- "YV12;YUV;4CC;V;YUV;;ATI YVU12 4:2:0 Planar;http://www.fourcc.org/indexyuv.htm\n"
- "YV16;YUV;4CC;V;YUV;;Elecard YUV 4:2:2 Planar\n"
- "YV92;YUV;4CC;V;YUV;;Intel Smart Video Recorder YVU9\n"
- "YVU9;YUV;4CC;V;YUV;;Brooktree YVU9 Raw (YVU9 Planar);http://www.fourcc.org/indexyuv.htm\n"
- "YVYU;YUV;4CC;V;YUV;;YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel\n"
- "ZLIB;AVIzlib;4CC;V;RGB;;Lossless (ZIP compression)\n"
- "ZMBV;Zip;4CC;V;;;Zip Motion Blocks Video\n"
- "ZPEG;Video Zipper;4CC;V;RGB;;Metheus Video Zipper\n"
- "ZYGO;ZyGo;4CC;V;;;ZyGo Video\n"
- "V_UNCOMPRESSED;Raw;Mk;V;;;Raw uncompressed video frames\n"
- "V_DIRAC;Dirac;Mk;V;;;;http://diracvideo.org/\n"
- "V_MPEG4/ISO/SP;MPEG-4 Visual SP;Mk;V;MPEG-4V;;Simple Profile;http://www.divx.com\n"
- "V_MPEG4/ISO/ASP;MPEG-4 Visual ASP;Mk;V;MPEG-4V;;Advanced Simple Profile;http://www.xvid.org/Downloads.15.0.html\n"
- "V_MPEG4/ISO/AP;MPEG-4 Visual AP;Mk;V;MPEG-4V;;Advanced Profile;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG4/ISO/AVC;AVC;Mk;V;AVC;;Advanced Video Codec;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG4/MS/V2;MS MPEG-4 v2;Mk;V;MPEG-4V;;MS MPEG-4 v2;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG4/MS/V3;MS MPEG-4 v3;Mk;V;MPEG-4V;;MS MPEG-4 v3;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG1;MPEG-1 Video;Mk;V;MPEG-V;;MPEG 1 or 2 Video;http://ffdshow-tryout.sourceforge.net/\n"
- "V_MPEG2;MPEG-2 Video;Mk;V;MPEG-V;;MPEG 1 or 2 Video;http://ffdshow-tryout.sourceforge.net/\n"
- "V_REAL/RV10;Real 1;Mk;V;;;RealVideo 1.0 aka RealVideo 5;http://www.real.com\n"
- "V_REAL/RV20;Real 2;Mk;V;;;RealVideo 2.0 aka G2 and RealVideo G2+SVT;http://www.real.com\n"
- "V_REAL/RV30;Real 3;Mk;V;;;RealVideo 3.0 aka RealVideo 8;http://www.real.com\n"
- "V_REAL/RV40;Real 4;Mk;V;;;RealVideo 4.0 aka RealVideo 9;http://www.real.com\n"
- "V_THEORA;Theora;Mk;V;;;;http://www.theora.org\n"
- "A_MPEG/L1;MPEG1/2 L1;Mk;A;MPEG-A;;MPEG1 or 2 Audio layer 1;http://www.iis.fraunhofer.de/amm/index.html\n"
- "A_MPEG/L2;MPEG1/2 L2;Mk;A;MPEG-A;;MPEG1 or 2 Audio layer 2;http://www.iis.fraunhofer.de/amm/index.html\n"
- "A_MPEG/L3;MPEG1/2 L3;Mk;A;MPEG-A;;MPEG1 or 2 Audio Layer 3;http://www.iis.fraunhofer.de/amm/index.html\n"
- "A_PCM/INT/BIG;PCM;Mk;A;PCM;;Linear PCM (Big Endian)\n"
- "A_PCM/INT/LIT;PCM;Mk;A;PCM;;Linear PCM (Little Endian)\n"
- "A_PCM/FLOAT/IEEE;PCM;Mk;A;PCM;;Microsoft Linear PCM, Float;http://www.microsoft.com/windows/\n"
- "A_AC3;AC3;Mk;A;AC3;;Dolby AC3\n"
- "A_AC3/BSID9;AC3;Mk;A;AC3;;Dolby AC3\n"
- "A_AC3/BSID10;AC3;Mk;A;AC3;;Dolby AC3\n"
- "A_DTS;DTS;Mk;A;DTS;;\n"
- "A_EAC3;EAC3;Mk;A;EAC3;;Dolby Enhanced AC3\n"
- "A_FLAC;Flac;Mk;A;Flac;;;http://flac.sourceforge.net\n"
- "A_OPUS;Opus;;;http://opus-codec.org\n"
- "A_TTA1;TTA;Mk;A;TTA;;The True Audio Lossless Codec;http://true-audio.com\n"
- "A_VORBIS;Vorbis;Mk;A;Vorbis;VBR;;http://www.vorbis.com\n"
- "A_WAVPACK4;WavPack;Mk;A;Real;VBR;;http://www.wavpack.com\n"
- "A_REAL/14_4;RealAudio 1;Mk;A;Real;;Real Audio 1 (14.4);http://www.real.com\n"
- "A_REAL/28_8;RealAudio 2;Mk;A;Real;;Real Audio 2 (28.8);http://www.real.com\n"
- "A_REAL/COOK;RealAudio 7;Mk;A;Real;;Real Audio Cook Codec (codename: Gecko);http://www.real.com\n"
- "A_REAL/SIPR;RealAudio 4;Mk;A;Real;;Real & Sipro Voice Codec;http://www.real.com\n"
- "A_REAL/RALF;RealAudio Lossless;Mk;A;Real;;Real Audio Lossless Format;http://www.real.com\n"
- "A_REAL/ATRC;RealAudio Atrac3;Mk;A;Real;;Real & Sony Atrac3 Codec;http://www.real.com\n"
- "A_AAC;AAC;Mk;A;AAC;;\n"
- "A_AAC/MPEG2/MAIN;AAC Main;Mk;A;AAC;;AAC Main\n"
- "A_AAC/MPEG2/LC;AAC LC;Mk;A;AAC;;AAC Low Complexity\n"
- "A_AAC/MPEG2/LC/SBR;AAC LC-SBR;Mk;A;AAC;;AAC Low Complexity with Spectral Band Replication\n"
- "A_AAC/MPEG2/SSR;AAC SSR;Mk;A;AAC;;AAC Scalable Sampling Rate\n"
- "A_AAC/MPEG4/MAIN;AAC Main;Mk;A;AAC;;AAC Low Complexity\n"
- "A_AAC/MPEG4/MAIN/SBR;AAC Main;Mk;A;AAC;;AAC Low Complexity with Spectral Band Replication\n"
- "A_AAC/MPEG4/MAIN/SBR/PS;AAC Main;Mk;A;AAC;;AAC Low Complexity with Spectral Band Replication and Parametric Stereo\n"
- "A_AAC/MPEG4/MAIN/PS;AAC Main;Mk;A;AAC;;AAC Low Complexity with Parametric Stereo\n"
- "A_AAC/MPEG4/LC;AAC LC;Mk;A;AAC;;AAC Low Complexity\n"
- "A_AAC/MPEG4/LC/SBR;AAC LC-SBR;Mk;A;AAC;;AAC Low Complexity with Spectral Band Replication\n"
- "A_AAC/MPEG4/LC/SBR/PS;AAC LC-SBR-PS;Mk;A;AAC;;AAC Low Complexity with Spectral Band Replication and Parametric Stereo\n"
- "A_AAC/MPEG4/LC/PS;AAC LC-PS;Mk;A;AAC;;AAC Low Complexity with Parametric Stereo\n"
- "A_AAC/MPEG4/SSR;AAC SSR;Mk;A;AAC;;AAC Scalable Sampling Rate\n"
- "A_AAC/MPEG4/LTP;AAC LTP;Mk;A;AAC;;AAC Long Term Prediction\n"
- "14_4;VSELP;Real;A;;;EIA/TIA IS-54 VSELP, Real Audio 1 (for streaming 14.4 Kbps);http://www.real.com\n"
- "14.4;VSELP;Real;A;;;EIA/TIA IS-54 VSELP, Real Audio 1 (for streaming 14.4 Kbps);http://www.real.com\n"
- "lpcJ;VSELP;Real;A;;;EIA/TIA IS-54 VSELP, Real Audio 1 (for streaming 14.4 Kbps);http://www.real.com\n"
- "28_8;G.728;Real;A;;;ITU-T G.728, Real Audio 2 (for streaming 28.8 Kbps);http://www.real.com\n"
- "28.8;G.728;Real;A;;;ITU-T G.728, Real Audio 2 (for streaming 28.8 Kbps);http://www.real.com\n"
- "cook;Cooker;Real;A;;;Real Audio G2/7 Cook (low bitrate);http://www.real.com\n"
- "dnet;AC3;Real;A;AC3;;A52/AC3, Real Audio 2;http://www.real.com\n"
- "sipr;G.729;Real;A;;;G.729, Real Audio 2;http://www.real.com\n"
- "rtrc;RealAudio 8;Real;A;;;Real Audio 8 (RTRC);http://www.real.com\n"
- "ralf;Lossless;Real;A;;;Real Audio Lossless Format;http://www.real.com\n"
- "whrl;Multi-Channel;Real;A;;;Real Audio Multi-Channel;http://www.real.com\n"
- "atrc;Atrac;Real;A;;;Real & Sony Atrac3;http://www.real.com\n"
- "raac;AAC-LC;Real;A;AAC;;Real Audio 10 AAC LC;http://www.real.com\n"
- "racp;AAC-HE;Real;A;AAC;;Real Audio 10 AAC-HE;http://www.real.com\n"
- "OPUS;Opus;Ogg;A;OPUS;;;http://opus-codec.org\n"
- "Vorbis;Vorbis;Ogg;A;Vorbis;;;http://www.vorbis.com\n"
- "Theora;Theora;Ogg;V;Theora;;;http://www.theora.com\n"
- "mp4a;AAC;4CC;A;AAC;;AAC (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "mp4v;MPEG-4;4CC;V;MPEG-4V;;MPEG-4 Video (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "avc1;AVC;4CC;V;AVC;;Advanced Video Codec;http://www.apple.com/quicktime/download/standalone.html\n"
- "h263;H.263;4CC;V;;;H.263 (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "s263;H.263;4CC;V;;;H.263 (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "samr;AMR-NB;4CC;A;;;AMR narrow band (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "sawb;AMR-WB;4CC;A;;;AMR wide band (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "sevc;EVRC;4CC;A;;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "tx3g;Timed;4CC;T;;;Timed text (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "encv;Encrypted;4CC;V;;;Encrypted Video (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "enca;Encrypted;4CC;A;;;Encrypted Audio (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "enct;Encrypted;4CC;T;;;Encrypted Text (3GPP);http://www.apple.com/quicktime/download/standalone.html\n"
- "ima4;ADPCM;4CC;A;ADPCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "raw ;PCM;4CC;A;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "twos;PCM;4CC;A;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "sowt;PCM;4CC;A;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "alac;Lossless;4CC;A;;;Apple Lossless Format (similar to FLAC);http://www.apple.com/quicktime/download/standalone.html\n"
- "sac3;AC3;4CC;A;AC3;;AC3 in MP4 (made in Nero);http://www.nerodigital.com\n"
- "in24;PCM;4CC;A;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "in32;PCM;4CC;A;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "fl32;PCM ;4CC;A;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "fl64;PCM;4CC;A;PCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "alaw;A-Law;4CC;A;ADPCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- "ulaw;U-Law;4CC;A;ADPCM;;;http://www.apple.com/quicktime/download/standalone.html\n"
- ".mp3;MPEG-1/2 L3;2CC;A;MPEG-A;;MPEG-1 or 2 layer 3;http://www.iis.fraunhofer.de/amm/index.html\n"
- "MPEG-4 AAC main;AAC Main;Mp4v2;A;AAC;;\n"
- "MPEG-4 AAC LC;AAC LC;Mp4v2;A;AAC;;\n"
- "MPEG-4 AAC SSR;AAC SSR;Mp4v2;A;AAC;;\n"
- "MPEG-4 AAC LTP;AAC LTP;Mp4v2;A;AAC;;\n"
- "AVC;AVC;MediaInfo;V;AVC;;Advanced Video Codec;http://developers.videolan.org/x264.html\n"
- "MPEG-1V;MPEG-1 Video;MediaInfo;V;MPEG-V;;\n"
- "MPEG-2V;MPEG-2 Video;MediaInfo;V;MPEG-V;;\n"
- "MPEG-4V;MPEG-4 Visual;MediaInfo;V;MPEG-4V;;\n"
- "MPEG-1A;MPEG-1 Audio;MediaInfo;A;MPEG-A;;\n"
- "MPEG-1A L1;MPEG-1 Audio Layer 1;MediaInfo;A;MPEG-A;;\n"
- "MPEG-1A L2;MPEG-1 Audio Layer 2;MediaInfo;A;MPEG-A;;\n"
- "MPEG-1A L3;MPEG-1 Audio Layer 3;MediaInfo;A;MPEG-A;;\n"
- "MPEG-2A;MPEG-2 Audio;MediaInfo;A;MPEG-A;;\n"
- "MPEG-2A L1;MPEG-2 Audio Layer 1;MediaInfo;A;MPEG-A;;\n"
- "MPEG-2A L2;MPEG-2 Audio Layer 2;MediaInfo;A;MPEG-A;;\n"
- "MPEG-2A L3;MPEG-2 Audio Layer 3;MediaInfo;A;MPEG-A;;\n"
- "MPEG-2.5A;MPEG-2.5 Audio;MediaInfo;A;MPEG-A;;;\n"
- "MPEG-2.5A L1;MPEG-2.5 Audio Layer 1;MediaInfo;A;MPEG-A;;;\n"
- "MPEG-2.5A L2;MPEG-2.5 Audio Layer 2;MediaInfo;A;MPEG-A;;;\n"
- "MPEG-2.5A L3;MPEG-2.5 Audio Layer 3;MediaInfo;A;MPEG-A;;;\n"
- "APE;Monkey's Audio;MediaInfo;A;;;;http://www.monkeysaudio.com/\n"
- "ALS;ALS;MediaInfo;A;;;MPEG-4 Audio Lossless Coding;http://www.nue.tu-berlin.de/forschung/projekte/lossless/mp4als.html#downloads\n"
- "Vodei;Vodei MP;MediaInfo;V;;;Video On Demand Exploration Interface;http://www.vodei.com\n"
- "SWF ADPCM;ADPCM;MediaInfo;A;ADPCM;;ADPCM found in SWF/FLV files;http://www.adobe.com\n"
- "AC3+;AC3+;MediaInfo;A;AC3;;Dolby Ehanced AC3;\n"
- "TrueHD;TrueHD;MediaInfo;A;AC3;;Dolby TrueHD (AC3 based);\n"
- "VC-1;VC-1;MediaInfo;V;VC-1;;;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx\n"
- "LA;LA;MediaInfo;A;;;Lossless Audio Codec;la;http://www.lossless-audio.com/\n"
- "0;Unknown;2CC;A;;;;\n"
- "1;PCM;2CC;A;PCM;;Microsoft PCM;http://www.microsoft.com/windows/\n"
- "2;ADPCM;2CC;A;ADPCM;;Microsoft ADPCM;http://www.microsoft.com/windows/\n"
- "3;PCM;2CC;A;PCM;;IEEE FLOAT;http://www.microsoft.com/windows/\n"
- "4;VSELP;2CC;A;;;Compaq VSELP\n"
- "5;CVSD;2CC;A;;;IBM CVSD\n"
- "6;A-Law;2CC;A;ADPCM;;CCITT A-Law;http://www.microsoft.com/windows/\n"
- "7;U-Law;2CC;A;ADPCM;;CCITT U-Law;http://www.microsoft.com/windows/\n"
- "8;DTS;2CC;A;DTS;;\n"
- "9;DRM;2CC;A;;;Microsoft\n"
- "A;WMSpeech;2CC;A;;;\n"
- "C;MPEG2 5.1;2CC;A;;;MPEG2 5.1\n"
- "10;ADPCM;2CC;A;ADPCM;;OKI ADPCM\n"
- "11;ADPCM;2CC;A;ADPCM;;Intel ADPCM\n"
- "12;ADPCM;2CC;A;ADPCM;;Mediaspace (Videologic) ADPCM\n"
- "13;ADPCM;2CC;A;ADPCM;;Sierra ADPCM\n"
- "14;ADPCM;2CC;A;ADPCM;;Antex G723 ADPCM\n"
- "15;STD;2CC;A;;;DSP solutions Digi-STD\n"
- "16;FIX;2CC;A;;;DSP solutions Digi-FIX\n"
- "17;ADPCM;2CC;A;ADPCM;;Dialogic-OKI ADPCM;http://www.microsoft.com/windows/\n"
- "18;ADPCM;2CC;A;ADPCM;;\n"
- "19;CU;2CC;A;;;HP CU_CODEC\n"
- "1A;Dynamic Voice;2CC;A;;;HP\n"
- "20;ADPCM;2CC;A;ADPCM;;Yamaha ADPCM\n"
- "21;SONARC;2CC;A;;;Speech Compression SONARC\n"
- "22;Truespeech;2CC;A;;;DSP Group TrueSpeech;http://www.microsoft.com/windows/\n"
- "23;SC1;2CC;A;;;Echo Speech SC1\n"
- "24;AF36;2CC;A;;;Virtual Music AudioFile 36\n"
- "25;APTX;2CC;A;;;Audio Processing Technology X\n"
- "26;AF10;2CC;A;;;Virtual Music AudioFile 10\n"
- "27;Prosody 1612;2CC;A;;;Aculab plc Prosody 1612\n"
- "28;LRC;2CC;A;;;Merging Technologies LRC\n"
- "30;AC2;2CC;A;;;Dolby Laboratories AC2\n"
- "31;GSM 6.10;2CC;A;;;Microsoft GSM 6.10;http://www.microsoft.com/windows/\n"
- "32;MSAUDIO;2CC;A;;;Microsoft Audio\n"
- "33;ADPCM;2CC;A;ADPCM;;Antex ADPCM\n"
- "34;VQLPC;2CC;A;;;Control Resources VQLPC\n"
- "35;REAL;2CC;A;;;DSP Solutions Digi-REAL\n"
- "36;ADPCM;2CC;A;ADPCM;;DSP Solutions Digi-ADPCM\n"
- "37;CR10;2CC;A;;;Control Resources 10\n"
- "38;ADPCM;2CC;A;ADPCM;;Natural MicroSystems VBX ADPCM\n"
- "39;ADPCM;2CC;A;ADPCM;;Crystal Semiconductor IMA ADPCM\n"
- "3A;SC3;2CC;A;;;Echo Speech SC3\n"
- "3B;ADPCM;2CC;A;;;Rockwell ADPCM\n"
- "3C;DigiTalk;2CC;A;;;Rockwell DigiTalk\n"
- "3D;Xebec;2CC;A;;;Xebec Multimedia Solutions\n"
- "40;ADPCM;2CC;A;ADPCM;;Antex Electronics G721 ADPCM\n"
- "41;CELP;2CC;A;;;Antex Electronics G728 CELP\n"
- "42;G.723.1;2CC;A;;;Microsoft G.723.1;http://www.microsoft.com/windows/\n"
- "42;ADPCM;2CC;A;;;IBM\n"
- "42;MSG729;2CC;A;;;Microsoft\n"
- "45;ADPCM;2CC;A;ADPCM;;Microsoft G.726;http://www.microsoft.com/windows/\n"
- "50;MPEG-1/2 L1;2CC;A;MPEG-1;;;http://www.iis.fraunhofer.de/amm/index.html\n"
- "51;MPEG-1/2 L2;2CC;A;MPEG-1;;;http://www.iis.fraunhofer.de/amm/index.html\n"
- "52;RT24;2CC;A;;;InSoft, Inc.\n"
- "53;PAC;2CC;A;;;InSoft, Inc.\n"
- "55;MPEG-1/2 L3;2CC;A;MPEG-1;;MPEG-1 or 2 layer 3;http://www.iis.fraunhofer.de/amm/index.html\n"
- "59;G723;2CC;A;;;Lucent G723\n"
- "60;Cirrus;2CC;A;;;Cirrus Logic\n"
- "61;PCM;2CC;A;;;ESS Technology PCM\n"
- "62;Voxware;2CC;A;;;\n"
- "63;ATRAC;2CC;A;;;Canopus ATRAC\n"
- "64;ADPCM;2CC;A;ADPCM;;APICOM G726 ADPCM\n"
- "65;ADPCM;2CC;A;ADPCM;;APICOM G722 ADPCM\n"
- "66;DSAT;2CC;A;;;Microsoft DSAT\n"
- "67;DSAT Display;2CC;A;;;Microsoft DSAT DISPLAY\n"
- "69;BYTE_ALIGNED;2CC;A;;;Voxware BYTE_ALIGNED;http://www.voxware.com/\n"
- "70;AC8;2CC;A;;;Voxware AC8;http://www.voxware.com/\n"
- "71;AC10;2CC;A;;;Voxware AC10;http://www.voxware.com/\n"
- "72;AC16;2CC;A;;;Voxware AC16;http://www.voxware.com/\n"
- "73;AC20;2CC;A;;;Voxware AC20;http://www.voxware.com/\n"
- "74;RT24;2CC;A;;;Voxware RT24 (MetaVoice);http://www.voxware.com/\n"
- "75;RT29;2CC;A;;;Voxware RT29 (MetaSound);http://www.voxware.com/\n"
- "76;RT29HW;2CC;A;;;Voxware RT29HW;http://www.voxware.com/\n"
- "77;VR12;2CC;A;;;Voxware VR12;http://www.voxware.com/\n"
- "78;VR18;2CC;A;;;Voxware VR18;http://www.voxware.com/\n"
- "79;TQ40;2CC;A;;;Voxware TQ40;http://www.voxware.com/\n"
- "7A;SC3;2CC;A;;;Voxware\n"
- "7B;SC3;2CC;A;;;Voxware\n"
- "80;Softsound;2CC;A;;;\n"
- "81;TQ60;2CC;A;;;Voxware TQ60;http://www.voxware.com/\n"
- "82;MSRT24;2CC;A;;;Microsoft MSRT24\n"
- "83;G729A;2CC;A;;;AT&T G729A\n"
- "84;MVI_MVI2;2CC;A;;;Motion Pixels MVI_MVI2\n"
- "85;ADPCM;2CC;A;ADPCM;;DataFusion Systems (Pty) G726\n"
- "86;GSM6.10;2CC;A;;;DataFusion Systems (Pty) GSM6.10\n"
- "88;ISI AUDIO;2CC;A;;;Iterated Systems AUDIO\n"
- "89;Onlive;2CC;A;;;OnLive! Technologies\n"
- "8A;SX20;2CC;A;;;Multitude\n"
- "8B;ADPCM;2CC;A;ADPCM;;Infocom ITS A/S\n"
- "8C;G.729;2CC;A;;;Convedia Corporation\n"
- "91;SBC24;2CC;A;;;Siemens Business Communications Sys 24\n"
- "92;AC3 SPDIF;2CC;A;;;Sonic Foundry AC3 SPDIF\n"
- "93;G723;2CC;A;;;MediaSonic G723\n"
- "94;Prosody 8KBPS;2CC;A;;;Aculab plc Prosody 8KBPS\n"
- "97;ADPCM;2CC;A;ADPCM;;ZyXEL Communications ADPCM\n"
- "98;LPCBB;2CC;A;;;Philips Speech Processing LPCBB\n"
- "99;Packed;2CC;A;;;Studer Professional Audio AG Packed\n"
- "A0;PHONYTALK;2CC;A;;;Malden Electronics PHONYTALK\n"
- "A1;GSM;2CC;A;;;Racal Recorders\n"
- "A2;G.720a;2CC;A;;;Racal Recorders\n"
- "A3;G.723.1;2CC;A;;;Racal Recorders\n"
- "A4;ACELP;2CC;A;;;Racal Recorders\n"
- "B0;AAC;2CC;A;AAC;;NEC Corporation\n"
- "FF;AAC;2CC;A;AAC;;\n"
- "100;ADPCM;2CC;A;ADPCM;;\n"
- "101;IRAT;2CC;A;;;BeCubed IRAT\n"
- "102;;2CC;A;;;IBM A-law\n"
- "103;;2CC;A;;;IBM AVC ADPCM\n"
- "111;G723;2CC;A;;;Vivo G723\n"
- "112;SIREN;2CC;A;;;Vivo SIREN\n"
- "120;CELP;2CC;A;;;Philips Speech Processing\n"
- "121;Grundig;2CC;A;;;Philips Speech Processing\n"
- "123;G723;2CC;A;;;Digital Equipment Corporation (DEC) G723\n"
- "125;ADPCM;2CC;A;ADPCM;;\n"
- "130;ACEPL;2CC;A;;;Sipro ACEPL.net;http://dividix.host.sk\n"
- "131;ACELP4800;2CC;A;;;Sipro ACELP4800\n"
- "132;ACELP8V3;2CC;A;;;Sipro ACELP8V3\n"
- "133;G729;2CC;A;;;Sipro G729\n"
- "134;G729;2CC;A;;;Sipro G729A\n"
- "135;KELVIN;2CC;A;;;Sipro KELVIN\n"
- "135;AMR;2CC;A;;;VoiceAge Corporation\n"
- "140;ADPCM;2CC;A;ADPCM;;Dictaphone Corporation G726 ADPCM\n"
- "140;CELP68;2CC;A;;;Dictaphone Corporation\n"
- "140;CELP54;2CC;A;;;Dictaphone Corporation\n"
- "150;PureVoice;2CC;A;;;Qualcomm PUREVOICE\n"
- "151;HalfRate;2CC;A;;;Qualcomm HALFRATE\n"
- "155;TUBGSM;2CC;A;;;Ring Zero Systems TUBGSM\n"
- "160;WMA1;2CC;A;;;Windows Media Audio 1;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx\n"
- "161;WMA2;2CC;A;;;Windows Media Audio 2;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx\n"
- "162;WMA3;2CC;A;;;Windows Media Audio 3;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx\n"
- "163;WMA Lossless;2CC;A;;;Windows Media Audio 3;http://www.microsoft.com/windows/windowsmedia/format/codecdownload.aspx\n"
- "163;WMA Pro;2CC;A;;;WMA Pro over S/PDIF\n"
- "170;ADPCM;2CC;A;ADPCM;;Unisys Nap ADPCM\n"
- "171;U-Law;2CC;A;ADPCM;;Unisys Nap U-law\n"
- "172;A-Law;2CC;A;ADPCM;;Unisys Nap A-law\n"
- "173;16K;2CC;A;;;Unisys Nap 16K\n"
- "174;G.700;2CC;A;;;SyCom Technologies\n"
- "175;ADPCM;2CC;A;ADPCM;;SyCom Technologies\n"
- "176;CELP54;2CC;A;;;SyCom Technologies\n"
- "177;CELP68;2CC;A;;;SyCom Technologies\n"
- "178;ADPCM;2CC;A;ADPCM;;Knowledge Adventure, Inc.\n"
- "180;AAC;2CC;A;;;Fraunhofer IIS\n"
- "190;DTS;2CC;A;;\n"
- "200;ADPCM;2CC;A;ADPCM;;Creative Labs ADPCM\n"
- "202;FastSpeech8;2CC;A;;;Creative Labs Fast Speech 8\n"
- "203;FastSpeech10;2CC;A;;;Creative Labs Fast Speech 10\n"
- "210;ADPCM;2CC;A;ADPCM;;UHER informatic GmbH ADPCM\n"
- "215;;2CC;A;;;Ulead DV ACM\n"
- "216;;2CC;A;;;Ulead DV ACM\n"
- "220;QuaterDeck;2CC;A;;;Quarterdeck\n"
- "230;VC;2CC;A;;;I-link VC\n"
- "240;RAW_SPORT;2CC;A;;;Aureal RAW_SPORT\n"
- "241;AC3;2CC;A;;;ESST AC3\n"
- "250;HSX;2CC;A;;;Interactive Products, Inc. (IPI) HSX\n"
- "251;RPELP;2CC;A;;;Interactive Products, Inc. (IPI) RPELP\n"
- "260;CS2;2CC;A;;;Consistent Software CS2\n"
- "270;SCX;2CC;A;;;Sony\n"
- "271;SCY;2CC;A;;;Sony\n"
- "272;Atrac3;2CC;A;;;Sony\n"
- "273;SPC;2CC;A;;;Sony\n"
- "280;Telum;2CC;A;;\n"
- "281;TelumIA;2CC;A;;\n"
- "285;ADPCM;2CC;A;ADPCM;;Norcom Voice Systems\n"
- "300;FM_TOWNS_SND;2CC;A;;;Fujitsu FM_TOWNS_SND\n"
- "350;Dev;2CC;A;;;Micronas Semiconductors, Inc.\n"
- "351;CELP833;2CC;A;;;Micronas Semiconductors, Inc.\n"
- "400;BTV_DIGITAL;2CC;A;;;Brooktree (BTV) DIGITAL\n"
- "401;Music Coder;2CC;A;;;Intel Music Coder;http://www.intel.com/\n"
- "402;IAC2;2CC;A;;;Ligos IAC2;http://www.ligos.com\n"
- "450;Qdesign;2CC;A;;;QDesign Music\n"
- "500;VP7;2CC;A;;;On2\n"
- "501;VP6;2CC;A;;;On2\n"
- "680;VMPCM;2CC;A;;;AT&T VME_VMPCM\n"
- "681;TPC;2CC;A;;;AT&T TPC\n"
- "700;YMPEG;2CC;A;;;YMPEG Alpha\n"
- "8AE;LiteWave;2CC;A;;;ClearJump LiteWave\n"
- "AAC;AAC;2CC;A;AAC;;\n"
- "1000;GSM;2CC;A;;;Ing C. Olivetti & C., S.p.A. GSM\n"
- "1001;ADPCM;2CC;A;ADPCM;;Ing C. Olivetti & C., S.p.A. ADPCM\n"
- "1002;CELP;2CC;A;;;Ing C. Olivetti & C., S.p.A. CELP\n"
- "1003;SBC;2CC;A;;;Ing C. Olivetti & C., S.p.A. SBC\n"
- "1004;OPR;2CC;A;;;Ing C. Olivetti & C., S.p.A. OPR\n"
- "1100;LH_CODEC;2CC;A;;;Lernout & Hauspie Codec\n"
- "1101;CELP;2CC;A;;;Lernout & Hauspie CELP 4.8 kb/s;http://www.microsoft.com/windows/\n"
- "1102;SBC;2CC;A;;;Lernout & Hauspie SBC 8 kb/s;http://www.microsoft.com/windows/\n"
- "1103;SBC;2CC;A;;;Lernout & Hauspie SBC 12 kb/s;http://www.microsoft.com/windows/\n"
- "1104;SBC;2CC;A;;;Lernout & Hauspie SBC 16 kb/s;http://www.microsoft.com/windows/\n"
- "1400;NORRIS;2CC;A;;;Norris Communications, Inc.\n"
- "1401;ISIAUDIO;2CC;A;;;ISIAudio\n"
- "1500;MUSICOMPRESS;2CC;A;;;Soundspace Music Compression\n"
- "181C;RT24;2CC;A;;;VoxWare RT24 speech codec\n"
- "181E;AX24000P;2CC;A;;;Lucent elemedia AX24000P Music codec\n"
- "1971;SonicFoundry;2CC;A;;;Lossless\n"
- "1C03;ADPCM;2CC;A;ADPCM;;Lucent SX5363S G.723 compliant codec\n"
- "1C07;SX8300P;2CC;A;;;Lucent SX8300P speech codec\n"
- "1C0C;ADPCM;2CC;A;ADPCM;;Lucent SX5363S G.723 compliant codec\n"
- "1F03;DigiTalk;2CC;A;;;CUseeMe DigiTalk (ex-Rocwell)\n"
- "1FC4;ALF2CD;2CC;A;;;NCT Soft ALF2CD ACM\n"
- "2000;AC3;2CC;A;AC3;CBR;Dolby AC3\n"
- "2001;DTS;2CC;A;DTS;;Digital Theater Systems\n"
- "2002;Real Audio 1;2CC;A;;;RealAudio 1/2 14.4\n"
- "2003;Real Audio 1;2CC;A;;;RealAudio 1/2 28.8\n"
- "2004;Real Audio 2;2CC;A;;;RealAudio G2/8 Cook (low bitrate)\n"
- "2005;Real Audio 3;2CC;A;;;RealAudio 3/4/5 Music (DNET)\n"
- "2006;AAC;2CC;A;AAC;;RealAudio 10 AAC (RAAC)\n"
- "2007;AAC+;2CC;A;AAC;;RealAudio 10 AAC+ (RACP)\n"
- "3313;AviSynth;2CC;A;;;makeAVIS (fake AVI sound from AviSynth scripts)\n"
- "4143;AAC;2CC;A;AAC;;Divio MPEG-4 AAC audio\n"
- "4201;Nokia;2CC;A;;\n"
- "4243;ADPCM;2CC;A;ADPCM;;G726\n"
- "43AC;Lead Speech;2CC;A;;\n"
- "564C;Lead Vorbis;2CC;A;;;\n"
- "566F;Vorbis;2CC;A;Vorbis;;;http://www.vorbis.com\n"
- "5756;WavPack;2CC;A;;;;http://www.wavpack.com/\n"
- "674F;Vorbis;2CC;A;Vorbis;;Mode 1;http://www.vorbis.com\n"
- "6750;Vorbis;2CC;A;Vorbis;;Mode 2;http://www.vorbis.com\n"
- "6751;Vorbis;2CC;A;Vorbis;;Mode 3;http://www.vorbis.com\n"
- "676F;Vorbis;2CC;A;Vorbis;;Mode 1+;http://www.vorbis.com\n"
- "6770;Vorbis;2CC;A;Vorbis;;Mode 2+;http://www.vorbis.com\n"
- "6771;Vorbis;2CC;A;Vorbis;;Mode 2+;http://www.vorbis.com\n"
- "7A21;AMR;2CC;A;;CBR;GSM-AMR (CBR, no SID);http://www.microsoft.com\n"
- "7A22;AMR;2CC;A;;VBR;GSM-AMR (VBR, including SID);http://www.microsoft.com\n"
- "A100;G723.1;2CC;A;;;\n"
- "A101;AVQSBC;2CC;A;;;\n"
- "A102;ODSBC;2CC;A;;;\n"
- "A103;G729A;2CC;A;;;\n"
- "A104;AMR-WB;2CC;A;;;\n"
- "A105;ADPCM;2CC;A;ADPCM;;G726\n"
- "A106;AAC;2CC;A;;;\n"
- "A107;ADPCM;2CC;A;ADPCM;;G726\n"
- "A109;Speex;2CC;A;;;;http://www.speex.org/\n"
- "DFAC;FrameServer;2CC;A;;;DebugMode SonicFoundry Vegas FrameServer ACM Codec\n"
- "F1AC;FLAC;2CC;A;;;Free Lossless Audio Codec FLAC\n"
- "FFFE;PCM;2CC;A;PCM;;Extensible wave format\n"
- "FFFF;In Development;2CC;A;;;In Development / Unregistered\n"
- "S_TEXT/UTF8;UTF-8;Mk;T;;;UTF-8 Plain Text\n"
- "S_TEXT/SSA;SSA;Mk;T;;;Sub Station Alpha\n"
- "S_TEXT/ASS;ASS;Mk;T;;;Advanced Sub Station Alpha\n"
- "S_TEXT/USF;USF;Mk;T;;;Universal Subtitle Format\n"
- "S_IMAGE/BMP;Bitmap;Mk;T;;;Basic image based subtitle format\n"
- "S_VOBSUB;VobSub;Mk;T;;;The same subtitle format used on DVDs\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Generic (ZtringListList &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Format\n"
- "Format/Info\n"
- "Format/Url\n"
- "Format_Commercial\n"
- "Format_Commercial_IfAny\n"
- "Format_Version\n"
- "Format_Profile\n"
- "Format_Compression\n"
- "Format_Settings\n"
- "InternetMediaType\n"
- "CodecID\n"
- "CodecID/Info\n"
- "CodecID/Hint\n"
- "CodecID/Url\n"
- "CodecID_Description\n"
- "Codec\n"
- "Codec/String\n"
- "Codec/Info\n"
- "Codec/Url\n"
- "Codec/CC\n"
- "Duration\n"
- "Duration/String\n"
- "Duration/String1\n"
- "Duration/String2\n"
- "Duration/String3\n"
- "Source_Duration\n"
- "Source_Duration/String\n"
- "Source_Duration/String1\n"
- "Source_Duration/String2\n"
- "Source_Duration/String3\n"
- "BitRate_Mode\n"
- "BitRate_Mode/String\n"
- "BitRate\n"
- "BitRate/String\n"
- "BitRate_Minimum\n"
- "BitRate_Minimum/String\n"
- "BitRate_Nominal\n"
- "BitRate_Nominal/String\n"
- "BitRate_Maximum\n"
- "BitRate_Maximum/String\n"
- "BitRate_Encoded\n"
- "BitRate_Encoded/String\n"
- "FrameCount\n"
- "Source_FrameCount\n"
- "ColorSpace\n"
- "ChromaSubsampling\n"
- "Resolution\n"
- "Resolution/String\n"
- "BitDepth\n"
- "BitDepth/String\n"
- "Compression_Mode\n"
- "Compression_Mode/String\n"
- "Compression_Ratio\n"
- "Delay\n"
- "Delay/String\n"
- "Delay/String1\n"
- "Delay/String2\n"
- "Delay/String3\n"
- "Delay/String4\n"
- "Delay_Settings\n"
- "Delay_DropFrame\n"
- "Delay_Source\n"
- "Delay_Source/String\n"
- "Delay_Original\n"
- "Delay_Original/String\n"
- "Delay_Original/String1\n"
- "Delay_Original/String2\n"
- "Delay_Original/String3\n"
- "Delay_Original/String4\n"
- "Delay_Original_Settings\n"
- "Delay_Original_DropFrame\n"
- "Delay_Original_Source\n"
- "Video_Delay\n"
- "Video_Delay/String\n"
- "Video_Delay/String1\n"
- "Video_Delay/String2\n"
- "Video_Delay/String3\n"
- "Video_Delay/String4\n"
- "StreamSize\n"
- "StreamSize/String\n"
- "StreamSize/String1\n"
- "StreamSize/String2\n"
- "StreamSize/String3\n"
- "StreamSize/String4\n"
- "StreamSize/String5\n"
- "StreamSize_Proportion\n"
- "Source_StreamSize\n"
- "Source_StreamSize/String\n"
- "Source_StreamSize/String1\n"
- "Source_StreamSize/String2\n"
- "Source_StreamSize/String3\n"
- "Source_StreamSize/String4\n"
- "Source_StreamSize/String5\n"
- "Source_StreamSize_Proportion\n"
- "StreamSize_Encoded\n"
- "StreamSize_Encoded/String\n"
- "StreamSize_Encoded/String1\n"
- "StreamSize_Encoded/String2\n"
- "StreamSize_Encoded/String3\n"
- "StreamSize_Encoded/String4\n"
- "StreamSize_Encoded/String5\n"
- "StreamSize_Encoded_Proportion\n"
- "Source_StreamSize_Encoded\n"
- "Source_StreamSize_Encoded/String\n"
- "Source_StreamSize_Encoded/String1\n"
- "Source_StreamSize_Encoded/String2\n"
- "Source_StreamSize_Encoded/String3\n"
- "Source_StreamSize_Encoded/String4\n"
- "Source_StreamSize_Encoded/String5\n"
- "Source_StreamSize_Encoded_Proportion\n"
- "Language\n"
- "ServiceName\n"
- "ServiceProvider\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_General (ZtringListList &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Count;;;N NI;;;Count of objects available in this stream\n"
- "Status;;;N NI;;;bit field (0=IsAccepted, 1=IsFilled, 2=IsUpdated, 3=IsFinished)\n"
- "StreamCount;;;N NI;;;Count of streams of that kind available\n"
- "StreamKind;General;;N NT;;;Stream type name\n"
- "StreamKind/String;;;N NT;;;Stream type name\n"
- "StreamKindID;;;N NI;;;Number of the stream (base=0)\n"
- "StreamKindPos;;;N NI;;;When multiple streams, number of the stream (base=1)\n"
- "StreamOrder;;;N YI;;;Stream order in the file, whatever is the kind of stream (base=0)\n"
- "FirstPacketOrder;;;N YI;;;Order of the first fully decodable packet met in the file, whatever is the kind of stream (base=0)\n"
- "Inform;;;N NT;;;Last **Inform** call\n"
- "ID;;;N YI;;;The ID for this stream in this file\n"
- "ID/String;;;Y NT;;;The ID for this stream in this file\n"
- "UniqueID;;;N YI;;;The unique ID for this stream, should be copied with stream copy\n"
- "UniqueID/String;;;Y NT;;;The unique ID for this stream, should be copied with stream copy\n"
- "MenuID;;;N YI;;;The menu ID for this stream in this file\n"
- "MenuID/String;;;Y NT;;;The menu ID for this stream in this file\n"
- "GeneralCount;1;;N NI;;;Number of general streams\n"
- "VideoCount;;;N NI;;;Number of video streams\n"
- "AudioCount;;;N NI;;;Number of audio streams\n"
- "TextCount;;;N NI;;;Number of text streams\n"
- "OtherCount;;;N NI;;;Number of other streams\n"
- "ImageCount;;;N NI;;;Number of image streams\n"
- "MenuCount;;;N NI;;;Number of menu streams\n"
- "Video_Format_List;;;N NT;;;Video Codecs in this file, separated by /\n"
- "Video_Format_WithHint_List;;;N NT;;;Video Codecs in this file with popular name (hint), separated by /\n"
- "Video_Codec_List;;;N NT;;;Deprecated, do not use in new projects\n"
- "Video_Language_List;;;N NT;;;Video languagesin this file, full names, separated by /\n"
- "Audio_Format_List;;;N NT;;;Audio Codecs in this file,separated by /\n"
- "Audio_Format_WithHint_List;;;N NT;;;Audio Codecs in this file with popular name (hint), separated by /\n"
- "Audio_Codec_List;;;N NT;;;Deprecated, do not use in new projects\n"
- "Audio_Language_List;;;N NT;;;Audio languages in this file separated by /\n"
- "Text_Format_List;;;N NT;;;Text Codecs in this file, separated by /\n"
- "Text_Format_WithHint_List;;;N NT;;;Text Codecs in this file with popular name (hint),separated by /\n"
- "Text_Codec_List;;;N NT;;;Deprecated, do not use in new projects\n"
- "Text_Language_List;;;N NT;;;Text languages in this file, separated by /\n"
- "Other_Format_List;;;N NT;;;Other formats in this file, separated by /\n"
- "Other_Format_WithHint_List;;;N NT;;;Other formats in this file with popular name (hint), separated by /\n"
- "Other_Codec_List;;;N NT;;;Deprecated, do not use in new projects\n"
- "Other_Language_List;;;N NT;;;Chapters languages in this file, separated by /\n"
- "Image_Format_List;;;N NT;;;Image Codecs in this file, separated by /\n"
- "Image_Format_WithHint_List;;;N NT;;;Image Codecs in this file with popular name (hint), separated by /\n"
- "Image_Codec_List;;;N NT;;;Deprecated, do not use in new projects\n"
- "Image_Language_List;;;N NT;;;Image languages in this file, separated by /\n"
- "Menu_Format_List;;;N NT;;;Menu Codecsin this file, separated by /\n"
- "Menu_Format_WithHint_List;;;N NT;;;Menu Codecs in this file with popular name (hint),separated by /\n"
- "Menu_Codec_List;;;N NT;;;Deprecated, do not use in new projects\n"
- "Menu_Language_List;;;N NT;;;Menu languages in this file, separated by /\n"
- "CompleteName;;;Y YT;;;Complete name (Folder+Name+Extension)\n"
- "FolderName;;;N NT;;;Folder name only\n"
- "FileName;;;N NT;;;File name only\n"
- "FileExtension;;;N NT;;;File extension only\n"
- "CompleteName_Last;;;Y YT;;;Complete name (Folder+Name+Extension) of the last file (in the case of a sequence of files)\n"
- "FolderName_Last;;;N NT;;;Folder name only of the last file (in the case of a sequence of files)\n"
- "FileName_Last;;;N NT;;;File name only of the last file (in the case of a sequence of files)\n"
- "FileExtension_Last;;;N NT;;;File extension only of the last file (in the case of a sequence of files)\n"
- "Format;;;Y YT;;;Format used\n"
- "Format/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "Format/Info;;;Y NT;;;Info about this Format\n"
- "Format/Url;;;N NT;;;Link to a description of this format\n"
- "Format/Extensions;;;N NT;;;Known extensions of this format\n"
- "Format_Commercial;;;N NT;;;Commercial name used by vendor for theses setings or Format field if there is no difference\n"
- "Format_Commercial_IfAny;;;Y YT;;;Commercial name used by vendor for theses setings if there is one\n"
- "Format_Version;;;Y YT;;;Version of this format\n"
- "Format_Profile;;;Y YT;;;Profile of the Format\n"
- "Format_Compression;;;Y YT;;;Compression method used;\n"
- "Format_Settings;;;Y YT;;;Settings needed for decoder used\n"
- "InternetMediaType;;;N YT;;;Internet Media Type (aka MIME Type, Content-Type)\n"
- "CodecID;;;Y YT;;;Codec ID (found in some containers);\n"
- "CodecID/String;;;Y NT;;;Codec ID (found in some containers);\n"
- "CodecID/Info;;;Y NT;;;Info about this codec\n"
- "CodecID/Hint;;;Y NT;;;A hint/popular name for this codec\n"
- "CodecID/Url;;;N NT;;;A link to more details about this codec ID\n"
- "CodecID_Description;;;Y YT;;;Manual description given by the container\n"
- "Interleaved;;;N YT;;;If Audio and video are muxed\n"
- "Codec;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/Info;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/Url;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/Extensions;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_Automatic;;;N NT;;;Deprecated, do not use in new projects\n"
- "FileSize;; byte;N YT;;;File size in bytes\n"
- "FileSize/String;;;Y NT;;;File size (with measure)\n"
- "FileSize/String1;;;N NT;;;File size (with measure, 1 digit mini)\n"
- "FileSize/String2;;;N NT;;;File size (with measure, 2 digit mini)\n"
- "FileSize/String3;;;N NT;;;File size (with measure, 3 digit mini)\n"
- "FileSize/String4;;;N NT;;;File size (with measure, 4 digit mini)\n"
- "Duration;; ms;N YI;;;Play time of the stream in ms\n"
- "Duration/String;;;Y NT;;;Play time in format : XXx YYy only, YYy omited if zero\n"
- "Duration/String1;;;N NT;;;Play time in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration/String2;;;N NT;;;Play time in format : XXx YYy only, YYy omited if zero\n"
- "Duration/String3;;;N NT;;;Play time in format : HH:MM:SS.MMM\n"
- "Duration_Start;;;Y YT;;\n"
- "Duration_End;;;Y YT;;\n"
- "OverallBitRate_Mode;;;N YT;;;Bit rate mode of all streams (VBR, CBR)\n"
- "OverallBitRate_Mode/String;;;Y NT;;;Bit rate mode of all streams (Variable, Constant)\n"
- "OverallBitRate;; bps;N YF;;;Bit rate of all streams in bps\n"
- "OverallBitRate/String;;;Y NT;;;Bit rate of all streams (with measure)\n"
- "OverallBitRate_Minimum;; bps;N YF;;;Minimum Bit rate in bps\n"
- "OverallBitRate_Minimum/String;;;Y NT;;;Minimum Bit rate (with measurement)\n"
- "OverallBitRate_Nominal;; bps;N YF;;;Nominal Bit rate in bps\n"
- "OverallBitRate_Nominal/String;;;Y NT;;;Nominal Bit rate (with measurement)\n"
- "OverallBitRate_Maximum;; bps;N YF;;;Maximum Bit rate in bps\n"
- "OverallBitRate_Maximum/String;;;Y NT;;;Maximum Bit rate (with measurement)\n"
- "Delay;; ms;N YI;;;Delay fixed in the stream (relative) IN MS\n"
- "Delay/String;;;N NT;;;Delay with measurement\n"
- "Delay/String1;;;N NT;;;Delay with measurement\n"
- "Delay/String2;;;N NT;;;Delay with measurement\n"
- "Delay/String3;;;N NT;;;format : HH:MM:SS.MMM\n"
- "StreamSize;; byte;N YI;;;Stream size in bytes\n"
- "StreamSize/String;;;N NT;;\n"
- "StreamSize/String1;;;N NT;;\n"
- "StreamSize/String2;;;N NT;;\n"
- "StreamSize/String3;;;N NT;;\n"
- "StreamSize/String4;;;N NT;;\n"
- "StreamSize/String5;;;N NT;;;With proportion\n"
- "StreamSize_Proportion;;;N NT;;;Stream size divided by file size\n"
- "HeaderSize;;;N YI;;\n"
- "DataSize;;;N YI;;\n"
- "FooterSize;;;N YI;;\n"
- "IsStreamable;;;N YT;;\n"
- "Album_ReplayGain_Gain;; dB;N YT;;;The gain to apply to reach 89dB SPL on playback\n"
- "Album_ReplayGain_Gain/String;;;Y YT;;\n"
- "Album_ReplayGain_Peak;;;Y YT;;;The maximum absolute peak value of the item;\n"
- "Encryption;;;Y YT;;;;\n"
- "Encryption_Format;;;N YT;;;;\n"
- "Encryption_Length;;;N YT;;;;\n"
- "Encryption_Method;;;N YT;;;;\n"
- "Encryption_Mode;;;N YT;;;;\n"
- "Encryption_Padding;;;N YT;;;;\n"
- "Encryption_InitializationVector;;;N YT;;;;\n"
- "Title;;;N NT;;;(Generic)Title of file;;Title\n"
- "Title/More;;;N NT;;;(Generic)More info about the title of file;;Title\n"
- "Title/Url;;;N NT;;;(Generic)Url;;Title\n"
- "Domain;;;Y YT;;;Univers movies belong to, e.g. Starwars, Stargate, Buffy, Dragonballs;;Title\n"
- "Collection;;;Y YT;;;Name of the series, e.g. Starwars movies, Stargate SG-1, Stargate Atlantis, Buffy, Angel;;Title\n"
- "Season;;;Y YT;;;Name of the season, e.g. Strawars first Trilogy, Season 1;;Title\n"
- "Season_Position;;;Y YI;;;Number of the Season;;Title\n"
- "Season_Position_Total;;;Y YI;;;Place of the season e.g. 2 of 7;;Title\n"
- "Movie;;;Y YT;;;Name of the movie. Eg : Starwars, a new hope;;Title\n"
- "Movie/More;;;Y YT;;;More infos about the movie;;Title\n"
- "Movie/Country;;;Y YT;;;Country, where the movie was procuced;;Title\n"
- "Movie/Url;;;Y YT;;;Homepage for the movie;;Title\n"
- "Album;;;Y YT;;;Name of an audio-album. Eg : The joshua tree;;Title\n"
- "Album/More;;;Y YT;;;More infos about the album;;Title\n"
- "Album/Sort;;;Y YT;;;;;Title\n"
- "Album/Performer;;;Y YT;;;Album performer/artist of this file;;Entity\n"
- "Album/Performer/Sort;;;Y YT;;;;;Entity\n"
- "Album/Performer/Url;;;Y YT;;;Homepage of the album performer/artist;;Entity\n"
- "Comic;;;Y YT;;;Name of the comic.;;Title\n"
- "Comic/More;;;Y YT;;;;;Title\n"
- "Comic/Position_Total;;;Y YI;;;;;Title\n"
- "Part;;;Y YT;;;Name of the part. e.g. CD1, CD2;;Title\n"
- "Part/Position;;;Y YI;;;Number of the part;;Title\n"
- "Part/Position_Total;;;Y YI;;;Place of the part e.g. 2 of 3;;Title\n"
- "Track;;;Y YT;;;Name of the track. e.g. track1, track 2;;Title\n"
- "Track/More;;;Y YT;;;More infos about the track;;Title\n"
- "Track/Url;;;Y YT;;;Link to a site about this track;;Title\n"
- "Track/Sort;;;Y YT;;;;;Title\n"
- "Track/Position;;;Y YI;;;Number of this track;;Title\n"
- "Track/Position_Total;;;Y YI;;;Place of this track, e.g. 3 of 15;;Title\n"
- "Grouping;;;Y YT;;;iTunes grouping;;Title\n"
- "Chapter;;;Y YT;;;Name of the chapter.;;Title\n"
- "SubTrack;;;Y YT;;;Name of the subtrack.;;Title\n"
- "Original/Album;;;Y YT;;;Original name of album, serie...;;Title\n"
- "Original/Movie;;;Y YT;;;Original name of the movie;;Title\n"
- "Original/Part;;;Y YT;;;Original name of the part in the original support;;Title\n"
- "Original/Track;;;Y YT;;;Original name of the track in the original support;;Title\n"
- "Compilation;;;Y YT;;;iTunes compilation;;Title\n"
- "Compilation/String;;Yes;Y YT;;;iTunes compilation;;Title\n"
- "Performer;;;Y YT;;;Main performer/artist of this file;;Entity\n"
- "Performer/Sort;;;Y YT;;;;;Entity\n"
- "Performer/Url;;;Y YT;;;Homepage of the performer/artist;;Entity\n"
- "Original/Performer;;;Y YT;;;Original artist(s)/performer(s).;;Entity\n"
- "Accompaniment;;;Y YT;;;Band/orchestra/accompaniment/musician.;;Entity\n"
- "Composer;;;Y YT;;;Name of the original composer.;;Entity\n"
- "Composer/Nationality;;;Y YT;;;Nationality of the main composer of the item, mostly for classical music.;;Entity\n"
- "Arranger;;;Y YT;;;The person who arranged the piece. e.g. Ravel.;;Entity\n"
- "Lyricist;;;Y YT;;;The person who wrote the lyrics for a musical item.;;Entity\n"
- "Original/Lyricist;;;Y YT;;;Original lyricist(s)/text writer(s).;;Entity\n"
- "Conductor;;;Y YT;;;The artist(s) who performed the work. In classical music this would be the conductor, orchestra, soloists.;;Entity\n"
- "Director;;;Y YT;;;Name of the director.;;Entity\n"
- "AssistantDirector;;;Y YT;;;Name of the assistant director.;;Entity\n"
- "DirectorOfPhotography;;;Y YT;;;The name of the director of photography, also known as cinematographer.;;Entity\n"
- "SoundEngineer;;;Y YT;;;The name of the sound engineer or sound recordist.;;Entity\n"
- "ArtDirector;;;Y YT;;;The person who oversees the artists and craftspeople who build the sets.;;Entity\n"
- "ProductionDesigner;;;Y YT;;;The person responsible for designing the Overall visual appearance of a movie.;;Entity\n"
- "Choregrapher;;;Y YT;;;The name of the choregrapher.;;Entity\n"
- "CostumeDesigner;;;Y YT;;;The name of the costume designer.;;Entity\n"
- "Actor;;;Y YT;;;Real name of an actor or actress playing a role in the movie.;;Entity\n"
- "Actor_Character;;;Y YT;;;Name of the character an actor or actress plays in this movie.;;Entity\n"
- "WrittenBy;;;Y YT;;;The author of the story or script.;;Entity\n"
- "ScreenplayBy;;;Y YT;;;The author of the screenplay or scenario (used for movies and TV shows).;;Entity\n"
- "EditedBy;;;Y YT;;;Editors name;;Entity\n"
- "CommissionedBy;;;Y YT;;;name of the person or organization that commissioned the subject of the file;;Entity\n"
- "Producer;;;Y YT;;;Name of the producer of the movie.;;Entity\n"
- "CoProducer;;;Y YT;;;The name of a co-producer.;;Entity\n"
- "ExecutiveProducer;;;Y YT;;;The name of an executive producer.;;Entity\n"
- "MusicBy;;;Y YT;;;Main music-artist for a movie;;Entity\n"
- "DistributedBy;;;Y YT;;;Company the item is mainly distributed by ;;Entity\n"
- "OriginalSourceForm/DistributedBy;;;Y YT;;;Name of the person or organization who supplied the original subject;;Entity\n"
- "MasteredBy;;;Y YT;;;The engineer who mastered the content for a physical medium or for digital distribution.;;Entity\n"
- "EncodedBy;;;Y YT;;;Name of the person or organisation that encoded/ripped the audio file.;;Entity\n"
- "RemixedBy;;;Y YT;;;Name of the artist(s), that interpreted, remixed, or otherwise modified the item.;;Entity\n"
- "ProductionStudio;;;Y YT;;;Main production studio ;;Entity\n"
- "ThanksTo;;;Y YT;;;A very general tag for everyone else that wants to be listed.;;Entity\n"
- "Publisher;;;Y YT;;;Name of the organization publishing the album (i.e. the 'record label') or movie.;;Entity\n"
- "Publisher/URL;;;Y YT;;;Publishers official webpage.;;Entity\n"
- "Label;;;Y YT;;;Brand or trademark associated with the marketing of music recordings and music videos.;;Entity\n"
- "Genre;;;Y YT;;;The main genre of the audio or video. e.g. classical, ambient-house, synthpop, sci-fi, drama, etc.;;Classification\n"
- "Mood;;;Y YT;;;Intended to reflect the mood of the item with a few keywords, e.g. Romantic, Sad, Uplifting, etc.;;Classification\n"
- "ContentType;;;Y YT;;;The type of the item. e.g. Documentary, Feature Film, Cartoon, Music Video, Music, Sound FX, etc.;;Classification\n"
- "Subject;;;Y YT;;;Describes the topic of the file, such as Aerial view of Seattle..;;Classification\n"
- "Description;;;Y YT;;;A short description of the contents, such as Two birds flying.;;Classification\n"
- "Keywords;;;Y YT;;;Keywords to the item separated by a comma, used for searching.;;Classification\n"
- "Summary;;;Y YT;;;A plot outline or a summary of the story.;;Classification\n"
- "Synopsis;;;Y YT;;;A description of the story line of the item.;;Classification\n"
- "Period;;;Y YT;;;Describes the period that the piece is from or about. e.g. Renaissance.;;Classification\n"
- "LawRating;;;Y YT;;;Depending on the country it's the format of the rating of a movie (P, R, X in the USA, an age in other countries or a URI defining a logo).;;Classification\n"
- "LawRating_Reason;;;Y YT;;;Reason for the law rating;;Classification\n"
- "ICRA;;;Y YT;;;The ICRA rating. (Previously RSACi);;Classification\n"
- "Released_Date;;;Y YT;;;The date/year that the item was released.;;Temporal\n"
- "Original/Released_Date;;;Y YT;;;The date/year that the item was originaly released.;;Temporal\n"
- "Recorded_Date;;;Y YT;;;The time/date/year that the recording began.;;Temporal\n"
- "Encoded_Date;;;Y YT;;;The time/date/year that the encoding of this item was completed began.;;Temporal\n"
- "Tagged_Date;;;Y YT;;;The time/date/year that the tags were done for this item.;;Temporal\n"
- "Written_Date;;;Y YT;;;The time/date/year that the composition of the music/script began.;;Temporal\n"
- "Mastered_Date;;;Y YT;;;The time/date/year that the item was tranfered to a digitalmedium.;;Temporal\n"
- "File_Created_Date;;;N NT;;;The time that the file was created on the file system;;Temporal\n"
- "File_Created_Date_Local;;;N NT;;;The time that the file was created on the file system (Warning: this field depends of local configuration, do not use it in an international database);;Temporal\n"
- "File_Modified_Date;;;N NT;;;The time that the file was modified on the file system;;Temporal\n"
- "File_Modified_Date_Local;;;N NT;;;The time that the file was modified on the file system (Warning: this field depends of local configuration, do not use it in an international database);;Temporal\n"
- "Recorded_Location;;;Y YT;;;Location where track was recorded. (See COMPOSITION_LOCATION for format);;Spatial\n"
- "Written_Location;;;Y YT;;;Location that the item was originaly designed/written. Information should be stored in the following format: country code, state/province, city where the coutry code is the same 2 octets as in Internet domains, or possibly ISO-3166. e.g. US, Texas, Austin or US, , Austin.;;Spatial\n"
- "Archival_Location;;;Y YT;;;Location, where an item is archived, e.eg. Louvre,Paris,France;;Spatial\n"
- "Encoded_Application;;;Y YT;;;Name of the software package used to create the file, such as Microsoft WaveEdit.;;Technical\n"
- "Encoded_Application/Url;;;N YT;;;Name of the software package used to create the file, such as Microsoft WaveEdit.;;Technical\n"
- "Encoded_Library;;;N YT;;;Software used to create the file;;Technical\n"
- "Encoded_Library/String;;;Y NT;;;Software used to create the file;;Technical\n"
- "Encoded_Library/Name;;;N NT;;;Name of the the encoding-software;;Technical\n"
- "Encoded_Library/Version;;;N NT;;;Version of encoding-software;;Technical\n"
- "Encoded_Library/Date;;;N NT;;;Release date of software;;Technical\n"
- "Encoded_Library_Settings;;;Y YT;;;Parameters used by the software;;Technical\n"
- "Cropped;;;Y YT;;;Describes whether an image has been cropped and, if so, how it was cropped.;;Technical\n"
- "Dimensions;;;Y YT;;;Specifies the size of the original subject of the file. eg 8.5 in h, 11 in w;;Technical\n"
- "DotsPerInch;;;Y YT;;;Stores dots per inch setting of the digitizer used to produce the file;;Technical\n"
- "Lightness;;;Y YT;;;Describes the changes in lightness settings on the digitizer required to produce the file;;Technical\n"
- "OriginalSourceMedium;;;Y YT;;;Original medium of the material, e.g. vinyl, Audio-CD, Super8 or BetaMax;;Technical\n"
- "OriginalSourceForm;;;Y YT;;;Original form of the material, e.g. slide, paper, map;;Technical\n"
- "OriginalSourceForm/NumColors;;;Y YT;;;Number of colors requested when digitizing, e.g. 256 for images or 32 bit RGB for video;;Technical\n"
- "OriginalSourceForm/Name;;;Y YT;;;Name of the product the file was originally intended for;;Technical\n"
- "OriginalSourceForm/Cropped;;;Y YT;;;Describes whether an image has been cropped and, if so, how it was cropped. e.g. 16:9 to 4:3, top and bottom;;Technical\n"
- "OriginalSourceForm/Sharpness;;;Y YT;;;Identifies the changes in sharpness for the digitizer requiered to produce the file;;Technical\n"
- "Tagged_Application;;;Y YT;;;Software used to tag this file;;Technical\n"
- "BPM;;;Y YT;;;Average number of beats per minute;;Technical\n"
- "ISRC;;;Y YT;;;International Standard Recording Code, excluding the ISRC prefix and including hyphens.;;Identifier\n"
- "ISBN;;;Y YT;;;International Standard Book Number.;;Identifier\n"
- "BarCode;;;Y YT;;;EAN-13 (13-digit European Article Numbering) or UPC-A (12-digit Universal Product Code) bar code identifier.;;Identifier\n"
- "LCCN;;;Y YT;;;Library of Congress Control Number.;;Identifier\n"
- "CatalogNumber;;;Y YT;;;A label-specific catalogue number used to identify the release. e.g. TIC 01.;;Identifier\n"
- "LabelCode;;;Y YT;;;A 4-digit or 5-digit number to identify the record label, typically printed as (LC) xxxx or (LC) 0xxxx on CDs medias or covers, with only the number being stored.;;Identifier\n"
- "Owner;;;Y YT;;;Owner of the file;;Legal\n"
- "Copyright;;;Y YT;;;Copyright attribution.;;Legal\n"
- "Copyright/Url;;;Y YT;;;Link to a site with copyright/legal information.;;Legal\n"
- "Producer_Copyright;;;Y YT;;;The copyright information as per the productioncopyright holder.;;Legal\n"
- "TermsOfUse;;;Y YT;;;License information, e.g., All Rights Reserved,Any Use Permitted.;;Legal\n"
- "ServiceName;;;Y YT;;;;;Legal\n"
- "ServiceChannel;;;Y YT;;;;;Legal\n"
- "Service/Url;;;Y YT;;;;;Legal\n"
- "ServiceProvider;;;Y YT;;;;;Legal\n"
- "ServiceProviderr/Url;;;Y YT;;;;;Legal\n"
- "ServiceType;;;Y YT;;;;;Legal\n"
- "NetworkName;;;Y YT;;;;;Legal\n"
- "OriginalNetworkName;;;Y YT;;;;;Legal\n"
- "Country;;;Y YT;;;;;Legal\n"
- "TimeZone;;;Y YT;;;;;Legal\n"
- "Cover;;;Y YT;;;Is there a cover;;Info\n"
- "Cover_Description;;;Y YT;;;short descriptio, e.g. Earth in space;;Info\n"
- "Cover_Type;;;Y YT;;;;;Info\n"
- "Cover_Mime;;;Y YT;;;;;Info\n"
- "Cover_Data;;;N YT;;;Cover, in binary format encoded BASE64;;Info\n"
- "Lyrics;;;Y YT;;;Text of a song;;Info\n"
- "Comment;;;Y YT;;;Any comment related to the content.;;Personal\n"
- "Rating;;;Y YT;;;A numeric value defining how much a person likes the song/movie. The number is between 0 and 5 with decimal values possible (e.g. 2.7), 5(.0) being the highest possible rating.;;Personal\n"
- "Added_Date;;;Y YT;;;Date/year the item was added to the owners collection;;Personal\n"
- "Played_First_Date;;;Y YT;;;The date, the owner first played an item;;Personal\n"
- "Played_Last_Date;;;Y YT;;;The date, the owner last played an item;;Personal\n"
- "Played_Count;;;Y YI;;;Number of times an item was played;;Personal\n"
- "EPG_Positions_Begin;;;N YI;;;;\n"
- "EPG_Positions_End;;;N YI;;;;\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Video (ZtringListList &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Count;;;N NI;;;Count of objects available in this stream\n"
- "Status;;;N NI;;;bit field (0=IsAccepted, 1=IsFilled, 2=IsUpdated, 3=IsFinished)\n"
- "StreamCount;;;N NI;;;Count of streams of that kind available\n"
- "StreamKind;Video;;N NT;;;Stream type name\n"
- "StreamKind/String;;;N NT;;;Stream type name\n"
- "StreamKindID;;;N NI;;;Number of the stream (base=0)\n"
- "StreamKindPos;;;N NI;;;When multiple streams, number of the stream (base=1)\n"
- "StreamOrder;;;N YI;;;Stream order in the file, whatever is the kind of stream (base=0)\n"
- "FirstPacketOrder;;;N YI;;;Order of the first fully decodable packet met in the file, whatever is the kind of stream (base=0)\n"
- "Inform;;;N NT;;;Last **Inform** call\n"
- "ID;;;N YI;;;The ID for this stream in this file\n"
- "ID/String;;;Y NT;;;The ID for this stream in this file\n"
- "UniqueID;;;N YI;;;The unique ID for this stream, should be copied with stream copy\n"
- "UniqueID/String;;;Y NT;;;The unique ID for this stream, should be copied with stream copy\n"
- "MenuID;;;N YI;;;The menu ID for this stream in this file\n"
- "MenuID/String;;;Y NT;;;The menu ID for this stream in this file\n"
- "Format;;;Y YT;;;Format used\n"
- "Format/Info;;;Y NT;;;Info about Format\n"
- "Format/Url;;;N NT;;;Link\n"
- "Format_Commercial;;;N NT;;;Commercial name used by vendor for theses setings or Format field if there is no difference\n"
- "Format_Commercial_IfAny;;;Y YT;;;Commercial name used by vendor for theses setings if there is one\n"
- "Format_Version;;;Y YT;;;Version of this format\n"
- "Format_Profile;;;Y YT;;;Profile of the Format\n"
- "Format_Compression;;;N YT;;;Compression mode of the Format\n"
- "MultiView_BaseProfile;;;Y YT;;;Multiview, profile of the base stream\n"
- "MultiView_Count;;;Y YT;;;Multiview, count of views\n"
- "MultiView_Layout;;;Y YT;;;Multiview, how views are muxed in the container in case of it is not muxing in the stream\n"
- "Format_Settings;;;N YT;;;Settings needed for decoder used, summary\n"
- "Format_Settings_BVOP;;Yes;N YT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_BVOP/String;;;Y NT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_QPel;;Yes;N YT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_QPel/String;;;Y NT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_GMC;; warppoint;N YI;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_GMC/String;;;Y NT;;\n"
- "Format_Settings_Matrix;;;N YT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_Matrix/String;;;Y NT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_Matrix_Data;;;N NT;;;Matrix, in binary format encoded BASE64. Order = intra, non-intra, gray intra, gray non-intra\n"
- "Format_Settings_CABAC;;Yes;N YT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_CABAC/String;;;Y NT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_RefFrames;; frame;N YI;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_RefFrames/String;;;Y NT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_Pulldown;;;Y YT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_FrameMode;;;Y YT;;;Settings needed for decoder used, detailled\n"
- "Format_Settings_GOP;;;Y YT;;;Settings needed for decoder used, detailled (M=x N=y)\n"
- "Format_Settings_PictureStructure;;;Y YT;;;Settings needed for decoder used, detailled (Type of frame, and field/frame info)\n"
- "Format_Settings_Wrapping;;;Y YT;;;Wrapping mode (Frame wrapped or Clip wrapped)\n"
- "InternetMediaType;;;N YT;;;Internet Media Type (aka MIME Type, Content-Type)\n"
- "MuxingMode;;;Y YT;;;How this file is muxed in the container\n"
- "CodecID;;;Y YT;;;Codec ID (found in some containers);\n"
- "CodecID/String;;;Y NT;;;Codec ID (found in some containers);\n"
- "CodecID/Info;;;Y NT;;;Info on the codec\n"
- "CodecID/Hint;;;Y NT;;;Hint/popular name for this codec\n"
- "CodecID/Url;;;N NT;;;Homepage for more details about this codec\n"
- "CodecID_Description;;;Y YT;;;Manual description given by the container\n"
- "Codec;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/Family;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/Info;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/Url;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/CC;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Profile;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Description;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_PacketBitStream;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_BVOP;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_QPel;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_GMC;; warppoint;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_GMC/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_Matrix;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_Matrix_Data;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_CABAC;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec_Settings_RefFrames;;;N NT;;;Deprecated, do not use in new projects\n"
- "Duration;; ms;N YI;;;Play time of the stream in ms\n"
- "Duration/String;;;Y NT;;;Play time in format : XXx YYy only, YYy omited if zero\n"
- "Duration/String1;;;N NT;;;Play time in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration/String2;;;N NT;;;Play time in format : XXx YYy only, YYy omited if zero\n"
- "Duration/String3;;;N NT;;;Play time in format : HH:MM:SS.MMM\n"
- "Duration/String4;;;N NT;;;Play time in format : HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available)\n"
- "Duration_FirstFrame;; ms;N YI;;;Duration of the first frame if it is longer than others, in ms\n"
- "Duration_FirstFrame/String;;;Y NT;;;Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_FirstFrame/String1;;;N NT;;;Duration of the first frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration_FirstFrame/String2;;;N NT;;;Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_FirstFrame/String3;;;N NT;;;Duration of the first frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "Duration_LastFrame;; ms;N YI;;;Duration of the last frame if it is longer than others, in ms\n"
- "Duration_LastFrame/String;;;Y NT;;;Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_LastFrame/String1;;;N NT;;;Duration of the last frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration_LastFrame/String2;;;N NT;;;Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_LastFrame/String3;;;N NT;;;Duration of the last frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "Source_Duration;; ms;N YI;;;Source Play time of the stream;\n"
- "Source_Duration/String;;;Y NT;;;Source Play time in format : XXx YYy only, YYy omited if zero;\n"
- "Source_Duration/String1;;;N NT;;;Source Play time in format : HHh MMmn SSs MMMms, XX omited if zero;\n"
- "Source_Duration/String2;;;N NT;;;Source Play time in format : XXx YYy only, YYy omited if zero;\n"
- "Source_Duration/String3;;;N NT;;;Source Play time in format : HH:MM:SS.MMM;\n"
- "Source_Duration_FirstFrame;; ms;N YI;;;Source Duration of the first frame if it is longer than others, in ms\n"
- "Source_Duration_FirstFrame/String;;;Y NT;;;Source Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_FirstFrame/String1;;;N NT;;;Source Duration of the first frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Source_Duration_FirstFrame/String2;;;N NT;;;Source Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_FirstFrame/String3;;;N NT;;;Source Duration of the first frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "Source_Duration_LastFrame;; ms;N YI;;;Source Duration of the last frame if it is longer than others, in ms\n"
- "Source_Duration_LastFrame/String;;;Y NT;;;Source Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_LastFrame/String1;;;N NT;;;Source Duration of the last frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Source_Duration_LastFrame/String2;;;N NT;;;Source Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_LastFrame/String3;;;N NT;;;Source Duration of the last frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "BitRate_Mode;;;N YT;;;Bit rate mode (VBR, CBR)\n"
- "BitRate_Mode/String;;;Y NT;;;Bit rate mode (Variable, Cconstant)\n"
- "BitRate;; bps;N YF;;;Bit rate in bps\n"
- "BitRate/String;;;Y NT;;;Bit rate (with measurement)\n"
- "BitRate_Minimum;; bps;N YF;;;Minimum Bit rate in bps\n"
- "BitRate_Minimum/String;;;Y NT;;;Minimum Bit rate (with measurement)\n"
- "BitRate_Nominal;; bps;N YF;;;Nominal Bit rate in bps\n"
- "BitRate_Nominal/String;;;Y NT;;;Nominal Bit rate (with measurement)\n"
- "BitRate_Maximum;; bps;N YF;;;Maximum Bit rate in bps\n"
- "BitRate_Maximum/String;;;Y NT;;;Maximum Bit rate (with measurement)\n"
- "BitRate_Encoded;; bps;N YF;;;Encoded (with forced padding) bit rate in bps, if some container padding is present\n"
- "BitRate_Encoded/String;;;Y NT;;;Encoded (with forced padding) bit rate (with measurement), if some container padding is present\n"
- "Width;; pixel;N YI;;;Width (aperture size if present) in pixel\n"
- "Width/String;;;Y NT;;;Width (aperture size if present) with measurement (pixel)\n"
- "Width_Offset;; pixel;N YI;;;Offset between original width and displayed width (aperture size) in pixel\n"
- "Width_Offset/String;;;N NT;;;Offset between original width and displayed width (aperture size) in pixel\n"
- "Width_Original;; pixel;N YI;;;Original (in the raw stream) width in pixel\n"
- "Width_Original/String;;;Y NT;;;Original (in the raw stream) width with measurement (pixel)\n"
- "Height;; pixel;N YI;;;Height (aperture size if present) in pixel\n"
- "Height/String;;;Y NT;;;Height (aperture size if present) with measurement (pixel)\n"
- "Height_Offset;; pixel;N YI;;;Offset between original height and displayed height (aperture size) in pixel\n"
- "Height_Offset/String;;;N NT;;;Offset between original height and displayed height (aperture size) in pixel\n"
- "Height_Original;; pixel;N YI;;;Original (in the raw stream) height in pixel\n"
- "Height_Original/String;;;Y NT;;;Original (in the raw stream) height with measurement (pixel)\n"
- "PixelAspectRatio;;;N YF;;;Pixel Aspect ratio\n"
- "PixelAspectRatio/String;;;N NT;;;Pixel Aspect ratio\n"
- "PixelAspectRatio_Original;;;N YF;;;Original (in the raw stream) Pixel Aspect ratio\n"
- "PixelAspectRatio_Original/String;;;N NT;;;Original (in the raw stream) Pixel Aspect ratio\n"
- "DisplayAspectRatio;;;N YF;;;Display Aspect ratio\n"
- "DisplayAspectRatio/String;;;Y NT;;;Display Aspect ratio\n"
- "DisplayAspectRatio_Original;;;N YF;;;Original (in the raw stream) Display Aspect ratio\n"
- "DisplayAspectRatio_Original/String;;;Y NT;;;Original (in the raw stream) Display Aspect ratio\n"
- "ActiveFormatDescription;;;N YN;;;Active Format Description (AFD value)\n"
- "ActiveFormatDescription/String;;;Y NT;;;Active Format Description (text)\n"
- "ActiveFormatDescription_MuxingMode;;;N YT;;;Active Format Description (AFD value) muxing mode (Ancillary or Raw stream)\n"
- "Rotation;;;N YT;;;Rotation\n"
- "Rotation/String;;;Y NT;;;Rotation (if not horizontal)\n"
- "FrameRate_Mode;;;N YT;;;Frame rate mode (CFR, VFR)\n"
- "FrameRate_Mode/String;;;Y NT;;;Frame rate mode (Constant, Variable)\n"
- "FrameRate_Mode_Original;;;N YT;;;Original frame rate mode (CFR, VFR)\n"
- "FrameRate_Mode_Original/String;;;Y NT;;;Original frame rate mode (Constant, Variable)\n"
- "FrameRate;; fps;N YF;;;Frames per second\n"
- "FrameRate/String;;;Y NT;;;Frames per second (with measurement)\n"
- "FrameRate_Original;; fps;N YF;;;Original (in the raw stream) frames per second\n"
- "FrameRate_Original/String;;;Y NT;;;Original (in the raw stream) frames per second (with measurement)\n"
- "FrameRate_Minimum;; fps;N YF;;;Minimum Frames per second\n"
- "FrameRate_Minimum/String;;;Y NT;;;Minimum Frames per second (with measurement)\n"
- "FrameRate_Nominal;; fps;N YF;;;Nominal Frames per second\n"
- "FrameRate_Nominal/String;;;Y NT;;;Nominal Frames per second (with measurement)\n"
- "FrameRate_Maximum;; fps;N YF;;;Maximum Frames per second\n"
- "FrameRate_Maximum/String;;;Y NT;;;Maximum Frames per second (with measurement)\n"
- "FrameCount;;;N NI;;;Number of frames\n"
- "Source_FrameCount;;;N NI;;;Source Number of frames\n"
- "Standard;;;Y NT;;;NTSC or PAL\n"
- "Resolution;; bit;N NI;;;Deprecated, do not use in new projects\n"
- "Resolution/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "Colorimetry;;;N NT;;;Deprecated, do not use in new projects\n"
- "ColorSpace;;;Y YT;;\n"
- "ChromaSubsampling;;;Y YT;;\n"
- "BitDepth;; bit;N YI;;;16/24/32\n"
- "BitDepth/String;;;Y NT;;;16/24/32 bits\n"
- "ScanType;;;N YT;;\n"
- "ScanType/String;;;Y NT;;\n"
- "ScanType_Original;;;N YT;;\n"
- "ScanType_Original/String;;;Y NT;;\n"
- "ScanType_StoreMethod;;;N YT;;;;Separated fields or Interleaved fields\n"
- "ScanType_StoreMethod_FieldsPerBlock;;;N YT;;;;Count of fields per container block\n"
- "ScanType_StoreMethod/String;;;Y NT;;;;Separated fields or Interleaved fields\n"
- "ScanOrder;;;N YT;;;\n"
- "ScanOrder/String;;;Y NT;;;\n"
- "ScanOrder_Stored;;;N YT;;;;In case the stored order is not same as the display order\n"
- "ScanOrder_Stored/String;;;Y NT;;;;In case the stored order is not same as the display order\n"
- "ScanOrder_StoredDisplayedInverted;;;N NT;;;\n"
- "ScanOrder_Original;;;N YT;;;\n"
- "ScanOrder_Original/String;;;Y NT;;;\n"
- "Interlacement;;;N NT;;;Deprecated, do not use in new projects\n"
- "Interlacement/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "Compression_Mode;;;N YT;;;Compression mode (Lossy or Lossless)\n"
- "Compression_Mode/String;;;Y NT;;;Compression mode (Lossy or Lossless)\n"
- "Compression_Ratio;;;Y YF;;;Current stream size divided by uncompressed stream size;\n"
- "Bits-(Pixel*Frame);;;Y NF;;;bits/(Pixel*Frame) (like Gordian Knot)\n"
- "Delay;; ms;N NI;;;Delay fixed in the stream (relative) IN MS\n"
- "Delay/String;;;N NT;;;Delay with measurement\n"
- "Delay/String1;;;N NT;;;Delay with measurement\n"
- "Delay/String2;;;N NT;;;Delay with measurement\n"
- "Delay/String3;;;N NT;;;Delay in format : HH:MM:SS.MMM\n"
- "Delay/String4;;;N NT;;;Delay in format : HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available)\n"
- "Delay_Settings;;;N NT;;;Delay settings (in case of timecode for example)\n"
- "Delay_DropFrame;;;N NT;;;Delay drop frame\n"
- "Delay_Source;;;N NT;;;Delay source (Container or Stream or empty)\n"
- "Delay_Source/String;;;N NT;;;Delay source (Container or Stream or empty)\n"
- "Delay_Original;; ms;N NI;;;Delay fixed in the raw stream (relative) IN MS\n"
- "Delay_Original/String;;;N NT;;;Delay with measurement\n"
- "Delay_Original/String1;;;N NT;;;Delay with measurement\n"
- "Delay_Original/String2;;;N NT;;;Delay with measurement\n"
- "Delay_Original/String3;;;N NT;;;Delay in format: HH:MM:SS.MMM;\n"
- "Delay_Original/String4;;;N NT;;;Delay in format: HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available)\n"
- "Delay_Original_Settings;;;N NT;;;Delay settings (in case of timecode for example);\n"
- "Delay_Original_DropFrame;;;N NT;;;Delay drop frame info\n"
- "Delay_Original_Source;;;N NT;;;Delay source (Stream or empty)\n"
- "TimeStamp_FirstFrame;; ms;N YI;;;TimeStamp fixed in the stream (relative) IN MS\n"
- "TimeStamp_FirstFrame/String;;;Y NT;;;TimeStamp with measurement\n"
- "TimeStamp_FirstFrame/String1;;;N NT;;;TimeStamp with measurement\n"
- "TimeStamp_FirstFrame/String2;;;N NT;;;TimeStamp with measurement\n"
- "TimeStamp_FirstFrame/String3;;;N NT;;;TimeStamp in format : HH:MM:SS.MMM\n"
- "TimeCode_FirstFrame;;;Y YC;;;Time code in HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available) format\n"
- "TimeCode_Settings;;;Y YT;;;Time code settings\n"
- "TimeCode_Source;;;Y YT;;;Time code source (Container, Stream, SystemScheme1, SDTI, ANC...)\n"
- "StreamSize;; byte;N YI;;;Streamsize in bytes;\n"
- "StreamSize/String;;;Y NT;;;Streamsize in with percentage value;\n"
- "StreamSize/String1;;;N NT;;;;\n"
- "StreamSize/String2;;;N NT;;;;\n"
- "StreamSize/String3;;;N NT;;;;\n"
- "StreamSize/String4;;;N NT;;;;\n"
- "StreamSize/String5;;;N NT;;;Streamsize in with percentage value;\n"
- "StreamSize_Proportion;;;N NT;;;Stream size divided by file size;\n"
- "Source_StreamSize;; byte;N YI;;;Source Streamsize in bytes;\n"
- "Source_StreamSize/String;;;Y NT;;;Source Streamsize in with percentage value;\n"
- "Source_StreamSize/String1;;;N NT;;;;\n"
- "Source_StreamSize/String2;;;N NT;;;;\n"
- "Source_StreamSize/String3;;;N NT;;;;\n"
- "Source_StreamSize/String4;;;N NT;;;;\n"
- "Source_StreamSize/String5;;;N NT;;;Source Streamsize in with percentage value;\n"
- "Source_StreamSize_Proportion;;;N NT;;;Source Stream size divided by file size;\n"
- "StreamSize_Encoded;; byte;N YI;;;Encoded Streamsize in bytes;\n"
- "StreamSize_Encoded/String;;;Y NT;;;Encoded Streamsize in with percentage value;\n"
- "StreamSize_Encoded/String1;;;N NT;;;;\n"
- "StreamSize_Encoded/String2;;;N NT;;;;\n"
- "StreamSize_Encoded/String3;;;N NT;;;;\n"
- "StreamSize_Encoded/String4;;;N NT;;;;\n"
- "StreamSize_Encoded/String5;;;N NT;;;Encoded Streamsize in with percentage value;\n"
- "StreamSize_Encoded_Proportion;;;N NT;;;Encoded Stream size divided by file size;\n"
- "Source_StreamSize_Encoded;; byte;N YI;;;Source Encoded Streamsize in bytes;\n"
- "Source_StreamSize_Encoded/String;;;Y NT;;;Source Encoded Streamsize in with percentage value;\n"
- "Source_StreamSize_Encoded/String1;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String2;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String3;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String4;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String5;;;N NT;;;Source Encoded Streamsize in with percentage value;\n"
- "Source_StreamSize_Encoded_Proportion;;;N NT;;;Source Encoded Stream size divided by file size;\n"
- "Alignment;;;Y NT;;;How this stream file is aligned in the container;\n"
- "Alignment/String;;;N YT;;;;\n"
- "Title;;;Y YI;;;Name of the track;\n"
- "Encoded_Application;;;Y YT;;;Software. Identifies the name of the software package used to create the file, such as Microsoft WaveEdit.;;Technical\n"
- "Encoded_Application/Url;;;N YT;;;Software. Identifies the name of the software package used to create the file, such as Microsoft WaveEdit.;;Technical\n"
- "Encoded_Library;;;N YT;;;Software used to create the file;\n"
- "Encoded_Library/String;;;Y NT;;;Software used to create the file;\n"
- "Encoded_Library/Name;;;N NT;;;Info from the software;\n"
- "Encoded_Library/Version;;;N NT;;;Version of software;\n"
- "Encoded_Library/Date;;;N NT;;;Release date of software;\n"
- "Encoded_Library_Settings;;;Y YT;;;Parameters used by the software;\n"
- "Language;;;N YT;;;Language (2-letter ISO 639-1 if exists, else 3-letter ISO 639-2, and with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn);\n"
- "Language/String;;;Y NT;;;Language (full);\n"
- "Language/String1;;;N NT;;;Language (full);\n"
- "Language/String2;;;N NT;;;Language (2-letter ISO 639-1 if exists, else empty);\n"
- "Language/String3;;;N NT;;;Language (3-letter ISO 639-2 if exists, else empty);\n"
- "Language/String4;;;N NT;;;Language (2-letter ISO 639-1 if exists with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn, else empty);\n"
- "Language_More;;;Y YT;;;More info about Language (e.g. Director's Comment);\n"
- "Default;;Yes;N YT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Default/String;;;Y NT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Forced;;Yes;N YT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Forced/String;;;Y NT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Encoded_Date;;;Y YT;;;UTC time that the encoding of this item was completed began.;;Temporal\n"
- "Tagged_Date;;;Y YT;;;UTC time that the tags were done for this item.;;Temporal\n"
- "Encryption;;;Y YT;;;;\n"
- "BufferSize;;;N YT;;;Defines the size of the buffer needed to decode the sequence.\n"
- "colour_description_present;;;N YT;;;Presence of colour description\n"
- "colour_primaries;;;Y YT;;;Chromaticity coordinates of the source primaries\n"
- "transfer_characteristics;;;Y YT;;;Opto-electronic transfer characteristic of the source picture\n"
- "matrix_coefficients;;;Y YT;;;Matrix coefficients used in deriving luma and chroma signals from the green, blue, and red primaries\n"
- "colour_description_present_Original;;;N YT;;;Presence of colour description\n"
- "colour_primaries_Original;;;Y YT;;;Chromaticity coordinates of the source primaries\n"
- "transfer_characteristics_Original;;;Y YT;;;Opto-electronic transfer characteristic of the source picture\n"
- "matrix_coefficients_Original;;;Y YT;;;Matrix coefficients used in deriving luma and chroma signals from the green, blue, and red primaries\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Audio (ZtringListList &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Count;;;N NI;;;Count of objects available in this stream\n"
- "Status;;;N NI;;;bit field (0=IsAccepted, 1=IsFilled, 2=IsUpdated, 3=IsFinished)\n"
- "StreamCount;;;N NI;;;Count of streams of that kind available\n"
- "StreamKind;Audio;;N NT;;;Stream type name;\n"
- "StreamKind/String;;;N NT;;;Stream type name\n"
- "StreamKindID;;;N NI;;;Number of the stream (base=0)\n"
- "StreamKindPos;;;N NI;;;When multiple streams, number of the stream (base=1)\n"
- "StreamOrder;;;N YI;;;Stream order in the file, whatever is the kind of stream (base=0)\n"
- "FirstPacketOrder;;;N YI;;;Order of the first fully decodable packet met in the file, whatever is the kind of stream (base=0)\n"
- "Inform;;;N NT;;;Last **Inform** call\n"
- "ID;;;N YI;;;The ID for this stream in this file\n"
- "ID/String;;;Y NT;;;The ID for this stream in this file\n"
- "UniqueID;;;N YI;;;The unique ID for this stream, should be copied with stream copy\n"
- "UniqueID/String;;;Y NT;;;The unique ID for this stream, should be copied with stream copy\n"
- "MenuID;;;N YI;;;The menu ID for this stream in this file\n"
- "MenuID/String;;;Y NT;;;The menu ID for this stream in this file\n"
- "Format;;;Y YT;;;Format used;\n"
- "Format/Info;;;Y NT;;;Info about the format;\n"
- "Format/Url;;;N NT;;;Homepage of this format;\n"
- "Format_Commercial;;;N YT;;;Commercial name used by vendor for theses setings or Format field if there is no difference;\n"
- "Format_Commercial_IfAny;;;Y YT;;;Commercial name used by vendor for theses setings if there is one;\n"
- "Format_Version;;;Y YT;;;Version of this format;\n"
- "Format_Profile;;;Y YT;;;Profile of this Format;\n"
- "Format_Compression;;;Y YT;;;Compression method used;\n"
- "Format_Settings;;;N YT;;;Settings needed for decoder used, summary;\n"
- "Format_Settings_SBR;;Yes;N YT;;;;\n"
- "Format_Settings_SBR/String;;;N NT;;;;\n"
- "Format_Settings_PS;;Yes;N YT;;;;\n"
- "Format_Settings_PS/String;;;N NT;;;;\n"
- "Format_Settings_Mode;;;Y YT;;;;\n"
- "Format_Settings_ModeExtension;;;Y YT;;;;\n"
- "Format_Settings_Emphasis;;;Y YT;;;;\n"
- "Format_Settings_Floor;;;Y YT;;;;\n"
- "Format_Settings_Firm;;;Y YT;;;;\n"
- "Format_Settings_Endianness;;;Y YT;;;;\n"
- "Format_Settings_Sign;;;Y YT;;;;\n"
- "Format_Settings_Law;;;Y YT;;;;\n"
- "Format_Settings_ITU;;;Y YT;;;;\n"
- "Format_Settings_Wrapping;;;Y YT;;;Wrapping mode (Frame wrapped or Clip wrapped)\n"
- "Matrix_Format;;;Y YI;;;Matrix format (e.g. DTS Neural);\n"
- "InternetMediaType;;;N YT;;;Internet Media Type (aka MIME Type, Content-Type);\n"
- "MuxingMode;;;Y YT;;;How this stream is muxed in the container;\n"
- "MuxingMode_MoreInfo;;;Y NT;;;More info (text) about the muxing mode;\n"
- "CodecID;;;Y YT;;;Codec ID (found in some containers);\n"
- "CodecID/String;;;Y NT;;;Codec ID (found in some containers);\n"
- "CodecID/Info;;;Y NT;;;Info about codec ID;\n"
- "CodecID/Hint;;;Y NT;;;Hint/popular name for this codec ID;\n"
- "CodecID/Url;;;N NT;;;Homepage for more details about this codec ID;\n"
- "CodecID_Description;;;Y YT;;;Manual description given by the container;\n"
- "Codec;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec/String;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec/Family;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec/Info;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec/Url;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec/CC;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Description;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Profile;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Settings;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Settings_Automatic;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Settings_Floor;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Settings_Firm;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Settings_Endianness;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Settings_Sign;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Settings_Law;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Codec_Settings_ITU;;;N NT;;;Deprecated, do not use in new projects;\n"
- "Duration;; ms;N YI;;;Play time of the stream;\n"
- "Duration/String;;;Y NT;;;Play time in format : XXx YYy only, YYy omited if zero;\n"
- "Duration/String1;;;N NT;;;Play time in format : HHh MMmn SSs MMMms, XX omited if zero;\n"
- "Duration/String2;;;N NT;;;Play time in format : XXx YYy only, YYy omited if zero;\n"
- "Duration/String3;;;N NT;;;Play time in format : HH:MM:SS.MMM;\n"
- "Duration_FirstFrame;; ms;N YI;;;Duration of the first frame if it is longer than others, in ms\n"
- "Duration_FirstFrame/String;;;Y NT;;;Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_FirstFrame/String1;;;N NT;;;Duration of the first frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration_FirstFrame/String2;;;N NT;;;Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_FirstFrame/String3;;;N NT;;;Duration of the first frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "Duration_LastFrame;; ms;N YI;;;Duration of the last frame if it is longer than others, in ms\n"
- "Duration_LastFrame/String;;;Y NT;;;Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_LastFrame/String1;;;N NT;;;Duration of the last frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration_LastFrame/String2;;;N NT;;;Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_LastFrame/String3;;;N NT;;;Duration of the last frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "Source_Duration;; ms;N YI;;;Source Play time of the stream;\n"
- "Source_Duration/String;;;Y NT;;;Source Play time in format : XXx YYy only, YYy omited if zero;\n"
- "Source_Duration/String1;;;N NT;;;Source Play time in format : HHh MMmn SSs MMMms, XX omited if zero;\n"
- "Source_Duration/String2;;;N NT;;;Source Play time in format : XXx YYy only, YYy omited if zero;\n"
- "Source_Duration/String3;;;N NT;;;Source Play time in format : HH:MM:SS.MMM;\n"
- "Source_Duration_FirstFrame;; ms;N YI;;;Source Duration of the first frame if it is longer than others, in ms\n"
- "Source_Duration_FirstFrame/String;;;Y NT;;;Source Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_FirstFrame/String1;;;N NT;;;Source Duration of the first frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Source_Duration_FirstFrame/String2;;;N NT;;;Source Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_FirstFrame/String3;;;N NT;;;Source Duration of the first frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "Source_Duration_LastFrame;; ms;N YI;;;Source Duration of the last frame if it is longer than others, in ms\n"
- "Source_Duration_LastFrame/String;;;Y NT;;;Source Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_LastFrame/String1;;;N NT;;;Source Duration of the last frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Source_Duration_LastFrame/String2;;;N NT;;;Source Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_LastFrame/String3;;;N NT;;;Source Duration of the last frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "BitRate_Mode;;;N YT;;;Bit rate mode (VBR, CBR);\n"
- "BitRate_Mode/String;;;Y NT;;;Bit rate mode (Constant, Variable);\n"
- "BitRate;; bps;N YF;;;Bit rate in bps;\n"
- "BitRate/String;;;Y NT;;;Bit rate (with measurement);\n"
- "BitRate_Minimum;; bps;N YF;;;Minimum Bit rate in bps;\n"
- "BitRate_Minimum/String;;;Y NT;;;Minimum Bit rate (with measurement);\n"
- "BitRate_Nominal;; bps;N YF;;;Nominal Bit rate in bps;\n"
- "BitRate_Nominal/String;;;Y NT;;;Nominal Bit rate (with measurement);\n"
- "BitRate_Maximum;; bps;N YF;;;Maximum Bit rate in bps;\n"
- "BitRate_Maximum/String;;;Y NT;;;Maximum Bit rate (with measurement);\n"
- "BitRate_Encoded;; bps;N YF;;;Encoded (with forced padding) bit rate in bps, if some container padding is present\n"
- "BitRate_Encoded/String;;;Y NT;;;Encoded (with forced padding) bit rate (with measurement), if some container padding is present\n"
- "Channel(s);; channel;N YI;;;Number of channels;\n"
- "Channel(s)/String;;;Y NT;;;Number of channels (with measurement);\n"
- "Channel(s)_Original;; channel;N YI;;;Number of channels;\n"
- "Channel(s)_Original/String;;;Y NT;;;Number of channels (with measurement);\n"
- "Matrix_Channel(s);; channel;N YI;;;Number of channels after matrix decoding;\n"
- "Matrix_Channel(s)/String;;;Y NT;;;Number of channels after matrix decoding (with measurement);\n"
- "ChannelPositions;;;Y YT;;;Position of channels;\n"
- "ChannelPositions/String2;;;N NT;;;Position of channels (x/y.z format);\n"
- "Matrix_ChannelPositions;;;Y YT;;;Position of channels after matrix decoding;\n"
- "Matrix_ChannelPositions/String2;;;N NT;;;Position of channels after matrix decoding (x/y.z format);\n"
- "ChannelLayout;;;N YT;;;Layout of channels (in the stream);\n"
- "ChannelLayoutID;;;N YT;;;ID of layout of channels (e.g. MXF descriptor channel assignment). Warning, sometimes this is not enough for uniquely identifying a layout (e.g. MXF descriptor channel assignment is SMPTE 377-4). For AC-3, the form is x,y with x=acmod and y=lfeon.;\n"
- "SamplingRate;; Hz;N YF;;;Sampling rate;\n"
- "SamplingRate/String;;;Y NT;;;in KHz;\n"
- "SamplingCount;;;N NI;;;Sample count (based on sampling rate);\n"
- "Source_SamplingCount;;;N NI;;;Source Sample count (based on sampling rate);\n"
- "FrameRate;; fps;N YF;;;Frames per second\n"
- "FrameRate/String;;;N NT;;;Frames per second (with measurement)\n"
- "FrameCount;;;N NI;;;Frame count (a frame contains a count of samples depends of the format);\n"
- "Source_FrameCount;;;N NI;;;Source Frame count (a frame contains a count of samples depends of the format);\n"
- "Resolution;; bit;N NI;;;Deprecated, do not use in new projects;\n"
- "Resolution/String;;;N NT;;;Deprecated, do not use in new projects;\n"
- "BitDepth;; bit;N YI;;;Resolution in bits (8, 16, 20, 24). Note: significant bits in case the stored bit depth is different;\n"
- "BitDepth/String;;;Y NT;;;Resolution in bits (8, 16, 20, 24). Note: significant bits in case the stored bit depth is different;\n"
- "BitDepth_Stored;; bit;N YI;;;Stored Resolution in bits (8, 16, 20, 24);\n"
- "BitDepth_Stored/String;;;Y NT;;;Stored Resolution in bits (8, 16, 20, 24);\n"
- "Compression_Mode;;;N YT;;;Compression mode (Lossy or Lossless)\n"
- "Compression_Mode/String;;;Y NT;;;Compression mode (Lossy or Lossless)\n"
- "Compression_Ratio;;;Y YF;;;Current stream size divided by uncompressed stream size;\n"
- "Delay;; ms;N NI;;;Delay fixed in the stream (relative) IN MS\n"
- "Delay/String;;;N NT;;;Delay with measurement\n"
- "Delay/String1;;;N NT;;;Delay with measurement\n"
- "Delay/String2;;;N NT;;;Delay with measurement\n"
- "Delay/String3;;;N NT;;;Delay in format : HH:MM:SS.MMM\n"
- "Delay/String4;;;N NT;;;Delay in format : HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available)\n"
- "Delay_Settings;;;N NT;;;Delay settings (in case of timecode for example)\n"
- "Delay_DropFrame;;;N NT;;;Delay drop frame\n"
- "Delay_Source;;;N NT;;;Delay source (Container or Stream or empty)\n"
- "Delay_Source/String;;;N NT;;;Delay source (Container or Stream or empty)\n"
- "Delay_Original;; ms;N NI;;;Delay fixed in the raw stream (relative) IN MS\n"
- "Delay_Original/String;;;N NT;;;Delay with measurement\n"
- "Delay_Original/String1;;;N NT;;;Delay with measurement\n"
- "Delay_Original/String2;;;N NT;;;Delay with measurement\n"
- "Delay_Original/String3;;;N NT;;;Delay in format: HH:MM:SS.MMM;\n"
- "Delay_Original/String4;;;N NT;;;Delay in format: HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available)\n"
- "Delay_Original_Settings;;;N NT;;;Delay settings (in case of timecode for example);\n"
- "Delay_Original_DropFrame;;;N NT;;;Delay drop frame info\n"
- "Delay_Original_Source;;;N NT;;;Delay source (Stream or empty)\n"
- "Video_Delay;; ms;N NI;;;Delay fixed in the stream (absolute / video)\n"
- "Video_Delay/String;;;Y NT;;\n"
- "Video_Delay/String1;;;N NT;;\n"
- "Video_Delay/String2;;;N NT;;\n"
- "Video_Delay/String3;;;N NT;;\n"
- "Video_Delay/String4;;;N NT;;\n"
- "Video0_Delay;; ms;N NI;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String1;;;N NT;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String2;;;N NT;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String3;;;N NT;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String4;;;N NT;;;Deprecated, do not use in new projects\n"
- "ReplayGain_Gain;; dB;N YT;;;The gain to apply to reach 89dB SPL on playback;\n"
- "ReplayGain_Gain/String;;;Y YT;;;;\n"
- "ReplayGain_Peak;;;Y YT;;;The maximum absolute peak value of the item;\n"
- "StreamSize;; byte;N YI;;;Streamsize in bytes;\n"
- "StreamSize/String;;;Y NT;;;Streamsize in with percentage value;\n"
- "StreamSize/String1;;;N NT;;;;\n"
- "StreamSize/String2;;;N NT;;;;\n"
- "StreamSize/String3;;;N NT;;;;\n"
- "StreamSize/String4;;;N NT;;;;\n"
- "StreamSize/String5;;;N NT;;;Streamsize in with percentage value;\n"
- "StreamSize_Proportion;;;N NT;;;Stream size divided by file size;\n"
- "Source_StreamSize;; byte;N YI;;;Source Streamsize in bytes;\n"
- "Source_StreamSize/String;;;Y NT;;;Source Streamsize in with percentage value;\n"
- "Source_StreamSize/String1;;;N NT;;;;\n"
- "Source_StreamSize/String2;;;N NT;;;;\n"
- "Source_StreamSize/String3;;;N NT;;;;\n"
- "Source_StreamSize/String4;;;N NT;;;;\n"
- "Source_StreamSize/String5;;;N NT;;;Source Streamsize in with percentage value;\n"
- "Source_StreamSize_Proportion;;;N NT;;;Source Stream size divided by file size;\n"
- "StreamSize_Encoded;; byte;N YI;;;Encoded Streamsize in bytes;\n"
- "StreamSize_Encoded/String;;;Y NT;;;Encoded Streamsize in with percentage value;\n"
- "StreamSize_Encoded/String1;;;N NT;;;;\n"
- "StreamSize_Encoded/String2;;;N NT;;;;\n"
- "StreamSize_Encoded/String3;;;N NT;;;;\n"
- "StreamSize_Encoded/String4;;;N NT;;;;\n"
- "StreamSize_Encoded/String5;;;N NT;;;Encoded Streamsize in with percentage value;\n"
- "StreamSize_Encoded_Proportion;;;N NT;;;Encoded Stream size divided by file size;\n"
- "Source_StreamSize_Encoded;; byte;N YI;;;Source Encoded Streamsize in bytes;\n"
- "Source_StreamSize_Encoded/String;;;Y NT;;;Source Encoded Streamsize in with percentage value;\n"
- "Source_StreamSize_Encoded/String1;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String2;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String3;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String4;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String5;;;N NT;;;Source Encoded Streamsize in with percentage value;\n"
- "Source_StreamSize_Encoded_Proportion;;;N NT;;;Source Encoded Stream size divided by file size;\n"
- "Alignment;;;N YT;;;How this stream file is aligned in the container;\n"
- "Alignment/String;;;Y NT;;;Where this stream file is aligned in the container;\n"
- "Interleave_VideoFrames;;;N YF;;;Between how many video frames the stream is inserted;\n"
- "Interleave_Duration;;;N YI;;;Between how much time (ms) the stream is inserted;\n"
- "Interleave_Duration/String;;;Y NT;;;Between how much time and video frames the stream is inserted (with measurement);\n"
- "Interleave_Preload;;;N YI;;;How much time is buffered before the first video frame;\n"
- "Interleave_Preload/String;;;Y NT;;;How much time is buffered before the first video frame (with measurement);\n"
- "Title;;;Y YI;;;Name of the track;\n"
- "Encoded_Library;;;N YT;;;Software used to create the file;\n"
- "Encoded_Library/String;;;Y NT;;;Software used to create the file;\n"
- "Encoded_Library/Name;;;N NT;;;Info from the software;\n"
- "Encoded_Library/Version;;;N NT;;;Version of software;\n"
- "Encoded_Library/Date;;;N NT;;;Release date of software;\n"
- "Encoded_Library_Settings;;;Y YT;;;Parameters used by the software;\n"
- "Language;;;N YT;;;Language (2-letter ISO 639-1 if exists, else 3-letter ISO 639-2, and with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn);\n"
- "Language/String;;;Y NT;;;Language (full);\n"
- "Language/String1;;;N NT;;;Language (full);\n"
- "Language/String2;;;N NT;;;Language (2-letter ISO 639-1 if exists, else empty);\n"
- "Language/String3;;;N NT;;;Language (3-letter ISO 639-2 if exists, else empty);\n"
- "Language/String4;;;N NT;;;Language (2-letter ISO 639-1 if exists with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn, else empty);\n"
- "Language_More;;;Y YT;;;More info about Language (e.g. Director's Comment);\n"
- "Default;;Yes;N YT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Default/String;;;Y NT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Forced;;Yes;N YT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Forced/String;;;Y NT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Encoded_Date;;;Y YT;;;UTC time that the encoding of this item was completed began.;;Temporal\n"
- "Tagged_Date;;;Y YT;;;UTC time that the tags were done for this item.;;Temporal\n"
- "Encryption;;;Y YT;;;;\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Text (ZtringListList &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Count;;;N NI;;;Count of objects available in this stream\n"
- "Status;;;N NI;;;bit field (0=IsAccepted, 1=IsFilled, 2=IsUpdated, 3=IsFinished)\n"
- "StreamCount;;;N NI;;;Count of streams of that kind available\n"
- "StreamKind;Text;;N NT;;;Stream type name\n"
- "StreamKind/String;;;N NT;;;Stream type name\n"
- "StreamKindID;;;N NI;;;Number of the stream (base=0)\n"
- "StreamKindPos;;;N NI;;;When multiple streams, number of the stream (base=1)\n"
- "StreamOrder;;;N YI;;;Stream order in the file, whatever is the kind of stream (base=0)\n"
- "FirstPacketOrder;;;N YI;;;Order of the first fully decodable packet met in the file, whatever is the kind of stream (base=0)\n"
- "Inform;;;N NT;;;Last **Inform** call\n"
- "ID;;;N YI;;;The ID for this stream in this file\n"
- "ID/String;;;Y NT;;;The ID for this stream in this file\n"
- "UniqueID;;;N YI;;;The unique ID for this stream, should be copied with stream copy\n"
- "UniqueID/String;;;Y NT;;;The unique ID for this stream, should be copied with stream copy\n"
- "MenuID;;;N YI;;;The menu ID for this stream in this file\n"
- "MenuID/String;;;Y NT;;;The menu ID for this stream in this file\n"
- "Format;;;Y YT;;;Format used\n"
- "Format/Info;;;Y NT;;;Info about Format\n"
- "Format/Url;;;N NT;;;Link\n"
- "Format_Commercial;;;N NT;;;Commercial name used by vendor for theses setings or Format field if there is no difference\n"
- "Format_Commercial_IfAny;;;Y YT;;;Commercial name used by vendor for theses setings if there is one\n"
- "Format_Version;;;Y NT;;;Version of this format\n"
- "Format_Profile;;;Y NT;;;Profile of the Format\n"
- "Format_Compression;;;Y NT;;;Compression method used;\n"
- "Format_Settings;;;Y NT;;;Settings needed for decoder used\n"
- "Format_Settings_Wrapping;;;Y YT;;;Wrapping mode (Frame wrapped or Clip wrapped)\n"
- "InternetMediaType;;;N YT;;;Internet Media Type (aka MIME Type, Content-Type)\n"
- "MuxingMode;;;Y YT;;;How this stream is muxed in the container\n"
- "MuxingMode_MoreInfo;;;Y NT;;;More info (text) about the muxing mode\n"
- "CodecID;;;Y YT;;;Codec ID (found in some containers);\n"
- "CodecID/String;;;Y NT;;;Codec ID (found in some containers);\n"
- "CodecID/Info;;;Y NT;;;Info about codec ID\n"
- "CodecID/Hint;;;Y NT;;;A hint for this codec ID\n"
- "CodecID/Url;;;N NT;;;A link for more details about this codec ID\n"
- "CodecID_Description;;;Y YT;;;Manual description given by the container\n"
- "Codec;;;N YT;;;Deprecated\n"
- "Codec/String;;;N NT;;;Deprecated\n"
- "Codec/Info;;;N NT;;;Deprecated\n"
- "Codec/Url;;;N NT;;;Deprecated\n"
- "Codec/CC;;;N NT;;;Deprecated\n"
- "Duration;; ms;N YI;;;Play time of the stream\n"
- "Duration/String;;;Y NT;;;Play time (formated)\n"
- "Duration/String1;;;N NT;;;Play time in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration/String2;;;N NT;;;Play time in format : XXx YYy only, YYy omited if zero\n"
- "Duration/String3;;;N NT;;;Play time in format : HH:MM:SS.MMM\n"
- "Duration/String4;;;N NT;;;Play time in format : HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available)\n"
- "Duration_FirstFrame;; ms;N YI;;;Duration of the first frame if it is longer than others, in ms\n"
- "Duration_FirstFrame/String;;;Y NT;;;Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_FirstFrame/String1;;;N NT;;;Duration of the first frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration_FirstFrame/String2;;;N NT;;;Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_FirstFrame/String3;;;N NT;;;Duration of the first frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "Duration_LastFrame;; ms;N YI;;;Duration of the last frame if it is longer than others, in ms\n"
- "Duration_LastFrame/String;;;Y NT;;;Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_LastFrame/String1;;;N NT;;;Duration of the last frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration_LastFrame/String2;;;N NT;;;Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Duration_LastFrame/String3;;;N NT;;;Duration of the last frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "Source_Duration;; ms;N YI;;;Source Play time of the stream;\n"
- "Source_Duration/String;;;Y NT;;;Source Play time in format : XXx YYy only, YYy omited if zero;\n"
- "Source_Duration/String1;;;N NT;;;Source Play time in format : HHh MMmn SSs MMMms, XX omited if zero;\n"
- "Source_Duration/String2;;;N NT;;;Source Play time in format : XXx YYy only, YYy omited if zero;\n"
- "Source_Duration/String3;;;N NT;;;Source Play time in format : HH:MM:SS.MMM;\n"
- "Source_Duration_FirstFrame;; ms;N YI;;;Source Duration of the first frame if it is longer than others, in ms\n"
- "Source_Duration_FirstFrame/String;;;Y NT;;;Source Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_FirstFrame/String1;;;N NT;;;Source Duration of the first frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Source_Duration_FirstFrame/String2;;;N NT;;;Source Duration of the first frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_FirstFrame/String3;;;N NT;;;Source Duration of the first frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "Source_Duration_LastFrame;; ms;N YI;;;Source Duration of the last frame if it is longer than others, in ms\n"
- "Source_Duration_LastFrame/String;;;Y NT;;;Source Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_LastFrame/String1;;;N NT;;;Source Duration of the last frame if it is longer than others, in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Source_Duration_LastFrame/String2;;;N NT;;;Source Duration of the last frame if it is longer than others, in format : XXx YYy only, YYy omited if zero\n"
- "Source_Duration_LastFrame/String3;;;N NT;;;Source Duration of the last frame if it is longer than others, in format : HH:MM:SS.MMM\n"
- "BitRate_Mode;;;N YT;;;Bit rate mode (VBR, CBR)\n"
- "BitRate_Mode/String;;;Y NT;;;Bit rate mode (Constant, Variable)\n"
- "BitRate;; bps;N YF;;;Bit rate in bps\n"
- "BitRate/String;;;Y NT;;;Bit rate (with measurement)\n"
- "BitRate_Minimum;; bps;N YF;;;Minimum Bit rate in bps\n"
- "BitRate_Minimum/String;;;Y NT;;;Minimum Bit rate (with measurement)\n"
- "BitRate_Nominal;; bps;N YF;;;Nominal Bit rate in bps\n"
- "BitRate_Nominal/String;;;Y NT;;;Nominal Bit rate (with measurement)\n"
- "BitRate_Maximum;; bps;N YF;;;Maximum Bit rate in bps\n"
- "BitRate_Maximum/String;;;Y NT;;;Maximum Bit rate (with measurement)\n"
- "BitRate_Encoded;; bps;N YF;;;Encoded (with forced padding) bit rate in bps, if some container padding is present\n"
- "BitRate_Encoded/String;;;Y NT;;;Encoded (with forced padding) bit rate (with measurement), if some container padding is present\n"
- "Width;; pixel;N YI;;;Width\n"
- "Width/String;;;Y NT;;\n"
- "Height;; pixel;N YI;;;Height\n"
- "Height/String;;;Y NT;;\n"
- "FrameRate_Mode;;;N YT;;;Frame rate mode (CFR, VFR)\n"
- "FrameRate_Mode/String;;;Y NT;;;Frame rate mode (Constant, Variable)\n"
- "FrameRate;; fps;N YF;;;Frames per second\n"
- "FrameRate/String;;;Y NT;;;Frames per second (with measurement)\n"
- "FrameRate_Minimum;; fps;N YF;;;Minimum Frames per second\n"
- "FrameRate_Minimum/String;;;Y NT;;;Minimum Frames per second (with measurement)\n"
- "FrameRate_Nominal;; fps;N YF;;;Nominal Frames per second\n"
- "FrameRate_Nominal/String;;;Y NT;;;Nominal Frames per second (with measurement)\n"
- "FrameRate_Maximum;; fps;N YF;;;Maximum Frames per second\n"
- "FrameRate_Maximum/String;;;Y NT;;;Maximum Frames per second (with measurement)\n"
- "FrameRate_Original;; fps;N YF;;;Original (in the raw stream) Frames per second\n"
- "FrameRate_Original/String;;;Y NT;;;Original (in the raw stream) Frames per second (with measurement)\n"
- "FrameCount;;;N NI;;;Number of frames\n"
- "Source_FrameCount;;;N NI;;;Source Number of frames\n"
- "ColorSpace;;;Y YT;;\n"
- "ChromaSubsampling;;;Y YT;;\n"
- "Resolution;; bit;N NI;;;Deprecated, do not use in new projects\n"
- "Resolution/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "BitDepth;; bit;N YI;;\n"
- "BitDepth/String;;;Y NT;;\n"
- "Compression_Mode;;;N YT;;;Compression mode (Lossy or Lossless)\n"
- "Compression_Mode/String;;;Y NT;;;Compression mode (Lossy or Lossless)\n"
- "Compression_Ratio;;;Y YF;;;Current stream size divided by uncompressed stream size;\n"
- "Delay;; ms;N NI;;;Delay fixed in the stream (relative) IN MS\n"
- "Delay/String;;;N NT;;;Delay with measurement\n"
- "Delay/String1;;;N NT;;;Delay with measurement\n"
- "Delay/String2;;;N NT;;;Delay with measurement\n"
- "Delay/String3;;;N NT;;;Delay in format : HH:MM:SS.MMM\n"
- "Delay/String4;;;N NT;;;Delay in format : HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available)\n"
- "Delay_Settings;;;N NT;;;Delay settings (in case of timecode for example)\n"
- "Delay_DropFrame;;;N NT;;;Delay drop frame\n"
- "Delay_Source;;;N NT;;;Delay source (Container or Stream or empty)\n"
- "Delay_Source/String;;;N NT;;;Delay source (Container or Stream or empty)\n"
- "Delay_Original;; ms;N NI;;;Delay fixed in the raw stream (relative) IN MS\n"
- "Delay_Original/String;;;N NT;;;Delay with measurement\n"
- "Delay_Original/String1;;;N NT;;;Delay with measurement\n"
- "Delay_Original/String2;;;N NT;;;Delay with measurement\n"
- "Delay_Original/String3;;;N NT;;;Delay in format: HH:MM:SS.MMM;\n"
- "Delay_Original/String4;;;N NT;;;Delay in format: HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available)\n"
- "Delay_Original_Settings;;;N NT;;;Delay settings (in case of timecode for example);\n"
- "Delay_Original_DropFrame;;;N NT;;;Delay drop frame info\n"
- "Delay_Original_Source;;;N NT;;;Delay source (Stream or empty)\n"
- "Video_Delay;; ms;N NI;;;Delay fixed in the stream (absolute / video)\n"
- "Video_Delay/String;;;Y NT;;\n"
- "Video_Delay/String1;;;N NT;;\n"
- "Video_Delay/String2;;;N NT;;\n"
- "Video_Delay/String3;;;N NT;;\n"
- "Video_Delay/String4;;;N NT;;\n"
- "Video0_Delay;; ms;N NI;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String1;;;N NT;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String2;;;N NT;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String3;;;N NT;;;Deprecated, do not use in new projects\n"
- "Video0_Delay/String4;;;N NT;;;Deprecated, do not use in new projects\n"
- "StreamSize;; byte;N YI;;;Streamsize in bytes;\n"
- "StreamSize/String;;;Y NT;;;Streamsize in with percentage value;\n"
- "StreamSize/String1;;;N NT;;;;\n"
- "StreamSize/String2;;;N NT;;;;\n"
- "StreamSize/String3;;;N NT;;;;\n"
- "StreamSize/String4;;;N NT;;;;\n"
- "StreamSize/String5;;;N NT;;;Streamsize in with percentage value;\n"
- "StreamSize_Proportion;;;N NT;;;Stream size divided by file size;\n"
- "Source_StreamSize;; byte;N YI;;;Source Streamsize in bytes;\n"
- "Source_StreamSize/String;;;Y NT;;;Source Streamsize in with percentage value;\n"
- "Source_StreamSize/String1;;;N NT;;;;\n"
- "Source_StreamSize/String2;;;N NT;;;;\n"
- "Source_StreamSize/String3;;;N NT;;;;\n"
- "Source_StreamSize/String4;;;N NT;;;;\n"
- "Source_StreamSize/String5;;;N NT;;;Source Streamsize in with percentage value;\n"
- "Source_StreamSize_Proportion;;;N NT;;;Source Stream size divided by file size;\n"
- "StreamSize_Encoded;; byte;N YI;;;Encoded Streamsize in bytes;\n"
- "StreamSize_Encoded/String;;;Y NT;;;Encoded Streamsize in with percentage value;\n"
- "StreamSize_Encoded/String1;;;N NT;;;;\n"
- "StreamSize_Encoded/String2;;;N NT;;;;\n"
- "StreamSize_Encoded/String3;;;N NT;;;;\n"
- "StreamSize_Encoded/String4;;;N NT;;;;\n"
- "StreamSize_Encoded/String5;;;N NT;;;Encoded Streamsize in with percentage value;\n"
- "StreamSize_Encoded_Proportion;;;N NT;;;Encoded Stream size divided by file size;\n"
- "Source_StreamSize_Encoded;; byte;N YI;;;Source Encoded Streamsize in bytes;\n"
- "Source_StreamSize_Encoded/String;;;Y NT;;;Source Encoded Streamsize in with percentage value;\n"
- "Source_StreamSize_Encoded/String1;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String2;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String3;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String4;;;N NT;;;;\n"
- "Source_StreamSize_Encoded/String5;;;N NT;;;Source Encoded Streamsize in with percentage value;\n"
- "Source_StreamSize_Encoded_Proportion;;;N NT;;;Source Encoded Stream size divided by file size;\n"
- "Title;;;Y YI;;;Name of the track\n"
- "Encoded_Library;;;N YT;;;Software used to create the file\n"
- "Encoded_Library/String;;;Y NT;;;Software used to create the file\n"
- "Encoded_Library/Name;;;N NT;;;Info from the software\n"
- "Encoded_Library/Version;;;N NT;;;Version of software\n"
- "Encoded_Library/Date;;;N NT;;;Release date of software\n"
- "Encoded_Library_Settings;;;Y YT;;;Parameters used by the software\n"
- "Language;;;N YT;;;Language (2-letter ISO 639-1 if exists, else 3-letter ISO 639-2, and with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn)\n"
- "Language/String;;;Y NT;;;Language (full)\n"
- "Language/String1;;;N NT;;;Language (full)\n"
- "Language/String2;;;N NT;;;Language (2-letter ISO 639-1 if exists, else empty)\n"
- "Language/String3;;;N NT;;;Language (3-letter ISO 639-2 if exists, else empty);\n"
- "Language/String4;;;N NT;;;Language (2-letter ISO 639-1 if exists with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn, else empty);\n"
- "Language_More;;;Y YT;;;More info about Language (e.g. Director's Comment);\n"
- "Default;;Yes;N YT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Default/String;;;Y NT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Forced;;Yes;N YT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Forced/String;;;Y NT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Summary;;;N NT;;;;\n"
- "Encoded_Date;;;Y YT;;;The time that the encoding of this item was completed began.;;Temporal\n"
- "Tagged_Date;;;Y YT;;;The time that the tags were done for this item.;;Temporal\n"
- "Encryption;;;Y YT;;;;\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Other (ZtringListList &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Count;;;N NI;;;Count of objects available in this stream\n"
- "Status;;;N NI;;;bit field (0=IsAccepted, 1=IsFilled, 2=IsUpdated, 3=IsFinished)\n"
- "StreamCount;;;N NI;;;Count of streams of that kind available\n"
- "StreamKind;Other;;N NT;;;Stream type name\n"
- "StreamKind/String;;;N NT;;;Stream type name\n"
- "StreamKindID;;;N NI;;;Number of the stream (base=0)\n"
- "StreamKindPos;;;N NI;;;When multiple streams, number of the stream (base=1)\n"
- "StreamOrder;;;N YI;;;Stream order in the file, whatever is the kind of stream (base=0)\n"
- "FirstPacketOrder;;;N YI;;;Order of the first fully decodable packet met in the file, whatever is the kind of stream (base=0)\n"
- "Inform;;;N NT;;;Last **Inform** call\n"
- "ID;;;N YI;;;The ID for this stream in this file\n"
- "ID/String;;;Y NT;;;The ID for this stream in this file\n"
- "UniqueID;;;N YI;;;The unique ID for this stream, should be copied with stream copy\n"
- "UniqueID/String;;;Y NT;;;The unique ID for this stream, should be copied with stream copy\n"
- "MenuID;;;N YI;;;The menu ID for this stream in this file\n"
- "MenuID/String;;;Y NT;;;The menu ID for this stream in this file\n"
- "Type;;;Y YT;;;Type\n"
- "Format;;;Y YT;;;Format used\n"
- "Format/Info;;;N NT;;;Info about Format\n"
- "Format/Url;;;N NT;;;Link\n"
- "Format_Commercial;;;N NT;;;Commercial name used by vendor for theses setings or Format field if there is no difference\n"
- "Format_Commercial_IfAny;;;Y YT;;;Commercial name used by vendor for theses setings if there is one\n"
- "Format_Version;;;Y NT;;;Version of this format\n"
- "Format_Profile;;;Y NT;;;Profile of the Format\n"
- "Format_Compression;;;Y NT;;;Compression method used;\n"
- "Format_Settings;;;Y NT;;;Settings needed for decoder used\n"
- "MuxingMode;;;Y YT;;;How this file is muxed in the container\n"
- "CodecID;;;Y YT;;;Codec ID (found in some containers);\n"
- "CodecID/String;;;Y NT;;;Codec ID (found in some containers);\n"
- "CodecID/Info;;;Y NT;;;Info about this codec\n"
- "CodecID/Hint;;;Y NT;;;A hint/popular name for this codec\n"
- "CodecID/Url;;;N NT;;;A link to more details about this codec ID\n"
- "CodecID_Description;;;Y YT;;;Manual description given by the container\n"
- "Duration;; ms;N YI;;;Play time of the stream in ms\n"
- "Duration/String;;;Y NT;;;Play time in format : XXx YYy only, YYy omited if zero\n"
- "Duration/String1;;;N NT;;;Play time in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration/String2;;;N NT;;;Play time in format : XXx YYy only, YYy omited if zero\n"
- "Duration/String3;;;N NT;;;Play time in format : HH:MM:SS.MMM\n"
- "Duration_Start;;;Y YT;;\n"
- "Duration_End;;;Y YT;;\n"
- "FrameRate;; fps;N YF;;;Frames per second\n"
- "FrameRate/String;;;Y NT;;;Frames per second (with measurement)\n"
- "FrameCount;;;N NI;;;Number of frames\n"
- "TimeStamp_FirstFrame;; ms;N YI;;;TimeStamp fixed in the stream (relative) IN MS\n"
- "TimeStamp_FirstFrame/String;;;Y NT;;;TimeStamp with measurement\n"
- "TimeStamp_FirstFrame/String1;;;N NT;;;TimeStamp with measurement\n"
- "TimeStamp_FirstFrame/String2;;;N NT;;;TimeStamp with measurement\n"
- "TimeStamp_FirstFrame/String3;;;N NT;;;TimeStamp in format : HH:MM:SS.MMM\n"
- "TimeCode_FirstFrame;;;Y YC;;;Time code in HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available) format\n"
- "TimeCode_Settings;;;Y YT;;;Time code settings\n"
- "Title;;;Y YI;;;Name of this menu\n"
- "Language;;;N YT;;;Language (2-letter ISO 639-1 if exists, else 3-letter ISO 639-2, and with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn)\n"
- "Language/String;;;Y NT;;;Language (full)\n"
- "Language/String1;;;N NT;;;Language (full);\n"
- "Language/String2;;;N NT;;;Language (2-letter ISO 639-1 if exists, else empty);\n"
- "Language/String3;;;N NT;;;Language (3-letter ISO 639-2 if exists, else empty);\n"
- "Language/String4;;;N NT;;;Language (2-letter ISO 639-1 if exists with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn, else empty);\n"
- "Language_More;;;Y YT;;;More info about Language (e.g. Director's Comment);\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Image (ZtringListList &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Count;;;N NI;;;Count of objects available in this stream\n"
- "Status;;;N NI;;;bit field (0=IsAccepted, 1=IsFilled, 2=IsUpdated, 3=IsFinished)\n"
- "StreamCount;;;N NI;;;Count of streams of that kind available\n"
- "StreamKind;Image;;N NT;;;Stream type name\n"
- "StreamKind/String;;;N NT;;;Stream type name\n"
- "StreamKindID;;;N NI;;;Number of the stream (base=0)\n"
- "StreamKindPos;;;N NI;;;When multiple streams, number of the stream (base=1)\n"
- "StreamOrder;;;N YI;;;Stream order in the file, whatever is the kind of stream (base=0)\n"
- "FirstPacketOrder;;;N YI;;;Order of the first fully decodable packet met in the file, whatever is the kind of stream (base=0)\n"
- "Inform;;;N NT;;;Last **Inform** call\n"
- "ID;;;N YI;;;The ID for this stream in this file\n"
- "ID/String;;;Y NT;;;The ID for this stream in this file\n"
- "UniqueID;;;N YI;;;The unique ID for this stream, should be copied with stream copy\n"
- "UniqueID/String;;;Y NT;;;The unique ID for this stream, should be copied with stream copy\n"
- "MenuID;;;N YI;;;The menu ID for this stream in this file\n"
- "MenuID/String;;;Y NT;;;The menu ID for this stream in this file\n"
- "Title;;;Y YI;;;Name of the track\n"
- "Format;;;Y YT;;;Format used\n"
- "Format/Info;;;Y NT;;;Info about Format\n"
- "Format/Url;;;N NT;;;Link\n"
- "Format_Commercial;;;N NT;;;Commercial name used by vendor for theses setings or Format field if there is no difference\n"
- "Format_Commercial_IfAny;;;Y YT;;;Commercial name used by vendor for theses setings if there is one\n"
- "Format_Version;;;Y NT;;;Version of this format\n"
- "Format_Profile;;;Y NT;;;Profile of the Format\n"
- "Format_Compression;;;N YT;;;Compression mode of the Format\n"
- "Format_Settings;;;Y NT;;;Settings needed for decoder used\n"
- "Format_Settings_Wrapping;;;Y YT;;;Wrapping mode (Frame wrapped or Clip wrapped)\n"
- "InternetMediaType;;;N YT;;;Internet Media Type (aka MIME Type, Content-Type)\n"
- "CodecID;;;Y YT;;;Codec ID (found in some containers);\n"
- "CodecID/String;;;Y NT;;;Codec ID (found in some containers);\n"
- "CodecID/Info;;;Y NT;;;Info about codec ID\n"
- "CodecID/Hint;;;Y NT;;;A hint for this codec ID\n"
- "CodecID/Url;;;N NT;;;A link for more details about this codec ID\n"
- "CodecID_Description;;;Y YT;;;Manual description given by the container\n"
- "Codec;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/Family;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/Info;;;N NT;;;Deprecated, do not use in new projects\n"
- "Codec/Url;;;N NT;;;Deprecated, do not use in new projects\n"
- "Width;; pixel;N YI;;;Width (aperture size if present) in pixel\n"
- "Width/String;;;Y NT;;;Width (aperture size if present) with measurement (pixel)\n"
- "Width_Offset;; pixel;N YI;;;Offset between original width and displayed width (aperture size) in pixel\n"
- "Width_Offset/String;;;N NT;;;Offset between original width and displayed width (aperture size) in pixel\n"
- "Width_Original;; pixel;N YI;;;Original (in the raw stream) width in pixel\n"
- "Width_Original/String;;;Y NT;;;Original (in the raw stream) width with measurement (pixel)\n"
- "Height;; pixel;N YI;;;Height (aperture size if present) in pixel\n"
- "Height/String;;;Y NT;;;Height (aperture size if present) with measurement (pixel)\n"
- "Height_Offset;; pixel;N YI;;;Offset between original height and displayed height (aperture size) in pixel\n"
- "Height_Offset/String;;;N NT;;;Offset between original height and displayed height (aperture size) in pixel\n"
- "Height_Original;; pixel;N YI;;;Original (in the raw stream) height in pixel\n"
- "Height_Original/String;;;Y NT;;;Original (in the raw stream) height with measurement (pixel)\n"
- "PixelAspectRatio;;;N YF;;;Pixel Aspect ratio\n"
- "PixelAspectRatio/String;;;N NT;;;Pixel Aspect ratio\n"
- "PixelAspectRatio_Original;;;N YF;;;Original (in the raw stream) Pixel Aspect ratio\n"
- "PixelAspectRatio_Original/String;;;N NT;;;Original (in the raw stream) Pixel Aspect ratio\n"
- "DisplayAspectRatio;;;N YF;;;Display Aspect ratio\n"
- "DisplayAspectRatio/String;;;Y NT;;;Display Aspect ratio\n"
- "DisplayAspectRatio_Original;;;N YF;;;Original (in the raw stream) Display Aspect ratio\n"
- "DisplayAspectRatio_Original/String;;;Y NT;;;Original (in the raw stream) Display Aspect ratio\n"
- "ColorSpace;;;Y YT;;\n"
- "ChromaSubsampling;;;Y YT;;\n"
- "Resolution;; bit;N NI;;;Deprecated, do not use in new projects\n"
- "Resolution/String;;;N NT;;;Deprecated, do not use in new projects\n"
- "BitDepth;; bit;N YI;;\n"
- "BitDepth/String;;;Y NT;;\n"
- "Compression_Mode;;;N YT;;;Compression mode (Lossy or Lossless)\n"
- "Compression_Mode/String;;;Y NT;;;Compression mode (Lossy or Lossless)\n"
- "Compression_Ratio;;;Y YF;;;Current stream size divided by uncompressed stream size;\n"
- "StreamSize;; byte;N YI;;;Stream size in bytes\n"
- "StreamSize/String;;;Y NT;;\n"
- "StreamSize/String1;;;N NT;;\n"
- "StreamSize/String2;;;N NT;;\n"
- "StreamSize/String3;;;N NT;;\n"
- "StreamSize/String4;;;N NT;;\n"
- "StreamSize/String5;;;N NT;;;With proportion;\n"
- "StreamSize_Proportion;;;N NT;;;Stream size divided by file size;\n"
- "Encoded_Library;;;N YT;;;Software used to create the file;\n"
- "Encoded_Library/String;;;Y NT;;;Software used to create the file;\n"
- "Encoded_Library/Name;;;N NT;;;Info from the software;\n"
- "Encoded_Library/Version;;;N NT;;;Version of software;\n"
- "Encoded_Library/Date;;;N NT;;;Release date of software;\n"
- "Encoded_Library_Settings;;;Y YT;;;Parameters used by the software;\n"
- "Language;;;N YT;;;Language (2-letter ISO 639-1 if exists, else 3-letter ISO 639-2, and with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn);\n"
- "Language/String;;;Y NT;;;Language (full);\n"
- "Language/String1;;;N NT;;;Language (full);\n"
- "Language/String2;;;N NT;;;Language (2-letter ISO 639-1 if exists, else empty);\n"
- "Language/String3;;;N NT;;;Language (3-letter ISO 639-2 if exists, else empty);\n"
- "Language/String4;;;N NT;;;Language (2-letter ISO 639-1 if exists with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn, else empty);\n"
- "Language_More;;;Y YT;;;More info about Language (e.g. Director's Comment);\n"
- "Default;;Yes;N YT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Default/String;;;Y NT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Forced;;Yes;N YT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Forced/String;;;Y NT;;;Set if that track should be used if no language found matches the user preference.\n"
- "Summary;;;N NT;;;;\n"
- "Encoded_Date;;;Y YT;;;The time that the encoding of this item was completed began.;;Temporal\n"
- "Tagged_Date;;;Y YT;;;The time that the tags were done for this item.;;Temporal\n"
- "Encryption;;;Y YT;;;;\n"
- "colour_description_present;;;N YT;;;Presence of colour description\n"
- "colour_primaries;;;Y YT;;;Chromaticity coordinates of the source primaries\n"
- "transfer_characteristics;;;Y YT;;;Opto-electronic transfer characteristic of the source picture\n"
- "matrix_coefficients;;;Y YT;;;Matrix coefficients used in deriving luma and chroma signals from the green, blue, and red primaries\n"
- "colour_description_present_Original;;;N YT;;;Presence of colour description\n"
- "colour_primaries_Original;;;Y YT;;;Chromaticity coordinates of the source primaries\n"
- "transfer_characteristics_Original;;;Y YT;;;Opto-electronic transfer characteristic of the source picture\n"
- "matrix_coefficients_Original;;;Y YT;;;Matrix coefficients used in deriving luma and chroma signals from the green, blue, and red primaries\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Menu (ZtringListList &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Count;;;N NI;;;Count of objects available in this stream\n"
- "Status;;;N NI;;;bit field (0=IsAccepted, 1=IsFilled, 2=IsUpdated, 3=IsFinished)\n"
- "StreamCount;;;N NI;;;Count of streams of that kind available\n"
- "StreamKind;Menu;;N NT;;;Stream type name\n"
- "StreamKind/String;;;N NT;;;Stream type name\n"
- "StreamKindID;;;N NI;;;Number of the stream (base=0)\n"
- "StreamKindPos;;;N NI;;;When multiple streams, number of the stream (base=1)\n"
- "StreamOrder;;;N YI;;;Stream order in the file, whatever is the kind of stream (base=0)\n"
- "FirstPacketOrder;;;N YI;;;Order of the first fully decodable packet met in the file, whatever is the kind of stream (base=0)\n"
- "Inform;;;N NT;;;Last **Inform** call\n"
- "ID;;;N YI;;;The ID for this stream in this file\n"
- "ID/String;;;Y NT;;;The ID for this stream in this file\n"
- "UniqueID;;;N YI;;;The unique ID for this stream, should be copied with stream copy\n"
- "UniqueID/String;;;Y NT;;;The unique ID for this stream, should be copied with stream copy\n"
- "MenuID;;;N YI;;;The menu ID for this stream in this file\n"
- "MenuID/String;;;Y NT;;;The menu ID for this stream in this file\n"
- "Format;;;N YT;;;Format used\n"
- "Format/Info;;;N NT;;;Info about Format\n"
- "Format/Url;;;N NT;;;Link\n"
- "Format_Commercial;;;N NT;;;Commercial name used by vendor for theses setings or Format field if there is no difference\n"
- "Format_Commercial_IfAny;;;Y YT;;;Commercial name used by vendor for theses setings if there is one\n"
- "Format_Version;;;Y NT;;;Version of this format\n"
- "Format_Profile;;;Y NT;;;Profile of the Format\n"
- "Format_Compression;;;Y NT;;;Compression method used;\n"
- "Format_Settings;;;Y NT;;;Settings needed for decoder used\n"
- "CodecID;;;Y YT;;;Codec ID (found in some containers);\n"
- "CodecID/String;;;Y NT;;;Codec ID (found in some containers);\n"
- "CodecID/Info;;;Y NT;;;Info about this codec\n"
- "CodecID/Hint;;;Y NT;;;A hint/popular name for this codec\n"
- "CodecID/Url;;;N NT;;;A link to more details about this codec ID\n"
- "CodecID_Description;;;Y YT;;;Manual description given by the container\n"
- "Codec;;;N YT;;;Deprecated\n"
- "Codec/String;;;N NT;;;Deprecated\n"
- "Codec/Info;;;N NT;;;Deprecated\n"
- "Codec/Url;;;N NT;;;Deprecated\n"
- "Duration;; ms;N YI;;;Play time of the stream in ms\n"
- "Duration/String;;;Y NT;;;Play time in format : XXx YYy only, YYy omited if zero\n"
- "Duration/String1;;;N NT;;;Play time in format : HHh MMmn SSs MMMms, XX omited if zero\n"
- "Duration/String2;;;N NT;;;Play time in format : XXx YYy only, YYy omited if zero\n"
- "Duration/String3;;;N NT;;;Play time in format : HH:MM:SS.MMM\n"
- "Duration_Start;;;Y YT;;\n"
- "Duration_End;;;Y YT;;\n"
- "Delay;; ms;N NI;;;Delay fixed in the stream (relative) IN MS\n"
- "Delay/String;;;N NT;;;Delay with measurement\n"
- "Delay/String1;;;N NT;;;Delay with measurement\n"
- "Delay/String2;;;N NT;;;Delay with measurement\n"
- "Delay/String3;;;N NT;;;Delay in format : HH:MM:SS.MMM\n"
- "Delay/String4;;;N NT;;;Delay in format : HH:MM:SS:FF (HH:MM:SS;FF for drop frame, if available)\n"
- "Delay_Settings;;;N NT;;;Delay settings (in case of timecode for example)\n"
- "Delay_DropFrame;;;N NT;;;Delay drop frame\n"
- "Delay_Source;;;N NT;;;Delay source (Container or Stream or empty)\n"
- "List_StreamKind;;;N YT;;;List of programs available\n"
- "List_StreamPos;;;N YT;;;List of programs available\n"
- "List;;;N YT;;;List of programs available\n"
- "List/String;;;Y NT;;;List of programs available\n"
- "Title;;;Y YI;;;Name of this menu\n"
- "Language;;;N YT;;;Language (2-letter ISO 639-1 if exists, else 3-letter ISO 639-2, and with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn)\n"
- "Language/String;;;Y NT;;;Language (full)\n"
- "Language/String1;;;N NT;;;Language (full);\n"
- "Language/String2;;;N NT;;;Language (2-letter ISO 639-1 if exists, else empty);\n"
- "Language/String3;;;N NT;;;Language (3-letter ISO 639-2 if exists, else empty);\n"
- "Language/String4;;;N NT;;;Language (2-letter ISO 639-1 if exists with optional ISO 3166-1 country separated by a dash if available, e.g. en, en-us, zh-cn, else empty);\n"
- "Language_More;;;Y YT;;;More info about Language (e.g. Director's Comment);\n"
- "ServiceName;;;Y YT;;;;;Legal\n"
- "ServiceChannel;;;Y YT;;;;;Legal\n"
- "Service/Url;;;Y YT;;;;;Legal\n"
- "ServiceProvider;;;Y YT;;;;;Legal\n"
- "ServiceProviderr/Url;;;Y YT;;;;;Legal\n"
- "ServiceType;;;Y YT;;;;;Legal\n"
- "NetworkName;;;Y YT;;;;;Legal\n"
- "Original/NetworkName;;;Y YT;;;;;Legal\n"
- "Countries;;;Y YT;;;;;Legal\n"
- "TimeZones;;;Y YT;;;;;Legal\n"
- "LawRating;;;Y YT;;;Depending on the country it's the format of the rating of a movie (P, R, X in the USA, an age in other countries or a URI defining a logo).;;Classification\n"
- "LawRating_Reason;;;Y YT;;;Reason for the law rating;;Classification\n"
- "Chapters_Pos_Begin;;;N NI;;;Used by third-party developers to know about the beginning of the chapters list, to be used by Get(Stream_Menu, x, Pos), where Pos is an Integer between Chapters_Pos_Begin and Chapters_Pos_End;\n"
- "Chapters_Pos_End;;;N NI;;;Used by third-party developers to know about the end of the chapters list (this position excluded)\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Iso639_1 (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "aar;aa\n"
- "abk;ab\n"
- "ave;ae\n"
- "afr;af\n"
- "aka;ak\n"
- "amh;am\n"
- "arg;an\n"
- "ara;ar\n"
- "asm;as\n"
- "ava;av\n"
- "aym;ay\n"
- "aze;az\n"
- "bak;ba\n"
- "bel;be\n"
- "bul;bg\n"
- "bih;bh\n"
- "bis;bi\n"
- "bam;bm\n"
- "ben;bn\n"
- "tib;bo\n"
- "tib;bo\n"
- "bre;br\n"
- "bos;bs\n"
- "cat;ca\n"
- "che;ce\n"
- "cha;ch\n"
- "cos;co\n"
- "cre;cr\n"
- "ces;cs\n"
- "cze;cs\n"
- "chu;cu\n"
- "chv;cv\n"
- "cym;cy\n"
- "wel;cy\n"
- "dan;da\n"
- "deu;de\n"
- "ger;de\n"
- "div;dv\n"
- "dzo;dz\n"
- "ewe;ee\n"
- "gre;el\n"
- "ell;el\n"
- "eng;en\n"
- "epo;eo\n"
- "spa;es\n"
- "est;et\n"
- "baq;eu\n"
- "eus;eu\n"
- "fas;fa\n"
- "per;fa\n"
- "ful;ff\n"
- "fin;fi\n"
- "fij;fj\n"
- "fao;fo\n"
- "fra;fr\n"
- "fre;fr\n"
- "fry;fy\n"
- "gle;ga\n"
- "gla;gd\n"
- "glg;gl\n"
- "grn;gn\n"
- "guj;gu\n"
- "glv;gv\n"
- "hau;ha\n"
- "heb;he\n"
- "hin;hi\n"
- "hmo;ho\n"
- "hrv;hr\n"
- "hrv;hr\n"
- "hat;ht\n"
- "hun;hu\n"
- "hye;hy\n"
- "arm;hy\n"
- "her;hz\n"
- "ina;ia\n"
- "ind;id\n"
- "ile;ie\n"
- "ibo;ig\n"
- "iii;ii\n"
- "ipk;ik\n"
- "ido;io\n"
- "ice;is\n"
- "isl;is\n"
- "ita;it\n"
- "iku;iu\n"
- "jpn;ja\n"
- "jav;jv\n"
- "geo;ka\n"
- "kat;ka\n"
- "kon;kg\n"
- "kik;ki\n"
- "kua;kj\n"
- "kaz;kk\n"
- "kal;kl\n"
- "khm;km\n"
- "kan;kn\n"
- "kor;ko\n"
- "kau;kr\n"
- "kas;ks\n"
- "kur;ku\n"
- "kom;kv\n"
- "cor;kw\n"
- "kir;ky\n"
- "lat;la\n"
- "ltz;lb\n"
- "lug;lg\n"
- "lim;li\n"
- "lin;ln\n"
- "lao;lo\n"
- "lit;lt\n"
- "lub;lu\n"
- "lav;lv\n"
- "mlg;mg\n"
- "mah;mh\n"
- "mao;mi\n"
- "mri;mi\n"
- "mac;mk\n"
- "mkd;mk\n"
- "mal;ml\n"
- "mon;mn\n"
- "mol;mo\n"
- "mar;mr\n"
- "may;ms\n"
- "msa;ms\n"
- "mlt;mt\n"
- "bur;my\n"
- "mya;my\n"
- "nau;na\n"
- "nob;nb\n"
- "nde;nd\n"
- "nde;nd\n"
- "nep;ne\n"
- "ndo;ng\n"
- "dut;nl\n"
- "nld;nl\n"
- "nno;nn\n"
- "nor;no\n"
- "nbl;nr\n"
- "nbl;nr\n"
- "nav;nv\n"
- "nya;ny\n"
- "oci;oc\n"
- "oji;oj\n"
- "orm;om\n"
- "ori;or\n"
- "oss;os\n"
- "pan;pa\n"
- "pli;pi\n"
- "pol;pl\n"
- "pus;ps\n"
- "por;pt\n"
- "que;qu\n"
- "roh;rm\n"
- "run;rn\n"
- "ron;ro\n"
- "rum;ro\n"
- "rus;ru\n"
- "kin;rw\n"
- "san;sa\n"
- "srd;sc\n"
- "snd;sd\n"
- "sme;se\n"
- "sag;sg\n"
- "sin;si\n"
- "slk;sk\n"
- "slo;sk\n"
- "slv;sl\n"
- "smo;sm\n"
- "sna;sn\n"
- "som;so\n"
- "alb;sq\n"
- "sqi;sq\n"
- "scc;sr\n"
- "srp;sr\n"
- "ssw;ss\n"
- "sot;st\n"
- "sun;su\n"
- "swe;sv\n"
- "swa;sw\n"
- "tam;ta\n"
- "tel;te\n"
- "tgk;tg\n"
- "tha;th\n"
- "tir;ti\n"
- "tuk;tk\n"
- "tgl;tl\n"
- "tsn;tn\n"
- "ton;to\n"
- "tur;tr\n"
- "tso;ts\n"
- "tat;tt\n"
- "twi;tw\n"
- "tah;ty\n"
- "uig;ug\n"
- "ukr;uk\n"
- "urd;ur\n"
- "uzb;uz\n"
- "ven;ve\n"
- "vie;vi\n"
- "vol;vo\n"
- "wln;wa\n"
- "wol;wo\n"
- "xho;xh\n"
- "yid;yi\n"
- "yor;yo\n"
- "zha;za\n"
- "chi;zh\n"
- "zho;zh\n"
- "zul;zu\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Iso639_2 (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "aa;aar\n"
- "ab;abk\n"
- "ae;ave\n"
- "af;afr\n"
- "ak;aka\n"
- "am;amh\n"
- "an;arg\n"
- "ar;ara\n"
- "as;asm\n"
- "av;ava\n"
- "ay;aym\n"
- "az;aze\n"
- "ba;bak\n"
- "be;bel\n"
- "bg;bul\n"
- "bh;bih\n"
- "bi;bis\n"
- "bm;bam\n"
- "bn;ben\n"
- "bo;tib\n"
- "bo;tib\n"
- "br;bre\n"
- "bs;bos\n"
- "ca;cat\n"
- "ce;che\n"
- "ch;cha\n"
- "co;cos\n"
- "cr;cre\n"
- "cs;ces\n"
- "cs;cze\n"
- "cu;chu\n"
- "cv;chv\n"
- "cy;cym\n"
- "cy;wel\n"
- "da;dan\n"
- "de;deu\n"
- "de;ger\n"
- "dv;div\n"
- "dz;dzo\n"
- "ee;ewe\n"
- "el;gre\n"
- "el;ell\n"
- "en;eng\n"
- "eo;epo\n"
- "es;spa\n"
- "et;est\n"
- "eu;baq\n"
- "eu;eus\n"
- "fa;fas\n"
- "fa;per\n"
- "ff;ful\n"
- "fi;fin\n"
- "fj;fij\n"
- "fo;fao\n"
- "fr;fra\n"
- "fr;fre\n"
- "fy;fry\n"
- "ga;gle\n"
- "gd;gla\n"
- "gl;glg\n"
- "gn;grn\n"
- "gu;guj\n"
- "gv;glv\n"
- "ha;hau\n"
- "he;heb\n"
- "hi;hin\n"
- "ho;hmo\n"
- "hr;hrv\n"
- "hr;hrv\n"
- "ht;hat\n"
- "hu;hun\n"
- "hy;hye\n"
- "hy;arm\n"
- "hz;her\n"
- "ia;ina\n"
- "id;ind\n"
- "ie;ile\n"
- "ig;ibo\n"
- "ii;iii\n"
- "ik;ipk\n"
- "io;ido\n"
- "is;ice\n"
- "is;isl\n"
- "it;ita\n"
- "iu;iku\n"
- "ja;jpn\n"
- "jv;jav\n"
- "ka;geo\n"
- "ka;kat\n"
- "kg;kon\n"
- "ki;kik\n"
- "kj;kua\n"
- "kk;kaz\n"
- "kl;kal\n"
- "km;khm\n"
- "kn;kan\n"
- "ko;kor\n"
- "kr;kau\n"
- "ks;kas\n"
- "ku;kur\n"
- "kv;kom\n"
- "kw;cor\n"
- "ky;kir\n"
- "la;lat\n"
- "lb;ltz\n"
- "lg;lug\n"
- "li;lim\n"
- "ln;lin\n"
- "lo;lao\n"
- "lt;lit\n"
- "lu;lub\n"
- "lv;lav\n"
- "mg;mlg\n"
- "mh;mah\n"
- "mi;mao\n"
- "mi;mri\n"
- "mk;mac\n"
- "mk;mkd\n"
- "ml;mal\n"
- "mn;mon\n"
- "mo;mol\n"
- "mr;mar\n"
- "ms;may\n"
- "ms;msa\n"
- "mt;mlt\n"
- "my;bur\n"
- "my;mya\n"
- "na;nau\n"
- "nb;nob\n"
- "nd;nde\n"
- "nd;nde\n"
- "ne;nep\n"
- "ng;ndo\n"
- "nl;dut\n"
- "nl;nld\n"
- "nn;nno\n"
- "no;nor\n"
- "nr;nbl\n"
- "nr;nbl\n"
- "nv;nav\n"
- "ny;nya\n"
- "oc;oci\n"
- "oj;oji\n"
- "om;orm\n"
- "or;ori\n"
- "os;oss\n"
- "pa;pan\n"
- "pi;pli\n"
- "pl;pol\n"
- "ps;pus\n"
- "pt;por\n"
- "qu;que\n"
- "rm;roh\n"
- "rn;run\n"
- "ro;ron\n"
- "ro;rum\n"
- "ru;rus\n"
- "rw;kin\n"
- "sa;san\n"
- "sc;srd\n"
- "sd;snd\n"
- "se;sme\n"
- "sg;sag\n"
- "si;sin\n"
- "sk;slk\n"
- "sk;slo\n"
- "sl;slv\n"
- "sm;smo\n"
- "sn;sna\n"
- "so;som\n"
- "sq;alb\n"
- "sq;sqi\n"
- "sr;scc\n"
- "sr;srp\n"
- "ss;ssw\n"
- "st;sot\n"
- "su;sun\n"
- "sv;swe\n"
- "sw;swa\n"
- "ta;tam\n"
- "te;tel\n"
- "tg;tgk\n"
- "th;tha\n"
- "ti;tir\n"
- "tk;tuk\n"
- "tl;tgl\n"
- "tn;tsn\n"
- "to;ton\n"
- "tr;tur\n"
- "ts;tso\n"
- "tt;tat\n"
- "tw;twi\n"
- "ty;tah\n"
- "ug;uig\n"
- "uk;ukr\n"
- "ur;urd\n"
- "uz;uzb\n"
- "ve;ven\n"
- "vi;vie\n"
- "vo;vol\n"
- "wa;wln\n"
- "wo;wol\n"
- "xh;xho\n"
- "yi;yid\n"
- "yo;yor\n"
- "za;zha\n"
- "zh;chi\n"
- "zh;zho\n"
- "zu;zul\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Library_DivX (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Main source;http://xmm.sourceforge.net/DivX5-6_Xvid_Bitstream_version.php\n"
- "413;5.0.0;UTC 2002-03-04\n"
- "450;5.0.1;UTC 2002-04-09\n"
- "481;5.0.2;UTC 2002-05-16\n"
- "484;5.0.2;UTC 2002-05-16\n"
- "487;5.0.2;UTC 2002-05-16\n"
- "696;5.0.5 Beta(Tahanea);UTC 2003-01\n"
- "740;5.0.3;UTC 2003-01-24\n"
- "795;5.0.4 Beta1or2(Schizo);UTC 2003-01\n"
- "804;5.0.4 Beta3(Schizo);UTC 2003-01\n"
- "814;5.0.4 Beta4(Schizo);UTC 2003-01\n"
- "822;5.0.4;UTC 2003-04-17\n"
- "830;5.0.5;UTC 2003-04-24\n"
- "894;5.0.5 Kauehi;UTC 2003-07-02\n"
- "922;5.1.0 Beta1(Manihi);UTC 2003-07-26\n"
- "936;5.1.0 Beta2(Kaukura);UTC 2003-08-02\n"
- "959;5.1.0;UTC 2003-09-02\n"
- "985;5.1.0 (HD?);UTC 2003-10\n"
- "1009;5.1.1 Beta1;UTC 2003-10-21\n"
- "1025;5.1.1 Beta2;UTC 2003-11\n"
- "1031;5.1.1 (Maupiti);UTC 2003-11-19\n"
- "1263;5.2.0;UTC 2004-07-15\n"
- "1272;5.2.0 (DrDivX 105);UTC 2004-07-17\n"
- "1307;5.2.1 Alpha;UTC 2004-09-08\n"
- "1314;5.2.1 Beta;UTC 2004-09-08\n"
- "1328;5.2.1 (WaffleDay);UTC 2004-09-08\n"
- "1338;5.2.1 (DrDivX 106);UTC 2004-09-08\n"
- "1394;5.3.0 Plasma Alpha (Tritium);UTC 2004-09-08\n"
- "1408;5.3.0 Plasma Alpha (CoreBurn);UTC 2004-10\n"
- "1429;>5.3.0, <5.9.0\n"
- "1438;>5.3.0, <5.9.0\n"
- "1453;5.9.0 Fusion (InertialConfinement);UTC 2005-01\n"
- "1461;5.9.0 Fusion (HiggsBoson);UTC 2005-01\n"
- "1528;5.9.0 Fusion (HiggsBoson);UTC 2005-03-05\n"
- "1571;6.0.0;UTC 2005-06-15\n"
- "1594;6.0.0 (DivX Converter1.0);UTC 2005-06\n"
- "1599;6.0.0 Helium;UTC 2005-06\n"
- "1612;6.0.0 Helium (GodFatherOfSoul);UTC 2005-06-15\n"
- "1697;6.0.3 Fusion (ThermonuclearFusion);UTC 2005-10-18\n"
- "1737;He-3 (TwinTurbocharger);UTC 2005-12\n"
- "1786;6.1.0;UTC 2005-12-12\n"
- "1828;6.1.1;UTC 2006-02-01\n"
- "1893;6.2.0 Beta1;UTC 2006-03-25\n"
- "1910;6.2.0;UTC 2006-04-11\n"
- "1913;6.2.1;UTC 2006-04\n"
- "1915;6.2.1 Patch1Beta;UTC 2006-04\n"
- "1920;6.2.2;UTC 2006-04-26\n"
- "1977;6.2.5;UTC 2006-06-16\n"
- "1988;6.2.5;UTC 2006-07\n"
- "2075;>6.2.5, <6.4.0\n"
- "2081;6.4.0 Beta1;UTC 2006-09-27\n"
- "2086;6.4.0;UTC 2006-10-03\n"
- "2201;6.5.0;UTC 2006-12\n"
- "2207;6.5.1;UTC 2007-03\n"
- "2292;6.6.0;UTC 2007-05-04\n"
- "2306;6.6.1\n"
- "2309;6.6.1\n"
- "2318;6.6.1.4\n"
- "2396;6.7 Beta;UTC 2007-08-26\n"
- "2432;6.7.0;UTC 2007-09-20\n"
- "2510;6.8.0;UTC 2007-12-04\n"
- "2521;6.8.0 Converter 6.6\n"
- "2559;6.8.2;UTC 2008-05-17\n"
- "2676;6.8.3-6.8.4;UTC 2008-06-07\n"
- "2816;6.8.5;UTC 2009-08-20\n"
- "2851;6.8.5;UTC 2009-08-20\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Library_XviD (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Main source;http://xmm.sourceforge.net/DivX5-6_Xvid_Bitstream_version.php\n"
- "1;0.0.01;UTC 2002-10-17\n"
- "2;0.0.02;UTC 2002-10-30\n"
- "3;0.0.03;UTC 2002-12-09\n"
- "4;0.0.04;UTC 2003-01\n"
- "5;0.0.05;UTC 2003-01-11\n"
- "6;0.0.06;UTC 2003-01-12\n"
- "7;0.0.07;UTC 2003-01-13\n"
- "8;0.0.08;UTC 2003-01-14\n"
- "9;0.0.09;UTC 2003-03-25\n"
- "10;0.0.10;UTC 2003-06-09\n"
- "11;0.0.11;UTC 2003-06-09\n"
- "12;0.0.12;UTC 2003-06-11\n"
- "13;0.0.13;UTC 2003-06-11\n"
- "14;0.0.14;UTC 2003-06-28\n"
- "15;0.0.15;UTC 2003-07-28\n"
- "16;0.0.16;UTC 2003-07-28\n"
- "17;0.0.17;UTC 2003-08-06\n"
- "18;0.0.18;UTC 2003-09-04\n"
- "19;0.0.19;UTC 2003-09-28\n"
- "20;0.0.20;UTC 2003-10-09\n"
- "21;1.0.0 Beta1 (Aloha);UTC 2003-11-29\n"
- "22;1.0.0 Beta1.5;UTC 2003-12-03\n"
- "23;1.0.0 Beta2 (Ciao);UTC 2003-12-06\n"
- "24;1.0.0 Beta2.5;UTC 2003-12-18\n"
- "25;1.0.0 Beta3 (Selam);UTC 2003-12-27\n"
- "26;1.0.0 RC1 (Niltze);UTC 2004-01-26\n"
- "27;1.0.0 RC1b;UTC 2004-01-30\n"
- "28;1.0.0 RC2 (Jambo);UTC 2004-02-01\n"
- "29;1.0.0 RC3 (Nihao);UTC 2004-03-22\n"
- "30;1.0.0 RC4 (Hola);UTC 2004-04-05\n"
- "31;1.0.0 RC4b;UTC 2004-04-15\n"
- "32;1.0.0 RC4c;UTC 2004-05-02\n"
- "33;1.0.0 RC4d;UTC 2004-05-03\n"
- "34;1.0.0;UTC 2004-05-09\n"
- "35;1.0.1;UTC 2004-06-05\n"
- "36;1.0.2;UTC 2004-08-29\n"
- "37;1.0.3;UTC 2004-12-20\n"
- "38;1.1.0 Beta1;UTC 2005-01-16\n"
- "39;1.1.0 Beta2;UTC 2005-04-04\n"
- "40;1.1.0 RC;UTC 2005-11-22\n"
- "41;1.1.0;UTC 2005-11-22\n"
- "42;1.2.0.dev42;UTC 2005-12\n"
- "43;1.2.0SMP;UTC 2006-01-08\n"
- "44;1.1.1;UTC 2006-07-10\n"
- "45;1.2.0.dev45;UTC 2006-07-10\n"
- "46;1.1.2;UTC 2006-11-01\n"
- "47;1.2.0.dev47;UTC 2006-11-01\n"
- "48;1.2.0.dev48\n"
- "49;1.2.0.dev49\n"
- "50;1.2.1;UTC 2008-12-04\n"
- "55;1.3.0.dev55\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Library_MainConcept_Avc (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "2.0.1889;2.0.1889;UTC 2006-01-11\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Library_VorbisCom (InfoMap &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "Main source;http://wiki.hydrogenaudio.org/index.php?title=Recommended_Ogg_Vorbis\n"
- "Xiphophorus libVorbis I 20000508;1.0 Beta 1/2;UTC 2000-05-08\n"
- "Xiphophorus libVorbis I 20001031;1.0 Beta 3;UTC 2000-10-31\n"
- "Xiphophorus libVorbis I 20010225;1.0 Beta 4;UTC 2001-02-25\n"
- "Xiphophorus libVorbis I 20010615;1.0 RC1;UTC 2000-16-15\n"
- "Xiphophorus libVorbis I 20010813;1.0 RC2;UTC 2000-18-13\n"
- "Xiphophorus libVorbis I 20010816 (gtune 1);1.0 RC2 (GTune 1);UTC 2001-08-16\n"
- "Xiphophorus libVorbis I 20011014 (GTune 2);1.0 RC2 (GTune 2);UTC 2001-10-14\n"
- "Xiphophorus libVorbis I 20011217;1.0 RC3;UTC 2001-12-17\n"
- "Xiphophorus libVorbis I 20011231;1.0 RC3;UTC 2001-12-31\n"
- "Xiph.Org libVorbis I 20020717;1.0;UTC 2002-07-17\n"
- "Xiph.Org/Sjeng.Org libVorbis I 20020717 (GTune 3, beta 1);1.0 (GTune 3 Beta 1);UTC 2002-07-17\n"
- "Xiph.Org libVorbis I 20030308;1.0.1 (CVS);UTC 2003-03-08\n"
- "Xiph.Org libVorbis I 20030909;1.0.1;UTC 2003-09-09\n"
- "Xiph.Org/Sjeng.Org libVorbis I 20030909 (GTune 3, beta 2) EXPERIMENTAL;1.0 (GTune 3 Beta 2);UTC 2003-09-09\n"
- "Xiph.Org libVorbis I 20031230 (1.0.1);1.0.1 (CVS);UTC 2003-12-30\n"
- "Xiph.Org/Sjeng.Org libVorbis I 20031230 (GTune 3, beta 2);1.0.1 (GTune 3 Beta 2);UTC 2003-12-30\n"
- "AO aoTuV b2 [20040420] (based on Xiph.Org's 1.0.1);Beta 2;UTC 2004-04-20\n"
- "Xiph.Org libVorbis I 20040629;1.1;UTC 2004-06-29\n"
- "Xiph.Org libVorbis I 20040920;1.1 (with impulse_trigger_profile);UTC 2004-09-20\n"
- "AO aoTuV b3 [20041120] (based on Xiph.Org's libVorbis);Beta 3;UTC 2004-11-20\n"
- "Xiph.Org libVorbis I 20050304;1.1.1/1.1.2;UTC 2005-03-04\n"
- "AO aoTuV b4 [20050617] (based on Xiph.Org's libVorbis);Beta 4;UTC 2005-06-17\n"
- "BS Lancer [20050709] (based on aoTuV b4 [20050617]);(aoTuV Beta 4);UTC 2005-07-09\n"
- "AO aoTuV b4a [20051105] (based on Xiph.Org's libVorbis);Beta 4.5;UTC 2005-11-05\n"
- "AO aoTuV b4b [20051117] (based on Xiph.Org's libVorbis);Beta 4.51;UTC 2005-11-17\n"
- "BS Lancer [20051121] (based on aoTuV b4b [20051117]);(aoTuV Beta 4.51);UTC 2005-11-21\n"
- "AO aoTuV pre-beta5 [20060321] (based on Xiph.Org's libVorbis);Beta 5 (preBeta);UTC 2006-03-21\n"
- "AO aoTuV b5 [20061024] (based on Xiph.Org's libVorbis);Beta 5;UTC 2006-10-24\n"
- "Xiph.Org libVorbis I 20070622;1.2;UTC 2007-06-22\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_Summary (ZtringListList &Info)
-{
- Info.Separator_Set(0, __T("\n"));
- Info.Write(Ztring().From_UTF8(
- "General;[%Format%][ (%Format_Profile%)][ (%Format_Commercial_IfAny%)]$if(%Format%,$: $)%FileSize/String%[, %Duration/String%]\n"
- "Video;[%Language/String%, ][%BitRate/String%$if(%BitRate_Nominal/String%, \\(%BitRate_Nominal/String%\\)), ][%Width%*][%Height%][ (%DisplayAspectRatio/String%), ][$at$ %FrameRate/String%, ][%Format%][ (%CodecID/Hint%)][ (%Standard%)]$if(%MuxingMode%, \\(%MuxingMode%\\))$if(%Format_Version%, \\(%Format_Version%\\))$if(%Format_Profile%, \\(%Format_Profile%\\))$if(%Format_Settings%, \\(%Format_Settings%\\))[ (%Format_Commercial_IfAny%)]\n"
- "Audio;[%Language/String%, ][%BitRate/String%$if(%BitRate_Nominal/String%, \\(%BitRate_Nominal/String%\\)), ][%SamplingRate/String%, ][%BitDepth/String%, ][%Channel(s)_Original/String% / ][%Channel(s)/String%, ][%Format%][ (%CodecID/Hint%)]$if(%MuxingMode%, \\(%MuxingMode%\\))$if(%Format_Version%, \\(%Format_Version%\\))$if(%Format_Profile%, \\(%Format_Profile%\\))$if(%Format_Settings%, \\(%Format_Settings%\\))[ (%Format_Commercial_IfAny%)]\n"
- "Text;[%Language/String%, ][%Format%][ (%Format_Commercial_IfAny%)]$if(%MuxingMode%, \\(%MuxingMode%\\))\n"
- "Image;[%Language/String%, ][%Width%*][%Height%][ (%DisplayAspectRatio/String%)][, %Format%]\n"
- "Chapters;[%Language/String%, ]%Total% chapters[, %Format%][ (%Format_Commercial_IfAny%)]\n"
- ));
- Info.Separator_Set(0, ZenLib::EOL);
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_MediaInfo.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_MediaInfo.cpp
deleted file mode 100644
index 317f517c6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_MediaInfo.cpp
+++ /dev/null
@@ -1,2554 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "ZenLib/ZtringListListF.h"
-#if MEDIAINFO_EVENTS
- #include "ZenLib/FileName.h"
-#endif //MEDIAINFO_EVENTS
-#if MEDIAINFO_IBI || MEDIAINFO_AES
- #include "base64.h"
-#endif //MEDIAINFO_IBI || MEDIAINFO_AES
-#include <algorithm>
-#if MEDIAINFO_DEMUX
- #include <cmath>
-#endif //MEDIAINFO_DEMUX
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-const size_t Buffer_NormalSize=/*188*7;//*/64*1024;
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-MediaInfo_Config_MediaInfo::MediaInfo_Config_MediaInfo()
-{
- FileIsSeekable=true;
- FileIsSub=false;
- FileIsDetectingDuration=false;
- FileIsReferenced=false;
- FileTestContinuousFileNames=true;
- FileKeepInfo=false;
- FileStopAfterFilled=false;
- FileStopSubStreamAfterFilled=false;
- Audio_MergeMonoStreams=false;
- File_Demux_Interleave=false;
- File_ID_OnlyRoot=false;
- #if MEDIAINFO_ADVANCED
- File_IgnoreSequenceFileSize=false;
- File_IgnoreSequenceFilesCount=false;
- File_DefaultFrameRate=0;
- File_Source_List=false;
- File_RiskyBitRateEstimation=false;
- #if MEDIAINFO_DEMUX
- File_Demux_Unpacketize_StreamLayoutChange_Skip=false;
- #endif //MEDIAINFO_DEMUX
- #endif //MEDIAINFO_ADVANCED
- #if MEDIAINFO_MD5
- File_Md5=false;
- #endif //MEDIAINFO_MD5
- #if defined(MEDIAINFO_REFERENCES_YES)
- File_CheckSideCarFiles=false;
- #endif //defined(MEDIAINFO_REFERENCES_YES)
- File_TimeToLive=0;
- File_Buffer_Size_Hint_Pointer=NULL;
- File_Buffer_Read_Size=64*1024*1024;
- #if MEDIAINFO_AES
- Encryption_Format=Encryption_Format_None;
- Encryption_Method=Encryption_Method_None;
- Encryption_Mode=Encryption_Mode_None;
- Encryption_Padding=Encryption_Padding_None;
- #endif //MEDIAINFO_AES
- #if MEDIAINFO_NEXTPACKET
- NextPacket=false;
- #endif //MEDIAINFO_NEXTPACKET
- #if MEDIAINFO_FILTER
- File_Filter_Audio=false;
- File_Filter_HasChanged_=false;
- #endif //MEDIAINFO_FILTER
- #if MEDIAINFO_EVENTS
- Event_CallBackFunction=NULL;
- Event_UserHandler=NULL;
- SubFile_StreamID=(int64u)-1;
- ParseUndecodableFrames=false;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_ForceIds=false;
- Demux_PCM_20bitTo16bit=false;
- Demux_PCM_20bitTo24bit=false;
- Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10=false;
- Demux_Hevc_Transcode_Iso14496_15_to_AnnexB=false;
- Demux_Unpacketize=false;
- Demux_Rate=0;
- Demux_FirstDts=(int64u)-1;
- Demux_FirstFrameNumber=(int64u)-1;
- Demux_InitData=0; //In Demux event
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_IBI
- Ibi_Create=false;
- Ibi_UseIbiInfoIfAvailable=false;
- #endif //MEDIAINFO_IBI
-
- //Specific
- File_MpegTs_ForceMenu=false;
- File_MpegTs_stream_type_Trust=true;
- File_MpegTs_Atsc_transport_stream_id_Trust=true;
- File_MpegTs_RealTime=false;
- File_Bdmv_ParseTargetedFile=true;
- #if defined(MEDIAINFO_DVDIF_YES)
- File_DvDif_DisableAudioIfIsInContainer=false;
- File_DvDif_IgnoreTransmittingFlags=false;
- #endif //defined(MEDIAINFO_DVDIF_YES)
- #if defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- File_DvDif_Analysis=false;
- #endif //defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- #if MEDIAINFO_MACROBLOCKS
- File_Macroblocks_Parse=false;
- #endif //MEDIAINFO_MACROBLOCKS
- File_GrowingFile_Delay=10;
- #if defined(MEDIAINFO_LIBMMS_YES)
- File_Mmsh_Describe_Only=false;
- #endif //defined(MEDIAINFO_LIBMMS_YES)
- File_Eia608_DisplayEmptyStream=false;
- File_Eia708_DisplayEmptyStream=false;
- State=0;
- #if defined(MEDIAINFO_AC3_YES)
- File_Ac3_IgnoreCrc=false;
- #endif //defined(MEDIAINFO_AC3_YES)
-
- //Internal to MediaInfo, not thread safe
- File_Names_Pos=0;
- File_Buffer=NULL;
- File_Buffer_Size_Max=0;
- File_Buffer_Size_ToRead=Buffer_NormalSize;
- File_Buffer_Size=0;
- File_Buffer_Repeat=false;
- File_Buffer_Repeat_IsSupported=false;
- File_IsGrowing=false;
- File_IsNotGrowingAnymore=false;
- File_Current_Offset=0;
- File_Current_Size=(int64u)-1;
- File_IgnoreFramesBefore=0;
- File_IgnoreFramesAfter=(int64u)-1;
- File_IgnoreFramesRate=0;
- File_Size=(int64u)-1;
- ParseSpeed=MediaInfoLib::Config.ParseSpeed_Get();
- #if MEDIAINFO_EVENTS
- Config_PerPackage=NULL;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent=false;
- Demux_Offset_Frame=(int64u)-1;
- Demux_Offset_DTS=(int64u)-1;
- Demux_Offset_DTS_FromStream=(int64u)-1;
- Events_Delayed_CurrentSource=NULL;
- #if MEDIAINFO_SEEK
- Demux_IsSeeking=false;
- #endif //MEDIAINFO_SEEK
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_SEEK
- File_GoTo_IsFrameOffset=false;
- #endif //MEDIAINFO_SEEK
-}
-
-MediaInfo_Config_MediaInfo::~MediaInfo_Config_MediaInfo()
-{
- delete[] File_Buffer; //File_Buffer=NULL;
-
- #if MEDIAINFO_EVENTS
- for (events_delayed::iterator Event=Events_Delayed.begin(); Event!=Events_Delayed.end(); ++Event)
- for (size_t Pos=0; Pos<Event->second.size(); Pos++)
- delete Event->second[Pos]; //Event->second[Pos]=NULL;
- #endif //MEDIAINFO_EVENTS
-}
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-Ztring MediaInfo_Config_MediaInfo::Option (const String &Option, const String &Value)
-{
- #if MEDIAINFO_EVENTS
- SubFile_Config(Option)=Value;
- #endif //MEDIAINFO_EVENTS
-
- String Option_Lower(Option);
- size_t Egal_Pos=Option_Lower.find(__T('='));
- if (Egal_Pos==string::npos)
- Egal_Pos=Option_Lower.size();
- transform(Option_Lower.begin(), Option_Lower.begin()+Egal_Pos, Option_Lower.begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix
-
- if (Option_Lower==__T("file_isseekable"))
- {
- File_IsSeekable_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_isseekable_get"))
- {
- return File_IsSeekable_Get()?"1":"0";
- }
- if (Option_Lower==__T("file_issub"))
- {
- File_IsSub_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_issub_get"))
- {
- return File_IsSub_Get()?"1":"0";
- }
- if (Option_Lower==__T("file_isdetectingduration"))
- {
- File_IsDetectingDuration_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_isdetectingduration_get"))
- {
- return File_IsDetectingDuration_Get()?"1":"0";
- }
- if (Option_Lower==__T("file_isreferenced"))
- {
- File_IsReferenced_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_isreferenced_get"))
- {
- return File_IsReferenced_Get()?"1":"0";
- }
- if (Option_Lower==__T("file_testcontinuousfilenames"))
- {
- File_TestContinuousFileNames_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_testcontinuousfilenames_get"))
- {
- return File_TestContinuousFileNames_Get()?"1":"0";
- }
- if (Option_Lower==__T("file_keepinfo"))
- {
- File_KeepInfo_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_keepinfo_get"))
- {
- return File_KeepInfo_Get()?"1":"0";
- }
- if (Option_Lower==__T("file_stopafterfilled"))
- {
- File_StopAfterFilled_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_stopafterfilled_get"))
- {
- return File_StopAfterFilled_Get()?"1":"0";
- }
- if (Option_Lower==__T("file_stopsubstreamafterfilled"))
- {
- File_StopSubStreamAfterFilled_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_stopsubstreamafterfilled_get"))
- {
- return File_StopSubStreamAfterFilled_Get()?"1":"0";
- }
- if (Option_Lower==__T("file_audio_mergemonostreams"))
- {
- File_Audio_MergeMonoStreams_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_audio_mergemonostreams_get"))
- {
- return File_Audio_MergeMonoStreams_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_demux_interleave"))
- {
- File_Demux_Interleave_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_demux_interleave_get"))
- {
- return File_Demux_Interleave_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_id_onlyroot"))
- {
- File_ID_OnlyRoot_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_id_onlyroot_get"))
- {
- return File_ID_OnlyRoot_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_ignoresequencefilescount"))
- {
- #if MEDIAINFO_MD5
- File_IgnoreSequenceFilesCount_Set(!(Value==__T("0") || Value.empty()));
- return Ztring();
- #else //MEDIAINFO_MD5
- return __T("Disabled due to compilation options");
- #endif //MEDIAINFO_MD5
- }
- else if (Option_Lower==__T("file_defaultframerate"))
- {
- #if MEDIAINFO_MD5
- File_DefaultFrameRate_Set(Ztring(Value).To_float64());
- return Ztring();
- #else //MEDIAINFO_MD5
- return __T("File_DefaultFrameRate is disabled due to compilation options");
- #endif //MEDIAINFO_MD5
- }
- else if (Option_Lower==__T("file_source_list"))
- {
- #if MEDIAINFO_MD5
- File_Source_List_Set(!(Value==__T("0") || Value.empty()));
- return Ztring();
- #else //MEDIAINFO_MD5
- return __T("MD5 is disabled due to compilation options");
- #endif //MEDIAINFO_MD5
- }
- else if (Option_Lower==__T("file_riskybitrateestimation"))
- {
- #if MEDIAINFO_ADVANCED
- File_RiskyBitRateEstimation_Set(!(Value==__T("0") || Value.empty()));
- return Ztring();
- #else //MEDIAINFO_ADVANCED
- return __T("Advanced features are disabled due to compilation options");
- #endif //MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("file_demux_unpacketize_streamlayoutchange_skip"))
- {
- #if MEDIAINFO_DEMUX
- #if MEDIAINFO_ADVANCED
- File_Demux_Unpacketize_StreamLayoutChange_Skip_Set(!(Value==__T("0") || Value.empty()));
- return Ztring();
- #else //MEDIAINFO_ADVANCED
- return __T("Advanced features disabled due to compilation options");
- #endif //MEDIAINFO_ADVANCED
- #else //MEDIAINFO_ADVANCED
- return __T("Advanced features disabled due to compilation options");
- #endif //MEDIAINFO_ADVANCED
- }
- else if (Option_Lower==__T("file_md5"))
- {
- #if MEDIAINFO_MD5
- File_Md5_Set(!(Value==__T("0") || Value.empty()));
- return Ztring();
- #else //MEDIAINFO_MD5
- return __T("MD5 is disabled due to compilation options");
- #endif //MEDIAINFO_MD5
- }
- else if (Option_Lower==__T("file_checksidecarfiles"))
- {
- #if defined(MEDIAINFO_REFERENCES_YES)
- File_CheckSideCarFiles_Set(!(Value==__T("0") || Value.empty()));
- return Ztring();
- #else //defined(MEDIAINFO_REFERENCES_YES)
- return __T("Disabled due to compilation options");
- #endif //defined(MEDIAINFO_REFERENCES_YES)
- }
- else if (Option_Lower==__T("file_filename"))
- {
- File_FileName_Set(Value);
- return __T("");
- }
- else if (Option_Lower==__T("file_filename_get"))
- {
- return File_FileName_Get();
- }
- else if (Option_Lower==__T("file_filenameformat"))
- {
- File_FileNameFormat_Set(Value);
- return __T("");
- }
- else if (Option_Lower==__T("file_filenameformat_get"))
- {
- return File_FileNameFormat_Get();
- }
- else if (Option_Lower==__T("file_timetolive"))
- {
- File_TimeToLive_Set(Ztring(Value).To_float64());
- return __T("");
- }
- else if (Option_Lower==__T("file_timetolive_get"))
- {
- return Ztring::ToZtring(File_TimeToLive_Get(), 9);
- }
- else if (Option_Lower==__T("file_partial_begin"))
- {
- File_Partial_Begin_Set(Value);
- return __T("");
- }
- else if (Option_Lower==__T("file_partial_begin_get"))
- {
- return File_Partial_Begin_Get();
- }
- else if (Option_Lower==__T("file_partial_end"))
- {
- File_Partial_End_Set(Value);
- return __T("");
- }
- else if (Option_Lower==__T("file_partial_end_get"))
- {
- return File_Partial_End_Get();
- }
- else if (Option_Lower==__T("file_forceparser"))
- {
- File_ForceParser_Set(Value);
- return __T("");
- }
- else if (Option_Lower==__T("file_forceparser_get"))
- {
- return File_ForceParser_Get();
- }
- else if (Option_Lower==__T("file_buffer_size_hint_pointer"))
- {
- File_Buffer_Size_Hint_Pointer_Set((size_t*)Ztring(Value).To_int64u());
- return __T("");
- }
- else if (Option_Lower==__T("file_buffer_size_hint_pointer_get"))
- {
- return Ztring::ToZtring((size_t)File_Buffer_Size_Hint_Pointer_Get());
- }
- else if (Option_Lower==__T("file_buffer_read_size"))
- {
- File_Buffer_Read_Size_Set((size_t)Ztring(Value).To_int64u());
- return __T("");
- }
- else if (Option_Lower==__T("file_buffer_read_size_get"))
- {
- return Ztring::ToZtring((size_t)File_Buffer_Read_Size_Get());
- }
- else if (Option_Lower==__T("file_filter"))
- {
- #if MEDIAINFO_FILTER
- Ztring ValueLowerCase=Ztring(Value).MakeLowerCase();
- if (ValueLowerCase==__T("audio"))
- File_Filter_Audio_Set(true);
- else
- File_Filter_Set(ValueLowerCase.To_int64u());
- return Ztring();
- #else //MEDIAINFO_FILTER
- return __T("Filter manager is disabled due to compilation options");
- #endif //MEDIAINFO_FILTER
- }
- else if (Option_Lower==__T("file_filter_get"))
- {
- #if MEDIAINFO_FILTER
- return Ztring();//.From_Number(File_Filter_Get());
- #else //MEDIAINFO_FILTER
- return __T("Filter manager is disabled due to compilation options");
- #endif //MEDIAINFO_FILTER
- }
- else if (Option_Lower==__T("file_duplicate"))
- {
- #if MEDIAINFO_DUPLICATE
- return File_Duplicate_Set(Value);
- #else //MEDIAINFO_DUPLICATE
- return __T("Duplicate manager is disabled due to compilation options");
- #endif //MEDIAINFO_DUPLICATE
- }
- else if (Option_Lower==__T("file_duplicate_get"))
- {
- #if MEDIAINFO_DUPLICATE
- //if (File_Duplicate_Get())
- return __T("1");
- //else
- // return __T("");
- #else //MEDIAINFO_DUPLICATE
- return __T("Duplicate manager is disabled due to compilation options");
- #endif //MEDIAINFO_DUPLICATE
- }
- else if (Option_Lower==__T("file_demux_forceids"))
- {
- #if MEDIAINFO_DEMUX
- if (Ztring(Value).To_int64u()==0)
- Demux_ForceIds_Set(false);
- else
- Demux_ForceIds_Set(true);
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_demux_pcm_20bitto16bit"))
- {
- #if MEDIAINFO_DEMUX
- if (Ztring(Value).To_int64u()==0)
- Demux_PCM_20bitTo16bit_Set(false);
- else
- Demux_PCM_20bitTo16bit_Set(true);
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_demux_pcm_20bitto24bit"))
- {
- #if MEDIAINFO_DEMUX
- if (Ztring(Value).To_int64u()==0)
- Demux_PCM_20bitTo24bit_Set(false);
- else
- Demux_PCM_20bitTo24bit_Set(true);
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_demux_avc_transcode_iso14496_15_to_iso14496_10"))
- {
- #if MEDIAINFO_DEMUX
- if (Ztring(Value).To_int64u()==0)
- Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Set(false);
- else
- Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Set(true);
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_demux_hevc_transcode_iso14496_15_to_annexb"))
- {
- #if MEDIAINFO_DEMUX
- if (Ztring(Value).To_int64u()==0)
- Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Set(false);
- else
- Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Set(true);
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_demux_unpacketize"))
- {
- #if MEDIAINFO_DEMUX
- if (Ztring(Value).To_int64u()==0)
- Demux_Unpacketize_Set(false);
- else
- Demux_Unpacketize_Set(true);
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_demux_rate"))
- {
- #if MEDIAINFO_DEMUX
- Demux_Rate_Set(Ztring(Value).To_float64());
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_demux_firstdts"))
- {
- #if MEDIAINFO_DEMUX
- int64u ValueInt64u;
- if (Value.find(__T(":"))!=string::npos)
- {
- Ztring ValueZ=Value;
- ValueInt64u=0;
- size_t Value_Pos=ValueZ.find(__T(":"));
- if (Value_Pos==string::npos)
- Value_Pos=ValueZ.size();
- ValueInt64u+=Ztring(ValueZ.substr(0, Value_Pos)).To_int64u()*60*60*1000*1000*1000;
- ValueZ.erase(0, Value_Pos+1);
- Value_Pos=ValueZ.find(__T(":"));
- if (Value_Pos==string::npos)
- Value_Pos=ValueZ.size();
- ValueInt64u+=Ztring(ValueZ.substr(0, Value_Pos)).To_int64u()*60*1000*1000*1000;
- ValueZ.erase(0, Value_Pos+1);
- Value_Pos=ValueZ.find(__T("."));
- if (Value_Pos==string::npos)
- Value_Pos=ValueZ.size();
- ValueInt64u+=Ztring(ValueZ.substr(0, Value_Pos)).To_int64u()*1000*1000*1000;
- ValueZ.erase(0, Value_Pos+1);
- if (!ValueZ.empty())
- ValueInt64u+=Ztring(ValueZ).To_int64u()*1000*1000*1000/(int64u)pow(10.0, (int)ValueZ.size());
- }
- else
- ValueInt64u=Ztring(Value).To_int64u();
- Demux_FirstDts_Set(ValueInt64u);
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_demux_firstframenumber"))
- {
- #if MEDIAINFO_DEMUX
- Demux_FirstFrameNumber_Set(Ztring(Value).To_int64u());
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_demux_initdata"))
- {
- #if MEDIAINFO_DEMUX
- Ztring Value_Lower(Value); Value_Lower.MakeLowerCase();
- if (Value_Lower==__T("event")) Demux_InitData_Set(0);
- else if (Value_Lower==__T("field")) Demux_InitData_Set(1);
- else return __T("Invalid value");
- return Ztring();
- #else //MEDIAINFO_DEMUX
- return __T("Demux manager is disabled due to compilation options");
- #endif //MEDIAINFO_DEMUX
- }
- else if (Option_Lower==__T("file_ibi"))
- {
- #if MEDIAINFO_IBI
- Ibi_Set(Value);
- return Ztring();
- #else //MEDIAINFO_IBI
- return __T("IBI support is disabled due to compilation options");
- #endif //MEDIAINFO_IBI
- }
- else if (Option_Lower==__T("file_ibi_create"))
- {
- #if MEDIAINFO_IBI
- if (Ztring(Value).To_int64u()==0)
- Ibi_Create_Set(false);
- else
- Ibi_Create_Set(true);
- return Ztring();
- #else //MEDIAINFO_IBI
- return __T("IBI support is disabled due to compilation options");
- #endif //MEDIAINFO_IBI
- }
- else if (Option_Lower==__T("file_ibi_useibiinfoifavailable"))
- {
- #if MEDIAINFO_IBI
- if (Ztring(Value).To_int64u()==0)
- Ibi_UseIbiInfoIfAvailable_Set(false);
- else
- Ibi_UseIbiInfoIfAvailable_Set(true);
- return Ztring();
- #else //MEDIAINFO_IBI
- return __T("IBI support is disabled due to compilation options");
- #endif //MEDIAINFO_IBI
- }
- else if (Option_Lower==__T("file_encryption_format"))
- {
- #if MEDIAINFO_AES
- Encryption_Format_Set(Value);
- return Ztring();
- #else //MEDIAINFO_AES
- return __T("Encryption manager is disabled due to compilation options");
- #endif //MEDIAINFO_AES
- }
- else if (Option_Lower==__T("file_encryption_key"))
- {
- #if MEDIAINFO_AES
- Encryption_Key_Set(Value);
- return Ztring();
- #else //MEDIAINFO_AES
- return __T("Encryption manager is disabled due to compilation options");
- #endif //MEDIAINFO_AES
- }
- else if (Option_Lower==__T("file_encryption_method"))
- {
- #if MEDIAINFO_AES
- Encryption_Method_Set(Value);
- return Ztring();
- #else //MEDIAINFO_AES
- return __T("Encryption manager is disabled due to compilation options");
- #endif //MEDIAINFO_AES
- }
- else if (Option_Lower==__T("file_encryption_mode") || Option_Lower==__T("file_encryption_modeofoperation"))
- {
- #if MEDIAINFO_AES
- Encryption_Mode_Set(Value);
- return Ztring();
- #else //MEDIAINFO_AES
- return __T("Encryption manager is disabled due to compilation options");
- #endif //MEDIAINFO_AES
- }
- else if (Option_Lower==__T("file_encryption_padding"))
- {
- #if MEDIAINFO_AES
- Encryption_Padding_Set(Value);
- return Ztring();
- #else //MEDIAINFO_AES
- return __T("Encryption manager is disabled due to compilation options");
- #endif //MEDIAINFO_AES
- }
- else if (Option_Lower==__T("file_encryption_initializationvector"))
- {
- #if MEDIAINFO_AES
- Encryption_InitializationVector_Set(Value);
- return Ztring();
- #else //MEDIAINFO_AES
- return __T("Encryption manager is disabled due to compilation options");
- #endif //MEDIAINFO_AES
- }
- else if (Option_Lower==__T("file_nextpacket"))
- {
- #if MEDIAINFO_NEXTPACKET
- if (Ztring(Value).To_int64u()==0)
- NextPacket_Set(false);
- else
- NextPacket_Set(true);
- return Ztring();
- #else //MEDIAINFO_NEXTPACKET
- return __T("NextPacket manager is disabled due to compilation options");
- #endif //MEDIAINFO_NEXTPACKET
- }
- else if (Option_Lower==__T("file_subfile_streamid_set"))
- {
- #if MEDIAINFO_EVENTS
- SubFile_StreamID_Set(Value.empty()?(int64u)-1:Ztring(Value).To_int64u());
- return Ztring();
- #else //MEDIAINFO_EVENTS
- return __T("Event manager is disabled due to compilation options");
- #endif //MEDIAINFO_EVENTS
- }
- else if (Option_Lower==__T("file_subfile_ids_set"))
- {
- #if MEDIAINFO_EVENTS
- SubFile_IDs_Set(Value);
- return Ztring();
- #else //MEDIAINFO_EVENTS
- return __T("Event manager is disabled due to compilation options");
- #endif //MEDIAINFO_EVENTS
- }
- else if (Option_Lower==__T("file_parseundecodableframes"))
- {
- #if MEDIAINFO_EVENTS
- ParseUndecodableFrames_Set(!(Value==__T("0") || Value.empty()));
- return Ztring();
- #else //MEDIAINFO_EVENTS
- return __T("Event manager is disabled due to compilation options");
- #endif //MEDIAINFO_EVENTS
- }
- else if (Option_Lower==__T("file_mpegts_forcemenu"))
- {
- File_MpegTs_ForceMenu_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_mpegts_forcemenu_get"))
- {
- return File_MpegTs_ForceMenu_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_mpegts_stream_type_trust"))
- {
- File_MpegTs_stream_type_Trust_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_mpegts_stream_type_trust_get"))
- {
- return File_MpegTs_stream_type_Trust_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_mpegts_atsc_transport_stream_id_trust"))
- {
- File_MpegTs_Atsc_transport_stream_id_Trust_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_mpegts_atsc_transport_stream_id_trust_get"))
- {
- return File_MpegTs_Atsc_transport_stream_id_Trust_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_mpegts_realtime"))
- {
- File_MpegTs_RealTime_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_mpegts_realtime_get"))
- {
- return File_MpegTs_RealTime_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_bdmv_parsetargetedfile"))
- {
- File_Bdmv_ParseTargetedFile_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_bdmv_parsetargetedfile_get"))
- {
- return File_Bdmv_ParseTargetedFile_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_dvdif_disableaudioifisincontainer"))
- {
- #if defined(MEDIAINFO_DVDIF_YES)
- File_DvDif_DisableAudioIfIsInContainer_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- #else //defined(MEDIAINFO_DVDIF_YES)
- return __T("DVDIF is disabled due to compilation options");
- #endif //defined(MEDIAINFO_DVDIF_YES)
- }
- else if (Option_Lower==__T("file_dvdif_disableaudioifisincontainer_get"))
- {
- #if defined(MEDIAINFO_DVDIF_YES)
- return File_DvDif_DisableAudioIfIsInContainer_Get()?"1":"0";
- #else //defined(MEDIAINFO_DVDIF_YES)
- return __T("DVDIF is disabled due to compilation options");
- #endif //defined(MEDIAINFO_DVDIF_YES)
- }
- else if (Option_Lower==__T("file_dvdif_ignoretransmittingflags"))
- {
- #if defined(MEDIAINFO_DVDIF_YES)
- File_DvDif_IgnoreTransmittingFlags_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- #else //defined(MEDIAINFO_DVDIF_YES)
- return __T("DVDIF is disabled due to compilation options");
- #endif //defined(MEDIAINFO_DVDIF_YES)
- }
- else if (Option_Lower==__T("file_dvdif_ignoretransmittingflags_get"))
- {
- #if defined(MEDIAINFO_DVDIF_YES)
- return File_DvDif_IgnoreTransmittingFlags_Get()?"1":"0";
- #else //defined(MEDIAINFO_DVDIF_YES)
- return __T("DVDIF is disabled due to compilation options");
- #endif //defined(MEDIAINFO_DVDIF_YES)
- }
- else if (Option_Lower==__T("file_dvdif_analysis"))
- {
- #if defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- File_DvDif_Analysis_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- #else //defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- return __T("DVDIF Analysis is disabled due to compilation options");
- #endif //defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- }
- else if (Option_Lower==__T("file_dvdif_analysis_get"))
- {
- #if defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- return File_DvDif_Analysis_Get()?"1":"0";
- #else //defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- return __T("DVDIF Analysis is disabled due to compilation options");
- #endif //defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- }
- else if (Option_Lower==__T("file_macroblocks_parse"))
- {
- #if MEDIAINFO_MACROBLOCKS
- File_Macroblocks_Parse_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- #else //MEDIAINFO_MACROBLOCKS
- return __T("Macroblock parsing is disabled due to compilation options");
- #endif //MEDIAINFO_MACROBLOCKS
- }
- else if (Option_Lower==__T("file_macroblocks_parse_get"))
- {
- #if MEDIAINFO_MACROBLOCKS
- return File_Macroblocks_Parse_Get()?"1":"0";
- #else //MEDIAINFO_MACROBLOCKS
- return __T("Macroblock parsing is disabled due to compilation options");
- #endif //MEDIAINFO_MACROBLOCKS
- }
- else if (Option_Lower==__T("file_growingfile_delay"))
- {
- File_GrowingFile_Delay_Set(Ztring(Value).To_float64());
- return Ztring();
- }
- else if (Option_Lower==__T("file_growingfile_delay_get"))
- {
- return Ztring::ToZtring(File_GrowingFile_Delay_Get());
- }
- else if (Option_Lower==__T("file_curl"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- File_Curl_Set(Value);
- return __T("");
- #else //defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif //defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower.find(__T("file_curl,"))==0 || Option_Lower.find(__T("file_curl;"))==0)
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- File_Curl_Set(Option.substr(10), Value);
- return __T("");
- #else //defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif //defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("file_curl_get"))
- {
- #if defined(MEDIAINFO_LIBCURL_YES)
- return File_Curl_Get(Value);
- #else //defined(MEDIAINFO_LIBCURL_YES)
- return __T("Libcurl support is disabled due to compilation options");
- #endif //defined(MEDIAINFO_LIBCURL_YES)
- }
- else if (Option_Lower==__T("file_mmsh_describe_only"))
- {
- #if defined(MEDIAINFO_LIBMMS_YES)
- File_Mmsh_Describe_Only_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- #else //defined(MEDIAINFO_LIBMMS_YES)
- return __T("Libmms support is disabled due to compilation options");
- #endif //defined(MEDIAINFO_LIBMMS_YES)
- }
- else if (Option_Lower==__T("file_mmsh_describe_only_get"))
- {
- #if defined(MEDIAINFO_LIBMMS_YES)
- return File_Mmsh_Describe_Only_Get()?"1":"0";
- #else //defined(MEDIAINFO_LIBMMS_YES)
- return __T("Libmms support is disabled due to compilation options");
- #endif //defined(MEDIAINFO_LIBMMS_YES)
- }
- else if (Option_Lower==__T("file_eia708_displayemptystream"))
- {
- File_Eia708_DisplayEmptyStream_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_eia708_displayemptystream_get"))
- {
- return File_Eia708_DisplayEmptyStream_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_eia608_displayemptystream"))
- {
- File_Eia608_DisplayEmptyStream_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- }
- else if (Option_Lower==__T("file_eia608_displayemptystream_get"))
- {
- return File_Eia608_DisplayEmptyStream_Get()?"1":"0";
- }
- else if (Option_Lower==__T("file_ac3_ignorecrc"))
- {
- #if defined(MEDIAINFO_AC3_YES)
- File_Ac3_IgnoreCrc_Set(!(Value==__T("0") || Value.empty()));
- return __T("");
- #else //defined(MEDIAINFO_AC3_YES)
- return __T("AC-3 support is disabled due to compilation options");
- #endif //defined(MEDIAINFO_AC3_YES)
- }
- else if (Option_Lower==__T("file_ac3_ignorecrc_get"))
- {
- #if defined(MEDIAINFO_AC3_YES)
- return File_Ac3_IgnoreCrc_Get()?"1":"0";
- #else //defined(MEDIAINFO_AC3_YES)
- return __T("AC-3 support is disabled due to compilation options");
- #endif //defined(MEDIAINFO_AC3_YES)
- }
- else if (Option_Lower==__T("file_event_callbackfunction"))
- {
- #if MEDIAINFO_EVENTS
- return Event_CallBackFunction_Set(Value);
- #else //MEDIAINFO_EVENTS
- return __T("Event manager is disabled due to compilation options");
- #endif //MEDIAINFO_EVENTS
- }
- else
- return __T("Option not known");
-}
-
-//***************************************************************************
-// File Is Seekable
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_IsSeekable_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- FileIsSeekable=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_IsSeekable_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return FileIsSeekable;
-}
-
-//***************************************************************************
-// File Is Sub
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_IsSub_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- FileIsSub=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_IsSub_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return FileIsSub;
-}
-
-//***************************************************************************
-// File Is Detecting Duration
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_IsDetectingDuration_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- FileIsDetectingDuration=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_IsDetectingDuration_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return FileIsDetectingDuration;
-}
-
-//***************************************************************************
-// File Is Referenced
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_IsReferenced_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- FileIsReferenced=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_IsReferenced_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return FileIsReferenced;
-}
-
-//***************************************************************************
-// File Keep Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_KeepInfo_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- FileKeepInfo=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_KeepInfo_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return FileKeepInfo;
-}
-
-//***************************************************************************
-// File test continuous file names
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_TestContinuousFileNames_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- FileTestContinuousFileNames=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_TestContinuousFileNames_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return FileTestContinuousFileNames;
-}
-
-//***************************************************************************
-// Stop after filled
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_StopAfterFilled_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- FileStopAfterFilled=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_StopAfterFilled_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return FileStopAfterFilled;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_StopSubStreamAfterFilled_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- FileStopSubStreamAfterFilled=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_StopSubStreamAfterFilled_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return FileStopSubStreamAfterFilled;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_Audio_MergeMonoStreams_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Audio_MergeMonoStreams=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Audio_MergeMonoStreams_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Audio_MergeMonoStreams;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_Demux_Interleave_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Demux_Interleave=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Demux_Interleave_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_Demux_Interleave;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_ID_OnlyRoot_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_ID_OnlyRoot=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_ID_OnlyRoot_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_ID_OnlyRoot;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_MD5
-void MediaInfo_Config_MediaInfo::File_Md5_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Md5=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Md5_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_Md5;
-}
-#endif //MEDIAINFO_MD5
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_REFERENCES_YES)
-void MediaInfo_Config_MediaInfo::File_CheckSideCarFiles_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_CheckSideCarFiles=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_CheckSideCarFiles_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_CheckSideCarFiles;
-}
-#endif //defined(MEDIAINFO_REFERENCES_YES)
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config_MediaInfo::File_IgnoreSequenceFileSize_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_IgnoreSequenceFileSize=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_IgnoreSequenceFileSize_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_IgnoreSequenceFileSize;
-}
-#endif //MEDIAINFO_ADVANCED
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config_MediaInfo::File_IgnoreSequenceFilesCount_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_IgnoreSequenceFilesCount=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_IgnoreSequenceFilesCount_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_IgnoreSequenceFilesCount;
-}
-#endif //MEDIAINFO_ADVANCED
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config_MediaInfo::File_DefaultFrameRate_Set (float64 NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_DefaultFrameRate=NewValue;
- #if MEDIAINFO_DEMUX
- Demux_Rate=File_DefaultFrameRate;
- #endif //MEDIAINFO_DEMUX
-}
-
-float64 MediaInfo_Config_MediaInfo::File_DefaultFrameRate_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_DefaultFrameRate;
-}
-#endif //MEDIAINFO_ADVANCED
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config_MediaInfo::File_Source_List_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Source_List=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Source_List_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_Source_List;
-}
-#endif //MEDIAINFO_ADVANCED
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config_MediaInfo::File_RiskyBitRateEstimation_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_RiskyBitRateEstimation=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_RiskyBitRateEstimation_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_RiskyBitRateEstimation;
-}
-#endif //MEDIAINFO_ADVANCED
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-#if MEDIAINFO_ADVANCED
-void MediaInfo_Config_MediaInfo::File_Demux_Unpacketize_StreamLayoutChange_Skip_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Demux_Unpacketize_StreamLayoutChange_Skip=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Demux_Unpacketize_StreamLayoutChange_Skip_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_Demux_Unpacketize_StreamLayoutChange_Skip;
-}
-#endif //MEDIAINFO_ADVANCED
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// File name from somewhere else
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_FileName_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_FileName=NewValue;
-}
-
-Ztring MediaInfo_Config_MediaInfo::File_FileName_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_FileName;
-}
-
-//***************************************************************************
-// File name format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_FileNameFormat_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_FileNameFormat=NewValue;
-}
-
-Ztring MediaInfo_Config_MediaInfo::File_FileNameFormat_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_FileNameFormat;
-}
-
-//***************************************************************************
-// Time to live
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_TimeToLive_Set (float64 NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_TimeToLive=NewValue;
-}
-
-float64 MediaInfo_Config_MediaInfo::File_TimeToLive_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_TimeToLive;
-}
-
-//***************************************************************************
-// Partial file (begin and end are cut)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_Partial_Begin_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Partial_Begin=NewValue;
-}
-
-Ztring MediaInfo_Config_MediaInfo::File_Partial_Begin_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_Partial_Begin;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_Partial_End_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Partial_End=NewValue;
-}
-
-Ztring MediaInfo_Config_MediaInfo::File_Partial_End_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_Partial_End;
-}
-
-//***************************************************************************
-// Force Parser
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_ForceParser_Set (const Ztring &NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_ForceParser=NewValue;
-}
-
-Ztring MediaInfo_Config_MediaInfo::File_ForceParser_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_ForceParser;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_Buffer_Size_Hint_Pointer_Set (size_t* NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Buffer_Size_Hint_Pointer=NewValue;
-}
-
-size_t* MediaInfo_Config_MediaInfo::File_Buffer_Size_Hint_Pointer_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_Buffer_Size_Hint_Pointer;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_Buffer_Read_Size_Set (size_t NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Buffer_Read_Size=NewValue;
-}
-
-size_t MediaInfo_Config_MediaInfo::File_Buffer_Read_Size_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_Buffer_Read_Size;
-}
-
-//***************************************************************************
-// Filter
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_FILTER
-void MediaInfo_Config_MediaInfo::File_Filter_Set (int64u NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Filter_16[(int16u)NewValue]=true;
- File_Filter_HasChanged_=true;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Filter_Get (const int16u Value)
-{
- CriticalSectionLocker CSL(CS);
- //Test
- bool Exists;
- if (File_Filter_16.empty())
- Exists=true;
- else
- Exists=(File_Filter_16.find(Value)!=File_Filter_16.end());
- return Exists;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Filter_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Exist=!File_Filter_16.empty();
- return Exist;
-}
-
-void MediaInfo_Config_MediaInfo::File_Filter_Audio_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Filter_Audio=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Filter_Audio_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return File_Filter_Audio;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Filter_HasChanged ()
-{
- CriticalSectionLocker CSL(CS);
- bool File_Filter_HasChanged_Temp=File_Filter_HasChanged_;
- File_Filter_HasChanged_=false;
- return File_Filter_HasChanged_Temp;
-}
-#endif //MEDIAINFO_FILTER
-
-//***************************************************************************
-// Duplicate
-//***************************************************************************
-
-#if MEDIAINFO_DUPLICATE
-Ztring MediaInfo_Config_MediaInfo::File_Duplicate_Set (const Ztring &Value_In)
-{
- //Preparing for File__Duplicate...
- CS.Enter();
- File__Duplicate_List.push_back(Value_In);
-
- //Handling Memory index
- Ztring ToReturn;
- ZtringList List=Value_In;
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- //Form= "(-)Data", if "-" the value will be removed
- Ztring &Value=List[Pos];
- bool ToRemove=false;
- if (Value.find(__T('-'))==0)
- {
- Value.erase(Value.begin());
- ToRemove=true;
- }
-
- //Testing if this is information about a target
- if (List[Pos].find(__T("memory:"))==0 || List[Pos].find(__T("file:"))==0)
- {
- //Searching if already exist
- size_t Memory_Pos=File__Duplicate_Memory_Indexes.Find(List[Pos]);
- if (!ToRemove && Memory_Pos==Error)
- {
- //Does not exist yet (and adding is wanted)
- Memory_Pos=File__Duplicate_Memory_Indexes.Find(__T(""));
- if (Memory_Pos!=Error)
- File__Duplicate_Memory_Indexes[Memory_Pos]=List[Pos]; //A free place is found
- else
- {
- //Adding the place at the end
- Memory_Pos=File__Duplicate_Memory_Indexes.size();
- File__Duplicate_Memory_Indexes.push_back(List[Pos]);
- }
- }
- else if (ToRemove)
- {
- //Exists yet but Removal is wanted
- File__Duplicate_Memory_Indexes[Memory_Pos].clear();
- Memory_Pos=(size_t)-1;
- }
-
- ToReturn+=__T(";")+Ztring().From_Number(Memory_Pos);
- }
- }
- if (!ToReturn.empty())
- ToReturn.erase(ToReturn.begin()); //Remove first ";"
-
- CS.Leave();
- File_IsSeekable_Set(false); //If duplication, we can not seek anymore
-
- return ToReturn;
-}
-
-Ztring MediaInfo_Config_MediaInfo::File_Duplicate_Get (size_t AlreadyRead_Pos)
-{
- CriticalSectionLocker CSL(CS);
- if (AlreadyRead_Pos>=File__Duplicate_List.size())
- return Ztring(); //Nothing or not more than the last time
- Ztring Temp=File__Duplicate_List[AlreadyRead_Pos];
- return Temp;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Duplicate_Get_AlwaysNeeded (size_t AlreadyRead_Pos)
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=AlreadyRead_Pos>=File__Duplicate_List.size();
- return !Temp; //True if there is something to read
-}
-
-size_t MediaInfo_Config_MediaInfo::File__Duplicate_Memory_Indexes_Get (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- return File__Duplicate_Memory_Indexes.Find(Value);
-}
-
-void MediaInfo_Config_MediaInfo::File__Duplicate_Memory_Indexes_Erase (const Ztring &Value)
-{
- CriticalSectionLocker CSL(CS);
- size_t Pos=File__Duplicate_Memory_Indexes.Find(Value);
- if (Pos!=Error)
- File__Duplicate_Memory_Indexes[Pos].clear();
-}
-#endif //MEDIAINFO_DUPLICATE
-
-//***************************************************************************
-// Demux
-//***************************************************************************
-
-#if MEDIAINFO_DEMUX
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Demux_ForceIds_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_ForceIds=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::Demux_ForceIds_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_ForceIds;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Demux_PCM_20bitTo16bit_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_PCM_20bitTo16bit=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::Demux_PCM_20bitTo16bit_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_PCM_20bitTo16bit;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Demux_PCM_20bitTo24bit_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_PCM_20bitTo24bit=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::Demux_PCM_20bitTo24bit_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_PCM_20bitTo24bit;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_Hevc_Transcode_Iso14496_15_to_AnnexB=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_Hevc_Transcode_Iso14496_15_to_AnnexB;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Demux_Unpacketize_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_Unpacketize=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::Demux_Unpacketize_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_Unpacketize;
-}
-#endif //MEDIAINFO_DEMUX
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-void MediaInfo_Config_MediaInfo::Demux_Rate_Set (float64 NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_Rate=NewValue;
-}
-
-float64 MediaInfo_Config_MediaInfo::Demux_Rate_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_Rate;
-}
-#endif //MEDIAINFO_DEMUX
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-void MediaInfo_Config_MediaInfo::Demux_FirstDts_Set (int64u NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_FirstDts=NewValue;
-}
-
-int64u MediaInfo_Config_MediaInfo::Demux_FirstDts_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_FirstDts;
-}
-#endif //MEDIAINFO_DEMUX
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-void MediaInfo_Config_MediaInfo::Demux_FirstFrameNumber_Set (int64u NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_FirstFrameNumber=NewValue;
-}
-
-int64u MediaInfo_Config_MediaInfo::Demux_FirstFrameNumber_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_FirstFrameNumber;
-}
-#endif //MEDIAINFO_DEMUX
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-void MediaInfo_Config_MediaInfo::Demux_InitData_Set (int8u NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Demux_InitData=NewValue;
-}
-
-int8u MediaInfo_Config_MediaInfo::Demux_InitData_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Demux_InitData;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// IBI support
-//***************************************************************************
-
-#if MEDIAINFO_IBI
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Ibi_Set (const Ztring &Value)
-{
- string Data_Base64=Value.To_UTF8();
-
- CriticalSectionLocker CSL(CS);
- Ibi=Base64::decode(Data_Base64);
-}
-
-string MediaInfo_Config_MediaInfo::Ibi_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ibi;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Ibi_Create_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Ibi_Create=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::Ibi_Create_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ibi_Create;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Ibi_UseIbiInfoIfAvailable_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- Ibi_UseIbiInfoIfAvailable=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::Ibi_UseIbiInfoIfAvailable_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Ibi_UseIbiInfoIfAvailable;
-}
-#endif //MEDIAINFO_IBI
-
-//***************************************************************************
-// Encryption
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_AES
-void MediaInfo_Config_MediaInfo::Encryption_Format_Set (const Ztring &Value)
-{
- string Data=Value.To_UTF8();
- encryption_format Encryption_Format_Temp=Encryption_Format_None;
- if (Data=="AES")
- Encryption_Format_Temp=Encryption_Format_Aes;
-
- CriticalSectionLocker CSL(CS);
- Encryption_Format=Encryption_Format_Temp;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Encryption_Format_Set (encryption_format Value)
-{
- CriticalSectionLocker CSL(CS);
- Encryption_Format=Value;
-}
-
-string MediaInfo_Config_MediaInfo::Encryption_Format_GetS ()
-{
- CriticalSectionLocker CSL(CS);
- switch (Encryption_Format)
- {
- case Encryption_Format_Aes: return "AES";
- default: return string();
- }
-}
-
-encryption_format MediaInfo_Config_MediaInfo::Encryption_Format_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Encryption_Format;
-}
-#endif //MEDIAINFO_AES
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_AES
-void MediaInfo_Config_MediaInfo::Encryption_Key_Set (const Ztring &Value)
-{
- string Data_Base64=Value.To_UTF8();
-
- CriticalSectionLocker CSL(CS);
- Encryption_Key=Base64::decode(Data_Base64);
-}
-
-void MediaInfo_Config_MediaInfo::Encryption_Key_Set (const int8u* Value, size_t Value_Size)
-{
- CriticalSectionLocker CSL(CS);
- Encryption_Key=string((const char*)Value, Value_Size);
-}
-
-string MediaInfo_Config_MediaInfo::Encryption_Key_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Encryption_Key;
-}
-#endif //MEDIAINFO_AES
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_AES
-void MediaInfo_Config_MediaInfo::Encryption_Method_Set (const Ztring &Value)
-{
- string Data=Value.To_UTF8();
- encryption_method Encryption_Method_Temp=Encryption_Method_None;
- if (Data=="Segment")
- Encryption_Method_Temp=Encryption_Method_Segment;
-
- CriticalSectionLocker CSL(CS);
- Encryption_Method=Encryption_Method_Temp;
-}
-
-void MediaInfo_Config_MediaInfo::Encryption_Method_Set (encryption_method Value)
-{
- CriticalSectionLocker CSL(CS);
- Encryption_Method=Value;
-}
-
-string MediaInfo_Config_MediaInfo::Encryption_Method_GetS ()
-{
- CriticalSectionLocker CSL(CS);
- switch (Encryption_Method)
- {
- case Encryption_Method_Segment: return "Segment";
- default: return string();
- }
-}
-
-encryption_method MediaInfo_Config_MediaInfo::Encryption_Method_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Encryption_Method;
-}
-#endif //MEDIAINFO_AES
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_AES
-void MediaInfo_Config_MediaInfo::Encryption_Mode_Set (const Ztring &Value)
-{
- string Data=Value.To_UTF8();
- encryption_mode Encryption_Mode_Temp=Encryption_Mode_None;
- if (Data=="CBC")
- Encryption_Mode_Temp=Encryption_Mode_Cbc;
-
- CriticalSectionLocker CSL(CS);
- Encryption_Mode=Encryption_Mode_Temp;
-}
-
-void MediaInfo_Config_MediaInfo::Encryption_Mode_Set (encryption_mode Value)
-{
- CriticalSectionLocker CSL(CS);
- Encryption_Mode=Value;
-}
-
-string MediaInfo_Config_MediaInfo::Encryption_Mode_GetS ()
-{
- CriticalSectionLocker CSL(CS);
- switch (Encryption_Mode)
- {
- case Encryption_Mode_Cbc: return "CBC";
- default: return string();
- }
-}
-
-encryption_mode MediaInfo_Config_MediaInfo::Encryption_Mode_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Encryption_Mode;
-}
-#endif //MEDIAINFO_AES
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_AES
-void MediaInfo_Config_MediaInfo::Encryption_Padding_Set (const Ztring &Value)
-{
- string Data=Value.To_UTF8();
- encryption_padding Encryption_Padding_Temp=Encryption_Padding_None;
- if (Data=="PKCS7")
- Encryption_Padding_Temp=Encryption_Padding_Pkcs7;
-
- CriticalSectionLocker CSL(CS);
- Encryption_Padding=Encryption_Padding_Temp;
-}
-
-void MediaInfo_Config_MediaInfo::Encryption_Padding_Set (encryption_padding Value)
-{
- CriticalSectionLocker CSL(CS);
- Encryption_Padding=Value;
-}
-
-string MediaInfo_Config_MediaInfo::Encryption_Padding_GetS ()
-{
- CriticalSectionLocker CSL(CS);
- switch (Encryption_Padding)
- {
- case Encryption_Padding_Pkcs7: return "PKCS7";
- default: return string();
- }
-}
-
-encryption_padding MediaInfo_Config_MediaInfo::Encryption_Padding_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Encryption_Padding;
-}
-#endif //MEDIAINFO_AES
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_AES
-void MediaInfo_Config_MediaInfo::Encryption_InitializationVector_Set (const Ztring &Value)
-{
- if (Value==__T("Sequence number"))
- {
- CriticalSectionLocker CSL(CS);
- Encryption_InitializationVector="Sequence number";
- }
- else
- {
- string Data_Base64=Value.To_UTF8();
-
- CriticalSectionLocker CSL(CS);
- Encryption_InitializationVector=Base64::decode(Data_Base64);
- }
-}
-
-string MediaInfo_Config_MediaInfo::Encryption_InitializationVector_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return Encryption_InitializationVector;
-}
-#endif //MEDIAINFO_AES
-
-//***************************************************************************
-// NextPacket
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_NEXTPACKET
-void MediaInfo_Config_MediaInfo::NextPacket_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- NextPacket=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::NextPacket_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return NextPacket;
-}
-#endif //MEDIAINFO_NEXTPACKET
-
-//***************************************************************************
-// SubFile
-//***************************************************************************
-
-#if MEDIAINFO_EVENTS
-//---------------------------------------------------------------------------
-ZtringListList MediaInfo_Config_MediaInfo::SubFile_Config_Get ()
-{
- CriticalSectionLocker CSL(CS);
-
- return SubFile_Config;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::SubFile_StreamID_Set (int64u Value)
-{
- CriticalSectionLocker CSL(CS);
-
- SubFile_StreamID=Value;
-}
-
-//---------------------------------------------------------------------------
-int64u MediaInfo_Config_MediaInfo::SubFile_StreamID_Get ()
-{
- CriticalSectionLocker CSL(CS);
-
- return SubFile_StreamID;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::SubFile_IDs_Set (Ztring Value)
-{
- CriticalSectionLocker CSL(CS);
-
- SubFile_IDs=Value;
-}
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Config_MediaInfo::SubFile_IDs_Get ()
-{
- CriticalSectionLocker CSL(CS);
-
- return SubFile_IDs;
-}
-#endif //MEDIAINFO_EVENTS
-
-//***************************************************************************
-// SubFile
-//***************************************************************************
-
-#if MEDIAINFO_EVENTS
-//---------------------------------------------------------------------------
-bool MediaInfo_Config_MediaInfo::ParseUndecodableFrames_Get ()
-{
- CriticalSectionLocker CSL(CS);
-
- return ParseUndecodableFrames;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::ParseUndecodableFrames_Set (bool Value)
-{
- CriticalSectionLocker CSL(CS);
-
- ParseUndecodableFrames=Value;
-}
-#endif //MEDIAINFO_EVENTS
-
-//***************************************************************************
-// Event
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-bool MediaInfo_Config_MediaInfo::Event_CallBackFunction_IsSet ()
-{
- CriticalSectionLocker CSL(CS);
-
- return Event_CallBackFunction?true:false;
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-Ztring MediaInfo_Config_MediaInfo::Event_CallBackFunction_Set (const Ztring &Value)
-{
- ZtringList List=Value;
-
- CriticalSectionLocker CSL(CS);
-
- if (List.empty())
- {
- Event_CallBackFunction=(MediaInfo_Event_CallBackFunction*)NULL;
- Event_UserHandler=NULL;
- }
- else
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (List[Pos].find(__T("CallBack=memory://"))==0)
- Event_CallBackFunction=(MediaInfo_Event_CallBackFunction*)Ztring(List[Pos].substr(18, std::string::npos)).To_int64u();
- else if (List[Pos].find(__T("UserHandle=memory://"))==0)
- Event_UserHandler=(void*)Ztring(List[Pos].substr(20, std::string::npos)).To_int64u();
- else if (List[Pos].find(__T("UserHandler=memory://"))==0)
- Event_UserHandler=(void*)Ztring(List[Pos].substr(21, std::string::npos)).To_int64u();
- else
- return("Problem during Event_CallBackFunction value parsing");
- }
-
- return Ztring();
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-Ztring MediaInfo_Config_MediaInfo::Event_CallBackFunction_Get ()
-{
- CriticalSectionLocker CSL(CS);
-
- return __T("CallBack=memory://")+Ztring::ToZtring((size_t)Event_CallBackFunction)+__T(";UserHandler=memory://")+Ztring::ToZtring((size_t)Event_UserHandler);
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-void MediaInfo_Config_MediaInfo::Event_Send (File__Analyze* Source, const int8u* Data_Content, size_t Data_Size, const Ztring &File_Name)
-{
- CriticalSectionLocker CSL(CS);
-
- if (Source==NULL)
- {
- MediaInfo_Event_Generic* Temp=(MediaInfo_Event_Generic*)Data_Content;
-
- if (Demux_Offset_Frame!=(int64u)-1)
- {
- if (Temp->FrameNumber!=(int64u)-1)
- Temp->FrameNumber+=Demux_Offset_Frame;
- if (Temp->FrameNumber_PresentationOrder!=(int64u)-1)
- Temp->FrameNumber_PresentationOrder+=Demux_Offset_Frame;
- }
- if (Demux_Offset_DTS!=(int64u)-1)
- {
- if (Temp->DTS!=(int64u)-1)
- Temp->DTS+=Demux_Offset_DTS;
- if (Temp->PTS!=(int64u)-1)
- Temp->PTS+=Demux_Offset_DTS;
- if (Demux_Offset_DTS_FromStream!=(int64u)-1)
- {
- if (Temp->DTS!=(int64u)-1)
- Temp->DTS-=Demux_Offset_DTS_FromStream;
- if (Temp->PTS!=(int64u)-1)
- Temp->PTS-=Demux_Offset_DTS_FromStream;
- }
- }
- if (File_IgnoreFramesBefore)
- {
- if (Temp->FrameNumber!=(int64u)-1)
- {
- if (Temp->FrameNumber>File_IgnoreFramesBefore)
- Temp->FrameNumber-=File_IgnoreFramesBefore;
- else
- Temp->FrameNumber=0;
- }
- if (Temp->DTS!=(int64u)-1)
- {
- if (File_IgnoreFramesBefore && File_IgnoreFramesRate)
- {
- int64u TimeOffset=float64_int64s(((float64)File_IgnoreFramesBefore)/File_IgnoreFramesRate*1000000000);
- if (Temp->DTS>TimeOffset)
- Temp->DTS-=TimeOffset;
- else
- Temp->DTS=0;
- }
- }
- if (Temp->PTS!=(int64u)-1)
- {
- if (File_IgnoreFramesBefore && File_IgnoreFramesRate)
- {
- int64u TimeOffset=float64_int64s(((float64)File_IgnoreFramesBefore)/File_IgnoreFramesRate*1000000000);
- if (Temp->PTS>TimeOffset)
- Temp->PTS-=TimeOffset;
- else
- Temp->PTS=0;
- }
- }
- }
- }
-
- if (Source)
- {
- event_delayed* Event=new event_delayed(Data_Content, Data_Size, File_Name);
- Events_Delayed[Source].push_back(Event);
-
- // Copying buffers
- int32u* EventCode=(int32u*)Data_Content;
- if (((*EventCode)&0x00FFFFFF)==((MediaInfo_Event_Global_Demux<<8)|4) && Data_Size==sizeof(MediaInfo_Event_Global_Demux_4))
- {
- MediaInfo_Event_Global_Demux_4* Old=(MediaInfo_Event_Global_Demux_4*)Data_Content;
- MediaInfo_Event_Global_Demux_4* New=(MediaInfo_Event_Global_Demux_4*)Event->Data_Content;
- if (New->Content_Size)
- {
- int8u* Content=new int8u[New->Content_Size];
- std::memcpy(Content, Old->Content, New->Content_Size*sizeof(int8u));
- New->Content=Content;
- }
- if (New->Offsets_Size)
- {
- int64u* Offsets_Stream=new int64u[New->Offsets_Size];
- std::memcpy(Offsets_Stream, Old->Offsets_Stream, New->Offsets_Size*sizeof(int64u));
- New->Offsets_Stream=Offsets_Stream;
- int64u* Offsets_Content=new int64u[New->Offsets_Size];
- std::memcpy(Offsets_Content, Old->Offsets_Content, New->Offsets_Size*sizeof(int64u));
- New->Offsets_Content=Offsets_Content;
- }
- if (New->OriginalContent_Size)
- {
- int8u* OriginalContent=new int8u[New->OriginalContent_Size];
- std::memcpy(OriginalContent, Old->OriginalContent, New->OriginalContent_Size*sizeof(int8u));
- New->OriginalContent=OriginalContent;
- }
- }
- }
- else if (Event_CallBackFunction)
- Event_CallBackFunction ((unsigned char*)Data_Content, Data_Size, Event_UserHandler);
- else if (!File_Name.empty())
- {
- MediaInfo_Event_Generic* Event_Generic=(MediaInfo_Event_Generic*)Data_Content;
- if ((Event_Generic->EventCode&0x00FFFFFF)==((MediaInfo_Event_Global_Demux<<8)|0x04)) //Demux version 4
- {
- if (!MediaInfoLib::Config.Demux_Get())
- return;
-
- MediaInfo_Event_Global_Demux_4* Event=(MediaInfo_Event_Global_Demux_4*)Data_Content;
-
- Ztring File_Name_Final(File_Name);
- if (Event->StreamIDs_Size==0)
- File_Name_Final+=__T(".demux");
- else for (size_t Pos=0; Pos<Event->StreamIDs_Size; Pos++)
- {
- if (Event->StreamIDs_Width[Pos]==17)
- {
- Ztring ID;
- ID.From_CC4((int32u)Event->StreamIDs[Pos]);
- File_Name_Final+=__T('.')+ID;
- }
- else if (Event->StreamIDs_Width[Pos])
- {
- Ztring ID;
- ID.From_Number(Event->StreamIDs[Pos], 16);
- while (ID.size()<Event->StreamIDs_Width[Pos])
- ID.insert(0, 1, __T('0'));
- if (ID.size()>Event->StreamIDs_Width[Pos])
- ID.erase(0, ID.size()-Event->StreamIDs_Width[Pos]);
- File_Name_Final+=__T('.')+ID;
- }
- else
- File_Name_Final+=__T(".raw");
- }
-
- File F;
- F.Open(File_Name_Final, File::Access_Write_Append);
- F.Write(Event->Content, Event->Content_Size);
- }
- }
-}
-
-void MediaInfo_Config_MediaInfo::Event_Accepted (File__Analyze* Source)
-{
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- if (Demux_EventWasSent && NextPacket_Get())
- {
- Events_Delayed_CurrentSource=Source;
- return;
- }
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
-
- for (events_delayed::iterator Event=Events_Delayed.begin(); Event!=Events_Delayed.end(); ++Event)
- if (Event->first==Source)
- {
- for (size_t Pos=0; Pos<Event->second.size(); Pos++)
- if (Event->second[Pos])
- {
- Event_Send(NULL, Event->second[Pos]->Data_Content, Event->second[Pos]->Data_Size, Event->second[Pos]->File_Name);
-
- int32u EventCode=*((int32u*)Event->second[Pos]->Data_Content);
- bool IsDemux=(EventCode&0x00FFFF00)==(MediaInfo_Event_Global_Demux<<8);
-
- if (IsDemux)
- {
- MediaInfo_Event_Global_Demux_4* Old=(MediaInfo_Event_Global_Demux_4*)Event->second[Pos]->Data_Content;
- delete[] Old->Content; Old->Content=NULL;
- if (Old->Offsets_Size)
- {
- delete[] Old->Offsets_Content; Old->Offsets_Content=NULL;
- }
- if (Old->Offsets_Size)
- {
- delete[] Old->OriginalContent; Old->OriginalContent=NULL;
- }
- }
-
- delete Event->second[Pos]; Event->second[Pos]=NULL;
-
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- if (IsDemux && NextPacket_Get())
- {
- Demux_EventWasSent=true;
- Event->second.erase(Event->second.begin(), Event->second.begin()+Pos);
- Events_Delayed_CurrentSource=Source;
- return;
- }
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- }
-
- Events_Delayed.erase(Event->first);
- return;
- }
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::Event_SubFile_Start(const Ztring &FileName_Absolute)
-{
- Ztring FileName_Relative;
- if (File_Names_RootDirectory.empty())
- {
- FileName FN(FileName_Absolute);
- FileName_Relative=FN.Name_Get();
- if (!FN.Extension_Get().empty())
- {
- FileName_Relative+=__T('.');
- FileName_Relative+=FN.Extension_Get();
- }
- }
- else
- {
- Ztring Root=File_Names_RootDirectory+PathSeparator;
- FileName_Relative=FileName_Absolute;
- if (FileName_Relative.find(Root)==0)
- FileName_Relative.erase(0, Root.size());
- }
-
- struct MediaInfo_Event_General_SubFile_Start_0 Event;
- memset(&Event, 0xFF, sizeof(struct MediaInfo_Event_Generic));
- Event.EventCode=MediaInfo_EventCode_Create(0, MediaInfo_Event_General_SubFile_Start, 0);
- Event.EventSize=sizeof(struct MediaInfo_Event_General_SubFile_Start_0);
- Event.StreamIDs_Size=0;
-
- std::string FileName_Relative_Ansi=FileName_Relative.To_UTF8();
- std::wstring FileName_Relative_Unicode=FileName_Relative.To_Unicode();
- std::string FileName_Absolute_Ansi=FileName_Absolute.To_UTF8();
- std::wstring FileName_Absolute_Unicode=FileName_Absolute.To_Unicode();
- Event.FileName_Relative=FileName_Relative_Ansi.c_str();
- Event.FileName_Relative_Unicode=FileName_Relative_Unicode.c_str();
- Event.FileName_Absolute=FileName_Absolute_Ansi.c_str();
- Event.FileName_Absolute_Unicode=FileName_Absolute_Unicode.c_str();
-
- Event_Send(NULL, (const int8u*)&Event, Event.EventSize);
-}
-#endif //MEDIAINFO_EVENTS
-
-//***************************************************************************
-// Force Parser
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_MpegTs_ForceMenu_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_MpegTs_ForceMenu=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_MpegTs_ForceMenu_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_MpegTs_ForceMenu;
- return Temp;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_MpegTs_stream_type_Trust_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_MpegTs_stream_type_Trust=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_MpegTs_stream_type_Trust_Get ()
-{
- CS.Enter();
- bool Temp=File_MpegTs_stream_type_Trust;
- CS.Leave();
- return Temp;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_MpegTs_Atsc_transport_stream_id_Trust_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_MpegTs_Atsc_transport_stream_id_Trust=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_MpegTs_Atsc_transport_stream_id_Trust_Get ()
-{
- CS.Enter();
- bool Temp=File_MpegTs_Atsc_transport_stream_id_Trust;
- CS.Leave();
- return Temp;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_MpegTs_RealTime_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_MpegTs_RealTime=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_MpegTs_RealTime_Get ()
-{
- CS.Enter();
- bool Temp=File_MpegTs_RealTime;
- CS.Leave();
- return Temp;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_Bdmv_ParseTargetedFile_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Bdmv_ParseTargetedFile=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Bdmv_ParseTargetedFile_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_Bdmv_ParseTargetedFile;
- return Temp;
-}
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DVDIF_YES)
-void MediaInfo_Config_MediaInfo::File_DvDif_DisableAudioIfIsInContainer_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_DvDif_DisableAudioIfIsInContainer=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_DvDif_DisableAudioIfIsInContainer_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_DvDif_DisableAudioIfIsInContainer;
- return Temp;
-}
-#endif //defined(MEDIAINFO_DVDIF_YES)
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DVDIF_YES)
-void MediaInfo_Config_MediaInfo::File_DvDif_IgnoreTransmittingFlags_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_DvDif_IgnoreTransmittingFlags=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_DvDif_IgnoreTransmittingFlags_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_DvDif_IgnoreTransmittingFlags;
- return Temp;
-}
-#endif //defined(MEDIAINFO_DVDIF_YES)
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DVDIF_ANALYZE_YES)
-void MediaInfo_Config_MediaInfo::File_DvDif_Analysis_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_DvDif_Analysis=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_DvDif_Analysis_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_DvDif_Analysis;
- return Temp;
-}
-#endif //defined(MEDIAINFO_DVDIF_ANALYZE_YES)
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_MACROBLOCKS
-void MediaInfo_Config_MediaInfo::File_Macroblocks_Parse_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Macroblocks_Parse=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Macroblocks_Parse_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_Macroblocks_Parse;
- return Temp;
-}
-#endif //MEDIAINFO_MACROBLOCKS
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_GrowingFile_Delay_Set (float64 NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_GrowingFile_Delay=NewValue;
-}
-
-float64 MediaInfo_Config_MediaInfo::File_GrowingFile_Delay_Get ()
-{
- CriticalSectionLocker CSL(CS);
- float64 Temp=File_GrowingFile_Delay;
- return Temp;
-}
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_LIBCURL_YES)
-void MediaInfo_Config_MediaInfo::File_Curl_Set (const Ztring &NewValue)
-{
- size_t Pos=NewValue.find(__T(','));
- if (Pos==string::npos)
- Pos=NewValue.find(__T(';'));
- if (Pos!=string::npos)
- {
- Ztring Field=NewValue.substr(0, Pos); Field.MakeLowerCase();
- Ztring Value=NewValue.substr(Pos+1, string::npos);
- CriticalSectionLocker CSL(CS);
- Curl[Field]=Value;
- }
-}
-
-void MediaInfo_Config_MediaInfo::File_Curl_Set (const Ztring &Field_, const Ztring &NewValue)
-{
- Ztring Field=Field_; Field.MakeLowerCase();
- CriticalSectionLocker CSL(CS);
- Curl[Field]=NewValue;
-}
-
-Ztring MediaInfo_Config_MediaInfo::File_Curl_Get (const Ztring &Field_)
-{
- Ztring Field=Field_; Field.MakeLowerCase();
- CriticalSectionLocker CSL(CS);
- std::map<Ztring, Ztring>::iterator Value=Curl.find(Field);
- if (Value==Curl.end())
- return Ztring();
- else
- return Curl[Field];
-}
-#endif //defined(MEDIAINFO_LIBCURL_YES)
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_LIBMMS_YES)
-void MediaInfo_Config_MediaInfo::File_Mmsh_Describe_Only_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Mmsh_Describe_Only=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Mmsh_Describe_Only_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_Mmsh_Describe_Only;
- return Temp;
-}
-#endif //defined(MEDIAINFO_LIBMMS_YES)
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_Eia608_DisplayEmptyStream_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Eia608_DisplayEmptyStream=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Eia608_DisplayEmptyStream_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_Eia608_DisplayEmptyStream;
- return Temp;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::File_Eia708_DisplayEmptyStream_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Eia708_DisplayEmptyStream=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Eia708_DisplayEmptyStream_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_Eia708_DisplayEmptyStream;
- return Temp;
-}
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AC3_YES)
-void MediaInfo_Config_MediaInfo::File_Ac3_IgnoreCrc_Set (bool NewValue)
-{
- CriticalSectionLocker CSL(CS);
- File_Ac3_IgnoreCrc=NewValue;
-}
-
-bool MediaInfo_Config_MediaInfo::File_Ac3_IgnoreCrc_Get ()
-{
- CriticalSectionLocker CSL(CS);
- bool Temp=File_Ac3_IgnoreCrc;
- return Temp;
-}
-#endif //defined(MEDIAINFO_AC3_YES)
-
-//***************************************************************************
-// Analysis internal
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void MediaInfo_Config_MediaInfo::State_Set (float NewValue)
-{
- CriticalSectionLocker CSL(CS);
- State=NewValue;
-}
-
-float MediaInfo_Config_MediaInfo::State_Get ()
-{
- CriticalSectionLocker CSL(CS);
- float Temp=State;
- return Temp;
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_MediaInfo.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_MediaInfo.h
deleted file mode 100644
index a99a984dc..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_MediaInfo.h
+++ /dev/null
@@ -1,522 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Configuration of MediaInfo (per MediaInfo block)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Config_MediaInfoH
-#define MediaInfo_Config_MediaInfoH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Internal_Const.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config.h"
- #include "MediaInfo/MediaInfo_Events.h"
- #include "ZenLib/File.h"
-#endif //MEDIAINFO_EVENTS
-#include "ZenLib/CriticalSection.h"
-#include "ZenLib/Translation.h"
-#include "ZenLib/InfoMap.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-#if MEDIAINFO_EVENTS
- class File__Analyze;
- class MediaInfo_Config_PerPackage;
-#endif //MEDIAINFO_EVENTS
-
-#if MEDIAINFO_AES
-enum encryption_format
-{
- Encryption_Format_None,
- Encryption_Format_Aes,
-};
-enum encryption_method
-{
- Encryption_Method_None,
- Encryption_Method_Segment,
-};
-enum encryption_mode
-{
- Encryption_Mode_None,
- Encryption_Mode_Cbc,
-};
-enum encryption_padding
-{
- Encryption_Padding_None,
- Encryption_Padding_Pkcs7,
-};
-#endif //MEDIAINFO_AES
-
-//***************************************************************************
-// Class MediaInfo_Config_MediaInfo
-//***************************************************************************
-
-class MediaInfo_Config_MediaInfo
-{
-public :
- //Constructor/Destructor
- MediaInfo_Config_MediaInfo();
- ~MediaInfo_Config_MediaInfo();
-
- //General
- Ztring Option (const String &Option, const String &Value=Ztring());
-
- void File_IsSeekable_Set (bool NewValue);
- bool File_IsSeekable_Get ();
-
- void File_IsSub_Set (bool NewValue);
- bool File_IsSub_Get ();
-
- void File_IsDetectingDuration_Set (bool NewValue);
- bool File_IsDetectingDuration_Get ();
-
- void File_IsReferenced_Set (bool NewValue);
- bool File_IsReferenced_Get ();
-
- void File_TestContinuousFileNames_Set (bool NewValue);
- bool File_TestContinuousFileNames_Get ();
-
- void File_KeepInfo_Set (bool NewValue);
- bool File_KeepInfo_Get ();
-
- void File_StopAfterFilled_Set (bool NewValue);
- bool File_StopAfterFilled_Get ();
-
- void File_StopSubStreamAfterFilled_Set (bool NewValue);
- bool File_StopSubStreamAfterFilled_Get ();
-
- void File_Audio_MergeMonoStreams_Set (bool NewValue);
- bool File_Audio_MergeMonoStreams_Get ();
-
- void File_Demux_Interleave_Set (bool NewValue);
- bool File_Demux_Interleave_Get ();
-
- void File_ID_OnlyRoot_Set (bool NewValue);
- bool File_ID_OnlyRoot_Get ();
-
- #if MEDIAINFO_ADVANCED
- void File_IgnoreSequenceFileSize_Set (bool NewValue);
- bool File_IgnoreSequenceFileSize_Get ();
- #endif //MEDIAINFO_ADVANCED
-
- #if MEDIAINFO_ADVANCED
- void File_IgnoreSequenceFilesCount_Set (bool NewValue);
- bool File_IgnoreSequenceFilesCount_Get ();
- #endif //MEDIAINFO_ADVANCED
-
- #if MEDIAINFO_ADVANCED
- void File_DefaultFrameRate_Set (float64 NewValue);
- float64 File_DefaultFrameRate_Get ();
- #endif //MEDIAINFO_ADVANCED
-
- #if MEDIAINFO_ADVANCED
- void File_Source_List_Set (bool NewValue);
- bool File_Source_List_Get ();
- #endif //MEDIAINFO_ADVANCED
-
- #if MEDIAINFO_ADVANCED
- void File_RiskyBitRateEstimation_Set (bool NewValue);
- bool File_RiskyBitRateEstimation_Get ();
- #endif //MEDIAINFO_ADVANCED
-
- #if MEDIAINFO_DEMUX
- #if MEDIAINFO_ADVANCED
- void File_Demux_Unpacketize_StreamLayoutChange_Skip_Set (bool NewValue);
- bool File_Demux_Unpacketize_StreamLayoutChange_Skip_Get ();
- #endif //MEDIAINFO_ADVANCED
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_MD5
- void File_Md5_Set (bool NewValue);
- bool File_Md5_Get ();
- #endif //MEDIAINFO_MD5
-
- #if defined(MEDIAINFO_REFERENCES_YES)
- void File_CheckSideCarFiles_Set (bool NewValue);
- bool File_CheckSideCarFiles_Get ();
- #endif //defined(MEDIAINFO_REFERENCES_YES)
-
- void File_FileName_Set (const Ztring &NewValue);
- Ztring File_FileName_Get ();
-
- void File_FileNameFormat_Set (const Ztring &NewValue);
- Ztring File_FileNameFormat_Get ();
-
- void File_TimeToLive_Set (float64 NewValue);
- float64 File_TimeToLive_Get ();
-
- void File_Partial_Begin_Set (const Ztring &NewValue);
- Ztring File_Partial_Begin_Get ();
- void File_Partial_End_Set (const Ztring &NewValue);
- Ztring File_Partial_End_Get ();
-
- void File_ForceParser_Set (const Ztring &NewValue);
- Ztring File_ForceParser_Get ();
-
- void File_Buffer_Size_Hint_Pointer_Set (size_t* NewValue);
- size_t* File_Buffer_Size_Hint_Pointer_Get ();
-
- void File_Buffer_Read_Size_Set (size_t NewValue);
- size_t File_Buffer_Read_Size_Get ();
-
- #if MEDIAINFO_AES
- void Encryption_Format_Set (const Ztring &Value);
- void Encryption_Format_Set (encryption_format Value);
- string Encryption_Format_GetS ();
- encryption_format Encryption_Format_Get ();
- void Encryption_Key_Set (const Ztring &Value);
- void Encryption_Key_Set (const int8u* Value, size_t Value_Size);
- string Encryption_Key_Get ();
- void Encryption_Method_Set (const Ztring &Value);
- void Encryption_Method_Set (encryption_method Value);
- string Encryption_Method_GetS ();
- encryption_method Encryption_Method_Get ();
- void Encryption_Mode_Set (const Ztring &Value);
- void Encryption_Mode_Set (encryption_mode Value);
- string Encryption_Mode_GetS ();
- encryption_mode Encryption_Mode_Get ();
- void Encryption_Padding_Set (const Ztring &Value);
- void Encryption_Padding_Set (encryption_padding Value);
- string Encryption_Padding_GetS ();
- encryption_padding Encryption_Padding_Get ();
- void Encryption_InitializationVector_Set (const Ztring &Value);
- string Encryption_InitializationVector_Get ();
- #endif //MEDIAINFO_AES
-
- #if MEDIAINFO_NEXTPACKET
- void NextPacket_Set (bool NewValue);
- bool NextPacket_Get ();
- #endif //MEDIAINFO_NEXTPACKET
-
- #if MEDIAINFO_FILTER
- void File_Filter_Set (int64u NewValue);
- bool File_Filter_Get (const int16u Value);
- bool File_Filter_Get ();
- void File_Filter_Audio_Set (bool NewValue);
- bool File_Filter_Audio_Get ();
- bool File_Filter_HasChanged();
- #endif //MEDIAINFO_FILTER
-
- #if MEDIAINFO_DUPLICATE
- Ztring File_Duplicate_Set (const Ztring &Value);
- Ztring File_Duplicate_Get (size_t AlreadyRead_Pos); //Requester must say how many Get() it already read
- bool File_Duplicate_Get_AlwaysNeeded (size_t AlreadyRead_Pos); //Requester must say how many Get() it already read
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_DUPLICATE
- size_t File__Duplicate_Memory_Indexes_Get (const Ztring &ToFind);
- void File__Duplicate_Memory_Indexes_Erase (const Ztring &ToFind);
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_EVENTS
- ZtringListList SubFile_Config_Get ();
- void SubFile_StreamID_Set(int64u Value);
- int64u SubFile_StreamID_Get();
- void SubFile_IDs_Set(Ztring Value);
- Ztring SubFile_IDs_Get();
- #endif //MEDIAINFO_EVENTS
-
- #if MEDIAINFO_EVENTS
- bool ParseUndecodableFrames_Get ();
- void ParseUndecodableFrames_Set (bool Value);
- #endif //MEDIAINFO_EVENTS
-
- #if MEDIAINFO_EVENTS
- bool Event_CallBackFunction_IsSet ();
- Ztring Event_CallBackFunction_Set (const Ztring &Value);
- Ztring Event_CallBackFunction_Get ();
- void Event_Send(File__Analyze* Source, const int8u* Data_Content, size_t Data_Size, const Ztring &File_Name=Ztring());
- void Event_Accepted(File__Analyze* Source);
- void Event_SubFile_Start(const Ztring &FileName_Absolute);
- #endif //MEDIAINFO_EVENTS
-
- #if MEDIAINFO_DEMUX
- void Demux_ForceIds_Set (bool NewValue);
- bool Demux_ForceIds_Get ();
- void Demux_PCM_20bitTo16bit_Set (bool NewValue);
- bool Demux_PCM_20bitTo16bit_Get ();
- void Demux_PCM_20bitTo24bit_Set (bool NewValue);
- bool Demux_PCM_20bitTo24bit_Get ();
- void Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Set (bool NewValue);
- bool Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Get ();
- void Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Set (bool NewValue);
- bool Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get ();
- void Demux_Unpacketize_Set (bool NewValue);
- bool Demux_Unpacketize_Get ();
- void Demux_Rate_Set (float64 NewValue);
- float64 Demux_Rate_Get ();
- void Demux_FirstDts_Set (int64u NewValue);
- int64u Demux_FirstDts_Get ();
- void Demux_FirstFrameNumber_Set (int64u NewValue);
- int64u Demux_FirstFrameNumber_Get ();
- void Demux_InitData_Set (int8u NewValue);
- int8u Demux_InitData_Get ();
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_IBI
- void Ibi_Set (const Ztring &NewValue);
- std::string Ibi_Get ();
- void Ibi_Create_Set (bool NewValue);
- bool Ibi_Create_Get ();
- void Ibi_UseIbiInfoIfAvailable_Set (bool NewValue);
- bool Ibi_UseIbiInfoIfAvailable_Get ();
- #endif //MEDIAINFO_IBI
-
- //Specific
- void File_MpegTs_ForceMenu_Set (bool NewValue);
- bool File_MpegTs_ForceMenu_Get ();
- void File_MpegTs_stream_type_Trust_Set (bool NewValue);
- bool File_MpegTs_stream_type_Trust_Get ();
- void File_MpegTs_Atsc_transport_stream_id_Trust_Set (bool NewValue);
- bool File_MpegTs_Atsc_transport_stream_id_Trust_Get ();
- void File_MpegTs_RealTime_Set (bool NewValue);
- bool File_MpegTs_RealTime_Get ();
- void File_Bdmv_ParseTargetedFile_Set (bool NewValue);
- bool File_Bdmv_ParseTargetedFile_Get ();
- #if defined(MEDIAINFO_DVDIF_YES)
- void File_DvDif_DisableAudioIfIsInContainer_Set (bool NewValue);
- bool File_DvDif_DisableAudioIfIsInContainer_Get ();
- void File_DvDif_IgnoreTransmittingFlags_Set (bool NewValue);
- bool File_DvDif_IgnoreTransmittingFlags_Get ();
- #endif //defined(MEDIAINFO_DVDIF_YES)
- #if defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- void File_DvDif_Analysis_Set (bool NewValue);
- bool File_DvDif_Analysis_Get ();
- #endif //defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- #if MEDIAINFO_MACROBLOCKS
- void File_Macroblocks_Parse_Set (bool NewValue);
- bool File_Macroblocks_Parse_Get ();
- #endif //MEDIAINFO_MACROBLOCKS
- void File_GrowingFile_Delay_Set(float64 Value);
- float64 File_GrowingFile_Delay_Get();
- #if defined(MEDIAINFO_LIBCURL_YES)
- void File_Curl_Set (const Ztring &NewValue);
- void File_Curl_Set (const Ztring &Field, const Ztring &NewValue);
- Ztring File_Curl_Get (const Ztring &Field);
- #endif //defined(MEDIAINFO_LIBCURL_YES)
- #if defined(MEDIAINFO_LIBMMS_YES)
- void File_Mmsh_Describe_Only_Set (bool NewValue);
- bool File_Mmsh_Describe_Only_Get ();
- #endif //defined(MEDIAINFO_LIBMMS_YES)
- void File_Eia608_DisplayEmptyStream_Set (bool NewValue);
- bool File_Eia608_DisplayEmptyStream_Get ();
- void File_Eia708_DisplayEmptyStream_Set (bool NewValue);
- bool File_Eia708_DisplayEmptyStream_Get ();
- #if defined(MEDIAINFO_AC3_YES)
- void File_Ac3_IgnoreCrc_Set (bool NewValue);
- bool File_Ac3_IgnoreCrc_Get ();
- #endif //defined(MEDIAINFO_AC3_YES)
-
- //Analysis internal
- void State_Set (float State);
- float State_Get ();
-
- //Internal to MediaInfo, not thread safe
- ZtringList File_Names;
- std::vector<int64u> File_Sizes;
- size_t File_Names_Pos;
- size_t File_Buffer_Size_Max;
- size_t File_Buffer_Size_ToRead;
- size_t File_Buffer_Size;
- int8u* File_Buffer;
- bool File_Buffer_Repeat;
- bool File_Buffer_Repeat_IsSupported;
- bool File_IsGrowing;
- bool File_IsNotGrowingAnymore;
- int64u File_Current_Offset;
- int64u File_Current_Size;
- int64u File_IgnoreFramesBefore;
- int64u File_IgnoreFramesAfter;
- float64 File_IgnoreFramesRate;
- int64u File_Size;
- float32 ParseSpeed;
- #if MEDIAINFO_EVENTS
- MediaInfo_Config_PerPackage* Config_PerPackage;
- Ztring File_Names_RootDirectory;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- bool Demux_EventWasSent;
- int64u Demux_Offset_Frame;
- int64u Demux_Offset_DTS;
- int64u Demux_Offset_DTS_FromStream;
- File__Analyze* Events_Delayed_CurrentSource;
- #if MEDIAINFO_SEEK
- bool Demux_IsSeeking;
- #endif //MEDIAINFO_SEEK
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_SEEK
- bool File_GoTo_IsFrameOffset;
- #endif //MEDIAINFO_SEEK
-
-private :
- bool FileIsSeekable;
- bool FileIsSub;
- bool FileIsDetectingDuration;
- bool FileIsReferenced;
- bool FileTestContinuousFileNames;
- bool FileKeepInfo;
- bool FileStopAfterFilled;
- bool FileStopSubStreamAfterFilled;
- bool Audio_MergeMonoStreams;
- bool File_Demux_Interleave;
- bool File_ID_OnlyRoot;
- #if MEDIAINFO_ADVANCED
- bool File_IgnoreSequenceFileSize;
- bool File_IgnoreSequenceFilesCount;
- float64 File_DefaultFrameRate;
- bool File_Source_List;
- bool File_RiskyBitRateEstimation;
- #if MEDIAINFO_DEMUX
- bool File_Demux_Unpacketize_StreamLayoutChange_Skip;
- #endif //MEDIAINFO_DEMUX
- #endif //MEDIAINFO_ADVANCED
- #if MEDIAINFO_MD5
- bool File_Md5;
- #endif //MEDIAINFO_MD5
- #if defined(MEDIAINFO_REFERENCES_YES)
- bool File_CheckSideCarFiles;
- #endif //defined(MEDIAINFO_REFERENCES_YES)
- Ztring File_FileName;
- Ztring File_FileNameFormat;
- float64 File_TimeToLive;
- Ztring File_Partial_Begin;
- Ztring File_Partial_End;
- Ztring File_ForceParser;
- size_t* File_Buffer_Size_Hint_Pointer;
- size_t File_Buffer_Read_Size;
-
- //Extra
- #if MEDIAINFO_AES
- encryption_format Encryption_Format;
- string Encryption_Key;
- encryption_method Encryption_Method;
- encryption_mode Encryption_Mode;
- encryption_padding Encryption_Padding;
- string Encryption_InitializationVector;
- #endif //MEDIAINFO_AES
-
- #if MEDIAINFO_NEXTPACKET
- bool NextPacket;
- #endif //MEDIAINFO_NEXTPACKET
-
- #if MEDIAINFO_FILTER
- std::map<int16u, bool> File_Filter_16;
- bool File_Filter_Audio;
- bool File_Filter_HasChanged_;
- #endif //MEDIAINFO_FILTER
-
- #if MEDIAINFO_DUPLICATE
- std::vector<Ztring> File__Duplicate_List;
- ZtringList File__Duplicate_Memory_Indexes;
- #endif //MEDIAINFO_DUPLICATE
-
- //Event
- #if MEDIAINFO_EVENTS
- MediaInfo_Event_CallBackFunction* Event_CallBackFunction; //void Event_Handler(unsigned char* Data_Content, size_t Data_Size, void* UserHandler)
- struct event_delayed
- {
- int8u* Data_Content;
- size_t Data_Size;
- Ztring File_Name;
-
- event_delayed (const int8u* Data_Content_, size_t Data_Size_, const Ztring &File_Name_)
- {
- File_Name=File_Name_;
- Data_Size=Data_Size_;
- Data_Content=new int8u[Data_Size];
- std::memcpy(Data_Content, Data_Content_, Data_Size);
- }
-
- ~event_delayed ()
- {
- delete[] Data_Content; //Data_Content=NULL;
- }
- };
- typedef std::map<File__Analyze*, std::vector<event_delayed*> > events_delayed;
- events_delayed Events_Delayed;
- void* Event_UserHandler;
- ZtringListList SubFile_Config;
- int64u SubFile_StreamID;
- bool ParseUndecodableFrames;
- Ztring SubFile_IDs;
- #endif //MEDIAINFO_EVENTS
-
- #if MEDIAINFO_DEMUX
- bool Demux_ForceIds;
- bool Demux_PCM_20bitTo16bit;
- bool Demux_PCM_20bitTo24bit;
- bool Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10;
- bool Demux_Hevc_Transcode_Iso14496_15_to_AnnexB;
- bool Demux_Unpacketize;
- float64 Demux_Rate;
- int64u Demux_FirstDts;
- int64u Demux_FirstFrameNumber;
- int8u Demux_InitData;
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_IBI
- std::string Ibi;
- bool Ibi_Create;
- bool Ibi_UseIbiInfoIfAvailable;
- #endif //MEDIAINFO_IBI
-
- //Specific
- bool File_MpegTs_ForceMenu;
- bool File_MpegTs_stream_type_Trust;
- bool File_MpegTs_Atsc_transport_stream_id_Trust;
- bool File_MpegTs_RealTime;
- bool File_Bdmv_ParseTargetedFile;
- #if defined(MEDIAINFO_DVDIF_YES)
- bool File_DvDif_DisableAudioIfIsInContainer;
- bool File_DvDif_IgnoreTransmittingFlags;
- #endif //defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- #if defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- bool File_DvDif_Analysis;
- #endif //defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- #if MEDIAINFO_MACROBLOCKS
- bool File_Macroblocks_Parse;
- #endif //MEDIAINFO_MACROBLOCKS
- float64 File_GrowingFile_Delay;
- #if defined(MEDIAINFO_LIBMMS_YES)
- bool File_Mmsh_Describe_Only;
- #endif //defined(MEDIAINFO_LIBMMS_YES)
- bool File_Eia608_DisplayEmptyStream;
- bool File_Eia708_DisplayEmptyStream;
- #if defined(MEDIAINFO_AC3_YES)
- bool File_Ac3_IgnoreCrc;
- #endif //defined(MEDIAINFO_AC3_YES)
-
- //Analysis internal
- float State;
-
- //Generic
- #if defined(MEDIAINFO_LIBCURL_YES)
- std::map<Ztring, Ztring> Curl;
- #endif //defined(MEDIAINFO_LIBCURL_YES)
-
- ZenLib::CriticalSection CS;
-
- //Constructor
- MediaInfo_Config_MediaInfo (const MediaInfo_Config_MediaInfo&); // Prevent copy-construction
- MediaInfo_Config_MediaInfo& operator=(const MediaInfo_Config_MediaInfo&); // Prevent assignment
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_PerPackage.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_PerPackage.cpp
deleted file mode 100644
index 64847b076..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_PerPackage.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Config_PerPackage.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include <algorithm>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-MediaInfo_Config_PerPackage::MediaInfo_Config_PerPackage()
-{
- #if MEDIAINFO_EVENTS
- Event_CallBackFunction=NULL;
- Event_UserHandler=NULL;
- #endif //MEDIAINFO_EVENTS
-
- CountOfPackages=(size_t)-1;
-}
-
-MediaInfo_Config_PerPackage::~MediaInfo_Config_PerPackage()
-{
-}
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-Ztring MediaInfo_Config_PerPackage::Option (const String &Option, const String &Value)
-{
- String Option_Lower(Option);
- size_t Egal_Pos=Option_Lower.find(__T('='));
- if (Egal_Pos==string::npos)
- Egal_Pos=Option_Lower.size();
- transform(Option_Lower.begin(), Option_Lower.begin()+Egal_Pos, Option_Lower.begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix
-
- if (Option_Lower==__T("file_event_callbackfunction"))
- {
- #if MEDIAINFO_EVENTS
- return Event_CallBackFunction_Set(Value);
- #else //MEDIAINFO_EVENTS
- return __T("Event manager is disabled due to compilation options");
- #endif //MEDIAINFO_EVENTS
- }
- else
- return __T("Option not known");
-}
-
-//***************************************************************************
-// Event
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-bool MediaInfo_Config_PerPackage::Event_CallBackFunction_IsSet ()
-{
- CriticalSectionLocker CSL(CS);
-
- return Event_CallBackFunction?true:false;
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-Ztring MediaInfo_Config_PerPackage::Event_CallBackFunction_Set (const Ztring &Value)
-{
- ZtringList List=Value;
-
- CriticalSectionLocker CSL(CS);
-
- if (List.empty())
- {
- Event_CallBackFunction=(MediaInfo_Event_CallBackFunction*)NULL;
- Event_UserHandler=NULL;
- }
- else
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (List[Pos].find(__T("CallBack=memory://"))==0)
- Event_CallBackFunction=(MediaInfo_Event_CallBackFunction*)Ztring(List[Pos].substr(18, std::string::npos)).To_int64u();
- else if (List[Pos].find(__T("UserHandle=memory://"))==0)
- Event_UserHandler=(void*)Ztring(List[Pos].substr(20, std::string::npos)).To_int64u();
- else if (List[Pos].find(__T("UserHandler=memory://"))==0)
- Event_UserHandler=(void*)Ztring(List[Pos].substr(21, std::string::npos)).To_int64u();
- else
- return("Problem during Event_CallBackFunction value parsing");
- }
-
- return Ztring();
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-Ztring MediaInfo_Config_PerPackage::Event_CallBackFunction_Get ()
-{
- CriticalSectionLocker CSL(CS);
-
- return __T("CallBack=memory://")+Ztring::ToZtring((size_t)Event_CallBackFunction)+__T(";UserHandler=memory://")+Ztring::ToZtring((size_t)Event_UserHandler);
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-void MediaInfo_Config_PerPackage::Event_Send (File__Analyze* Source, const int8u* Data_Content, size_t Data_Size, const Ztring &File_Name)
-{
- CriticalSectionLocker CSL(CS);
-
- if (Event_CallBackFunction)
- Event_CallBackFunction ((unsigned char*)Data_Content, Data_Size, Event_UserHandler);
-}
-#endif //MEDIAINFO_EVENTS
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_PerPackage.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_PerPackage.h
deleted file mode 100644
index f0c283c24..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Config_PerPackage.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Configuration of MediaInfo (per Package block)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Config_PerPackageH
-#define MediaInfo_Config_PerPackageH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Internal_Const.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config.h"
- #include "MediaInfo/MediaInfo_Events.h"
- #include "ZenLib/File.h"
-#endif //MEDIAINFO_EVENTS
-#include "ZenLib/CriticalSection.h"
-#include "ZenLib/Translation.h"
-#include "ZenLib/InfoMap.h"
-#include <deque>
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-#if MEDIAINFO_EVENTS
- class File__Analyze;
-#endif //MEDIAINFO_EVENTS
-
-//***************************************************************************
-// Class MediaInfo_Config_PerPackage
-//***************************************************************************
-
-class MediaInfo_Config_PerPackage
-{
-public :
- //Constructor/Destructor
- MediaInfo_Config_PerPackage();
- ~MediaInfo_Config_PerPackage();
-
- //General
- Ztring Option (const String &Option, const String &Value=Ztring());
-
- #if MEDIAINFO_EVENTS
- void IsClosedGOP (File__Analyze* Source);
- #endif //MEDIAINFO_EVENTS
-
- #if MEDIAINFO_EVENTS
- bool Event_CallBackFunction_IsSet ();
- Ztring Event_CallBackFunction_Set (const Ztring &Value);
- Ztring Event_CallBackFunction_Get ();
- void Event_Send(File__Analyze* Source, const int8u* Data_Content, size_t Data_Size, const Ztring &File_Name=Ztring());
- void Event_SubFile_Start(const Ztring &FileName_Absolute);
- #endif //MEDIAINFO_EVENTS
-
- //Internal
- size_t CountOfPackages;
-
-private :
- //Event
- #if MEDIAINFO_EVENTS
- MediaInfo_Event_CallBackFunction* Event_CallBackFunction; //void Event_Handler(unsigned char* Data_Content, size_t Data_Size, void* UserHandler)
- void* Event_UserHandler;
- #endif //MEDIAINFO_EVENTS
-
- ZenLib::CriticalSection CS;
-
- //Constructor
- MediaInfo_Config_PerPackage (const MediaInfo_Config_PerPackage&); // Prevent copy-construction
- MediaInfo_Config_PerPackage& operator=(const MediaInfo_Config_PerPackage&); // Prevent assignment
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Const.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Const.h
deleted file mode 100644
index b1b6223e6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Const.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Global configuration of MediaInfo
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_ConstH
-#define MediaInfo_ConstH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <string>
-#include <ZenLib/Conf.h>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-/// \mainpage MediaInfoLib Index Page
-///
-/// \section Interfaces
-///
-/// There is 2 access methods
-///
-/// - MediaInfo class \n
-/// To manage one file, this is the simplest interface. \n
-/// - MediaInfo::Open to analyse file \n
-/// - MediaInfo::Inform to have a summary \n
-/// - MediaInfo::Get to retreive one piece of information \n
-///
-/// - MediaInfoList class \n
-/// To manage a list of files \n
-/// - MediaInfoList::Open to analyse file \n
-/// - MediaInfoList::Inform to have a summary \n
-/// - MediaInfoList::Get to retreive one piece of information \n
-/// - MediaInfoList::Close to close one file \n
-///
-/// \section C C Interface (MediaInfo_*)
-/// For compatibility and DLL interface \n
-/// This is a C interface for the List class \n
-/// Note : Don't forget to include the MediaInfoDLL.h file in your source file! \n
-/// - Example of commands:
-/// - MediaInfo_Open to analyse file \n
-/// - MediaInfo_Inform to have a summary \n
-/// - MediaInfo_Get to retreive one piece of information \n
-/// - MediaInfo_Close to free memory \n
-///
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-/// @brief Kinds of Stream
-enum stream_t
-{
- Stream_General, ///< StreamKind = General
- Stream_Video, ///< StreamKind = Video
- Stream_Audio, ///< StreamKind = Audio
- Stream_Text, ///< StreamKind = Text
- Stream_Other, ///< StreamKind = Chapters
- Stream_Image, ///< StreamKind = Image
- Stream_Menu, ///< StreamKind = Menu
- Stream_Max
-};
-
-/// @brief Kind of information
-enum info_t
-{
- Info_Name, ///< InfoKind = Unique name of parameter
- Info_Text, ///< InfoKind = Value of parameter
- Info_Measure, ///< InfoKind = Unique name of measure unit of parameter
- Info_Options, ///< InfoKind = See infooptions_t
- Info_Name_Text, ///< InfoKind = Translated name of parameter
- Info_Measure_Text, ///< InfoKind = Translated name of measure unit
- Info_Info, ///< InfoKind = More information about the parameter
- Info_HowTo, ///< InfoKind = How this parameter is supported, could be N (No), B (Beta), R (Read only), W (Read/Write)
- Info_Domain, ///< InfoKind = Domain of this piece of information
- Info_Max
-};
-
-/// Get(...)[infooptions_t] return a string like "YNYN..." \n
-/// Use this enum to know at what correspond the Y (Yes) or N (No)
-/// If Get(...)[0]==Y, then :
-/// @brief Option if InfoKind = Info_Options
-enum infooptions_t
-{
- InfoOption_ShowInInform, ///< Show this parameter in Inform()
- InfoOption_Reserved, ///<
- InfoOption_ShowInSupported, ///< Internal use only (info : Must be showed in Info_Capacities() )
- InfoOption_TypeOfValue, ///< Value return by a standard Get() can be : T (Text), I (Integer, warning up to 64 bits), F (Float), D (Date), B (Binary datas coded Base64) (Numbers are in Base 10)
- InfoOption_Max
-};
-
-/// @brief File opening options
-enum fileoptions_t
-{
- FileOption_Nothing =0x00,
- FileOption_NoRecursive =0x01, ///< Do not browse folders recursively
- FileOption_CloseAll =0x02, ///< Close all files before open
- FileOption_Max =0x04
-};
-
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//Char types
-#undef __T
-#define __T(__x) __T(__x)
-#if defined(UNICODE) || defined (_UNICODE)
- typedef wchar_t Char; ///< Unicode/Ansi independant char
- #undef __T
- #define __T(__x) L ## __x
-#else
- typedef char Char; ///< Unicode/Ansi independant char
- #undef __T
- #define __T(__x) __x
-#endif
-typedef std::basic_string<MediaInfoLib::Char> String; ///< Unicode/Ansi independant string
-typedef std::basic_stringstream<MediaInfoLib::Char> StringStream; ///< Unicode/Ansi independant stringstream
-typedef std::basic_istringstream<MediaInfoLib::Char> tiStringStream; ///< Unicode/Ansi independant istringstream
-typedef std::basic_ostringstream<MediaInfoLib::Char> toStringStream; ///< Unicode/Ansi independant ostringstream
-//---------------------------------------------------------------------------
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Events.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Events.h
deleted file mode 100644
index ea76f9dd2..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Events.h
+++ /dev/null
@@ -1,752 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-/*Structures for MediaInfo events */
-
-#ifndef MediaInfo_EventsH
-#define MediaInfo_EventsH
-
-/***************************************************************************/
-/* Platforms (from libzen) */
-/***************************************************************************/
-
-/*-------------------------------------------------------------------------*/
-/*Win32*/
-#if defined(__NT__) || defined(_WIN32) || defined(WIN32)
- #ifndef WIN32
- #define WIN32
- #endif
- #ifndef _WIN32
- #define _WIN32
- #endif
- #ifndef __WIN32__
- #define __WIN32__ 1
- #endif
-#endif
-
-/*-------------------------------------------------------------------------*/
-/*Win64*/
-#if defined(_WIN64) || defined(WIN64)
- #ifndef WIN64
- #define WIN64
- #endif
- #ifndef _WIN64
- #define _WIN64
- #endif
- #ifndef __WIN64__
- #define __WIN64__ 1
- #endif
-#endif
-
-/*-------------------------------------------------------------------------*/
-/*Windows*/
-#if defined(WIN32) || defined(WIN64)
- #ifndef WINDOWS
- #define WINDOWS
- #endif
- #ifndef _WINDOWS
- #define _WINDOWS
- #endif
- #ifndef __WINDOWS__
- #define __WINDOWS__ 1
- #endif
-#endif
-
-/*-------------------------------------------------------------------------*/
-/*Unix (Linux, HP, Sun, BeOS...)*/
-#if defined(UNIX) || defined(_UNIX) || defined(__UNIX__) \
- || defined(__unix) || defined(__unix__) \
- || defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) \
- || defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) \
- || defined(__EMX__) || defined(__VMS) || defined(__BEOS__)
- #ifndef UNIX
- #define UNIX
- #endif
- #ifndef _UNIX
- #define _UNIX
- #endif
- #ifndef __UNIX__
- #define __UNIX__ 1
- #endif
-#endif
-
-/*-------------------------------------------------------------------------*/
-/*MacOS Classic*/
-#if defined(macintosh)
- #ifndef MACOS
- #define MACOS
- #endif
- #ifndef _MACOS
- #define _MACOS
- #endif
- #ifndef __MACOS__
- #define __MACOS__ 1
- #endif
-#endif
-
-/*-------------------------------------------------------------------------*/
-/*MacOS X*/
-#if defined(__APPLE__) && defined(__MACH__)
- #ifndef MACOSX
- #define MACOSX
- #endif
- #ifndef _MACOSX
- #define _MACOSX
- #endif
- #ifndef __MACOSX__
- #define __MACOSX__ 1
- #endif
-#endif
-
-/*Test of targets*/
-#if defined(WINDOWS) && defined(UNIX) && defined(MACOS) && defined(MACOSX)
- #pragma message Multiple platforms???
-#endif
-
-#if !defined(WIN32) && !defined(UNIX) && !defined(MACOS) && !defined(MACOSX)
- #pragma message No known platforms, assume default
-#endif
-
-/*-------------------------------------------------------------------------*/
-/*8-bit int */
-#if UCHAR_MAX==0xff
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 8
- typedef signed char MediaInfo_int8s;
- typedef unsigned char MediaInfo_int8u;
-#else
- #pragma message This machine has no 8-bit integertype?
-#endif
-
-/*-------------------------------------------------------------------------*/
-/*16-bit int */
-#if UINT_MAX == 0xffff
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 16
- typedef signed int MediaInfo_int16s;
- typedef unsigned int MediaInfo_int16u;
-#elif USHRT_MAX == 0xffff
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 16
- typedef signed short MediaInfo_int16s;
- typedef unsigned short MediaInfo_int16u;
-#else
- #pragma message This machine has no 16-bit integertype?
-#endif
-
-/*-------------------------------------------------------------------------*/
-/*32-bit int */
-#if UINT_MAX == 0xfffffffful
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 32
- typedef signed int MediaInfo_int32s;
- typedef unsigned int MediaInfo_int32u;
-#elif ULONG_MAX == 0xfffffffful
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 32
- typedef signed long MediaInfo_int32s;
- typedef unsigned long MediaInfo_int32u;
-#elif USHRT_MAX == 0xfffffffful
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 32
- typedef signed short MediaInfo_int32s;
- typedef unsigned short MediaInfo_int32u;
-#else
- #pragma message This machine has no 32-bit integer type?
-#endif
-
-/*-------------------------------------------------------------------------*/
-/*64-bit int */
-#if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__UNIX__) || defined(__MACOSX__)
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 64
- typedef unsigned long long MediaInfo_int64u;
- typedef signed long long MediaInfo_int64s;
-#elif defined(__WIN32__) || defined(_WIN32)
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 64
- typedef unsigned __int64 MediaInfo_int64u;
- typedef signed __int64 MediaInfo_int64s;
-#else
- #pragma message This machine has no 64-bit integer type?
-#endif
-/*-------------------------------------------------------------------------*/
-
-
-/***************************************************************************/
-/* The callback function */
-/***************************************************************************/
-
-#if !defined(__WINDOWS__) && !defined(__stdcall)
- #define __stdcall
-#endif //!defined(__WINDOWS__)
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
- typedef void (__stdcall MediaInfo_Event_CallBackFunction)(unsigned char* Data_Content, size_t Data_Size, void* UserHandler);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/***************************************************************************/
-/* EventCode management */
-/***************************************************************************/
-
-#define MediaInfo_EventCode_Create(ParserID, EventID, EventVersion) \
- ( ((MediaInfo_int32u)ParserID )<<24 \
- | ((MediaInfo_int32u)EventID )<< 8 \
- | ((MediaInfo_int32u)EventVersion) )
-
-/***************************************************************************/
-/* Global */
-/***************************************************************************/
-
-/*-------------------------------------------------------------------------*/
-/* Time code */
-typedef struct MediaInfo_time_code
-{
- MediaInfo_int8u Hours;
- MediaInfo_int8u Minutes;
- MediaInfo_int8u Seconds;
- MediaInfo_int8u Frames;
- MediaInfo_int8u FramesPerSecond;
- MediaInfo_int8u DropFrame; //0= No, 1=Yes
- MediaInfo_int8u Reserved[2];
-} MediaInfo_time_code;
-
-/*-------------------------------------------------------------------------*/
-/* Generic */
-#define MEDIAINFO_EVENT_GENERIC \
- MediaInfo_int32u EventCode; \
- MediaInfo_int32u ReservedI32; \
- size_t EventSize; \
- size_t StreamIDs_Size; \
- MediaInfo_int64u StreamIDs[16]; \
- MediaInfo_int8u StreamIDs_Width[16]; \
- MediaInfo_int8u ParserIDs[16]; \
- MediaInfo_int64u StreamOffset; \
- MediaInfo_int64u FrameNumber; \
- MediaInfo_int64u PCR; \
- MediaInfo_int64u PTS; \
- MediaInfo_int64u DTS; \
- MediaInfo_int64u DUR; \
- MediaInfo_int64u FrameNumber_PresentationOrder; \
- MediaInfo_int64u ReservedI64[1]; \
- MediaInfo_time_code TimeCode_Container; \
- MediaInfo_time_code TimeCode_SDTI; \
- MediaInfo_time_code TimeCode_RawStream; \
- MediaInfo_time_code ReservedT[5]; \
-
-typedef struct MediaInfo_Event_Generic
-{
- MEDIAINFO_EVENT_GENERIC
-} MediaInfo_Event_Generic;
-
-/*-------------------------------------------------------------------------*/
-/* MediaInfo_Event_Log_0 */
-#define MediaInfo_Event_Log 0x0F00
-struct MediaInfo_Event_Log_0
-{
- MEDIAINFO_EVENT_GENERIC
- MediaInfo_int8u Type;
- MediaInfo_int8u Severity;
- MediaInfo_int8u Reserved2;
- MediaInfo_int8u Reserved3;
- MediaInfo_int32u MessageCode;
- MediaInfo_int32u Reserved4;
- const wchar_t* MessageString;
- const wchar_t* MessageStringU;
- const char* MessageStringA;
-};
-
-/*-------------------------------------------------------------------------*/
-/* Demux */
-#define MediaInfo_Event_Global_Demux 0xAF00
-enum MediaInfo_Event_Global_Demux_0_contenttype
-{
- MediaInfo_Event_Global_Demux_0_ContentType_MainStream,
- MediaInfo_Event_Global_Demux_0_ContentType_SubStream,
- MediaInfo_Event_Global_Demux_0_ContentType_Header,
- MediaInfo_Event_Global_Demux_0_ContentType_Synchro
-};
-
-struct MediaInfo_Event_Global_Demux_4
-{
- MEDIAINFO_EVENT_GENERIC
- MediaInfo_int8u Content_Type; /*MediaInfo_Event_Global_Demux_0_contenttype*/
- size_t Content_Size;
- const MediaInfo_int8u* Content;
- MediaInfo_int64u Flags; /*bit0=random_access*/
- size_t Offsets_Size;
- const MediaInfo_int64u* Offsets_Stream; /* From the begin of the stream */
- const MediaInfo_int64u* Offsets_Content; /* From the begin of the demuxed content */
- size_t OriginalContent_Size; /* In case of decoded content inside MediaInfo, OriginalContent contain the not-decoded stream */
- const MediaInfo_int8u* OriginalContent; /* In case of decoded content inside MediaInfo, OriginalContent contain the not-decoded stream */
-};
-
-/*-------------------------------------------------------------------------*/
-/* BytesRead */
-#define MediaInfo_Event_Global_BytesRead 0xAF02
-struct MediaInfo_Event_Global_BytesRead_0
-{
- MEDIAINFO_EVENT_GENERIC
- size_t Content_Size;
- const MediaInfo_int8u* Content;
-};
-
-/*-------------------------------------------------------------------------*/
-/* MediaInfo_Event_Video_SliceInfo_0 */
-#define MediaInfo_Event_Video_SliceInfo 0x7801
-struct MediaInfo_Event_Video_SliceInfo_0
-{
- MEDIAINFO_EVENT_GENERIC
- MediaInfo_int64u FieldPosition;
- MediaInfo_int64u SlicePosition;
- MediaInfo_int8u SliceType;
- MediaInfo_int64u Flags;
-};
-
-/***************************************************************************/
-/* General */
-/***************************************************************************/
-
-#define MediaInfo_Parser_None 0x00
-#define MediaInfo_Parser_General 0x00
-#define MediaInfo_Parser_Global 0x00
-#define MediaInfo_Parser_Video 0x01
-
-/*-------------------------------------------------------------------------*/
-/* SubFile_Missing */
-#define MediaInfo_Event_General_SubFile_Missing 0x1F01
-struct MediaInfo_Event_General_SubFile_Missing_0
-{
- MEDIAINFO_EVENT_GENERIC
- const char* FileName_Relative;
- const wchar_t* FileName_Relative_Unicode;
- const char* FileName_Absolute;
- const wchar_t* FileName_Absolute_Unicode;
-};
-
-/*-------------------------------------------------------------------------*/
-/* Start */
-#define MediaInfo_Event_General_Start 0x7001
-struct MediaInfo_Event_General_Start_0
-{
- MEDIAINFO_EVENT_GENERIC
- MediaInfo_int64u Stream_Size;
- const char* FileName;
- const wchar_t* FileName_Unicode;
-};
-
-/*-------------------------------------------------------------------------*/
-/* End */
-#define MediaInfo_Event_General_End 0x7002
-struct MediaInfo_Event_General_End_0
-{
- MEDIAINFO_EVENT_GENERIC
- MediaInfo_int64u Stream_Bytes_Analyzed;
- MediaInfo_int64u Stream_Size;
- MediaInfo_int64u Stream_Bytes_Padding;
- MediaInfo_int64u Stream_Bytes_Junk;
-};
-
-/*-------------------------------------------------------------------------*/
-/* Parser_Selected */
-#define MediaInfo_Event_General_Parser_Selected 0x7003
-struct MediaInfo_Event_General_Parser_Selected_0
-{
- MEDIAINFO_EVENT_GENERIC
- char Name[16];
-};
-
-/*-------------------------------------------------------------------------*/
-/* Move request */
-#define MediaInfo_Event_General_Move_Request 0x7004
-struct MediaInfo_Event_General_Move_Request_0
-{
- MEDIAINFO_EVENT_GENERIC
-};
-
-/*-------------------------------------------------------------------------*/
-/* Move done */
-#define MediaInfo_Event_General_Move_Done 0x7005
-struct MediaInfo_Event_General_Move_Done_0
-{
- MEDIAINFO_EVENT_GENERIC
-};
-
-/*-------------------------------------------------------------------------*/
-/* SubFile_Start */
-#define MediaInfo_Event_General_SubFile_Start 0x7006
-struct MediaInfo_Event_General_SubFile_Start_0
-{
- MEDIAINFO_EVENT_GENERIC
- const char* FileName_Relative;
- const wchar_t* FileName_Relative_Unicode;
- const char* FileName_Absolute;
- const wchar_t* FileName_Absolute_Unicode;
-};
-
-/*-------------------------------------------------------------------------*/
-/* SubFile_End */
-#define MediaInfo_Event_General_SubFile_End 0x7007
-struct MediaInfo_Event_General_SubFile_End_0
-{
- MEDIAINFO_EVENT_GENERIC
-};
-
-/***************************************************************************/
-/* MPEG-TS / BDAV / TSP */
-/***************************************************************************/
-
-#define MediaInfo_Parser_SideCar 0x72
-
-/***************************************************************************/
-/* MPEG-TS / BDAV / TSP */
-/***************************************************************************/
-
-#define MediaInfo_Parser_MpegTs 0x01
-
-/***************************************************************************/
-/* MPEG-PS */
-/***************************************************************************/
-
-#define MediaInfo_Parser_MpegPs 0x02
-#define MediaInfo_Parser_MpegPs_Ext 0x70
-
-/***************************************************************************/
-/* DV / DIF */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DvDif 0x03
-
-/*-------------------------------------------------------------------------*/
-/* Analysis */
-#define MediaInfo_Event_DvDif_Analysis_Frame 0xB001
-struct MediaInfo_Event_DvDif_Analysis_Frame_0
-{
- MediaInfo_int32u EventCode;
- MediaInfo_int32u TimeCode;
- MediaInfo_int32u RecordedDateTime1;
- MediaInfo_int16u RecordedDateTime2;
- MediaInfo_int8u Arb;
- MediaInfo_int8u Verbosity;
- char* Errors;
-};
-
-/***************************************************************************/
-/* CDXA */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Cdxa 0x04
-
-/***************************************************************************/
-/* FLV */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Flv 0x06
-
-/***************************************************************************/
-/* GXF */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Gxf 0x07
-
-/***************************************************************************/
-/* Matroska */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Matroska 0x08
-
-/***************************************************************************/
-/* MPEG-4 */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Mpeg4 0x09
-#define MediaInfo_Parser_Mpeg4_Desc 0x71
-
-/***************************************************************************/
-/* MXF */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Mxf 0x0A
-
-/***************************************************************************/
-/* OGG */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Ogg 0x0B
-
-/***************************************************************************/
-/* RIFF */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Riff 0x0C
-
-/***************************************************************************/
-/* WM */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Wm 0x0D
-
-/***************************************************************************/
-/* LXF */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Lxf 0x0E
-
-/***************************************************************************/
-/* HLS */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Hls 0x60
-
-/***************************************************************************/
-/* HLS Index */
-/***************************************************************************/
-
-#define MediaInfo_Parser_HlsIndex 0x61
-
-/***************************************************************************/
-/* Internet Streaming Media */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Ism 0x62
-
-/***************************************************************************/
-/* DASH MPD */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DashMpd 0x63
-
-/***************************************************************************/
-/* HDS F4M */
-/***************************************************************************/
-
-#define MediaInfo_Parser_HdsF4m 0x64
-
-/***************************************************************************/
-/* DCP Composition Asset Map */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DcpAm 0x65
-
-/***************************************************************************/
-/* DCP Composition Playlist */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DcpCpl 0x66
-
-/***************************************************************************/
-/* DCP Package List */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DcpPkl 0x67
-
-/***************************************************************************/
-/* DCP Output List */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DcpOpl 0x68
-
-/***************************************************************************/
-/* Pro Tools session 10 */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Ptx 0x69
-
-/***************************************************************************/
-/* AAF */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Aaf 0x6A
-
-/***************************************************************************/
-/* DXW */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Dxw 0x6B
-
-/***************************************************************************/
-/* MPEG Video */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Mpegv 0x80
-
-/***************************************************************************/
-/* AVC */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Avc 0x81
-
-/***************************************************************************/
-/* AVC */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Hevc 0x83
-
-/***************************************************************************/
-/* VC-1 */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Vc1 0x82
-
-/***************************************************************************/
-/* Active Format Description (AFD) */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Afd 0x83
-
-/***************************************************************************/
-/* Bar Data */
-/***************************************************************************/
-
-#define MediaInfo_Parser_BarData 0x84
-
-/***************************************************************************/
-/* MPEG-4 Visual */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Mpeg4v 0x85
-
-/***************************************************************************/
-/* DTS */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Dts 0xA0
-
-/***************************************************************************/
-/* AC-3 */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Ac3 0xA1
-
-/***************************************************************************/
-/* AAC */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Aac 0xA2
-
-/***************************************************************************/
-/* MPEG Audio */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Mpega 0xA3
-
-/***************************************************************************/
-/* PCM */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Pcm 0xA4
-
-/***************************************************************************/
-/* AES-3 */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Aes3 0xA5
-
-/***************************************************************************/
-/* Dolby E */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DolbyE 0xA6
-
-/***************************************************************************/
-/* Channel grouping intermediate module */
-/***************************************************************************/
-
-#define MediaInfo_Parser_ChannelGrouping 0xA7
-
-/***************************************************************************/
-/* JPEG */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Jpeg 0xC0
-
-/***************************************************************************/
-/* CEA-608 (formely IEA-608) */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Eia608 0xF0
-
-/***************************************************************************/
-/* DTVCC Transport (CEA-708, formely IEA-708) */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DtvccTransport 0xF1
-#define MediaInfo_Parser_Eia708 0xF1 /*Deprecated*/
-
-/***************************************************************************/
-/* DTVCC Caption (CEA-708, formely IEA-708) */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DtvccCaption 0xF2
-
-/***************************************************************************/
-/* CDP */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Cdp 0xF3
-
-/***************************************************************************/
-/* DVD CC */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DvdCc 0xF4
-
-/***************************************************************************/
-/* SCTE 20 */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Scte20 0xF5
-
-/***************************************************************************/
-/* DVB Subtitle */
-/***************************************************************************/
-
-#define MediaInfo_Parser_DvbSubtitle 0xF6
-
-/***************************************************************************/
-/* Teletext */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Teletext 0xF7
-
-/***************************************************************************/
-/* SCC */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Scc 0xF8
-
-/***************************************************************************/
-/* ARIB STD B24/B37 */
-/***************************************************************************/
-
-#define MediaInfo_Parser_AribStdB24B37 0xF9
-
-/***************************************************************************/
-/* TTML */
-/***************************************************************************/
-
-#define MediaInfo_Parser_Ttml 0xFA
-
-/***************************************************************************/
-/* SubRip */
-/***************************************************************************/
-
-#define MediaInfo_Parser_SubRip 0xFB
-
-/***************************************************************************/
-/* N19 */
-/***************************************************************************/
-
-#define MediaInfo_Parser_N19 0xFC
-
-#endif //MediaInfo_EventsH
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Events_Internal.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Events_Internal.h
deleted file mode 100644
index b4bcc12c6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Events_Internal.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-#ifndef MediaInfo_Events_InternalH
-#define MediaInfo_Events_InternalH
-
-#include "MediaInfo/MediaInfo_Events.h"
-#include "MediaInfo/TimeCode.h"
-#include <cstring>
-using namespace MediaInfoLib;
-using namespace std;
-
-//---------------------------------------------------------------------------
-// Generic
-#define EVENT_BEGIN(_EventType, _EventName, _EventVersion) \
-{ \
- struct MediaInfo_Event_##_EventType##_##_EventName##_##_EventVersion Event;\
- Event_Prepare((struct MediaInfo_Event_Generic*)&Event); \
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_##_EventType, MediaInfo_Event_##_EventType##_##_EventName, _EventVersion); \
- Event.EventSize=sizeof(struct MediaInfo_Event_##_EventType##_##_EventName##_##_EventVersion); \
-
-#define EVENT_END() \
- Config->Event_Send(Status[IsAccepted]?NULL:this, (const int8u*)&Event, Event.EventSize, IsSub?File_Name_WithoutDemux:File_Name); \
-} \
-
-#define EVENT(_EventType, _EventName, _EventVersion) \
- EVENT_BEGIN(_EventType, _EventName, _EventVersion) \
- EVENT_END ()
-
-//---------------------------------------------------------------------------
-// Helpers
-namespace MediaInfoLib
-{
- inline void Events_PCR(int64u PCR, int64u &Event_PCR, char* Event_PCR_HR)
- {
- Event_PCR=PCR;
- if (PCR!=(int64u)-1)
- {
- string PCR_HR=Ztring().Duration_From_Milliseconds(PCR/1000000).To_UTF8();
- if (PCR_HR.size()==12)
- strcpy(Event_PCR_HR, PCR_HR.c_str());
- else
- memset(Event_PCR_HR, 0x00, 13);
- }
- else
- memset(Event_PCR_HR, 0x00, 13);
- }
-
- inline void Events_PTS(int64u PTS, int64u &Event_PTS, char* Event_PTS_HR)
- {
- Event_PTS=PTS;
- if (PTS!=(int64u)-1)
- {
- string PTS_HR=Ztring().Duration_From_Milliseconds(PTS/1000000).To_UTF8();
- if (PTS_HR.size()==12)
- strcpy(Event_PTS_HR, PTS_HR.c_str());
- else
- memset(Event_PTS_HR, 0x00, 13);
- }
- else
- memset(Event_PTS_HR, 0x00, 13);
- }
-
- inline void Events_DTS(int64u DTS, int64u &Event_DTS, char* Event_DTS_HR)
- {
- Event_DTS=DTS;
- if (DTS!=(int64u)-1)
- {
- string DTS_HR=Ztring().Duration_From_Milliseconds(DTS/1000000).To_UTF8();
- if (DTS_HR.size()==12)
- strcpy(Event_DTS_HR, DTS_HR.c_str());
- else
- memset(Event_DTS_HR, 0x00, 13);
- }
- else
- memset(Event_DTS_HR, 0x00, 13);
- }
-
- inline void Events_TimeCode(const TimeCode &Tc, MediaInfo_time_code &Event_TimeCode, char* Event_TimeCode_HR)
- {
- if (Tc.IsValid())
- {
- Event_TimeCode.Hours=Tc.Hours;
- Event_TimeCode.Minutes=Tc.Minutes;
- Event_TimeCode.Seconds=Tc.Seconds;
- Event_TimeCode.Frames=Tc.Frames;
- Event_TimeCode.FramesPerSecond=Tc.FramesPerSecond;
- Event_TimeCode.DropFrame=Tc.DropFrame;
- Event_TimeCode_HR[ 0]='0'+Tc.Hours/10;
- Event_TimeCode_HR[ 1]='0'+Tc.Hours%10;
- Event_TimeCode_HR[ 2]=':';
- Event_TimeCode_HR[ 3]='0'+Tc.Minutes/10;
- Event_TimeCode_HR[ 4]='0'+Tc.Minutes%10;
- Event_TimeCode_HR[ 5]=':';
- Event_TimeCode_HR[ 6]='0'+Tc.Seconds/10;
- Event_TimeCode_HR[ 7]='0'+Tc.Seconds%10;
- Event_TimeCode_HR[ 8]=Tc.DropFrame?';':':';
- Event_TimeCode_HR[ 9]='0'+Tc.Frames/10;
- Event_TimeCode_HR[10]='0'+Tc.Frames%10;
- Event_TimeCode_HR[11]='\0';
- Event_TimeCode_HR[12]='\0';
- }
- else
- {
- Event_TimeCode.Hours=(MediaInfo_int8u)-1;
- Event_TimeCode.Minutes=(MediaInfo_int8u)-1;
- Event_TimeCode.Seconds=(MediaInfo_int8u)-1;
- Event_TimeCode.Frames=(MediaInfo_int8u)-1;
- Event_TimeCode.FramesPerSecond=(MediaInfo_int8u)-1;
- Event_TimeCode.DropFrame=(MediaInfo_int8u)-1;
- memset(Event_TimeCode_HR, 0x00, 13);
- }
- }
-}
-
-#endif //MediaInfo_EventsH
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_File.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_File.cpp
deleted file mode 100644
index 07bef9fd3..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_File.cpp
+++ /dev/null
@@ -1,1100 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// How to:
-// To add a new format,
-// Fill includes, SelectFromExtension, ListFormats and LibraryIsModified
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/Reader/Reader_File.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Multiple
-#if defined(MEDIAINFO_AAF_YES)
- #include "MediaInfo/Multiple/File_Aaf.h"
-#endif
-#if defined(MEDIAINFO_BDMV_YES)
- #include "MediaInfo/Multiple/File_Bdmv.h"
-#endif
-#if defined(MEDIAINFO_CDXA_YES)
- #include "MediaInfo/Multiple/File_Cdxa.h"
-#endif
-#if defined(MEDIAINFO_DASHMPD_YES)
- #include "MediaInfo/Multiple/File_DashMpd.h"
-#endif
-#if defined(MEDIAINFO_DCP_YES)
- #include "MediaInfo/Multiple/File_DcpAm.h"
-#endif
-#if defined(MEDIAINFO_DCP_YES)
- #include "MediaInfo/Multiple/File_DcpCpl.h"
-#endif
-#if defined(MEDIAINFO_DCP_YES)
- #include "MediaInfo/Multiple/File_DcpPkl.h"
-#endif
-#if defined(MEDIAINFO_DVDIF_YES)
- #include "MediaInfo/Multiple/File_DvDif.h"
-#endif
-#if defined(MEDIAINFO_DVDV_YES)
- #include "MediaInfo/Multiple/File_Dvdv.h"
-#endif
-#if defined(MEDIAINFO_DXW_YES)
- #include "MediaInfo/Multiple/File_Dxw.h"
-#endif
-#if defined(MEDIAINFO_FLV_YES)
- #include "MediaInfo/Multiple/File_Flv.h"
-#endif
-#if defined(MEDIAINFO_GXF_YES)
- #include "MediaInfo/Multiple/File_Gxf.h"
-#endif
-#if defined(MEDIAINFO_HDSF4M_YES)
- #include "MediaInfo/Multiple/File_HdsF4m.h"
-#endif
-#if defined(MEDIAINFO_HLS_YES)
- #include "MediaInfo/Multiple/File_Hls.h"
-#endif
-#if defined(MEDIAINFO_IBI_YES)
- #include "MediaInfo/Multiple/File_Ibi.h"
-#endif
-#if defined(MEDIAINFO_ISM_YES)
- #include "MediaInfo/Multiple/File_Ism.h"
-#endif
-#if defined(MEDIAINFO_IMF_YES)
- #include "MediaInfo/Multiple/File_ImfCpl.h"
-#endif
-#if defined(MEDIAINFO_IVF_YES)
- #include "MediaInfo/Multiple/File_Ivf.h"
-#endif
-#if defined(MEDIAINFO_LXF_YES)
- #include "MediaInfo/Multiple/File_Lxf.h"
-#endif
-#if defined(MEDIAINFO_MK_YES)
- #include "MediaInfo/Multiple/File_Mk.h"
-#endif
-#if defined(MEDIAINFO_MPEG4_YES)
- #include "MediaInfo/Multiple/File_Mpeg4.h"
-#endif
-#if defined(MEDIAINFO_MPEGPS_YES)
- #include "MediaInfo/Multiple/File_MpegPs.h"
-#endif
-#if defined(MEDIAINFO_MPEGTS_YES) || defined(MEDIAINFO_BDAV_YES) || defined(MEDIAINFO_TSP_YES)
- #include "MediaInfo/Multiple/File_MpegTs.h"
-#endif
-#if defined(MEDIAINFO_MXF_YES)
- #include "MediaInfo/Multiple/File_Mxf.h"
-#endif
-#if defined(MEDIAINFO_NUT_YES)
- #include "MediaInfo/Multiple/File_Nut.h"
-#endif
-#if defined(MEDIAINFO_OGG_YES)
- #include "MediaInfo/Multiple/File_Ogg.h"
-#endif
-#if defined(MEDIAINFO_P2_YES)
- #include "MediaInfo/Multiple/File_P2_Clip.h"
-#endif
-#if defined(MEDIAINFO_PMP_YES)
- #include "MediaInfo/Multiple/File_Pmp.h"
-#endif
-#if defined(MEDIAINFO_PTX_YES)
- #include "MediaInfo/Multiple/File_Ptx.h"
-#endif
-#if defined(MEDIAINFO_RIFF_YES)
- #include "MediaInfo/Multiple/File_Riff.h"
-#endif
-#if defined(MEDIAINFO_RM_YES)
- #include "MediaInfo/Multiple/File_Rm.h"
-#endif
-#if defined(MEDIAINFO_SEQUENCEINFO_YES)
- #include "MediaInfo/Multiple/File_SequenceInfo.h"
-#endif
-#if defined(MEDIAINFO_SKM_YES)
- #include "MediaInfo/Multiple/File_Skm.h"
-#endif
-#if defined(MEDIAINFO_SWF_YES)
- #include "MediaInfo/Multiple/File_Swf.h"
-#endif
-#if defined(MEDIAINFO_WM_YES)
- #include "MediaInfo/Multiple/File_Wm.h"
-#endif
-#if defined(MEDIAINFO_XDCAM_YES)
- #include "MediaInfo/Multiple/File_Xdcam_Clip.h"
-#endif
-#if defined(MEDIAINFO_DPG_YES)
- #include "MediaInfo/Multiple/File_Dpg.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Video
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_AVSV_YES)
- #include "MediaInfo/Video/File_AvsV.h"
-#endif
-#if defined(MEDIAINFO_DIRAC_YES)
- #include "MediaInfo/Video/File_Dirac.h"
-#endif
-#if defined(MEDIAINFO_FLIC_YES)
- #include "MediaInfo/Video/File_Flic.h"
-#endif
-#if defined(MEDIAINFO_H263_YES)
- #include "MediaInfo/Video/File_H263.h"
-#endif
-#if defined(MEDIAINFO_HEVC_YES)
- #include "MediaInfo/Video/File_Hevc.h"
-#endif
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_VC1_YES)
- #include "MediaInfo/Video/File_Vc1.h"
-#endif
-#if defined(MEDIAINFO_VC3_YES)
- #include "MediaInfo/Video/File_Vc3.h"
-#endif
-#if defined(MEDIAINFO_Y4M_YES)
- #include "MediaInfo/Video/File_Y4m.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Audio
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_ALS_YES)
- #include "MediaInfo/Audio/File_Als.h"
-#endif
-#if defined(MEDIAINFO_AMR_YES)
- #include "MediaInfo/Audio/File_Amr.h"
-#endif
-#if defined(MEDIAINFO_AMV_YES)
- #include "MediaInfo/Audio/File_Amv.h"
-#endif
-#if defined(MEDIAINFO_APE_YES)
- #include "MediaInfo/Audio/File_Ape.h"
-#endif
-#if defined(MEDIAINFO_AU_YES)
- #include "MediaInfo/Audio/File_Au.h"
-#endif
-#if defined(MEDIAINFO_DTS_YES)
- #include "MediaInfo/Audio/File_Dts.h"
-#endif
-#if defined(MEDIAINFO_DOLBYE_YES)
- #include "MediaInfo/Audio/File_DolbyE.h"
-#endif
-#if defined(MEDIAINFO_FLAC_YES)
- #include "MediaInfo/Audio/File_Flac.h"
-#endif
-#if defined(MEDIAINFO_IT_YES)
- #include "MediaInfo/Audio/File_ImpulseTracker.h"
-#endif
-#if defined(MEDIAINFO_LA_YES)
- #include "MediaInfo/Audio/File_La.h"
-#endif
-#if defined(MEDIAINFO_MIDI_YES)
- #include "MediaInfo/Audio/File_Midi.h"
-#endif
-#if defined(MEDIAINFO_MOD_YES)
- #include "MediaInfo/Audio/File_Module.h"
-#endif
-#if defined(MEDIAINFO_MPC_YES)
- #include "MediaInfo/Audio/File_Mpc.h"
-#endif
-#if defined(MEDIAINFO_MPCSV8_YES)
- #include "MediaInfo/Audio/File_MpcSv8.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_OPENMG_YES)
- #include "MediaInfo/Audio/File_OpenMG.h"
-#endif
-#if defined(MEDIAINFO_RKAU_YES)
- #include "MediaInfo/Audio/File_Rkau.h"
-#endif
-#if defined(MEDIAINFO_S3M_YES)
- #include "MediaInfo/Audio/File_ScreamTracker3.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_SmpteSt0337.h"
-#endif
-#if defined(MEDIAINFO_TAK_YES)
- #include "MediaInfo/Audio/File_Tak.h"
-#endif
-#if defined(MEDIAINFO_TTA_YES)
- #include "MediaInfo/Audio/File_Tta.h"
-#endif
-#if defined(MEDIAINFO_TWINVQ_YES)
- #include "MediaInfo/Audio/File_TwinVQ.h"
-#endif
-#if defined(MEDIAINFO_WVPK_YES)
- #include "MediaInfo/Audio/File_Wvpk.h"
-#endif
-#if defined(MEDIAINFO_XM_YES)
- #include "MediaInfo/Audio/File_ExtendedModule.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Text
-#if defined(MEDIAINFO_EIA608_YES)
- #include "MediaInfo/Text/File_Eia608.h"
-#endif
-#if defined(MEDIAINFO_N19_YES)
- #include "MediaInfo/Text/File_N19.h"
-#endif
-#if defined(MEDIAINFO_PDF_YES)
- #include "MediaInfo/Text/File_Pdf.h"
-#endif
-#if defined(MEDIAINFO_SCC_YES)
- #include "MediaInfo/Text/File_Scc.h"
-#endif
-#if defined(MEDIAINFO_SUBRIP_YES)
- #include "MediaInfo/Text/File_SubRip.h"
-#endif
-#if defined(MEDIAINFO_TTML_YES)
- #include "MediaInfo/Text/File_Ttml.h"
-#endif
-#if defined(MEDIAINFO_OTHERTEXT_YES)
- #include "MediaInfo/Text/File_OtherText.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Image
-#if defined(MEDIAINFO_ARRIRAW_YES)
- #include "MediaInfo/Image/File_ArriRaw.h"
-#endif
-#if defined(MEDIAINFO_BMP_YES)
- #include "MediaInfo/Image/File_Bmp.h"
-#endif
-#if defined(MEDIAINFO_DDS_YES)
- #include "MediaInfo/Image/File_Dds.h"
-#endif
-#if defined(MEDIAINFO_DPX_YES)
- #include "MediaInfo/Image/File_Dpx.h"
-#endif
-#if defined(MEDIAINFO_EXR_YES)
- #include "MediaInfo/Image/File_Exr.h"
-#endif
-#if defined(MEDIAINFO_GIF_YES)
- #include "MediaInfo/Image/File_Gif.h"
-#endif
-#if defined(MEDIAINFO_ICO_YES)
- #include "MediaInfo/Image/File_Ico.h"
-#endif
-#if defined(MEDIAINFO_JPEG_YES)
- #include "MediaInfo/Image/File_Jpeg.h"
-#endif
-#if defined(MEDIAINFO_PCX_YES)
- #include "MediaInfo/Image/File_Pcx.h"
-#endif
-#if defined(MEDIAINFO_PNG_YES)
- #include "MediaInfo/Image/File_Png.h"
-#endif
-#if defined(MEDIAINFO_PSD_YES)
- #include "MediaInfo/Image/File_Psd.h"
-#endif
-#if defined(MEDIAINFO_TIFF_YES)
- #include "MediaInfo/Image/File_Tiff.h"
-#endif
-#if defined(MEDIAINFO_TGA_YES)
- #include "MediaInfo/Image/File_Tga.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Archive
-#if defined(MEDIAINFO_7Z_YES)
- #include "MediaInfo/Archive/File_7z.h"
-#endif
-#if defined(MEDIAINFO_ACE_YES)
- #include "MediaInfo/Archive/File_Ace.h"
-#endif
-#if defined(MEDIAINFO_BZIP2_YES)
- #include "MediaInfo/Archive/File_Bzip2.h"
-#endif
-#if defined(MEDIAINFO_ELF_YES)
- #include "MediaInfo/Archive/File_Elf.h"
-#endif
-#if defined(MEDIAINFO_GZIP_YES)
- #include "MediaInfo/Archive/File_Gzip.h"
-#endif
-#if defined(MEDIAINFO_ISO9660_YES)
- #include "MediaInfo/Archive/File_Iso9660.h"
-#endif
-#if defined(MEDIAINFO_MZ_YES)
- #include "MediaInfo/Archive/File_Mz.h"
-#endif
-#if defined(MEDIAINFO_RAR_YES)
- #include "MediaInfo/Archive/File_Rar.h"
-#endif
-#if defined(MEDIAINFO_TAR_YES)
- #include "MediaInfo/Archive/File_Tar.h"
-#endif
-#if defined(MEDIAINFO_ZIP_YES)
- #include "MediaInfo/Archive/File_Zip.h"
-#endif
-
-//---------------------------------------------------------------------------
-// Other
-#if defined(MEDIAINFO_OTHER_YES)
- #include "MediaInfo/File_Other.h"
-#endif
-#if defined(MEDIAINFO_UNKNOWN_YES)
- #include "MediaInfo/File_Unknown.h"
-#endif
-#if defined(MEDIAINFO_DUMMY_YES)
- #include "MediaInfo/File_Dummy.h"
-#endif
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-bool MediaInfo_Internal::SelectFromExtension (const String &Parser)
-{
- CriticalSectionLocker CSL(CS);
-
- //Clear last value
- delete Info; Info=NULL;
-
- //Searching the right File_*
- if (0) {} //For #defines
-
- // Multiple
- #if defined(MEDIAINFO_AAF_YES)
- else if (Parser==__T("Aaf")) Info=new File_Aaf();
- #endif
- #if defined(MEDIAINFO_BDAV_YES)
- else if (Parser==__T("Bdav")) {Info=new File_MpegTs(); ((File_MpegTs*)Info)->BDAV_Size=4;}
- #endif
- #if defined(MEDIAINFO_BDMV_YES)
- else if (Parser==__T("Bdmv")) Info=new File_Bdmv();
- #endif
- #if defined(MEDIAINFO_CDXA_YES)
- else if (Parser==__T("Cdxa")) Info=new File_Cdxa();
- #endif
- #if defined(MEDIAINFO_DASHMPD_YES)
- else if (Parser==__T("DashMpd")) Info=new File_DashMpd();
- #endif
- #if defined(MEDIAINFO_DCP_YES)
- else if (Parser==__T("DcpAm")) Info=new File_DcpAm();
- #endif
- #if defined(MEDIAINFO_DCP_YES)
- else if (Parser==__T("DcpCpl")) Info=new File_DcpCpl();
- #endif
- #if defined(MEDIAINFO_DCP_YES)
- else if (Parser==__T("DcpPkg")) Info=new File_DcpPkl();
- #endif
- #if defined(MEDIAINFO_DPG_YES)
- else if (Parser==__T("Dpg")) Info=new File_Dpg();
- #endif
- #if defined(MEDIAINFO_DVDIF_YES)
- else if (Parser==__T("DvDif")) Info=new File_DvDif();
- #endif
- #if defined(MEDIAINFO_DVDV_YES)
- else if (Parser==__T("Dvdv")) Info=new File_Dvdv();
- #endif
- #if defined(MEDIAINFO_DXW_YES)
- else if (Parser==__T("Dxw")) Info=new File_Dxw();
- #endif
- #if defined(MEDIAINFO_FLV_YES)
- else if (Parser==__T("Flv")) Info=new File_Flv();
- #endif
- #if defined(MEDIAINFO_GXF_YES)
- else if (Parser==__T("Gxf")) Info=new File_Gxf();
- #endif
- #if defined(MEDIAINFO_HDSF4M_YES)
- else if (Parser==__T("HdsF4m")) Info=new File_HdsF4m();
- #endif
- #if defined(MEDIAINFO_HLS_YES)
- else if (Parser==__T("Hls")) Info=new File_Hls();
- #endif
- #if defined(MEDIAINFO_ISM_YES)
- else if (Parser==__T("Ism")) Info=new File_Ism();
- #endif
- #if defined(MEDIAINFO_IVF_YES)
- else if (Parser==__T("Ivf")) Info=new File_Ivf();
- #endif
- #if defined(MEDIAINFO_LXF_YES)
- else if (Parser==__T("Lxf")) Info=new File_Lxf();
- #endif
- #if defined(MEDIAINFO_MK_YES)
- else if (Parser==__T("Mk")) Info=new File_Mk();
- #endif
- #if defined(MEDIAINFO_MPEG4_YES)
- else if (Parser==__T("Mpeg4")) Info=new File_Mpeg4();
- #endif
- #if defined(MEDIAINFO_MPEGPS_YES)
- else if (Parser==__T("MpegPs")) Info=new File_MpegPs();
- #endif
- #if defined(MEDIAINFO_MPEGTS_YES)
- else if (Parser==__T("MpegTs")) Info=new File_MpegTs();
- #endif
- #if defined(MEDIAINFO_MXF_YES)
- else if (Parser==__T("Mxf")) Info=new File_Mxf();
- #endif
- #if defined(MEDIAINFO_NUT_YES)
- else if (Parser==__T("Nut")) Info=new File_Nut();
- #endif
- #if defined(MEDIAINFO_OGG_YES)
- else if (Parser==__T("Ogg")) Info=new File_Ogg();
- #endif
- #if defined(MEDIAINFO_P2_YES)
- else if (Parser==__T("P2_Clip")) Info=new File_P2_Clip();
- #endif
- #if defined(MEDIAINFO_PMP_YES)
- else if (Parser==__T("Pmp")) Info=new File_Pmp();
- #endif
- #if defined(MEDIAINFO_PTX_YES)
- else if (Parser==__T("Ptx")) Info=new File_Ptx();
- #endif
- #if defined(MEDIAINFO_RIFF_YES)
- else if (Parser==__T("Riff")) Info=new File_Riff();
- #endif
- #if defined(MEDIAINFO_RM_YES)
- else if (Parser==__T("Rm")) Info=new File_Rm();
- #endif
- #if defined(MEDIAINFO_SEQUENCEINFO_YES)
- else if (Parser==__T("SequenceInfo")) Info=new File_SequenceInfo();
- #endif
- #if defined(MEDIAINFO_SKM_YES)
- else if (Parser==__T("Skm")) Info=new File_Skm();
- #endif
- #if defined(MEDIAINFO_SWF_YES)
- else if (Parser==__T("Swf")) Info=new File_Swf();
- #endif
- #if defined(MEDIAINFO_WM_YES)
- else if (Parser==__T("Wm")) Info=new File_Wm();
- #endif
- #if defined(MEDIAINFO_XDCAM_YES)
- else if (Parser==__T("Xdcam_Clip")) Info=new File_Xdcam_Clip();
- #endif
-
- // Video
- #if defined(MEDIAINFO_AVC_YES)
- else if (Parser==__T("Avc")) Info=new File_Avc();
- #endif
- #if defined(MEDIAINFO_HEVC_YES)
- else if (Parser==__T("Hevc")) Info=new File_Hevc();
- #endif
- #if defined(MEDIAINFO_AVSV_YES)
- else if (Parser==__T("AvsV")) Info=new File_AvsV();
- #endif
- #if defined(MEDIAINFO_DIRAC_YES)
- else if (Parser==__T("Dirac")) Info=new File_Dirac();
- #endif
- #if defined(MEDIAINFO_FLIC_YES)
- else if (Parser==__T("Flic")) Info=new File_Flic();
- #endif
- #if defined(MEDIAINFO_H263_YES)
- else if (Parser==__T("H263")) Info=new File_H263();
- #endif
- #if defined(MEDIAINFO_MPEG4V_YES)
- else if (Parser==__T("Mpeg4v")) Info=new File_Mpeg4v();
- #endif
- #if defined(MEDIAINFO_MPEGV_YES)
- else if (Parser==__T("Mpegv")) Info=new File_Mpegv();
- #endif
- #if defined(MEDIAINFO_VC1_YES)
- else if (Parser==__T("Vc1")) Info=new File_Vc1();
- #endif
- #if defined(MEDIAINFO_VC3_YES)
- else if (Parser==__T("Vc3")) Info=new File_Vc3();
- #endif
- #if defined(MEDIAINFO_Y4M_YES)
- else if (Parser==__T("Y4m")) Info=new File_Y4m();
- #endif
-
- // Audio
- #if defined(MEDIAINFO_AAC_YES)
- else if (Parser==__T("Adts")) {Info=new File_Aac(); ((File_Aac*)Info)->Mode=File_Aac::Mode_ADTS;} // Prioritization against ADIF
- #endif
- #if defined(MEDIAINFO_AC3_YES)
- else if (Parser==__T("Ac3")) Info=new File_Ac3();
- #endif
- #if defined(MEDIAINFO_SMPTEST0337_YES)
- else if (Parser==__T("Aes3")) Info=new File_SmpteSt0337();
- #endif
- #if defined(MEDIAINFO_ALS_YES)
- else if (Parser==__T("Als")) Info=new File_Als();
- #endif
- #if defined(MEDIAINFO_AMR_YES)
- else if (Parser==__T("Amr")) Info=new File_Amr();
- #endif
- #if defined(MEDIAINFO_AMV_YES)
- else if (Parser==__T("Amv")) Info=new File_Amv();
- #endif
- #if defined(MEDIAINFO_APE_YES)
- else if (Parser==__T("Ape")) Info=new File_Ape();
- #endif
- #if defined(MEDIAINFO_AU_YES)
- else if (Parser==__T("Au")) Info=new File_Au();
- #endif
- #if defined(MEDIAINFO_DTS_YES)
- else if (Parser==__T("Dts")) Info=new File_Dts();
- #endif
- #if defined(MEDIAINFO_DOLBYE_YES)
- else if (Parser==__T("DolbyE")) Info=new File_DolbyE();
- #endif
- #if defined(MEDIAINFO_FLAC_YES)
- else if (Parser==__T("Flac")) Info=new File_Flac();
- #endif
- #if defined(MEDIAINFO_IT_YES)
- else if (Parser==__T("It")) Info=new File_ImpulseTracker();
- #endif
- #if defined(MEDIAINFO_LA_YES)
- else if (Parser==__T("La")) Info=new File_La();
- #endif
- #if defined(MEDIAINFO_MIDI_YES)
- else if (Parser==__T("Midi")) Info=new File_Midi();
- #endif
- #if defined(MEDIAINFO_MOD_YES)
- else if (Parser==__T("Mod")) Info=new File_Module();
- #endif
- #if defined(MEDIAINFO_MPC_YES)
- else if (Parser==__T("Mpc")) Info=new File_Mpc();
- #endif
- #if defined(MEDIAINFO_MPCSV8_YES)
- else if (Parser==__T("Mpc")) Info=new File_MpcSv8();
- #endif
- #if defined(MEDIAINFO_MPEGA_YES)
- else if (Parser==__T("Mpega")) Info=new File_Mpega();
- #endif
- #if defined(MEDIAINFO_OPENMG_YES)
- else if (Parser==__T("OpenMG")) Info=new File_OpenMG();
- #endif
- #if defined(MEDIAINFO_RKAU_YES)
- else if (Parser==__T("Rkau")) Info=new File_Rkau();
- #endif
- #if defined(MEDIAINFO_S3M_YES)
- else if (Parser==__T("S3m")) Info=new File_ScreamTracker3();
- #endif
- #if defined(MEDIAINFO_TAK_YES)
- else if (Parser==__T("Tak")) Info=new File_Tak();
- #endif
- #if defined(MEDIAINFO_TTA_YES)
- else if (Parser==__T("Tta")) Info=new File_Tta();
- #endif
- #if defined(MEDIAINFO_TWINVQ_YES)
- else if (Parser==__T("TwinVQ")) Info=new File_TwinVQ();
- #endif
- #if defined(MEDIAINFO_WVPK_YES)
- else if (Parser==__T("Wvpk")) Info=new File_Wvpk();
- #endif
- #if defined(MEDIAINFO_XM_YES)
- else if (Parser==__T("Xm")) Info=new File_ExtendedModule();
- #endif
-
- // Text
- #if defined(MEDIAINFO_EIA608_YES)
- else if (Parser==__T("CEA-608")) Info=new File_Eia608();
- else if (Parser==__T("EIA-608")) Info=new File_Eia608();
- #endif
- #if defined(MEDIAINFO_N19_YES)
- else if (Parser==__T("N19")) Info=new File_N19();
- #endif
- #if defined(MEDIAINFO_PDF_YES)
- else if (Parser==__T("PDF")) Info=new File_Pdf();
- #endif
- #if defined(MEDIAINFO_SCC_YES)
- else if (Parser==__T("SCC")) Info=new File_Scc();
- #endif
- #if defined(MEDIAINFO_SUBRIP_YES)
- else if (Parser==__T("SubRip")) Info=new File_SubRip();
- else if (Parser==__T("WebVTT")) Info=new File_SubRip();
- #endif
- #if defined(MEDIAINFO_TTML_YES)
- else if (Parser==__T("TTML")) Info=new File_Ttml();
- #endif
- #if defined(MEDIAINFO_OTHERTEXT_YES)
- else if (Parser==__T("OtherText")) Info=new File_OtherText();
- #endif
-
- // Image
- #if defined(MEDIAINFO_ARRIRAW_YES)
- else if (Parser==__T("Arri Raw")) Info=new File_ArriRaw();
- #endif
- #if defined(MEDIAINFO_BMP_YES)
- else if (Parser==__T("Bmp")) Info=new File_Bmp();
- #endif
- #if defined(MEDIAINFO_DDS_YES)
- else if (Parser==__T("Dds")) Info=new File_Dds();
- #endif
- #if defined(MEDIAINFO_DPX_YES)
- else if (Parser==__T("Dpx")) Info=new File_Dpx();
- #endif
- #if defined(MEDIAINFO_EXR_YES)
- else if (Parser==__T("Exr")) Info=new File_Exr();
- #endif
- #if defined(MEDIAINFO_GIF_YES)
- else if (Parser==__T("Gif")) Info=new File_Gif();
- #endif
- #if defined(MEDIAINFO_ICO_YES)
- else if (Parser==__T("Ico")) Info=new File_Ico();
- #endif
- #if defined(MEDIAINFO_JPEG_YES)
- else if (Parser==__T("Jpeg")) Info=new File_Jpeg();
- #endif
- #if defined(MEDIAINFO_PCX_YES)
- else if (Parser==__T("PCX")) Info=new File_Pcx();
- #endif
- #if defined(MEDIAINFO_PNG_YES)
- else if (Parser==__T("Png")) Info=new File_Png();
- #endif
- #if defined(MEDIAINFO_PSD_YES)
- else if (Parser==__T("Psd")) Info=new File_Psd();
- #endif
- #if defined(MEDIAINFO_TIFF_YES)
- else if (Parser==__T("Tiff")) Info=new File_Tiff();
- #endif
- #if defined(MEDIAINFO_TGA_YES)
- else if (Parser==__T("Tga")) Info=new File_Tga();
- #endif
-
- // Archive
- #if defined(MEDIAINFO_7Z_YES)
- else if (Parser==__T("7z")) Info=new File_7z();
- #endif
- #if defined(MEDIAINFO_ACE_YES)
- else if (Parser==__T("Ace")) Info=new File_Ace();
- #endif
- #if defined(MEDIAINFO_BZIP2_YES)
- else if (Parser==__T("Bzip2")) Info=new File_Bzip2();
- #endif
- #if defined(MEDIAINFO_ELF_YES)
- else if (Parser==__T("Elf")) Info=new File_Elf();
- #endif
- #if defined(MEDIAINFO_GZIP_YES)
- else if (Parser==__T("Gzip")) Info=new File_Gzip();
- #endif
- #if defined(MEDIAINFO_ISO9660_YES)
- else if (Parser==__T("Iso9660")) Info=new File_Iso9660();
- #endif
- #if defined(MEDIAINFO_MZ_YES)
- else if (Parser==__T("Mz")) Info=new File_Mz();
- #endif
- #if defined(MEDIAINFO_RAR_YES)
- else if (Parser==__T("Rar")) Info=new File_Rar();
- #endif
- #if defined(MEDIAINFO_TAR_YES)
- else if (Parser==__T("Tar")) Info=new File_Tar();
- #endif
- #if defined(MEDIAINFO_ZIP_YES)
- else if (Parser==__T("Zip")) Info=new File_Zip();
- #endif
-
- // Other
- #if defined(MEDIAINFO_OTHER_YES)
- else if (Parser==__T("Other")) Info=new File_Other();
- #endif
-
- //No parser
- else
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-#if !defined(MEDIAINFO_READER_NO)
-int MediaInfo_Internal::ListFormats(const String &File_Name)
-{
- // Multiple
- #if defined(MEDIAINFO_AAF_YES)
- delete Info; Info=new File_Aaf(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_BDAV_YES)
- delete Info; Info=new File_MpegTs(); ((File_MpegTs*)Info)->BDAV_Size=4; if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_BDMV_YES)
- delete Info; Info=new File_Bdmv(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_CDXA_YES)
- delete Info; Info=new File_Cdxa(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DASHMPD_YES)
- delete Info; Info=new File_DashMpd(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DCP_YES)
- delete Info; Info=new File_DcpAm(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DCP_YES)
- delete Info; Info=new File_DcpCpl(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DCP_YES)
- delete Info; Info=new File_DcpPkl(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DVDIF_YES)
- delete Info; Info=new File_DvDif(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DVDV_YES)
- delete Info; Info=new File_Dvdv(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DXW_YES)
- delete Info; Info=new File_Dxw(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_FLV_YES)
- delete Info; Info=new File_Flv(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_GXF_YES)
- delete Info; Info=new File_Gxf(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_HDSF4M_YES)
- delete Info; Info=new File_HdsF4m(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_HLS_YES)
- delete Info; Info=new File_Hls(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_IBI_YES)
- delete Info; Info=new File_Ibi(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_ISM_YES)
- delete Info; Info=new File_Ism(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_IVF_YES)
- delete Info; Info=new File_Ivf(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_LXF_YES)
- delete Info; Info=new File_Lxf(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MK_YES)
- delete Info; Info=new File_Mk(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MPEG4_YES)
- delete Info; Info=new File_Mpeg4(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MPEGPS_YES)
- delete Info; Info=new File_MpegPs(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MPEGTS_YES)
- delete Info; Info=new File_MpegTs(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MPLI_YES)
- delete Info; Info=new File_Mpli(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MXF_YES)
- delete Info; Info=new File_Mxf(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_NUT_YES)
- delete Info; Info=new File_Nut(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_OGG_YES)
- delete Info; Info=new File_Ogg(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_P2_YES)
- delete Info; Info=new File_P2_Clip(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_PMP_YES)
- delete Info; Info=new File_Pmp(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_PTX_YES)
- delete Info; Info=new File_Ptx(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_RIFF_YES)
- delete Info; Info=new File_Riff(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_RM_YES)
- delete Info; Info=new File_Rm(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_SEQUENCEINFO_YES)
- delete Info; Info=new File_SequenceInfo(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_SKM_YES)
- delete Info; Info=new File_Skm(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_SWF_YES)
- delete Info; Info=new File_Swf(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_TSP_YES)
- delete Info; Info=new File_MpegTs(); ((File_MpegTs*)Info)->TSP_Size=16; if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_WM_YES)
- delete Info; Info=new File_Wm(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_XDCAM_YES)
- delete Info; Info=new File_Xdcam_Clip(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DPG_YES)
- delete Info; Info=new File_Dpg(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
-
- // Video
- #if defined(MEDIAINFO_AVC_YES)
- delete Info; Info=new File_Avc(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_HEVC_YES)
- delete Info; Info=new File_Hevc(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_AVSV_YES)
- delete Info; Info=new File_AvsV(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DIRAC_YES)
- delete Info; Info=new File_Dirac(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_FLIC_YES)
- delete Info; Info=new File_Flic(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_H263_YES)
- //delete Info; Info=new File_H263(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1; //At the end, too much sensible
- #endif
- #if defined(MEDIAINFO_MPEG4V_YES)
- delete Info; Info=new File_Mpeg4v(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MPEGV_YES)
- delete Info; Info=new File_Mpegv(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_VC1_YES)
- delete Info; Info=new File_Vc1(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_VC3_YES)
- delete Info; Info=new File_Vc3(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_Y4M_YES)
- delete Info; Info=new File_Y4m(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
-
- // Audio
- #if defined(MEDIAINFO_AAC_YES)
- delete Info; Info=new File_Aac(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_AC3_YES)
- delete Info; Info=new File_Ac3(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_SMPTEST0337_YES)
- delete Info; Info=new File_SmpteSt0337(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_ALS_YES)
- delete Info; Info=new File_Als(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_AMR_YES)
- delete Info; Info=new File_Amr(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_AMV_YES)
- delete Info; Info=new File_Amv(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_APE_YES)
- delete Info; Info=new File_Ape(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_AU_YES)
- delete Info; Info=new File_Au(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DTS_YES)
- delete Info; Info=new File_Dts(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
-// Too many false-positives
-// #if defined(MEDIAINFO_DOLBYE_YES)
-// delete Info; Info=new File_DolbyE(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
-// #endif
- #if defined(MEDIAINFO_FLAC_YES)
- delete Info; Info=new File_Flac(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_IT_YES)
- delete Info; Info=new File_ImpulseTracker(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_LA_YES)
- delete Info; Info=new File_La(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MIDI_YES)
- delete Info; Info=new File_Midi(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MOD_YES)
- delete Info; Info=new File_Module(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MPC_YES)
- delete Info; Info=new File_Mpc(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MPCSV8_YES)
- delete Info; Info=new File_MpcSv8(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MPEGA_YES)
- delete Info; Info=new File_Mpega(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_OPENMG_YES)
- delete Info; Info=new File_OpenMG(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_RKAU_YES)
- delete Info; Info=new File_Rkau(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_TAK_YES)
- delete Info; Info=new File_Tak(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_S3M_YES)
- delete Info; Info=new File_ScreamTracker3(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_TTA_YES)
- delete Info; Info=new File_Tta(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_TWINVQ_YES)
- delete Info; Info=new File_TwinVQ(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_WVPK_YES)
- delete Info; Info=new File_Wvpk(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_XM_YES)
- delete Info; Info=new File_ExtendedModule(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
-
- // Text
- #if defined(MEDIAINFO_N19_YES)
- delete Info; Info=new File_N19(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_PDF_YES)
- delete Info; Info=new File_Pdf(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_SCC_YES)
- delete Info; Info=new File_Scc(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_SUBRIP_YES)
- delete Info; Info=new File_SubRip(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_TTML_YES)
- delete Info; Info=new File_Ttml(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_OTHERTEXT_YES)
- delete Info; Info=new File_OtherText(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
-
- // Image
- #if defined(MEDIAINFO_ARRIRAW_YES)
- delete Info; Info=new File_ArriRaw(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_BMP_YES)
- delete Info; Info=new File_Bmp(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DDS_YES)
- delete Info; Info=new File_Dds(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_DPX_YES)
- delete Info; Info=new File_Dpx(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_GIF_YES)
- delete Info; Info=new File_Gif(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_ICO_YES)
- delete Info; Info=new File_Ico(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_JPEG_YES)
- delete Info; Info=new File_Jpeg(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_PCX_YES)
- delete Info; Info=new File_Pcx(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_PNG_YES)
- delete Info; Info=new File_Png(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_PSD_YES)
- delete Info; Info=new File_Psd(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_TIFF_YES)
- delete Info; Info=new File_Tiff(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_TGA_YES)
- //delete Info; Info=new File_Tga(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1; //At the end, too much sensible
- #endif
-
- // Archive
- #if defined(MEDIAINFO_ACE_YES)
- delete Info; Info=new File_Ace(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_7Z_YES)
- delete Info; Info=new File_7z(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_BZIP2_YES)
- delete Info; Info=new File_Bzip2(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_ELF_YES)
- delete Info; Info=new File_Elf(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_GZIP_YES)
- delete Info; Info=new File_Gzip(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_ISO9660_YES)
- delete Info; Info=new File_Iso9660(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_MZ_YES)
- delete Info; Info=new File_Mz(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_RAR_YES)
- delete Info; Info=new File_Rar(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_TAR_YES)
- delete Info; Info=new File_Tar(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
- #if defined(MEDIAINFO_ZIP_YES)
- delete Info; Info=new File_Zip(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
-
- // Other
- #if !defined(MEDIAINFO_OTHER_NO)
- delete Info; Info=new File_Other(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
-
- //At the end, too much sensible
- #if defined(MEDIAINFO_TGA_YES)
- delete Info; Info=new File_Tga(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1; //At the end, too much sensible
- #endif
- #if defined(MEDIAINFO_H263_YES)
- delete Info; Info=new File_H263(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- #endif
-
- // Default (empty)
- delete Info; Info=new File_Unknown(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1;
- return 0;
-}
-#endif //!defined(MEDIAINFO_READER_NO)
-
-//---------------------------------------------------------------------------
-bool MediaInfo_Internal::LibraryIsModified ()
-{
- #if defined(MEDIAINFO_MULTI_NO) || defined(MEDIAINFO_VIDEO_NO) || defined(MEDIAINFO_AUDIO_NO) || defined(MEDIAINFO_TEXT_NO) || defined(MEDIAINFO_IMAGE_NO) || defined(MEDIAINFO_ARCHIVE_NO) \
- || defined(MEDIAINFO_BDAV_NO) || defined(MEDIAINFO_MK_NO) || defined(MEDIAINFO_OGG_NO) || defined(MEDIAINFO_RIFF_NO) || defined(MEDIAINFO_MPEG4_NO) || defined(MEDIAINFO_MPEGPS_NO) || defined(MEDIAINFO_MPEGTS_NO) || defined(MEDIAINFO_DXW_NO) || defined(MEDIAINFO_FLV_NO) || defined(MEDIAINFO_GXF_NO) || defined(MEDIAINFO_HDSF4M_NO) || defined(MEDIAINFO_HLS_NO) || defined(MEDIAINFO_ISM_NO) || defined(MEDIAINFO_IVF_NO) || defined(MEDIAINFO_LXF_NO) || defined(MEDIAINFO_SWF_NO) || defined(MEDIAINFO_MXF_NO) || defined(MEDIAINFO_NUT_NO) || defined(MEDIAINFO_WM_NO) || defined(MEDIAINFO_QT_NO) || defined(MEDIAINFO_RM_NO) || defined(MEDIAINFO_DVDIF_NO) || defined(MEDIAINFO_DVDV_NO) || defined(MEDIAINFO_AAF_NO) || defined(MEDIAINFO_CDXA_NO) || defined(MEDIAINFO_DPG_NO) || defined(MEDIAINFO_TSP_NO) \
- || defined(MEDIAINFO_AVC_NO) || defined(MEDIAINFO_AVSV_NO) || defined(MEDIAINFO_HEVC_NO) || defined(MEDIAINFO_MPEG4V_NO) || defined(MEDIAINFO_MPEGV_NO) || defined(MEDIAINFO_FLIC_NO) || defined(MEDIAINFO_THEORA_NO) || defined(MEDIAINFO_Y4M_NO) \
- || defined(MEDIAINFO_AC3_NO) || defined(MEDIAINFO_ADIF_NO) || defined(MEDIAINFO_ADTS_NO) || defined(MEDIAINFO_SMPTEST0337_NO) || defined(MEDIAINFO_AMR_NO) || defined(MEDIAINFO_DTS_NO) || defined(MEDIAINFO_DOLBYE_NO) || defined(MEDIAINFO_FLAC_NO) || defined(MEDIAINFO_APE_NO) || defined(MEDIAINFO_MPC_NO) || defined(MEDIAINFO_MPCSV8_NO) || defined(MEDIAINFO_MPEGA_NO) || defined(MEDIAINFO_OPENMG_NO) || defined(MEDIAINFO_TWINVQ_NO) || defined(MEDIAINFO_XM_NO) || defined(MEDIAINFO_MOD_NO) || defined(MEDIAINFO_S3M_NO) || defined(MEDIAINFO_IT_NO) || defined(MEDIAINFO_SPEEX_NO) || defined(MEDIAINFO_TAK_NO) || defined(MEDIAINFO_PS2A_NO) \
- || defined(MEDIAINFO_CMML_NO) || defined(MEDIAINFO_KATE_NO) || defined(MEDIAINFO_PGS_NO) || defined(MEDIAINFO_OTHERTEXT_NO) \
- || defined(MEDIAINFO_ARRIRAW_NO) || defined(MEDIAINFO_BMP_NO) || defined(MEDIAINFO_DDS_NO) || defined(MEDIAINFO_DPX_NO) || defined(MEDIAINFO_EXR_NO) || defined(MEDIAINFO_GIF_NO) || defined(MEDIAINFO_ICO_NO) || defined(MEDIAINFO_JPEG_NO) || defined(MEDIAINFO_PNG_NO) || defined(MEDIAINFO_TGA_NO) || defined(MEDIAINFO_TIFF_NO) \
- || defined(MEDIAINFO_7Z_NO) || defined(MEDIAINFO_ZIP_NO) || defined(MEDIAINFO_RAR_NO) || defined(MEDIAINFO_ACE_NO) || defined(MEDIAINFO_ELF_NO) || defined(MEDIAINFO_MZ_NO) \
- || defined(MEDIAINFO_OTHER_NO) || defined(MEDIAINFO_DUMMY_NO)
- return true;
- #else
- return false;
- #endif
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Internal::CreateDummy (const String&)
-{
- #if defined(MEDIAINFO_DUMMY_YES)
- Info=new File_Dummy();
- ((File_Dummy*)Info)->KindOfDummy=Value;
- #endif
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Inform.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Inform.cpp
deleted file mode 100644
index 9508050d2..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Inform.cpp
+++ /dev/null
@@ -1,630 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Inform part
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Utils.h"
-#include "MediaInfo/Export/Export_EbuCore.h"
-#include "MediaInfo/Export/Export_Mpeg7.h"
-#include "MediaInfo/Export/Export_reVTMD.h"
-#include "MediaInfo/Export/Export_PBCore.h"
-#include "MediaInfo/File__Analyze.h"
-#include "base64.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern MediaInfo_Config Config;
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Internal::Inform()
-{
- CS.Enter();
- if (Info && Info->Status[File__Analyze::IsUpdated])
- Info->Open_Buffer_Update();
- CS.Leave();
-
- #if MEDIAINFO_TRACE
- if (MediaInfoLib::Config.Trace_Level_Get() || MediaInfoLib::Config.Inform_Get()==__T("Details"))
- {
- if (!Details.empty())
- {
- Ztring Content=Details;
-
- return Details;
- }
- else if (Info)
- return Info->Details_Get();
- }
- #endif //MEDIAINFO_TRACE
-
- if (MediaInfoLib::Config.Inform_Get()==__T("EBUCore") || MediaInfoLib::Config.Inform_Get()==__T("EBUCore_1.5"))
- return Export_EbuCore().Transform(*this);
- if (MediaInfoLib::Config.Inform_Get()==__T("MPEG-7"))
- return Export_Mpeg7().Transform(*this);
- if (MediaInfoLib::Config.Inform_Get()==__T("PBCore") || MediaInfoLib::Config.Inform_Get()==__T("PBCore_1.2"))
- return Export_PBCore().Transform(*this);
- if (MediaInfoLib::Config.Inform_Get()==__T("reVTMD"))
- return __T("reVTMD is disabled due to its non-free licensing."); //return Export_reVTMD().Transform(*this);
-
- if (!(
- MediaInfoLib::Config.Inform_Get(__T("General")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Video")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Audio")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Text")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Chapters")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Image")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Menu")).empty()
- ))
- {
- Ztring Retour;
- Retour+=MediaInfoLib::Config.Inform_Get(__T("File_Begin"));
- Retour+=MediaInfoLib::Config.Inform_Get(__T("General_Begin"));
- Retour+=Inform(Stream_General, 0, false);
- Retour+=MediaInfoLib::Config.Inform_Get(__T("General_End"));
- if (Count_Get(Stream_Video))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Video_Begin"));
- for (size_t I1=0; I1<Count_Get(Stream_Video); I1++)
- {
- Retour+=Inform(Stream_Video, I1, false);
- if (I1!=Count_Get(Stream_Video)-1)
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Video_Middle"));
- }
- if (Count_Get(Stream_Video))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Video_End"));
- if (Count_Get(Stream_Audio))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Audio_Begin"));
- for (size_t I1=0; I1<Count_Get(Stream_Audio); I1++)
- {
- Retour+=Inform(Stream_Audio, I1, false);
- if (I1!=Count_Get(Stream_Audio)-1)
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Audio_Middle"));
- }
- if (Count_Get(Stream_Audio))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Audio_End"));
- if (Count_Get(Stream_Text))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Text_Begin"));
- for (size_t I1=0; I1<Count_Get(Stream_Text); I1++)
- {
- Retour+=Inform(Stream_Text, I1, false);
- if (I1!=Count_Get(Stream_Text)-1)
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Text_Middle"));
- }
- if (Count_Get(Stream_Text))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Text_End"));
- if (Count_Get(Stream_Other))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Chapters_Begin"));
- for (size_t I1=0; I1<Count_Get(Stream_Other); I1++)
- {
- Retour+=Inform(Stream_Other, I1, false);
- if (I1!=Count_Get(Stream_Other)-1)
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Chapters_Middle"));
- }
- if (Count_Get(Stream_Other))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Chapters_End"));
- if (Count_Get(Stream_Image))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Image_Begin"));
- for (size_t I1=0; I1<Count_Get(Stream_Image); I1++)
- {
- Retour+=Inform(Stream_Image, I1, false);
- if (I1!=Count_Get(Stream_Image)-1)
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Image_Middle"));
- }
- if (Count_Get(Stream_Image))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Image_End"));
- if (Count_Get(Stream_Menu))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Menu_Begin"));
- for (size_t I1=0; I1<Count_Get(Stream_Menu); I1++)
- {
- Retour+=Inform(Stream_Menu, I1, false);
- if (I1!=Count_Get(Stream_Menu)-1)
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Menu_Middle"));
- }
- if (Count_Get(Stream_Menu))
- Retour+=MediaInfoLib::Config.Inform_Get(__T("Menu_End"));
- Retour+=MediaInfoLib::Config.Inform_Get(__T("File_End"));
-
- Retour.FindAndReplace(__T("\\r\\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\r"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\r\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\r"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\n"), MediaInfoLib::Config.LineSeparator_Get(), 0, Ztring_Recursive);
-
- //Special characters
- Retour.FindAndReplace(__T("|SC1|"), __T("\\"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC2|"), __T("["), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC3|"), __T("]"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC4|"), __T(","), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC5|"), __T(";"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC6|"), __T("("), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC7|"), __T(")"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC8|"), __T(")"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC9|"), __T("),"), 0, Ztring_Recursive);
-
- return Retour;
- }
-
- //Informations
- Ztring Retour;
- bool HTML=false;
- bool XML=false;
- bool CSV=false;
- if (MediaInfoLib::Config.Inform_Get()==__T("HTML"))
- HTML=true;
- if (MediaInfoLib::Config.Inform_Get()==__T("XML"))
- XML=true;
- if (MediaInfoLib::Config.Inform_Get()==__T("CSV"))
- CSV=true;
-
- if (HTML) Retour+=__T("<html>\n\n<head>\n<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head>\n<body>\n");
- if (XML) Retour+=__T("<File>\n");
-
- for (size_t StreamKind=(size_t)Stream_General; StreamKind<Stream_Max; StreamKind++)
- {
- //Pour chaque type de flux
- for (size_t StreamPos=0; StreamPos<(size_t)Count_Get((stream_t)StreamKind); StreamPos++)
- {
- //Pour chaque stream
- if (HTML) Retour+=__T("<table width=\"100%\" border=\"0\" cellpadding=\"1\" cellspacing=\"2\" style=\"border:1px solid Navy\">\n<tr>\n <td width=\"150\"><h2>");
- if (XML) Retour+=__T("<track type=\"");
- Ztring A=Get((stream_t)StreamKind, StreamPos, __T("StreamKind/String"));
- Ztring B=Get((stream_t)StreamKind, StreamPos, __T("StreamKindPos"));
- if (!XML && !B.empty())
- {
- if (CSV)
- A+=__T(",");
- else
- A+=MediaInfoLib::Config.Language_Get(__T(" Config_Text_NumberTag"));
- A+=B;
- }
- Retour+=A;
- if (XML)
- {
- Retour+=__T("\"");
- if (!B.empty())
- {
- Retour+=__T(" streamid=\"");
- Retour+=B;
- Retour+=__T("\"");
- }
- }
- if (HTML) Retour+=__T("</h2></td>\n </tr>");
- if (XML) Retour+=__T(">");
- Retour+=MediaInfoLib::Config.LineSeparator_Get();
- Retour+=Inform((stream_t)StreamKind, StreamPos, false);
- Retour.FindAndReplace(__T("\\"), __T("|SC1|"), 0, Ztring_Recursive);
- if (HTML) Retour+=__T("</table>\n<br />");
- if (XML) Retour+=__T("</track>\n");
- Retour+=MediaInfoLib::Config.LineSeparator_Get();
- }
- }
-
- if (HTML) Retour+=__T("\n</body>\n</html>\n");
- if (XML) Retour+=__T("</File>\n");
-
- Retour.FindAndReplace(__T("\\r\\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\r"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\r\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\r"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\n"), MediaInfoLib::Config.LineSeparator_Get(), 0, Ztring_Recursive);
-
- //Special characters
- Retour.FindAndReplace(__T("|SC1|"), __T("\\"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC2|"), __T("["), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC3|"), __T("]"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC4|"), __T(","), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC5|"), __T(";"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC6|"), __T("("), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC7|"), __T(")"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC8|"), __T(")"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC9|"), __T("),"), 0, Ztring_Recursive);
-
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Internal::Inform (stream_t StreamKind, size_t StreamPos, bool IsDirect)
-{
- //Integrity
- if (StreamKind>=Stream_Max || StreamPos>=Stream[StreamKind].size())
- return Ztring();
-
- if (MediaInfoLib::Config.Inform_Get(__T("General")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Video")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Audio")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Text")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Chapters")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Image")).empty()
- && MediaInfoLib::Config.Inform_Get(__T("Menu")).empty())
- {
- Ztring Retour;
- bool HTML=false;
- bool XML=false;
- bool CSV=false;
- if (MediaInfoLib::Config.Inform_Get()==__T("HTML"))
- HTML=true;
- if (MediaInfoLib::Config.Inform_Get()==__T("XML"))
- XML=true;
- if (MediaInfoLib::Config.Inform_Get()==__T("CSV"))
- CSV=true;
- size_t Size=Count_Get(StreamKind, StreamPos);
- for (size_t Champ_Pos=0; Champ_Pos<Size; Champ_Pos++)
- {
- //Pour chaque champ
- //Ztring A=Get((stream_t)4, 2, 0, Info_Measure_Text); // TODO Bug sinon? voir Ztring
- Ztring A=Get((stream_t)StreamKind, StreamPos, Champ_Pos, Info_Measure_Text); // TODO Bug sinon? voir Ztring
- if ((MediaInfoLib::Config.Complete_Get() || Get((stream_t)StreamKind, StreamPos, Champ_Pos, Info_Options)[InfoOption_ShowInInform]==__T('Y')) && !Get((stream_t)StreamKind, StreamPos, Champ_Pos, Info_Text).empty())
- {
- Ztring Nom=Get((stream_t)StreamKind, StreamPos, Champ_Pos, Info_Name_Text);
- if (Nom.empty())
- Nom=Get((stream_t)StreamKind, StreamPos, Champ_Pos, Info_Name); //Texte n'existe pas
- if (!HTML && !XML && !CSV)
- {
- int8u Nom_Size=MediaInfoLib::Config.Language_Get(__T(" Config_Text_ColumnSize")).To_int8u();
- if (Nom_Size==0)
- Nom_Size=32; //Default
- Nom.resize(Nom_Size, ' ');
- }
- Ztring Valeur=Get((stream_t)StreamKind, StreamPos, Champ_Pos, Info_Text);
- Valeur.FindAndReplace(__T("\\"), __T("|SC1|"), 0, Ztring_Recursive);
- if (HTML)
- {
- Retour+=__T(" <tr>\n <td><i>");
- Retour+=Nom;
- Retour+=__T(" :</i></td>\n <td colspan=\"3\">");
- Retour+=Valeur;
- Retour+=__T("</td>\n </tr>");
- }
- else if (XML)
- {
- Nom=Xml_Name_Escape(Nom);
- size_t Modified;
- Xml_Content_Escape_Modifying(Valeur, Modified);
-
- Retour+=__T("<");
- Retour+=Nom;
- if (Modified==1 && !MediaInfoLib::Config.SkipBinaryData_Get()) //Base64
- Retour+=__T(" dt=\"binary.base64\"");
- Retour+=__T(">");
- if (Modified==1 && MediaInfoLib::Config.SkipBinaryData_Get())
- Retour+=__T("(Binary data)");
- else
- Retour+=Valeur;
- Retour+=__T("</");
- Retour+=Nom;
- Retour+=__T(">");
- }
- else if (CSV)
- {
- Retour+=Nom;
- Retour+=__T(",");
- Retour+=Valeur;
- }
- else
- Retour+=Nom + MediaInfoLib::Config.Language_Get(__T(" Config_Text_Separator")) + Valeur;
- Retour+=MediaInfoLib::Config.LineSeparator_Get();
- }
- }
-
- Retour.FindAndReplace(__T("\\r\\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\r"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\r\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\r"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\n"), MediaInfoLib::Config.LineSeparator_Get(), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC1|"), __T("\\"), 0, Ztring_Recursive);
- return Retour;
- }
-
- Ztring Retour=MediaInfoLib::Config.Inform_Get(Get(StreamKind, 0, __T("StreamKind"), Info_Text));
- ZtringList Info;
-
- Info=Stream[StreamKind][StreamPos];
-
- //Special characters
- Retour.FindAndReplace(__T("\\\\"), __T("|SC1|"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\["), __T("|SC2|"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\]"), __T("|SC3|"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\,"), __T("|SC4|"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\;"), __T("|SC5|"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\("), __T("|SC6|"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\)"), __T("|SC7|"), 0, Ztring_Recursive);
-
- //Gestion $xx$
- size_t PosX=0;
- while (Retour.find(__T("$"), PosX)!=(size_t)-1)
- {
- PosX=Retour.find(__T("$"), PosX);
- if (Retour.size()>PosX+2 && !(Retour(PosX+1)==__T('i') && Retour(PosX+2)==__T('f') && Retour(PosX+3)==__T('('))) //To keep out "%" without any signification, or "$if(..."
- {
- Ztring ARemplacer=Ztring(__T("$")+Retour.SubString(__T("$"), __T("$"), PosX))+__T("$");
- Ztring RemplacerPar=MediaInfoLib::Config.Language_Get(Retour.SubString(__T("$"), __T("$"), PosX)); //TODO : case sensitive
- Retour.FindAndReplace(ARemplacer, RemplacerPar);
- }
- else if (PosX == (size_t)-1)
- break;
- else
- PosX++;
- }
-
- //Gestion $if()
- size_t Position=Retour.find(__T("$if("));
- while (Position!=Error && Position>0)
- {
- ZtringList Elements;
- size_t Elements_Index;
- Elements.Separator_Set(0, __T(","));
- Elements.Write(Retour.SubString(__T("$if("), __T(")"), Position));
- Elements(0)=Elements(0).SubString(__T("%"), __T("%"));
-
- //Test if there is something to replace
- size_t Pos=MediaInfoLib::Config.Info_Get(StreamKind).Find(Elements(0));
- if (Pos!=std::string::npos)
- {
- if (Info(Pos).size()>0)
- Elements_Index=1;
- else
- Elements_Index=2;
- }
- else
- Elements_Index=2;
-
- //Replace
- while (Elements(Elements_Index).SubString(__T("%"), __T("%")).size()>0)
- {
- Ztring ToReplace=Elements(Elements_Index).SubString(__T("%"), __T("%"));
- Ztring ReplacedBy=Info(MediaInfoLib::Config.Info_Get(StreamKind).Find(ToReplace));
- ToReplace=Ztring(__T("%"))+ToReplace+Ztring(__T("%"));
- Elements(Elements_Index).FindAndReplace(ToReplace, ReplacedBy);
- }
-
- Ztring ToReplace=Ztring(__T("$if("))+Retour.SubString(__T("$if("), __T(")"), Position)+__T(")");
- Retour.FindAndReplace(ToReplace, Elements(Elements_Index));
- Position=Retour.find(__T("$if("));
- }
-
- //Gestion []
- while (!Retour.SubString(__T("["), __T("]")).empty())
- {
- Ztring Crochets=Retour.SubString(__T("["), __T("]"));
- Ztring ValueToFind=Crochets.SubString(__T("%"), __T("%"));
- size_t ValueToFind_Pos=MediaInfoLib::Config.Info_Get(StreamKind).Find(ValueToFind);
- Ztring ARemplacer=Ztring(__T("[")+Crochets+__T("]"));
- if (ValueToFind_Pos!=Error)
- {
- Ztring RemplacerPar=Info(ValueToFind_Pos);
- if (RemplacerPar.empty())
- Retour.FindAndReplace(ARemplacer, Ztring());
- else
- {
- //Formate l'interieur
- Ztring ATraiter=Crochets;
- Ztring Crochets_ARemplacer=Ztring(__T("%")+ATraiter.SubString(__T("%"), __T("%")))+__T("%");
- Ztring Crochets_RemplacerPar=Info(MediaInfoLib::Config.Info_Get(StreamKind).Find(ATraiter.SubString(__T("%"), __T("%"))));
- ATraiter.FindAndReplace(Crochets_ARemplacer, Crochets_RemplacerPar);
- Retour.FindAndReplace(ARemplacer, ATraiter);
- }
- }
- else
- Retour.FindAndReplace(ARemplacer, Ztring());
- }
-
- //Gestion %xxx%
- PosX=0;
- while (Retour.find(__T("%"), PosX)!=(size_t)-1)
- {
- PosX=Retour.find(__T("%"), PosX);
- if (Retour.size() > PosX + 2 && Retour[PosX + 1] >= __T('A') && Retour[PosX + 1] <= __T('Z')) //To keep out "%" without any signification
- {
- Ztring ARemplacer = Ztring(__T("%") + Retour.SubString(__T("%"), __T("%"), PosX)) + __T("%");
- Ztring RemplacerPar = Get(StreamKind, StreamPos, Retour.SubString(__T("%"), __T("%"), PosX));
- RemplacerPar.FindAndReplace(__T("\\"), __T("|SC1|"), 0, Ztring_Recursive);
- RemplacerPar.FindAndReplace(__T("),"), __T("|SC9|"), 0, Ztring_Recursive);
- RemplacerPar.FindAndReplace(__T(")"), __T("|SC8|"), 0, Ztring_Recursive);
- Retour.FindAndReplace(ARemplacer, RemplacerPar);
- }
- else if (PosX == (size_t)-1)
- break;
- else
- PosX++;
- }
-
- //Retour=__T("<table width=\"100%\" border=\"0\" cellpadding=\"1\" cellspacing=\"2\" style=\"border:1px solid Navy\">\n<tr>\n <td width=\"150\">Video #0</td>\n </tr>\r\n <tr>\n <td><i>Codec :</i></td>\n <td colspan=\"3\">WMV1</td>\n </tr>\r\n <tr>\n <td><i>Codec/Info :</i></td>\n <td colspan=\"3\">Windows Media Video 7</td>\n </tr>\r\n <tr>\n <td><i>Width :</i></td>\n <td colspan=\"3\">200 pixels</td>\n </tr>\r\n <tr>\n <td><i>Height :</i></td>\n <td colspan=\"3\">150 pixels</td>\n </tr>\r\n <tr>\n <td><i>Aspect ratio :</i></td>\n <td colspan=\"3\">4/3</td>\n </tr>\r\n <tr>\n <td><i>Resolution :</i></td>\n <td colspan=\"3\">24 bits</td>\n </tr>\r\n</table>\n");
- Retour.FindAndReplace(__T("\\r\\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\r"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\r\n"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\r"), __T("\n"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("\n"), MediaInfoLib::Config.LineSeparator_Get(), 0, Ztring_Recursive);
-
- //Special characters
- if (IsDirect)
- {
- Retour.FindAndReplace(__T("|SC1|"), __T("\\"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC2|"), __T("["), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC3|"), __T("]"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC4|"), __T(","), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC5|"), __T(";"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC6|"), __T("("), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC7|"), __T(")"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC8|"), __T(")"), 0, Ztring_Recursive);
- Retour.FindAndReplace(__T("|SC9|"), __T("),"), 0, Ztring_Recursive);
- }
-
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Internal::Traiter(Ztring &C)
-{
- //$if(%a%,zezeze%a%,rrere)
- size_t Position=C.find(__T("$if("));
- while (Position>0)
- {
- //Recuperation de la chaine entiere
- Ztring Total;
- Ztring ARemplacer;
- ZtringList Total1;
- Total1.Separator_Set(0, __T("),"));
- Total=C.SubString(__T("$if("), __T(")"), Position);
- ARemplacer=Ztring(__T("$if(")+Total+__T(")"));
- Total1.Write(Total);
- if (Total1(0).empty()) //mettre champ2
- C.FindAndReplace(ARemplacer, Total1(2), Position);
- else
- C.FindAndReplace(ARemplacer, Total1(1), Position);
- Position=C.find(__T("$if("), Position);
- }
-
- //reformatage
- C.FindAndReplace(__T("|SC8|"), __T(")"), 0, Ztring_Recursive);
- C.FindAndReplace(__T("|SC9|"), __T("),"), 0, Ztring_Recursive);
- //C.FindAndReplace(__T("\\r\\n"), __T("\n"), 0, Ztring_Recursive);
-}
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Internal::Xml_Name_Escape (const Ztring &Name)
-{
- Ztring ToReturn(Name);
-
- if (ToReturn.operator()(0)>='0' && ToReturn.operator()(0)<='9')
- ToReturn.insert(0, 1, __T('_'));
- ToReturn.FindAndReplace(__T(" "), __T("_"), 0, Ztring_Recursive);
- ToReturn.FindAndReplace(__T("/"), __T("_"), 0, Ztring_Recursive);
- ToReturn.FindAndReplace(__T("("), __T("_"), 0, Ztring_Recursive);
- ToReturn.FindAndReplace(__T(")"), __T("_"), 0, Ztring_Recursive);
- ToReturn.FindAndReplace(__T("*"), __T("_"), 0, Ztring_Recursive);
- ToReturn.FindAndReplace(__T(","), __T("_"), 0, Ztring_Recursive);
- ToReturn.FindAndReplace(__T(":"), __T("_"), 0, Ztring_Recursive);
- ToReturn.FindAndReplace(__T("@"), __T("_"), 0, Ztring_Recursive);
- size_t ToReturn_Pos=0;
- while (ToReturn_Pos<ToReturn.size())
- {
- if (!(ToReturn[ToReturn_Pos]>=__T('A') && ToReturn[ToReturn_Pos]<=__T('Z'))
- && !(ToReturn[ToReturn_Pos]>=__T('a') && ToReturn[ToReturn_Pos]<=__T('z'))
- && !(ToReturn[ToReturn_Pos]>=__T('0') && ToReturn[ToReturn_Pos]<=__T('9'))
- && !(ToReturn[ToReturn_Pos]==__T('_')))
- ToReturn.erase(ToReturn_Pos, 1);
- else
- ToReturn_Pos++;
- }
- if (ToReturn.empty())
- ToReturn="Unknown";
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Internal::Xml_Content_Escape (const Ztring &Content, size_t &Modified)
-{
- Ztring ToReturn(Content);
- return Xml_Content_Escape_Modifying(ToReturn, Modified);
-}
-
-//---------------------------------------------------------------------------
-size_t Xml_Content_Escape_MustEscape(const Ztring &Content)
-{
- size_t Pos=0;
- size_t Size=Content.size();
- for (; Pos<Size; Pos++)
- {
- switch (Content[Pos])
- {
- case __T('\"'):
- case __T('&') :
- case __T('\''):
- case __T('<') :
- case __T('>') :
- return Pos;
- default :
- if (Content[Pos]<0x20)
- return Pos;
- }
- }
-
- return Pos;
-}
-Ztring &MediaInfo_Internal::Xml_Content_Escape_Modifying (Ztring &Content, size_t &Modified)
-{
- size_t Pos=Xml_Content_Escape_MustEscape(Content);
- Ztring Content_Save=Content;
- Modified=0;
- if (Pos>=Content.size())
- return Content;
-
- for (; Pos<Content.size(); Pos++)
- {
- switch (Content[Pos])
- {
- case __T('\"'):
- Content[Pos]=__T('&');
- Content.insert(Pos+1, __T("quot;"));
- Pos+=5;
- break;
- case __T('&'):
- Content[Pos]=__T('&');
- Content.insert(Pos+1, __T("amp;"));
- Pos+=4;
- break;
- case __T('\''):
- Content[Pos]=__T('&');
- Content.insert(Pos+1, __T("apos;"));
- Pos+=5;
- break;
- case __T('<'):
- Content[Pos]=__T('&');
- Content.insert(Pos+1, __T("lt;"));
- Pos+=3;
- break;
- case __T('>'):
- Content[Pos]=__T('&');
- Content.insert(Pos+1, __T("gt;"));
- Pos+=3;
- break;
- default:
- if (Content[Pos]<0x20)
- {
- /* Is still invalid XML
- Ztring Character=__T("#x")+Ztring::ToZtring(Content[Pos]/16, 16)+Ztring::ToZtring(Content[Pos]%16, 16)+__T(";");
- Content[Pos]=__T('&');
- Content.insert(Pos+1, Character);
- Pos+=5;
- */
- string Content_Utf8=Content_Save.To_UTF8(); //TODO: shouldn't we never convert to Unicode?
- string Content_Base64=Base64::encode(Content_Utf8);
- Content.From_UTF8(Content_Base64);
- Modified=1; //Base64
- Pos=Content.size(); //End
- }
- }
- }
-
- return Content;
-}
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal.cpp b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal.cpp
deleted file mode 100644
index d826a3cbd..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal.cpp
+++ /dev/null
@@ -1,1361 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/File__MultipleParsing.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/File.h"
-#include "ZenLib/FileName.h"
-#if defined(MEDIAINFO_DIRECTORY_YES)
- #include "MediaInfo/Reader/Reader_Directory.h"
-#endif
-#if defined(MEDIAINFO_FILE_YES)
- #include "MediaInfo/Reader/Reader_File.h"
-#endif
-#if defined(MEDIAINFO_LIBCURL_YES)
- #include "MediaInfo/Reader/Reader_libcurl.h"
-#endif
-#if defined(MEDIAINFO_LIBMMS_YES)
- #include "MediaInfo/Reader/Reader_libmms.h"
-#endif
-#if defined(MEDIAINFO_IBI_YES)
- #include "MediaInfo/Multiple/File_Ibi.h"
-#endif
-#include "MediaInfo/Multiple/File_Dxw.h"
-#include <cmath>
-#ifdef MEDIAINFO_DEBUG_WARNING_GET
- #include <iostream>
-#endif //MEDIAINFO_DEBUG_WARNING_GET
-#ifdef MEDIAINFO_DEBUG_BUFFER
- #include "ZenLib/FileName.h"
- #include <cstring>
-#endif //MEDIAINFO_DEBUG_BUFFER
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-//To clarify the code
-namespace MediaInfo_Debug_MediaInfo_Internal
-{
-
-#if defined (MEDIAINFO_DEBUG_CONFIG) || defined (MEDIAINFO_DEBUG_BUFFER) || defined (MEDIAINFO_DEBUG_OUTPUT)
- #ifdef WINDOWS
- const Char* MediaInfo_Debug_Name=__T("MediaInfo_Debug");
- #else
- const Char* MediaInfo_Debug_Name=__T("/tmp/MediaInfo_Debug");
- #endif
-#endif
-
-#ifdef MEDIAINFO_DEBUG_CONFIG
- #define MEDIAINFO_DEBUG_CONFIG_TEXT(_TOAPPEND) \
- { \
- Ztring Debug; \
- _TOAPPEND; \
- Debug+=__T("\r\n"); \
- if (!Debug_Config.Opened_Get()) \
- { \
- if (Config.File_Names.empty()) \
- Debug_Config.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Config.txt")); \
- else \
- { \
- Ztring File_Temp; \
- if (Config.File_Names[0].rfind(__T('\\'))!=string::npos) \
- File_Temp=Config.File_Names[0].substr(Config.File_Names[0].rfind(__T('\\'))+1, string::npos); \
- else if (Config.File_Names[0].rfind(__T('/'))!=string::npos) \
- File_Temp=Config.File_Names[0].substr(Config.File_Names[0].rfind(__T('/'))+1, string::npos); \
- else \
- File_Temp=Config.File_Names[0]; \
- Debug_Config.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".")+File_Temp+__T(".Config.txt")); \
- } \
- } \
- Debug_Config.Write(Debug); \
- }
-#else // MEDIAINFO_DEBUG_CONFIG
- #define MEDIAINFO_DEBUG_CONFIG_TEXT(_TOAPPEND)
-#endif // MEDIAINFO_DEBUG_CONFIG
-
-#ifdef MEDIAINFO_DEBUG_CONFIG
- #define EXECUTE_SIZE_T(_METHOD,_DEBUGB) \
- { \
- size_t ToReturn=_METHOD; \
- MEDIAINFO_DEBUG_CONFIG_TEXT(_DEBUGB) \
- return ToReturn; \
- }
-#else //MEDIAINFO_DEBUG_CONFIG
- #define EXECUTE_SIZE_T(_METHOD, _DEBUGB) \
- return _METHOD;
-#endif //MEDIAINFO_DEBUG_CONFIG
-
-#ifdef MEDIAINFO_DEBUG_CONFIG
- #define EXECUTE_INT64U(_METHOD,_DEBUGB) \
- { \
- int64u ToReturn=_METHOD; \
- MEDIAINFO_DEBUG_CONFIG_TEXT(_DEBUGB) \
- return ToReturn; \
- }
-#else //MEDIAINFO_DEBUG_CONFIG
- #define EXECUTE_INT64U(_METHOD, _DEBUGB) \
- return _METHOD;
-#endif //MEDIAINFO_DEBUG_CONFIG
-
-#ifdef MEDIAINFO_DEBUG_CONFIG
- #define EXECUTE_STRING(_METHOD,_DEBUGB) \
- { \
- Ztring ToReturn=_METHOD; \
- MEDIAINFO_DEBUG_CONFIG_TEXT(_DEBUGB) \
- return ToReturn; \
- }
-#else //MEDIAINFO_DEBUG_CONFIG
- #define EXECUTE_STRING(_METHOD,_DEBUGB) \
- return _METHOD;
-#endif //MEDIAINFO_DEBUG_CONFIG
-
-#ifdef MEDIAINFO_DEBUG_BUFFER
- #define MEDIAINFO_DEBUG_BUFFER_SAVE(_BUFFER, _SIZE) \
- { \
- if (!Debug_Buffer_Stream.Opened_Get()) \
- { \
- if (Config.File_Names.empty()) \
- Debug_Buffer_Stream.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Buffer.Stream.0000000000000000")); \
- else \
- { \
- Ztring File_Temp; \
- if (Config.File_Names[0].rfind(__T('\\'))!=string::npos) \
- File_Temp=Config.File_Names[0].substr(Config.File_Names[0].rfind(__T('\\'))+1, string::npos); \
- else if (Config.File_Names[0].rfind(__T('/'))!=string::npos) \
- File_Temp=Config.File_Names[0].substr(Config.File_Names[0].rfind(__T('/'))+1, string::npos); \
- else \
- File_Temp=Config.File_Names[0]; \
- Debug_Buffer_Stream.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".")+File_Temp+__T(".Buffer.Stream.0000000000000000")); \
- } \
- Debug_Buffer_Stream_Order=0; \
- if (Config.File_Names.empty()) \
- Debug_Buffer_Sizes.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Buffer.Sizes.0000000000000000")); \
- else \
- { \
- Ztring File_Temp; \
- if (Config.File_Names[0].rfind(__T('\\'))!=string::npos) \
- File_Temp=Config.File_Names[0].substr(Config.File_Names[0].rfind(__T('\\'))+1, string::npos); \
- else if (Config.File_Names[0].rfind(__T('/'))!=string::npos) \
- File_Temp=Config.File_Names[0].substr(Config.File_Names[0].rfind(__T('/'))+1, string::npos); \
- else \
- File_Temp=Config.File_Names[0]; \
- Debug_Buffer_Sizes.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".")+File_Temp+__T(".Buffer.Sizes.0000000000000000")); \
- } \
- Debug_Buffer_Sizes_Count=0; \
- } \
- Debug_Buffer_Stream.Write(_BUFFER, _SIZE); \
- Debug_Buffer_Sizes.Write((int8u*)&_SIZE, sizeof(size_t)); \
- Debug_Buffer_Sizes_Count+=_SIZE; \
- if (Debug_Buffer_Sizes_Count>=MEDIAINFO_DEBUG_BUFFER_SAVE_FileSize) \
- { \
- Debug_Buffer_Stream.Close(); \
- Debug_Buffer_Sizes.Close(); \
- Ztring Before=Ztring::ToZtring(Debug_Buffer_Stream_Order-1); \
- while (Before.size()<16) \
- Before.insert(0, 1, __T('0')); \
- Ztring Next=Ztring::ToZtring(Debug_Buffer_Stream_Order+1); \
- while (Next.size()<16) \
- Next.insert(0, 1, __T('0')); \
- Debug_Buffer_Stream.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Buffer.Stream.")+Next); \
- Debug_Buffer_Sizes.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Buffer.Sizes.")+Next); \
- File::Delete(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Buffer.Stream.")+Before); \
- File::Delete(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Buffer.Sizes.")+Before); \
- Debug_Buffer_Stream_Order++; \
- Debug_Buffer_Sizes_Count=0; \
- } \
- }
-#else // MEDIAINFO_DEBUG_BUFFER
- #define MEDIAINFO_DEBUG_BUFFER_SAVE(_BUFFER, _SIZE)
-#endif // MEDIAINFO_DEBUG_BUFFER
-
-#ifdef MEDIAINFO_DEBUG_OUTPUT
- #define MEDIAINFO_DEBUG_OUTPUT_INIT(_VALUE, _DEBUGB) \
- { \
- if (OptionLower==__T("file_duplicate")) \
- { \
- size_t Pos=(size_t)ToReturn2.To_int64u(); \
- if (Pos>=Debug_Output_Pos_Stream.size()) \
- { \
- Debug_Output_Pos_Stream.resize(Pos+1); \
- Debug_Output_Pos_Stream[Pos]=new File(); \
- Debug_Output_Pos_Sizes.resize(Pos+1); \
- Debug_Output_Pos_Sizes[Pos]=new File(); \
- Debug_Output_Pos_Pointer.resize(Pos+1); \
- Debug_Output_Pos_Pointer[Pos]=(void*)Ztring(Value).SubString(__T("memory://"), __T(":")).To_int64u(); \
- } \
- } \
- EXECUTE_STRING(_VALUE, _DEBUGB) \
- }
-#else // MEDIAINFO_DEBUG_OUTPUT
- #define MEDIAINFO_DEBUG_OUTPUT_INIT(_VALUE, _DEBUGB) \
- EXECUTE_STRING(_VALUE, _DEBUGB)
-#endif // MEDIAINFO_DEBUG_OUTPUT
-
-#ifdef MEDIAINFO_DEBUG_OUTPUT
- #define MEDIAINFO_DEBUG_OUTPUT_VALUE(_VALUE, _METHOD) \
- { \
- size_t ByteCount=Info->Output_Buffer_Get(Value); \
- void* ValueH=(void*)Ztring(Value).SubString(__T("memory://"), __T(":")).To_int64u(); \
- map<void*, File>::iterator F_Stream=Debug_Output_Value_Stream.find(ValueH); \
- if (F_Stream!=Debug_Output_Value_Stream.end()) \
- { \
- map<void*, File>::iterator F_Sizes=Debug_Output_Value_Stream.find(ValueH); \
- if (!F_Stream->second.Opened_Get()) \
- { \
- F_Stream->second.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Output.")+Ztring::ToZtring((size_t)ValueH, 16)+__T(".Stream")); \
- F_Sizes->second.Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Output.")+Ztring::ToZtring((size_t)ValueH, 16)+__T(".Sizes")); \
- } \
- F_Stream->second.Write((int8u*)ValueH, ByteCount); \
- F_Sizes->second.Write((int8u*)&ByteCount, sizeof(ByteCount)); \
- } \
- return ByteCount; \
- }
-#else // MEDIAINFO_DEBUG_OUTPUT
- #define MEDIAINFO_DEBUG_OUTPUT_VALUE(_VALUE, _METHOD) \
- return _METHOD
-#endif // MEDIAINFO_DEBUG_OUTPUT
-
-#ifdef MEDIAINFO_DEBUG_OUTPUT
- #define MEDIAINFO_DEBUG_OUTPUT_POS(_POS, _METHOD) \
- { \
- size_t ByteCount=Info->Output_Buffer_Get(_POS); \
- if (_POS<Debug_Output_Pos_Stream.size()) \
- { \
- if (!Debug_Output_Pos_Stream[_POS]->Opened_Get()) \
- { \
- Debug_Output_Pos_Stream[_POS]->Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Output.")+Ztring::ToZtring(Pos, 16)+__T(".Stream")); \
- Debug_Output_Pos_Sizes[_POS]->Create(Ztring(MediaInfo_Debug_Name)+__T(".")+Ztring::ToZtring((size_t)this, 16)+__T(".Output.")+Ztring::ToZtring(Pos, 16)+__T(".Sizes")); \
- } \
- Debug_Output_Pos_Stream[_POS]->Write((int8u*)Debug_Output_Pos_Pointer[_POS], ByteCount); \
- Debug_Output_Pos_Sizes[_POS]->Write((int8u*)&ByteCount, sizeof(ByteCount)); \
- } \
- return ByteCount; \
- }
-#else // MEDIAINFO_DEBUG_OUTPUT
- #define MEDIAINFO_DEBUG_OUTPUT_POS(_VALUE, _METHOD) \
- return _METHOD
-#endif // MEDIAINFO_DEBUG_OUTPUT
-
-}
-using namespace MediaInfo_Debug_MediaInfo_Internal;
-
-//***************************************************************************
-// Constructor/destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-MediaInfo_Internal::MediaInfo_Internal()
-: Thread()
-{
- CriticalSectionLocker CSL(CS);
-
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Construction");)
-
- MediaInfoLib::Config.Init(); //Initialize Configuration
-
- BlockMethod=BlockMethod_Local;
- Info=NULL;
- #if !defined(MEDIAINFO_READER_NO)
- Reader=NULL;
- #endif //!defined(MEDIAINFO_READER_NO)
- Info_IsMultipleParsing=false;
-
- Stream.resize(Stream_Max);
- Stream_More.resize(Stream_Max);
-
- //Position in a MediaInfoList class
- IsFirst=true;
- IsLast=true;
-
- //Threading
- BlockMethod=0;
- IsInThread=false;
-}
-
-//---------------------------------------------------------------------------
-MediaInfo_Internal::~MediaInfo_Internal()
-{
- Close();
-
- CriticalSectionLocker CSL(CS);
-
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Destruction");)
-
- delete Info; //Info=NULL;
- #if !defined(MEDIAINFO_READER_NO)
- delete Reader; //Reader=NULL;
- #endif //!defined(MEDIAINFO_READER_NO)
- #ifdef MEDIAINFO_DEBUG_OUTPUT
- for (size_t Pos=0; Pos<Debug_Output_Pos_Stream.size(); Pos++)
- {
- delete Debug_Output_Pos_Stream[Pos]; //Debug_Output_Pos_Stream[Pos]=NULL;
- delete Debug_Output_Pos_Sizes[Pos]; //Debug_Output_Pos_Sizes[Pos]=NULL;
- }
- #endif //MEDIAINFO_DEBUG_OUTPUT
-}
-
-//***************************************************************************
-// Files
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Open(const String &File_Name_)
-{
- Close();
-
- //External IBI
- #if defined(MEDIAINFO_IBI_YES)
- if (Config.Ibi_UseIbiInfoIfAvailable_Get())
- {
- std::string IbiFile=Config.Ibi_Get();
- if (!IbiFile.empty())
- {
- Info=new File_Ibi();
- Open_Buffer_Init(IbiFile.size(), File_Name_);
- Open_Buffer_Continue((const int8u*)IbiFile.c_str(), IbiFile.size());
- Open_Buffer_Finalize();
-
- if (!Get(Stream_General, 0, __T("Format")).empty() && Get(Stream_General, 0, __T("Format"))!=__T("Ibi"))
- return 1;
-
- //Nothing interesting
- Close();
- }
- }
- #endif //MEDIAINFO_IBI_YES
-
- CS.Enter();
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Open, File=");Debug+=Ztring(File_Name_).c_str();)
- Config.File_Names.clear();
- if (Config.File_FileNameFormat_Get()==__T("CSV"))
- {
- Config.File_Names.Separator_Set(0, __T(","));
- Config.File_Names.Write(File_Name_);
- }
- else if (!File_Name_.empty())
- Config.File_Names.push_back(File_Name_);
- if (Config.File_Names.empty())
- {
- CS.Leave();
- return 0;
- }
- Config.File_Names_Pos=1;
- CS.Leave();
-
- //Parsing
- if (BlockMethod==1)
- {
- if (!IsInThread) //If already created, the routine will read the new files
- {
- Run();
- IsInThread=true;
- }
- return 0;
- }
- else
- {
- Entry(); //Normal parsing
- return Count_Get(Stream_General);
- }
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Internal::Entry()
-{
- CS.Enter();
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Entry");)
- Config.State_Set(0);
- CS.Leave();
-
- if ((Config.File_Names[0].size()>=6
- && Config.File_Names[0][0]==__T('m')
- && Config.File_Names[0][1]==__T('m')
- && Config.File_Names[0][2]==__T('s')
- && Config.File_Names[0][3]==__T(':')
- && Config.File_Names[0][4]==__T('/')
- && Config.File_Names[0][5]==__T('/'))
- || (Config.File_Names[0].size()>=7
- && Config.File_Names[0][0]==__T('m')
- && Config.File_Names[0][1]==__T('m')
- && Config.File_Names[0][2]==__T('s')
- && Config.File_Names[0][3]==__T('h')
- && Config.File_Names[0][4]==__T(':')
- && Config.File_Names[0][5]==__T('/')
- && Config.File_Names[0][6]==__T('/')))
- #if defined(MEDIAINFO_LIBMMS_YES)
- Reader_libmms().Format_Test(this, Config.File_Names[0]);
- #else //MEDIAINFO_LIBMMS_YES
- {
- #if MEDIAINFO_EVENTS
- struct MediaInfo_Event_Log_0 Event;
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_Log, 0);
- Event.Type=0xC0;
- Event.Severity=0xFF;
- Event.MessageCode=0;
- Event.MessageStringU=L"Libmms cupport is disabled due to compilation options";
- Event.MessageStringA="Libmms cupport is disabled due to compilation options";
- MediaInfoLib::Config.Event_Send((const int8u*)&Event, sizeof(MediaInfo_Event_Log_0));
- #endif //MEDIAINFO_EVENTS
- }
- #endif //MEDIAINFO_LIBMMS_YES
-
- else if (Config.File_Names[0].find(__T("://"))!=string::npos)
- #if defined(MEDIAINFO_LIBCURL_YES)
- {
- CS.Enter();
- if (Reader)
- {
- CS.Leave();
- return; //There is a problem
- }
- Reader=new Reader_libcurl();
- CS.Leave();
-
- Reader->Format_Test(this, Config.File_Names[0]);
-
- #if MEDIAINFO_NEXTPACKET
- if (Config.NextPacket_Get())
- return;
- #endif //MEDIAINFO_NEXTPACKET
- }
- #else //MEDIAINFO_LIBCURL_YES
- {
- #if MEDIAINFO_EVENTS
- struct MediaInfo_Event_Log_0 Event;
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_Log, 0);
- Event.Type=0xC0;
- Event.Severity=0xFF;
- Event.MessageCode=0;
- Event.MessageStringU=L"Libcurl support is disabled due to compilation options";
- Event.MessageStringA="Libcurl support is disabled due to compilation options";
- MediaInfoLib::Config.Event_Send((const int8u*)&Event, sizeof(MediaInfo_Event_Log_0));
- #endif //MEDIAINFO_EVENTS
- }
- #endif //MEDIAINFO_LIBCURL_YES
-
- #if defined(MEDIAINFO_DIRECTORY_YES)
- else if (Dir::Exists(Config.File_Names[0]))
- Reader_Directory().Format_Test(this, Config.File_Names[0]);
- #endif //MEDIAINFO_DIRECTORY_YES
-
- #if defined(MEDIAINFO_FILE_YES)
- else if (File::Exists(Config.File_Names[0]))
- {
- #if defined(MEDIAINFO_REFERENCES_YES)
- string Dxw;
- if (Config.File_CheckSideCarFiles_Get() && !Config.File_IsReferenced_Get())
- {
- FileName Test(Config.File_Names[0]);
- Ztring FileExtension=Test.Extension_Get();
- FileExtension.MakeLowerCase();
-
- if (FileExtension!=__T("dfxp"))
- {
- Test.Extension_Set(__T("dfxp"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".dfxp\" />\r\n";
- }
- if (FileExtension!=__T("sami"))
- {
- Test.Extension_Set(__T("sami"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".sami\" />\r\n";
- }
- if (FileExtension!=__T("sc2"))
- {
- Test.Extension_Set(__T("sc2"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".sc2\" />\r\n";
- }
- if (FileExtension!=__T("scc"))
- {
- Test.Extension_Set(__T("scc"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".scc\" />\r\n";
- }
- if (FileExtension!=__T("smi"))
- {
- Test.Extension_Set(__T("smi"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".smi\" />\r\n";
- }
- if (FileExtension!=__T("srt"))
- {
- Test.Extension_Set(__T("srt"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".srt\" />\r\n";
- }
- if (FileExtension!=__T("stl"))
- {
- Test.Extension_Set(__T("stl"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".stl\" />\r\n";
- }
- if (FileExtension!=__T("ttml"))
- {
- Test.Extension_Set(__T("ttml"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".ttml\" />\r\n";
- }
- if (FileExtension!=__T("ssa"))
- {
- Test.Extension_Set(__T("ssa"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".ssa\" />\r\n";
- }
- if (FileExtension!=__T("ass"))
- {
- Test.Extension_Set(__T("ass"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".ass\" />\r\n";
- }
- if (FileExtension!=__T("vtt"))
- {
- Test.Extension_Set(__T("vtt"));
- if (File::Exists(Test))
- Dxw+=" <clip file=\""+Test.Name_Get().To_UTF8()+".vtt\" />\r\n";
- }
-
- Ztring Name=Test.Name_Get();
- Ztring BaseName=Name.SubString(Ztring(), __T("_"));
- if (!BaseName.empty())
- {
- ZtringList List;
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_audio.mp4"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_sub.dfxp"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_sub.sami"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_sub.sc2"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_sub.scc"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_sub.smi"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_sub.srt"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_sub.stl"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_sub.vtt"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_forcesub.dfxp"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_forcesub.sami"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_forcesub.sc2"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_forcesub.scc"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_forcesub.smi"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_forcesub.srt"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_forcesub.stl"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_forcesub.vtt"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_cc.dfxp"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_cc.sami"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_cc.sc2"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_cc.scc"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_cc.smi"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_cc.srt"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_cc.stl"), Dir::Include_Files);
- List+=Dir::GetAllFileNames(Test.Path_Get()+PathSeparator+BaseName+__T("_*_cc.vtt"), Dir::Include_Files);
- for (size_t Pos=0; Pos<List.size(); Pos++)
- Dxw+=" <clip file=\""+List[Pos].To_UTF8()+"\" />\r\n";
- }
-
- if (!Dxw.empty())
- {
- Dxw.insert(0, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n"
- "<indexFile xmlns=\"urn:digimetrics-xml-wrapper\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"urn:digimetrics-xml-wrapper DMSCLIP.XSD\">\r\n"
- " <clip source=\"main\" file=\""+FileName(Config.File_Names[0]).Name_Get().To_UTF8()+"."+FileName(Config.File_Names[0]).Extension_Get().To_UTF8()+"\" />\r\n");
- Dxw.append("</indexFile>\r\n");
- Config.File_FileNameFormat_Set(__T("Dxw"));
- }
- }
-
- if (Dxw.empty())
- {
- CS.Enter();
- if (Reader)
- {
- CS.Leave();
- return; //There is a problem
- }
- Reader=new Reader_File();
- CS.Leave();
-
- Reader->Format_Test(this, Config.File_Names[0]);
- }
- else
- {
- Open_Buffer_Init(Dxw.size(), FileName(Config.File_Names[0]).Path_Get()+PathSeparator+FileName(Config.File_Names[0]).Name_Get());
- Open_Buffer_Continue((const int8u*)Dxw.c_str(), Dxw.size());
- #if MEDIAINFO_NEXTPACKET
- if (Config.NextPacket_Get())
- return;
- #endif //MEDIAINFO_NEXTPACKET
- Open_Buffer_Finalize();
- }
- #else //defined(MEDIAINFO_REFERENCES_YES)
- CS.Enter();
- if (Reader)
- {
- CS.Leave();
- return; //There is a problem
- }
- Reader=new Reader_File();
- CS.Leave();
-
- Reader->Format_Test(this, Config.File_Names[0]);
- #endif //defined(MEDIAINFO_REFERENCES_YES)
-
- #if MEDIAINFO_NEXTPACKET
- if (Config.NextPacket_Get())
- return;
- #endif //MEDIAINFO_NEXTPACKET
- }
- #endif //MEDIAINFO_FILE_YES
-
- CS.Enter();
- Config.State_Set(1);
- CS.Leave();
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Open (const int8u* Begin, size_t Begin_Size, const int8u* End, size_t End_Size, int64u File_Size)
-{
- Open_Buffer_Init(File_Size);
- Open_Buffer_Continue(Begin, Begin_Size);
- if (End && Begin_Size+End_Size<=File_Size)
- {
- Open_Buffer_Init(File_Size, File_Size-End_Size);
- Open_Buffer_Continue(End, End_Size);
- }
- Open_Buffer_Finalize();
-
- return 1;
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Open_Buffer_Init (int64u File_Size_, const String &File_Name)
-{
- CriticalSectionLocker CSL(CS);
-
- if (Config.File_Names.size()<=1) //If analyzing multiple files, theses members are adapted in File_Reader.cpp
- {
- if (File_Size_!=(int64u)-1)
- Config.File_Size=Config.File_Current_Size=File_Size_;
- }
-
- if (Info==NULL)
- {
- Ztring ForceParser = Config.File_ForceParser_Get();
- if (!ForceParser.empty())
- {
- CS.Leave();
- SelectFromExtension(ForceParser);
- CS.Enter();
- }
- if (Info==NULL)
- {
- Info=new File__MultipleParsing;
- Info_IsMultipleParsing=true;
- }
- }
- #if MEDIAINFO_TRACE
- Info->Init(&Config, &Details, &Stream, &Stream_More);
- #else //MEDIAINFO_TRACE
- Info->Init(&Config, &Stream, &Stream_More);
- #endif //MEDIAINFO_TRACE
- if (!File_Name.empty())
- Info->File_Name=File_Name;
- Info->Open_Buffer_Init(File_Size_);
-
- #if MEDIAINFO_EVENTS
- {
- string File_Name_Local=Ztring(File_Name).To_Local();
- wstring File_Name_Unicode=Ztring(File_Name).To_Unicode();
- struct MediaInfo_Event_General_Start_0 Event;
- memset(&Event, 0xFF, sizeof(struct MediaInfo_Event_Generic));
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_General_Start, 0);
- Event.EventSize=sizeof(struct MediaInfo_Event_General_Start_0);
- Event.StreamIDs_Size=0;
- Event.Stream_Size=File_Size_;
- Event.FileName=File_Name_Local.c_str();
- Event.FileName_Unicode=File_Name_Unicode.c_str();
- Config.Event_Send(NULL, (const int8u*)&Event, sizeof(MediaInfo_Event_General_Start_0));
- }
- #endif //MEDIAINFO_EVENTS
-
- return 1;
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Open_Buffer_Init (int64u File_Size_, int64u File_Offset_)
-{
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Open_Buffer_Init, File_Size=");Debug+=Ztring::ToZtring(File_Size_);Debug+=__T(", File_Offset=");Debug+=Ztring::ToZtring(File_Offset_);)
- #ifdef MEDIAINFO_DEBUG_BUFFER
- if (Info && File_Offset_>Info->File_Offset)
- {
- size_t Temp_Size=(size_t)(File_Offset_-Info->File_Offset);
- int8u* Temp=new int8u[Temp_Size];
- std::memset(Temp, 0xCC, Temp_Size);
- MEDIAINFO_DEBUG_BUFFER_SAVE(Temp, Temp_Size);
- delete[] Temp;
- }
- #endif //MEDIAINFO_DEBUG_BUFFER
-
- if (Config.File_Names.size()<=1) //If analyzing multiple files, theses members are adapted in File_Reader.cpp
- {
- if (File_Size_!=(int64u)-1)
- Config.File_Size=Config.File_Current_Size=File_Size_;
- }
-
- if (Info==NULL || File_Size_!=(int64u)-1)
- Open_Buffer_Init(File_Size_);
-
- if (File_Offset_!=(int64u)-1 && Info)
- {
- CriticalSectionLocker CSL(CS);
- Info->Open_Buffer_Position_Set(File_Offset_);
- }
-
- #if MEDIAINFO_EVENTS
- if (Info && Info->Status[File__Analyze::IsAccepted])
- {
- struct MediaInfo_Event_General_Move_Done_0 Event;
- memset(&Event, 0xFF, sizeof(struct MediaInfo_Event_Generic));
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_General_Move_Done, 0);
- Event.EventSize=sizeof(struct MediaInfo_Event_General_Move_Done_0);
- Event.StreamIDs_Size=0;
- Event.StreamOffset=File_Offset_;
- Config.Event_Send(NULL, (const int8u*)&Event, sizeof(MediaInfo_Event_General_Move_Done_0));
- }
- else
- {
- struct MediaInfo_Event_General_Start_0 Event;
- memset(&Event, 0xFF, sizeof(struct MediaInfo_Event_Generic));
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_General_Start, 0);
- Event.EventSize=sizeof(struct MediaInfo_Event_General_Start_0);
- Event.StreamIDs_Size=0;
- Event.Stream_Size=File_Size_;
- Event.FileName=NULL;
- Event.FileName_Unicode=NULL;
- Config.Event_Send(NULL, (const int8u*)&Event, sizeof(MediaInfo_Event_General_Start_0));
- }
- #endif //MEDIAINFO_EVENTS
-
- EXECUTE_SIZE_T(1, Debug+=__T("Open_Buffer_Init, will return 1");)
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED2
-size_t MediaInfo_Internal::Open_Buffer_SegmentChange ()
-{
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Open_Buffer_SegmentChange"))
-
- Info->Open_Buffer_SegmentChange();
-
- return 1;
-}
-#endif //MEDIAINFO_ADVANCED2
-
-//---------------------------------------------------------------------------
-void MediaInfo_Internal::Open_Buffer_Unsynch ()
-{
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Open_Buffer_Unsynch");)
-
- if (Info==NULL)
- return;
-
- CriticalSectionLocker CSL(CS);
- Info->Open_Buffer_Unsynch();
-}
-
-//---------------------------------------------------------------------------
-std::bitset<32> MediaInfo_Internal::Open_Buffer_Continue (const int8u* ToAdd, size_t ToAdd_Size)
-{
- CriticalSectionLocker CSL(CS);
- MEDIAINFO_DEBUG_BUFFER_SAVE(ToAdd, ToAdd_Size);
- if (Info==NULL)
- return 0;
-
- Info->Open_Buffer_Continue(ToAdd, ToAdd_Size);
-
- if (Info_IsMultipleParsing && Info->Status[File__Analyze::IsAccepted])
- {
- //Found
- File__Analyze* Info_ToDelete=Info;
- Info=((File__MultipleParsing*)Info)->Parser_Get();
- delete Info_ToDelete; //Info_ToDelete=NULL;
- Info_IsMultipleParsing=false;
- }
-
- #if 0 //temp, for old users
- //The parser wanted seek but the buffer is not seekable
- if (Info->File_GoTo!=(int64u)-1 && Config.File_IsSeekable_Get()==0)
- {
- Info->Open_Buffer_Finalize(true);
- Info->File_GoTo=(int64u)-1;
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Open_Buffer_Continue, will return 0");)
- return 0;
- }
-
- return 1;
- #else
- //The parser wanted seek but the buffer is not seekable
- if (Info->File_GoTo!=(int64u)-1 && Config.File_IsSeekable_Get()==0)
- {
- Info->Fill();
- Info->File_GoTo=(int64u)-1;
- }
-
- return Info->Status;
- #endif
-}
-
-//---------------------------------------------------------------------------
-int64u MediaInfo_Internal::Open_Buffer_Continue_GoTo_Get ()
-{
- CriticalSectionLocker CSL(CS);
- if (Info==NULL)
- return (int64u)-1;
-
- if (Info->File_GoTo==(int64u)-1
- || (Info->File_GoTo>=Info->File_Offset && Info->File_GoTo<Info->File_Offset+0x10000)) //If jump is tiny, this is not worth the performance cost due to seek
- return (int64u)-1;
- else
- return Info->File_GoTo;
-}
-
-//---------------------------------------------------------------------------
-bool MediaInfo_Internal::Open_Buffer_Position_Set(int64u File_Offset)
-{
- CriticalSectionLocker CSL(CS);
- if (Info==NULL)
- return false;
-
- Info->Open_Buffer_Position_Set(File_Offset);
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t MediaInfo_Internal::Open_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- CriticalSectionLocker CSL(CS);
- if (Info==NULL)
- return false;
-
- return Info->Open_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Open_Buffer_Finalize ()
-{
- CS.Enter();
- if (Info && Info->Status[File__Analyze::IsUpdated])
- {
- Info->Open_Buffer_Update();
- Info->Status[File__Analyze::IsUpdated]=false;
- for (size_t Pos=File__Analyze::User_16; Pos<File__Analyze::User_16+16; Pos++)
- Info->Status[Pos]=false;
- }
- CS.Leave();
-
- CriticalSectionLocker CSL(CS);
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Open_Buffer_Finalize");)
- if (Info==NULL)
- return 0;
-
- Info->Open_Buffer_Finalize();
- #if MEDIAINFO_DEMUX
- if (Config.Demux_EventWasSent)
- return 0;
- #endif //MEDIAINFO_DEMUX
-
- //Cleanup
- if (!Config.File_IsSub_Get() && !Config.File_KeepInfo_Get()) //We need info for the calling parser
- {
- delete Info; Info=NULL;
- }
- if (Config.File_Names_Pos>=Config.File_Names.size())
- {
- delete[] Config.File_Buffer; Config.File_Buffer=NULL; Config.File_Buffer_Size=0; Config.File_Buffer_Size_Max=0;
- }
-
- EXECUTE_SIZE_T(1, Debug+=__T("Open_Buffer_Finalize, will return 1"))
-}
-
-//---------------------------------------------------------------------------
-std::bitset<32> MediaInfo_Internal::Open_NextPacket ()
-{
- CriticalSectionLocker CSL(CS);
-
- bool Demux_EventWasSent=false;
- if (Info==NULL || !Info->Status[File__Analyze::IsFinished])
- {
- #if !defined(MEDIAINFO_READER_NO)
- if (Reader)
- {
- CS.Leave();
- Demux_EventWasSent=(Reader->Format_Test_PerParser_Continue(this)==2);
- CS.Enter();
- }
- else
- #endif //defined(MEDIAINFO_READER_NO)
- {
- #if MEDIAINFO_NEXTPACKET
- Config.Demux_EventWasSent=false;
- #endif //MEDIAINFO_NEXTPACKET
- Open_Buffer_Continue(NULL, 0);
- #if MEDIAINFO_NEXTPACKET
- Demux_EventWasSent=Config.Demux_EventWasSent;
- if (!Demux_EventWasSent)
- #endif //MEDIAINFO_NEXTPACKET
- Open_Buffer_Finalize();
- }
- }
-
- std::bitset<32> ToReturn=Info==NULL?std::bitset<32>(0x0F):Info->Status;
- if (Demux_EventWasSent)
- ToReturn[8]=true; //bit 8 is for the reception of a frame
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Internal::Close()
-{
- if (IsRunning())
- {
- RequestTerminate();
- while(IsExited())
- Yield();
- }
-
- CriticalSectionLocker CSL(CS);
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Close");)
- Stream.clear();
- Stream.resize(Stream_Max);
- Stream_More.clear();
- Stream_More.resize(Stream_Max);
- delete Info; Info=NULL;
- #if !defined(MEDIAINFO_READER_NO)
- delete Reader; Reader=NULL;
- #endif //defined(MEDIAINFO_READER_NO)
-}
-
-//***************************************************************************
-// Get File info
-//***************************************************************************
-
-/*//---------------------------------------------------------------------------
-Ztring MediaInfo_Internal::Inform(size_t)
-{
- //Info case
- if (Info)
- return Info->Inform();
-
- if (!Info)
- return MediaInfoLib::Config.EmptyString_Get();
-
- return Info->Inform();
-} */
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Internal::Get(stream_t StreamKind, size_t StreamPos, size_t Parameter, info_t KindOfInfo)
-{
- CriticalSectionLocker CSL(CS);
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Get, StreamKind=");Debug+=Ztring::ToZtring((size_t)StreamKind);Debug+=__T(", StreamPos=");Debug+=Ztring::ToZtring(StreamPos);Debug+=__T(", Parameter=");Debug+=Ztring::ToZtring(Parameter);)
-
- if (Info && Info->Status[File__Analyze::IsUpdated])
- {
- Info->Open_Buffer_Update();
- Info->Status[File__Analyze::IsUpdated]=false;
- for (size_t Pos=File__Analyze::User_16; Pos<File__Analyze::User_16+16; Pos++)
- Info->Status[Pos]=false;
- }
-
- //Check integrity
- if (StreamKind>=Stream_Max || StreamPos>=Stream[StreamKind].size() || Parameter>=MediaInfoLib::Config.Info_Get(StreamKind).size()+Stream_More[StreamKind][StreamPos].size() || KindOfInfo>=Info_Max)
- return MediaInfoLib::Config.EmptyString_Get(); //Parameter is unknown
-
- else if (Parameter<MediaInfoLib::Config.Info_Get(StreamKind).size())
- {
- //Optimization : KindOfInfo>Info_Text is in static lists
- if (KindOfInfo!=Info_Text)
- EXECUTE_STRING(MediaInfoLib::Config.Info_Get(StreamKind, Parameter, KindOfInfo), Debug+=__T("Get, will return ");Debug+=ToReturn;) //look for static information only
- else if (Parameter<Stream[StreamKind][StreamPos].size())
- EXECUTE_STRING(Stream[StreamKind][StreamPos][Parameter], Debug+=__T("Get, will return ");Debug+=ToReturn;)
- else
- EXECUTE_STRING(MediaInfoLib::Config.EmptyString_Get(), Debug+=__T("Get, will return ");Debug+=ToReturn;) //This parameter is known, but not filled
- }
- else
- EXECUTE_STRING(Stream_More[StreamKind][StreamPos][Parameter-MediaInfoLib::Config.Info_Get(StreamKind).size()](KindOfInfo), Debug+=__T("Get, will return ");Debug+=ToReturn;)
-}
-
-//---------------------------------------------------------------------------
-Ztring MediaInfo_Internal::Get(stream_t StreamKind, size_t StreamPos, const String &Parameter, info_t KindOfInfo, info_t KindOfSearch)
-{
- //Legacy
- if (Parameter.find(__T("_String"))!=Error)
- {
- Ztring S1=Parameter;
- S1.FindAndReplace(__T("_String"), __T("/String"));
- return Get(StreamKind, StreamPos, S1, KindOfInfo, KindOfSearch);
- }
- if (Parameter==__T("Channels"))
- return Get(StreamKind, StreamPos, __T("Channel(s)"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("Artist"))
- return Get(StreamKind, StreamPos, __T("Performer"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("AspectRatio"))
- return Get(StreamKind, StreamPos, __T("DisplayAspectRatio"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("AspectRatio/String"))
- return Get(StreamKind, StreamPos, __T("DisplayAspectRatio/String"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("Chroma"))
- return Get(StreamKind, StreamPos, __T("Colorimetry"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("PlayTime"))
- return Get(StreamKind, StreamPos, __T("Duration"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("PlayTime/String"))
- return Get(StreamKind, StreamPos, __T("Duration/String"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("PlayTime/String1"))
- return Get(StreamKind, StreamPos, __T("Duration/String1"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("PlayTime/String2"))
- return Get(StreamKind, StreamPos, __T("Duration/String2"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("PlayTime/String3"))
- return Get(StreamKind, StreamPos, __T("Duration/String3"), KindOfInfo, KindOfSearch);
- if (StreamKind==Stream_General && Parameter==__T("BitRate"))
- return Get(Stream_General, StreamPos, __T("OverallBitRate"), KindOfInfo, KindOfSearch);
- if (StreamKind==Stream_General && Parameter==__T("BitRate/String"))
- return Get(Stream_General, StreamPos, __T("OverallBitRate/String"), KindOfInfo, KindOfSearch);
- if (StreamKind==Stream_General && Parameter==__T("BitRate_Minimum"))
- return Get(Stream_General, StreamPos, __T("OverallBitRate_Minimum"), KindOfInfo, KindOfSearch);
- if (StreamKind==Stream_General && Parameter==__T("BitRate_Minimum/String"))
- return Get(Stream_General, StreamPos, __T("OverallBitRate_Minimum/String"), KindOfInfo, KindOfSearch);
- if (StreamKind==Stream_General && Parameter==__T("BitRate_Nominal"))
- return Get(Stream_General, StreamPos, __T("OverallBitRate_Nominal"), KindOfInfo, KindOfSearch);
- if (StreamKind==Stream_General && Parameter==__T("BitRate_Nominal/String"))
- return Get(Stream_General, StreamPos, __T("OverallBitRate_Nominal/String"), KindOfInfo, KindOfSearch);
- if (StreamKind==Stream_General && Parameter==__T("BitRate_Maximum"))
- return Get(Stream_General, StreamPos, __T("OverallBitRate_Maximum"), KindOfInfo, KindOfSearch);
- if (StreamKind==Stream_General && Parameter==__T("BitRate_Maximum/String"))
- return Get(Stream_General, StreamPos, __T("OverallBitRate_Maximum/String"), KindOfInfo, KindOfSearch);
- if (Parameter==__T("AFD"))
- return Get(StreamKind, StreamPos, __T("ActiveFormatDescription"), KindOfInfo, KindOfSearch);
-
- CS.Enter();
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Get, StreamKind=");Debug+=Ztring::ToZtring((size_t)StreamKind);Debug+=__T(", StreamKind=");Debug+=Ztring::ToZtring(StreamPos);Debug+=__T(", Parameter=");Debug+=Ztring(Parameter);)
-
- if (Info && Info->Status[File__Analyze::IsUpdated])
- {
- Info->Open_Buffer_Update();
- Info->Status[File__Analyze::IsUpdated]=false;
- for (size_t Pos=File__Analyze::User_16; Pos<File__Analyze::User_16+16; Pos++)
- Info->Status[Pos]=false;
- }
-
- //Check integrity
- if (StreamKind>=Stream_Max || StreamPos>=Stream[StreamKind].size() || KindOfInfo>=Info_Max)
- {
- CS.Leave();
- EXECUTE_STRING(MediaInfoLib::Config.EmptyString_Get(), Debug+=__T("Get, stream and/or pos is invalid will return empty string");) //Parameter is unknown
- }
-
- //Special cases
- //-Inform for a stream
- if (Parameter==__T("Inform"))
- {
- CS.Leave();
- Ztring InformZtring=Inform(StreamKind, StreamPos, true);
- CS.Enter();
- size_t Pos=MediaInfoLib::Config.Info_Get(StreamKind).Find(__T("Inform"));
- if (Pos!=Error)
- Stream[StreamKind][StreamPos](Pos)=InformZtring;
- }
-
- //Case of specific info
- size_t ParameterI=MediaInfoLib::Config.Info_Get(StreamKind).Find(Parameter, KindOfSearch);
- if (ParameterI==Error)
- {
- ParameterI=Stream_More[StreamKind][StreamPos].Find(Parameter, KindOfSearch);
- if (ParameterI==Error)
- {
- #ifdef MEDIAINFO_DEBUG_WARNING_GET
- if (Ztring(Parameter)!=__T("SCTE35_PID")) //TODO: define a special interface for parser-specific parameters
- std::cerr<<"MediaInfo: Warning, Get(), parameter \""<<Ztring(Parameter).To_Local()<<"\""<<std::endl;
- #endif //MEDIAINFO_DEBUG_WARNING_GET
-
- CS.Leave();
- EXECUTE_STRING(MediaInfoLib::Config.EmptyString_Get(), Debug+=__T("Get, parameter is unknown, will return empty string");) //Parameter is unknown
- }
- CS.Leave();
- CriticalSectionLocker CSL(CS);
- return Stream_More[StreamKind][StreamPos][ParameterI](KindOfInfo);
- }
-
- CS.Leave();
-
- EXECUTE_STRING(Get(StreamKind, StreamPos, ParameterI, KindOfInfo), Debug+=__T("Get, will return ");Debug+=ToReturn;)
-}
-
-//***************************************************************************
-// Set File info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Set(const String &ToSet, stream_t StreamKind, size_t StreamPos, size_t Parameter, const String &OldValue)
-{
- CriticalSectionLocker CSL(CS);
- if (!Info)
- return 0;
-
- return Info->Set(StreamKind, StreamPos, Parameter, ToSet, OldValue);
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Set(const String &ToSet, stream_t StreamKind, size_t StreamPos, const String &Parameter, const String &OldValue)
-{
- CriticalSectionLocker CSL(CS);
- if (!Info)
- return 0;
-
- return Info->Set(StreamKind, StreamPos, Parameter, ToSet, OldValue);
-}
-
-//***************************************************************************
-// Output buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Output_Buffer_Get (const String &Value)
-{
- CriticalSectionLocker CSL(CS);
- if (!Info)
- return 0;
-
- MEDIAINFO_DEBUG_OUTPUT_VALUE(Value, Info->Output_Buffer_Get(Value));
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Output_Buffer_Get (size_t Pos)
-{
- CriticalSectionLocker CSL(CS);
- if (!Info)
- return 0;
-
- MEDIAINFO_DEBUG_OUTPUT_POS(Pos, Info->Output_Buffer_Get(Pos));
-}
-
-//***************************************************************************
-// Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-String MediaInfo_Internal::Option (const String &Option, const String &Value)
-{
- CriticalSectionLocker CSL(CS);
- MEDIAINFO_DEBUG_CONFIG_TEXT(Debug+=__T("Option, Option=");Debug+=Ztring(Option);Debug+=__T(", Value=");Debug+=Ztring(Value);)
- Ztring OptionLower=Option; OptionLower.MakeLowerCase();
- if (Option.empty())
- return __T("");
- else if (OptionLower==__T("language_update"))
- {
- if (!Info || Info->Get(Stream_General, 0, __T("CompleteName"))==__T(""))
- return __T("");
-
- ZtringListList Language=Value.c_str();
- MediaInfoLib::Config.Language_Set(Language);
-
- return __T("");
- }
- else if (OptionLower==__T("create_dummy"))
- {
- CreateDummy (Value);
- delete Info; Info=NULL;
- return __T("");
- }
- else if (OptionLower==__T("thread"))
- {
- BlockMethod=1;
- return __T("");
- }
- else if (Option==__T("info_capacities"))
- {
- return __T("Option removed");
- }
- #if MEDIAINFO_TRACE
- else if (OptionLower.find(__T("file_details_clear"))==0)
- {
- if (Info)
- Info->Details_Clear();
-
- return __T("");
- }
- #endif //MEDIAINFO_TRACE
- else if (OptionLower.find(__T("file_seek"))==0)
- {
- #if MEDIAINFO_SEEK
- if (Reader==NULL && Info==NULL)
- return __T("Error: Reader pointer is empty");
-
- size_t Method=(size_t)-1;
- int64u SeekValue=(int64u)-1;
- int64u ID=(int64u)-1;
-
- ZtringList List; List.Separator_Set(0, __T(","));
- List.Write(Value);
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (!List[Pos].empty() && List[Pos].find(__T('%'))==List[Pos].size()-1)
- {
- Method=1;
- SeekValue=(int64u)(Ztring(List[Pos]).To_float32()*100);
- }
- else if (!List[Pos].empty() && List[Pos].find_first_not_of(__T("0123456789"))==string::npos)
- {
- Method=0;
- SeekValue=Ztring(List[Pos]).To_int64u();
- }
- else if (!List[Pos].empty() && List[Pos].find(__T("Frame="))!=string::npos)
- {
- Method=3;
- Ztring FrameNumberZ=List[Pos].substr(List[Pos].find(__T("Frame="))+6, string::npos);
- SeekValue=FrameNumberZ.To_int64u();
- }
- else if (!List[Pos].empty() && List[Pos].find(__T(":"))!=string::npos)
- {
- Method=2;
- Ztring ValueZ=List[Pos];
- SeekValue=0;
- size_t Value_Pos=ValueZ.find(__T(":"));
- if (Value_Pos==string::npos)
- Value_Pos=ValueZ.size();
- SeekValue+=Ztring(ValueZ.substr(0, Value_Pos)).To_int64u()*60*60*1000*1000*1000;
- ValueZ.erase(0, Value_Pos+1);
- Value_Pos=ValueZ.find(__T(":"));
- if (Value_Pos==string::npos)
- Value_Pos=ValueZ.size();
- SeekValue+=Ztring(ValueZ.substr(0, Value_Pos)).To_int64u()*60*1000*1000*1000;
- ValueZ.erase(0, Value_Pos+1);
- Value_Pos=ValueZ.find(__T("."));
- if (Value_Pos==string::npos)
- Value_Pos=ValueZ.size();
- SeekValue+=Ztring(ValueZ.substr(0, Value_Pos)).To_int64u()*1000*1000*1000;
- ValueZ.erase(0, Value_Pos+1);
- if (!ValueZ.empty())
- SeekValue+=Ztring(ValueZ).To_int64u()*1000*1000*1000/(int64u)pow(10.0, (int)ValueZ.size());
- }
- else if (!List[Pos].empty() && List[Pos].find(__T("ID="))!=string::npos)
- {
- Ztring IDZ=List[Pos].substr(List[Pos].find(__T("ID="))+3, string::npos);
- ID=IDZ.To_int64u();
- }
- }
-
- CS.Leave();
- size_t Result;
- if (Reader)
- Result=Reader->Format_Test_PerParser_Seek(this, Method, SeekValue, ID);
- else
- Result=Open_Buffer_Seek(Method, SeekValue, ID);
- CS.Enter();
- switch (Result)
- {
- case 1 : return __T("");
- case 2 : return __T("Invalid value");
- #if MEDIAINFO_IBI
- case 3 : return __T("Feature not supported / IBI file not provided");
- case 4 : return __T("Problem during IBI file parsing");
- #endif //MEDIAINFO_IBI
- case 5 : return __T("Invalid ID");
- case 6 : return __T("Internal error");
- #if !MEDIAINFO_IBI
- case (size_t)-2 : return __T("Feature not supported / IBI support disabled due to compilation options");
- #endif //MEDIAINFO_IBI
- case (size_t)-1 : return __T("Feature not supported");
- default : return __T("Unknown error");
- }
- #else //MEDIAINFO_SEEK
- return __T("Seek manager is disabled due to compilation options");
- #endif //MEDIAINFO_SEEK
- }
- else if (OptionLower.find(__T("file_"))==0)
- {
- Ztring ToReturn2=Config.Option(Option, Value);
- if (Info)
- Info->Option_Manage();
-
- MEDIAINFO_DEBUG_OUTPUT_INIT(ToReturn2, Debug+=__T("Option, will return ");Debug+=ToReturn;)
- }
- else
- EXECUTE_STRING(MediaInfoLib::Config.Option(Option, Value), Debug+=__T("Option, will return ");Debug+=ToReturn;)
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::Count_Get (stream_t StreamKind, size_t StreamPos)
-{
- CriticalSectionLocker CSL(CS);
-
- if (Info && Info->Status[File__Analyze::IsUpdated])
- {
- Info->Open_Buffer_Update();
- Info->Status[File__Analyze::IsUpdated]=false;
- for (size_t Pos=File__Analyze::User_16; Pos<File__Analyze::User_16+16; Pos++)
- Info->Status[Pos]=false;
- }
-
- //Integrity
- if (StreamKind>=Stream_Max)
- return 0;
-
- //Count of streams
- if (StreamPos==Error)
- return Stream[StreamKind].size();
-
- //Integrity
- if (StreamPos>=Stream[StreamKind].size())
- return 0;
-
- //Count of piece of information in a stream
- return MediaInfoLib::Config.Info_Get(StreamKind).size()+Stream_More[StreamKind][StreamPos].size();
-}
-
-//---------------------------------------------------------------------------
-size_t MediaInfo_Internal::State_Get ()
-{
- CriticalSectionLocker CSL(CS);
- return (size_t)(Config.State_Get()*10000);
-}
-
-//---------------------------------------------------------------------------
-void MediaInfo_Internal::TestContinuousFileNames ()
-{
- CriticalSectionLocker CSL(CS);
- if (Info)
- Info->TestContinuousFileNames();
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-void MediaInfo_Internal::Event_Prepare (struct MediaInfo_Event_Generic* Event)
-{
- CriticalSectionLocker CSL(CS);
- if (Info)
- Info->Event_Prepare(Event);
-}
-#endif // MEDIAINFO_EVENTS
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal.h
deleted file mode 100644
index d6f873ce4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give information about a lot of media files
-// Dispatch the file to be tested by all containers
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_InternalH
-#define MediaInfo_InternalH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// For developer: you can disable or enable traces
-//#define MEDIAINFO_DEBUG_CONFIG
-//#define MEDIAINFO_DEBUG_BUFFER
-//#define MEDIAINFO_DEBUG_OUTPUT
-//#define MEDIAINFO_DEBUG_WARNING_GET
-// For developer: customization of traces
-#ifdef MEDIAINFO_DEBUG_BUFFER
- const size_t MEDIAINFO_DEBUG_BUFFER_SAVE_FileSize=128*1024*1024;
-#endif //MEDIAINFO_DEBUG_BUFFER
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Config.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/Thread.h"
-#if defined (MEDIAINFO_DEBUG_CONFIG) || defined (MEDIAINFO_DEBUG_BUFFER) || defined (MEDIAINFO_DEBUG_OUTPUT)
- #include <ZenLib/File.h>
- #include <map>
-#endif //MEDIAINFO_DEBUG
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__Analyze;
-class Internet__Base;
-class Reader__Base;
-
-//***************************************************************************
-/// @brief MediaInfo_Internal
-/// @version 0.7
-//***************************************************************************
-
-class MediaInfo_Internal : public ZenLib::Thread
-{
-public :
- //Constructor/Destructor
- MediaInfo_Internal ();
- ~MediaInfo_Internal ();
-
- //File
- size_t Open (const String &File_Name);
- size_t Open (const ZenLib::int8u* Begin, size_t Begin_Size, const ZenLib::int8u* End=NULL, size_t End_Size=0, ZenLib::int64u File_Size=0);
- size_t Open_Buffer_Init (ZenLib::int64u File_Size=(ZenLib::int64u)-1, const String &File_Name=String());
- size_t Open_Buffer_Init (ZenLib::int64u File_Size, ZenLib::int64u File_Offset);
- #if MEDIAINFO_ADVANCED2
- size_t Open_Buffer_SegmentChange ();
- #endif //MEDIAINFO_ADVANCED2
- std::bitset<32> Open_Buffer_Continue (const ZenLib::int8u* Buffer, size_t Buffer_Size);
- ZenLib::int64u Open_Buffer_Continue_GoTo_Get ();
- bool Open_Buffer_Position_Set(int64u File_Offset);
- #if MEDIAINFO_SEEK
- size_t Open_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- void Open_Buffer_Unsynch ();
- size_t Open_Buffer_Finalize ();
- std::bitset<32> Open_NextPacket ();
- void Close ();
-
- //General information
- Ztring Inform ();
- Ztring Inform (stream_t StreamKind, size_t StreamNumber, bool IsDirect); //All about only a specific stream
-
- //Get
- Ztring Get (stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t InfoKind=Info_Text);
- Ztring Get (stream_t StreamKind, size_t StreamNumber, const String &Parameter, info_t InfoKind=Info_Text, info_t SearchKind=Info_Name);
-
- //Set
- size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue=__T(""));
- size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue=__T(""));
-
- //Output_Buffered
- size_t Output_Buffer_Get (const String &Value);
- size_t Output_Buffer_Get (size_t Pos);
-
- //Info
- String Option (const String &Option, const String &Value=__T(""));
- size_t State_Get ();
- size_t Count_Get (stream_t StreamKind, size_t StreamNumber=(size_t)-1);
-
- //Position in a MediaInfoList class
- bool IsFirst;
- bool IsLast;
-
- //Internal
- static bool LibraryIsModified(); //Is the library has been modified? (#defines...)
-
-private :
- friend class File_Bdmv; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_Cdxa; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_Lxf; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_Mpeg4; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_MpegTs;//Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_MpegPs;//Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_Mxf; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_DcpAm; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_DcpCpl;//Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_DcpPkl;//Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File__ReferenceFilesHelper; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class Reader_File; //For Info member
-
- //Parsing handles
- File__Analyze* Info;
- //Internet__Base* Internet;
- #if !defined(MEDIAINFO_READER_NO)
- Reader__Base* Reader;
- #endif //defined(MEDIAINFO_READER_NO)
-
- //Helpers
- void CreateDummy (const String& Value); //Create dummy Information
- MediaInfo_Internal(const MediaInfo_Internal&); // Copy Constructor
-
- //Open Buffer
- bool Info_IsMultipleParsing;
-
- //Config
- std::vector<std::vector<ZtringList> > Stream;
- std::vector<std::vector<ZtringListList> > Stream_More;
- Ztring Details;
- void Traiter(Ztring &C); //enleve les $if...
-
-public :
- bool SelectFromExtension (const String &Parser); //Select File_* from the parser name
- void TestContinuousFileNames();
- #if MEDIAINFO_EVENTS
- void Event_Prepare (struct MediaInfo_Event_Generic* Event);
- #endif // MEDIAINFO_EVENTS
- #if !defined(MEDIAINFO_READER_NO)
- int ListFormats(const String &File_Name=String());
- #else //!defined(MEDIAINFO_READER_NO)
- int ListFormats(const String &File_Name=String()) {return 0;}
- #endif //!defined(MEDIAINFO_READER_NO)
- MediaInfo_Config_MediaInfo Config;
-
- Ztring Xml_Name_Escape(const Ztring &Name);
- Ztring Xml_Content_Escape(const Ztring &Content, size_t &Modified);
- Ztring &Xml_Content_Escape_Modifying(Ztring &Content, size_t &Modified);
-
-private :
- //Threading
- size_t BlockMethod; //Open() return: 0=immedialtly, 1=after local info, 2=when user interaction is needed
- bool IsInThread;
- void Entry();
- ZenLib::CriticalSection CS;
-
- #ifdef MEDIAINFO_DEBUG_CONFIG
- File Debug_Config;
- #endif //MEDIAINFO_DEBUG_CONFIG
- #ifdef MEDIAINFO_DEBUG_BUFFER
- File Debug_Buffer_Stream;
- int64u Debug_Buffer_Stream_Order;
- File Debug_Buffer_Sizes;
- int64u Debug_Buffer_Sizes_Count;
- #endif //MEDIAINFO_DEBUG_BUFFER
- #ifdef MEDIAINFO_DEBUG_OUTPUT
- map<void*, File> Debug_Output_Value_Stream; //Key is the memory address
- map<void*, File> Debug_Output_Value_Sizes; //Key is the memory address
- vector<File*> Debug_Output_Pos_Stream; //Key is the pos
- vector<File*> Debug_Output_Pos_Sizes; //Key is the pos
- vector<void*> Debug_Output_Pos_Pointer; //Key is the pos
- #endif //MEDIAINFO_DEBUG_OUTPUT
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal_Const.h b/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal_Const.h
deleted file mode 100644
index a69168b9e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/MediaInfo_Internal_Const.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Global configuration of MediaInfo
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Internal_ConstH
-#define MediaInfo_Internal_ConstH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Const.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-/// @brief Used with Format info
-enum infoformat_t
-{
- InfoFormat_Name, ///<
- InfoFormat_LongName, ///<
- InfoFormat_Family, ///<
- InfoFormat_KindofFormat, ///<
- InfoFormat_Parser, ///<
- InfoFormat_Info, ///<
- InfoFormat_Extensions, ///<
- InfoFormat_InternetMediaType, ///<
- InfoFormat_Url, ///<
- InfoFormat_Compression_Mode, ///<
- InfoFormat_Max
-};
-
-/// @brief Used with Codec ID info
-enum infocodecid_t
-{
- InfoCodecID_Codec, ///<
- InfoCodecID_Format, ///<
- InfoCodecID_Hint, ///<
- InfoCodecID_Description, ///<
- InfoCodecID_Url, ///<
- InfoCodecID_Profile, ///<
- InfoCodecID_Version, ///<
- InfoCodecID_ColorSpace, ///<
- InfoCodecID_ChromaSubsampling, ///<
- InfoCodecID_BitDepth, ///<
- InfoCodecID_Compression_Mode, ///<
- InfoCodecID_Max
-};
-
-/// @brief Used with Codec ID info (Format type part)
-enum infocodecid_format_t
-{
- InfoCodecID_Format_Matroska, ///<
- InfoCodecID_Format_Mpeg4, ///<
- InfoCodecID_Format_Real, ///<
- InfoCodecID_Format_Riff, ///<
- InfoCodecID_Format_Max
-};
-
-/// @brief Used with Codec info
-enum infocodec_t
-{
- InfoCodec_Codec, ///<
- InfoCodec_Name, ///<
- InfoCodec_KindOfCode, ///<
- InfoCodec_KindOfStream, ///<
- InfoCodec_KindofCodec, ///<
- InfoCodec_BitRate_Mode, ///<
- InfoCodec_Description, ///<
- InfoCodec_Url, ///<
- InfoCodec_Max
-};
-
-/// @brief Used with Encoder info
-enum infoencoder_t
-{
- InfoEncoder_Name, ///<
- InfoEncoder_LongName, ///<
- InfoEncoder_Date, ///<
- InfoEncoder_Max
-};
-
-/// @brief Used with Library info
-enum infolibrary_t
-{
- InfoLibrary_Numlber, ///<
- InfoLibrary_Version, ///<
- InfoLibrary_Date, ///<
- InfoLibrary_Max
-};
-
-/// @brief Used with Library info (Format type part)
-enum infolibrary_format_t
-{
- InfoLibrary_Format_DivX, ///<
- InfoLibrary_Format_XviD, ///<
- InfoLibrary_Format_MainConcept_Avc, ///<
- InfoLibrary_Format_VorbisCom, ///<
- InfoLibrary_Format_Max
-};
-
-/// @brief Used by BlockMethod
-enum blockmethod_t
-{
- BlockMethod_Now, ///< Return now, without parsing (init only)
- BlockMethod_Often, ///< Return as often as possible
- BlockMethod_Local, ///< Return after local parsing (no Internet connection)
- BlockMethod_Needed, ///< Return when a user interaction is needed
- BlockMethod_Max
-};
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//Char types
-#if defined(UNICODE) || defined (_UNICODE)
- typedef wchar_t Char;
- #undef __T
- #define __T(__x) L ## __x
-#else
- typedef char Char;
- #undef __T
- #define __T(__x) __x
-#endif
-//---------------------------------------------------------------------------
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Aaf.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Aaf.cpp
deleted file mode 100644
index fec837e28..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Aaf.cpp
+++ /dev/null
@@ -1,656 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AAF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Aaf.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/File.h"
-#include "tinyxml2.h"
-using namespace ZenLib;
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-const char* AAf_tagSTGTY (int8u tagSTGTY)
-{
- switch (tagSTGTY)
- {
- case 0 : return "unknown";
- case 1 : return "storage";
- case 2 : return "stream";
- case 3 : return "ILockBytes";
- case 4 : return "IPropertyStorage";
- case 5 : return "root";
- default: return "";
- }
-}
-
-const char* AAf_tagDECOLOR (int8u tagDECOLOR)
-{
- switch (tagDECOLOR)
- {
- case 0 : return "red";
- case 1 : return "black";
- default: return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Aaf::File_Aaf()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Aaf;
- StreamIDs_Width[0]=16;
- #endif //MEDIAINFO_EVENTS
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_Aaf::~File_Aaf()
-{
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- delete Streams[Pos];
-
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aaf::Streams_Finish()
-{
- if (ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Aaf::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Aaf::FileHeader_Begin()
-{
- if (File_Size<0x100)
- {
- Reject("Aaf");
- return false;
- }
-
- //Element_Size
- if (Buffer_Size<0x18)
- return false; //Must wait for more data
-
- if (Buffer[ 0x0]!=0xD0
- || Buffer[ 0x1]!=0xCF
- || Buffer[ 0x2]!=0x11
- || Buffer[ 0x3]!=0xE0
- || Buffer[ 0x4]!=0xA1
- || Buffer[ 0x5]!=0xB1
- || Buffer[ 0x6]!=0x1A
- || Buffer[ 0x7]!=0xE1
- || Buffer[ 0x8]!=0x41
- || Buffer[ 0x9]!=0x41
- || Buffer[ 0xA]!=0x46
- || Buffer[ 0xB]!=0x42
- || Buffer[ 0xC]!=0x0D
- || Buffer[ 0xD]!=0x00
- || Buffer[ 0xE]!=0x4F
- || Buffer[ 0xF]!=0x4D
- || Buffer[0x10]!=0x06
- || Buffer[0x11]!=0x0E
- || Buffer[0x12]!=0x2B
- || Buffer[0x13]!=0x34
- || Buffer[0x14]!=0x01
- || Buffer[0x15]!=0x01
- || Buffer[0x16]!=0x01
- || Buffer[0x17]!=0xFF)
- {
- Reject("Aaf");
- return false;
- }
-
- //Element_Size
- if (Buffer_Size<File_Size)
- return false; //Must wait for more data
-
- //Accept the file
- Accept("Aaf");
- Fill(Stream_General, 0, General_Format, "AAF");
-
- Step=Step_None;
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Read_Buffer_Continue()
-{
- if (File_Offset || Buffer_Offset)
- return;
-
- //Parsing
- Element_Begin1("Header");
- int32u csectFat;
- int16u DllVersion, ByteOrder;
- Skip_B8( "abSig");
- Skip_B16( "clsid");
- Skip_L2( "MinorVersion");
- Get_L2 (DllVersion, "DllVersion");
- Get_L2 (ByteOrder, "ByteOrder");
- Get_L2 (SectorShift, "SectorShift");
- Get_L2 (MiniSectorShift, "MiniSectorShift");
- Skip_L2( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "csectDir");
- Get_L4 (csectFat, "csectFat");
- Get_L4 (sectDirStart, "sectDirStart");
- Skip_L4( "signature");
- Get_L4 (MiniSectorCutoff, "MiniSectorCutoff");
- Get_L4 (sectMiniFatStart, "sectMiniFatStart");
- Skip_L4( "csectMiniFat");
- Skip_L4( "sectDifStart");
- Skip_L4( "sectDif");
- Element_Begin1("sectFat");
- for (int16u Pos=0; Pos<(csectFat>109?109:csectFat); Pos++)
- {
- int32u sectFat;
- Get_L4 (sectFat, "sectFat");
- sectsFat.push_back(sectFat);
- }
- if (csectFat<109)
- Skip_XX((109-csectFat)*4, "unused sectsFat");
- Element_End();
- Element_End();
-
- FILLING_BEGIN();
- Fill("Aaf");
- Step=Step_Fat;
- sectsFat_Pos=0;
- if (sectsFat.empty())
- {
- Finish();
- }
- else
- GoTo((1+sectsFat[0])*(1<<SectorShift));
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aaf::Header_Parse()
-{
- switch (Step)
- {
- case Step_Fat : Header_Fill_Code(0, "FAT");
- Header_Fill_Size(((int64u)1) << SectorShift);
- break;
- case Step_MiniFat : Header_Fill_Code(0, "MiniFAT");
- Header_Fill_Size(((int64u)1) << SectorShift);
- break;
- case Step_Directory : Header_Fill_Code(0, "Directory");
- Header_Fill_Size(((int64u)1) << SectorShift);
- break;
- case Step_Stream : Header_Fill_Code(0, "Stream");
- Header_Fill_Size(((int64u)1) << (Streams[0]->Size<MiniSectorCutoff ? MiniSectorShift : SectorShift));
- break;
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Data_Parse()
-{
- //Parsing
- switch (Step)
- {
- case Step_Fat : Fat(); return;
- case Step_MiniFat : MiniFat(); break;
- case Step_Directory : Directory(); break;
- case Step_Stream : StreamElement(); return;
- default : Skip_XX(Element_Size, "Unknown");
- }
-
- size_t Pointers_Pos=(size_t)((File_Offset+Buffer_Offset)>>SectorShift)-1;
- if (Pointers_Pos<Pointers.size())
- {
- if (Pointers[Pointers_Pos]<0xFFFFFFF0)
- GoTo((1+Pointers[Pointers_Pos])*(1<<SectorShift));
- else if (Step==Step_MiniFat)
- {
- Step=Step_Directory;
- Directory_Pos=0;
- GoTo((1+sectDirStart)*(1<<SectorShift));
- }
- else if (Step==Step_Directory)
- {
- Step=Step_Stream;
- if (Streams.empty())
- Finish();
- else
- {
- Streams_Pos=0;
- Streams_Pos2=0;
- GoTo(Streams[0]->StreamOffsets[0]);
- }
- }
- else
- Finish();
- }
- else
- Finish();
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Fat()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- {
- int32u Pointer;
- Get_L4 (Pointer, "Pointer"); Param_Info1(Ztring::ToZtring(Pointers.size()));
- //Pointer=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- //Element_Offset+=4;
- Pointers.push_back(Pointer);
- }
-
- //Next FAT sector or next step
- sectsFat_Pos++;
- if (sectsFat_Pos<sectsFat.size())
- GoTo((1+sectsFat[sectsFat_Pos])*(1<<SectorShift));
- else
- {
- Step=Step_MiniFat;
- GoTo((1+sectMiniFatStart)*(1<<SectorShift));
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::MiniFat()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- {
- int32u Pointer;
- Get_L4 (Pointer, "Pointer"); Param_Info1(Ztring::ToZtring(MiniPointers.size()));
- //Pointer=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- //Element_Offset+=4;
- MiniPointers.push_back(Pointer);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Directory()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- Directory_Entry();
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Directory_Entry()
-{
- //Parsing
- Element_Begin1("Directory entry");
- Element_Info1(Directory_Pos);
- Ztring ab;
- int64u Size;
- int32u SectStart;
- int8u mse;
- Get_UTF16L(64, ab, "ab"); Element_Info1(ab);
- Skip_L2( "cb");
- Get_L1 (mse, "mse"); Element_Info1(AAf_tagSTGTY(mse));
- Info_L1(flags, "flags"); Element_Info1(AAf_tagDECOLOR(flags));
- Skip_L4( "LeftSib SID");
- Skip_L4( "RightSib SID");
- Skip_L4( mse==2?"0":"Child SID"); //Zero if stream
- Skip_L16( mse==2?"0":"clsId");//Zero if stream
- Skip_L4( "UserFlags");
- Info_L8(CreationTime, mse==2?"0":"Create time"); if (mse!=2) {Param_Info1(CreationTime?Ztring().Date_From_Milliseconds_1601(CreationTime/10000):Ztring());} //Zero if stream
- Info_L8(ModificationTime, mse==2?"0":"Modify time"); if (mse!=2) {Param_Info1(CreationTime?Ztring().Date_From_Milliseconds_1601(ModificationTime/10000):Ztring());} //Zero if stream
- Get_L4 (SectStart, mse==1?"0":"SectStart"); //Zero if storage
- if (SectorShift<=9)
- {
- int32u Size32;
- Get_L4 (Size32, mse==1?"0":"Size"); //Zero if storage
- Skip_L4( "PropType");
- Size=Size32;
-
- }
- else
- {
- Get_L8 (Size, mse==1?"0":"Size"); //Zero if storage
- }
-
- if (mse==5 && Size) //If root
- {
- //Building sectMiniFats_FatPointers
- int32u Pointers_Pos=SectStart;
- while (Pointers_Pos<Pointers.size())
- {
- Param_Info1(Ztring::ToZtring(Pointers_Pos<<SectorShift));
- sectsMiniStream.push_back(Pointers_Pos);
- Pointers_Pos=Pointers[Pointers_Pos];
- }
- }
- else if (mse==2 && Size) //If stream
- {
- Param_Info1("StreamOffset");
- stream* Stream = new stream(
- ab,
- Directory_Pos,
- Size
- );
- if (Size<MiniSectorCutoff) //MiniFAT
- {
- int32u Pointers_Pos=SectStart;
- while (Pointers_Pos<MiniPointers.size())
- {
- int32u SectPos=Pointers_Pos>>(SectorShift-MiniSectorShift);
- int32u MiniSectPos=Pointers_Pos&((((size_t)1)<<(SectorShift-MiniSectorShift))-1);
- Stream->StreamOffsets.push_back(((1+sectsMiniStream[SectPos])<<SectorShift)+(MiniSectPos<<MiniSectorShift));
- Param_Info1(Ztring::ToZtring(((1+sectsMiniStream[SectPos])<<SectorShift)+(MiniSectPos<<MiniSectorShift)));
- Pointers_Pos=MiniPointers[Pointers_Pos];
- }
- }
- else //FAT
- {
- int32u Pointers_Pos=SectStart;
- while (Pointers_Pos<Pointers.size())
- {
- Stream->StreamOffsets.push_back((1+Pointers_Pos)<<SectorShift);
- Param_Info1(Ztring::ToZtring((1+Pointers_Pos)<<SectorShift));
- Pointers_Pos=Pointers[Pointers_Pos];
- }
- }
- Streams.push_back(Stream);
- }
- Element_End0();
-
- Directory_Pos++;
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::StreamElement()
-{
- if (Streams_Pos>=Streams.size() || Streams[Streams_Pos]->Size>=0x1000000) //TODO: more serious test about size
- return; //Incoherancy
-
- //Saving data
- if (Streams[Streams_Pos]->StreamOffsets.size()!=1)
- {
- Skip_XX(Element_Size, "Stream data");
- int16u Shift=(Streams[Streams_Pos]->Size<MiniSectorCutoff?MiniSectorShift:SectorShift);
- if (Streams[Streams_Pos]->Buffer==NULL)
- Streams[Streams_Pos]->Buffer=new int8u[(size_t)((1+(Streams[Streams_Pos]->Size>>Shift))<<Shift)];
- memcpy(Streams[Streams_Pos]->Buffer+Streams_Pos2*(((int64u)1)<<Shift), Buffer+Buffer_Offset, (size_t)Element_Size);
- }
-
- //Next Element
- Streams_Pos2++;
- if (Streams_Pos2>=Streams[Streams_Pos]->StreamOffsets.size())
- {
- Element_Offset=0;
- StreamElement_Parse();
- Streams_Pos++;
- Streams_Pos2=0;
- }
- if (Streams_Pos<Streams.size())
- GoTo(Streams[Streams_Pos]->StreamOffsets[Streams_Pos2]);
- else
- Finish();
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::StreamElement_Parse()
-{
- //Searching emulation_prevention_three_byte
- const int8u* Save_Buffer=Buffer;
- int64u Save_File_Offset=File_Offset;
- size_t Save_Buffer_Offset=Buffer_Offset;
- int64u Save_Element_Size=Element_Size;
-
- if (Streams[Streams_Pos]->Buffer)
- {
- //We must change the buffer for keeping out
- Element_Size=Streams[Streams_Pos]->Size;
- File_Offset=Streams[Streams_Pos]->StreamOffsets[0];
- Buffer_Offset=0;
- Buffer=Streams[Streams_Pos]->Buffer;
- }
-
- //Parsing
- Element_Info1(Streams[Streams_Pos]->Directory_Pos);
- Element_Info1(Streams[Streams_Pos]->Name);
- int16u Count;
- Skip_L2( "0x204C?");
- Get_L2 (Count, "Count");
- vector<int16u> Sizes;
- vector<int16u> Keys;
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- int16u Key, Size;
- Get_L2 (Key, "Key");
- Skip_L2( "Flags?");
- Get_L2 (Size, "Size");
- Sizes.push_back(Size);
- Keys.push_back(Key);
- }
-
- #define ELEMENT(_ELEMENT, _NAME) \
-
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin0();
- xxxSize=Sizes[Pos];
- switch (Keys[Pos])
- {
- case 0x0001 : Element_Name("MetaDictionary"); MetaDictionary(); break;
- case 0x0002 : Element_Name("Header"); Header(); break;
- case 0x0003 : Element_Name("ClassDefinitions"); ClassDefinitions(); break;
- case 0x0004 : Element_Name("TypeDefinitions"); TypeDefinitions(); break;
- case 0x0005 : Element_Name("Identification"); Identification(); break;
- case 0x0006 : Element_Name("Name"); Name(); break;
- case 0x0007 : Element_Name("MetaDefinition"); MetaDefinition(); break;
- case 0x0008 : Element_Name("ParentClass"); ParentClass(); break;
- case 0x0009 : Element_Name("Properties"); Properties(); break;
- case 0x000A : Element_Name("IsConcrete"); IsConcrete(); break;
- case 0x000B : Element_Name("Type"); Type(); break;
- case 0x000C : Element_Name("IsOptional"); IsOptional(); break;
- case 0x000D : Element_Name("LocalIdentification"); LocalIdentification(); break;
- case 0x000E : Element_Name("IsUniqueIdentifier"); IsUniqueIdentifier(); break;
- case 0x000F : Element_Name("Size"); Size(); break;
- case 0x3D02 : Element_Name("Locked"); Locked(); break;
- case 0x4001 : Element_Name("NetworkLocator"); NetworkLocator(); break;
- default : Skip_XX(xxxSize, "Unknown");
- }
- Element_End0();
- }
-
- //
- if (Streams[Streams_Pos]->Buffer)
- {
- //We must change the buffer for keeping out
- Element_Size=Save_Element_Size;
- File_Offset=Save_File_Offset;
- Buffer_Offset=Save_Buffer_Offset;
- delete[] Buffer; Buffer=Save_Buffer;
- Element_Offset=Element_Size;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::MetaDictionary()
-{
- Skip_UTF16L(xxxSize, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Header()
-{
- Skip_UTF16L(xxxSize, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::ClassDefinitions()
-{
- Skip_UTF16L(xxxSize, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::TypeDefinitions()
-{
- Skip_UTF16L(xxxSize, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Identification()
-{
- Skip_B8( "Part2");
- Skip_B8( "Part1");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Name()
-{
- Skip_UTF16L(xxxSize, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::MetaDefinition()
-{
- Skip_UTF16L(xxxSize, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::ParentClass()
-{
- Skip_B5( "WeakReference");
- Skip_B8( "Part2");
- Skip_B8( "Part1");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Properties()
-{
- Skip_UTF16L(xxxSize, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::IsConcrete()
-{
- Skip_L1( "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Type()
-{
- Skip_B8( "Part2");
- Skip_B8( "Part1");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::IsOptional()
-{
- Skip_L1( "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::LocalIdentification()
-{
- Skip_L2( "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::IsUniqueIdentifier()
-{
- Skip_L1( "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Size()
-{
- Skip_L1( "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::Locked()
-{
- Skip_L1( "Data");
-
- //Descriptors[Streams[Streams_Pos]->Directory_Pos].StreamKind=Stream_Audio;
-}
-
-//---------------------------------------------------------------------------
-void File_Aaf::NetworkLocator()
-{
- Ztring Data;
- Get_UTF16L(xxxSize, Data, "Data");
-
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.FileNames.push_back(Data);
- ReferenceFiles->References.push_back(ReferenceFile);
-
- //Locators[Streams[Streams_Pos]->Directory_Pos].EssenceLocator=Data;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_AAF_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Aaf.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Aaf.h
deleted file mode 100644
index f7efe1821..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Aaf.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about AAF files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_AafH
-#define MediaInfo_File_AafH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_Aaf
-//***************************************************************************
-
-class File_Aaf : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Aaf();
- ~File_Aaf();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- void Read_Buffer_Continue ();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void FatSect();
- void Fat();
- void MiniFat();
- void Directory();
- void Directory_Entry();
- void StreamElement();
- void StreamElement_Parse();
-
- void MetaDictionary(); //0x0001
- void Header(); //0x0002
- void ClassDefinitions(); //0x0003
- void TypeDefinitions(); //0x0004
- void Identification(); //0x0005
- void Name(); //0x0006
- void MetaDefinition(); //0x0007
- void ParentClass(); //0x0008
- void Properties(); //0x0009
- void IsConcrete(); //0x000A
- void Type(); //0x000B
- void IsOptional(); //0x000C
- void LocalIdentification(); //0x000D
- void IsUniqueIdentifier(); //0x000E
- void Size(); //0x000F
- void Locked(); //0x3D02
- void NetworkLocator(); //0x4001
-
- //Temp
- int16u xxxSize;
- int16u SectorShift;
- int16u MiniSectorShift;
- int32u sectMiniFatStart;
- int32u sectDirStart;
- int32u MiniSectorCutoff;
- typedef enum step
- {
- Step_None,
- Step_Fat,
- Step_MiniFat,
- Step_Directory,
- Step_Stream,
- } step;
- step Step;
- vector<int32u> sectsFat;
- vector<int32u> sectsMiniStream;
- vector<int32u> Pointers;
- vector<int32u> MiniPointers;
- typedef struct stream
- {
- Ztring Name;
- size_t Directory_Pos;
- int32u ChildSID;
- int64u Size;
- int8u* Buffer;
- vector<int32u> StreamOffsets;
-
- stream(const Ztring Name_, size_t Directory_Pos_, int64u Size_)
- :
- Name(Name_),
- Directory_Pos(Directory_Pos_),
- ChildSID((int32u)-1),
- Size(Size_),
- Buffer(NULL)
- {
- }
-
- private:
- stream &operator=(const stream &v);
- stream();
- } stream;
- vector<stream*> Streams;
- size_t sectsFat_Pos;
- size_t Streams_Pos;
- size_t Streams_Pos2;
- size_t Directory_Pos;
- File__ReferenceFilesHelper* ReferenceFiles;
-
- //Descriptor
- /*
- struct descriptor
- {
- stream_t StreamKind;
- int32u ChildSID;
-
- descriptor()
- {
- StreamKind=Stream_Max;
- ChildSID=(int32u)-1;
- }
- };
- typedef std::map<int32u, descriptor> descriptors; //Key is Directory_Pos of Descriptor
- descriptors Descriptors;
- */
-
- //Locator
- /*
- struct locator
- {
- Ztring EssenceLocator;
- };
- typedef std::map<int32u, locator> locators; //Key is Directory_Pos of the locator
- locators Locators;
- */
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ancillary.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ancillary.cpp
deleted file mode 100644
index 9627fe3d0..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ancillary.cpp
+++ /dev/null
@@ -1,935 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ANCILLARY_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Ancillary.h"
-#if defined(MEDIAINFO_CDP_YES)
- #include "MediaInfo/Text/File_Cdp.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#if defined(MEDIAINFO_TIMECODE_YES)
- #include "MediaInfo/Multiple/File_Gxf_TimeCode.h"
-#endif
-#if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- #include "MediaInfo/Text/File_AribStdB24B37.h"
-#endif
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include <cstring>
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-const char* Ancillary_DataID(int8u DataID, int8u SecondaryDataID)
-{
- switch (DataID)
- {
- case 0x00 : return "Undefined";
- case 0x08 :
- switch (SecondaryDataID)
- {
- case 0x0C : return "MPEG-2 Recoding Information"; //SMPTE ST 353
- default : return "(Reserved for 8-bit applications)";
- }
- break;
- case 0x40 :
- switch (SecondaryDataID)
- {
- case 0x01 : //SMPTE ST 305
- case 0x02 : return "SDTI"; //SMPTE ST 348
- case 0x04 : //SMPTE ST 427
- case 0x05 : //SMPTE ST 427
- case 0x06 : return "Link Encryption Key"; //SMPTE ST 427
- default : return "(Internationally registered)";
- }
- break;
- case 0x41 :
- switch (SecondaryDataID)
- {
- case 0x01 : return "Payload identifier"; //SMPTE ST 352
- case 0x05 : return "Bar Data"; //SMPTE ST 2016
- case 0x06 : return "Pan-Scan Information"; //SMPTE ST 2016
- case 0x07 : return "ANSI/SCTE 104 Messages"; //SMPTE ST 2010
- case 0x08 : return "DVB/SCTE VBI Data"; //SMPTE ST 2031
- default : return "(Internationally registered)";
- }
- break;
- case 0x43 :
- switch (SecondaryDataID)
- {
- case 0x02 : return "WST"; //OP-47 WST, also RDD 8
- case 0x03 : return "Multipacket"; //OP-47 Multipacket, also RDD 8
- case 0x05 : return "Acquisition Metadata"; //RDD 18
- default : return "(Internationally registered)";
- }
- break;
- case 0x44 :
- switch (SecondaryDataID)
- {
- case 0x44 : return "ISAN or UMID"; //SMPTE RP 223
- default : return "(Internationally registered)";
- }
- break;
- case 0x45 :
- //SMPTE 2020-1-2008
- switch (SecondaryDataID)
- {
- case 0x01 : return "Audio Metadata - No association";
- case 0x02 : return "Audio Metadata - Channels 1/2";
- case 0x03 : return "Audio Metadata - Channels 3/4";
- case 0x04 : return "Audio Metadata - Channels 5/6";
- case 0x05 : return "Audio Metadata - Channels 7/8";
- case 0x06 : return "Audio Metadata - Channels 9/10";
- case 0x07 : return "Audio Metadata - Channels 11/12";
- case 0x08 : return "Audio Metadata - Channels 13/14";
- case 0x09 : return "Audio Metadata - Channels 15/16";
- default : return "(Internationally registered)";
- }
- break;
- case 0x46 :
- switch (SecondaryDataID)
- {
- case 0x01 : return "Two-Frame Marker"; //SMPTE RP 2051
- default : return "(Internationally registered)";
- }
- break;
- case 0x50 :
- switch (SecondaryDataID)
- {
- case 0x01 : return "WSS"; //RDD 8
- default : return "(Reserved)";
- }
- break;
- case 0x5F :
- switch (SecondaryDataID&0xF0)
- {
- case 0xD0 : return "ARIB STD B37"; //ARIB STD B37
- default : return "(Reserved)";
- }
- break;
- case 0x60 :
- switch (SecondaryDataID)
- {
- case 0x60 : return "ATC"; //SMPTE RP 188 / SMPTE ST 12-2
- default : return "(Internationally registered)";
- }
- break;
- case 0x61 :
- switch (SecondaryDataID)
- {
- case 0x01 : return "CDP"; //SMPTE 334
- case 0x02 : return "CEA-608"; //SMPTE 334
- default : return "(Internationally registered)";
- }
- break;
- case 0x62 :
- switch (SecondaryDataID)
- {
- case 0x01 : return "Program description"; //SMPTE 334
- case 0x02 : return "Data broadcast"; //SMPTE 334
- case 0x03 : return "VBI data"; //SMPTE 334
- default : return "(Internationally registered)";
- }
- break;
- case 0x64 :
- switch (SecondaryDataID)
- {
- case 0x64 : return "LTC"; //SMPTE RP 196
- case 0x6F : return "VITC"; //SMPTE RP 196
- default : return "(Internationally registered)";
- }
- break;
- case 0x80 : return "Marked for deletion";
- case 0x84 : return "Data end marker";
- case 0x88 : return "Data start marker";
- default :
- if (DataID<=0x03)
- return "(Reserved)";
- else if (DataID<=0x0F)
- return "(Reserved for 8-bit applications)";
- else if (DataID<=0x3F)
- return "(Reserved)";
- else if (DataID<=0x4F)
- return "(Internationally registered)";
- else if (DataID<=0x5F)
- return "(Reserved)";
- else if (DataID<=0x7F)
- return "(Internationally registered)";
- else if (DataID<=0x83)
- return "(Reserved)";
- else if (DataID<=0x87)
- return "(Reserved)";
- else if (DataID<=0x9F)
- return "(Reserved)";
- else if (DataID<=0xBF)
- return "(Internationally registered)";
- else if (DataID<=0xCF)
- return "User application";
- else
- return "(Internationally registered)";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ancillary::File_Ancillary()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("Ancillary");
- PTS_DTS_Needed=true;
-
- //In
- WithTenBit=false;
- WithChecksum=false;
- HasBFrames=false;
- InDecodingOrder=false;
- LineNumber_IsSecondField=false;
- AspectRatio=0;
- FrameRate=0;
- LineNumber=(int32u)-1;
- #if defined(MEDIAINFO_CDP_YES)
- Cdp_Parser=NULL;
- #endif //defined(MEDIAINFO_CDP_YES)
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- AribStdB34B37_Parser=NULL;
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
-}
-
-//---------------------------------------------------------------------------
-File_Ancillary::~File_Ancillary()
-{
- #if defined(MEDIAINFO_CDP_YES)
- delete Cdp_Parser; //Cdp_Parser=NULL;
- for (size_t Pos=0; Pos<Cdp_Data.size(); Pos++)
- delete Cdp_Data[Pos]; //Cdp_Data[Pos]=NULL;
- #endif //defined(MEDIAINFO_CDP_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- for (size_t Pos=0; Pos<AfdBarData_Data.size(); Pos++)
- delete AfdBarData_Data[Pos]; //AfdBarData_Data[Pos]=NULL;
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- delete AribStdB34B37_Parser; //AribStdB34B37_Parser=NULL;
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
-}
-
-//---------------------------------------------------------------------------
-void File_Ancillary::Streams_Finish()
-{
- #if defined(MEDIAINFO_CDP_YES)
- if (Cdp_Parser && !Cdp_Parser->Status[IsFinished] && Cdp_Parser->Status[IsAccepted])
- {
- Finish(Cdp_Parser);
- for (size_t StreamPos=0; StreamPos<Cdp_Parser->Count_Get(Stream_Text); StreamPos++)
- {
- Merge(*Cdp_Parser, Stream_Text, StreamPos, StreamPos);
- Ztring MuxingMode=Cdp_Parser->Retrieve(Stream_Text, StreamPos, "MuxingMode");
- Fill(Stream_Text, StreamPos, "MuxingMode", __T("Ancillary data / ")+MuxingMode, true);
- }
-
- Ztring LawRating=Cdp_Parser->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Cdp_Parser->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
- #endif //defined(MEDIAINFO_CDP_YES)
-
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (AribStdB34B37_Parser && !AribStdB34B37_Parser->Status[IsFinished] && AribStdB34B37_Parser->Status[IsAccepted])
- {
- Finish(AribStdB34B37_Parser);
- for (size_t StreamPos=0; StreamPos<AribStdB34B37_Parser->Count_Get(Stream_Text); StreamPos++)
- {
- Merge(*AribStdB34B37_Parser, Stream_Text, StreamPos, StreamPos);
- Ztring MuxingMode=AribStdB34B37_Parser->Retrieve(Stream_Text, StreamPos, "MuxingMode");
- Fill(Stream_Text, StreamPos, "MuxingMode", __T("Ancillary data / ")+MuxingMode, true);
- }
- }
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ancillary::Synchronize()
-{
- //Synchronizing
- while (Buffer_Offset+6<=Buffer_Size && ( Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+ 1]!=0xFF
- || Buffer[Buffer_Offset+ 2]!=0xFF))
- Buffer_Offset++;
-
- if (!Status[IsAccepted])
- {
- Accept();
-
- Fill(Stream_General, 0, General_Format, "Ancillary");
- }
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Ancillary::Synched_Test()
-{
- Synchronize(); //This is not always in synch directly, there may be some garbage
-
- //Must have enough buffer for having header
- if (Buffer_Offset+6>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (CC3(Buffer+Buffer_Offset)!=0x00FFFF)
- Synched=false;
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ancillary::Read_Buffer_Continue()
-{
- if (!Cdp_Data.empty() && AspectRatio && FrameRate)
- {
- ((File_Cdp*)Cdp_Parser)->AspectRatio=AspectRatio;
- for (size_t Pos=0; Pos<Cdp_Data.size(); Pos++)
- {
- if (Cdp_Parser->PTS_DTS_Needed)
- Cdp_Parser->FrameInfo.DTS=FrameInfo.DTS-(Cdp_Data.size()-Pos)*FrameInfo.DUR;
- Open_Buffer_Continue(Cdp_Parser, Cdp_Data[Pos]->Data, Cdp_Data[Pos]->Size);
- delete Cdp_Data[Pos]; //Cdp_Data[0]=NULL;
- }
- Cdp_Data.clear();
- }
-
- if (Element_Size==0)
- {
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- //Keeping only one, TODO: parse it without video stream
- for (size_t Pos=1; Pos<AfdBarData_Data.size(); Pos++)
- delete AfdBarData_Data[Pos]; //AfdBarData_Data[0]=NULL;
- if (!AfdBarData_Data.empty())
- AfdBarData_Data.resize(1);
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
-
- return;
- }
-
- if (!Status[IsAccepted] && !MustSynchronize)
- Accept();
-}
-
-//---------------------------------------------------------------------------
-void File_Ancillary::Read_Buffer_AfterParsing()
-{
- Buffer_Offset=Buffer_Size; //This is per frame
-
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
-}
-
-//---------------------------------------------------------------------------
-void File_Ancillary::Read_Buffer_Unsynched()
-{
- #if defined(MEDIAINFO_CDP_YES)
- for (size_t Pos=0; Pos<Cdp_Data.size(); Pos++)
- delete Cdp_Data[Pos]; //Cdp_Data[Pos]=NULL;
- Cdp_Data.clear();
- if (Cdp_Parser)
- Cdp_Parser->Open_Buffer_Unsynch();
- #endif //defined(MEDIAINFO_CDP_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- for (size_t Pos=0; Pos<AfdBarData_Data.size(); Pos++)
- delete AfdBarData_Data[Pos]; //AfdBarData_Data[Pos]=NULL;
- AfdBarData_Data.clear();
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (AribStdB34B37_Parser)
- AribStdB34B37_Parser->Open_Buffer_Unsynch();
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- AspectRatio=0;
-}
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ancillary::Header_Parse()
-{
- //Parsing
- if (MustSynchronize)
- {
- if (WithTenBit)
- {
- Skip_L2( "Ancillary data flag");
- Skip_L2( "Ancillary data flag");
- Skip_L2( "Ancillary data flag");
- }
- else
- {
- Skip_L1( "Ancillary data flag");
- Skip_L1( "Ancillary data flag");
- Skip_L1( "Ancillary data flag");
- }
- }
- Get_L1 (DataID, "Data ID");
- if (WithTenBit)
- Skip_L1( "Parity+Unused"); //even:1, odd:2
- Get_L1 (SecondaryDataID, "Secondary Data ID"); Param_Info1(Ancillary_DataID(DataID, SecondaryDataID));
- if (WithTenBit)
- Skip_L1( "Parity+Unused"); //even:1, odd:2
- Get_L1 (DataCount, "Data count");
- if (WithTenBit)
- Skip_L1( "Parity+Unused"); //even:1, odd:2
-
- //Test (in some container formats, Cheksum is present sometimes)
- bool WithChecksum_Temp=WithChecksum;
- if (!MustSynchronize && !WithChecksum && (size_t)((3+DataCount+1)*(WithTenBit?2:1))==Buffer_Size)
- WithChecksum_Temp=true;
-
- //Filling
- Header_Fill_Code((((int16u)DataID)<<8)|SecondaryDataID, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- Header_Fill_Size(((MustSynchronize?3:0)+3+DataCount+(WithChecksum_Temp?1:0))*(WithTenBit?2:1));
-}
-
-//---------------------------------------------------------------------------
-void File_Ancillary::Data_Parse()
-{
- Element_Info1(Ancillary_DataID(DataID, SecondaryDataID));
-
- //Buffer
- int8u* Payload=new int8u[DataCount];
- Element_Begin1("Raw data");
- for(int8u Pos=0; Pos<DataCount; Pos++)
- {
- Get_L1 (Payload[Pos], "Data");
- if (WithTenBit)
- Skip_L1( "Parity+Unused"); //even:1, odd:2
- }
-
- //Parsing
- if (WithChecksum)
- Skip_L1( "Checksum");
- if (WithTenBit)
- Skip_L1( "Parity+Unused"); //even:1, odd:2
- Element_End0();
-
- FILLING_BEGIN();
- switch (DataID)
- {
- case 0x08 :
- switch (SecondaryDataID)
- {
- case 0x0C : // (from SMPTE ST 353)
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "MPEG-2 Recoding Information");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 353");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x40 :
- switch (SecondaryDataID)
- {
- case 0x01 : // (from SMPTE ST 305)
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "SDTI");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 305");
- }
- break;
- case 0x02 : // (from SMPTE ST 348)
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "SDTI");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 348");
- }
- break;
- case 0x04 :
- case 0x05 :
- case 0x06 : // (from SMPTE ST 427)
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "Link Encryption Key");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 427");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x41 :
- switch (SecondaryDataID)
- {
- case 0x01 : //SMPTE ST 352
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "Payload identifier");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 352");
- }
- break;
- case 0x05 : //Bar Data (from SMPTE 2016-3), saving data for future use
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- {
- buffered_data* AfdBarData=new buffered_data;
- AfdBarData->Data=new int8u[(size_t)DataCount];
- std::memcpy(AfdBarData->Data, Payload, (size_t)DataCount);
- AfdBarData->Size=(size_t)DataCount;
- AfdBarData_Data.push_back(AfdBarData);
- }
- #endif //MEDIAINFO_AFDBARDATA_YES
- break;
- case 0x06 : //SMPTE ST 2016
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "Pan-Scan Information");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 2016");
- }
- break;
- case 0x07 : //SMPTE ST 2010
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "ANSI/SCTE 104 Messages");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 2010");
- }
- break;
- case 0x08 : //SMPTE ST 2031
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "DVB/SCTE VBI Data");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 2031");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x43 :
- switch (SecondaryDataID)
- {
- case 0x02 : //OP-47 WST, also RDD 8
- if (Count_Get(Stream_Text)==0)
- {
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_Format, "WST");
- Fill(Stream_Text, StreamPos_Last, Text_MuxingMode, "Ancillary data / OP-47 / SDP");
- }
- break;
- case 0x03 : //OP-47 Multipacket, also RDD 8
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / OP-47 / Multipacket");
- }
- break;
- case 0x05 : //RDD 18
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "Acquisition Metadata");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / RDD 18");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x44 :
- switch (SecondaryDataID)
- {
- case 0x44 : //SMPTE RP 223
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- switch (DataCount)
- {
- case 0x19: Fill(Stream_Other, StreamPos_Last, Other_Format, "ISAN"); break;
- case 0x20:
- case 0x40: Fill(Stream_Other, StreamPos_Last, Other_Format, "UMID"); break;
- }
-
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE RP 223");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x45 : // (from SMPTE 2020-1)
- switch (SecondaryDataID)
- {
- case 0x01 : //No association
- case 0x02 : //Channel pair 1/2
- case 0x03 : //Channel pair 3/4
- case 0x04 : //Channel pair 5/6
- case 0x05 : //Channel pair 7/8
- case 0x06 : //Channel pair 9/10
- case 0x07 : //Channel pair 11/12
- case 0x08 : //Channel pair 13/14
- case 0x09 : //Channel pair 15/16
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "Audio Metadata");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 2020");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x46 :
- switch (SecondaryDataID)
- {
- case 0x01 : // (from SMPTE ST 2051)
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "Two-Frame Marker");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 2051");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x50 :
- switch (SecondaryDataID)
- {
- case 0x01: //RDD 8
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "WSS"); //TODO: inject it in the video stream when a sample is available
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / RDD 8");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x5F : // (from ARIB STD-B37)
- if ((SecondaryDataID&0xF0)==0xD0) //Digital Closed Caption
- {
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (AribStdB34B37_Parser==NULL)
- {
- AribStdB34B37_Parser=new File_AribStdB24B37;
- ((File_AribStdB24B37*)AribStdB34B37_Parser)->IsAncillaryData=true;
- ((File_AribStdB24B37*)AribStdB34B37_Parser)->ParseCcis=true;
- Open_Buffer_Init(AribStdB34B37_Parser);
- }
- if (!AribStdB34B37_Parser->Status[IsFinished])
- {
- if (AribStdB34B37_Parser->PTS_DTS_Needed)
- AribStdB34B37_Parser->FrameInfo=FrameInfo;
- Open_Buffer_Continue(AribStdB34B37_Parser, Payload, (size_t)DataCount);
- }
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- }
- else
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- break;
- case 0x60 :
- switch (SecondaryDataID)
- {
- case 0x60 : // (from SMPTE RP 188 / SMPTE ST 12-2)
- // Time code ATC
- #if defined(MEDIAINFO_TIMECODE_YES)
- {
- File_Gxf_TimeCode Parser;
- Parser.IsAtc=true;
- Open_Buffer_Init(&Parser);
- Open_Buffer_Continue(&Parser, Payload, (size_t)DataCount);
-
- bool Exists=false;
- if (LineNumber!=(int32u)-1)
- for (size_t Pos=0; Pos<Count_Get(Stream_Other); Pos++)
- {
- if (__T("Line")+Ztring::ToZtring(LineNumber)==Retrieve(Stream_Other, Pos, Other_ID)
- && ((!LineNumber_IsSecondField && Retrieve(Stream_Other, Pos, "IsSecondField").empty()) || (LineNumber_IsSecondField && !Retrieve(Stream_Other, Pos, "IsSecondField").empty()))
- && Parser.Settings==Retrieve(Stream_Other, Pos, Other_TimeCode_Settings).To_UTF8())
- Exists=true;
- }
- else
- for (size_t Pos=0; Pos<Count_Get(Stream_Other); Pos++)
- {
- if (Parser.Settings==Retrieve(Stream_Other, Pos, Other_TimeCode_Settings).To_UTF8())
- Exists=true;
- }
- if (!Exists)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_Format, "SMPTE ATC");
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_FirstFrame, Parser.TimeCode_FirstFrame);
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_Settings, Parser.Settings);
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE RP 188");
- if (LineNumber!=(int32u)-1)
- Fill(Stream_Other, StreamPos_Last, Other_ID, __T("Line")+Ztring::ToZtring(LineNumber));
- if (LineNumber_IsSecondField)
- Fill(Stream_Other, StreamPos_Last, "IsSecondField", "Yes");
- }
- }
- #endif //defined(MEDIAINFO_TIMECODE_YES)
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x61 : //Defined data services (from SMPTE 334-1)
- switch (SecondaryDataID)
- {
- case 0x01 : //CDP (from SMPTE 334-1)
- #if defined(MEDIAINFO_CDP_YES)
- {
- if (Cdp_Parser==NULL)
- {
- Cdp_Parser=new File_Cdp;
- Open_Buffer_Init(Cdp_Parser);
- }
- Demux(Payload, (size_t)DataCount, ContentType_MainStream);
- if (InDecodingOrder || (!HasBFrames && AspectRatio && FrameRate))
- {
- if (!Cdp_Parser->Status[IsFinished])
- {
- if (Cdp_Parser->PTS_DTS_Needed)
- Cdp_Parser->FrameInfo.DTS=FrameInfo.DTS;
- ((File_Cdp*)Cdp_Parser)->AspectRatio=AspectRatio;
- Open_Buffer_Continue(Cdp_Parser, Payload, (size_t)DataCount);
- }
- }
- else
- {
- //Saving data for future use
- buffered_data* Cdp=new buffered_data;
- Cdp->Data=new int8u[(size_t)DataCount];
- std::memcpy(Cdp->Data, Payload, (size_t)DataCount);
- Cdp->Size=(size_t)DataCount;
- Cdp_Data.push_back(Cdp);
- }
- }
- #endif //MEDIAINFO_CDP_YES
- break;
- case 0x02 : //CEA-608 (from SMPTE 334-1)
- if (Count_Get(Stream_Text)==0)
- {
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_Format, "CEA-608");
- Fill(Stream_Text, StreamPos_Last, Text_MuxingMode, "Ancillary data / SMPTE 334");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x62 : //Variable-format data services (from SMPTE 334-1)
- switch (SecondaryDataID)
- {
- case 0x01 : //Program description (from SMPTE 334-1),
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "Program description");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 334");
- }
- break;
- case 0x02 : //Data broadcast (from SMPTE 334-1)
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "Data broadcast");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 334");
- }
- break;
- case 0x03 : //VBI data (from SMPTE 334-1)
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, "VBI data");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE ST 334");
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- case 0x64 :
- switch (SecondaryDataID)
- {
- case 0x64 : // (from SMPTE RP 196)
- // LTC in HANC space
- {
- bool Exists=false;
- if (LineNumber!=(int32u)-1)
- for (size_t Pos=0; Pos<Count_Get(Stream_Other); Pos++)
- {
- if (__T("Line")+Ztring::ToZtring(LineNumber)==Retrieve(Stream_Other, Pos, Other_ID))
- Exists=true;
- }
- else
- if (Count_Get(Stream_Other)!=0)
- Exists=true;
- if (!Exists)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_Format, "LTC");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE RP 196");
- if (LineNumber!=(int32u)-1)
- Fill(Stream_Other, StreamPos_Last, Other_ID, __T("Line")+Ztring::ToZtring(LineNumber));
- }
- }
- break;
- case 0x7F : // (from SMPTE RP 196)
- // VITC in HANC space
- {
- bool Exists=false;
- if (LineNumber!=(int32u)-1)
- for (size_t Pos=0; Pos<Count_Get(Stream_Other); Pos++)
- {
- if (__T("Line")+Ztring::ToZtring(LineNumber)==Retrieve(Stream_Other, Pos, Other_ID))
- Exists=true;
- }
- else
- if (Count_Get(Stream_Other)!=0)
- Exists=true;
- if (!Exists)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_Format, "VITC");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Ancillary data / SMPTE RP 196");
- if (LineNumber!=(int32u)-1)
- Fill(Stream_Other, StreamPos_Last, Other_ID, __T("Line")+Ztring::ToZtring(LineNumber));
- }
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- break;
- default :
- if (Count_Get(Stream_Other)==0)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Format, Ztring().From_CC1(DataID)+__T('-')+Ztring().From_CC1(SecondaryDataID));
- }
- }
- FILLING_END();
-
- delete[] Payload; //Payload=NULL
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_ANCILLARY_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ancillary.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ancillary.h
deleted file mode 100644
index dd8509824..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ancillary.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Ancillary data (SMPTE ST291)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_AncillaryH
-#define MediaInfo_AncillaryH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Ancillary
-//***************************************************************************
-
-class File_Ancillary : public File__Analyze
-{
-public :
- //In
- bool WithTenBit;
- bool WithChecksum;
- bool HasBFrames;
- bool InDecodingOrder;
- bool LineNumber_IsSecondField;
- float64 AspectRatio;
- float64 FrameRate;
- int32u LineNumber;
-
- //In/Out
- struct buffered_data
- {
- size_t Size;
- int8u* Data;
-
- buffered_data()
- {
- Size=0;
- Data=NULL;
- }
-
- ~buffered_data()
- {
- delete[] Data; //Data=NULL;
- }
- };
- #if defined(MEDIAINFO_CDP_YES)
- std::vector<buffered_data*> Cdp_Data;
- File__Analyze* Cdp_Parser;
- #endif //defined(MEDIAINFO_CDP_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- std::vector<buffered_data*> AfdBarData_Data;
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- File__Analyze* AribStdB34B37_Parser;
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
-
- //Constructor/Destructor
- File_Ancillary();
- ~File_Ancillary();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Global
- void Read_Buffer_Continue();
- void Read_Buffer_AfterParsing();
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Temp
- int8u DataID;
- int8u SecondaryDataID;
- int8u DataCount;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Bdmv.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Bdmv.cpp
deleted file mode 100644
index 4d74ea9be..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Bdmv.cpp
+++ /dev/null
@@ -1,1631 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_BDMV_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Bdmv.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/FileName.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// index (INDX) with title
-// --> MovieObject (MOBJ) with mobj
-// --> PlayList (MPLS)
-// --> PlayItem (MPLS) with Mark
-// --> ClipInfo (CLPI)
-// --> Clip (?) (CLPI)
-// --> Stream (M2TS)
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- const int32u CLPI=0x48444D56; //HDMV
- const int32u INDX=0x494E4458;
- const int32u MOBJ=0x4D4F424A;
- const int32u MPLS=0x4D504C53;
-}
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Clpi_Offsets[]=
-{
- "ClipInfo",
- "SequenceInfo",
- "ProgramInfo",
- "CPI",
- "ClipMark",
- "ExtensionData",
- "Reserved",
- "Reserved",
- "Reserved",
-};
-
-//---------------------------------------------------------------------------
-const char* Indx_Offsets[]=
-{
- "AppInfoBDMV",
- "Indexes",
- "ExtensionData",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
-};
-
-//---------------------------------------------------------------------------
-const char* Mobj_Offsets[]=
-{
- "MovieObjects",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpls_Offsets[]=
-{
- "AppInfoPlayList",
- "PlayList",
- "PlayListMarks",
- "ExtensionData",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
- "Reserved",
-};
-
-//---------------------------------------------------------------------------
-const char* Bdmv_Type(int32u Type_Indicator, size_t Start_Adress_Pos)
-{
- switch (Type_Indicator)
- {
- case Elements::CLPI : return Clpi_Offsets[Start_Adress_Pos];
- case Elements::INDX : return Indx_Offsets[Start_Adress_Pos];
- case Elements::MOBJ : return Mobj_Offsets[Start_Adress_Pos];
- case Elements::MPLS : return Mpls_Offsets[Start_Adress_Pos];
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Clpi_Format(int8u StreamType)
-{
- switch (StreamType)
- {
- case 0x01 : return "MPEG-1 Video";
- case 0x02 : return "MPEG-2 Video";
- case 0x03 : return "MPEG-1 Audio";
- case 0x04 : return "MPEG-2 Audio";
- case 0x1B : return "AVC";
- case 0x20 : return "AVC";
- case 0x80 : return "PCM";
- case 0x81 : return "AC-3";
- case 0x82 : return "DTS";
- case 0x83 : return "TrueHD";
- case 0x84 : return "E-AC-3";
- case 0x85 : return "DTS";
- case 0x86 : return "DTS";
- case 0x90 : return "PGS";
- case 0x91 : return "Interactive";
- case 0x92 : return "Subtitle";
- case 0xA1 : return "E-AC-3"; //Secondary
- case 0xA2 : return "DTS"; //Secondary
- case 0xEA : return "VC-1";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Clpi_Format_Profile(int8u StreamType)
-{
- switch (StreamType)
- {
- case 0x85 : return "HD";
- case 0x86 : return "MA";
- case 0xA2 : return "HD"; //Secondary
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-stream_t Clpi_Type(int8u StreamType)
-{
- switch (StreamType)
- {
- case 0x01 : return Stream_Video;
- case 0x02 : return Stream_Video;
- case 0x03 : return Stream_Audio;
- case 0x04 : return Stream_Audio;
- case 0x1B : return Stream_Video;
- case 0x20 : return Stream_Video;
- case 0x80 : return Stream_Audio;
- case 0x81 : return Stream_Audio;
- case 0x82 : return Stream_Audio;
- case 0x83 : return Stream_Audio;
- case 0x84 : return Stream_Audio;
- case 0x85 : return Stream_Audio;
- case 0x86 : return Stream_Audio;
- case 0x90 : return Stream_Text;
- case 0x91 : return Stream_Max;
- case 0x92 : return Stream_Text;
- case 0xA1 : return Stream_Audio;
- case 0xA2 : return Stream_Audio;
- case 0xEA : return Stream_Video;
- default : return Stream_Max;
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Clpi_Video_Format[]=
-{
- "",
- "480i",
- "576i",
- "480p",
- "1080i",
- "720p",
- "1080p",
- "576p",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Clpi_Video_Interlacement[]=
-{
- "",
- "Interlaced",
- "Interlaced",
- "PPF",
- "Interlaced",
- "PPF",
- "PPF",
- "PPF",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Clpi_Video_Standard[]=
-{
- "",
- "NTSC",
- "PAL",
- "NTSC",
- "",
- "",
- "",
- "PAL",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-int16u Clpi_Video_Width[]=
-{
- 0,
- 720,
- 720,
- 720,
- 1920,
- 1280,
- 1920,
- 720,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-int16u Clpi_Video_Height[]=
-{
- 0,
- 480,
- 576,
- 480,
- 1080,
- 720,
- 1080,
- 576,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-float32 Clpi_Video_FrameRate[]=
-{
- (float32) 0.000,
- (float32)23.976,
- (float32)24.000,
- (float32)25.000,
- (float32)29.970,
- (float32) 0.000,
- (float32)50.000,
- (float32)59.940,
- (float32) 0.000,
- (float32) 0.000,
- (float32) 0.000,
- (float32) 0.000,
- (float32) 0.000,
- (float32) 0.000,
- (float32) 0.000,
- (float32) 0.000,
-};
-
-//---------------------------------------------------------------------------
-float32 Clpi_Video_AspectRatio[]=
-{
- (float32)0.000,
- (float32)0.000,
- (float32)1.333,
- (float32)1.778,
- (float32)2.210,
- (float32)0.000,
- (float32)0.000,
- (float32)0.000,
- (float32)0.000,
- (float32)0.000,
- (float32)0.000,
- (float32)0.000,
- (float32)0.000,
- (float32)0.000,
- (float32)0.000,
- (float32)0.000,
-};
-
-//---------------------------------------------------------------------------
-int8u Clpi_Audio_Channels[]=
-{
- 0,
- 1,
- 0,
- 2,
- 0,
- 0,
- 0, //Multi 6-8
- 0,
- 0,
- 0,
- 0,
- 0,
- 0, //Combo
- 0,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-int32u Clpi_Audio_SamplingRate[]=
-{
- 0,
- 48000,
- 0,
- 0,
- 96000,
- 192000,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 48000, //192000?
- 48000, // 96000?
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-const char* Indx_object_type[]=
-{
- "",
- "HDMV",
- "BD-J",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Indx_playback_type[4][4]=
-{
- {"", "", "", "", },
- {"Movie", "Interactive", "", "", },
- {"", "", "Movie", "Interactive", },
- {"", "", "", "", },
-};
-
-//---------------------------------------------------------------------------
-const char* Indx_title_search[]=
-{
- "Permitted",
- "Prohibited1",
- "Prohibited2",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpls_playback_type[]=
-{
- "Sequential",
- "Random",
- "Shuffle",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpls_PlayListMarks_Mark_type(int8u type)
-{
- switch (type)
- {
- case 1 : return "entry-mark";
- case 2 : return "link point";
- default: return "";
- }
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring Bdmv_Decimal_Hexa(int64u Number)
-{
- Ztring Temp;
- Temp.From_Number(Number);
- Temp+=__T(" (0x");
- Temp+=Ztring::ToZtring(Number, 16);
- Temp+=__T(")");
- return Temp;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Bdmv::FileHeader_Begin()
-{
- size_t BDMV_Pos=File_Name.find(Ztring(1, PathSeparator)+__T("BDMV"));
- if (BDMV_Pos!=string::npos && BDMV_Pos+5==File_Name.size()) //Blu-ray directory
- return true;
-
- //Element_Size
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- switch (CC4(Buffer))
- {
- case Elements::CLPI :
- case Elements::INDX :
- case Elements::MOBJ :
- case Elements::MPLS :
- break;
- default : Reject("Blu-ray");
- return false;
- }
-
- //Init
- Mpls_PlayList_IsParsed=false;
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Read_Buffer_Continue()
-{
- size_t BDMV_Pos=File_Name.find(Ztring(1, PathSeparator)+__T("BDMV"));
- if (BDMV_Pos!=string::npos && BDMV_Pos+5==File_Name.size()) //Blu-ray directory
- {
- BDMV();
- return;
- }
-
- if (Buffer_Size<File_Size)
- {
- Element_WaitForMoreData();
- return; //Wait for more data
- }
-
- //Parsing
- int32u type_indicator;
- int16u version_numberH;
- Element_Begin1("Header");
- Get_C4 (type_indicator, "type_indicator");
- Data_Accept("Blu-ray");
- Get_C2 (version_numberH, "version_number (High)");
- Skip_C2( "version_number (Low)");
- Element_End0();
-
- FILLING_BEGIN();
- Accept("BDMV");
- switch (type_indicator)
- {
- case Elements::CLPI : Fill(Stream_General, 0, General_Format, "Blu-ray Clip info"); break;
- case Elements::INDX : Fill(Stream_General, 0, General_Format, "Blu-ray Index"); break;
- case Elements::MOBJ : Fill(Stream_General, 0, General_Format, "Blu-ray Movie object"); break;
- case Elements::MPLS : Fill(Stream_General, 0, General_Format, "Blu-ray Playlist"); break;
- default : ;
- }
- FILLING_END();
-
- if (version_numberH==0x3031 || version_numberH==0x3032) //Version 1 or 2
- {
- Element_Begin1("Offsets");
- Types[0x28]=0; //First object
- for (size_t Start_Adress_Pos=1; Start_Adress_Pos<9; Start_Adress_Pos++)
- {
- int32u Start_Adress;
- Get_B4 (Start_Adress, Bdmv_Type(type_indicator, Start_Adress_Pos));
- Types[Start_Adress]=Start_Adress_Pos;
- }
- Element_End0();
-
- for (std::map<int32u, size_t>::iterator Type=Types.begin(); Type!=Types.end(); ++Type)
- {
- if (Type->first>=Element_Offset) //If valid
- {
- if (Type->first>Element_Offset)
- Skip_XX(Type->first-Element_Offset, "unknown");
-
- Element_Begin1(Bdmv_Type(type_indicator, Type->second));
- int32u length;
- Get_B4 (length, "length");
- int64u End=Element_Offset+length;
- switch (type_indicator)
- {
- case Elements::CLPI :
- switch(Type->second)
- {
- case 2 : Clpi_ProgramInfo(); break;
- case 5 : Clpi_ExtensionData(); break;
- default: ;
- }
- break;
- case Elements::INDX :
- switch(Type->second)
- {
- case 0 : Indx_AppInfoBDMV(); break;
- case 1 : Indx_Indexes(); break;
- case 2 : Indx_ExtensionData(); break;
- default: ;
- }
- break;
- case Elements::MOBJ :
- switch(Type->second)
- {
- case 0 : Mobj_MovieObjects(); break;
- case 1 : Mobj_ExtensionData(); break;
- default: ;
- }
- break;
- case Elements::MPLS :
- switch(Type->second)
- {
- case 0 : Mpls_AppInfoPlayList(); break;
- case 1 : Mpls_PlayList(); break;
- case 2 : Mpls_PlayListMarks (); break;
- case 3 : Mpls_ExtensionData (); break;
- default: ;
- }
- break;
- default : ;
- }
- if (End>Element_Offset)
- Skip_XX(End-Element_Offset, "Unknown");
- Element_End0();
- }
- }
-
- if (Element_Size>Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
- else
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Bdmv::BDMV()
-{
- Accept("BDMV");
-
- //Searching the longest playlist
- ZtringList List=Dir::GetAllFileNames(File_Name+PathSeparator+__T("PLAYLIST")+PathSeparator+__T("*.mpls"), Dir::Include_Files);
- std::vector<MediaInfo_Internal*> MIs;
- MIs.resize(List.size());
- size_t MaxDuration_Pos=(size_t)-1;
- int64u MaxDuration=0;
- if (Config->File_Bdmv_ParseTargetedFile_Get())
- {
- for (size_t Pos=0; Pos<MIs.size(); Pos++)
- {
- MIs[Pos]=new MediaInfo_Internal();
- MIs[Pos]->Option(__T("File_Bdmv_ParseTargetedFile"), __T("0"));
- MIs[Pos]->Open(List[Pos]);
- int64u Duration=Ztring(MIs[Pos]->Get(Stream_General, 0, General_Duration)).To_int64u();
- if (Duration>MaxDuration)
- {
- MaxDuration=Duration;
- MaxDuration_Pos=Pos;
- }
- }
- }
-
- if (MaxDuration_Pos!=(size_t)-1)
- {
- //Merging
- MediaInfo_Internal MI;
- MI.Open(List[MaxDuration_Pos]); //Open it again for having the M2TS part
- Merge(MI);
-
- Clear(Stream_General, 0, General_Format);
- Clear(Stream_General, 0, General_Format_String);
- Clear(Stream_General, 0, General_Format_Extensions);
- Clear(Stream_General, 0, General_Format_Info);
- Clear(Stream_General, 0, General_Codec);
- Clear(Stream_General, 0, General_Codec_String);
- Clear(Stream_General, 0, General_Codec_Extensions);
- Clear(Stream_General, 0, General_FileSize);
- Clear(Stream_Video, 0, Video_ScanType_String);
- Clear(Stream_Video, 0, Video_Bits__Pixel_Frame_);
- }
-
- for (size_t Pos=0; Pos<MIs.size(); Pos++)
- delete MIs[Pos]; //MIs[Pos]=NULL;
- MIs.clear();
-
- //Detecting some directories
- if (Dir::Exists(File_Name+PathSeparator+__T("BDSVM"))
- || Dir::Exists(File_Name+PathSeparator+__T("SLYVM"))
- || Dir::Exists(File_Name+PathSeparator+__T("ANYVM")))
- Fill(Stream_General, 0, General_Format_Profile, "BD+");
- if (Dir::Exists(File_Name+PathSeparator+__T("BDJO")) && !Dir::GetAllFileNames(File_Name+PathSeparator+__T("BDJO")).empty())
- Fill(Stream_General, 0, General_Format_Profile, "BD-Java");
-
- //Filling
- File_Name.resize(File_Name.size()-5); //Removing "/BDMV"
- Fill(Stream_General, 0, General_Format, "Blu-ray movie", Unlimited, true, true);
- Fill(Stream_General, 0, General_CompleteName, File_Name, true);
- Fill(Stream_General, 0, General_FolderName, FileName::Path_Get(File_Name), true);
- if (FileName::Extension_Get(File_Name).empty())
- Fill(Stream_General, 0, General_FileName, FileName::Name_Get(File_Name), true);
- else
- Fill(Stream_General, 0, General_FileName, FileName::Name_Get(File_Name)+__T('.')+FileName::Extension_Get(File_Name), true);
- File_Name.clear();
-
- Finish("BDMV");
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Clpi_ProgramInfo()
-{
- //Retrieving data from the M2TS file
- std::map<int16u, stream_t> PIDs_StreamKind;
- std::map<int16u, size_t> PIDs_StreamPos;
- if (Config->File_Bdmv_ParseTargetedFile_Get() && File_Name.size()>10+1+7)
- {
- Ztring file=File_Name.substr(File_Name.size()-10, 5);
- Ztring M2TS_File=File_Name;
- M2TS_File.resize(M2TS_File.size()-(10+1+7));
- M2TS_File+=__T("STREAM");
- M2TS_File+=PathSeparator;
- M2TS_File+=file;
- M2TS_File+=__T(".m2ts");
-
- MediaInfo_Internal MI;
- MI.Option(__T("File_Bdmv_ParseTargetedFile"), __T("0"));
- if (MI.Open(M2TS_File))
- {
- Merge(MI);
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- Fill((stream_t)StreamKind, StreamPos, "Source", file+__T(".m2ts"));
- }
-
- //Retrieving PID mapping
- for (size_t StreamKind=(size_t)Stream_General+1; StreamKind<(size_t)Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- {
- int16u PID=Retrieve((stream_t)StreamKind, StreamPos, General_ID).To_int16u();
- PIDs_StreamKind[PID]=(stream_t)StreamKind;
- PIDs_StreamPos[PID]=StreamPos;
- }
- }
-
- //Parsing
- int8u number_of_program_sequences;
- Skip_B1( "Unknown");
- Get_B1 (number_of_program_sequences, "number_of_program_sequences");
- for (int8u program_sequence=0; program_sequence<number_of_program_sequences; program_sequence++)
- {
- int8u number_of_streams_in_ps;
- Skip_B4( "Unknown");
- Skip_B2( "program_map_PID");
- Get_B1 (number_of_streams_in_ps, "number_of_streams_in_ps");
- Skip_B1( "Unknown");
- for (int16u Pos=0; Pos<number_of_streams_in_ps; Pos++)
- {
- Element_Begin1("Stream");
- int16u stream_PID;
- int8u Stream_Length;
- Get_B2 (stream_PID, "stream_PID");
- Get_B1 (Stream_Length, "Length");
- int64u Stream_End=Element_Offset+Stream_Length;
- StreamKind_Last=Stream_Max;
- std::map<int16u, stream_t>::iterator PID_StreamKind=PIDs_StreamKind.find(stream_PID);
- if (PID_StreamKind!=PIDs_StreamKind.end())
- {
- StreamKind_Last=PID_StreamKind->second;
- StreamPos_Last=PIDs_StreamPos.find(stream_PID)->second;
- }
- Get_B1 (stream_type, "Stream type"); Param_Info1(Clpi_Format(stream_type)); Element_Info1(Clpi_Format(stream_type));
- switch (Clpi_Type(stream_type))
- {
- case Stream_Video : StreamCodingInfo_Video(); break;
- case Stream_Audio : StreamCodingInfo_Audio(); break;
- case Stream_Text : StreamCodingInfo_Text() ; break;
- default : ;
- }
-
- if (Stream_End-Element_Offset)
- Skip_XX(Stream_End-Element_Offset, "Unknown");
- Element_End0();
-
- FILLING_BEGIN();
- if (StreamKind_Last!=Stream_Max)
- {
- Fill(StreamKind_Last, StreamPos_Last, General_ID, stream_PID, 10, true);
- Fill(StreamKind_Last, StreamPos_Last, General_ID_String, Bdmv_Decimal_Hexa(stream_PID), true);
- }
- FILLING_END();
- }
- }
-}
-
-struct entry
-{
- int16u ID1;
- int16u ID2;
- int32u Length;
-};
-typedef std::map<int32u, entry> entries; //Key is the start address
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Clpi_ExtensionData()
-{
- entries Entries; //Key is the start address
-
- int32u Base_Pos=(int32u)Element_Offset-4;
-
- int8u number_of_ext_data_entries;
- Skip_B4( "Unknown");
- Skip_B3( "Unknown");
- Element_Begin1("Offsets");
- Get_B1 (number_of_ext_data_entries, "number_of_ext_data_entries");
- for (size_t Start_Adress_Pos=0; Start_Adress_Pos<number_of_ext_data_entries; Start_Adress_Pos++)
- {
- int32u Start_Adress, Length;
- int16u ID1, ID2;
- Get_B2 (ID1, "ID1");
- Get_B2 (ID2, "ID2");
- Get_B4 (Start_Adress, "Start_Adress");
- Get_B4 (Length, "Length");
- Entries[Base_Pos+Start_Adress].ID1=ID1;
- Entries[Base_Pos+Start_Adress].ID2=ID2;
- Entries[Base_Pos+Start_Adress].Length=Length;
- }
- Element_End0();
-
- for (entries::iterator Entry=Entries.begin(); Entry!=Entries.end(); ++Entry)
- {
- if (Entry->first>=Element_Offset) //If valid
- {
- if (Entry->first>Element_Offset)
- Skip_XX(Entry->first-Element_Offset, "unknown");
-
- Element_Begin1("Entry");
- int32u length;
- Get_B4 (length, "length");
- int64u End=Element_Offset+length;
- switch (Entry->second.ID1)
- {
- case 0x0002 :
- switch(Entry->second.ID2)
- {
- case 0x0005 : Clpi_ProgramInfo(); break;
- default: ;
- }
- break;
- default : ;
- }
- if (End>Element_Offset)
- Skip_XX(End-Element_Offset, "Unknown");
- Element_End0();
- }
- }
-
- if (Element_Size>Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Indx_AppInfoBDMV()
-{
- //Parsing
- Skip_B2( "reserved");
- Skip_Local(32, "user_data");
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Indx_Indexes()
-{
- //Parsing
- int16u number_of_Titles;
- Element_Begin1("FirstPlayback");
- BS_Begin();
- int8u FirstPlayback_object_type;
- Get_S1 ( 2, FirstPlayback_object_type, "object_type"); Param_Info1(Indx_object_type[FirstPlayback_object_type]);
- Skip_S4(30, "reserved");
- BS_End();
- Indx_Indexes_Index(FirstPlayback_object_type);
- Element_End0();
- Element_Begin1("TopMenu");
- BS_Begin();
- int8u TopMenu_object_type;
- Get_S1 ( 2, TopMenu_object_type, "object_type"); Param_Info1(Indx_object_type[TopMenu_object_type]);
- Skip_S4(30, "reserved");
- BS_End();
- Indx_Indexes_Index(TopMenu_object_type);
- Element_End0();
- Get_B2 (number_of_Titles, "number_of_Titles");
- for (int16u Pos=0; Pos<number_of_Titles; Pos++)
- {
- Element_Begin1("Title");
- BS_Begin();
- int8u Title_object_type;
- Get_S1 ( 2, Title_object_type, "object_type"); Param_Info1(Indx_object_type[Title_object_type]);
- Info_S1( 2, Title_title_search, "title_search"); Param_Info1(Indx_title_search[Title_title_search]);
- Skip_S4(28, "reserved");
- BS_End();
- Indx_Indexes_Index(Title_object_type);
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Indx_Indexes_Index(int8u object_type)
-{
- BS_Begin();
- Info_S1( 2, playback_type, "playback_type"); Param_Info1(Indx_playback_type[object_type][playback_type]);
- Skip_S2(14, "reserved");
- BS_End();
- switch (object_type)
- {
- case 1 : //HDMV
- {
- Info_B2(id_ref, "id_ref"); Element_Info1(id_ref);
- Skip_B4( "reserved");
- }
- break;
- case 2 : //BD-J
- {
- Info_Local(5, id_ref, "id_ref"); Element_Info1(id_ref);
- Skip_B1( "reserved");
- }
- break;
- default:
- Skip_XX(6, "unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Indx_ExtensionData()
-{
- //Parsing
- std::map<int32u, int32u> exts; //Key is the start address, value is length
- int64u Base_Offset=Element_Offset-4; //Size is included
- int8u number_of_ext_data_entries;
- Skip_B4( "data_block_start_adress");
- Skip_B3( "reserved");
- Get_B1 (number_of_ext_data_entries, "number_of_ext_data_entries");
- for (int16u Pos=0; Pos<number_of_ext_data_entries; Pos++)
- {
- Element_Begin1("ext_data_entry");
- int32u ext_data_start_adress, ext_data_length;
- Skip_B2( "ID1 (AVCHD)");
- Skip_B2( "ID2 (Version)");
- Get_B4 (ext_data_start_adress, "ext_data_start_adress");
- Get_B4 (ext_data_length, "ext_data_length");
- Element_End0();
- exts[ext_data_start_adress]=ext_data_length;
- }
-
- for (std::map<int32u, int32u>::iterator ext=exts.begin(); ext!=exts.end(); ++ext)
- {
- if (Base_Offset+ext->first>=Element_Offset)
- {
- if (Base_Offset+ext->first>Element_Offset)
- Skip_XX(ext->first-Element_Offset, "Unknown");
-
- Element_Begin0();
- int64u End=Element_Offset+ext->second;
-
- int32u type_indicator;
- Get_C4(type_indicator, "type_indicator"); Element_Info1(Ztring().From_CC4(type_indicator));
- switch (type_indicator)
- {
- case 0x49444558 : Indx_ExtensionData_IDEX(); break;
- default : Element_Name("Unknown");
- Skip_XX(ext->second-4, "Unknown");
- }
- if (End>Element_Offset)
- Skip_XX(End-Element_Offset, "Unknown");
- Element_End0();
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Indx_ExtensionData_IDEX()
-{
- Element_Name("IndexExtension");
-
- //Parsing
- int64u Base_Offset=Element_Offset-4; //Size is included
- int32u TableOfPlayLists_start_adress, MakersPrivateData_start_adress;
- Skip_B4( "reserved");
- Get_B4 (TableOfPlayLists_start_adress, "TableOfPlayLists_start_adress");
- Get_B4 (MakersPrivateData_start_adress, "MakersPrivateData_start_adress");
- Skip_XX(24, "reserved");
-
- Indx_ExtensionData_IDEX_UIAppInfoAVCHD();
- if (TableOfPlayLists_start_adress)
- {
- if (Base_Offset+TableOfPlayLists_start_adress>Element_Offset)
- Skip_XX(Base_Offset+TableOfPlayLists_start_adress-Element_Offset, "Unknown");
- Indx_ExtensionData_IDEX_TableOfPlayLists();
- }
- if (MakersPrivateData_start_adress)
- {
- if (Base_Offset+MakersPrivateData_start_adress>Element_Offset)
- Skip_XX(Base_Offset+MakersPrivateData_start_adress-Element_Offset, "Unknown");
- Indx_ExtensionData_IDEX_MakersPrivateData();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Indx_ExtensionData_IDEX_UIAppInfoAVCHD()
-{
- Element_Begin1("UIAppInfoAVCHD");
-
- //Parsing
- int32u length, length2;
- int8u AVCHD_name_length;
- Get_B4 (length, "length");
- Skip_B2( "maker_ID");
- Skip_B2( "maker_model_code");
- Skip_XX(32, "maker_private_area");
- BS_Begin();
- Skip_BS(15, "reserved");
- Skip_SB( "AVCHD_write_protect_flag");
- BS_End();
- Skip_B2( "ref_to_menu_thumbail_index");
- Skip_B1( "time_zone");
- Skip_XX(7, "record_time_and_date");
- Skip_B1( "reserved");
- Skip_B1( "AVCHD_character_set");
- Get_B1 (AVCHD_name_length, "AVCHD_name_length");
- Skip_Local(AVCHD_name_length, "AVCHD_name");
- Skip_XX(255-AVCHD_name_length, "AVCHD_name (junk)");
- Element_Begin1("additional data");
- Get_B4 (length2, "length2");
- Skip_XX(length2, "reserved");
- Element_End0();
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Indx_ExtensionData_IDEX_TableOfPlayLists()
-{
- Element_Begin1("TableOfPlayLists");
-
- //Parsing
- int32u length;
- Get_B4 (length, "length");
- Skip_XX(length, "unknown");
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Indx_ExtensionData_IDEX_MakersPrivateData()
-{
- Element_Begin1("MakersPrivateData");
-
- //Parsing
- int64u Base_Offset=Element_Offset-4; //Size is included
- int32u length, datablock_start_adress;
- int8u number_of_maker_entries;
- Get_B4 (length, "length");
- Get_B4 (datablock_start_adress, "datablock_start_adress");
- Skip_XX(24, "reserved");
- Get_B1 (number_of_maker_entries, "number_of_maker_entries");
- for (int8u Pos=0; Pos<number_of_maker_entries; Pos++)
- {
- Element_Begin1("maker_entry");
- Skip_B2( "maker_ID");
- Skip_B2( "maker_model_code");
- Skip_B4( "mpd_start_adress");
- Skip_B4( "mpd_length");
- Element_End0();
- }
-
- if (datablock_start_adress)
- {
- if (Base_Offset+datablock_start_adress>Element_Offset)
- Skip_XX(Base_Offset+datablock_start_adress-Element_Offset, "Unknown");
- Skip_XX(length-datablock_start_adress, "Unknown");
- }
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mobj_MovieObjects()
-{
- //Parsing
- int16u number_of_mobjs;
- Skip_B4( "reserved");
- Get_B2 (number_of_mobjs, "number_of_mobj");
- for (int16u mobjs_Pos=0; mobjs_Pos<number_of_mobjs; mobjs_Pos++)
- {
- Element_Begin1("mobj");
- int16u number_of_navigation_commands;
- BS_Begin();
- Info_SB(resume, "resume"); Param_Info1(resume?"suspend":"discard");
- Info_SB(menu_call, "menu_call"); Param_Info1(menu_call?"enable":"disable");
- Info_SB(title_search, "title_search"); Param_Info1(title_search?"enable":"disable");
- Skip_BS(13, "reserved");
- BS_End();
- Get_B2 (number_of_navigation_commands, "number_of_navigation_commands");
- for (int16u navigation_command_Pos=0; navigation_command_Pos<number_of_navigation_commands; navigation_command_Pos++)
- {
- Element_Begin1("navigation_command");
- Skip_B4( "opcode");
- Skip_B4( "destination");
- Skip_B4( "source");
- Element_End0();
- }
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mobj_ExtensionData()
-{
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_AppInfoPlayList()
-{
- //Parsing
- Skip_B1( "unknown");
- BS_Begin();
- Skip_S1(6, "unknown");
- Info_S2(2, playback_type, "playback_type"); Param_Info1(Mpls_playback_type[playback_type]);
- BS_End();
- Skip_B2( "playback_count");
- Skip_B4( "user_operation_mask_code 1");
- Skip_B4( "user_operation_mask_code 2");
- BS_Begin();
- Skip_SB( "random access");
- Skip_SB( "audio mix");
- Skip_SB( "bypass mixer");
- Skip_S2(13, "reserved");
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_PlayList()
-{
- //Parsing
- Mpls_PlayList_Duration=0;
- int16u number_of_PlayItems, number_of_SubPaths;
- Skip_B2( "reserved");
- Get_B2 (number_of_PlayItems, "number_of_PlayItems");
- Get_B2 (number_of_SubPaths, "number_of_SubPaths");
- for (int16u Pos=0; Pos<number_of_PlayItems; Pos++)
- Mpls_PlayList_PlayItem();
-
- if (Mpls_PlayList_Duration)
- Fill(Stream_General, 0, General_Duration, Mpls_PlayList_Duration/45);
-
- for (int16u SubPath_Pos=0; SubPath_Pos<number_of_SubPaths; SubPath_Pos++)
- {
- Element_Begin1("SubPath");
- int32u SubPath_length;
- int16u number_of_SubPlayItems;
- int8u SubPath_type;
- Get_B4 (SubPath_length, "length");
- int64u SubPath_End=Element_Offset+SubPath_length;
- Skip_B1( "Unknown");
- Get_B1 (SubPath_type, "SubPath_type");
- Skip_B2( "repeat");
- Get_B2 (number_of_SubPlayItems, "number_of_SubPlayItems");
- for (int16u Pos=0; Pos<number_of_SubPlayItems; Pos++)
- Mpls_PlayList_SubPlayItem(SubPath_type, Pos);
-
- if (SubPath_End>Element_Offset)
- Skip_XX(SubPath_End-Element_Offset, "unknown");
- Element_End0();
- }
-
- FILLING_BEGIN();
- if (!Mpls_PlayList_IsParsed)
- {
- Mpls_PlayList_number_of_SubPaths=number_of_SubPaths;
- Mpls_PlayList_IsParsed=true;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_PlayList_PlayItem()
-{
- Element_Begin1("PlayItem");
- Ztring Clip_Information_file_name;
- int32u Time_In, Time_Out;
- int16u length;
- Get_B2 (length, "length");
- int64u End=Element_Offset+length;
- Get_Local (5, Clip_Information_file_name, "Clip_Information_file_name"); Element_Info1(Clip_Information_file_name);
- Skip_Local(4, "Clip_codec_identifier");
- Skip_B2( "unknown");
- Skip_B1( "Unknown");
- Get_B4 (Time_In, "Time (In)"); Param_Info1((float32)Time_In/45000);
- Get_B4 (Time_Out, "Time (Out)"); Param_Info1((float32)Time_Out/45000);
- Skip_B4( "UO1");
- Skip_B4( "UO2");
- Skip_B4( "An?");
-
- Mpls_PlayList_PlayItem_Duration=Time_Out-Time_In;
- if (Time_Out>Time_In)
- Mpls_PlayList_Duration+=Mpls_PlayList_PlayItem_Duration;
-
- std::vector<size_t> StreamCount_Before;
- for (size_t StreamKind=Stream_General; StreamKind<Stream_Max; StreamKind++)
- StreamCount_Before.push_back(Count_Get((stream_t)StreamKind));
-
- Mpls_PlayList_PlayItem_STN_table();
-
- if (Clip_Information_file_names.find(Clip_Information_file_name)==Clip_Information_file_names.end() && File_Name.size()>10+1+8)
- {
- Ztring CLPI_File=File_Name;
- CLPI_File.resize(CLPI_File.size()-(10+1+8));
- CLPI_File+=__T("CLIPINF");
- CLPI_File+=PathSeparator;
- CLPI_File+=Clip_Information_file_name;
- CLPI_File+=__T(".clpi");
-
- MediaInfo_Internal MI;
- MI.Option(__T("File_Bdmv_ParseTargetedFile"), Config->File_Bdmv_ParseTargetedFile_Get()?__T("1"):__T("0"));
- if (MI.Open(CLPI_File))
- {
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<MI.Count_Get((stream_t)StreamKind); StreamPos++)
- {
- while (StreamCount_Before[StreamKind]+StreamPos>=Count_Get((stream_t)StreamKind))
- Stream_Prepare((stream_t)StreamKind);
- Merge(MI, (stream_t)StreamKind, StreamPos, StreamCount_Before[StreamKind]+StreamPos);
- }
- }
-
- Clip_Information_file_names.insert(Clip_Information_file_name);
- }
-
- if (End>Element_Offset)
- Skip_XX(End-Element_Offset, "unknown");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_PlayList_PlayItem_STN_table()
-{
- Element_Begin1("STN");
-
- int16u length;
- Get_B2 (length, "length");
- int64u End=Element_Offset+length;
- if (End>Element_Size)
- {
- Skip_XX(Element_Size-Element_Offset, "Problem");
- return;
- }
- Skip_B2( "unknown");
- Skip_B1( "Vi");
- Skip_B1( "Au");
- Skip_B1( "PG");
- Skip_B1( "IG");
- Skip_B1( "sV");
- Skip_B1( "sA");
- Skip_B1( "PIP");
- Skip_B1( "unknown");
- Skip_B1( "unknown");
- Skip_B1( "unknown");
- Skip_B1( "unknown");
- Skip_B1( "unknown");
-
- while (Element_Offset+16<=End)
- {
- Element_Begin0();
- Ztring language;
- int16u mPID;
- int8u IDs_length;
- Skip_B1( "type");
- Skip_B1( "unknown");
- Get_B2 (mPID, "mPID"); Element_Name(Ztring::ToZtring(mPID, 16));
- Skip_B2( "SPid");
- Skip_B2( "sCid");
- Skip_B2( "sPID");
- Get_B1 (IDs_length, "length");
- int64u IDs_End=Element_Offset+IDs_length;
- Get_B1 (stream_type, "stream_type"); Param_Info1(Clpi_Format(stream_type)); Element_Info1(Clpi_Format(stream_type));
- switch (Clpi_Type(stream_type))
- {
- case Stream_Video : Mpls_PlayList_PlayItem_STN_table_Video(); break;
- case Stream_Audio : Mpls_PlayList_PlayItem_STN_table_Audio(); break;
- case Stream_Text : Mpls_PlayList_PlayItem_STN_table_Text() ; break;
- default : StreamKind_Last=Stream_Max;
- }
- Get_Local(3, language, "language"); Element_Info1(language);
-
- if (IDs_End-Element_Offset)
- Skip_XX(IDs_End-Element_Offset, "unknown");
- Element_End0();
-
- FILLING_BEGIN();
- if (StreamKind_Last!=Stream_Max)
- {
- if (mPID)
- {
- Fill(StreamKind_Last, StreamPos_Last, General_ID, mPID, 10, true);
- Fill(StreamKind_Last, StreamPos_Last, General_ID_String, Bdmv_Decimal_Hexa(mPID), true);
- }
- Fill(StreamKind_Last, StreamPos_Last, "Language", language);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Duration), Mpls_PlayList_PlayItem_Duration/45);
- }
- FILLING_END();
- }
-
- if (End>Element_Offset)
- Skip_XX(End-Element_Offset, "unknown");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_PlayList_PlayItem_STN_table_Video()
-{
- //Parsing
- int8u Format, FrameRate;
- BS_Begin();
- Get_S1 (4, Format, "format"); Param_Info1(Clpi_Video_Format[Format]);
- Get_S1 (4, FrameRate, "frame_rate"); Param_Info1(Clpi_Video_FrameRate[FrameRate]);
- BS_End();
-
- FILLING_BEGIN();
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, StreamPos_Last, Video_Format, Clpi_Format(stream_type));
- if (Clpi_Video_Width[Format])
- Fill(Stream_Video, StreamPos_Last, Video_Width, Clpi_Video_Width[Format]);
- if (Clpi_Video_Height[Format])
- Fill(Stream_Video, StreamPos_Last, Video_Height, Clpi_Video_Height[Format]);
- Fill(Stream_Video, StreamPos_Last, Video_Interlacement, Clpi_Video_Interlacement[Format]);
- Fill(Stream_Video, StreamPos_Last, Video_Standard, Clpi_Video_Standard[Format]);
- if (Clpi_Video_FrameRate[FrameRate])
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, Clpi_Video_FrameRate[FrameRate]);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_PlayList_PlayItem_STN_table_Audio()
-{
- //Parsing
- int8u Channels, SamplingRate;
- BS_Begin();
- Get_S1 (4, Channels, "channel_layout"); Param_Info1(Clpi_Audio_Channels[Channels]);
- Get_S1 (4, SamplingRate, "sampling_rate"); Param_Info1(Clpi_Audio_SamplingRate[SamplingRate]);
- BS_End();
-
- FILLING_BEGIN();
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, Clpi_Format(stream_type));
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, Clpi_Format_Profile(stream_type));
- if (Clpi_Audio_Channels[Channels])
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Clpi_Audio_Channels[Channels]);
- if (Clpi_Audio_SamplingRate[SamplingRate])
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, Clpi_Audio_SamplingRate[SamplingRate]);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_PlayList_PlayItem_STN_table_Text()
-{
- //Parsing
- if (stream_type==0x92) //Subtitle
- Skip_B1( "Unknown");
-
- FILLING_BEGIN();
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_Format, Clpi_Format(stream_type));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_PlayList_SubPlayItem(int8u SubPath_type, int16u Pos)
-{
- Element_Begin1("SubPlayItem");
- Ztring Clip_Information_file_name;
- int16u length;
- Get_B2 (length, "length");
- int64u End=Element_Offset+length;
- Get_Local (5, Clip_Information_file_name, "Clip_Information_file_name"); Element_Info1(Clip_Information_file_name);
- Skip_Local(4, "Clip_codec_identifier");
- Skip_B4( "unknown");
- Skip_B1( "unknown");
- Info_B4(Time_In, "time (in)"); Param_Info1((float32)Time_In/45000);
- Info_B4(Time_Out, "time (out)"); Param_Info1((float32)Time_Out/45000);
- Skip_B2( "sync PI");
- Skip_B4( "sync PTS");
-
- if (End>Element_Offset)
- Skip_XX(End-Element_Offset, "unknown");
- Element_End0();
-
- FILLING_BEGIN();
- if (SubPath_type==8 && Pos!=(int16u)-1) //MVC
- {
- if (File_Name.size()>=10+1+8)
- {
- Ztring CLPI_File=File_Name;
- CLPI_File.resize(CLPI_File.size()-(10+1+8));
- CLPI_File+=__T("CLIPINF");
- CLPI_File+=PathSeparator;
- CLPI_File+=Clip_Information_file_name;
- CLPI_File+=__T(".clpi");
-
- MediaInfo_Internal MI;
- MI.Option(__T("File_Bdmv_ParseTargetedFile"), Config->File_Bdmv_ParseTargetedFile_Get()?__T("1"):__T("0"));
- if (MI.Open(CLPI_File))
- {
- if (MI.Count_Get(Stream_Video))
- {
- Ztring ID=Retrieve(Stream_Video, Pos, Video_ID);
- Ztring ID_String=Retrieve(Stream_Video, Pos, Video_ID_String);
- Ztring Format_Profile=Retrieve(Stream_Video, Pos, Video_Format_Profile);
- Ztring BitRate=Retrieve(Stream_Video, Pos, Video_BitRate);
- Ztring Source=Retrieve(Stream_Video, Pos, "Source");
- Fill(Stream_Video, Pos, Video_ID, MI.Get(Stream_Video, 0, Video_ID)+__T(" / ")+ID, true);
- Fill(Stream_Video, Pos, Video_ID_String, MI.Get(Stream_Video, 0, Video_ID_String)+__T(" / ")+ID_String, true);
- if (!Format_Profile.empty())
- Fill(Stream_Video, Pos, Video_Format_Profile, MI.Get(Stream_Video, 0, Video_Format_Profile)+__T(" / ")+Format_Profile, true);
- if (!BitRate.empty())
- Fill(Stream_Video, Pos, Video_BitRate, Ztring::ToZtring(BitRate.To_int32u()+MI.Get(Stream_Video, 0, Video_BitRate).To_int32u())+__T(" / ")+BitRate, true);
- if (!Source.empty())
- Fill(Stream_Video, Pos, "Source", Clip_Information_file_name +__T(".m2ts / ")+Source, true);
- }
- }
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_PlayListMarks()
-{
- Stream_Prepare(Stream_Menu);
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_Begin, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
-
- //Parsing
- int32u time_Pos0=0, time_Pos=1;
- int16u count;
- Get_B2 (count, "count");
- for (int16u Pos=0; Pos<count; Pos++)
- {
- Element_Begin1("Mark");
- int8u type;
- Skip_B1( "unknown");
- Get_B1 (type, "type"); Param_Info1(Mpls_PlayListMarks_Mark_type(type));
- switch (type)
- {
- case 1 : //entry-mark
- case 2 : //link point
- {
- int32u time;
- int16u stream_file_index;
- Get_B2 (stream_file_index, "stream_file_index");
- Get_B4 (time, "time"); Param_Info2(time/45, " milliseconds");
- Skip_B2( "unknown");
- Skip_B4( "unknown");
-
- FILLING_BEGIN();
- if (Pos==0)
- time_Pos0=time;
- if (stream_file_index==0 && type==1) //We currently handle only the first file
- {
- Fill(Stream_Menu, 0, Ztring().Duration_From_Milliseconds((int64u)((time-time_Pos0)/45)).To_UTF8().c_str(), __T("Chapter ")+Ztring::ToZtring(time_Pos));
- time_Pos++;
- }
- FILLING_END();
- }
- break;
- default:
- Skip_XX(12, "unknwon");
- }
- Element_End0();
- }
-
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_End, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_ExtensionData()
-{
- entries Entries; //Key is the start address
-
- int32u Base_Pos=(int32u)Element_Offset-4;
-
- int8u number_of_ext_data_entries;
- Skip_B4( "Unknown");
- Skip_B3( "Unknown");
- Element_Begin1("Offsets");
- Get_B1 (number_of_ext_data_entries, "number_of_ext_data_entries");
- for (size_t Start_Adress_Pos=0; Start_Adress_Pos<number_of_ext_data_entries; Start_Adress_Pos++)
- {
- int32u Start_Adress, Length;
- int16u ID1, ID2;
- Get_B2 (ID1, "ID1");
- Get_B2 (ID2, "ID2");
- Get_B4 (Start_Adress, "Start_Adress");
- Get_B4 (Length, "Length");
- Entries[Base_Pos+Start_Adress].ID1=ID1;
- Entries[Base_Pos+Start_Adress].ID2=ID2;
- Entries[Base_Pos+Start_Adress].Length=Length;
- }
- Element_End0();
-
- for (entries::iterator Entry=Entries.begin(); Entry!=Entries.end(); ++Entry)
- {
- if (Entry->first>=Element_Offset) //If valid
- {
- if (Entry->first>Element_Offset)
- Skip_XX(Entry->first-Element_Offset, "unknown");
-
- Element_Begin1("Entry");
- int64u End=Element_Offset+Entry->second.Length;
- switch (Entry->second.ID1)
- {
- case 0x0001 :
- switch(Entry->second.ID2)
- {
- case 0x0001 : break; //Mpls_ExtensionData_pip_metadata(); break;
- default: ;
- }
- break;
- case 0x0002 :
- switch(Entry->second.ID2)
- {
- case 0x0001 : break; //Mpls_ExtensionData_STN_table(); break;
- case 0x0002 : Mpls_ExtensionData_SubPath_entries(); break;
- case 0x0003 : break; //Mpls_ExtensionData_active_video_window(); break;
- default: ;
- }
- break;
- default : ;
- }
- if (End>Element_Offset)
- Skip_XX(End-Element_Offset, "Unknown");
- Element_End0();
- }
- }
-
- if (Element_Size>Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::Mpls_ExtensionData_SubPath_entries()
-{
- Element_Begin1("SubPath_entries");
- int32u length;
- int16u number_of_SubPath_extensions;
- int8u SubPath_type;
- Get_B4 (length, "length");
- int64u End=Element_Offset+length;
- Get_B2 (number_of_SubPath_extensions, "number_of_SubPath_extensions");
- for (int8u SubPath_extension=0; SubPath_extension<number_of_SubPath_extensions; SubPath_extension++)
- {
- Element_Begin1("SubPath_extension");
- int32u SubPath_extension_length;
- Get_B4 (SubPath_extension_length, "length");
- int64u SubPath_extension_End=Element_Offset+SubPath_extension_length;
- Skip_B1( "Unknown");
- Get_B1 (SubPath_type, "SubPath_type");
- switch(SubPath_type)
- {
- case 0x08 :
- {
- int8u number_of_SubPlayItems;
- Skip_B3( "Unknown");
- Get_B1 (number_of_SubPlayItems, "number_of_SubPlayItems");
- for (int8u Pos=0; Pos<number_of_SubPlayItems; Pos++)
- Mpls_PlayList_SubPlayItem(SubPath_type, Pos);
- }
- default : ;
- }
- if (SubPath_extension_End-Element_Offset)
- Skip_XX(SubPath_extension_End-Element_Offset, "Padding");
- Element_End0();
- }
- if (End-Element_Offset)
- Skip_XX(End-Element_Offset, "Padding");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::StreamCodingInfo_Video()
-{
- //Parsing
- int8u Format, FrameRate, AspectRatio;
- BS_Begin();
- Get_S1 (4, Format, "Format"); Param_Info1(Clpi_Video_Format[Format]);
- Get_S1 (4, FrameRate, "Frame rate"); Param_Info1(Clpi_Video_FrameRate[FrameRate]);
- Get_S1 (4, AspectRatio, "Aspect ratio"); Param_Info1(Clpi_Video_AspectRatio[AspectRatio]);
- Skip_BS(4, "Reserved");
- BS_End();
-
- FILLING_BEGIN();
- if (StreamKind_Last==Stream_Max)
- {
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, StreamPos_Last, Video_Format, Clpi_Format(stream_type));
- if (Clpi_Video_Width[Format])
- Fill(Stream_Video, StreamPos_Last, Video_Width, Clpi_Video_Width[Format]);
- if (Clpi_Video_Height[Format])
- Fill(Stream_Video, StreamPos_Last, Video_Height, Clpi_Video_Height[Format]);
- Fill(Stream_Video, StreamPos_Last, Video_Interlacement, Clpi_Video_Interlacement[Format]);
- Fill(Stream_Video, StreamPos_Last, Video_Standard, Clpi_Video_Standard[Format]);
- if (Clpi_Video_FrameRate[FrameRate])
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, Clpi_Video_FrameRate[FrameRate]);
- if (Clpi_Video_Height[AspectRatio])
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, Clpi_Video_AspectRatio[AspectRatio], 3, true);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::StreamCodingInfo_Audio()
-{
- //Parsing
- Ztring Language;
- int8u Channels, SamplingRate;
- BS_Begin();
- Get_S1 (4, Channels, "Channel layout"); Param_Info1(Clpi_Audio_Channels[Channels]);
- Get_S1 (4, SamplingRate, "Sampling Rate"); Param_Info1(Clpi_Audio_SamplingRate[SamplingRate]);
- BS_End();
- Get_Local(3, Language, "Language"); Element_Info1(Language);
-
- FILLING_BEGIN();
- if (StreamKind_Last==Stream_Max)
- {
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, Clpi_Format(stream_type));
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, Clpi_Format_Profile(stream_type));
- if (Clpi_Audio_Channels[Channels])
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Clpi_Audio_Channels[Channels]);
- if (Clpi_Audio_SamplingRate[SamplingRate])
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, Clpi_Audio_SamplingRate[SamplingRate]);
- }
- Fill(Stream_Audio, StreamPos_Last, Audio_Language, Language);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Bdmv::StreamCodingInfo_Text()
-{
- //Parsing
- Ztring Language;
- if (stream_type==0x92) //Subtitle
- Skip_B1( "Unknown");
- Get_Local(3, Language, "Language"); Element_Info1(Language);
-
- FILLING_BEGIN();
- if (StreamKind_Last==Stream_Max)
- {
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_Format, Clpi_Format(stream_type));
- }
- Fill(Stream_Text, StreamPos_Last, Text_Language, Language);
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_BDMV_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Bdmv.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Bdmv.h
deleted file mode 100644
index 8abf94508..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Bdmv.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Blu-ray Movie files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_BdmvH
-#define MediaInfo_File_BdmvH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <set>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Bdmv
-//***************************************************************************
-
-class File_Bdmv : public File__Analyze
-{
-public :
- void BDMV(); //The BDMV directory
-
-private :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Elements
- void Clpi_ProgramInfo();
- void Clpi_ExtensionData();
- void Indx_AppInfoBDMV();
- void Indx_Indexes();
- void Indx_Indexes_Index(int8u object_type);
- void Indx_ExtensionData();
- void Indx_ExtensionData_IDEX();
- void Indx_ExtensionData_IDEX_UIAppInfoAVCHD();
- void Indx_ExtensionData_IDEX_TableOfPlayLists();
- void Indx_ExtensionData_IDEX_MakersPrivateData();
- void Mobj_MovieObjects();
- void Mobj_ExtensionData();
- void Mpls_AppInfoPlayList();
- void Mpls_PlayList();
- void Mpls_PlayList_PlayItem();
- void Mpls_PlayList_PlayItem_STN_table();
- void Mpls_PlayList_PlayItem_STN_table_Video();
- void Mpls_PlayList_PlayItem_STN_table_Audio();
- void Mpls_PlayList_PlayItem_STN_table_Text();
- void Mpls_PlayList_SubPlayItem(int8u SubPath_type, int16u Pos);
- void Mpls_PlayListMarks();
- void Mpls_ExtensionData();
- void Mpls_ExtensionData_SubPath_entries();
- void StreamCodingInfo_Video();
- void StreamCodingInfo_Audio();
- void StreamCodingInfo_Text();
-
- //Temp
- int8u stream_type;
- std::map<int32u, size_t> Types; //Key is the start address
- int64u Mpls_PlayList_Duration;
- int64u Mpls_PlayList_PlayItem_Duration;
- int16u Mpls_PlayList_number_of_SubPaths;
- bool Mpls_PlayList_IsParsed;
- std::set<Ztring> Clip_Information_file_names;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Cdxa.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Cdxa.cpp
deleted file mode 100644
index b1b6a5659..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Cdxa.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_CDXA_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Cdxa.h"
-#include "ZenLib/Utils.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// Format
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// CDXA = RIFF header + Raw sectors
-// Riff header size = 44
-// Raw sector size = 2352
-//
-// Raw sector :
-// Sync 12 bytes (00 FF .. FF 00)
-// Header 4 bytes
-// SubHeader 8 bytes
-// Datas 2324 bytes
-// EDC (CRC) 4 bytes
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Cdxa::File_Cdxa()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("CDXA");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Cdxa;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- MustSynchronize=true;
-
- //Temp
- MI=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_Cdxa::~File_Cdxa()
-{
- delete MI; //MI=NULL;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-// RIFF Header, 44 bytes
-// RIFF header 4 bytes, Pos=0
-// RIFF data size 4 bytes, Pos=4
-// Format (CDXA) 4 bytes, Pos=8
-// Format Header 4 bytes, Pos=12
-// Format Size 4 bytes, Pos=16
-// Format user_id 2 bytes, Pos=20
-// Format group_id 2 bytes, Pos=22
-// Format attributes 2 bytes, Pos=24
-// Format xa_signature 2 bytes, Pos=26 ("XA")
-// Format xa_track_number 4 bytes, Pos=28
-// Format Reserved 4 bytes, Pos=32
-// Data Header 4 bytes, Pos=36
-// Data Size 4 bytes, Pos=40
-//
-// Attributes (big endian):
-// 15 Directory
-// 14 CDDA
-// 13 Interleaved
-// 12 Mode2Form2 --> 2324 bytes/block
-// 11 Mode2Form1 --> 2048 bytes/block
-// 10 Exec_Other
-// 09 Reserved
-// 08 Read_Other
-// 07 Reserved
-// 06 Exec_Group
-// 05 Reserved
-// 04 Read_Group
-// 03 Reserved
-// 02 Exec_User
-// 01 Reserved
-// 00 Read_User
-
-//---------------------------------------------------------------------------
-bool File_Cdxa::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<0x28)
- return false; //Must wait for more data
-
- if ( CC4(Buffer+0x00)!=0x52494646 //"RIFF"
- || LittleEndian2int32u(Buffer+0x04)!=LittleEndian2int32u(Buffer+0x28)+0x24 //Sizes of chunks
- || CC4(Buffer+0x08)!=0x43445841 //"CDXA"
- || CC4(Buffer+0x0C)!=0x666D7420 //"fmt "
- || LittleEndian2int32u(Buffer+0x10)!=0x10
- || CC2(Buffer+0x1A)!=0x5841 //"XA"
- || CC4(Buffer+0x24)!=0x64617461) //"data"
- {
- Reject("CDXA");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Cdxa::FileHeader_Parse()
-{
- //Parsing
- Skip_C4( "RIFF header");
- Skip_L4( "RIFF data size");
- Skip_C4( "CDXA");
- Skip_C4( "fmt header");
- Skip_L4( "fmt size");
- Skip_L2( "user_id");
- Skip_L2( "group_id");
- Skip_L2( "attributes");
- Skip_C2( "xa_signature");
- Skip_L4( "xa_track_number");
- Skip_L4( "reserved");
- Skip_C4( "data header");
- Skip_L4( "data size");
-
- FILLING_BEGIN();
- Accept("CDXA");
- MI=new MediaInfo_Internal;
- MI->Option(__T("FormatDetection_MaximumOffset"), __T("1048576"));
- //MI->Option(__T("File_IsSub"), __T("1"));
- MI->Open_Buffer_Init(File_Size, File_Offset+Buffer_Offset);
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Cdxa::Synchronize()
-{
- //Synchronizing
- while ( Buffer_Offset+2352*3+12<=Buffer_Size
- && !(CC8(Buffer+Buffer_Offset+2352*0)==0x00FFFFFFFFFFFFFFLL && CC4(Buffer+Buffer_Offset+2352*0+8)==0xFFFFFF00
- && CC8(Buffer+Buffer_Offset+2352*1)==0x00FFFFFFFFFFFFFFLL && CC4(Buffer+Buffer_Offset+2352*1+8)==0xFFFFFF00
- && CC8(Buffer+Buffer_Offset+2352*2)==0x00FFFFFFFFFFFFFFLL && CC4(Buffer+Buffer_Offset+2352*2+8)==0xFFFFFF00
- && CC8(Buffer+Buffer_Offset+2352*3)==0x00FFFFFFFFFFFFFFLL && CC4(Buffer+Buffer_Offset+2352*3+8)==0xFFFFFF00))
- Buffer_Offset++;
- if (Buffer_Offset+2352*3+12>Buffer_Size)
- return false;
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Cdxa::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+12>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (!(CC8(Buffer+Buffer_Offset)==0x00FFFFFFFFFFFFFFLL && CC4(Buffer+Buffer_Offset+8)==0xFFFFFF00))
- Synched=false;
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Cdxa::Streams_Finish ()
-{
- if (!MI)
- return;
-
- //If nothing
- if (MI->Info==NULL || !MI->Info->Status[IsAccepted])
- {
- Fill(Stream_General, 0, General_Format, "CDXA");
- }
- else
- {
-
- //General
- MI->Info->Open_Buffer_Finalize();
- Merge(*(MI->Info));
- Merge(*(MI->Info), Stream_General, 0, 0);
- const Ztring &Format=Retrieve(Stream_General, 0, General_Format);
- Fill(Stream_General, 0, General_Format, (Ztring(__T("CDXA/"))+Format).c_str(), Unlimited, true);
- Clear(Stream_General, 0, General_Duration);
- Clear(Stream_Video, 0, Video_Duration);
- }
-
- //Purge what is not needed anymore
- if (!File_Name.empty()) //Only if this is not a buffer, with buffer we can have more data
- {
- delete MI; MI=NULL;
- }
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Cdxa::Header_Parse()
-{
- //Parsing
- Skip_B4( "Sync1");
- Skip_B4( "Sync2");
- Skip_B4( "Sync3");
- Skip_B4( "Header");
- Skip_B8( "SubHeader");
-
- //Filling
- Header_Fill_Size(2352);
- Header_Fill_Code(0, "Chunk");
-}
-
-//---------------------------------------------------------------------------
-void File_Cdxa::Data_Parse()
-{
- if (MI==NULL)
- {
- //Where is the header? --> Problem
- Reject("CDXA");
- return;
- }
-
- //CRC or not?
- int64u CRC_Size=4;
- if (Element_Size!=2328)
- CRC_Size=0;
-
- //Parsing
- Skip_XX(Element_Size-CRC_Size, "Data");
- if (CRC_Size>0)
- Skip_B4( "CRC");
-
- //Preparing to fill MediaInfo with a buffer
- MI->Open_Buffer_Position_Set(File_Offset+Buffer_Offset);
-
- //Sending the buffer to MediaInfo
- MI->Open_Buffer_Continue(Buffer+Buffer_Offset, (size_t)(Element_Size-CRC_Size));
-
- //Testing if filled
- if (MI->Info->Status[IsFilled]) {
-
- }
-
- //Testing if MediaInfo always need data
- File_GoTo=MI->Open_Buffer_Continue_GoTo_Get();
- if (File_GoTo==(int64u)-1 && MI->Info->Status[IsFilled] && File_Size!=(int64u)-1 && File_Offset+Buffer_Size<File_Size/2)
- GoToFromEnd(File_Offset+Buffer_Size);
- if (File_GoTo!=(int64u)-1)
- Info("CDXA, Jumping to end of file");
-
- //Details
- #if MEDIAINFO_TRACE
- if (Config_Trace_Level)
- {
- if (!MI->Inform().empty())
- Element_Show_Add(MI->Inform());
- }
- #endif //MEDIAINFO_TRACE
-
- //Demux
- Demux(Buffer+Buffer_Offset, (size_t)(Element_Size-CRC_Size), ContentType_MainStream);
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_CDXA_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Cdxa.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Cdxa.h
deleted file mode 100644
index a4796798c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Cdxa.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about CDXA files
-// (like Video-CD...)
-// CDXA are read by MS-Windows with CRC bytes
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_CdxaH
-#define MediaInfo_File_CdxaH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class MediaInfo_Internal;
-
-//***************************************************************************
-// Class File_Cdxa
-//***************************************************************************
-
-class File_Cdxa : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Cdxa();
- ~File_Cdxa();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Temp
- MediaInfo_Internal* MI;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DashMpd.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DashMpd.cpp
deleted file mode 100644
index 34df2d016..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DashMpd.cpp
+++ /dev/null
@@ -1,694 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-// Period
-// AdaptationSet --> One per stream
-// SegmentTemplate (optional)
-// SegmentTimeline
-// S --> duration per segment, count of segments
-// Representation --> file name from SegmentTemplate or BaseURL
-// SegmentBase
-// SegmentList
-// Representation --> file name from BaseURL
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DASHMPD_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_DashMpd.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/File.h"
-#include "tinyxml2.h"
-using namespace ZenLib;
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-void DashMpd_Transform (Ztring &Value, std::map<Ztring, Ztring> &Attributes)
-{
- size_t Pos1=0;
- for (;;)
- {
- Pos1=Value.find(__T('$'), Pos1);
- if (Pos1==string::npos)
- break;
- size_t Pos2=Value.find(__T('$'), Pos1+1);
- if (Pos2==string::npos)
- break;
- Ztring Name=Value.substr(Pos1+1, Pos2-Pos1-1);
- if (Name.empty())
- Value.erase(Pos1, 1);
- else
- {
- if (Name==__T("RepresentationID"))
- Name=__T("id");
- if (Name==__T("Bandwidth"))
- Name=__T("bandwidth");
- std::map<Ztring, Ztring>::iterator Attribute_It=Attributes.find(Name);
- if (Attribute_It!=Attributes.end())
- {
- Value.erase(Pos1, Pos2-Pos1+1);
- Value.insert(Pos1, Attribute_It->second);
- }
- else
- Pos1+=2+Name.size();
- }
- }
-}
-
-//---------------------------------------------------------------------------
-stream_t DashMpd_mimeType_StreamKind (const char* mimeType)
-{
- Ztring StreamKind; StreamKind.From_UTF8(mimeType);
- if (StreamKind.find(__T("video"))==0)
- return Stream_Video;
- else if (StreamKind.find(__T("audio"))==0)
- return Stream_Audio;
- else if (StreamKind.find(__T("application/ttml+xml"))==0)
- return Stream_Text;
- else
- return Stream_Other;
-}
-
-//---------------------------------------------------------------------------
-Ztring DashMpd_codecid_CodecID (const char* codecid)
-{
- Ztring CodecID;
-
- Ztring Codecs; Codecs.From_UTF8(codecid);
- size_t DotPos=Codecs.find(__T('.'));
- if (DotPos==4 && Codecs.substr(0, DotPos).find(__T("mp4"))==0)
- DotPos=Codecs.find(__T('.'), 5);
- if (DotPos==string::npos)
- {
- CodecID=Codecs;
- }
- else
- {
- CodecID=Codecs.substr(0, DotPos);
- //TODO per format, rfc 6381 //ReferenceFile.Infos["Format_Profile"]=;
- }
- CodecID.FindAndReplace(__T("0x"), Ztring(), 0, Ztring_Recursive);
-
- return CodecID;
-}
-
-//---------------------------------------------------------------------------
-struct template_generic
-{
- File__ReferenceFilesHelper::reference ReferenceFile;
- Ztring SourceDir;
- Ztring BaseURL;
- Ztring initialization;
- Ztring media;
- int64u duration;
- int64u startNumber;
- int64u duration_Max;
- int64u startNumber_Max;
- struct segmenttimeline
- {
- int64u t; //start time
- int64u d; //duration per segment
- int64u r; //repeat count
-
- segmenttimeline()
- {
- t=1;
- d=1;
- r=0;
- }
- };
- std::vector<segmenttimeline> SegmentTimeLines;
- std::map<Ztring, Ztring> Attributes_ForMedia;
-
- template_generic(const Ztring &BaseURL=Ztring(), const Ztring &SourceDir=Ztring())
- {
- template_generic::BaseURL=BaseURL;
- template_generic::SourceDir=SourceDir;
- duration=1;
- startNumber=1;
- duration_Max=0;
- startNumber_Max=0;
- }
-
- void AdaptationSet_Attributes_Parse (XMLElement* Item);
- void SegmentTemplate_Attributes_Parse (XMLElement* Item);
- void SegmentTimeline_Attributes_Parse (XMLElement* Item);
- void Representation_Attributes_Parse (XMLElement* Item);
-
- void Decode ();
-};
-
-void template_generic::AdaptationSet_Attributes_Parse (XMLElement* Item)
-{
- const char* Attribute;
-
- //Attributes - mineType
- Attribute=Item->Attribute("mimeType");
- if (Attribute)
- ReferenceFile.StreamKind=DashMpd_mimeType_StreamKind(Attribute);
-
- //Attributes - codecs
- Attribute=Item->Attribute("codecs");
- if (Attribute)
- ReferenceFile.Infos["CodecID"]=DashMpd_codecid_CodecID(Attribute);
-
- //Attributes - lang
- Attribute=Item->Attribute("lang");
- if (Attribute)
- ReferenceFile.Infos["Language"].From_UTF8(Attribute);
-}
-
-void template_generic::SegmentTemplate_Attributes_Parse (XMLElement* Item)
-{
- const char* Attribute;
-
- //Attributes - initialization
- Attribute=Item->Attribute("initialization");
- if (Attribute)
- {
- initialization.From_UTF8(Attribute);
- }
-
- //Attributes - media
- Attribute=Item->Attribute("media");
- if (Attribute)
- {
- media.From_UTF8(Attribute);
- }
-
- //Attributes - duration
- Attribute=Item->Attribute("duration");
- if (Attribute)
- {
- duration=Ztring().From_UTF8(Attribute).To_int64u();
- }
-
- //Attributes - startNumber
- Attribute=Item->Attribute("startNumber");
- if (Attribute)
- {
- startNumber=Ztring().From_UTF8(Attribute).To_int64u();
- }
-}
-
-void template_generic::SegmentTimeline_Attributes_Parse (XMLElement* Item)
-{
- const char* Attribute;
- segmenttimeline SegmentTimeLine;
-
- //Attributes - t (start time)
- Attribute=Item->Attribute("t");
- if (Attribute)
- {
- SegmentTimeLine.t=Ztring().From_UTF8(Attribute).To_int64u();
- }
- else
- SegmentTimeLine.t=startNumber;
-
- //Attributes - d (duration per segment)
- Attribute=Item->Attribute("d");
- if (Attribute)
- {
- SegmentTimeLine.d=Ztring().From_UTF8(Attribute).To_int64u();
- }
- else
- SegmentTimeLine.d=duration;
-
- //Attributes - r (repeat count)
- Attribute=Item->Attribute("r");
- if (Attribute)
- {
- SegmentTimeLine.r=Ztring().From_UTF8(Attribute).To_int64u();
- }
-
- SegmentTimeLines.push_back(SegmentTimeLine);
- duration_Max+=SegmentTimeLine.d*(SegmentTimeLine.r+1);
- startNumber_Max+=SegmentTimeLine.r+1;
-}
-
-void template_generic::Representation_Attributes_Parse (XMLElement* Item)
-{
- const char* Attribute;
-
- //Attributes - id
- Attribute=Item->Attribute("id");
- if (Attribute)
- {
- ReferenceFile.StreamID=Ztring().From_UTF8(Attribute).To_int64u(16);
- }
-
- //Attributes - bandwidth
- Attribute=Item->Attribute("bandwidth");
- if (Attribute)
- {
- ReferenceFile.Infos["BitRate"].From_UTF8(Attribute);
- }
-
- //Attributes - frame size
- Attribute=Item->Attribute("width");
- if (Attribute)
- {
- ReferenceFile.Infos["Width"].From_UTF8(Attribute);
- }
- Attribute=Item->Attribute("height");
- if (Attribute)
- {
- ReferenceFile.Infos["Height"].From_UTF8(Attribute);
- }
-
- //Attributes - mineType
- Attribute=Item->Attribute("mimeType");
- if (Attribute)
- ReferenceFile.StreamKind=DashMpd_mimeType_StreamKind(Attribute);
-
- //Attributes - codecs
- Attribute=Item->Attribute("codecs");
- if (Attribute)
- ReferenceFile.Infos["CodecID"]=DashMpd_codecid_CodecID(Attribute);
-
- //Attributes - lang
- Attribute=Item->Attribute("lang");
- if (Attribute)
- ReferenceFile.Infos["Language"].From_UTF8(Attribute);
-
- //Attributes - Saving all attributes
- for (const XMLAttribute* Attribute_Item=Item->FirstAttribute(); Attribute_Item; Attribute_Item=Attribute_Item->Next())
- {
- Ztring Name; Name.From_UTF8(Attribute_Item->Name());
- Ztring Value; Value.From_UTF8(Attribute_Item->Value());
- Attributes_ForMedia[Name]=Value;
- }
-}
-
-//---------------------------------------------------------------------------
-void template_generic::Decode()
-{
- //initialization - URL decoding, template adaptation and add it
- if (!initialization.empty())
- {
- DashMpd_Transform(initialization, Attributes_ForMedia);
- ReferenceFile.FileNames.push_back(BaseURL+initialization);
- }
-
- //media - URL decoding, template adaptation and add it
- if (!media.empty())
- {
- DashMpd_Transform(media, Attributes_ForMedia);
- size_t Index_Pos=media.find(__T("$Index"));
- size_t Index_StringSize=5;
- if (Index_Pos==string::npos)
- {
- Index_Pos=media.find(__T("$Number"));
- Index_StringSize++;
- }
- int8u Index_Size=1;
- if (Index_Pos!=string::npos)
- {
- size_t Index_Pos_End=media.find(__T('$'), Index_Pos+1+Index_StringSize);
- if (Index_Pos_End!=string::npos && Index_Pos+1+Index_StringSize+2<Index_Pos_End && media[Index_Pos+1+Index_StringSize]=='%' && media[Index_Pos+1+Index_StringSize+1]=='0')
- {
- Index_Size=Ztring(media.substr(Index_Pos+1+Index_StringSize+2, Index_Pos_End-(Index_Pos+1+Index_StringSize+2))).To_int8u();
- }
- else if (Index_Pos_End==string::npos || Index_Pos+1+Index_StringSize!=Index_Pos_End)
- Index_Pos=string::npos;
- }
- size_t Time_Pos=media.find(__T("$Time$"));
- if (Index_Pos!=string::npos || Time_Pos!=string::npos)
- {
- Ztring Media_Name(media);
- if (Index_Pos!=string::npos)
- {
- Media_Name.erase(Index_Pos, 1+Index_StringSize+1);
- if (Time_Pos!=string::npos && Time_Pos>Index_Pos)
- Time_Pos-=1+Index_StringSize+1;
- }
- if (Time_Pos!=string::npos)
- {
- Media_Name.erase(Time_Pos, 6);
- if (Index_Pos!=string::npos && Index_Pos>Time_Pos)
- Index_Pos-=6;
- }
- if (SegmentTimeLines.empty())
- {
- int64u Index_Pos_Temp=startNumber;
- for (;;)
- {
- Ztring Media_Name_Temp(Media_Name);
- Ztring Index; Index.From_Number(Index_Pos_Temp);
- if (Index.size()<Index_Size)
- Index.insert(0, Index_Size-Index.size(), __T('0'));
- Media_Name_Temp.insert(Index_Pos, Index);
-
- Ztring File_Name;
- if (!SourceDir.empty())
- File_Name+=SourceDir+PathSeparator;
- File_Name+=BaseURL+Media_Name_Temp;
- if (!File::Exists(File_Name))
- break;
- ReferenceFile.FileNames.push_back(File_Name);
- Index_Pos_Temp++;
- }
- }
- else
- {
- int64u SegmentTimeLines_duration=0;
- int64u SegmentTimeLines_startNumber=startNumber;
- for (size_t SegmentTimeLines_Pos=0; SegmentTimeLines_Pos<SegmentTimeLines.size(); SegmentTimeLines_Pos++)
- {
- for (int64u Pos=0; Pos<=SegmentTimeLines[SegmentTimeLines_Pos].r; Pos++)
- {
- Ztring Media_Name_Temp(Media_Name);
- size_t Time_Pos_Temp=Time_Pos;
- if (Index_Pos!=string::npos)
- {
- Ztring Index; Index.From_Number(SegmentTimeLines_startNumber);
- if (Index.size()<Index_Size)
- Index.insert(0, Index_Size-Index.size(), __T('0'));
- Media_Name_Temp.insert(Index_Pos, Index);
- if (Time_Pos!=string::npos && Time_Pos>Index_Pos)
- Time_Pos_Temp+=Index.size();
- }
- if (Time_Pos_Temp!=string::npos)
- {
- Ztring Time; Time.From_Number(SegmentTimeLines_duration);
- Media_Name_Temp.insert(Time_Pos_Temp, Time);
- }
-
- ReferenceFile.FileNames.push_back(BaseURL+Media_Name_Temp);
- SegmentTimeLines_duration+=SegmentTimeLines[SegmentTimeLines_Pos].d;
- SegmentTimeLines_startNumber++;
- }
- }
- }
- }
- else
- ReferenceFile.FileNames.push_back(BaseURL+media);
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_DashMpd::File_DashMpd()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_DashMpd;
- StreamIDs_Width[0]=16;
- #endif //MEDIAINFO_EVENTS
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_DashMpd::~File_DashMpd()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DashMpd::Streams_Finish()
-{
- if (ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_DashMpd::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_DashMpd::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- {
- XMLElement* Root=document.FirstChildElement("MPD");
- if (Root)
- {
- const char* Attribute=Root->Attribute("xmlns");
- if (Attribute==NULL
- || (Ztring().From_UTF8(Attribute)!=__T("urn:mpeg:DASH:schema:MPD:2011")
- && Ztring().From_UTF8(Attribute)!=__T("urn:mpeg:dash:schema:mpd:2011") //Some muxers use lower case version
- && Ztring().From_UTF8(Attribute)!=__T("urn:3GPP:ns:PSS:AdaptiveHTTPStreamingMPD:2009")))
- {
- Reject("DashMpd");
- return false;
- }
-
- Accept("DashMpd");
- Fill(Stream_General, 0, General_Format, "DASH MPD");
- Config->File_ID_OnlyRoot_Set(false);
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- //Parsing main elements
- Ztring BaseURL;
-
- for (XMLElement* Root_Item=Root->FirstChildElement(); Root_Item; Root_Item=Root_Item->NextSiblingElement())
- {
- //Common information
- if (string(Root_Item->Value())=="BaseURL")
- {
- if (BaseURL.empty()) //Using the first one
- BaseURL=Root_Item->GetText();
- }
-
- //Period
- if (string(Root_Item->Value())=="Period")
- {
- for (XMLElement* Period_Item=Root_Item->FirstChildElement(); Period_Item; Period_Item=Period_Item->NextSiblingElement())
- {
- //AdaptationSet (=a stream)
- if (string(Period_Item->Value())=="AdaptationSet")
- {
- template_generic Template_Generic(BaseURL, FileName(File_Name).Path_Get());
-
- Template_Generic.AdaptationSet_Attributes_Parse(Period_Item);
-
- //Sub
- for (XMLElement* AdaptationSet_Item=Period_Item->FirstChildElement(); AdaptationSet_Item; AdaptationSet_Item=AdaptationSet_Item->NextSiblingElement())
- {
- //SegmentTemplate
- if (string(AdaptationSet_Item->Value())=="SegmentTemplate")
- {
- Template_Generic.SegmentTemplate_Attributes_Parse(AdaptationSet_Item);
-
- //Sub
- for (XMLElement* SegmentTemplate_Item=AdaptationSet_Item->FirstChildElement(); SegmentTemplate_Item; SegmentTemplate_Item=SegmentTemplate_Item->NextSiblingElement())
- {
- //SegmentTimeline
- if (string(SegmentTemplate_Item->Value())=="SegmentTimeline")
- {
- //Sub
- for (XMLElement* SegmentTimeline_Item=SegmentTemplate_Item->FirstChildElement(); SegmentTimeline_Item; SegmentTimeline_Item=SegmentTimeline_Item->NextSiblingElement())
- {
- //SegmentTimeline
- if (string(SegmentTimeline_Item->Value())=="S")
- {
- Template_Generic.SegmentTimeline_Attributes_Parse(SegmentTimeline_Item);
- }
- }
- }
- }
- }
-
- //Representation
- if (string(AdaptationSet_Item->Value())=="Representation")
- {
- template_generic Template_Generic_PerRepresentation(Template_Generic);
-
- Template_Generic_PerRepresentation.Representation_Attributes_Parse(AdaptationSet_Item);
-
- //Sub
- for (XMLElement* Representation_Item=AdaptationSet_Item->FirstChildElement(); Representation_Item; Representation_Item=Representation_Item->NextSiblingElement())
- {
- //BaseURL
- if (string(Representation_Item->Value())=="BaseURL")
- {
- Template_Generic_PerRepresentation.ReferenceFile.FileNames.push_back(BaseURL+Ztring().From_UTF8(Representation_Item->GetText()));
- }
-
- //SegmentTemplate
- if (string(Representation_Item->Value())=="SegmentTemplate")
- {
- Template_Generic_PerRepresentation.SegmentTemplate_Attributes_Parse(Representation_Item);
- }
-
- //SegmentBase
- if (string(Representation_Item->Value())=="SegmentBase")
- {
- //Sub
- for (XMLElement* SegmentBase_Item=Representation_Item->FirstChildElement(); SegmentBase_Item; SegmentBase_Item=SegmentBase_Item->NextSiblingElement())
- {
- //Initialization
- if (string(SegmentBase_Item->Value())=="Initialization")
- {
- Attribute=SegmentBase_Item->Attribute("sourceURL");
- if (Attribute)
- Template_Generic_PerRepresentation.ReferenceFile.FileNames.insert(Template_Generic_PerRepresentation.ReferenceFile.FileNames.begin(), BaseURL+Ztring().From_UTF8(Attribute));
- }
- }
- }
-
- //SegmentList
- if (string(Representation_Item->Value())=="SegmentList")
- {
- //Sub
- for (XMLElement* SegmentBase_Item=Representation_Item->FirstChildElement(); SegmentBase_Item; SegmentBase_Item=SegmentBase_Item->NextSiblingElement())
- {
- //Initialization
- if (string(SegmentBase_Item->Value())=="SegmentURL")
- {
- bool IsSupported=true;
- Attribute=SegmentBase_Item->Attribute("mediaRange");
- if (Attribute)
- {
- size_t Length=strlen(Attribute);
- if (Length<2
- || Attribute[0]!='0'
- || Attribute[1]!='-')
- IsSupported=false; //Currently, we do not support ranges
- }
-
- Attribute=SegmentBase_Item->Attribute("media");
- if (Attribute && IsSupported)
- Template_Generic_PerRepresentation.ReferenceFile.FileNames.push_back(BaseURL+Ztring().From_UTF8(Attribute));
- }
- }
- }
- }
-
- Template_Generic_PerRepresentation.Decode();
- ReferenceFiles->References.push_back(Template_Generic_PerRepresentation.ReferenceFile);
- }
- }
- }
-
- //Representation (=a stream)
- if (string(Period_Item->Value())=="Representation")
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- int64u duration=1;
-
- //Attributes - mineType
- Attribute=Period_Item->Attribute("mimeType");
- if (Attribute)
- ReferenceFile.StreamKind=DashMpd_mimeType_StreamKind(Attribute);
-
- //Attributes - codecs
- Attribute=Period_Item->Attribute("codecs");
- if (Attribute)
- ReferenceFile.Infos["CodecID"]=DashMpd_codecid_CodecID(Attribute);
-
- //Attributes - lang
- Attribute=Period_Item->Attribute("lang");
- if (Attribute)
- ReferenceFile.Infos["Language"].From_UTF8(Attribute);
-
- //Sub
- for (XMLElement* AdaptationSet_Item=Period_Item->FirstChildElement(); AdaptationSet_Item; AdaptationSet_Item=AdaptationSet_Item->NextSiblingElement())
- {
- //SegmentInfo
- if (string(AdaptationSet_Item->Value())=="SegmentInfo")
- {
- //Attributes - duration
- Attribute=AdaptationSet_Item->Attribute("duration");
- if (Attribute)
- {
- duration=Ztring().From_UTF8(Attribute).To_int64u();
- }
-
- //Sub
- for (XMLElement* SegmentInfo_Item=AdaptationSet_Item->FirstChildElement(); SegmentInfo_Item; SegmentInfo_Item=SegmentInfo_Item->NextSiblingElement())
- {
- //InitialisationSegmentURL
- if (string(SegmentInfo_Item->Value())=="InitialisationSegmentURL")
- {
- Attribute=SegmentInfo_Item->Attribute("sourceURL");
- if (Attribute)
- ReferenceFile.FileNames.insert(ReferenceFile.FileNames.begin(), BaseURL+Ztring().From_UTF8(Attribute));
- }
-
- //Url
- if (string(SegmentInfo_Item->Value())=="Url")
- {
- Attribute=SegmentInfo_Item->Attribute("sourceURL");
- if (Attribute)
- ReferenceFile.FileNames.push_back(BaseURL+Ztring().From_UTF8(Attribute));
- }
- }
-
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- }
- }
- }
- }
- }
- }
- else
- {
- Reject("DashMpd");
- return false;
- }
- }
-
- Element_Offset=File_Size;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_DASHMPD_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DashMpd.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DashMpd.h
deleted file mode 100644
index bc2a5eebc..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DashMpd.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DASH (.mpd) files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DashMpdH
-#define MediaInfo_File_DashMpdH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_DashMpd
-//***************************************************************************
-
-class File_DashMpd : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_DashMpd();
- ~File_DashMpd();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Helpers
- void Representation();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpAm.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpAm.cpp
deleted file mode 100644
index 6e8d0be1b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpAm.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DCP_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_DcpAm.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "MediaInfo/Multiple/File_DcpCpl.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/FileName.h"
-#include "tinyxml2.h"
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-extern void DcpCpl_MergeFromPkl(File__ReferenceFilesHelper* FromCpl, File__ReferenceFilesHelper* FromPkl);
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_DcpAm::File_DcpAm()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_DcpAm;
- StreamIDs_Width[0]=sizeof(size_t)*2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_DcpAm::~File_DcpAm()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DcpAm::Streams_Finish()
-{
- if (ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_DcpAm::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_DcpAm::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- std::string NameSpace;
- XMLElement* AssetMap=document.FirstChildElement("AssetMap");
- if (AssetMap==NULL)
- {
- NameSpace="am:";
- AssetMap=document.FirstChildElement((NameSpace+"AssetMap").c_str());
- }
- if (!AssetMap)
- {
- Reject("DcpAm");
- return false;
- }
-
- const char* Attribute=AssetMap->Attribute(NameSpace.empty()?"xmlns":"xmlns:am");
- if (!Attribute)
- {
- Reject("DcpAm");
- return false;
- }
-
- if (strcmp(Attribute, "http://www.digicine.com/PROTO-ASDCP-AM-20040311#")
- && strcmp(Attribute, "http://www.smpte-ra.org/schemas/429-9/2007/AM"))
- {
- Reject("DcpAm");
- return false;
- }
-
- Accept("DcpAm");
- Fill(Stream_General, 0, General_Format, "DCP AM");
- Fill(Stream_General, 0, General_Format_Version, NameSpace=="am:"?"SMPTE":"Interop");
- Config->File_ID_OnlyRoot_Set(false);
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
- Ztring CPL_FileName;
-
- for (XMLElement* AssetMap_Item=AssetMap->FirstChildElement(); AssetMap_Item; AssetMap_Item=AssetMap_Item->NextSiblingElement())
- {
- //AssetList
- if (!strcmp(AssetMap_Item->Value(), (NameSpace+"AssetList").c_str()))
- {
- for (XMLElement* AssetList_Item=AssetMap_Item->FirstChildElement(); AssetList_Item; AssetList_Item=AssetList_Item->NextSiblingElement())
- {
- //Asset
- if (!strcmp(AssetList_Item->Value(), (NameSpace+"Asset").c_str()))
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- bool IsPKL=false;
- bool IsCPL=false;
-
- for (XMLElement* Asset_Item=AssetList_Item->FirstChildElement(); Asset_Item; Asset_Item=Asset_Item->NextSiblingElement())
- {
- //Id
- if (!strcmp(Asset_Item->Value(), (NameSpace+"Id").c_str()))
- ReferenceFile.Infos["UniqueID"].From_UTF8(Asset_Item->GetText());
-
- //ChunkList
- if (!strcmp(Asset_Item->Value(), (NameSpace+"ChunkList").c_str()))
- {
- for (XMLElement* ChunkList_Item=Asset_Item->FirstChildElement(); ChunkList_Item; ChunkList_Item=ChunkList_Item->NextSiblingElement())
- {
- //Chunk
- if (!strcmp(ChunkList_Item->Value(), (NameSpace+"Chunk").c_str()))
- {
- for (XMLElement* Chunk_Item=ChunkList_Item->FirstChildElement(); Chunk_Item; Chunk_Item=Chunk_Item->NextSiblingElement())
- {
- //Path
- if (!strcmp(Chunk_Item->Value(), (NameSpace+"Path").c_str()))
- {
- ReferenceFile.FileNames.push_back(Ztring().From_UTF8(Chunk_Item->GetText()));
- string Text=Chunk_Item->GetText();
- if (Text.size()>=8
- && (Text.find("_pkl.xml")==Text.size()-8)
- || (Text.find("PKL_")==0 && Text.find(".xml")==Text.size()-4))
- IsPKL=true;
- if (Text.size()>=8
- && (Text.find("_cpl.xml")==Text.size()-8)
- || (Text.find("CPL_")==0 && Text.find(".xml")==Text.size()-4))
- IsCPL=true;
- }
- }
- }
- }
- }
- }
-
- if (IsCPL)
- {
- if (CPL_FileName.empty() && !ReferenceFile.FileNames.empty())
- CPL_FileName=ReferenceFile.FileNames[0]; //Using only the first CPL file meet
- }
- else if (!IsPKL)
- {
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- }
- }
- }
-
- //Creator
- if (!strcmp(AssetMap_Item->Value(), (NameSpace+"Creator").c_str()))
- Fill(Stream_General, 0, General_Encoded_Library, AssetMap_Item->GetText());
-
- //IssueDate
- if (!strcmp(AssetMap_Item->Value(), (NameSpace+"IssueDate").c_str()))
- Fill(Stream_General, 0, General_Encoded_Date, AssetMap_Item->GetText());
-
- //Issuer
- if (!strcmp(AssetMap_Item->Value(), (NameSpace+"Issuer").c_str()))
- Fill(Stream_General, 0, General_EncodedBy, AssetMap_Item->GetText());
- }
-
- Element_Offset=File_Size;
-
- //Getting links between files
- if (!CPL_FileName.empty() && !Config->File_IsReferenced_Get())
- {
- FileName Directory(File_Name);
- if (CPL_FileName.find(__T("file://"))==0 && CPL_FileName.find(__T("file:///"))==string::npos)
- CPL_FileName.erase(0, 7); //TODO: better handling of relative and absolute file naes
- MediaInfo_Internal MI;
- MI.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- MI.Option(__T("File_IsReferenced"), __T("1"));
- size_t MiOpenResult=MI.Open(Directory.Path_Get()+PathSeparator+CPL_FileName);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (MiOpenResult
- && (MI.Get(Stream_General, 0, General_Format)==__T("DCP CPL")
- || MI.Get(Stream_General, 0, General_Format)==__T("IMF CPL")))
- {
- DcpCpl_MergeFromPkl(((File_DcpCpl*)MI.Info)->ReferenceFiles, ReferenceFiles);
- ReferenceFiles->References=((File_DcpCpl*)MI.Info)->ReferenceFiles->References;
- if (MI.Get(Stream_General, 0, General_Format)==__T("IMF CPL"))
- {
- Fill(Stream_General, 0, General_Format, "IMF AM", Unlimited, true, true);
- Clear(Stream_General, 0, General_Format_Version);
- }
-
- for (size_t Pos=0; Pos<MI.Count_Get(Stream_Other); ++Pos)
- {
- Stream_Prepare(Stream_Other);
- Merge(*MI.Info, Stream_Other, Pos, StreamPos_Last);
- }
- }
- }
-
- ReferenceFiles->FilesForStorage=true;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_P2_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpAm.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpAm.h
deleted file mode 100644
index 92aeea346..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpAm.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DCP AssetMap files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DcpAmH
-#define MediaInfo_File_DcpAmH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_DcpAm
-//***************************************************************************
-
-class File_DcpAm : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_DcpAm();
- ~File_DcpAm();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpCpl.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpCpl.cpp
deleted file mode 100644
index e47e241db..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpCpl.cpp
+++ /dev/null
@@ -1,416 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DCP_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_DcpCpl.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "MediaInfo/Multiple/File_DcpPkl.h"
-#include "MediaInfo/Multiple/File_Mxf.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/FileName.h"
-#include "tinyxml2.h"
-#include <list>
-using namespace tinyxml2;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-struct DcpCpl_info
-{
- Ztring FileName;
- File__ReferenceFilesHelper::references::iterator Reference;
-};
-
-//---------------------------------------------------------------------------
-extern void DcpCpl_MergeFromPkl(File__ReferenceFilesHelper* FromCpl, File__ReferenceFilesHelper* FromPkl)
-{
- map<Ztring, DcpCpl_info> Map;
- list<File__ReferenceFilesHelper::references::iterator> List;
- ZtringList ExtraFiles_Name;
- for (File__ReferenceFilesHelper::references::iterator Reference=FromPkl->References.begin(); Reference!=FromPkl->References.end(); ++Reference)
- {
- map<string, Ztring>::iterator UniqueID=Reference->Infos.find("UniqueID");
- for (size_t Pos=0; Pos<Reference->FileNames.size(); Pos++)
- if (UniqueID!=Reference->Infos.end())
- {
- Map[UniqueID->second].FileName=Reference->FileNames[Pos];
- Map[UniqueID->second].Reference=Reference;
- }
- List.push_back(Reference);
- }
-
- for (size_t References_Pos=0; References_Pos<FromCpl->References.size(); ++References_Pos)
- {
- for (size_t Pos=0; Pos<FromCpl->References[References_Pos].FileNames.size(); ++Pos)
- {
- map<Ztring, DcpCpl_info>::iterator Map_Item=Map.find(FromCpl->References[References_Pos].FileNames[Pos]);
- if (Map_Item!=Map.end())
- {
- FromCpl->References[References_Pos].FileNames[Pos]=Map_Item->second.FileName;
- FromCpl->References[References_Pos].Infos=Map_Item->second.Reference->Infos;
- for (list<File__ReferenceFilesHelper::references::iterator>::iterator Reference2=List.begin(); Reference2!=List.end(); ++Reference2)
- if (*Reference2==Map_Item->second.Reference)
- {
- List.erase(Reference2);
- break;
- }
- }
- else
- {
- FromCpl->References[References_Pos].FileNames.erase(FromCpl->References[References_Pos].FileNames.begin()+Pos);
- Pos--;
- }
- }
- for (size_t Pos=0; Pos<FromCpl->References[References_Pos].CompleteDuration.size(); ++Pos)
- {
- map<Ztring, DcpCpl_info>::iterator Map_Item=Map.find(FromCpl->References[References_Pos].CompleteDuration[Pos].FileName);
- if (Map_Item!=Map.end())
- {
- FromCpl->References[References_Pos].CompleteDuration[Pos].FileName=Map_Item->second.FileName;
- FromCpl->References[References_Pos].Infos=Map_Item->second.Reference->Infos;
- for (list<File__ReferenceFilesHelper::references::iterator>::iterator Reference2=List.begin(); Reference2!=List.end(); ++Reference2)
- if (*Reference2==Map_Item->second.Reference)
- {
- List.erase(Reference2);
- break;
- }
- }
- else
- {
- FromCpl->References[References_Pos].CompleteDuration.erase(FromCpl->References[References_Pos].CompleteDuration.begin()+Pos);
- Pos--;
- }
- }
- if (FromCpl->References[References_Pos].FileNames.empty() && FromCpl->References[References_Pos].CompleteDuration.empty())
- {
- FromCpl->References.erase(FromCpl->References.begin()+References_Pos);
- References_Pos--;
- }
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_DcpCpl::File_DcpCpl()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_DcpCpl;
- StreamIDs_Width[0]=sizeof(size_t)*2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_DcpCpl::~File_DcpCpl()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DcpCpl::Streams_Finish()
-{
- if (Config->File_IsReferenced_Get() || ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_DcpCpl::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (Config->File_IsReferenced_Get() || ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_DcpCpl::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- bool IsDcp=false, IsImf=false;
-
- XMLElement* Root=document.FirstChildElement("CompositionPlaylist");
- if (!Root)
- {
- Reject("DcpCpl");
- return false;
- }
-
- const char* Attribute=Root->Attribute("xmlns");
- if (!Attribute)
- {
- Reject("DcpCpl");
- return false;
- }
-
- if (!strcmp(Attribute, "http://www.digicine.com/PROTO-ASDCP-CPL-20040511#")
- ||!strcmp(Attribute, "http://www.smpte-ra.org/schemas/429-7/2006/CPL"))
- IsDcp=true;
- if (!strcmp(Attribute, "http://www.smpte-ra.org/schemas/2067-3/XXXX") //Some muxers use XXXX instead of year
- || !strcmp(Attribute, "http://www.smpte-ra.org/schemas/2067-3/2013"))
- IsImf=true;
-
- if (!IsDcp && !IsImf)
- {
- Reject("DcpCpl");
- return false;
- }
-
- Accept("DcpCpl");
- Fill(Stream_General, 0, General_Format, IsDcp?"DCP CPL":"IMF CPL");
- Config->File_ID_OnlyRoot_Set(false);
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- //Parsing main elements
- for (XMLElement* CompositionPlaylist_Item=Root->FirstChildElement(); CompositionPlaylist_Item; CompositionPlaylist_Item=CompositionPlaylist_Item->NextSiblingElement())
- {
- //CompositionTimecode
- if (IsImf && (!strcmp(CompositionPlaylist_Item->Value(), "CompositionTimecode") || !strcmp(CompositionPlaylist_Item->Value(), "cpl:CompositionTimecode")))
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.StreamKind=Stream_Other;
- ReferenceFile.Infos["Type"]=__T("Time code");
- ReferenceFile.Infos["Format"]=__T("CPL TC");
- ReferenceFile.Infos["TimeCode_Settings"]=__T("Striped");
- bool IsDropFrame=false;
-
- for (XMLElement* CompositionTimecode_Item=CompositionPlaylist_Item->FirstChildElement(); CompositionTimecode_Item; CompositionTimecode_Item=CompositionTimecode_Item->NextSiblingElement())
- {
- //TimecodeDropFrame
- if (!strcmp(CompositionTimecode_Item->Value(), "TimecodeDropFrame") || !strcmp(CompositionTimecode_Item->Value(), "cpl:TimecodeDropFrame"))
- {
- if (strcmp(CompositionTimecode_Item->GetText(), "") && strcmp(CompositionTimecode_Item->GetText(), "0"))
- IsDropFrame=true;
- }
-
- //TimecodeRate
- if (!strcmp(CompositionTimecode_Item->Value(), "TimecodeRate") || !strcmp(CompositionTimecode_Item->Value(), "cpl:TimecodeRate"))
- ReferenceFile.Infos["FrameRate"].From_UTF8(CompositionTimecode_Item->GetText());
-
- //TimecodeStartAddress
- if (!strcmp(CompositionTimecode_Item->Value(), "TimecodeStartAddress") || !strcmp(CompositionTimecode_Item->Value(), "cpl:TimecodeStartAddress"))
- ReferenceFile.Infos["TimeCode_FirstFrame"].From_UTF8(CompositionTimecode_Item->GetText());
- }
-
- //Adaptation
- if (IsDropFrame)
- {
- std::map<string, Ztring>::iterator Info=ReferenceFile.Infos.find("TimeCode_FirstFrame");
- if (Info!=ReferenceFile.Infos.end() && Info->second.size()>=11 && Info->second[8]!=__T(';'))
- Info->second[8]=__T(';');
- }
-
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- ReferenceFiles->References.push_back(ReferenceFile);
-
- //TODO: put this code in File__ReferenceFilesHelper so we can demux time code with the other streams
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_ID, ReferenceFile.StreamID);
- for (std::map<string, Ztring>::iterator Info=ReferenceFile.Infos.begin(); Info!=ReferenceFile.Infos.end(); ++Info)
- Fill(Stream_Other, StreamPos_Last, Info->first.c_str(), Info->second);
- }
-
- //ReelList / SegmentList
- if ((IsDcp && !strcmp(CompositionPlaylist_Item->Value(), "ReelList"))
- || (IsImf && !strcmp(CompositionPlaylist_Item->Value(), "SegmentList")))
- {
- for (XMLElement* ReelList_Item=CompositionPlaylist_Item->FirstChildElement(); ReelList_Item; ReelList_Item=ReelList_Item->NextSiblingElement())
- {
- //Reel
- if ((IsDcp && !strcmp(ReelList_Item->Value(), "Reel"))
- || (IsImf && !strcmp(ReelList_Item->Value(), "Segment")))
- {
- for (XMLElement* Reel_Item=ReelList_Item->FirstChildElement(); Reel_Item; Reel_Item=Reel_Item->NextSiblingElement())
- {
- //AssetList
- if ((IsDcp && !strcmp(Reel_Item->Value(), "AssetList"))
- || (IsImf && !strcmp(Reel_Item->Value(), "SequenceList")))
- {
- for (XMLElement* AssetList_Item=Reel_Item->FirstChildElement(); AssetList_Item; AssetList_Item=AssetList_Item->NextSiblingElement())
- {
- //File
- //if ((IsDcp && (!strcmp(AssetList_Item->Value(), "MainPicture") || !strcmp(AssetList_Item->Value(), "MainSound")))
- // || (IsImf && (!strcmp(AssetList_Item->Value(), "cc:MainImageSequence") || !strcmp(AssetList_Item->Value(), "cc:MainImage"))))
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- Ztring Asset_Id;
-
- if ((IsDcp && !strcmp(AssetList_Item->Value(), "MainPicture"))
- || (IsImf && !strcmp(AssetList_Item->Value(), "cc:MainImageSequence")))
- ReferenceFile.StreamKind=Stream_Video;
- if ((IsDcp && !strcmp(AssetList_Item->Value(), "MainSound"))
- || (IsImf && !strcmp(AssetList_Item->Value(), "cc:MainAudioSequence")))
- ReferenceFile.StreamKind=Stream_Audio;
-
- for (XMLElement* File_Item=AssetList_Item->FirstChildElement(); File_Item; File_Item=File_Item->NextSiblingElement())
- {
- //Id
- if (!strcmp(File_Item->Value(), "Id") && Asset_Id.empty())
- Asset_Id.From_UTF8(File_Item->GetText());
-
- //ResourceList
- if (IsImf && !strcmp(File_Item->Value(), "ResourceList"))
- {
- for (XMLElement* ResourceList_Item=File_Item->FirstChildElement(); ResourceList_Item; ResourceList_Item=ResourceList_Item->NextSiblingElement())
- {
- //Resource
- if (!strcmp(ResourceList_Item->Value(), "Resource"))
- {
- Ztring Resource_Id;
-
- File__ReferenceFilesHelper::reference::completeduration Resource;
- for (XMLElement* Resource_Item=ResourceList_Item->FirstChildElement(); Resource_Item; Resource_Item=Resource_Item->NextSiblingElement())
- {
- //EditRate
- if (!strcmp(Resource_Item->Value(), "EditRate"))
- {
- const char* EditRate=Resource_Item->GetText();
- Resource.IgnoreFramesRate=atof(EditRate);
- const char* EditRate2=strchr(EditRate, ' ');
- if (EditRate2!=NULL)
- {
- float64 EditRate2f=atof(EditRate2);
- if (EditRate2f)
- Resource.IgnoreFramesRate/=EditRate2f;
- }
- }
-
- //EntryPoint
- if (!strcmp(Resource_Item->Value(), "EntryPoint"))
- Resource.IgnoreFramesBefore=atoi(Resource_Item->GetText());
-
- //Id
- if (!strcmp(File_Item->Value(), "Id") && Resource_Id.empty())
- Resource_Id.From_UTF8(File_Item->GetText());
-
- //SourceDuration
- if (!strcmp(Resource_Item->Value(), "SourceDuration"))
- Resource.IgnoreFramesAfterDuration=atoi(Resource_Item->GetText());
-
- //TrackFileId
- if (!strcmp(Resource_Item->Value(), "TrackFileId"))
- Resource.FileName.From_UTF8(Resource_Item->GetText());
- }
-
- if (Resource.FileName.empty())
- Resource.FileName=Resource_Id;
- ReferenceFile.CompleteDuration.push_back(Resource);
- }
- }
- }
- }
-
- if (ReferenceFile.CompleteDuration.empty())
- {
- File__ReferenceFilesHelper::reference::completeduration Resource;
- Resource.FileName=Asset_Id;
- ReferenceFile.CompleteDuration.push_back(Resource);
- }
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- }
- }
- }
- }
- }
- }
- }
-
- Element_Offset=File_Size;
-
- //Getting files names
- if (!Config->File_IsReferenced_Get())
- {
- FileName Directory(File_Name);
- ZtringList List;
- if (IsImf)
- List=Dir::GetAllFileNames(Directory.Path_Get()+PathSeparator+__T("PKL_*.xml"), Dir::Include_Files);
- if (IsDcp || List.empty())
- List=Dir::GetAllFileNames(Directory.Path_Get()+PathSeparator+__T("*_pkl.xml"), Dir::Include_Files);
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- MediaInfo_Internal MI;
- MI.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- MI.Option(__T("File_IsReferenced"), __T("1"));
- size_t MiOpenResult=MI.Open(List[Pos]);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (MiOpenResult
- && (MI.Get(Stream_General, 0, General_Format)==__T("DCP PKL")
- || MI.Get(Stream_General, 0, General_Format)==__T("IMF PKL")))
- {
- DcpCpl_MergeFromPkl(ReferenceFiles, ((File_DcpCpl*)MI.Info)->ReferenceFiles);
- }
- }
- }
-
- ReferenceFiles->FilesForStorage=true;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_DCP_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpCpl.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpCpl.h
deleted file mode 100644
index 0f792ddd2..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpCpl.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DCP/IMF Composition Playlist files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DcpCplH
-#define MediaInfo_File_DcpCplH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_DcpCpl
-//***************************************************************************
-
-class File_DcpCpl : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_DcpCpl();
- ~File_DcpCpl();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
- friend class File_DcpAm; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
- friend class File_DcpPkl; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpPkl.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpPkl.cpp
deleted file mode 100644
index cfa03222c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpPkl.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DCP_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_DcpPkl.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "MediaInfo/Multiple/File_DcpCpl.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/FileName.h"
-#include "tinyxml2.h"
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-extern void DcpCpl_MergeFromPkl(File__ReferenceFilesHelper* FromCpl, File__ReferenceFilesHelper* FromPkl);
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_DcpPkl::File_DcpPkl()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_DcpPkl;
- StreamIDs_Width[0]=sizeof(size_t)*2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- ReferenceFiles=NULL;
- HasCpl=false;
-}
-
-//---------------------------------------------------------------------------
-File_DcpPkl::~File_DcpPkl()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DcpPkl::Streams_Finish()
-{
- if (Config->File_IsReferenced_Get() || ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_DcpPkl::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (Config->File_IsReferenced_Get() || ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_DcpPkl::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- XMLElement* PackingList=document.FirstChildElement("PackingList");
- if (!PackingList)
- {
- Reject("DcpPkl");
- return false;
- }
-
- const char* Attribute=PackingList->Attribute("xmlns");
- if (!Attribute)
- {
- Reject("DcpPkl");
- return false;
- }
-
- if (strcmp(Attribute, "http://www.digicine.com/PROTO-ASDCP-PKL-20040311#")
- && strcmp(Attribute, "http://www.smpte-ra.org/schemas/429-8/2007/PKL"))
- {
- Reject("DcpPkl");
- return false;
- }
-
- Accept("DcpPkl");
- Fill(Stream_General, 0, General_Format, "DCP PKL");
- Config->File_ID_OnlyRoot_Set(false);
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
- Ztring CPL_FileName;
-
- //Parsing main elements
- for (XMLElement* PackingList_Item=PackingList->FirstChildElement(); PackingList_Item; PackingList_Item=PackingList_Item->NextSiblingElement())
- {
- //AssetList
- if (!strcmp(PackingList_Item->Value(), "AssetList"))
- {
- for (XMLElement* AssetList_Item=PackingList_Item->FirstChildElement(); AssetList_Item; AssetList_Item=AssetList_Item->NextSiblingElement())
- {
- //Asset
- if (!strcmp(AssetList_Item->Value(), "Asset"))
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- bool IsCPL=false;
- bool PreviousFileNameIsAnnotationText=false;
-
- for (XMLElement* File_Item=AssetList_Item->FirstChildElement(); File_Item; File_Item=File_Item->NextSiblingElement())
- {
- //Id
- if (!strcmp(File_Item->Value(), "Id"))
- ReferenceFile.Infos["UniqueID"].From_UTF8(File_Item->GetText());
-
- //Type
- if (!strcmp(File_Item->Value(), "Type"))
- {
- if (!strcmp(File_Item->GetText(), "application/x-smpte-mxf;asdcpKind=Picture"))
- ReferenceFile.StreamKind=Stream_Video;
- else if (!strcmp(File_Item->GetText(), "application/x-smpte-mxf;asdcpKind=Sound"))
- ReferenceFile.StreamKind=Stream_Audio;
- else if (!strcmp(File_Item->GetText(), "text/xml;asdcpKind=CPL"))
- {
- HasCpl=IsCPL=true;
- }
- else
- ReferenceFile.StreamKind=Stream_Other;
- }
-
- //Id
- if (!strcmp(File_Item->Value(), "OriginalFileName")
- || (ReferenceFile.FileNames.empty() && !strcmp(File_Item->Value(), "AnnotationText"))) // Annotation contains file name (buggy IMF file)
- {
- if (PreviousFileNameIsAnnotationText)
- ReferenceFile.FileNames.clear(); // Annotation is something else, no need of it
- if (!strcmp(File_Item->Value(), "AnnotationText"))
- PreviousFileNameIsAnnotationText=true;
- ReferenceFile.FileNames.push_back(Ztring().From_UTF8(File_Item->GetText()));
- string Text=File_Item->GetText();
- if (Text.size()>=8
- && (Text.find("_cpl.xml")==Text.size()-8)
- || (Text.find("CPL_")==0 && Text.find(".xml")==Text.size()-4))
- {
- HasCpl=IsCPL=true;
- ReferenceFile.StreamKind=Stream_Max;
- }
- }
- }
-
- if (IsCPL)
- {
- if (CPL_FileName.empty() && !ReferenceFile.FileNames.empty())
- CPL_FileName=ReferenceFile.FileNames[0]; //Using only the first CPL file meet
- }
- else
- {
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- }
- }
- }
- }
-
- Element_Offset=File_Size;
-
- //Getting links between files
- if (!CPL_FileName.empty() && !Config->File_IsReferenced_Get())
- {
- FileName Directory(File_Name);
- if (CPL_FileName.find(__T("file://"))==0 && CPL_FileName.find(__T("file:///"))==string::npos)
- CPL_FileName.erase(0, 7); //TODO: better handling of relative and absolute file naes
- MediaInfo_Internal MI;
- MI.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- MI.Option(__T("File_IsReferenced"), __T("1"));
- size_t MiOpenResult=MI.Open(Directory.Path_Get()+PathSeparator+CPL_FileName);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (MiOpenResult
- && (MI.Get(Stream_General, 0, General_Format)==__T("DCP CPL")
- || MI.Get(Stream_General, 0, General_Format)==__T("IMF CPL")))
- {
- DcpCpl_MergeFromPkl(((File_DcpCpl*)MI.Info)->ReferenceFiles, ReferenceFiles);
- ReferenceFiles->References=((File_DcpCpl*)MI.Info)->ReferenceFiles->References;
- if (MI.Get(Stream_General, 0, General_Format)==__T("IMF CPL"))
- Fill(Stream_General, 0, General_Format, "IMF PKL", Unlimited, true, true);
-
- for (size_t Pos=0; Pos<MI.Count_Get(Stream_Other); ++Pos)
- {
- Stream_Prepare(Stream_Other);
- Merge(*MI.Info, Stream_Other, Pos, StreamPos_Last);
- }
- }
- }
-
- ReferenceFiles->FilesForStorage=true;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_DCP_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpPkl.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpPkl.h
deleted file mode 100644
index a30015a3f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DcpPkl.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DCP/IMF Package List files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DcpPklH
-#define MediaInfo_File_DcpPklH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_DcpPkl
-//***************************************************************************
-
-class File_DcpPkl : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_DcpPkl();
- ~File_DcpPkl();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
- bool HasCpl;
- friend class File_DpcCpl; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dpg.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dpg.cpp
deleted file mode 100644
index 12cbc4cba..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dpg.cpp
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Format:
-// * File header
-// * MPEG Audio stream
-// * MPEG Video stream
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DPG_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Dpg.h"
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Dpg::File_Dpg()
-{
- //Data
- Parser=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_Dpg::~File_Dpg()
-{
- delete Parser; //Parser=NULL;
-}
-
-//***************************************************************************
-// Buffer - File offset
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Dpg::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<0x14)
- return false; //Must wait for more data
-
- if ( CC4(Buffer )!=0x44504730 //"DPG0"
- || LittleEndian2int32u(Buffer+0x10)!=0) //Zero
- {
- Reject("DPG");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Dpg::FileHeader_Parse()
-{
- //Parsing
- int32u FrameCount, FrameRate, SamplingRate;
- Skip_C4( "Signature");
- Get_L4 (FrameCount, "Frame count");
- Get_L4 (FrameRate, "Frame rate"); Param_Info2(FrameRate/0x100, " fps");
- Get_L4 (SamplingRate, "Sampling rate");
- Skip_L4( "0x00000000");
- Get_L4 (Audio_Offset, "Audio Offset");
- Get_L4 (Audio_Size, "Audio Size");
- Get_L4 (Video_Offset, "Video Offset");
- Get_L4 (Video_Size, "Video Size");
-
- FILLING_BEGIN();
- Accept("DPG");
-
- Fill(Stream_General, 0, General_Format, "DPG");
-
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_FrameRate, (float)(FrameRate/0x100), 3);
- Fill(Stream_Video, 0, Video_FrameCount, FrameCount);
- Fill(Stream_Video, 0, Video_StreamSize, Video_Size);
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_SamplingRate, SamplingRate);
- Fill(Stream_Audio, 0, Audio_StreamSize, Audio_Size);
-
- //Positionning
- #if defined(MEDIAINFO_MPEGA_YES)
- Parser=new File_Mpega();
- Open_Buffer_Init(Parser);
- GoTo(Audio_Offset, "DPG");
- #elif defined(MEDIAINFO_MPEGV_YES)
- Audio_Size=0;
- Parser=new File_Mpegv();
- Open_Buffer_Init(Parser);
- GoTo(Video_Offset, "DPG");
- #else
- Finish("DPG");
- #endif
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dpg::Read_Buffer_Unsynched()
-{
- if (Parser)
- Parser->Open_Buffer_Unsynch();
-}
-
-//---------------------------------------------------------------------------
-void File_Dpg::Read_Buffer_Continue()
-{
- if (!Parser)
- return; //Not ready
-
- #if defined(MEDIAINFO_MPEGA_YES) || defined(MEDIAINFO_MPEGV_YES)
- if (Audio_Size)
- {
- #if defined(MEDIAINFO_MPEGA_YES)
- Open_Buffer_Continue(Parser, (size_t)((File_Offset+Buffer_Size<Audio_Offset+Audio_Size)?Buffer_Size:(Audio_Offset+Audio_Size-File_Offset)));
- if (Parser->Status[IsAccepted])
- {
- Parser->Open_Buffer_Unsynch();
- Finish(Parser);
- Merge(*Parser, Stream_Audio, 0, 0);
- #if defined(MEDIAINFO_MPEGV_YES)
- Audio_Size=0;
- Data_GoTo(Video_Offset, "DPG");
- delete Parser; Parser=new File_Mpegv();
- Open_Buffer_Init(Parser);
- #else
- Finish("DPG");
- #endif
- }
- #endif
- }
- else
- {
- #if defined(MEDIAINFO_MPEGV_YES)
- Open_Buffer_Continue(Parser, (size_t)((File_Offset+Buffer_Size<Video_Offset+Video_Size)?Buffer_Size:(Video_Offset+Video_Size-File_Offset)));
- if (Parser->Status[IsAccepted])
- {
- //Merging
- Parser->Open_Buffer_Unsynch();
- Finish(Parser);
- Merge(*Parser, Stream_Video, 0, 0);
-
- Finish("DPG");
- }
- #endif
- }
- #endif //defined(MEDIAINFO_MPEGA_YES) || defined(MEDIAINFO_MPEGV_YES)
-
- //Positioning
- Buffer_Offset=Buffer_Size; //We have already parsed this data
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_DPG_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dpg.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dpg.h
deleted file mode 100644
index 852d4a4af..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dpg.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DPG (Nintendo DS) files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DpgH
-#define MediaInfo_File_DpgH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Dpg
-//***************************************************************************
-
-class File_Dpg : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Dpg();
- ~File_Dpg();
-
-private :
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer
- void Read_Buffer_Unsynched();
- void Read_Buffer_Continue();
-
- //Elements
- void Audio();
- void Video();
-
- //Data
- File__Analyze* Parser;
-
- //Temp
- int32u Audio_Offset;
- int32u Audio_Size;
- int32u Video_Offset;
- int32u Video_Size;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif.cpp
deleted file mode 100644
index 696e97239..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif.cpp
+++ /dev/null
@@ -1,1853 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DVDIF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_DvDif.h"
-#if defined(MEDIAINFO_EIA608_YES)
- #include "MediaInfo/Text/File_Eia608.h"
-#endif
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#if MEDIAINFO_SEEK
- #include "MediaInfo/MediaInfo_Internal.h"
-#endif //MEDIAINFO_SEEK
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-const char* Dv_sct[]=
-{
- "Header",
- "Subcode",
- "VAUX",
- "Audio",
- "Video",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_Ssyb_Pc0(int8u Pc0)
-{
- switch (Pc0)
- {
- case 0x13 : return "Timecode";
- case 0x14 : return "Binary group";
- case 0x50 :
- case 0x60 : return "Source";
- case 0x51 :
- case 0x61 : return "Source control";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Dv_Disp[]=
-{
- "4/3", //S306M, S314M
- "16/9", //S306M
- "16/9", //S306M, S314M
- "4/3", //Which spec?
- "",
- "",
- "",
- "16/9 or 4/3 depends of ssyb AP3", //Which spec?
-};
-
-//---------------------------------------------------------------------------
-const int32u Dv_Audio_SamplingRate[]=
-{
- 48000,
- 44100,
- 32000,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_StereoMode[]=
-{
- "Multi-Stero",
- "Lumped",
-};
-
-//---------------------------------------------------------------------------
-const int32u Dv_Audio_BitDepth[]=
-{
- 16,
- 12,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-const int8u Dv_ChannelsPerBlock[]=
-{
- 1,
- 2,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_Pair[]=
-{
- "One pair of channels",
- "Independent channels",
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_CopyGenerationManagementSystem[]=
-{
- "Unrestricted",
- "Not used",
- "One generation only",
- "No copy",
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_InputType[]=
-{
- "Analog",
- "Digital",
- "Reserved",
- "No information",
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_CompressionTimes[]=
-{
- "Once",
- "Twice",
- "Three+",
- "No information",
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_Emphasis[]=
-{
- "Enphasis off",
- "Enphasis on",
- "Reserved",
- "Reserved",
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_consumer_camera_1_ae_mode[]=
-{
- "full automatic",
- "gain priority mode",
- "shutter priority mode",
- "iris priority mode",
- "manual",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "", //no info
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_consumer_camera_1_wb_mode[]=
-{
- "automatic",
- "hold",
- "one push",
- "pre-set",
- "",
- "",
- "",
- "", //no info
-};
-
-//---------------------------------------------------------------------------
-const char* Dv_consumer_camera_1_white_balance(int8u white_balance)
-{
- switch (white_balance)
- {
- case 0x00 : return "candle";
- case 0x01 : return "incandescent lamp";
- case 0x02 : return "low color temperature; florescent lamp";
- case 0x03 : return "high color temperature; florescent lamp";
- case 0x04 : return "sunlight";
- case 0x05 : return "cloudy weather";
- case 0x1F : return ""; //No info
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Dv_consumer_camera_1_fcm[]=
-{
- "auto focus",
- "manual focus",
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_DvDif::File_DvDif()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("DV");
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
-
- //In
- Frame_Count_Valid=2;
- AuxToAnalyze=0x00; //No Aux to analyze
- IgnoreAudio=false;
-
- //Temp
- FrameSize_Theory=0;
- Duration=0;
- TimeCode_FirstFrame_ms=(int64u)-1;
- Synched_Test_Reset();
- DSF_IsValid=false;
- APT=0xFF; //Impossible
- video_source_stype=0xFF;
- audio_source_stype=0xFF;
- ssyb_AP3=0xFF;
- TF1=false; //Valid by default, for direct analyze
- TF2=false; //Valid by default, for direct analyze
- TF3=false; //Valid by default, for direct analyze
- system=false;
- FSC_WasSet=false;
- FSP_WasNotSet=false;
- video_sourcecontrol_IsParsed=false;
- audio_locked=false;
-
- #if MEDIAINFO_SEEK
- Duration_Detected=false;
- #endif //MEDIAINFO_SEEK
-
- #ifdef MEDIAINFO_DVDIF_ANALYZE_YES
- Analyze_Activated=false;
- video_source_Detected=false;
- Speed_FrameCount=0;
- Speed_FrameCount_Video_STA_Errors=0;
- Speed_FrameCount_Audio_Errors.resize(8);
- Speed_FrameCount_Timecode_Incoherency=0;
- Speed_FrameCount_Contains_NULL=0;
- Speed_Contains_NULL=0;
- Speed_FrameCount_Arb_Incoherency=0;
- Speed_FrameCount_Stts_Fluctuation=0;
- System_IsValid=false;
- Frame_AtLeast1DIF=false;
- QU=(int8u)-1;
- CH_IsPresent.resize(8);
- Speed_TimeCode_IsValid=false;
- Speed_Arb_IsValid=false;
- Mpeg4_stts=NULL;
- Mpeg4_stts_Pos=0;
- Stats.resize(10);
- Stats_Total=0;
- Stats_Total_WithoutArb=0;
- Stats_Total_AlreadyDetected=false;
- #endif //MEDIAINFO_DVDIF_ANALYZE_YES
-}
-
-//---------------------------------------------------------------------------
-File_DvDif::~File_DvDif()
-{
- for (size_t Pos=0; Pos<Streams_Audio.size(); Pos++)
- delete Streams_Audio[Pos];
-
- #if defined(MEDIAINFO_EIA608_YES)
- for (size_t Pos=0; Pos<CC_Parsers.size(); Pos++)
- delete CC_Parsers[Pos]; //CC_Parsers[Pos]=NULL;
- #endif
- #if defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- delete Mpeg4_stts; //Mpeg4_stts=NULL;
- #endif
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DvDif::Streams_Fill()
-{
- Fill(Stream_General, 0, General_Format, "DV", Unlimited, true, true);
-
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "DV");
- Fill(Stream_Video, 0, Video_Codec, "DV");
- Fill(Stream_Video, 0, Video_Standard, system?"PAL":"NTSC");
- Fill(Stream_Video, 0, Video_BitDepth, 8);
- bool IsHd=false;
- float FrameRate_Multiplicator=1;
- switch (video_source_stype)
- {
- case 0x00 :
- case 0x04 :
- Fill(Stream_Video, 0, Video_Width, 720);
- Fill(Stream_Video, 0, Video_Height, system?576:480);
- break;
- case 0x14 :
- case 0x15 :
- Fill(Stream_Video, 0, Video_Width, system?1440:1280);
- Fill(Stream_Video, 0, Video_Height, video_source_stype==0x14?1080:1035);
- IsHd=true;
- break;
- case 0x18 :
- Fill(Stream_Video, 0, Video_Width, 960);
- Fill(Stream_Video, 0, Video_Height, 720);
- FrameRate_Multiplicator=2;
- IsHd=true;
- break;
- default : ;
- }
- Fill(Stream_Video, 0, Video_FrameRate, (system?25.000:29.970)*FrameRate_Multiplicator);
- Fill(Stream_Video, 0, Video_FrameRate_Mode, "CFR");
- if (video_sourcecontrol_IsParsed)
- {
- if (FSC_WasSet && FSP_WasNotSet)
- {
- switch (video_source_stype)
- {
- case 0x14 :
- case 0x15 :
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- if (FieldOrder_FF)
- Fill(Stream_Video, 0, Video_ScanOrder, FieldOrder_FS?"TFF":"BFF");
- else
- Fill(Stream_Video, 0, Video_ScanOrder, FieldOrder_FS?"Top field only":"Bottom field only");
- Fill(Stream_Video, 0, Video_Interlacement, "Interlaced");
- break;
- case 0x18 :
- Fill(Stream_Video, 0, Video_ScanType, "Progressive");
- Fill(Stream_Video, 0, Video_Interlacement, "Progressive");
- break;
- default : ;
- }
- }
- else if (Interlaced)
- {
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- if (FieldOrder_FF)
- Fill(Stream_Video, 0, Video_ScanOrder, FieldOrder_FS?"BFF":"TFF");
- else
- Fill(Stream_Video, 0, Video_ScanOrder, FieldOrder_FS?"Bottom field only":"Top field only");
- Fill(Stream_Video, 0, Video_Interlacement, "Interlaced");
- }
- else
- {
- Fill(Stream_Video, 0, Video_ScanType, Interlaced?"Interlaced":"Progressive");
- Fill(Stream_Video, 0, Video_Interlacement, Interlaced?"Interlaced":"PFF");
- }
- switch (aspect)
- {
- case 0 :
- case 4 : Fill(Stream_Video, 0, Video_DisplayAspectRatio, 4.0/3.0, 3, true); break;
- case 1 :
- case 2 : Fill(Stream_Video, 0, Video_DisplayAspectRatio, 16.0/9.0, 3, true); break;
- case 7 : switch (ssyb_AP3)
- {
- case 0 : Fill(Stream_Video, 0, Video_DisplayAspectRatio, 16.0/9.0, 3, true); break;
- case 7 : Fill(Stream_Video, 0, Video_DisplayAspectRatio, 4.0/3.0, 3, true); break;
- default: ; //No indication of aspect ratio?
- }
- default: ;
- }
- }
-
- if (!FSC_WasSet) //Original DV 25 Mbps
- {
- if (system==false) //NTSC
- {
- switch (video_source_stype)
- {
- case 0 : Fill(Stream_Video, 0, Video_Colorimetry, "4:1:1"); break; //NTSC 25 Mbps
- default : ;
- }
- }
- else //PAL
- {
- switch (video_source_stype)
- {
- case 0 : if (APT==0)
- Fill(Stream_Video, 0, Video_Colorimetry, "4:2:0"); //PAL 25 Mbps (IEC 61834)
- else
- Fill(Stream_Video, 0, Video_Colorimetry, "4:1:1"); //PAL 25 Mbps (SMPTE 314M)
- break;
- default : ;
- }
- }
- }
- else //DV 50 Mbps and 100 Mbps
- Fill(Stream_Video, 0, Video_Colorimetry, "4:2:2");
-
- if (FrameSize_Theory && !IsHd)
- {
- float64 OverallBitRate=FrameSize_Theory*(DSF?((float64)25.000):((float64)30000/1001))*8;
- if (FSC_WasSet)
- {
- if (FSP_WasNotSet)
- OverallBitRate*=4; //DV100
- else
- OverallBitRate*=2; //DV50
- }
- if (OverallBitRate)
- {
- if (IsSub)
- Fill(Stream_Video, 0, Video_BitRate_Encoded, OverallBitRate, 0);
- else
- Fill(Stream_General, 0, General_OverallBitRate, OverallBitRate, 0);
- Fill(Stream_Video, 0, (FSC_WasSet && FSP_WasNotSet)?Video_BitRate_Maximum:Video_BitRate, OverallBitRate*134/150*76/80, 0); //134 Video DIF from 150 DIF, 76 bytes from 80 byte DIF
- }
- }
-
- if (!Config->File_DvDif_DisableAudioIfIsInContainer_Get())
- for (size_t Pos=0; Pos<Streams_Audio.size(); Pos++)
- {
- Stream_Prepare(Stream_Audio);
- for (std::map<std::string, Ztring>::iterator Info=Streams_Audio[Pos]->Infos.begin(); Info!=Streams_Audio[Pos]->Infos.end(); ++Info)
- Fill(Stream_Audio, StreamPos_Last, Info->first.c_str(), Info->second, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate_Encoded, 0);
- }
-
- if (Stream_BitRateFromContainer && Retrieve(Stream_Video, 0, Video_BitRate).empty())
- {
- if (Stream_BitRateFromContainer>=28800000*0.98 && Stream_BitRateFromContainer<=28800000*1.02)
- {
- Fill(Stream_Video, 0, Video_BitRate, ((float64)28800000)*134/150*76/80, 0);
- Fill(Stream_Video, 0, Video_BitRate_Encoded, 28800000);
- }
- if (Stream_BitRateFromContainer>=57600000*0.98 && Stream_BitRateFromContainer<=57600000*1.02)
- {
- Fill(Stream_Video, 0, Video_BitRate, ((float64)57600000)*134/150*76/80, 0);
- Fill(Stream_Video, 0, Video_BitRate_Encoded, 57600000);
- }
- if (Stream_BitRateFromContainer>=115200000*0.98 && Stream_BitRateFromContainer<=115200000*1.02)
- {
- Fill(Stream_Video, 0, Video_BitRate, ((float64)115200000)*134/150*76/80, 0);
- Fill(Stream_Video, 0, Video_BitRate_Encoded, 115200000);
- }
- }
-
- //Library settings
- Fill(Stream_Video, 0, Video_Encoded_Library_Settings, Encoded_Library_Settings);
-
- //Profile
- if (FSC_WasSet || IsHd)
- {
- if (FSP_WasNotSet || IsHd)
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "DVCPRO HD");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "DVCPRO HD");
- Clear(Stream_Video, 0, Video_BitDepth); //MXF files say that DVCPRO HD streams are 8 or 10 bits, exact?
- }
- else
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "DVCPRO 50");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "DVCPRO 50");
- Fill(Stream_Video, 0, Video_BitRate_Mode, "CBR");
- }
- }
- else if (audio_locked || (Retrieve(Stream_Video, 0, Video_Standard)==__T("PAL") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:1:1")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "DVCPRO");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "DVCPRO");
- Fill(Stream_Video, 0, Video_BitRate_Mode, "CBR");
- }
- else
- Fill(Stream_Video, 0, Video_BitRate_Mode, "CBR");
-
- //Delay
- if (TimeCode_FirstFrame_ms!=(int64u)-1)
- {
- Fill(Stream_Video, 0, Video_Delay, TimeCode_FirstFrame_ms);
- if (TimeCode_FirstFrame.size()==11)
- Fill(Stream_Video, 0, Video_Delay_DropFrame, TimeCode_FirstFrame[8]==';'?"Yes":"No");
- Fill(Stream_Video, 0, Video_Delay_Source, "Stream");
- Fill(Stream_Video, 0, Video_TimeCode_FirstFrame, TimeCode_FirstFrame.c_str());
- Fill(Stream_Video, 0, Video_TimeCode_Source, "Subcode time code");
- for (size_t Pos=0; Pos<Count_Get(Stream_Audio); Pos++)
- {
- Fill(Stream_Audio, Pos, Audio_Delay, TimeCode_FirstFrame_ms);
- Fill(Stream_Audio, Pos, Audio_Delay_Source, "Stream");
- }
- }
-
- #if defined(MEDIAINFO_EIA608_YES)
- for (size_t Pos=0; Pos<CC_Parsers.size(); Pos++)
- if (CC_Parsers[Pos] && CC_Parsers[Pos]->Status[IsAccepted])
- {
- Finish(CC_Parsers[Pos]);
- for (size_t Pos2=0; Pos2<CC_Parsers[Pos]->Count_Get(Stream_Text); Pos2++)
- {
- Stream_Prepare(Stream_Text);
- Merge(*CC_Parsers[Pos], Stream_Text, Pos2, StreamPos_Last);
- Fill(Stream_Text, StreamPos_Last, Text_ID, CC_Parsers[Pos]->Retrieve(Stream_Text, Pos2, Text_ID), true);
- }
- }
- #endif //defined(MEDIAINFO_EIA608_YES)
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::Streams_Finish()
-{
- if (!Recorded_Date_Date.empty())
- {
- Ztring Recorded_Date(Recorded_Date_Date);
- if (Recorded_Date_Time.size()>4)
- {
- Recorded_Date+=__T(" ");
- Recorded_Date+=Recorded_Date_Time;
- }
- if (Count_Get(Stream_General)==0)
- Stream_Prepare(Stream_General);
- Fill(Stream_General, 0, General_Recorded_Date, Recorded_Date, true);
- }
- if (!IsSub && Duration)
- Fill(Stream_General, 0, General_Duration, Duration);
-
- #ifdef MEDIAINFO_DVDIF_ANALYZE_YES
- if (Config->File_DvDif_Analysis_Get())
- {
- //Errors stats
- Status[IsFinished]=true; //We need to fill it before the call to Errors_Stats_Update
- Errors_Stats_Update();
- Errors_Stats_Update_Finnish();
- }
- #endif //MEDIAINFO_DVDIF_ANALYZE_YES
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_DvDif::FileHeader_Begin()
-{
- //Must have enough buffer for having header
- if (Buffer_Size<8)
- return false; //Must wait for more data
-
- //False positives detection: detect some headers from other files, DV parser is not smart enough
- if (CC4(Buffer)==0x52494646 //RIFF
- || CC4(Buffer+4)==0x66747970 //ftyp
- || CC4(Buffer+4)==0x66726565 //free
- || CC4(Buffer+4)==0x6D646174 //mdat
- || CC4(Buffer+4)==0x6D6F6F76 //moov
- || CC4(Buffer+4)==0x736B6970 //skip
- || CC4(Buffer+4)==0x77696465 //wide
- || CC4(Buffer)==0x060E2B34) //MXF begin
- {
- Finish();
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_DvDif::Synchronize()
-{
- if (AuxToAnalyze)
- {
- Accept();
- return true;
- }
-
- while (Buffer_Offset+8*80<=Buffer_Size //8 blocks
- && !((Buffer[Buffer_Offset+0*80]&0xE0)==0x00 && (Buffer[Buffer_Offset+0*80+1]&0xF0)==0x00 && Buffer[Buffer_Offset+0*80+2]==0x00 //Header 0
- && (Buffer[Buffer_Offset+1*80]&0xE0)==0x20 && (Buffer[Buffer_Offset+1*80+1]&0xF0)==0x00 && Buffer[Buffer_Offset+1*80+2]==0x00 //Subcode 0
- && (Buffer[Buffer_Offset+2*80]&0xE0)==0x20 && (Buffer[Buffer_Offset+2*80+1]&0xF0)==0x00 && Buffer[Buffer_Offset+2*80+2]==0x01 //Subcode 1
- && (Buffer[Buffer_Offset+3*80]&0xE0)==0x40 && (Buffer[Buffer_Offset+3*80+1]&0xF0)==0x00 && Buffer[Buffer_Offset+3*80+2]==0x00 //VAUX 0
- && (Buffer[Buffer_Offset+4*80]&0xE0)==0x40 && (Buffer[Buffer_Offset+4*80+1]&0xF0)==0x00 && Buffer[Buffer_Offset+4*80+2]==0x01 //VAUX 1
- && (Buffer[Buffer_Offset+5*80]&0xE0)==0x40 && (Buffer[Buffer_Offset+5*80+1]&0xF0)==0x00 && Buffer[Buffer_Offset+5*80+2]==0x02 //VAUX 2
- && (Buffer[Buffer_Offset+6*80]&0xE0)==0x60 && (Buffer[Buffer_Offset+6*80+1]&0xF0)==0x00 && Buffer[Buffer_Offset+6*80+2]==0x00 //Audio 0
- && (Buffer[Buffer_Offset+7*80]&0xE0)==0x80 && (Buffer[Buffer_Offset+7*80+1]&0xF0)==0x00 && Buffer[Buffer_Offset+7*80+2]==0x00)) //Video 0
- Buffer_Offset++;
-
- if (Buffer_Offset+8*80>Buffer_Size)
- return false;
-
- if (!Status[IsAccepted])
- Accept();
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_DvDif::Synched_Test()
-{
- if (AuxToAnalyze)
- return true;
-
- //Must have enough buffer for having header
- if (Buffer_Offset+80>Buffer_Size)
- return false;
-
- //NULL blocks
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x00)
- return true;
-
- SCT =(Buffer[Buffer_Offset ]&0xE0)>>5;
- DBN = Buffer[Buffer_Offset+2];
-
- //DIF Sequence Numbers
- if (DSF_IsValid)
- {
- if (Dseq_Old!=Dseq)
- {
- if (Dseq==0
- && !(!DSF && Dseq_Old==9)
- && !( DSF && Dseq_Old==11))
- {
- if (!Status[IsAccepted])
- Trusted_IsNot("Wrong order");
- else
- Synched_Test_Reset();
- }
- Dseq_Old=Dseq;
- }
- }
-
- //DIF Block Numbers
- if (SCT!=(int8u)-1)
- {
- int8u Number=DBN_Olds[SCT]+1;
- switch (SCT)
- {
- case 0 : //Header
- if (SCT_Old!=4
- || DBN!=0)
- {
- if (!Status[IsAccepted])
- Trusted_IsNot("Wrong order");
- else
- Synched_Test_Reset();
- }
- break;
- case 1 : //Subcode
- if (!((DBN==0 && SCT_Old==0) || (DBN!=0 && SCT_Old==1))
- || (Number!=DBN && !(Number==2 && DBN==0)))
- {
- if (!Status[IsAccepted])
- Trusted_IsNot("Wrong order");
- else
- Synched_Test_Reset();
- }
- break;
- case 2 : //VAUX
- if (!((DBN==0 && SCT_Old==1) || (DBN!=0 && SCT_Old==2))
- || (Number!=DBN && !(Number==3 && DBN==0)))
- {
- if (!Status[IsAccepted])
- Trusted_IsNot("Wrong order");
- else
- Synched_Test_Reset();
- }
- break;
- case 3 : //Audio
- if (!((DBN==0 && SCT_Old==2) || (DBN!=0 && SCT_Old==4))
- || (Number!=DBN && !(Number==9 && DBN==0)))
- {
- if (!Status[IsAccepted])
- Trusted_IsNot("Wrong order");
- else
- Synched_Test_Reset();
- }
- break;
- case 4 : //Video
- if (!(SCT_Old==3 || SCT_Old==4)
- || (Number!=DBN && !(Number==135 && DBN==0)))
- {
- if (!Status[IsAccepted])
- Trusted_IsNot("Wrong order");
- else
- Synched_Test_Reset();
- }
- break;
- default: ;
- }
-
- if (SCT!=(int8u)-1)
- {
- SCT_Old=SCT;
- DBN_Olds[SCT]=DBN;
- }
- }
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::Synched_Test_Reset()
-{
- //Temp
- SCT=(int8u)-1;
- SCT_Old=4; //Video
- DBN_Olds[0]=0;
- DBN_Olds[1]=1; //SubCode
- DBN_Olds[2]=2; //Vaux
- DBN_Olds[3]=8; //Audio
- DBN_Olds[4]=134; //Video
- DBN_Olds[5]=0;
- DBN_Olds[6]=0;
- DBN_Olds[7]=0;
-
- //Synch
- Synched=false;
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::Synched_Init()
-{
- //FrameInfo
- if (FrameInfo.DTS==(int64u)-1)
- FrameInfo.DTS=0; //No DTS in container
- if (FrameInfo.PTS==(int64u)-1)
- FrameInfo.PTS=0; //No PTS in container
- if (Frame_Count_NotParsedIncluded==(int64u)-1)
- Frame_Count_NotParsedIncluded=0; //No Frame_Count_NotParsedIncluded in the container
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_DvDif::Demux_UnpacketizeContainer_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+8*80>Buffer_Size)
- return false;
-
- if ((Buffer[Buffer_Offset]&0xE0)==0x00 //Speed up the parsing
- && (CC3(Buffer+Buffer_Offset+0*80)&0xE0FCFF)==0x000400 //Header 0 (with FSC==false and FSP==true)
- && (CC3(Buffer+Buffer_Offset+1*80)&0xE0F0FF)==0x200000 //Subcode 0
- && (CC3(Buffer+Buffer_Offset+2*80)&0xE0F0FF)==0x200001 //Subcode 1
- && (CC3(Buffer+Buffer_Offset+3*80)&0xE0F0FF)==0x400000 //VAUX 0
- && (CC3(Buffer+Buffer_Offset+4*80)&0xE0F0FF)==0x400001 //VAUX 1
- && (CC3(Buffer+Buffer_Offset+5*80)&0xE0F0FF)==0x400002 //VAUX 2
- && (CC3(Buffer+Buffer_Offset+6*80)&0xE0F0FF)==0x600000 //Audio 0
- && (CC3(Buffer+Buffer_Offset+7*80)&0xE0F0FF)==0x800000) //Video 0
- {
- if (Demux_Offset==0)
- {
- Demux_Offset=Buffer_Offset+1;
- }
-
- while (Demux_Offset+8*80<=Buffer_Size //8 blocks
- && !((Buffer[Demux_Offset]&0xE0)==0x00 //Speed up the parsing
- && (CC3(Buffer+Demux_Offset+0*80)&0xE0FCFF)==0x000400 //Header 0 (with FSC==false and FSP==true)
- && (CC3(Buffer+Demux_Offset+1*80)&0xE0F0FF)==0x200000 //Subcode 0
- && (CC3(Buffer+Demux_Offset+2*80)&0xE0F0FF)==0x200001 //Subcode 1
- && (CC3(Buffer+Demux_Offset+3*80)&0xE0F0FF)==0x400000 //VAUX 0
- && (CC3(Buffer+Demux_Offset+4*80)&0xE0F0FF)==0x400001 //VAUX 1
- && (CC3(Buffer+Demux_Offset+5*80)&0xE0F0FF)==0x400002 //VAUX 2
- && (CC3(Buffer+Demux_Offset+6*80)&0xE0F0FF)==0x600000 //Audio 0
- && (CC3(Buffer+Demux_Offset+7*80)&0xE0F0FF)==0x800000)) //Video 0
- Demux_Offset++;
-
- if (Demux_Offset+8*80>Buffer_Size && File_Offset+Buffer_Size!=File_Size)
- return false; //No complete frame
- if (Demux_Offset+8*80>Buffer_Size && File_Offset+Buffer_Size==File_Size)
- Demux_Offset=(size_t)(File_Size-File_Offset); //Using the complete buffer (no next sync)
-
- Demux_UnpacketizeContainer_Demux();
- }
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DvDif::Read_Buffer_Unsynched()
-{
- Synched_Test_Reset();
- if (!IsSub && File_GoTo!=(int64u)-1 && (Frame_Count
- #if MEDIAINFO_SEEK
- || Duration_Detected
- #endif //MEDIAINFO_SEEK
- ) && !FSP_WasNotSet)
- {
- int64u BytesPerFrame=12000*(DSF?12:10);
- if (FSC_WasSet)
- BytesPerFrame*=2;
- Frame_Count_NotParsedIncluded=File_GoTo/BytesPerFrame;
- FrameInfo.PTS=FrameInfo.DTS=float64_int64s(Frame_Count_NotParsedIncluded/(DSF?25.000:(30.000*1000/1001))*1000000000);
- }
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_DvDif::Read_Buffer_Seek (size_t Method, int64u Value, int64u /*ID*/)
-{
- //Init
- if (!Duration_Detected)
- {
- MediaInfo_Internal MI;
- MI.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- size_t MiOpenResult=MI.Open(File_Name);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (!MiOpenResult || MI.Get(Stream_General, 0, General_Format)!=__T("DV"))
- return 0;
-
- TotalFrames=Ztring(MI.Get(Stream_Video, 0, Video_FrameCount)).To_int64u();
- int64u VideoBitRate=Ztring(MI.Get(Stream_Video, 0, Video_BitRate)).To_int64u();
- if (VideoBitRate==0 || VideoBitRate>=50000000)
- {
- FSC_WasSet=true;
- FSP_WasNotSet=true;
- }
- else if (VideoBitRate>=30000000)
- FSC_WasSet=true;
- float32 FrameRate=Ztring(MI.Get(Stream_Video, 0, Video_FrameRate)).To_float32();
- if (FrameRate>=24.0 && FrameRate<26.0)
- DSF=system=true;
- if (FrameRate>=29.0 && FrameRate<31.0)
- DSF=system=false;
- Duration_Detected=true;
- }
-
- //Parsing
- switch (Method)
- {
- case 0 :
- GoTo(Value);
- Open_Buffer_Unsynch();
- return 1;
- case 1 :
- GoTo(File_Size*Value/10000);
- Open_Buffer_Unsynch();
- return 1;
- case 2 : //Timestamp
- {
- //We transform TimeStamp to a frame number
- Value=float64_int64s(((float64)Value)*(DSF?25.000:(30.000*1000/1001))/1000000000);
- }
- //No break;
- case 3 : //FrameNumber
- if (!FSP_WasNotSet)
- {
- int64u BytesPerFrame=12000*(DSF?12:10);
- if (FSC_WasSet)
- BytesPerFrame*=2;
- GoTo(BytesPerFrame*Value);
- Open_Buffer_Unsynch();
- Frame_Count_NotParsedIncluded=Value;
- FrameInfo.PTS=FrameInfo.DTS=float64_int64s(Frame_Count_NotParsedIncluded/(DSF?25.000:(30.000*1000/1001))*1000000000);
- return 1;
- }
- else
- return (size_t)-1; //Not supported
- default : return (size_t)-1; //Not supported
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DvDif::Header_Parse()
-#if MEDIAINFO_TRACE
-{
- if (AuxToAnalyze!=0x00)
- {
- SCT=(int8u)-1;
- Header_Fill_Code(AuxToAnalyze, Ztring::ToZtring(AuxToAnalyze, 16));
- Header_Fill_Size(4);
- return;
- }
-
- //Unsynch problems
- if (Element_Size<80)
- {
- Element_WaitForMoreData();
- return;
- }
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x00)
- {
- SCT=(int8u)-1;
- Header_Fill_Code((int64u)-1);
- Header_Fill_Size(80);
- return;
- }
-
- //Parsing
- BS_Begin();
- //0
- Get_S1 (3, SCT, "SCT - Section Type"); Param_Info1(Dv_sct[SCT]);
- Skip_SB( "Res - Reserved");
- Skip_S1(4, "Arb - Arbitrary bits");
- //1
- Get_S1 (4, Dseq, "Dseq - DIF sequence number"); //0-9 for 525/60; 0-11 for 625/50
- Get_SB ( FSC, "FSC - Channel number");
- Get_SB ( FSP, "FSP - Channel number"); //SMPTE 370M only
- Skip_S1(2, "Res - Reserved");
- BS_End();
- //2
- Get_B1 (DBN, "DBN - DIF block number"); //Video: 0-134, Audio: 0-8
-
- Header_Fill_Code(SCT, Dv_sct[SCT]);
- Header_Fill_Size(80);
-}
-#else //MEDIAINFO_TRACE
-{
- if (AuxToAnalyze!=0x00)
- {
- SCT=(int8u)-1;
- Header_Fill_Code(AuxToAnalyze);
- Header_Fill_Size(4);
- return;
- }
-
- //Unsynch problems
- if (Element_Size<80)
- {
- Element_WaitForMoreData();
- return;
- }
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x00)
- {
- SCT=(int8u)-1;
- Header_Fill_Code((int64u)-1);
- Header_Fill_Size(80);
- return;
- }
-
- //Parsing
- SCT =(Buffer[Buffer_Offset ]&0xE0)>>5;
- Dseq=(Buffer[Buffer_Offset+1]&0xF0)>>4;
- FSC =(Buffer[Buffer_Offset+1]&0x08)==0x08;
- FSP =(Buffer[Buffer_Offset+1]&0x04)==0x04;
- DBN = Buffer[Buffer_Offset+2];
- Element_Offset+=3;
-
- Header_Fill_Code(SCT);
- Header_Fill_Size(80);
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-void File_DvDif::Data_Parse()
-{
- if (Element_Code==(int64u)-1)
- {
- Skip_XX(Element_Size, "Junk");
- return;
- }
-
- //Config
- if (SCT!=(int8u)-1)
- {
- if (!FSC_WasSet && FSC)
- FSC_WasSet=true;
-
- if (!FSP_WasNotSet && !FSP)
- FSP_WasNotSet=true;
- }
-
- if (AuxToAnalyze!=0x00)
- {
- Element();
- return;
- }
-
- Element_Info1(DBN);
-
- switch (SCT)
- {
- case 0 : Header(); break;
- case 1 : Subcode(); break;
- case 2 : VAUX(); break;
- case 3 : Audio(); break;
- case 4 : Video(); break;
- default: Skip_XX(Element_Size, "Unknown");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DvDif::Header()
-#if MEDIAINFO_TRACE
-{
- BS_Begin();
- //3
- Get_SB ( DSF, "DSF - DIF Sequence Flag"); //0=NTSC, 1=PAL
- Skip_SB( "Zero");
- Skip_S1(6, "Reserved");
-
- //4
- Skip_S1(5, "Reserved");
- Get_S1 (3, APT, "APT"); //Track application ID, 0=4:2:0, 1=not 4:2:0
-
- //5
- Get_SB ( TF1, "TF1 - Audio data is not valid");
- Skip_S1(4, "Reserved");
- Skip_S1(3, "AP1 - Audio application ID");
-
- //6
- Get_SB ( TF2, "TF2 - Video data is not valid");
- Skip_S1(4, "Reserved");
- Skip_S1(3, "AP2 - Video application ID");
-
- //7
- Get_SB ( TF3, "TF3 - Subcode is not valid");
- Skip_S1(4, "Reserved");
- Skip_S1(3, "AP3 - Subcode application ID");
-
- //8-79
- BS_End();
- Skip_XX(72, "Reserved"); //Should be filled with 0xFF
-
- if (Config->File_DvDif_IgnoreTransmittingFlags_Get())
- {
- TF1=false;
- TF2=false;
- TF3=false;
- }
-
- FILLING_BEGIN();
- DSF_IsValid=true;
- Dseq_Old=DSF?11:9;
- FrameSize_Theory=(DSF?12:10)*150*80; //12 DIF sequences for PAL, 10 for NTSC
-
- if (TF1 && TF2)
- {
- //This is not logic, the header says no audio and no video! We do not trust the header, resetting all
- TF1=false;
- TF2=false;
- TF3=false;
- }
- FILLING_END();
-}
-#else //MEDIAINFO_TRACE
-{
- if (Element_Size<77)
- {
- Trusted_IsNot("Size is wrong");
- return;
- }
-
- DSF=(Buffer[Buffer_Offset ]&0x80)?true:false;
- APT=(Buffer[Buffer_Offset+1]&0x07);
- TF1=(Buffer[Buffer_Offset+2]&0x80)?true:false;
- TF2=(Buffer[Buffer_Offset+3]&0x80)?true:false;
- TF3=(Buffer[Buffer_Offset+4]&0x80)?true:false;
-
- if (Config->File_DvDif_IgnoreTransmittingFlags_Get())
- {
- TF1=false;
- TF2=false;
- TF3=false;
- }
-
- FILLING_BEGIN();
- DSF_IsValid=true;
- Dseq_Old=DSF?11:9;
- FrameSize_Theory=(DSF?12:10)*150*80; //12 DIF sequences for PAL, 10 for NTSC
-
- if (TF1 && TF2)
- {
- //This is not logic, the header says no audio and no video! We do not trust the header, resetting all
- TF1=false;
- TF2=false;
- TF3=false;
- }
- FILLING_END();
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-void File_DvDif::Subcode()
-#if MEDIAINFO_TRACE
-{
- //Present?
- if (TF3)
- {
- Skip_XX(Element_Size, "Unused");
- return;
- }
-
- //Parsing
- for (int8u syb_num=0; syb_num<6; syb_num++)
- Subcode_Ssyb(syb_num);
- Skip_XX(29, "Unused");
-}
-#else //MEDIAINFO_TRACE
-{
- if (TF3)
- return;
-
- for (int8u syb_num=0; syb_num<6; syb_num++)
- Subcode_Ssyb(syb_num);
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-void File_DvDif::Subcode_Ssyb(int8u syb_num)
-{
- Element_Begin1("ssyb");
-
- //Parsing
- BS_Begin();
- //ID0-ID1
- Skip_SB( "FR - Identification of half of channel"); //1=first half, 0=second
- if (syb_num==0)
- {
- if (FSC==false)
- Get_S1 ( 3, ssyb_AP3, "AP3 - Subcode application ID");
- else
- Skip_S1( 3, "AP3 - Subcode application ID");
- }
- else if (DBN==1 && syb_num==5)
- Skip_S1(3, "APT - track application ID");
- else
- Skip_S1(3, "Res - Reserved");
- Skip_S1(8, "Arb - Arbitrary bits");
- Skip_S1(4, "Syb - SSYSB number");
- BS_End();
- //FFh
- Skip_B1( "0xFF");
- //PC0-PC4
- Element();
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::VAUX()
-{
- //Present?
- if (TF2)
- {
- Skip_XX(Element_Size, "Unused");
- return;
- }
-
- //Parsing
- for (int8u i=0; i<15; i++)
- Element();
- Skip_XX(2, "Unused");
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::Audio()
-{
- //Present?
- if (TF1)
- {
- Skip_XX(Element_Size, "Unused");
- return;
- }
-
- Element_Name("Audio");
-
- Element(); //First 5 bytes
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::Video()
-{
- #if MEDIAINFO_TRACE
- //Present?
- if (TF2)
- {
- Skip_XX(Element_Size, "Unused");
- return;
- }
-
- Element_Name("Video");
-
- //Parsing
- BS_Begin();
- Skip_S1(4, "STA");
- Skip_S1(4, "QNO");
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- #endif //MEDIAINFO_TRACE
-
- FILLING_BEGIN();
- if (DBN==134 && video_source_stype!=(int8u)-1)
- {
- if (!Status[IsAccepted])
- {
- Accept("DV DIF");
-
- if (!IsSub)
- Fill(Stream_General, 0, General_Format, "DV");
- }
- if (!Status[IsFilled] && Frame_Count>=Frame_Count_Valid)
- #ifdef MEDIAINFO_DVDIF_ANALYZE_YES
- {
- if (Config->File_DvDif_Analysis_Get())
- Fill("DV DIF");
- else
- Finish("DV DIF");
- }
- #else //MEDIAINFO_DVDIF_ANALYZE_YES
- Finish("DV DIF");
- #endif //MEDIAINFO_DVDIF_ANALYZE_YES
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::Element()
-{
- Element_Begin0();
- int8u PackType;
- if (AuxToAnalyze==0x00)
- Get_B1 (PackType, "Pack Type");
- else
- PackType=AuxToAnalyze; //Forced by parser
-
- switch(PackType)
- {
- case 0x13 : timecode(); break;
- case 0x14 : binary_group(); break;
- case 0x50 : audio_source(); break;
- case 0x51 : audio_sourcecontrol(); break;
- case 0x52 : audio_recdate(); break;
- case 0x53 : audio_rectime(); break;
- case 0x60 : video_source(); break;
- case 0x61 : video_sourcecontrol(); break;
- case 0x62 : video_recdate(); break;
- case 0x63 : video_rectime(); break;
- case 0x65 : closed_captions(); break;
- case 0x70 : consumer_camera_1(); break;
- case 0x71 : consumer_camera_2(); break;
- case 0xFF : Element_Name(Ztring().From_Number(PackType, 16));
- Skip_B4( "Unused"); break;
- default : Element_Name(Ztring().From_Number(PackType, 16));
- Skip_B4( "Unknown");
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::binary_group()
-{
- Element_Name("binary_group");
-
- if (Buffer[Buffer_Offset+(size_t)Element_Offset ]==0xFF
- && Buffer[Buffer_Offset+(size_t)Element_Offset+1]==0xFF
- && Buffer[Buffer_Offset+(size_t)Element_Offset+2]==0xFF
- && Buffer[Buffer_Offset+(size_t)Element_Offset+3]==0xFF
- )
- {
- Skip_XX(4, "All one");
- return;
- }
-
- //Parsing
- BS_Begin();
- Skip_S1(4, "Binary group 2");
- Skip_S1(4, "Binary group 1");
- Skip_S1(4, "Binary group 4");
- Skip_S1(4, "Binary group 3");
- Skip_S1(4, "Binary group 6");
- Skip_S1(4, "Binary group 5");
- Skip_S1(4, "Binary group 8");
- Skip_S1(4, "Binary group 7");
- BS_End();
-}
-
-
-//---------------------------------------------------------------------------
-void File_DvDif::timecode()
-{
- Element_Name("timecode");
-
- if (Buffer[Buffer_Offset+(size_t)Element_Offset ]==0x00
- && Buffer[Buffer_Offset+(size_t)Element_Offset+1]==0x00
- && Buffer[Buffer_Offset+(size_t)Element_Offset+2]==0x00
- && Buffer[Buffer_Offset+(size_t)Element_Offset+3]==0x00
- )
- {
- Skip_XX(4, "All zero");
- return;
- }
-
- //Parsing
- int8u Frames_Units, Frames_Tens, Seconds_Units, Seconds_Tens, Minutes_Units, Minutes_Tens, Hours_Units, Hours_Tens;
- int64u MilliSeconds=0;
- int8u Frames=0;
- bool DropFrame=false;
- BS_Begin();
- Skip_SB( "CF - Color fame");
- if (!DSF_IsValid)
- Skip_SB( "Arbitrary bit or DP");
- else if (DSF) //625/50
- Skip_SB( "Arbitrary bit");
- else //525/60
- Get_SB (DropFrame, "DP - Drop frame"); //525/60
- Get_S1 (2, Frames_Tens, "Frames (Tens)");
- Frames+=Frames_Tens*10;
- Get_S1 (4, Frames_Units, "Frames (Units)");
- Frames+=Frames_Units;
-
- if (!DSF_IsValid)
- Skip_SB( "BGF0 or PC");
- else if (DSF) //625/50
- Skip_SB( "BGF0 - Binary group flag");
- else //525/60
- Skip_SB( "PC - Biphase mark polarity correction"); //0=even; 1=odd
- Get_S1 (3, Seconds_Tens, "Seconds (Tens)");
- MilliSeconds+=Seconds_Tens*10*1000;
- Get_S1 (4, Seconds_Units, "Seconds (Units)");
- MilliSeconds+=Seconds_Units*1000;
-
- if (!DSF_IsValid)
- Skip_SB( "BGF2 or BGF0");
- else if (DSF) //625/50
- Skip_SB( "BGF2 - Binary group flag");
- else //525/60
- Skip_SB( "BGF0 - Binary group flag");
- Get_S1 (3, Minutes_Tens, "Minutes (Tens)");
- MilliSeconds+=Minutes_Tens*10*60*1000;
- Get_S1 (4, Minutes_Units, "Minutes (Units)");
- MilliSeconds+=Minutes_Units*60*1000;
-
- if (!DSF_IsValid)
- Skip_SB( "PC or BGF1");
- else if (DSF) //625/50
- Skip_SB( "PC - Biphase mark polarity correction"); //0=even; 1=odd
- else //525/60
- Skip_SB( "BGF1 - Binary group flag");
- Skip_SB( "BGF2 - Binary group flag");
- Get_S1 (2, Hours_Tens, "Hours (Tens)");
- MilliSeconds+=Hours_Tens*10*60*60*1000;
- Get_S1 (4, Hours_Units, "Hours (Units)");
- MilliSeconds+=Hours_Units*60*60*1000;
- Element_Info1(Ztring().Duration_From_Milliseconds(MilliSeconds+((DSF_IsValid && Frames!=45)?((int64u)(Frames/(DSF?25.000:29.970)*1000)):0)));
- BS_End();
-
- if (TimeCode_FirstFrame_ms==(int64u)-1 && MilliSeconds!=167185000) //if all bits are set to 1, this is not a valid timestamp
- {
- TimeCode_FirstFrame_ms=MilliSeconds;
- if (DSF_IsValid && Frames!=45) //all bits are set to 1
-
- TimeCode_FirstFrame_ms+=(int64u)(Frames/(DSF?25.000:29.970)*1000);
-
- TimeCode_FirstFrame+=('0'+Hours_Tens);
- TimeCode_FirstFrame+=('0'+Hours_Units);
- TimeCode_FirstFrame+=':';
- TimeCode_FirstFrame+=('0'+Minutes_Tens);
- TimeCode_FirstFrame+=('0'+Minutes_Units);
- TimeCode_FirstFrame+=':';
- TimeCode_FirstFrame+=('0'+Seconds_Tens);
- TimeCode_FirstFrame+=('0'+Seconds_Units);
- TimeCode_FirstFrame+=DropFrame?';':':';
- TimeCode_FirstFrame+=('0'+Frames_Tens);
- TimeCode_FirstFrame+=('0'+Frames_Units);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::audio_source()
-{
- if (TF1)
- {
- Skip_XX(4, "Unused");
- return;
- }
-
- Element_Name("audio_source");
-
- int8u SamplingRate, Resolution;
- BS_Begin();
- //PC1
- Get_SB ( audio_locked, "LF - Locked mode");
- Skip_SB( "Reserved");
- Skip_S1(6, "AF - Samples in this frame");
-
- //PC2
- Info_S1(1, StereoMode, "SM - Stereo mode"); Param_Info1(Dv_StereoMode[StereoMode]);
- Info_S1(2, ChannelsPerBlock, "CHN - Channels per block"); Param_Info1(Dv_ChannelsPerBlock[ChannelsPerBlock]);
- Info_S1(1, Pair, "PA - Pair"); Param_Info1(Dv_Pair[Pair]);
- Skip_S1(4, "AM - Audio mode");
-
- Skip_SB( "Reserved");
- Skip_SB( "ML - Multi-language");
- Skip_SB( "50/60");
- Get_S1 (5, audio_source_stype, "STYPE - audio blocks per video frame"); Param_Info1(audio_source_stype==0?"2 channels":(audio_source_stype==2?"4 channels":"Unknown")); //0=25 Mbps, 2=50 Mbps
-
- Skip_SB( "EF - Emphasis off");
- Skip_SB( "TC - Time constant of emphasis");
- Get_S1 (3, SamplingRate, "SMP - Sampling rate"); Param_Info1(Dv_Audio_SamplingRate[SamplingRate]);
- Get_S1 (3, Resolution, "QU - Resolution"); Param_Info1(Dv_Audio_BitDepth[Resolution]);
- BS_End();
-
- FILLING_BEGIN();
- if (!IgnoreAudio && Streams_Audio.empty() && Dv_Audio_SamplingRate[SamplingRate] && Dv_Audio_BitDepth[Resolution])
- {
- //Calculating the count of audio
- size_t Audio_Count=1;
- if (audio_source_stype==2 || (Resolution==1 && SamplingRate==2)) //stype=2 or (Resolution=12 bits and SamplingRate=32 KHz)
- Audio_Count=2;
- if (audio_source_stype==3)
- Audio_Count=4;
-
- //Filling
- if (Streams_Audio.size()<Audio_Count)
- Streams_Audio.resize(Audio_Count);
- for (size_t Pos=0; Pos<Audio_Count; Pos++)
- {
- if (Streams_Audio[Pos]==NULL)
- Streams_Audio[Pos]=new stream;
- Streams_Audio[Pos]->Infos["ID"].From_Number(Pos);
- Streams_Audio[Pos]->Infos["Format"]=__T("PCM");
- Streams_Audio[Pos]->Infos["Codec"]=__T("PCM");
- Streams_Audio[Pos]->Infos["BitRate_Mode"]=__T("CBR");
- Streams_Audio[Pos]->Infos["Channel(s)"].From_Number(audio_source_stype==3?1:2);
- Streams_Audio[Pos]->Infos["SamplingRate"].From_Number(Dv_Audio_SamplingRate[SamplingRate]);
- Streams_Audio[Pos]->Infos["BitDepth"].From_Number(Dv_Audio_BitDepth[Resolution]);
- Streams_Audio[Pos]->Infos["BitRate"].From_Number((audio_source_stype==3?1:2)*Dv_Audio_SamplingRate[SamplingRate]*Dv_Audio_BitDepth[Resolution]);
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::audio_sourcecontrol()
-{
- if (TF1)
- {
- Skip_XX(4, "Unused");
- return;
- }
-
- Element_Name("audio_control");
-
- BS_Begin();
-
- //PC1
- Info_S1(2, CopyGenerationManagementSystem, "CGMS - Copy generation management system"); Param_Info1(Dv_CopyGenerationManagementSystem[CopyGenerationManagementSystem]);
- Info_S1(2, InputType, "ISR - Input type"); Param_Info1(Dv_InputType[InputType]);
- Info_S1(2, CompressionTimes, "CMP - Compression times"); Param_Info1(Dv_CompressionTimes[CompressionTimes]);
- Info_S1(2, Emphasis, "EFC - Emphasis"); Param_Info1(Dv_Emphasis[Emphasis]);
-
- //PC2
- Skip_SB( "REC S Non-recording start point");
- Skip_SB( "REC E - Non-recording end point");
- Skip_SB( "FADE S - Recording mode"); //1=Original
- Skip_SB( "FADE E - Unknown");
- Skip_SB( "Reserved");
- Skip_SB( "Reserved");
- Skip_SB( "Reserved");
- Skip_SB( "Reserved");
-
- //PC3
- Skip_SB( "DRF - Direction"); //1=Forward
- Skip_S1(7, "SPD - Speed");
-
- //PC4
- Skip_SB( "Reserved");
- Skip_S1(7, "GEN - Category");
-
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::audio_recdate()
-{
- if (TF1)
- {
- Skip_XX(4, "Unused");
- return;
- }
-
- Element_Name("audio_recdate");
-
- recdate();
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::audio_rectime()
-{
- if (TF1)
- {
- Skip_XX(4, "Unused");
- return;
- }
-
- Element_Name("audio_rectime");
-
- rectime();
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::video_source()
-{
- if (TF2)
- {
- Skip_XX(4, "Unused");
- return;
- }
-
- Element_Name("video_source");
-
- BS_Begin();
- //PC1
- Skip_S1(4, "TVCH (tens of units, 0-9)");
- Skip_S1(4, "TVCH (units, 0-9)");
-
- //PC2
- Skip_SB( "B/W - Black and White"); //0=Black and White, 1=Color
- Skip_SB( "EN - Color Frames is not valid");
- Skip_S1(2, "CLF - Color frames id");
- Skip_S1(4, "TVCH (hundreds of units, 0-9)");
-
- //PC3
- Skip_S1(2, "SRC");
- Get_SB ( system, "50/60 - System");
- Get_S1 (5, video_source_stype, "STYPE - Signal type of video signal"); //0=not 4:2:2, 4=4:2:2
-
- //PC4
- BS_End();
- Skip_B1( "TUN/VISC");
-
- FILLING_BEGIN();
- if (FSC==false && FSP==true && Dseq==0)
- {
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- FrameInfo.DUR=float64_int64s(((float64)1000000000)/(DSF?25.000:29.970));
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.DTS+=FrameInfo.DUR;
- if (FrameInfo.PTS!=(int64u)-1)
- FrameInfo.PTS+=FrameInfo.DUR;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::video_sourcecontrol()
-{
- if (TF2)
- {
- Skip_XX(4, "Unused");
- return;
- }
-
- Element_Name("video_control");
-
- BS_Begin();
- //PC1
- Info_S1(2, CopyGenerationManagementSystem, "CGMS - Copy generation management system"); Param_Info1(Dv_CopyGenerationManagementSystem[CopyGenerationManagementSystem]);
- Skip_S1(2, "ISR");
- Skip_S1(2, "CMP");
- Skip_S2(2, "SS");
-
- //PC2
- Skip_SB( "REC S");
- Skip_SB( "Reserved");
- Skip_S1(2, "REC M");
- Skip_SB( "Reserved");
- Get_S1 (3, aspect, "DISP - Aspect ratio"); Param_Info1(Dv_Disp[aspect]);
-
- //PC3
- Get_SB ( FieldOrder_FF, "FF - Frame/Field"); //1=Frame, 0=Field
- Get_SB ( FieldOrder_FS, "FS - First/second field"); //0=Field 2, 1=Field 1, if FF=0 x is output twice, if FF=1, Field x fisrst, other second
- Skip_SB( "FC - Frame Change"); //0=Same picture as before
- Get_SB ( Interlaced, "IL - Interlaced"); //1=Interlaced
- Skip_SB( "SF");
- Skip_SB( "SC");
- Skip_S1(2, "BCS");
-
- //PC4
- Skip_SB( "Reserved");
- Skip_S1(7, "GEN - Category");
-
- BS_End();
-
- FILLING_BEGIN();
- video_sourcecontrol_IsParsed=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::video_recdate()
-{
- if (TF2)
- {
- Skip_XX(4, "Unused");
- return;
- }
-
- Element_Name("video_recdate");
-
- Ztring Date=recdate();
- if (Recorded_Date_Date.empty())
- Recorded_Date_Date=Date;
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::video_rectime()
-{
- if (TF2)
- {
- Skip_XX(4, "Unused");
- return;
- }
-
- Element_Name("video_rectime");
-
- Ztring Date=rectime();
- if (Recorded_Date_Time.empty())
- Recorded_Date_Time=Date;
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::closed_captions()
-{
- Element_Name("closed_captions");
-
- #if defined(MEDIAINFO_EIA608_YES)
- if (CC_Parsers.empty())
- {
- CC_Parsers.resize(2);
- for (int8u Pos=0; Pos<2; Pos++)
- {
- CC_Parsers[Pos]=new File_Eia608();
- ((File_Eia608*)CC_Parsers[Pos])->cc_type=Pos;
- }
- Frame_Count_Valid*=10; //More frames
- }
- if (Dseq==0) //CC are duplicated for each DIF sequence!
- {
- for (size_t Pos=0; Pos<2; Pos++)
- {
- Open_Buffer_Init(CC_Parsers[Pos]);
- Open_Buffer_Continue(CC_Parsers[Pos], 2);
- }
- }
-
- #else
- Skip_XX(4, "Captions");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::consumer_camera_1()
-{
- Element_Name("consumer_camera_1");
-
- //Parsing
- BS_Begin();
- int8u ae_mode, wb_mode, white_balance, fcm;
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Skip_S1(6, "iris");
- Get_S1 (4, ae_mode, "ae mode"); Param_Info1(Dv_consumer_camera_1_ae_mode[ae_mode]);
- Skip_S1(4, "agc(Automatic Gain Control)");
- Get_S1 (3, wb_mode, "wb mode (white balance mode)"); Param_Info1(Dv_consumer_camera_1_wb_mode[wb_mode]);
- Get_S1 (5, white_balance, "white balance"); Param_Info1(Dv_consumer_camera_1_white_balance(white_balance));
- Get_S1 (1, fcm, "fcm (Focus mode)"); Param_Info1(Dv_consumer_camera_1_fcm[fcm]);
- Skip_S1(7, "focus (focal point)");
- BS_End();
-
- if (Encoded_Library_Settings.empty())
- {
- if (ae_mode<0x0F) Encoded_Library_Settings+=__T("ae mode=")+Ztring(Dv_consumer_camera_1_ae_mode[ae_mode])+__T(" / ");
- if (wb_mode<0x08) Encoded_Library_Settings+=__T("wb mode=")+Ztring(Dv_consumer_camera_1_wb_mode[wb_mode])+__T(" / ");
- if (wb_mode<0x1F) Encoded_Library_Settings+=__T("white balance=")+Ztring(Dv_consumer_camera_1_white_balance(white_balance))+__T(" / ");
- Encoded_Library_Settings+=__T("fcm=")+Ztring(Dv_consumer_camera_1_fcm[fcm]);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_DvDif::consumer_camera_2()
-{
- Element_Name("consumer_camera_2");
-
- //Parsing
- BS_Begin();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Skip_S1(1, "vpd");
- Skip_S1(5, "vertical panning speed");
- Skip_S1(1, "is");
- Skip_S1(1, "hpd");
- Skip_S1(6, "horizontal panning speed");
- Skip_S1(8, "focal length");
- Skip_S1(1, "zen");
- Info_S1(3, zoom_U, "units of e-zoom");
- Info_S1(4, zoom_D, "1/10 of e-zoom"); /*if (zoom_D!=0xF)*/ Param_Info1(__T("zoom=")+Ztring().From_Number(zoom_U+((float32)zoom_U)/10, 2));
- BS_End();
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring File_DvDif::recdate()
-{
- BS_Begin();
-
- int8u Temp;
- int16u Year=0;
- int8u Month=0, Day=0;
- Skip_S1(8, "Time zone specific"); //ds, tm, tens of time zone, units of time zone, 0xFF for Unknwon
- Skip_SB( "1");
- Skip_SB( "1");
- Get_S1 (2, Temp, "Days (Tens)");
- Day+=Temp*10;
- Get_S1 (4, Temp, "Days (Units)");
- Day+=Temp;
- Skip_SB( "1");
- Skip_SB( "1");
- Skip_SB( "1");
- Get_S1 (1, Temp, "Month (Tens)");
- Month+=Temp*10;
- Get_S1 (4, Temp, "Month (Units)");
- Month+=Temp;
- Get_S1 (4, Temp, "Year (Tens)");
- Year+=Temp*10;
- Get_S1 (4, Temp, "Year (Units)");
- Year+=Temp;
- Year+=Year<25?2000:1900;
- Element_Info1(Ztring::ToZtring(Year)+__T("-")+Ztring::ToZtring(Month)+__T("-")+Ztring::ToZtring(Day));
-
- BS_End();
-
- if (Month>12 || Day>31)
- return Ztring(); //If all bits are set to 1, this is invalid
- Ztring MonthString;
- if (Month<10)
- MonthString=__T("0");
- MonthString+=Ztring::ToZtring(Month);
- Ztring DayString;
- if (Day<10)
- DayString=__T("0");
- DayString+=Ztring::ToZtring(Day);
- return Ztring::ToZtring(Year)+__T("-")+MonthString+__T("-")+DayString;
-}
-
-//---------------------------------------------------------------------------
-Ztring File_DvDif::rectime()
-{
- if (!DSF_IsValid)
- {
- Trusted_IsNot("Not in right order");
- return Ztring();
- }
-
- BS_Begin();
-
- if (Buffer[Buffer_Offset+(size_t)Element_Offset ]==0x00
- && Buffer[Buffer_Offset+(size_t)Element_Offset+1]==0x00
- && Buffer[Buffer_Offset+(size_t)Element_Offset+2]==0x00
- && Buffer[Buffer_Offset+(size_t)Element_Offset+3]==0x00
- )
- {
- Skip_XX(4, "All zero");
- return Ztring();
- }
-
- int8u Temp;
- int64u Time=0;
- int8u Frames=0;
- Skip_SB( "Unknown");
- Skip_SB( "1");
- Get_S1 (2, Temp, "Frames (Tens)");
- Frames+=Temp*10;
- Get_S1 (4, Temp, "Frames (Units)");
- Frames+=Temp;
- if (Temp!=0xF && DSF_IsValid)
- Time+=(int64u)(Frames/(DSF?25.000:29.970));
- Skip_SB( "1");
- Get_S1 (3, Temp, "Seconds (Tens)");
- Time+=Temp*10*1000;
- Get_S1 (4, Temp, "Seconds (Units)");
- Time+=Temp*1000;
- Skip_SB( "1");
- Get_S1 (3, Temp, "Minutes (Tens)");
- Time+=Temp*10*60*1000;
- Get_S1 (4, Temp, "Minutes (Units)");
- Time+=Temp*60*1000;
- Skip_SB( "1");
- Skip_SB( "1");
- Get_S1 (2, Temp, "Hours (Tens)");
- Time+=Temp*10*60*60*1000;
- Get_S1 (4, Temp, "Hours (Units)");
- Time+=Temp*60*60*1000;
- Element_Info1(Ztring().Duration_From_Milliseconds(Time));
-
- BS_End();
-
- if (Time!=167185000)
- return Ztring().Duration_From_Milliseconds(Time);
- else
- return Ztring(); //If all bits are set to 1, this is invalid
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_DV_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif.h
deleted file mode 100644
index 266983416..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif.h
+++ /dev/null
@@ -1,351 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DV-DIF (DV Digital Interface Format)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DvDifH
-#define MediaInfo_File_DvDifH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_DvDif
-//***************************************************************************
-
-class File_DvDif : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- int8u AuxToAnalyze; //Only Aux must be parsed
- bool IgnoreAudio;
-
- //Constructor/Destructor
- File_DvDif();
- ~File_DvDif();
-
-protected :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Synched_Test_Reset();
- void Synched_Init();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- #ifdef MEDIAINFO_DVDIF_ANALYZE_YES
- void Read_Buffer_Continue();
- #endif //MEDIAINFO_DVDIF_ANALYZE_YES
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer
- void Header_Parse();
- void Data_Parse();
-
- //Elements - Main
- void Header();
- void Subcode();
- void Subcode_Ssyb(int8u syb_num);
- void VAUX();
- void Audio();
- void Video();
-
- //Elements - Sub
- void Element();
- void timecode();
- void binary_group();
- void audio_source();
- void audio_sourcecontrol();
- void audio_recdate();
- void audio_rectime();
- void video_source();
- void video_sourcecontrol();
- void video_recdate();
- void video_rectime();
- void closed_captions();
- void consumer_camera_1();
- void consumer_camera_2();
-
- //Helpers
- Ztring recdate();
- Ztring rectime();
-
- //Streams
- struct stream
- {
- std::map<std::string, Ztring> Infos;
- };
- std::vector<stream*> Streams_Audio;
-
- //Temp
- #if defined(MEDIAINFO_EIA608_YES)
- std::vector<File__Analyze*> CC_Parsers;
- #endif
- Ztring Recorded_Date_Date;
- Ztring Recorded_Date_Time;
- Ztring Encoded_Library_Settings;
- string TimeCode_FirstFrame;
- int64u Duration;
- int64u TimeCode_FirstFrame_ms;
- int64u FrameSize_Theory; //The size of a frame
- int8u SCT;
- int8u SCT_Old;
- int8u Dseq;
- int8u Dseq_Old;
- int8u DBN;
- int8u DBN_Olds[8];
- int8u video_source_stype;
- int8u audio_source_stype;
- bool FSC;
- bool FSP;
- bool DSF;
- bool DSF_IsValid;
- int8u APT;
- bool TF1;
- bool TF2;
- bool TF3;
- int8u aspect;
- int8u ssyb_AP3;
- bool FieldOrder_FF;
- bool FieldOrder_FS;
- bool Interlaced;
- bool system;
- bool FSC_WasSet;
- bool FSP_WasNotSet;
- bool video_sourcecontrol_IsParsed;
- bool audio_locked;
-
- #if MEDIAINFO_SEEK
- bool Duration_Detected;
- int64u TotalFrames;
- #endif //MEDIAINFO_SEEK
-
- #ifdef MEDIAINFO_DVDIF_ANALYZE_YES
- bool Analyze_Activated;
- bool video_source_Detected;
-
- void Errors_Stats_Update();
- void Errors_Stats_Update_Finnish();
- Ztring Errors_Stats_03;
- Ztring Errors_Stats_05;
- Ztring Errors_Stats_09;
- Ztring Errors_Stats_10;
- Ztring Date;
- Ztring Time;
- int64u Speed_FrameCount; //Global - Total
- int64u Speed_FrameCount_Video_STA_Errors; //Global - Error 1
- std::vector<int64u> Speed_FrameCount_Audio_Errors; //Global - Error 2
- int64u Speed_FrameCount_Timecode_Incoherency; //Global - Error 3
- int64u Speed_FrameCount_Contains_NULL; //Global - Error 4
- int64u Speed_Contains_NULL; //Per Frame - Error 4
- int64u Speed_FrameCount_Arb_Incoherency; //Global - Error 5
- int64u Speed_FrameCount_Stts_Fluctuation; //Global - Error 6
- int8u QU;
- bool QU_FSC; //Validity is with QU
- bool QU_System; //Validity is with QU
- bool REC_ST;
- bool REC_END;
- bool REC_IsValid;
- bool System;
- bool System_IsValid;
- bool Frame_AtLeast1DIF;
- struct dvdate
- {
- int8u Days;
- int8u Months;
- int8u Years;
- bool MultipleValues;
- bool IsValid;
-
- dvdate() {Clear();}
-
- void Clear()
- {
- MultipleValues=false;
- IsValid=false;
- }
- };
- struct dvtime
- {
- struct time
- {
- int8u Frames;
- int8u Seconds;
- int8u Minutes;
- int8u Hours;
- bool DropFrame;
-
- time()
- {
- Frames=(int8u)-1;
- Seconds=(int8u)-1;
- Minutes=(int8u)-1;
- Hours=(int8u)-1;
- DropFrame=false;
- }
- };
- time Time;
- bool MultipleValues;
- bool IsValid;
-
- dvtime() {Clear();}
-
- void Clear()
- {
- MultipleValues=false;
- IsValid=false;
- }
- };
- dvtime Speed_TimeCode_Last;
- dvtime Speed_TimeCode_Current;
- dvtime Speed_TimeCode_Current_Theory;
- Ztring Speed_TimeCodeZ_First;
- Ztring Speed_TimeCodeZ_Last;
- Ztring Speed_TimeCodeZ_Current;
- bool Speed_TimeCode_IsValid;
- dvtime Speed_RecTime_Current;
- dvtime Speed_RecTime_Current_Theory;
- dvtime Speed_RecTime_Current_Theory2;
- Ztring Speed_RecTimeZ_First;
- Ztring Speed_RecTimeZ_Last;
- Ztring Speed_RecTimeZ_Current;
- dvdate Speed_RecDate_Current;
- Ztring Speed_RecDateZ_First;
- Ztring Speed_RecDateZ_Last;
- Ztring Speed_RecDateZ_Current;
- std::vector<size_t> Video_STA_Errors; //Per STA type
- std::vector<size_t> Video_STA_Errors_Total; //Per STA type
- std::vector<size_t> Audio_Errors; //Per Dseq
- std::vector<size_t> audio_source_IsPresent;
- std::vector<bool> CH_IsPresent;
- std::vector<std::vector<size_t> > Audio_Errors_Total; //Per Channel and Dseq
- std::vector<std::vector<size_t> > Audio_Invalids; //Per Channel and Dseq
- std::vector<std::vector<size_t> > Audio_Invalids_Total; //Per Channel and Dseq
- struct recZ_Single
- {
- int64u FramePos;
- Ztring Date;
- Ztring Time;
-
- recZ_Single()
- {
- FramePos=(int64u)-1;
- }
- };
- struct recZ
- {
- recZ_Single First;
- recZ_Single Last;
- };
- std::vector<recZ> Speed_RecZ;
- struct timeCodeZ_Single
- {
- int64u FramePos;
- Ztring TimeCode;
-
- timeCodeZ_Single()
- {
- FramePos=(int64u)-1;
- }
- };
- struct timeCodeZ
- {
- timeCodeZ_Single First;
- timeCodeZ_Single Last;
- };
- std::vector<timeCodeZ> Speed_TimeCodeZ;
- struct timeStampsZ_Single
- {
- int64u FramePos;
- Ztring Time;
- Ztring TimeCode;
- Ztring Date;
-
- timeStampsZ_Single()
- {
- FramePos=(int64u)-1;
- }
- };
- struct timeStampsZ
- {
- timeStampsZ_Single First;
- timeStampsZ_Single Last;
- };
- std::vector<timeStampsZ> Speed_TimeStampsZ;
-
-
-
- struct arb
- {
- std::vector<size_t> Value_Counters;
- int8u Value;
- bool MultipleValues;
- bool IsValid;
-
- arb() {Clear();}
-
- void Clear()
- {
- Value_Counters.clear();
- Value_Counters.resize(16);
- Value=0xF; //Used only when we are sure
- MultipleValues=false;
- IsValid=false;
- }
- };
- arb Speed_Arb_Last;
- arb Speed_Arb_Current;
- arb Speed_Arb_Current_Theory;
- bool Speed_Arb_IsValid;
-
- //Stats
- std::vector<size_t> Stats;
- size_t Stats_Total;
- size_t Stats_Total_WithoutArb;
- bool Stats_Total_AlreadyDetected;
-
-public:
- //From MPEG-4 container
- struct stts_part
- {
- int64u Pos_Begin;
- int64u Pos_End;
- int32u Duration;
- };
- typedef std::vector<stts_part> stts;
- stts* Mpeg4_stts;
- size_t Mpeg4_stts_Pos;
- #endif //MEDIAINFO_DVDIF_ANALYZE_YES
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif_Analysis.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif_Analysis.cpp
deleted file mode 100644
index d87f3fe4a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_DvDif_Analysis.cpp
+++ /dev/null
@@ -1,1616 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DVDIF_YES) && defined(MEDIAINFO_DVDIF_ANALYZE_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_DvDif.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Analysis
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DvDif::Read_Buffer_Continue()
-{
- if (!Analyze_Activated)
- {
- if (Config->File_DvDif_Analysis_Get())
- Analyze_Activated=true;
- else
- return;
- }
-
- //Errors stats
- while (Buffer_Offset+80<=Buffer_Size)
- {
- if ((Buffer[Buffer_Offset]&0xE0)==0x00 //SCT=0 (Header)
- && !(Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x00))
- {
- Frame_AtLeast1DIF=true;
-
- if (!DSF_IsValid)
- {
- DSF=(Buffer[Buffer_Offset+3]&0x80)?true:false;
- DSF_IsValid=true;
- Dseq_Old=DSF?11:9;
- }
- }
-
- //Quick search depends of SCT
- switch(Buffer[Buffer_Offset]&0xE0)
- {
- case 0x20 : //SCT=1 (Subcode)
- {
- Frame_AtLeast1DIF=true;
-
- for (size_t Pos=3*8; Pos<40; Pos+=2*8)
- {
- int8u PackType=Buffer[Buffer_Offset+3+Pos+3];
- //dv_timecode
- if (PackType==0x13) //Pack type=0x13 (dv_timecode)
- {
- bool DropFrame =( Buffer[Buffer_Offset+3+Pos+3+1]&0x40)?true:false;
- int8u Frames =((Buffer[Buffer_Offset+3+Pos+3+1]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+3+1]&0x0F) ) ;
- int8u Seconds =((Buffer[Buffer_Offset+3+Pos+3+2]&0x70)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+3+2]&0x0F)) ;
- int8u Minutes =((Buffer[Buffer_Offset+3+Pos+3+3]&0x70)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+3+3]&0x0F) ) ;
- int8u Hours =((Buffer[Buffer_Offset+3+Pos+3+4]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+3+4]&0x0F) ) ;
-
- if (Frames ==0x00
- && Seconds==0x00
- && Minutes==0x00
- && Hours ==0x00
- && Buffer[Buffer_Offset+3+Pos+3+1]==0x00
- && Buffer[Buffer_Offset+3+Pos+3+2]==0x00
- && Buffer[Buffer_Offset+3+Pos+3+3]==0x00
- && Buffer[Buffer_Offset+3+Pos+3+4]==0x00
- )
- {
- Frames =45;
- Seconds=85;
- Minutes=85;
- Hours =45;
- }
- if (Frames !=45
- && Seconds!=85
- && Minutes!=85
- && Hours !=45) //If not disabled
- {
- if (Speed_TimeCode_Current.IsValid
- && (Speed_TimeCode_Current.Time.DropFrame !=DropFrame
- || Speed_TimeCode_Current.Time.Frames !=Frames
- || Speed_TimeCode_Current.Time.Seconds !=Seconds
- || Speed_TimeCode_Current.Time.Minutes !=Minutes
- || Speed_TimeCode_Current.Time.Hours !=Hours))
- {
- Speed_TimeCode_Current.MultipleValues=true; //There are 2+ different values
- }
- else if (!Speed_TimeCode_Current.IsValid && !Speed_TimeCode_Current.MultipleValues)
- {
- Speed_TimeCode_Current.Time.DropFrame=DropFrame;
- Speed_TimeCode_Current.Time.Frames =Frames;
- Speed_TimeCode_Current.Time.Seconds =Seconds;
- Speed_TimeCode_Current.Time.Minutes =Minutes;
- Speed_TimeCode_Current.Time.Hours =Hours;
- Speed_TimeCode_Current.IsValid =true;
- }
- }
- }
-
- //video_recdate
- if (PackType==0x62) //Pack type=0x62 (video_rectime)
- {
- int8u Days =((Buffer[Buffer_Offset+3+Pos+2]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+2]&0x0F) ) ;
- int8u Months =((Buffer[Buffer_Offset+3+Pos+3]&0x10)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+3]&0x0F) ) ;
- int8u Years =((Buffer[Buffer_Offset+3+Pos+4]&0xF0)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+4]&0x0F) ) ;
- if (Months<=12
- && Days <=31)
- {
- if (Speed_RecDate_Current.IsValid
- && Speed_RecDate_Current.Days !=Days
- && Speed_RecDate_Current.Months !=Months
- && Speed_RecDate_Current.Years !=Years)
- {
- Speed_RecDate_Current.MultipleValues=true; //There are 2+ different values
- }
- else if (!Speed_RecTime_Current.MultipleValues)
- {
- Speed_RecDate_Current.Days =Days;
- Speed_RecDate_Current.Months =Months;
- Speed_RecDate_Current.Years =Years;
- Speed_RecDate_Current.IsValid =true;
- }
- }
- }
-
- //video_rectime
- if (PackType==0x63) //Pack type=0x63 (video_rectime)
- {
- int8u Frames =((Buffer[Buffer_Offset+3+Pos+1]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+1]&0x0F) ) ;
- int8u Seconds =((Buffer[Buffer_Offset+3+Pos+2]&0x70)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+2]&0x0F)) ;
- int8u Minutes =((Buffer[Buffer_Offset+3+Pos+3]&0x70)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+3]&0x0F) ) ;
- int8u Hours =((Buffer[Buffer_Offset+3+Pos+4]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+4]&0x0F) ) ;
- if (Seconds<61
- && Minutes<60
- && Hours <24) //If not disabled
- {
- if (Speed_RecTime_Current.IsValid
- && Speed_RecTime_Current.Time.Frames !=Frames
- && Speed_RecTime_Current.Time.Seconds !=Seconds
- && Speed_RecTime_Current.Time.Minutes !=Minutes
- && Speed_RecTime_Current.Time.Hours !=Hours)
- {
- Speed_RecTime_Current.MultipleValues=true; //There are 2+ different values
- }
- else if (!Speed_RecTime_Current.MultipleValues)
- {
- Speed_RecTime_Current.Time.Frames =Frames;
- Speed_RecTime_Current.Time.Seconds =Seconds;
- Speed_RecTime_Current.Time.Minutes =Minutes;
- Speed_RecTime_Current.Time.Hours =Hours;
- Speed_RecTime_Current.IsValid =true;
- }
- }
- }
- }
- }
- break;
-
- case 0x40 : //SCT=2 (VAUX)
- {
- Frame_AtLeast1DIF=true;
-
- for (size_t Pos=0; Pos<15*5; Pos+=5)
- {
- int8u PackType=Buffer[Buffer_Offset+3+Pos];
- //video_source
- if (PackType==0x60 && !System_IsValid) //Pack type=0x60 (video_source)
- {
- System=(Buffer[Buffer_Offset+3+Pos+3]&0x20)==0x20?true:false;
- System_IsValid=true;
- video_source_Detected=true;
- }
-
- //video_recdate
- if (PackType==0x62) //Pack type=0x62 (video_rectime)
- {
- int8u Days =((Buffer[Buffer_Offset+3+Pos+2]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+2]&0x0F) ) ;
- int8u Months =((Buffer[Buffer_Offset+3+Pos+3]&0x10)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+3]&0x0F) ) ;
- int8u Years =((Buffer[Buffer_Offset+3+Pos+4]&0xF0)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+4]&0x0F) ) ;
- if (Months<=12
- && Days <=31)
- {
- if (Speed_RecDate_Current.IsValid
- && Speed_RecDate_Current.Days !=Days
- && Speed_RecDate_Current.Months !=Months
- && Speed_RecDate_Current.Years !=Years)
- {
- Speed_RecDate_Current.MultipleValues=true; //There are 2+ different values
- }
- else if (!Speed_RecTime_Current.MultipleValues)
- {
- Speed_RecDate_Current.Days =Days;
- Speed_RecDate_Current.Months =Months;
- Speed_RecDate_Current.Years =Years;
- Speed_RecDate_Current.IsValid =true;
- }
- }
- }
-
- //video_rectime
- if (PackType==0x63) //Pack type=0x63 (video_rectime)
- {
- int8u Frames =((Buffer[Buffer_Offset+3+Pos+1]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+1]&0x0F) ) ;
- int8u Seconds =((Buffer[Buffer_Offset+3+Pos+2]&0x70)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+2]&0x0F)) ;
- int8u Minutes =((Buffer[Buffer_Offset+3+Pos+3]&0x70)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+3]&0x0F) ) ;
- int8u Hours =((Buffer[Buffer_Offset+3+Pos+4]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+Pos+4]&0x0F) ) ;
- if (Seconds!=85
- && Minutes!=85
- && Hours !=45) //If not disabled
- {
- if (Speed_RecTime_Current.IsValid
- && Speed_RecTime_Current.Time.Frames !=Frames
- && Speed_RecTime_Current.Time.Seconds !=Seconds
- && Speed_RecTime_Current.Time.Minutes !=Minutes
- && Speed_RecTime_Current.Time.Hours !=Hours)
- {
- Speed_RecTime_Current.MultipleValues=true; //There are 2+ different values
- }
- else if (!Speed_RecTime_Current.MultipleValues)
- {
- Speed_RecTime_Current.Time.Frames =Frames;
- Speed_RecTime_Current.Time.Seconds =Seconds;
- Speed_RecTime_Current.Time.Minutes =Minutes;
- Speed_RecTime_Current.Time.Hours =Hours;
- Speed_RecTime_Current.IsValid =true;
- }
- }
- }
- }
- }
- break;
-
- case 0x60 : //SCT=3 (Audio)
- {
- //audio_source
- if (Buffer[Buffer_Offset+3+0]==0x50) //audio_source
- {
- QU_FSC =(Buffer[Buffer_Offset+1 ]&0x08)?true:false; //FSC
- QU_System =(Buffer[Buffer_Offset+3+3]&0x20)?true:false; //50/60
-
- int8u AUDIO_MODE=Buffer[Buffer_Offset+3+2]&0x0F;
- QU =Buffer[Buffer_Offset+3+4]&0x07;
-
- size_t Channel=(QU_FSC?2:0)+((Buffer[Buffer_Offset+1]>>4)>=(QU_System?6:5)?1:0); //If Dseq>=5 or 6
- if (audio_source_IsPresent.empty())
- audio_source_IsPresent.resize(8);
- audio_source_IsPresent[Channel]=true;
-
- if (AUDIO_MODE==0x0F)
- {
- if (Audio_Invalids.empty())
- {
- Audio_Invalids.resize(8);
- for (size_t Pos=0; Pos<8; Pos++)
- Audio_Invalids[Pos].resize(16);
- }
- Audio_Invalids[Channel][Buffer[Buffer_Offset+1]>>4]+=9;
- }
- }
-
- //audio_source_control
- if (Buffer[Buffer_Offset+3+0]==0x51) //audio_source_control
- {
- REC_ST =(Buffer[Buffer_Offset+3+2]&0x80)?true:false;
- REC_END=(Buffer[Buffer_Offset+3+2]&0x40)?true:false;
- REC_IsValid=true;
- }
-
- //audio_recdate
- if (Buffer[Buffer_Offset+3+0]==0x52) //Pack type=0x52 (audio_rectime)
- {
- int8u Days =((Buffer[Buffer_Offset+3+2]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+2]&0x0F) ) ;
- int8u Months =((Buffer[Buffer_Offset+3+3]&0x10)>>4)*10
- + ((Buffer[Buffer_Offset+3+3]&0x0F) ) ;
- int8u Years =((Buffer[Buffer_Offset+3+4]&0xF0)>>4)*10
- + ((Buffer[Buffer_Offset+3+4]&0x0F) ) ;
- if (Months<=12
- && Days <=31)
- {
- if (Speed_RecDate_Current.IsValid
- && Speed_RecDate_Current.Days !=Days
- && Speed_RecDate_Current.Months !=Months
- && Speed_RecDate_Current.Years !=Years)
- {
- Speed_RecDate_Current.MultipleValues=true; //There are 2+ different values
- }
- else if (!Speed_RecTime_Current.MultipleValues)
- {
- Speed_RecDate_Current.Days =Days;
- Speed_RecDate_Current.Months =Months;
- Speed_RecDate_Current.Years =Years;
- Speed_RecDate_Current.IsValid =true;
- }
- }
- }
-
- //audio_rectime
- if (Buffer[Buffer_Offset+3+0]==0x53) //Pack type=0x53 (audio_rectime)
- {
- int8u Frames =((Buffer[Buffer_Offset+3+1]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+1]&0x0F) ) ;
- int8u Seconds =((Buffer[Buffer_Offset+3+2]&0x70)>>4)*10
- + ((Buffer[Buffer_Offset+3+2]&0x0F)) ;
- int8u Minutes =((Buffer[Buffer_Offset+3+3]&0x70)>>4)*10
- + ((Buffer[Buffer_Offset+3+3]&0x0F) ) ;
- int8u Hours =((Buffer[Buffer_Offset+3+4]&0x30)>>4)*10
- + ((Buffer[Buffer_Offset+3+4]&0x0F) ) ;
- if (Seconds!=85
- && Minutes!=85
- && Hours !=45) //If not disabled
- {
- if (Speed_RecTime_Current.IsValid
- && Speed_RecTime_Current.Time.Frames !=Frames
- && Speed_RecTime_Current.Time.Seconds !=Seconds
- && Speed_RecTime_Current.Time.Minutes !=Minutes
- && Speed_RecTime_Current.Time.Hours !=Hours)
- {
- Speed_RecTime_Current.MultipleValues=true; //There are 2+ different values
- }
- else if (!Speed_RecTime_Current.MultipleValues)
- {
- Speed_RecTime_Current.Time.Frames =Frames;
- Speed_RecTime_Current.Time.Seconds =Seconds;
- Speed_RecTime_Current.Time.Minutes =Minutes;
- Speed_RecTime_Current.Time.Hours =Hours;
- Speed_RecTime_Current.IsValid =true;
- }
- }
- }
-
- //Audio errors
- if (Buffer[Buffer_Offset+8]==0x80)
- {
- if ((QU==0 && Buffer[Buffer_Offset+ 9]==0x00) //16-bit 0x8000
- || (QU==1 && Buffer[Buffer_Offset+10]==0x00) //12-bit 0x800
- || (QU==(int8u)-1 && ((Buffer[Buffer_Offset+ 9]==0x00 && Buffer[Buffer_Offset+10]==0x80 && Buffer[Buffer_Offset+11]==0x00)
- || (Buffer[Buffer_Offset+ 9]==0x80 && Buffer[Buffer_Offset+10]==0x00)))) //In case of QU is not already detected
- {
- if (Audio_Errors.empty())
- Audio_Errors.resize(16);
- Audio_Errors[Buffer[Buffer_Offset+1]>>4]++;
- }
- }
- }
- break;
-
- case 0x80 : //SCT=4 (Video)
- {
- //Speed_Arb_Current
- int8u Value=Buffer[Buffer_Offset+0]&0x0F;
- Speed_Arb_Current.Value_Counters[Value]++;
- if (Value==0xF)
- {
- if (!Speed_Arb_Current.IsValid)
- {
- Speed_Arb_Current.Value =0xF;
- Speed_Arb_Current.IsValid=true;
- }
- }
- else
- {
- if (Speed_Arb_Current.IsValid
- && Speed_Arb_Current.Value!=0xF
- && Speed_Arb_Current.Value!=Value)
- Speed_Arb_Current.MultipleValues=true; //There are 2+ different values
- else if (!Speed_Arb_Current.MultipleValues)
- {
- Speed_Arb_Current.Value =Value;
- Speed_Arb_Current.IsValid=true;
- }
- }
-
- //STA
- if (Buffer[Buffer_Offset+3]&0xF0)
- {
- if (video_source_Detected)
- {
- if (Video_STA_Errors.empty())
- Video_STA_Errors.resize(16);
- Video_STA_Errors[Buffer[Buffer_Offset+3]>>4]++;
- }
- }
- }
- break;
- }
-
- //Errors stats
- if (Frame_AtLeast1DIF &&
- (Buffer[Buffer_Offset ]&0xE0)==0x00 //SCT=0 (Header)
- && (Buffer[Buffer_Offset+1]&0xF0)==0x00 //Dseq=0
- && (Buffer[Buffer_Offset+1]&0x08)==0x00) //FSC=0
- Errors_Stats_Update();
-
- //Coherency test
- if (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x00)
- Speed_Contains_NULL++;
-
- Buffer_Offset+=80;
- }
-
- if (!Status[IsAccepted])
- File__Analyze::Buffer_Offset=0;
- Config->State_Set(((float)File_Offset)/File_Size);
-}
-
-void File_DvDif::Errors_Stats_Update()
-{
- if (!Analyze_Activated)
- {
- if (Config->File_DvDif_Analysis_Get())
- Analyze_Activated=true;
- else
- return;
- }
-
- Ztring Errors_Stats_Line;
- if (Speed_FrameCount) //We must have at least one complete frame
- {
- bool Errors_AreDetected=false;
- bool Infos_AreDetected=false;
- bool Arb_AreDetected=false;
-
- #if MEDIAINFO_EVENTS
- //Demux
- struct MediaInfo_Event_DvDif_Analysis_Frame_0 Event;
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_DvDif, MediaInfo_Event_DvDif_Analysis_Frame, 0);
- Event.TimeCode=0;
- Event.RecordedDateTime1=0;
- Event.RecordedDateTime2=0;
- Event.Arb=0;
- Event.Verbosity=0;
- Event.Errors=NULL;
- #endif //MEDIAINFO_EVENTS
-
- //Framerate computing
- float64 FrameRate=29.970;
- if (System_IsValid)
- FrameRate=System?25.000:29.970;
- else if (DSF_IsValid)
- FrameRate=DSF?25.000:29.970;
- else
- FrameRate=29.970;
- if (FrameRate==29.970 && Speed_TimeCode_Current.IsValid && !Speed_TimeCode_Current.Time.DropFrame)
- FrameRate=30.000;
-
- //Frame number
- Ztring Frame_Number_Padded=Ztring::ToZtring(Speed_FrameCount-1);
- if (Frame_Number_Padded.size()<8)
- Frame_Number_Padded.insert(0, 8-Frame_Number_Padded.size(), __T(' '));
- Errors_Stats_Line+=Frame_Number_Padded;
- Errors_Stats_Line+=__T('\t');
-
- //Time Offset
- float64 Time_Offset=(Speed_FrameCount-1)*1000/FrameRate;
- Errors_Stats_Line+=Ztring().Duration_From_Milliseconds((int64u)Time_Offset);
- Errors_Stats_Line+=__T('\t');
-
- //Timecode
- if (Speed_TimeCode_Current.IsValid)
- {
- Speed_TimeCodeZ_Last=Speed_TimeCodeZ_Current;
- Speed_TimeCodeZ_Current.clear();
- Speed_TimeCodeZ_Current.reserve(12);
- Speed_TimeCodeZ_Current.reserve(11);
- Speed_TimeCodeZ_Current+=__T('0')+Speed_TimeCode_Current.Time.Hours /10;
- Speed_TimeCodeZ_Current+=__T('0')+Speed_TimeCode_Current.Time.Hours %10;
- Speed_TimeCodeZ_Current+=__T(':');
- Speed_TimeCodeZ_Current+=__T('0')+Speed_TimeCode_Current.Time.Minutes/10;
- Speed_TimeCodeZ_Current+=__T('0')+Speed_TimeCode_Current.Time.Minutes%10;
- Speed_TimeCodeZ_Current+=__T(':');
- Speed_TimeCodeZ_Current+=__T('0')+Speed_TimeCode_Current.Time.Seconds/10;
- Speed_TimeCodeZ_Current+=__T('0')+Speed_TimeCode_Current.Time.Seconds%10;
- Speed_TimeCodeZ_Current+=(!DSF && Speed_TimeCode_Current.Time.DropFrame)?__T(';'):__T(':');
- Speed_TimeCodeZ_Current+=__T('0')+Speed_TimeCode_Current.Time.Frames /10;
- Speed_TimeCodeZ_Current+=__T('0')+Speed_TimeCode_Current.Time.Frames %10;
- Errors_Stats_Line+=Speed_TimeCodeZ_Current;
- if (Speed_TimeCodeZ.empty())
- {
- Speed_TimeCodeZ.resize(1);
- Speed_TimeCodeZ[0].First.FramePos=Speed_FrameCount;
- Speed_TimeCodeZ[0].First.TimeCode=Speed_TimeCodeZ_Current;
- }
- if (Speed_TimeStampsZ.empty())
- {
- Speed_TimeStampsZ.resize(1);
- Speed_TimeStampsZ[0].First.FramePos=Speed_FrameCount;
- Speed_TimeStampsZ[0].First.Time+=Ztring().Duration_From_Milliseconds((int64u)Time_Offset);
- }
- if (Speed_TimeStampsZ[0].First.FramePos==Speed_FrameCount)
- Speed_TimeStampsZ[0].First.TimeCode=Speed_TimeCodeZ_Current;
- #if MEDIAINFO_EVENTS
- int32u Seconds=Speed_TimeCode_Current.Time.Hours *60*60
- + Speed_TimeCode_Current.Time.Minutes *60
- + Speed_TimeCode_Current.Time.Seconds ;
- Event.TimeCode|=Seconds<<8;
- Event.TimeCode|=(!DSF && Speed_TimeCode_Current.Time.DropFrame)<<7;
- Event.TimeCode|=Speed_TimeCode_Current.Time.Frames;
- #endif //MEDIAINFO_EVENTS
- }
- else
- {
- Errors_Stats_Line+=__T("XX:XX:XX:XX");
- #if MEDIAINFO_EVENTS
- Event.TimeCode|=0x7FFFF<<8;
- //Event.TimeCode|=Speed_TimeCode_Current.Time.DropFrame<<7;
- Event.TimeCode|=0x3F;
- #endif //MEDIAINFO_EVENTS
- }
- Errors_Stats_Line+=__T('\t');
-
- //Timecode order coherency
- if (!Speed_TimeCode_IsValid && Speed_TimeCode_Current.IsValid
- && (Speed_TimeCode_Current.Time.Hours!=0
- || Speed_TimeCode_Current.Time.Minutes!=0
- || Speed_TimeCode_Current.Time.Seconds!=0
- || Speed_TimeCode_Current.Time.Frames!=0))
- Speed_TimeCode_IsValid=true;
- bool TimeCode_Disrupted=false;
- if (Speed_TimeCode_IsValid && Speed_TimeCode_Current.IsValid && Speed_TimeCode_Last.IsValid
- && Speed_TimeCode_Current.Time.Frames ==Speed_TimeCode_Last.Time.Frames
- && Speed_TimeCode_Current.Time.Seconds==Speed_TimeCode_Last.Time.Seconds
- && Speed_TimeCode_Current.Time.Minutes==Speed_TimeCode_Last.Time.Minutes
- && Speed_TimeCode_Current.Time.Hours ==Speed_TimeCode_Last.Time.Hours)
- {
- Errors_Stats_Line+=__T('R');
- #if MEDIAINFO_EVENTS
- Event.TimeCode|=1<<31;
- #endif //MEDIAINFO_EVENTS
- if (Speed_TimeCode_Current.Time.Hours
- || Speed_TimeCode_Current.Time.Seconds
- || Speed_TimeCode_Current.Time.Minutes)
- Errors_AreDetected=true;
- }
- else if (Speed_TimeCode_IsValid && Speed_TimeCode_Current.IsValid && Speed_TimeCode_Current_Theory.IsValid
- && ( Speed_TimeCode_Current.Time.Frames !=Speed_TimeCode_Current_Theory.Time.Frames
- || Speed_TimeCode_Current.Time.Seconds!=Speed_TimeCode_Current_Theory.Time.Seconds
- || Speed_TimeCode_Current.Time.Minutes!=Speed_TimeCode_Current_Theory.Time.Minutes
- || Speed_TimeCode_Current.Time.Hours !=Speed_TimeCode_Current_Theory.Time.Hours))
- {
- size_t Speed_TimeCodeZ_Pos=Speed_TimeCodeZ.size();
- Speed_TimeCodeZ.resize(Speed_TimeCodeZ_Pos+1);
- Speed_TimeCodeZ[Speed_TimeCodeZ_Pos].First.FramePos=Speed_FrameCount-1;
- Speed_TimeCodeZ[Speed_TimeCodeZ_Pos].First.TimeCode=Speed_TimeCodeZ_Current;
- Speed_TimeCodeZ[Speed_TimeCodeZ_Pos-1].Last.FramePos=Speed_FrameCount-1;
- Speed_TimeCodeZ[Speed_TimeCodeZ_Pos-1].Last.TimeCode=Speed_TimeCodeZ_Last;
-
- Errors_Stats_Line+=__T('N');
- #if MEDIAINFO_EVENTS
- Event.TimeCode|=1<<30;
- #endif //MEDIAINFO_EVENTS
- Speed_TimeCode_Current_Theory=Speed_TimeCode_Current;
- TimeCode_Disrupted=true;
- Errors_AreDetected=true;
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
-
- //RecDate/RecTime
- if (Speed_RecDate_Current.IsValid)
- {
- Speed_RecDateZ_Last=Speed_RecDateZ_Current;
- Speed_RecDateZ_Current.clear();
- Speed_RecDateZ_Current.reserve(10);
- Speed_RecDateZ_Current+=Speed_RecDate_Current.Years<75?__T("20"):__T("19");
- Speed_RecDateZ_Current+=__T('0')+Speed_RecDate_Current.Years /10;
- Speed_RecDateZ_Current+=__T('0')+Speed_RecDate_Current.Years %10;
- Speed_RecDateZ_Current+=__T('-');
- Speed_RecDateZ_Current+=__T('0')+Speed_RecDate_Current.Months /10;
- Speed_RecDateZ_Current+=__T('0')+Speed_RecDate_Current.Months %10;
- Speed_RecDateZ_Current+=__T('-');
- Speed_RecDateZ_Current+=__T('0')+Speed_RecDate_Current.Days /10;
- Speed_RecDateZ_Current+=__T('0')+Speed_RecDate_Current.Days %10;
- Errors_Stats_Line+=Speed_RecDateZ_Current;
- if (Speed_RecZ.empty())
- {
- Speed_RecZ.resize(1);
- Speed_RecZ[0].First.FramePos=Speed_FrameCount;
- Speed_RecZ[0].First.Date=Speed_RecDateZ_Current;
- }
- if (Speed_TimeStampsZ.empty())
- {
- Speed_TimeStampsZ.resize(1);
- Speed_TimeStampsZ[0].First.FramePos=Speed_FrameCount;
- Speed_TimeStampsZ[0].First.Time+=Ztring().Duration_From_Milliseconds((int64u)Time_Offset);
- }
- if (Speed_TimeStampsZ[0].First.FramePos==Speed_FrameCount)
- Speed_TimeStampsZ[0].First.Date=Speed_RecDateZ_Current;
- #if MEDIAINFO_EVENTS
- Event.RecordedDateTime1|=Speed_RecDate_Current.Years<<17;
- Event.RecordedDateTime2|=Speed_RecDate_Current.Months<<12;
- Event.RecordedDateTime2|=Speed_RecDate_Current.Days<<8;
- #endif //MEDIAINFO_EVENTS
- }
- else
- {
- Errors_Stats_Line+=__T("XXXX-XX-XX");
- #if MEDIAINFO_EVENTS
- Event.RecordedDateTime1|=0x7F<<17;
- Event.RecordedDateTime2|=0x0F<<12;
- Event.RecordedDateTime2|=0x1F<<8;
- #endif //MEDIAINFO_EVENTS
- }
- Errors_Stats_Line+=__T(" ");
- if (Speed_RecTime_Current.IsValid)
- {
- Speed_RecTimeZ_Last=Speed_RecTimeZ_Current;
- Speed_RecTimeZ_Current.clear();
- Speed_RecTimeZ_Current.reserve(12);
- Speed_RecTimeZ_Current+=__T('0')+Speed_RecTime_Current.Time.Hours /10;
- Speed_RecTimeZ_Current+=__T('0')+Speed_RecTime_Current.Time.Hours %10;
- Speed_RecTimeZ_Current+=__T(':');
- Speed_RecTimeZ_Current+=__T('0')+Speed_RecTime_Current.Time.Minutes/10;
- Speed_RecTimeZ_Current+=__T('0')+Speed_RecTime_Current.Time.Minutes%10;
- Speed_RecTimeZ_Current+=__T(':');
- Speed_RecTimeZ_Current+=__T('0')+Speed_RecTime_Current.Time.Seconds/10;
- Speed_RecTimeZ_Current+=__T('0')+Speed_RecTime_Current.Time.Seconds%10;
- #if MEDIAINFO_EVENTS
- int32u Seconds=Speed_RecTime_Current.Time.Hours *60*60
- + Speed_RecTime_Current.Time.Minutes *60
- + Speed_RecTime_Current.Time.Seconds ;
- Event.RecordedDateTime1|=Seconds;
- #endif //MEDIAINFO_EVENTS
- if (Speed_RecTime_Current.Time.Frames!=45)
- {
- int32u Milliseconds;
- if (System_IsValid)
- Milliseconds=Speed_RecTime_Current.Time.Frames*(System?40:33);
- else if (DSF_IsValid)
- Milliseconds=Speed_RecTime_Current.Time.Frames*(DSF?40:33);
- else
- Milliseconds=Speed_RecTime_Current.Time.Frames*33;
- Speed_RecTimeZ_Current+=__T('.');
- Speed_RecTimeZ_Current+=__T('0')+(Char)(Milliseconds/100);
- Speed_RecTimeZ_Current+=__T('0')+(Char)((Milliseconds%100)/10);
- Speed_RecTimeZ_Current+=__T('0')+(Char)(Milliseconds%10);
- #if MEDIAINFO_EVENTS
- Event.RecordedDateTime2|=Speed_RecTime_Current.Time.Frames;
- #endif //MEDIAINFO_EVENTS
- }
- else
- {
- Speed_RecTimeZ_Current+=__T(" ");
- #if MEDIAINFO_EVENTS
- Event.RecordedDateTime2|=0x7F;
- #endif //MEDIAINFO_EVENTS
- }
- Errors_Stats_Line+=Speed_RecTimeZ_Current;
- if (Speed_RecZ.empty() || Speed_RecZ[0].First.FramePos==Speed_FrameCount) //Empty or the same frame as RecDate
- {
- if (Speed_RecZ.empty())
- Speed_RecZ.resize(1);
- Speed_RecZ[0].First.FramePos=Speed_FrameCount;
- Speed_RecZ[0].First.Time=Speed_RecTimeZ_Current;
- }
- if (Speed_TimeStampsZ.empty())
- {
- Speed_TimeStampsZ.resize(1);
- Speed_TimeStampsZ[0].First.FramePos=Speed_FrameCount;
- Speed_TimeStampsZ[0].First.Time+=Ztring().Duration_From_Milliseconds((int64u)Time_Offset);
- }
- if (Speed_TimeStampsZ[0].First.FramePos==Speed_FrameCount) //Empty or the same frame as RecDate or the same frame as TimeCode
- Speed_TimeStampsZ[0].First.Time=Speed_RecTimeZ_Current;
- }
- else
- {
- Errors_Stats_Line+=__T("XX:XX:XX.XXX");
- #if MEDIAINFO_EVENTS
- Event.RecordedDateTime1|=0x1FFFF;
- Event.RecordedDateTime2|=0x7F;
- #endif //MEDIAINFO_EVENTS
- }
- Errors_Stats_Line+=__T('\t');
-
- //RecDate/RecTime coherency, Rec start/end
- bool RecTime_Disrupted=false;
- if (Speed_RecTime_Current.IsValid && Speed_RecTime_Current_Theory.IsValid
- && !( Speed_RecTime_Current.Time.Seconds==Speed_RecTime_Current_Theory.Time.Seconds
- && Speed_RecTime_Current.Time.Minutes==Speed_RecTime_Current_Theory.Time.Minutes
- && Speed_RecTime_Current.Time.Hours ==Speed_RecTime_Current_Theory.Time.Hours)
- && !( Speed_RecTime_Current.Time.Seconds==Speed_RecTime_Current_Theory2.Time.Seconds
- && Speed_RecTime_Current.Time.Minutes==Speed_RecTime_Current_Theory2.Time.Minutes
- && Speed_RecTime_Current.Time.Hours ==Speed_RecTime_Current_Theory2.Time.Hours))
- {
- size_t Speed_RecZ_Pos=Speed_RecZ.size();
- Speed_RecZ.resize(Speed_RecZ_Pos+1);
- Speed_RecZ[Speed_RecZ_Pos].First.FramePos=Speed_FrameCount-1;
- Speed_RecZ[Speed_RecZ_Pos].First.Date=Speed_RecDateZ_Current;
- Speed_RecZ[Speed_RecZ_Pos].First.Time=Speed_RecTimeZ_Current;
- Speed_RecZ[Speed_RecZ_Pos-1].Last.FramePos=Speed_FrameCount-1;
- Speed_RecZ[Speed_RecZ_Pos-1].Last.Date=Speed_RecDateZ_Last;
- Speed_RecZ[Speed_RecZ_Pos-1].Last.Time=Speed_RecTimeZ_Last;
-
- Errors_Stats_Line+=__T('N');
- #if MEDIAINFO_EVENTS
- Event.RecordedDateTime1|=1<<30;
- #endif //MEDIAINFO_EVENTS
- if (!REC_IsValid || REC_ST)
- {
- RecTime_Disrupted=true;
- Errors_AreDetected=true; //If there is a start, this is not an error
- }
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
-
- //Speed_Arb_Current
- if (Speed_Arb_Current.IsValid)
- {
- //Searching the bigest value count
- int8u Biggest_Pos=0xF;
- size_t Biggest_Count=0;
- for (int8u Pos=0; Pos<=0xF; Pos++) //0xF is not considered as a valid value.
- if (Speed_Arb_Current.Value_Counters[Pos]>Biggest_Count)
- {
- Biggest_Pos=Pos;
- Biggest_Count=Speed_Arb_Current.Value_Counters[Pos];
- }
- Errors_Stats_Line+=Ztring::ToZtring(Biggest_Pos, 16);
- #if MEDIAINFO_EVENTS
- Event.Arb|=Biggest_Pos;
- Event.Arb|=1<<4;
- #endif //MEDIAINFO_EVENTS
- Speed_Arb_Current.Value=Biggest_Pos;
- }
- else
- Errors_Stats_Line+=__T('X');
- Errors_Stats_Line+=__T('\t');
-
- //Speed_Arb_Current coherency
- if (!Speed_Arb_IsValid && Speed_Arb_Current.IsValid && Speed_Arb_Current.Value!=0)
- Speed_Arb_IsValid=true;
- if (Speed_Arb_IsValid && Speed_Arb_Current.IsValid && Speed_Arb_Last.IsValid
- && Speed_Arb_Current.Value ==Speed_Arb_Last.Value
- && Speed_Arb_Current.Value!=0xF)
- {
- Errors_Stats_Line+=__T('R');
- #if MEDIAINFO_EVENTS
- Event.Arb|=1<<7;
- #endif //MEDIAINFO_EVENTS
- if (Speed_Arb_Current.Value!=0xF)
- Arb_AreDetected=true;
-
- Speed_Arb_Current_Theory.IsValid=false;
- }
- else if (Speed_Arb_IsValid && Speed_Arb_Current.IsValid && Speed_Arb_Current_Theory.IsValid
- && Speed_Arb_Current.Value != Speed_Arb_Current_Theory.Value)
- {
- Errors_Stats_Line+=__T('N');
- #if MEDIAINFO_EVENTS
- Event.Arb|=1<<6;
- #endif //MEDIAINFO_EVENTS
- Speed_Arb_Current_Theory=Speed_Arb_Current;
- Arb_AreDetected=true;
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
-
- //Start
- if (REC_IsValid && !REC_ST)
- {
- Errors_Stats_Line+=__T('S');
- #if MEDIAINFO_EVENTS
- Event.RecordedDateTime1|=1<<29;
- #endif //MEDIAINFO_EVENTS
- Infos_AreDetected=true;
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
-
- //End
- if (REC_IsValid && !REC_END)
- {
- Errors_Stats_Line+=__T('E');
- #if MEDIAINFO_EVENTS
- Event.RecordedDateTime1|=1<<28;
- #endif //MEDIAINFO_EVENTS
- Infos_AreDetected=true;
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
-
- //TimeStamp (RecDate/RecTime and TimeCode together)
- if (TimeCode_Disrupted || RecTime_Disrupted)
- {
- size_t Speed_TimeStampsZ_Pos=Speed_TimeStampsZ.size();
- Speed_TimeStampsZ.resize(Speed_TimeStampsZ_Pos+1);
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].First.FramePos=Speed_FrameCount-1;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].First.TimeCode=Speed_TimeCodeZ_Current;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].First.Date=Speed_RecDateZ_Current;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].First.Time=Speed_RecTimeZ_Current;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos-1].Last.FramePos=Speed_FrameCount-1;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos-1].Last.TimeCode=Speed_TimeCodeZ_Last;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos-1].Last.Date=Speed_RecDateZ_Last;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos-1].Last.Time=Speed_RecTimeZ_Last;
- }
-
- //Channels
- for (size_t Channel=0; Channel<8; Channel++)
- {
- if (!audio_source_IsPresent.empty() && audio_source_IsPresent[Channel])
- {
- if (Channel<4 && (!Audio_Invalids.empty() || !Audio_Errors.empty()))
- {
- size_t Audio_Errors_Count=0;
- size_t Pos_Begin=(Channel%2)*(QU_System?6:5);
- size_t Pos_End=(Channel%2+1)*(QU_System?6:5);
- if ((Channel>=2 && !QU_FSC)
- || (Channel< 2 && QU_FSC))
- Pos_End=Pos_Begin; //Not here
- if (!Audio_Invalids.empty())
- for (size_t Pos=Pos_Begin; Pos<Pos_End; Pos++)
- if (Audio_Invalids[Channel][Pos])
- Audio_Errors_Count+=Audio_Invalids[Channel][Pos];
- if (!Audio_Errors.empty())
- for (size_t Pos=Pos_Begin; Pos<Pos_End; Pos++)
- if (Audio_Errors[Pos])
- Audio_Errors_Count+=Audio_Errors[Pos];
- if (Audio_Errors_Count>=(size_t)((QU_System?6:5)*9))
- audio_source_IsPresent[Channel]=false;
- else
- CH_IsPresent[Channel]=true;
- }
- }
- }
-
-
- //Error 1: Video errors
- Ztring Errors_Stats_Line_Details;
- if (!Video_STA_Errors.empty())
- {
- if (!Stats_Total_AlreadyDetected)
- {
- Stats_Total_AlreadyDetected=true;
- Stats_Total++;
- Stats_Total_WithoutArb++;
- }
- Stats[1]++;
- Errors_Stats_Line+=__T('1');
-
- size_t Video_STA_Errors_Count=0;
- Ztring Video_STA_Errors_Details;
- for (size_t Pos=0; Pos<16; Pos++)
- {
- if (Video_STA_Errors[Pos])
- {
- Video_STA_Errors_Count+=Video_STA_Errors[Pos];
- Ztring Video_STA_Errors_Count_Padded=Ztring::ToZtring(Video_STA_Errors[Pos]);
- if (Video_STA_Errors_Count_Padded.size()<8)
- Video_STA_Errors_Count_Padded.insert(0, 8-Video_STA_Errors_Count_Padded.size(), __T(' '));
- Video_STA_Errors_Details+=Video_STA_Errors_Count_Padded;
- Video_STA_Errors_Details+=__T(" \"");
- Video_STA_Errors_Details+=Ztring::ToZtring(Pos, 16);
- Video_STA_Errors_Details+=__T("\" errors, ");
- if (Video_STA_Errors_Total.empty())
- Video_STA_Errors_Total.resize(16);
- Video_STA_Errors_Total[Pos]+=Video_STA_Errors[Pos];
- }
- }
- if (Video_STA_Errors_Details.size()>2)
- {
- Ztring Video_STA_Errors_Count_Padded=Ztring::ToZtring(((float)Video_STA_Errors_Count)*100/((DSF_IsValid && DSF)?1500:1350)*(QU_FSC?2:1), 2);
- if (Video_STA_Errors_Count_Padded.size()<5)
- Video_STA_Errors_Count_Padded.insert(0, 5-Video_STA_Errors_Count_Padded.size(), __T(' '));
- Errors_Stats_Line_Details+=Video_STA_Errors_Count_Padded+__T("%");
- Video_STA_Errors_Details.resize(Video_STA_Errors_Details.size()-2);
- Errors_Stats_Line_Details+=__T(" (")+Video_STA_Errors_Details+__T(")");
- Speed_FrameCount_Video_STA_Errors++;
- Errors_AreDetected=true;
- }
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Error 2: Audio errors
- if (QU!=(int8u)-1 && (!Audio_Invalids.empty() || !Audio_Errors.empty()))
- {
- if (Audio_Errors.empty())
- Audio_Errors.resize(16);
- bool ErrorsAreAlreadyDetected=false;
- for (size_t Channel=0; Channel<4; Channel++)
- {
- size_t Audio_Errors_Count=0;
- Ztring Audio_Errors_Details;
- size_t Pos_Begin=(Channel%2)*(QU_System?6:5);
- size_t Pos_End=(Channel%2+1)*(QU_System?6:5);
- if ((Channel>=2 && !QU_FSC)
- || (Channel< 2 && QU_FSC)
- || !CH_IsPresent[Channel])
- Pos_End=Pos_Begin; //Not here
- for (size_t Pos=Pos_Begin; Pos<Pos_End; Pos++)
- {
- if (Audio_Errors[Pos])
- {
- Audio_Errors_Count+=Audio_Errors[Pos];
- Ztring Audio_Errors_Count_Padded=Ztring::ToZtring(Audio_Errors[Pos]);
- if (Audio_Errors_Count_Padded.size()<2)
- Audio_Errors_Count_Padded.insert(0, 2-Audio_Errors_Count_Padded.size(), __T(' '));
- Audio_Errors_Details+=Audio_Errors_Count_Padded;
- Audio_Errors_Details+=__T(" Dseq=");
- Audio_Errors_Details+=Ztring::ToZtring(Pos, 16);
- Audio_Errors_Details+=__T(", ");
- if (Audio_Errors_Total.empty())
- {
- Audio_Errors_Total.resize(8);
- for (size_t Audio_Errors_Pos=0; Audio_Errors_Pos<8; Audio_Errors_Pos++)
- Audio_Errors_Total[Audio_Errors_Pos].resize(16);
- }
- Audio_Errors_Total[Channel][Pos]+=Audio_Errors[Pos];
- }
- }
- if (Audio_Errors_Count)
- {
- if (!ErrorsAreAlreadyDetected)
- {
- if (!Stats_Total_AlreadyDetected)
- {
- Stats_Total_AlreadyDetected=true;
- Stats_Total++;
- Stats_Total_WithoutArb++;
- }
- Stats[2]++;
- Errors_Stats_Line+=__T('2');
- }
-
- Ztring Audio_Errors_Count_Padded=Ztring::ToZtring(((float)Audio_Errors_Count)*100/((DSF_IsValid && DSF)?54:45)*(QU_FSC?2:1), 2);
- if (Audio_Errors_Count_Padded.size()<2)
- Audio_Errors_Count_Padded.insert(0, 2-Audio_Errors_Count_Padded.size(), __T(' '));
- if (ErrorsAreAlreadyDetected)
- Errors_Stats_Line_Details+=__T(", ");
- if (Audio_Errors_Count<(size_t)((QU_System?6:5)*9))
- {
- Errors_Stats_Line_Details+=__T("CH")+Ztring::ToZtring(Channel+1)+__T(": ")+Audio_Errors_Count_Padded+__T("%");
- Audio_Errors_Details.resize(Audio_Errors_Details.size()-2);
- Errors_Stats_Line_Details+=__T(" (")+Audio_Errors_Details+__T(")");
- }
- else
- Errors_Stats_Line_Details+=__T("CH")+Ztring::ToZtring(Channel+1)+__T(": no valid DIF");
-
- Speed_FrameCount_Audio_Errors[Channel]++;
- ErrorsAreAlreadyDetected=true;
- Errors_AreDetected=true;
- }
- }
- if (!ErrorsAreAlreadyDetected)
- Errors_Stats_Line+=__T(' ');
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Error 3: Timecode incoherency
- if (Speed_TimeCode_Current.MultipleValues)
- {
- if (!Stats_Total_AlreadyDetected)
- {
- Stats_Total_AlreadyDetected=true;
- Stats_Total++;
- Stats_Total_WithoutArb++;
- }
- Stats[3]++;
- Errors_Stats_Line+=__T('3');
- Errors_Stats_Line_Details+=__T("Timecode incoherency, first detected value is used");
- Speed_FrameCount_Timecode_Incoherency++;
- Errors_AreDetected=true;
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Error 4: DIF order incoherency
- if (Speed_Contains_NULL)
- {
- if (!Stats_Total_AlreadyDetected)
- {
- Stats_Total_AlreadyDetected=true;
- Stats_Total++;
- Stats_Total_WithoutArb++;
- }
- Stats[4]++;
- Errors_Stats_Line+=__T('4');
- Errors_Stats_Line_Details+=Ztring::ToZtring(Speed_Contains_NULL)+__T(" NULL DIFs");
- Speed_FrameCount_Contains_NULL++;
- Errors_AreDetected=true;
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Error 5: Speed_Arb_Current incoherency
- if (Speed_Arb_Current.MultipleValues)
- {
- if (!Stats_Total_AlreadyDetected)
- {
- Stats_Total_AlreadyDetected=true;
- Stats_Total++;
- }
- Stats[5]++;
- Errors_Stats_Line+=__T('5');
- Ztring Arb_Errors;
- for (size_t Pos=0; Pos<16; Pos++)
- if (Speed_Arb_Current.Value_Counters[Pos])
- {
- Arb_Errors+=Ztring::ToZtring(Speed_Arb_Current.Value_Counters[Pos]);
- Arb_Errors+=__T(" Arb bit=\"");
- Arb_Errors+=Ztring::ToZtring(Pos, 16);
- Arb_Errors+=__T("\", ");
- }
- if (Arb_Errors.size()>2)
- {
- Arb_Errors.resize(Arb_Errors.size()-2);
- Errors_Stats_Line_Details+=Arb_Errors;
- }
- Speed_FrameCount_Arb_Incoherency++;
- Arb_AreDetected=true;
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Error 6:
- if (Mpeg4_stts && Mpeg4_stts_Pos<Mpeg4_stts->size() && Speed_FrameCount-1>=Mpeg4_stts->at(Mpeg4_stts_Pos).Pos_Begin && Speed_FrameCount-1<Mpeg4_stts->at(Mpeg4_stts_Pos).Pos_End)
- {
- if (!Stats_Total_AlreadyDetected)
- {
- Stats_Total_AlreadyDetected=true;
- Stats_Total++;
- Stats_Total_WithoutArb++;
- }
- Stats[6]++;
- Errors_Stats_Line+=__T('6');
- Errors_Stats_Line_Details+=__T("stts flucuation");
- Speed_FrameCount_Stts_Fluctuation++;
- Errors_AreDetected=true;
- }
- else
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Error 7:
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Error 8:
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Error 9:
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Error 0:
- Errors_Stats_Line+=__T(' ');
- Errors_Stats_Line+=__T('\t');
- Errors_Stats_Line_Details+=__T('\t');
-
- //Filling the main text if needed
- {
- #if MEDIAINFO_EVENTS
- if (!Config->Event_CallBackFunction_IsSet())
- {
- Errors_Stats_10+=Errors_Stats_Line;
- Errors_Stats_10+=Errors_Stats_Line_Details;
- Errors_Stats_10+=__T("&");
- }
- Event.Verbosity=10;
- #endif //MEDIAINFO_EVENTS
- }
- if (Speed_FrameCount==1
- || Status[IsFinished]
- || Errors_AreDetected
- || Infos_AreDetected
- || Arb_AreDetected)
- {
- #if MEDIAINFO_EVENTS
- if (!Config->Event_CallBackFunction_IsSet())
- {
- Errors_Stats_09+=Errors_Stats_Line;
- Errors_Stats_09+=Errors_Stats_Line_Details;
- Errors_Stats_09+=__T("&");
- }
- Event.Verbosity=9;
- #endif //MEDIAINFO_EVENTS
-
- if (Speed_FrameCount==1
- || Status[IsFinished]
- || Errors_AreDetected
- || Infos_AreDetected)
- {
- #if MEDIAINFO_EVENTS
- if (!Config->Event_CallBackFunction_IsSet())
- {
- Errors_Stats_05+=Errors_Stats_Line;
- Errors_Stats_05+=Errors_Stats_Line_Details;
- Errors_Stats_05+=__T("&");
- }
- Event.Verbosity=5;
- #endif //MEDIAINFO_EVENTS
-
- if (Speed_FrameCount==1
- || Status[IsFinished]
- || Errors_AreDetected)
- {
- #if MEDIAINFO_EVENTS
- if (!Config->Event_CallBackFunction_IsSet())
- {
- Errors_Stats_03+=Errors_Stats_Line;
- Errors_Stats_03+=Errors_Stats_Line_Details;
- Errors_Stats_03+=__T("&");
- }
- Event.Verbosity=3;
- #endif //MEDIAINFO_EVENTS
- }
- }
- }
-
- #if MEDIAINFO_EVENTS
- std::string Errors;
- if (Errors_Stats_Line_Details.size()>10)
- {
- Errors=Errors_Stats_Line_Details.To_Local();
- Event.Errors=(char*)Errors.c_str();
- }
- Config->Event_Send(this, (const int8u*)&Event, sizeof(MediaInfo_Event_DvDif_Analysis_Frame_0));
- #endif //MEDIAINFO_EVENTS
- }
-
- //Speed_TimeCode_Current
- if (!Speed_TimeCode_Current_Theory.IsValid)
- Speed_TimeCode_Current_Theory=Speed_TimeCode_Current;
- if (Speed_TimeCode_Current_Theory.IsValid)
- {
- int8u Frames_Max;
- if (System_IsValid)
- Frames_Max=System?25:30;
- else if (DSF_IsValid)
- Frames_Max=DSF?25:30;
- else
- Frames_Max=30;
-
- Speed_TimeCode_Current_Theory.Time.Frames++;
- if (Speed_TimeCode_Current_Theory.Time.Frames>=Frames_Max)
- {
- Speed_TimeCode_Current_Theory.Time.Seconds++;
- Speed_TimeCode_Current_Theory.Time.Frames=0;
- if (Speed_TimeCode_Current_Theory.Time.Seconds>=60)
- {
- Speed_TimeCode_Current_Theory.Time.Seconds=0;
- Speed_TimeCode_Current_Theory.Time.Minutes++;
-
- if (!DSF && Speed_TimeCode_Current_Theory.Time.DropFrame && Speed_TimeCode_Current_Theory.Time.Minutes%10)
- Speed_TimeCode_Current_Theory.Time.Frames=2; //frames 0 and 1 are dropped for every minutes except 00 10 20 30 40 50
-
- if (Speed_TimeCode_Current_Theory.Time.Minutes>=60)
- {
- Speed_TimeCode_Current_Theory.Time.Minutes=0;
- Speed_TimeCode_Current_Theory.Time.Hours++;
- if (Speed_TimeCode_Current_Theory.Time.Hours>=24)
- {
- Speed_TimeCode_Current_Theory.Time.Hours=0;
- }
- }
- }
- }
- }
-
- //Speed_RecTime_Current_Theory
- Speed_RecTime_Current_Theory=Speed_RecTime_Current;
- Speed_RecTime_Current_Theory2=Speed_RecTime_Current; //Don't change it
- if (Speed_RecTime_Current_Theory.IsValid)
- {
- Speed_RecTime_Current_Theory.Time.Seconds++;
- if (Speed_RecTime_Current_Theory.Time.Seconds>=60)
- {
- Speed_RecTime_Current_Theory.Time.Seconds=0;
- Speed_RecTime_Current_Theory.Time.Minutes++;
- if (Speed_RecTime_Current_Theory.Time.Seconds>=60)
- {
- Speed_RecTime_Current_Theory.Time.Minutes=0;
- Speed_RecTime_Current_Theory.Time.Hours++;
- if (Speed_RecTime_Current_Theory.Time.Hours>=24)
- {
- Speed_RecTime_Current_Theory.Time.Hours=0;
- }
- }
- }
- }
-
- //Speed_Arb_Current_Theory
- if (!Speed_Arb_Current_Theory.IsValid && Speed_Arb_Current.Value!=0xF)
- Speed_Arb_Current_Theory=Speed_Arb_Current;
- if (Speed_Arb_Current_Theory.IsValid && Speed_Arb_Current.Value!=0xF)
- {
- Speed_Arb_Current_Theory.Value++;
- if (Speed_Arb_Current_Theory.Value>=12)
- {
- Speed_Arb_Current_Theory.Value=0;
- }
- }
-
- Speed_TimeCode_Last=Speed_TimeCode_Current;
- Speed_TimeCode_Current.Clear();
- Speed_RecDate_Current.IsValid=false;
- Speed_RecDate_Current.MultipleValues=false;
- Speed_RecTime_Current.IsValid=false;
- Speed_RecTime_Current.MultipleValues=false;
- Speed_Arb_Last=Speed_Arb_Current;
- Speed_Arb_Current.Clear();
- Speed_FrameCount++;
- REC_IsValid=false;
- Speed_Contains_NULL=0;
- Frame_AtLeast1DIF=true;
- if (Buffer_Offset+2>=Buffer_Size
- || (Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x00))
- Frame_AtLeast1DIF=false;
- Video_STA_Errors.clear();
- Audio_Errors.clear();
- Audio_Invalids.clear();
- Stats_Total_AlreadyDetected=false;
-}
-
-void File_DvDif::Errors_Stats_Update_Finnish()
-{
- if (!Analyze_Activated)
- {
- if (Config->File_DvDif_Analysis_Get())
- Analyze_Activated=true;
- else
- return;
- }
-
- //Preparing next frame
- Speed_FrameCount--;
- Ztring Errors_Stats_End_03;
- Ztring Errors_Stats_End_05;
- Ztring Errors_Stats_End_Lines;
-
- //Frames
- if (Speed_FrameCount)
- Errors_Stats_End_Lines+=__T("Frame Count: ")+Ztring::ToZtring(Speed_FrameCount)+__T('&');
-
- //One block
- if (!Errors_Stats_End_Lines.empty())
- {
- Errors_Stats_End_05+=Errors_Stats_End_Lines;
- Errors_Stats_End_05+=__T('&');
- Errors_Stats_End_Lines.clear();
- }
-
- //Error 1: Video error concealment
- if (Speed_FrameCount_Video_STA_Errors)
- Errors_Stats_End_Lines+=__T("Frame count with video error concealment: ")+Ztring::ToZtring(Speed_FrameCount_Video_STA_Errors)+__T(" frames &");
- if (!Video_STA_Errors_Total.empty())
- {
- Ztring Errors_Details;
- size_t Errors_Count=0;
- for (size_t Pos=0; Pos<16; Pos++)
- {
- if (Video_STA_Errors_Total[Pos])
- {
- Errors_Count+=Video_STA_Errors_Total[Pos];
- Ztring Errors_Count_Padded=Ztring::ToZtring(Video_STA_Errors_Total[Pos]);
- if (Errors_Count_Padded.size()<8)
- Errors_Count_Padded.insert(0, 8-Errors_Count_Padded.size(), __T(' '));
- Errors_Details+=Errors_Count_Padded;
- Errors_Details+=__T(" \"");
- Errors_Details+=Ztring::ToZtring(Pos, 16);
- Errors_Details+=__T("\" errors, ");
- }
- }
- if (Errors_Details.size()>2)
- {
- Errors_Stats_End_Lines+=__T("Total video error concealment: ");
- Ztring Errors_Count_Padded=Ztring::ToZtring(Errors_Count);
- if (Errors_Count_Padded.size()<8)
- Errors_Count_Padded.insert(0, 8-Errors_Count_Padded.size(), __T(' '));
- Errors_Stats_End_Lines+=__T(" ")+Errors_Count_Padded+__T(" errors");
- Errors_Details.resize(Errors_Details.size()-2);
- Errors_Stats_End_Lines+=__T(" (")+Errors_Details+__T(")")+__T('&');
- }
- }
-
- //Error 2: Audio error code
- if (!Audio_Errors_Total.empty())
- {
- for (size_t Channel=0; Channel<8; Channel++)
- {
- if (Speed_FrameCount_Audio_Errors[Channel])
- Errors_Stats_End_Lines+=__T("Frame count with CH")+Ztring::ToZtring(Channel+1)+__T(" audio error code: ")+Ztring::ToZtring(Speed_FrameCount_Audio_Errors[Channel])+__T(" frames &");
-
- Ztring Errors_Details;
- size_t Errors_Count=0;
- for (size_t Pos=0; Pos<16; Pos++)
- {
- if (Audio_Errors_Total[Channel][Pos])
- {
- Errors_Count+=Audio_Errors_Total[Channel][Pos];
- Ztring Errors_Count_Padded=Ztring::ToZtring(Audio_Errors_Total[Channel][Pos]);
- if (Errors_Count_Padded.size()<8)
- Errors_Count_Padded.insert(0, 8-Errors_Count_Padded.size(), __T(' '));
- Errors_Details+=Errors_Count_Padded;
- Errors_Details+=__T(" Dseq=");
- Errors_Details+=Ztring::ToZtring(Pos, 16);
- Errors_Details+=__T(", ");
- }
- }
- if (Errors_Details.size()>2)
- {
- Errors_Stats_End_Lines+=__T("Total audio error code for CH")+Ztring::ToZtring(Channel+1)+__T(": ");
- Ztring Errors_Count_Padded=Ztring::ToZtring(Errors_Count);
- if (Errors_Count_Padded.size()<8)
- Errors_Count_Padded.insert(0, 8-Errors_Count_Padded.size(), __T(' '));
- Errors_Stats_End_Lines+=__T(" ")+Errors_Count_Padded+__T(" errors");
- Errors_Details.resize(Errors_Details.size()-2);
- Errors_Stats_End_Lines+=__T(" (")+Errors_Details+__T(")")+__T('&');
- }
- }
- }
-
- //Error 3: Timecode incoherency
- if (Speed_FrameCount_Timecode_Incoherency)
- Errors_Stats_End_Lines+=__T("Frame count with DV timecode incoherency: ")+Ztring::ToZtring(Speed_FrameCount_Timecode_Incoherency)+__T(" frames &");
-
- //Error 4: DIF incohereny
- if (Speed_FrameCount_Contains_NULL)
- Errors_Stats_End_Lines+=__T("Frame count with DIF incoherency: ")+Ztring::ToZtring(Speed_FrameCount_Contains_NULL)+__T(" frames &");
-
- //Error 5: Arbitrary bit inconsistency
- if (Speed_FrameCount_Arb_Incoherency)
- Errors_Stats_End_Lines+=__T("Frame count with Arbitrary bit inconsistency: ")+Ztring::ToZtring(Speed_FrameCount_Arb_Incoherency)+__T(" frames &");
-
- //Error 6: Stts fluctuation
- if (Speed_FrameCount_Stts_Fluctuation)
- Errors_Stats_End_Lines+=__T("Frame count with stts fluctuation: ")+Ztring::ToZtring(Speed_FrameCount_Stts_Fluctuation)+__T(" frames &");
-
- //One block
- if (!Errors_Stats_End_Lines.empty())
- {
- Errors_Stats_End_03+=Errors_Stats_End_Lines;
- Errors_Stats_End_03+=__T('&');
- Errors_Stats_End_05+=Errors_Stats_End_Lines;
- Errors_Stats_End_05+=__T('&');
- Errors_Stats_End_Lines.clear();
- }
-
- //TimeStamps (RecDate/RecTime and TimeCode)
- if (!Speed_RecDateZ_Current.empty() || !Speed_RecTimeZ_Current.empty()) //Date and Time must be both available
- {
- size_t Speed_TimeStampsZ_Pos=Speed_TimeStampsZ.size();
- if (Speed_TimeStampsZ_Pos)
- {
- Speed_TimeStampsZ_Pos--;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.FramePos=Speed_FrameCount;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.FramePos=Speed_FrameCount;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.TimeCode=Speed_TimeCodeZ_Current;
- if (Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.FramePos-(Speed_TimeStampsZ_Pos?Speed_TimeStampsZ[Speed_TimeStampsZ_Pos-1].Last.FramePos:0)==1) //Only one frame, the "Last" part is not filled
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.TimeCode=Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].First.TimeCode;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.Date=Speed_RecDateZ_Current;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.Time=Speed_RecTimeZ_Current;
- if (Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.FramePos-(Speed_TimeStampsZ_Pos?Speed_TimeStampsZ[Speed_TimeStampsZ_Pos-1].Last.FramePos:0)==1)
- {
- //Only one frame, the "Last" part is not filled
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.Date=Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].First.Date;
- Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].Last.Time=Speed_TimeStampsZ[Speed_TimeStampsZ_Pos].First.Time;
- }
-
- //Framerate computing
- float64 FrameRate=29.970;
- if (System_IsValid)
- FrameRate=System?25.000:29.970;
- else if (DSF_IsValid)
- FrameRate=DSF?25.000:29.970;
- else
- FrameRate=29.970;
- if (FrameRate==29.970 && Speed_TimeCode_Current.IsValid && !Speed_TimeCode_Current.Time.DropFrame)
- FrameRate=30.000;
-
- Errors_Stats_End_Lines+=__T("Absolute time\tDV timecode range \tRecorded date/time range \tFrame range&");
- for (size_t Pos=0; Pos<Speed_TimeStampsZ.size(); Pos++)
- {
- //Time
- float64 Time_Offset=(Pos?Speed_TimeStampsZ[Pos-1].Last.FramePos:0)*1000/FrameRate;
- Errors_Stats_End_Lines+=Ztring().Duration_From_Milliseconds((int64u)Time_Offset);
-
- Errors_Stats_End_Lines+=__T("\t");
-
- //TimeCode_range
- Errors_Stats_End_Lines+=Speed_TimeStampsZ[Pos].First.TimeCode.empty()?Ztring(__T("XX:XX:XX:XX")):Speed_TimeStampsZ[Pos].First.TimeCode;
-
- Errors_Stats_End_Lines+=__T(" - ");
-
- Errors_Stats_End_Lines+=Speed_TimeStampsZ[Pos].Last.TimeCode.empty()?Ztring(__T("XX:XX:XX:XX")):Speed_TimeStampsZ[Pos].Last.TimeCode;
-
- Errors_Stats_End_Lines+=__T("\t");
-
- //Recorded date/time_range
- Errors_Stats_End_Lines+=Speed_TimeStampsZ[Pos].First.Date.empty()?Ztring(__T("XXXX-XX-XX")):Speed_TimeStampsZ[Pos].First.Date;
- Errors_Stats_End_Lines+=__T(' ');
- Errors_Stats_End_Lines+=Speed_TimeStampsZ[Pos].First.Time.empty()?Ztring(__T("XX:XX:XX:XX")):Speed_TimeStampsZ[Pos].First.Time;
-
- Errors_Stats_End_Lines+=__T(" - ");
-
- Errors_Stats_End_Lines+=Speed_TimeStampsZ[Pos].Last.Date.empty()?Ztring(__T("XXXX-XX-XX")):Speed_TimeStampsZ[Pos].Last.Date;
- Errors_Stats_End_Lines+=__T(' ');
- Errors_Stats_End_Lines+=Speed_TimeStampsZ[Pos].Last.Time.empty()?Ztring(__T("XX:XX:XX:XX")):Speed_TimeStampsZ[Pos].Last.Time;
-
- Errors_Stats_End_Lines+=__T("\t");
-
- //Frame range
- int64u Start=Pos?Speed_TimeStampsZ[Pos-1].Last.FramePos:0;
- Ztring Start_Padded=Ztring::ToZtring(Start);
- if (Start_Padded.size()<8)
- Start_Padded.insert(0, 8-Start_Padded.size(), __T(' '));
-
- Errors_Stats_End_Lines+=Start_Padded;
-
- int64u End=Speed_TimeStampsZ[Pos].Last.FramePos-1;
- Ztring End_Padded=Ztring::ToZtring(End);
- if (End_Padded.size()<8)
- End_Padded.insert(0, 8-End_Padded.size(), __T(' '));
- Errors_Stats_End_Lines+=__T(" - ")+End_Padded;
-
- Errors_Stats_End_Lines+=__T('&');
- }
- }
- }
-
- //One block
- if (!Errors_Stats_End_Lines.empty())
- {
- Errors_Stats_End_05+=Errors_Stats_End_Lines;
- Errors_Stats_End_05+=__T('&');
- Errors_Stats_End_Lines.clear();
- }
-
- //Stats
- if (Stats_Total)
- {
- Errors_Stats_End_Lines+=__T("Percent of frames with Error: ");
- Errors_Stats_End_Lines+=Ztring::ToZtring(((float)Stats_Total_WithoutArb*100)/Speed_FrameCount, 2);
- Errors_Stats_End_Lines+=__T("%");
- Errors_Stats_End_Lines+=__T('&');
- Errors_Stats_End_Lines+=__T("Percent of frames with Error (including Arbitrary bit inconsistency): ");
- Errors_Stats_End_Lines+=Ztring::ToZtring(((float)Stats_Total*100)/Speed_FrameCount, 2);
- Errors_Stats_End_Lines+=__T("%");
- Errors_Stats_End_Lines+=__T('&');
-
- if (Stats[1])
- {
- Errors_Stats_End_Lines+=__T("Percent of frames with Video Error Concealment: ");
- Errors_Stats_End_Lines+=Ztring::ToZtring(((float)Stats[1]*100)/Speed_FrameCount, 2);
- Errors_Stats_End_Lines+=__T("%");
- Errors_Stats_End_Lines+=__T('&');
- }
-
- if (Stats[2])
- {
- Errors_Stats_End_Lines+=__T("Percent of frames with Audio Errors: ");
- Errors_Stats_End_Lines+=Ztring::ToZtring(((float)Stats[2]*100)/Speed_FrameCount, 2);
- Errors_Stats_End_Lines+=__T("%");
- Errors_Stats_End_Lines+=__T('&');
- }
-
- if (Stats[3])
- {
- Errors_Stats_End_Lines+=__T("Percent of frames with Timecode Incoherency: ");
- Errors_Stats_End_Lines+=Ztring::ToZtring(((float)Stats[3]*100)/Speed_FrameCount, 2);
- Errors_Stats_End_Lines+=__T("%");
- Errors_Stats_End_Lines+=__T('&');
- }
-
- if (Stats[4])
- {
- Errors_Stats_End_Lines+=__T("Percent of frames with DIF Incoherency: ");
- Errors_Stats_End_Lines+=Ztring::ToZtring(((float)Stats[4]*100)/Speed_FrameCount, 2);
- Errors_Stats_End_Lines+=__T("%");
- Errors_Stats_End_Lines+=__T('&');
- }
-
- if (Stats[5])
- {
- Errors_Stats_End_Lines+=__T("Percent of frames with Arbitrary bit inconsistency: ");
- Errors_Stats_End_Lines+=Ztring::ToZtring(((float)Stats[5]*100)/Speed_FrameCount, 2);
- Errors_Stats_End_Lines+=__T("%");
- Errors_Stats_End_Lines+=__T('&');
- }
-
- if (Stats[6])
- {
- Errors_Stats_End_Lines+=__T("Percent of frames with Stts Fluctuation: ");
- Errors_Stats_End_Lines+=Ztring::ToZtring(((float)Stats[6]*100)/Speed_FrameCount, 2);
- Errors_Stats_End_Lines+=__T("%");
- Errors_Stats_End_Lines+=__T('&');
- }
- }
-
- //One block
- if (!Errors_Stats_End_Lines.empty())
- {
- Errors_Stats_End_05+=Errors_Stats_End_Lines;
- Errors_Stats_End_05+=__T('&');
- Errors_Stats_End_Lines.clear();
- }
-
- //
- if (Errors_Stats_End_03.size()>2)
- Errors_Stats_End_03.resize(Errors_Stats_End_03.size()-2); //Removing last carriage returns
- if (Errors_Stats_End_05.size()>2)
- Errors_Stats_End_05.resize(Errors_Stats_End_05.size()-2); //Removing last carriage returns
-
- if (Errors_Stats_End_03.empty())
- {
- Errors_Stats_End_03+=__T("No identified errors");
- Errors_Stats_End_05+=__T("&&No identified errors");
- }
-
- //Filling
- if (Count_Get(Stream_Video)==0)
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, "Errors_Stats_Begin", "Frame # \tAbsolute time\tDV timecode\tN\tRecorded date/time \tN\tA\tN\tS\tE\t1\t2\t3\t4\t5\t6\t7\t8\t9\t0\t1\t2\t3\t4\t5\t6\t7\t8\t9\t0");
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("Errors_Stats_Begin"), Info_Options)=__T("N NT");
- Fill(Stream_Video, 0, "Errors_Stats_03", Errors_Stats_03);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("Errors_Stats_03"), Info_Options)=__T("N NT");
- Fill(Stream_Video, 0, "Errors_Stats_05", Errors_Stats_05);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("Errors_Stats_05"), Info_Options)=__T("N NT");
- Fill(Stream_Video, 0, "Errors_Stats_09", Errors_Stats_09);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("Errors_Stats_09"), Info_Options)=__T("N NT");
- Fill(Stream_Video, 0, "Errors_Stats_10", Errors_Stats_10);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("Errors_Stats_10"), Info_Options)=__T("N NT");
- if (MediaInfoLib::Config.Verbosity_Get()>=(float32)1.0)
- Fill(Stream_Video, 0, "Errors_Stats", Errors_Stats_10);
- else if (MediaInfoLib::Config.Verbosity_Get()>=(float32)0.5)
- Fill(Stream_Video, 0, "Errors_Stats", Errors_Stats_09);
- else if (MediaInfoLib::Config.Verbosity_Get()>=(float32)0.9)
- Fill(Stream_Video, 0, "Errors_Stats", Errors_Stats_05);
- else
- Fill(Stream_Video, 0, "Errors_Stats", Errors_Stats_03);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("Errors_Stats"), Info_Options)=__T("N NT");
- Fill(Stream_Video, 0, "Errors_Stats_End_03", Errors_Stats_End_03);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("Errors_Stats_End_03"), Info_Options)=__T("N NT");
- Fill(Stream_Video, 0, "Errors_Stats_End_05", Errors_Stats_End_05);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("Errors_Stats_End_05"), Info_Options)=__T("N NT");
- if (MediaInfoLib::Config.Verbosity_Get()>=(float32)0.5)
- Fill(Stream_Video, 0, "Errors_Stats_End", Errors_Stats_End_05);
- else
- Fill(Stream_Video, 0, "Errors_Stats_End", Errors_Stats_End_03);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("Errors_Stats_End"), Info_Options)=__T("N NT");
- Fill(Stream_Video, 0, "FrameCount_Speed", Speed_FrameCount);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("FrameCount_Speed"), Info_Options)=__T("N NT");
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_DV_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dvdv.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dvdv.cpp
deleted file mode 100644
index b0c024377..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dvdv.cpp
+++ /dev/null
@@ -1,1579 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DVD objects
-// (.ifo files on DVD-Video)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Mainly from http://dvd.sourceforge.net/dvdinfo/ifo.html
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <vector>
-using namespace std;
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DVDV_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Dvdv.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-const char* IFO_VTS_Category[]=
-{
- "Normal",
- "Karaoke",
-};
-
-const char* IFO_Format_V[]=
-{
- "MPEG Video",
- "MPEG Video",
- "",
- "",
-};
-
-const char* IFO_Format_Version_V[]=
-{
- "Version 1",
- "Version 2",
- "",
- "",
-};
-
-const char* IFO_CodecV[]=
-{
- "MPEG-1V",
- "MPEG-2V",
- "",
- "",
-};
-
-const char* IFO_Standard[]=
-{
- "NTSC",
- "PAL",
- "",
- "",
-};
-
-float32 IFO_AspectRatio[]=
-{
- (float32)1.333,
- (float32)0.000,
- (float32)0.000,
- (float32)1.778,
-};
-
-const char* IFO_BitRate_Mode[]=
-{
- "VBR",
- "CBR",
-};
-
-const size_t IFO_Width[]=
-{720, 704, 352, 352, 0, 0, 0, 0};
-
-const size_t IFO_Height[4][8]=
-{{480, 480, 480, 240, 0, 0, 0, 0}, //NTSC
- {576, 576, 576, 288, 0, 0, 0, 0}, //PAL
- { 0, 0, 0, 0, 0, 0, 0, 0}, //Unknown
- { 0, 0, 0, 0, 0, 0, 0, 0}, //Unknown
- };
-
-const float64 IFO_FrameRate[]=
-{29.970, 25.000};
-
-const char* IFO_Format_A[]=
-{
- "AC-3",
- "",
- "MPEG Audio",
- "MPEG Audio",
- "PCM",
- "",
- "DTS",
- "SDDS",
-};
-
-const char* IFO_Format_Profile_A[]=
-{
- "",
- "",
- "Version 1",
- "Version 2",
- "",
- "",
- "",
- "",
-};
-
-const char* IFO_CodecA[]=
-{
- "AC3",
- "",
- "MPEG-1A",
- "MPEG-2A",
- "LPCM (Big Endian)",
- "",
- "DTS",
- "SDDS",
-};
-
-const char* IFO_ModeA[]=
-{
- "",
- "Karaoke",
- "Surround",
- "",
-};
-
-const char* IFO_ResolutionA[]=
-{
- "16",
- "20",
- "24",
- "DRC",
-};
-
-const int16u IFO_SamplingRate[]=
-{48000, 0, 0, 0, 0, 0, 0, 0};
-
-const char* IFO_Language_MoreA[]=
-{
- "",
- "",
- "For visually impaired",
- "Director's comments",
- "Director's comments",
- "",
- "",
- "",
-};
-
-const char* IFO_Format_T[]=
-{
- "RLE",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-const char* IFO_Resolution_T[]=
-{
- "2",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-const char* IFO_CodecT[]=
-{
- "2-bit RLE",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-const char* IFO_Language_MoreT[]=
-{
- "",
- "Normal",
- "Large",
- "Children",
- "",
- "",
- "Large",
- "Children",
- "",
- "Forced",
- "",
- "",
- "",
- "Director comments",
- "Director comments large",
- "Director comments children",
-};
-
-const size_t IFO_PlaybackTime_FrameRate[]=
-{1, 25, 1, 30};
-
-const char* IFO_MenuType[]=
-{
- "",
- "",
- "",
- "root",
- "sub-picture",
- "audio",
- "angle",
- "PTT (chapter)",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-extern const char* AC3_ChannelPositions[];
-extern const char* AC3_ChannelPositions2[];
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Dvdv::File_Dvdv()
-:File__Analyze()
-{
- //Temp
- VTS_Attributes_AreHere=false;
- Program_Pos=0;
- Time_Pos=0;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dvdv::Streams_Finish()
-{
- //Purge what is not needed anymore
- if (!File_Name.empty()) //Only if this is not a buffer, with buffer we can have more data
- Sectors.clear();
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dvdv::FileHeader_Parse()
-{
- //Parsing
- int64u Identifier;
- int32u Type;
- Get_C8 (Identifier, "Identifier");
- Get_C4 (Type, "Type");
-
- FILLING_BEGIN();
- //Identifier
- if (Identifier!=CC8("DVDVIDEO"))
- {
- Reject("DVD Video");
- return;
- }
-
- Accept("DVD Video");
-
- Fill(Stream_General, 0, General_Format, "DVD Video");
-
- //Versions
- switch (Type)
- {
- case Dvdv::VMG : VMG(); break;
- case Dvdv::VTS : VTS(); break;
- default :
- Reject("DVD Video");
- return;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-#define SUBELEMENT(_ELEMENT) \
- { \
- Element_Begin1(#_ELEMENT); \
- _ELEMENT(); \
- Element_End0(); \
- } \
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VMG()
-{
- int32u Sector_Pointer_LastSector, Sector_Pointer_TT_SRPT, Sector_Pointer_VMGM_PGCI_UT, Sector_Pointer_VMG_PTL_MAIT, Sector_Pointer_VMG_VTS_ATRT, Sector_Pointer_VMG_TXTDT_MG, Sector_Pointer_VMGM_C_ADT, Sector_Pointer_VMGM_VOBU_ADMAP;
- int16u Version, Audio_Count, Text_Count;
- Element_Info1("DVD Video - VMG");
- Element_Begin1("Header");
- Info_B4(LastSector, "Last sector of VMG set (last sector of BUP)"); Param_Info2((LastSector+1)*2048, " bytes");
- Skip_XX(12, "Unknown");
- Get_B4 (Sector_Pointer_LastSector, "last sector of IFO");
- Get_B2 (Version, "version number"); Param_Info1(Ztring::ToZtring((Version&0x00F0)>>4)+__T(".")+Ztring::ToZtring(Version&0x000F));
- Info_B4(Category, "VMG category");
- Skip_B2( "number of volumes");
- Skip_B2( "volume number");
- Skip_B1( "side ID");
- Skip_XX(19, "Unknown");
- Skip_B2( "number of title sets");
- Skip_Local(32, "Provider ID");
- Skip_B8( "VMG POS");
- Skip_XX(24, "Unknown");
- Skip_B4( "end byte address of VMGI_MAT");
- Skip_B4( "start address of FP_PGC (First Play program chain)");
- Skip_XX(56, "Unknown");
- Info_B4(Sector_Pointer_Menu, "start sector of Menu VOB");
- Get_B4 (Sector_Pointer_TT_SRPT, "sector pointer to TT_SRPT (table of titles)");
- Get_B4 (Sector_Pointer_VMGM_PGCI_UT, "sector pointer to VMGM_PGCI_UT (Menu Program Chain table)");
- Get_B4 (Sector_Pointer_VMG_PTL_MAIT, "sector pointer to VMG_PTL_MAIT (Parental Management masks)");
- Get_B4 (Sector_Pointer_VMG_VTS_ATRT, "sector pointer to VMG_VTS_ATRT (copies of VTS audio/sub-picture attributes)");
- Get_B4 (Sector_Pointer_VMG_TXTDT_MG, "sector pointer to VMG_TXTDT_MG (text data)");
- Get_B4 (Sector_Pointer_VMGM_C_ADT, "sector pointer to VMGM_C_ADT (menu cell address table)");
- Get_B4 (Sector_Pointer_VMGM_VOBU_ADMAP, "sector pointer to VMGM_VOBU_ADMAP (menu VOBU address map)");
- Skip_XX(32, "Unknown");
- Element_End0();
-
- //-VTSM
- VTS_Attributes_AreHere=true;
- Element_Begin1("VMGM (VMG for Menu)");
- Element_Begin1("Video streams");
- Element_Info2(1, " streams");
- SUBELEMENT(Video)
- Element_End0();
- Element_Begin1("Audio streams");
- Get_B2 (Audio_Count, "number of audio streams in VMGM_VOBS");
- Element_Info2(Audio_Count, " streams");
- for (int16u Pos=0; Pos<8; Pos++)
- {
- if (Pos<Audio_Count)
- SUBELEMENT(Audio)
- else
- Skip_XX(8, "Reserved for Audio");
- }
- Skip_XX(16, "Unknown");
- Element_End0();
- Element_Begin1("Text streams");
- Get_B2 (Text_Count, "number of subpicture streams in VMGM_VOBS");
- Element_Info2(Text_Count, " streams");
- for (int16u Pos=0; Pos<1; Pos++)
- {
- if (Pos<Text_Count)
- SUBELEMENT(Text)
- else
- Skip_XX(6, "Reserved for Text");
- }
- Skip_XX(164, "Unknown");
- Element_End0();
- Element_End0();
- Skip_XX(2048-Element_Offset, "Junk");
-
- //Filling
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Format_Profile, "Menu");
-
- if (Version>0x001F)
- return;
- Sectors.resize(Sector_Pointer_LastSector+1);
- if (Sector_Pointer_TT_SRPT<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_TT_SRPT]=Sector_TT_SRPT;
- if (Sector_Pointer_VMGM_PGCI_UT<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VMGM_PGCI_UT]=Sector_VMGM_PGCI_UT;
- if (Sector_Pointer_VMG_PTL_MAIT<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VMG_PTL_MAIT]=Sector_VMG_PTL_MAIT;
- if (Sector_Pointer_VMG_VTS_ATRT<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VMG_VTS_ATRT]=Sector_VMG_VTS_ATRT;
- if (Sector_Pointer_VMG_TXTDT_MG<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VMG_TXTDT_MG]=Sector_VMG_TXTDT_MG;
- if (Sector_Pointer_VMGM_C_ADT<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VMGM_C_ADT]=Sector_VMGM_C_ADT;
- if (Sector_Pointer_VMGM_VOBU_ADMAP<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VMGM_VOBU_ADMAP]=Sector_VMGM_VOBU_ADMAP;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VTS()
-{
- //Parsing
- int32u Sector_Pointer_LastSector, Sector_Pointer_VTS_PTT_SRPT, Sector_Pointer_VTS_PGCI, Sector_Pointer_VTSM_PGCI_UT, Sector_Pointer_VTS_TMAPTI, Sector_Pointer_VTSM_C_ADT, Sector_Pointer_VTSM_VOBU_ADMAP, Sector_Pointer_VTS_C_ADT, Sector_Pointer_VTS_VOBU_ADMAP;
- int16u Version, Audio_Count, Text_Count;
- Element_Info1("DVD Video - VTS (Video Title Set)");
- Element_Begin1("Header");
- Info_B4(LastSector, "Last sector of Title set (last sector of BUP)"); Param_Info2((LastSector+1)*2048, " bytes");
- Skip_XX(12, "Unknown");
- Get_B4 (Sector_Pointer_LastSector, "last sector of IFO");
- Get_B2 (Version, "version number"); Param_Info1(Ztring::ToZtring((Version&0x00F0)>>4)+__T(".")+Ztring::ToZtring(Version&0x000F));
- Info_B4(Category, "VTS category");
- #if MEDIAINFO_TRACE
- if (Category<2) Param_Info1(IFO_VTS_Category[Category]);
- #endif //MEDIAINFO_TRACE
- Skip_XX(90, "Unknown");
- Skip_B4( "end byte address of VTS_MAT");
- Skip_XX(60, "Unknown");
- Info_B4(StartSector_Menu, "start sector of Menu VOB"); Param_Info2((StartSector_Menu+1)*2048, " bytes");
- Info_B4(StartSector_Title, "start sector of Title Vob"); Param_Info2((StartSector_Title+1)*2048, " bytes");
- Get_B4 (Sector_Pointer_VTS_PTT_SRPT, "sector pointer to VTS_PTT_SRPT (Table of Titles and Chapters)");
- Get_B4 (Sector_Pointer_VTS_PGCI, "sector pointer to VTS_PGCI (Title Program Chain table)");
- Get_B4 (Sector_Pointer_VTSM_PGCI_UT, "sector pointer to VTSM_PGCI_UT (Menu Program Chain table)");
- Get_B4 (Sector_Pointer_VTS_TMAPTI, "sector pointer to VTS_TMAPTI (Time map)");
- Get_B4 (Sector_Pointer_VTSM_C_ADT, "sector pointer to VTSM_C_ADT (Menu cell address table)");
- Get_B4 (Sector_Pointer_VTSM_VOBU_ADMAP, "sector pointer to VTSM_VOBU_ADMAP(menu VOBU address map)");
- Get_B4 (Sector_Pointer_VTS_C_ADT, "sector pointer to VTS_C_ADT (Title set cell address table)");
- Get_B4 (Sector_Pointer_VTS_VOBU_ADMAP, "sector pointer to VTS_VOBU_ADMAP (Title set VOBU address map)");
- Skip_XX(24, "Unknown");
- Element_End0();
-
- //-VTSM
- Element_Begin1("VTSM (VTS for Menu, Vob 0)");
- Element_Begin1("Video streams");
- Element_Info2(1, " streams");
- SUBELEMENT(Video)
- Element_End0();
- Element_Begin1("Audio streams");
- Get_B2 (Audio_Count, "number of audio streams in VTSM_VOBS");
- Element_Info2(Audio_Count, " streams");
- for (int16u Pos=0; Pos<8; Pos++)
- {
- if (Pos<Audio_Count)
- SUBELEMENT(Audio)
- else
- Skip_XX(8, "Reserved for Audio");
- }
- Skip_XX(16, "Unknown");
- Element_End0();
- Element_Begin1("Text streams");
- Get_B2 (Text_Count, "number of subpicture streams in VTSM_VOBS");
- Element_Info2(Text_Count, " streams");
- for (int16u Pos=0; Pos<1; Pos++)
- {
- if (Pos<Text_Count)
- SUBELEMENT(Text)
- else
- Skip_XX(6, "Reserved for Text");
- }
- Skip_XX(164, "Unknown");
- Element_End0();
- Element_End0();
-
- //-VTS
- VTS_Attributes_AreHere=true;
- Element_Begin1("VTS (VTS for movie, Vob 1-9)");
- Element_Begin1("Video streams");
- Element_Info2(1, " streams");
- SUBELEMENT(Video)
- Element_End0();
- Element_Begin1("Audio streams");
- Get_B2 (Audio_Count, "number of audio streams in VMGM_VOBS");
- Element_Info2(Audio_Count, " streams");
- for (int16u Pos=0; Pos<8; Pos++)
- {
- if (Pos<Audio_Count)
- SUBELEMENT(Audio)
- else
- Skip_XX(8, "Reserved for Audio");
- }
- Skip_XX(16, "Unknown");
- Element_End0();
- Element_Begin1("Text streams");
- Get_B2 (Text_Count, "number of subpicture streams in VMGM_VOBS");
- Element_Info2(Text_Count, " streams");
- for (int16u Pos=0; Pos<32; Pos++)
- {
- if (Pos<Text_Count)
- SUBELEMENT(Text)
- else
- Skip_XX(6, "Reserved for Text");
- }
- Skip_XX(2, "Unknown");
- Element_End0();
- Element_Begin1("MultiChannel Info");
- Element_Info2(Audio_Count, " streams");
- for (int16u Pos=0; Pos<8; Pos++)
- {
- if (Pos<Audio_Count)
- SUBELEMENT(MultiChannel)
- else
- Skip_XX(24, "Reserved for multichannel extension");
- }
- Element_End0();
- Element_End0();
- Skip_XX(2048-Element_Offset, "Junk");
-
- //Filling
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Format_Profile, "Program");
-
- if (Version>0x001F)
- return;
- if (Sector_Pointer_LastSector==(int32u)-1 || Sector_Pointer_LastSector+1>File_Size/2048)
- Sector_Pointer_LastSector=(int32u)(File_Size/2048);
- Sectors.resize(Sector_Pointer_LastSector+1);
- if (Sector_Pointer_VTS_PTT_SRPT<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VTS_PTT_SRPT]=Sector_VTS_PTT_SRPT;
- if (Sector_Pointer_VTS_PGCI<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VTS_PGCI]=Sector_VTS_PGCI;
- if (Sector_Pointer_VTSM_PGCI_UT<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VTSM_PGCI_UT]=Sector_VTSM_PGCI_UT;
- if (Sector_Pointer_VTS_TMAPTI<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VTS_TMAPTI]=Sector_VTS_TMAPTI;
- if (Sector_Pointer_VTSM_C_ADT<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VTSM_C_ADT]=Sector_VTSM_C_ADT;
- if (Sector_Pointer_VTSM_VOBU_ADMAP<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VTSM_VOBU_ADMAP]=Sector_VTSM_VOBU_ADMAP;
- if (Sector_Pointer_VTS_C_ADT<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VTS_C_ADT]=Sector_VTS_C_ADT;
- if (Sector_Pointer_VTS_VOBU_ADMAP<=Sector_Pointer_LastSector)
- Sectors[Sector_Pointer_VTS_VOBU_ADMAP]=Sector_VTS_VOBU_ADMAP;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::Video()
-{
- //Parsing
- int32u Codec, Standard, AspectRatio, Resolution, BitRate_Mode;
- BS_Begin();
- Get_BS (2, Codec, "Coding mode"); Param_Info1(IFO_CodecV[Codec]);
- Get_BS (2, Standard, "Standard"); Param_Info1(IFO_Standard[Standard]);
- Get_BS (2, AspectRatio, "Aspect ratio"); Param_Info1(IFO_AspectRatio[AspectRatio]);
- Info_BS(1, Pan, "Automatic Pan/Scan"); Param_Info1(Pan?"No":"Yes");
- Info_BS(1, Letter, "Automatic Letterbox"); Param_Info1(Letter?"No":"Yes");
- Skip_BS(1, "CC for line 21 field 1 in GOP (NTSC only)");
- Skip_BS(1, "CC for line 21 field 2 in GOP (NTSC only)");
- Get_BS (3, Resolution, "Resolution"); Param_Info1(Ztring::ToZtring(IFO_Width[Resolution])+__T("x")+Ztring::ToZtring(IFO_Height[Standard][Resolution]));
- Info_BS(1, Letterboxed, "Letterboxed"); Param_Info1(Letter?"Yes":"No");
- Get_BS (1, BitRate_Mode, "Bitrate mode"); Param_Info1(IFO_BitRate_Mode[BitRate_Mode]);
- Info_BS(1, Camera, "Camera/Film"); Param_Info1(Letter?"Film":"Camera");
- BS_End();
-
- //Filling
- FILLING_BEGIN();
- if (VTS_Attributes_AreHere)
- {
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, StreamPos_Last, Video_Format, IFO_Format_V[Codec]);
- Fill(Stream_Video, StreamPos_Last, Video_Format_Version, IFO_Format_Version_V[Codec]);
- Fill(Stream_Video, StreamPos_Last, Video_Codec, IFO_CodecV[Codec]);
- Fill(Stream_Video, StreamPos_Last, Video_Width, IFO_Width[Resolution]);
- Fill(Stream_Video, StreamPos_Last, Video_Height, IFO_Height[Standard][Resolution]);
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, IFO_AspectRatio[AspectRatio], 3, true);
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, IFO_FrameRate[Standard]);
- Fill(Stream_Video, StreamPos_Last, Video_BitRate_Mode, IFO_BitRate_Mode[BitRate_Mode]);
- Fill(Stream_Video, StreamPos_Last, General_ID, __T("224"));
- Fill(Stream_Video, StreamPos_Last, General_ID_String, __T("224 (0xE0)"), Unlimited, true);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::Audio()
-{
- //Parsing
- Ztring Language;
- int32u Codec, LanguageType, Mode, Resolution, SamplingRate, Channels;
- int8u Language_Extension, ChannelsK=(int8u)-1;
- BS_Begin();
- Get_BS (3, Codec, "Coding mode"); Param_Info1(IFO_CodecA[Codec]);
- Info_BS(1, MultiChannel, "Multichannel extension present"); Param_Info1(MultiChannel?"Yes":"No");
- Get_BS (2, LanguageType, "Language type"); Param_Info1(LanguageType==1?"2CC":"Unknown");
- Get_BS (2, Mode, "Application mode"); Param_Info1(IFO_ModeA[Mode]);
- Get_BS (2, Resolution, "Resolution"); Param_Info1C((Codec==2 || Codec==3), IFO_ResolutionA[Resolution]); Param_Info1C((Codec==4), Mode?"DRC":"No DRC");
- Get_BS (2, SamplingRate, "Sampling rate"); Param_Info1(Ztring::ToZtring(IFO_SamplingRate[SamplingRate]));
- Get_BS (4, Channels, "Channels"); Param_Info2(Channels+1, " channels");
- BS_End();
- Get_Local(3, Language, "Language code");
- if (!Language.empty() && Language[0]>=0x80)
- Language.clear(); //this is 0xFF...
- if (Language==__T("iw"))
- Language=__T("he"); //Hebrew patch, is "iw" in DVDs
- Get_B1 (Language_Extension, "Language extension"); Param_Info1C((Language_Extension<8), IFO_Language_MoreA[Language_Extension]);
- Skip_B1( "Unknown");
- switch (Mode)
- {
- case 1 : //Karaoke
- {
- BS_Begin();
- Skip_BS(1, "Zero");
- Get_S1 (3, ChannelsK, "Channels");
- #ifdef MEDIAINFO_AC3_YES
- Param_Info1(AC3_ChannelPositions[ChannelsK]);
- #endif //MEDIAINFO_AC3_YES
- Skip_BS(2, "Version");
- Info_BS(1, MC, "MC intro present"); Param_Info1(MC?"Yes":"No");
- Info_BS(1, Duet, "Duet"); Param_Info1(Duet?"Duet":"Solo");
- BS_End();
- }
- break;
- case 2 : //Surround
- {
- BS_Begin();
- Skip_BS(4, "Reserved");
- Info_BS(1, DolbyDecode, "Suitable for Dolby surround decoding"); Param_Info1(DolbyDecode?"Yes":"No");
- Skip_BS(3, "Reserved");
- BS_End();
- }
- break;
- default:
- {
- Skip_B1( "Reserved");
- }
- }
-
- //Filling
- FILLING_BEGIN();
- if (VTS_Attributes_AreHere)
- {
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, IFO_Format_A[Codec]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, IFO_Format_Profile_A[Codec]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, IFO_CodecA[Codec]);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, IFO_SamplingRate[SamplingRate]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels+1);
- if (Codec==3)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, IFO_ResolutionA[Resolution]);
- else if (Codec==4 && Mode)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, "DRC");
- Fill(Stream_Audio, StreamPos_Last, Audio_Language, Language);
- if (Language_Extension<8)
- Fill(Stream_Audio, StreamPos_Last, Audio_Language_More, IFO_Language_MoreA[Language_Extension]);
- #ifdef MEDIAINFO_AC3_YES
- if (Codec==0 && ChannelsK!=(int8u)-1) //AC-3
- {
- Fill(Stream_Audio, 0, Audio_ChannelPositions, AC3_ChannelPositions[ChannelsK]);
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, AC3_ChannelPositions2[ChannelsK]);
- }
- #endif //MEDIAINFO_AC3_YES
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::Text()
-{
- //Parsing
- Ztring Language;
- int32u Codec, LanguageType;
- int8u Language_Extension;
- BS_Begin();
- Get_BS (3, Codec, "Coding mode"); Param_Info1(IFO_CodecT[Codec]);
- Skip_BS(3, "Reserved");
- Get_BS (2, LanguageType, "Language type"); Param_Info1(LanguageType==1?"2CC":"Unknown");
- BS_End();
- Skip_B1( "Reserved");
- Get_Local(3, Language, "Language code");
- if (!Language.empty() && Language[0]>=0x80)
- Language.clear(); //this is 0xFF...
- if (Language==__T("iw"))
- Language=__T("he"); //Hebrew patch, is "iw" in DVDs
- Get_B1 (Language_Extension, "Language extension"); Param_Info1C((Language_Extension<16), IFO_Language_MoreT[Language_Extension]);
-
- //Filling
- FILLING_BEGIN();
- if (VTS_Attributes_AreHere)
- {
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_Format, IFO_Format_T[Codec]);
- Fill(Stream_Text, StreamPos_Last, Text_BitDepth, IFO_Resolution_T[Codec]);
- Fill(Stream_Text, StreamPos_Last, Text_Codec, IFO_CodecT[Codec]);
- Fill(Stream_Text, StreamPos_Last, Text_Language, Language);
-
- if (Language_Extension<16)
- Fill(Stream_Text, StreamPos_Last, Text_Language_More, IFO_Language_MoreT[Language_Extension]);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::MultiChannel()
-{
- //Parsing
- BS_Begin();
- Element_Begin1("ACH0");
- Skip_BS(7, "Reserved");
- Skip_BS(1, "ACH0 Guide Melody exists");
- Element_End0();
- Element_Begin1("ACH1");
- Skip_BS(7, "Reserved");
- Skip_BS(1, "ACH1 Guide Melody exists");
- Element_End0();
- Element_Begin1("ACH2");
- Skip_BS(4, "Reserved");
- Skip_BS(1, "ACH2 Guide Vocal 1 exists");
- Skip_BS(1, "ACH2 Guide Vocal 2 exists");
- Skip_BS(1, "ACH2 Guide Melody 1 exists");
- Skip_BS(1, "ACH2 Guide Melody 2 exists");
- Element_End0();
- Element_Begin1("ACH3");
- Skip_BS(4, "Reserved");
- Skip_BS(1, "ACH3 Guide Vocal 1 exists");
- Skip_BS(1, "ACH3 Guide Vocal 2 exists");
- Skip_BS(1, "ACH3 Guide Melody A exists");
- Skip_BS(1, "ACH3 Sound Effect A exists");
- Element_End0();
- Element_Begin1("ACH4");
- Skip_BS(4, "Reserved");
- Skip_BS(1, "ACH4 Guide Vocal 1 exists");
- Skip_BS(1, "ACH4 Guide Vocal 2 exists");
- Skip_BS(1, "ACH4 Guide Melody B exists");
- Skip_BS(1, "ACH4 Sound Effect B exists");
- Element_End0();
- BS_End();
- Skip_XX(19, "Unknown");
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dvdv::Header_Parse()
-{
- //Calculating
- size_t Sector_Pos=(size_t)((File_Offset+Buffer_Offset)/2048);
- size_t Sector_Count=1;
- while (Sector_Pos+Sector_Count<Sectors.size() && Sectors[Sector_Pos+Sector_Count]==Sector_Nothing)
- Sector_Count++;
-
- //Filling
- Header_Fill_Size(Sector_Count*2048);
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::Data_Parse()
-{
- //Parsing
- size_t Sector_Pos=(size_t)((File_Offset+Buffer_Offset)/2048);
- if (Sector_Pos>=Sectors.size())
- {
- Accept("DVD Video");
- Finish("DVD Video");
- return;
- }
-
- //Parsing
- switch(Sectors[Sector_Pos])
- {
- case Sector_VTS_PTT_SRPT : VTS_PTT_SRPT(); break;
- case Sector_VTS_PGCI : VTS_PGCI(); break;
- case Sector_VTSM_PGCI_UT : VTSM_PGCI_UT(); break;
- case Sector_VTS_TMAPTI : VTS_TMAPTI(); break;
- case Sector_VTSM_C_ADT : VTSM_C_ADT(); break;
- case Sector_VTSM_VOBU_ADMAP : VTSM_VOBU_ADMAP(); break;
- case Sector_VTS_C_ADT : VTS_C_ADT(); break;
- case Sector_VTS_VOBU_ADMAP : VTS_VOBU_ADMAP(); break;
- case Sector_TT_SRPT : TT_SRPT(); break;
- case Sector_VMGM_PGCI_UT : VMGM_PGCI_UT(); break;
- case Sector_VMG_PTL_MAIT : VMG_PTL_MAIT(); break;
- case Sector_VMG_VTS_ATRT : VMG_VTS_ATRT(); break;
- case Sector_VMG_TXTDT_MG : VMG_TXTDT_MG(); break;
- case Sector_VMGM_C_ADT : VMGM_C_ADT(); break;
- case Sector_VMGM_VOBU_ADMAP : VMGM_VOBU_ADMAP(); break;
- default : ;
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VTS_PTT_SRPT ()
-{
- Element_Name("Table of Titles and Chapters");
-
- //Parsing
- int32u Element_RealSize;
- Element_Begin1("Header");
- Skip_B2( "Count of elements");
- Skip_B2( "Unknown");
- Get_B4 (Element_RealSize, "End address");
- Element_RealSize++; //Last byte
- Element_End0();
- Element_Begin1("Extra data");
- int32u Offset;
- Get_B4 (Offset, "Offset of first element");
- int64u Extra_Size=Offset-Element_Offset;
- if (Extra_Size>0)
- Skip_XX(Extra_Size, "Extra data (Unknown)");
- Element_End0();
-
- //For each chapter
- while (Element_Offset<Element_RealSize)
- {
- //VTS_PTT
- int16u PGCN, PGN;
- Element_Begin0();
- Get_B2 (PGCN, "Program Chain (PGCN)");
- Get_B2 (PGN, "Program (PGN)");
- Element_Name("Chapter"); Element_Info1(Ztring::ToZtring(PGCN)); Element_Info1(Ztring::ToZtring(PGN));
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VTS_PGCI ()
-{
- Element_Name("Title Program Chain table");
-
- //Parsing
- int32u EndAddress;
- Element_Begin1("Header");
- int32u Offset;
- Skip_B2( "Number of Program Chains");
- Skip_B2( "Reserved");
- Get_B4 (EndAddress, "End address");
- if (EndAddress>=Element_Size)
- EndAddress=(int32u)Element_Size-1;
- Element_Begin1("PGC category");
- BS_Begin();
- Skip_BS(1, "entry PGC");
- Skip_BS(7, "title number");
- BS_End();
- Skip_B1( "Unknown");
- Skip_B2( "parental management mask");
- Element_End0();
- Get_B4 (Offset, "offset to VTS_PGC - relative to VTS_PGCI");
- if (Offset-16>0)
- Skip_XX(Offset-16, "Unknown");
- Element_End0();
-
- //For each Program
- //DETAILLEVEL_SET(1.0);
- while (Element_Offset<=EndAddress)
- {
- PGC(Offset, true);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VTSM_PGCI_UT ()
-{
- Element_Name("Menu Program Chain table");
-
- //Parsing
- int16u LU_Count;
- Element_Begin1("Header");
- int32u EndAddress, Offset;
- int8u Flags;
- Get_B2 (LU_Count, "Number of Language Units");
- Skip_B2( "Reserved");
- Get_B4 (EndAddress, "End address");
- if (EndAddress>=Element_Size)
- EndAddress=(int32u)Element_Size-1;
- Skip_C3( "Language");
- Get_B1 (Flags, "Menu existence flags");
- Skip_Flags(Flags, 3, "PTT");
- Skip_Flags(Flags, 4, "angle");
- Skip_Flags(Flags, 5, "audio");
- Skip_Flags(Flags, 6, "sub-picture");
- Skip_Flags(Flags, 7, "root");
- Get_B4 (Offset, "Offset to VTSM_LU relative to VTSM_PGCI_UT");
- if (Offset-16>0)
- Skip_XX(Offset-16, "Unknown");
- Element_End0();
-
- for (int16u LU_Pos=0; LU_Pos<LU_Count; LU_Pos++)
- {
- Element_Begin1("Language Unit");
- int32u LU_Size;
- int16u PGC_Count;
- Element_Begin1("Header");
- Get_B2 (PGC_Count, "Number of Program Chains");
- Skip_B2( "Reserved");
- Get_B4 (LU_Size, "end address (last byte of last PGC in this LU) relative to VTSM_LU");
- LU_Size++; //Last byte
- Element_Begin1("PGC category");
- int32u EntryPGC;
- BS_Begin();
- Get_BS (1, EntryPGC, "Entry PGC");
- Skip_BS(3, "Unknown");
- if (EntryPGC)
- {
- Info_BS(4, MenuType, "menu type"); Param_Info1(IFO_MenuType[MenuType]);
- }
- else
- {
- Skip_BS(4, "Reserved");
- }
- BS_End();
- Skip_B1( "Unknown");
- Skip_B2( "parental management mask");
- Element_End0();
- Get_B4 (Offset, "offset to VTSM_PGC relative to VTSM_LU");
- if (Offset-16>0)
- Skip_XX(Offset-16, "Unknown");
- Element_End0();
- for (int16u PGC_Pos=0; PGC_Pos<PGC_Count; PGC_Pos++)
- PGC(Element_Offset);
-
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VTS_TMAPTI ()
-{
- Element_Name("Time map");
-
- //Parsing
- Element_Begin1("Header");
- int32u EndAddress, Offset;
- Skip_B2( "Number of program chains");
- Skip_B2( "Reserved");
- Get_B4 (EndAddress, "End address");
- if (EndAddress>=Element_Size)
- EndAddress=(int32u)Element_Size-1;
- Get_B4 (Offset, "Offset to VTS_TMAP 1");
- if (Offset-12>0)
- Skip_XX(Offset-12, "Unknown");
- Element_End0();
-
- //DETAILLEVEL_SET(1.0);
- while (Element_Offset<=EndAddress)
- {
- //VTS_TMAP
- Element_Begin1("Time Map");
- //std::vector<size_t> Sector_Times;
- int8u Sector_Times_SecondsPerTime;
- int16u Count;
- Get_B1 (Sector_Times_SecondsPerTime, "Time unit (seconds)");
- Skip_B1( "Unknown");
- Get_B2 (Count, "Number of entries in map");
- //Sector_Times.resize(Count);
- BS_Begin();
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Sector Offset");
- int32u SectorOffset;
- Skip_BS( 1, "discontinuous with previous");
- Get_BS (31, SectorOffset, "Sector offset within VOBS of nearest VOBU");
- //Get_B4 (Sector_Times[Pos], Sector offset within VOBS of nearest VOBU);// Param_Info1(Ztring().Duration_From_Milliseconds((Pos+1)*Sectors_Times_SecondsPerTime[Program_Pos]));
- //Sector_Times[Pos]&=0x7FFFFFFF; //bit 31 is set if VOBU time codes are discontinuous with previous
- Element_Info1(SectorOffset);
- Element_End0();
- }
- BS_End();
- Element_End0();
-
- //Filling
- //Sectors_Times.push_back(Sector_Times);
- //Sectors_Times_SecondsPerTime.push_back(Sector_Times_SecondsPerTime);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VTSM_C_ADT ()
-{
- Element_Name("Menu cell address table");
-
- //Parsing
- int32u EndAddress;
- Element_Begin1("Header");
- Skip_B2( "Number of cells");
- Skip_B2( "Reserved");
- Get_B4 (EndAddress, "End address");
- if (EndAddress>=Element_Size)
- EndAddress=(int32u)Element_Size-1;
- Element_End0();
-
- //DETAILLEVEL_SET(1.0);
- while (Element_Offset<=EndAddress)
- {
- //ADT
- Element_Begin1("Entry");
- Skip_B2( "VOBidn");
- Skip_B1( "CELLidn");
- Skip_B1( "Unknown");
- Skip_B4( "Starting sector within VOB");
- Skip_B4( "Ending sector within VOB");
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VTSM_VOBU_ADMAP ()
-{
- Element_Name("Menu VOBU address map");
-
- //Parsing
- int32u EndAddress;
- Element_Begin1("Header");
- Get_B4 (EndAddress, "End address");
- if (EndAddress>=Element_Size)
- EndAddress=(int32u)Element_Size-1;
- Element_End0();
-
- //DETAILLEVEL_SET(1.0);
- while (Element_Offset<=EndAddress)
- {
- //ADMAP
- Skip_B4( "Starting sector within VOB of first VOBU");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VTS_C_ADT ()
-{
- Element_Name("Title set cell address table");
-
- //Parsing
- int32u EndAddress;
- Element_Begin1("Header");
- Skip_B2( "Number of cells");
- Skip_B2( "Reserved");
- Get_B4 (EndAddress, "End address");
- if (EndAddress>=Element_Size)
- EndAddress=(int32u)Element_Size-1;
- Element_End0();
-
- //DETAILLEVEL_SET(1.0);
- while (Element_Offset<=EndAddress)
- {
- //ADT
- Element_Begin1("Entry");
- int32u Start, End;
- int16u VOBidn;
- int8u CELLidn;
- Get_B2 (VOBidn, "VOBidn");
- Get_B1 (CELLidn, "CELLidn");
- Skip_B1( "Unknown");
- Get_B4 (Start, "Starting sector within VOB"); Param_Info1(Time_ADT(Start));
- Get_B4 (End, "Ending sector within VOB"); Param_Info1(Time_ADT(End));
- Element_End0();
-
- //Filling
- FILLING_BEGIN();
- FILLING_END();
- //Fill(Ztring::ToZtring(CELLidn).To_Local().c_str(), Time_ADT(Start));
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VTS_VOBU_ADMAP ()
-{
- Element_Name("Title set VOBU address map");
-
- //Parsing
- int32u EndAddress;
- Element_Begin1("Header");
- Get_B4 (EndAddress, "End address");
- if (EndAddress>=Element_Size)
- EndAddress=(int32u)Element_Size-1;
- Element_End0();
-
- //DETAILLEVEL_SET(1.0);
- while (Element_Offset<Element_Size)
- {
- //ADMAP
- Skip_B4( "Starting sector within VOB of first VOBU");
- }
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring File_Dvdv::Time_ADT(int32u)
-{
- return Ztring();
- /*
- if (Sectors_Times.empty())
- return Ztring(); //TODO: it can be empty?
-
- while (Time_Pos<Sectors_Times[Program_Pos].size() && Sectors_Times[Program_Pos][Time_Pos]<Value)
- Time_Pos++;
- if (Time_Pos<Sectors_Times[Program_Pos].size())
- {
- int32u Time=(Time_Pos+1)*Sectors_Times_SecondsPerTime[Program_Pos]*1000;
- float32 Part;
- //True time is between Time and Time+Sectors_Times_SecondsPerTime, finding where...
- int32u Sectors_Count;
- if (Time_Pos==0)
- Sectors_Count=Sectors_Times[Program_Pos][Time_Pos];
- else
- Sectors_Count=Sectors_Times[Program_Pos][Time_Pos]-Sectors_Times[Program_Pos][Time_Pos-1];
- Part=(Sectors_Times[Program_Pos][Time_Pos]-Value); //Count of more sectors after
- Part/=Sectors_Count; //Percentage
- Time=(int32u)((Time_Pos+1-Part)*Sectors_Times_SecondsPerTime[Program_Pos]*1000);
-
- return Ztring().Duration_From_Milliseconds(Time*1000);
- }
- else
- {
- int32u Time=(Time_Pos+1)*Sectors_Times_SecondsPerTime[Program_Pos]*1000;
- float32 Part;
- //True time is between Time and Time+Sectors_Times_SecondsPerTime, finding where... but with the last offset diffrence
- int32u Sectors_Count=Sectors_Times[Program_Pos][Time_Pos-1]-Sectors_Times[Program_Pos][Time_Pos-2];
- Part=((int32s)Sectors_Times[Program_Pos][Time_Pos-1])-((int32s)Value); //Count of more sectors after
- Part/=Sectors_Count; //Percentage
- Part+=1; //We were one offset less
- Time=(int32u)((Time_Pos+1-Part)*Sectors_Times_SecondsPerTime[Program_Pos]*1000);
-
- return Ztring().Duration_From_Milliseconds(Time*1000);
- }
- */
-}
-
-void File_Dvdv::Get_Duration(int64u &Duration, const Ztring &Name)
-{
- int32u FrameRate, FF;
- int8u HH, MM, Sec;
- Element_Begin1(Name);
- Get_B1 (HH, "Hours (BCD)");
- Get_B1 (MM, "Minutes (BCD)");
- Get_B1 (Sec, "Seconds (BCD)");
- BS_Begin();
- Get_BS (2, FrameRate, "Frame rate"); Param_Info2(IFO_PlaybackTime_FrameRate[FrameRate], " fps");
- Get_BS (6, FF, "Frames (BCD)");
- BS_End();
-
- Duration= Ztring::ToZtring(HH, 16).To_int64u() * 60 * 60 * 1000 //BCD
- + Ztring::ToZtring(MM, 16).To_int64u() * 60 * 1000 //BCD
- + Ztring::ToZtring(Sec, 16).To_int64u() * 1000 //BCD
- + Ztring::ToZtring(FF, 16).To_int64u() * 1000/IFO_PlaybackTime_FrameRate[FrameRate]; //BCD
-
- Element_Info1(Ztring::ToZtring(Duration));
- Element_End0();
-}
-
-
-void File_Dvdv::PGC(int64u Offset, bool Title)
-{
- vector<int8u> Stream_Control_Audio;
- vector<int8u> Stream_Control_SubPicture_43;
- vector<int8u> Stream_Control_SubPicture_Wide;
- vector<int8u> Stream_Control_SubPicture_Letterbox;
- vector<int8u> Stream_Control_SubPicture_PanScan;
- vector<int64u> CellDurations;
- vector<int8u> ProgramMap;
-
- //VTS_PGC
- Element_Begin1("PGC");
- int16u commands, program_map, cell_playback, cell_position;
- int8u Program_Count;
- Element_Begin1("Header");
- int32u Flags;
- int8u Cells;
- int64u TotalDuration;
- Skip_B2( "Unknown");
- Get_B1 (Program_Count, "number of programs");
- Get_B1 (Cells, "number of cells");
- Get_Duration(TotalDuration, "Duration");
- Get_B4 (Flags, "prohibited user ops");
- /*Skip_Flags(Flags, 0, "Time play or search");
- Skip_Flags(Flags, 1, PTT play or search);
- Skip_Flags(Flags, 2, Title play);
- Skip_Flags(Flags, 3, Stop);
- Skip_Flags(Flags, 4, GoUp);
- Skip_Flags(Flags, 5, Time or PTT search);
- Skip_Flags(Flags, 6, TopPG or PrevPG search);
- Skip_Flags(Flags, 7, NextPG search);
- Skip_Flags(Flags, 8, Forward scan);
- Skip_Flags(Flags, 9, Backward scan);
- Skip_Flags(Flags, 10, Menu call - Title);
- Skip_Flags(Flags, 11, Menu call - Root);
- Skip_Flags(Flags, 12, Menu call - Subpicture);
- Skip_Flags(Flags, 13, Menu call - Audio);
- Skip_Flags(Flags, 14, Menu call - Angle);
- Skip_Flags(Flags, 15, Menu call - PTT);
- Skip_Flags(Flags, 16, Resume);
- Skip_Flags(Flags, 17, Button select or activate);
- Skip_Flags(Flags, 18, Still off);
- Skip_Flags(Flags, 19, Pause on);
- Skip_Flags(Flags, 20, Audio stream change);
- Skip_Flags(Flags, 21, Subpicture stream change);
- Skip_Flags(Flags, 22, Angle change);
- Skip_Flags(Flags, 23, Karaoke audio mix change);
- Skip_Flags(Flags, 24, Video presentation mode change);
- */
- /*
- Skip_Flags(Flags, 0, Video presentation mode change);
- Skip_Flags(Flags, 1, Karaoke audio mix change);
- Skip_Flags(Flags, 2, Angle change);
- Skip_Flags(Flags, 3, Subpicture stream change);
- Skip_Flags(Flags, 4, Audio stream change);
- Skip_Flags(Flags, 5, Pause on);
- Skip_Flags(Flags, 6, Still off);
- Skip_Flags(Flags, 7, Button select or activate);
- Skip_Flags(Flags, 8, Resume);
- Skip_Flags(Flags, 9, Menu call - PTT);
- Skip_Flags(Flags, 10, Menu call - Angle);
- Skip_Flags(Flags, 11, Menu call - Audio);
- Skip_Flags(Flags, 12, Menu call - Subpicture);
- Skip_Flags(Flags, 13, Menu call - Root);
- Skip_Flags(Flags, 14, Menu call - Title);
- Skip_Flags(Flags, 15, Backward scan);
- Skip_Flags(Flags, 16, Forward scan);
- Skip_Flags(Flags, 17, NextPG search);
- Skip_Flags(Flags, 18, TopPG or PrevPG search);
- Skip_Flags(Flags, 19, Time or PTT search);
- Skip_Flags(Flags, 20, GoUp);
- Skip_Flags(Flags, 21, Stop);
- Skip_Flags(Flags, 22, Title play);
- Skip_Flags(Flags, 23, PTT play or search);
- Skip_Flags(Flags, 24, Time play or search);
- */
- Element_Begin1("Audio Stream Controls");
- for (size_t Pos=0; Pos<8; Pos++)
- {
- Element_Begin1("Audio Stream Control");
- Element_Info1(Ztring::ToZtring(Pos));
- int8u Number;
- bool Available;
- BS_Begin();
- Get_SB ( Available, "Stream available");
- Get_S1 (7, Number, "Stream number");
- BS_End();
- Skip_B1( "Reserved");
- Element_End0();
- if (Available)
- Stream_Control_Audio.push_back(Number);
-
- if (Available && Retrieve(Stream_Audio, Pos, Text_ID).empty() && Sectors[(size_t)((File_Offset+Buffer_Offset)/2048)]==Sector_VTS_PGCI)
- {
- while (Pos>Count_Get(Stream_Audio))
- Stream_Prepare(Stream_Audio);
-
- int8u ToAdd=0;
- if (Retrieve(Stream_Audio, Pos, Audio_Format)==__T("AC-3"))
- ToAdd=0x80;
- if (Retrieve(Stream_Audio, Pos, Audio_Format)==__T("DTS"))
- ToAdd=0x88;
- if (Retrieve(Stream_Audio, Pos, Audio_Format)==__T("LPCM"))
- ToAdd=0xA0;
- Ztring ID_String; ID_String.From_Number(ToAdd+Number); ID_String+=__T(" (0x"); ID_String+=Ztring::ToZtring(ToAdd+Number, 16); ID_String+=__T(")");
- Fill(Stream_Audio, Pos, Audio_ID, ID_String);
- Fill(Stream_Audio, Pos, Audio_ID_String, ID_String, true);
- }
- }
- Element_End0();
- Element_Begin1("Subpicture Stream Controls");
- for (size_t Pos=0; Pos<32; Pos++)
- {
- Element_Begin1("Subpicture Stream Control");
- Element_Info1(Ztring::ToZtring(Pos));
- int8u Number_43, Number_Wide, Number_Letterbox, Number_PanScan;
- bool Available;
- BS_Begin();
- Get_SB ( Available, "Stream available");
- Get_S1 (7, Number_43, "Stream number for 4/3");
- BS_End();
- Get_B1 (Number_Wide, "Stream number for Wide");
- Get_B1 (Number_Letterbox, "Stream number for Letterbox");
- Get_B1 (Number_PanScan, "Stream number for Pan&Scan");
- Element_End0();
- if (Available)
- {
- Stream_Control_SubPicture_43.push_back(Number_43);
- Stream_Control_SubPicture_Wide.push_back(Number_Wide);
- Stream_Control_SubPicture_Letterbox.push_back(Number_Letterbox);
- Stream_Control_SubPicture_PanScan.push_back(Number_PanScan);
- }
-
- if (Available && Retrieve(Stream_Text, Pos, Text_ID).empty() && Sectors[(size_t)((File_Offset+Buffer_Offset)/2048)]==Sector_VTS_PGCI)
- {
- while (Pos>Count_Get(Stream_Text))
- Stream_Prepare(Stream_Text);
-
- Ztring ID_String; ID_String.From_Number(0x20+Number_Wide); ID_String+=__T(" (0x"); ID_String+=Ztring::ToZtring(0x20+Number_Wide, 16); ID_String+=__T(")");
- Fill(Stream_Text, Pos, Text_ID, ID_String);
- Fill(Stream_Text, Pos, Text_ID_String, ID_String, true);
- }
- }
- Element_End0();
- Skip_B2( "next PGCN");
- Skip_B2( "previous PGCN");
- Skip_B2( "goup PGCN");
- Skip_B1( "PGC still time - 255=infinite");
- Skip_B1( "PG playback mode");
- Element_Begin1("palette");
- for (int Pos=0; Pos<16; Pos++)
- {
- Skip_B4( "palette (0 - Y - Cr - Cb)");
- }
- Element_End0();
- Get_B2 (commands, "offset within PGC to commands");
- Get_B2 (program_map, "offset within PGC to program map");
- Get_B2 (cell_playback, "offset within PGC to cell playback information table");
- Get_B2 (cell_position, "offset within PGC to cell position information table");
- Element_End0();
-
- //commands
- if (commands>0)
- {
- if (Element_Offset<Offset+commands)
- {
- if (Offset+commands>Element_Size)
- {
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- return;
- }
- Skip_XX(Offset+commands-Element_Offset, "Unknown");
- }
- Element_Begin1("commands");
- int16u PreCommands_Count, PostCommands_Count, CellCommands_Count, EndAdress;
- Get_B2 (PreCommands_Count, "Number of pre commands");
- Get_B2 (PostCommands_Count, "Number of post commands");
- Get_B2 (CellCommands_Count, "Number of cell commands");
- Get_B2 (EndAdress, "End address relative to command table");
- if (PreCommands_Count>0)
- {
- Element_Begin1("Pre commands");
- for (int16u Pos=0; Pos<PreCommands_Count; Pos++)
- {
- Element_Begin1("Pre command");
- Skip_XX(8, "Pre command");
- Element_End0();
- }
- Element_End0();
- }
- if (PostCommands_Count>0)
- {
- Element_Begin1("Post commands");
- for (int16u Pos=0; Pos<PostCommands_Count; Pos++)
- {
- Element_Begin1("Post command");
- Skip_XX(8, "Post command");
- Element_End0();
- }
- Element_End0();
- }
- if (CellCommands_Count>0)
- {
- Element_Begin1("Cell commands");
- for (int16u Pos=0; Pos<CellCommands_Count; Pos++)
- {
- Element_Begin1("Cell command");
- Skip_XX(8, "Cell command");
- Element_End0();
- }
- Element_End0();
- }
- Element_End0();
- }
-
- //program map
- if (program_map>0)
- {
- if (Element_Offset<Offset+program_map)
- Skip_XX(Offset+program_map-Element_Offset, "Unknown");
- Element_Begin1("program map");
- for (int8u Pos=0; Pos<Program_Count; Pos++)
- {
- Element_Begin1("Entry");
- int8u entry;
- Get_B1( entry, "Entry cell number");
- ProgramMap.push_back(entry);
- //Skip_B1( "Entry cell number");
- Element_End0();
- }
- Element_End0();
- }
-
- //cell playback
- if (cell_playback>0)
- {
- if (Element_Offset<Offset+cell_playback)
- Skip_XX(Offset+cell_playback-Element_Offset, "Unknown");
- Element_Begin1("cell playback");
- for (int8u Pos=0; Pos<Cells; Pos++)
- {
- int64u CellDuration;
- Element_Begin1("cell");
- Skip_XX(4, "ToDo");
- Get_Duration(CellDuration, "Time");
- Skip_B4( "first VOBU start sector");
- Skip_B4( "first ILVU end sector");
- Skip_B4( "last VOBU start sector");
- Skip_B4( "last VOBU end sector");
- Element_Info1(Ztring::ToZtring(Pos)); Element_Info1(Ztring::ToZtring(CellDuration));
- Element_End0();
-
- CellDurations.push_back(CellDuration);
- }
- Element_End0();
- }
-
- //cell position
- if (cell_position>0)
- {
- if (Element_Offset<Offset+cell_position)
- Skip_XX(Offset+cell_position-Element_Offset, "Unknown");
- Element_Begin1("cell position");
- for (int8u Pos=0; Pos<Cells; Pos++)
- {
- Element_Begin1("cell");
- Skip_B2( "VOBid");
- Skip_B1( "reserved");
- Skip_B1( "Cell id");
- Element_End0();
- }
- Element_End0();
- }
-
- Element_End0();
-
- FILLING_BEGIN();
- if (Title)
- {
- Stream_Prepare(Stream_Menu);
-
- int64u ProgramTotalDuration=0;
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_Begin, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
- for (int8u Pos=0; Pos<ProgramMap.size(); Pos++)
- {
- Fill(StreamKind_Last, StreamPos_Last, Ztring().Duration_From_Milliseconds(ProgramTotalDuration).To_Local().c_str(), Ztring(__T("Chapter "))+Ztring::ToZtring(Pos+1));
-
- int8u End;
- if (Pos+1>=Program_Count)
- End=Cells+1;
- else
- End=ProgramMap[Pos+1];
-
- int64u ProgramDuration=0;
- if (Pos<ProgramMap.size())
- for (int8u CellPos=ProgramMap[Pos]; CellPos<End; CellPos++)
- if (CellPos && CellPos<=CellDurations.size())
- ProgramDuration+=CellDurations[CellPos-1];
- ProgramTotalDuration+=ProgramDuration;
- }
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_End, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
- Fill(Stream_Menu, StreamPos_Last, Menu_Duration, TotalDuration);
-
- for (size_t Pos=0; Pos<Stream_Control_Audio.size(); Pos++)
- {
- Fill(StreamKind_Last, StreamPos_Last, "List (Audio)", Stream_Control_Audio[Pos]);
- }
- for (size_t Pos=0; Pos<Stream_Control_SubPicture_43.size(); Pos++)
- {
- Fill(StreamKind_Last, StreamPos_Last, "List (Subtitles 4/3)", Stream_Control_SubPicture_43[Pos]);
- }
- for (size_t Pos=0; Pos<Stream_Control_SubPicture_Wide.size(); Pos++)
- {
- Fill(StreamKind_Last, StreamPos_Last, "List (Subtitles Wide)", Stream_Control_SubPicture_Wide[Pos]);
- }
- for (size_t Pos=0; Pos<Stream_Control_SubPicture_Letterbox.size(); Pos++)
- {
- Fill(StreamKind_Last, StreamPos_Last, "List (Subtitles Letterbox)", Stream_Control_SubPicture_Letterbox[Pos]);
- }
- for (size_t Pos=0; Pos<Stream_Control_SubPicture_PanScan.size(); Pos++)
- {
- Fill(StreamKind_Last, StreamPos_Last, "List (Subtitles Pan&Scan)", Stream_Control_SubPicture_PanScan[Pos]);
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::TT_SRPT()
-{
- Element_Name("table of titles");
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VMGM_PGCI_UT()
-{
- Element_Name("Menu Program Chain table");
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VMG_PTL_MAIT()
-{
- Element_Name("Parental Management masks");
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VMG_VTS_ATRT()
-{
- Element_Name("copies of VTS audio/sub-picture attributes");
-
- //Parsing
- int32u EndAddress;
- Element_Begin1("Header");
- int32u Offset;
- Skip_B4( "Number of title sets");
- Get_B4 (EndAddress, "End address");
- if (EndAddress>=Element_Size)
- EndAddress=(int32u)Element_Size-1;
- Get_B4 (Offset, "Offset to VTSM_LU relative to VTSM_PGCI_UT");
- if (Offset-12>0)
- Skip_XX(Offset-12, "Unknown");
- Element_End0();
-
- while (Element_Offset<=EndAddress)
- {
- Element_Begin1("VTS_ATRT");
- Element_Begin1("Header");
- int32u Size;
- Get_B4 (Size, "End address");
- Size++; //Last byte
- Element_End0();
- Element_Begin1("Copy of VTS Category");
- Skip_B4( "VTS Category");
- Element_End0();
- Element_Begin1("Copy of VTS attributes");
- Skip_XX(Size-8, "VTS attributes");
- Element_End0();
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VMG_TXTDT_MG()
-{
- Element_Name("text data");
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VMGM_C_ADT()
-{
- Element_Name("menu cell address table");
-}
-
-//---------------------------------------------------------------------------
-void File_Dvdv::VMGM_VOBU_ADMAP()
-{
- Element_Name("menu VOBU address map");
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_DVDV_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dvdv.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dvdv.h
deleted file mode 100644
index d9ef5f85b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dvdv.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DVD objects
-// (.ifo files on DVD-Video)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DvdvH
-#define MediaInfo_File_DvdvH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Dvdv
-//***************************************************************************
-
-class File_Dvdv : public File__Analyze
-{
-protected :
- //Streams management
- void Streams_Finish();
-
-public :
- File_Dvdv();
-
-private :
- //Buffer
- void FileHeader_Parse ();
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void VMG();
- void VTS();
- void VTS_PTT_SRPT();
- void VTS_PGCI();
- void VTSM_PGCI_UT();
- void VTS_TMAPTI();
- void VTSM_C_ADT();
- void VTSM_VOBU_ADMAP();
- void VTS_C_ADT();
- void VTS_VOBU_ADMAP();
- void TT_SRPT();
- void VMGM_PGCI_UT();
- void VMG_PTL_MAIT();
- void VMG_VTS_ATRT();
- void VMG_TXTDT_MG();
- void VMGM_C_ADT();
- void VMGM_VOBU_ADMAP();
-
- void Video();
- void Audio();
- void Text();
- void MultiChannel();
-
- //Temp
- bool VTS_Attributes_AreHere;
- //std::vector<size_t> Sectors;
- //std::vector<std::vector<size_t> > Sectors_Times;
- //std::vector<int8u> Sectors_Times_SecondsPerTime;
-
- enum sector
- {
- Sector_Nothing,
- Sector_VTS_PTT_SRPT,
- Sector_VTS_PGCI,
- Sector_VTSM_PGCI_UT,
- Sector_VTS_TMAPTI,
- Sector_VTSM_C_ADT,
- Sector_VTSM_VOBU_ADMAP,
- Sector_VTS_C_ADT,
- Sector_VTS_VOBU_ADMAP,
- Sector_TT_SRPT,
- Sector_VMGM_PGCI_UT,
- Sector_VMG_PTL_MAIT,
- Sector_VMG_VTS_ATRT,
- Sector_VMG_TXTDT_MG,
- Sector_VMGM_C_ADT,
- Sector_VMGM_VOBU_ADMAP,
- };
- std::vector<sector> Sectors;
-
- //Helpers
- Ztring Time_ADT(int32u Value);
- size_t Program_Pos;
- size_t Time_Pos;
- void Get_Duration(int64u &Duration, const Ztring &Name);
- Ztring Time_String; //Value from Time_*()
- void PGC(int64u Offset, bool Title=false);
-};
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-namespace Dvdv
-{
- const int32u VMG=0x2D564D47;
- const int32u VTS=0x2D565453;
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dxw.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dxw.cpp
deleted file mode 100644
index 1e2a0a158..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dxw.cpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DXW_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Dxw.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/Format/Http/Http_Utils.h"
-#include "tinyxml2.h"
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Dxw::File_Dxw()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Dxw;
- StreamIDs_Width[0]=sizeof(size_t)*2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_Dxw::~File_Dxw()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dxw::Streams_Finish()
-{
- if (ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Dxw::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Dxw::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- {
- XMLElement* Root=document.FirstChildElement("indexFile");
- if (Root)
- {
- const char* Attribute=Root->Attribute("xmlns");
- if (Attribute==NULL || Ztring().From_UTF8(Attribute)!=__T("urn:digimetrics-xml-wrapper"))
- {
- Reject("DXW");
- return false;
- }
-
- Accept("DXW");
- Fill(Stream_General, 0, General_Format, "DXW");
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- XMLElement* Track=Root->FirstChildElement();
- while (Track)
- {
- if (string(Track->Value())=="clip")
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
-
- Attribute=Track->Attribute("file");
- if (Attribute)
- {
- ReferenceFile.FileNames.push_back(Ztring().From_UTF8(Attribute));
-
- Attribute=Track->Attribute("type");
- if (Attribute)
- {
- Ztring StreamKind; StreamKind.From_UTF8(Attribute);
- if (StreamKind==__T("video"))
- ReferenceFile.StreamKind=Stream_Video;
- if (StreamKind==__T("audio"))
- ReferenceFile.StreamKind=Stream_Audio;
- if (StreamKind==__T("data"))
- ReferenceFile.StreamKind=Stream_Text; //Not sure this is a right mapping, but this is only used when file is missing
- }
-
- Attribute=Track->Attribute("source");
- if (Attribute)
- {
- Ztring StreamKind; StreamKind.From_UTF8(Attribute);
- if (StreamKind==__T("main"))
- ReferenceFile.IsMain=true;
- }
-
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- }
-
- Attribute=Track->Attribute("framerate");
- if (Attribute)
- {
- ReferenceFile.FrameRate=Ztring().From_UTF8(Attribute).To_float64();
-
- Attribute=Track->Attribute("type");
- if (Attribute)
- {
- Ztring StreamKind; StreamKind.From_UTF8(Attribute);
- if (StreamKind==__T("video"))
- ReferenceFile.StreamKind=Stream_Video;
- if (StreamKind==__T("audio"))
- ReferenceFile.StreamKind=Stream_Audio;
- if (StreamKind==__T("data"))
- ReferenceFile.StreamKind=Stream_Text; //Not sure this is a right mapping, but this is only used when file is missing
- }
-
- XMLElement* Frame=Track->FirstChildElement();
- while (Frame)
- {
- if (string(Frame->Value())=="frame")
- {
- Attribute=Frame->Attribute("file");
- if (Attribute)
- ReferenceFile.FileNames.push_back(Ztring().From_UTF8(Attribute));
- }
-
- Frame=Frame->NextSiblingElement();
- }
- }
-
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- ReferenceFiles->References.push_back(ReferenceFile);
- }
-
- Track=Track->NextSiblingElement();
- }
- }
- else
- {
- Reject("DXW");
- return false;
- }
- }
-
- Element_Offset=File_Size;
-
- Element_Offset=File_Size;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_DXW_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dxw.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dxw.h
deleted file mode 100644
index ac6fdee07..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Dxw.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DXW files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DxwH
-#define MediaInfo_File_DxwH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_Dxw
-//***************************************************************************
-
-class File_Dxw : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Dxw();
- ~File_Dxw();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Flv.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Flv.cpp
deleted file mode 100644
index 91a46232c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Flv.cpp
+++ /dev/null
@@ -1,1700 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-//
-// Examples:
-// http://samples.mplayerhq.hu/FLV/
-//
-// Reverse engineering
-// http://osflash.org/documentation/amf/astypes
-//
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_FLV_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Flv.h"
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_HEVC_YES)
- #include "MediaInfo/Video/File_Hevc.h"
-#endif
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_RM_YES)
- #include "MediaInfo/Multiple/File_Rm.h"
-#endif
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#include <algorithm>
-#if MEDIAINFO_DEMUX
- #include "base64.h"
-#endif //MEDIAINFO_DEMUX
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-const int16u Flv_Channels[]=
-{
- 1,
- 2,
-};
-
-const int16u Flv_Resolution[]=
-{
- 8,
- 16,
-};
-
-const int16u Flv_SamplingRate[]=
-{
- 5500,
- 11025,
- 22050,
- 44100,
- 8000, //Special case for Nellymoser 8kHz mono
-};
-
-const char* Flv_Format_Audio[16]=
-{
- "PCM",
- "ADPCM",
- "MPEG Audio",
- "PCM",
- "Nellymoser", //16 KHz
- "Nellymoser", //8 KHz
- "Nellymoser",
- "ADPCM",
- "ADPCM",
- "",
- "AAC",
- "Speex",
- "",
- "",
- "MPEG Audio", //8 KHz
- "",
-};
-
-const char* Flv_Format_Profile_Audio[16]=
-{
- "",
- "",
- "Layer 3",
- "",
- "",
- "",
- "",
- "A-law",
- "U-law",
- "",
- "",
- "",
- "",
- "",
- "Layer 3", //8 KHz
- "",
-};
-
-const char* Flv_Codec_Audio[16]=
-{
- "Uncompressed",
- "ADPCM",
- "MPEG-1 Audio Layer 3",
- "",
- "Nellymoser 16kHz mono",
- "Nellymoser 8kHz mono",
- "Nellymoser",
- "ADPCM",
- "ADPCM",
- "",
- "AAC",
- "Speex",
- "",
- "",
- "MPEG Audio Layer 3",
- "",
-};
-
-const char* Flv_CodecID_Hint_Audio[16]=
-{
- "",
- "",
- "MP3",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "MP3", //8 KHz
- "",
-};
-
-const char* Flv_Format_Video[16]=
-{
- "",
- "",
- "Sorenson Spark",
- "Screen video",
- "VP6",
- "VP6",
- "Screen video 2",
- "AVC",
- "",
- "",
- "",
- "",
- "HEVC",
- "",
- "",
- "",
-};
-
-const char* Flv_Format_Profile_Video[16]=
-{
- "",
- "",
- "",
- "",
- "",
- "Alpha channel",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-const char* Flv_Codec_Video[16]=
-{
- "",
- "",
- "Sorenson H263",
- "Screen video",
- "On2 VP6",
- "On2 VP6 with alpha channel",
- "Screen video 2",
- "AVC",
- "",
- "",
- "",
- "",
- "HEVC",
- "",
- "",
- "",
-};
-
-const char* Flv_CodecID_Hint_Video[16]=
-{
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-const char* Flv_H263_PictureSize[]=
-{
- "custom, 1 byte",
- "custom, 2 bytes",
- "CIF (352x288)",
- "QCIF (176x144)",
- "SQCIF (128x96)",
- "320x240",
- "160x120",
- "",
-};
-
-const int16u Flv_H263_WidthHeight[8][2]=
-{
- { 0, 0},
- { 0, 0},
- {352, 288},
- {176, 144},
- {128, 96},
- {320, 240},
- {160, 120},
- {0, 0},
-};
-
-const char* Flv_H263_PictureType[]=
-{
- "IntraFrame",
- "InterFrame",
- "InterFrame (Disposable)",
- "",
-};
-const char* Flv_VP6_FrameMode[]=
-{
- "IntraFrame",
- "",
-};
-
-const char* Flv_VP6_Marker[]=
-{
- "VP6.1/6.2",
- "VP6.0",
-};
-
-const char* Flv_VP6_Version[]=
-{
- "",
- "",
- "",
- "",
- "",
- "",
- "VP6.0/6.1",
- "VP6.0 (Electronic Arts)",
- "VP6.2",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-const char* Flv_VP6_Version2[]=
-{
- "VP6.0",
- "",
- "",
- "VP6.1/6.2",
-};
-
-const char* Flv_FrameType[]=
-{
- "",
- "KeyFrame",
- "InterFrame",
- "InterFrame (Disposable)",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-const char* Flv_TagType[]=
-{
- "DOUBLE",
- "UI8",
- "SCRIPTDATASTRING",
- "SCRIPTDATAOBJECT[n]",
- "SCRIPTDATASTRING defining the MovieClip path",
- "Null",
- "Undefined",
- "UI16",
- "SCRIPTDATAVARIABLE[ECMAArrayLength]",
- "EndOfObject",
- "SCRIPTDATAVARIABLE[n]",
- "SCRIPTDATADATE",
- "SCRIPTDATALONGSTRING",
- "Unsupported",
- "Recordset",
- "XML",
- "TypedObject",
- "AMF3 data",
-};
-
-const char* Flv_Amf3Type[]=
-{
- "Undefined",
- "Null",
- "Boolean-false",
- "Boolean-true",
- "Integer",
- "Number",
- "String",
- "XML",
- "Data",
- "Array",
- "Object",
- "XML String",
- "ByteArray",
-};
-
-const char* Flv_AVCPacketType(int8u Value)
-{
- switch (Value)
- {
- case 0 : return "AVC sequence header";
- case 1 : return "NALU";
- case 2 : return "end of sequence";
- default: return "";
- }
-}
-
-const char* Flv_AACPacketType(int8u Value)
-{
- switch (Value)
- {
- case 0 : return "AAC sequence header";
- case 1 : return "AAC Raw";
- default: return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Flv::File_Flv()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("FLV");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Flv;
- StreamIDs_Width[0]=2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
-
- //Internal
- Stream.resize(3); //Null, Video, Audio
-
- //Temp
- Searching_Duration=false;
- MetaData_NotTrustable=false;
- PreviousTagSize=(int32u)-1;
- meta_filesize=(int64u)-1;
- meta_duration=0;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Flv::Streams_Fill()
-{
- //Coherency
- if (Count_Get(Stream_Video) && Count_Get(Stream_Audio) && !Retrieve(Stream_Video, 0, Video_BitRate).empty() && Retrieve(Stream_Audio, 0, Audio_BitRate).empty())
- {
- Fill(Stream_General, 0, General_OverallBitRate, Retrieve(Stream_Video, 0, Video_BitRate));
- Clear(Stream_Video, 0, Video_BitRate);
- }
-
- //Trying to detect VFR
- std::vector<int64u> video_stream_FrameRate_Between;
- for (size_t Pos=1; Pos<video_stream_FrameRate.size(); Pos++)
- video_stream_FrameRate_Between.push_back(video_stream_FrameRate[Pos]-video_stream_FrameRate[Pos-1]);
- std::sort(video_stream_FrameRate_Between.begin(), video_stream_FrameRate_Between.end());
- if (!video_stream_FrameRate_Between.empty())
- {
- if (video_stream_FrameRate_Between[0]*0.9<video_stream_FrameRate_Between[video_stream_FrameRate_Between.size()-1]
- && video_stream_FrameRate_Between[0]*1.1>video_stream_FrameRate_Between[video_stream_FrameRate_Between.size()-1])
- {
- float Time;
- if (video_stream_FrameRate.size()>30)
- Time=((float)(video_stream_FrameRate[30]-video_stream_FrameRate[0]))/30; //30 frames for handling 30 fps rounding problems
- else
- Time=((float)(video_stream_FrameRate[video_stream_FrameRate.size()-1]-video_stream_FrameRate[0]))/(video_stream_FrameRate.size()-1); //30 frames for handling 30 fps rounding problems
- if (Time)
- {
- Fill(Stream_Video, 0, Video_FrameRate, 1000/Time);
- Fill(Stream_Video, 0, Video_FrameRate_Mode, "CFR");
- }
- }
- else
- Fill(Stream_Video, 0, Video_FrameRate_Mode, "VFR");
- }
-
- //Parsers
- if (Stream[Stream_Video].Parser!=NULL)
- {
- Fill(Stream[Stream_Video].Parser);
- Merge(*Stream[Stream_Video].Parser, Stream_Video, 0, 0);
- }
- if (Stream[Stream_Audio].Parser!=NULL)
- {
- Fill(Stream[Stream_Audio].Parser);
- Merge(*Stream[Stream_Audio].Parser, Stream_Audio, 0, 0);
-
- //Special case: AAC
- if (Retrieve(Stream_Audio, 0, Audio_Format)==__T("AAC")
- || Retrieve(Stream_Audio, 0, Audio_Format)==__T("MPEG Audio")
- || Retrieve(Stream_Audio, 0, Audio_Format)==__T("Vorbis"))
- Clear(Stream_Audio, 0, Audio_BitDepth); //Resolution is not valid for AAC / MPEG Audio / Vorbis
- }
-
- //Delay
- if (Stream[Stream_Video].Delay!=(int32u)-1)
- {
- Fill(Stream_Video, 0, Video_Delay, Stream[Stream_Video].Delay+Retrieve(Stream_Video, 0, Video_Delay).To_int32u(), 10, true);
- Fill(Stream_Video, 0, Video_Delay_Source, "Container");
- }
- if (Stream[Stream_Audio].Delay!=(int32u)-1)
- {
- Fill(Stream_Audio, 0, Audio_Delay, Stream[Stream_Audio].Delay+Retrieve(Stream_Audio, 0, Audio_Delay).To_int32u(), 10, true);
- Fill(Stream_Audio, 0, Audio_Delay_Source, "Container");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::Streams_Finish()
-{
- //Duration
- //if (meta_duration)
- // Fill(Stream_General, 0, General_Duration, meta_duration, 10, true);
- Streams_Finish_PerStream(Stream_Video);
- Streams_Finish_PerStream(Stream_Audio);
-
- /*
- float64 FrameRate=Retrieve(Stream_Video, 0, Video_FrameRate).To_float64();
- if (LastFrame_Time!=(int32u)-1 && FirstFrame_Time!=(int32u)-1)
- Duration_Final=LastFrame_Time-FirstFrame_Time+((LastFrame_Type==9 && FrameRate)?((int64u)(1000/FrameRate)):0);
- if (Duration_Final)
- {
- if (Count_Get(Stream_Video))
- Fill(Stream_Video, 0, Video_Duration, Duration_Final, 10, true);
- if (Count_Get(Stream_Audio))
- Fill(Stream_Audio, 0, Audio_Duration, Duration_Final, 10, true);
-
- //Integrity
- if (Count_Get(Stream_Video) && File_Size!=(int64u)-1 && !Retrieve(Stream_Video, 0, Video_BitRate).empty() && !Retrieve(Stream_Video, 0, Video_Duration).empty())
- {
- int64u BitRate_Video_Meta=Retrieve(Stream_Video, 0, Video_BitRate).To_int64u();
- int64u Duration=Retrieve(Stream_Video, 0, Video_Duration).To_int64u();
- int64u BitRate_Video_Duration=File_Size*8*1000/Duration;
- if (Count_Get(Stream_Audio) && !Retrieve(Stream_Audio, 0, Audio_BitRate).empty())
- {
- int64u BitRate_Audio=Retrieve(Stream_Audio, 0, Audio_BitRate).To_int64u();
- if (BitRate_Audio<BitRate_Video_Duration)
- BitRate_Video_Duration-=BitRate_Audio;
- else if (BitRate_Audio)
- BitRate_Video_Duration=0; //There is a problem
- }
- if (BitRate_Video_Meta<BitRate_Video_Duration/2 || BitRate_Video_Meta>BitRate_Video_Duration*2)
- Clear(Stream_Video, 0, Video_BitRate);
- }
- }
- */
-
- if (Stream[Stream_Video].Parser!=NULL)
- {
- Finish(Stream[Stream_Video].Parser);
- Merge(*Stream[Stream_Video].Parser, Stream_Video, 0, 0);
- }
- if (Stream[Stream_Audio].Parser!=NULL)
- {
- Finish(Stream[Stream_Audio].Parser);
- Merge(*Stream[Stream_Audio].Parser, Stream_Audio, 0, 0);
- }
-
- if (Retrieve(Stream_General, 0, General_Duration).empty() && Retrieve(Stream_Video, 0, Video_Duration).empty() && meta_duration)
- Fill(Stream_General, 0, General_Duration, meta_duration, 0, true);
-
- //Purge what is not needed anymore
- if (!File_Name.empty()) //Only if this is not a buffer, with buffer we can have more data
- Stream.clear();
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::Streams_Finish_PerStream(stream_t StreamKind)
-{
- if (Stream[StreamKind].TimeStamp!=(int32u)-1)
- {
- //Calculating the last timestamp (last block included)
- if (!Stream[StreamKind].Durations.empty())
- {
- int64u Durations_Total=0;
- for (size_t Pos=0; Pos<Stream[StreamKind].Durations.size(); Pos++)
- Durations_Total+=Stream[StreamKind].Durations[Pos];
- int32u Duration_Average=float32_int32s(((float32)Durations_Total)/Stream[StreamKind].Durations.size());
- Stream[StreamKind].TimeStamp+=Duration_Average;
- }
-
- Fill(StreamKind, 0, "Duration", Stream[StreamKind].TimeStamp, 10, true);
- }
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Flv::FileHeader_Begin()
-{
- //Synchro
- if (3>Buffer_Size)
- return false;
- if (Buffer[0]!=0x46 //"FLV"
- || Buffer[1]!=0x4C
- || Buffer[2]!=0x56)
- {
- Reject();
- return false;
- }
- if (9>Buffer_Size)
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::FileHeader_Parse()
-{
- //Parsing
- Element_Begin1("FLV header");
- int32u Size;
- int8u Version, Flags;
- Skip_String(3, "Signature");
- Get_B1 (Version, "Version");
- Get_B1 (Flags, "Flags");
- Get_Flags (Flags, 0, video_stream_Count, "Video");
- Get_Flags (Flags, 2, audio_stream_Count, "Audio");
- Get_B4 (Size, "Size");
- if (Size>9)
- Skip_XX(Size-9, "Unknown");
- Element_End0();
-
- FILLING_BEGIN();
- //Integrity
- if (Version==0 || Size<9)
- {
- Reject();
- return;
- }
-
- //Filling
- Accept();
-
- Fill(Stream_General, 0, General_Format, "Flash Video");
- if (!video_stream_Count && !audio_stream_Count)
- {
- //TODO: quick and awful hack for a file having both bools unset, should detect directly the streams
- video_stream_Count=true;
- audio_stream_Count=true;
- }
- if (video_stream_Count)
- {
- Stream_Prepare(Stream_Video);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_ForceIds_Get())
- Fill(Stream_Video, 0, Video_ID, 9);
- #endif //MEDIAINFO_DEMUX
- video_stream_FrameRate_Detected=false;
- }
- else
- video_stream_FrameRate_Detected=true;
- if (audio_stream_Count)
- {
- Stream_Prepare(Stream_Audio);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_ForceIds_Get())
- Fill(Stream_Audio, 0, Audio_ID, 8);
- #endif //MEDIAINFO_DEMUX
- }
-
- if (Version>1)
- {
- Finish();
- return; //Version more than 1 is not supported
- }
- FILLING_ELSE()
- Reject();
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Flv::Synchronize()
-{
- if (File_Offset+Buffer_Offset+4==File_Size)
- return true; // Used by seek from end
-
- //Synchronizing
- while (Buffer_Offset+15<=Buffer_Size)
- {
- int32u BodyLength=BigEndian2int24u(Buffer+Buffer_Offset+5);
- if ((Buffer[Buffer_Offset ]
- || Buffer[Buffer_Offset+1]
- || Buffer[Buffer_Offset+2]
- || Buffer[Buffer_Offset+3]>=11)
- && File_Offset+Buffer_Offset+15+BodyLength==File_Size)
- break; //Last block
- if (File_Offset+Buffer_Offset+15+BodyLength<File_Size)
- {
- if (Buffer_Offset+15+BodyLength+15>Buffer_Size)
- return false; //Need more data
-
- if ((Buffer[Buffer_Offset ]
- || Buffer[Buffer_Offset+1]
- || Buffer[Buffer_Offset+2]
- || Buffer[Buffer_Offset+3]>=11)
- && (BigEndian2int32u(Buffer+Buffer_Offset+15+BodyLength)==11+BodyLength // PreviousTagSize
- || BigEndian2int32u(Buffer+Buffer_Offset+15+BodyLength)==BodyLength)) // PreviousTagSize without 11, found in some buggy files
- {
- PreviousTagSize_Add11=(BigEndian2int32u(Buffer+Buffer_Offset+15+BodyLength)==BodyLength)?0:11;
- break;
- }
- }
-
- Buffer_Offset++;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+15>Buffer_Size)
- return false;
-
- //Synched
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Flv::Synched_Test()
-{
- if (File_Offset+Buffer_Offset+4==File_Size)
- return true; // Used by seek from end
-
- //Must have enough buffer for having header
- if (Buffer_Offset+15>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]==0
- && Buffer[Buffer_Offset+1]==0
- && Buffer[Buffer_Offset+2]==0
- && Buffer[Buffer_Offset+3]<PreviousTagSize_Add11
- && File_Offset+Buffer_Offset>9)
- {
- Synched=false;
- return true;
- }
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Flv::Read_Buffer_Unsynched()
-{
- if (!Searching_Duration) //If Searching_Duration, we are looking for end in inverse order, no timestamp reset
- {
- Stream[Stream_Video].TimeStamp=(int32u)-1;
- if (Stream[Stream_Video].Parser)
- Stream[Stream_Video].Parser->Open_Buffer_Unsynch();
- Stream[Stream_Audio].TimeStamp=(int32u)-1;
- if (Stream[Stream_Audio].Parser)
- Stream[Stream_Audio].Parser->Open_Buffer_Unsynch();
- }
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Flv::Header_Parse()
-{
- if (Searching_Duration && File_Offset+Buffer_Offset==File_Size-4)
- {
- Get_B4 (PreviousTagSize, "PreviousTagSize");
-
- //Filling
- Header_Fill_Code((int64u)-1, "End Of File");
- Header_Fill_Size(4);
- return;
- }
-
- //Parsing
- int32u BodyLength;
- int8u Type;
- Get_B4 (PreviousTagSize, "PreviousTagSize");
- if (File_Offset+Buffer_Offset+4<File_Size)
- {
- int32u Timestamp_Base;
- int8u Timestamp_Extended;
- Get_B1 (Type, "Type"); //Param_Info1(Type<19?Flv_Type[Type]:__T("Unknown"));
- Get_B3 (BodyLength, "BodyLength");
- Get_B3 (Timestamp_Base, "Timestamp_Base"); //in ms
- Get_B1 (Timestamp_Extended, "Timestamp_Extended"); //TimeStamp = Timestamp_Extended*0x01000000+Timestamp_Base
- Skip_B3( "StreamID");
-
- // For audio, check if it's just an audio config.
- bool Skip_Timestamps=false;
- if (Type==0x08)
- {
- int16u Format_Info;
- Peek_B2(Format_Info);
- int8u Format=(Format_Info>>12)&0x0F;
- if (Format==10 && (Format_Info&0xFF)==0) // AAC sequence header
- Skip_Timestamps=true;
- }
-
- //Filling
- if ((Type==0x08 && !Skip_Timestamps) || Type==0x09)
- {
- Time=(((int32u)Timestamp_Extended)<<24)|Timestamp_Base;
- stream_t StreamKind=(Type==0x08)?Stream_Audio:Stream_Video;
- if (Stream[StreamKind].Delay==(int32u)-1)
- Stream[StreamKind].Delay=Time;
- else if (Stream[StreamKind].TimeStamp!=(int32u)-1 && Time>Stream[StreamKind].TimeStamp)
- Stream[StreamKind].Durations.push_back(Time-Stream[StreamKind].TimeStamp);
- if (!Searching_Duration || Stream[StreamKind].TimeStamp==(int32u)-1)
- Stream[StreamKind].TimeStamp=Time;
- }
-
- if (Type==0)
- Trusted_IsNot("Wrong type");
- }
- else
- {
- Type=0;
- BodyLength=0;
- }
-
- //Filling
- Header_Fill_Code(Type, Ztring().From_Number(Type, 16));
- Header_Fill_Size(Element_Offset+BodyLength);
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::Data_Parse()
-{
- switch (Element_Code)
- {
- case 0x00 : Element_Name("End Of File"); break;
- case 0x08 : audio(); break;
- case 0x09 : video(); break;
- case 0x12 : meta(); break;
- case 0xFA : Rm(); break;
- case (int64u)-1 : //When searching the last frame
- if (8+PreviousTagSize>File_Size)
- {
- Searching_Duration=false;
- Open_Buffer_Unsynch(); //There is a problem, trying to sync
- PreviousTagSize=65536;
- }
- GoTo(File_Size-PreviousTagSize-8, "FLV");
- return;
- default : if (Searching_Duration)
- {
- Finish(); //This is surely a bad en of file, don't try anymore
- return;
- }
-
- }
-
- if (Searching_Duration)
- {
- if ((((Count_Get(Stream_Video)==0 || Stream[Stream_Video].TimeStamp!=(int32u)-1)
- && (Count_Get(Stream_Audio)==0 || Stream[Stream_Audio].TimeStamp!=(int32u)-1))
- || (File_Size>65536*2 && File_Offset+Buffer_Offset-Header_Size-PreviousTagSize-4<File_Size-65536))
- && Config->ParseSpeed<1)
- Finish();
- else if (Element_Code==0xFA) //RM metadata have a malformed PreviousTagSize, always
- {
- //Trying to sync
- Searching_Duration=false;
- Open_Buffer_Unsynch(); //There is a problem, trying to sync
- GoToFromEnd(Header_Size+Element_Size+65536);
- return;
- }
- else
- GoTo(File_Offset+Buffer_Offset-Header_Size-PreviousTagSize-4);
- }
- else if (!video_stream_Count && !audio_stream_Count && video_stream_FrameRate_Detected && File_Offset+65536*2<File_Size && MediaInfoLib::Config.ParseSpeed_Get()<1) //All streams are parsed
- {
- Fill();
-
- //Trying to find the last frame for duration
- Read_Buffer_Unsynched(); //This is not synched yet, so we call directly this method instead of Open_Buffer_Unsynched
- GoToFromEnd(4, "FLV");
- Searching_Duration=true;
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Flv::video()
-{
- Element_Name("Video");
- Stream[Stream_Video].PacketCount++;
- Element_Info1(Stream[Stream_Video].PacketCount);
-
- //Handling FrameRate
- if (!video_stream_FrameRate_Detected)
- {
- if (video_stream_FrameRate.empty() || Time!=video_stream_FrameRate[video_stream_FrameRate.size()-1]) //if 2 block witht the same timestamp
- video_stream_FrameRate.push_back(Time);
- if (video_stream_FrameRate.size()>30)
- video_stream_FrameRate_Detected=true;
- }
-
- if (Element_Size==0) //Header says that video is present, but there is only one null packet
- {
- Element_Info1("Null");
- return;
- }
-
- //Needed?
- if (!video_stream_Count && Config->ParseSpeed<1)
- return; //No more need of Video stream
-
- //Parsing
- int8u Codec, FrameType;
- Element_Begin1("Stream header");
- BS_Begin();
- Get_S1 (4, FrameType, "frameType"); Param_Info1(Flv_FrameType[FrameType]);
- Get_S1 (4, Codec, "codecID"); Param_Info1(Flv_Codec_Video[Codec]); Element_Info1(Flv_Codec_Video[Codec]);
- BS_End();
- Element_End0();
-
- FILLING_BEGIN();
- //Filling
- if (Retrieve(Stream_Video, 0, Video_Format).empty())
- {
- if (Count_Get(Stream_Video)==0)
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, Flv_Format_Video[Codec]);
- Fill(Stream_Video, 0, Video_Format_Profile, Flv_Format_Profile_Video[Codec]);
- Fill(Stream_Video, 0, Video_Codec, Flv_Codec_Video[Codec]);
- Fill(Stream_Video, 0, Video_CodecID, Codec);
- Fill(Stream_Video, 0, Video_CodecID_Hint, Flv_CodecID_Hint_Video[Codec]);
- Fill(Stream_Video, 0, Video_BitDepth, 8); //FLV is not known to support another bit depth
-
- MustSynchronize=true; // Now, synchronization test is possible
- }
-
- //Parsing video data
- switch (Codec)
- {
- case 2 : video_H263(); break;
- case 3 : video_ScreenVideo(1); break;
- case 4 : video_VP6(false); break;
- case 5 : video_VP6(true); break;
- case 6 : video_ScreenVideo(2); break;
- case 7 : video_AVC(); break;
- case 12 : video_HEVC(); break;
- default : Skip_XX(Element_Size-Element_Offset, "Unknown");
- video_stream_Count=false; //No more need of Video stream;
- }
- FILLING_END();
-
- #if MEDIAINFO_DEMUX
- int8u Demux_Level_old=Demux_Level;
- if (Stream[Stream_Video].Parser && Stream[Stream_Video].Parser->Demux_Level==2)
- Demux_Level=4;
- Demux(Buffer+Buffer_Offset+1, (size_t)(Element_Size-1), ContentType_MainStream);
- Demux_Level=Demux_Level_old;
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::video_H263()
-{
- //Parsing
- int16u Width=0, Height=0;
- int8u Version, PictureSize, PictureType;
- bool ExtraInformationFlag;
- BS_Begin();
- Skip_S3(17, "PictureStartCode");
- Get_S1 ( 5, Version, "Version");
- if (Version>1)
- return;
- Skip_S1( 8, "TemporalReference");
- Get_S1 ( 3, PictureSize, "PictureSize"); Param_Info1(Flv_H263_PictureSize[PictureSize]);
- switch (PictureSize)
- {
- case 0 :
- Get_S2 ( 8, Width, "Width");
- Get_S2 ( 8, Height, "Height");
- break;
- case 1 :
- Get_S2 (16, Width, "Width");
- Get_S2 (16, Height, "Height");
- break;
- default :
- if (PictureSize<8)
- {
- Width=Flv_H263_WidthHeight[PictureSize][0];
- Height=Flv_H263_WidthHeight[PictureSize][1];
- }
- }
- Get_S1 ( 2, PictureType, "PictureSize"); Param_Info1(Flv_H263_PictureType[PictureType]);
- Skip_SB( "DeblockingFlag");
- Skip_S1( 5, "Quantizer");
- Get_SB ( ExtraInformationFlag, "ExtraInformationFlag");
- while (ExtraInformationFlag)
- {
- Skip_S1( 8, "ExtraInformation");
- Get_SB ( ExtraInformationFlag, "ExtraInformationFlag");
- }
- BS_End();
-
- FILLING_BEGIN();
- Fill(Stream_Video, 0, Video_Width, Width, 10, true);
- Fill(Stream_Video, 0, Video_Height, Height, 10, true);
- video_stream_Count=false; //No more need of Video stream
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::video_ScreenVideo(int8u Version)
-{
- //Parsing
- int16u Width, Height;
- BS_Begin();
- Info_S1( 4, BlockWidth, "BlockWidth"); Param_Info1((BlockWidth+1)*16);
- Get_S2 (12, Width, "ImageWidth");
- Info_S1( 4, BlockHeight, "BlockHeight"); Param_Info1((BlockHeight+1)*16);
- Get_S2 (12, Height, "ImageHeight");
- if (Version==2)
- {
- Skip_S1(6, "Reserved");
- Skip_SB( "has IFrameImage");
- Skip_SB( "has PaletteInfo");
- }
- BS_End();
-
- FILLING_BEGIN();
- Fill(Stream_Video, 0, Video_Width, Width, 10, true);
- Fill(Stream_Video, 0, Video_Height, Height, 10, true);
- video_stream_Count=false; //No more need of Video stream
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// From: http://wiki.multimedia.cx/index.php?title=On2_VP6
-//
-void File_Flv::video_VP6(bool WithAlpha)
-{
- //Parsing
- int8u HorizontalAdjustment, VerticalAdjustment;
- bool FrameMode, Marker;
- BS_Begin();
- Get_S1 ( 4, HorizontalAdjustment, "HorizontalAdjustment");
- Get_S1 ( 4, VerticalAdjustment, "VerticalAdjustment");
- if (WithAlpha)
- Skip_S3(24, "OffsetToAlpha");
- Get_SB ( FrameMode, "FrameMode"); Param_Info1(Flv_VP6_FrameMode[FrameMode]);
- Skip_S1( 6, "Quantization");
- Get_SB ( Marker, "Marker"); Param_Info1(Flv_VP6_Marker[Marker]);
- BS_End();
- if (FrameMode)
- {
- if (Marker==1)
- Skip_B2( "Offset");
- }
- else
- {
- int8u Version, Version2, Width, Height;
- BS_Begin();
- Get_S1 ( 5, Version, "Version");
- Get_S1 ( 2, Version2, "Version2");
- Skip_SB( "Interlace");
- BS_End();
- if (Marker || Version2==0)
- Skip_B2( "Offset");
- Skip_B1( "MacroBlock_Height");
- Skip_B1( "MacroBlock_Width");
- Get_B1 (Height, "Height"); Param_Info1(Ztring::ToZtring(Height*16)+__T(" pixels"));
- Get_B1 (Width, "Width"); Param_Info1(Ztring::ToZtring(Width*16)+__T(" pixels"));
-
- FILLING_BEGIN();
- if (Width && Height)
- {
- Fill(Stream_Video, 0, Video_Width, Width*16-HorizontalAdjustment, 10, true);
- Fill(Stream_Video, 0, Video_Height, Height*16-VerticalAdjustment, 10, true);
- }
- video_stream_Count=false; //No more need of Video stream
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::video_AVC()
-{
- int8u AVCPacketType;
- Get_B1 (AVCPacketType, "AVCPacketType"); Param_Info1(Flv_AVCPacketType(AVCPacketType));
- Info_B3(CompositionTime, "CompositionTime"); Param_Info1(Ztring::ToZtring((int32s)(CompositionTime+0xFF000000)));
-
- switch (AVCPacketType)
- {
- case 0 :
- #ifdef MEDIAINFO_AVC_YES
- if (Stream[Stream_Video].Parser==NULL)
- {
- Stream[Stream_Video].Parser=new File_Avc;
- Open_Buffer_Init(Stream[Stream_Video].Parser);
- ((File_Avc*)Stream[Stream_Video].Parser)->MustParse_SPS_PPS=true;
- ((File_Avc*)Stream[Stream_Video].Parser)->SizedBlocks=true;
- ((File_Avc*)Stream[Stream_Video].Parser)->MustSynchronize=false;
- }
-
- //Parsing
- Open_Buffer_Continue(Stream[Stream_Video].Parser);
- #else
- Skip_XX(Element_Size-Element_Offset, "AVC Data");
- video_stream_Count=false; //Unable to parse it
- #endif
- break;
- case 1 :
- #ifdef MEDIAINFO_AVC_YES
- if (Stream[Stream_Video].Parser==NULL)
- {
- //Data before header, this is wrong
- video_stream_Count=false;
- break;
- }
-
- //Parsing
- Open_Buffer_Continue(Stream[Stream_Video].Parser);
-
- //Disabling this stream
- if (Stream[Stream_Video].Parser->File_GoTo!=(int64u)-1 || Stream[Stream_Video].Parser->Count_Get(Stream_Video)>0 || (Config->ParseSpeed<1.0 && Stream[Stream_Video].PacketCount>=300))
- video_stream_Count=false;
- #else
- Skip_XX(Element_Size-Element_Offset, "AVC Data");
- video_stream_Count=false; //Unable to parse it
- #endif
- break;
- default: Skip_XX(Element_Size-Element_Offset, "Unknown");
- video_stream_Count=false; //Unable to parse it
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::video_HEVC()
-{
- int8u AVCPacketType;
- Get_B1 (AVCPacketType, "AVCPacketType"); Param_Info1(Flv_AVCPacketType(AVCPacketType));
- Info_B3(CompositionTime, "CompositionTime"); Param_Info1(Ztring::ToZtring((int32s)(CompositionTime+0xFF000000)));
-
- switch (AVCPacketType)
- {
- case 0 :
- #ifdef MEDIAINFO_HEVC_YES
- if (Stream[Stream_Video].Parser==NULL)
- {
- Stream[Stream_Video].Parser=new File_Hevc;
- Open_Buffer_Init(Stream[Stream_Video].Parser);
- ((File_Hevc*)Stream[Stream_Video].Parser)->MustParse_VPS_SPS_PPS=true;
- ((File_Hevc*)Stream[Stream_Video].Parser)->MustParse_VPS_SPS_PPS_FromFlv=true;
- ((File_Hevc*)Stream[Stream_Video].Parser)->MustSynchronize=false;
- ((File_Hevc*)Stream[Stream_Video].Parser)->SizedBlocks=true;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get())
- {
- Stream[Stream_Video].Parser->Demux_Level=2; //Container
- Stream[Stream_Video].Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- }
-
- //Parsing
- Open_Buffer_Continue(Stream[Stream_Video].Parser);
-
- //Demux
- #if MEDIAINFO_DEMUX
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- Demux_Level=2; //Container
- Demux(Buffer+Buffer_Offset+2, (size_t)(Element_Size-2), ContentType_Header);
- break;
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+Buffer_Offset+2), (size_t)(Element_Size-2));
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(Stream_Video, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[Stream_Video][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- Skip_XX(Element_Size-Element_Offset, "HEVC Data");
- video_stream_Count=false; //Unable to parse it
- #endif
- break;
- case 1 :
- #ifdef MEDIAINFO_HEVC_YES
- if (Stream[Stream_Video].Parser==NULL)
- {
- //Data before header, this is wrong
- video_stream_Count=false;
- break;
- }
-
- //Parsing
- Open_Buffer_Continue(Stream[Stream_Video].Parser);
-
- //Disabling this stream
- if (Stream[Stream_Video].Parser->File_GoTo!=(int64u)-1 || Stream[Stream_Video].Parser->Count_Get(Stream_Video)>0 || (Config->ParseSpeed<1.0 && Stream[Stream_Video].PacketCount>=300))
- video_stream_Count=false;
- #else
- Skip_XX(Element_Size-Element_Offset, "HEVC Data");
- video_stream_Count=false; //Unable to parse it
- #endif
- break;
- default: Skip_XX(Element_Size-Element_Offset, "Unknown");
- video_stream_Count=false; //Unable to parse it
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::audio()
-{
- Element_Name("Audio");
- Stream[Stream_Audio].PacketCount++;
- Element_Info1(Stream[Stream_Audio].PacketCount);
-
- if (Element_Size==0) //Header says that audio is present, but there is only one null packet
- {
- Element_Info1("Null");
- return;
- }
-
- //Needed?
- if (!audio_stream_Count && Config->ParseSpeed<1)
- return; //No more need of Audio stream
-
- //Parsing
- int8u codec, sampling_rate;
- bool is_16bit, is_stereo;
- Element_Begin1("Stream header");
- BS_Begin();
- Get_S1 (4, codec, "codec"); Param_Info1(Flv_Codec_Audio[codec]); Element_Info1(Flv_Codec_Audio[codec]);
- Get_S1 (2, sampling_rate, "sampling_rate"); Param_Info1(Ztring::ToZtring(Flv_SamplingRate[sampling_rate])+__T(" Hz"));
- Get_SB ( is_16bit, "is_16bit"); Param_Info1(Ztring::ToZtring(Flv_Resolution[is_16bit])+__T(" bits"));
- Get_SB ( is_stereo, "is_stereo"); Param_Info1(Ztring::ToZtring(Flv_Channels[is_stereo])+__T(" channel(s)"));
- BS_End();
- Element_End0();
-
- //Special case
- if (codec==5) //Nellymoser 8kHz mono
- {
- sampling_rate=5; //8000 Hz forced
- is_stereo=false; //Mono forced
- }
-
- if (codec!=10) // AAC has an header
- {
- Demux(Buffer+Buffer_Offset+(size_t)(Element_Offset+1), (size_t)(Element_Size-Element_Offset-1), ContentType_MainStream);
- }
-
- FILLING_BEGIN();
- if (Retrieve(Stream_Audio, 0, Audio_Format).empty())
- {
- //Filling
- if (Count_Get(Stream_Audio)==0)
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Channel_s_, Flv_Channels[is_stereo], 10, true);
- if (codec!=2 && codec!=10 && codec!=14) //MPEG Audio and AAC are not fixed bit depth
- Fill(Stream_Audio, 0, Audio_BitDepth, Flv_Resolution[is_16bit], 10, true);
- if (sampling_rate<4)
- Fill(Stream_Audio, 0, Audio_SamplingRate, Flv_SamplingRate[sampling_rate], 10, true);
- Fill(Stream_Audio, 0, Audio_Format, Flv_Format_Audio[codec]);
- Fill(Stream_Audio, 0, Audio_Format_Profile, Flv_Format_Profile_Audio[codec]);
- Fill(Stream_Audio, 0, Audio_Codec, Flv_Codec_Audio[codec]);
- Fill(Stream_Audio, 0, Audio_CodecID, codec);
- Fill(Stream_Audio, 0, Audio_CodecID_Hint, Flv_CodecID_Hint_Audio[codec]);
- if (codec==1)
- {
- //ADPCM
- Fill(Stream_Audio, 0, Audio_Format_Settings, "ShockWave");
- Fill(Stream_Audio, 0, Audio_Format_Settings_Firm, "ShockWave");
- Fill(Stream_Audio, 0, Audio_Codec_Settings, "SWF");
- Fill(Stream_Audio, 0, Audio_Codec_Settings_Firm, "SWF");
-
- }
-
- MustSynchronize=true; // Now, synchronization test is possible
- }
-
- //Parsing audio data
- switch (codec)
- {
- case 2 :
- case 14 : audio_MPEG(); break;
- case 10 : audio_AAC(); break;
- default : Skip_XX(Element_Size-Element_Offset, "Unknown");
- audio_stream_Count=false; //No more need of Audio stream
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::audio_MPEG()
-{
- #if defined(MEDIAINFO_MPEGA_YES)
- if (Stream[Stream_Audio].Parser==NULL)
- {
- Stream[Stream_Audio].Parser=new File_Mpega;
- Open_Buffer_Init(Stream[Stream_Audio].Parser);
- ((File_Mpega*)Stream[Stream_Audio].Parser)->FrameIsAlwaysComplete=true;
- }
-
- //Parsing
- Open_Buffer_Continue(Stream[Stream_Audio].Parser);
-
- //Disabling this stream
- if (Stream[Stream_Audio].Parser->File_GoTo!=(int64u)-1 || Stream[Stream_Audio].Parser->Count_Get(Stream_Audio)>0)
- audio_stream_Count=false;
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::audio_AAC()
-{
- int8u AACPacketType;
- Get_B1 (AACPacketType, "AACPacketType"); Param_Info1(Flv_AACPacketType(AACPacketType));
-
- switch (AACPacketType)
- {
- case 0 :
- #if defined(MEDIAINFO_AAC_YES)
- if (Stream[Stream_Audio].Parser==NULL)
- {
- Stream[Stream_Audio].Parser=new File_Aac;
- ((File_Aac*)Stream[Stream_Audio].Parser)->Mode=File_Aac::Mode_AudioSpecificConfig;
- Open_Buffer_Init(Stream[Stream_Audio].Parser);
- }
-
- //Parsing
- Open_Buffer_Continue(Stream[Stream_Audio].Parser);
-
- //Demux
- #if MEDIAINFO_DEMUX
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- Demux_Level=2; //Container
- Demux(Buffer+Buffer_Offset+2, (size_t)(Element_Size-2), ContentType_Header);
- break;
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+Buffer_Offset+2), (size_t)(Element_Size-2));
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(Stream_Audio, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[Stream_Audio][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- Skip_XX(Element_Size-Element_Offset, "AAC Data");
- audio_stream_Count=false; //Unable to parse it
- #endif
- break;
- case 1 :
- //Parsing
- Demux(Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset), ContentType_MainStream);
- Open_Buffer_Continue(Stream[Stream_Audio].Parser);
-
- audio_stream_Count=false; //No need of more
- break;
- default: Skip_XX(Element_Size-Element_Offset, "Unknown");
- audio_stream_Count=false; //Unable to parse it
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::meta()
-{
- Element_Name("Meta");
-
- //Parsing
- meta_Level=0;
- meta_SCRIPTDATAOBJECT();
-
- if (MetaData_NotTrustable)
- {
- meta_duration=0;
- Clear(Stream_Video, 0, Video_StreamSize);
- Clear(Stream_Video, 0, Video_BitRate);
- Clear(Stream_Video, 0, Video_Bits__Pixel_Frame_);
- Clear(Stream_Audio, 0, Audio_StreamSize);
- Clear(Stream_Audio, 0, Audio_BitRate);
- Clear(Stream_General, 0, General_Duration);
- Clear(Stream_General, 0, General_OverallBitRate);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::meta_SCRIPTDATAOBJECT()
-{
- //Parsing Value
- std::string StringData;
- meta_SCRIPTDATAVALUE(StringData);
- meta_SCRIPTDATAVALUE(StringData);
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::meta_SCRIPTDATAVARIABLE()
-{
- std::string StringData;
- int16u StringLength;
- Element_Begin0();
- Get_B2 (StringLength, "StringLength");
- Get_String(StringLength, StringData, "StringData");
- Element_Name(StringData.c_str());
-
- //Parsing Value
- meta_SCRIPTDATAVALUE(StringData);
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::meta_SCRIPTDATAVALUE(const std::string &StringData)
-{
- std::string StringDataModified(StringData);
- if (!StringDataModified.empty() && StringDataModified[0]==__T('_'))
- StringDataModified.erase(StringDataModified.begin());
-
- //Parsing
- int8u Type;
- Get_B1 (Type, "Type"); Param_Info1C((Type<0x12), Flv_TagType[Type]);
- switch (Type)
- {
- case 0x00 : //DOUBLE --> 64 bits Big endian float
- {
- float64 Value;
- Get_BF8(Value, "Value");
- if (Value==0)
- break;
- std::string ToFill;
- Ztring ValueS;
- stream_t StreamKind=Stream_General;
- if (StringDataModified=="width") {ToFill="Width"; StreamKind=Stream_Video; ValueS.From_Number(Value, 0); video_stream_Count=true;} //1 file with FrameRate tag and video stream but no video present tag
- else if (StringDataModified=="height") {ToFill="Height"; StreamKind=Stream_Video; ValueS.From_Number(Value, 0); video_stream_Count=true;} //1 file with FrameRate tag and video stream but no video present tag
- else if (StringDataModified=="duration") meta_duration=Value*1000;
- else if (StringDataModified=="audiodatarate") {ToFill="BitRate"; StreamKind=Stream_Audio; ValueS.From_Number(Value*1000, 0);}
- else if (StringDataModified=="framerate") {ToFill="FrameRate"; StreamKind=Stream_Video; ValueS.From_Number(Value, 3); video_stream_FrameRate_Detected=true; video_stream_Count=true;} //1 file with FrameRate tag and video stream but no video present tag
- else if (StringDataModified=="videoframerate") {ToFill="FrameRate"; StreamKind=Stream_Video; ValueS.From_Number(Value, 3); video_stream_FrameRate_Detected=true; video_stream_Count=true;} //1 file with FrameRate tag and video stream but no video present tag
- else if (StringDataModified=="filesize") {meta_filesize=(int64u)Value;}
- else if (StringDataModified=="audiosize") {ToFill="StreamSize"; StreamKind=Stream_Audio; ValueS.From_Number(Value, 0); if (Value>File_Size) MetaData_NotTrustable=true;}
- else if (StringDataModified=="videosize") {ToFill="StreamSize"; StreamKind=Stream_Video; ValueS.From_Number(Value, 0); if (Value>File_Size) MetaData_NotTrustable=true; video_stream_Count=true;} //1 file with FrameRate tag and video stream but no video present tag
- else if (StringDataModified=="videodatarate") {ToFill="BitRate"; StreamKind=Stream_Video; ValueS.From_Number(Value*1000, 0); video_stream_Count=true;} //1 file with FrameRate tag and video stream but no video present tag
- else if (StringDataModified=="videocodecid") {; video_stream_Count=true;} //1 file with FrameRate tag and video stream but no video present tag
- else if (StringDataModified=="audiodelay") {ToFill="Delay"; StreamKind=Stream_Audio; if (Value>0) ValueS.From_Number(Value*1000, 0);}
- else if (StringDataModified=="audiosamplerate") {ToFill="SamplingRate"; StreamKind=Stream_Audio; if (Value>0) ValueS.From_Number(Value, 0);}
- else if (StringDataModified=="audiosamplesize") {ToFill="BitDepth"; StreamKind=Stream_Audio; if (Value>0) ValueS.From_Number(Value, 0);}
- else if (StringDataModified=="totalduration") {ToFill="Duration"; StreamKind=Stream_General; ValueS.From_Number(Value*1000, 0);}
- else if (StringDataModified=="totaldatarate") {ToFill="OverallBitRate"; StreamKind=Stream_General; ValueS.From_Number(Value*1000, 0);}
- else if (StringDataModified=="totalframes") {ToFill="FrameCount"; StreamKind=Stream_Video; ValueS.From_Number(Value*1000, 0);}
- else if (StringDataModified=="bytelength") {if (File_Size!=Value) MetaData_NotTrustable=true;}
- else if (!(StringDataModified=="datasize"
- || StringDataModified=="lasttimestamp"
- || StringDataModified=="lastkeyframetimestamp"
- || StringDataModified=="lastkeyframelocation"
- || StringDataModified=="canSeekToEnd"
- || StringDataModified=="keyframes_times"
- || StringDataModified=="keyframes_filepositions"
- || StringDataModified=="aacaot"
- || StringDataModified=="audiochannels"
- || StringDataModified=="audiocodecid"
- || StringDataModified=="avclevel"
- || StringDataModified=="avcprofile"
- || StringDataModified=="moovPosition")) {StreamKind=Stream_General; ToFill=StringData; ValueS.From_Number(Value);}
- #if MEDIAINFO_TRACE
- if (ValueS.empty())
- ValueS.From_Number(Value, 0);
- Element_Info1(ValueS);
- #endif //MEDIAINFO_TRACE
- if (!ToFill.empty())
- {
- Fill(StreamKind, 0, ToFill.c_str(), ValueS, true);
- if (ToFill=="FrameRate")
- Fill(StreamKind, 0, "FrameRate_Mode", "CFR", Unlimited, true, true);
- }
- }
- break;
- case 0x01 : //UI8
- {
- int8u Value;
- Get_B1 (Value, "Value");
- std::string ToFill;
- if (StringDataModified=="haskeyframes") {}
- else if (StringDataModified=="hasKeyframes") {}
- else if (StringDataModified=="hasVideo") {}
- else if (StringDataModified=="stereo") {}
- else if (StringDataModified=="canSeekToEnd") {}
- else if (StringDataModified=="hasAudio") {}
- else if (StringDataModified=="hasmetadata") {}
- else if (StringDataModified=="hasMetadata") {}
- else if (StringDataModified=="hasCuePoints") {}
- else if (StringDataModified=="canseekontime") {}
- else {ToFill=StringData;}
- Element_Info1(Value);
- Fill(Stream_General, 0, ToFill.c_str(), Value?"Yes":"No", Unlimited, true, true);
- }
- break;
- case 0x02 : //SCRIPTDATASTRING
- {
- int16u Value_Size;
- Get_B2 (Value_Size, "Value_Size");
- if (Value_Size)
- {
- Ztring Value;
- Get_UTF8(Value_Size, Value, "Value");
- size_t ToFill=(size_t)-1;
- std::string ToFillS;
- if (StringDataModified=="creator") {ToFill=General_Encoded_Application;}
- else if (StringDataModified=="creationdate") {ToFill=General_Encoded_Date; Value.Date_From_String(Value.To_UTF8().c_str());}
- else if (StringDataModified=="encoder") {ToFill=General_Encoded_Application;}
- else if (StringDataModified=="Encoded_With") {ToFill=General_Encoded_Application;}
- else if (StringDataModified=="Encoded_By") {ToFill=General_Encoded_Application;}
- else if (StringDataModified=="metadatacreator") {ToFill=General_Tagged_Application;}
- else if (StringDataModified=="creation_time") {ToFill=General_Encoded_Date; Value.insert(0, __T("UTC "));}
- else if (StringDataModified=="sourcedata") {}
- else if (StringDataModified=="audiocodecid") {}
- else if (StringDataModified=="videocodecid") {}
- else if (!(StringDataModified=="major_brand"
- || StringDataModified=="minor_version"
- || StringDataModified=="compatible_brands"))
- ToFillS=StringData;
- if (Value.find(__T('\r'))!=std::string::npos)
- Value.resize(Value.find(__T('\r')));
- if (Value.find(__T('\n'))!=std::string::npos)
- Value.resize(Value.find(__T('\n')));
- Element_Info1(Value);
- if (ToFill!=(size_t)-1)
- Fill(Stream_General, 0, ToFill, Value, true);
- else if (!ToFillS.empty())
- Fill(Stream_General, 0, StringData.c_str(), Value, true);
- }
- }
- break;
- case 0x03 : //SCRIPTDATAOBJECT[n]
- case 0x10 : //Typed object - SCRIPTDATAOBJECT[n]
- {
- std::string StringData2;
- int16u StringLength2;
- meta_Level++;
- meta_LevelFinished[meta_Level]=false;
- while (!meta_LevelFinished[meta_Level])
- {
- if (Element_Offset>=Element_Size)
- break;
- Element_Begin0();
- Get_B2 (StringLength2, "StringLength2");
- Get_String(StringLength2, StringData2, "StringData2");
- Element_Name(StringData2.empty()?"EndOfObject":StringData2.c_str());
- meta_SCRIPTDATAVALUE(StringData+'_'+StringData2);
- Element_End0();
- }
- meta_Level--;
- }
- break;
- case 0x04 : //SCRIPTDATASTRING defining the MovieClip path
- {
- int16u Value_Size;
- Get_B2 (Value_Size, "Value_Size");
- if (Value_Size)
- {
- Ztring Value;
- Get_Local(Value_Size, Value, "Value");
- if (Value==__T("unknown")) Value.clear();
- Element_Info1C((!Value.empty()), Value);
- Fill(Stream_General, 0, StringData.c_str(), Value, true);
- }
- }
- break;
- case 0x05 : //NULL
- case 0x06 : //Undefined - NULL
- case 0x0D : //Unsupported - NULL
- break;
- case 0x07 : //UI16
- {
- int16u Value;
- Get_B2 (Value, "Value");
- Element_Info1(Value);
- Fill(Stream_General, 0, StringData.c_str(), Value, true);
- }
- break;
- case 0x08 : //SCRIPTDATAVARIABLE[ECMAArrayLength]
- {
- int32u ECMAArrayLength;
- Get_B4 (ECMAArrayLength, "ECMAArrayLength");
- Element_Info1(Ztring::ToZtring(ECMAArrayLength)+__T(" elements"));
- for (int32u Pos=0; Pos<ECMAArrayLength; Pos++)
- {
- meta_SCRIPTDATAVARIABLE();
- if (meta_LevelFinished[meta_Level])
- Pos=ECMAArrayLength; //Finished
- }
- }
- break;
- case 0x09 :
- Element_Info1("EndOfObject");
- meta_LevelFinished[meta_Level]=true;
- break;
- case 0x0A : //SCRIPTDATAVARIABLE[n]
- case 0x0E : //RecordSet - SCRIPTDATAVARIABLE[n]
- {
- int32u Count;
- Get_B4 (Count, "Count");
- for (int32u Pos=0; Pos<Count; Pos++)
- meta_SCRIPTDATAVALUE(StringData);
- }
- break;
- case 0x0B : //SCRIPTDATADATE
- {
- float64 Value;
- Get_BF8(Value, "Value");
- Ztring ValueS;
- ValueS.Date_From_Seconds_1970((int32u)(Value/1000));
- Param_Info1(ValueS);
- Skip_B2( "Local_Offset_Minutes");
- std::string ToFill;
- if (StringData=="metadatadate") {ToFill="Tagged_Date";}
- else {ToFill=StringData;}
- Element_Info1(ValueS);
- Fill(Stream_General, 0, ToFill.c_str(), ValueS, true);
- }
- break;
- case 0x0C : //SCRIPTDATALONGSTRING
- case 0x0F : //XML - SCRIPTDATALONGSTRING
- {
- int32u Value_Size;
- Get_B4 (Value_Size, "Value_Size");
- if (Value_Size)
- {
- Ztring Value;
- Get_UTF16B(Value_Size, Value, "Value");
- std::string ToFill;
- if (StringData=="creator") {ToFill="Encoded_Application";}
- else if (StringData=="liveXML") {}
- else if (StringData=="metadatacreator") {ToFill="Tagged_Application";}
- else if (StringData=="creationdate") {ToFill="Encoded_Date"; Value.Date_From_String(Value.To_UTF8().c_str());}
- else {ToFill=StringData;}
- Element_Info1(Value);
- if (!ToFill.empty())
- Fill(Stream_General, 0, ToFill.c_str(), Value, true);
- }
- }
- break;
- case 0x11 : //AMF3 data
- {
- int32u TypeCode;
- Get_B4 (TypeCode, "AMF3 type code"); Param_Info1C((TypeCode<0x0D), Flv_Amf3Type[TypeCode]);
- switch (TypeCode)
- {
- case 0x00 : //undefined
- case 0x01 : //null
- case 0x02 : //boolean-false
- case 0x03 : //boolean-true
- break;
- default : //Not implemented or unknown
- Element_Offset=Element_Size;
- }
- }
- break;
- default : //Unknown
- Element_Offset=Element_Size; //Forcing the end of parsing
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Flv::Rm()
-{
- Element_Name("Real Media tags");
-
- //Creating the parser
- File_Rm MI;
- Open_Buffer_Init(&MI);
-
- //Parsing
- Open_Buffer_Continue(&MI);
-
- //Filling
- Finish(&MI);
- Merge(MI, Stream_General, 0, 0);
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_FLV_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Flv.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Flv.h
deleted file mode 100644
index 63421372f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Flv.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Flash files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_FlvH
-#define MediaInfo_File_FlvH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Flv
-//***************************************************************************
-
-class File_Flv : public File__Analyze
-{
-public :
- File_Flv();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
- void Streams_Finish_PerStream(stream_t StreamID);
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void header();
- void video();
- void video_H263();
- void video_ScreenVideo(int8u Version);
- void video_VP6(bool WithAlpha);
- void video_AVC();
- void video_HEVC();
- void audio();
- void audio_MPEG();
- void audio_AAC();
- void meta();
- void meta_SCRIPTDATAOBJECT();
- void meta_SCRIPTDATAVARIABLE();
- void meta_SCRIPTDATAVALUE(const std::string &StringData);
- void Rm();
-
- //Streams
- struct stream
- {
- File__Analyze* Parser;
- size_t PacketCount;
- int32u Delay;
- int32u TimeStamp;
- std::vector<int32u> Durations;
-
- stream()
- {
- Parser=NULL;
- PacketCount=0;
- Delay=(int32u)-1;
- TimeStamp=(int32u)-1;
- }
-
- ~stream()
- {
- delete Parser; //Parser=NULL;
- }
- };
- std::vector<stream> Stream; //Null, Video, Audio
-
- //Count
- bool video_stream_Count;
- bool audio_stream_Count;
-
- //Temp
- bool video_stream_FrameRate_Detected;
- std::vector<int32u> video_stream_FrameRate;
- int32u Time;
- int8u meta_Level;
- std::map<int8u, bool> meta_LevelFinished;
- bool Searching_Duration;
- bool MetaData_NotTrustable;
- int32u PreviousTagSize;
- int32u PreviousTagSize_Add11;
- int64u meta_filesize;
- float64 meta_duration;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf.cpp
deleted file mode 100644
index f1e9dbb99..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf.cpp
+++ /dev/null
@@ -1,1665 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_GXF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Gxf.h"
-#include "MediaInfo/Multiple/File_Gxf_TimeCode.h"
-#if defined(MEDIAINFO_DVDIF_YES)
- #include "MediaInfo/Multiple/File_DvDif.h"
-#endif
-#if defined(MEDIAINFO_RIFF_YES)
- #include "MediaInfo/Multiple/File_Riff.h"
-#endif
-#if defined(MEDIAINFO_GXF_YES)
- #include "MediaInfo/Multiple/File_Umf.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_ChannelGrouping.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/Utils.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Gxf_Tag_Name(int8u Tag)
-{
- switch (Tag)
- {
- case 0x40 : return "Media file name of material";
- case 0x41 : return "First field of material in stream";
- case 0x42 : return "Last field of material in stream";
- case 0x43 : return "Mark in for the stream";
- case 0x44 : return "Mark out for the stream";
- case 0x45 : return "Estimated size of stream in 1024 byte units";
- case 0x46 :
- case 0x47 :
- case 0x48 :
- case 0x49 :
- case 0x4A :
- case 0x4B : return "Reserved";
- case 0x4C : return "Media file name";
- case 0x4D : return "Auxiliary Information";
- case 0x4E : return "Media file system version";
- case 0x4F : return "MPEG auxiliary information";
- case 0x50 : return "Frame rate";
- case 0x51 : return "Lines per frame";
- case 0x52 : return "Fields per frame";
- default : return "Unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Gxf_MediaTypes(int8u Type)
-{
- switch (Type)
- {
- case 3 : return "JPEG"; //525 lines
- case 4 : return "JPEG"; //625 lines
- case 7 : return "SMPTE 12M"; //525 lines
- case 8 : return "SMPTE 12M"; //625 lines
- case 9 : return "PCM"; //24-bit
- case 10 : return "PCM"; //16-bit
- case 11 : return "MPEG-2 Video"; //525 lines
- case 12 : return "MPEG-2 Video"; //625 lines
- case 13 : return "DV"; //25 Mbps, 525 lines
- case 14 : return "DV"; //25 Mbps, 625 lines
- case 15 : return "DV"; //50 Mbps, 525 lines
- case 16 : return "DV"; //50 Mbps, 625 lines
- case 17 : return "AC-3"; //16-bit
- case 18 : return "AES"; //non-PCM
- case 19 : return "Reserved";
- case 20 : return "MPEG-2 Video"; //HD, Main Profile at High Level
- case 21 : return "Ancillary data"; //SMPTE 291M 10-bit type 2 component ancillary data
- case 22 : return "MPEG-1 Video"; //525 lines
- case 23 : return "MPEG-1 Video"; //625 lines
- case 24 : return "SMPTE 12M"; //HD
- case 25 : return "DV"; //DVCPRO HD
- default : return "Unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-stream_t Gxf_MediaTypes_StreamKind(int8u Type)
-{
- switch (Type)
- {
- case 3 : return Stream_Video;
- case 4 : return Stream_Video;
- case 7 : return Stream_Max;
- case 8 : return Stream_Max;
- case 9 : return Stream_Audio;
- case 10 : return Stream_Audio;
- case 11 : return Stream_Video;
- case 12 : return Stream_Video;
- case 13 : return Stream_Video;
- case 14 : return Stream_Video;
- case 15 : return Stream_Video;
- case 16 : return Stream_Video;
- case 17 : return Stream_Audio;
- case 18 : return Stream_Audio;
- case 19 : return Stream_Max;
- case 20 : return Stream_Video;
- case 21 : return Stream_Max;
- case 22 : return Stream_Video;
- case 23 : return Stream_Video;
- case 24 : return Stream_Max;
- case 25 : return Stream_Video;
- default : return Stream_Max;
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Gxf_MediaTypes_Format(int8u Type)
-{
- switch (Type)
- {
- case 3 : return "JPEG"; //525 lines
- case 4 : return "JPEG"; //625 lines
- case 9 : return "PCM"; //24-bit
- case 10 : return "PCM"; //16-bit
- case 11 : return "MPEG Video"; //525 lines
- case 12 : return "MPEG Video"; //625 lines
- case 13 : return "DV"; //25 Mbps, 525 lines
- case 14 : return "DV"; //25 Mbps, 625 lines
- case 15 : return "DV"; //50 Mbps, 525 lines
- case 16 : return "DV"; //50 Mbps, 625 lines
- case 17 : return "AC-3"; //16-bit
- case 18 : return "SMPTE 338M, table 1, data type 28"; //SMPTE 338M, table 1, data type 28
- case 20 : return "MPEG Video"; //HD, Main Profile at High Level
- case 22 : return "MPEG Video"; //525 lines
- case 23 : return "MPEG Video"; //625 lines
- case 25 : return "DV"; //DVCPRO HD
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-double Gxf_FrameRate(int32u Content)
-{
- switch (Content)
- {
- case 1 : return 60.000;
- case 2 : return 59.940;
- case 3 : return 50.000;
- case 4 : return 30.000;
- case 5 : return 29.970;
- case 6 : return 25.000;
- case 7 : return 24.000;
- case 8 : return 23.976;
- default: return 0.000;
- }
-}
-
-//---------------------------------------------------------------------------
-int32u Gxf_LinesPerFrame_Height(int32u Content)
-{
- switch (Content)
- {
- case 1 : return 480;
- case 2 : return 576;
- case 4 : return 1080;
- case 6 : return 720;
- default: return 0;
- }
-}
-
-//---------------------------------------------------------------------------
-int32u Gxf_LinesPerFrame_Width(int32u Content)
-{
- switch (Content)
- {
- case 1 : return 720;
- case 2 : return 720;
- case 4 : return 1920;
- case 6 : return 1080;
- default: return 0;
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Gxf_FieldsPerFrame(int32u Tag)
-{
- switch (Tag)
- {
- case 1 : return "Progressive";
- case 2 : return "Interlaced";
- default: return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Gxf::File_Gxf()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("GXF");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Gxf;
- StreamIDs_Width[0]=2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- Material_Fields_FieldsPerFrame=1; //Progressive by default
- Parsers_Count=0;
- AncillaryData_StreamID=(int8u)-1;
- Material_Fields_First_IsValid=false;
- Material_Fields_Last_IsValid=false;
- Material_File_Size_IsValid=false;
- UMF_File=NULL;
- #if defined(MEDIAINFO_ANCILLARY_YES)
- Ancillary=NULL;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
- SizeToAnalyze=16*1024*1024;
- IsParsingMiddle_MaxOffset=(int64u)-1;
- Audio_Count=0;
- Element_Code=0x00; //Element_Code is used as a test for pre-existing parsing, it must be initialized
-
- #if MEDIAINFO_DEMUX
- Demux_HeaderParsed=false;
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_SEEK
- Flt_FieldPerEntry=(int32u)-1;
- IFrame_IsParsed=false;
- #endif //MEDIAINFO_SEEK
-}
-
-//---------------------------------------------------------------------------
-File_Gxf::~File_Gxf()
-{
- //Temp
- delete Ancillary; //Ancillary=NULL;
- delete UMF_File; //UMF_File=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Gxf::Streams_Finish()
-{
- //Merging audio if Title are same
- for (size_t StreamID=0; StreamID<Streams.size(); StreamID++)
- {
- if (Gxf_MediaTypes_StreamKind(Streams[StreamID].MediaType)==Stream_Video)
- {
- Ztring Title=Streams[StreamID].MediaName;
- size_t Title_Extension_Offset=Title.find(__T(".M0"));
- if (Title_Extension_Offset==std::string::npos || Title_Extension_Offset!=Title.size()-3)
- Title_Extension_Offset=Title.find(__T(".H0"));
- if (Title_Extension_Offset!=std::string::npos && Title_Extension_Offset==Title.size()-3)
- {
- Title.resize(Title.size()-3);
- Streams[StreamID].MediaName=Title;
- }
- }
- if (Gxf_MediaTypes_StreamKind(Streams[StreamID].MediaType)==Stream_Audio && Config->File_Audio_MergeMonoStreams_Get())
- {
- Ztring Title=Streams[StreamID].MediaName;
- size_t Title_Extension_Offset=Title.find(__T(".A0"));
- if (Title_Extension_Offset!=std::string::npos && Title_Extension_Offset==Title.size()-3)
- {
- Title.resize(Title.size()-3);
- for (size_t StreamID2=StreamID+1; StreamID2<Streams.size(); StreamID2++)
- {
- if (Streams[StreamID2].MediaName==Title+__T(".A")+Ztring::ToZtring(StreamID2-StreamID))
- {
- Streams[StreamID].MediaName=Title;
- if (Streams[StreamID].Parsers.size()==1 && Streams[StreamID2].Parsers.size()==1)
- {
- int32u Channels=Streams[StreamID].Parsers[0]->Retrieve(Stream_Audio, 0, Audio_Channel_s_).To_int32u()+Streams[StreamID2].Parsers[0]->Retrieve(Stream_Audio, 0, Audio_Channel_s_).To_int32u();
- Streams[StreamID].Parsers[0]->Fill(Stream_Audio, 0, Audio_Channel_s_, Channels, 10, true);
- int32u BitRate=Streams[StreamID].Parsers[0]->Retrieve(Stream_Audio, 0, Audio_BitRate).To_int32u()+Streams[StreamID2].Parsers[0]->Retrieve(Stream_Audio, 0, Audio_BitRate).To_int32u();
- Streams[StreamID].Parsers[0]->Fill(Stream_Audio, 0, Audio_BitRate, BitRate, 10, true);
- }
- Streams[StreamID2].MediaType=(int8u)-1;
- }
- }
- }
- }
- }
-
- //For each Streams
- for (size_t StreamID=0; StreamID<Streams.size(); StreamID++)
- Streams_Finish_PerStream(StreamID, Streams[StreamID]);
-
- //Global
- if (Material_Fields_First_IsValid && Material_Fields_Last_IsValid && Material_Fields_Last-Material_Fields_First)
- {
- int64u FrameCount=(Material_Fields_Last+1-Material_Fields_First)/Material_Fields_FieldsPerFrame;
- Fill(Stream_Video, 0, Video_FrameCount, FrameCount);
- if (Gxf_FrameRate(Streams[0x00].FrameRate_Code))
- Fill(Stream_Video, 0, Video_Duration, ((float64)FrameCount)/Gxf_FrameRate(Streams[0x00].FrameRate_Code)*1000, 0); //In milliseconds
-
- //We trust more the MPEG Video bitrate thant the rest
- //TODO: Chech why there is incohenrency (mainly about Material File size info in the sample)
- if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video"))
- Fill(Stream_Video, 0, Video_BitRate, Retrieve(Stream_Video, 0, Video_BitRate_Nominal));
- }
- if (Material_File_Size_IsValid)
- {
- //Fill(Stream_General, 0, General_OverallBitRate, ((int64u)Material_File_Size)*1024*8/???);
- }
-
- //Time code tracks
- for (std::map<int8u, tc>::iterator TimeCode=TimeCodes.begin(); TimeCode!=TimeCodes.end(); ++TimeCode)
- {
- int64u TimeCode_FirstFrame_ms=((File_Gxf_TimeCode*)Streams[TimeCode->first].Parsers[0])->TimeCode_FirstFrame_ms;
- string TimeCode_FirstFrame=((File_Gxf_TimeCode*)Streams[TimeCode->first].Parsers[0])->TimeCode_FirstFrame;
- bool TimeCode_FirstFrame_Striped=false;
- if (TimeCode_FirstFrame_ms==(int64u)-1)
- {
- TimeCode_FirstFrame_ms=TimeCode->second.Milliseconds;
- TimeCode_FirstFrame=TimeCode->second.String;
- TimeCode_FirstFrame_Striped=true;
- }
- if (TimeCode_FirstFrame_ms!=(int64u)-1)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_CodecID, Streams[TimeCode->first].MediaType);
- Fill(Stream_Other, StreamPos_Last, Other_ID, TimeCode->first);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_Format, "SMPTE TC");
- //Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Time code track");
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_FirstFrame, TimeCode_FirstFrame.c_str());
- if (TimeCode_FirstFrame_Striped)
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_Settings, "Striped");
- if (TimeCode->first<Streams.size())
- Fill(Stream_Other, StreamPos_Last, Other_Title, Streams[TimeCode->first].MediaName);
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Gxf::Streams_Finish_PerStream(size_t StreamID, stream &Temp)
-{
- if (Temp.MediaType==(int8u)-1)
- return;
-
- //By the parser
- if (Temp.Parsers.size()==1 && Temp.Parsers[0]->Status[IsAccepted])
- {
- StreamKind_Last=Stream_Max;
- StreamPos_Last=(size_t)-1;
- if (Config->ParseSpeed<=1.0)
- {
- Fill(Temp.Parsers[0]);
- Temp.Parsers[0]->Open_Buffer_Unsynch();
- }
- Finish(Temp.Parsers[0]);
-
- //Video
- bool IsTimeCode=false;
- for (std::map<int8u, tc>::iterator TimeCode=TimeCodes.begin(); TimeCode!=TimeCodes.end(); ++TimeCode)
- if (StreamID==TimeCode->first)
- IsTimeCode=true;
- if (!IsTimeCode && Temp.DisplayInfo)
- {
- if (Temp.Parsers[0]->Count_Get(Stream_Video))
- {
- Stream_Prepare(Stream_Video);
-
- if (TimeCodes.empty())
- {
- Fill(Stream_Video, StreamPos_Last, Video_Delay, ((float64)(Material_Fields_First/Material_Fields_FieldsPerFrame))/Gxf_FrameRate(Streams[0x00].FrameRate_Code)*1000, 0);
- Fill(Stream_Video, StreamPos_Last, Video_Delay_Source, "Container");
- }
- else
- for (std::map<int8u, tc>::iterator TimeCode=TimeCodes.begin(); TimeCode!=TimeCodes.end(); ++TimeCode)
- {
- int64u TimeCode_FirstFrame_ms=((File_Gxf_TimeCode*)Streams[TimeCode->first].Parsers[0])->TimeCode_FirstFrame_ms;
- string TimeCode_FirstFrame=((File_Gxf_TimeCode*)Streams[TimeCode->first].Parsers[0])->TimeCode_FirstFrame;
- if (TimeCode_FirstFrame_ms==(int64u)-1)
- {
- TimeCode_FirstFrame_ms=TimeCode->second.Milliseconds;
- TimeCode_FirstFrame=TimeCode->second.String;
- }
- if (TimeCode_FirstFrame_ms!=(int64u)-1)
- {
- Fill(Stream_Video, StreamPos_Last, Video_Delay, TimeCode_FirstFrame_ms, 0);
- if (TimeCode_FirstFrame.size()==11)
- Fill(Stream_Video, StreamPos_Last, Video_Delay_DropFrame, TimeCode_FirstFrame[8]==';'?"Yes":"No");
- Fill(Stream_Video, StreamPos_Last, Video_Delay_Source, "Container");
-
- //Fill(Stream_Video, StreamPos_Last, Video_TimeCode_FirstFrame, TimeCode_FirstFrame.c_str());
- //Fill(Stream_Video, StreamPos_Last, Video_TimeCode_Source, "Time code track");
- }
- }
-
- Merge(*Temp.Parsers[0], Stream_Video, 0, StreamPos_Last);
- Fill(Stream_Video, StreamPos_Last, Video_CodecID, Temp.MediaType);
-
- Fill(Stream_Video, StreamPos_Last, Video_ID, StreamID, 10, true);
- Fill(Stream_Video, StreamPos_Last, "Title", Temp.MediaName);
-
- Ztring LawRating=Temp.Parsers[0]->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Temp.Parsers[0]->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
-
- //Special cases
- if (Temp.Parsers[0]->Count_Get(Stream_Text))
- {
- //Video and Text are together
- size_t Parser_Text_Count=Temp.Parsers[0]->Count_Get(Stream_Text);
- for (size_t Parser_Text_Pos=0; Parser_Text_Pos<Parser_Text_Count; Parser_Text_Pos++)
- {
- Stream_Prepare(Stream_Text);
- Merge(*Temp.Parsers[0], Stream_Text, Parser_Text_Pos, StreamPos_Last);
- Ztring ID=Retrieve(Stream_Text, StreamPos_Last, Text_ID);
- Fill(Stream_Text, StreamPos_Last, Text_ID, Ztring::ToZtring(AncillaryData_StreamID)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_ID_String, Ztring::ToZtring(AncillaryData_StreamID)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay), true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay_Source, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay_Source), true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay_Original, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay_Original), true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay_Original_Source, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay_Original_Source), true);
- }
-
- StreamKind_Last=Stream_Video;
- StreamPos_Last=Count_Get(Stream_Video)-1;
- }
- }
-
- //Audio
- for (size_t Pos=0; Pos<Temp.Parsers[0]->Count_Get(Stream_Audio); Pos++)
- {
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_CodecID, Temp.MediaType);
-
- if (TimeCodes.empty())
- {
- Fill(Stream_Audio, StreamPos_Last, Audio_Delay, ((float64)(Material_Fields_First/Material_Fields_FieldsPerFrame))/Gxf_FrameRate(Streams[0x00].FrameRate_Code)*1000, 0);
- Fill(Stream_Audio, StreamPos_Last, Audio_Delay_Source, "Container");
- }
- else
- for (std::map<int8u, tc>::iterator TimeCode=TimeCodes.begin(); TimeCode!=TimeCodes.end(); ++TimeCode)
- {
- int64u TimeCode_FirstFrame_ms=((File_Gxf_TimeCode*)Streams[TimeCode->first].Parsers[0])->TimeCode_FirstFrame_ms;
- string TimeCode_FirstFrame=((File_Gxf_TimeCode*)Streams[TimeCode->first].Parsers[0])->TimeCode_FirstFrame;
- if (TimeCode_FirstFrame_ms==(int64u)-1)
- {
- TimeCode_FirstFrame_ms=TimeCode->second.Milliseconds;
- TimeCode_FirstFrame=TimeCode->second.String;
- }
- if (TimeCode_FirstFrame_ms!=(int64u)-1)
- {
- Fill(Stream_Audio, StreamPos_Last, Audio_Delay, TimeCode_FirstFrame_ms, 0);
- if (TimeCode_FirstFrame.size()==11)
- Fill(Stream_Audio, StreamPos_Last, Audio_Delay_DropFrame, TimeCode_FirstFrame[8]==';'?"Yes":"No");
- Fill(Stream_Audio, StreamPos_Last, Audio_Delay_Source, "Container");
-
- //Fill(Stream_Audio, StreamPos_Last, Audio_TimeCode_FirstFrame, TimeCode_FirstFrame.c_str());
- //Fill(Stream_Audio, StreamPos_Last, Audio_TimeCode_Source, "Time code track");
- }
- }
-
- Merge(*Temp.Parsers[0], Stream_Audio, Pos, StreamPos_Last, false);
-
- Ztring ID;
- if (Temp.IsChannelGrouping)
- ID=Ztring::ToZtring(StreamID-1)+__T(" / "); //First half of the channel grouping
- ID+=Ztring::ToZtring(StreamID); //Second half of the channel grouping or standalone
- Ztring ID_String=ID;
- if (!Retrieve(Stream_Audio, StreamPos_Last, Audio_ID).empty())
- {
- ID+=__T('-')+Retrieve(Stream_Audio, StreamPos_Last, Audio_ID);
- ID_String+=__T('-')+Retrieve(Stream_Audio, StreamPos_Last, Audio_ID_String);
- }
- Fill(Stream_Audio, StreamPos_Last, Audio_ID, ID, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_ID_String, ID_String, true);
- if (Temp.IsChannelGrouping)
- Fill(Stream_Audio, StreamPos_Last, "Title", Streams[StreamID-1].MediaName); //First half of the channel grouping
- Fill(StreamKind_Last, StreamPos_Last, "Title", Temp.MediaName); //Second half of the channel grouping or standalone
-
- for (std::map<std::string, Ztring>::iterator Info=Temp.Infos.begin(); Info!=Temp.Infos.end(); ++Info)
- if (Info->first=="BitRate" && Temp.Parsers[0]->Count_Get(Stream_Audio)>1)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate_Encoded, Pos?Ztring(__T("0")):Info->second); // In case of more than 1 audio sub-stream Encoded bit rate is the bit rate of all streams + overhead
- else if (Retrieve(Stream_Audio, StreamPos_Last, Info->first.c_str()).empty())
- Fill(Stream_Audio, StreamPos_Last, Info->first.c_str(), Info->second);
- }
-
- //Text
- if (Temp.Parsers[0]->Count_Get(Stream_Text))
- {
- size_t Parser_Text_Count=Temp.Parsers[0]->Count_Get(Stream_Text);
- for (size_t Parser_Text_Pos=0; Parser_Text_Pos<Parser_Text_Count; Parser_Text_Pos++)
- {
- Stream_Prepare(Stream_Text);
- Merge(*Temp.Parsers[0], Stream_Text, Parser_Text_Pos, StreamPos_Last);
- Ztring ID=Retrieve(Stream_Text, StreamPos_Last, Text_ID);
- Fill(Stream_Text, StreamPos_Last, Text_ID, Ztring::ToZtring(AncillaryData_StreamID)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_ID_String, Ztring::ToZtring(AncillaryData_StreamID)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay), true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay_Source, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay_Source), true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay_Original, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay_Original), true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay_Original_Source, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay_Original_Source), true);
- Fill(Stream_Text, StreamPos_Last, "Title", Temp.MediaName);
- }
-
- Ztring LawRating=Temp.Parsers[0]->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Temp.Parsers[0]->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
-
- StreamKind_Last=Stream_Max;
- StreamPos_Last=(size_t)-1;
- }
-
- //Other
- if (Temp.Parsers[0]->Count_Get(Stream_Other))
- {
- size_t Parser_Other_Count=Temp.Parsers[0]->Count_Get(Stream_Other);
- for (size_t Parser_Other_Pos=0; Parser_Other_Pos<Parser_Other_Count; Parser_Other_Pos++)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_CodecID, Temp.MediaType);
- Merge(*Temp.Parsers[0], Stream_Other, Parser_Other_Pos, StreamPos_Last);
- Ztring ID=Retrieve(Stream_Other, StreamPos_Last, Other_ID);
- Fill(Stream_Other, StreamPos_Last, Other_ID, Ztring::ToZtring(AncillaryData_StreamID)+__T("-")+ID, true);
- Fill(Stream_Other, StreamPos_Last, Other_ID_String, Ztring::ToZtring(AncillaryData_StreamID)+__T("-")+ID, true);
- /*
- Fill(Stream_Other, StreamPos_Last, Other_Delay, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay), true);
- Fill(Stream_Other, StreamPos_Last, Other_Delay_Source, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay_Source), true);
- Fill(Stream_Other, StreamPos_Last, Other_Delay_Original, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay_Original), true);
- Fill(Stream_Other, StreamPos_Last, Other_Delay_Original_Source, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Delay_Original_Source), true);
- */
- Fill(Stream_Other, StreamPos_Last, "Title", Temp.MediaName);
- }
-
- StreamKind_Last=Stream_Max;
- StreamPos_Last=(size_t)-1;
- }
- }
- }
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Gxf::Synchronize()
-{
- //Synchronizing
- while (Buffer_Offset+16<=Buffer_Size)
- {
- while (Buffer_Offset+16<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x00
- || Buffer[Buffer_Offset+3]!=0x00
- || Buffer[Buffer_Offset+4]!=0x01
- || Buffer[Buffer_Offset+14]!=0xE1
- || Buffer[Buffer_Offset+15]!=0xE2))
- {
- Buffer_Offset+=4;
- while (Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Buffer_Offset+=4;
- for (int8u Pos=0; Pos<3; Pos++)
- if (Buffer_Offset>=Buffer_Size || Buffer[Buffer_Offset-1]==0x00)
- Buffer_Offset--;
- }
-
- if (Buffer_Offset+16<=Buffer_Size) //Testing if size is coherant
- {
- //Retrieving some info
- int32u Size=BigEndian2int32u(Buffer+Buffer_Offset+6);
-
- //Testing
- if (Buffer_Offset+Size+16>Buffer_Size)
- return false; //Need more data
- if (Buffer[Buffer_Offset+Size ]!=0x00
- || Buffer[Buffer_Offset+Size+1]!=0x00
- || Buffer[Buffer_Offset+Size+2]!=0x00
- || Buffer[Buffer_Offset+Size+3]!=0x00
- || Buffer[Buffer_Offset+Size+4]!=0x01
- || Buffer[Buffer_Offset+Size+14]!=0xE1
- || Buffer[Buffer_Offset+Size+15]!=0xE2)
- Buffer_Offset++;
- else
- break;
- }
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+16>Buffer_Size)
- {
- return false;
- }
-
- if (!Status[IsAccepted])
- {
- Accept("GXF");
- Fill(Stream_General, 0, General_Format, "GXF");
- Streams.resize(0x40);
- }
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Gxf::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+16>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (CC5(Buffer+Buffer_Offset )!=0x0000000001
- || CC2(Buffer+Buffer_Offset+14)!=0xE1E2)
- Synched=false;
-
- //Test if the next synchro is available
- int32u PacketLength=BigEndian2int32u(Buffer+Buffer_Offset+6);
- if (File_Offset+Buffer_Offset+PacketLength+16<=File_Size)
- {
- if (Buffer_Offset+PacketLength+16>Buffer_Size)
- return false;
- if (CC5(Buffer+Buffer_Offset+PacketLength )!=0x0000000001
- || CC2(Buffer+Buffer_Offset+PacketLength+14)!=0xE1E2)
- Synched=false;
- }
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Gxf::Read_Buffer_Unsynched()
-{
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- for (size_t Parser_Pos=0; Parser_Pos<Streams[Pos].Parsers.size(); Parser_Pos++)
- Streams[Pos].Parsers[Parser_Pos]->Open_Buffer_Unsynch();
-
- #if MEDIAINFO_SEEK
- IFrame_IsParsed=false;
- #endif //MEDIAINFO_SEEK
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Gxf::Read_Buffer_Seek (size_t Method, int64u Value, int64u)
-{
- //Parsing
- switch (Method)
- {
- case 0 : Open_Buffer_Unsynch(); GoTo(Value); return 1;
- case 1 : Open_Buffer_Unsynch(); GoTo(File_Size*Value/10000); return 1;
- case 2 : //Timestamp
- {
- //We transform TimeStamp to a frame number
- if (Streams.empty() || Gxf_FrameRate(Streams[0x00].FrameRate_Code)==0)
- return (size_t)-1; //Not supported
-
- int64u Delay=0;
- if (TimeCodes.empty())
- {
- if (Material_Fields_First_IsValid)
- Delay=float64_int64s(((float64)(Material_Fields_First/Material_Fields_FieldsPerFrame))/Gxf_FrameRate(Streams[0x00].FrameRate_Code)*1000000000);
- else
- Delay=0;
- }
- else
- {
- for (std::map<int8u, tc>::iterator TimeCode=TimeCodes.begin(); TimeCode!=TimeCodes.end(); ++TimeCode)
- {
- int64u TimeCode_First=((File_Gxf_TimeCode*)Streams[TimeCode->first].Parsers[0])->TimeCode_FirstFrame_ms;
- if (TimeCode_First==(int64u)-1)
- TimeCode_First=TimeCode->second.Milliseconds;
- if (TimeCode_First==(int64u)-1)
- Delay=0;
- else
- {
- Delay=TimeCode_First*1000000;
- break;
- }
- }
- }
-
- if (Value<Delay)
- Value=0;
- else
- Value=float64_int64s(((float64)(Value-Delay))/1000000000*Gxf_FrameRate(Streams[0x00].FrameRate_Code));
- }
- //No break;
- case 3 : //FrameNumber
- {
- if (Seeks.empty())
- return (size_t)-1; //Not supported
-
- //Search previous I-Frame
- if (UMF_File && ((File_Umf*)UMF_File)->GopSize!=(int64u)-1)
- {
- Value/=((File_Umf*)UMF_File)->GopSize;
- Value*=((File_Umf*)UMF_File)->GopSize;
- }
- Value*=Material_Fields_FieldsPerFrame;
-
- for (size_t Pos=0; Pos<Seeks.size(); Pos++)
- {
- if (Material_Fields_First+Value<=Seeks[Pos].FrameNumber)
- {
- if (Material_Fields_First+Value<Seeks[Pos].FrameNumber && Pos)
- Pos--;
- Open_Buffer_Unsynch();
- GoTo(((int64u)Seeks[Pos].StreamOffset)*1024);
-
- return 1;
- }
- }
-
- return 2; //Invalid value
- }
- default : return (size_t)-1; //Not supported
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-void File_Gxf::Read_Buffer_AfterParsing()
-{
- if (File_GoTo==(int64u)-1 && File_Offset+Buffer_Offset>=IsParsingMiddle_MaxOffset)
- {
- Fill();
- Open_Buffer_Unsynch();
- Finish();
- return;
- }
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Gxf::Header_Begin()
-{
- #if MEDIAINFO_DEMUX
- //Handling of multiple frames in one block
- if (Element_Code==0xBF && Config->Demux_Unpacketize_Get() && Streams[TrackNumber].Demux_EventWasSent) //media block
- {
- Open_Buffer_Continue(Streams[TrackNumber].Parsers[0], Buffer+Buffer_Offset, 0);
- if (Config->Demux_EventWasSent)
- return false;
- Streams[TrackNumber].Demux_EventWasSent=false;
- }
- #endif //MEDIAINFO_DEMUX
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Gxf::Header_Parse()
-{
- //Parsing
- int32u PacketLength;
- int8u PacketType;
- Skip_B5( "Packet leader");
- Get_B1 (PacketType, "Packet type");
- Get_B4 (PacketLength, "Packet length");
- Skip_B4( "Reserved");
- Skip_B2( "Packet trailer");
-
- //Filling
- Header_Fill_Size(PacketLength);
- Header_Fill_Code(PacketType);
-
- #if MEDIAINFO_DEMUX
- if (!Demux_HeaderParsed)
- {
- if (PacketType==0xBF) //media
- {
- if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet())
- Config->Demux_EventWasSent=true; //First set is to indicate the user that header is parsed
- Demux_HeaderParsed=true;
- }
- }
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_Gxf::Data_Parse()
-{
- //Counting
- Frame_Count++;
-
- switch (Element_Code)
- {
- case 0x00 : Finish("GXF"); break;
- case 0xBC : map(); break;
- case 0xBF : media(); break;
- case 0xFB : end_of_stream(); break;
- case 0xFC : field_locator_table(); break;
- case 0xFD : UMF_file(); break;
- default: ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Gxf::map()
-{
- Element_Name("map");
-
- //Parsing
- int8u Version;
- Element_Begin1("Preamble");
- BS_Begin();
- Mark_1();
- Mark_1();
- Mark_1();
- Get_S1(5, Version, "Version");
- BS_End();
- Skip_B1( "Reserved");
- Element_End0();
-
- Element_Begin1("Material Data");
- int16u SectionLength;
- Get_B2 (SectionLength, "Section Length");
- if (Element_Offset+SectionLength>=Element_Size)
- SectionLength=(int16u)(Element_Size-Element_Offset);
- int64u Material_Data_End=Element_Offset+SectionLength;
- while (Element_Offset<Material_Data_End)
- {
- Element_Begin1("Tag");
- int8u Tag, DataLength;
- Get_B1(Tag, "Tag");
- Get_B1(DataLength, "Data Length");
- Element_Name(Gxf_Tag_Name(Tag));
- switch (Tag)
- {
- case 0x40 : //Media file name of material
- {
- Ztring MediaFileName;
- Get_Local(DataLength, MediaFileName, "Content");
- Fill(Stream_General, 0, General_Title, MediaFileName, true);
- }
- break;
- case 0x41 : //First field of material in stream
- if (DataLength==4)
- {
- if (Material_Fields_First_IsValid)
- Skip_B4( "Content");
- else
- {
- Get_B4 (Material_Fields_First, "Content");
- Material_Fields_First_IsValid=true;
- }
- }
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x42 : //Last field of material in stream
- if (DataLength==4)
- {
- if (Material_Fields_Last_IsValid)
- Skip_B4( "Content");
- else
- {
- Get_B4 (Material_Fields_Last, "Content");
- Material_Fields_Last_IsValid=true;
- }
- }
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x43 : //Mark in for the stream
- if (DataLength==4)
- Skip_B4( "Content");
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x44 : //Mark out for the stream
- if (DataLength==4)
- Skip_B4( "Content");
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x45 : //Estimated size of stream in 1024 byte units
- if (DataLength==4)
- {
- Get_B4 (Material_File_Size , "Content");
- Material_File_Size_IsValid=true;
- }
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x46 : //Reserved
- if (DataLength==4)
- Skip_B4( "Content");
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x47 : //Reserved
- if (DataLength==8)
- Skip_B8( "Content");
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x48 : //Reserved
- Skip_String(DataLength, "Content");
- break;
- case 0x49 : //Reserved
- Skip_String(DataLength, "Content");
- break;
- case 0x4A : //Reserved
- Skip_String(DataLength, "Content");
- break;
- case 0x4B : //Reserved
- Skip_String(DataLength, "Content");
- break;
- default : Skip_XX(DataLength, "Unknown");
- }
- Element_End0();
- }
- Element_End0();
-
- Element_Begin1("Track Description");
- int32u Stream_Video_FrameRate_Code=(int32u)-1, Stream_Video_FieldsPerFrame_Code=(int32u)-1;
- Get_B2 (SectionLength, "Section Length");
- if (Element_Offset+SectionLength>=Element_Size)
- SectionLength=(int16u)(Element_Size-Element_Offset);
- int64u Track_Data_End=Element_Offset+SectionLength;
- while (Element_Offset<Track_Data_End)
- {
- Element_Begin1("Track");
- int16u TrackLength;
- int8u MediaType, TrackID;
- Get_B1 (MediaType, "Media type"); Param_Info1(Gxf_MediaTypes(MediaType&0x7F));
- Get_B1 (TrackID, "Track ID");
- Get_B2 (TrackLength, "Track Length");
- if (Element_Offset+TrackLength>=Track_Data_End)
- TrackLength=(int16u)(Track_Data_End-Element_Offset);
- int64u Track_End=Element_Offset+TrackLength;
- Element_Info1(TrackID&0x3F);
- Element_Info1(Gxf_MediaTypes(MediaType&0x7F));
-
- FILLING_BEGIN();
- MediaType&=0x7F; //Remove the last bit
- TrackID&=0x3F; //Remove the 2 last bits
- Streams[TrackID].MediaType=MediaType;
- Streams[TrackID].TrackID=TrackID;
- if (Streams[TrackID].Parsers.empty())
- {
- Streams[TrackID].MediaType=MediaType;
- Streams[TrackID].TrackID=TrackID;
-
- //Parsers
- #if MEDIAINFO_DEMUX
- Element_Code=TrackID;
- #endif //MEDIAINFO_DEMUX
- switch (MediaType)
- {
- case 3 :
- case 4 : //JPEG
- {
- File__Analyze* Parser=new File__Analyze;
- Open_Buffer_Init(Parser);
- Parser->Accept();
- Parser->Fill();
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "JPEG");
- Streams[TrackID].Parsers.push_back(Parser);
- }
- break;
- case 7 :
- case 8 :
- case 24 : //TimeCode
- {
- File__Analyze* Parser=new File_Gxf_TimeCode;
- Open_Buffer_Init(Parser);
- Streams[TrackID].Parsers.push_back(Parser);
-
- Parsers_Count++;
- Streams[TrackID].Searching_Payload=true;
- TimeCodes[TrackID].Milliseconds=(int64u)-1;
- }
- break;
- case 9 :
- case 10 :
- {
- File__Analyze* Parser=new File__Analyze;
- Open_Buffer_Init(Parser);
- Parser->Accept();
- Parser->Fill();
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "PCM");
- Parser->Fill(Stream_Audio, 0, Audio_Format_Settings_Endianness, "Little");
- Streams[TrackID].Parsers.push_back(Parser);
-
- Audio_Count++;
- }
- break;
- case 11 :
- case 12 :
- case 20 :
- case 22 :
- case 23 : //MPEG Video
- {
- File__Analyze* Parser=new File_Mpegv();
- ((File_Mpegv*)Parser)->FrameIsAlwaysComplete=true;
- ((File_Mpegv*)Parser)->Ancillary=&Ancillary;
- Open_Buffer_Init(Parser);
- Streams[TrackID].Parsers.push_back(Parser);
-
- Parsers_Count++;
- Streams[TrackID].Searching_Payload=true;
- }
- break;
- case 13 :
- case 14 :
- case 15 :
- case 16 :
- case 25 : // was found for DVCPro HD in some files (not in SMPTE ST 360-2009, maybe it is present in a later version)
- //DV
- {
- File__Analyze* Parser=new File_DvDif();
- Open_Buffer_Init(Parser);
- Streams[TrackID].Parsers.push_back(Parser);
-
- Parsers_Count++;
- Streams[TrackID].Searching_Payload=true;
- }
- break;
- case 17 : //AC-3 in AES3 (half)
- case 18 : //Dolby E in AES3 (half)
- {
- File__Analyze* Parser=ChooseParser_ChannelGrouping(TrackID);
- if (Parser)
- {
- Open_Buffer_Init(Parser);
- Streams[TrackID].Parsers.push_back(Parser);
-
- Parsers_Count++;
- Audio_Count++;
- Streams[TrackID].Searching_Payload=true;
- }
- }
- break;
- case 21 : //Ancillary Metadata
- {
- File__Analyze* Parser=new File_Riff();
- ((File_Riff*)Parser)->Ancillary=&Ancillary;
- Open_Buffer_Init(Parser);
- Streams[TrackID].Parsers.push_back(Parser);
-
- Parsers_Count++;
- Streams[TrackID].Searching_Payload=true;
-
- Ancillary=new File_Ancillary;
- Ancillary->WithTenBit=true;
- Ancillary->WithChecksum=true;
- Open_Buffer_Init(Ancillary);
- AncillaryData_StreamID=TrackID;
- if (SizeToAnalyze<8*16*1024*1024)
- SizeToAnalyze*=8; //10x more, to be sure to find captions
- }
- break;
- default : ;
- }
-
- if (Gxf_MediaTypes_StreamKind(MediaType)==Stream_Audio)
- {
- //Resolution
- switch (MediaType)
- {
- case 9 :
- case 18 : //24-bit
- Streams[TrackID].Infos["BitDepth"].From_Number(24);
- break;
- case 10 :
- case 17 : //16-bit
- Streams[TrackID].Infos["BitDepth"].From_Number(16);
- break;
- default : ;
- }
-
- //Channels
- switch (MediaType)
- {
- case 9 :
- case 10 : //Mono
- Streams[TrackID].Infos["Channel(s)"].From_Number(1);
- break;
- case 18 : //Stereo
- Streams[TrackID].Infos["Channel(s)"].From_Number(2);
- break;
- default : ;
- }
-
- //Sampling rate
- switch (MediaType)
- {
- case 9 :
- case 10 :
- case 17 :
- case 18 : //48000
- Streams[TrackID].Infos["SamplingRate"].From_Number(48000);
- break;
- default : ;
- }
-
- //Bit rate
- switch (MediaType)
- {
- case 9 : //Mono, 48 KHz, 24-bit (or padded up to 24-bit)
- Streams[TrackID].Infos["BitRate"].From_Number(1*48000*24);
- break;
- case 10 : //Mono, 48 KHz, 16-bit
- Streams[TrackID].Infos["BitRate"].From_Number(1*48000*16);
- break;
- case 18 : //Stereo, 48 KHz, 24-bit (or padded up to 24-bit)
- Streams[TrackID].Infos["BitRate"].From_Number(2*48000*24);
- break;
- default : ;
- }
- }
- }
- FILLING_END();
-
- int8u Hours=(int8u)-1, Minutes=(int8u)-1, Seconds=(int8u)-1, Fields=(int8u)-1;
- bool Invalid=true, DropFrame=true;
- bool TimeCode_Parsed=false;
-
- while (Element_Offset<Track_End)
- {
- Element_Begin1("Tag");
- int8u Tag, DataLength;
- Get_B1(Tag, "Tag");
- Get_B1(DataLength, "Data Length");
- Element_Name(Gxf_Tag_Name(Tag));
- switch (Tag)
- {
- case 0x4C : //Media name
- {
- Get_Local(DataLength, Streams[TrackID].MediaName, "Content");
- }
- break;
- case 0x4D : //Auxiliary Information
- if (DataLength==8)
- {
- if (MediaType==21)
- {
- //Ancillary
- Skip_B1( "Reserved");
- Skip_B1( "Reserved");
- Skip_B1( "Ancillary data presentation format");
- Skip_B1( "Number of ancillary data fields per ancillary data media packet");
- Skip_B2( "Byte size of each ancillary data field");
- Skip_B2( "Byte size of the ancillary data media packet in 256 byte units");
- }
- else if (MediaType==7 || MediaType==8 || MediaType==24)
- {
- //TimeCode
- Get_B1 (Fields, "Fields");
- Get_B1 (Seconds, "Second");
- Get_B1 (Minutes, "Minute");
- BS_Begin();
- Get_SB ( Invalid, "Invalid");
- Skip_SB( "Color frame");
- Get_SB ( DropFrame, "Drop frame");
- Get_S1 (5, Hours, "Hour");
- BS_End();
- Skip_B1( "User bits");
- Skip_B1( "User bits");
- Skip_B1( "User bits");
- Skip_B1( "User bits");
- if (!Invalid)
- TimeCode_Parsed=true;
- }
- else
- Skip_B8( "Content");
- }
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x4E : //Media file system version
- if (DataLength==4)
- Skip_B4( "Content");
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x4F : //MPEG auxiliary information
- Skip_String(DataLength, "Content");
- break;
- case 0x50 : //Frame rate
- if (DataLength==4)
- {
- Get_B4 (Streams[TrackID].FrameRate_Code, "Content"); Param_Info1(Gxf_FrameRate(Streams[TrackID].FrameRate_Code)); Element_Info1(Gxf_FrameRate(Streams[TrackID].FrameRate_Code));
- for (std::map<int8u, tc>::iterator TimeCode=TimeCodes.begin(); TimeCode!=TimeCodes.end(); ++TimeCode)
- if (TrackID==TimeCode->first)
- for (size_t Pos=0; Pos<Streams[TrackID].Parsers.size(); Pos++)
- ((File_Gxf_TimeCode*)Streams[TrackID].Parsers[Pos])->FrameRate_Code=Streams[0x00].FrameRate_Code;
- if (Gxf_MediaTypes_StreamKind(MediaType)==Stream_Video)
- Stream_Video_FrameRate_Code=Streams[TrackID].FrameRate_Code;
- }
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x51 : //Lines per frame
- if (DataLength==4)
- {
- Get_B4 (Streams[TrackID].LinesPerFrame_Code, "Content"); Param_Info1(Gxf_LinesPerFrame_Height(Streams[TrackID].LinesPerFrame_Code)); Element_Info1(Gxf_LinesPerFrame_Height(Streams[TrackID].LinesPerFrame_Code));
- }
- else
- Skip_XX(DataLength, "Unknown");
- break;
- case 0x52 : //Fields per frame
- if (DataLength==4)
- {
- Get_B4 (Streams[TrackID].FieldsPerFrame_Code, "Content"); Param_Info1(Gxf_FieldsPerFrame(Streams[TrackID].FieldsPerFrame_Code)); Element_Info1(Gxf_FieldsPerFrame(Streams[TrackID].FieldsPerFrame_Code));
- if (Gxf_MediaTypes_StreamKind(MediaType)==Stream_Video)
- {
- Stream_Video_FieldsPerFrame_Code=Streams[TrackID].FieldsPerFrame_Code;
- Material_Fields_FieldsPerFrame=Streams[TrackID].FieldsPerFrame_Code;
- }
- for (std::map<int8u, tc>::iterator TimeCode=TimeCodes.begin(); TimeCode!=TimeCodes.end(); ++TimeCode)
- if (TrackID==TimeCode->first)
- for (size_t Pos=0; Pos<Streams[TrackID].Parsers.size(); Pos++)
- ((File_Gxf_TimeCode*)Streams[TrackID].Parsers[Pos])->FieldsPerFrame_Code=Streams[0x00].FieldsPerFrame_Code;
- }
- else
- Skip_XX(DataLength, "Unknown");
- break;
- default : Skip_XX(DataLength, "Unknown");
- }
- Element_End0();
- }
- Element_End0();
-
- //Test on TimeCode
- if (TimeCode_Parsed && !Invalid)
- {
- std::map<int8u, tc>::iterator TimeCode=TimeCodes.find(TrackID);
- if (TimeCode==TimeCodes.end() || TimeCode->second.Milliseconds==(int64u)-1)
- {
- float64 FrameRate=Gxf_FrameRate(Streams[TrackID].FrameRate_Code);
- TimeCodes[TrackID].Milliseconds=Hours *60*60*1000
- +Minutes *60*1000
- +Seconds *1000;
- MediaInfoLib::TimeCode TC;
- TC.Hours=Hours;
- TC.Minutes=Minutes;
- TC.Seconds=Seconds;
- TC.Frames=Fields/2;
- TC.DropFrame=DropFrame;
- TimeCodes[TrackID].String=TC.ToString();
-
- if (!FrameRate)
- {
- //Time code frame rate is missing, using the video frame rate
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos].FrameRate_Code!=(int32u)-1)
- {
- FrameRate=Gxf_FrameRate(Streams[Pos].FrameRate_Code);
- break;
- }
- }
- if (FrameRate)
- float64_int64s(Fields*1000/(FrameRate*2));
- }
- }
- }
- Element_End0();
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Padding");
-
- //Filling missing frame rates for PCM
- for (size_t TrackID=0; TrackID<Streams.size(); TrackID++)
- {
- if (Gxf_FrameRate(Streams[TrackID].FrameRate_Code)==0)
- {
- Streams[TrackID].FrameRate_Code=Stream_Video_FrameRate_Code;
- Streams[TrackID].FieldsPerFrame_Code=Stream_Video_FieldsPerFrame_Code;
- }
- if (Material_Fields_First_IsValid && Gxf_MediaTypes_StreamKind(Streams[TrackID].MediaType)==Stream_Audio) //In case of offset, MediaFieldNumber-Material_Fields_First is not well rounded
- {
- float64 Temp=((float64)Material_Fields_First/Streams[TrackID].FieldsPerFrame_Code)/Gxf_FrameRate(Streams[TrackID].FrameRate_Code);
- Temp*=48000; //TODO: find where this piece of info is available
- Temp/=32768;
- Temp-=(int64u)(Temp);
- if (Temp)
- {
- Temp=((float64)32768)/48000*(1-Temp); //Duration of the first frame not counted
- Streams[TrackID].FirstFrameDuration=float64_int64s(Temp*1000000000);
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Gxf::media()
-{
- Element_Name("media");
-
- //Parsing
- int32u MediaFieldNumber;
- int8u MediaType;
- Element_Begin1("Preamble");
- Get_B1 (MediaType, "Media type");
- Get_B1 (TrackNumber, "Track number");
- Get_B4 (MediaFieldNumber, "Media field number");
- Skip_B1( "Field information");
- Skip_B1( "Field information");
- Skip_B1( "Field information");
- Skip_B1( "Field information");
- Skip_B4( "Time line field number");
- Skip_B1( "Flags");
- Skip_B1( "Reserved");
- TrackNumber&=0x3F;
- Element_End0();
- Element_Info1(TrackNumber);
-
- //Managing audio 32768-sample DTS synchro
- if (Gxf_MediaTypes_StreamKind(MediaType)==Stream_Audio && MediaFieldNumber==Material_Fields_First && Gxf_FrameRate(Streams[TrackNumber].FrameRate_Code) && Streams[TrackNumber].FirstFrameDuration)
- {
- float64 Temp=((float64)MediaFieldNumber/Material_Fields_FieldsPerFrame)/Gxf_FrameRate(Streams[TrackNumber].FrameRate_Code);
- Temp*=48000; //TODO: find where this piece of info is available
- Temp/=32768;
- Temp-=(int64u)(Temp);
- Temp*=(Element_Size-Element_Offset);
- int64u ByteOffset=(int64u)Temp;
- int64u SampleSize=(Element_Size-Element_Offset)/32768;
- ByteOffset/=SampleSize; //Need to be in sync with sample size
- ByteOffset*=SampleSize;
- Element_Offset+=ByteOffset;
- }
-
- #if MEDIAINFO_SEEK
- if (!IFrame_IsParsed)
- {
- if (UMF_File && ((File_Umf*)UMF_File)->GopSize!=(int64u)-1)
- IFrame_IsParsed=(((MediaFieldNumber-(Material_Fields_First_IsValid?Material_Fields_First:0))/Material_Fields_FieldsPerFrame)%((File_Umf*)UMF_File)->GopSize)==0;
- else if (Gxf_MediaTypes_StreamKind(Streams[TrackNumber].MediaType)==Stream_Video)
- IFrame_IsParsed=true;
- }
- #endif //MEDIAINFO_SEEK
-
- #if MEDIAINFO_DEMUX
- if (Streams[TrackNumber].MediaType!=8) //Not a TimeCode stream
- {
- Element_Code=TrackNumber;
- int64u TimeCode_First=0;
- if (!TimeCodes.empty())
- {
- TimeCode_First=((File_Gxf_TimeCode*)Streams[TimeCodes.begin()->first].Parsers[0])->TimeCode_FirstFrame_ms;
- if (TimeCode_First==(int64u)-1)
- TimeCode_First=TimeCodes.begin()->second.Milliseconds;
- }
- if (TimeCode_First!=(int64u)-1)
- TimeCode_First*=1000000;
- if (Gxf_MediaTypes_StreamKind(Streams[TrackNumber].MediaType)==Stream_Video)
- {
- if (Gxf_FrameRate(Streams[TrackNumber].FrameRate_Code))
- {
- FrameInfo.DTS=TimeCode_First+float64_int64s(((float64)MediaFieldNumber-(Material_Fields_First_IsValid?Material_Fields_First:0))/Material_Fields_FieldsPerFrame*1000000000/Gxf_FrameRate(Streams[TrackNumber].FrameRate_Code));
- FrameInfo.PTS=(int64u)-1;
- FrameInfo.DUR=float64_int64s(((float64)1000000000)/Gxf_FrameRate(Streams[TrackNumber].FrameRate_Code));
- }
- else
- FrameInfo.DTS=FrameInfo.PTS=FrameInfo.DUR=(int64u)-1;
- if (MediaFieldNumber-(Material_Fields_First_IsValid?Material_Fields_First:0)==0)
- Demux_random_access=true;
- else
- {
- if (UMF_File && ((File_Umf*)UMF_File)->GopSize!=(int64u)-1)
- Demux_random_access=(((MediaFieldNumber-(Material_Fields_First_IsValid?Material_Fields_First:0))/Material_Fields_FieldsPerFrame)%((File_Umf*)UMF_File)->GopSize)==0;
- else
- Demux_random_access=false;
- }
- }
- else if (Gxf_MediaTypes_StreamKind(Streams[TrackNumber].MediaType)==Stream_Audio)
- {
- if (Gxf_FrameRate(Streams[TrackNumber].FrameRate_Code))
- {
- Frame_Count_NotParsedIncluded=(int64u)((MediaFieldNumber-(Material_Fields_First_IsValid?Material_Fields_First:0))/Gxf_FrameRate(Streams[TrackNumber].FrameRate_Code)*48000/32768/Material_Fields_FieldsPerFrame); //A block is 32768 samples at 48 KHz
- FrameInfo.PTS=TimeCode_First+Frame_Count_NotParsedIncluded*1000000000*32768/48000; //A block is 32768 samples at 48 KHz
- if (Material_Fields_First_IsValid && MediaFieldNumber!=Material_Fields_First && Streams[TrackNumber].FirstFrameDuration) //In case of offset, MediaFieldNumber-Material_Fields_First is not well rounded
- {
- FrameInfo.PTS+=Streams[TrackNumber].FirstFrameDuration;
- Frame_Count_NotParsedIncluded++;
- }
- FrameInfo.DTS=FrameInfo.PTS;
- }
- else
- FrameInfo.DTS=FrameInfo.PTS=(int64u)-1;
- FrameInfo.DUR=float64_int64s(((float64)1000000000)*32768/48000);
- Demux_random_access=true;
- }
- else
- {
- if (Gxf_FrameRate(Streams[0x00].FrameRate_Code))
- FrameInfo.DTS=FrameInfo.PTS=TimeCode_First+float64_int64s(((float64)(MediaFieldNumber-(Material_Fields_First_IsValid?Material_Fields_First:0)))*1000000000/Gxf_FrameRate(Streams[0x00].FrameRate_Code)/Material_Fields_FieldsPerFrame);
- else
- FrameInfo.DTS=FrameInfo.PTS=(int64u)-1;
- FrameInfo.DUR=(int64u)-1;
- Demux_random_access=true;
- }
- #if MEDIAINFO_SEEK
- if (Gxf_MediaTypes_StreamKind(Streams[TrackNumber].MediaType)!=Stream_Video || IFrame_IsParsed)
- #endif //MEDIAINFO_SEEK
- {
- if (Gxf_MediaTypes_StreamKind(Streams[TrackNumber].MediaType)!=Stream_Audio)
- Frame_Count_NotParsedIncluded=(MediaFieldNumber-(Material_Fields_First_IsValid?Material_Fields_First:0))/Material_Fields_FieldsPerFrame;
- Demux_Level=(!Streams[TrackNumber].Parsers.empty() && (Streams[TrackNumber].Parsers[0]->Demux_UnpacketizeContainer || Streams[TrackNumber].Parsers[0]->Demux_Level==2))?4:2; //Intermediate (D-10 Audio) / Container
- Demux(Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset), ContentType_MainStream);
- }
- Element_Code=0xBF; //media
- }
- #endif //MEDIAINFO_DEMUX
-
- //Needed?
- if (!Streams[TrackNumber].Searching_Payload && IsParsingMiddle_MaxOffset==(int64u)-1)
- {
- Skip_XX(Element_Size-Element_Offset, "data");
- //Element_DoNotShow();
- return;
- }
-
- for (size_t Pos=0; Pos<Streams[TrackNumber].Parsers.size(); Pos++)
- {
- Streams[TrackNumber].Parsers[Pos]->FrameInfo.DTS=FrameInfo.DTS;
- Open_Buffer_Continue(Streams[TrackNumber].Parsers[Pos], Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent && Config->Demux_Unpacketize_Get())
- Streams[TrackNumber].Demux_EventWasSent=true;
- #endif //MEDIAINFO_DEMUX
-
- //Multiple parsers
- if (Streams[TrackNumber].Parsers.size()>1)
- {
- if (!Streams[TrackNumber].Parsers[Pos]->Status[IsAccepted] && Streams[TrackNumber].Parsers[Pos]->Status[IsFinished])
- {
- delete *(Streams[TrackNumber].Parsers.begin()+Pos);
- Streams[TrackNumber].Parsers.erase(Streams[TrackNumber].Parsers.begin()+Pos);
- Pos--;
- }
- else if (Streams[TrackNumber].Parsers.size()>1 && Streams[TrackNumber].Parsers[Pos]->Status[IsAccepted])
- {
- File__Analyze* Parser=Streams[TrackNumber].Parsers[Pos];
- for (size_t Pos2=0; Pos2<Streams[TrackNumber].Parsers.size(); Pos2++)
- {
- if (Pos2!=Pos)
- delete *(Streams[TrackNumber].Parsers.begin()+Pos2);
- }
- Streams[TrackNumber].Parsers.clear();
- Streams[TrackNumber].Parsers.push_back(Parser);
- }
- }
- }
-
- Element_Offset=Element_Size;
-
- if (IsParsingMiddle_MaxOffset!=(int64u)-1 && Config->ParseSpeed<1 && Streams[TrackNumber].Parsers.size()==1 && Streams[TrackNumber].Parsers[0]->Status[IsFilled])
- {
- Streams[TrackNumber].Searching_Payload=false;
-
- if (Parsers_Count>0)
- Parsers_Count--;
- if (Parsers_Count==0)
- {
- TryToFinish();
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Gxf::end_of_stream()
-{
- Element_Name("end of stream");
-}
-
-//---------------------------------------------------------------------------
-void File_Gxf::field_locator_table()
-{
- Element_Name("field locator table");
-
- //Parsing
- int32u Entries;
- #if MEDIAINFO_SEEK
- Get_L4 (Flt_FieldPerEntry, "Number of fields per FLT entry");
- #else //MEDIAINFO_SEEK
- Skip_L4( "Number of fields per FLT entry");
- #endif //MEDIAINFO_SEEK
- Get_L4 (Entries, "Number of FLT entries");
- for (size_t Pos=0; Pos<Entries; Pos++)
- {
- #if MEDIAINFO_SEEK
- int32u Offset;
- Get_L4 (Offset, "Offset to fields");
- Flt_Offsets.push_back(Offset);
- #else //MEDIAINFO_SEEK
- Skip_L4( "Offset to fields");
- #endif //MEDIAINFO_SEEK
- if (Element_Offset==Element_Size)
- break;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Gxf::UMF_file()
-{
- Element_Name("UMF file");
-
- //Parsing
- int32u PayloadDataLength;
- Element_Begin1("Preamble");
- Skip_B1( "First/last packet flag");
- Get_B4 (PayloadDataLength, "Payload data length");
- Element_End0();
-
- if (UMF_File==NULL)
- {
- UMF_File=new File_Umf();
- Open_Buffer_Init(UMF_File);
- }
- Open_Buffer_Continue(UMF_File, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
-
- #if MEDIAINFO_SEEK
- if (Seeks.empty() && Flt_FieldPerEntry!=(int32u)-1 && ((File_Umf*)UMF_File)->GopSize!=(int64u)-1)
- {
- size_t NextIFrame=0;
- for (size_t Pos=0; Pos<Flt_Offsets.size(); Pos++)
- if (Pos*Flt_FieldPerEntry>=NextIFrame)
- {
- seek Seek;
- Seek.FrameNumber=(Material_Fields_First_IsValid?Material_Fields_First:0)+Pos*Flt_FieldPerEntry;
- Seek.StreamOffset=Flt_Offsets[Pos];
- Seeks.push_back(Seek);
- NextIFrame+=(size_t)((File_Umf*)UMF_File)->GopSize*Material_Fields_FieldsPerFrame;
- }
- Flt_Offsets.clear();
- }
- #endif //MEDIAINFO_SEEK
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Gxf::Detect_EOF()
-{
- if (File_Offset+Buffer_Size>=SizeToAnalyze)
- {
- TryToFinish();
- }
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_Gxf::ChooseParser_ChannelGrouping(int8u TrackID)
-{
- File_ChannelGrouping* Parser;
- if (Audio_Count%2)
- {
- if (!Streams[TrackID-1].IsChannelGrouping)
- return NULL; //Not a channel grouping
-
- Parser=new File_ChannelGrouping;
- Parser->CanBePcm=true;
- Parser->Channel_Pos=1;
- Parser->Common=((File_ChannelGrouping*)Streams[TrackID-1].Parsers[0])->Common;
- Parser->StreamID=TrackID-1;
- Streams[TrackID].IsChannelGrouping=true;
- }
- else
- {
- Parser=new File_ChannelGrouping;
- Parser->CanBePcm=true;
- Parser->Channel_Pos=0;
- //if (Descriptor->second.Infos.find("SamplingRate")!=Descriptor->second.Infos.end())
- Streams[TrackID].IsChannelGrouping=true;
- Streams[TrackID].DisplayInfo=false;
- }
- Parser->BitDepth=24;
- Parser->Channel_Total=2;
- Parser->SamplingRate=48000; //TODO: find where this piece of info is avaialble
- Parser->Endianness='L';
-
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer)
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
-
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-void File_Gxf::TryToFinish()
-{
- if (!IsSub && File_Size!=(int64u)-1 && Config->ParseSpeed<1 && IsParsingMiddle_MaxOffset==(int64u)-1 && File_Size/2>SizeToAnalyze*4)
- {
- IsParsingMiddle_MaxOffset=File_Size/2+SizeToAnalyze*4;
- GoTo(File_Size/2);
- Open_Buffer_Unsynch();
- Parsers_Count=(int8u)-1;
- return;
- }
-
- Finish();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_GXF_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf.h
deleted file mode 100644
index 3f71cbbf6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about GXF files
-// SMPTE 360M - General Exchange Format
-// SMPTE RDD 14-2007 - General Exchange Format-2
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_GxfH
-#define MediaInfo_File_GxfH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#if defined(MEDIAINFO_ANCILLARY_YES)
- #include <MediaInfo/Multiple/File_Ancillary.h>
-#endif //defined(MEDIAINFO_ANCILLARY_YES)
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Gxf
-//***************************************************************************
-
-class File_Gxf : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Gxf();
- ~File_Gxf();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- void Read_Buffer_AfterParsing();
-
- //Buffer - Per element
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
-
- //Packets
- void map();
- void media();
- void end_of_stream();
- void field_locator_table();
- void UMF_file();
-
- //Temp - Global
- #if defined(MEDIAINFO_ANCILLARY_YES)
- File_Ancillary* Ancillary;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
- int32u Material_Fields_First;
- int32u Material_Fields_Last;
- int32u Material_File_Size;
- int32u Material_Fields_FieldsPerFrame;
- int8u Parsers_Count;
- int8u AncillaryData_StreamID;
- struct tc
- {
- int64u Milliseconds;
- string String;
-
- tc()
- {
- Milliseconds=(int64u)-1;
- }
- };
- std::map<int8u, tc> TimeCodes; //Key is StreamID
- bool Material_Fields_First_IsValid;
- bool Material_Fields_Last_IsValid;
- bool Material_File_Size_IsValid;
-
- //Temp - Stream
- struct stream
- {
- std::vector<File__Analyze*> Parsers;
- int64u FirstFrameDuration; //In case of audio, indicates the duration of the first frame
- stream_t StreamKind;
- size_t StreamPos;
- int32u TimeStamp_Start;
- int32u TimeStamp_End;
- int32u FrameRate_Code;
- int32u LinesPerFrame_Code;
- int32u FieldsPerFrame_Code;
- int8u MediaType;
- int8u TrackID;
- bool Searching_Payload;
- bool Searching_TimeStamp_Start;
- bool Searching_TimeStamp_End;
- bool IsChannelGrouping;
- bool DisplayInfo; //In case of channel grouping, info is about the complete (2*half) stream, so second stream info must not be used
- Ztring MediaName;
- std::map<std::string, Ztring> Infos;
- #if MEDIAINFO_DEMUX
- bool Demux_EventWasSent;
- #endif //MEDIAINFO_DEMUX
-
- stream()
- {
- FirstFrameDuration=0;
- StreamKind=Stream_Max;
- StreamPos=(size_t)-1;
- TimeStamp_Start = (int32u)-1;
- TimeStamp_End = (int32u)-1;
- Searching_Payload = false;
- Searching_TimeStamp_Start=false;
- Searching_TimeStamp_End=false;
- FrameRate_Code=(int32u)-1;
- LinesPerFrame_Code=(int32u)-1;
- FieldsPerFrame_Code=(int32u)-1;
- MediaType=(int8u)-1;
- TrackID=(int8u)-1;
- IsChannelGrouping=false;
- DisplayInfo=true;
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent=false;
- #endif //MEDIAINFO_DEMUX
- }
- ~stream()
- {
- for (size_t Pos=0; Pos<Parsers.size(); Pos++)
- delete Parsers[Pos];
- }
- };
- std::vector<stream> Streams;
- File__Analyze* UMF_File;
- int64u SizeToAnalyze; //Total size of a chunk to analyse, it may be changed by the parser
- int64u IsParsingMiddle_MaxOffset;
- int8u Audio_Count;
- int8u TrackNumber;
-
- //File__Analyze helpers
- void Streams_Finish_PerStream(size_t StreamID, stream &Temp);
- void Detect_EOF();
- File__Analyze* ChooseParser_ChannelGrouping(int8u TrackID);
- void TryToFinish();
-
- #if MEDIAINFO_DEMUX
- bool Demux_HeaderParsed;
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_SEEK
- int32u Flt_FieldPerEntry;
- std::vector<int32u> Flt_Offsets; //In 1024-byte
- struct seek
- {
- int64u FrameNumber;
- int32u StreamOffset; //In 1024-byte
- };
- std::vector<seek> Seeks;
- bool IFrame_IsParsed;
- #endif //MEDIAINFO_SEEK
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf_TimeCode.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf_TimeCode.cpp
deleted file mode 100644
index cd1a7b40d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf_TimeCode.cpp
+++ /dev/null
@@ -1,353 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_TIMECODE_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Gxf_TimeCode.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_GXF_YES)
- extern double Gxf_FrameRate(int32u Content);
-#else //defined(MEDIAINFO_GXF_YES)
- double Gxf_FrameRate(int32u Content) //TODO: remove any relationship with GXF
- {
- switch (Content)
- {
- case 1 : return 60.000;
- case 2 : return 59.940;
- case 3 : return 50.000;
- case 4 : return 30.000;
- case 5 : return 29.970;
- case 6 : return 25.000;
- case 7 : return 24.000;
- case 8 : return 23.976;
- default: return 0.000;
- }
- }
-#endif //defined(MEDIAINFO_GXF_YES)
-
-//---------------------------------------------------------------------------
-const char* Atc_PayloadType (int8u PayloadType)
-{
- switch (PayloadType)
- {
- case 0 : return "ATC_LTC";
- case 1 : return "ATC_VITC1";
- case 2 : return "ATC_VITC2";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Gxf_TimeCode::File_Gxf_TimeCode()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("Time code");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Gxf;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
-
- //In
- FrameRate_Code=(int32u)-1;
- FieldsPerFrame_Code=(int32u)-1;
- IsAtc=false;
-
- //Out
- TimeCode_FirstFrame_ms=(int64u)-1;
-}
-
-//---------------------------------------------------------------------------
-File_Gxf_TimeCode::~File_Gxf_TimeCode()
-{
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Gxf_TimeCode::Streams_Fill()
-{
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Delay, TimeCode_FirstFrame_ms);
- if (TimeCode_FirstFrame.size()==11)
- Fill(Stream_Video, StreamPos_Last, Video_Delay_DropFrame, TimeCode_FirstFrame[8]==';'?"Yes":"No");
- Fill(Stream_Video, 0, Video_Delay_Source, "Container");
- Fill(Stream_Video, 0, Video_TimeCode_FirstFrame, TimeCode_FirstFrame.c_str());
- //Fill(Stream_Video, 0, Video_TimeCode_Source, "Time code track");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Delay, TimeCode_FirstFrame_ms);
- if (TimeCode_FirstFrame.size()==11)
- Fill(Stream_Audio, StreamPos_Last, Audio_Delay_DropFrame, TimeCode_FirstFrame[8]==';'?"Yes":"No");
- Fill(Stream_Audio, 0, Audio_Delay_Source, "Container");
- Fill(Stream_Audio, 0, Video_TimeCode_FirstFrame, TimeCode_FirstFrame.c_str());
- //Fill(Stream_Audio, 0, Video_TimeCode_Source, "Time code track");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Gxf_TimeCode::Read_Buffer_Continue()
-{
- int8u Validity[504];
-
- if (!IsAtc)
- {
- if (Element_Size!=4096)
- {
- Skip_XX(Element_Size, "Data");
- return;
- }
-
- //Reading bitmap first (validity of first byte is at the end)
- Element_Offset=504*8;
- Element_Begin1("Validity");
- BS_Begin_LE(); //is Little Endian
- for (size_t Pos=0; Pos<504; Pos++)
- {
- bool Validity_Bit;
- Get_TB (Validity_Bit, "Bit");
- Validity[Pos]=Validity_Bit?1:0;
- }
- BS_End_LE();
- Skip_B1( "Pad");
- Element_End0();
- }
-
- //Parsing
- Element_Offset=0;
- for (size_t Pos=0; Pos<(IsAtc?(size_t)1:(size_t)504); Pos++)
- {
- if (IsAtc || Validity[Pos])
- {
- Element_Begin1("TimeCode");
- int8u Frames_Units, Frames_Tens, Seconds_Units, Seconds_Tens, Minutes_Units, Minutes_Tens, Hours_Units, Hours_Tens;
- bool DropFrame;
- int8u DBB1=0, DBB2=0;
- if (IsAtc)
- {
- bool Temp;
- BS_Begin();
-
- Get_S1 (4, Frames_Units, "Frames (Units)");
- Get_SB ( Temp, "DBB1_0"); if (Temp) DBB1|=(1<<0);
- Skip_S1(3, "Zero");
-
- Skip_S1(4, "BG1");
- Get_SB ( Temp, "DBB1_1"); if (Temp) DBB1|=(1<<1);
- Skip_S1(3, "Zero");
-
- Skip_SB( "CF - Color fame");
- Get_SB ( DropFrame, "DP - Drop frame");
- Get_S1 (2, Frames_Tens, "Frames (Tens)");
- Get_SB ( Temp, "DBB1_2"); if (Temp) DBB1|=(1<<2);
- Skip_S1(3, "Zero");
-
- Skip_S1(4, "BG2");
- Get_SB ( Temp, "DBB1_3"); if (Temp) DBB1|=(1<<3);
- Skip_S1(3, "Zero");
-
- Get_S1 (4, Seconds_Units, "Seconds (Units)");
- Get_SB ( Temp, "DBB1_4"); if (Temp) DBB1|=(1<<4);
- Skip_S1(3, "Zero");
-
- Skip_S1(4, "BG3");
- Get_SB ( Temp, "DBB1_5"); if (Temp) DBB1|=(1<<5);
- Skip_S1(3, "Zero");
-
- Skip_SB( "FM - Frame Mark");
- Get_S1 (3, Seconds_Tens, "Seconds (Tens)");
- Get_SB ( Temp, "DBB1_6"); if (Temp) DBB1|=(1<<6);
- Skip_S1(3, "Zero");
-
- Skip_S1(4, "BG4");
- Get_SB ( Temp, "DBB1_7"); if (Temp) DBB1|=(1<<7);
- Skip_S1(3, "Zero");
-
- Get_S1 (4, Minutes_Units, "Minutes (Units)");
- Get_SB ( Temp, "DBB2_0"); if (Temp) DBB2|=(1<<0);
- Skip_S1(3, "Zero");
-
- Skip_S1(4, "BG5");
- Get_SB ( Temp, "DBB2_1"); if (Temp) DBB2|=(1<<1);
- Skip_S1(3, "Zero");
-
- Skip_SB( "BGF0");
- Get_S1 (3, Minutes_Tens, "Minutes (Tens)");
- Get_SB ( Temp, "DBB2_2"); if (Temp) DBB2|=(1<<2);
- Skip_S1(3, "Zero");
-
- Skip_S1(4, "BG6");
- Get_SB ( Temp, "DBB2_3"); if (Temp) DBB2|=(1<<3);
- Skip_S1(3, "Zero");
-
- Get_S1 (4, Hours_Units, "Hours (Units)");
- Get_SB ( Temp, "DBB2_4"); if (Temp) DBB2|=(1<<4);
- Skip_S1(3, "Zero");
-
- Skip_S1(4, "BG7");
- Get_SB ( Temp, "DBB2_5"); if (Temp) DBB2|=(1<<5);
- Skip_S1(3, "Zero");
-
- Skip_SB( "BGF2");
- Skip_SB( "BGF1");
- Get_S1 (2, Hours_Tens, "Hours (Tens)");
- Get_SB ( Temp, "DBB2_6"); if (Temp) DBB2|=(1<<6);
- Skip_S1(3, "Zero");
-
- Skip_S1(4, "BG8");
- Get_SB ( Temp, "DBB2_7"); if (Temp) DBB2|=(1<<7);
- Skip_S1(3, "Zero");
-
- BS_End();
- }
- else
- {
- BS_Begin();
-
- Skip_S1(4, "BG1");
- Get_S1 (4, Frames_Units, "Frames (Units)");
-
- Skip_S1(4, "BG2");
- Skip_SB( "CF - Color fame");
- Get_SB ( DropFrame, "DP - Drop frame");
- Get_S1 (2, Frames_Tens, "Frames (Tens)");
-
- Skip_S1(4, "BG3");
- Get_S1 (4, Seconds_Units, "Seconds (Units)");
-
- Skip_S1(4, "BG4");
- Skip_SB( "FM - Frame Mark");
- Get_S1 (3, Seconds_Tens, "Seconds (Tens)");
-
- Skip_S1(4, "BG5");
- Get_S1 (4, Minutes_Units, "Minutes (Units)");
-
- Skip_S1(4, "BG6");
- Skip_SB( "BGF0");
- Get_S1 (3, Minutes_Tens, "Minutes (Tens)");
-
- Skip_S1(4, "BG7");
- Get_S1 (4, Hours_Units, "Hours (Units)");
-
- Skip_S1(4, "BG8");
- Skip_SB( "BGF2");
- Skip_SB( "BGF1");
- Get_S1 (2, Hours_Tens, "Hours (Tens)");
-
- BS_End();
- }
-
- int64u TimeCode_Ms=(int64u)(Hours_Tens *10*60*60*1000
- + Hours_Units *60*60*1000
- + Minutes_Tens *10*60*1000
- + Minutes_Units *60*1000
- + Seconds_Tens *10*1000
- + Seconds_Units *1000
- + (Gxf_FrameRate(FrameRate_Code)==0?0:((Frames_Tens*10+Frames_Units)*1000/float64_int32s(Gxf_FrameRate(FrameRate_Code)/(Gxf_FrameRate(FrameRate_Code)>30?2:1)))));
-
- if (TimeCode_FirstFrame.empty())
- {
- TimeCode_FirstFrame+=('0'+Hours_Tens);
- TimeCode_FirstFrame+=('0'+Hours_Units);
- TimeCode_FirstFrame+=':';
- TimeCode_FirstFrame+=('0'+Minutes_Tens);
- TimeCode_FirstFrame+=('0'+Minutes_Units);
- TimeCode_FirstFrame+=':';
- TimeCode_FirstFrame+=('0'+Seconds_Tens);
- TimeCode_FirstFrame+=('0'+Seconds_Units);
- TimeCode_FirstFrame+=DropFrame?';':':';
- TimeCode_FirstFrame+=('0'+Frames_Tens);
- TimeCode_FirstFrame+=('0'+Frames_Units);
- }
-
- #if MEDIAINFO_TRACE
- string TimeCode;
- TimeCode+=('0'+Hours_Tens);
- TimeCode+=('0'+Hours_Units);
- TimeCode+=':';
- TimeCode+=('0'+Minutes_Tens);
- TimeCode+=('0'+Minutes_Units);
- TimeCode+=':';
- TimeCode+=('0'+Seconds_Tens);
- TimeCode+=('0'+Seconds_Units);
- TimeCode+=DropFrame?';':':';
- TimeCode+=('0'+Frames_Tens);
- TimeCode+=('0'+Frames_Units);
- Element_Info1(TimeCode.c_str());
- #endif //MEDIAINFO_TRACE
- if (IsAtc)
- {
- Settings=Atc_PayloadType(DBB1);
- Element_Info1(__T("PayloadType=")+Ztring().From_UTF8(Settings.c_str()));
- Element_Info1(__T("VitcLineSelect=")+Ztring::ToZtring(DBB2&0x1F));
- }
- Element_End0();
-
- FILLING_BEGIN();
- if (TimeCode_FirstFrame_ms==(int64u)-1)
- TimeCode_FirstFrame_ms=TimeCode_Ms;
- FILLING_END();
- }
- else
- Skip_XX(8, "Junk");
- }
-
- //bitmap, already parsed
- Element_Offset+=64;
-
- FILLING_BEGIN();
- if (!Status[IsFilled] && TimeCode_FirstFrame_ms!=(int64u)-1)
- {
- Accept();
- Fill();
-
- if (MediaInfoLib::Config.ParseSpeed_Get()<1)
- Finish();
- }
-
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_TIMECODE_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf_TimeCode.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf_TimeCode.h
deleted file mode 100644
index 6161e6c76..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Gxf_TimeCode.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about GXF files
-// SMPTE 360M - General Exchange Format
-// SMPTE RDD 14-2007 - General Exchange Format-2
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Gxf_TimeCodeH
-#define MediaInfo_File_Gxf_TimeCodeH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#if defined(MEDIAINFO_ANCILLARY_YES)
- #include <MediaInfo/Multiple/File_Ancillary.h>
-#endif //defined(MEDIAINFO_ANCILLARY_YES)
-#include "MediaInfo/TimeCode.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Gxf_TimeCode
-//***************************************************************************
-
-class File_Gxf_TimeCode : public File__Analyze
-{
-public :
- //In
- int32u FrameRate_Code;
- int32u FieldsPerFrame_Code;
- bool IsAtc; // SMPTE ST 12-2
-
- //Out
- int64u TimeCode_FirstFrame_ms;
- string TimeCode_FirstFrame;
- string Settings;
-
- //Constructor/Destructor
- File_Gxf_TimeCode();
- ~File_Gxf_TimeCode();
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_HdsF4m.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_HdsF4m.cpp
deleted file mode 100644
index a66001af5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_HdsF4m.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_HDSF4M_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_HdsF4m.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/File.h"
-#include "tinyxml2.h"
-using namespace ZenLib;
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_HdsF4m::File_HdsF4m()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_HdsF4m;
- StreamIDs_Width[0]=16;
- #endif //MEDIAINFO_EVENTS
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_HdsF4m::~File_HdsF4m()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_HdsF4m::Streams_Finish()
-{
- if (ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_HdsF4m::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_HdsF4m::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- {
- XMLElement* Root=document.FirstChildElement("manifest");
- if (Root)
- {
- const char* Attribute=Root->Attribute("xmlns");
- if (Attribute==NULL || Ztring().From_UTF8(Attribute)!=__T("http://ns.adobe.com/f4m/1.0"))
- {
- Reject("HdsF4m");
- return false;
- }
-
- Accept("HdsF4m");
- Fill(Stream_General, 0, General_Format, "HDS F4M");
- Config->File_ID_OnlyRoot_Set(false);
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- //Parsing main elements
- Ztring BaseURL;
-
- for (XMLElement* Root_Item=Root->FirstChildElement(); Root_Item; Root_Item=Root_Item->NextSiblingElement())
- {
- //Common information
- if (string(Root_Item->Value())=="BaseURL")
- {
- if (BaseURL.empty()) //Using the first one
- BaseURL=Root_Item->GetText();
- }
-
- //Period
- if (string(Root_Item->Value())=="media")
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- const char* Attribute;
-
- //Attributes - mineType
- Attribute=Root_Item->Attribute("url");
- if (Attribute)
- ReferenceFile.FileNames.push_back(Ztring().From_UTF8(Attribute)+__T("Seg1.f4f"));
-
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- }
- }
- else
- {
- Reject("HdsF4m");
- return false;
- }
- }
-
- Element_Offset=File_Size;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_HDSF4M_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_HdsF4m.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_HdsF4m.h
deleted file mode 100644
index 6ea92049e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_HdsF4m.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about HDS (.f4m) files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_HdsF4mH
-#define MediaInfo_File_HdsF4mH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_HdsF4m
-//***************************************************************************
-
-class File_HdsF4m : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_HdsF4m();
- ~File_HdsF4m();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Helpers
- void Representation();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Hls.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Hls.cpp
deleted file mode 100644
index cde51e177..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Hls.cpp
+++ /dev/null
@@ -1,238 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_HLS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Hls.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "ZenLib/File.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/ZtringList.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Hls::File_Hls()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Hls;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_Hls::~File_Hls()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Hls::Streams_Finish()
-{
- if (ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Hls::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Hls::FileHeader_Begin()
-{
- //Element_Size
- if (File_Size>1024*1024 || File_Size<10)
- {
- Reject("HLS");
- return false; //HLS files are not big
- }
-
- if (Buffer_Size<File_Size)
- return false; //Wait for complete file
-
- Ztring Document; Document.From_UTF8((char*)Buffer, Buffer_Size);
- ZtringList Lines;
- size_t LinesSeparator_Pos=Document.find_first_of(__T("\r\n"));
- if (LinesSeparator_Pos>File_Size-1)
- {
- Reject("HLS");
- return false;
- }
- Ztring LinesSeparator;
- if (Document[LinesSeparator_Pos]==__T('\r') && LinesSeparator_Pos+1<Document.size() && Document[LinesSeparator_Pos+1]==__T('\n'))
- LinesSeparator=__T("\r\n");
- else if (Document[LinesSeparator_Pos]==__T('\r'))
- LinesSeparator=__T("\r");
- else if (Document[LinesSeparator_Pos]==__T('\n'))
- LinesSeparator=__T("\n");
- else
- {
- Reject("HLS");
- return false;
- }
- Lines.Separator_Set(0, LinesSeparator);
- Lines.Write(Document);
-
- if (Lines(0)!=__T("#EXTM3U"))
- {
- Reject("HLS");
- return false;
- }
-
- Accept("HLS");
- Fill(Stream_General, 0, General_Format, "HLS");
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
- if (!IsSub)
- ReferenceFiles->ContainerHasNoId=true;
-
- File__ReferenceFilesHelper::reference ReferenceFile;
-
- bool IsGroup=false;
- for (size_t Line=0; Line<Lines.size(); Line++)
- {
- if (!Lines[Line].empty())
- {
- if (Lines[Line].find(__T("#EXT-X-KEY:"))==0)
- {
- ZtringListList List;
- List.Separator_Set(0, __T(","));
- List.Separator_Set(1, __T("="));
- List.Write(Lines[Line].substr(11, string::npos));
- for (size_t Pos=0; Pos<List.size(); ++Pos)
- {
- if (List[Pos](0)==__T("METHOD"))
- {
- if (List[Pos](1).find(__T("AES-128"))==0)
- {
- Fill(Stream_General, 0, General_Encryption_Format, "AES");
- Fill(Stream_General, 0, General_Encryption_Length, "128");
- Fill(Stream_General, 0, General_Encryption_Method, "Segment");
- Fill(Stream_General, 0, General_Encryption_Mode, "CBC");
- Fill(Stream_General, 0, General_Encryption_Padding, "PKCS7");
- Fill(Stream_General, 0, General_Encryption_InitializationVector, "Sequence number");
-
- #if MEDIAINFO_AES
- //Trying to get the key from FileName.FileExt.key
- if (Config->Encryption_Key_Get().empty())
- {
- File KeyFile;
- if (KeyFile.Open(File_Name+__T(".key")))
- {
- if (KeyFile.Size_Get()==16)
- {
- int8u Key[16];
- if (KeyFile.Read(Key, 16)==16)
- Config->Encryption_Key_Set(Key, 16);
- }
- else
- Fill(Stream_General, 0, "Encryption_Key_Problem", KeyFile.Size_Get());
- }
- }
- #endif
- }
- Fill(Stream_General, 0, General_Encryption, List[Pos](1));
- }
- }
- }
- else if (Lines[Line].find(__T("#EXT-X-STREAM-INF:"))==0)
- {
- IsGroup=true;
- }
- else if (Lines[Line][0]==__T('#'))
- ;
- else
- {
- if (IsGroup)
- {
- ReferenceFile.FileNames.push_back(Lines[Line]);
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- ReferenceFiles->References.push_back(ReferenceFile);
- IsGroup=false;
- ReferenceFile=File__ReferenceFilesHelper::reference();
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_HlsIndex;
- StreamIDs_Width[0]=sizeof(size_t);
- #endif //MEDIAINFO_EVENTS
- }
- else
- ReferenceFile.FileNames.push_back(Lines[Line]);
- }
- }
- }
-
- if (!ReferenceFile.FileNames.empty())
- {
- ReferenceFiles->References.push_back(ReferenceFile);
- Fill(Stream_General, 0, General_Format_Profile, "Media");
- }
- else
- {
- Fill(Stream_General, 0, General_Format_Profile, "Master");
- }
-
- Element_Offset=File_Size;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_HLS_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Hls.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Hls.h
deleted file mode 100644
index da8d1347a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Hls.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about HLS files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_HlsH
-#define MediaInfo_File_HlsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_Hls
-//***************************************************************************
-
-class File_Hls : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Hls();
- ~File_Hls();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi.cpp
deleted file mode 100644
index a342ae7fe..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi.cpp
+++ /dev/null
@@ -1,907 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_IBI
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Ibi.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include <zlib.h>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ibi::File_Ibi()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- DataMustAlwaysBeComplete=false;
-
- //In
- Ibi=NULL;
-
- //Temp
- Ibi_MustDelete=false;
-}
-
-//---------------------------------------------------------------------------
-File_Ibi::~File_Ibi()
-{
- if (Ibi_MustDelete)
- delete Ibi; //Ibi=NULL;
-}
-
-//***************************************************************************
-// Get information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const Ztring &File_Ibi::Get (stream_t /*StreamKind*/, size_t /*StreamNumber*/, const Ztring &Parameter, info_t /*KindOfInfo*/, info_t /*KindOfSearch*/)
-{
- ibi::streams::iterator IbiStream_Temp=Ibi->Streams.begin(); //TODO: management of multiple streams
- if (IbiStream_Temp!=Ibi->Streams.end() && !IbiStream_Temp->second->Infos.empty())
- {
- int64u FrameNumber=Parameter.To_int64u();
-
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size()-1; Pos++)
- if (IbiStream_Temp->second->Infos[Pos].FrameNumber==FrameNumber || IbiStream_Temp->second->Infos[Pos+1].FrameNumber>FrameNumber)
- {
- Get_Temp=__T("StreamOffset=")+Ztring::ToZtring(IbiStream_Temp->second->Infos[Pos].StreamOffset)
- + __T(" / FrameNumber=")+Ztring::ToZtring(IbiStream_Temp->second->Infos[Pos].FrameNumber)
- + __T(" / Dts=")+Ztring::ToZtring(IbiStream_Temp->second->Infos[Pos].Dts);
- return Get_Temp;
- }
- }
-
- //Can not be found
- Get_Temp.clear();
- return Get_Temp;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ibi::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "Ibi");
-
- if (Ibi==NULL)
- {
- Ibi=new ibi();
- Ibi_MustDelete=true;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Streams_Finish()
-{
- Config->File_KeepInfo_Set(true); //In order to let Get() available
-
- if (Count_Get(Stream_Video)==0) //If not yet done by Inform part
- for (ibi::streams::iterator IbiStream_Temp=Ibi->Streams.begin(); IbiStream_Temp!=Ibi->Streams.end(); ++IbiStream_Temp)
- {
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, StreamPos_Last, General_ID, IbiStream_Temp->first);
- }
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ibi::Header_Parse()
-{
- //Test of zero padding
- int8u Null;
- Peek_B1(Null);
- if (Null==0x00)
- {
- if (Buffer_Offset_Temp==0)
- Buffer_Offset_Temp=Buffer_Offset+1;
-
- while (Buffer_Offset_Temp<Buffer_Size)
- {
- if (Buffer[Buffer_Offset_Temp])
- break;
- Buffer_Offset_Temp++;
- }
- if (Buffer_Offset_Temp>=Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
-
- Header_Fill_Code((int32u)-1); //Should be (int64u)-1 but Borland C++ does not like this
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
-
- return;
- }
-
- //Parsing
- int64u Name, Size;
- Get_EB (Name, "Name");
- Get_EB (Size, "Size");
-
- //Filling
- Header_Fill_Code(Name, Ztring().From_Number(Name, 16));
- Header_Fill_Size(Element_Offset+Size);
-}
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- //Common
- const int64u Zero=(int32u)-1; //Should be (int64u)-1 but Borland C++ does not like this
- const int64u CRC32=0x3F;
- const int64u Void=0x6C;
-
- //EBML
- const int64u Ebml=0xA45DFA3;
- const int64u Ebml_Version=0x286;
- const int64u Ebml_ReadVersion=0x2F7;
- const int64u Ebml_MaxIDLength=0x2F2;
- const int64u Ebml_MaxSizeLength=0x2F3;
- const int64u Ebml_DocType=0x282;
- const int64u Ebml_DocTypeVersion=0x287;
- const int64u Ebml_DocTypeReadVersion=0x285;
-
- //Segment
- const int64u Stream=1;
- const int64u Stream_Header=1;
- const int64u Stream_ByteOffset=2;
- const int64u Stream_FrameNumber=3;
- const int64u Stream_Dts=4;
- const int64u CompressedIndex=2;
- const int64u WritingApplication=3;
- const int64u WritingApplication_Name=1;
- const int64u WritingApplication_Version=2;
- const int64u InformData=4;
- const int64u SourceInfo=5;
- const int64u SourceInfo_IndexCreationDate=1;
- const int64u SourceInfo_SourceModificationDate=2;
- const int64u SourceInfo_SourceSize=3;
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Data_Parse()
-{
- #define LIS2(_ATOM, _NAME) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- { \
- Element_Name(_NAME); \
- _ATOM(); \
- Element_ThisIsAList(); \
- } \
-
- #define ATO2(_ATOM, _NAME) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- { \
- if (Element_IsComplete_Get()) \
- { \
- Element_Name(_NAME); \
- _ATOM(); \
- } \
- else \
- { \
- Element_WaitForMoreData(); \
- return; \
- } \
- } \
- break; \
-
- #define ATOM_END_MK \
- ATOM(Zero) \
- ATOM(CRC32) \
- ATOM(Void) \
- ATOM_END
-
- //Parsing
- DATA_BEGIN
- LIST(Ebml)
- ATOM_BEGIN
- ATOM(Ebml_Version)
- ATOM(Ebml_ReadVersion)
- ATOM(Ebml_MaxIDLength)
- ATOM(Ebml_MaxSizeLength)
- ATOM(Ebml_DocType)
- ATOM(Ebml_DocTypeVersion)
- ATOM(Ebml_DocTypeReadVersion)
- ATOM_END_MK
- LIST(Stream)
- ATOM_BEGIN
- ATOM(Stream_Header)
- ATOM(Stream_ByteOffset)
- ATOM(Stream_FrameNumber)
- ATOM(Stream_Dts)
- ATOM_END_MK
- ATOM(CompressedIndex)
- LIST(WritingApplication)
- ATOM_BEGIN
- ATOM(WritingApplication_Name)
- ATOM(WritingApplication_Version)
- ATOM_END_MK
- LIST(SourceInfo)
- ATOM_BEGIN
- ATOM(SourceInfo_IndexCreationDate)
- ATOM(SourceInfo_SourceModificationDate)
- ATOM(SourceInfo_SourceSize)
- ATOM_END_MK
- ATOM(InformData)
- DATA_END_DEFAULT
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ibi::Zero()
-{
- Element_Name("ZeroPadding");
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::CRC32()
-{
- Element_Name("CRC32");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Void()
-{
- Element_Name("Void");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Ebml()
-{
- Element_Name("Ebml");
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Ebml_Version()
-{
- Element_Name("Version");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Ebml_ReadVersion()
-{
- Element_Name("ReadVersion");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Ebml_MaxIDLength()
-{
- Element_Name("MaxIDLength");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Ebml_MaxSizeLength()
-{
- Element_Name("MaxSizeLength");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Ebml_DocType()
-{
- Element_Name("DocType");
-
- //Parsing
- Ztring Data;
- Get_Local(Element_Size, Data, "Data"); Element_Info1(Data);
-
- //Filling
- FILLING_BEGIN();
-
- if (Data==__T("MediaInfo Index"))
- Accept("Ibi");
- else
- {
- Reject("Ibi");
- return;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Ebml_DocTypeVersion()
-{
- Element_Name("DocTypeVersion");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Ebml_DocTypeReadVersion()
-{
- Element_Name("DocTypeReadVersion");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::Stream()
-{
- Element_Name("Stream");
-
- ID_Current=(int64u)-1;
-}
-
-void File_Ibi::Stream_Header()
-{
- Element_Name("Stream Header");
- Get_EB (ID_Current, "ID");
-
- FILLING_BEGIN();
- if (Ibi)
- {
- //Filling information for ID after data
- ibi::streams::iterator IbiStream_Temp=Ibi->Streams.find((int64u)-1);
- if (IbiStream_Temp!=Ibi->Streams.end())
- {
- Ibi->Streams[ID_Current]=IbiStream_Temp->second;
- Ibi->Streams.erase(IbiStream_Temp);
- }
- }
- FILLING_END();
-}
-
-void File_Ibi::Stream_ByteOffset()
-{
- Element_Name("Byte Offset");
-
- //Parsing
- size_t Pos=0;
- int64u Offset=0;
- while (Element_Offset<Element_Size)
- {
- int64u Item;
- Get_EB (Item, "Item");
- Offset+=Item;
- Param_Info1(Pos);
- Param_Info1(Ztring::ToZtring(Offset)+__T(" (0x")+Ztring::ToZtring(Offset, 16)+__T(')'));
-
- FILLING_BEGIN();
- if (Ibi)
- {
- //Filling information for ID after data
- if (Ibi->Streams[ID_Current]==NULL)
- Ibi->Streams[ID_Current]=new ibi::stream();
- if (Pos>=Ibi->Streams[ID_Current]->Infos.size())
- {
- Ibi->Streams[ID_Current]->Infos.push_back(ibi::stream::info());
- Ibi->Streams[ID_Current]->Infos[Pos].IsContinuous=true; //default
- }
- Ibi->Streams[ID_Current]->Infos[Pos].StreamOffset=Offset;
- Pos++;
- }
- FILLING_END();
- }
-}
-
-void File_Ibi::Stream_FrameNumber()
-{
- Element_Name("Frame Number");
-
- //Parsing
- size_t Pos=0;
- int64u Offset=0;
- while (Element_Offset<Element_Size)
- {
- int64u Item;
- Get_EB (Item, "Item");
- Offset+=Item;
- Param_Info1(Pos);
- Param_Info1(Ztring::ToZtring(Offset)+__T(" (0x")+Ztring::ToZtring(Offset, 16)+__T(')'));
-
- FILLING_BEGIN();
- if (Ibi)
- {
- //Filling information for ID after data
- if (Ibi->Streams[ID_Current]==NULL)
- Ibi->Streams[ID_Current]=new ibi::stream();
- if (Pos>=Ibi->Streams[ID_Current]->Infos.size())
- {
- Ibi->Streams[ID_Current]->Infos.push_back(ibi::stream::info());
- Ibi->Streams[ID_Current]->Infos[Pos].IsContinuous=true; //default
- }
- Ibi->Streams[ID_Current]->Infos[Pos].FrameNumber=Offset;
- Pos++;
- }
- FILLING_END();
- }
-}
-
-void File_Ibi::Stream_Dts()
-{
- Element_Name("DTS");
-
- //Parsing
- int64u Item;
- Get_EB (Item, "DtsFrequencyNumerator");
- FILLING_BEGIN();
- if (Ibi)
- Ibi->Streams[ID_Current]->DtsFrequencyNumerator=Item;
- FILLING_END();
- Get_EB (Item, "DtsFrequencyDenominator");
- FILLING_BEGIN();
- if (Ibi)
- {
- Ibi->Streams[ID_Current]->DtsFrequencyDenominator=Item;
-
- //Handling of previous inverted Numerator/Denominator
- if (Ibi->Streams[ID_Current]->DtsFrequencyNumerator<Ibi->Streams[ID_Current]->DtsFrequencyDenominator)
- std::swap(Ibi->Streams[ID_Current]->DtsFrequencyNumerator, Ibi->Streams[ID_Current]->DtsFrequencyDenominator);
- }
- FILLING_END();
-
- size_t Pos=0;
- int64u Offset=0;
- while (Element_Offset<Element_Size)
- {
- int64u Item;
- Get_EB (Item, "Item");
- Offset+=Item;
- Param_Info1(Pos);
- Param_Info1(Ztring::ToZtring(Offset)+__T(" (0x")+Ztring::ToZtring(Offset, 16)+__T(')'));
-
- FILLING_BEGIN();
- if (Ibi)
- {
- //Filling information for ID after data
- if (Ibi->Streams[ID_Current]==NULL)
- Ibi->Streams[ID_Current]=new ibi::stream();
- if (Pos>=Ibi->Streams[ID_Current]->Infos.size())
- {
- Ibi->Streams[ID_Current]->Infos.push_back(ibi::stream::info());
- Ibi->Streams[ID_Current]->Infos[Pos].IsContinuous=true; //default
- }
- Ibi->Streams[ID_Current]->Infos[Pos].Dts=Offset;
- Pos++;
- }
- FILLING_END();
- }
-}
-
-void File_Ibi::CompressedIndex()
-{
- if (!Status[IsAccepted])
- {
- Reject("Ibi");
- return;
- }
-
- Element_Name("Compressed Index");
- int64u UncompressedSize;
- Get_EB (UncompressedSize, "Uncompressed size");
-
- //Sizes
- unsigned long Source_Size=(unsigned long)(Element_Size-Element_Offset);
- unsigned long Dest_Size=(unsigned long)UncompressedSize;
-
- //Uncompressing
- int8u* Dest;
- try
- {
- Dest=new int8u[Dest_Size];
- }
- catch (...)
- {
- //Memory error
- Reject();
- return;
- }
- if (uncompress((Bytef*)Dest, &Dest_Size, (const Bytef*)Buffer+Buffer_Offset+(size_t)Element_Offset, Source_Size)<0)
- {
- Skip_XX(Element_Size-Element_Offset, "Problem during the decompression");
- delete[] Dest; //Dest=NULL;
- return;
- }
-
- //Exiting this element
- Skip_XX(Element_Size-Element_Offset, "Will be parsed");
-
- //Configuring buffer
- const int8u* Buffer_Sav=Buffer;
- size_t Buffer_Size_Sav=Buffer_Size;
- int8u* Buffer_Temp_Sav=Buffer_Temp;
- size_t Buffer_Temp_Size_Sav=Buffer_Temp_Size;
- size_t Buffer_Offset_Sav=Buffer_Offset;
- size_t Buffer_Offset_Temp_Sav=Buffer_Offset_Temp;
- Buffer=NULL;
- Buffer_Size=0;
- Buffer_Temp=NULL;
- Buffer_Temp_Size=0;
- Buffer_Offset=0;
- Buffer_Offset_Temp=0;
-
- //Configuring level
- std::vector<int64u> Element_Sizes_Sav;
- size_t Element_Level_Sav=Element_Level;
- while(Element_Level)
- {
- Element_Sizes_Sav.push_back(Element_TotalSize_Get());
- Element_End0();
- }
-
- //Configuring file size
- int64u File_Size_Sav=File_Size;
- if (File_Size<File_Offset+Buffer_Offset+Element_Offset+Dest_Size)
- File_Size=File_Offset+Buffer_Offset+Element_Offset+Dest_Size;
- Element_Level++;
- Header_Fill_Size(File_Size);
- Element_Level--;
-
- //Parsing
- Buffer=Dest;
- Buffer_Size=Dest_Size;
- while (Open_Buffer_Continue_Loop());
- delete[] Dest; //Dest=NULL;
-
- //Resetting file size
- File_Size=File_Size_Sav;
- while(Element_Level)
- Element_End0();
- Element_Level++;
- Header_Fill_Size(File_Size);
- Element_Level--;
-
- //Configuring level
- while(Element_Level<Element_Level_Sav)
- {
- Element_Begin0();
- Element_Begin0();
- Header_Fill_Size(Element_Sizes_Sav[0]);
- Element_End0();
- }
-
- //Resetting buffer
- Buffer=Buffer_Sav;
- Buffer_Size=Buffer_Size_Sav;
- Buffer_Temp=Buffer_Temp_Sav;
- Buffer_Temp_Size=Buffer_Temp_Size_Sav;
- Buffer_Offset=Buffer_Offset_Sav;
- Buffer_Offset_Temp=Buffer_Offset_Temp_Sav;
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::WritingApplication()
-{
- Element_Name("WritingApplication");
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::WritingApplication_Name()
-{
- Element_Name("Name");
-
- //Parsing
- Skip_UTF8(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::WritingApplication_Version()
-{
- Element_Name("Version");
-
- //Parsing
- Skip_UTF8(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::SourceInfo()
-{
- Element_Name("Source Information");
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::SourceInfo_IndexCreationDate()
-{
- Element_Name("Index Creation Date");
-
- //Parsing
- Skip_B8( "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::SourceInfo_SourceModificationDate()
-{
- Element_Name("Source Modification Date");
-
- //Parsing
- Skip_B8( "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::SourceInfo_SourceSize()
-{
- Element_Name("Source Size");
-
- //Parsing
- Skip_B8( "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi::InformData()
-{
- Element_Name("InformData");
-
- //Parsing
- Ztring InformData_FromFile;
- Get_UTF8 (Element_Size, InformData_FromFile, "Data");
-
- //Filling
- ZtringListList Fields(InformData_FromFile);
- if (Config->Ibi_UseIbiInfoIfAvailable_Get())
- {
- for (size_t Pos=0; Pos<Fields.size(); Pos++)
- {
- if (Pos==0 || Fields[Pos].size()<2)
- {
- if (Pos)
- Pos++;
- if (Pos>Fields.size() || Fields[Pos].size()<1)
- break; //End or problem
-
- if (Fields[Pos][0]==__T("General"))
- ; //Nothing to do
- else if (Fields[Pos][0]==__T("Video"))
- Stream_Prepare(Stream_Video);
- else if (Fields[Pos][0]==__T("Audio"))
- Stream_Prepare(Stream_Audio);
- else if (Fields[Pos][0]==__T("Text"))
- Stream_Prepare(Stream_Text);
- else if (Fields[Pos][0]==__T("Other"))
- Stream_Prepare(Stream_Other);
- else if (Fields[Pos][0]==__T("Image"))
- Stream_Prepare(Stream_Image);
- else if (Fields[Pos][0]==__T("Menu"))
- Stream_Prepare(Stream_Menu);
- else
- break; //Problem
- Pos++;
- }
-
- Fill(StreamKind_Last, StreamPos_Last, Fields[Pos][0].To_UTF8().c_str(), Fields[Pos][1], true);
- if (Info_Options<Fields[Pos].size())
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Fields[Pos][0].To_UTF8().c_str(), Info_Options)=Fields[Pos][Info_Options];
- }
- }
-}
-
-//***************************************************************************
-// Data
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ibi::UInteger_Info()
-{
- switch (Element_Size)
- {
- case 1 :
- {
- Info_B1(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 2 :
- {
- Info_B2(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 3 :
- {
- Info_B3(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 4 :
- {
- Info_B4(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 5 :
- {
- Info_B5(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 6 :
- {
- Info_B6(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 7 :
- {
- Info_B7(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 8 :
- {
- Info_B8(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 16:
- {
- Info_B16(Data, "Data"); Element_Info1(Data);
- return;
- }
- default : Skip_XX(Element_Size, "Data");
- }
-}
-
-//---------------------------------------------------------------------------
-int64u File_Ibi::UInteger_Get()
-{
- switch (Element_Size)
- {
- case 1 :
- {
- int8u Data;
- Get_B1 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 2 :
- {
- int16u Data;
- Get_B2 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 3 :
- {
- int32u Data;
- Get_B3 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 4 :
- {
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 5 :
- {
- int64u Data;
- Get_B5 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 6 :
- {
- int64u Data;
- Get_B6 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 7 :
- {
- int64u Data;
- Get_B7 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 8 :
- {
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- default : Skip_XX(Element_Size, "Data");
- return 0;
- }
-}
-
-//---------------------------------------------------------------------------
-int128u File_Ibi::UInteger16_Get()
-{
- switch (Element_Size)
- {
- case 1 :
- {
- int8u Data;
- Get_B1 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 2 :
- {
- int16u Data;
- Get_B2 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 3 :
- {
- int32u Data;
- Get_B3 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 4 :
- {
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 5 :
- {
- int64u Data;
- Get_B5 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 6 :
- {
- int64u Data;
- Get_B6 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 7 :
- {
- int64u Data;
- Get_B7 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 8 :
- {
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 16:
- {
- int128u Data;
- Get_B16(Data, "Data"); Element_Info1(Data);
- return Data;
- }
- default : Skip_XX(Element_Size, "Data");
- return 0;
- }
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_IBI_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi.h
deleted file mode 100644
index 145d7acd6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Ibi files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_IbiH
-#define MediaInfo_File_IbiH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Classe File_Ibi
-//***************************************************************************
-
-class File_Ibi : public File__Analyze
-{
-public :
- File_Ibi();
- ~File_Ibi();
-
- //In
- ibi* Ibi;
-
-private :
- //Get information
- const Ztring &Get (stream_t StreamKind, size_t StreamNumber, const Ztring &Parameter, info_t KindOfInfo=Info_Text, info_t KindOfSearch=Info_Name);
-
- //Streams management
- void Streams_Accept();
- void Streams_Finish();
-
- //Buffer - Element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Zero();
- void CRC32();
- void Void();
- void Ebml();
- void Ebml_Version();
- void Ebml_ReadVersion();
- void Ebml_MaxIDLength();
- void Ebml_MaxSizeLength();
- void Ebml_DocType();
- void Ebml_DocTypeVersion();
- void Ebml_DocTypeReadVersion();
- void Stream();
- void Stream_Header();
- void Stream_ByteOffset();
- void Stream_FrameNumber();
- void Stream_Dts();
- void CompressedIndex();
- void WritingApplication();
- void WritingApplication_Name();
- void WritingApplication_Version();
- void InformData();
- void SourceInfo();
- void SourceInfo_IndexCreationDate();
- void SourceInfo_SourceModificationDate();
- void SourceInfo_SourceSize();
-
- //Data
- int64u UInteger_Get();
- int128u UInteger16_Get();
- void UInteger_Info();
-
- //Temp
- Ztring Get_Temp;
- int64u ID_Current;
- bool Ibi_MustDelete;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi_Creation.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi_Creation.cpp
deleted file mode 100644
index 13c0f1212..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi_Creation.cpp
+++ /dev/null
@@ -1,565 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_IBI
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Ibi_Creation.h"
-#include <cstring>
-#include <ctime>
-#include <zlib.h>
-#include "base64.h"
-#include "ZenLib/File.h"
-#include "ZenLib/OS_Utils.h"
-#ifdef WINDOWS
- #undef __TEXT
- #include <windows.h>
-#endif
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-extern const Char* MediaInfo_Version;
-
-//***************************************************************************
-// Ibi structure
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-ibi::ibi()
-{
-}
-
-//---------------------------------------------------------------------------
-ibi::~ibi()
-{
- for (streams::iterator Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- delete Stream->second; //Stream->second=NULL;
-}
-
-//---------------------------------------------------------------------------
-void ibi::stream::Add (const info &Info)
-{
- if (!IsSynchronized)
- {
- //Searching the right insertion point
- for (Infos_Pos=0; Infos_Pos<Infos.size(); Infos_Pos++)
- if (Info.StreamOffset<Infos[Infos_Pos].StreamOffset)
- break;
- }
-
- //Testing if new data is same as current insertion point
- if (Infos_Pos && Infos[Infos_Pos-1].FrameNumber==Info.FrameNumber && Info.FrameNumber!=(int64u)-1)
- {
- IsSynchronized=true;
- return;
- }
- if (Infos_Pos && Info.Dts==Infos[Infos_Pos-1].Dts && Info.Dts!=(int64u)-1)
- {
- //Duplicate, updating it (in case of new frame count)
- if (Infos_Pos && Info.FrameNumber!=(int64u)-1 && Info.FrameNumber<Infos[Infos_Pos-1].FrameNumber)
- {
- Infos[Infos_Pos-1].FrameNumber=Info.FrameNumber;
- Infos[Infos_Pos-1].Dts=Info.Dts;
- }
-
- IsSynchronized=true;
- return;
- }
- if (Infos_Pos && Info.StreamOffset==Infos[Infos_Pos-1].StreamOffset)
- {
- //Duplicate, updating it (in case of new frame count)
- if (Infos_Pos && Info.FrameNumber!=(int64u)-1 && Info.FrameNumber<Infos[Infos_Pos-1].FrameNumber)
- {
- Infos[Infos_Pos-1].FrameNumber=Info.FrameNumber;
- Infos[Infos_Pos-1].Dts=Info.Dts;
- }
-
- IsSynchronized=true;
- return;
- }
-
- //Previous item
- if (IsSynchronized && Infos_Pos)
- {
- Infos[Infos_Pos-1].IsContinuous=true;
- IsContinuous=true;
-
- IsModified=true;
- }
- IsSynchronized=true;
-
- //Testing if new data is same as next insertion point
- if (Infos_Pos<Infos.size() && Infos[Infos_Pos].FrameNumber==Info.FrameNumber && Info.FrameNumber!=(int64u)-1)
- {
- Infos_Pos++;
-
- IsSynchronized=true;
- return;
- }
- if (Infos_Pos<Infos.size() && Info.Dts==Infos[Infos_Pos].Dts && Info.Dts!=(int64u)-1)
- {
- Infos_Pos++;
-
- IsSynchronized=true;
- return;
- }
- if (Infos_Pos<Infos.size() && Info.StreamOffset==Infos[Infos_Pos].StreamOffset)
- {
- //Duplicate, updating it (in case of new frame count)
- if (IsSynchronized && Info.FrameNumber!=(int64u)-1)
- Infos[Infos_Pos].FrameNumber=Info.FrameNumber;
-
- Infos_Pos++;
-
- IsSynchronized=true;
- return;
- }
-
- Infos.insert(Infos.begin()+Infos_Pos, Info);
- Infos_Pos++;
-
- IsModified=true;
-}
-
-//---------------------------------------------------------------------------
-void ibi::stream::Unsynch ()
-{
- Infos_Pos=0;
- IsModified=false;
- IsContinuous=false;
- IsSynchronized=false;
-}
-
-//***************************************************************************
-// Utils
-//***************************************************************************
-
-size_t int64u2Ebml(int8u* List, int64u Value)
-{
- //1 byte
- if (Value<=126) //2^7-2
- {
- if (List)
- {
- List[0]=0x80|((int8u)Value);
- }
- return 1;
- }
-
- //2 bytes
- if (Value<=16382) //2^14-2
- {
- if (List)
- {
- List[0]=0x40|((int8u)(Value>>8));
- List[1]=(int8u)Value;
- }
- return 2;
- }
-
- //3 bytes
- if (Value<=2097150) //2^21-2
- {
- if (List)
- {
- List[0]=0x20|((int8u)(Value>>16));
- List[1]=(int8u)(Value>>8);
- List[2]=(int8u)Value;
- }
- return 3;
- }
-
- //4 bytes
- if (Value<=268435454) //2^28-2
- {
- if (List)
- {
- List[0]=0x10|((int8u)(Value>>24));
- List[1]=(int8u)(Value>>16);
- List[2]=(int8u)(Value>>8);
- List[3]=(int8u)Value;
- }
- return 4;
- }
-
- //5 bytes
- if (Value<=34359738366LL) //2^35-2
- {
- if (List)
- {
- List[0]=0x08|((int8u)(Value>>32));
- List[1]=(int8u)(Value>>24);
- List[2]=(int8u)(Value>>16);
- List[3]=(int8u)(Value>>8);
- List[4]=(int8u)Value;
- }
- return 5;
- }
-
- //6 bytes
- if (Value<=4398046511102LL) //2^42-2
- {
- if (List)
- {
- List[0]=0x04|((int8u)(Value>>40));
- List[1]=(int8u)(Value>>32);
- List[2]=(int8u)(Value>>24);
- List[3]=(int8u)(Value>>16);
- List[4]=(int8u)(Value>>8);
- List[5]=(int8u)Value;
- }
- return 6;
- }
-
- //7 bytes
- if (Value<=562949953421310LL) //2^49-2
- {
- if (List)
- {
- List[0]=0x02|((int8u)(Value>>48));
- List[1]=(int8u)(Value>>40);
- List[2]=(int8u)(Value>>32);
- List[3]=(int8u)(Value>>24);
- List[4]=(int8u)(Value>>16);
- List[5]=(int8u)(Value>>8);
- List[6]=(int8u)Value;
- }
- return 7;
- }
-
- //8 bytes
- if (Value<=72057594037927934LL) //2^56-2
- {
- if (List)
- {
- List[0]=0x01;
- List[1]=(int8u)(Value>>56);
- List[2]=(int8u)(Value>>40);
- List[3]=(int8u)(Value>>32);
- List[4]=(int8u)(Value>>24);
- List[5]=(int8u)(Value>>16);
- List[6]=(int8u)(Value>>8);
- List[7]=(int8u)Value;
- }
- return 8;
- }
-
- if (List)
- List[0]=0xFF;
- return 1;
-}
-
-size_t EbmlBlock(int8u* List, size_t List_MaxSize, int64u Code, int8u* Content, size_t Content_Size)
-{
- if (Content_Size==0)
- return 0;
-
- size_t Code_EbmlSize=int64u2Ebml(NULL, Code);
- size_t Content_EbmlSize=int64u2Ebml(NULL, Content_Size);
-
- if (List && Code_EbmlSize+Content_EbmlSize+Content_Size>List_MaxSize)
- return 0;
-
- if (List)
- {
- List+=int64u2Ebml(List, Code);
- List+=int64u2Ebml(List, Content_Size);
- std::memcpy(List, Content, Content_Size);
- //List+=Content_Size; //Content
- }
-
- return Code_EbmlSize+Content_EbmlSize+Content_Size;
-}
-
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ibi_Creation::File_Ibi_Creation()
-{
-}
-
-//---------------------------------------------------------------------------
-File_Ibi_Creation::~File_Ibi_Creation()
-{
- for (size_t Pos=0; Pos<Buffers.size(); Pos++)
- delete Buffers[Pos];
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ibi_Creation::Set(const ibi &Ibi)
-{
- //Source information
- if (!Ibi.FileName.empty())
- {
- int64s CurrentDate=(int64s)time(NULL)*1000000000LL; //From seconds to nanoseconds
- CurrentDate-=978307200000000000LL; //Count of nanoseconds between January 1, 1970 (time_t base) and January 1, 2001 (EBML base)
-
- int64s LastModifiedDate=0;
- bool LastModifiedDate_IsValid=false;
- int64s FileSize=0;
- bool FileSize_IsValid=false;
-
- #if defined WINDOWS
- HANDLE File_Handle;
- #ifdef UNICODE
- File_Handle=CreateFileW(Ibi.FileName.c_str(), 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
- #else
- File_Handle=CreateFile(Ibi.FileName.To_Local().c_str(), 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
- #endif //UNICODE
- if (File_Handle!=INVALID_HANDLE_VALUE)
- {
- FILETIME TimeFT;
- if (GetFileTime(File_Handle, NULL, NULL, &TimeFT))
- {
- LastModifiedDate=(0x100000000LL*TimeFT.dwHighDateTime+TimeFT.dwLowDateTime)*100; //From 100-nanoseconds to nanoseconds
- LastModifiedDate-=12622780800000000LL; //Count of nanoseconds between January 1, 1601 (Windows base) and January 1, 2001 (EBML base)
- LastModifiedDate_IsValid=true;
- }
-
- DWORD High; DWORD Low=GetFileSize(File_Handle, &High);
- if (Low!=INVALID_FILE_SIZE)
- {
- FileSize=0x100000000ULL*High+Low;
- FileSize_IsValid=true;
- }
-
- CloseHandle(File_Handle);
- }
- #endif //WINDOWS
-
- size_t BlockSizeWithoutHeader=1+1+8; //Index creation date + Source file size
- if (LastModifiedDate_IsValid)
- BlockSizeWithoutHeader+=1+1+8; //Source file modification date
- if (FileSize_IsValid)
- BlockSizeWithoutHeader+=1+1+8; //Source file size
-
- buffer* Buffer=new buffer;
- Buffer->Content=new int8u[1+int64u2Ebml(NULL, 1+int64u2Ebml(NULL, BlockSizeWithoutHeader))+BlockSizeWithoutHeader];
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 0x05); //Source information
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, BlockSizeWithoutHeader); //Size
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 0x01); //Index creation date
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 8); //Size
- int64u2BigEndian(Buffer->Content+Buffer->Size, (int64u)CurrentDate); Buffer->Size+=8; //Content
- if (LastModifiedDate_IsValid)
- {
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 0x02); //Source file modification date
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 8); //Size
- int64u2BigEndian(Buffer->Content+Buffer->Size, (int64u)LastModifiedDate); Buffer->Size+=8; //Content
- }
- if (FileSize_IsValid)
- {
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 0x03); //Source file size
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 8); //Size
- int64u2BigEndian(Buffer->Content+Buffer->Size, (int64u)CurrentDate); Buffer->Size+=8; //Content
- }
- Buffers.push_back(Buffer);
- }
-
- //Writing application
- {
- string Version=Ztring(MediaInfo_Version).SubString(__T(" - v"), Ztring()).To_UTF8();
- buffer* Buffer=new buffer;
- Buffer->Content=new int8u[1+int64u2Ebml(NULL, 1+1+9+1+int64u2Ebml(NULL, Version.size())+Version.size())+1+1+9+1+int64u2Ebml(NULL, Version.size())+Version.size()];
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 0x03); //Writing application
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 1+1+9+1+1+Version.size()); //Size
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 0x01); //Writing application name
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 9); //Size
- std::memcpy(Buffer->Content+Buffer->Size, "MediaInfo", 9); Buffer->Size+=9; //Content
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 0x02); //Writing application version
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, Version.size()); //Size
- std::memcpy(Buffer->Content+Buffer->Size, Version.c_str(), Version.size()); Buffer->Size+=Version.size(); //Content
- Buffers.push_back(Buffer);
- }
-
- //InformData
- if (!Ibi.Inform_Data.empty())
- {
- string Content(Ibi.Inform_Data.To_UTF8());
- buffer* Buffer=new buffer;
- Buffer->Content=new int8u[1+int64u2Ebml(NULL, Content.size())+Content.size()];
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 0x04); //InformData
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, Content.size()); //Size
- std::memcpy(Buffer->Content+Buffer->Size, Content.c_str(), Content.size()); Buffer->Size+=Content.size(); //Content
- Buffers.push_back(Buffer);
- }
-
- //Streams
- for (ibi::streams::const_iterator IbiStream_Temp=Ibi.Streams.begin(); IbiStream_Temp!=Ibi.Streams.end(); ++IbiStream_Temp)
- Add(IbiStream_Temp->first, *IbiStream_Temp->second);
-}
-
-//---------------------------------------------------------------------------
-void File_Ibi_Creation::Add(int64u ID, const ibi::stream &Stream)
-{
- //Useful?
- if (Stream.Infos.empty())
- return;
-
- //Header
- int8u* IbiHeader;
- size_t IbiHeader_Offset=0;
- if (ID!=(int64u)-1)
- {
- IbiHeader=new int8u[int64u2Ebml(NULL, ID)];
- IbiHeader_Offset+=int64u2Ebml(IbiHeader, ID);
- }
- else
- IbiHeader=NULL;
-
- //Init - Byte Offset
- int8u* IbiByteOffset=new int8u[8*Stream.Infos.size()];
- size_t IbiByteOffset_Offset=0;
-
- //Init - Frame Number
- int8u* IbiFrameNumber=new int8u[8*Stream.Infos.size()];
- size_t IbiFrameNumber_Offset=0;
-
- //Init - DTS
- int8u* IbiDts=new int8u[16+8*Stream.Infos.size()];
- size_t IbiDts_Offset=0;
- IbiDts_Offset+=int64u2Ebml(IbiDts+IbiDts_Offset, Stream.DtsFrequencyNumerator);
- IbiDts_Offset+=int64u2Ebml(IbiDts+IbiDts_Offset, Stream.DtsFrequencyDenominator);
-
- //Per item
- for (size_t Pos=0; Pos<Stream.Infos.size(); Pos++)
- {
- IbiByteOffset_Offset+=int64u2Ebml(IbiByteOffset+IbiByteOffset_Offset, Stream.Infos[Pos].StreamOffset-(Pos?Stream.Infos[Pos-1].StreamOffset:0));
- IbiFrameNumber_Offset+=int64u2Ebml(IbiFrameNumber+IbiFrameNumber_Offset, Stream.Infos[Pos].FrameNumber-(Pos?Stream.Infos[Pos-1].FrameNumber:0));
- IbiDts_Offset+=int64u2Ebml(IbiDts+IbiDts_Offset, Stream.Infos[Pos].Dts-(Pos?Stream.Infos[Pos-1].Dts:0));
- }
-
- //Sizes
- size_t IbiHeader_EbmlSize=EbmlBlock(NULL, 0, 0x01, NULL, IbiHeader_Offset);
- size_t IbiByteOffset_EbmlSize=EbmlBlock(NULL, 0, 0x02, NULL, IbiByteOffset_Offset);
- size_t IbiFrameNumber_EbmlSize=EbmlBlock(NULL, 0, 0x03, NULL, IbiFrameNumber_Offset);
- size_t IbiDts_EbmlSize=EbmlBlock(NULL, 0, 0x04, NULL, IbiDts_Offset);
-
- //Buffer
- buffer* Buffer=new buffer;
- Buffer->Content=new int8u[1+int64u2Ebml(NULL, IbiHeader_EbmlSize+IbiByteOffset_EbmlSize+IbiFrameNumber_EbmlSize+IbiDts_EbmlSize)+IbiHeader_EbmlSize+IbiByteOffset_EbmlSize+IbiFrameNumber_EbmlSize+IbiDts_EbmlSize];
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, 0x01); //Stream
- Buffer->Size+=int64u2Ebml(Buffer->Content+Buffer->Size, IbiHeader_EbmlSize+IbiByteOffset_EbmlSize+IbiFrameNumber_EbmlSize+IbiDts_EbmlSize); //Size
- Buffer->Size+=EbmlBlock(Buffer->Content+Buffer->Size, IbiHeader_EbmlSize, 0x01, IbiHeader, IbiHeader_Offset); //IbiHeader
- Buffer->Size+=EbmlBlock(Buffer->Content+Buffer->Size, IbiByteOffset_EbmlSize, 0x02, IbiByteOffset, IbiByteOffset_Offset); //ByteOffset
- Buffer->Size+=EbmlBlock(Buffer->Content+Buffer->Size, IbiFrameNumber_EbmlSize, 0x03, IbiFrameNumber, IbiFrameNumber_Offset); //FrameNumber
- Buffer->Size+=EbmlBlock(Buffer->Content+Buffer->Size, IbiDts_EbmlSize, 0x04, IbiDts, IbiDts_Offset); //Dts
-
- Buffers.push_back(Buffer);
-
- //Finish
- delete[] IbiByteOffset; //IbiByteOffset=NULL;
- delete[] IbiFrameNumber; //IbiFrameNumber=NULL;
- delete[] IbiDts; //IbiDts=NULL;
-}
-
-Ztring File_Ibi_Creation::Finish()
-{
- //Test
- if (Buffers.empty())
- return Ztring();
-
- //Size computing
- size_t Size=4+1+2+1+15+2+1+1; //Header size
- for (size_t Pos=0; Pos<Buffers.size(); Pos++)
- Size+=Buffers[Pos]->Size;
-
- //Buffer creation
- int8u* Main=new int8u[Size];
- size_t Main_Offset=0;
-
- //Header
- size_t Header_Offset=4+1+2+1+15+2+1+1; //Size (Code + Size + Content, twice)
- Main_Offset+=int64u2Ebml(Main+Main_Offset, 0x0A45DFA3); //EBML
- Main_Offset+=int64u2Ebml(Main+Main_Offset, Header_Offset-(4+1)); //Size (Complete header size minus header header size)
- Main_Offset+=int64u2Ebml(Main+Main_Offset, 0x0282); //DocType
- Main_Offset+=int64u2Ebml(Main+Main_Offset, 15); //Size
- std::memcpy(Main+Main_Offset, "MediaInfo Index", 15); Main_Offset+=15; //Content
- Main_Offset+=int64u2Ebml(Main+Main_Offset, 0x0285); //DocTypeReadVersion
- Main_Offset+=int64u2Ebml(Main+Main_Offset, 1); //Size
- Main[Main_Offset]=0x01; Main_Offset+=1; //Content
-
- //for each stream
- for (size_t Pos=0; Pos<Buffers.size(); Pos++)
- {
- std::memcpy(Main+Main_Offset, Buffers[Pos]->Content, Buffers[Pos]->Size);
- Main_Offset+=Buffers[Pos]->Size;
- }
-
- //Compressed
- if (Header_Offset < Main_Offset)
- {
- buffer Buffer;
- size_t UncompressedSize = Main_Offset - Header_Offset;
- int8u* Compressed = new int8u[UncompressedSize];
- unsigned long CompressedSize = (unsigned long)Main_Offset;
- if (compress2(Compressed, &CompressedSize, Main + Header_Offset, (unsigned long)UncompressedSize, Z_BEST_COMPRESSION) == Z_OK && CompressedSize < UncompressedSize)
- {
- Main_Offset = Header_Offset; //Removing uncompressed content
- Main_Offset += int64u2Ebml(Main + Main_Offset, 0x02); //Compressed index
- Main_Offset += int64u2Ebml(Main + Main_Offset, int64u2Ebml(NULL, UncompressedSize) + CompressedSize); //Size
- Main_Offset += int64u2Ebml(Main + Main_Offset, UncompressedSize); //Uncompressed size
-
- //Filling
- Buffer.Size = Main_Offset + CompressedSize;
- Buffer.Content = new int8u[Buffer.Size];
- std::memcpy(Buffer.Content, Main, Main_Offset); //File header + compressed data header
- std::memcpy(Buffer.Content + Main_Offset, Compressed, CompressedSize); //Compressed data
- }
- else
- {
- //Filling
- Buffer.Size = Main_Offset;
- Buffer.Content = new int8u[Buffer.Size];
- std::memcpy(Buffer.Content, Main, Main_Offset);
- }
-
- std::string Data_Raw((const char*)Buffer.Content, Buffer.Size);
- std::string Data_Base64(Base64::encode(Data_Raw));
-
- delete[] Main; //Main=NULL;
-
- return Ztring().From_UTF8(Data_Base64);
- }
- else
- {
- delete[] Main; //Main=NULL;
-
- return Ztring();
- }
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_IBI_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi_Creation.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi_Creation.h
deleted file mode 100644
index 6942e1730..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ibi_Creation.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Ibi files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Ibi_CreationH
-#define MediaInfo_File_Ibi_CreationH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Ztring.h"
-#include <vector>
-#include <map>
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Ibi structure
-//***************************************************************************
-
-struct ibi
-{
- struct stream
- {
- int64u DtsFrequencyNumerator;
- int64u DtsFrequencyDenominator;
- struct info
- {
- int64u StreamOffset;
- int64u FrameNumber;
- int64u Dts;
- bool IsContinuous;
-
- info()
- {
- StreamOffset=(int64u)-1;
- FrameNumber=(int64u)-1;
- Dts=(int64u)-1;
- IsContinuous=false;
- }
- };
- std::vector<info> Infos;
- size_t Infos_Pos;
- bool IsContinuous;
- bool IsModified;
- bool IsSynchronized;
-
- stream()
- {
- DtsFrequencyNumerator=1000000000; //nanosecond
- DtsFrequencyDenominator=1;
- Infos_Pos=0;
- IsContinuous=false;
- IsModified=false;
- IsSynchronized=false;
- }
-
- void Add (const info &Info);
- void Unsynch();
- };
- typedef std::map<int64u, stream*> streams;
- streams Streams;
-
- Ztring Inform_Data;
- Ztring FileName;
-
- //Constructor/Destructor
- ibi();
- ~ibi();
-};
-
-//***************************************************************************
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-//***************************************************************************
-
-class File_Ibi_Creation
-{
-public :
- File_Ibi_Creation();
- File_Ibi_Creation(const ibi &Ibi) {Set(Ibi);}
- ~File_Ibi_Creation();
-
- void Set(const ibi &Ibi);
- void Add(int64u ID, const ibi::stream &Stream);
- Ztring Finish();
-
-private :
- struct buffer
- {
- int8u* Content;
- size_t Size;
-
- buffer()
- {
- Content=NULL;
- Size=0;
- }
-
- ~buffer()
- {
- delete[] Content; //Content=NULL;
- }
- };
- std::vector<buffer*> Buffers;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ism.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ism.cpp
deleted file mode 100644
index 7098dd9ec..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ism.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ISM_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Ism.h"
-#include <set>
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/Format/Http/Http_Utils.h"
-#include "tinyxml2.h"
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ism::File_Ism()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Ism;
- StreamIDs_Width[0]=sizeof(size_t)*2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_Ism::~File_Ism()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ism::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "ISM");
-}
-
-//---------------------------------------------------------------------------
-void File_Ism::Streams_Finish()
-{
- if (ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Ism::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ism::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- {
- XMLElement* Root=document.FirstChildElement("smil");
- if (Root)
- {
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- std::set<Ztring> FileNames;
-
- XMLElement* Body=Root->FirstChildElement();
- while (Body)
- {
- if (string(Body->Value())=="body")
- {
- XMLElement* Switch=Body->FirstChildElement();
- while (Switch)
- {
- if (string(Switch->Value())=="switch")
- {
- Accept("ISM");
-
- XMLElement* Stream=Switch->FirstChildElement();
- while (Stream)
- {
- string Value(Stream->Value());
- if (Value=="video" || Value=="videostream" || Value=="audio" || Value=="audiostream" || Value=="text" || Value=="textstream")
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
-
- if (Value=="video" || Value=="videostream")
- ReferenceFile.StreamKind=Stream_Video;
- if (Value=="audio" || Value=="audiostream")
- ReferenceFile.StreamKind=Stream_Audio;
- if (Value=="text" || Value=="textstream" )
- ReferenceFile.StreamKind=Stream_Text;
-
- const char* Attribute=Stream->Attribute("src");
- if (Attribute)
- ReferenceFile.FileNames.push_back(Ztring().From_UTF8(Attribute));
-
- XMLElement* Param=Stream->FirstChildElement();
- while (Param)
- {
- if (string(Param->Value())=="param")
- {
- Attribute=Param->Attribute("name");
- if (Attribute && Ztring().From_UTF8(Attribute)==__T("trackID"))
- {
- Attribute=Param->Attribute("value");
- if (Attribute)
- ReferenceFile.StreamID=Ztring().From_UTF8(Attribute).To_int64u();
- }
- }
- Param=Param->NextSiblingElement();
- }
-
- if (!ReferenceFile.FileNames.empty() && !ReferenceFile.FileNames[0].empty() && FileNames.find(ReferenceFile.FileNames[0])==FileNames.end())
- {
- ReferenceFiles->References.push_back(ReferenceFile);
- FileNames.insert(ReferenceFile.FileNames[0]);
- }
- }
-
- Stream=Stream->NextSiblingElement();
- }
- }
-
- Switch=Switch->NextSiblingElement();
- }
- }
-
- Body=Body->NextSiblingElement();
- }
- }
- else
- {
- Reject("ISM");
- return false;
- }
- }
-
- Element_Offset=File_Size;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_ISM_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ism.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ism.h
deleted file mode 100644
index 545f59204..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ism.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DXW files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_IsmH
-#define MediaInfo_File_IsmH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_Ism
-//***************************************************************************
-
-class File_Ism : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Ism();
- ~File_Ism();
-
-private :
- //Streams management
- void Streams_Accept ();
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ivf.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ivf.cpp
deleted file mode 100644
index 93ed2e32c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ivf.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-// From : http://www.webmproject.org/
-// Specs: http://wiki.multimedia.cx/index.php?title=IVF
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_IVF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Ivf.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ivf::FileHeader_Begin()
-{
- //Synchro
- if (4>Buffer_Size)
- return false;
- if (Buffer[0]!=0x44 //"DKIF"
- || Buffer[1]!=0x4B
- || Buffer[2]!=0x49
- || Buffer[3]!=0x46)
- {
- Reject();
- return false;
- }
- if (6>Buffer_Size)
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Ivf::FileHeader_Parse()
-{
- //Parsing
- int32u frame_rate_num, frame_rate_den, frame_count, fourcc;
- int16u version, header_size, width, height;
-
- Skip_C4 ( "Signature");
- Get_L2 (version, "Version");
- if (version==0)
- {
- Get_L2 (header_size, "Header Size");
- if (header_size>=32)
- {
- Get_C4 (fourcc, "Fourcc");
- Get_L2 (width, "Width");
- Get_L2 (height, "Height");
- Get_L4 (frame_rate_num, "FrameRate Numerator");
- Get_L4 (frame_rate_den, "FrameRate Denominator");
- Get_L4 (frame_count, "Frame Count");
- Skip_L4( "Unused");
- if (header_size-32)
- Skip_XX(header_size-32, "Unknown");
- }
- else
- {
- fourcc=0x00000000;
- width=0;
- height=0;
- frame_rate_num=0;
- frame_rate_den=0;
- frame_count=0;
- }
- }
- else
- {
- header_size=0;
- fourcc=0x00000000;
- width=0;
- height=0;
- frame_rate_num=0;
- frame_rate_den=0;
- frame_count=0;
- }
-
- FILLING_BEGIN();
- Accept("IVF");
-
- Fill(Stream_General, 0, General_Format, "IVF");
-
- if (version==0 && header_size>=32)
- {
- Stream_Prepare(Stream_Video);
- CodecID_Fill(Ztring().From_CC4(fourcc), Stream_Video, 0, InfoCodecID_Format_Riff);
- Fill(Stream_Video, 0, Video_FrameRate, (float)frame_rate_num / frame_rate_den);
- Fill(Stream_Video, 0, Video_FrameCount, frame_count);
- Fill(Stream_Video, 0, Video_Width, width);
- Fill(Stream_Video, 0, Video_Height, height);
- Fill(Stream_Video, 0, Video_StreamSize, File_Size-header_size-12*frame_count); //Overhead is 12 byte per frame
- }
-
- //No more need data
- Finish("IVF");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_IVF_*
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ivf.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ivf.h
deleted file mode 100644
index 3180c5ec1..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ivf.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-// Information about IVF files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_IvfH
-#define MediaInfo_IvfH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Ivf
-//***************************************************************************
-
-class File_Ivf : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
-private :
- //Buffer
- bool FileHeader_Begin();
- void FileHeader_Parse();
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Lxf.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Lxf.cpp
deleted file mode 100644
index 56c6a5ee0..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Lxf.cpp
+++ /dev/null
@@ -1,1860 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_LXF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Lxf.h"
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_DVDIF_YES)
- #include "MediaInfo/Multiple/File_DvDif.h"
-#endif
-#if defined(MEDIAINFO_VC3_YES)
- #include "MediaInfo/Video/File_Vc3.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_DTS_YES)
- #include "MediaInfo/Audio/File_Dts.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_ChannelGrouping.h"
-#endif
-#if defined(MEDIAINFO_DOLBYE_YES)
- #include "MediaInfo/Audio/File_DolbyE.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_SmpteSt0337.h"
-#endif
-#if defined(MEDIAINFO_ANCILLARY_YES)
- #include "MediaInfo/Multiple/File_Ancillary.h"
-#endif //defined(MEDIAINFO_ANCILLARY_YES)
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include <bitset>
-#include <MediaInfo/MediaInfo_Internal.h>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-const char* Lxf_Format_Video[16]=
-{
- "JPEG",
- "MPEG Video", //Version 1
- "MPEG Video", //Version 2, 4:2:0
- "MPEG Video", //Version 2, 4:2:2
- "DV", //25 Mbps 4:1:1 or 4:2:0
- "DV", //DVCPRO
- "DV", //DVCPRO 50 / HD
- "RGB", //RGB uncompressed
- "Gray", //Gray uncompressed
- "MPEG Video", //Version 2, 4:2:2, GOP=9
- "AVC",
- "AVC",
- "AVC",
- "AVC",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Lxf_PictureType[4]=
-{
- "I", //Closed
- "I", //Open
- "P",
- "B",
-};
-
-//---------------------------------------------------------------------------
-extern const float32 Mpegv_frame_rate[]; //In Video/File_Mpegv.cpp
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Lxf::File_Lxf()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("LXF");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Lxf;
- StreamIDs_Width[0]=4; //2 numbers for Code, 2 numbers for subcode
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- MustSynchronize=true;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Streams
- #if defined(MEDIAINFO_ANCILLARY_YES)
- Ancillary=NULL;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
-
- //Temp
- LookingForLastFrame=false;
- Stream_Count=0;
- Info_General_StreamSize=0;
- Video_Sizes_Pos=(size_t)-1;
- Audio_Sizes_Pos=(size_t)-1;
-
- //Demux
- #if MEDIAINFO_DEMUX
- DemuxParser=NULL;
- #endif //MEDIAINFO_DEMUX
-
- //Seek
- #if MEDIAINFO_SEEK
- SeekRequest=(int64u)-1;
- #endif //MEDIAINFO_SEEK
- FrameRate=0;
- TimeStamp_Rate=720000;
- Duration_Detected=false;
- LastAudio_BufferOffset=(int64u)-1;
-}
-
-//---------------------------------------------------------------------------
-File_Lxf::~File_Lxf()
-{
- for (size_t Pos=0; Pos<Videos.size(); Pos++)
- for (size_t Pos2=0; Pos2<Videos[Pos].Parsers.size(); Pos2++)
- delete Videos[Pos].Parsers[Pos2];
- for (size_t Pos=0; Pos<Audios.size(); Pos++)
- for (size_t Pos2=0; Pos2<Audios[Pos].Parsers.size(); Pos2++)
- delete Audios[Pos].Parsers[Pos2];
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Lxf::FileHeader_Begin()
-{
- //Synchro
- if (8>Buffer_Size)
- return false;
- if (Buffer[0]!=0x4C //"LEITCH"
- || Buffer[1]!=0x45
- || Buffer[2]!=0x49
- || Buffer[3]!=0x54
- || Buffer[4]!=0x43
- || Buffer[5]!=0x48
- || Buffer[6]!=0x00
- || Buffer[7]!=0x00)
- {
- Reject();
- return false;
- }
-
- return true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Lxf::Streams_Fill()
-{
- Fill(Stream_General, 0, General_Format_Version, __T("Version "+Ztring::ToZtring(Version)));
-
- for (size_t Pos=2; Pos<Videos.size(); Pos++) //TODO: better handling of fill/finish for Ancillary data
- if (Videos[Pos].Parsers.size()==1)
- Streams_Fill_PerStream(Videos[Pos].Parsers[0], Stream_Video, Pos, Videos[Pos].Format);
- for (size_t Pos=0; Pos<Audios.size(); Pos++)
- if (Audios[Pos].Parsers.size()==1)
- Streams_Fill_PerStream(Audios[Pos].Parsers[0], Stream_Audio, Pos, Audios[Pos].Format);
-
- //FrameRate
- if (FrameRate && Retrieve(Stream_Video, 0, Video_FrameRate).empty())
- Fill(Stream_Video, 0, Video_FrameRate, FrameRate, 3);
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Streams_Fill_PerStream(File__Analyze* Parser, stream_t Container_StreamKind, size_t Parser_Pos, int8u Format)
-{
- if (Parser==NULL)
- return;
-
- Fill(Parser);
- if (Parser->Count_Get(Stream_Audio) && Config->File_Audio_MergeMonoStreams_Get() && Parser->Retrieve(Stream_Audio, 0, Audio_Format)==__T("PCM"))
- {
- if (Count_Get(Stream_Audio)==0)
- {
- Merge(*Parser);
- Fill(Stream_Audio, 0, Audio_Channel_s_, Audio_Sizes.size(), 10, true);
- int64u BitRate=Retrieve(Stream_Audio, 0, Audio_BitRate).To_int64u();
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate*Audio_Sizes.size(), 10, true);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_ForceIds_Get())
- {
- for (size_t Audio_Pos=0; Audio_Pos<Audio_Sizes.size(); Audio_Pos++)
- Fill(StreamKind_Last, StreamPos_Last, General_ID, 0x200+Audio_Pos);
- }
- #endif //MEDIAINFO_DEMUX
- }
- }
- else
- {
- Merge(*Parser);
-
- Ztring LawRating=Parser->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Parser->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_ForceIds_Get())
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Parser->Count_Get((stream_t)StreamKind); StreamPos++)
- {
- Ztring ID;
- if (Parser->Count_Get(Stream_Audio) && Parser->Retrieve(Stream_Audio, 0, Audio_MuxingMode)==__T("AES3") && Parser_Pos%2)
- ID+=Ztring::ToZtring(0x100*Container_StreamKind+Parser_Pos-1)+__T(" / ");
- ID+=Ztring::ToZtring(0x100*Container_StreamKind+Parser_Pos);
- if (!Parser->Retrieve((stream_t)StreamKind, StreamPos, General_ID).empty())
- ID+=__T('-')+Parser->Retrieve((stream_t)StreamKind, StreamPos, General_ID);
- Fill((stream_t)StreamKind, Count_Get((stream_t)StreamKind)-Parser->Count_Get((stream_t)StreamKind)+StreamPos, General_ID, ID, true);
- }
- #endif //MEDIAINFO_DEMUX
- }
- if (Format!=(int8u)-1)
- Fill(Container_StreamKind, Container_StreamKind==Stream_Video?0:Parser_Pos, Fill_Parameter(Container_StreamKind, Generic_CodecID), Format);
- if (Container_StreamKind==Stream_Video)
- for (size_t Pos=Count_Get(Stream_Audio)-Parser->Count_Get(Stream_Audio); Pos<Count_Get(Stream_Audio); Pos++)
- Fill(Stream_Audio, Pos, Audio_MuxingMode, Parser->Retrieve(Stream_General, 0, General_Format));
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Streams_Finish()
-{
- if (Videos.size()>1 && Videos[1].Parsers.size()==1) //TODO: better handling of fill/finish for Ancillary data
- {
- Finish(Videos[1].Parsers[0]);
- Streams_Fill_PerStream(Videos[1].Parsers[0], Stream_Video, 1);
- }
- if (Videos.size()>2 && Videos[2].Parsers.size()==1)
- {
- Finish(Videos[2].Parsers[0]);
- Merge(*Videos[2].Parsers[0], Stream_Video, 0, 0);
-
- Ztring LawRating=Videos[2].Parsers[0]->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Videos[2].Parsers[0]->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
-
- if (Audios_Header.TimeStamp_End!=(int64u)-1 && Audios_Header.TimeStamp_Begin!=(int64u)-1 && Audios_Header.Duration_First!=(int64u)-1)
- {
- int64u Duration=float64_int64s(((float64)(Audios_Header.TimeStamp_End-Audios_Header.TimeStamp_Begin))/TimeStamp_Rate*1000);
- int64u FrameCount=float64_int64s(((float64)(Audios_Header.TimeStamp_End-Audios_Header.TimeStamp_Begin))/Audios_Header.Duration_First);
- for (size_t Pos=0; Pos<Count_Get(Stream_Audio); Pos++)
- {
- if (Retrieve(Stream_Audio, Pos, Audio_Duration).empty())
- Fill(Stream_Audio, Pos, Audio_Duration, Duration);
- if (Retrieve(Stream_Audio, Pos, Audio_FrameCount).empty())
- Fill(Stream_Audio, Pos, Audio_FrameCount, FrameCount);
- }
- Info_General_StreamSize+=FrameCount*0x48;
- }
- if (Videos_Header.TimeStamp_End!=(int64u)-1 && Videos_Header.TimeStamp_Begin!=(int64u)-1)
- {
- int64u Duration=float64_int64s(((float64)(Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin))/TimeStamp_Rate*1000);
- int64u FrameCount=float64_int64s(((float64)(Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin))/Videos_Header.Duration);
- if (Duration)
- for (size_t Pos=0; Pos<Count_Get(Stream_Video); Pos++)
- Fill(Stream_Video, Pos, Video_Duration, Duration, 10, true);
- Info_General_StreamSize+=FrameCount*0x48;
-
- if (Count_Get(Stream_Video)==1 && Retrieve(Stream_Video, 0, Video_BitRate).empty())
- {
- for (size_t Pos=0; Pos<Videos.size(); Pos++)
- if (Videos[Pos].BytesPerFrame!=(int64u)-1)
- Info_General_StreamSize+=Videos[Pos].BytesPerFrame*FrameCount;
- for (size_t Pos=0; Pos<Audios.size(); Pos++)
- if (Audios[Pos].BytesPerFrame!=(int64u)-1)
- Info_General_StreamSize+=Audios[Pos].BytesPerFrame*Retrieve(Stream_Audio, Pos, Audio_FrameCount).To_int64u();
- Fill(Stream_General, 0, General_StreamSize, Info_General_StreamSize);
- if (Info_General_StreamSize<File_Size)
- Fill(Stream_Video, 0, Video_StreamSize, File_Size-Info_General_StreamSize);
- }
- }
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Lxf::Synchronize()
-{
- //Synchronizing
- while (Buffer_Offset+20<=Buffer_Size && ( Buffer[Buffer_Offset ]!=0x4C
- || Buffer[Buffer_Offset+ 1]!=0x45
- || Buffer[Buffer_Offset+ 2]!=0x49
- || Buffer[Buffer_Offset+ 3]!=0x54
- || Buffer[Buffer_Offset+ 4]!=0x43
- || Buffer[Buffer_Offset+ 5]!=0x48
- || Buffer[Buffer_Offset+ 6]!=0x00
- || Buffer[Buffer_Offset+ 7]!=0x00
- ))
- {
- Buffer_Offset+=6+2;
- while (Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Buffer_Offset+=2;
- if (Buffer_Offset>=Buffer_Size || Buffer[Buffer_Offset-1]==0x00)
- Buffer_Offset--;
- Buffer_Offset-=6;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+20>Buffer_Size)
- {
- while (Buffer_Offset+8>Buffer_Size)
- if (Buffer_Offset+8==Buffer_Size && CC8(Buffer+Buffer_Offset)!=0x4C45495443480000LL)
- Buffer_Offset++;
- else
- break;
- if (Buffer_Offset+7==Buffer_Size && CC7(Buffer+Buffer_Offset)!=0x4C454954434800LL)
- Buffer_Offset++;
- if (Buffer_Offset+6==Buffer_Size && CC6(Buffer+Buffer_Offset)!=0x4C4549544348LL)
- Buffer_Offset++;
- if (Buffer_Offset+5==Buffer_Size && CC5(Buffer+Buffer_Offset)!=0x4C45495443LL)
- Buffer_Offset++;
- if (Buffer_Offset+4==Buffer_Size && CC4(Buffer+Buffer_Offset)!=0x4C454954)
- Buffer_Offset++;
- if (Buffer_Offset+3==Buffer_Size && CC3(Buffer+Buffer_Offset)!=0x4C4549)
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x4C45)
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0x4C)
- Buffer_Offset++;
- return false;
- }
-
- if (!Status[IsAccepted])
- {
- Accept();
-
- Fill(Stream_General, 0, General_Format, "LXF");
-
- File_Buffer_Size_Hint_Pointer=Config->File_Buffer_Size_Hint_Pointer_Get();
- }
-
- #if MEDIAINFO_SEEK
- //TimeStamp
- if (SeekRequest!=(int64u)-1)
- {
- if (TimeOffsets.find(File_Offset+Buffer_Offset)==TimeOffsets.end()) //Not already saved
- {
- if (Buffer_Offset+0x48>=Buffer_Size)
- return false;
- int32u Type =LittleEndian2int32u(Buffer+Buffer_Offset+16);
- if (Type==0) //Video
- {
- //Filling with the new frame
- Version=LittleEndian2int32u(Buffer+Buffer_Offset+8);
- int64u TimeStamp, Duration;
- switch (Version)
- {
- case 0 : TimeStamp =LittleEndian2int32u(Buffer+Buffer_Offset+24);
- Duration =LittleEndian2int32u(Buffer+Buffer_Offset+28);
- break;
- case 1 : TimeStamp =LittleEndian2int64u(Buffer+Buffer_Offset+24);
- Duration =LittleEndian2int64u(Buffer+Buffer_Offset+32);
- break;
- default: TimeStamp=Duration=0;
- }
- int8u PictureType=(LittleEndian2int8u (Buffer+Buffer_Offset+42)&0xC0)>>6;
- TimeOffsets[File_Offset+Buffer_Offset]=stream_header(TimeStamp, TimeStamp+Duration, Duration, PictureType);
- SeekRequest_Divider=2;
- }
- }
- if (Read_Buffer_Seek(2, (int64u)-1, (int64u)-1))
- return false;
- }
- #endif //MEDIAINFO_SEEK
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Lxf::Synched_Test()
-{
- if (Video_Sizes_Pos<Video_Sizes.size())
- return true;
- if (Audio_Sizes_Pos<Audio_Sizes.size())
- return true;
-
- //Must have enough buffer for having header
- if (Buffer_Offset+16>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (CC8(Buffer+Buffer_Offset)!=0x4C45495443480000LL)
- Synched=false;
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Lxf::Read_Buffer_Unsynched()
-{
- Video_Sizes.clear();
- Audio_Sizes.clear();
- LastAudio_BufferOffset=(int64u)-1;
- LastAudio_TimeOffset=stream_header();
- Video_Sizes_Pos=(size_t)-1;
- Audio_Sizes_Pos=(size_t)-1;
- Videos_Header.TimeStamp_End=(int64u)-1;
- Audios_Header.TimeStamp_End=(int64u)-1;
-
- for (size_t Pos=0; Pos<Videos.size(); Pos++)
- for (size_t Pos2=0; Pos2<Videos[Pos].Parsers.size(); Pos2++)
- Videos[Pos].Parsers[Pos2]->Open_Buffer_Unsynch();
- for (size_t Pos=0; Pos<Audios.size(); Pos++)
- for (size_t Pos2=0; Pos2<Audios[Pos].Parsers.size(); Pos2++)
- Audios[Pos].Parsers[Pos2]->Open_Buffer_Unsynch();
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Read_Buffer_Continue()
-{
- #if MEDIAINFO_DEMUX
- if (DemuxParser)
- {
- Open_Buffer_Continue(DemuxParser, Buffer+Buffer_Offset, 0, false);
- if (!Config->Demux_EventWasSent)
- DemuxParser=NULL; //No more need of it
- }
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Lxf::Read_Buffer_Seek (size_t Method, int64u Value, int64u)
-{
- //Init
- if (!Duration_Detected)
- {
- MediaInfo_Internal MI;
- MI.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- size_t MiOpenResult=MI.Open(File_Name);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (!MiOpenResult || MI.Get(Stream_General, 0, General_Format)!=__T("LXF"))
- return 0;
- for (time_offsets::iterator TimeOffset=((File_Lxf*)MI.Info)->TimeOffsets.begin(); TimeOffset!=((File_Lxf*)MI.Info)->TimeOffsets.end(); ++TimeOffset)
- TimeOffsets[TimeOffset->first]=TimeOffset->second;
- int64u Duration=float64_int64s(Ztring(MI.Get(Stream_General, 0, __T("Duration"))).To_float64()*TimeStamp_Rate/1000);
- TimeOffsets[File_Size]=stream_header(Duration, Duration, 0, (int8u)-1);
- SeekRequest_Divider=2;
- Duration_Detected=true;
- }
-
- //Parsing
- switch (Method)
- {
- case 0 : Open_Buffer_Unsynch(); GoTo(Value); return 1;
- case 1 : Open_Buffer_Unsynch(); GoTo(File_Size*Value/10000); return 1;
- case 3 : //Frame
- {
- if (FrameRate==0 && Videos_Header.TimeStamp_End!=(int64u)-1 && Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin!=0)
- FrameRate=TimeStamp_Rate/(Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin);
- if (FrameRate==0)
- return (size_t)-1; //Not supported
- float64 TimeStamp=((float64)Value)/FrameRate;
- Value=float64_int64s(TimeStamp*1000000000); // In nanoseconds
- }
- case 2 : //Timestamp
- {
- if (Value!=(int64u)-1)
- {
- Value=float64_int64s((float64)Value*TimeStamp_Rate/1000000000); //Convert in LXF unit
- time_offsets::iterator End=TimeOffsets.end();
- --End;
- if (Value>=End->second.TimeStamp_End)
- return 2; //Higher than total size
- SeekRequest=Value;
- }
-
- //Looking if we already have the timestamp
- int64u SeekRequest_Mini=SeekRequest; if (SeekRequest_Mini>1000000) SeekRequest_Mini-=float64_int64s(TimeStamp_Rate/1000); //-1ms
- int64u SeekRequest_Maxi=SeekRequest+float64_int64s(TimeStamp_Rate/1000); //+1ms
- for (time_offsets::iterator TimeOffset=TimeOffsets.begin(); TimeOffset!=TimeOffsets.end(); ++TimeOffset)
- {
- if (TimeOffset->second.TimeStamp_Begin<=SeekRequest_Maxi && TimeOffset->second.TimeStamp_End>=SeekRequest_Mini) //If it is found in a frame we know
- {
- //Looking for the corresponding I-Frame
- while (TimeOffset->second.PictureType&0x2 && TimeOffset!=TimeOffsets.begin()) //Not an I-Frame (and not fisrt frame)
- {
- time_offsets::iterator Previous=TimeOffset;
- --Previous;
- if (Previous->second.TimeStamp_End!=TimeOffset->second.TimeStamp_Begin) //Testing if the previous frame is not known.
- {
- SeekRequest=TimeOffset->second.TimeStamp_Begin-(float64_int64s(TimeStamp_Rate/1000)+1); //1ms+1, so we are sure to not synch on the current frame again
- Open_Buffer_Unsynch();
- GoTo((Previous->first+TimeOffset->first)/2);
- return 1; //Looking for previous frame
-
- }
- TimeOffset=Previous;
- }
-
- //We got the right I-Frame
- if (Value==0)
- {
- for (size_t Pos=0; Pos<Videos.size(); Pos++)
- for (size_t Pos2=0; Pos2<Videos[Pos].Parsers.size(); Pos2++)
- Videos[Pos].Parsers[Pos2]->Unsynch_Frame_Count=0;
- }
- Open_Buffer_Unsynch();
- GoTo(TimeOffset->first);
- SeekRequest=(int64u)-1;
- return 1;
- }
-
- if (TimeOffset->second.TimeStamp_Begin>SeekRequest_Maxi) //Testing if too far
- {
- time_offsets::iterator Previous=TimeOffset; --Previous;
- int64u ReferenceOffset;
- if (File_Offset+Buffer_Offset==TimeOffset->first && TimeOffset->second.TimeStamp_Begin>SeekRequest) //If current frame is already too far
- ReferenceOffset=File_Offset+Buffer_Offset;
- else
- ReferenceOffset=TimeOffset->first;
- if (SeekRequest_Divider==0)
- {
- SeekRequest=Previous->second.TimeStamp_Begin-(float64_int64s(TimeStamp_Rate/1000)+1); //1ms+1, so we are sure to not synch on the current frame again
- ReferenceOffset=Previous->first;
- --Previous;
- SeekRequest_Divider=2;
- }
- Open_Buffer_Unsynch();
- GoTo(Previous->first+(ReferenceOffset-Previous->first)/SeekRequest_Divider);
- SeekRequest_Divider*=2;
- return 1;
- }
- }
- }
- return 0;
- default : return (size_t)-1;
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Lxf::Header_Begin()
-{
- if (Buffer_Offset+16>Buffer_Size)
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Header_Parse()
-{
- while (Video_Sizes_Pos<Video_Sizes.size() && Video_Sizes[Video_Sizes_Pos]==0)
- Video_Sizes_Pos++;
- if (Video_Sizes_Pos<Video_Sizes.size())
- {
- //Filling
- Header_Fill_Code(0x100+Video_Sizes_Pos, __T("Stream"));
- Header_Fill_Size(Video_Sizes[Video_Sizes_Pos]);
- Video_Sizes_Pos++;
- return;
- }
- while (Audio_Sizes_Pos<Audio_Sizes.size() && Audio_Sizes[Audio_Sizes_Pos]==0)
- Audio_Sizes_Pos++;
- if (Audio_Sizes_Pos<Audio_Sizes.size())
- {
- //Filling
- Header_Fill_Code(0x200+Audio_Sizes_Pos, __T("Stream"));
- Header_Fill_Size(Audio_Sizes[Audio_Sizes_Pos]);
- Audio_Sizes_Pos++;
- return;
- }
-
- //Parsing
- int64u BlockSize=0, TimeStamp=0, Duration=0;
- int32u HeaderSize, Type;
- Skip_C8( "Signature");
- Get_L4 (Version, "Version"); //0=start and duration are in field, 1=in 27 MHz values
- Get_L4 (HeaderSize, "Header size");
- if (Element_Size<HeaderSize)
- {
- Element_WaitForMoreData();
- return;
- }
- if (Version>1)
- {
- //Filling
- Header_Fill_Code(0, "Unknown");
- Header_Fill_Size(HeaderSize);
- Synched=false;
- return;
- }
- Get_L4 (Type, "Type");
- Skip_L4( "Stream ID");
- switch (Version)
- {
- case 0 :
- {
- int32u TimeStamp4, Duration4;
- Get_L4 (TimeStamp4, "TimeStamp");
- TimeStamp=TimeStamp4;
- Param_Info3(((float64)TimeStamp4)/TimeStamp_Rate, 3, " s");
- FrameInfo.DTS=FrameInfo.PTS=float64_int64s(((float64)TimeStamp)*1000000000/TimeStamp_Rate);
- Get_L4 (Duration4, "Duration");
- Duration=Duration4;
- Param_Info3(((float64)Duration)/TimeStamp_Rate, 3, " s");
- FrameInfo.DUR=float64_int64s(((float64)Duration)*1000000000/TimeStamp_Rate);
- }
- break;
- case 1 :
- Get_L8 (TimeStamp, "TimeStamp"); Param_Info3(((float64)TimeStamp)/720000, 3, " s"); FrameInfo.DTS=FrameInfo.PTS=float64_int64s(((float64)TimeStamp)*1000000/720);
- Get_L8 (Duration, "Duration"); Param_Info3(((float64)Duration)/720000, 3, " s"); FrameInfo.DUR=float64_int64s(((float64)Duration)*1000000/720);
- break;
- default: ;
- }
- switch(Type)
- {
- case 0 : //Video
- {
- Video_Sizes.resize(3);
- int32u Size;
- int8u VideoFormat, GOP_M, PictureType;
- BS_Begin_LE();
- Get_T1 (4, VideoFormat, "Format"); Param_Info1(Lxf_Format_Video[VideoFormat]);
- Skip_T1(7, "GOP (N)");
- Get_T1 (3, GOP_M, "GOP (M)");
- Info_T1(8, BitRate, "Bit rate"); Param_Info2((BitRate*(BitRate>60?10:(BitRate>50?5:1))-(BitRate>60?500:(BitRate>50?200:0)))*1000000, " bps");
- Get_T1 (2, PictureType, "Picture type"); Param_Info1(Lxf_PictureType[PictureType]);
- BS_End_LE();
- Skip_L1( "Reserved");
- Get_L4(Size, "Video data size");
- Skip_L4( "Zero");
- if (!Video_Sizes.empty())
- Video_Sizes[2]=Size;
- BlockSize+=Size;
- Get_L4(Size, "VBI data size");
- if (!Video_Sizes.empty())
- Video_Sizes[1]=Size;
- BlockSize+=Size;
- Skip_L4( "Zero");
- Get_L4(Size, "Meta data size");
- if (!Video_Sizes.empty())
- Video_Sizes[0]=Size;
- BlockSize+=Size;
- if (Videos_Header.TimeStamp_Begin==(int64u)-1)
- Videos_Header.TimeStamp_Begin=TimeStamp;
- Videos_Header.TimeStamp_End=TimeStamp+Duration;
- Videos_Header.Duration=Duration;
- if (TimeStamp==LastAudio_TimeOffset.TimeStamp_Begin)
- TimeOffsets[LastAudio_BufferOffset]=stream_header(TimeStamp, TimeStamp+Duration, Duration, PictureType);
- else
- TimeOffsets[File_Offset+Buffer_Offset]=stream_header(TimeStamp, TimeStamp+Duration, Duration, PictureType);
- int64u PTS_Computing=TimeStamp;
- #if MEDIAINFO_DEMUX
- switch (PictureType)
- {
- case 2 :
- case 3 : Demux_random_access=false; break; //P-Frame, B-Frame
- default: Demux_random_access=true ; //I-Frame
- }
- #endif //MEDIAINFO_DEMUX
- if (2>Videos.size())
- Videos.resize(2+1);
- if (!Video_Sizes.empty())
- Videos[2].Format=VideoFormat;
- if (GOP_M>1) //With B-frames
- {
- switch (PictureType)
- {
- case 2 : PTS_Computing+=GOP_M*Duration; break; //P-Frame
- case 3 : break; //B-Frame
- default: PTS_Computing+=Duration; //I-Frame
- }
- }
- FrameInfo.PTS=float64_int64s(((float64)PTS_Computing)*1000000000/TimeStamp_Rate);
- }
- break;
- case 1 : //Audio
- {
- int32u Size;
- int8u Channels_Count=0;
-
- if (Version==0)
- {
- Skip_L4( "First Active Field");
- Skip_L4( "Total fields in packet");
- }
- BS_Begin_LE();
- Get_T1 ( 6, SampleSize, "Sample size");
- Skip_T1( 6, "Sample precision");
- Skip_T1(20, "Reserved");
- BS_End_LE();
- Element_Begin1("Tracks mask");
- BS_Begin_LE();
- for (size_t Pos=0; Pos<32; Pos++)
- {
- bool Channel;
- Get_TB(Channel, "Channel");
- if (Channel)
- Channels_Count++;
- }
- BS_End_LE();
- Element_End0();
- Get_L4(Size, "Track size");
- Skip_L4( "Zero");
- if (Version>=1)
- {
- Skip_L4( "Zero");
- Skip_L4( "Zero");
- }
- Audio_Sizes.resize(Channels_Count);
- for (size_t Pos=0; Pos<Audio_Sizes.size(); Pos++)
- Audio_Sizes[Pos]=Size;
- BlockSize=Size*Channels_Count;
- if (Audios_Header.TimeStamp_Begin==(int64u)-1)
- Audios_Header.TimeStamp_Begin=TimeStamp;
- Audios_Header.TimeStamp_End=TimeStamp+Duration;
- Audios_Header.Duration=Duration;
- if (Audios_Header.Duration_First==(int64u)-1 && Duration)
- Audios_Header.Duration_First=Duration;
- LastAudio_BufferOffset=File_Offset+Buffer_Offset;
- LastAudio_TimeOffset=stream_header(TimeStamp, TimeStamp+Duration, Duration, (int8u)-1);
- #if MEDIAINFO_DEMUX
- Demux_random_access=true;
- #endif //MEDIAINFO_DEMUX
- }
- break;
- case 2 : //Header
- {
- Header_Sizes.resize(2);
- int32u SegmentFormat, Size;
-
- Get_L4 (SegmentFormat, "Segment format");
- Get_L4 (Size, "Data size");
- Header_Sizes[0]=Size;
- BlockSize+=Size;
- if (SegmentFormat)
- {
- Get_L4 (Size, "Extended fields size");
- Header_Sizes[1]=Size;
- BlockSize+=Size;
- }
- Skip_L4( "Zero");
- Skip_L4( "Zero");
- Skip_L4( "Zero");
- }
- break;
- default : BlockSize=0;
- }
- Skip_L4( "Checksum");
- if (Version)
- Skip_L4( "Zero");
-
- if (Element_Offset<HeaderSize)
- Skip_XX(Header_Size-Element_Offset, "Unknown");
-
- if (Buffer_Offset+Element_Offset+BlockSize>Buffer_Size)
- {
- //Hints
- if (File_Buffer_Size_Hint_Pointer)
- {
- size_t Buffer_Size_Target=(size_t)(Buffer_Offset+0x48+BlockSize+0x48); //+0x48 for next packet header
- if ((*File_Buffer_Size_Hint_Pointer)<Buffer_Size_Target)
- (*File_Buffer_Size_Hint_Pointer)=Buffer_Size_Target;
- }
- }
-
- //Filling
- Header_Fill_Code(Type, Ztring::ToZtring(Type));
- Header_Fill_Size(HeaderSize+BlockSize);
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Data_Parse()
-{
- switch(Element_Code)
- {
- case 0 : Video(); break;
- case 1 : Audio(); break;
- case 2 : Header(); break;
- default :
- if (Element_Code&0x000100)
- Video_Stream(Element_Code&0xFF);
- else if (Element_Code&0x000200)
- Audio_Stream(Element_Code&0xFF);
- else
- Skip_XX(Element_Size, "Unknown");
- }
-
- FILLING_BEGIN();
- if (Element_Code&0x000100 && (Element_Code&0xFF)==2) //Checking Video stream 2
- {
- Frame_Count++;
- if (!Status[IsFilled] && ((Frame_Count>6 && (Stream_Count==0 ||Config->ParseSpeed==0.0)) || Frame_Count>512)) //5 video frames for 1 Audio frame
- {
- Fill("LXF");
- if (MediaInfoLib::Config.ParseSpeed_Get()<1)
- {
- LookingForLastFrame=true;
- if (3*(File_Offset+Buffer_Offset)<=File_Size)
- {
- GoToFromEnd((File_Offset+Buffer_Offset)*2*6/Frame_Count);
- Open_Buffer_Unsynch();
- }
- }
- }
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Lxf::Header()
-{
- Element_Name("Header");
-
- for (size_t Pos=0; Pos<Header_Sizes.size(); Pos++)
- {
- switch(Pos)
- {
- case 0 : Header_Info(); break;
- case 1 : Header_Meta(); break;
- default : Skip_XX(Header_Sizes[Pos], "Data");
- }
- }
- Header_Sizes.clear();
-
- Info_General_StreamSize=0x48+Element_Size;
-
- #if MEDIAINFO_DEMUX
- if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet())
- Config->Demux_EventWasSent=true; //First set is to indicate the user that header is parsed
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Header_Info()
-{
- Element_Begin1("Disk segment");
-
- //Parsing
- int64u End=Element_Offset+Header_Sizes[0];
- if (Header_Sizes[0]>=120)
- {
- Skip_L4( "prev");
- Skip_L4( "next");
- Skip_L4( "videoClusters");
- Skip_L4( "audioClusters");
- Skip_C8( "ID");
- Skip_L4( "minFrame");
- Skip_L4( "start");
- Skip_L4( "duration");
- Skip_L4( "tcOffset");
- BS_Begin_LE();
- Skip_T1(4, "Format");
- Skip_T1(7, "GOP (N)");
- Skip_T1(3, "GOP (M)");
- Skip_T1(8, "Bit rate");
- Skip_TB( "VBI present");
- Skip_TB( "Aspect Ratio");
- BS_End_LE();
- Skip_L1( "reserved");
- Skip_L4( "base");
- Skip_L4( "prev");
- Skip_L4( "next");
- BS_Begin_LE();
- Skip_T1(7, "recordDate - Year");
- Skip_T1(4, "recordDate - Month");
- Skip_T1(5, "recordDate - Day");
- Skip_T1(7, "killDate - Year");
- Skip_T1(4, "killDate - Month");
- Skip_T1(5, "killDate - Day");
- BS_End_LE();
- Skip_L1( "tc_type");
- Skip_L1( "status");
- Skip_L1( "disk");
- Skip_String(26, "description");
- Skip_String(16, "agency");
- Skip_String( 6, "description");
- Skip_L1( "videoGain");
- Skip_L1( "videoSetup");
- Skip_L1( "chromaGain");
- Skip_L1( "hueLSB");
- Skip_L1( "reserved");
- BS_Begin_LE();
- Skip_T1(2, "hueMSB");
- Skip_T1(4, "audioTracks");
- Skip_TB( "writeProtected");
- Skip_TB( "allocated");
- Skip_TB( "sliding");
- Skip_TB( "tcTranslate");
- Skip_TB( "invisible");
- Skip_TB( "macro");
- Skip_TB( "alpha");
- Skip_TB( "project");
- Skip_TB( "purged");
- Skip_TB( "reference");
- Skip_TB( "looping");
- Skip_TB( "notReadyToPlay");
- Skip_TB( "notReadyToTransfer");
- Skip_TB( "notReadyToArchive");
- Skip_TB( "transferInProgress");
- Skip_T2(11, "reserved");
- BS_End_LE();
- }
- if (Element_Offset<End)
- Skip_XX(End-Element_Offset, "Unknown");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Header_Meta()
-{
- Element_Begin1("Extended fields area");
-
- int64u Offset=0;
- int64u Pos=0;
-
- while (Offset<Header_Sizes[1])
- {
- int8u Size;
- Get_L1 (Size, "Size");
- if (Size)
- {
- switch (Pos)
- {
- case 0 : //Record Date/Time
- {
- Skip_XX(Size, "Record Date/Time");
- }
- break;
- case 1 : //Codec Where Recorded
- {
- Ztring Library;
- Get_UTF8(Size, Library, "Codec Where Recorded");
- Fill(Stream_General, 0, General_Encoded_Library, Library);
- }
- break;
- case 2 : //Source Handle
- {
- Skip_XX(Size, "Source Handle");
- }
- break;
- case 3 : //UMID
- {
- Skip_XX(Size, "UMID");
- }
- break;
- case 4 : //Video size / rate info
- {
- if (Size==0x10)
- {
- Element_Begin1("Video size / rate info");
- BS_Begin_LE();
- Element_Begin1("formatCode");
- int8u formatCode=(int8u)-1;
- for (int8u Pos=0; Pos<96; Pos++)
- {
- bool Temp;
- Get_TB (Temp, "formatCode bit");
- if (Temp)
- {
- if (formatCode==(int8u)-1)
- formatCode=Pos;
- else
- formatCode=(int8u)-2; //problem
- }
- }
- if (formatCode<96)
- {
- int8u frameRateCode=formatCode%8;
- #if MEDIAINFO_TRACE
- int8u temp=formatCode/8;
- int8u scanType=temp%2;
- int8u verticalsizeCode=temp/2;
- Element_Info(verticalsizeCode);
- Element_Info(scanType);
- #endif //MEDIAINFO_TRACE
- if (frameRateCode<16-1)
- {
- FrameRate=Mpegv_frame_rate[frameRateCode+1];
- if (Version==0)
- TimeStamp_Rate=FrameRate*2; //Time stamp is in fields
- Element_Info3(FrameRate, 3, " fps");
- }
- }
- Element_End0();
- Skip_TB( "field");
- Skip_TB( "interlaced");
- Skip_TB( "progressive");
- Skip_TB( "pulldown");
- Skip_TB( "chroma 420");
- Skip_TB( "chroma 422");
- Skip_TB( "chroma 311");
- Skip_TB( "PAR 1:1");
- Skip_TB( "PAR 4:3");
- Skip_T4(23, "Zero");
- BS_End_LE();
- Element_End0();
- }
- else
- Skip_XX(Size, "Video size / rate info");
- }
- break;
- case 5 : //Source Video Info
- {
- Skip_XX(Size, "Source Video Info");
- }
- break;
- case 6 : //GUID
- {
- Skip_XX(Size, "GUID");
- }
- break;
- case 7 : //User Name
- {
- Ztring Channel;
- Get_UTF16L(Size, Channel, "User Name");
- Fill(Stream_General, 0, General_EncodedBy, Channel);
- }
- break;
- case 8 : //Department
- {
- Skip_UTF16L(Size, "Department");
- }
- break;
- case 9 : //Reserved
- case 10 : //Reserved
- {
- Skip_XX(Size, "Reserved");
- }
- break;
- case 11 : //Link
- {
- Skip_XX(Size, "Link");
- }
- break;
- case 12 : //Extended Description
- {
- Ztring Title;
- Get_UTF16L(Size, Title, "Extended Description");
- Fill(Stream_General, 0, General_Title, Title);
- }
- break;
- case 13 : //Extended Agency
- {
- Ztring Title;
- Get_UTF16L(Size, Title, "Extended Agency");
- Fill(Stream_General, 0, General_EncodedBy, Title);
- }
- break;
- case 14 : //User-definable Field
- case 15 : //User-definable Field
- case 16 : //User-definable Field
- case 17 : //User-definable Field
- {
- Ztring Comment;
- Get_UTF16L(Size, Comment, "User-definable Field");
- Fill(Stream_General, 0, General_Comment, Comment);
- }
- break;
- case 18 : //External Controller UID
- {
- Skip_XX(Size, "External Controller UID");
- }
- break;
- case 19 : //Video ARC
- {
- Skip_XX(Size, "Video ARC");
- }
- break;
- case 20 : //Modified Timestamp
- {
- Skip_XX(Size, "Modified Timestamp");
- }
- break;
- case 21 : //Video QA Status
- {
- Skip_XX(Size, "Video QA Status");
- }
- break;
- case 22 : //User Segments In Use (bitmask)
- {
- Skip_XX(Size, "User Segments In Use");
- }
- break;
- case 23 : //Audio Track Info
- {
- BS_Begin_LE();
- for (int8u Pos=0; Pos<Size; Pos++)
- {
- int8u Format;
- Skip_TB( "Group / AES pair");
- Skip_T1(3, "Channels (modulo 8)");
- Get_T1 (3, Format, "Audio format");
- Skip_TB( "Metadata in ANC");
-
- if (Pos>=Audios.size())
- Audios.resize(Pos+1);
- Audios[Pos].Format=Format;
- }
- BS_End_LE();
- }
- break;
- case 24 : //Audio Tag Info
- {
- for (int8u Pos=0; Pos<Size; Pos++)
- Skip_L1( "Language");
- }
- break;
- default : Skip_XX(Size, "Data");
- }
- }
- Offset+=1+Size;
- Pos++;
- }
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Audio()
-{
- Element_Name("Audio");
-
- #if MEDIAINFO_SEEK
- if (FrameRate==0 && Audios_Header.TimeStamp_End-Audios_Header.TimeStamp_Begin!=0)
- FrameRate=TimeStamp_Rate/(Audios_Header.TimeStamp_End-Audios_Header.TimeStamp_Begin);
- #endif //MEDIAINFO_SEEK
-
- Audio_Sizes_Pos=0;
- Element_ThisIsAList();
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Audio_Stream(size_t Pos)
-{
- if (LookingForLastFrame || (Config->ParseSpeed<1 && Pos<Audios.size() && Audios[Pos].IsFilled))
- {
- Skip_XX(Element_Size, "Data");
- return;
- }
-
- if (Pos>=Audios.size())
- Audios.resize(Pos+1);
- if (Audios[Pos].Parsers.empty())
- {
- //Trying to detect if this is PCM
- /*
- switch (Audios[Pos].Format)
- {
- case (int8u)-1 : //PCM without codec identifier (default)
- case 0 : //PCM
- {
- #ifdef MEDIAINFO_SMPTEST0337_YES
- {
- File_ChannelGrouping* Parser=new File_ChannelGrouping;
- if (Pos%2 && !Audios[Pos-1].Parsers.empty())
- {
- Parser->Channel_Pos=1;
- Parser->Common=((File_ChannelGrouping*)Audios[Pos-1].Parsers[0])->Common;
- Parser->StreamID=Pos-1;
- Element_Code--;
- }
- else
- {
- Parser->Channel_Pos=0;
- Parser->SampleRate=48000;
- }
- Parser->Channel_Total=2;
- Parser->ByteDepth=SampleSize/8;
-
- Open_Buffer_Init(Parser);
- Audios[Pos].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_SMPTEST0337_YES
-
- Audios[Pos].BytesPerFrame=Audio_Sizes[Pos];
-
- #ifdef MEDIAINFO_PCM_YES
- File_Pcm* Parser=new File_Pcm;
- Parser->SamplingRate=48000;
- Parser->Channels=1;
- Parser->BitDepth=SampleSize;
- Parser->Endianness='L';
- #if !defined(MEDIAINFO_MPEGA_YES) && !defined(MEDIAINFO_SMPTEST0337_YES)
- Parser->Frame_Count_Valid=1;
- #else
- Parser->Frame_Count_Valid=2;
- #endif
- #else //MEDIAINFO_PCM_YES
- File__Analyze* Parser=new File__Analyze;
- #endif //MEDIAINFO_PCM_YES
- Open_Buffer_Init(Parser);
- #ifndef MEDIAINFO_PCM_YES
- Parser->Accept();
- Parser->Stream_Prepare(Stream_Audio);
- int64u BitRate=float64_int64s(Audio_Sizes[Pos]*TimeStamp_Rate*8/(Audios_Header.TimeStamp_End-Audios_Header.TimeStamp_Begin));
- Parser->Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, BitRate);
- Parser->Fill(Stream_Audio, 0, Audio_BitRate_Mode, "CBR");
- Parser->Fill(Stream_Audio, StreamPos_Last, Audio_Format, "PCM");
- Parser->Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, 48000);
- Parser->Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, 1);
- Parser->Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, SampleSize);
- Parser->Fill();
- #endif //MEDIAINFO_PCM_YES
- Audios[Pos].Parsers.push_back(Parser);
-
- #ifdef MEDIAINFO_MPEGA_YES
- {
- File_Mpega* Parser=new File_Mpega();
- Open_Buffer_Init(Parser);
- Audios[Pos].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_MPEGA_YES
- }
- break;
- case 1 : //DTS
- {
- #ifdef MEDIAINFO_DTS_YES
- File_Dts* Parser=new File_Dts();
- #else //MEDIAINFO_DTS_YES
- File__Analyze* Parser=new File__Analyze;
- #endif //MEDIAINFO_DTS_YES
- Open_Buffer_Init(Parser);
- Audios[Pos].Parsers.push_back(Parser);
- }
- break;
- case 2 : //AC-3
- case 5 : //E-AC-3
- {
- #ifdef MEDIAINFO_AC3_YES
- File_Ac3* Parser=new File_Ac3;
- #else //MEDIAINFO_AAC_YES
- File__Analyze* Parser=new File__Analyze;
- #endif //MEDIAINFO_AAC_YES
- Open_Buffer_Init(Parser);
- Audios[Pos].Parsers.push_back(Parser);
- }
- break;
- case 3 : //Dolby E
- {
- #ifdef MEDIAINFO_SMPTEST0337_YES
- {
- File_ChannelGrouping* Parser=new File_ChannelGrouping;
- if (Pos%2 && !Audios[Pos-1].Parsers.empty())
- {
- Parser->Channel_Pos=1;
- Parser->Common=((File_ChannelGrouping*)Audios[Pos-1].Parsers[0])->Common;
- Parser->StreamID=Pos-1;
- Element_Code--;
- }
- else
- {
- Parser->Channel_Pos=0;
- Parser->SampleRate=48000;
- }
- Parser->Channel_Total=2;
- Parser->ByteDepth=SampleSize/8;
-
- Open_Buffer_Init(Parser);
- Audios[Pos].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_SMPTEST0337_YES
-
- #ifdef MEDIAINFO_DOLBYE_YES
- File_DolbyE* Parser=new File_DolbyE();
- #else //MEDIAINFO_DOLBYE_YES
- File__Analyze* Parser=new File__Analyze;
- #endif //MEDIAINFO_DOLBYE_YES
- Open_Buffer_Init(Parser);
- Audios[Pos].Parsers.push_back(Parser);
- }
- case 4 :
- {
- #ifdef MEDIAINFO_MPEGA_YES
- File_Mpega* Parser=new File_Mpega();
- #else //MEDIAINFO_MPEGA_YES
- File__Analyze* Parser=new File__Analyze;
- #endif //MEDIAINFO_MPEGA_YES
- Open_Buffer_Init(Parser);
- Audios[Pos].Parsers.push_back(Parser);
- }
- break;
- case 6 :
- {
- #ifdef MEDIAINFO_AAC_YES
- File_Aac* Parser=new File_Aac();
- Parser->Mode=File_Aac::Mode_ADTS;
- #else //MEDIAINFO_AAC_YES
- File__Analyze* Parser=new File__Analyze;
- #endif //MEDIAINFO_AAC_YES
- Open_Buffer_Init(Parser);
- Audios[Pos].Parsers.push_back(Parser);
- }
- break;
- default :
- {
- File__Analyze* Parser=new File__Analyze;
- Open_Buffer_Init(Parser);
- Audios[Pos].Parsers.push_back(Parser);
- }
- }
- */
-
- #ifdef MEDIAINFO_SMPTEST0337_YES
- if (!(Pos%2 && Audios[Pos-1].Parsers.size()<=1)) //If the first half-stream was already rejected, don't try this one
- {
- File_ChannelGrouping* Parser=new File_ChannelGrouping;
- if (Pos%2 && !Audios[Pos-1].Parsers.empty())
- {
- Parser->Channel_Pos=1;
- Parser->Common=((File_ChannelGrouping*)Audios[Pos-1].Parsers[0])->Common;
- Parser->StreamID=Pos-1;
- }
- else
- Parser->Channel_Pos=0;
- Parser->BitDepth=SampleSize;
- Parser->Channel_Total=2;
- Parser->SamplingRate=48000;
- Parser->Endianness='L';
-
- Audios[Pos].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_SMPTEST0337_YES
- #ifdef MEDIAINFO_SMPTEST0337_YES
- {
- File_SmpteSt0337* Parser=new File_SmpteSt0337;
- Parser->Container_Bits=SampleSize;
- Parser->Endianness='L';
- Parser->Aligned=true;
-
- Audios[Pos].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_SMPTEST0337_YES
- #ifdef MEDIAINFO_AC3_YES
- Audios[Pos].Parsers.push_back(new File_Ac3());
- #endif //MEDIAINFO_AC3_YES
- #ifdef MEDIAINFO_DTS_YES
- Audios[Pos].Parsers.push_back(new File_Dts());
- #endif //MEDIAINFO_DTS_YES
- #ifdef MEDIAINFO_MPEGA_YES
- Audios[Pos].Parsers.push_back(new File_Mpega());
- #endif //MEDIAINFO_MPEGA_YES
- #ifdef MEDIAINFO_AAC_YES
- {
- File_Aac* Parser=new File_Aac;
- Parser->Mode=File_Aac::Mode_ADTS;
-
- Audios[Pos].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_AAC_YES
- #ifdef MEDIAINFO_PCM_YES
- {
- File_Pcm* Parser=new File_Pcm;
- Parser->SamplingRate=48000;
- Parser->Channels=1;
- Parser->BitDepth=SampleSize;
- Parser->Endianness='L';
- #if !defined(MEDIAINFO_SMPTEST0337_YES) && !defined(MEDIAINFO_MPEGA_YES)
- Parser->Frame_Count_Valid=1;
- #else
- Parser->Frame_Count_Valid=2;
- #endif
-
- Audios[Pos].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_PCM_YES
-
- for (size_t Pos2=0; Pos2<Audios[Pos].Parsers.size(); Pos2++)
- {
- Open_Buffer_Init(Audios[Pos].Parsers[Pos2]);
-
- #if MEDIAINFO_DEMUX
- //There are several frames in 1 block, we must rely on the stream parser
- if (Config->Demux_Unpacketize_Get())
- {
- Audios[Pos].Parsers[Pos2]->Demux_Level=2; //Container
- Audios[Pos].Parsers[Pos2]->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- }
-
- Stream_Count++;
- }
-
- /*
- #if MEDIAINFO_DEMUX
- #if MEDIAINFO_SEEK
- if (SeekRequest==(int64u)-1)
- #endif //MEDIAINFO_SEEK
- {
- Element_Code=0x200+Pos;
- Frame_Count_NotParsedIncluded=float64_int64s(((float64)(Audios_Header.TimeStamp_End-Audios_Header.Duration))/TimeStamp_Rate*FrameRate);
- if (SampleSize==20 && Config->Demux_PCM_20bitTo16bit_Get())
- {
- //Removing bits 3-0 (Little endian)
- int8u* SixteenBit=new int8u[(size_t)Audio_Sizes[Pos]];
- size_t SixteenBit_Pos=0;
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
- size_t Buffer_Max=Buffer_Offset+(size_t)(Element_Offset+Audio_Sizes[Pos]);
-
- while (Buffer_Pos+5<=Buffer_Max)
- {
- int64u Temp=LittleEndian2int40u(Buffer+Buffer_Pos);
- Temp=((Temp&0xFFFF000000LL)>>8)|((Temp&0xFFFF0LL)>>4);
- int32s2LittleEndian(SixteenBit+SixteenBit_Pos, (int32s)Temp);
- SixteenBit_Pos+=4;
- Buffer_Pos+=5;
- }
-
- Demux(SixteenBit, SixteenBit_Pos, ContentType_MainStream);
-
- delete[] SixteenBit;
- }
- else if (SampleSize==20 && Config->Demux_PCM_20bitTo24bit_Get())
- {
- //Padding bits 3-0 (Little endian)
- int8u* Output=new int8u[(size_t)Audio_Sizes[Pos]*24/20];
- size_t Output_Pos=0;
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
- size_t Buffer_Max=Buffer_Offset+(size_t)(Element_Offset+Audio_Sizes[Pos]);
-
- while (Buffer_Pos+5<=Buffer_Max)
- {
- Output[Output_Pos ] = Buffer[Buffer_Pos+0]<<4 ;
- Output[Output_Pos+1] = (Buffer[Buffer_Pos+1]<<4 ) | (Buffer[Buffer_Pos+0]>>4 );
- Output[Output_Pos+2] = (Buffer[Buffer_Pos+2]<<4 ) | (Buffer[Buffer_Pos+1]>>4 );
- Output[Output_Pos+3] = Buffer[Buffer_Pos+2]&0xF0 ;
- Output[Output_Pos+4] = Buffer[Buffer_Pos+3] ;
- Output[Output_Pos+5] = Buffer[Buffer_Pos+4] ;
-
- Buffer_Pos+=5;
- Output_Pos+=6;
- }
-
- Demux(Output, Output_Pos, ContentType_MainStream);
-
- delete[] Output;
- }
- else
- Demux(Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)Audio_Sizes[Pos], ContentType_MainStream);
- }
- #endif //MEDIAINFO_DEMUX
- */
-
- #if MEDIAINFO_DEMUX
- #if MEDIAINFO_SEEK
- if (SeekRequest==(int64u)-1)
- #endif //MEDIAINFO_SEEK
- {
- Element_Code=0x200+Pos;
- Frame_Count_NotParsedIncluded=float64_int64s(((float64)(Audios_Header.TimeStamp_End-Audios_Header.Duration))/TimeStamp_Rate*FrameRate);
- Demux_Level=4; //Intermediate
- Demux(Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)Audio_Sizes[Pos], ContentType_MainStream);
- }
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- Frame_Count_NotParsedIncluded=float64_int64s(((float64)(Audios_Header.TimeStamp_End-Audios_Header.Duration))/TimeStamp_Rate*FrameRate);
- for (size_t Pos2=0; Pos2<Audios[Pos].Parsers.size(); Pos2++)
- {
- if (Audios[Pos].Parsers[Pos2]->FrameInfo.DTS==(int64u)-1 || !((FrameInfo.DUR/2>FrameInfo.DTS || Audios[Pos].Parsers[Pos2]->FrameInfo.DTS>=FrameInfo.DTS-FrameInfo.DUR/2) && Audios[Pos].Parsers[Pos2]->FrameInfo.DTS<FrameInfo.DTS+FrameInfo.DUR/2))
- Audios[Pos].Parsers[Pos2]->FrameInfo=FrameInfo;
- Open_Buffer_Continue(Audios[Pos].Parsers[Pos2], Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)Audio_Sizes[Pos]);
-
- if (Audios[Pos].Parsers.size()>1)
- {
- if (!Audios[Pos].Parsers[Pos2]->Status[IsAccepted] && Audios[Pos].Parsers[Pos2]->Status[IsFinished])
- {
- delete *(Audios[Pos].Parsers.begin()+Pos2);
- Audios[Pos].Parsers.erase(Audios[Pos].Parsers.begin()+Pos2);
- Pos2--;
- }
- else if (Audios[Pos].Parsers.size()>1 && Audios[Pos].Parsers[Pos2]->Status[IsAccepted])
- {
- File__Analyze* Parser=Audios[Pos].Parsers[Pos2];
- for (size_t Pos3=0; Pos3<Audios[Pos].Parsers.size(); Pos3++)
- {
- if (Pos3!=Pos2)
- delete *(Audios[Pos].Parsers.begin()+Pos3);
- }
- Audios[Pos].Parsers.clear();
- Audios[Pos].Parsers.push_back(Parser);
- }
- }
-
- if (Audios[Pos].Parsers.size()==1 && !Audios[Pos].IsFilled && Audios[Pos].Parsers[0]->Status[IsFilled])
- {
- if (Stream_Count>0)
- Stream_Count--;
- Audios[Pos].IsFilled=true;
- }
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- DemuxParser=Audios[Pos].Parsers[0];
- #endif //MEDIAINFO_DEMUX
- }
- Element_Offset+=Audio_Sizes[Pos];
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Video()
-{
- Element_Name("Video");
-
- #if MEDIAINFO_SEEK
- if (FrameRate==0 && Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin!=0)
- FrameRate=TimeStamp_Rate/(Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin);
- #endif //MEDIAINFO_SEEK
-
- Video_Sizes_Pos=0;
- Element_ThisIsAList();
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Video_Stream(size_t Pos)
-{
- if (LookingForLastFrame || (Config->ParseSpeed<1 && Pos<Videos.size() && Videos[Pos].IsFilled && Pos!=1)) //Hint: trying to catch VBI/VANC at the end of the file
- {
- Skip_XX(Element_Size, "Data");
- return;
- }
-
- #if MEDIAINFO_DEMUX
- #if MEDIAINFO_SEEK
- if (SeekRequest==(int64u)-1)
- #endif //MEDIAINFO_SEEK
- {
- Element_Code=0x100+Pos;
- Frame_Count_NotParsedIncluded=float64_int64s(((float64)(Videos_Header.TimeStamp_End-Videos_Header.Duration))/TimeStamp_Rate*FrameRate);
- Demux_Level=2; //Container
- Demux(Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)Video_Sizes[Pos], ContentType_MainStream);
- }
- #endif //MEDIAINFO_DEMUX
-
- if (Pos>=Videos.size())
- Videos.resize(Pos+1);
-
- switch (Pos)
- {
- case 1 : Video_Stream_1(); break;
- case 2 : Video_Stream_2(); break;
- default: ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Video_Stream_1()
-{
- if (Video_Sizes[1]<2)
- {
- Skip_XX(Video_Sizes[1], "Unknown");
- return;
- }
-
- int8u Lines_Allocated, Lines_Used;
- Get_L1 (Lines_Allocated, "Lines allocated");
- Get_L1 (Lines_Used, "Lines used");
-
- if (Lines_Allocated==0 || Lines_Used>Lines_Allocated || Video_Sizes[1]<2+Lines_Used)
- {
- Skip_XX(Video_Sizes[1]-2, "Unknown");
- return;
- }
-
- Videos[1].BytesPerFrame=Video_Sizes[1]-(2+Lines_Allocated);
- int64u BytesPerLine=Videos[1].BytesPerFrame/Lines_Allocated;
-
- std::vector<int8u> FieldNumbers;
- std::vector<bool> FieldNumbers_IsSecondField;
- BS_Begin_LE();
- for (int8u Pos=0; Pos<Lines_Allocated; Pos++)
- {
- int8u FieldNumber;
- bool FieldNumber_IsSecondField;
- Get_T1 (7, FieldNumber, "Field line");
- Get_TB ( FieldNumber_IsSecondField, "Field");
-
- if (Pos<Lines_Used)
- {
- FieldNumbers.push_back(FieldNumber);
- FieldNumbers_IsSecondField.push_back(FieldNumber_IsSecondField);
- }
- }
- BS_End_LE();
-
- for (int8u Pos=0; Pos<Lines_Used; Pos++)
- {
- #if defined(MEDIAINFO_CDP_YES)
- Element_Begin1("VANC line");
- if (Videos[1].Parsers.empty())
- {
- Ancillary=new File_Ancillary;
- Ancillary->InDecodingOrder=true;
- Ancillary->WithChecksum=true;
- Ancillary->MustSynchronize=true;
- Open_Buffer_Init(Ancillary);
- Videos[1].Parsers.push_back(Ancillary);
- Stream_Count++;
- }
- Videos[1].Parsers[0]->FrameInfo=FrameInfo;
- ((File_Ancillary*)Videos[1].Parsers[0])->LineNumber=FieldNumbers[Pos];
- ((File_Ancillary*)Videos[1].Parsers[0])->LineNumber_IsSecondField=FieldNumbers_IsSecondField[Pos];
- Open_Buffer_Continue(Videos[1].Parsers[0], Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)BytesPerLine);
- if (Videos[1].Parsers[0]->Status[IsFilled])
- {
- if (Stream_Count>0)
- Stream_Count--;
- Videos[1].IsFilled=true;
- }
- Element_Offset+=BytesPerLine;
- Element_End0();
- #else
- Skip_XX(BytesPerLine, "VBI/VANC data");
- #endif
- }
- Skip_XX((Lines_Allocated-Lines_Used)*BytesPerLine, "Unused lines");
-
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Lxf::Video_Stream_2()
-{
- if (Videos[2].Parsers.empty())
- {
- /*
- //Trying to detect if this is PCM
- switch (Videos[2].Format)
- {
- case 0x01 :
- case 0x02 :
- case 0x03 :
- case 0x09 :
- {
- #ifdef MEDIAINFO_MPEGV_YES
- File_Mpegv* Parser=new File_Mpegv();
- #else //MEDIAINFO_MPEGV_YES
- File__Analyze* Parser=new File__Analyze;
- #endif //MEDIAINFO_MPEGV_YES
- Open_Buffer_Init(Parser);
- #ifndef MEDIAINFO_MPEGV_YES
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "MPEG Video");
- if (Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin)
- {
- FrameRate=((float64)1)*TimeStamp_Rate/(Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin);
- if (FrameRate)
- Parser->Fill(Stream_Video, 0, Video_FrameRate, FrameRate);
- }
- #endif //MEDIAINFO_MPEGV_YES
- Videos[2].Parsers.push_back(Parser);
- }
- break;
- case 0x04 :
- case 0x05 :
- case 0x06 :
- {
- #ifdef MEDIAINFO_DVDIF_YES
- File_DvDif* Parser=new File_DvDif();
- #else //MEDIAINFO_DVDIF_YES
- File__Analyze* Parser=new File__Analyze;
- #endif //MEDIAINFO_DVDIF_YES
- Open_Buffer_Init(Parser);
- #ifndef MEDIAINFO_DVDIF_YES
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "DV");
- if (Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin)
- {
- FrameRate=((float64)1)*TimeStamp_Rate/(Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin);
- if (FrameRate)
- Parser->Fill(Stream_Video, 0, Video_FrameRate, FrameRate);
- int64u BitRate=float64_int64s(((float64)Video_Sizes[1])*TimeStamp_Rate*8/(Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin));
- if (BitRate)
- Parser->Fill(Stream_Video, 0, Video_BitRate, BitRate);
- Parser->Fill(Stream_Video, 0, Video_BitRate_Mode, "CBR");
- }
- #endif //MEDIAINFO_DVDIF_YES
- Videos[2].Parsers.push_back(Parser);
- }
- #ifdef MEDIAINFO_VC3_YES
- if (Videos[2].Format==0x06) // One file with VideoFormat = 6 has VC-3
- {
- File_Vc3* Parser=new File_Vc3();
- Open_Buffer_Init(Parser);
- Videos[2].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_VC3_YES
- break;
- case 0x0A :
- case 0x0B :
- case 0x0C :
- case 0x0D :
- {
- #ifdef MEDIAINFO_AVC_YES
- File_Avc* Parser=new File_Avc();
- #else //MEDIAINFO_AVC_YES
- File__Analyze* Parser=new File__Analyze;
- #endif //MEDIAINFO_AVC_YES
- Open_Buffer_Init(Parser);
- #ifndef MEDIAINFO_AVC_YES
- Parser->Accept();
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "AVC");
- if (Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin)
- {
- FrameRate=((float64)1)*TimeStamp_Rate/(Videos_Header.TimeStamp_End-Videos_Header.TimeStamp_Begin);
- if (FrameRate)
- Parser->Fill(Stream_Video, 0, Video_FrameRate, FrameRate);
- }
- #endif //MEDIAINFO_AVC_YES
- Videos[2].Parsers.push_back(Parser);
- }
- break;
- default :
- {
- File__Analyze* Parser=new File__Analyze;
- Open_Buffer_Init(Parser);
- Videos[2].Parsers.push_back(Parser);
- }
- }
- */
-
- #ifdef MEDIAINFO_DVDIF_YES
- Videos[2].Parsers.push_back(new File_DvDif());
- #endif //MEDIAINFO_DVDIF_YES
- #ifdef MEDIAINFO_MPEGV_YES
- {
- File_Mpegv* Parser=new File_Mpegv();
- #if defined(MEDIAINFO_ANCILLARY_YES)
- Parser->Ancillary=&Ancillary;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
- Videos[2].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_MPEGV_YES
- #ifdef MEDIAINFO_AVC_YES
- Videos[2].Parsers.push_back(new File_Avc());
- #endif //MEDIAINFO_AVC_YES
- #ifdef MEDIAINFO_VC3_YES
- Videos[2].Parsers.push_back(new File_Vc3());
- #endif //MEDIAINFO_VC3_YES
- for (size_t Pos2=0; Pos2<Videos[2].Parsers.size(); Pos2++)
- Open_Buffer_Init(Videos[2].Parsers[Pos2]);
-
- Stream_Count++;
- }
-
- //Parsing
- for (size_t Pos2=0; Pos2<Videos[2].Parsers.size(); Pos2++)
- {
- Videos[2].Parsers[Pos2]->FrameInfo=FrameInfo;
- Open_Buffer_Continue(Videos[2].Parsers[Pos2], Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)Video_Sizes[2]);
- Element_Show();
-
- if (Videos[2].Parsers.size()>1)
- {
- if (!Videos[2].Parsers[Pos2]->Status[IsAccepted] && Videos[2].Parsers[Pos2]->Status[IsFinished])
- {
- delete *(Videos[2].Parsers.begin()+Pos2);
- Videos[2].Parsers.erase(Videos[2].Parsers.begin()+Pos2);
- Pos2--;
- }
- else if (Videos[2].Parsers.size()>1 && Videos[2].Parsers[Pos2]->Status[IsAccepted])
- {
- File__Analyze* Parser=Videos[2].Parsers[Pos2];
- for (size_t Pos3=0; Pos3<Videos[2].Parsers.size(); Pos3++)
- {
- if (Pos3!=Pos2)
- delete *(Videos[2].Parsers.begin()+Pos3);
- }
- Videos[2].Parsers.clear();
- Videos[2].Parsers.push_back(Parser);
- }
- }
-
- if (Videos[2].Parsers.size()==1 && !Videos[2].IsFilled && Videos[2].Parsers[0]->Status[IsFilled])
- {
- if (Stream_Count>0)
- Stream_Count--;
- Videos[2].IsFilled=true;
- }
- }
- Element_Offset+=Video_Sizes[2];
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_LXF_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Lxf.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Lxf.h
deleted file mode 100644
index d0a7d9b61..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Lxf.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Lxf files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_LxfH
-#define MediaInfo_File_LxfH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#if defined(MEDIAINFO_ANCILLARY_YES)
- #include <MediaInfo/Multiple/File_Ancillary.h>
-#endif //defined(MEDIAINFO_ANCILLARY_YES)
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Lxf
-//***************************************************************************
-
-class File_Lxf : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Lxf();
- ~File_Lxf();
-
-protected :
- //Streams management
- void Streams_Fill ();
- void Streams_Fill_PerStream (File__Analyze* Parser, stream_t Container_StreamKind, size_t Parser_Pos, int8u Format=(int8u)-1);
- void Streams_Finish ();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Global
- void Read_Buffer_Continue();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- bool Header_Begin ();
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Header();
- void Header_Info();
- void Header_Meta();
- void Audio();
- void Audio_Stream(size_t Pos);
- void Video();
- void Video_Stream(size_t Pos);
- void Video_Stream_1();
- void Video_Stream_2();
-
- //Streams
- struct stream
- {
- std::vector<File__Analyze*> Parsers;
- int64u BytesPerFrame;
- int8u Format;
- bool IsFilled;
-
- stream()
- {
- BytesPerFrame=(int64u)-1;
- Format=(int8u)-1;
- IsFilled=false;
- }
- };
- typedef std::vector<stream> streams;
- streams Videos;
- streams Audios;
- struct stream_header
- {
- int64u TimeStamp_Begin;
- int64u TimeStamp_End;
- int64u Duration;
- int64u Duration_First;
- int8u PictureType;
-
- stream_header()
- {
- TimeStamp_Begin=(int64u)-1;
- TimeStamp_End=(int64u)-1;
- Duration=(int64u)-1;
- Duration_First=(int64u)-1;
- PictureType=(int8u)-1;
- }
- stream_header(int64u TimeStamp_Begin_, int64u TimeStamp_End_, int64u Duration_, int8u PictureType_)
- {
- TimeStamp_Begin=TimeStamp_Begin_;
- TimeStamp_End=TimeStamp_End_;
- Duration=Duration_;
- Duration_First = (int64u)-1;
- PictureType = PictureType_;
- }
- };
- stream_header Videos_Header;
- stream_header Audios_Header;
- #if defined(MEDIAINFO_ANCILLARY_YES)
- File_Ancillary* Ancillary;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
-
- //Temp
- bool LookingForLastFrame;
- int64u Stream_Count;
- int64u Info_General_StreamSize;
- std::vector<int64u> Header_Sizes;
- std::vector<int64u> Audio_Sizes;
- size_t Audio_Sizes_Pos;
- std::vector<int64u> Video_Sizes;
- size_t Video_Sizes_Pos;
- int8u SampleSize;
- int32u Version;
-
- //Hints
- size_t* File_Buffer_Size_Hint_Pointer;
-
- //Demux
- #if MEDIAINFO_DEMUX
- File__Analyze* DemuxParser;
- #endif //MEDIAINFO_DEMUX
-
- //Seek
- typedef std::map<int64u, stream_header> time_offsets;
- time_offsets TimeOffsets;
- #if MEDIAINFO_SEEK
- int64u SeekRequest_Divider;
- int64u SeekRequest;
- #endif //MEDIAINFO_SEEK
- float64 FrameRate;
- float64 TimeStamp_Rate;
- bool Duration_Detected;
- int64u LastAudio_BufferOffset;
- stream_header LastAudio_TimeOffset;
-};
-
-} //NameSpace
-
-#endif
-
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mk.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mk.cpp
deleted file mode 100644
index 9c00276e3..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mk.cpp
+++ /dev/null
@@ -1,3597 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MK_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mk.h"
-#if defined(MEDIAINFO_OGG_YES)
- #include "MediaInfo/Multiple/File_Ogg.h"
-#endif
-#if defined(MEDIAINFO_RM_YES)
- #include "MediaInfo/Multiple/File_Rm.h"
-#endif
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_HEVC_YES)
- #include "MediaInfo/Video/File_Hevc.h"
-#endif
-#if defined(MEDIAINFO_FFV1_YES)
- #include "MediaInfo/Video/File_Ffv1.h"
-#endif
-#if defined(MEDIAINFO_HUFFYUV_YES)
- #include "MediaInfo/Video/File_HuffYuv.h"
-#endif
-#if defined(MEDIAINFO_VC1_YES)
- #include "MediaInfo/Video/File_Vc1.h"
-#endif
-#if defined(MEDIAINFO_DIRAC_YES)
- #include "MediaInfo/Video/File_Dirac.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_PRORES_YES)
- #include "MediaInfo/Video/File_ProRes.h"
-#endif
-#if defined(MEDIAINFO_VP8_YES)
- #include "MediaInfo/Video/File_Vp8.h"
-#endif
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_DTS_YES)
- #include "MediaInfo/Audio/File_Dts.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_FLAC_YES)
- #include "MediaInfo/Audio/File_Flac.h"
-#endif
-#if defined(MEDIAINFO_OPUS_YES)
- #include "MediaInfo/Audio/File_Opus.h"
-#endif
-#if defined(MEDIAINFO_WVPK_YES)
- #include "MediaInfo/Audio/File_Wvpk.h"
-#endif
-#if defined(MEDIAINFO_TTA_YES)
- #include "MediaInfo/Audio/File_Tta.h"
-#endif
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#include <cstring>
-#include <algorithm>
-#if MEDIAINFO_DEMUX
- #include "base64.h"
-#endif //MEDIAINFO_DEMUX
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Mk_ContentCompAlgo(int64u Algo)
-{
- switch (Algo)
- {
- case 0x00 : return "zlib";
- case 0x01 : return "bzlib";
- case 0x02 : return "lzo1x";
- case 0x03 : return "Header stripping";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mk_StereoMode(int64u StereoMode)
-{
- switch (StereoMode)
- {
- case 0x00 : return ""; //Mono (default)
- case 0x01 : return "Side by Side (left eye first)";
- case 0x02 : return "Top-Bottom (right eye first)";
- case 0x03 : return "Top-Bottom (left eye first)";
- case 0x04 : return "Checkboard (right eye first)";
- case 0x05 : return "Checkboard (left eye first)";
- case 0x06 : return "Row Interleaved (right eye first)";
- case 0x07 : return "Row Interleaved (left eye first)";
- case 0x08 : return "Column Interleaved (right eye first)";
- case 0x09 : return "Column Interleaved (left eye first)";
- case 0x0A : return "Anaglyph (cyan/red)";
- case 0x0B : return "Side by Side (right eye first)";
- case 0x0C : return "Anaglyph (green/magenta)";
- case 0x0D : return "Both Eyes laced in one block (left eye first)";
- case 0x0E : return "Both Eyes laced in one block (right eye first)";
- default : return "Unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mk_StereoMode_v2(int64u StereoMode)
-{
- switch (StereoMode)
- {
- case 0x00 : return ""; //Mono (default)
- case 0x01 : return "Right Eye";
- case 0x02 : return "Left Eye";
- case 0x03 : return "Both Eye";
- default : return "Unknown";
- }
-}
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-extern std::string ExtensibleWave_ChannelMask (int32u ChannelMask);
-
-//---------------------------------------------------------------------------
-extern std::string ExtensibleWave_ChannelMask2 (int32u ChannelMask);
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mk::File_Mk()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Matroska;
- StreamIDs_Width[0]=16;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- DataMustAlwaysBeComplete=false;
-
- //Temp
- Format_Version=0;
- TimecodeScale=1000000; //Default value
- Duration=0;
- Cluster_AlreadyParsed=false;
-
- //Helpers
- CodecPrivate=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_Mk::~File_Mk()
-{
- delete[] CodecPrivate; //CodecPrivate=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mk::Streams_Finish()
-{
- if (Duration!=0 && TimecodeScale!=0)
- Fill(Stream_General, 0, General_Duration, Duration*int64u_float64(TimecodeScale)/1000000.0, 0);
- for (std::map<int64u, stream>::iterator Temp=Stream.begin(); Temp!=Stream.end(); ++Temp)
- {
- StreamKind_Last=Temp->second.StreamKind;
- StreamPos_Last=Temp->second.StreamPos;
-
- if (Temp->second.DisplayAspectRatio!=0)
- {
- //Corrections
- if (Temp->second.DisplayAspectRatio>=1.777 && Temp->second.DisplayAspectRatio<=1.778)
- Temp->second.DisplayAspectRatio=((float32)16)/9;
- if (Temp->second.DisplayAspectRatio>=1.333 && Temp->second.DisplayAspectRatio<=1.334)
- Temp->second.DisplayAspectRatio=((float32)4)/3;
- Fill(Stream_Video, Temp->second.StreamPos, Video_DisplayAspectRatio, Temp->second.DisplayAspectRatio, 3, true);
- int64u Width=Retrieve(Stream_Video, Temp->second.StreamPos, Video_Width).To_int64u();
- int64u Height=Retrieve(Stream_Video, Temp->second.StreamPos, Video_Height).To_int64u();
- if (Width)
- Fill(Stream_Video, Temp->second.StreamPos, Video_PixelAspectRatio, Temp->second.DisplayAspectRatio*Height/Width, 3, true);
- }
-
- if (Temp->second.Parser)
- {
- Fill(Temp->second.Parser);
- if (Config->ParseSpeed<=1.0)
- Temp->second.Parser->Open_Buffer_Unsynch();
- }
-
- //Video specific
- if (StreamKind_Last==Stream_Video)
- {
- //FrameRate
- bool IsVfr=false;
- if (Temp->second.Segment_Cluster_BlockGroup_BlockDuration_Counts.size()>2)
- IsVfr=true;
- else if (Temp->second.TimeCodes.size()>1)
- {
- //Trying to detect VFR
- std::vector<int64s> FrameRate_Between;
- std::sort(Temp->second.TimeCodes.begin(), Temp->second.TimeCodes.end()); //This is PTS, no DTS --> Some frames are out of order
- size_t FramesToAdd=0;
- for (size_t Pos=1; Pos<Temp->second.TimeCodes.size(); Pos++)
- {
- int64u Duration=Temp->second.TimeCodes[Pos]-Temp->second.TimeCodes[Pos-1];
- if (Duration)
- FrameRate_Between.push_back(Duration);
- else
- FramesToAdd++;
- }
- if (FrameRate_Between.size()>1)
- {
- int64s FrameRate_Between_Last=FrameRate_Between[FrameRate_Between.size()-1];
- size_t Pos=FrameRate_Between.size()-2;
- while (Pos)
- {
- if (!(FrameRate_Between[Pos]*0.9<FrameRate_Between_Last
- && FrameRate_Between[Pos]*1.1>FrameRate_Between_Last))
- break;
- Pos--;
- }
- if (Pos)
- FrameRate_Between.resize(Pos+1); //We peek 40 frames, and remove the last ones, because this is PTS, no DTS --> Some frames are out of order
- }
- if (FrameRate_Between.size()>=30+1+FramesToAdd)
- FrameRate_Between.resize((FrameRate_Between.size()-4>30+1+FramesToAdd)?(FrameRate_Between.size()-4):(30+1+FramesToAdd)); //We peek 40 frames, and remove the last ones, because this is PTS, no DTS --> Some frames are out of order
- std::sort(FrameRate_Between.begin(), FrameRate_Between.end());
- if (!FrameRate_Between.empty()
- && FrameRate_Between[0]*0.9<FrameRate_Between[FrameRate_Between.size()-1]
- && FrameRate_Between[0]*1.1>FrameRate_Between[FrameRate_Between.size()-1]
- && TimecodeScale)
- {
- float Time=0;
- if (Temp->second.TimeCodes.size()>30+FramesToAdd)
- Time=(float)(Temp->second.TimeCodes[30+FramesToAdd]-Temp->second.TimeCodes[0])/30; //30 frames for handling 30 fps rounding problems
- else if (Temp->second.TrackDefaultDuration)
- Time=(float)Temp->second.TrackDefaultDuration/TimecodeScale; //TrackDefaultDuration is maybe more precise than the time code
- else
- Time=(float)(Temp->second.TimeCodes[Temp->second.TimeCodes.size()-1]-Temp->second.TimeCodes[0])/(Temp->second.TimeCodes.size()-1);
- if (Time)
- {
- float32 FrameRate_FromCluster=1000000000/Time/TimecodeScale;
- if (Temp->second.Parser)
- {
- float32 FrameRate_FromParser=Temp->second.Parser->Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate).To_float32();
- if (FrameRate_FromParser
- && FrameRate_FromParser*2>FrameRate_FromCluster*0.9
- && FrameRate_FromParser*2<FrameRate_FromCluster*1.1) //TODO: awfull method to detect interlaced content with one field per block
- FrameRate_FromCluster/=2;
- }
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, FrameRate_FromCluster);
- }
- }
- else if (!FrameRate_Between.empty())
- IsVfr=true;
- }
- else if (Temp->second.TrackDefaultDuration)
- {
- float32 FrameRate_FromCluster=1000000000/(float32)Temp->second.TrackDefaultDuration;
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, FrameRate_FromCluster);
- }
-
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Mode, IsVfr?"VFR":"CFR");
- }
-
- if (Temp->second.Parser)
- {
- //Delay
- if (Temp->second.TimeCode_Start!=(int64u)-1 && TimecodeScale)
- {
- //From TimeCode
- float64 Delay=Temp->second.TimeCode_Start*int64u_float64(TimecodeScale)/1000000.0;
-
- //From stream format
- if (StreamKind_Last==Stream_Audio && Count_Get(Stream_Video)==1 && Temp->second.Parser->Count_Get(Stream_General)>0)
- {
- if (Temp->second.Parser->Buffer_TotalBytes_FirstSynched==0)
- ;
- else if (Temp->second.AvgBytesPerSec!=0)
- Delay+=((float64)Temp->second.Parser->Buffer_TotalBytes_FirstSynched)*1000/Temp->second.AvgBytesPerSec;
- else
- {
- int64u BitRate = Temp->second.Parser->Retrieve(Stream_Audio, 0, Audio_BitRate).To_int64u();
- if (BitRate == 0)
- BitRate = Temp->second.Parser->Retrieve(Stream_Audio, 0, Audio_BitRate_Nominal).To_int64u();
- if (BitRate)
- Delay += ((float64)Temp->second.Parser->Buffer_TotalBytes_FirstSynched) * 1000 / BitRate;
- }
- }
-
- //Filling
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay), Delay, 0, true);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_Source), "Container");
- }
-
- Ztring Duration_Temp, Codec_Temp;
- Duration_Temp=Retrieve(StreamKind_Last, Temp->second.StreamPos, Fill_Parameter(StreamKind_Last, Generic_Duration)); //Duration from stream is sometimes false
- Codec_Temp=Retrieve(StreamKind_Last, Temp->second.StreamPos, Fill_Parameter(StreamKind_Last, Generic_Codec)); //We want to keep the 4CC
-
- Finish(Temp->second.Parser);
- Merge(*Temp->second.Parser, Temp->second.StreamKind, 0, Temp->second.StreamPos);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Duration), Duration_Temp, true);
- if (Temp->second.StreamKind==Stream_Video && !Codec_Temp.empty())
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), Codec_Temp, true);
-
- //Special case: AAC
- if (StreamKind_Last==Stream_Audio
- && (Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("AAC")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("MPEG Audio")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("Vorbis")))
- Clear(Stream_Audio, StreamPos_Last, Audio_BitDepth); //Resolution is not valid for AAC / MPEG Audio / Vorbis
-
- //Special case: 5.1
- if (StreamKind_Last==Stream_Audio
- && (Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("AC-3")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("E-AC-3")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("DTS"))
- && Retrieve(Stream_Audio, StreamPos_Last, Audio_Channel_s__Original)==__T("6")
- && Retrieve(Stream_Audio, StreamPos_Last, Audio_Channel_s_)==__T("5"))
- {
- Clear(Stream_Audio, StreamPos_Last, Audio_Channel_s__Original);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, 6, 10, true); //Some muxers do not count LFE in the channel count, let's say it is normal
- }
-
- //VFR
- if (Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate_Mode)==__T("VFR") && Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate_Original).empty())
- {
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Original, Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate));
- Clear(Stream_Video, StreamPos_Last, Video_FrameRate);
- }
- }
-
- if (Temp->second.FrameRate!=0 && Retrieve(Stream_Video, Temp->second.StreamPos, Video_FrameRate).empty())
- Fill(Stream_Video, Temp->second.StreamPos, Video_FrameRate, Temp->second.FrameRate, 3);
-
- //Flags
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, "Default", Temp->second.Default?"Yes":"No");
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, "Forced", Temp->second.Forced?"Yes":"No");
- }
-
- //Chapters
- if (TimecodeScale)
- {
- for (EditionEntries_Pos=0; EditionEntries_Pos<EditionEntries.size(); EditionEntries_Pos++)
- {
- Stream_Prepare(Stream_Menu);
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_Begin, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
- for (ChapterAtoms_Pos=0; ChapterAtoms_Pos<EditionEntries[EditionEntries_Pos].ChapterAtoms.size(); ChapterAtoms_Pos++)
- {
- if (EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterTimeStart!=(int64u)-1)
- {
- Ztring Text;
- for (ChapterDisplays_Pos=0; ChapterDisplays_Pos<EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterDisplays.size(); ChapterDisplays_Pos++)
- {
- Ztring PerLanguage;
- if (!EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterDisplays[ChapterDisplays_Pos].ChapLanguage.empty())
- PerLanguage=MediaInfoLib::Config.Iso639_1_Get(EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterDisplays[ChapterDisplays_Pos].ChapLanguage)+__T(':');
- PerLanguage+=EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterDisplays[ChapterDisplays_Pos].ChapString;
- Text+=PerLanguage+__T(" - ");
- }
- if (Text.size())
- Text.resize(Text.size()-3);
- Fill(Stream_Menu, StreamPos_Last, Ztring().Duration_From_Milliseconds(EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterTimeStart/1000000).To_UTF8().c_str(), Text);
- }
- }
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_End, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
- }
- }
-
- //Attachments
- for (size_t Pos=0; Pos<AttachedFiles.size(); Pos++)
- {
- Segment_Attachements_AttachedFile_FileName();
- }
-
- //Purge what is not needed anymore
- if (!File_Name.empty()) //Only if this is not a buffer, with buffer we can have more data
- Stream.clear();
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mk::Header_Parse()
-{
- //Test of zero padding
- int8u Null;
- Peek_B1(Null);
- if (Null==0x00)
- {
- if (Buffer_Offset_Temp==0)
- Buffer_Offset_Temp=Buffer_Offset+1;
-
- while (Buffer_Offset_Temp<Buffer_Size)
- {
- if (Buffer[Buffer_Offset_Temp])
- break;
- Buffer_Offset_Temp++;
- }
- if (Buffer_Offset_Temp>=Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
-
- Header_Fill_Code((int32u)-1); //Should be (int64u)-1 but Borland C++ does not like this
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
-
- return;
- }
-
- //Parsing
- int64u Name, Size;
- Get_EB (Name, "Name");
- Get_EB (Size, "Size");
-
- //Filling
- Header_Fill_Code(Name, Ztring().From_Number(Name, 16));
- Header_Fill_Size(Element_Offset+Size);
-}
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- //Common
- const int64u Zero=(int32u)-1; //Should be (int64u)-1 but Borland C++ does not like this
- const int64u CRC32=0x3F;
- const int64u Void=0x6C;
-
- //EBML
- const int64u Ebml=0xA45DFA3;
- const int64u Ebml_Version=0x286;
- const int64u Ebml_ReadVersion=0x2F7;
- const int64u Ebml_MaxIDLength=0x2F2;
- const int64u Ebml_MaxSizeLength=0x2F3;
- const int64u Ebml_DocType=0x282;
- const int64u Ebml_DocTypeVersion=0x287;
- const int64u Ebml_DocTypeReadVersion=0x285;
-
- //Segment
- const int64u Segment=0x8538067;
- const int64u Segment_Attachements=0x0941A469;
- const int64u Segment_Attachements_AttachedFile=0x21A7;
- const int64u Segment_Attachements_AttachedFile_FileData=0x065C;
- const int64u Segment_Attachements_AttachedFile_FileDescription=0x067E;
- const int64u Segment_Attachements_AttachedFile_FileName=0x066E;
- const int64u Segment_Attachements_AttachedFile_FileMimeType=0x0660;
- const int64u Segment_Attachements_AttachedFile_FileReferral=0x0675;
- const int64u Segment_Attachements_AttachedFile_FileUID=0x06AE;
- const int64u Segment_Chapters=0x43A770;
- const int64u Segment_Chapters_EditionEntry=0x05B9;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom=0x36;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess=0x2944;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCodecID=0x2955;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand=0x2911;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand_ChapProcessData=0x2933;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand_ChapProcessTime=0x2922;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessPrivate=0x050D;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay=0x00;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapCountry=0x037E;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapLanguage=0x037C;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapString=0x05;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterFlagEnabled=0x0598;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterFlagHidden=0x18;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterPhysicalEquiv=0x23C3;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterSegmentEditionUID=0x2EBC;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterSegmentUID=0x2E67;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterTimeStart=0x11;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterTimeEnd=0x12;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterTrack=0x0F;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterTrack_ChapterTrackNumber=0x09;
- const int64u Segment_Chapters_EditionEntry_ChapterAtom_ChapterUID=0x33C4;
- const int64u Segment_Chapters_EditionEntry_EditionFlagDefault=0x05DB;
- const int64u Segment_Chapters_EditionEntry_EditionFlagHidden=0x05BD;
- const int64u Segment_Chapters_EditionEntry_EditionFlagOrdered=0x05DD;
- const int64u Segment_Chapters_EditionEntry_EditionUID=0x05BC;
- const int64u Segment_Cluster=0xF43B675;
- const int64u Segment_Cluster_BlockGroup=0x20;
- const int64u Segment_Cluster_BlockGroup_Block=0x21;
- const int64u Segment_Cluster_BlockGroup_BlockAdditions=0x35A1;
- const int64u Segment_Cluster_BlockGroup_BlockAdditions_BlockMore=0x26;
- const int64u Segment_Cluster_BlockGroup_BlockAdditions_BlockMore_BlockAddID=0x6E;
- const int64u Segment_Cluster_BlockGroup_BlockAdditions_BlockMore_BlockAdditional=0x25;
- const int64u Segment_Cluster_BlockGroup_BlockDuration=0x1B;
- const int64u Segment_Cluster_BlockGroup_ReferenceBlock=0x7B;
- const int64u Segment_Cluster_BlockGroup_ReferencePriority=0x7A;
- const int64u Segment_Cluster_BlockGroup_Slices=0xE;
- const int64u Segment_Cluster_BlockGroup_Slices_TimeSlice=0x68;
- const int64u Segment_Cluster_BlockGroup_Slices_TimeSlice_Duration=0x4F;
- const int64u Segment_Cluster_BlockGroup_Slices_TimeSlice_LaceNumber=0x4C;
- const int64u Segment_Cluster_Position=0x27;
- const int64u Segment_Cluster_PrevSize=0x2B;
- const int64u Segment_Cluster_SilentTracks=0x1854;
- const int64u Segment_Cluster_SilentTracks_SilentTrackNumber=0x18D7;
- const int64u Segment_Cluster_SimpleBlock=0x23;
- const int64u Segment_Cluster_Timecode=0x67;
- const int64u Segment_Cues=0xC53BB6B;
- const int64u Segment_Cues_CuePoint=0x3B;
- const int64u Segment_Cues_CuePoint_CueTime=0x33;
- const int64u Segment_Cues_CuePoint_CueTrackPositions=0x37;
- const int64u Segment_Cues_CuePoint_CueTrackPositions_CueTrack=0x77;
- const int64u Segment_Cues_CuePoint_CueTrackPositions_CueClusterPosition=0x71;
- const int64u Segment_Cues_CuePoint_CueTrackPositions_CueBlockNumber=0x1378;
- const int64u Segment_Info=0x549A966;
- const int64u Segment_Info_ChapterTranslate=0x2924;
- const int64u Segment_Info_ChapterTranslate_ChapterTranslateCodec=0x29BF;
- const int64u Segment_Info_ChapterTranslate_ChapterTranslateEditionUID=0x29FC;
- const int64u Segment_Info_ChapterTranslate_ChapterTranslateID=0x29A5;
- const int64u Segment_Info_DateUTC=0x461;
- const int64u Segment_Info_Duration=0x489;
- const int64u Segment_Info_MuxingApp=0xD80;
- const int64u Segment_Info_NextFilename=0x1E83BB;
- const int64u Segment_Info_NextUID=0x1EB923;
- const int64u Segment_Info_PrevFilename=0x1C83AB;
- const int64u Segment_Info_PrevUID=0x1CB923;
- const int64u Segment_Info_SegmentFamily=0x444;
- const int64u Segment_Info_SegmentFilename=0x3384;
- const int64u Segment_Info_SegmentUID=0x33A4;
- const int64u Segment_Info_TimecodeScale=0xAD7B1;
- const int64u Segment_Info_Title=0x3BA9;
- const int64u Segment_Info_WritingApp=0x1741;
- const int64u Segment_SeekHead=0x14D9B74;
- const int64u Segment_SeekHead_Seek=0xDBB;
- const int64u Segment_SeekHead_Seek_SeekID=0x13AB;
- const int64u Segment_SeekHead_Seek_SeekPosition=0x13AC;
- const int64u Segment_Tags=0x0254C367;
- const int64u Segment_Tags_Tag=0x3373;
- const int64u Segment_Tags_Tag_SimpleTag=0x27C8;
- const int64u Segment_Tags_Tag_SimpleTag_TagBinary=0x485;
- const int64u Segment_Tags_Tag_SimpleTag_TagDefault=0x484;
- const int64u Segment_Tags_Tag_SimpleTag_TagLanguage=0x47A;
- const int64u Segment_Tags_Tag_SimpleTag_TagName=0x5A3;
- const int64u Segment_Tags_Tag_SimpleTag_TagString=0x487;
- const int64u Segment_Tags_Tag_Targets=0x23C0;
- const int64u Segment_Tags_Tag_Targets_AttachmentUID=0x23C6;
- const int64u Segment_Tags_Tag_Targets_ChapterUID=0x23C4;
- const int64u Segment_Tags_Tag_Targets_EditionUID=0x23C9;
- const int64u Segment_Tags_Tag_Targets_TargetType=0x23CA;
- const int64u Segment_Tags_Tag_Targets_TargetTypeValue=0x28CA;
- const int64u Segment_Tags_Tag_Targets_TrackUID=0x23C5;
- const int64u Segment_Tracks=0x654AE6B;
- const int64u Segment_Tracks_TrackEntry=0x2E;
- const int64u Segment_Tracks_TrackEntry_AttachmentLink=0x3446;
- const int64u Segment_Tracks_TrackEntry_Audio=0x61;
- const int64u Segment_Tracks_TrackEntry_Audio_BitDepth=0x2264;
- const int64u Segment_Tracks_TrackEntry_Audio_Channels=0x1F;
- const int64u Segment_Tracks_TrackEntry_Audio_OutputSamplingFrequency=0x38B5;
- const int64u Segment_Tracks_TrackEntry_Audio_SamplingFrequency=0x35;
- const int64u Segment_Tracks_TrackEntry_CodecDecodeAll=0x2A;
- const int64u Segment_Tracks_TrackEntry_CodecID=0x6;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings=0x2D80;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding=0x2240;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Order=0x1031;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Scope=0x1032;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Type=0x1033;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression=0x1034;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression_ContentCompAlgo=0x0254;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression_ContentCompSettings=0x0255;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption=0x1035;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentEncAlgo=0x07E1;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentEncKeyID=0x07E2;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSignature=0x07E3;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSigKeyID=0x07E4;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSigAlgo=0x07E5;
- const int64u Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSigHashAlgo=0x07E6;
- const int64u Segment_Tracks_TrackEntry_CodecName=0x58688;
- const int64u Segment_Tracks_TrackEntry_CodecPrivate=0x23A2;
- const int64u Segment_Tracks_TrackEntry_DefaultDuration=0x3E383;
- const int64u Segment_Tracks_TrackEntry_FlagDefault=0x8;
- const int64u Segment_Tracks_TrackEntry_FlagEnabled=0x39;
- const int64u Segment_Tracks_TrackEntry_FlagForced=0x15AA;
- const int64u Segment_Tracks_TrackEntry_FlagLacing=0x1C;
- const int64u Segment_Tracks_TrackEntry_Language=0x2B59C;
- const int64u Segment_Tracks_TrackEntry_MaxBlockAdditionID=0x15EE;
- const int64u Segment_Tracks_TrackEntry_MaxCache=0x2DF8;
- const int64u Segment_Tracks_TrackEntry_MinCache=0x2DE7;
- const int64u Segment_Tracks_TrackEntry_Name=0x136E;
- const int64u Segment_Tracks_TrackEntry_TrackNumber=0x57;
- const int64u Segment_Tracks_TrackEntry_TrackTimecodeScale=0x3314F;
- const int64u Segment_Tracks_TrackEntry_TrackType=0x3;
- const int64u Segment_Tracks_TrackEntry_TrackUID=0x33C5;
- const int64u Segment_Tracks_TrackEntry_Video=0x60;
- const int64u Segment_Tracks_TrackEntry_Video_AspectRatioType=0x14B3;
- const int64u Segment_Tracks_TrackEntry_Video_ColourSpace=0xEB524;
- const int64u Segment_Tracks_TrackEntry_Video_DisplayHeight=0x14BA;
- const int64u Segment_Tracks_TrackEntry_Video_DisplayUnit=0x14B2;
- const int64u Segment_Tracks_TrackEntry_Video_DisplayWidth=0x14B0;
- const int64u Segment_Tracks_TrackEntry_Video_FlagInterlaced=0x1A;
- const int64u Segment_Tracks_TrackEntry_Video_FrameRate=0x383E3;
- const int64u Segment_Tracks_TrackEntry_Video_PixelCropBottom=0x14AA;
- const int64u Segment_Tracks_TrackEntry_Video_PixelCropLeft=0x14CC;
- const int64u Segment_Tracks_TrackEntry_Video_PixelCropRight=0x14DD;
- const int64u Segment_Tracks_TrackEntry_Video_PixelCropTop=0x14BB;
- const int64u Segment_Tracks_TrackEntry_Video_PixelHeight=0x3A;
- const int64u Segment_Tracks_TrackEntry_Video_PixelWidth=0x30;
- const int64u Segment_Tracks_TrackEntry_Video_StereoMode=0x13B8;
- const int64u Segment_Tracks_TrackEntry_Video_StereoModeBuggy=0x13B9;
- const int64u Segment_Tracks_TrackEntry_TrackOverlay=0x2FAB;
- const int64u Segment_Tracks_TrackEntry_TrackTranslate=0x2624;
- const int64u Segment_Tracks_TrackEntry_TrackTranslate_Codec=0x26BF;
- const int64u Segment_Tracks_TrackEntry_TrackTranslate_EditionUID=0x26FC;
- const int64u Segment_Tracks_TrackEntry_TrackTranslate_TrackID=0x26A5;
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Data_Parse()
-{
- #define LIS2(_ATOM, _NAME) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- { \
- Element_Name(_NAME); \
- _ATOM(); \
- Element_ThisIsAList(); \
- } \
-
- #define ATO2(_ATOM, _NAME) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- { \
- if (Element_IsComplete_Get()) \
- { \
- Element_Name(_NAME); \
- _ATOM(); \
- } \
- else \
- { \
- Element_WaitForMoreData(); \
- return; \
- } \
- } \
- break; \
-
- #define ATOM_END_MK \
- ATOM(Zero) \
- ATOM(CRC32) \
- ATOM(Void) \
- ATOM_END
-
- //Parsing
- DATA_BEGIN
- LIST(Ebml)
- ATOM_BEGIN
- ATOM(Ebml_Version)
- ATOM(Ebml_ReadVersion)
- ATOM(Ebml_MaxIDLength)
- ATOM(Ebml_MaxSizeLength)
- ATOM(Ebml_DocType)
- ATOM(Ebml_DocTypeVersion)
- ATOM(Ebml_DocTypeReadVersion)
- ATOM_END_MK
- LIST(Segment)
- ATOM_BEGIN
- LIST(Segment_Attachements)
- ATOM_BEGIN
- LIST(Segment_Attachements_AttachedFile)
- ATOM_BEGIN
- LIST_SKIP(Segment_Attachements_AttachedFile_FileData) //This is ATOM, but some ATOMs are too big
- ATOM(Segment_Attachements_AttachedFile_FileDescription)
- ATOM(Segment_Attachements_AttachedFile_FileName)
- ATOM(Segment_Attachements_AttachedFile_FileMimeType)
- ATOM(Segment_Attachements_AttachedFile_FileReferral)
- ATOM(Segment_Attachements_AttachedFile_FileUID)
- ATOM_END_MK
- ATOM_END_MK
- LIST(Segment_Chapters)
- ATOM_BEGIN
- LIST(Segment_Chapters_EditionEntry)
- ATOM_BEGIN
- LIST(Segment_Chapters_EditionEntry_ChapterAtom)
- ATOM_BEGIN
- LIST(Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess)
- ATOM_BEGIN
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCodecID)
- LIST(Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand)
- ATOM_BEGIN
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand_ChapProcessData)
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand_ChapProcessTime)
- ATOM_END_MK
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessPrivate)
- ATOM_END_MK
- LIST(Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay)
- ATOM_BEGIN
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapCountry)
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapLanguage)
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapString)
- ATOM_END_MK
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterFlagEnabled)
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterFlagHidden)
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterPhysicalEquiv)
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterSegmentEditionUID)
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterSegmentUID)
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterTimeEnd)
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterTimeStart)
- LIST(Segment_Chapters_EditionEntry_ChapterAtom_ChapterTrack)
- ATOM_BEGIN
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterTrack_ChapterTrackNumber)
- ATOM_END_MK
- ATOM(Segment_Chapters_EditionEntry_ChapterAtom_ChapterUID)
- ATOM_END_MK
- ATOM(Segment_Chapters_EditionEntry_EditionFlagDefault)
- ATOM(Segment_Chapters_EditionEntry_EditionFlagHidden)
- ATOM(Segment_Chapters_EditionEntry_EditionFlagOrdered)
- ATOM(Segment_Chapters_EditionEntry_EditionUID)
- ATOM_END_MK
- ATOM_END_MK
- LIST(Segment_Cluster)
- ATOM_BEGIN
- LIST(Segment_Cluster_BlockGroup)
- ATOM_BEGIN
- ATOM(Segment_Cluster_BlockGroup_Block)
- LIST(Segment_Cluster_BlockGroup_BlockAdditions)
- ATOM_BEGIN
- LIST(Segment_Cluster_BlockGroup_BlockAdditions_BlockMore)
- ATOM_BEGIN
- ATOM(Segment_Cluster_BlockGroup_BlockAdditions_BlockMore_BlockAddID)
- ATOM(Segment_Cluster_BlockGroup_BlockAdditions_BlockMore_BlockAdditional)
- ATOM_END_MK
- ATOM_END_MK
- ATOM(Segment_Cluster_BlockGroup_BlockDuration)
- ATOM(Segment_Cluster_BlockGroup_ReferenceBlock)
- ATOM(Segment_Cluster_BlockGroup_ReferencePriority)
- LIST(Segment_Cluster_BlockGroup_Slices)
- ATOM_BEGIN
- LIST(Segment_Cluster_BlockGroup_Slices_TimeSlice)
- ATOM_BEGIN
- ATOM(Segment_Cluster_BlockGroup_Slices_TimeSlice_Duration)
- ATOM(Segment_Cluster_BlockGroup_Slices_TimeSlice_LaceNumber)
- ATOM_END_MK
- ATOM_END_MK
- ATOM_END_MK
- ATOM(Segment_Cluster_Position)
- ATOM(Segment_Cluster_PrevSize)
- LIST(Segment_Cluster_SilentTracks)
- ATOM_BEGIN
- ATOM(Segment_Cluster_SilentTracks_SilentTrackNumber)
- ATOM_END_MK
- ATOM(Segment_Cluster_SimpleBlock)
- ATOM(Segment_Cluster_Timecode)
- ATOM_END_MK
- LIST(Segment_Cues)
- ATOM_BEGIN
- LIST(Segment_Cues_CuePoint)
- ATOM_BEGIN
- ATOM(Segment_Cues_CuePoint_CueTime)
- LIST(Segment_Cues_CuePoint_CueTrackPositions)
- ATOM_BEGIN
- ATOM(Segment_Cues_CuePoint_CueTrackPositions_CueTrack)
- ATOM(Segment_Cues_CuePoint_CueTrackPositions_CueClusterPosition)
- ATOM(Segment_Cues_CuePoint_CueTrackPositions_CueBlockNumber)
- ATOM_END_MK
- ATOM_END_MK
- ATOM_END_MK
- LIST(Segment_Info)
- ATOM_BEGIN
- LIST(Segment_Info_ChapterTranslate)
- ATOM_BEGIN
- ATOM(Segment_Info_ChapterTranslate_ChapterTranslateCodec)
- ATOM(Segment_Info_ChapterTranslate_ChapterTranslateEditionUID)
- ATOM(Segment_Info_ChapterTranslate_ChapterTranslateID)
- ATOM_END_MK
- ATOM(Segment_Info_DateUTC)
- ATOM(Segment_Info_Duration)
- ATOM(Segment_Info_MuxingApp)
- ATOM(Segment_Info_NextFilename)
- ATOM(Segment_Info_NextUID)
- ATOM(Segment_Info_PrevFilename)
- ATOM(Segment_Info_PrevUID)
- ATOM(Segment_Info_SegmentFamily)
- ATOM(Segment_Info_SegmentFilename)
- ATOM(Segment_Info_SegmentUID)
- ATOM(Segment_Info_TimecodeScale)
- ATOM(Segment_Info_Title)
- ATOM(Segment_Info_WritingApp)
- ATOM_END_MK
- LIST(Segment_SeekHead)
- ATOM_BEGIN
- LIST(Segment_SeekHead_Seek)
- ATOM_BEGIN
- ATOM(Segment_SeekHead_Seek_SeekID)
- ATOM(Segment_SeekHead_Seek_SeekPosition)
- ATOM_END_MK
- ATOM_END_MK
- LIST(Segment_Tags)
- ATOM_BEGIN
- LIST(Segment_Tags_Tag)
- ATOM_BEGIN
- LIST(Segment_Tags_Tag_SimpleTag)
- ATOM_BEGIN
- LIST(Segment_Tags_Tag_SimpleTag)
- ATOM_BEGIN
- LIST(Segment_Tags_Tag_SimpleTag)
- ATOM_BEGIN
- ATOM(Segment_Tags_Tag_SimpleTag_TagBinary)
- ATOM(Segment_Tags_Tag_SimpleTag_TagDefault)
- ATOM(Segment_Tags_Tag_SimpleTag_TagLanguage)
- ATOM(Segment_Tags_Tag_SimpleTag_TagName)
- ATOM(Segment_Tags_Tag_SimpleTag_TagString)
- ATOM_END_MK
- ATOM(Segment_Tags_Tag_SimpleTag_TagBinary)
- ATOM(Segment_Tags_Tag_SimpleTag_TagDefault)
- ATOM(Segment_Tags_Tag_SimpleTag_TagLanguage)
- ATOM(Segment_Tags_Tag_SimpleTag_TagName)
- ATOM(Segment_Tags_Tag_SimpleTag_TagString)
- ATOM_END_MK
- ATOM(Segment_Tags_Tag_SimpleTag_TagBinary)
- ATOM(Segment_Tags_Tag_SimpleTag_TagDefault)
- ATOM(Segment_Tags_Tag_SimpleTag_TagLanguage)
- ATOM(Segment_Tags_Tag_SimpleTag_TagName)
- ATOM(Segment_Tags_Tag_SimpleTag_TagString)
- ATOM_END_MK
- LIST(Segment_Tags_Tag_Targets)
- ATOM_BEGIN
- ATOM(Segment_Tags_Tag_Targets_AttachmentUID)
- ATOM(Segment_Tags_Tag_Targets_ChapterUID)
- ATOM(Segment_Tags_Tag_Targets_EditionUID)
- ATOM(Segment_Tags_Tag_Targets_TargetType)
- ATOM(Segment_Tags_Tag_Targets_TargetTypeValue)
- ATOM(Segment_Tags_Tag_Targets_TrackUID)
- ATOM_END_MK
- ATOM_END_MK
- ATOM_END_MK
- LIST(Segment_Tracks)
- ATOM_BEGIN
- LIST(Segment_Tracks_TrackEntry)
- ATOM_BEGIN
- ATOM(Segment_Tracks_TrackEntry_AttachmentLink)
- LIST(Segment_Tracks_TrackEntry_Audio)
- ATOM_BEGIN
- ATOM(Segment_Tracks_TrackEntry_Audio_BitDepth)
- ATOM(Segment_Tracks_TrackEntry_Audio_Channels)
- ATOM(Segment_Tracks_TrackEntry_Audio_OutputSamplingFrequency)
- ATOM(Segment_Tracks_TrackEntry_Audio_SamplingFrequency)
- ATOM_END_MK
- ATOM(Segment_Tracks_TrackEntry_CodecDecodeAll)
- ATOM(Segment_Tracks_TrackEntry_CodecID)
- LIS2(Segment_Tracks_TrackEntry_ContentEncodings, "ContentEncodings")
- ATOM_BEGIN
- LIS2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding, "ContentEncoding")
- ATOM_BEGIN
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Order, "Order")
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Scope, "Scope")
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Type, "Type")
- LIS2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression, "Compression")
- ATOM_BEGIN
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression_ContentCompAlgo, "Algo")
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression_ContentCompSettings, "Settings")
- ATOM_END_MK
- LIS2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption, "Encryption")
- ATOM_BEGIN
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentEncAlgo, "Algo")
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentEncKeyID, "KeyID")
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSignature, "Signature")
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSigKeyID, "SigKeyID")
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSigAlgo, "SigAlgo")
- ATO2(Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSigHashAlgo, "SigHashAlgo")
- ATOM_END_MK
- ATOM_END_MK
- ATOM_END_MK
- ATOM(Segment_Tracks_TrackEntry_CodecName)
- ATOM(Segment_Tracks_TrackEntry_CodecPrivate)
- ATOM(Segment_Tracks_TrackEntry_DefaultDuration)
- ATOM(Segment_Tracks_TrackEntry_FlagDefault)
- ATOM(Segment_Tracks_TrackEntry_FlagEnabled)
- ATOM(Segment_Tracks_TrackEntry_FlagForced)
- ATOM(Segment_Tracks_TrackEntry_FlagLacing)
- ATOM(Segment_Tracks_TrackEntry_Language)
- ATOM(Segment_Tracks_TrackEntry_MaxBlockAdditionID)
- ATOM(Segment_Tracks_TrackEntry_MaxCache)
- ATOM(Segment_Tracks_TrackEntry_MinCache)
- ATOM(Segment_Tracks_TrackEntry_Name)
- ATOM(Segment_Tracks_TrackEntry_TrackNumber)
- ATOM(Segment_Tracks_TrackEntry_TrackTimecodeScale)
- ATOM(Segment_Tracks_TrackEntry_TrackType)
- ATOM(Segment_Tracks_TrackEntry_TrackUID)
- LIST(Segment_Tracks_TrackEntry_Video)
- ATOM_BEGIN
- ATOM(Segment_Tracks_TrackEntry_Video_AspectRatioType)
- ATOM(Segment_Tracks_TrackEntry_Video_ColourSpace)
- ATOM(Segment_Tracks_TrackEntry_Video_DisplayHeight)
- ATOM(Segment_Tracks_TrackEntry_Video_DisplayUnit)
- ATOM(Segment_Tracks_TrackEntry_Video_DisplayWidth)
- ATOM(Segment_Tracks_TrackEntry_Video_FlagInterlaced)
- ATOM(Segment_Tracks_TrackEntry_Video_FrameRate)
- ATOM(Segment_Tracks_TrackEntry_Video_PixelCropBottom)
- ATOM(Segment_Tracks_TrackEntry_Video_PixelCropLeft)
- ATOM(Segment_Tracks_TrackEntry_Video_PixelCropRight)
- ATOM(Segment_Tracks_TrackEntry_Video_PixelCropTop)
- ATOM(Segment_Tracks_TrackEntry_Video_PixelHeight)
- ATOM(Segment_Tracks_TrackEntry_Video_PixelWidth)
- ATOM(Segment_Tracks_TrackEntry_Video_StereoMode)
- ATOM_END_MK
- ATOM(Segment_Tracks_TrackEntry_TrackOverlay)
- LIST(Segment_Tracks_TrackEntry_TrackTranslate)
- ATOM_BEGIN
- ATOM(Segment_Tracks_TrackEntry_TrackTranslate_Codec)
- ATOM(Segment_Tracks_TrackEntry_TrackTranslate_EditionUID)
- ATOM(Segment_Tracks_TrackEntry_TrackTranslate_TrackID)
- ATOM_END_MK
- ATOM_END_MK
- ATOM_END_MK
- ATOM_END_MK
- DATA_END
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mk::Zero()
-{
- Element_Name("ZeroPadding");
-
- Skip_XX(Element_Size, "Padding");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::CRC32()
-{
- Element_Name("CRC32");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Void()
-{
- Element_Name("Void");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Ebml()
-{
- Element_Name("Ebml");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Ebml_Version()
-{
- Element_Name("Version");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Ebml_ReadVersion()
-{
- Element_Name("ReadVersion");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Ebml_MaxIDLength()
-{
- Element_Name("MaxIDLength");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Ebml_MaxSizeLength()
-{
- Element_Name("MaxSizeLength");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Ebml_DocType()
-{
- Element_Name("DocType");
-
- //Parsing
- Ztring Data;
- Get_Local(Element_Size, Data, "Data"); Element_Info1(Data);
-
- //Filling
- FILLING_BEGIN();
- if (Data==__T("matroska"))
- {
- Accept("Matroska");
- Fill(Stream_General, 0, General_Format, "Matroska");
- }
- else if (Data==__T("webm"))
- {
- Accept("Matroska");
- Fill(Stream_General, 0, General_Format, "WebM");
- }
- else
- {
- Reject("Matroska");
- return;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Ebml_DocTypeVersion()
-{
- Element_Name("DocTypeVersion");
-
- //Parsing
- Format_Version=UInteger_Get();
-
- //Filling
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Format_Version, __T("Version ")+Ztring::ToZtring(Format_Version));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Ebml_DocTypeReadVersion()
-{
- Element_Name("DocTypeReadVersion");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- //Filling
- FILLING_BEGIN();
- if (UInteger!=Format_Version)
- Fill(Stream_General, 0, General_Format_Version, __T("Version ")+Ztring::ToZtring(UInteger)); //Adding compatible version for info about legacy decoders
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment()
-{
- Element_Name("Segment");
-
- if (!Status[IsAccepted])
- {
- Accept("Matroska");
- Fill(Stream_General, 0, General_Format, "Matroska"); //Default is Matroska
- }
-
- Segment_Offset_Begin=File_Offset+Buffer_Offset;
- Segment_Offset_End=File_Offset+Buffer_Offset+Element_TotalSize_Get();
-}
-
-void File_Mk::Segment_Attachements()
-{
- Element_Name("Attachements");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Attachements_AttachedFile()
-{
- Element_Name("AttachedFile");
-
- AttachedFiles.resize(AttachedFiles.size()+1);
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Attachements_AttachedFile_FileData()
-{
- Element_Name("FileData");
-
- //Parsing
- Skip_XX(Element_TotalSize_Get(), "Data");
-
- FILLING_BEGIN();
- if (AttachedFiles[AttachedFiles.size()-1].empty())
- AttachedFiles[AttachedFiles.size()-1]=__T("Yes");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Attachements_AttachedFile_FileDescription()
-{
- Element_Name("FileDescription");
-
- //Parsing
- Local_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Attachements_AttachedFile_FileName()
-{
- Element_Name("FileName");
-
- //Parsing
- Ztring Data=UTF8_Get();
-
- Fill(Stream_General, 0, "Attachements", Data);
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Attachements_AttachedFile_FileMimeType()
-{
- Element_Name("FileMimeType");
-
- //Parsing
- Local_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Attachements_AttachedFile_FileReferral()
-{
- Element_Name("FileReferral");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Attachements_AttachedFile_FileUID()
-{
- Element_Name("FileUID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters()
-{
- Element_Name("Chapters");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry()
-{
- Element_Name("EditionEntry");
-
- //Filling
- EditionEntries_Pos=EditionEntries.size();
- EditionEntries.resize(EditionEntries_Pos+1);
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom()
-{
- Element_Name("ChapterAtom");
-
- //Filling
- ChapterAtoms_Pos=EditionEntries[EditionEntries_Pos].ChapterAtoms.size();
- EditionEntries[EditionEntries_Pos].ChapterAtoms.resize(ChapterAtoms_Pos+1);
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess()
-{
- Element_Name("ChapProcess");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCodecID()
-{
- Element_Name("ChapProcessCodecID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand()
-{
- Element_Name("ChapProcessCommand");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand_ChapProcessData()
-{
- Element_Name("ChapProcessData");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand_ChapProcessTime()
-{
- Element_Name("ChapProcessTime");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessPrivate()
-{
- Element_Name("ChapProcessPrivate");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay()
-{
- Element_Name("ChapterDisplay");
-
- //Filling
- ChapterDisplays_Pos=EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterDisplays.size();
- EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterDisplays.resize(ChapterDisplays_Pos+1);
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapCountry()
-{
- Element_Name("ChapCountry");
-
- //Parsing
- Local_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapLanguage()
-{
- Element_Name("ChapLanguage");
-
- //Parsing
- Ztring Data=Local_Get();
-
- FILLING_BEGIN();
- EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterDisplays[ChapterDisplays_Pos].ChapLanguage=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapString()
-{
- Element_Name("ChapString");
-
- //Parsing
- Ztring Data=UTF8_Get();
-
- FILLING_BEGIN();
- EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterDisplays[ChapterDisplays_Pos].ChapString=Data;
- //if (TimecodeScale!=0 && ChapterTimeStart!=(int64u)-1)
- // Fill(StreamKind_Last, StreamPos_Last, Ztring::ToZtring(Chapter_Pos).To_Local().c_str(), Ztring().Duration_From_Milliseconds(ChapterTimeStart/TimecodeScale)+__T(" - ")+ChapterString, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterFlagHidden()
-{
- Element_Name("ChapterFlagHidden");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterFlagEnabled()
-{
- Element_Name("ChapterFlagEnabled");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterPhysicalEquiv()
-{
- Element_Name("ChapterPhysicalEquiv");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterSegmentEditionUID()
-{
- Element_Name("ChapterSegmentEditionUID");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterSegmentUID()
-{
- Element_Name("ChapterSegmentUID");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterTimeEnd()
-{
- Element_Name("ChapterTimeEnd");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterTimeStart()
-{
- Element_Name("ChapterTimeStart");
-
- //Parsing
- int64u Data=UInteger_Get();
-
- FILLING_BEGIN();
- EditionEntries[EditionEntries_Pos].ChapterAtoms[ChapterAtoms_Pos].ChapterTimeStart=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterTrack()
-{
- Element_Name("ChapterTrack");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterTrack_ChapterTrackNumber()
-{
- Element_Name("ChapterTrackNumber");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_ChapterAtom_ChapterUID()
-{
- Element_Name("ChapterUID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_EditionFlagDefault()
-{
- Element_Name("EditionFlagDefault");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_EditionFlagHidden()
-{
- Element_Name("EditionFlagHidden");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_EditionFlagOrdered()
-{
- Element_Name("EditionFlagOrdered");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Chapters_EditionEntry_EditionUID()
-{
- Element_Name("EditionUID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster()
-{
- Element_Name("Cluster");
-
- //For each stream
- std::map<int64u, stream>::iterator Temp=Stream.begin();
- if (!Cluster_AlreadyParsed)
- {
- Stream_Count=0;
- while (Temp!=Stream.end())
- {
- if (Temp->second.Parser)
- Temp->second.Searching_Payload=true;
- if (Temp->second.StreamKind==Stream_Video || Temp->second.StreamKind==Stream_Audio)
- Temp->second.Searching_TimeStamp_Start=true;
- if (Temp->second.StreamKind==Stream_Video)
- Temp->second.Searching_TimeStamps=true;
- if (Temp->second.Searching_Payload
- || Temp->second.Searching_TimeStamp_Start
- || Temp->second.Searching_TimeStamps)
- Stream_Count++;
-
- //Specific cases
- if (Retrieve(Temp->second.StreamKind, Temp->second.StreamPos, Audio_CodecID).find(__T("A_AAC/"))==0)
- ((File_Aac*)Stream[Temp->first].Parser)->Mode=File_Aac::Mode_raw_data_block; //In case AudioSpecificConfig is not present
-
- ++Temp;
- }
-
- //We must parse moov?
- if (Stream_Count==0)
- {
- //Jumping
- std::sort(Segment_Seeks.begin(), Segment_Seeks.end());
- for (size_t Pos=0; Pos<Segment_Seeks.size(); Pos++)
- if (Segment_Seeks[Pos]>File_Offset+Buffer_Offset+Element_Size)
- {
- GoTo(Segment_Seeks[Pos]);
- break;
- }
- if (File_GoTo==(int64u)-1)
- GoTo(Segment_Offset_End);
- return;
- }
- }
- Cluster_AlreadyParsed=true;
- Segment_Cluster_TimeCode_Value=0; //Default
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup()
-{
- Element_Name("BlockGroup");
-
- Segment_Cluster_BlockGroup_BlockDuration_Value=(int64u)-1;
- Segment_Cluster_BlockGroup_BlockDuration_TrackNumber=(int64u)-1;
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_Block()
-{
- Element_Name("Block");
-
- //Parsing
- int64u TrackNumber;
- Get_EB (TrackNumber, "TrackNumber");
-
- //Finished?
- Stream[TrackNumber].PacketCount++;
- if (Stream[TrackNumber].Searching_Payload || Stream[TrackNumber].Searching_TimeStamps || Stream[TrackNumber].Searching_TimeStamp_Start)
- {
- //Parsing
- int16u TimeCode;
- Get_B2 (TimeCode, "TimeCode");
-
- FILLING_BEGIN();
- if (Stream[TrackNumber].Searching_TimeStamp_Start)
- {
- FILLING_BEGIN();
- Stream[TrackNumber].TimeCode_Start=Segment_Cluster_TimeCode_Value+TimeCode;
- Stream[TrackNumber].Searching_TimeStamp_Start=false;
- FILLING_END();
- }
- if (Stream[TrackNumber].Searching_TimeStamps)
- {
- Stream[TrackNumber].TimeCodes.push_back(Segment_Cluster_TimeCode_Value+TimeCode);
- if (Stream[TrackNumber].TimeCodes.size()>40)
- Stream[TrackNumber].Searching_TimeStamps=false;
- }
-
- if (Segment_Cluster_BlockGroup_BlockDuration_Value!=(int64u)-1)
- {
- Stream[TrackNumber].Segment_Cluster_BlockGroup_BlockDuration_Counts[Segment_Cluster_BlockGroup_BlockDuration_Value]++;
- Segment_Cluster_BlockGroup_BlockDuration_Value=(int64u)-1;
- }
- FILLING_END();
-
- if (Stream[TrackNumber].Searching_Payload)
- {
- std::vector<int64u> Laces;
- int32u Lacing;
- Element_Begin1("Flags");
- BS_Begin();
- Skip_BS(1, "KeyFrame");
- Skip_BS(3, "Reserved");
- Skip_BS(1, "Invisible");
- Get_BS (2, Lacing, "Lacing");
- Skip_BS(1, "Discardable");
- BS_End();
- Element_End0();
- if (Lacing>0)
- {
- Element_Begin1("Lacing");
- int8u FrameCountMinus1;
- Get_B1(FrameCountMinus1, "Frame count minus 1");
- switch (Lacing)
- {
- case 1 : //Xiph lacing
- {
- int64u Element_Offset_Virtual=0;
- for (int8u Pos=0; Pos<FrameCountMinus1; Pos++)
- {
- int32u Size=0;
- int8u Size8;
- do
- {
- Get_B1 (Size8, "Size");
- Size+=Size8;
- }
- while (Size8==0xFF);
- Param_Info1(Size);
- Element_Offset_Virtual+=Size;
- Laces.push_back(Size);
- }
- Laces.push_back(Element_Size-Element_Offset-Element_Offset_Virtual); //last lace
- }
- break;
- case 2 : //Fixed-size lacing - No more data
- {
- int64u Size=(Element_Size-Element_Offset)/(FrameCountMinus1+1);
- Laces.resize(FrameCountMinus1+1, Size);
- }
- break;
- case 3 : //EBML lacing
- {
- int64u Element_Offset_Virtual=0, Size;
- Get_EB (Size, "Size");
- Laces.push_back(Size);
- Element_Offset_Virtual+=Size;
- for (int8u Pos=1; Pos<FrameCountMinus1; Pos++)
- {
- int64s Diff;
- Get_ES (Diff, "Difference");
- Size+=Diff; Param_Info1(Size);
- Element_Offset_Virtual+=Size;
- Laces.push_back(Size);
- }
- Laces.push_back(Element_Size-Element_Offset-Element_Offset_Virtual); Param_Info1(Size); //last lace
- }
- break;
- default : ; //Should never be here
- }
- Element_End0();
- }
- else
- Laces.push_back(Element_Size-Element_Offset);
-
- FILLING_BEGIN();
- //Parsing
- for (size_t Pos=0; Pos<Laces.size(); Pos++)
- {
- //Content compression
- if (Stream[TrackNumber].ContentCompAlgo!=(int32u)-1 && Stream[TrackNumber].ContentCompAlgo!=3)
- Stream[TrackNumber].Searching_Payload=false; //Unsupported
-
- //Integrity test
- if (Element_Offset+Laces[Pos]>Element_Size)
- Stream[TrackNumber].Searching_Payload=false; //There is a problem
-
- if (Stream[TrackNumber].Searching_Payload)
- {
- Element_Code=TrackNumber;
-
- //Content compression
- if (Stream[TrackNumber].ContentCompAlgo==3) //Header Stripping
- {
- Element_Offset-=(size_t)Stream[TrackNumber].ContentCompSettings_Buffer_Size; //This is an extra array, not in the stream
- Open_Buffer_Continue(Stream[TrackNumber].Parser, Stream[TrackNumber].ContentCompSettings_Buffer, (size_t)Stream[TrackNumber].ContentCompSettings_Buffer_Size);
- Element_Offset+=(size_t)Stream[TrackNumber].ContentCompSettings_Buffer_Size;
- Demux(Stream[TrackNumber].ContentCompSettings_Buffer, (size_t)Stream[TrackNumber].ContentCompSettings_Buffer_Size, ContentType_MainStream);
- }
-
- //Parsing
- #if MEDIAINFO_DEMUX
- int8u Demux_Level_old=Demux_Level;
- if (Stream[TrackNumber].Parser && Stream[TrackNumber].Parser->Demux_Level==2)
- Demux_Level=4;
- Demux(Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset), ContentType_MainStream);
- Demux_Level=Demux_Level_old;
- #endif //MEDIAINFO_DEMUX
- Open_Buffer_Continue(Stream[TrackNumber].Parser, (size_t)Laces[Pos]);
- if (Stream[TrackNumber].Parser->Status[IsFilled]
- || Stream[TrackNumber].Parser->Status[IsFinished]
- || Stream[TrackNumber].PacketCount>=300)
- Stream[TrackNumber].Searching_Payload=false;
- }
- else
- Skip_XX(Laces[Pos], "Data");
- }
-
- //Positionning
- Element_Offset=Element_Size;
- FILLING_END();
- }
- else
- {
- Skip_XX(Element_Size-Element_Offset, "Data");
- }
-
- if (!Stream[TrackNumber].Searching_Payload && !Stream[TrackNumber].Searching_TimeStamps && !Stream[TrackNumber].Searching_TimeStamp_Start)
- Stream_Count--;
- }
- else
- {
- Skip_XX(Element_Size-Element_Offset, "Data");
- }
-
- //Filling
- Frame_Count++;
- if (!Status[IsFilled] && ((Frame_Count>6 && (Stream_Count==0 ||Config->ParseSpeed==0.0)) || Frame_Count>512*Stream.size()))
- {
- Fill();
- if (MediaInfoLib::Config.ParseSpeed_Get()<1)
- {
- //Jumping
- std::sort(Segment_Seeks.begin(), Segment_Seeks.end());
- for (size_t Pos=0; Pos<Segment_Seeks.size(); Pos++)
- if (Segment_Seeks[Pos]>File_Offset+Buffer_Offset+Element_Size)
- {
- GoTo(Segment_Seeks[Pos]);
- break;
- }
- if (File_GoTo==(int64u)-1)
- GoTo(Segment_Offset_End);
- }
- }
-
- Element_Show(); //For debug
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_BlockAdditions()
-{
- Element_Name("BlockAdditions");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_BlockAdditions_BlockMore()
-{
- Element_Name("BlockMore");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_BlockAdditions_BlockMore_BlockAddID()
-{
- Element_Name("BlockAddID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_BlockAdditions_BlockMore_BlockAdditional()
-{
- Element_Name("BlockAdditional");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_BlockDuration()
-{
- Element_Name("BlockDuration");
-
- //Parsing
- int64u Segment_Cluster_TimeCode_Value=UInteger_Get();
-
- FILLING_BEGIN();
- if (Segment_Cluster_BlockGroup_BlockDuration_TrackNumber!=(int64u)-1)
- {
- Stream[Segment_Cluster_BlockGroup_BlockDuration_TrackNumber].Segment_Cluster_BlockGroup_BlockDuration_Counts[Segment_Cluster_TimeCode_Value]++;
- Segment_Cluster_BlockGroup_BlockDuration_TrackNumber=(int64u)-1;
- }
- else
- Segment_Cluster_BlockGroup_BlockDuration_Value=Segment_Cluster_TimeCode_Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_ReferenceBlock()
-{
- Element_Name("ReferenceBlock");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_ReferencePriority()
-{
- Element_Name("ReferencePriority");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_Slices()
-{
- Element_Name("Slices");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_Slices_TimeSlice()
-{
- Element_Name("TimeSlice");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_Slices_TimeSlice_Duration()
-{
- Element_Name("Duration");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_BlockGroup_Slices_TimeSlice_LaceNumber()
-{
- Element_Name("LaceNumber");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_Position()
-{
- Element_Name("Position");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_PrevSize()
-{
- Element_Name("PrevSize");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_SilentTracks()
-{
- Element_Name("SilentTracks");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_SilentTracks_SilentTrackNumber()
-{
- Element_Name("SilentTrackNumber");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_SimpleBlock()
-{
- Segment_Cluster_BlockGroup_BlockDuration_Value=(int64u)-1;
- Segment_Cluster_BlockGroup_BlockDuration_TrackNumber=(int64u)-1;
-
- Segment_Cluster_BlockGroup_Block();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cluster_Timecode()
-{
- Element_Name("Timecode");
-
- //Parsing
- Segment_Cluster_TimeCode_Value=UInteger_Get();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cues()
-{
- Element_Name("Cues");
-
- //Skipping Cues, we don't need of them
- Skip_XX(Element_TotalSize_Get(), "Cues data, skipping");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cues_CuePoint()
-{
- Element_Name("CuePoint");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cues_CuePoint_CueTime()
-{
- Element_Name("CueTime");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cues_CuePoint_CueTrackPositions()
-{
- Element_Name("CueTrackPositions");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cues_CuePoint_CueTrackPositions_CueTrack()
-{
- Element_Name("CueTrack");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cues_CuePoint_CueTrackPositions_CueClusterPosition()
-{
- Element_Name("CueClusterPosition");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Cues_CuePoint_CueTrackPositions_CueBlockNumber()
-{
- Element_Name("CueBlockNumber");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info()
-{
- Element_Name("Info");
-
- if (Cluster_AlreadyParsed)
- Skip_XX(Element_TotalSize_Get(), "Alreadys parsed, skipping");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_ChapterTranslate()
-{
- Element_Name("ChapterTranslate");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_ChapterTranslate_ChapterTranslateCodec()
-{
- Element_Name("ChapterTranslateCodec");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_ChapterTranslate_ChapterTranslateEditionUID()
-{
- Element_Name("ChapterTranslateEditionUID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_ChapterTranslate_ChapterTranslateID()
-{
- Element_Name("ChapterTranslateID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_DateUTC()
-{
- Element_Name("DateUTC");
-
- //Parsing
- int64u Data;
- Get_B8(Data, "Data"); Element_Info1(Data/1000000000+978307200); //From Beginning of the millenium, in nanoseconds
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, "Encoded_Date", Ztring().Date_From_Seconds_1970((int32u)(Data/1000000000+978307200))); //978307200s between beginning of the millenium and 1970
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_Duration()
-{
- Element_Name("Duration");
-
- //Parsing
- float64 Float=Float_Get();
-
- FILLING_BEGIN();
- Duration=Float;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_MuxingApp()
-{
- Element_Name("MuxingApp");
-
- //Parsing
- Ztring Data=UTF8_Get();
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, "Encoded_Library", Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_NextFilename()
-{
- Element_Name("NextFilename");
-
- //Parsing
- UTF8_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_NextUID()
-{
- Element_Name("NextUID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_PrevFilename()
-{
- Element_Name("PrevFilename");
-
- //Parsing
- UTF8_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_PrevUID()
-{
- Element_Name("PrevUID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_SegmentFamily()
-{
- Element_Name("SegmentFamily");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_SegmentFilename()
-{
- Element_Name("SegmentFilename");
-
- //Parsing
- UTF8_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_SegmentUID()
-{
- Element_Name("SegmentUID");
-
- //Parsing
- int128u Data;
- Data=UInteger16_Get();
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_UniqueID, Ztring().From_Local(Data.toString(10)));
- Fill(Stream_General, 0, General_UniqueID_String, Ztring().From_Local(Data.toString(10))+__T(" (0x")+Ztring().From_Local(Data.toString(16))+__T(')'));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_TimecodeScale()
-{
- Element_Name("TimecodeScale");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- FILLING_BEGIN();
- TimecodeScale=UInteger;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_Title()
-{
- Element_Name("Title");
-
- //Parsing
- Ztring Data=UTF8_Get();
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, "Title", Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Info_WritingApp()
-{
- Element_Name("WritingApp");
-
- //Parsing
- Ztring Data=UTF8_Get();
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, "Encoded_Application", Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_SeekHead()
-{
- Element_Name("SeekHead");
-
- Segment_Seeks.clear();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_SeekHead_Seek()
-{
- Element_Name("Seek");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_SeekHead_Seek_SeekID()
-{
- Element_Name("SeekID");
-
- //Parsing
- int64u Data;
- Get_EB (Data, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_SeekHead_Seek_SeekPosition()
-{
- Element_Name("SeekPosition");
-
- //Parsing
- int64u Data=UInteger_Get();
-
- Segment_Seeks.push_back(Segment_Offset_Begin+Data);
- Element_Info1(Ztring::ToZtring(Segment_Offset_Begin+Data, 16));
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags()
-{
- Element_Name("Tags");
-
- Segment_Tag_SimpleTag_TagNames.clear();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag()
-{
- Element_Name("Tag");
-
- Segment_Tag_TrackUID=(int64u)-1;
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_SimpleTag()
-{
- Element_Name("SimpleTag");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_SimpleTag_TagBinary()
-{
- Element_Name("TagBinary");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_SimpleTag_TagDefault()
-{
- Element_Name("TagDefault");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_SimpleTag_TagLanguage()
-{
- Element_Name("TagLanguage");
-
- //Parsing
- Ztring Data;
- Get_Local(Element_Size, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- //Fill(StreamKind_Last, StreamPos_Last, "Language", Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_SimpleTag_TagName()
-{
- Element_Name("TagName");
-
- //Parsing
- Ztring TagName=UTF8_Get();
-
- Segment_Tag_SimpleTag_TagNames.resize(Element_Level-5); //5 is the first level of a tag
- Segment_Tag_SimpleTag_TagNames.push_back(TagName);
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_SimpleTag_TagString()
-{
- Element_Name("TagString");
-
- //Parsing
- Ztring TagString;
- TagString=UTF8_Get();
-
- if (Segment_Tag_SimpleTag_TagNames.empty())
- return;
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("BITSPS")) return; //Useless
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("BPS")) return; //Useless
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("COMPATIBLE_BRANDS")) return; //QuickTime techinical info, useless
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("CREATION_TIME")) {Segment_Tag_SimpleTag_TagNames[0]=__T("Encoded_Date"); TagString.insert(0, __T("UTC "));}
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("DATE_DIGITIZED")) {Segment_Tag_SimpleTag_TagNames[0]=__T("Mastered_Date"); TagString.insert(0, __T("UTC "));}
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("ENCODED_BY")) Segment_Tag_SimpleTag_TagNames[0]=__T("EncodedBy");
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("ENCODER")) Segment_Tag_SimpleTag_TagNames[0]=__T("Encoded_Library");
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("FPS")) return; //Useless
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("LANGUAGE")) Segment_Tag_SimpleTag_TagNames[0]=__T("Language");
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("MAJOR_BRAND")) return; //QuickTime techinical info, useless
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("MINOR_VERSION")) return; //QuickTime techinical info, useless
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("ORIGINAL_MEDIA_TYPE")) Segment_Tag_SimpleTag_TagNames[0]=__T("OriginalSourceForm");
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("STEREO_MODE")) return; //Useless
- if (Segment_Tag_SimpleTag_TagNames[0]==__T("TERMS_OF_USE")) Segment_Tag_SimpleTag_TagNames[0]=__T("TermsOfUse");
- for (size_t Pos=1; Pos<Segment_Tag_SimpleTag_TagNames.size(); Pos++)
- {
- if (Segment_Tag_SimpleTag_TagNames[Pos]==__T("BARCODE")) Segment_Tag_SimpleTag_TagNames[Pos]=__T("BarCode");
- if (Segment_Tag_SimpleTag_TagNames[Pos]==__T("COMMENT")) Segment_Tag_SimpleTag_TagNames[Pos]=__T("Comment");
- if (Segment_Tag_SimpleTag_TagNames[Pos]==__T("URL")) Segment_Tag_SimpleTag_TagNames[Pos]=__T("Url");
- }
-
- Ztring TagName;
- for (size_t Pos=0; Pos<Segment_Tag_SimpleTag_TagNames.size(); Pos++)
- {
- TagName+=Segment_Tag_SimpleTag_TagNames[Pos];
- if (Pos+1<Segment_Tag_SimpleTag_TagNames.size())
- TagName+=__T('/');
- }
-
- StreamKind_Last=Stream_General;
- StreamPos_Last=0;
- if (Segment_Tag_TrackUID!=(int64u)-1 && Segment_Tag_TrackUID!=0)//0: Specs say this is for all tracks, but I prefer to wait for a sample in order to see how it is used in the reality
- {
- Ztring ID=Ztring::ToZtring(Segment_Tag_TrackUID);
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- if (Retrieve((stream_t)StreamKind, StreamPos, General_ID)==ID)
- {
- StreamKind_Last=(stream_t)StreamKind;
- StreamPos_Last=StreamPos;
- }
- }
-
- Fill(StreamKind_Last, StreamPos_Last, TagName.To_Local().c_str(), TagString, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_Targets()
-{
- Element_Name("Targets");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_Targets_AttachmentUID()
-{
- Element_Name("AttachmentUID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_Targets_ChapterUID()
-{
- Element_Name("ChapterUID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_Targets_EditionUID()
-{
- Element_Name("EditionUID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_Targets_TargetType()
-{
- Element_Name("TargetType");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_Targets_TargetTypeValue()
-{
- Element_Name("TargetTypeValue");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tags_Tag_Targets_TrackUID()
-{
- Element_Name("TrackUID");
-
- //Parsing
- Segment_Tag_TrackUID=UInteger_Get();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks()
-{
- Element_Name("Tracks");
-
- if (Cluster_AlreadyParsed)
- Skip_XX(Element_TotalSize_Get(), "Alreadys parsed, skipping");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry()
-{
- Element_Name("TrackEntry");
-
- //Clearing
- CodecID.clear();
- InfoCodecID_Format_Type=InfoCodecID_Format_Matroska;
- TrackType=(int64u)-1;
- TrackNumber=(int64u)-1;
- TrackVideoDisplayWidth=0;
- TrackVideoDisplayHeight=0;
- AvgBytesPerSec=0;
-
- //Preparing
- Stream_Prepare(Stream_Max);
-
- //Default values
- Fill_Flush();
- Fill(StreamKind_Last, StreamPos_Last, "Language", "eng");
- Fill(StreamKind_Last, StreamPos_Last, General_StreamOrder, Stream.size());
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_AttachmentLink()
-{
- Element_Name("AttachmentLink");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Audio()
-{
- Element_Name("Audio");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Audio_BitDepth()
-{
- Element_Name("BitDepth");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- FILLING_BEGIN();
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", UInteger, 10, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Audio_Channels()
-{
- Element_Name("Channels");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- FILLING_BEGIN();
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, UInteger, 10, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Audio_OutputSamplingFrequency()
-{
- Element_Name("OutputSamplingFrequency");
-
- //Parsing
- float64 Float=Float_Get();
-
- FILLING_BEGIN();
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, Float, 0, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Audio_SamplingFrequency()
-{
- Element_Name("SamplingFrequency");
-
- //Parsing
- float64 Float=Float_Get();
-
- FILLING_BEGIN();
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, Float, 0, true);
- if (Retrieve(Stream_Audio, StreamPos_Last, Audio_CodecID).find(__T("A_AAC/"))==0)
- ((File_Aac*)Stream[TrackNumber].Parser)->AudioSpecificConfig_OutOfBand((int32u)float64_int64s(Float));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_CodecDecodeAll()
-{
- Element_Name("CodecDecodeAll");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_CodecID()
-{
- Element_Name("CodecID");
-
- //Parsing
- Ztring Data;
- Get_Local(Element_Size, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- CodecID=Data;
- CodecID_Manage();
- CodecPrivate_Manage();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression()
-{
- FILLING_BEGIN();
- Stream[TrackNumber].ContentCompAlgo=0; //0 is default
- Fill(StreamKind_Last, StreamPos_Last, "MuxingMode", Mk_ContentCompAlgo(0), Unlimited, true, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression_ContentCompAlgo()
-{
- //Parsing
- int64u Algo=UInteger_Get(); Param_Info1(Mk_ContentCompAlgo(Algo));
-
- FILLING_BEGIN();
- Stream[TrackNumber].ContentCompAlgo=Algo;
- Fill(StreamKind_Last, StreamPos_Last, "MuxingMode", Mk_ContentCompAlgo(Algo), Unlimited, true, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression_ContentCompSettings()
-{
- //Parsing
- Skip_XX(Element_Size, "Data");
-
- FILLING_BEGIN();
- Stream[TrackNumber].ContentCompSettings_Buffer=new int8u[(size_t)Element_Size];
- std::memcpy(Stream[TrackNumber].ContentCompSettings_Buffer, Buffer+Buffer_Offset, (size_t)Element_Size);
- Stream[TrackNumber].ContentCompSettings_Buffer_Size=(size_t)Element_Size;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_CodecName()
-{
- Element_Name("CodecName");
-
- //Parsing
- UTF8_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_CodecPrivate()
-{
- Element_Name("CodecPrivate");
-
- //Creating the parser
- if (Stream.find(TrackNumber)==Stream.end() || Stream[TrackNumber].Parser==NULL)
- {
- if (Stream.find(TrackNumber)==Stream.end() || Retrieve(Stream[TrackNumber].StreamKind, Stream[TrackNumber].StreamPos, "CodecID").empty())
- {
- //Codec not already known, saving CodecPrivate
- if (CodecPrivate)
- delete[] CodecPrivate; //CodecPrivate=NULL.
- CodecPrivate_Size=(size_t)Element_Size;
- CodecPrivate=new int8u[(size_t)Element_Size];
- std::memcpy(CodecPrivate, Buffer+Buffer_Offset, (size_t)Element_Size);
- return;
- }
-
- if (Stream[TrackNumber].StreamKind==Stream_Audio && Retrieve(Stream_Audio, Stream[TrackNumber].StreamPos, Audio_CodecID)==__T("A_MS/ACM"))
- Segment_Tracks_TrackEntry_CodecPrivate_auds();
- else if (Stream[TrackNumber].StreamKind==Stream_Video && Retrieve(Stream_Video, Stream[TrackNumber].StreamPos, Video_CodecID)==__T("V_MS/VFW/FOURCC"))
- Segment_Tracks_TrackEntry_CodecPrivate_vids();
- else if (Element_Size>0)
- Skip_XX(Element_Size, "Unknown");
- return;
- }
-
- #if MEDIAINFO_DEMUX
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- {
- Demux_Level=2; //Container
- int64u Element_Code_Old=Element_Code;
- Element_Code=TrackNumber;
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_Header);
- Element_Code=Element_Code_Old;
- }
- break;
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+Buffer_Offset), (size_t)Element_Size);
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(StreamKind_Last, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
- #endif // MEDIAINFO_DEMUX
-
- //Parsing
- Open_Buffer_Continue(Stream[TrackNumber].Parser);
-
- //Filling
- if (Stream[TrackNumber].Parser->Status[IsFinished]) //Can be finnished here...
- {
- Stream[TrackNumber].Searching_Payload=false;
- Stream_Count--;
- }
-
- //In case of problem
- Element_Show();
-}
-
-//--------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_CodecPrivate_auds()
-{
- Element_Info1("Copy of auds");
-
- //Parsing
- int32u SamplesPerSec;
- int16u FormatTag, Channels, BitsPerSample;
- Get_L2 (FormatTag, "FormatTag");
- Get_L2 (Channels, "Channels");
- Get_L4 (SamplesPerSec, "SamplesPerSec");
- Get_L4 (AvgBytesPerSec, "AvgBytesPerSec");
- Skip_L2( "BlockAlign");
- Get_L2 (BitsPerSample, "BitsPerSample");
-
- //Filling
- FILLING_BEGIN();
- InfoCodecID_Format_Type=InfoCodecID_Format_Riff;
- CodecID.From_Number(FormatTag, 16);
- CodecID_Fill(CodecID, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, CodecID, true); //May be replaced by codec parser
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec_CC, CodecID);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels!=5?Channels:6, 10, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SamplesPerSec, 10, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, AvgBytesPerSec*8, 10, true);
- if (BitsPerSample)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, BitsPerSample);
-
- CodecID_Manage();
- if (TrackNumber!=(int64u)-1)
- Stream[TrackNumber].AvgBytesPerSec=AvgBytesPerSec;
- FILLING_END();
-
- //Options
- if (Element_Offset+2>Element_Size)
- return; //No options
-
- //Parsing
- int16u Option_Size;
- Get_L2 (Option_Size, "cbSize");
-
- //Filling
- if (Option_Size>0)
- {
- if (FormatTag==0xFFFE) //Extensible Wave
- Segment_Tracks_TrackEntry_CodecPrivate_auds_ExtensibleWave();
- else Skip_XX(Option_Size, "Unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_CodecPrivate_auds_ExtensibleWave()
-{
- //Parsing
- int128u SubFormat;
- int32u ChannelMask;
- Skip_L2( "ValidBitsPerSample / SamplesPerBlock");
- Get_L4 (ChannelMask, "ChannelMask");
- Get_GUID(SubFormat, "SubFormat");
-
- FILLING_BEGIN();
- if ((SubFormat.hi&0xFFFFFFFFFFFF0000LL)==0x0010000000000000LL && SubFormat.lo==0x800000AA00389B71LL)
- {
- CodecID_Fill(Ztring().From_Number((int16u)SubFormat.hi, 16), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Audio, StreamPos_Last, Audio_CodecID, Ztring().From_GUID(SubFormat), true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, MediaInfoLib::Config.Codec_Get(Ztring().From_Number((int16u)SubFormat.hi, 16)), true);
-
- //Creating the parser
- #if defined(MEDIAINFO_PCM_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Ztring().From_Number((int16u)SubFormat.hi, 16))==__T("PCM"))
- {
- //Creating the parser
- File_Pcm MI;
- MI.Frame_Count_Valid=0;
- MI.Codec=Ztring().From_Number((int16u)SubFormat.hi, 16);
-
- //Parsing
- Open_Buffer_Init(&MI);
- Open_Buffer_Continue(&MI, 0);
-
- //Filling
- Finish(&MI);
- Merge(MI, StreamKind_Last, 0, StreamPos_Last);
- }
- #endif
- }
- else
- {
- CodecID_Fill(Ztring().From_GUID(SubFormat), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- }
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, ExtensibleWave_ChannelMask(ChannelMask));
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions_String2, ExtensibleWave_ChannelMask2(ChannelMask));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_CodecPrivate_vids()
-{
- Element_Info1("Copy of vids");
-
- //Parsing
- int32u Width, Height, Compression;
- int16u Resolution;
- Skip_L4( "Size");
- Get_L4 (Width, "Width");
- Get_L4 (Height, "Height");
- Skip_L2( "Planes");
- Get_L2 (Resolution, "BitCount");
- Get_C4 (Compression, "Compression");
- Skip_L4( "SizeImage");
- Skip_L4( "XPelsPerMeter");
- Skip_L4( "YPelsPerMeter");
- Skip_L4( "ClrUsed");
- Skip_L4( "ClrImportant");
-
- FILLING_BEGIN();
- Ztring Codec;
- if (((Compression&0x000000FF)>=0x00000020 && (Compression&0x000000FF)<=0x0000007E
- && (Compression&0x0000FF00)>=0x00002000 && (Compression&0x0000FF00)<=0x00007E00
- && (Compression&0x00FF0000)>=0x00200000 && (Compression&0x00FF0000)<=0x007E0000
- && (Compression&0xFF000000)>=0x20000000 && (Compression&0xFF000000)<=0x7E000000)
- || Compression==0x00000000
- ) //Sometimes this value is wrong, we have to test this
- {
- //Filling
- InfoCodecID_Format_Type=InfoCodecID_Format_Riff;
- CodecID.From_CC4(Compression);
- if (Compression==0x00000000)
- {
- Fill(Stream_Video, StreamPos_Last, Video_Format, "RGB", Unlimited, true, true);
- Fill(Stream_Video, StreamPos_Last, Video_Codec, "RGB", Unlimited, true, true); //Raw RGB, not handled by automatic codec mapping
- }
- else
- {
- CodecID_Fill(CodecID, Stream_Video, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Video, StreamPos_Last, Video_Codec, CodecID, true); //FormatTag, may be replaced by codec parser
- Fill(Stream_Video, StreamPos_Last, Video_Codec_CC, CodecID); //FormatTag
- }
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width, 10, true);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height, 10, true);
- if (Resolution==32 && Compression==0x74736363) //tscc
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", 8);
- else if (Compression==0x44495633) //DIV3
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", 8);
- else if (Compression==0x44585342) //DXSB
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution);
- else if (Resolution>16 && MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_ColorSpace).find(__T("RGBA"))!=std::string::npos) //RGB codecs
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution/4);
- else if (Compression==0x00000000 //RGB
- || MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_ColorSpace).find(__T("RGB"))!=std::string::npos) //RGB codecs
- {
- if (Resolution==32)
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "RGBA", Unlimited, true, true);
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution/4); //With Alpha
- }
- else
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution<=16?8:(Resolution/3)); //indexed or normal
- }
- else if (Compression==0x56503632 //VP62
- || MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_Format)==__T("H.263") //H.263
- || MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_Format)==__T("VC-1")) //VC-1
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution/3);
- }
-
- //Creating the parser
- CodecID_Manage();
-
- FILLING_END();
-
- if (Data_Remain())
- {
- Element_Begin1("Private data");
- if (Stream[TrackNumber].Parser)
- {
- #if defined(MEDIAINFO_FFV1_YES)
- if (Compression==0x46465631) //FFV1
- ((File_Ffv1*)Stream[TrackNumber].Parser)->IsOutOfBandData=true; //TODO: implement ISOutOfBandData in a generic maner
- #endif
- #if defined(MEDIAINFO_FFV1_YES)
- if (Compression==0x46465648) //FFVH
- ((File_HuffYuv*)Stream[TrackNumber].Parser)->IsOutOfBandData=true; //TODO: implement ISOutOfBandData in a generic maner
- #endif
- Open_Buffer_Continue(Stream[TrackNumber].Parser);
- }
- else
- Skip_XX(Data_Remain(), "Unknown");
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_DefaultDuration()
-{
- Element_Name("DefaultDuration");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- FILLING_BEGIN();
- Stream[TrackNumber].TrackDefaultDuration=UInteger;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_FlagDefault()
-{
- Element_Name("FlagDefault");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- FILLING_BEGIN();
- Stream[TrackNumber].Default=UInteger?true:false;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_FlagEnabled()
-{
- Element_Name("FlagEnabled");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_FlagForced()
-{
- Element_Name("FlagForced");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- FILLING_BEGIN();
- Stream[TrackNumber].Forced=UInteger?true:false;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_FlagLacing()
-{
- Element_Name("FlagLacing");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Language()
-{
- Element_Name("Language");
-
- //Parsing
- Ztring Data;
- Get_Local(Element_Size, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Fill(StreamKind_Last, StreamPos_Last, "Language", Data, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_MaxBlockAdditionID()
-{
- Element_Name("MaxBlockAdditionID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_MaxCache()
-{
- Element_Name("MaxCache");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_MinCache()
-{
- Element_Name("MinCache");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Name()
-{
- Element_Name("Name");
-
- //Parsing
- Ztring Data;
- Get_UTF8(Element_Size, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Fill(StreamKind_Last, StreamPos_Last, "Title", Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_TrackNumber()
-{
- Element_Name("TrackNumber");
-
- //Parsing
- TrackNumber=UInteger_Get();
-
- FILLING_BEGIN();
- Fill(StreamKind_Last, StreamPos_Last, General_ID, TrackNumber);
- if (StreamKind_Last!=Stream_Max)
- {
- Stream[TrackNumber].StreamKind=StreamKind_Last;
- Stream[TrackNumber].StreamPos=StreamPos_Last;
- }
- if (TrackVideoDisplayWidth && TrackVideoDisplayHeight)
- Stream[TrackNumber].DisplayAspectRatio=((float)TrackVideoDisplayWidth)/(float)TrackVideoDisplayHeight;
- if (AvgBytesPerSec)
- Stream[TrackNumber].AvgBytesPerSec=AvgBytesPerSec;
-
- CodecID_Manage();
- CodecPrivate_Manage();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_TrackTimecodeScale()
-{
- Element_Name("TrackTimecodeScale");
-
- Float_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_TrackType()
-{
- Element_Name("TrackType");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- //Filling
- FILLING_BEGIN();
- TrackType=UInteger;
- switch(UInteger)
- {
- case 0x01 :
- Stream_Prepare(Stream_Video);
- break;
- case 0x02 :
- Stream_Prepare(Stream_Audio);
- break;
- case 0x11 :
- Stream_Prepare(Stream_Text );
- break;
- default : ;
- }
-
- if (TrackNumber!=(int64u)-1 && StreamKind_Last!=Stream_Max)
- {
- Stream[TrackNumber].StreamKind=StreamKind_Last;
- Stream[TrackNumber].StreamPos=StreamPos_Last;
- }
-
- CodecID_Manage();
- CodecPrivate_Manage();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_TrackUID()
-{
- Element_Name("TrackUID");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- //Filling
- FILLING_BEGIN();
- Fill(StreamKind_Last, StreamPos_Last, General_UniqueID, UInteger);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video()
-{
- Element_Name("Video");
-
- //Preparing
- TrackVideoDisplayWidth=0;
- TrackVideoDisplayHeight=0;
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_AspectRatioType()
-{
- Element_Name("AspectRatioType");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_ColourSpace()
-{
- Element_Name("ColourSpace");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_DisplayHeight()
-{
- Element_Name("DisplayHeight");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- //Filling
- FILLING_BEGIN();
- TrackVideoDisplayHeight=UInteger;
- if (TrackNumber!=(int64u)-1 && TrackVideoDisplayWidth && TrackVideoDisplayHeight)
- Stream[TrackNumber].DisplayAspectRatio=((float)TrackVideoDisplayWidth)/(float)TrackVideoDisplayHeight;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_DisplayUnit()
-{
- Element_Name("DisplayUnit");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_DisplayWidth()
-{
- Element_Name("DisplayWidth");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- //Filling
- FILLING_BEGIN();
- TrackVideoDisplayWidth=UInteger;
- if (TrackNumber!=(int64u)-1 && TrackVideoDisplayWidth && TrackVideoDisplayHeight)
- Stream[TrackNumber].DisplayAspectRatio=((float)TrackVideoDisplayWidth)/(float)TrackVideoDisplayHeight;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_FlagInterlaced()
-{
- Element_Name("FlagInterlaced");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_FrameRate()
-{
- Element_Name("FrameRate");
-
- //Parsing
- float64 Value=Float_Get();
-
- //Filling
- FILLING_BEGIN();
- Stream[TrackNumber].FrameRate=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_PixelCropBottom()
-{
- Element_Name("PixelCropBottom");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_PixelCropLeft()
-{
- Element_Name("PixelCropLeft");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_PixelCropRight()
-{
- Element_Name("PixelCropRight");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_PixelCropTop()
-{
- Element_Name("PixelCropTop");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_PixelHeight()
-{
- Element_Name("PixelHeight");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- //Filling
- FILLING_BEGIN();
- Fill(Stream_Video, StreamPos_Last, Video_Height, UInteger, 10, true);
- if (!TrackVideoDisplayHeight)
- TrackVideoDisplayHeight=UInteger; //Default value of DisplayHeight is PixelHeight
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_PixelWidth()
-{
- Element_Name("PixelWidth");
-
- //Parsing
- int64u UInteger=UInteger_Get();
-
- //Filling
- FILLING_BEGIN();
- Fill(Stream_Video, StreamPos_Last, Video_Width, UInteger, 10, true);
- if (!TrackVideoDisplayWidth)
- TrackVideoDisplayWidth=UInteger; //Default value of DisplayWidth is PixelWidth
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_Video_StereoMode()
-{
- Element_Name("StereoMode");
-
- //Parsing
- int64u UInteger=UInteger_Get(); Element_Info1(Format_Version==2?Mk_StereoMode_v2(UInteger):Mk_StereoMode(UInteger));
-
- //Filling
- FILLING_BEGIN();
- Fill(Stream_Video, StreamPos_Last, Video_MultiView_Count, 2); //Matroska seems to be limited to 2 views
- Fill(Stream_Video, StreamPos_Last, Video_MultiView_Layout, Format_Version==2?Mk_StereoMode_v2(UInteger):Mk_StereoMode(UInteger));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_TrackOverlay()
-{
- Element_Name("TrackOverlay");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_TrackTranslate()
-{
- Element_Name("TrackTranslate");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_TrackTranslate_Codec()
-{
- Element_Name("Codec");
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_TrackTranslate_EditionUID()
-{
- Element_Name("EditionUID");
-
- //Parsing
- UInteger_Info();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Segment_Tracks_TrackEntry_TrackTranslate_TrackID()
-{
- Element_Name("TrackID");
-
- //Parsing
- UInteger_Info();
-}
-
-//***************************************************************************
-// Data
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mk::UInteger_Info()
-{
- switch (Element_Size)
- {
- case 1 :
- {
- Info_B1(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 2 :
- {
- Info_B2(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 3 :
- {
- Info_B3(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 4 :
- {
- Info_B4(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 5 :
- {
- Info_B5(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 6 :
- {
- Info_B6(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 7 :
- {
- Info_B7(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 8 :
- {
- Info_B8(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 16:
- {
- Info_B16(Data, "Data"); Element_Info1(Data);
- return;
- }
- default : Skip_XX(Element_Size, "Data");
- }
-}
-
-//---------------------------------------------------------------------------
-int64u File_Mk::UInteger_Get()
-{
- switch (Element_Size)
- {
- case 1 :
- {
- int8u Data;
- Get_B1 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 2 :
- {
- int16u Data;
- Get_B2 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 3 :
- {
- int32u Data;
- Get_B3 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 4 :
- {
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 5 :
- {
- int64u Data;
- Get_B5 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 6 :
- {
- int64u Data;
- Get_B6 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 7 :
- {
- int64u Data;
- Get_B7 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 8 :
- {
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- default : Skip_XX(Element_Size, "Data");
- return 0;
- }
-}
-
-//---------------------------------------------------------------------------
-int128u File_Mk::UInteger16_Get()
-{
- switch (Element_Size)
- {
- case 1 :
- {
- int8u Data;
- Get_B1 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 2 :
- {
- int16u Data;
- Get_B2 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 3 :
- {
- int32u Data;
- Get_B3 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 4 :
- {
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 5 :
- {
- int64u Data;
- Get_B5 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 6 :
- {
- int64u Data;
- Get_B6 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 7 :
- {
- int64u Data;
- Get_B7 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 8 :
- {
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 16:
- {
- int128u Data;
- Get_B16(Data, "Data"); Element_Info1(Data);
- return Data;
- }
- default : Skip_XX(Element_Size, "Data");
- return 0;
- }
-}
-
-//---------------------------------------------------------------------------
-float64 File_Mk::Float_Get()
-{
- switch (Element_Size)
- {
- case 4 :
- {
- float32 Data;
- Get_BF4(Data, "Data"); Element_Info1(Data);
- return Data;
- }
- case 8 :
- {
- float64 Data;
- Get_BF8(Data, "Data"); Element_Info1(Data);
- return Data;
- }
- default : Skip_XX(Element_Size, "Data");
- return 0.0;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Float_Info()
-{
- switch (Element_Size)
- {
- case 4 :
- {
- Info_BF4(Data, "Data"); Element_Info1(Data);
- return;
- }
- case 8 :
- {
- Info_BF8(Data, "Data"); Element_Info1(Data);
- return;
- }
- default : Skip_XX(Element_Size, "Data");
- return;
- }
-}
-
-//---------------------------------------------------------------------------
-Ztring File_Mk::UTF8_Get()
-{
- Ztring Data;
- Get_UTF8(Element_Size, Data, "Data"); Element_Info1(Data);
- return Data;
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::UTF8_Info()
-{
- Info_UTF8(Element_Size, Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-Ztring File_Mk::Local_Get()
-{
- Ztring Data;
- Get_Local(Element_Size, Data, "Data"); Element_Info1(Data);
- return Data;
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::Local_Info()
-{
- Info_Local(Element_Size, Data, "Data"); Element_Info1(Data);
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mk::CodecID_Manage()
-{
- if (TrackType==(int64u)-1 || TrackNumber==(int64u)-1 || CodecID.empty() || Stream[TrackNumber].Parser)
- return; //Not ready (or not needed)
-
- if (Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_CodecID)).empty())
- {
- CodecID_Fill(CodecID, StreamKind_Last, StreamPos_Last, InfoCodecID_Format_Matroska);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), CodecID);
- }
-
- //Creating the parser
- #if defined(MEDIAINFO_MPEG4V_YES) || defined(MEDIAINFO_AVC_YES) || defined(MEDIAINFO_HEVC_YES) || defined(MEDIAINFO_VC1_YES) || defined(MEDIAINFO_DIRAC_YES) || defined(MEDIAINFO_MPEGV_YES) || defined(MEDIAINFO_VP8_YES) || defined(MEDIAINFO_OGG_YES)
- const Ztring &Format=MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Type, CodecID, InfoCodecID_Format);
- #endif
- if (0);
- #if defined(MEDIAINFO_MPEG4V_YES)
- else if (Format==__T("MPEG-4 Visual"))
- {
- Stream[TrackNumber].Parser=new File_Mpeg4v;
- ((File_Mpeg4v*)Stream[TrackNumber].Parser)->FrameIsAlwaysComplete=true;
- ((File_Mpeg4v*)Stream[TrackNumber].Parser)->Frame_Count_Valid=1;
- }
- #endif
- #if defined(MEDIAINFO_AVC_YES)
- else if (Format==__T("AVC"))
- {
- Stream[TrackNumber].Parser=new File_Avc;
- ((File_Avc*)Stream[TrackNumber].Parser)->FrameIsAlwaysComplete=true;
- if (InfoCodecID_Format_Type==InfoCodecID_Format_Matroska)
- {
- ((File_Avc*)Stream[TrackNumber].Parser)->MustSynchronize=false;
- ((File_Avc*)Stream[TrackNumber].Parser)->MustParse_SPS_PPS=true;
- ((File_Avc*)Stream[TrackNumber].Parser)->SizedBlocks=true;
- }
- }
- #endif
- #if defined(MEDIAINFO_HEVC_YES)
- else if (Format==__T("HEVC"))
- {
- Stream[TrackNumber].Parser=new File_Hevc;
- ((File_Hevc*)Stream[TrackNumber].Parser)->FrameIsAlwaysComplete=true;
- if (InfoCodecID_Format_Type==InfoCodecID_Format_Matroska)
- {
- ((File_Hevc*)Stream[TrackNumber].Parser)->MustSynchronize=false;
- ((File_Hevc*)Stream[TrackNumber].Parser)->MustParse_VPS_SPS_PPS=true;
- ((File_Hevc*)Stream[TrackNumber].Parser)->MustParse_VPS_SPS_PPS_FromMatroska=true;
- ((File_Hevc*)Stream[TrackNumber].Parser)->SizedBlocks=true;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get())
- {
- Stream[TrackNumber].Parser->Demux_Level=2; //Container
- Stream[TrackNumber].Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- }
- }
- #endif
- #if defined(MEDIAINFO_FFV1_YES)
- else if (Format==__T("FFV1"))
- {
- Stream[TrackNumber].Parser=new File_Ffv1;
- }
- #endif
- #if defined(MEDIAINFO_HUFFYUV_YES)
- else if (Format==__T("HuffYUV"))
- {
- Stream[TrackNumber].Parser=new File_HuffYuv;
- }
- #endif
- #if defined(MEDIAINFO_VC1_YES)
- else if (Format==__T("VC-1"))
- {
- Stream[TrackNumber].Parser=new File_Vc1;
- ((File_Vc1*)Stream[TrackNumber].Parser)->FrameIsAlwaysComplete=true;
- ((File_Vc1*)Stream[TrackNumber].Parser)->Frame_Count_Valid=1;
- }
- #endif
- #if defined(MEDIAINFO_DIRAC_YES)
- else if (Format==__T("Dirac"))
- {
- Stream[TrackNumber].Parser=new File_Dirac;
- ((File_Dirac*)Stream[TrackNumber].Parser)->Frame_Count_Valid=1;
- }
- #endif
- #if defined(MEDIAINFO_MPEGV_YES)
- else if (Format==__T("MPEG Video"))
- {
- Stream[TrackNumber].Parser=new File_Mpegv;
- ((File_Mpegv*)Stream[TrackNumber].Parser)->FrameIsAlwaysComplete=true;
- ((File_Mpegv*)Stream[TrackNumber].Parser)->Frame_Count_Valid=1;
- }
- #endif
- #if defined(MEDIAINFO_PRORES_YES)
- else if (Format==__T("ProRes"))
- {
- Stream[TrackNumber].Parser=new File_ProRes;
- }
- #endif
- #if defined(MEDIAINFO_VP8_YES)
- else if (Format==__T("VP8"))
- {
- Stream[TrackNumber].Parser=new File_Vp8;
- }
- #endif
- #if defined(MEDIAINFO_OGG_YES)
- else if (Format==__T("Theora") || Format==__T("Vorbis"))
- {
- Stream[TrackNumber].Parser=new File_Ogg;
- Stream[TrackNumber].Parser->MustSynchronize=false;
- ((File_Ogg*)Stream[TrackNumber].Parser)->XiphLacing=true;
- }
- #endif
- #if defined(MEDIAINFO_RM_YES)
- else if (CodecID.find(__T("V_REAL/"))==0)
- {
- Stream[TrackNumber].Parser=new File_Rm;
- ((File_Rm*)Stream[TrackNumber].Parser)->FromMKV_StreamType=Stream_Video;
- }
- #endif
- #if defined(MEDIAINFO_AC3_YES)
- else if (Format==__T("AC-3") || Format==__T("E-AC-3") || Format==__T("TrueHD"))
- {
- Stream[TrackNumber].Parser=new File_Ac3;
- ((File_Ac3*)Stream[TrackNumber].Parser)->Frame_Count_Valid=2;
- }
- #endif
- #if defined(MEDIAINFO_DTS_YES)
- else if (Format==__T("DTS"))
- {
- Stream[TrackNumber].Parser=new File_Dts;
- ((File_Dts*)Stream[TrackNumber].Parser)->Frame_Count_Valid=2;
- }
- #endif
- #if defined(MEDIAINFO_AAC_YES)
- else if (CodecID==(__T("A_AAC")))
- {
- Stream[TrackNumber].Parser=new File_Aac;
- ((File_Aac*)Stream[TrackNumber].Parser)->Mode=File_Aac::Mode_AudioSpecificConfig;
- }
- #endif
- #if defined(MEDIAINFO_AAC_YES)
- else if (CodecID.find(__T("A_AAC/"))==0)
- {
- Ztring Profile;
- int8u audioObjectType=0, Version=0, SBR=2, PS=2;
- if (CodecID==__T("A_AAC/MPEG2/MAIN")) {Version=2; Profile=__T("Main"); audioObjectType=1;}
- else if (CodecID==__T("A_AAC/MPEG2/LC")) {Version=2; Profile=__T("LC"); audioObjectType=2; SBR=0;}
- else if (CodecID==__T("A_AAC/MPEG2/LC/SBR")) {Version=2; Profile=__T("HE-AAC / LC"); audioObjectType=2; SBR=1;}
- else if (CodecID==__T("A_AAC/MPEG2/SSR")) {Version=2; Profile=__T("SSR"); audioObjectType=3;}
- else if (CodecID==__T("A_AAC/MPEG4/MAIN")) {Version=4; Profile=__T("Main"); audioObjectType=1;}
- else if (CodecID==__T("A_AAC/MPEG4/LC")) {Version=4; Profile=__T("LC"); audioObjectType=2; SBR=0;}
- else if (CodecID==__T("A_AAC/MPEG4/LC/SBR")) {Version=4; Profile=__T("HE-AAC / LC"); audioObjectType=2; SBR=1; PS=0;}
- else if (CodecID==__T("A_AAC/MPEG4/LC/SBR/PS")){Version=4; Profile=__T("HE-AACv2 / HE-AAC / LC"); audioObjectType=2; SBR=1; PS=1;}
- else if (CodecID==__T("A_AAC/MPEG4/SSR")) {Version=4; Profile=__T("SSR"); audioObjectType=3;}
- else if (CodecID==__T("A_AAC/MPEG4/LTP")) {Version=4; Profile=__T("LTP"); audioObjectType=4;}
- else if (CodecID==__T("raac")) { Profile=__T("LC"); audioObjectType=2;}
- else if (CodecID==__T("racp")) { Profile=__T("HE-AAC / LC"); audioObjectType=2; SBR=1; PS=0;}
-
- if (Version>0)
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Version, Version==2?"Version 2":"Version 4");
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, Profile);
- if (SBR!=2)
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Settings_SBR, SBR?"Yes":"No");
- if (PS!=2)
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Settings_PS, PS?"Yes":"No");
- int32u sampling_frequency=Retrieve(Stream_Audio, StreamPos_Last, Audio_SamplingRate).To_int32u();
-
- Stream[TrackNumber].Parser=new File_Aac;
- ((File_Aac*)Stream[TrackNumber].Parser)->Mode=File_Aac::Mode_AudioSpecificConfig;
- ((File_Aac*)Stream[TrackNumber].Parser)->AudioSpecificConfig_OutOfBand(sampling_frequency, audioObjectType, SBR==1?true:false, PS==1?true:false, SBR==1?true:false, PS==1?true:false);
- }
- #endif
- #if defined(MEDIAINFO_AAC_YES)
- else if (Format==(__T("AAC")))
- {
- Stream[TrackNumber].Parser=new File_Aac;
- ((File_Aac*)Stream[TrackNumber].Parser)->Mode=File_Aac::Mode_ADTS;
- }
- #endif
- #if defined(MEDIAINFO_MPEGA_YES)
- else if (Format==__T("MPEG Audio"))
- {
- Stream[TrackNumber].Parser=new File_Mpega;
- }
- #endif
- #if defined(MEDIAINFO_FLAC_YES)
- else if (Format==__T("Flac"))
- {
- Stream[TrackNumber].Parser=new File_Flac;
- }
- #endif
- #if defined(MEDIAINFO_OPUS_YES)
- else if (CodecID.find(__T("A_OPUS"))==0) //http://wiki.xiph.org/MatroskaOpus
- {
- Stream[TrackNumber].Parser=new File_Opus;
- }
- #endif
- #if defined(MEDIAINFO_WVPK_YES)
- else if (Format==__T("WavPack"))
- {
- Stream[TrackNumber].Parser=new File_Wvpk;
- ((File_Wvpk*)Stream[TrackNumber].Parser)->FromMKV=true;
- }
- #endif
- #if defined(MEDIAINFO_TTA_YES)
- else if (Format==__T("TTA"))
- {
- //Stream[TrackNumber].Parser=new File_Tta; //Parser is not needed, because header is useless and dropped (the parser analyses only the header)
- }
- #endif
- #if defined(MEDIAINFO_PCM_YES)
- else if (Format==__T("PCM"))
- {
- Stream[TrackNumber].Parser=new File_Pcm;
- ((File_Pcm*)Stream[TrackNumber].Parser)->Codec=CodecID;
- }
- #endif
- #if defined(MEDIAINFO_RM_YES)
- else if (CodecID.find(__T("A_REAL/"))==0)
- {
- Stream[TrackNumber].Parser=new File_Rm;
- ((File_Rm*)Stream[TrackNumber].Parser)->FromMKV_StreamType=Stream_Audio;
- }
- #endif
- Element_Code=TrackNumber;
- Open_Buffer_Init(Stream[TrackNumber].Parser);
-
- CodecID.clear();
-}
-
-//---------------------------------------------------------------------------
-void File_Mk::CodecPrivate_Manage()
-{
- if (CodecPrivate==NULL || TrackNumber==(int64u)-1 || TrackType==(int64u)-1)
- return; //Not ready (or not needed)
-
- //Codec Private is already here, so we can parse it now
- const int8u* Buffer_Save=Buffer;
- size_t Buffer_Offset_Save=Buffer_Offset;
- size_t Buffer_Size_Save=Buffer_Size;
- int64u Element_Size_Save=Element_Size;
- Buffer=CodecPrivate;
- Buffer_Offset=0;
- Buffer_Size=CodecPrivate_Size;
- Element_Offset=0;
- Element_Size=Buffer_Size;
- Segment_Tracks_TrackEntry_CodecPrivate();
- Buffer=Buffer_Save;
- Buffer_Offset=Buffer_Offset_Save;
- Buffer_Size=Buffer_Size_Save;
- Element_Size=Element_Size_Save;
- Element_Offset=Element_Size_Save;
- delete[] CodecPrivate; CodecPrivate=NULL;
- CodecPrivate_Size=0;
- Element_Name("(Multiple info)");
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_MK_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mk.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mk.h
deleted file mode 100644
index cae2bae21..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mk.h
+++ /dev/null
@@ -1,347 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Matroska files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_MatroskaH
-#define MediaInfo_File_MatroskaH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Classe File_Matroska
-//***************************************************************************
-
-class File_Mk : public File__Analyze
-{
-protected :
- //Streams management
- void Streams_Finish();
-
-public :
- File_Mk();
- ~File_Mk();
- void Segment_Attachements_AttachedFile_FileName();
-
-private :
- //Buffer
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Zero();
- void CRC32();
- void Void();
- void Ebml();
- void Ebml_Version();
- void Ebml_ReadVersion();
- void Ebml_MaxIDLength();
- void Ebml_MaxSizeLength();
- void Ebml_DocType();
- void Ebml_DocTypeVersion();
- void Ebml_DocTypeReadVersion();
- void Segment();
- void Segment_Attachements();
- void Segment_Attachements_AttachedFile();
- void Segment_Attachements_AttachedFile_FileData();
- void Segment_Attachements_AttachedFile_FileDescription();
- void Segment_Attachements_AttachedFile_FileMimeType();
- void Segment_Attachements_AttachedFile_FileReferral();
- void Segment_Attachements_AttachedFile_FileUID();
- void Segment_Chapters();
- void Segment_Chapters_EditionEntry();
- void Segment_Chapters_EditionEntry_ChapterAtom();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCodecID();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand_ChapProcessData();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessCommand_ChapProcessTime();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapProcess_ChapProcessPrivate();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapCountry();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapLanguage();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterDisplay_ChapString();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterFlagHidden();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterFlagEnabled();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterPhysicalEquiv();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterSegmentEditionUID();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterSegmentUID();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterTimeEnd();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterTimeStart();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterTrack();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterTrack_ChapterTrackNumber();
- void Segment_Chapters_EditionEntry_ChapterAtom_ChapterUID();
- void Segment_Chapters_EditionEntry_EditionFlagDefault();
- void Segment_Chapters_EditionEntry_EditionFlagHidden();
- void Segment_Chapters_EditionEntry_EditionFlagOrdered();
- void Segment_Chapters_EditionEntry_EditionUID();
- void Segment_Cluster();
- void Segment_Cluster_BlockGroup();
- void Segment_Cluster_BlockGroup_Block();
- void Segment_Cluster_BlockGroup_BlockAdditions();
- void Segment_Cluster_BlockGroup_BlockAdditions_BlockMore();
- void Segment_Cluster_BlockGroup_BlockAdditions_BlockMore_BlockAddID();
- void Segment_Cluster_BlockGroup_BlockAdditions_BlockMore_BlockAdditional();
- void Segment_Cluster_BlockGroup_BlockDuration();
- void Segment_Cluster_BlockGroup_ReferenceBlock();
- void Segment_Cluster_BlockGroup_ReferencePriority();
- void Segment_Cluster_BlockGroup_Slices();
- void Segment_Cluster_BlockGroup_Slices_TimeSlice();
- void Segment_Cluster_BlockGroup_Slices_TimeSlice_Duration();
- void Segment_Cluster_BlockGroup_Slices_TimeSlice_LaceNumber();
- void Segment_Cluster_Position();
- void Segment_Cluster_PrevSize();
- void Segment_Cluster_SilentTracks();
- void Segment_Cluster_SilentTracks_SilentTrackNumber();
- void Segment_Cluster_SimpleBlock();
- void Segment_Cluster_Timecode();
- void Segment_Cues();
- void Segment_Cues_CuePoint();
- void Segment_Cues_CuePoint_CueTime();
- void Segment_Cues_CuePoint_CueTrackPositions();
- void Segment_Cues_CuePoint_CueTrackPositions_CueTrack();
- void Segment_Cues_CuePoint_CueTrackPositions_CueClusterPosition();
- void Segment_Cues_CuePoint_CueTrackPositions_CueBlockNumber();
- void Segment_Info();
- void Segment_Info_ChapterTranslate();
- void Segment_Info_ChapterTranslate_ChapterTranslateCodec();
- void Segment_Info_ChapterTranslate_ChapterTranslateEditionUID();
- void Segment_Info_ChapterTranslate_ChapterTranslateID();
- void Segment_Info_DateUTC();
- void Segment_Info_Duration();
- void Segment_Info_MuxingApp();
- void Segment_Info_NextFilename();
- void Segment_Info_NextUID();
- void Segment_Info_PrevFilename();
- void Segment_Info_PrevUID();
- void Segment_Info_SegmentFamily();
- void Segment_Info_SegmentFilename();
- void Segment_Info_SegmentUID();
- void Segment_Info_TimecodeScale();
- void Segment_Info_Title();
- void Segment_Info_WritingApp();
- void Segment_SeekHead();
- void Segment_SeekHead_Seek();
- void Segment_SeekHead_Seek_SeekID();
- void Segment_SeekHead_Seek_SeekPosition();
- void Segment_Tags();
- void Segment_Tags_Tag();
- void Segment_Tags_Tag_SimpleTag();
- void Segment_Tags_Tag_SimpleTag_TagBinary();
- void Segment_Tags_Tag_SimpleTag_TagDefault();
- void Segment_Tags_Tag_SimpleTag_TagLanguage();
- void Segment_Tags_Tag_SimpleTag_TagName();
- void Segment_Tags_Tag_SimpleTag_TagString();
- void Segment_Tags_Tag_Targets();
- void Segment_Tags_Tag_Targets_AttachmentUID();
- void Segment_Tags_Tag_Targets_ChapterUID();
- void Segment_Tags_Tag_Targets_EditionUID();
- void Segment_Tags_Tag_Targets_TargetType();
- void Segment_Tags_Tag_Targets_TargetTypeValue();
- void Segment_Tags_Tag_Targets_TrackUID();
- void Segment_Tracks();
- void Segment_Tracks_TrackEntry();
- void Segment_Tracks_TrackEntry_AttachmentLink();
- void Segment_Tracks_TrackEntry_Audio();
- void Segment_Tracks_TrackEntry_Audio_BitDepth();
- void Segment_Tracks_TrackEntry_Audio_Channels();
- void Segment_Tracks_TrackEntry_Audio_OutputSamplingFrequency();
- void Segment_Tracks_TrackEntry_Audio_SamplingFrequency();
- void Segment_Tracks_TrackEntry_CodecDecodeAll();
- void Segment_Tracks_TrackEntry_CodecID();
- void Segment_Tracks_TrackEntry_ContentEncodings() {};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding() {};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Order() {UInteger_Info();};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Scope() {UInteger_Info();};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Type() {UInteger_Info();};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression();
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression_ContentCompAlgo();
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Compression_ContentCompSettings();
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption() {};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentEncAlgo() {UInteger_Info();};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentEncKeyID() {Skip_XX(Element_Size, "Data");};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSignature() {Skip_XX(Element_Size, "Data");};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSigKeyID() {Skip_XX(Element_Size, "Data");};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSigAlgo() {UInteger_Info();};
- void Segment_Tracks_TrackEntry_ContentEncodings_ContentEncoding_Encryption_ContentSigHashAlgo() {UInteger_Info();};
- void Segment_Tracks_TrackEntry_CodecName();
- void Segment_Tracks_TrackEntry_CodecPrivate();
- void Segment_Tracks_TrackEntry_CodecPrivate_auds();
- void Segment_Tracks_TrackEntry_CodecPrivate_auds_ExtensibleWave();
- void Segment_Tracks_TrackEntry_CodecPrivate_vids();
- void Segment_Tracks_TrackEntry_DefaultDuration();
- void Segment_Tracks_TrackEntry_FlagDefault();
- void Segment_Tracks_TrackEntry_FlagEnabled();
- void Segment_Tracks_TrackEntry_FlagForced();
- void Segment_Tracks_TrackEntry_FlagLacing();
- void Segment_Tracks_TrackEntry_Language();
- void Segment_Tracks_TrackEntry_MaxBlockAdditionID();
- void Segment_Tracks_TrackEntry_MaxCache();
- void Segment_Tracks_TrackEntry_MinCache();
- void Segment_Tracks_TrackEntry_Name();
- void Segment_Tracks_TrackEntry_TrackNumber();
- void Segment_Tracks_TrackEntry_TrackTimecodeScale();
- void Segment_Tracks_TrackEntry_TrackType();
- void Segment_Tracks_TrackEntry_TrackUID();
- void Segment_Tracks_TrackEntry_Video();
- void Segment_Tracks_TrackEntry_Video_AspectRatioType();
- void Segment_Tracks_TrackEntry_Video_ColourSpace();
- void Segment_Tracks_TrackEntry_Video_DisplayHeight();
- void Segment_Tracks_TrackEntry_Video_DisplayUnit();
- void Segment_Tracks_TrackEntry_Video_DisplayWidth();
- void Segment_Tracks_TrackEntry_Video_FlagInterlaced();
- void Segment_Tracks_TrackEntry_Video_FrameRate();
- void Segment_Tracks_TrackEntry_Video_PixelCropBottom();
- void Segment_Tracks_TrackEntry_Video_PixelCropLeft();
- void Segment_Tracks_TrackEntry_Video_PixelCropRight();
- void Segment_Tracks_TrackEntry_Video_PixelCropTop();
- void Segment_Tracks_TrackEntry_Video_PixelHeight();
- void Segment_Tracks_TrackEntry_Video_PixelWidth();
- void Segment_Tracks_TrackEntry_Video_StereoMode();
- void Segment_Tracks_TrackEntry_Video_StereoModeBuggy() {Segment_Tracks_TrackEntry_Video_StereoMode();}
- void Segment_Tracks_TrackEntry_TrackOverlay();
- void Segment_Tracks_TrackEntry_TrackTranslate();
- void Segment_Tracks_TrackEntry_TrackTranslate_Codec();
- void Segment_Tracks_TrackEntry_TrackTranslate_EditionUID();
- void Segment_Tracks_TrackEntry_TrackTranslate_TrackID();
-
- struct stream
- {
- std::vector<int64u> TimeCodes;
- int64u TimeCode_Start;
- File__Analyze* Parser;
- stream_t StreamKind;
- size_t StreamPos;
- size_t PacketCount;
- int32u AvgBytesPerSec; //Only used by x_MS/* codecIDs
- float32 DisplayAspectRatio;
- float64 FrameRate;
- bool Searching_Payload;
- bool Searching_TimeStamps;
- bool Searching_TimeStamp_Start;
- bool Default;
- bool Forced;
- int64u ContentCompAlgo;
- size_t ContentCompSettings_Buffer_Size;
- int8u* ContentCompSettings_Buffer;
- std::map<std::string, Ztring> Infos;
- int64u TrackDefaultDuration;
- std::map<int64u, int64u> Segment_Cluster_BlockGroup_BlockDuration_Counts;
-
- stream()
- {
- TimeCode_Start=(int64u)-1;
- Parser=NULL;
- StreamKind=Stream_Max;
- StreamPos=0;
- PacketCount=0;
- AvgBytesPerSec=0;
- DisplayAspectRatio=0;
- FrameRate=0;
- Searching_Payload=false;
- Searching_TimeStamps=false;
- Searching_TimeStamp_Start=false;
- Default=true;
- Forced=false;
- ContentCompAlgo=(int32u)-1;
- ContentCompSettings_Buffer_Size=0;
- ContentCompSettings_Buffer=NULL;
- TrackDefaultDuration=0;
- }
-
- ~stream()
- {
- delete Parser; //Parser=NULL;
- delete[] ContentCompSettings_Buffer; //ContentCompSettings_Buffer=NULL;
- }
- };
- std::map<int64u, stream> Stream;
- size_t Stream_Count;
-
- //Data
- int64u UInteger_Get();
- int128u UInteger16_Get();
- void UInteger_Info();
-
- float64 Float_Get();
- void Float_Info();
-
- Ztring UTF8_Get();
- void UTF8_Info();
-
- Ztring Local_Get();
- void Local_Info();
-
- //Temp - TrackEntry
- int8u* CodecPrivate;
- size_t CodecPrivate_Size;
- void CodecPrivate_Manage();
- Ztring CodecID;
- infocodecid_format_t InfoCodecID_Format_Type;
- void CodecID_Manage();
- int64u TrackType;
-
- //Temp
- std::vector<Ztring> AttachedFiles;
- int64u Format_Version;
- int64u TimecodeScale;
- float64 Duration;
- int64u TrackNumber;
- int64u TrackVideoDisplayWidth;
- int64u TrackVideoDisplayHeight;
- int32u AvgBytesPerSec;
- int64u Segment_Cluster_TimeCode_Value;
- bool Cluster_AlreadyParsed;
-
- //Chapters
- struct chapterdisplay
- {
- Ztring ChapLanguage;
- Ztring ChapString;
- };
- struct chapteratom
- {
- int64u ChapterTimeStart;
- std::vector<chapterdisplay> ChapterDisplays;
-
- chapteratom()
- {
- ChapterTimeStart=(int64u)-1;
- }
- };
- struct editionentry
- {
- std::vector<chapteratom> ChapterAtoms;
- };
- std::vector<editionentry> EditionEntries;
- size_t EditionEntries_Pos;
- size_t ChapterAtoms_Pos;
- size_t ChapterDisplays_Pos;
- int64u Segment_Offset_Begin;
- int64u Segment_Offset_End;
- std::vector<int64u> Segment_Seeks;
- size_t Segment_Seeks_Pos;
- int64u Segment_Tag_TrackUID;
- std::vector<Ztring> Segment_Tag_SimpleTag_TagNames;
- int64u Segment_Cluster_BlockGroup_BlockDuration_Value;
- int64u Segment_Cluster_BlockGroup_BlockDuration_TrackNumber;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4.cpp
deleted file mode 100644
index e1776553e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4.cpp
+++ /dev/null
@@ -1,2150 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Main part
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_MPEG4_YES
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mpeg4.h"
-#include "MediaInfo/Multiple/File_Mpeg4_Descriptors.h"
-#if defined(MEDIAINFO_MPEGPS_YES)
- #include "MediaInfo/Multiple/File_MpegPs.h"
-#endif
-#include "ZenLib/FileName.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#ifdef MEDIAINFO_REFERENCES_YES
- #include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#endif //MEDIAINFO_REFERENCES_YES
-#include "ZenLib/Format/Http/Http_Utils.h"
-#include <algorithm> // std::sort
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-namespace Elements
-{
- const int64u free=0x66726565;
- const int64u mdat=0x6D646174;
- const int64u moov_meta______=0x2D2D2D2D;
- const int64u moov_meta___ART=0xA9415254;
- const int64u moov_meta___alb=0xA9616C62;
- const int64u moov_meta___ard=0xA9617264;
- const int64u moov_meta___arg=0xA9617267;
- const int64u moov_meta___aut=0xA9617574;
- const int64u moov_meta___con=0xA963696E;
- const int64u moov_meta___cmt=0xA9636D74;
- const int64u moov_meta___cpy=0xA9637079;
- const int64u moov_meta___day=0xA9646179;
- const int64u moov_meta___des=0xA9646573;
- const int64u moov_meta___dir=0xA9646972;
- const int64u moov_meta___dis=0xA9646973;
- const int64u moov_meta___edl=0xA965646C;
- const int64u moov_meta___enc=0xA9656E63;
- const int64u moov_meta___fmt=0xA9666D74;
- const int64u moov_meta___gen=0xA967656E;
- const int64u moov_meta___grp=0xA9677270;
- const int64u moov_meta___hos=0xA9686F73;
- const int64u moov_meta___inf=0xA9696E66;
- const int64u moov_meta___key=0xA96B6579;
- const int64u moov_meta___lyr=0xA96C7972;
- const int64u moov_meta___mak=0xA96D616B;
- const int64u moov_meta___mod=0xA96D6F64;
- const int64u moov_meta___nam=0xA96E616D;
- const int64u moov_meta___ope=0xA96F7065;
- const int64u moov_meta___prd=0xA9707264;
- const int64u moov_meta___PRD=0xA9505244;
- const int64u moov_meta___prf=0xA9707266;
- const int64u moov_meta___req=0xA9726571;
- const int64u moov_meta___sne=0xA9736E65;
- const int64u moov_meta___sol=0xA9736F6C;
- const int64u moov_meta___src=0xA9737263;
- const int64u moov_meta___st3=0xA9737403;
- const int64u moov_meta___swr=0xA9737772;
- const int64u moov_meta___too=0xA9746F6F;
- const int64u moov_meta___url=0xA975726C;
- const int64u moov_meta___wrn=0xA977726E;
- const int64u moov_meta___wrt=0xA9777274;
- const int64u moov_meta___xpd=0xA9787064;
- const int64u moov_meta__aART=0x61415254;
- const int64u moov_meta__akID=0x616B4944;
- const int64u moov_meta__albm=0x616C626D;
- const int64u moov_meta__apID=0x61704944;
- const int64u moov_meta__atID=0x61744944;
- const int64u moov_meta__auth=0x61757468;
- const int64u moov_meta__catg=0x63617467;
- const int64u moov_meta__cnID=0x636E4944;
- const int64u moov_meta__cpil=0x6370696C;
- const int64u moov_meta__cprt=0x63707274;
- const int64u moov_meta__covr=0x636F7672;
- const int64u moov_meta__desc=0x64657363;
- const int64u moov_meta__disk=0x6469736B;
- const int64u moov_meta__dscp=0x64736370;
- const int64u moov_meta__egid=0x65676964;
- const int64u moov_meta__flvr=0x666C7672;
- const int64u moov_meta__gnre=0x676E7265;
- const int64u moov_meta__geID=0x67654944;
- const int64u moov_meta__grup=0x67727570;
- const int64u moov_meta__hdvd=0x68647664;
- const int64u moov_meta__itnu=0x69746E75;
- const int64u moov_meta__keyw=0x6B657977;
- const int64u moov_meta__ldes=0x6C646573;
- const int64u moov_meta__name=0x6E616D65;
- const int64u moov_meta__pcst=0x70637374;
- const int64u moov_meta__perf=0x70657266;
- const int64u moov_meta__pgap=0x70676170;
- const int64u moov_meta__plID=0x706C4944;
- const int64u moov_meta__purd=0x70757264;
- const int64u moov_meta__purl=0x7075726C;
- const int64u moov_meta__rate=0x72617465;
- const int64u moov_meta__rndu=0x726E6475;
- const int64u moov_meta__rpdu=0x72706475;
- const int64u moov_meta__rtng=0x72746E67;
- const int64u moov_meta__sdes=0x73646573;
- const int64u moov_meta__sfID=0x73664944;
- const int64u moov_meta__soaa=0x736F6161;
- const int64u moov_meta__soal=0x736F616C;
- const int64u moov_meta__soar=0x736F6172;
- const int64u moov_meta__soco=0x736F636F;
- const int64u moov_meta__sonm=0x736F6E6D;
- const int64u moov_meta__sosn=0x736F736E;
- const int64u moov_meta__stik=0x7374696B;
- const int64u moov_meta__titl=0x7469746C;
- const int64u moov_meta__tool=0x746F6F6C;
- const int64u moov_meta__trkn=0x74726B6E;
- const int64u moov_meta__tmpo=0x746D706F;
- const int64u moov_meta__tven=0x7476656E;
- const int64u moov_meta__tves=0x74766573;
- const int64u moov_meta__tvnn=0x74766E6E;
- const int64u moov_meta__tvsh=0x74767368;
- const int64u moov_meta__tvsn=0x7476736E;
- const int64u moov_meta__xid_=0x78696420;
- const int64u moov_meta__year=0x79656172;
- const int64u moov_meta__yyrc=0x79797263;
- const int64u moov_trak_mdia_hdlr_alis=0x616C6973;
- const int64u moov_trak_mdia_hdlr_hint=0x68696E74;
- const int64u skip=0x736B6970;
- const int64u wide=0x77696465;
-}
-
-//---------------------------------------------------------------------------
-Ztring Mpeg4_Encoded_Library(int32u Vendor)
-{
- switch (Vendor)
- {
- case 0x33495658 : return __T("3ivX"); //3IVX
- case 0x6170706C : return __T("Apple QuickTime"); //appl
- case 0x6E696B6F : return __T("Nikon"); //niko
- case 0x6F6C796D : return __T("Olympus"); //olym
- case 0x6F6D6E65 : return __T("Omneon"); //omne
- default: return Ztring().From_CC4(Vendor);
- }
-}
-
-//---------------------------------------------------------------------------
-Ztring Mpeg4_Language_Apple(int16u Language)
-{
- switch (Language)
- {
- case 0 : return __T("en");
- case 1 : return __T("fr");
- case 2 : return __T("de");
- case 6 : return __T("es");
- default: return Ztring::ToZtring(Language);
- }
-}
-
-//---------------------------------------------------------------------------
-extern const char* Mpeg4_chan(int16u Ordering);
-extern const char* Mpeg4_chan_Layout(int16u Ordering);
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mpeg4::File_Mpeg4()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Mpeg4;
- StreamIDs_Width[0]=8;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(0); //Container1
- #endif //MEDIAINFO_TRACE
-
- DataMustAlwaysBeComplete=false;
-
- //Temp
- mdat_MustParse=false;
- moov_mvhd_TimeScale=1;
- Vendor=0x00000000;
- FirstMdatPos=(int64u)-1;
- LastMdatPos=0;
- FirstMoovPos=(int64u)-1;
- MajorBrand=0x00000000;
- IsSecondPass=false;
- IsParsing_mdat=false;
- IsFragmented=false;
- moov_trak_tkhd_TrackID=(int32u)-1;
- #if defined(MEDIAINFO_REFERENCES_YES)
- ReferenceFiles=NULL;
- #endif //defined(MEDIAINFO_REFERENCES_YES)
- mdat_Pos_NormalParsing=false;
- moof_traf_base_data_offset=(int64u)-1;
- data_offset_present=true;
- #if MEDIAINFO_NEXTPACKET
- ReferenceFiles_IsParsing=false;
- #endif //MEDIAINFO_NEXTPACKET
- #if MEDIAINFO_DEMUX
- TimeCode_FrameOffset=0;
- TimeCode_DtsOffset=0;
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-File_Mpeg4::~File_Mpeg4()
-{
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::Streams_Accept()
-{
- if (!IsSub)
- {
- /*bool IsDashMpd=false;
- for (size_t Pos=0; pos<ftyps
- TestContinuousFileNames();*/
- }
-
- if (!IsSub && MajorBrand==0x6A703220) //"jp2 "
- {
- TestContinuousFileNames();
-
- Stream_Prepare((Config->File_Names.size()>1 || Config->File_IsReferenced_Get())?Stream_Video:Stream_Image);
- if (StreamKind_Last==Stream_Video)
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, Config->File_Names.size());
- }
-
- //Configuration
- Buffer_MaximumSize=64*1024*1024; //Some big frames are possible (e.g YUV 4:2:2 10 bits 1080p)
- File_Buffer_Size_Hint_Pointer=Config->File_Buffer_Size_Hint_Pointer_Get();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::Streams_Finish()
-{
- #if defined(MEDIAINFO_REFERENCES_YES) && MEDIAINFO_NEXTPACKET
- //Locators only
- if (ReferenceFiles_IsParsing)
- {
- ReferenceFiles->ParseReferences();
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
-
- Streams_Finish_CommercialNames();
- return;
- }
- #endif //defined(MEDIAINFO_REFERENCES_YES) && MEDIAINFO_NEXTPACKET
-
- //Final Cut EIA-608 format
- if (Retrieve(Stream_General, 0, General_Format)==__T("Final Cut EIA-608"))
- {
- for (streams::iterator Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- {
- Stream->second.Parsers[0]->Finish();
- if (Stream->second.Parsers[0]->Count_Get(Stream_Text))
- {
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_ID, Stream->first==1?"608-1":"608-2");
- Fill(Stream_Text, StreamPos_Last, "MuxingMode", __T("Final Cut"), Unlimited);
- Merge(*Stream->second.Parsers[0], Stream_Text, 0, StreamPos_Last);
- }
-
- //Law rating
- Ztring LawRating=Stream->second.Parsers[0]->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Stream->second.Parsers[0]->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
-
- return;
- }
-
- Fill_Flush();
- int64u File_Size_Total=File_Size;
-
- //TimeCode
- for (streams::iterator Temp=Streams.begin(); Temp!=Streams.end(); ++Temp)
- if (Temp->second.TimeCode)
- TimeCode_Associate(Temp->first);
-
- //For each stream
- streams::iterator Temp=Streams.begin();
- while (Temp!=Streams.end())
- {
- //Preparing
- StreamKind_Last=Temp->second.StreamKind;
- StreamPos_Last=Temp->second.StreamPos;
-
- if (StreamKind_Last==Stream_Max && Temp->second.hdlr_SubType)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, Ztring().From_CC4(Streams[moov_trak_tkhd_TrackID].hdlr_SubType));
- }
-
- //if (Temp->second.stsz_StreamSize)
- // Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize), Temp->second.stsz_StreamSize);
-
- //Edit lists coherencies
- if (Temp->second.edts.size()>1 && Temp->second.edts[0].Duration==Temp->second.tkhd_Duration)
- {
- bool Duplicates=true;
- for (size_t Pos=1; Pos<Temp->second.edts.size(); Pos++)
- if (Temp->second.edts[Pos-1].Delay!=Temp->second.edts[Pos].Delay || Temp->second.edts[Pos-1].Duration!=Temp->second.edts[Pos].Duration || Temp->second.edts[Pos-1].Rate!=Temp->second.edts[Pos].Rate)
- Duplicates=false;
- if (Duplicates)
- Temp->second.edts.resize(1);
- }
-
- //Fragments
- if (IsFragmented)
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Duration), Temp->second.stts_Duration/((float)Temp->second.mdhd_TimeScale)*1000, 0, true);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_FrameCount), Temp->second.stts_FrameCount, 10, true);
- }
-
- //Duration/StreamSize
- if (moov_mvhd_TimeScale && Temp->second.TimeCode==NULL && Temp->second.mdhd_TimeScale)
- {
- Ztring Duration_stts_FirstFrame, Duration_stts_LastFrame;
- if (Temp->second.stts_Duration_FirstFrame)
- Duration_stts_FirstFrame.From_Number(((float32)(((int32s)Temp->second.stts_Duration_FirstFrame)-((int32s)Temp->second.stts[1].SampleDuration)))*1000/Temp->second.mdhd_TimeScale, 0); //The duration of the frame minus 1 normal frame duration
- if (Temp->second.stts_Duration_LastFrame)
- Duration_stts_LastFrame.From_Number(((float32)(((int32s)Temp->second.stts_Duration_LastFrame)-((int32s)Temp->second.stts[Temp->second.stts_Duration_FirstFrame?1:0].SampleDuration)))*1000/Temp->second.mdhd_TimeScale, 0); //The duration of the frame minus 1 normal frame duration
-
- float32 Duration_tkhd_H=((float32)(Temp->second.tkhd_Duration+1))/moov_mvhd_TimeScale;
- float32 Duration_tkhd_L=((float32)(Temp->second.tkhd_Duration-1))/moov_mvhd_TimeScale;
- float32 Duration_stts=((float32)Temp->second.stts_Duration)/Temp->second.mdhd_TimeScale;
- if (!IsFragmented && Duration_stts && !(Duration_stts>=Duration_tkhd_L && Duration_stts<=Duration_tkhd_H))
- {
- //There is a difference between media/stts atom and track atom
- Fill(StreamKind_Last, StreamPos_Last, "Source_Duration", Duration_stts*1000, 0);
- Fill(StreamKind_Last, StreamPos_Last, "Source_Duration_FirstFrame", Duration_stts_FirstFrame);
- Fill(StreamKind_Last, StreamPos_Last, "Source_Duration_LastFrame", Duration_stts_LastFrame);
- if (Temp->second.stts.size()!=1 || Temp->second.mdhd_TimeScale<100 || Temp->second.stts[0].SampleDuration!=1) //TODO: test PCM
- if (Temp->second.stts_FrameCount)
- Fill(StreamKind_Last, StreamPos_Last, "Source_FrameCount", Temp->second.stts_FrameCount);
- if (Temp->second.stsz_StreamSize)
- Fill(StreamKind_Last, StreamPos_Last, "Source_StreamSize", Temp->second.stsz_StreamSize);
-
- //Calculating new properties based on track duration
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Duration), ((float32)Temp->second.tkhd_Duration)/moov_mvhd_TimeScale*1000, 0, true);
- //Fill(StreamKind_Last, StreamPos_Last, "Duration_FirstFrame", Duration_stts_FirstFrame);
- Clear(StreamKind_Last, StreamPos_Last, "Duration_LastFrame"); //TODO
-
- int64u FrameCount;
- if (Temp->second.stts_Min && Temp->second.stts_Min==Temp->second.stts_Max)
- FrameCount=float64_int64s(((float64)Temp->second.tkhd_Duration)/moov_mvhd_TimeScale*Temp->second.mdhd_TimeScale/Temp->second.stts_Min);
- else
- {
- FrameCount=0;
- int64u Ticks_Max=float64_int64s(((float64)Temp->second.tkhd_Duration)/moov_mvhd_TimeScale*Temp->second.mdhd_TimeScale);
- int64u Ticks=0;
- for (size_t stts_Pos=0; stts_Pos<Temp->second.stts.size(); stts_Pos++)
- {
- int64u Ticks_Complete = (int64u)Temp->second.stts[stts_Pos].SampleCount * (int64u)Temp->second.stts[stts_Pos].SampleDuration;
- if (Ticks+Ticks_Complete>=Ticks_Max)
- {
- if (Temp->second.stts[stts_Pos].SampleDuration)
- FrameCount+=float64_int64s(((float64)(Ticks_Max-Ticks))/Temp->second.stts[stts_Pos].SampleDuration);
- break;
- }
- Ticks+=Ticks_Complete;
- FrameCount+=Temp->second.stts[stts_Pos].SampleCount;
- }
- }
- if (Temp->second.stts.size()!=1 || Temp->second.mdhd_TimeScale<100 || Temp->second.stts[0].SampleDuration!=1) //TODO: test PCM
- Fill(StreamKind_Last, StreamPos_Last, "FrameCount", FrameCount, 10, true);
-
- if (Temp->second.stsz_Total.empty())
- Fill(StreamKind_Last, StreamPos_Last, "StreamSize", FrameCount*Temp->second.stsz_Sample_Size*Temp->second.stsz_Sample_Multiplier);
- else if (FrameCount<=Temp->second.stsz_Total.size())
- {
- int64u StreamSize=0;
- for (size_t stsz_Pos=0; stsz_Pos<FrameCount; stsz_Pos++)
- StreamSize+=Temp->second.stsz_Total[stsz_Pos];
- bool HasEncodedBitRate=!Retrieve(StreamKind_Last, StreamPos_Last, "BitRate_Encoded").empty();
- Fill(StreamKind_Last, StreamPos_Last, HasEncodedBitRate?"StreamSize_Encoded":"StreamSize", StreamSize);
- }
- }
- else
- {
- //Normal
- if (Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Duration)).empty())
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Duration), Duration_stts*1000, 0);
- Fill(StreamKind_Last, StreamPos_Last, "Duration_FirstFrame", Duration_stts_FirstFrame);
- Fill(StreamKind_Last, StreamPos_Last, "Duration_LastFrame", Duration_stts_LastFrame);
- if (Temp->second.stts.size()!=1 || Temp->second.mdhd_TimeScale<100 || Temp->second.stts[0].SampleDuration!=1) //TODO: test PCM
- if (Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_FrameCount)).empty() && Temp->second.stts_FrameCount)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_FrameCount), Temp->second.stts_FrameCount);
- bool HasPadding=(Temp->second.Parsers.size()==1 && !Temp->second.Parsers[0]->Retrieve(StreamKind_Last, StreamPos_Last, "BitRate_Encoded").empty()) || (Temp->second.Parsers.size()==1 && Temp->second.Parsers[0]->Buffer_TotalBytes && ((float32)Temp->second.Parsers[0]->Buffer_PaddingBytes)/Temp->second.Parsers[0]->Buffer_TotalBytes>0.02);
- if (Temp->second.stsz_StreamSize)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, HasPadding?Generic_StreamSize_Encoded:Generic_StreamSize), Temp->second.stsz_StreamSize);
- }
- }
-
- //Edit Lists
- float64 Delay=0;
- switch (Temp->second.edts.size())
- {
- case 0 :
- break;
- case 1 :
- if (Temp->second.edts[0].Duration==Temp->second.tkhd_Duration && Temp->second.edts[0].Rate==0x00010000 && moov_mvhd_TimeScale)
- {
- Delay=Temp->second.edts[0].Delay;
- Delay=-Delay;
- if (Temp->second.mdhd_TimeScale)
- Delay/=Temp->second.mdhd_TimeScale; //In seconds
- }
- break;
- case 2 :
- if (Temp->second.edts[0].Delay==(int32u)-1 && Temp->second.edts[0].Duration+Temp->second.edts[1].Duration==Temp->second.tkhd_Duration && Temp->second.edts[0].Rate==0x00010000 && Temp->second.edts[1].Rate==0x00010000 && moov_mvhd_TimeScale)
- {
- Delay=Temp->second.edts[0].Duration;
- Temp->second.tkhd_Duration-=float64_int64s(Delay);
- Delay/=moov_mvhd_TimeScale; //In seconds
- }
- break;
- default:
- break; //TODO: handle more complex Edit Lists
- }
- if (Delay && !Retrieve(StreamKind_Last, StreamPos_Last, "Source_Duration").empty())
- {
- Delay+=Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay)).To_float64()/1000; //TODO: use TimeCode value directly instead of the rounded value
- if (!Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_Source)).empty() && Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_Source))!=__T("Container"))
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_Original), Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay)));
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_Original_Source), Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_Source)));
- }
- Fill(StreamKind_Last, StreamPos_Last, "Source_Delay", Delay*1000, 0, true);
- Fill(StreamKind_Last, StreamPos_Last, "Source_Delay_Source", "Container", Unlimited, true, true);
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Ztring().From_Local("Source_Delay"), Info_Options)=__T("N NT");
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Ztring().From_Local("Source_Delay_Source"), Info_Options)=__T("N NT");
- }
-
- if (StreamKind_Last==Stream_Video && Temp->second.TimeCode==NULL)
- {
- if (Temp->second.mdhd_TimeScale && Temp->second.stts_Min && Temp->second.stts_Max)
- {
- if (Temp->second.stts_Min==0 || Temp->second.stts_Max==0 || (Temp->second.stts_Min!=Temp->second.stts_Max && ((float)Temp->second.mdhd_TimeScale)/Temp->second.stts_Min-((float)Temp->second.mdhd_TimeScale)/Temp->second.stts_Max>=0.001))
- {
- if (Temp->second.stts_Max)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Minimum, ((float)Temp->second.mdhd_TimeScale)/Temp->second.stts_Max, 3, true);
- if (Temp->second.stts_Min)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Maximum, ((float)Temp->second.mdhd_TimeScale)/Temp->second.stts_Min, 3, true);
- if (Temp->second.stts_Duration)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, ((float)Temp->second.stts_FrameCount)/Temp->second.stts_Duration*Temp->second.mdhd_TimeScale, 3, true);
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Mode, "VFR", Unlimited, true, true);
- }
- else
- {
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, ((float)Temp->second.mdhd_TimeScale)/Temp->second.stts_Max, 3, true);
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Mode, "CFR", Unlimited, true, true);
- }
- }
- }
-
- //Coherency
- if (!IsFragmented && Temp->second.stts_Duration!=Temp->second.mdhd_Duration && Temp->second.mdhd_TimeScale)
- {
- //There is a difference between media/mdhd atom and track atom
- Fill(StreamKind_Last, StreamPos_Last, "mdhd_Duration", ((float32)Temp->second.mdhd_Duration)/Temp->second.mdhd_TimeScale*1000, 0);
- }
-
- //When there are few frames, difficult to detect PCM
- if (Temp->second.IsPcm && !Temp->second.Parsers.empty() && !Temp->second.Parsers[0]->Status[IsAccepted])
- {
- for (size_t Pos=0; Pos<Temp->second.Parsers.size()-1; Pos++)
- delete Temp->second.Parsers[Pos];
- Temp->second.Parsers.erase(Temp->second.Parsers.begin(), Temp->second.Parsers.begin()+Temp->second.Parsers.size()-1);
- Temp->second.Parsers[0]->Accept();
- }
-
- //Parser specific
- if (Temp->second.Parsers.size()==1)
- {
- if (Config->ParseSpeed<=1.0)
- {
- Fill(Temp->second.Parsers[0]);
- Temp->second.Parsers[0]->Open_Buffer_Unsynch();
- }
-
- //Finalizing and Merging
- Finish(Temp->second.Parsers[0]);
- if (StreamKind_Last==Stream_General)
- {
- //Special case for TimeCode without link
- for (std::map<int32u, stream>::iterator Target=Streams.begin(); Target!=Streams.end(); ++Target)
- if (Target->second.StreamKind!=Stream_General)
- Merge(*Temp->second.Parsers[0], Target->second.StreamKind, 0, Target->second.StreamPos);
- }
- else
- {
- //Hacks - Before
- Ztring FrameRate_Temp, FrameRate_Mode_Temp, Duration_Temp, Delay_Temp;
- if (StreamKind_Last==Stream_Video)
- {
- if (Temp->second.Parsers[0] && Retrieve(Stream_Video, 0, Video_CodecID_Hint)==__T("DVCPRO HD"))
- {
- Temp->second.Parsers[0]->Clear(Stream_Video, 0, Video_FrameRate);
- Temp->second.Parsers[0]->Clear(Stream_Video, 0, Video_Width);
- Temp->second.Parsers[0]->Clear(Stream_Video, 0, Video_Height);
- Temp->second.Parsers[0]->Clear(Stream_Video, 0, Video_DisplayAspectRatio);
- Temp->second.Parsers[0]->Clear(Stream_Video, 0, Video_PixelAspectRatio);
- }
-
- FrameRate_Temp=Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate);
- FrameRate_Mode_Temp=Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate_Mode);
- Duration_Temp=Retrieve(Stream_Video, StreamPos_Last, Video_Duration);
- Delay_Temp=Retrieve(Stream_Video, StreamPos_Last, Video_Delay);
-
- //Special case: DV 1080i and MPEG-4 header is lying (saying this is 1920 pixel wide, but this is 1440 pixel wide)
- if (Temp->second.Parsers[0]->Get(Stream_Video, 0, Video_Format)==__T("DV") && Retrieve(Stream_Video, StreamKind_Last, Video_Width)==__T("1080"))
- Clear(Stream_Video, StreamKind_Last, Video_Width);
- }
-
- //Special case - Multiple sub-streams in a stream
- if ((Temp->second.Parsers[0]->Retrieve(Stream_General, 0, General_Format)==__T("ChannelGrouping") && Temp->second.Parsers[0]->Count_Get(Stream_Audio))
- || Temp->second.Parsers[0]->Retrieve(Stream_General, 0, General_Format)==__T("Final Cut EIA-608")
- || Temp->second.Parsers[0]->Retrieve(Stream_General, 0, General_Format)==__T("Final Cut CDP"))
- {
- //Before
- Clear(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize));
- if (StreamKind_Last==Stream_Audio)
- {
- Clear(Stream_Audio, StreamPos_Last, Audio_Format_Settings_Sign);
- }
- ZtringList StreamSave;
- ZtringListList StreamMoreSave;
- if (StreamKind_Last!=Stream_Max)
- {
- StreamSave.Write((*File__Analyze::Stream)[StreamKind_Last][StreamPos_Last].Read());
- StreamMoreSave.Write((*Stream_More)[StreamKind_Last][StreamPos_Last].Read());
- }
-
- //Erasing former streams data
- stream_t NewKind=StreamKind_Last;
- size_t NewPos1;
- Ztring ID;
- if (Temp->second.Parsers[0]->Retrieve(Stream_General, 0, General_Format)==__T("ChannelGrouping"))
- {
- //Channel coupling, removing the 2 corresponding streams
- NewPos1=(StreamPos_Last/2)*2;
- size_t NewPos2=NewPos1+1;
- ID=Retrieve(StreamKind_Last, NewPos1, General_ID)+__T(" / ")+Retrieve(StreamKind_Last, NewPos2, General_ID);
-
- Stream_Erase(NewKind, NewPos2);
- Stream_Erase(NewKind, NewPos1);
-
- streams::iterator NextStream=Temp;
- ++NextStream;
- size_t NewAudio_Count=Temp->second.Parsers[0]->Count_Get(Stream_Audio);
- while (NextStream!=Streams.end())
- {
- if (NextStream->second.StreamKind==Stream_Audio)
- {
- NextStream->second.StreamPos-=2;
- NextStream->second.StreamPos+=NewAudio_Count;
- }
- ++NextStream;
- }
- }
- else
- {
- //One channel
- NewPos1=StreamPos_Last;
- ID=Retrieve(StreamKind_Last, NewPos1, General_ID);
- Stream_Erase(StreamKind_Last, StreamPos_Last);
- }
-
- //After
- size_t New_Count=Temp->second.Parsers[0]->Count_Get(NewKind);
- for (size_t StreamPos=0; StreamPos<New_Count; StreamPos++)
- {
- Stream_Prepare(NewKind, NewPos1+StreamPos);
- Merge(*Temp->second.Parsers[0], StreamKind_Last, StreamPos, StreamPos_Last);
- Ztring Parser_ID=Retrieve(StreamKind_Last, StreamPos_Last, General_ID);
- Fill(StreamKind_Last, StreamPos_Last, General_ID, ID+__T("-")+Parser_ID, true);
- for (size_t Pos=0; Pos<StreamSave.size(); Pos++)
- if (Retrieve(StreamKind_Last, StreamPos_Last, Pos).empty())
- Fill(StreamKind_Last, StreamPos_Last, Pos, StreamSave[Pos]);
- for (size_t Pos=0; Pos<StreamMoreSave.size(); Pos++)
- Fill(StreamKind_Last, StreamPos_Last, StreamMoreSave(Pos, 0).To_Local().c_str(), StreamMoreSave(Pos, 1));
- }
- Ztring LawRating=Temp->second.Parsers[0]->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Temp->second.Parsers[0]->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
- else
- {
- //Temp->second.Parsers[0]->Clear(StreamKind_Last, StreamPos_Last, "Delay"); //DV TimeCode is removed
- Merge(*Temp->second.Parsers[0], StreamKind_Last, 0, StreamPos_Last);
-
- //Law rating
- Ztring LawRating=Temp->second.Parsers[0]->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Temp->second.Parsers[0]->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
-
- //Hacks - After
- if (StreamKind_Last==Stream_Video)
- {
- Fill(Stream_Video, StreamPos_Last, Video_Duration, Duration_Temp, true);
- if (!FrameRate_Temp.empty() && FrameRate_Temp!=Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate))
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, FrameRate_Temp, true);
- if (!FrameRate_Mode_Temp.empty() && FrameRate_Mode_Temp!=Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate_Mode))
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Mode, FrameRate_Mode_Temp, true);
-
- //Special case for TimeCode and DV multiple audio
- if (!Delay_Temp.empty() && Delay_Temp!=Retrieve(Stream_Video, StreamPos_Last, Video_Delay))
- {
- for (size_t Pos=0; Pos<Count_Get(Stream_Audio); Pos++)
- if (Retrieve(Stream_Audio, Pos, "MuxingMode_MoreInfo")==__T("Muxed in Video #1"))
- {
- //Fill(Stream_Audio, Pos, Audio_Delay_Original, Retrieve(Stream_Audio, Pos, Audio_Delay));
- Fill(Stream_Audio, Pos, Audio_Delay, Retrieve(Stream_Video, StreamPos_Last, Video_Delay), true);
- Fill(Stream_Audio, Pos, Audio_Delay_Settings, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Settings), true);
- Fill(Stream_Audio, Pos, Audio_Delay_Source, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Source), true);
- Fill(Stream_Audio, Pos, Audio_Delay_Original, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Original), true);
- Fill(Stream_Audio, Pos, Audio_Delay_Original_Settings, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Original_Settings), true);
- Fill(Stream_Audio, Pos, Audio_Delay_Original_Source, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Original_Source), true);
- }
- for (size_t Pos=0; Pos<Count_Get(Stream_Text); Pos++)
- if (Retrieve(Stream_Text, Pos, "MuxingMode_MoreInfo")==__T("Muxed in Video #1"))
- {
- //Fill(Stream_Text, Pos, Text_Delay_Original, Retrieve(Stream_Text, Pos, Text_Delay));
- Fill(Stream_Text, Pos, Text_Delay, Retrieve(Stream_Video, StreamPos_Last, Video_Delay), true);
- Fill(Stream_Text, Pos, Text_Delay_Settings, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Settings), true);
- Fill(Stream_Text, Pos, Text_Delay_Source, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Source), true);
- Fill(Stream_Text, Pos, Text_Delay_Original, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Original), true);
- Fill(Stream_Text, Pos, Text_Delay_Original_Settings, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Original_Settings), true);
- Fill(Stream_Text, Pos, Text_Delay_Original_Source, Retrieve(Stream_Video, StreamPos_Last, Video_Delay_Original_Source), true);
- }
- }
- }
-
- //Special case: AAC
- if (StreamKind_Last==Stream_Audio
- && (Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("AAC")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("MPEG Audio")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("Vorbis")))
- Clear(Stream_Audio, StreamPos_Last, Audio_BitDepth); //Resolution is not valid for AAC / MPEG Audio / Vorbis
-
- //Special case: DV with Audio or/and Text in the video stream
- if (StreamKind_Last==Stream_Video && Temp->second.Parsers[0] && (Temp->second.Parsers[0]->Count_Get(Stream_Audio) || Temp->second.Parsers[0]->Count_Get(Stream_Text)))
- {
- //Video and Audio are together
- size_t Audio_Count=Temp->second.Parsers[0]->Count_Get(Stream_Audio);
- for (size_t Audio_Pos=0; Audio_Pos<Audio_Count; Audio_Pos++)
- {
- Fill_Flush();
- Stream_Prepare(Stream_Audio);
- size_t Pos=Count_Get(Stream_Audio)-1;
- Merge(*Temp->second.Parsers[0], Stream_Audio, Audio_Pos, StreamPos_Last);
- Fill(Stream_Audio, Pos, Audio_MuxingMode_MoreInfo, __T("Muxed in Video #")+Ztring().From_Number(Temp->second.StreamPos+1));
- Fill(Stream_Audio, Pos, Audio_Duration, Retrieve(Stream_Video, Temp->second.StreamPos, Video_Duration));
- Fill(Stream_Audio, Pos, Audio_StreamSize_Encoded, 0); //Included in the DV stream size
- Ztring ID=Retrieve(Stream_Audio, Pos, Audio_ID);
- Fill(Stream_Audio, Pos, Audio_ID, Retrieve(Stream_Video, Temp->second.StreamPos, Video_ID)+__T("-")+ID, true);
- Fill(Stream_Audio, Pos, "Source", Retrieve(Stream_Video, Temp->second.StreamPos, "Source"));
- Fill(Stream_Audio, Pos, "Source_Info", Retrieve(Stream_Video, Temp->second.StreamPos, "Source_Info"));
- }
-
- //Video and Text are together
- size_t Text_Count=Temp->second.Parsers[0]->Count_Get(Stream_Text);
- for (size_t Text_Pos=0; Text_Pos<Text_Count; Text_Pos++)
- {
- Fill_Flush();
- Stream_Prepare(Stream_Text);
- size_t Pos=Count_Get(Stream_Text)-1;
- Merge(*Temp->second.Parsers[0], Stream_Text, Text_Pos, StreamPos_Last);
- Fill(Stream_Text, Pos, Text_MuxingMode_MoreInfo, __T("Muxed in Video #")+Ztring().From_Number(Temp->second.StreamPos+1));
- Fill(Stream_Text, Pos, Text_Duration, Retrieve(Stream_Video, Temp->second.StreamPos, Video_Duration));
- Fill(Stream_Text, Pos, Text_StreamSize_Encoded, 0); //Included in the DV stream size
- Ztring ID=Retrieve(Stream_Text, Pos, Text_ID);
- Fill(Stream_Text, Pos, Text_ID, Retrieve(Stream_Video, Temp->second.StreamPos, Video_ID)+__T("-")+ID, true);
- Fill(Stream_Text, Pos, "Source", Retrieve(Stream_Video, Temp->second.StreamPos, "Source"));
- Fill(Stream_Text, Pos, "Source_Info", Retrieve(Stream_Video, Temp->second.StreamPos, "Source_Info"));
- }
-
- StreamKind_Last=Temp->second.StreamKind;
- StreamPos_Last=Temp->second.StreamPos;
- }
- }
- }
-
- //ScanOrder_StoredDisplayedInverted
- // Priorizing https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG10-THE__FIEL__IMAGEDESCRIPTION_EXTENSION__FIELD_FRAME_INFORMATION
- /*
- switch (Temp->second.fiel_detail)
- {
- case 1 : // Separated fields, TFF
- case 6 : // Separated fields, BFF
- Fill(Stream_Video, StreamPos_Last, Video_ScanOrder, "TFF", Unlimited, true, true);
- break;
- case 9 : // Interleaved fields, TFF
- case 14 : // Interleaved fields, BFF
- Fill(Stream_Video, StreamPos_Last, Video_ScanOrder, "BFF", Unlimited, true, true);
- break;
- default : ;
- }
- */
-
- //External file name specific
- if (Temp->second.MI && Temp->second.MI->Info)
- {
- //Preparing
- StreamKind_Last=Temp->second.StreamKind;
- StreamPos_Last=Temp->second.StreamPos;
-
- //Hacks - Before
- Ztring CodecID=Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_CodecID));
- Ztring Source=Retrieve(StreamKind_Last, StreamPos_Last, "Source");
- Ztring Source_Info=Retrieve(StreamKind_Last, StreamPos_Last, "Source_Info");
-
- Merge(*Temp->second.MI->Info, Temp->second.StreamKind, 0, Temp->second.StreamPos);
- File_Size_Total+=Ztring(Temp->second.MI->Get(Stream_General, 0, General_FileSize)).To_int64u();
-
- //Hacks - After
- if (CodecID!=Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_CodecID)))
- {
- if (!CodecID.empty())
- CodecID+=__T(" / ");
- CodecID+=Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_CodecID));
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_CodecID), CodecID, true);
- }
- if (Source!=Retrieve(StreamKind_Last, StreamPos_Last, "Source"))
- {
- Ztring Source_Original=Retrieve(StreamKind_Last, StreamPos_Last, "Source");
- Ztring Source_Original_Info=Retrieve(StreamKind_Last, StreamPos_Last, "Source_Info");
- Fill(StreamKind_Last, StreamPos_Last, "Source", Source, true);
- Fill(StreamKind_Last, StreamPos_Last, "Source_Info", Source_Info, true);
- Fill(StreamKind_Last, StreamPos_Last, "Source_Original", Source_Original, true);
- Fill(StreamKind_Last, StreamPos_Last, "Source_Original_Info", Source_Original_Info, true);
- }
- if (StreamKind_Last==Stream_Audio
- && Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)!=__T("PCM")
- && !Retrieve(Stream_Audio, StreamPos_Last, Audio_Channel_s__Original).empty())
- {
- Clear(Stream_Audio, StreamPos_Last, Audio_Channel_s__Original);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, 6, 10, true); //The PCM channel count is fake
- }
-
- //Muxing Mode
- Fill(StreamKind_Last, StreamPos_Last, "MuxingMode", Temp->second.MI->Get(Stream_General, 0, General_Format));
-
- //Special case: DV with Audio or/and Text in the video stream
- if (StreamKind_Last==Stream_Video && Temp->second.MI->Info && (Temp->second.MI->Info->Count_Get(Stream_Audio) || Temp->second.MI->Info->Count_Get(Stream_Text)))
- {
- //Video and Audio are together
- size_t Audio_Count=Temp->second.MI->Info->Count_Get(Stream_Audio);
- for (size_t Audio_Pos=0; Audio_Pos<Audio_Count; Audio_Pos++)
- {
- Fill_Flush();
- Stream_Prepare(Stream_Audio);
- size_t Pos=Count_Get(Stream_Audio)-1;
- Merge(*Temp->second.MI->Info, Stream_Audio, Audio_Pos, StreamPos_Last);
- if (Retrieve(Stream_Audio, Pos, Audio_MuxingMode).empty())
- Fill(Stream_Audio, Pos, Audio_MuxingMode, Retrieve(Stream_Video, Temp->second.StreamPos, Video_Format), true);
- else
- Fill(Stream_Audio, Pos, Audio_MuxingMode, Retrieve(Stream_Video, Temp->second.StreamPos, Video_Format)+__T(" / ")+Retrieve(Stream_Audio, Pos, Audio_MuxingMode), true);
- Fill(Stream_Audio, Pos, Audio_MuxingMode_MoreInfo, __T("Muxed in Video #")+Ztring().From_Number(Temp->second.StreamPos+1));
- Fill(Stream_Audio, Pos, Audio_Duration, Retrieve(Stream_Video, Temp->second.StreamPos, Video_Duration), true);
- Fill(Stream_Audio, Pos, Audio_StreamSize_Encoded, 0); //Included in the DV stream size
- Ztring ID=Retrieve(Stream_Audio, Pos, Audio_ID);
- Fill(Stream_Audio, Pos, Audio_ID, Retrieve(Stream_Video, Temp->second.StreamPos, Video_ID)+__T("-")+ID, true);
- Fill(Stream_Audio, Pos, "Source", Retrieve(Stream_Video, Temp->second.StreamPos, "Source"));
- Fill(Stream_Audio, Pos, "Source_Info", Retrieve(Stream_Video, Temp->second.StreamPos, "Source_Info"));
- }
-
- //Video and Text are together
- size_t Text_Count=Temp->second.MI->Info->Count_Get(Stream_Text);
- for (size_t Text_Pos=0; Text_Pos<Text_Count; Text_Pos++)
- {
- Fill_Flush();
- Stream_Prepare(Stream_Text);
- size_t Pos=Count_Get(Stream_Text)-1;
- Merge(*Temp->second.MI->Info, Stream_Text, Text_Pos, StreamPos_Last);
- if (Retrieve(Stream_Text, Pos, Text_MuxingMode).empty())
- Fill(Stream_Text, Pos, Text_MuxingMode, Retrieve(Stream_Video, Temp->second.StreamPos, Video_Format), true);
- else
- Fill(Stream_Text, Pos, Text_MuxingMode, Retrieve(Stream_Video, Temp->second.StreamPos, Video_Format)+__T(" / ")+Retrieve(Stream_Text, Pos, Text_MuxingMode), true);
- Fill(Stream_Text, Pos, Text_MuxingMode_MoreInfo, __T("Muxed in Video #")+Ztring().From_Number(Temp->second.StreamPos+1));
- Fill(Stream_Text, Pos, Text_Duration, Retrieve(Stream_Video, Temp->second.StreamPos, Video_Duration));
- Fill(Stream_Text, Pos, Text_StreamSize_Encoded, 0); //Included in the DV stream size
- Ztring ID=Retrieve(Stream_Text, Pos, Text_ID);
- Fill(Stream_Text, Pos, Text_ID, Retrieve(Stream_Video, Temp->second.StreamPos, Video_ID)+__T("-")+ID, true);
- Fill(Stream_Text, Pos, "Source", Retrieve(Stream_Video, Temp->second.StreamPos, "Source"));
- Fill(Stream_Text, Pos, "Source_Info", Retrieve(Stream_Video, Temp->second.StreamPos, "Source_Info"));
- }
- }
- }
-
- //Aperture size
- if (Temp->second.CleanAperture_Width)
- {
- Ztring CleanAperture_Width=Ztring().From_Number(Temp->second.CleanAperture_Width, 0);
- Ztring CleanAperture_Height=Ztring().From_Number(Temp->second.CleanAperture_Height, 0);
- if (CleanAperture_Width!=Retrieve(Stream_Video, StreamPos_Last, Video_Width))
- {
- Fill(Stream_Video, StreamPos_Last, Video_Width_Original, Retrieve(Stream_Video, StreamPos_Last, Video_Width), true);
- Fill(Stream_Video, StreamPos_Last, Video_Width, Temp->second.CleanAperture_Width, 0, true);
- }
- if (CleanAperture_Height!=Retrieve(Stream_Video, StreamPos_Last, Video_Height))
- {
- Fill(Stream_Video, StreamPos_Last, Video_Height_Original, Retrieve(Stream_Video, StreamPos_Last, Video_Height), true);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Temp->second.CleanAperture_Height, 0, true);
- }
- if (Temp->second.CleanAperture_PixelAspectRatio)
- {
- Clear(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio);
- Clear(Stream_Video, StreamPos_Last, Video_PixelAspectRatio);
- Fill(Stream_Video, StreamPos_Last, Video_PixelAspectRatio, Temp->second.CleanAperture_PixelAspectRatio, 3, true);
- if (Retrieve(Stream_Video, StreamPos_Last, Video_PixelAspectRatio)==Retrieve(Stream_Video, StreamPos_Last, Video_PixelAspectRatio_Original))
- Clear(Stream_Video, StreamPos_Last, Video_PixelAspectRatio_Original);
- if (Retrieve(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio)==Retrieve(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio_Original))
- {
- Clear(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio_Original);
- Clear(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio_Original_String);
- }
- }
- }
-
- //Special case: QuickTime files and Stereo streams, there is a default value in QuickTime player, a QuickTime "standard"?
- if (StreamKind_Last==Stream_Audio
- && Retrieve(Stream_Audio, StreamPos_Last, Audio_Channel_s_)==__T("2")
- && Retrieve(Stream_Audio, StreamPos_Last, Audio_ChannelLayout).empty()
- && Retrieve(Stream_Audio, StreamPos_Last, Audio_ChannelPositions).empty()
- && Retrieve(Stream_General, 0, General_Format_Profile)==__T("QuickTime"))
- {
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, Mpeg4_chan(101));
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelLayout, Mpeg4_chan_Layout(101));
- }
-
- //Bitrate Mode
- if (Retrieve(StreamKind_Last, StreamPos_Last, "BitRate_Mode").empty())
- {
- if (Temp->second.stss.empty() && Temp->second.stss.size()!=Temp->second.stsz_Total.size() && !IsFragmented)
- {
- int64u Size_Min=(int64u)-1, Size_Max=0;
- for (size_t Pos=0; Pos<Temp->second.stsz_Total.size(); Pos++)
- {
- if (Temp->second.stsz_Total[Pos]<Size_Min)
- Size_Min=Temp->second.stsz_Total[Pos];
- if (Temp->second.stsz_Total[Pos]>Size_Max)
- Size_Max=Temp->second.stsz_Total[Pos];
- }
-
- if (Size_Min*(1.005+0.005)<Size_Max)
- Fill(StreamKind_Last, StreamPos_Last, "BitRate_Mode", "VBR");
- else
- Fill(StreamKind_Last, StreamPos_Last, "BitRate_Mode", "CBR");
- }
- else
- {
- //TODO: compute Bit rate mode from stsz and stss (in order to compute per GOP instead of per frame)
- }
- }
-
- ++Temp;
- }
- if (Vendor!=0x00000000 && Vendor!=0xFFFFFFFF)
- {
- Ztring VendorS=Mpeg4_Encoded_Library(Vendor);
- if (!Vendor_Version.empty())
- {
- VendorS+=__T(' ');
- VendorS+=Vendor_Version;
- }
- Fill(Stream_General, 0, General_Encoded_Library, VendorS);
- Fill(Stream_General, 0, General_Encoded_Library_Name, Mpeg4_Encoded_Library(Vendor));
- Fill(Stream_General, 0, General_Encoded_Library_Version, Vendor_Version);
- }
-
- if (File_Size_Total!=File_Size)
- Fill(Stream_General, 0, General_FileSize, File_Size_Total, 10, true);
- if (Count_Get(Stream_Video)==0 && Count_Get(Stream_Image)==0 && Count_Get(Stream_Audio)>0)
- Fill(Stream_General, 0, General_InternetMediaType, "audio/mp4", Unlimited, true, true);
-
- //Parsing reference files
- #ifdef MEDIAINFO_REFERENCES_YES
- for (streams::iterator Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- if (!Stream->second.File_Name.empty())
- {
- if (ReferenceFiles==NULL)
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.FileNames.push_back(Stream->second.File_Name);
- ReferenceFile.StreamKind=Stream->second.StreamKind;
- ReferenceFile.StreamPos=Stream->second.StreamPos;
- ReferenceFile.StreamID=Retrieve(Stream->second.StreamKind, Stream->second.StreamPos, General_ID).To_int64u();
- if (Stream->second.StreamKind==Stream_Video)
- {
- ReferenceFile.FrameRate=Retrieve(Stream_Video, Stream->second.StreamPos, Video_FrameRate).To_float64();
-
- #ifdef MEDIAINFO_IBI_YES
- for (size_t stss_Pos=0; stss_Pos<Stream->second.stss.size(); stss_Pos++)
- {
- int64u Value=Stream->second.stss[stss_Pos];
-
- //Searching the corresponding stco
- std::vector<stream::stsc_struct>::iterator Stsc=Stream->second.stsc.begin();
- int64u SamplePos=0;
- for (; Stsc!=Stream->second.stsc.end(); ++Stsc)
- {
- std::vector<stream::stsc_struct>::iterator Stsc_Next=Stsc; ++Stsc_Next;
- int64u CountOfSamples = ((Stsc_Next == Stream->second.stsc.end() ? ((int64u)Stream->second.stco.size()) : ((int64u)Stsc_Next->FirstChunk)) - (int64u)Stsc->FirstChunk) * (int64u)Stsc->SamplesPerChunk;
- if (Stsc_Next!=Stream->second.stsc.end() && Value>=SamplePos+CountOfSamples)
- SamplePos+=CountOfSamples;
- else
- {
- int64u CountOfChunks=(Value-SamplePos)/Stsc->SamplesPerChunk;
- size_t stco_Pos=(size_t)(Stsc->FirstChunk-1+CountOfChunks); //-1 because first chunk is number 1
- if (stco_Pos<Stream->second.stco.size())
- {
- stream::stts_durations::iterator stts_Duration=Stream->second.stts_Durations.begin()+Stream->second.stts_Durations_Pos;
- ibi::stream::info IbiInfo;
- IbiInfo.StreamOffset=Stream->second.stco[stco_Pos];
- IbiInfo.FrameNumber=Value;
- IbiInfo.Dts=TimeCode_DtsOffset+(stts_Duration->DTS_Begin+(((int64u)stts_Duration->SampleDuration)*(Value-stts_Duration->Pos_Begin)))*1000000000/Stream->second.mdhd_TimeScale;
- ReferenceFile.IbiStream.Add(IbiInfo);
- }
- }
- }
- }
- #endif //MEDIAINFO_IBI_YES
-
- }
- ReferenceFiles->References.push_back(ReferenceFile);
- }
-
- if (ReferenceFiles)
- {
- ReferenceFiles->ParseReferences();
- #if MEDIAINFO_NEXTPACKET
- if (Config->NextPacket_Get() && ReferenceFiles && !ReferenceFiles->References.empty())
- {
- ReferenceFiles_IsParsing=true;
- return;
- }
- #endif //MEDIAINFO_NEXTPACKET
- }
- #endif //MEDIAINFO_REFERENCES_YES
-
- //Commercial names
- Streams_Finish_CommercialNames();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::Streams_Finish_CommercialNames()
-{
- if (Count_Get(Stream_Video)==1)
- {
- Streams_Finish_StreamOnly();
- if (Retrieve(Stream_Video, 0, Video_Format)==__T("DV") && Retrieve(Stream_Video, 0, Video_Format_Commercial)==__T("DVCPRO HD"))
- {
- int32u BitRate=Retrieve(Stream_Video, 0, Video_BitRate).To_int32u();
- int32u BitRate_Max=Retrieve(Stream_Video, 0, Video_BitRate_Maximum).To_int32u();
-
- if (BitRate_Max && BitRate>=BitRate_Max)
- {
- Clear(Stream_Video, 0, Video_BitRate_Maximum);
- Fill(Stream_Video, 0, Video_BitRate, BitRate_Max, 10, true);
- Fill(Stream_Video, 0, Video_BitRate_Mode, "CBR", Unlimited, true, true);
- }
- }
- if (!Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny).empty())
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny));
- Fill(Stream_General, 0, General_Format_Commercial, Retrieve(Stream_General, 0, General_Format)+__T(' ')+Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny));
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)!=__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:0") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("18000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("18000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("18000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "XDCAM EX 18");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "XDCAM EX 18");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)!=__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:0") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("25000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("25000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("25000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "XDCAM EX 25");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "XDCAM EX 25");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)!=__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:0") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("35000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("35000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("35000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "XDCAM EX 35");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "XDCAM EX 35");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)!=__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:2") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("50000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("50000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("50000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "XDCAM HD422");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "XDCAM HD422");
- }
- }
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::Read_Buffer_Unsynched()
-{
- if (!IsSub && MajorBrand==0x6A703220) //"jp2 "
- return Read_Buffer_Unsynched_OneFramePerFile();
-
- if (mdat_Pos.empty())
- {
- IsParsing_mdat=false;
- return;
- }
- mdat_Pos_Temp=&mdat_Pos[0];
- while (mdat_Pos_Temp!=mdat_Pos_Max && mdat_Pos_Temp->Offset<File_GoTo)
- mdat_Pos_Temp++;
- if (mdat_Pos_Temp!=mdat_Pos_Max && mdat_Pos_Temp->Offset>File_GoTo)
- mdat_Pos_Temp--; //Previous frame
- if (mdat_Pos_Temp==mdat_Pos_Max)
- {
- IsParsing_mdat=false;
- return;
- }
- IsParsing_mdat=true;
-
- #if MEDIAINFO_SEEK
- //Searching the ID of the first stream to be demuxed
- std::map<int32u, stream>::iterator Next_Stream=Streams.end();
- #if MEDIAINFO_DEMUX
- size_t Next_Stream_Stco=(size_t)-1;
- #endif //MEDIAINFO_DEMUX
- for (std::map<int32u, stream>::iterator Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- {
- for (size_t Stco_Pos=0; Stco_Pos<Stream->second.stco.size(); Stco_Pos++)
- if (Stream->second.stco[Stco_Pos]==mdat_Pos_Temp->Offset)
- {
- Next_Stream=Stream;
- #if MEDIAINFO_DEMUX
- Next_Stream_Stco=Stco_Pos;
- #endif //MEDIAINFO_DEMUX
- break;
- }
- if (Next_Stream!=Streams.end())
- break;
- }
- #endif //MEDIAINFO_SEEK
-
- for (std::map<int32u, stream>::iterator Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- {
- for (size_t Pos=0; Pos<Stream->second.Parsers.size(); Pos++)
- Stream->second.Parsers[Pos]->Open_Buffer_Unsynch();
-
- #if MEDIAINFO_SEEK && MEDIAINFO_DEMUX
- //Searching the next position for this stream
- int64u StreamOffset=(int64u)-1;
- if (StreamOffset_Jump.empty() || File_GoTo==mdat_Pos[0].Offset)
- StreamOffset=mdat_Pos_Temp->Offset;
- else if (Next_Stream_Stco!=(size_t)-1)
- {
- //Searching the right place for this stream
- int64u StreamOffset_Temp=Next_Stream->second.stco[Next_Stream_Stco];
- std::map<int64u, int64u>::iterator StreamOffset_Jump_Temp;
- for (;;)
- {
- StreamOffset_Jump_Temp=StreamOffset_Jump.find(StreamOffset_Temp);
- if (StreamOffset_Jump_Temp==StreamOffset_Jump.end())
- break;
- if (Stream==Next_Stream)
- StreamOffset_Temp=StreamOffset_Jump_Temp->first;
- else
- {
- ++StreamOffset_Jump_Temp;
- if (StreamOffset_Jump_Temp==StreamOffset_Jump.end())
- break;
- StreamOffset_Temp=StreamOffset_Jump_Temp->second;
- }
-
- if (!Stream->second.stco.empty() && StreamOffset_Temp>=Stream->second.stco[0] && StreamOffset_Temp<=Stream->second.stco[Stream->second.stco.size()-1])
- for (size_t Stco_Pos=0; Stco_Pos<Stream->second.stco.size(); Stco_Pos++)
- if (StreamOffset_Temp==Stream->second.stco[Stco_Pos])
- {
- StreamOffset=Stream->second.stco[Stco_Pos];
- break;
- }
-
- if (StreamOffset!=(int64u)-1)
- break;
- }
- }
-
- if (StreamOffset!=(int64u)-1)
- for (size_t stco_Pos=0; stco_Pos<Stream->second.stco.size(); stco_Pos++)
- if (Stream->second.stco[stco_Pos]>=StreamOffset)
- {
- //Searching the corresponding frame position
- std::vector<stream::stsc_struct>::iterator Stsc=Stream->second.stsc.begin();
- int64u SamplePos=0;
- for (; Stsc!=Stream->second.stsc.end(); ++Stsc)
- {
- std::vector<stream::stsc_struct>::iterator Stsc_Next=Stsc; ++Stsc_Next;
- if (Stsc_Next!=Stream->second.stsc.end() && stco_Pos+1>=Stsc_Next->FirstChunk)
- {
- int64u CountOfSamples = ((int64u)Stsc_Next->FirstChunk - (int64u)Stsc->FirstChunk) * (int64u)Stsc->SamplesPerChunk;
- SamplePos+=CountOfSamples;
- }
- else
- {
- int64u CountOfSamples = ((int64u)stco_Pos + 1 - (int64u)Stsc->FirstChunk) * (int64u)Stsc->SamplesPerChunk;
- SamplePos+=CountOfSamples;
-
- Stream->second.stts_FramePos=SamplePos;
-
- //Searching the corresponding duration block position
- for (stream::stts_durations::iterator Stts_Duration=Stream->second.stts_Durations.begin(); Stts_Duration!=Stream->second.stts_Durations.end(); ++Stts_Duration)
- if (SamplePos>=Stts_Duration->Pos_Begin && SamplePos<Stts_Duration->Pos_End)
- {
- Stream->second.stts_Durations_Pos=Stts_Duration-Stream->second.stts_Durations.begin();
- break;
- }
-
- break;
- }
- }
-
- break;
- }
- #endif //MEDIAINFO_SEEK && MEDIAINFO_DEMUX
- }
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Mpeg4::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- #if defined(MEDIAINFO_REFERENCES_YES)
- if (ReferenceFiles)
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
- #endif //defined(MEDIAINFO_REFERENCES_YES)
- if (!IsSub && MajorBrand==0x6A703220) //"jp2 "
- return Read_Buffer_Seek_OneFramePerFile(Method, Value, ID);
-
- //Parsing
- switch (Method)
- {
- case 0 :
- if (Value==0)
- return Read_Buffer_Seek(3, 0, ID);
-
- if (FirstMoovPos==(int64u)-1)
- return 6; //Internal error
-
- if (Value>=LastMdatPos)
- {
- GoTo(File_Size);
- Open_Buffer_Unsynch();
- return 1;
- }
-
- {
- //Looking for the minimal stream offset, for every video/audio/text stream
- int64u JumpTo=File_Size;
- for (std::map<int32u, stream>::iterator Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- switch (Stream->second.StreamKind)
- {
- case Stream_Video :
- case Stream_Audio :
- case Stream_Text :
- {
- //Searching the corresponding chunk offset
- std::vector<int64u>::iterator Stco=Stream->second.stco.begin();
- if (Value<*Stco)
- return Read_Buffer_Seek(3, 0, ID);
-
- for (; Stco!=Stream->second.stco.end(); ++Stco)
- {
- std::vector<int64u>::iterator Stco_Next=Stco; ++Stco_Next;
- if (Stco_Next!=Stream->second.stco.end() && Value>=*Stco && Value<*Stco_Next)
- {
- if (JumpTo>*Stco)
- JumpTo=*Stco;
- break;
- }
- }
- }
- break;
- default : ;
- }
-
- GoTo(JumpTo);
- Open_Buffer_Unsynch();
- return 1;
- }
- case 1 :
- if (Value==0)
- return Read_Buffer_Seek(3, 0, ID);
-
- if (FirstMoovPos==(int64u)-1)
- return 6; //Internal error
-
- return Read_Buffer_Seek(0, FirstMdatPos+(LastMdatPos-FirstMdatPos)*Value/10000, ID);
- case 2 : //Timestamp
- #if MEDIAINFO_DEMUX
- {
- //Searching time stamp offset due to Time code offset
- for (std::map<int32u, stream>::iterator Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- if (Stream->second.StreamKind==Stream_Video)
- {
- if (Value>TimeCode_DtsOffset) //Removing Time Code offset
- Value-=TimeCode_DtsOffset;
- else
- Value=0; //Sooner
- break;
- }
-
- //Looking for the minimal stream offset, for every video/audio/text stream
- int64u JumpTo=File_Size;
- for (std::map<int32u, stream>::iterator Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- switch (Stream->second.StreamKind)
- {
- case Stream_Video :
- case Stream_Audio :
- case Stream_Text :
- {
- int64u Value2=float64_int64s(((float64)Value)*Stream->second.mdhd_TimeScale/1000000000); //Transformed in mpeg4 ticks (per track)
-
- //Searching the corresponding frame
- for (stream::stts_durations::iterator stts_Duration=Stream->second.stts_Durations.begin(); stts_Duration!=Stream->second.stts_Durations.end(); ++stts_Duration)
- {
- if (Value2>=stts_Duration->DTS_Begin && Value2<stts_Duration->DTS_End)
- {
- int64u FrameNumber=stts_Duration->Pos_Begin+(Value2-stts_Duration->DTS_Begin)/stts_Duration->SampleDuration;
-
- //Searching the I-Frame
- if (!Stream->second.stss.empty())
- {
- for (size_t Pos=0; Pos<Stream->second.stss.size(); Pos++)
- if (FrameNumber<=Stream->second.stss[Pos])
- {
- if (Pos && FrameNumber<Stream->second.stss[Pos])
- FrameNumber=Stream->second.stss[Pos-1];
- break;
- }
- }
-
- //Searching the corresponding stco
- std::vector<stream::stsc_struct>::iterator Stsc=Stream->second.stsc.begin();
- int64u SamplePos=0;
- for (; Stsc!=Stream->second.stsc.end(); ++Stsc)
- {
- std::vector<stream::stsc_struct>::iterator Stsc_Next=Stsc; ++Stsc_Next;
- int64u CountOfSamples = ((Stsc_Next == Stream->second.stsc.end() ? (int64u)Stream->second.stco.size() : (int64u)Stsc_Next->FirstChunk) - (int64u)Stsc->FirstChunk) * (int64u)Stsc->SamplesPerChunk;
- if (Stsc_Next!=Stream->second.stsc.end() && FrameNumber>=SamplePos+CountOfSamples)
- SamplePos+=CountOfSamples;
- else
- {
- int64u CountOfChunks=(FrameNumber-SamplePos)/Stsc->SamplesPerChunk;
- size_t stco_Pos=(size_t)(Stsc->FirstChunk-1+CountOfChunks); //-1 because first chunk is number 1
- if (stco_Pos>Stream->second.stco.size())
- return 2; //Invalid FrameNumber
- if (JumpTo>Stream->second.stco[stco_Pos])
- JumpTo=Stream->second.stco[stco_Pos];
- break;
- }
- }
-
- }
- }
-
- }
- break;
- default : ;
- }
-
- GoTo(JumpTo);
- Open_Buffer_Unsynch();
- return 1;
- }
- #else //MEDIAINFO_DEMUX
- return (size_t)-1; //Not supported
- #endif //MEDIAINFO_DEMUX
- case 3 :
- //FrameNumber
- #if MEDIAINFO_DEMUX
- {
- //Looking for video stream
- std::map<int32u, stream>::iterator Stream;
- for (Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- if (Stream->second.StreamKind==Stream_Video)
- break;
- if (Stream==Streams.end())
- for (Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- if (Stream->second.StreamKind==Stream_Audio)
- break;
- if (Stream==Streams.end())
- for (Stream=Streams.begin(); Stream!=Streams.end(); ++Stream)
- if (Stream->second.StreamKind==Stream_Text)
- break;
- if (Stream==Streams.end())
- return 0; //Not supported
-
- //Searching the I-Frame
- if (!Stream->second.stss.empty())
- {
- for (size_t Pos=0; Pos<Stream->second.stss.size(); Pos++)
- if (Value<=Stream->second.stss[Pos])
- {
- if (Pos && Value<Stream->second.stss[Pos])
- Value=Stream->second.stss[Pos-1];
- break;
- }
- }
-
- //Searching the corresponding stco
- std::vector<stream::stsc_struct>::iterator Stsc=Stream->second.stsc.begin();
- int64u SamplePos=0;
- for (; Stsc!=Stream->second.stsc.end(); ++Stsc)
- {
- std::vector<stream::stsc_struct>::iterator Stsc_Next=Stsc; ++Stsc_Next;
- int64u CountOfSamples = ((Stsc_Next == Stream->second.stsc.end() ? ((int64u)Stream->second.stco.size()) : ((int64u)Stsc_Next->FirstChunk)) - (int64u)Stsc->FirstChunk) * (int64u)Stsc->SamplesPerChunk;
- if (Stsc_Next!=Stream->second.stsc.end() && Value>=SamplePos+CountOfSamples)
- SamplePos+=CountOfSamples;
- else
- {
- int64u CountOfChunks=(Value-SamplePos)/Stsc->SamplesPerChunk;
- size_t stco_Pos=(size_t)(Stsc->FirstChunk-1+CountOfChunks); //-1 because first chunk is number 1
- if (stco_Pos>Stream->second.stco.size())
- return 2; //Invalid value
- int64u Offset=Stream->second.stco[stco_Pos];
-
- //Seeking back to audio/text frames before this video frame
- if (!StreamOffset_Jump.empty())
- {
- if (stco_Pos==0) //The first Stco is considered as the last byte of previous stram
- {
- if (!mdat_Pos.empty())
- Offset=mdat_Pos[0].Offset;
- }
- else
- {
- std::map<int64u, int64u>::iterator StreamOffset_Jump_Temp=StreamOffset_Jump.find(Stream->second.stco[stco_Pos]);
- if (StreamOffset_Jump_Temp!=StreamOffset_Jump.end())
- Offset=StreamOffset_Jump_Temp->second;
- }
- }
- else
- {
- //TODO
- }
-
- GoTo(Offset);
- Open_Buffer_Unsynch();
- return 1;
- }
- }
-
- return 2; //Invalid value
- }
- #else //MEDIAINFO_DEMUX
- return (size_t)-1; //Not supported
- #endif //MEDIAINFO_DEMUX
- default : return 0;
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::Read_Buffer_Init()
-{
- if (MediaInfoLib::Config.ParseSpeed_Get()==1.00)
- FrameCount_MaxPerStream=(int32u)-1;
- else if (MediaInfoLib::Config.ParseSpeed_Get()<=0.3)
- FrameCount_MaxPerStream=128;
- else
- FrameCount_MaxPerStream=512;
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mpeg4::Header_Begin()
-{
- #if MEDIAINFO_DEMUX
- //Handling of multiple frames in one block
- if (IsParsing_mdat && Config->Demux_Unpacketize_Get())
- {
- stream &Stream_Temp=Streams[(int32u)Element_Code];
- if (Stream_Temp.Demux_EventWasSent)
- {
- Open_Buffer_Continue(Stream_Temp.Parsers[0], Buffer+Buffer_Offset, 0);
- if (Config->Demux_EventWasSent)
- return false;
- Stream_Temp.Demux_EventWasSent=false;
- }
- }
- #endif //MEDIAINFO_DEMUX
-
- if (IsParsing_mdat && Element_Level==0)
- Element_Begin0();
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::Header_Parse()
-{
- //mdat
- if (IsParsing_mdat)
- {
- //Positionning
- if (mdat_Pos_Temp==mdat_Pos_Max || File_Offset+Buffer_Offset<mdat_Pos_Temp->Offset)
- {
- Header_Fill_Code(0, "(Junk)");
- int64u Size=mdat_Pos_Temp==mdat_Pos_Max?Element_TotalSize_Get():(mdat_Pos_Temp->Offset-(File_Offset+Buffer_Offset));
- if (Size>1 && Size>=Buffer_MaximumSize/2)
- Size=Buffer_MaximumSize;
- if (Size==Element_TotalSize_Get())
- IsParsing_mdat=false;
- Header_Fill_Size(Size);
- return;
- }
-
- //Filling
- Header_Fill_Code2(mdat_Pos_Temp->StreamID, Ztring::ToZtring(mdat_Pos_Temp->StreamID));
- Header_Fill_Size(mdat_Pos_Temp->Size);
- if (Buffer_Offset+mdat_Pos_Temp->Size<=Buffer_Size) //Only if we will not need it later (in case of partial data, this function will be called again for the same chunk)
- {
- mdat_Pos_Temp++;
- while (mdat_Pos_Temp!=mdat_Pos_Max)
- {
- if (mdat_Pos_NormalParsing && !Streams[mdat_Pos_Temp->StreamID].IsPriorityStream)
- break;
- if (!mdat_Pos_NormalParsing && Streams[mdat_Pos_Temp->StreamID].IsPriorityStream)
- break;
- mdat_Pos_Temp++;
- }
- }
- else
- Element_WaitForMoreData();
-
- //Hints
- if (File_Buffer_Size_Hint_Pointer && mdat_Pos_Temp!=mdat_Pos_Max && mdat_Pos_Temp->Offset+mdat_Pos_Temp->Size>File_Offset+Buffer_Size && mdat_Pos_Temp->Offset<File_Offset+Buffer_Size+128*1024)
- {
- size_t Buffer_Size_Target=(size_t)(mdat_Pos_Temp->Offset+mdat_Pos_Temp->Size-(File_Offset+Buffer_Size));
- if (Buffer_Size_Target<128*1024)
- Buffer_Size_Target=128*1024;
- (*File_Buffer_Size_Hint_Pointer)=Buffer_Size_Target;
- }
-
- return;
- }
-
- //Parsing
- int64u Size;
- int32u Size_32, Name;
- if (Element_Size==2)
- {
- int16u Size_16;
- Peek_B2(Size_16);
- if (!Size_16)
- {
- Skip_B2( "Size");
-
- //Filling
- Header_Fill_Code(0, "Junk");
- Header_Fill_Size(2);
- return;
- }
- }
- Get_B4 (Size_32, "Size");
- if (Size_32==0 && (Element_Size==4 || Element_Size==8))
- {
- //Filling
- Header_Fill_Code(0, "Junk");
- Header_Fill_Size(4);
- return;
- }
- Size=Size_32;
- Get_C4 (Name, "Name");
- if (Name==0x33647666) //3dvf
- Name=0x6D6F6F76; //moov
- if (Name==0x61766964) //avid
- Name=0x6D646174; //mdat
-
- if (Size<8)
- {
- //Special case: until the end of the atom
- if (Size==0)
- {
- Size=Config->File_Current_Size-(File_Offset+Buffer_Offset);
- if (Status[IsAccepted] && Element_Level==2 && Name==0x00000000) //First real level (Level 1 is atom, level 2 is header block)
- {
- Element_Offset=0;
- Name=Elements::mdat;
- }
- }
- //Special case: Big files, size is 64-bit
- else if (Size==1)
- {
- //Reading Extended size
- Get_B8 (Size, "Size (Extended)");
- }
- //Not in specs!
- else
- {
- Size=Config->File_Current_Size-(File_Offset+Buffer_Offset);
- }
- }
-
- //Specific case: file begin with "free" atom
- if (!Status[IsAccepted]
- && (Name==Elements::free
- || Name==Elements::skip
- || Name==Elements::wide))
- {
- Accept("MPEG-4");
- Fill(Stream_General, 0, General_Format, "QuickTime");
- }
-
- //Filling
- Header_Fill_Code(Name, Ztring().From_CC4(Name));
- Header_Fill_Size(Size);
-
- if (Name==0x6D6F6F76 && Buffer_Offset+Size>Buffer_Size-Buffer_Offset) //moov
- {
- File_Buffer_Size_Hint_Pointer=Config->File_Buffer_Size_Hint_Pointer_Get();
-
- //Hints
- if (File_Buffer_Size_Hint_Pointer && Size>128*1024)
- {
- size_t Buffer_Size_Target=(size_t)(Buffer_Offset+Size-(Buffer_Size-Buffer_Offset));
- if (Buffer_Size_Target<128*1024)
- Buffer_Size_Target=128*1024;
- (*File_Buffer_Size_Hint_Pointer)=Buffer_Size_Target;
- }
- }
-}
-
-//---------------------------------------------------------------------------
-struct Mpeg4_muxing
-{
- int64u MinimalOffset;
- int64u MaximalOffset;
-
- Mpeg4_muxing()
- {
- MinimalOffset=(int64u)-1;
- MaximalOffset=0;
- }
-};
-bool File_Mpeg4::BookMark_Needed()
-{
- #if MEDIAINFO_MD5
- if (!mdat_MustParse && !mdat_Pos_NormalParsing && Config->File_Md5_Get() && FirstMdatPos<FirstMoovPos)
- {
- Element_Show();
- while (Element_Level>0)
- Element_End0();
- mdat_Pos_NormalParsing=true;
- GoTo(0);
- IsSecondPass=true;
- return false;
- }
- #endif //MEDIAINFO_MD5
-
- if (!mdat_MustParse)
- return false;
-
- //Handling of some wrong stsz and stsc atoms (ADPCM)
- if (!IsSecondPass)
- for (std::map<int32u, stream>::iterator Temp=Streams.begin(); Temp!=Streams.end(); ++Temp)
- if (Temp->second.StreamKind==Stream_Audio
- && (Retrieve(Stream_Audio, Temp->second.StreamPos, Audio_CodecID)==__T("ima4")
- || Retrieve(Stream_Audio, Temp->second.StreamPos, Audio_CodecID)==__T("11")))
- {
- Temp->second.stsz_StreamSize/=16;
- Temp->second.stsz_StreamSize*=17;
- float32 BitRate_Nominal=Retrieve(Stream_Audio, Temp->second.StreamPos, Audio_BitRate_Nominal).To_float32();
- if (BitRate_Nominal)
- {
- BitRate_Nominal/=16;
- BitRate_Nominal*=17;
- Fill(Stream_Audio, Temp->second.StreamPos, Audio_BitRate_Nominal, BitRate_Nominal, 0, true);
- }
- int64u Channels=Retrieve(Stream_Audio, Temp->second.StreamPos, Audio_Channel_s_).To_int64u();
- if (Channels!=2)
- {
- Temp->second.stsz_StreamSize/=2;
- Temp->second.stsz_StreamSize*=Channels;
- }
- for (size_t Pos=0; Pos<Temp->second.stsc.size(); Pos++)
- {
- Temp->second.stsc[Pos].SamplesPerChunk/=16;
- Temp->second.stsc[Pos].SamplesPerChunk*=17;
- if (Channels!=2)
- {
- Temp->second.stsc[Pos].SamplesPerChunk/=2;
- Temp->second.stsc[Pos].SamplesPerChunk*=(int32u)Channels;
- }
- }
- }
-
- //In case of second pass
- if (mdat_Pos.empty())
- {
- #if MEDIAINFO_DEMUX
- std::map<int32u, struct Mpeg4_muxing> Muxing; //key is StreamID
- #endif //MEDIAINFO_DEMUX
- size_t stco_Count=(size_t)-1;
- bool stco_IsDifferent=false;
-
- //For each stream
- for (std::map<int32u, stream>::iterator Temp=Streams.begin(); Temp!=Streams.end(); ++Temp)
- if (!Temp->second.Parsers.empty())
- {
- if (!Temp->second.File_Name.empty())
- {
- #if MEDIAINFO_DEMUX
- if (Config_Demux && Config->File_Demux_Interleave_Get()
- && Temp->second.StreamKind!=Stream_Other) // e.g. a time code, we can live without demuxing the time code
- {
- //Remark: supporting both embedded and referenced streams is currently not supported
- mdat_Pos.clear();
- return false;
- }
- else
- #endif // MEDIAINFO_DEMUX
- continue;
- }
-
- if (!Temp->second.stsz.empty() || Temp->second.stsz_Sample_Size)
- {
- if (!stco_IsDifferent)
- {
- if (stco_Count==(size_t)-1)
- stco_Count=Temp->second.stco.size();
- else if (stco_Count!=Temp->second.stco.size())
- stco_IsDifferent=true;
- }
-
- size_t Chunk_FrameCount=0;
- int32u Chunk_Number=1;
- int32u Sample_ByteSize=0;
- if (Temp->second.StreamKind==Stream_Audio)
- Sample_ByteSize=Retrieve(Stream_Audio, Temp->second.StreamPos, Audio_BitDepth).To_int32u()*Retrieve(Stream_Audio, Temp->second.StreamPos, Audio_Channel_s_).To_int32u()/8;
-
- #if MEDIAINFO_DEMUX
- stream::stts_durations Temp_stts_Durations;
- #endif //MEDIAINFO_DEMUX
- if (!Temp->second.stco.empty() && !Temp->second.stsc.empty())
- {
- int64u* stco_Current = &Temp->second.stco[0];
- int64u* stco_Max = stco_Current + Temp->second.stco.size();
- int64u* stsz_Current = Temp->second.stsz.empty()?NULL:&Temp->second.stsz[0];
- int64u* stsz_Max = stsz_Current + Temp->second.stsz.size();
- stream::stsc_struct* stsc_Current = &Temp->second.stsc[0];
- stream::stsc_struct* stsc_Max = stsc_Current + Temp->second.stsc.size();
- #if MEDIAINFO_DEMUX
- int64u MinimalOffset = (int64u)-1;
- int64u MaximalOffset = 0;
- #endif //MEDIAINFO_DEMUX
- for (; stco_Current<stco_Max; ++stco_Current)
- {
- #if MEDIAINFO_DEMUX
- if (MinimalOffset>*stco_Current)
- MinimalOffset = *stco_Current;
- if (MaximalOffset < *stco_Current)
- MaximalOffset = *stco_Current;
- #endif //MEDIAINFO_DEMUX
-
- while (stsc_Current + 1 < stsc_Max && Chunk_Number >= (stsc_Current + 1)->FirstChunk)
- stsc_Current++;
-
- if (Temp->second.stsz_Sample_Size == 0 && stsc_Current && !Temp->second.stsz.empty())
- {
- //Each sample has its own size
- int64u Chunk_Offset = 0;
- for (size_t Pos = 0; Pos < stsc_Current->SamplesPerChunk; Pos++)
- if (*stsz_Current)
- {
- mdat_Pos_Type mdat_Pos_Temp2;
- mdat_Pos_Temp2.Offset = *stco_Current + Chunk_Offset;
- mdat_Pos_Temp2.StreamID = Temp->first;
- mdat_Pos_Temp2.Size = *stsz_Current;
- mdat_Pos.push_back(mdat_Pos_Temp2);
- Chunk_Offset += *stsz_Current;
- stsz_Current++;
- if (stsz_Current >= stsz_Max)
- break;
- }
- if (stsz_Current >= stsz_Max)
- break;
- }
- else if (Temp->second.IsPcm && (!Sample_ByteSize || Temp->second.stsz_Sample_Size <= Sample_ByteSize) && stsc_Current && stsc_Current->SamplesPerChunk*Temp->second.stsz_Sample_Size*Temp->second.stsz_Sample_Multiplier < 0x1000000)
- {
- //Same size per sample, but granularity is too small
- mdat_Pos_Type mdat_Pos_Temp2;
- mdat_Pos_Temp2.Offset = *stco_Current;
- mdat_Pos_Temp2.StreamID = Temp->first;
- mdat_Pos_Temp2.Size = stsc_Current->SamplesPerChunk*Temp->second.stsz_Sample_Size*Temp->second.stsz_Sample_Multiplier;
- mdat_Pos.push_back(mdat_Pos_Temp2);
-
- #if MEDIAINFO_DEMUX
- if (Temp_stts_Durations.empty() || stsc_Current->SamplesPerChunk != Temp_stts_Durations[Temp_stts_Durations.size() - 1].SampleDuration)
- {
- stream::stts_duration stts_Duration;
- stts_Duration.Pos_Begin = Temp_stts_Durations.empty() ? 0 : Temp_stts_Durations[Temp_stts_Durations.size() - 1].Pos_End;
- stts_Duration.Pos_End = stts_Duration.Pos_Begin + 1;
- stts_Duration.SampleDuration = stsc_Current->SamplesPerChunk;
- stts_Duration.DTS_Begin = Temp_stts_Durations.empty() ? 0 : Temp_stts_Durations[Temp_stts_Durations.size() - 1].DTS_End;
- stts_Duration.DTS_End = stts_Duration.DTS_Begin + stts_Duration.SampleDuration;
- Temp_stts_Durations.push_back(stts_Duration);
- //Temp->second.stsc[stsc_Pos].SamplesPerChunk=1;
- }
- else
- {
- Temp_stts_Durations[Temp_stts_Durations.size() - 1].Pos_End++;
- Temp_stts_Durations[Temp_stts_Durations.size() - 1].DTS_End += Temp_stts_Durations[Temp_stts_Durations.size() - 1].SampleDuration;
- }
- #endif //MEDIAINFO_DEMUX
- }
- else if (stsc_Current < stsc_Max)
- {
- //Same size per sample
- int64u Chunk_Offset = 0;
- for (size_t Pos = 0; Pos < stsc_Current->SamplesPerChunk; Pos++)
- if (Temp->second.stsz_Sample_Size*Temp->second.stsz_Sample_Multiplier)
- {
- int64u Size = Temp->second.stsz_Sample_Size*Temp->second.stsz_Sample_Multiplier;
- mdat_Pos_Type mdat_Pos_Temp2;
- mdat_Pos_Temp2.Offset = *stco_Current + Chunk_Offset;
- mdat_Pos_Temp2.StreamID = Temp->first;
- mdat_Pos_Temp2.Size = Size;
- mdat_Pos.push_back(mdat_Pos_Temp2);
- Chunk_Offset += Size;
- Chunk_FrameCount++;
- }
- if (Chunk_FrameCount >= FrameCount_MaxPerStream)
- break;
- }
-
- Chunk_Number++;
- }
- #if MEDIAINFO_DEMUX
- Muxing[Temp->first].MinimalOffset=MinimalOffset;
- Muxing[Temp->first].MaximalOffset=MaximalOffset;
- #endif //MEDIAINFO_DEMUX
- for (size_t Pos=0; Pos<Temp->second.Parsers.size(); Pos++)
- Temp->second.Parsers[Pos]->Stream_BitRateFromContainer=Temp->second.stsz_StreamSize*8/(((float64)Temp->second.stts_Duration)/Temp->second.mdhd_TimeScale);
- #if MEDIAINFO_DEMUX
- if (FrameCount_MaxPerStream==(int32u)-1 && !Temp_stts_Durations.empty())
- {
- Temp->second.stts_Durations=Temp_stts_Durations;
- for (stsc_Current=&Temp->second.stsc[0]; stsc_Current<stsc_Max; ++stsc_Current)
- stsc_Current->SamplesPerChunk=1;
- Temp->second.stts_FrameCount=Temp_stts_Durations[Temp_stts_Durations.size()-1].Pos_End;
- }
- #endif //MEDIAINFO_DEMUX
- }
- }
-
- //special cases
- #if MEDIAINFO_DEMUX
- if (Temp->second.stsz.empty() && Temp->second.StreamKind==Stream_Video && Retrieve(Stream_Video, Temp->second.StreamPos, Video_CodecID)==__T("AV1x"))
- {
- //Found unknown data before the raw content
- int64u Width=Retrieve(Stream_Video, Temp->second.StreamPos, Video_Width).To_int64u();
- int64u Height=Retrieve(Stream_Video, Temp->second.StreamPos, Video_Height).To_int64u();
- if (Width && Height && Temp->second.stsz_Sample_Size>(Width*Height*2))
- Temp->second.Demux_Offset=Temp->second.stsz_Sample_Size-(Width*Height*2); // YUV 4:2:2 8 bit = 2 bytes per pixel
- }
- #endif //MEDIAINFO_DEMUX
- }
- std::sort(mdat_Pos.begin(), mdat_Pos.end(), &mdat_pos_sort);
- mdat_Pos_Temp=mdat_Pos.empty()?NULL:&mdat_Pos[0];
- mdat_Pos_Max=mdat_Pos_Temp+mdat_Pos.size();
-
- #if MEDIAINFO_DEMUX
- if (!stco_IsDifferent && Muxing.size()==2)
- {
- std::map<int32u, struct Mpeg4_muxing>::iterator Muxing_1=Muxing.begin();
- std::map<int32u, struct Mpeg4_muxing>::iterator Muxing_2=Muxing.begin(); ++Muxing_2;
- if (Muxing_1->second.MaximalOffset>Muxing_2->second.MinimalOffset)
- swap(Muxing_1, Muxing_2);
- if (Muxing_1->second.MaximalOffset<=Muxing_2->second.MinimalOffset)
- {
- for (size_t stco_Pos=1; stco_Pos<stco_Count; stco_Pos++)
- {
- StreamOffset_Jump[Streams[Muxing_1->first].stco[stco_Pos]]=Streams[Muxing_2->first].stco[stco_Pos-1];
- StreamOffset_Jump[Streams[Muxing_2->first].stco[stco_Pos]]=Streams[Muxing_1->first].stco[stco_Pos];
- }
- StreamOffset_Jump[Streams[Muxing_2->first].stco[0]]=Streams[Muxing_2->first].stco[stco_Count-1];
- }
- }
- #endif //MEDIAINFO_DEMUX
- }
- if (mdat_Pos.empty())
- return false;
-
- IsParsing_mdat=false;
- if (!mdat_Pos_ToParseInPriority_StreamIDs.empty())
- {
- //Hanlding StreamIDs to parse in priority (currently, only the first block of each stream is parsed in priority)
- if (!Streams[mdat_Pos_ToParseInPriority_StreamIDs[0]].stco.empty())
- {
- mdat_Pos_Type* Temp=&mdat_Pos[0];
- int64u stco_ToFind=Streams[mdat_Pos_ToParseInPriority_StreamIDs[0]].stco[0];
- while (Temp<mdat_Pos_Max && Temp->Offset!=stco_ToFind)
- Temp++;
- if (Temp<mdat_Pos_Max && Temp->Offset<File_Size) //Skipping data not in a truncated file
- {
- Element_Show();
- while (Element_Level>0)
- Element_End0();
- Element_Begin1("Priority streams");
-
- mdat_Pos_Temp=Temp;
- GoTo(Temp->Offset);
- IsParsing_mdat=true;
- }
- }
- mdat_Pos_ToParseInPriority_StreamIDs.erase(mdat_Pos_ToParseInPriority_StreamIDs.begin());
- }
-
- if (File_GoTo==(int64u)-1 && !mdat_Pos_NormalParsing && !mdat_Pos.empty() && mdat_Pos.begin()->Offset<File_Size) //Skipping data not in a truncated file
- {
- Element_Show();
- while (Element_Level>0)
- Element_End0();
- Element_Begin1("Second pass");
-
- mdat_Pos_Temp=&mdat_Pos[0];
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get())
- {
- GoTo(0);
- Md5_ParseUpTo=mdat_Pos_Temp->Offset;
- }
- else
- #endif //MEDIAINFO_MD5
- GoTo(mdat_Pos_Temp->Offset);
- IsParsing_mdat=true;
- mdat_Pos_NormalParsing=true;
- }
-
- IsSecondPass=true;
- return false; //We do not want to use the bookmark feature, only detect the end of the file
-}
-
-//---------------------------------------------------------------------------
-//Get language string from 2CC
-Ztring File_Mpeg4::Language_Get(int16u Language)
-{
- if (Language==0x7FFF || Language==0xFFFF)
- return Ztring();
-
- if (Language<0x100)
- return Mpeg4_Language_Apple(Language);
-
- Ztring ToReturn;
- ToReturn.append(1, (Char)((Language>>10&0x1F)+0x60));
- ToReturn.append(1, (Char)((Language>> 5&0x1F)+0x60));
- ToReturn.append(1, (Char)((Language>> 0&0x1F)+0x60));
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-//Get Metadata definition from 4CC
-File_Mpeg4::method File_Mpeg4::Metadata_Get(std::string &Parameter, int64u Meta)
-{
- File_Mpeg4::method Method;
- switch (Meta)
- {
- //http://atomicparsley.sourceforge.net/mpeg-4files.html
- //http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/QuickTime.html#ItemList
- case Elements::moov_meta___alb : Parameter="Album"; Method=Method_String; break;
- case Elements::moov_meta___ard : Parameter="Director"; Method=Method_String; break;
- case Elements::moov_meta___arg : Parameter="Arranger"; Method=Method_String; break;
- case Elements::moov_meta___ART : Parameter="Performer"; Method=Method_String; break;
- case Elements::moov_meta___aut : Parameter="Performer"; Method=Method_String; break;
- case Elements::moov_meta___con : Parameter="Conductor"; Method=Method_String; break;
- case Elements::moov_meta___cmt : Parameter="Comment"; Method=Method_String; break;
- case Elements::moov_meta___cpy : Parameter="Copyright"; Method=Method_String; break;
- case Elements::moov_meta___day : Parameter="Recorded_Date"; Method=Method_String; break;
- case Elements::moov_meta___des : Parameter="Title/More"; Method=Method_String; break;
- case Elements::moov_meta___dir : Parameter="Director"; Method=Method_String; break;
- case Elements::moov_meta___dis : Parameter="TermsOfUse"; Method=Method_String; break;
- case Elements::moov_meta___edl : Parameter="Tagged_Date"; Method=Method_String; break;
- case Elements::moov_meta___enc : Parameter="Encoded_Application"; Method=Method_String; break;
- case Elements::moov_meta___fmt : Parameter="Origin"; Method=Method_String; break;
- case Elements::moov_meta___gen : Parameter="Genre"; Method=Method_String; break;
- case Elements::moov_meta___grp : Parameter="Grouping"; Method=Method_String; break;
- case Elements::moov_meta___hos : Parameter="HostComputer"; Method=Method_String; break;
- case Elements::moov_meta___inf : Parameter="Title/More"; Method=Method_String; break;
- case Elements::moov_meta___key : Parameter="Keywords"; Method=Method_String; break;
- case Elements::moov_meta___lyr : Parameter="Lyrics"; Method=Method_String; break;
- case Elements::moov_meta___mak : Parameter="Make"; Method=Method_String; break;
- case Elements::moov_meta___mod : Parameter="Model"; Method=Method_String; break;
- case Elements::moov_meta___nam : Parameter="Title"; Method=Method_String3; break;
- case Elements::moov_meta___ope : Parameter="Original/Performer"; Method=Method_String; break;
- case Elements::moov_meta___prd : Parameter="Producer"; Method=Method_String; break;
- case Elements::moov_meta___PRD : Parameter="Product"; Method=Method_String; break;
- case Elements::moov_meta___prf : Parameter="Performer"; Method=Method_String; break;
- case Elements::moov_meta___req : Parameter="Comment"; Method=Method_String; break;
- case Elements::moov_meta___sne : Parameter="SoundEngineer"; Method=Method_String; break;
- case Elements::moov_meta___sol : Parameter="Conductor"; Method=Method_String; break;
- case Elements::moov_meta___src : Parameter="DistributedBy"; Method=Method_String; break;
- case Elements::moov_meta___st3 : Parameter="Subtitle"; Method=Method_String; break;
- case Elements::moov_meta___swr : Parameter="Encoded_Application"; Method=Method_String; break;
- case Elements::moov_meta___too : Parameter="Encoded_Application"; Method=Method_String; break;
- case Elements::moov_meta___url : Parameter="Track/Url"; Method=Method_String; break;
- case Elements::moov_meta___wrn : Parameter="Warning"; Method=Method_String; break;
- case Elements::moov_meta___wrt : Parameter="Composer"; Method=Method_String; break;
- case Elements::moov_meta___xpd : Parameter="ExecutiveProducer"; Method=Method_String; break;
- case Elements::moov_meta__aART : Parameter="Album/Performer"; Method=Method_String2; break;
- case Elements::moov_meta__akID : Parameter="AppleStoreAccountType"; Method=Method_Binary; break;
- case Elements::moov_meta__albm : Parameter="Album"; Method=Method_String2; break; //Has a optional track number after the NULL byte
- case Elements::moov_meta__apID : Parameter="AppleStoreAccount"; Method=Method_String; break;
- case Elements::moov_meta__atID : Parameter="AlbumTitleID"; Method=Method_Binary; break;
- case Elements::moov_meta__auth : Parameter="Performer"; Method=Method_String2; break;
- case Elements::moov_meta__catg : Parameter="Category"; Method=Method_String; break;
- case Elements::moov_meta__cnID : Parameter="AppleStoreCatalogID"; Method=Method_String; break;
- case Elements::moov_meta__cpil : Parameter="Compilation"; Method=Method_Binary; break;
- case Elements::moov_meta__cprt : Parameter="Copyright"; Method=Method_String2; break;
- case Elements::moov_meta__desc : Parameter="Description"; Method=Method_String; break;
- case Elements::moov_meta__disk : Parameter="Part"; Method=Method_Binary; break;
- case Elements::moov_meta__dscp : Parameter="Title/More"; Method=Method_String2; break;
- case Elements::moov_meta__egid : Parameter="EpisodeGlobalUniqueID"; Method=Method_Binary; break;
- case Elements::moov_meta__flvr : Parameter="Flavour"; Method=Method_Binary; break;
- case Elements::moov_meta__gnre : Parameter="Genre"; Method=Method_String2; break;
- case Elements::moov_meta__geID : Parameter="GenreID"; Method=Method_Binary; break;
- case Elements::moov_meta__grup : Parameter="Grouping"; Method=Method_String; break;
- case Elements::moov_meta__hdvd : Parameter="HDVideo"; Method=Method_Binary; break;
- case Elements::moov_meta__itnu : Parameter="iTunesU"; Method=Method_Binary; break;
- case Elements::moov_meta__keyw : Parameter="Keyword"; Method=Method_String; break;
- case Elements::moov_meta__ldes : Parameter="LongDescription"; Method=Method_String; break;
- case Elements::moov_meta__name : Parameter="Title"; Method=Method_String; break;
- case Elements::moov_meta__pcst : Parameter="Podcast"; Method=Method_Binary; break;
- case Elements::moov_meta__perf : Parameter="Performer"; Method=Method_String2; break;
- case Elements::moov_meta__pgap : Parameter.clear(); Method=Method_None; break;
- case Elements::moov_meta__plID : Parameter="PlayListID"; Method=Method_Binary; break;
- case Elements::moov_meta__purd : Parameter="PurchaseDate"; Method=Method_String; break;
- case Elements::moov_meta__purl : Parameter="PodcastURL"; Method=Method_String; break;
- case Elements::moov_meta__rate : Parameter="Rating"; Method=Method_Binary; break;
- case Elements::moov_meta__rtng : Parameter="Rating"; Method=Method_Binary; break;
- case Elements::moov_meta__sdes : Parameter="Description"; Method=Method_String; break;
- case Elements::moov_meta__sfID : Parameter="AppleStoreCountry"; Method=Method_Binary; break;
- case Elements::moov_meta__soaa : Parameter="Album/Performer/Sort"; Method=Method_String; break; //SortAlbumArtist
- case Elements::moov_meta__soal : Parameter="Album/Sort"; Method=Method_String2; break; //SortAlbum
- case Elements::moov_meta__soar : Parameter="Performer/Sort"; Method=Method_String; break; //SortArtist
- case Elements::moov_meta__soco : Parameter="Composer/Sort"; Method=Method_String; break; //SortComposer
- case Elements::moov_meta__sonm : Parameter="Title/Sort"; Method=Method_String; break; //SortName
- case Elements::moov_meta__sosn : Parameter="Title/Sort"; Method=Method_String; break; //SortShow
- case Elements::moov_meta__stik : Parameter="ContentType"; Method=Method_Binary; break;
- case Elements::moov_meta__titl : Parameter="Title"; Method=Method_String2; break;
- case Elements::moov_meta__tool : Parameter="Encoded_Application"; Method=Method_String3; break;
- case Elements::moov_meta__tmpo : Parameter="BPM"; Method=Method_Binary; break;
- case Elements::moov_meta__trkn : Parameter="Track"; Method=Method_Binary; break;
- case Elements::moov_meta__tven : Parameter="Part_ID"; Method=Method_Binary; break; //TVEpisodeID
- case Elements::moov_meta__tves : Parameter="Part"; Method=Method_String; break; //TVEpisode
- case Elements::moov_meta__tvnn : Parameter="TVNetworkName"; Method=Method_String; break;
- case Elements::moov_meta__tvsh : Parameter="Collection"; Method=Method_String; break; //TVShow
- case Elements::moov_meta__tvsn : Parameter="Season"; Method=Method_String; break; //TVSeason
- case Elements::moov_meta__xid_ : Parameter="Vendor"; Method=Method_String; break;
- case Elements::moov_meta__year : Parameter="Recorded_Date"; Method=Method_String2; break;
- case Elements::moov_meta__yyrc : Parameter="Recorded_Date"; Method=Method_String2; break;
- default :
- {
- Parameter.clear();
- Parameter.append(1, (char)((Meta&0xFF000000)>>24));
- Parameter.append(1, (char)((Meta&0x00FF0000)>>16));
- Parameter.append(1, (char)((Meta&0x0000FF00)>> 8));
- Parameter.append(1, (char)((Meta&0x000000FF)>> 0));
- Method=Method_String;
- }
- }
-
- Ztring Value;
- Value.append(1, (Char)((Meta&0xFF000000)>>24)); //Can not use From_CC4 because there is sometimes the (C) character, not in Ansi 7-bit, so wrongly decoded on UTF-8 systems
- Value.append(1, (Char)((Meta&0x00FF0000)>>16));
- Value.append(1, (Char)((Meta&0x0000FF00)>> 8));
- Value.append(1, (Char)((Meta&0x000000FF)>> 0));
- if (MediaInfoLib::Config.CustomMapping_IsPresent(__T("MP4"), Value))
- Parameter=MediaInfoLib::Config.CustomMapping_Get(__T("MP4"), Value).To_Local();
-
- return Method;
-}
-
-//---------------------------------------------------------------------------
-//Get Metadata definition from string
-File_Mpeg4::method File_Mpeg4::Metadata_Get(std::string &Parameter, const std::string &Meta)
-{
- if (Meta=="com.apple.quicktime.copyright") Parameter="Copyright";
- else if (Meta=="com.apple.quicktime.displayname") Parameter="Title";
- else if (Meta=="DATE") Parameter="Encoded_Date";
- else if (Meta=="iTunEXTC") Parameter="ContentRating";
- else if (Meta=="iTunMOVI") Parameter="iTunMOVI";
- else if (Meta=="iTunNORM") Parameter="";
- else if (Meta=="iTunes_CDDB_IDs") Parameter="";
- else if (Meta=="iTunSMPB") Parameter="";
- else if (Meta=="PERFORMER") Parameter="Performer";
- else if (Meta=="PUBLISHER") Parameter="Publisher";
- else Parameter=Meta;
- return Method_String;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::Descriptors()
-{
- //Preparing
- File_Mpeg4_Descriptors MI;
- MI.KindOfStream=StreamKind_Last;
- MI.PosOfStream=StreamPos_Last;
- MI.Parser_DoNotFreeIt=true;
-
- int64u Elemen_Code_Save=Element_Code;
- Element_Code=moov_trak_tkhd_TrackID; //Element_Code is use for stream identifier
- Open_Buffer_Init(&MI);
- Element_Code=Elemen_Code_Save;
- mdat_MustParse=true; //Data is in MDAT
-
- //Parsing
- Open_Buffer_Continue(&MI);
-
- //Filling
- Finish(&MI);
- Merge(MI, StreamKind_Last, 0, StreamPos_Last);
-
- //Special case: AAC
- if (StreamKind_Last==Stream_Audio
- && (Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("AAC")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("MPEG Audio")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("Vorbis")))
- Clear(Stream_Audio, StreamPos_Last, Audio_BitDepth); //Resolution is not valid for AAC / MPEG Audio / Vorbis
-
- //Parser from Descriptor
- if (MI.Parser)
- {
- for (size_t Pos=0; Pos<Streams[moov_trak_tkhd_TrackID].Parsers.size(); Pos++)
- delete Streams[moov_trak_tkhd_TrackID].Parsers[Pos];
- Streams[moov_trak_tkhd_TrackID].Parsers.clear();
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(MI.Parser);
- mdat_MustParse=true;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::TimeCode_Associate(int32u TrackID)
-{
- //Trying to detect time code attached to 1 video only but for all streams in reality
- int32u TimeCode_TrackID=(int32u)-1;
- bool TimeCode_TrackID_MoreThanOne=false;
- for (std::map<int32u, stream>::iterator Strea=Streams.begin(); Strea!=Streams.end(); ++Strea)
- if (Strea->second.TimeCode_TrackID!=(int32u)-1)
- {
- if (TimeCode_TrackID==(int32u)-1)
- TimeCode_TrackID=Strea->second.TimeCode_TrackID;
- else
- TimeCode_TrackID_MoreThanOne=true;
- }
- if (!TimeCode_TrackID_MoreThanOne && TimeCode_TrackID!=(int32u)-1)
- for (std::map<int32u, stream>::iterator Strea=Streams.begin(); Strea!=Streams.end(); ++Strea)
- Strea->second.TimeCode_TrackID=TimeCode_TrackID; //For all tracks actually
-
- //Is it general or for a specific stream?
- bool IsGeneral=true;
- for (std::map<int32u, stream>::iterator Strea=Streams.begin(); Strea!=Streams.end(); ++Strea)
- if (Strea->second.TimeCode_TrackID==TrackID)
- IsGeneral=false;
-
- //For each track in the file (but only the last one will be used!)
- for (std::map<int32u, stream>::iterator Strea=Streams.begin(); Strea!=Streams.end(); ++Strea)
- if (!Streams[TrackID].Parsers.empty() && (IsGeneral && Strea->second.StreamKind!=Stream_Max) || Strea->second.TimeCode_TrackID==TrackID)
- {
- if (Strea->second.StreamKind==Stream_Video)
- {
- Fill(Stream_Video, Strea->second.StreamPos, Video_Delay_Settings, Ztring(__T("DropFrame="))+(Streams[TrackID].TimeCode->DropFrame?__T("Yes"):__T("No")));
- Fill(Stream_Video, Strea->second.StreamPos, Video_Delay_Settings, Ztring(__T("24HourMax="))+(Streams[TrackID].TimeCode->H24?__T("Yes"):__T("No")));
- Fill(Stream_Video, Strea->second.StreamPos, Video_Delay_Settings, Ztring(__T("IsVisual="))+(Streams[TrackID].TimeCode_IsVisual?__T("Yes"):__T("No")));
- }
- if (Strea->second.StreamKind!=Stream_Other)
- {
- Fill(Strea->second.StreamKind, Strea->second.StreamPos, "Delay", Streams[TrackID].Parsers[0]->Get(Stream_General, 0, "Delay"));
- Fill(Strea->second.StreamKind, Strea->second.StreamPos, "Delay_DropFrame", Streams[TrackID].TimeCode->DropFrame?__T("Yes"):__T("No"));
- Fill(Strea->second.StreamKind, Strea->second.StreamPos, "Delay_Source", "Container");
- }
-
- //Fill(Strea->second.StreamKind, Strea->second.StreamPos, "TimeCode_FirstFrame", Streams[TrackID].Parsers[0]->Get(Stream_General, 0, "TimeCode_FirstFrame"));
- //Fill(Strea->second.StreamKind, Strea->second.StreamPos, "TimeCode_Source", Streams[TrackID].Parsers[0]->Get(Stream_General, 0, "TimeCode_Source"));
- }
- }
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEG4_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4.h
deleted file mode 100644
index aaec3474e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4.h
+++ /dev/null
@@ -1,522 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Mpeg4H
-#define MediaInfo_File_Mpeg4H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-class File_MpegPs;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_Mpeg4
-//***************************************************************************
-
-class File_Mpeg4 : public File__Analyze
-{
-protected :
- //Streams management
- void Streams_Accept();
- void Streams_Finish();
- void Streams_Finish_CommercialNames ();
-
-public :
- File_Mpeg4();
- ~File_Mpeg4();
-
-private :
- //Buffer - Global
- void Read_Buffer_Init();
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
- bool BookMark_Needed();
-
- //Elements
- void bloc();
- void cdat();
- void cdt2() {cdat();}
- void free();
- void ftyp();
- void idat();
- void idsc();
- void jp2c();
- void jp2h();
- void jp2h_ihdr();
- void jp2h_colr();
- void mdat();
- void mdat_xxxx();
- void mdat_StreamJump();
- void mfra();
- void mfra_mfro();
- void mfra_tfra();
- void moof();
- void moof_mfhd();
- void moof_traf();
- void moof_traf_sdtp();
- void moof_traf_tfhd();
- void moof_traf_trun();
- void moov();
- void moov_ainf();
- void moov_cmov();
- void moov_cmov_cmvd();
- void moov_cmov_cmvd_zlib();
- void moov_cmov_dcom();
- void moov_ctab();
- void moov_iods();
- void moov_meta();
- void moov_meta_hdlr();
- void moov_meta_bxml();
- void moov_meta_keys();
- void moov_meta_keys_mdta();
- void moov_meta_ilst();
- void moov_meta_ilst_xxxx();
- void moov_meta_ilst_xxxx_data();
- void moov_meta_ilst_xxxx_mean();
- void moov_meta_ilst_xxxx_name();
- void moov_meta_xml();
- void moov_mvex();
- void moov_mvex_mehd();
- void moov_mvex_trex();
- void moov_mvhd();
- void moov_trak();
- void moov_trak_edts();
- void moov_trak_edts_elst();
- void moov_trak_load();
- void moov_trak_mdia();
- void moov_trak_mdia_hdlr();
- void moov_trak_mdia_imap();
- void moov_trak_mdia_imap_sean();
- void moov_trak_mdia_imap_sean___in();
- void moov_trak_mdia_imap_sean___in___ty();
- void moov_trak_mdia_imap_sean___in_dtst();
- void moov_trak_mdia_imap_sean___in_obid();
- void moov_trak_mdia_mdhd();
- void moov_trak_mdia_minf();
- void moov_trak_mdia_minf_code();
- void moov_trak_mdia_minf_code_sean();
- void moov_trak_mdia_minf_code_sean_RU_A();
- void moov_trak_mdia_minf_dinf();
- void moov_trak_mdia_minf_dinf_url_();
- void moov_trak_mdia_minf_dinf_urn_();
- void moov_trak_mdia_minf_dinf_dref();
- void moov_trak_mdia_minf_dinf_dref_alis();
- void moov_trak_mdia_minf_dinf_dref_rsrc();
- void moov_trak_mdia_minf_gmhd();
- void moov_trak_mdia_minf_gmhd_gmin();
- void moov_trak_mdia_minf_gmhd_tmcd();
- void moov_trak_mdia_minf_gmhd_tmcd_tcmi();
- void moov_trak_mdia_minf_gmhd_tcmi();
- void moov_trak_mdia_minf_hint();
- void moov_trak_mdia_minf_hdlr();
- void moov_trak_mdia_minf_hmhd();
- void moov_trak_mdia_minf_nmhd();
- void moov_trak_mdia_minf_smhd();
- void moov_trak_mdia_minf_sthd();
- void moov_trak_mdia_minf_vmhd();
- void moov_trak_mdia_minf_stbl();
- void moov_trak_mdia_minf_stbl_cslg();
- void moov_trak_mdia_minf_stbl_co64();
- void moov_trak_mdia_minf_stbl_ctts();
- void moov_trak_mdia_minf_stbl_sdtp();
- void moov_trak_mdia_minf_stbl_stco();
- void moov_trak_mdia_minf_stbl_stdp();
- void moov_trak_mdia_minf_stbl_stps();
- void moov_trak_mdia_minf_stbl_stsc();
- void moov_trak_mdia_minf_stbl_stsd();
- void moov_trak_mdia_minf_stbl_stsd_stpp();
- void moov_trak_mdia_minf_stbl_stsd_stpp_btrt() {moov_trak_mdia_minf_stbl_stsd_xxxx_btrt();}
- void moov_trak_mdia_minf_stbl_stsd_text();
- void moov_trak_mdia_minf_stbl_stsd_tmcd();
- void moov_trak_mdia_minf_stbl_stsd_tmcd_name();
- void moov_trak_mdia_minf_stbl_stsd_tx3g();
- void moov_trak_mdia_minf_stbl_stsd_tx3g_ftab();
- void moov_trak_mdia_minf_stbl_stsd_xxxx();
- void moov_trak_mdia_minf_stbl_stsd_xxxxSound();
- void moov_trak_mdia_minf_stbl_stsd_xxxxStream();
- void moov_trak_mdia_minf_stbl_stsd_xxxxText();
- void moov_trak_mdia_minf_stbl_stsd_xxxxVideo();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_alac();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_ACLR();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_APRG();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_ARES();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_avcC();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_bitr();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_btrt();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_chan();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_clap();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_colr();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_d263();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_dac3();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_damr();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_dec3();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_ddts();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_dvc1();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_esds();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_fiel();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_glbl();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_hvcC();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_idfm();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_jp2h() {jp2h();}
- void moov_trak_mdia_minf_stbl_stsd_xxxx_jp2h_colr() {jp2h_colr();}
- void moov_trak_mdia_minf_stbl_stsd_xxxx_jp2h_ihdr() {jp2h_ihdr();}
- void moov_trak_mdia_minf_stbl_stsd_xxxx_pasp();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_sinf();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_frma();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_imif();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_schm();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_schi();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_wave();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_wave_acbf();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_wave_enda();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_wave_frma();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_wave_samr();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_wave_srcq();
- void moov_trak_mdia_minf_stbl_stsd_xxxx_wave_xxxx();
- void moov_trak_mdia_minf_stbl_stsh();
- void moov_trak_mdia_minf_stbl_stss();
- void moov_trak_mdia_minf_stbl_stsz();
- void moov_trak_mdia_minf_stbl_stts();
- void moov_trak_mdia_minf_stbl_stts_Common(int32u SampleCount, int32u SampleDuration, int32u Pos=0, int32u NumberOfEntries=1);
- void moov_trak_mdia_minf_stbl_stz2() {moov_trak_mdia_minf_stbl_stsz();}
- void moov_trak_meta() {moov_meta();}
- void moov_trak_meta_hdlr() {moov_meta_hdlr();}
- void moov_trak_meta_bxml() {moov_meta_bxml();}
- void moov_trak_meta_keys() {moov_meta_keys();}
- void moov_trak_meta_keys_mdta() {moov_meta_keys_mdta();}
- void moov_trak_meta_ilst() {moov_meta_ilst();}
- void moov_trak_meta_ilst_xxxx() {moov_meta_ilst_xxxx();}
- void moov_trak_meta_ilst_xxxx_data() {moov_meta_ilst_xxxx_data();}
- void moov_trak_meta_ilst_xxxx_mean() {moov_meta_ilst_xxxx_mean();}
- void moov_trak_meta_ilst_xxxx_name() {moov_meta_ilst_xxxx_name();}
- void moov_trak_meta_xml() {moov_meta_xml();}
- void moov_trak_tapt();
- void moov_trak_tapt_clef();
- void moov_trak_tapt_prof();
- void moov_trak_tapt_enof();
- void moov_trak_tkhd();
- void moov_trak_tref();
- void moov_trak_tref_chap();
- void moov_trak_tref_clcp();
- void moov_trak_tref_dpnd();
- void moov_trak_tref_fall();
- void moov_trak_tref_folw();
- void moov_trak_tref_forc();
- void moov_trak_tref_ipir();
- void moov_trak_tref_hint();
- void moov_trak_tref_mpod();
- void moov_trak_tref_scpt();
- void moov_trak_tref_ssrc();
- void moov_trak_tref_sync();
- void moov_trak_tref_tmcd();
- void moov_udta();
- void moov_udta_AllF();
- void moov_udta_chpl();
- void moov_udta_clsf();
- void moov_udta_cprt();
- void moov_udta_DcMD();
- void moov_udta_DcMD_Cmbo();
- void moov_udta_DcMD_DcME();
- void moov_udta_DcMD_DcME_Keyw();
- void moov_udta_DcMD_DcME_Mtmd();
- void moov_udta_DcMD_DcME_Rate();
- void moov_udta_FIEL();
- void moov_udta_FXTC();
- void moov_udta_hinf();
- void moov_udta_hinv();
- void moov_udta_hnti();
- void moov_udta_hnti_rtp ();
- void moov_udta_ID32();
- void moov_udta_kywd();
- void moov_udta_loci();
- void moov_udta_LOOP();
- void moov_udta_MCPS();
- void moov_udta_meta();
- void moov_udta_meta_hdlr();
- void moov_udta_meta_ilst();
- void moov_udta_meta_ilst_xxxx();
- void moov_udta_meta_ilst_xxxx_data();
- void moov_udta_meta_ilst_xxxx_mean();
- void moov_udta_meta_ilst_xxxx_name();
- void moov_udta_ndrm();
- void moov_udta_nsav();
- void moov_udta_rtng();
- void moov_udta_ptv ();
- void moov_udta_Sel0();
- void moov_udta_tags();
- void moov_udta_tags_meta();
- void moov_udta_tags_tseg();
- void moov_udta_tags_tseg_tshd();
- void moov_udta_WLOC();
- void moov_udta_XMP_();
- void moov_udta_yrrc();
- void moov_udta_xxxx();
- void pdin();
- void PICT();
- void pckg();
- void pnot();
- void RDAO();
- void RDAS();
- void RDVO();
- void RDVS();
- void RED1();
- void REDA();
- void REDV();
- void REOB();
- void skip();
- void wide();
-
- //Helpers
- bool Element_Level_Get();
- bool Element_Name_Get();
- bool Element_Size_Get();
- Ztring Language_Get(int16u Language);
- enum method
- {
- Method_None,
- Method_String,
- Method_String2,
- Method_String3,
- Method_Integer,
- Method_Binary
- };
- method Metadata_Get(std::string &Parameter, int64u Meta);
- method Metadata_Get(std::string &Parameter, const std::string &Meta);
- void Descriptors();
- void TimeCode_Associate(int32u TrackID);
-
- //Temp
- bool List;
- bool mdat_MustParse;
- int32u moov_cmov_dcom_Compressor;
- int32u moov_meta_hdlr_Type;
- std::string moov_meta_ilst_xxxx_name_Name;
- size_t moov_trak_mdia_minf_stbl_stsd_Pos;
- int32u moov_trak_tkhd_TrackID;
- float32 moov_trak_tkhd_Width;
- float32 moov_trak_tkhd_Height;
- float32 moov_trak_tkhd_DisplayAspectRatio;
- float32 moov_trak_tkhd_Rotation;
- std::vector<std::string> moov_udta_meta_keys_List;
- size_t moov_udta_meta_keys_ilst_Pos;
- int32u moov_mvhd_TimeScale;
- int32u Vendor;
- Ztring Vendor_Version;
- int64u FirstMdatPos;
- int64u LastMdatPos; //This is the position of the byte after the last byte of mdat
- int64u FirstMoovPos;
- int64u moof_base_data_offset;
- int32u FrameCount_MaxPerStream;
- bool data_offset_present;
- int64u moof_traf_base_data_offset;
- int32u moof_traf_default_sample_duration;
- int32u moof_traf_default_sample_size;
- int32u MajorBrand;
- bool IsSecondPass;
- bool IsParsing_mdat;
- bool IsFragmented;
-
- //Data
- struct stream
- {
- Ztring File_Name;
- std::vector<File__Analyze*> Parsers;
- MediaInfo_Internal* MI;
- struct timecode
- {
- int32u TimeScale;
- int32u FrameDuration;
- bool DropFrame;
- bool H24;
- bool NegativeTimes;
- };
- timecode* TimeCode;
- stream_t StreamKind;
- size_t StreamPos;
- int32u hdlr_Type;
- int32u hdlr_SubType;
- int32u hdlr_Manufacturer;
- struct edts_struct
- {
- int32u Duration;
- int32u Delay;
- int32u Rate;
- };
- std::vector<edts_struct> edts;
- std::vector<int64u> stco;
- struct stsc_struct
- {
- int32u FirstChunk;
- int32u SamplesPerChunk;
- };
- std::vector<stsc_struct> stsc;
- std::vector<int64u> stsz;
- std::vector<int64u> stsz_Total; //TODO: merge with stsz
- int64u stsz_StreamSize; //TODO: merge with stsz
- std::vector<int64u> stss; //Sync Sample, base=0
- struct stts_struct
- {
- int32u SampleCount;
- int32u SampleDuration;
- };
- std::vector<stts_struct> stts;
- int64u stsz_Sample_Size;
- int64u stsz_Sample_Multiplier;
- int64u stsz_Sample_Count;
- int64u tkhd_Duration;
- int32u mdhd_TimeScale;
- int64u mdhd_Duration;
- int32u stts_Min;
- int32u stts_Max;
- int64u stts_FrameCount;
- int64u stts_Duration;
- int64u stts_Duration_FirstFrame;
- int64u stts_Duration_LastFrame;
- int64u stts_SampleDuration;
- int32u mvex_trex_default_sample_duration;
- int32u mvex_trex_default_sample_size;
- int32u TimeCode_TrackID;
- bool TimeCode_IsVisual;
- bool IsPcm;
- bool IsPcmMono;
- bool IsPriorityStream;
- bool IsFilled;
- bool IsChapter;
- float32 CleanAperture_Width;
- float32 CleanAperture_Height;
- float32 CleanAperture_PixelAspectRatio;
- #if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- int8u Demux_Level;
- int64u Demux_Offset;
-
- struct stts_duration
- {
- int64u Pos_Begin;
- int64u Pos_End;
- int64u DTS_Begin;
- int64u DTS_End;
- int32u SampleDuration;
- };
- typedef std::vector<stts_duration> stts_durations;
- stts_durations stts_Durations;
- size_t stts_Durations_Pos;
- int64u stts_FramePos;
- #endif //MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- #if MEDIAINFO_DEMUX
- bool PtsDtsAreSame;
- bool Demux_EventWasSent;
- #endif //MEDIAINFO_DEMUX
-
- stream()
- {
- MI=NULL;
- TimeCode=NULL;
- StreamKind=Stream_Max;
- StreamPos=0;
- hdlr_Type=0x00000000;
- hdlr_SubType=0x00000000;
- hdlr_Manufacturer=0x00000000;
- stsz_StreamSize=0;
- stsz_Sample_Size=0;
- stsz_Sample_Multiplier=1;
- stsz_Sample_Count=0;
- tkhd_Duration=0;
- mdhd_TimeScale=0;
- mdhd_Duration=0;
- stts_Min=(int32u)-1;
- stts_Max=0;
- stts_FrameCount=0;
- stts_Duration=0;
- stts_Duration_FirstFrame=0;
- stts_Duration_LastFrame=0;
- stts_SampleDuration = 0;
- mvex_trex_default_sample_duration=0;
- mvex_trex_default_sample_size=0;
- TimeCode_TrackID=(int32u)-1;
- TimeCode_IsVisual=false;
- IsPcm=false;
- IsPcmMono=false;
- IsPriorityStream=false;
- IsFilled=false;
- IsChapter=false;
- CleanAperture_Width=0;
- CleanAperture_Height=0;
- CleanAperture_PixelAspectRatio=0;
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- Demux_Offset=0;
- stts_Durations_Pos=0;
- stts_FramePos=0;
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_DEMUX
- PtsDtsAreSame=false;
- Demux_EventWasSent=false;
- #endif //MEDIAINFO_DEMUX
- }
-
- ~stream()
- {
- for (size_t Pos=0; Pos<Parsers.size(); Pos++)
- delete Parsers[Pos];
- delete MI; //MI=NULL;
- delete TimeCode; //TimeCode=NULL;
- }
- };
- typedef std::map<int32u, stream> streams;
- streams Streams;
- streams::iterator Stream;
- #if defined(MEDIAINFO_REFERENCES_YES)
- File__ReferenceFilesHelper* ReferenceFiles;
- #endif //defined(MEDIAINFO_REFERENCES_YES)
- #if MEDIAINFO_NEXTPACKET
- bool ReferenceFiles_IsParsing;
- #endif //MEDIAINFO_NEXTPACKET
-
- //Hints
- size_t* File_Buffer_Size_Hint_Pointer;
-
- //Positions
- struct mdat_Pos_Type
- {
- int64u Offset;
- int64u Size;
- int32u StreamID;
- int32u Reserved1;
- int64u Reserved2;
- };
- typedef std::vector<mdat_Pos_Type> mdat_pos;
- static bool mdat_pos_sort (const File_Mpeg4::mdat_Pos_Type &i,const File_Mpeg4::mdat_Pos_Type &j) { return (i.Offset<j.Offset); }
- mdat_pos mdat_Pos;
- mdat_Pos_Type* mdat_Pos_Temp;
- mdat_Pos_Type* mdat_Pos_Max;
- std::vector<int32u> mdat_Pos_ToParseInPriority_StreamIDs;
- bool mdat_Pos_NormalParsing;
-
- #if MEDIAINFO_DEMUX
- int64u TimeCode_FrameOffset;
- int64u TimeCode_DtsOffset;
- std::map<int64u, int64u> StreamOffset_Jump; //Key is the current position, value is the jump position
- #endif //MEDIAINFO_DEMUX
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Descriptors.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Descriptors.cpp
deleted file mode 100644
index 010049235..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Descriptors.cpp
+++ /dev/null
@@ -1,1001 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Descriptors part
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_MPEG4_YES
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mpeg4_Descriptors.h"
-#include <cstring>
-#if defined(MEDIAINFO_OGG_YES)
- #include "MediaInfo/Multiple/File_Ogg.h"
-#endif
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_VC1_YES)
- #include "MediaInfo/Video/File_Vc1.h"
-#endif
-#if defined(MEDIAINFO_DIRAC_YES)
- #include "MediaInfo/Video/File_Dirac.h"
-#endif
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_JPEG_YES)
- #include "MediaInfo/Image/File_Jpeg.h"
-#endif
-#if defined(MEDIAINFO_PNG_YES)
- #include "MediaInfo/Image/File_Png.h"
-#endif
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_DTS_YES)
- #include "MediaInfo/Audio/File_Dts.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if MEDIAINFO_DEMUX
- #include "base64.h"
-#endif //MEDIAINFO_DEMUX
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_MPEG4V_YES
- const char* Mpeg4v_Profile_Level(int32u Profile_Level);
-#endif //MEDIAINFO_MPEG4V_YES
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_Descriptors_Predefined(int8u ID)
-{
- switch (ID)
- {
- case 0x00 : return "Custom";
- case 0x01 : return "null SL packet header";
- case 0x02 : return "Reserved for use in MP4 files";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_Descriptors_ObjectTypeIndication(int8u ID)
-{
- switch (ID)
- {
- case 0x01 : return "Systems ISO/IEC 14496-1";
- case 0x02 : return "Systems ISO/IEC 14496-1 (v2)";
- case 0x03 : return "Interaction Stream";
- case 0x05 : return "AFX Stream";
- case 0x06 : return "Font Data Stream";
- case 0x07 : return "Synthesized Texture Stream";
- case 0x08 : return "Streaming Text Stream";
- case 0x20 : return "Visual ISO/IEC 14496-2 (MPEG-4 Visual)";
- case 0x21 : return "Visual ISO/IEC 14496-10 (AVC)";
- case 0x22 : return "Parameter Sets for Visual ISO/IEC 14496-10 (AVC)";
- case 0x24 : return "ALS"; //Not sure
- case 0x2B : return "SAOC"; //Not sure
- case 0x40 : return "Audio ISO/IEC 14496-3 (AAC)";
- case 0x60 : return "Visual ISO/IEC 13818-2 Simple Profile (MPEG Video)";
- case 0x61 : return "Visual ISO/IEC 13818-2 Main Profile (MPEG Video)";
- case 0x62 : return "Visual ISO/IEC 13818-2 SNR Profile (MPEG Video)";
- case 0x63 : return "Visual ISO/IEC 13818-2 Spatial Profile (MPEG Video)";
- case 0x64 : return "Visual ISO/IEC 13818-2 High Profile (MPEG Video)";
- case 0x65 : return "Visual ISO/IEC 13818-2 422 Profile (MPEG Video)";
- case 0x66 : return "Audio ISO/IEC 13818-7 Main Profile (AAC)";
- case 0x67 : return "Audio ISO/IEC 13818-7 Low Complexity Profile (AAC)";
- case 0x68 : return "Audio ISO/IEC 13818-7 Scaleable Sampling Rate Profile (AAC)";
- case 0x69 : return "Audio ISO/IEC 13818-3 (MPEG Audio)";
- case 0x6A : return "Visual ISO/IEC 11172-2 (MPEG Video)";
- case 0x6B : return "Audio ISO/IEC 11172-3 (MPEG Audio)";
- case 0x6C : return "Visual ISO/IEC 10918-1 (JPEG)";
- case 0x6D : return "PNG";
- case 0xA0 : return "EVRC";
- case 0xA1 : return "SMV";
- case 0xA2 : return "3GPP2 Compact Multimedia Format (CMF)";
- case 0xA3 : return "VC-1";
- case 0xA4 : return "Dirac";
- case 0xA5 : return "AC-3";
- case 0xA6 : return "E-AC-3";
- case 0xA9 : return "DTS";
- case 0xAA : return "DTS-HD High Resolution";
- case 0xAB : return "DTS-HD Master Audio";
- case 0xAC : return "DTS-HD Express";
- case 0xD1 : return "Private - EVRC";
- case 0xD3 : return "Private - AC-3";
- case 0xD4 : return "Private - DTS";
- case 0xDD : return "Private - Ogg";
- case 0xDE : return "Private - Ogg";
- case 0xE1 : return "Private - QCELP";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_Descriptors_StreamType(int8u ID)
-{
- switch (ID)
- {
- case 0x01 : return "ObjectDescriptorStream";
- case 0x02 : return "ClockReferenceStream";
- case 0x03 : return "SceneDescriptionStream";
- case 0x04 : return "VisualStream";
- case 0x05 : return "AudioStream";
- case 0x06 : return "MPEG7Stream";
- case 0x07 : return "IPMPStream";
- case 0x08 : return "ObjectContentInfoStream";
- case 0x09 : return "MPEGJStream";
- case 0x0A : return "Interaction Stream";
- case 0x0B : return "IPMPToolStream";
- case 0x0C : return "FontDataStream";
- case 0x0D : return "StreamingText";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_Descriptors_ODProfileLevelIndication(int8u /*ID*/)
-{
- return "";
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_Descriptors_SceneProfileLevelIndication(int8u ID)
-{
- switch (ID)
- {
- case 1 : return "Simple2D@L1";
- case 2 : return "Simple2D@L2";
- case 11 : return "Basic2D@L1";
- case 12 : return "Core2D@L1";
- case 13 : return "Core2D@L2";
- case 14 : return "Advanced2D@L1";
- case 15 : return "Advanced2D@L2";
- case 16 : return "Advanced2D@L3";
- case 17 : return "Main2D@L1";
- case 18 : return "Main2D@L2";
- case 19 : return "Main2D@L3";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_Descriptors_AudioProfileLevelIndication(int8u ID)
-{
- switch (ID)
- {
- case 1 : return "Main@L1";
- case 2 : return "Main@L2";
- case 3 : return "Main@L3";
- case 4 : return "Main@L4";
- case 5 : return "Scalable@L1";
- case 6 : return "Scalable@L2";
- case 7 : return "Scalable@L3";
- case 8 : return "Scalable@L4";
- case 9 : return "Speech@L1";
- case 10 : return "Speech@L2";
- case 11 : return "Synthesis@L1";
- case 12 : return "Synthesis@L2";
- case 13 : return "Synthesis@L3";
- case 14 : return "HighQualityAudio@L1";
- case 15 : return "HighQualityAudio@L2";
- case 16 : return "HighQualityAudio@L3";
- case 17 : return "HighQualityAudio@L4";
- case 18 : return "HighQualityAudio@L5";
- case 19 : return "HighQualityAudio@L6";
- case 20 : return "HighQualityAudio@L7";
- case 21 : return "HighQualityAudio@L8";
- case 22 : return "LowDelayAudio@L1";
- case 23 : return "LowDelayAudio@L2";
- case 24 : return "LowDelayAudio@L3";
- case 25 : return "LowDelayAudio@L4";
- case 26 : return "LowDelayAudio@L5";
- case 27 : return "LowDelayAudio@L6";
- case 28 : return "LowDelayAudio@L7";
- case 29 : return "LowDelayAudio@L8";
- case 30 : return "NaturalAudio@L1";
- case 31 : return "NaturalAudio@L2";
- case 32 : return "NaturalAudio@L3";
- case 33 : return "NaturalAudio@L4";
- case 34 : return "MobileAudioInternetworking@L1";
- case 35 : return "MobileAudioInternetworking@L2";
- case 36 : return "MobileAudioInternetworking@L3";
- case 37 : return "MobileAudioInternetworking@L4";
- case 38 : return "MobileAudioInternetworking@L5";
- case 39 : return "MobileAudioInternetworking@L6";
- case 40 : return "AAC@L1";
- case 41 : return "AAC@L2";
- case 42 : return "AAC@L4";
- case 43 : return "AAC@L5";
- case 44 : return "HighEfficiencyAAC@L2";
- case 45 : return "HighEfficiencyAAC@L3";
- case 46 : return "HighEfficiencyAAC@L4";
- case 47 : return "HighEfficiencyAAC@L5";
- case 59 : return "HighDefinitionAAC@L1";
- case 60 : return "ALSSimple@L1";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-extern const char* Mpeg4v_Profile_Level(int32u Profile_Level);
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_Descriptors_GraphicsProfileLevelIndication(int8u ID)
-{
- switch (ID)
- {
- case 1 : return "Simple2D@L1";
- case 2 : return "Simple2D+Text@L1";
- case 3 : return "Simple2D+Text@L2";
- case 4 : return "Core2D@L1";
- case 5 : return "Core2D@L2";
- case 6 : return "Advanced2D@L1";
- case 7 : return "Advanced2D@L2";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mpeg4_Descriptors::File_Mpeg4_Descriptors()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("MPEG-4 Descriptor");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Mpeg4_Desc;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- IsRawStream=true;
-
- //In
- KindOfStream=Stream_Max;
- PosOfStream=(size_t)-1;
- Parser_DoNotFreeIt=false;
- SLConfig_DoNotFreeIt=false;
-
- //Out
- Parser=NULL;
- ES_ID=0x0000;
- SLConfig=NULL;
-
- //Temp
- ObjectTypeId=0x00;
-}
-
-//---------------------------------------------------------------------------
-File_Mpeg4_Descriptors::~File_Mpeg4_Descriptors()
-{
- if (!Parser_DoNotFreeIt)
- delete Parser;// Parser=NULL;
- if (!SLConfig_DoNotFreeIt)
- delete SLConfig;// SLConfig=NULL;
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Header_Parse()
-{
- //Parsing
- size_t Size=0;
- int8u type, Size_ToAdd;
- Get_B1(type, "type");
- if (type==0)
- {
- Header_Fill_Code(0x00, "Padding");
- Header_Fill_Size(1);
- return;
- }
- do
- {
- Get_B1(Size_ToAdd, "size");
- Size=(Size<<7) | (Size_ToAdd&0x7F);
- }
- while (Size_ToAdd&0x80);
-
- //Filling
- Header_Fill_Code(type, Ztring().From_CC1(type));
- if (Element_Offset+Size>=Element_Size)
- Size=(size_t)(Element_Size-Element_Offset); //Found one file with too big size but content is OK, cutting the block
- Header_Fill_Size(Element_Offset+Size);
-}
-
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Data_Parse()
-{
- //Preparing
- Status[IsAccepted]=true;
-
- #define ELEMENT_CASE(_NAME, _DETAIL) \
- case 0x##_NAME : Element_Name(_DETAIL); Descriptor_##_NAME(); break;
-
- //Parsing
- switch (Element_Code)
- {
- ELEMENT_CASE(00, "Forbidden");
- ELEMENT_CASE(01, "ObjectDescrTag");
- ELEMENT_CASE(02, "InitialObjectDescrTag");
- ELEMENT_CASE(03, "ES_DescrTag");
- ELEMENT_CASE(04, "DecoderConfigDescrTag");
- ELEMENT_CASE(05, "DecSpecificInfoTag");
- ELEMENT_CASE(06, "SLConfigDescrTag");
- ELEMENT_CASE(07, "ContentIdentDescrTag");
- ELEMENT_CASE(08, "SupplContentIdentDescrTag");
- ELEMENT_CASE(09, "IPI_DescrPointerTag");
- ELEMENT_CASE(0A, "IPMP_DescrPointerTag");
- ELEMENT_CASE(0B, "IPMP_DescrTag");
- ELEMENT_CASE(0C, "QoS_DescrTag");
- ELEMENT_CASE(0D, "RegistrationDescrTag");
- ELEMENT_CASE(0E, "ES_ID_IncTag");
- ELEMENT_CASE(0F, "ES_ID_RefTag");
- ELEMENT_CASE(10, "MP4_IOD_Tag");
- ELEMENT_CASE(11, "MP4_OD_Tag");
- ELEMENT_CASE(12, "IPL_DescrPointerRefTag");
- ELEMENT_CASE(13, "ExtendedProfileLevelDescrTag");
- ELEMENT_CASE(14, "profileLevelIndicationIndexDescrTag");
- ELEMENT_CASE(40, "ContentClassificationDescrTag");
- ELEMENT_CASE(41, "KeyWordDescrTag");
- ELEMENT_CASE(42, "RatingDescrTag");
- ELEMENT_CASE(43, "LanguageDescrTag");
- ELEMENT_CASE(44, "ShortTextualDescrTag");
- ELEMENT_CASE(45, "ExpandedTextualDescrTag");
- ELEMENT_CASE(46, "ContentCreatorNameDescrTag");
- ELEMENT_CASE(47, "ContentCreationDateDescrTag");
- ELEMENT_CASE(48, "OCICreatorNameDescrTag");
- ELEMENT_CASE(49, "OCICreationDateDescrTag");
- ELEMENT_CASE(4A, "SmpteCameraPositionDescrTag");
- ELEMENT_CASE(4B, "SegmentDescrTag");
- ELEMENT_CASE(4C, "MediaTimeDescrTag");
- ELEMENT_CASE(60, "IPMP_ToolsListDescrTag");
- ELEMENT_CASE(61, "IPMP_ToolTag");
- ELEMENT_CASE(62, "FLEXmuxTimingDescrTag");
- ELEMENT_CASE(63, "FLEXmuxCodeTableDescrTag");
- ELEMENT_CASE(64, "ExtSLConfigDescrTag");
- ELEMENT_CASE(65, "FLEXmuxBufferSizeDescrTag");
- ELEMENT_CASE(66, "FLEXmuxIdentDescrTag");
- ELEMENT_CASE(67, "DependencyPointerTag");
- ELEMENT_CASE(68, "DependencyMarkerTag");
- ELEMENT_CASE(69, "FLEXmuxChannelDescrTag");
- default: if (Element_Code>=0xC0)
- Element_Name("user private");
- else
- Element_Name("unknown");
- Skip_XX(Element_Size, "Data");
- break;
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_01()
-{
- //Parsing
- bool URL_Flag;
- BS_Begin();
- Skip_S2(10, "ObjectDescriptorID");
- Get_SB ( URL_Flag, "URL_Flag");
- Skip_SB( "includeInlineProfileLevelFlag");
- Skip_S1( 4, "reserved");
- BS_End();
- if (URL_Flag)
- {
- int8u URLlength;
- Get_B1 (URLlength, "URLlength");
- Skip_UTF8(URLlength, "URLstring");
- }
- if (Element_Code==0x02 || Element_Code==0x10)
- {
- Info_B1(ODProfileLevel, "ODProfileLevelIndication"); Param_Info1(Mpeg4_Descriptors_ODProfileLevelIndication(ODProfileLevel));
- Info_B1(SceneProfileLevel, "sceneProfileLevelIndication"); Param_Info1(Mpeg4_Descriptors_SceneProfileLevelIndication(SceneProfileLevel));
- Info_B1(AudioProfileLevel, "audioProfileLevelIndication"); Param_Info1(Mpeg4_Descriptors_AudioProfileLevelIndication(AudioProfileLevel));
- Info_B1(VisualProfileLevel, "visualProfileLevelIndication"); Param_Info1(Mpeg4v_Profile_Level(VisualProfileLevel));
- Info_B1(GraphicsProfileLevel, "graphicsProfileLevelIndication"); Param_Info1(Mpeg4_Descriptors_GraphicsProfileLevelIndication(GraphicsProfileLevel));
- }
-
- FILLING_BEGIN();
- Element_ThisIsAList();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_03()
-{
- //Parsing
- bool streamDependenceFlag, URL_Flag, OCRstreamFlag;
- Get_B2 (ES_ID, "ES_ID");
- BS_Begin();
- Get_SB ( streamDependenceFlag, "streamDependenceFlag");
- Get_SB ( URL_Flag, "URL_Flag");
- Get_SB ( OCRstreamFlag, "OCRstreamFlag");
- Skip_S1(5, "streamPriority");
- BS_End();
- if (streamDependenceFlag)
- Skip_B2( "dependsOn_ES_ID");
- if (URL_Flag)
- {
- int8u URLlength;
- Get_B1 (URLlength, "URLlength");
- Skip_UTF8(URLlength, "URLstring");
- }
- if (OCRstreamFlag)
- Skip_B2( "OCR_ES_Id");
-
- FILLING_BEGIN();
- Element_ThisIsAList();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_04()
-{
- //Parsing
- int32u bufferSizeDB, MaxBitrate, AvgBitrate;
- int8u streamType;
- Get_B1 (ObjectTypeId, "objectTypeIndication"); Param_Info1(Mpeg4_Descriptors_ObjectTypeIndication(ObjectTypeId));
- BS_Begin();
- Get_S1 (6, streamType, "streamType"); Param_Info1(Mpeg4_Descriptors_StreamType(streamType));
- Skip_SB( "upStream");
- Skip_SB( "reserved");
- BS_End();
- Get_B3 (bufferSizeDB, "bufferSizeDB");
- Get_B4 (MaxBitrate, "maxBitrate");
- Get_B4 (AvgBitrate, "avgBitrate");
-
- FILLING_BEGIN();
- if (KindOfStream==Stream_Max)
- switch (ObjectTypeId)
- {
- case 0x20 :
- case 0x21 :
- case 0x60 :
- case 0x61 :
- case 0x62 :
- case 0x63 :
- case 0x64 :
- case 0x65 :
- case 0x6A :
- case 0x6C :
- case 0x6D :
- case 0x6E :
- case 0xA3 :
- case 0xA4 :
- KindOfStream=Stream_Video; break;
- case 0x40 :
- case 0x66 :
- case 0x67 :
- case 0x68 :
- case 0x69 :
- case 0x6B :
- case 0xA0 :
- case 0xA1 :
- case 0xA5 :
- case 0xA6 :
- case 0xA9 :
- case 0xAA :
- case 0xAB :
- case 0xAC :
- case 0xD1 :
- case 0xD3 :
- case 0xD4 :
- case 0xE1 :
- KindOfStream=Stream_Audio; break;
- case 0x08 :
- KindOfStream=Stream_Text; break;
- default: ;
- }
- if (Count_Get(KindOfStream)==0)
- Stream_Prepare(KindOfStream);
- switch (ObjectTypeId)
- {
- case 0x01 : Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "System", Error, false, true); break;
- case 0x02 : Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "System Core", Error, false, true); break;
- //case 0x03 Interaction Stream
- //case 0x05 AFX
- //case 0x06 Font Data
- //case 0x07 Synthesized Texture Stream
- case 0x08 : Fill(Stream_Text , StreamPos_Last, Text_Format, "Streaming Text", Error, false, true); break;
- case 0x20 : Fill(Stream_Video , StreamPos_Last, Video_Format, "MPEG-4 Visual", Error, false, true); break;
- case 0x21 : Fill(Stream_Video , StreamPos_Last, Video_Format, "AVC", Error, false, true); break;
- //case 0x22 Parameter Sets for AVC
- case 0x40 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "AAC", Error, false, true); break; //MPEG-4 AAC
- case 0x60 : Fill(Stream_Video , StreamPos_Last, Video_Format, "MPEG Video", Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Profile, "Simple" , Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Version, "Version 2", Error, false, true); break; //MPEG-2V Simple
- case 0x61 : Fill(Stream_Video , StreamPos_Last, Video_Format, "MPEG Video", Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Profile, "Main" , Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Version, "Version 2", Error, false, true); break; //MPEG-2V Main
- case 0x62 : Fill(Stream_Video , StreamPos_Last, Video_Format, "MPEG Video", Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Profile, "SNR" , Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Version, "Version 2", Error, false, true); break; //MPEG-2V SNR
- case 0x63 : Fill(Stream_Video , StreamPos_Last, Video_Format, "MPEG Video", Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Profile, "Spatial", Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Version, "Version 2", Error, false, true); break; //MPEG-2V Spatial
- case 0x64 : Fill(Stream_Video , StreamPos_Last, Video_Format, "MPEG Video", Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Profile, "High" , Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Version, "Version 2", Error, false, true); break; //MPEG-2V High
- case 0x65 : Fill(Stream_Video , StreamPos_Last, Video_Format, "MPEG Video", Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Profile, "4:2:2" , Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Version, "Version 2", Error, false, true); break; //MPEG-2V 4:2:2
- case 0x66 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "AAC", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, "Main", Error, false, true); break; //MPEG-2 AAC Main
- case 0x67 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "AAC", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, "LC", Error, false, true); break; //MPEG-2 AAC LC
- case 0x68 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "AAC", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, "SSR", Error, false, true); break; //MPEG-2 AAC SSR
- case 0x69 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "MPEG Audio", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_Format_Version, "Version 2", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, "Layer 3", Error, false, true); break;
- case 0x6A : Fill(Stream_Video , StreamPos_Last, Video_Format, "MPEG Video", Error, false, true); Fill(Stream_Video, StreamPos_Last, Video_Format_Version, "Version 1", Error, false, true); break;
- case 0x6B : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "MPEG Audio", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_Format_Version, "Version 1", Error, false, true); break;
- case 0x6C : Fill(Stream_Video , StreamPos_Last, Video_Format, "JPEG", Error, false, true); break;
- case 0x6D : Fill(Stream_Video , StreamPos_Last, Video_Format, "PNG", Error, false, true); break;
- case 0x6E : Fill(Stream_Video , StreamPos_Last, Video_Format, "MPEG Video", Error, false, true); break;
- case 0xA0 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "EVRC", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, 8000, 10, true); Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, 1, 10, true); break;
- case 0xA1 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "SMV", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, 8000, 10, true); Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, 1, 10, true); break;
- case 0xA2 : Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "3GPP2", Error, false, true); break;
- case 0xA3 : Fill(Stream_Video , StreamPos_Last, Video_Format, "VC-1", Error, false, true); break;
- case 0xA4 : Fill(Stream_Video , StreamPos_Last, Video_Format, "Dirac", Error, false, true); break;
- case 0xA5 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "AC-3", Error, false, true); break;
- case 0xA6 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "E-AC-3", Error, false, true); break;
- case 0xA9 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "DTS", Error, false, true); break;
- case 0xAA : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "DTS", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, "HRA", Error, false, true); break; // DTS-HD High Resolution
- case 0xAB : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "DTS", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, "MA", Error, false, true); break; // DTS-HD Master Audio
- case 0xAC : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "DTS", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, "Express", Error, false, true); break; // DTS Express a.k.a. LBR
- case 0xD1 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "EVRC", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, 8000, 10, true); Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, 1, 10, true); break;
- case 0xD3 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "AC-3", Error, false, true); break;
- case 0xD4 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "DTS", Error, false, true); break;
- case 0xDD : Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "Ogg", Error, false, true); break;
- case 0xDE : Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "Ogg", Error, false, true); break;
- case 0xE1 : Fill(Stream_Audio , StreamPos_Last, Audio_Format, "QCELP", Error, false, true); Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, 8000, 10, true); Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, 1, 10, true); break;
- default: ;
- }
- switch (ObjectTypeId)
- {
- case 0x01 : Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), "System", Error, false, true); break;
- case 0x02 : Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), "System Core", Error, false, true); break;
- case 0x20 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-4V", Error, false, true); break;
- case 0x21 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "H264", Error, false, true); break;
- case 0x40 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "AAC", Error, false, true); break; //MPEG-4 AAC
- case 0x60 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-2V", Error, false, true); break; //MPEG-2V Simple
- case 0x61 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-2V", Error, false, true); break; //MPEG-2V Main
- case 0x62 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-2V", Error, false, true); break; //MPEG-2V SNR
- case 0x63 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-2V", Error, false, true); break; //MPEG-2V Spatial
- case 0x64 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-2V", Error, false, true); break; //MPEG-2V High
- case 0x65 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-2V", Error, false, true); break; //MPEG-2V 4:2:2
- case 0x66 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "AAC", Error, false, true); break; //MPEG-2 AAC Main
- case 0x67 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "AAC", Error, false, true); break; //MPEG-2 AAC LC
- case 0x68 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "AAC", Error, false, true); break; //MPEG-2 AAC SSR
- case 0x69 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "MPEG-2A L3", Error, false, true); break;
- case 0x6A : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-1V", Error, false, true); break;
- case 0x6B : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "MPEG-1A", Error, false, true); break;
- case 0x6C : Fill(Stream_Video , StreamPos_Last, Video_Codec, "JPEG", Error, false, true); break;
- case 0x6D : Fill(Stream_Video , StreamPos_Last, Video_Codec, "PNG", Error, false, true); break;
- case 0x6E : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-4V", Error, false, true); break;
- case 0xA0 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "EVRC", Error, false, true); break;
- case 0xA1 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "SMV", Error, false, true); break;
- case 0xA2 : Fill(Stream_Video , StreamPos_Last, Video_Codec, "MPEG-4V", Error, false, true); break;
- case 0xA3 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "VC-1", Error, false, true); break;
- case 0xA4 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "Dirac", Error, false, true); break;
- case 0xA5 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "AC3", Error, false, true); break;
- case 0xA6 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "AC3+", Error, false, true); break;
- case 0xA9 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "DTS", Error, false, true); break;
- case 0xAA :
- case 0xAB : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "DTS-HD", Error, false, true); break;
- case 0xAC : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "DTS Express", Error, false, true); break;
- case 0xD1 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "EVRC", Error, false, true); break;
- case 0xD3 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "AC3", Error, false, true); break;
- case 0xD4 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "DTS", Error, false, true); break;
- case 0xDD : Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), "Ogg", Error, false, true); break;
- case 0xDE : Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), "Ogg", Error, false, true); break;
- case 0xE1 : Fill(Stream_Audio , StreamPos_Last, Audio_Codec, "QCELP", Error, false, true); break;
- default: ;
- }
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_CodecID), ObjectTypeId, 16, true);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec_CC), ObjectTypeId, 16, true);
-
- //Bitrate mode
- if (AvgBitrate>0
- && !(bufferSizeDB==AvgBitrate && bufferSizeDB==MaxBitrate && bufferSizeDB==0x1000)) //Some buggy data were found
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_BitRate_Nominal), AvgBitrate);
- if (MaxBitrate<=AvgBitrate*1.005)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_BitRate_Mode), "CBR");
- else
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_BitRate_Mode), "VBR");
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_BitRate_Maximum), MaxBitrate);
- }
- }
-
- //Creating parser
- delete Parser; Parser=NULL;
- switch (ObjectTypeId)
- {
- case 0x01 : switch (streamType)
- {
- case 0x01 : Parser=new File_Mpeg4_Descriptors; break;
- default : ;
- }
- break;
- case 0x20 : //MPEG-4 Visual
- #if defined(MEDIAINFO_MPEG4V_YES)
- Parser=new File_Mpeg4v;
- ((File_Mpeg4v*)Parser)->Frame_Count_Valid=1;
- ((File_Mpeg4v*)Parser)->FrameIsAlwaysComplete=true;
- #endif
- break;
- case 0x21 : //AVC
- #if defined(MEDIAINFO_AVC_YES)
- Parser=new File_Avc;
- ((File_Avc*)Parser)->MustParse_SPS_PPS=true;
- ((File_Avc*)Parser)->MustSynchronize=false;
- ((File_Avc*)Parser)->SizedBlocks=true;
- #endif
- break;
- case 0x40 : //MPEG-4 AAC
- case 0x66 :
- case 0x67 :
- case 0x68 : //MPEG-2 AAC
- #if defined(MEDIAINFO_AAC_YES)
- Parser=new File_Aac;
- ((File_Aac*)Parser)->Mode=File_Aac::Mode_AudioSpecificConfig;
- ((File_Aac*)Parser)->FrameIsAlwaysComplete=true;
- #endif
- break;
- case 0x60 :
- case 0x61 :
- case 0x62 :
- case 0x63 :
- case 0x64 :
- case 0x65 :
- case 0x6A : //MPEG Video
- #if defined(MEDIAINFO_MPEGV_YES)
- Parser=new File_Mpegv;
- ((File_Mpegv*)Parser)->FrameIsAlwaysComplete=true;
- #endif
- break;
- case 0x69 :
- case 0x6B : //MPEG Audio
- #if defined(MEDIAINFO_MPEGA_YES)
- Parser=new File_Mpega;
- #endif
- break;
- case 0x6C : //JPEG
- #if defined(MEDIAINFO_JPEG_YES)
- Parser=new File_Jpeg;
- ((File_Jpeg*)Parser)->StreamKind=Stream_Video;
- #endif
- break;
- case 0x6D : //PNG
- #if defined(MEDIAINFO_PNG_YES)
- Parser=new File_Png;
- #endif
- break;
- case 0xA3 : //VC-1
- #if defined(MEDIAINFO_VC1_YES)
- Parser=new File_Vc1;
- #endif
- break;
- case 0xA4 : //Dirac
- #if defined(MEDIAINFO_DIRAC_YES)
- Parser=new File_Dirac;
- #endif
- break;
- case 0xA5 : //AC-3
- case 0xA6 : //E-AC-3
- case 0xD3 : //AC-3
- #if defined(MEDIAINFO_AC3_YES)
- Parser=new File_Ac3;
- #endif
- break;
- case 0xA9 : //DTS
- case 0xAA : //DTS HRA
- case 0xAB : //DTS MA
- case 0xAC : //DTS Express
- case 0xD4 : //DTS
- #if defined(MEDIAINFO_DTS_YES)
- Parser=new File_Dts;
- #endif
- break;
- case 0xDD :
- case 0xDE : //OGG
- #if defined(MEDIAINFO_OGG_YES)
- Parser=new File_Ogg;
- Parser->MustSynchronize=false;
- ((File_Ogg*)Parser)->SizedBlocks=true;
- #endif
- break;
- default: ;
- }
-
- Element_Code=(int64u)-1;
- Open_Buffer_Init(Parser);
-
- Element_ThisIsAList();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_05()
-{
- if (ObjectTypeId==0x00 && Parser==NULL) //If no ObjectTypeId detected
- {
- switch (KindOfStream)
- {
- case Stream_Video :
- #if defined(MEDIAINFO_MPEG4V_YES)
- delete Parser; Parser=new File_Mpeg4v;
- ((File_Mpeg4v*)Parser)->FrameIsAlwaysComplete=true;
- #endif
- break;
- case Stream_Audio :
- #if defined(MEDIAINFO_AAC_YES)
- delete Parser; Parser=new File_Aac;
- ((File_Aac*)Parser)->Mode=File_Aac::Mode_AudioSpecificConfig;
- #endif
- break;
- default: ;
- }
-
- Element_Code=(int64u)-1;
- Open_Buffer_Init(Parser);
- }
-
- if (Parser==NULL)
- {
- Skip_XX(Element_Size, "Unknown");
- return;
- }
-
- //Parser configuration before the parsing
- switch (ObjectTypeId)
- {
- case 0x60 :
- case 0x61 :
- case 0x62 :
- case 0x63 :
- case 0x64 :
- case 0x65 :
- case 0x6A : //MPEG Video
- #if defined(MEDIAINFO_MPEGV_YES)
- ((File_Mpegv*)Parser)->TimeCodeIsNotTrustable=true;
- #endif
- break;
- default: ;
- }
-
- //Parsing
- Open_Buffer_Continue(Parser);
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (ObjectTypeId!=0x21 || !Config->Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Get()) //0x21 is AVC
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- Demux_Level=2; //Container
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_Header);
- break;
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+Buffer_Offset), (size_t)Element_Size);
- std::string Data_Base64(Base64::encode(Data_Raw));
- Parser->Fill(KindOfStream, PosOfStream, "Demux_InitBytes", Data_Base64);
- if (PosOfStream<(*Parser->Stream_More)[KindOfStream].size())
- (*Parser->Stream_More)[KindOfStream][PosOfStream](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
- #endif //MEDIAINFO_DEMUX
-
- //Parser configuration after the parsing
- switch (ObjectTypeId)
- {
- case 0x60 :
- case 0x61 :
- case 0x62 :
- case 0x63 :
- case 0x64 :
- case 0x65 :
- case 0x6A : //MPEG Video
- #if defined(MEDIAINFO_MPEGV_YES)
- ((File_Mpegv*)Parser)->TimeCodeIsNotTrustable=false;
- #endif
- break;
- default: ;
- }
-
- //Positionning
- Element_Offset=Element_Size;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_06()
-{
- delete SLConfig; SLConfig=new slconfig;
-
- //Parsing
- int8u predefined;
- Get_B1 (predefined, "predefined"); Param_Info1(Mpeg4_Descriptors_Predefined(predefined));
- switch (predefined)
- {
- case 0x00 :
- {
- BS_Begin();
- Get_SB (SLConfig->useAccessUnitStartFlag, "useAccessUnitStartFlag");
- Get_SB (SLConfig->useAccessUnitEndFlag, "useAccessUnitEndFlag");
- Get_SB (SLConfig->useRandomAccessPointFlag, "useRandomAccessPointFlag");
- Get_SB (SLConfig->hasRandomAccessUnitsOnlyFlag, "hasRandomAccessUnitsOnlyFlag");
- Get_SB (SLConfig->usePaddingFlag, "usePaddingFlag");
- Get_SB (SLConfig->useTimeStampsFlag, "useTimeStampsFlag");
- Get_SB (SLConfig->useIdleFlag, "useIdleFlag");
- Get_SB (SLConfig->durationFlag, "durationFlag");
- BS_End();
- Get_B4 (SLConfig->timeStampResolution, "timeStampResolution");
- Get_B4( SLConfig->OCRResolution, "OCRResolution");
- Get_B1 (SLConfig->timeStampLength, "timeStampLength");
- Get_B1 (SLConfig->OCRLength, "OCRLength");
- Get_B1 (SLConfig->AU_Length, "AU_Length");
- Get_B1 (SLConfig->instantBitrateLength, "instantBitrateLength");
- BS_Begin();
- Get_S1 (4, SLConfig->degradationPriorityLength, "degradationPriorityLength");
- Get_S1 (5, SLConfig->AU_seqNumLength, "AU_seqNumLength");
- Get_S1 (5, SLConfig->packetSeqNumLength, "packetSeqNumLength");
- Skip_S1(2, "reserved");
- BS_End();
- }
- break;
- case 0x01 :
- SLConfig->useAccessUnitStartFlag =false;
- SLConfig->useAccessUnitEndFlag =false;
- SLConfig->useRandomAccessPointFlag =false;
- SLConfig->hasRandomAccessUnitsOnlyFlag =false;
- SLConfig->usePaddingFlag =false;
- SLConfig->useTimeStampsFlag =false;
- SLConfig->useIdleFlag =false;
- SLConfig->durationFlag =false; //-
- SLConfig->timeStampResolution =1000;
- SLConfig->OCRResolution =0; //-
- SLConfig->timeStampLength =32;
- SLConfig->OCRLength =0; //-
- SLConfig->AU_Length =0;
- SLConfig->instantBitrateLength =0; //-
- SLConfig->degradationPriorityLength =0;
- SLConfig->AU_seqNumLength =0;
- SLConfig->packetSeqNumLength =0;
- break;
- case 0x02 :
- SLConfig->useAccessUnitStartFlag =false;
- SLConfig->useAccessUnitEndFlag =false;
- SLConfig->useRandomAccessPointFlag =false;
- SLConfig->hasRandomAccessUnitsOnlyFlag =false;
- SLConfig->usePaddingFlag =false;
- SLConfig->useTimeStampsFlag =true;
- SLConfig->useIdleFlag =false;
- SLConfig->durationFlag =false;
- SLConfig->timeStampResolution =0; //-
- SLConfig->OCRResolution =0; //-
- SLConfig->timeStampLength =0;
- SLConfig->OCRLength =0;
- SLConfig->AU_Length =0;
- SLConfig->instantBitrateLength =0;
- SLConfig->degradationPriorityLength =0;
- SLConfig->AU_seqNumLength =0;
- SLConfig->packetSeqNumLength =0;
- break;
- default :
- SLConfig->useAccessUnitStartFlag =false;
- SLConfig->useAccessUnitEndFlag =false;
- SLConfig->useRandomAccessPointFlag =false;
- SLConfig->hasRandomAccessUnitsOnlyFlag =false;
- SLConfig->usePaddingFlag =false;
- SLConfig->useTimeStampsFlag =false;
- SLConfig->useIdleFlag =false;
- SLConfig->durationFlag =false;
- SLConfig->timeStampResolution =0;
- SLConfig->OCRResolution =0;
- SLConfig->timeStampLength =0;
- SLConfig->AU_Length =0;
- SLConfig->instantBitrateLength =0;
- SLConfig->degradationPriorityLength =0;
- SLConfig->AU_seqNumLength =0;
- SLConfig->packetSeqNumLength =0;
- }
- if (SLConfig->durationFlag)
- {
- Get_B4 (SLConfig->timeScale, "timeScale");
- Get_B2 (SLConfig->accessUnitDuration, "accessUnitDuration");
- Get_B2 (SLConfig->compositionUnitDuration, "compositionUnitDuration");
- }
- else
- {
- SLConfig->timeScale =0; //-
- SLConfig->accessUnitDuration =0; //-
- SLConfig->compositionUnitDuration =0; //-
- }
- if (!SLConfig->useTimeStampsFlag)
- {
- BS_Begin();
- Get_S8 (SLConfig->timeStampLength, SLConfig->startDecodingTimeStamp, "startDecodingTimeStamp");
- Get_S8 (SLConfig->timeStampLength, SLConfig->startCompositionTimeStamp, "startCompositionTimeStamp");
- BS_End();
- }
- else
- {
- SLConfig->startDecodingTimeStamp =0; //-
- SLConfig->startCompositionTimeStamp =0; //-
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_09()
-{
- //Parsing
- Skip_B2( "IPI_ES_Id");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_0E()
-{
- //Parsing
- Skip_B4( "Track_ID"); //ID of the track to use
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_0F()
-{
- //Parsing
- Skip_B2( "ref_index"); //track ref. index of the track to use
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_10()
-{
- Descriptor_02();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_Descriptors::Descriptor_11()
-{
- Descriptor_01();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEG4_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Descriptors.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Descriptors.h
deleted file mode 100644
index cb9deb81b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Descriptors.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG-4 files, Descriptors
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Mpeg4_DescriptorsH
-#define MediaInfo_Mpeg4_DescriptorsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Mpeg4_Descriptors
-//***************************************************************************
-
-class File_Mpeg4_Descriptors : public File__Analyze
-{
-public :
- //In
- stream_t KindOfStream;
- size_t PosOfStream;
- bool Parser_DoNotFreeIt; //If you want to keep the Parser
- bool SLConfig_DoNotFreeIt; //If you want to keep the SLConfig
-
- //Out
- File__Analyze* Parser;
- int16u ES_ID;
-
- struct slconfig
- {
- bool useAccessUnitStartFlag;
- bool useAccessUnitEndFlag;
- bool useRandomAccessPointFlag;
- bool hasRandomAccessUnitsOnlyFlag;
- bool usePaddingFlag;
- bool useTimeStampsFlag;
- bool useIdleFlag;
- bool durationFlag;
- int32u timeStampResolution;
- int32u OCRResolution;
- int8u timeStampLength;
- int8u OCRLength;
- int8u AU_Length;
- int8u instantBitrateLength;
- int8u degradationPriorityLength;
- int8u AU_seqNumLength;
- int8u packetSeqNumLength;
-
- int32u timeScale;
- int16u accessUnitDuration;
- int16u compositionUnitDuration;
-
- int64u startDecodingTimeStamp;
- int64u startCompositionTimeStamp;
- };
-
- slconfig* SLConfig;
-
-public :
- //Constructor/Destructor
- File_Mpeg4_Descriptors();
- ~File_Mpeg4_Descriptors();
-
-private :
- //Buffer
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Descriptor_00() {Skip_XX(Element_Size, "Data");};
- void Descriptor_01();
- void Descriptor_02() {Descriptor_01();}
- void Descriptor_03();
- void Descriptor_04();
- void Descriptor_05();
- void Descriptor_06();
- void Descriptor_07() {Skip_XX(Element_Size, "Data");};
- void Descriptor_08() {Skip_XX(Element_Size, "Data");};
- void Descriptor_09();
- void Descriptor_0A() {Skip_XX(Element_Size, "Data");};
- void Descriptor_0B() {Skip_XX(Element_Size, "Data");};
- void Descriptor_0C() {Skip_XX(Element_Size, "Data");};
- void Descriptor_0D() {Skip_XX(Element_Size, "Data");};
- void Descriptor_0E();
- void Descriptor_0F();
- void Descriptor_10();
- void Descriptor_11();
- void Descriptor_12() {Skip_XX(Element_Size, "Data");};
- void Descriptor_13() {Skip_XX(Element_Size, "Data");};
- void Descriptor_14() {Skip_XX(Element_Size, "Data");};
- void Descriptor_40() {Skip_XX(Element_Size, "Data");};
- void Descriptor_41() {Skip_XX(Element_Size, "Data");};
- void Descriptor_42() {Skip_XX(Element_Size, "Data");};
- void Descriptor_43() {Skip_XX(Element_Size, "Data");};
- void Descriptor_44() {Skip_XX(Element_Size, "Data");};
- void Descriptor_45() {Skip_XX(Element_Size, "Data");};
- void Descriptor_46() {Skip_XX(Element_Size, "Data");};
- void Descriptor_47() {Skip_XX(Element_Size, "Data");};
- void Descriptor_48() {Skip_XX(Element_Size, "Data");};
- void Descriptor_49() {Skip_XX(Element_Size, "Data");};
- void Descriptor_4A() {Skip_XX(Element_Size, "Data");};
- void Descriptor_4B() {Skip_XX(Element_Size, "Data");};
- void Descriptor_4C() {Skip_XX(Element_Size, "Data");};
- void Descriptor_60() {Skip_XX(Element_Size, "Data");};
- void Descriptor_61() {Skip_XX(Element_Size, "Data");};
- void Descriptor_62() {Skip_XX(Element_Size, "Data");};
- void Descriptor_63() {Skip_XX(Element_Size, "Data");};
- void Descriptor_64() {Skip_XX(Element_Size, "Data");};
- void Descriptor_65() {Skip_XX(Element_Size, "Data");};
- void Descriptor_66() {Skip_XX(Element_Size, "Data");};
- void Descriptor_67() {Skip_XX(Element_Size, "Data");};
- void Descriptor_68() {Skip_XX(Element_Size, "Data");};
- void Descriptor_69() {Skip_XX(Element_Size, "Data");};
-
- //Temp
- int8u ObjectTypeId;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Elements.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Elements.cpp
deleted file mode 100644
index 3737d9939..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Elements.cpp
+++ /dev/null
@@ -1,7086 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_MPEG4_YES
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mpeg4.h"
-#if defined(MEDIAINFO_DVDIF_YES)
- #include "MediaInfo/Multiple/File_DvDif.h"
-#endif
-#if defined(MEDIAINFO_MXF_YES)
- #include "MediaInfo/Multiple/File_Mxf.h"
-#endif
-#if defined(MEDIAINFO_AIC_YES)
- #include "MediaInfo/Video/File_Aic.h"
-#endif
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_H263_YES)
- #include "MediaInfo/Video/File_H263.h"
-#endif
-#if defined(MEDIAINFO_HEVC_YES)
- #include "MediaInfo/Video/File_Hevc.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_PRORES_YES)
- #include "MediaInfo/Video/File_ProRes.h"
-#endif
-#if defined(MEDIAINFO_VC1_YES)
- #include "MediaInfo/Video/File_Vc1.h"
-#endif
-#if defined(MEDIAINFO_VC3_YES)
- #include "MediaInfo/Video/File_Vc3.h"
-#endif
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_ChannelGrouping.h"
-#endif
-#if defined(MEDIAINFO_AMR_YES)
- #include "MediaInfo/Audio/File_Amr.h"
-#endif
-#if defined(MEDIAINFO_ADPCM_YES)
- #include "MediaInfo/Audio/File_Adpcm.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm.h"
-#endif
-#if defined(MEDIAINFO_CDP_YES)
- #include "MediaInfo/Text/File_Cdp.h"
-#endif
-#if defined(MEDIAINFO_EIA608_YES)
- #include "MediaInfo/Text/File_Eia608.h"
-#endif
-#if defined(MEDIAINFO_TIMEDTEXT_YES)
- #include "MediaInfo/Text/File_TimedText.h"
-#endif
-#if defined(MEDIAINFO_TTML_YES)
- #include "MediaInfo/Text/File_Ttml.h"
-#endif
-#if defined(MEDIAINFO_JPEG_YES)
- #include "MediaInfo/Image/File_Jpeg.h"
-#endif
-#include "MediaInfo/Multiple/File_Mpeg4_TimeCode.h"
-#include "ZenLib/FileName.h"
-#include "base64.h"
-#include <cmath>
-#include <zlib.h>
-#include <algorithm>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_Meta_Kind(int32u Kind)
-{
- switch (Kind)
- {
- case 0x00 : return "Binary";
- case 0x01 : return "UTF8";
- case 0x02 : return "UTF16";
- case 0x03 : return "Mac String";
- case 0x0E : return "Jpeg";
- case 0x15 : return "Signed Integer"; //the size of the integer is derived from the container size
- case 0x16 : return "Float 32";
- case 0x17 : return "Float 64";
- default : return "Unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_TypeModifierName(int32u TypeModifierName)
-{
- switch (TypeModifierName)
- {
- case 0x01 : return "Matrix";
- case 0x02 : return "Clip";
- case 0x03 : return "Volume";
- case 0x04 : return "Audio balance";
- case 0x05 : return "Graphic mode";
- case 0x06 : return "Matrix object";
- case 0x07 : return "Graphics mode object";
- case 0x76696465 : return "Image type";
- default : return "Unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_sample_depends_on[]=
-{
- "",
- "this sample does depend on others (not an I picture)",
- "this sample does not depend on others (I picture)",
- "reserved",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_sample_is_depended_on[]=
-{
- "",
- "other samples depend on this one (not disposable)",
- "no other sample depends on this one (disposable)",
- "reserved",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_sample_has_redundancy[]=
-{
- "",
- "there is redundant coding in this sample",
- "there is no redundant coding in this sample",
- "reserved",
-};
-
-//---------------------------------------------------------------------------
-Ztring Mpeg4_Vendor(int32u Vendor)
-{
- switch (Vendor)
- {
- case 0x46464D50 : return __T("FFMpeg");
- case 0x4D4F544F : return __T("Motorola");
- case 0x50484C50 : return __T("Philips");
- case 0x6170706C : return __T("Apple");
- case 0x6E6F6B69 : return __T("Nokia");
- case 0x6D6F746F : return __T("Motorola");
- default : return Ztring().From_CC4(Vendor);
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_chan(int16u Ordering)
-{
- //Source: http://developer.apple.com/library/mac/#documentation/MusicAudio/Reference/CACoreAudioReference/CoreAudioTypes/CompositePage.html
- //Arbitrary decision (0 = Front):
- //Front = 0-80
- //Side = 80-120
- //Rear = 120-180
- switch(Ordering)
- {
- case 100 : return "Front: C";
- case 101 : return "Front: L R";
- case 102 : return "Front: L R (Headphones)"; //With headphones
- case 103 : return "Front: L R (Matrix)"; //With matrix
- case 104 : return "Front: C S";
- case 105 : return "Front: X Y";
- case 106 : return "Front: L R (Binaural)";
- case 107 : return "Front: W X Y Z";
- case 108 : return "Front: L R, Side: L R";
- case 109 : return "Front: L C R, Rear: L R";
- case 110 : return "Front: L C R, Rear: L C R";
- case 111 : return "Front: L C R, Side: L R, Rear: L C R";
- case 112 : return "Front: L R, TopFront: L R, Rear: L R, TopRear: L R";
- case 113 : return "Front: L C R";
- case 114 : return "Front: L C R";
- case 115 : return "Front: L C R, Rear: C";
- case 116 : return "Front: L C R, Rear: C";
- case 117 : return "Front: L C R, Side: L R";
- case 118 : return "Front: L C R, Side: L R";
- case 119 : return "Front: L C R, Side: L R";
- case 120 : return "Front: L C R, Side: L R";
- case 121 : return "Front: L C R, Side: L R, LFE";
- case 122 : return "Front: L C R, Side: L R, LFE";
- case 123 : return "Front: L C R, Side: L R, LFE";
- case 124 : return "Front: L C R, Side: L R, LFE";
- case 125 : return "Front: L C R, Side: L C R";
- case 126 : return "Front: L Lc C Rc R, Side: L R";
- case 127 : return "Front: L Lc Rc R, Side: L R, LFE";
- case 128 : return "Front: L C R, Side: L R, Rear: L R, LFE";
- case 129 : return "Front: L C R, Side: L R, Rear: L R, LFE";
- case 130 : return "Front: L C R, Side: L R, LF, Front: L R (Matrix)";
- case 131 : return "Front: L R, Rear: C";
- case 132 : return "Front: L R, Side: L R";
- case 133 : return "Front: L R, LFE";
- case 134 : return "Front: L R, Rear: C, LFE";
- case 135 : return "Front: L C R, Side: L R, LFE";
- case 136 : return "Front: L C R, LFE";
- case 137 : return "Front: L C R, Rear: C, LFE";
- case 138 : return "Front: L R, Rear: L R, LFE";
- case 139 : return "Front: L C R, Rear: L R, LFE";
- case 140 : return "Front: L C R, Side: L R, Rear: L R";
- case 141 : return "Front: L C R, Side: L R, Rear: C";
- case 142 : return "Front: L C R, Side: L R, Rear: C, LFE";
- case 143 : return "Front: L C R, Side: L R, Rear: L R";
- case 144 : return "Front: L C R, Side: L R, Rear: L C R";
- case 145 : return "Front: Lw L C R Rw, TopFront: L C R, Side: L R, Rear: L C Cd R, LFE: L R"; //d=direct, all must be confirmed
- case 146 : return "Front: Lw L Lc C Rc R Rw, TopFront: L C R, Side: L R, Rear: L C Cd R, LFE: L R, HI, VI, Haptic"; //d=direct, all must be confirmed
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_chan_Layout(int16u Ordering)
-{
- //Source: http://developer.apple.com/library/mac/#documentation/MusicAudio/Reference/CACoreAudioReference/CoreAudioTypes/CompositePage.html
- // L - left
- // R - right
- // C - center
- // Ls - left surround
- // Rs - right surround
- // Cs - center surround
- // Rls - rear left surround
- // Rrs - rear right surround
- // Lw - left wide
- // Rw - right wide
- // Lsd - left surround direct
- // Rsd - right surround direct
- // Lc - left center
- // Rc - right center
- // Ts - top surround
- // Vhl - vertical height left
- // Vhc - vertical height center
- // Vhr - vertical height right
- // Lt - left matrix total. for matrix encoded stereo.
- // Rt - right matrix total. for matrix encoded stereo.
- switch(Ordering)
- {
- case 100 : return "C";
- case 101 : return "L R";
- case 102 : return "L R"; //With headphones
- case 103 : return "Lt Rt"; //L R with matrix
- case 104 : return "M S";
- case 105 : return "X Y";
- case 106 : return "L R";
- case 107 : return "W X Y Z";
- case 108 : return "L R Ls Rs";
- case 109 : return "L R Lrs Rrs C";
- case 110 : return "L R Lrs Rrs C Cs";
- case 111 : return "L R Lrs Rrs C Crs, Ls, Rs";
- case 112 : return "L R Lrs Rrs Vhl Vhr, Vhlrs, Vhrrs";
- case 113 : return "L R C";
- case 114 : return "C L R";
- case 115 : return "L R C Cs";
- case 116 : return "C L R Cs";
- case 117 : return "L R C Ls Rs";
- case 118 : return "L R Ls Rs C";
- case 119 : return "L C R Ls Rs";
- case 120 : return "C L R Ls Rs";
- case 121 : return "L R C LFE Ls Rs";
- case 122 : return "L R Ls Rs C LFE";
- case 123 : return "L C R Ls Rs LFE";
- case 124 : return "C L R Ls Rs LFE";
- case 125 : return "L R C LFE Ls Rs Cs";
- case 126 : return "L R C LFE Ls Rs Lc Rc";
- case 127 : return "C Lc Rc L R Ls Rs LFE";
- case 128 : return "L R C LFE Ls R Rls Rrs";
- case 129 : return "L R Ls Rs C LFE Lc Rc";
- case 130 : return "L R C LFE Ls Rs Lt Rt";
- case 131 : return "L R Cs";
- case 132 : return "L R Ls Rs";
- case 133 : return "L R LFE";
- case 134 : return "L R LFE Cs";
- case 135 : return "L R LFE Ls Rs";
- case 136 : return "L R C LFE";
- case 137 : return "L R C LFE Cs";
- case 138 : return "L R Ls Rs LFE";
- case 139 : return "L R Ls Rs C Cs";
- case 140 : return "L R Ls Rs C Rls Rrs";
- case 141 : return "C L R Ls Rs Cs ";
- case 142 : return "C L R Ls Rs Cs LFE";
- case 143 : return "C L R Ls Rs Rls Rrs";
- case 144 : return "C L R Ls Rs Rls Rrs Cs";
- case 145 : return "L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2";
- case 146 : return "L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2 Lc Rc HI VI Haptic";
- case 147 : return "";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-std::string Mpeg4_chan_ChannelDescription (int64u ChannelLabels)
-{
- std::string Text;
- if ((ChannelLabels&0x000E)!=0x0000)
- Text+="Front:";
- if (ChannelLabels&0x0002)
- Text+=" L";
- if (ChannelLabels&0x0008)
- Text+=" C";
- if (ChannelLabels&0x0004)
- Text+=" R";
-
- if ((ChannelLabels&0x0C00)!=0x0000)
- {
- if (!Text.empty())
- Text+=", ";
- Text+="Side:";
- }
- if (ChannelLabels&0x0400)
- Text+=" L";
- if (ChannelLabels&0x0800)
- Text+=" R";
-
- if ((ChannelLabels&0x0260)!=0x0000)
- {
- if (!Text.empty())
- Text+=", ";
- Text+="Back:";
- }
- if (ChannelLabels&0x0020)
- Text+=" L";
- if (ChannelLabels&0x0200)
- Text+=" C";
- if (ChannelLabels&0x0040)
- Text+=" R";
-
- if ((ChannelLabels&0x0010)!=0x0000)
- {
- if (!Text.empty())
- Text+=", ";
- Text+="LFE";
- }
-
- if (ChannelLabels&0x000000C000000000LL)
- {
- if (!Text.empty())
- Text+=", ";
- Text+="Front:";
- }
- if (ChannelLabels&0x0000004000000000LL)
- Text+=" L";
- if (ChannelLabels&0x0000008000000000LL)
- Text+=" R";
- if (ChannelLabels&0x000000C000000000LL)
- Text+=" (Matrix)";
-
- return Text;
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_chan_ChannelDescription_Layout (int32u ChannelLabel)
-{
- switch(ChannelLabel)
- {
- case 1 : return "L";
- case 2 : return "R";
- case 3 : return "C";
- case 4 : return "LFE";
- case 5 : return "Ls";
- case 6 : return "Rs";
- case 7 : return "Lc";
- case 8 : return "Rc";
- case 9 : return "Cs";
- case 10 : return "Lsd";
- case 11 : return "Rsd";
- case 12 : return "Tcs";
- case 13 : return "Vhl";
- case 14 : return "Vhc";
- case 15 : return "Vhr";
- case 16 : return "Trs";
- case 17 : return "Trs";
- case 18 : return "Trs";
- case 33 : return "Lrs";
- case 34 : return "Rrs";
- case 35 : return "Lw";
- case 36 : return "Rw";
- case 37 : return "LFE2";
- case 38 : return "Lt";
- case 39 : return "Rt";
- case 200 : return "W";
- case 201 : return "X";
- case 202 : return "Y";
- case 203 : return "Z";
- case 204 : return "M";
- case 205 : return "S";
- case 206 : return "X";
- case 207 : return "Y";
- case 0x10000 : return "Discrete-0";
- case 0x10001 : return "Discrete-1";
- case 0x10002 : return "Discrete-2";
- case 0x10003 : return "Discrete-3";
- case 0x10004 : return "Discrete-4";
- case 0x10005 : return "Discrete-5";
- case 0x10006 : return "Discrete-6";
- case 0x10007 : return "Discrete-7";
- case 0x10008 : return "Discrete-8";
- case 0x10009 : return "Discrete-9";
- case 0x1000A : return "Discrete-10";
- case 0x1000B : return "Discrete-11";
- case 0x1000C : return "Discrete-12";
- case 0x1000D : return "Discrete-13";
- case 0x1000E : return "Discrete-14";
- case 0x1000F : return "Discrete-15";
- default : return "?";
- }
-}
-
-//---------------------------------------------------------------------------
-std::string Mpeg4_chan_ChannelBitmap (int32u ChannelBitmap)
-{
- std::string Text;
- if ((ChannelBitmap&0x0007)!=0x0000)
- Text+="Front:";
- if (ChannelBitmap&0x0001)
- Text+=" L";
- if (ChannelBitmap&0x0004)
- Text+=" C";
- if (ChannelBitmap&0x0002)
- Text+=" R";
-
- if ((ChannelBitmap&0x0600)!=0x0000)
- Text+=", Side:";
- if (ChannelBitmap&0x0200)
- Text+=" L";
- if (ChannelBitmap&0x0400)
- Text+=" R";
-
- if ((ChannelBitmap&0x0130)!=0x0000)
- Text+=", Back:";
- if (ChannelBitmap&0x0010)
- Text+=" L";
- if (ChannelBitmap&0x0100)
- Text+=" C";
- if (ChannelBitmap&0x0020)
- Text+=" R";
-
- if ((ChannelBitmap&0x0008)!=0x0000)
- Text+=", LFE";
-
- return Text;
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_chan_ChannelBitmap_Layout (int32u ChannelBitmap)
-{
- switch(ChannelBitmap)
- {
- case 0 : return "L"; // Left
- case 1 : return "R"; // Right
- case 2 : return "C"; // Center
- case 3 : return "LFE"; // LFEScreen
- case 4 : return "Ls"; // LeftSurround / Back Left
- case 5 : return "Rs"; // RightSurround / Back Right
- case 6 : return "?"; // LeftCenter
- case 7 : return "?"; // RightCenter
- case 8 : return "Cs"; // CenterSurround / Back Center
- case 9 : return "Lsd"; // LeftSurroundDirect / Side Left
- case 10 : return "Rsd"; // RightSurroundDirect / Side Right
- case 11 : return "?"; // TopCenterSurround
- case 12 : return "?"; // VerticalHeightLeft / Top Front Left
- case 13 : return "?"; // VerticalHeightCenter / Top Front Center
- case 14 : return "?"; // VerticalHeightRight / Top Front Right"
- case 15 : return "?"; // TopBackLeft
- case 16 : return "?"; // TopBackCenter
- case 17 : return "?"; // TopBackRight
- default : return "?";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_jp2h_METH(int8u METH)
-{
- switch (METH)
- {
- case 0x01 : return "Enumerated colourspace";
- case 0x02 : return "Restricted ICC profile";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_jp2h_EnumCS(int32u EnumCS)
-{
- switch (EnumCS)
- {
- case 0x10 : return "RGB"; //sRGB
- case 0x11 : return "Y";
- case 0x12 : return "YUV"; //sYUV
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpegv_colour_primaries(int8u colour_primaries);
-const char* Mpegv_transfer_characteristics(int8u transfer_characteristics);
-const char* Mpegv_matrix_coefficients(int8u matrix_coefficients);
-
-//---------------------------------------------------------------------------
-// DTS
-#if defined(MEDIAINFO_DTS_YES)
- extern const char* DTS_ChannelPositions[16];
- extern const char* DTS_ChannelPositions2[16];
- extern std::string DTS_HD_SpeakerActivityMask (int16u SpeakerActivityMask);
- extern std::string DTS_HD_SpeakerActivityMask2 (int16u SpeakerActivityMask);
-#endif //defined(MEDIAINFO_DTS_YES)
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- const int64u bloc=0x626C6F63;
- const int64u cdat=0x63646174;
- const int64u cdt2=0x63647432;
- const int64u free=0x66726565;
- const int64u ftyp=0x66747970;
- const int64u ftyp_qt=0x71742020;
- const int64u ftyp_dash=0x64617368;
- const int64u ftyp_isom=0x69736F6D;
- const int64u ftyp_caqv=0x63617176;
- const int64u idat=0x69646174;
- const int64u idsc=0x69647363;
- const int64u jp2c=0x6A703263;
- const int64u jp2h=0x6A703268;
- const int64u jp2h_ihdr=0x69686472;
- const int64u jp2h_colr=0x636F6C72;
- const int64u mdat=0x6D646174;
- const int64u mfra=0x6D667261;
- const int64u mfra_mfro=0x6D66726F;
- const int64u mfra_tfra=0x74667261;
- const int64u moof=0x6D6F6F66;
- const int64u moof_mfhd=0x6D666864;
- const int64u moof_traf=0x74726166;
- const int64u moof_traf_sdtp=0x73647470;
- const int64u moof_traf_tfhd=0x74666864;
- const int64u moof_traf_trun=0x7472756E;
- const int64u moov=0x6D6F6F76;
- const int64u moov_ainf=0x61696E66;
- const int64u moov_cmov=0x636D6F76;
- const int64u moov_cmov_cmvd=0x636D7664;
- const int64u moov_cmov_dcom=0x64636F6D;
- const int64u moov_cmov_dcom_zlib=0x7A6C6962;
- const int64u moov_ctab=0x63746162;
- const int64u moov_iods=0x696F6473;
- const int64u moov_meta=0x6D657461;
- const int64u moov_meta______=0x2D2D2D2D;
- const int64u moov_meta___day=0xA9646179;
- const int64u moov_meta__disk=0x6469736B;
- const int64u moov_meta__trkn=0x74726B6E;
- const int64u moov_meta__trng=0x74726E67;
- const int64u moov_meta__covr=0x636F7672;
- const int64u moov_meta__gnre=0x676E7265;
- const int64u moov_meta_bxml=0x62786D6C;
- const int64u moov_meta_hdlr=0x68646C72;
- const int64u moov_meta_hdlr_mdir=0x6D646972;
- const int64u moov_meta_hdlr_mdta=0x6D647461;
- const int64u moov_meta_hdlr_mp7b=0x6D703762;
- const int64u moov_meta_hdlr_mp7t=0x6D703774;
- const int64u moov_meta_keys=0x6B657973;
- const int64u moov_meta_keys_mdta=0x6D647461;
- const int64u moov_meta_ilst=0x696C7374;
- const int64u moov_meta_ilst_xxxx_data=0x64617461;
- const int64u moov_meta_ilst_xxxx_mean=0x6D65616E;
- const int64u moov_meta_ilst_xxxx_name=0x6E616D65;
- const int64u moov_meta_xml=0x786D6C20;
- const int64u moov_mvex=0x6D766578;
- const int64u moov_mvex_mehd=0x6D656864;
- const int64u moov_mvex_trex=0x74726578;
- const int64u moov_mvhd=0x6D766864;
- const int64u moov_trak=0x7472616B;
- const int64u moov_trak_edts=0x65647473;
- const int64u moov_trak_edts_elst=0x656C7374;
- const int64u moov_trak_load=0x6C6F6164;
- const int64u moov_trak_mdia=0x6D646961;
- const int64u moov_trak_mdia_hdlr=0x68646C72;
- const int64u moov_trak_mdia_hdlr_alis=0x616C6973;
- const int64u moov_trak_mdia_hdlr_clcp=0x636C6370;
- const int64u moov_trak_mdia_hdlr_data=0x64617461;
- const int64u moov_trak_mdia_hdlr_hint=0x68696E74;
- const int64u moov_trak_mdia_hdlr_MPEG=0x4D504547;
- const int64u moov_trak_mdia_hdlr_ocsm=0x6F63736D;
- const int64u moov_trak_mdia_hdlr_odsm=0x6F64736D;
- const int64u moov_trak_mdia_hdlr_sbtl=0x7362746C;
- const int64u moov_trak_mdia_hdlr_sdsm=0x7364736D;
- const int64u moov_trak_mdia_hdlr_soun=0x736F756E;
- const int64u moov_trak_mdia_hdlr_subt=0x73756274;
- const int64u moov_trak_mdia_hdlr_subp=0x73756270;
- const int64u moov_trak_mdia_hdlr_text=0x74657874;
- const int64u moov_trak_mdia_hdlr_twen=0x7477656E;
- const int64u moov_trak_mdia_hdlr_tmcd=0x746D6364;
- const int64u moov_trak_mdia_hdlr_vide=0x76696465;
- const int64u moov_trak_mdia_imap=0x696D6170;
- const int64u moov_trak_mdia_imap_sean=0x7365616E;
- const int64u moov_trak_mdia_imap_sean___in=0x0000696E;
- const int64u moov_trak_mdia_imap_sean___in___ty=0x00007479;
- const int64u moov_trak_mdia_imap_sean___in_dtst=0x64747374;
- const int64u moov_trak_mdia_imap_sean___in_obid=0x6F626964;
- const int64u moov_trak_mdia_mdhd=0x6D646864;
- const int64u moov_trak_mdia_minf=0x6D696E66;
- const int64u moov_trak_mdia_minf_code=0x636F6465;
- const int64u moov_trak_mdia_minf_code_sean=0x7365616E;
- const int64u moov_trak_mdia_minf_code_sean_RU_A=0x52552A41;
- const int64u moov_trak_mdia_minf_dinf=0x64696E66;
- const int64u moov_trak_mdia_minf_dinf_url_=0x75726C20;
- const int64u moov_trak_mdia_minf_dinf_urn_=0x75726E20;
- const int64u moov_trak_mdia_minf_dinf_dref=0x64726566;
- const int64u moov_trak_mdia_minf_dinf_dref_alis=0x616C6973;
- const int64u moov_trak_mdia_minf_dinf_dref_rsrc=0x72737263;
- const int64u moov_trak_mdia_minf_dinf_dref_url_=0x75726C20;
- const int64u moov_trak_mdia_minf_dinf_derf_urn_=0x75726E20;
- const int64u moov_trak_mdia_minf_gmhd=0x676D6864;
- const int64u moov_trak_mdia_minf_gmhd_gmin=0x676D696E;
- const int64u moov_trak_mdia_minf_gmhd_tmcd=0x746D6364;
- const int64u moov_trak_mdia_minf_gmhd_tmcd_tcmi=0x74636D69;
- const int64u moov_trak_mdia_minf_gmhd_tcmi=0x74636D69;
- const int64u moov_trak_mdia_minf_hint=0x68696E74;
- const int64u moov_trak_mdia_minf_hdlr=0x68646C72;
- const int64u moov_trak_mdia_minf_hmhd=0x686D6864;
- const int64u moov_trak_mdia_minf_nmhd=0x6E6D6864;
- const int64u moov_trak_mdia_minf_smhd=0x736D6864;
- const int64u moov_trak_mdia_minf_stbl=0x7374626C;
- const int64u moov_trak_mdia_minf_stbl_co64=0x636F3634;
- const int64u moov_trak_mdia_minf_stbl_cslg=0x63736C67;
- const int64u moov_trak_mdia_minf_stbl_ctts=0x63747473;
- const int64u moov_trak_mdia_minf_stbl_sdtp=0x73647470;
- const int64u moov_trak_mdia_minf_stbl_stco=0x7374636F;
- const int64u moov_trak_mdia_minf_stbl_stdp=0x73746470;
- const int64u moov_trak_mdia_minf_stbl_stps=0x73747073;
- const int64u moov_trak_mdia_minf_stbl_stsc=0x73747363;
- const int64u moov_trak_mdia_minf_stbl_stsd=0x73747364;
- const int64u moov_trak_mdia_minf_stbl_stsd_alac=0x616C6163;
- const int64u moov_trak_mdia_minf_stbl_stsd_mp4a=0x6D703461;
- const int64u moov_trak_mdia_minf_stbl_stsd_mp4s=0x6D703473;
- const int64u moov_trak_mdia_minf_stbl_stsd_mp4v=0x6D703476;
- const int64u moov_trak_mdia_minf_stbl_stsd_stpp=0x73747070;
- const int64u moov_trak_mdia_minf_stbl_stsd_stpp_btrt=0x62747274;
- const int64u moov_trak_mdia_minf_stbl_stsd_text=0x74657874;
- const int64u moov_trak_mdia_minf_stbl_stsd_tmcd=0x746D6364;
- const int64u moov_trak_mdia_minf_stbl_stsd_tmcd_name=0x6E616D65;
- const int64u moov_trak_mdia_minf_stbl_stsd_tx3g=0x74783367;
- const int64u moov_trak_mdia_minf_stbl_stsd_tx3g_ftab=0x66746162;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_alac=0x616C6163;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_ACLR=0x41434C52;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_APRG=0x41505247;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_ARES=0x41524553;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_avcC=0x61766343;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_bitr=0x62697472;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_btrt=0x62747274;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_clap=0x636C6170;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_chan=0x6368616E;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_colr=0x636F6C72;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_d263=0x64323633;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_dac3=0x64616333;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_damr=0x64616D72;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_dec3=0x64656333;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_ddts=0x64647473;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_dvc1=0x64766331;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_esds=0x65736473;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_fiel=0x6669656C;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_glbl=0x676C626C;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_hvcC=0x68766343;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_idfm=0x6964666D;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_atom=0x61746F6D;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_qtat=0x71746174;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_fxat=0x66786174;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_priv=0x70726976;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_subs=0x73756273;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_cspc=0x63737063;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_jp2h=0x6A703268;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_jp2h_colr=0x636F6C72;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_jp2h_ihdr=0x69686472;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_pasp=0x70617370;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_sinf=0x73696E66;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_frma=0x66726D61;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_imif=0x696D6966;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_schi=0x73636869;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_schm=0x7363686D;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_wave=0x77617665;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_wave_acbf=0x61636266;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_wave_enda=0x656E6461;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_wave_frma=0x66726D61;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_wave_samr=0x73616D72;
- const int64u moov_trak_mdia_minf_stbl_stsd_xxxx_wave_srcq=0x73726371;
- const int64u moov_trak_mdia_minf_stbl_stsh=0x73747368;
- const int64u moov_trak_mdia_minf_stbl_stss=0x73747373;
- const int64u moov_trak_mdia_minf_stbl_stsz=0x7374737A;
- const int64u moov_trak_mdia_minf_stbl_stts=0x73747473;
- const int64u moov_trak_mdia_minf_stbl_stz2=0x73747A32;
- const int64u moov_trak_mdia_minf_sthd=0x73746864;
- const int64u moov_trak_mdia_minf_vmhd=0x766D6864;
- const int64u moov_trak_meta=0x6D657461;
- const int64u moov_trak_meta______=0x2D2D2D2D;
- const int64u moov_trak_meta___day=0xA9646179;
- const int64u moov_trak_meta__disk=0x6469736B;
- const int64u moov_trak_meta__trkn=0x74726B6E;
- const int64u moov_trak_meta__trng=0x74726E67;
- const int64u moov_trak_meta__covr=0x636F7672;
- const int64u moov_trak_meta__gnre=0x676E7265;
- const int64u moov_trak_meta_bxml=0x62786D6C;
- const int64u moov_trak_meta_hdlr=0x68646C72;
- const int64u moov_trak_meta_hdlr_mdir=0x6D646972;
- const int64u moov_trak_meta_hdlr_mdta=0x6D647461;
- const int64u moov_trak_meta_hdlr_mp7b=0x6D703762;
- const int64u moov_trak_meta_hdlr_mp7t=0x6D703774;
- const int64u moov_trak_meta_keys=0x6B657973;
- const int64u moov_trak_meta_keys_mdta=0x6D647461;
- const int64u moov_trak_meta_ilst=0x696C7374;
- const int64u moov_trak_meta_ilst_xxxx_data=0x64617461;
- const int64u moov_trak_meta_ilst_xxxx_mean=0x6D65616E;
- const int64u moov_trak_meta_ilst_xxxx_name=0x6E616D65;
- const int64u moov_trak_meta_xml=0x786D6C20;
- const int64u moov_trak_tapt=0x74617074;
- const int64u moov_trak_tapt_clef=0x636C6566;
- const int64u moov_trak_tapt_enof=0x656E6F66;
- const int64u moov_trak_tapt_prof=0x70726F66;
- const int64u moov_trak_tkhd=0x746B6864;
- const int64u moov_trak_tref=0x74726566;
- const int64u moov_trak_tref_dpnd=0x64706E64;
- const int64u moov_trak_tref_chap=0x63686170;
- const int64u moov_trak_tref_clcp=0x636C6370;
- const int64u moov_trak_tref_fall=0x66616C6C;
- const int64u moov_trak_tref_folw=0x666F6C77;
- const int64u moov_trak_tref_forc=0x666F7263;
- const int64u moov_trak_tref_hint=0x68696E74;
- const int64u moov_trak_tref_ipir=0x69706972;
- const int64u moov_trak_tref_mpod=0x6D706F64;
- const int64u moov_trak_tref_scpt=0x73637074;
- const int64u moov_trak_tref_ssrc=0x73737263;
- const int64u moov_trak_tref_sync=0x73796E63;
- const int64u moov_trak_tref_tmcd=0x746D6364;
- const int64u moov_udta=0x75647461;
- const int64u moov_udta_AllF=0x416C6C46;
- const int64u moov_udta_chpl=0x6368706C;
- const int64u moov_udta_clsf=0x636C7366;
- const int64u moov_udta_DcMD=0x44634D44;
- const int64u moov_udta_DcMD_Cmbo=0x436D626F;
- const int64u moov_udta_DcMD_DcME=0x44634D45;
- const int64u moov_udta_DcMD_DcME_Keyw=0x4B657977;
- const int64u moov_udta_DcMD_DcME_Mtmd=0x4D746D64;
- const int64u moov_udta_DcMD_DcME_Rate=0x52617465;
- const int64u moov_udta_FIEL=0x4649454C;
- const int64u moov_udta_FXTC=0x46585443;
- const int64u moov_udta_hinf=0x68696E66;
- const int64u moov_udta_hinv=0x68696E76;
- const int64u moov_udta_hnti=0x686E7469;
- const int64u moov_udta_hnti_rtp=0x72747020;
- const int64u moov_udta_ID32=0x49443332;
- const int64u moov_udta_kywd=0x6B797764;
- const int64u moov_udta_loci=0x6C6F6369;
- const int64u moov_udta_LOOP=0x4C4F4F50;
- const int64u moov_udta_MCPS=0x4D435053;
- const int64u moov_udta_meta=0x6D657461;
- const int64u moov_udta_meta_hdlr=0x68646C72;
- const int64u moov_udta_meta_ilst=0x696C7374;
- const int64u moov_udta_meta_ilst_xxxx_data=0x64617461;
- const int64u moov_udta_meta_ilst_xxxx_mean=0x6D65616E;
- const int64u moov_udta_meta_ilst_xxxx_name=0x6E616D65;
- const int64u moov_udta_ndrm=0x6E64726D;
- const int64u moov_udta_nsav=0x6E736176;
- const int64u moov_udta_ptv =0x70747620;
- const int64u moov_udta_rtng=0x72746E67;
- const int64u moov_udta_Sel0=0x53656C30;
- const int64u moov_udta_tags=0x74616773;
- const int64u moov_udta_tags_meta=0x6D657461;
- const int64u moov_udta_tags_tseg=0x74736567;
- const int64u moov_udta_tags_tseg_tshd=0x74736864;
- const int64u moov_udta_WLOC=0x574C4F43;
- const int64u moov_udta_XMP_=0x584D505F;
- const int64u moov_udta_yrrc=0x79727263;
- const int64u pdin=0x7064696E;
- const int64u PICT=0x50494354;
- const int64u pckg=0x70636B67;
- const int64u pnot=0x706E6F74;
- const int64u RDAO=0x5244414F;
- const int64u RDAS=0x52444153;
- const int64u RDVO=0x5244564F;
- const int64u RDVS=0x52445653;
- const int64u RED1=0x52454431;
- const int64u REDA=0x52454441;
- const int64u REDV=0x52454456;
- const int64u REOB=0x52454F42;
- const int64u skip=0x736B6970;
- const int64u wide=0x77696465;
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg4_Description(int32u Description)
-{
- switch (Description)
- {
- case Elements::moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_atom : return "Classic atom structure";
- case Elements::moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_qtat : return "QT atom structure";
- case Elements::moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_fxat : return "Effect";
- case Elements::moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_priv : return "Private";
- case Elements::moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_subs : return "Substitute if main codec not available";
- case Elements::moov_trak_mdia_minf_stbl_stsd_xxxx_idfm_cspc : return "Native pixel format";
- default : return "Unknown";
- }
-}
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::Data_Parse()
-{
- //mdat
- if (IsParsing_mdat)
- {
- mdat_xxxx();
- return;
- }
-
- //Padding
- if (!Element_Code && !Element_Size)
- return;
-
- //Parsing
- DATA_BEGIN
- ATOM(bloc)
- ATOM(cdat)
- ATOM(cdt2)
- LIST_SKIP(free)
- ATOM(ftyp)
- ATOM(idat)
- ATOM(idsc)
- ATOM(jp2c)
- LIST(jp2h)
- ATOM_BEGIN
- ATOM(jp2h_colr)
- ATOM(jp2h_ihdr)
- ATOM_END
- LIST(mdat)
- ATOM_DEFAULT_ALONE(mdat_xxxx)
- LIST(mfra)
- ATOM_BEGIN
- ATOM(mfra_mfro)
- ATOM(mfra_tfra)
- ATOM_END
- LIST(moof)
- ATOM_BEGIN
- ATOM(moof_mfhd)
- LIST(moof_traf)
- ATOM_BEGIN
- ATOM(moof_traf_sdtp)
- ATOM(moof_traf_tfhd)
- ATOM(moof_traf_trun)
- ATOM_END
- ATOM_END
- LIST(moov)
- ATOM_BEGIN
- ATOM(moov_ainf)
- LIST(moov_cmov)
- ATOM_BEGIN
- ATOM(moov_cmov_dcom)
- ATOM(moov_cmov_cmvd)
- ATOM_END
- ATOM(moov_ctab)
- ATOM(moov_iods)
- LIST(moov_meta)
- ATOM_BEGIN
- ATOM(moov_meta_bxml)
- LIST(moov_meta_keys)
- ATOM_BEGIN
- ATOM(moov_meta_keys_mdta)
- ATOM_END
- ATOM(moov_meta_hdlr)
- LIST(moov_meta_ilst)
- LIST_DEFAULT_ALONE_BEGIN (moov_meta_ilst_xxxx)
- ATOM_BEGIN
- ATOM (moov_meta_ilst_xxxx_data)
- ATOM (moov_meta_ilst_xxxx_mean)
- ATOM (moov_meta_ilst_xxxx_name)
- ATOM_END
- LIST_DEFAULT_ALONE_END
- ATOM(moov_meta_xml)
- ATOM_END
- LIST(moov_mvex)
- ATOM_BEGIN
- ATOM(moov_mvex_mehd)
- ATOM(moov_mvex_trex)
- ATOM_END
- ATOM(moov_mvhd)
- LIST(moov_trak)
- ATOM_BEGIN
- LIST(moov_trak_edts)
- ATOM_BEGIN
- ATOM(moov_trak_edts_elst)
- ATOM_END
- ATOM(moov_trak_load)
- LIST(moov_trak_mdia)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_hdlr)
- LIST(moov_trak_mdia_imap)
- ATOM_BEGIN
- LIST(moov_trak_mdia_imap_sean)
- ATOM_BEGIN
- LIST(moov_trak_mdia_imap_sean___in)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_imap_sean___in___ty)
- ATOM(moov_trak_mdia_imap_sean___in_dtst)
- ATOM(moov_trak_mdia_imap_sean___in_obid)
- ATOM_END
- ATOM_END
- ATOM_END
- ATOM(moov_trak_mdia_mdhd)
- LIST(moov_trak_mdia_minf)
- ATOM_BEGIN
- LIST(moov_trak_mdia_minf_code)
- ATOM_BEGIN
- LIST(moov_trak_mdia_minf_code_sean)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_code_sean_RU_A)
- ATOM_END
- ATOM_END
- LIST(moov_trak_mdia_minf_dinf)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_dinf_url_)
- ATOM(moov_trak_mdia_minf_dinf_urn_)
- LIST(moov_trak_mdia_minf_dinf_dref)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_dinf_dref_alis)
- ATOM(moov_trak_mdia_minf_dinf_dref_rsrc)
- ATOM(moov_trak_mdia_minf_dinf_url_)
- ATOM(moov_trak_mdia_minf_dinf_urn_)
- ATOM_END
- ATOM_END
- ATOM(moov_trak_mdia_minf_hdlr)
- LIST(moov_trak_mdia_minf_gmhd)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_gmhd_gmin)
- LIST(moov_trak_mdia_minf_gmhd_tmcd)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_gmhd_tmcd_tcmi)
- ATOM_END
- ATOM(moov_trak_mdia_minf_gmhd_tcmi)
- ATOM_END
- ATOM(moov_trak_mdia_minf_hint)
- ATOM(moov_trak_mdia_minf_hmhd)
- ATOM(moov_trak_mdia_minf_nmhd)
- ATOM(moov_trak_mdia_minf_smhd)
- LIST(moov_trak_mdia_minf_stbl)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_stbl_co64)
- ATOM(moov_trak_mdia_minf_stbl_cslg)
- ATOM(moov_trak_mdia_minf_stbl_ctts)
- ATOM(moov_trak_mdia_minf_stbl_sdtp)
- ATOM(moov_trak_mdia_minf_stbl_stco)
- ATOM(moov_trak_mdia_minf_stbl_stdp)
- ATOM(moov_trak_mdia_minf_stbl_stps)
- ATOM(moov_trak_mdia_minf_stbl_stsc)
- LIST(moov_trak_mdia_minf_stbl_stsd)
- ATOM_BEGIN
- LIST(moov_trak_mdia_minf_stbl_stsd_stpp)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_stbl_stsd_stpp_btrt)
- ATOM_END
- ATOM(moov_trak_mdia_minf_stbl_stsd_text)
- LIST(moov_trak_mdia_minf_stbl_stsd_tmcd)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_stbl_stsd_tmcd_name)
- ATOM_END
- LIST(moov_trak_mdia_minf_stbl_stsd_tx3g)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_stbl_stsd_tx3g_ftab)
- ATOM_END
- LIST_DEFAULT(moov_trak_mdia_minf_stbl_stsd_xxxx)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_alac)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_ACLR)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_APRG)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_ARES)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_avcC)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_bitr)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_btrt)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_chan)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_clap)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_colr)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_d263)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_dac3)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_damr)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_dec3)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_ddts)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_dvc1)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_esds)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_fiel)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_glbl)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_hvcC)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_idfm)
- LIST(moov_trak_mdia_minf_stbl_stsd_xxxx_jp2h)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_jp2h_colr)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_jp2h_ihdr)
- ATOM_END
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_pasp)
- LIST(moov_trak_mdia_minf_stbl_stsd_xxxx_sinf)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_frma)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_imif)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_schi)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_schm)
- ATOM_END
- LIST(moov_trak_mdia_minf_stbl_stsd_xxxx_wave)
- ATOM_BEGIN
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_esds)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_wave_acbf)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_wave_enda)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_wave_frma)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_wave_samr)
- ATOM(moov_trak_mdia_minf_stbl_stsd_xxxx_wave_srcq)
- ATOM_DEFAULT(moov_trak_mdia_minf_stbl_stsd_xxxx_wave_xxxx)
- ATOM_END_DEFAULT
- ATOM_END
- ATOM_END_DEFAULT
- ATOM(moov_trak_mdia_minf_stbl_stsh)
- ATOM(moov_trak_mdia_minf_stbl_stss)
- ATOM(moov_trak_mdia_minf_stbl_stsz)
- ATOM(moov_trak_mdia_minf_stbl_stts)
- ATOM(moov_trak_mdia_minf_stbl_stz2)
- ATOM_END
- ATOM(moov_trak_mdia_minf_sthd)
- ATOM(moov_trak_mdia_minf_vmhd)
- ATOM_END
- ATOM_END
- /* Need additional tests
- LIST(moov_trak_meta)
- ATOM_BEGIN
- ATOM(moov_trak_meta_bxml)
- LIST(moov_trak_meta_keys)
- ATOM_BEGIN
- ATOM(moov_trak_meta_keys_mdta)
- ATOM_END
- ATOM(moov_trak_meta_hdlr)
- LIST(moov_trak_meta_ilst)
- ATOM_BEGIN
- LIST_DEFAULT (moov_trak_meta_ilst_xxxx)
- ATOM_BEGIN
- ATOM (moov_trak_meta_ilst_xxxx_data)
- ATOM (moov_trak_meta_ilst_xxxx_mean)
- ATOM (moov_trak_meta_ilst_xxxx_name)
- ATOM_END
- ATOM_END_DEFAULT
- ATOM(moov_trak_meta_xml)
- ATOM_END
- */
- LIST(moov_trak_tapt)
- ATOM_BEGIN
- ATOM(moov_trak_tapt_clef)
- ATOM(moov_trak_tapt_prof)
- ATOM(moov_trak_tapt_enof)
- ATOM_END
- ATOM(moov_trak_tkhd)
- LIST(moov_trak_tref)
- ATOM_BEGIN
- ATOM(moov_trak_tref_chap)
- ATOM(moov_trak_tref_clcp)
- ATOM(moov_trak_tref_dpnd)
- ATOM(moov_trak_tref_fall)
- ATOM(moov_trak_tref_folw)
- ATOM(moov_trak_tref_forc)
- ATOM(moov_trak_tref_ipir)
- ATOM(moov_trak_tref_hint)
- ATOM(moov_trak_tref_mpod)
- ATOM(moov_trak_tref_scpt)
- ATOM(moov_trak_tref_ssrc)
- ATOM(moov_trak_tref_sync)
- ATOM(moov_trak_tref_tmcd)
- ATOM_END
- ATOM_END
- LIST(moov_udta)
- ATOM_BEGIN
- ATOM(moov_udta_AllF)
- ATOM(moov_udta_chpl)
- ATOM(moov_udta_clsf)
- LIST(moov_udta_DcMD)
- ATOM_BEGIN
- ATOM(moov_udta_DcMD_Cmbo)
- LIST(moov_udta_DcMD_DcME)
- ATOM_BEGIN
- ATOM(moov_udta_DcMD_DcME_Keyw)
- ATOM(moov_udta_DcMD_DcME_Mtmd)
- ATOM(moov_udta_DcMD_DcME_Rate)
- ATOM_END
- ATOM_END
- ATOM(moov_udta_FIEL)
- ATOM(moov_udta_FXTC)
- ATOM(moov_udta_hinf)
- ATOM(moov_udta_hinv)
- LIST(moov_udta_hnti)
- ATOM_BEGIN
- ATOM(moov_udta_hnti_rtp)
- ATOM_END
- ATOM(moov_udta_ID32)
- ATOM(moov_udta_kywd)
- ATOM(moov_udta_loci)
- ATOM(moov_udta_LOOP)
- ATOM(moov_udta_MCPS)
- LIST(moov_udta_meta)
- ATOM_BEGIN
- ATOM(moov_udta_meta_hdlr)
- LIST(moov_udta_meta_ilst)
- LIST_DEFAULT_ALONE_BEGIN (moov_udta_meta_ilst_xxxx)
- ATOM_BEGIN
- ATOM (moov_udta_meta_ilst_xxxx_data);
- ATOM (moov_udta_meta_ilst_xxxx_mean);
- ATOM (moov_udta_meta_ilst_xxxx_name);
- ATOM_END
- LIST_DEFAULT_ALONE_END
- ATOM_END
- ATOM(moov_udta_ndrm)
- ATOM(moov_udta_nsav)
- ATOM(moov_udta_ptv )
- ATOM(moov_udta_rtng)
- ATOM(moov_udta_Sel0)
- LIST(moov_udta_tags)
- ATOM_BEGIN
- ATOM(moov_udta_tags_meta)
- LIST(moov_udta_tags_tseg)
- ATOM_BEGIN
- ATOM(moov_udta_tags_tseg_tshd);
- ATOM_END
- ATOM_END
- ATOM(moov_udta_WLOC)
- ATOM(moov_udta_XMP_)
- ATOM(moov_udta_yrrc)
- ATOM_DEFAULT (moov_udta_xxxx); //User data
- ATOM_END_DEFAULT
- ATOM_END
- ATOM(pdin)
- ATOM(PICT)
- ATOM(RDAO)
- ATOM(RDAS)
- ATOM(RDVO)
- ATOM(RDVS)
- ATOM(RED1)
- ATOM(REDA)
- ATOM(REDV)
- ATOM(REOB)
- ATOM(pckg)
- ATOM(pnot)
- LIST_SKIP(skip)
- LIST_SKIP(wide)
- DATA_END
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-#define NAME_VERSION_FLAG(ELEMENT_NAME) \
- Element_Name(ELEMENT_NAME); \
- int32u Flags; \
- int8u Version; \
- { \
- Get_B1(Version, "Version"); \
- Get_B3(Flags, "Flags"); \
- } \
-
-#define INTEGRITY_VERSION(_VERSION) \
- if (Version>_VERSION) \
- { \
- Skip_XX(Element_Size-Element_Offset, "Unknown data"); \
- return; \
- } \
-
-#define INTEGRITY(TOVALIDATE, ERRORTEXT) \
- if (!(TOVALIDATE)) \
- { \
- Trusted_IsNot(ERRORTEXT); \
- return; \
- } \
-
-#define INTEGRITY_SIZE1(ELEMENT_SIZE0) \
- INTEGRITY_VERSION(0); \
- if (Element_Size!=ELEMENT_SIZE0+4) \
- { \
- Trusted_IsNot("Size is wrong"); \
- return; \
- } \
-
-#define INTEGRITY_SIZE2(ELEMENT_SIZE0, ELEMENT_SIZE1) \
- INTEGRITY_VERSION(1); \
- if (Version==0 && Element_Size!=ELEMENT_SIZE0 \
- || Version==1 && Element_Size!=ELEMENT_SIZE1) \
- { \
- Trusted_IsNot("Size is wrong"); \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST1(ELEMENT_SIZE0) \
- INTEGRITY_VERSION(0); \
- if (Version==0 && Element_Size<ELEMENT_SIZE0) \
- { \
- Trusted_IsNot("Size is wrong"); \
- return; \
- } \
-
-#define INTEGRITY_SIZE_ATLEAST2(ELEMENT_SIZE0, ELEMENT_SIZE1) \
- INTEGRITY_VERSION(1); \
- if (Version==0 && Element_Size<ELEMENT_SIZE0 \
- || Version==1 && Element_Size<ELEMENT_SIZE1) \
- { \
- Trusted_IsNot("Size is wrong"); \
- return; \
- } \
-
-#define Get_B_DEPENDOFVERSION(_INFO, _NAME) \
- { \
- if (Version==0) \
- { \
- int32u Info; \
- Get_B4(Info, _NAME); \
- _INFO=Info; \
- } \
- else \
- Get_B8(_INFO, _NAME); \
- } \
-
-#define Get_DATE1904_DEPENDOFVERSION(_INFO, _NAME) \
- { \
- if (Version==0) \
- { \
- int32u Temp; \
- Get_B4(Temp, _NAME); \
- _INFO.Date_From_Seconds_1904(Temp); \
- } \
- else \
- { \
- int64u Temp; \
- Get_B8(Temp, _NAME); \
- _INFO.Date_From_Seconds_1904(Temp); \
- } \
- Param_Info1(_INFO); \
- } \
-
-//-------------------------------------------------------------------------
-void File_Mpeg4::bloc()
-{
- NAME_VERSION_FLAG("Base Location");
-
- //Parsing
- Skip_XX(256, "baseLocation");
- Skip_XX(256, "purchaseLocation");
- Skip_XX(512, "Reserved");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::cdat()
-{
- Element_Code=Element_Code==Elements::cdat?1:2;
-
- if (!Status[IsAccepted])
- {
- Accept("EIA-608");
- Fill(Stream_General, 0, General_Format, "Final Cut EIA-608", Unlimited, true, true);
- }
- #ifdef MEDIAINFO_EIA608_YES
- if (Streams[(int32u)Element_Code].Parsers.empty())
- {
- File_Eia608* Parser=new File_Eia608();
- Open_Buffer_Init(Parser);
- Streams[(int32u)Element_Code].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_EIA608_YES
-
- Element_Name(Element_Code==1?"EIA-608-1":"EIA-608-2");
-
- #if MEDIAINFO_DEMUX
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- Streams[(int32u)Element_Code].Parsers[0]->FrameInfo=FrameInfo;
- #endif //MEDIAINFO_DEMUX
- while (Element_Offset+2<=Element_Size)
- {
- Open_Buffer_Continue(Streams[(int32u)Element_Code].Parsers[0], Buffer+Buffer_Offset+(size_t)Element_Offset, 2);
- Element_Offset+=2;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::free()
-{
- Element_Name("Free space");
-
- //Parsing
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Param("Data", Ztring("(")+Ztring::ToZtring(Element_TotalSize_Get())+Ztring(" bytes)"));
- #endif //MEDIAINFO_TRACE
- #if MEDIAINFO_MD5
- if (MD5==NULL || (!IsSecondPass && FirstMdatPos<FirstMoovPos))
- #endif //MEDIAINFO_MD5
- GoTo(File_Offset+Buffer_Offset+Element_TotalSize_Get()); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
- #if MEDIAINFO_MD5
- else
- Element_Offset=Element_TotalSize_Get();
- #endif //MEDIAINFO_MD5
-
- //ISM
- if (moof_traf_base_data_offset==(int64u)-1 && !data_offset_present)
- Stream->second.stco.push_back(File_Offset+Buffer_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::ftyp()
-{
- Element_Name("File Type");
-
- if (Count_Get(Stream_General))
- {
- Skip_XX(Element_Size, "Duplicate ftyp");
- return;
- }
-
- //Parsing
- std::vector<int32u> ftyps;
- Get_C4 (MajorBrand, "MajorBrand");
- ftyps.push_back(MajorBrand);
- Skip_B4( "MajorBrandVersion");
- while (Element_Offset<Element_Size)
- {
- int32u CompatibleBrand;
- Get_C4 (CompatibleBrand, "CompatibleBrand");
- ftyps.push_back(CompatibleBrand);
- }
-
- FILLING_BEGIN();
- Accept("MPEG-4");
-
- Fill(Stream_General, 0, General_Format, "MPEG-4");
- for (size_t Pos=0; Pos<ftyps.size(); Pos++)
- switch (ftyps[Pos])
- {
- case Elements::ftyp_dash : if (Config->File_Names.size()==1)TestContinuousFileNames(1, __T("m4s")); break;
- case Elements::ftyp_caqv : Fill(StreamKind_Last, StreamPos_Last, "Encoded_Application", "Casio Digital Camera"); break;
- default : ;
- }
- CodecID_Fill(Ztring().From_CC4(MajorBrand), Stream_General, 0, InfoCodecID_Format_Mpeg4);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::idat()
-{
- Element_Name("QTI");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-
- FILLING_BEGIN();
- Accept("QTI");
-
- Fill(Stream_General, 0, General_Format, "MPEG-4");
- CodecID_Fill(__T("QTI"), Stream_General, 0, InfoCodecID_Format_Mpeg4);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::idsc()
-{
- Element_Name("QTI");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-
- FILLING_BEGIN();
- Accept("QTI");
-
- Fill(Stream_General, 0, General_Format, "MPEG-4");
- CodecID_Fill(__T("QTI"), Stream_General, 0, InfoCodecID_Format_Mpeg4);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::jp2c()
-{
- Element_Name("JPEG 2000 content");
-
- #if defined(MEDIAINFO_JPEG_YES)
- //Creating the parser
- File_Jpeg MI;
- if (IsSub || Config->File_Names.size()>1) //If contained in another container or several files, this is a video stream
- MI.StreamKind=Stream_Video;
- Open_Buffer_Init(&MI);
-
- //Demux
- #if MEDIAINFO_DEMUX
- #if MEDIAINFO_EVENTS
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- if (Frame_Count_NotParsedIncluded==(int64u)-1)
- Frame_Count_NotParsedIncluded=0;
- if (Config->Demux_Rate_Get())
- {
- FrameInfo.DTS=float64_int64s(Frame_Count_NotParsedIncluded*1000000000/Config->Demux_Rate_Get());
- FrameInfo.PTS=FrameInfo.DTS;
- FrameInfo.DUR=float64_int64s(1000000000/Config->Demux_Rate_Get());
- }
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- Open_Buffer_Continue(&MI);
-
- //Filling
- if (Frame_Count==0)
- {
- Accept("MPEG-4");
-
- Fill(Stream_General, 0, General_Format, "JPEG 2000", Unlimited, true, true);
- Fill(Stream_General, 0, General_Format_Profile, "MPEG-4");
-
- Finish(&MI);
- Merge(MI, MI.StreamKind, 0, 0);
-
- Fill("MPEG-4");
- if (Config->File_Names.size()>1 && File_Size!=(int64u)-1)
- {
- int64u OverHead=Config->File_Sizes[0]-Element_Size;
- Fill(Stream_Video, 0, Video_StreamSize, File_Size-Config->File_Names.size()*OverHead, 10, true);
- }
- if (Config->ParseSpeed<1.0)
- Finish("MPEG-4");
- }
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- #endif
-
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::jp2h()
-{
- Element_Name("JPEG-2000 header");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::jp2h_colr()
-{
- Element_Name("Color");
-
- //Parsing
- int8u METH;
- Get_B1 (METH, "METH - Specification method"); Param_Info1(Mpeg4_jp2h_METH(METH));
- Skip_B1( "PREC - Precedence");
- Skip_B1( "APPROX - Colourspace approximation");
- switch (METH)
- {
- case 0x01 : {
- int32u EnumCS;
- Get_B4 (EnumCS, "EnumCS - Enumerated colourspace"); Param_Info1(Mpeg4_jp2h_EnumCS(EnumCS));
- Fill(StreamKind_Last, 0, "ColorSpace", Mpeg4_jp2h_EnumCS(EnumCS));
- }
- break;
- case 0x02 : Skip_XX(Element_Size-Element_Offset, "PROFILE");
- break;
- default : Skip_XX(Element_Size-Element_Offset, "Unknown");
- return;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::jp2h_ihdr()
-{
- Element_Name("Header");
-
- //Parsing
- Skip_B4( "Height");
- Skip_B4( "Width");
- Skip_B2( "NC - Number of components");
- BS_Begin();
- Skip_SB( "BPC - Bits per component (Sign)");
- Skip_S1(7, "BPC - Bits per component (Value)");
- BS_End();
- Skip_B1( "C - Compression type");
- Skip_B1( "UnkC - Colourspace Unknown");
- Skip_B1( "IPR - Intellectual Property");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::mdat()
-{
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Streams
- #endif //MEDIAINFO_TRACE
-
- if (!Status[IsAccepted])
- {
- Data_Accept("MPEG-4");
-
- Fill(Stream_General, 0, General_Format, "QuickTime");
- }
- Element_Name("Data");
-
- //Sizes
- if (Retrieve(Stream_General, 0, General_HeaderSize).empty())
- {
- Fill(Stream_General, 0, General_HeaderSize, File_Offset+Buffer_Offset-Header_Size);
- Fill(Stream_General, 0, General_DataSize, Element_TotalSize_Get()+Header_Size);
- if (File_Size!=(int64u)-1 && File_Offset+Buffer_Offset+Element_TotalSize_Get()<=File_Size)
- Fill(Stream_General, 0, General_FooterSize, File_Size-(File_Offset+Buffer_Offset+Element_TotalSize_Get()));
- Fill(Stream_General, 0, General_IsStreamable, FirstMoovPos==(int64u)-1?"No":"Yes");
- }
-
- //Trace
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(0); //Container1
- #endif //MEDIAINFO_TRACE
-
- if (IsSecondPass && !mdat_Pos.empty() && mdat_Pos.begin()->Offset<File_Offset+Buffer_Offset+Element_TotalSize_Get())
- {
- //Next piece of data
- mdat_Pos_Temp=&mdat_Pos[0];
- IsParsing_mdat=true;
- mdat_StreamJump();
-
- return; //Only if have something in this mdat
- }
-
- //In case of mdat is before moov
- if (FirstMdatPos==(int64u)-1)
- {
- Buffer_Offset-=(size_t)Header_Size;
- Element_Level--;
- BookMark_Set(); //Remembering this place, for stream parsing in phase 2
- Element_Level++;
- Buffer_Offset+=(size_t)Header_Size;
-
- FirstMdatPos=File_Offset+Buffer_Offset-Header_Size;
- }
- if (File_Offset+Buffer_Offset>LastMdatPos)
- LastMdatPos=File_Offset+Buffer_Offset+Element_TotalSize_Get();
-
- //Parsing
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Param("Data", Ztring("(")+Ztring::ToZtring(Element_TotalSize_Get())+Ztring(" bytes)"));
- #endif //MEDIAINFO_TRACE
- #if MEDIAINFO_MD5
- if (MD5==NULL || (!IsSecondPass && FirstMdatPos<FirstMoovPos))
- #endif //MEDIAINFO_MD5
- GoTo(File_Offset+Buffer_Offset+Element_TotalSize_Get()); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
- #if MEDIAINFO_MD5
- else
- Element_Offset=Element_TotalSize_Get();
- #endif //MEDIAINFO_MD5
-
- //ISM
- if (moof_traf_base_data_offset==(int64u)-1 && !data_offset_present)
- Stream->second.stco.push_back(File_Offset+Buffer_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::mdat_xxxx()
-{
- if (!Element_IsComplete_Get())
- {
- Element_WaitForMoreData();
- return;
- }
-
- if (!IsSub)
- {
- if (Config->ParseSpeed>=1.0)
- Config->State_Set(((float)Buffer_TotalBytes)/File_Size);
- }
-
- stream &Stream_Temp=Streams[(int32u)Element_Code];
- if (Stream_Temp.Parsers.empty())
- {
- Skip_XX(Element_Size, "Unknown");
- mdat_StreamJump();
- return;
- }
- #if MEDIAINFO_DEMUX
- if (Stream_Temp.StreamKind!=Stream_Other && Stream_Temp.StreamKind!=Stream_Max)
- {
- //DTS
- Frame_Count_NotParsedIncluded=Stream_Temp.stts_FramePos;
- if (Stream_Temp.stts_Durations_Pos<Stream_Temp.stts_Durations.size())
- {
- stream::stts_durations::iterator stts_Duration=Stream_Temp.stts_Durations.begin()+Stream_Temp.stts_Durations_Pos;
- FrameInfo.DTS=TimeCode_DtsOffset+(stts_Duration->DTS_Begin+(((int64u)stts_Duration->SampleDuration)*(Frame_Count_NotParsedIncluded-stts_Duration->Pos_Begin)))*1000000000/Stream_Temp.mdhd_TimeScale;
- FrameInfo.PTS=Stream_Temp.PtsDtsAreSame?FrameInfo.DTS:(int64u)-1;
- FrameInfo.DUR=((int64u)stts_Duration->SampleDuration)*1000000000/Stream_Temp.mdhd_TimeScale;
- Stream_Temp.stts_FramePos++;
- if (Stream_Temp.stts_FramePos>=stts_Duration->Pos_End)
- Stream_Temp.stts_Durations_Pos++;
- if (!Stream_Temp.stss.empty())
- {
- Demux_random_access=false;
- for (size_t Pos=0; Pos<Stream_Temp.stss.size(); Pos++)
- if (Stream_Temp.stss[Pos]==Frame_Count_NotParsedIncluded)
- {
- Demux_random_access=true;
- break;
- }
- }
- else
- Demux_random_access=true;
- }
- else
- {
- FrameInfo.DTS=(int64u)-1;
- FrameInfo.DUR=(int64u)-1;
- Stream_Temp.stts_FramePos++;
- }
-
- Demux_Level=Stream_Temp.Demux_Level;
- Demux(Buffer+Buffer_Offset+Stream_Temp.Demux_Offset, (size_t)(Element_Size-Stream_Temp.Demux_Offset), ContentType_MainStream);
- }
- #endif //MEDIAINFO_DEMUX
-
- for (size_t Pos=0; Pos<Stream_Temp.Parsers.size(); Pos++)
- {
- #if MEDIAINFO_DEMUX
- Stream_Temp.Parsers[Pos]->FrameInfo=FrameInfo;
- #endif //MEDIAINFO_DEMUX
-
- Open_Buffer_Continue(Stream_Temp.Parsers[Pos], Buffer+Buffer_Offset, (size_t)Element_Size);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent && Config->Demux_Unpacketize_Get())
- Stream_Temp.Demux_EventWasSent=true;
- #endif //MEDIAINFO_DEMUX
- Element_Show();
-
- #if MEDIAINFO_DEMUX
- if (!Stream_Temp.IsFilled && Stream_Temp.Parsers[Pos]->Status[IsFilled])
- {
- if (Stream_Temp.StreamKind==Stream_Other) //If this is a TimeCode track
- {
- if (((File_Mpeg4_TimeCode*)Stream_Temp.Parsers[Pos])->Pos!=(int32u)-1)
- {
- for (std::map<int32u, stream>::iterator StreamTemp=Streams.begin(); StreamTemp!=Streams.end(); ++StreamTemp)
- if (StreamTemp->second.TimeCode_TrackID==(int32u)Element_Code)
- {
- TimeCode_FrameOffset=((File_Mpeg4_TimeCode*)Stream_Temp.Parsers[Pos])->Pos;
- TimeCode_DtsOffset=float64_int64s(((float64)TimeCode_FrameOffset)*1000000000*Stream_Temp.TimeCode->FrameDuration/Stream_Temp.TimeCode->TimeScale);
- }
- }
- }
-
- Stream_Temp.IsFilled=true;
-
- if (Config->ParseSpeed<1)
- {
- bool File_Offset_Next_IsValid;
- int64u File_Offset_Next;
- if (mdat_Pos_Temp!=mdat_Pos_Max)
- {
- File_Offset_Next=mdat_Pos_Temp->Offset;
- File_Offset_Next_IsValid=true;
- }
- else
- {
- File_Offset_Next=(int64u)-1;
- File_Offset_Next_IsValid=false;
- }
- mdat_pos mdat_Pos_New;
- mdat_Pos_Max=mdat_Pos.empty()?NULL:(&mdat_Pos[0]+mdat_Pos.size());
- if (!mdat_Pos.empty())
- {
- for (mdat_Pos_Type* mdat_Pos_Item=&mdat_Pos[0]; mdat_Pos_Item<mdat_Pos_Max; ++mdat_Pos_Item)
- if (mdat_Pos_Item->StreamID!=(int32u)Element_Code)
- mdat_Pos_New.push_back(*mdat_Pos_Item);
- }
- mdat_Pos=mdat_Pos_New;
- std::sort(mdat_Pos.begin(), mdat_Pos.end(), &mdat_pos_sort);
- mdat_Pos_Temp=mdat_Pos.empty()?NULL:&mdat_Pos[0];
- mdat_Pos_Max=mdat_Pos_Temp+mdat_Pos.size();
- if (File_Offset_Next_IsValid)
- for (; mdat_Pos_Temp<mdat_Pos_Max; ++mdat_Pos_Temp)
- {
- if (mdat_Pos_Temp->Offset>=File_Offset_Next)
- break;
- }
- else
- mdat_Pos_Temp=mdat_Pos_Max;
- }
- }
- #endif //MEDIAINFO_DEMUX
-
- //Multiple parsers
- if (Stream_Temp.Parsers.size()>1)
- {
- if (!Stream_Temp.Parsers[Pos]->Status[IsAccepted] && Stream_Temp.Parsers[Pos]->Status[IsFinished])
- {
- delete *(Stream_Temp.Parsers.begin()+Pos);
- Stream_Temp.Parsers.erase(Stream_Temp.Parsers.begin()+Pos);
- Pos--;
- }
- else if (Stream_Temp.Parsers.size()>1 && Stream_Temp.Parsers[Pos]->Status[IsAccepted])
- {
- File__Analyze* Parser=Stream_Temp.Parsers[Pos];
- for (size_t Pos2=0; Pos2<Stream_Temp.Parsers.size(); Pos2++)
- {
- if (Pos2!=Pos)
- delete *(Stream_Temp.Parsers.begin()+Pos2);
- }
- Stream_Temp.Parsers.clear();
- Stream_Temp.Parsers.push_back(Parser);
- }
- }
- }
-
- //Next piece of data
- Element_Offset=Element_Size;
- Element_Show();
- mdat_StreamJump();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::mdat_StreamJump()
-{
- //Finding right file offset
- int64u ToJump=File_Size;
- if (mdat_Pos_Temp!=mdat_Pos_Max)
- {
- ToJump=mdat_Pos_Temp->Offset;
- #if MEDIAINFO_DEMUX
- if (Config->ParseSpeed==1)
- {
- std::map<int64u, int64u>::iterator StreamOffset_Jump_Temp=StreamOffset_Jump.find(ToJump);
- if (StreamOffset_Jump_Temp!=StreamOffset_Jump.end())
- {
- ToJump=StreamOffset_Jump_Temp->second;
- if (!mdat_Pos.empty())
- {
- mdat_Pos_Temp=&mdat_Pos[0];
- while (mdat_Pos_Temp<mdat_Pos_Max && mdat_Pos_Temp->Offset!=ToJump)
- mdat_Pos_Temp++;
- }
- else
- mdat_Pos_Temp=NULL;
- }
- }
- #endif // MEDIAINFO_DEMUX
- }
- if (ToJump>File_Size)
- ToJump=File_Size;
- if (ToJump!=File_Offset+Buffer_Offset+Element_Size)
- {
- if (!Status[IsAccepted])
- Data_Accept("MPEG-4");
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get() && ((IsSecondPass && mdat_Pos_NormalParsing) || FirstMoovPos<FirstMdatPos))
- Md5_ParseUpTo=ToJump;
- else
- #endif //MEDIAINFO_MD5
- Data_GoTo(ToJump, "MPEG-4"); //Not just after
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::mfra()
-{
- Element_Name("Movie Fragment Random Access");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::mfra_mfro()
-{
- NAME_VERSION_FLAG("Movie Fragment Random Access Offset");
-
- //Parsing
- Skip_B4( "size");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::mfra_tfra()
-{
- NAME_VERSION_FLAG("Track Fragment Random Access");
-
- //Parsing
- int32u number_of_entry;
- int8u length_size_of_traf_num, length_size_of_trun_num, length_size_of_sample_num;
- Skip_B4( "track_ID");
- BS_Begin();
- Skip_S1(26, "reserved");
- Get_S1 (2, length_size_of_traf_num, "length_size_of_traf_num");
- Get_S1 (2, length_size_of_trun_num, "length_size_of_trun_num");
- Get_S1 (2, length_size_of_sample_num, "length_size_of_sample_num");
- BS_End();
- Get_B4(number_of_entry, "number_of_entry");
- for(int32u Pos=0; Pos<number_of_entry; Pos++)
- {
- Element_Begin1("entry");
- int64u time, moof_offset;
- Get_B_DEPENDOFVERSION(time, "time");
- Get_B_DEPENDOFVERSION(moof_offset, "moof_offset");
- switch (length_size_of_traf_num)
- {
- case 0 : Skip_B1( "traf_number"); break;
- case 1 : Skip_B2( "traf_number"); break;
- case 2 : Skip_B3( "traf_number"); break;
- case 3 : Skip_B4( "traf_number"); break;
- default: ;
- }
- switch (length_size_of_trun_num)
- {
- case 0 : Skip_B1( "trun_num"); break;
- case 1 : Skip_B2( "trun_num"); break;
- case 2 : Skip_B3( "trun_num"); break;
- case 3 : Skip_B4( "trun_num"); break;
- default: ;
- }
- switch (length_size_of_sample_num)
- {
- case 0 : Skip_B1( "sample_num"); break;
- case 1 : Skip_B2( "sample_num"); break;
- case 2 : Skip_B3( "sample_num"); break;
- case 3 : Skip_B4( "sample_num"); break;
- default: ;
- }
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moof()
-{
- Element_Name("Movie Fragment");
-
- if (IsSecondPass)
- {
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Param("Data", Ztring("(")+Ztring::ToZtring(Element_TotalSize_Get())+Ztring(" bytes)"));
- #endif //MEDIAINFO_TRACE
- #if MEDIAINFO_MD5
- if (MD5==NULL || (!IsSecondPass && FirstMdatPos<FirstMoovPos))
- #endif //MEDIAINFO_MD5
- GoTo(File_Offset+Buffer_Offset+Element_TotalSize_Get()); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
- #if MEDIAINFO_MD5
- else
- Element_Offset=Element_TotalSize_Get();
- #endif //MEDIAINFO_MD5
- return;
- }
-
- IsFragmented=true;
- moof_base_data_offset=File_Offset+Buffer_Offset-Header_Size;
- data_offset_present=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moof_mfhd()
-{
- NAME_VERSION_FLAG("Movie Fragment Header");
-
- //Parsing
- Skip_B4( "sequence_number");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moof_traf()
-{
- Element_Name("Track Fragment");
-
- //Filling
- moof_traf_base_data_offset=(int64u)-1;
- if (Streams.empty())
- Streams[(int32u)-1]; //Creating a virtual track in case there is no track
- Stream=Streams.begin(); //Using first track in case there is no track header
- moof_traf_default_sample_duration=Stream->second.mvex_trex_default_sample_duration;
- moof_traf_default_sample_size=Stream->second.mvex_trex_default_sample_size;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moof_traf_sdtp()
-{
- NAME_VERSION_FLAG("Independent and Disposable Samples");
-
- //Parsing
- //for (int32u Pos=0; Pos<sample_count; Pos++) //sample_count should be taken from stsz or stz2
- while (Element_Offset<Element_Size)
- {
- Element_Begin1("sample");
- BS_Begin();
- Skip_S1(2, "reserved");
- Info_S1(2, sample_depends_on, "sample_depends_on"); Param_Info1(Mpeg4_sample_depends_on[sample_depends_on]);
- Info_S1(2, sample_is_depended_on, "sample_is_depended_on"); Param_Info1(Mpeg4_sample_is_depended_on[sample_is_depended_on]);
- Info_S1(2, sample_has_redundancy, "sample_has_redundancy"); Param_Info1(Mpeg4_sample_has_redundancy[sample_has_redundancy]);
- BS_End();
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moof_traf_tfhd()
-{
- NAME_VERSION_FLAG("Track Fragment Header");
-
- //Parsing
- bool base_data_offset_present, sample_description_index_present, default_sample_duration_present, default_sample_size_present, default_sample_flags_present;
- Get_Flags (Flags, 0, base_data_offset_present, "base-data-offset-present");
- Get_Flags (Flags, 1, sample_description_index_present, "sample-description-index-present");
- Get_Flags (Flags, 3, default_sample_duration_present, "default-sample-duration-present");
- Get_Flags (Flags, 4, default_sample_size_present, "default-sample-size-present");
- Get_Flags (Flags, 5, default_sample_flags_present, "default-sample-flags-present");
- Skip_Flags(Flags, 16, "duration-is-empty");
- Get_B4 (moov_trak_tkhd_TrackID, "track_ID");
- if (base_data_offset_present)
- Get_B8 (moof_traf_base_data_offset, "base_data_offset");
- if (sample_description_index_present)
- Skip_B4( "sample_description_index");
- if (default_sample_duration_present)
- Get_B4 (moof_traf_default_sample_duration, "default_sample_duration");
- if (default_sample_size_present)
- Get_B4 (moof_traf_default_sample_size, "default_sample_size");
- if (default_sample_flags_present)
- Skip_B4( "default_sample_flags");
-
- FILLING_BEGIN();
- Stream=Streams.find(moov_trak_tkhd_TrackID);
- if (Stream==Streams.end())
- Stream=Streams.begin();
- if (!default_sample_duration_present)
- moof_traf_default_sample_duration=Stream->second.mvex_trex_default_sample_duration;
- if (!default_sample_size_present)
- moof_traf_default_sample_size=Stream->second.mvex_trex_default_sample_size;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moof_traf_trun()
-{
- NAME_VERSION_FLAG("Track Fragment Run");
-
- //Parsing
- int32u sample_count;
- bool first_sample_flags_present, sample_duration_present, sample_size_present, sample_flags_present, sample_composition_time_offset_present;
- Get_Flags (Flags, 0, data_offset_present, "data-offset-present");
- Get_Flags (Flags, 2, first_sample_flags_present, "first-sample-flags-present");
- Get_Flags (Flags, 8, sample_duration_present, "sample-duration-present");
- Get_Flags (Flags, 9, sample_size_present, "sample-size-present");
- Get_Flags (Flags, 10, sample_flags_present, "sample-flags-present");
- Get_Flags (Flags, 11, sample_composition_time_offset_present, "sample-composition-time-offsets-present");
- Get_B4 (sample_count, "sample_count");
- int64u data_offset_Final=moof_traf_base_data_offset!=(int64u)-1?moof_traf_base_data_offset:moof_base_data_offset;
- if (data_offset_present)
- {
- int32u data_offset;
- Get_B4 (data_offset, "data_offset");
- data_offset_Final+=data_offset;
- }
-
- //Filling
- if (moof_traf_base_data_offset!=(int64u)-1 || data_offset_present)
- Stream->second.stco.push_back(data_offset_Final);
- stream::stsc_struct Stsc;
- if (Stream->second.stsc.empty())
- Stsc.FirstChunk=1;
- else
- Stsc.FirstChunk=Stream->second.stsc[Stream->second.stsc.size()-1].FirstChunk+1;
- Stsc.SamplesPerChunk=sample_count;
- Stream->second.stsc.push_back(Stsc);
- if (!sample_duration_present)
- moov_trak_mdia_minf_stbl_stts_Common(sample_count, moof_traf_default_sample_duration);
- if (!sample_size_present)
- Stream->second.stsz.resize(Stream->second.stsz.size()+sample_count, moof_traf_default_sample_size);
-
- if (first_sample_flags_present)
- Skip_B4( "first_sample_flags");
- for (int32u Pos=0; Pos<sample_count; Pos++)
- {
- Element_Begin1("sample");
- if (sample_duration_present)
- {
- int32u sample_duration;
- Get_B4 (sample_duration, "sample_duration");
-
- moov_trak_mdia_minf_stbl_stts_Common(1, sample_duration);
- }
- if (sample_size_present)
- {
- int32u sample_size;
- Get_B4 (sample_size, "sample_size");
-
- //Filling
- Stream->second.stsz_StreamSize+=sample_size;
- Stream->second.stsz_Total.push_back(sample_size);
- if (Stream->second.stsz.size()<FrameCount_MaxPerStream)
- Stream->second.stsz.push_back(sample_size);
- }
- if (sample_flags_present)
- Skip_B4( "sample_flags");
- if (sample_composition_time_offset_present)
- Skip_B4( "sample_composition_time_offset");
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov()
-{
- if (!Status[IsAccepted])
- {
- Data_Accept("MPEG-4");
-
- Fill(Stream_General, 0, General_Format, "QuickTime"); //If there is no ftyp atom, this is an old Quictime file
- }
- Element_Name("File header");
-
- if (IsSecondPass || FirstMoovPos!=(int64u)-1) //Currently, the 1 moov atom is used
- {
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Param("Data", Ztring("(")+Ztring::ToZtring(Element_TotalSize_Get())+Ztring(" bytes)"));
- #endif //MEDIAINFO_TRACE
- #if MEDIAINFO_MD5
- if (MD5==NULL || (!IsSecondPass && FirstMdatPos<FirstMoovPos))
- #endif //MEDIAINFO_MD5
- GoTo(File_Offset+Buffer_Offset+Element_TotalSize_Get()); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
- #if MEDIAINFO_MD5
- else
- Element_Offset=Element_TotalSize_Get();
- #endif //MEDIAINFO_MD5
- return;
- }
-
- if (FirstMoovPos==(int64u)-1)
- FirstMoovPos=File_Offset+Buffer_Offset-Header_Size;
- /*
- else
- {
- //In case of more than 1 moov atom, the last one is used (previous ones are trashed)
- Streams.clear();
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- while (Count_Get((stream_t)StreamKind))
- Stream_Erase((stream_t)StreamKind, Count_Get((stream_t)StreamKind)-1);
- }
- */
-}
-
-//-------------------------------------------------------------------------
-void File_Mpeg4::moov_ainf()
-{
- NAME_VERSION_FLAG("Asset Information");
-
- //Parsing
- Skip_C4( "profile_version");
- Skip_String(Element_Size-Element_Offset, "APID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_cmov()
-{
- Element_Name("Compressed file header");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_cmov_cmvd()
-{
- Element_Name("Data");
-
- switch (moov_cmov_dcom_Compressor)
- {
- case Elements::moov_cmov_dcom_zlib : moov_cmov_cmvd_zlib(); break;
- default: Skip_XX(Element_Size, "Data");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_cmov_cmvd_zlib()
-{
- Element_Name("Zlib");
-
- //Parsing
- int32u Dest_Size32;
- Get_B4(Dest_Size32, "Destination size");
-
- FILLING_BEGIN();
- //Sizes
- unsigned long Source_Size=(unsigned long)(Element_Size-Element_Offset);
- unsigned long Dest_Size=Dest_Size32;
-
- //Uncompressing
- int8u* Dest=new int8u[Dest_Size];
- if (uncompress((Bytef*)Dest, &Dest_Size, (const Bytef*)Buffer+Buffer_Offset+4, Source_Size)<0)
- {
- Skip_XX(Element_Size, "Problem during the decompression");
- delete[] Dest; //Dest=NULL;
- return;
- }
-
- //Exiting this element
- Skip_XX(Element_Size-Element_Offset, "Will be parsed");
-
- //Configuring level
- std::vector<int64u> Element_Sizes_Sav;
- size_t Element_Level_Sav=Element_Level;
- while(Element_Level)
- {
- Element_Sizes_Sav.push_back(Element_TotalSize_Get());
- Element_End0();
- }
-
- //Configuring buffer
- const int8u* Buffer_Sav=Buffer;
- size_t Buffer_Size_Sav=Buffer_Size;
- int8u* Buffer_Temp_Sav=Buffer_Temp;
- size_t Buffer_Temp_Size_Sav=Buffer_Temp_Size;
- size_t Buffer_Offset_Sav=Buffer_Offset;
- size_t Buffer_Offset_Temp_Sav=Buffer_Offset_Temp;
- Buffer=NULL;
- Buffer_Size=0;
- Buffer_Temp=NULL;
- Buffer_Temp_Size=0;
- Buffer_Offset=0;
- Buffer_Offset_Temp=0;
-
- //Configuring file size
- int64u File_Offset_Sav=File_Offset;
- int64u File_Size_Sav=File_Size;
- if (File_Size<File_Offset+Buffer_Offset+Element_Offset+Dest_Size)
- File_Size=File_Offset+Buffer_Offset+Element_Offset+Dest_Size;
- Element_Level++;
- Header_Fill_Size(File_Size);
- Element_Level--;
-
- //Configuring some status info
- FirstMoovPos=(int64u)-1;
-
- //Parsing
- Buffer=Dest;
- Buffer_Size=Dest_Size;
- while (Open_Buffer_Continue_Loop());
- delete[] Dest; //Dest=NULL;
-
- //Resetting file info
- File_Offset=File_Offset_Sav;
- File_Size=File_Size_Sav;
-
- //Resetting buffer
- Buffer=Buffer_Sav;
- Buffer_Size=Buffer_Size_Sav;
- Buffer_Temp=Buffer_Temp_Sav;
- Buffer_Temp_Size=Buffer_Temp_Size_Sav;
- Buffer_Offset=Buffer_Offset_Sav;
- Buffer_Offset_Temp=Buffer_Offset_Temp_Sav;
-
- //Configuring level
- while(Element_Level)
- Element_End0();
- Element_Level++;
- Header_Fill_Size(File_Size-(File_Offset+Buffer_Offset));
- Element_Level--;
- while(Element_Level<Element_Level_Sav)
- {
- Element_Begin0();
- Element_Begin0();
- Header_Fill_Size(Element_Sizes_Sav[0]);
- Element_End0();
- }
-
- //Filling
- Fill(Stream_General, 0, General_Format_Settings, "Compressed header");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_ctab()
-{
- Element_Name("Color Table");
-
- //Parsing
- int16u Size;
- Skip_B4( "Color table seed");
- Skip_B2( "Color table flags");
- Get_B2 (Size, "Color table size");
- for (int16u Pos=0; Pos<=Size; Pos++)
- {
- Skip_B2( "Zero");
- Skip_B2( "Red");
- Skip_B2( "Green");
- Skip_B2( "Blue");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_cmov_dcom()
-{
- Element_Name("Data compressor name");
-
- //Parsing
- Get_C4 (moov_cmov_dcom_Compressor, "Value");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_iods()
-{
- NAME_VERSION_FLAG("Initial object descriptor");
- INTEGRITY_VERSION(0);
-
- FILLING_BEGIN();
- Descriptors();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta()
-{
- Element_Name("Metadata");
-
- //Filling
- moov_meta_hdlr_Type=0;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_bxml()
-{
- NAME_VERSION_FLAG("Binary XML"); //ISO/IEC 14496-12
- INTEGRITY(moov_meta_hdlr_Type==Elements::moov_meta_hdlr_mp7b, "Bad meta type");
-
- //Parsing
- Skip_XX(Element_Size-Element_Offset, "Binary XML dump");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_hdlr()
-{
- NAME_VERSION_FLAG("Metadata Header"); //ISO/IEC 14496-12 handler
-
- //Parsing
- Skip_C4( "Type (Quicktime)"); //Filled if Quicktime
- Get_C4 (moov_meta_hdlr_Type, "Metadata type");
- if (Element_Offset+12<=Element_Size)
- {
- Skip_C4( "Manufacturer");
- Skip_B4( "Component reserved flags"); //Filled if Quicktime
- Skip_B4( "Component reserved flags mask"); //Filled if Quicktime
- if (Element_Offset<Element_Size)
- Skip_Local(Element_Size-Element_Offset, "Component type name");
- }
- else if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_keys()
-{
- NAME_VERSION_FLAG("Keys");
- INTEGRITY(moov_meta_hdlr_Type==Elements::moov_meta_hdlr_mdta, "Bad meta type");
-
- //Parsing
- Skip_B4( "Count");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_keys_mdta()
-{
- Element_Name("Name");
- INTEGRITY(moov_meta_hdlr_Type==Elements::moov_meta_hdlr_mdta, "Bad meta type");
-
- //Parsing
- std::string Value;
- Get_String(Element_Size, Value, "Value");
-
- //Filling
- moov_udta_meta_keys_List.push_back(Value);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_ilst()
-{
- Element_Name("List");
-
- //Filling
- moov_udta_meta_keys_ilst_Pos=0;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_ilst_xxxx()
-{
- Element_Name("Element");
-
- //Filling
- moov_meta_ilst_xxxx_name_Name.clear(); //useful if metadata type = "mdir"
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_ilst_xxxx_data()
-{
- Element_Name("Data");
-
- //Parsing
- int32u Kind, Language;
- Ztring Value;
- Get_B4(Kind, "Kind"); Param_Info1(Mpeg4_Meta_Kind(Kind));
-
- //Error detection
- switch (Element_Code_Get(Element_Level-1))
- {
- case Elements::moov_meta__disk :
- case Elements::moov_meta__trkn :
- if (Kind)
- {
- //Not normal
- Kind=0x00;
- }
- default : ;
- }
-
- switch (Kind)
- {
- case 0x00 : //Binary
- Get_B4(Language, "Language");
- switch (Element_Code_Get(Element_Level-1))
- {
- case Elements::moov_meta__disk :
- {
- //Parsing
- int16u Position, Total;
- Skip_B2( "Reserved");
- Get_B2(Position, "Position");
- Get_B2(Total, "Total");
- if (Element_Offset+2<=Element_Size)
- Skip_B2( "Reserved"); //Sometimes there are 2 more bytes, unknown
-
- //Filling
- if (Position)
- Fill(Stream_General, 0, General_Part_Position, Position, 10, true);
- if (Total)
- Fill(Stream_General, 0, General_Part_Position_Total, Total, 10, true);
- }
- return;
- case Elements::moov_meta__trkn :
- {
- //Parsing
- int16u Position, Total;
- Skip_B2( "Reserved");
- Get_B2(Position, "Position");
- Get_B2(Total, "Total");
- if (Element_Offset+2<=Element_Size)
- Skip_B2( "Reserved"); //Sometimes there are 2 more bytes, unknown
-
- //Filling
- if (Position)
- Fill(Stream_General, 0, General_Track_Position, Position, 10, true);
- if (Total)
- Fill(Stream_General, 0, General_Track_Position_Total, Total, 10, true);
- }
- return;
- case Elements::moov_meta__covr :
- {
- std::string Data_Raw((const char*)(Buffer+(size_t)(Buffer_Offset+Element_Offset)), (size_t)(Element_Size-Element_Offset));
- std::string Data_Base64(Base64::encode(Data_Raw));
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- //Filling
- Fill(Stream_General, 0, General_Cover_Data, Data_Base64);
- Fill(Stream_General, 0, General_Cover, "Yes");
- }
- return;
- case Elements::moov_meta__gnre :
- {
- if (Element_Size-Element_Offset==2)
- {
- int16u Genre;
- Get_B2(Genre, "Genre");
-
- //Filling
- if (Genre)
- Fill(Stream_General, 0, General_Genre, Genre-1);
- }
- else
- Skip_XX(Element_Size-Element_Offset,"Data");
- }
- return;
- default:
- Skip_XX(Element_Size-Element_Offset,"To decode!");
- Value=__T("(Binary)");
- }
- break;
- case 0x01 : //UTF-8
- Get_B4(Language, "Language");
- switch (Element_Code_Get(Element_Level-1))
- {
- case Elements::moov_meta___day :
- {
- std::string ValueS;
- Get_String(Element_Size-Element_Offset, ValueS, "Value");
- Value.Date_From_String(ValueS.c_str(), ValueS.size());
- }
- break;
- default:
- Get_UTF8(Element_Size-Element_Offset, Value, "Value");
- }
- break;
- case 0x02 : //UTF-16
- Value=__T("UTF-16 encoding not yet supported");
- break;
- case 0x03 : //Mac String
- Get_B4(Language, "Language"); //To confirm
- Get_Local(Element_Size-Element_Offset, Value, "Value");
- break;
- case 0x0D : //JPEG
- Get_B4(Language, "Language");
- switch (Element_Code_Get(Element_Level-1))
- {
- case Elements::moov_meta__covr :
- {
- std::string Data_Raw((const char*)(Buffer+(size_t)(Buffer_Offset+Element_Offset)), (size_t)(Element_Size-Element_Offset));
- std::string Data_Base64(Base64::encode(Data_Raw));
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- //Filling
- Fill(Stream_General, 0, General_Cover_Data, Data_Base64);
- Fill(Stream_General, 0, General_Cover, "Yes");
- }
- return;
- default:
- Value=__T("(Binary)");
- }
- break;
- case 0x0E : //PNG
- Get_B4(Language, "Language");
- switch (Element_Code_Get(Element_Level-1))
- {
- case Elements::moov_meta__covr :
- {
- std::string Data_Raw((const char*)(Buffer+(size_t)(Buffer_Offset+Element_Offset)), (size_t)(Element_Size-Element_Offset));
- std::string Data_Base64(Base64::encode(Data_Raw));
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- //Filling
- Fill(Stream_General, 0, General_Cover_Data, Data_Base64);
- Fill(Stream_General, 0, General_Cover, "Yes");
- }
- return;
- default:
- Value=__T("(Binary)");
- }
- break;
- case 0x15 : //Signed Integer
- {
- Get_B4(Language, "Language");
- switch (Element_Size-Element_Offset)
- {
- case 1 : {int8u ValueI; Get_B1(ValueI, "Value"); Value.From_Number((int8s) ValueI);}; break;
- case 2 : {int16u ValueI; Get_B2(ValueI, "Value"); Value.From_Number((int16s)ValueI);}; break;
- case 4 : {int32u ValueI; Get_B4(ValueI, "Value"); Value.From_Number((int32s)ValueI);}; break;
- case 8 : {int64u ValueI; Get_B8(ValueI, "Value"); Value.From_Number((int64s)ValueI);}; break;
- default : Value=__T("Unknown kind of integer value!");
- }
- }
- break;
- case 0x16 : //Float 32
- Skip_XX(4, "To decode!");
- //Value=__T("Float32 encoding not yet supported");
- break;
- case 0x17 : //Float 64
- Skip_XX(8, "To decode!");
- //Value=__T("Float64 encoding not yet supported");
- break;
- default: Value=__T("Unknown kind of value!");
- }
-
- switch (moov_meta_hdlr_Type)
- {
- case Elements::moov_meta_hdlr_mdir :
- {
- FILLING_BEGIN();
- std::string Parameter;
- if (Element_Code_Get(Element_Level-1)==Elements::moov_meta______)
- Metadata_Get(Parameter, moov_meta_ilst_xxxx_name_Name);
- else
- Metadata_Get(Parameter, Element_Code_Get(Element_Level-1));
- if (Parameter=="Encoded_Application")
- {
- if (Value.find(__T("Nero AAC codec"))==0)
- {
- ZtringList List; List.Separator_Set(0, __T(" / "));
- List.Write(Value);
- Element_Info1(Parameter.c_str());
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Name, List(0), true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Version, List(1), true);
- Parameter.clear(); //Set as already filled
- }
- }
- if (Parameter=="cdec")
- {
- if (Value.find(__T("ndaudio "))==0)
- {
- ZtringList List; List.Separator_Set(0, __T(" / "));
- List.Write(Value);
- Element_Info1(Parameter.c_str());
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Name, "Nero AAC codec", Unlimited, true, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Name, List(0).substr(8, string::npos), true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Settings, List(1), true);
- Parameter.clear(); //Set as already filled
- }
- }
- if (Parameter=="Compilation" || Parameter=="HDVideo" || Parameter=="iTunesU" || Parameter=="Podcast")
- {
- if (Value==__T("1"))
- Value=__T("Yes");
- else
- Value.clear(); //This is usually set to 0 even if the user did not explicitely indicated something (default)
- }
- if (Parameter=="BPM")
- {
- if (Value==__T("0"))
- Value.clear();
- }
- if (Parameter=="ContentType")
- {
- if (Value==__T("0")) Value=__T("Movie");
- else if (Value==__T("1")) Value=__T("Music");
- else if (Value==__T("2")) Value=__T("Audiobook");
- else if (Value==__T("5")) Value=__T("Whacked Bookmark");
- else if (Value==__T("6")) Value=__T("Music Video");
- else if (Value==__T("9")) Value=__T("Short Film");
- else if (Value==__T("10")) Value=__T("TV Show");
- else if (Value==__T("11")) Value=__T("Booklet");
- else if (Value==__T("14")) Value=__T("Ringtone");
- else if (Value==__T("21")) Value=__T("Podcast");
- else Value=__T("Unknown Type");
- Fill(Stream_General, 0, General_ContentType, Value);
- }
- if (Parameter=="AppleStoreAccountType")
- {
- if (Value==__T("0"))
- Value=__T("iTunes");
- else
- Value=__T("AOL");
- Fill(Stream_General, 0, General_ServiceName, Value);
- }
- if (Parameter=="Rating")
- {
- if (Value==__T("0")) Value=__T("None");
- else if (Value==__T("2")) Value=__T("Clean");
- else Value=__T("Explicit");
- }
- if (Parameter=="AppleStoreCountry")
- {
- if (Value==__T("143441")) Value=__T("United States");
- else if (Value==__T("143442")) Value=__T("France");
- else if (Value==__T("143443")) Value=__T("Germany");
- else if (Value==__T("143444")) Value=__T("United Kingdom");
- else if (Value==__T("143445")) Value=__T("Austria");
- else if (Value==__T("143446")) Value=__T("Belgium");
- else if (Value==__T("143447")) Value=__T("Finland");
- else if (Value==__T("143448")) Value=__T("Greece");
- else if (Value==__T("143449")) Value=__T("Ireland");
- else if (Value==__T("143450")) Value=__T("Italy");
- else if (Value==__T("143451")) Value=__T("Luxembourg");
- else if (Value==__T("143452")) Value=__T("Netherlands");
- else if (Value==__T("143453")) Value=__T("Portugal");
- else if (Value==__T("143454")) Value=__T("Spain");
- else if (Value==__T("143455")) Value=__T("Canada");
- else if (Value==__T("143456")) Value=__T("Sweden");
- else if (Value==__T("143457")) Value=__T("Norway");
- else if (Value==__T("143458")) Value=__T("Denmark");
- else if (Value==__T("143459")) Value=__T("Switzerland");
- else if (Value==__T("143460")) Value=__T("Australia");
- else if (Value==__T("143461")) Value=__T("New Zealand");
- else if (Value==__T("143462")) Value=__T("Japan");
- else Value=__T("Unknown Country");
- }
- if (!Parameter.empty())
- {
- Element_Info1(Parameter.c_str());
- if (Value!=Retrieve(Stream_General, 0, Parameter.c_str()))
- Fill(Stream_General, 0, Parameter.c_str(), Value);
- }
- FILLING_END();
- }
- break;
- case Elements::moov_meta_hdlr_mdta :
- if(!moov_udta_meta_keys_List.empty())
- {
- FILLING_BEGIN();
- std::string Parameter;
- Metadata_Get(Parameter, moov_udta_meta_keys_List[moov_udta_meta_keys_ilst_Pos<moov_udta_meta_keys_List.size()?moov_udta_meta_keys_ilst_Pos:moov_udta_meta_keys_List.size()-1]);
- if (Parameter=="com.apple.quicktime.version")
- Vendor_Version=Value.SubString(__T(""), __T(" "));
- else if (Parameter=="com.apple.quicktime.player.version")
- Vendor_Version=Value.SubString(__T(""), __T(" "));
- else if (Parameter=="com.apple.quicktime.comment")
- Fill(Stream_General, 0, General_Comment, Value, true);
- else if (Parameter=="com.apple.quicktime.description")
- Fill(Stream_General, 0, General_Description, Value, true);
- else if (Parameter=="com.apple.finalcutstudio.media.uuid")
- Fill(Stream_General, 0, "Media/UUID", Value);
- else if (Parameter=="com.apple.finalcutstudio.media.history.uuid")
- Fill(Stream_General, 0, "Media/History/UUID", Value);
- else if (!Parameter.empty())
- Fill(Stream_General, 0, Parameter.c_str(), Value, true);
- FILLING_END();
- moov_udta_meta_keys_ilst_Pos++;
- }
- else
- Param2("Keys atom is missing!", 0);
- break;
- case Elements::moov_udta_meta :
- {
- FILLING_BEGIN();
- std::string Parameter;
- Metadata_Get(Parameter, (int32u)Element_Code_Get(Element_Level-1));
- if (!Parameter.empty())
- Fill(Stream_General, 0, Parameter.c_str(), Value, true);
- FILLING_END();
- }
- default: ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_ilst_xxxx_mean()
-{
- Element_Name("Mean");
-
- //Parsing
- Skip_B4( "Unknown");
- Skip_Local(Element_Size-Element_Offset, "Value");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_ilst_xxxx_name()
-{
- Element_Name("Name");
-
- //Parsing
- Skip_B4( "Unknown");
- Get_String(Element_Size-Element_Offset, moov_meta_ilst_xxxx_name_Name, "Value");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_meta_xml()
-{
- NAME_VERSION_FLAG("XML"); //ISO/IEC 14496-12
- INTEGRITY(moov_meta_hdlr_Type==Elements::moov_meta_hdlr_mp7t, "Bad meta type");
-
- //Parsing
- Skip_XX(Element_Size-Element_Offset, "XML dump");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_mvex()
-{
- Element_Name("Movie Extends");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_mvex_mehd()
-{
- NAME_VERSION_FLAG("Movie Extends Header");
-
- //Parsing
- int64u fragment_duration;
- Get_B_DEPENDOFVERSION(fragment_duration, "fragment_duration");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_mvex_trex()
-{
- NAME_VERSION_FLAG("Movie Extends Defaults");
-
- //Parsing
- int32u default_sample_duration;
- int32u default_sample_size;
- Get_B4 (moov_trak_tkhd_TrackID, "track_ID");
- Skip_B4( "default_sample_description_index");
- Get_B4 (default_sample_duration, "default_sample_duration");
- Get_B4 (default_sample_size, "default_sample_size");
- Element_Begin1("default_sample_flags");
- BS_Begin();
- Skip_S1(6, "reserved");
- Skip_S1(2, "sample_depends_on");
- Skip_S1(2, "sample_is_depended_on");
- Skip_S1(2, "sample_has_redundancy");
- Skip_S1(3, "sample_padding_value");
- Skip_SB( "sample_is_difference_sample");
- BS_End();
- Skip_B2( "sample_degradation_priority");
- Element_End0();
-
- FILLING_BEGIN();
- Streams[moov_trak_tkhd_TrackID].mvex_trex_default_sample_duration=default_sample_duration;
- Streams[moov_trak_tkhd_TrackID].mvex_trex_default_sample_size=default_sample_size;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_mvhd()
-{
- NAME_VERSION_FLAG("Movie header");
-
- //Parsing
- Ztring Date_Created, Date_Modified;
- int64u Duration;
- float32 a, b, u, c, d, v, x, y, w;
- int32u Rate;
- int16u Volume;
- Get_DATE1904_DEPENDOFVERSION(Date_Created, "Creation time");
- Get_DATE1904_DEPENDOFVERSION(Date_Modified, "Modification time");
- Get_B4(moov_mvhd_TimeScale, "Time scale"); Param_Info1(Ztring::ToZtring(moov_mvhd_TimeScale)+__T(" Hz"));
- Get_B_DEPENDOFVERSION(Duration, "Duration"); Param_Info1C(moov_mvhd_TimeScale, Ztring::ToZtring((int64u)Duration*1000/moov_mvhd_TimeScale)+__T(" ms"));
- Get_B4 (Rate, "Preferred rate"); Param_Info1(Ztring::ToZtring(((float32)Rate)/0x10000));
- Get_B2 (Volume, "Preferred volume"); Param_Info1(Ztring::ToZtring(((float32)Volume)/0x100));
- Skip_XX(10, "Reserved");
- Element_Begin1("Matrix structure");
- Get_BFP4(16, a, "a (width scale)");
- Get_BFP4(16, b, "b (width rotate)");
- Get_BFP4( 2, u, "u (width angle)");
- Get_BFP4(16, c, "c (height rotate)");
- Get_BFP4(16, d, "d (height scale)");
- Get_BFP4( 2, v, "v (height angle)");
- Get_BFP4(16, x, "x (position left)");
- Get_BFP4(16, y, "y (position top)");
- Get_BFP4( 2, w, "w (divider)");
- Element_End0();
- Skip_B4( "Preview time");
- Skip_B4( "Preview duration");
- Skip_B4( "Poster time");
- Skip_B4( "Selection time");
- Skip_B4( "Selection duration");
- Skip_B4( "Current time");
- Skip_B4( "Next track ID");
-
- FILLING_BEGIN();
- //if (moov_mvhd_TimeScale)
- //{
- //int32u Duration=(int32u)(((float)Duration)/TimeScale*1000);
- //Fill("Duration", Duration);
- //}
- if (Date_Created.find(__T('\r'))!=std::string::npos)
- Date_Created.resize(Date_Created.find(__T('\r')));
- if (Date_Created.find(__T('\n'))!=std::string::npos)
- Date_Created.resize(Date_Created.find(__T('\n')));
- Fill(StreamKind_Last, StreamPos_Last, "Encoded_Date", Date_Created);
- if (Date_Modified.find(__T('\r'))!=std::string::npos)
- Date_Modified.resize(Date_Modified.find(__T('\r')));
- if (Date_Modified.find(__T('\n'))!=std::string::npos)
- Date_Modified.resize(Date_Modified.find(__T('\n')));
- Fill(StreamKind_Last, StreamPos_Last, "Tagged_Date", Date_Modified);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak()
-{
- Element_Name("Track");
-
- FILLING_BEGIN();
- Fill_Flush();
- moov_trak_tkhd_TrackID=(int32u)-1;
- moov_trak_tkhd_Width=0;
- moov_trak_tkhd_Height=0;
- moov_trak_tkhd_DisplayAspectRatio=0;
- moov_trak_tkhd_Rotation=0;
- Stream_Prepare(Stream_Max); //clear filling
- Streams.erase((int32u)-1);
- Fill(StreamKind_Last, StreamPos_Last, General_StreamOrder, Streams.size());
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_edts()
-{
- Element_Name("Edit");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_edts_elst()
-{
- NAME_VERSION_FLAG("Edit List");
-
- //Parsing
- int32u Count;
- Get_B4 (Count, "Number of entries");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- stream::edts_struct edts;
- Element_Begin1("Entry");
- Get_B4 (edts.Duration, "Track duration"); Param_Info2C(moov_mvhd_TimeScale, (int64u)edts.Duration*1000/moov_mvhd_TimeScale, " ms");
- Get_B4 (edts.Delay, "Media time"); Param_Info2C(moov_mvhd_TimeScale && (edts.Delay!=(int32u)-1), (int64u)edts.Delay*1000/moov_mvhd_TimeScale, " ms");
- Get_B4 (edts.Rate, "Media rate"); Param_Info1(((float)edts.Rate)/0x10000);
- Element_End0();
-
- Streams[moov_trak_tkhd_TrackID].edts.push_back(edts);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_load()
-{
- Element_Name("Preload");
-
- //Parsing
- Info_B4(PreloadTime, "Preload time"); Param_Info2C(moov_mvhd_TimeScale, PreloadTime*1000/moov_mvhd_TimeScale, " ms");
- Info_B4(PreloadFlags, "Flags");
- Skip_Flags(PreloadFlags, 0, "PreloadAlways");
- Skip_Flags(PreloadFlags, 1, "TrackEnabledPreload");
- Info_B4(HintFlags, "Hint flags");
- Skip_Flags(HintFlags, 2, "KeepInBuffer");
- Skip_Flags(HintFlags, 8, "HighQuality");
- Skip_Flags(HintFlags, 20, "SingleFieldPlayback");
- Skip_Flags(HintFlags, 26, "DeinterlaceFields");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia()
-{
- Element_Name("Media");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_hdlr()
-{
- NAME_VERSION_FLAG("Handler Reference");
-
- //Parsing
- Ztring Title;
- int32u Type, SubType, Manufacturer;
- int8u Size;
- Get_C4 (Type, "Component type");
- Get_C4 (SubType, "Component subtype");
- Get_C4 (Manufacturer, "Component manufacturer");
- Skip_B4( "Component flags");
- Skip_B4( "Component flags mask");
- if (Element_Offset<Element_Size)
- {
- Peek_B1(Size);
- if (Element_Offset+1+Size==Element_Size)
- {
- Skip_B1( "Component name size");
- Get_Local(Size, Title, "Component name");
- }
- else
- {
- std::string TitleS;
- Get_String(Element_Size-Element_Offset, TitleS, "Component name");
- Title.From_UTF8(TitleS.c_str());
- if (Title.empty())
- Title.From_Local(TitleS.c_str()); //Trying Local...
- }
- if (Title.find(__T("Handler"))!=std::string::npos || Title.find(__T("handler"))!=std::string::npos || Title.find(__T("vide"))!=std::string::npos || Title.find(__T("soun"))!=std::string::npos || Title==Ztring().From_CC4(SubType))
- Title.clear(); //This is not a Title
- }
-
- FILLING_BEGIN();
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty()) Fill(StreamKind_Last, StreamPos_Last, "Title", Title);
-
- switch (SubType)
- {
- case Elements::moov_trak_mdia_hdlr_clcp :
- if (StreamKind_Last!=Stream_Text)
- {
- Stream_Prepare(Stream_Text);
- }
- break;
- case Elements::moov_trak_mdia_hdlr_data :
- if (StreamKind_Last!=Stream_Other)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Data");
- }
- break;
- case Elements::moov_trak_mdia_hdlr_soun :
- if (StreamKind_Last!=Stream_Audio)
- {
- Stream_Prepare(Stream_Audio);
- }
- break;
- case Elements::moov_trak_mdia_hdlr_vide :
- if (StreamKind_Last!=Stream_Video)
- {
- Stream_Prepare(Stream_Video);
- }
- break;
- case Elements::moov_trak_mdia_hdlr_text :
- case Elements::moov_trak_mdia_hdlr_sbtl :
- if (StreamKind_Last!=Stream_Text)
- {
- if (Streams[moov_trak_tkhd_TrackID].IsChapter)
- Stream_Prepare(Stream_Menu);
- else
- {
- Stream_Prepare(Stream_Text);
- if (SubType!=Elements::moov_trak_mdia_hdlr_text)
- Fill(Stream_Text, StreamPos_Last, Text_MuxingMode, Ztring().From_CC4(SubType));
- }
- }
- break;
- case Elements::moov_trak_mdia_hdlr_twen :
- if (StreamKind_Last!=Stream_Text)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Tween");
- }
- break;
- case Elements::moov_trak_mdia_hdlr_tmcd :
- if (StreamKind_Last!=Stream_Text)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_Format, "QuickTime TC");
- }
- break;
- case Elements::moov_trak_mdia_hdlr_subp :
- if (StreamKind_Last!=Stream_Text)
- {
- Stream_Prepare(Stream_Text);
- CodecID_Fill(__T("subp"), Stream_Text, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- Fill(StreamKind_Last, StreamPos_Last, Text_Codec, "subp");
- }
- break;
- case Elements::moov_trak_mdia_hdlr_subt :
- if (StreamKind_Last!=Stream_Text)
- {
- Stream_Prepare(Stream_Text);
- }
- break;
- case Elements::moov_trak_mdia_hdlr_MPEG :
- mdat_MustParse=true; //Data is in MDAT
- case Elements::moov_trak_mdia_hdlr_alis :
- //Stream_Prepare(Stream_Other);
- //Fill(Stream_Other, StreamPos_Last, Other_Type, "Alias"); //TODO: what is the meaning of such hdlr?
- break;
- case Elements::moov_trak_mdia_hdlr_hint :
- //Stream_Prepare(Stream_Other);
- //Fill(Stream_Other, StreamPos_Last, Other_Type, "Hint"); //TODO: what is the meaning of such hdlr?
- break;
- case Elements::moov_trak_mdia_hdlr_ocsm :
- if (StreamKind_Last!=Stream_Other)
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Object content information");
- break;
- case Elements::moov_trak_mdia_hdlr_odsm :
- if (StreamKind_Last!=Stream_Other)
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Object description");
- break;
- case Elements::moov_trak_mdia_hdlr_sdsm :
- if (StreamKind_Last!=Stream_Other)
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Scene description");
- break;
- default:
- if (!Streams[moov_trak_tkhd_TrackID].hdlr_SubType) //TODO: check what is the best method to detect SubType (moov_trak_mdia_hdlr vs moov_trak_mdia_minf_hdlr)
- {
- Streams[moov_trak_tkhd_TrackID].hdlr_Type=Type;
- Streams[moov_trak_tkhd_TrackID].hdlr_SubType=SubType;
- Streams[moov_trak_tkhd_TrackID].hdlr_Manufacturer=Manufacturer;
- }
- }
-
- if (StreamKind_Last!=Stream_Max)
- {
- Streams[moov_trak_tkhd_TrackID].StreamKind=StreamKind_Last;
- Streams[moov_trak_tkhd_TrackID].StreamPos=StreamPos_Last;
- }
-
- if (Manufacturer!=0x00000000)
- {
- if (Vendor==0x00000000)
- Vendor=Manufacturer;
- else if (Vendor!=Manufacturer)
- Vendor=0xFFFFFFFF; //Two names, this is two much
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_imap()
-{
- Element_Name("Non-primary source input map");
-
- //Parsing
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_imap_sean()
-{
- //Parsing
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_imap_sean___in()
-{
- Element_Name("Input");
-
- //Parsing
- Skip_B4( "Atom ID");
- Skip_B2( "Zero");
- Skip_B2( "Number of internal atoms");
- Skip_B4( "Zero");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_imap_sean___in___ty()
-{
- Element_Name("Input type");
-
- //Parsing
- Info_B4(TypeModifierName, "Type modifier name"); Param_Info1(Mpeg4_TypeModifierName(TypeModifierName));
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_imap_sean___in_dtst()
-{
- //Parsing
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_C4( "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_imap_sean___in_obid()
-{
- Element_Name("Object ID");
-
- //Parsing
- Skip_B4( "Object ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_mdhd()
-{
- NAME_VERSION_FLAG("Media Header");
-
- //Parsing
- Ztring Date_Created, Date_Modified;
- int64u Duration;
- int32u TimeScale;
- int16u Language;
- Get_DATE1904_DEPENDOFVERSION(Date_Created, "Creation time");
- Get_DATE1904_DEPENDOFVERSION(Date_Modified, "Modification time");
- Get_B4(TimeScale, "Time scale");
- Get_B_DEPENDOFVERSION(Duration, "Duration"); Param_Info2C(TimeScale, Duration*1000/TimeScale, " ms");
- Get_B2 (Language, "Language"); Param_Info1(Language_Get(Language));
- Skip_B2( "Quality");
-
- FILLING_BEGIN();
- Fill(StreamKind_Last, StreamPos_Last, "Language", Language_Get(Language));
- Streams[moov_trak_tkhd_TrackID].mdhd_Duration=Duration;
- Streams[moov_trak_tkhd_TrackID].mdhd_TimeScale=TimeScale;
-
- //Coherency tests
- if (Streams[moov_trak_tkhd_TrackID].tkhd_Duration*1.01>=Duration*0.99 && Streams[moov_trak_tkhd_TrackID].tkhd_Duration*0.99<=Duration*1.01 && TimeScale && moov_mvhd_TimeScale!=TimeScale && moov_mvhd_TimeScale)
- {
- float64 Ratio=((float64)TimeScale)/((float64)moov_mvhd_TimeScale);
- Streams[moov_trak_tkhd_TrackID].tkhd_Duration=float64_int64s(Streams[moov_trak_tkhd_TrackID].tkhd_Duration/Ratio);
- Clear(StreamKind_Last, StreamPos_Last, "Duration_Source");
- Fill(StreamKind_Last, StreamPos_Last, "Duration", float64_int64s(((float64)Streams[moov_trak_tkhd_TrackID].tkhd_Duration)*1000/((float64)moov_mvhd_TimeScale)), 10, true);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf()
-{
- Element_Name("Media Information");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_code()
-{
- Element_Name("code (found in Avid?)");
-
- //Parsing
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_code_sean()
-{
- Element_Name("sean (found in Avid?)");
-
- //Parsing
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_code_sean_RU_A()
-{
- Element_Name("RU*A (found in Avid?)");
-
- //Parsing
- Ztring Path;
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Get_Local(Element_Size-Element_Offset, Path, "Path?");
-
- FILLING_BEGIN();
- Streams[moov_trak_tkhd_TrackID].File_Name=Path;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_dinf()
-{
- Element_Name("Data Information");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_dinf_url_()
-{
- NAME_VERSION_FLAG("Data Location");
-
- //Parsing
- Skip_Local(Element_Size-Element_Offset, "location");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_dinf_urn_()
-{
- NAME_VERSION_FLAG("Data Name");
-
- //Parsing
- Skip_Local(Element_Size-Element_Offset, "name TODO location after null string");
- //Skip_Local(Element_Size, location);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_dinf_dref()
-{
- NAME_VERSION_FLAG("Data Reference");
-
- //Parsing
- Skip_B4( "entry_count");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_dinf_dref_alis()
-{
- NAME_VERSION_FLAG("Alias"); //bit 0 = external/internal data
-
- //Often empty
- bool IsInternal;
- Get_Flags (Flags, 0, IsInternal, "IsInternal");
- if (IsInternal)
- return; //Internal stream, no alias
-
- //Parsing
- Ztring file_name_string, volume_name_string, Directory_Name;
- int16u record_size, record_version, alias_kind;
- int8u volume_name_string_length, file_name_string_length;
- Element_Begin1("Mac OS Alias Record");
- Skip_B4( "user type name/app creator code");
- Get_B2 (record_size, "record size");
- Get_B2 (record_version, "record version");
- if (record_version!=2)
- {
- Skip_XX(Element_Size-Element_Offset, "unknown");
- return;
- }
- int64u End=Element_Offset-8+record_size;
- if (End>Element_Size)
- End=Element_Size; //Found one file having record_size = the size of the atom, header included
- Get_B2 (alias_kind, "alias kind"); Param_Info1(alias_kind?"directory":"file");
- Get_B1 (volume_name_string_length, "volume name string length");
- if (volume_name_string_length>27)
- volume_name_string_length=27;
- Get_Local(volume_name_string_length, volume_name_string, "volume name string");
- if (volume_name_string_length<27)
- Skip_XX(27-volume_name_string_length, "volume name string padding");
- Skip_B4( "volume created mac local date"); //seconds since beginning 1904 to 2040
- Skip_B2( "file system type");
- Skip_B2( "drive type");
- Skip_B4( "parent directory ID");
- Get_B1 (file_name_string_length, "file name string length");
- if (file_name_string_length>99)
- file_name_string_length=99;
- Get_Local(file_name_string_length, file_name_string, "file name string");
- if (file_name_string_length<63)
- Skip_XX(63-file_name_string_length, "file name string padding");
- if (file_name_string_length<=63)
- Skip_B4( "file number");
- else if (file_name_string_length<67)
- Skip_XX(67-file_name_string_length, "file name string padding (hack)");
- if (file_name_string_length<=67)
- Skip_B4( "file created mac local date");
- else if (file_name_string_length<71)
- Skip_XX(71-file_name_string_length, "file name string padding (hack)");
- if (file_name_string_length<=71)
- Skip_B4( "file type name");
- else if (file_name_string_length<75)
- Skip_XX(75-file_name_string_length, "file name string padding (hack)");
- if (file_name_string_length<=75)
- Skip_B4( "file creator name");
- else if (file_name_string_length<79)
- Skip_XX(79-file_name_string_length, "file name string padding (hack)");
- if (file_name_string_length<=79)
- Skip_B2( "next level up from alias");
- else if (file_name_string_length<81)
- Skip_XX(81-file_name_string_length, "file name string padding (hack)");
- if (file_name_string_length<=81)
- Skip_B2( "next level down to target");
- else if (file_name_string_length<83)
- Skip_XX(83-file_name_string_length, "file name string padding (hack)");
- if (file_name_string_length<=83)
- Skip_B4( "volume attributes");
- else if (file_name_string_length<87)
- Skip_XX(87-file_name_string_length, "file name string padding (hack)");
- if (file_name_string_length<=87)
- Skip_B2( "volume file system ID");
- else if (file_name_string_length<89)
- Skip_XX(89-file_name_string_length, "file name string padding (hack)");
- if (file_name_string_length<=89)
- Skip_XX(10, "Reserved");
- else if (file_name_string_length<99)
- Skip_XX(99-file_name_string_length, "file name string padding (hack)");
- while(Element_Offset<End)
- {
- Trusted++;
- int16u type, size;
- Get_B2 (type, "type");
- Get_B2 (size, "size");
- switch (type)
- {
- case 0x0000 :
- Get_Local(size, Directory_Name, "Directory Name");
- break;
- case 0x0002 :
- Skip_Local(size, "Absolute Path");
- break;
- case 0xFFFF :
- Skip_XX(End-Element_Offset, "Padding");
- break;
- default :
- Skip_Local(size, "Unknown");
- }
- if (size%2)
- Skip_B1( "Padding");
- }
- Element_End0();
-
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Padding");
-
- FILLING_BEGIN();
- if (Streams[moov_trak_tkhd_TrackID].File_Name.empty()) //Priority to "code" version
- {
- if (!Directory_Name.empty())
- {
- Streams[moov_trak_tkhd_TrackID].File_Name+=Directory_Name;
- Streams[moov_trak_tkhd_TrackID].File_Name+=ZenLib::PathSeparator;
- }
- Streams[moov_trak_tkhd_TrackID].File_Name+=file_name_string;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_dinf_dref_rsrc()
-{
- Element_Name("Resource alias");
-
- //Parsing
- Skip_B4( "Flags"); //bit 0 = external/internal data
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_gmhd()
-{
- Element_Name("Generic Media Header");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_gmhd_gmin()
-{
- NAME_VERSION_FLAG("Generic Media Info");
-
- //Parsing
- Skip_B2( "Graphics mode");
- Skip_B2( "Opcolor (red)");
- Skip_B2( "Opcolor (green)");
- Skip_B2( "Opcolor (blue)");
- Skip_B2( "Balance");
- Skip_B2( "Reserved");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_gmhd_tmcd()
-{
- Element_Name("TimeCode");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_gmhd_tcmi()
-{
- moov_trak_mdia_minf_gmhd_tmcd_tcmi();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_gmhd_tmcd_tcmi()
-{
- NAME_VERSION_FLAG("TimeCode Media Information");
-
- //Parsing
- int8u FontNameSize;
- bool IsVisual;
- Get_Flags (Flags, 0, IsVisual, "IsVisual");
- Skip_B2( "Text font");
- Info_B2(TextFace, "Text face");
- Skip_Flags(TextFace, 0, "Bold");
- Skip_Flags(TextFace, 1, "Italic");
- Skip_Flags(TextFace, 2, "Underline");
- Skip_Flags(TextFace, 3, "Outline");
- Skip_Flags(TextFace, 4, "Shadow");
- Skip_Flags(TextFace, 5, "Condense");
- Skip_Flags(TextFace, 6, "Extend");
- if (Element_Size>=25 && 25+Buffer[Buffer_Offset+24]==Element_Size)
- Skip_BFP4(16, "Text size"); //Non-Standard, but found in several files
- else
- Skip_B2( "Text size");
- Skip_B2( "Text color (red)");
- Skip_B2( "Text color (green)");
- Skip_B2( "Text color (blue)");
- Skip_B2( "Background color (red)");
- Skip_B2( "Background color (green)");
- Skip_B2( "Background color (blue)");
- Get_B1 (FontNameSize, "Font name size");
- Skip_Local(FontNameSize, "Font name");
-
- FILLING_BEGIN();
- Streams[moov_trak_tkhd_TrackID].TimeCode_IsVisual=IsVisual;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_hint()
-{
- NAME_VERSION_FLAG("Hint");
-
- //Parsing
- Skip_B2( "Maximum packet delivery unit");
- Skip_B2( "Average packet delivery unit");
- Skip_B4( "Maximum bit rate");
- Skip_B4( "Average bit rate");
- Skip_B4( "Reserved");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_hdlr()
-{
- moov_trak_mdia_hdlr();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_hmhd()
-{
- NAME_VERSION_FLAG("Hint Media Header");
-
- //Parsing
- Skip_B2( "maxPDUsize");
- Skip_B2( "avgPDUsize");
- Skip_B4( "maxbitrate");
- Skip_B4( "avgbitrate");
- Skip_B4( "reserved");
-
- FILLING_BEGIN();
- if (StreamKind_Last==Stream_Max) //Note: some files have both vmhd and hmhd, I don't know the meaning of such header, so skipping hmhd for the moment
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Hint");
- Streams[moov_trak_tkhd_TrackID].StreamKind=Stream_Other;
- Streams[moov_trak_tkhd_TrackID].StreamPos=StreamPos_Last;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_nmhd()
-{
- NAME_VERSION_FLAG("Null Media Header");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_smhd()
-{
- NAME_VERSION_FLAG("Sound Media Header");
-
- //Parsing
- Skip_B2( "Audio balance");
- Skip_B2( "Reserved");
-
- FILLING_BEGIN();
- if (StreamKind_Last!=Stream_Audio)
- Stream_Prepare(Stream_Audio);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_vmhd()
-{
- NAME_VERSION_FLAG("Video Media Header")
-
- //Parsing
- Skip_B2( "Graphic mode");
- Skip_B2( "Graphic mode color R");
- Skip_B2( "Graphic mode color G");
- Skip_B2( "Graphic mode color B");
-
- FILLING_BEGIN();
- if (StreamKind_Last!=Stream_Video)
- {
- Stream_Prepare(Stream_Video);
- Streams[moov_trak_tkhd_TrackID].StreamKind=Stream_Video;
- Streams[moov_trak_tkhd_TrackID].StreamPos=StreamPos_Last;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_sthd()
-{
- NAME_VERSION_FLAG("Subtitle Media Header")
-
- FILLING_BEGIN();
- if (StreamKind_Last!=Stream_Text)
- {
- Stream_Prepare(Stream_Text);
- Streams[moov_trak_tkhd_TrackID].StreamKind=Stream_Text;
- Streams[moov_trak_tkhd_TrackID].StreamPos=StreamPos_Last;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl()
-{
- Element_Name("Sample Table");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_co64()
-{
- NAME_VERSION_FLAG("Chunk offset");
-
- int64u Offset;
- int32u Count;
- Get_B4 (Count, "Number of entries");
-
- if (Count==0)
- return;
-
- std::vector<int64u> &stco=Streams[moov_trak_tkhd_TrackID].stco;
- stco.resize(Count<FrameCount_MaxPerStream?Count:FrameCount_MaxPerStream);
- int64u* stco_Data=&stco[0];
-
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- //Too much slow
- /*
- Get_B8 (Offset, "Offset");
- */
-
- //Faster
- if (Element_Offset+8>Element_Size)
- break; //Problem
- Offset=BigEndian2int64u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=8;
-
- if (Pos<FrameCount_MaxPerStream)
- {
- (*stco_Data)=Offset;
- stco_Data++;
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_cslg()
-{
- Element_Name("Composition Shift Least Greatest");
-
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_ctts()
-{
- NAME_VERSION_FLAG("Composition Time To Sample");
-
- //Parsing
- int32u entry_count;
- Get_B4 (entry_count, "entry_count");
-
- //Currently no usage
- //for (int32u Pos=0; Pos<entry_count; Pos++)
- {
- //int32u sample_count, sample_offset;
-
- //Too much slow
- /*
- Get_B4 (sample_count, "sample_count");
- Get_B4 (sample_offset, "sample_offset");
- */
-
- //Faster
- /*
- if (Element_Offset+8>Element_Size)
- break; //Problem
- sample_count =BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset );
- sample_offset=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset+4);
- Element_Offset+=8;
- */
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_sdtp()
-{
- Element_Name("Sample Dependency");
-
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stco()
-{
- NAME_VERSION_FLAG("Chunk offset");
-
- int32u Count, Offset;
- Get_B4 (Count, "Number of entries");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- //Too much slow
- /*
- Get_B4 (Offset, "Offset");
- */
-
- //Faster
- if (Element_Offset+4>Element_Size)
- break; //Problem
- Offset=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
-
- if (Pos<FrameCount_MaxPerStream)
- Streams[moov_trak_tkhd_TrackID].stco.push_back(Offset);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stdp()
-{
- Element_Name("Degradation Priority");
-
- //Parsing
- int32u sample_count;
- Get_B4 (sample_count, "sample-count");
-
- for (int32u Pos=0; Pos<sample_count; Pos++)
- {
- Skip_B2( "priority");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stps()
-{
- NAME_VERSION_FLAG("Partial Sync Sample");
-
- //Parsing
- int32u sample_count;
- Get_B4 (sample_count, "sample-count");
-
- int32u Offset=1; //By default, begin at 1
- bool stss_PreviouslyEmpty=Streams[moov_trak_tkhd_TrackID].stss.empty();
- for (int32u Pos=0; Pos<sample_count; Pos++)
- {
- int32u sample_number;
-
- //Too much slow
- /*
- Get_B4 (sample_number, "sample-number");
- */
-
- //Faster
- if (Element_Offset+4>Element_Size)
- break; //Problem
- sample_number=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
-
- //Coherency testing (first frame is 0 or 1)
- if (sample_number==0 && Offset)
- {
- for (size_t Pos=0; Pos<Streams[moov_trak_tkhd_TrackID].stss.size(); Pos++)
- Streams[moov_trak_tkhd_TrackID].stss[Pos]--;
- Offset=0;
- }
-
- Streams[moov_trak_tkhd_TrackID].stss.push_back(sample_number-Offset);
- }
- if (!stss_PreviouslyEmpty)
- std::sort(Streams[moov_trak_tkhd_TrackID].stss.begin(), Streams[moov_trak_tkhd_TrackID].stss.end());
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsc()
-{
- NAME_VERSION_FLAG("Sample To Chunk");
-
- //Parsing
- int32u Count;
- stream::stsc_struct Stsc;
- Get_B4 (Count, "Number of entries");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- //Too much slow
- /*
- Element_Begin1("Entry", 12);
- int32u SampleDescriptionId;
- Get_B4 (Stsc.FirstChunk, "First chunk");
- Get_B4 (Stsc.SamplesPerChunk, "Samples per chunk");
- Get_B4 (SampleDescriptionId, "Sample description ID");
- Element_Info1(Stsc.FirstChunk);
- Element_Info1(Stsc.SamplesPerChunk);
- Element_Info1(SampleDescriptionId);
- Element_End0();
- Streams[moov_trak_tkhd_TrackID].stsc.push_back(Stsc);
- */
-
- //Faster
- if (Pos<FrameCount_MaxPerStream)
- {
- if (Element_Offset+12>Element_Size)
- break; //Problem
- Stsc.FirstChunk =BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset );
- Stsc.SamplesPerChunk=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset+4);
- Element_Offset+=12;
-
- Streams[moov_trak_tkhd_TrackID].stsc.push_back(Stsc);
- }
- else
- Element_Offset=Element_Size; //No need
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd()
-{
- NAME_VERSION_FLAG("Sample Description");
-
- //Parsing
- Skip_B4( "Count");
-
- //Filling
- moov_trak_mdia_minf_stbl_stsd_Pos=0;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_stpp()
-{
- Element_Name("Subtitle (stpp)");
-
- //Parsing
- string NameSpace;
- Skip_B4( "Reserved");
- Skip_B2( "Reserved");
- Skip_B2( "Data reference index");
- size_t Pos=(size_t)Element_Offset;
- while (Pos<Element_Size)
- {
- if (Buffer[Buffer_Offset+Pos]=='\0')
- break;
- Pos++;
- }
- Get_String(Pos+1-Element_Offset, NameSpace, "namespace");
- Pos=(size_t)Element_Offset;
- while (Pos<Element_Size)
- {
- if (Buffer[Buffer_Offset+Pos]=='\0')
- break;
- Pos++;
- }
- Skip_Local(Pos+1-Element_Offset, "schema_location");
- Pos=(size_t)Element_Offset;
- while (Pos<Element_Size)
- {
- if (Buffer[Buffer_Offset+Pos]=='\0')
- break;
- Pos++;
- }
- Skip_Local(Pos+1-Element_Offset, "image_mime_type");
-
- FILLING_BEGIN();
- CodecID_Fill(__T("stpp"), StreamKind_Last, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), "stpp", Unlimited, true, true);
- if (NameSpace.find("smpte-tt")!=string::npos)
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "Timed Text", Unlimited, true, true);
-
- #ifdef MEDIAINFO_TIMEDTEXT_YES
- File_TimedText* Parser=new File_TimedText;
- int64u Elemen_Code_Save=Element_Code;
- Element_Code=moov_trak_tkhd_TrackID; //Element_Code is use for stream identifier
- Open_Buffer_Init(Parser);
- Element_Code=Elemen_Code_Save;
- Parser->IsChapter=Streams[moov_trak_tkhd_TrackID].IsChapter;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
- #endif //MEDIAINFO_TIMEDTEXT_YES
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_text()
-{
- Element_Name("Text (Apple)");
-
- //Parsing
- int8u TextName_Size;
- Skip_B4( "Reserved");
- Skip_B2( "Reserved");
- Skip_B2( "Data reference index");
- Info_B4(Flags, "Display flags");
- Skip_Flags(Flags, 1, "Don't auto scale");
- Skip_Flags(Flags, 3, "Use movie background color");
- Skip_Flags(Flags, 5, "Scroll in");
- Skip_Flags(Flags, 6, "Scroll out");
- Skip_Flags(Flags, 7, "Horizontal scroll");
- Skip_Flags(Flags, 8, "Reverse scroll");
- Skip_Flags(Flags, 9, "Continuous scroll");
- Skip_Flags(Flags, 12, "Drop shadow");
- Skip_Flags(Flags, 13, "Anti-alias");
- Skip_Flags(Flags, 14, "Key text");
- Skip_B4( "Text justification");
- Skip_B2( "Background color (Red)");
- Skip_B2( "Background color (Green)");
- Skip_B2( "Background color (Blue)");
- Element_Begin1("Default text box");
- Skip_B2( "top");
- Skip_B2( "left");
- Skip_B2( "bottom");
- Skip_B2( "right");
- Element_End0();
- Skip_B8( "Reserved");
- Skip_B2( "Font number");
- Info_B2(FontFace, "Font face");
- Skip_Flags(FontFace, 0, "Bold");
- Skip_Flags(FontFace, 1, "Italic");
- Skip_Flags(FontFace, 2, "Underline");
- Skip_Flags(FontFace, 3, "Outline");
- Skip_Flags(FontFace, 4, "Shadow");
- Skip_Flags(FontFace, 5, "Condense");
- Skip_Flags(FontFace, 6, "Extend");
- Skip_B1( "Reserved");
- Skip_B1( "Reserved"); //Specs say 16-bits, but not in coherency with my test sample
- Skip_B2( "Foreground color (Red)");
- Skip_B2( "Foreground color (Green)");
- Skip_B2( "Foreground color (Blue)");
- Get_B1 (TextName_Size, "Text name size");
- Skip_Local(TextName_Size, "Text name");
-
- FILLING_BEGIN();
- CodecID_Fill(__T("text"), StreamKind_Last, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), "text", Unlimited, true, true);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "Timed Text", Unlimited, true, true);
-
- #ifdef MEDIAINFO_TIMEDTEXT_YES
- File_TimedText* Parser=new File_TimedText;
- int64u Elemen_Code_Save=Element_Code;
- Element_Code=moov_trak_tkhd_TrackID; //Element_Code is use for stream identifier
- Open_Buffer_Init(Parser);
- Element_Code=Elemen_Code_Save;
- Parser->IsChapter=Streams[moov_trak_tkhd_TrackID].IsChapter;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
- #endif //MEDIAINFO_TIMEDTEXT_YES
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_tmcd()
-{
- Element_Name("TimeCode");
-
- //Parsing
- stream::timecode *tc=new stream::timecode();
- int32u TimeCodeFlags;
- int8u NumberOfFrames;
- Skip_B4( "Reserved");
- Skip_B2( "Reserved");
- Skip_B2( "Data reference index");
- Skip_B4( "Reserved");
- Get_B4 (TimeCodeFlags, "Flags (timecode)");
- Get_Flags (TimeCodeFlags, 0, tc->DropFrame, "Drop frame");
- Get_Flags (TimeCodeFlags, 1, tc->H24, "24 hour max ");
- Get_Flags (TimeCodeFlags, 2, tc->NegativeTimes, "Negative times OK");
- Skip_Flags(TimeCodeFlags, 3, "Counter");
- Get_B4 (tc->TimeScale, "Time scale");
- Get_B4 (tc->FrameDuration, "Frame duration");
- Get_B1 (NumberOfFrames, "Number of frames");
- if (Element_Size==Element_Offset+3 || (Element_Size>=Element_Offset+7 && Element_Size>=Element_Offset+7+BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset+3)))
- Skip_B3( "Reserved");
- else
- Skip_B1( "Reserved"); //Non-standard but several files are like that
-
- FILLING_BEGIN();
- //Bug in one file
- if (tc->TimeScale==25 && tc->FrameDuration==100)
- tc->TimeScale=2500;
-
- if (StreamKind_Last!=Stream_Other)
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_Format, "QuickTime TC");
- Streams[moov_trak_tkhd_TrackID].StreamKind=Stream_Other;
- Streams[moov_trak_tkhd_TrackID].StreamPos=StreamPos_Last;
- }
-
- //Filling
- Streams[moov_trak_tkhd_TrackID].TimeCode=tc;
-
- //Preparing TimeCode parser
- File_Mpeg4_TimeCode* Parser=new File_Mpeg4_TimeCode;
- Open_Buffer_Init(Parser);
- mdat_Pos_ToParseInPriority_StreamIDs.push_back(moov_trak_tkhd_TrackID);
- Streams[moov_trak_tkhd_TrackID].IsPriorityStream=true;
- ((File_Mpeg4_TimeCode*)Parser)->NumberOfFrames=NumberOfFrames; //tc->FrameDuration?(((float64)tc->TimeScale)/tc->FrameDuration):0;
- ((File_Mpeg4_TimeCode*)Parser)->DropFrame=tc->DropFrame;
- ((File_Mpeg4_TimeCode*)Parser)->NegativeTimes=tc->NegativeTimes;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
- FILLING_ELSE();
- delete tc; //tc=NULL;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_tmcd_name()
-{
- Element_Name("Name (TimeCode)");
-
- //Parsing
- Ztring Value;
- int16u Size, Language;
- Get_B2(Size, "Size");
- Get_B2(Language, "Language"); Param_Info1(Language_Get(Language));
- if (Size)
- {
- int8u Junk;
- Peek_B1(Junk);
- if (Junk<0x20)
- {
- Skip_B1( "Junk");
- Size--;
- }
- }
- Get_Local(Size, Value, "Value");
-
- FILLING_BEGIN();
- Fill(Stream_Other, StreamPos_Last, "Title", Value);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_tx3g()
-{
- Element_Name("Text");
-
- //Parsing
- Skip_B4( "Reserved");
- Skip_B2( "Reserved");
- Skip_B2( "Data reference index");
- Info_B4(Flags, "displayFlags");
- Skip_Flags(Flags, 5, "Scroll in");
- Skip_Flags(Flags, 6, "Scroll out");
- Skip_Flags(Flags, 7, "Horizontal scroll");
- Skip_Flags(Flags, 8, "Reverse scroll");
- Skip_Flags(Flags, 10, "Continuous karaoke");
- Skip_Flags(Flags, 17, "write text vertically");
- Skip_Flags(Flags, 18, "fill text region");
- Skip_B1( "horizontal-justification");
- Skip_B1( "vertical-justification");
- Skip_B1( "background-color-rgba (red)");
- Skip_B1( "background-color-rgba (green)");
- Skip_B1( "background-color-rgba (blue)");
- Skip_B1( "background-color-rgba (alpha)");
- Element_Begin1("default-text-box");
- if (Element_Size>42 && CC4(Buffer+Buffer_Offset+38)==Elements::moov_trak_mdia_minf_stbl_stsd_tx3g_ftab)
- {
- Skip_B1( "top"); //Specs say 16-bits, but not in coherency with a test sample
- Skip_B1( "left"); //Specs say 16-bits, but not in coherency with a test sample
- Skip_B1( "bottom"); //Specs say 16-bits, but not in coherency with a test sample
- Skip_B1( "right"); //Specs say 16-bits, but not in coherency with a test sample
- }
- else
- {
- Skip_B2( "top");
- Skip_B2( "left");
- Skip_B2( "bottom");
- Skip_B2( "right");
- }
- Element_End0();
- Element_Begin1("default-style");
- Skip_B2( "startChar");
- Skip_B2( "endChar");
- Skip_B2( "font-ID");
- Skip_B1( "face-style-flags");
- Skip_B1( "font-size");
- Skip_B1( "text-color-rgba (red)");
- Skip_B1( "text-color-rgba (green)");
- Skip_B1( "text-color-rgba (blue)");
- Skip_B1( "text-color-rgba (alpha)");
- Element_End0();
-
- FILLING_BEGIN();
- CodecID_Fill(__T("tx3g"), StreamKind_Last, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), "tx3g", Unlimited, true, true);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "Timed Text", Unlimited, true, true);
-
- #ifdef MEDIAINFO_TIMEDTEXT_YES
- File_TimedText* Parser=new File_TimedText;
- int64u Elemen_Code_Save=Element_Code;
- Element_Code=moov_trak_tkhd_TrackID; //Element_Code is use for stream identifier
- Open_Buffer_Init(Parser);
- Element_Code=Elemen_Code_Save;
- Parser->IsChapter=Streams[moov_trak_tkhd_TrackID].IsChapter;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
- #endif //MEDIAINFO_TIMEDTEXT_YES
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_tx3g_ftab()
-{
- Element_Name("Font table");
-
- //Found strange data in one file, but no specs about this
- if (Element_Size==0x17-8 && (BigEndian2int16u(Buffer+Buffer_Offset)!=1 || BigEndian2int16u(Buffer+Buffer_Offset+4)!=0x17-8-5))
- {
- Skip_XX(Element_Size, "Unknown");
- return;
- }
-
- //Parsing
- int16u entry_count;
- Get_B2 (entry_count, "entry-count");
-
- for (int16u Pos=0; Pos<entry_count; Pos++)
- {
- int8u FontName_Length;
- Skip_B2( "font-ID");
- Get_B1 (FontName_Length, "font-name-length");
- Skip_Local(FontName_Length, "font-name");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx()
-{
- //Parsing
- Skip_B6( "Reserved");
- Skip_B2( "Data reference index");
-
- FILLING_BEGIN()
- if (StreamKind_Last==Stream_Max)
- {
- switch (Element_Code)
- {
- case Elements::moov_trak_mdia_minf_stbl_stsd_mp4a : Stream_Prepare(Stream_Audio); break;
- case Elements::moov_trak_mdia_minf_stbl_stsd_mp4v : Stream_Prepare(Stream_Video); break;
- case Elements::moov_trak_mdia_minf_stbl_stsd_mp4s : Stream_Prepare(Stream_Other); break;
- default : ;
- }
-
- Streams[moov_trak_tkhd_TrackID].StreamKind=StreamKind_Last;
- Streams[moov_trak_tkhd_TrackID].StreamPos=StreamPos_Last;
- }
-
- switch (StreamKind_Last)
- {
- case Stream_Video : moov_trak_mdia_minf_stbl_stsd_xxxxVideo(); break;
- case Stream_Audio : moov_trak_mdia_minf_stbl_stsd_xxxxSound(); break;
- case Stream_Text : moov_trak_mdia_minf_stbl_stsd_xxxxText (); break;
- default :
- CodecID_Fill(Ztring().From_CC4((int32u)Element_Code), StreamKind_Last, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- switch (Element_Code)
- {
- case Elements::moov_trak_mdia_minf_stbl_stsd_mp4s : moov_trak_mdia_minf_stbl_stsd_xxxxStream(); break;
- default : Skip_XX(Element_TotalSize_Get()-Element_Offset, "Unknown");
- }
- }
-
- if (Streams[moov_trak_tkhd_TrackID].Parsers.size()==1 && !Retrieve(StreamKind_Last, StreamPos_Last, "Encryption").empty())
- {
- Finish(Streams[moov_trak_tkhd_TrackID].Parsers[0]);
- }
- moov_trak_mdia_minf_stbl_stsd_Pos++;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxxSound()
-{
- Element_Name("Audio");
-
- int32u SampleRate, Channels, SampleSize, Flags=0;
- int16u Version, ID;
- Get_B2 (Version, "Version");
- Skip_B2( "Revision level");
- Skip_C4( "Vendor");
- if (Version<2) // Version 0 or 1
- {
- int16u Channels16, SampleSize16, SampleRate16;
- Get_B2 (Channels16, "Number of channels");
- Get_B2 (SampleSize16, "Sample size");
- Get_B2 (ID, "Compression ID");
- Skip_B2( "Packet size");
- Get_B2 (SampleRate16, "Sample rate"); Param_Info2(SampleRate16, " Hz");
- Skip_B2( "Reserved");
- if (Version>=1)
- {
- Skip_B4( "Samples per packet");
- Skip_B4( "Bytes per packet");
- Skip_B4( "Bytes per frame");
- Skip_B4( "Bytes per sample");
- }
- Channels=Channels16;
- SampleSize=SampleSize16;
- SampleRate=SampleRate16;
- }
- else if (Version==2)
- {
- float64 SampleRateF64;
- Skip_B2( "Reserved (0x0003)");
- Skip_B2( "Reserved (0x0010)");
- Skip_B2( "Reserved (0xFFFE)");
- Skip_B2( "Reserved (0x0000)");
- Skip_B4( "Reserved (0x00010000)");
- Skip_B4( "Size of Struct");
- Get_BF8(SampleRateF64, "Sample rate");
- Get_B4 (Channels, "Number of channels");
- Skip_B4( "Reserved (0x7F000000)");
- Get_B4 (SampleSize, "Sample size");
- Get_B4 (Flags, "Flags");
- Skip_B4( "Bytes per packet");
- Skip_B4( "Frames per packet");
-
- SampleRate=(int32u)SampleRateF64;
- }
- else
- {
- Skip_XX(Element_Size, "Unknown");
- return;
- }
-
- //Bug found in one file: sample size is 16 with a 24-bit CodecID ("in24")
- if (Element_Code==0x696E3234 && SampleSize==16)
- SampleSize=24; //Correcting the header
- //Bug found in one file: sample size is 16 with a 32-bit CodecID ("fl32")
- if (Element_Code==0x666C3332 && SampleSize==16)
- SampleSize=32; //Correcting the header
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- //samr bug viewed in some files: channels and Sampling rate are wrong
- if (Element_Code==0x73616D72) //"samr"
- {
- SampleRate=8000;
- Channels=1;
- }
-
- //lpcm puts "1" in the SampleRate field and Timescale is the real sample size
- if (Element_Code==0x6C70636D && SampleRate==1) //"lpcm"
- {
- SampleRate=Streams[moov_trak_tkhd_TrackID].mdhd_TimeScale;
- }
-
- std::string Codec;
- Codec.append(1, (char)((Element_Code&0xFF000000)>>24));
- Codec.append(1, (char)((Element_Code&0x00FF0000)>>16));
- if (Codec!="ms") //Normal
- {
- Codec.append(1, (char)((Element_Code&0x0000FF00)>> 8));
- Codec.append(1, (char)((Element_Code&0x000000FF)>> 0));
- if (Codec!="mp4a") //mp4a is for Mpeg4 system
- CodecID_Fill(Ztring(Codec.c_str()), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- if (Codec!="raw ")
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Codec, false, true);
- else
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "PCM", Error, false, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec_CC, Codec, false, true);
- if (Codec=="drms")
- Fill(Stream_Audio, StreamPos_Last, Audio_Encryption, "iTunes");
- if (Codec=="enca")
- Fill(Stream_Audio, StreamPos_Last, Audio_Encryption, "Encrypted");
- }
- else //Microsoft 2CC
- {
- int64u CodecI= ((Element_Code&0x0000FF00ULL)>> 8)
- + ((Element_Code&0x000000FFULL)>> 0); //FormatTag
- Codec=Ztring().From_Number(CodecI, 16).To_Local();
- CodecID_Fill(Ztring::ToZtring(CodecI, 16), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Codec, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec_CC, Codec, true);
- }
- #if defined(MEDIAINFO_AAC_YES)
- if (Version==2 && Element_Code==Elements::moov_trak_mdia_minf_stbl_stsd_mp4a) //This is not normal, but I don't know where is audioObjectType, default to 2 (AAC LC)
- {
- File_Aac* Parser=new File_Aac;
- Parser->AudioSpecificConfig_OutOfBand(SampleRate, 2);
- Parser->Mode=File_Aac::Mode_raw_data_block;
- Parser->FrameIsAlwaysComplete=true;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_AMR_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Mpeg4, Ztring(Codec.c_str()), InfoCodecID_Format)==__T("AMR"))
- {
- //Creating the parser
- File_Amr MI;
- MI.Codec=Ztring().From_Local(Codec.c_str());
- Open_Buffer_Init(&MI);
-
- //Parsing
- Open_Buffer_Continue(&MI, 0);
-
- //Filling
- Finish(&MI);
- Merge(MI, StreamKind_Last, 0, StreamPos_Last);
- }
- #endif
- #if defined(MEDIAINFO_ADPCM_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Mpeg4, Ztring(Codec.c_str()), InfoCodecID_Format)==__T("ADPCM"))
- {
- //Creating the parser
- File_Adpcm MI;
- MI.Codec=Ztring().From_Local(Codec.c_str());
- Open_Buffer_Init(&MI);
-
- //Parsing
- Open_Buffer_Continue(&MI, 0);
-
- //Filling
- Finish(&MI);
- Merge(MI, StreamKind_Last, 0, StreamPos_Last);
- }
- #endif
- #if defined(MEDIAINFO_PCM_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Mpeg4, Ztring(Codec.c_str()), InfoCodecID_Format)==__T("PCM"))
- {
- //Info of stream size
- Streams[moov_trak_tkhd_TrackID].stsz_Sample_Multiplier=Channels*SampleSize/8;
- #if MEDIAINFO_DEMUX
- Streams[moov_trak_tkhd_TrackID].PtsDtsAreSame=true;
- #endif // MEDIAINFO_DEMUX
-
- //Creating the parser
- if ((Channels==1 && (StreamPos_Last%2)==0)
- || (Streams.find(moov_trak_tkhd_TrackID-1)!=Streams.end() && Streams[moov_trak_tkhd_TrackID-1].IsPcmMono))
- {
- File_ChannelGrouping* Parser=new File_ChannelGrouping;
- if (StreamPos_Last%2 && !Streams[moov_trak_tkhd_TrackID-1].Parsers.empty())
- {
- Parser->Channel_Pos=1;
- Parser->Common=((File_ChannelGrouping*)Streams[moov_trak_tkhd_TrackID-1].Parsers[0])->Common;
- Parser->StreamID=moov_trak_tkhd_TrackID-1;
- Element_Code=moov_trak_tkhd_TrackID-1;
- }
- else
- {
- Parser->Channel_Pos=0;
- Streams[moov_trak_tkhd_TrackID].IsPcmMono=true;
- }
- Parser->Channel_Total=2;
- Parser->SamplingRate=(int16u)SampleRate;
- Parser->BitDepth=(int8u)SampleSize;
-
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
-
- //PCM parser
- File_Pcm* Parser=new File_Pcm;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- if (Version==2)
- {
- if (Flags&0x01)
- Parser->Endianness='F';
- else
- {
- Parser->Endianness=(Flags&0x02)?'B':'L';
- Parser->Sign=(Flags&0x04)?'S':'U';
- }
- }
- Parser->Codec=Ztring().From_Local(Codec.c_str());
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- Streams[moov_trak_tkhd_TrackID].IsPcm=true;
-
- #if MEDIAINFO_DEMUX
- Streams[moov_trak_tkhd_TrackID].Demux_Level=4; //Intermediate
- #endif //MEDIAINFO_DEMUX
- }
- #endif
- #if defined(MEDIAINFO_MPEGA_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Mpeg4, Ztring(Codec.c_str()), InfoCodecID_Format)==__T("MPEG Audio"))
- {
- //Creating the parser
- File_Mpega* Parser=new File_Mpega;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- if (Element_Code==0x6F776D61) //"owma"
- {
- //Parsing
- int32u SamplingRate, BytesPerSec;
- int16u CodecID, Channels, Data_Size, Resolution;
- Get_L2 (CodecID, "Codec ID");
- Get_L2 (Channels, "Number of Channels");
- Get_L4 (SamplingRate, "Samples Per Second");
- Get_L4 (BytesPerSec, "Average Number of Bytes Per Second");
- Skip_L2( "Block Alignment");
- Get_L2 (Resolution, "Bits / Sample");
- Get_L2 (Data_Size, "Codec Specific Data Size");
-
- //Filling
- Ztring Codec; Codec.From_Number(CodecID, 16);
- Codec.MakeUpperCase();
- CodecID_Fill(Codec, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Codec); //May be replaced by codec parser
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec_CC, Codec);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels, 10, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SamplingRate, 10, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, BytesPerSec*8, 10, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, Resolution, 10, true);
-
- FILLING_BEGIN();
- //Creating the parser
- if (0);
- #if defined(MEDIAINFO_MPEGA_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Ztring::ToZtring(CodecID, 16))==__T("MPEG Audio"))
- {
- File_Mpega* Parser=new File_Mpega;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- FILLING_END();
-
- //Parsing
- if (Data_Size>0)
- {
- Element_Begin1("Codec Specific Data");
- switch (CodecID)
- {
- case 0x0161 :
- //Parsing
- Skip_L4( "SamplesPerBlock");
- Skip_L2( "EncodeOptions");
- Skip_L4( "SuperBlockAlign");
- break;
- default : Skip_XX(Data_Size, "Unknown");
- }
- Element_End0();
- }
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (!((MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("AVC") && Config->Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Get())
- || (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("HEVC") && Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get())))
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- Demux_Level=2; //Container
- Demux(Buffer+Buffer_Offset+Element_Offset-(18+Data_Size), (size_t)(18+Data_Size), ContentType_Header);
- break;
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+Buffer_Offset+Element_Offset-(18+Data_Size)), (size_t)(18+Data_Size));
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(Stream_Audio, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[Stream_Audio][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
- #endif //MEDIAINFO_DEMUX
- }
-
- #if MEDIAINFO_DEMUX
- if (Streams[moov_trak_tkhd_TrackID].Parsers.empty() && Config_Demux)
- {
- File__Analyze* Parser=new File__Analyze; //Only for activating Demux
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_DEMUX
- for (size_t Pos=0; Pos<Streams[moov_trak_tkhd_TrackID].Parsers.size(); Pos++)
- {
- int64u Elemen_Code_Save=Element_Code;
- Element_Code=moov_trak_tkhd_TrackID; //Element_Code is use for stream identifier
- Open_Buffer_Init(Streams[moov_trak_tkhd_TrackID].Parsers[Pos]);
- Element_Code=Elemen_Code_Save;
- mdat_MustParse=true; //Data is in MDAT
- }
-
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels, 10, true);
- if (SampleSize!=0 && Element_Code!=0x6D703461 && (Element_Code&0xFFFF0000)!=0x6D730000 && Retrieve(Stream_Audio, StreamPos_Last, Audio_BitDepth).empty()) //if not mp4a, and not ms*
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, SampleSize, 10, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SampleRate, 10, true);
-
- //Sometimes, more Atoms in this atoms
- if (Element_Offset+8<Element_Size)
- Element_ThisIsAList();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxxStream()
-{
- Element_Name("Stream"); //Defined in ISO-IEC 14496-14
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- //Sometimes, more Atoms in this atoms
- if (Element_Offset+8<Element_Size)
- Element_ThisIsAList();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxxText()
-{
- Element_Name("Text");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- Ztring CodecID; CodecID.From_CC4((int32u)Element_Code);
- CodecID_Fill(CodecID, Stream_Text, StreamPos_Last, InfoCodecID_Format_Mpeg4);
-
- if (MediaInfoLib::Config.CodecID_Get(Stream_Text, InfoCodecID_Format_Mpeg4, CodecID, InfoCodecID_Format)==__T("EIA-608"))
- {
- //Creating the parser
- File_Mpeg4* Parser=new File_Mpeg4;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #if defined(MEDIAINFO_CDP_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Text, InfoCodecID_Format_Mpeg4, CodecID, InfoCodecID_Format)==__T("EIA-708"))
- {
- //Creating the parser
- File_Cdp* Parser=new File_Cdp;
- Parser->WithAppleHeader=true;
- Parser->AspectRatio=((float)16)/9; //TODO: this is hardcoded, must adapt it to the real video aspect ratio
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_TTML_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Text, InfoCodecID_Format_Mpeg4, CodecID, InfoCodecID_Format)==__T("TTML"))
- {
- //Creating the parser
- File_Ttml* Parser=new File_Ttml;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if MEDIAINFO_DEMUX
- if (Streams[moov_trak_tkhd_TrackID].Parsers.empty() && Config_Demux)
- {
- File__Analyze* Parser=new File__Analyze; //Only for activating Demux
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_DEMUX
- for (size_t Pos=0; Pos<Streams[moov_trak_tkhd_TrackID].Parsers.size(); Pos++)
- {
- int64u Elemen_Code_Save=Element_Code;
- Element_Code=moov_trak_tkhd_TrackID; //Element_Code is use for stream identifier
- Open_Buffer_Init(Streams[moov_trak_tkhd_TrackID].Parsers[Pos]);
- Element_Code=Elemen_Code_Save;
- mdat_MustParse=true; //Data is in MDAT
- }
-
- //Sometimes, more Atoms in this atoms
- if (Element_Offset+8<Element_Size)
- Element_ThisIsAList();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxxVideo()
-{
- Element_Name("Video");
-
- int16u Width, Height, Depth, ColorTableID;
- int8u CompressorName_Size;
- Skip_B2( "Version");
- Skip_B2( "Revision level");
- Skip_C4( "Vendor");
- Skip_B4( "Temporal quality");
- Skip_B4( "Spatial quality");
- Get_B2 (Width, "Width");
- Get_B2 (Height, "Height");
- Skip_B4( "Horizontal resolution");
- Skip_B4( "Vertical resolution");
- Skip_B4( "Data size");
- Skip_B2( "Frame count");
- Peek_B1(CompressorName_Size);
- if (CompressorName_Size<32)
- {
- //This is pascal string
- Skip_B1( "Compressor name size");
- Skip_Local(CompressorName_Size, "Compressor name");
- Skip_XX(32-1-CompressorName_Size, "Padding");
- }
- else
- //this is hard-coded 32-byte string
- Skip_Local(32, "Compressor name");
- Get_B2 (Depth, "Depth");
- Get_B2 (ColorTableID, "Color table ID");
- if (ColorTableID==0 && Width && Height) //In one file, if Zero-filled, Color table is not present
- Skip_XX(32, "Color Table");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- std::string Codec;
- Codec.append(1, (char)((Element_Code&0xFF000000)>>24));
- Codec.append(1, (char)((Element_Code&0x00FF0000)>>16));
- Codec.append(1, (char)((Element_Code&0x0000FF00)>> 8));
- Codec.append(1, (char)((Element_Code&0x000000FF)>> 0));
- if (Codec!="mp4v") //mp4v is for Mpeg4 system
- CodecID_Fill(Ztring(Codec.c_str()), Stream_Video, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- Fill(Stream_Video, StreamPos_Last, Video_Codec, Codec, false, true);
- Fill(Stream_Video, StreamPos_Last, Video_Codec_CC, Codec, false, true);
- if (Codec=="drms")
- Fill(Stream_Video, StreamPos_Last, Video_Encryption, "iTunes");
- if (Codec=="encv")
- Fill(Stream_Video, StreamPos_Last, Video_Encryption, "Encrypted");
- if (Width)
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width, 10, true);
- if (Height)
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height, 10, true);
- if (moov_trak_tkhd_DisplayAspectRatio && Height && moov_trak_tkhd_DisplayAspectRatio!=((float32)Width)/Height)
- {
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, moov_trak_tkhd_DisplayAspectRatio, 3, true);
- Fill(Stream_Video, StreamPos_Last, Video_PixelAspectRatio, moov_trak_tkhd_DisplayAspectRatio/Width*Height, 3, true);
- }
- Fill(Stream_Video, StreamPos_Last, Video_Rotation, moov_trak_tkhd_Rotation, 3);
- if (moov_trak_tkhd_Rotation)
- Fill(Stream_Video, StreamPos_Last, Video_Rotation_String, Ztring::ToZtring(moov_trak_tkhd_Rotation, 0)+__T("\xB0")); //degree sign
-
- //Specific cases
- if (Streams[moov_trak_tkhd_TrackID].Parsers.empty())
- {
- #if defined(MEDIAINFO_DVDIF_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring(Codec.c_str()), InfoCodecID_Format)==__T("DV"))
- {
- File_DvDif* Parser=new File_DvDif;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_MXF_YES)
- if (Element_Code==0x6D78336E || Element_Code==0x6D783370 || Element_Code==0x6D78356E || Element_Code==0x6D783570) //mx3n, mx3p, mx5n, mx5p
- {
- Fill(Stream_Video, StreamPos_Last, Video_MuxingMode, "MXF");
- File_Mxf* Parser=new File_Mxf;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
-
- #if MEDIAINFO_DEMUX
- Streams[moov_trak_tkhd_TrackID].Demux_Level=4; //Intermediate
- #endif //MEDIAINFO_DEMUX
- }
- #endif
- #if defined(MEDIAINFO_AIC_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("AIC"))
- {
- File_Aic* Parser=new File_Aic;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_AVC_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("AVC"))
- {
- File_Avc* Parser=new File_Avc;
- Parser->FrameIsAlwaysComplete=true;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Get())
- {
- Streams[moov_trak_tkhd_TrackID].Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_H263_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("H.263"))
- {
- File_H263* Parser=new File_H263;
- Parser->FrameIsAlwaysComplete=true;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_HEVC_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("HEVC"))
- {
- File_Hevc* Parser=new File_Hevc;
- Parser->FrameIsAlwaysComplete=true;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get())
- {
- Streams[moov_trak_tkhd_TrackID].Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_MPEGV_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("MPEG Video") && Element_Code!=0x6D78336E && Element_Code!=0x6D783370 && Element_Code!=0x6D78356E && Element_Code!=0x6D783570) //mx3n, mx3p, mx5n, mx5p
- {
- File_Mpegv* Parser=new File_Mpegv;
- Parser->FrameIsAlwaysComplete=true;
- #if MEDIAINFO_ADVANCED
- Parser->InitDataNotRepeated_Optional=true;
- #endif // MEDIAINFO_ADVANCED
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_PRORES_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("ProRes"))
- {
- File_ProRes* Parser=new File_ProRes;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_VC1_YES)
- if (Element_Code!=0x76632D31 && MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("VC-1")) // If "vc-1" CodecID, there is a dvc1 atom, not using the hack with Sequence Header direct search
- {
- File_Vc1* Parser=new File_Vc1;
- Parser->FrameIsAlwaysComplete=true;
- Open_Buffer_Init(Parser);
- Open_Buffer_Continue(Parser);
- Element_Offset=Element_Size;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
- }
- #endif
- #if defined(MEDIAINFO_VC3_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring().From_CC4((int32u)Element_Code), InfoCodecID_Format)==__T("VC-3"))
- {
- File_Vc3* Parser=new File_Vc3;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_JPEG_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring(Codec.c_str()), InfoCodecID_Format)==__T("JPEG"))
- {
- File_Jpeg* Parser=new File_Jpeg;
- Parser->StreamKind=Stream_Video;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_MPEG4_YES)
- if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Mpeg4, Ztring(Codec.c_str()), InfoCodecID_Format)==__T("JPEG 2000"))
- {
- File_Mpeg4* Parser=new File_Mpeg4;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
-
- #if MEDIAINFO_DEMUX
- Streams[moov_trak_tkhd_TrackID].Demux_Level=4; //Intermediate
- #endif //MEDIAINFO_DEMUX
- }
- #endif
-
- #if MEDIAINFO_DEMUX
- if (Streams[moov_trak_tkhd_TrackID].Parsers.empty() && Config_Demux)
- {
- File__Analyze* Parser=new File__Analyze; //Only for activating Demux
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- }
- #endif //MEDIAINFO_DEMUX
- for (size_t Pos=0; Pos<Streams[moov_trak_tkhd_TrackID].Parsers.size(); Pos++)
- if (!Streams[moov_trak_tkhd_TrackID].Parsers[Pos]->Status[IsAccepted])
- {
- int64u Elemen_Code_Save=Element_Code;
- Element_Code=moov_trak_tkhd_TrackID; //Element_Code is use for stream identifier
- Open_Buffer_Init(Streams[moov_trak_tkhd_TrackID].Parsers[Pos]);
- Element_Code=Elemen_Code_Save;
- mdat_MustParse=true; //Data is in MDAT
- }
- }
-
- //RGB(A)
- if (Codec=="raw " || Codec=="rle ")
- {
- if (Depth==1)
- {
- Fill(Stream_Video, StreamPos_Last, Video_ColorSpace, "Y", Unlimited, true, true);
- Fill(Stream_Video, StreamPos_Last, Video_BitDepth, 1);
- }
- else if (Depth<15)
- {
- Fill(Stream_Video, StreamPos_Last, Video_ColorSpace, "RGB", Unlimited, true, true);
- Fill(Stream_Video, StreamPos_Last, Video_BitDepth, 8);
- }
- else if (Depth==32 || Depth==36)
- {
- Fill(Stream_Video, StreamPos_Last, Video_ColorSpace, "RGBA", Unlimited, true, true);
- Fill(Stream_Video, StreamPos_Last, Video_BitDepth, Depth/4);
- }
- else
- Fill(Stream_Video, StreamPos_Last, Video_BitDepth, Depth/3);
- }
-
- //Descriptors or a list (we can see both!)
- if (Element_Offset+8<=Element_Size
- && ((CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+0)>='A' && CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+0)<='z') || (CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+0)>='0' && CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+0)<='9'))
- && ((CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+1)>='A' && CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+1)<='z') || (CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+1)>='0' && CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+1)<='9'))
- && ((CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+2)>='A' && CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+2)<='z') || (CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+2)>='0' && CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+2)<='9'))
- && ((CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+3)>='A' && CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+3)<='z') || (CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+3)>='0' && CC1(Buffer+Buffer_Offset+(size_t)Element_Offset+4+3)<='9')))
- Element_ThisIsAList();
- else if (Element_Offset<Element_Size)
- Descriptors();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Source: http://wiki.multimedia.cx/index.php?title=Apple_Lossless_Audio_Coding
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_alac()
-{
- Element_Name("ALAC");
-
- //Parsing
- int32u bitrate, samplerate;
- int8u sample_size, channels;
- Skip_B4( "?");
- Skip_B4( "max sample per frame");
- Skip_B1( "?");
- Get_B1 (sample_size, "sample size");
- Skip_B1( "rice history mult");
- Skip_B1( "rice initial history");
- Skip_B1( "rice kmodifier");
- Get_B1 (channels, "channels");
- Skip_B1( "?");
- Skip_B1( "?");
- Skip_B4( "max coded frame size");
- Get_B4 (bitrate, "bitrate");
- Get_B4 (samplerate, "samplerate");
-
- FILLING_BEGIN_PRECISE();
- if (sample_size)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, sample_size, 10, true);
- if (channels)
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, channels, 10, true);
- if (bitrate)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate_Nominal, bitrate, 10, true);
- if (samplerate)
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, samplerate, 10, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_ACLR()
-{
- Element_Name("Avid ACLR");
-
- //Parsing
- Skip_C4( "tag");
- Skip_C4( "vers");
- Skip_B4( "yuv range"); //full 1 / normal 2
- Skip_B4( "unknown (always 0?)");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_APRG()
-{
- Element_Name("Avid APRG");
-
- //Parsing
- Skip_C4( "tag");
- Skip_C4( "vers");
- Skip_B4( "unknown (always 1?)");
- Skip_B4( "unknown (always 0?)");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_ARES()
-{
- Element_Name("Avid ARES");
-
- //Parsing
- //Source: http://lists.apple.com/archives/quicktime-api/2012/Mar/msg00039.html
- int32u x1;
- Skip_C4( "tag");
- Skip_C4( "vers");
- Skip_B4( "cid"); //Compression ID, From inspection this is 160 for MPEG 50, 161 for MPEG 40 and 162 for MPEG 30. 171 for raw?
- Skip_B4( "width");
- Skip_B4( "height"); //Of a field
- Get_B4 (x1, "x1"); //1=Progressive, 2=Interlaced
- Skip_B4( "zero");
- Skip_B4( "x2"); //4=Interlaced, 5=Progressive 1080, 6 Progressive not 1080?
-
- switch (x1)
- {
- case 0x01 : Fill(Stream_Video, StreamPos_Last, Video_ScanType, "Progressive", Unlimited, true, true); break;
- case 0x02 : Fill(Stream_Video, StreamPos_Last, Video_ScanType, "Interlaced", Unlimited, true, true); break;
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_avcC()
-{
- Element_Name("AVC decode");
-
- //Parsing
- int8u Version;
- Get_B1 (Version, "Version");
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- {
- Skip_XX(Element_Size-Element_Offset, "Data not analyzed");
- return; //Handling only the first description
- }
- else if (Version==1)
- {
- #ifdef MEDIAINFO_AVC_YES
- for (size_t Pos=0; Pos<Streams[moov_trak_tkhd_TrackID].Parsers.size(); Pos++) //Removing any previous parser (in case of multiple streams in one track, or dummy parser for demux)
- delete Streams[moov_trak_tkhd_TrackID].Parsers[Pos];
- Streams[moov_trak_tkhd_TrackID].Parsers.clear();
-
- File_Avc* Parser=new File_Avc;
- Parser->FrameIsAlwaysComplete=true;
- #if MEDIAINFO_DEMUX
- Element_Code=moov_trak_tkhd_TrackID;
- if (Config->Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Get())
- {
- Streams[moov_trak_tkhd_TrackID].Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- Open_Buffer_Init(Parser);
- Parser->MustParse_SPS_PPS=true;
- Parser->MustSynchronize=false;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (!Config->Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Get())
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- Demux_Level=2; //Container
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_Header);
- break;
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+Buffer_Offset), (size_t)Element_Size);
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(Stream_Video, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[Stream_Video][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- Open_Buffer_Continue(Parser);
-
- Parser->MustParse_SPS_PPS=false;
- Parser->SizedBlocks=true; //Now this is SizeBlocks
- #else
- Skip_XX(Element_Size, "AVC Data");
- #endif
- }
- else
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_bitr()
-{
- Element_Name("BitRate");
-
- //Parsing
- int32u Avg_Bitrate, Max_Bitrate;
- Get_B4 (Avg_Bitrate, "Avg_Bitrate");
- Get_B4 (Max_Bitrate, "Max_Bitrate");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- if (Avg_Bitrate)
- Fill(StreamKind_Last, StreamPos_Last, "BitRate", Avg_Bitrate);
- if (Max_Bitrate)
- Fill(StreamKind_Last, StreamPos_Last, "BitRate_Maximum", Max_Bitrate);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_btrt()
-{
- Element_Name("BitRate");
-
- //Parsing
- int32u maxBitrate, avgBitrate;
- Skip_B4( "bufferSizeDB");
- Get_B4 (maxBitrate, "maxBitrate");
- Get_B4 (avgBitrate, "avgBitrate");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- //if (avgBitrate)
- // Fill(StreamKind_Last, StreamPos_Last, "BitRate", avgBitrate); //Not trustable enough, and we have precise bitrate from stream size with
- if (maxBitrate)
- Fill(StreamKind_Last, StreamPos_Last, "BitRate_Maximum", maxBitrate);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_chan()
-{
- NAME_VERSION_FLAG("Channels");
-
- //Parsing
- //From http://developer.apple.com/mac/library/documentation/MusicAudio/Reference/CAFSpec/CAF_spec/CAF_spec.html
- std::string ChannelDescription_Layout;
- int64u ChannelLabels=0;
- int32u ChannelLayoutTag, ChannelBitmap, NumberChannelDescriptions;
- bool ChannelLabels_Valid=true;
- Get_B4 (ChannelLayoutTag, "ChannelLayoutTag");
- Get_B4 (ChannelBitmap, "ChannelBitmap");
- Get_B4 (NumberChannelDescriptions, "NumberChannelDescriptions");
- if (ChannelLayoutTag==0) //UseChannelDescriptions
- {
- for (int32u Pos=0; Pos<NumberChannelDescriptions; Pos++)
- {
- int32u ChannelLabel;
- Get_B4 (ChannelLabel, "ChannelLabel");
- if (ChannelLabel<64)
- ChannelLabels|=(((int64u)1)<<ChannelLabel);
- else
- ChannelLabels_Valid=false;
- ChannelDescription_Layout+=Mpeg4_chan_ChannelDescription_Layout(ChannelLabel);
- ChannelDescription_Layout+=__T(' ');
- Skip_B4( "ChannelFlags");
- Skip_BF4( "Coordinates (0)");
- Skip_BF4( "Coordinates (1)");
- Skip_BF4( "Coordinates (2)");
- }
- if (!ChannelDescription_Layout.empty())
- ChannelDescription_Layout.resize(ChannelDescription_Layout.size()-1);
- }
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- if (ChannelLayoutTag==0) //UseChannelDescriptions
- {
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelLayout, ChannelDescription_Layout.c_str(), Unlimited, true, true);
- if (ChannelLabels_Valid)
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, Mpeg4_chan_ChannelDescription(ChannelLabels), true, true);
- else
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, ChannelDescription_Layout);
- }
- else if (ChannelLayoutTag==0x10000) //UseChannelBitmap
- {
- int8u Channels=0;
- for (size_t Bit=0; Bit<18; Bit++)
- if (ChannelBitmap&(1<<Bit))
- {
- Channels++;
- ChannelDescription_Layout+=Mpeg4_chan_ChannelBitmap_Layout((int32u)(Bit+1));
- ChannelDescription_Layout+=__T(' ');
- }
- if (Channels)
- {
- //Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels, 10, true); //Channel count from this atom should not be used as a primary source, it may be wrong
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, Mpeg4_chan_ChannelBitmap(ChannelBitmap), true, true);
- if (!ChannelDescription_Layout.empty())
- {
- ChannelDescription_Layout.resize(ChannelDescription_Layout.size()-1);
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelLayout, ChannelDescription_Layout.c_str(), Unlimited, true, true);
- }
- }
- }
- else if (ChannelLayoutTag>0x10000)
- {
- //int16u Channels=ChannelLayoutTag&0x0000FFFF;
- int16u Ordering=(ChannelLayoutTag&0xFFFF0000)>>16;
- //Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels, 10, true); //Channel count from this atom should not be used as a primary source, it may be wrong
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, Mpeg4_chan(Ordering), Unlimited, true, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelLayout, Mpeg4_chan_Layout(Ordering));
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_clap()
-{
- Element_Name("Clean Aperture");
-
- //Parsing
- int32u apertureWidth_N, apertureWidth_D, apertureHeight_N, apertureHeight_D;
- Get_B4 (apertureWidth_N, "apertureWidth_N");
- Get_B4 (apertureWidth_D, "apertureWidth_D");
- Get_B4 (apertureHeight_N, "apertureHeight_N");
- Get_B4 (apertureHeight_D, "apertureHeight_D");
- Skip_B4( "horizOff_N");
- Skip_B4( "horizOff_D");
- Skip_B4( "vertOff_N");
- Skip_B4( "vertOff_D");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- if (apertureWidth_N && apertureWidth_D && apertureHeight_N && apertureHeight_D)
- {
- Streams[moov_trak_tkhd_TrackID].CleanAperture_Width=((float)apertureWidth_N)/apertureWidth_D;
- Streams[moov_trak_tkhd_TrackID].CleanAperture_Height=((float)apertureHeight_N)/apertureHeight_D;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_colr()
-{
- Element_Name("Color Parameter");
-
- //Parsing
- int16u colour_primaries, transfer_characteristics, matrix_coefficients;
- Skip_C4( "Color parameter type");
- Get_B2 (colour_primaries, "Primaries index"); Param_Info1(Mpegv_colour_primaries((int8u)colour_primaries));
- Get_B2 (transfer_characteristics, "Transfer function index"); Param_Info1(Mpegv_transfer_characteristics((int8u)transfer_characteristics));
- Get_B2 (matrix_coefficients, "Matrix index"); Param_Info1(Mpegv_matrix_coefficients((int8u)matrix_coefficients));
-
- FILLING_BEGIN();
- if (Retrieve(Stream_Video, StreamPos_Last, Video_colour_description_present).empty()) //Using only the first one met
- {
- Fill(Stream_Video, StreamPos_Last, Video_colour_description_present, "Yes");
- Fill(Stream_Video, StreamPos_Last, Video_colour_primaries, Mpegv_colour_primaries((int8u)colour_primaries));
- Fill(Stream_Video, StreamPos_Last, Video_transfer_characteristics, Mpegv_transfer_characteristics((int8u)transfer_characteristics));
- Fill(Stream_Video, StreamPos_Last, Video_matrix_coefficients, Mpegv_matrix_coefficients((int8u)matrix_coefficients));
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_d263()
-{
- Element_Name("H263SpecificBox");
-
- //Parsing
- int32u Vendor;
- int8u Version, H263_Level, H263_Profile;
- Get_C4 (Vendor, "Encoder vendor");
- Get_B1 (Version, "Encoder version");
- Get_B1 (H263_Level, "H263_Level");
- Get_B1 (H263_Profile, "H263_Profile");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- Ztring ProfileLevel;
- switch (H263_Profile)
- {
- case 0x00 : ProfileLevel=__T("BaseLine"); break;
- default : ProfileLevel.From_Number(H263_Profile);
- }
- ProfileLevel+=__T('@');
- ProfileLevel+=Ztring::ToZtring(((float32)H263_Level)/10, 1);
- Fill(Stream_Video, StreamPos_Last, Video_Format_Profile, ProfileLevel);
- Fill(Stream_Video, StreamPos_Last, Video_Encoded_Library_Name, Mpeg4_Vendor(Vendor));
- Fill(Stream_Video, StreamPos_Last, Video_Encoded_Library_Version, Version);
- Fill(Stream_Video, StreamPos_Last, Video_Encoded_Library, Retrieve(Stream_Video, StreamPos_Last, Video_Encoded_Library_Name)+__T(' ')+Ztring::ToZtring(Version));
- Ztring Encoded_Library_String=Retrieve(Stream_Video, StreamPos_Last, Video_Encoded_Library_Name)+(Version?(__T(" Revision ")+Ztring::ToZtring(Version)):Ztring());
- Fill(Stream_Video, StreamPos_Last, Video_Encoded_Library_String, Encoded_Library_String, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_dac3()
-{
- Element_Name("AC3SpecificBox");
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, "", Unlimited, true, true); //Remove the value (is always wrong in the stsd atom)
-
- //Parsing
- if (Retrieve(Stream_Audio, StreamPos_Last, Audio_CodecID)==__T("sac3"))
- {
- Element_Info1("Nero specific");
- int8u Version;
- Get_B1 (Version, "Version");
- if (Version==1)
- {
- int8u bsid;
- Get_B1 (bsid, "bsid");
- Skip_XX(Element_Size-Element_Offset, "unknown");
- #ifdef MEDIAINFO_AC3_YES
- if (Streams[moov_trak_tkhd_TrackID].Parsers.empty())
- {
- File_Ac3* Parser=new File_Ac3;
- Open_Buffer_Init(Parser);
- Parser->Frame_Count_Valid=2;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
- }
- #else
- if (bsid<=0x08)
- Fill(Stream_Audio, StreamKind_Last, Audio_Format, "AC-3");
- if (bsid>0x0A && bsid<=0x10)
- Fill(Stream_Audio, StreamKind_Last, Audio_Format, "E-AC-3");
- #endif
- return;
- }
- else
- {
- Skip_XX(Element_Size, "Data");
- return;
- }
- }
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- #ifdef MEDIAINFO_AC3_YES
- if (Streams[moov_trak_tkhd_TrackID].Parsers.empty())
- {
- File_Ac3* Parser=new File_Ac3;
- Open_Buffer_Init(Parser);
- Parser->MustParse_dac3=true;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
-
- //Parsing
- Open_Buffer_Continue(Parser);
- }
- #else
- Skip_XX(Element_Size, "AC-3 Data");
-
- Fill(Stream_Audio, StreamKind_Last, Audio_Format, "AC-3");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_damr()
-{
- Element_Name("AMR decode config");
-
- //Parsing
- int32u Vendor;
- int8u Version;
- Get_C4 (Vendor, "Encoder vendor");
- Get_B1 (Version, "Encoder version");
- Skip_B2( "Packet modes");
- Skip_B1( "Number of packet mode changes");
- Skip_B1( "Samples per packet");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Name, Mpeg4_Vendor(Vendor));
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Version, Version);
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library, Retrieve(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Name)+__T(' ')+Ztring::ToZtring(Version));
- Ztring Encoded_Library_String=Retrieve(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Name)+(Version?(__T(" Revision ")+Ztring::ToZtring(Version)):Ztring());
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_String, Encoded_Library_String, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_dec3()
-{
- Element_Name("EAC3SpecificBox");
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, "", Unlimited, true, true); //Remove the value (is always wrong in the stsd atom)
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- {
- return; //Handling only the first description
- }
-
- #ifdef MEDIAINFO_AC3_YES
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- {
- Skip_XX(Element_Size, "Data not analyzed");
- return; //Handling only the first description
- }
-
- if (Streams[moov_trak_tkhd_TrackID].Parsers.empty())
- {
- File_Ac3* Parser=new File_Ac3;
- Open_Buffer_Init(Parser);
- Parser->Frame_Count_Valid=2;
- Parser->MustParse_dec3=true;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
-
- //Parsing
- Open_Buffer_Continue(Parser);
- }
- #else
- Skip_XX(Element_Size, "E-AC-3 Data");
-
- Fill(Stream_Audio, StreamKind_Last, Audio_Format, "E-AC-3");
- Fill(Stream_Audio, StreamKind_Last, Audio_Format, "", Unlimited, true, true); //Remove the value (is always wrong in the stsd atom)
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_ddts()
-{
- Element_Name("DTSSpecificBox");
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, "", Unlimited, true, true); //Remove the value (is always wrong in the stsd atom)
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- {
- return; //Handling only the first description
- }
-
- //Comments about the new CodecIDs having this atom:
- //dtsc: DTS Core only
- //dtse: DTS Express, not having DTS Core
- //dtsh: DTS Core + DTS Lossless (MA), mixed
- //dtsl: DTS Lossless (MA), not having DTS Core
-
- int32u DTSSamplingFrequency, maxBitrate, avgBitrate;
- int16u ChannelLayout;
- int8u CoreLayout;
-
- //Parsing
- Get_B4 (DTSSamplingFrequency, "DTSSamplingFrequency");
- Get_B4 (maxBitrate, "maxBitrate");
- Get_B4 (avgBitrate, "avgBitrate");
- Skip_B1( "pcmSampleDepth"); // 16 or 24 bits
- BS_Begin();
- Skip_S1(2, "FrameDuration"); // 0 = 512, 1 = 1024, 2 = 2048, 3 = 4096
- Skip_S1(5, "StreamConstruction");
- Skip_SB( "CoreLFEPresent"); // 0 = none, 1 = LFE exists
- Get_S1 (6, CoreLayout, "CoreLayout");
- Skip_S2(14, "CoreSize");
- Skip_SB( "StereoDownmix"); // 0 = none, 1 = downmix present
- Skip_S1 (3, "RepresentationType");
- Get_S2 (16, ChannelLayout, "ChannelLayout");
- Skip_SB( "MultiAssetFlag"); // 0 = none, 1 = multiple asset
- Skip_SB( "LBRDurationMod"); // 0 = ignore, 1 = Special LBR duration modifier
- Skip_S1(6, "reserved");
- BS_End();
-
- FILLING_BEGIN();
- if (DTSSamplingFrequency)
- Fill(StreamKind_Last, StreamPos_Last, Audio_SamplingRate, DTSSamplingFrequency, 10, true); //This is the maximum sampling frequency
- if (avgBitrate)
- Fill(StreamKind_Last, StreamPos_Last, Audio_BitRate, avgBitrate);
- if (maxBitrate)
- Fill(StreamKind_Last, StreamPos_Last, Audio_BitRate_Maximum, maxBitrate);
- #if defined(MEDIAINFO_DTS_YES)
- if (ChannelLayout)
- {
- Fill(Stream_Audio, 0, Audio_ChannelPositions, DTS_HD_SpeakerActivityMask(ChannelLayout).c_str());
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, DTS_HD_SpeakerActivityMask2(ChannelLayout).c_str());
- }
- if (CoreLayout && CoreLayout<16)
- {
- Fill(Stream_Audio, 0, Audio_ChannelPositions, DTS_ChannelPositions[CoreLayout]);
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, DTS_ChannelPositions2[CoreLayout]);
- }
- #endif //defined(MEDIAINFO_DTS_YES)
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_dvc1()
-{
- Element_Name("VC1SpecificBox");
-
- // Parsing
- int32u hrd_buffer, hrd_rate, framerate=0;
- int8u profile, level, frmrtq_pp, bitrtq_pp, dquant, vtransform, overlap, syncmarker, rangered, maxbframes, quantizer, finterpflag, no_interlace, no_multiple_seq, no_multiple_entry, no_slice_code, no_bframe;
- bool cbr, loopfilter, multires, fastuvmc, extended_mv;
-
- BS_Begin();
- Get_S1 (4, profile, "Profile");
- Get_S1 (3, level, "Level");
- Skip_SB( "reserved");
- BS_End();
-
- switch(profile)
- {
- case 0 : // Simple Profile
- case 4 : // Main Profile
- BS_Begin();
- Get_S1 (3, level, "Level"); // should be the same as above
- Get_SB (cbr, "CBR"); // should be equal to 1 if CBR Mode, 0 otherwhise
- Skip_S1(4, "Reserved"); // should be set to 0
- BS_End();
- Get_B3 (hrd_buffer, "HRD_Buffer"); // Buffer Size of Hypothetical Reference Decoder in ms
- Get_B4 (hrd_rate, "HRD_Rate"); // Peak Transmisson Rate of the Hypothetical Reference Decoder in bps
- Get_B4 (framerate, "FrameRate"); // Rounded FPS of the track
- BS_Begin();
- Get_S1 (4, profile, "Profile"); // should be the same as above
- Get_S1 (3, frmrtq_pp, "Frmrtq_postproc");
- Get_S1 (5, bitrtq_pp, "Bitrtq_postproc");
- Get_SB (loopfilter, "Loopfilter");
- Skip_SB( "Reserved"); // should be set to 0
- Get_SB (multires, "MultiRes");
- Skip_SB( "Reserved"); // should be set to 1
- Get_SB (fastuvmc, "Fastuvmc");
- Get_SB (extended_mv, "Extended_mv");
- Get_S1 (2, dquant, "Dquant");
- Get_S1 (1, vtransform, "Vtransform");
- Skip_SB( "Reserved"); // should be set to 0
- Get_S1 (1, overlap, "Overlap");
- Get_S1 (1, syncmarker, "Syncmarker");
- Get_S1 (1, rangered, "Rangered");
- Get_S1 (3, maxbframes, "MaxBFrames"); // should be equal to 0 with SP
- Get_S1 (2, quantizer, "Quantizer");
- Get_S1 (1, finterpflag, "Finterpflag");
- Skip_SB( "Reserved"); // should be set to 1
- BS_End();
- break;
- case 12 : // Advanced Profile
- BS_Begin();
- Get_S1 (3, level, "Level"); // should be the same as above
- Get_SB (cbr, "CBR"); // should be equal to 1 if CBR Mode, 0 otherwhise
- Skip_S1(6, "Reserved"); // should be set to 0
- Get_S1 (1, no_interlace, "No Interlace"); // should be set to 0 for Interlaced Content
- Get_S1 (1, no_multiple_seq, "No Multiple Sequence");
- Get_S1 (1, no_multiple_entry, "No Multiple Entry");
- Get_S1 (1, no_slice_code, "No Slice Code");
- Get_S1 (1, no_bframe, "No BFrame");
- Skip_SB( "Reserved");
- BS_End();
- Get_B4 (framerate, "FrameRate");
- Element_Begin1("Sequence HDR");
- File_Vc1* Parser=new File_Vc1;
- Parser->FrameIsAlwaysComplete=true;
- Open_Buffer_Init(Parser);
- Open_Buffer_Continue(Parser);
- Element_Offset=Element_Size;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT*/
- Element_End0();
- break;
- }
-
- FILLING_BEGIN();
- #if defined(MEDIAINFO_VC1_YES)
- Ztring Profile, Level;
-
- switch (profile)
- {
- case 0 : Profile=__T("Simple"); break;
- case 4 : Profile=__T("Main"); break;
- case 12 : Profile=__T("Advanced"); break;
- default : Profile=__T("");
- }
- Profile+=__T("@");
-
- if (profile == 0) // Simple Profile
- {
- switch (level)
- {
- case 0 : Level=__T("Low"); break;
- case 2 : Level=__T("Medium"); break;
- default : Level=__T("");
- }
- }
- else if (profile == 4) // Main Profile
- {
- switch (level)
- {
- case 0 : Level=__T("Low"); break;
- case 2 : Level=__T("Medium"); break;
- case 4 : Level=__T("High"); break;
- default : Level=__T("");
- }
- }
- else if (profile == 12) // Advanced Profile
- {
- switch (level)
- {
- case 0 : Level=__T("L0"); break;
- case 1 : Level=__T("L1"); break;
- case 2 : Level=__T("L2"); break;
- case 3 : Level=__T("L3"); break;
- case 4 : Level=__T("L4"); break;
- default : Level=__T("");
- }
- }
- Profile+=Level;
- Fill(Stream_Video, StreamPos_Last, Video_Format_Profile, Profile);
- Fill(Stream_Video, StreamPos_Last, Video_Codec_Profile, Profile);
- #endif //defined(MEDIAINFO_VC1_YES)
- if (framerate && framerate!=(int32u)-1)
- Fill(StreamKind_Last, StreamPos_Last, Video_FrameRate, framerate, 3);
- FILLING_END();
-}
-
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_esds()
-{
- NAME_VERSION_FLAG("ES Descriptor");
- INTEGRITY_VERSION(0);
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- Descriptors();
- if (Streams[moov_trak_tkhd_TrackID].Parsers.size()==1 && !Retrieve(StreamKind_Last, StreamPos_Last, "Encryption").empty())
- {
- Finish(Streams[moov_trak_tkhd_TrackID].Parsers[0]);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_fiel()
-{
- //Source: http://developer.apple.com/quicktime/icefloe/dispatch019.html#fiel
- //Source: QuickTimeFileFormat2011.pdf:
- // 1 T is displayed earliest, T is stored first in the file.
- // 6 B is displayed earliest, B is stored first in the file.
- // 9 B is displayed earliest, T is stored first in the file.
- //14 T is displayed earliest, B is stored first in the file.
- Element_Name("Field/Frame Information");
-
- //Parsing
- int8u fields, detail;
- Get_B1 (fields, "fields");
- Get_B1 (detail, "detail");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- switch(fields)
- {
- case 0x01 : Fill(Stream_Video, StreamPos_Last, Video_ScanType, "Progressive", Unlimited, true, true); break;
- case 0x02 : Fill(Stream_Video, StreamPos_Last, Video_ScanType, "Interlaced", Unlimited, true, true);
- switch(detail)
- {
- case 1 : // T is displayed earliest, T is stored first in the file.
- case 9 : // B is displayed earliest, T is stored first in the file.
- Fill(Stream_Video, StreamPos_Last, Video_ScanOrder, "TFF", Unlimited, true, true);
- break;
- case 6 : // B is displayed earliest, B is stored first in the file.
- case 14 : // T is displayed earliest, B is stored first in the file.
- Fill(Stream_Video, StreamPos_Last, Video_ScanOrder, "BFF", Unlimited, true, true);
- break;
- default : ;
- }
- // Priorizing https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG10-THE__FIEL__IMAGEDESCRIPTION_EXTENSION__FIELD_FRAME_INFORMATION
- /*
- switch(detail)
- {
- case 9 : // B is displayed earliest, T is stored first in the file.
- case 14 : // T is displayed earliest, B is stored first in the file.
- Streams[moov_trak_tkhd_TrackID].ScanOrder_StoredDisplayedInverted=true;
- break;
- default : ;
- }
- */
- switch (detail)
- {
- case 1 : // Separated fields, TFF
- case 6 : // Separated fields, BFF
- Fill(Stream_Video, StreamPos_Last, Video_ScanType_StoreMethod_FieldsPerBlock, 2, 10, true);
- Fill(Stream_Video, StreamPos_Last, Video_ScanType_StoreMethod, "SeparatedFields", Unlimited, true, true);
- break;
- case 9 : // Interleaved fields, TFF
- case 14 : // Interleaved fields, BFF
- Fill(Stream_Video, StreamPos_Last, Video_ScanType_StoreMethod, "InterleavedFields", Unlimited, true, true);
- break;
- default : ;
- }
-
- #ifdef MEDIAINFO_JPEG_YES
- if (Retrieve(Stream_Video, StreamPos_Last, Video_Format)==__T("JPEG") && Streams[moov_trak_tkhd_TrackID].Parsers.size()==1)
- ((File_Jpeg*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Interlaced=true;
- #endif //MEDIAINFO_JPEG_YES
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_glbl()
-{
- Element_Name("Global");
-
- if (Retrieve(Stream_Video, StreamPos_Last, Video_MuxingMode)==__T("MXF"))
- {
- Clear(Stream_Video, StreamPos_Last, Video_MuxingMode);
- #if defined(MEDIAINFO_MPEGV_YES)
- File_Mpegv* Parser=new File_Mpegv;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
-
- //Re-init
- int64u Elemen_Code_Save=Element_Code;
- Element_Code=moov_trak_tkhd_TrackID; //Element_Code is use for stream identifier
- Open_Buffer_Init(Parser);
- Element_Code=Elemen_Code_Save;
- mdat_MustParse=true; //Data is in MDAT
-
- Open_Buffer_Continue(Parser);
- #endif //defined(MEDIAINFO_MPEGV_YES)
-
- //TODO: demux is not done in this case (2 possibilities: MXF wrapped and it is useless, not MXF wrapped and we may need it but up to now we saw only data in this atom redundant with the raw stream data)
- return;
- }
-
- //Demux
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- for (size_t Pos=0; Pos<Streams[moov_trak_tkhd_TrackID].Parsers.size(); Pos++)
- Open_Buffer_Continue(Streams[moov_trak_tkhd_TrackID].Parsers[Pos]);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_hvcC()
-{
- Element_Name("HEVCDecoderConfigurationRecord");
-
- //Parsing
- #ifdef MEDIAINFO_HEVC_YES
- for (size_t Pos=0; Pos<Streams[moov_trak_tkhd_TrackID].Parsers.size(); Pos++) //Removing any previous parser (in case of multiple streams in one track, or dummy parser for demux)
- delete Streams[moov_trak_tkhd_TrackID].Parsers[Pos];
- Streams[moov_trak_tkhd_TrackID].Parsers.clear();
-
- File_Hevc* Parser=new File_Hevc;
- Parser->FrameIsAlwaysComplete=true;
- #if MEDIAINFO_DEMUX
- Element_Code=moov_trak_tkhd_TrackID;
- if (Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get())
- {
- Streams[moov_trak_tkhd_TrackID].Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- Open_Buffer_Init(Parser);
- Parser->MustParse_VPS_SPS_PPS=true;
- Parser->MustSynchronize=false;
- Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser);
- mdat_MustParse=true; //Data is in MDAT
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (!Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get())
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- Demux_Level=2; //Container
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_Header);
- break;
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+Buffer_Offset), (size_t)Element_Size);
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(Stream_Video, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[Stream_Video][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- Open_Buffer_Continue(Parser);
-
- Parser->SizedBlocks=true; //Now this is SizeBlocks
- #else
- Skip_XX(Element_Size, "HEVC Data");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_idfm()
-{
- Element_Name("Description");
-
- Info_C4(Description, "Description"); Param_Info1(Mpeg4_Description(Description));
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_pasp()
-{
- Element_Name("Pixel Aspect Ratio");
-
- //Parsing
- int32u hSpacing, vSpacing;
- Get_B4 (hSpacing, "hSpacing");
- Get_B4 (vSpacing, "vSpacing");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- if (vSpacing)
- {
- float32 PixelAspectRatio=(float32)hSpacing/vSpacing;
- Clear(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio);
- Fill(Stream_Video, StreamPos_Last, Video_PixelAspectRatio, PixelAspectRatio, 3, true);
- Streams[moov_trak_tkhd_TrackID].CleanAperture_PixelAspectRatio=PixelAspectRatio; //This is the PAR of the clean aperture
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_sinf()
-{
- Element_Name("Protection scheme information box");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_frma()
-{
- Element_Name("Original format box");
-
- //Parsing
- std::string Codec;
- Get_String(4, Codec, "data_format");
-
- FILLING_BEGIN();
- CodecID_Fill(Ztring(Codec.c_str()), Stream_Video, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_imif()
-{
- NAME_VERSION_FLAG("IPMP Information box");
-
- //Parsing
- Descriptors();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_schi()
-{
- Element_Name("scheme information box");
-
- //Parsing
- Skip_XX(Element_Size, "scheme_specific_data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_sinf_schm()
-{
- NAME_VERSION_FLAG("scheme type box");
-
- //Parsing
- Skip_C4( "scheme_type");
- Skip_B4( "scheme_version");
- if (Flags&0x000001)
- Skip_UTF8(Element_Size-Element_Offset, "scheme_uri");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_wave()
-{
- Element_Name("Wave");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_wave_acbf()
-{
- Element_Name("Audio Bitrate Control Mode");
-
- //Parsing
- Skip_B4( "Bit Rate Control Mode");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_wave_enda()
-{
- //Parsing
- int16u Endianness;
- Get_B2 (Endianness, "Endianness");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- if (Streams[moov_trak_tkhd_TrackID].IsPcm)
- {
- if (Streams[moov_trak_tkhd_TrackID].Parsers.size()==1)
- ((File_Pcm*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Endianness=Endianness?'L':'B';
- if (Streams[moov_trak_tkhd_TrackID].Parsers.size()==2)
- {
- ((File_ChannelGrouping*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Endianness=Endianness?'L':'B';
- ((File_Pcm*)Streams[moov_trak_tkhd_TrackID].Parsers[1])->Endianness=Endianness?'L':'B';
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_wave_frma()
-{
- Element_Name("Data format");
-
- //Parsing
- int16u Codec_Peek;
- Peek_B2(Codec_Peek);
- if (Codec_Peek==0x6D73) //"ms", Microsoft 2CC
- {
- int16u CodecMS;
- Skip_C2( "Codec_MS");
- Get_B2 (CodecMS, "CC2");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- Ztring OldFormat=Retrieve(Stream_Audio, StreamPos_Last, Audio_CodecID);
- Ztring NewFormat=Ztring::ToZtring(CodecMS, 16);
- if (OldFormat!=NewFormat)
- {
- Clear(Stream_Audio, StreamPos_Last, Audio_CodecID);
- CodecID_Fill(NewFormat, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- }
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, CodecMS, 16, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec_CC, CodecMS, 16, true);
- FILLING_END();
- }
- else
- {
- int32u Codec;
- Get_C4(Codec, "Codec");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- FILLING_BEGIN();
- if (Codec!=0x6D703461) //"mp4a"
- {
- Ztring OldFormat=Retrieve(Stream_Audio, StreamPos_Last, Audio_CodecID);
- Ztring NewFormat=Ztring().From_CC4(Codec);
- if (OldFormat!=NewFormat)
- {
- Clear(Stream_Audio, StreamPos_Last, Audio_CodecID);
- CodecID_Fill(NewFormat, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- }
- }
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Ztring().From_CC4(Codec), true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec_CC, Ztring().From_CC4(Codec), true);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_wave_samr()
-{
- Element_Name("AMR decode config");
-
- //Parsing
- int32u Vendor;
- int8u Version;
- Get_C4 (Vendor, "Encoder vendor");
- Get_B1 (Version, "Encoder version");
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- if (moov_trak_mdia_minf_stbl_stsd_Pos>1)
- return; //Handling only the first description
-
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Name, Mpeg4_Vendor(Vendor));
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Version, Version);
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library, Retrieve(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Name)+__T(' ')+Ztring::ToZtring(Version));
- Ztring Encoded_Library_String=Retrieve(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_Name)+(Version?(__T("Revision")+Ztring::ToZtring(Version)):Ztring());
- Fill(Stream_Audio, StreamPos_Last, Audio_Encoded_Library_String, Encoded_Library_String, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_wave_srcq()
-{
- Element_Name("Source Quality");
-
- //Parsing
- Skip_B4( "Source Quality");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_wave_xxxx()
-{
- if ((Element_Code&0x6D730000)!=0x6D730000)
- return; //Only msxx format is known
-
- Element_Name("Microsoft Audio");
-
- //Parsing
- int32u SamplesPerSec, AvgBytesPerSec;
- int16u FormatTag, Channels, BitsPerSample;
- Get_L2 (FormatTag, "FormatTag");
- Get_L2 (Channels, "Channels");
- Get_L4 (SamplesPerSec, "SamplesPerSec");
- Get_L4 (AvgBytesPerSec, "AvgBytesPerSec");
- Skip_L2( "BlockAlign");
- Get_L2 (BitsPerSample, "BitsPerSample");
-
- FILLING_BEGIN();
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels!=5?Channels:6, 10, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SamplesPerSec, 10, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate_Nominal, AvgBytesPerSec*8, 10, true);
- FILLING_END();
-
- //Options
- if (Element_Offset+2>Element_Size)
- return; //No options
-
- //Parsing
- int16u Option_Size;
- Get_L2 (Option_Size, "cbSize");
-
- //Filling
- if (Option_Size>0)
- {
- Skip_XX(Option_Size, "Unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsh()
-{
- Element_Name("Shadow Sync Sample");
-
- //Parsing
- int32u entry_count;
- Get_B4 (entry_count, "entry-count");
-
- for (int32u Pos=0; Pos<entry_count; Pos++)
- {
- Skip_B4( "shadowed-sample-number");
- Skip_B4( "sync-sample-number");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stss()
-{
- NAME_VERSION_FLAG("Sync Sample");
-
- Streams[moov_trak_tkhd_TrackID].stss.clear();
-
- //Parsing
- int32u entry_count;
- Get_B4 (entry_count, "entry-count");
-
- int32u Offset=1; //By default, begin at 1
- bool stss_PreviouslyEmpty=Streams[moov_trak_tkhd_TrackID].stss.empty();
- for (int32u Pos=0; Pos<entry_count; Pos++)
- {
- int32u sample_number;
-
- //Too much slow
- /*
- Get_B4 (sample_number, "sample-number");
- */
-
- //Faster
- if (Element_Offset+4>Element_Size)
- break; //Problem
- sample_number=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset);
- Element_Offset+=4;
-
- //Coherency testing (first frame is 0 or 1)
- if (sample_number==0 && Offset)
- {
- for (size_t Pos=0; Pos<Streams[moov_trak_tkhd_TrackID].stss.size(); Pos++)
- Streams[moov_trak_tkhd_TrackID].stss[Pos]--;
- Offset=0;
- }
-
- Streams[moov_trak_tkhd_TrackID].stss.push_back(sample_number-Offset);
- }
- if (!stss_PreviouslyEmpty)
- std::sort(Streams[moov_trak_tkhd_TrackID].stss.begin(), Streams[moov_trak_tkhd_TrackID].stss.end());
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stsz()
-{
- NAME_VERSION_FLAG("Sample Size")
-
- Stream=Streams.find(moov_trak_tkhd_TrackID);
- int32u Sample_Size, Sample_Count;
- int8u FieldSize;
- if (Element_Code==Elements::moov_trak_mdia_minf_stbl_stsz)
- {
- Get_B4 (Sample_Size, "Sample Size");
- FieldSize=32;
- }
- else
- {
- Skip_B3( "Reserved");
- Get_B1 (FieldSize, "Field size");
- Sample_Size=0;
- }
- Get_B4 (Sample_Count, "Number of entries");
-
- if (Sample_Size>0)
- {
- //Detecting wrong stream size with some PCM streams
- if (StreamKind_Last==Stream_Audio)
- {
- const Ztring &Codec=Retrieve(Stream_Audio, StreamPos_Last, Audio_CodecID);
- if (Codec==__T("raw ")
- || MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Mpeg4, Codec).find(__T("PCM"))==0
- || MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_KindofCodec).find(__T("PCM"))==0)
- {
- int64u Duration=Retrieve(StreamKind_Last, StreamPos_Last, Audio_Duration).To_int64u();
- int64u Resolution=Retrieve(StreamKind_Last, StreamPos_Last, Audio_BitDepth).To_int64u();
- int64u SamplingRate=Retrieve(StreamKind_Last, StreamPos_Last, Audio_SamplingRate).To_int64u();
- int64u Channels=Retrieve(StreamKind_Last, StreamPos_Last, Audio_Channel_s_).To_int64u();
- int64u Stream_Size_Theory=Duration*Resolution*SamplingRate*Channels/8/1000;
- int64u Stream_Size_Real=Sample_Size; Stream_Size_Real*=Sample_Count;
- for (int64u Multiplier=1; Multiplier<=32; Multiplier++)
- if (Stream_Size_Real*Multiplier>Stream_Size_Theory*0.995 && Stream_Size_Real*Multiplier<Stream_Size_Theory*1.005)
- {
- Streams[moov_trak_tkhd_TrackID].stsz_Sample_Multiplier=Multiplier;
- break;
- }
- }
- }
-
- Stream->second.stsz_StreamSize=Sample_Size; Stream->second.stsz_StreamSize*=Sample_Count;
- if (Sample_Size==1)
- Stream->second.stsz_StreamSize*=Streams[moov_trak_tkhd_TrackID].stsz_Sample_Multiplier;
- else
- Stream->second.stsz_Sample_Multiplier=1; //Sampe_Size is correct, no need of stsz_Sample_Multiplier
-
- Stream->second.stsz_Sample_Size=Sample_Size;
- Stream->second.stsz_Sample_Count=Sample_Count;
-
- if (Sample_Count>1 && Retrieve(StreamKind_Last, StreamPos_Last, "BitRate_Mode").empty())
- Fill(StreamKind_Last, StreamPos_Last, "BitRate_Mode", "CBR");
-
- }
- else
- {
- int32u Size;
- /*
- if (FieldSize==4)
- BS_Begin(); //Too much slow
- */
- for (int32u Pos=0; Pos<Sample_Count; Pos++)
- {
- //Too much slow
- /*
- switch(FieldSize)
- {
- case 4 : Get_S4 (4, Size, "Size"); break;
- case 8 : {int8u Size1; Get_B1 (Size1, "Size"); Size=Size1;} break;
- case 16 : {int16u Size2; Get_B2 (Size2, "Size"); Size=Size2;} break;
- case 32 : {int32u Size4; Get_B4 (Size4, "Size"); Size=Size4;} break;
- default : return;
- }
- */
-
- //Faster
- if (Element_Offset+4>Element_Size)
- break; //Problem
- switch(FieldSize)
- {
- case 4 : if (Sample_Count%2)
- Size=Buffer[Buffer_Offset+(size_t)Element_Offset]&0x0F;
- else
- {
- Size=Buffer[Buffer_Offset+(size_t)Element_Offset]>>4;
- Element_Offset++;
- }
- break;
- case 8 : Size=BigEndian2int8u (Buffer+Buffer_Offset+(size_t)Element_Offset); Element_Offset++; break;
- case 16 : Size=BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Offset); Element_Offset+=2; break;
- case 32 : Size=BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset); Element_Offset+=4; break;
- default : return;
- }
-
- Stream->second.stsz_StreamSize+=Size;
- Stream->second.stsz_Total.push_back(Size);
- if (Pos<FrameCount_MaxPerStream)
- Stream->second.stsz.push_back(Size);
- }
- /*
- if (FieldSize==4)
- BS_End(); //Too much slow
- */
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stts()
-{
- NAME_VERSION_FLAG("Time to Sample");
-
- //Parsing
- int32u NumberOfEntries;
- Get_B4(NumberOfEntries, "Number of entries");
-
- Stream=Streams.find(moov_trak_tkhd_TrackID);
- Stream->second.stts_Min=(int32u)-1;
- Stream->second.stts_Max=0;
- Stream->second.stts_FrameCount=0;
- #ifdef MEDIAINFO_DVDIF_ANALYZE_YES
- std::map<int32u, int64u> Duration_FrameCount; //key is duration
- int64u Duration_FrameCount_Max=0;
- int32u Duration_FrameCount_Max_Duration=0;
- if (StreamKind_Last==Stream_Video && Retrieve(Stream_Video, StreamPos_Last, "Format")==__T("DV") && Streams[moov_trak_tkhd_TrackID].Parsers[0] && ((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts==NULL)
- ((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts=new File_DvDif::stts;
- #endif //MEDIAINFO_DVDIF_ANALYZE_YES
-
- #if MEDIAINFO_DEMUX
- Streams[moov_trak_tkhd_TrackID].stts_Durations.clear();
- #endif //MEDIAINFO_DEMUX
-
- for (int32u Pos=0; Pos<NumberOfEntries; Pos++)
- {
- int32u SampleCount, SampleDuration;
- Get_B4(SampleCount, "Sample Count");
- Get_B4(SampleDuration, "Sample Duration");
-
- moov_trak_mdia_minf_stbl_stts_Common(SampleCount, SampleDuration, Pos, NumberOfEntries);
-
- #ifdef MEDIAINFO_DVDIF_ANALYZE_YES
- if (StreamKind_Last==Stream_Video && Retrieve(Stream_Video, StreamPos_Last, "Format")==__T("DV"))
- {
- File_DvDif::stts_part DV_stts_Part;
- DV_stts_Part.Pos_Begin=Stream->second.stts_FrameCount-SampleCount;
- DV_stts_Part.Pos_End=Stream->second.stts_FrameCount;
- DV_stts_Part.Duration=SampleDuration;
- ((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts->push_back(DV_stts_Part);
-
- Duration_FrameCount[SampleDuration]+=Stream->second.stts_FrameCount;
- if (Duration_FrameCount_Max<=Duration_FrameCount[SampleDuration])
- {
- Duration_FrameCount_Max=Duration_FrameCount[SampleDuration];
- Duration_FrameCount_Max_Duration=SampleDuration;
- }
- }
- #endif //MEDIAINFO_DVDIF_ANALYZE_YES
- }
-
- FILLING_BEGIN();
- if (StreamKind_Last==Stream_Video)
- {
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, Stream->second.stts_FrameCount);
-
- #ifdef MEDIAINFO_DVDIF_ANALYZE_YES
- if (StreamKind_Last==Stream_Video && Retrieve(Stream_Video, StreamPos_Last, "Format")==__T("DV"))
- {
- //Clean up the "normal" value
- for (size_t Pos=0; Pos<((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts->size(); Pos++)
- {
- if (((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts->at(Pos).Duration==Duration_FrameCount_Max_Duration)
- {
- ((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts->erase(((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts->begin()+Pos);
- Pos--;
- }
- }
-
- if (((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts->empty())
- {delete ((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts; ((File_DvDif*)Streams[moov_trak_tkhd_TrackID].Parsers[0])->Mpeg4_stts=NULL;}
- }
- #endif //MEDIAINFO_DVDIF_ANALYZE_YES
- }
- FILLING_END();
-}
-
-void File_Mpeg4::moov_trak_mdia_minf_stbl_stts_Common(int32u SampleCount, int32u SampleDuration, int32u Pos, int32u NumberOfEntries)
-{
- FILLING_BEGIN();
- stream::stts_struct Stts;
- Stts.SampleCount=SampleCount;
- Stts.SampleDuration=SampleDuration;
- Stream->second.stts.push_back(Stts);
- if (Pos==1 && NumberOfEntries>=2 && NumberOfEntries<=3 && Stream->second.stts_FrameCount==1 && Stts.SampleDuration!=Stream->second.stts_Max && Stream->second.mdhd_TimeScale)
- {
- Stream->second.stts_Duration_FirstFrame=Stream->second.stts[0].SampleDuration;
- Stream->second.stts_Min=Stts.SampleDuration;
- Stream->second.stts_Max=Stts.SampleDuration;
- }
- if (NumberOfEntries>=2 && NumberOfEntries<=3 && Pos+1==NumberOfEntries && Stts.SampleCount==1 && Stream->second.stts_Min==Stream->second.stts_Max && Stts.SampleDuration!=Stream->second.stts_Max && Stream->second.mdhd_TimeScale)
- {
- Stream->second.stts_Duration_LastFrame=Stts.SampleDuration;
- }
- else
- {
- if (Stts.SampleDuration<Stream->second.stts_Min) Stream->second.stts_Min=Stts.SampleDuration;
- if (Stts.SampleDuration>Stream->second.stts_Max) Stream->second.stts_Max=Stts.SampleDuration;
- }
- Stream->second.stts_FrameCount+=Stts.SampleCount;
- if (Stts.SampleDuration<0x80000000)
- Stream->second.stts_Duration+=Stts.SampleCount*Stts.SampleDuration;
- else
- Stream->second.stts_Duration-=Stts.SampleCount*(((int32u)-1)-Stts.SampleDuration+1); //Negative value
-
- #if MEDIAINFO_DEMUX
- stream::stts_duration stts_Duration;
- stts_Duration.Pos_Begin=Stream->second.stts_FrameCount-Stts.SampleCount;
- stts_Duration.Pos_End=Stream->second.stts_FrameCount;
- stts_Duration.SampleDuration=Stts.SampleDuration;
- if (Streams[moov_trak_tkhd_TrackID].stts_Durations.empty())
- stts_Duration.DTS_Begin=0;
- else
- {
- stream::stts_durations::iterator Previous=Streams[moov_trak_tkhd_TrackID].stts_Durations.end(); --Previous;
- stts_Duration.DTS_Begin=Previous->DTS_End;
- }
- stts_Duration.DTS_End=stts_Duration.DTS_Begin+Stts.SampleCount*Stts.SampleDuration;
- Streams[moov_trak_tkhd_TrackID].stts_Durations.push_back(stts_Duration);
- #endif //MEDIAINFO_DEMUX
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tapt()
-{
- Element_Name("Aperture Mode Dimensions");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tapt_clef()
-{
- NAME_VERSION_FLAG("Clean Aperture Dimensions");
-
- //Parsing
- Skip_BFP4(16, "cleanApertureWidth");
- Skip_BFP4(16, "cleanApertureHeight");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tapt_prof()
-{
- NAME_VERSION_FLAG("Production Aperture Dimensions");
-
- //Parsing
- Skip_BFP4(16, "productionApertureWidth");
- Skip_BFP4(16, "productionApertureHeight");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tapt_enof()
-{
- NAME_VERSION_FLAG("Encoded Pixels Dimensions");
-
- //Parsing
- Skip_BFP4(16, "encodedApertureWidth");
- Skip_BFP4(16, "encodedApertureHeight");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tkhd()
-{
- NAME_VERSION_FLAG("Track Header")
-
- //Parsing
- Ztring Date_Created, Date_Modified;
- float32 a, b, u, c, d, v, x, y, w;
- int64u Duration;
- int16u Volume;
- Skip_Flags(Flags, 0, "Track Enabled");
- Skip_Flags(Flags, 1, "Track in Movie");
- Skip_Flags(Flags, 2, "Track in Preview");
- Skip_Flags(Flags, 3, "Track in Poster");
- Get_DATE1904_DEPENDOFVERSION(Date_Created, "Creation time");
- Get_DATE1904_DEPENDOFVERSION(Date_Modified, "Modification time");
- Get_B4 (moov_trak_tkhd_TrackID, "Track ID"); Element_Info1(moov_trak_tkhd_TrackID);
- Skip_B4( "Reserved");
- Get_B_DEPENDOFVERSION(Duration, "Duration"); if (moov_mvhd_TimeScale) {Param_Info2(Duration*1000/moov_mvhd_TimeScale, " ms"); Element_Info2(Duration*1000/moov_mvhd_TimeScale, " ms");}
- Skip_B4( "Reserved");
- Skip_B4( "Reserved");
- Skip_B2( "Layer");
- Skip_B2( "Alternate group");
- Get_B2 (Volume, "Volume"); Param_Info1(Ztring::ToZtring(((float)Volume)/256));
- Skip_B2( "Reserved");
- Element_Begin1("Matrix structure");
- Get_BFP4(16, a, "a (width scale)");
- Get_BFP4(16, b, "b (width rotate)");
- Get_BFP4( 2, u, "u (width angle)");
- Get_BFP4(16, c, "c (height rotate)");
- Get_BFP4(16, d, "d (height scale)");
- Get_BFP4( 2, v, "v (height angle)");
- Get_BFP4(16, x, "x (position left)");
- Get_BFP4(16, y, "y (position top)");
- Get_BFP4( 2, w, "w (divider)");
- Element_End0();
- Get_BFP4(16, moov_trak_tkhd_Width, "Track width");
- Get_BFP4(16, moov_trak_tkhd_Height, "Track height");
-
- FILLING_BEGIN();
- //Case of header is after main part
- std::map<int32u, stream>::iterator Temp=Streams.find((int32u)-1);
- if (Temp!=Streams.end())
- {
- Streams[moov_trak_tkhd_TrackID]=Temp->second;
- Temp->second.Parsers.clear(); //They are a copy, we don't want that the destructor deletes the Parser
- Streams.erase(Temp);
- }
-
- if (moov_mvhd_TimeScale)
- Fill(StreamKind_Last, StreamPos_Last, "Duration", float64_int64s(((float64)Duration)*1000/moov_mvhd_TimeScale));
- Fill(StreamKind_Last, StreamPos_Last, "Encoded_Date", Date_Created);
- Fill(StreamKind_Last, StreamPos_Last, "Tagged_Date", Date_Modified);
- Fill(StreamKind_Last, StreamPos_Last, General_ID, moov_trak_tkhd_TrackID, 10, true);
- Streams[moov_trak_tkhd_TrackID].tkhd_Duration=Duration;
- if (moov_trak_tkhd_Height*d)
- moov_trak_tkhd_DisplayAspectRatio=(moov_trak_tkhd_Width*a)/(moov_trak_tkhd_Height*d);
- moov_trak_tkhd_Rotation=(float32)(std::atan2(b, a)*180.0/3.14159);
- if (moov_trak_tkhd_Rotation<0)
- moov_trak_tkhd_Rotation+=360;
-
- #if MEDIAINFO_EVENTS
- if (StreamIDs_Size>1 && Config->File_ID_OnlyRoot_Get())
- StreamIDs_Width[StreamIDs_Size-1]=Streams.size()<=1?0:8; //If referenced file and more than 1 stream, referenced ID is discarded, else referenced ID is used
- #endif //MEDIAINFO_EVENTS
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref()
-{
- Element_Name("Track Reference");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_chap()
-{
- Element_Name("Chapters List");
-
- //Parsing
- int32u TrackID;
- while (Element_Offset<Element_Size)
- {
- Get_B4(TrackID, "track-ID");
-
- FILLING_BEGIN();
- Streams[TrackID].IsChapter=true;
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_clcp()
-{
- Element_Name("Closed Caption Track");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_dpnd()
-{
- Element_Name("MPEG-4 dependency");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_fall()
-{
- Element_Name("Audio Track Reference");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_folw()
-{
- Element_Name("Default Track");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_forc()
-{
- Element_Name("Forced Subtitle Track");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_hint()
-{
- Element_Name("original media");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_ipir()
-{
- Element_Name("IPI declarations");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_mpod()
-{
- Element_Name("included elementary stream");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_scpt()
-{
- Element_Name("transcript");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_ssrc()
-{
- Element_Name("non-primary source (used in other track)");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_sync()
-{
- Element_Name("synchronization source");
-
- //Parsing
- while (Element_Offset<Element_Size)
- Skip_B4( "track-ID");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_trak_tref_tmcd()
-{
- Element_Name("TimeCode");
-
- //Parsing
- int32u TrackID;
- Get_B4(TrackID, "track-ID");
-
- FILLING_BEGIN();
- Streams[moov_trak_tkhd_TrackID].TimeCode_TrackID=TrackID;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta()
-{
- Element_Name("User Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_AllF()
-{
- Element_Name("AllF");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_chpl()
-{
- Element_Name("Chapters");
-
- //Parsing
- Ztring Value;
- std::string ValueS;
- int64u Time;
- int8u Size;
- size_t Pos=0;
- Stream_Prepare(Stream_Menu);
- Skip_B8( "Unknown");
- Skip_B1( "Chapter Count");
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_Begin, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
- while (Element_Offset<Element_Size)
- {
- Get_B8 (Time, "Time");
- Get_B1 (Size, "Text size");
- Get_String(Size, ValueS, "Value");
- Value.From_UTF8(ValueS.c_str());
- if (Value.empty())
- Value.From_Local(ValueS.c_str()); //Trying Local...
-
- FILLING_BEGIN();
- Fill(Stream_Menu, StreamPos_Last, Ztring().Duration_From_Milliseconds(Time/10000).To_Local().c_str(), Value);
- FILLING_END();
-
- //Next
- Pos++;
- }
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_End, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_clsf()
-{
- NAME_VERSION_FLAG("Classification"); //3GP
-
- //Parsing
- Ztring ClassificationInfo;
- int32u ClassificationEntity;
- int16u Language, ClassificationTable;
- Get_C4(ClassificationEntity, "ClassificationEntity");
- Get_C2(ClassificationTable, "ClassificationTable");
- Get_B2(Language, "Language");
- bool Utf8=true;
- if (Element_Offset+2<=Element_Size)
- {
- int16u Utf16;
- Peek_B2(Utf16);
- if (Utf16==0xFEFF)
- Utf8=false;
- }
- if (Utf8)
- Get_UTF8(Element_Size-Element_Offset, ClassificationInfo, "ClassificationInfo");
- else
- Get_UTF16(Element_Size-Element_Offset, ClassificationInfo, "ClassificationInfo");
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, "Classification", Ztring().From_CC4(ClassificationTable));
- Fill(Stream_General, 0, "Classification_Reason", ClassificationInfo);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_DcMD()
-{
- Element_Name("Kodak MetaData");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_DcMD_Cmbo()
-{
- Element_Name("Camera byte order");
-
- //Parsing
- Skip_C2( "EXIF byte order");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_DcMD_DcME()
-{
- Element_Name("DcME?");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_DcMD_DcME_Keyw()
-{
- Element_Name("Keywords?");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_DcMD_DcME_Mtmd()
-{
- Element_Name("Metadata?");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_DcMD_DcME_Rate()
-{
- Element_Name("Rate?");
-
- //Parsing
- Skip_B2( "Zero");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_FIEL()
-{
- Element_Name("FIEL?");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_FXTC()
-{
- Element_Name("Adobe After Effects?");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_hinf()
-{
- Element_Name("Hint Format");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_hinv()
-{
- Element_Name("Hint Version");
-
- //Parsing
- Skip_Local(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_hnti()
-{
- Element_Name("Hint Info");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_hnti_rtp()
-{
- Element_Name("Real Time");
-
- //Parsing
- Skip_Local(Element_Size, "Value");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_ID32()
-{
- NAME_VERSION_FLAG("ID3v2"); //3GP
-
- //Parsing
- int16u Language;
- Get_B2(Language, "Language");
- Skip_XX(Element_Size-Element_Offset, "ID3v2data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_kywd()
-{
- NAME_VERSION_FLAG("Keywords"); //3GP
-
- //Parsing
- int16u Language;
- int8u KeywordCnt;
- Get_B2(Language, "Language");
- Get_B1(KeywordCnt, "KeywordCnt");
- for (int8u Pos=0; Pos<KeywordCnt; Pos++)
- {
- Ztring KeywordInfo;
- int8u KeywordSize;
- Get_B1(KeywordSize, "KeywordSize");
- bool Utf8=true;
- if (Element_Offset+2<=Element_Size)
- {
- int16u Utf16;
- Peek_B2(Utf16);
- if (Utf16==0xFEFF)
- Utf8=false;
- }
- if (Utf8)
- Get_UTF8(KeywordSize, KeywordInfo, "KeywordInfo");
- else
- Get_UTF16(KeywordSize, KeywordInfo, "KeywordInfo");
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, "Keywords", KeywordInfo);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_loci()
-{
- NAME_VERSION_FLAG("Location Information"); //3GP
-
- //Parsing
- Skip_XX(Element_Size-Element_Offset, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_LOOP()
-{
- Element_Name("LOOP");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_MCPS()
-{
- Element_Name("Mechanical Copyright Protection Society?");
-
- //Parsing
- Ztring Encoder;
- Get_Local(Element_Size, Encoder, "Value");
-
- //Filling
- //Fill(Stream_General, 0, General_Encoded_Library, Encoder);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_meta()
-{
- NAME_VERSION_FLAG("Metadata");
- INTEGRITY_VERSION(0);
-
- //Filling
- moov_meta_hdlr_Type=Elements::moov_udta_meta;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_meta_hdlr()
-{
- moov_meta_hdlr();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_meta_ilst()
-{
- moov_meta_ilst();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_meta_ilst_xxxx()
-{
- moov_meta_ilst_xxxx();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_meta_ilst_xxxx_data()
-{
- moov_meta_ilst_xxxx_data();
-}
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_meta_ilst_xxxx_mean()
-{
- moov_meta_ilst_xxxx_mean();
-}
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_meta_ilst_xxxx_name()
-{
- moov_meta_ilst_xxxx_name();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_ndrm()
-{
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_nsav()
-{
- Element_Name("No Save");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_ptv()
-{
- Element_Name("Print To Video");
-
- //Parsing
- Skip_B2( "Display size");
- Skip_B2( "Reserved");
- Skip_B2( "Reserved");
- Skip_B1( "Slide show");
- Skip_B1( "Play on open");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_rtng()
-{
- NAME_VERSION_FLAG("Rating"); //3GP
-
- //Parsing
- Ztring RatingInfo;
- int32u RatingEntity, RatingCriteria;
- int16u Language;
- Get_C4(RatingEntity, "RatingEntity");
- Get_C4(RatingCriteria, "RatingCriteria");
- Get_B2(Language, "Language");
- bool Utf8=true;
- if (Element_Offset+2<=Element_Size)
- {
- int16u Utf16;
- Peek_B2(Utf16);
- if (Utf16==0xFEFF)
- Utf8=false;
- }
- if (Utf8)
- Get_UTF8(Element_Size-Element_Offset, RatingInfo, "RatingInfo");
- else
- Get_UTF16(Element_Size-Element_Offset, RatingInfo, "RatingInfo");
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_LawRating, Ztring().From_CC4(RatingCriteria));
- Fill(Stream_General, 0, General_LawRating_Reason, RatingInfo);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_Sel0()
-{
- Element_Name("Sel0");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_tags()
-{
- Element_Name("Tags");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_tags_meta()
-{
- Element_Name("Metadata");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_tags_tseg()
-{
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_tags_tseg_tshd()
-{
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_WLOC()
-{
- Element_Name("WLOC");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_XMP_()
-{
- Element_Name("eXtensible Metadata Platform");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_yrrc()
-{
- NAME_VERSION_FLAG("Recording Year"); //3GP
-
- //Parsing
- int16u RecordingYear;
- Get_B2 (RecordingYear, "RecordingYear");
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Released_Date, RecordingYear);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::moov_udta_xxxx()
-{
- //Getting the method
- std::string Parameter;
- method Method=Metadata_Get(Parameter, Element_Code);
- Element_Info1(Parameter.c_str());
-
- switch (Method)
- {
- case Method_None :
- {
- Element_Name("Unknown");
- }
- break;
- case Method_Binary :
- {
- Element_Name("Binary");
- Skip_XX(Element_Size, "Unknown");
- return;
- }
- break;
- case Method_String :
- {
- Element_Name("Text");
-
- //Parsing
- Ztring Value;
- int32u Size32=0;
- int16u Size16=0, Language;
- bool IsText=true;
- if (Element_Size<=4)
- IsText=false;
- else
- {
- Peek_B4(Size32);
- if (4+(int64u)Size32>Element_Size)
- {
- Size32=0;
- Peek_B2(Size16);
- if (4+(int64u)Size16>Element_Size)
- IsText=false;
- }
- }
- if (!IsText)
- {
- Skip_XX(Element_Size, "Unknown");
- return;
- }
-
- while(Element_Offset<Element_Size)
- {
- if (Size32)
- {
- Get_Local(Size32, Value, "Value");
- Get_B4 (Size32, "Size");
- }
- else
- {
- Get_B2 (Size16, "Size");
- Get_B2 (Language, "Language"); Param_Info1(Language_Get(Language));
- Get_Local(Size16, Value, "Value");
- }
-
- FILLING_BEGIN();
- if (Retrieve(Stream_General, 0, Parameter.c_str()).empty())
- Fill(Stream_General, 0, Parameter.c_str(), Value);
- FILLING_END();
-
- if (Element_Offset+1==Element_Size)
- {
- int8u Null;
- Peek_B1(Null);
- if (Null==0x00)
- Skip_B1( "NULL");
- }
- if (Element_Offset+4<=Element_Size && Size32)
- {
- int32u Null;
- Peek_B4(Null);
- if (Null==0x00000000)
- Skip_XX(Element_Size-Element_Offset,"Padding");
- }
- if (Element_Offset+2<=Element_Size && Size16)
- {
- int16u Null;
- Peek_B2(Null);
- if (Null==0x0000)
- Skip_XX(Element_Size-Element_Offset,"Padding");
- }
- }
- }
- break;
- case Method_String2 :
- {
- NAME_VERSION_FLAG("Text");
-
- //Parsing
- Ztring Value;
- int16u Language;
- while(Element_Offset<Element_Size)
- {
- Get_B2(Language, "Language"); Param_Info1(Language_Get(Language));
- bool Utf8=true;
- if (Element_Offset+2<=Element_Size)
- {
- int16u Utf16;
- Peek_B2(Utf16);
- if (Utf16==0xFEFF)
- Utf8=false;
- }
- if (Utf8)
- Get_UTF8(Element_Size-Element_Offset, Value, "Value");
- else
- Get_UTF16(Element_Size-Element_Offset, Value, "Value");
-
- FILLING_BEGIN();
- if (Retrieve(Stream_General, 0, Parameter.c_str()).empty())
- Fill(Stream_General, 0, Parameter.c_str(), Value);
- FILLING_END();
- }
- }
- break;
- case Method_String3 :
- {
- NAME_VERSION_FLAG("Text");
-
- //Parsing
- Ztring Value;
- while(Element_Offset<Element_Size)
- {
- Get_UTF8(Element_Size-Element_Offset, Value,"Value");
-
- FILLING_BEGIN();
- if (Retrieve(Stream_General, 0, Parameter.c_str()).empty())
- Fill(Stream_General, 0, Parameter.c_str(), Value);
- FILLING_END();
- }
- }
- break;
- case Method_Integer :
- {
- Element_Name("Integer");
-
- //Parsing
- Skip_XX(4, "Value");
- }
- break;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::pdin()
-{
- NAME_VERSION_FLAG("Progressive Download Information");
-
- //Parsing
- while (Element_Offset<Element_Size)
- {
- Skip_B4( "Rate");
- Skip_B4( "Initial Delay");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::PICT()
-{
- Element_Name("QuickDraw picture");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::pckg()
-{
- Element_Name("QTCA");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-
- FILLING_BEGIN();
- Accept("QTCA");
-
- Fill(Stream_General, 0, General_Format, "MPEG-4");
- CodecID_Fill(__T("QTCA"), Stream_General, 0, InfoCodecID_Format_Mpeg4);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::pnot()
-{
- Element_Name("Preview");
-
- //Parsing
- Info_B4(Date_Modified, "Modification date"); Param_Info1(Ztring().Date_From_Seconds_1904(Date_Modified));
- Skip_B2( "Version number");
- Skip_C4( "Atom type");
- Skip_B2( "Atom index");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::RDAO()
-{
- Element_Name("Audio O?");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::RDAS()
-{
- Element_Name("Audio S?");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::RDVO()
-{
- Element_Name("Video O?");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::RDVS()
-{
- Element_Name("Video S?");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::RED1()
-{
- Element_Name("RED Header");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-
- FILLING_BEGIN();
- Accept("R3D");
-
- Fill(Stream_General, 0, General_Format, "R3D");
- //Source: http://peter.schlaile.de/redcode/
-
- Finish();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::REDA()
-{
- Element_Name("RED Audio");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-
- Finish();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::REDV()
-{
- Element_Name("RED Video");
-
- //Parsing
- /*
- if (Streams[1].Parser==0)
- {
- Streams[1].Parser=new File_Mpeg4();
- Open_Buffer_Init(Streams[1].Parser);
- }
- */
-
- //Parsing
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_B4( "Unknown");
- Skip_C4( "CodecID");
- Skip_B4( "Unknown");
- //Open_Buffer_Continue(Streams[1].Parser);
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- Finish();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::REOB()
-{
- Element_Name("OB?");
-
- //Parsing
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::skip()
-{
- Element_Name("Skip");
-
- //Parsing
- Skip_XX(Element_Size, "Free");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4::wide()
-{
- Element_Name("Wide");
-
- //Parsing
- Skip_XX(Element_Size, "Free");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEG4_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_TimeCode.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_TimeCode.cpp
deleted file mode 100644
index 17d24af72..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_TimeCode.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEG4_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mpeg4_TimeCode.h"
-#include "MediaInfo/TimeCode.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mpeg4_TimeCode::File_Mpeg4_TimeCode()
-:File__Analyze()
-{
- //Out
- Pos=(int32u)-1;
-
- NumberOfFrames=0;
- DropFrame=false;
- NegativeTimes=false;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_TimeCode::Streams_Fill()
-{
- if (Pos!=(int32u)-1 && NumberOfFrames)
- {
- int64s Pos_Temp=Pos;
- float64 FrameRate_WithDF=NumberOfFrames;
- if (DropFrame)
- {
- float64 FramesPerHour_NDF=FrameRate_WithDF*60*60;
- FrameRate_WithDF*=(FramesPerHour_NDF-108)/FramesPerHour_NDF;
- }
-
- Fill(Stream_General, 0, "Delay", Pos_Temp*1000/FrameRate_WithDF, 0);
-
- TimeCode TC(Pos_Temp, NumberOfFrames, DropFrame);
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_FirstFrame, TC.ToString().c_str());
- if (Frame_Count==1)
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_Settings, "Striped");
-
- }
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4_TimeCode::Read_Buffer_Continue()
-{
- //Parsing
- int32u Position=0;
- while (Element_Offset<Element_Size)
- {
- Get_B4 (Position, "Position");
- if (Pos==(int32u)-1) //First time code
- {
- Pos=Position;
- if (NegativeTimes)
- Pos=(int32s)Position;
- }
- }
-
- FILLING_BEGIN();
- Frame_Count+=Element_Size/4;
-
- if (!Status[IsAccepted])
- {
- Accept("TimeCode");
- Fill("TimeCode");
- }
- FILLING_END();
-}
-
-}
-
-#endif //MEDIAINFO_MPEG4_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_TimeCode.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_TimeCode.h
deleted file mode 100644
index 6d91fd2b0..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg4_TimeCode.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Mpeg4_TimeCodeH
-#define MediaInfo_File_Mpeg4_TimeCodeH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Mpeg4_TimeCode
-//***************************************************************************
-
-class File_Mpeg4_TimeCode : public File__Analyze
-{
-public :
- //In
- int8u NumberOfFrames;
- bool DropFrame;
- bool NegativeTimes;
-
- //Out
- int64s Pos;
-
- //Constructor/Destructor
- File_Mpeg4_TimeCode();
-
-protected :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegPs.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegPs.cpp
deleted file mode 100644
index be49bfe6f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegPs.cpp
+++ /dev/null
@@ -1,4858 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGPS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_MpegPs.h"
-#include "MediaInfo/Multiple/File_Mpeg_Psi.h"
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_HEVC_YES)
- #include "MediaInfo/Video/File_Hevc.h"
-#endif
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_VC1_YES)
- #include "MediaInfo/Video/File_Vc1.h"
-#endif
-#if defined(MEDIAINFO_AVSV_YES)
- #include "MediaInfo/Video/File_AvsV.h"
-#endif
-#if defined(MEDIAINFO_DIRAC_YES)
- #include "MediaInfo/Video/File_Dirac.h"
-#endif
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_DTS_YES)
- #include "MediaInfo/Audio/File_Dts.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm_M2ts.h"
-#endif
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm_Vob.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0302_YES)
- #include "MediaInfo/Audio/File_SmpteSt0302.h"
-#endif
-#if defined(MEDIAINFO_PS2A_YES)
- #include "MediaInfo/Audio/File_Ps2Audio.h"
-#endif
-#if defined(MEDIAINFO_RLE_YES)
- #include "MediaInfo/Image/File_Rle.h"
-#endif
-#if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- #include "MediaInfo/Text/File_AribStdB24B37.h"
-#endif
-#if defined(MEDIAINFO_DVBSUBTITLE_YES)
- #include "MediaInfo/Text/File_DvbSubtitle.h"
-#endif
-#if defined(MEDIAINFO_PGS_YES)
- #include "MediaInfo/Text/File_Pgs.h"
-#endif
-#if defined(MEDIAINFO_TELETEXT_YES)
- #include "MediaInfo/Text/File_Teletext.h"
-#endif
-#include "MediaInfo/File_Unknown.h"
-#include <ZenLib/Utils.h>
-#include <algorithm>
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-#if MEDIAINFO_IBI
- #if MEDIAINFO_SEEK
- #include "MediaInfo/Multiple/File_Ibi.h"
- #endif //MEDIAINFO_SEEK
-#endif //MEDIAINFO_IBI
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* MpegPs_System_Fixed[]=
-{
- "CBR",
- "VBR",
-};
-
-//---------------------------------------------------------------------------
-const char* MpegPs_stream_id(int8u Element_Name)
-{
- if (Element_Name>=0xC0
- && Element_Name<=0xDF) return "MPEG Audio";
- else if (Element_Name>=0xE0
- && Element_Name<=0xEF) return "MPEG Video";
- else if (Element_Name==0xB8) return "For all MPEG Audio streams";
- else if (Element_Name==0xB9) return "For all MPEG Video streams";
- else if (Element_Name==0xBD) return "Private 1";
- else if (Element_Name==0xBF) return "Private 2";
- else if (Element_Name==0xFD) return "Private HD";
- else return "";
-}
-
-//---------------------------------------------------------------------------
-const char* MpegPs_Codec(int8u Element_Name)
-{
- if (Element_Name>=0xC0
- && Element_Name<=0xDF) return "MPEG-A";
- else if (Element_Name>=0xE0
- && Element_Name<=0xEF) return "MPEG-V";
- else return "";
-}
-
-//---------------------------------------------------------------------------
-int32u MpegPs_Default_stream_type(int8u Element_Name, int8u Mpeg_Version)
-{
- if (Element_Name>=0xC0
- && Element_Name<=0xDF) return Mpeg_Version==0x02?0x04:0x03;
- else if (Element_Name>=0xE0
- && Element_Name<=0xEF) return Mpeg_Version==0x02?0x02:0x01;
- else return 0x00;
-}
-
-//---------------------------------------------------------------------------
-const char* MpegPs_trick_mode_control_values[8]=
-{
- "Fast forward",
- "Slow motion",
- "Freeze frame",
- "Fast reverse",
- "Slow reverse",
- "Reserved",
- "Reserved",
- "Reserved"
-};
-
-//---------------------------------------------------------------------------
-const char* MpegPs_stream_id_extension(int8u stream_id_extension)
-{
- switch (stream_id_extension)
- {
- case 0x00 : return "IPMP Control Information Streams"; //ISO/IEC 13818-11
- case 0x01 : return "IPMP Streams"; //ISO/IEC 13818-11
- default :
- if (stream_id_extension>=0x02
- && stream_id_extension<=0x11) return "ISO/IEC 14496-17 text Streams";
- else if (stream_id_extension>=0x12
- && stream_id_extension<=0x21) return "ISO/IEC 23002-3 auxiliary video data Streams";
- else if (stream_id_extension>=0x55
- && stream_id_extension<=0x5F) return "VC-1";
- else if (stream_id_extension>=0x60
- && stream_id_extension<=0x6F) return "Dirac";
- else if (stream_id_extension==0x71) return "Audio";
- else if (stream_id_extension==0x72) return "Audio Ext";
- else if (stream_id_extension==0x76) return "Audio";
- else if (stream_id_extension>=0x75
- && stream_id_extension<=0x7F) return "VC-1";
- else return "";
- }
-}
-
-//---------------------------------------------------------------------------
-extern const char* Mpeg_Psi_stream_type_Format(int8u stream_type, int32u format_identifier);
-extern const char* Mpeg_Psi_stream_type_Codec(int8u stream_type, int32u format_identifier);
-extern stream_t Mpeg_Psi_stream_type_StreamKind(int32u stream_type, int32u format_identifier);
-extern const char* Mpeg_Psi_stream_type_Info(int8u stream_type, int32u format_identifier);
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_MpegPs::File_MpegPs()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("MpegPs");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_MpegPs;
- StreamIDs_Width[0]=2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(0); //Container1
- #endif //MEDIAINFO_TRACE
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
- Trusted_Multiplier=2;
-
- //In
- FromTS=false;
- FromTS_stream_type=0x00; //No info
- FromTS_program_format_identifier=0x00000000; //No info
- FromTS_format_identifier=0x00000000; //No info
- FromTS_descriptor_tag=0x00; //No info
- MPEG_Version=0; //No info
- Searching_TimeStamp_Start=true;
- #ifdef MEDIAINFO_MPEG4_YES
- ParserFromTs=NULL;
- SLConfig=NULL;
- #endif
- #if MEDIAINFO_DEMUX
- SubStream_Demux=NULL;
- Demux_StreamIsBeingParsed_type=(int8u)-1;
- #endif //MEDIAINFO_DEMUX
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FromAribStdB24B37=false;
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
-
- //Out
- HasTimeStamps=false;
-
- //Temp
- SizeToAnalyze=8*1024*1024;
- video_stream_Unlimited=false;
- Buffer_DataSizeToParse=0;
- #if MEDIAINFO_SEEK
- Seek_Value=(int64u)-1;
- Seek_ID=(int64u)-1;
- Duration_Detected=false;
- #endif //MEDIAINFO_SEEK
-
- //From packets
- program_mux_rate=(int32u)-1;
-
- BookMark_Set(); //for stream parsing in phase 2
-}
-
-//---------------------------------------------------------------------------
-File_MpegPs::~File_MpegPs()
-{
- #if MEDIAINFO_DEMUX
- if (FromTS_stream_type==0x20) //If SubStream, this object owns the demux handler
- delete SubStream_Demux; //SubStream_Demux=NULL;
- #endif //MEDIAINFO_DEMUX
- #ifdef MEDIAINFO_MPEG4_YES
- delete ParserFromTs; //ParserFromTs=NULL;
- delete SLConfig; //SLConfig=NULL;
- #endif
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Streams_Fill()
-{
- //For each Streams
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- Streams_Fill_PerStream(StreamID, Streams[StreamID], KindOfStream_Main);
-
- //For each private Streams
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- Streams_Fill_PerStream(StreamID, Streams_Private1[StreamID], KindOfStream_Private);
-
- //For each extension Streams
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- {
- Streams_Fill_PerStream(StreamID, Streams_Extension[StreamID], KindOfStream_Extension);
-
- //Special cases
- if ((StreamID==0x71 || StreamID==0x76) && !Streams_Extension[StreamID].Parsers.empty() && Streams_Extension[0x72].StreamIsRegistred) //DTS-HD and TrueHD
- {
- Fill(Stream_Audio, StreamPos_Last, Audio_MuxingMode, "Stream extension");
- if (!IsSub)
- Fill(Stream_Audio, StreamPos_Last, Audio_MuxingMode_MoreInfo, "HD part is in stream extension 114 (0x72)");
- }
- }
-
- //Tags in MPEG Video
- if (Count_Get(Stream_Video)>0)
- Fill(Stream_General, 0, General_Encoded_Library, Retrieve(Stream_Video, 0, Video_Encoded_Library));
-
- //Special case: Video PTS
- if (video_stream_PTS.size()>=2+4*2+1*2 && Retrieve(Stream_Video, 0, Video_FrameRate).To_float64()>30.000) //TODO: Parser all kind of files
- {
- sort(video_stream_PTS.begin(), video_stream_PTS.end());
- video_stream_PTS.erase(video_stream_PTS.begin(), video_stream_PTS.begin()+4); //Removing first frames, they may lack of B/P frames
- video_stream_PTS.resize(video_stream_PTS.size()-4); //Removing last frames, they may lack of B/P frames
-
- //Trying to detect container FPS
- std::vector<int64u> video_stream_PTS_Between;
- for (size_t Pos=1; Pos<video_stream_PTS.size(); Pos++)
- video_stream_PTS_Between.push_back(video_stream_PTS[Pos]-video_stream_PTS[Pos-1]);
- std::sort(video_stream_PTS_Between.begin(), video_stream_PTS_Between.end());
- video_stream_PTS_Between.erase(video_stream_PTS_Between.begin(), video_stream_PTS_Between.begin()+1); //Removing first timec, they may be wrong value due to missing frame
- video_stream_PTS_Between.resize(video_stream_PTS_Between.size()-1); //Removing last frames, they may be wrong value due to missing frame
- if (video_stream_PTS_Between[0]*0.9<video_stream_PTS_Between[video_stream_PTS_Between.size()-1]
- && video_stream_PTS_Between[0]*1.1>video_stream_PTS_Between[video_stream_PTS_Between.size()-1])
- {
- float64 Time=(float)(video_stream_PTS[video_stream_PTS.size()-1]-video_stream_PTS[0])/(video_stream_PTS.size()-1)/90;
- if (Time)
- {
- float64 FrameRate_Container=1000/Time;
- if (Retrieve(Stream_Video, 0, Video_ScanType)==__T("Interlaced"))
- FrameRate_Container/=2; //PTS is per field
- float64 FrameRate_Original=Retrieve(Stream_Video, 0, Video_FrameRate).To_float64();
- if (!(FrameRate_Original>=FrameRate_Container*0.9 && FrameRate_Original<=FrameRate_Container*1.1)
- && !(FrameRate_Container>=FrameRate_Original*0.9 && FrameRate_Container<=FrameRate_Original*1.1))
- {
- Clear(Stream_Video, 0, Video_FrameRate); //Or automatic filling thinks current FrameRate is the container FrameRate (usaly Conatainer FrameRate is filled first, not here)
- Fill(Stream_Video, 0, Video_FrameRate, FrameRate_Container, 3, true);
- if (FrameRate_Original)
- Fill(Stream_Video, 0, Video_FrameRate_Original, FrameRate_Original);
- }
- }
- }
- }
-
- if (Count_Get(Stream_Video)==1 && Retrieve(Stream_Video, 0, Video_Format_Version)==__T("Version 1"))
- Fill(Stream_General, 0, General_InternetMediaType, "video/mpeg", Unlimited, true, true);
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Streams_Fill_PerStream(size_t StreamID, ps_stream &Temp, kindofstream KindOfStream)
-{
- //By the parser
- StreamKind_Last=Stream_Max;
- size_t Count=0;
- if (!Temp.Parsers.empty() && Temp.Parsers[0] && Temp.Parsers[0]->Status[IsAccepted])
- {
- Fill(Temp.Parsers[0]);
-
- if (Temp.Parsers[0]->Count_Get(Stream_Video) && Temp.Parsers[0]->Count_Get(Stream_Text))
- {
- //Special case: Video and Text are together
- Stream_Prepare(Stream_Video);
- Count=Merge(*Temp.Parsers[0], Stream_Video, 0, StreamPos_Last);
- }
- else
- Count=Merge(*Temp.Parsers[0]);
-
- Ztring LawRating=Temp.Parsers[0]->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Temp.Parsers[0]->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
-
- //By the TS stream_type
- if (StreamKind_Last==Stream_Max)
- {
- //Disabling stream_private_1 if needed (will be done by Streams_Private1 object)
- if (Temp.stream_type!=0 && (StreamID==0xBD /*|| StreamID==0xBF*/))
- {
- bool StreamIsDetected=false;
- for (size_t Pos=0; Pos<Streams_Private1.size(); Pos++)
- if (!Streams_Private1[Pos].Parsers.empty() && Streams_Private1[Pos].Parsers[0])
- StreamIsDetected=true;
- if (StreamIsDetected)
- Temp.stream_type=0;
- }
-
- if (Temp.stream_type!=0)
- {
- Stream_Prepare(Mpeg_Psi_stream_type_StreamKind(Temp.stream_type, 0x00000000));
- Count=1;
- }
- }
-
- //By StreamIsRegistred
- if (StreamKind_Last==Stream_Max)
- {
- if (Temp.StreamIsRegistred>16)
- {
- if (StreamID>=0xC0 && StreamID<=0xDF)
- {
- Stream_Prepare(Stream_Audio);
- Count=1;
- }
- if (StreamID>=0xE0 && StreamID<=0xEF)
- {
- Stream_Prepare(Stream_Video);
- Count=1;
- }
- }
- }
-
- #ifdef MEDIAINFO_MPEG4_YES
- if (StreamKind_Last==Stream_Audio && SLConfig)
- Fill(Stream_Audio, StreamPos_Last, Audio_MuxingMode, "SL");
- #endif //MEDIAINFO_MPEG4_YES
-
- //More info
- for (size_t StreamPos=Count_Get(StreamKind_Last)-Count; StreamPos<Count_Get(StreamKind_Last); StreamPos++)
- {
- ///Saving StreamKind and Stream_Pos
- Temp.StreamKind=StreamKind_Last;
- Temp.StreamPos=Count_Get(StreamKind_Last)-Count;
-
- //Common
- if (KindOfStream==KindOfStream_Main)
- {
- Ztring ID; ID.From_Number(StreamID);
- Ztring ID_String; ID_String.From_Number(StreamID); ID_String+=__T(" (0x"); ID_String+=Ztring::ToZtring(StreamID, 16); ID_String+=__T(")");
- if (!Retrieve(StreamKind_Last, StreamPos, General_ID).empty())
- {
- Fill(StreamKind_Last, StreamPos, General_ID, StreamID);
- Ztring ID_String; ID_String.From_Number(StreamID); ID_String+=__T(" (0x"); ID_String+=Ztring::ToZtring(StreamID, 16); ID_String+=__T(")");
- Fill(StreamKind_Last, StreamPos, General_ID_String, ID_String, true); //TODO: merge with Decimal_Hexa in file_MpegTs
- }
- Fill(StreamKind_Last, StreamPos, General_ID, ID, true);
- Fill(StreamKind_Last, StreamPos, General_ID_String, ID_String, true); //TODO: merge with Decimal_Hexa in file_MpegTs
- }
- else if (KindOfStream==KindOfStream_Private)
- {
- Ztring ID=__T("189");
- if (StreamID)
- ID+=__T("-")+Ztring::ToZtring(StreamID);
- if (!Temp.Parsers[0]->Retrieve(StreamKind_Last, StreamPos, General_ID).empty())
- ID+=__T("-")+Temp.Parsers[0]->Retrieve(StreamKind_Last, StreamPos, General_ID);
- Fill(StreamKind_Last, StreamPos, General_ID, ID, true);
- Ztring ID_String=__T("189 (0xBD)");
- if (StreamID)
- ID_String+=__T("-")+Ztring::ToZtring(StreamID)+__T(" (0x")+Ztring::ToZtring(StreamID, 16)+__T(")");
- if (!Temp.Parsers[0]->Retrieve(StreamKind_Last, StreamPos, General_ID_String).empty())
- ID_String+=__T("-")+Temp.Parsers[0]->Retrieve(StreamKind_Last, StreamPos, General_ID_String);
- else if (!Temp.Parsers[0]->Retrieve(StreamKind_Last, StreamPos, General_ID).empty())
- ID_String+=__T("-")+Temp.Parsers[0]->Retrieve(StreamKind_Last, StreamPos, General_ID);
- Fill(StreamKind_Last, StreamPos, General_ID_String, ID_String, true); //TODO: merge with Decimal_Hexa in file_MpegTs
- if (StreamID)
- Fill(StreamKind_Last, StreamPos, "MuxingMode", "DVD-Video", Unlimited, true, true);
- }
- else if (KindOfStream==KindOfStream_Extension)
- {
- Ztring ID=__T("253");
- if (StreamID)
- ID+=__T("-")+Ztring::ToZtring(StreamID);
- Fill(StreamKind_Last, StreamPos, General_ID, ID, true);
- Ztring ID_String=__T("253 (0xFD)");
- if (StreamID)
- ID_String+=__T("-")+Ztring::ToZtring(StreamID)+__T(" (0x")+Ztring::ToZtring(StreamID, 16)+__T(")");
- Fill(StreamKind_Last, StreamPos, General_ID_String, ID_String, true); //TODO: merge with Decimal_Hexa in file_MpegTs
- }
-
- if (Retrieve(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Format)).empty() && Temp.stream_type!=0)
- Fill(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Format), Mpeg_Psi_stream_type_Format(Temp.stream_type, 0x0000));
- if (Retrieve(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Codec)).empty() && Temp.stream_type!=0)
- Fill(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Codec), Mpeg_Psi_stream_type_Codec(Temp.stream_type, 0x0000));
-
- if (Temp.TimeStamp_Start.PTS.TimeStamp!=(int64u)-1)
- {
- Fill(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay_Original), Retrieve(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay)), true);
- Clear(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay));
- Fill(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay_Original_Source), Retrieve(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay_Source)), true);
- Clear(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay_Source));
- Fill(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay_Original_Settings), Retrieve(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay_Settings)), true);
- Clear(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay_Settings));
-
- Fill(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay), ((float64)Temp.TimeStamp_Start.PTS.TimeStamp)/90, 3, true);
- Fill(StreamKind_Last, StreamPos, Fill_Parameter(StreamKind_Last, Generic_Delay_Source), "Container");
- }
-
- //Bitrate calculation
- if (FrameInfo.PTS!=(int64u)-1 && (StreamKind_Last==Stream_Video || StreamKind_Last==Stream_Audio))
- {
- int64u BitRate=Retrieve(StreamKind_Last, StreamPos, "BitRate").To_int64u();
- if (BitRate==0)
- BitRate=Retrieve(StreamKind_Last, StreamPos, "BitRate_Nominal").To_int64u();
- if (BitRate==0)
- FrameInfo.PTS=(int64u)-1;
- else
- FrameInfo.PTS+=BitRate; //Saving global BitRate
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Streams_Update()
-{
- //For each Streams
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- for (size_t Pos=0; Pos<Streams[StreamID].Parsers.size(); Pos++)
- Streams[StreamID].Parsers[Pos]->Open_Buffer_Update();
-
- //For each private Streams
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- for (size_t Pos=0; Pos<Streams_Private1[StreamID].Parsers.size(); Pos++)
- Streams_Private1[StreamID].Parsers[Pos]->Open_Buffer_Update();
-
- //For each extension Streams
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- for (size_t Pos=0; Pos<Streams_Extension[StreamID].Parsers.size(); Pos++)
- Streams_Extension[StreamID].Parsers[Pos]->Open_Buffer_Update();
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Streams_Finish()
-{
- if (Streams.empty())
- return; //Parsing already done. ToDo: real time
-
- FrameInfo.PTS=0; //Will be used for BitRate calculation
- FrameInfo.DTS=0; //Will be used for Duration calculation
-
- //For each Streams
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- Streams_Finish_PerStream(StreamID, Streams[StreamID], KindOfStream_Main);
-
- //For each private Streams
- StreamOrder_CountOfPrivateStreams_Temp=0;
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- Streams_Finish_PerStream(StreamID, Streams_Private1[StreamID], KindOfStream_Private);
-
- //For each extesnion Streams
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- Streams_Finish_PerStream(StreamID, Streams_Extension[StreamID], KindOfStream_Extension);
-
- //Bitrate coherancy
- if (!IsSub && FrameInfo.PTS>0 && FrameInfo.PTS!=(int64u)-1 && FrameInfo.DTS!=0 && File_Size!=(int64u)-1)
- {
- int64u BitRate_FromDuration=File_Size*8000*90/FrameInfo.DTS;
- int64u BitRate_FromBitRates=FrameInfo.PTS;
-
- if (BitRate_FromDuration>=BitRate_FromBitRates*3
- || BitRate_FromDuration<=BitRate_FromBitRates/20)
- {
- //Clearing durations
- for (size_t StreamKind=0; StreamKind<=Stream_Text; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- Clear((stream_t)StreamKind, StreamPos, (stream_t)Fill_Parameter((stream_t)StreamKind, Generic_Duration));
- if (Count_Get(Stream_Video)==1)
- Clear(Stream_Video, 0, Video_Duration);
- }
- }
-
- #if MEDIAINFO_IBI
- if (!IsSub && Config_Ibi_Create)
- {
- for (ibi::streams::iterator IbiStream_Temp=Ibi.Streams.begin(); IbiStream_Temp!=Ibi.Streams.end(); ++IbiStream_Temp)
- {
- if (IbiStream_Temp->second && IbiStream_Temp->second->DtsFrequencyNumerator==1000000000 && IbiStream_Temp->second->DtsFrequencyDenominator==1)
- {
- bool IsOk=true;
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- if (!IbiStream_Temp->second->Infos[Pos].IsContinuous && Pos+1!=IbiStream_Temp->second->Infos.size())
- IsOk=false;
- if (IsOk) //Only is all items are continuous (partial IBI not yet supported)
- {
- IbiStream_Temp->second->DtsFrequencyNumerator=90000;
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- {
- int64u Temp=IbiStream_Temp->second->Infos[Pos].Dts*90/1000000;
- IbiStream_Temp->second->Infos[Pos].Dts=Temp;
- }
- }
- }
- }
- }
- #endif //MEDIAINFO_IBI
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Streams_Finish_PerStream(size_t StreamID, ps_stream &Temp, kindofstream KindOfStream)
-{
- //By the parser
- if (Temp.StreamKind==Stream_Max && !Temp.Parsers.empty() && Temp.Parsers[0])
- Streams_Fill_PerStream(StreamID, Temp, KindOfStream);
-
- //Init
- if (Temp.StreamKind==Stream_Max)
- return;
- StreamKind_Last=Temp.StreamKind;
- StreamPos_Last=Temp.StreamPos;
-
- //By the parser
- if (!Temp.Parsers.empty() && Temp.Parsers[0])
- {
- if (!Temp.Parsers[0]->Status[IsFinished])
- {
- Temp.Parsers[0]->ShouldContinueParsing=false;
- int64u File_Size_Temp=File_Size;
- File_Size=File_Offset+Buffer_Offset+Element_Offset;
- #if MEDIAINFO_EVENTS
- Temp.Parsers[0]->PES_FirstByte_IsAvailable=false;
- #endif //MEDIAINFO_EVENTS
- Open_Buffer_Continue(Temp.Parsers[0], Buffer, 0, false);
- File_Size=File_Size_Temp;
- Finish(Temp.Parsers[0]);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
- }
- Ztring ID=Retrieve(StreamKind_Last, StreamPos_Last, General_ID);
- Ztring ID_String=Retrieve(StreamKind_Last, StreamPos_Last, General_ID_String);
- Merge(*Temp.Parsers[0], StreamKind_Last, 0, StreamPos_Last);
- Fill(StreamKind_Last, StreamPos_Last, General_ID, ID, true);
- Fill(StreamKind_Last, StreamPos_Last, General_ID_String, ID_String, true);
- if (!IsSub)
- {
- switch (KindOfStream)
- {
- case KindOfStream_Private :
- if (Streams[0xBD].StreamOrder!=(size_t)-1)
- Fill(StreamKind_Last, StreamPos_Last, General_StreamOrder, Streams[0xBD].StreamOrder+StreamOrder_CountOfPrivateStreams_Temp);
- if (StreamOrder_CountOfPrivateStreams_Minus1 && StreamOrder_CountOfPrivateStreams_Temp<StreamOrder_CountOfPrivateStreams_Minus1)
- StreamOrder_CountOfPrivateStreams_Temp++;
- break;
- case KindOfStream_Extension :
- if (Streams[0xFD].StreamOrder!=(size_t)-1)
- Fill(StreamKind_Last, StreamPos_Last, General_StreamOrder, Streams[0xFD].StreamOrder);
- break;
- default :
- if (Temp.StreamOrder!=(size_t)-1)
- Fill(StreamKind_Last, StreamPos_Last, General_StreamOrder, Temp.StreamOrder);
- }
- Fill(StreamKind_Last, StreamPos_Last, General_FirstPacketOrder, Temp.FirstPacketOrder);
- }
-
- //Special cases
- if (Temp.Parsers[0]->Count_Get(Stream_Video) && Temp.Parsers[0]->Count_Get(Stream_Text))
- {
- //Video and Text are together
- size_t Text_Count=Temp.Parsers[0]->Count_Get(Stream_Text);
- for (size_t Parser_Pos=0; Parser_Pos<Text_Count; Parser_Pos++)
- {
- Ztring ID=Retrieve(Stream_Video, Temp.StreamPos, Video_ID)+__T("-")+Temp.Parsers[0]->Retrieve(Stream_Text, Parser_Pos, Text_ID);
- StreamPos_Last=(size_t)-1;
- for (size_t Pos=0; Pos<Count_Get(Stream_Text); Pos++)
- if (Retrieve(Stream_Text, Pos, Text_ID)==ID && Retrieve(Stream_Video, Temp.StreamPos, "MuxingMode")==Temp.Parsers[0]->Retrieve(Stream_Text, Parser_Pos, "MuxingMode"))
- {
- StreamPos_Last=Pos;
- break;
- }
- if (StreamPos_Last==(size_t)-1)
- Stream_Prepare(Stream_Text, StreamPos_Last);
- Merge(*Temp.Parsers[0], Stream_Text, Parser_Pos, StreamPos_Last);
-
- if (!IsSub)
- Fill(Stream_Text, StreamPos_Last, "MuxingMode_MoreInfo", __T("Muxed in Video #")+Ztring().From_Number(Temp.StreamPos+1));
- Fill(Stream_Text, StreamPos_Last, Text_ID, ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_ID_String, Retrieve(Stream_Video, Temp.StreamPos, Video_ID_String)+__T("-")+Temp.Parsers[0]->Retrieve(Stream_Text, Parser_Pos, Text_ID), true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay, Retrieve(Stream_Video, Temp.StreamPos, Video_Delay), true);
- if (!IsSub)
- {
- switch (KindOfStream)
- {
- case KindOfStream_Private :
- if (Streams[0xBD].StreamOrder!=(size_t)-1)
- Fill(Stream_Text, StreamPos_Last, General_StreamOrder, Streams[0xBD].StreamOrder);
- break;
- case KindOfStream_Extension :
- if (Streams[0xFD].StreamOrder!=(size_t)-1)
- Fill(Stream_Text, StreamPos_Last, General_StreamOrder, Streams[0xFD].StreamOrder);
- break;
- default :
- if (Temp.StreamOrder!=(size_t)-1)
- Fill(Stream_Text, StreamPos_Last, General_StreamOrder, Temp.StreamOrder);
- }
- Fill(StreamKind_Last, StreamPos_Last, General_FirstPacketOrder, Temp.FirstPacketOrder);
- }
- }
-
- StreamKind_Last=Temp.StreamKind;
- StreamPos_Last=Temp.StreamPos;
- }
-
- //Law rating
- Ztring LawRating=Temp.Parsers[0]->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Temp.Parsers[0]->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
-
- //Duration if it is missing from the parser
- if (Temp.StreamKind!=Stream_Max && Retrieve(Temp.StreamKind, Temp.StreamPos, Fill_Parameter(Temp.StreamKind, Generic_Duration)).empty())
- {
- StreamKind_Last=Temp.StreamKind;
- StreamPos_Last=Temp.StreamPos;
-
- int64u Start=(int64u)-1, End=(int64u)-1, ByteDifference=(int64u)-1;
- if (Temp.TimeStamp_Start.DTS.TimeStamp!=(int64u)-1 && Temp.TimeStamp_End.DTS.TimeStamp!=(int64u)-1)
- {
- Start=Temp.TimeStamp_Start.DTS.TimeStamp;
- End=Temp.TimeStamp_End.DTS.TimeStamp;
- }
- else if (Temp.TimeStamp_Start.PTS.TimeStamp!=(int64u)-1 && Temp.TimeStamp_End.PTS.TimeStamp!=(int64u)-1)
- {
- Start=Temp.TimeStamp_Start.PTS.TimeStamp;
- End=Temp.TimeStamp_End.PTS.TimeStamp;
- if (Temp.TimeStamp_Start.PTS.File_Pos<Temp.TimeStamp_End.PTS.File_Pos)
- ByteDifference=Temp.TimeStamp_End.PTS.File_Pos-Temp.TimeStamp_Start.PTS.File_Pos;
- }
- if (Start!=(int64u)-1 && End!=(int64u)-1)
- {
- //TimeStamp
- if (End<0x100000000LL && Start>0x100000000LL) //Testing coherancy: no 13 hours long files.
- End+=0x200000000LL; //33 bits, cyclic
- if (Start<End)
- {
- int64u Duration=End-Start;
- if (ByteDifference!=(int64u)-1)
- {
- float BitRate=(ByteDifference*8)/(((float)Duration)/9000);
- if (BitRate>10000000000LL)
- Duration=0;
- }
- if (Duration)
- {
- if (StreamKind_Last==Stream_Video)
- {
- float64 FrameRate=Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate).To_float64();
- if (FrameRate!=0)
- Duration+=Ztring::ToZtring(90*1000/FrameRate, 0).To_int64u(); //We imagine that there is one frame in it
- }
-
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Duration), Duration/90, 10, true);
- }
- }
- }
- }
-
- //Bitrate calculation
- if (FrameInfo.PTS!=(int64u)-1 && (StreamKind_Last==Stream_Video || StreamKind_Last==Stream_Audio))
- {
- int64u BitRate=Retrieve(StreamKind_Last, StreamPos_Last, "BitRate").To_int64u();
- if (BitRate==0)
- BitRate=Retrieve(StreamKind_Last, StreamPos_Last, "BitRate_Nominal").To_int64u();
- if (BitRate==0)
- FrameInfo.PTS=(int64u)-1;
- else
- FrameInfo.PTS+=BitRate; //Saving global BitRate
- }
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_MpegPs::Synchronize()
-{
- //Synchronizing
- while (Buffer_Offset+4<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01
- || Buffer[Buffer_Offset+3]< 0xB9))
- {
- Buffer_Offset+=2;
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Buffer_Offset+=2;
- if (Buffer_Offset>=Buffer_Size || Buffer[Buffer_Offset-1]==0x00)
- Buffer_Offset--;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+4==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01
- || Buffer[Buffer_Offset+3]< 0xB9))
- Buffer_Offset++;
- if (Buffer_Offset+3==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01))
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00))
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && Buffer[Buffer_Offset ]!=0x00)
- Buffer_Offset++;
-
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_MpegPs::Synched_Test()
-{
- //Trailing 0xFF
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]==0xFF)
- Buffer_Offset++;
-
- //Trailing 0x00
- while(Buffer_Offset+3<=Buffer_Size
- && Buffer[Buffer_Offset+2]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset ]==0x00)
- Buffer_Offset++;
-
- //Must have enough buffer for having header
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01)
- Synched=false;
-
- //Quick search
- if (Synched && !Header_Parser_QuickSearch())
- return false;
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Synched_Init()
-{
- //private_stream_1 specific
- private_stream_1_ID=0x00;
- private_stream_1_Offset=0;
- private_stream_1_IsDvdVideo=false;
-
- //Count
- video_stream_Count=(int8u)-1;
- audio_stream_Count=(int8u)-1;
- private_stream_1_Count=(int8u)-1;
- private_stream_2_Count=(int8u)-1;
- extension_stream_Count=(int8u)-1;
- SL_packetized_stream_Count=(int8u)-1;
-
- //From packets
- program_mux_rate=0;
-
- //Default values
- Streams.resize(0x100);
- Streams_Private1.resize(0x100);
- Streams_Extension.resize(0x100);
- Streams[0xBA].Searching_Payload=true;
-
- //Temp
- stream_id_extension=0x55; //Default is set to VC-1, should never happens, but happens sometimes
- FirstPacketOrder_Last=0;
-
- //Case of extraction from MPEG-TS files
- if (File_Offset==0 && Buffer_Size>=4 && ((CC4(Buffer)&0xFFFFFFF0)==0x000001E0 || (CC4(Buffer)&0xFFFFFFE0)==0x000001C0 || CC4(Buffer)==0x000001BD || CC4(Buffer)==0x000001FA || CC4(Buffer)==0x000001FD || CC4(Buffer)==0x000001FE))
- {
- FromTS=true; //We want to anlyze this kind of file
- MPEG_Version=2; //By default, MPEG-TS is version 2
- Streams[Buffer[3]].Searching_Payload=true; //Activating the Streams
- }
-
- //TS specific
- if (FromTS)
- {
- Streams[0xBD].Searching_Payload=true; //private_stream_1
- Streams[0xBD].Searching_TimeStamp_Start=true; //private_stream_1
- Streams[0xBD].Searching_TimeStamp_End=true; //private_stream_1
- Streams[0xBF].Searching_Payload=true; //private_stream_2
- Streams[0xBF].Searching_TimeStamp_Start=true; //private_stream_2
- Streams[0xBF].Searching_TimeStamp_End=true; //private_stream_2
- for (int8u Pos=0xC0; Pos<=0xEF; Pos++)
- {
- Streams[Pos].Searching_Payload=true; //audio_stream or video_stream
- Streams[Pos].Searching_TimeStamp_Start=true; //audio_stream or video_stream
- Streams[Pos].Searching_TimeStamp_End=true; //audio_stream or video_stream
- }
- Streams[0xFA].Searching_Payload=true; //LATM
- Streams[0xFA].Searching_TimeStamp_Start=true; //LATM
- Streams[0xFA].Searching_TimeStamp_End=true; //LATM
- Streams[0xFD].Searching_Payload=true; //extension_stream
- Streams[0xFD].Searching_TimeStamp_Start=true; //extension_stream
- Streams[0xFD].Searching_TimeStamp_End=true; //extension_stream
- Streams[0xFE].Searching_Payload=true; //extension_stream?
- Streams[0xFE].Searching_TimeStamp_Start=true; //extension_stream?
- Streams[0xFE].Searching_TimeStamp_End=true; //extension_stream?
- }
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Read_Buffer_Init()
-{
- #if MEDIAINFO_DEMUX
- // Demux_UnpacketizeContainer=Config->Demux_Unpacketize_Get();
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED2
-void File_MpegPs::Read_Buffer_SegmentChange()
-{
- if (!Streams.empty())
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- {
- for (size_t Pos=0; Pos<Streams[StreamID].Parsers.size(); Pos++)
- if (Streams[StreamID].Parsers[Pos])
- Streams[StreamID].Parsers[Pos]->Open_Buffer_SegmentChange();
- for (size_t Pos=0; Pos<Streams_Private1[StreamID].Parsers.size(); Pos++)
- if (Streams_Private1[StreamID].Parsers[Pos])
- Streams_Private1[StreamID].Parsers[Pos]->Open_Buffer_SegmentChange();
- for (size_t Pos=0; Pos<Streams_Extension[StreamID].Parsers.size(); Pos++)
- if (Streams_Extension[StreamID].Parsers[Pos])
- Streams_Extension[StreamID].Parsers[Pos]->Open_Buffer_SegmentChange();
- }
-}
-#endif //MEDIAINFO_ADVANCED2
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Read_Buffer_Unsynched()
-{
- Searching_TimeStamp_Start=false;
-
- if (Streams.empty())
- return;
-
- //No need anymore of this Streams
- Streams[0xBB].Searching_Payload=false; //system_start
-
- //Reactivating interessant PS streams
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- {
- //End timestamp is out of date
- Streams[StreamID].TimeStamp_End.PTS.File_Pos=(int64u)-1;
- Streams[StreamID].TimeStamp_End.DTS.File_Pos=(int64u)-1;
- Streams[StreamID].TimeStamp_End.PTS.TimeStamp=(int64u)-1;
- Streams[StreamID].TimeStamp_End.DTS.TimeStamp=(int64u)-1;
- Streams[StreamID].Searching_TimeStamp_Start=false;
- for (size_t Pos=0; Pos<Streams[StreamID].Parsers.size(); Pos++)
- if (Streams[StreamID].Parsers[Pos])
- {
- #if MEDIAINFO_SEEK
- if (IsSub)
- Streams[StreamID].Parsers[Pos]->Unsynch_Frame_Count=Frame_Count_NotParsedIncluded;
- #endif //MEDIAINFO_SEEK
- Streams[StreamID].Parsers[Pos]->Open_Buffer_Unsynch();
- }
- Streams_Private1[StreamID].TimeStamp_End.PTS.File_Pos=(int64u)-1;
- Streams_Private1[StreamID].TimeStamp_End.DTS.File_Pos=(int64u)-1;
- Streams_Private1[StreamID].TimeStamp_End.PTS.TimeStamp=(int64u)-1;
- Streams_Private1[StreamID].TimeStamp_End.DTS.TimeStamp=(int64u)-1;
- Streams_Private1[StreamID].Searching_TimeStamp_Start=false;
- for (size_t Pos=0; Pos<Streams_Private1[StreamID].Parsers.size(); Pos++)
- if (Streams_Private1[StreamID].Parsers[Pos])
- {
- #if MEDIAINFO_SEEK
- Streams_Private1[StreamID].Parsers[Pos]->Unsynch_Frame_Count=Unsynch_Frame_Count;
- #endif //MEDIAINFO_SEEK
- Streams_Private1[StreamID].Parsers[Pos]->Open_Buffer_Unsynch();
- }
- Streams_Extension[StreamID].TimeStamp_End.PTS.File_Pos=(int64u)-1;
- Streams_Extension[StreamID].TimeStamp_End.DTS.File_Pos=(int64u)-1;
- Streams_Extension[StreamID].TimeStamp_End.PTS.TimeStamp=(int64u)-1;
- Streams_Extension[StreamID].TimeStamp_End.DTS.TimeStamp=(int64u)-1;
- Streams_Extension[StreamID].Searching_TimeStamp_Start=false;
- for (size_t Pos=0; Pos<Streams_Extension[StreamID].Parsers.size(); Pos++)
- if (Streams_Extension[StreamID].Parsers[Pos])
- {
- #if MEDIAINFO_SEEK
- Streams_Extension[StreamID].Parsers[Pos]->Unsynch_Frame_Count=Unsynch_Frame_Count;
- #endif //MEDIAINFO_SEEK
- Streams_Extension[StreamID].Parsers[Pos]->Open_Buffer_Unsynch();
- }
- }
- #if MEDIAINFO_SEEK
- Unsynch_Frame_Count=(int64u)-1; //We do not use it
- #endif //MEDIAINFO_SEEK
- video_stream_Unlimited=false;
- Buffer_DataSizeToParse=0;
- PES_FirstByte_IsAvailable=false;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_MpegPs::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- //Reset
- Seek_Value=(int64u)-1;
- Seek_ID=(int64u)-1;
-
- //Init
- if (!Duration_Detected)
- {
- //External IBI
- #if MEDIAINFO_IBI
- std::string IbiFile=Config->Ibi_Get();
- if (!IbiFile.empty())
- {
- Ibi.Streams.clear(); //TODO: support IBI data from different inputs
-
- File_Ibi MI;
- Open_Buffer_Init(&MI, IbiFile.size());
- MI.Ibi=&Ibi;
- MI.Open_Buffer_Continue((const int8u*)IbiFile.c_str(), IbiFile.size());
- }
- //Creating base IBI from a quick analysis of the file
- else
- {
- MediaInfo_Internal MI;
- MI.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- size_t MiOpenResult=MI.Open(File_Name);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (!MiOpenResult)
- return 0;
- for (ibi::streams::iterator IbiStream_Temp=((File_MpegPs*)MI.Info)->Ibi.Streams.begin(); IbiStream_Temp!=((File_MpegPs*)MI.Info)->Ibi.Streams.end(); ++IbiStream_Temp)
- {
- if (Ibi.Streams[IbiStream_Temp->first]==NULL)
- Ibi.Streams[IbiStream_Temp->first]=new ibi::stream(*IbiStream_Temp->second);
- Ibi.Streams[IbiStream_Temp->first]->Unsynch();
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- {
- Ibi.Streams[IbiStream_Temp->first]->Add(IbiStream_Temp->second->Infos[Pos]);
- if (!IbiStream_Temp->second->Infos[Pos].IsContinuous)
- Ibi.Streams[IbiStream_Temp->first]->Unsynch();
- }
- Ibi.Streams[IbiStream_Temp->first]->Unsynch();
- }
- if (Ibi.Streams.empty())
- return 4; //Problem during IBI file parsing
- }
- #endif //#if MEDIAINFO_IBI
-
- Duration_Detected=true;
- }
-
- //Parsing
- switch (Method)
- {
- case 0 :
- GoTo(Value);
- Open_Buffer_Unsynch();
- return 1;
- case 1 :
- GoTo(File_Size*Value/10000);
- Open_Buffer_Unsynch();
- return 1;
- case 2 : //Timestamp
- #if MEDIAINFO_IBI
- {
- ibi::streams::iterator IbiStream_Temp;
- if (ID==(int64u)-1)
- IbiStream_Temp=Ibi.Streams.begin();
- else
- IbiStream_Temp=Ibi.Streams.find(ID);
- if (IbiStream_Temp==Ibi.Streams.end() || IbiStream_Temp->second->Infos.empty())
- return 5; //Invalid ID
-
- if (!(IbiStream_Temp->second->DtsFrequencyNumerator==1000000000 && IbiStream_Temp->second->DtsFrequencyDenominator==1))
- {
- float64 ValueF=(float64)Value;
- ValueF/=1000000000; //Value is in ns
- ValueF/=IbiStream_Temp->second->DtsFrequencyDenominator;
- ValueF*=IbiStream_Temp->second->DtsFrequencyNumerator;
- Value=float64_int64s(ValueF);
- }
-
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- {
- if (Value<=IbiStream_Temp->second->Infos[Pos].Dts)
- {
- if (Value<IbiStream_Temp->second->Infos[Pos].Dts && Pos)
- Pos--;
-
- //Checking continuity of Ibi
- if (!IbiStream_Temp->second->Infos[Pos].IsContinuous && Pos+1<IbiStream_Temp->second->Infos.size())
- {
- Config->Demux_IsSeeking=true;
- Seek_Value=Value;
- Seek_Value_Maximal=IbiStream_Temp->second->Infos[Pos+1].StreamOffset;
- Seek_ID=IbiStream_Temp->first;
- GoTo((IbiStream_Temp->second->Infos[Pos].StreamOffset+IbiStream_Temp->second->Infos[Pos+1].StreamOffset)/2);
- Open_Buffer_Unsynch();
-
- return 1;
- }
-
- Config->Demux_IsSeeking=false;
- if (!Streams[(size_t)IbiStream_Temp->first].Parsers.empty())
- for (size_t Parser_Pos=0; Parser_Pos<Streams[(size_t)IbiStream_Temp->first].Parsers.size(); Parser_Pos++)
- Streams[(size_t)IbiStream_Temp->first].Parsers[Parser_Pos]->Unsynch_Frame_Count=IbiStream_Temp->second->Infos[Pos].FrameNumber;
- else
- Unsynch_Frame_Counts[(int16u)IbiStream_Temp->first]=IbiStream_Temp->second->Infos[Pos].FrameNumber;
-
- GoTo(IbiStream_Temp->second->Infos[Pos].StreamOffset);
- Open_Buffer_Unsynch();
-
- return 1;
- }
- }
-
- return 2; //Invalid value
- }
- #else //MEDIAINFO_IBI
- return (size_t)-2; //Not supported / IBI disabled
- #endif //MEDIAINFO_IBI
- case 3 : //FrameNumber
- #if MEDIAINFO_IBI
- {
- ibi::streams::iterator IbiStream_Temp;
- if (ID==(int64u)-1)
- IbiStream_Temp=Ibi.Streams.begin();
- else
- IbiStream_Temp=Ibi.Streams.find(ID);
- if (IbiStream_Temp==Ibi.Streams.end() || IbiStream_Temp->second->Infos.empty())
- return 5; //Invalid ID
-
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- {
- if (Value<=IbiStream_Temp->second->Infos[Pos].FrameNumber)
- {
- if (Value<IbiStream_Temp->second->Infos[Pos].FrameNumber && Pos)
- Pos--;
-
- if (!Streams[(size_t)IbiStream_Temp->first].Parsers.empty())
- for (size_t Parser_Pos=0; Parser_Pos<Streams[(size_t)IbiStream_Temp->first].Parsers.size(); Parser_Pos++)
- Streams[(size_t)IbiStream_Temp->first].Parsers[Parser_Pos]->Unsynch_Frame_Count=IbiStream_Temp->second->Infos[Pos].FrameNumber;
- else
- Unsynch_Frame_Counts[(int16u)IbiStream_Temp->first]=IbiStream_Temp->second->Infos[Pos].FrameNumber;
-
- GoTo(IbiStream_Temp->second->Infos[Pos].StreamOffset);
- Open_Buffer_Unsynch();
-
- return 1;
- }
- }
-
- return 2; //Invalid value
- }
- #else //MEDIAINFO_IBI
- return (size_t)-2; //Not supported / IBI disabled
- #endif //MEDIAINFO_IBI
- default : return (size_t)-1; //Not supported
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Read_Buffer_Continue()
-{
- #if MEDIAINFO_DEMUX
- if (Demux_StreamIsBeingParsed_type!=(int8u)-1)
- {
- switch (Demux_StreamIsBeingParsed_type) //TODO: transform the switch() case to a enum with a vector of streams
- {
- case 0 : Open_Buffer_Continue(Streams[Demux_StreamIsBeingParsed_stream_id].Parsers[0], Buffer, 0, false);
- if (IsSub && Streams[Demux_StreamIsBeingParsed_stream_id].Parsers[0]->Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded=Streams[Demux_StreamIsBeingParsed_stream_id].Parsers[0]->Frame_Count_NotParsedIncluded;
- break;
- case 1 : Open_Buffer_Continue(Streams_Private1[Demux_StreamIsBeingParsed_stream_id].Parsers[0], Buffer, 0, false);
- if (IsSub && Streams_Private1[Demux_StreamIsBeingParsed_stream_id].Parsers[0]->Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded=Streams_Private1[Demux_StreamIsBeingParsed_stream_id].Parsers[0]->Frame_Count_NotParsedIncluded;
- break;
- case 2 : Open_Buffer_Continue(Streams_Extension[Demux_StreamIsBeingParsed_stream_id].Parsers[0], Buffer, 0, false);
- if (IsSub && Streams_Extension[Demux_StreamIsBeingParsed_stream_id].Parsers[0]->Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded=Streams_Extension[Demux_StreamIsBeingParsed_stream_id].Parsers[0]->Frame_Count_NotParsedIncluded;
- break;
- default: ;
- }
- if (Config->Demux_EventWasSent)
- return;
- Demux_StreamIsBeingParsed_type=(int8u)-1;
- }
- #endif //MEDIAINFO_DEMUX
-
- if (!IsSub)
- {
- if (Config->ParseSpeed>=1.0)
- Config->State_Set(((float)Buffer_TotalBytes)/File_Size);
- else if (Buffer_TotalBytes>2*SizeToAnalyze)
- Config->State_Set((float)0.99); //Nearly the end
- else
- Config->State_Set(((float)Buffer_TotalBytes)/(2*SizeToAnalyze));
- }
-
- if (Buffer_DataSizeToParse)
- {
- #if MEDIAINFO_EVENTS
- if (FromTS)
- {
- PES_FirstByte_IsAvailable=true;
- PES_FirstByte_Value=false;
- }
- #endif //MEDIAINFO_EVENTS
-
- if (Buffer_Size<=Buffer_DataSizeToParse)
- {
- Element_Size=Buffer_Size; //All the buffer is used
- Buffer_DataSizeToParse-=(int16u)Buffer_Size;
- }
- else
- {
- Element_Size=Buffer_DataSizeToParse;
- Buffer_DataSizeToParse=0;
- }
-
- Element_Begin0();
- Data_Parse();
- Element_Offset=Element_Size;
- Element_End0();
- }
-
- //Video unlimited specific, we didn't wait for the end (because this is... unlimited)
- if (video_stream_Unlimited)
- {
- PES_FirstByte_IsAvailable=true;
- PES_FirstByte_Value=false;
-
- //Look for next Sync word
- size_t Buffer_Offset_Temp=0;
- while (Buffer_Offset_Temp+4<=Buffer_Size
- && (Buffer[Buffer_Offset_Temp ]!=0x00
- || Buffer[Buffer_Offset_Temp+1]!=0x00
- || Buffer[Buffer_Offset_Temp+2]!=0x01
- || Buffer[Buffer_Offset_Temp+3]< 0xB9))
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer_Offset_Temp>=Buffer_Size || Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset_Temp+4==Buffer_Size && (Buffer[Buffer_Offset_Temp ]!=0x00
- || Buffer[Buffer_Offset_Temp+1]!=0x00
- || Buffer[Buffer_Offset_Temp+2]!=0x01))
- Buffer_Offset_Temp++;
- if (Buffer_Offset_Temp+3==Buffer_Size && (Buffer[Buffer_Offset_Temp ]!=0x00
- || Buffer[Buffer_Offset_Temp+1]!=0x00
- || Buffer[Buffer_Offset_Temp+2]!=0x01))
- Buffer_Offset_Temp++;
- if (Buffer_Offset_Temp+2==Buffer_Size && (Buffer[Buffer_Offset_Temp ]!=0x00
- || Buffer[Buffer_Offset_Temp+1]!=0x00))
- Buffer_Offset_Temp++;
- if (Buffer_Offset_Temp+1==Buffer_Size && Buffer[Buffer_Offset_Temp ]!=0x00)
- Buffer_Offset_Temp++;
-
- if (Buffer_Offset_Temp==Buffer_Size)
- {
- Element_Size=Buffer_Size; //All the buffer is used
- }
- else
- {
- Element_Size=Buffer_Offset_Temp;
- if (Buffer_Offset_Temp+4<=Buffer_Size)
- video_stream_Unlimited=false;
- else
- Element_IsWaitingForMoreData(); //We don't know if the next bytes are a stream_id or data
- }
-
- if (Element_Size)
- {
- Element_Begin0();
- Data_Parse();
- Element_Offset=Element_Size;
- Element_End0();
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Read_Buffer_AfterParsing()
-{
- if (!Status[IsFilled])
- {
- //In case of problem with some streams
- if (Buffer_TotalBytes>Buffer_TotalBytes_FirstSynched+SizeToAnalyze)
- {
- if (!Status[IsAccepted])
- {
- Reject("MPEG-PS");
- return;
- }
-
- video_stream_Count=0;
- audio_stream_Count=0;
- private_stream_1_Count=0;
- private_stream_2_Count=false;
- extension_stream_Count=0;
- SL_packetized_stream_Count=false;
- }
-
- //Jumping only if needed
- if (Streams.empty() || video_stream_Count || audio_stream_Count || private_stream_1_Count || private_stream_2_Count || extension_stream_Count || SL_packetized_stream_Count)
- return;
-
- //Jumping if needed
- if (!Status[IsAccepted])
- {
- Accept("MPEG-PS");
- if (!IsSub)
- Fill(Stream_General, 0, General_Format, "MPEG-PS");
- }
- Fill("MPEG-PS");
- if (!ShouldContinueParsing && File_Offset+Buffer_Size+SizeToAnalyze<File_Size && Config->ParseSpeed<1.0)
- {
- //Jumping
- GoToFromEnd(SizeToAnalyze, "MPEG-PS");
- Open_Buffer_Unsynch();
- }
- }
-}
-
-//***************************************************************************
-// Buffer - Par element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Header_Parse()
-{
- PES_FirstByte_IsAvailable=true;
- PES_FirstByte_Value=true;
-
- //Reinit
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- {
- FrameInfo.PTS=(int64u)-1;
- FrameInfo.DTS=(int64u)-1;
- }
-
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- //Parsing
- Skip_B3( "synchro");
- Get_B1 (stream_id, "stream_id");
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- //Parsing
- stream_id=Buffer[Buffer_Offset+3];
- Element_Offset+=4;
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
-
- if (stream_id!=0xB9 && stream_id!=0xBA) //MPEG_program_end or pack_start have no PES
- {
- if (!Header_Parse_PES_packet(stream_id))
- {
- Element_WaitForMoreData();
- return;
- }
- }
- else if (!Header_Parse_Fill_Size()) //MPEG_program_end or pack_start specific
- {
- Element_WaitForMoreData();
- return;
- }
- Header_Fill_Code(stream_id);
-}
-
-//---------------------------------------------------------------------------
-bool File_MpegPs::Header_Parse_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset+4;
- while (Buffer_Offset_Temp+4<=Buffer_Size
- && (Buffer[Buffer_Offset_Temp ]!=0x00
- || Buffer[Buffer_Offset_Temp+1]!=0x00
- || Buffer[Buffer_Offset_Temp+2]!=0x01
- || Buffer[Buffer_Offset_Temp+3]< 0xB9))
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer_Offset_Temp>=Buffer_Size || Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset_Temp+4==Buffer_Size && (Buffer[Buffer_Offset_Temp ]!=0x00
- || Buffer[Buffer_Offset_Temp+1]!=0x00
- || Buffer[Buffer_Offset_Temp+2]!=0x01))
- Buffer_Offset_Temp++;
- if (Buffer_Offset_Temp+3==Buffer_Size && (Buffer[Buffer_Offset_Temp ]!=0x00
- || Buffer[Buffer_Offset_Temp+1]!=0x00
- || Buffer[Buffer_Offset_Temp+2]!=0x01))
- Buffer_Offset_Temp++;
- if (Buffer_Offset_Temp+2==Buffer_Size && (Buffer[Buffer_Offset_Temp ]!=0x00
- || Buffer[Buffer_Offset_Temp+1]!=0x00))
- Buffer_Offset_Temp++;
- if (Buffer_Offset_Temp+1==Buffer_Size && Buffer[Buffer_Offset_Temp ]!=0x00)
- Buffer_Offset_Temp++;
-
- if (Buffer_Offset_Temp+4>Buffer_Size)
- {
- if (File_Offset+Buffer_Size>=File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_MpegPs::Header_Parse_PES_packet(int8u stream_id)
-{
- //Parsing
- int16u PES_packet_length;
- Get_B2 (PES_packet_length, "PES_packet_length");
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer && Buffer_Offset+6+PES_packet_length>Buffer_Size)
- return false;
- #endif //MEDIAINFO_DEMUX
- if (PES_packet_length && File_Offset+Buffer_Offset+6+PES_packet_length>=File_Size)
- PES_packet_length=(int16u)(File_Size-(File_Offset+Buffer_Offset+6));
-
- //Parsing
- switch (stream_id)
- {
- //Header is only Size
- case 0xBB : //system_header_start
- case 0xBC : //program_stream_map
- case 0xBE : //padding_stream
- case 0xBF : //private_stream_2
- case 0xF0 : //ECM
- case 0xF1 : //EMM
- case 0xF2 : //DSMCC Streams
- case 0xF8 : //ITU-T Rec. H .222.1 type E
- case 0xFF : //Program Streams directory
- break;
-
- //Element with PES Header
- default :
- switch (MPEG_Version)
- {
- case 1 : Header_Parse_PES_packet_MPEG1(stream_id); break;
- case 2 : Header_Parse_PES_packet_MPEG2(stream_id); break;
- default : ; //We don't know what to parse...
- }
- }
-
- //Video unlimited specific
- if (PES_packet_length==0)
- {
- if (!Header_Parse_Fill_Size())
- {
- //Return directly if we must unpack the elementary stream;
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer)
- return false;
- #endif //MEDIAINFO_DEMUX
-
- //Next PS packet is not found, we will use all the buffer
- Header_Fill_Size(Buffer_Size-Buffer_Offset); //All the buffer is used
- video_stream_Unlimited=true;
- Buffer_Offset_Temp=0; //We use the buffer
- }
- }
- else
- //Filling
- Header_Fill_Size(6+PES_packet_length);
-
- //Can be cut in small chunks
- if (Element_IsWaitingForMoreData())
- return false;
- if (PES_packet_length!=0 && Element_Offset<Element_Size && (size_t)(6+PES_packet_length)>Buffer_Size-Buffer_Offset
- && ((stream_id&0xE0)==0xC0 || (stream_id&0xF0)==0xE0))
- {
- //Return directly if we must unpack the elementary stream;
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer)
- return false;
- #endif //MEDIAINFO_DEMUX
-
- Header_Fill_Size(Buffer_Size-Buffer_Offset); //All the buffer is used
- Buffer_DataSizeToParse=6+PES_packet_length-(int16u)(Buffer_Size-Buffer_Offset);
- Buffer_Offset_Temp=0; //We use the buffer
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-// Packet header data - MPEG-1
-void File_MpegPs::Header_Parse_PES_packet_MPEG1(int8u stream_id)
-{
- int8u stuffing_byte;
- do
- {
- Peek_B1(stuffing_byte);
- if (stuffing_byte==0xFF)
- Skip_B1( "stuffing_byte");
- }
- while(stuffing_byte==0xFF);
-
- if ((stuffing_byte&0xC0)==0x40)
- {
- BS_Begin();
- Mark_0();
- Mark_1();
- Skip_SB( "STD_buffer_scale");
- Skip_S2(13, "STD_buffer_size");
- BS_End();
- Peek_B1(stuffing_byte);
- }
- if ((stuffing_byte&0xF0)==0x20)
- {
- int16u PTS_29, PTS_14;
- int8u PTS_32;
- Element_Begin1("PTS");
- BS_Begin();
- Mark_0();
- Mark_0();
- Mark_1();
- Mark_0();
- Get_S1 ( 3, PTS_32, "PTS_32");
- Mark_1_NoTrustError(); //Found 0 in one file
- Get_S2 (15, PTS_29, "PTS_29");
- Mark_1();
- Get_S2 (15, PTS_14, "PTS_14");
- Mark_1();
- BS_End();
-
- //Filling
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.PTS=(((int64u)PTS_32)<<30)
- | (((int64u)PTS_29)<<15)
- | (((int64u)PTS_14));
- if (Streams[stream_id].Searching_TimeStamp_End && stream_id!=0xBD && stream_id!=0xFD) //0xBD and 0xFD can contain multiple streams, TimeStamp management is in Streams management
- {
- if (Streams[stream_id].TimeStamp_End.PTS.TimeStamp==(int64u)-1)
- Streams[stream_id].TimeStamp_End.PTS.TimeStamp=FrameInfo.PTS;
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- while (FrameInfo.PTS+0x100000000LL<Streams[stream_id].TimeStamp_End.PTS.TimeStamp)
- FrameInfo.PTS+=0x200000000LL;
- Streams[stream_id].TimeStamp_End.DTS.File_Pos=Streams[stream_id].TimeStamp_End.PTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_End.DTS.TimeStamp=Streams[stream_id].TimeStamp_End.PTS.TimeStamp=FrameInfo.PTS;
- }
- if (Searching_TimeStamp_Start && Streams[stream_id].Searching_TimeStamp_Start && stream_id!=0xBD && stream_id!=0xFD) //0xBD and 0xFD can contain multiple streams, TimeStamp management is in Streams management
- {
- Streams[stream_id].TimeStamp_Start.DTS.File_Pos=Streams[stream_id].TimeStamp_Start.PTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_Start.DTS.TimeStamp=Streams[stream_id].TimeStamp_Start.PTS.TimeStamp=FrameInfo.PTS;
- Streams[stream_id].Searching_TimeStamp_Start=false;
- }
- Element_Info_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/90));
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.DTS=FrameInfo.PTS=FrameInfo.PTS*1000000/90; //In ns
- HasTimeStamps=true;
- Element_End0();
- }
- else if ((stuffing_byte&0xF0)==0x30)
- {
- int16u PTS_29, PTS_14, DTS_29, DTS_14;
- int8u PTS_32, DTS_32;
- Element_Begin1("PTS");
- BS_Begin();
- Mark_0();
- Mark_0();
- Mark_1();
- Mark_1();
- Get_S1 ( 3, PTS_32, "PTS_32");
- Mark_1_NoTrustError(); //Found 0 in one file
- Get_S2 (15, PTS_29, "PTS_29");
- Mark_1();
- Get_S2 (15, PTS_14, "PTS_14");
- Mark_1();
- BS_End();
-
- //Filling
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.PTS=(((int64u)PTS_32)<<30)
- | (((int64u)PTS_29)<<15)
- | (((int64u)PTS_14));
- if (Streams[stream_id].Searching_TimeStamp_End)
- {
- if (Streams[stream_id].TimeStamp_End.PTS.TimeStamp==(int64u)-1)
- Streams[stream_id].TimeStamp_End.PTS.TimeStamp=FrameInfo.PTS;
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- while (FrameInfo.PTS+0x100000000LL<Streams[stream_id].TimeStamp_End.PTS.TimeStamp)
- FrameInfo.PTS+=0x200000000LL;
- Streams[stream_id].TimeStamp_End.PTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_End.PTS.TimeStamp=FrameInfo.PTS;
- }
- if (Searching_TimeStamp_Start && Streams[stream_id].Searching_TimeStamp_Start)
- {
- Streams[stream_id].TimeStamp_Start.PTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_Start.PTS.TimeStamp=FrameInfo.PTS;
- }
- Element_Info_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/90));
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.PTS=FrameInfo.PTS*1000000/90; //In ns
- Element_End0();
-
- Element_Begin1("DTS");
- BS_Begin();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_1_NoTrustError(); //Is "0" in one sample
- Get_S1 ( 3, DTS_32, "DTS_32");
- Mark_1();
- Get_S2 (15, DTS_29, "DTS_29");
- Mark_1();
- Get_S2 (15, DTS_14, "DTS_14");
- Mark_1();
- BS_End();
-
- //Filling
- FrameInfo.DTS=(((int64u)DTS_32)<<30)
- | (((int64u)DTS_29)<<15)
- | (((int64u)DTS_14));
- if (Streams[stream_id].Searching_TimeStamp_End)
- {
- if (Streams[stream_id].TimeStamp_End.DTS.TimeStamp==(int64u)-1)
- Streams[stream_id].TimeStamp_End.DTS.TimeStamp=FrameInfo.DTS;
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- while (FrameInfo.DTS+0x100000000LL<Streams[stream_id].TimeStamp_End.DTS.TimeStamp)
- FrameInfo.DTS+=0x200000000LL;
- Streams[stream_id].TimeStamp_End.DTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_End.DTS.TimeStamp=FrameInfo.DTS;
- }
- if (Searching_TimeStamp_Start && Streams[stream_id].Searching_TimeStamp_Start)
- {
- Streams[stream_id].TimeStamp_Start.DTS.TimeStamp=FrameInfo.DTS;
- Streams[stream_id].Searching_TimeStamp_Start=false;
- }
- Element_Info_From_Milliseconds(float64_int64s(((float64)FrameInfo.DTS)/90));
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.DTS=FrameInfo.DTS*1000000/90; //In ns
- Element_End0();
- }
- else
- {
- BS_Begin();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- BS_End();
-
- if (!FromTS)
- PES_FirstByte_Value=false;
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet header data - MPEG-2
-void File_MpegPs::Header_Parse_PES_packet_MPEG2(int8u stream_id)
-{
- //Parsing
- int8u PTS_DTS_flags, PES_header_data_length;
- bool ESCR_flag, ES_rate_flag, DSM_trick_mode_flag, additional_copy_info_flag, PES_CRC_flag, PES_extension_flag;
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- BS_Begin();
- Mark_1_NoTrustError();
- Mark_0_NoTrustError();
- Skip_S1(2, "PES_scrambling_control");
- Skip_SB( "PES_priority");
- Skip_SB( "data_alignment_indicator");
- Skip_SB( "copyright");
- Skip_SB( "original_or_copy");
- Get_S1 (2, PTS_DTS_flags, "PTS_DTS_flags");
- Get_SB (ESCR_flag, "ESCR_flag");
- Get_SB (ES_rate_flag, "ES_rate_flag");
- Get_SB (DSM_trick_mode_flag, "DSM_trick_mode_flag");
- Get_SB (additional_copy_info_flag, "additional_copy_info_flag");
- Get_SB (PES_CRC_flag, "PES_CRC_flag");
- Get_SB (PES_extension_flag, "PES_extension_flag");
- BS_End();
- Get_B1 (PES_header_data_length, "PES_header_data_length");
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- if (Element_Offset+3>=Element_Size)
- {
- Trusted_IsNot("");
- return;
- }
- size_t Buffer_Pos_Flags=Buffer_Offset+(size_t)Element_Offset;
- if ((Buffer[Buffer_Pos_Flags]&0xC0)!=0x80) //bit 6 and 7 are 01
- {
- Element_DoNotTrust(""); //Mark bits are wrong
- return;
- }
- Buffer_Pos_Flags++;
- PTS_DTS_flags =Buffer[Buffer_Pos_Flags]>>6;
- ESCR_flag =Buffer[Buffer_Pos_Flags]&0x20?true:false;
- ES_rate_flag =Buffer[Buffer_Pos_Flags]&0x10?true:false;
- DSM_trick_mode_flag =Buffer[Buffer_Pos_Flags]&0x08?true:false;
- additional_copy_info_flag =Buffer[Buffer_Pos_Flags]&0x04?true:false;
- PES_CRC_flag =Buffer[Buffer_Pos_Flags]&0x02?true:false;
- PES_extension_flag =Buffer[Buffer_Pos_Flags]&0x01?true:false;
- Buffer_Pos_Flags++;
- PES_header_data_length =Buffer[Buffer_Pos_Flags];
- Element_Offset+=3;
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
- int64u Element_Pos_After_Data=Element_Offset+PES_header_data_length;
- if (Element_Pos_After_Data>Element_Size)
- {
- Element_WaitForMoreData();
- return;
- }
-
- //Options
- if (PTS_DTS_flags==0x2)
- {
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- int16u PTS_29, PTS_14;
- int8u PTS_32;
- Element_Begin1("PTS_DTS_flags");
- Element_Begin1("PTS");
- BS_Begin();
- Mark_0();
- Mark_0();
- Mark_1_NoTrustError(); //Is "0" in one sample
- Mark_0_NoTrustError(); //Is "1" in one sample
- Get_S1 ( 3, PTS_32, "PTS_32");
- Mark_1();
- Get_S2 (15, PTS_29, "PTS_29");
- Mark_1();
- Get_S2 (15, PTS_14, "PTS_14");
- Mark_1();
- BS_End();
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.PTS=(((int64u)PTS_32)<<30)
- | (((int64u)PTS_29)<<15)
- | (((int64u)PTS_14));
- Element_Info_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/90));
- Element_End0();
- Element_End0();
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- if (Element_Offset+5>Element_Size)
- {
- Element_WaitForMoreData();
- return;
- }
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
- if ((Buffer[Buffer_Pos ]&0xC1)!=0x01 //bit 5 and 4 are not tested because of one sample with wrong mark bits
- || (Buffer[Buffer_Pos+2]&0x01)!=0x01
- || (Buffer[Buffer_Pos+4]&0x01)!=0x01)
- {
- Element_DoNotTrust(""); //Mark bits are wrong
- return;
- }
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.PTS= ((((int64u)Buffer[Buffer_Pos ]&0x0E))<<29)
- | ( ((int64u)Buffer[Buffer_Pos+1] )<<22)|((((int64u)Buffer[Buffer_Pos+2]&0xFE))<<14)
- | ( ((int64u)Buffer[Buffer_Pos+3] )<< 7)|((((int64u)Buffer[Buffer_Pos+4]&0xFE))>> 1);
- Element_Offset+=5;
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
-
- //Filling
- if (Streams[stream_id].Searching_TimeStamp_End)
- {
- if (Streams[stream_id].TimeStamp_End.PTS.TimeStamp==(int64u)-1)
- Streams[stream_id].TimeStamp_End.PTS.TimeStamp=FrameInfo.PTS;
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- while (FrameInfo.PTS+0x100000000LL<Streams[stream_id].TimeStamp_End.PTS.TimeStamp)
- FrameInfo.PTS+=0x200000000LL;
- Streams[stream_id].TimeStamp_End.DTS.File_Pos=Streams[stream_id].TimeStamp_End.PTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_End.DTS.TimeStamp=Streams[stream_id].TimeStamp_End.PTS.TimeStamp=FrameInfo.PTS;
- }
- if (Searching_TimeStamp_Start && Streams[stream_id].Searching_TimeStamp_Start)
- {
- Streams[stream_id].TimeStamp_Start.DTS.File_Pos=Streams[stream_id].TimeStamp_Start.PTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_Start.DTS.TimeStamp=Streams[stream_id].TimeStamp_Start.PTS.TimeStamp=FrameInfo.PTS;
- Streams[stream_id].Searching_TimeStamp_Start=false;
- }
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.DTS=FrameInfo.PTS=FrameInfo.PTS*1000000/90; //In ns
- HasTimeStamps=true;
- }
- else if (PTS_DTS_flags==0x3)
- {
- size_t Buffer_Pos;
- #if MEDIAINFO_TRACE
- int16u PTS_29, PTS_14, DTS_29, DTS_14;
- int8u PTS_32, DTS_32;
- if (Trace_Activated)
- {
- Element_Begin1("PTS_DTS_flags");
- Element_Begin1("PTS");
- BS_Begin();
- Mark_0();
- Mark_0();
- Mark_1_NoTrustError(); //Is "0" in one sample
- Mark_0_NoTrustError(); //Is "1" in one sample
- Get_S1 ( 3, PTS_32, "PTS_32");
- Mark_1();
- Get_S2 (15, PTS_29, "PTS_29");
- Mark_1();
- Get_S2 (15, PTS_14, "PTS_14");
- Mark_1();
- BS_End();
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.PTS=(((int64u)PTS_32)<<30)
- | (((int64u)PTS_29)<<15)
- | (((int64u)PTS_14));
- Element_Info_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/90));
- Element_End0();
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- if (Element_Offset+5>Element_Size)
- {
- Element_WaitForMoreData();
- return;
- }
- Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
- if ((Buffer[Buffer_Pos ]&0xC1)!=0x01 //bit 5 and 4 are not tested because of one sample with wrong mark bits
- || (Buffer[Buffer_Pos+2]&0x01)!=0x01
- || (Buffer[Buffer_Pos+4]&0x01)!=0x01)
- {
- Element_DoNotTrust(""); //Mark bits are wrong
- return;
- }
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.PTS= ((((int64u)Buffer[Buffer_Pos ]&0x0E))<<29)
- | ( ((int64u)Buffer[Buffer_Pos+1] )<<22)|((((int64u)Buffer[Buffer_Pos+2]&0xFE))<<14)
- | ( ((int64u)Buffer[Buffer_Pos+3] )<< 7)|((((int64u)Buffer[Buffer_Pos+4]&0xFE))>> 1);
- Element_Offset+=5;
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
-
- //Filling
- if (Streams[stream_id].Searching_TimeStamp_End)
- {
- if (Streams[stream_id].TimeStamp_End.PTS.TimeStamp==(int64u)-1)
- Streams[stream_id].TimeStamp_End.PTS.TimeStamp=FrameInfo.PTS;
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- while (FrameInfo.PTS+0x100000000LL<Streams[stream_id].TimeStamp_End.PTS.TimeStamp)
- FrameInfo.PTS+=0x200000000LL;
- Streams[stream_id].TimeStamp_End.PTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_End.PTS.TimeStamp=FrameInfo.PTS;
- }
- if (Searching_TimeStamp_Start && Streams[stream_id].Searching_TimeStamp_Start)
- {
- Streams[stream_id].TimeStamp_Start.PTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_Start.PTS.TimeStamp=FrameInfo.PTS;
- //Streams[stream_id].Searching_TimeStamp_Start=false; //Done with DTS
- }
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.PTS=FrameInfo.PTS*1000000/90; //In ns
-
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- Element_Begin1("DTS");
- BS_Begin();
- Mark_0();
- Mark_0();
- Mark_1_NoTrustError(); //Is "0" in one sample
- Mark_0_NoTrustError(); //Is "1" in one sample
- Get_S1 ( 3, DTS_32, "DTS_32");
- Mark_1();
- Get_S2 (15, DTS_29, "DTS_29");
- Mark_1();
- Get_S2 (15, DTS_14, "DTS_14");
- Mark_1();
- BS_End();
- FrameInfo.DTS=(((int64u)DTS_32)<<30)
- | (((int64u)DTS_29)<<15)
- | (((int64u)DTS_14));
- Element_Info_From_Milliseconds(float64_int64s(((float64)FrameInfo.DTS)/90));
- Element_End0();
- Element_End0();
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- if (Element_Offset+5>Element_Size)
- {
- Element_WaitForMoreData();
- return;
- }
- Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
- if ((Buffer[Buffer_Pos ]&0xC1)!=0x01 //bit 5 and 4 are not tested because of one sample with wrong mark bits
- || (Buffer[Buffer_Pos+2]&0x01)!=0x01
- || (Buffer[Buffer_Pos+4]&0x01)!=0x01)
- {
- Element_DoNotTrust(""); //Mark bits are wrong
- return;
- }
- FrameInfo.DTS= ((((int64u)Buffer[Buffer_Pos ]&0x0E))<<29)
- | ( ((int64u)Buffer[Buffer_Pos+1] )<<22)|((((int64u)Buffer[Buffer_Pos+2]&0xFE))<<14)
- | ( ((int64u)Buffer[Buffer_Pos+3] )<< 7)|((((int64u)Buffer[Buffer_Pos+4]&0xFE))>> 1);
- Element_Offset+=5;
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
-
- //Filling
- if (Streams[stream_id].Searching_TimeStamp_End)
- {
- if (Streams[stream_id].TimeStamp_End.DTS.TimeStamp==(int64u)-1)
- Streams[stream_id].TimeStamp_End.DTS.TimeStamp=FrameInfo.DTS;
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- while (FrameInfo.DTS+0x100000000LL<Streams[stream_id].TimeStamp_End.DTS.TimeStamp)
- FrameInfo.DTS+=0x200000000LL;
- Streams[stream_id].TimeStamp_End.DTS.File_Pos=File_Offset+Buffer_Offset;
- Streams[stream_id].TimeStamp_End.DTS.TimeStamp=FrameInfo.DTS;
- }
- if (Searching_TimeStamp_Start && Streams[stream_id].Searching_TimeStamp_Start)
- {
- Streams[stream_id].TimeStamp_Start.DTS.TimeStamp=FrameInfo.DTS;
- Streams[stream_id].Searching_TimeStamp_Start=false;
- }
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (!FromAribStdB24B37)
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- FrameInfo.DTS=FrameInfo.DTS*1000000/90; //In ns
- HasTimeStamps=true;
- }
- else if (!FromTS)
- PES_FirstByte_Value=false;
- if (ESCR_flag && Element_Offset<Element_Pos_After_Data)
- {
- Element_Begin1("ESCR_flag");
- BS_Begin();
- int16u ESCR_29, ESCR_14, ESCR_extension;
- int8u ESCR_32;
- Skip_S1( 2, "reserved");
- Get_S1 ( 3, ESCR_32, "PTS_32");
- Mark_1();
- Get_S2 (15, ESCR_29, "PTS_29");
- Mark_1();
- Get_S2 (15, ESCR_14, "PTS_14");
- Mark_1();
- Get_S2 (15, ESCR_extension, "ESCR_extension");
- Mark_1();
- BS_End();
- Element_End0();
- }
- if (ES_rate_flag && Element_Offset<Element_Pos_After_Data)
- {
- Element_Begin1("ES_rate_flag");
- BS_Begin();
- int32u ES_rate;
- Mark_1();
- Get_S3 (22, ES_rate, "ES_rate");
- Mark_1();
- BS_End();
- Element_End0();
- }
- if (DSM_trick_mode_flag && Element_Offset<Element_Pos_After_Data)
- {
- Element_Begin1("DSM_trick_mode_flag");
- BS_Begin();
- int8u trick_mode_control;
- Get_S1 (3, trick_mode_control, "trick_mode_control"); Param_Info1(MpegPs_trick_mode_control_values[trick_mode_control]);
- switch (trick_mode_control)
- {
- case 0 :{ //fast_forward
- Skip_S1(2, "field_id");
- Skip_SB( "intra_slice_refresh");
- Skip_S1(2, "frequency_truncation");
- }
- break;
- case 1 :{ //slow_motion
- int8u rep_cntrl;
- Get_S1 (5, rep_cntrl, "rep_cntrl");
- }
- break;
- case 2 :{ //freeze_frame
- Skip_S1(2, "field_id");
- Skip_S1(3, "reserved");
- }
- break;
- case 3 :{ //fast_reverse
- Skip_S1(2, "field_id");
- Skip_SB( "intra_slice_refresh");
- Skip_S1(2, "frequency_truncation");
- }
- break;
- case 4 :{ //slow_reverse
- int8u rep_cntrl;
- Get_S1 (5, rep_cntrl, "rep_cntrl");
- }
- break;
- default:{
- Skip_S1(5, "reserved");
- }
- }
- BS_End();
- Element_End0();
- }
- if (additional_copy_info_flag && Element_Offset<Element_Pos_After_Data)
- {
- Element_Begin1("additional_copy_info_flag");
- BS_Begin();
- Mark_1();
- Skip_S1(7, "additional_copy_info");
- BS_End();
- Element_End0();
- }
- if (PES_CRC_flag && Element_Offset<Element_Pos_After_Data)
- {
- Element_Begin1("PES_CRC_flag");
- Skip_B2( "previous_PES_packet_CRC");
- Element_End0();
- }
- if (PES_extension_flag && Element_Offset<Element_Pos_After_Data)
- {
- bool PES_private_data_flag=false, pack_header_field_flag=false, program_packet_sequence_counter_flag=false, p_STD_buffer_flag=false, PES_extension_flag_2=false;
- Element_Begin1("PES_extension_flag");
- BS_Begin();
- Get_SB (PES_private_data_flag, "PES_private_data_flag");
- Get_SB (pack_header_field_flag, "pack_header_field_flag");
- Get_SB (program_packet_sequence_counter_flag, "program_packet_sequence_counter_flag");
- Get_SB (p_STD_buffer_flag, "P-STD_buffer_flag");
- Skip_S1(3, "reserved");
- Get_SB (PES_extension_flag_2, "PES_extension_flag_2");
- BS_End();
-
- //Integrity test
- if (Element_Offset+(PES_private_data_flag?16:0)+(pack_header_field_flag?1:0)+(program_packet_sequence_counter_flag?2:0)+(p_STD_buffer_flag?2:0)+(PES_extension_flag_2?2:0)>Element_Pos_After_Data)
- {
- //There is a problem
- PES_private_data_flag=false;
- pack_header_field_flag=false;
- program_packet_sequence_counter_flag=false;
- p_STD_buffer_flag=false;
- PES_extension_flag_2=false;
- }
-
- if (PES_private_data_flag)
- {
- Element_Begin1("PES_private_data");
- int32u Code;
- Peek_B4(Code);
- if (Code==0x43434953) // "CCIS"
- {
- if (Streams_Private1[private_stream_1_ID].Parsers.size()>1)
- {
- //Should not happen, this is only in case the previous packet was without CCIS
- Streams_Private1[private_stream_1_ID].Parsers.clear();
- Streams_Private1[private_stream_1_ID].StreamIsRegistred=false;
- }
- if (!Streams_Private1[private_stream_1_ID].StreamIsRegistred)
- {
- Streams_Private1[private_stream_1_ID].Parsers.push_back(ChooseParser_AribStdB24B37(true));
- Open_Buffer_Init(Streams_Private1[private_stream_1_ID].Parsers[0]);
- Streams_Private1[private_stream_1_ID].StreamIsRegistred=true;
- }
-
- if (Streams_Private1[private_stream_1_ID].Parsers.size()==1)
- {
- File_AribStdB24B37* Parser=(File_AribStdB24B37*)Streams_Private1[private_stream_1_ID].Parsers[0];
- Parser->ParseCcis=true;
- Open_Buffer_Continue(Parser, Buffer+Buffer_Offset+(size_t)Element_Offset, 16);
- }
- else
- Skip_B16( "PES_private_data");
- }
- else
- Skip_B16( "PES_private_data");
- Element_End0();
- }
- if (pack_header_field_flag)
- {
- Element_Begin1("pack_header_field_flag");
- int8u pack_field_length;
- Get_B1 (pack_field_length, "pack_field_length");
- Skip_XX(pack_field_length, "pack_header");
- Element_End0();
- }
- if (program_packet_sequence_counter_flag)
- {
- Element_Begin1("program_packet_sequence_counter_flag");
- int8u program_packet_sequence_counter, original_stuff_length;
- bool MPEG1_MPEG2_identifier;
- BS_Begin();
- Mark_1();
- Get_S1 (7, program_packet_sequence_counter, "program_packet_sequence_counter");
- Mark_1();
- Get_SB ( MPEG1_MPEG2_identifier, "MPEG1_MPEG2_identifier");
- Get_S1 (6, original_stuff_length, "original_stuff_length");
- BS_End();
- Element_End0();
- }
- if (p_STD_buffer_flag)
- {
- Element_Begin1("p_STD_buffer_flag");
- bool P_STD_buffer_scale;
- BS_Begin();
- Mark_0();
- Skip_SB( "Should be 1"); //But I saw a file with "0"
- Get_SB ( P_STD_buffer_scale, "P-STD_buffer_scale");
- Skip_S2(13, "P-STD_buffer_size");
- BS_End();
- Element_End0();
- }
- if (PES_extension_flag_2)
- {
- Element_Begin1("PES_extension_flag_2");
- int8u PES_extension_field_length;
- bool stream_id_extension_flag;
- BS_Begin();
- Mark_1();
- Get_S1 (7, PES_extension_field_length, "PES_extension_field_length");
- Get_SB (stream_id_extension_flag, "stream_id_extension_flag");
- if (stream_id_extension_flag==0) //This should be limited to stream_id_extension_flag==0, but I found a file with stream_id_extension_flag=1 and a real code...
- {
- Get_S1 (7, stream_id_extension, "stream_id_extension"); Param_Info1(MpegPs_stream_id_extension(stream_id_extension));
- }
- BS_End();
- if (PES_extension_field_length-1>0)
- Skip_XX(PES_extension_field_length-1, "reserved");
- Element_End0();
- }
- Element_End0();
- }
- if (Element_Pos_After_Data>Element_Offset)
- Skip_XX(Element_Pos_After_Data-Element_Offset, "stuffing_bytes");
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::Data_Parse()
-{
- //Counting
- Frame_Count++;
-
- //Needed?
- if (!Streams[stream_id].Searching_Payload)
- {
- Skip_XX(Element_Size, "data");
- Element_DoNotShow();
- return;
- }
-
- //From TS
- if (FromTS && !Status[IsAccepted])
- {
- Data_Accept("MPEG-PS");
- if (!IsSub)
- Fill(Stream_General, 0, General_Format, "MPEG-PS");
- }
-
- //Parsing
- switch (stream_id)
- {
- case 0xB9 : MPEG_program_end(); break;
- case 0xBA : pack_start(); break;
- case 0xBB : system_header_start(); break;
- case 0xBC : program_stream_map(); break;
- case 0xBD : private_stream_1(); break;
- case 0xBE : padding_stream(); break;
- case 0xBF : private_stream_2(); break;
- case 0xF0 : Element_Name("ECM_Stream"); Skip_XX(Element_Size, "Data"); break;
- case 0xF1 : Element_Name("EMM_Stream"); Skip_XX(Element_Size, "Data"); break;
- case 0xF2 : Element_Name("DSMCC_stream"); Skip_XX(Element_Size, "Data"); break;
- case 0xF3 : Element_Name("ISO/IEC_13522_stream"); Skip_XX(Element_Size, "Data"); break;
- case 0xF4 : Element_Name("ITU-T Rec. H.222.1 type A"); Skip_XX(Element_Size, "Data"); break;
- case 0xF5 : Element_Name("ITU-T Rec. H.222.1 type B"); Skip_XX(Element_Size, "Data"); break;
- case 0xF6 : Element_Name("ITU-T Rec. H.222.1 type C"); Skip_XX(Element_Size, "Data"); break;
- case 0xF7 : Element_Name("ITU-T Rec. H.222.1 type D"); Skip_XX(Element_Size, "Data"); break;
- case 0xF8 : Element_Name("ITU-T Rec. H.222.1 type E"); Skip_XX(Element_Size, "Data"); break;
- case 0xF9 : Element_Name("ancillary_stream"); Skip_XX(Element_Size, "Data"); break;
- case 0xFA : SL_packetized_stream(); break;
- case 0xFB : Element_Name("FlexMux_stream"); Skip_XX(Element_Size, "Data"); break;
- case 0xFC : Element_Name("descriptive data stream"); Skip_XX(Element_Size, "Data"); break;
- case 0xFD : extension_stream(); break;
- case 0xFE : video_stream(); break;
- case 0xFF : Element_Name("program_stream_directory"); Skip_XX(Element_Size, "Data"); break;
- default:
- if ((stream_id&0xE0)==0xC0) audio_stream();
- else if ((stream_id&0xF0)==0xE0) video_stream();
- else
- Trusted_IsNot("Unattended element!");
- }
-
- #if MEDIAINFO_EVENTS
- PES_FirstByte_IsAvailable=false;
- #endif //MEDIAINFO_EVENTS
-}
-
-//---------------------------------------------------------------------------
-//Jumping to the last DTS if needed
-bool File_MpegPs::BookMark_Needed()
-{
- if (IsSub || Streams.empty() || Config->ParseSpeed>=1.0)
- return false;
-
- int64u ToJump=(int64u)-1;
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- {
- //End timestamp is out of date
- if (Streams[StreamID].TimeStamp_End.PTS.File_Pos!=(int64u)-1)
- {
- if (Streams[StreamID].TimeStamp_End.PTS.File_Pos<ToJump)
- ToJump=Streams[StreamID].TimeStamp_End.PTS.File_Pos;
- Streams[StreamID].Searching_Payload=true;
- }
- if (Streams[StreamID].TimeStamp_End.DTS.File_Pos!=(int64u)-1)
- {
- if (Streams[StreamID].TimeStamp_End.DTS.File_Pos<ToJump)
- ToJump=Streams[StreamID].TimeStamp_End.DTS.File_Pos;
- Streams[StreamID].Searching_Payload=true;
- }
- if (Streams_Private1[StreamID].TimeStamp_End.PTS.File_Pos!=(int64u)-1)
- {
- if (Streams_Private1[StreamID].TimeStamp_End.PTS.File_Pos<ToJump)
- ToJump=Streams_Private1[StreamID].TimeStamp_End.PTS.File_Pos;
- Streams_Private1[StreamID].Searching_Payload=true;
- }
- if (Streams_Private1[StreamID].TimeStamp_End.DTS.File_Pos!=(int64u)-1)
- {
- if (Streams_Private1[StreamID].TimeStamp_End.DTS.File_Pos<ToJump)
- ToJump=Streams_Private1[StreamID].TimeStamp_End.DTS.File_Pos;
- Streams_Private1[StreamID].Searching_Payload=true;
- }
- if (Streams_Extension[StreamID].TimeStamp_End.PTS.File_Pos!=(int64u)-1)
- {
- if (Streams_Extension[StreamID].TimeStamp_End.PTS.File_Pos<ToJump)
- ToJump=Streams_Extension[StreamID].TimeStamp_End.PTS.File_Pos;
- Streams_Extension[StreamID].Searching_Payload=true;
- }
- if (Streams_Extension[StreamID].TimeStamp_End.DTS.File_Pos!=(int64u)-1)
- {
- if (Streams_Extension[StreamID].TimeStamp_End.DTS.File_Pos<ToJump)
- ToJump=Streams_Extension[StreamID].TimeStamp_End.DTS.File_Pos;
- Streams_Extension[StreamID].Searching_Payload=true;
- }
- }
-
- return false;
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Packet "B9"
-void File_MpegPs::MPEG_program_end()
-{
- Element_Name("MPEG_program_end");
-}
-
-//---------------------------------------------------------------------------
-// Packet "BA"
-void File_MpegPs::pack_start()
-{
- Element_Name("pack_start");
-
- //Parsing
- int16u SysClock_29, SysClock_14;
- int8u Version, SysClock_32;
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- //Parsing
- BS_Begin();
- Peek_S1( 2, Version);
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- //Parsing
- Version=Buffer[Buffer_Pos]>>6;
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
- if (Version==1)
- {
- //MPEG-2
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- //Parsing
- int8u Padding;
- Mark_0();
- Mark_1();
- Get_S1 ( 3, SysClock_32, "system_clock_reference_base32");
- Mark_1();
- Get_S2 (15, SysClock_29, "system_clock_reference_base29");
- Mark_1();
- Get_S2 (15, SysClock_14, "system_clock_reference_base14");
-
- //Filling
- Streams[0xBA].TimeStamp_End.PTS.TimeStamp=(((int64u)SysClock_32)<<30)
- | (((int64u)SysClock_29)<<15)
- | (((int64u)SysClock_14));
- if (Searching_TimeStamp_Start && Streams[0xBA].Searching_TimeStamp_Start)
- {
- Streams[0xBA].TimeStamp_Start=Streams[0xBA].TimeStamp_End;
- Streams[0xBA].Searching_TimeStamp_Start=false;
- }
- Param_Info_From_Milliseconds(Streams[0xBA].TimeStamp_End.PTS.TimeStamp/90);
-
- Mark_1();
- Skip_S2( 9, "system_clock_reference_extension");
- Mark_1();
- Get_S3 (22, program_mux_rate, "program_mux_rate"); Param_Info2(program_mux_rate*400, " bps");
- Mark_1();
- Mark_1();
- Skip_S1( 5, "reserved");
- Get_S1 ( 3, Padding, "pack_stuffing_length");
- BS_End();
- if (Padding>0)
- Skip_XX(Padding, "padding");
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- //Parsing
- Streams[0xBA].TimeStamp_End.PTS.TimeStamp=(((int64u)(Buffer[Buffer_Pos ] & 0x38)) << 30)
- | (((int64u)(Buffer[Buffer_Pos ] & 0x03)) << 28)
- | (((int64u)(Buffer[Buffer_Pos + 1] )) << 20)
- | (((int64u)(Buffer[Buffer_Pos + 2] & 0xF8)) << 15)
- | (((int64u)(Buffer[Buffer_Pos + 2] & 0x03)) << 13)
- | (((int64u)(Buffer[Buffer_Pos + 3] )) << 5)
- | (((int64u)(Buffer[Buffer_Pos + 4] & 0xF8)) >> 3);
- if (!Status[IsAccepted])
- {
- program_mux_rate =((Buffer[Buffer_Pos+6] )<<14)
- | ((Buffer[Buffer_Pos+7] )<< 6)
- | ((Buffer[Buffer_Pos+8] )>> 2);
- }
- int8u Padding = Buffer[Buffer_Pos+9]&0x07;
- Element_Offset=10+Padding;
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
- }
- else
- {
- BS_Begin();
- Mark_0();
- Mark_0();
- Mark_1();
- Mark_0();
- Get_S1 ( 3, SysClock_32, "system_clock_reference_base32");
- Mark_1();
- Get_S2 (15, SysClock_29, "system_clock_reference_base29");
- Mark_1();
- Get_S2 (15, SysClock_14, "system_clock_reference_base14");
-
- //Filling
- Streams[0xBA].TimeStamp_End.PTS.TimeStamp=(((int64u)SysClock_32)<<30)
- | (((int64u)SysClock_29)<<15)
- | (((int64u)SysClock_14));
- if (Searching_TimeStamp_Start && Streams[0xBA].Searching_TimeStamp_Start)
- {
- Streams[0xBA].TimeStamp_Start=Streams[0xBA].TimeStamp_End;
- Streams[0xBA].Searching_TimeStamp_Start=false;
- }
- Param_Info_From_Milliseconds(Streams[0xBA].TimeStamp_End.PTS.TimeStamp/90);
-
- Mark_1();
- Mark_1();
- Get_S3(22, program_mux_rate, "mux_rate"); Param_Info2(program_mux_rate*400, " bps");
- Mark_1();
- BS_End();
- }
-
-
- //Filling
- FILLING_BEGIN_PRECISE();
- if (!Status[IsAccepted])
- {
- Data_Accept("MPEG-PS");
- if (!IsSub)
- Fill(Stream_General, 0, General_Format, "MPEG-PS");
-
- //Autorisation of other streams
- Streams[0xB9].Searching_Payload=true; //MPEG_program_end
- Streams[0xBB].Searching_Payload=true; //system_header_start
- Streams[0xBD].Searching_Payload=true; //private_stream_1
- Streams[0xBD].Searching_TimeStamp_Start=true; //private_stream_1
- Streams[0xBD].Searching_TimeStamp_End=true; //private_stream_1
- Streams[0xBF].Searching_Payload=true; //private_stream_2
- Streams[0xFD].Searching_Payload=true; //private_stream_1 or video_stream
- Streams[0xFD].Searching_TimeStamp_Start=true; //private_stream_1 or video_stream
- Streams[0xFD].Searching_TimeStamp_End=true; //private_stream_1 or video_stream
- for (int8u Pos=0xC0; Pos<=0xEF; Pos++)
- {
- Streams[Pos].Searching_Payload=true; //audio_stream or video_stream
- Streams[Pos].Searching_TimeStamp_Start=true; //audio_stream or video_stream
- Streams[Pos].Searching_TimeStamp_End=true; //audio_stream or video_stream
- }
-
- MPEG_Version=Version==1?2:1;
-
- SizeToAnalyze=((int64u)program_mux_rate)*50*4*(MustExtendParsingDuration?4:1); //standard delay between TimeStamps is 0.7s, we try 4s to be sure
- if (SizeToAnalyze>16*1024*1024)
- SizeToAnalyze=16*1024*1024; //Not too much
- if (SizeToAnalyze<2*1024*1024)
- SizeToAnalyze=2*1024*1024; //Not too less
- }
-
- #if MEDIAINFO_IBI
- if (!IsSub)
- Ibi_SynchronizationOffset_Current=File_Offset+Buffer_Offset-Header_Size;
- #endif //MEDIAINFO_IBI
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "BB"
-void File_MpegPs::system_header_start()
-{
- Element_Name("system_header_start");
-
- //If there is system_header_start, default value for private sections are false
- private_stream_1_Count=0;
- private_stream_2_Count=0;
- SL_packetized_stream_Count=0;
-
- //StreamOrder
- StreamOrder_CountOfPrivateStreams_Minus1=0;
-
- //Parsing
- int32u rate_bound;
- int8u audio_bound, video_bound;
- BS_Begin();
- Mark_1();
- Get_S3 (22, rate_bound, "rate_bound"); Param_Info2(rate_bound*400, " bps");
- Mark_1();
- Get_S1 ( 6, audio_bound, "audio_bound");
- Info_SB( fixed_flag, "fixed_flag"); Param_Info1(MpegPs_System_Fixed[fixed_flag]);
- Skip_SB( "CSPS_flag");
- Skip_SB( "system_audio_lock_flag");
- Skip_SB( "system_video_lock_flag");
- Mark_1();
- Get_S1 ( 5, video_bound, "video_bound");
- Skip_SB( "packet_rate_restriction_flag");
- Skip_S1( 7, "reserved_byte");
- bool one=false;
- size_t StreamOrder=0;
- if (Element_IsNotFinished())
- Peek_SB(one);
- while (one)
- {
- Element_Begin0();
- int16u STD_buffer_size_bound;
- int8u stream_id, stream_id_extension=0;
- bool STD_buffer_bound_scale;
- Get_S1 ( 8, stream_id, "stream_id"); Param_Info1(MpegPs_stream_id(stream_id));
- Element_Name(Ztring().From_CC1(stream_id));
- Element_Info1(MpegPs_stream_id(stream_id));
- if (stream_id==0xB7)
- {
- Mark_1();
- Mark_1();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Get_S1 (8, stream_id_extension, "stream_id_extension");
- Mark_1();
- Mark_0();
- Mark_1();
- Mark_1();
- Mark_0();
- Mark_1();
- Mark_1();
- Mark_0();
- }
- Mark_1();
- Mark_1();
- Get_SB ( STD_buffer_bound_scale, "STD_buffer_bound_scale");
- Get_S2 (13, STD_buffer_size_bound, "STD_buffer_size_bound"); Param_Info1(Ztring::ToZtring(STD_buffer_size_bound*(STD_buffer_bound_scale?1024:128)) + __T(" bytes"));
- Element_End0();
-
- FILLING_BEGIN();
- switch (stream_id)
- {
- case 0xBD : private_stream_1_Count=(int8u)-1; break;
- case 0xBF : private_stream_2_Count=(int8u)-1; break;
- case 0xFA : SL_packetized_stream_Count=(int8u)-1; break;
- case 0xFD : extension_stream_Count=(int8u)-1; break;
- default : ;
- }
-
- if (stream_id==0xBD && Streams[stream_id].StreamOrder!=(size_t)-1)
- StreamOrder_CountOfPrivateStreams_Minus1++;
- else if (stream_id>0xB9)
- {
- Streams[stream_id].StreamOrder=StreamOrder;
- StreamOrder++;
- }
- FILLING_END();
-
- if (Element_IsNotFinished())
- Peek_SB(one);
- else
- one=false;
- }
- BS_End();
-
- //Filling
- if (audio_stream_Count==(int8u)-1) //0xBB may be multipart
- audio_stream_Count=0;
- audio_stream_Count+=audio_bound;
- if (video_stream_Count==(int8u)-1) //0xBB may be multipart
- video_stream_Count=0;
- video_stream_Count+=video_bound;
- if (private_stream_1_Count>0 && program_mux_rate*50==SizeToAnalyze)
- SizeToAnalyze*=32; //If there is a private section, this may be DVD, with late data --> 10s minimum
- if (SizeToAnalyze>8*1024*1024)
- SizeToAnalyze=8*1024*1024;
-
- //Autorisation of other streams
- if ((private_stream_1_Count>0 || audio_stream_Count>0) && video_stream_Count>0) //0xBB may be multipart
- Streams[0xBB].Searching_Payload=false;
- Streams[0xBC].Searching_Payload=true; //program_stream_map
-}
-
-//---------------------------------------------------------------------------
-// Packet "BC"
-void File_MpegPs::program_stream_map()
-{
- Element_Name("program_stream_map");
- MPEG_Version=2; //program_stream_map does NOT exist in MPEG-1 specs
-
- File_Mpeg_Psi Parser;
- Parser.From_TS=false;
- Parser.Complete_Stream=new complete_stream;
- Parser.Complete_Stream->Streams.resize(0x100);
- for (size_t StreamID=0; StreamID<0x100; StreamID++)
- Parser.Complete_Stream->Streams[StreamID]=new complete_stream::stream;
- Open_Buffer_Init(&Parser);
- Open_Buffer_Continue(&Parser);
- Finish(&Parser);
-
- FILLING_BEGIN();
- //Time stamps
- Streams[0xBC].TimeStamp_End=Streams[0xBA].TimeStamp_End;
- if (Streams[0xBC].TimeStamp_Start.PTS.TimeStamp==(int64u)-1)
- Streams[0xBC].TimeStamp_Start=Streams[0xBC].TimeStamp_End;
-
- //Registering the streams
- for (int8u Pos=0; Pos<0xFF; Pos++)
- if (Parser.Complete_Stream->Streams[Pos]->stream_type!=(int8u)-1)
- {
- if (!Parser.Complete_Stream->Transport_Streams.empty() && !Parser.Complete_Stream->Transport_Streams.begin()->second.Programs.empty())
- Streams[Pos].program_format_identifier=Parser.Complete_Stream->Transport_Streams.begin()->second.Programs.begin()->second.registration_format_identifier;
- Streams[Pos].format_identifier=Parser.Complete_Stream->Streams[Pos]->registration_format_identifier;
- Streams[Pos].stream_type=Parser.Complete_Stream->Streams[Pos]->stream_type;
- }
- else
- {
- }
- FILLING_END();
-
- delete Parser.Complete_Stream; //Parser.Complete_Stream=NULL;
-}
-
-//---------------------------------------------------------------------------
-// Packet "BD"
-void File_MpegPs::private_stream_1()
-{
- Element_Name("private_stream_1");
-
- if (!FromTS)
- {
- //From PS, trying DVD system
- private_stream_1_ID=0;
- private_stream_1_Offset=0;
- if (!private_stream_1_Choose_DVD_ID())
- {
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- return;
- }
- Element_Info1C(private_stream_1_ID, Ztring::ToZtring(private_stream_1_ID, 16));
- }
-
- if (!Streams_Private1[private_stream_1_ID].StreamIsRegistred)
- {
- //For TS streams, which does not have Start chunk
- if (FromTS)
- {
- if (video_stream_Count==(int8u)-1 && audio_stream_Count==(int8u)-1)
- {
- video_stream_Count=0;
- audio_stream_Count=0;
- private_stream_1_Count=1;
- private_stream_2_Count=0;
- extension_stream_Count=0;
- SL_packetized_stream_Count=0;
- private_stream_1_ID=0;
- private_stream_1_Offset=0;
- Streams_Private1[private_stream_1_ID].stream_type=FromTS_stream_type;
- }
- else if (!IsSub)
- {
- //2 streams in the file, this can not be From TS, we have no idea of the count of streams
- video_stream_Count=(int8u)-1;
- audio_stream_Count=(int8u)-1;
- private_stream_1_Count=(int8u)-1;
- private_stream_2_Count=(int8u)-1;
- extension_stream_Count=(int8u)-1;
- SL_packetized_stream_Count=(int8u)-1;
- FromTS=false;
- }
- }
-
- //Registering
- if (!Status[IsAccepted])
- {
- Data_Accept("MPEG-PS");
- if (!IsSub)
- Fill(Stream_General, 0, General_Format, "MPEG-PS");
- }
- Streams[stream_id].StreamIsRegistred++;
- Streams_Private1[private_stream_1_ID].StreamIsRegistred++;
- Streams_Private1[private_stream_1_ID].Searching_Payload=true;
- Streams_Private1[private_stream_1_ID].Searching_TimeStamp_Start=true;
- Streams_Private1[private_stream_1_ID].Searching_TimeStamp_End=true;
- Streams_Private1[private_stream_1_ID].FirstPacketOrder=FirstPacketOrder_Last;
- FirstPacketOrder_Last++;
-
- //New parsers
- Streams_Private1[private_stream_1_ID].Parsers.push_back(private_stream_1_ChooseParser());
- if (Streams_Private1[private_stream_1_ID].Parsers[Streams_Private1[private_stream_1_ID].Parsers.size()-1]==NULL)
- {
- Streams_Private1[private_stream_1_ID].Parsers.clear();
- #if defined(MEDIAINFO_AC3_YES)
- Streams_Private1[private_stream_1_ID].Parsers.push_back(ChooseParser_AC3());
- #endif
- #if defined(MEDIAINFO_DTS_YES)
- Streams_Private1[private_stream_1_ID].Parsers.push_back(ChooseParser_DTS());
- #endif
- #if defined(MEDIAINFO_SMPTEST0337_YES)
- Streams_Private1[private_stream_1_ID].Parsers.push_back(ChooseParser_SmpteSt0302());
- #endif
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- Streams_Private1[private_stream_1_ID].Parsers.push_back(ChooseParser_AribStdB24B37());
- #endif
- }
- #if MEDIAINFO_EVENTS
- if (private_stream_1_Offset)
- {
- //Multiple substreams in 1 stream
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- Element_Code=private_stream_1_ID; //The upper level ID is filled by Element_Code in the common code
- StreamIDs_Width[StreamIDs_Size]=2;
- ParserIDs[StreamIDs_Size]=MediaInfo_Parser_MpegPs_Ext;
- StreamIDs_Size++;
- }
- #endif //MEDIAINFO_EVENTS
- for (size_t Pos=0; Pos<Streams_Private1[private_stream_1_ID].Parsers.size(); Pos++)
- {
- Streams_Private1[private_stream_1_ID].Parsers[Pos]->CA_system_ID_MustSkipSlices=CA_system_ID_MustSkipSlices;
- Open_Buffer_Init(Streams_Private1[private_stream_1_ID].Parsers[Pos]);
- }
- #if MEDIAINFO_EVENTS
- if (private_stream_1_Offset)
- {
- StreamIDs_Size--;
- Element_Code=StreamIDs[StreamIDs_Size-1];
- }
- #endif //MEDIAINFO_EVENTS
- }
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (Streams_Private1[private_stream_1_ID].Searching_Payload)
- {
- if (private_stream_1_Offset)
- {
- //Multiple substreams in 1 stream
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- Element_Code=private_stream_1_ID; //The upper level ID is filled by Element_Code in the common code
- StreamIDs_Width[StreamIDs_Size]=2;
- ParserIDs[StreamIDs_Size]=MediaInfo_Parser_MpegPs_Ext;
- StreamIDs_Size++;
- Demux(Buffer+Buffer_Offset+private_stream_1_Offset, (size_t)(Element_Size-private_stream_1_Offset), ContentType_MainStream);
- StreamIDs_Size--;
- Element_Code=StreamIDs[StreamIDs_Size-1];
- }
- else
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- }
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- if (Element_Offset<private_stream_1_Offset)
- Skip_XX(private_stream_1_Offset-Element_Offset, "DVD-Video data");
-
- #if MEDIAINFO_EVENTS
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- if (private_stream_1_Offset)
- {
- //Multiple substreams in 1 stream
- StreamIDs[StreamIDs_Size]=Element_Code=private_stream_1_ID;
- StreamIDs_Width[StreamIDs_Size]=2;
- ParserIDs[StreamIDs_Size]=MediaInfo_Parser_MpegPs_Ext;
- StreamIDs_Size++;
- }
- #endif //MEDIAINFO_EVENTS
- xxx_stream_Parse(Streams_Private1[private_stream_1_ID], private_stream_1_Count);
- #if MEDIAINFO_EVENTS
- if (private_stream_1_Offset)
- {
- StreamIDs_Size--;
- Element_Code=StreamIDs[StreamIDs_Size-1];
- }
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- {
- Demux_StreamIsBeingParsed_type=1;
- Demux_StreamIsBeingParsed_stream_id=private_stream_1_ID;
- }
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-bool File_MpegPs::private_stream_1_Choose_DVD_ID()
-{
- private_stream_1_IsDvdVideo=false;
-
- if (Element_Size<4)
- return false;
-
- //Testing false-positives
- if (CC2(Buffer+Buffer_Offset+(size_t)Element_Offset)==0x0B77)
- return true;
-
- //Parsing
- int8u CodecID;
- Get_B1 (CodecID, "CodecID");
-
- //Testing
- //Subtitles (CVD)
- if (CodecID<=0x0F)
- {
- private_stream_1_IsDvdVideo=true;
- private_stream_1_Offset=1;
- }
- //Subtitles (DVD)
- else if (CodecID>=0x20 && CodecID<=0x3F)
- {
- private_stream_1_IsDvdVideo=true;
- private_stream_1_Offset=1;
- }
- //Subtitles (SVCD)
- else if (CodecID>=0x70 && CodecID<=0x7F)
- {
- private_stream_1_IsDvdVideo=true;
- private_stream_1_Offset=1;
- }
- //AC-3 (OTA?)
- else if (CodecID==0x80 && CC3(Buffer+Buffer_Offset+1)==0x000000)
- {
- private_stream_1_IsDvdVideo=true; //Not sure
- private_stream_1_Offset=4;
- }
- //PCM
- else if (CodecID>=0xA0 && CodecID<=0xAF && Element_Size>=7 && Buffer[Buffer_Offset+6]==0x80)
- {
- private_stream_1_IsDvdVideo=true;
- private_stream_1_Offset=1;
- }
- //PS2-MPG
- else if (CodecID==0xFF)
- {
- int16u StreamID;
- int8u SubID;
- Get_B1 (SubID, "CodecID (part 2)");
- Get_B2 (StreamID, "Stream ID");
-
- if ((SubID&0xFE)==0xA0) //0xFFA0 or 0xFFA1
- {
- //PS2-MPG PCM/ADPCM
- private_stream_1_Offset=4;
- private_stream_1_ID=(int8u)StreamID; //ID is maybe 2 byte long, but private_stream_1_ID is an int8u
- return true;
- }
- else if (SubID==0x90) //0xFF90
- {
- //PS2-MPG AC-3 or subtitles
- private_stream_1_Offset=4;
- private_stream_1_ID=(int8u)StreamID; //ID is maybe 2 byte long, but private_stream_1_ID is an int8u
- return true;
- }
- else
- return false;
- }
- else
- {
- int16u Next;
- int8u Count;
- Get_B1 (Count, "Count of next frame headers");
- Get_B2 (Next, "Next frame offset minus 1");
-
- if (Count>0 && 4+(int64u)Next+4<=Element_Size)
- {
- //Subtitles (CVD)
- // if (CodecID>=0x00 && CodecID<=0x0F)
- // ; //Seems to not work with subtitles, to be confirmed
- //Subtitles (DVD)
- // if (CodecID>=0x20 && CodecID<=0x3F)
- // ; //Seems to not work with subtitles, to be confirmed
- //Subtitles (SVCD)
- // if (CodecID>=0x70 && CodecID<=0x7F)
- // ; //Seems to not work with subtitles, to be confirmed
- //AC3
- if (CodecID>=0x80 && CodecID<=0x87)
- {
- if (CC2(Buffer+Buffer_Offset+4+Next)!=0x0B77 && CC2(Buffer+Buffer_Offset+3+Next)!=0x0B77 && CC2(Buffer+Buffer_Offset+2+Next)!=0x0B77)
- return false;
- }
- //DTS
- else if (CodecID>=0x88 && CodecID<=0x8F)
- {
- if (CC4(Buffer+Buffer_Offset+4+Next)!=0x7FFE8001 && CC4(Buffer+Buffer_Offset+3+Next)!=0x7FFE8001 && CC4(Buffer+Buffer_Offset+2+Next)!=0x7FFE8001)
- return false;
- }
- //DTS
- else if (CodecID>=0x98 && CodecID<=0x9F)
- {
- if (CC4(Buffer+Buffer_Offset+4+Next)!=0x7FFE8001 && CC4(Buffer+Buffer_Offset+3+Next)!=0x7FFE8001 && CC4(Buffer+Buffer_Offset+2+Next)!=0x7FFE8001)
- return false;
- }
- //PCM
- //else if (CodecID>=0xA0 && CodecID<=0xAF)
- // ;
- //MLP
- else if (CodecID>=0xB0 && CodecID<=0xBF)
- {
- if (CC2(Buffer+Buffer_Offset+4+Next)!=0x0B77 && CC2(Buffer+Buffer_Offset+3+Next)!=0x0B77 && CC2(Buffer+Buffer_Offset+2+Next)!=0x0B77)
- return false;
- }
- //AC3+
- else if (CodecID>=0xC0 && CodecID<=0xCF)
- {
- if (CC2(Buffer+Buffer_Offset+4+Next)!=0x0B77 && CC2(Buffer+Buffer_Offset+3+Next)!=0x0B77 && CC2(Buffer+Buffer_Offset+2+Next)!=0x0B77)
- return false;
- }
- else
- return false;
-
- private_stream_1_IsDvdVideo=true;
- private_stream_1_Offset=4;
- }
- }
-
- //Filling
- private_stream_1_ID=CodecID;
- return true;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::private_stream_1_ChooseParser()
-{
- if (FromTS || Streams[stream_id].program_format_identifier || Streams[stream_id].format_identifier || Streams[stream_id].descriptor_tag)
- {
- int32u format_identifier=FromTS?FromTS_format_identifier:Streams[stream_id].format_identifier;
- if (format_identifier==0x42535344) //"BSSD"
- {
- return ChooseParser_SmpteSt0302(); //AES3 (SMPTE 302M)
- }
- int32u stream_type=FromTS?FromTS_stream_type:Streams[stream_id].stream_type;
- switch (stream_type)
- {
- case 0x03 :
- case 0x04 : return ChooseParser_Mpega(); //MPEG Audio
- case 0x0F : return ChooseParser_Adts(); //ADTS
- case 0x11 : return ChooseParser_Latm(); //LATM
- case 0x80 : return ChooseParser_PCM(); //PCM
- case 0x81 :
- case 0x83 :
- case 0x84 :
- case 0x87 :
- case 0xA1 : return ChooseParser_AC3(); //AC3/AC3+
- case 0x82 :
- case 0x85 :
- case 0x86 :
- case 0xA2 : return ChooseParser_DTS(); //DTS
- case 0x90 : return ChooseParser_PGS(); //PGS from Bluray
- case 0xEA : return ChooseParser_NULL(); //VC1()
- default :
- {
- int8u descriptor_tag=FromTS?FromTS_descriptor_tag:Streams[stream_id].descriptor_tag;
- switch (descriptor_tag)
- {
- case 0x56 : return ChooseParser_Teletext(); //Teletext
- case 0x59 : return ChooseParser_DvbSubtitle(); //DVB Subtiles
- case 0x6A :
- case 0x7A :
- case 0x81 : return ChooseParser_AC3(); //AC3/AC3+
- case 0x7B : return ChooseParser_DTS(); //DTS
- case 0x7C : return ChooseParser_AAC(); //AAC
- default : if (Element_Size>2 && CC2(Buffer+Buffer_Offset)==0x0B77)
- return ChooseParser_AC3(); //AC3/AC3+
- else if (Element_Size>4 && CC4(Buffer+Buffer_Offset)==0x7FFE8001)
- return ChooseParser_DTS(); //DTS
- else
- return NULL;
- }
- }
- }
- }
- else if (Element_Code==0xBD && private_stream_1_IsDvdVideo)
- {
- //Subtitles (CVD)
- if (private_stream_1_ID<=0x0F)
- return ChooseParser_RLE();
- //Subtitles (DVD)
- if (private_stream_1_ID>=0x20 && private_stream_1_ID<=0x3F)
- return ChooseParser_RLE();
- //Subtitles (SVCD)
- if (private_stream_1_ID>=0x70 && private_stream_1_ID<=0x7F)
- return ChooseParser_RLE();
- //AC3
- else if (private_stream_1_ID>=0x80 && private_stream_1_ID<=0x87)
- return ChooseParser_AC3();
- //DTS
- else if (private_stream_1_ID>=0x88 && private_stream_1_ID<=0x8F)
- return ChooseParser_DTS();
- //SDDS
- else if (private_stream_1_ID>=0x90 && private_stream_1_ID<=0x97)
- return ChooseParser_DTS();
- //DTS
- else if (private_stream_1_ID>=0x98 && private_stream_1_ID<=0x9F)
- return ChooseParser_DTS();
- //PCM
- else if (private_stream_1_ID>=0xA0 && private_stream_1_ID<=0xAF)
- return ChooseParser_PCM();
- //AC3+
- else if (private_stream_1_ID>=0xC0 && private_stream_1_ID<=0xCF)
- return ChooseParser_AC3();
- else
- return NULL;
- }
- else
- {
- if (Element_Size>2 && CC2(Buffer+Buffer_Offset)==0x0B77)
- return ChooseParser_AC3(); //AC3/AC3+
- else if (Element_Size>4 && CC4(Buffer+Buffer_Offset)==0x7FFE8001)
- return ChooseParser_DTS(); //DTS
- else if (Element_Size>2 && (CC2(Buffer+Buffer_Offset)&0xFFFE)==0xFFA0) //0xFFA0 or 0xFFA1
- return ChooseParser_PS2(); //PS2-MPG PCM/ADPCM
- else if (Element_Size>6 && CC2(Buffer+Buffer_Offset)==0xFF90 && CC2(Buffer+Buffer_Offset+4)==0x0B77)
- return ChooseParser_AC3(); //PS2-MPG AC-3
- else if (Element_Size>6 && CC2(Buffer+Buffer_Offset)==0xFF90 && CC2(Buffer+Buffer_Offset+4)==0x0000)
- return ChooseParser_RLE(); //PS2-MPG Subtitles
- else
- return NULL;
- }
-}
-
-//---------------------------------------------------------------------------
-const ZenLib::Char* File_MpegPs::private_stream_1_ChooseExtension()
-{
- if (FromTS)
- {
- switch (private_stream_1_ID)
- {
- case 0x80 : return __T(".pcm"); //PCM
- case 0x81 : return __T(".ac3"); //AC3
- case 0x83 :
- case 0x87 : return __T(".dd+"); //AC3+
- case 0x86 : return __T(".dts"); //DTS
- case 0xEA : return __T(".vc1"); //DTS
- default : return __T(".raw");
- }
- }
- else
- {
- //Subtitles
- if (private_stream_1_ID>=0x20 && private_stream_1_ID<=0x3F)
- return __T(".sub");
- //AC3
- else if (private_stream_1_ID>=0x80 && private_stream_1_ID<=0x87)
- return __T(".ac3");
- //DTS
- else if (private_stream_1_ID>=0x88 && private_stream_1_ID<=0x8F)
- return __T(".dts");
- //SDDS
- else if (private_stream_1_ID>=0x90 && private_stream_1_ID<=0x97)
- return __T(".sdds");
- //DTS
- else if (private_stream_1_ID>=0x98 && private_stream_1_ID<=0x9F)
- return __T(".dts");
- //PCM
- else if (private_stream_1_ID>=0xA0 && private_stream_1_ID<=0xAF)
- return __T(".pcm");
- //MLP
- else if (private_stream_1_ID>=0xB0 && private_stream_1_ID<=0xBF)
- return __T(".dd+");
- //AC3+
- else if (private_stream_1_ID>=0xC0 && private_stream_1_ID<=0xCF)
- return __T(".dd+");
- else
- return __T(".raw");
- }
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File_MpegPs::private_stream_1_Element_Info1()
-{
- if (FromTS)
- {
- switch (private_stream_1_ID)
- {
- case 0x80 : Element_Info1("PCM"); return;
- case 0x81 : Element_Info1("AC3"); return;
- case 0x83 :
- case 0x87 : Element_Info1("AC3+"); return;
- case 0x86 : Element_Info1("DTS"); return;
- case 0xEA : Element_Info1("VC1"); return;
- default : return;
- }
- }
- else
- {
- //Subtitles
- if (private_stream_1_ID>=0x20 && private_stream_1_ID<=0x3F)
- Element_Info1("RLE");
- //AC3
- else if (private_stream_1_ID>=0x80 && private_stream_1_ID<=0x87)
- Element_Info1("AC3");
- //DTS
- else if (private_stream_1_ID>=0x88 && private_stream_1_ID<=0x8F)
- Element_Info1("DTS");
- //SDDS
- else if (private_stream_1_ID>=0x90 && private_stream_1_ID<=0x97)
- Element_Info1("SDDS");
- //DTS
- else if (private_stream_1_ID>=0x98 && private_stream_1_ID<=0x9F)
- Element_Info1("DTS");
- //PCM
- else if (private_stream_1_ID>=0xA0 && private_stream_1_ID<=0xAF)
- Element_Info1("LPCM");
- //MLP
- else if (private_stream_1_ID>=0xB0 && private_stream_1_ID<=0xBF)
- Element_Info1("MLP");
- //AC3+
- else if (private_stream_1_ID>=0xC0 && private_stream_1_ID<=0xCF)
- Element_Info1("AC3+");
- }
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-// Packet "BE"
-void File_MpegPs::padding_stream()
-{
- Element_Name("padding_stream");
-
- Skip_XX(Element_Size, "stuffing_bytes");
-}
-
-//---------------------------------------------------------------------------
-// Packet "BF"
-void File_MpegPs::private_stream_2()
-{
- Element_Name("private_stream_2");
-
- //Filling
- if (FromTS)
- {
- switch (FromTS_program_format_identifier)
- {
- case 0x54534856 : //TSHV
- switch (FromTS_stream_type)
- {
- case 0xA0 : private_stream_2_TSHV_A0(); break;
- case 0xA1 : private_stream_2_TSHV_A1(); break;
- default : Skip_XX(Element_Size, "Unknown");
- }
- break;
- default : Skip_XX(Element_Size, "Unknown");
- }
-
- //Disabling the program
- if (!Status[IsAccepted])
- Data_Accept("MPEG-PS");
- }
- else //DVD?
- {
- Stream_Prepare(Stream_Menu);
- Fill(Stream_Menu, StreamPos_Last, Menu_Format, "DVD-Video");
- Fill(Stream_Menu, StreamPos_Last, Menu_Codec, "DVD-Video");
-
- //Disabling this Stream
- Streams[0xBF].Searching_Payload=false;
- private_stream_2_Count=0;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::private_stream_2_TSHV_A0()
-{
- Element_Name("DV A0");
-
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-
- //Filling
- Data_Accept("MPEG-PS");
- Finish("MPEG-PS");
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::private_stream_2_TSHV_A1()
-{
- Element_Name("DV A1");
-
- //Parsing
- int8u day, month, year, second, minute, hour;
- Skip_XX(31, "Unknown");
- BS_Begin();
- Skip_S1(2, "Unknown");
- Skip_S1(6, "timecode_frame");
- Skip_S1(1, "Unknown");
- Skip_S1(7, "timecode_second");
- Skip_S1(1, "Unknown");
- Skip_S1(7, "timecode_minute");
- Skip_S1(2, "Unknown");
- Skip_S1(6, "timecode_hour");
- Skip_S1(8, "Unknown");
- Skip_S1(2, "Unknown");
- Get_S1 (6, day, "day");
- Skip_S1(3, "Unknown");
- Get_S1 (5, month, "month");
- Get_S1 (8, year, "year");
- Skip_S1(8, "Unknown");
- Skip_S1(1, "Unknown");
- Get_S1 (7, second, "second");
- Skip_S1(1, "Unknown");
- Get_S1 (7, minute, "minute");
- Skip_S1(2, "Unknown");
- Get_S1 (6, hour, "hour");
- Skip_S1(2, "Unknown");
- Skip_S1(1, "scene_start");
- Skip_S1(5, "Unknown");
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- FILLING_BEGIN();
- Ztring Date_Time=Ztring().Date_From_Numbers(year/0x10*10+year%0x10, month/0x10*10+month%0x10, day/0x10*10+day%0x10, hour/0x10*10+hour%0x10, minute/0x10*10+minute%0x10, second/0x10*10+second%0x10);
- if (Retrieve(Stream_General, 0, General_Encoded_Date).empty())
- {
- Fill(Stream_General, 0, General_Encoded_Date, Date_Time);
- Fill(Stream_General, 0, General_Duration_Start, Date_Time);
- }
- Fill(Stream_General, 0, General_Duration_End, Date_Time, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::audio_stream()
-{
- Element_Name("Audio");
-
- if (!Streams[stream_id].StreamIsRegistred)
- {
- //For TS streams, which does not have Start chunk
- if (FromTS)
- {
- if (video_stream_Count==(int8u)-1 && audio_stream_Count==(int8u)-1)
- {
- video_stream_Count=0;
- audio_stream_Count=1;
- private_stream_1_Count=0;
- private_stream_2_Count=0;
- extension_stream_Count=0;
- SL_packetized_stream_Count=0;
- Streams[stream_id].stream_type=FromTS_stream_type;
- }
- else if (!IsSub)
- {
- //2 streams in the file, this can not be From TS, we have no idea of the count of streams
- video_stream_Count=(int8u)-1;
- audio_stream_Count=(int8u)-1;
- private_stream_1_Count=(int8u)-1;
- private_stream_2_Count=(int8u)-1;
- extension_stream_Count=(int8u)-1;
- SL_packetized_stream_Count=(int8u)-1;
- FromTS=false;
- }
- }
-
- //If we have no Streams map --> Registering the Streams as MPEG Audio
- if (Streams[stream_id].stream_type==0 && !FromTS)
- {
- if (MPEG_Version==2)
- Streams[stream_id].stream_type=0x04; //MPEG-2 Audio
- else
- Streams[stream_id].stream_type=0x03; //MPEG-1 Audio
- }
-
- //Registering
- if (!Status[IsAccepted])
- {
- Data_Accept("MPEG-PS");
- if (!IsSub)
- Fill(Stream_General, 0, General_Format, "MPEG-PS");
- }
- Streams[stream_id].StreamIsRegistred++;
- Streams[stream_id].FirstPacketOrder=FirstPacketOrder_Last;
- FirstPacketOrder_Last++;
-
- //New parsers
- Streams[stream_id].Parsers.push_back(private_stream_1_ChooseParser());
- if (Streams[stream_id].Parsers[Streams[stream_id].Parsers.size()-1]==NULL)
- {
- Streams[stream_id].Parsers.clear();
- #if defined(MEDIAINFO_MPEGA_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_Mpega());
- #endif
- #if defined(MEDIAINFO_AC3_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_AC3());
- #endif
- #if defined(MEDIAINFO_DTS_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_DTS());
- #endif
- #if defined(MEDIAINFO_AAC_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_Adts());
- #endif
- #if defined(MEDIAINFO_AAC_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_Latm());
- #endif
- }
- for (size_t Pos=0; Pos<Streams[stream_id].Parsers.size(); Pos++)
- {
- Streams[stream_id].Parsers[Pos]->CA_system_ID_MustSkipSlices=CA_system_ID_MustSkipSlices;
- Open_Buffer_Init(Streams[stream_id].Parsers[Pos]);
- }
- }
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (Streams[stream_id].Parsers.empty() || !Streams[stream_id].Parsers[0]->Demux_UnpacketizeContainer)
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- #if MEDIAINFO_EVENTS
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- #endif //MEDIAINFO_EVENTS
- xxx_stream_Parse(Streams[stream_id], audio_stream_Count);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- {
- Demux_StreamIsBeingParsed_type=0;
- Demux_StreamIsBeingParsed_stream_id=stream_id;
- }
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_MpegPs::video_stream()
-{
- Element_Name("Video");
-
- if (!Streams[stream_id].StreamIsRegistred)
- {
- //For TS streams, which does not have Start chunk
- if (FromTS)
- {
- if (video_stream_Count==(int8u)-1 && audio_stream_Count==(int8u)-1)
- {
- video_stream_Count=1;
- audio_stream_Count=0;
- private_stream_1_Count=0;
- private_stream_2_Count=0;
- extension_stream_Count=0;
- SL_packetized_stream_Count=0;
- Streams[stream_id].stream_type=FromTS_stream_type;
- }
- else if (!IsSub)
- {
- //2 streams in the file, this can not be From TS, we have no idea of the count of streams
- video_stream_Count=(int8u)-1;
- audio_stream_Count=(int8u)-1;
- private_stream_1_Count=(int8u)-1;
- private_stream_2_Count=(int8u)-1;
- extension_stream_Count=(int8u)-1;
- SL_packetized_stream_Count=(int8u)-1;
- FromTS=false;
- }
- }
-
- //Registering
- if (!Status[IsAccepted])
- {
- Data_Accept("MPEG-PS");
- if (!IsSub)
- Fill(Stream_General, 0, General_Format, "MPEG-PS");
- }
- Streams[stream_id].StreamIsRegistred++;
- Streams[stream_id].FirstPacketOrder=FirstPacketOrder_Last;
- FirstPacketOrder_Last++;
-
- //New parsers
- switch (Streams[stream_id].stream_type)
- {
- case 0x01 :
- case 0x02 :
- case 0x80 : Streams[stream_id].Parsers.push_back(ChooseParser_Mpegv() ); break;
- case 0x10 :
- Streams[stream_id].Parsers.push_back(ChooseParser_Mpeg4v()); break;
- case 0x1B :
- Streams[stream_id].Parsers.push_back(ChooseParser_Avc() ); break;
- case 0x24 :
- case 0x27 : Streams[stream_id].Parsers.push_back(ChooseParser_Hevc() ); break;
- default :
- #if defined(MEDIAINFO_MPEGV_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_Mpegv());
- #endif
- #if defined(MEDIAINFO_AVC_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_Avc());
- #endif
- #if defined(MEDIAINFO_HEVC_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_Hevc());
- #endif
- #if defined(MEDIAINFO_MPEG4V_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_Mpeg4v());
- #endif
- #if defined(MEDIAINFO_AVSV_YES)
- {
- File_AvsV* Parser=new File_AvsV;
- Streams[stream_id].Parsers.push_back(Parser);
- }
- #endif
- }
- for (size_t Pos=0; Pos<Streams[stream_id].Parsers.size(); Pos++)
- {
- Streams[stream_id].Parsers[Pos]->CA_system_ID_MustSkipSlices=CA_system_ID_MustSkipSlices;
- Open_Buffer_Init(Streams[stream_id].Parsers[Pos]);
- #if MEDIAINFO_IBI
- if (FromTS)
- Streams[stream_id].Parsers[Pos]->IbiStream=IbiStream;
- else
- {
- if (Ibi.Streams[stream_id]==NULL)
- Ibi.Streams[stream_id]=new ibi::stream;
- Streams[stream_id].Parsers[Pos]->IbiStream=Ibi.Streams[stream_id];
- }
- #endif //MEDIAINFO_IBI
- #if MEDIAINFO_SEEK
- if (Unsynch_Frame_Counts.find(stream_id)!=Unsynch_Frame_Counts.end())
- Streams[stream_id].Parsers[Pos]->Frame_Count_NotParsedIncluded=Unsynch_Frame_Counts[stream_id];
- #endif //MEDIAINFO_SEEK
- }
- #if MEDIAINFO_SEEK
- Unsynch_Frame_Counts.erase(stream_id);
- #endif //MEDIAINFO_SEEK
- }
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (!(FromTS_stream_type==0x20 && SubStream_Demux) && (Streams[stream_id].Parsers.empty() || !Streams[stream_id].Parsers[0]->Demux_UnpacketizeContainer))
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- #if MEDIAINFO_EVENTS
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- #endif //MEDIAINFO_EVENTS
- xxx_stream_Parse(Streams[stream_id], video_stream_Count);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- {
- Demux_StreamIsBeingParsed_type=0;
- Demux_StreamIsBeingParsed_stream_id=stream_id;
- }
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-// Packet "FA"
-void File_MpegPs::SL_packetized_stream()
-{
- Element_Name("SL-packetized_stream");
-
- if (!Streams[stream_id].StreamIsRegistred)
- {
- //For TS streams, which does not have Start chunk
- if (FromTS)
- {
- if (video_stream_Count==(int8u)-1 && audio_stream_Count==(int8u)-1)
- {
- video_stream_Count=0;
- audio_stream_Count=0;
- private_stream_1_Count=0;
- private_stream_2_Count=0;
- extension_stream_Count=0;
- SL_packetized_stream_Count=1;
- Streams[stream_id].stream_type=FromTS_stream_type;
- }
- else if (!IsSub)
- {
- //2 streams in the file, this can not be From TS, we have no idea of the count of streams
- video_stream_Count=(int8u)-1;
- audio_stream_Count=(int8u)-1;
- private_stream_1_Count=(int8u)-1;
- private_stream_2_Count=(int8u)-1;
- extension_stream_Count=(int8u)-1;
- SL_packetized_stream_Count=(int8u)-1;
- FromTS=false;
- }
- }
-
- //Registering
- Streams[stream_id].StreamIsRegistred++;
- Streams[stream_id].FirstPacketOrder=FirstPacketOrder_Last;
- FirstPacketOrder_Last++;
- if (!Status[IsAccepted])
- Data_Accept("MPEG-PS");
- Streams[stream_id].Searching_TimeStamp_Start=true;
-
- //New parsers
- #ifdef MEDIAINFO_MPEG4_YES
- if (ParserFromTs)
- {
- Streams[stream_id].Parsers.push_back(ParserFromTs); ParserFromTs=NULL;
- }
- else
- #endif
- if (FromTS_stream_type)
- switch (FromTS_stream_type)
- {
- case 0x0F :
- Streams[stream_id].Parsers.push_back(ChooseParser_Adts());
- break;
-
- case 0x11 :
- Streams[stream_id].Parsers.push_back(ChooseParser_Latm());
- break;
- default : ;
- }
- else
- {
- #if defined(MEDIAINFO_AAC_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_Adts());
- #endif
- #if defined(MEDIAINFO_AAC_YES)
- Streams[stream_id].Parsers.push_back(ChooseParser_Latm());
- #endif
- }
- for (size_t Pos=0; Pos<Streams[stream_id].Parsers.size(); Pos++)
- {
- Streams[stream_id].Parsers[Pos]->CA_system_ID_MustSkipSlices=CA_system_ID_MustSkipSlices;
- Open_Buffer_Init(Streams[stream_id].Parsers[Pos]);
- }
- }
-
- //Parsing
- #ifdef MEDIAINFO_MPEG4_YES
- if (SLConfig) //SL
- {
- BS_Begin();
- int8u paddingBits=0;
- bool paddingFlag=false, idleFlag=false, OCRflag=false, accessUnitStartFlag=false;
- if (SLConfig->useAccessUnitStartFlag)
- Get_SB (accessUnitStartFlag, "accessUnitStartFlag");
- if (SLConfig->useAccessUnitEndFlag)
- Skip_SB( "accessUnitEndFlag");
- if (SLConfig->OCRLength>0)
- Get_SB (OCRflag, "OCRflag");
- if (SLConfig->useIdleFlag)
- Get_SB (idleFlag, "idleFlag");
- if (SLConfig->usePaddingFlag)
- Get_SB (paddingFlag, "paddingFlag");
- if (paddingFlag)
- Get_S1(3, paddingBits, "paddingBits");
- if (!idleFlag && (!paddingFlag || paddingBits!=0))
- {
- bool DegPrioflag=false;
- if (SLConfig->packetSeqNumLength>0)
- Skip_S2(SLConfig->packetSeqNumLength, "packetSequenceNumber");
- if (SLConfig->degradationPriorityLength>0)
- Get_SB (DegPrioflag, "DegPrioflag");
- if (DegPrioflag)
- Skip_S2(SLConfig->degradationPriorityLength, "degradationPriority");
- if (OCRflag)
- Skip_S8(SLConfig->OCRLength, "objectClockReference");
- if (accessUnitStartFlag)
- {
- bool decodingTimeStampFlag=false, compositionTimeStampFlag=false, instantBitrateFlag=false;
- if (SLConfig->useRandomAccessPointFlag)
- Skip_SB( "randomAccessPointFlag");
- if (SLConfig->AU_seqNumLength >0)
- Skip_S2(SLConfig->AU_seqNumLength, "AU_sequenceNumber");
- if (SLConfig->useTimeStampsFlag)
- {
- Get_SB (decodingTimeStampFlag, "decodingTimeStampFlag");
- Get_SB (compositionTimeStampFlag, "compositionTimeStampFlag");
- }
- if (SLConfig->instantBitrateLength>0)
- Get_SB (instantBitrateFlag, "instantBitrateFlag");
- if (decodingTimeStampFlag)
- Skip_S2(SLConfig->timeStampLength, "decodingTimeStamp");
- if (compositionTimeStampFlag)
- Skip_S2(SLConfig->timeStampLength, "compositionTimeStamp");
- if (SLConfig->AU_Length > 0)
- Skip_S2(SLConfig->AU_Length, "accessUnitLength");
- if (instantBitrateFlag)
- Skip_S2(SLConfig->instantBitrateLength, "instantBitrate");
- }
- }
- BS_End();
- }
- #else //MEDIAINFO_MPEG4_YES
- Skip_XX(Element_Size, "LATM (not decoded)");
- #endif //MEDIAINFO_MPEG4_YES
-
- //Demux
- /*
- if (Config_Demux)
- {
- int8u A[7];
- //TODO: Only for 24KHz stuff, should be modified... output is ADTS
- A[0]=0xFF;
- A[1]=0xF9;
- A[2]=0x58;
- A[3]=0x80;
- A[4]=0x00;
- A[5]=0x1F;
- A[6]=0xFC;
-
- int32u Size=(int32u)(Element_Size+7);
- Size=Size<<13;
- A[3]=A[3]|((int8u)(Size>>24));
- A[4]=A[4]|((int8u)(Size>>16));
- A[5]=A[5]|((int8u)(Size>>8));
-
- //Demux
- Demux(A, 7, ContentType_Header);
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- }
- */
- #if MEDIAINFO_DEMUX
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- #if MEDIAINFO_EVENTS
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- #endif //MEDIAINFO_EVENTS
- xxx_stream_Parse(Streams[stream_id], SL_packetized_stream_Count);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- {
- Demux_StreamIsBeingParsed_type=0;
- Demux_StreamIsBeingParsed_stream_id=stream_id;
- }
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-// Packet "FD"
-void File_MpegPs::extension_stream()
-{
- Element_Name("With Extension");
- Element_Info1(MpegPs_stream_id_extension(stream_id_extension));
-
- if (!Streams_Extension[stream_id_extension].StreamIsRegistred)
- {
- //For TS streams, which does not have Start chunk
- if (FromTS)
- {
- if (video_stream_Count==(int8u)-1 && audio_stream_Count==(int8u)-1)
- {
- video_stream_Count=0;
- audio_stream_Count=0;
- private_stream_1_Count=0;
- private_stream_2_Count=0;
- extension_stream_Count=1;
- SL_packetized_stream_Count=0;
- Streams_Extension[stream_id_extension].stream_type=FromTS_stream_type;
- }
- else if (!IsSub)
- {
- //2 streams in the file, this can not be From TS, we have no idea of the count of streams
- video_stream_Count=(int8u)-1;
- audio_stream_Count=(int8u)-1;
- private_stream_1_Count=(int8u)-1;
- private_stream_2_Count=(int8u)-1;
- extension_stream_Count=(int8u)-1;
- SL_packetized_stream_Count=(int8u)-1;
- FromTS=false;
- }
- }
-
- //Registering
- if (!Status[IsAccepted])
- Data_Accept("MPEG-PS");
- Streams[stream_id].StreamIsRegistred++;
- Streams_Extension[stream_id_extension].StreamIsRegistred++;
- Streams_Extension[stream_id_extension].Searching_Payload=true;
- Streams_Extension[stream_id_extension].Searching_TimeStamp_Start=true;
- Streams_Extension[stream_id_extension].Searching_TimeStamp_End=true;
- Streams_Extension[stream_id_extension].FirstPacketOrder=FirstPacketOrder_Last;
- FirstPacketOrder_Last++;
-
- //New parsers
- if (Streams_Extension[stream_id_extension].stream_type && Streams_Extension[stream_id_extension].stream_type<0x80) //Standard
- switch (Streams_Extension[stream_id_extension].stream_type)
- {
- case 0x0F : Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_Adts()); break;
- default : ;
- }
- else
- switch (FromTS_format_identifier)
- {
- case 0x41432D33 :
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_AC3());
- break;
- case 0x44545331 :
- case 0x44545332 :
- case 0x44545333 :
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_DTS());
- break;
- case 0x56432D31 :
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_VC1());
- break;
- case 0x64726163 :
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_Dirac());
- break;
- default :
- switch (FromTS_program_format_identifier)
- {
- case 0x48444D56 : //HDMV (BluRay)
- switch (Streams_Extension[stream_id_extension].stream_type)
- {
- case 0x81 :
- case 0x83 :
- case 0x84 :
- case 0xA1 :
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_AC3());
- break;
- case 0x82 :
- case 0x85 :
- case 0x86 :
- case 0xA2 :
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_DTS());
- break;
- case 0xEA :
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_VC1());
- break;
- default : ;
- }
- break;
- default : ;
- if (stream_id_extension==0x00)
- {} //IPMP Control Information stream
- else if (stream_id_extension==0x01)
- {} //IPMP stream
- else if (stream_id_extension>=0x55 && stream_id_extension<=0x5F)
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_VC1());
- else if (stream_id_extension>=0x60 && stream_id_extension<=0x6F)
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_Dirac());
- else if (stream_id_extension==0x71 || stream_id_extension==0x72 || stream_id_extension==0x76)
- {
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_DTS());
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_AC3());
- }
- else if (stream_id_extension==0x75 && stream_id_extension<=0x7F)
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_VC1());
- }
- }
-
- if (Streams_Extension[stream_id_extension].Parsers.empty())
- {
- #if defined(MEDIAINFO_DIRAC_YES)
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_Dirac());
- #endif
- #if defined(MEDIAINFO_VC1_YES)
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_VC1());
- #endif
- #if defined(MEDIAINFO_AC3_YES)
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_AC3());
- #endif
- #if defined(MEDIAINFO_DTS_YES)
- Streams_Extension[stream_id_extension].Parsers.push_back(ChooseParser_DTS());
- #endif
- }
-
- //In case of HD part before Core part
- switch (stream_id_extension)
- {
- case 0x71 :
- case 0x76 :
- for (size_t Pos=0; Pos<Streams_Extension[0x72].Parsers.size(); Pos++)
- delete Streams_Extension[0x72].Parsers[Pos]; //Streams_Extension[0x72].Parsers[Pos]=NULL;
- Streams_Extension[0x72].Parsers.clear();
- break;
- }
-
- //Init
- for (size_t Pos=0; Pos<Streams_Extension[stream_id_extension].Parsers.size(); Pos++)
- {
- Streams_Extension[stream_id_extension].Parsers[Pos]->CA_system_ID_MustSkipSlices=CA_system_ID_MustSkipSlices;
- Open_Buffer_Init(Streams_Extension[stream_id_extension].Parsers[Pos]);
- }
- }
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (Streams_Extension[stream_id_extension].Searching_Payload)
- {
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- if (stream_id_extension==0x72 && !(Streams_Extension[0x71].Parsers.empty() && Streams_Extension[0x76].Parsers.empty()))
- {
- if (!Streams_Extension[0x71].Parsers.empty())
- Element_Code=0x71;
- if (!Streams_Extension[0x76].Parsers.empty())
- Element_Code=0x76;
- }
- else
- Element_Code=stream_id_extension; //The upper level ID is filled by Element_Code in the common code
- StreamIDs_Width[StreamIDs_Size]=2;
- ParserIDs[StreamIDs_Size]=MediaInfo_Parser_MpegPs_Ext;
- StreamIDs_Size++;
- if (stream_id_extension==0x72 && !(Streams_Extension[0x71].Parsers.empty() && Streams_Extension[0x76].Parsers.empty()))
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_SubStream);
- else
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- StreamIDs_Size--;
- Element_Code=StreamIDs[StreamIDs_Size-1];
- }
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- if (stream_id_extension==0x72 && !(Streams_Extension[0x71].Parsers.empty() && Streams_Extension[0x76].Parsers.empty()))
- {
- if (!Streams_Extension[0x71].Parsers.empty())
- {
- #if MEDIAINFO_EVENTS
- //Multiple substreams in 1 stream
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- StreamIDs[StreamIDs_Size]=Element_Code=0x71;
- StreamIDs_Width[StreamIDs_Size]=2;
- ParserIDs[StreamIDs_Size]=MediaInfo_Parser_MpegPs_Ext;
- StreamIDs_Size++;
- #endif //MEDIAINFO_EVENTS
- xxx_stream_Parse(Streams_Extension[0x71], extension_stream_Count);
- #if MEDIAINFO_EVENTS
- StreamIDs_Size--;
- Element_Code=StreamIDs[StreamIDs_Size-1];
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- {
- Demux_StreamIsBeingParsed_type=2;
- Demux_StreamIsBeingParsed_stream_id=0x71;
- }
- #endif //MEDIAINFO_DEMUX
- }
- if (!Streams_Extension[0x76].Parsers.empty())
- {
- #if MEDIAINFO_EVENTS
- //Multiple substreams in 1 stream
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- StreamIDs[StreamIDs_Size]=Element_Code=0x76;
- StreamIDs_Width[StreamIDs_Size]=2;
- ParserIDs[StreamIDs_Size]=MediaInfo_Parser_MpegPs_Ext;
- StreamIDs_Size++;
- #endif //MEDIAINFO_EVENTS
- xxx_stream_Parse(Streams_Extension[0x76], extension_stream_Count);
- #if MEDIAINFO_EVENTS
- StreamIDs_Size--;
- Element_Code=StreamIDs[StreamIDs_Size-1];
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- {
- Demux_StreamIsBeingParsed_type=2;
- Demux_StreamIsBeingParsed_stream_id=0x76;
- }
- #endif //MEDIAINFO_DEMUX
- }
- }
- else
- {
- #if MEDIAINFO_EVENTS
- //Multiple substreams in 1 stream
- StreamIDs[StreamIDs_Size-1]=Element_Code;
- StreamIDs[StreamIDs_Size]=Element_Code=stream_id_extension;
- StreamIDs_Width[StreamIDs_Size]=2;
- ParserIDs[StreamIDs_Size]=MediaInfo_Parser_MpegPs_Ext;
- StreamIDs_Size++;
- #endif //MEDIAINFO_EVENTS
- xxx_stream_Parse(Streams_Extension[stream_id_extension], extension_stream_Count);
- #if MEDIAINFO_EVENTS
- StreamIDs_Size--;
- Element_Code=StreamIDs[StreamIDs_Size-1];
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- {
- Demux_StreamIsBeingParsed_type=2;
- Demux_StreamIsBeingParsed_stream_id=stream_id_extension;
- }
- #endif //MEDIAINFO_DEMUX
- }
-}
-
-//---------------------------------------------------------------------------
-const ZenLib::Char* File_MpegPs::extension_stream_ChooseExtension()
-{
- //AC3
- if ((stream_id_extension>=0x55 && stream_id_extension<=0x5F)
- || (stream_id_extension==0x75 && stream_id_extension<=0x7F))
- return __T(".vc1");
- //AC3+
- else if (stream_id_extension>=0x60 && stream_id_extension<=0x6F)
- return __T(".dirac");
- else if (stream_id_extension==0x71)
- return private_stream_1_ChooseExtension();
- else
- return __T(".raw");
-}
-
-//***************************************************************************
-// xxx_stream helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpegPs::xxx_stream_Parse(ps_stream &Temp, int8u &stream_Count)
-{
- switch (stream_id)
- {
- case 0xBD :
- //case 0xBF :
- case 0xFD :
- //PTS
- if (Streams[stream_id].TimeStamp_End.PTS.TimeStamp!=(int64u)-1)
- {
- if (Streams[stream_id].Searching_TimeStamp_End)
- {
- Temp.TimeStamp_End.PTS.File_Pos=File_Offset+Buffer_Offset;
- Temp.TimeStamp_End.PTS.TimeStamp=Streams[stream_id].TimeStamp_End.PTS.TimeStamp;
- }
- if (Searching_TimeStamp_Start && Temp.Searching_TimeStamp_Start)
- {
- Temp.TimeStamp_Start.PTS.File_Pos=File_Offset+Buffer_Offset;
- Temp.TimeStamp_Start.PTS.TimeStamp=Streams[stream_id].TimeStamp_End.PTS.TimeStamp;
- Temp.Searching_TimeStamp_Start=false;
- }
- }
-
- //DTS
- if (Streams[stream_id].TimeStamp_End.DTS.TimeStamp!=(int64u)-1)
- {
- if (Streams[stream_id].Searching_TimeStamp_End)
- {
- Temp.TimeStamp_End.DTS.File_Pos=File_Offset+Buffer_Offset;
- Temp.TimeStamp_End.DTS.TimeStamp=Streams[stream_id].TimeStamp_End.DTS.TimeStamp;
- }
- if (Searching_TimeStamp_Start && Streams[stream_id].TimeStamp_End.DTS.TimeStamp!=(int64u)-1 && Temp.Searching_TimeStamp_Start)
- {
- Temp.TimeStamp_Start.DTS.TimeStamp=Streams[stream_id].TimeStamp_End.DTS.TimeStamp;
- Temp.Searching_TimeStamp_Start=false;
- }
- }
- default : ;
- }
-
- //Needed?
- if (Temp.Parsers.size()==1 && Temp.Parsers[0]->Status[IsFinished])
- {
- Skip_XX(Element_Size-Element_Offset, "data");
- return;
- }
-
- #if MEDIAINFO_TRACE
- if (stream_id==0xBD /*|| stream_id==0xBF*/)
- private_stream_1_Element_Info1();
- #endif //MEDIAINFO_TRACE
-
- for (size_t Pos=0; Pos<Temp.Parsers.size(); Pos++)
- if (Temp.Parsers[Pos] && !Temp.Parsers[Pos]->Status[IsFinished])
- {
- //PTS/DTS
- if (Temp.Parsers[Pos]->PTS_DTS_Needed)
- {
- if (FrameInfo.PCR!=(int64u)-1)
- Temp.Parsers[Pos]->FrameInfo.PCR=FrameInfo.PCR;
- if (FrameInfo.PTS!=(int64u)-1)
- Temp.Parsers[Pos]->FrameInfo.PTS=FrameInfo.PTS;
- if (FrameInfo.DTS!=(int64u)-1)
- Temp.Parsers[Pos]->FrameInfo.DTS=FrameInfo.DTS;
- }
-
- #if MEDIAINFO_TRACE
- if (Temp.Parsers.size()>1)
- Element_Begin1("Test");
- #endif //MEDIAINFO_TRACE
- #if MEDIAINFO_IBI
- Temp.Parsers[Pos]->Ibi_SynchronizationOffset_Current=Ibi_SynchronizationOffset_Current;
- #endif //MEDIAINFO_IBI
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- Temp.Parsers[Pos]->ServiceDescriptors=ServiceDescriptors;
- #endif
- Open_Buffer_Continue(Temp.Parsers[Pos], Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- if (IsSub && Temp.Parsers[Pos]->Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded=Temp.Parsers[Pos]->Frame_Count_NotParsedIncluded;
- if (!MustExtendParsingDuration && Temp.Parsers[Pos]->MustExtendParsingDuration)
- {
- SizeToAnalyze*=4; //Normally 4 seconds, now 16 seconds
- MustExtendParsingDuration=true;
- }
- #if MEDIAINFO_TRACE
- if (Temp.Parsers.size()>1)
- Element_End0();
- #endif //MEDIAINFO_TRACE
-
- if (Temp.Parsers.size()>1)
- {
- if (!Temp.Parsers[Pos]->Status[IsAccepted] && Temp.Parsers[Pos]->Status[IsFinished])
- {
- delete *(Temp.Parsers.begin()+Pos);
- Temp.Parsers.erase(Temp.Parsers.begin()+Pos);
- Pos--;
- }
- else if (Temp.Parsers.size()>1 && Temp.Parsers[Pos]->Status[IsAccepted])
- {
- File__Analyze* Parser=Temp.Parsers[Pos];
- for (size_t Pos2=0; Pos2<Temp.Parsers.size(); Pos2++)
- {
- if (Pos2!=Pos)
- delete *(Temp.Parsers.begin()+Pos2);
- }
- Temp.Parsers.clear();
- Temp.Parsers.push_back(Parser);
- }
- }
-
- if (Temp.Parsers.size()==1 && !Temp.IsFilled && Temp.Parsers[0]->Status[IsFilled])
- {
- stream_Count--;
- Temp.IsFilled=true;
- }
-
- //Checking cases with B-frames displayed before the first I-frame
- if (Temp.Parsers.size()==1 && Temp.Parsers[0]->PTS_Begin!=(int64u)-1 && Temp.TimeStamp_Start.PTS.TimeStamp!=(int64u)-1 && float64_int64s(((float64)Temp.Parsers[0]->PTS_Begin)*90/1000000)<Temp.TimeStamp_Start.PTS.TimeStamp)
- {
- Temp.TimeStamp_Start.PTS.File_Pos=File_Offset+Buffer_Offset-Header_Size;
- Temp.TimeStamp_Start.PTS.TimeStamp=float64_int64s(((float64)Temp.Parsers[0]->PTS_Begin)*90/1000000); //TODO: same denominator for the time stamp
- }
- }
- //FrameInfo.PCR=(int64u)-1;
- FrameInfo.DTS=(int64u)-1;
- FrameInfo.PTS=(int64u)-1;
- Element_Show();
-
- #if MEDIAINFO_EVENTS
- if (FrameInfo.DTS==(int64u)-1)
- FrameInfo.DTS=FrameInfo.PTS;
-
- //New PES
- #if MEDIAINFO_DEMUX
- if (PES_FirstByte_IsAvailable && PES_FirstByte_Value)
- {
- //Demux of substream data
- if (FromTS_stream_type==0x1B && SubStream_Demux)
- {
- if (!SubStream_Demux->Buffers.empty() && SubStream_Demux->Buffers[0] && SubStream_Demux->Buffers[0]->DTS<FrameInfo.DTS)
- {
- Demux(SubStream_Demux->Buffers[0]->Buffer, SubStream_Demux->Buffers[0]->Buffer_Size, ContentType_SubStream);
- delete SubStream_Demux->Buffers[0]->Buffer; SubStream_Demux->Buffers[0]->Buffer=NULL;
- SubStream_Demux->Buffers.erase(SubStream_Demux->Buffers.begin()); //Moving 2nd Buffer to 1st position
- }
- }
- }
-
- //Demux of SubStream
- if (FromTS_stream_type==0x20 && SubStream_Demux)
- {
- //Searching an available slot
- size_t Buffers_Pos;
- if (SubStream_Demux->Buffers.empty() || SubStream_Demux->Buffers[SubStream_Demux->Buffers.size()-1]->DTS!=FrameInfo.DTS)
- {
- Buffers_Pos=SubStream_Demux->Buffers.size();
- SubStream_Demux->Buffers.push_back(new demux::buffer);
- }
- else
- {
- Buffers_Pos=SubStream_Demux->Buffers.size()-1;
- }
-
- //Filling buffer
- if (SubStream_Demux->Buffers[Buffers_Pos]->Buffer==NULL)
- {
- SubStream_Demux->Buffers[Buffers_Pos]->DTS=FrameInfo.DTS;
- SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size_Max=128*1024;
- SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size=0;
- SubStream_Demux->Buffers[Buffers_Pos]->Buffer=new int8u[SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size_Max];
- }
- if (SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size_Max>SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size+(size_t)(Element_Size-Element_Offset) && SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size_Max<=16*1024*1024)
- {
- SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size_Max*=2;
- int8u* Buffer_Demux=SubStream_Demux->Buffers[Buffers_Pos]->Buffer;
- SubStream_Demux->Buffers[Buffers_Pos]->Buffer=new int8u[SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size_Max];
- std::memcpy(SubStream_Demux->Buffers[Buffers_Pos]->Buffer, Buffer_Demux, SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size);
- delete[] Buffer_Demux; //Buffer_Demux=NULL;
- }
- if (SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size+(size_t)(Element_Size-Element_Offset)<=SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size_Max)
- {
- std::memcpy(SubStream_Demux->Buffers[Buffers_Pos]->Buffer+SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- SubStream_Demux->Buffers[Buffers_Pos]->Buffer_Size+=(size_t)(Element_Size-Element_Offset);
- }
- }
- #endif //MEDIAINFO_DEMUX
- #endif //MEDIAINFO_EVENTS
-
- #if MEDIAINFO_SEEK && MEDIAINFO_IBI
- if (Seek_ID!=(int64u)-1)
- {
- if (Ibi.Streams[Seek_ID]->IsModified)
- {
- Read_Buffer_Seek(2, Seek_Value, Seek_ID);
- }
- else if (File_Offset+Buffer_Offset>=Seek_Value_Maximal)
- {
- //No intermediate seek point found, going to previous seek point
- for (size_t Pos=1; Pos<Ibi.Streams[Seek_ID]->Infos.size(); Pos++)
- if (Ibi.Streams[Seek_ID]->Infos[Pos].StreamOffset>=Seek_Value_Maximal)
- {
- if (Ibi.Streams[Seek_ID]->IsSynchronized)
- {
- //No intermediate point is possible
- Ibi.Streams[Seek_ID]->Infos[Pos-1].IsContinuous=true;
- Read_Buffer_Seek(2, Seek_Value, Seek_ID);
- }
- else
- {
- //Going to last known seek point
- GoTo(Ibi.Streams[Seek_ID]->Infos[Pos-1].StreamOffset);
- Open_Buffer_Unsynch();
- }
- break;
- }
- }
- }
- #endif //MEDIAINFO_SEEK && MEDIAINFO_IBI
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_MpegPs::Header_Parser_QuickSearch()
-{
- while ( Buffer_Offset+4<=Buffer_Size
- && CC3(Buffer+Buffer_Offset)==0x000001)
- {
- //Getting stream_id
- int8u stream_id=Buffer[Buffer_Offset+3];
-
- //Trace config
- #if MEDIAINFO_TRACE
- if (Config_Trace_Level)
- {
- if (stream_id==0xC0 || stream_id==0xE0)
- {
- if (!Trace_Layers[8])
- Trace_Layers_Update(8); //Stream
- }
- else
- Trace_Layers_Update(IsSub?1:0);
- }
- #endif //MEDIAINFO_TRACE
-
- //Searching start
- if (Streams[stream_id].Searching_Payload)
- {
- if (stream_id!=0xBD /*&& stream_id!=0xBF)*/ || !private_stream_1_IsDvdVideo) //Not (private_stream_1 and IsDvdVideo)
- return true;
-
- //private_stream_1 and IsDvdVideo, looking for substream ID
- if (Buffer_Offset+9>=Buffer_Size)
- return false; //Need more data
- size_t Data_Offset=Buffer[Buffer_Offset+8];
- if (Buffer_Offset+9+Data_Offset>=Buffer_Size)
- return false; //Need more data
- int8u private_stream_1_ID=Buffer[Buffer_Offset+9+Data_Offset];
- if (!Streams_Private1[private_stream_1_ID].StreamIsRegistred || Streams_Private1[private_stream_1_ID].Searching_Payload)
- return true;
- }
-
- //Searching TimeStamp_End
- if (Streams[stream_id].Searching_TimeStamp_End)
- {
- switch(stream_id)
- {
- //Element with no PES Header
- case 0xB9 : //MPEG_program_end
- case 0xBA : //pack_start
- case 0xBB : //system_header_start
- case 0xBC : //program_stream_map
- case 0xBE : //padding_stream
- case 0xBF : //private_stream_2
- case 0xF0 : //ECM
- case 0xF1 : //EMM
- case 0xF2 : //DSMCC Streams
- case 0xF8 : //ITU-T Rec. H .222.1 type E
- case 0xFF : //Program Streams directory
- break;
-
- //Element with PES Header
- default :
- if (MPEG_Version==1)
- {
- size_t Buffer_Offset_Temp=Buffer_Offset+6;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]==0xFF)
- {
- Buffer_Offset_Temp++;
- if (Buffer_Offset_Temp+1>=Buffer_Size)
- return false; //Not enough data
- }
- if (Buffer_Offset_Temp+1>=Buffer_Size)
- return false; //Not enough data
- if (Buffer_Offset_Temp<Buffer_Size && (Buffer[Buffer_Offset_Temp]&0xF0)!=0x00)
- return true; //With a PTS
- }
- if (MPEG_Version==2)
- {
- if (Buffer_Offset+8>Buffer_Size)
- return false; //Not enough buffer
- if ((Buffer[Buffer_Offset+7]&0xC0)!=0x00)
- return true; //With a PTS
- }
- }
- }
-
- //Getting size
- switch(stream_id)
- {
- //No size
- case 0xB9 : //MPEG_program_end
- case 0xBA : //pack_start
- Buffer_Offset+=4;
- while(Buffer_Offset+4<=Buffer_Size && !(CC3(Buffer+Buffer_Offset)==0x000001 && Buffer[Buffer_Offset+3]>=0xB9))
- {
- Buffer_Offset+=2;
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Buffer_Offset+=2;
- if (Buffer_Offset>=Buffer_Size || Buffer[Buffer_Offset-1]==0x00)
- Buffer_Offset--;
- }
- //Parsing last bytes if needed
- if (Buffer_Offset+4>Buffer_Size)
- {
- if (Buffer_Offset+3==Buffer_Size && CC3(Buffer+Buffer_Offset)!=0x000001)
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x0000)
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0x00)
- Buffer_Offset++;
- }
- break;
-
- //Element with size
- default :
- if (Buffer_Offset+6>=Buffer_Size)
- return false; //Not enough data
- int16u Size=CC2(Buffer+Buffer_Offset+4);
- if (Size>0)
- {
- Buffer_Offset+=6+Size;
-
- //Trailing 0xFF
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]==0xFF)
- Buffer_Offset++;
-
- //Trailing 0x00
- while(Buffer_Offset+3<=Buffer_Size
- && Buffer[Buffer_Offset+2]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset ]==0x00)
- Buffer_Offset++;
- }
- else
- {
- Buffer_Offset+=6;
- while(Buffer_Offset+4<=Buffer_Size && !(CC3(Buffer+Buffer_Offset)==0x000001 && Buffer[Buffer_Offset+3]>=0xB9))
- Buffer_Offset++;
- if (Buffer_Offset+4>Buffer_Size)
- {
- if (Buffer_Offset+3==Buffer_Size && CC3(Buffer+Buffer_Offset)!=0x000001)
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x0000)
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0x00)
- Buffer_Offset++;
- }
- }
- }
- }
-
- if (Buffer_Offset+3==Buffer_Size)
- return false; //Sync is OK, but stream_id is not available
- if (Buffer_Offset+4<=Buffer_Size)
- Trusted_IsNot("MPEG-PS, Synchronisation lost");
- Synched=false;
- return Synchronize();
-}
-
-//***************************************************************************
-// Parsers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_Mpegv()
-{
- //Filling
- #if defined(MEDIAINFO_MPEGV_YES)
- File_Mpegv* Parser=new File_Mpegv;
- Parser->MPEG_Version=MPEG_Version;
- Parser->ShouldContinueParsing=true;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "MPEG Video");
- switch (FromTS_stream_type)
- {
- case 0x01 : Parser->Fill(Stream_Video, 0, Video_Codec, "MPEG-1V");
- Parser->Fill(Stream_Video, 0, Video_Format_Version, "Version 1"); break;
- case 0x02 : Parser->Fill(Stream_Video, 0, Video_Codec, "MPEG-2V");
- Parser->Fill(Stream_Video, 0, Video_Format_Version, "Version 2"); break;
- default : Parser->Fill(Stream_Video, 0, Video_Codec, "MPEG-V");
- }
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_Mpeg4v()
-{
- //Filling
- #if defined(MEDIAINFO_MPEG4V_YES)
- File_Mpeg4v* Parser=new File_Mpeg4v;
- Parser->Frame_Count_Valid=1;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Codec, "MPEG-4V");
- Parser->Fill(Stream_Video, 0, Video_Format, "MPEG-4 Visual");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_Avc()
-{
- //Filling
- #if defined(MEDIAINFO_AVC_YES)
- File_Avc* Parser=new File_Avc;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Codec, "AVC");
- Parser->Fill(Stream_Video, 0, Video_Format, "AVC");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_Hevc()
-{
- //Filling
- #if defined(MEDIAINFO_HEVC_YES)
- File_Hevc* Parser=new File_Hevc;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Codec, "HEVC");
- Parser->Fill(Stream_Video, 0, Video_Format, "HEVC");
- #endif
- return Parser;
-}
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_VC1()
-{
- //Filling
- #if defined(MEDIAINFO_VC1_YES)
- File_Vc1* Parser=new File_Vc1;
- Parser->Frame_Count_Valid=30;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Codec, "VC-1");
- Parser->Fill(Stream_Video, 0, Video_Format, "VC-1");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_Dirac()
-{
- //Filling
- #if defined(MEDIAINFO_DIRAC_YES)
- File__Analyze* Parser=new File_Dirac;
- ((File_Dirac*)Parser)->Frame_Count_Valid=1;
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Codec, "Dirac");
- Parser->Fill(Stream_Video, 0, Video_Format, "Dirac");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_Mpega()
-{
- //Filling
- #if defined(MEDIAINFO_MPEGA_YES)
- File_Mpega* Parser=new File_Mpega;
- Parser->Frame_Count_Valid=1;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "MPEG Audio");
- switch (FromTS_stream_type)
- {
- case 0x03 : Parser->Fill(Stream_Audio, 0, Audio_Codec, "MPEG-1A");
- Parser->Fill(Stream_Audio, 0, Audio_Format_Version, "Version 1"); break;
- case 0x04 : Parser->Fill(Stream_Audio, 0, Audio_Codec, "MPEG-2A");
- Parser->Fill(Stream_Audio, 0, Audio_Format_Version, "Version 2"); break;
- default : Parser->Fill(Stream_Audio, 0, Audio_Codec, "MPEG-A"); break;
- }
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_Adts()
-{
- //Filling
- #if defined(MEDIAINFO_AAC_YES)
- File_Aac* Parser=new File_Aac;
- Parser->Mode=File_Aac::Mode_ADTS;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Codec, "AAC");
- Parser->Fill(Stream_Audio, 0, Audio_Format, "AAC");
- Parser->Fill(Stream_Audio, 0, Audio_MuxingMode, "ADTS");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_Latm()
-{
- //Filling
- #if defined(MEDIAINFO_AAC_YES)
- File_Aac* Parser=new File_Aac;
- Parser->Mode=File_Aac::Mode_LATM;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Codec, "AAC");
- Parser->Fill(Stream_Audio, 0, Audio_Format, "AAC");
- Parser->Fill(Stream_Audio, 0, Audio_MuxingMode, "LATM");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_AC3()
-{
- //Filling
- #if defined(MEDIAINFO_AC3_YES)
- File_Ac3* Parser=new File_Ac3();
- Parser->Frame_Count_Valid=2; //2 frames to be sure
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, private_stream_1_ID==0x83?"E-AC-3":"AC-3");
- Parser->Fill(Stream_Audio, 0, Audio_Codec, private_stream_1_ID==0x83?"AC3+":"AC3");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_DTS()
-{
- //Filling
- #if defined(MEDIAINFO_DTS_YES)
- File__Analyze* Parser=new File_Dts();
- ((File_Dts*)Parser)->Frame_Count_Valid=2;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "DTS");
- Parser->Fill(Stream_Audio, 0, Audio_Codec, "DTS");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_SDDS()
-{
- //Filling
- #if defined(MEDIAINFO_SDDS_YES)
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, StreamPos_Last, Audio_Format, "SDDS");
- Parser->Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "SDDS");
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "SDDS");
- Parser->Fill(Stream_Audio, 0, Audio_Codec, "SDDS");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_AAC()
-{
- //Filling
- #if defined(MEDIAINFO_AAC_YES)
- File_Aac* Parser=new File_Aac;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "AAC");
- Parser->Fill(Stream_Audio, 0, Audio_Codec, "AAC");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_PCM()
-{
- //Filling
- #if defined(MEDIAINFO_PCM_YES)
- File__Analyze* Parser;
- switch (FromTS_stream_type)
- {
- case 0x80 :
- Parser=new File_Pcm_M2ts();
- break;
- default :
- Parser=new File_Pcm_Vob();
- }
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "PCM");
- Parser->Fill(Stream_Audio, 0, Audio_Codec, "PCM");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_RLE()
-{
- //Filling
- #if defined(MEDIAINFO_RLE_YES)
- File__Analyze* Parser=new File_Rle();
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Text);
- Parser->Fill(Stream_Text, 0, Text_Format, "RLE");
- Parser->Fill(Stream_Text, 0, Text_Codec, "RLE");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_AribStdB24B37(bool HasCcis)
-{
- //Filling
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- File_AribStdB24B37* Parser=new File_AribStdB24B37();
- Parser->HasCcis=HasCcis;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Text);
- Parser->Fill(Stream_Text, 0, Text_Format, "ARIB STD B24/B37");
- Parser->Fill(Stream_Text, 0, Text_Codec, "ARIB STD B24/B37");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_DvbSubtitle()
-{
- //Filling
- #if defined(MEDIAINFO_DVBSUBTITLE_YES)
- File__Analyze* Parser=new File_DvbSubtitle();
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Text);
- Parser->Fill(Stream_Text, 0, Text_Format, "DVB Subtitle");
- Parser->Fill(Stream_Text, 0, Text_Codec, "DVB Subtitle");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_Teletext()
-{
- //Filling
- #if defined(MEDIAINFO_TELETEXT_YES)
- File__Analyze* Parser=new File_Teletext();
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Text);
- Parser->Fill(Stream_Text, 0, Text_Format, "Teletext");
- Parser->Fill(Stream_Text, 0, Text_Codec, "Teletext");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_PGS()
-{
- //Filling
- #if defined(MEDIAINFO_PGS_YES)
- File__Analyze* Parser=new File_Pgs();
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Text);
- Parser->Fill(Stream_Text, 0, Text_Format, "PGS");
- Parser->Fill(Stream_Text, 0, Text_Codec, "PGS");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_SmpteSt0302()
-{
- //Filling
- #if defined(MEDIAINFO_SMPTEST0302_YES)
- File_SmpteSt0302* Parser=new File_SmpteSt0302();
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Demux_UnpacketizeContainer=false; //No demux from this parser
- Demux_Level=4; //Intermediate
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "AES3");
- Parser->Fill(Stream_Audio, 0, Audio_Codec, "AES3");
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_PS2()
-{
- //Filling
- #if defined(MEDIAINFO_PS2A_YES)
- File__Analyze* Parser=new File_Ps2Audio();
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- #endif
- return Parser;
-}
-
-//---------------------------------------------------------------------------
-File__Analyze* File_MpegPs::ChooseParser_NULL()
-{
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- return Parser;
-}
-
-//***************************************************************************
-// Output_Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t File_MpegPs::Output_Buffer_Get (const String &Code)
-{
- //Parsing Parsers
- for (size_t Streams_Pos=0; Streams_Pos<Streams.size(); Streams_Pos++)
- for (size_t Pos=0; Pos<Streams[Streams_Pos].Parsers.size(); Pos++)
- if (Streams[Streams_Pos].Parsers[Pos])
- if (size_t Size=Streams[Streams_Pos].Parsers[Pos]->Output_Buffer_Get(Code))
- return Size;
-
- return 0;
-}
-
-//---------------------------------------------------------------------------
-size_t File_MpegPs::Output_Buffer_Get (size_t Pos_)
-{
- //Parsing Parsers
- for (size_t Streams_Pos=0; Streams_Pos<Streams.size(); Streams_Pos++)
- for (size_t Pos=0; Pos<Streams[Streams_Pos].Parsers.size(); Pos++)
- if (Streams[Streams_Pos].Parsers[Pos])
- if (size_t Size=Streams[Streams_Pos].Parsers[Pos]->Output_Buffer_Get(Pos_))
- return Size;
-
- return 0;
-}
-
-} //Namespace
-
-#endif //MEDIAINFO_MPEGPS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegPs.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegPs.h
deleted file mode 100644
index c15c5a9a7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegPs.h
+++ /dev/null
@@ -1,306 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_MpegPsH
-#define MediaInfo_MpegPsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/Multiple/File_Mpeg4_Descriptors.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Mpeg
-//***************************************************************************
-
-class File_MpegPs : public File__Analyze
-{
-public :
- //In
- bool FromTS; //Indicate if stream comes from TS
- int8u FromTS_stream_type; //ID from TS
- int32u FromTS_program_format_identifier; //Registration from TS
- int32u FromTS_format_identifier; //Registration from TS
- int8u FromTS_descriptor_tag; //Descriptor from TS
- int8u MPEG_Version; //MPEG Version (or automaticly detected)
- bool Searching_TimeStamp_Start;
- #ifdef MEDIAINFO_MPEG4_YES
- File__Analyze* ParserFromTs;
- File_Mpeg4_Descriptors::slconfig* SLConfig;
- #endif
- #if MEDIAINFO_DEMUX
- struct demux
- {
- struct buffer
- {
- int64u DTS;
- size_t Buffer_Size;
- size_t Buffer_Size_Max;
- int8u* Buffer;
-
- buffer()
- {
- DTS=(int64u)-1;
- Buffer_Size=0;
- Buffer_Size_Max=0;
- Buffer=NULL;
- }
-
- ~buffer()
- {
- delete[] Buffer;
- }
- };
- std::vector<buffer*> Buffers;
-
- demux()
- {
- }
-
- ~demux()
- {
- for (size_t Pos=0; Pos<Buffers.size(); Pos++)
- delete Buffers[Pos]; //Buffers[Pos]=NULL;
- }
- };
- demux* SubStream_Demux;
- int8u Demux_StreamIsBeingParsed_type;
- int8u Demux_StreamIsBeingParsed_stream_id;
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_SEEK
- int64u Unsynch_Frame_Count_Temp;
- #endif //MEDIAINFO_SEEK
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- bool FromAribStdB24B37;
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
-
- //Out
- bool HasTimeStamps;
-
- //Constructor/Destructor
- File_MpegPs();
- ~File_MpegPs();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Update();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin() {return FileHeader_Begin_0x000001();}
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Global
- void Read_Buffer_Init ();
- #if MEDIAINFO_ADVANCED2
- void Read_Buffer_SegmentChange();
- #endif //MEDIAINFO_ADVANCED2
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- void Read_Buffer_Continue ();
- void Read_Buffer_AfterParsing();
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parse_Fill_Size();
- bool Header_Parse_PES_packet(int8u stream_id);
- void Header_Parse_PES_packet_MPEG1(int8u stream_id);
- void Header_Parse_PES_packet_MPEG2(int8u stream_id);
- void Data_Parse();
- bool BookMark_Needed();
-
- //Packet
- void MPEG_program_end(); //0xB9
- void pack_start(); //0xBA
- void system_header_start(); //0xBB
- void program_stream_map(); //0xBC
- void private_stream_1(); //0xBD
- void padding_stream(); //0xBE
- void private_stream_2(); //0xBF
- void audio_stream(); //0xC0 --> 0xDF
- void video_stream(); //0xE0 --> 0xEF
- void SL_packetized_stream();//0xFA
- void extension_stream(); //0xFD
-
- //private_stream_1 specific
- bool private_stream_1_Choose_DVD_ID();
- File__Analyze* private_stream_1_ChooseParser();
- const ZenLib::Char* private_stream_1_ChooseExtension();
- #if MEDIAINFO_TRACE
- void private_stream_1_Element_Info1();
- #endif //MEDIAINFO_TRACE
- int8u private_stream_1_ID;
- size_t private_stream_1_Offset;
- bool private_stream_1_IsDvdVideo;
-
- //private_stream_2 specific
- void private_stream_2_TSHV_A0();
- void private_stream_2_TSHV_A1();
-
- //extension_stream specific
- const ZenLib::Char* extension_stream_ChooseExtension();
-
- //Count
- int8u video_stream_Count;
- int8u audio_stream_Count;
- int8u private_stream_1_Count;
- int8u private_stream_2_Count;
- int8u extension_stream_Count;
- int8u SL_packetized_stream_Count;
-
- //From packets
- int32u program_mux_rate;
-
- //PS
- struct ps_stream
- {
- struct Mpeg_TimeStamp
- {
- struct Mpeg_TimeStamp_TS
- {
- int64u File_Pos;
- int64u TimeStamp;
-
- Mpeg_TimeStamp_TS()
- {
- File_Pos=(int64u)-1;
- TimeStamp=(int64u)-1;
- }
- };
-
- Mpeg_TimeStamp_TS PTS;
- Mpeg_TimeStamp_TS DTS;
- };
-
- stream_t StreamKind;
- size_t StreamPos;
- int8u stream_type;
- int32u program_format_identifier;
- int32u format_identifier;
- int8u descriptor_tag;
- int8u DVD_Identifier;
- std::vector<File__Analyze*> Parsers; //Sometimes, we need to do parallel tests
- Mpeg_TimeStamp TimeStamp_Start;
- Mpeg_TimeStamp TimeStamp_End;
- size_t StreamIsRegistred;
- size_t StreamOrder;
- size_t FirstPacketOrder;
- bool Searching_Payload;
- bool Searching_TimeStamp_Start;
- bool Searching_TimeStamp_End;
- bool IsFilled;
-
- ps_stream()
- {
- StreamKind=Stream_Max;
- StreamPos=0;
- stream_type=0;
- program_format_identifier=0x00000000; //No info
- format_identifier=0x00000000; //No info
- descriptor_tag=0x00; //No info
- DVD_Identifier=0;
- StreamIsRegistred=0;
- StreamOrder=(size_t)-1;
- FirstPacketOrder=(size_t)-1;
- Searching_Payload=false;
- Searching_TimeStamp_Start=false;
- Searching_TimeStamp_End=false;
- IsFilled=false;
- }
-
- ~ps_stream()
- {
- for (size_t Pos=0; Pos<Parsers.size(); Pos++)
- delete Parsers[Pos]; //Parsers[Pos]=NULL;
- }
- };
- std::vector<ps_stream> Streams;
- std::vector<ps_stream> Streams_Private1; //There can have multiple streams in one private stream
- std::vector<ps_stream> Streams_Extension; //There can have multiple streams in one private stream
- int8u stream_id;
-
- //Temp
- int64u SizeToAnalyze; //Total size of a chunk to analyse, it may be changed by the parser
- int8u stream_id_extension;
- bool video_stream_Unlimited;
- int16u Buffer_DataSizeToParse;
- std::vector<int64u> video_stream_PTS;
- size_t StreamOrder_CountOfPrivateStreams_Minus1;
- size_t StreamOrder_CountOfPrivateStreams_Temp;
- size_t FirstPacketOrder_Last;
-
- //Helpers
- bool Header_Parser_QuickSearch();
-
- //Parsers
- File__Analyze* ChooseParser_Mpegv();
- File__Analyze* ChooseParser_Mpeg4v();
- File__Analyze* ChooseParser_Avc();
- File__Analyze* ChooseParser_Hevc();
- File__Analyze* ChooseParser_VC1();
- File__Analyze* ChooseParser_Dirac();
- File__Analyze* ChooseParser_Mpega();
- File__Analyze* ChooseParser_Adts();
- File__Analyze* ChooseParser_Latm();
- File__Analyze* ChooseParser_AC3();
- File__Analyze* ChooseParser_DTS();
- File__Analyze* ChooseParser_SDDS();
- File__Analyze* ChooseParser_AAC();
- File__Analyze* ChooseParser_PCM();
- File__Analyze* ChooseParser_SmpteSt0302();
- File__Analyze* ChooseParser_RLE();
- File__Analyze* ChooseParser_AribStdB24B37(bool HasCcis=false);
- File__Analyze* ChooseParser_DvbSubtitle();
- File__Analyze* ChooseParser_PGS();
- File__Analyze* ChooseParser_Teletext();
- File__Analyze* ChooseParser_PS2();
- File__Analyze* ChooseParser_NULL();
-
- //File__Analyze helpers
- enum kindofstream
- {
- KindOfStream_Main,
- KindOfStream_Private,
- KindOfStream_Extension,
- };
- void Streams_Fill_PerStream(size_t StreamID, ps_stream &Temp, kindofstream KindOfStream);
- void Streams_Finish_PerStream(size_t StreamID, ps_stream &Temp, kindofstream KindOfStream);
- void xxx_stream_Parse(ps_stream &Temp, int8u &stream_Count);
-
- //Output buffer
- size_t Output_Buffer_Get (const String &Value);
- size_t Output_Buffer_Get (size_t Pos);
-
- #if MEDIAINFO_SEEK
- std::map<int16u, int64u> Unsynch_Frame_Counts;
- int64u Seek_Value;
- int64u Seek_Value_Maximal;
- int64u Seek_ID;
- bool Duration_Detected;
- #endif //MEDIAINFO_SEEK
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs.cpp
deleted file mode 100644
index eb43afb1d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs.cpp
+++ /dev/null
@@ -1,3321 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGTS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_MpegTs.h"
-#include "MediaInfo/Multiple/File_MpegPs.h"
-#include "MediaInfo/Multiple/File_Mpeg_Descriptors.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "ZenLib/File.h"
-#include <memory>
-#include <algorithm>
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-#if MEDIAINFO_IBI
- #if MEDIAINFO_SEEK
- #include "MediaInfo/Multiple/File_Ibi.h"
- #endif //MEDIAINFO_SEEK
-#endif //MEDIAINFO_IBI
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-namespace Elements
-{
- const int32u HDMV=0x48444D56; //BluRay
-}
-
-
-#if !MEDIAINFO_ADVANCED
- const float64 Config_VbrDetection_Delta=0;
- const int64u Config_VbrDetection_Occurences=4;
-#endif // MEDIAINFO_ADVANCED
-
-const char* Scte128_tag (int8u tag)
-{
- switch (tag)
- {
- case 0x00: return "Forbidden";
- case 0x01: return "Used by DVB";
- case 0x02: return "AU_Information";
- case 0xDF: return "Registered";
- case 0xFF: return "Reserved";
- default : return tag<0xE0?"Reserved":"User private";
- }
-}
-//***************************************************************************
-// Depends of configuration
-//***************************************************************************
-
-#if !defined(MEDIAINFO_BDAV_YES)
- const size_t BDAV_Size=0;
-#endif
-#if !defined(MEDIAINFO_TSP_YES)
- const size_t TSP_Size=0;
-#endif
-#if !defined(MEDIAINFO_BDAV_YES) && !defined(MEDIAINFO_TSP_YES)
- const size_t TS_Size=188;
-#endif
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//From Mpeg_Psi
-extern const char* Mpeg_Descriptors_registration_format_identifier_Format(int32u format_identifier);
-extern stream_t Mpeg_Descriptors_registration_format_identifier_StreamKind(int32u format_identifier);
-
-extern const char* Mpeg_Psi_stream_type_Format(int8u stream_type, int32u format_identifier);
-extern const char* Mpeg_Psi_stream_type_Codec(int8u stream_type, int32u format_identifier);
-extern stream_t Mpeg_Psi_stream_type_StreamKind(int32u stream_type, int32u format_identifier);
-extern const char* Mpeg_Psi_stream_type_Info(int8u stream_type, int32u format_identifier);
-
-extern const char* Mpeg_Psi_table_id(int8u table_id);
-extern const char* Mpeg_Descriptors_stream_Format(int8u descriptor_tag, int32u format_identifier);
-extern const char* Mpeg_Descriptors_stream_Codec(int8u descriptor_tag, int32u format_identifier);
-extern stream_t Mpeg_Descriptors_stream_Kind(int8u descriptor_tag, int32u format_identifier);
-
-extern const char* Mpeg_Descriptors_CA_system_ID(int16u CA_system_ID);
-
-//---------------------------------------------------------------------------
-//DTS Neural (ETSI EN 300 468 v1.14+)
-const size_t MpegTs_DtsNeural_2_Count=9;
-const size_t MpegTs_DtsNeural_6_Count=4;
-
-const int8u MpegTs_DtsNeural_Channels_2[MpegTs_DtsNeural_2_Count]=
-{
- 0,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 6,
- 7,
-};
-
-const int8u MpegTs_DtsNeural_Channels_6[MpegTs_DtsNeural_6_Count]=
-{
- 0,
- 6,
- 7,
- 8,
-};
-
-const int8u MpegTs_DtsNeural_Channels(int8u Channels, int8u config_id)
-{
- if (config_id==0)
- return 0;
-
- switch (Channels)
- {
- case 2 :
- if (config_id>=MpegTs_DtsNeural_2_Count)
- return 0;
- return MpegTs_DtsNeural_Channels_2[config_id];
- case 6 :
- if (config_id>=MpegTs_DtsNeural_6_Count)
- return 0;
- return MpegTs_DtsNeural_Channels_6[config_id];
- default: return 0;
- }
-}
-
-const char* MpegTs_DtsNeural_ChannelPositions_2[MpegTs_DtsNeural_2_Count]=
-{
- "",
- "Front: L R, LFE",
- "Front: L C R, LFE",
- "Front: L R, Side: L R, LFE",
- "Front: L C R, Side: L R, LFE",
- "Front: L C R, Side: L R, Back: C, LFE",
- "Front: L C R, Side: L R, Back: L R, LFE",
- "Front: L R, Side: L R, Back: C, LFE",
- "Front: L R, Side: L R, Back: L R, LFE",
-};
-
-const char* MpegTs_DtsNeural_ChannelPositions_6[MpegTs_DtsNeural_6_Count]=
-{
- "",
- "Front: L C R, Side: L R",
- "Front: L C R, Side: L R, Back: C",
- "Front: L C R, Side: L R, Back: L R",
-};
-
-const char* MpegTs_DtsNeural_ChannelPositions(int8u Channels, int8u config_id)
-{
- if (config_id==0)
- return "";
-
- switch (Channels)
- {
- case 2 :
- if (config_id>=MpegTs_DtsNeural_2_Count)
- return "";
- return MpegTs_DtsNeural_ChannelPositions_2[config_id];
- case 6 :
- if (config_id>=MpegTs_DtsNeural_6_Count)
- return "";
- return MpegTs_DtsNeural_ChannelPositions_6[config_id];
- default: return "";
- }
-}
-
-const char* MpegTs_DtsNeural_ChannelPositions2_2[MpegTs_DtsNeural_2_Count]=
-{
- "",
- "2/0/0.1",
- "3/0/0.1",
- "2/2/0.1",
- "3/2/0.1",
- "3/2/1.1",
- "3/2/2.1",
- "2/2/1.1",
- "2/2/2.1",
-};
-
-const char* MpegTs_DtsNeural_ChannelPositions2_6[MpegTs_DtsNeural_6_Count]=
-{
- "",
- "3/2/0.1",
- "3/2/1.1",
- "3/2/2.1",
-};
-
-const char* MpegTs_DtsNeural_ChannelPositions2(int8u Channels, int8u config_id)
-{
- if (config_id==0)
- return "";
-
- switch (Channels)
- {
- case 2 :
- if (config_id>=MpegTs_DtsNeural_2_Count)
- return "";
- return MpegTs_DtsNeural_ChannelPositions2_2[config_id];
- case 6 :
- if (config_id>=MpegTs_DtsNeural_6_Count)
- return "";
- return MpegTs_DtsNeural_ChannelPositions2_6[config_id];
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-Ztring Decimal_Hexa(int64u Number)
-{
- Ztring Temp;
- Temp.From_Number(Number);
- Temp+=__T(" (0x");
- Temp+=Ztring::ToZtring(Number, 16);
- Temp+=__T(")");
- return Temp;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_MpegTs::File_MpegTs()
-#if MEDIAINFO_DUPLICATE
-:File__Duplicate()
-#endif //MEDIAINFO_DUPLICATE
-{
- //Configuration
- ParserName=__T("MpegTs");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_MpegTs;
- StreamIDs_Width[0]=4;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=4; //Intermediate
- #endif //MEDIAINFO_DEMUX
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
- Trusted_Multiplier=2;
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Internal config
- #if defined(MEDIAINFO_BDAV_YES)
- BDAV_Size=0; //No BDAV header
- #endif
- #if defined(MEDIAINFO_TSP_YES)
- TSP_Size=0; //No TSP footer
- #endif
- #ifdef MEDIAINFO_ARIBSTDB24B37_YES
- FromAribStdB24B37=false;
- #endif
-
- //Data
- MpegTs_JumpTo_Begin=MediaInfoLib::Config.MpegTs_MaximumOffset_Get();
- MpegTs_JumpTo_End=MediaInfoLib::Config.MpegTs_MaximumOffset_Get()/4;
- Searching_TimeStamp_Start=true;
- Complete_Stream=NULL;
- Begin_MaxDuration=MediaInfoLib::Config.ParseSpeed_Get()>=0.8?(int64u)-1:MediaInfoLib::Config.MpegTs_MaximumScanDuration_Get()*27/1000;
- ForceStreamDisplay=MediaInfoLib::Config.MpegTs_ForceStreamDisplay_Get();
-
- #if MEDIAINFO_SEEK
- Seek_Value=(int64u)-1;
- Seek_ID=(int64u)-1;
- InfiniteLoop_Detect=0;
- Duration_Detected=false;
- #endif //MEDIAINFO_SEEK
-}
-
-File_MpegTs::~File_MpegTs ()
-{
- delete Complete_Stream; Complete_Stream=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, BDAV_Size?"BDAV":(TSP_Size?"MPEG-TS 188+16":"MPEG-TS"), Unlimited, true, true);
-
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet())
- Config->Demux_EventWasSent=true;
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
-
- if (!IsSub)
- TestContinuousFileNames();
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Streams_Fill ()
-{
- Status[User_20]=true;
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Streams_Update()
-{
- if (Status[User_19])
- Streams_Update_Programs();
-
- if (Status[User_18])
- Streams_Update_EPG();
-
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- if (Status[User_16])
- Streams_Update_Duration_Update();
- #endif //MEDIAINFO_MPEGTS_PCR_YES
-
- if (Status[User_17])
- Streams_Update_Duration_End();
-
- if (File_Name.empty() && Config->ParseSpeed>=1.0)
- Fill(Stream_General, 0, General_FileSize, (File_Offset+Buffer_Offset!=File_Size)?Buffer_TotalBytes:File_Size, 10, true);
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Streams_Update_Programs()
-{
- //Per stream
- bool PerStream_AlwaysParse=ForceStreamDisplay;
- if (!PerStream_AlwaysParse)
- {
- size_t Programs_Size=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.size();
- PerStream_AlwaysParse=true;
- if (Programs_Size<=2)
- {
- //Testing if it is a Blu-ray
- for (complete_stream::transport_stream::programs::iterator Program=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.begin(); Program!=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.end(); ++Program)
- if (Program->first!=0x0000 && Program->second.registration_format_identifier!=Elements::HDMV)
- {
- PerStream_AlwaysParse=false;
- break;
- }
- }
- }
- for (std::set<int16u>::iterator StreamID=Complete_Stream->PES_PIDs.begin(); StreamID!=Complete_Stream->PES_PIDs.end(); ++StreamID)
- if (PerStream_AlwaysParse || Complete_Stream->Streams[*StreamID]->IsUpdated_IsRegistered || Complete_Stream->Streams[*StreamID]->IsUpdated_Info)
- {
- Streams_Update_Programs_PerStream(*StreamID);
- Complete_Stream->Streams[*StreamID]->IsUpdated_IsRegistered=false;
- Complete_Stream->Streams[*StreamID]->IsUpdated_Info=false;
- }
-
- //Fill General
- if (Complete_Stream->transport_stream_id_IsValid)
- {
- Fill(Stream_General, 0, General_ID, Complete_Stream->transport_stream_id, 10, true);
- Fill(Stream_General, 0, General_ID_String, Decimal_Hexa(Complete_Stream->transport_stream_id), true);
- }
- if (!Complete_Stream->network_name.empty())
- {
- Fill(Stream_General, 0, General_NetworkName, Complete_Stream->network_name, true);
- Complete_Stream->network_name.clear();
- }
- if (!Complete_Stream->original_network_name.empty())
- {
- Fill(Stream_General, 0, General_OriginalNetworkName, Complete_Stream->original_network_name, true);
- Complete_Stream->original_network_name.clear();
- }
- Ztring Countries;
- Ztring TimeZones;
- for (std::map<Ztring, Ztring>::iterator TimeZone=Complete_Stream->TimeZones.begin(); TimeZone!=Complete_Stream->TimeZones.end(); ++TimeZone)
- {
- Countries+=TimeZone->first+__T(" / ");
- TimeZones+=TimeZone->second+__T(" / ");
- }
- if (!Countries.empty())
- {
- Countries.resize(Countries.size()-3);
- Fill(Stream_General, 0, General_Country, Countries, true);
- Complete_Stream->TimeZones.clear();
- }
- if (!TimeZones.empty())
- {
- TimeZones.resize(TimeZones.size()-3);
- Fill(Stream_General, 0, General_TimeZone, TimeZones, true);
- Complete_Stream->TimeZones.clear();
- }
- if (!Complete_Stream->Duration_Start.empty())
- {
- Fill(Stream_General, 0, General_Duration_Start, Complete_Stream->Duration_Start, true);
- Complete_Stream->Duration_Start.clear();
- }
- complete_stream::transport_streams::iterator Transport_Stream=Complete_Stream->transport_stream_id_IsValid?Complete_Stream->Transport_Streams.find(Complete_Stream->transport_stream_id):Complete_Stream->Transport_Streams.end();
- if (Transport_Stream!=Complete_Stream->Transport_Streams.end())
- {
- //TS info
- for (std::map<std::string, ZenLib::Ztring>::iterator Info=Transport_Stream->second.Infos.begin(); Info!=Transport_Stream->second.Infos.end(); ++Info)
- Fill(Stream_General, 0, Info->first.c_str(), Info->second, true);
- Transport_Stream->second.Infos.clear();
-
- //Per source (ATSC)
- if (Transport_Stream->second.source_id_IsValid)
- {
- complete_stream::sources::iterator Source=Complete_Stream->Sources.find(Transport_Stream->second.source_id);
- if (Source!=Complete_Stream->Sources.end())
- {
- if (!Source->second.texts.empty())
- {
- Ztring Texts;
- for (std::map<int16u, Ztring>::iterator text=Source->second.texts.begin(); text!=Source->second.texts.end(); ++text)
- Texts+=text->second+__T(" - ");
- if (!Texts.empty())
- Texts.resize(Texts.size()-3);
- Fill(Stream_General, 0, General_ServiceProvider, Texts);
- }
- }
- }
-
- //Per program
- for (complete_stream::transport_stream::programs::iterator Program=Transport_Stream->second.Programs.begin(); Program!=Transport_Stream->second.Programs.end(); ++Program)
- {
- if (Program->second.IsParsed)
- {
- //Per pid
- Ztring Languages, Codecs, Formats, StreamKinds, StreamPoss, elementary_PIDs, elementary_PIDs_String, Delay, LawRating, Title;
- for (size_t Pos=0; Pos<Program->second.elementary_PIDs.size(); Pos++)
- {
- int16u elementary_PID=Program->second.elementary_PIDs[Pos];
- if (PerStream_AlwaysParse || Complete_Stream->Streams[elementary_PID]->IsRegistered)
- {
- Ztring Format=Retrieve(Complete_Stream->Streams[elementary_PID]->StreamKind, Complete_Stream->Streams[elementary_PID]->StreamPos, Fill_Parameter(Complete_Stream->Streams[elementary_PID]->StreamKind, Generic_Format));
- if (Format.empty())
- Format=Mpeg_Psi_stream_type_Format(Complete_Stream->Streams[elementary_PID]->stream_type, Program->second.registration_format_identifier);
- if (Format.empty())
- {
- std::map<std::string, Ztring>::iterator Format_FromInfo=Complete_Stream->Streams[elementary_PID]->Infos.find("Format");
- if (Format_FromInfo!=Complete_Stream->Streams[elementary_PID]->Infos.end())
- Format=Format_FromInfo->second;
- }
- if (Format.empty())
- Program->second.HasNotDisplayableStreams=true;
- Formats+=Format+__T(" / ");
- Codecs+=Retrieve(Complete_Stream->Streams[elementary_PID]->StreamKind, Complete_Stream->Streams[elementary_PID]->StreamPos, Fill_Parameter(Complete_Stream->Streams[elementary_PID]->StreamKind, Generic_Codec))+__T(" / ");
- if (Complete_Stream->Streams[elementary_PID]->StreamKind!=Stream_Max)
- {
- StreamKinds+=Ztring::ToZtring(Complete_Stream->Streams[elementary_PID]->StreamKind);
- StreamPoss+=Ztring::ToZtring(Complete_Stream->Streams[elementary_PID]->StreamPos);
- }
- StreamKinds+=__T(" / ");
- StreamPoss+=__T(" / ");
- elementary_PIDs+=Ztring::ToZtring(elementary_PID)+__T(" / ");
- Ztring Language=Retrieve(Complete_Stream->Streams[elementary_PID]->StreamKind, Complete_Stream->Streams[elementary_PID]->StreamPos, "Language/String");
- Languages+=Language+__T(" / ");
- Ztring List_String=Decimal_Hexa(elementary_PID);
- List_String+=__T(" (");
- List_String+=Format;
- if (!Language.empty())
- {
- List_String+=__T(", ");
- List_String+=Language;
- }
- List_String+=__T(")");
- elementary_PIDs_String+=List_String+__T(" / ");
-
- if (Complete_Stream->Streams[elementary_PID]->IsPCR)
- {
- Delay=Ztring::ToZtring(((float64)Complete_Stream->Streams[elementary_PID]->TimeStamp_Start)/27000, 6);
- }
-
- //Law rating
- if (Complete_Stream->Streams[elementary_PID] && Complete_Stream->Streams[elementary_PID]->Parser)
- {
- Ztring LawRating_Temp=Complete_Stream->Streams[elementary_PID]->Parser->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating_Temp.empty())
- LawRating+=LawRating_Temp+__T(" / ");;
- Ztring Title_Temp=Complete_Stream->Streams[elementary_PID]->Parser->Retrieve(Stream_General, 0, General_Title);
- if (!Title_Temp.empty())
- Title+=Title_Temp+__T(" / ");
- }
- }
- }
-
- if (Program->second.Update_Needed_Info || Program->second.Update_Needed_IsRegistered || Program->second.Update_Needed_StreamCount || Program->second.Update_Needed_StreamPos)
- {
- if (!Transport_Stream->second.Programs.empty()
- && (Transport_Stream->second.Programs.size()>1
- || Transport_Stream->second.Programs.begin()->second.HasNotDisplayableStreams
- || !Transport_Stream->second.Programs.begin()->second.Infos.empty()
- || !Transport_Stream->second.Programs.begin()->second.DVB_EPG_Blocks.empty()
- || (Transport_Stream->second.Programs.begin()->second.source_id_IsValid && Complete_Stream->Sources.find(Transport_Stream->second.Programs.begin()->second.source_id)!=Complete_Stream->Sources.end())
- || Config->File_MpegTs_ForceMenu_Get()))
- {
- if (Program->second.StreamPos==(size_t)-1)
- {
- size_t StreamPos=(size_t)-1;
- for (size_t program_number=0; program_number<Complete_Stream->program_number_Order.size(); program_number++)
- if (Program->first<Complete_Stream->program_number_Order[program_number])
- {
- StreamPos=program_number;
- for (size_t program_number2=program_number; program_number2<Complete_Stream->program_number_Order.size(); program_number2++)
- Transport_Stream->second.Programs[Complete_Stream->program_number_Order[program_number2]].StreamPos++;
- Complete_Stream->program_number_Order.insert(Complete_Stream->program_number_Order.begin()+program_number, Program->first);
- break;
- }
- if (StreamPos==(size_t)-1)
- {
- Complete_Stream->program_number_Order.push_back(Program->first);
- }
-
- Stream_Prepare(Stream_Menu, StreamPos);
- Program->second.StreamPos=StreamPos_Last;
- }
- else
- StreamPos_Last=Program->second.StreamPos;
- Fill(Stream_Menu, StreamPos_Last, Menu_ID, Program->second.pid, 10, true);
- Fill(Stream_Menu, StreamPos_Last, Menu_ID_String, Decimal_Hexa(Program->second.pid), true);
- Fill(Stream_Menu, StreamPos_Last, Menu_MenuID, Program->first, 10, true);
- Fill(Stream_Menu, StreamPos_Last, Menu_MenuID_String, Decimal_Hexa(Program->first), true);
- Clear(Stream_Menu, StreamPos_Last, General_StreamOrder);
- for (size_t programs_List_Pos=0; programs_List_Pos<Transport_Stream->second.programs_List.size(); ++programs_List_Pos)
- if (Transport_Stream->second.programs_List[programs_List_Pos]==Program->first)
- Fill(Stream_Menu, StreamPos_Last, General_StreamOrder, programs_List_Pos);
- for (std::map<std::string, ZenLib::Ztring>::iterator Info=Program->second.Infos.begin(); Info!=Program->second.Infos.end(); ++Info)
- Fill(Stream_Menu, StreamPos_Last, Info->first.c_str(), Info->second, true);
- Program->second.Infos.clear();
- for (std::map<std::string, ZenLib::Ztring>::iterator Info=Program->second.ExtraInfos_Content.begin(); Info!=Program->second.ExtraInfos_Content.end(); ++Info)
- Fill(Stream_Menu, StreamPos_Last, Info->first.c_str(), Info->second, true);
- Program->second.ExtraInfos_Content.clear();
- for (std::map<std::string, ZenLib::Ztring>::iterator Info=Program->second.ExtraInfos_Option.begin(); Info!=Program->second.ExtraInfos_Option.end(); ++Info)
- (*Stream_More)[Stream_Menu][StreamPos_Last](Ztring().From_Local(Info->first.c_str()), Info_Options)=Info->second;
- Program->second.ExtraInfos_Option.clear();
-
- if (!Formats.empty())
- Formats.resize(Formats.size()-3);
- Fill(Stream_Menu, StreamPos_Last, Menu_Format, Formats, true);
- if (!Codecs.empty())
- Codecs.resize(Codecs.size()-3);
- Fill(Stream_Menu, StreamPos_Last, Menu_Codec, Codecs, true);
- if (!StreamKinds.empty())
- StreamKinds.resize(StreamKinds.size()-3);
- Fill(Stream_Menu, StreamPos_Last, Menu_List_StreamKind, StreamKinds, true);
- if (!elementary_PIDs_String.empty())
- elementary_PIDs_String.resize(elementary_PIDs_String.size()-3);
- Fill(Stream_Menu, StreamPos_Last, Menu_List_String, elementary_PIDs_String, true);
- if (!elementary_PIDs.empty())
- elementary_PIDs.resize(elementary_PIDs.size()-3);
- Fill(Stream_Menu, StreamPos_Last, Menu_List, elementary_PIDs, true);
- if (!StreamPoss.empty())
- StreamPoss.resize(StreamPoss.size()-3);
- Fill(Stream_Menu, StreamPos_Last, Menu_List_StreamPos, StreamPoss, true);
- if (!Languages.empty())
- Languages.resize(Languages.size()-3);
- Fill(Stream_Menu, StreamPos_Last, Menu_Language, Languages, true);
- if (!LawRating.empty())
- LawRating.resize(LawRating.size()-3);
- Fill(Stream_Menu, StreamPos_Last, "LawRating", LawRating, true);
- if (StreamPos_Last)
- Clear(Stream_General, 0, General_LawRating); //More than 1 menu, can not be in General part
- if (!Title.empty())
- Title.resize(Title.size()-3);
- Fill(Stream_Menu, StreamPos_Last, "Title", Title, true);
- if (StreamPos_Last)
- Clear(Stream_General, 0, General_Title); //More than 1 menu, can not be in General part
- }
- }
-
- //Delay
- if (Program->second.Update_Needed_IsRegistered)
- {
- switch (Count_Get(Stream_Menu))
- {
- case 0 : Fill(Stream_General, 0, General_Delay, Delay, true); break;
- default: Fill(Stream_Menu, StreamPos_Last, Menu_Delay, Delay, true); break;
- }
- Program->second.Update_Needed_IsRegistered=false;
- }
- if (Count_Get(Stream_Menu)==2)
- Clear(Stream_General, 0, General_Delay); //Not valid, multiple menus
- }
- }
- }
-
- //Commercial name
- if (Count_Get(Stream_Video)==1
- && Count_Get(Stream_Audio)==1
- && Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video")
- && Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny).find(__T("HDV"))==0
- && Retrieve(Stream_Audio, 0, Audio_Format)==__T("MPEG Audio")
- && Retrieve(Stream_Audio, 0, Audio_Format_Version)==__T("Version 1")
- && Retrieve(Stream_Audio, 0, Audio_Format_Profile)==__T("Layer 2")
- && Retrieve(Stream_Audio, 0, Audio_BitRate)==__T("384000"))
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny));
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Streams_Update_Programs_PerStream(size_t StreamID)
-{
- complete_stream::stream* Temp=Complete_Stream->Streams[StreamID];
-
- //No direct handling of Sub streams;
- if (Temp->stream_type==0x20 && Temp->SubStream_pid) //Stereoscopic is not alone
- return;
-
- if (Temp->Parser)
- Temp->Parser->Open_Buffer_Update();
-
- //Merging from a previous merge
- size_t Count;
- if (Temp->StreamKind != Stream_Max && Temp->StreamPos != (size_t)-1 && Temp->Parser)
- {
- Count=1; //TODO: more than 1
- Merge(*Temp->Parser, Temp->StreamKind, 0, Temp->StreamPos);
- StreamKind_Last=Temp->StreamKind;
- StreamPos_Last=Temp->StreamPos;
- }
- else
- {
- //By the parser
- StreamKind_Last=Stream_Max;
- Count=0;
- if (Temp->Parser && Temp->Parser->Status[IsAccepted])
- {
- if (Temp->SubStream_pid!=0x0000) //With a substream
- Fill(Complete_Stream->Streams[Temp->SubStream_pid]->Parser);
- if (Temp->Parser->Count_Get(Stream_Video) && Temp->Parser->Count_Get(Stream_Text))
- {
- //Special case: Video and Text are together
- Stream_Prepare(Stream_Video);
- Count=Merge(*Temp->Parser, Stream_Video, 0, StreamPos_Last);
- }
- else
- Count=Merge(*Temp->Parser);
-
- //More from the FMC parser
- if (Temp->FMC_ES_ID_IsValid)
- {
- complete_stream::transport_stream::iod_ess::iterator IOD_ES=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs.find(Temp->FMC_ES_ID);
- if (IOD_ES!=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs.end() && IOD_ES->second.Parser)
- {
- Finish(IOD_ES->second.Parser);
- Count=Merge(*IOD_ES->second.Parser, StreamKind_Last, StreamPos_Last, 0);
- }
- }
-
- //LATM
- complete_stream::transport_stream::iod_ess::iterator IOD_ES=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs.find(Complete_Stream->Streams[StreamID]->FMC_ES_ID);
- #ifdef MEDIAINFO_MPEG4_YES
- if (IOD_ES!=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs.end() && IOD_ES->second.SLConfig && Retrieve(Stream_Audio, StreamPos_Last, Audio_MuxingMode).empty())
- Fill(Stream_Audio, StreamPos_Last, Audio_MuxingMode, "SL");
- #endif
- if (Complete_Stream->Streams[StreamID]->stream_type==0x11 && Retrieve(Stream_Audio, StreamPos_Last, Audio_MuxingMode).empty())
- Fill(Stream_Audio, StreamPos_Last, Audio_MuxingMode, "LATM");
- }
-
- //By the descriptors
- if (StreamKind_Last==Stream_Max && Complete_Stream->transport_stream_id_IsValid && !Temp->program_numbers.empty() && !Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.empty())
- {
- int32u format_identifier=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Temp->program_numbers[0]].registration_format_identifier;
- if (Temp->IsRegistered
- && Mpeg_Descriptors_registration_format_identifier_StreamKind(format_identifier)!=Stream_Max)
- {
- StreamKind_Last=Mpeg_Descriptors_registration_format_identifier_StreamKind(format_identifier);
- Stream_Prepare(StreamKind_Last);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), Mpeg_Descriptors_registration_format_identifier_Format(format_identifier));
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), Mpeg_Descriptors_registration_format_identifier_Format(format_identifier));
- Count=1;
- }
- }
-
- //By registration_format_identifier
- if (StreamKind_Last==Stream_Max && Temp->registration_format_identifier && Temp->IsRegistered && Mpeg_Descriptors_registration_format_identifier_StreamKind(Temp->registration_format_identifier)!=Stream_Max)
- {
- StreamKind_Last=Mpeg_Descriptors_registration_format_identifier_StreamKind(Temp->registration_format_identifier);
- Stream_Prepare(StreamKind_Last);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), Mpeg_Descriptors_registration_format_identifier_Format(Temp->registration_format_identifier));
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), Mpeg_Descriptors_registration_format_identifier_Format(Temp->registration_format_identifier));
- Count=1;
- }
-
- //By the stream_type
- if (StreamKind_Last==Stream_Max && Complete_Stream->transport_stream_id_IsValid && !Temp->program_numbers.empty() && !Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.empty())
- {
- int32u format_identifier=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Temp->program_numbers[0]].registration_format_identifier;
- if (Mpeg_Psi_stream_type_StreamKind(Temp->stream_type, format_identifier)!=Stream_Max && (Temp->IsRegistered || ForceStreamDisplay || format_identifier==Elements::HDMV))
- {
- StreamKind_Last=Mpeg_Psi_stream_type_StreamKind(Temp->stream_type, format_identifier);
- if (StreamKind_Last==Stream_General && Temp->Parser) //Only information, no streams
- {
- Merge (*Temp->Parser, Stream_General, 0, 0);
- StreamKind_Last=Stream_Max;
- }
- Stream_Prepare(StreamKind_Last);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), Mpeg_Psi_stream_type_Format(Temp->stream_type, format_identifier));
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), Mpeg_Psi_stream_type_Codec(Temp->stream_type, format_identifier));
- Count=1;
- }
- }
-
- //By the StreamKind
- if (StreamKind_Last==Stream_Max && Temp->StreamKind_FromDescriptor!=Stream_Max && (Temp->IsRegistered || ForceStreamDisplay || (!Temp->program_numbers.empty() && Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Temp->program_numbers[0]].registration_format_identifier==Elements::HDMV)))
- {
- Stream_Prepare(Temp->StreamKind_FromDescriptor);
- Count=1;
- }
- }
-
- //More info
- if (StreamKind_Last!=Stream_Max)
- {
- for (size_t StreamPos=StreamPos_Last+1-Count; StreamPos<=StreamPos_Last; StreamPos++)
- {
- Temp->StreamKind=StreamKind_Last;
- Temp->StreamPos=StreamPos;
-
- //Encryption
- if (Temp->CA_system_ID)
- Fill(StreamKind_Last, StreamPos, "Encryption", Mpeg_Descriptors_CA_system_ID(Temp->CA_system_ID));
- else if (Temp->IsScrambled>16)
- Fill(StreamKind_Last, StreamPos, "Encryption", "Encrypted");
-
- //TS info
- for (std::map<std::string, ZenLib::Ztring>::iterator Info=Temp->Infos.begin(); Info!=Temp->Infos.end(); ++Info)
- {
- if (Retrieve(StreamKind_Last, StreamPos, Info->first.c_str()).empty())
- {
- //Special case : DTS Neural
- if (StreamKind_Last==Stream_Audio && Info->first=="Matrix_ChannelPositions" && Info->second.find(__T("DTS Neural Audio "))==0)
- {
- int8u Channels=Retrieve(Stream_Audio, StreamPos, Audio_Channel_s_).To_int8u();
- if (Channels)
- {
- int8u config_id=Ztring(Info->second.substr(17, string::npos)).To_int8u();
- int8u Matrix_Channels=MpegTs_DtsNeural_Channels(Channels, config_id);
- if (Matrix_Channels)
- {
- Fill(Stream_Audio, StreamPos, Audio_Matrix_Channel_s_, Matrix_Channels);
- Fill(Stream_Audio, StreamPos, Audio_Matrix_ChannelPositions, MpegTs_DtsNeural_ChannelPositions(Channels, config_id));
- Fill(Stream_Audio, StreamPos, Audio_ChannelPositions_String2, MpegTs_DtsNeural_ChannelPositions2(Channels, config_id));
- }
- }
-
- }
- else
- Fill(StreamKind_Last, StreamPos, Info->first.c_str(), Info->second, true);
- }
- }
- Temp->Infos.clear();
- for (std::map<std::string, ZenLib::Ztring>::iterator Info=Temp->Infos_Option.begin(); Info!=Temp->Infos_Option.end(); ++Info)
- (*Stream_More)[StreamKind_Last][StreamPos](Ztring().From_Local(Info->first.c_str()), Info_Options)=Info->second;
- Temp->Infos_Option.clear();
-
- //Common
- if (Temp->SubStream_pid!=0x0000) //Wit a substream
- {
- Ztring Format_Profile=Retrieve(Stream_Video, StreamPos, Video_Format_Profile);
- Fill(Stream_Video, StreamPos, Video_ID, Ztring::ToZtring(Temp->SubStream_pid)+__T(" / ")+Ztring::ToZtring(StreamID), true);
- Fill(Stream_Video, StreamPos, Video_ID_String, Decimal_Hexa(Temp->SubStream_pid)+__T(" / ")+Decimal_Hexa(StreamID), true);
- if (!Format_Profile.empty() && Complete_Stream->Streams[Temp->SubStream_pid] && Complete_Stream->Streams[Temp->SubStream_pid]->Parser)
- Fill(Stream_Video, StreamPos, Video_Format_Profile, Complete_Stream->Streams[Temp->SubStream_pid]->Parser->Retrieve(Stream_Video, 0, Video_Format_Profile)+__T(" / ")+Format_Profile, true);
- }
- else if (Count>1 || (StreamKind_Last==Stream_Text && Retrieve(StreamKind_Last, StreamPos, General_ID).find(__T('-'))!=string::npos))
- {
- Ztring ID=Retrieve(StreamKind_Last, StreamPos, General_ID);
- size_t ID_Pos=ID.find(__T('-'));
- if (ID_Pos!=string::npos)
- ID.erase(ID.begin(), ID.begin()+ID_Pos+1); //Removing the PS part
- Ztring ID_String=Retrieve(StreamKind_Last, StreamPos, General_ID_String);
- size_t ID_String_Pos=ID_String.find(__T('-'));
- if (ID_String_Pos!=string::npos)
- ID_String.erase(ID_String.begin(), ID_String.begin()+ID_String_Pos+1); //Removing the PS part
- #ifdef MEDIAINFO_ARIBSTDB24B37_YES
- if (FromAribStdB24B37)
- {
- Fill(StreamKind_Last, StreamPos, General_ID, ID, true);
- Fill(StreamKind_Last, StreamPos, General_ID_String, ID_String, true);
- }
- else
- #endif //MEDIAINFO_ARIBSTDB24B37_YES
- {
- Fill(StreamKind_Last, StreamPos, General_ID, Ztring::ToZtring(StreamID)+__T('-')+ID, true);
- Fill(StreamKind_Last, StreamPos, General_ID_String, Decimal_Hexa(StreamID)+__T('-')+ID_String, true);
- }
- }
- else
- {
- Fill(StreamKind_Last, StreamPos, General_ID, StreamID, 10, true);
- Fill(StreamKind_Last, StreamPos, General_ID_String, Decimal_Hexa(StreamID), true);
- }
- for (size_t Pos=0; Pos<Temp->program_numbers.size(); Pos++)
- {
- Fill(StreamKind_Last, StreamPos, General_MenuID, Temp->program_numbers[Pos], 10, Pos==0);
- Fill(StreamKind_Last, StreamPos, General_MenuID_String, Decimal_Hexa(Temp->program_numbers[Pos]), Pos==0);
- }
-
- //StreamOrder
- Clear(StreamKind_Last, StreamPos, General_StreamOrder);
- for (size_t program_FromStream=0; program_FromStream<Temp->program_numbers.size(); ++program_FromStream)
- {
- int16u program_number=Temp->program_numbers[program_FromStream];
- std::vector<int16u> &programs_List=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].programs_List;
- size_t programs_List_Pos=0;
- for (; programs_List_Pos<programs_List.size(); ++programs_List_Pos)
- if (programs_List[programs_List_Pos]==program_number)
- break;
- if (programs_List_Pos<programs_List.size())
- {
- complete_stream::transport_stream::program &Program=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number];
- for (size_t elementary_PID_Pos=0; elementary_PID_Pos<Program.elementary_PIDs.size(); ++elementary_PID_Pos)
- if (Program.elementary_PIDs[elementary_PID_Pos]==StreamID)
- Fill(StreamKind_Last, StreamPos, General_StreamOrder, Ztring::ToZtring(programs_List_Pos)+__T('-')+Ztring::ToZtring(elementary_PID_Pos));
- }
- }
-
- //Special cases
- if (StreamKind_Last==Stream_Video && Temp->Parser && Temp->Parser->Count_Get(Stream_Text))
- {
- }
- }
-
- //Special cases
- if (Temp->Parser && Temp->Parser->Count_Get(Stream_Video))
- {
- //Video and Text may be together
- size_t Text_Count=Temp->Parser->Count_Get(Stream_Text);
- for (size_t Text_Pos=0; Text_Pos<Text_Count; Text_Pos++)
- {
- Ztring Parser_ID=Temp->Parser->Retrieve(Stream_Text, Text_Pos, Text_ID);
- if (Parser_ID.find(__T('-'))!=string::npos)
- Parser_ID.erase(Parser_ID.begin(), Parser_ID.begin()+Parser_ID.find(__T('-'))+1);
- Ztring ID=Retrieve(Stream_Video, Temp->StreamPos, Video_ID)+__T('-')+Parser_ID;
- Ztring ID_String=Retrieve(Stream_Video, Temp->StreamPos, Video_ID_String)+__T('-')+Parser_ID;
- StreamPos_Last=(size_t)-1;
- for (size_t Pos=0; Pos<Count_Get(Stream_Text); Pos++)
- if (Retrieve(Stream_Text, Pos, Text_ID)==ID && Retrieve(Stream_Text, Pos, "MuxingMode")==Temp->Parser->Retrieve(Stream_Text, Text_Pos, "MuxingMode"))
- {
- StreamPos_Last=Pos;
- break;
- }
- if (StreamPos_Last==(size_t)-1)
- Stream_Prepare(Stream_Text, StreamPos_Last);
- if (!IsSub)
- Fill(Stream_Text, StreamPos_Last, "MuxingMode_MoreInfo", __T("Muxed in Video #")+Ztring().From_Number(Temp->StreamPos+1), true);
- Merge(*Temp->Parser, Stream_Text, Text_Pos, StreamPos_Last);
-
- Fill(Stream_Text, StreamPos_Last, Text_ID, ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_ID_String, ID_String, true);
- Fill(Stream_Text, StreamPos_Last, Text_StreamOrder, Retrieve(Stream_Video, Temp->StreamPos, Video_StreamOrder), true);
- Fill(Stream_Text, StreamPos_Last, Text_MenuID, Retrieve(Stream_Video, Temp->StreamPos, Video_MenuID), true);
- Fill(Stream_Text, StreamPos_Last, Text_MenuID_String, Retrieve(Stream_Video, Temp->StreamPos, Video_MenuID_String), true);
- Fill(Stream_Text, StreamPos_Last, Text_Duration, Retrieve(Stream_Video, Temp->StreamPos, Video_Duration), true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay, Retrieve(Stream_Video, Temp->StreamPos, Video_Delay), true);
- Fill(Stream_Text, StreamPos_Last, Text_Delay_Source, Retrieve(Stream_Video, Temp->StreamPos, Video_Delay_Source), true);
- }
-
- StreamKind_Last=Temp->StreamKind;
- StreamPos_Last=Temp->StreamPos;
- }
- }
-
- //Teletext
- if (StreamKind_Last==Stream_Max)
- {
- for (std::map<int16u, complete_stream::stream::teletext>::iterator Teletext=Temp->Teletexts.begin(); Teletext!=Temp->Teletexts.end(); ++Teletext)
- {
- Stream_Prepare(Stream_Text);
- Fill(StreamKind_Last, StreamPos_Last, General_ID, Ztring::ToZtring(StreamID)+__T('-')+Ztring::ToZtring(Teletext->first), true);
- Fill(StreamKind_Last, StreamPos_Last, General_ID_String, Decimal_Hexa(StreamID)+__T('-')+Ztring::ToZtring(Teletext->first), true);
-
- for (size_t Pos=0; Pos<Temp->program_numbers.size(); Pos++)
- {
- Fill(StreamKind_Last, StreamPos_Last, General_MenuID, Temp->program_numbers[Pos], 10, Pos==0);
- Fill(StreamKind_Last, StreamPos_Last, General_MenuID_String, Decimal_Hexa(Temp->program_numbers[Pos]), Pos==0);
- }
-
- //TS info
- for (std::map<std::string, ZenLib::Ztring>::iterator Info=Teletext->second.Infos.begin(); Info!=Teletext->second.Infos.end(); ++Info)
- {
- if (Retrieve(StreamKind_Last, StreamPos_Last, Info->first.c_str()).empty())
- Fill(StreamKind_Last, StreamPos_Last, Info->first.c_str(), Info->second);
- }
- Teletext->second.Infos.clear();
- }
- }
-
- //Law rating
- if (Temp->Parser)
- {
- Ztring LawRating=Temp->Parser->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- {
- if (Count_Get(Stream_Menu))
- {
- Ztring MenuID=Retrieve(Temp->StreamKind, Temp->StreamPos, General_MenuID);
- for (size_t Pos=0; Pos<Count_Get(Stream_Menu); Pos++)
- if (Retrieve(Stream_Menu, Pos, General_MenuID)==MenuID)
- Fill(Stream_Menu, Pos, "LawRating", LawRating, true);
- }
- else
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- }
- }
-
- //Title
- if (Temp->Parser)
- {
- Ztring Title=Temp->Parser->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- {
- if (Count_Get(Stream_Menu))
- {
- Ztring MenuID=Retrieve(Temp->StreamKind, Temp->StreamPos, General_MenuID);
- for (size_t Pos=0; Pos<Count_Get(Stream_Menu); Pos++)
- if (Retrieve(Stream_Menu, Pos, General_MenuID)==MenuID)
- Fill(Stream_Menu, Pos, "Title", Title, true);
- }
- else
- Fill(Stream_General, 0, General_Title, Title);
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Streams_Update_EPG()
-{
- //EPG
- complete_stream::transport_streams::iterator Transport_Stream=Complete_Stream->transport_stream_id_IsValid?Complete_Stream->Transport_Streams.find(Complete_Stream->transport_stream_id):Complete_Stream->Transport_Streams.end();
- if (Transport_Stream==Complete_Stream->Transport_Streams.end())
- return;
-
- //Per source (ATSC)
- if (Transport_Stream->second.source_id_IsValid)
- {
- complete_stream::sources::iterator Source=Complete_Stream->Sources.find(Transport_Stream->second.source_id);
- if (Source!=Complete_Stream->Sources.end())
- {
- //EPG
- std::map<Ztring, Ztring> EPGs;
- for (complete_stream::source::atsc_epg_blocks::iterator ATSC_EPG_Block=Source->second.ATSC_EPG_Blocks.begin(); ATSC_EPG_Block!=Source->second.ATSC_EPG_Blocks.end(); ++ATSC_EPG_Block)
- for (complete_stream::source::atsc_epg_block::events::iterator Event=ATSC_EPG_Block->second.Events.begin(); Event!=ATSC_EPG_Block->second.Events.end(); ++Event)
- {
- Ztring Texts;
- for (std::map<int16u, Ztring>::iterator text=Event->second.texts.begin(); text!=Event->second.texts.end(); ++text)
- Texts+=text->second+__T(" - ");
- if (!Texts.empty())
- Texts.resize(Texts.size()-3);
- EPGs[Ztring().Date_From_Seconds_1970(Event->second.start_time+315964800-Complete_Stream->GPS_UTC_offset)]=Event->second.title+__T(" / ")+Texts+__T(" / / / ")+Event->second.duration+__T(" / ");
- }
- if (!EPGs.empty())
- {
- //Trashing old EPG
- size_t Begin=Retrieve(Stream_General, 0, General_EPG_Positions_Begin).To_int32u();
- size_t End=Retrieve(Stream_General, 0, General_EPG_Positions_End).To_int32u();
- if (Begin && End && Begin<End)
- for (size_t Pos=End-1; Pos>=Begin; Pos--)
- Clear(Stream_General, 0, Pos);
-
- //Filling
- Fill(Stream_General, 0, General_EPG_Positions_Begin, Count_Get(Stream_General, 0), 10, true);
- for (std::map<Ztring, Ztring>::iterator EPG=EPGs.begin(); EPG!=EPGs.end(); ++EPG)
- Fill(Stream_General, 0, EPG->first.To_Local().c_str(), EPG->second, true);
- Fill(Stream_General, 0, General_EPG_Positions_End, Count_Get(Stream_General, 0), 10, true);
- }
- }
- }
-
- //Per program
- if (!Transport_Stream->second.Programs.empty()
- && (Transport_Stream->second.Programs.size()>1
- || !Transport_Stream->second.Programs.begin()->second.Infos.empty()
- || !Transport_Stream->second.Programs.begin()->second.DVB_EPG_Blocks.empty()
- || Complete_Stream->Sources.find(Transport_Stream->second.Programs.begin()->second.source_id)!=Complete_Stream->Sources.end()
- || Config->File_MpegTs_ForceMenu_Get()))
- for (complete_stream::transport_stream::programs::iterator Program=Transport_Stream->second.Programs.begin(); Program!=Transport_Stream->second.Programs.end(); ++Program)
- {
- if (Program->second.IsParsed)
- {
- bool EPGs_IsUpdated=false;
- std::map<Ztring, Ztring> EPGs;
-
- //EPG - DVB
- if (Program->second.DVB_EPG_Blocks_IsUpdated)
- {
- for (complete_stream::transport_stream::program::dvb_epg_blocks::iterator DVB_EPG_Block=Program->second.DVB_EPG_Blocks.begin(); DVB_EPG_Block!=Program->second.DVB_EPG_Blocks.end(); ++DVB_EPG_Block)
- for (complete_stream::transport_stream::program::dvb_epg_block::events::iterator Event=DVB_EPG_Block->second.Events.begin(); Event!=DVB_EPG_Block->second.Events.end(); ++Event)
- if (EPGs.find(Event->second.start_time)==EPGs.end() || DVB_EPG_Block->first==0x4E) //Does not exist or "DVB - event_information_section - actual_transport_stream : return present/following"
- EPGs[Event->second.start_time]=Event->second.short_event.event_name+__T(" / ")+Event->second.short_event.text+__T(" / ")+Event->second.content+__T(" / / ")+Event->second.duration+__T(" / ")+Event->second.running_status;
- Program->second.DVB_EPG_Blocks_IsUpdated=false;
- EPGs_IsUpdated=true;
- }
-
- //EPG - ATSC
- if (Program->second.source_id_IsValid)
- {
- complete_stream::sources::iterator Source=Complete_Stream->Sources.find(Program->second.source_id);
- if (Source!=Complete_Stream->Sources.end())
- {
- if (!Source->second.texts.empty())
- {
- Ztring Texts;
- for (std::map<int16u, Ztring>::iterator text=Source->second.texts.begin(); text!=Source->second.texts.end(); ++text)
- Texts+=text->second+__T(" - ");
- if (!Texts.empty())
- Texts.resize(Texts.size()-3);
- if (Program->second.StreamPos==(size_t)-1)
- {
- Complete_Stream->program_number_Order.push_back(Program->first);
- Stream_Prepare(Stream_Menu);
- Program->second.StreamPos=StreamPos_Last;
- }
- Fill(Stream_Menu, Program->second.StreamPos, Menu_ServiceProvider, Texts, true);
- }
- if (Source->second.ATSC_EPG_Blocks_IsUpdated)
- {
- for (complete_stream::source::atsc_epg_blocks::iterator ATSC_EPG_Block=Source->second.ATSC_EPG_Blocks.begin(); ATSC_EPG_Block!=Source->second.ATSC_EPG_Blocks.end(); ++ATSC_EPG_Block)
- for (complete_stream::source::atsc_epg_block::events::iterator Event=ATSC_EPG_Block->second.Events.begin(); Event!=ATSC_EPG_Block->second.Events.end(); ++Event)
- if (Event->second.start_time!=(int32u)-1) //TODO: find the reason when start_time is not set
- {
- Ztring Texts;
- for (std::map<int16u, Ztring>::iterator text=Event->second.texts.begin(); text!=Event->second.texts.end(); ++text)
- Texts+=text->second+__T(" - ");
- if (!Texts.empty())
- Texts.resize(Texts.size()-3);
- EPGs[Ztring().Date_From_Seconds_1970(Event->second.start_time+315964800-Complete_Stream->GPS_UTC_offset)]=Event->second.title+__T(" / ")+Texts+__T(" / / / ")+Event->second.duration+__T(" / ");
- }
- Source->second.ATSC_EPG_Blocks_IsUpdated=false;
- EPGs_IsUpdated=true;
- }
- }
- }
-
- //EPG - Filling
- if (EPGs_IsUpdated)
- {
- if (Program->second.StreamPos==(size_t)-1)
- {
- Complete_Stream->program_number_Order.push_back(Program->first);
- Stream_Prepare(Stream_Menu);
- Program->second.StreamPos=StreamPos_Last;
- }
-
- Program->second.EPGs=EPGs;
- Streams_Update_EPG_PerProgram(Program);
- }
- }
- }
-
- Complete_Stream->Sources_IsUpdated=false;
- Complete_Stream->Programs_IsUpdated=false;
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Streams_Update_EPG_PerProgram(complete_stream::transport_stream::programs::iterator Program)
-{
- size_t Chapters_Pos_Begin=Retrieve(Stream_Menu, Program->second.StreamPos, Menu_Chapters_Pos_Begin).To_int32u();
- size_t Chapters_Pos_End=Retrieve(Stream_Menu, Program->second.StreamPos, Menu_Chapters_Pos_End).To_int32u();
- if (Chapters_Pos_Begin && Chapters_Pos_End)
- {
- for (size_t Pos=Chapters_Pos_End-1; Pos>=Chapters_Pos_Begin; Pos--)
- Clear(Stream_Menu, Program->second.StreamPos, Pos);
- Clear(Stream_Menu, Program->second.StreamPos, Menu_Chapters_Pos_Begin);
- Clear(Stream_Menu, Program->second.StreamPos, Menu_Chapters_Pos_End);
- }
- if (!Program->second.EPGs.empty())
- {
- Fill(Stream_Menu, Program->second.StreamPos, Menu_Chapters_Pos_Begin, Count_Get(Stream_Menu, Program->second.StreamPos), 10, true);
- for (std::map<Ztring, Ztring>::iterator EPG=Program->second.EPGs.begin(); EPG!=Program->second.EPGs.end(); ++EPG)
- Fill(Stream_Menu, Program->second.StreamPos, EPG->first.To_UTF8().c_str(), EPG->second, true);
- Fill(Stream_Menu, Program->second.StreamPos, Menu_Chapters_Pos_End, Count_Get(Stream_Menu, Program->second.StreamPos), 10, true);
- }
-}
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_MPEGTS_PCR_YES
-void File_MpegTs::Streams_Update_Duration_Update()
-{
- bool IsVbr=false;
- bool IsCbr=false;
- #if MEDIAINFO_ADVANCED
- float64 TimeStamp_InstantaneousBitRate_Min_Raw=DBL_MAX;
- float64 TimeStamp_InstantaneousBitRate_Max_Raw=0;
- int64u TimeStamp_Distance_Min=(int64u)-1;
- int64u TimeStamp_Distance_Max=0;
- int64u TimeStamp_Distance_Total=0;
- int64u TimeStamp_Distance_Count=0;
- int64u TimeStamp_HasProblems=0;
- #endif // MEDIAINFO_ADVANCED
-
- for (std::map<int16u, int16u>::iterator PCR_PID=Complete_Stream->PCR_PIDs.begin(); PCR_PID!=Complete_Stream->PCR_PIDs.end(); ++PCR_PID)
- {
- complete_stream::streams::iterator Stream=Complete_Stream->Streams.begin()+PCR_PID->first;
- if (*Stream && (*Stream)->TimeStamp_End_IsUpdated)
- {
- if ((*Stream)->TimeStamp_End<0x100000000LL*300 && (*Stream)->TimeStamp_Start>0x100000000LL*300)
- (*Stream)->TimeStamp_End+=0x200000000LL*300; //33 bits, cyclic
- if ((*Stream)->TimeStamp_Start<(*Stream)->TimeStamp_End)
- {
- int64u Duration=0;
- int64u Bytes=0;
- #if MEDIAINFO_ADVANCED
- if (Config->ParseSpeed>=1 && !(*Stream)->TimeStamp_Intermediate.empty())
- {
- Duration=(*Stream)->TimeStamp_Intermediate[0]-(*Stream)->TimeStamp_Start;
- size_t Last=(*Stream)->TimeStamp_Intermediate.size()-1;
- for (size_t Pos=1; Pos+1<Last; Pos+=2)
- Duration+=(*Stream)->TimeStamp_Intermediate[Pos+1]-(*Stream)->TimeStamp_Intermediate[Pos];
- Duration+=(*Stream)->TimeStamp_End-(*Stream)->TimeStamp_Intermediate[Last];
- }
- else
- #endif // MEDIAINFO_ADVANCED
- {
- Duration=(*Stream)->TimeStamp_End-(*Stream)->TimeStamp_Start;
- }
- Bytes=(*Stream)->TimeStamp_End_Offset-(*Stream)->TimeStamp_Start_Offset;
-
- if (Duration && Bytes)
- {
- Fill(Stream_General, 0, General_Duration, ((float64)Duration)/27000, 6, true);
- Fill(Stream_General, 0, General_OverallBitRate, Bytes*8/(((float64)Duration)/27000000), 0, true);
- }
-
- (*Stream)->TimeStamp_End_IsUpdated=false;
- (*Stream)->IsPCR_Duration=(float64)Duration;
-
- //Filling menu duration
- if (Count_Get(Stream_Menu))
- {
- complete_stream::transport_streams::iterator Transport_Stream=Complete_Stream->transport_stream_id_IsValid?Complete_Stream->Transport_Streams.find(Complete_Stream->transport_stream_id):Complete_Stream->Transport_Streams.end();
- if (Transport_Stream!=Complete_Stream->Transport_Streams.end())
- {
- //Per program
- for (size_t Pos=0; Pos<(*Stream)->program_numbers.size(); Pos++)
- {
- int16u program_number=(*Stream)->program_numbers[Pos];
- if (Transport_Stream->second.Programs[program_number].IsRegistered) //Only if the menu is already displayed
- Fill(Stream_Menu, Transport_Stream->second.Programs[program_number].StreamPos, Menu_Duration, ((float64)Duration)/27000, 6, true);
- }
- }
- }
- }
-
- if ((*Stream)->TimeStamp_InstantaneousBitRate_BitRateMode_IsVbr>=Config_VbrDetection_Occurences)
- IsVbr=true;
- if ((*Stream)->TimeStamp_InstantaneousBitRate_BitRateMode_IsCbr)
- IsCbr=true;
- #if MEDIAINFO_ADVANCED
- if (Config->ParseSpeed>=1)
- {
- if (TimeStamp_InstantaneousBitRate_Min_Raw>(*Stream)->TimeStamp_InstantaneousBitRate_Min_Raw)
- TimeStamp_InstantaneousBitRate_Min_Raw=(*Stream)->TimeStamp_InstantaneousBitRate_Min_Raw;
- if (TimeStamp_InstantaneousBitRate_Max_Raw<(*Stream)->TimeStamp_InstantaneousBitRate_Max_Raw)
- TimeStamp_InstantaneousBitRate_Max_Raw=(*Stream)->TimeStamp_InstantaneousBitRate_Max_Raw;
- TimeStamp_Distance_Total+=(*Stream)->TimeStamp_Distance_Total;
- TimeStamp_Distance_Count+=(*Stream)->TimeStamp_Distance_Count;
- if (TimeStamp_Distance_Min>(*Stream)->TimeStamp_Distance_Min)
- TimeStamp_Distance_Min=(*Stream)->TimeStamp_Distance_Min;
- if (TimeStamp_Distance_Max<(*Stream)->TimeStamp_Distance_Max)
- TimeStamp_Distance_Max=(*Stream)->TimeStamp_Distance_Max;
- TimeStamp_HasProblems+=(*Stream)->TimeStamp_HasProblems;
- }
- #endif // MEDIAINFO_ADVANCED
- }
- }
-
- if (IsVbr)
- Fill(Stream_General, 0, General_OverallBitRate_Mode, "VBR", Unlimited, true, true);
- else if (IsCbr)
- Fill(Stream_General, 0, General_OverallBitRate_Mode, "CBR", Unlimited, true, true);
- else
- Clear(Stream_General, 0, General_OverallBitRate_Mode);
- #if MEDIAINFO_ADVANCED
- if (Config->ParseSpeed>=1)
- {
- if ((IsVbr || !IsCbr) && TimeStamp_InstantaneousBitRate_Min_Raw<DBL_MAX)
- Fill(Stream_General, 0, General_OverallBitRate_Minimum, TimeStamp_InstantaneousBitRate_Min_Raw, 0, true);
- else
- Clear(Stream_General, 0, General_OverallBitRate_Minimum);
- if ((IsVbr || !IsCbr) && TimeStamp_InstantaneousBitRate_Max_Raw)
- Fill(Stream_General, 0, General_OverallBitRate_Maximum, TimeStamp_InstantaneousBitRate_Max_Raw, 0, true);
- else
- Clear(Stream_General, 0, General_OverallBitRate_Maximum);
- if (TimeStamp_Distance_Count)
- {
- Fill(Stream_General, 0, "PCR_Distance_Average", ((float64)TimeStamp_Distance_Total)/27000000/TimeStamp_Distance_Count, 9, true);
- (*Stream_More)[Stream_General][0](Ztring().From_Local("PCR_Distance_Average"), Info_Options)=__T("N NT");
- }
- if (TimeStamp_Distance_Min!=(int64u)-1)
- {
- Fill(Stream_General, 0, "PCR_Distance_Min", ((float64)TimeStamp_Distance_Min)/27000000, 9, true);
- (*Stream_More)[Stream_General][0](Ztring().From_Local("PCR_Distance_Min"), Info_Options)=__T("N NT");
- }
- if (TimeStamp_Distance_Max)
- {
- Fill(Stream_General, 0, "PCR_Distance_Max", ((float64)TimeStamp_Distance_Max)/27000000, 9, true);
- (*Stream_More)[Stream_General][0](Ztring().From_Local("PCR_Distance_Max"), Info_Options)=__T("N NT");
- }
- {
- Fill(Stream_General, 0, "PCR_Invalid_Count", TimeStamp_HasProblems, 10, true);
- (*Stream_More)[Stream_General][0](Ztring().From_Local("PCR_Invalid_Count"), Info_Options)=__T("N NT");
- }
-
- }
- #endif // MEDIAINFO_ADVANCED
-}
-#endif //MEDIAINFO_MPEGTS_PCR_YES
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Streams_Update_Duration_End()
-{
- //General
- Fill(Stream_General, 0, General_Duration_End, Complete_Stream->Duration_End, true);
-
- Complete_Stream->Duration_End_IsUpdated=false;
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Streams_Finish()
-{
- //Per stream
- for (size_t StreamID=0; StreamID<0x2000; StreamID++)
- if (Complete_Stream->Streams[StreamID]->Parser)
- {
- if (!Complete_Stream->Streams[StreamID]->Parser->Status[IsFinished])
- {
- int64u File_Size_Temp=File_Size;
- File_Size=File_Offset+Buffer_Offset+Element_Offset;
- Open_Buffer_Continue(Complete_Stream->Streams[StreamID]->Parser, Buffer, 0, false);
- File_Size=File_Size_Temp;
- Finish(Complete_Stream->Streams[StreamID]->Parser);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
- }
- }
-
- #if MEDIAINFO_DUPLICATE
- File__Duplicate_Streams_Finish();
- #endif //MEDIAINFO_DUPLICATE
-
- #if MEDIAINFO_IBI
- if (!IsSub && Config_Ibi_Create)
- {
- for (ibi::streams::iterator IbiStream_Temp=Ibi.Streams.begin(); IbiStream_Temp!=Ibi.Streams.end(); ++IbiStream_Temp)
- {
- if (IbiStream_Temp->second && IbiStream_Temp->second->DtsFrequencyNumerator==1000000000 && IbiStream_Temp->second->DtsFrequencyDenominator==1)
- {
- bool IsOk=true;
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- if (!IbiStream_Temp->second->Infos[Pos].IsContinuous && Pos+1!=IbiStream_Temp->second->Infos.size())
- IsOk=false;
- if (IsOk) //Only is all items are continuous (partial IBI not yet supported)
- {
- IbiStream_Temp->second->DtsFrequencyNumerator=90000;
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- {
- int64u Temp=IbiStream_Temp->second->Infos[Pos].Dts*90/1000000;
- IbiStream_Temp->second->Infos[Pos].Dts=Temp;
- }
- }
- }
- }
- }
- #endif //MEDIAINFO_IBI
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_MpegTs::Synchronize()
-{
- //Synchronizing
- while ( Buffer_Offset+188*16+BDAV_Size*16+TSP_Size*16<=Buffer_Size
- && !(Buffer[Buffer_Offset+188* 0+BDAV_Size* 1+TSP_Size* 0]==0x47
- && Buffer[Buffer_Offset+188* 1+BDAV_Size* 2+TSP_Size* 1]==0x47
- && Buffer[Buffer_Offset+188* 2+BDAV_Size* 3+TSP_Size* 2]==0x47
- && Buffer[Buffer_Offset+188* 3+BDAV_Size* 4+TSP_Size* 3]==0x47
- && Buffer[Buffer_Offset+188* 4+BDAV_Size* 5+TSP_Size* 4]==0x47
- && Buffer[Buffer_Offset+188* 5+BDAV_Size* 6+TSP_Size* 5]==0x47
- && Buffer[Buffer_Offset+188* 6+BDAV_Size* 7+TSP_Size* 6]==0x47
- && Buffer[Buffer_Offset+188* 7+BDAV_Size* 8+TSP_Size* 7]==0x47
- && Buffer[Buffer_Offset+188* 8+BDAV_Size* 9+TSP_Size* 8]==0x47
- && Buffer[Buffer_Offset+188* 9+BDAV_Size*10+TSP_Size* 9]==0x47
- && Buffer[Buffer_Offset+188*10+BDAV_Size*11+TSP_Size*10]==0x47
- && Buffer[Buffer_Offset+188*11+BDAV_Size*12+TSP_Size*11]==0x47
- && Buffer[Buffer_Offset+188*12+BDAV_Size*13+TSP_Size*12]==0x47
- && Buffer[Buffer_Offset+188*13+BDAV_Size*14+TSP_Size*13]==0x47
- && Buffer[Buffer_Offset+188*14+BDAV_Size*15+TSP_Size*14]==0x47
- && Buffer[Buffer_Offset+188*15+BDAV_Size*16+TSP_Size*15]==0x47))
- {
- Buffer_Offset++;
- while ( Buffer_Offset+BDAV_Size+1<=Buffer_Size
- && Buffer[Buffer_Offset+BDAV_Size]!=0x47)
- Buffer_Offset++;
- }
-
- if (Buffer_Offset+188*16+BDAV_Size*16+TSP_Size*16>=Buffer_Size
- #ifdef MEDIAINFO_ARIBSTDB24B37_YES
- && !FromAribStdB24B37
- #endif
- )
- return false;
-
- //Synched is OK
- if (!Status[IsAccepted])
- {
- Accept();
- }
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_MpegTs::Synched_Test()
-{
- while (Buffer_Offset+TS_Size<=Buffer_Size)
- {
- //Synchro testing
- if (Buffer[Buffer_Offset+BDAV_Size]!=0x47)
- {
- Synched=false;
- #if MEDIAINFO_DUPLICATE
- if (File__Duplicate_Get())
- Trusted++; //We don't want to stop parsing if duplication is requested, TS is not a lot stable, normal...
- #endif //MEDIAINFO_DUPLICATE
- return true;
- }
-
- //Getting pid
- pid=(Buffer[Buffer_Offset+BDAV_Size+1]&0x1F)<<8
- | Buffer[Buffer_Offset+BDAV_Size+2];
-
- complete_stream::stream* Stream=Complete_Stream->Streams[pid];
- if (Stream->Searching)
- {
- //Trace config
- #if MEDIAINFO_TRACE
- if (Config_Trace_Level)
- {
- if (Stream->Kind==complete_stream::stream::pes)
- {
- if (!Trace_Layers[8])
- Trace_Layers_Update(8); //Stream
- }
- else
- Trace_Layers_Update(IsSub?1:0);
- }
- #endif //MEDIAINFO_TRACE
-
- payload_unit_start_indicator=(Buffer[Buffer_Offset+BDAV_Size+1]&0x40)!=0;
- if (payload_unit_start_indicator)
- {
- //Searching start
- if (Stream->Searching_Payload_Start) //payload_unit_start_indicator
- {
- if (Stream->Kind==complete_stream::stream::psi)
- {
- //Searching table_id
- size_t Version_Pos=BDAV_Size
- +4 //standart header
- +((Buffer[Buffer_Offset+BDAV_Size+3]&0x20)?(1+Buffer[Buffer_Offset+BDAV_Size+4]):0); //adaptation_field_control (adaptation) --> adaptation_field_length
- if (Version_Pos>=BDAV_Size+188)
- return true; //There is a problem with this block, accelerated parsing disabled
- Version_Pos+=1+Buffer[Buffer_Offset+Version_Pos]; //pointer_field
- if (Version_Pos>=BDAV_Size+188)
- return true; //There is a problem with this block, accelerated parsing disabled
- int8u table_id=Buffer[Buffer_Offset+Version_Pos]; //table_id
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Stream->Element_Info1=Mpeg_Psi_table_id(table_id);
- #endif //MEDIAINFO_TRACE
- if (table_id==0xCD) //specifc case for ATSC STT
- {
- if (Config_Trace_TimeSection_OnlyFirstOccurrence)
- {
- if (!TimeSection_FirstOccurrenceParsed)
- TimeSection_FirstOccurrenceParsed=true;
- #if MEDIAINFO_TRACE
- else
- {
- Trace_Layers.reset(); //We do not want to display data about other occurences
- Trace_Layers_Update();
- }
- #endif //MEDIAINFO_TRACE
- }
- return true; //Version has no meaning
- }
- #if MEDIAINFO_IBI
- if (table_id==0x00)
- Complete_Stream->Streams[pid]->Ibi_SynchronizationOffset_BeginOfFrame=File_Offset+Buffer_Offset;
- if (table_id==0x02)
- Complete_Stream->Streams[pid]->Ibi_SynchronizationOffset_BeginOfFrame=Complete_Stream->Streams[0x0000]->Ibi_SynchronizationOffset_BeginOfFrame;
- #endif //MEDIAINFO_IBI
- complete_stream::stream::table_ids::iterator Table_ID=Stream->Table_IDs.begin()+table_id;
- if (*Table_ID)
- {
- //Searching table_id_extension, version_number, section_number
- if (!(Buffer[Buffer_Offset+Version_Pos+1]&0x80)) //section_syntax_indicator
- {
- if (table_id==0x70 && Config_Trace_TimeSection_OnlyFirstOccurrence)
- {
- if (!TimeSection_FirstOccurrenceParsed)
- TimeSection_FirstOccurrenceParsed=true;
- #if MEDIAINFO_TRACE
- else
- {
- Trace_Layers.reset(); //We do not want to display data about other occurences
- Trace_Layers_Update();
- }
- #endif //MEDIAINFO_TRACE
- }
- return true; //No version
- }
- Version_Pos+=3; //Header size
- if (Version_Pos+5>=BDAV_Size+188)
- return true; //Not able to detect version (too far)
- int16u table_id_extension=(Buffer[Buffer_Offset+Version_Pos]<<8)|Buffer[Buffer_Offset+Version_Pos+1];
- int8u version_number=(Buffer[Buffer_Offset+Version_Pos+2]&0x3F)>>1;
- int8u section_number=Buffer[Buffer_Offset+Version_Pos+3];
- complete_stream::stream::table_id::table_id_extensions::iterator Table_ID_Extension=(*Table_ID)->Table_ID_Extensions.find(table_id_extension);
- if (Table_ID_Extension==(*Table_ID)->Table_ID_Extensions.end())
- {
- if ((*Table_ID)->Table_ID_Extensions_CanAdd)
- {
- (*Table_ID)->Table_ID_Extensions[table_id_extension].version_number=version_number;
- (*Table_ID)->Table_ID_Extensions[table_id_extension].Section_Numbers.resize(0x100);
- (*Table_ID)->Table_ID_Extensions[table_id_extension].Section_Numbers[section_number]=true;
- return true; //table_id_extension is not yet parsed
- }
- }
- else if (Table_ID_Extension->second.version_number!=version_number)
- {
- if (Table_ID_Extension->second.version_number!=(int8u)-1 && Config_Trace_TimeSection_OnlyFirstOccurrence)
- break;
- Table_ID_Extension->second.version_number=version_number;
- Table_ID_Extension->second.Section_Numbers.clear();
- Table_ID_Extension->second.Section_Numbers.resize(0x100);
- Table_ID_Extension->second.Section_Numbers[section_number]=true;
- return true; //version is different
- }
- else if (!Table_ID_Extension->second.Section_Numbers[section_number])
- {
- Table_ID_Extension->second.Section_Numbers[section_number]=true;
- return true; //section is not yet parsed
- }
- else if (table_id==0x02 && Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs_NotParsedCount)
- {
- //PMT is looping, so this is nearly sure that all PMT available in the stream are assigned
- #ifdef MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- for (size_t pid=0x10; pid<0x1FFF; pid++) //Wanting 0x10-->0x2F (DVB), 0x1ABC (cea_osd), 0x1FF7-->0x1FFF (ATSC)
- for (size_t Table_ID=0x00; Table_ID<0xFF; Table_ID++)
- {
- Complete_Stream->Streams[pid]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[pid]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[pid]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[pid]->Table_IDs[Table_ID]=new complete_stream::stream::table_id; //event_information_section - actual_transport_stream, schedule
-
- if (Pos==0x001F)
- Pos=0x1ABB; //Skipping normal data
- if (Pos==0x01ABC)
- Pos=0x1FF6; //Skipping normal data
- }
- #else //MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- if (Complete_Stream->Streams[0x0010]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x0010]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0010]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x0010]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0010]->Table_IDs[0x40]=new complete_stream::stream::table_id; //network_information_section - actual_network
- }
- if (Complete_Stream->Streams[0x0011]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x0011]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0011]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x0011]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0011]->Table_IDs[0x42]=new complete_stream::stream::table_id; //service_description_section - actual_transport_stream
- }
- if (Complete_Stream->Streams[0x0012]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x0012]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0012]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x0012]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0012]->Table_IDs[0x4E]=new complete_stream::stream::table_id; //event_information_section - actual_transport_stream, present/following
- for (size_t Table_ID=0x50; Table_ID<0x60; Table_ID++)
- Complete_Stream->Streams[0x0012]->Table_IDs[Table_ID]=new complete_stream::stream::table_id; //event_information_section - actual_transport_stream, schedule
- }
- if (Complete_Stream->Streams[0x0014]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x0014]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0014]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x0014]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0014]->Table_IDs[0x70]=new complete_stream::stream::table_id; //time_date_section
- Complete_Stream->Streams[0x0014]->Table_IDs[0x73]=new complete_stream::stream::table_id; //time_offset_section
- }
- if (Complete_Stream->Streams[0x1FFB]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x1FFB]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x1FFB]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x1FFB]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x1FFB]->Table_IDs[0xC7]=new complete_stream::stream::table_id; //Master Guide Table
- Complete_Stream->Streams[0x1FFB]->Table_IDs[0xCD]=new complete_stream::stream::table_id; //System Time Table
- }
- #endif //MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- }
- }
- }
- else
- return true; //No version in this pid
- }
- }
-
- //Searching continue and parser timestamp
- if (Stream->Searching_Payload_Continue
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- || Stream->Searching_ParserTimeStamp_Start
- || Stream->Searching_ParserTimeStamp_End
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- )
- return true;
-
- //Adaptation layer
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- if (( Stream->Searching_TimeStamp_Start
- || Stream->Searching_TimeStamp_End)
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- && !Stream->Searching_ParserTimeStamp_End
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- )
- {
- if ((Buffer[Buffer_Offset+BDAV_Size+3]&0x20)==0x20) //adaptation_field_control (adaptation)
- {
- int8u adaptation_field_length=Buffer[Buffer_Offset+BDAV_Size+4];
- if (adaptation_field_length>=5) //adaptation_field_length
- {
- bool discontinuity_indicator=(Buffer[Buffer_Offset+BDAV_Size+5]&0x80)!=0;
- bool PCR_flag=(Buffer[Buffer_Offset+BDAV_Size+5]&0x10)!=0;
- if (PCR_flag)
- {
- int64u program_clock_reference=( (((int64u)Buffer[Buffer_Offset+BDAV_Size+6])<<25)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+7])<<17)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+8])<< 9)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+9])<< 1)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+10])>>7));
- program_clock_reference*=300;
- program_clock_reference+=( (((int64u)Buffer[Buffer_Offset+BDAV_Size+10]&0x01)<<8)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+11]) ));
- if (Complete_Stream->Streams[pid]->Searching_TimeStamp_End
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- && (!Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_End
- || Complete_Stream->Streams[pid]->IsPCR) //If PCR, we always want it.
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- )
- {
- Header_Parse_Events_Duration(program_clock_reference);
- if (program_clock_reference!=Complete_Stream->Streams[pid]->TimeStamp_End) //Some PCRs are buggy (low precision), using the first stream offset in the case of duplicate PCR value
- {
- if (Complete_Stream->Streams[pid]->TimeStamp_End_Offset!=(int64u)-1)
- {
- if (program_clock_reference+0x12c00000000LL<Complete_Stream->Streams[pid]->TimeStamp_End)
- program_clock_reference+=0x25800000000LL; //33 bits and *300
- if (!discontinuity_indicator && program_clock_reference>Complete_Stream->Streams[pid]->TimeStamp_End && program_clock_reference<Complete_Stream->Streams[pid]->TimeStamp_End+10*27000000) //Not before, not after 10 seconds, else there is a problem
- {
- float64 Duration_InstantaneousBitRate_Min=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End-(Config_VbrDetection_Delta?0:810));
- float64 Duration_InstantaneousBitRate_Max=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End+(Config_VbrDetection_Delta?0:810));
- float64 Bytes_InstantaneousBitRate=(float64)(File_Offset+Buffer_Offset-Complete_Stream->Streams[pid]->TimeStamp_End_Offset);
- float64 TimeStamp_InstantaneousBitRate_Current_Min=Bytes_InstantaneousBitRate*8/Duration_InstantaneousBitRate_Max*27000000*(1-Config_VbrDetection_Delta);
- float64 TimeStamp_InstantaneousBitRate_Current_Raw=Bytes_InstantaneousBitRate*8/Duration_InstantaneousBitRate_Min*27000000;
- float64 TimeStamp_InstantaneousBitRate_Current_Max=Bytes_InstantaneousBitRate*8/Duration_InstantaneousBitRate_Min*27000000*(1+Config_VbrDetection_Delta);
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Min)
- {
- if (TimeStamp_InstantaneousBitRate_Current_Max<Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Min || TimeStamp_InstantaneousBitRate_Current_Min>Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Max)
- {
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_BitRateMode_IsVbr++;
- #if MEDIAINFO_ADVANCED
- if (Config_VbrDetection_GiveUp && Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_BitRateMode_IsVbr>=Config_VbrDetection_Occurences)
- Config->ParseSpeed=0;
- #endif // MEDIAINFO_ADVANCED
- }
- else
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_BitRateMode_IsCbr++;
- }
- float64 Duration_Min=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End-1);
- float64 Duration_Raw=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End);
- float64 Duration_Max=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End+1);
- float64 Bytes=(float64)(File_Offset+Buffer_Offset-Complete_Stream->Streams[pid]->TimeStamp_End_Offset);
- float64 TimeStamp_Min=Bytes*8/Duration_Max*27000000*(1-Config_VbrDetection_Delta);
- float64 TimeStamp_Raw=Bytes*8/Duration_Raw*27000000;
- float64 TimeStamp_Max=Bytes*8/Duration_Min*27000000*(1+Config_VbrDetection_Delta);
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Min=TimeStamp_Min;
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Raw=TimeStamp_Raw;
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Max=TimeStamp_Max;
- #if MEDIAINFO_ADVANCED
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Min_Raw>TimeStamp_InstantaneousBitRate_Current_Raw)
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Min_Raw=TimeStamp_InstantaneousBitRate_Current_Raw;
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Max_Raw<TimeStamp_InstantaneousBitRate_Current_Raw)
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Max_Raw=TimeStamp_InstantaneousBitRate_Current_Raw;
- int64u Distance=program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End;
- if (Complete_Stream->Streams[pid]->TimeStamp_Distance_Min>Distance)
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Min=Distance;
- if (Complete_Stream->Streams[pid]->TimeStamp_Distance_Max<Distance)
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Max=Distance;
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Total+=Distance;
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Count++;
- #endif // MEDIAINFO_ADVANCED
- }
- #if MEDIAINFO_ADVANCED
- else
- {
- if (!discontinuity_indicator)
- Complete_Stream->Streams[pid]->TimeStamp_HasProblems++;
- float64 Bytes=(float64)(File_Offset+Buffer_Offset-Complete_Stream->Streams[pid]->TimeStamp_End_Offset);
- int64u TimeToAdd;
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Raw)
- TimeToAdd=float64_int64s(Bytes*8/Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Raw*27000000);
- else
- TimeToAdd=0;
- Complete_Stream->Streams[pid]->TimeStamp_Intermediate.push_back(Complete_Stream->Streams[pid]->TimeStamp_End+TimeToAdd);
- Complete_Stream->Streams[pid]->TimeStamp_Intermediate.push_back(program_clock_reference);
- }
- #endif // MEDIAINFO_ADVANCED
- }
- Complete_Stream->Streams[pid]->TimeStamp_End=program_clock_reference;
- Complete_Stream->Streams[pid]->TimeStamp_End_IsUpdated=true;
- Complete_Stream->Streams[pid]->TimeStamp_End_Offset=File_Offset+Buffer_Offset;
- {
- Status[IsUpdated]=true;
- Status[User_16]=true;
- }
- }
- }
- if (Complete_Stream->Streams[pid]->Searching_TimeStamp_Start)
- {
- //This is the first PCR
- Complete_Stream->Streams[pid]->TimeStamp_Start=program_clock_reference;
- Complete_Stream->Streams[pid]->TimeStamp_Start_Offset=File_Offset+Buffer_Offset;
- Complete_Stream->Streams[pid]->TimeStamp_End=program_clock_reference;
- Complete_Stream->Streams[pid]->TimeStamp_End_IsUpdated=true;
- Complete_Stream->Streams[pid]->TimeStamp_End_Offset=File_Offset+Buffer_Offset;
- Complete_Stream->Streams[pid]->Searching_TimeStamp_Start_Set(false);
- Complete_Stream->Streams[pid]->Searching_TimeStamp_End_Set(true);
- Complete_Stream->Streams_With_StartTimeStampCount++;
- {
- Status[IsUpdated]=true;
- Status[User_16]=true;
- }
- }
-
- //Test if we can find the TS bitrate
- if (!Complete_Stream->Streams[pid]->EndTimeStampMoreThanxSeconds && Complete_Stream->Streams[pid]->TimeStamp_Start!=(int64u)-1
- && (File_Offset+Buffer_Offset-Buffer_TotalBytes_FirstSynched)*2<File_Size)
- {
- if (program_clock_reference<Complete_Stream->Streams[pid]->TimeStamp_Start)
- program_clock_reference+=0x200000000LL*300; //33 bits, cyclic
- if ((program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_Start)>Begin_MaxDuration)
- {
- Complete_Stream->Streams[pid]->EndTimeStampMoreThanxSeconds=true;
- Complete_Stream->Streams_With_EndTimeStampMoreThanxSecondsCount++;
- if (Complete_Stream->Streams_NotParsedCount
- && Complete_Stream->Streams_With_StartTimeStampCount>0
- && Complete_Stream->Streams_With_StartTimeStampCount==Complete_Stream->Streams_With_EndTimeStampMoreThanxSecondsCount)
- {
- //We are already parsing 16 seconds (for all PCRs), we don't hope to have more info
- MpegTs_JumpTo_Begin=File_Offset+Buffer_Offset-Buffer_TotalBytes_FirstSynched;
- if (MpegTs_JumpTo_End>MpegTs_JumpTo_Begin)
- MpegTs_JumpTo_End=MpegTs_JumpTo_Begin;
- }
- }
- }
- }
- }
- }
- }
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- }
-
- #if MEDIAINFO_DUPLICATE
- if (Stream->ShouldDuplicate)
- {
- Element_Size=TS_Size;
- File__Duplicate_Write();
- }
- #endif //MEDIAINFO_DUPLICATE
-
- Header_Parse_Events();
-
- Buffer_Offset+=TS_Size;
- }
-
- if (File_Offset+Buffer_Size>=File_Size)
- Detect_EOF(); //for TRP files
-
- return false; //Not enough data
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Synched_Init()
-{
- //Config->File_Filter_Set(462);
- //Default values
- Complete_Stream=new complete_stream;
- Complete_Stream->Streams.resize(0x2000);
- for (size_t StreamID=0; StreamID<0x2000; StreamID++)
- Complete_Stream->Streams[StreamID]=new complete_stream::stream;
- Complete_Stream->Streams[0x0000]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0000]->Kind=complete_stream::stream::psi; // Program Association Table
- Complete_Stream->Streams[0x0000]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0000]->Table_IDs[0x00]=new complete_stream::stream::table_id; // program_association_section
- Complete_Stream->Streams[0x0001]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0001]->Kind=complete_stream::stream::psi; // Conditional Access Table
- Complete_Stream->Streams[0x0001]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0001]->Table_IDs[0x01]=new complete_stream::stream::table_id; // CA_section
- Complete_Stream->Streams[0x0002]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0002]->Kind=complete_stream::stream::psi; // Transport Stream Description Table
- Complete_Stream->Streams[0x0002]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0003]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0003]->Kind=complete_stream::stream::psi; // IPMP Control Information Table
- Complete_Stream->Streams[0x0003]->Table_IDs.resize(0x100);
-
- //Temp
- MpegTs_JumpTo_Begin=(File_Offset_FirstSynched==(int64u)-1?0:Buffer_TotalBytes_LastSynched)+MediaInfoLib::Config.MpegTs_MaximumOffset_Get();
- MpegTs_JumpTo_End=MediaInfoLib::Config.MpegTs_MaximumOffset_Get()/4;
- Buffer_TotalBytes_LastSynched=Buffer_TotalBytes_FirstSynched;
- if (MpegTs_JumpTo_Begin==(int64u)-1 || MpegTs_JumpTo_Begin+MpegTs_JumpTo_End>=File_Size)
- {
- if (MpegTs_JumpTo_Begin+MpegTs_JumpTo_End>File_Size)
- {
- MpegTs_JumpTo_Begin=File_Size;
- MpegTs_JumpTo_End=0;
- }
- else
- MpegTs_JumpTo_Begin=File_Size-MpegTs_JumpTo_End;
- }
-
- //Config
- Config_Trace_TimeSection_OnlyFirstOccurrence=MediaInfoLib::Config.Trace_TimeSection_OnlyFirstOccurrence_Get();
- TimeSection_FirstOccurrenceParsed=false;
- #if MEDIAINFO_ADVANCED
- Config_VbrDetection_Delta=MediaInfoLib::Config.MpegTs_VbrDetection_Delta_Get();
- Config_VbrDetection_Occurences=MediaInfoLib::Config.MpegTs_VbrDetection_Occurences_Get();
- Config_VbrDetection_GiveUp=MediaInfoLib::Config.MpegTs_VbrDetection_GiveUp_Get();
- #endif // MEDIAINFO_ADVANCED
-
- #ifdef MEDIAINFO_ARIBSTDB24B37_YES
- if (FromAribStdB24B37)
- {
- #if MEDIAINFO_EVENTS
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- SetAllToPES();
- }
- #endif //MEDIAINFO_ARIBSTDB24B37_YES
-
- //Continue, again, for Duplicate and Filter
- Option_Manage();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Read_Buffer_Unsynched()
-{
- if (Complete_Stream==NULL || Complete_Stream->Streams.empty())
- return;
-
- for (size_t StreamID=0; StreamID<0x2000; StreamID++)//std::map<int64u, stream>::iterator Stream=Streams.begin(); Stream!=Streams.end(); Stream++)
- {
- //End timestamp is out of date
- #if defined(MEDIAINFO_MPEGTS_PCR_YES) || defined(MEDIAINFO_MPEGTS_PESTIMESTAMP_YES)
- Complete_Stream->Streams[StreamID]->Searching_TimeStamp_Start_Set(false); //No more searching start
- Complete_Stream->Streams[StreamID]->TimeStamp_End=(int64u)-1;
- Complete_Stream->Streams[StreamID]->TimeStamp_End_IsUpdated=false;
- Complete_Stream->Streams[StreamID]->TimeStamp_End_Offset=(int64u)-1;
- if (Complete_Stream->Streams[StreamID]->TimeStamp_Start!=(int64u)-1)
- Complete_Stream->Streams[StreamID]->Searching_TimeStamp_End_Set(true); //Searching only for a start found
- #endif //defined(MEDIAINFO_MPEGTS_PCR_YES) || defined(MEDIAINFO_MPEGTS_PESTIMESTAMP_YES)
- if (Complete_Stream->Streams[StreamID]->Parser)
- {
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- Complete_Stream->Streams[StreamID]->Searching_ParserTimeStamp_Start_Set(false); //No more searching start
- if (((File_MpegPs*)Complete_Stream->Streams[StreamID]->Parser)->HasTimeStamps)
- Complete_Stream->Streams[StreamID]->Searching_ParserTimeStamp_End_Set(true); //Searching only for a start found
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- if (File_GoTo==0)
- Complete_Stream->Streams[StreamID]->Parser->Unsynch_Frame_Count=0;
- Complete_Stream->Streams[StreamID]->Parser->Open_Buffer_Unsynch();
- }
- #if MEDIAINFO_IBI
- Complete_Stream->Streams[StreamID]->Ibi_SynchronizationOffset_BeginOfFrame=(int64u)-1;
- for (complete_stream::stream::table_ids::iterator TableID=Complete_Stream->Streams[StreamID]->Table_IDs.begin(); TableID!=Complete_Stream->Streams[StreamID]->Table_IDs.end(); ++TableID)
- if (*TableID)
- for (complete_stream::stream::table_id::table_id_extensions::iterator TableIdExtension=(*TableID)->Table_ID_Extensions.begin(); TableIdExtension!=(*TableID)->Table_ID_Extensions.end(); ++TableIdExtension)
- TableIdExtension->second.version_number=(int8u)-1;
- #endif //MEDIAINFO_IBI
- }
- Complete_Stream->Duration_End.clear();
-
- //Clearing durations
- Clear(Stream_General, 0, General_Duration);
- Clear(Stream_General, 0, General_Duration_End);
- for (size_t StreamPos=0; StreamPos<Count_Get(Stream_Menu); StreamPos++)
- Clear(Stream_Menu, StreamPos, Menu_Duration);
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Read_Buffer_Continue()
-{
- if (!IsSub)
- {
- if (Config->ParseSpeed>=1.0)
- Config->State_Set(((float)Buffer_TotalBytes)/File_Size);
- else if (Buffer_TotalBytes>MpegTs_JumpTo_Begin+MpegTs_JumpTo_End)
- Config->State_Set((float)0.99); //Nearly the end
- else
- Config->State_Set(((float)Buffer_TotalBytes)/(MpegTs_JumpTo_Begin+MpegTs_JumpTo_End));
- }
-
- #if MEDIAINFO_DEMUX
- if (Complete_Stream && pid<0x2000 && Complete_Stream->Streams[pid]->Kind==complete_stream::stream::pes && Complete_Stream->Streams[pid]->Parser && ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->Demux_StreamIsBeingParsed_type!=(int8u)-1)
- {
- Open_Buffer_Continue(Complete_Stream->Streams[pid]->Parser, Buffer, 0, false);
- PES_Parse_Finish();
- }
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Read_Buffer_AfterParsing()
-{
- if (Complete_Stream==NULL)
- return; //No synchronization yet
-
- if (!Status[IsFilled])
- {
- //Test if parsing of headers is OK
- if ((Complete_Stream->Streams_NotParsedCount==0 && (Complete_Stream->NoPatPmt || (Complete_Stream->transport_stream_id_IsValid && Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs_NotParsedCount==0)))
- || (Buffer_TotalBytes-Buffer_TotalBytes_FirstSynched>=MpegTs_JumpTo_Begin && Config->ParseSpeed<0.8)
- || File_Offset+Buffer_Size==File_Size)
- {
- //Test if PAT/PMT are missing (ofen in .trp files)
- if (!Complete_Stream->transport_stream_id_IsValid
- && !Complete_Stream->NoPatPmt)
- {
- //Activating all streams as PES
- SetAllToPES();
- Fill(Stream_General, 0, General_Format_Profile, "No PAT/PMT");
- Buffer_TotalBytes=0;
- Buffer_TotalBytes_LastSynched=(int64u)-1;
- Open_Buffer_Unsynch();
- GoTo(0);
- return;
- }
-
- //Filling
- for (std::set<int16u>::iterator StreamID=Complete_Stream->PES_PIDs.begin(); StreamID!=Complete_Stream->PES_PIDs.end(); ++StreamID)
- {
- if (Complete_Stream->Streams[*StreamID]->Parser)
- {
- Fill(Complete_Stream->Streams[*StreamID]->Parser);
-
- Complete_Stream->Streams[*StreamID]->Parser->Status[IsUpdated]=false;
- Complete_Stream->Streams[*StreamID]->IsUpdated_Info=true;
- }
-
- for (size_t Pos=0; Pos<Complete_Stream->Streams[*StreamID]->program_numbers.size(); Pos++)
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[*StreamID]->program_numbers[Pos]].Update_Needed_IsRegistered=true;
- }
- Complete_Stream->Streams_NotParsedCount=0;
- Fill();
-
- //Deactivating
- if (Config->File_StopSubStreamAfterFilled_Get())
- for (std::set<int16u>::iterator StreamID=Complete_Stream->PES_PIDs.begin(); StreamID!=Complete_Stream->PES_PIDs.end(); ++StreamID)
- {
- Complete_Stream->Streams[*StreamID]->Searching_Payload_Start_Set(false);
- Complete_Stream->Streams[*StreamID]->Searching_Payload_Continue_Set(false);
- }
-
- //Status
- Status[IsUpdated]=true;
- Status[User_19]=true;
-
- //Jumping
- if (Config->ParseSpeed<1.0 && Config->File_IsSeekable_Get()
- #if MEDIAINFO_ADVANCED
- && (!Config->File_IgnoreSequenceFileSize_Get() || Config->File_Names_Pos!=Config->File_Names.size())
- #endif //MEDIAINFO_ADVANCED
- && File_Offset+Buffer_Size<File_Size-MpegTs_JumpTo_End && MpegTs_JumpTo_End)
- {
- #if !defined(MEDIAINFO_MPEGTS_PCR_YES) && !defined(MEDIAINFO_MPEGTS_PESTIMESTAMP_YES)
- GoToFromEnd(47); //TODO: Should be changed later (when Finalize stuff will be split)
- #else //!defined(MEDIAINFO_MPEGTS_PCR_YES) && !defined(MEDIAINFO_MPEGTS_PESTIMESTAMP_YES)
- GoToFromEnd(MpegTs_JumpTo_End);
- Searching_TimeStamp_Start=false;
- #endif //!defined(MEDIAINFO_MPEGTS_PCR_YES) && !defined(MEDIAINFO_MPEGTS_PESTIMESTAMP_YES)
- Open_Buffer_Unsynch();
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_MpegTs::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- //Reset
- Seek_Value=(int64u)-1;
- Seek_ID=(int64u)-1;
- InfiniteLoop_Detect=0;
- #if MEDIAINFO_DEMUX
- Config->Demux_IsSeeking=false;
- #endif //MEDIAINFO_DEMUX
-
- //Init
- if (!Duration_Detected)
- {
- //External IBI
- #if MEDIAINFO_IBI
- std::string IbiFile=Config->Ibi_Get();
- if (!IbiFile.empty())
- {
- Ibi.Streams.clear(); //TODO: support IBI data from different inputs
-
- File_Ibi MI;
- Open_Buffer_Init(&MI, IbiFile.size());
- MI.Ibi=&Ibi;
- MI.Open_Buffer_Continue((const int8u*)IbiFile.c_str(), IbiFile.size());
- }
- //Creating base IBI from a quick analysis of the file
- else
- {
- MediaInfo_Internal MI;
- MI.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- Ztring File_Names=Config->File_Names.Read();
- MI.Option(__T("File_FileNameFormat"), __T("CSV"));
- size_t MiOpenResult=MI.Open(File_Names);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (!MiOpenResult)
- return 0;
- for (ibi::streams::iterator IbiStream_Temp=((File_MpegTs*)MI.Info)->Ibi.Streams.begin(); IbiStream_Temp!=((File_MpegTs*)MI.Info)->Ibi.Streams.end(); ++IbiStream_Temp)
- {
- if (Ibi.Streams[IbiStream_Temp->first]==NULL)
- Ibi.Streams[IbiStream_Temp->first]=new ibi::stream(*IbiStream_Temp->second);
- Ibi.Streams[IbiStream_Temp->first]->Unsynch();
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- {
- Ibi.Streams[IbiStream_Temp->first]->Add(IbiStream_Temp->second->Infos[Pos]);
- if (!IbiStream_Temp->second->Infos[Pos].IsContinuous)
- Ibi.Streams[IbiStream_Temp->first]->Unsynch();
- }
- Ibi.Streams[IbiStream_Temp->first]->Unsynch();
- }
- if (Ibi.Streams.empty())
- return 4; //Problem during IBI file parsing
- }
- #endif //#if MEDIAINFO_IBI
-
- Duration_Detected=true;
- }
-
- //Parsing
- switch (Method)
- {
- case 0 :
- GoTo(Value);
- Open_Buffer_Unsynch();
- return 1;
- case 1 :
- GoTo(File_Size*Value/10000);
- Open_Buffer_Unsynch();
- return 1;
- case 2 : //Timestamp
- #if MEDIAINFO_IBI
- {
- ibi::streams::iterator IbiStream_Temp;
- if (ID==(int64u)-1)
- IbiStream_Temp=Ibi.Streams.begin();
- else
- IbiStream_Temp=Ibi.Streams.find(ID);
- if (IbiStream_Temp==Ibi.Streams.end() || IbiStream_Temp->second->Infos.empty())
- {
- for (IbiStream_Temp=Ibi.Streams.begin(); IbiStream_Temp!=Ibi.Streams.end(); ++IbiStream_Temp)
- if (!IbiStream_Temp->second->Infos.empty())
- break;
-
- if (IbiStream_Temp==Ibi.Streams.end())
- return 5; //Invalid ID
- }
-
- if (!(IbiStream_Temp->second->DtsFrequencyNumerator==1000000000 && IbiStream_Temp->second->DtsFrequencyDenominator==1))
- {
- float64 ValueF=(float64)Value;
- ValueF/=1000000000; //Value is in ns
- ValueF/=IbiStream_Temp->second->DtsFrequencyDenominator;
- ValueF*=IbiStream_Temp->second->DtsFrequencyNumerator;
- Value=float64_int64s(ValueF);
- }
-
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- {
- if (Value<=IbiStream_Temp->second->Infos[Pos].Dts || Pos+1==IbiStream_Temp->second->Infos.size())
- {
- if (Value<IbiStream_Temp->second->Infos[Pos].Dts && Pos)
- Pos--;
-
- //Checking continuity of Ibi
- if (!IbiStream_Temp->second->Infos[Pos].IsContinuous && Pos+1<IbiStream_Temp->second->Infos.size() && InfiniteLoop_Detect<8) //With infinite loop detect
- {
- InfiniteLoop_Detect++;
- Config->Demux_IsSeeking=true;
- Seek_Value=Value;
- Seek_Value_Maximal=IbiStream_Temp->second->Infos[Pos+1].StreamOffset;
- Seek_ID=IbiStream_Temp->first;
- GoTo((IbiStream_Temp->second->Infos[Pos].StreamOffset+IbiStream_Temp->second->Infos[Pos+1].StreamOffset)/2);
- Open_Buffer_Unsynch();
-
- return 1;
- }
-
- InfiniteLoop_Detect=0;
- Config->Demux_IsSeeking=false;
- if (Complete_Stream && Complete_Stream->Streams[(size_t)IbiStream_Temp->first] && Complete_Stream->Streams[(size_t)IbiStream_Temp->first]->Parser)
- Complete_Stream->Streams[(size_t)IbiStream_Temp->first]->Parser->Unsynch_Frame_Count=IbiStream_Temp->second->Infos[Pos].FrameNumber;
- else
- Unsynch_Frame_Counts[(int16u)IbiStream_Temp->first]=IbiStream_Temp->second->Infos[Pos].FrameNumber;
-
- GoTo(IbiStream_Temp->second->Infos[Pos].StreamOffset);
- Open_Buffer_Unsynch();
-
- return 1;
- }
- }
-
- return 2; //Invalid value
- }
- #else //MEDIAINFO_IBI
- return (size_t)-2; //Not supported / IBI disabled
- #endif //MEDIAINFO_IBI
- case 3 : //FrameNumber
- #if MEDIAINFO_IBI
- {
- ibi::streams::iterator IbiStream_Temp;
- if (ID==(int64u)-1)
- IbiStream_Temp=Ibi.Streams.begin();
- else
- IbiStream_Temp=Ibi.Streams.find(ID);
- if (IbiStream_Temp==Ibi.Streams.end() || IbiStream_Temp->second->Infos.empty())
- {
- for (IbiStream_Temp=Ibi.Streams.begin(); IbiStream_Temp!=Ibi.Streams.end(); ++IbiStream_Temp)
- if (!IbiStream_Temp->second->Infos.empty())
- break;
-
- if (IbiStream_Temp==Ibi.Streams.end())
- return 5; //Invalid ID
- }
-
- for (size_t Pos=0; Pos<IbiStream_Temp->second->Infos.size(); Pos++)
- {
- if (Value<=IbiStream_Temp->second->Infos[Pos].FrameNumber || Pos+1==IbiStream_Temp->second->Infos.size())
- {
- if (Value<IbiStream_Temp->second->Infos[Pos].FrameNumber && Pos)
- Pos--;
-
- Config->Demux_IsSeeking=false;
- if (Complete_Stream && Complete_Stream->Streams[(size_t)IbiStream_Temp->first] && Complete_Stream->Streams[(size_t)IbiStream_Temp->first]->Parser)
- Complete_Stream->Streams[(size_t)IbiStream_Temp->first]->Parser->Unsynch_Frame_Count=IbiStream_Temp->second->Infos[Pos].FrameNumber;
- else
- Unsynch_Frame_Counts[(int16u)IbiStream_Temp->first]=IbiStream_Temp->second->Infos[Pos].FrameNumber;
-
- GoTo(IbiStream_Temp->second->Infos[Pos].StreamOffset);
- Open_Buffer_Unsynch();
-
- return 1;
- }
- }
-
- return 2; //Invalid value
- }
- #else //MEDIAINFO_IBI
- return (size_t)-2; //Not supported / IBI disabled
- #endif //MEDIAINFO_IBI
- default : return (size_t)-1; //Not supported
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_MpegTs::FileHeader_Begin()
-{
- if (Buffer_Size<8)
- return false; //Wait for more data
-
- //False positives detection: detect some headers from other files, DV parser is not smart enough
- if (CC8(Buffer+Buffer_Offset)==0x444C472056312E30LL //DLG
- || CC4(Buffer)==0x52494646 //RIFF
- || CC4(Buffer+4)==0x66747970 //ftyp
- || CC4(Buffer+4)==0x66726565 //free
- || CC4(Buffer+4)==0x6D646174 //mdat
- || CC4(Buffer+4)==0x6D6F6F76 //moov
- || CC4(Buffer+4)==0x736B6970 //skip
- || CC4(Buffer+4)==0x77696465 //wide
- || CC4(Buffer)==0x060E2B34) //MXF begin
- {
- Reject("MPEG-TS");
- return true;
- }
-
- //Configuring
- #if defined(MEDIAINFO_BDAV_YES) || defined(MEDIAINFO_TSP_YES)
- TS_Size=188
- #if defined(MEDIAINFO_BDAV_YES)
- +BDAV_Size
- #endif
- #if defined(MEDIAINFO_TSP_YES)
- +TSP_Size
- #endif
- ;
- #endif
-
- //Configuration
- Option_Manage();
-
- return true;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Header_Parse()
-{
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- //Parsing
- bool adaptation, payload;
- if (BDAV_Size)
- Skip_B4( "BDAV"); //BDAV supplement
- Skip_B1( "sync_byte");
- BS_Begin();
- Skip_SB( "transport_error_indicator");
- Get_SB ( payload_unit_start_indicator, "payload_unit_start_indicator");
- Skip_SB( "transport_priority");
- Get_S2 (13, pid, "pid");
- Get_S1 ( 2, transport_scrambling_control, "transport_scrambling_control");
- Get_SB ( adaptation, "adaptation_field_control (adaptation)");
- Get_SB ( payload, "adaptation_field_control (payload)");
- Skip_S1( 4, "continuity_counter");
- BS_End();
-
- //Info
- /* Trace: used to display program number(s)
- if (!Complete_Stream->Streams[pid]->program_numbers.empty())
- {
- Ztring Program_Numbers;
- for (size_t Pos=0; Pos<Complete_Stream->Streams[pid]->program_numbers.size(); Pos++)
- Program_Numbers+=Ztring::ToZtring_From_CC2(Complete_Stream->Streams[pid]->program_numbers[Pos])+__T('/');
- if (!Program_Numbers.empty())
- Program_Numbers.resize(Program_Numbers.size()-1);
- Data_Info(Program_Numbers);
- }
- else
- Data_Info(" ");
- */
- Data_Info(Complete_Stream->Streams[pid]->Element_Info1);
-
- //Adaptation
- if (adaptation)
- Header_Parse_AdaptationField();
- else
- {
- }
-
- //Data
- if (payload)
- {
- //Encryption
- if (transport_scrambling_control>0)
- Complete_Stream->Streams[pid]->IsScrambled++;
- }
- else if (Element_Offset<TS_Size)
- Skip_XX(TS_Size-Element_Offset, "Junk");
-
- //Filling
- Header_Fill_Code(pid, __T("0x")+Ztring().From_CC2(pid));
- Header_Fill_Size(TS_Size);
-
- Header_Parse_Events();
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- //Parsing
- payload_unit_start_indicator=(Buffer[Buffer_Offset+BDAV_Size+1]&0x40)!=0;
- transport_scrambling_control= Buffer[Buffer_Offset+BDAV_Size+3]&0xC0;
- bool adaptation= (Buffer[Buffer_Offset+BDAV_Size+3]&0x20)!=0;
- bool payload= (Buffer[Buffer_Offset+BDAV_Size+3]&0x10)!=0;
- Element_Offset+=BDAV_Size+4;
-
- //Adaptation
- if (adaptation)
- Header_Parse_AdaptationField();
- else
- {
- }
-
- //Data
- if (payload)
- {
- //Encryption
- if (transport_scrambling_control>0)
- Complete_Stream->Streams[pid]->IsScrambled++;
- }
-
- //Filling
- /*Element[1].Next=File_Offset+Buffer_Offset+TS_Size; //*/Header_Fill_Size(TS_Size);
- //Element[1].IsComplete=true; //Header_Fill_Size(TS_Size);
-
- Header_Parse_Events();
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Header_Parse_AdaptationField()
-{
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- int64u Element_Pos_Save=Element_Offset;
- Element_Begin1("adaptation_field");
- int8u adaptation_field_length;
- Get_B1 (adaptation_field_length, "adaptation_field_length");
- if (adaptation_field_length>188-4-1) //TS size - header - adaptation_field_length
- {
- adaptation_field_length=188-4-1;
- Skip_XX(188-4-1, "stuffing_bytes");
- }
- else if (adaptation_field_length>0)
- {
- bool discontinuity_indicator, PCR_flag, OPCR_flag, splicing_point_flag, transport_private_data_flag, adaptation_field_extension_flag;
- BS_Begin();
- Get_SB ( discontinuity_indicator, "discontinuity_indicator");
- Skip_SB( "random_access_indicator");
- Skip_SB( "elementary_stream_priority_indicator");
- Get_SB ( PCR_flag, "PCR_flag");
- Get_SB ( OPCR_flag, "OPCR_flag");
- Get_SB ( splicing_point_flag, "splicing_point_flag");
- Get_SB ( transport_private_data_flag, "transport_private_data_flag");
- Get_SB ( adaptation_field_extension_flag, "adaptation_field_extension_flag");
- BS_End();
- if (PCR_flag)
- {
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- BS_Begin();
- int64u program_clock_reference_base;
- int16u program_clock_reference_extension;
- Get_S8 (33, program_clock_reference_base, "program_clock_reference_base"); Param_Info_From_Milliseconds(program_clock_reference_base/90);
- Data_Info_From_Milliseconds(program_clock_reference_base/90);
- Skip_S1( 6, "reserved");
- Get_S2 ( 9, program_clock_reference_extension, "program_clock_reference_extension");
- int64u program_clock_reference=program_clock_reference_base*300+program_clock_reference_extension;
- Param_Info1(program_clock_reference);
- BS_End();
- if (Complete_Stream->Streams[pid]->Searching_TimeStamp_End
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- && (!Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_End
- || Complete_Stream->Streams[pid]->IsPCR) //If PCR, we always want it.
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- )
- {
- Header_Parse_Events_Duration(program_clock_reference);
- if (program_clock_reference!=Complete_Stream->Streams[pid]->TimeStamp_End) //Some PCRs are buggy (low precision), using the first stream offset in the case of duplicate PCR value
- {
- if (Complete_Stream->Streams[pid]->TimeStamp_End_Offset!=(int64u)-1)
- {
- if (program_clock_reference+0x12c00000000LL<Complete_Stream->Streams[pid]->TimeStamp_End)
- program_clock_reference+=0x25800000000LL; //33 bits and *300
- if (!discontinuity_indicator && program_clock_reference>Complete_Stream->Streams[pid]->TimeStamp_End && program_clock_reference<Complete_Stream->Streams[pid]->TimeStamp_End+10*27000000) //Not before, not after 10 seconds, else there is a problem
- {
- float64 Duration_InstantaneousBitRate_Min=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End-(Config_VbrDetection_Delta?0:810));
- float64 Duration_InstantaneousBitRate_Max=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End+(Config_VbrDetection_Delta?0:810));
- float64 Bytes_InstantaneousBitRate=(float64)(File_Offset+Buffer_Offset-Complete_Stream->Streams[pid]->TimeStamp_End_Offset);
- float64 TimeStamp_InstantaneousBitRate_Current_Min=Bytes_InstantaneousBitRate*8/Duration_InstantaneousBitRate_Max*27000000*(1-Config_VbrDetection_Delta);
- float64 TimeStamp_InstantaneousBitRate_Current_Raw=Bytes_InstantaneousBitRate*8/Duration_InstantaneousBitRate_Min*27000000;
- float64 TimeStamp_InstantaneousBitRate_Current_Max=Bytes_InstantaneousBitRate*8/Duration_InstantaneousBitRate_Min*27000000*(1+Config_VbrDetection_Delta);
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Min)
- {
- if (TimeStamp_InstantaneousBitRate_Current_Max<Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Min || TimeStamp_InstantaneousBitRate_Current_Min>Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Max)
- {
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_BitRateMode_IsVbr++;
- #if MEDIAINFO_ADVANCED
- if (Config_VbrDetection_GiveUp && Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_BitRateMode_IsVbr>=Config_VbrDetection_Occurences)
- Config->ParseSpeed=0;
- #endif // MEDIAINFO_ADVANCED
- }
- else
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_BitRateMode_IsCbr++;
- }
- float64 Duration_Min=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End-1);
- float64 Duration_Raw=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End);
- float64 Duration_Max=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End+1);
- float64 Bytes=(float64)(File_Offset+Buffer_Offset-Complete_Stream->Streams[pid]->TimeStamp_End_Offset);
- float64 TimeStamp_Min=Bytes*8/Duration_Max*27000000*(1-Config_VbrDetection_Delta);
- float64 TimeStamp_Raw=Bytes*8/Duration_Raw*27000000;
- float64 TimeStamp_Max=Bytes*8/Duration_Min*27000000*(1+Config_VbrDetection_Delta);
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Min=TimeStamp_Min;
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Raw=TimeStamp_Raw;
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Max=TimeStamp_Max;
- #if MEDIAINFO_ADVANCED
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Min_Raw>TimeStamp_InstantaneousBitRate_Current_Raw)
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Min_Raw=TimeStamp_InstantaneousBitRate_Current_Raw;
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Max_Raw<TimeStamp_InstantaneousBitRate_Current_Raw)
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Max_Raw=TimeStamp_InstantaneousBitRate_Current_Raw;
- int64u Distance=program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End;
- if (Complete_Stream->Streams[pid]->TimeStamp_Distance_Min>Distance)
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Min=Distance;
- if (Complete_Stream->Streams[pid]->TimeStamp_Distance_Max<Distance)
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Max=Distance;
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Total+=Distance;
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Count++;
- #endif // MEDIAINFO_ADVANCED
- }
- #if MEDIAINFO_ADVANCED
- else
- {
- if (!discontinuity_indicator)
- Complete_Stream->Streams[pid]->TimeStamp_HasProblems++;
- float64 Bytes=(float64)(File_Offset+Buffer_Offset-Complete_Stream->Streams[pid]->TimeStamp_End_Offset);
- int64u TimeToAdd;
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Raw)
- TimeToAdd=float64_int64s(Bytes*8/Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Raw*27000000);
- else
- TimeToAdd=0;
- Complete_Stream->Streams[pid]->TimeStamp_Intermediate.push_back(Complete_Stream->Streams[pid]->TimeStamp_End+TimeToAdd);
- Complete_Stream->Streams[pid]->TimeStamp_Intermediate.push_back(program_clock_reference);
- }
- #endif // MEDIAINFO_ADVANCED
- }
- Complete_Stream->Streams[pid]->TimeStamp_End=program_clock_reference;
- Complete_Stream->Streams[pid]->TimeStamp_End_IsUpdated=true;
- Complete_Stream->Streams[pid]->TimeStamp_End_Offset=File_Offset+Buffer_Offset;
- {
- Status[IsUpdated]=true;
- Status[User_16]=true;
- }
- }
- }
- if (Complete_Stream->Streams[pid]->Searching_TimeStamp_Start)
- {
- //This is the first PCR
- Complete_Stream->Streams[pid]->TimeStamp_Start=program_clock_reference;
- Complete_Stream->Streams[pid]->TimeStamp_Start_Offset=File_Offset+Buffer_Offset;
- Complete_Stream->Streams[pid]->TimeStamp_End=program_clock_reference;
- Complete_Stream->Streams[pid]->TimeStamp_End_IsUpdated=true;
- Complete_Stream->Streams[pid]->TimeStamp_End_Offset=File_Offset+Buffer_Offset;
- Complete_Stream->Streams[pid]->Searching_TimeStamp_Start_Set(false);
- Complete_Stream->Streams[pid]->Searching_TimeStamp_End_Set(true);
- Complete_Stream->Streams_With_StartTimeStampCount++;
- {
- Status[IsUpdated]=true;
- Status[User_16]=true;
- }
- }
-
- //Test if we can find the TS bitrate
- if (!Complete_Stream->Streams[pid]->EndTimeStampMoreThanxSeconds && Complete_Stream->Streams[pid]->TimeStamp_Start!=(int64u)-1
- && (File_Offset+Buffer_Offset-Buffer_TotalBytes_FirstSynched)*2<File_Size)
- {
- if (program_clock_reference<Complete_Stream->Streams[pid]->TimeStamp_Start)
- program_clock_reference+=0x200000000LL*300; //33 bits, cyclic
- if ((program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_Start)>Begin_MaxDuration)
- {
- Complete_Stream->Streams[pid]->EndTimeStampMoreThanxSeconds=true;
- Complete_Stream->Streams_With_EndTimeStampMoreThanxSecondsCount++;
- if (Complete_Stream->Streams_NotParsedCount
- && Complete_Stream->Streams_With_StartTimeStampCount>0
- && Complete_Stream->Streams_With_StartTimeStampCount==Complete_Stream->Streams_With_EndTimeStampMoreThanxSecondsCount)
- {
- //We are already parsing 16 seconds (for all PCRs), we don't hope to have more info
- MpegTs_JumpTo_Begin=File_Offset+Buffer_Offset-Buffer_TotalBytes_FirstSynched;
- if (MpegTs_JumpTo_End>MpegTs_JumpTo_Begin)
- MpegTs_JumpTo_End=MpegTs_JumpTo_Begin;
- }
- }
- }
- #else //MEDIAINFO_MPEGTS_PCR_YES
- Skip_B6( "program_clock_reference");
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- }
- if (OPCR_flag)
- {
- BS_Begin();
- Skip_S8(33, "original_program_clock_reference_base");
- Skip_S1( 6, "reserved");
- Skip_S2( 9, "original_program_clock_reference_extension");
- BS_End();
- }
- if (splicing_point_flag)
- {
- Skip_B1( "splice_countdown");
- }
- if (transport_private_data_flag)
- {
- int8u transport_private_data_length;
- Get_B1 (transport_private_data_length, "transport_private_data_length");
- if (Element_Offset+transport_private_data_length<=Element_Pos_Save+1+adaptation_field_length)
- transport_private_data(transport_private_data_length);
- else
- Skip_XX(Element_Pos_Save+1+adaptation_field_length-Element_Offset, "problem");
- }
- if (adaptation_field_extension_flag)
- {
- int8u adaptation_field_extension_length;
- Get_B1 (adaptation_field_extension_length, "adaptation_field_extension_length");
- if (Element_Offset+adaptation_field_extension_length<=Element_Pos_Save+1+adaptation_field_length)
- {
- Element_Begin1("adaptation_field_extension");
- int64u End=Element_Offset+adaptation_field_extension_length;
- bool ltw_flag, piecewise_rate_flag, seamless_splice_flag;
- BS_Begin();
- Get_SB ( ltw_flag, "ltw_flag");
- Get_SB ( piecewise_rate_flag, "piecewise_rate_flag");
- Get_SB ( seamless_splice_flag, "seamless_splice_flag");
- Skip_S1( 5, "reserved");
- if (ltw_flag)
- {
- Skip_SB( "ltw_valid_flag");
- Skip_S2(15, "ltw_offset");
- }
- if (piecewise_rate_flag)
- {
- Skip_S1( 2, "reserved");
- Skip_S3(22, "piecewise_rate");
- }
- if (seamless_splice_flag)
- {
- Skip_S1( 4, "splice_type");
- int16u DTS_29, DTS_14;
- int8u DTS_32;
- Element_Begin1("DTS");
- Get_S1 ( 3, DTS_32, "DTS_32");
- Mark_1();
- Get_S2 (15, DTS_29, "DTS_29");
- Mark_1();
- Get_S2 (15, DTS_14, "DTS_14");
- Mark_1();
-
- //Filling
- int64u DTS;
- DTS=(((int64u)DTS_32)<<30)
- | (((int64u)DTS_29)<<15)
- | (((int64u)DTS_14));
- Element_Info_From_Milliseconds(DTS/90);
- Element_End0();
- }
- BS_End();
- if (Element_Offset<End)
- Skip_XX(End-Element_Offset, "reserved");
- Element_End0();
- }
- else
- Skip_XX(Element_Pos_Save+1+adaptation_field_length-Element_Offset, "problem");
- }
- }
-
- if (Element_Offset<Element_Pos_Save+1+adaptation_field_length)
- Skip_XX(Element_Pos_Save+1+adaptation_field_length-Element_Offset, "stuffing_bytes");
- Element_End0();
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- int8u adaptation_field_length=Buffer[Buffer_Offset+BDAV_Size+4];
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- if (adaptation_field_length>188-4-1) //TS size - header - adaptation_field_length
- adaptation_field_length=188-4-1;
- else if (adaptation_field_length)
- {
- bool discontinuity_indicator=(Buffer[Buffer_Offset+BDAV_Size+5]&0x80)!=0;
- bool PCR_flag=(Buffer[Buffer_Offset+BDAV_Size+5]&0x10)!=0;
- bool OPCR_flag=(Buffer[Buffer_Offset+BDAV_Size+5]&0x08)!=0;
- bool splicing_point_flag=(Buffer[Buffer_Offset+BDAV_Size+5]&0x04)!=0;
- bool transport_private_data_flag=(Buffer[Buffer_Offset+BDAV_Size+5]&0x02)!=0;
- if (PCR_flag)
- {
- int64u program_clock_reference=( (((int64u)Buffer[Buffer_Offset+BDAV_Size+6])<<25)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+7])<<17)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+8])<< 9)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+9])<< 1)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+10])>>7));
- program_clock_reference*=300;
- program_clock_reference+=( (((int64u)Buffer[Buffer_Offset+BDAV_Size+10]&0x01)<<8)
- | (((int64u)Buffer[Buffer_Offset+BDAV_Size+11]) ));
- if (Complete_Stream->Streams[pid]->Searching_TimeStamp_End
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- && (!Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_End
- || Complete_Stream->Streams[pid]->IsPCR) //If PCR, we always want it.
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- )
- {
- Header_Parse_Events_Duration(program_clock_reference);
- if (program_clock_reference!=Complete_Stream->Streams[pid]->TimeStamp_End) //Some PCRs are buggy (low precision), using the first stream offset in the case of duplicate PCR value
- {
- if (Complete_Stream->Streams[pid]->TimeStamp_End_Offset!=(int64u)-1)
- {
- if (program_clock_reference+0x12c00000000LL<Complete_Stream->Streams[pid]->TimeStamp_End)
- program_clock_reference+=0x25800000000LL; //33 bits and *300
- if (!discontinuity_indicator && program_clock_reference>Complete_Stream->Streams[pid]->TimeStamp_End && program_clock_reference<Complete_Stream->Streams[pid]->TimeStamp_End+10*27000000) //Not before, not after 10 seconds, else there is a problem
- {
- float64 Duration_InstantaneousBitRate_Min=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End-(Config_VbrDetection_Delta?0:810));
- float64 Duration_InstantaneousBitRate_Max=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End+(Config_VbrDetection_Delta?0:810));
- float64 Bytes_InstantaneousBitRate=(float64)(File_Offset+Buffer_Offset-Complete_Stream->Streams[pid]->TimeStamp_End_Offset);
- float64 TimeStamp_InstantaneousBitRate_Current_Min=Bytes_InstantaneousBitRate*8/Duration_InstantaneousBitRate_Max*27000000*(1-Config_VbrDetection_Delta);
- float64 TimeStamp_InstantaneousBitRate_Current_Max=Bytes_InstantaneousBitRate*8/Duration_InstantaneousBitRate_Min*27000000*(1+Config_VbrDetection_Delta);
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Min)
- {
- if (TimeStamp_InstantaneousBitRate_Current_Max<Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Min || TimeStamp_InstantaneousBitRate_Current_Min>Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Max)
- {
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_BitRateMode_IsVbr++;
- #if MEDIAINFO_ADVANCED
- if (Config_VbrDetection_GiveUp && Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_BitRateMode_IsVbr>=Config_VbrDetection_Occurences)
- Config->ParseSpeed=0;
- #endif // MEDIAINFO_ADVANCED
- }
- else
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_BitRateMode_IsCbr++;
- }
- float64 Duration_Min=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End-1);
- float64 Duration_Raw=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End);
- float64 Duration_Max=(float64)(program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End+1);
- float64 Bytes=(float64)(File_Offset+Buffer_Offset-Complete_Stream->Streams[pid]->TimeStamp_End_Offset);
- float64 InstantaneousBitRate_Min=Bytes*8/Duration_Max*27000000*(1-Config_VbrDetection_Delta);
- float64 InstantaneousBitRate_Raw=Bytes*8/Duration_Raw*27000000;
- float64 InstantaneousBitRate_Max=Bytes*8/Duration_Min*27000000*(1+Config_VbrDetection_Delta);
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Min=InstantaneousBitRate_Min;
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Raw=InstantaneousBitRate_Raw;
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Max=InstantaneousBitRate_Max;
- #if MEDIAINFO_ADVANCED
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Min_Raw>InstantaneousBitRate_Raw)
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Min_Raw=InstantaneousBitRate_Raw;
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Max_Raw<InstantaneousBitRate_Raw)
- Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Max_Raw=InstantaneousBitRate_Raw;
- int64u Distance=program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_End;
- if (Complete_Stream->Streams[pid]->TimeStamp_Distance_Min>Distance)
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Min=Distance;
- if (Complete_Stream->Streams[pid]->TimeStamp_Distance_Max<Distance)
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Max=Distance;
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Total+=Distance;
- Complete_Stream->Streams[pid]->TimeStamp_Distance_Count++;
- #endif // MEDIAINFO_ADVANCED
- }
- #if MEDIAINFO_ADVANCED
- else
- {
- if (!discontinuity_indicator)
- Complete_Stream->Streams[pid]->TimeStamp_HasProblems++;
- float64 Bytes=(float64)(File_Offset+Buffer_Offset-Complete_Stream->Streams[pid]->TimeStamp_End_Offset);
- int64u TimeToAdd;
- if (Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Raw)
- TimeToAdd=float64_int64s(Bytes*8/Complete_Stream->Streams[pid]->TimeStamp_InstantaneousBitRate_Current_Raw*27000000);
- else
- TimeToAdd=0;
- Complete_Stream->Streams[pid]->TimeStamp_Intermediate.push_back(Complete_Stream->Streams[pid]->TimeStamp_End+TimeToAdd);
- Complete_Stream->Streams[pid]->TimeStamp_Intermediate.push_back(program_clock_reference);
- }
- #endif // MEDIAINFO_ADVANCED
- }
- Complete_Stream->Streams[pid]->TimeStamp_End=program_clock_reference;
- Complete_Stream->Streams[pid]->TimeStamp_End_IsUpdated=true;
- Complete_Stream->Streams[pid]->TimeStamp_End_Offset=File_Offset+Buffer_Offset;
- {
- Status[IsUpdated]=true;
- Status[User_16]=true;
- }
- }
- }
- if (Complete_Stream->Streams[pid]->Searching_TimeStamp_Start)
- {
- //This is the first PCR
- Complete_Stream->Streams[pid]->TimeStamp_Start=program_clock_reference;
- Complete_Stream->Streams[pid]->TimeStamp_Start_Offset=File_Offset+Buffer_Offset;
- Complete_Stream->Streams[pid]->TimeStamp_End=program_clock_reference;
- Complete_Stream->Streams[pid]->TimeStamp_End_IsUpdated=true;
- Complete_Stream->Streams[pid]->TimeStamp_End_Offset=File_Offset+Buffer_Offset;
- Complete_Stream->Streams[pid]->Searching_TimeStamp_Start_Set(false);
- Complete_Stream->Streams[pid]->Searching_TimeStamp_End_Set(true);
- Complete_Stream->Streams_With_StartTimeStampCount++;
- {
- Status[IsUpdated]=true;
- Status[User_16]=true;
- }
- }
-
- //Test if we can find the TS bitrate
- if (!Complete_Stream->Streams[pid]->EndTimeStampMoreThanxSeconds && Complete_Stream->Streams[pid]->TimeStamp_Start!=(int64u)-1
- && (File_Offset+Buffer_Offset-Buffer_TotalBytes_FirstSynched)*2<File_Size)
- {
- if (program_clock_reference<Complete_Stream->Streams[pid]->TimeStamp_Start)
- program_clock_reference+=0x200000000LL*300; //33 bits, cyclic
- if ((program_clock_reference-Complete_Stream->Streams[pid]->TimeStamp_Start)>Begin_MaxDuration)
- {
- Complete_Stream->Streams[pid]->EndTimeStampMoreThanxSeconds=true;
- Complete_Stream->Streams_With_EndTimeStampMoreThanxSecondsCount++;
- if (Complete_Stream->Streams_NotParsedCount
- && Complete_Stream->Streams_With_StartTimeStampCount>0
- && Complete_Stream->Streams_With_StartTimeStampCount==Complete_Stream->Streams_With_EndTimeStampMoreThanxSecondsCount)
- {
- //We are already parsing 16 seconds (for all PCRs), we don't hope to have more info
- MpegTs_JumpTo_Begin=File_Offset+Buffer_Offset-Buffer_TotalBytes_FirstSynched;
- if (MpegTs_JumpTo_End>MpegTs_JumpTo_Begin)
- MpegTs_JumpTo_End=MpegTs_JumpTo_Begin;
- }
- }
- }
- }
- if (transport_private_data_flag && adaptation_field_length>1+(PCR_flag?6:0)+(OPCR_flag?6:0)+(splicing_point_flag?1:0)+1)
- {
- int8u transport_private_data_length=Buffer[Buffer_Offset+BDAV_Size+5+1+(PCR_flag?6:0)+(OPCR_flag?6:0)+(splicing_point_flag?1:0)];
- if (1+(PCR_flag?6:0)+(OPCR_flag?6:0)+(splicing_point_flag?1:0)+1+transport_private_data_length<=adaptation_field_length)
- {
- int64u Element_Offset_Save=Element_Offset;
- Element_Offset=5+1+(PCR_flag?6:0)+(OPCR_flag?6:0)+(splicing_point_flag?1:0)+1;
- transport_private_data(transport_private_data_length);
- Element_Offset=Element_Offset_Save;
- }
- }
- }
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- Element_Offset+=1+adaptation_field_length;
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-void File_MpegTs::Header_Parse_Events()
-{
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-void File_MpegTs::Header_Parse_Events_Duration(int64u program_clock_reference)
-{
-}
-#endif //MEDIAINFO_EVENTS
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED2
-void File_MpegTs::Read_Buffer_SegmentChange()
-{
- if (Complete_Stream==NULL || Complete_Stream->Streams.empty())
- return;
-
- for (size_t StreamID=0; StreamID<0x2000; StreamID++)//std::map<int64u, stream>::iterator Stream=Streams.begin(); Stream!=Streams.end(); Stream++)
- if (Complete_Stream->Streams[StreamID]->Parser)
- Complete_Stream->Streams[StreamID]->Parser->Open_Buffer_SegmentChange();
-}
-#endif //MEDIAINFO_ADVANCED2
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Data_Parse()
-{
- //Counting
- Frame_Count++;
-
- //TSP specific
- if (TSP_Size && Element_Size>TSP_Size)
- Element_Size-=TSP_Size;
-
- #if MEDIAINFO_DUPLICATE
- if (Complete_Stream->Streams[pid]->ShouldDuplicate)
- File__Duplicate_Write();
- #endif //MEDIAINFO_DUPLICATE
-
- //Parsing
- if (!Complete_Stream->Streams[pid]->Searching_Payload_Start
- && !Complete_Stream->Streams[pid]->Searching_Payload_Continue
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- && !Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_Start
- && !Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_End
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- )
- Skip_XX(Element_Size, "data");
- else
- switch (Complete_Stream->Streams[pid]->Kind)
- {
- case complete_stream::stream::pes : PES(); break;
- case complete_stream::stream::psi : PSI(); break;
- default: ;
- }
-
- //TSP specific
- if (TSP_Size && Element_Size>TSP_Size)
- {
- Element_Size+=TSP_Size;
- Skip_B4( "TSP"); //TSP supplement
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpegTs::PES()
-{
- //Info
- DETAILS_INFO(if (Complete_Stream->transport_stream_id_IsValid) Element_Info1(Mpeg_Psi_stream_type_Info(Complete_Stream->Streams[pid]->stream_type, Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[0]].registration_format_identifier));)
-
- //Demux
- #if MEDIAINFO_DEMUX
- Element_Code=pid;
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- //Exists
- if (!Complete_Stream->Streams[pid]->IsRegistered)
- {
- Complete_Stream->Streams[pid]->IsRegistered=true;
- for (size_t Pos=0; Pos<Complete_Stream->Streams[pid]->program_numbers.size(); Pos++)
- if (!Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[Pos]].IsRegistered)
- {
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[Pos]].Update_Needed_IsRegistered=true;
-
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[Pos]].IsRegistered=true;
- }
-
- Complete_Stream->Streams[pid]->IsUpdated_IsRegistered=true;
- Complete_Stream->PES_PIDs.insert(pid);
-
- Status[IsUpdated]=true;
- Status[User_19]=true;
- }
-
- //Case of encrypted streams
- if (transport_scrambling_control)
- {
- if (!Complete_Stream->Streams[pid]->Searching_Payload_Continue)
- Complete_Stream->Streams[pid]->Searching_Payload_Continue_Set(true); //In order to count the packets
-
- if (Complete_Stream->Streams[pid]->IsScrambled>16)
- {
- //Don't need anymore
- Complete_Stream->Streams[pid]->Searching_Payload_Start_Set(false);
- Complete_Stream->Streams[pid]->Searching_Payload_Continue_Set(false);
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_Start_Set(false);
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- if (!Complete_Stream->Streams[pid]->IsParsed && Complete_Stream->Streams_NotParsedCount)
- {
- Complete_Stream->Streams[pid]->IsParsed=true;
- Complete_Stream->Streams_NotParsedCount--;
- }
- }
- Skip_XX(Element_Size-Element_Offset, "Scrambled data");
-
- return;
- }
- else if (Complete_Stream->Streams[pid]->IsScrambled)
- Complete_Stream->Streams[pid]->IsScrambled--;
-
- //Parser creation
- if (Complete_Stream->Streams[pid]->Parser==NULL)
- {
- //Waiting for first payload_unit_start_indicator
- if (!payload_unit_start_indicator)
- {
- Element_DoNotShow(); //We don't want to show this item because there is no interessant info
- return; //This is not the start of the PES
- }
-
- //If unknown stream_type
- if (Complete_Stream->transport_stream_id_IsValid
- && Mpeg_Psi_stream_type_StreamKind(Complete_Stream->Streams[pid]->stream_type, Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[0]].registration_format_identifier)==Stream_Max
- && Complete_Stream->Streams[pid]->stream_type!=0x06 //Exception for private data
- && Complete_Stream->Streams[pid]->stream_type<=0x7F //Exception for private data
- && Mpeg_Descriptors_registration_format_identifier_StreamKind(Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[0]].registration_format_identifier)==Stream_Max //From Descriptor
- && Config->File_MpegTs_stream_type_Trust_Get())
- {
- Complete_Stream->Streams[pid]->Searching_Payload_Start_Set(false);
- Complete_Stream->Streams[pid]->Searching_Payload_Continue_Set(false);
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_Start_Set(false);
- Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_End_Set(false);
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- if (!Complete_Stream->Streams[pid]->IsParsed && Complete_Stream->Streams_NotParsedCount)
- {
- Complete_Stream->Streams[pid]->IsParsed=true;
- Complete_Stream->Streams_NotParsedCount--;
- }
- return;
- }
-
- //Allocating an handle if needed
- #if defined(MEDIAINFO_MPEGPS_YES)
- Complete_Stream->Streams[pid]->Parser=new File_MpegPs;
- #if MEDIAINFO_SEEK
- if (Unsynch_Frame_Counts.find(pid)!=Unsynch_Frame_Counts.end())
- {
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->Unsynch_Frame_Count_Temp=Unsynch_Frame_Counts[pid];
- Unsynch_Frame_Counts.erase(pid);
- }
- #endif //MEDIAINFO_SEEK
- #if MEDIAINFO_DEMUX
- if (Config_Demux)
- {
- if (Complete_Stream->Streams[pid]->stream_type==0x20 && Complete_Stream->Streams[pid]->SubStream_pid)
- {
- //Creating the demux buffer
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->SubStream_Demux=new File_MpegPs::demux;
- //If main parser is already created, associating the new demux buffer
- if (Complete_Stream->Streams[Complete_Stream->Streams[pid]->SubStream_pid]->Parser)
- ((File_MpegPs*)Complete_Stream->Streams[Complete_Stream->Streams[pid]->SubStream_pid]->Parser)->SubStream_Demux=((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->SubStream_Demux;
- }
- if (Complete_Stream->Streams[pid]->stream_type!=0x20 && Complete_Stream->Streams[pid]->SubStream_pid && (File_MpegPs*)Complete_Stream->Streams[Complete_Stream->Streams[pid]->SubStream_pid]->Parser)
- {
- //If SubStream parser is already created, associating the SubStream demux buffer
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->SubStream_Demux=((File_MpegPs*)Complete_Stream->Streams[Complete_Stream->Streams[pid]->SubStream_pid]->Parser)->SubStream_Demux;
- }
- }
- #endif //MEDIAINFO_DEMUX
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (FromAribStdB24B37)
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->FromAribStdB24B37=true;
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- if (Searching_TimeStamp_Start)
- Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_Start_Set(true);
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->Searching_TimeStamp_Start=Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_Start;
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->FromTS=true;
- if (Config->File_MpegTs_stream_type_Trust_Get())
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->FromTS_stream_type=Complete_Stream->Streams[pid]->stream_type;
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->FromTS_descriptor_tag=Complete_Stream->Streams[pid]->descriptor_tag;
- if (!Complete_Stream->Streams[pid]->program_numbers.empty())
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->FromTS_program_format_identifier=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[0]].registration_format_identifier;
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->FromTS_format_identifier=Complete_Stream->Streams[pid]->registration_format_identifier;
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->MPEG_Version=2;
- complete_stream::transport_stream::iod_ess::iterator IOD_ES=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs.find(Complete_Stream->Streams[pid]->FMC_ES_ID);
- if (IOD_ES!=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs.end())
- {
- #ifdef MEDIAINFO_MPEG4_YES
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->ParserFromTs=IOD_ES->second.Parser; IOD_ES->second.Parser=NULL;
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->SLConfig=IOD_ES->second.SLConfig; IOD_ES->second.SLConfig=NULL;
- #endif
- }
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- Complete_Stream->Streams[pid]->Parser->ShouldContinueParsing=true;
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- Complete_Stream->Streams[pid]->Searching_Payload_Continue_Set(true);
- #else
- //Filling
- Streams[pid]->Parser=new File_Unknown();
- #endif
- Complete_Stream->Streams[pid]->Parser->CA_system_ID_MustSkipSlices=Complete_Stream->Streams[pid]->CA_system_ID_MustSkipSlices;
- #if MEDIAINFO_IBI
- if (Ibi.Streams[pid]==NULL)
- Ibi.Streams[pid]=new ibi::stream;
- Complete_Stream->Streams[pid]->Parser->IbiStream=Ibi.Streams[pid];
- #endif //MEDIAINFO_IBI
- Open_Buffer_Init(Complete_Stream->Streams[pid]->Parser);
- }
-
- //If unsynched, waiting for first payload_unit_start_indicator
- if (!Complete_Stream->Streams[pid]->Parser->Synched && !payload_unit_start_indicator)
- {
- Element_DoNotShow(); //We don't want to show this item because there is no interessant info
- return; //This is not the start of the PES
- }
-
- //Parsing
- if (Complete_Stream->Streams[pid]->IsPCR)
- ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->FrameInfo.PCR=Complete_Stream->Streams[pid]->TimeStamp_End==(int64u)-1?(int64u)-1:Complete_Stream->Streams[pid]->TimeStamp_End*1000/27; //27 MHz
- #if MEDIAINFO_IBI
- if (Complete_Stream->transport_stream_id!=(int16u)-1 && !Complete_Stream->Streams[pid]->program_numbers.empty())
- {
- int16u Program_PID=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[0]].pid;
- Complete_Stream->Streams[pid]->Parser->Ibi_SynchronizationOffset_Current=Complete_Stream->Streams[Program_PID]->Ibi_SynchronizationOffset_BeginOfFrame;
- if (Complete_Stream->Streams[pid]->Parser->Ibi_SynchronizationOffset_Current==(int64u)-1)
- return; //Not yet synchronized
- }
- else
- Complete_Stream->Streams[pid]->Parser->Ibi_SynchronizationOffset_Current=File_Offset+Buffer_Offset-Header_Size;
- #endif //MEDIAINFO_IBI
-
- #if defined(MEDIAINFO_ARIBSTDB24B37_YES)
- if (FromAribStdB24B37)
- Complete_Stream->Streams[pid]->Parser->FrameInfo=FrameInfo;
- #endif //defined(MEDIAINFO_ARIBSTDB24B37_YES)
-
- //EIA-608/EIA-708 descriptors
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- Complete_Stream->Streams[pid]->Parser->ServiceDescriptors=NULL;
- if (Complete_Stream->Streams[pid]->ServiceDescriptors_IsPresent)
- Complete_Stream->Streams[pid]->Parser->ServiceDescriptors=&Complete_Stream->Streams[pid]->ServiceDescriptors;
- if (Complete_Stream->Streams[pid]->Parser->ServiceDescriptors==NULL)
- {
- for (size_t ProgramPos=0; ProgramPos<Complete_Stream->Streams[pid]->program_numbers.size(); ++ProgramPos)
- {
- Complete_Stream->Streams[pid]->Parser->ServiceDescriptors=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[ProgramPos]].ServiceDescriptors;
- if (Complete_Stream->Streams[pid]->Parser->ServiceDescriptors)
- break;
- }
- }
- if (Complete_Stream->Streams[pid]->Parser->ServiceDescriptors==NULL)
- {
- for (size_t ProgramPos=0; ProgramPos<Complete_Stream->Streams[pid]->program_numbers.size(); ++ProgramPos)
- if (Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[ProgramPos]].source_id_IsValid)
- {
- int16u source_id=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[ProgramPos]].source_id;
- complete_stream::sources::iterator Source=Complete_Stream->Sources.find(source_id);
- if (Source!=Complete_Stream->Sources.end())
- for (complete_stream::source::atsc_epg_blocks::iterator ATSC_EPG_Block=Source->second.ATSC_EPG_Blocks.begin(); ATSC_EPG_Block!=Source->second.ATSC_EPG_Blocks.end(); ++ATSC_EPG_Block)
- for (complete_stream::source::atsc_epg_block::events::iterator Event=ATSC_EPG_Block->second.Events.begin(); Event!=ATSC_EPG_Block->second.Events.end(); ++Event)
- if (Event->second.ServiceDescriptors)
- {
- Complete_Stream->Streams[pid]->Parser->ServiceDescriptors=Event->second.ServiceDescriptors;
- break;
- }
- }
- }
- if (Complete_Stream->Streams[pid]->Parser->ServiceDescriptors==NULL)
- Complete_Stream->Streams[pid]->Parser->ServiceDescriptors=&Complete_Stream->Streams[pid]->ServiceDescriptors; //Default to empty descriptor present in order to say descriptor info is supported
- #endif
-
- Open_Buffer_Continue(Complete_Stream->Streams[pid]->Parser);
- PES_Parse_Finish();
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::PES_Parse_Finish()
-{
- if (Complete_Stream->Streams[pid]->Parser->Status[IsUpdated])
- {
- Complete_Stream->Streams[pid]->Parser->Status[IsUpdated]=false;
- Complete_Stream->Streams[pid]->IsUpdated_Info=true;
- for (size_t Pos=0; Pos<Complete_Stream->Streams[pid]->program_numbers.size(); Pos++)
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[Pos]].Update_Needed_IsRegistered=true;
-
- Status[IsUpdated]=true;
- Status[User_19]=true;
- }
-
- #if defined(MEDIAINFO_MPEGPS_YES) && defined(MEDIAINFO_MPEGTS_PESTIMESTAMP_YES)
- if (MpegTs_JumpTo_Begin+MpegTs_JumpTo_End>File_Size
- && !Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_End
- && ((File_MpegPs*)Complete_Stream->Streams[pid]->Parser)->HasTimeStamps)
- {
- Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_Start_Set(false);
- Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_End_Set(true);
- }
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
-
- //Need anymore?
- if (Complete_Stream->Streams[pid]->Parser->Status[IsFilled]
- || Complete_Stream->Streams[pid]->Parser->Status[IsFinished])
- {
- if ((Complete_Stream->Streams[pid]->Searching_Payload_Start || Complete_Stream->Streams[pid]->Searching_Payload_Continue) && Config->ParseSpeed<1 && MpegTs_JumpTo_End)
- {
- if (Config->File_StopSubStreamAfterFilled_Get())
- {
- Complete_Stream->Streams[pid]->Searching_Payload_Start_Set(false);
- Complete_Stream->Streams[pid]->Searching_Payload_Continue_Set(false);
- }
- if (!Complete_Stream->Streams[pid]->IsParsed && Complete_Stream->Streams_NotParsedCount)
- {
- Complete_Stream->Streams[pid]->IsParsed=true;
- Complete_Stream->Streams_NotParsedCount--;
- }
- }
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- if (Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_Start)
- Complete_Stream->Streams[pid]->Searching_ParserTimeStamp_Start_Set(false);
- #else //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- if (Config->ParseSpeed<1.0)
- Finish(Complete_Stream->Streams[pid]->Parser);
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- }
-
- #if MEDIAINFO_SEEK && MEDIAINFO_IBI
- if (Seek_ID!=(int64u)-1)
- {
- if (Ibi.Streams[Seek_ID]->IsModified)
- {
- Read_Buffer_Seek(2, Seek_Value, Seek_ID);
- }
- else if (Ibi.Streams[Seek_ID]->Infos_Pos>=2 && Ibi.Streams[Seek_ID]->IsSynchronized && Ibi.Streams[Seek_ID]->Infos[Ibi.Streams[Seek_ID]->Infos_Pos-1].StreamOffset>=Seek_Value_Maximal)
- {
- InfiniteLoop_Detect++;
- if (InfiniteLoop_Detect>16)
- {
- //Infinite loop
- Seek_ID=(int64u)-1;
- Seek_Value=(int64u)-1;
- InfiniteLoop_Detect=0;
- Config->Demux_IsSeeking=false;
- }
- else
- {
- //No intermediate seek point found, going to previous seek point
- GoTo(Ibi.Streams[Seek_ID]->Infos[Ibi.Streams[Seek_ID]->Infos_Pos-2].StreamOffset);
- Open_Buffer_Unsynch();
- }
- }
- }
- #endif //MEDIAINFO_SEEK && MEDIAINFO_IBI
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::PSI()
-{
- //Initializing
- if (payload_unit_start_indicator)
- {
- delete ((File_Mpeg_Psi*)Complete_Stream->Streams[pid]->Parser); Complete_Stream->Streams[pid]->Parser=new File_Mpeg_Psi;
- Open_Buffer_Init(Complete_Stream->Streams[pid]->Parser);
- ((File_Mpeg_Psi*)Complete_Stream->Streams[pid]->Parser)->Complete_Stream=Complete_Stream;
- ((File_Mpeg_Psi*)Complete_Stream->Streams[pid]->Parser)->pid=pid;
- }
- else if (Complete_Stream->Streams[pid]->Parser==NULL)
- {
- Skip_XX(Element_Size, "data");
- return; //This is not the start of the PSI
- }
-
- //Parsing
- #if MEDIAINFO_IBI
- Complete_Stream->Streams[pid]->Parser->Ibi_SynchronizationOffset_Current=File_Offset+Buffer_Offset-Header_Size;
- #endif //MEDIAINFO_IBI
- Open_Buffer_Continue(Complete_Stream->Streams[pid]->Parser);
-
- //Filling
- if (Complete_Stream->Streams[pid]->Parser->Status[IsFilled])
- {
- //Accept
- if (!Status[IsAccepted] && pid==0x0000 && Complete_Stream->Streams[pid]->Parser->Status[IsAccepted])
- Accept("MPEG-TS");
-
- //Disabling this pid
- delete Complete_Stream->Streams[pid]->Parser; Complete_Stream->Streams[pid]->Parser=NULL;
- Complete_Stream->Streams[pid]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[pid]->Searching_Payload_Continue_Set(false);
-
- //EPG
- if (Complete_Stream->Sources_IsUpdated || Complete_Stream->Programs_IsUpdated)
- {
- Status[IsUpdated]=true;
- Status[User_18]=true;
- }
-
- //Duration
- if (Complete_Stream->Duration_End_IsUpdated)
- {
- Status[IsUpdated]=true;
- Status[User_17]=true;
- }
-
- //Program change
- if (pid==0x0000)
- {
- Buffer_TotalBytes_LastSynched=Buffer_TotalBytes+Buffer_Offset-Header_Size;
- Status[IsFilled]=false;
-
- Status[IsUpdated]=true;
- Status[User_19]=true;
- }
- if (!Complete_Stream->Streams[pid]->Table_IDs.empty() && Complete_Stream->Streams[pid]->Table_IDs[0x02])
- {
- Buffer_TotalBytes_LastSynched=Buffer_TotalBytes+Buffer_Offset-Header_Size;
- Status[IsFilled]=false;
-
- //Status[IsUpdated]=true;
- //Status[User_19]=true;
- }
-
- //Item removal
- if (pid==0x0000 || (!Complete_Stream->Streams[pid]->Table_IDs.empty() && Complete_Stream->Streams[pid]->Table_IDs[0x02]))
- {
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- if (!Complete_Stream->StreamPos_ToRemove[StreamKind].empty())
- {
- sort(Complete_Stream->StreamPos_ToRemove[StreamKind].begin(), Complete_Stream->StreamPos_ToRemove[StreamKind].end());
- size_t Pos=Complete_Stream->StreamPos_ToRemove[StreamKind].size();
- do
- {
- Pos--;
-
- //Erasing text substreams
- Ztring ID_ToFind=Retrieve((stream_t)StreamKind, Complete_Stream->StreamPos_ToRemove[StreamKind][Pos], General_ID)+__T('-');
- for (size_t TextPos=0; TextPos<Count_Get(Stream_Text); TextPos++)
- if (Retrieve(Stream_Text, TextPos, General_ID).find(ID_ToFind)==0)
- Stream_Erase(Stream_Text, TextPos);
-
- //Erasing the stream
- Stream_Erase((stream_t)StreamKind, Complete_Stream->StreamPos_ToRemove[StreamKind][Pos]);
-
- //Moving other StreamPos
- for (size_t Pos2=Pos+1; Pos2<Complete_Stream->StreamPos_ToRemove[StreamKind].size(); Pos2++)
- Complete_Stream->StreamPos_ToRemove[StreamKind][Pos]--;
-
- //Informing that the menu must be recalculated - TODO: only the related programs
- if (StreamKind!=Stream_Menu)
- {
- for (complete_stream::transport_stream::programs::iterator Program=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.begin(); Program!=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.end(); ++Program)
- Program->second.Update_Needed_StreamPos=true;
- }
- else if (Complete_Stream->StreamPos_ToRemove[StreamKind][Pos]<Complete_Stream->program_number_Order.size())
- {
- Complete_Stream->program_number_Order.erase(Complete_Stream->program_number_Order.begin()+Complete_Stream->StreamPos_ToRemove[StreamKind][Pos]);
- }
- }
- while (Pos);
- Complete_Stream->StreamPos_ToRemove[StreamKind].clear();
- }
-
- Status[IsUpdated]=true;
- Status[User_19]=true;
- }
- }
- else
- //Waiting for more data
- Complete_Stream->Streams[pid]->Searching_Payload_Continue_Set(true);
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::SetAllToPES()
-{
- Complete_Stream->Streams_NotParsedCount=(size_t)-1;
- for (size_t StreamID=0; StreamID<0x2000; StreamID++)
- {
- delete Complete_Stream->Streams[StreamID]; Complete_Stream->Streams[StreamID]=new complete_stream::stream;
- }
- #ifdef MEDIAINFO_ARIBSTDB24B37_YES
- size_t StreamID=FromAribStdB24B37?0x00:0x20;
- #else //MEDIAINFO_ARIBSTDB24B37_YES
- size_t StreamID=0x20;
- #endif //MEDIAINFO_ARIBSTDB24B37_YES
- for (; StreamID<0x1FFF; StreamID++)
- {
- Complete_Stream->Streams[StreamID]->Kind=complete_stream::stream::pes;
- Complete_Stream->Streams[StreamID]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[StreamID]->Searching_Payload_Continue_Set(false);
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Complete_Stream->Streams[StreamID]->Element_Info1="PES";
- #endif //MEDIAINFO_TRACE
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- Complete_Stream->Streams[StreamID]->Searching_TimeStamp_Start_Set(true);
- Complete_Stream->Streams[StreamID]->Searching_TimeStamp_End_Set(false);
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- Complete_Stream->Streams[StreamID]->Searching_ParserTimeStamp_Start_Set(true);
- Complete_Stream->Streams[StreamID]->Searching_ParserTimeStamp_End_Set(false);
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- }
- Complete_Stream->NoPatPmt=true;
-}
-
-//---------------------------------------------------------------------------
-void File_MpegTs::transport_private_data(int8u transport_private_data_length)
-{
- //Trying SCTE 128
- int64u End=Element_Offset+transport_private_data_length;
- #if MEDIAINFO_TRACE
- bool Trace_Activated_Save=Trace_Activated;
- Trace_Activated=false;
- #endif //MEDIAINFO_TRACE
- Element_Begin1("SCTE 128 coherency test");
- bool IsOk=true;
- while (Element_Offset+2<=End)
- {
- int8u tag, length;
- Get_B1 (tag, "tag");
- Get_B1 (length, "length");
- if (Element_Offset+length>End || (tag==0xDF && length<4))
- {
- Skip_XX(End-Element_Offset, "problem");
- IsOk=false;
- }
- else
- Skip_XX(length, "data");
- }
- if (Element_Offset<End)
- {
- Skip_XX(End-Element_Offset, "problem");
- IsOk=false;
- }
- Element_End0();
- #if MEDIAINFO_TRACE
- Trace_Activated=Trace_Activated_Save;
- #endif //MEDIAINFO_TRACE
- if (IsOk)
- {
- Element_Offset=End-transport_private_data_length;
- while (Element_Offset+2<=End)
- {
- Element_Begin0();
- int8u tag, length;
- Get_B1 (tag, "tag"); Param_Info1(Scte128_tag(tag)); Element_Name(Scte128_tag(tag));
- Get_B1 (length, "length");
- if (tag==0xDF && length>=4)
- {
- int32u format_identifier;
- Get_C4 (format_identifier, "format identifier");
- switch (format_identifier)
- {
- case 0x45425030 : //EBP0
- {
- int64u End2=Element_Offset+length-4;
- Element_Info1("CableLabs - Encoder Boundary Point");
- BS_Begin();
- bool EBP_fragment_flag, EBP_segment_flag, EBP_SAP_flag, EBP_grouping_flag, EBP_time_flag, EBP_concealment_flag, EBP_extension_flag;
- Get_SB (EBP_fragment_flag, "EBP_fragment_flag");
- Get_SB (EBP_segment_flag, "EBP_segment_flag");
- Get_SB (EBP_SAP_flag, "EBP_SAP_flag");
- Get_SB (EBP_grouping_flag, "EBP_grouping_flag");
- Get_SB (EBP_time_flag, "EBP_time_flag");
- Get_SB (EBP_concealment_flag, "EBP_concealment_flag");
- Skip_SB( "Reserved");
- Get_SB (EBP_extension_flag, "EBP_extension_flag");
- if (EBP_extension_flag)
- {
- Skip_SB( "EBP_ext_partition_flag");
- Skip_S1(7, "reserved");
- }
- if (EBP_SAP_flag)
- {
- Skip_S1(3, "EBP_SAP_type");
- Skip_S1(5, "reserved");
- }
- if (EBP_grouping_flag)
- {
- bool EBP_grouping_ext_flag=true;
- while (EBP_grouping_ext_flag && Element_Offset<End2)
- {
- Get_SB (EBP_grouping_ext_flag, "EBP_grouping_ext_flag");
- Skip_S1(7, "EBP_grouping_id");
- }
- }
- BS_End();
- if (EBP_time_flag)
- {
- Element_Begin1("EBP_acquisition_time");
- if (Complete_Stream->Streams[pid] && !Complete_Stream->Streams[pid]->EBP_IsPresent)
- {
- int32u Seconds, Fraction;
- Get_B4 (Seconds, "Seconds"); Param_Info1(Ztring().Date_From_Seconds_1970((int32u)(Seconds-2208988800))); //Param_Info1(Ztring().Date_From_Seconds_1900(Seconds)); //Temp for old ZenLib
- Get_B4 (Fraction, "Fraction"); Param_Info1(Ztring::ToZtring(((float64)Fraction)/0x100000000LL, 9));
- Complete_Stream->Streams[pid]->Infos["EBP_AcquisitionTime"]=Ztring().Date_From_Seconds_1970((int32u)(Seconds-2208988800))+__T('.')+Ztring::ToZtring(((float64)Fraction)/0x100000000LL, 9).substr(2); //.Date_From_Seconds_1900(Seconds)); //Temp for old ZenLib
- Complete_Stream->Streams[pid]->EBP_IsPresent=true;
- }
- else
- {
- Info_B4(Seconds, "Seconds"); Param_Info1(Ztring().Date_From_Seconds_1970((int32u)(Seconds-2208988800))); //Param_Info1(Ztring().Date_From_Seconds_1900(Seconds)); //Temp for old ZenLib
- Info_B4(Fraction, "Fraction"); Param_Info1(Ztring::ToZtring(((float64)Fraction)/0x100000000LL, 9));
- }
- Element_End0();
- }
- if (EBP_concealment_flag)
- {
- Skip_B8( "EBP_ext_partitions");
- }
- if (Element_Offset<End)
- Skip_XX(End-Element_Offset, "EBP_reserved_bytes");
- }
- break;
- default : Skip_XX(length-4, "data");
- }
- }
- else
- Skip_XX(length, "data");
- Element_End0();
- }
- }
- else
- Skip_XX(transport_private_data_length, "transport_private_data");
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEGTS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs.h
deleted file mode 100644
index f4080240c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG Transport Stream files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_MpegTsH
-#define MediaInfo_MpegTsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Duplicate.h"
-#include "MediaInfo/Multiple/File_Mpeg_Psi.h"
-#include "MediaInfo/Duplicate/File__Duplicate_MpegTs.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_MpegTs
-//***************************************************************************
-
-class File_MpegTs :
-#if MEDIAINFO_DUPLICATE
- public File__Duplicate
-#else //MEDIAINFO_DUPLICATE
- public File__Analyze
-#endif //MEDIAINFO_DUPLICATE
-{
-public :
- //In
- #ifdef MEDIAINFO_BDAV_YES
- size_t BDAV_Size;
- #endif
- #ifdef MEDIAINFO_TSP_YES
- size_t TSP_Size;
- #endif
- #ifdef MEDIAINFO_ARIBSTDB24B37_YES
- bool FromAribStdB24B37;
- #endif
-
- //Constructor/Destructor
- File_MpegTs();
- ~File_MpegTs();
-
-private :
- //Streams management
- void Streams_Accept();
- void Streams_Fill();
- void Streams_Update();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Synched_Init();
-
- //Options
- void Option_Manage ();
-
- //Buffer - Global
- void Read_Buffer_Continue();
- void Read_Buffer_AfterParsing ();
- #if MEDIAINFO_ADVANCED2
- void Read_Buffer_SegmentChange();
- #endif //MEDIAINFO_ADVANCED2
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - Per element
- void Header_Parse();
- void Header_Parse_AdaptationField();
- void Data_Parse();
-
- int16u pid;
- int8u transport_scrambling_control;
- bool payload_unit_start_indicator;
-
- //Global infos
- complete_stream* Complete_Stream;
-
- //Elements
- void PSI();
- void PES();
- void PES_Parse_Finish();
-
- //Helpers
- bool Header_Parser_QuickSearch();
-
- //Temp
- #if defined(MEDIAINFO_BDAV_YES) || defined(MEDIAINFO_TSP_YES)
- size_t TS_Size;
- #endif
- int64u MpegTs_JumpTo_Begin;
- int64u MpegTs_JumpTo_End;
- int64u Begin_MaxDuration; //in 27 MHz
- int64u Buffer_TotalBytes_LastSynched;
- bool ForceStreamDisplay;
- bool Searching_TimeStamp_Start;
-
- #if MEDIAINFO_EVENTS
- void Header_Parse_Events();
- void Header_Parse_Events_Duration(int64u program_clock_reference);
- #else //MEDIAINFO_EVENTS
- inline void Header_Parse_Events() {}
- inline void Header_Parse_Events_Duration(int64u) {}
- #endif //MEDIAINFO_EVENTS
-
- //Helpers
- void Streams_Update_Programs();
- void Streams_Update_Programs_PerStream(size_t StreamID);
- void Streams_Update_EPG();
- void Streams_Update_EPG_PerProgram(complete_stream::transport_stream::programs::iterator Program);
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- void Streams_Update_Duration_Update();
- #if MEDIAINFO_ADVANCED
- float64 Config_VbrDetection_Delta;
- int64u Config_VbrDetection_Occurences;
- bool Config_VbrDetection_GiveUp;
- #endif // MEDIAINFO_ADVANCED
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- void Streams_Update_Duration_End();
- void SetAllToPES();
- void transport_private_data(int8u transport_private_data_length);
-
- #if MEDIAINFO_DUPLICATE
- //File__Duplicate
- void File__Duplicate_Streams_Finish ();
- bool File__Duplicate_Set (const Ztring &Value); //Fill a new File__Duplicate value
- void File__Duplicate_Write ();
-
- //Output buffer
- size_t Output_Buffer_Get (const String &Value);
- size_t Output_Buffer_Get (size_t Pos);
- std::vector<int16u> Output_Buffer_Get_Pos;
- #endif //MEDIAINFO_DUPLICATE
-
- //Config
- bool Config_Trace_TimeSection_OnlyFirstOccurrence;
- bool TimeSection_FirstOccurrenceParsed;
-
- #if MEDIAINFO_SEEK
- std::map<int16u, int64u> Unsynch_Frame_Counts;
- int64u Seek_Value;
- int64u Seek_Value_Maximal;
- int64u Seek_ID;
- size_t InfiniteLoop_Detect;
- bool Duration_Detected;
- #endif //MEDIAINFO_SEEK
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs_Duplicate.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs_Duplicate.cpp
deleted file mode 100644
index 578189905..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_MpegTs_Duplicate.cpp
+++ /dev/null
@@ -1,348 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Duplication helper for some specific formats
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGTS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_MpegTs.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/ZtringList.h"
-#include "ZenLib/File.h"
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-#if MEDIAINFO_DUPLICATE
-void File_MpegTs::File__Duplicate_Streams_Finish ()
-{
- if (!File_Name.empty()) //Only if this is not a buffer, with buffer we can have more data
- Complete_Stream->Duplicates_Speed_FromPID.clear();
-}
-#endif //MEDIAINFO_DUPLICATE
-
-//***************************************************************************
-// Options
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_MpegTs::Option_Manage()
-{
- if (Complete_Stream && !Complete_Stream->Streams.empty())
- {
- #if MEDIAINFO_FILTER
- //File_Filter configuration
- if (Config->File_Filter_HasChanged())
- {
- bool Searching_Payload_Start=!Config->File_Filter_Get();
- for (int32u Pos=0x01; Pos<0x10; Pos++)
- Complete_Stream->Streams[Pos]->Searching_Payload_Start_Set(Searching_Payload_Start); //base PID depends of File_Filter configuration
- Complete_Stream->Streams[0x0000]->Searching_Payload_Start_Set(true); //program_map
- }
- #endif //MEDIAINFO_FILTER
-
- #if MEDIAINFO_DUPLICATE
- //File__Duplicate configuration
- if (File__Duplicate_HasChanged())
- {
- for (size_t Pos=0x0000; Pos<0x2000; Pos++)
- Complete_Stream->Streams[Pos]->ShouldDuplicate=false;
- Complete_Stream->Streams[0x0000]->ShouldDuplicate=true;
-
- //For each program
- for (complete_stream::transport_stream::programs::iterator Program=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.begin(); Program!=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.end(); ++Program)
- {
- //Do we want this program?
- bool Wanted=false;
- for (std::map<const String, File__Duplicate_MpegTs*>::iterator Duplicate=Complete_Stream->Duplicates.begin(); Duplicate!=Complete_Stream->Duplicates.end(); ++Duplicate)
- {
- if (Duplicate->second->Wanted_program_numbers.find(Program->first)!=Duplicate->second->Wanted_program_numbers.end())
- Wanted=true;
- if (Duplicate->second->Wanted_program_map_PIDs.find(Program->second.pid)!=Duplicate->second->Wanted_program_map_PIDs.end())
- Wanted=true;
- }
-
- //Enabling it if wanted
- if (Wanted)
- {
- Complete_Stream->Streams[Program->second.pid]->ShouldDuplicate=true;
- for (size_t Pos=0; Pos<Program->second.elementary_PIDs.size(); Pos++)
- Complete_Stream->Streams[Program->second.elementary_PIDs[Pos]]->ShouldDuplicate=true;
- }
- }
- }
- #endif //MEDIAINFO_DUPLICATE
- }
-}
-
-//***************************************************************************
-// Set
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DUPLICATE
-bool File_MpegTs::File__Duplicate_Set (const Ztring &Value)
-{
- //Form: "Code;Target" <--Generic
- //Form: "program_number" or <--clear it
- //Form: "program_number;file" or <--the exported filename is filename.program_number
- //Form: "program_number;file://filename" or <--the exported filename is specified by user
- //Form: "program_number;memory" or <--This will be a MediaInfo memory block
- //Form: "program_number;memory://pointer:size" <--Memory block is specified by user
- //WARNING: program_number & pointer must be in ***DECIMAL*** format.
- //Example: "451;memory://123456789:1316"
- ZtringList List(Value);
-
- //Backward compatibility
- bool Orders_ToRemove_Global=false;
-
- //Searching Target
- bool IsForUs=true; //True by default for backward compatibility
- std::vector<ZtringList::iterator> Targets_ToAdd;
- std::vector<ZtringList::iterator> Targets_ToRemove;
- std::vector<ZtringList::iterator> Orders_ToAdd;
- std::vector<ZtringList::iterator> Orders_ToRemove;
- for (ZtringList::iterator Current=List.begin(); Current<List.end(); ++Current)
- {
- //Detecting if we want to remove
- bool ToRemove=false;
- if (Current->find(__T('-'))==0)
- {
- ToRemove=true;
- Current->erase(Current->begin());
- }
-
- //Managing targets
- if (Current->find(__T("file:"))==0
- || Current->find(__T("memory:"))==0)
- (ToRemove?Targets_ToRemove:Targets_ToAdd).push_back(Current);
- //Parser name
- else if (Current->find(__T("parser="))==0)
- {
- if (*Current==__T("parser=MpegTs"))
- IsForUs=true;
- else
- IsForUs=false; //Backward compatibility with missing parser name
- }
- //Backward compatibility with "0"
- else if (*Current==__T("0"))
- Orders_ToRemove_Global=true;
- //Managing orders
- else
- (ToRemove?Orders_ToRemove:Orders_ToAdd).push_back(Current);
- }
-
- //For us?
- if (!IsForUs)
- return false;
-
- //Backward compatibility
- if (Orders_ToRemove_Global) //with "0"
- {
- for (std::vector<ZtringList::iterator>::iterator Order=Orders_ToAdd.begin(); Order<Orders_ToAdd.end(); ++Order)
- Orders_ToRemove.push_back(*Order);
- Orders_ToAdd.clear();
- }
-
- //For each target to add
- for (std::vector<ZtringList::iterator>::iterator Target=Targets_ToAdd.begin(); Target<Targets_ToAdd.end(); ++Target)
- {
- //Adding the target if it does not exist yet
- if (Complete_Stream->Duplicates.find(**Target)==Complete_Stream->Duplicates.end())
- {
- Complete_Stream->Duplicates[**Target]=new File__Duplicate_MpegTs(**Target);
- size_t Pos=Config->File__Duplicate_Memory_Indexes_Get(**Target);
- if (Pos!=Error)
- {
- if (Pos>=Complete_Stream->Duplicates_Speed.size())
- Complete_Stream->Duplicates_Speed.resize(Pos+1);
- Complete_Stream->Duplicates_Speed[Pos]=Complete_Stream->Duplicates[**Target];
- }
- }
-
- //For each order to add
- for (std::vector<ZtringList::iterator>::iterator Order=Orders_ToAdd.begin(); Order<Orders_ToAdd.end(); ++Order)
- Complete_Stream->Duplicates[**Target]->Configure(**Order, false);
-
- //For each order to remove
- for (std::vector<ZtringList::iterator>::iterator Order=Orders_ToRemove.begin(); Order<Orders_ToRemove.end(); ++Order)
- Complete_Stream->Duplicates[**Target]->Configure(**Order, true);
- }
-
- //For each target to remove
- for (std::vector<ZtringList::iterator>::iterator Target=Targets_ToRemove.begin(); Target<Targets_ToRemove.end(); ++Target)
- {
- std::map<const String, File__Duplicate_MpegTs*>::iterator Pointer=Complete_Stream->Duplicates.find(**Target);
- if (Pointer!=Complete_Stream->Duplicates.end())
- {
- //Duplicates_Speed
- for (std::vector<File__Duplicate_MpegTs*>::iterator Duplicate=Complete_Stream->Duplicates_Speed.begin(); Duplicate<Complete_Stream->Duplicates_Speed.end(); ++Duplicate)
- if (*Duplicate==Pointer->second)
- *Duplicate=NULL;
-
- //Duplicates_Speed_FromPID
- for (std::vector<std::vector<File__Duplicate_MpegTs*> >::iterator Duplicate_FromPID=Complete_Stream->Duplicates_Speed_FromPID.begin(); Duplicate_FromPID<Complete_Stream->Duplicates_Speed_FromPID.end(); ++Duplicate_FromPID)
- for (std::vector<File__Duplicate_MpegTs*>::iterator Duplicate=Duplicate_FromPID->begin(); Duplicate<Duplicate_FromPID->end(); ++Duplicate)
- if (*Duplicate==Pointer->second)
- *Duplicate=NULL;
-
- //Duplicate
- Complete_Stream->Duplicates.erase(**Target);
- }
- }
-
- //Informing the status has changed
- Complete_Stream->File__Duplicate_HasChanged_=true;
- if (Complete_Stream->Duplicates_Speed_FromPID.empty())
- Complete_Stream->Duplicates_Speed_FromPID.resize(0x2000);
-
- Complete_Stream->Duplicates_Speed_FromPID[0x00]=Complete_Stream->Duplicates_Speed;
-
- return true;
-}
-#endif //MEDIAINFO_DUPLICATE
-
-//***************************************************************************
-// Write
-//***************************************************************************
-
-#if MEDIAINFO_DUPLICATE
-void File_MpegTs::File__Duplicate_Write ()
-{
- const int8u* ToAdd=Buffer+Buffer_Offset-(size_t)Header_Size;
- size_t ToAdd_Size=(size_t)(Element_Size+Header_Size);
-
- std::vector<File__Duplicate_MpegTs*> &Dup_FromPID=Complete_Stream->Duplicates_Speed_FromPID[pid];
- size_t Duplicates_Speed_FromPID_Size=Complete_Stream->Duplicates_Speed_FromPID[pid].size();
- bool ToUpdate=false;
- for (size_t Pos=0; Pos<Duplicates_Speed_FromPID_Size; Pos++)
- if (Dup_FromPID[Pos] && Dup_FromPID[Pos]->Write(pid, ToAdd, ToAdd_Size))
- ToUpdate=true;
- if (ToUpdate)
- {
- Complete_Stream->Duplicates_Speed_FromPID.clear();
- Complete_Stream->Duplicates_Speed_FromPID.resize(0x2000);
- Complete_Stream->Duplicates_Speed_FromPID[0x0000]=Complete_Stream->Duplicates_Speed;
- size_t Duplicates_Speed_Size=Complete_Stream->Duplicates_Speed.size();
- for (size_t Pos=0; Pos<Duplicates_Speed_Size; Pos++)
- {
- File__Duplicate_MpegTs* Dup=Complete_Stream->Duplicates_Speed[Pos];
- size_t program_map_PIDs_Size=Complete_Stream->Duplicates_Speed[Pos]->program_map_PIDs.size();
- for (size_t program_map_PIDs_Pos=0; program_map_PIDs_Pos<program_map_PIDs_Size; program_map_PIDs_Pos++)
- if (Dup->program_map_PIDs[program_map_PIDs_Pos])
- {
- bool AlreadyPresent=false;
- for (size_t Duplicates_Speed_FromPID_Pos=0; Duplicates_Speed_FromPID_Pos<Complete_Stream->Duplicates_Speed_FromPID[program_map_PIDs_Pos].size(); Duplicates_Speed_FromPID_Pos++)
- if (Complete_Stream->Duplicates_Speed_FromPID[program_map_PIDs_Pos][Duplicates_Speed_FromPID_Pos]==Dup)
- AlreadyPresent=true;
- if (!AlreadyPresent)
- Complete_Stream->Duplicates_Speed_FromPID[program_map_PIDs_Pos].push_back(Dup);
- }
- size_t elementary_PIDs_Size=Complete_Stream->Duplicates_Speed[Pos]->program_map_PIDs.size();
- for (size_t elementary_PIDs_Pos=0; elementary_PIDs_Pos<elementary_PIDs_Size; elementary_PIDs_Pos++)
- if (Dup->elementary_PIDs[elementary_PIDs_Pos])
- {
- bool AlreadyPresent=false;
- for (size_t Duplicates_Speed_FromPID_Pos=0; Duplicates_Speed_FromPID_Pos<Complete_Stream->Duplicates_Speed_FromPID[elementary_PIDs_Pos].size(); Duplicates_Speed_FromPID_Pos++)
- if (Complete_Stream->Duplicates_Speed_FromPID[elementary_PIDs_Pos][Duplicates_Speed_FromPID_Pos]==Dup)
- AlreadyPresent=true;
- if (!AlreadyPresent)
- Complete_Stream->Duplicates_Speed_FromPID[elementary_PIDs_Pos].push_back(Dup);
- }
- }
- }
-}
-#endif //MEDIAINFO_DUPLICATE
-
-//***************************************************************************
-// Output_Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DUPLICATE
-size_t File_MpegTs::Output_Buffer_Get (const String &Code)
-{
- if (Complete_Stream==NULL)
- return 0;
- std::map<const String, File__Duplicate_MpegTs*>::iterator Stream=Complete_Stream->Duplicates.find(Code);
- if (Stream==Complete_Stream->Duplicates.end())
- return 0;
-
- return Stream->second->Output_Buffer_Get();
-
- //Was used for test (AVC output), but is a lot too slow, must find something else
- /*
- if (size_t Size=Stream->second->Output_Buffer_Get())
- return Size;
-
- //Parsing Parsers
- for (size_t Stream_Pos=0; Stream_Pos<Streams.size(); Stream_Pos++)
- if (Streams[Stream_Pos].Parser)
- if (size_t Size=Streams[Stream_Pos].Parser->Output_Buffer_Get(Code))
- return Size;
-
- return 0;
- */
-}
-#endif //MEDIAINFO_DUPLICATE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DUPLICATE
-size_t File_MpegTs::Output_Buffer_Get (size_t Pos)
-{
- if (Complete_Stream!=NULL && Pos<Complete_Stream->Duplicates_Speed.size() && Complete_Stream->Duplicates_Speed[Pos]!=NULL)
- if (size_t Size=Complete_Stream->Duplicates_Speed[Pos]->Output_Buffer_Get())
- return Size;
-
- //Parsing Parsers
- /*
- for (size_t Stream_Pos=0; Stream_Pos<Complete_Stream->Streams.size(); Stream_Pos++)
- if (Complete_Stream->Streams[Stream_Pos].Parser)
- if (size_t Size=Complete_Stream->Streams[Stream_Pos].Parser->Output_Buffer_Get(Pos))
- {
- //Optimization
- //if (Output_Buffer_Get_Pos.size()<=Pos)
- // Output_Buffer_Get_Pos.resize(Pos+1, (int16u)-1);
- //Output_Buffer_Get_Pos[Pos]=Stream_Pos;
-
- return Size;
- }
- */
-
- return 0;
-}
-#endif //MEDIAINFO_DUPLICATE
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEGTS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.cpp
deleted file mode 100644
index e3fcadf79..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.cpp
+++ /dev/null
@@ -1,3454 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGPS_YES) || defined(MEDIAINFO_MPEGTS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mpeg_Descriptors.h"
-#ifdef MEDIAINFO_MPEG4_YES
- #include "MediaInfo/Multiple/File_Mpeg4_Descriptors.h"
-#endif
-#include <cmath>
-using namespace std;
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-namespace Elements
-{
- const int32u AC_3=0x41432D33; //Exactly AC-3
- const int32u BSSD=0x42535344; //PCM
- const int32u CUEI=0x43554549; //SCTE
- const int32u DTS1=0x44545331; //DTS
- const int32u DTS2=0x44545332; //DTS
- const int32u DTS3=0x44545333; //DTS
- const int32u GA94=0x47413934; //ATSC - Terrestrial
- const int32u HDMV=0x48444D56; //BluRay
- const int32u HEVC=0x48455643; //HEVC
- const int32u KLVA=0x4B4C5641; //KLV Packets
- const int32u S14A=0x53313441; //ATSC - Satellite
- const int32u SCTE=0x53435445; //SCTE
- const int32u TSHV=0x54534856; //TSHV
- const int32u VC_1=0x56432D31; //Exactly VC-1
- const int32u drac=0x64726163; //Dirac
-
- const int32u MANZ=0x4D414E5A; //Manzanita Systems
-
- const int32u DVB =0x00000001; //Forced value, does not exist is stream
-}
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Extern
-extern const char* Avc_profile_idc(int8u profile_idc);
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Descriptors_audio_type(int8u ID)
-{
- switch (ID)
- {
- case 0x00 : return "Undefined";
- case 0x01 : return "Clean effects";
- case 0x02 : return "Hearing impaired";
- case 0x03 : return "Visual impaired commentary";
- default : return "Reserved";
- }
-}
-
-const char* Mpeg_Descriptors_alignment_type(int8u alignment_type)
-{
- switch (alignment_type)
- {
- case 0x01 : return "Slice or video access unit (Video), or sync word (Audio)";
- case 0x02 : return "Video access unit";
- case 0x03 : return "GOP, or SEQ";
- case 0x04 : return "SEQ";
- default : return "Reserved";
- }
-}
-
-const char* Mpeg_Descriptors_teletext_type(int8u teletext_type)
-{
- switch (teletext_type)
- {
- case 0x01 : return "Teletext";
- case 0x02 : return "Teletext Subtitle";
- case 0x03 : return "Teletext"; //additional information page
- case 0x04 : return "Teletext"; //programme schedule page
- case 0x05 : return "Teletext Subtitle"; //for hearing impaired people
- default : return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_1(int8u content_nibble_level_1)
-{
- switch (content_nibble_level_1)
- {
- case 0x00 : return "undefined";
- case 0x01 : return "movie/drama";
- case 0x02 : return "news/current affairs";
- case 0x03 : return "show/game show";
- case 0x04 : return "sports";
- case 0x05 : return "children's/youth programmes";
- case 0x06 : return "music/ballet/dance";
- case 0x07 : return "arts/culture (without music)";
- case 0x08 : return "social/political issues/economics";
- case 0x09 : return "education/science/factual topics";
- case 0x0A : return "leisure hobbies";
- case 0x0B : return "Special characteristics:";
- default :
- if (content_nibble_level_1==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_01(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "movie/drama";
- case 0x01 : return "detective/thriller";
- case 0x02 : return "adventure/western/war";
- case 0x03 : return "science fiction/fantasy/horror";
- case 0x04 : return "comedy";
- case 0x05 : return "soap/melodrama/folkloric";
- case 0x06 : return "romance";
- case 0x07 : return "serious/classical/religious/historical movie/drama";
- case 0x08 : return "adult movie/drama";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_02(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "news/current affairs";
- case 0x01 : return "news/weather report";
- case 0x02 : return "news magazine";
- case 0x03 : return "documentary";
- case 0x04 : return "discussion/interview/debate";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_03(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "show/game show";
- case 0x01 : return "game show/quiz/contest";
- case 0x02 : return "variety show";
- case 0x03 : return "talk show";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_04(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "sports";
- case 0x01 : return "special events";
- case 0x02 : return "sports magazines";
- case 0x03 : return "football/soccer";
- case 0x04 : return "tennis/squash";
- case 0x05 : return "team sports (excluding football)";
- case 0x06 : return "athletics";
- case 0x07 : return "motor sport";
- case 0x08 : return "water sport";
- case 0x09 : return "winter sports";
- case 0x0A : return "equestrian";
- case 0x0B : return "martial sports";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_05(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "children's/youth programmes";
- case 0x01 : return "pre-school children's programmes";
- case 0x02 : return "entertainment programmes for 6 to 14";
- case 0x03 : return "entertainment programmes for 10 to 16";
- case 0x04 : return "informational/educational/school programmes";
- case 0x05 : return "cartoons/puppets";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_06(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "music/ballet/dance";
- case 0x01 : return "rock/pop";
- case 0x02 : return "serious music/classical music";
- case 0x03 : return "folk/traditional music";
- case 0x04 : return "jazz";
- case 0x05 : return "musical/opera";
- case 0x06 : return "ballet";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_07(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "arts/culture (without music)";
- case 0x01 : return "performing arts";
- case 0x02 : return "fine arts";
- case 0x03 : return "religion";
- case 0x04 : return "popular culture/traditional arts";
- case 0x05 : return "literature";
- case 0x06 : return "film/cinema";
- case 0x07 : return "experimental film/video";
- case 0x08 : return "broadcasting/press";
- case 0x09 : return "new media";
- case 0x0A : return "arts/culture magazines";
- case 0x0B : return "fashion";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_08(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "social/political issues/economics";
- case 0x01 : return "magazines/reports/documentary";
- case 0x02 : return "economics/social advisory";
- case 0x03 : return "remarkable people";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_09(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "education/science/factual topics";
- case 0x01 : return "nature/animals/environment";
- case 0x02 : return "technology/natural sciences";
- case 0x03 : return "medicine/physiology/psychology";
- case 0x04 : return "foreign countries/expeditions";
- case 0x05 : return "social/spiritual sciences";
- case 0x06 : return "further education";
- case 0x07 : return "languages";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_0A(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "leisure hobbies";
- case 0x01 : return "tourism/travel";
- case 0x02 : return "handicraft";
- case 0x03 : return "motoring";
- case 0x04 : return "fitness and health";
- case 0x05 : return "cooking";
- case 0x06 : return "advertisement/shopping";
- case 0x07 : return "gardening";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2_0B(int8u content_nibble_level_2)
-{
- switch (content_nibble_level_2)
- {
- case 0x00 : return "original language";
- case 0x01 : return "black and white";
- case 0x02 : return "unpublished";
- case 0x03 : return "live broadcast";
- default :
- if (content_nibble_level_2==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_content_nibble_level_2(int8u content_nibble_level_1, int8u content_nibble_level_2)
-{
- switch (content_nibble_level_1)
- {
- case 0x00 : return "undefined";
- case 0x01 : return Mpeg_Descriptors_content_nibble_level_2_01(content_nibble_level_2);
- case 0x02 : return Mpeg_Descriptors_content_nibble_level_2_02(content_nibble_level_2);
- case 0x03 : return Mpeg_Descriptors_content_nibble_level_2_03(content_nibble_level_2);
- case 0x04 : return Mpeg_Descriptors_content_nibble_level_2_04(content_nibble_level_2);
- case 0x05 : return Mpeg_Descriptors_content_nibble_level_2_05(content_nibble_level_2);
- case 0x06 : return Mpeg_Descriptors_content_nibble_level_2_06(content_nibble_level_2);
- case 0x07 : return Mpeg_Descriptors_content_nibble_level_2_07(content_nibble_level_2);
- case 0x08 : return Mpeg_Descriptors_content_nibble_level_2_08(content_nibble_level_2);
- case 0x09 : return Mpeg_Descriptors_content_nibble_level_2_09(content_nibble_level_2);
- case 0x0A : return Mpeg_Descriptors_content_nibble_level_2_0A(content_nibble_level_2);
- case 0x0B : return Mpeg_Descriptors_content_nibble_level_2_0B(content_nibble_level_2);
- default :
- if (content_nibble_level_1==0x0F)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_linkage_type(int8u linkage_type)
-{
- switch (linkage_type)
- {
- case 0x00 : return "reserved for future use";
- case 0x01 : return "information service";
- case 0x02 : return "Electronic Programme Guide (EPG) service";
- case 0x03 : return "CA replacement service";
- case 0x04 : return "transport stream containing complete Network/Bouquet SI";
- case 0x05 : return "service replacement service";
- case 0x06 : return "data broadcast service";
- case 0xFF : return "reserved for future use";
- default :
- if (linkage_type>=0x80)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_dvb_service_type(int8u service_type)
-{
- switch (service_type)
- {
- case 0x01 : return "digital television";
- case 0x02 : return "digital radio";
- case 0x03 : return "teletext";
- case 0x04 : return "NVOD reference";
- case 0x05 : return "NVOD time-shifted";
- case 0x06 : return "Mosaic";
- case 0x0A : return "advanced codec digital radio sound";
- case 0x0B : return "advanced codec mosaic service";
- case 0x0C : return "data broadcast";
- case 0x0D : return "reserved for Common Interface Usage";
- case 0x0E : return "RCS Map";
- case 0x0F : return "RCS FLS";
- case 0x10 : return "DVB MHP";
- case 0x11 : return "MPEG-2 HD digital television";
- case 0x16 : return "advanced codec SD digital television";
- case 0x17 : return "advanced codec SD NVOD time-shifted";
- case 0x18 : return "advanced codec SD NVOD reference";
- case 0x19 : return "advanced codec HD digital television";
- case 0x1A : return "advanced codec HD NVOD time-shifted";
- case 0x1B : return "advanced codec HD NVOD reference";
- case 0xFF : return "reserved for future use";
- default :
- if (service_type>=0x80)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_stream_content(int8u stream_content)
-{
- switch (stream_content)
- {
- case 0x01 : return "MPEG-2 Video";
- case 0x02 : return "MPEG-1 Audio L2";
- case 0x03 : return "Subtitle";
- case 0x04 : return "AC3";
- case 0x05 : return "AVC";
- case 0x06 : return "HE-AAC";
- case 0x07 : return "DTS";
- default :
- if (stream_content>=0x0C)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_component_type_O1(int8u component_type)
-{
- switch (component_type)
- {
- case 0x01 : return "4:3 aspect ratio, 25 Hz";
- case 0x02 : return "16:9 aspect ratio with pan vectors, 25 Hz";
- case 0x03 : return "16:9 aspect ratio without pan vectors, 25 Hz";
- case 0x04 : return ">16:9 aspect ratio, 25 Hz";
- case 0x05 : return "4:3 aspect ratio, 30 Hz";
- case 0x06 : return "16:9 aspect ratio with pan vectors, 30 Hz";
- case 0x07 : return "16:9 aspect ratio without pan vectors, 30 Hz";
- case 0x08 : return ">16:9 aspect ratio, 30 Hz";
- case 0x09 : return "4:3 aspect ratio, 25 Hz (high definition)";
- case 0x0A : return "16:9 aspect ratio with pan vectors, 25 Hz (high definition)";
- case 0x0B : return "16:9 aspect ratio without pan vectors, 25 Hz (high definition)";
- case 0x0C : return ">16:9 aspect ratio, 25 Hz (high definition)";
- case 0x0D : return "4:3 aspect ratio, 30 Hz (high definition)";
- case 0x0E : return "16:9 aspect ratio with pan vectors, 30 Hz (high definition)";
- case 0x0F : return "16:9 aspect ratio without pan vectors, 30 Hz (high definition)";
- case 0x10 : return ">16:9 aspect ratio, 30 Hz (high definition)";
- default :
- if (component_type>=0xB0 && component_type<=0xFE)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_component_type_O2(int8u component_type)
-{
- switch (component_type)
- {
- case 0x01 : return "single mono channel";
- case 0x02 : return "dual mono channel";
- case 0x03 : return "stereo (2 channel)";
- case 0x04 : return "multi-lingual, multi-channel";
- case 0x05 : return "surround sound";
- case 0x40 : return "description for the visually impaired";
- case 0x41 : return "for the hard of hearing";
- case 0x42 : return "receiver-mixed supplementary audio";
- default :
- if (component_type>=0xB0 && component_type<=0xFE)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_component_type_O3(int8u component_type)
-{
- switch (component_type)
- {
- case 0x01 : return "EBU Teletext subtitles";
- case 0x02 : return "associated EBU Teletext";
- case 0x03 : return "VBI data";
- case 0x10 : return "DVB subtitle (normal) with no monitor aspect ratio criticality";
- case 0x11 : return "DVB subtitle (normal) for display on 4:3 aspect ratio monitor";
- case 0x12 : return "DVB subtitle (normal) for display on 16:9 aspect ratio monitor";
- case 0x13 : return "DVB subtitle (normal) for display on 2.21:1 aspect ratio monitor";
- case 0x20 : return "DVB subtitle (for the hard of hearing) with no monitor aspect ratio criticality";
- case 0x21 : return "DVB subtitle (for the hard of hearing) for display on 4:3 aspect ratio monitor";
- case 0x22 : return "DVB subtitle (for the hard of hearing) for display on 16:9 aspect ratio monitor";
- case 0x23 : return "DVB subtitle (for the hard of hearing) for display on 2.21:1 aspect ratio monitor";
- default :
- if (component_type>=0xB0 && component_type<=0xFE)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_component_type_O4(int8u)
-{
- return "Defined by AC3";
-}
-
-const char* Mpeg_Descriptors_component_type_O5(int8u component_type)
-{
- switch (component_type)
- {
- case 0x01 : return "4:3 aspect ratio, 25 Hz";
- case 0x03 : return "16:9 aspect ratio, 25 Hz";
- case 0x04 : return ">16:9 aspect ratio, 25 Hz";
- case 0x05 : return "4:3 aspect ratio, 30 Hz";
- case 0x07 : return "16:9 aspect ratio, 30 Hz";
- case 0x08 : return ">16:9 aspect ratio, 30 Hz";
- case 0x0B : return "16:9 aspect ratio, 25 Hz (high definition)";
- case 0x0C : return ">16:9 aspect ratio, 25 Hz (high definition)";
- case 0x0F : return "16:9 aspect ratio, 30 Hz (high definition)";
- case 0x10 : return ">16:9 aspect ratio, 30 Hz (high definition)";
- default :
- if (component_type>=0xB0 && component_type<=0xFE)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_component_type_O6(int8u component_type)
-{
- switch (component_type)
- {
- case 0x01 : return "single mono channel";
- case 0x03 : return "stereo";
- case 0x05 : return "surround sound";
- case 0x40 : return "description for the visually impaired";
- case 0x41 : return "for the hard of hearing";
- case 0x42 : return "receiver-mixed supplementary audio";
- case 0x43 : return "astereo (v2)";
- case 0x44 : return "description for the visually impaired (v2)";
- case 0x45 : return "for the hard of hearing (v2)";
- case 0x46 : return "receiver-mixed supplementary audio (v2)";
- default :
- if (component_type>=0xB0 && component_type<=0xFE)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_component_type_O7(int8u)
-{
- return "Defined by DTS";
-}
-
-const char* Mpeg_Descriptors_codepage_1(int8u codepage)
-{
- switch (codepage)
- {
- case 0x01 : return "ISO/IEC 8859-5 (Cyrillic)";
- case 0x02 : return "ISO/IEC 8859-6 (Arabic)";
- case 0x03 : return "ISO/IEC 8859-7 (Greek)";
- case 0x04 : return "ISO/IEC 8859-8 (Hebrew)";
- case 0x05 : return "ISO/IEC 8859-9 (Latin)";
- case 0x06 : return "ISO/IEC 8859-10 (Latin)";
- case 0x07 : return "ISO/IEC 8859-11 (Thai)";
- case 0x08 : return "ISO/IEC 8859-12 (Indian)";
- case 0x09 : return "ISO/IEC 8859-13 (Latin)";
- case 0x0A : return "ISO/IEC 8859-14 (Celtic)";
- case 0x0B : return "ISO/IEC 8859-15 (Latin)";
- case 0x11 : return "ISO/IEC 10646-1 (Basic Multilingual Plane)";
- case 0x12 : return "KSC5601-1987 (Korean)";
- case 0x13 : return "GB-2312-1980 (Simplified Chinese)";
- case 0x14 : return "Big5 (Traditional Chinese)";
- case 0x15 : return "UTF-8 (Basic Multilingual Plane)";
- default : return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_component_type(int8u stream_content, int8u component_type)
-{
- switch (stream_content)
- {
- case 0x01 : return Mpeg_Descriptors_component_type_O1(component_type);
- case 0x02 : return Mpeg_Descriptors_component_type_O2(component_type);
- case 0x03 : return Mpeg_Descriptors_component_type_O3(component_type);
- case 0x04 : return Mpeg_Descriptors_component_type_O4(component_type);
- case 0x05 : return Mpeg_Descriptors_component_type_O5(component_type);
- case 0x06 : return Mpeg_Descriptors_component_type_O6(component_type);
- case 0x07 : return Mpeg_Descriptors_component_type_O7(component_type);
- default :
- if (component_type>=0xB0 && component_type<=0xFE)
- return "user defined";
- else
- return "reserved for future use";
- }
-}
-
-const char* Mpeg_Descriptors_registration_format_identifier_Format(int32u format_identifier)
-{
- switch (format_identifier)
- {
- case Elements::AC_3 : return "AC-3";
- case Elements::BSSD : return "PCM"; //AES3
- case Elements::CUEI : return "SCTE 35 2003 - Digital Program Insertion Cueing Message for Cable";
- case Elements::DTS1 : return "DTS"; //512
- case Elements::DTS2 : return "DTS"; //1024
- case Elements::DTS3 : return "DTS"; //2048
- case Elements::GA94 : return "ATSC - Terrestrial";
- case Elements::HDMV : return "Blu-ray";
- case Elements::HEVC : return "HEVC";
- case Elements::KLVA : return "KLV";
- case Elements::S14A : return "ATSC - Satellite";
- case Elements::SCTE : return "SCTE 54 2003 - DV Service Multiplex and Transport System for Cable Television";
- case Elements::TSHV : return "DV";
- case Elements::VC_1 : return "VC-1";
- case Elements::MANZ : return "Manzanita Systems"; //Manzanita Systems
- default : return "";
- }
-}
-
-stream_t Mpeg_Descriptors_registration_format_identifier_StreamKind(int32u format_identifier)
-{
- switch (format_identifier)
- {
- case Elements::AC_3 : return Stream_Audio;
- case Elements::BSSD : return Stream_Audio;
- case Elements::DTS1 : return Stream_Audio;
- case Elements::DTS2 : return Stream_Audio;
- case Elements::DTS3 : return Stream_Audio;
- case Elements::HEVC : return Stream_Video;
- case Elements::VC_1 : return Stream_Video;
- default : return Stream_Max;
- }
-}
-
-const char* Mpeg_Descriptors_stream_Format(int8u descriptor_tag, int32u format_identifier)
-{
- switch (descriptor_tag)
- {
- case 0x02 : return "MPEG Video";
- case 0x03 : return "MPEG Audio";
- case 0x1B : return "MPEG-4 Visual";
- case 0x1C : return "AAC";
- case 0x28 : return "AVC";
- case 0x2B : return "AAC";
- case 0x2D : return "Text";
- default :
- switch (format_identifier)
- {
- case Elements::CUEI :
- case Elements::SCTE : //SCTE
- case Elements::GA94 :
- case Elements::S14A : //ATSC
- switch (descriptor_tag)
- {
- case 0x81 : return "AC-3";
- default : return "";
- }
- case Elements::AC_3 : return "AC-3";
- case Elements::DTS1 : return "DTS";
- case Elements::DTS2 : return "DTS";
- case Elements::DTS3 : return "DTS";
- case Elements::KLVA : return "KLV";
- case Elements::HEVC : return "HEVC";
- case Elements::VC_1 : return "VC-1";
- case Elements::drac : return "Dirac";
- default :
- switch (descriptor_tag)
- {
- case 0x56 : return "Teletext";
- case 0x59 : return "DVB Subtitle";
- case 0x6A : return "AC-3";
- case 0x7A : return "E-AC-3";
- case 0x7B : return "DTS";
- case 0x7C : return "AAC";
- case 0x81 : return "AC-3";
- default : return "";
- }
- }
- }
-}
-
-const char* Mpeg_Descriptors_stream_Codec(int8u descriptor_tag, int32u format_identifier)
-{
- switch (descriptor_tag)
- {
- case 0x02 : return "MPEG-V";
- case 0x03 : return "MPEG-A";
- case 0x1B : return "MPEG-4V";
- case 0x1C : return "AAC";
- case 0x28 : return "AVC";
- case 0x2B : return "AAC";
- case 0x2D : return "Text";
- default :
- switch (format_identifier)
- {
- case Elements::CUEI :
- case Elements::SCTE : //SCTE
- case Elements::GA94 :
- case Elements::S14A : //ATSC
- switch (descriptor_tag)
- {
- case 0x81 : return "AC3";
- default : return "";
- }
- case Elements::AC_3 : return "AC3";
- case Elements::DTS1 : return "DTS";
- case Elements::DTS2 : return "DTS";
- case Elements::DTS3 : return "DTS";
- case Elements::KLVA : return "KLV";
- case Elements::HEVC : return "HEVC";
- case Elements::VC_1 : return "VC-1";
- case Elements::drac : return "Dirac";
- default :
- switch (descriptor_tag)
- {
- case 0x56 : return "Teletext";
- case 0x59 : return "DVB Subtitle";
- case 0x6A : return "AC3";
- case 0x7A : return "AC3+";
- case 0x7B : return "DTS";
- case 0x7C : return "AAC";
- case 0x81 : return "AC3";
- default : return "";
- }
- }
- }
-}
-
-stream_t Mpeg_Descriptors_stream_Kind(int8u descriptor_tag, int32u format_identifier)
-{
- switch (descriptor_tag)
- {
- case 0x02 : return Stream_Video;
- case 0x03 : return Stream_Audio;
- case 0x1B : return Stream_Video;
- case 0x1C : return Stream_Audio;
- case 0x28 : return Stream_Video;
- case 0x2B : return Stream_Audio;
- case 0x2D : return Stream_Text;
- default :
- switch (format_identifier)
- {
- case Elements::CUEI :
- case Elements::SCTE : //SCTE
- case Elements::GA94 :
- case Elements::S14A : //ATSC
- switch (descriptor_tag)
- {
- case 0x81 : return Stream_Audio;
- default : return Stream_Max;
- }
- case Elements::AC_3 : return Stream_Audio;
- case Elements::DTS1 : return Stream_Audio;
- case Elements::DTS2 : return Stream_Audio;
- case Elements::DTS3 : return Stream_Audio;
- case Elements::HEVC : return Stream_Video;
- case Elements::VC_1 : return Stream_Video;
- case Elements::drac : return Stream_Video;
- default :
- switch (descriptor_tag)
- {
- case 0x56 : return Stream_Text;
- case 0x59 : return Stream_Text;
- case 0x6A : return Stream_Audio;
- case 0x7A : return Stream_Audio;
- case 0x7B : return Stream_Audio;
- case 0x7C : return Stream_Audio;
- case 0x81 : return Stream_Audio;
- default : return Stream_Max;
- }
- }
- }
-}
-
-const char* Mpeg_Descriptors_MPEG_4_audio_profile_and_level(int8u MPEG_4_audio_profile_and_level)
-{
- switch (MPEG_4_audio_profile_and_level)
- {
- case 0x10 : return "Main@L1";
- case 0x11 : return "Main@L2";
- case 0x12 : return "Main@L3";
- case 0x13 : return "Main@L4";
- case 0x18 : return "Scalable@L1";
- case 0x19 : return "Scalable@L2";
- case 0x1A : return "Scalable@L3";
- case 0x1B : return "Scalable@L4";
- case 0x20 : return "Speech@L1";
- case 0x21 : return "Speech@L2";
- case 0x28 : return "Synthesis@L1";
- case 0x29 : return "Synthesis@L2";
- case 0x2A : return "Synthesis@L3";
- case 0x30 : return "High quality audio@L1";
- case 0x31 : return "High quality audio@L2";
- case 0x32 : return "High quality audio@L3";
- case 0x33 : return "High quality audio@L4";
- case 0x34 : return "High quality audio@L5";
- case 0x35 : return "High quality audio@L6";
- case 0x36 : return "High quality audio@L7";
- case 0x37 : return "High quality audio@L8";
- case 0x38 : return "Low delay audio@L1";
- case 0x39 : return "Low delay audio@L2";
- case 0x3A : return "Low delay audio@L3";
- case 0x3B : return "Low delay audio@L4";
- case 0x3C : return "Low delay audio@L5";
- case 0x3D : return "Low delay audio@L6";
- case 0x3E : return "Low delay audio@L7";
- case 0x3F : return "Low delay audio@L8";
- case 0x40 : return "Natural audio@L1";
- case 0x41 : return "Natural audio@L2";
- case 0x42 : return "Natural audio@L3";
- case 0x43 : return "Natural audio@L4";
- case 0x48 : return "Mobile audio internetworking@L1";
- case 0x49 : return "Mobile audio internetworking@L2";
- case 0x4A : return "Mobile audio internetworking@L3";
- case 0x4B : return "Mobile audio internetworking@L4";
- case 0x4C : return "Mobile audio internetworking@L5";
- case 0x4D : return "Mobile audio internetworking@L6";
- case 0x50 : return "LC@L1";
- case 0x51 : return "LC@L2";
- case 0x52 : return "LC@L3";
- case 0x53 : return "LC@L4";
- case 0x58 : return "HE-AAC@L2 / LC@L2";
- case 0x59 : return "HE-AAC@L3 / LC@L3";
- case 0x5A : return "HE-AAC@L4 / LC@L4";
- case 0x5B : return "HE-AAC@L5 / LC@L5";
- case 0x60 : return "HE-AACv2@L2 / HE-AAC@L2 / LC@L2";
- case 0x61 : return "HE-AACv2@L3 / HE-AAC@L3 / LC@L3";
- case 0x62 : return "HE-AACv2@L4 / HE-AAC@L4 / LC@L4";
- case 0x63 : return "HE-AACv2@L5 / HE-AAC@L5 / LC@L5";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-extern const float32 Mpegv_frame_rate[]; //In Video/File_Mpegv.cpp
-extern const char* Mpegv_Colorimetry_format[]; //In Video/File_Mpegv.cpp
-extern const char* Mpegv_profile_and_level_indication_profile[]; //In Video/File_Mpegv.cpp
-extern const char* Mpegv_profile_and_level_indication_level[]; //In Video/File_Mpegv.cpp
-
-//---------------------------------------------------------------------------
-extern const char* Mpega_Version[]; //In Audio/File_Mpega.cpp
-extern const char* Mpega_Layer[]; //In Audio/File_Mpega.cpp
-extern const char* Mpega_Format_Profile_Version[]; //In Audio/File_Mpega.cpp
-extern const char* Mpega_Format_Profile_Layer[]; //In Audio/File_Mpega.cpp
-
-//---------------------------------------------------------------------------
-extern const int32u AC3_SamplingRate[]; //In Audio/File_Ac3.cpp
-extern const int16u AC3_BitRate[]; //In Audio/File_Ac3.cpp
-extern const char* AC3_ChannelPositions[]; //In Audio/File_Ac3.cpp
-extern const int8u AC3_Channels[]; //In Audio/File_Ac3.cpp
-extern const char* AC3_Mode[]; //In Audio/File_Ac3.cpp
-extern const char* AC3_Surround[]; //In Audio/File_Ac3.cpp
-
-const char* Mpeg_Descriptors_AC3_Channels[]=
-{
- "1",
- "2",
- "2",
- "2",
- "3+",
- "6+",
- "",
- "",
-};
-
-const char* Mpeg_Descriptors_AC3_Priority[]=
-{
- "",
- "Primary Audio",
- "Other Audio",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Descriptors_bandwidth[]=
-{
- "8 MHz",
- "7 MHz",
- "6 MHz",
- "5 MHz",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Descriptors_constellation[]=
-{
- "QPSK",
- "16-QAM",
- "64-QAM",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Descriptors_hierarchy_information[]=
-{
- "non-hierarchical, native interleaver",
- "1, native interleaver",
- "2, native interleaver",
- "4, native interleaver",
- "non-hierarchical, in-depth interleaver",
- "1, in-depth interleaver",
- "2, in-depth interleaver",
- "4, in-depth interleaver",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Descriptors_code_rate[]=
-{
- "1/2",
- "2/3",
- "3/4",
- "5/6",
- "7/8",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Descriptors_guard_interval[]=
-{
- "1/32",
- "1/16",
- "1/8",
- "1/4",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Descriptors_transmission_mode[]=
-{
- "2k mode",
- "8k mode",
- "4k mode",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Descriptors_original_network_id(int16u original_network_id)
-{
- switch (original_network_id)
- {
- case 0x0001 : return "Astra Satellite Network 19,2'E";
- case 0x0002 : return "Astra Satellite Network 28,2'E";
- case 0x0003 : return "Astra 1";
- case 0x0004 : return "Astra 2";
- case 0x0005 : return "Astra 3";
- case 0x0006 : return "Astra 4";
- case 0x0007 : return "Astra 5";
- case 0x0008 : return "Astra 6";
- case 0x0009 : return "Astra 7";
- case 0x000A : return "Astra 8";
- case 0x000B : return "Astra 9";
- case 0x000C : return "Astra 10";
- case 0x000D : return "Astra 11";
- case 0x000E : return "Astra 12";
- case 0x000F : return "Astra 13";
- case 0x0010 : return "Astra 14";
- case 0x0011 : return "Astra 15";
- case 0x0012 : return "Astra 16";
- case 0x0013 : return "Astra 17";
- case 0x0014 : return "Astra 18";
- case 0x0015 : return "Astra 19";
- case 0x0016 : return "Astra 20";
- case 0x0017 : return "Astra 21";
- case 0x0018 : return "Astra 22";
- case 0x0019 : return "Astra 23";
- case 0x0020 : return "ASTRA";
- case 0x0021 : return "Hispasat Network 1";
- case 0x0022 : return "Hispasat Network 2";
- case 0x0023 : return "Hispasat Network 3";
- case 0x0024 : return "Hispasat Network 4";
- case 0x0025 : return "Hispasat Network 5";
- case 0x0026 : return "Hispasat Network 6";
- case 0x0027 : return "Hispasat 30'W (FSS)";
- case 0x0028 : return "Hispasat 30'W (DBS)";
- case 0x0029 : return "Hispasat 30'W (America)";
- case 0x0030 : return "Canal+ Satellite Network";
- case 0x0031 : return "Hispasat VIA DIGITAL";
- case 0x0032 : return "Hispasat Network 7";
- case 0x0033 : return "Hispasat Network 8";
- case 0x0034 : return "Hispasat Network 9";
- case 0x0035 : return "Nethold Main Mux System";
- case 0x0037 : return "STENTOR";
- case 0x0040 : return "HPT Croatian Post and Telecommunications";
- case 0x0041 : return "Mindport";
- case 0x0046 : return "1 degree W (Telenor)";
- case 0x0047 : return "1 degree W (Telenor)";
- case 0x0050 : return "HRT Croatian Radio and Television";
- case 0x0051 : return "Havas";
- case 0x0052 : return "Osaka Yusen Satellite";
- case 0x0055 : return "Sirius Satellite System";
- case 0x0058 : return "Thiacom 1 & 2 co-located 78.5'E (UBC Thailand)";
- case 0x005E : return "Sirius Satellite System (Nordic Coverage)";
- case 0x005F : return "Sirius Satellite System (FSS)";
- case 0x0060 : return "Deutsche Telekom";
- case 0x0069 : return "Optus B3 156'E";
- case 0x0070 : return "BONUM1 36 Degrees East (NTV+)";
- case 0x007E : return "Eutelsat Satellite System at 7'E";
- case 0x0073 : return "PanAmSat 4 68.5'E";
- case 0x0085 : return "BetaTechnik";
- case 0x0090 : return "TDF";
- case 0x00A0 : return "News Datacom";
- case 0x00A1 : return "News Datacom";
- case 0x00A2 : return "News Datacom";
- case 0x00A3 : return "News Datacom";
- case 0x00A4 : return "News Datacom";
- case 0x00A5 : return "News Datacom";
- case 0x00A6 : return "ART";
- case 0x00A7 : return "Globecast";
- case 0x00A8 : return "Foxtel";
- case 0x00A9 : return "Sky New Zealand";
- case 0x00B0 : return "TPS";
- case 0x00B1 : return "TPS";
- case 0x00B2 : return "TPS";
- case 0x00B3 : return "TPS";
- case 0x00B4 : return "Telesat 107.3'W";
- case 0x00B5 : return "Telesat 111.1'W";
- case 0x00BA : return "Satellite Express 6 (80'E)";
- case 0x00C0 : return "Canal+";
- case 0x00C1 : return "Canal+";
- case 0x00C2 : return "Canal+";
- case 0x00C3 : return "Canal+";
- case 0x00C4 : return "Canal+";
- case 0x00C5 : return "Canal+";
- case 0x00C6 : return "Canal+";
- case 0x00C7 : return "Canal+";
- case 0x00C8 : return "Canal+";
- case 0x00C9 : return "Canal+";
- case 0x00CA : return "Canal+";
- case 0x00CB : return "Canal+";
- case 0x00CC : return "Canal+";
- case 0x00CD : return "Canal+";
- case 0x0100 : return "ExpressVu Express";
- case 0x010E : return "Eutelsat Satellite System at 10'E";
- case 0x0110 : return "Mediaset";
- case 0x013E : return "Eutelsat Satellite System at 13'E";
- case 0x016E : return "Eutelsat Satellite System at 16'E";
- case 0x029E : return "Eutelsat Satellite System at 29'E";
- case 0x02BE : return "Arabsat Arabsat (Scientific Atlanta, Eutelsat)";
- case 0x036E : return "Eutelsat Satellite System at 36'E";
- case 0x03E8 : return "Telia";
- case 0x048E : return "Eutelsat Satellite System at 48'E";
- case 0x0800 : return "Nilesat 101";
- case 0x0801 : return "Nilesat 101";
- case 0x0880 : return "MEASAT 1, 91.5'E";
- case 0x0882 : return "MEASAT 2, 91.5'E";
- case 0x0883 : return "MEASAT 2, 148.0'E";
- case 0x088F : return "MEASAT 3";
- case 0x1000 : return "Optus B3 156'E Optus Communications";
- case 0x1001 : return "DISH Network Echostar Communications";
- case 0x1002 : return "Dish Network 61.5 W Echostar Communications";
- case 0x1003 : return "Dish Network 83 W Echostar Communications";
- case 0x1004 : return "Dish Network 119 W Echostar Communications";
- case 0x1005 : return "Dish Network 121 W Echostar Communications";
- case 0x1006 : return "Dish Network 148 W Echostar Communications";
- case 0x1007 : return "Dish Network 175 W Echostar Communications";
- case 0x1008 : return "Dish Network W Echostar Communications";
- case 0x1009 : return "Dish Network X Echostar Communications";
- case 0x100A : return "Dish Network Y Echostar Communications";
- case 0x100B : return "Dish Network Z Echostar Communications";
- case 0x2000 : return "Thiacom 1 & 2 co-located 78.5'E";
- case 0x22D4 : return "Spanish Digital Terrestrial Television";
- case 0x22F1 : return "Swedish Digital Terrestrial Television";
- case 0x233A : return "UK Digital Terrestrial Television";
- case 0x2024 : return "Australian Digital Terrestrial Television";
- case 0x2114 : return "German Digital Terrestrial Television";
- case 0x3000 : return "PanAmSat 4 68.5'E";
- case 0x5000 : return "Irdeto Mux System";
- case 0xF000 : return "Small Cable networks";
- case 0xF001 : return "Deutsche Telekom";
- case 0xF010 : return "Telefonica Cable";
- case 0xF020 : return "Cable and Wireless Communication";
- case 0xFBFC : return "MATAV";
- case 0xFBFD : return "Telia Kabel-TV";
- case 0xFBFE : return "TPS";
- case 0xFBFF : return "Stream";
- case 0xFC00 : return "France Telecom Cable";
- case 0xFC10 : return "Rhone Vision Cable";
- case 0xFD00 : return "Lyonnaise Communications";
- case 0xFE00 : return "TeleDenmark Cable TV";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Descriptors_CA_system_ID(int16u CA_system_ID)
-{
- switch (CA_system_ID)
- {
- case 0x0100 : return "Seca Mediaguard 1/2";
- case 0x0101 : return "RusCrypto";
- case 0x0464 : return "EuroDec";
- case 0x0500 : return "TPS-Crypt or Viaccess";
- case 0x0602 :
- case 0x0604 :
- case 0x0606 :
- case 0x0608 :
- case 0x0622 :
- case 0x0626 : return "Irdeto";
- case 0x0700 : return "DigiCipher 2";
- case 0x0911 :
- case 0x0919 :
- case 0x0960 :
- case 0x0961 : return "NDS Videoguard 1/2";
- case 0x0B00 : return "Conax CAS 5 /7";
- case 0x0D00 :
- case 0x0D02 :
- case 0x0D03 :
- case 0x0D05 :
- case 0x0D07 :
- case 0x0D20 : return "Cryptoworks";
- case 0x0E00 : return "PowerVu";
- case 0x1000 : return "RAS (Remote Authorisation System)";
- case 0x1702 :
- case 0x1722 :
- case 0x1762 : return "BetaCrypt 1 or Nagravision";
- case 0x1710 : return "BetaCrypt 2";
- case 0x1800 :
- case 0x1801 :
- case 0x1810 :
- case 0x1830 : return "Nagravision";
- case 0x22F0 : return "Codicrypt";
- case 0x2600 : return "BISS";
- case 0x4800 : return "Accessgate";
- case 0x4900 : return "China Crypt";
- case 0x4A10 : return "EasyCas";
- case 0x4A20 : return "AlphaCrypt";
- case 0x4A60 :
- case 0x4A61 :
- case 0x4A63 : return "SkyCrypt or Neotioncrypt or Neotion SHL";
- case 0x4A70 : return "DreamCrypt";
- case 0x4A80 : return "ThalesCrypt";
- case 0x4AA1 : return "KeyFly";
- case 0x4ABF : return "DG-Crypt";
- case 0x4AD0 :
- case 0x4AD1 : return "X-Crypt";
- case 0x4AD4 : return "OmniCrypt";
- case 0x4AE0 : return "RossCrypt";
- case 0x4B13 : return "PlayReady";
- case 0x5500 : return "Z-Crypt or DRE-Crypt";
- case 0x5501 : return "Griffin";
- default : return "Encrypted";
- }
-}
-
-//---------------------------------------------------------------------------
-bool Mpeg_Descriptors_CA_system_ID_MustSkipSlices(int16u CA_system_ID)
-{
- switch (CA_system_ID)
- {
- case 0x4B13 : // PlayReady
- return true;
- default : return false; //We try, it is not sure
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mpeg_Descriptors::File_Mpeg_Descriptors()
-{
- //In
- Complete_Stream=NULL;
- transport_stream_id=0x0000;
- pid=0x0000;
- table_id=0x00;
- table_id_extension=0x0000;
- elementary_PID=0x0000;
- program_number=0x0000;
- registration_format_identifier = 0x00000000;
- stream_type=0x00;
- event_id=0x0000;
- elementary_PID_IsValid=false;
- program_number_IsValid=false;
- registration_format_identifier_IsValid = false;
- stream_type_IsValid=false;
- event_id_IsValid=false;
-
- //Out
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::FileHeader_Parse()
-{
- Accept();
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Header_Parse()
-{
- int8u descriptor_tag=0, descriptor_length=0;
- Get_B1 (descriptor_tag, "descriptor_tag");
- Get_B1 (descriptor_length, "descriptor_length");
-
- //Size
- if (Element_Size)
- Header_Fill_Size(Element_Size);
- if (Element_Offset)
- Header_Fill_Size(Element_Offset);
- if (descriptor_length)
- Header_Fill_Size(descriptor_length);
-
- if (Element_Size<Element_Offset+descriptor_length)
- {
- Element_WaitForMoreData();
- return;
- }
-
- //Filling
- Header_Fill_Code(descriptor_tag, Ztring().From_Number(descriptor_tag, 16));
- Header_Fill_Size(2+descriptor_length);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Data_Parse()
-{
- #define ELEMENT_CASE(_NAME, _DETAIL) \
- case 0x##_NAME : Element_Name(_DETAIL); Descriptor_##_NAME(); break;
-
- //Parsing
- if (table_id> 0x00 && table_id<0x40)
- {
- switch (Element_Code)
- {
- ELEMENT_CASE(00, "Reserved");
- ELEMENT_CASE(01, "Reserved");
- ELEMENT_CASE(02, "video_stream");
- ELEMENT_CASE(03, "audio_stream");
- ELEMENT_CASE(04, "hierarchy");
- ELEMENT_CASE(05, "registration");
- ELEMENT_CASE(06, "data_stream_alignment");
- ELEMENT_CASE(07, "target_background_grid");
- ELEMENT_CASE(08, "Video_window");
- ELEMENT_CASE(09, "CA");
- ELEMENT_CASE(0A, "ISO_639_language");
- ELEMENT_CASE(0B, "System_clock");
- ELEMENT_CASE(0C, "Multiplex_buffer_utilization");
- ELEMENT_CASE(0D, "Copyright");
- ELEMENT_CASE(0E, "Maximum_bitrate");
- ELEMENT_CASE(0F, "Private_data_indicator");
- ELEMENT_CASE(10, "Smoothing_buffer");
- ELEMENT_CASE(11, "STD");
- ELEMENT_CASE(12, "IBP");
- ELEMENT_CASE(13, "Defined in ISO/IEC 13818-6");
- ELEMENT_CASE(14, "Defined in ISO/IEC 13818-6");
- ELEMENT_CASE(15, "Defined in ISO/IEC 13818-6");
- ELEMENT_CASE(16, "Defined in ISO/IEC 13818-6");
- ELEMENT_CASE(17, "Defined in ISO/IEC 13818-6");
- ELEMENT_CASE(18, "Defined in ISO/IEC 13818-6");
- ELEMENT_CASE(19, "Defined in ISO/IEC 13818-6");
- ELEMENT_CASE(1A, "Defined in ISO/IEC 13818-6");
- ELEMENT_CASE(1B, "MPEG-4_video");
- ELEMENT_CASE(1C, "MPEG-4_audio");
- ELEMENT_CASE(1D, "IOD");
- ELEMENT_CASE(1E, "SL");
- ELEMENT_CASE(1F, "FMC");
- ELEMENT_CASE(20, "External_ES_ID");
- ELEMENT_CASE(21, "MuxCode");
- ELEMENT_CASE(22, "FmxBufferSize");
- ELEMENT_CASE(23, "multiplexbuffer");
- ELEMENT_CASE(24, "content_labeling");
- ELEMENT_CASE(25, "metadata_pointer");
- ELEMENT_CASE(26, "metadata");
- ELEMENT_CASE(27, "metadata_STD");
- ELEMENT_CASE(28, "AVC video");
- ELEMENT_CASE(29, "IPMP"); //ISO-IEC 13818-11
- ELEMENT_CASE(2A, "AVC timing and HRD");
- ELEMENT_CASE(2B, "MPEG-2 AAC audio");
- ELEMENT_CASE(2C, "FlexMux_Timing");
- ELEMENT_CASE(2D, "MPEG-4_text");
- ELEMENT_CASE(2E, "MPEG-4_audio_extension");
- ELEMENT_CASE(2F, "Auxiliary_video_data");
- ELEMENT_CASE(30, "SVC extension");
- ELEMENT_CASE(31, "MVC extension");
- ELEMENT_CASE(32, "J2K video");
- ELEMENT_CASE(33, "MVC operation point");
- ELEMENT_CASE(34, "MPEG2_stereoscopic_video_format");
- ELEMENT_CASE(35, "Stereoscopic_program_info");
- ELEMENT_CASE(36, "Stereoscopic_video_info");
- ELEMENT_CASE(37, "ODUpdate");
- ELEMENT_CASE(38, "Transport_profile");
- ELEMENT_CASE(39, "HEVC video");
- ELEMENT_CASE(3A, "HEVC timing and HRD");
- ELEMENT_CASE(3F, "Extension");
-
- //Following is in private sections, in case there is not network type detected
- ELEMENT_CASE(40, "DVB - network_name_descriptor");
- ELEMENT_CASE(41, "DVB - service_list_descriptor");
- ELEMENT_CASE(42, "DVB - stuffing_descriptor");
- ELEMENT_CASE(43, "DVB - satellite_delivery_system_descriptor");
- ELEMENT_CASE(44, "DVB - cable_delivery_system_descriptor");
- ELEMENT_CASE(45, "DVB - VBI_data_descriptor");
- ELEMENT_CASE(46, "DVB - VBI_teletext_descriptor");
- ELEMENT_CASE(47, "DVB - bouquet_name_descriptor");
- ELEMENT_CASE(48, "DVB - service_descriptor");
- ELEMENT_CASE(49, "DVB - country_availability_descriptor");
- ELEMENT_CASE(4A, "DVB - linkage_descriptor");
- ELEMENT_CASE(4B, "DVB - NVOD_reference_descriptor");
- ELEMENT_CASE(4C, "DVB - time_shifted_service_descriptor");
- ELEMENT_CASE(4D, "DVB - short_event_descriptor");
- ELEMENT_CASE(4E, "DVB - extended_event_descriptor");
- ELEMENT_CASE(4F, "DVB - time_shifted_event_descriptor");
- ELEMENT_CASE(50, "DVB - component_descriptor");
- ELEMENT_CASE(51, "DVB - mosaic_descriptor");
- ELEMENT_CASE(52, "DVB - stream_identifier_descriptor");
- ELEMENT_CASE(53, "DVB - CA_identifier_descriptor");
- ELEMENT_CASE(54, "DVB - content_descriptor");
- ELEMENT_CASE(55, "DVB - parental_rating_descriptor");
- ELEMENT_CASE(56, "DVB - teletext_descriptor");
- ELEMENT_CASE(57, "DVB - telephone_descriptor");
- ELEMENT_CASE(58, "DVB - local_time_offset_descriptor");
- ELEMENT_CASE(59, "DVB - subtitling_descriptor");
- ELEMENT_CASE(5A, "DVB - terrestrial_delivery_system_descriptor");
- ELEMENT_CASE(5B, "DVB - multilingual_network_name_descriptor");
- ELEMENT_CASE(5C, "DVB - multilingual_bouquet_name_descriptor");
- ELEMENT_CASE(5D, "DVB - multilingual_service_name_descriptor");
- ELEMENT_CASE(5E, "DVB - multilingual_component_descriptor");
- ELEMENT_CASE(5F, "DVB - private_data_specifier_descriptor");
- ELEMENT_CASE(60, "DVB - service_move_descriptor");
- ELEMENT_CASE(61, "DVB - short_smoothing_buffer_descriptor");
- ELEMENT_CASE(62, "DVB - frequency_list_descriptor");
- ELEMENT_CASE(63, "DVB - partial_transport_stream_descriptor");
- ELEMENT_CASE(64, "DVB - data_broadcast_descriptor");
- ELEMENT_CASE(65, "DVB - scrambling_descriptor");
- ELEMENT_CASE(66, "DVB - data_broadcast_id_descriptor");
- ELEMENT_CASE(67, "DVB - transport_stream_descriptor");
- ELEMENT_CASE(68, "DVB - DSNG_descriptor");
- ELEMENT_CASE(69, "DVB - PDC_descriptor");
- ELEMENT_CASE(6A, "DVB - AC-3_descriptor");
- ELEMENT_CASE(6B, "DVB - ancillary_data_descriptor");
- ELEMENT_CASE(6C, "DVB - cell_list_descriptor");
- ELEMENT_CASE(6D, "DVB - cell_frequency_link_descriptor");
- ELEMENT_CASE(6E, "DVB - announcement_support_descriptor");
- ELEMENT_CASE(6F, "DVB - application_signalling_descriptor");
- ELEMENT_CASE(70, "DVB - adaptation_field_data_descriptor");
- ELEMENT_CASE(71, "DVB - service_identifier_descriptor");
- ELEMENT_CASE(72, "DVB - service_availability_descriptor");
- ELEMENT_CASE(73, "DVB - default_authority_descriptor");
- ELEMENT_CASE(74, "DVB - related_content_descriptor");
- ELEMENT_CASE(75, "DVB - TVA_id_descriptor");
- ELEMENT_CASE(76, "DVB - content_identifier_descriptor");
- ELEMENT_CASE(77, "DVB - time_slice_fec_identifier_descriptor");
- ELEMENT_CASE(78, "DVB - ECM_repetition_rate_descriptor");
- ELEMENT_CASE(79, "DVB - S2_satellite_delivery_system_descriptor");
- ELEMENT_CASE(7A, "DVB - enhanced_AC-3_descriptor");
- ELEMENT_CASE(7B, "DVB - DTS descriptor");
- ELEMENT_CASE(7C, "DVB - AAC descriptor");
- ELEMENT_CASE(7D, "DVB - reserved for future use");
- ELEMENT_CASE(7E, "DVB - reserved for future use");
- ELEMENT_CASE(7F, "DVB - extension descriptor");
- ELEMENT_CASE(80, "ATSC - stuffing");
- ELEMENT_CASE(81, "ATSC - AC-3 audio");
- ELEMENT_CASE(86, "ATSC - caption service");
- ELEMENT_CASE(87, "ATSC - content advisory");
- ELEMENT_CASE(A0, "ATSC - extended channel name");
- ELEMENT_CASE(A1, "ATSC - service location");
- ELEMENT_CASE(A2, "ATSC - time-shifted service");
- ELEMENT_CASE(A3, "ATSC - component name");
- ELEMENT_CASE(A8, "ATSC - DCC Departing Request");
- ELEMENT_CASE(A9, "ATSC - DCC Arriving Request");
- ELEMENT_CASE(AA, "ATSC - Redistribution Control");
- ELEMENT_CASE(AB, "ATSC - DCC Location Code");
- ELEMENT_CASE(C1, "ARIB - Digital Copy Control");
- ELEMENT_CASE(C4, "SMPTE - ANC"); //SMPTE ST 2038
- ELEMENT_CASE(C8, "ARIB - Video Decode Control");
- ELEMENT_CASE(DE, "ARIB - Content Availability");
- ELEMENT_CASE(E9, "CableLabs - Encoder Boundary Point");
- ELEMENT_CASE(FC, "ARIB - Emergency Information");
- ELEMENT_CASE(FD, "ARIB - Data Component");
-
- default: if (Element_Code>=0x40)
- Element_Info1("user private");
- else
- Element_Info1("unknown");
- Skip_XX(Element_Size, "Data");
- break;
- }
- }
- else if (table_id>=0x40 && table_id<0x80)
- {
- switch (Element_Code)
- {
- ELEMENT_CASE(40, "DVB - network_name_descriptor");
- ELEMENT_CASE(41, "DVB - service_list_descriptor");
- ELEMENT_CASE(42, "DVB - stuffing_descriptor");
- ELEMENT_CASE(43, "DVB - satellite_delivery_system_descriptor");
- ELEMENT_CASE(44, "DVB - cable_delivery_system_descriptor");
- ELEMENT_CASE(45, "DVB - VBI_data_descriptor");
- ELEMENT_CASE(46, "DVB - VBI_teletext_descriptor");
- ELEMENT_CASE(47, "DVB - bouquet_name_descriptor");
- ELEMENT_CASE(48, "DVB - service_descriptor");
- ELEMENT_CASE(49, "DVB - country_availability_descriptor");
- ELEMENT_CASE(4A, "DVB - linkage_descriptor");
- ELEMENT_CASE(4B, "DVB - NVOD_reference_descriptor");
- ELEMENT_CASE(4C, "DVB - time_shifted_service_descriptor");
- ELEMENT_CASE(4D, "DVB - short_event_descriptor");
- ELEMENT_CASE(4E, "DVB - extended_event_descriptor");
- ELEMENT_CASE(4F, "DVB - time_shifted_event_descriptor");
- ELEMENT_CASE(50, "DVB - component_descriptor");
- ELEMENT_CASE(51, "DVB - mosaic_descriptor");
- ELEMENT_CASE(52, "DVB - stream_identifier_descriptor");
- ELEMENT_CASE(53, "DVB - CA_identifier_descriptor");
- ELEMENT_CASE(54, "DVB - content_descriptor");
- ELEMENT_CASE(55, "DVB - parental_rating_descriptor");
- ELEMENT_CASE(56, "DVB - teletext_descriptor");
- ELEMENT_CASE(57, "DVB - telephone_descriptor");
- ELEMENT_CASE(58, "DVB - local_time_offset_descriptor");
- ELEMENT_CASE(59, "DVB - subtitling_descriptor");
- ELEMENT_CASE(5A, "DVB - terrestrial_delivery_system_descriptor");
- ELEMENT_CASE(5B, "DVB - multilingual_network_name_descriptor");
- ELEMENT_CASE(5C, "DVB - multilingual_bouquet_name_descriptor");
- ELEMENT_CASE(5D, "DVB - multilingual_service_name_descriptor");
- ELEMENT_CASE(5E, "DVB - multilingual_component_descriptor");
- ELEMENT_CASE(5F, "DVB - private_data_specifier_descriptor");
- ELEMENT_CASE(60, "DVB - service_move_descriptor");
- ELEMENT_CASE(61, "DVB - short_smoothing_buffer_descriptor");
- ELEMENT_CASE(62, "DVB - frequency_list_descriptor");
- ELEMENT_CASE(63, "DVB - partial_transport_stream_descriptor");
- ELEMENT_CASE(64, "DVB - data_broadcast_descriptor");
- ELEMENT_CASE(65, "DVB - scrambling_descriptor");
- ELEMENT_CASE(66, "DVB - data_broadcast_id_descriptor");
- ELEMENT_CASE(67, "DVB - transport_stream_descriptor");
- ELEMENT_CASE(68, "DVB - DSNG_descriptor");
- ELEMENT_CASE(69, "DVB - PDC_descriptor");
- ELEMENT_CASE(6A, "DVB - AC-3_descriptor");
- ELEMENT_CASE(6B, "DVB - ancillary_data_descriptor");
- ELEMENT_CASE(6C, "DVB - cell_list_descriptor");
- ELEMENT_CASE(6D, "DVB - cell_frequency_link_descriptor");
- ELEMENT_CASE(6E, "DVB - announcement_support_descriptor");
- ELEMENT_CASE(6F, "DVB - application_signalling_descriptor");
- ELEMENT_CASE(70, "DVB - adaptation_field_data_descriptor");
- ELEMENT_CASE(71, "DVB - service_identifier_descriptor");
- ELEMENT_CASE(72, "DVB - service_availability_descriptor");
- ELEMENT_CASE(73, "DVB - default_authority_descriptor");
- ELEMENT_CASE(74, "DVB - related_content_descriptor");
- ELEMENT_CASE(75, "DVB - TVA_id_descriptor");
- ELEMENT_CASE(76, "DVB - content_identifier_descriptor");
- ELEMENT_CASE(77, "DVB - time_slice_fec_identifier_descriptor");
- ELEMENT_CASE(78, "DVB - ECM_repetition_rate_descriptor");
- ELEMENT_CASE(79, "DVB - S2_satellite_delivery_system_descriptor");
- ELEMENT_CASE(7A, "DVB - enhanced_AC-3_descriptor");
- ELEMENT_CASE(7B, "DVB - DTS descriptor");
- ELEMENT_CASE(7C, "DVB - AAC descriptor");
- ELEMENT_CASE(7D, "DVB - reserved for future use");
- ELEMENT_CASE(7E, "DVB - reserved for future use");
- ELEMENT_CASE(7F, "DVB - extension descriptor");
- default: if (Element_Code>=0x40)
- Element_Info1("user private");
- else
- Element_Info1("unknown");
- Skip_XX(Element_Size, "Data");
- break;
- }
- }
- else if ((table_id>=0xC0 && table_id<0xE0))
- {
- switch (Element_Code)
- {
- ELEMENT_CASE(80, "ATSC - stuffing");
- ELEMENT_CASE(81, "ATSC - AC-3 audio");
- ELEMENT_CASE(86, "ATSC - caption service");
- ELEMENT_CASE(87, "ATSC - content advisory");
- ELEMENT_CASE(A0, "ATSC - extended channel name");
- ELEMENT_CASE(A1, "ATSC - service location");
- ELEMENT_CASE(A2, "ATSC - time-shifted service");
- ELEMENT_CASE(A3, "ATSC - component name");
- ELEMENT_CASE(A8, "ATSC - DCC Departing Request");
- ELEMENT_CASE(A9, "ATSC - DCC Arriving Request");
- ELEMENT_CASE(AA, "ATSC - Redistribution Control");
- ELEMENT_CASE(AB, "ATSC - DCC Location Code");
- default: if (Element_Code>=0x40)
- Element_Info1("user private");
- else
- Element_Info1("unknown");
- Skip_XX(Element_Size, "Data");
- break;
- }
- }
- else if (table_id==0xFC)
- {
- //SCTE 35
- #undef ELEMENT_CASE
- #define ELEMENT_CASE(_NAME, _DETAIL) \
- case 0x##_NAME : Element_Name(_DETAIL); CUEI_##_NAME(); break;
- switch (Element_Code)
- {
- ELEMENT_CASE(00, "SCTE35 - avail_descriptor");
- ELEMENT_CASE(01, "SCTE35 - DTMF_descriptor");
- ELEMENT_CASE(02, "SCTE35 - segmentation_descriptor");
- default: Element_Info1("SCTE35 - Reserved");
- Skip_XX(Element_Size, "Data");
- break;
- }
- }
- else
- {
- if (Element_Code>=0x40)
- Element_Info1("user private");
- else
- Element_Info1("unknown");
- Skip_XX(Element_Size, "Data");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_02()
-{
- //Parsing
- int8u frame_rate_code;
- bool multiple_frame_rate_flag, MPEG_1_only_flag;
- int8u profile_and_level_indication_profile=4, profile_and_level_indication_level=10, chroma_format=1;
- bool frame_rate_extension_flag=false;
- BS_Begin();
- Get_SB ( multiple_frame_rate_flag, "multiple_frame_rate_flag");
- Get_S1 (4, frame_rate_code, "frame_rate_code"); Param_Info1(Mpegv_frame_rate[frame_rate_code]);
- Get_SB ( MPEG_1_only_flag, "MPEG_1_only_flag");
- Skip_SB( "constrained_parameter_flag");
- Skip_SB( "still_picture_flag");
- if (MPEG_1_only_flag==0)
- {
- Skip_SB( "profile_and_level_indication_escape");
- Get_S1 (3, profile_and_level_indication_profile, "profile_and_level_indication_profile"); Param_Info1(Mpegv_profile_and_level_indication_profile[profile_and_level_indication_profile]);
- Get_S1 (4, profile_and_level_indication_level, "profile_and_level_indication_level"); Param_Info1(Mpegv_profile_and_level_indication_level[profile_and_level_indication_level]);
- Get_S1 (2, chroma_format, "chroma_format"); Param_Info1(Mpegv_Colorimetry_format[chroma_format]);
- Get_SB ( frame_rate_extension_flag, "frame_rate_extension_flag");
- Skip_S1(5, "reserved");
- }
- BS_End();
-
- //Filling
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- if (!multiple_frame_rate_flag && !frame_rate_extension_flag && frame_rate_code)
- Complete_Stream->Streams[elementary_PID]->Infos["FrameRate"]=Ztring::ToZtring(Mpegv_frame_rate[frame_rate_code]);
- Complete_Stream->Streams[elementary_PID]->Infos["Format_Version"]=MPEG_1_only_flag?__T("Version 1"):__T("Version 2");
- Complete_Stream->Streams[elementary_PID]->Infos["Colorimetry"]=Mpegv_Colorimetry_format[chroma_format];
- if (profile_and_level_indication_profile)
- {
- Complete_Stream->Streams[elementary_PID]->Infos["Format_Profile"]=Ztring().From_Local(Mpegv_profile_and_level_indication_profile[profile_and_level_indication_profile])+__T("@")+Ztring().From_Local(Mpegv_profile_and_level_indication_level[profile_and_level_indication_level]);
- Complete_Stream->Streams[elementary_PID]->Infos["Codec_Profile"]=Ztring().From_Local(Mpegv_profile_and_level_indication_profile[profile_and_level_indication_profile])+__T("@")+Ztring().From_Local(Mpegv_profile_and_level_indication_level[profile_and_level_indication_level]);
- }
- }
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_03()
-{
- //Parsing
- int8u ID, layer;
- bool variable_rate_audio_indicator;
- BS_Begin();
- Skip_SB( "free_format_flag");
- Get_S1 (1, ID, "ID"); Param_Info1(Mpega_Version[2+ID]); //Mpega_Version is with MPEG2.5 hack
- Get_S1 (2, layer, "layer"); Param_Info1(Mpega_Layer[layer]);
- Get_SB ( variable_rate_audio_indicator, "variable_rate_audio_indicator");
- Skip_S1(3, "reserved");
- BS_End();
-
- FILLING_BEGIN();
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->Infos["BitRate_Mode"]=variable_rate_audio_indicator?__T("VBR"):__T("CBR");
- Complete_Stream->Streams[elementary_PID]->Infos["Codec"]=Ztring(Mpega_Version[ID])+Ztring(Mpega_Layer[layer]);
- Complete_Stream->Streams[elementary_PID]->Infos["Format"]=__T("MPEG Audio");
- Complete_Stream->Streams[elementary_PID]->Infos["Format_Version"]=Mpega_Format_Profile_Version[ID];
- Complete_Stream->Streams[elementary_PID]->Infos["Format_Profile"]=Mpega_Format_Profile_Layer[layer];
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_05()
-{
- //Parsing
- int32u format_identifier;
- Get_B4 (format_identifier, "format_identifier"); Element_Info1(Mpeg_Descriptors_registration_format_identifier_Format(format_identifier)); Param_Info1(Mpeg_Descriptors_registration_format_identifier_Format(format_identifier));
- if (Element_Size-Element_Offset>0)
- Skip_XX(Element_Size-Element_Offset, "additional_identification_info");
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- switch (elementary_PID_IsValid)
- {
- case false : //Per program
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].registration_format_identifier=format_identifier;
- break;
- case true : //Per PES
- Complete_Stream->Streams[elementary_PID]->registration_format_identifier=format_identifier;
- Complete_Stream->Streams[elementary_PID]->Infos["format_identifier"]=Ztring().From_CC4(format_identifier);
- if (Complete_Stream->Streams[elementary_PID]->Infos["format_identifier"].size()!=4)
- {
- Ztring Temp; Temp.From_Number(format_identifier, 16);
- if (Temp.size()<8)
- Temp.insert(0, 8-Temp.size(), __T('0'));
- Complete_Stream->Streams[elementary_PID]->Infos["format_identifier"]=__T("0x")+Temp;
- }
- Complete_Stream->Streams[elementary_PID]->Infos_Option["format_identifier"]=__T("N NT");
- if (format_identifier==Elements::KLVA)
- {
- Complete_Stream->Streams[elementary_PID]->Infos["Format"]=__T("KLV");
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].HasNotDisplayableStreams=true;
- }
- //Coherency
- if (stream_type==0x81 && Complete_Stream->Streams[elementary_PID]->registration_format_identifier==Elements::BSSD)
- Complete_Stream->Streams[elementary_PID]->registration_format_identifier=0x00000000; //Reseting it, this combinaision is not possible but a stream has it
- break;
- }
- break;
- default : ;
- }
- FILLING_ELSE()
- switch (table_id)
- {
- case 0x02 : //program_map_section
- switch (elementary_PID_IsValid)
- {
- case false : //Per program
- break;
- case true : //Per PES
- Complete_Stream->Streams[elementary_PID]->Infos["format_identifier"]=__T("(INVALID)");
- Complete_Stream->Streams[elementary_PID]->Infos_Option["format_identifier"]=__T("N NT");
- break;
- }
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_06()
-{
- //Parsing
- Info_B1(alignment_type, "alignment_type"); Param_Info1(Mpeg_Descriptors_alignment_type(alignment_type));
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_07()
-{
- //Parsing
- BS_Begin();
- Skip_S1(14, "horizontal_size");
- Skip_S1(14, "vertical_size");
- Skip_S1( 4, "aspect_ratio_information"); //Same as ISO/IEC 13818-2
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_08()
-{
- //Parsing
- BS_Begin();
- Skip_S1(14, "horizontal_offset");
- Skip_S1(14, "vertical_offset");
- Skip_S1( 4, "window_priority");
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_09()
-{
- //Parsing
- int16u CA_system_ID, CA_PID;
- Get_B2 (CA_system_ID, "CA_system_ID"); Param_Info1(Mpeg_Descriptors_CA_system_ID(CA_system_ID));
- BS_Begin();
- Skip_S1( 3, "reserved");
- Get_S2 (13, CA_PID, "CA_PID");
- BS_End();
- if (Element_Size-Element_Offset>0)
- Skip_XX(Element_Size-Element_Offset, "private_data_byte");
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x01 : //conditional_access_section
- if (Complete_Stream->Streams[CA_PID]->Kind==complete_stream::stream::unknown) //Priority to PES, if this is a PES, we skip the CA
- {
- Complete_Stream->Streams[CA_PID]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[CA_PID]->Table_IDs.resize(0x100);
- #ifdef MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- Complete_Stream->Streams[CA_PID]->Searching_Payload_Start_Set(true);
- #endif
- }
- break;
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->CA_system_ID=CA_system_ID;
- Complete_Stream->Streams[elementary_PID]->CA_system_ID_MustSkipSlices=Mpeg_Descriptors_CA_system_ID_MustSkipSlices(CA_system_ID);
- if (CA_PID<Complete_Stream->Streams.size() && Complete_Stream->Streams[CA_PID]->Kind==complete_stream::stream::unknown) //Priority to PES, if this is a PES, we skip the CA
- {
- Complete_Stream->Streams[CA_PID]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[CA_PID]->Table_IDs.resize(0x100);
- #ifdef MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- Complete_Stream->Streams[CA_PID]->Searching_Payload_Start_Set(true);
- #endif
- }
- }
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_0A()
-{
- //Parsing
- int32u ISO_639_language_code;
- int8u audio_type;
- Get_C3 (ISO_639_language_code, "ISO_639_language_code");
- Get_B1 (audio_type, "audio_type"); Param_Info1(Mpeg_Descriptors_audio_type(audio_type));
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Ztring ISO_639_2;
- if (ISO_639_language_code)
- ISO_639_2.From_CC3(ISO_639_language_code);
- const Ztring& ISO_639_1=MediaInfoLib::Config.Iso639_1_Get(ISO_639_2);
- Complete_Stream->Streams[elementary_PID]->Infos["Language"]=ISO_639_1.empty()?ISO_639_2:ISO_639_1;
- if (audio_type)
- Complete_Stream->Streams[elementary_PID]->Infos["Language_More"]=Mpeg_Descriptors_audio_type(audio_type);
- }
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_0B()
-{
- //Parsing
- int8u clock_accuracy_integer, clock_accuracy_exponent;
- BS_Begin();
- Skip_SB( "external_clock_reference_indicator");
- Skip_SB( "reserved");
- Get_S1 (6, clock_accuracy_integer, "clock_accuracy_integer");
- Get_S1 (3, clock_accuracy_exponent, "clock_accuracy_exponent"); Param_Info1(Ztring::ToZtring(clock_accuracy_integer*(int64u)pow(10.0, clock_accuracy_exponent)));
- Skip_S1(5, "reserved");
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_0D()
-{
- //Parsing
- int32u copyright_identifier;
- Get_B4 (copyright_identifier, "copyright_identifier");
- if ((copyright_identifier&0xFF000000)>=0x61000000 && (copyright_identifier&0xFF000000)<=0x7A000000
- && (copyright_identifier&0x00FF0000)>=0x00610000 && (copyright_identifier&0x00FF0000)<=0x007A0000
- && (copyright_identifier&0x0000FF00)>=0x00006100 && (copyright_identifier&0x0000FF00)<=0x00007A00
- && (copyright_identifier&0x000000FF)>=0x00000061 && (copyright_identifier&0x000000FF)<=0x0000007A)
- {
- Param_Info1(Ztring().From_CC4(copyright_identifier));
- Element_Info1(Ztring().From_CC4(copyright_identifier));
- }
- if (copyright_identifier==Elements::MANZ)
- {
- if (Element_Offset<Element_Size)
- Skip_Local(Element_Size-Element_Offset, "Info");
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Infos["Encoded_Library"]=__T("Manzanita Systems");
- }
-
- if (Element_Offset<Element_Size)
- Skip_Local(Element_Size-Element_Offset, "Info");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_0E()
-{
- //Parsing
- int32u maximum_bitrate;
- BS_Begin();
- Skip_S1( 2, "reserved");
- Get_S3 (22, maximum_bitrate, "maximum_bitrate"); Param_Info2(maximum_bitrate*400, " bps");
- BS_End();
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- Complete_Stream->Streams[elementary_PID]->Infos["BitRate_Maximum"]=Ztring::ToZtring(maximum_bitrate*400);
- else
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].Infos["BitRate_Maximum"]=Ztring::ToZtring(maximum_bitrate*400);
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_0F()
-{
- //Parsing
- int32u private_data_indicator;
- Get_B4 (private_data_indicator, "private_data_indicator");
- if ((private_data_indicator&0xFF000000)>=0x41000000 && (private_data_indicator&0xFF000000)<=0x7A000000
- && (private_data_indicator&0x00FF0000)>=0x00410000 && (private_data_indicator&0x00FF0000)<=0x007A0000
- && (private_data_indicator&0x0000FF00)>=0x00004100 && (private_data_indicator&0x0000FF00)<=0x00007A00
- && (private_data_indicator&0x000000FF)>=0x00000041 && (private_data_indicator&0x000000FF)<=0x0000007A)
- {
- Param_Info1(Ztring().From_CC4(private_data_indicator));
- Element_Info1(Ztring().From_CC4(private_data_indicator));
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_10()
-{
- //Parsing
- BS_Begin();
- Skip_S1( 2, "reserved");
- Info_S3(22, sb_leak_rate, "sb_leak_rate"); Param_Info2(sb_leak_rate*400, " bps");
- Skip_S1( 2, "reserved");
- Info_S3(22, sb_size, "sb_size"); Param_Info2(sb_size, " bytes");
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_11()
-{
- //Parsing
- BS_Begin();
- Skip_S1( 7, "reserved");
- Skip_SB( "leak_valid_flag");
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_1C()
-{
- //Parsing
- int8u Profile_and_level;
- Get_B1 ( Profile_and_level, "Profile_and_level"); Param_Info1(Mpeg_Descriptors_MPEG_4_audio_profile_and_level(Profile_and_level));
-
- FILLING_BEGIN();
- Complete_Stream->Streams[elementary_PID]->Infos["Format_Profile"]=Mpeg_Descriptors_MPEG_4_audio_profile_and_level(Profile_and_level);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_1D()
-{
- //Parsing
- int8u IOD_label;
- Skip_B1( "Scope_of_IOD_label");
- Get_B1 (IOD_label, "IOD_label");
-
- #ifdef MEDIAINFO_MPEG4_YES
- if (Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs.find(IOD_label)==Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs.end())
- {
- File_Mpeg4_Descriptors MI;
- MI.Parser_DoNotFreeIt=true;
- MI.SLConfig_DoNotFreeIt=true;
- Open_Buffer_Init(&MI);
- Open_Buffer_Continue(&MI);
- Finish(&MI);
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs[MI.ES_ID].Parser=MI.Parser;
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].IOD_ESs[MI.ES_ID].SLConfig=MI.SLConfig;
- }
- #else
- Skip_XX(Element_Size-Element_Offset, "MPEG-4 Descriptor");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_1F()
-{
- //Parsing
- int16u ES_ID;
- while (Element_Offset<Element_Size)
- {
- Element_Begin1("FlexMux");
- Get_B2 (ES_ID, "ES_ID");
- if (Element_Offset!=Element_Size)
- Skip_B1( "FlexMuxChannel");
- Element_End0();
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->FMC_ES_ID=ES_ID;
- Complete_Stream->Streams[elementary_PID]->FMC_ES_ID_IsValid=true;
- }
- break;
- default : ;
- }
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_28()
-{
- //Parsing
- int8u profile_idc, level_idc;
- Get_B1 (profile_idc, "profile_idc"); Param_Info1(Avc_profile_idc(profile_idc));
- BS_Begin();
- Element_Begin1("constraints");
- Skip_SB( "constraint_set0_flag");
- Skip_SB( "constraint_set1_flag");
- Skip_SB( "constraint_set2_flag");
- Skip_SB( "constraint_set3_flag");
- Skip_SB( "reserved_zero_4bits");
- Skip_SB( "reserved_zero_4bits");
- Skip_SB( "reserved_zero_4bits");
- Skip_SB( "reserved_zero_4bits");
- Element_End0();
- BS_End();
- Get_B1 (level_idc, "level_idc");
- BS_Begin();
- Skip_SB( "AVC_still_present");
- Skip_SB( "AVC_24_hour_picture_flag");
- Skip_S1(6, "reserved");
- BS_End();
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->Infos["Format"]=__T("AVC");
- Complete_Stream->Streams[elementary_PID]->Infos["Format_Profile"]=Ztring().From_Local(Avc_profile_idc(profile_idc))+__T("@L")+Ztring().From_Number(((float)level_idc)/10, 1);
- }
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_2A()
-{
- //Parsing
- BS_Begin();
- Skip_SB( "hrd_management_valid_flag");
- Skip_S1(6, "reserved");
- TEST_SB_SKIP( "picture_and_timing_info_present");
- bool x90kHz_flag;
- Get_SB (x90kHz_flag, "90kHz_flag");
- Skip_S1(7, "reserved");
- BS_End();
- if (x90kHz_flag)
- {
- Skip_B4( "N");
- Skip_B4( "K");
- }
- Skip_B4( "num_units_in_tick");
- BS_Begin();
- TEST_SB_END();
- Skip_SB( "fixed_frame_rate_flag");
- Skip_SB( "temporal_poc_flag");
- Skip_SB( "picture_to_display_conversion_flag");
- Skip_S1(5, "reserved");
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_2F()
-{
- //Parsing
- int8u aux_video_params_length;
- Skip_B1( "aux_video_type"); //ISO/IEC 23002-3
- Get_B1 (aux_video_params_length, "aux_video_params_length");
- Skip_XX(aux_video_params_length, "aux_video_params");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_40()
-{
- //Parsing
- Ztring network_name;
- Get_DVB_Text(Element_Size, network_name, "network_name");
-
- FILLING_BEGIN();
- Complete_Stream->network_name=network_name;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_41()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- {
- Element_Begin1("service");
- int16u service_id;
- int8u service_type;
- Get_B2 (service_id, "service_id"); Element_Info1(Ztring::ToZtring(service_id, 16));
- Get_B1 (service_type, "service_type"); Param_Info1(Mpeg_Descriptors_dvb_service_type(service_type));
- Element_End1(Ztring::ToZtring(service_id));
-
- FILLING_BEGIN();
- Complete_Stream->Transport_Streams[table_id_extension].Programs[service_id].Infos["ServiceType"]=Mpeg_Descriptors_dvb_service_type(service_type);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_43()
-{
- //Parsing
- int32u frequency, symbol_rate;
- int16u orbital_position;
- int8u polarization, roll_off, modulation_type, FEC_inner;
- bool west_east_flag, modulation_system;
- Get_B4 (frequency, "frequency"); Param_Info1(Frequency_DVB__BCD(frequency));
- Get_B2 (orbital_position, "orbital_position"); Param_Info1(OrbitalPosition_DVB__BCD(orbital_position));
- BS_Begin();
- Get_SB ( west_east_flag, "west_east_flag"); Param_Info1(west_east_flag?"E":"W");
- Get_S1 ( 2, polarization, "polarization");
- Get_S1 ( 2, roll_off, "roll_off");
- Get_SB ( modulation_system, "modulation_system");
- Get_S1 ( 2, modulation_type, "modulation_type");
- Get_S4 (28, symbol_rate, "symbol_rate");
- Get_S1 ( 4, FEC_inner, "FEC_inner");
- BS_End();
-
- FILLING_BEGIN();
- Complete_Stream->Transport_Streams[transport_stream_id].Infos["Frequency"]=Frequency_DVB__BCD(frequency);
- Complete_Stream->Transport_Streams[transport_stream_id].Infos["OrbitalPosition"]=OrbitalPosition_DVB__BCD(orbital_position)+(west_east_flag?__T('E'):__T('W'));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_48()
-{
- //Parsing
- Ztring service_provider_name, service_name;
- int8u service_type, service_provider_name_length, service_name_length;
- Get_B1 (service_type, "service_type"); Param_Info1(Mpeg_Descriptors_dvb_service_type(service_type));
- Get_B1 (service_provider_name_length, "service_provider_name_length");
- Get_DVB_Text(service_provider_name_length, service_provider_name, "service_provider_name");
- Get_B1 (service_name_length, "service_name_length");
- Get_DVB_Text(service_name_length, service_name, "service_name");
-
- //Filling
- FILLING_BEGIN();
- if (program_number_IsValid)
- {
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].Infos["ServiceName"]=service_name;
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].Infos["ServiceProvider"]=service_provider_name;
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].Infos["ServiceType"]=Mpeg_Descriptors_dvb_service_type(service_type);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_4A()
-{
- //Parsing
- int8u linkage_type;
- Skip_B2( "transport_stream_id");
- Info_B2(original_network_id, "original_network_id"); Param_Info1(Mpeg_Descriptors_original_network_id(original_network_id));
- Skip_B2( "service_id");
- Get_B1 (linkage_type, "linkage_type"); Param_Info1(Mpeg_Descriptors_linkage_type(linkage_type));
- if (Element_Size>7)
- Skip_XX(Element_Size-7, "private_data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_4D()
-{
- //Parsing
- Ztring event_name, text;
- int32u ISO_639_language_code;
- int8u event_name_length, text_length;
- Get_C3 (ISO_639_language_code, "ISO_639_language_code");
- Get_B1 (event_name_length, "event_name_length");
- Get_DVB_Text(event_name_length, event_name, "event_name"); Element_Info1(event_name);
- Get_B1 (text_length, "text_length");
- Get_DVB_Text(text_length, text, "text");
-
- FILLING_BEGIN();
- if (table_id>=0x4E && table_id<=0x6F) //event_information_section
- {
- if (event_id_IsValid)
- {
- Ztring ISO_639_2; ISO_639_2.From_CC3(ISO_639_language_code);
- const Ztring& ISO_639_1=MediaInfoLib::Config.Iso639_1_Get(ISO_639_2);
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events[event_id].short_event.event_name=(ISO_639_1.empty()?ISO_639_2:ISO_639_1)+__T(':')+event_name;
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events[event_id].short_event.text=(ISO_639_1.empty()?ISO_639_2:ISO_639_1)+__T(':')+text;
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks_IsUpdated=true;
- Complete_Stream->Programs_IsUpdated=true;
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_50()
-{
- //Parsing
- int32u ISO_639_language_code;
- int8u stream_content;
- BS_Begin();
- Skip_S1(4, "reserved_future_use");
- Get_S1 (4, stream_content, "stream_content"); Param_Info1(Mpeg_Descriptors_stream_content(stream_content)); Element_Info1(Mpeg_Descriptors_stream_content(stream_content));
- BS_End();
- Info_B1(component_type, "component_type"); Param_Info1(Mpeg_Descriptors_component_type(stream_content, component_type)); Element_Info1(Mpeg_Descriptors_component_type(stream_content, component_type));
- Info_B1(component_tag, "component_tag");
- Get_C3 (ISO_639_language_code, "ISO_639_language_code");
- Skip_DVB_Text(Element_Size-Element_Offset, "text");
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Ztring ISO_639_2; ISO_639_2.From_CC3(ISO_639_language_code);
- const Ztring& ISO_639_1=MediaInfoLib::Config.Iso639_1_Get(ISO_639_2);
- Complete_Stream->Streams[elementary_PID]->Infos["Language"]=ISO_639_1.empty()?ISO_639_2:ISO_639_1;
- }
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_52()
-{
- //Parsing
- Skip_B1( "component_tag");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_54()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- {
- BS_Begin();
- int8u content_nibble_level_1, content_nibble_level_2;
- Get_S1 (4, content_nibble_level_1, "content_nibble_level_1"); Param_Info1(Mpeg_Descriptors_content_nibble_level_1(content_nibble_level_1)); Element_Info1(Mpeg_Descriptors_content_nibble_level_1(content_nibble_level_1));
- Get_S1 (4, content_nibble_level_2, "content_nibble_level_2"); Param_Info1(Mpeg_Descriptors_content_nibble_level_2(content_nibble_level_1, content_nibble_level_2)); Element_Info1C((content_nibble_level_1==0xB || content_nibble_level_2!=0), Mpeg_Descriptors_content_nibble_level_2(content_nibble_level_1, content_nibble_level_2));
- Skip_S1(4, "user_nibble");
- Skip_S1(4, "user_nibble");
- BS_End();
-
- FILLING_BEGIN();
- if (event_id_IsValid)
- {
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events[event_id].content=Ztring().From_UTF8(Mpeg_Descriptors_content_nibble_level_2(content_nibble_level_1, content_nibble_level_2))+__T(", ");
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks_IsUpdated=true;
- Complete_Stream->Programs_IsUpdated=true;
- }
- FILLING_END();
- }
-
- FILLING_BEGIN();
- if (event_id_IsValid)
- {
- if (!Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events[event_id].content.empty())
- {
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events[event_id].content.resize(Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events[event_id].content.size()-2);
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks_IsUpdated=true;
- Complete_Stream->Programs_IsUpdated=true;
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_55()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- {
- Skip_Local(3, "country_code");
- Info_B1(rating, "rating"); Param_Info2(rating+3, " years old"); Element_Info2(rating+3, " years old");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_56()
-{
- //Parsing
- Ztring Languages;
- while (Element_Offset<Element_Size)
- {
- Element_Begin1("teletext");
- Ztring ISO_639_language_code;
- int8u teletext_type;
- int8u teletext_magazine_number;
- int8u teletext_page_number_1;
- int8u teletext_page_number_2;
- Get_Local(3, ISO_639_language_code, "ISO_639_language_code");
- BS_Begin();
- Get_S1 (5, teletext_type, "teletext_type"); Param_Info1(Mpeg_Descriptors_teletext_type(teletext_type));
- Get_S1 (3, teletext_magazine_number, "teletext_magazine_number");
- Get_S1 (4, teletext_page_number_1, "teletext_page_number_1");
- Get_S1 (4, teletext_page_number_2, "teletext_page_number_2");
- BS_End();
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid /*&& (teletext_type==2 || teletext_type==5)*/) //Subtitles are the only supported format
- {
- int16u ID=(teletext_magazine_number==0?8:teletext_magazine_number)*100+teletext_page_number_1*10+teletext_page_number_2;
- Complete_Stream->Streams[elementary_PID]->descriptor_tag=0x56;
- Complete_Stream->Streams[elementary_PID]->Teletexts[ID].Infos["Language"]=MediaInfoLib::Config.Iso639_1_Get(ISO_639_language_code);
- Complete_Stream->Streams[elementary_PID]->Teletexts[ID].Infos["Format"]=Mpeg_Descriptors_teletext_type(teletext_type);
- Complete_Stream->Streams[elementary_PID]->Teletexts[ID].Infos["Codec"]=Mpeg_Descriptors_teletext_type(teletext_type);
- }
- break;
- default : ;
- }
- FILLING_END();
-
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_58()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- {
- int32u country_code;
- int16u local_time_offset;
- int8u country_region_id;
- bool local_time_offset_polarity;
- Get_C3 (country_code, "country_code");
- BS_Begin();
- Get_S1 (6, country_region_id, "country_region_id");
- Skip_SB( "reserved");
- Get_SB (local_time_offset_polarity, "local_time_offset_polarity"); Param_Info1(local_time_offset_polarity?"-":"+");
- BS_End();
- Get_B2 (local_time_offset, "local_time_offset"); Param_Info1(TimeHHMM_BCD(local_time_offset));
- Info_B2(date, "time_of_change (date)"); Param_Info1(Date_MJD(date));
- Info_B3(time, "time_of_change (time)"); Param_Info1(Time_BCD(time));
- Info_B2(next_time_offset, "next_time_offset"); Param_Info1(TimeHHMM_BCD(next_time_offset));
-
- FILLING_BEGIN();
- Ztring Country; Country.From_CC3(country_code);
- if (country_region_id)
- Country+=__T(" (")+Ztring::ToZtring(country_region_id)+__T(")");
- Complete_Stream->TimeZones[Country]=(local_time_offset_polarity?__T('-'):__T('+'))+TimeHHMM_BCD(local_time_offset);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_59()
-{
- //Parsing
- Ztring Languages;
- while (Element_Offset<Element_Size)
- {
- Element_Begin1("subtitle");
- int32u ISO_639_language_code;
- Get_C3 (ISO_639_language_code, "ISO_639_language_code");
- Info_B1(subtitling_type, "subtitling_type"); Param_Info1(Mpeg_Descriptors_component_type_O3(subtitling_type));
- Skip_B2( "composition_page_id");
- Skip_B2( "ancillary_page_id");
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Ztring ISO_639_2; ISO_639_2.From_CC3(ISO_639_language_code);
- const Ztring& ISO_639_1=MediaInfoLib::Config.Iso639_1_Get(ISO_639_2);
- Languages+=(ISO_639_1.empty()?ISO_639_2:ISO_639_1)+__T(" / ");
- //TODO: this stream is teletext. Be careful, multiple stream in a pid
- }
- break;
- default : ;
- }
- FILLING_END();
-
- Element_End0();
- }
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->StreamKind_FromDescriptor=Stream_Text;
- Complete_Stream->Streams[elementary_PID]->descriptor_tag=0x59;
- if (!Languages.empty())
- Languages.resize(Languages.size()-3);
- Complete_Stream->Streams[elementary_PID]->Infos["Language"]=Languages;
- Complete_Stream->Streams[elementary_PID]->Infos["Format"]=__T("DVB Subtitle");
- Complete_Stream->Streams[elementary_PID]->Infos["Codec"]=__T("DVB Subtitle");
- }
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_5A()
-{
- //Parsing
- Info_B4(centre_frequency, "centre_frequency"); Param_Info2(((int64u)centre_frequency)*10, " Hz");
- BS_Begin();
- Info_S1(3, bandwidth, "bandwidth"); Param_Info1(Mpeg_Descriptors_bandwidth[bandwidth]);
- Info_SB( priority, "priority"); Param_Info1(priority?"HP":"LP");
- Skip_SB( "Time_Slicing_indicator");
- Skip_SB( "MPE-FEC_indicator");
- Skip_S1(2, "reserved");
- Info_S1(2, constellation, "constellation"); Param_Info1(Mpeg_Descriptors_constellation[constellation]);
- Info_S1(3, hierarchy_information, "hierarchy_information"); Param_Info1(Mpeg_Descriptors_hierarchy_information[hierarchy_information]);
- Info_S1(3, code_rate_HP, "code_rate-HP_stream"); Param_Info1(Mpeg_Descriptors_code_rate[code_rate_HP]);
- Info_S1(3, code_rate_LP, "code_rate-LP_stream"); Param_Info1(Mpeg_Descriptors_code_rate[code_rate_LP]);
- Info_S1(2, guard_interval, "guard_interval"); Param_Info1(Mpeg_Descriptors_guard_interval[guard_interval]);
- Info_S1(2, transmission_mode, "transmission_mode"); Param_Info1(Mpeg_Descriptors_transmission_mode[transmission_mode]);
- Skip_SB( "other_frequency_flag");
- BS_End();
- Skip_B4( "reserved");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_5D()
-{
- //Parsing
- Ztring ServiceProvider, ServiceName;
- while (Element_Offset<Element_Size)
- {
- Ztring service_provider_name, service_name;
- int32u ISO_639_language_code;
- int8u service_provider_name_length, service_name_length;
- Get_C3 (ISO_639_language_code, "ISO_639_language_code");
- Get_B1 (service_provider_name_length, "service_provider_name_length");
- Get_DVB_Text(service_provider_name_length, service_provider_name, "service_provider_name");
- Get_B1 (service_name_length, "service_name_length");
- Get_DVB_Text(service_name_length, service_name, "service_name");
-
- //Filling
- FILLING_BEGIN();
- Ztring ISO_639_2=Ztring().From_CC3(ISO_639_language_code);
- const Ztring& ISO_639_1=MediaInfoLib::Config.Iso639_1_Get(ISO_639_2);
- ServiceProvider+=(ISO_639_1.empty()?ISO_639_2:ISO_639_1)+__T(':')+service_provider_name+__T( " - ");
- ServiceName+=(ISO_639_1.empty()?ISO_639_2:ISO_639_1)+__T(':')+service_name+__T( " - ");
- FILLING_END();
- }
-
- if (!ServiceProvider.empty())
- {
- ServiceProvider.resize(ServiceProvider.size()-3);
- if (program_number_IsValid)
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].Infos["ServiceProvider"]=ServiceProvider;
- }
- if (!ServiceName.empty())
- {
- ServiceName.resize(ServiceName.size()-3);
- if (program_number_IsValid)
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].Infos["ServiceName"]=ServiceName;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_5F()
-{
- //Parsing
- Info_B4(private_data_specifier, "private_data_specifier"); Param_Info1(Ztring().From_CC4(private_data_specifier));
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_63()
-{
- //Parsing
- int32u peak_rate;
- BS_Begin();
- Skip_S1( 2, "DVB_reserved_future_use");
- Get_S3 (22, peak_rate, "peak_rate");
- Skip_S1( 2, "DVB_reserved_future_use");
- Skip_S3(22, "minimum_overall_smoothing_rate");
- Skip_S1( 2, "DVB_reserved_future_use");
- Skip_S2(14, "maximum_overall_smoothing_buffer");
- BS_End();
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- Complete_Stream->Streams[elementary_PID]->Infos["OverallBitRate_Maximum"]=Ztring::ToZtring(peak_rate*400);
- break;
- case 0x7F : //selection_information_section
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Infos["OverallBitRate_Maximum"]=Ztring::ToZtring(peak_rate*400);
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_66()
-{
- //Parsing
- Ztring ISO_639_language_code;
- int8u selector_length, text_length;
- Skip_B2( "data_broadcast_id");
- Skip_B1( "component_tag");
- Get_B1 (selector_length, "selector_length");
- Skip_XX(selector_length, "selector_bytes");
- Get_Local(3, ISO_639_language_code, "ISO_639_language_code");
- Get_B1 (text_length, "text_length");
- Skip_Local(text_length, "text_chars");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_6A()
-{
- //Parsing
- BS_Begin();
- bool component_type_flag, bsid_flag, mainid_flag, asvc_flag, enhanced_ac3=false;
- Get_SB ( component_type_flag, "component_type_flag");
- Get_SB ( bsid_flag, "bsid_flag");
- Get_SB ( mainid_flag, "mainid_flag");
- Get_SB ( asvc_flag, "asvc_flag");
- Skip_SB( "reserved_flag");
- Skip_SB( "reserved_flag");
- Skip_SB( "reserved_flag");
- Skip_SB( "reserved_flag");
- BS_End();
- if (component_type_flag)
- {
- int8u service_type, number_of_channels;
- BS_Begin();
- Get_SB ( enhanced_ac3, "enhanced AC-3");
- Skip_SB( "full_service");
- Get_S1 (3, service_type, "service_type"); Param_Info1(AC3_Mode[service_type]);
- Get_S1 (3, number_of_channels, "number_of_channels"); Param_Info2(Mpeg_Descriptors_AC3_Channels[number_of_channels], " channels");
- BS_End();
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->descriptor_tag=0x6A;
- Complete_Stream->Streams[elementary_PID]->Infos["Channel(s)"]=Ztring().From_Local(Mpeg_Descriptors_AC3_Channels[number_of_channels]);
- }
- break;
- default : ;
- }
- FILLING_END();
- }
- if (bsid_flag)
- {
- BS_Begin();
- Skip_S1(3, "zero");
- Skip_S1(5, "bsid");
- BS_End();
- }
- if (mainid_flag)
- {
- Skip_B1( "mainid");
- }
- if (asvc_flag)
- {
- Skip_B1( "asvc");
- }
-
- FILLING_BEGIN(); //Can be more
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->StreamKind_FromDescriptor=Stream_Audio;
- Complete_Stream->Streams[elementary_PID]->Infos["Format"]=enhanced_ac3?__T("E-AC-3"):__T("AC-3");
- Complete_Stream->Streams[elementary_PID]->Infos["Codec"]=__T("AC3+");
- if (Complete_Stream->Streams[elementary_PID]->registration_format_identifier==Elements::BSSD)
- Complete_Stream->Streams[elementary_PID]->registration_format_identifier=0x00000000; //Reseting it, this combinaision is not possible but an stream has it
- }
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_7A()
-{
- //Parsing
- bool component_type_flag, bsid_flag, mainid_flag, asvc_flag, mixinfoexists, substream1_flag, substream2_flag, substream3_flag, enhanced_ac3=0;
- BS_Begin();
- Get_SB ( component_type_flag, "component_type_flag");
- Get_SB ( bsid_flag, "bsid_flag");
- Get_SB ( mainid_flag, "mainid_flag");
- Get_SB ( asvc_flag, "asvc_flag");
- Get_SB ( mixinfoexists, "mixinfoexists");
- Get_SB ( substream1_flag, "substream1_flag");
- Get_SB ( substream2_flag, "substream2_flag");
- Get_SB ( substream3_flag, "substream3_flag");
- BS_End();
- if (component_type_flag)
- {
- int8u service_type, number_of_channels;
- BS_Begin();
- Get_SB ( enhanced_ac3, "enhanced AC-3");
- Skip_SB( "full_service");
- Get_S1 (3, service_type, "service_type"); Param_Info1(AC3_Mode[service_type]);
- Get_S1 (3, number_of_channels, "number_of_channels"); Param_Info2(Mpeg_Descriptors_AC3_Channels[number_of_channels], " channels");
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->descriptor_tag=0x7A;
- Complete_Stream->Streams[elementary_PID]->Infos["Channel(s)"]=Ztring().From_Local(Mpeg_Descriptors_AC3_Channels[number_of_channels]);
- }
- break;
- default : ;
- }
- FILLING_END();
- BS_End();
- }
- if (bsid_flag)
- {
- BS_Begin();
- Skip_S1(3, "zero");
- Skip_S1(5, "bsid");
- BS_End();
- }
- if (mainid_flag)
- {
- Skip_B1( "mainid");
- }
- if (asvc_flag)
- {
- Skip_B1( "asvc");
- }
- if (substream1_flag)
- {
- Skip_B1( "substream1");
- }
- if (substream2_flag)
- {
- Skip_B1( "substream2");
- }
- if (substream3_flag)
- {
- Skip_B1( "substream3");
- }
-
- FILLING_BEGIN(); //Can be more
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->StreamKind_FromDescriptor=Stream_Audio;
- Complete_Stream->Streams[elementary_PID]->Infos["Format"]=enhanced_ac3?__T("E-AC-3"):__T("AC-3");
- Complete_Stream->Streams[elementary_PID]->Infos["Codec"]=__T("AC3+");
- }
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_7B()
-{
- //Parsing
- BS_Begin();
- Skip_S1(6, "bit_rate_code");
- Skip_S2(7, "nblks");
- Skip_S2(14, "fsize");
- Skip_S1(6, "surround_mode");
- Skip_SB( "lfe_flag");
- Skip_S1(2, "extended_surround_flag");
- BS_End();
- //BS_End_CANBEMORE();
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->descriptor_tag=0x7B;
- }
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_7C()
-{
- //Parsing
- int8u Profile_and_level;
- bool AAC_type_flag;
- Get_B1 ( Profile_and_level, "Profile_and_level"); Param_Info1(Mpeg_Descriptors_MPEG_4_audio_profile_and_level(Profile_and_level));
- BS_Begin();
- Get_SB ( AAC_type_flag, "AAC_type_flag");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- BS_End();
- if (AAC_type_flag)
- {
- Skip_B1( "AAC_type");
- }
- if (Element_Size-Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->descriptor_tag=0x7C;
- Complete_Stream->Streams[elementary_PID]->Infos["Format_Profile"]=Mpeg_Descriptors_MPEG_4_audio_profile_and_level(Profile_and_level);
- }
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_7F()
-{
- //Parsing
- int8u descriptor_tag_extension;
- Get_B1(descriptor_tag_extension, "descriptor_tag_extension");
- switch (descriptor_tag_extension)
- {
- case 0x0F : Descriptor_7F_0F(); break;
- default : Skip_XX(Element_Size-Element_Offset, "Unknown");
- if (elementary_PID_IsValid)
- {
- Ztring &Temp=Complete_Stream->Streams[elementary_PID]->Infos["descriptor_tag_extension"];
- if (!Temp.empty())
- Temp+=__T(" / ");
- Temp+=Ztring::ToZtring(descriptor_tag_extension);
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_7F_0F()
-{
- //Parsing
- int8u config_id;
- Get_B1(config_id, "config_id");
-
- FILLING_BEGIN();
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->Infos["Matrix_Format"]=__T("DTS Neural Audio");
- Complete_Stream->Streams[elementary_PID]->Infos["Matrix_ChannelPositions"]=__T("DTS Neural Audio ")+Ztring::ToZtring(config_id);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_81()
-{
- //Parsing
- Ztring Text, Language1, Language2;
- int8u sample_rate_code, bit_rate_code, surround_mode, bsmod, num_channels, langcod, textlen, text_code;
- bool language_flag, language_flag_2;
- BS_Begin();
- Get_S1 (3, sample_rate_code, "sample_rate_code"); if (sample_rate_code<4) {Param_Info2(AC3_SamplingRate[sample_rate_code], " Hz");}
- Skip_S1(5, "bsid");
- Get_S1 (6, bit_rate_code, "bit_rate_code"); Param_Info2(AC3_BitRate[bit_rate_code]*1000, " Kbps");
- Get_S1 (2, surround_mode, "surround_mode"); Param_Info1(AC3_Surround[surround_mode]);
- Get_S1 (3, bsmod, "bsmod");
- Get_S1 (4, num_channels, "num_channels"); if (num_channels<8) {Param_Info2(AC3_Channels[num_channels], " channels");}
- Skip_SB( "full_svc");
- BS_End();
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->descriptor_tag=0x81;
- if (sample_rate_code<4)
- Complete_Stream->Streams[elementary_PID]->Infos["SamplingRate"]=Ztring::ToZtring(AC3_SamplingRate[sample_rate_code]);
- Complete_Stream->Streams[elementary_PID]->Infos["BitRate"]=Ztring::ToZtring(AC3_BitRate[bit_rate_code]*1000);
- if (num_channels<8)
- Complete_Stream->Streams[elementary_PID]->Infos["Channel(s)"]=Ztring::ToZtring(AC3_Channels[num_channels]);
- }
- }
- FILLING_END();
-
- //Parsing
- if (Element_Offset==Element_Size) return;
- Get_B1 (langcod, "langcod");
-
- //Parsing
- if (Element_Offset==Element_Size) return;
- if (num_channels==0) //1+1 mode
- Skip_B1( "langcod2");
-
- //Parsing
- if (Element_Offset==Element_Size) return;
- if (bsmod<2)
- {
- BS_Begin();
- Skip_S1(3, "mainid");
- Info_BS(2, priority, "priority"); Param_Info1(Mpeg_Descriptors_AC3_Priority[priority]);
- Skip_S1(3, "reserved");
- BS_End();
- }
- else
- Skip_B1( "asvcflags");
-
- //Parsing
- if (Element_Offset==Element_Size) return;
- BS_Begin();
- Get_S1 (7, textlen, "textlen");
- Get_S1 (1, text_code, "text_code"); Param_Info1C((text_code), "Unicode");
- BS_End();
- if (textlen)
- Get_Local(textlen, Text, "text");
-
- //Parsing
- if (Element_Offset==Element_Size) return;
- BS_Begin();
- Get_SB ( language_flag, "language_flag");
- Get_SB ( language_flag_2, "language_flag_2");
- Skip_S1(6, "reserved");
- BS_End();
-
- //Parsing
- if (Element_Offset==Element_Size) return;
- if (language_flag)
- Get_Local(3, Language1, "language1");
-
- //Parsing
- if (Element_Offset==Element_Size) return;
- if (language_flag_2)
- Get_Local(3, Language2, "language2");
-
- //Parsing
- if (Element_Offset==Element_Size) return;
- Skip_XX(Element_Size-Element_Offset, "additional_info");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_86()
-{
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- if (event_id_IsValid)
- {
- delete Complete_Stream->Sources[table_id_extension].ATSC_EPG_Blocks[Complete_Stream->Streams[pid]->table_type].Events[event_id].ServiceDescriptors;
- Complete_Stream->Sources[table_id_extension].ATSC_EPG_Blocks[Complete_Stream->Streams[pid]->table_type].Events[event_id].ServiceDescriptors=new File__Analyze::servicedescriptors;
- }
- else if (elementary_PID_IsValid)
- {
- //delete Complete_Stream->Streams[elementary_PID]->ServiceDescriptors;
- //Complete_Stream->Streams[elementary_PID]->ServiceDescriptors=new File__Analyze::servicedescriptors;
- Complete_Stream->Streams[elementary_PID]->ServiceDescriptors.ServiceDescriptors608.clear();
- Complete_Stream->Streams[elementary_PID]->ServiceDescriptors.ServiceDescriptors708.clear();
- Complete_Stream->Streams[elementary_PID]->ServiceDescriptors_IsPresent=true;
- }
- else if (program_number_IsValid)
- {
- delete Complete_Stream->Transport_Streams[transport_stream_id].Programs[program_number].ServiceDescriptors;
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[program_number].ServiceDescriptors=new File__Analyze::servicedescriptors;
- }
- #endif
-
- //Parsing
- Ztring Text, Language1, Language2;
- int8u number_of_services;
- BS_Begin();
- Skip_S1(3, "reserved");
- Get_S1 (5, number_of_services, "number_of_services");
- BS_End();
-
- for (int8u Pos=0; Pos<number_of_services; Pos++)
- {
- Element_Begin1("service");
- string language;
- int8u caption_service_number;
- bool digital_cc, line21_field=false;
- Get_String(3, language, "language");
- BS_Begin();
- Get_SB (digital_cc, "digital_cc");
- Skip_SB( "reserved");
- if (digital_cc) //line21
- Get_S1(6, caption_service_number, "caption_service_number");
- else
- {
- Skip_S1(5, "reserved");
- Get_SB ( line21_field, "line21_field");
-
- //Coherency test
- if (line21_field && number_of_services==1)
- line21_field=false; // Wrong info in the descriptor?
- }
- Skip_SB( "easy_reader");
- Skip_SB( "wide_aspect_ratio");
- Skip_S2(14, "reserved");
- BS_End();
- Element_End0();
-
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- if (event_id_IsValid)
- {
- if (digital_cc)
- {
- #if defined(MEDIAINFO_EIA708_YES)
- string &Value=Complete_Stream->Sources[table_id_extension].ATSC_EPG_Blocks[Complete_Stream->Streams[pid]->table_type].Events[event_id].ServiceDescriptors->ServiceDescriptors708[caption_service_number].language;
- if (!Value.empty())
- Value+=", ";
- Value+=language;
- #endif
- }
- else
- {
- #if defined(MEDIAINFO_EIA608_YES)
- string &Value=Complete_Stream->Sources[table_id_extension].ATSC_EPG_Blocks[Complete_Stream->Streams[pid]->table_type].Events[event_id].ServiceDescriptors->ServiceDescriptors608[line21_field?1:0].language;
- if (!Value.empty())
- Value+=", ";
- Value+=language;
- #endif
- }
- }
- else if (elementary_PID_IsValid)
- {
- if (digital_cc)
- {
- #if defined(MEDIAINFO_EIA708_YES)
- string &Value=Complete_Stream->Streams[elementary_PID]->ServiceDescriptors.ServiceDescriptors708[caption_service_number].language;
- if (!Value.empty())
- Value+=", ";
- Value+=language;
- #endif
- }
- else
- {
- #if defined(MEDIAINFO_EIA608_YES)
- string &Value=Complete_Stream->Streams[elementary_PID]->ServiceDescriptors.ServiceDescriptors608[line21_field?1:0].language;
- if (!Value.empty())
- Value+=", ";
- Value+=language;
- #endif
- }
- }
- else if (program_number_IsValid)
- {
- if (digital_cc)
- {
- #if defined(MEDIAINFO_EIA708_YES)
- string &Value=Complete_Stream->Transport_Streams[transport_stream_id].Programs[program_number].ServiceDescriptors->ServiceDescriptors708[caption_service_number].language;
- if (!Value.empty())
- Value+=", ";
- Value+=language;
- #endif
- }
- else
- {
- #if defined(MEDIAINFO_EIA608_YES)
- string &Value=Complete_Stream->Transport_Streams[transport_stream_id].Programs[program_number].ServiceDescriptors->ServiceDescriptors608[line21_field?1:0].language;
- if (!Value.empty())
- Value+=", ";
- Value+=language;
- #endif
- }
- }
- #endif
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_87()
-{
- //Parsing
- int8u rating_region_count;
- BS_Begin();
- Skip_S1(2, "reserved");
- Get_S1 (6, rating_region_count, "rating_region_count");
- BS_End();
- for (int8u rating_region_Pos=0; rating_region_Pos<rating_region_count; rating_region_Pos++)
- {
- Element_Begin1("rating_region");
- int8u rated_dimensions;
- Skip_B1( "rating_region");
- Get_B1 (rated_dimensions, "rated_dimensions");
- for (int8u rated_dimension_Pos=0; rated_dimension_Pos<rated_dimensions; rated_dimension_Pos++)
- {
- Element_Begin1("rated_dimension");
- Skip_B1( "rating_dimension_j");
- BS_Begin();
- Skip_S1(4, "reserved");
- Skip_S1(4, "rating_value");
- BS_End();
- Element_End0();
- }
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_A0()
-{
- //Parsing
- Ztring title;
- ATSC_multiple_string_structure(title, "title");
-
- FILLING_BEGIN(); //Can be more
- switch (table_id)
- {
- case 0xC8 : //TVCT
- case 0xC9 : //CVCT
- case 0xDA : //SVCT
- if (program_number_IsValid)
- if (!title.empty())
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].Infos["ServiceName"]=title;
- break;
- default : ;
- }
- FILLING_END();
- FILLING_BEGIN();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_A1()
-{
- //Parsing
- int8u number_elements;
- BS_Begin();
- Skip_S1( 3, "reserved");
- Skip_S2(13, "PCR_PID");
- BS_End();
- Get_B1 ( number_elements, "number_elements");
- for (int8u Pos=0; Pos<number_elements; Pos++)
- {
- Element_Begin0();
- Ztring Language;
- int16u elementary_PID;
- Skip_B1( "stream_type");
- BS_Begin();
- Skip_S1( 3, "reserved");
- Get_S2 (13, elementary_PID, "elementary_PID");
- BS_End();
- Get_Local(3, Language, "ISO_639_language_code");
- Element_End1(Ztring().From_CC2(elementary_PID));
-
- //Filling
- if (elementary_PID<Complete_Stream->Streams.size() && Complete_Stream->Streams[elementary_PID]->Infos["Language"].empty()) //We use only the first detected value
- Complete_Stream->Streams[elementary_PID]->Infos["Language"]=Language;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_A3()
-{
- //Parsing
- Ztring Value;
- ATSC_multiple_string_structure(Value, "name");
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- if (!Value.empty())
- Complete_Stream->Streams[elementary_PID]->Infos["Name"]=Value;
- break;
- default : ;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_AA()
-{
- //Parsing
- Skip_XX(Element_Size, "rc_information");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_C1()
-{
- // ARIB B15
-
- //Parsing
- int8u copy_control_type;
- bool maximum_bit_rate_flag, component_control_flag;
- BS_Begin();
- Skip_S1(2, "digital_recording_control_data");
- Get_SB ( maximum_bit_rate_flag, "maximum_bit_rate_flag ");
- Get_SB ( component_control_flag, "component_control_flag ");
- Get_S1 (2, copy_control_type, "copy_control_type");
- //Skip_S1(2, (copy_control_type&0x1)?"copy_control_type":"reserved_future_use");
- BS_End();
-
- while (Element_Offset<Element_Size)
- Skip_B1( "(ToDo)");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_C8()
-{
- //Parsing
- Skip_XX(Element_Size, "?");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_DE()
-{
- // ARIB B15
-
- //Parsing
- BS_Begin();
- Skip_SB( "reserved_future_use");
- Skip_SB( "copy_restriction_mode");
- Skip_SB( "image_constraint_token");
- Skip_SB( "retention_mode");
- Skip_S1(3, "retention_state");
- Skip_SB( "encryption_mode");
- BS_End();
-
- while (Element_Offset<Element_Size)
- Skip_B1( "reserved_future_use");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_E9()
-{
- //Parsing
- int64u EBP_distance=(int64u)-1;
- int32u ticks_per_second=1;
- int8u num_partitions, EBP_distance_width_minus_1=0;
- bool timescale_flag;
- if (Element_Size==0)
- return; // It is authorized
- BS_Begin();
- Get_S1 (5, num_partitions, "num_partitions");
- Get_SB ( timescale_flag, "timescale_flag");
- Skip_S1(2, "reserved");
- if (timescale_flag)
- {
- Get_S3 (21, ticks_per_second, "ticks_per_second");
- Get_S1 ( 3, EBP_distance_width_minus_1, "EBP_distance_width_minus_1");
- }
- for (int8u i=0; i<num_partitions; ++i)
- {
- Element_Begin1("partition");
- bool EBP_data_explicit_flag, representation_id_flag;
- Get_SB ( EBP_data_explicit_flag, "EBP_data_explicit_flag");
- Get_SB ( representation_id_flag, "representation_id_flag");
- Skip_S1(5, "partition_id");
- if (EBP_data_explicit_flag)
- {
- bool boundary_flag;
- Get_SB (boundary_flag, "boundary_flag");
- if (EBP_distance_width_minus_1<8)
- Get_S8 (8*(EBP_distance_width_minus_1+1), EBP_distance, "EBP_distance");
- else
- {
- //Not supported
- Skip_S1(8, "EBP_distance");
- Skip_S8(64, "EBP_distance");
- }
- if (boundary_flag)
- {
- Skip_S1(3, "SAP_type_max");
- Skip_S1(4, "reserved");
- }
- else
- {
- Skip_S1(7, "reserved");
- }
- Skip_SB( "acquisition_time_flag");
- }
- else
- {
- Skip_SB( "reserved");
- Skip_S2(13, "EBP_PID");
- Skip_S1( 3, "reserved");
- }
- if (representation_id_flag)
- {
- Skip_S8(64, "representation_id");
- }
- Element_End0();
-
- FILLING_BEGIN();
- Complete_Stream->Streams[elementary_PID]->Infos["EBP_Mode"]=EBP_data_explicit_flag?__T("Explicit"):__T("Implicit");
- if (EBP_distance!=(int64u)-1)
- Complete_Stream->Streams[elementary_PID]->Infos["EBP_Distance"]=ticks_per_second==1?Ztring::ToZtring(EBP_distance):Ztring::ToZtring(((float64)EBP_distance)/ticks_per_second, 3);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_FC()
-{
- //Parsing
- Skip_XX(Element_Size, "?");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Descriptor_FD()
-{
- //Parsing
- int16u data_component_id;
- Get_B2 (data_component_id, "data_component_id");
-
- while (Element_Offset<Element_Size)
- Skip_B1( "?");
-
- if (data_component_id==0x0008)
- {
- //Is maybe ARIB caption
-
- FILLING_BEGIN();
- switch (table_id)
- {
- case 0x02 : //program_map_section
- if (elementary_PID_IsValid)
- {
- Complete_Stream->Streams[elementary_PID]->Infos["Format"]=__T("ARIB STD B24/B37");
- //Complete_Stream->Streams[elementary_PID]->StreamKind=Stream_Text;
- }
- break;
- default : ;
- }
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::CUEI_00()
-{
- Skip_C4( "identifier (\"CUEI\")"); //CUEI
- Skip_B4( "provider_avail_id");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::CUEI_01()
-{
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::CUEI_02()
-{
- //Parsing
- int32u segmentation_event_id;
- bool segmentation_event_cancel_indicator;
- Skip_C4( "identifier (\"CUEI\")"); //CUEI
- Get_B4 (segmentation_event_id, "segmentation_event_id");
- BS_Begin();
- Get_SB ( segmentation_event_cancel_indicator, "segmentation_event_cancel_indicator");
- Skip_S1( 7, "reserved");
- BS_End();
- if (!segmentation_event_cancel_indicator)
- {
- int8u segmentation_upid_length, segmentation_type_id;
- bool program_segmentation_flag, segmentation_duration_flag;
- BS_Begin();
- Get_SB ( program_segmentation_flag, "program_segmentation_flag");
- Get_SB ( segmentation_duration_flag, "segmentation_duration_flag");
- Skip_S1( 6, "reserved");
- BS_End();
- if (!program_segmentation_flag)
- {
- int8u component_count;
- Get_B1 (component_count, "component_count");
- for (int8u Pos=0; Pos<component_count; Pos++)
- {
- Skip_B1( "component_tag");
- BS_Begin();
- Skip_S1( 7, "reserved");
- Skip_S5(33, "pts_offset");
- BS_End();
- }
- }
- if (segmentation_duration_flag)
- {
- Skip_B5( "segmentation_duration");
- }
- Skip_B1( "segmentation_upid_type");
- Get_B1 (segmentation_upid_length, "segmentation_upid_length");
- Skip_XX(segmentation_upid_length, "segmentation_upid"); //TODO
- Get_B1 (segmentation_type_id, "segmentation_type_id");
- Skip_B1( "segment_num");
- Skip_B1( "segments_expected");
-
- FILLING_BEGIN();
- for (size_t Program_Pos=0; Program_Pos<Complete_Stream->Streams[pid]->program_numbers.size(); Program_Pos++)
- {
- complete_stream::transport_stream::program::scte35* Scte35=Complete_Stream->Transport_Streams[transport_stream_id].Programs[Complete_Stream->Streams[pid]->program_numbers[Program_Pos]].Scte35;
- if (Scte35)
- {
- int8u Status=0; //Running
- switch (segmentation_type_id)
- {
- case 0x11 : segmentation_type_id=0x10; Status=1; break; //Program Start/End
- case 0x12 : segmentation_type_id=0x10; Status=2; break; //Program Start/Early Termination
- case 0x14 : segmentation_type_id=0x13; Status=1; break; //Program Breakaway/Resumption
- case 0x21 : segmentation_type_id=0x20; Status=1; break; //Chapter Start/End
- case 0x31 : segmentation_type_id=0x30; Status=1; break; //Provider Advertisement Start/End
- case 0x33 : segmentation_type_id=0x32; Status=1; break; //Distributor Advertisement Start/End
- case 0x41 : segmentation_type_id=0x40; Status=1; break; //Unscheduled Event Start/End
- default : ;
- }
-
- Scte35->Segmentations[segmentation_event_id].Segments[segmentation_type_id].Status=Status;
- }
- }
- FILLING_END();
- }
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::ATSC_multiple_string_structure(Ztring &Value, const char* Name)
-{
- //Parsing
- Ztring string;
- int8u number_strings, number_segments;
- Element_Begin1(Name);
- Get_B1(number_strings, "number_strings");
- for (int8u string_Pos=0; string_Pos<number_strings; string_Pos++)
- {
- Element_Begin1("String");
- int32u ISO_639_language_code;
- Get_C3(ISO_639_language_code, "ISO_639_language_code");
- Get_B1(number_segments, "number_segments");
- for (int8u segment_Pos=0; segment_Pos<number_segments; segment_Pos++)
- {
- Element_Begin1("Segment");
- Ztring segment;
- int8u compression_type, mode, number_bytes;
- Get_B1 (compression_type, "compression_type");
- Get_B1 (mode, "mode");
- Get_B1 (number_bytes, "number_bytes");
- switch (compression_type)
- {
- case 0x00 :
- switch (mode)
- {
- case 0x00 : Get_Local(number_bytes, segment, "string"); break;
- case 0x3F : Get_UTF16B(number_bytes, segment, "string"); break;
- default : Skip_XX(number_bytes, "Unknown");
- segment=__T("(Encoded with mode=0x")+Ztring::ToZtring(mode, 16)+__T(')');
- }
- break;
- default : Skip_XX(number_bytes, "(Compressed)");
- segment=__T("(Compressed)");
- }
- Element_End0();
-
- FILLING_BEGIN();
- if (segment.find_first_not_of(__T("\t\n "))!=std::string::npos)
- string+=segment+__T(" - ");
- FILLING_END();
- }
-
- FILLING_BEGIN();
- if (!string.empty())
- string.resize(string.size()-3);
- Ztring ISO_639_2=Ztring().From_CC3(ISO_639_language_code);
- const Ztring& ISO_639_1=MediaInfoLib::Config.Iso639_1_Get(ISO_639_2);
- Value+=(ISO_639_1.empty()?ISO_639_2:ISO_639_1)+__T(':')+string+__T(" - ");
- FILLING_END();
-
- Element_Info1(string);
- Element_End1("String");
- }
-
- if (!Value.empty())
- Value.resize(Value.size()-3);
-
- Element_Info1(Value);
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Descriptors::Get_DVB_Text(int64u Size, Ztring &Value, const char* Info)
-{
- if (Size<1)
- {
- Get_Local(Size, Value, Info);
- return;
- }
-
- //Testing if there is a codepage
- int8u CodePage1;
- Peek_B1(CodePage1);
- if (CodePage1<0x20)
- {
- Skip_B1( "CodePage"); Param_Info1(Mpeg_Descriptors_codepage_1(CodePage1));
- if (CodePage1!=0x10)
- {
- Get_Local(Size-1, Value, Info);
- }
- else
- {
- if (Size<3)
- {
- Value.clear();
- return;
- }
- int16u CodePage2;
- Get_B2 (CodePage2, "CodePage2");
- if (CodePage2==0x02)
- {
- Get_ISO_8859_2(Size-3, Value, Info);
- }
- else //Unknown
- Get_Local(Size-3, Value, Info);
- }
-
- }
- else
- Get_Local(Size, Value, Info);
-}
-
-//---------------------------------------------------------------------------
-//Modified Julian Date
-Ztring File_Mpeg_Descriptors::Date_MJD(int16u Date_)
-{
- //Calculating
- float64 Date=Date_;
- int Y2=(int)((Date-15078.2)/365.25);
- int M2=(int)(((Date-14956.1) - ((int)(Y2*365.25))) /30.6001);
- int D =(int)(Date-14956 - ((int)(Y2*365.25)) - ((int)(M2*30.6001)));
- int K=0;
- if (M2==14 || M2==15)
- K=1;
- int Y =Y2+K;
- int M =M2-1-K*12;
-
- //Formating
- return Ztring::ToZtring(1900+Y)+__T("-")
- + (M<10?__T("0"):__T(""))+Ztring::ToZtring( M)+__T("-")
- + (D<10?__T("0"):__T(""))+Ztring::ToZtring( D);
-}
-
-//---------------------------------------------------------------------------
-//Form: HHMMSS, BCD
-Ztring File_Mpeg_Descriptors::Time_BCD(int32u Time)
-{
- return (((Time>>16)&0xFF)<10?__T("0"):__T("")) + Ztring::ToZtring((Time>>16)&0xFF, 16)+__T(":") //BCD
- + (((Time>> 8)&0xFF)<10?__T("0"):__T("")) + Ztring::ToZtring((Time>> 8)&0xFF, 16)+__T(":") //BCD
- + (((Time )&0xFF)<10?__T("0"):__T("")) + Ztring::ToZtring((Time )&0xFF, 16); //BCD
-}
-
-//---------------------------------------------------------------------------
-//Form: HHMM, BCD
-Ztring File_Mpeg_Descriptors::TimeHHMM_BCD(int16u Time)
-{
- return (((Time>> 8)&0xFF)<10?__T("0"):__T("")) + Ztring::ToZtring((Time>> 8)&0xFF, 16)+__T(":") //BCD
- + (((Time )&0xFF)<10?__T("0"):__T("")) + Ztring::ToZtring((Time )&0xFF, 16)+__T(":00"); //BCD
-}
-
-//---------------------------------------------------------------------------
-//Form: Frequency in 10 KHz
-Ztring File_Mpeg_Descriptors::Frequency_DVB__BCD(int32u Frequency)
-{
- int64u ToReturn=((((int64u)Frequency)>>28)&0xF)*10000000
- + ((((int64u)Frequency)>>24)&0xF)* 1000000
- + ((((int64u)Frequency)>>20)&0xF)* 100000
- + ((((int64u)Frequency)>>16)&0xF)* 10000
- + ((((int64u)Frequency)>>12)&0xF)* 1000
- + ((((int64u)Frequency)>> 8)&0xF)* 100
- + ((((int64u)Frequency)>> 4)&0xF)* 10
- + ((((int64u)Frequency) )&0xF)* 1;
- return Ztring::ToZtring(ToReturn*10000);
-}
-
-//---------------------------------------------------------------------------
-//Form: Orbital Position
-Ztring File_Mpeg_Descriptors::OrbitalPosition_DVB__BCD(int32u OrbitalPosition)
-{
- int64u ToReturn=((OrbitalPosition>>12)&0xF)* 1000
- + ((OrbitalPosition>> 8)&0xF)* 100
- + ((OrbitalPosition>> 4)&0xF)* 10
- + ((OrbitalPosition )&0xF) ;
- return Ztring::ToZtring(((float)ToReturn)/10, 1);
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEGTS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.h
deleted file mode 100644
index 5e0195a17..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.h
+++ /dev/null
@@ -1,858 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG files, Descriptors
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Mpeg_DescriptorsH
-#define MediaInfo_Mpeg_DescriptorsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mpeg4_Descriptors.h"
-#include "MediaInfo/Duplicate/File__Duplicate_MpegTs.h"
-#if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- #include "MediaInfo/File__Analyze.h"
-#endif
-#include <cfloat>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Global object
-//***************************************************************************
-
-struct complete_stream
-{
- //Global
- int16u transport_stream_id; //The processed transport_stream_id
- bool transport_stream_id_IsValid; //The processed transport_stream_id
- Ztring original_network_name;
- Ztring network_name;
- Ztring Duration_Start;
- Ztring Duration_End;
- bool Duration_End_IsUpdated;
- std::map<Ztring, Ztring> TimeZones; //Key is country code
-
- //Per transport_stream
- struct transport_stream
- {
- bool HasChanged;
- std::map<std::string, Ztring> Infos;
- struct program
- {
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- File__Analyze::servicedescriptors* ServiceDescriptors;
- #endif
- bool HasChanged;
- std::map<std::string, Ztring> Infos;
- std::map<std::string, Ztring> ExtraInfos_Content;
- std::map<std::string, Ztring> ExtraInfos_Option;
- std::map<Ztring, Ztring> EPGs;
- std::vector<int16u> elementary_PIDs;
- size_t StreamPos; //Stream_Menu
- int32u registration_format_identifier;
- int16u pid;
- int16u PCR_PID;
- int16u source_id; //ATSC
- bool source_id_IsValid;
- bool IsParsed;
- bool IsRegistered;
- bool HasNotDisplayableStreams; //e.g. unknown stream, KLV, SCTE 35
- bool Update_Needed_IsRegistered;
- bool Update_Needed_StreamCount;
- bool Update_Needed_StreamPos;
- bool Update_Needed_Info;
-
- //DVB
- struct dvb_epg_block
- {
- struct event
- {
- Ztring start_time;
- Ztring duration;
- struct short_event_
- {
- Ztring event_name;
- Ztring text;
- };
- short_event_ short_event;
- Ztring content;
- Ztring running_status;
- };
-
- typedef std::map<int16u, event> events; //Key is event_id
- events Events; //Key is event_id
- };
- typedef std::map<int8u, dvb_epg_block> dvb_epg_blocks; //Key is table_id
- dvb_epg_blocks DVB_EPG_Blocks; //Key is table_id
- bool DVB_EPG_Blocks_IsUpdated;
-
- //SCTE 35
- struct scte35
- {
- struct segmentation
- {
- struct segment
- {
- int8u Status; //If it is currently in the program: 0=Running, 1=Ended, 2=Early termination
-
- segment()
- {
- Status=(int8u)-1;
- }
- };
-
- typedef std::map<int8u, segment> segments; //Key is segmentation_type_id
- segments Segments;
- ;
- };
-
- typedef std::map<int32u, segmentation> segmentations; //Key is segmentation_event_id
- segmentations Segmentations;
- int16u pid;
-
- scte35()
- {
- pid=(int16u)-1;
- }
- };
- scte35* Scte35;
-
- //Constructor/Destructor
- program()
- :
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- ServiceDescriptors(NULL),
- #endif
- HasChanged(false),
- StreamPos((size_t)-1),
- registration_format_identifier(0x00000000),
- pid(0x00000),
- PCR_PID(0x0000),
- source_id((int16u)-1),
- source_id_IsValid(false),
- IsParsed(false),
- IsRegistered(false),
- HasNotDisplayableStreams(false),
- Update_Needed_IsRegistered(false),
- Update_Needed_StreamCount(false),
- Update_Needed_StreamPos(false),
- Update_Needed_Info(false),
- DVB_EPG_Blocks_IsUpdated(false),
- Scte35(NULL)
- {}
-
- program(const program& p)
- :
- HasChanged(p.HasChanged),
- Infos(p.Infos),
- ExtraInfos_Content(p.ExtraInfos_Content),
- ExtraInfos_Option(p.ExtraInfos_Option),
- EPGs(p.EPGs),
- elementary_PIDs(p.elementary_PIDs),
- StreamPos(p.StreamPos),
- registration_format_identifier(p.registration_format_identifier),
- pid(p.pid),
- PCR_PID(p.PCR_PID),
- source_id(p.source_id),
- source_id_IsValid(p.source_id_IsValid),
- IsParsed(p.IsParsed),
- IsRegistered(p.IsRegistered),
- HasNotDisplayableStreams(p.HasNotDisplayableStreams),
- Update_Needed_IsRegistered(p.Update_Needed_IsRegistered),
- Update_Needed_StreamCount(p.Update_Needed_StreamCount),
- Update_Needed_StreamPos(p.Update_Needed_StreamPos),
- Update_Needed_Info(p.Update_Needed_Info),
- DVB_EPG_Blocks_IsUpdated(p.DVB_EPG_Blocks_IsUpdated),
- Scte35(p.Scte35)
- {
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- if (p.ServiceDescriptors)
- {
- ServiceDescriptors=new File__Analyze::servicedescriptors;
- *ServiceDescriptors=*p.ServiceDescriptors;
- }
- else
- ServiceDescriptors=NULL;
- #endif
- }
-
- program& operator=(const program& p)
- {
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- if (p.ServiceDescriptors)
- {
- ServiceDescriptors=new File__Analyze::servicedescriptors;
- *ServiceDescriptors=*p.ServiceDescriptors;
- }
- else
- ServiceDescriptors=NULL;
- #endif
- HasChanged=p.HasChanged;
- Infos=p.Infos;
- ExtraInfos_Content=p.ExtraInfos_Content;
- ExtraInfos_Option=p.ExtraInfos_Option;
- EPGs=p.EPGs;
- elementary_PIDs=p.elementary_PIDs;
- StreamPos=p.StreamPos;
- registration_format_identifier=p.registration_format_identifier;
- pid=p.pid;
- PCR_PID=p.PCR_PID;
- source_id=p.source_id;
- source_id_IsValid=p.source_id_IsValid;
- IsParsed=p.IsParsed;
- IsRegistered=p.IsRegistered;
- HasNotDisplayableStreams=p.HasNotDisplayableStreams;
- Update_Needed_IsRegistered=p.Update_Needed_IsRegistered;
- Update_Needed_StreamCount=p.Update_Needed_StreamCount;
- Update_Needed_StreamPos=p.Update_Needed_StreamPos;
- Update_Needed_Info=p.Update_Needed_Info;
- DVB_EPG_Blocks_IsUpdated=p.DVB_EPG_Blocks_IsUpdated;
- Scte35=p.Scte35;
-
- return *this;
- }
-
- ~program()
- {
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- delete ServiceDescriptors;
- #endif
- }
- };
- typedef std::map<int16u, program> programs; //Key is program_number
- programs Programs; //Key is program_number
- std::vector<int16u> programs_List;
- size_t Programs_NotParsedCount;
-
- //Per IOD
- struct iod_es
- {
- File__Analyze* Parser;
- #ifdef MEDIAINFO_MPEG4_YES
- File_Mpeg4_Descriptors::slconfig* SLConfig;
- #endif
-
- //Constructor/Destructor
- iod_es()
- {
- Parser=NULL;
- #ifdef MEDIAINFO_MPEG4_YES
- SLConfig=NULL;
- #endif
- }
-
- ~iod_es()
- {
- delete Parser; //Parser=NULL;
- #ifdef MEDIAINFO_MPEG4_YES
- delete SLConfig; //SLConfig=NULL;
- #endif
- }
- };
- typedef std::map<int16u, iod_es> iod_ess; //Key is ES_ID
- std::map<int16u, iod_es> IOD_ESs; //Key is ES_ID
-
- //ATSC
- int16u source_id; //Global
- int16u source_id_IsValid;
-
- transport_stream()
- {
- HasChanged=false;
- source_id=(int16u)-1;
- source_id_IsValid=false;
- Programs_NotParsedCount=(size_t)-1;
- }
- };
- typedef std::map<int16u, transport_stream> transport_streams; //Key is transport_stream_id
- transport_streams Transport_Streams; //Key is transport_stream_id
-
- //Per pid
- struct stream
- {
- File__Analyze* Parser;
-
- enum ts_kind
- {
- //MPEG
- unknown,
- pes,
- psi,
- ts_kind_Max,
- };
- std::vector<int16u> program_numbers;
- struct table_id
- {
- struct table_id_extension
- {
- typedef std::vector<bool> section_numbers; //Key is section_number
- section_numbers Section_Numbers; //Key is section_number
- int8u version_number;
- };
- typedef std::map<int16u, table_id_extension> table_id_extensions; //Key is table_id_extensions
- table_id_extensions Table_ID_Extensions; //Key is table_id_extensions
- bool Table_ID_Extensions_CanAdd;
-
- table_id()
- {
- Table_ID_Extensions_CanAdd=true;
- }
- };
- typedef std::vector<table_id*> table_ids;
- table_ids Table_IDs; //Key is table_id
- std::map<std::string, Ztring> Infos;
- std::map<std::string, Ztring> Infos_Option;
- struct teletext
- {
- std::map<std::string, Ztring> Infos;
- };
- std::map<int16u, teletext> Teletexts; //Key is teletext_magazine_number
- #if MEDIAINFO_TRACE
- Ztring Element_Info1;
- #endif //MEDIAINFO_TRACE
- stream_t StreamKind;
- stream_t StreamKind_FromDescriptor;
- size_t StreamPos;
- ts_kind Kind;
- bool IsParsed;
- bool IsPCR;
- float64 IsPCR_Duration;
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- int64u TimeStamp_Start;
- int64u TimeStamp_Start_Offset;
- int64u TimeStamp_End;
- int64u TimeStamp_End_Offset;
- int16u PCR_PID; //If this pid has no PCR, decide which PCR should be used
- bool TimeStamp_End_IsUpdated;
- float64 TimeStamp_InstantaneousBitRate_Current_Min;
- float64 TimeStamp_InstantaneousBitRate_Current_Raw;
- float64 TimeStamp_InstantaneousBitRate_Current_Max;
- int64u TimeStamp_InstantaneousBitRate_BitRateMode_IsCbr;
- int64u TimeStamp_InstantaneousBitRate_BitRateMode_IsVbr;
- #if MEDIAINFO_ADVANCED
- float64 TimeStamp_InstantaneousBitRate_Min_Raw;
- float64 TimeStamp_InstantaneousBitRate_Max_Raw;
- int64u TimeStamp_Distance_Min;
- int64u TimeStamp_Distance_Max;
- int64u TimeStamp_Distance_Total;
- int64u TimeStamp_Distance_Count;
- int64u TimeStamp_HasProblems;
- std::vector<int64u> TimeStamp_Intermediate;
- #endif // MEDIAINFO_ADVANCED
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- int32u registration_format_identifier;
- int16u FMC_ES_ID;
- int16u table_type; //ATSC
- int8u stream_type;
- int8u descriptor_tag;
- int8u DtsNeural_config_id;
- bool FMC_ES_ID_IsValid;
- bool Searching;
- bool Searching_Payload_Start;
- bool Searching_Payload_Continue;
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- bool Searching_TimeStamp_Start;
- bool Searching_TimeStamp_End;
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- bool Searching_ParserTimeStamp_Start;
- bool Searching_ParserTimeStamp_End;
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- bool EndTimeStampMoreThanxSeconds;
- bool ShouldDuplicate;
- bool IsRegistered;
- bool IsUpdated_IsRegistered;
- bool IsUpdated_Info;
- bool CA_system_ID_MustSkipSlices;
- bool EBP_IsPresent;
- size_t IsScrambled;
- int16u CA_system_ID;
- int16u SubStream_pid;
- #if MEDIAINFO_IBI
- int64u Ibi_SynchronizationOffset_BeginOfFrame;
- #endif //MEDIAINFO_IBI
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- File__Analyze::servicedescriptors ServiceDescriptors;
- bool ServiceDescriptors_IsPresent;
- #endif
-
- //Constructor/Destructor
- stream()
- {
- Parser=NULL;
- StreamKind=Stream_Max;
- StreamKind_FromDescriptor=Stream_Max;
- StreamPos=(size_t)-1;
- Kind=unknown;
- IsParsed=false;
- IsPCR=false;
- IsPCR_Duration=0;
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- TimeStamp_Start=(int64u)-1;
- TimeStamp_Start_Offset=(int64u)-1;
- TimeStamp_End=(int64u)-1;
- TimeStamp_End_Offset=(int64u)-1;
- PCR_PID=0x0000;
- TimeStamp_End_IsUpdated=false;
- TimeStamp_InstantaneousBitRate_Current_Min=0;
- TimeStamp_InstantaneousBitRate_Current_Raw=0;
- TimeStamp_InstantaneousBitRate_Current_Max=0;
- TimeStamp_InstantaneousBitRate_BitRateMode_IsCbr=0;
- TimeStamp_InstantaneousBitRate_BitRateMode_IsVbr=0;
- #if MEDIAINFO_ADVANCED
- TimeStamp_InstantaneousBitRate_Min_Raw=DBL_MAX;
- TimeStamp_InstantaneousBitRate_Max_Raw=0;
- TimeStamp_Distance_Min=(int64u)-1;
- TimeStamp_Distance_Max=0;
- TimeStamp_Distance_Total=0;
- TimeStamp_Distance_Count=0;
- TimeStamp_HasProblems=0;
- #endif // MEDIAINFO_ADVANCED
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- registration_format_identifier=0x00000000;
- FMC_ES_ID=0x0000;
- table_type=0x0000;
- stream_type=(int8u)-1;
- descriptor_tag=(int8u)-1;
- DtsNeural_config_id=(int8u)-1;
- FMC_ES_ID_IsValid=false;
- Searching=false;
- Searching_Payload_Start=false;
- Searching_Payload_Continue=false;
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- Searching_TimeStamp_Start=false;
- Searching_TimeStamp_End=false;
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- Searching_ParserTimeStamp_Start=false;
- Searching_ParserTimeStamp_End=false;
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- EndTimeStampMoreThanxSeconds=false;
- ShouldDuplicate=false;
- IsRegistered=false;
- IsUpdated_IsRegistered=false;
- IsUpdated_Info=false;
- IsScrambled=false;
- CA_system_ID_MustSkipSlices=false;
- CA_system_ID=0x0000;
- EBP_IsPresent=false;
- SubStream_pid=0x0000;
- #if MEDIAINFO_IBI
- Ibi_SynchronizationOffset_BeginOfFrame=(int64u)-1;
- #endif //MEDIAINFO_IBI
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- ServiceDescriptors_IsPresent=false;
- #endif
- }
-
- ~stream()
- {
- delete Parser; //Parser=NULL;
- for (size_t Pos=0; Pos<Table_IDs.size(); Pos++)
- delete Table_IDs[Pos]; //Table_IDs[Pos]=NULL;
- }
-
- //Helpers
- void Searching_Payload_Start_Set(bool ToSet)
- {
- Searching_Payload_Start=ToSet;
- Searching_Test();
- }
- void Searching_Payload_Continue_Set(bool ToSet)
- {
- Searching_Payload_Continue=ToSet;
- Searching_Test();
- }
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- void Searching_TimeStamp_Start_Set(bool ToSet)
- {
- Searching_TimeStamp_Start=ToSet;
- Searching_Test();
- }
- void Searching_TimeStamp_End_Set(bool ToSet)
- {
- Searching_TimeStamp_End=ToSet;
- Searching_Test();
- }
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- void Searching_ParserTimeStamp_Start_Set(bool ToSet)
- {
- Searching_ParserTimeStamp_Start=ToSet;
- Searching_Test();
- }
- void Searching_ParserTimeStamp_End_Set(bool ToSet)
- {
- Searching_ParserTimeStamp_End=ToSet;
- Searching_Test();
- }
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- void Searching_Test()
- {
- Searching=Searching_Payload_Start
- | Searching_Payload_Continue
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- | Searching_TimeStamp_Start
- | Searching_TimeStamp_End
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- | Searching_ParserTimeStamp_Start
- | Searching_ParserTimeStamp_End
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- ;
- }
- };
- typedef std::vector<stream*> streams;
- streams Streams; //Key is pid
- size_t Streams_NotParsedCount;
- size_t Streams_With_StartTimeStampCount;
- size_t Streams_With_EndTimeStampMoreThanxSecondsCount;
-
- //ATSC
- int8u GPS_UTC_offset;
- struct source
- {
- std::map<int16u, Ztring> texts;
- struct atsc_epg_block
- {
- struct event
- {
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- File__Analyze::servicedescriptors* ServiceDescriptors;
- #endif
- int32u start_time;
- Ztring duration;
- Ztring title;
- std::map<int16u, Ztring> texts;
-
- event()
- :
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- ServiceDescriptors(NULL),
- #endif
- start_time((int32u)-1)
- {}
-
- event(const event& e)
- :
- start_time(e.start_time)
- {
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- if (e.ServiceDescriptors)
- {
- ServiceDescriptors=new File__Analyze::servicedescriptors;
- *ServiceDescriptors=*e.ServiceDescriptors;
- }
- else
- ServiceDescriptors=NULL;
- #endif
- }
-
- event& operator=(const event& e)
- {
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- if (e.ServiceDescriptors)
- {
- ServiceDescriptors=new File__Analyze::servicedescriptors;
- *ServiceDescriptors=*e.ServiceDescriptors;
- }
- else
- ServiceDescriptors=NULL;
- #endif
- start_time=e.start_time;
-
- return *this;
- }
-
- ~event()
- {
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- delete ServiceDescriptors;
- #endif
- }
- };
-
- typedef std::map<int16u, event> events; //Key is event_id
- events Events; //Key is event_id
- };
- typedef std::map<int16u, atsc_epg_block> atsc_epg_blocks; //Key is table_id
- atsc_epg_blocks ATSC_EPG_Blocks; //Key is table_id
- bool ATSC_EPG_Blocks_IsUpdated;
-
- source()
- {
- ATSC_EPG_Blocks_IsUpdated=false;
- }
- };
- typedef std::map<int16u, source> sources; //Key is source_id
- sources Sources; //Key is source_id
- bool Sources_IsUpdated; //For EPG ATSC
- bool Programs_IsUpdated; //For EPG DVB
- bool NoPatPmt;
-
- //File__Duplicate
- bool File__Duplicate_HasChanged_;
- size_t Config_File_Duplicate_Get_AlwaysNeeded_Count;
- std::vector<File__Duplicate_MpegTs*> Duplicates_Speed;
- std::vector<std::vector<File__Duplicate_MpegTs*> > Duplicates_Speed_FromPID;
- std::map<const String, File__Duplicate_MpegTs*> Duplicates;
- bool File__Duplicate_Get_From_PID (int16u pid)
- {
- if (Duplicates_Speed_FromPID.empty())
- return false;
- return !Duplicates_Speed_FromPID[pid].empty();
- }
-
- //SpeedUp information
- std::vector<std::vector<size_t> > StreamPos_ToRemove;
- std::map<int16u, int16u> PCR_PIDs; //Key is PCR_PID, value is count of programs using it
- std::set<int16u> PES_PIDs; //Key is pid
- std::vector<int16u> program_number_Order;
-
- //Constructor/Destructor
- complete_stream()
- {
- transport_stream_id=(int16u)-1;
- transport_stream_id_IsValid=false;
- Duration_End_IsUpdated=false;
- Streams_NotParsedCount=(size_t)-1;
- Streams_With_StartTimeStampCount=0;
- Streams_With_EndTimeStampMoreThanxSecondsCount=0;
- GPS_UTC_offset=0;
- Sources_IsUpdated=false;
- Programs_IsUpdated=false;
- NoPatPmt=false;
- StreamPos_ToRemove.resize(Stream_Max);
- File__Duplicate_HasChanged_ = false;
- Config_File_Duplicate_Get_AlwaysNeeded_Count = 0;
- }
-
- ~complete_stream()
- {
- for (size_t StreamID=0; StreamID<Streams.size(); StreamID++)
- delete Streams[StreamID]; //Streams[StreamID]=NULL;
-
- std::map<const String, File__Duplicate_MpegTs*>::iterator Duplicates_Temp=Duplicates.begin();
- while (Duplicates_Temp!=Duplicates.end())
- {
- delete Duplicates_Temp->second; //Duplicates_Temp->second=NULL
- ++Duplicates_Temp;
- }
- }
-};
-
-//***************************************************************************
-// Class File_Mpeg_Descriptors
-//***************************************************************************
-
-class File_Mpeg_Descriptors : public File__Analyze
-{
-public :
- //In
- complete_stream* Complete_Stream;
- int16u transport_stream_id;
- int16u pid;
- int8u table_id;
- int16u table_id_extension;
- int16u elementary_PID;
- int16u program_number;
- int32u registration_format_identifier;
- int8u stream_type;
- int16u event_id;
- bool elementary_PID_IsValid;
- bool program_number_IsValid;
- bool registration_format_identifier_IsValid;
- bool stream_type_IsValid;
- bool event_id_IsValid;
-
- //Out
-
- //Constructor/Destructor
- File_Mpeg_Descriptors();
-
-private :
- //Buffer - File header
- void FileHeader_Parse();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Descriptors();
- void Descriptor();
- void Descriptor_00() {Skip_XX(Element_Size, "Data");};
- void Descriptor_01() {Skip_XX(Element_Size, "Data");};
- void Descriptor_02();
- void Descriptor_03();
- void Descriptor_04() {Skip_XX(Element_Size, "Data");};
- void Descriptor_05();
- void Descriptor_06();
- void Descriptor_07();
- void Descriptor_08();
- void Descriptor_09();
- void Descriptor_0A();
- void Descriptor_0B();
- void Descriptor_0C() {Skip_XX(Element_Size, "Data");};
- void Descriptor_0D();
- void Descriptor_0E();
- void Descriptor_0F();
- void Descriptor_10();
- void Descriptor_11();
- void Descriptor_12() {Skip_XX(Element_Size, "Data");};
- void Descriptor_13() {Skip_XX(Element_Size, "Data");};
- void Descriptor_14() {Skip_XX(Element_Size, "Data");};
- void Descriptor_15() {Skip_XX(Element_Size, "Data");};
- void Descriptor_16() {Skip_XX(Element_Size, "Data");};
- void Descriptor_17() {Skip_XX(Element_Size, "Data");};
- void Descriptor_18() {Skip_XX(Element_Size, "Data");};
- void Descriptor_19() {Skip_XX(Element_Size, "Data");};
- void Descriptor_1A() {Skip_XX(Element_Size, "Data");};
- void Descriptor_1B() {Skip_XX(Element_Size, "Data");};
- void Descriptor_1C();
- void Descriptor_1D();
- void Descriptor_1E() {Skip_XX(Element_Size, "Data");};
- void Descriptor_1F();
- void Descriptor_20() {Skip_XX(Element_Size, "Data");};
- void Descriptor_21() {Skip_XX(Element_Size, "Data");};
- void Descriptor_22() {Skip_XX(Element_Size, "Data");};
- void Descriptor_23() {Skip_XX(Element_Size, "Data");};
- void Descriptor_24() {Skip_XX(Element_Size, "Data");};
- void Descriptor_25() {Skip_XX(Element_Size, "Data");};
- void Descriptor_26() {Skip_XX(Element_Size, "Data");};
- void Descriptor_27() {Skip_XX(Element_Size, "Data");};
- void Descriptor_28();
- void Descriptor_29() {Skip_XX(Element_Size, "Data");};
- void Descriptor_2A();
- void Descriptor_2B() {Skip_XX(Element_Size, "Data");};
- void Descriptor_2C() {Skip_XX(Element_Size, "Data");};
- void Descriptor_2D() {Skip_XX(Element_Size, "Data");};
- void Descriptor_2E() {Skip_XX(Element_Size, "Data");};
- void Descriptor_2F();
- void Descriptor_30() {Skip_XX(Element_Size, "Data");};
- void Descriptor_31() {Skip_XX(Element_Size, "Data");};
- void Descriptor_32() {Skip_XX(Element_Size, "Data");};
- void Descriptor_33() {Skip_XX(Element_Size, "Data");};
- void Descriptor_34() {Skip_XX(Element_Size, "Data");};
- void Descriptor_35() {Skip_XX(Element_Size, "Data");};
- void Descriptor_36() {Skip_XX(Element_Size, "Data");};
- void Descriptor_37() {Skip_XX(Element_Size, "Data");};
- void Descriptor_38() {Skip_XX(Element_Size, "Data");};
- void Descriptor_39() {Skip_XX(Element_Size, "Data");};
- void Descriptor_3A() {Skip_XX(Element_Size, "Data");};
- void Descriptor_3F() {Skip_XX(Element_Size, "Data");};
- void Descriptor_40();
- void Descriptor_41();
- void Descriptor_42() {Skip_XX(Element_Size, "Data");};
- void Descriptor_43();
- void Descriptor_44() {Skip_XX(Element_Size, "Data");};
- void Descriptor_45() {Skip_XX(Element_Size, "Data");};
- void Descriptor_46() {Skip_XX(Element_Size, "Data");};
- void Descriptor_47() {Skip_XX(Element_Size, "Data");};
- void Descriptor_48();
- void Descriptor_49() {Skip_XX(Element_Size, "Data");};
- void Descriptor_4A();
- void Descriptor_4B() {Skip_XX(Element_Size, "Data");};
- void Descriptor_4C() {Skip_XX(Element_Size, "Data");};
- void Descriptor_4D();
- void Descriptor_4E() {Skip_XX(Element_Size, "Data");};
- void Descriptor_4F() {Skip_XX(Element_Size, "Data");};
- void Descriptor_50();
- void Descriptor_51() {Skip_XX(Element_Size, "Data");};
- void Descriptor_52();
- void Descriptor_53() {Skip_XX(Element_Size, "Data");};
- void Descriptor_54();
- void Descriptor_55();
- void Descriptor_56();
- void Descriptor_57() {Skip_XX(Element_Size, "Data");};
- void Descriptor_58();
- void Descriptor_59();
- void Descriptor_5A();
- void Descriptor_5B() {Skip_XX(Element_Size, "Data");};
- void Descriptor_5C() {Skip_XX(Element_Size, "Data");};
- void Descriptor_5D();
- void Descriptor_5E() {Skip_XX(Element_Size, "Data");};
- void Descriptor_5F();
- void Descriptor_60() {Skip_XX(Element_Size, "Data");};
- void Descriptor_61() {Skip_XX(Element_Size, "Data");};
- void Descriptor_62() {Skip_XX(Element_Size, "Data");};
- void Descriptor_63();
- void Descriptor_64() {Skip_XX(Element_Size, "Data");};
- void Descriptor_65() {Skip_XX(Element_Size, "Data");};
- void Descriptor_66();
- void Descriptor_67() {Skip_XX(Element_Size, "Data");};
- void Descriptor_68() {Skip_XX(Element_Size, "Data");};
- void Descriptor_69() {Skip_XX(Element_Size, "Data");};
- void Descriptor_6A();
- void Descriptor_6B() {Skip_XX(Element_Size, "Data");};
- void Descriptor_6C() {Skip_XX(Element_Size, "Data");};
- void Descriptor_6D() {Skip_XX(Element_Size, "Data");};
- void Descriptor_6E() {Skip_XX(Element_Size, "Data");};
- void Descriptor_6F() {Skip_XX(Element_Size, "Data");};
- void Descriptor_70() {Skip_XX(Element_Size, "Data");};
- void Descriptor_71() {Skip_XX(Element_Size, "Data");};
- void Descriptor_72() {Skip_XX(Element_Size, "Data");};
- void Descriptor_73() {Skip_XX(Element_Size, "Data");};
- void Descriptor_74() {Skip_XX(Element_Size, "Data");};
- void Descriptor_75() {Skip_XX(Element_Size, "Data");};
- void Descriptor_76() {Skip_XX(Element_Size, "Data");};
- void Descriptor_77() {Skip_XX(Element_Size, "Data");};
- void Descriptor_78() {Skip_XX(Element_Size, "Data");};
- void Descriptor_79() {Skip_XX(Element_Size, "Data");};
- void Descriptor_7A();
- void Descriptor_7B();
- void Descriptor_7C();
- void Descriptor_7D() {Skip_XX(Element_Size, "Data");};
- void Descriptor_7E() {Skip_XX(Element_Size, "Data");};
- void Descriptor_7F();
- void Descriptor_7F_0F();
- void Descriptor_80() {Skip_XX(Element_Size, "Data");};
- void Descriptor_81();
- void Descriptor_86();
- void Descriptor_87();
- void Descriptor_A0();
- void Descriptor_A1();
- void Descriptor_A2() {Skip_XX(Element_Size, "Data");};
- void Descriptor_A3();
- void Descriptor_A8() {Skip_XX(Element_Size, "Data");};
- void Descriptor_A9() {Skip_XX(Element_Size, "Data");};
- void Descriptor_AA();
- void Descriptor_AB() {Skip_XX(Element_Size, "Data");};
- void Descriptor_C1();
- void Descriptor_C4() {Skip_XX(Element_Size, "Data");};
- void Descriptor_C8();
- void Descriptor_DE();
- void Descriptor_E9();
- void Descriptor_FC();
- void Descriptor_FD();
-
- //SCTE 35
- void CUEI_00();
- void CUEI_01();
- void CUEI_02();
-
- //Helpers
- void ATSC_multiple_string_structure(Ztring &Value, const char* Info);
- void Get_DVB_Text(int64u Size, Ztring &Value, const char* Info);
- void Skip_DVB_Text(int64u Size, const char* Info) {Ztring Temp; Get_DVB_Text(Size, Temp, Info);};
- Ztring Date_MJD(int16u Date);
- Ztring Time_BCD(int32u Time);
- Ztring TimeHHMM_BCD(int16u Time);
- Ztring Frequency_DVB__BCD(int32u Frequency);
- Ztring OrbitalPosition_DVB__BCD(int32u OrbitalPosition);
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.cpp
deleted file mode 100644
index 795a29332..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.cpp
+++ /dev/null
@@ -1,2625 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGPS_YES) || defined(MEDIAINFO_MPEGTS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mpeg_Psi.h"
-#include "MediaInfo/Multiple/File_Mpeg_Descriptors.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "ZenLib/Dir.h"
-#include <memory>
-#include <algorithm>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-namespace Elements
-{
- const int32u CUEI=0x43554549; //SCTE
- const int32u GA94=0x47413934; //ATSC - Terrestrial
- const int32u HDMV=0x48444D56; //BluRay
- const int32u S14A=0x53313441; //ATSC - Satellite
- const int32u SCTE=0x53435445; //SCTE
- const int32u TSHV=0x54534856; //TSHV
-}
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Psi_ATSC_table_type(int16u ID)
-{
- switch (ID)
- {
- case 0x0000 : return "Terrestrial VCT with current_next_indicator=1";
- case 0x0001 : return "Terrestrial VCT with current_next_indicator=0";
- case 0x0002 : return "Cable VCT with current_next_indicator=1";
- case 0x0003 : return "Cable VCT with current_next_indicator==0";
- case 0x0004 : return "Channel ETT";
- case 0x0005 : return "DCCSCT";
- case 0x0010 : return "Short-form Virtual Channel Table-VCM Subtyp";
- case 0x0011 : return "Short-form Virtual Channel Table-DCM Subtyp";
- case 0x0012 : return "Short-form Virtual Channel Table-ICM Subtyp";
- case 0x0020 : return "Network Information Table-CDS Table Subtype";
- case 0x0021 : return "Network Information Table-MMS Table Subtype";
- case 0x0030 : return "Network Text Tabl e-SNS Subtype";
- default :
- if (ID>=0x0100
- && ID<=0x017F) return "Event Information Table (EIT)";
- if (ID>=0x0200
- && ID<=0x027F) return "Event Extended Text Table (EETT)";
- if (ID>=0x0300
- && ID<=0x03FF) return "Rating Region Table (RRT)";
- if (ID>=0x0400
- && ID<=0x0FFF) return "User private";
- if (ID>=0x1000
- && ID<=0x10FF) return "Aggregate Event Information Table (AEIT)";
- if (ID>=0x1100
- && ID<=0x11FF) return "Aggregate Extended Text Table (AETT)";
- if (ID>=0x1400
- && ID<=0x14FF) return "DCCT";
- return "Reserved";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Psi_stream_type_Format(int8u stream_type, int32u format_identifier)
-{
- switch (stream_type)
- {
- case 0x01 : return "MPEG Video"; //Version 1
- case 0x02 : return "MPEG Video"; //Version 2
- case 0x03 : return "MPEG Audio"; //Version 1
- case 0x04 : return "MPEG Audio"; //Version 2
- case 0x0F : return "AAC";
- case 0x10 : return "MPEG-4 Visual";
- case 0x11 : return "AAC";
- case 0x1B : return "AVC";
- case 0x1C : return "AAC";
- case 0x1D : return "Timed Text";
- case 0x1E : return "MPEG Video"; //ISO/IEC 23002-3
- case 0x1F : return "AVC";
- case 0x20 : return "AVC";
- case 0x24 :
- case 0x27 : return "HEVC";
- default :
- switch (format_identifier)
- {
- case Elements::CUEI :
- case Elements::SCTE : //SCTE
- case Elements::GA94 :
- case Elements::S14A : //ATSC
- switch (stream_type)
- {
- case 0x80 : return "MPEG Video";
- case 0x81 : return "AC-3";
- case 0x82 : return "Text";
- case 0x86 : return "SCTE 35";
- case 0x87 : return "E-AC-3";
- default : return "";
- }
- case Elements::HDMV : //Bluray
- switch (stream_type)
- {
- case 0x80 : return "PCM";
- case 0x81 : return "AC-3";
- case 0x82 : return "DTS";
- case 0x83 : return "AC-3"; // (TrueHD)"
- case 0x84 : return "E-AC-3";
- case 0x85 : return "DTS"; //" (HD-HRA)"
- case 0x86 : return "DTS"; //" (HD-MA)"
- case 0x90 : return "PGS";
- case 0xA1 : return "AC-3";
- case 0xA2 : return "DTS";
- case 0xEA : return "VC-1";
- default : return "";
- }
- case 0xFFFFFFFF : //Unknown
- return "";
- default :
- switch (stream_type)
- {
- case 0x80 : return "MPEG Video";
- case 0x81 : return "AC-3";
- case 0x87 : return "E-AC-3";
- case 0x88 : return "VC-1";
- case 0xD1 : return "Dirac";
- default : return "";
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Psi_stream_type_Codec(int8u stream_type, int32u format_identifier)
-{
- switch (stream_type)
- {
- case 0x01 : return "MPEG-1V";
- case 0x02 : return "MPEG-2V";
- case 0x03 : return "MPEG-1A";
- case 0x04 : return "MPEG-2A";
- case 0x0F : return "AAC";
- case 0x10 : return "MPEG-4V";
- case 0x11 : return "AAC";
- case 0x1B : return "AVC";
- case 0x1C : return "AAC";
- case 0x1D : return "Text";
- case 0x1E : return "MPEG-2V";
- case 0x1F : return "AVC";
- case 0x20 : return "AVC";
- case 0x24 :
- case 0x27 : return "HEVC";
- default :
- switch (format_identifier)
- {
- case Elements::CUEI :
- case Elements::SCTE : //SCTE
- case Elements::GA94 :
- case Elements::S14A : //ATSC
- switch (stream_type)
- {
- case 0x80 : return "MPEG-2V";
- case 0x81 : return "AC3";
- case 0x82 : return "Text";
- case 0x87 : return "AC3+";
- default : return "";
- }
- case Elements::HDMV : //Bluray
- switch (stream_type)
- {
- case 0x80 : return "PCM";
- case 0x81 : return "AC3";
- case 0x82 : return "DTS";
- case 0x83 : return "AC3+";
- case 0x86 : return "DTS";
- case 0x90 : return "PGS";
- case 0xEA : return "VC1";
- default : return "";
- }
- case 0xFFFFFFFF : //Unknown
- return "";
- default :
- switch (stream_type)
- {
- case 0x80 : return "MPEG-2V";
- case 0x81 : return "AC3";
- case 0x87 : return "AC3+";
- case 0x88 : return "VC-1";
- case 0xD1 : return "Dirac";
- default : return "";
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-stream_t Mpeg_Psi_stream_type_StreamKind(int32u stream_type, int32u format_identifier)
-{
- switch (stream_type)
- {
- case 0x01 :
- case 0x02 :
- case 0x10 :
- case 0x1B :
- case 0x1E :
- case 0x1F :
- case 0x20 :
- case 0x24 :
- case 0x27 :
- return Stream_Video;
- case 0x03 :
- case 0x04 :
- case 0x0F :
- case 0x11 :
- case 0x1C :
- return Stream_Audio;
- case 0x1D :
- return Stream_Text;
- default :
- switch (format_identifier)
- {
- case Elements::CUEI :
- case Elements::SCTE : //SCTE
- case Elements::GA94 :
- case Elements::S14A : //ATSC
- switch (stream_type)
- {
- case 0x80 : return Stream_Video;
- case 0x81 : return Stream_Audio;
- case 0x82 : return Stream_Text;
- case 0x87 : return Stream_Audio;
- default : return Stream_Max;
- }
- case Elements::HDMV : //Bluray
- switch (stream_type)
- {
- case 0x80 : return Stream_Audio;
- case 0x81 : return Stream_Audio;
- case 0x82 : return Stream_Audio;
- case 0x83 : return Stream_Audio;
- case 0x84 : return Stream_Audio;
- case 0x85 : return Stream_Audio;
- case 0x86 : return Stream_Audio;
- case 0x90 : return Stream_Text;
- case 0xA1 : return Stream_Audio;
- case 0xA2 : return Stream_Audio;
- case 0xEA : return Stream_Video;
- default : return Stream_Max;
- }
- case Elements::TSHV : //DV
- switch (stream_type)
- {
- case 0xA0 : return Stream_General;
- case 0xA1 : return Stream_General;
- default : return Stream_Max;
- }
- case 0xFFFFFFFF : //Unknown
- return Stream_Max;
- default :
- switch (stream_type)
- {
- case 0x80 : return Stream_Video;
- case 0x81 : return Stream_Audio;
- case 0x87 : return Stream_Audio;
- case 0x88 : return Stream_Video;
- case 0xD1 : return Stream_Video;
- default : return Stream_Max;
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Psi_stream_type_Info(int8u stream_type, int32u format_identifier)
-{
- switch (stream_type)
- {
- case 0x00 : return "ITU-T | ISO/IEC Reserved";
- case 0x01 : return "ISO/IEC 11172 Video";
- case 0x02 : return "ITU-T Rec. H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream";
- case 0x03 : return "ISO/IEC 11172 Audio";
- case 0x04 : return "ISO/IEC 13818-3 Audio";
- case 0x05 : return "ITU-T Rec. H.222.0 | ISO/IEC 13818-1 private_sections";
- case 0x06 : return "ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data";
- case 0x07 : return "ISO/IEC 13522 MHEG";
- case 0x08 : return "ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Annex A DSM-CC";
- case 0x09 : return "ITU-T Rec. H.222.1";
- case 0x0A : return "ISO/IEC 13818-6 type A";
- case 0x0B : return "ISO/IEC 13818-6 type B";
- case 0x0C : return "ISO/IEC 13818-6 type C";
- case 0x0D : return "ISO/IEC 13818-6 type D";
- case 0x0E : return "ITU-T Rec. H.222.0 | ISO/IEC 13818-1 auxiliary";
- case 0x0F : return "ISO/IEC 13818-7 Audio with ADTS transport syntax";
- case 0x10 : return "ISO/IEC 14496-2 Visual";
- case 0x11 : return "ISO/IEC 14496-3 Audio with the LATM transport syntax as defined in ISO/IEC 14496-3 / AMD 1";
- case 0x12 : return "ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in PES packets";
- case 0x13 : return "ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in ISO/IEC14496_sections.";
- case 0x14 : return "ISO/IEC 13818-6 Synchronized Download Protocol";
- case 0x15 : return "Metadata carried in PES packets";
- case 0x16 : return "Metadata carried in metadata_sections";
- case 0x17 : return "Metadata carried in ISO/IEC 13818-6 Data Carousel";
- case 0x18 : return "Metadata carried in ISO/IEC 13818-6 Object Carousel";
- case 0x19 : return "Metadata carried in ISO/IEC 13818-6 Synchronized Download Protocol";
- case 0x1A : return "IPMP stream (defined in ISO/IEC 13818-11, MPEG-2 IPMP)";
- case 0x1B : return "AVC video stream as defined in ITU-T Rec. H.264 | ISO/IEC 14496-10 Video";
- case 0x1C : return "ISO/IEC 14496-3 Audio, without using any additional transport syntax";
- case 0x1D : return "ISO/IEC 14496-17 Text";
- case 0x1E : return "Auxiliary video data stream as defined in ISO/IEC 23002-3";
- case 0x1F : return "SVC video sub-bitstream of an AVC video stream conforming to one or more profiles defined in Annex G of ITU-T Rec. H.264 | ISO/IEC 14496-10";
- case 0x20 : return "MVC video sub-bitstream of an AVC video stream conforming to one or more profiles defined in Annex H of ITU-T Rec. H.264 | ISO/IEC 14496-10";
- case 0x24 :
- case 0x27 : return "ITU-T Rec. H.265 | ISO/IEC 23008-2 MPEG-H Part 2 / HEVC video stream";
- case 0x7F : return "IPMP stream";
- default :
- if (stream_type<=0x7F) return "ITU-T Rec. H.222.0 | ISO/IEC 13818-1 reserved";
- switch (format_identifier)
- {
- case Elements::CUEI :
- case Elements::GA94 :
- case Elements::S14A : //ATSC
- case Elements::SCTE : //SCTE
- switch (stream_type)
- {
- case 0x80 : return "SCTE - MPEG Video";
- case 0x81 : return "ATSC - AC-3";
- case 0x82 : return "SCTE - Standard Subtitle";
- case 0x83 : return "SCTE - Isochronous Data";
- case 0x84 : return "ATSC - Reserved";
- case 0x85 : return "ATSC - Program Identifier";
- case 0x86 : return "SCTE - Splice";
- case 0x87 : return "ATSC - E-AC-3";
- case 0x90 : return "DVB - stream_type value for Time Slicing / MPE-FEC";
- case 0x95 : return "ATSC - Data Service Table, Network Resources Table";
- default : return "ATSC/SCTE - Unknown";
- }
- case Elements::HDMV : //Bluray
- switch (stream_type)
- {
- case 0x80 : return "BluRay - PCM";
- case 0x81 : return "BluRay - AC-3";
- case 0x82 : return "BluRay - DTS";
- case 0x83 : return "BluRay - AC-3 (TrueHD)";
- case 0x84 : return "BluRay - E-AC-3";
- case 0x85 : return "BluRay - DTS (HD-HRA)";
- case 0x86 : return "BluRay - DTS (HD-MA)";
- case 0x90 : return "BluRay - PGS";
- case 0xA1 : return "BluRay - AC-3";
- case 0xA2 : return "BluRay - DTS";
- case 0xEA : return "BluRay - VC-1";
- default : return "Bluray - Unknown";
- }
- case Elements::TSHV : //DV
- switch (stream_type)
- {
- case 0xA0 : return "DV - Data 0";
- case 0xA1 : return "DV - Data 1";
- default : return "Bluray - Unknown";
- }
- case 0xFFFFFFFF : //Unknown
- return "";
- default :
- switch (stream_type)
- {
- case 0x80 : return "DigiCipher II video";
- case 0x81 : return "AC-3";
- case 0x88 : return "VC-1";
- case 0x87 : return "E-AC-3";
- case 0xD1 : return "Dirac";
- default : return "User Private";
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Psi_table_id(int8u table_id)
-{
- switch (table_id)
- {
- case 0x00 : return "program_association_section";
- case 0x01 : return "conditional_access_section";
- case 0x02 : return "TS_program_map_section";
- case 0x03 : return "TS_description_section";
- case 0x04 : return "ISO_IEC_14496_scene_description_section";
- case 0x05 : return "ISO_IEC_14496_object_descriptor_section";
- case 0x06 : return "Metadata?";
- case 0x38 : return "ISO/IEC 13818-6 reserved";
- case 0x39 : return "DSM-CC addressable section";
- case 0x3A : return "DSM-CC : return MPE";
- case 0x3B : return "DSM-CC : return U-N messages : return except DDM";
- case 0x3C : return "DSM-CC : return DDM";
- case 0x3D : return "DSM-CC : return stream descriptors";
- case 0x3E : return "DSM-CC : return private data : return IP-Datagram";
- case 0x3F : return "DSM-CC addressable section";
- case 0x40 : return "DVB - network_information_section - actual_network";
- case 0x41 : return "DVB - network_information_section - other_network";
- case 0x42 : return "DVB - service_description_section - actual_transport_stream";
- case 0x46 : return "DVB - service_description_section - other_transport_stream";
- case 0x4A : return "DVB - bouquet_association_section";
- case 0x4E : return "DVB - event_information_section - actual_transport_stream : return present/following";
- case 0x4F : return "DVB - event_information_section - other_transport_stream : return present/following";
- case 0x50 :
- case 0x51 :
- case 0x52 :
- case 0x53 :
- case 0x54 :
- case 0x55 :
- case 0x56 :
- case 0x57 :
- case 0x58 :
- case 0x59 :
- case 0x5A :
- case 0x5B :
- case 0x5C :
- case 0x5E :
- case 0x5F : return "DVB - event_information_section - actual_transport_stream : return schedule";
- case 0x60 :
- case 0x61 :
- case 0x62 :
- case 0x63 :
- case 0x64 :
- case 0x65 :
- case 0x66 :
- case 0x67 :
- case 0x68 :
- case 0x69 :
- case 0x6A :
- case 0x6B :
- case 0x6C :
- case 0x6D :
- case 0x6E :
- case 0x6F : return "DVB - event_information_section - other_transport_stream : return schedule";
- case 0x70 : return "DVB - time_date_section";
- case 0x71 : return "DVB - running_status_section";
- case 0x72 : return "DVB - stuffing_section";
- case 0x73 : return "DVB - time_offset_section";
- case 0x74 : return "DVB - application information section";
- case 0x75 : return "DVB - container section";
- case 0x76 : return "DVB - related content section";
- case 0x77 : return "DVB - content identifier section";
- case 0x78 : return "DVB - MPE-FEC section";
- case 0x79 : return "DVB - resolution notification section";
- case 0x7E : return "DVB - discontinuity_information_section";
- case 0x7F : return "DVB - selection_information_section";
- case 0xC0 : return "ATSC - Program Information Message";
- case 0xC1 : return "ATSC - Program Name Message";
- case 0xC2 : return "ATSC/SCTE - Network Information Message";
- case 0xC3 : return "ATSC/SCTE - Network Text Table (NTT)";
- case 0xC4 : return "ATSC/SCTE - Short Form Virtual Channel Table (S-VCT)";
- case 0xC5 : return "ATSC/SCTE - System Time Table (STT)";
- case 0xC6 : return "ATSC/SCTE - Subtitle Message";
- case 0xC7 : return "ATSC - Master Guide Table (MGT)";
- case 0xC8 : return "ATSC - Terrestrial Virtual Channel Table (TVCT)";
- case 0xC9 : return "ATSC - Cable Virtual Channel Table (CVCT) / Long-form Virtual Channel Table (L-VCT)";
- case 0xCA : return "ATSC - Rating Region Table (RRT)";
- case 0xCB : return "ATSC - Event Information Table (EIT)";
- case 0xCC : return "ATSC - Extended Text Table (ETT)";
- case 0xCD : return "ATSC - System Time Table (STT)";
- case 0xCE : return "ATSC - Data Event Table (DET)";
- case 0xCF : return "ATSC - Data Service Table (DST)";
- case 0xD0 : return "ATSC - Program Identifier Table (PIT)";
- case 0xD1 : return "ATSC - Network Resource Table (NRT)";
- case 0xD2 : return "ATSC - Long-term Service Table (L-TST)";
- case 0xD3 : return "ATSC - Directed Channel Change Table (DCCT)";
- case 0xD4 : return "ATSC - DCC Selection Code Table (DCCSCT)";
- case 0xD5 : return "ATSC - Selection Information Table (SIT)";
- case 0xD6 : return "ATSC - Aggregate Event Information Table (AEIT)";
- case 0xD7 : return "ATSC - Aggregate Extended Text Table (AETT)";
- case 0xD8 : return "ATSC - Cable Emergency Alert";
- case 0xD9 : return "ATSC - Aggregate Data Event Table";
- case 0xDA : return "ATSC - Satellite VCT (SVCT)";
- case 0xFC : return "SCTE - Splice";
- default :
- if (table_id>=0x06
- && table_id<=0x37) return "ITU-T Rec. H.222.0 | ISO/IEC 13818-1 reserved";
- if (table_id>=0x40
- && table_id<=0x7F) return "DVB - reserved";
- if (table_id>=0x80
- && table_id<=0x8F) return "CA message";
- if (table_id>=0xC0
- && table_id<=0xDF) return "ATSC/SCTE - reserved";
- if (table_id<=0xFE) return "User Private";
- return "unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Psi_atsc_service_type(int8u service_type)
-{
- switch (service_type)
- {
- case 0x00 : return "reserved";
- case 0x01 : return "Analog television";
- case 0x02 : return "Digital television";
- case 0x03 : return "Digital radio";
- case 0x04 : return "Data";
- default : return "reserved for future use";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Psi_table_id_extension(int8u table_id)
-{
- switch (table_id)
- {
- case 0x00 : return "transport_stream_id";
- case 0x01 : return "reserved";
- case 0x02 : return "program_number";
- case 0x03 : return "reserved";
- case 0x40 : return "network_id";
- case 0x42 :
- case 0x46 : return "transport_stream_id";
- case 0x4E :
- case 0x4F :
- case 0x50 :
- case 0x51 :
- case 0x52 :
- case 0x53 :
- case 0x54 :
- case 0x55 :
- case 0x56 :
- case 0x57 :
- case 0x58 :
- case 0x59 :
- case 0x5A :
- case 0x5B :
- case 0x5C :
- case 0x5E :
- case 0x5F :
- case 0x60 :
- case 0x61 :
- case 0x62 :
- case 0x63 :
- case 0x64 :
- case 0x65 :
- case 0x66 :
- case 0x67 :
- case 0x68 :
- case 0x69 :
- case 0x6A :
- case 0x6B :
- case 0x6C :
- case 0x6D :
- case 0x6E :
- case 0x6F : return "service_id";
- case 0x7F : return "DVB_reserved_for_future_use";
- case 0xC8 :
- case 0xC9 : return "transport_stream_id";
- case 0xCA : return "reserved + rating_region";
- case 0xCB : return "source_id";
- case 0xCC : return "ETT_table_id_extension";
- case 0xD9 : return "AEIT_subtype + MGT_tag";
- case 0xDA : return "SVCT_subtype + SVCT_id";
- default : return "table_id_extension";
- }
-}
-
-//---------------------------------------------------------------------------
-// CRC_32_Table
-// A CRC is computed like this:
-// Init: int32u CRC_32 = 0xFFFFFFFF;
-// for each data byte do
-// CRC_32=(CRC_32<<8) ^ CRC_32_Table[(CRC_32>>24)^(data_byte)];
-int32u Psi_CRC_32_Table[256] =
-{
- 0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9,
- 0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005,
- 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61,
- 0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD,
- 0x4C11DB70, 0x48D0C6C7, 0x4593E01E, 0x4152FDA9,
- 0x5F15ADAC, 0x5BD4B01B, 0x569796C2, 0x52568B75,
- 0x6A1936C8, 0x6ED82B7F, 0x639B0DA6, 0x675A1011,
- 0x791D4014, 0x7DDC5DA3, 0x709F7B7A, 0x745E66CD,
- 0x9823B6E0, 0x9CE2AB57, 0x91A18D8E, 0x95609039,
- 0x8B27C03C, 0x8FE6DD8B, 0x82A5FB52, 0x8664E6E5,
- 0xBE2B5B58, 0xBAEA46EF, 0xB7A96036, 0xB3687D81,
- 0xAD2F2D84, 0xA9EE3033, 0xA4AD16EA, 0xA06C0B5D,
- 0xD4326D90, 0xD0F37027, 0xDDB056FE, 0xD9714B49,
- 0xC7361B4C, 0xC3F706FB, 0xCEB42022, 0xCA753D95,
- 0xF23A8028, 0xF6FB9D9F, 0xFBB8BB46, 0xFF79A6F1,
- 0xE13EF6F4, 0xE5FFEB43, 0xE8BCCD9A, 0xEC7DD02D,
- 0x34867077, 0x30476DC0, 0x3D044B19, 0x39C556AE,
- 0x278206AB, 0x23431B1C, 0x2E003DC5, 0x2AC12072,
- 0x128E9DCF, 0x164F8078, 0x1B0CA6A1, 0x1FCDBB16,
- 0x018AEB13, 0x054BF6A4, 0x0808D07D, 0x0CC9CDCA,
- 0x7897AB07, 0x7C56B6B0, 0x71159069, 0x75D48DDE,
- 0x6B93DDDB, 0x6F52C06C, 0x6211E6B5, 0x66D0FB02,
- 0x5E9F46BF, 0x5A5E5B08, 0x571D7DD1, 0x53DC6066,
- 0x4D9B3063, 0x495A2DD4, 0x44190B0D, 0x40D816BA,
- 0xACA5C697, 0xA864DB20, 0xA527FDF9, 0xA1E6E04E,
- 0xBFA1B04B, 0xBB60ADFC, 0xB6238B25, 0xB2E29692,
- 0x8AAD2B2F, 0x8E6C3698, 0x832F1041, 0x87EE0DF6,
- 0x99A95DF3, 0x9D684044, 0x902B669D, 0x94EA7B2A,
- 0xE0B41DE7, 0xE4750050, 0xE9362689, 0xEDF73B3E,
- 0xF3B06B3B, 0xF771768C, 0xFA325055, 0xFEF34DE2,
- 0xC6BCF05F, 0xC27DEDE8, 0xCF3ECB31, 0xCBFFD686,
- 0xD5B88683, 0xD1799B34, 0xDC3ABDED, 0xD8FBA05A,
- 0x690CE0EE, 0x6DCDFD59, 0x608EDB80, 0x644FC637,
- 0x7A089632, 0x7EC98B85, 0x738AAD5C, 0x774BB0EB,
- 0x4F040D56, 0x4BC510E1, 0x46863638, 0x42472B8F,
- 0x5C007B8A, 0x58C1663D, 0x558240E4, 0x51435D53,
- 0x251D3B9E, 0x21DC2629, 0x2C9F00F0, 0x285E1D47,
- 0x36194D42, 0x32D850F5, 0x3F9B762C, 0x3B5A6B9B,
- 0x0315D626, 0x07D4CB91, 0x0A97ED48, 0x0E56F0FF,
- 0x1011A0FA, 0x14D0BD4D, 0x19939B94, 0x1D528623,
- 0xF12F560E, 0xF5EE4BB9, 0xF8AD6D60, 0xFC6C70D7,
- 0xE22B20D2, 0xE6EA3D65, 0xEBA91BBC, 0xEF68060B,
- 0xD727BBB6, 0xD3E6A601, 0xDEA580D8, 0xDA649D6F,
- 0xC423CD6A, 0xC0E2D0DD, 0xCDA1F604, 0xC960EBB3,
- 0xBD3E8D7E, 0xB9FF90C9, 0xB4BCB610, 0xB07DABA7,
- 0xAE3AFBA2, 0xAAFBE615, 0xA7B8C0CC, 0xA379DD7B,
- 0x9B3660C6, 0x9FF77D71, 0x92B45BA8, 0x9675461F,
- 0x8832161A, 0x8CF30BAD, 0x81B02D74, 0x857130C3,
- 0x5D8A9099, 0x594B8D2E, 0x5408ABF7, 0x50C9B640,
- 0x4E8EE645, 0x4A4FFBF2, 0x470CDD2B, 0x43CDC09C,
- 0x7B827D21, 0x7F436096, 0x7200464F, 0x76C15BF8,
- 0x68860BFD, 0x6C47164A, 0x61043093, 0x65C52D24,
- 0x119B4BE9, 0x155A565E, 0x18197087, 0x1CD86D30,
- 0x029F3D35, 0x065E2082, 0x0B1D065B, 0x0FDC1BEC,
- 0x3793A651, 0x3352BBE6, 0x3E119D3F, 0x3AD08088,
- 0x2497D08D, 0x2056CD3A, 0x2D15EBE3, 0x29D4F654,
- 0xC5A92679, 0xC1683BCE, 0xCC2B1D17, 0xC8EA00A0,
- 0xD6AD50A5, 0xD26C4D12, 0xDF2F6BCB, 0xDBEE767C,
- 0xE3A1CBC1, 0xE760D676, 0xEA23F0AF, 0xEEE2ED18,
- 0xF0A5BD1D, 0xF464A0AA, 0xF9278673, 0xFDE69BC4,
- 0x89B8FD09, 0x8D79E0BE, 0x803AC667, 0x84FBDBD0,
- 0x9ABC8BD5, 0x9E7D9662, 0x933EB0BB, 0x97FFAD0C,
- 0xAFB010B1, 0xAB710D06, 0xA6322BDF, 0xA2F33668,
- 0xBCB4666D, 0xB8757BDA, 0xB5365D03, 0xB1F740B4
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Psi_running_status[]=
-{
- "",
- "Not running",
- "Starts in a few seconds",
- "Pausing",
- "Running",
- "Reserved",
- "Reserved",
- "Reserved",
-};
-
-//---------------------------------------------------------------------------
-extern const char* Mpeg_Descriptors_original_network_id(int16u original_network_id);
-
-//---------------------------------------------------------------------------
-const char* Mpeg_Psi_splice_command_type(int8u splice_command_type)
-{
- switch (splice_command_type)
- {
- case 0x00 : return "splice_null";
- case 0x04 : return "splice_schedule";
- case 0x05 : return "splice_insert";
- case 0x06 : return "time_signal";
- case 0x07 : return "bandwidth_reservation";
- default : return "Reserved";
- }
-};
-
-
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mpeg_Psi::File_Mpeg_Psi()
-:File__Analyze()
-{
- //In
- From_TS=true; //Default is from TS
- Complete_Stream=NULL;
- pid=(int16u)-1;
-
- //Temp
- transport_stream_id=0x0000; //Impossible
- CRC_32=0;
- elementary_PID=0x0000;
- program_number=0x0000;
- stream_type=0x00;
- event_id=0x0000;
- elementary_PID_IsValid=false;
- program_number_IsValid=false;
- stream_type_IsValid=false;
- event_id_IsValid=false;
- current_next_indicator=false;
- IsATSC=false;
- ForceStreamDisplay=MediaInfoLib::Config.MpegTs_ForceStreamDisplay_Get();
-}
-
-//---------------------------------------------------------------------------
-File_Mpeg_Psi::~File_Mpeg_Psi()
-{
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::FileHeader_Parse()
-{
- //Parsing
- if (From_TS)
- {
- int8u pointer_field;
- Get_B1 (pointer_field, "pointer_field");
- if (pointer_field)
- Skip_XX(pointer_field, "payload");
- }
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mpeg_Psi::Header_Begin()
-{
- if (Buffer_Offset) //Not the first one
- {
- Peek_B1(table_id);
- if (table_id==0xFF)
- {
- Accept();
- Fill();
- Finish();
- return false;
- }
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Header_Parse()
-{
- //From Program stream
- if (!From_TS)
- {
- //Filling
- table_id=0xFF; //Make it invalid
- section_syntax_indicator=false;
- Header_Fill_Code((int64u)-1, "program_stream_map"); //(int64u)-1 for precising "out of scope"
- Header_Fill_Size(Element_Size-4);
- return;
- }
-
- //Parsing
- int16u section_length;
- Get_B1 (table_id, "table_id");
- BS_Begin();
- Get_SB ( section_syntax_indicator, "section_syntax_indicator");
- Skip_SB( "private_indicator");
- Skip_S1( 2, "reserved");
- Get_S2 (12, section_length, "section_length");
- BS_End();
-
- //Size
- if ((size_t)section_length<Element_Offset+(section_syntax_indicator?4:0)) //We must have 4 more byte for CRC
- {
- Reject("PSI"); //Error, we exit
- return;
- }
- if (Element_Size<Element_Offset+section_length)
- {
- Element_WaitForMoreData();
- return;
- }
- //Element[Element_Level-1].IsComplete=true;
-
- //CRC32
- if (table_id<=0x06 && !section_syntax_indicator)
- {
- Trusted_IsNot("CRC error");
- CRC_32=0xffffffff;
- Reject();
- return;
- }
- if (section_syntax_indicator || table_id==0xC1)
- {
- CRC_32=0xffffffff;
- const int8u* CRC_32_Buffer=Buffer+Buffer_Offset+(size_t)Element_Offset-3; //table_id position
-
- while(CRC_32_Buffer<Buffer+Buffer_Offset+(size_t)Element_Offset+section_length) //from table_id to the end, CRC_32 included
- {
- CRC_32=(CRC_32<<8) ^ Psi_CRC_32_Table[(CRC_32>>24)^(*CRC_32_Buffer)];
- CRC_32_Buffer++;
- }
-
- if (CRC_32)
- {
- Trusted_IsNot("CRC error");
- Reject();
- return;
- }
- }
-
- //Filling
- Header_Fill_Code(table_id, Ztring().From_Number(table_id, 16));
- Header_Fill_Size(3+section_length);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Data_Parse()
-{
- //Check if OK
- if (table_id<=0x06 && !section_syntax_indicator)
- {
- Skip_XX(Element_Size, "Data (section_syntax_indicator failed)");
- Finish("PSI");
- return;
- }
-
- if (section_syntax_indicator)
- {
- Element_Size-=4; //Reserving size of CRC32
- Get_B2( table_id_extension, Mpeg_Psi_table_id_extension(table_id)); Element_Name(Ztring(Mpeg_Psi_table_id_extension(table_id))+__T("=")+Ztring::ToZtring_From_CC2(table_id_extension));
- BS_Begin();
- Skip_S1( 2, "reserved");
- Get_S1 ( 5, version_number, "version_number"); Element_Info1(__T("Version=")+Ztring::ToZtring(version_number));
- Get_SB ( current_next_indicator, "current_next_indicator");
- BS_End();
- Info_B1( section_number, "section_number"); Element_Info1(__T("Section=")+Ztring::ToZtring(section_number));
- Skip_B1( "last_section_number");
- }
- else if (table_id==0xC1)
- {
- Element_Size-=4; //Reserving size of CRC32
- }
-
- #define ELEMENT_CASE(_NAME, _DETAIL) \
- case 0x##_NAME : Element_Name(_DETAIL); Table_##_NAME(); break;
-
- switch (table_id)
- {
- ELEMENT_CASE(00, "program_association_section");
- ELEMENT_CASE(01, "conditional_access_section");
- ELEMENT_CASE(02, "TS_program_map_section");
- ELEMENT_CASE(03, "TS_description_section");
- ELEMENT_CASE(04, "ISO_IEC_14496_scene_description_section");
- ELEMENT_CASE(05, "ISO_IEC_14496_object_descriptor_section");
- ELEMENT_CASE(06, "Metadata?");
- ELEMENT_CASE(38, "ISO/IEC 13818-6 reserved");
- ELEMENT_CASE(39, "DSM-CC addressable section");
- ELEMENT_CASE(3A, "DSM-CC, MPE");
- ELEMENT_CASE(3B, "DSM-CC, U-N messages, except DDM");
- ELEMENT_CASE(3C, "DSM-CC, DDM");
- ELEMENT_CASE(3D, "DSM-CC, stream descriptors");
- ELEMENT_CASE(3E, "DSM-CC, private data, IP-Datagram");
- ELEMENT_CASE(3F, "DSM-CC addressable section");
- ELEMENT_CASE(40, "DVB - network_information_section - actual_network");
- ELEMENT_CASE(41, "DVB - network_information_section - other_network");
- ELEMENT_CASE(42, "DVB - service_description_section - actual_transport_stream");
- ELEMENT_CASE(46, "DVB - service_description_section - other_transport_stream");
- ELEMENT_CASE(4A, "DVB - bouquet_association_section");
- ELEMENT_CASE(4E, "DVB - event_information_section - actual_transport_stream, present/following");
- ELEMENT_CASE(4F, "DVB - event_information_section - other_transport_stream, present/following");
- case 0x50 :
- case 0x51 :
- case 0x52 :
- case 0x53 :
- case 0x54 :
- case 0x55 :
- case 0x56 :
- case 0x57 :
- case 0x58 :
- case 0x59 :
- case 0x5A :
- case 0x5B :
- case 0x5C :
- case 0x5E :
- ELEMENT_CASE(5F, "DVB - event_information_section - actual_transport_stream, schedule");
- case 0x60 :
- case 0x61 :
- case 0x62 :
- case 0x63 :
- case 0x64 :
- case 0x65 :
- case 0x66 :
- case 0x67 :
- case 0x68 :
- case 0x69 :
- case 0x6A :
- case 0x6B :
- case 0x6C :
- case 0x6D :
- case 0x6E :
- ELEMENT_CASE(6F, "DVB - event_information_section - other_transport_stream, schedule");
- ELEMENT_CASE(70, "DVB - time_date_section");
- ELEMENT_CASE(71, "DVB - running_status_section");
- ELEMENT_CASE(72, "DVB - stuffing_section");
- ELEMENT_CASE(73, "DVB - time_offset_section");
- ELEMENT_CASE(74, "DVB - application information section");
- ELEMENT_CASE(75, "DVB - container section");
- ELEMENT_CASE(76, "DVB - related content section");
- ELEMENT_CASE(77, "DVB - content identifier section");
- ELEMENT_CASE(78, "DVB - MPE-FEC section");
- ELEMENT_CASE(79, "DVB - resolution notification section");
- ELEMENT_CASE(7E, "DVB - discontinuity_information_section");
- ELEMENT_CASE(7F, "DVB - selection_information_section");
- ELEMENT_CASE(C0, "ATSC - Program Information Message");
- ELEMENT_CASE(C1, "ATSC - Program Name Message");
- ELEMENT_CASE(C2, "ATSC/SCTE - Network Information Message");
- ELEMENT_CASE(C3, "ATSC/SCTE - Network Text Table (NTT)");
- ELEMENT_CASE(C4, "ATSC/SCTE - Short Form Virtual Channel Table (S-VCT)");
- ELEMENT_CASE(C5, "ATSC/SCTE - System Time Table (STT)");
- ELEMENT_CASE(C6, "ATSC/SCTE - Subtitle Message");
- ELEMENT_CASE(C7, "ATSC - Master Guide Table (MGT)");
- ELEMENT_CASE(C8, "ATSC - Terrestrial Virtual Channel Table (TVCT)");
- ELEMENT_CASE(C9, "ATSC - Cable Virtual Channel Table (CVCT) / Long-form Virtual Channel Table (L-VCT)");
- ELEMENT_CASE(CA, "ATSC - Rating Region Table (RRT)");
- ELEMENT_CASE(CB, "ATSC - Event Information Table (EIT)");
- ELEMENT_CASE(CC, "ATSC - Extended Text Table (ETT)");
- ELEMENT_CASE(CD, "ATSC - System Time Table (STT)");
- ELEMENT_CASE(CE, "ATSC - Data Event Table (DET)");
- ELEMENT_CASE(CF, "ATSC - Data Service Table (DST)");
- ELEMENT_CASE(D0, "ATSC - Program Identifier Table (PIT)");
- ELEMENT_CASE(D1, "ATSC - Network Resource Table (NRT)");
- ELEMENT_CASE(D2, "ATSC - Long-term Service Table (L-TST)");
- ELEMENT_CASE(D3, "ATSC - Directed Channel Change Table (DCCT)");
- ELEMENT_CASE(D4, "ATSC - DCC Selection Code Table (DCCSCT)");
- ELEMENT_CASE(D5, "ATSC - Selection Information Table (SIT)");
- ELEMENT_CASE(D6, "ATSC - Aggregate Event Information Table (AEIT)");
- ELEMENT_CASE(D7, "ATSC - Aggregate Extended Text Table (AETT)");
- ELEMENT_CASE(D8, "ATSC - Cable Emergency Alert");
- ELEMENT_CASE(D9, "ATSC - Aggregate Data Event Table");
- ELEMENT_CASE(DA, "ATSC - Satellite VCT");
- ELEMENT_CASE(FC, "SCTE - Splice");
- default :
- if (table_id>=0x06
- && table_id<=0x37) {Element_Name("ITU-T Rec. H.222.0 | ISO/IEC 13818-1 reserved"); Skip_XX(Element_Size, "Unknown"); break;}
- if (table_id>=0x40
- && table_id<=0x7F) {Element_Name("DVB - reserved"); Skip_XX(Element_Size, "Unknown"); break;}
- if (table_id>=0x80
- && table_id<=0x8F) {Element_Name("CA message, EMM, ECM"); Skip_XX(Element_Size, "Unknown"); break;}
- if (table_id>=0xC0
- && table_id<=0xDF) {Element_Name("ATSC/SCTE - reserved");Skip_XX(Element_Size, "Unknown"); break;}
- if (table_id<=0xFE) {Element_Name("User Private"); Skip_XX(Element_Size, "Unknown"); break;}
- if (Element_Code==(int64u)-1) {program_stream_map(); break;} //Specific to MPEG-PS
- {Element_Name("forbidden"); Skip_XX(Element_Size, "Unknown"); break;}
- }
-
- if (section_syntax_indicator || table_id==0xC1)
- {
- Element_Size+=4;
- Skip_B4( "CRC32");
- }
-
- if (table_id>=0x40
- && Config->ParseSpeed>=0.5
- && Complete_Stream->Streams_NotParsedCount!=(size_t)-1 && Complete_Stream->Streams_NotParsedCount!=0)
- Complete_Stream->Streams_NotParsedCount=(size_t)-1; //Disabling speed up for detection in case of DVB/ATSC tables, we want all of them.
-
- if (Buffer_Offset+Element_Size==Buffer_Size)
- {
- Accept();
- Fill();
- Finish();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_reserved()
-{
-
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_iso13818_6()
-{
- Element_Info1("Defined in ISO/IEC 13818-6");
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_user_private()
-{
- Element_Info1("user_private");
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_forbidden()
-{
- Element_Info1("forbidden");
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::program_stream_map()
-{
- Element_Name("program_stream_map");
- table_id=0x02; // program_map_section
-
- //Parsing
- int16u elementary_stream_map_length;
- bool single_extension_stream_flag;
- BS_Begin();
- Skip_SB( "current_next_indicator");
- Get_SB (single_extension_stream_flag, "single_extension_stream_flag");
- Skip_SB( "reserved");
- Skip_S1( 5, "program_stream_map_version");
- Skip_S1( 7, "reserved");
- Mark_1 ();
- BS_End();
- Get_B2 (Descriptors_Size, "program_stream_info_length");
- if (Descriptors_Size>0)
- Descriptors();
-
- Get_B2 (elementary_stream_map_length, "elementary_stream_map_length");
- int16u elementary_stream_map_Pos=0;
- while (Element_Offset<Element_Size && elementary_stream_map_Pos<elementary_stream_map_length)
- {
- Element_Begin0();
- int16u ES_info_length;
- int8u stream_type, elementary_stream_id;
- Get_B1 (stream_type, "stream_type"); Param_Info1(Mpeg_Psi_stream_type_Info(stream_type, 0x00000000));
- Get_B1 (elementary_stream_id, "elementary_stream_id");
- Get_B2 (ES_info_length, "ES_info_length");
- Descriptors_Size=ES_info_length;
- Element_Name(Ztring::ToZtring(elementary_stream_id, 16));
- if (elementary_stream_id==0xFD && !single_extension_stream_flag)
- {
- Skip_S1(8, "pseudo_descriptor_tag");
- Skip_S1(8, "pseudo_descriptor_length");
- Mark_1();
- Skip_S1(7, "elementary_stream_id_extension");
- if (Descriptors_Size>=3)
- Descriptors_Size-=3;
- }
- if (Descriptors_Size>0)
- {
- elementary_PID=elementary_stream_id;
- elementary_PID_IsValid=true;
- Descriptors();
- }
- Element_End0();
- elementary_stream_map_Pos+=4+ES_info_length;
-
- FILLING_BEGIN();
- Complete_Stream->Streams[elementary_stream_id]->stream_type=stream_type;
- Complete_Stream->Streams[elementary_stream_id]->Infos["CodecID"].From_Number(stream_type);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_00()
-{
- //transport_stream_id
- if (!Complete_Stream->transport_stream_id_IsValid || table_id_extension!=Complete_Stream->transport_stream_id)
- {
- if (Complete_Stream->Transport_Streams.find(Complete_Stream->transport_stream_id)!=Complete_Stream->Transport_Streams.end())
- while (!Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.empty())
- {
- program_number=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.begin()->first;
- program_number_Remove();
- }
-
- Complete_Stream->transport_stream_id=table_id_extension;
- Complete_Stream->transport_stream_id_IsValid=true;
- }
-
- if (Complete_Stream->Transport_Streams[table_id_extension].Programs_NotParsedCount==(size_t)-1)
- Complete_Stream->Transport_Streams[table_id_extension].Programs_NotParsedCount=0;
- Complete_Stream->Transport_Streams[table_id_extension].programs_List.clear();
-
- //Saving previous status
- std::map<int16u, complete_stream::transport_stream::program> program_numbers_Previous=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs;
-
- //Reseting
- std::vector<int16u> Table_ID_Extension_List;
- for (complete_stream::stream::table_id::table_id_extensions::iterator Table_ID_Extension=Complete_Stream->Streams[0x0000]->Table_IDs[0x00]->Table_ID_Extensions.begin(); Table_ID_Extension!=Complete_Stream->Streams[0x0000]->Table_IDs[0x00]->Table_ID_Extensions.end(); ++Table_ID_Extension)
- if (Table_ID_Extension->first!=table_id_extension)
- Table_ID_Extension_List.push_back(Table_ID_Extension->first);
- for (size_t Pos=0; Pos<Table_ID_Extension_List.size(); Pos++)
- Complete_Stream->Streams[0x0000]->Table_IDs[0x00]->Table_ID_Extensions.erase(Table_ID_Extension_List[Pos]);
-
- //Parsing
- while (Element_Offset<Element_Size)
- {
- Element_Begin1("program");
- Get_B2 ( program_number, "program_number");
- BS_Begin();
- Skip_S1( 3, "reserved");
- Get_S2 ( 13, elementary_PID, program_number?"program_map_PID":"network_PID"); Element_Info1(Ztring::ToZtring_From_CC2(elementary_PID));
- BS_End();
- Element_End0();
-
- FILLING_BEGIN();
- if (elementary_PID
- #if MEDIAINFO_FILTER
- && Config->File_Filter_Get(program_number)
- #endif //MEDIAINFO_FILTER
- )
- {
- program_number_Update();
-
- std::map<int16u, complete_stream::transport_stream::program>::iterator program_number_Previous=program_numbers_Previous.find(program_number);
- if (program_number_Previous!=program_numbers_Previous.end())
- program_numbers_Previous.erase(program_number_Previous);
- }
- FILLING_END();
- }
- BS_End();
-
- FILLING_BEGIN();
- //Removing previous elementary_PIDs no more used
- for (std::map<int16u, complete_stream::transport_stream::program>::iterator program_number_Previous=program_numbers_Previous.begin(); program_number_Previous!=program_numbers_Previous.end(); ++program_number_Previous)
- {
- program_number=program_number_Previous->first;
- program_number_Remove();
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_01()
-{
- //Parsing
- if (Element_Offset<Element_Size)
- {
- Descriptors_Size=(int16u)(Element_Size-Element_Offset);
- if (Descriptors_Size>0)
- Descriptors();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_02()
-{
- //Informing PSI is parsed
- if (!Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].IsParsed && Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs_NotParsedCount)
- {
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs_NotParsedCount--;
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].IsParsed=true;
- }
-
- //Saving previous status
- std::vector<int16u> elementary_PIDs_Previous=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].elementary_PIDs;
-
- //Parsing
- int16u PCR_PID;
- BS_Begin();
- Skip_S1( 3, "reserved");
- Get_S2 (13, PCR_PID, "PCR_PID");
- Skip_S1( 4, "reserved");
- Get_S2 (12, Descriptors_Size, "program_info_length");
- BS_End();
-
- //Descriptors
- transport_stream_id=Complete_Stream->transport_stream_id;
- program_number=table_id_extension;
- program_number_IsValid=true;
- if (Descriptors_Size>0)
- Descriptors();
-
- //Parsing
- while (Element_Offset<Element_Size)
- {
- Element_Begin0();
- BS_Begin();
- Get_S1 ( 8, stream_type, "stream_type"); Element_Info1(Mpeg_Psi_stream_type_Info(stream_type, Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].registration_format_identifier)); Param_Info1(Mpeg_Psi_stream_type_Info(stream_type, Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].registration_format_identifier));
- Skip_S1( 3, "reserved");
- Get_S2 (13, elementary_PID, "elementary_PID");
- Skip_S1( 4, "reserved");
- Get_S2 (12, Descriptors_Size, "ES_info_length");
- BS_End();
-
- FILLING_BEGIN();
- //Searching for hidden Stereoscopic stream
- if (stream_type==0x20 && File_Name_WithoutDemux.size()>=4+1+6+1+4+1+10 && Config->File_Bdmv_ParseTargetedFile_Get())
- {
- //Searching the playlist with the pid
- Ztring Name=File_Name_WithoutDemux;
- Name.resize(Name.size()-(4+1+6+1+4+1+10)); //Removing BDMV/STREAM/SSIF/xxxxx.ssif
- ZtringList List=Dir::GetAllFileNames(Name+__T("BDMV")+PathSeparator+__T("PLAYLIST")+PathSeparator+__T("*.mpls"), Dir::Include_Files);
- std::vector<MediaInfo_Internal*> MIs;
- MIs.resize(List.size());
- size_t FileWithRightPID_Pos=(size_t)-1;
- for (size_t Pos=0; Pos<MIs.size(); Pos++)
- {
- MIs[Pos]=new MediaInfo_Internal();
- MIs[Pos]->Option(__T("File_Bdmv_ParseTargetedFile"), __T("0"));
- MIs[Pos]->Open(List[Pos]);
- if (MIs[Pos]->Count_Get(Stream_Video)==1)
- {
- int16u pid=Ztring(MIs[Pos]->Get(Stream_Video, 0, Video_ID)).To_int16u();
- if (pid==elementary_PID)
- {
- FileWithRightPID_Pos=Pos;
- break;
- }
- }
- }
-
- if (FileWithRightPID_Pos!=(size_t)-1)
- {
- ZtringList ID_List;
- ID_List.Separator_Set(0, __T(" / "));
- ID_List.Write(MIs[FileWithRightPID_Pos]->Get(Stream_Video, 0, Video_ID));
- if (ID_List.size()==2)
- {
- Complete_Stream->Streams[ID_List[1].To_int16u()]->SubStream_pid=elementary_PID;
- Complete_Stream->Streams[elementary_PID]->SubStream_pid=ID_List[1].To_int16u();
-
- elementary_PID=ID_List[1].To_int16u();
- stream_type=0x1B;
-
- bool IsAlreadyPresent=false;
- for (size_t Pos=0; Pos<Complete_Stream->Streams[elementary_PID]->program_numbers.size(); Pos++)
- if (Complete_Stream->Streams[elementary_PID]->program_numbers[Pos]==program_number)
- IsAlreadyPresent=true;
- if (!IsAlreadyPresent)
- {
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].elementary_PIDs.push_back(elementary_PID);
- Complete_Stream->Streams[elementary_PID]->program_numbers.push_back(program_number);
- Complete_Stream->Streams[elementary_PID]->registration_format_identifier=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].registration_format_identifier;
- }
- if (Complete_Stream->Streams[elementary_PID]->Kind!=complete_stream::stream::pes)
- {
- if (Complete_Stream->Streams_NotParsedCount==(size_t)-1)
- Complete_Stream->Streams_NotParsedCount=0;
- Complete_Stream->Streams_NotParsedCount++;
- Complete_Stream->Streams[elementary_PID]->Kind=complete_stream::stream::pes;
- Complete_Stream->Streams[elementary_PID]->stream_type=stream_type;
- Complete_Stream->Streams[elementary_PID]->Searching_Payload_Start_Set(true);
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- Complete_Stream->Streams[elementary_PID]->Searching_TimeStamp_Start_Set(true);
- Complete_Stream->Streams[elementary_PID]->PCR_PID=PCR_PID;
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- //Complete_Stream->Streams[elementary_PID]->Searching_ParserTimeStamp_Start_Set(true);
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- #if MEDIAINFO_TRACE
- Complete_Stream->Streams[elementary_PID]->Element_Info1="PES";
- #endif //MEDIAINFO_TRACE
- if (Complete_Stream->File__Duplicate_Get_From_PID(elementary_PID))
- Complete_Stream->Streams[elementary_PID]->ShouldDuplicate=true;
- }
- }
-
- }
-
- for (size_t Pos=0; Pos<MIs.size(); Pos++)
- delete MIs[Pos]; //MIs[Pos]=NULL;
- }
-
- if (elementary_PID)
- {
- elementary_PID_Update(PCR_PID);
-
- //Removing from the list of previous elementary_PIDs to remove
- for (size_t Pos=0; Pos<elementary_PIDs_Previous.size(); Pos++)
- if (elementary_PIDs_Previous[Pos]==elementary_PID)
- elementary_PIDs_Previous.erase(elementary_PIDs_Previous.begin()+Pos);
- }
- FILLING_END();
-
- //Descriptors
- elementary_PID_IsValid=true;
- if (Descriptors_Size>0)
- Descriptors();
-
- Element_End1(Ztring::ToZtring_From_CC2(elementary_PID));
- }
-
- FILLING_BEGIN();
- //Removing previous elementary_PIDs no more used
- if (Config->File_MpegTs_RealTime_Get())
- {
- for (size_t Pos=0; Pos<elementary_PIDs_Previous.size(); Pos++)
- {
- elementary_PID=elementary_PIDs_Previous[Pos];
- elementary_PID_Remove();
-
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].Update_Needed_StreamCount=true;
- }
- }
-
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- if (PCR_PID!=0x1FFF) //Not padding packet
- {
- Complete_Stream->Streams[PCR_PID]->IsPCR=true;
- Complete_Stream->PCR_PIDs[PCR_PID]++;
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].PCR_PID=PCR_PID;
- if (Complete_Stream->Streams[PCR_PID]->TimeStamp_Start==(int64u)-1)
- Complete_Stream->Streams[PCR_PID]->Searching_TimeStamp_Start_Set(true);
- #if MEDIAINFO_TRACE
- if (Complete_Stream->Streams[PCR_PID]->Kind==complete_stream::stream::unknown)
- Complete_Stream->Streams[PCR_PID]->Element_Info1="PCR";
- #endif //MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_MPEGTS_PCR_YES
-
- //Handling ATSC/CEA/DVB
- if (!Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs_NotParsedCount)
- {
- //We know what is each pid, so we can try known values
- #ifdef MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- for (size_t pid=0x10; pid<0x1FFF; pid++) //Wanting 0x10-->0x2F (DVB), 0x1ABC (cea_osd), 0x1FF7-->0x1FFF (ATSC)
- for (size_t Table_ID=0x00; Table_ID<0xFF; Table_ID++)
- {
- Complete_Stream->Streams[pid]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[pid]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[pid]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[pid]->Table_IDs[Table_ID]=new complete_stream::stream::table_id; //event_information_section - actual_transport_stream, schedule
-
- if (Pos==0x001F)
- Pos=0x1ABB; //Skipping normal data
- if (Pos==0x01ABC)
- Pos=0x1FF6; //Skipping normal data
- }
- #else //MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- if (Complete_Stream->Streams[0x0010]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x0010]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0010]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x0010]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0010]->Table_IDs[0x40]=new complete_stream::stream::table_id; //network_information_section - actual_network
- }
- if (Complete_Stream->Streams[0x0011]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x0011]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0011]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x0011]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0011]->Table_IDs[0x42]=new complete_stream::stream::table_id; //service_description_section - actual_transport_stream
- }
- if (Complete_Stream->Streams[0x0012]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x0012]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0012]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x0012]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0012]->Table_IDs[0x4E]=new complete_stream::stream::table_id; //event_information_section - actual_transport_stream, present/following
- for (size_t Table_ID=0x50; Table_ID<0x60; Table_ID++)
- Complete_Stream->Streams[0x0012]->Table_IDs[Table_ID]=new complete_stream::stream::table_id; //event_information_section - actual_transport_stream, schedule
- }
- if (Complete_Stream->Streams[0x0014]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x0014]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x0014]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x0014]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x0014]->Table_IDs[0x70]=new complete_stream::stream::table_id; //time_date_section
- Complete_Stream->Streams[0x0014]->Table_IDs[0x73]=new complete_stream::stream::table_id; //time_offset_section
- }
- if (Complete_Stream->Streams[0x1FFB]->Kind==complete_stream::stream::unknown)
- {
- Complete_Stream->Streams[0x1FFB]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[0x1FFB]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[0x1FFB]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[0x1FFB]->Table_IDs[0xC7]=new complete_stream::stream::table_id; //Master Guide Table
- Complete_Stream->Streams[0x1FFB]->Table_IDs[0xCD]=new complete_stream::stream::table_id; //System Time Table
- }
- #endif //MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- }
-
- if (Buffer_Offset>=4)
- {
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].ExtraInfos_Content["pointer_field"].From_Number(Buffer_Offset-4);
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].ExtraInfos_Option["pointer_field"]=__T("N NT");
- }
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].ExtraInfos_Content["section_length"].From_Number(Element_Size+4);
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].ExtraInfos_Option["section_length"]=__T("N NT");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_03()
-{
- //Parsing
- if (Element_Offset<Element_Size)
- {
- Descriptors_Size=(int16u)(Element_Size-Element_Offset);
- if (Descriptors_Size>0)
- Descriptors();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_40()
-{
- if (IsATSC)
- {
- Skip_XX(Element_Size, "Unknown ATSC");
- return;
- }
-
- //Parsing
- BS_Begin();
- Skip_S1( 4, "reserved");
- Get_S2 (12, Descriptors_Size, "network_descriptors_length");
- BS_End();
-
- //Descriptors
- if (Descriptors_Size>0)
- Descriptors();
-
- //Parsing
- int16u transport_stream_loop_length;
- BS_Begin();
- Skip_S1( 4, "reserved");
- Get_S2 (12, transport_stream_loop_length, "transport_stream_loop_length");
- BS_End();
-
- if (Element_Offset<Element_Size)
- {
- int16u original_network_id;
- Element_Begin0();
- Get_B2 (transport_stream_id, "transport_stream_id"); Element_Info1(transport_stream_id);
- Get_B2 (original_network_id, "original_network_id"); Param_Info1(Mpeg_Descriptors_original_network_id(original_network_id));
- BS_Begin();
- Skip_S1( 4, "reserved");
- Get_S2 (12, Descriptors_Size, "transport_descriptors_length");
- BS_End();
-
- //Descriptors
- if (Descriptors_Size>0)
- Descriptors();
-
- Element_End0();
-
- FILLING_BEGIN();
- Complete_Stream->original_network_name=Mpeg_Descriptors_original_network_id(original_network_id);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_42()
-{
- //Parsing
- Skip_B2( "original_network_id");
- Skip_B1( "reserved_future_use");
- while (Element_Offset<Element_Size)
- {
- Element_Begin0();
- int64u Test;
- Peek_B5(Test);
- if (Test!=0xFFFFFFFFFFULL)
- {
- Get_B2 ( program_number, "service_id");
- BS_Begin();
- Skip_S1( 6, "reserved_future_use");
- Skip_SB( "EIT_schedule_flag");
- Skip_SB( "EIT_present_following_flag");
- Info_S1( 3, running_status, "running_status"); Param_Info1(Mpeg_Psi_running_status[running_status]);
- Skip_SB( "free_CA_mode");
- Get_S2 (12, Descriptors_Size, "ES_info_length");
- BS_End();
-
- //Descriptors
- program_number_IsValid=true;
- if (Descriptors_Size>0)
- Descriptors();
-
- Element_End1(Ztring::ToZtring_From_CC2(program_number));
- }
- else
- {
- Skip_XX(Element_Size-Element_Offset, "Junk");
- Element_End1("Junk");
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_46()
-{
- Table_42();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_4E()
-{
- //Clearing
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events.clear();
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks_IsUpdated=true;
- Complete_Stream->Programs_IsUpdated=true;
-
- //Parsing
- Get_B2 (transport_stream_id, "transport_stream_id");
- if (table_id==0x4E || (table_id&0xF0)==0x50) //current transport_stream_id
- transport_stream_id=Complete_Stream->transport_stream_id; //On the example I have, transport_stream_id is something else, what?
- Skip_B2( "original_network_id");
- Skip_B1( "segment_last_section_number");
- Skip_B1( "last_table_id");
- if (Element_Offset==Element_Size)
- {
- Element_DoNotShow(); //This is empty!
- return;
- }
- while (Element_Offset<Element_Size)
- {
- Element_Begin0();
- int32u time, duration;
- int16u date;
- int8u running_status;
- Get_B2 (event_id, "event_id");
- Get_B2 (date, "start_time (date)"); Param_Info1(Date_MJD(date));
- Get_B3 (time, "start_time (time)"); Param_Info1(Time_BCD(time));
- Get_B3 (duration, "duration"); Param_Info1(Time_BCD(duration));
- BS_Begin();
- Get_S1 ( 3, running_status, "running_status"); Param_Info1(Mpeg_Psi_running_status[running_status]);
- Skip_SB( "free_CA_mode");
- Get_S2 (12, Descriptors_Size, "descriptors_loop_length");
- BS_End();
-
- //Descriptors
- event_id_IsValid=true;
- if (Descriptors_Size>0)
- Descriptors();
-
- Element_End1(Ztring::ToZtring_From_CC2(event_id));
-
- FILLING_BEGIN();
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events[event_id].start_time=__T("UTC ")+Date_MJD(date)+__T(" ")+Time_BCD(time);
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events[event_id].duration=Time_BCD(duration);
- if (running_status)
- Complete_Stream->Transport_Streams[transport_stream_id].Programs[table_id_extension].DVB_EPG_Blocks[table_id].Events[event_id].running_status=Mpeg_Psi_running_status[running_status];
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_4F()
-{
- Table_4E();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_5F()
-{
- Table_4E();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_6F()
-{
- Table_4F();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_70()
-{
- //Parsing
- int32u time;
- int16u date;
- Get_B2 (date, "UTC_time (date)"); Param_Info1(Date_MJD(date));
- Get_B3 (time, "UTC_time (time)"); Param_Info1(Time_BCD(time));
-
- FILLING_BEGIN();
- if (Complete_Stream->Duration_Start.empty())
- Complete_Stream->Duration_Start=__T("UTC ")+Date_MJD(date)+__T(" ")+Time_BCD(time);
- Complete_Stream->Duration_End=__T("UTC ")+Date_MJD(date)+__T(" ")+Time_BCD(time);
- Complete_Stream->Duration_End_IsUpdated=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_73()
-{
- //Parsing
- int32u time;
- int16u date;
- Get_B2 (date, "UTC_time (date)"); Param_Info1(Date_MJD(date));
- Get_B3 (time, "UTC_time (time)"); Param_Info1(Time_BCD(time));
- BS_Begin();
- Skip_S1( 4, "DVB_reserved_for_future_use");
- Get_S2 (12, Descriptors_Size, "transmission_info_loop_length");
- BS_End();
-
- //Descriptors
- if (Descriptors_Size>0)
- Descriptors();
-
- Skip_B4( "CRC32");
-
- FILLING_BEGIN();
- if (Complete_Stream->Duration_Start.empty())
- Complete_Stream->Duration_Start=__T("UTC ")+Date_MJD(date)+__T(" ")+Time_BCD(time);
- Complete_Stream->Duration_End=__T("UTC ")+Date_MJD(date)+__T(" ")+Time_BCD(time);
- Complete_Stream->Duration_End_IsUpdated=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_7F()
-{
- //Parsing
- BS_Begin();
- Skip_S1( 4, "DVB_reserved_for_future_use");
- Get_S2 (12, Descriptors_Size, "transmission_info_loop_length");
- BS_End();
-
- //Descriptors
- if (Descriptors_Size>0)
- Descriptors();
-
- while (Element_Offset<Element_Size)
- {
- Element_Begin0();
- Get_B2 ( program_number, "service_id");
- BS_Begin();
- Skip_SB( "DVB_reserved_future_use");
- Info_S1( 3, running_status, "running_status"); Param_Info1(Mpeg_Psi_running_status[running_status]);
- Get_S2 (12, Descriptors_Size, "service_loop_length");
- BS_End();
-
- //Descriptors
- program_number_IsValid=true;
- if (Descriptors_Size>0)
- Descriptors();
-
- Element_End1(Ztring::ToZtring_From_CC2(program_number));
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_C0()
-{
- //TODO
- Skip_XX(Element_Size-Element_Offset, "data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_C1()
-{
- IsATSC=true;
-
- //Parsing
- Ztring program_name, alternate_program_name;
- int8u protocol_version, program_name_length, alternate_program_name_length, package_count;
- BS_Begin();
- Skip_S1(3, "reserved");
- Get_S1 (5, protocol_version, "protocol_version");
- BS_End();
- if (protocol_version!=0)
- {
- Skip_XX(Element_Size-Element_Offset, "data");
- return;
- }
- Skip_C3( "ISO_639_language_code");
- Skip_B2( "program_number");
- Skip_B1( "reserved");
- Skip_B1( "sequence");
- Skip_B1( "program_epoch_number");
- BS_Begin();
- Skip_SB( "display_name_when_not_auth");
- Skip_SB( "use_alt_name_in_purchase_history");
- Skip_SB( "use_alt_name_if_not_auth");
- Skip_SB( "display_ratings");
- Skip_S1(4, "reserved");
- BS_End();
- Get_B1 (program_name_length, "program_name_length");
- SCTE_multilingual_text_string(program_name_length, program_name, "program_name");
- Get_B1 (alternate_program_name_length, "alternate_program_name_length");
- SCTE_multilingual_text_string(alternate_program_name_length, alternate_program_name, "alternate_program_name");
- BS_Begin();
- Skip_S1(3, "reserved");
- Get_S1 (5, package_count, "package_count");
- BS_End();
- for (int8u Pos=0; Pos<package_count; Pos++)
- {
- Ztring package_name;
- int8u package_name_length;
- Get_B1 (package_name_length, "package_name_length");
- SCTE_multilingual_text_string(package_name_length, package_name, "package_name");
- }
-
- if (Element_Offset<Element_Size)
- {
- BS_Begin();
- Skip_S1( 6, "reserved");
- Get_S2 (10, Descriptors_Size, "descriptors_length");
- BS_End();
-
- //Descriptors
- if (Descriptors_Size>0)
- Descriptors();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_C7()
-{
- //Parsing
- int16u tables_defined;
- int8u protocol_version;
- Get_B1 (protocol_version, "protocol_version");
- if (protocol_version!=0)
- {
- Skip_XX(Element_Size-Element_Offset, "data");
- return;
- }
- Get_B2 (tables_defined, "tables_defined");
- for (int16u Pos=0; Pos<tables_defined; Pos++)
- {
- int16u table_type, table_type_PID;
- Element_Begin0();
- Get_B2 ( table_type, "table_type"); Param_Info1(Mpeg_Psi_ATSC_table_type(table_type));
- BS_Begin();
- Skip_S1( 3, "reserved");
- Get_S2 (13, table_type_PID, "table_type_PID");
- Skip_S1( 3, "reserved");
- Skip_S1( 5, "table_type_version_number");
- BS_End();
- Skip_B4( "number_bytes");
- BS_Begin();
- Skip_S1( 4, "reserved");
- Get_S2 (12, Descriptors_Size, "table_type_descriptors_length");
- BS_End();
-
- //Descriptors
- if (Descriptors_Size>0)
- Descriptors();
-
- Element_Info1(Mpeg_Psi_ATSC_table_type(table_type));
- Element_Info1C((table_type>=0x0100), table_type%0x100);
- Element_End1(Ztring::ToZtring_From_CC2(table_type_PID));
-
- FILLING_BEGIN();
- if (Complete_Stream->Streams[table_type_PID]->Kind==complete_stream::stream::unknown && table_type!=0x0001 && table_type!=0x0003) //Not activing current_next_indicator='0'
- {
- Complete_Stream->Streams[table_type_PID]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[table_type_PID]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[table_type_PID]->Table_IDs.resize(0x100);
- }
- #ifdef MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- for (int8u table_id=0x00; table_id<0xFF; table_id++)
- if (Complete_Stream->Streams[table_type_PID].Table_IDs[table_id]==NULL)
- Complete_Stream->Streams[table_type_PID].Table_IDs[table_id]=new complete_stream::stream::table_id; //Master Guide Table
- #else //MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- int8u table_id;
- if (table_type==0x0000) //Terrestrial VCT with current_next_indicator=1
- table_id=0xC8;
- else if (table_type==0x0002) //Cable VCT with current_next_indicator=1
- table_id=0xC9;
- else if (table_type==0x0004) //Channel ETT
- table_id=0xCC;
- else if (table_type>=0x0100 && table_type<=0x017F) //EIT-0 to EIT-127
- table_id=0xCB;
- else if (table_type>=0x0200 && table_type<=0x027F) //Event ETT-0 to event ETT-127
- table_id=0xCC;
- else if (table_type>=0x0301 && table_type<=0x03FF) //RRT with rating_region 1-255
- table_id=0xCA;
- else if (table_type>=0x1000 && table_type<0x10FF) //Aggregate Event Information Table
- table_id=0xD6;
- else if (table_type>=0x1100 && table_type<0x11FF) //Aggregate Extended Text Table
- table_id=0xD7;
- else if (table_type>=0x1600 && table_type<0x16FF) //Satellite Virtual Channel Table
- table_id=0xDA;
- else
- table_id=0xFF;
- if (table_id!=0xFF && Complete_Stream->Streams[table_type_PID]->Table_IDs[table_id]==NULL)
- Complete_Stream->Streams[table_type_PID]->Table_IDs[table_id]=new complete_stream::stream::table_id; //Master Guide Table
- #endif //MEDIAINFO_MPEGTS_ALLSTREAMS_YES
- Complete_Stream->Streams[table_type_PID]->table_type=table_type-((table_type&0x200)?0x100:0); //For having the same table_type for both EIT and ETT
- FILLING_END();
- }
- BS_Begin();
- Skip_S1( 4, "reserved");
- Get_S2 (12, Descriptors_Size, "descriptors_length");
- BS_End();
-
- //Descriptors
- if (Descriptors_Size>0)
- Descriptors();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_C9()
-{
- //Parsing
- Ztring short_name;
- int8u num_channels_in_section;
- Skip_B1( "protocol_version");
- Get_B1 ( num_channels_in_section, "num_channels_in_section");
- BS_End();
- for (int8u Pos=0; Pos<num_channels_in_section; Pos++)
- {
- int16u major_channel_number, minor_channel_number, source_id;
- int8u service_type;
- Element_Begin0();
- Get_UTF16B(table_id==0xDA?16:14, short_name, "short_name"); //8 chars for satellite, else 7 chars
- BS_Begin();
- Skip_S1( 4, "reserved");
- Get_S2 (10, major_channel_number, "major_channel_number");
- Get_S2 (10, minor_channel_number, "minor_channel_number");
- if (table_id==0xDA) //Satellite
- {
- Skip_S1( 6, "modulation_mode");
- Skip_S4(32, "carrier_frequency");
- Skip_S4(32, "carrier_symbol_rate");
- Skip_S1( 2, "polarization");
- BS_End();
- Skip_B1( "FEC_Inner");
- }
- else //Terrestrial and Cable
- {
- BS_End();
- Skip_B1( "modulation_mode");
- Skip_B4( "carrier_frequency");
- }
- Skip_B2( "channel_TSID");
- Get_B2 ( program_number, "program_number");
- BS_Begin();
- Skip_S1( 2, "ETM_location");
- Skip_SB( table_id==0xDA?"reserved":"access_controlled");
- Skip_SB( "hidden");
- if (table_id==0xC8) //Terrestrial
- {
- Skip_SB( "path_select");
- Skip_SB( "out_of_band");
- }
- else //Cable and satellite
- Skip_S1( 2, "reserved");
- Skip_SB( "hide_guide");
- Skip_S1( 3, "reserved");
- Get_S1 ( 6, service_type, "service_type");
- BS_End();
- Get_B2 ( source_id, "source_id");
- if (table_id==0xDA) //Satellite
- Skip_B1( "feed_id");
- BS_Begin();
- Skip_S1( 6, "reserved");
- Get_S2 (10, Descriptors_Size, "descriptors_length");
- BS_End();
-
- FILLING_BEGIN();
- if (!Config->File_MpegTs_Atsc_transport_stream_id_Trust_Get())
- table_id_extension=Complete_Stream->transport_stream_id;
- Ztring Channel=Ztring::ToZtring(major_channel_number);
- if (minor_channel_number)
- Channel+=__T("-")+Ztring::ToZtring(minor_channel_number);
- if (minor_channel_number==0 || program_number==0xFFFF)
- {
- Complete_Stream->Transport_Streams[table_id_extension].Infos["ServiceName"]=short_name;
- Complete_Stream->Transport_Streams[table_id_extension].Infos["ServiceChannel"]=Channel;
- Complete_Stream->Transport_Streams[table_id_extension].Infos["ServiceType"]=Mpeg_Psi_atsc_service_type(service_type);
- Complete_Stream->Transport_Streams[table_id_extension].source_id=source_id;
- Complete_Stream->Transport_Streams[table_id_extension].source_id_IsValid=true;
- }
- else if (program_number<0x2000)
- {
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].Infos["ServiceName"]=short_name;
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].Infos["ServiceChannel"]=Channel;
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].Infos["ServiceType"]=Mpeg_Psi_atsc_service_type(service_type);
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].source_id=source_id;
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].source_id_IsValid=true;
- }
- FILLING_END();
-
- //Descriptors
- program_number_IsValid=true;
- if (Descriptors_Size>0)
- Descriptors();
-
- Element_End1(Ztring::ToZtring_From_CC2(program_number));
- }
-
- BS_Begin();
- Skip_S1( 6, "reserved");
- Get_S2 (10, Descriptors_Size, "additional_descriptors_length");
- BS_End();
-
- //Descriptors
- if (Descriptors_Size>0)
- Descriptors();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_CA()
-{
- //Parsing
- Ztring rating_region_name;
- int8u dimensions_defined;
- Skip_B1( "protocol_version");
- Skip_B1( "rating_region_name_length"); //Not used
- ATSC_multiple_string_structure(rating_region_name, "rating_region_name");
- Get_B1 ( dimensions_defined, "dimensions_defined");
- BS_End();
- for (int8u dimension_Pos=0; dimension_Pos<dimensions_defined; dimension_Pos++)
- {
- Element_Begin1("dimension");
- Ztring dimension_name;
- int8u values_defined;
- Skip_B1( "dimension_name_length"); //Not used
- ATSC_multiple_string_structure(dimension_name, "dimension_name"); Element_Info1(dimension_name);
- BS_Begin();
- Skip_S1( 3, "reserved");
- Skip_SB( "graduated_scale");
- Get_S1 ( 4, values_defined, "values_defined");
- BS_End();
- for (int8u value_Pos=0; value_Pos<values_defined; value_Pos++)
- {
- Element_Begin1("value");
- Ztring abbrev_rating_value, rating_value;
- Skip_B1( "abbrev_rating_value_length"); //Not used
- ATSC_multiple_string_structure(abbrev_rating_value, "abbrev_rating_value"); Element_Info1(abbrev_rating_value);
- Skip_B1( "rating_value_length"); //Not used
- ATSC_multiple_string_structure(rating_value, "rating_value"); Element_Info1(rating_value);
- Element_End0();
- }
- Element_End0();
- }
-
- BS_Begin();
- Skip_S1( 6, "reserved");
- Get_S2 (10, Descriptors_Size, "descriptors_length");
- BS_End();
-
- //Descriptors
- if (Descriptors_Size>0)
- Descriptors();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_CB()
-{
- //Clear
- Complete_Stream->Sources[table_id_extension].ATSC_EPG_Blocks[table_id].Events.clear();
- Complete_Stream->Sources[table_id_extension].ATSC_EPG_Blocks_IsUpdated=true;
- Status[IsUpdated]=true;
-
- //Parsing
- int8u num_events_in_section;
- if (table_id==0xCB) //EIT (not A-EIT)
- Skip_B1( "protocol_version");
- Get_B1 ( num_events_in_section, "num_events_in_section");
- BS_End();
- for (int8u Pos=0; Pos<num_events_in_section; Pos++)
- {
- Ztring title;
- int32u start_time, length_in_seconds;
- Element_Begin0();
- BS_Begin();
- Skip_SB( table_id==0xD9?"off_air":"reserved");
- Skip_SB( "reserved");
- Get_S2 (14, event_id, "event_id");
- BS_End();
- Get_B4 ( start_time, "start_time"); Param_Info1(Ztring().Date_From_Seconds_1970(start_time+315964800)); Element_Info1(Ztring().Date_From_Seconds_1970(start_time+315964800-Complete_Stream->GPS_UTC_offset)); //UTC 1980-01-06 00:00:00
- BS_Begin();
- Skip_S1( 2, "reserved");
- Skip_S1( 2, table_id==0xCB?"ETM_location":"reserved");
- Get_S3 (20, length_in_seconds, "length_in_seconds");
- BS_End();
- Skip_B1 ( "title_length"); //We don't use it for verification
- ATSC_multiple_string_structure(title, "title");
- BS_Begin();
- Skip_S1( 6, "reserved");
- Get_S2 (10, Descriptors_Size, "descriptors_length");
- BS_End();
-
- //Descriptors
- event_id_IsValid=true;
- if (Descriptors_Size>0)
- Descriptors();
-
- Element_End1(Ztring::ToZtring_From_CC2(event_id));
-
- FILLING_BEGIN();
- Complete_Stream->Sources[table_id_extension].ATSC_EPG_Blocks[Complete_Stream->Streams[pid]->table_type].Events[event_id].start_time=start_time;
- Ztring duration =(length_in_seconds<36000?__T("0"):__T(""))+Ztring::ToZtring(length_in_seconds/3600)+__T(":");
- length_in_seconds%=3600;
- duration+=(length_in_seconds< 600?__T("0"):__T(""))+Ztring::ToZtring(length_in_seconds/ 60)+__T(":");
- length_in_seconds%=60;
- duration+=(length_in_seconds< 10?__T("0"):__T(""))+Ztring::ToZtring(length_in_seconds );
- Complete_Stream->Sources[table_id_extension].ATSC_EPG_Blocks[Complete_Stream->Streams[pid]->table_type].Events[event_id].duration=duration;
- Complete_Stream->Sources[table_id_extension].ATSC_EPG_Blocks[Complete_Stream->Streams[pid]->table_type].Events[event_id].title=title;
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_CC()
-{
- //Parsing
- Ztring extended_text_message;
- int16u source_id, event_id;
- Skip_B1( "protocol_version");
- Element_Begin1("ETM_id");
- Get_B2 ( source_id, "source_id");
- BS_Begin();
- Get_S2 (14, event_id, "event_id");
- Skip_S1( 2, "lsb");
- BS_End();
- Element_End0();
- ATSC_multiple_string_structure(extended_text_message, "extended_text_message");
-
- FILLING_BEGIN();
- if (Complete_Stream->Streams[pid]->table_type==4)
- Complete_Stream->Sources[source_id].texts[table_id_extension]=extended_text_message;
- else
- {
- Complete_Stream->Sources[source_id].ATSC_EPG_Blocks[Complete_Stream->Streams[pid]->table_type].Events[event_id].texts[table_id_extension]=extended_text_message;
- Complete_Stream->Sources[source_id].ATSC_EPG_Blocks_IsUpdated=true;
- Complete_Stream->Sources_IsUpdated=true;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_CD()
-{
- //Parsing
- int32u system_time;
- int8u GPS_UTC_offset;
- Skip_B1( "protocol_version");
- Get_B4 (system_time, "system_time"); Param_Info1(Ztring().Date_From_Seconds_1970(system_time+315964800)); //UTC 1980-01-06 00:00:00
- Get_B1 (GPS_UTC_offset, "GPS_UTC_offset");
- Element_Begin1("daylight_savings");
- BS_Begin();
- Skip_SB( "DS_status");
- Skip_SB( "Reserved");
- Skip_SB( "Reserved");
- Skip_S1(5, "DS_day_of_month");
- BS_End();
- Skip_B1( "DS_hour");
- Element_End0();
-
- //Descriptors
- Descriptors_Size=(int16u)(Element_Size-Element_Offset);
- if (Descriptors_Size>0)
- Descriptors();
-
- FILLING_BEGIN();
- if (Complete_Stream->Duration_Start.empty())
- Complete_Stream->Duration_Start=Ztring().Date_From_Seconds_1970(system_time+315964800-GPS_UTC_offset);
- Complete_Stream->Duration_End=Ztring().Date_From_Seconds_1970(system_time+315964800-GPS_UTC_offset);
- Complete_Stream->Duration_End_IsUpdated=true;
- Complete_Stream->GPS_UTC_offset=GPS_UTC_offset;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_D6()
-{
- //Parsing
- if ((table_id_extension&0xFF00)==0x0000)
- {
- int8u num_sources_in_section;
- Get_B1 ( num_sources_in_section, "num_sources_in_section");
- for (int8u Pos=0; Pos<num_sources_in_section; Pos++)
- {
- Get_B2 (table_id_extension, "source_id");
- Table_CB();
- }
- }
- else
- Skip_XX(Element_Size, "reserved");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_FC()
-{
- //Parsing
- int16u splice_command_length;
- int8u splice_command_type;
- bool encrypted_packet;
- Skip_B1( "protocol_version");
- BS_Begin();
- Get_SB ( encrypted_packet, "encrypted_packet");
- Skip_S1( 6, "encryption_algorithm");
- Skip_S5(33, "pts_adjustment");
- Skip_S1( 8, "cw_index");
- Skip_S2(12, "reserved");
- Get_S2 (12, splice_command_length, "splice_command_length");
- if (splice_command_length==0xFFF)
- splice_command_length=(int16u)(Element_Size-4-Element_Offset);
- Get_S1 ( 8, splice_command_type, "splice_command_type"); Param_Info1(Mpeg_Psi_splice_command_type(splice_command_type));
- BS_End();
-
- Element_Begin0();
- #undef ELEMENT_CASE
- #define ELEMENT_CASE(_NAME, _DETAIL) \
- case 0x##_NAME : Element_Name(_DETAIL); Table_FC_##_NAME(); break;
- switch (splice_command_type)
- {
- ELEMENT_CASE (00, "splice_null"); break;
- ELEMENT_CASE (04, "splice_schedule"); break;
- ELEMENT_CASE (05, "splice_insert"); break;
- ELEMENT_CASE (06, "time_signal"); break;
- ELEMENT_CASE (07, "bandwidth_reservation"); break;
- default : Skip_XX(splice_command_length, "Unknown");
- }
- Element_End0();
-
- if (Element_Offset+4<Element_Size)
- {
- Get_B2 (Descriptors_Size, "descriptor_loop_length");
- transport_stream_id=Complete_Stream->transport_stream_id; //SCTE 35 is automaticly linked to the current transport_stream_id
- if (Descriptors_Size>0)
- Descriptors();
- }
-
- if (Element_Offset+4<Element_Size)
- Skip_XX(Element_Size-(Element_Offset+4), "alignment_stuffing");
- if (encrypted_packet)
- Skip_B4( "E_CRC_32");
- Skip_B4( "CRC32");
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_FC_00()
-{
- //Null
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_FC_04()
-{
- //TODO
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_FC_05()
-{
- //Parsing
- bool splice_event_cancel_indicator;
- Skip_B4( "splice_event_id");
- BS_Begin();
- Get_SB ( splice_event_cancel_indicator, "splice_event_cancel_indicator");
- Skip_S1( 7, "reserved");
- BS_End();
- if (!splice_event_cancel_indicator)
- {
- bool program_splice_flag, duration_flag, splice_immediate_flag;
- BS_Begin();
- Skip_SB( "out_of_network_indicator");
- Get_SB ( program_splice_flag, "program_splice_flag");
- Get_SB ( duration_flag, "duration_flag");
- Get_SB ( splice_immediate_flag, "splice_immediate_flag");
- Skip_S1( 4, "reserved");
- BS_End();
- if(program_splice_flag && !splice_immediate_flag)
- Table_FC_05_splice_time();
- if (!program_splice_flag)
- {
- int8u component_count;
- Get_B1(component_count, "component_count");
- for (int8u component=0; component<component_count; component++)
- {
- Skip_B1( "component_tag");
- Table_FC_05_splice_time();
- }
- }
- if(duration_flag)
- Table_FC_05_break_duration();
- Skip_B2( "unique_program_id");
- Skip_B1( "avail_num");
- Skip_B1( "avails_expected");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_FC_05_break_duration()
-{
- Element_Begin1("break_duration");
-
- //Parsing
- BS_Begin();
- Skip_SB( "auto_return");
- Skip_S1( 6, "reserved");
- Skip_S5(33, "duration");
- BS_End();
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_FC_05_splice_time()
-{
- Element_Begin1("splice_time");
-
- //Parsing
- bool time_specified_flag;
- BS_Begin();
- Get_SB ( time_specified_flag, "time_specified_flag");
- if (time_specified_flag)
- {
- Skip_S1( 6, "reserved");
- Skip_S5(33, "pts_time");
-
- }
- else
- Skip_S5(7, "reserved");
- BS_End();
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_FC_06()
-{
- Table_FC_05_splice_time();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Table_FC_07()
-{
- //TODO
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::Descriptors()
-{
- if (Element_Offset+Descriptors_Size>Element_Size)
- {
- Trusted_IsNot("Descriptor size too big");
- return;
- }
-
- //Configuring
- File_Mpeg_Descriptors Descriptors;
- Descriptors.Complete_Stream=Complete_Stream;
- Descriptors.transport_stream_id=transport_stream_id;
- Descriptors.pid=pid;
- Descriptors.table_id=table_id;
- Descriptors.table_id_extension=table_id_extension;
- Descriptors.elementary_PID=elementary_PID;
- Descriptors.program_number=program_number;
- Descriptors.stream_type=stream_type;
- Descriptors.event_id=event_id;
- Descriptors.elementary_PID_IsValid=elementary_PID_IsValid;
- Descriptors.program_number_IsValid=program_number_IsValid;
- Descriptors.stream_type_IsValid=stream_type_IsValid;
- Descriptors.event_id_IsValid=event_id_IsValid;
-
- //Parsing
- if (Descriptors_Size!=0)
- {
- Element_Begin1("Descriptors");
- Open_Buffer_Init(&Descriptors);
- Open_Buffer_Continue(&Descriptors, Descriptors_Size);
- Element_End0();
- }
-
- //Configuring
- elementary_PID_IsValid=false;
- program_number_IsValid=false;
- stream_type_IsValid=false;
- event_id_IsValid=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::ATSC_multiple_string_structure(Ztring &Value, const char* Name)
-{
- //Parsing
- Ztring string;
- int8u number_strings, number_segments;
- Element_Begin1(Name);
- Get_B1(number_strings, "number_strings");
- for (int8u string_Pos=0; string_Pos<number_strings; string_Pos++)
- {
- Element_Begin1("String");
- int32u ISO_639_language_code;
- Get_C3(ISO_639_language_code, "ISO_639_language_code");
- Get_B1(number_segments, "number_segments");
- for (int8u segment_Pos=0; segment_Pos<number_segments; segment_Pos++)
- {
- Element_Begin1("Segment");
- Ztring segment;
- int8u compression_type, mode, number_bytes;
- Get_B1 (compression_type, "compression_type");
- Get_B1 (mode, "mode");
- Get_B1 (number_bytes, "number_bytes");
- switch (compression_type)
- {
- case 0x00 :
- switch (mode)
- {
- case 0x00 : Get_Local(number_bytes, segment, "string"); break;
- case 0x3F : Get_UTF16B(number_bytes, segment, "string"); break;
- default : Skip_XX(number_bytes, "Unknown");
- segment=__T("(Encoded with mode=0x")+Ztring::ToZtring(mode, 16)+__T(')');
- }
- break;
- default : Skip_XX(number_bytes, "(Compressed)");
- segment=__T("(Compressed)");
- }
- Element_End0();
-
- FILLING_BEGIN();
- if (segment.find_first_not_of(__T("\t\n "))!=std::string::npos)
- string+=segment+__T(" - ");
- FILLING_END();
- }
-
- FILLING_BEGIN();
- if (!string.empty())
- string.resize(string.size()-3);
- Ztring ISO_639_2=Ztring().From_CC3(ISO_639_language_code);
- const Ztring& ISO_639_1=MediaInfoLib::Config.Iso639_1_Get(ISO_639_2);
- Value+=(ISO_639_1.empty()?ISO_639_2:ISO_639_1)+__T(':')+string+__T(" - ");
- FILLING_END();
-
- Element_Info1(string);
- Element_End1("String");
- }
-
- if (!Value.empty())
- Value.resize(Value.size()-3);
-
- Element_Info1(Value);
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::SCTE_multilingual_text_string(int8u Size, Ztring &Value, const char* Name)
-{
- //Parsing
- Element_Begin1(Name);
- int64u End=Element_Offset+Size;
- while (Element_Offset<End)
- {
- int8u mode;
- Get_B1 (mode, "mode");
- if (mode<0x3F)
- {
- int8u eightbit_string_length;
- Get_B1 (eightbit_string_length, "eightbit_string_length");
- if (mode==0)
- Get_ISO_8859_1(eightbit_string_length, Value, "eightbit_string");
- else
- Skip_XX(eightbit_string_length, "eightbit_string (unsupporeted)");
- }
- else if (mode==0x3F)
- {
- int8u sixteenbit_string_length;
- Get_B1 (sixteenbit_string_length, "sixteenbit_string_length");
- Get_UTF16B(sixteenbit_string_length, Value, "sixteenbit_string");
- }
- else if (mode>=0xA0)
- {
- int8u format_effector_param_length;
- Get_B1 (format_effector_param_length, "format_effector_param_length");
- Skip_XX(format_effector_param_length, "format_effector_data");
- }
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-//Modified Julian Date
-Ztring File_Mpeg_Psi::Date_MJD(int16u Date_)
-{
- //Calculating
- float64 Date=Date_;
- int Y2=(int)((Date-15078.2)/365.25);
- int M2=(int)(((Date-14956.1) - ((int)(Y2*365.25))) /30.6001);
- int D =(int)(Date-14956 - ((int)(Y2*365.25)) - ((int)(M2*30.6001)));
- int K=0;
- if (M2==14 || M2==15)
- K=1;
- int Y =Y2+K;
- int M =M2-1-K*12;
-
- //Formating
- return Ztring::ToZtring(1900+Y)+__T("-")
- + (M<10?__T("0"):__T(""))+Ztring::ToZtring( M)+__T("-")
- + (D<10?__T("0"):__T(""))+Ztring::ToZtring( D);
-}
-
-//---------------------------------------------------------------------------
-//Form: HHMMSS, BCD
-Ztring File_Mpeg_Psi::Time_BCD(int32u Time)
-{
- return (((Time>>16)&0xFF)<10?__T("0"):__T("")) + Ztring::ToZtring((Time>>16)&0xFF, 16)+__T(":") //BCD
- + (((Time>> 8)&0xFF)<10?__T("0"):__T("")) + Ztring::ToZtring((Time>> 8)&0xFF, 16)+__T(":") //BCD
- + (((Time )&0xFF)<10?__T("0"):__T("")) + Ztring::ToZtring((Time )&0xFF, 16); //BCD
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::program_number_Update()
-{
- //Setting the pid as program_map_section
- if (Complete_Stream->Streams[elementary_PID]->Kind!=complete_stream::stream::psi)
- {
- Complete_Stream->Streams[elementary_PID]->Searching_Payload_Start_Set(true);
- Complete_Stream->Streams[elementary_PID]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[elementary_PID]->Table_IDs.resize(0x100);
- if (program_number)
- Complete_Stream->Streams[elementary_PID]->Table_IDs[0x02]=new complete_stream::stream::table_id; //program_map_section
- }
- if (Complete_Stream->File__Duplicate_Get_From_PID(elementary_PID))
- Complete_Stream->Streams[elementary_PID]->ShouldDuplicate=true;
-
- //Handling a program
- if (program_number)
- {
- Complete_Stream->Transport_Streams[table_id_extension].Programs_NotParsedCount++;
- Complete_Stream->Transport_Streams[table_id_extension].Programs[program_number].pid=elementary_PID;
- Complete_Stream->Transport_Streams[table_id_extension].programs_List.push_back(program_number);
- if (Complete_Stream->Streams.size()<0x2000)
- Complete_Stream->Streams.resize(0x2000); //TODO: find the reason this code is called
- Complete_Stream->Streams[elementary_PID]->program_numbers.push_back(program_number);
- if (Complete_Stream->Streams[elementary_PID]->Table_IDs.size()<0x100)
- Complete_Stream->Streams[elementary_PID]->Table_IDs.resize(0x100); //TODO: find the reason this code is called
- if (Complete_Stream->Streams[elementary_PID]->Table_IDs[0x02]==NULL)
- Complete_Stream->Streams[elementary_PID]->Table_IDs[0x02]=new complete_stream::stream::table_id; //TODO: find the reason this code is called
- if (Complete_Stream->Streams[elementary_PID]->Table_IDs[0x02]->Table_ID_Extensions.find(program_number)==Complete_Stream->Streams[elementary_PID]->Table_IDs[0x02]->Table_ID_Extensions.end())
- {
- Complete_Stream->Streams[elementary_PID]->Table_IDs[0x02]->Table_ID_Extensions_CanAdd=false;
- Complete_Stream->Streams[elementary_PID]->Table_IDs[0x02]->Table_ID_Extensions[program_number].version_number=0xFF;
- Complete_Stream->Streams[elementary_PID]->Table_IDs[0x02]->Table_ID_Extensions[program_number].Section_Numbers.clear();
- Complete_Stream->Streams[elementary_PID]->Table_IDs[0x02]->Table_ID_Extensions[program_number].Section_Numbers.resize(0x100);
- }
- }
-
- //Handling a network except basic version
- else if (Complete_Stream->Streams[elementary_PID]->Table_IDs[0x00]==NULL)
- {
- for (size_t Table_ID=1; Table_ID<0x100; Table_ID++)
- {
- if (Complete_Stream->Streams[elementary_PID]->Table_IDs[Table_ID]==NULL)
- Complete_Stream->Streams[elementary_PID]->Table_IDs[Table_ID]=new complete_stream::stream::table_id; //all
-
- if (Table_ID==1)
- Table_ID++; //Skipping TableID 2
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::program_number_Remove()
-{
- //Removing this program_number from the list of program_numbers for each elementary_PID
- for (size_t Pos=0; Pos<Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].elementary_PIDs.size(); Pos++)
- {
- int16u elementary_PID_Temp=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].elementary_PIDs[Pos];
-
- //Removing this program_number from the list of program_numbers for this elementary_PID
- for (size_t Pos=0; Pos<Complete_Stream->Streams[elementary_PID_Temp]->program_numbers.size(); Pos++)
- if (Complete_Stream->Streams[elementary_PID_Temp]->program_numbers[Pos]==program_number)
- Complete_Stream->Streams[elementary_PID_Temp]->program_numbers.erase(Complete_Stream->Streams[elementary_PID_Temp]->program_numbers.begin()+Pos);
-
- //Removing parser if no more program_number
- if (Complete_Stream->Streams[elementary_PID_Temp]->program_numbers.empty())
- {
- stream_t StreamKind=Complete_Stream->Streams[elementary_PID_Temp]->StreamKind;
- size_t StreamPos=Complete_Stream->Streams[elementary_PID_Temp]->StreamPos;
- if (StreamKind!=Stream_Max && StreamPos!=(size_t)-1)
- Complete_Stream->StreamPos_ToRemove[StreamKind].push_back(StreamPos);
-
- if (Complete_Stream->Streams_NotParsedCount!=(size_t)-1 && Complete_Stream->Streams_NotParsedCount && !Complete_Stream->Streams[elementary_PID_Temp]->IsParsed)
- Complete_Stream->Streams_NotParsedCount--; //Not parsed, and no need to parse it now
- delete Complete_Stream->Streams[elementary_PID_Temp]; Complete_Stream->Streams[elementary_PID_Temp]=new complete_stream::stream;
- }
- }
-
- //Removing related PCR
- std::map<int16u, int16u>::iterator PCR_PID=Complete_Stream->PCR_PIDs.find(Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].PCR_PID);
- if (PCR_PID!=Complete_Stream->PCR_PIDs.end())
- {
- PCR_PID->second--;
- if (PCR_PID->second==0)
- Complete_Stream->PCR_PIDs.erase(PCR_PID);
- }
-
- //Removing program_number
- size_t StreamPos=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].StreamPos;
- if (StreamPos!=(size_t)-1)
- {
- Complete_Stream->StreamPos_ToRemove[Stream_Menu].push_back(StreamPos);
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].StreamPos=(size_t)-1;
- }
- int16u program_number_pid=Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].pid;
- if (program_number_pid)
- {
- for (size_t Pos=0; Pos<Complete_Stream->Streams[program_number_pid]->program_numbers.size(); Pos++)
- if (Complete_Stream->Streams[program_number_pid]->program_numbers[Pos]==program_number)
- Complete_Stream->Streams[program_number_pid]->program_numbers.erase(Complete_Stream->Streams[program_number_pid]->program_numbers.begin()+Pos);
- if (Complete_Stream->Streams[program_number_pid]->Table_IDs[0x02])
- Complete_Stream->Streams[program_number_pid]->Table_IDs[0x02]->Table_ID_Extensions.erase(program_number);
- }
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs.erase(program_number);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::elementary_PID_Update(int16u PCR_PID)
-{
- if (Complete_Stream->Streams[elementary_PID]->Kind==complete_stream::stream::psi)
- {
- //A PID can not be PSI and PES at the same time
- return;
- }
-
- //stream_type
- if (stream_type!=Complete_Stream->Streams[elementary_PID]->stream_type && Complete_Stream->Streams[elementary_PID]->stream_type!=(int8u)-1)
- {
- if (Complete_Stream->Streams_NotParsedCount!=(size_t)-1 && Complete_Stream->Streams_NotParsedCount && !Complete_Stream->Streams[elementary_PID]->IsParsed)
- Complete_Stream->Streams_NotParsedCount--; //Not parsed, and no need to parse it now
- delete Complete_Stream->Streams[elementary_PID]; Complete_Stream->Streams[elementary_PID]=new complete_stream::stream;
- Complete_Stream->Streams[elementary_PID]->Kind=complete_stream::stream::unknown;
- }
- if (Complete_Stream->Streams[elementary_PID]->Kind!=complete_stream::stream::pes)
- {
- delete Complete_Stream->Streams[elementary_PID]; Complete_Stream->Streams[elementary_PID]=new complete_stream::stream;
-
- if (Complete_Stream->Streams_NotParsedCount==(size_t)-1)
- Complete_Stream->Streams_NotParsedCount=0;
- Complete_Stream->Streams_NotParsedCount++;
- if (stream_type==0x86 && Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].registration_format_identifier==Elements::CUEI)
- {
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].HasNotDisplayableStreams=true;
- Complete_Stream->Streams[elementary_PID]->Kind=complete_stream::stream::psi;
- Complete_Stream->Streams[elementary_PID]->Table_IDs.resize(0x100);
- Complete_Stream->Streams[elementary_PID]->Table_IDs[0xFC]=new complete_stream::stream::table_id; //Splice
- if (Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].Scte35==NULL)
- {
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].Scte35=new complete_stream::transport_stream::program::scte35;
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[table_id_extension].Scte35->pid=elementary_PID;
- }
- #if MEDIAINFO_TRACE
- Complete_Stream->Streams[elementary_PID]->Element_Info1="PSI";
- #endif //MEDIAINFO_TRACE
- }
- else
- {
- Complete_Stream->Streams[elementary_PID]->Kind=complete_stream::stream::pes;
- Complete_Stream->Streams[elementary_PID]->Infos["CodecID"].From_Number(stream_type);
- #if MEDIAINFO_TRACE
- Complete_Stream->Streams[elementary_PID]->Element_Info1="PES";
- #endif //MEDIAINFO_TRACE
- }
- Complete_Stream->Streams[elementary_PID]->stream_type=stream_type;
- Complete_Stream->Streams[elementary_PID]->Searching_Payload_Start_Set(true);
- #ifdef MEDIAINFO_MPEGTS_PCR_YES
- Complete_Stream->Streams[elementary_PID]->Searching_TimeStamp_Start_Set(true);
- Complete_Stream->Streams[elementary_PID]->PCR_PID=PCR_PID;
- #endif //MEDIAINFO_MPEGTS_PCR_YES
- #ifdef MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- //Complete_Stream->Streams[elementary_PID]->Searching_ParserTimeStamp_Start_Set(true);
- #endif //MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
- if (Complete_Stream->File__Duplicate_Get_From_PID(elementary_PID))
- Complete_Stream->Streams[elementary_PID]->ShouldDuplicate=true;
- }
-
- //Program information
- bool IsAlreadyPresent=false;
- for (size_t Pos=0; Pos<Complete_Stream->Streams[elementary_PID]->program_numbers.size(); Pos++)
- if (Complete_Stream->Streams[elementary_PID]->program_numbers[Pos]==program_number)
- IsAlreadyPresent=true;
- if (!IsAlreadyPresent)
- {
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].elementary_PIDs.push_back(elementary_PID);
- Complete_Stream->Streams[elementary_PID]->program_numbers.push_back(program_number);
- if (ForceStreamDisplay || (Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].registration_format_identifier==Elements::HDMV && Complete_Stream->Streams[elementary_PID]->stream_type==0x90)) //Testing if forcing display of all streams or if it is a PGS from Blu-ray
- Complete_Stream->PES_PIDs.insert(elementary_PID); //Adding it for sure
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg_Psi::elementary_PID_Remove()
-{
- //Removing this elementary_PID from the list of elementary_PIDs for this program_number
- for (size_t Pos=0; Pos<Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].elementary_PIDs.size(); Pos++)
- if (Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].elementary_PIDs[Pos]==elementary_PID)
- Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].elementary_PIDs.erase(Complete_Stream->Transport_Streams[Complete_Stream->transport_stream_id].Programs[program_number].elementary_PIDs.begin()+Pos);
-
- //Removing this program_number from the list of program_numbers for this elementary_PID
- for (size_t Pos=0; Pos<Complete_Stream->Streams[elementary_PID]->program_numbers.size(); Pos++)
- if (Complete_Stream->Streams[elementary_PID]->program_numbers[Pos]==program_number)
- Complete_Stream->Streams[elementary_PID]->program_numbers.erase(Complete_Stream->Streams[elementary_PID]->program_numbers.begin()+Pos);
-
- //Removing parser if no more program_number
- if (Complete_Stream->Streams[elementary_PID]->program_numbers.empty())
- {
- stream_t StreamKind=Complete_Stream->Streams[elementary_PID]->StreamKind;
- size_t StreamPos=Complete_Stream->Streams[elementary_PID]->StreamPos;
- if (StreamKind!=Stream_Max && StreamPos!=(size_t)-1)
- Complete_Stream->StreamPos_ToRemove[StreamKind].push_back(StreamPos);
-
- if (Complete_Stream->Streams_NotParsedCount!=(size_t)-1 && Complete_Stream->Streams_NotParsedCount && !Complete_Stream->Streams[elementary_PID]->IsParsed)
- Complete_Stream->Streams_NotParsedCount--; //Not parsed, and no need to parse it now
- delete Complete_Stream->Streams[elementary_PID]; Complete_Stream->Streams[elementary_PID]=new complete_stream::stream;
- Complete_Stream->PES_PIDs.erase(elementary_PID);
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEGTS_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.h
deleted file mode 100644
index c378e9dc6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG files, Program Map Section
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Mpeg_PsiH
-#define MediaInfo_Mpeg_PsiH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mpeg_Descriptors.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Mpeg_Psi
-//***************************************************************************
-
-class File_Mpeg_Psi : public File__Analyze
-{
-public :
- //In
- bool From_TS;
- complete_stream* Complete_Stream;
- int16u pid;
-
-public :
- File_Mpeg_Psi();
- ~File_Mpeg_Psi();
-
-private :
- //Buffer - File header
- void FileHeader_Parse();
-
- //Buffer - Per element
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
-
- //Elements - Base
- void Table_reserved();
- void Table_iso13818_6();
- void Table_user_private();
- void Table_forbidden();
-
- //Elements - MPEG
- void program_stream_map(); //From PS
- void Table_00();
- void Table_01();
- void Table_02();
- void Table_03();
- void Table_04() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_05() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_06() {Skip_XX(Element_Size-Element_Offset, "Data");};
- //Elements - DVB
- void Table_38() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_39() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_3A() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_3B() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_3C() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_3D() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_3E() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_3F() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_40();
- void Table_41() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_42();
- void Table_46();
- void Table_4A() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_4E();
- void Table_4F();
- void Table_5F(); //50 --> 5F
- void Table_6F(); //60 --> 6F
- void Table_70();
- void Table_71() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_72() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_73();
- void Table_74() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_75() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_76() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_77() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_78() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_79() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_7E() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_7F();
- //Elements - ASTC
- void Table_C0();
- void Table_C1();
- void Table_C2() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_C3() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_C4() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_C5() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_C6() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_C7();
- void Table_C8() {Table_C9();};
- void Table_C9();
- void Table_CA();
- void Table_CB();
- void Table_CC();
- void Table_CD();
- void Table_CE() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_CF() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_D0() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_D1() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_D2() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_D3() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_D4() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_D5() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_D6();
- void Table_D7() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_D8() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_D9() {Skip_XX(Element_Size-Element_Offset, "Data");};
- void Table_DA() {Table_C9();};
- void Table_FC();
- void Table_FC_00();
- void Table_FC_04();
- void Table_FC_05();
- void Table_FC_05_break_duration();
- void Table_FC_05_splice_time();
- void Table_FC_06();
- void Table_FC_07();
-
- //Helpers
- int16u Descriptors_Size;
- void Descriptors();
- void ATSC_multiple_string_structure(Ztring &Value, const char* Info);
- void SCTE_multilingual_text_string(int8u Size, Ztring &Value, const char* Info);
- Ztring Date_MJD(int16u Date);
- Ztring Time_BCD(int32u Time);
-
- //Items removal
- void program_number_Update();
- void program_number_Remove();
- void elementary_PID_Update(int16u PCR_PID);
- void elementary_PID_Remove();
-
- //Data
- int32u CRC_32;
- int16u transport_stream_id;
- int16u table_id_extension;
- int16u elementary_PID;
- int16u program_number;
- int8u stream_type;
- int16u event_id;
- int8u pointer_field;
- int8u table_id;
- int8u version_number;
- bool current_next_indicator;
- bool section_syntax_indicator;
- bool elementary_PID_IsValid;
- bool program_number_IsValid;
- bool stream_type_IsValid;
- bool event_id_IsValid;
- bool IsATSC;
- bool ForceStreamDisplay;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mxf.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mxf.cpp
deleted file mode 100644
index 5c8024468..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mxf.cpp
+++ /dev/null
@@ -1,12966 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MXF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mxf.h"
-#if defined(MEDIAINFO_DVDIF_YES)
- #include "MediaInfo/Multiple/File_DvDif.h"
-#endif
-#if defined(MEDIAINFO_DVDIF_YES)
- #include "MediaInfo/Multiple/File_DvDif.h"
-#endif
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_VC3_YES)
- #include "MediaInfo/Video/File_Vc3.h"
-#endif
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_ChannelGrouping.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0331_YES)
- #include "MediaInfo/Audio/File_SmpteSt0331.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_SmpteSt0337.h"
-#endif
-#if defined(MEDIAINFO_JPEG_YES)
- #include "MediaInfo/Image/File_Jpeg.h"
-#endif
-#include "MediaInfo/TimeCode.h"
-#include "MediaInfo/File_Unknown.h"
-#include "ZenLib/File.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/Dir.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "ZenLib/Format/Http/Http_Utils.h"
-#include <cfloat>
-#if MEDIAINFO_SEEK
- #include <algorithm>
-#endif //MEDIAINFO_SEEK
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-//
-// PartitionPack
-// Primer
-// Preface
-// --> ContentStorage
-// --> Packages --> Package (Material, Source)
-// --> Tracks --> Track
-// --> Sequence
-// --> StructuralComponents --> StructuralComponent (Timecode, SourceClip)
-// --> Descriptors --> Descriptor (Multiple, Essence)
-// --> Descriptors --> Descriptor (Essence)
-// --> EssenceContainerData
-// --> Identifications --> Identification
-//
-//***************************************************************************
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-#define UUID(NAME, PART1, PART2, PART3, PART4) \
- const int32u NAME##1=0x##PART1; \
- const int32u NAME##2=0x##PART2; \
- const int32u NAME##3=0x##PART3; \
- const int32u NAME##4=0x##PART4; \
-
-namespace Elements
-{
- //Item - Elements - Identifiers and locators - Interpretive - ? - ?
- UUID(MCAChannelID, 060E2B34, 0101010E, 0103040A, 00000000)
-
- //Item - Elements - Identifiers and locators - Locally Unique Identifiers - ?
- UUID(MCALabelDictionaryID, 060E2B34, 0101010E, 01030701, 01000000)
- UUID(MCATagSymbol, 060E2B34, 0101010E, 01030701, 02000000)
- UUID(MCATagName, 060E2B34, 0101010E, 01030701, 03000000)
- UUID(GroupOfSoundfieldGroupsLinkID, 060E2B34, 0101010E, 01030701, 04000000)
- UUID(MCALinkID, 060E2B34, 0101010E, 01030701, 05000000)
- UUID(SoundfieldGroupLinkID, 060E2B34, 0101010E, 01030701, 06000000)
-
- //Item - Elements - Identifiers and locators - Locally Unique Locators - ?
- UUID(MCAPartitionKind, 060E2B34, 0101010E, 01040105, 00000000)
- UUID(MCAPartitionNumber, 060E2B34, 0101010E, 01040106, 00000000)
-
- //Item - Elements - Identifiers and locators - Titles
- UUID(MCATitle, 060E2B34, 0101010E, 01051000, 00000000)
- UUID(MCATitleVersion, 060E2B34, 0101010E, 01051100, 00000000)
- UUID(MCATitleSubVersion, 060E2B34, 0101010E, 01051200, 00000000)
- UUID(MCAEpisode, 060E2B34, 0101010E, 01051300, 00000000)
-
- //Item - Elements - Interpretive - Fundamental - Countries and Languages - Spoken Language Codes
- UUID(PrimarySpokenLanguage, 060E2B34, 01010107, 03010102, 03010000)
- UUID(SecondarySpokenLanguage, 060E2B34, 01010107, 03010102, 03020000)
- UUID(OriginalSpokenLanguage, 060E2B34, 01010107, 03010102, 03030000)
- UUID(SecondaryOriginalSpokenLanguage, 060E2B34, 01010107, 03010102, 03040000)
- UUID(PrimaryExtendedSpokenLanguage, 060E2B34, 01010107, 03010102, 03110000)
- UUID(SecondaryExtendedSpokenLanguage, 060E2B34, 01010107, 03010102, 03120000)
- UUID(OriginalExtendedSpokenLanguage, 060E2B34, 01010107, 03010102, 03130000)
- UUID(SecondaryOriginalExtendedSpokenLanguage, 060E2B34, 01010107, 03010102, 03140000)
- UUID(RFC5646AudioLanguageCode, 060E2B34, 0101010D, 03010102, 03150000)
-
- //Item - Elements - Interpretive - Fundamental - Data Interpretations and Definitions - Name-Value Construct Interpretations
- UUID(Ansi_01, 060E2B34, 01010105, 0301020A, 01000000)
- UUID(UTF16_01, 060E2B34, 01010105, 0301020A, 01010000)
- UUID(Ansi_02, 060E2B34, 01010105, 0301020A, 02000000)
- UUID(UTF16_02, 060E2B34, 01010105, 0301020A, 02010000)
-
- //Item - Elements - Interpretive - Fundamental - Data Interpretations and Definitions - KLV Interpretations
- UUID(Filler01, 060E2B34, 01010101, 03010210, 01000000)
- UUID(Filler02, 060E2B34, 01010102, 03010210, 01000000)
- UUID(TerminatingFiller, 060E2B34, 01010102, 03010210, 05000000)
-
- //Item - Elements - Interpretive - Fundamental - Data Interpretations and Definitions - XML Constructs and Interpretations
- UUID(XmlDocumentText, 060E2B34, 01010105, 03010220, 01000000)
-
- //Item - Elements - Interpretive - Human Assigned Descriptors
- UUID(MCAAudioContentKind, 060E2B34, 0101010E, 03020102, 20000000)
- UUID(MCAAudioElementKind, 060E2B34, 0101010E, 03020102, 21000000)
-
- //Item - Elements - Parametric - Video and Image Essence Characteristics - Digital Video and Image Compression Parameters - MPEG Coding Parameters - MPEG-2 Coding Parameters
- UUID(MPEG2VideoDescriptor_SingleSequence, 060E2B34, 01010105, 04010602, 01020000)
- UUID(MPEG2VideoDescriptor_ConstantBFrames, 060E2B34, 01010105, 04010602, 01030000)
- UUID(MPEG2VideoDescriptor_CodedContentType, 060E2B34, 01010105, 04010602, 01040000)
- UUID(MPEG2VideoDescriptor_LowDelay, 060E2B34, 01010105, 04010602, 01050000)
- UUID(MPEG2VideoDescriptor_ClosedGOP, 060E2B34, 01010105, 04010602, 01060000)
- UUID(MPEG2VideoDescriptor_IdenticalGOP, 060E2B34, 01010105, 04010602, 01070000)
- UUID(MPEG2VideoDescriptor_MaxGOP, 060E2B34, 01010105, 04010602, 01080000)
- UUID(MPEG2VideoDescriptor_BPictureCount, 060E2B34, 01010105, 04010602, 01090000)
- UUID(MPEG2VideoDescriptor_ProfileAndLevel, 060E2B34, 01010105, 04010602, 010A0000)
- UUID(MPEG2VideoDescriptor_BitRate, 060E2B34, 01010105, 04010602, 010B0000)
-
- //Item - Elements - Parametric - Video and Image Essence Characteristics - Digital Video and Image Compression Parameters - JPEG 2000 Coding Parameters
- UUID(JPEG2000PictureSubDescriptor_Rsiz, 060E2B34, 0101010A, 04010603, 01000000)
- UUID(JPEG2000PictureSubDescriptor_Xsiz, 060E2B34, 0101010A, 04010603, 02000000)
- UUID(JPEG2000PictureSubDescriptor_Ysiz, 060E2B34, 0101010A, 04010603, 03000000)
- UUID(JPEG2000PictureSubDescriptor_XOsiz, 060E2B34, 0101010A, 04010603, 04000000)
- UUID(JPEG2000PictureSubDescriptor_YOsiz, 060E2B34, 0101010A, 04010603, 05000000)
- UUID(JPEG2000PictureSubDescriptor_XTsiz, 060E2B34, 0101010A, 04010603, 06000000)
- UUID(JPEG2000PictureSubDescriptor_YTsiz, 060E2B34, 0101010A, 04010603, 07000000)
- UUID(JPEG2000PictureSubDescriptor_XTOsiz, 060E2B34, 0101010A, 04010603, 08000000)
- UUID(JPEG2000PictureSubDescriptor_YTOsiz, 060E2B34, 0101010A, 04010603, 09000000)
- UUID(JPEG2000PictureSubDescriptor_Csiz, 060E2B34, 0101010A, 04010603, 0A000000)
- UUID(JPEG2000PictureSubDescriptor_PictureComponentSizing, 060E2B34, 0101010A, 04010603, 0B000000)
- UUID(JPEG2000PictureSubDescriptor_CodingStyleDefault, 060E2B34, 0101010A, 04010603, 0C000000)
- UUID(JPEG2000PictureSubDescriptor_QuantizationDefault, 060E2B34, 0101010A, 04010603, 0D000000)
-
- //Item - Elements - Relational - Essence and Metadata Relationships - Essence to Essence Relationships
- UUID(SubDescriptors, 060E2B34, 01010109, 06010104, 06100000)
-
- //Item - Elements - User organization registred for public use - AAF Association - Generic Container - Version 1
- UUID(GenericContainer_Aaf, 060E2B34, 01020101, 0D010301, 00000000)
-
- //Groups - Elements - User organization registred for public use - AAF Association - AAF Attributes - AAF Information Attributes - Version 1 - Enumerated Attributes
- UUID(Sequence, 060E2B34, 02530101, 0D010101, 01010F00)
- UUID(SourceClip, 060E2B34, 02530101, 0D010101, 01011100)
- UUID(TimecodeComponent, 060E2B34, 02530101, 0D010101, 01011400)
- UUID(ContentStorage, 060E2B34, 02530101, 0D010101, 01011800)
- UUID(EssenceContainerData, 060E2B34, 02530101, 0D010101, 01012300)
- UUID(GenericPictureEssenceDescriptor, 060E2B34, 02530101, 0D010101, 01012700)
- UUID(CDCIEssenceDescriptor, 060E2B34, 02530101, 0D010101, 01012800)
- UUID(RGBAEssenceDescriptor, 060E2B34, 02530101, 0D010101, 01012900)
- UUID(Preface, 060E2B34, 02530101, 0D010101, 01012F00)
- UUID(Identification, 060E2B34, 02530101, 0D010101, 01013000)
- UUID(NetworkLocator, 060E2B34, 02530101, 0D010101, 01013200)
- UUID(TextLocator, 060E2B34, 02530101, 0D010101, 01013300)
- UUID(StereoscopicPictureSubDescriptor, 060E2B34, 0253010C, 0D010101, 01016300) // SMPTE ST 0429-10
- UUID(MaterialPackage, 060E2B34, 02530101, 0D010101, 01013600)
- UUID(SourcePackage, 060E2B34, 02530101, 0D010101, 01013700)
- UUID(EventTrack, 060E2B34, 02530101, 0D010101, 01013900)
- UUID(StaticTrack, 060E2B34, 02530101, 0D010101, 01013A00)
- UUID(Track, 060E2B34, 02530101, 0D010101, 01013B00)
- UUID(DMSegment, 060E2B34, 02530101, 0D010101, 01014100)
- UUID(GenericSoundEssenceDescriptor, 060E2B34, 02530101, 0D010101, 01014200)
- UUID(GenericDataEssenceDescriptor, 060E2B34, 02530101, 0D010101, 01014300)
- UUID(MultipleDescriptor, 060E2B34, 02530101, 0D010101, 01014400)
- UUID(DMSourceClip, 060E2B34, 02530101, 0D010101, 01014500)
- UUID(AES3PCMDescriptor, 060E2B34, 02530101, 0D010101, 01014700)
- UUID(WaveAudioDescriptor, 060E2B34, 02530101, 0D010101, 01014800)
- UUID(MPEG2VideoDescriptor, 060E2B34, 02530101, 0D010101, 01015100)
- UUID(JPEG2000PictureSubDescriptor, 060E2B34, 02530101, 0D010101, 01015A00)
- UUID(VbiPacketsDescriptor, 060E2B34, 02530101, 0D010101, 01015B00)
- UUID(AncPacketsDescriptor, 060E2B34, 02530101, 0D010101, 01015C00)
- UUID(PackageMarkerObject, 060E2B34, 02530101, 0D010101, 01016000)
- UUID(ApplicationPlugInObject, 060E2B34, 02530101, 0D010101, 01016100)
- UUID(ApplicationReferencedObject, 060E2B34, 02530101, 0D010101, 01016200)
- UUID(MCALabelSubDescriptor, 060E2B34, 02530101, 0D010101, 01016A00) // SMPTE ST 0377-4-2012
- UUID(AudioChannelLabelSubDescriptor, 060E2B34, 02530101, 0D010101, 01016B00) // SMPTE ST 0377-4-2012
- UUID(SoundfieldGroupLabelSubDescriptor, 060E2B34, 02530101, 0D010101, 01016C00) // SMPTE ST 0377-4-2012
- UUID(GroupOfSoundfieldGroupsLabelSubDescriptor, 060E2B34, 02530101, 0D010101, 01016D00) // SMPTE ST 0377-4-2012
-
- //Groups - Elements - User organization registred for public use - AAF Association - ? - Version 1 - ?
- UUID(OpenIncompleteHeaderPartition, 060E2B34, 02050101, 0D010201, 01020100)
- UUID(ClosedIncompleteHeaderPartition, 060E2B34, 02050101, 0D010201, 01020200)
- UUID(OpenCompleteHeaderPartition, 060E2B34, 02050101, 0D010201, 01020300)
- UUID(ClosedCompleteHeaderPartition, 060E2B34, 02050101, 0D010201, 01020400)
- UUID(OpenIncompleteBodyPartition, 060E2B34, 02050101, 0D010201, 01030100)
- UUID(ClosedIncompleteBodyPartition, 060E2B34, 02050101, 0D010201, 01030200)
- UUID(OpenCompleteBodyPartition, 060E2B34, 02050101, 0D010201, 01030300)
- UUID(ClosedCompleteBodyPartition, 060E2B34, 02050101, 0D010201, 01030400)
- UUID(OpenIncompleteFooterPartition, 060E2B34, 02050101, 0D010201, 01040100)
- UUID(ClosedIncompleteFooterPartition, 060E2B34, 02050101, 0D010201, 01040200)
- UUID(OpenCompleteFooterPartition, 060E2B34, 02050101, 0D010201, 01040300)
- UUID(ClosedCompleteFooterPartition, 060E2B34, 02050101, 0D010201, 01040400)
-
- //Groups - Elements - User organization registred for public use - AAF Association - ? - Version 1 - ?
- UUID(Primer, 060E2B34, 02050101, 0D010201, 01050100)
-
- //Groups - Elements - User organization registred for public use - AAF Association - ? - Version 1 - ?
- UUID(IndexTableSegment, 060E2B34, 02530101, 0D010201, 01100100)
-
- //Groups - Elements - User organization registred for public use - AAF Association - ? - Version 1 - ?
- UUID(RandomIndexMetadata, 060E2B34, 02050101, 0D010201, 01110100)
-
- //Groups - Elements - User organization registred for public use - AAF Association - ? - Version 1 - ? (SDTI-CP (SMPTE 385M))
- UUID(SDTI_SystemMetadataPack, 060E2B34, 02050101, 0D010301, 04010100)
- UUID(SDTI_PackageMetadataSet, 060E2B34, 02430101, 0D010301, 04010200)
- UUID(SDTI_PictureMetadataSet, 060E2B34, 02430101, 0D010301, 04010300)
- UUID(SDTI_SoundMetadataSet, 060E2B34, 02430101, 0D010301, 04010400)
- UUID(SDTI_DataMetadataSet, 060E2B34, 02430101, 0D010301, 04010500)
- UUID(SDTI_ControlMetadataSet, 060E2B34, 02630101, 0D010301, 04010600)
-
- //Groups - Elements - User organization registred for public use - AAF Association - ? - Version 1 - ? (SystemScheme (SMPTE 405M))
- UUID(SystemScheme1, 060E2B34, 02530101, 0D010301, 14020000)
-
- //Groups - Elements - User organization registred for public use - AAF Association - Descriptive Metadata Scheme - Version 1 (SystemScheme (SMPTE 380M))
- UUID(DMScheme1, 060E2B34, 02530101, 0D010401, 01010100)
-
- //Item - Elements - User organization registred for private use - Avid - Generic Container - Version 1
- UUID(GenericContainer_Avid, 060E2B34, 01020101, 0E040301, 00000000)
-
- //Item - Elements - User organization registred for private use - Sony - Generic Container - Version 6
- UUID(GenericContainer_Sony, 060E2B34, 01020101, 0E067F03, 00000000)
-
- //Groups - Elements - User organization registred for private use - Omneon Video Networks
- UUID(Omneon_010201010100, 060E2B34, 02530105, 0E0B0102, 01010100)
- UUID(Omneon_010201020100, 060E2B34, 02530105, 0E0B0102, 01020100)
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_Category(int8u Category)
-{
- switch(Category)
- {
- case 0x01 : return "Item";
- case 0x02 : return "Group (Set/Pack)";
- case 0x03 : return "Wrapper";
- case 0x04 : return "Value";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_Registry(int8u Category, int8u Registry)
-{
- switch(Category)
- {
- case 0x01 : //"Item"
- switch(Registry)
- {
- case 0x01 : return "Metadata";
- case 0x02 : return "Essence";
- default : return "";
- }
- case 0x02 : //"Group (Set/Pack)"
- switch(Registry)
- {
- case 0x05 : return "Predefined items";
- case 0x43 : return "1-byte tag, 2-byte length";
- case 0x53 : return "2-byte tag, 2-byte length";
- case 0x63 : return "1-byte tag, 4-byte length";
- default : return "";
- }
- case 0x04 : //"Value"
- switch(Registry)
- {
- case 0x01 : return "Fixed";
- default : return "";
- }
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_Structure(int8u Category, int8u Registry, int8u Structure)
-{
- switch(Category)
- {
- case 0x01 : //"Item"
- switch(Registry)
- {
- case 0x02 : //Essence
- switch(Structure)
- {
- case 0x01 : return "Standard";
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_MPEG2_CodedContentType(int8u CodedContentType)
-{
- switch(CodedContentType)
- {
- case 0x01 : return "Progressive";
- case 0x02 : return "Interlaced";
- case 0x03 : return ""; //Mixed
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_OperationalPattern(const int128u OperationalPattern)
-{
- //Item and Package Complexity
- int32u Code_Compare4=(int32u)OperationalPattern.lo;
- switch ((int8u)(Code_Compare4>>24))
- {
- case 0x01 : switch ((int8u)(Code_Compare4>>16))
- {
- case 0x01 : return "OP-1a";
- case 0x02 : return "OP-1b";
- case 0x03 : return "OP-1c";
- default : return "";
- }
- case 0x02 : switch ((int8u)(Code_Compare4>>16))
- {
- case 0x01 : return "OP-2a";
- case 0x02 : return "OP-2b";
- case 0x03 : return "OP-2c";
- default : return "";
- }
- case 0x03 : switch ((int8u)(Code_Compare4>>16))
- {
- case 0x01 : return "OP-3a";
- case 0x02 : return "OP-3b";
- case 0x03 : return "OP-3c";
- default : return "";
- }
- case 0x10 : return "OP-Atom";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_EssenceElement(const int128u EssenceElement)
-{
- if ((EssenceElement.hi&0xFFFFFFFFFFFFFF00LL)!=0x060E2B3401020100LL)
- return "";
-
- int8u Code1=(int8u)((EssenceElement.lo&0xFF00000000000000LL)>>56);
- int8u Code2=(int8u)((EssenceElement.lo&0x00FF000000000000LL)>>48);
- int8u Code5=(int8u)((EssenceElement.lo&0x00000000FF000000LL)>>24);
- int8u Code7=(int8u)((EssenceElement.lo&0x000000000000FF00LL)>> 8);
-
- switch (Code1)
- {
- case 0x0E : //Private
- switch (Code2)
- {
- case 0x06 : //Sony
- case 0x15 : //GC Picture
- switch (Code5)
- {
- case 0x15 : return "Sony private picture stream";
- default : return "Sony private stream";
- }
- default : return "Unknown private stream";
- }
- default : ;
- }
-
- switch (Code5)
- {
- case 0x05 : //CP Picture (SMPTE 386M)
- switch (Code7)
- {
- case 0x01 : return "D-10 Video";
- default : return "Unknown stream";
- }
- case 0x06 : //CP Sound (SMPTE 386M)
- switch (Code7)
- {
- case 0x10 : return "D-10 Audio";
- default : return "Unknown stream";
- }
- case 0x07 : //CP Data (SMPTE 386M)
- return "";
- case 0x14 : //MXF in MXF?
- switch (Code7)
- {
- case 0x01 : return "MXF in MXF?";
- default : return "Unknown stream";
- }
- case 0x15 : //GC Picture
- switch (Code7)
- {
- case 0x01 : return "RGB";
- case 0x05 : return "MPEG stream (Frame)";
- case 0x06 : return "MPEG stream (Clip)";
- case 0x07 : return "MPEG stream (Custom)";
- case 0x08 : return "JPEG 2000";
- default : return "Unknown stream";
- }
- case 0x16 : //GC Sound
- switch (Code7)
- {
- case 0x01 : return "PCM"; //BWF
- case 0x02 : return "PCM"; //BWF
- case 0x03 : return "PCM"; //DV Audio
- case 0x04 : return "PCM"; //BWF
- case 0x05 : return "MPEG Audio / AC-3";
- case 0x0A : return "A-law";
- default : return "Unknown stream";
- }
- case 0x17 : //GC Data
- switch (Code7)
- {
- case 0x01 : return "VBI"; //Frame-Wrapped VBI Data Element
- case 0x02 : return "ANC"; //Frame-Wrapped ANC Data Element
- default : return "Unknown stream";
- }
- case 0x18 : //GC Compound
- switch (Code7)
- {
- case 0x01 : return "DV"; //Frame
- case 0x02 : return "DV"; //Clip
- default : return "Unknown stream";
- }
- default : return "Unknown stream";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_EssenceContainer(const int128u EssenceContainer)
-{
- if ((EssenceContainer.hi&0xFFFFFFFFFFFFFF00LL)!=0x060E2B3404010100LL)
- return "";
-
- int8u Code1=(int8u)((EssenceContainer.lo&0xFF00000000000000LL)>>56);
- int8u Code2=(int8u)((EssenceContainer.lo&0x00FF000000000000LL)>>48);
- int8u Code3=(int8u)((EssenceContainer.lo&0x0000FF0000000000LL)>>40);
- int8u Code4=(int8u)((EssenceContainer.lo&0x000000FF00000000LL)>>32);
- int8u Code5=(int8u)((EssenceContainer.lo&0x00000000FF000000LL)>>24);
- int8u Code6=(int8u)((EssenceContainer.lo&0x0000000000FF0000LL)>>16);
- int8u Code7=(int8u)((EssenceContainer.lo&0x000000000000FF00LL)>> 8);
-
- switch (Code1)
- {
- case 0x0D : //Public Use
- switch (Code2)
- {
- case 0x01 : //AAF
- switch (Code3)
- {
- case 0x03 : //Essence Container Application
- switch (Code4)
- {
- case 0x01 : //MXF EC Structure version
- switch (Code5)
- {
- case 0x02 : //Essence container kind
- switch (Code6)
- {
- case 0x01 : return "D-10"; // Video and Audio
- case 0x02 : return "DV";
- case 0x05 : return "Uncompressed pictures";
- case 0x06 : return "PCM";
- case 0x04 : return "MPEG ES mappings with Stream ID";
- case 0x0A : return "A-law";
- case 0x0C : return "JPEG 2000";
- case 0x10 : return "AVC";
- case 0x11 : return "VC-3";
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- case 0x0E : //Private Use
- switch (Code2)
- {
- case 0x04 : //Avid
- switch (Code3)
- {
- case 0x03 : //Essence Container Application
- switch (Code4)
- {
- case 0x01 : //MXF EC Structure version
- switch (Code5)
- {
- case 0x02 : //Essence container kind
- switch (Code6)
- {
- case 0x06 : return "VC-3";
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- case 0x06 : //Sony
- switch (Code3)
- {
- case 0x0D :
- switch (Code4)
- {
- case 0x03 :
- switch (Code5)
- {
- case 0x02 :
- switch (Code6)
- {
- case 0x01 :
- switch (Code7)
- {
- case 0x01 : return "Sony RAW?";
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_EssenceContainer_Mapping(int8u Code6, int8u Code7, int8u Code8)
-{
- switch (Code6)
- {
- case 0x01 : //D-10, SMPTE 386M
- return "Frame (D-10)";
- case 0x02 : //DV, SMPTE 383M
- switch (Code8)
- {
- case 0x01 : return "Frame";
- case 0x02 : return "Clip";
- default : return "";
- }
- case 0x04 : //MPEG ES, SMPTE 381M
- case 0x07 : //MPEG PES, SMPTE 381M
- case 0x08 : //MPEG PS, SMPTE 381M
- case 0x09 : //MPEG TS, SMPTE 381M
- case 0x10 : //AVC
- case 0x15 : //YUV
- switch (Code8)
- {
- case 0x01 : return "Frame";
- case 0x02 : return "Clip";
- case 0x03 : return "Custom: Stripe";
- case 0x04 : return "Custom: PES";
- case 0x05 : return "Custom: Fixed Audio Size";
- case 0x06 : return "Custom: Splice";
- case 0x07 : return "Custom: Closed GOP";
- case 0x08 : return "Custom: Slave";
- case 0x7F : return "Custom";
- default : return "";
- }
- case 0x05 : //Uncompressed pictures, SMPTE 384M
- switch (Code8)
- {
- case 0x01 : return "Frame";
- case 0x02 : return "Clip";
- case 0x03 : return "Line";
- default : return "";
- }
- case 0x06 : //AES-PCM, SMPTE 382M
- switch (Code7)
- {
- case 0x01 : return "Frame (BWF)";
- case 0x02 : return "Clip (BWF)";
- case 0x03 : return "Frame (AES)";
- case 0x04 : return "Clip (AES)";
- case 0x08 : return "Custom (BWF)";
- case 0x09 : return "Custom (AES)";
- default : return "";
- }
- case 0x0A : //A-Law
- switch (Code7)
- {
- case 0x01 : return "Frame";
- case 0x02 : return "Clip";
- case 0x03 : return "?";
- case 0x07 : return "Custom";
- default : return "";
- }
- case 0x0C : //JPEG 2000
- switch (Code7)
- {
- case 0x01 : return "Frame";
- case 0x02 : return "Clip";
- default : return "";
- }
- case 0x11 : //VC-3, SMPTE 2019-4
- switch (Code7)
- {
- case 0x01 : return "Frame";
- case 0x02 : return "Clip";
- default : return "";
- }
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_EssenceCompression(const int128u EssenceCompression)
-{
- if ((EssenceCompression.hi&0xFFFFFFFFFFFFFF00LL)!=0x060E2B3404010100LL || !((EssenceCompression.lo&0xFF00000000000000LL)==0x0400000000000000LL || (EssenceCompression.lo&0xFF00000000000000LL)==0x0E00000000000000LL))
- return "";
-
- int8u Code1=(int8u)((EssenceCompression.lo&0xFF00000000000000LL)>>56);
- int8u Code2=(int8u)((EssenceCompression.lo&0x00FF000000000000LL)>>48);
- int8u Code3=(int8u)((EssenceCompression.lo&0x0000FF0000000000LL)>>40);
- int8u Code4=(int8u)((EssenceCompression.lo&0x000000FF00000000LL)>>32);
- int8u Code5=(int8u)((EssenceCompression.lo&0x00000000FF000000LL)>>24);
- int8u Code6=(int8u)((EssenceCompression.lo&0x0000000000FF0000LL)>>16);
- int8u Code7=(int8u)((EssenceCompression.lo&0x000000000000FF00LL)>> 8);
-
- switch (Code1)
- {
- case 0x04 : //
- switch (Code2)
- {
- case 0x01 : //Picture
- switch (Code3)
- {
- case 0x02 : //Coding characteristics
- switch (Code4)
- {
- case 0x01 : //Uncompressed coding
- switch (Code5)
- {
- case 0x01 : //Uncompressed picture coding
- return "YUV";
- default : return "";
- }
- case 0x02 : //Compressed coding
- switch (Code5)
- {
- case 0x01 : //MPEG Compression
- switch (Code6)
- {
- case 0x00 : return "MPEG Video";
- case 0x01 : return "MPEG Video"; //Version 2
- case 0x02 : return "MPEG Video"; //Version 2
- case 0x03 : return "MPEG Video"; //Version 2
- case 0x04 : return "MPEG Video"; //Version 2
- case 0x11 : return "MPEG Video"; //Version 1
- case 0x20 : return "MPEG-4 Visual";
- case 0x30 :
- case 0x31 :
- case 0x32 :
- case 0x33 :
- case 0x34 :
- case 0x35 :
- case 0x36 :
- case 0x37 :
- case 0x38 :
- case 0x39 :
- case 0x3A :
- case 0x3B :
- case 0x3C :
- case 0x3D :
- case 0x3E :
- case 0x3F : return "AVC";
- default : return "";
- }
- case 0x02 : return "DV";
- case 0x03 : //Individual Picture Coding Schemes
- switch (Code6)
- {
- case 0x01 : return "JPEG 2000";
- default : return "";
- }
- case 0x71 : return "VC-3";
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- case 0x02 : //Sound
- switch (Code3)
- {
- case 0x02 : //Coding characteristics
- switch (Code4)
- {
- case 0x01 : //Uncompressed Sound Coding
- switch (Code5)
- {
- case 0x00 : return "PCM";
- case 0x01 : return "PCM";
- case 0x7E : return "PCM"; //AIFF
- case 0x7F : return "PCM"; // TODO: Undefined
- default : return "";
- }
- case 0x02 : //Compressed coding
- switch (Code5)
- {
- case 0x03 : //Compressed Audio Coding
- switch (Code6)
- {
- case 0x01 : //Compandeded Audio Coding
- switch (Code7)
- {
- case 0x01 : return "A-law";
- case 0x10 : return "DV Audio"; //DV 12-bit
- default : return ""; //Unknown
- }
- case 0x02 : //SMPTE 338M Audio Coding
- switch (Code7)
- {
- case 0x01 : return "AC-3";
- case 0x04 : return "MPEG-1 Audio Layer 1";
- case 0x05 : return "MPEG-1 Audio Layer 2 or 3";
- case 0x06 : return "MPEG-2 Audio Layer 1";
- case 0x1C : return "Dolby E";
- default : return ""; //Unknown
- }
- case 0x03 : //MPEG-2 Coding (not defined in SMPTE 338M)
- switch (Code7)
- {
- case 0x01 : return "AAC version 2";
- default : return ""; //Unknown
- }
- case 0x04 : //MPEG-4 Audio Coding
- switch (Code7)
- {
- case 0x01 : return "MPEG-4 Speech Profile";
- case 0x02 : return "MPEG-4 Synthesis Profile";
- case 0x03 : return "MPEG-4 Scalable Profile";
- case 0x04 : return "MPEG-4 Main Profile";
- case 0x05 : return "MPEG-4 High Quality Audio Profile";
- case 0x06 : return "MPEG-4 Low Delay Audio Profile";
- case 0x07 : return "MPEG-4 Natural Audio Profile";
- case 0x08 : return "MPEG-4 Mobile Audio Internetworking Profile";
- default : return ""; //Unknown
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- case 0x0E : //Private Use
- switch (Code2)
- {
- case 0x04 : //Avid
- switch (Code3)
- {
- case 0x02 : //Essence Compression ?
- switch (Code4)
- {
- case 0x01 : //?
- switch (Code5)
- {
- case 0x02 : //?
- switch (Code6)
- {
- case 0x04 : return "VC-3";
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- case 0x06 : //Sony
- switch (Code3)
- {
- case 0x04 :
- switch (Code4)
- {
- case 0x01 :
- switch (Code5)
- {
- case 0x02 :
- switch (Code6)
- {
- case 0x04 :
- switch (Code7)
- {
- case 0x02 : return "Sony RAW SQ";
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_EssenceCompression_Version(const int128u EssenceCompression)
-{
- int8u Code2=(int8u)((EssenceCompression.lo&0x00FF000000000000LL)>>48);
- int8u Code3=(int8u)((EssenceCompression.lo&0x0000FF0000000000LL)>>40);
- int8u Code4=(int8u)((EssenceCompression.lo&0x000000FF00000000LL)>>32);
- int8u Code5=(int8u)((EssenceCompression.lo&0x00000000FF000000LL)>>24);
- int8u Code6=(int8u)((EssenceCompression.lo&0x0000000000FF0000LL)>>16);
- int8u Code7=(int8u)((EssenceCompression.lo&0x000000000000FF00LL)>> 8);
-
- switch (Code2)
- {
- case 0x01 : //Picture
- switch (Code3)
- {
- case 0x02 : //Coding characteristics
- switch (Code4)
- {
- case 0x02 : //Compressed coding
- switch (Code5)
- {
- case 0x01 : //MPEG Compression
- switch (Code6)
- {
- case 0x01 : return "Version 2";
- case 0x02 : return "Version 2";
- case 0x03 : return "Version 2";
- case 0x04 : return "Version 2";
- case 0x11 : return "Version 1";
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- case 0x02 : //Sound
- switch (Code3)
- {
- case 0x02 : //Coding characteristics
- switch (Code4)
- {
- case 0x02 : //Compressed coding
- switch (Code5)
- {
- case 0x03 : //Compressed Audio Coding
- switch (Code6)
- {
- case 0x02 : //SMPTE 338M Audio Coding
- switch (Code7)
- {
- case 0x04 : return "Version 1"; //Layer 1
- case 0x05 : return "Version 1"; //Layer 2 or 3
- case 0x06 : return "Version 2"; //Layer 1
- default : return ""; //Unknown
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_Sequence_DataDefinition(const int128u DataDefinition)
-{
- int8u Code4=(int8u)((DataDefinition.lo&0x000000FF00000000LL)>>32);
- int8u Code5=(int8u)((DataDefinition.lo&0x00000000FF000000LL)>>24);
-
- switch (Code4)
- {
- case 0x01 : return "Time";
- case 0x02 :
- switch (Code5)
- {
- case 0x01 : return "Picture";
- case 0x02 : return "Sound";
- case 0x03 : return "Data";
- default : return "";
- }
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_FrameLayout(int8u FrameLayout)
-{
- switch (FrameLayout)
- {
- case 0x00 : return "Full frame";
- case 0x01 : return "Separated fields";
- case 0x02 : return "Single field";
- case 0x03 : return "Mixed fields";
- case 0x04 : return "Segmented frame";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_FrameLayout_ScanType(int8u FrameLayout)
-{
- switch (FrameLayout)
- {
- case 0x01 :
- case 0x04 :
- case 0xFF : //Seen in one file
- return "Interlaced";
- default :
- return "Progressive";
- }
-}
-
-//---------------------------------------------------------------------------
-int8u Mxf_FrameLayout_Multiplier(int8u FrameLayout)
-{
- switch (FrameLayout)
- {
- case 0x01 :
- case 0x04 :
- case 0xFF : //Seen in one file
- return 2;
- default :
- return 1;
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_ColorPrimaries(const int128u ColorPrimaries)
-{
- int32u Code_Compare4=(int32u)ColorPrimaries.lo;
- switch ((int8u)(Code_Compare4>>16))
- {
- case 0x01 : return "BT.601 NTSC";
- case 0x02 : return "BT.470 System B";
- case 0x03 : return "BT.709";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_TransferCharacteristic(const int128u TransferCharacteristic)
-{
- int32u Code_Compare4=(int32u)TransferCharacteristic.lo;
- switch ((int8u)(Code_Compare4>>16))
- {
- case 0x01 : return "BT.470";
- case 0x02 : return "BT.709";
- case 0x03 : return "SMPTE 240M";
- case 0x04 : return "SMPTE 274M";
- case 0x05 : return "BT.1361 extended colour gamut system";
- case 0x06 : return "Linear";
- case 0x07 : return "SMPTE 428M";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_CodingEquations(const int128u CodingEquations)
-{
- int32u Code_Compare4=(int32u)CodingEquations.lo;
- switch ((int8u)(Code_Compare4>>16))
- {
- case 0x01 : return "BT.601";
- case 0x02 : return "BT.709";
- case 0x03 : return "SMPTE 240M";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_ChannelAssignment_ChannelPositions(const int128u ChannelLayout, int32u ChannelsCount)
-{
- //Sound Channel Labeling
- if ((ChannelLayout.hi&0xFFFFFFFFFFFFFF00LL)!=0x060E2B3404010100LL && (ChannelLayout.lo&0xFFFFFFFF00000000LL)!=0x0402021000000000LL)
- return "";
-
- int8u Code5=(int8u)((ChannelLayout.lo&0x00000000FF000000LL)>>24);
- int8u Code6=(int8u)((ChannelLayout.lo&0x0000000000FF0000LL)>>16);
- int8u Code7=(int8u)((ChannelLayout.lo&0x000000000000FF00LL)>> 8);
-
- switch (Code5)
- {
- case 0x03 : //SMPTE 429-2
- switch (Code6)
- {
- case 0x01 : //Sets
- switch (Code7)
- {
- case 0x01 : //Config 1
- switch (ChannelsCount)
- {
- case 6 : return "Front: L C R, Side: L R, LFE";
- default : return "Front: L C R, Side: L R, LFE, HI, VI-N";
- }
- case 0x02 : //Config 2
- switch (ChannelsCount)
- {
- case 6 : return "Front: L C R, Side: L R, LFE";
- case 8 : return "Front: L C R, Side: L R, Back: C, LFE";
- default : return "Front: L C R, Side: L R, Back: C, LFE, HI, VI-N";
- }
- case 0x03 : //Config 3
- switch (ChannelsCount)
- {
- case 6 : return "Front: L C R, Side: L R, LFE";
- case 8 : return "Front: L C R, Side: L R, Back: L R, LFE";
- default : return "Front: L C R, Side: L R, Back: L R, LFE, HI, VI-N";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_ChannelAssignment_ChannelPositions2(const int128u ChannelLayout, int32u ChannelsCount=(int32u)-1)
-{
- //Sound Channel Labeling
- if ((ChannelLayout.hi&0xFFFFFFFFFFFFFF00LL)!=0x060E2B3404010100LL && (ChannelLayout.lo&0xFFFFFFFF00000000LL)!=0x0402021000000000LL)
- return "";
-
- int8u Code5=(int8u)((ChannelLayout.lo&0x00000000FF000000LL)>>24);
- int8u Code6=(int8u)((ChannelLayout.lo&0x0000000000FF0000LL)>>16);
- int8u Code7=(int8u)((ChannelLayout.lo&0x000000000000FF00LL)>> 8);
-
- switch (Code5)
- {
- case 0x03 : //SMPTE 429-2
- switch (Code6)
- {
- case 0x01 : //Sets
- switch (Code7)
- {
- case 0x01 : //Config 1
- switch (ChannelsCount)
- {
- case 6 : return "3/2/0.1";
- default : return "3/2/0.1+2";
- }
- case 0x02 : //Config 2
- switch (ChannelsCount)
- {
- case 6 : return "3/2/0.1";
- case 8 : return "3/2/1.1";
- default : return "3/2/1.1+2";
- }
- case 0x03 : //Config 3
- switch (ChannelsCount)
- {
- case 6 : return "3/2/0.1";
- case 8 : return "3/2/2.1";
- default : return "3/2/2.1+2";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Mxf_ChannelAssignment_ChannelLayout(const int128u ChannelLayout, int32u ChannelsCount=(int32u)-1)
-{
- //Sound Channel Labeling
- if ((ChannelLayout.hi&0xFFFFFFFFFFFFFF00LL)!=0x060E2B3404010100LL && (ChannelLayout.lo&0xFFFFFFFF00000000LL)!=0x0402021000000000LL)
- return "";
-
- int8u Code5=(int8u)((ChannelLayout.lo&0x00000000FF000000LL)>>24);
- int8u Code6=(int8u)((ChannelLayout.lo&0x0000000000FF0000LL)>>16);
- int8u Code7=(int8u)((ChannelLayout.lo&0x000000000000FF00LL)>> 8);
-
- switch (Code5)
- {
- case 0x03 : //SMPTE 429-2
- switch (Code6)
- {
- case 0x01 : //Sets
- switch (Code7)
- {
- case 0x01 : //Config 1
- switch (ChannelsCount)
- {
- case 6 : return "L R C LFE Ls Rs";
- default : return "L R C LFE Ls Rs HI VI-N";
- }
- case 0x02 : //Config 2
- switch (ChannelsCount)
- {
- case 6 : return "L R C LFE Ls Rs";
- case 8 : return "L R C LFE Ls Rs Cs X";
- default : return "L R C LFE Ls Rs Cs X HI VI-N";
- }
- case 0x03 : //Config 3
- switch (ChannelsCount)
- {
- case 6 : return "L R C LFE Ls Rs";
- case 8 : return "L R C LFE Ls Rs Rls Rrs";
- default : return "L R C LFE Ls Rs Rls Rrs HI VI-N";
- }
- default : return "";
- }
- default : return "";
- }
- default : return "";
- }
-}
-const char* Mxf_ChannelAssignment_ChannelLayout(const int128u ChannelLayout)
-{
- return Mxf_ChannelAssignment_ChannelLayout(ChannelLayout, (int32u)-1);
-}
-
-string MXF_MCALabelDictionaryID_ChannelPositions(const std::vector<int128u> &MCALabelDictionaryIDs)
-{
- string ToReturn;
- bitset<8> Front, Side, Back, Lfe;
- bool IsOk=true;
-
- for (size_t Pos=0; Pos<MCALabelDictionaryIDs.size(); Pos++)
- {
- if ((MCALabelDictionaryIDs[Pos].hi&0xFFFFFFFFFFFFFF00LL)==0x060E2B3404010100LL && (MCALabelDictionaryIDs[Pos].lo&0xFF00000000000000LL)==0x0300000000000000LL)
- {
- switch ((MCALabelDictionaryIDs[Pos].lo>>48)&0xFF)
- {
- case 0x01 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>40)&0xFF)
- {
- case 0x01 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>32)&0xFF)
- {
- case 0x01 : Front[0]=true; break; //L
- case 0x02 : Front[1]=true; break; //R
- case 0x03 : Front[2]=true; break; //C
- case 0x04 : Lfe[0]=true; break; //LFE
- case 0x05 : Side[0]=true; break; //Ls
- case 0x06 : Side[1]=true; break; //Rs
- case 0x20 : Front[6]=true; break; //M1 //TODO: split M1 and M2 in 2 services
- case 0x21 : Front[7]=true; break; //M2 //TODO: split M1 and M2 in 2 services
- case 0x22 : Front[4]=true; break; //Lt
- case 0x23 : Front[5]=true; break; //Rt
- default : IsOk=false;
- }
- break;
- default : IsOk=false;
- }
- break;
- case 0x02 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>40)&0xFF)
- {
- case 0x01 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>32)&0xFF)
- {
- case 0x01 : Front[0]=true; break; //L
- case 0x02 : Front[1]=true; break; //R
- case 0x03 : Front[2]=true; break; //C
- case 0x04 : Lfe[0]=true; break; //LFE
- case 0x05 : Side[0]=true; break; //Ls
- case 0x06 : Side[1]=true; break; //Rs
- case 0x20 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>24)&0xFF)
- {
- case 0x03 : Front[4]=true; break; //Lt
- case 0x04 : Front[5]=true; break; //Rt
- default : IsOk=false;
- }
- break;
- default : IsOk=false;
- }
- break;
- default : IsOk=false;
- }
- break;
- default : IsOk=false;
- }
- }
- else
- IsOk=false;
- }
-
- if (IsOk)
- {
- string FrontS, SideS, BackS, LfeS;
- if (Front.any())
- {
- FrontS+="Front: ";
- if (Front[0])
- FrontS+="L ";
- if (Front[2])
- FrontS+="C ";
- if (Front[1])
- FrontS+="R ";
- if (Front[4])
- FrontS+="Lt ";
- if (Front[5])
- FrontS+="Rt ";
- if (Front[6])
- FrontS+="M1 ";
- if (Front[7])
- FrontS+="M2 ";
- FrontS.resize(FrontS.size()-1);
- }
- if (Side.any())
- {
- SideS+="Side: ";
- if (Side[0])
- SideS+="L ";
- if (Side[1])
- SideS+="R ";
- SideS.resize(SideS.size()-1);
- }
- if (Back.any())
- {
- BackS+="Back: ";
- if (Back[0])
- BackS+="L ";
- if (Back[2])
- BackS+="C ";
- if (Back[1])
- BackS+="R ";
- BackS.resize(BackS.size()-1);
- }
- if (Lfe.any())
- {
- if (Lfe[0])
- LfeS+="LFE";
- }
- if (!FrontS.empty())
- ToReturn+=FrontS.c_str();
- if (!SideS.empty())
- {
- if (!ToReturn.empty())
- ToReturn+=", ";
- ToReturn+=SideS.c_str();
- }
- if (!BackS.empty())
- {
- if (!ToReturn.empty())
- ToReturn+=", ";
- ToReturn+=BackS.c_str();
- }
- if (!LfeS.empty())
- {
- if (!ToReturn.empty())
- ToReturn+=", ";
- ToReturn+=LfeS.c_str();
- }
- }
-
- return ToReturn;
-}
-
-string MXF_MCALabelDictionaryID_ChannelLayout(const std::vector<int128u> &MCALabelDictionaryIDs)
-{
- string ToReturn;
-
- for (size_t Pos=0; Pos<MCALabelDictionaryIDs.size(); Pos++)
- {
- const char* Value="";
- if ((MCALabelDictionaryIDs[Pos].hi&0xFFFFFFFFFFFFFF00LL)==0x060E2B3404010100LL && (MCALabelDictionaryIDs[Pos].lo&0xFF00000000000000LL)==0x0300000000000000LL)
- {
- switch ((MCALabelDictionaryIDs[Pos].lo>>48)&0xFF)
- {
- case 0x01 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>40)&0xFF)
- {
- case 0x01 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>32)&0xFF)
- {
- case 0x01 : Value="L"; break;
- case 0x02 : Value="R"; break;
- case 0x03 : Value="C"; break;
- case 0x04 : Value="LFE"; break;
- case 0x05 : Value="Ls"; break;
- case 0x06 : Value="Rs"; break;
- case 0x20 : Value="M1"; break;
- case 0x21 : Value="M2"; break;
- case 0x22 : Value="Lt"; break;
- case 0x23 : Value="Rt"; break;
- default : Value="";
- }
- break;
- default : Value="";
- }
- break;
- case 0x02 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>40)&0xFF)
- {
- case 0x01 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>32)&0xFF)
- {
- case 0x01 : Value="L"; break;
- case 0x02 : Value="R"; break;
- case 0x03 : Value="C"; break;
- case 0x04 : Value="LFE"; break;
- case 0x05 : Value="Ls"; break;
- case 0x06 : Value="Rs"; break;
- case 0x20 :
- switch ((MCALabelDictionaryIDs[Pos].lo>>24)&0xFF)
- {
- case 0x03 : Value="Lt"; break;
- case 0x04 : Value="Rt"; break;
- default : Value="";
- }
- break;
- case 0x22 : Value="Lt"; break;
- case 0x23 : Value="Rt"; break;
- default : Value="";
- }
- break;
- default : Value="";
- }
- break;
- default : Value="";
- }
- }
- if (!ToReturn.empty())
- ToReturn+=' ';
- if (strlen(Value))
- ToReturn+=Value;
- else
- {
- Ztring Value; Value.From_Number(MCALabelDictionaryIDs[Pos].lo>>32, 16);
- if (Value.size()<8)
- Value.insert(0, 8-Value.size(), __T('0'));
- ToReturn+=Value.To_UTF8();
- }
- }
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-extern const char* Mpegv_profile_and_level_indication_profile[];
-extern const char* Mpegv_profile_and_level_indication_level[];
-
-//---------------------------------------------------------------------------
-extern const char* AfdBarData_active_format[];
-extern const char* AfdBarData_active_format_4_3[];
-extern const char* AfdBarData_active_format_16_9[];
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mxf::File_Mxf()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("MXF");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Mxf;
- StreamIDs_Width[0]=8;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- MustSynchronize=true;
- DataMustAlwaysBeComplete=false;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
- FrameInfo.DTS=0;
- Frame_Count_NotParsedIncluded=0;
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- RandomIndexMetadatas_AlreadyParsed=false;
- Streams_Count=(size_t)-1;
- OperationalPattern=0;
- Buffer_Begin=(int64u)-1;
- Buffer_End=0;
- Buffer_End_Unlimited=false;
- Buffer_Header_Size=0;
- Preface_Current.hi=0;
- Preface_Current.lo=0;
- IsParsingMiddle_MaxOffset=(int64u)-1;
- Track_Number_IsAvailable=false;
- IsParsingEnd=false;
- IsCheckingRandomAccessTable=false;
- IsCheckingFooterPartitionAddress=false;
- FooterPartitionAddress_Jumped=false;
- PartitionPack_Parsed=false;
- IdIsAlwaysSame_Offset=0;
- PartitionMetadata_PreviousPartition=(int64u)-1;
- PartitionMetadata_FooterPartition=(int64u)-1;
- TimeCode_StartTimecode=(int64u)-1;
- TimeCode_RoundedTimecodeBase=0;
- TimeCode_DropFrame=false;
- DTS_Delay=0;
- StreamPos_StartAtOne=true;
- SDTI_TimeCode_StartTimecode_ms=(int64u)-1;
- SDTI_SizePerFrame=0;
- SDTI_IsPresent=false;
- SDTI_IsInIndexStreamOffset=true;
- SystemScheme1_TimeCodeArray_StartTimecode_ms=(int64u)-1;
- SystemScheme1_FrameRateFromDescriptor=0;
- Essences_FirstEssence_Parsed=false;
- StereoscopicPictureSubDescriptor_IsPresent=false;
- Essences_UsedForFrameCount=(int32u)-1;
- #if MEDIAINFO_ADVANCED
- Footer_Position=(int64u)-1;
- #endif //MEDIAINFO_ADVANCED
- ReferenceFiles=NULL;
- #if MEDIAINFO_NEXTPACKET
- ReferenceFiles_IsParsing=false;
- #endif //MEDIAINFO_NEXTPACKET
- #if defined(MEDIAINFO_ANCILLARY_YES)
- Ancillary=NULL;
- Ancillary_IsBinded=false;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
-
- #if MEDIAINFO_DEMUX
- Demux_HeaderParsed=false;
- #endif //MEDIAINFO_DEMUX
-
- Partitions_Pos=0;
- Partitions_IsCalculatingHeaderByteCount=false;
- Partitions_IsCalculatingSdtiByteCount=false;
- Partitions_IsFooter=false;
-
- #if MEDIAINFO_SEEK
- IndexTables_Pos=0;
- Clip_Header_Size=0;
- Clip_Begin=(int64u)-1;
- Clip_End=0;
- OverallBitrate_IsCbrForSure=0;
- Duration_Detected=false;
- #endif //MEDIAINFO_SEEK
-}
-
-//---------------------------------------------------------------------------
-File_Mxf::~File_Mxf()
-{
- delete ReferenceFiles;
- if (!Ancillary_IsBinded)
- delete Ancillary;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Accept()
-{
- //Configuration
- Buffer_MaximumSize=64*1024*1024; //Some big frames are possible (e.g YUV 4:2:2 10 bits 1080p, 4K)
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Fill()
-{
- for (essences::iterator Essence=Essences.begin(); Essence!=Essences.end(); ++Essence)
- for (parsers::iterator Parser=Essence->second.Parsers.begin(); Parser!=Essence->second.Parsers.end(); ++Parser)
- Fill(*Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish()
-{
- #if MEDIAINFO_NEXTPACKET
- //Locators only
- if (ReferenceFiles_IsParsing)
- {
- ReferenceFiles->ParseReferences();
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
-
- Streams_Finish_CommercialNames();
- return;
- }
- #endif //MEDIAINFO_NEXTPACKET
-
- //Per stream
- for (essences::iterator Essence=Essences.begin(); Essence!=Essences.end(); ++Essence)
- {
- if (Essence->second.Parsers.size()!=1 && Essence->second.StreamKind==Stream_Audio) // Last parser is PCM, impossible to detect with another method if there is only one block
- {
- for (size_t Pos=0; Pos<Essence->second.Parsers.size()-1; Pos++)
- delete Essence->second.Parsers[Pos];
- Essence->second.Parsers.erase(Essence->second.Parsers.begin(), Essence->second.Parsers.begin()+Essence->second.Parsers.size()-1);
- Essence->second.Parsers[0]->Accept();
- Essence->second.Parsers[0]->Fill();
- }
- for (parsers::iterator Parser=Essence->second.Parsers.begin(); Parser!=Essence->second.Parsers.end(); ++Parser)
- {
- if (!(*Parser)->Status[IsFinished])
- {
- if (Config->ParseSpeed>=1)
- {
- int64u File_Size_Temp=File_Size;
- File_Size=File_Offset+Buffer_Offset+Element_Offset;
- Open_Buffer_Continue(*Parser, Buffer, 0);
- File_Size=File_Size_Temp;
- }
- Finish(*Parser);
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return;
- #endif //MEDIAINFO_DEMUX
- }
- }
- }
-
- if (!Track_Number_IsAvailable)
- {
- if (Tracks.empty())
- {
- for (essences::iterator Essence=Essences.begin(); Essence!=Essences.end(); ++Essence)
- for (parsers::iterator Parser=Essence->second.Parsers.begin(); Parser!=Essence->second.Parsers.end(); ++Parser)
- {
- Merge(*(*Parser));
-
- Ztring LawRating=(*Parser)->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=(*Parser)->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
-
- if (IsSub && StreamKind_Last!=Stream_Max && Retrieve(StreamKind_Last, StreamPos_Last, "MuxingMode").empty())
- Fill(StreamKind_Last, StreamPos_Last, "MuxingMode", "MXF");
- }
- }
- else
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- {
- //Searching the corresponding Descriptor
- stream_t StreamKind=Stream_Max;
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- if (Descriptor->second.LinkedTrackID==Track->second.TrackID)
- {
- StreamKind=Descriptor->second.StreamKind;
- break;
- }
- if (StreamKind!=Stream_Max)
- {
- for (essences::iterator Essence=Essences.begin(); Essence!=Essences.end(); ++Essence)
- if (Essence->second.StreamKind==StreamKind && !Essence->second.Track_Number_IsMappedToTrack)
- {
- Track->second.TrackNumber=Essence->first;
- Essence->second.Track_Number_IsMappedToTrack=true;
- break;
- }
- }
- }
- }
-
- File_Size_Total=File_Size;
- StreamKind_Last=Stream_Max;
- StreamPos_Last=(size_t)-1;
-
- Streams_Finish_Preface(Preface_Current);
-
- //OperationalPattern
- Fill(Stream_General, 0, General_Format_Profile, Mxf_OperationalPattern(OperationalPattern));
-
- //Time codes
- if (SDTI_TimeCode_StartTimecode_ms!=(int64u)-1)
- {
- bool IsDuplicate=false;
- for (size_t Pos2=0; Pos2<Count_Get(Stream_Other); Pos2++)
- if (Retrieve(Stream_Other, Pos2, "TimeCode_Source")==__T("SDTI"))
- IsDuplicate=true;
- if (!IsDuplicate)
- {
- Fill_Flush();
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_Format, "SMPTE TC");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "SDTI");
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_FirstFrame, SDTI_TimeCode_StartTimecode.c_str());
- }
- }
- if (SystemScheme1_TimeCodeArray_StartTimecode_ms!=(int64u)-1)
- {
- bool IsDuplicate=false;
- for (size_t Pos2=0; Pos2<Count_Get(Stream_Other); Pos2++)
- if (Retrieve(Stream_Other, Pos2, "TimeCode_Source")==__T("System scheme 1"))
- IsDuplicate=true;
- if (!IsDuplicate)
- {
- Fill_Flush();
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_Format, "SMPTE TC");
- Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "System scheme 1");
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_FirstFrame, SystemScheme1_TimeCodeArray_StartTimecode.c_str());
- }
- }
-
- //Parsing locators
- Locators_Test();
- #if MEDIAINFO_NEXTPACKET
- if (Config->NextPacket_Get() && ReferenceFiles && !ReferenceFiles->References.empty())
- {
- ReferenceFiles_IsParsing=true;
- return;
- }
- #endif //MEDIAINFO_NEXTPACKET
-
- //Sizes
- #if MEDIAINFO_ADVANCED
- if (Footer_Position!=(int64u)-1)
- Fill(Stream_General, 0, General_FooterSize, File_Size-Footer_Position);
- #endif //MEDIAINFO_ADVANCED
-
- //Commercial names
- Streams_Finish_CommercialNames();
-
- //Handling separate streams
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- if (Retrieve((stream_t)StreamKind, StreamPos, Fill_Parameter((stream_t)StreamKind, Generic_StreamSize_Encoded)).empty() && !Retrieve((stream_t)StreamKind, StreamPos, Fill_Parameter((stream_t)StreamKind, Generic_BitRate_Encoded)).empty() && !Retrieve((stream_t)StreamKind, StreamPos, Fill_Parameter((stream_t)StreamKind, Generic_Duration)).empty())
- {
- float64 BitRate_Encoded=Retrieve((stream_t)StreamKind, StreamPos, Fill_Parameter((stream_t)StreamKind, Generic_BitRate_Encoded)).To_float64();
- float64 Duration=Retrieve((stream_t)StreamKind, StreamPos, Fill_Parameter((stream_t)StreamKind, Generic_Duration)).To_float64();
- if (Duration)
- Fill((stream_t)StreamKind, StreamPos, Fill_Parameter((stream_t)StreamKind, Generic_StreamSize_Encoded), BitRate_Encoded/8*(Duration/1000), 0);
- }
-
- //File size in case of partial file analysis
- if (Config->File_IgnoreFramesBefore || Config->File_IgnoreFramesAfter!=(int64u)-1)
- {
- int64u FrameCount_FromComponent=(int64u)-1;
- for (components::iterator Component=Components.begin(); Component!=Components.end(); ++Component)
- if (FrameCount_FromComponent>Component->second.Duration)
- FrameCount_FromComponent=Component->second.Duration;
- float64 EditRate_FromTrack=DBL_MAX;
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- if (EditRate_FromTrack>Track->second.EditRate)
- EditRate_FromTrack=Track->second.EditRate;
- if (FrameCount_FromComponent!=(int64u)-1 && FrameCount_FromComponent && EditRate_FromTrack!=DBL_MAX && EditRate_FromTrack)
- {
- int64u FrameCount=FrameCount_FromComponent;
- int64u File_IgnoreFramesBefore=Config->File_IgnoreFramesBefore;
- if (File_IgnoreFramesBefore && Config->File_IgnoreFramesRate && (EditRate_FromTrack<Config->File_IgnoreFramesRate*0.9 || EditRate_FromTrack>Config->File_IgnoreFramesRate*1.1)) //In case of problem or EditRate being sampling rate
- File_IgnoreFramesBefore=float64_int64s(((float64)File_IgnoreFramesBefore)/Config->File_IgnoreFramesRate*EditRate_FromTrack);
- int64u File_IgnoreFramesAfter=Config->File_IgnoreFramesAfter;
- if (File_IgnoreFramesAfter!=(int64u)-1 && Config->File_IgnoreFramesRate && (EditRate_FromTrack<Config->File_IgnoreFramesRate*0.9 || EditRate_FromTrack>Config->File_IgnoreFramesRate*1.1)) //In case of problem or EditRate being sampling rate
- File_IgnoreFramesAfter=float64_int64s(((float64)File_IgnoreFramesAfter)/Config->File_IgnoreFramesRate*EditRate_FromTrack);
- if (File_IgnoreFramesAfter<FrameCount)
- FrameCount=File_IgnoreFramesAfter;
- if (FrameCount<File_IgnoreFramesBefore)
- FrameCount=File_IgnoreFramesBefore;
- FrameCount-=File_IgnoreFramesBefore;
-
- float64 File_Size_Temp=(float64)File_Size;
- File_Size_Temp/=FrameCount_FromComponent;
- File_Size_Temp*=FrameCount;
- Fill(Stream_General, 0, General_FileSize, File_Size_Temp, 0, true);
- }
- }
-
- //System scheme 1
- for (systemschemes::iterator SystemScheme=SystemSchemes.begin(); SystemScheme!=SystemSchemes.end(); ++SystemScheme)
- {
- if (!SystemScheme->second.IsTimeCode) //Already done somewhere else
- {
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, "ID", __T("System scheme 1-")+Ztring().From_Number((int8u)(SystemScheme->first>8))+__T('-')+Ztring().From_Number((int8u)(SystemScheme->first&0xFF)));
- Fill(Stream_Other, StreamPos_Last, "MuxingMode", "System scheme 1");
- }
- }
-
- //Primary package info
- bool PrimaryPackageIsSourcePackage=false;
- bool PrimaryPackageIsMaterialPackage=false;
- for (prefaces::iterator Preface=Prefaces.begin(); Preface!=Prefaces.end(); ++Preface)
- {
- for (packages::iterator Package=Packages.begin(); Package!=Packages.end(); ++Package)
- if (Package->first==Preface->second.PrimaryPackage)
- {
- if (Package->second.IsSourcePackage)
- PrimaryPackageIsSourcePackage=true;
- else
- PrimaryPackageIsMaterialPackage=true;
- }
- }
- if (PrimaryPackageIsSourcePackage && !PrimaryPackageIsMaterialPackage)
- {
- Fill(Stream_General, 0, "PrimaryPackage", "Source Package");
- (*Stream_More)[Stream_General][0](Ztring().From_Local("PrimaryPackage"), Info_Options)=__T("N NT");
- }
- if (!PrimaryPackageIsSourcePackage && PrimaryPackageIsMaterialPackage)
- {
- Fill(Stream_General, 0, "PrimaryPackage", "Material Package");
- (*Stream_More)[Stream_General][0](Ztring().From_Local("PrimaryPackage"), Info_Options)=__T("N NT");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_Preface (const int128u PrefaceUID)
-{
- prefaces::iterator Preface=Prefaces.find(PrefaceUID);
- if (Preface==Prefaces.end())
- return;
-
- //ContentStorage
- Streams_Finish_ContentStorage(Preface->second.ContentStorage);
-
- //Identifications
- for (size_t Pos=0; Pos<Preface->second.Identifications.size(); Pos++)
- Streams_Finish_Identification(Preface->second.Identifications[Pos]);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_ContentStorage (const int128u ContentStorageUID)
-{
- contentstorages::iterator ContentStorage=ContentStorages.find(ContentStorageUID);
- if (ContentStorage==ContentStorages.end())
- return;
-
- for (size_t Pos=0; Pos<ContentStorage->second.Packages.size(); Pos++)
- Streams_Finish_Package(ContentStorage->second.Packages[Pos]);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_Package (const int128u PackageUID)
-{
- packages::iterator Package=Packages.find(PackageUID);
- if (Package==Packages.end() || !Package->second.IsSourcePackage)
- return;
-
- for (size_t Pos=0; Pos<Package->second.Tracks.size(); Pos++)
- Streams_Finish_Track(Package->second.Tracks[Pos]);
-
- Streams_Finish_Descriptor(Package->second.Descriptor, PackageUID);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_Track(const int128u TrackUID)
-{
- tracks::iterator Track=Tracks.find(TrackUID);
- if (Track==Tracks.end() || Track->second.Stream_Finish_Done)
- return;
-
- StreamKind_Last=Stream_Max;
- StreamPos_Last=(size_t)-1;
-
- Streams_Finish_Essence(Track->second.TrackNumber, TrackUID);
-
- //Sequence
- Streams_Finish_Component(Track->second.Sequence, Track->second.EditRate_Real?Track->second.EditRate_Real:Track->second.EditRate, Track->second.TrackID, Track->second.Origin);
-
- //Done
- Track->second.Stream_Finish_Done=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_Essence(int32u EssenceUID, int128u TrackUID)
-{
- essences::iterator Essence=Essences.find(EssenceUID);
- if (Essence==Essences.end() || Essence->second.Stream_Finish_Done)
- return;
-
- if (Essence->second.Parsers.size()!=1)
- return;
- parsers::iterator Parser=Essence->second.Parsers.begin();
-
- //Descriptive Metadata
- std::vector<int128u> DMScheme1s_List;
- int32u TrackID=(int32u)-1;
- tracks::iterator Track=Tracks.find(TrackUID);
- if (Track!=Tracks.end())
- TrackID=Track->second.TrackID;
-
- for (dmsegments::iterator DMSegment=DMSegments.begin(); DMSegment!=DMSegments.end(); ++DMSegment)
- for (size_t Pos=0; Pos<DMSegment->second.TrackIDs.size(); Pos++)
- if (DMSegment->second.TrackIDs[Pos]==TrackID)
- DMScheme1s_List.push_back(DMSegment->second.Framework);
-
- if (Config->ParseSpeed<1.0 && !(*Parser)->Status[IsFinished])
- {
- Fill(*Parser);
- (*Parser)->Open_Buffer_Unsynch();
- }
- Finish(*Parser);
- StreamKind_Last=Stream_Max;
- if ((*Parser)->Count_Get(Stream_Video))
- Stream_Prepare(Stream_Video);
- else if ((*Parser)->Count_Get(Stream_Audio))
- Stream_Prepare(Stream_Audio);
- else if ((*Parser)->Count_Get(Stream_Text))
- Stream_Prepare(Stream_Text);
- else if ((*Parser)->Count_Get(Stream_Other))
- Stream_Prepare(Stream_Other);
- else if (Essence->second.StreamKind!=Stream_Max)
- Stream_Prepare(Essence->second.StreamKind);
- else
- {
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- if (Descriptor->second.LinkedTrackID==Essence->second.TrackID)
- {
- if (Descriptor->second.StreamKind!=Stream_Max)
- {
- Stream_Prepare(Descriptor->second.StreamKind);
- Descriptor->second.StreamPos=StreamPos_Last;
- }
- break;
- }
- if (StreamKind_Last==Stream_Max)
- return; //Not found
- }
- if (IsSub)
- Fill(StreamKind_Last, StreamPos_Last, "MuxingMode", "MXF");
-
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- if (Descriptor->second.LinkedTrackID==Essence->second.TrackID)
- {
- if (Descriptor->second.StreamKind!=Stream_Max)
- Descriptor->second.StreamPos=StreamPos_Last;
- break;
- }
-
- for (std::map<std::string, Ztring>::iterator Info=Essence->second.Infos.begin(); Info!=Essence->second.Infos.end(); ++Info)
- Fill(StreamKind_Last, StreamPos_Last, Info->first.c_str(), Info->second, true);
- if (TimeCode_RoundedTimecodeBase && TimeCode_StartTimecode!=(int64u)-1)
- {
- float64 TimeCode_StartTimecode_Temp=((float64)(TimeCode_StartTimecode+Config->File_IgnoreFramesBefore))/TimeCode_RoundedTimecodeBase;
- if (TimeCode_DropFrame)
- {
- TimeCode_StartTimecode_Temp*=1001;
- TimeCode_StartTimecode_Temp/=1000;
- }
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay), TimeCode_StartTimecode_Temp*1000, 0, true);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_Source), "Container");
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_DropFrame), TimeCode_DropFrame?"Yes":"No");
-
- //TimeCode TC(TimeCode_StartTimecode, TimeCode_RoundedTimecodeBase, TimeCode_DropFrame);
- //Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_TimeCode_FirstFrame), TC.ToString().c_str());
- //Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_TimeCode_Source), "Time code track (stripped)");
- }
- if (SDTI_TimeCode_StartTimecode_ms!=(int64u)-1)
- {
- Fill(StreamKind_Last, StreamPos_Last, "Delay_SDTI", SDTI_TimeCode_StartTimecode_ms);
- if (StreamKind_Last!=Stream_Max)
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Ztring().From_Local("Delay_SDTI"), Info_Options)=__T("N NT");
-
- //Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_TimeCode_FirstFrame), SDTI_TimeCode_StartTimecode.c_str());
- //Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_TimeCode_Source), "SDTI");
- }
- if (SystemScheme1_TimeCodeArray_StartTimecode_ms!=(int64u)-1)
- {
- Fill(StreamKind_Last, StreamPos_Last, "Delay_SystemScheme1", SystemScheme1_TimeCodeArray_StartTimecode_ms);
- if (StreamKind_Last!=Stream_Max)
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Ztring().From_Local("Delay_SystemScheme1"), Info_Options)=__T("N NT");
-
- //Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_TimeCode_FirstFrame), SystemScheme1_TimeCodeArray_StartTimecode.c_str());
- //Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_TimeCode_Source), "System scheme 1");
- }
-
- //Special case - Multiple sub-streams in a stream
- if (((*Parser)->Retrieve(Stream_General, 0, General_Format)==__T("ChannelGrouping") || (*Parser)->Count_Get(StreamKind_Last)>1) && (*Parser)->Count_Get(Stream_Audio))
- {
- //Before
- if (StreamKind_Last==Stream_Audio)
- {
- Clear(Stream_Audio, StreamPos_Last, Audio_Format_Settings_Sign);
- }
- ZtringList StreamSave; StreamSave.Write((*File__Analyze::Stream)[StreamKind_Last][StreamPos_Last].Read());
- ZtringListList StreamMoreSave; StreamMoreSave.Write((*Stream_More)[StreamKind_Last][StreamPos_Last].Read());
-
- //Erasing former streams data
- stream_t NewKind=StreamKind_Last;
- size_t NewPos1;
- Ztring ID;
- if ((*Parser)->Retrieve(Stream_General, 0, General_Format)==__T("ChannelGrouping"))
- {
- //Searching second stream
- size_t StreamPos_Difference=Essence->second.StreamPos-Essence->second.StreamPos_Initial;
- essences::iterator Essence1=Essence;
- --Essence1;
- Essence->second.StreamPos=Essence1->second.StreamPos;
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- {
- if (Descriptor->second.LinkedTrackID==Essence1->second.TrackID)
- Descriptor->second.StreamPos=Essence1->second.StreamPos;
- if (Descriptor->second.LinkedTrackID==Essence->second.TrackID)
- Descriptor->second.StreamPos=Essence->second.StreamPos;
- }
-
- //Removing the 2 corresponding streams
- NewPos1=(Essence->second.StreamPos_Initial/2)*2+StreamPos_Difference;
- size_t NewPos2=NewPos1+1;
- ID=Ztring::ToZtring(Essence1->second.TrackID)+__T(" / ")+Ztring::ToZtring(Essence->second.TrackID);
-
- Stream_Erase(NewKind, NewPos2);
- Stream_Erase(NewKind, NewPos1);
- }
- else
- {
- NewPos1=StreamPos_Last;
- ID=Ztring::ToZtring(Essence->second.TrackID);
- Stream_Erase(NewKind, NewPos1);
- }
-
- //After
- for (size_t StreamPos=0; StreamPos<(*Parser)->Count_Get(NewKind); StreamPos++)
- {
- Stream_Prepare(NewKind, NewPos1+StreamPos);
- Merge(*(*Parser), StreamKind_Last, StreamPos, StreamPos_Last);
- Ztring Parser_ID=Retrieve(StreamKind_Last, StreamPos_Last, General_ID);
- Fill(StreamKind_Last, StreamPos_Last, General_ID, ID+(Parser_ID.empty()?Ztring():(__T("-")+Parser_ID)), true);
- for (size_t Pos=0; Pos<StreamSave.size(); Pos++)
- {
- if (Pos==Fill_Parameter(StreamKind_Last, Generic_BitRate) && (*Parser)->Count_Get(NewKind)>1 && (!StreamSave[Pos].empty() || StreamPos))
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_BitRate_Encoded), StreamPos?0:(StreamSave[Pos].To_int64u()*2));
- else if (Pos==Fill_Parameter(StreamKind_Last, Generic_StreamSize) && (*Parser)->Count_Get(NewKind)>1 && (!StreamSave[Pos].empty() || StreamPos))
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize_Encoded), StreamPos?0:(StreamSave[Pos].To_int64u()*2));
- else if (Retrieve(StreamKind_Last, StreamPos_Last, Pos).empty())
- Fill(StreamKind_Last, StreamPos_Last, Pos, StreamSave[Pos]);
- }
- for (size_t Pos=0; Pos<StreamMoreSave.size(); Pos++)
- {
- Fill(StreamKind_Last, StreamPos_Last, StreamMoreSave(Pos, 0).To_Local().c_str(), StreamMoreSave(Pos, 1));
- if (StreamMoreSave(Pos, Info_Name)==__T("Delay_SDTI"))
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Ztring().From_Local("Delay_SDTI"), Info_Options)=__T("N NT");
- if (StreamMoreSave(Pos, Info_Name)==__T("Delay_SystemScheme1"))
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Ztring().From_Local("Delay_SystemScheme1"), Info_Options)=__T("N NT");
- }
-
- for (size_t Pos=0; Pos<DMScheme1s_List.size(); Pos++)
- {
- dmscheme1s::iterator DMScheme1=DMScheme1s.find(DMScheme1s_List[Pos]);
- if (DMScheme1!=DMScheme1s.end())
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Language), DMScheme1->second.PrimaryExtendedSpokenLanguage, true);
- }
- }
- }
-
- //Positioning other streams
- for (essences::iterator Essence_Temp=Essence; Essence_Temp!=Essences.end(); ++Essence_Temp)
- if (*(Essence_Temp->second.Parsers.begin()) && (*(Essence_Temp->second.Parsers.begin()))->Count_Get(Stream_Audio))
- {
- Essence_Temp->second.StreamPos-=2; //ChannelGrouping
- Essence_Temp->second.StreamPos+=(*(Essence_Temp->second.Parsers.begin()))->Count_Get(Stream_Audio);
- }
- }
- else //Normal
- {
- //From descriptor
- if ((*Parser)->Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("PCM")) // MXF handles channel count only with PCM, not with compressed data
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- if (Descriptor->second.LinkedTrackID==Essence->second.TrackID && Descriptor->second.StreamKind==Stream_Audio && StreamKind_Last==Stream_Audio && Descriptor->second.ChannelCount!=(int32u)-1)
- {
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Descriptor->second.ChannelCount);
- break;
- }
-
- Merge(*(*Parser), StreamKind_Last, 0, StreamPos_Last);
-
- Ztring LawRating=(*Parser)->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=(*Parser)->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
-
- for (size_t Pos=0; Pos<DMScheme1s_List.size(); Pos++)
- {
- dmscheme1s::iterator DMScheme1=DMScheme1s.find(DMScheme1s_List[Pos]);
- if (DMScheme1!=DMScheme1s.end())
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Language), DMScheme1->second.PrimaryExtendedSpokenLanguage, true);
- }
- }
-
- for (size_t StreamPos=1; StreamPos<(*Parser)->Count_Get(StreamKind_Last); StreamPos++) //If more than 1 stream, TODO: better way to do this
- {
- Stream_Prepare(StreamKind_Last);
- Merge(*(*Parser), StreamKind_Last, StreamPos, StreamPos_Last);
- }
- }
-
- if (Retrieve(StreamKind_Last, StreamPos_Last, General_ID).empty() || StreamKind_Last==Stream_Text || StreamKind_Last==Stream_Other) //TODO: better way to do detect subID
- {
- //Looking for Material package TrackID
- int32u TrackID=(int32u)-1;
- for (packages::iterator SourcePackage=Packages.begin(); SourcePackage!=Packages.end(); ++SourcePackage)
- if (SourcePackage->second.PackageUID.hi.hi) //Looking fo a SourcePackage with PackageUID only
- {
- //Testing if the Track is in this SourcePackage
- for (size_t Tracks_Pos=0; Tracks_Pos<SourcePackage->second.Tracks.size(); Tracks_Pos++)
- if (SourcePackage->second.Tracks[Tracks_Pos]==TrackUID)
- {
- tracks::iterator Track=Tracks.find(SourcePackage->second.Tracks[Tracks_Pos]);
- if (Track!=Tracks.end())
- TrackID=Track->second.TrackID;
- }
- }
-
- Ztring ID;
- Ztring ID_String;
- if (TrackID!=(int32u)-1)
- ID=Ztring::ToZtring(TrackID);
- else if (Tracks[TrackUID].TrackID!=(int32u)-1)
- ID=Ztring::ToZtring(Tracks[TrackUID].TrackID);
- else
- {
- ID=Ztring::ToZtring(Essence->first);
- ID_String=Ztring::ToZtring(Essence->first, 16);
- }
- if (!ID.empty())
- {
- for (size_t StreamPos=StreamPos_Last-((*Parser)->Count_Get(StreamKind_Last)?((*Parser)->Count_Get(StreamKind_Last)-1):0); StreamPos<=StreamPos_Last; StreamPos++) //If more than 1 stream
- {
- Ztring ID_Temp(ID);
- if (!Retrieve(StreamKind_Last, StreamPos, General_ID).empty())
- {
- ID_Temp+=__T("-");
- ID_Temp+=Retrieve(StreamKind_Last, StreamPos, General_ID);
- }
- Fill(StreamKind_Last, StreamPos, General_ID, ID_Temp, true);
- if (!ID_String.empty())
- Fill(StreamKind_Last, StreamPos, General_ID_String, ID_String, true);
- }
- }
- if (!Tracks[TrackUID].TrackName.empty())
- {
- for (size_t StreamPos=StreamPos_Last-((*Parser)->Count_Get(StreamKind_Last)?((*Parser)->Count_Get(StreamKind_Last)-1):0); StreamPos<=StreamPos_Last; StreamPos++) //If more than 1 stream
- Fill(StreamKind_Last, StreamPos, "Title", Tracks[TrackUID].TrackName);
- }
- }
-
- //Special case - DV
- #if defined(MEDIAINFO_DVDIF_YES)
- if (StreamKind_Last==Stream_Video && Retrieve(Stream_Video, StreamPos_Last, Video_Format)==__T("DV"))
- {
- if (Retrieve(Stream_General, 0, General_Recorded_Date).empty())
- Fill(Stream_General, 0, General_Recorded_Date, (*Parser)->Retrieve(Stream_General, 0, General_Recorded_Date));
-
- //Video and Audio are together
- size_t Audio_Count=(*Parser)->Count_Get(Stream_Audio);
- for (size_t Audio_Pos=0; Audio_Pos<Audio_Count; Audio_Pos++)
- {
- Fill_Flush();
- Stream_Prepare(Stream_Audio);
- size_t Pos=Count_Get(Stream_Audio)-1;
- (*Parser)->Finish();
- if (TimeCode_RoundedTimecodeBase && TimeCode_StartTimecode!=(int64u)-1)
- {
- float64 TimeCode_StartTimecode_Temp=((float64)(TimeCode_StartTimecode+Config->File_IgnoreFramesBefore))/TimeCode_RoundedTimecodeBase;
- if (TimeCode_DropFrame)
- {
- TimeCode_StartTimecode_Temp*=1001;
- TimeCode_StartTimecode_Temp/=1000;
- }
- Fill(Stream_Audio, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay), TimeCode_StartTimecode_Temp*1000, 0, true);
- Fill(Stream_Audio, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_Source), "Container");
- }
- Merge(*(*Parser), Stream_Audio, Audio_Pos, StreamPos_Last);
- if (Retrieve(Stream_Audio, Pos, Audio_MuxingMode).empty())
- Fill(Stream_Audio, Pos, Audio_MuxingMode, Retrieve(Stream_Video, Essence->second.StreamPos-(StreamPos_StartAtOne?1:0), Video_Format), true);
- else
- Fill(Stream_Audio, Pos, Audio_MuxingMode, Retrieve(Stream_Video, Essence->second.StreamPos-(StreamPos_StartAtOne?1:0), Video_Format)+__T(" / ")+Retrieve(Stream_Audio, Pos, Audio_MuxingMode), true);
- Fill(Stream_Audio, Pos, Audio_Duration, Retrieve(Stream_Video, Essence->second.StreamPos-(StreamPos_StartAtOne?1:0), Video_Duration));
- Fill(Stream_Audio, Pos, Audio_StreamSize_Encoded, 0); //Included in the DV stream size
- Ztring ID=Retrieve(Stream_Audio, Pos, Audio_ID);
- Fill(Stream_Audio, Pos, Audio_ID, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_ID)+__T("-")+ID, true);
- Fill(Stream_Audio, Pos, Audio_ID_String, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_ID_String)+__T("-")+ID, true);
- Fill(Stream_Audio, Pos, Audio_Title, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Title), true);
- }
-
- StreamKind_Last=Stream_Video;
- StreamPos_Last=Essence->second.StreamPos-(StreamPos_StartAtOne?1:0);
- }
- #endif
-
- //Special case - MPEG Video + Captions
- if (StreamKind_Last==Stream_Video && (*Parser)->Count_Get(Stream_Text))
- {
- //Video and Text are together
- size_t Parser_Text_Count=(*Parser)->Count_Get(Stream_Text);
- for (size_t Parser_Text_Pos=0; Parser_Text_Pos<Parser_Text_Count; Parser_Text_Pos++)
- {
- size_t StreamPos_Video=StreamPos_Last;
- Fill_Flush();
- Stream_Prepare(Stream_Text);
- (*Parser)->Finish();
- if (TimeCode_RoundedTimecodeBase && TimeCode_StartTimecode!=(int64u)-1)
- {
- float64 TimeCode_StartTimecode_Temp=((float64)(TimeCode_StartTimecode+Config->File_IgnoreFramesBefore))/TimeCode_RoundedTimecodeBase;
- if (TimeCode_DropFrame)
- {
- TimeCode_StartTimecode_Temp*=1001;
- TimeCode_StartTimecode_Temp/=1000;
- }
- Fill(Stream_Text, Parser_Text_Pos, Fill_Parameter(StreamKind_Last, Generic_Delay), TimeCode_StartTimecode_Temp*1000, 0, true);
- Fill(Stream_Text, Parser_Text_Pos, Fill_Parameter(StreamKind_Last, Generic_Delay_Source), "Container");
- }
- Merge(*(*Parser), Stream_Text, Parser_Text_Pos, StreamPos_Last);
- Fill(Stream_Text, StreamPos_Last, Text_Duration, Retrieve(Stream_Video, StreamPos_Video, Video_Duration));
- Ztring ID=Retrieve(Stream_Text, StreamPos_Last, Text_ID);
- if (Retrieve(Stream_Text, StreamPos_Last, Text_MuxingMode).find(__T("Ancillary"))!=string::npos)
- {
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- if (Descriptor->second.Type==descriptor::Type_AncPackets)
- {
- Fill(Stream_Text, StreamPos_Last, Text_ID, Ztring::ToZtring(Descriptor->second.LinkedTrackID)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_ID_String, Ztring::ToZtring(Descriptor->second.LinkedTrackID)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_Title, Tracks[TrackUID].TrackName, true);
- break;
- }
- }
- else
- {
- Fill(Stream_Text, StreamPos_Last, Text_ID, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_ID)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_ID_String, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_ID_String)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_Title, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Title), true);
- }
-
- for (size_t Pos=0; Pos<DMScheme1s_List.size(); Pos++)
- {
- dmscheme1s::iterator DMScheme1=DMScheme1s.find(DMScheme1s_List[Pos]);
- if (DMScheme1!=DMScheme1s.end())
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Language), DMScheme1->second.PrimaryExtendedSpokenLanguage, true);
- }
- }
- }
-
- Ztring LawRating=(*Parser)->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=(*Parser)->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
-
- StreamKind_Last=Stream_Video;
- StreamPos_Last=Essence->second.StreamPos-(StreamPos_StartAtOne?1:0);
- }
-
- //Stream size
- if (StreamKind_Last!=Stream_Max && Count_Get(Stream_Video)+Count_Get(Stream_Audio)==1 && Essence->second.Stream_Size!=(int64u)-1)
- {
- //TODO: Stream_Size is present only if there is one stream, so it works in most cases. We should find a better way.
- int64u Stream_Size=Essence->second.Stream_Size;
- if (Config->File_IgnoreFramesBefore || Config->File_IgnoreFramesAfter!=(int64u)-1)
- {
- int64u FrameCount_FromComponent=(int64u)-1;
- for (components::iterator Component=Components.begin(); Component!=Components.end(); ++Component)
- if (FrameCount_FromComponent>Component->second.Duration)
- FrameCount_FromComponent=Component->second.Duration;
- float64 EditRate_FromTrack=DBL_MAX;
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- if (EditRate_FromTrack>Track->second.EditRate)
- EditRate_FromTrack=Track->second.EditRate;
- if (FrameCount_FromComponent!=(int64u)-1 && FrameCount_FromComponent && EditRate_FromTrack!=DBL_MAX && EditRate_FromTrack)
- {
- int64u FrameCount=FrameCount_FromComponent;
- int64u File_IgnoreFramesBefore=Config->File_IgnoreFramesBefore;
- if (File_IgnoreFramesBefore && Config->File_IgnoreFramesRate && (EditRate_FromTrack<Config->File_IgnoreFramesRate*0.9 || EditRate_FromTrack>Config->File_IgnoreFramesRate*1.1)) //In case of problem or EditRate being sampling rate
- File_IgnoreFramesBefore=float64_int64s(((float64)File_IgnoreFramesBefore)/Config->File_IgnoreFramesRate*EditRate_FromTrack);
- int64u File_IgnoreFramesAfter=Config->File_IgnoreFramesAfter;
- if (File_IgnoreFramesAfter!=(int64u)-1 && Config->File_IgnoreFramesRate && (EditRate_FromTrack<Config->File_IgnoreFramesRate*0.9 || EditRate_FromTrack>Config->File_IgnoreFramesRate*1.1)) //In case of problem or EditRate being sampling rate
- File_IgnoreFramesAfter=float64_int64s(((float64)File_IgnoreFramesAfter)/Config->File_IgnoreFramesRate*EditRate_FromTrack);
- if (File_IgnoreFramesAfter<FrameCount)
- FrameCount=File_IgnoreFramesAfter;
- if (FrameCount<File_IgnoreFramesBefore)
- FrameCount=File_IgnoreFramesBefore;
- FrameCount-=File_IgnoreFramesBefore;
-
- float64 Stream_Size_Temp=(float64)Stream_Size;
- Stream_Size_Temp/=FrameCount_FromComponent;
- Stream_Size_Temp*=FrameCount;
- Stream_Size=float64_int64s(Stream_Size_Temp);
- }
- }
-
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize), Stream_Size);
- }
-
- //Done
- Essence->second.Stream_Finish_Done=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_Descriptor(const int128u DescriptorUID, const int128u PackageUID)
-{
- descriptors::iterator Descriptor=Descriptors.find(DescriptorUID);
- if (Descriptor==Descriptors.end())
- return;
-
- //Subs
- if (Descriptor->second.Type==descriptor::type_Mutiple)
- {
- for (size_t Pos=0; Pos<Descriptor->second.SubDescriptors.size(); Pos++)
- Streams_Finish_Descriptor(Descriptor->second.SubDescriptors[Pos], PackageUID);
- return; //Is not a real descriptor
- }
-
- StreamKind_Last=Descriptor->second.StreamKind;
- StreamPos_Last=Descriptor->second.StreamPos;
- if (StreamPos_Last==(size_t)-1)
- {
- for (size_t Pos=0; Pos<Count_Get(StreamKind_Last); Pos++)
- {
- Ztring ID=Retrieve(StreamKind_Last, Pos, General_ID);
- size_t ID_Dash_Pos=ID.find(__T('-'));
- if (ID_Dash_Pos!=string::npos)
- ID.resize(ID_Dash_Pos);
- if (Ztring::ToZtring(Descriptor->second.LinkedTrackID)==ID)
- {
- StreamPos_Last=Pos;
- break;
- }
- }
- }
- if (StreamPos_Last==(size_t)-1)
- {
- if (Descriptors.size()==1)
- StreamPos_Last=0;
- else if (Descriptor->second.LinkedTrackID!=(int32u)-1)
- {
- //Workaround for a specific file with same ID
- if (!Locators.empty())
- for (descriptors::iterator Descriptor1=Descriptors.begin(); Descriptor1!=Descriptor; ++Descriptor1)
- if (Descriptor1->second.LinkedTrackID==Descriptor->second.LinkedTrackID)
- {
- IdIsAlwaysSame_Offset++;
- break;
- }
-
- Stream_Prepare(Descriptor->second.StreamKind);
- Fill(StreamKind_Last, StreamPos_Last, General_ID, Descriptor->second.LinkedTrackID+IdIsAlwaysSame_Offset);
- }
- else
- {
- //Looking for Material package TrackID
- packages::iterator SourcePackage=Packages.find(PackageUID);
- //We have the the right PackageUID, looking for SourceClip from Sequence from Track from MaterialPackage
- for (components::iterator SourceClip=Components.begin(); SourceClip!=Components.end(); ++SourceClip)
- if (SourceClip->second.SourcePackageID.lo==SourcePackage->second.PackageUID.lo) //int256u doesn't support yet ==
- {
- //We have the right SourceClip, looking for the Sequence from Track from MaterialPackage
- for (components::iterator Sequence=Components.begin(); Sequence!=Components.end(); ++Sequence)
- for (size_t StructuralComponents_Pos=0; StructuralComponents_Pos<Sequence->second.StructuralComponents.size(); StructuralComponents_Pos++)
- if (Sequence->second.StructuralComponents[StructuralComponents_Pos]==SourceClip->first)
- {
- //We have the right Sequence, looking for Track from MaterialPackage
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- {
- if (Track->second.Sequence==Sequence->first)
- {
- Ztring ID=Ztring::ToZtring(Track->second.TrackID);
- StreamKind_Last=Stream_Max;
- StreamPos_Last=(size_t)-1;
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- if (ID==Retrieve((stream_t)StreamKind, StreamPos, General_ID))
- {
- StreamKind_Last=(stream_t)StreamKind;
- StreamPos_Last=(stream_t)StreamPos;
- }
- if (StreamPos_Last==(size_t)-1 && !Descriptor->second.Locators.empty()) //TODO: 1 file has a TimeCode stream linked to a video stream, and it is displayed if Locator test is removed. Why? AS02 files streams are not filled if I remove completely this block, why?
- {
- if (Descriptor->second.StreamKind!=Stream_Max)
- Stream_Prepare(Descriptor->second.StreamKind);
- if (Track->second.TrackID!=(int32u)-1)
- {
- if (Descriptor->second.LinkedTrackID==(int32u)-1)
- Descriptor->second.LinkedTrackID=Track->second.TrackID;
- if (Descriptor->second.StreamKind!=Stream_Max)
- {
- Fill(StreamKind_Last, StreamPos_Last, General_ID, ID);
- Fill(StreamKind_Last, StreamPos_Last, "Title", Track->second.TrackName);
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- //Locators
- size_t Before_Count[Stream_Max];
- for (size_t Pos=0; Pos<Stream_Max; Pos++)
- Before_Count[Pos]=(size_t)-1;
- Before_Count[Stream_Video]=Count_Get(Stream_Video);
- Before_Count[Stream_Audio]=Count_Get(Stream_Audio);
- Before_Count[Stream_Text]=Count_Get(Stream_Text);
- for (size_t Locator_Pos=0; Locator_Pos<Descriptor->second.Locators.size(); Locator_Pos++)
- {
- //Locator
- Streams_Finish_Locator(DescriptorUID, Descriptor->second.Locators[Locator_Pos]);
- }
-
- if (StreamPos_Last==(size_t)-1 && Essences.size()==1)
- {
- //Only one essence, there is sometimes no LinkedTrackID
- if (Count_Get(Stream_Video)==1)
- {
- StreamKind_Last=Stream_Video;
- StreamPos_Last=0;
- }
- else if (Count_Get(Stream_Audio)==1)
- {
- StreamKind_Last=Stream_Audio;
- StreamPos_Last=0;
- }
- }
-
- if (StreamKind_Last!=Stream_Max && StreamPos_Last!=(size_t)-1)
- {
- //Handling buggy files
- if (Descriptor->second.ScanType==__T("Interlaced") && Descriptor->second.Height==1152 && Descriptor->second.Height_Display==1152 && Descriptor->second.Width==720) //Height value is height of the frame instead of the field
- Descriptor->second.Height_Display/=2;
-
- //ID
- if (Descriptor->second.LinkedTrackID!=(int32u)-1 && Retrieve(StreamKind_Last, StreamPos_Last, General_ID).empty())
- {
- for (size_t StreamKind=0; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=Before_Count[StreamKind]; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- {
- Ztring ID=Retrieve((stream_t)StreamKind, StreamPos, General_ID);
- if (ID.empty() || Config->File_ID_OnlyRoot_Get())
- Fill((stream_t)StreamKind, StreamPos, General_ID, Descriptor->second.LinkedTrackID, 10, true);
- else
- Fill((stream_t)StreamKind, StreamPos, General_ID, Ztring::ToZtring(Descriptor->second.LinkedTrackID)+ID, true);
- }
- }
-
- if (Descriptor->second.Width!=(int32u)-1 && Retrieve(Stream_Video, StreamPos_Last, Video_Width).empty())
- Fill(Stream_Video, StreamPos_Last, Video_Width, Descriptor->second.Width, 10, true);
- if (Descriptor->second.Width_Display!=(int32u)-1 && Descriptor->second.Width_Display!=Retrieve(Stream_Video, StreamPos_Last, Video_Width).To_int32u())
- {
- Fill(Stream_Video, StreamPos_Last, Video_Width_Original, Retrieve(Stream_Video, StreamPos_Last, Video_Width), true);
- if (Retrieve(Stream_Video, StreamPos_Last, Video_PixelAspectRatio_Original).empty())
- Fill(Stream_Video, StreamPos_Last, Video_PixelAspectRatio_Original, Retrieve(Stream_Video, StreamPos_Last, Video_PixelAspectRatio), true);
- Clear(Stream_Video, StreamPos_Last, Video_PixelAspectRatio);
- Fill(Stream_Video, StreamPos_Last, Video_Width, Descriptor->second.Width_Display, 10, true);
- if (Descriptor->second.Width_Display_Offset!=(int32u)-1)
- Fill(Stream_Video, StreamPos_Last, Video_Width_Offset, Descriptor->second.Width_Display_Offset, 10, true);
- }
- if (Descriptor->second.Height!=(int32u)-1 && Retrieve(Stream_Video, StreamPos_Last, Video_Height).empty())
- Fill(Stream_Video, StreamPos_Last, Video_Height, Descriptor->second.Height, 10, true);
- if (Descriptor->second.Height_Display!=(int32u)-1 && Descriptor->second.Height_Display!=Retrieve(Stream_Video, StreamPos_Last, Video_Height).To_int32u())
- {
- Fill(Stream_Video, StreamPos_Last, Video_Height_Original, Retrieve(Stream_Video, StreamPos_Last, Video_Height), true);
- if (Retrieve(Stream_Video, StreamPos_Last, Video_PixelAspectRatio_Original).empty())
- Fill(Stream_Video, StreamPos_Last, Video_PixelAspectRatio_Original, Retrieve(Stream_Video, StreamPos_Last, Video_PixelAspectRatio), true);
- Clear(Stream_Video, StreamPos_Last, Video_PixelAspectRatio);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Descriptor->second.Height_Display, 10, true);
- if (Descriptor->second.Height_Display_Offset!=(int32u)-1)
- Fill(Stream_Video, StreamPos_Last, Video_Height_Offset, Descriptor->second.Height_Display_Offset, 10, true);
- }
-
- //Info
- const Ztring &ID=Retrieve(StreamKind_Last, StreamPos_Last, General_ID);
- size_t ID_Dash_Pos=ID.find(__T('-'));
- size_t StreamWithSameID=1;
- if (ID_Dash_Pos!=(size_t)-1)
- {
- Ztring RealID=ID.substr(0, ID_Dash_Pos+1);
- while (StreamPos_Last+StreamWithSameID<Count_Get(StreamKind_Last) && Retrieve(StreamKind_Last, StreamPos_Last+StreamWithSameID, General_ID).find(RealID)==0)
- StreamWithSameID++;
- }
- if (Descriptor->second.SampleRate && StreamKind_Last==Stream_Video)
- {
- float64 SampleRate=Descriptor->second.SampleRate;
- if (StereoscopicPictureSubDescriptor_IsPresent)
- {
- SampleRate/=2;
- Fill(Stream_Video, StreamPos_Last, Video_MultiView_Count, 2, 10, true);
- }
- for (essences::iterator Essence=Essences.begin(); Essence!=Essences.end(); ++Essence)
- if (Essence->second.StreamKind==Stream_Video && Essence->second.StreamPos-(StreamPos_StartAtOne?1:0)==StreamPos_Last)
- {
- if (Essence->second.Field_Count_InThisBlock_1 && !Essence->second.Field_Count_InThisBlock_2)
- SampleRate/=2;
- break;
- }
- Ztring SampleRate_Container; SampleRate_Container.From_Number(SampleRate); //TODO: fill frame rate before the merge with raw stream information
- const Ztring &SampleRate_RawStream=Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate);
- if (!SampleRate_RawStream.empty() && SampleRate_Container!=SampleRate_RawStream)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Original, SampleRate_RawStream);
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, SampleRate, 3, true);
- }
- for (std::map<std::string, Ztring>::iterator Info=Descriptor->second.Infos.begin(); Info!=Descriptor->second.Infos.end(); ++Info)
- if (Retrieve(StreamKind_Last, StreamPos_Last, Info->first.c_str()).empty())
- {
- //Special case
- if (Info->first=="BitRate" && Retrieve(StreamKind_Last, StreamPos_Last, General_ID).find(__T(" / "))!=string::npos)
- {
- if (Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_BitRate)).empty() || Retrieve(StreamKind_Last, StreamPos_Last, General_ID).find(__T("-"))!=string::npos)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_BitRate_Encoded), Info->second.To_int64u()*2, 10, true);
- else
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_BitRate), Info->second.To_int64u()*2, 10, true);
- }
- else
- {
- for (size_t Pos=0; Pos<StreamWithSameID; Pos++)
- Fill(StreamKind_Last, StreamPos_Last+Pos, Info->first.c_str(), Info->second, true);
- }
- }
- Ztring Format, CodecID;
- if (Descriptor->second.EssenceContainer.hi!=(int64u)-1)
- {
- CodecID.From_Number(Descriptor->second.EssenceContainer.lo, 16);
- if (CodecID.size()<16)
- CodecID.insert(0, 16-CodecID.size(), __T('0'));
- Format.From_Local(Mxf_EssenceContainer(Descriptor->second.EssenceContainer));
- }
- if (Descriptor->second.EssenceCompression.hi!=(int64u)-1)
- {
- if (!CodecID.empty())
- CodecID+=__T('-');
- Ztring EssenceCompression;
- EssenceCompression.From_Number(Descriptor->second.EssenceCompression.lo, 16);
- if (EssenceCompression.size()<16)
- EssenceCompression.insert(0, 16-EssenceCompression.size(), __T('0'));
- CodecID+=EssenceCompression;
- Ztring Format_FromCompression; Format_FromCompression.From_Local(Mxf_EssenceCompression(Descriptor->second.EssenceCompression));
- if (!Format_FromCompression.empty())
- Format=Format_FromCompression; //EssenceCompression has priority
- }
- if (!CodecID.empty())
- for (size_t Pos=0; Pos<StreamWithSameID; Pos++)
- Fill(StreamKind_Last, StreamPos_Last+Pos, Fill_Parameter(StreamKind_Last, Generic_CodecID), CodecID, true);
- if (!Format.empty())
- for (size_t Pos=0; Pos<StreamWithSameID; Pos++)
- if (Retrieve(StreamKind_Last, StreamPos_Last+Pos, Fill_Parameter(StreamKind_Last, Generic_Format)).empty())
- Fill(StreamKind_Last, StreamPos_Last+Pos, Fill_Parameter(StreamKind_Last, Generic_Format), Format);
-
- //Bitrate (PCM)
- if (StreamKind_Last==Stream_Audio && Retrieve(Stream_Audio, StreamPos_Last, Audio_BitRate).empty() && Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("PCM") && Retrieve(Stream_Audio, StreamPos_Last, Audio_Format_Settings_Wrapping).find(__T("D-10"))!=string::npos)
- {
- int64u SamplingRate=Retrieve(Stream_Audio, StreamPos_Last, Audio_SamplingRate).To_int64u();
- if (SamplingRate)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, 8*SamplingRate*32);
- }
- if (StreamKind_Last==Stream_Audio && Retrieve(Stream_Audio, StreamPos_Last, Audio_BitRate).empty() && Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("PCM"))
- {
- int64u Channels=Retrieve(Stream_Audio, StreamPos_Last, Audio_Channel_s_).To_int64u();
- int64u SamplingRate=Retrieve(Stream_Audio, StreamPos_Last, Audio_SamplingRate).To_int64u();
- int64u Resolution=Retrieve(Stream_Audio, StreamPos_Last, Audio_BitDepth).To_int64u();
- if (Channels && SamplingRate && Resolution)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, Channels*SamplingRate*Resolution);
- }
-
- //Bitrate (Video)
- if (StreamKind_Last==Stream_Video && Retrieve(Stream_Video, StreamPos_Last, Video_BitRate).empty())
- {
- //Until now, I only found CBR files
- Fill(Stream_Video, StreamPos_Last, Video_BitRate, Retrieve(Stream_Video, StreamPos_Last, Video_BitRate_Nominal));
- }
-
- //Display Aspect Ratio
- if (StreamKind_Last==Stream_Video && !Descriptor->second.Infos["DisplayAspectRatio"].empty() && Retrieve(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio)!=Descriptor->second.Infos["DisplayAspectRatio"])
- {
- Ztring DAR=Retrieve(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio);
- Clear(Stream_Video, StreamPos_Last, Video_PixelAspectRatio);
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, Descriptor->second.Infos["DisplayAspectRatio"], true);
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio_Original, DAR);
- float32 Width =Retrieve(Stream_Video, StreamPos_Last, Video_Width ).To_float32();
- float32 Height=Retrieve(Stream_Video, StreamPos_Last, Video_Height ).To_float32();
- float32 DAR_F =DAR.To_float32();
- if (Width && Height && DAR_F)
- {
- float32 PAR =1/(Width/Height/DAR_F);
- if (PAR>(float32)12/(float32)11*0.99 && PAR<(float32)12/(float32)11*1.01)
- PAR=(float32)12/(float32)11;
- if (PAR>(float32)10/(float32)11*0.99 && PAR<(float32)10/(float32)11*1.01)
- PAR=(float32)10/(float32)11;
- if (PAR>(float32)16/(float32)11*0.99 && PAR<(float32)16/(float32)11*1.01)
- PAR=(float32)16/(float32)11;
- if (PAR>(float32)40/(float32)33*0.99 && PAR<(float32)40/(float32)33*1.01)
- PAR=(float32)40/(float32)33;
- if (PAR>(float32)24/(float32)11*0.99 && PAR<(float32)24/(float32)11*1.01)
- PAR=(float32)24/(float32)11;
- if (PAR>(float32)20/(float32)11*0.99 && PAR<(float32)20/(float32)11*1.01)
- PAR=(float32)20/(float32)11;
- if (PAR>(float32)32/(float32)11*0.99 && PAR<(float32)32/(float32)11*1.01)
- PAR=(float32)32/(float32)11;
- if (PAR>(float32)80/(float32)33*0.99 && PAR<(float32)80/(float32)33*1.01)
- PAR=(float32)80/(float32)33;
- if (PAR>(float32)18/(float32)11*0.99 && PAR<(float32)18/(float32)11*1.01)
- PAR=(float32)18/(float32)11;
- if (PAR>(float32)15/(float32)11*0.99 && PAR<(float32)15/(float32)11*1.01)
- PAR=(float32)15/(float32)11;
- if (PAR>(float32)64/(float32)33*0.99 && PAR<(float32)64/(float32)33*1.01)
- PAR=(float32)64/(float32)33;
- if (PAR>(float32)160/(float32)99*0.99 && PAR<(float32)160/(float32)99*1.01)
- PAR=(float32)160/(float32)99;
- if (PAR>(float32)4/(float32)3*0.99 && PAR<(float32)4/(float32)3*1.01)
- PAR=(float32)4/(float32)3;
- if (PAR>(float32)3/(float32)2*0.99 && PAR<(float32)3/(float32)2*1.01)
- PAR=(float32)3/(float32)2;
- if (PAR>(float32)2/(float32)1*0.99 && PAR<(float32)2/(float32)1*1.01)
- PAR=(float32)2;
- if (PAR>(float32)59/(float32)54*0.99 && PAR<(float32)59/(float32)54*1.01)
- PAR=(float32)59/(float32)54;
- }
- }
-
- //ActiveFormatDescriptor
- if (StreamKind_Last==Stream_Video && Descriptor->second.ActiveFormat!=(int8u)-1 && Retrieve(Stream_Video, StreamPos_Last, Video_ActiveFormatDescription).empty())
- {
- Fill(Stream_Video, 0, Video_ActiveFormatDescription, Descriptor->second.ActiveFormat);
- if (Descriptor->second.ActiveFormat<16)
- {
- float32 DAR=Retrieve(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio).To_float32();
- if (DAR>(float32)4/(float32)3*0.99 && DAR<(float32)4/(float32)3*1.01)
- Fill(Stream_Video, 0, Video_ActiveFormatDescription_String, AfdBarData_active_format_4_3[Descriptor->second.ActiveFormat]);
- if (DAR>(float32)16/(float32)9*0.99 && DAR<(float32)16/(float32)9*1.01)
- Fill(Stream_Video, 0, Video_ActiveFormatDescription_String, AfdBarData_active_format_16_9[Descriptor->second.ActiveFormat]);
- }
- if (Retrieve(Stream_Video, 0, Video_ActiveFormatDescription_String).empty())
- Fill(Stream_Video, 0, Video_ActiveFormatDescription_String, Descriptor->second.ActiveFormat);
- }
-
- //ScanType / ScanOrder
- if (StreamKind_Last==Stream_Video && Retrieve(Stream_Video, StreamPos_Last, Video_ScanType_Original).empty())
- {
- //ScanType
- if (!Descriptor->second.ScanType.empty() && (Descriptor->second.ScanType!=Retrieve(Stream_Video, StreamPos_Last, Video_ScanType) && !(Descriptor->second.ScanType==__T("Interlaced") && Retrieve(Stream_Video, StreamPos_Last, Video_ScanType)==__T("MBAFF"))))
- {
- Fill(Stream_Video, StreamPos_Last, Video_ScanType_Original, Retrieve(Stream_Video, StreamPos_Last, Video_ScanType));
- Fill(Stream_Video, StreamPos_Last, Video_ScanType, Descriptor->second.ScanType, true);
- }
-
- //ScanOrder
- Ztring ScanOrder_Temp;
- if ((Descriptor->second.FieldDominance==1 && Descriptor->second.FieldTopness==1) || (Descriptor->second.FieldDominance!=1 && Descriptor->second.FieldTopness==2))
- ScanOrder_Temp.From_UTF8("TFF");
- if ((Descriptor->second.FieldDominance==1 && Descriptor->second.FieldTopness==2) || (Descriptor->second.FieldDominance!=1 && Descriptor->second.FieldTopness==1))
- ScanOrder_Temp.From_UTF8("BFF");
- if ((!ScanOrder_Temp.empty() && ScanOrder_Temp!=Retrieve(Stream_Video, StreamPos_Last, Video_ScanOrder)) || !Retrieve(Stream_Video, StreamPos_Last, Video_ScanType_Original).empty())
- {
- Fill(Stream_Video, StreamPos_Last, Video_ScanOrder_Original, Retrieve(Stream_Video, StreamPos_Last, Video_ScanOrder), true);
- if (ScanOrder_Temp.empty())
- {
- Clear(Stream_Video, StreamPos_Last, Video_ScanOrder);
- Clear(Stream_Video, StreamPos_Last, Video_ScanOrder_String);
- }
- else
- Fill(Stream_Video, StreamPos_Last, Video_ScanOrder, ScanOrder_Temp, true);
- }
- }
-
- //BlockAlignment
- if (StreamKind_Last==Stream_Audio && Descriptor->second.BlockAlign!=(int16u)-1)
- {
- if (Retrieve(Stream_Audio, StreamPos_Last, "BlockAlignment").empty()) //TODO: check the reason it is sometimes call several times.
- Fill(Stream_Audio, StreamPos_Last, "BlockAlignment", Descriptor->second.BlockAlign);
- if (StreamPos_Last<Count_Get(Stream_Audio))
- (*Stream_More)[Stream_Audio][StreamPos_Last](Ztring().From_Local("BlockAlignment"), Info_Options)=__T("N NT");
- }
-
- //Subs and ChannelAssignment
- Ztring ChannelAssignment;
- if (Descriptor->second.ChannelAssignment.lo!=(int64u)-1)
- {
- ChannelAssignment.From_Number(Descriptor->second.ChannelAssignment.lo, 16);
- if (ChannelAssignment.size()<16)
- ChannelAssignment.insert(0, 16-ChannelAssignment.size(), __T('0'));
- }
- if (!Descriptor->second.SubDescriptors.empty())
- {
- std::vector<int128u> AudioChannelLabels_MCALabelDictionaryID;
-
- for (size_t Pos=0; Pos<Descriptor->second.SubDescriptors.size(); Pos++)
- {
- descriptors::iterator SubDescriptor=Descriptors.find(Descriptor->second.SubDescriptors[Pos]);
- if (SubDescriptor!=Descriptors.end())
- {
- switch (SubDescriptor->second.Type)
- {
- case descriptor::Type_AudioChannelLabelSubDescriptor:
- AudioChannelLabels_MCALabelDictionaryID.push_back(SubDescriptor->second.MCALabelDictionaryID);
- break;
- case descriptor::Type_SoundfieldGroupLabelSubDescriptor:
- Fill(Stream_Audio, StreamPos_Last, "MCA Partition kind", SubDescriptor->second.MCAPartitionKind);
- Fill(Stream_Audio, StreamPos_Last, "MCA Partition Number", SubDescriptor->second.MCAPartitionNumber);
- Fill(Stream_Audio, StreamPos_Last, "MCA Title", SubDescriptor->second.MCATitle);
- Fill(Stream_Audio, StreamPos_Last, "MCA Title Version", SubDescriptor->second.MCATitleVersion);
- Fill(Stream_Audio, StreamPos_Last, "MCA Title Sub-Version", SubDescriptor->second.MCATitleSubVersion);
- Fill(Stream_Audio, StreamPos_Last, "MCA Episode", SubDescriptor->second.MCAEpisode);
- Fill(Stream_Audio, StreamPos_Last, "MCA Audio Content Kind", SubDescriptor->second.MCAAudioContentKind);
- Fill(Stream_Audio, StreamPos_Last, "MCA Audio Element Kind", SubDescriptor->second.MCAAudioElementKind);
- //if (SubDescriptor->second.MCALabelDictionaryID.lo!=(int64u)-1)
- //{
- // Ztring ChannelAssignment2;
- // ChannelAssignment2.From_Number(SubDescriptor->second.MCALabelDictionaryID.lo, 16);
- // if (ChannelAssignment2.size()<16)
- // ChannelAssignment2.insert(0, 16-ChannelAssignment2.size(), __T('0'));
- // if (!ChannelAssignment.empty())
- // ChannelAssignment+=__T('-');
- // ChannelAssignment+=ChannelAssignment2;
- //}
- for (std::map<std::string, Ztring>::iterator Info=SubDescriptor->second.Infos.begin(); Info!=SubDescriptor->second.Infos.end(); ++Info)
- Fill(Stream_Audio, StreamPos_Last, Info->first.c_str(), Info->second, true);
- break;
- default: ;
- }
- }
- }
-
- if (!AudioChannelLabels_MCALabelDictionaryID.empty())
- {
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, MXF_MCALabelDictionaryID_ChannelPositions(AudioChannelLabels_MCALabelDictionaryID));
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelLayout, MXF_MCALabelDictionaryID_ChannelLayout(AudioChannelLabels_MCALabelDictionaryID));
- }
- }
- if (!ChannelAssignment.empty())
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelLayoutID, ChannelAssignment);
- }
-
- //Fallback on partition data if classic methods failed
- if (StreamKind_Last!=Stream_Max && StreamPos_Last!=(size_t)-1 && Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format)).empty() && Descriptors.size()==1 && Count_Get(StreamKind_Last)==1)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), Mxf_EssenceContainer(EssenceContainer_FromPartitionMetadata));
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_Locator(const int128u DescriptorUID, const int128u LocatorUID)
-{
- descriptors::iterator Descriptor=Descriptors.find(DescriptorUID);
- if (Descriptor==Descriptors.end())
- return;
-
- locators::iterator Locator=Locators.find(LocatorUID);
- if (Locator==Locators.end())
- return;
-
- //External file name specific
- if (!Locator->second.IsTextLocator && !Locator->second.EssenceLocator.empty())
- {
- //Preparing
- Locator->second.StreamKind=StreamKind_Last;
- Locator->second.StreamPos=StreamPos_Last;
- Locator->second.LinkedTrackID=Descriptor->second.LinkedTrackID;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_CommercialNames ()
-{
- //Commercial names
- if (Count_Get(Stream_Video)==1)
- {
- Streams_Finish_StreamOnly();
- if (!Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny).empty())
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny));
- Fill(Stream_General, 0, General_Format_Commercial, __T("MXF ")+Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny));
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("DV"))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "DV");
- Fill(Stream_General, 0, General_Format_Commercial, "MXF DV");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("AVC") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)==__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:0") && Retrieve(Stream_Video, 0, Video_BitRate)==__T("56064000"))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "AVC-Intra 50");
- Fill(Stream_General, 0, General_Format_Commercial, "MXF AVC-Intra 50");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "AVC-Intra 50");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("AVC") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)==__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:2") && Retrieve(Stream_Video, 0, Video_BitRate)==__T("113664000"))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "AVC-Intra 100");
- Fill(Stream_General, 0, General_Format_Commercial, "MXF AVC-Intra 100");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "AVC-Intra 100");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)==__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:2") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("30000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("30000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("30000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "IMX 30");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "IMX 30");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)==__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:2") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("40000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("40000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("40000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "IMX 40");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "IMX 40");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)==__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:2") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("50000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("50000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("50000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "IMX 50");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "IMX 50");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && !Retrieve(Stream_Video, 0, Video_Format_Settings_GOP).empty() && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)!=__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:0") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("18000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("18000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("18000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "XDCAM HD 18");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "XDCAM HD 18");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && !Retrieve(Stream_Video, 0, Video_Format_Settings_GOP).empty() && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)!=__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:0") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("25000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("25000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("25000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "XDCAM HD 25");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "XDCAM HD 25");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && !Retrieve(Stream_Video, 0, Video_Format_Settings_GOP).empty() && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)!=__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:0") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("35000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("35000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("35000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "XDCAM HD 35");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "XDCAM HD 35");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && !Retrieve(Stream_Video, 0, Video_Format_Settings_GOP).empty() && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)!=__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:2") && (Retrieve(Stream_Video, 0, Video_BitRate)==__T("50000000") || Retrieve(Stream_Video, 0, Video_BitRate_Nominal)==__T("50000000") || Retrieve(Stream_Video, 0, Video_BitRate_Maximum)==__T("50000000")))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "XDCAM HD422");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "XDCAM HD422");
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_Component(const int128u ComponentUID, float64 EditRate, int32u TrackID, int64u Origin)
-{
- components::iterator Component=Components.find(ComponentUID);
- if (Component==Components.end())
- return;
-
- //Duration
- if (EditRate && StreamKind_Last!=Stream_Max && Component->second.Duration!=(int64u)-1)
- {
- int64u FrameCount=Component->second.Duration;
- if (StreamKind_Last==Stream_Video || Config->File_IgnoreFramesRate)
- {
- int64u File_IgnoreFramesBefore=Config->File_IgnoreFramesBefore;
- if (File_IgnoreFramesBefore && Config->File_IgnoreFramesRate && (EditRate<Config->File_IgnoreFramesRate*0.9 || EditRate>Config->File_IgnoreFramesRate*1.1)) //In case of problem or EditRate being sampling rate
- File_IgnoreFramesBefore=float64_int64s(((float64)File_IgnoreFramesBefore)/Config->File_IgnoreFramesRate*EditRate);
- int64u File_IgnoreFramesAfter=Config->File_IgnoreFramesAfter;
- if (File_IgnoreFramesAfter!=(int64u)-1 && Config->File_IgnoreFramesRate && (EditRate<Config->File_IgnoreFramesRate*0.9 || EditRate>Config->File_IgnoreFramesRate*1.1)) //In case of problem or EditRate being sampling rate
- File_IgnoreFramesAfter=float64_int64s(((float64)File_IgnoreFramesAfter)/Config->File_IgnoreFramesRate*EditRate);
- if (File_IgnoreFramesAfter<FrameCount)
- FrameCount=File_IgnoreFramesAfter;
- if (FrameCount<File_IgnoreFramesBefore)
- FrameCount=File_IgnoreFramesBefore;
- FrameCount-=File_IgnoreFramesBefore;
- }
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Duration), FrameCount*1000/EditRate, 0, true);
- size_t ID_SubStreamInfo_Pos=Retrieve(StreamKind_Last, StreamPos_Last, General_ID).find(__T("-"));
- if (ID_SubStreamInfo_Pos!=string::npos)
- {
- Ztring ID=Retrieve(StreamKind_Last, StreamPos_Last, General_ID);
- ID.resize(ID_SubStreamInfo_Pos+1);
- size_t StreamPos_Last_Temp=StreamPos_Last;
- while (StreamPos_Last_Temp)
- {
- StreamPos_Last_Temp--;
- if (Retrieve(StreamKind_Last, StreamPos_Last_Temp, General_ID).find(ID)!=0)
- break;
- Fill(StreamKind_Last, StreamPos_Last_Temp, Fill_Parameter(StreamKind_Last, Generic_Duration), FrameCount*1000/EditRate, 0, true);
- }
- }
-
- // Hack, TODO: find a correct method for detecting fiel/frame differene
- if (StreamKind_Last==Stream_Video)
- for (essences::iterator Essence=Essences.begin(); Essence!=Essences.end(); ++Essence)
- if (Essence->second.StreamKind==Stream_Video && Essence->second.StreamPos-(StreamPos_StartAtOne?1:0)==StreamPos_Last)
- {
- if (Essence->second.Field_Count_InThisBlock_1 && !Essence->second.Field_Count_InThisBlock_2)
- FrameCount/=2;
- break;
- }
-
- if (Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_FrameCount)).empty())
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_FrameCount), FrameCount);
-
- if (Retrieve(StreamKind_Last, StreamPos_Last, "FrameRate").empty())
- Fill(StreamKind_Last, StreamPos_Last, "FrameRate", EditRate);
- }
-
- //For the sequence, searching Structural componenents
- for (size_t Pos=0; Pos<Component->second.StructuralComponents.size(); Pos++)
- {
- components::iterator Component2=Components.find(Component->second.StructuralComponents[Pos]);
- if (Component2!=Components.end() && Component2->second.TimeCode_StartTimecode!=(int64u)-1 && !Config->File_IsReferenced_Get())
- {
- bool IsDuplicate=false;
- for (size_t Pos2=0; Pos2<Count_Get(Stream_Other); Pos2++)
- if (Ztring::ToZtring(TrackID)==Retrieve(Stream_Other, Pos2, "ID"))
- IsDuplicate=true;
- if (!IsDuplicate)
- {
- //Note: Origin is not part of the StartTimecode for the first frame in the source package. From specs: "For a Timecode Track with a single Timecode Component and with origin N, where N greater than 0, the timecode value at the Zero Point of the Track equals the start timecode of the Timecode Component incremented by N units."
- TimeCode TC(Component2->second.TimeCode_StartTimecode+Config->File_IgnoreFramesBefore, (int8u)Component2->second.TimeCode_RoundedTimecodeBase, Component2->second.TimeCode_DropFrame);
- Stream_Prepare(Stream_Other);
- Fill(Stream_Other, StreamPos_Last, Other_ID, TrackID);
- Fill(Stream_Other, StreamPos_Last, Other_Type, "Time code");
- Fill(Stream_Other, StreamPos_Last, Other_Format, "MXF TC");
- //Fill(Stream_Other, StreamPos_Last, Other_MuxingMode, "Time code track");
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_FirstFrame, TC.ToString().c_str());
- Fill(Stream_Other, StreamPos_Last, Other_TimeCode_Settings, "Striped");
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Streams_Finish_Identification (const int128u IdentificationUID)
-{
- identifications::iterator Identification=Identifications.find(IdentificationUID);
- if (Identification==Identifications.end())
- return;
-
- if (!Identification->second.ProductName.empty())
- {
- Ztring Encoded_Library_Name;
- if (!Identification->second.CompanyName.empty())
- {
- Encoded_Library_Name+=Identification->second.CompanyName;
- Encoded_Library_Name+=__T(' ');
- }
- Encoded_Library_Name+=Identification->second.ProductName;
- Ztring Encoded_Library_Version;
- if (!Identification->second.ProductVersion.empty())
- {
- Encoded_Library_Version=Identification->second.ProductVersion;
- }
- else if (!Identification->second.VersionString.empty())
- {
- Encoded_Library_Version=Identification->second.VersionString;
- }
- Ztring Encoded_Application=Encoded_Library_Name;
- if (!Encoded_Library_Version.empty())
- {
- Encoded_Application+=__T(' ');
- Encoded_Application+=Encoded_Library_Version;
- }
- Fill(Stream_General, 0, General_Encoded_Application, Encoded_Application, true);
- Fill(Stream_General, 0, General_Encoded_Library_Name, Encoded_Library_Name, true);
- Fill(Stream_General, 0, General_Encoded_Library_Version, Encoded_Library_Version, true);
- }
-
- for (std::map<std::string, Ztring>::iterator Info=Identification->second.Infos.begin(); Info!=Identification->second.Infos.end(); ++Info)
- Fill(Stream_General, 0, Info->first.c_str(), Info->second, true);
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mxf::Read_Buffer_Init()
-{
- EssenceContainer_FromPartitionMetadata=0;
- #if MEDIAINFO_DEMUX
- Demux_UnpacketizeContainer=Config->Demux_Unpacketize_Get();
- Demux_Rate=Config->Demux_Rate_Get();
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Read_Buffer_Continue()
-{
- #if MEDIAINFO_DEMUX
- if (Demux_CurrentParser)
- {
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded--;
- Open_Buffer_Continue(Demux_CurrentParser, Buffer+Buffer_Offset, 0, false);
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (Config->Demux_EventWasSent)
- return;
- switch (Demux_CurrentParser->Field_Count_InThisBlock)
- {
- case 1 : Demux_CurrentEssence->second.Field_Count_InThisBlock_1++; break;
- case 2 : Demux_CurrentEssence->second.Field_Count_InThisBlock_2++; break;
- default: ;
- }
- if (Demux_CurrentParser->Buffer_Size)
- Demux_CurrentParser=NULL; //No more need of it
- }
- #endif //MEDIAINFO_DEMUX
-
- if (!IsSub)
- {
- if (Config->ParseSpeed>=1.0)
- {
- bool Buffer_End_IsUpdated=false;
- if (Config->File_IsGrowing && !Config->File_IsNotGrowingAnymore)
- {
- File F;
- F.Open(File_Name);
- std::vector<int8u> SearchingPartitionPack(65536);
- size_t SearchingPartitionPack_Size=F.Read(&SearchingPartitionPack[0], SearchingPartitionPack.size());
- for (size_t Pos=0; Pos+16<SearchingPartitionPack_Size; Pos++)
- if (SearchingPartitionPack[Pos ]==0x06
- && SearchingPartitionPack[Pos+ 1]==0x0E
- && SearchingPartitionPack[Pos+ 2]==0x2B
- && SearchingPartitionPack[Pos+ 3]==0x34
- && SearchingPartitionPack[Pos+ 4]==0x02
- && SearchingPartitionPack[Pos+ 5]==0x05
- && SearchingPartitionPack[Pos+ 6]==0x01
- && SearchingPartitionPack[Pos+ 7]==0x01
- && SearchingPartitionPack[Pos+ 8]==0x0D
- && SearchingPartitionPack[Pos+ 9]==0x01
- && SearchingPartitionPack[Pos+10]==0x02
- && SearchingPartitionPack[Pos+11]==0x01
- && SearchingPartitionPack[Pos+12]==0x01
- && SearchingPartitionPack[Pos+13]==0x02) //Header Partition Pack
- {
- switch (SearchingPartitionPack[Pos+14])
- {
- case 0x02 :
- case 0x04 :
- {
- //Filling duration
- F.Close();
- Config->File_IsNotGrowingAnymore=true;
- MediaInfo_Internal MI;
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- size_t MiOpenResult=MI.Open(File_Name);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (MiOpenResult)
- {
- Fill(Stream_General, 0, General_Format_Settings, MI.Get(Stream_General, 0, General_Format_Settings), true);
- Fill(Stream_General, 0, General_Duration, MI.Get(Stream_General, 0, General_Duration), true);
- Fill(Stream_General, 0, General_FileSize, MI.Get(Stream_General, 0, General_FileSize), true);
- Fill(Stream_General, 0, General_StreamSize, MI.Get(Stream_General, 0, General_StreamSize), true);
- if (Buffer_End_Unlimited)
- {
- Buffer_End=MI.Get(Stream_General, 0, General_FileSize).To_int64u()-MI.Get(Stream_General, 0, General_FooterSize).To_int64u();
- Buffer_End_IsUpdated=true;
- }
- if (!Config->File_IsReferenced_Get() && ReferenceFiles && Retrieve(Stream_General, 0, General_StreamSize).To_int64u())
- {
- //Playlist file size is not correctly modified
- Config->File_Size-=File_Size;
- File_Size=Retrieve(Stream_General, 0, General_StreamSize).To_int64u();
- Config->File_Size+=File_Size;
- }
- }
- }
- break;
- default : ;
- }
- }
-
- if (Buffer_End && Buffer_End_Unlimited && !Buffer_End_IsUpdated)
- Buffer_End=Config->File_Size; //Updating Clip end in case the
- }
-
- Config->State_Set(((float)Buffer_TotalBytes)/Config->File_Size);
- }
- }
-
- if ((IsCheckingRandomAccessTable || IsCheckingFooterPartitionAddress) && File_Offset+Buffer_Offset+16<File_Size)
- {
- if (Buffer_Offset+16>Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
- if (CC4(Buffer+Buffer_Offset)!=0x060E2B34 || CC3(Buffer+Buffer_Offset+4)!=0x020501 || CC3(Buffer+Buffer_Offset+8)!=0x0D0102 || CC1(Buffer+Buffer_Offset+12)!=0x01)
- {
- if (IsCheckingRandomAccessTable || (IsCheckingFooterPartitionAddress && FooterPartitionAddress_Jumped))
- TryToFinish(); //No footer
- else if (IsCheckingFooterPartitionAddress)
- {
- IsParsingEnd=true;
- GoToFromEnd(4); //For random access table
- FooterPartitionAddress_Jumped=true;
- Open_Buffer_Unsynch();
- }
- }
- IsCheckingRandomAccessTable=false;
- IsCheckingFooterPartitionAddress=false;
- }
-
- if (Config->ParseSpeed<1.0 && File_Offset+Buffer_Offset+4==File_Size)
- {
- int32u Length;
- Get_B4 (Length, "Length (Random Index)");
- if (Length>=16+4 && Length<File_Size/2)
- {
- GoToFromEnd(Length); //For random access table
- Open_Buffer_Unsynch();
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Read_Buffer_AfterParsing()
-{
- if (File_GoTo==(int64u)-1 && File_Offset+Buffer_Offset>=IsParsingMiddle_MaxOffset)
- {
- Fill();
- Open_Buffer_Unsynch();
- Finish();
- return;
- }
-
- if (File_Offset+Buffer_Size>=File_Size)
- {
- if (Partitions_IsCalculatingHeaderByteCount)
- {
- Partitions_IsCalculatingHeaderByteCount=false;
- if (Partitions_Pos<Partitions.size())
- Partitions[Partitions_Pos].PartitionPackByteCount=File_Offset+Buffer_Offset-Partitions[Partitions_Pos].StreamOffset;
- }
-
- if (IsParsingEnd)
- {
- if (PartitionMetadata_PreviousPartition && RandomIndexMetadatas.empty() && !RandomIndexMetadatas_AlreadyParsed)
- {
- Partitions_Pos=0;
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset!=PartitionMetadata_PreviousPartition)
- Partitions_Pos++;
- if (Partitions_Pos==Partitions.size())
- {
- GoTo(PartitionMetadata_PreviousPartition);
- Open_Buffer_Unsynch();
- return;
- }
- }
- }
-
- //Checking if we want to seek again
- if (File_GoTo==(int64u)-1)
- TryToFinish();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Read_Buffer_Unsynched()
-{
- //Adapting DataSizeToParse
- if (Buffer_End)
- {
- if (File_GoTo>=Buffer_End //Too much late
- || File_GoTo<=Buffer_Begin) //Too much early
- {
- Buffer_Begin=(int64u)-1;
- Buffer_End=0;
- Buffer_End_Unlimited=false;
- Buffer_Header_Size=0;
- MustSynchronize=true;
- Synched=false;
- UnSynched_IsNotJunk=true;
- }
- else
- Synched=true; //Always in clip data
- }
-
- FrameInfo=frame_info();
- FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000);
- Frame_Count_NotParsedIncluded=(int64u)-1;
- #if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- if (!Tracks.empty() && Tracks.begin()->second.EditRate) //TODO: use the corresponding track instead of the first one
- FrameInfo.DUR=float64_int64s(1000000000/Tracks.begin()->second.EditRate);
- else if (!IndexTables.empty() && IndexTables[0].IndexEditRate)
- FrameInfo.DUR=float64_int64s(1000000000/IndexTables[0].IndexEditRate);
-
- //Calculating the byte count not included in seek information (partition, index...)
- int64u FutureFileOffset=File_GoTo==(int64u)-1?(File_Offset+Buffer_Offset):File_GoTo;
- int64u StreamOffset_Offset=0;
- Partitions_Pos=0;
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset<=FutureFileOffset)
- {
- StreamOffset_Offset+=Partitions[Partitions_Pos].PartitionPackByteCount+Partitions[Partitions_Pos].HeaderByteCount+Partitions[Partitions_Pos].IndexByteCount;
- Partitions_Pos++;
- }
-
- if (Descriptors.size()==1 && Descriptors.begin()->second.ByteRate!=(int32u)-1 && Descriptors.begin()->second.SampleRate)
- {
- float64 BytePerFrame=Descriptors.begin()->second.ByteRate/Descriptors.begin()->second.SampleRate;
- float64 Frame_Count_NotParsedIncluded_Precise;
- if (FutureFileOffset>(StreamOffset_Offset+Buffer_Header_Size))
- Frame_Count_NotParsedIncluded_Precise=(FutureFileOffset-(StreamOffset_Offset+Buffer_Header_Size))/BytePerFrame; //In case of audio at frame rate not an integer
- else
- Frame_Count_NotParsedIncluded_Precise=0;
- Frame_Count_NotParsedIncluded=float64_int64s(Frame_Count_NotParsedIncluded_Precise);
- FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000+((float64)Frame_Count_NotParsedIncluded_Precise)*1000000000/Descriptors.begin()->second.SampleRate);
- FrameInfo.PTS=FrameInfo.DTS;
- if (!Tracks.empty() && Tracks.begin()->second.EditRate) //TODO: use the corresponding track instead of the first one
- FrameInfo.DUR=float64_int64s(1000000000/Tracks.begin()->second.EditRate);
- else if (!IndexTables.empty() && IndexTables[0].IndexEditRate)
- FrameInfo.DUR=float64_int64s(1000000000/IndexTables[0].IndexEditRate);
- else
- FrameInfo.DUR=float64_int64s(1000000000/Descriptors.begin()->second.SampleRate);
- Demux_random_access=true;
- }
- else if (!IndexTables.empty() && IndexTables[0].EditUnitByteCount)
- {
- int64u Position=0;
- Frame_Count_NotParsedIncluded=0;
- for (size_t Pos=0; Pos<IndexTables.size(); Pos++)
- {
- if (IndexTables[0].IndexDuration && FutureFileOffset>=((Buffer_End?Buffer_Begin:(StreamOffset_Offset+Buffer_Header_Size))+Position)+IndexTables[Pos].IndexDuration*IndexTables[Pos].EditUnitByteCount) //Considering IndexDuration=0 as unlimited
- {
- Position+=SDTI_SizePerFrame+IndexTables[Pos].EditUnitByteCount*IndexTables[Pos].IndexDuration;
- Frame_Count_NotParsedIncluded+=IndexTables[Pos].IndexDuration;
- }
- else
- {
- int64u FramesToAdd;
- if (FutureFileOffset>((Buffer_End?Buffer_Begin:(StreamOffset_Offset+Buffer_Header_Size))+Position))
- FramesToAdd=(FutureFileOffset-((Buffer_End?Buffer_Begin:(StreamOffset_Offset+Buffer_Header_Size))+Position))/IndexTables[Pos].EditUnitByteCount;
- else
- FramesToAdd=0;
- Position+=(SDTI_SizePerFrame+IndexTables[Pos].EditUnitByteCount)*FramesToAdd;
- if (IndexTables[Pos].IndexEditRate)
- {
- if (Descriptors.size()==1 && Descriptors.begin()->second.SampleRate!=IndexTables[Pos].IndexEditRate)
- {
- float64 Frame_Count_NotParsedIncluded_Precise=((float64)FramesToAdd)/IndexTables[Pos].IndexEditRate*Descriptors.begin()->second.SampleRate;
- Frame_Count_NotParsedIncluded+=float64_int64s(((float64)FramesToAdd)/IndexTables[Pos].IndexEditRate*Descriptors.begin()->second.SampleRate);
- FrameInfo.PTS=FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000+((float64)Frame_Count_NotParsedIncluded_Precise)*1000000000/Descriptors.begin()->second.SampleRate);
- }
- else
- {
- Frame_Count_NotParsedIncluded+=FramesToAdd;
- FrameInfo.PTS=FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000+((float64)Frame_Count_NotParsedIncluded)*1000000000/IndexTables[Pos].IndexEditRate);
- }
- }
- else
- FrameInfo.PTS=FrameInfo.DTS=(int64u)-1;
- Demux_random_access=true;
-
- break;
- }
- }
- }
- else if (!IndexTables.empty() && !IndexTables[0].Entries.empty())
- {
- int64u StreamOffset;
- if (StreamOffset_Offset<FutureFileOffset)
- StreamOffset=FutureFileOffset-StreamOffset_Offset;
- else
- StreamOffset=0;
- for (size_t Pos=0; Pos<IndexTables.size(); Pos++)
- {
- //Searching the right index
- if (!IndexTables[Pos].Entries.empty() && StreamOffset>=IndexTables[Pos].Entries[0].StreamOffset+(IndexTables[Pos].IndexStartPosition)*SDTI_SizePerFrame && (Pos+1>=IndexTables.size() || IndexTables[Pos+1].Entries.empty() || StreamOffset<IndexTables[Pos+1].Entries[0].StreamOffset+(IndexTables[Pos+1].IndexStartPosition)*SDTI_SizePerFrame))
- {
- //Searching the frame pos
- for (size_t EntryPos=0; EntryPos<IndexTables[Pos].Entries.size(); EntryPos++)
- {
- //Testing coherency
- int64u Entry0_StreamOffset=0; //For coherency checking
- int64u Entry_StreamOffset=IndexTables[Pos].Entries[EntryPos].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos)*SDTI_SizePerFrame;
- int64u Entry1_StreamOffset=File_Size; //For coherency checking
- if (EntryPos==0 && Pos && IndexTables[Pos-1].Entries.empty())
- Entry0_StreamOffset=IndexTables[Pos-1].Entries[IndexTables[Pos-1].Entries.size()-1].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos-1)*SDTI_SizePerFrame;
- else if (EntryPos)
- Entry0_StreamOffset=IndexTables[Pos].Entries[EntryPos-1].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos-1)*SDTI_SizePerFrame;
- if (EntryPos+1<IndexTables[Pos].Entries.size())
- Entry1_StreamOffset=IndexTables[Pos].Entries[EntryPos+1].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos+1)*SDTI_SizePerFrame;
- else if (Pos+1<IndexTables.size() && !IndexTables[Pos+1].Entries.empty())
- Entry1_StreamOffset=IndexTables[Pos+1].Entries[0].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos+1)*SDTI_SizePerFrame;
-
- if (Entry0_StreamOffset>Entry_StreamOffset || Entry_StreamOffset>Entry1_StreamOffset)
- break; //Problem
-
- if (StreamOffset>=Entry_StreamOffset && StreamOffset<Entry1_StreamOffset)
- {
- //Special case: we are not sure the last index is the last frame, doing nothing
- if (Pos+1==IndexTables.size() && EntryPos+1==IndexTables[Pos].Entries.size())
- break;
-
- Frame_Count_NotParsedIncluded=IndexTables[Pos].IndexStartPosition+EntryPos;
- if (IndexTables[Pos].IndexEditRate)
- FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000+((float64)Frame_Count_NotParsedIncluded)/IndexTables[Pos].IndexEditRate*1000000000);
- Demux_random_access=IndexTables[Pos].Entries[EntryPos].Type?false:true;
- break;
- }
- }
- }
- }
- }
- else if (OverallBitrate_IsCbrForSure)
- {
- int64u Begin=Partitions[0].StreamOffset+Partitions[0].PartitionPackByteCount+Partitions[0].HeaderByteCount+Partitions[0].IndexByteCount;
- Frame_Count_NotParsedIncluded=(FutureFileOffset-Begin)/OverallBitrate_IsCbrForSure;
- if (!Descriptors.empty() && Descriptors.begin()->second.SampleRate)
- FrameInfo.PTS=FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000+((float64)Frame_Count_NotParsedIncluded)*1000000000/Descriptors.begin()->second.SampleRate);
- }
- else if (Frame_Count_NotParsedIncluded==0)
- {
- FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000);
- }
-
- #endif //if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
-
- if (!Tracks.empty() && Tracks.begin()->second.EditRate) //TODO: use the corresponding track instead of the first one
- FrameInfo.DUR=float64_int64s(1000000000/Tracks.begin()->second.EditRate);
- #if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- else if (!IndexTables.empty() && IndexTables[0].IndexEditRate)
- FrameInfo.DUR=float64_int64s(1000000000/IndexTables[0].IndexEditRate);
- #endif //if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
-
- for (essences::iterator Essence=Essences.begin(); Essence!=Essences.end(); ++Essence)
- for (parsers::iterator Parser=Essence->second.Parsers.begin(); Parser!=Essence->second.Parsers.end(); ++Parser)
- {
- (*Parser)->Open_Buffer_Unsynch();
- Essence->second.FrameInfo=FrameInfo;
- Essence->second.Frame_Count_NotParsedIncluded=Frame_Count_NotParsedIncluded;
- }
-
- Partitions_Pos=0;
- if (Partitions_IsCalculatingHeaderByteCount)
- {
- Partitions.erase(Partitions.end()-1);
- Partitions_IsCalculatingHeaderByteCount=false;
- }
- if (Partitions_IsCalculatingSdtiByteCount)
- Partitions_IsCalculatingSdtiByteCount=false;
- Essences_FirstEssence_Parsed=false;
-
- #if MEDIAINFO_SEEK
- IndexTables_Pos=0;
- #endif //MEDIAINFO_SEEK
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
-bool File_Mxf::DetectDuration ()
-{
- if (Duration_Detected)
- return false;
-
- MediaInfo_Internal MI;
- MI.Option(__T("File_IsDetectingDuration"), __T("1"));
- MI.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI.Option(__T("Demux_Get"), __T(""));
- MI.Option(__T("ParseSpeed"), __T("0"));
- MI.Option(__T("Demux"), Ztring());
- size_t MiOpenResult=MI.Open(File_Name);
- MI.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (!MiOpenResult || MI.Get(Stream_General, 0, General_Format)!=__T("MXF"))
- return false;
- Partitions=((File_Mxf*)MI.Info)->Partitions;
- std::sort(Partitions.begin(), Partitions.end());
- IndexTables=((File_Mxf*)MI.Info)->IndexTables;
- std::sort(IndexTables.begin(), IndexTables.end());
- SDTI_SizePerFrame=((File_Mxf*)MI.Info)->SDTI_SizePerFrame;
- Clip_Begin=((File_Mxf*)MI.Info)->Clip_Begin;
- Clip_End=((File_Mxf*)MI.Info)->Clip_End;
- Clip_Header_Size=((File_Mxf*)MI.Info)->Clip_Header_Size;
- Clip_Code=((File_Mxf*)MI.Info)->Clip_Code;
- Tracks=((File_Mxf*)MI.Info)->Tracks; //In one file (*-009.mxf), the TrackNumber is known only at the end of the file (Open and incomplete header/footer)
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- Track->second.Stream_Finish_Done=false; //Reseting the value, it is not done in this instance
- if (MI.Get(Stream_General, 0, General_OverallBitRate_Mode)==__T("CBR") && Partitions.size()==2 && Partitions[0].FooterPartition==Partitions[1].StreamOffset && !Descriptors.empty())
- {
- //Searching duration
- int64u Duration=0;
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- if (Descriptor->second.Duration!=(int64u)-1 && Descriptor->second.Duration)
- {
- if (Duration && Duration!=Descriptor->second.Duration)
- {
- Duration=0;
- break; //Not supported
- }
- Duration=Descriptor->second.Duration;
- }
-
- //Computing the count of bytes per frame
- if (Duration)
- {
- int64u Begin=Partitions[0].StreamOffset+Partitions[0].PartitionPackByteCount+Partitions[0].HeaderByteCount+Partitions[0].IndexByteCount;
- float64 BytesPerFrameF=((float64)(Partitions[0].FooterPartition-Begin)/Duration);
- OverallBitrate_IsCbrForSure=float64_int64s(BytesPerFrameF);
- if (OverallBitrate_IsCbrForSure!=BytesPerFrameF) //Testing integrity of the computing
- OverallBitrate_IsCbrForSure=0;
- }
- }
- Duration_Detected=true;
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX || MEDIAINFO_SEEK
-
-#if MEDIAINFO_SEEK
-size_t File_Mxf::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles)
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-
- //Init
- if (!Duration_Detected)
- {
- if (!DetectDuration())
- return 0;
- }
-
- //Config - TODO: merge with the one in Data_Parse()
- if (!Essences_FirstEssence_Parsed)
- {
- if (Descriptors.size()==1 && Descriptors.begin()->second.StreamKind==Stream_Audio)
- {
- //Configuring bitrate is not available in descriptor
- if (Descriptors.begin()->second.ByteRate==(int32u)-1 && Descriptors.begin()->second.Infos.find("SamplingRate")!=Descriptors.begin()->second.Infos.end())
- {
- int32u SamplingRate=Descriptors.begin()->second.Infos["SamplingRate"].To_int32u();
-
- if (Descriptors.begin()->second.BlockAlign!=(int16u)-1)
- Descriptors.begin()->second.ByteRate=SamplingRate*Descriptors.begin()->second.BlockAlign;
- else if (Descriptors.begin()->second.QuantizationBits!=(int8u)-1)
- Descriptors.begin()->second.ByteRate=SamplingRate*Descriptors.begin()->second.QuantizationBits/8;
- }
-
- //Configuring EditRate if needed (e.g. audio at 48000 Hz)
- if (Demux_Rate) //From elsewhere
- {
- Descriptors.begin()->second.SampleRate=Demux_Rate;
- }
- else if (Descriptors.begin()->second.SampleRate>1000)
- {
- float64 EditRate_FromTrack=DBL_MAX;
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- if (EditRate_FromTrack>Track->second.EditRate)
- EditRate_FromTrack=Track->second.EditRate;
- if (EditRate_FromTrack>1000)
- Descriptors.begin()->second.SampleRate=24; //Default value
- else
- Descriptors.begin()->second.SampleRate=EditRate_FromTrack;
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- if (Track->second.EditRate>EditRate_FromTrack)
- {
- Track->second.EditRate_Real=Track->second.EditRate;
- Track->second.EditRate=EditRate_FromTrack;
- }
- }
- }
-
- Essences_FirstEssence_Parsed=true;
- }
- //Parsing
- switch (Method)
- {
- case 0 :
- {
- if (Config->File_IgnoreFramesBefore && Config->File_IgnoreFramesRate)
- {
- Read_Buffer_Seek(3, 0, (int64u)-1);
- if (File_GoTo!=(int64u)-1)
- Value+=File_GoTo;
- }
-
- //Calculating the byte count not included in seek information (partition, index...)
- Partitions_Pos=0;
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset<Value)
- Partitions_Pos++;
- if (Partitions_Pos && (Partitions_Pos==Partitions.size() || Partitions[Partitions_Pos].StreamOffset!=Value))
- Partitions_Pos--; //This is the previous item
- if (Partitions_Pos>=Partitions.size())
- {
- GoTo(0);
- Open_Buffer_Unsynch();
- return 1;
- }
- int64u StreamOffset_Offset=Partitions[Partitions_Pos].StreamOffset-Partitions[Partitions_Pos].BodyOffset+Partitions[Partitions_Pos].PartitionPackByteCount+Partitions[Partitions_Pos].HeaderByteCount+Partitions[Partitions_Pos].IndexByteCount;
-
- //If in header
- if ((Clip_Begin!=(int64u)-1 && Value<Clip_Begin) || Value<StreamOffset_Offset)
- {
- GoTo(StreamOffset_Offset);
- Open_Buffer_Unsynch();
- return 1;
- }
-
- if (Buffer_End
- && Descriptors.size()==1 && Descriptors.begin()->second.ByteRate!=(int32u)-1 && Descriptors.begin()->second.BlockAlign && Descriptors.begin()->second.BlockAlign!=(int16u)-1 && Descriptors.begin()->second.SampleRate)
- {
- if (Value>StreamOffset_Offset)
- {
- float64 BytesPerFrame=Descriptors.begin()->second.ByteRate/Descriptors.begin()->second.SampleRate;
- int64u FrameCount=(int64u)((Value-Buffer_Begin)/BytesPerFrame);
- int64u SizeBlockAligned=float64_int64s(FrameCount*BytesPerFrame);
- SizeBlockAligned/=Descriptors.begin()->second.BlockAlign;
- SizeBlockAligned*=Descriptors.begin()->second.BlockAlign;
-
- GoTo(Buffer_Begin+SizeBlockAligned);
- Open_Buffer_Unsynch();
- return 1;
- }
- }
- else if (Buffer_End
- && !IndexTables.empty() && IndexTables[0].EditUnitByteCount)
- {
- int64u Stream_Offset=0;
- for (size_t Pos=0; Pos<IndexTables.size(); Pos++)
- {
- if (IndexTables[Pos].IndexDuration==0 || Value<StreamOffset_Offset+Stream_Offset+IndexTables[Pos].IndexDuration*IndexTables[Pos].EditUnitByteCount)
- {
- int64u FrameToAdd=(Value-(StreamOffset_Offset+Stream_Offset))/IndexTables[Pos].EditUnitByteCount;
- Stream_Offset+=FrameToAdd*IndexTables[Pos].EditUnitByteCount;
-
- GoTo(Buffer_Begin+Stream_Offset);
- Open_Buffer_Unsynch();
- return 1;
- }
- else
- Stream_Offset+=IndexTables[Pos].IndexDuration*IndexTables[Pos].EditUnitByteCount;
- }
- return 2; //Invalid value
- }
-
- GoTo(Value);
- Open_Buffer_Unsynch();
- return 1;
- }
- case 1 :
- return Read_Buffer_Seek(0, File_Size*Value/10000, ID);
- case 2 : //Timestamp
- {
- if (Config->File_IgnoreFramesBefore && Config->File_IgnoreFramesRate)
- Value+=float64_int64s(((float64)Config->File_IgnoreFramesBefore)/Config->File_IgnoreFramesRate*1000000000);
-
- //We transform TimeStamp to a frame number
- descriptors::iterator Descriptor;
- for (Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- if (Descriptors.begin()->second.SampleRate)
- break;
- if (Descriptor==Descriptors.end())
- return (size_t)-1; //Not supported
-
- if (Config->Demux_Offset_DTS!=(int64u)-1)
- {
- int64u Delay=Config->Demux_Offset_DTS;
- if (Value<Delay)
- return 2; //Invalid value
- Value-=Delay;
- }
- else if (TimeCode_StartTimecode!=(int64u)-1)
- {
- int64u Delay=float64_int64s(DTS_Delay*1000000000);
- if (Value<Delay)
- return 2; //Invalid value
- Value-=Delay;
- }
- Value=float64_int64s(((float64)Value)/1000000000*Descriptor->second.SampleRate);
- }
- //No break;
- case 3 : //FrameNumber
- Value+=Config->File_IgnoreFramesBefore;
-
- if (Descriptors.size()==1 && Descriptors.begin()->second.ByteRate!=(int32u)-1 && Descriptors.begin()->second.BlockAlign && Descriptors.begin()->second.BlockAlign!=(int16u)-1 && Descriptors.begin()->second.SampleRate)
- {
- float64 BytesPerFrame=Descriptors.begin()->second.ByteRate/Descriptors.begin()->second.SampleRate;
- int64u StreamOffset=(int64u)(Value*BytesPerFrame);
- StreamOffset/=Descriptors.begin()->second.BlockAlign;
- StreamOffset*=Descriptors.begin()->second.BlockAlign;
-
- //Calculating the byte count not included in seek information (partition, index...)
- int64u StreamOffset_Offset=0;
- Partitions_Pos=0;
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset<=StreamOffset_Offset+StreamOffset+Value*SDTI_SizePerFrame)
- {
- StreamOffset_Offset+=Partitions[Partitions_Pos].PartitionPackByteCount+Partitions[Partitions_Pos].HeaderByteCount+Partitions[Partitions_Pos].IndexByteCount;
- Partitions_Pos++;
- }
-
- if (Clip_Begin!=(int64u)-1)
- {
- Buffer_Begin=Clip_Begin;
- Buffer_End=Clip_End;
- Buffer_Header_Size=Clip_Header_Size;
- Code=Clip_Code;
- MustSynchronize=false;
- #if MEDIAINFO_DEMUX
- if (Buffer_End && Demux_UnpacketizeContainer && Essences.size()==1 && Essences.begin()->second.Parsers.size()==1 && (*(Essences.begin()->second.Parsers.begin()))->Demux_UnpacketizeContainer)
- {
- (*(Essences.begin()->second.Parsers.begin()))->Demux_Level=2; //Container
- (*(Essences.begin()->second.Parsers.begin()))->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- }
-
- GoTo(StreamOffset_Offset+Buffer_Header_Size+StreamOffset+Value*SDTI_SizePerFrame);
- Open_Buffer_Unsynch();
- return 1;
- }
- else if (!IndexTables.empty() && IndexTables[0].EditUnitByteCount)
- {
- if (Descriptors.size()==1 && Descriptors.begin()->second.SampleRate!=IndexTables[0].IndexEditRate)
- {
- float64 ValueF=(float64)Value;
- ValueF/=Descriptors.begin()->second.SampleRate;
- ValueF*=IndexTables[0].IndexEditRate;
- Value=float64_int64s(ValueF);
- }
-
- if (IndexTables[IndexTables.size()-1].IndexDuration && IndexTables[IndexTables.size()-1].IndexStartPosition!=(int64u)-1 && Value>=IndexTables[IndexTables.size()-1].IndexStartPosition+IndexTables[IndexTables.size()-1].IndexDuration) //Considering IndexDuration=0 as unlimited
- return 2; //Invalid value
-
- int64u StreamOffset=0;
- for (size_t Pos=0; Pos<IndexTables.size(); Pos++)
- {
- if (IndexTables[Pos].IndexDuration && Value>IndexTables[Pos].IndexStartPosition+IndexTables[Pos].IndexDuration) //Considering IndexDuration=0 as unlimited
- StreamOffset+=IndexTables[Pos].EditUnitByteCount*IndexTables[Pos].IndexDuration;
- else
- {
- StreamOffset+=IndexTables[Pos].EditUnitByteCount*(Value-IndexTables[Pos].IndexStartPosition);
- break;
- }
- }
-
- //Calculating the byte count not included in seek information (partition, index...)
- int64u StreamOffset_Offset=0;
- Partitions_Pos=0;
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset<=StreamOffset_Offset+StreamOffset+Value*SDTI_SizePerFrame)
- {
- StreamOffset_Offset+=Partitions[Partitions_Pos].PartitionPackByteCount+Partitions[Partitions_Pos].HeaderByteCount+Partitions[Partitions_Pos].IndexByteCount;
- Partitions_Pos++;
- }
-
- if (Clip_Begin!=(int64u)-1)
- {
- Buffer_Begin=Clip_Begin;
- Buffer_End=Clip_End;
- Buffer_Header_Size=Clip_Header_Size;
- Code=Clip_Code;
- MustSynchronize=false;
- #if MEDIAINFO_DEMUX
- if (Buffer_End && Demux_UnpacketizeContainer && Essences.size()==1 && Essences.begin()->second.Parsers.size()==1 && (*(Essences.begin()->second.Parsers.begin()))->Demux_UnpacketizeContainer)
- {
- (*(Essences.begin()->second.Parsers.begin()))->Demux_Level=2; //Container
- (*(Essences.begin()->second.Parsers.begin()))->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- }
-
- GoTo(StreamOffset_Offset+Buffer_Header_Size+StreamOffset+Value*SDTI_SizePerFrame);
- Open_Buffer_Unsynch();
- return 1;
- }
- else if (!IndexTables.empty() && !IndexTables[0].Entries.empty())
- {
- for (size_t Pos=0; Pos<IndexTables.size(); Pos++)
- {
- if (Value>=IndexTables[Pos].IndexStartPosition && Value<IndexTables[Pos].IndexStartPosition+IndexTables[Pos].IndexDuration)
- {
- while (Value>=IndexTables[Pos].IndexStartPosition && IndexTables[Pos].Entries[(size_t)(Value-IndexTables[Pos].IndexStartPosition)].Type)
- {
- Value--;
- if (Value<IndexTables[Pos].IndexStartPosition)
- {
- if (Pos==0)
- break; //There is a problem
- Pos--; //In previous index
- }
- }
-
- int64u StreamOffset=IndexTables[Pos].Entries[(size_t)(Value-IndexTables[Pos].IndexStartPosition)].StreamOffset;
-
- //Calculating the byte count not included in seek information (partition, index...)
- int64u StreamOffset_Offset=0;
- Partitions_Pos=0;
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset<=StreamOffset_Offset+StreamOffset+Value*SDTI_SizePerFrame)
- {
- StreamOffset_Offset+=Partitions[Partitions_Pos].PartitionPackByteCount+Partitions[Partitions_Pos].HeaderByteCount+Partitions[Partitions_Pos].IndexByteCount;
- Partitions_Pos++;
- }
-
- if (Clip_Begin!=(int64u)-1)
- {
- Buffer_Begin=Clip_Begin;
- Buffer_End=Clip_End;
- Buffer_Header_Size=Clip_Header_Size;
- Code=Clip_Code;
- MustSynchronize=false;
- #if MEDIAINFO_DEMUX
- if (Buffer_End && Demux_UnpacketizeContainer && Essences.size()==1 && Essences.begin()->second.Parsers.size()==1 && (*(Essences.begin()->second.Parsers.begin()))->Demux_UnpacketizeContainer)
- {
- (*(Essences.begin()->second.Parsers.begin()))->Demux_Level=2; //Container
- (*(Essences.begin()->second.Parsers.begin()))->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- }
-
- GoTo(StreamOffset_Offset+Buffer_Header_Size+StreamOffset+Value*SDTI_SizePerFrame);
- Open_Buffer_Unsynch();
- return 1;
- }
- }
- return 2; //Invalid value
- }
- else if (OverallBitrate_IsCbrForSure)
- {
- int64u Begin=Partitions[0].StreamOffset+Partitions[0].PartitionPackByteCount+Partitions[0].HeaderByteCount+Partitions[0].IndexByteCount;
- GoTo(Begin+Value*OverallBitrate_IsCbrForSure);
- Open_Buffer_Unsynch();
- return 1;
- }
- else
- return (size_t)-1; //Not supported
- default : return (size_t)-1; //Not supported
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mxf::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<0x18)
- return false; //Must wait for more data
-
- //AAF has some MXF start codes
- if (Buffer[ 0x0]==0xD0
- && Buffer[ 0x1]==0xCF
- && Buffer[ 0x2]==0x11
- && Buffer[ 0x3]==0xE0
- && Buffer[ 0x4]==0xA1
- && Buffer[ 0x5]==0xB1
- && Buffer[ 0x6]==0x1A
- && Buffer[ 0x7]==0xE1
- && Buffer[ 0x8]==0x41
- && Buffer[ 0x9]==0x41
- && Buffer[ 0xA]==0x46
- && Buffer[ 0xB]==0x42
- && Buffer[ 0xC]==0x0D
- && Buffer[ 0xD]==0x00
- && Buffer[ 0xE]==0x4F
- && Buffer[ 0xF]==0x4D
- && Buffer[0x10]==0x06
- && Buffer[0x11]==0x0E
- && Buffer[0x12]==0x2B
- && Buffer[0x13]==0x34
- && Buffer[0x14]==0x01
- && Buffer[0x15]==0x01
- && Buffer[0x16]==0x01
- && Buffer[0x17]==0xFF)
- {
- Reject("Mxf");
- return false;
- }
-
- //DCA uses buffer interface without filename
- if (File_Name.empty())
- File_Name=Config->File_FileName_Get();
-
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mxf::Synchronize()
-{
- //Synchronizing
- while (Buffer_Offset+4<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x06
- || Buffer[Buffer_Offset+1]!=0x0E
- || Buffer[Buffer_Offset+2]!=0x2B
- || Buffer[Buffer_Offset+3]!=0x34))
- {
- Buffer_Offset++;
- while (Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x06)
- Buffer_Offset++;
- }
-
-
- while (Buffer_Offset+4<=Buffer_Size
- && CC4(Buffer+Buffer_Offset)!=0x060E2B34)
- Buffer_Offset++;
-
- //Parsing last bytes if needed
- if (Buffer_Offset+4>Buffer_Size)
- {
- if (Buffer_Offset+3==Buffer_Size && CC3(Buffer+Buffer_Offset)!=0x060E2B)
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x060E)
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0x06)
- Buffer_Offset++;
- return false;
- }
-
- if (!Status[IsAccepted])
- {
- Accept();
-
- Fill(Stream_General, 0, General_Format, "MXF");
-
- File_Buffer_Size_Hint_Pointer=Config->File_Buffer_Size_Hint_Pointer_Get();
- }
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Mxf::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+16>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (CC4(Buffer+Buffer_Offset)!=0x060E2B34)
- Synched=false;
-
- //Trace config
- #if MEDIAINFO_TRACE
- if (Synched)
- {
- int64u Compare=CC8(Buffer+Buffer_Offset+ 4);
- if (Compare==0x010201010D010301LL //Raw stream
- || (Compare==0x0101010203010210LL && CC1(Buffer+Buffer_Offset+12)==0x01) //Filler
- || (Compare==0x020501010D010301LL && CC3(Buffer+Buffer_Offset+12)==0x040101) //SDTI Package Metadata Pack
- || (Compare==0x024301010D010301LL && CC3(Buffer+Buffer_Offset+12)==0x040102) //SDTI Package Metadata Set
- || (Compare==0x025301010D010301LL && CC3(Buffer+Buffer_Offset+12)==0x140201)) //System Scheme 1
- {
- Trace_Layers_Update(8); //Stream
- }
- else
- {
- Trace_Layers_Update(0); //Container1
- }
- }
- #endif //MEDIAINFO_TRACE
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mxf::Header_Begin()
-{
- while (Buffer_End)
- {
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer && Descriptors.size()==1 && Descriptors.begin()->second.ByteRate!=(int32u)-1 && Descriptors.begin()->second.BlockAlign && Descriptors.begin()->second.BlockAlign!=(int16u)-1 && Descriptors.begin()->second.SampleRate)
- {
- float64 BytesPerFrame=((float64)Descriptors.begin()->second.ByteRate)/Descriptors.begin()->second.SampleRate;
- int64u FramesAlreadyParsed=float64_int64s(((float64)(File_Offset+Buffer_Offset-Buffer_Begin))/BytesPerFrame);
- Element_Size=float64_int64s(Descriptors.begin()->second.ByteRate/Descriptors.begin()->second.SampleRate*(FramesAlreadyParsed+1));
- Element_Size/=Descriptors.begin()->second.BlockAlign;
- Element_Size*=Descriptors.begin()->second.BlockAlign;
- Element_Size-=File_Offset+Buffer_Offset-Buffer_Begin;
- if (Config->File_IsGrowing && Element_Size && File_Offset+Buffer_Offset+Element_Size>Buffer_End)
- return false; //Waiting for more data
- while (Element_Size && File_Offset+Buffer_Offset+Element_Size>Buffer_End)
- Element_Size-=Descriptors.begin()->second.BlockAlign;
- if (Element_Size==0)
- Element_Size=Buffer_End-(File_Offset+Buffer_Offset);
- if (Buffer_Offset+Element_Size>Buffer_Size)
- return false;
- }
- else if (Demux_UnpacketizeContainer && !IndexTables.empty() && IndexTables[0].EditUnitByteCount)
- {
- //Calculating the byte count not included in seek information (partition, index...)
- int64u StreamOffset_Offset;
- if (!Partitions.empty())
- {
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset<File_Offset+Buffer_Offset-Header_Size)
- Partitions_Pos++;
- if (Partitions_Pos && (Partitions_Pos==Partitions.size() || Partitions[Partitions_Pos].StreamOffset!=File_Offset+Buffer_Offset-Header_Size))
- Partitions_Pos--; //This is the previous item
- StreamOffset_Offset=Partitions[Partitions_Pos].StreamOffset-Partitions[Partitions_Pos].BodyOffset+Partitions[Partitions_Pos].PartitionPackByteCount+Partitions[Partitions_Pos].HeaderByteCount+Partitions[Partitions_Pos].IndexByteCount;
- }
- else
- StreamOffset_Offset=0;
-
- int64u Position=0;
- for (size_t Pos=0; Pos<IndexTables.size(); Pos++)
- {
- if (IndexTables[Pos].IndexDuration && File_Offset+Buffer_Offset>=StreamOffset_Offset+Buffer_Header_Size+Position+IndexTables[Pos].IndexDuration*IndexTables[Pos].EditUnitByteCount) //Considering IndexDuration==0 as unlimited
- Position+=IndexTables[Pos].EditUnitByteCount*IndexTables[Pos].IndexDuration;
- else
- {
- Element_Size=IndexTables[Pos].EditUnitByteCount;
- if (File_Offset+Buffer_Offset+Element_Size>Buffer_End)
- {
- Element_Size=Buffer_End-(File_Offset+Buffer_Offset);
- break; //There is a problem
- }
-
- if (Buffer_Offset+Element_Size>Buffer_Size)
- {
- //Hints
- if (File_Buffer_Size_Hint_Pointer)
- {
- size_t Buffer_Size_Target=(size_t)(Buffer_Offset+Element_Size-Buffer_Size+24); //+24 for next packet header
- if (Buffer_Size_Target<128*1024)
- Buffer_Size_Target=128*1024;
- //if ((*File_Buffer_Size_Hint_Pointer)<Buffer_Size_Target)
- (*File_Buffer_Size_Hint_Pointer)=Buffer_Size_Target;
- }
-
- return false;
- }
- break;
- }
- }
-
- if (Buffer_Offset+(size_t)Element_Size>Buffer_Size)
- Element_Size=Buffer_Size-Buffer_Offset; //There is a problem
- }
- else if (Demux_UnpacketizeContainer && !IndexTables.empty() && !IndexTables[0].Entries.empty())
- {
- //Calculating the byte count not included in seek information (partition, index...)
- int64u StreamOffset_Offset;
- if (!Partitions.empty())
- {
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset<File_Offset+Buffer_Offset-Header_Size)
- Partitions_Pos++;
- if (Partitions_Pos && (Partitions_Pos==Partitions.size() || Partitions[Partitions_Pos].StreamOffset!=File_Offset+Buffer_Offset-Header_Size))
- Partitions_Pos--; //This is the previous item
- StreamOffset_Offset=Partitions[Partitions_Pos].StreamOffset-Partitions[Partitions_Pos].BodyOffset+Partitions[Partitions_Pos].PartitionPackByteCount+Partitions[Partitions_Pos].HeaderByteCount+Partitions[Partitions_Pos].IndexByteCount;
- }
- else
- StreamOffset_Offset=0;
-
- int64u StreamOffset=File_Offset+Buffer_Offset-StreamOffset_Offset;
- for (size_t Pos=0; Pos<IndexTables.size(); Pos++)
- {
- //Searching the right index
- if (!IndexTables[Pos].Entries.empty() && StreamOffset>=IndexTables[Pos].Entries[0].StreamOffset+(IndexTables[Pos].IndexStartPosition)*SDTI_SizePerFrame && (Pos+1>=IndexTables.size() || StreamOffset<IndexTables[Pos+1].Entries[0].StreamOffset+(IndexTables[Pos+1].IndexStartPosition)*SDTI_SizePerFrame))
- {
- //Searching the frame pos
- for (size_t EntryPos=0; EntryPos<IndexTables[Pos].Entries.size(); EntryPos++)
- {
- //Testing coherency
- int64u Entry0_StreamOffset=0; //For coherency checking
- int64u Entry_StreamOffset=IndexTables[Pos].Entries[EntryPos].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos)*SDTI_SizePerFrame;
- int64u Entry1_StreamOffset=File_Size; //For coherency checking
- if (EntryPos==0 && Pos && IndexTables[Pos-1].Entries.empty())
- Entry0_StreamOffset=IndexTables[Pos-1].Entries[IndexTables[Pos-1].Entries.size()-1].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos-1)*SDTI_SizePerFrame;
- else if (EntryPos)
- Entry0_StreamOffset=IndexTables[Pos].Entries[EntryPos-1].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos-1)*SDTI_SizePerFrame;
- if (EntryPos+1<IndexTables[Pos].Entries.size())
- Entry1_StreamOffset=IndexTables[Pos].Entries[EntryPos+1].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos+1)*SDTI_SizePerFrame;
- else if (Pos+1<IndexTables.size() && !IndexTables[Pos+1].Entries.empty())
- Entry1_StreamOffset=IndexTables[Pos+1].Entries[0].StreamOffset+(IndexTables[Pos].IndexStartPosition+EntryPos+1)*SDTI_SizePerFrame;
-
- if (Entry0_StreamOffset>Entry_StreamOffset || Entry_StreamOffset>Entry1_StreamOffset)
- break; //Problem
-
- if (StreamOffset>=Entry_StreamOffset && StreamOffset<Entry1_StreamOffset)
- {
- Element_Size=StreamOffset_Offset+Buffer_Header_Size+Entry1_StreamOffset-(File_Offset+Buffer_Offset);
- if (File_Offset+Buffer_Offset+Element_Size>Buffer_End)
- {
- Element_Size=Buffer_End-(File_Offset+Buffer_Offset);
- break; //There is a problem
- }
-
- if (Buffer_Offset+Element_Size>Buffer_Size)
- {
- //Hints
- if (File_Buffer_Size_Hint_Pointer)
- {
- size_t Buffer_Size_Target=(size_t)(Buffer_Offset+Element_Size-Buffer_Size+24); //+24 for next packet header
- if (Buffer_Size_Target<128*1024)
- Buffer_Size_Target=128*1024;
- //if ((*File_Buffer_Size_Hint_Pointer)<Buffer_Size_Target)
- (*File_Buffer_Size_Hint_Pointer)=Buffer_Size_Target;
- }
-
- return false;
- }
- break;
- }
- }
- }
- }
- }
- else
- #endif //MEDIAINFO_DEMUX
- if (File_Offset+Buffer_Size<=Buffer_End)
- Element_Size=Buffer_Size-Buffer_Offset; //All the buffer is used
- else
- Element_Size=Buffer_End-(File_Offset+Buffer_Offset);
-
- Element_Begin0();
- Data_Parse();
- Buffer_Offset+=(size_t)Element_Size;
- Element_Size-=Element_Offset;
- Element_Offset=0;
- Element_End0();
-
- if (Buffer_End && File_Offset+Buffer_Offset+Element_Size>=Buffer_End)
- {
- Buffer_Begin=(int64u)-1;
- Buffer_End=0;
- Buffer_End_Unlimited=false;
- Buffer_Header_Size=0;
- MustSynchronize=true;
- }
-
- if (Buffer_Offset>=Buffer_Size)
- return false;
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return false;
- #endif //MEDIAINFO_DEMUX
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Header_Parse()
-{
- //Parsing
- int64u Length;
- Get_UL(Code, "Code", NULL);
- Get_BER(Length, "Length");
- if (Element_IsWaitingForMoreData())
- return;
-
- if (Length==0
- && ((int32u)Code.hi)==Elements::GenericContainer_Aaf2
- && (((int32u)(Code.lo>>32))==Elements::GenericContainer_Aaf3 || ((int32u)(Code.lo>>32))==Elements::GenericContainer_Avid3)
- && Retrieve(Stream_General, 0, General_Format_Settings).find(__T(" / Incomplete"))!=string::npos
- )
- {
- if (Buffer_Offset+Element_Offset+4>Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
-
- if (BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset)!=0x060E2B34)
- {
- Buffer_End_Unlimited=true;
- Length=File_Size-(File_Offset+Buffer_Offset+Element_Offset);
- }
- }
-
- if (Config->File_IsGrowing && File_Offset+Buffer_Offset+Element_Offset+Length>File_Size)
- {
- Element_WaitForMoreData();
- return;
- }
-
- if (Length==0 && Essences.empty() && Retrieve(Stream_General, 0, General_Format_Settings).find(__T(" / Incomplete"))!=string::npos)
- {
- if (Buffer_Offset+Element_Offset+4>Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
-
- if (BigEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset)!=0x060E2B34)
- {
- Buffer_End_Unlimited=true;
- Length=File_Size-(File_Offset+Buffer_Offset+Element_Offset);
- }
- }
-
- if (Config->File_IsGrowing && File_Offset+Buffer_Offset+Element_Offset+Length>File_Size)
- {
- Element_WaitForMoreData();
- return;
- }
-
- //Filling
- int32u Code_Compare1=Code.hi>>32;
- int32u Code_Compare2=(int32u)Code.hi;
- int32u Code_Compare3=Code.lo>>32;
- int32u Code_Compare4=(int32u)Code.lo;
- if (Partitions_IsCalculatingHeaderByteCount)
- {
- if (!(Code_Compare1==Elements::Filler011
- && (Code_Compare2&0xFFFFFF00)==(Elements::Filler012&0xFFFFFF00)
- && Code_Compare3==Elements::Filler013))
- {
- Partitions_IsCalculatingHeaderByteCount=false;
- if (Partitions_Pos<Partitions.size())
- Partitions[Partitions_Pos].PartitionPackByteCount=File_Offset+Buffer_Offset-Partitions[Partitions_Pos].StreamOffset;
- }
- }
- if (Partitions_IsCalculatingSdtiByteCount)
- {
- if (!((Code_Compare1==Elements::SDTI_SystemMetadataPack1
- && (Code_Compare2&0xFF00FFFF)==(Elements::SDTI_SystemMetadataPack2&0xFF00FFFF) //Independent of Category
- && Code_Compare3==Elements::SDTI_SystemMetadataPack3
- && (Code_Compare4&0xFFFF0000)==(Elements::SDTI_SystemMetadataPack4&0xFFFF0000))
- || ((Code_Compare1==Elements::Filler011
- && (Code_Compare2&0xFFFFFF00)==(Elements::Filler012&0xFFFFFF00)
- && Code_Compare3==Elements::Filler013))))
- {
- if (Partitions_Pos<Partitions.size() && !SDTI_IsInIndexStreamOffset)
- SDTI_SizePerFrame=File_Offset+Buffer_Offset-(Partitions[Partitions_Pos].StreamOffset+Partitions[Partitions_Pos].PartitionPackByteCount+Partitions[Partitions_Pos].HeaderByteCount);
- Partitions_IsCalculatingSdtiByteCount=false;
- }
- }
-
- #if MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
- if (!Demux_HeaderParsed && !Partitions.empty() && Partitions[Partitions.size()-1].StreamOffset+Partitions[Partitions.size()-1].PartitionPackByteCount+Partitions[Partitions.size()-1].HeaderByteCount+Partitions[Partitions.size()-1].IndexByteCount==File_Offset+Buffer_Offset)
- {
- Demux_HeaderParsed=true;
-
- //Testing locators
- Locators_CleanUp();
-
- if (Config->File_IgnoreFramesBefore && !Config->File_IsDetectingDuration_Get())
- Open_Buffer_Seek(3, 0, (int64u)-1); //Forcing seek to Config->File_IgnoreFramesBefore
- if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet())
- {
- if (Locators.empty())
- {
- Config->Demux_EventWasSent=true; //First set is to indicate the user that header is parsed
- return;
- }
- }
- }
- #endif //MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
-
- #if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- if (IsParsingEnd && PartitionPack_Parsed && !Partitions.empty() && Partitions[Partitions.size()-1].StreamOffset+Partitions[Partitions.size()-1].PartitionPackByteCount+Partitions[Partitions.size()-1].HeaderByteCount+Partitions[Partitions.size()-1].IndexByteCount==File_Offset+Buffer_Offset
- && !(Code_Compare1==Elements::RandomIndexMetadata1 && Code_Compare2==Elements::RandomIndexMetadata2 && Code_Compare3==Elements::RandomIndexMetadata3 && Code_Compare4==Elements::RandomIndexMetadata4))
- {
- if (RandomIndexMetadatas.empty())
- {
- if (!RandomIndexMetadatas_AlreadyParsed)
- {
- Partitions_Pos=0;
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset!=PartitionMetadata_PreviousPartition)
- Partitions_Pos++;
- if (Partitions_Pos==Partitions.size())
- {
- GoTo(PartitionMetadata_PreviousPartition);
- Open_Buffer_Unsynch();
- }
- else
- TryToFinish();
- }
- }
- else
- {
- GoTo(RandomIndexMetadatas[0].ByteOffset);
- RandomIndexMetadatas.erase(RandomIndexMetadatas.begin());
- PartitionPack_Parsed=false;
- Open_Buffer_Unsynch();
- }
- return;
- }
- #endif //MEDIAINFO_DEMUX || MEDIAINFO_SEEK
-
- if (Buffer_Offset+Element_Offset+Length>(size_t)-1 || Buffer_Offset+(size_t)(Element_Offset+Length)>Buffer_Size) //Not complete
- {
- if (Length>File_Size/2) //Divided by 2 for testing if this is a big chunk = Clip based and not frames.
- {
- //Calculating the byte count not included in seek information (partition, index...)
- int64u StreamOffset_Offset;
- if (!Partitions.empty())
- {
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset<File_Offset+Buffer_Offset-Header_Size)
- Partitions_Pos++;
- if (Partitions_Pos && (Partitions_Pos==Partitions.size() || Partitions[Partitions_Pos].StreamOffset!=File_Offset+Buffer_Offset-Header_Size))
- Partitions_Pos--; //This is the previous item
- StreamOffset_Offset=Partitions[Partitions_Pos].StreamOffset-Partitions[Partitions_Pos].BodyOffset+Partitions[Partitions_Pos].PartitionPackByteCount+Partitions[Partitions_Pos].HeaderByteCount+Partitions[Partitions_Pos].IndexByteCount;
- }
- else
- StreamOffset_Offset=0;
-
- if (StreamOffset_Offset<=File_Offset+Buffer_Offset
- && !Partitions_IsFooter
- && !(Code_Compare1==Elements::OpenIncompleteHeaderPartition1 //Skipping any kind of Partition
- && Code_Compare2==Elements::OpenIncompleteHeaderPartition2
- && Code_Compare3==Elements::OpenIncompleteHeaderPartition3)
- && !(Code_Compare1==Elements::IndexTableSegment1 //Skipping any kind of IndexTableSegment
- && Code_Compare2==Elements::IndexTableSegment2
- && Code_Compare3==Elements::IndexTableSegment3))
- {
- Buffer_Begin=File_Offset+Buffer_Offset+Element_Offset;
- Buffer_End=Buffer_Begin+Length;
- Buffer_Header_Size=Element_Offset;
- MustSynchronize=false;
- Length=0;
- #if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- Clip_Begin=Buffer_Begin;
- Clip_End=Buffer_End;
- Clip_Header_Size=Buffer_Header_Size;
- Clip_Code=Code;
- #endif //MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- }
- }
-
- if (Buffer_Begin==(int64u)-1)
- {
- if (Length<=File_Size/2) //Divided by 2 for testing if this is a big chunk = Clip based and not frames.))
- {
- if (File_Buffer_Size_Hint_Pointer)
- {
- int64u Buffer_Size_Target=(size_t)(Buffer_Offset+Element_Offset+Length-Buffer_Size+24); //+24 for next packet header
-
- if (Buffer_Size_Target<128*1024)
- Buffer_Size_Target=128*1024;
- //if ((*File_Buffer_Size_Hint_Pointer)<Buffer_Size_Target)
- (*File_Buffer_Size_Hint_Pointer)=(size_t)Buffer_Size_Target;
- }
-
-
- Element_WaitForMoreData();
- return;
- }
- }
- }
-
- #if MEDIAINFO_TRACE
- Header_Fill_Code(0, Ztring::ToZtring(Code.hi, 16)+Ztring::ToZtring(Code.lo, 16));
- #else //MEDIAINFO_TRACE
- Header_Fill_Code(0);
- #endif //MEDIAINFO_TRACE
- Header_Fill_Size(Element_Offset+Length);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Data_Parse()
-{
- //Clearing
- InstanceUID=0;
-
- //Parsing
- int32u Code_Compare1=Code.hi>>32;
- int32u Code_Compare2=(int32u)Code.hi;
- int32u Code_Compare3=Code.lo>>32;
- int32u Code_Compare4=(int32u)Code.lo;
- #undef ELEMENT
- #define ELEMENT(_ELEMENT, _NAME) \
- else if (Code_Compare1==Elements::_ELEMENT##1 \
- && Code_Compare2==Elements::_ELEMENT##2 \
- && Code_Compare3==Elements::_ELEMENT##3 \
- && Code_Compare4==Elements::_ELEMENT##4) \
- { \
- if (!Element_IsComplete_Get()) \
- { \
- if (Buffer_End==0) \
- { \
- Element_WaitForMoreData(); \
- return; \
- } \
- Skip_XX(Element_Size, "Data"); \
- } \
- Element_Name(_NAME); \
- switch (Code_Compare2>>24) \
- { \
- case 0x01 : _ELEMENT(); break; \
- case 0x02 : switch ((int8u)(Code_Compare2>>16)) \
- { \
- case 0x05 : _ELEMENT(); break; \
- case 0x43 : _ELEMENT(); break; \
- case 0x53 : \
- while(Element_Offset<Element_Size) \
- { \
- Element_Begin0(); \
- Element_Begin1("Header"); \
- Get_B2 (Code2, "Code"); \
- Get_B2 (Length2, "Length"); \
- Element_End0(); \
- Element_Name(Ztring().From_CC2(Code2)); \
- \
- int64u End=Element_Offset+Length2; \
- _ELEMENT(); \
- if (Element_Offset<End) \
- Skip_XX(End-Element_Offset, "Unknown"); \
- \
- Element_End0(); \
- } \
- break; \
- case 0x63 : _ELEMENT(); break; \
- default : Skip_XX(Element_Size, "Unknown"); \
- } \
- } \
- } \
-
- //Parsing
- if (0) {}
- ELEMENT(Filler01, "Filler")
- ELEMENT(Filler02, "Padding")
- ELEMENT(TerminatingFiller, "Terminating Filler")
- ELEMENT(XmlDocumentText, "XML Document Text")
- ELEMENT(SubDescriptors, "Sub Descriptors")
- ELEMENT(Sequence, "Sequence")
- ELEMENT(SourceClip, "Source Clip")
- ELEMENT(TimecodeComponent, "Timecode Component")
- ELEMENT(ContentStorage, "Content Storage")
- ELEMENT(EssenceContainerData, "Essence Container Data")
- ELEMENT(GenericPictureEssenceDescriptor, "Generic Picture Essence Descriptor")
- ELEMENT(CDCIEssenceDescriptor, "CDCI Essence Descriptor")
- ELEMENT(RGBAEssenceDescriptor, "RGBA Essence Descriptor")
- ELEMENT(Preface, "Preface")
- ELEMENT(Identification, "Identification")
- ELEMENT(NetworkLocator, "Network Locator")
- ELEMENT(TextLocator, "Text Locator")
- ELEMENT(StereoscopicPictureSubDescriptor, "Stereoscopic Picture Sub Descriptor")
- ELEMENT(MaterialPackage, "Material Package")
- ELEMENT(SourcePackage, "Source Package")
- ELEMENT(EventTrack, "Event track")
- ELEMENT(StaticTrack, "Static Track")
- ELEMENT(Track, "Track")
- ELEMENT(DMSegment, "Descriptive Metadata Segment")
- ELEMENT(GenericSoundEssenceDescriptor, "Generic Sound Essence Descriptor")
- ELEMENT(GenericDataEssenceDescriptor, "Generic Data Essence Descriptor")
- ELEMENT(MultipleDescriptor, "Multiple Descriptor")
- ELEMENT(DMSourceClip, "DM Source Clip")
- ELEMENT(AES3PCMDescriptor, "AES3 Descriptor")
- ELEMENT(WaveAudioDescriptor, "Wave Audio Descriptor")
- ELEMENT(MPEG2VideoDescriptor, "MPEG-2 Video Descriptor")
- ELEMENT(JPEG2000PictureSubDescriptor, "JPEG 2000 Picture Sub Descriptor")
- ELEMENT(VbiPacketsDescriptor, "VBI Descriptor")
- ELEMENT(AncPacketsDescriptor, "ANC Packets Descriptor")
- ELEMENT(PackageMarkerObject, "DM Source Clip")
- ELEMENT(ApplicationPlugInObject, "Application Plug-In Object")
- ELEMENT(ApplicationReferencedObject, "Application Referenced Object")
- ELEMENT(MCALabelSubDescriptor, "MCA Label Sub-Descriptor")
- ELEMENT(AudioChannelLabelSubDescriptor, "Audio Channel Label Sub-Descriptor")
- ELEMENT(SoundfieldGroupLabelSubDescriptor, "Soundfield Group Label Sub-Descriptor")
- ELEMENT(GroupOfSoundfieldGroupsLabelSubDescriptor, "Group Of Soundfield Groups Label Sub-Descriptor")
- ELEMENT(OpenIncompleteHeaderPartition, "Open and Incomplete Header Partition Pack")
- ELEMENT(ClosedIncompleteHeaderPartition, "Closed and Iomplete Header Partition Pack")
- ELEMENT(OpenCompleteHeaderPartition, "Open and Complete Header Partition Pack")
- ELEMENT(ClosedCompleteHeaderPartition, "Closed and Complete Header Partition Pack")
- ELEMENT(OpenIncompleteBodyPartition, "Open and Incomplete Body Partition Pack")
- ELEMENT(ClosedIncompleteBodyPartition, "Closed and Iomplete Body Partition Pack")
- ELEMENT(OpenCompleteBodyPartition, "Open and Complete Body Partition Pack")
- ELEMENT(ClosedCompleteBodyPartition, "Closed and Complete Body Partition Pack")
- ELEMENT(OpenIncompleteFooterPartition, "Open and Incomplete Footer Partition Pack")
- ELEMENT(ClosedIncompleteFooterPartition, "Closed and Iomplete Footer Partition Pack")
- ELEMENT(OpenCompleteFooterPartition, "Open and Complete Footer Partition Pack")
- ELEMENT(ClosedCompleteFooterPartition, "Closed and Complete Footer Partition Pack")
- ELEMENT(Primer, "Primer")
- ELEMENT(IndexTableSegment, "Index Table (Segment)")
- ELEMENT(RandomIndexMetadata, "Random Index Metadata")
- ELEMENT(SDTI_SystemMetadataPack, "SDTI System Metadata Pack")
- else if (Code_Compare1==Elements::SDTI_SystemMetadataPack1
- && ((Code_Compare2)&0xFF00FFFF)==(Elements::SDTI_SystemMetadataPack2&0xFF00FFFF)
- && Code_Compare3==Elements::SDTI_SystemMetadataPack3
- && ((Code_Compare4)&0xFFFF0000)==(Elements::SDTI_SystemMetadataPack4&0xFFFF0000))
- {
- Code_Compare4&=0xFFFFFF00; //Remove MetaData Block Count
- if (0) {}
- ELEMENT(SDTI_PackageMetadataSet, "SDTI Package Metadata Set")
- ELEMENT(SDTI_PictureMetadataSet, "SDTI Picture Metadata Set")
- ELEMENT(SDTI_SoundMetadataSet, "SDTI Sound Metadata Set")
- ELEMENT(SDTI_DataMetadataSet, "SDTI Data Metadata Set")
- ELEMENT(SDTI_ControlMetadataSet, "SDTI Control Metadata Set")
- }
- else if (Code_Compare1==Elements::SystemScheme11
- && Code_Compare2==Elements::SystemScheme12
- && Code_Compare3==Elements::SystemScheme13
- && ((Code_Compare4)&0xFFFF0000)==(Elements::SystemScheme14&0xFFFF0000))
- {
- Element_Code=Code.lo;
- Code_Compare4&=0xFFFF0000; //Remove Metadata or Control Element Identifier + Element Number
- if (0) {}
- ELEMENT(SystemScheme1, "SystemScheme1")
- }
- ELEMENT(DMScheme1, "Descriptive Metadata Scheme 1") //SMPTE 380M
- ELEMENT(Omneon_010201010100, "Omneon (010201010100)")
- ELEMENT(Omneon_010201020100, "Omneon (010201020100)")
- else if (Code_Compare1==Elements::GenericContainer_Aaf1
- && ((Code_Compare2)&0xFFFFFF00)==(Elements::GenericContainer_Aaf2&0xFFFFFF00)
- && (Code_Compare3==Elements::GenericContainer_Aaf3
- || Code_Compare3==Elements::GenericContainer_Avid3
- || Code_Compare3==Elements::GenericContainer_Sony3))
- {
- Element_Name(Mxf_EssenceElement(Code));
-
- //Config
- #if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- if (!Essences_FirstEssence_Parsed)
- {
- if (Descriptors.size()==1 && Descriptors.begin()->second.StreamKind==Stream_Audio)
- {
- //Configuring bitrate is not available in descriptor
- if (Descriptors.begin()->second.ByteRate==(int32u)-1 && Descriptors.begin()->second.Infos.find("SamplingRate")!=Descriptors.begin()->second.Infos.end())
- {
- int32u SamplingRate=Descriptors.begin()->second.Infos["SamplingRate"].To_int32u();
-
- if (Descriptors.begin()->second.BlockAlign!=(int16u)-1)
- Descriptors.begin()->second.ByteRate=SamplingRate*Descriptors.begin()->second.BlockAlign;
- else if (Descriptors.begin()->second.QuantizationBits!=(int8u)-1)
- Descriptors.begin()->second.ByteRate=SamplingRate*Descriptors.begin()->second.QuantizationBits/8;
- }
-
- //Configuring EditRate if needed (e.g. audio at 48000 Hz)
- if (Demux_Rate) //From elsewhere
- {
- Descriptors.begin()->second.SampleRate=Demux_Rate;
- }
- else if (Descriptors.begin()->second.SampleRate>1000)
- {
- float64 EditRate_FromTrack=DBL_MAX;
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- if (EditRate_FromTrack>Track->second.EditRate)
- EditRate_FromTrack=Track->second.EditRate;
- if (EditRate_FromTrack>1000)
- Descriptors.begin()->second.SampleRate=24; //Default value
- else
- Descriptors.begin()->second.SampleRate=EditRate_FromTrack;
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- if (Track->second.EditRate>EditRate_FromTrack)
- {
- Track->second.EditRate_Real=Track->second.EditRate;
- Track->second.EditRate=EditRate_FromTrack;
- }
- }
- }
-
- Essences_FirstEssence_Parsed=true;
- }
- #endif //MEDIAINFO_DEMUX || MEDIAINFO_SEEK
-
- if (IsParsingEnd)
- {
- //We have the necessary for indexes, jumping to next index
- Skip_XX(Element_Size, "Data");
- if (RandomIndexMetadatas.empty())
- {
- if (!RandomIndexMetadatas_AlreadyParsed)
- {
- Partitions_Pos=0;
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset!=PartitionMetadata_PreviousPartition)
- Partitions_Pos++;
- if (Partitions_Pos==Partitions.size())
- {
- GoTo(PartitionMetadata_PreviousPartition);
- Open_Buffer_Unsynch();
- }
- else
- TryToFinish();
- }
- }
- else
- {
- GoTo(RandomIndexMetadatas[0].ByteOffset);
- RandomIndexMetadatas.erase(RandomIndexMetadatas.begin());
- Open_Buffer_Unsynch();
- }
- return;
- }
-
- essences::iterator Essence=Essences.find(Code_Compare4);
- if (Essence==Essences.end())
- Essence=Essences.insert(make_pair(Code_Compare4,essence())).first;
-
- if (Essence->second.Parsers.empty())
- {
- //Format_Settings_Wrapping
- if (Descriptors.size()==1 && (Descriptors.begin()->second.Infos.find("Format_Settings_Wrapping")==Descriptors.begin()->second.Infos.end() || Descriptors.begin()->second.Infos["Format_Settings_Wrapping"].empty()) && (Buffer_End?(Buffer_End-Buffer_Begin):Element_Size)>File_Size/2) //Divided by 2 for testing if this is a big chunk = Clip based and not frames.
- Descriptors.begin()->second.Infos["Format_Settings_Wrapping"]=__T("Clip"); //By default, not sure about it, should be from descriptor
-
- //Searching the corresponding Track (for TrackID)
- if (!Essence->second.TrackID_WasLookedFor)
- {
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- if (Track->second.TrackNumber==Code_Compare4)
- Essence->second.TrackID=Track->second.TrackID;
- #if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- if (Essence->second.TrackID==(int32u)-1 && !Duration_Detected && !Config->File_IsDetectingDuration_Get())
- {
- DetectDuration(); //In one file (*-009.mxf), the TrackNumber is known only at the end of the file (Open and incomplete header/footer)
- for (tracks::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- if (Track->second.TrackNumber==Code_Compare4)
- Essence->second.TrackID=Track->second.TrackID;
- }
- #endif //MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- Essence->second.TrackID_WasLookedFor=true;
- }
-
- //Searching the corresponding Descriptor
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- if (Descriptors.size()==1 || (Descriptor->second.LinkedTrackID==Essence->second.TrackID && Descriptor->second.LinkedTrackID!=(int32u)-1))
- {
- Essence->second.StreamPos_Initial=Essence->second.StreamPos=Code_Compare4&0x000000FF;
- if ((Code_Compare4&0x000000FF)==0x00000000)
- StreamPos_StartAtOne=false;
-
- if (Descriptor->second.StreamKind==Stream_Audio && Descriptor->second.Infos.find("Format_Settings_Endianness")==Descriptor->second.Infos.end())
- {
- Ztring Format;
- Format.From_Local(Mxf_EssenceCompression(Descriptor->second.EssenceCompression));
- if (Format.empty())
- Format.From_Local(Mxf_EssenceContainer(Descriptor->second.EssenceContainer));
- if (Format.find(__T("PCM"))==0)
- Descriptor->second.Infos["Format_Settings_Endianness"]=__T("Little");
- }
-
- ChooseParser(Essence, Descriptor); //Searching by the descriptor
- if (Essence->second.Parsers.empty())
- ChooseParser__FromEssence(Essence, Descriptor); //Searching by the track identifier
-
- #ifdef MEDIAINFO_VC3_YES
- if (Ztring().From_Local(Mxf_EssenceContainer(Descriptor->second.EssenceContainer))==__T("VC-3"))
- ((File_Vc3*)(*(Essence->second.Parsers.begin())))->FrameRate=Descriptor->second.SampleRate;
- #endif //MEDIAINFO_VC3_YES
- break;
- }
-
- //Searching by the track identifier
- if (Essence->second.Parsers.empty())
- ChooseParser__FromEssence(Essence, Descriptors.end());
-
- //Check of Essence used as a reference for frame count
- if (Essences_UsedForFrameCount==(int32u)-1)
- Essences_UsedForFrameCount=Essence->first;
- else if ((Essence->second.StreamKind==Stream_Audio && Essences[Essences_UsedForFrameCount].StreamKind>Stream_Audio)
- || (Essence->second.StreamKind==Stream_Video && Essences[Essences_UsedForFrameCount].StreamKind>Stream_Video))
- Essences_UsedForFrameCount=Essence->first;
-
- //Demux
- #if MEDIAINFO_DEMUX
- //Configuration
- if (!IsSub) //Updating for MXF only if MXF is not embedded in another container
- {
- Essence->second.Frame_Count_NotParsedIncluded=Frame_Count_NotParsedIncluded;
- if (Essence->second.Frame_Count_NotParsedIncluded!=(int64u)-1 && Essence->second.Frame_Count_NotParsedIncluded)
- Essence->second.Frame_Count_NotParsedIncluded--; //Info is from the first essence parsed, and 1 frame is already parsed
- Essence->second.FrameInfo.DTS=FrameInfo.DTS;
- if (Essence->second.FrameInfo.DTS!=(int64u)-1 && FrameInfo.DUR!=(int64u)-1)
- Essence->second.FrameInfo.DTS-=FrameInfo.DUR; //Info is from the first essence parsed, and 1 frame is already parsed
- if (!Tracks.empty() && Tracks.begin()->second.EditRate) //TODO: use the corresponding track instead of the first one
- Essence->second.FrameInfo.DUR=float64_int64s(1000000000/Tracks.begin()->second.EditRate);
- else if (!IndexTables.empty() && IndexTables[0].IndexEditRate)
- Essence->second.FrameInfo.DUR=float64_int64s(1000000000/IndexTables[0].IndexEditRate);
- #if MEDIAINFO_DEMUX
- if (Buffer_End && Demux_UnpacketizeContainer && Essences.size()==1 && !Essences.begin()->second.Parsers.empty() && !(*(Essences.begin()->second.Parsers.begin()))->Demux_UnpacketizeContainer)
- for (parsers::iterator Parser=Essence->second.Parsers.begin(); Parser!=Essence->second.Parsers.end(); ++Parser)
- {
- (*Parser)->Demux_Level=2; //Container
- (*Parser)->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- }
- if (Essence->second.TrackID!=(int32u)-1)
- Element_Code=Essence->second.TrackID;
- else
- Element_Code=Code.lo;
- #endif //MEDIAINFO_DEMUX
-
- if (Essence->second.Parsers.empty())
- {
- if (Streams_Count>0)
- Streams_Count--;
- }
- else
- {
- Element_Code=Essence->second.TrackID;
- for (parsers::iterator Parser=Essence->second.Parsers.begin(); Parser!=Essence->second.Parsers.end(); ++Parser)
- {
- Open_Buffer_Init(*Parser);
- if ((*Parser)->Status[IsFinished])
- if (Streams_Count>0)
- Streams_Count--;
- }
- }
-
- //Stream size is sometime easy to find
- if ((Buffer_End?(Buffer_End-Buffer_Begin):Element_TotalSize_Get())>=File_Size*0.98) //let imagine: if element size is 98% of file size, this is the only one element in the file
- {
- Essence->second.Stream_Size=Buffer_End?(Buffer_End-Buffer_Begin):Element_TotalSize_Get();
- }
-
- //Compute stream bit rate if there is only one stream
- int64u Stream_Size;
- if (Essence->second.Stream_Size!=(int64u)-1)
- Stream_Size=Essence->second.Stream_Size;
- else
- Stream_Size=File_Size; //TODO: find a way to remove header/footer correctly
- if (Stream_Size!=(int64u)-1)
- {
- if (Descriptors.size()==1 && Descriptors.begin()->second.ByteRate!=(int32u)-1)
- for (parsers::iterator Parser=Essence->second.Parsers.begin(); Parser!=Essence->second.Parsers.end(); ++Parser)
- (*Parser)->Stream_BitRateFromContainer=Descriptors.begin()->second.ByteRate*8;
- else if (Descriptors.size()==1 && Descriptors.begin()->second.Infos["Duration"].To_float64())
- for (parsers::iterator Parser=Essences.begin()->second.Parsers.begin(); Parser!=Essences.begin()->second.Parsers.end(); ++Parser)
- (*Parser)->Stream_BitRateFromContainer=((float64)Stream_Size)*8/(Descriptors.begin()->second.Infos["Duration"].To_float64()/1000);
- }
- }
-
- //Frame info is specific to the container, and it is not updated
- frame_info FrameInfo_Temp=FrameInfo;
- int64u Frame_Count_NotParsedIncluded_Temp=Frame_Count_NotParsedIncluded;
- if (!IsSub) //Updating for MXF only if MXF is not embedded in another container
- {
- FrameInfo=frame_info();
- Frame_Count_NotParsedIncluded=(int64u)-1;
- }
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (Essence->second.TrackID!=(int32u)-1)
- Element_Code=Essence->second.TrackID;
- else
- Element_Code=Code.lo;
- Demux_Level=(!Essence->second.Parsers.empty() && ((*(Essence->second.Parsers.begin()))->Demux_UnpacketizeContainer || (*(Essence->second.Parsers.begin()))->Demux_Level==2))?4:2; //Intermediate (D-10 Audio) / Container
- if (!IsSub) //Updating for MXF only if MXF is not embedded in another container
- {
- FrameInfo=Essence->second.FrameInfo;
- Frame_Count_NotParsedIncluded=Essence->second.Frame_Count_NotParsedIncluded;
- }
- Demux_random_access=true;
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- if (!Essence->second.Parsers.empty() && !(*(Essence->second.Parsers.begin()))->Status[IsFinished])
- {
- if ((Code_Compare4&0xFF00FF00)==0x17000100 || (Code_Compare4&0xFF00FF00)==0x17000200)
- {
- if (Element_Size)
- {
- parsers::iterator Parser=Essence->second.Parsers.begin();
-
- //Ancillary with
- int16u Count;
- Get_B2 (Count, "Number of Lines");
- if (Count*14>Element_Size)
- {
- (*Parser)->Finish();
- Skip_XX(Element_Size-2, "Unknown");
- Count=0;
- }
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Packet");
- int32u Size2, Count2;
- int16u LineNumber, Size;
- Get_B2 (LineNumber, "Line Number");
- Skip_B1( "Wrapping Type");
- Skip_B1( "Payload Sample Coding");
- Get_B2 (Size, "Payload Sample Count");
- Get_B4 (Size2, "Size?");
- Get_B4 (Count2, "Count?");
-
- if (Essence->second.Frame_Count_NotParsedIncluded!=(int64u)-1)
- (*Parser)->Frame_Count_NotParsedIncluded=Essence->second.Frame_Count_NotParsedIncluded;
- if (Essence->second.FrameInfo.DTS!=(int64u)-1)
- (*Parser)->FrameInfo.DTS=Essence->second.FrameInfo.DTS;
- if (Essence->second.FrameInfo.PTS!=(int64u)-1)
- (*Parser)->FrameInfo.PTS=Essence->second.FrameInfo.PTS;
- if (Essence->second.FrameInfo.DUR!=(int64u)-1)
- (*Parser)->FrameInfo.DUR=Essence->second.FrameInfo.DUR;
- if ((*Parser)->ParserName==__T("Ancillary"))
- ((File_Ancillary*)(*Parser))->LineNumber=LineNumber;
- if ((*Parser)->ParserName==__T("Ancillary") && (((File_Ancillary*)(*Parser))->FrameRate==0 || ((File_Ancillary*)(*Parser))->AspectRatio==0))
- {
- //Configuring with video info
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- if (Descriptor->second.StreamKind==Stream_Video)
- {
- ((File_Ancillary*)(*Parser))->HasBFrames=Descriptor->second.HasBFrames;
- ((File_Ancillary*)(*Parser))->AspectRatio=Descriptor->second.DisplayAspectRatio;
- ((File_Ancillary*)(*Parser))->FrameRate=Descriptor->second.SampleRate;
- break;
- }
- }
- if (Element_Offset+Size>Element_Size)
- Size=(int16u)(Element_Size-Element_Offset);
- Open_Buffer_Continue((*Parser), Buffer+Buffer_Offset+(size_t)(Element_Offset), Size);
- if ((Code_Compare4&0xFF00FF00)==0x17000100 && LineNumber==21 && (*Parser)->Count_Get(Stream_Text)==0)
- {
- (*Parser)->Accept();
- (*Parser)->Stream_Prepare(Stream_Text);
- (*Parser)->Fill(Stream_Text, StreamPos_Last, Text_Format, "EIA-608");
- (*Parser)->Fill(Stream_Text, StreamPos_Last, Text_MuxingMode, "VBI / Line 21");
- }
- Element_Offset+=Size;
- if (Size<Size2*Count2)
- Skip_XX(Size2*Count2-Size, "Padding");
- Element_End0();
- }
- }
- }
- else
- {
- for (size_t Pos=0; Pos<Essence->second.Parsers.size(); Pos++)
- {
- //Parsing
- if (Essence->second.Frame_Count_NotParsedIncluded!=(int64u)-1)
- Essence->second.Parsers[Pos]->Frame_Count_NotParsedIncluded=Essence->second.Frame_Count_NotParsedIncluded;
- if (Essence->second.FrameInfo.DTS!=(int64u)-1)
- Essence->second.Parsers[Pos]->FrameInfo.DTS=Essence->second.FrameInfo.DTS;
- if (Essence->second.FrameInfo.PTS!=(int64u)-1)
- Essence->second.Parsers[Pos]->FrameInfo.PTS=Essence->second.FrameInfo.PTS;
- if (Essence->second.FrameInfo.DUR!=(int64u)-1)
- Essence->second.Parsers[Pos]->FrameInfo.DUR=Essence->second.FrameInfo.DUR;
- Open_Buffer_Continue(Essence->second.Parsers[Pos], Buffer+Buffer_Offset, (size_t)Element_Size);
- #if MEDIAINFO_DEMUX
- if (Demux_Level==4 && Config->Demux_EventWasSent && Essence->second.StreamKind==Stream_Video && Essence->second.Parsers[Pos]->ParserIDs[StreamIDs_Size]==MediaInfo_Parser_Jpeg) // Only File_Jpeg. TODO: limit to File_Jpeg instead of video streams
- {
- Demux_CurrentParser=Essence->second.Parsers[Pos];
- Demux_CurrentEssence=Essence;
- }
- #endif //MEDIAINFO_DEMUX
- switch (Essence->second.Parsers[Pos]->Field_Count_InThisBlock)
- {
- case 1 : Essence->second.Field_Count_InThisBlock_1++; break;
- case 2 : Essence->second.Field_Count_InThisBlock_2++; break;
- default: ;
- }
-
- //Multiple parsers
- if (Essence->second.Parsers.size()>1)
- {
- if (!Essence->second.Parsers[Pos]->Status[IsAccepted] && Essence->second.Parsers[Pos]->Status[IsFinished])
- {
- delete *(Essence->second.Parsers.begin()+Pos);
- Essence->second.Parsers.erase(Essence->second.Parsers.begin()+Pos);
- Pos--;
- }
- else if (Essence->second.Parsers.size()>1 && Essence->second.Parsers[Pos]->Status[IsAccepted])
- {
- File__Analyze* Parser=Essence->second.Parsers[Pos];
- for (size_t Pos2=0; Pos2<Essence->second.Parsers.size(); Pos2++)
- {
- if (Pos2!=Pos)
- delete *(Essence->second.Parsers.begin()+Pos2);
- }
- Essence->second.Parsers.clear();
- Essence->second.Parsers.push_back(Parser);
- }
- }
- }
-
- Element_Offset=Element_Size;
- }
-
- if (Essence->second.Parsers.size()==1 && Essence->second.Parsers[0]->Status[IsAccepted] && Essence->second.Frame_Count_NotParsedIncluded==(int64u)-1)
- {
- Essence->second.Frame_Count_NotParsedIncluded=Essence->second.Parsers[0]->Frame_Count_NotParsedIncluded;
- Essence->second.FrameInfo.DTS=Essence->second.Parsers[0]->FrameInfo.DTS;
- Essence->second.FrameInfo.PTS=Essence->second.Parsers[0]->FrameInfo.PTS;
- Essence->second.FrameInfo.DUR=Essence->second.Parsers[0]->FrameInfo.DUR;
- }
- else if (Buffer_End)
- {
- Essence->second.Frame_Count_NotParsedIncluded=(int64u)-1;
- Essence->second.FrameInfo=frame_info();
- }
- else
- {
- if (Essence->second.Frame_Count_NotParsedIncluded!=(int64u)-1)
- Essence->second.Frame_Count_NotParsedIncluded++;
- if (Essence->second.FrameInfo.DTS!=(int64u)-1 && Essence->second.FrameInfo.DUR!=(int64u)-1)
- Essence->second.FrameInfo.DTS+=Essence->second.FrameInfo.DUR;
- if (Essence->second.FrameInfo.PTS!=(int64u)-1 && Essence->second.FrameInfo.DUR!=(int64u)-1)
- Essence->second.FrameInfo.PTS+=Essence->second.FrameInfo.DUR;
- }
-
- //Disabling this Streams
- if (!Essence->second.IsFilled && Essence->second.Parsers.size()==1 && Essence->second.Parsers[0]->Status[IsFilled])
- {
- if (Streams_Count>0)
- Streams_Count--;
- Essence->second.IsFilled=true;
- if (Config->ParseSpeed<1.0 && IsSub)
- {
- Fill();
- Open_Buffer_Unsynch();
- Finish();
- }
- }
- }
- else
- Skip_XX(Element_Size, "Data");
-
- //Frame info is specific to the container, and it is not updated
- if (Essence->first==Essences_UsedForFrameCount)
- {
- FrameInfo=Essence->second.FrameInfo;
- Frame_Count_NotParsedIncluded=Essence->second.Frame_Count_NotParsedIncluded;
- }
- else
- {
- FrameInfo=FrameInfo_Temp;
- Frame_Count_NotParsedIncluded=Frame_Count_NotParsedIncluded_Temp;
- }
-
- //Ignore tail
- if (Config->ParseSpeed>=1.0 && Frame_Count_NotParsedIncluded!=(int64u)-1 && Config->File_IgnoreFramesAfter!=(int64u)-1 && Frame_Count_NotParsedIncluded>=Config->File_IgnoreFramesAfter)
- {
- if (PartitionMetadata_FooterPartition!=(int64u)-1 && PartitionMetadata_FooterPartition>=File_Offset+Buffer_Offset+Element_Size)
- GoTo(PartitionMetadata_FooterPartition);
- else
- GoToFromEnd(0);
- }
- }
- else
- Skip_XX(Element_Size, "Unknown");
-
- if (Buffer_End && File_Offset+Buffer_Offset+Element_Size>=Buffer_End)
- {
- Buffer_Begin=(int64u)-1;
- Buffer_End=0;
- Buffer_End_Unlimited=false;
- Buffer_Header_Size=0;
- MustSynchronize=true;
- }
-
- if ((!IsParsingEnd && IsParsingMiddle_MaxOffset==(int64u)-1 && MediaInfoLib::Config.ParseSpeed_Get()<1.0)
- && ((!IsSub && File_Offset>=0x4000000) //TODO: 64 MB by default (security), should be changed
- || (Streams_Count==0 && !Descriptors.empty())))
- {
- Fill();
-
- IsParsingEnd=true;
- if (PartitionMetadata_FooterPartition!=(int64u)-1)
- {
- GoTo(PartitionMetadata_FooterPartition);
- IsCheckingFooterPartitionAddress=true;
- }
- else
- {
- GoToFromEnd(4); //For random access table
- FooterPartitionAddress_Jumped=true;
- }
- Open_Buffer_Unsynch();
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-#undef ELEMENT
-#define ELEMENT(_CODE, _CALL, _NAME) \
- case 0x##_CODE : Element_Name(_NAME); _CALL(); break; \
-
-#define ELEMENT_UUID(_ELEMENT, _NAME) \
-else if (Code_Compare1==Elements::_ELEMENT##1 \
- && (Code_Compare2&0xFFFFFF00)==(Elements::_ELEMENT##2&0xFFFFFF00) \
- && Code_Compare3==Elements::_ELEMENT##3 \
- && Code_Compare4==Elements::_ELEMENT##4) \
-{ \
- Element_Name(_NAME); \
- _ELEMENT(); \
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::AES3PCMDescriptor()
-{
- Descriptors[InstanceUID].IsAes3Descriptor=true;
-
- switch(Code2)
- {
- ELEMENT(3D08, AES3PCMDescriptor_AuxBitsMode, "Use of Auxiliary Bits")
- ELEMENT(3D0D, AES3PCMDescriptor_Emphasis, "Emphasis")
- ELEMENT(3D0F, AES3PCMDescriptor_BlockStartOffset, "Position of first Z preamble in essence stream")
- ELEMENT(3D10, AES3PCMDescriptor_ChannelStatusMode, "Enumerated mode of carriage of channel status data")
- ELEMENT(3D11, AES3PCMDescriptor_FixedChannelStatusData, "Fixed data pattern for channel status data")
- ELEMENT(3D12, AES3PCMDescriptor_UserDataMode, "Mode of carriage of user data")
- ELEMENT(3D13, AES3PCMDescriptor_FixedUserData, "Fixed data pattern for user data")
- default: WaveAudioDescriptor();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::CDCIEssenceDescriptor()
-{
- switch(Code2)
- {
- ELEMENT(3301, CDCIEssenceDescriptor_ComponentDepth, "Active bits per sample")
- ELEMENT(3302, CDCIEssenceDescriptor_HorizontalSubsampling, "Horizontal colour subsampling")
- ELEMENT(3303, CDCIEssenceDescriptor_ColorSiting, "Color siting")
- ELEMENT(3304, CDCIEssenceDescriptor_BlackRefLevel, "Black refernece level")
- ELEMENT(3305, CDCIEssenceDescriptor_WhiteReflevel, "White reference level")
- ELEMENT(3306, CDCIEssenceDescriptor_ColorRange, "Color range")
- ELEMENT(3307, CDCIEssenceDescriptor_PaddingBits, "Bits to round up each pixel to stored size")
- ELEMENT(3308, CDCIEssenceDescriptor_VerticalSubsampling,"Vertical colour subsampling")
- ELEMENT(3309, CDCIEssenceDescriptor_AlphaSampleDepth, "Bits per alpha sample")
- ELEMENT(330B, CDCIEssenceDescriptor_ReversedByteOrder, "Luma followed by Chroma")
- default: GenericPictureEssenceDescriptor();
- }
-
- if (Descriptors[InstanceUID].Infos["ColorSpace"].empty())
- Descriptors[InstanceUID].Infos["ColorSpace"]="YUV";
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::OpenIncompleteHeaderPartition()
-{
- //Parsing
- PartitionMetadata();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ClosedIncompleteHeaderPartition()
-{
- //Parsing
- PartitionMetadata();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::OpenCompleteHeaderPartition()
-{
- //Parsing
- PartitionMetadata();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ClosedCompleteHeaderPartition()
-{
- //Parsing
- PartitionMetadata();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::OpenIncompleteBodyPartition()
-{
- //Parsing
- PartitionMetadata();
-
- #if MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
- if (!Demux_HeaderParsed)
- {
- Demux_HeaderParsed=true;
-
- //Testing locators
- Locators_CleanUp();
-
- if (Config->File_IgnoreFramesBefore && !Config->File_IsDetectingDuration_Get())
- Open_Buffer_Seek(3, 0, (int64u)-1); //Forcing seek to Config->File_IgnoreFramesBefore
- if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet())
- {
- if (Locators.empty())
- {
- Config->Demux_EventWasSent=true; //First set is to indicate the user that header is parsed
- return;
- }
- }
- }
- #endif //MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ClosedIncompleteBodyPartition()
-{
- //Parsing
- PartitionMetadata();
-
- #if MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
- if (!Demux_HeaderParsed)
- {
- Demux_HeaderParsed=true;
-
- //Testing locators
- Locators_CleanUp();
-
- if (Config->File_IgnoreFramesBefore && !Config->File_IsDetectingDuration_Get())
- Open_Buffer_Seek(3, 0, (int64u)-1); //Forcing seek to Config->File_IgnoreFramesBefore
- if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet())
- {
- if (Locators.empty())
- {
- Config->Demux_EventWasSent=true; //First set is to indicate the user that header is parsed
- return;
- }
- }
- }
- #endif //MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::OpenCompleteBodyPartition()
-{
- //Parsing
- PartitionMetadata();
-
- #if MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
- if (!Demux_HeaderParsed)
- {
- Demux_HeaderParsed=true;
-
- //Testing locators
- Locators_CleanUp();
-
- if (Config->File_IgnoreFramesBefore && !Config->File_IsDetectingDuration_Get())
- Open_Buffer_Seek(3, 0, (int64u)-1); //Forcing seek to Config->File_IgnoreFramesBefore
- if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet())
- {
- if (Locators.empty())
- {
- Config->Demux_EventWasSent=true; //First set is to indicate the user that header is parsed
- return;
- }
- }
- }
- #endif //MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ClosedCompleteBodyPartition()
-{
- //Parsing
- PartitionMetadata();
-
- #if MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
- if (!Demux_HeaderParsed)
- {
- Demux_HeaderParsed=true;
-
- //Testing locators
- Locators_CleanUp();
-
- if (Config->File_IgnoreFramesBefore && !Config->File_IsDetectingDuration_Get())
- Open_Buffer_Seek(3, 0, (int64u)-1); //Forcing seek to Config->File_IgnoreFramesBefore
- if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet())
- {
- if (Locators.empty())
- {
- Config->Demux_EventWasSent=true; //First set is to indicate the user that header is parsed
- return;
- }
- }
- }
- #endif //MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::OpenIncompleteFooterPartition()
-{
- //Parsing
- PartitionMetadata();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ClosedIncompleteFooterPartition()
-{
- //Parsing
- PartitionMetadata();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::OpenCompleteFooterPartition()
-{
- //Parsing
- PartitionMetadata();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ClosedCompleteFooterPartition()
-{
- //Parsing
- PartitionMetadata();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ContentStorage()
-{
- switch(Code2)
- {
- ELEMENT(1901, ContentStorage_Packages, "Packages")
- ELEMENT(1902, ContentStorage_EssenceContainerData, "EssenceContainerData")
- default: GenerationInterchangeObject();
- }
-
- if (Code2==0x3C0A && InstanceUID==Prefaces[Preface_Current].ContentStorage) //InstanceIUD
- {
- Element_Level--;
- Element_Info1("Valid from Preface");
- Element_Level++;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::DMSegment()
-{
- switch(Code2)
- {
- ELEMENT(6101, DMSegment_DMFramework, "DM Framework")
- ELEMENT(6102, DMSegment_TrackIDs, "Track IDs")
- default: StructuralComponent();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::EssenceContainerData()
-{
- switch(Code2)
- {
- ELEMENT(2701, EssenceContainerData_LinkedPackageUID, "LinkedPackageUID")
- ELEMENT(3F06, EssenceContainerData_IndexSID, "IndexSID")
- ELEMENT(3F07, EssenceContainerData_BodySID, "BodySID")
- default: GenerationInterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::EventTrack()
-{
- switch(Code2)
- {
- ELEMENT(4901, EventTrack_EventEditRate, "Edit Rate of Event Track")
- ELEMENT(4902, EventTrack_EventOrigin, "Offset used to resolved timeline references to this event track")
- default: GenericTrack();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::FileDescriptor()
-{
- switch(Code2)
- {
- ELEMENT(3001, FileDescriptor_SampleRate, "SampleRate")
- ELEMENT(3002, FileDescriptor_ContainerDuration, "ContainerDuration")
- ELEMENT(3004, FileDescriptor_EssenceContainer, "EssenceContainer")
- ELEMENT(3005, FileDescriptor_Codec, "Codec")
- ELEMENT(3006, FileDescriptor_LinkedTrackID, "LinkedTrackID")
- default: GenericDescriptor();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Identification()
-{
- switch(Code2)
- {
- ELEMENT(3C01, Identification_CompanyName, "CompanyName")
- ELEMENT(3C02, Identification_ProductName, "ProductName")
- ELEMENT(3C03, Identification_ProductVersion, "ProductVersion")
- ELEMENT(3C04, Identification_VersionString, "VersionString")
- ELEMENT(3C05, Identification_ProductUID, "ProductUID")
- ELEMENT(3C06, Identification_ModificationDate , "ModificationDate ")
- ELEMENT(3C07, Identification_ToolkitVersion, "ToolkitVersion")
- ELEMENT(3C08, Identification_Platform, "Platform")
- ELEMENT(3C09, Identification_ThisGenerationUID, "ThisGenerationUID")
- default: InterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::IndexTableSegment()
-{
- if (Element_Offset==4)
- {
- #if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- //Testing if already parsed
- for (size_t Pos=0; Pos<IndexTables.size(); Pos++)
- if (File_Offset+Buffer_Offset-Header_Size==IndexTables[Pos].StreamOffset)
- {
- Element_Offset=Element_Size;
- return;
- }
-
- IndexTables.push_back(indextable());
- IndexTables[IndexTables.size()-1].StreamOffset=File_Offset+Buffer_Offset-Header_Size;
- #endif //MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- }
-
- switch(Code2)
- {
- ELEMENT(3F05, IndexTableSegment_EditUnitByteCount, "Edit Unit Byte Count")
- ELEMENT(3F06, IndexTableSegment_IndexSID, "IndexSID")
- ELEMENT(3F07, IndexTableSegment_BodySID, "BodySID")
- ELEMENT(3F08, IndexTableSegment_SliceCount, "Slice Count")
- ELEMENT(3F09, IndexTableSegment_DeltaEntryArray, "Delta Entry Array")
- ELEMENT(3F0A, IndexTableSegment_IndexEntryArray, "Index Entry Array")
- ELEMENT(3F0B, IndexTableSegment_IndexEditRate, "Index Edit Rate")
- ELEMENT(3F0C, IndexTableSegment_IndexStartPosition, "Index Start Position")
- ELEMENT(3F0D, IndexTableSegment_IndexDuration, "Index Duration")
- ELEMENT(3F0E, IndexTableSegment_PosTableCount, "PosTableCount")
- ELEMENT(8002, IndexTableSegment_8002, "8002?")
- default: InterchangeObject();
- }
-
- if (Code2==0x3C0A) //InstanceIUD
- {
- IndexTable_NSL=0;
- IndexTable_NPE=0;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::GenericDescriptor()
-{
- switch(Code2)
- {
- ELEMENT(2F01, GenericDescriptor_Locators, "Locators")
- default: GenerationInterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::JPEG2000PictureSubDescriptor()
-{
- if (Code2>=0x8000)
- {
- // Not a short code
- std::map<int16u, int128u>::iterator Primer_Value=Primer_Values.find(Code2);
- if (Primer_Value!=Primer_Values.end())
- {
- int32u Code_Compare1=Primer_Value->second.hi>>32;
- int32u Code_Compare2=(int32u)Primer_Value->second.hi;
- int32u Code_Compare3=Primer_Value->second.lo>>32;
- int32u Code_Compare4=(int32u)Primer_Value->second.lo;
- if(0);
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_Rsiz, "Rsiz - Decoder capabilities")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_Xsiz, "Xsiz - Width")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_Ysiz, "Ysiz - Height")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_XOsiz, "XOsiz - Horizontal offset")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_YOsiz, "YOsiz - Vertical offset ")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_XTsiz, "XTsiz - Width of one reference tile ")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_YTsiz, "YTsiz - Height of one reference tile ")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_XTOsiz, "XTOsiz - Horizontal offset of the first tile")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_YTOsiz, "YTOsiz - Vertical offset of the first tile")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_Csiz, "Csiz - Number of components in the picture")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_PictureComponentSizing, "Picture Component Sizing")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_CodingStyleDefault, "Coding Style Default")
- ELEMENT_UUID(JPEG2000PictureSubDescriptor_QuantizationDefault, "Quantization Default")
- else
- {
- Element_Info1(Ztring().From_UUID(Primer_Value->second));
- Skip_XX(Length2, "Data");
- }
-
- return;
- }
- }
-
- GenerationInterchangeObject();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::GenerationInterchangeObject()
-{
- //Parsing
- switch(Code2)
- {
- ELEMENT(0102, GenerationInterchangeObject_GenerationUID, "GenerationUID")
- default: InterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::GenericPackage()
-{
- switch(Code2)
- {
- ELEMENT(4401, GenericPackage_PackageUID, "PackageUID")
- ELEMENT(4402, GenericPackage_Name, "Name")
- ELEMENT(4403, GenericPackage_Tracks, "Tracks")
- ELEMENT(4404, GenericPackage_PackageModifiedDate, "PackageModifiedDate")
- ELEMENT(4405, GenericPackage_PackageCreationDate, "PackageCreationDate")
- default: GenerationInterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::GenericPictureEssenceDescriptor()
-{
- switch(Code2)
- {
- ELEMENT(3201, GenericPictureEssenceDescriptor_PictureEssenceCoding, "Identifier of the Picture Compression Scheme")
- ELEMENT(3202, GenericPictureEssenceDescriptor_StoredHeight, "Vertical Field Size")
- ELEMENT(3203, GenericPictureEssenceDescriptor_StoredWidth, "Horizontal Size")
- ELEMENT(3204, GenericPictureEssenceDescriptor_SampledHeight, "Sampled height supplied to codec")
- ELEMENT(3205, GenericPictureEssenceDescriptor_SampledWidth, "Sampled width supplied to codec")
- ELEMENT(3206, GenericPictureEssenceDescriptor_SampledXOffset, "Offset from sampled to stored width")
- ELEMENT(3207, GenericPictureEssenceDescriptor_SampledYOffset, "Offset from sampled to stored height")
- ELEMENT(3208, GenericPictureEssenceDescriptor_DisplayHeight, "Displayed Height placed in Production Aperture")
- ELEMENT(3209, GenericPictureEssenceDescriptor_DisplayWidth, "Displayed Width placed in Production Aperture")
- ELEMENT(320A, GenericPictureEssenceDescriptor_DisplayXOffset,"Horizontal offset from the of the picture as displayed")
- ELEMENT(320B, GenericPictureEssenceDescriptor_DisplayYOffset,"Vertical offset of the picture as displayed")
- ELEMENT(320C, GenericPictureEssenceDescriptor_FrameLayout, "Interlace or Progressive layout")
- ELEMENT(320D, GenericPictureEssenceDescriptor_VideoLineMap, "First active line in each field")
- ELEMENT(320E, GenericPictureEssenceDescriptor_AspectRatio, "Aspect ratio")
- ELEMENT(320F, GenericPictureEssenceDescriptor_AlphaTransparency, "Is Alpha Inverted")
- ELEMENT(3210, GenericPictureEssenceDescriptor_TransferCharacteristic, "Transfer Characteristic")
- ELEMENT(3211, GenericPictureEssenceDescriptor_ImageAlignmentOffset, "Byte Boundary alignment required for Low Level Essence Storage")
- ELEMENT(3212, GenericPictureEssenceDescriptor_FieldDominance,"Number of the field which is considered temporally to come first")
- ELEMENT(3213, GenericPictureEssenceDescriptor_ImageStartOffset, "Unused bytes before start of stored data")
- ELEMENT(3214, GenericPictureEssenceDescriptor_ImageEndOffset,"Unused bytes before start of stored data")
- ELEMENT(3215, GenericPictureEssenceDescriptor_SignalStandard, "Underlying signal standard")
- ELEMENT(3216, GenericPictureEssenceDescriptor_StoredF2Offset, "Topness Adjustment for stored picture")
- ELEMENT(3217, GenericPictureEssenceDescriptor_DisplayF2Offset, "Topness Adjustment for Displayed Picture")
- ELEMENT(3218, GenericPictureEssenceDescriptor_ActiveFormatDescriptor, "Specifies the intended framing of the content within the displayed image")
- ELEMENT(3219, GenericPictureEssenceDescriptor_ColorPrimaries, "Color Primaries")
- ELEMENT(321A, GenericPictureEssenceDescriptor_CodingEquations, "Coding Equations")
- default: FileDescriptor();
- }
-
- if (Descriptors[InstanceUID].StreamKind==Stream_Max)
- {
- Descriptors[InstanceUID].StreamKind=Stream_Video;
- if (Streams_Count==(size_t)-1)
- Streams_Count=0;
- Streams_Count++;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::GenericSoundEssenceDescriptor()
-{
- //Parsing
- switch(Code2)
- {
- ELEMENT(3D01, GenericSoundEssenceDescriptor_QuantizationBits, "QuantizationBits")
- ELEMENT(3D02, GenericSoundEssenceDescriptor_Locked , "Locked ")
- ELEMENT(3D03, GenericSoundEssenceDescriptor_AudioSamplingRate, "AudioSamplingRate")
- ELEMENT(3D04, GenericSoundEssenceDescriptor_AudioRefLevel, "AudioRefLevel")
- ELEMENT(3D05, GenericSoundEssenceDescriptor_ElectroSpatialFormulation, "ElectroSpatialFormulation")
- ELEMENT(3D06, GenericSoundEssenceDescriptor_SoundEssenceCompression, "SoundEssenceCompression")
- ELEMENT(3D07, GenericSoundEssenceDescriptor_ChannelCount, "ChannelCount")
- ELEMENT(3D0C, GenericSoundEssenceDescriptor_DialNorm, "DialNorm")
- default: FileDescriptor();
- }
-
- if (Descriptors[InstanceUID].StreamKind==Stream_Max)
- {
- Descriptors[InstanceUID].StreamKind=Stream_Audio;
- if (Streams_Count==(size_t)-1)
- Streams_Count=0;
- Streams_Count++;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::GenericDataEssenceDescriptor()
-{
- //Parsing
- switch(Code2)
- {
- ELEMENT(3E01, GenericDataEssenceDescriptor_DataEssenceCoding, "DataEssenceCoding")
- default: FileDescriptor();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::GenericTrack()
-{
- //Parsing
- switch(Code2)
- {
- ELEMENT(4801, GenericTrack_TrackID, "TrackID")
- ELEMENT(4802, GenericTrack_TrackName, "TrackName")
- ELEMENT(4803, GenericTrack_Sequence, "Sequence")
- ELEMENT(4804, GenericTrack_TrackNumber, "TrackNumber")
- default: GenerationInterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::InterchangeObject()
-{
- //Parsing
- switch(Code2)
- {
- ELEMENT(3C0A, InterchangeObject_InstanceUID, "InstanceUID")
- default: ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MaterialPackage()
-{
- GenericPackage();
-
- if (Code2==0x3C0A)
- {
- if (InstanceUID==Prefaces[Preface_Current].PrimaryPackage) //InstanceIUD
- {
- Element_Level--;
- Element_Info1("Primary package");
- Element_Level++;
- }
- for (contentstorages::iterator ContentStorage=ContentStorages.begin(); ContentStorage!=ContentStorages.end(); ++ContentStorage)
- {
- for (size_t Pos=0; Pos<ContentStorage->second.Packages.size(); Pos++)
- if (InstanceUID==ContentStorage->second.Packages[Pos])
- {
- Element_Level--;
- Element_Info1("Valid from Content storage");
- Element_Level++;
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MPEG2VideoDescriptor()
-{
- Descriptors[InstanceUID].HasMPEG2VideoDescriptor=true;
-
- if (Code2>=0x8000)
- {
- // Not a short code
- std::map<int16u, int128u>::iterator Primer_Value=Primer_Values.find(Code2);
- if (Primer_Value!=Primer_Values.end())
- {
- int32u Code_Compare1=Primer_Value->second.hi>>32;
- int32u Code_Compare2=(int32u)Primer_Value->second.hi;
- int32u Code_Compare3=Primer_Value->second.lo>>32;
- int32u Code_Compare4=(int32u)Primer_Value->second.lo;
- if(0);
- ELEMENT_UUID(MPEG2VideoDescriptor_SingleSequence, "Single sequence")
- ELEMENT_UUID(MPEG2VideoDescriptor_ConstantBFrames, "Number of B frames always constant")
- ELEMENT_UUID(MPEG2VideoDescriptor_CodedContentType, "Coded content type")
- ELEMENT_UUID(MPEG2VideoDescriptor_LowDelay, "Low delay")
- ELEMENT_UUID(MPEG2VideoDescriptor_ClosedGOP, "Closed GOP")
- ELEMENT_UUID(MPEG2VideoDescriptor_IdenticalGOP, "Identical GOP")
- ELEMENT_UUID(MPEG2VideoDescriptor_MaxGOP, "Maximum occurring spacing between I frames")
- ELEMENT_UUID(MPEG2VideoDescriptor_BPictureCount, "Maximum number of B pictures between P or I frames")
- ELEMENT_UUID(MPEG2VideoDescriptor_ProfileAndLevel, "Profile and level")
- ELEMENT_UUID(MPEG2VideoDescriptor_BitRate, "Maximum bit rate")
- else
- {
- Element_Info1(Ztring().From_UUID(Primer_Value->second));
- Skip_XX(Length2, "Data");
- }
-
- return;
- }
- }
-
- CDCIEssenceDescriptor();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MultipleDescriptor()
-{
- if (Descriptors[InstanceUID].Type==descriptor::Type_Unknown)
- Descriptors[InstanceUID].Type=descriptor::type_Mutiple;
-
- switch(Code2)
- {
- ELEMENT(3F01, MultipleDescriptor_SubDescriptorUIDs, "SubDescriptorUIDs")
- default: FileDescriptor();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::DMSourceClip()
-{
- InterchangeObject();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::NetworkLocator()
-{
- switch(Code2)
- {
- ELEMENT(4001, NetworkLocator_URLString, "A URL indicating where the essence may be found.")
- default: GenerationInterchangeObject();
- }
-
- if (Code2==0x3C0A)
- {
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- {
- for (size_t Pos=0; Pos<Descriptor->second.Locators.size(); Pos++)
- if (InstanceUID==Descriptor->second.Locators[Pos])
- {
- Element_Level--;
- Element_Info1("Valid from Descriptor");
- Element_Level++;
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Preface()
-{
- switch(Code2)
- {
- ELEMENT(3B02, Preface_LastModifiedDate, "LastModifiedDate")
- ELEMENT(3B03, Preface_ContentStorage, "ContentStorage")
- ELEMENT(3B05, Preface_Version, "Version")
- ELEMENT(3B06, Preface_Identifications, "Identifications")
- ELEMENT(3B07, Preface_ObjectModelVersion, "ObjectModelVersion")
- ELEMENT(3B08, Preface_PrimaryPackage, "PrimaryPackage")
- ELEMENT(3B09, Preface_OperationalPattern, "OperationalPattern")
- ELEMENT(3B0A, Preface_EssenceContainers, "EssenceContainers")
- ELEMENT(3B0B, Preface_DMSchemes, "DMSchemes")
- default: GenerationInterchangeObject();
- }
-
- if (Code2==0x3C0A) //InstanceIUD
- {
- Preface_Current=InstanceUID;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Primer()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("LocalTagEntryBatch");
- int16u LocalTag;
- int128u UID;
- Get_B2 (LocalTag, "LocalTag"); Element_Info1(Ztring().From_CC2(LocalTag));
- Get_UL (UID, "UID", NULL); Element_Info1(Ztring().From_UUID(UID));
- Element_End0();
-
- FILLING_BEGIN();
- if (LocalTag>=0x8000) //user defined
- Primer_Values[LocalTag]=UID;
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::RGBAEssenceDescriptor()
-{
- if (Code2>=0x8000)
- {
- // Not a short code
- std::map<int16u, int128u>::iterator Primer_Value=Primer_Values.find(Code2);
- if (Primer_Value!=Primer_Values.end())
- {
- int32u Code_Compare1=Primer_Value->second.hi>>32;
- int32u Code_Compare2=(int32u)Primer_Value->second.hi;
- int32u Code_Compare3=Primer_Value->second.lo>>32;
- int32u Code_Compare4=(int32u)Primer_Value->second.lo;
- if(0);
- ELEMENT_UUID(SubDescriptors, "Sub Descriptors")
- else
- {
- Element_Info1(Ztring().From_UUID(Primer_Value->second));
- Skip_XX(Length2, "Data");
- }
-
- return;
- }
- }
-
- switch(Code2)
- {
- ELEMENT(3401, RGBAEssenceDescriptor_PixelLayout, "Pixel Layout")
- ELEMENT(3403, RGBAEssenceDescriptor_Palette, "Palette")
- ELEMENT(3404, RGBAEssenceDescriptor_PaletteLayout, "Palette Layout")
- ELEMENT(3405, RGBAEssenceDescriptor_ScanningDirection, "Enumerated Scanning Direction")
- ELEMENT(3406, RGBAEssenceDescriptor_ComponentMaxRef, "Maximum value for RGB components")
- ELEMENT(3407, RGBAEssenceDescriptor_ComponentMinRef, "Minimum value for RGB components")
- ELEMENT(3408, RGBAEssenceDescriptor_AlphaMaxRef, "Maximum value for alpha component")
- ELEMENT(3409, RGBAEssenceDescriptor_AlphaMinRef, "Minimum value for alpha component")
- default: GenericPictureEssenceDescriptor();
- }
-
- if (Descriptors[InstanceUID].Infos["ColorSpace"].empty())
- Descriptors[InstanceUID].Infos["ColorSpace"]="RGB";
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::RandomIndexMetadata()
-{
- //Parsing
- while (Element_Offset+4<Element_Size)
- {
- Element_Begin1("PartitionArray");
- randomindexmetadata RandomIndexMetadata;
- Get_B4 (RandomIndexMetadata.BodySID, "BodySID"); Element_Info1(RandomIndexMetadata.BodySID);
- Get_B8 (RandomIndexMetadata.ByteOffset, "ByteOffset"); Element_Info1(Ztring::ToZtring(RandomIndexMetadata.ByteOffset, 16));
- Element_End0();
-
- FILLING_BEGIN();
- if (!RandomIndexMetadatas_AlreadyParsed && PartitionPack_AlreadyParsed.find(RandomIndexMetadata.ByteOffset)==PartitionPack_AlreadyParsed.end())
- RandomIndexMetadatas.push_back(RandomIndexMetadata);
- FILLING_END();
- }
- Skip_B4( "Length");
-
- FILLING_BEGIN();
- if (MediaInfoLib::Config.ParseSpeed_Get()<1.0 && !RandomIndexMetadatas_AlreadyParsed && !RandomIndexMetadatas.empty())
- {
- IsParsingEnd=true;
- IsCheckingRandomAccessTable=true;
- GoTo(RandomIndexMetadatas[0].ByteOffset);
- RandomIndexMetadatas.erase(RandomIndexMetadatas.begin());
- Open_Buffer_Unsynch();
- }
- RandomIndexMetadatas_AlreadyParsed=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Sequence()
-{
- switch(Code2)
- {
- ELEMENT(1001, Sequence_StructuralComponents, "StructuralComponents")
- default: StructuralComponent();
- }
-
- if (Code2==0x3C0A)
- {
- for (std::map<int128u, track>::iterator Track=Tracks.begin(); Track!=Tracks.end(); ++Track)
- {
- if (InstanceUID==Track->second.Sequence)
- {
- Element_Level--;
- Element_Info1("Valid from track");
- Element_Level++;
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SourceClip()
-{
- switch(Code2)
- {
- ELEMENT(1101, SourceClip_SourcePackageID, "SourcePackageID")
- ELEMENT(1102, SourceClip_SourceTrackID, "SourceTrackID")
- ELEMENT(1201, SourceClip_StartPosition, "StartPosition")
- default: StructuralComponent();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SourcePackage()
-{
- switch(Code2)
- {
- //SourcePackage
- ELEMENT(4701, SourcePackage_Descriptor, "Descriptor")
- default: GenericPackage();
- Packages[InstanceUID].IsSourcePackage=true;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::StaticTrack()
-{
- GenericTrack();
-}
-
-//---------------------------------------------------------------------------
-//SMPTE 405M
-void File_Mxf::SystemScheme1()
-{
- systemschemes::iterator SystemScheme=SystemSchemes.find(Element_Code&0xFFFF);
- if (SystemScheme==SystemSchemes.end())
- {
- SystemSchemes[Element_Code&0xFFFF].IsTimeCode=false;
- }
-
- switch(Code2)
- {
- #if MEDIAINFO_TRACE
- ELEMENT(0101, SystemScheme1_FrameCount, "Frame Count")
- #endif //MEDIAINFO_TRACE
- ELEMENT(0102, SystemScheme1_TimeCodeArray, "Time Code Array")
- #if MEDIAINFO_TRACE
- ELEMENT(0103, SystemScheme1_ClipIDArray, "Clip ID Array")
- ELEMENT(0104, SystemScheme1_ExtendedClipIDArray, "Extended Clip ID Array")
- ELEMENT(0105, SystemScheme1_VideoIndexArray, "Video Index Array")
- ELEMENT(0106, SystemScheme1_KLVMetadataSequence, "KLV Metadata Sequence")
- ELEMENT(3001, SystemScheme1_SampleRate, "Sample Rate")
- ELEMENT(4804, SystemScheme1_EssenceTrackNumber, "Essence Track Number")
- ELEMENT(6801, SystemScheme1_EssenceTrackNumberBatch, "Essence TrackNumber Batch")
- ELEMENT(6803, SystemScheme1_ContentPackageIndexArray, "Content Package Index Array")
- #endif //MEDIAINFO_TRACE
- default: InterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-//SMPTE 380M
-void File_Mxf::DMScheme1()
-{
- if (Code2>=0x8000)
- {
- // Not a short code
- std::map<int16u, int128u>::iterator Primer_Value=Primer_Values.find(Code2);
- if (Primer_Value!=Primer_Values.end())
- {
- int32u Code_Compare1=Primer_Value->second.hi>>32;
- int32u Code_Compare2=(int32u)Primer_Value->second.hi;
- int32u Code_Compare3=Primer_Value->second.lo>>32;
- int32u Code_Compare4=(int32u)Primer_Value->second.lo;
- if(0);
- ELEMENT_UUID(PrimaryExtendedSpokenLanguage, "Primary Extended Spoken Language")
- ELEMENT_UUID(SecondaryExtendedSpokenLanguage, "Secondary Extended Spoken Language")
- ELEMENT_UUID(OriginalExtendedSpokenLanguage, "Original Extended Spoken Language")
- ELEMENT_UUID(SecondaryOriginalExtendedSpokenLanguage, "Secondary Original Extended Spoken Language")
- else
- {
- Element_Info1(Ztring().From_UUID(Primer_Value->second));
- Skip_XX(Length2, "Data");
- }
-
- return;
- }
- }
-
- InterchangeObject();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::StructuralComponent()
-{
- switch(Code2)
- {
- ELEMENT(0201, StructuralComponent_DataDefinition, "DataDefinition")
- ELEMENT(0202, StructuralComponent_Duration, "Duration")
- default: GenerationInterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::TextLocator()
-{
- switch(Code2)
- {
- ELEMENT(4101, TextLocator_LocatorName, "Human-readable locator text string for manual location of essence")
- default: GenerationInterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::StereoscopicPictureSubDescriptor()
-{
- StereoscopicPictureSubDescriptor_IsPresent=true;
-
- //switch(Code2)
- //{
- // default:
- GenerationInterchangeObject();
- //}
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::TimecodeComponent()
-{
- if (Element_Offset==4)
- {
- TimeCode_StartTimecode=(int64u)-1;
- TimeCode_RoundedTimecodeBase=0;
- TimeCode_DropFrame=false;
- DTS_Delay=0;
- FrameInfo.DTS=0;
- }
-
- switch(Code2)
- {
- ELEMENT(1501, TimecodeComponent_StartTimecode, "StartTimecode")
- ELEMENT(1502, TimecodeComponent_RoundedTimecodeBase, "RoundedTimecodeBase")
- ELEMENT(1503, TimecodeComponent_DropFrame, "DropFrame")
- default: StructuralComponent();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::WaveAudioDescriptor()
-{
- if (Code2>=0x8000)
- {
- // Not a short code
- std::map<int16u, int128u>::iterator Primer_Value=Primer_Values.find(Code2);
- if (Primer_Value!=Primer_Values.end())
- {
- int32u Code_Compare1=Primer_Value->second.hi>>32;
- int32u Code_Compare2=(int32u)Primer_Value->second.hi;
- int32u Code_Compare3=Primer_Value->second.lo>>32;
- int32u Code_Compare4=(int32u)Primer_Value->second.lo;
- if(0);
- ELEMENT_UUID(SubDescriptors, "Sub Descriptors")
- else
- {
- Element_Info1(Ztring().From_UUID(Primer_Value->second));
- Skip_XX(Length2, "Data");
- }
-
- return;
- }
- }
-
- switch(Code2)
- {
- ELEMENT(3D09, WaveAudioDescriptor_AvgBps, "Average Bytes per second")
- ELEMENT(3D0A, WaveAudioDescriptor_BlockAlign, "Sample Block alignment")
- ELEMENT(3D0B, WaveAudioDescriptor_SequenceOffset, "Frame number of first essence")
- ELEMENT(3D29, WaveAudioDescriptor_PeakEnvelopeVersion, "Peak envelope version information")
- ELEMENT(3D2A, WaveAudioDescriptor_PeakEnvelopeFormat, "Format of a peak point")
- ELEMENT(3D2B, WaveAudioDescriptor_PointsPerPeakValue, "Number of peak points per peak value")
- ELEMENT(3D2C, WaveAudioDescriptor_PeakEnvelopeBlockSize,"Number of audio samples used to generate each peak frame")
- ELEMENT(3D2D, WaveAudioDescriptor_PeakChannels, "Number of peak channels")
- ELEMENT(3D2E, WaveAudioDescriptor_PeakFrames, "Number of peak frames")
- ELEMENT(3D2F, WaveAudioDescriptor_PeakOfPeaksPosition, "Offset to the first audio sample whose absolute value is the maximum value of the entire audio file")
- ELEMENT(3D30, WaveAudioDescriptor_PeakEnvelopeTimestamp,"Time stamp of the creation of the peak data")
- ELEMENT(3D31, WaveAudioDescriptor_PeakEnvelopeData , "Peak envelope data")
- ELEMENT(3D32, WaveAudioDescriptor_ChannelAssignment, "Channel assignment")
- default: GenericSoundEssenceDescriptor();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::VbiPacketsDescriptor()
-{
- //switch(Code2)
- //{
- // default:
- GenericDataEssenceDescriptor();
- //}
-
- if (Descriptors[InstanceUID].Type==descriptor::Type_Unknown)
- {
- Descriptors[InstanceUID].Type=descriptor::Type_AncPackets;
- if (Streams_Count==(size_t)-1)
- Streams_Count=0;
- Streams_Count++;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::AncPacketsDescriptor()
-{
- //switch(Code2)
- //{
- // default:
- GenericDataEssenceDescriptor();
- //}
-
- if (Descriptors[InstanceUID].Type==descriptor::Type_Unknown)
- {
- Descriptors[InstanceUID].Type=descriptor::Type_AncPackets;
- if (Streams_Count==(size_t)-1)
- Streams_Count=0;
- Streams_Count++;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::PackageMarkerObject()
-{
- //switch(Code2)
- //{
- // default:
- GenerationInterchangeObject();
- //}
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ApplicationPlugInObject()
-{
- //switch(Code2)
- //{
- // default:
- GenerationInterchangeObject();
- //}
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ApplicationReferencedObject()
-{
- //switch(Code2)
- //{
- // default:
- GenerationInterchangeObject();
- //}
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCALabelSubDescriptor()
-{
- if (Descriptors[InstanceUID].Type==descriptor::Type_Unknown)
- Descriptors[InstanceUID].Type=descriptor::Type_MCALabelSubDescriptor;
-
- if (Code2>=0x8000)
- {
- // Not a short code
- std::map<int16u, int128u>::iterator Primer_Value=Primer_Values.find(Code2);
- if (Primer_Value!=Primer_Values.end())
- {
- int32u Code_Compare1=Primer_Value->second.hi>>32;
- int32u Code_Compare2=(int32u)Primer_Value->second.hi;
- int32u Code_Compare3=Primer_Value->second.lo>>32;
- int32u Code_Compare4=(int32u)Primer_Value->second.lo;
- if(0);
- ELEMENT_UUID(MCAChannelID, "MCA Channel ID")
- ELEMENT_UUID(MCALabelDictionaryID, "MCA Label Dictionary ID")
- ELEMENT_UUID(MCATagSymbol, "MCA Tag Symbol")
- ELEMENT_UUID(MCATagName, "MCA Tag Name")
- ELEMENT_UUID(GroupOfSoundfieldGroupsLinkID, "Group Of Soundfield Groups Link ID")
- ELEMENT_UUID(MCALinkID, "MCA Link ID")
- ELEMENT_UUID(SoundfieldGroupLinkID, "Soundfield Group Link ID")
- ELEMENT_UUID(MCAPartitionKind, "MCA Partition Kind")
- ELEMENT_UUID(MCAPartitionNumber, "MCA Partition Number")
- ELEMENT_UUID(MCATitle, "MCA Title")
- ELEMENT_UUID(MCATitleVersion, "MCA Title Version")
- ELEMENT_UUID(MCATitleSubVersion, "MCA Title Sub-version")
- ELEMENT_UUID(MCAEpisode, "MCA Episode")
- ELEMENT_UUID(MCAAudioContentKind, "MCA Audio Content Kind")
- ELEMENT_UUID(MCAAudioElementKind, "MCA Audio Element Kind")
- ELEMENT_UUID(RFC5646AudioLanguageCode, "Secondary Original Extended Spoken Language")
- else
- {
- Element_Info1(Ztring().From_UUID(Primer_Value->second));
- Skip_XX(Length2, "Data");
- }
-
- return;
- }
- }
-
- //switch(Code2)
- //{
- // default:
- GenerationInterchangeObject();
- //}
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::AudioChannelLabelSubDescriptor()
-{
- if (Descriptors[InstanceUID].Type==descriptor::Type_Unknown)
- Descriptors[InstanceUID].Type=descriptor::Type_AudioChannelLabelSubDescriptor;
-
- if (Code2>=0x8000)
- {
- // Not a short code
- std::map<int16u, int128u>::iterator Primer_Value=Primer_Values.find(Code2);
- if (Primer_Value!=Primer_Values.end())
- {
- int32u Code_Compare1=Primer_Value->second.hi>>32;
- int32u Code_Compare2=(int32u)Primer_Value->second.hi;
- int32u Code_Compare3=Primer_Value->second.lo>>32;
- int32u Code_Compare4=(int32u)Primer_Value->second.lo;
- if(0);
- ELEMENT_UUID(SoundfieldGroupLinkID, "Soundfield Group Link ID")
- else
- MCALabelSubDescriptor();
-
- return;
- }
- }
-
- //switch(Code2)
- //{
- // default:
- MCALabelSubDescriptor();
- //}
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SoundfieldGroupLabelSubDescriptor()
-{
- if (Descriptors[InstanceUID].Type==descriptor::Type_Unknown)
- Descriptors[InstanceUID].Type=descriptor::Type_SoundfieldGroupLabelSubDescriptor;
-
- if (Code2>=0x8000)
- {
- // Not a short code
- std::map<int16u, int128u>::iterator Primer_Value=Primer_Values.find(Code2);
- if (Primer_Value!=Primer_Values.end())
- {
- int32u Code_Compare1=Primer_Value->second.hi>>32;
- int32u Code_Compare2=(int32u)Primer_Value->second.hi;
- int32u Code_Compare3=Primer_Value->second.lo>>32;
- int32u Code_Compare4=(int32u)Primer_Value->second.lo;
- if(0);
- ELEMENT_UUID(GroupOfSoundfieldGroupsLinkID, "Group Of Soundfield Groups Link ID")
- else
- MCALabelSubDescriptor();
-
- return;
- }
- }
-
- //switch(Code2)
- //{
- // default:
- MCALabelSubDescriptor();
- //}
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::GroupOfSoundfieldGroupsLabelSubDescriptor()
-{
- if (Descriptors[InstanceUID].Type==descriptor::Type_Unknown)
- Descriptors[InstanceUID].Type=descriptor::Type_GroupOfSoundfieldGroupsLabelSubDescriptor;
-
- if (Code2>=0x8000)
- {
- // Not a short code
- std::map<int16u, int128u>::iterator Primer_Value=Primer_Values.find(Code2);
- if (Primer_Value!=Primer_Values.end())
- {
- MCALabelSubDescriptor();
-
- return;
- }
- }
-
- //switch(Code2)
- //{
- // default:
- MCALabelSubDescriptor();
- //}
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCAChannelID()
-{
- if (Length2==4)
- {
- Info_B4(Value, "Value"); Element_Info1(Value);
- }
- else
- Skip_XX(Length2, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCALabelDictionaryID()
-{
- //Parsing
- int128u Value;
- Get_UL (Value, "Value", NULL); Element_Info1(Ztring().From_UUID(Value));
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCALabelDictionaryID=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCATagSymbol()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCATagSymbol=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCATagName()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCATagName=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::GroupOfSoundfieldGroupsLinkID()
-{
- if (Length2==0)
- return;
-
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- int128u Data;
- Get_UUID(Data, "Value");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCALinkID()
-{
- //Parsing
- int128u Value;
- Get_UUID (Value, "Value"); Element_Info1(Ztring().From_UUID(Value));
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCALinkID=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SoundfieldGroupLinkID()
-{
- //Parsing
- int128u Value;
- Get_UUID (Value, "Value"); Element_Info1(Ztring().From_UUID(Value));
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].SoundfieldGroupLinkID=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCAPartitionKind()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCAPartitionKind=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCAPartitionNumber()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCAPartitionNumber=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCATitle()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCATitle=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCATitleVersion()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCATitleVersion=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCATitleSubVersion()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCATitleSubVersion=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCAEpisode()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCAEpisode=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCAAudioContentKind()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCAAudioContentKind=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::MCAAudioElementKind()
-{
- //Parsing
- Ztring Value;
- Get_UTF16B (Length2, Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].MCAAudioElementKind=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Filler()
-{
- Skip_XX(Element_Size, "Junk");
-
- Buffer_PaddingBytes+=Element_Size;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::TerminatingFiller()
-{
- Skip_XX(Element_Size, "Junk");
-
- Buffer_PaddingBytes+=Element_Size;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::XmlDocumentText()
-{
- Skip_XX(Element_Size, "XML data");
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SubDescriptors()
-{
- Descriptors[InstanceUID].SubDescriptors.clear();
-
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- int128u Data;
- Get_UUID(Data, "Sub Descriptor");
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].SubDescriptors.push_back(Data);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SDTI_SystemMetadataPack() //SMPTE 385M + 326M
-{
- //Info for SDTI in Index StreamOffset
- if (!SDTI_IsPresent)
- {
- if (!Partitions.empty() && File_Offset+Buffer_Offset<Partitions[Partitions_Pos].StreamOffset+Partitions[Partitions_Pos].BodyOffset)
- SDTI_IsInIndexStreamOffset=false;
- SDTI_IsPresent=true;
- }
-
- //Parsing
- int8u SMB, CPR_Rate, Format;
- bool SMB_UL_Present, SMB_CreationTimeStamp, SMB_UserTimeStamp, CPR_DropFrame;
- Get_B1 (SMB, "System Metadata Bitmap");
- Skip_Flags(SMB, 7, "FEC Active");
- Get_Flags (SMB, 6, SMB_UL_Present, "SMPTE Label");
- Get_Flags (SMB, 5, SMB_CreationTimeStamp, "Creation Date/Time");
- Get_Flags (SMB, 4, SMB_UserTimeStamp, "User Date/Time");
- Skip_Flags(SMB, 3, "Picture item");
- Skip_Flags(SMB, 2, "Sound item");
- Skip_Flags(SMB, 1, "Data item");
- Skip_Flags(SMB, 0, "Control item");
- BS_Begin();
- Element_Begin1("Content Package Rate");
- Skip_S1(2, "Reserved");
- Get_S1 (5, CPR_Rate, "Package Rate"); //See SMPTE 326M
- Get_SB ( CPR_DropFrame, "1.001 Flag");
- Element_End0();
- Element_Begin1("Content Package Type");
- Skip_S1(3, "Stream Status");
- Skip_SB( "Sub-package flag");
- Skip_SB( "Transfer Mode");
- Skip_S1(3, "Timing Mode");
- Element_End0();
- BS_End();
- Skip_B2( "channel handle");
- Skip_B2( "continuity count");
-
- //Some computing
- float64 FrameRate;
- switch (CPR_Rate) //See SMPTE 326M
- {
- case 0x01 : FrameRate=24; break;
- case 0x02 : FrameRate=25; break;
- case 0x03 : FrameRate=30; break;
- case 0x04 : FrameRate=48; break;
- case 0x05 : FrameRate=50; break;
- case 0x06 : FrameRate=60; break;
- case 0x07 : FrameRate=72; break;
- case 0x08 : FrameRate=75; break;
- case 0x09 : FrameRate=90; break;
- case 0x0A : FrameRate=96; break;
- case 0x0B : FrameRate=100; break;
- case 0x0C : FrameRate=120; break;
- default : FrameRate=0; break;
- }
- if (CPR_DropFrame)
- {
- FrameRate*=1000;
- FrameRate/=1001;
- }
-
- //Parsing
- if (SMB_UL_Present)
- Skip_UL( "SMPTE Universal label");
- if (SMB_CreationTimeStamp)
- {
- Get_B1 (Format, "Format"); //0x81=timecode, 0x82=date-timecode
- Skip_B8( "Time stamp");
- Skip_B8( "Zero");
- }
- else
- Skip_XX(17, "Junk");
- if (SMB_UserTimeStamp)
- {
- Get_B1 (Format, "Format"); //0x81=timecode, 0x82=date-timecode, SMPTE 331M
- Element_Begin1("TimeCode");
- int8u Frames_Units, Frames_Tens, Seconds_Units, Seconds_Tens, Minutes_Units, Minutes_Tens, Hours_Units, Hours_Tens;
- bool DropFrame;
- BS_Begin();
-
- Skip_SB( "CF - Color fame");
- Get_SB ( DropFrame, "DP - Drop frame");
- Get_S1 (2, Frames_Tens, "Frames (Tens)");
- Get_S1 (4, Frames_Units, "Frames (Units)");
-
- Skip_SB( "FP - Field Phase / BGF0");
- Get_S1 (3, Seconds_Tens, "Seconds (Tens)");
- Get_S1 (4, Seconds_Units, "Seconds (Units)");
-
- Skip_SB( "BGF0 / BGF2");
- Get_S1 (3, Minutes_Tens, "Minutes (Tens)");
- Get_S1 (4, Minutes_Units, "Minutes (Units)");
-
- Skip_SB( "BGF2 / Field Phase");
- Skip_SB( "BGF1");
- Get_S1 (2, Hours_Tens, "Hours (Tens)");
- Get_S1 (4, Hours_Units, "Hours (Units)");
-
- Skip_S1(4, "BG2");
- Skip_S1(4, "BG1");
-
- Skip_S1(4, "BG4");
- Skip_S1(4, "BG3");
-
- Skip_S1(4, "BG6");
- Skip_S1(4, "BG5");
-
- Skip_S1(4, "BG8");
- Skip_S1(4, "BG7");
-
- BS_End();
-
- int64u TimeCode_ms=(int64u)(Hours_Tens *10*60*60*1000
- + Hours_Units *60*60*1000
- + Minutes_Tens *10*60*1000
- + Minutes_Units *60*1000
- + Seconds_Tens *10*1000
- + Seconds_Units *1000
- + (FrameRate?float64_int32s((Frames_Tens*10+Frames_Units)*1000/FrameRate):0));
-
- Element_Info1(Ztring().Duration_From_Milliseconds(TimeCode_ms));
-
- Element_End0();
-
- Skip_B8( "Zero");
-
- //TimeCode
- if (SDTI_TimeCode_StartTimecode_ms==(int64u)-1)
- {
- SDTI_TimeCode_StartTimecode_ms=TimeCode_ms;
-
- SDTI_TimeCode_StartTimecode+=('0'+Hours_Tens);
- SDTI_TimeCode_StartTimecode+=('0'+Hours_Units);
- SDTI_TimeCode_StartTimecode+=':';
- SDTI_TimeCode_StartTimecode+=('0'+Minutes_Tens);
- SDTI_TimeCode_StartTimecode+=('0'+Minutes_Units);
- SDTI_TimeCode_StartTimecode+=':';
- SDTI_TimeCode_StartTimecode+=('0'+Seconds_Tens);
- SDTI_TimeCode_StartTimecode+=('0'+Seconds_Units);
- SDTI_TimeCode_StartTimecode+=DropFrame?';':':';
- SDTI_TimeCode_StartTimecode+=('0'+Frames_Tens);
- SDTI_TimeCode_StartTimecode+=('0'+Frames_Units);
- }
- }
- else
- Skip_XX(17, "Junk");
-
- //Filling
- if (SDTI_SizePerFrame==0)
- Partitions_IsCalculatingSdtiByteCount=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SDTI_PackageMetadataSet()
-{
- while (Element_Offset<Element_Size)
- {
- //Parsing
- Element_Begin1("Item");
- int128u Tag;
- int16u Length;
- int8u Type;
- Get_B1 (Type, "Type");
- Get_B2 (Length, "Length");
- int64u End=Element_Offset+Length;
- Get_UL (Tag, "Tag", NULL); //TODO: check 10-byte UL with out_imx.mxf
- switch (Type)
- {
- case 0x83 : //UMID
- {
- Skip_UMID( );
- if (Element_Offset<End)
- Skip_UL ( "Zeroes");
- }
- break;
- case 0x88 : //KLV Metadata
- {
- while (Element_Offset<End)
- {
- int64u Length;
- Get_BER(Length, "Length");
- switch ((Tag.lo>>16)&0xFF)
- {
- case 0x00 : Skip_Local(Length,"Data"); break;
- case 0x01 : Skip_UTF16L(Length,"Data"); break;
- default : Skip_XX(Length, "Data");
- }
- }
- }
- break;
- default : Skip_XX(Length, "Unknown");
- }
- Element_End0();
- }
-
- //Filling
- if (SDTI_SizePerFrame==0)
- Partitions_IsCalculatingSdtiByteCount=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SDTI_PictureMetadataSet()
-{
- Skip_XX(Element_Size, "Data");
-
- //Filling
- if (SDTI_SizePerFrame==0)
- Partitions_IsCalculatingSdtiByteCount=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SDTI_SoundMetadataSet()
-{
- Skip_XX(Element_Size, "Data");
-
- //Filling
- if (SDTI_SizePerFrame==0)
- Partitions_IsCalculatingSdtiByteCount=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SDTI_DataMetadataSet()
-{
- Skip_XX(Element_Size, "Data");
-
- //Filling
- if (SDTI_SizePerFrame==0)
- Partitions_IsCalculatingSdtiByteCount=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::SDTI_ControlMetadataSet()
-{
- Skip_XX(Element_Size, "Data");
-
- //Filling
- if (SDTI_SizePerFrame==0)
- Partitions_IsCalculatingSdtiByteCount=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Omneon_010201010100()
-{
- //Parsing
- switch(Code2)
- {
- ELEMENT(8001, Omneon_010201010100_8001, "Omneon (80.01)")
- ELEMENT(8003, Omneon_010201010100_8003, "Omneon (80.03)")
- default: GenerationInterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Omneon_010201020100()
-{
- //Parsing
- switch(Code2)
- {
- ELEMENT(8002, Omneon_010201020100_8002, "Omneon (80.02)")
- ELEMENT(8003, Omneon_010201020100_8003, "Omneon (80.03)")
- ELEMENT(8004, Omneon_010201020100_8004, "Omneon (80.04)")
- ELEMENT(8005, Omneon_010201020100_8005, "Omneon (80.05)")
- ELEMENT(8006, Omneon_010201020100_8006, "Omneon (80.06)")
- default: GenerationInterchangeObject();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Track()
-{
- //Parsing
- switch(Code2)
- {
- ELEMENT(4B01, Track_EditRate, "EditRate")
- ELEMENT(4B02, Track_Origin, "Origin")
- default: GenericTrack();
- }
-
- if (Code2==0x3C0A)
- {
- for (packages::iterator Package=Packages.begin(); Package!=Packages.end(); ++Package)
- {
- if (Package->first==Prefaces[Preface_Current].PrimaryPackage) //InstanceIUD
- {
- Element_Level--;
- Element_Info1("Primary package");
- Element_Level++;
- }
- for (size_t Pos=0; Pos<Package->second.Tracks.size(); Pos++)
- if (InstanceUID==Package->second.Tracks[Pos])
- {
- Element_Level--;
- Element_Info1("Valid from Package");
- Element_Level++;
- }
- }
- }
-}
-
-//***************************************************************************
-// Base
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// 0x3D08
-void File_Mxf::AES3PCMDescriptor_AuxBitsMode()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D0D
-void File_Mxf::AES3PCMDescriptor_Emphasis()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D0F
-void File_Mxf::AES3PCMDescriptor_BlockStartOffset()
-{
- //Parsing
- Info_B2(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D10
-void File_Mxf::AES3PCMDescriptor_ChannelStatusMode()
-{
- //Parsing
- Skip_XX(Length2, "Batch");
-}
-
-//---------------------------------------------------------------------------
-// 0x3D11
-void File_Mxf::AES3PCMDescriptor_FixedChannelStatusData()
-{
- //Parsing
- Skip_XX(Length2, "Data");
-}
-
-//---------------------------------------------------------------------------
-// 0x3D12
-void File_Mxf::AES3PCMDescriptor_UserDataMode()
-{
- //Parsing
- Skip_XX(Length2, "Data");
-}
-
-//---------------------------------------------------------------------------
-// 0x3D13
-void File_Mxf::AES3PCMDescriptor_FixedUserData()
-{
- //Parsing
- Skip_XX(Length2, "Data");
-}
-
-//---------------------------------------------------------------------------
-// 0x3301
-void File_Mxf::CDCIEssenceDescriptor_ComponentDepth()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (!Partitions_IsFooter || Descriptors[InstanceUID].Infos["BitDepth"].empty())
- {
- if (Data)
- Descriptors[InstanceUID].Infos["BitDepth"].From_Number(Data);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3302
-void File_Mxf::CDCIEssenceDescriptor_HorizontalSubsampling()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].SubSampling_Horizontal=Data;
- Subsampling_Compute(Descriptors.find(InstanceUID));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3303
-void File_Mxf::CDCIEssenceDescriptor_ColorSiting()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3304
-void File_Mxf::CDCIEssenceDescriptor_BlackRefLevel()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3305
-void File_Mxf::CDCIEssenceDescriptor_WhiteReflevel()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3306
-void File_Mxf::CDCIEssenceDescriptor_ColorRange()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3307
-void File_Mxf::CDCIEssenceDescriptor_PaddingBits()
-{
- //Parsing
- Info_B2(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3308
-void File_Mxf::CDCIEssenceDescriptor_VerticalSubsampling()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].SubSampling_Vertical=Data;
- Subsampling_Compute(Descriptors.find(InstanceUID));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3309
-void File_Mxf::CDCIEssenceDescriptor_AlphaSampleDepth()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x330B
-void File_Mxf::CDCIEssenceDescriptor_ReversedByteOrder()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x1901
-void File_Mxf::ContentStorage_Packages()
-{
- ContentStorages[InstanceUID].Packages.clear();
-
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- int128u Data;
- Get_UUID(Data, "Package");
-
- FILLING_BEGIN();
- Element_Info1C((Data==Prefaces[Preface_Current].PrimaryPackage), "Primary package");
- ContentStorages[InstanceUID].Packages.push_back(Data);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x1902
-void File_Mxf::ContentStorage_EssenceContainerData()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Skip_UUID( "EssenceContainer");
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x6101
-void File_Mxf::DMSegment_DMFramework()
-{
- //Parsing
- int128u Data;
- Get_UUID(Data, "DM Framework"); Element_Info1(Ztring().From_UUID(Data));
-
- FILLING_BEGIN();
- DMSegments[InstanceUID].Framework=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x6101
-void File_Mxf::DMSegment_TrackIDs()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- int32u Data;
- Get_B4 (Data, "Track ID");
-
- FILLING_BEGIN();
- DMSegments[InstanceUID].TrackIDs.push_back(Data);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x2701
-void File_Mxf::EssenceContainerData_LinkedPackageUID()
-{
- //Parsing
- Skip_UMID();
-}
-
-//---------------------------------------------------------------------------
-// 0x3F06
-void File_Mxf::EssenceContainerData_IndexSID()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3F07
-void File_Mxf::EssenceContainerData_BodySID()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x4901
-void File_Mxf::EventTrack_EventEditRate()
-{
- //Parsing
- Info_Rational();
-}
-
-//---------------------------------------------------------------------------
-// 0x4902
-void File_Mxf::EventTrack_EventOrigin()
-{
- //Parsing
- Info_B8(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3001
-void File_Mxf::FileDescriptor_SampleRate()
-{
- //Parsing
- Get_Rational(Descriptors[InstanceUID].SampleRate); Element_Info1(Descriptors[InstanceUID].SampleRate);
-
- FILLING_BEGIN();
- if (Descriptors[InstanceUID].SampleRate && Descriptors[InstanceUID].Duration!=(int64u)-1)
- Descriptors[InstanceUID].Infos["Duration"].From_Number(Descriptors[InstanceUID].Duration/Descriptors[InstanceUID].SampleRate*1000, 0);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3002
-void File_Mxf::FileDescriptor_ContainerDuration()
-{
- //Parsing
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (Data)
- {
- Descriptors[InstanceUID].Duration=Data;
- if (Descriptors[InstanceUID].SampleRate && Descriptors[InstanceUID].Duration!=(int64u)-1)
- Descriptors[InstanceUID].Infos["Duration"].From_Number(Descriptors[InstanceUID].Duration/Descriptors[InstanceUID].SampleRate*1000, 0);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3004
-void File_Mxf::FileDescriptor_EssenceContainer()
-{
- //Parsing
- int128u EssenceContainer;
- Get_UL (EssenceContainer, "EssenceContainer", Mxf_EssenceContainer); Element_Info1(Mxf_EssenceContainer(EssenceContainer));
-
- FILLING_BEGIN();
- int8u Code6=(int8u)((EssenceContainer.lo&0x0000000000FF0000LL)>>16);
- int8u Code7=(int8u)((EssenceContainer.lo&0x000000000000FF00LL)>> 8);
- int8u Code8=(int8u)((EssenceContainer.lo&0x00000000000000FFLL) );
-
- Descriptors[InstanceUID].EssenceContainer=EssenceContainer;
- Descriptors[InstanceUID].Infos["Format_Settings_Wrapping"].From_UTF8(Mxf_EssenceContainer_Mapping(Code6, Code7, Code8));
-
- if (!DataMustAlwaysBeComplete && Descriptors[InstanceUID].Infos["Format_Settings_Wrapping"].find(__T("Frame"))!=string::npos)
- DataMustAlwaysBeComplete=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3005
-void File_Mxf::FileDescriptor_Codec()
-{
- //Parsing
- Skip_UL( "UUID");
-}
-
-//---------------------------------------------------------------------------
-// 0x3006
-void File_Mxf::FileDescriptor_LinkedTrackID()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (Descriptors[InstanceUID].LinkedTrackID==(int32u)-1)
- Descriptors[InstanceUID].LinkedTrackID=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3C0A
-void File_Mxf::InterchangeObject_InstanceUID()
-{
- //Parsing
- Get_UUID(InstanceUID, "UUID"); Element_Info1(Ztring().From_UUID(InstanceUID));
-
- FILLING_BEGIN();
- //Putting the right UID for already parsed items
- prefaces::iterator Preface=Prefaces.find(0);
- if (Preface!=Prefaces.end())
- {
- Prefaces[InstanceUID]=Preface->second;
- Prefaces.erase(Preface);
- }
- identifications::iterator Identification=Identifications.find(0);
- if (Identification!=Identifications.end())
- {
- Identifications[InstanceUID]=Identification->second;
- Identifications.erase(Identification);
- }
- contentstorages::iterator ContentStorage=ContentStorages.find(0);
- if (ContentStorage!=ContentStorages.end())
- {
- ContentStorages[InstanceUID]=ContentStorage->second;
- ContentStorages.erase(ContentStorage);
- }
- packages::iterator Package=Packages.find(0);
- if (Package!=Packages.end())
- {
- Packages[InstanceUID]=Package->second;
- Packages.erase(Package);
- }
- tracks::iterator Track=Tracks.find(0);
- if (Track!=Tracks.end())
- {
- Tracks[InstanceUID]=Track->second;
- Tracks.erase(Track);
- }
- descriptors::iterator Descriptor=Descriptors.find(0);
- if (Descriptor!=Descriptors.end())
- {
- descriptors::iterator Descriptor_Previous=Descriptors.find(InstanceUID);
- if (Descriptor_Previous!=Descriptors.end())
- {
- //Merging
- Descriptor->second.Infos.insert(Descriptor_Previous->second.Infos.begin(), Descriptor_Previous->second.Infos.end()); //TODO: better implementation
- }
- Descriptors[InstanceUID]=Descriptor->second;
- Descriptors.erase(Descriptor);
- }
- locators::iterator Locator=Locators.find(0);
- if (Locator!=Locators.end())
- {
- Locators[InstanceUID]=Locator->second;
- Locators.erase(Locator);
- }
- components::iterator Component=Components.find(0);
- if (Component!=Components.end())
- {
- Components[InstanceUID].Update(Component->second);
- Components.erase(Component);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x0102
-void File_Mxf::GenerationInterchangeObject_GenerationUID()
-{
- //Parsing
- Skip_UUID( "UUID");
-}
-
-//---------------------------------------------------------------------------
-// 0x2F01
-void File_Mxf::GenericDescriptor_Locators()
-{
- Descriptors[InstanceUID].Locators.clear();
-
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Locator");
- int128u UUID;
- Get_UUID(UUID, "UUID");
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Locators.push_back(UUID);
- FILLING_END();
-
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x4401
-void File_Mxf::GenericPackage_PackageUID()
-{
- //Parsing
- int256u Data;
- Get_UMID (Data, "PackageUID");
-
- FILLING_BEGIN();
- Packages[InstanceUID].PackageUID=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x4402
-void File_Mxf::GenericPackage_Name()
-{
- //Parsing
- Info_UTF16B(Length2, Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x4403
-void File_Mxf::GenericPackage_Tracks()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- int128u Data;
- Get_UUID(Data, "Track");
-
- FILLING_BEGIN();
- Packages[InstanceUID].Tracks.push_back(Data);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x4404
-void File_Mxf::GenericPackage_PackageModifiedDate()
-{
- //Parsing
- Info_Timestamp();
-}
-
-//---------------------------------------------------------------------------
-// 0x4405
-void File_Mxf::GenericPackage_PackageCreationDate()
-{
- //Parsing
- Info_Timestamp();
-}
-
-//---------------------------------------------------------------------------
-// 0x3201
-void File_Mxf::GenericPictureEssenceDescriptor_PictureEssenceCoding()
-{
- //Parsing
- int128u Data;
- Get_UL(Data, "Data", Mxf_EssenceCompression); Element_Info1(Mxf_EssenceCompression(Data));
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].EssenceCompression=Data;
- Descriptors[InstanceUID].StreamKind=Stream_Video;
- Descriptors[InstanceUID].Infos["Format"]=Mxf_EssenceCompression(Data);
- Descriptors[InstanceUID].Infos["Format_Version"]=Mxf_EssenceCompression_Version(Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3202
-void File_Mxf::GenericPictureEssenceDescriptor_StoredHeight()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (!Partitions_IsFooter || Descriptors[InstanceUID].Height==(int32u)-1)
- {
- if (Descriptors[InstanceUID].ScanType==__T("Interlaced"))
- Data*=2; //This is per field
- if (Descriptors[InstanceUID].Height==(int32u)-1)
- Descriptors[InstanceUID].Height=Data;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3203
-void File_Mxf::GenericPictureEssenceDescriptor_StoredWidth()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (!Partitions_IsFooter || Descriptors[InstanceUID].Width==(int32u)-1)
- {
- if (Descriptors[InstanceUID].Width==(int32u)-1)
- Descriptors[InstanceUID].Width=Data;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3204
-void File_Mxf::GenericPictureEssenceDescriptor_SampledHeight()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (!Partitions_IsFooter || Descriptors[InstanceUID].Height==(int32u)-1)
- {
- if (Descriptors[InstanceUID].ScanType==__T("Interlaced"))
- Data*=2; //This is per field
- Descriptors[InstanceUID].Height=Data;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3205
-void File_Mxf::GenericPictureEssenceDescriptor_SampledWidth()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Width=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3206
-void File_Mxf::GenericPictureEssenceDescriptor_SampledXOffset()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3207
-void File_Mxf::GenericPictureEssenceDescriptor_SampledYOffset()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3208
-void File_Mxf::GenericPictureEssenceDescriptor_DisplayHeight()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (!Partitions_IsFooter || Descriptors[InstanceUID].Height_Display!=(int32u)-1)
- {
- if (Descriptors[InstanceUID].ScanType==__T("Interlaced"))
- Data*=2; //This is per field
- Descriptors[InstanceUID].Height_Display=Data;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3209
-void File_Mxf::GenericPictureEssenceDescriptor_DisplayWidth()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Width_Display=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x320A
-void File_Mxf::GenericPictureEssenceDescriptor_DisplayXOffset()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Width_Display_Offset=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x320B
-void File_Mxf::GenericPictureEssenceDescriptor_DisplayYOffset()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (!Partitions_IsFooter || Descriptors[InstanceUID].Height_Display_Offset==(int32u)-1)
- {
- if (Descriptors[InstanceUID].ScanType==__T("Interlaced"))
- Data*=2; //This is per field
- Descriptors[InstanceUID].Height_Display_Offset=Data;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x320C
-void File_Mxf::GenericPictureEssenceDescriptor_FrameLayout()
-{
- //Parsing
- int8u Data;
- Get_B1 (Data, "Data"); Element_Info1(Data); Param_Info1(Mxf_FrameLayout(Data)); Element_Info1(Mxf_FrameLayout(Data));
-
- FILLING_BEGIN();
- if (!Partitions_IsFooter || Descriptors[InstanceUID].ScanType.empty())
- {
- if (Descriptors[InstanceUID].ScanType.empty())
- {
- if (Descriptors[InstanceUID].Height!=(int32u)-1) Descriptors[InstanceUID].Height*=Mxf_FrameLayout_Multiplier(Data);
- if (Descriptors[InstanceUID].Height_Display!=(int32u)-1) Descriptors[InstanceUID].Height_Display*=Mxf_FrameLayout_Multiplier(Data);
- if (Descriptors[InstanceUID].Height_Display_Offset!=(int32u)-1) Descriptors[InstanceUID].Height_Display_Offset*=Mxf_FrameLayout_Multiplier(Data);
- }
- Descriptors[InstanceUID].ScanType.From_UTF8(Mxf_FrameLayout_ScanType(Data));
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x320D
-void File_Mxf::GenericPictureEssenceDescriptor_VideoLineMap()
-{
- int64u VideoLineMapEntries_Total=0;
- bool VideoLineMapEntry_IsZero=false;
-
- //Parsing
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- int32u VideoLineMapEntry;
- Get_B4 (VideoLineMapEntry, "VideoLineMapEntry");
-
- if (VideoLineMapEntry)
- VideoLineMapEntries_Total+=VideoLineMapEntry;
- else
- VideoLineMapEntry_IsZero=true;
- }
-
- FILLING_BEGIN();
- // Cryptic formula:
- // odd odd field 2 upper
- // odd even field 1 upper
- // even odd field 1 upper
- // even even field 2 upper
- if (Count==2 && !VideoLineMapEntry_IsZero)
- Descriptors[InstanceUID].FieldTopness=(VideoLineMapEntries_Total%2)?1:2;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x320E
-void File_Mxf::GenericPictureEssenceDescriptor_AspectRatio()
-{
- //Parsing
- float64 Data;
- Get_Rational(Data);
-
- FILLING_BEGIN();
- if (Data)
- {
- Descriptors[InstanceUID].DisplayAspectRatio=Data;
- Descriptors[InstanceUID].Infos["DisplayAspectRatio"].From_Number(Data, 3);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x320F
-void File_Mxf::GenericPictureEssenceDescriptor_AlphaTransparency()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3210
-void File_Mxf::GenericPictureEssenceDescriptor_TransferCharacteristic()
-{
- //Parsing
- int128u Data;
- Get_UL(Data, "Data", Mxf_TransferCharacteristic); Element_Info1(Mxf_TransferCharacteristic(Data));
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Infos["transfer_characteristics"]=Mxf_TransferCharacteristic(Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3211
-void File_Mxf::GenericPictureEssenceDescriptor_ImageAlignmentOffset()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3212
-void File_Mxf::GenericPictureEssenceDescriptor_FieldDominance()
-{
- //Parsing
- int8u Data;
- Get_B1 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].FieldDominance=Data;
- FILLING_END();
- //Parsing
-}
-
-//---------------------------------------------------------------------------
-// 0x3213
-void File_Mxf::GenericPictureEssenceDescriptor_ImageStartOffset()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3214
-void File_Mxf::GenericPictureEssenceDescriptor_ImageEndOffset()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3215
-void File_Mxf::GenericPictureEssenceDescriptor_SignalStandard()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3216
-void File_Mxf::GenericPictureEssenceDescriptor_StoredF2Offset()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3217
-void File_Mxf::GenericPictureEssenceDescriptor_DisplayF2Offset()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3218
-void File_Mxf::GenericPictureEssenceDescriptor_ActiveFormatDescriptor()
-{
- //Parsing
- int8u Data;
- Get_B1 (Data, "Data"); Element_Info1C((Data<16), AfdBarData_active_format[Data]);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].ActiveFormat=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3219
-void File_Mxf::GenericPictureEssenceDescriptor_ColorPrimaries()
-{
- //Parsing
- int128u Data;
- Get_UL(Data, "Data", Mxf_ColorPrimaries); Element_Info1(Mxf_ColorPrimaries(Data));
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Infos["colour_primaries"]=Mxf_ColorPrimaries(Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x321A
-void File_Mxf::GenericPictureEssenceDescriptor_CodingEquations()
-{
- //Parsing
- int128u Data;
- Get_UL(Data, "Data", Mxf_CodingEquations); Element_Info1(Mxf_CodingEquations(Data));
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Infos["matrix_coefficients"]=Mxf_CodingEquations(Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3D01
-void File_Mxf::GenericSoundEssenceDescriptor_QuantizationBits()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (Data)
- {
- Descriptors[InstanceUID].Infos["BitDepth"].From_Number(Data);
- Descriptors[InstanceUID].QuantizationBits=Data;
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3D02
-void File_Mxf::GenericSoundEssenceDescriptor_Locked()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data?"Yes":"No");
-}
-
-//---------------------------------------------------------------------------
-// 0x3D03
-void File_Mxf::GenericSoundEssenceDescriptor_AudioSamplingRate()
-{
- //Parsing
- float64 Data;
- Get_Rational(Data); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Infos["SamplingRate"].From_Number(Data, 0);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3D04
-void File_Mxf::GenericSoundEssenceDescriptor_AudioRefLevel()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info2(Data, " dB");
-}
-
-//---------------------------------------------------------------------------
-// 0x3D05
-void File_Mxf::GenericSoundEssenceDescriptor_ElectroSpatialFormulation()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data); //Enum
-}
-
-//---------------------------------------------------------------------------
-// 0x3D06
-void File_Mxf::GenericSoundEssenceDescriptor_SoundEssenceCompression()
-{
- //Parsing
- int128u Data;
- Get_UL(Data, "Data", Mxf_EssenceCompression); Element_Info1(Mxf_EssenceCompression(Data));
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].EssenceCompression=Data;
- Descriptors[InstanceUID].StreamKind=Stream_Audio;
- Descriptors[InstanceUID].Infos["Format"]=Mxf_EssenceCompression(Data);
- Descriptors[InstanceUID].Infos["Format_Version"]=Mxf_EssenceCompression_Version(Data);
- if ((Data.lo&0xFFFFFFFFFF000000LL)==0x040202017e000000LL)
- Descriptors[InstanceUID].Infos["Format_Settings_Endianness"]=__T("Big");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3D07
-void File_Mxf::GenericSoundEssenceDescriptor_ChannelCount()
-{
- //Parsing
- int32u Value;
- Get_B4 (Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].ChannelCount=Value;
- Descriptors[InstanceUID].Infos["Channel(s)"].From_Number(Value);
-
- //if (Descriptors[InstanceUID].ChannelAssignment.lo!=(int64u)-1)
- //{
- //Descriptors[InstanceUID].Infos["ChannelLayout"]=Mxf_ChannelAssignment_ChannelLayout(Descriptors[InstanceUID].ChannelAssignment, Value);
- //Ztring ChannelLayoutID;
- //ChannelLayoutID.From_Number(Descriptors[InstanceUID].ChannelAssignment.lo, 16);
- //if (ChannelLayoutID.size()<16)
- // ChannelLayoutID.insert(0, 16-ChannelLayoutID.size(), __T('0'));
- //Descriptors[InstanceUID].Infos["ChannelLayoutID"]=ChannelLayoutID;
- //Descriptors[InstanceUID].Infos["ChannelPositions"]=Mxf_ChannelAssignment_ChannelPositions(Descriptors[InstanceUID].ChannelAssignment, Value);
- //if (Descriptors[InstanceUID].Infos["ChannelPositions"].empty())
- // Descriptors[InstanceUID].Infos["ChannelPositions"]=ChannelLayoutID;
- //Descriptors[InstanceUID].Infos["ChannelPositions/String2"]=Mxf_ChannelAssignment_ChannelPositions2(Descriptors[InstanceUID].ChannelAssignment, Value);
- //}
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3D0C
-void File_Mxf::GenericSoundEssenceDescriptor_DialNorm()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info2(Data, " dB");
-}
-
-//---------------------------------------------------------------------------
-// 0x3E01
-void File_Mxf::GenericDataEssenceDescriptor_DataEssenceCoding()
-{
- //Parsing
- Skip_UL( "UUID");
-}
-
-//---------------------------------------------------------------------------
-// 0x4801
-void File_Mxf::GenericTrack_TrackID()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (Tracks[InstanceUID].TrackID==(int32u)-1)
- Tracks[InstanceUID].TrackID=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x4802
-void File_Mxf::GenericTrack_TrackName()
-{
- //Parsing
- Ztring Data;
- Get_UTF16B (Length2, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Tracks[InstanceUID].TrackName=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x4803
-void File_Mxf::GenericTrack_Sequence()
-{
- //Parsing
- int128u Data;
- Get_UUID(Data, "Data"); Element_Info1(Ztring::ToZtring(Data, 16));
-
- FILLING_BEGIN();
- Tracks[InstanceUID].Sequence=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x4804
-void File_Mxf::GenericTrack_TrackNumber()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Ztring::ToZtring(Data, 16));
-
- FILLING_BEGIN();
- Tracks[InstanceUID].TrackNumber=Data;
- Track_Number_IsAvailable=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3C01
-void File_Mxf::Identification_CompanyName()
-{
- //Parsing
- Ztring Data;
- Get_UTF16B(Length2, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Identifications[InstanceUID].CompanyName=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3C02
-void File_Mxf::Identification_ProductName()
-{
- //Parsing
- Ztring Data;
- Get_UTF16B(Length2, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Identifications[InstanceUID].ProductName=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3C03
-void File_Mxf::Identification_ProductVersion()
-{
- //Parsing
- int16u Major, Minor, Patch, Build, Release;
- Get_B2 (Major, "Major");
- Get_B2 (Minor, "Minor");
- Get_B2 (Patch, "Patch");
- Get_B2 (Build, "Build");
- Get_B2 (Release, "Release");
- Ztring Version=Ztring::ToZtring(Major)+__T('.')
- +Ztring::ToZtring(Minor)+__T('.')
- +Ztring::ToZtring(Patch)+__T('.')
- +Ztring::ToZtring(Build)+__T('.')
- +Ztring::ToZtring(Release) ;
- Element_Info1(Version);
-
- FILLING_BEGIN();
- Identifications[InstanceUID].ProductVersion=Version;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3C04
-void File_Mxf::Identification_VersionString()
-{
- //Parsing
- Ztring Data;
- Get_UTF16B(Length2, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Identifications[InstanceUID].VersionString=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3C05
-void File_Mxf::Identification_ProductUID()
-{
- //Parsing
- Skip_UUID( "UUID");
-}
-
-//---------------------------------------------------------------------------
-// 0x3C06
-void File_Mxf::Identification_ModificationDate()
-{
- //Parsing
- Info_Timestamp();
-}
-
-//---------------------------------------------------------------------------
-// 0x3C07
-void File_Mxf::Identification_ToolkitVersion()
-{
- //Parsing
- //Parsing
- Info_B2(Major, "Major");
- Info_B2(Minor, "Minor");
- Info_B2(Patch, "Patch");
- Info_B2(Build, "Build");
- Info_B2(Release, "Release");
- Element_Info1(Ztring::ToZtring(Major)+__T('.')
- +Ztring::ToZtring(Minor)+__T('.')
- +Ztring::ToZtring(Patch)+__T('.')
- +Ztring::ToZtring(Build)+__T('.')
- +Ztring::ToZtring(Release) );
-}
-
-//---------------------------------------------------------------------------
-// 0x3C08
-void File_Mxf::Identification_Platform()
-{
- //Parsing
- Info_UTF16B(Length2, Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3C09
-void File_Mxf::Identification_ThisGenerationUID()
-{
- //Parsing
- Skip_UUID( "UUID");
-}
-
-//---------------------------------------------------------------------------
-// 0x3F05
-void File_Mxf::IndexTableSegment_EditUnitByteCount()
-{
- //Parsing
- int32u Data;
- Get_B4(Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- #if MEDIAINFO_SEEK
- IndexTables[IndexTables.size()-1].EditUnitByteCount=Data;
- #endif //MEDIAINFO_SEEK
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3F06
-void File_Mxf::IndexTableSegment_IndexSID()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3F07
-void File_Mxf::IndexTableSegment_BodySID()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3F08
-void File_Mxf::IndexTableSegment_SliceCount()
-{
- //Parsing
- int8u Data;
- Get_B1(Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- IndexTable_NSL=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3F09
-void File_Mxf::IndexTableSegment_DeltaEntryArray()
-{
- //Parsing
- int32u NDE, Length;
- Get_B4(NDE, "NDE");
- Get_B4(Length, "Length");
- for (int32u Pos=0; Pos<NDE; Pos++)
- {
- Element_Begin1("Delta Entry");
- Skip_B1( "PosTableIndex");
- Skip_B1( "Slice");
- Skip_B4( "Element Delta");
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x3F0A
-void File_Mxf::IndexTableSegment_IndexEntryArray()
-{
- //Parsing
- int32u NIE, Length;
- Get_B4(NIE, "NIE");
- Get_B4(Length, "Length");
- for (int32u Pos=0; Pos<NIE; Pos++)
- {
- #if MEDIAINFO_SEEK
- indextable::entry Entry;
- int64u Stream_Offset;
- bool forward_rediction_flag, backward_prediction_flag;
- #endif //MEDIAINFO_SEEK
- int8u Flags;
- Element_Begin1("Index Entry");
- Skip_B1( "Temporal Offset");
- Skip_B1( "Key-Frame Offset");
- Get_B1 (Flags, "Flags");
- Skip_Flags(Flags, 7, "Random Access");
- Skip_Flags(Flags, 6, "Sequence Header");
- #if MEDIAINFO_SEEK
- Get_Flags (Flags, 5, forward_rediction_flag, "forward prediction flag");
- Get_Flags (Flags, 4, backward_prediction_flag, "backward prediction flag");
- #else //MEDIAINFO_SEEK
- Skip_Flags(Flags, 5, "forward prediction flag");
- Skip_Flags(Flags, 4, "backward prediction flag");
- #endif //MEDIAINFO_SEEK
- #if MEDIAINFO_SEEK
- Get_B8 (Stream_Offset, "Stream Offset");
- Entry.StreamOffset=Stream_Offset;
- Entry.Type=(forward_rediction_flag?1:0)*2+(backward_prediction_flag?1:0);
- IndexTables[IndexTables.size()-1].Entries.push_back(Entry);
- #else //MEDIAINFO_SEEK
- Skip_B8( "Stream Offset");
- #endif //MEDIAINFO_SEEK
- for (int32u NSL_Pos=0; NSL_Pos<IndexTable_NSL; NSL_Pos++)
- Skip_B4( "SliceOffset");
- for (int32u NPE_Pos=0; NPE_Pos<IndexTable_NPE; NPE_Pos++)
- Skip_B4( "PosTable");
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x3F0B
-void File_Mxf::IndexTableSegment_IndexEditRate()
-{
- //Parsing
- float64 Data;
- Get_Rational(Data);
-
- FILLING_BEGIN();
- #if MEDIAINFO_SEEK
- IndexTables[IndexTables.size()-1].IndexEditRate=Data;
- #endif //MEDIAINFO_SEEK
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3F0C
-void File_Mxf::IndexTableSegment_IndexStartPosition()
-{
- //Parsing
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- #if MEDIAINFO_SEEK
- IndexTables[IndexTables.size()-1].IndexStartPosition=Data;
-
- //Integrity test (in one file, I have 2 indexes with IndexStartPosition=0, the first one is weird (only one frame), or the same index is repeated
- //Integrity test (in one file, I have 2 indexes with IndexStartPosition=0, the second one is weird (only one frame), or the same index is repeated
- for (size_t Pos=0; Pos<IndexTables.size()-1; Pos++)
- if (IndexTables[Pos].IndexStartPosition==Data)
- {
- if (IndexTables[Pos].IndexDuration==1 && Pos!=IndexTables.size()-1)
- IndexTables.erase(IndexTables.begin()+Pos);
- else
- {
- IndexTables.erase(IndexTables.begin()+IndexTables.size()-1);
- Element_Offset=Element_Size;
- }
-
- return;
- }
- #endif //MEDIAINFO_SEEK
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3F0D
-void File_Mxf::IndexTableSegment_IndexDuration()
-{
- //Parsing
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- #if MEDIAINFO_SEEK
- IndexTables[IndexTables.size()-1].IndexDuration=Data;
- #endif //MEDIAINFO_SEEK
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3F0E
-void File_Mxf::IndexTableSegment_PosTableCount()
-{
- //Parsing
- int8u Data;
- Get_B1(Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- IndexTable_NPE=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x8002
-void File_Mxf::IndexTableSegment_8002()
-{
- //Parsing
- Info_B8(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x8001
-void File_Mxf::JPEG2000PictureSubDescriptor_Rsiz()
-{
- //Parsing
- Info_B2(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x8002
-void File_Mxf::JPEG2000PictureSubDescriptor_Xsiz()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x8003
-void File_Mxf::JPEG2000PictureSubDescriptor_Ysiz()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x8004
-void File_Mxf::JPEG2000PictureSubDescriptor_XOsiz()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x8005
-void File_Mxf::JPEG2000PictureSubDescriptor_YOsiz()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x8006
-void File_Mxf::JPEG2000PictureSubDescriptor_XTsiz()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x8007
-void File_Mxf::JPEG2000PictureSubDescriptor_YTsiz()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x8008
-void File_Mxf::JPEG2000PictureSubDescriptor_XTOsiz()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x8009
-void File_Mxf::JPEG2000PictureSubDescriptor_YTOsiz()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x800A
-void File_Mxf::JPEG2000PictureSubDescriptor_Csiz()
-{
- //Parsing
- Info_B2(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x800B
-void File_Mxf::JPEG2000PictureSubDescriptor_PictureComponentSizing()
-{
- //Parsing
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("PictureComponentSize");
- Info_B1(Ssiz, "Component sample precision"); Element_Info1(Ssiz);
- Info_B1(XRsiz, "Horizontal separation of a sample"); Element_Info1(XRsiz);
- Info_B1(YRsiz, "Vertical separation of a sample"); Element_Info1(YRsiz);
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-//
-void File_Mxf::JPEG2000PictureSubDescriptor_CodingStyleDefault()
-{
- Skip_XX(Length2, "Data");
-}
-
-//---------------------------------------------------------------------------
-//
-void File_Mxf::JPEG2000PictureSubDescriptor_QuantizationDefault()
-{
- Skip_XX(Length2, "Data");
-}
-
-//---------------------------------------------------------------------------
-// 0x3B02
-void File_Mxf::Preface_LastModifiedDate()
-{
- //Parsing
- Ztring Value;
- Get_Timestamp(Value); Element_Info1(Value);
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Encoded_Date, Value, true);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::PrimaryExtendedSpokenLanguage()
-{
- //Parsing
- Ztring Data;
- Get_Local (Length2, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- DMScheme1s[InstanceUID].PrimaryExtendedSpokenLanguage=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::SecondaryExtendedSpokenLanguage()
-{
- //Parsing
- Info_Local(Length2, Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::OriginalExtendedSpokenLanguage()
-{
- //Parsing
- Info_Local(Length2, Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::SecondaryOriginalExtendedSpokenLanguage()
-{
- //Parsing
- Info_Local(Length2, Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::RFC5646AudioLanguageCode()
-{
- bool SizeIsPresent=false;
- if (Length2>=4)
- {
- int32u Size;
- Peek_B4(Size);
- if (Size==((int32u)Length2)-4)
- {
- SizeIsPresent=true;
- Skip_B4( "Value size");
- }
- }
-
- //Parsing
- Ztring Value;
- Get_Local (Length2-(SizeIsPresent?4:0), Value, "Value"); Element_Info1(Value);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Infos["Language"]=Value;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_SingleSequence()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data?"Yes":"No");
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_ConstantBFrames()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data?"Yes":"No");
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_CodedContentType()
-{
- //Parsing
- int8u Data;
- Get_B1 (Data, "Data"); Element_Info1(Mxf_MPEG2_CodedContentType(Data));
-
- FILLING_BEGIN();
- if (!Partitions_IsFooter || Descriptors[InstanceUID].ScanType.empty())
- {
- if (Data==2 && Descriptors[InstanceUID].ScanType.empty())
- {
- if (Descriptors[InstanceUID].Height!=(int32u)-1) Descriptors[InstanceUID].Height*=2;
- if (Descriptors[InstanceUID].Height_Display!=(int32u)-1) Descriptors[InstanceUID].Height_Display*=2;
- if (Descriptors[InstanceUID].Height_Display_Offset!=(int32u)-1) Descriptors[InstanceUID].Height_Display_Offset*=2;
- }
- Descriptors[InstanceUID].ScanType.From_UTF8(Mxf_MPEG2_CodedContentType(Data));
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_LowDelay()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data?"Yes":"No");
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_ClosedGOP()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data?"Yes":"No");
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_IdenticalGOP()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data?"Yes":"No");
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_MaxGOP()
-{
- //Parsing
- Info_B2(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_BPictureCount()
-{
- //Parsing
- int16u Data;
- Get_B2 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].HasBFrames=Data?true:false;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_ProfileAndLevel()
-{
- //Parsing
- int8u profile_and_level_indication_profile, profile_and_level_indication_level;
- BS_Begin();
- Skip_SB( "profile_and_level_indication_escape");
- Get_S1 ( 3, profile_and_level_indication_profile, "profile_and_level_indication_profile"); Param_Info1(Mpegv_profile_and_level_indication_profile[profile_and_level_indication_profile]);
- Get_S1 ( 4, profile_and_level_indication_level, "profile_and_level_indication_level"); Param_Info1(Mpegv_profile_and_level_indication_level[profile_and_level_indication_level]);
- BS_End();
-
- FILLING_BEGIN();
- if (profile_and_level_indication_profile && profile_and_level_indication_level)
- Descriptors[InstanceUID].Infos["Format_Profile"]=Ztring().From_Local(Mpegv_profile_and_level_indication_profile[profile_and_level_indication_profile])+__T("@")+Ztring().From_Local(Mpegv_profile_and_level_indication_level[profile_and_level_indication_level]);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x
-void File_Mxf::MPEG2VideoDescriptor_BitRate()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Infos["BitRate"].From_Number(Data);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x4001
-void File_Mxf::NetworkLocator_URLString()
-{
- //Parsing
- Ztring Data;
- Get_UTF16B(Length2, Data, "Essence Locator"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Locators[InstanceUID].EssenceLocator=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3F01
-void File_Mxf::MultipleDescriptor_SubDescriptorUIDs()
-{
- Descriptors[InstanceUID].SubDescriptors.clear();
-
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- //Parsing
- int128u Data;
- Get_UUID(Data, "UUID");
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].SubDescriptors.push_back(Data);
- Descriptors[Data].Infos["StreamOrder"].From_Number(Pos);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::PartitionMetadata()
-{
- //Parsing
- int64u PreviousPartition, FooterPartition, HeaderByteCount, IndexByteCount, BodyOffset;
- int32u IndexSID;
- int32u KAGSize;
- Skip_B2( "MajorVersion");
- Skip_B2( "MinorVersion");
- Get_B4 (KAGSize, "KAGSize");
- Skip_B8( "ThisPartition");
- Get_B8 (PreviousPartition, "PreviousPartition");
- Get_B8 (FooterPartition, "FooterPartition");
- Get_B8 (HeaderByteCount, "HeaderByteCount");
- Get_B8 (IndexByteCount, "IndexByteCount");
- Get_B4 (IndexSID, "IndexSID");
- Get_B8 (BodyOffset, "BodyOffset");
- Skip_B4( "BodySID");
- Get_UL (OperationalPattern, "OperationalPattern", Mxf_OperationalPattern);
-
- Element_Begin1("EssenceContainers"); //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- int128u EssenceContainer;
- Get_UL (EssenceContainer, "EssenceContainer", Mxf_EssenceContainer);
- if (Count==1)
- EssenceContainer_FromPartitionMetadata=EssenceContainer;
- }
- Element_End0();
-
- PartitionPack_Parsed=true;
- Partitions_IsFooter=(Code.lo&0x00FF0000)==0x00040000;
- if (PreviousPartition!=File_Offset+Buffer_Offset-Header_Size)
- PartitionMetadata_PreviousPartition=PreviousPartition;
- if (FooterPartition)
- PartitionMetadata_FooterPartition=FooterPartition;
- bool AlreadyParsed=false;
- for (size_t Pos=0; Pos<Partitions.size(); Pos++)
- if (Partitions[Pos].StreamOffset==File_Offset+Buffer_Offset-Header_Size)
- AlreadyParsed=true;
- if (!AlreadyParsed)
- {
- partition Partition;
- Partition.StreamOffset=File_Offset+Buffer_Offset-Header_Size;
- Partition.FooterPartition=FooterPartition;
- Partition.HeaderByteCount=HeaderByteCount;
- Partition.IndexByteCount=IndexByteCount;
- Partition.BodyOffset=BodyOffset;
- Partitions_Pos=0;
- while (Partitions_Pos<Partitions.size() && Partitions[Partitions_Pos].StreamOffset<Partition.StreamOffset)
- Partitions_Pos++;
- Partitions.insert(Partitions.begin()+Partitions_Pos, Partition);
- Partitions_IsCalculatingHeaderByteCount=true;
- }
-
- if ((Code.lo&0xFF0000)==0x020000) //If Header Partition Pack
- switch ((Code.lo>>8)&0xFF)
- {
- case 0x01 : Fill(Stream_General, 0, General_Format_Settings, "Open / Incomplete" , Unlimited, true, true);
- if (Config->ParseSpeed>=1.0)
- {
- Config->File_IsGrowing=true;
- #if MEDIAINFO_MD5
- delete MD5; MD5=NULL;
- #endif //MEDIAINFO_MD5
- }
- break;
- case 0x02 : Fill(Stream_General, 0, General_Format_Settings, "Closed / Incomplete", Unlimited, true, true);
- break;
- case 0x03 : Fill(Stream_General, 0, General_Format_Settings, "Open / Complete" , Unlimited, true, true);
- if (Config->ParseSpeed>=1.0)
- {
- Config->File_IsGrowing=true;
- #if MEDIAINFO_MD5
- delete MD5; MD5=NULL;
- #endif //MEDIAINFO_MD5
- }
- break;
- case 0x04 : Fill(Stream_General, 0, General_Format_Settings, "Closed / Complete" , Unlimited, true, true);
- break;
- default : ;
- }
-
- if ((Code.lo&0xFF0000)==0x040000) //If Footer Partition Pack
- {
- switch ((Code.lo>>8)&0xFF)
- {
- case 0x02 :
- case 0x04 :
- Config->File_IsGrowing=false;
- break;
- default : ;
- }
-
- #if MEDIAINFO_ADVANCED
- if (Footer_Position==(int64u)-1)
- Footer_Position=File_Offset+Buffer_Offset-Header_Size;
- #endif //MEDIAINFO_ADVANCED
- }
-
- PartitionPack_AlreadyParsed.insert(File_Offset+Buffer_Offset-Header_Size);
-}
-
-//---------------------------------------------------------------------------
-// 0x3B03
-void File_Mxf::Preface_ContentStorage()
-{
- //Parsing
- int128u Data;
- Get_UUID(Data, "Data"); Element_Info1(Ztring().From_UUID(Data));
-
- FILLING_BEGIN();
- Prefaces[Preface_Current].ContentStorage=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3B05
-void File_Mxf::Preface_Version()
-{
- //Parsing
- Info_B1(Major, "Major"); //1
- Info_B1(Minor, "Minor"); //2
- Element_Info1(Ztring::ToZtring(Major)+__T('.')+Ztring::ToZtring(Minor));
-}
-
-//---------------------------------------------------------------------------
-// 0x3B06
-void File_Mxf::Preface_Identifications()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Identification");
- int128u Data;
- Get_UUID(Data, "UUID"); Element_Info1(Ztring().From_UUID(Data));
- Element_End0();
-
- FILLING_BEGIN();
- Prefaces[Preface_Current].Identifications.push_back(Data);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x3B07
-void File_Mxf::Preface_ObjectModelVersion()
-{
- //Parsing
- Skip_B4( "Data");
-}
-
-//---------------------------------------------------------------------------
-// 0x3B08
-void File_Mxf::Preface_PrimaryPackage()
-{
- //Parsing
- int128u Data;
- Get_UUID(Data, "Data");
-
- FILLING_BEGIN();
- Prefaces[Preface_Current].PrimaryPackage=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3B09
-void File_Mxf::Preface_OperationalPattern()
-{
- //Parsing
- Get_UL (OperationalPattern, "UUID", Mxf_OperationalPattern); Element_Info1(Mxf_OperationalPattern(OperationalPattern));
-}
-
-//---------------------------------------------------------------------------
-// 0x3B0A
-void File_Mxf::Preface_EssenceContainers()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Info_UL(EssenceContainer, "EssenceContainer", Mxf_EssenceContainer);
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x3B0B
-void File_Mxf::Preface_DMSchemes()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- if (Length==16)
- {
- Info_UL(Data, "DMScheme", NULL); Element_Info1(Ztring().From_UUID(Data));
- }
- else
- Skip_XX(Length, "DMScheme");
-}
-
-//---------------------------------------------------------------------------
-// 0x3401
-void File_Mxf::RGBAEssenceDescriptor_PixelLayout()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3403
-void File_Mxf::RGBAEssenceDescriptor_Palette()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3404
-void File_Mxf::RGBAEssenceDescriptor_PaletteLayout()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3405
-void File_Mxf::RGBAEssenceDescriptor_ScanningDirection()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3406
-void File_Mxf::RGBAEssenceDescriptor_ComponentMaxRef()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3407
-void File_Mxf::RGBAEssenceDescriptor_ComponentMinRef()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3408
-void File_Mxf::RGBAEssenceDescriptor_AlphaMaxRef()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3409
-void File_Mxf::RGBAEssenceDescriptor_AlphaMinRef()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x1001
-void File_Mxf::Sequence_StructuralComponents()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- int128u Data;
- Get_UUID (Data, "StructuralComponent");
-
- FILLING_BEGIN();
- Components[InstanceUID].StructuralComponents.push_back(Data);
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x1101
-void File_Mxf::SourceClip_SourcePackageID()
-{
- //Parsing
- int256u Data;
- Get_UMID(Data, "SourcePackageID");
-
- FILLING_BEGIN();
- Components[InstanceUID].SourcePackageID=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x1102
-void File_Mxf::SourceClip_SourceTrackID()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "SourceTrackID"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (Components[InstanceUID].SourceTrackID==(int32u)-1)
- Components[InstanceUID].SourceTrackID=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x1201
-void File_Mxf::SourceClip_StartPosition()
-{
- //Parsing
- Info_B8(Data, "StartPosition"); Element_Info1(Data); //units of edit rate
-}
-
-//---------------------------------------------------------------------------
-// 0x4701
-void File_Mxf::SourcePackage_Descriptor()
-{
- //Parsing
- int128u Data;
- Get_UUID(Data, "Data"); Element_Info1(Ztring().From_UUID(Data));
-
- FILLING_BEGIN();
- Packages[InstanceUID].Descriptor=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x0201
-void File_Mxf::StructuralComponent_DataDefinition()
-{
- //Parsing
- Info_UL(Data, "Data", Mxf_Sequence_DataDefinition); Element_Info1(Mxf_Sequence_DataDefinition(Data));
-}
-
-//---------------------------------------------------------------------------
-// 0x0202
-void File_Mxf::StructuralComponent_Duration()
-{
- //Parsing
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data); //units of edit rate
-
- FILLING_BEGIN();
- if (Data!=0xFFFFFFFFFFFFFFFFLL)
- Components[InstanceUID].Duration=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x0101
-void File_Mxf::SystemScheme1_FrameCount()
-{
- //Parsing
- Skip_B4( "Value");
-}
-
-//---------------------------------------------------------------------------
-// 0x0102
-void File_Mxf::SystemScheme1_TimeCodeArray()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("TimeCode");
- int8u Frames_Units, Frames_Tens, Seconds_Units, Seconds_Tens, Minutes_Units, Minutes_Tens, Hours_Units, Hours_Tens;
- bool DropFrame;
- BS_Begin();
-
- Skip_SB( "CF - Color fame");
- Get_SB ( DropFrame, "DP - Drop frame");
- Get_S1 (2, Frames_Tens, "Frames (Tens)");
- Get_S1 (4, Frames_Units, "Frames (Units)");
-
- Skip_SB( "FP - Field Phase / BGF0");
- Get_S1 (3, Seconds_Tens, "Seconds (Tens)");
- Get_S1 (4, Seconds_Units, "Seconds (Units)");
-
- Skip_SB( "BGF0 / BGF2");
- Get_S1 (3, Minutes_Tens, "Minutes (Tens)");
- Get_S1 (4, Minutes_Units, "Minutes (Units)");
-
- Skip_SB( "BGF2 / Field Phase");
- Skip_SB( "BGF1");
- Get_S1 (2, Hours_Tens, "Hours (Tens)");
- Get_S1 (4, Hours_Units, "Hours (Units)");
-
- Skip_S1(4, "BG2");
- Skip_S1(4, "BG1");
-
- Skip_S1(4, "BG4");
- Skip_S1(4, "BG3");
-
- Skip_S1(4, "BG6");
- Skip_S1(4, "BG5");
-
- Skip_S1(4, "BG8");
- Skip_S1(4, "BG7");
-
- BS_End();
-
- int64u TimeCode=(int64u)(Hours_Tens *10*60*60*1000
- + Hours_Units *60*60*1000
- + Minutes_Tens *10*60*1000
- + Minutes_Units *60*1000
- + Seconds_Tens *10*1000
- + Seconds_Units *1000
- + (SystemScheme1_FrameRateFromDescriptor?float64_int32s((Frames_Tens*10+Frames_Units)*1000/(float64)SystemScheme1_FrameRateFromDescriptor):0));
-
- Element_Info1(Ztring().Duration_From_Milliseconds(TimeCode));
-
- Element_End0();
-
- //TimeCode
- if (SystemScheme1_TimeCodeArray_StartTimecode_ms==(int64u)-1 && !IsParsingEnd && IsParsingMiddle_MaxOffset==(int64u)-1)
- {
- SystemScheme1_TimeCodeArray_StartTimecode_ms=TimeCode;
-
- SystemScheme1_TimeCodeArray_StartTimecode+=('0'+Hours_Tens);
- SystemScheme1_TimeCodeArray_StartTimecode+=('0'+Hours_Units);
- SystemScheme1_TimeCodeArray_StartTimecode+=':';
- SystemScheme1_TimeCodeArray_StartTimecode+=('0'+Minutes_Tens);
- SystemScheme1_TimeCodeArray_StartTimecode+=('0'+Minutes_Units);
- SystemScheme1_TimeCodeArray_StartTimecode+=':';
- SystemScheme1_TimeCodeArray_StartTimecode+=('0'+Seconds_Tens);
- SystemScheme1_TimeCodeArray_StartTimecode+=('0'+Seconds_Units);
- SystemScheme1_TimeCodeArray_StartTimecode+=DropFrame?';':':';
- SystemScheme1_TimeCodeArray_StartTimecode+=('0'+Frames_Tens);
- SystemScheme1_TimeCodeArray_StartTimecode+=('0'+Frames_Units);
- }
- }
-
- SystemSchemes[Element_Code&0xFFFF].IsTimeCode=true;
-}
-
-//---------------------------------------------------------------------------
-// 0x0103
-void File_Mxf::SystemScheme1_ClipIDArray()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Skip_UMID( );
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x0104
-void File_Mxf::SystemScheme1_ExtendedClipIDArray()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Skip_UMID( ); //ExtUMID (ToDo: merge)
- Skip_UMID( );
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x0105
-void File_Mxf::SystemScheme1_VideoIndexArray()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Skip_XX(Length, "Video Index");
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x0106
-void File_Mxf::SystemScheme1_KLVMetadataSequence()
-{
- Skip_XX(Element_Size, "KLV");
-}
-
-//---------------------------------------------------------------------------
-// 0x3001
-void File_Mxf::SystemScheme1_SampleRate()
-{
- //Parsing
- Skip_B8( "Value");
-}
-
-//---------------------------------------------------------------------------
-// 0x4804
-void File_Mxf::SystemScheme1_EssenceTrackNumber()
-{
- //Parsing
- Skip_B4( "Value");
-}
-
-//---------------------------------------------------------------------------
-// 0x6801
-void File_Mxf::SystemScheme1_EssenceTrackNumberBatch()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Skip_B4( "Track Number");
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x6803
-void File_Mxf::SystemScheme1_ContentPackageIndexArray()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Skip_XX(Length, "Index Entry");
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x4101
-void File_Mxf::TextLocator_LocatorName()
-{
- //Parsing
- Ztring Data;
- Get_UTF16B (Length2, Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Locators[InstanceUID].EssenceLocator=Data;
- Locators[InstanceUID].IsTextLocator=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x1501
-void File_Mxf::TimecodeComponent_StartTimecode()
-{
- //Parsing
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (Data!=(int64u)-1)
- {
- TimeCode_StartTimecode=Data;
- if (TimeCode_RoundedTimecodeBase)
- {
- DTS_Delay=((float64)TimeCode_StartTimecode)/TimeCode_RoundedTimecodeBase;
- if (TimeCode_DropFrame)
- {
- DTS_Delay*=1001;
- DTS_Delay/=1000;
- }
- FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000);
- #if MEDIAINFO_DEMUX
- Config->Demux_Offset_DTS_FromStream=FrameInfo.DTS;
- #endif //MEDIAINFO_DEMUX
- }
- }
-
- Components[InstanceUID].TimeCode_StartTimecode=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x1502
-void File_Mxf::TimecodeComponent_RoundedTimecodeBase()
-{
- //Parsing
- int16u Data;
- Get_B2 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (Data && Data!=(int16u)-1)
- {
- TimeCode_RoundedTimecodeBase=Data;
- if (TimeCode_StartTimecode!=(int64u)-1)
- {
- DTS_Delay=((float64)TimeCode_StartTimecode)/TimeCode_RoundedTimecodeBase;
- if (TimeCode_DropFrame)
- {
- DTS_Delay*=1001;
- DTS_Delay/=1000;
- }
- FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000);
- #if MEDIAINFO_DEMUX
- Config->Demux_Offset_DTS_FromStream=FrameInfo.DTS;
- #endif //MEDIAINFO_DEMUX
- }
- }
-
- Components[InstanceUID].TimeCode_RoundedTimecodeBase=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x1503
-void File_Mxf::TimecodeComponent_DropFrame()
-{
- //Parsing
- int8u Data;
- Get_B1 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (Data!=(int8u)-1 && Data)
- {
- TimeCode_DropFrame=true;
- if (DTS_Delay)
- {
- DTS_Delay*=1001;
- DTS_Delay/=1000;
- }
- FrameInfo.DTS=float64_int64s(DTS_Delay*1000000000);
- #if MEDIAINFO_DEMUX
- Config->Demux_Offset_DTS_FromStream=FrameInfo.DTS;
- #endif //MEDIAINFO_DEMUX
- }
-
- Components[InstanceUID].TimeCode_DropFrame=Data?true:false;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x4B01
-void File_Mxf::Track_EditRate()
-{
- //Parsing
- float64 Data;
- Get_Rational(Data); Element_Info1(Data);
-
- FILLING_BEGIN();
- Tracks[InstanceUID].EditRate=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x4B02
-void File_Mxf::Track_Origin()
-{
- //Parsing
- int64u Data;
- Get_B8 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- if (Data!=(int64u)-1)
- Tracks[InstanceUID].Origin=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3D09
-void File_Mxf::WaveAudioDescriptor_AvgBps()
-{
- //Parsing
- int32u Data;
- Get_B4 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].Infos["BitRate"].From_Number(Data*8);
- Descriptors[InstanceUID].ByteRate=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3D0A
-void File_Mxf::WaveAudioDescriptor_BlockAlign()
-{
- //Parsing
- int16u Data;
- Get_B2 (Data, "Data"); Element_Info1(Data);
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].BlockAlign=Data;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x3D0B
-void File_Mxf::WaveAudioDescriptor_SequenceOffset()
-{
- //Parsing
- Info_B1(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D29
-void File_Mxf::WaveAudioDescriptor_PeakEnvelopeVersion()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D2A
-void File_Mxf::WaveAudioDescriptor_PeakEnvelopeFormat()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D2B
-void File_Mxf::WaveAudioDescriptor_PointsPerPeakValue()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D2C
-void File_Mxf::WaveAudioDescriptor_PeakEnvelopeBlockSize()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D2D
-void File_Mxf::WaveAudioDescriptor_PeakChannels()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D2E
-void File_Mxf::WaveAudioDescriptor_PeakFrames()
-{
- //Parsing
- Info_B4(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D2F
-void File_Mxf::WaveAudioDescriptor_PeakOfPeaksPosition()
-{
- //Parsing
- Info_B8(Data, "Data"); Element_Info1(Data);
-}
-
-//---------------------------------------------------------------------------
-// 0x3D30
-void File_Mxf::WaveAudioDescriptor_PeakEnvelopeTimestamp()
-{
- //Parsing
- Info_Timestamp();
-}
-
-//---------------------------------------------------------------------------
-// 0x3D31
-void File_Mxf::WaveAudioDescriptor_PeakEnvelopeData()
-{
- //Parsing
- Skip_XX(Length2, "Data");
-}
-
-//---------------------------------------------------------------------------
-// 0x3D32
-void File_Mxf::WaveAudioDescriptor_ChannelAssignment()
-{
- //Parsing
- int128u Value;
- Get_UL (Value, "Value", Mxf_ChannelAssignment_ChannelLayout); Element_Info1(Mxf_ChannelAssignment_ChannelLayout(Value, Descriptors[InstanceUID].ChannelCount));
-
- FILLING_BEGIN();
- Descriptors[InstanceUID].ChannelAssignment=Value;
-
- //Descriptors[InstanceUID].Infos["ChannelLayout"]=Mxf_ChannelAssignment_ChannelLayout(Value, Descriptors[InstanceUID].ChannelCount);
- //Ztring ChannelLayoutID;
- //ChannelLayoutID.From_Number(Value.lo, 16);
- //if (ChannelLayoutID.size()<16)
- // ChannelLayoutID.insert(0, 16-ChannelLayoutID.size(), __T('0'));
- //Descriptors[InstanceUID].Infos["ChannelLayoutID"]=ChannelLayoutID;
- //Descriptors[InstanceUID].Infos["ChannelPositions"]=Mxf_ChannelAssignment_ChannelPositions(Value, Descriptors[InstanceUID].ChannelCount);
- //if (Descriptors[InstanceUID].Infos["ChannelPositions"].empty())
- // Descriptors[InstanceUID].Infos["ChannelPositions"]=ChannelLayoutID;
- //Descriptors[InstanceUID].Infos["ChannelPositions/String2"]=Mxf_ChannelAssignment_ChannelPositions2(Value, Descriptors[InstanceUID].ChannelCount);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// 0x8001
-void File_Mxf::Omneon_010201010100_8001()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Skip_UUID( "UUID Omneon_010201020100");
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x8001
-void File_Mxf::Omneon_010201010100_8003()
-{
- //Parsing
- //Vector
- int32u Count, Length;
- Get_B4 (Count, "Count");
- Get_B4 (Length, "Length");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Skip_UUID( "UUID Omneon_010201020100");
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x8003
-void File_Mxf::Omneon_010201020100_8002()
-{
- //Parsing
- Skip_UTF16B(Length2, "Content");
-}
-
-//---------------------------------------------------------------------------
-// 0x8003
-void File_Mxf::Omneon_010201020100_8003()
-{
- //Parsing
- Skip_UTF16B(Length2, "Content");
-}
-
-//---------------------------------------------------------------------------
-// 0x8004
-void File_Mxf::Omneon_010201020100_8004()
-{
- //Parsing
- Skip_XX(Length2, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-// 0x8005
-void File_Mxf::Omneon_010201020100_8005()
-{
- //Parsing
- Skip_UTF16B(Length2, "Content");
-}
-
-//---------------------------------------------------------------------------
-// 0x8006
-void File_Mxf::Omneon_010201020100_8006()
-{
- //Parsing
- Skip_Local(Length2, "Content");
-}
-
-//***************************************************************************
-// Basic types
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mxf::Get_Rational(float64 &Value)
-{
- //Parsing
- int32u N, D;
- Get_B4 (N, "Numerator");
- Get_B4 (D, "Denominator");
- if (D)
- Value=((float32)N)/D;
- else
- Value=0; //Error
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Skip_Rational()
-{
- //Parsing
- Skip_B4( "Numerator");
- Skip_B4( "Denominator");
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Info_Rational()
-{
- //Parsing
- Info_B4(N, "Numerator");
- Info_B4(D, "Denominator");
- Element_Info1C(D, ((float32)N)/D);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Get_UL(int128u &Value, const char* Name, const char* (*Param) (int128u))
-{
- #ifdef MEDIAINFO_MINIMIZE_SIZE
- Skip_UUID();
- #else
- //Parsing
- Element_Begin1(Name);
- int64u Value_hi, Value_lo;
- int8u Category, Registry, Structure;
- Peek_B8(Value_hi);
- Skip_B1( "Start (0x06)");
- Skip_B1( "Length of the remaining key (0x0E)");
- Skip_B1( "ISO, ORG (0x2B)");
- Skip_B1( "SMPTE (0x34)");
- Get_B1 (Category, "Category"); Param_Info1(Mxf_Category(Category));
- Get_B1 (Registry, "Registry"); Param_Info1(Mxf_Registry(Category, Registry));
- Get_B1 (Structure, "Structure"); Param_Info1(Mxf_Structure(Category, Registry, Structure));
- Skip_B1( "Version");
- Peek_B8(Value_lo);
- switch (Category)
- {
- case 0x01 : //Item
- {
- //switch (Registry)
- //{
- // default :
- {
- switch (Structure)
- {
- case 0x01 : //Standard
- Param_Info1("Essence element"); //SMPTE 379M
- Info_UL_01xx01_Items();
- break;
- default :
- Skip_B8( "Unknown");
- }
- }
- //}
- }
- break;
- case 0x02 : //Group
- {
- //switch (Registry)
- //{
- // default :
- {
- switch (Structure)
- {
- case 0x01 :
- Info_UL_02xx01_Groups();
- break;
- default :
- Skip_B8( "Unknown");
- }
- }
- //}
- }
- break;
- case 0x04 : //Value
- {
- switch (Registry)
- {
- case 0x01 :
- {
- Param_Info1("Labels");
- switch (Structure)
- {
- case 0x01 :
- Info_UL_040101_Values();
- break;
- default :
- Skip_B8( "Unknown");
- }
- }
- break;
- default :
- Skip_B8( "Unknown");
- }
- }
- break;
- default :
- Skip_B8( "Unknown");
- }
-
-
- Value.hi=Value_hi;
- Value.lo=Value_lo;
- Element_Info1C((Param), Param(Value));
- Element_End0();
- #endif
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File_Mxf::Info_UL_01xx01_Items()
-{
- Info_B1(Code1, "Item Designator");
- switch (Code1)
- {
- case 0x01 :
- {
- Param_Info1("Identifiers and locators");
- Info_B1(Code2, "Code (2)");
- switch (Code2)
- {
- case 0x01 :
- {
- Param_Info1("GUID");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x0D :
- {
- Param_Info1("UMID Mixed");
- Info_B1(Code4, "Code (4)");
- Info_B1(Code5, "Code (5)");
- Info_B1(Code6, "Code (6)");
- Info_B1(Code7, "Code (7)");
- Info_B1(Code8, "Code (8)");
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- case 0x03 :
- {
- Param_Info1("Locally Unique Identifiers");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x06 :
- {
- Param_Info1("Metadata Identifiers");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Item Designator ID");
- Info_B1(Code5, "Code (5)");
- //switch (Code5)
- //{
- // default :
- Skip_B3( "Unknown");
- //}
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x07 :
- {
- Param_Info1("?");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("?");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("MCA Label Dictionary ID");
- Skip_B3( "Reserved");
- }
- break;
- case 0x02 :
- {
- Param_Info1("MCA Tag Symbol");
- Skip_B3( "Reserved");
- }
- break;
- case 0x03 :
- {
- Param_Info1("MCA Tag Name");
- Skip_B3( "Reserved");
- }
- break;
- case 0x04 :
- {
- Param_Info1("Group Of Soundfield Groups Link ID");
- Skip_B3( "Reserved");
- }
- break;
- case 0x05 :
- {
- Param_Info1("MCA Link ID");
- Skip_B3( "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- case 0x05 :
- {
- Param_Info1("Titles");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x10 :
- {
- Param_Info1("MCA Title");
- Skip_B5( "Reserved");
- }
- break;
- case 0x11 :
- {
- Param_Info1("MCA Title Version");
- Skip_B5( "Reserved");
- }
- break;
- case 0x12 :
- {
- Param_Info1("MCA Title Sub-Version");
- Skip_B5( "Reserved");
- }
- break;
- case 0x13 :
- {
- Param_Info1("MCA Episode");
- Skip_B5( "Reserved");
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x03 :
- {
- Param_Info1("Interpretive");
- Info_B1(Code2, "Code (2)");
- switch (Code2)
- {
- case 0x01 :
- {
- Param_Info1("Fundamental");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x01 :
- {
- Param_Info1("Countries and Languages");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x02 :
- {
- Param_Info1("Language Codes");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x03 :
- {
- Param_Info1("Spoken Language Codes");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- {
- Param_Info1("Primary Spoken Language Code");
- Skip_B2( "Reserved");
- }
- break;
- case 0x02 :
- {
- Param_Info1("Secondary Spoken Language Code");
- Skip_B2( "Reserved");
- }
- break;
- case 0x03 :
- {
- Param_Info1("Primary Original Language Code");
- Skip_B2( "Reserved");
- }
- break;
- case 0x04 :
- {
- Param_Info1("Secondary Original Language Code");
- Skip_B2( "Reserved");
- }
- break;
- case 0x11 :
- {
- Param_Info1("Primary Extended Spoken Language Code");
- Skip_B2( "Reserved");
- }
- break;
- case 0x12 :
- {
- Param_Info1("Secondary Extended Spoken Language Code");
- Skip_B2( "Reserved");
- }
- break;
- case 0x13 :
- {
- Param_Info1("Original Extended Spoken Primary Language Code");
- Skip_B2( "Reserved");
- }
- break;
- case 0x14 :
- {
- Param_Info1("Secondary Original Extended Spoken Language Code");
- Skip_B2( "Reserved");
- }
- break;
- case 0x15 :
- {
- Param_Info1("RFC 5646 Audio Language Code");
- Skip_B2( "Reserved");
- }
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("Data Interpretations and Definitions");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x0A :
- {
- Param_Info1("Name-Value Construct Interpretations");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- case 0x02 :
- {
- Param_Info1("");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x00 :
- {
- Param_Info1("ANSI");
- Info_B1(Code7, "Reserved");
- Info_B1(Code8, "Reserved");
- }
- break;
- case 0x01 :
- {
- Param_Info1("UTF-16");
- Info_B1(Code7, "Reserved");
- Info_B1(Code8, "Reserved");
- }
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- case 0x10 :
- {
- Param_Info1("KLV Interpretations");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("Filler");
- Info_B1(Code6, "Reserved");
- Info_B1(Code7, "Reserved");
- Info_B1(Code8, "Reserved");
- }
- break;
- case 0x05 :
- {
- Param_Info1("Terminating Filler");
- Info_B1(Code6, "Reserved");
- Info_B1(Code7, "Reserved");
- Info_B1(Code8, "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- case 0x20 :
- {
- Param_Info1("XML Constructs and Interpretations");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("XML Document Text");
- Info_B1(Code6, "Reserved");
- Info_B1(Code7, "Reserved");
- Info_B1(Code8, "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("Human Assigned Descriptors");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x01 :
- {
- Param_Info1("Categorization");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x02 :
- {
- Param_Info1("Cataloging and Indexing");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("Catalog Data Status");
- Skip_B3( "Reserved");
- }
- break;
- case 0x02 :
- {
- Param_Info1("Thesaurus Name");
- Skip_B3( "Reserved");
- }
- break;
- case 0x03 :
- {
- Param_Info1("Theme");
- Skip_B3( "Reserved");
- }
- break;
- case 0x04 :
- {
- Param_Info1("Content Classification");
- Skip_B3( "Reserved");
- }
- break;
- case 0x05 :
- {
- Param_Info1("Keywords");
- Skip_B3( "Reserved");
- }
- break;
- case 0x06 :
- {
- Param_Info1("Key Frames");
- Skip_B3( "Reserved");
- }
- break;
- case 0x07 :
- {
- Param_Info1("Key Sounds");
- Skip_B3( "Reserved");
- }
- break;
- case 0x08 :
- {
- Param_Info1("Key Data");
- Skip_B3( "Reserved");
- }
- break;
- case 0x09 :
- {
- Param_Info1("Assigned Category Name");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0A :
- {
- Param_Info1("Assigned Category Value");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0B :
- {
- Param_Info1("Shot List");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0C :
- {
- Param_Info1("Package User Comments");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0D :
- {
- Param_Info1("Cue-In Words");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0E :
- {
- Param_Info1("Cue-Out Words");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0F :
- {
- Param_Info1("Key Frame Sample Count");
- Skip_B3( "Reserved");
- }
- break;
- case 0x10 :
- {
- Param_Info1("Keypoint Kind");
- Skip_B3( "Reserved");
- }
- break;
- case 0x11 :
- {
- Param_Info1("Keypoint Value");
- Skip_B3( "Reserved");
- }
- break;
- case 0x15 :
- {
- Param_Info1("Framework Thesaurus Name");
- Skip_B3( "Reserved");
- }
- break;
- case 0x16 :
- {
- Param_Info1("Component User Comments");
- Skip_B3( "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x04 :
- {
- Param_Info1("Parametric");
- Info_B1(Code2, "Code (2)");
- switch (Code2)
- {
- case 0x01 :
- {
- Param_Info1("Video and Image Essence Characteristics");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x02 :
- {
- Param_Info1("Image Source Characteristics");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Opto-Electronic Formulation");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("Transfer Characteristics");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- {
- Param_Info1("Capture Gamma Equation");
- Info_B1(Code7, "Code (7)");
- switch (Code7)
- {
- case 0x00 :
- {
- Param_Info1("ISO/IEC 646:1991 - ISO 7-Bit Coded Character Set");
- }
- break;
- case 0x01 :
- {
- Param_Info1("Rational");
- }
- break;
- case 0x02 :
- {
- Param_Info1("UL");
- }
- break;
- default :
- Info_B1(Code8, "Unknown");
- }
- Info_B1(Code8, "Reserved");
- }
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x06 :
- {
- Param_Info1("Digital Video and Image Compression Parameters");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x03 :
- {
- Param_Info1("JPEG 2000 Coding Parameters");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("Rsiz - Decoder capabilities");
- Skip_B3( "Reserved");
- }
- break;
- case 0x02 :
- {
- Param_Info1("Xsiz - Width");
- Skip_B3( "Reserved");
- }
- break;
- case 0x03 :
- {
- Param_Info1("Ysiz - Height");
- Skip_B3( "Reserved");
- }
- break;
- case 0x04 :
- {
- Param_Info1("XOsiz - Horizontal offset");
- Skip_B3( "Reserved");
- }
- break;
- case 0x05 :
- {
- Param_Info1("YOsiz - Vertical offset");
- Skip_B3( "Reserved");
- }
- break;
- case 0x06 :
- {
- Param_Info1("XTsiz - Width of one reference tile");
- Skip_B3( "Reserved");
- }
- break;
- case 0x07 :
- {
- Param_Info1("YTsiz - Height of one reference tile");
- Skip_B3( "Reserved");
- }
- break;
- case 0x08 :
- {
- Param_Info1("XTOsiz - Horizontal offset of the first tile");
- Skip_B3( "Reserved");
- }
- break;
- case 0x09 :
- {
- Param_Info1("YTOsiz - Vertical offset of the first tile");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0A :
- {
- Param_Info1("Csiz - Number of components in the picture");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0B :
- {
- Param_Info1("Picture Component Sizing");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0C :
- {
- Param_Info1("Coding Style Default");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0D :
- {
- Param_Info1("Quantization Default");
- Skip_B3( "Reserved");
- }
- break;
- case 0x0 :
- {
- Param_Info1("");
- Skip_B3( "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("Audio Essence Characteristics");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x01 :
- {
- Param_Info1("Fundamental Audio Characteristics");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Audio Formulation");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("Electrospatial Formulation");
- Skip_B3( "Reserved");
- }
- break;
- case 0x02 :
- {
- Param_Info1("Filtering Applied");
- Skip_B3( "Reserved");
- }
- break;
- case 0x03 :
- {
- Param_Info1("Audio Reference Level");
- Skip_B3( "Reserved");
- }
- break;
- case 0x04 :
- {
- Param_Info1("Channel Count");
- Skip_B3( "Reserved");
- }
- break;
- case 0x05 :
- {
- Param_Info1("Channel Assignment");
- Skip_B3( "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x06 :
- {
- Param_Info1("Relational");
- Info_B1(Code2, "Code (2)");
- switch (Code2)
- {
- case 0x01 :
- {
- Param_Info1("Essence and Metadata Relationships");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x01 :
- {
- Param_Info1("Essence to Essence Relationships");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x04 :
- {
- Param_Info1("Object to Object Relationships");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x06 :
- {
- Param_Info1("Strong References Arrays");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x10 :
- {
- Param_Info1("Sub-descriptors");
- Skip_B2( "Reserved");
- }
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x0D :
- {
- Param_Info1("User Organisation Registered For Public Use");
- Info_B1(Code2, "Organization");
- switch (Code2)
- {
- case 0x01 :
- {
- Param_Info1("AAF");
- Info_B1(Code3, "Application");
- switch (Code3)
- {
- case 0x03 :
- {
- Param_Info1("MXF Generic Container Keys");
- Info_B1(Code4, "Structure Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Version 1");
- Info_B1(Code5, "Item Type Identifier");
- switch (Code5)
- {
- case 0x05 : Param_Info1("CP Picture (SMPTE 386M)"); break;
- case 0x06 : Param_Info1("CP Sound (SMPTE 386M)"); break;
- case 0x07 : Param_Info1("CP Data (SMPTE 386M)"); break;
- case 0x14 : Param_Info1("MXF in MXF? (To confirm)"); break;
- case 0x15 : Param_Info1("GC Picture"); break;
- case 0x16 : Param_Info1("GC Sound"); break;
- case 0x17 : Param_Info1("GC Data"); break;
- case 0x18 : Param_Info1("GC Compound"); break;
- default : ;
- }
- Info_B1(Code6, "Essence Element Count");
- Info_B1(Code7, "Essence Element Type");
- Info_B1(Code8, "Essence Element Number");
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x0E :
- {
- Param_Info1("User Organisation Registered For Private Use");
- Info_B1(Code2, "Organization");
- switch (Code2)
- {
- case 0x04 :
- {
- Param_Info1("Avid");
- Info_B1(Code3, "Application");
- switch (Code3)
- {
- case 0x03 :
- {
- Param_Info1("Container Keys");
- Info_B1(Code4, "Structure Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Version 1");
- Info_B1(Code5, "Item Type Identifier");
- switch (Code5)
- {
- case 0x15 : Param_Info1("Picture"); break;
- default : ;
- }
- Info_B1(Code6, "Essence Element Count");
- Info_B1(Code7, "Essence Element Type");
- Info_B1(Code8, "Essence Element Number");
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- case 0x06 :
- {
- Param_Info1("Sony");
- Info_B1(Code3, "Application");
- switch (Code3)
- {
- case 0x7F :
- {
- Param_Info1("?");
- Info_B1(Code4, "?");
- switch (Code4)
- {
- case 0x03 :
- {
- Param_Info1("?");
- Info_B1(Code5, "?");
- switch (Code5)
- {
- case 0x15 : Param_Info1("Picture"); break;
- default : ;
- }
- Info_B1(Code6, "Essence Element Count");
- Info_B1(Code7, "Essence Element Type");
- Info_B1(Code8, "Essence Element Number");
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- default :
- Skip_B7( "Unknown");
- }
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File_Mxf::Info_UL_02xx01_Groups()
-{
- Info_B1(Code1, "Item Designator");
- switch (Code1)
- {
- case 0x0D :
- {
- Param_Info1("User Organisation Registered For Public Use");
- Info_B1(Code2, "Organization");
- switch (Code2)
- {
- case 0x01 :
- {
- Param_Info1("AAF");
- Info_B1(Code3, "Application");
- switch (Code3)
- {
- case 0x01 :
- {
- Param_Info1("Structural Metadata Sets");
- Info_B1(Code4, "Structure Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Version 1");
- Info_B1(Code5, "Structure Kind");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("MXF / AAF Association compatible sets & packs");
- Info_B1(Code6, "Set Kind (1)"); //See table 14
- Info_B1(Code7, "Set Kind (2)"); //See table 14
- Info_B1(Code8, "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("MXF File Structure");
- Info_B1(Code4, "Structure Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Version 1");
- Info_B1(Code5, "Structure Kind");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("MXF File Structure sets & packs");
- Info_B1(Code6, "Set / Pack Kind");
- switch (Code6)
- {
- case 0x02 :
- {
- Param_Info1("Header Partition");
- Info_B1(Code7, "Partition Status");
- Info_B1(Code8, "Reserved");
- }
- break;
- case 0x03 :
- {
- Param_Info1("Body Partition");
- Info_B1(Code7, "Partition Status");
- Info_B1(Code8, "Reserved");
- }
- break;
- case 0x04 :
- {
- Param_Info1("Footer Partition");
- Info_B1(Code7, "Partition Status");
- Info_B1(Code8, "Reserved");
- }
- break;
- case 0x05 :
- {
- Param_Info1("Primer");
- Info_B1(Code7, "Version of the Primer Pack");
- Info_B1(Code8, "Reserved");
- }
- break;
- case 0x10 :
- Param_Info1("Index Table Segment");
- Skip_B1( "Version");
- Skip_B1( "Reserved");
- break;
- case 0x11 :
- Param_Info1("Random Index Pack");
- Skip_B1( "Version");
- Skip_B1( "Reserved");
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x03 :
- {
- Param_Info1("MXF Generic Container Keys");
- Info_B1(Code4, "Structure Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("MXF-GC Version 1");
- Info_B1(Code5, "Item Type Identifier");
- switch (Code5)
- {
- case 0x04 :
- {
- Param_Info1("CP-Compatible System Item"); //SMPTE 379M
- Info_B1(Code6, "System Scheme Identifier");
- switch (Code6)
- {
- case 0x02 :
- {
- Param_Info1("SDTI-CP, version 1"); //SMPTE 385M
- Info_B1(Code7, "Metadata or Control Element Identifier");
- switch (Code7)
- {
- case 0x01 :
- {
- Param_Info1("System Metadata Pack");
- Info_B1(Code8, "Reserved");
- }
- break;
- case 0x02 :
- {
- Param_Info1("Package metadata set");
- Info_B1(Code8, "Metadata Block Count");
- }
- break;
- case 0x03 :
- {
- Param_Info1("Picture metadata set");
- Info_B1(Code8, "Metadata Block Count");
- }
- break;
- case 0x04 :
- {
- Param_Info1("Sound metadata set");
- Info_B1(Code8, "Metadata Block Count");
- }
- break;
- case 0x05 :
- {
- Param_Info1("Data metadata set");
- Info_B1(Code8, "Metadata Block Count");
- }
- break;
- case 0x06 :
- {
- Param_Info1("Control data set");
- Info_B1(Code8, "Metadata Block Count");
- }
- break;
- default :
- Info_B1(Code8, "Metadata Block Count");
- }
- }
- break;
- default :
- Info_B1(Code7, "Metadata or Control Element Identifier");
- Info_B1(Code8, "Reserved");
- }
- }
- break;
- case 0x14 :
- {
- Param_Info1("GC-Compatible System Item"); //SMPTE 379M
- Info_B1(Code6, "System Scheme Identifier");
- switch (Code6)
- {
- case 0x02 :
- {
- Param_Info1("GC System Scheme 1"); //SMPTE 394M
- Info_B1(Code7, "Metadata or Control Element Identifier");
- switch (Code7)
- {
- case 0x01 :
- Param_Info1("First Element");
- break;
- case 0x02 :
- Param_Info1("Subsequent Element");
- break;
- case 0x03 :
- Param_Info1("Picture Item Descriptor");
- break;
- case 0x04 :
- Param_Info1("Sound Item Descriptor");
- break;
- case 0x05 :
- Param_Info1("Data Item Descriptor");
- break;
- case 0x06 :
- Param_Info1("Control Item Descriptor");
- break;
- case 0x07 :
- Param_Info1("Compound Item Descriptor");
- break;
- default : if (Code7>=0x10 && Code7<=0x7F) Param_Info1("Pack coded System Elements (SMPTE 336M)");
- }
- Info_B1(Code8, "Element Number");
- }
- break;
- default :
- Info_B1(Code7, "Metadata or Control Element Identifier");
- Info_B1(Code8, "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x04 :
- {
- Param_Info1("MXF / AAF Descriptive Metadata sets");
- Info_B1(Code4, "Structure Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Version 1");
- Info_B1(Code5, "Structure / Scheme Kind");
- Info_B1(Code6, "Reserved");
- Info_B1(Code7, "Reserved");
- Info_B1(Code8, "Reserved");
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x0E :
- {
- Param_Info1("User Organisation Registered For Private Use");
- Skip_B7( "Private");
- break;
- }
- default :
- Skip_B7( "Unknown");
- }
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_TRACE
-void File_Mxf::Info_UL_040101_Values()
-{
- Info_B1(Code1, "Item Designator");
- switch (Code1)
- {
- case 0x01 :
- {
- Param_Info1("Identification and location");
- Info_B1(Code2, "Code (2)");
- switch (Code2)
- {
- case 0x03 :
- {
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x02 :
- Skip_B5( "Track identifier");
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x03 :
- {
- Param_Info1("Interpretive");
- Info_B1(Code2, "Code (2)");
- switch (Code2)
- {
- case 0x01 :
- {
- Param_Info1("Per element?");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x01 :
- {
- Param_Info1("Channels?");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("L");
- Skip_B4( "Reserved");
- }
- break;
- case 0x02 :
- {
- Param_Info1("R");
- Skip_B4( "Reserved");
- }
- break;
- case 0x03 :
- {
- Param_Info1("C");
- Skip_B4( "Reserved");
- }
- break;
- case 0x04 :
- {
- Param_Info1("LFE");
- Skip_B4( "Reserved");
- }
- break;
- case 0x05 :
- {
- Param_Info1("Ls");
- Skip_B4( "Reserved");
- }
- break;
- case 0x06 :
- {
- Param_Info1("Rs");
- Skip_B4( "Reserved");
- }
- break;
- case 0x20 :
- {
- Param_Info1("M1");
- Skip_B4( "Reserved");
- }
- break;
- case 0x21 :
- {
- Param_Info1("M2");
- Skip_B4( "Reserved");
- }
- break;
- case 0x22 :
- {
- Param_Info1("Lt");
- Skip_B4( "Reserved");
- }
- break;
- case 0x23 :
- {
- Param_Info1("Rt");
- Skip_B4( "Reserved");
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("Per group?");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("5.1");
- Skip_B4( "Reserved");
- }
- break;
- case 0x11 :
- {
- Param_Info1("Dual Mono");
- Skip_B4( "Reserved");
- }
- break;
- case 0x18 :
- {
- Param_Info1("Lt+Rt");
- Skip_B4( "Reserved");
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("Per element?");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x01 :
- {
- Param_Info1("Channels?");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("L");
- Skip_B4( "Reserved");
- }
- break;
- case 0x02 :
- {
- Param_Info1("R");
- Skip_B4( "Reserved");
- }
- break;
- case 0x03 :
- {
- Param_Info1("C");
- Skip_B4( "Reserved");
- }
- break;
- case 0x04 :
- {
- Param_Info1("LFE");
- Skip_B4( "Reserved");
- }
- break;
- case 0x05 :
- {
- Param_Info1("Ls");
- Skip_B4( "Reserved");
- }
- break;
- case 0x06 :
- {
- Param_Info1("Rs");
- Skip_B4( "Reserved");
- }
- break;
- case 0x20 :
- {
- Param_Info1("Lt+Rt?");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x03 :
- {
- Param_Info1("Lt");
- Skip_B3( "Reserved");
- }
- break;
- case 0x04 :
- {
- Param_Info1("Rt");
- Skip_B3( "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("Per group?");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("5.1");
- Skip_B4( "Reserved");
- }
- break;
- case 0x10 :
- {
- Param_Info1("2.0");
- Skip_B4( "Reserved");
- }
- break;
- case 0x18 :
- {
- Param_Info1("Lt+Rt");
- Skip_B4( "Reserved");
- }
- break;
- case 0x20 :
- {
- Param_Info1("?");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("2.0");
- Skip_B3( "Reserved");
- }
- break;
- case 0x09 :
- {
- Param_Info1("Lt+Rt");
- Skip_B3( "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x04 :
- {
- Param_Info1("Parametric");
- Info_B1(Code2, "Code (2)");
- switch (Code2)
- {
- case 0x01 :
- {
- Param_Info1("Picture essence");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x01 :
- {
- Param_Info1("Fundamental Picture Characteristics");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Picture Source Characteristics");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("Transfer Characteristic");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- Param_Info1("BT.470");
- Skip_B2( "Reserved");
- break;
- case 0x02 :
- Param_Info1("BT.709");
- Skip_B2( "Reserved");
- break;
- case 0x03 :
- Param_Info1("SMPTE 240M");
- Skip_B2( "Reserved");
- break;
- case 0x04 :
- Param_Info1("SMPTE 274M");
- Skip_B2( "Reserved");
- break;
- case 0x05 :
- Param_Info1("BT.1361 extended colour gamut system");
- Skip_B2( "Reserved");
- break;
- case 0x06 :
- Param_Info1("Linear");
- Skip_B2( "Reserved");
- break;
- case 0x07 :
- Param_Info1("SMPTE 428M");
- Skip_B2( "Reserved");
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("Coding Equations");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- Param_Info1("BT.601");
- Skip_B2( "Reserved");
- break;
- case 0x02 :
- Param_Info1("BT.709");
- Skip_B2( "Reserved");
- break;
- case 0x03 :
- Param_Info1("SMPTE 240M");
- Skip_B2( "Reserved");
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- case 0x03 :
- {
- Param_Info1("Color Primaries");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- Param_Info1("BT.601 NTSC");
- Skip_B2( "Reserved");
- break;
- case 0x02 :
- Param_Info1("BT.470 System B");
- Skip_B2( "Reserved");
- break;
- case 0x03 :
- Param_Info1("BT.709");
- Skip_B2( "Reserved");
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x02 :
- Param_Info1("Picture Coding Characteristics");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- Param_Info1("Uncompressed Picture Coding");
- Skip_B1( "Item Type Identifier"); //if 0x14: SMPTE 384M Uncompressed picture Line wrapped
- Skip_B1( "System Scheme Identifier"); //SMPTE 384M
- Skip_B1( "System Element Identifier"); //SMPTE 384M
- Skip_B1( "Reserved");
- break;
- case 0x02 :
- {
- Param_Info1("Compressed Picture Coding");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- {
- Param_Info1("MPEG Compression");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- Param_Info1("MPEG-2 MP@ML");
- Skip_B2( "Unknown");
- break;
- case 0x02 :
- Param_Info1("MPEG-2 422P@ML");
- Skip_B2( "Unknown");
- break;
- case 0x03 :
- Param_Info1("MPEG-2 MP@HL");
- Skip_B2( "Unknown");
- break;
- case 0x04 :
- Param_Info1("MPEG-2 422P@HL");
- Skip_B2( "Unknown");
- break;
- case 0x10 :
- Param_Info1("MPEG-1");
- Skip_B2( "Unknown");
- break;
- case 0x20 :
- Param_Info1("MPEG-4 Visual");
- Skip_B2( "Unknown");
- break;
- case 0x32 :
- Param_Info1("AVC");
- Skip_B2( "Unknown");
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("DV Video Compression");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x02 :
- Param_Info1("DV-Based Compression");
- Info_B1(Code7, "DV type (SMPTE 383)");
- Info_B1(Code8, "Mapping Kind"); Param_Info1(Mxf_EssenceContainer_Mapping(Code6, Code7, Code8));
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- case 0x03 :
- {
- Param_Info1("Individual Picture Coding Schemes");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- Param_Info1("JPEG 2000");
- Skip_B1( "Unused");
- Skip_B1( "Unused");
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- case 0x71 :
- {
- Param_Info1("VC-3");
- Skip_B1( "Variant");
- Skip_B1( "Unused");
- Skip_B1( "Unused");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("Sound essence");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x01 :
- Skip_B5( "Sound coding or compression");
- break;
- case 0x02 :
- {
- Param_Info1("Sound Coding Characteristics");
- Info_B1(Code4, "Code (4)");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Uncompressed Sound Coding");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x7E :
- {
- Param_Info1("PCM (AIFF)");
- Skip_B3( "Reserved");
- }
- break;
- case 0x7F :
- {
- Param_Info1("Undefined");
- Skip_B3( "Reserved");
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("Compressed Sound Coding");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x03 :
- {
- Param_Info1("Compressed Audio Coding");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- {
- Param_Info1("Compandeded Audio Coding");
- Info_B1(Code7, "Code (7)");
- switch (Code7)
- {
- case 0x01 :
- Param_Info1("A-law Coded Audio (default)");
- Skip_B1("Unknown");
- break;
- case 0x02 :
- Param_Info1("DV Compressed Audio");
- Skip_B1("Unknown");
- break;
- default :
- Skip_B2("Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("SMPTE 338M Audio Coding");
- Info_B1(Code7, "Code (7)");
- switch (Code7)
- {
- case 0x01 :
- Param_Info1("AC-3");
- Skip_B1("Unknown");
- break;
- case 0x04 :
- Param_Info1("MPEG-1 Audio Layer 1");
- Skip_B1("Unknown");
- break;
- case 0x05 :
- Param_Info1("MPEG-1 Audio Layer 2");
- Skip_B1("Unknown");
- break;
- case 0x06 :
- Param_Info1("MPEG-2 Audio Layer 1");
- Skip_B1("Unknown");
- break;
- case 0x1C :
- Param_Info1("Dolby E");
- Skip_B1("Unknown");
- break;
- default :
- Skip_B2("Unknown");
- }
- }
- break;
- case 0x03 :
- {
- Param_Info1("MPEG-2 Coding (not defined in SMPTE 338M)");
- Info_B1(Code7, "Code (7)");
- switch (Code7)
- {
- case 0x01 :
- Param_Info1("AAC version 2");
- Skip_B1("Unknown");
- break;
- default :
- Skip_B2("Unknown");
- }
- }
- break;
- case 0x04 :
- {
- Param_Info1("MPEG-4 Audio Coding");
- Info_B1(Code7, "Code (7)");
- switch (Code7)
- {
- case 0x01 :
- Param_Info1("MPEG-4 Speech Profile");
- Skip_B1("Unknown");
- break;
- case 0x02 :
- Param_Info1("MPEG-4 Synthesis Profile");
- Skip_B1("Unknown");
- break;
- case 0x03 :
- Param_Info1("MPEG-4 Scalable Profile");
- Skip_B1("Unknown");
- break;
- case 0x04 :
- Param_Info1("MPEG-4 Main Profile");
- Skip_B1("Unknown");
- break;
- case 0x05 :
- Param_Info1("MPEG-4 High Quality Audio Profile");
- Skip_B1("Unknown");
- break;
- case 0x06 :
- Param_Info1("MPEG-4 Low Delay Audio Profile");
- Skip_B1("Unknown");
- break;
- case 0x07 :
- Param_Info1("MPEG-4 Natural Audio Profile");
- Skip_B1("Unknown");
- break;
- case 0x08 :
- Param_Info1("MPEG-4 Mobile Audio Internetworking Profile");
- Skip_B1("Unknown");
- break;
- default :
- Skip_B1("Unknown");
- }
- }
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- case 0x10 :
- {
- Param_Info1("Sound Channel Labeling");
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x03 :
- {
- Param_Info1("Sound Channel Labeling SMPTE 429-2");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- {
- Param_Info1("Sound Channel Labeling SMPTE 429-2 Sets");
- Info_B1(Code7, "Code (7)");
- switch (Code7)
- {
- case 0x01 :
- Param_Info1("SMPTE-429-2 Channel Configuration 1");
- Skip_B1("Reserved");
- break;
- default :
- Skip_B1("Unknown");
- }
- }
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- case 0x04 :
- {
- Param_Info1("Sound Channel Labeling SMPTE 2067-2");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- {
- Param_Info1("MXF Multichannel Audio Framework");
- Skip_B2( "Reserved");
- }
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x0D :
- {
- Param_Info1("User Organisation Registered For Public Use");
- Info_B1(Code2, "Organization");
- switch (Code2)
- {
- case 0x01 :
- {
- Param_Info1("AAF");
- Info_B1(Code3, "Application");
- switch (Code3)
- {
- case 0x02 :
- {
- Param_Info1("Operational Patterns");
- Info_B1(Code4, "Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Version 1");
- Info_B1(Code5, "Item Complexity");
- Info_B1(Code6, "Package Complexity");
- Info_B1(Code7, "Qualifier");
- Skip_Flags(Code7, 3, "uni/multi-track");
- Skip_Flags(Code7, 2, "stream/non-stream file");
- Skip_Flags(Code7, 1, "internal/external essence");
- Info_B1(Code8, "Reserved");
- }
- break;
- case 0x02 :
- {
- Info_B1(Code5, "Code (5)");
- switch (Code5)
- {
- case 0x01 :
- Skip_B3( "Essence container kind");
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x03 :
- {
- Param_Info1("Essence Container Application");
- Info_B1(Code4, "Structure Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("MXF EC Structure Version 1");
- Info_B1(Code5, "Essence container Kind");
- switch (Code5)
- {
- case 0x01 :
- Param_Info1("Deprecated Essence Container Kind");
- Skip_B3( "Unknown");
- break;
- case 0x02 :
- {
- Param_Info1("Essence Container Kind");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 : //SMPTE 386M
- {
- Param_Info1("Type D-10 Mapping");
- Skip_B1( "MPEG Constraints"); //SMPTE 356M
- Skip_B1( "Template Extension");
- }
- break;
- case 0x02 :
- {
- Param_Info1("DV Mappings");
- Skip_B1( "Mapping Kind");
- Skip_B1( "Locally defined");
- }
- break;
- case 0x03 :
- {
- Param_Info1("Type D-11 Mapping");
- Skip_B1( "Mapping Kind");
- Skip_B1( "Locally defined");
- }
- break;
- case 0x04 :
- {
- Param_Info1("MPEG ES mappings");
- Info_B1(Code7, "ISO13818-1 stream_id bits 6..0"); Param_Info1(Ztring::ToZtring(0x80+Code7, 16));
- Info_B1(Code8, "Mapping Kind"); Param_Info1(Mxf_EssenceContainer_Mapping(Code6, Code7, Code8));
- }
- break;
- case 0x05 : //SMPTE 384M
- {
- Param_Info1("Uncompressed Pictures");
- Info_B1(Code7, "Number of lines / field rate combination"); //SMPTE 384M
- Info_B1(Code8, "Mapping Kind"); Param_Info1(Mxf_EssenceContainer_Mapping(Code6, Code7, Code8));
- }
- break;
- case 0x06 :
- {
- Param_Info1("AES-BWF");
- Info_B1(Code7, "Mapping Kind"); Param_Info1(Mxf_EssenceContainer_Mapping(Code6, Code7, 0x00));
- Skip_B1( "Locally defined");
- }
- break;
- case 0x07 :
- {
- Param_Info1("MPEG PES mappings");
- Info_B1(Code7, "ISO13818-1 stream_id bits 6..0"); Param_Info1(Ztring::ToZtring(0x80+Code7, 16));
- Info_B1(Code8, "Mapping Kind"); Param_Info1(Mxf_EssenceContainer_Mapping(Code6, Code7, Code8));
- }
- break;
- case 0x08 :
- {
- Param_Info1("MPEG PS mappings");
- Info_B1(Code7, "ISO13818-1 stream_id bits 6..0"); Param_Info1(Ztring::ToZtring(0x80+Code7, 16));
- Info_B1(Code8, "Mapping Kind"); Param_Info1(Mxf_EssenceContainer_Mapping(Code6, Code7, Code8));
- }
- break;
- case 0x09 :
- {
- Param_Info1("MPEG TS mappings");
- Info_B1(Code7, "ISO13818-1 stream_id bits 6..0"); Param_Info1(Ztring::ToZtring(0x80+Code7, 16));
- Info_B1(Code8, "Mapping Kind"); Param_Info1(Mxf_EssenceContainer_Mapping(Code6, Code7, Code8));
- }
- break;
- case 0x0A :
- {
- Param_Info1("A-law Sound Element Mapping");
- Info_B1(Code7, "Mapping Kind"); Param_Info1(Mxf_EssenceContainer_Mapping(Code6, Code7, 0xFF));
- Skip_B1( "Locally defined");
- }
- break;
- case 0x0B :
- {
- Param_Info1("Encrypted Generic Container");
- Skip_B1( "Mapping Kind");
- Skip_B1( "Locally defined");
- }
- break;
- case 0x0C :
- {
- Param_Info1("JPEG 2000 Picture Mapping");
- Skip_B1( "Mapping Kind");
- Skip_B1( "Locally defined");
- }
- break;
- case 0x11 :
- {
- Param_Info1("VC-3 Picture Element");
- Info_B1(Code7, "Content Kind"); Param_Info1(Mxf_EssenceContainer_Mapping(Code6, Code7, 0xFF));
- Skip_B1( "Reserved");
- }
- break;
- case 0x16 :
- {
- Param_Info1("AVC Picture Element");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- }
- break;
- case 0x7F :
- {
- Param_Info1("Generic Essence Container Wrapping");
- Skip_B1( "Mapping Kind");
- Skip_B1( "Locally defined");
- }
- break;
- default :
- {
- Skip_B1( "Mapping Kind");
- Skip_B1( "Locally defined");
- }
- }
- }
- break;
- default :
- Skip_B1( "Essence container Kind");
- Skip_B1( "Mapping Kind");
- Skip_B1( "Locally defined");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x04 :
- {
- Param_Info1("MXF / AAF compatible Descriptive Metadata Labels");
- Info_B1(Code4, "Label Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("Version 1");
- Info_B1(Code5, "Scheme Kind");
- Info_B1(Code6, "Reserved");
- Info_B1(Code7, "Reserved");
- Info_B1(Code8, "Reserved");
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- case 0x02 :
- {
- Param_Info1("EBU/UER");
- Skip_B6( "Unknown");
- }
- break;
- case 0x03 :
- {
- Param_Info1("Pro-MPEG Forum");
- Skip_B6( "Unknown");
- }
- break;
- case 0x04 :
- {
- Param_Info1("BBC");
- Skip_B6( "Unknown");
- }
- break;
- case 0x05 :
- {
- Param_Info1("IRT");
- Skip_B6( "Unknown");
- }
- break;
- case 0x06 :
- {
- Param_Info1("ARIB");
- Skip_B6( "Unknown");
- }
- break;
- default :
- Skip_B6( "Unknown");
- }
- }
- break;
- case 0x0E :
- {
- Param_Info1("User Organisation Registered For Private Use");
- Info_B1(Code2, "Code (2)");
- switch (Code2)
- {
- case 0x04 :
- {
- Param_Info1("Avid");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x02 :
- {
- Param_Info1("Essence Compression?");
- Info_B1(Code4, "?");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("?");
- Info_B1(Code5, "?");
- switch (Code5)
- {
- case 0x02 :
- {
- Param_Info1("?");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x04 :
- Param_Info1("VC-3");
- Skip_B2( "Unknown");
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x03 :
- {
- Param_Info1("Essence Container Application");
- Info_B1(Code4, "Structure Version");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("MXF EC Structure Version 1");
- Info_B1(Code5, "Essence container Kind");
- switch (Code5)
- {
- case 0x02 :
- {
- Param_Info1("Essence Container Kind");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x06 :
- Param_Info1("VC-3");
- Skip_B2( "Unknown");
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Unknown");
- }
- }
- break;
- case 0x06 :
- {
- Param_Info1("Sony");
- Info_B1(Code3, "Code (3)");
- switch (Code3)
- {
- case 0x04 :
- {
- Param_Info1("Essence Compression?");
- Info_B1(Code4, "?");
- switch (Code4)
- {
- case 0x01 :
- {
- Param_Info1("?");
- Info_B1(Code5, "?");
- switch (Code5)
- {
- case 0x02 :
- {
- Param_Info1("?");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x04 :
- {
- Param_Info1("?");
- Info_B1(Code7, "Code (7)");
- switch (Code7)
- {
- case 0x02 :
- Param_Info1("?");
- Info_B1(Code8, "Code (8)");
- switch (Code8)
- {
- case 0x01 :
- Param_Info1("RAW SQ");
- break;
- default :
- ;
- }
- break;
- default :
- Skip_B1( "Unknown");
- }
- }
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- case 0x0D :
- {
- Param_Info1("Essence Container?");
- Info_B1(Code4, "?");
- switch (Code4)
- {
- case 0x03 :
- {
- Param_Info1("?");
- Info_B1(Code5, "?");
- switch (Code5)
- {
- case 0x02 :
- {
- Param_Info1("?");
- Info_B1(Code6, "Code (6)");
- switch (Code6)
- {
- case 0x01 :
- {
- Param_Info1("?");
- Info_B1(Code7, "Code (7)");
- switch (Code7)
- {
- case 0x01 :
- Param_Info1("RAW?");
- Skip_B1( "Unknown");
- break;
- default :
- Skip_B1( "Unknown");
- }
- }
- break;
- default :
- Skip_B2( "Unknown");
- }
- }
- break;
- default :
- Skip_B3( "Unknown");
- }
- }
- break;
- default :
- Skip_B4( "Unknown");
- }
- }
- break;
- default :
- Skip_B5( "Private");
- }
- }
- break;
- default :
- Skip_B6( "Private");
- }
- }
- break;
- default :
- Skip_B7( "Unknown");
- }
-}
-#endif //MEDIAINFO_TRACE
-
-//---------------------------------------------------------------------------
-void File_Mxf::Skip_UL(const char* Name)
-{
- #ifdef MEDIAINFO_MINIMIZE_SIZE
- Skip_UUID();
- #else
- int128u Value;
- Get_UL(Value, Name, NULL);
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Get_UMID(int256u &Value, const char* Name)
-{
- Element_Name(Name);
-
- //Parsing
- Get_UUID (Value.hi, "Fixed");
- Get_UUID (Value.lo, "UUID"); Element_Info1(Ztring().From_UUID(Value.lo));
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Skip_UMID()
-{
- //Parsing
- Skip_UUID( "Fixed");
- Info_UUID(Data, "UUID"); Element_Info1(Ztring().From_UUID(Data));
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Get_Timestamp(Ztring &Value)
-{
- //Parsing
- int16u Year;
- int8u Month, Day, Hours, Minutes, Seconds, Milliseconds;
- Get_B2 (Year, "Year");
- Get_B1 (Month, "Month");
- Get_B1 (Day, "Day");
- Get_B1 (Hours, "Hours");
- Get_B1 (Minutes, "Minutes");
- Get_B1 (Seconds, "Seconds");
- Get_B1 (Milliseconds, "Milliseconds/4"); Param_Info2(Milliseconds*4, " ms");
- Value.From_Number(Year);
- Value+=__T('-');
- Ztring Temp;
- Temp.From_Number(Month);
- if (Temp.size()<2)
- Temp.insert(0, 1, __T('0'));
- Value+=Temp;
- Value+=__T('-');
- Temp.From_Number(Day);
- if (Temp.size()<2)
- Temp.insert(0, 1, __T('0'));
- Value+=Temp;
- Value+=__T(' ');
- Temp.From_Number(Hours);
- if (Temp.size()<2)
- Temp.insert(0, 1, __T('0'));
- Value+=Temp;
- Value+=__T(':');
- Temp.From_Number(Minutes);
- if (Temp.size()<2)
- Temp.insert(0, 1, __T('0'));
- Value+=Temp;
- Value+=__T(':');
- Temp.From_Number(Seconds);
- if (Temp.size()<2)
- Temp.insert(0, 1, __T('0'));
- Value+=Temp;
- Value+=__T('.');
- Temp.From_Number(Milliseconds*4);
- if (Temp.size()<3)
- Temp.insert(0, 3-Temp.size(), __T('0'));
- Value+=Temp;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Skip_Timestamp()
-{
- //Parsing
- Skip_B2( "Year");
- Skip_B1( "Month");
- Skip_B1( "Day");
- Skip_B1( "Hours");
- Skip_B1( "Minutes");
- Skip_B1( "Seconds");
- Info_B1(Milliseconds, "Milliseconds/4"); Param_Info2(Milliseconds*4, " ms");
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Info_Timestamp()
-{
- //Parsing
- Info_B2(Year, "Year");
- Info_B1(Month, "Month");
- Info_B1(Day, "Day");
- Info_B1(Hours, "Hours");
- Info_B1(Minutes, "Minutes");
- Info_B1(Seconds, "Seconds");
- Info_B1(Milliseconds, "Milliseconds/4"); Param_Info2(Milliseconds*4, " ms");
- Element_Info1(Ztring::ToZtring(Year )+__T('-')+
- Ztring::ToZtring(Month )+__T('-')+
- Ztring::ToZtring(Day )+__T(' ')+
- Ztring::ToZtring(Hours )+__T(':')+
- Ztring::ToZtring(Minutes )+__T(':')+
- Ztring::ToZtring(Seconds )+__T('.')+
- Ztring::ToZtring(Milliseconds*4) );
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Get_BER(int64u &Value, const char* Name)
-{
- int8u Length;
- Get_B1(Length, Name);
- if (Length<0x80)
- {
- Value=Length; //1-byte
- return;
- }
-
- Length&=0x7F;
- switch (Length)
- {
- case 1 :
- {
- int8u Length1;
- Get_B1(Length1, Name);
- Value=Length1;
- break;
- }
- case 2 :
- {
- int16u Length2;
- Get_B2(Length2, Name);
- Value=Length2;
- break;
- }
- case 3 :
- {
- int32u Length3;
- Get_B3(Length3, Name);
- Value=Length3;
- break;
- }
- case 4 :
- {
- int32u Length4;
- Get_B4(Length4, Name);
- Value=Length4;
- break;
- }
- case 5 :
- {
- int64u Length5;
- Get_B5(Length5, Name);
- Value=Length5;
- break;
- }
- case 6 :
- {
- int64u Length6;
- Get_B6(Length6, Name);
- Value=Length6;
- break;
- }
- case 7 :
- {
- int64u Length7;
- Get_B7(Length7, Name);
- Value=Length7;
- break;
- }
- case 8 :
- {
- int64u Length8;
- Get_B8(Length8, Name);
- Value=Length8;
- break;
- }
- default:Value=(int64u)-1; //Problem
- }
-}
-
-//***************************************************************************
-// Parsers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- if ((Descriptor->second.EssenceCompression.hi&0xFFFFFFFFFFFFFF00LL)!=0x060E2B3404010100LL || (Descriptor->second.EssenceCompression.lo&0xFF00000000000000LL)!=0x0400000000000000LL)
- return ChooseParser__FromEssenceContainer (Essence, Descriptor);
-
- int8u Code2=(int8u)((Descriptor->second.EssenceCompression.lo&0x00FF000000000000LL)>>48);
- int8u Code3=(int8u)((Descriptor->second.EssenceCompression.lo&0x0000FF0000000000LL)>>40);
- int8u Code4=(int8u)((Descriptor->second.EssenceCompression.lo&0x000000FF00000000LL)>>32);
- int8u Code5=(int8u)((Descriptor->second.EssenceCompression.lo&0x00000000FF000000LL)>>24);
- int8u Code6=(int8u)((Descriptor->second.EssenceCompression.lo&0x0000000000FF0000LL)>>16);
- int8u Code7=(int8u)((Descriptor->second.EssenceCompression.lo&0x000000000000FF00LL)>> 8);
-
- switch (Code2)
- {
- case 0x01 : //Picture
- switch (Code3)
- {
- case 0x02 : //Coding characteristics
- switch (Code4)
- {
- case 0x01 : //Uncompressed Picture Coding
- switch (Code5)
- {
- case 0x01 : return ChooseParser_Raw(Essence, Descriptor);
- case 0x7F : return ChooseParser_RV24(Essence, Descriptor);
- default : return;
- }
- case 0x02 : //Compressed coding
- switch (Code5)
- {
- case 0x01 : //MPEG Compression
- switch (Code6)
- {
- case 0x01 :
- case 0x02 :
- case 0x03 :
- case 0x04 :
- case 0x11 : return ChooseParser_Mpegv(Essence, Descriptor);
- case 0x20 : return ChooseParser_Mpeg4v(Essence, Descriptor);
- case 0x30 :
- case 0x31 :
- case 0x32 :
- case 0x33 :
- case 0x34 :
- case 0x35 :
- case 0x36 :
- case 0x37 :
- case 0x38 :
- case 0x39 :
- case 0x3A :
- case 0x3B :
- case 0x3C :
- case 0x3D :
- case 0x3E :
- case 0x3F : return ChooseParser_Avc(Essence, Descriptor);
- default : return;
- }
- case 0x02 : return ChooseParser_DV(Essence, Descriptor);
- case 0x03 : //Individual Picture Coding Schemes
- switch (Code6)
- {
- case 0x01 : return ChooseParser_Jpeg2000(Essence, Descriptor);
- default : return;
- }
- case 0x71 : return ChooseParser_Vc3(Essence, Descriptor);
- default : return;
- }
- default : return;
- }
- default : return;
- }
- case 0x02 : //Sound
- switch (Code3)
- {
- case 0x02 : //Coding characteristics
- switch (Code4)
- {
- case 0x01 : //Uncompressed Sound Coding
- switch (Code5)
- {
- case 0x01 :
- case 0x7F : if (Descriptor->second.ChannelCount==1) //PCM, but one file is found with Dolby E in it
- ChooseParser_ChannelGrouping(Essence, Descriptor);
- if (Descriptor->second.ChannelCount==2) //PCM, but one file is found with Dolby E in it
- ChooseParser_SmpteSt0337(Essence, Descriptor);
- default : return ChooseParser_Pcm(Essence, Descriptor);
- }
- case 0x02 : //Compressed coding
- switch (Code5)
- {
- case 0x03 : //Compressed Audio Coding
- switch (Code6)
- {
- case 0x01 : //Compandeded Audio Coding
- switch (Code7)
- {
- case 0x01 : if ((Descriptor->second.EssenceContainer.lo&0xFFFF0000)==0x02060000) //Test coherency between container and compression
- return ChooseParser_Pcm(Essence, Descriptor); //Compression is A-Law but Container is PCM, not logic, prioritizing PCM
- else
- return ChooseParser_Alaw(Essence, Descriptor);
- case 0x10 : return ChooseParser_Pcm(Essence, Descriptor); //DV 12-bit
- default : return;
- }
- case 0x02 : //SMPTE 338M Audio Coding
- switch (Code7)
- {
- case 0x01 : if (Descriptor->second.IsAes3Descriptor)
- return ChooseParser_SmpteSt0337(Essence, Descriptor);
- else
- return ChooseParser_Ac3(Essence, Descriptor);
- case 0x04 :
- case 0x05 :
- case 0x06 : if (Descriptor->second.IsAes3Descriptor)
- return ChooseParser_SmpteSt0337(Essence, Descriptor);
- else
- return ChooseParser_Mpega(Essence, Descriptor);
- case 0x1C : if (Descriptor->second.ChannelCount==1)
- return ChooseParser_ChannelGrouping(Essence, Descriptor); //Dolby E (in 2 mono streams)
- else
- return ChooseParser_SmpteSt0337(Essence, Descriptor); //Dolby E (in 1 stereo streams)
- default : return;
- }
- case 0x03 : //MPEG-2 Coding (not defined in SMPTE 338M)
- switch (Code7)
- {
- case 0x01 : return ChooseParser_Aac(Essence, Descriptor);
- default : return;
- }
- case 0x04 : //MPEG-4 Audio Coding
- switch (Code7)
- {
- case 0x01 :
- case 0x02 :
- case 0x03 :
- case 0x04 :
- case 0x05 :
- case 0x06 :
- case 0x07 :
- case 0x08 : return ChooseParser_Aac(Essence, Descriptor);
- default : return;
- }
- default : return;
- }
- default : return;
- }
- default : return;
- }
- default : return;
- }
- default : return;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser__FromEssenceContainer(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int8u Code1=(int8u)((Descriptor->second.EssenceContainer.lo&0xFF00000000000000LL)>>56);
- int8u Code2=(int8u)((Descriptor->second.EssenceContainer.lo&0x00FF000000000000LL)>>48);
- int8u Code3=(int8u)((Descriptor->second.EssenceContainer.lo&0x0000FF0000000000LL)>>40);
- int8u Code4=(int8u)((Descriptor->second.EssenceContainer.lo&0x000000FF00000000LL)>>32);
- int8u Code5=(int8u)((Descriptor->second.EssenceContainer.lo&0x00000000FF000000LL)>>24);
- int8u Code6=(int8u)((Descriptor->second.EssenceContainer.lo&0x0000000000FF0000LL)>>16);
- //int8u Code7=(int8u)((Descriptor->second.EssenceContainer.lo&0x000000000000FF00LL)>> 8);
-
- switch (Code1)
- {
- case 0x0D : //Public Use
- switch (Code2)
- {
- case 0x01 : //AAF
- switch (Code3)
- {
- case 0x03 : //Essence Container Application
- switch (Code4)
- {
- case 0x01 : //MXF EC Structure version
- switch (Code5)
- {
- case 0x02 : //Essence container kind
- switch (Code6)
- {
- case 0x01 : switch(Descriptor->second.StreamKind)
- {
- case Stream_Video : return ChooseParser_Mpegv(Essence, Descriptor);
- case Stream_Audio : return ChooseParser_SmpteSt0331(Essence, Descriptor);
- default : return;
- }
- case 0x02 : return; //DV
- case 0x05 : return ChooseParser_Raw(Essence, Descriptor);
- case 0x06 : if (Descriptor->second.ChannelCount==1) //PCM, but one file is found with Dolby E in it
- ChooseParser_ChannelGrouping(Essence, Descriptor);
- if (Descriptor->second.ChannelCount==2) //PCM, but one file is found with Dolby E in it
- ChooseParser_SmpteSt0337(Essence, Descriptor);
- return ChooseParser_Pcm(Essence, Descriptor);
- case 0x04 : return; //MPEG ES mappings with Stream ID
- case 0x0A : return ChooseParser_Alaw(Essence, Descriptor);
- case 0x0C : return ChooseParser_Jpeg2000(Essence, Descriptor);
- case 0x10 : return ChooseParser_Avc(Essence, Descriptor);
- case 0x11 : return ChooseParser_Vc3(Essence, Descriptor);
- default : return;
- }
- default : return;
- }
- default : return;
- }
- default : return;
- }
- default : return;
- }
- case 0x0E : //Private Use
- switch (Code2)
- {
- case 0x04 : //Avid
- switch (Code3)
- {
- case 0x03 : //Essence Container Application
- switch (Code4)
- {
- case 0x01 : //MXF EC Structure version
- switch (Code5)
- {
- case 0x02 : //Essence container kind
- switch (Code6)
- {
- case 0x06 : return ChooseParser_Vc3(Essence, Descriptor);
- default : return;
- }
- default : return;
- }
- default : return;
- }
- default : return;
- }
- default : return;
- }
- default : return;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser__FromEssence(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare3=Code.lo>>32;
-
- switch (Code_Compare3)
- {
- case Elements::GenericContainer_Aaf3 : return ChooseParser__Aaf(Essence, Descriptor);
- case Elements::GenericContainer_Avid3 : return ChooseParser__Avid(Essence, Descriptor);
- case Elements::GenericContainer_Sony3 : return ChooseParser__Sony(Essence, Descriptor);
- default : return;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser__Aaf(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_1=Code_Compare4>>24;
-
- switch (Code_Compare4_1)
- {
- case 0x05 : //CP Picture
- ChooseParser__Aaf_CP_Picture(Essence, Descriptor);
- break;
- case 0x06 : //CP Sound
- ChooseParser__Aaf_CP_Sound(Essence, Descriptor);
- break;
- case 0x07 : //CP Data
- ChooseParser__Aaf_CP_Data(Essence, Descriptor);
- break;
- case 0x14 : //MXF in MXF?
- ChooseParser__Aaf_14(Essence, Descriptor);
- break;
- case 0x15 : //CP Picture
- ChooseParser__Aaf_GC_Picture(Essence, Descriptor);
- break;
- case 0x16 : //CP Sound
- ChooseParser__Aaf_GC_Sound(Essence, Descriptor);
- break;
- case 0x17 : //CP Data
- ChooseParser__Aaf_GC_Data(Essence, Descriptor);
- break;
- case 0x18 : //CP Compound
- ChooseParser__Aaf_GC_Compound(Essence, Descriptor);
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser__Avid(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_1=Code_Compare4>>24;
-
- switch (Code_Compare4_1)
- {
- case 0x15 : //CP Picture
- ChooseParser__Avid_Picture(Essence, Descriptor);
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x05, SMPTE 386M
-void File_Mxf::ChooseParser__Aaf_CP_Picture(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_3=(int8u)(Code_Compare4>>8);
-
- Essences[Code_Compare4].StreamKind=Stream_Video;
- Essences[Code_Compare4].StreamPos=Code_Compare4&0x000000FF;
-
- switch (Code_Compare4_3)
- {
- case 0x01 : //D-10 Video, SMPTE 386M
- ChooseParser_Mpegv(Essence, Descriptor);
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser__Sony(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_1=Code_Compare4>>24;
-
- switch (Code_Compare4_1)
- {
- case 0x15 : //CP Picture
- ChooseParser__Sony_Picture(Essence, Descriptor);
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x06, SMPTE 386M
-void File_Mxf::ChooseParser__Aaf_CP_Sound(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_3=(int8u)(Code_Compare4>>8);
-
- Essences[Code_Compare4].StreamKind=Stream_Audio;
- Essences[Code_Compare4].StreamPos=Code_Compare4&0x000000FF;
-
- switch (Code_Compare4_3)
- {
- case 0x10 : //D-10 Audio, SMPTE 386M
- ChooseParser_SmpteSt0331(Essence, Descriptor);
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x07, SMPTE 386M
-void File_Mxf::ChooseParser__Aaf_CP_Data(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
-}
-
-//---------------------------------------------------------------------------
-// 0x14
-void File_Mxf::ChooseParser__Aaf_14(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_3=(int8u)(Code_Compare4>>8);
-
- switch (Code_Compare4_3)
- {
- case 0x01 : //MXF in MXF?
- Essence->second.Parsers.push_back(new File_Mxf());
- break;
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x15
-void File_Mxf::ChooseParser__Aaf_GC_Picture(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_3=(int8u)(Code_Compare4>>8);
-
- Essences[Code_Compare4].StreamKind=Stream_Video;
- Essences[Code_Compare4].StreamPos=Code_Compare4&0x000000FF;
-
- switch (Code_Compare4_3)
- {
- case 0x01 : //RV24
- ChooseParser_RV24(Essence, Descriptor);
- break;
- case 0x02 : //Raw video
- ChooseParser_Raw(Essence, Descriptor);
- break;
- case 0x05 : //SMPTE 381M, Frame wrapped
- ChooseParser_Mpegv(Essence, Descriptor); //Trying...
- Essences[Code_Compare4].Infos["Format_Settings_Wrapping"]=__T("Frame");
- DataMustAlwaysBeComplete=true;
- break;
- case 0x06 : //SMPTE 381M, Clip wrapped
- ChooseParser_Mpegv(Essence, Descriptor); //Trying...
- Essences[Code_Compare4].Infos["Format_Settings_Wrapping"]=__T("Clip");
- break;
- case 0x07 : //SMPTE 381M, Custom wrapped
- ChooseParser_Mpegv(Essence, Descriptor); //Trying...
- Essences[Code_Compare4].Infos["Format_Settings_Wrapping"]=__T("Custom");
- break;
- case 0x08 : //JPEG 2000
- ChooseParser_Jpeg2000(Essence, Descriptor);
- break;
- case 0x0D : //VC-3
- ChooseParser_Vc3(Essence, Descriptor);
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x16
-void File_Mxf::ChooseParser__Aaf_GC_Sound(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_3=(int8u)(Code_Compare4>>8);
-
- Essences[Code_Compare4].StreamKind=Stream_Audio;
- Essences[Code_Compare4].StreamPos=Code_Compare4&0x000000FF;
-
- switch (Code_Compare4_3)
- {
- case 0x01 : //BWF (PCM)
- case 0x02 : //BWF (PCM)
- case 0x03 : //DV Audio (PCM)
- case 0x04 : //P2 Audio (PCM)
- ChooseParser_Pcm(Essence, Descriptor);
- break;
- case 0x05 : //MPEG Audio
- ChooseParser_Mpega(Essence, Descriptor);
- break;
- case 0x08 : //A-law, Frame wrapped
- ChooseParser_Alaw(Essence, Descriptor);
- Essences[Code_Compare4].Infos["Format_Settings_Wrapping"]=__T("Frame");
- DataMustAlwaysBeComplete=true;
- break;
- case 0x09 : //A-law, Clip wrapped
- ChooseParser_Alaw(Essence, Descriptor);
- Essences[Code_Compare4].Infos["Format_Settings_Wrapping"]=__T("Clip");
- break;
- case 0x0A : //A-law, Custom wrapped
- ChooseParser_Alaw(Essence, Descriptor);
- Essences[Code_Compare4].Infos["Format_Settings_Wrapping"]=__T("Custom");
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x17
-void File_Mxf::ChooseParser__Aaf_GC_Data(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_3=(int8u)(Code_Compare4>>8);
-
- switch (Code_Compare4_3)
- {
- case 0x01 : //VBI, SMPTE ST 436
- Essence->second.Parsers.push_back(new File__Analyze());
- break;
- case 0x02 : //Ancillary
- if (!Ancillary)
- Ancillary=new File_Ancillary();
- Essence->second.Parsers.push_back(Ancillary);
- Ancillary_IsBinded=true;
- break;
- case 0x08 : //Line Wrapped Data Element, SMPTE 384M
- case 0x09 : //Line Wrapped VANC Data Element, SMPTE 384M
- case 0x0A : //Line Wrapped HANC Data Element, SMPTE 384M
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x18
-void File_Mxf::ChooseParser__Aaf_GC_Compound(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_3=(int8u)(Code_Compare4>>8);
-
- Essences[Code_Compare4].StreamKind=Stream_Video; //Default to video, audio will be merge later
- Essences[Code_Compare4].StreamPos=Code_Compare4&0x000000FF;
-
- switch (Code_Compare4_3)
- {
- case 0x01 : //DV
- case 0x02 : //DV
- ChooseParser_DV(Essence, Descriptor);
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x15
-void File_Mxf::ChooseParser__Avid_Picture(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
- int8u Code_Compare4_3=(int8u)(Code_Compare4>>8);
-
- Essences[Code_Compare4].StreamKind=Stream_Video;
- Essences[Code_Compare4].StreamPos=Code_Compare4&0x000000FF;
-
- switch (Code_Compare4_3)
- {
- case 0x05 : //VC-1, Frame wrapped
- ChooseParser_Vc3(Essence, Descriptor);
- Essences[Code_Compare4].Infos["Format_Settings_Wrapping"]=__T("Frame");
- DataMustAlwaysBeComplete=true;
- break;
- case 0x06 : //VC-1, Clip wrapped
- ChooseParser_Vc3(Essence, Descriptor);
- Essences[Code_Compare4].Infos["Format_Settings_Wrapping"]=__T("Clip");
- break;
- case 0x07 : //VC-1, Custom wrapped
- ChooseParser_Vc3(Essence, Descriptor);
- Essences[Code_Compare4].Infos["Format_Settings_Wrapping"]=__T("Custom");
- break;
- default : //Unknown
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-// 0x15
-void File_Mxf::ChooseParser__Sony_Picture(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- int32u Code_Compare4=(int32u)Code.lo;
-
- Essences[Code_Compare4].StreamKind=Stream_Video;
- Essences[Code_Compare4].StreamPos=Code_Compare4&0x000000FF;
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Avc(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Video;
-
- //Filling
- #if defined(MEDIAINFO_AVC_YES)
- File_Avc* Parser=new File_Avc;
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "AVC");
- #endif
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_DV(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Video;
-
- //Filling
- #if defined(MEDIAINFO_DVDIF_YES)
- File_DvDif* Parser=new File_DvDif;
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "DV");
- #endif
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Mpeg4v(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Video;
-
- //Filling
- #if defined(MEDIAINFO_MPEG4V_YES)
- File_Mpeg4v* Parser=new File_Mpeg4v;
- Parser->OnlyVOP();
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "MPEG-4 Visual");
- #endif
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Mpegv(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Video;
-
- //Filling
- #if defined(MEDIAINFO_MPEGV_YES)
- File_Mpegv* Parser=new File_Mpegv();
- Parser->Ancillary=&Ancillary;
- #if MEDIAINFO_ADVANCED
- Parser->InitDataNotRepeated_Optional=true;
- #endif // MEDIAINFO_ADVANCED
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer)
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- #else
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "MPEG Video");
- #endif
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Raw(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Video;
-
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "YUV");
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_RV24(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Video;
-
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "RV24");
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Vc3(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Video;
-
- //Filling
- #if defined(MEDIAINFO_VC3_YES)
- File_Vc3* Parser=new File_Vc3;
- if (Descriptor!=Descriptors.end())
- Parser->FrameRate=Descriptor->second.SampleRate;
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "VC-3");
- #endif
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Aac(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Audio;
-
- //Filling
- #if defined(MEDIAINFO_AAC_YES)
- File_Aac* Parser=new File_Aac;
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "AAC");
- #endif
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Ac3(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Audio;
-
- //Filling
- #if defined(MEDIAINFO_AC3_YES)
- File_Ac3* Parser=new File_Ac3;
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "AC-3");
- #endif
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Alaw(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Audio;
-
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "Alaw");
- Essence->second.Parsers.push_back(Parser);
-}
-
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_ChannelGrouping(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Audio;
-
- //Creating the parser
- if (!((Essence->second.StreamPos-(StreamPos_StartAtOne?1:0))%2 && Essences[Essence->first-1].Parsers.size()<=1))
- {
- File_ChannelGrouping* Parser;
- if ((Essence->second.StreamPos-(StreamPos_StartAtOne?1:0))%2) //If the first half-stream was already rejected, don't try this one
- {
- essences::iterator FirstChannel=Essences.find(Essence->first-1);
- if (FirstChannel==Essences.end() || !FirstChannel->second.IsChannelGrouping)
- return ChooseParser_Pcm(Essence, Descriptor); //Not a channel grouping
-
- Parser=new File_ChannelGrouping;
- Parser->Channel_Pos=1;
- Parser->Common=((File_ChannelGrouping*)Essences[Essence->first-1].Parsers[0])->Common;
- Parser->StreamID=Essence->second.TrackID-1;
- }
- else
- {
- Parser=new File_ChannelGrouping;
- Parser->Channel_Pos=0;
- if (Descriptor!=Descriptors.end() && Descriptor->second.Infos.find("SamplingRate")!=Descriptor->second.Infos.end())
- Parser->SamplingRate=Descriptor->second.Infos["SamplingRate"].To_int16u();
- Essence->second.IsChannelGrouping=true;
- }
- Parser->Channel_Total=2;
- if (Descriptor!=Descriptors.end())
- {
- Parser->BitDepth=(int8u)(Descriptor->second.BlockAlign<=4?(Descriptor->second.BlockAlign*8):(Descriptor->second.BlockAlign*4)); //In one file, BlockAlign is size of the aggregated channelgroup
- if (Descriptor->second.Infos.find("Format_Settings_Endianness")!=Descriptor->second.Infos.end())
- {
- if (Descriptor->second.Infos["Format_Settings_Endianness"]==__T("Big"))
- Parser->Endianness='B';
- else
- Parser->Endianness='L';
- }
- else
- Parser->Endianness='L';
- }
- else
- Parser->Endianness='L';
-
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer)
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
-
- Essence->second.Parsers.push_back(Parser);
- }
-
- //Adding PCM
- ChooseParser_Pcm(Essence, Descriptor);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Mpega(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Audio;
-
- //Filling
- #if defined(MEDIAINFO_MPEGA_YES)
- File_Mpega* Parser=new File_Mpega;
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Audio);
- Parser->Fill(Stream_Audio, 0, Audio_Format, "MPEG Audio");
- #endif
- Essence->second.Parsers.push_back(Parser);
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Pcm(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Audio;
-
- int8u Channels=0;
- if (Descriptor!=Descriptors.end())
- {
- if (Descriptor->second.Infos.find("Channel(s)")!=Descriptor->second.Infos.end())
- Channels=Descriptor->second.Infos["Channel(s)"].To_int8u();
-
- //Handling some buggy cases
- if (Channels>1 && Descriptor->second.BlockAlign!=(int16u)-1 && Descriptor->second.QuantizationBits!=(int32u)-1)
- {
- if (((int32u)Descriptor->second.BlockAlign)*8==Descriptor->second.QuantizationBits)
- Descriptor->second.BlockAlign*=Channels; //BlockAlign is by channel, it should be by block.
- }
- }
-
- //Creating the parser
- #if defined(MEDIAINFO_PCM_YES)
- File_Pcm* Parser=new File_Pcm;
- if (Descriptor!=Descriptors.end())
- {
- if (Channels)
- Parser->Channels=Channels;
- if (Parser->Channels && Descriptor->second.BlockAlign!=(int16u)-1)
- Parser->BitDepth=(int8u)(Descriptor->second.BlockAlign*8/Parser->Channels);
- else if (Descriptor->second.QuantizationBits<256)
- Parser->BitDepth=(int8u)Descriptor->second.QuantizationBits;
- else if (Descriptor->second.Infos.find("BitDepth")!=Descriptor->second.Infos.end())
- Parser->BitDepth=Descriptor->second.Infos["BitDepth"].To_int8u();
- //Handling of quantization bits not being same as BlockAlign/Channels
- if (Channels && Descriptor->second.BlockAlign!=(int16u)-1 && Descriptor->second.QuantizationBits!=(int32u)-1)
- {
- if (Channels*Descriptor->second.QuantizationBits!=((int32u)Descriptor->second.BlockAlign)*8)
- {
- //Moving Bit depth info to the "Significant" piece of etadata
- if (Descriptor->second.QuantizationBits<256)
- Parser->BitDepth_Significant=(int8u)Descriptor->second.QuantizationBits;
- else
- Parser->BitDepth_Significant=Parser->BitDepth;
- Parser->BitDepth=((int8u)Descriptor->second.BlockAlign)*8/Channels;
- }
- }
- if (Descriptor->second.Infos.find("Format_Settings_Endianness")!=Descriptor->second.Infos.end())
- {
- if (Descriptor->second.Infos["Format_Settings_Endianness"]==__T("Big"))
- Parser->Endianness='B';
- else
- Parser->Endianness='L';
- }
- else
- Parser->Endianness='L';
- }
- else
- Parser->Endianness='L';
-
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer)
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
-
- Essence->second.Parsers.push_back(Parser);
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_SmpteSt0331(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Audio;
-
- //Filling
- #if defined(MEDIAINFO_SMPTEST0331_YES)
- File_SmpteSt0331* Parser=new File_SmpteSt0331;
- if (Descriptor!=Descriptors.end() && Descriptor->second.QuantizationBits!=(int32u)-1)
- Parser->QuantizationBits=Descriptor->second.QuantizationBits;
-
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer)
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
-
- Essence->second.Parsers.push_back(Parser);
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_SmpteSt0337(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Audio;
-
- //Filling
- #if defined(MEDIAINFO_SMPTEST0337_YES)
- File_SmpteSt0337* Parser=new File_SmpteSt0337;
- if (Descriptor!=Descriptors.end())
- {
- if (Descriptor->second.BlockAlign<64)
- Parser->Container_Bits=(int8u)(Descriptor->second.BlockAlign*4);
- else if (Descriptor->second.QuantizationBits!=(int32u)-1)
- Parser->Container_Bits=(int8u)Descriptor->second.QuantizationBits;
- if (Descriptor->second.Infos.find("Format_Settings_Endianness")!=Descriptor->second.Infos.end())
- {
- if (Descriptor->second.Infos["Format_Settings_Endianness"]==__T("Big"))
- Parser->Endianness='B';
- else
- Parser->Endianness='L';
- }
- else
- Parser->Endianness='L';
- }
- else
- Parser->Endianness='L';
- Parser->Aligned=true;
-
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer)
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
-
- Essence->second.Parsers.push_back(Parser);
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::ChooseParser_Jpeg2000(const essences::iterator &Essence, const descriptors::iterator &Descriptor)
-{
- Essence->second.StreamKind=Stream_Video;
-
- //Filling
- #if defined(MEDIAINFO_JPEG_YES)
- File_Jpeg* Parser=new File_Jpeg;
- Parser->StreamKind=Stream_Video;
- if (Descriptor!=Descriptors.end())
- {
- Parser->Interlaced=Descriptor->second.ScanType==__T("Interlaced");
- #if MEDIAINFO_DEMUX
- if (Parser->Interlaced)
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- }
- #endif //MEDIAINFO_DEMUX
- }
- #else
- //Filling
- File__Analyze* Parser=new File_Unknown();
- Open_Buffer_Init(Parser);
- Parser->Stream_Prepare(Stream_Video);
- Parser->Fill(Stream_Video, 0, Video_Format, "JPEG 2000");
- #endif
- Essence->second.Parsers.push_back(Parser);
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mxf::Subsampling_Compute(descriptors::iterator Descriptor)
-{
- if (Descriptor==Descriptors.end() || (Descriptor->second.SubSampling_Horizontal==(int32u)-1 || Descriptor->second.SubSampling_Vertical==(int32u)-1))
- return;
-
- switch (Descriptor->second.SubSampling_Horizontal)
- {
- case 1 : switch (Descriptor->second.SubSampling_Vertical)
- {
- case 1 : Descriptor->second.Infos["ChromaSubsampling"]=__T("4:4:4"); return;
- default: Descriptor->second.Infos["ChromaSubsampling"].clear(); return;
- }
- case 2 : switch (Descriptor->second.SubSampling_Vertical)
- {
- case 1 : Descriptor->second.Infos["ChromaSubsampling"]=__T("4:2:2"); return;
- case 2 : Descriptor->second.Infos["ChromaSubsampling"]=__T("4:2:0"); return;
- default: Descriptor->second.Infos["ChromaSubsampling"].clear(); return;
- }
- case 4 : switch (Descriptor->second.SubSampling_Vertical)
- {
- case 1 : Descriptor->second.Infos["ChromaSubsampling"]=__T("4:1:1"); return;
- default: Descriptor->second.Infos["ChromaSubsampling"].clear(); return;
- }
- default: return;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Locators_CleanUp()
-{
- //Testing locators (TODO: check if this is still useful)
- if (Locators.size()==1)
- {
- Locators.clear();
- return;
- }
-
- locators::iterator Locator=Locators.begin();
- while (Locator!=Locators.end())
- {
- bool IsReferenced=false;
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- for (size_t Pos=0; Pos<Descriptor->second.Locators.size(); Pos++)
- if (Locator->first==Descriptor->second.Locators[Pos])
- IsReferenced=true;
- if (!IsReferenced)
- {
- //Deleting current locator
- locators::iterator LocatorToDelete=Locator;
- ++Locator;
- Locators.erase(LocatorToDelete);
- }
- else
- ++Locator;
- }
-
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::Locators_Test()
-{
- Locators_CleanUp();
-
- if (!Locators.empty() && ReferenceFiles==NULL)
- {
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- for (locators::iterator Locator=Locators.begin(); Locator!=Locators.end(); ++Locator)
- if (!Locator->second.IsTextLocator && !Locator->second.EssenceLocator.empty())
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.FileNames.push_back(Locator->second.EssenceLocator);
- ReferenceFile.StreamKind=Locator->second.StreamKind;
- ReferenceFile.StreamPos=Locator->second.StreamPos;
- if (Locator->second.LinkedTrackID!=(int32u)-1)
- ReferenceFile.StreamID=Locator->second.LinkedTrackID;
- else if (!Retrieve(Locator->second.StreamKind, Locator->second.StreamPos, General_ID).empty())
- ReferenceFile.StreamID=Retrieve(Locator->second.StreamKind, Locator->second.StreamPos, General_ID).To_int64u();
- ReferenceFile.Delay=float64_int64s(DTS_Delay*1000000000);
-
- //Special cases
- if (Locator->second.StreamKind==Stream_Video)
- {
- //Searching the corresponding frame rate
- for (descriptors::iterator Descriptor=Descriptors.begin(); Descriptor!=Descriptors.end(); ++Descriptor)
- for (size_t LocatorPos=0; LocatorPos<Descriptor->second.Locators.size(); LocatorPos++)
- if (Descriptor->second.Locators[LocatorPos]==Locator->first)
- ReferenceFile.FrameRate=Descriptor->second.SampleRate;
- }
-
-
- if (ReferenceFile.StreamID!=(int32u)-1)
- {
- //Descriptive Metadata
- std::vector<int128u> DMScheme1s_List;
-
- for (dmsegments::iterator DMSegment=DMSegments.begin(); DMSegment!=DMSegments.end(); ++DMSegment)
- for (size_t Pos=0; Pos<DMSegment->second.TrackIDs.size(); Pos++)
- if (DMSegment->second.TrackIDs[Pos]==ReferenceFile.StreamID)
- DMScheme1s_List.push_back(DMSegment->second.Framework);
-
- for (size_t Pos=0; Pos<DMScheme1s_List.size(); Pos++)
- {
- dmscheme1s::iterator DMScheme1=DMScheme1s.find(DMScheme1s_List[Pos]);
- if (DMScheme1!=DMScheme1s.end())
- {
- ReferenceFile.Infos["Language"]=DMScheme1->second.PrimaryExtendedSpokenLanguage;
- }
- }
- }
-
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- else
- {
- Fill(Stream_General, 0, "UnsupportedSources", Locator->second.EssenceLocator);
- (*Stream_More)[Stream_General][0](Ztring().From_Local("UnsupportedSources"), Info_Options)=__T("N NT");
- }
-
- ReferenceFiles->ParseReferences();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mxf::TryToFinish()
-{
- Frame_Count_NotParsedIncluded=(int64u)-1;
-
- if (!IsSub && IsParsingEnd && File_Size!=(int64u)-1 && Config->ParseSpeed<1 && IsParsingMiddle_MaxOffset==(int64u)-1 && File_Size/2>0x4000000) //TODO: 64 MB by default;
- {
- IsParsingMiddle_MaxOffset=File_Size/2+0x4000000; //TODO: 64 MB by default;
- GoTo(File_Size/2);
- Open_Buffer_Unsynch();
- IsParsingEnd=false;
- Streams_Count=(size_t)-1;
- return;
- }
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_MXF_*
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mxf.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mxf.h
deleted file mode 100644
index 0aa88f9dc..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Mxf.h
+++ /dev/null
@@ -1,970 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Mxf files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_MxfH
-#define MediaInfo_File_MxfH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#if defined(MEDIAINFO_ANCILLARY_YES)
- #include <MediaInfo/Multiple/File_Ancillary.h>
-#endif //defined(MEDIAINFO_ANCILLARY_YES)
-#include "MediaInfo/MediaInfo_Internal.h"
-#include <vector>
-#include <set>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_Mxf
-//***************************************************************************
-
-class File_Mxf : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Mxf();
- ~File_Mxf();
-
- //int256u
- class int256u
- {
- public:
- // Binary correct representation of signed 256bit integer
- int128u lo;
- int128u hi;
-
- int256u()
- {
- lo.lo=0;
- lo.hi=0;
- hi.lo=0;
- hi.hi=0;
- }
- };
-
-
-protected :
- //Streams management
- void Streams_Accept();
- void Streams_Fill ();
- void Streams_Finish ();
- void Streams_Finish_Preface (const int128u PrefaceUID);
- void Streams_Finish_ContentStorage (const int128u ContentStorageUID);
- void Streams_Finish_Package (const int128u PackageUID);
- void Streams_Finish_Track (const int128u TrackUID);
- void Streams_Finish_Essence (int32u EssenceUID, int128u TrackUID);
- void Streams_Finish_Descriptor (const int128u DescriptorUID, const int128u PackageUID);
- void Streams_Finish_Locator (const int128u DescriptorUID, const int128u LocatorUID);
- void Streams_Finish_Component (const int128u ComponentUID, float64 EditRate, int32u TrackID, int64u Origin);
- void Streams_Finish_Identification (const int128u IdentificationUID);
- void Streams_Finish_CommercialNames ();
-
- //Buffer - Global
- void Read_Buffer_Init ();
- void Read_Buffer_Continue ();
- void Read_Buffer_AfterParsing ();
- void Read_Buffer_Unsynched();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Per element
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void MCAChannelID();
- void MCALabelDictionaryID();
- void MCATagSymbol();
- void MCATagName();
- void GroupOfSoundfieldGroupsLinkID();
- void MCALinkID();
- void SoundfieldGroupLinkID();
- void MCAPartitionKind();
- void MCAPartitionNumber();
- void MCATitle();
- void MCATitleVersion();
- void MCATitleSubVersion();
- void MCAEpisode();
- void MCAAudioContentKind();
- void MCAAudioElementKind();
- void Filler();
- void Filler01() {Filler();}
- void Filler02() {Filler();}
- void TerminatingFiller();
- void XmlDocumentText();
- void SubDescriptors();
- void Sequence();
- void SourceClip();
- void TimecodeComponent();
- void ContentStorage();
- void EssenceContainerData();
- void CDCIEssenceDescriptor();
- void RGBAEssenceDescriptor();
- void Preface();
- void Identification();
- void NetworkLocator();
- void TextLocator();
- void StereoscopicPictureSubDescriptor();
- void MaterialPackage();
- void SourcePackage();
- void EventTrack();
- void StaticTrack();
- void Track();
- void DMSegment();
- void GenericSoundEssenceDescriptor();
- void GenericDataEssenceDescriptor();
- void MultipleDescriptor();
- void DMSourceClip();
- void AES3PCMDescriptor();
- void WaveAudioDescriptor();
- void MPEG2VideoDescriptor();
- void JPEG2000PictureSubDescriptor();
- void VbiPacketsDescriptor();
- void AncPacketsDescriptor();
- void PackageMarkerObject();
- void ApplicationPlugInObject();
- void ApplicationReferencedObject();
- void MCALabelSubDescriptor();
- void AudioChannelLabelSubDescriptor();
- void SoundfieldGroupLabelSubDescriptor();
- void GroupOfSoundfieldGroupsLabelSubDescriptor();
- void OpenIncompleteHeaderPartition();
- void ClosedIncompleteHeaderPartition();
- void OpenCompleteHeaderPartition();
- void ClosedCompleteHeaderPartition();
- void OpenIncompleteBodyPartition();
- void ClosedIncompleteBodyPartition();
- void OpenCompleteBodyPartition();
- void ClosedCompleteBodyPartition();
- void OpenIncompleteFooterPartition();
- void ClosedIncompleteFooterPartition();
- void OpenCompleteFooterPartition();
- void ClosedCompleteFooterPartition();
- void Primer();
- void IndexTableSegment();
- void RandomIndexMetadata();
- void SDTI_SystemMetadataPack();
- void SDTI_PackageMetadataSet();
- void SDTI_PictureMetadataSet();
- void SDTI_SoundMetadataSet();
- void SDTI_DataMetadataSet();
- void SDTI_ControlMetadataSet();
- void SystemScheme1();
- void DMScheme1();
- void Omneon_010201010100();
- void Omneon_010201020100();
-
- //Common
- void GenerationInterchangeObject();
- void InterchangeObject();
- void GenericPictureEssenceDescriptor();
- void PartitionMetadata();
- void GenericTrack();
- void GenericPackage();
- void FileDescriptor();
- void StructuralComponent();
- void GenericDescriptor();
-
- //Complex types
- void AES3PCMDescriptor_AuxBitsMode(); //3D08
- void AES3PCMDescriptor_Emphasis(); //3D0D
- void AES3PCMDescriptor_BlockStartOffset(); //3D0F
- void AES3PCMDescriptor_ChannelStatusMode(); //3D10
- void AES3PCMDescriptor_FixedChannelStatusData(); //3D11
- void AES3PCMDescriptor_UserDataMode(); //3D12
- void AES3PCMDescriptor_FixedUserData(); //3D13
- void CDCIEssenceDescriptor_ComponentDepth(); //3301
- void CDCIEssenceDescriptor_HorizontalSubsampling(); //3302
- void CDCIEssenceDescriptor_ColorSiting(); //3303
- void CDCIEssenceDescriptor_BlackRefLevel(); //3304
- void CDCIEssenceDescriptor_WhiteReflevel(); //3305
- void CDCIEssenceDescriptor_ColorRange(); //3306
- void CDCIEssenceDescriptor_PaddingBits(); //3307
- void CDCIEssenceDescriptor_VerticalSubsampling(); //3308
- void CDCIEssenceDescriptor_AlphaSampleDepth(); //3309
- void CDCIEssenceDescriptor_ReversedByteOrder(); //330B
- void ContentStorage_Packages(); //1901
- void ContentStorage_EssenceContainerData(); //1902
- void DMSegment_DMFramework(); //6101
- void DMSegment_TrackIDs(); //6102
- void EssenceContainerData_LinkedPackageUID(); //2701
- void EssenceContainerData_IndexSID(); //3F06
- void EssenceContainerData_BodySID(); //3F07
- void EventTrack_EventEditRate(); //4901
- void EventTrack_EventOrigin(); //4902
- void FileDescriptor_SampleRate(); //3001
- void FileDescriptor_ContainerDuration(); //3002
- void FileDescriptor_EssenceContainer(); //3004
- void FileDescriptor_Codec(); //3005
- void FileDescriptor_LinkedTrackID(); //3006
- void InterchangeObject_InstanceUID(); //3C0A
- void GenerationInterchangeObject_GenerationUID(); //0102
- void GenericDescriptor_Locators(); //2F01
- void GenericPackage_PackageUID(); //4401
- void GenericPackage_Name(); //4402
- void GenericPackage_Tracks(); //4403
- void GenericPackage_PackageModifiedDate(); //4404
- void GenericPackage_PackageCreationDate(); //4405
- void GenericPictureEssenceDescriptor_PictureEssenceCoding();//3201
- void GenericPictureEssenceDescriptor_StoredHeight(); //3202
- void GenericPictureEssenceDescriptor_StoredWidth(); //3203
- void GenericPictureEssenceDescriptor_SampledHeight(); //3204
- void GenericPictureEssenceDescriptor_SampledWidth(); //3205
- void GenericPictureEssenceDescriptor_SampledXOffset(); //3206
- void GenericPictureEssenceDescriptor_SampledYOffset(); //3207
- void GenericPictureEssenceDescriptor_DisplayHeight(); //3208
- void GenericPictureEssenceDescriptor_DisplayWidth(); //3209
- void GenericPictureEssenceDescriptor_DisplayXOffset(); //320A
- void GenericPictureEssenceDescriptor_DisplayYOffset(); //320B
- void GenericPictureEssenceDescriptor_FrameLayout(); //320C
- void GenericPictureEssenceDescriptor_VideoLineMap(); //320D
- void GenericPictureEssenceDescriptor_AspectRatio(); //320E
- void GenericPictureEssenceDescriptor_AlphaTransparency(); //320F
- void GenericPictureEssenceDescriptor_TransferCharacteristic(); //3210
- void GenericPictureEssenceDescriptor_ImageAlignmentOffset();//3211
- void GenericPictureEssenceDescriptor_FieldDominance(); //3212
- void GenericPictureEssenceDescriptor_ImageStartOffset(); //3213
- void GenericPictureEssenceDescriptor_ImageEndOffset(); //3214
- void GenericPictureEssenceDescriptor_SignalStandard(); //3215
- void GenericPictureEssenceDescriptor_StoredF2Offset(); //3216
- void GenericPictureEssenceDescriptor_DisplayF2Offset(); //3217
- void GenericPictureEssenceDescriptor_ActiveFormatDescriptor();//3218
- void GenericPictureEssenceDescriptor_ColorPrimaries(); //3219
- void GenericPictureEssenceDescriptor_CodingEquations(); //321A
- void GenericSoundEssenceDescriptor_QuantizationBits(); //3D01
- void GenericSoundEssenceDescriptor_Locked(); //3D02
- void GenericSoundEssenceDescriptor_AudioSamplingRate(); //3D03
- void GenericSoundEssenceDescriptor_AudioRefLevel(); //3D04
- void GenericSoundEssenceDescriptor_ElectroSpatialFormulation(); //3D05
- void GenericSoundEssenceDescriptor_SoundEssenceCompression(); //3D06
- void GenericSoundEssenceDescriptor_ChannelCount(); //3D07
- void GenericSoundEssenceDescriptor_DialNorm(); //3D0C
- void GenericDataEssenceDescriptor_DataEssenceCoding(); //3E01
- void GenericTrack_TrackID(); //4801
- void GenericTrack_TrackName(); //4802
- void GenericTrack_Sequence(); //4803
- void GenericTrack_TrackNumber(); //4804
- void Identification_CompanyName(); //3C01
- void Identification_ProductName(); //3C02
- void Identification_ProductVersion(); //3C03
- void Identification_VersionString(); //3C04
- void Identification_ProductUID(); //3C05
- void Identification_ModificationDate(); //3C06
- void Identification_ToolkitVersion(); //3C07
- void Identification_Platform(); //3C08
- void Identification_ThisGenerationUID(); //3C09
- void IndexTableSegment_EditUnitByteCount(); //3F05
- void IndexTableSegment_IndexSID(); //3F06
- void IndexTableSegment_BodySID(); //3F07
- void IndexTableSegment_SliceCount(); //3F08
- void IndexTableSegment_DeltaEntryArray(); //3F09
- void IndexTableSegment_IndexEntryArray(); //3F0A
- void IndexTableSegment_IndexEditRate(); //3F0B
- void IndexTableSegment_IndexStartPosition(); //3F0C
- void IndexTableSegment_IndexDuration(); //3F0D
- void IndexTableSegment_PosTableCount(); //3F0E
- void IndexTableSegment_8002(); //8002
- void JPEG2000PictureSubDescriptor_Rsiz(); //8001
- void JPEG2000PictureSubDescriptor_Xsiz(); //8002
- void JPEG2000PictureSubDescriptor_Ysiz(); //8003
- void JPEG2000PictureSubDescriptor_XOsiz(); //8004
- void JPEG2000PictureSubDescriptor_YOsiz(); //8005
- void JPEG2000PictureSubDescriptor_XTsiz(); //8006
- void JPEG2000PictureSubDescriptor_YTsiz(); //8007
- void JPEG2000PictureSubDescriptor_XTOsiz(); //8008
- void JPEG2000PictureSubDescriptor_YTOsiz(); //8009
- void JPEG2000PictureSubDescriptor_Csiz(); //800A
- void JPEG2000PictureSubDescriptor_PictureComponentSizing(); //800B
- void JPEG2000PictureSubDescriptor_CodingStyleDefault(); //
- void JPEG2000PictureSubDescriptor_QuantizationDefault(); //
- void MultipleDescriptor_SubDescriptorUIDs(); //3F01
- void PrimaryExtendedSpokenLanguage(); //
- void SecondaryExtendedSpokenLanguage(); //
- void OriginalExtendedSpokenLanguage(); //
- void SecondaryOriginalExtendedSpokenLanguage(); //
- void RFC5646AudioLanguageCode(); //
- void MPEG2VideoDescriptor_SingleSequence(); //
- void MPEG2VideoDescriptor_ConstantBFrames(); //
- void MPEG2VideoDescriptor_CodedContentType(); //
- void MPEG2VideoDescriptor_LowDelay(); //
- void MPEG2VideoDescriptor_ClosedGOP(); //
- void MPEG2VideoDescriptor_IdenticalGOP(); //
- void MPEG2VideoDescriptor_MaxGOP(); //
- void MPEG2VideoDescriptor_BPictureCount(); //
- void MPEG2VideoDescriptor_ProfileAndLevel(); //
- void MPEG2VideoDescriptor_BitRate(); //
- void NetworkLocator_URLString(); //4001
- void Preface_LastModifiedDate(); //3B02
- void Preface_ContentStorage(); //3B03
- void Preface_Version(); //3B05
- void Preface_Identifications(); //3B06
- void Preface_ObjectModelVersion(); //3B07
- void Preface_PrimaryPackage(); //3B08
- void Preface_OperationalPattern(); //3B09
- void Preface_EssenceContainers(); //3B0A
- void Preface_DMSchemes(); //3B0B
- void RGBAEssenceDescriptor_PixelLayout(); //3401
- void RGBAEssenceDescriptor_Palette(); //3403
- void RGBAEssenceDescriptor_PaletteLayout(); //3404
- void RGBAEssenceDescriptor_ScanningDirection(); //3405
- void RGBAEssenceDescriptor_ComponentMaxRef(); //3406
- void RGBAEssenceDescriptor_ComponentMinRef(); //3407
- void RGBAEssenceDescriptor_AlphaMaxRef(); //3408
- void RGBAEssenceDescriptor_AlphaMinRef(); //3409
- void Sequence_StructuralComponents(); //1001
- void SourceClip_SourcePackageID(); //1101
- void SourceClip_SourceTrackID(); //1102
- void SourceClip_StartPosition(); //1201
- void SourcePackage_Descriptor(); //4701
- void StructuralComponent_DataDefinition(); //0201
- void StructuralComponent_Duration(); //0202
- void SystemScheme1_FrameCount(); //0101
- void SystemScheme1_TimeCodeArray(); //0102
- void SystemScheme1_ClipIDArray(); //0103
- void SystemScheme1_ExtendedClipIDArray(); //0104
- void SystemScheme1_VideoIndexArray(); //0105
- void SystemScheme1_KLVMetadataSequence(); //0106
- void SystemScheme1_SampleRate(); //3001
- void SystemScheme1_EssenceTrackNumber(); //4804
- void SystemScheme1_EssenceTrackNumberBatch(); //6801
- void SystemScheme1_ContentPackageIndexArray(); //6803
- void TextLocator_LocatorName(); //4101
- void TimecodeComponent_StartTimecode(); //1501
- void TimecodeComponent_RoundedTimecodeBase(); //1502
- void TimecodeComponent_DropFrame(); //1503
- void Track_EditRate(); //4B01
- void Track_Origin(); //4B02
- void WaveAudioDescriptor_AvgBps(); //3D09
- void WaveAudioDescriptor_BlockAlign(); //3D0A
- void WaveAudioDescriptor_SequenceOffset(); //3D0B
- void WaveAudioDescriptor_PeakEnvelopeVersion(); //3D29
- void WaveAudioDescriptor_PeakEnvelopeFormat(); //3D2A
- void WaveAudioDescriptor_PointsPerPeakValue(); //3D2B
- void WaveAudioDescriptor_PeakEnvelopeBlockSize(); //3D2C
- void WaveAudioDescriptor_PeakChannels(); //3D2D
- void WaveAudioDescriptor_PeakFrames(); //3D2E
- void WaveAudioDescriptor_PeakOfPeaksPosition(); //3D2F
- void WaveAudioDescriptor_PeakEnvelopeTimestamp(); //3D30
- void WaveAudioDescriptor_PeakEnvelopeData(); //3D31
- void WaveAudioDescriptor_ChannelAssignment(); //3D31
- void Omneon_010201010100_8001(); //8001
- void Omneon_010201010100_8003(); //8003
- void Omneon_010201020100_8002(); //8002
- void Omneon_010201020100_8003(); //8003
- void Omneon_010201020100_8004(); //8004
- void Omneon_010201020100_8005(); //8005
- void Omneon_010201020100_8006(); //8006
-
- //Basic types
- void Get_Rational(float64 &Value);
- void Skip_Rational();
- void Info_Rational();
- void Get_Timestamp (Ztring &Value);
- void Skip_Timestamp();
- void Info_Timestamp();
- void Get_UMID (int256u &Value, const char* Name);
- void Skip_UMID ();
-
- void Get_UL (int128u &Value, const char* Name, const char* (*Param) (int128u));
- void Skip_UL(const char* Name);
- void Get_BER(int64u &Value, const char* Name);
- #if MEDIAINFO_TRACE
- void Info_UL_01xx01_Items ();
- void Info_UL_02xx01_Groups ();
- void Info_UL_040101_Values ();
- #define Info_UL(_INFO, _NAME, _PARAM) int128u _INFO; Get_UL(_INFO, _NAME, _PARAM)
- #else //MEDIAINFO_TRACE
- void Info_UL_01xx01_Items () {Element_Offset+=8;};
- void Info_UL_02xx01_Groups () {Element_Offset+=8;};
- void Info_UL_040101_Values () {Element_Offset+=8;};
- #define Info_UL(_INFO, _NAME, _PARAM) int128u _INFO;
- #endif //MEDIAINFO_TRACE
-
- struct randomindexmetadata
- {
- int64u ByteOffset;
- int32u BodySID;
- };
- std::vector<randomindexmetadata> RandomIndexMetadatas;
- bool RandomIndexMetadatas_AlreadyParsed;
- std::set<int64u> PartitionPack_AlreadyParsed;
- size_t Streams_Count;
- int128u Code;
- int128u OperationalPattern;
- int128u InstanceUID;
- int64u Buffer_Begin;
- int64u Buffer_End;
- bool Buffer_End_Unlimited;
- int64u Buffer_Header_Size;
- int16u Code2;
- int16u Length2;
- int64u File_Size_Total; //Used only in Finish()
- int64u IsParsingMiddle_MaxOffset;
- bool Track_Number_IsAvailable;
- bool IsParsingEnd;
- bool IsCheckingRandomAccessTable;
- bool IsCheckingFooterPartitionAddress;
- bool FooterPartitionAddress_Jumped;
- bool PartitionPack_Parsed;
- size_t IdIsAlwaysSame_Offset;
-
- //Primer
- std::map<int16u, int128u> Primer_Values;
-
- //Preface
- struct preface
- {
- int128u PrimaryPackage;
- std::vector<int128u> Identifications;
- int128u ContentStorage;
-
- preface()
- {
- PrimaryPackage.hi=(int64u)-1;
- PrimaryPackage.lo=(int64u)-1;
- ContentStorage.hi=(int64u)-1;
- ContentStorage.lo=(int64u)-1;
- }
- };
- typedef std::map<int128u, preface> prefaces; //Key is InstanceUID of preface
- prefaces Prefaces;
- int128u Preface_Current;
-
- //Identification
- struct identification
- {
- Ztring CompanyName;
- Ztring ProductName;
- Ztring ProductVersion;
- Ztring VersionString;
- std::map<std::string, Ztring> Infos;
- };
- typedef std::map<int128u, identification> identifications; //Key is InstanceUID of identification
- identifications Identifications;
-
- //ContentStorage
- struct contentstorage
- {
- std::vector<int128u> Packages;
- };
- typedef std::map<int128u, contentstorage> contentstorages; //Key is InstanceUID of ContentStorage
- contentstorages ContentStorages;
-
- //Package
- struct package
- {
- int256u PackageUID;
- int128u Descriptor;
- std::vector<int128u> Tracks;
- bool IsSourcePackage;
-
- package()
- {
- Descriptor=0;
- IsSourcePackage=false;
- }
- };
- typedef std::map<int128u, package> packages; //Key is InstanceUID of package
- packages Packages;
-
- //Track
- struct track
- {
- int128u Sequence;
- int32u TrackID;
- Ztring TrackName;
- int32u TrackNumber;
- float64 EditRate_Real; //Before demux adaptation
- float64 EditRate;
- int64u Origin;
- bool Stream_Finish_Done;
-
- track()
- {
- Sequence=0;
- TrackID=(int32u)-1;
- TrackNumber=(int32u)-1;
- EditRate_Real=(float64)0;
- EditRate=(float64)0;
- Origin=0;
- Stream_Finish_Done=false;
- }
- };
- typedef std::map<int128u, track> tracks; //Key is InstanceUID of the track
- tracks Tracks;
-
- //Essence
- typedef std::vector<File__Analyze*> parsers;
- struct essence
- {
- stream_t StreamKind;
- size_t StreamPos;
- size_t StreamPos_Initial;
- parsers Parsers;
- std::map<std::string, Ztring> Infos;
- int64u Stream_Size;
- int32u TrackID;
- bool TrackID_WasLookedFor;
- bool Stream_Finish_Done;
- bool Track_Number_IsMappedToTrack; //if !Track_Number_IsAvailable, is true when it was euristicly mapped
- bool IsFilled;
- bool IsChannelGrouping;
- int64u Field_Count_InThisBlock_1;
- int64u Field_Count_InThisBlock_2;
- int64u Frame_Count_NotParsedIncluded;
- frame_info FrameInfo;
-
- essence()
- {
- StreamKind=Stream_Max;
- StreamPos=(size_t)-1;
- StreamPos_Initial=(size_t)-1;
- Stream_Size=(int64u)-1;
- TrackID=(int32u)-1;
- TrackID_WasLookedFor=false;
- Stream_Finish_Done=false;
- Track_Number_IsMappedToTrack=false;
- IsFilled=false;
- IsChannelGrouping=false;
- Field_Count_InThisBlock_1=0;
- Field_Count_InThisBlock_2=0;
- Frame_Count_NotParsedIncluded=(int64u)-1;
- FrameInfo.DTS=(int64u)-1;
- }
-
- ~essence()
- {
- for (size_t Pos=0; Pos<Parsers.size(); Pos++)
- delete Parsers[Pos];
- }
- };
- typedef std::map<int32u, essence> essences; //Key is TrackNumber
- essences Essences;
-
- //Descriptor
- struct descriptor
- {
- std::vector<int128u> SubDescriptors;
- std::vector<int128u> Locators;
-
- Ztring ScanType;
- stream_t StreamKind;
- size_t StreamPos;
- float64 SampleRate;
- float64 DisplayAspectRatio;
- int128u InstanceUID;
- int128u EssenceContainer;
- int128u EssenceCompression;
- int32u LinkedTrackID;
- int32u Width;
- int32u Width_Display;
- int32u Width_Display_Offset;
- int32u Height;
- int32u Height_Display;
- int32u Height_Display_Offset;
- int32u SubSampling_Horizontal;
- int32u SubSampling_Vertical;
- int32u ChannelCount;
- int128u ChannelAssignment;
- std::map<std::string, Ztring> Infos;
- int16u BlockAlign;
- int32u QuantizationBits;
- int64u Duration;
- int8u ActiveFormat;
- int8u FieldTopness;
- int8u FieldDominance;
- enum type
- {
- Type_Unknown,
- type_Mutiple,
- Type_CDCI,
- Type_RGBA,
- Type_MPEG2Video,
- Type_WaveAudio,
- Type_AES3PCM,
- Type_JPEG2000Picture,
- Type_AncPackets,
- Type_MCALabelSubDescriptor,
- Type_AudioChannelLabelSubDescriptor,
- Type_SoundfieldGroupLabelSubDescriptor,
- Type_GroupOfSoundfieldGroupsLabelSubDescriptor,
- };
- type Type;
- bool HasBFrames;
- bool HasMPEG2VideoDescriptor;
- bool IsAes3Descriptor;
- int32u ByteRate;
-
-
- //MCALabelSubDescriptor specific (including SoundfieldGroupLabelSubDescriptor...)
- int128u MCALabelDictionaryID;
- int128u MCALinkID;
- Ztring MCATagSymbol;
- Ztring MCATagName;
- Ztring MCAPartitionKind;
- Ztring MCAPartitionNumber;
- Ztring MCATitle;
- Ztring MCATitleVersion;
- Ztring MCATitleSubVersion;
- Ztring MCAEpisode;
- Ztring MCAAudioContentKind;
- Ztring MCAAudioElementKind;
-
- //AudioChannelLabelSubDescriptor specific
- int128u SoundfieldGroupLinkID;
-
- descriptor()
- {
- StreamKind=Stream_Max;
- StreamPos=(size_t)-1;
- SampleRate=0;
- DisplayAspectRatio=0;
- InstanceUID.hi=(int64u)-1;
- InstanceUID.lo=(int64u)-1;
- EssenceContainer.hi=(int64u)-1;
- EssenceContainer.lo=(int64u)-1;
- EssenceCompression.hi=(int64u)-1;
- EssenceCompression.lo=(int64u)-1;
- LinkedTrackID=(int32u)-1;
- Width=(int32u)-1;
- Width_Display=(int32u)-1;
- Width_Display_Offset=(int32u)-1;
- Height=(int32u)-1;
- Height_Display=(int32u)-1;
- Height_Display_Offset=(int32u)-1;
- SubSampling_Horizontal=(int32u)-1;
- SubSampling_Vertical=(int32u)-1;
- ChannelCount=(int32u)-1;
- ChannelAssignment.hi=(int64u)-1;
- ChannelAssignment.lo=(int64u)-1;
- BlockAlign=(int16u)-1;
- QuantizationBits=(int32u)-1;
- Duration=(int64u)-1;
- ActiveFormat=(int8u)-1;
- FieldTopness=(int8u)-1; //Field x is upper field
- FieldDominance=1; //Default is field 1 temporaly first
- Type=Type_Unknown;
- HasBFrames=false;
- HasMPEG2VideoDescriptor=false;
- IsAes3Descriptor=false;
- ByteRate=(int32u)-1;
-
- //MCALabelSubDescriptor specific (including SoundfieldGroupLabelSubDescriptor...)
- MCALabelDictionaryID.hi=(int64u)-1;
- MCALabelDictionaryID.lo=(int64u)-1;
- MCALinkID.hi=(int64u)-1;
- MCALinkID.lo=(int64u)-1;
-
- //AudioChannelLabelSubDescriptor specific
- SoundfieldGroupLinkID.hi=(int64u)-1;
- SoundfieldGroupLinkID.lo=(int64u)-1;
- }
- };
- typedef std::map<int128u, descriptor> descriptors; //Key is InstanceUID of Descriptor
- descriptors Descriptors;
-
- //Locator
- struct locator
- {
- Ztring EssenceLocator;
- stream_t StreamKind;
- size_t StreamPos;
- int32u LinkedTrackID;
- bool IsTextLocator;
-
- locator()
- {
- StreamKind=Stream_Max;
- StreamPos=(size_t)-1;
- LinkedTrackID=(int32u)-1;
- IsTextLocator=false;
- }
-
- ~locator()
- {
- }
- };
- typedef std::map<int128u, locator> locators; //Key is InstanceUID of the locator
- locators Locators;
- File__ReferenceFilesHelper* ReferenceFiles;
- #if MEDIAINFO_NEXTPACKET
- bool ReferenceFiles_IsParsing;
- #endif //MEDIAINFO_NEXTPACKET
-
- //Component (Sequence, TimeCode, Source Clip)
- struct component
- {
- int64u Duration;
- int256u SourcePackageID; //Sequence from SourcePackage only
- int32u SourceTrackID;
- std::vector<int128u> StructuralComponents; //Sequence from MaterialPackage only
-
- //Time code component
- int16u TimeCode_RoundedTimecodeBase;
- int64u TimeCode_StartTimecode;
- bool TimeCode_DropFrame;
-
- component()
- {
- Duration=(int64u)-1;
- SourceTrackID=(int32u)-1;
-
- //Time code component
- TimeCode_RoundedTimecodeBase=(int16u)-1;
- TimeCode_StartTimecode=(int64u)-1;
- TimeCode_DropFrame=false;
- }
-
- void Update (struct component &New)
- {
- if (New.Duration!=(int64u)-1)
- Duration=New.Duration;
- if (New.SourcePackageID.hi || New.SourcePackageID.lo)
- SourcePackageID=New.SourcePackageID;
- if (New.SourceTrackID!=(int32u)-1)
- SourceTrackID=New.SourceTrackID;
- if (!New.StructuralComponents.empty())
- StructuralComponents=New.StructuralComponents;
- if (New.TimeCode_StartTimecode!=(int64u)-1)
- TimeCode_StartTimecode=New.TimeCode_StartTimecode;
- if (New.TimeCode_RoundedTimecodeBase!=(int16u)-1)
- {
- TimeCode_RoundedTimecodeBase=New.TimeCode_RoundedTimecodeBase;
- TimeCode_DropFrame=New.TimeCode_DropFrame;
- }
- }
- };
- typedef std::map<int128u, component> components; //Key is InstanceUID of the component
- components Components;
-
- //Descriptive Metadata - DMSegments
- struct dmsegment
- {
- int128u Framework;
- std::vector<int32u> TrackIDs;
-
- dmsegment()
- {
- }
-
- ~dmsegment()
- {
- }
- };
- typedef std::map<int128u, dmsegment> dmsegments; //Key is InstanceUID of the DMSegment
- dmsegments DMSegments;
-
- //Descriptive Metadata - DMScheme1
- struct dmscheme1
- {
- Ztring PrimaryExtendedSpokenLanguage;
-
- dmscheme1()
- {
- }
-
- ~dmscheme1()
- {
- }
- };
- typedef std::map<int128u, dmscheme1> dmscheme1s; //Key is InstanceUID of the DMScheme1
- dmscheme1s DMScheme1s;
-
- //Parsers
- void ChooseParser__FromEssence(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Aaf(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Aaf_CP_Picture(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Aaf_CP_Sound(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Aaf_CP_Data(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Aaf_14(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Aaf_GC_Picture(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Aaf_GC_Sound(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Aaf_GC_Data(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Aaf_GC_Compound(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Avid(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Avid_Picture(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Sony(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__Sony_Picture(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser__FromEssenceContainer(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Avc(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_DV(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Mpeg4v(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Mpegv(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Raw(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_RV24(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Vc3(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Aac(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Ac3(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Alaw(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_ChannelGrouping(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Mpega(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Pcm(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_SmpteSt0331(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_SmpteSt0337(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
- void ChooseParser_Jpeg2000(const essences::iterator &Essence, const descriptors::iterator &Descriptor);
-
- //Helpers
- void Subsampling_Compute(descriptors::iterator Descriptor);
- void Locators_CleanUp();
- void Locators_Test();
- void TryToFinish();
-
- //Temp
- int128u EssenceContainer_FromPartitionMetadata;
- int64u PartitionMetadata_PreviousPartition;
- int64u PartitionMetadata_FooterPartition;
- int64u TimeCode_StartTimecode;
- int16u TimeCode_RoundedTimecodeBase;
- bool TimeCode_DropFrame;
- float64 DTS_Delay; //In seconds
- bool StreamPos_StartAtOne; //information about the base of StreamPos (0 or 1, 1 is found in 1 file)
- string SDTI_TimeCode_StartTimecode;
- int64u SDTI_TimeCode_StartTimecode_ms;
- int64u SDTI_SizePerFrame;
- bool SDTI_IsPresent; //Used to test if SDTI packet is used for Index StreamOffset calculation
- bool SDTI_IsInIndexStreamOffset; //Used to test if SDTI packet is used for Index StreamOffset calculation
- string SystemScheme1_TimeCodeArray_StartTimecode;
- int64u SystemScheme1_TimeCodeArray_StartTimecode_ms;
- int64u SystemScheme1_FrameRateFromDescriptor;
- bool Essences_FirstEssence_Parsed;
- bool StereoscopicPictureSubDescriptor_IsPresent;
- int32u Essences_UsedForFrameCount;
- int32u IndexTable_NSL;
- int32u IndexTable_NPE;
- struct systemscheme
- {
- bool IsTimeCode;
-
- systemscheme()
- {
- IsTimeCode=false;
- }
- };
- typedef std::map<int16u, systemscheme> systemschemes;
- systemschemes SystemSchemes;
- #if MEDIAINFO_ADVANCED
- int64u Footer_Position;
- #endif //MEDIAINFO_ADVANCED
- #if defined(MEDIAINFO_ANCILLARY_YES)
- File_Ancillary* Ancillary;
- bool Ancillary_IsBinded;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
-
- //Hints
- size_t* File_Buffer_Size_Hint_Pointer;
-
- //Partitions
- struct partition
- {
- int64u StreamOffset; //From file, not MXF one
- int64u PartitionPackByteCount; //Fill included
- int64u FooterPartition;
- int64u HeaderByteCount;
- int64u IndexByteCount;
- int64u BodyOffset;
-
- partition()
- {
- StreamOffset=0;
- PartitionPackByteCount=(int64u)-1;
- FooterPartition=0;
- HeaderByteCount=0;
- IndexByteCount=0;
- BodyOffset=0;
- }
-
- bool operator < (const partition& lhs) const
- {
- return StreamOffset<lhs.StreamOffset;
- }
- };
- typedef std::vector<partition> partitions;
- partitions Partitions;
- size_t Partitions_Pos;
- bool Partitions_IsCalculatingHeaderByteCount;
- bool Partitions_IsCalculatingSdtiByteCount;
- bool Partitions_IsFooter;
-
- //Demux
- #if MEDIAINFO_DEMUX
- bool Demux_HeaderParsed;
- essences::iterator Demux_CurrentEssence;
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_DEMUX || MEDIAINFO_SEEK
- size_t CountOfLocatorsToParse;
- float64 Demux_Rate;
-
- //IndexTable
- struct indextable
- {
- int64u StreamOffset; //From file, not MXF one
- int64u IndexStartPosition;
- int64u IndexDuration;
- int32u EditUnitByteCount;
- float64 IndexEditRate;
- struct entry
- {
- int64u StreamOffset;
- int8u Type;
- };
- std::vector<entry> Entries;
-
- indextable()
- {
- StreamOffset=(int64u)-1;
- IndexStartPosition=0;
- IndexDuration=0;
- EditUnitByteCount=0;
- IndexEditRate=0;
- }
-
- bool operator < (const indextable& lhs) const
- {
- return IndexStartPosition<lhs.IndexStartPosition;
- }
- };
- typedef std::vector<indextable> indextables;
- indextables IndexTables;
- size_t IndexTables_Pos;
-
- //Other
- int64u Clip_Header_Size;
- int64u Clip_Begin;
- int64u Clip_End;
- int128u Clip_Code;
- int64u OverallBitrate_IsCbrForSure;
- bool Duration_Detected;
- bool DetectDuration();
- #endif //MEDIAINFO_DEMUX || MEDIAINFO_SEEK
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Nut.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Nut.cpp
deleted file mode 100644
index 014673a3e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Nut.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Source: http://svn.mplayerhq.hu/nut/docs/nut.txt?view=markup
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_NUT_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Nut.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- const int64u main =0x4E4D7A561F5F04ADLL;
- const int64u stream =0x4E5311405BF2F9DBLL;
- const int64u syncpoint =0x4E4BE4ADEECA4569LL;
- const int64u index =0x4E58DD672F23E64ELL;
- const int64u info =0x4E49AB68B596BA78LL;
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Nut::Header_Parse()
-{
- /*
- //Parsing
- int8u N;
- Peek_B1(N);
- if (N==0x4E) //'N'
- {
- //Header
- int64u startcode, forward_ptr;
- Get_B8(startcode, "startcode");
- Get_VS(forward_ptr, "forward_ptr");
- if (forward_ptr>4096)
- Skip_B4( "header_checksum");
-
- Header_Fill_Code(startcode, Ztring().From_Number(startcode, 16)); //Quick filling for CC8 with text
- Header_Fill_Size(Element_Offset+forward_ptr); //4 for cheksum
-
- }
- else
- {
- //Frame
- Header_Fill_Code(0, "Frame");
- Header_Fill_Size(0);
- Finished();
- }
- */
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Nut::FileHeader_Parse()
-{
- //Parsing
- Element_Begin1("Nut header");
- std::string file_id_string;
- Get_String(25, file_id_string, "file_id_string");
- Element_End0();
-
- FILLING_BEGIN();
- //Integrity
- if (file_id_string!="nut/multimedia container")
- {
- Reject("Nut");
- return;
- }
-
- //Filling
- Accept("Nut");
-
- Fill(Stream_General, 0, General_Format, "Nut");
-
- Finish("Nut");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Nut::Data_Parse()
-{
-}
-
-/*
-//---------------------------------------------------------------------------
-void File_Nut::Data_Parse()
-{
- #define ELEMENT_CASE(_NAME) \
- case Elements::_NAME : _NAME(); break;
-
- //Parsing
- #ifndef __BORLANDC__
- switch (Element_Code)
- #else //__BORLANDC__
- switch (Element_Code&0xFFFFFFFF) //Borland does not like int64u for const?
- #endif //__BORLANDC__
- {
- ELEMENT_CASE(main);
- ELEMENT_CASE(stream);
- ELEMENT_CASE(syncpoint);
- ELEMENT_CASE(index);
- ELEMENT_CASE(info);
- default : Skip_XX(Element_Size-4, "Data");
- }
-
- Skip_B4( "cheksum");
-}
-*/
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-/*
-//---------------------------------------------------------------------------
-void File_Nut::main()
-{
- Element_Name("main");
-
- //Parsing
- int64u time_base_count;
- Skip_VS( "version");
- Skip_VS( "stream_count");
- Skip_VS( "max_distance");
- Get_VS (time_base_count, "time_base_count");
- for(int64u i=0; i<time_base_count; i++)
- {
- Skip_VS( "time_base_num");
- Skip_VS( "time_base_denom");
- //time_base[i]= time_base_num/time_base_denom
- }
- int64u tmp_mul=1, tmp_stream=0;
- int64s tmp_pts=0;
- for(int16u i=0; i<256;)
- {
- int64u tmp_fields, tmp_size, tmp_res, count;
- Skip_VS( "tmp_flag");
- Get_VS (tmp_fields, "tmp_fields");
- if(tmp_fields>0)
- Skip_SL( "tmp_pts");
- if(tmp_fields>1)
- Skip_VS( "tmp_mul");
- if(tmp_fields>2)
- Skip_VS( "tmp_stream");
- if(tmp_fields>3)
- Get_VS (tmp_size, "tmp_size");
- else
- tmp_size=0;
- if(tmp_fields>4)
- Get_VS (tmp_res, "tmp_res");
- else
- tmp_res=0;
- if(tmp_fields>5)
- Skip_VS( "count");
- else
- count=tmp_mul-tmp_size;
- for(int64u j=6; j<tmp_fields; j++)
- Skip_VS( "tmp_reserved[i]");
-
- for(int64u j=0; j<count && i<256; j++, i++)
- {
- if (i == 'N')
- {
- //flags[i]= FLAG_INVALID;
- j--;
- continue;
- }
- //flags[i]= tmp_flag;
- //stream_id[i]= tmp_stream;
- //data_size_mul[i]= tmp_mul;
- //data_size_lsb[i]= tmp_size + j;
- //pts_delta[i]= tmp_pts;
- //reserved_count[i]= tmp_res;
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Nut::stream()
-{
- Element_Name("stream");
-
- //Parsing
- int64u stream_class, fourcc_length, codec_specific_data_length;
- Skip_VS( "stream_id");
- Get_VS (stream_class, "stream_class");
- Get_VS (fourcc_length, "fourcc length");
- switch (fourcc_length)
- {
- case 2 : Skip_C2( "fourcc"); break;
- case 4 : Skip_C4( "fourcc"); break;
- default: Skip_XX(fourcc_length, "fourcc");
- }
- Skip_VS( "time_base_id");
- Skip_VS( "msb_pts_shift");
- Skip_VS( "max_pts_distance");
- Skip_VS( "decode_delay");
- Skip_VS( "stream_flags");
- Get_VS (codec_specific_data_length, "codec_specific_data length");
- Skip_XX(codec_specific_data_length, "codec_specific_data");
- switch (stream_class)
- {
- case 0 : //video
- {
- Skip_VS( "width");
- Skip_VS( "height");
- Skip_VS( "sample_width");
- Skip_VS( "sample_height");
- Skip_VS( "colorspace_type");
- }
- break;
- case 1 : //audio
- {
- Skip_VS( "samplerate_num");
- Skip_VS( "samplerate_denom");
- Skip_VS( "channel_count");
- }
- break;
- case 2 : //subtitles
- {
- }
- break;
- case 3 : //userdata
- {
- }
- break;
- default: ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Nut::syncpoint()
-{
- Element_Name("syncpoint");
-}
-
-//---------------------------------------------------------------------------
-void File_Nut::index()
-{
- Element_Name("index");
-}
-
-//---------------------------------------------------------------------------
-void File_Nut::info()
-{
- Element_Name("info");
-}
-
-*/
-
-}
-
-#endif //MEDIAINFO_NUT_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Nut.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Nut.h
deleted file mode 100644
index b7e7c47ab..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Nut.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Nut files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_NutH
-#define MediaInfo_File_NutH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Nut
-//***************************************************************************
-
-class File_Nut : public File__Analyze
-{
-private :
- //Buffer
- void Header_Parse();
- void FileHeader_Parse();
- void Data_Parse();
-
- //Elements
- void main();
- void stream();
- void syncpoint();
- void index();
- void info();
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg.cpp
deleted file mode 100644
index 6332b76f6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg.cpp
+++ /dev/null
@@ -1,393 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_OGG_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Ogg.h"
-#include "MediaInfo/Multiple/File_Ogg_SubElement.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ogg::File_Ogg()
-:File__Analyze()
-{
- //Configuration
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
-
- //In
- SizedBlocks=false;
- XiphLacing=false;
-
- //Temp - Global
- StreamsToDo=0;
- Parsing_End=false;
-
- //Temp - Stream
- Chunk_Sizes_Finished=true;
- packet_type=0;
- continued=false;
- eos=false;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ogg::Streams_Fill()
-{
- std::map<int64u, stream>::iterator Stream_Temp=Stream.begin();
- while (Stream_Temp!=Stream.end())
- {
- //Filling
- if (Stream_Temp->second.Parser)
- {
- Stream_Temp->second.Parser->Fill();
- Merge(*Stream_Temp->second.Parser);
- Merge(*Stream_Temp->second.Parser, Stream_General, 0, 0);
- Stream_Temp->second.StreamKind=((File_Ogg_SubElement*)Stream_Temp->second.Parser)->StreamKind;
- Stream_Temp->second.StreamPos=Count_Get(Stream_Temp->second.StreamKind)-1;
- if (!SizedBlocks && !XiphLacing)
- Stream_Temp->second.absolute_granule_position_Resolution=((File_Ogg_SubElement*)Stream_Temp->second.Parser)->absolute_granule_position_Resolution;
- if (Stream_Temp->second.StreamKind==Stream_Audio && Stream_Temp->second.absolute_granule_position_Resolution==0)
- Stream_Temp->second.absolute_granule_position_Resolution=Retrieve(Stream_Audio, Stream_Temp->second.StreamPos, Audio_SamplingRate).To_int64u();
- if (!IsSub && Stream_Temp->second.absolute_granule_position && Stream_Temp->second.absolute_granule_position_Resolution)
- {
- if (Stream_Temp->second.StreamKind==Stream_Audio)
- Fill(Stream_Temp->second.StreamKind, Stream_Temp->second.StreamPos, Fill_Parameter(Stream_Temp->second.StreamKind, Generic_Duration), float64_int64s(((float64)(Stream_Temp->second.absolute_granule_position))*1000/Stream_Temp->second.absolute_granule_position_Resolution), 10, true);
- }
- if (!IsSub)
- {
- if (Stream_Temp->second.StreamKind==Stream_Max)
- {
- Stream_Temp->second.StreamKind=Stream_General;
- Stream_Temp->second.StreamPos=0;
- }
- Fill(Stream_Temp->second.StreamKind, Stream_Temp->second.StreamPos, General_ID, Stream_Temp->first);
- Fill(Stream_Temp->second.StreamKind, Stream_Temp->second.StreamPos, General_ID_String, Ztring::ToZtring(Stream_Temp->first)+__T(" (0x")+Ztring::ToZtring(Stream_Temp->first, 16)+__T(')'), true);
- }
- }
- ++Stream_Temp;
- }
-
- Fill(Stream_General, 0, General_Format, "OGG", Unlimited, true, true);
- if (Count_Get(Stream_Video)==0 && Count_Get(Stream_Image)==0)
- Fill(Stream_General, 0, General_InternetMediaType, "audio/ogg", Unlimited, true, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg::Streams_Finish()
-{
- std::map<int64u, stream>::iterator Stream_Temp=Stream.begin();
- while (Stream_Temp!=Stream.end())
- {
- //Filling
- if (Stream_Temp->second.Parser)
- {
- Finish(Stream_Temp->second.Parser);
- Merge(*Stream_Temp->second.Parser, Stream_Temp->second.StreamKind, 0, Stream_Temp->second.StreamPos);
- Merge(*Stream_Temp->second.Parser, Stream_General, 0, 0);
- }
- ++Stream_Temp;
- }
-
- //No more need
- if (!File_Name.empty()) //Only if this is not a buffer, with buffer we can have more data
- Stream.clear();
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ogg::FileHeader_Begin()
-{
- //Must have enough buffer for having header
- if (Buffer_Size<4)
- return false; //Must wait for more data
-
- //False positives detection: Detect AVI files, or the parser can synchronize with OggS stream in a AVI chunk
- if (CC4(Buffer)==0x52494646) //"RIFF"
- {
- Finish("OGG");
- return false;
- }
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ogg::Synchronize()
-{
- //Synchronizing
- while (Buffer_Offset+4<=Buffer_Size)
- {
- while(Buffer_Offset+4<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x4F
- || Buffer[Buffer_Offset+1]!=0x67
- || Buffer[Buffer_Offset+2]!=0x67
- || Buffer[Buffer_Offset+3]!=0x53)) //"OggS"
- {
- Buffer_Offset+=1+2;
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x67)
- Buffer_Offset+=2;
- if (Buffer_Offset>=Buffer_Size || Buffer[Buffer_Offset-1]==0x67)
- Buffer_Offset--;
- Buffer_Offset--;
- }
-
- if (Buffer_Offset+4<=Buffer_Size) //Testing if size is coherant
- {
- //Retrieving some info
- if (Buffer_Offset+27>Buffer_Size)
- return false; //Need more data
- int8u page_segments=CC1(Buffer+Buffer_Offset+26);
- if (Buffer_Offset+27+page_segments>Buffer_Size)
- return false; //Need more data
- size_t Size=0;
- for (int8u Pos=0; Pos<page_segments; Pos++)
- Size+=CC1(Buffer+Buffer_Offset+27+Pos);
-
- //Testing
- if (Buffer_Offset+27+page_segments+Size+4>Buffer_Size)
- return false; //Need more data
- if (CC4(Buffer+Buffer_Offset+27+page_segments+Size)!=0x4F676753) //"OggS"
- Buffer_Offset++;
- else
- break;
- }
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+4>Buffer_Size)
- {
- if (Buffer_Offset+3==Buffer_Size && CC3(Buffer+Buffer_Offset)!=0x4F6767) //"Ogg"
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x4F67) //"Og"
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0x4F) //"O"
- Buffer_Offset++;
- return false;
- }
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Ogg::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+4>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (CC4(Buffer+Buffer_Offset)!=0x4F676753) //"OggS"
- Synched=false;
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ogg::Header_Parse()
-{
- //Specific case
- if (SizedBlocks)
- {
- int16u Size;
- Get_B2 (Size, "Size");
-
- Chunk_Sizes.clear();
- Chunk_Sizes.push_back(Size);
- Header_Fill_Size(2+Size);
- Header_Fill_Code(0, Ztring::ToZtring(0, 16));
- return;
- }
- if (XiphLacing)
- {
- if (Chunk_Sizes.empty())
- {
- int8u CountMinus1;
- Get_B1 (CountMinus1, "Number of frames minus one");
-
- int64u UsedSize=0;
- for (size_t Pos=0; Pos<CountMinus1; Pos++)
- {
- int32u Size=0;
- int8u Size8;
- do
- {
- Get_B1 (Size8, "Size");
- Size+=Size8;
- }
- while (Size8==0xFF);
- Param_Info1(Size);
- Chunk_Sizes.push_back(Size);
- UsedSize+=Size;
- }
- Chunk_Sizes.push_back((size_t)(Element_Size-UsedSize-1));
- }
-
- Header_Fill_Size(Element_Size);
- Header_Fill_Code(0, Ztring::ToZtring(0, 16));
- return;
- }
-
- //Parsing
- int64u absolute_granule_position;
- int32u stream_serial_number, page_sequence_no;
- int16u total_page_size;
- int8u stream_structure_version, flags, page_segments, packet_lacing_value;
- Skip_C4( "capture_pattern");
- Get_L1 (stream_structure_version, "stream_structure_version");
- Get_L1 (flags, "header_type_flag");
- Get_Flags (flags, 0, continued, "continued packet");
- Skip_Flags(flags, 1, "first page of logical bitstream (bos)");
- Get_Flags (flags, 2, eos, "last page of logical bitstream (eos)");
- Get_L8 (absolute_granule_position, "absolute granule position");
- Get_L4 (stream_serial_number, "stream serial number");
- Get_L4 (page_sequence_no, "page sequence no");
- Skip_L4( "page checksum");
- Get_L1 (page_segments, "page_segments");
- total_page_size=0;
- Chunk_Sizes.clear();
- Chunk_Sizes.push_back(0);
- for (int8u Pos=0; Pos<page_segments; Pos++)
- {
- Get_L1 (packet_lacing_value, "packet lacing value");
- total_page_size+=packet_lacing_value;
- Chunk_Sizes[Chunk_Sizes.size()-1]+=packet_lacing_value;
- if (packet_lacing_value!=0xFF)
- {
- Chunk_Sizes.push_back(0);
- Chunk_Sizes_Finished=true;
- }
- else
- Chunk_Sizes_Finished=false;
- }
- if (Chunk_Sizes_Finished)
- Chunk_Sizes.resize(Chunk_Sizes.size()-1); //Keep out the last value
-
- //Filling
- Header_Fill_Size(27+page_segments+total_page_size);
- Header_Fill_Code(stream_serial_number, Ztring::ToZtring(stream_serial_number, 16));
- Stream[stream_serial_number].absolute_granule_position=absolute_granule_position;
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg::Data_Parse()
-{
- //Counting
- Frame_Count++;
-
- //If first chunk of a stream
- stream& Stream_Item=Stream[Element_Code]; //[+] FlylinkDC++ Team
- if (Stream_Item.Parser==NULL)
- {
- if (Parsing_End)
- return; //Maybe multitracks concatained, not supported
- Stream_Item.Parser=new File_Ogg_SubElement;
- Open_Buffer_Init(Stream_Item.Parser);
- ((File_Ogg_SubElement*)Stream_Item.Parser)->InAnotherContainer=IsSub;
- StreamsToDo++;
- }
- ((File_Ogg_SubElement*)Stream_Item.Parser)->MultipleStreams=Stream.size()>1; //has no sens for the first init, must check allways
-
- //Parsing
- File_Ogg_SubElement* Parser=(File_Ogg_SubElement*)Stream_Item.Parser;
- if (Stream_Item.SearchingPayload)
- //For each chunk
- for (size_t Chunk_Sizes_Pos=0; Chunk_Sizes_Pos<Chunk_Sizes.size(); Chunk_Sizes_Pos++)
- {
- //Info
- if (!continued)
- Peek_L1(packet_type); //Only for information
- Element_Info1(Ztring::ToZtring(packet_type, 16));
- Element_Info1C((continued), "Continue");
-
- //Parsing
- if (continued || Parser->File_Offset!=Parser->File_Size)
- Open_Buffer_Continue(Parser, Buffer+Buffer_Offset+(size_t)Element_Offset, Chunk_Sizes[Chunk_Sizes_Pos]);
- if (Chunk_Sizes_Pos<Chunk_Sizes.size()-1
- || (Chunk_Sizes_Pos==Chunk_Sizes.size()-1 && Chunk_Sizes_Finished))
- {
- Open_Buffer_Continue(Parser, Buffer+Buffer_Offset, 0); //Purge old datas
- }
-
- Element_Offset+=Chunk_Sizes[Chunk_Sizes_Pos];
- continued=false; //If there is another chunk, this can not be a continued chunk
- if (Parser->File_GoTo!=(int64u)-1)
- Chunk_Sizes_Pos=Chunk_Sizes.size();
-
- if (!Status[IsAccepted] && Parser->Status[IsAccepted])
- Accept("OGG");
- if (Parser->Status[IsFinished] || (Element_Offset==Element_Size && eos))
- {
- StreamsToDo--;
- Stream_Item.SearchingPayload=false;
- break;
- }
- }
- else
- Skip_XX(Element_Size, "Data");
-
- //End of stream
- if (!Parsing_End &&
- (StreamsToDo==0 || File_Offset+Buffer_Offset+Element_Offset>256*1024))
- {
- if (IsSub)
- Finish("OGG");
- else
- GoToFromEnd(256*1024, "OGG");
- std::map<int64u, stream>::iterator Stream_Temp=Stream.begin();
- if (File_GoTo!=(int64u)-1)
- while (Stream_Temp!=Stream.end())
- {
- Stream_Temp->second.absolute_granule_position=0;
- ++Stream_Temp;
- }
- Parsing_End=true;
- }
-
- Element_Show();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_OGG_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg.h
deleted file mode 100644
index e1429a8c5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Ogg files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_OggH
-#define MediaInfo_File_OggH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Ogg
-//***************************************************************************
-
-class File_Ogg : public File__Analyze
-{
-public :
- //In
- bool SizedBlocks;
- bool XiphLacing;
-
- //Constructor/Destructor
- File_Ogg();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Per element
- void Header_Parse();
- void Header_Parse_AdaptationField();
- void Data_Parse();
-
- //Temp - Global
- int32u StreamsToDo;
- bool Parsing_End;
-
- //Temp - Stream
- struct stream
- {
- File__Analyze* Parser;
- stream_t StreamKind;
- size_t StreamPos;
- bool SearchingPayload;
- bool SearchingTimeCode;
- int64u absolute_granule_position;
- int64u absolute_granule_position_Resolution;
-
- stream()
- {
- Parser=NULL;
- StreamKind=Stream_Max;
- StreamPos=(size_t)-1;
- SearchingPayload=true;
- SearchingTimeCode=true;
- absolute_granule_position=0;
- absolute_granule_position_Resolution=0;
- }
- ~stream()
- {
- delete Parser; //Parser=NULL
- }
- };
-
- int8u packet_type;
- bool continued;
- bool eos;
- bool continued_NextFrame;
- std::map<int64u, stream> Stream;
- std::vector<size_t> Chunk_Sizes;
- bool Chunk_Sizes_Finished;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg_SubElement.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg_SubElement.cpp
deleted file mode 100644
index 3b830ebbb..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg_SubElement.cpp
+++ /dev/null
@@ -1,900 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_OGG_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Ogg_SubElement.h"
-#include "MediaInfo/Tag/File_VorbisCom.h"
-#include "ZenLib/ZtringListList.h"
-#include "ZenLib/BitStream.h"
-#include "ZenLib/Utils.h"
-#include <cmath>
-#include <memory>
-#if defined(MEDIAINFO_DIRAC_YES)
- #include "MediaInfo/Video/File_Dirac.h"
-#endif
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_CELT_YES)
- #include "MediaInfo/Audio/File_Celt.h"
-#endif
-#if defined(MEDIAINFO_FLAC_YES)
- #include "MediaInfo/Audio/File_Flac.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_OPUS_YES)
- #include "MediaInfo/Audio/File_Opus.h"
-#endif
-#if defined(MEDIAINFO_SPEEX_YES)
- #include "MediaInfo/Audio/File_Speex.h"
-#endif
-#if defined(MEDIAINFO_THEORA_YES)
- #include "MediaInfo/Video/File_Theora.h"
-#endif
-#if defined(MEDIAINFO_VORBIS_YES)
- #include "MediaInfo/Audio/File_Vorbis.h"
-#endif
-#if defined(MEDIAINFO_CMML_YES)
- #include "MediaInfo/Text/File_Cmml.h"
-#endif
-#if defined(MEDIAINFO_KATE_YES)
- #include "MediaInfo/Text/File_Kate.h"
-#endif
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-#ifdef __BORLANDC__ //Borland converts int64u to int32u without error or warning
- #define OGG_ID(NAME, PART1, PART2, COUNT) \
- const int32u Identifier_##NAME##1=0x##PART1; \
- const int32u Identifier_##NAME##2=0x##PART2; \
- const size_t Identifier_##NAME##3=0x##COUNT; \
-
-#elif defined(WINDOWS) //__BORLANDC__
- #define OGG_ID(NAME, PART1, PART2, COUNT) \
- const int64u Identifier_##NAME=(int64u)0x##PART1##PART2##ULL; \
- const size_t Identifier_##NAME##3=0x##COUNT; \
-
-#else //__BORLANDC__
- #define OGG_ID(NAME, PART1, PART2, COUNT) \
- const int64u Identifier_##NAME=(int64u)0x##PART1##PART2##LL; \
- const size_t Identifier_##NAME##3=0x##COUNT; \
-
-#endif //__BORLANDC__
-
-namespace Elements
-{
- const int32u fLaC=0x664C6143;
-
- //http://wiki.xiph.org/index.php/MIMETypesCodecs
- OGG_ID(CELT, 43454C54, 20202020, 8)
- OGG_ID(CMML, 434D4D4C, 00000000, 8)
- OGG_ID(BBCD, 42, 42434400, 5)
- OGG_ID(FLAC, 7F, 464C4143, 5)
- OGG_ID(JNG, 8B4A4E47, 0D0A1A0A, 8)
- OGG_ID(kate, 806B6174, 65000000, 8)
- OGG_ID(kateTags, 6B617465, 00000000, 8)
- OGG_ID(KW_DIRAC, 4B572D44, 49524143, 8)
- OGG_ID(OggMIDI, 4D67674D, 49444900, 8)
- OGG_ID(MNG, 8A4D4E47, 0D0A1A0A, 8)
- OGG_ID(OpusHead, 4F707573, 48656164, 8)
- OGG_ID(OpusTags, 4F707573, 54616773, 8)
- OGG_ID(PCM, 50434D20, 20202020, 8)
- OGG_ID(PNG, 89504E47, 0D0A1A0A, 8)
- OGG_ID(Speex, 53706565, 78202020, 8)
- OGG_ID(theora, 807468, 656F7261, 7)
- OGG_ID(vorbis, 01766F, 72626973, 7)
- OGG_ID(YUV4MPEG, 59555634, 4D504547, 8)
-
- //Not Xiph registered, but found
- OGG_ID(video, 017669, 64656F00, 7)
- OGG_ID(audio, 016175, 64696F00, 7)
- OGG_ID(text, 017465, 78740000, 7)
- OGG_ID(fLaC, 0, 664C6143, 4)
-
- //Ogg Skeleton
- OGG_ID(fishead, 66697368, 65616400, 8)
- OGG_ID(fisbone, 66697362, 6F6E6500, 8)
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ogg_SubElement::File_Ogg_SubElement()
-:File__Analyze()
-{
- //In
- StreamKind=Stream_Max;
- MultipleStreams=false;
- InAnotherContainer=false;
- absolute_granule_position_Resolution=0;
-
- //Temp
- Parser=NULL;
- OldSize=0;
- Identified=false;
- WithType=true;
-}
-
-//---------------------------------------------------------------------------
-File_Ogg_SubElement::~File_Ogg_SubElement()
-{
- delete Parser; //Parser=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Streams_Fill()
-{
- if (Parser==NULL)
- return;
-
- Fill(Parser);
- if (Parser->Count_Get(Stream_Video))
- {
- //Hack - Before
- Ztring Codec_Temp=Retrieve(Stream_Video, 0, Video_Codec); //We want to keep the 4CC of AVI
-
- Merge(*Parser, Stream_Video, 0, 0);
-
- //Hacks - After
- if (!Codec_Temp.empty())
- Fill(Stream_Video, StreamPos_Last, Video_Codec, Codec_Temp, true);
- }
- if (Parser->Count_Get(Stream_Audio))
- {
- //Hack - Before
- Ztring Codec_Temp=Retrieve(Stream_Audio, 0, Audio_Codec); //We want to keep the 2CC of AVI
-
- Merge(*Parser, Stream_Audio, 0, 0);
-
- //Hacks - After
- if (!Codec_Temp.empty())
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Codec_Temp, true);
- }
- Merge(*Parser, Stream_Text, 0, 0);
- Merge(*Parser, Stream_Image, 0, 0);
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Streams_Finish()
-{
- if (Parser==NULL)
- return;
-
- Finish(Parser);
- if (Parser->Count_Get(Stream_Video))
- {
- //Hack - Before
- Ztring Codec_Temp=Retrieve(Stream_Video, 0, Video_Codec); //We want to keep the 4CC of AVI
-
- Merge(*Parser, Stream_Video, 0, 0);
-
- //Hacks - After
- if (!Codec_Temp.empty())
- Fill(Stream_Video, StreamPos_Last, Video_Codec, Codec_Temp, true);
- }
- if (Parser->Count_Get(Stream_Audio))
- {
- //Hack - Before
- Ztring Codec_Temp=Retrieve(Stream_Audio, 0, Audio_Codec); //We want to keep the 2CC of AVI
-
- Merge(*Parser, Stream_Audio, 0, 0);
-
- //Hacks - After
- if (!Codec_Temp.empty())
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Codec_Temp, true);
- }
- Merge(*Parser, Stream_Text, 0, 0);
- Merge(*Parser, Stream_Image, 0, 0);
-}
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::FileHeader_Parse()
-{
- Accept("OGG (Sub element)");
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ogg_SubElement::Header_Begin()
-{
- //Already parsed (there is only one pass)
- if (Buffer_Offset!=0)
- return false;
-
- //We are waiting for the end of the stream, signaled by a empty buffer adding
- if (Buffer_Size!=OldSize)
- {
- OldSize=Buffer_Size;
- return false;
- }
- else
- {
- OldSize=0;
- return true;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Header_Parse()
-{
- //Parsing
- int8u Type;
- if (Identified && WithType)
- {
- bool lenbytes0, lenbytes1, lenbytes2;
- Get_L1 (Type, "Type");
- Skip_Flags(Type, 0, "Indicates data packet");
- Get_Flags (Type, 1, lenbytes2, "Bit 2 of lenbytes");
- Skip_Flags(Type, 2, "unused");
- Skip_Flags(Type, 3, "Keyframe");
- Skip_Flags(Type, 4, "unused");
- Skip_Flags(Type, 5, "unused");
- Get_Flags (Type, 6, lenbytes0, "Bit 0 of lenbytes");
- Get_Flags (Type, 7, lenbytes1, "Bit 1 of lenbytes");
- if ((Type&0x01)==0) //TODO : find a better algo
- {
- if (lenbytes2)
- {
- if (lenbytes1)
- {
- if (lenbytes0)
- Skip_L7( "SamplesCount");
- else
- Skip_L6( "SamplesCount");
- }
- else
- {
- if (lenbytes0)
- Skip_L5( "SamplesCount");
- else
- Skip_L4( "SamplesCount");
- }
- }
- else
- {
- if (lenbytes1)
- {
- if (lenbytes0)
- Skip_L3 ( "SamplesCount");
- else
- Skip_L2 ( "SamplesCount");
- }
- else
- {
- if (lenbytes0)
- Skip_L1 ( "SamplesCount");
- }
- }
- }
- //Filling
- Header_Fill_Code(Type, Ztring::ToZtring(Type, 16));
- }
- else
- //Filling
- Header_Fill_Code(0, "Identification");
-
- //Filling
- Header_Fill_Size(Element_Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Data_Parse()
-{
- //Parsing
- if (!Identified)
- Identification();
- else if (!WithType)
- Default();
- else
- switch (Element_Code&0x7F)
- {
- case 0x01 :
- case 0x03 : Comment(); break;
- case 0x00 :
- case 0x02 :
- case 0x05 :
- case 0x08 : Default(); break;
- default : Skip_XX(Element_Size, "Unknown");
- Finish("OggSubElement");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification()
-{
- Element_Name("Identification");
-
- //Parsing
- int64u ID_Identification;
- if (Element_Size==4)
- {
- int32u ID_Identification_32;
- Peek_B4(ID_Identification_32);
- ID_Identification=((int64u)ID_Identification_32)<<32;
- }
- else
- Peek_B8(ID_Identification);
-
- //Filling
- #undef ELEMENT_CASE
- #ifdef __BORLANDC__ //Borland converts int64u to int32u
- #define ELEMENT_CASE(_NAME) \
- else if (ID_Identification>>(64-8*Elements::Identifier_##_NAME##3)==(((int64u)Elements::Identifier_##_NAME##1)*0x100000000LL+Elements::Identifier_##_NAME##2)) Identification_##_NAME();
-
- #else //__BORLANDC__
- #define ELEMENT_CASE(_NAME) \
- else if (ID_Identification>>(64-8*Elements::Identifier_##_NAME##3)==Elements::Identifier_##_NAME) Identification_##_NAME();
-
- #endif //__BORLANDC__
-
- if (0) ;
- ELEMENT_CASE(CELT)
- ELEMENT_CASE(CMML)
- ELEMENT_CASE(BBCD)
- ELEMENT_CASE(FLAC)
- ELEMENT_CASE(JNG)
- ELEMENT_CASE(kate)
- ELEMENT_CASE(KW_DIRAC)
- ELEMENT_CASE(OggMIDI)
- ELEMENT_CASE(MNG)
- ELEMENT_CASE(OpusHead)
- ELEMENT_CASE(PCM)
- ELEMENT_CASE(PNG)
- ELEMENT_CASE(Speex)
- ELEMENT_CASE(theora)
- ELEMENT_CASE(vorbis)
- ELEMENT_CASE(YUV4MPEG)
- ELEMENT_CASE(video)
- ELEMENT_CASE(audio)
- ELEMENT_CASE(text)
- ELEMENT_CASE(fLaC)
- ELEMENT_CASE(fishead)
- ELEMENT_CASE(fisbone)
- else
- {
- Skip_XX(Element_Size, "Unknown");
- Accept("OggSubElement");
- Finish("OggSubElement");
- return;
- }
- Open_Buffer_Init(Parser);
-
- //Parsing
- Default();
-
- //Filling
- StreamKind=StreamKind_Last;
- if (0) ;
- ELEMENT_CASE(fishead)
- ELEMENT_CASE(fisbone)
- else
- Identified=true;
- Accept("OggSubElement");
- Element_Show();
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_CELT()
-{
- #if defined(MEDIAINFO_CELT_YES)
- StreamKind_Last=Stream_Audio;
- Parser=new File_Celt;
- #else
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "celt");
- Fill(Stream_Audio, 0, Audio_Codec, "celt");
- #endif
- WithType=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_CMML()
-{
- #if defined(MEDIAINFO_CMML_YES)
- StreamKind_Last=Stream_Text;
- Parser=new File_Cmml;
- #else
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Format, "CMML");
- Fill(Stream_Text, 0, Text_Codec, "CMML");
- #endif
- WithType=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_BBCD()
-{
- #if defined(MEDIAINFO_DIRAC_YES)
- StreamKind_Last=Stream_Video;
- Parser=new File_Dirac;
- ((File_Dirac*)Parser)->Ignore_End_of_Sequence=true;
- #else
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "Dirac");
- Fill(Stream_Video, 0, Video_Codec, "Dirac");
- #endif
- WithType=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_FLAC()
-{
- #if defined(MEDIAINFO_FLAC_YES)
- StreamKind_Last=Stream_Audio;
- Parser=new File_Flac;
- ((File_Flac*)Parser)->VorbisHeader=true;
- #else
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "FLAC");
- Fill(Stream_Audio, 0, Audio_Codec, "FLAC");
- #endif
- WithType=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_JNG()
-{
- #if defined(MEDIAINFO__YES)
- StreamKind_Last=Stream_Video;
- Parser=new File_Jng;
- #else
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "JNG");
- Fill(Stream_Video, 0, Video_Codec, "JNG");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_kate()
-{
- #if defined(MEDIAINFO_KATE_YES)
- StreamKind_Last=Stream_Text;
- Parser=new File_Kate;
- #else
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Format, "Kate");
- Fill(Stream_Text, 0, Text_Codec, "Kate");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_KW_DIRAC()
-{
- Identification_BBCD();
- Fill(Stream_Video, 0, Video_CodecID, "KW-DIRAC", Unlimited, true, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_OggMIDI()
-{
- #if defined(MEDIAINFO__YES)
- StreamKind_Last=Stream_Audio;
- Parser=new File_Midi;
- #else
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "Midi");
- Fill(Stream_Audio, 0, Audio_Codec, "Midi");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_OpusHead()
-{
- #if defined(MEDIAINFO_OPUS_YES)
- StreamKind_Last=Stream_Audio;
- Parser=new File_Opus;
- #else
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "Opus");
- Fill(Stream_Audio, 0, Audio_Codec, "Opus");
- #endif
- WithType=false;
- absolute_granule_position_Resolution=48000; // From specs: "It is possible to run a decoder at other sampling rates, but the format and this specification always count samples assuming a 48 kHz decoding rate."
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_MNG()
-{
- #if defined(MEDIAINFO__YES)
- StreamKind_Last=Stream_Video;
- Parser=new File_Mng;
- #else
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "MNG");
- Fill(Stream_Video, 0, Video_Codec, "MNG");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_PCM()
-{
- #if defined(MEDIAINFO__YES)
- StreamKind_Last=Stream_Audio;
- Parser=new File_Pcm;
- #else
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "PCM");
- Fill(Stream_Audio, 0, Audio_Codec, "PCM");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_PNG()
-{
- #if defined(MEDIAINFO__YES)
- StreamKind_Last=Stream_Video;
- Parser=new File_Png;
- #else
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "PNG");
- Fill(Stream_Video, 0, Video_Codec, "PNG");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_Speex()
-{
- #if defined(MEDIAINFO_SPEEX_YES)
- StreamKind_Last=Stream_Audio;
- Parser=new File_Speex;
- #else
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "Speex");
- Fill(Stream_Audio, 0, Audio_Codec, "Speex");
- #endif
- WithType=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_theora()
-{
- #if defined(MEDIAINFO_THEORA_YES)
- StreamKind_Last=Stream_Video;
- Parser=new File_Theora;
- #else
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Video, 0, Text_Format, "Theora");
- Fill(Stream_Video, 0, Text_Codec, "Theora");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_vorbis()
-{
- #if defined(MEDIAINFO_VORBIS_YES)
- StreamKind_Last=Stream_Audio;
- Parser=new File_Vorbis;
- #else
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Text_Format, "Vorbis");
- Fill(Stream_Audio, 0, Text_Codec, "Vorbis");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_YUV4MPEG()
-{
- #if defined(MEDIAINFO__YES)
- StreamKind_Last=Stream_Video;
- Parser=new File_Yuv;
- #else
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "YUV");
- Fill(Stream_Video, 0, Video_Codec, "YUV");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_video()
-{
- Element_Info1("Video");
-
- //Parsing
- int64u TimeUnit;
- int32u fccHandler, Width, Height;
- Skip_B1 ( "Signature");
- Skip_Local(6, "Signature");
- Skip_L2( "Reserved");
- Get_C4 (fccHandler, "fccHandler");
- Skip_L4( "SizeOfStructure");
- Get_L8 (TimeUnit, "TimeUnit"); //10000000/TimeUnit is stream tick rate in ticks/sec
- Skip_L4( "SamplesPerUnit");
- Skip_L8( "DefaultLengh"); //in media time
- Skip_L4( "BufferSize");
- Skip_L2( "BitsPerSample");
- Skip_L2( "Reserved");
- Get_L4 (Width, "Width");
- Get_L4 (Height, "Height");
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- //Filling
- Stream_Prepare(Stream_Video);
- CodecID_Fill(Ztring().From_CC4(fccHandler), Stream_Video, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Video, StreamPos_Last, Video_Codec, Ztring().From_CC4(fccHandler));
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, (float)10000000/(float)TimeUnit, 3);
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height);
-
- //Creating the parser
- if (0);
- #if defined(MEDIAINFO_MPEG4V_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(fccHandler))==__T("MPEG-4 Visual"))
- {
- Parser=new File_Mpeg4v;
- ((File_Mpeg4v*)Parser)->FrameIsAlwaysComplete=true;
- }
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_audio()
-{
- Element_Info1("Audio");
-
- //Parsing
- int64u TimeUnit, SamplesPerUnit;
- int32u fccHandler, AvgBytesPerSec;
- int16u Channels;
- Skip_B1 ( "Signature");
- Skip_Local(6, "Signature");
- Skip_L2( "Reserved");
- Get_C4 (fccHandler, "fccHandler");
- Skip_L4( "SizeOfStructure");
- Get_L8 (TimeUnit, "TimeUnit"); //10000000/TimeUnit is stream tick rate in ticks/sec
- Get_L8 (SamplesPerUnit, "SamplesPerUnit");
- Skip_L4( "DefaultLengh"); //in media time
- Skip_L4( "BufferSize");
- Skip_L2( "BitsPerSample");
- Skip_L2( "Reserved");
- Get_L2 (Channels, "Channels");
- Skip_L2( "BlockAlign");
- Get_L4 (AvgBytesPerSec, "AvgBytesPerSec");
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- //Filling
- Stream_Prepare(Stream_Audio);
- Ztring Codec; Codec.From_CC4(fccHandler);
- Codec.TrimLeft(__T('0'));
- CodecID_Fill(Codec, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Codec);
- if (AvgBytesPerSec<0x80000000) //This is a signed value, and negative values are not OK
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, AvgBytesPerSec*8);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels==5?6:Channels); //5 channels are 5.1
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SamplesPerUnit);
- absolute_granule_position_Resolution=SamplesPerUnit;
-
- //Creating the parser
- if (0);
- #if defined(MEDIAINFO_MPEGA_YES)
- else if (MediaInfoLib::Config.Codec_Get(Codec, InfoCodec_KindofCodec).find(__T("MPEG-"))==0)
- {
- Parser=new File_Mpega;
- }
- #endif
- #if defined(MEDIAINFO_AC3_YES)
- else if (fccHandler==0x32303030)
- {
- Parser=new File_Ac3;
- ((File_Ac3*)Parser)->Frame_Count_Valid=2;
- }
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_text()
-{
- Element_Info1("Text");
-
- //Parsing
- Skip_B1 ( "Signature");
- Skip_Local(6, "Signature");
- Skip_L2( "Reserved");
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- //Filling
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_Format, "Subrip");
- Fill(Stream_Text, StreamPos_Last, Text_Codec, "Subrip");
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_fLaC()
-{
- #if defined(MEDIAINFO_FLAC_YES)
- Parser=new File_Flac;
- StreamKind_Last=Stream_Audio;
- #endif
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "FLAC");
- Fill(Stream_Audio, 0, Audio_Codec, "FLAC");
- Fill(Stream_Audio, 0, Audio_MuxingMode, "pre-FLAC 1.1.1");
- WithType=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_fishead()
-{
- //Quick workaroud for Identification bool
- if (Element_Offset==Element_Size)
- return;
-
- Element_Info1("Skeleton");
-
- //Parsing
- int16u VersionMajor;
- Skip_Local(7, "Signature");
- Skip_B1 ( "Signature");
- Get_L2 (VersionMajor, "Version major");
- if (VersionMajor==3)
- {
- Skip_L2( "Version minor");
- Skip_L8( "Presentationtime numerator");
- Skip_L8( "Presentationtime denominator");
- Skip_L8( "Basetime numerator");
- Skip_L8( "Basetime denominator");
- Skip_L16( "UTC");
- Skip_L4( "UTC");
- }
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Identification_fisbone()
-{
- //Quick workaroud for Identification bool
- if (Element_Offset==Element_Size)
- return;
-
- Element_Info1("Skeleton");
-
- //Parsing
- int32u Offset;
- Skip_Local(7, "Signature");
- Skip_B1 ( "Signature");
- Get_L4 (Offset, "Offset to message header fields");
- Skip_L4( "Serial number");
- Skip_L4( "Number of header packets");
- Skip_L8( "Granulerate numerator");
- Skip_L8( "Granulerate denominator");
- Skip_L8( "Basegranule");
- Skip_L4( "Preroll");
- Skip_L1( "Granuleshift");
- if (Element_Offset<8+Offset)
- Skip_XX(8+Offset-Element_Offset, "Unknown");
- if (Element_Offset<Element_Size)
- Skip_Local(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Comment()
-{
- //Integrity
- if (Element_Size<8)
- return;
-
- //Parsing
- int64u ID_Identification;
- Peek_B8(ID_Identification);
-
- #undef ELEMENT_CASE
- #ifdef __BORLANDC__ //Borland converts int64u to int32u
- #define ELEMENT_CASE(_NAME) \
- else if (ID_Identification>>(64-8*Elements::Identifier_##_NAME##3)==(((int64u)Elements::Identifier_##_NAME##1)*0x100000000LL|Elements::Identifier_##_NAME##2))
-
- #else //__BORLANDC__
- #define ELEMENT_CASE(_NAME) \
- else if (ID_Identification>>(64-8*Elements::Identifier_##_NAME##3)==Elements::Identifier_##_NAME)
-
- #endif //__BORLANDC__
-
- int32u ID_Identification_Size;
- if (0) ;
- ELEMENT_CASE(OpusTags) ID_Identification_Size=8;
- else if (WithType)
- {
- if (0) ;
- ELEMENT_CASE(kateTags) ID_Identification_Size=8;
- else
- ID_Identification_Size=6; //Default
- }
- else
- return; //Not a comment
-
- Element_Name("Comment");
-
- Skip_Local(ID_Identification_Size, "ID");
-
- //Preparing
- File_VorbisCom Vorbis;
- Vorbis.StreamKind_Specific=StreamKind;
- Vorbis.StreamKind_Multiple=MultipleStreams?StreamKind:Stream_General;
- Vorbis.StreamKind_Common=InAnotherContainer?StreamKind:Stream_General;
- Open_Buffer_Init(&Vorbis);
-
- //Parsing
- Open_Buffer_Continue(&Vorbis);
-
- //Filling
- Finish(&Vorbis);
- Merge(Vorbis, Stream_General, 0, 0);
- Merge(Vorbis, StreamKind, 0, 0);
- Merge(Vorbis, Stream_Menu, 0, 0);
-
- //Testing if we must continue
- if (Identified && (Parser==NULL || Parser->Status[IsFinished]))
- Finish("OggSubElement");
-}
-
-//---------------------------------------------------------------------------
-void File_Ogg_SubElement::Default()
-{
- Element_Name("Frame");
-
- if (Parser)
- {
- if (!WithType)
- Comment(); //In case of comments
- Open_Buffer_Continue(Parser);
- if (Identified && Parser->Status[IsFilled])
- Finish("OggSubElement");
- }
- else if (Element_Offset<Element_Size)
- {
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- if (Identified)
- Finish("OggSubElement");
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_OGG_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg_SubElement.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg_SubElement.h
deleted file mode 100644
index 904b5d695..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ogg_SubElement.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG Transport Stream files, Program Map Section
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Ogg_Setup_VorbisH
-#define MediaInfo_Ogg_Setup_VorbisH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Ogg_SubElement
-//***************************************************************************
-
-class File_Ogg_SubElement : public File__Analyze
-{
-public :
- //In
- stream_t StreamKind;
- bool MultipleStreams;
- bool InAnotherContainer;
- int64u absolute_granule_position_Resolution;
-
-protected :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- void FileHeader_Parse ();
-
-public :
- File_Ogg_SubElement();
- ~File_Ogg_SubElement();
-
-private :
- //Buffer
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Identification();
- void Identification_CELT();
- void Identification_CMML();
- void Identification_BBCD();
- void Identification_FLAC();
- void Identification_JNG();
- void Identification_kate();
- void Identification_KW_DIRAC();
- void Identification_OggMIDI();
- void Identification_MNG();
- void Identification_OpusHead();
- void Identification_PCM();
- void Identification_PNG();
- void Identification_Speex();
- void Identification_theora();
- void Identification_vorbis();
- void Identification_YUV4MPEG();
- void Identification_video();
- void Identification_audio();
- void Identification_text();
- void Identification_fLaC();
- void Identification_fishead();
- void Identification_fisbone();
- void Comment();
- void Default();
-
- //Temp
- File__Analyze* Parser;
- size_t OldSize;
- bool Identified;
- bool WithType;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_P2_Clip.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_P2_Clip.cpp
deleted file mode 100644
index 5e1a135c0..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_P2_Clip.cpp
+++ /dev/null
@@ -1,465 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_P2_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_P2_Clip.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/FileName.h"
-#include "tinyxml2.h"
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_P2_Clip::File_P2_Clip()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_None; //TODO
- StreamIDs_Width[0]=sizeof(size_t)*2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_P2_Clip::~File_P2_Clip()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_P2_Clip::Streams_Finish()
-{
- if (ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_P2_Clip::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_P2_Clip::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- {
- XMLElement* Root=document.FirstChildElement("P2Main");
- if (Root)
- {
- Accept("P2_Clip");
- Fill(Stream_General, 0, General_Format, "P2 Clip");
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- XMLElement* ClipContent=Root->FirstChildElement("ClipContent");
- if (ClipContent)
- {
- XMLElement* ChildElement;
-
- //ID
- ChildElement=ClipContent->FirstChildElement("GlobalClipID");
- if (ChildElement)
- Fill(Stream_General, 0, General_UniqueID, ChildElement->GetText());
-
- //Duration
- Ztring Duration, EditUnit;
- ChildElement=ClipContent->FirstChildElement("Duration");
- if (ChildElement)
- Duration=ChildElement->GetText();
- ChildElement=ClipContent->FirstChildElement("EditUnit");
- if (ChildElement)
- EditUnit=ChildElement->GetText();
- int64u Duration_Frames=Duration.To_int64u();
- int64u EditUnit_Numerator=EditUnit.SubString(Ztring(), __T("/")).To_int64u();
- int64u EditUnit_Denominator=EditUnit.SubString(__T("/"), Ztring()).To_int64u();
- if (Duration_Frames && EditUnit_Numerator && EditUnit_Denominator)
- Fill(Stream_General, 0, General_Duration, ((float32)Duration_Frames)*1000*EditUnit_Numerator/EditUnit_Denominator, 0);
-
- //EssenceList
- XMLElement* EssenceList=ClipContent->FirstChildElement("EssenceList");
- if (EssenceList)
- {
- XMLElement* Track=EssenceList->FirstChildElement();
- #if defined(MEDIAINFO_MXF_YES)
- size_t Audio_Count=0;
- #endif
- while (Track)
- {
- string Field=Track->Value();
- if (Field=="Video")
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
-
- //FrameRate
- ChildElement=Track->FirstChildElement("FrameRate");
- if (ChildElement)
- {
- Ztring FrameRateS=Ztring(ChildElement->GetText());
- if (FrameRateS.find(__T("23.97"))==0)
- ReferenceFile.FrameRate=((float64)24)*1000/1001;
- else if (FrameRateS.find(__T("29.97"))==0)
- ReferenceFile.FrameRate=((float64)30)*1000/1001;
- else if (FrameRateS.find(__T("59.94"))==0)
- ReferenceFile.FrameRate=((float64)60)*1000/1001;
- else
- ReferenceFile.FrameRate=FrameRateS.To_float64();
- if (FrameRateS.find('i')!=string::npos)
- ReferenceFile.FrameRate/=2;
- }
-
- //CreationDate
- ChildElement=Track->FirstChildElement("StartTimecode");
- if (ChildElement)
- {
- string Text=ChildElement->GetText();
- if (Text.size()==11)
- {
- int64u ToFill=(Text[0]-'0')*10*60*60*1000
- + (Text[1]-'0') *60*60*1000
- + (Text[3]-'0') *10*60*1000
- + (Text[4]-'0') *60*1000
- + (Text[6]-'0') *10*1000
- + (Text[7]-'0') *1000;
- if (ReferenceFile.FrameRate)
- ToFill+=float64_int64s(((Text[9]-'0')*10+(Text[10]-'0'))*1000/ReferenceFile.FrameRate);
- //Fill(Stream_Video, StreamPos_Last, Video_Delay, ToFill);
- //Fill(Stream_Video, StreamPos_Last, Video_Delay_Source, "P2 Clip");
- }
- }
-
- #if defined(MEDIAINFO_MXF_YES)
- if (File_Name.size()>10+1+4+1
- && File_Name[File_Name.size()-10-1]==PathSeparator
- && (File_Name[File_Name.size()-10-2]&(~0x20))==__T('P')
- && (File_Name[File_Name.size()-10-3]&(~0x20))==__T('I')
- && (File_Name[File_Name.size()-10-4]&(~0x20))==__T('L')
- && (File_Name[File_Name.size()-10-5]&(~0x20))==__T('C')
- && File_Name[File_Name.size()-10-6]==PathSeparator)
- {
- Ztring file=File_Name.substr(File_Name.size()-10, 6);
- Ztring MXF_File=__T("..");
- MXF_File+=PathSeparator;
-
- Ztring Path=File_Name.substr(0, File_Name.size()-10-6);
- ZtringList Dirs=Dir::GetAllFileNames(Path, Dir::Include_Dirs);
- bool Exists=false;
- for (size_t Pos=0; Pos<Dirs.size(); Pos++)
- if (Dirs[Pos].size()>6
- && (Dirs[Pos][Dirs[Pos].size()-1]&(~0x20))==__T('O')
- && (Dirs[Pos][Dirs[Pos].size()-2]&(~0x20))==__T('E')
- && (Dirs[Pos][Dirs[Pos].size()-3]&(~0x20))==__T('D')
- && (Dirs[Pos][Dirs[Pos].size()-4]&(~0x20))==__T('I')
- && (Dirs[Pos][Dirs[Pos].size()-5]&(~0x20))==__T('V')
- && Dirs[Pos][Dirs[Pos].size()-6]==PathSeparator)
- {
- MXF_File+=Dirs[Pos].substr(Dirs[Pos].size()-5, 5);
- Exists=true;
- break;
- }
- if (!Exists)
- MXF_File+=__T("AUDIO");
-
- MXF_File+=PathSeparator;
- MXF_File+=file;
-
- Dirs=Dir::GetAllFileNames(File_Name.substr(0, File_Name.size()-10-1)+PathSeparator+MXF_File+__T(".MXF"), Dir::Include_Files);
- Exists=false;
- for (size_t Pos=0; Pos<Dirs.size(); Pos++)
- if (Dirs[Pos].size()>4
- && (Dirs[Pos][Dirs[Pos].size()-1]&(~0x20))==__T('F')
- && (Dirs[Pos][Dirs[Pos].size()-2]&(~0x20))==__T('X')
- && (Dirs[Pos][Dirs[Pos].size()-3]&(~0x20))==__T('M')
- && Dirs[Pos][Dirs[Pos].size()-4]==__T('.'))
- {
- MXF_File+=Dirs[Pos].substr(Dirs[Pos].size()-4, 4);
- Exists=true;
- break;
- }
- if (!Exists)
- MXF_File+=__T(".MXF");
-
- ReferenceFile.FileNames.push_back(MXF_File);
- ReferenceFile.StreamKind=Stream_Video;
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- #endif //defined(MEDIAINFO_MXF_YES)
- }
- else if (Field=="Audio")
- {
- #if defined(MEDIAINFO_MXF_YES)
- if (File_Name.size()>10+1+4+1
- && File_Name[File_Name.size()-10-1]==PathSeparator
- && (File_Name[File_Name.size()-10-2]&(~0x20))==__T('P')
- && (File_Name[File_Name.size()-10-3]&(~0x20))==__T('I')
- && (File_Name[File_Name.size()-10-4]&(~0x20))==__T('L')
- && (File_Name[File_Name.size()-10-5]&(~0x20))==__T('C')
- && File_Name[File_Name.size()-10-6]==PathSeparator)
- {
- Ztring file=File_Name.substr(File_Name.size()-10, 6);
- Ztring MXF_File=__T("..");
- MXF_File+=PathSeparator;
-
- Ztring Path=File_Name.substr(0, File_Name.size()-10-6);
- ZtringList Dirs=Dir::GetAllFileNames(Path, Dir::Include_Dirs);
- bool Exists=false;
- for (size_t Pos=0; Pos<Dirs.size(); Pos++)
- if (Dirs[Pos].size()>6
- && (Dirs[Pos][Dirs[Pos].size()-1]&(~0x20))==__T('O')
- && (Dirs[Pos][Dirs[Pos].size()-2]&(~0x20))==__T('I')
- && (Dirs[Pos][Dirs[Pos].size()-3]&(~0x20))==__T('D')
- && (Dirs[Pos][Dirs[Pos].size()-4]&(~0x20))==__T('U')
- && (Dirs[Pos][Dirs[Pos].size()-5]&(~0x20))==__T('A')
- && Dirs[Pos][Dirs[Pos].size()-6]==PathSeparator)
- {
- MXF_File+=Dirs[Pos].substr(Dirs[Pos].size()-5, 5);
- Exists=true;
- break;
- }
- if (!Exists)
- MXF_File+=__T("AUDIO");
-
- MXF_File+=PathSeparator;
- MXF_File+=file;
- Ztring Pos=Ztring::ToZtring(Audio_Count);
- if (Pos.size()<2)
- Pos.insert(0, 1, __T('0'));
- MXF_File+=Pos;
-
- Dirs=Dir::GetAllFileNames(File_Name.substr(0, File_Name.size()-10-1)+PathSeparator+MXF_File+__T(".MXF"), Dir::Include_Files);
- Exists=false;
- for (size_t Pos=0; Pos<Dirs.size(); Pos++)
- if (Dirs[Pos].size()>4
- && (Dirs[Pos][Dirs[Pos].size()-1]&(~0x20))==__T('F')
- && (Dirs[Pos][Dirs[Pos].size()-2]&(~0x20))==__T('X')
- && (Dirs[Pos][Dirs[Pos].size()-3]&(~0x20))==__T('M')
- && Dirs[Pos][Dirs[Pos].size()-4]==__T('.'))
- {
- MXF_File+=Dirs[Pos].substr(Dirs[Pos].size()-4, 4);
- Exists=true;
- break;
- }
- if (!Exists)
- MXF_File+=__T(".MXF");
-
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.FileNames.push_back(MXF_File);
- ReferenceFile.StreamKind=Stream_Audio;
- ReferenceFile.StreamID=ReferenceFiles->References.size()+1;
- ReferenceFiles->References.push_back(ReferenceFile);
-
- Audio_Count++;
- }
- #endif //defined(MEDIAINFO_MXF_YES)
- }
-
- Track=Track->NextSiblingElement();
- }
- }
-
- //ClipMetadata
- XMLElement* ClipMetadata=ClipContent->FirstChildElement("ClipMetadata");
- if (ClipMetadata)
- {
- XMLElement* Access=ClipMetadata->FirstChildElement("Access");
- if (Access)
- {
- //CreationDate
- ChildElement=Access->FirstChildElement("CreationDate");
- if (ChildElement)
- {
- Ztring Content=ChildElement->GetText();
- if (Content.size()>=11 && Content[10]==__T('T'))
- Content[10]=__T(' ');
- if (Content.find(__T("+00:00"))!=string::npos)
- {
- Content.resize(10+1+8);
- Content.insert(0, __T("UTC "));
- }
- Fill(Stream_General, 0, General_Recorded_Date, Content);
- }
-
- //CreationDate
- ChildElement=Access->FirstChildElement("LastUpdateDate");
- if (ChildElement)
- {
- Ztring Content=ChildElement->GetText();
- if (Content.size()>=11 && Content[10]==__T('T'))
- Content[10]=__T(' ');
- if (Content.find(__T("+00:00"))!=string::npos)
- {
- Content.resize(10+1+8);
- Content.insert(0, __T("UTC "));
- }
- Fill(Stream_General, 0, General_Tagged_Date, Content);
- }
- }
-
- XMLElement* Device=ClipMetadata->FirstChildElement("Device");
- if (Device)
- {
- //Manufacturer+ModelName
- XMLElement* Manufacturer=Device->FirstChildElement("Manufacturer");
- XMLElement* ModelName=Device->FirstChildElement("ModelName");
- if (Manufacturer && ModelName)
- Fill(Stream_General, 0, General_Encoded_Application, string(Manufacturer->GetText())+" "+ModelName->GetText());
- }
-
- XMLElement* Shoot=ClipMetadata->FirstChildElement("Shoot");
- if (Shoot)
- {
- //StartDate
- ChildElement=Shoot->FirstChildElement("StartDate");
- if (ChildElement)
- {
- Ztring Content=ChildElement->GetText();
- if (Content.size()>=11 && Content[10]==__T('T'))
- Content[10]=__T(' ');
- if (Content.find(__T("+00:00"))!=string::npos)
- {
- Content.resize(10+1+8);
- Content.insert(0, __T("UTC "));
- }
- Fill(Stream_General, 0, General_Duration_Start, Content);
- }
-
- //EndDate
- ChildElement=Shoot->FirstChildElement("EndDate");
- if (ChildElement)
- {
- Ztring Content=ChildElement->GetText();
- if (Content.size()>=11 && Content[10]==__T('T'))
- Content[10]=__T(' ');
- if (Content.find(__T("+00:00"))!=string::npos)
- {
- Content.resize(10+1+8);
- Content.insert(0, __T("UTC "));
- }
- Fill(Stream_General, 0, General_Duration_End, Content);
- }
-
- //Location
- XMLElement* Location=Shoot->FirstChildElement("Location");
- if (Location)
- {
- //Longitude+Latitude
- XMLElement* Longitude=Location->FirstChildElement("Longitude");
- XMLElement* Latitude=Location->FirstChildElement("Latitude");
- if (Longitude && Latitude)
- Fill(Stream_General, 0, General_Recorded_Location, string(Latitude->GetText())+", "+Longitude->GetText());
- }
- }
-
- XMLElement* Scenario=ClipMetadata->FirstChildElement("Scenario");
- if (Scenario)
- {
- //ProgramName
- ChildElement=Scenario->FirstChildElement("ProgramName");
- if (ChildElement)
- Fill(Stream_General, 0, General_Title, ChildElement->GetText());
-
- //SceneNo.
- ChildElement=Scenario->FirstChildElement("SceneNo.");
- if (ChildElement)
- Fill(Stream_General, 0, "Scene Number", ChildElement->GetText());
-
- //TakeNo.
- ChildElement=Scenario->FirstChildElement("TakeNo.");
- if (ChildElement)
- Fill(Stream_General, 0, "Take Number", ChildElement->GetText());
- }
-
- XMLElement* News=ClipMetadata->FirstChildElement("News");
- if (News)
- {
- //Reporter
- ChildElement=News->FirstChildElement("Reporter");
- if (ChildElement)
- Fill(Stream_General, 0, "Reporter", ChildElement->GetText());
-
- //Purpose
- ChildElement=News->FirstChildElement("Purpose");
- if (ChildElement)
- Fill(Stream_General, 0, "Purpose", ChildElement->GetText());
-
- //Object
- ChildElement=News->FirstChildElement("Object");
- if (ChildElement)
- Fill(Stream_General, 0, "Object", ChildElement->GetText());
- }
- }
- }
- }
- else
- {
- Reject("P2_Clip");
- return false;
- }
- }
-
- Element_Offset=File_Size;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_P2_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_P2_Clip.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_P2_Clip.h
deleted file mode 100644
index 05e0b473c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_P2_Clip.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about P2 Clip files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_P2_ClipH
-#define MediaInfo_File_P2_ClipH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_P2_Clip
-//***************************************************************************
-
-class File_P2_Clip : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_P2_Clip();
- ~File_P2_Clip();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Pmp.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Pmp.cpp
deleted file mode 100644
index 0ad36636b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Pmp.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PMP_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Pmp.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Pmp_video_format(int32u video_format)
-{
- switch (video_format)
- {
- case 0 : return "MPEG-4 Visual";
- case 1 : return "AVC";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Pmp_audio_format(int32u audio_format)
-{
- switch (audio_format)
- {
- case 0 : return "MPEG Audio";
- case 1 : return "AAC";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Pmp::FileHeader_Begin()
-{
- //Synchro
- if (4>Buffer_Size)
- return false;
- if (Buffer[0]!=0x70 //"pmpm"
- || Buffer[1]!=0x6D
- || Buffer[2]!=0x70
- || Buffer[3]!=0x6D)
- {
- Reject();
- return false;
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Pmp::FileHeader_Parse()
-{
- //Parsing
- int32u version, video_format=0, nb_frames=0, video_width=0, video_height=0, time_base_num=0, time_base_den=0, audio_format=0, sample_rate=0, channels=0;
-
- Skip_C4( "Signature");
- Get_L4 (version, "Version");
- if (version==1)
- {
- Get_L4 (video_format, "video_format");
- Get_L4 (nb_frames, "number of frames");
- Get_L4 (video_width, "video_width");
- Get_L4 (video_height, "video_height");
- Get_L4 (time_base_num, "time_base_num");
- Get_L4 (time_base_den, "time_base_den");
- Skip_L4( "number of audio streams");
- Get_L4 (audio_format, "audio_format");
- Get_L4 (channels, "channels");
- Skip_L4( "unknown");
- Get_L4 (sample_rate, "sample_rate");
- }
-
- FILLING_BEGIN();
- Accept("PMP");
-
- Fill(Stream_General, 0, General_Format, "PMP");
-
- if (version==1)
- {
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, Pmp_video_format(video_format));
- Fill(Stream_Video, 0, Video_FrameCount, nb_frames);
- Fill(Stream_Video, 0, Video_Width, video_width);
- Fill(Stream_Video, 0, Video_Height, video_height);
- Fill(Stream_Video, 0, Video_FrameRate, (float)time_base_den / 100);
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, Pmp_audio_format(audio_format));
- Fill(Stream_Audio, 0, Audio_Channel_s_, channels);
- Fill(Stream_Audio, 0, Audio_SamplingRate, sample_rate);
- }
-
- //No more need data
- Finish("PMP");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_PMP_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Pmp.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Pmp.h
deleted file mode 100644
index b62fbb4c6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Pmp.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PMP files
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_PmpH
-#define MediaInfo_File_PmpH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Pmp
-//***************************************************************************
-
-class File_Pmp : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
-private :
- //Buffer
- bool FileHeader_Begin();
- void FileHeader_Parse();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ptx.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ptx.cpp
deleted file mode 100644
index 3c152e4ba..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ptx.cpp
+++ /dev/null
@@ -1,640 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PTX_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Ptx.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ptx::File_Ptx()
-:File__Analyze()
-{
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Ptx;
- StreamIDs_Width[0]=sizeof(size_t);
- #endif //MEDIAINFO_EVENTS
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_Ptx::~File_Ptx()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ptx::Streams_Finish()
-{
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Ptx::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ptx::FileHeader_Begin()
-{
- if (File_Size<0x100)
- {
- Reject("Ptx");
- return false;
- }
-
- //Element_Size
- if (11>Buffer_Size)
- return false; //Must wait for more data
-
- if (Buffer[ 0x0]!=0x03
- || Buffer[ 0x1]!=0x30
- || Buffer[ 0x2]!=0x30
- || Buffer[ 0x3]!=0x31
- || Buffer[ 0x4]!=0x30
- || Buffer[ 0x5]!=0x31
- || Buffer[ 0x6]!=0x31
- || Buffer[ 0x7]!=0x31
- || Buffer[ 0x8]!=0x31
- || Buffer[ 0x9]!=0x30
- || Buffer[ 0xA]!=0x30
- || Buffer[ 0xB]!=0x31
- || Buffer[ 0xC]!=0x30
- || Buffer[ 0xD]!=0x31
- || Buffer[ 0xE]!=0x30
- || Buffer[ 0xF]!=0x31
- || Buffer[0x10]!=0x31)
- {
- Reject("Ptx");
- return false;
- }
-
- //Element_Size
- if (Buffer_Size<File_Size)
- return false; //Must wait for more data
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- //All should be OK...
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ptx::Read_Buffer_Continue()
-{
- if (File_Offset || Buffer_Offset)
- {
- if (Buffer_Size)
- Reject(); //Problem
- return;
- }
-
- //Parsing
- ZtringList Names;
- Ztring LibraryName, LibraryVersion, Format, Directory;
- int32u LibraryName_Length, LibraryVersion_Length, LibraryRelease_Length, Format_Length, Platform_Length, Info_Count, Names_Count, Info_Length, Name_Length, FileName_Count, Directory_Length;
- int32u Opaque2_Length, Audio_Count;
- int16u Opaque1_Length;
- Element_Begin1("Header");
- Skip_B1( "Magic");
- Skip_Local(16, "Magic");
- Skip_L2( "0x0500");
- Skip_L1( "Unknown [1]");
- Skip_L1( "0x5A [1]");
- Skip_L2( "0x0001");
- Skip_L2( "0x0004");
- Skip_L2( "0x0000 [1]");
- Skip_L4( "Unknown [2]");
- Skip_L2( "0x035A");
- Skip_L2( "0x6400");
- Skip_L2( "0x0000 [1]");
- Skip_L2( "0x0300");
- Skip_L2( "0x0000 [1]");
- Get_L4 (LibraryName_Length, "WritingLibrary name length");
- Get_UTF8(LibraryName_Length, LibraryName, "Library name");
- Skip_L4( "0x00000003");
- Skip_L4( "Library version, major");
- Skip_L4( "Library version, minor");
- Skip_L4( "Library version, revision");
- Get_L4 (LibraryVersion_Length, "Library version length");
- Get_UTF8(LibraryVersion_Length, LibraryVersion, "Library version");
- Skip_L1( "0x01");
- Get_L4 (LibraryRelease_Length, "Library release length");
- Skip_UTF8(LibraryRelease_Length, "Library release");
- Skip_L1( "0x00 [1]");
- Get_L4 (Format_Length, "Format length");
- Get_UTF8(Format_Length, Format, "Format");
- if (Format!=__T("Pro Tools Session File"))
- {
- Element_End();
- Reject();
- return;
- }
- Skip_L2( "0x0006");
- Get_L4 (Platform_Length, "Platform length");
- Skip_UTF8(Platform_Length, "Platform");
- Skip_L4( "0x00000000");
- Skip_L2( "0x5A05");
- Get_L2 (Opaque1_Length, "Info list, Opaque length"); //0x0006 (10.2-) or 0x0008 (10.3+)
- Skip_L4( "Unknown [3]");
- Skip_L4( "0x00002067");
- Skip_L2( "0x0000 [1]");
- Skip_L2( "0x0000 (once) or 0x002A");
- Skip_L2( "0x0000 [1]");
- Skip_L2( "Unknown [4]");
- Skip_L4( "Unknown [5]");
- Skip_L4( "Unknown [6]");
- Element_End();
- Element_Begin1("Info list");
- Get_L4 (Info_Count, "Info count");
- if (4*Info_Count>Element_Size)
- {
- Element_End();
- Reject();
- return;
- }
- for (int32u Pos=0; Pos<Info_Count; Pos++)
- {
- Element_Begin1("Info");
- Get_L4 (Info_Length, "Info length");
- if (Info_Length)
- {
- Info_UTF8(Info_Length, Info, "Name"); Element_Info1(Info);
- }
- Element_End();
- }
- Element_End();
- Element_Begin1("Unknown");
- Skip_L4( "0x00000000");
- Element_Begin1("Names list 1");
- Get_L4 (Names_Count, "Names count minus 1");
- if (4*Names_Count>Element_Size)
- {
- Element_End();
- Reject();
- return;
- }
- for (int16u Pos=0; Pos<1+Names_Count; Pos++)
- {
- Element_Begin1("Name");
- Get_L4 (Name_Length, "Name length");
- if (Name_Length)
- {
- Info_UTF8(Name_Length, Name, "Name"); Element_Name(Name);
- }
- Element_End();
- }
- Element_End();
- Skip_L4( "0x00000000");
- Skip_L4( "0x00000000 or 0x0000002A");
- Skip_L4( "Unknown [7]");
- Skip_L4( "Unknown [8]");
- Element_Begin1("Names list 2");
- Get_L4 (Names_Count, "Names count");
- if (4*Names_Count>Element_Size)
- {
- Element_End();
- Reject();
- return;
- }
- for (int16u Pos=0; Pos<Names_Count; Pos++)
- {
- Element_Begin1("Name");
- Get_L4 (Name_Length, "Name length");
- if (Name_Length)
- {
- Info_UTF8(Name_Length, Name, "Name"); Element_Name(Name);
- }
- Element_End();
- }
- Element_End();
- Skip_L4( "0x00000000");
- Skip_L4( "0x0000002A [1]");
- Skip_L4( "Unknown [9]");
- Skip_L4( "Unknown [10]");
- Skip_L4( "0x00000000");
- Skip_L1( "0x00 or 0x01 [2]");
- Skip_L1( "0x01");
- Skip_L1( "0x00 or 0x01 or 0x02");
- Skip_L1( "0x00 [2]");
- Skip_L1( "0x01");
- Skip_L1( "0x00 (once) or 0x01");
- Skip_L1( "0x00 or 0x01 (once)");
- Skip_L1( "0x00 or 0x01 (once) or 0x5A");
- if (Opaque1_Length<6)
- {
- if (Opaque1_Length)
- Skip_XX(Opaque1_Length, "Opaque1");
- }
- else
- {
- Skip_L4( "Opaque1 - Unknown [1]");
- Skip_L2( "Opaque1 - Unknown [2]");
- if (Opaque1_Length<8)
- {
- if (Opaque1_Length-6)
- Skip_XX(Opaque1_Length-6, "Opaque1 - Unknown [3]");
- }
- else
- {
- Skip_L2( "Opaque1 - 0x0000");
- if (Opaque1_Length>8)
- Skip_XX(Opaque1_Length-8, "Opaque1 - Unknown [3]");
- }
- }
- Skip_L2( "0x2519");
- Skip_L2( "0x0001");
- Skip_L4( "0x00000000 or B5112287");
- Skip_L4( "0x00000000 or 4037F9DC");
- Skip_L4( "0x00000001 [1]");
- Skip_L2( "0x0003");
- Element_End();
- Get_L4 (Audio_Count, "Audio count");
- if (111*Audio_Count>Element_Size)
- {
- Reject();
- return;
- }
- Element_Begin1("Audio tracks list 1");
- for (int16u Pos=0; Pos<Audio_Count; Pos++)
- {
- Element_Begin1("Name");
- Skip_L2( "0x0000 [New]");
- Get_L4 (Name_Length, "(Same 1/2/3) Name length");
- Info_UTF8(Name_Length, Name, "(Same 1/2/3) Name");
- Skip_L2( "(Same 1/2/3) 0x0000 ");
- Skip_L4( "(Same 1/2/3) 0x00000000");
- Skip_L4( "(Same 1/2/3) 0x0000002A");
- Skip_L4( "(Same 1/2/3) Unknown");
- Skip_L4( "(Same 1/2/3) Unknown");
- Info_L3(Number, "(Same 1/2/3) Ordered number"); Element_Info1(Number);
- Element_Info1(Name);
- Element_End();
-
- if (Name==__T("Lf")) //Exception? Typo?
- Name=__T("Lfe");
- Name.MakeLowerCase();
- Names.push_back(Name);
- }
- Element_End();
- Element_Begin1("Audio tracks list 2");
- for (int16u Pos=0; Pos<Audio_Count; Pos++)
- {
- Element_Begin1("Name");
- int32u Size;
- Skip_L3( "(Same 2/3) 0x00025A [1]");
- Get_L4 (Size, "(Same 2/3) Size");
- Skip_L4( "(Same 2/3) 0x0000251A");
- Get_L4 (Name_Length, "(Same 1/2/3) Name length");
- Info_UTF8(Name_Length, Name, "(Same 1/2/3) Name");
- Skip_L2( "(Same 1/2/3) 0x0000 ");
- Skip_L4( "(Same 1/2/3) 0x00000000");
- Skip_L4( "(Same 1/2/3) 0x0000002A");
- Skip_L4( "(Same 1/2/3) Unknown");
- Skip_L4( "(Same 1/2/3) Unknown");
- Info_L3(Number, "(Same 1/2/3) Ordered number"); Element_Info1(Number);
- Skip_L2( "(Same 2/3) 0x0000");
- Element_Info1(Name);
- if (Name_Length+31!=Size)
- {
- Element_End();
- Element_End();
- Reject();
- return;
- }
- Element_End();
- }
- Element_End();
- Get_L4 (Audio_Count, "Audio count");
- if (4*Audio_Count>Element_Size)
- {
- Reject();
- return;
- }
- Element_Begin1("Audio tracks list 3");
- for (int16u Pos=0; Pos<Audio_Count; Pos++)
- {
- Element_Begin1("Name");
- int32u Size;
- Skip_L3( "(Same 2/3) 0x00025A [2]");
- Get_L4 (Size, "(Same 2/3) Size");
- if (Size>0x10000)
- {
- Element_End();
- Element_End();
- Reject();
- return;
- }
- Skip_L4( "(Same 2/3) 0x0000251A");
- Get_L4 (Name_Length, "(Same 1/2/3) Name length");
- Info_UTF8(Name_Length, Name, "(Same 1/2/3) Name");
- Skip_L2( "(Same 1/2/3) 0x0000 ");
- Skip_L4( "(Same 1/2/3) 0x00000000");
- Skip_L4( "(Same 1/2/3) 0x0000002A");
- Skip_L4( "(Same 1/2/3) Unknown");
- Skip_L4( "(Same 1/2/3) Unknown");
- Info_L3(Number, "(Same 1/2/3) Ordered number"); Element_Info1(Number);
- Skip_L2( "(Same 2/3) 0x0000");
- Element_Info1(Name);
- if (Name_Length+31!=Size)
- {
- Element_End();
- Element_End();
- Reject();
- return;
- }
- Element_End();
- }
- Element_End();
- Skip_L2( "0x0000 [4]");
- Skip_L2( "0x0018");
- Skip_L4( "0x00000001 [2]");
- Skip_L2( "0x0018");
- Skip_L4( "0x00000001 [2]");
- Skip_L2( "0x0001 [3]");
- Skip_L3( "0x00095A");
- Get_L4 (Opaque2_Length, "Opaque2 length");
- Skip_XX(Opaque2_Length, "Opaque2");
- Skip_L1( "0x5A [2]");
- Skip_L2( "0x0003 (10.0) or 0x0004 (10.2+)");
- Get_L4 (Opaque2_Length, "Opaque3 length"); //0x0012 (10.0) or 0x0016 (10.2+)
- if (Opaque2_Length<0x12)
- Skip_XX(Opaque2_Length, "Opaque3");
- else
- {
- Skip_L4( "Opaque3 - 0x06002026");
- Skip_L4( "Opaque3 - 0x00000000 [1]");
- Skip_L2( "Opaque3 - 0x0000");
- Skip_L4( "Opaque3 - Unknown [1]");
- Skip_L4( "Opaque3 - Unknown [2]");
- if (Opaque2_Length<0x16)
- {
- if (Opaque2_Length-0x12)
- Skip_XX(Opaque2_Length-0x12, "Opaque3 - Unknown [3]");
- }
- else
- {
- Skip_L4( "Opaque3 - 0x00000000 [2]");
- if (Opaque2_Length>0x16)
- Skip_XX(Opaque2_Length-0x16, "Opaque3 - Unknown [4]");
- }
- }
- Skip_L3( "0x00025A [3]");
- Get_L4 (Opaque2_Length, "0x00000015 (Opaque4 length?) or something else");
- if (Opaque2_Length==0x00000015)
- {
- Skip_L4( "0x075A2032");
- Skip_L4( "0x00000C00");
- Skip_L4( "0x01204200");
- Skip_L4( "0x00000000 or 0x01000000");
- Skip_L4( "Unknown [13]");
- Skip_L1( "0x00 [3]");
- Skip_L3( "0x00025A [4]");
- Skip_L4( "Unknown [14]");
- }
- Skip_L4( "Unknown [15]");
- Skip_L4( "0x015A0000");
- Skip_L4( "Unknown [16]");
- Skip_L4( "Unknown [17]");
- Skip_L4( "0x01000000");
- Get_L4 (FileName_Count, "File name count");
- if (13*FileName_Count>Element_Size)
- {
- Reject();
- return;
- }
- Get_L4 (Directory_Length, "Directory length");
- Get_UTF8(Directory_Length, Directory, "Directory");
- Skip_L4( "0x00000000 [11]");
- Element_Begin1("File names");
- vector<int8u> Roles;
- vector<Ztring> FileNames;
- vector<Ztring> FileNamesLowerCase;
- vector<int32u> Purposes;
- for (int32u Pos=0; Pos<FileName_Count; Pos++)
- {
- Ztring FileName;
- int32u FileName_Length, Purpose;
- int8u Role; //
- Element_Begin1("File names");
- Get_L1 (Role, "role? (0x02 for WAV files)");
- Skip_L4( "Ordered number except WAV files and -1");
- Get_L4 (FileName_Length, "File Name length");
- Get_UTF8(FileName_Length, FileName, "File Name"); Element_Name(FileName);
- Get_C4 (Purpose, "Purpose (e.g. EVAW for .wav files)"); //Found 1 .wav file without "EWAV".
- Element_End();
-
- Roles.push_back(Role);
- FileNames.push_back(FileName);
- FileName.MakeLowerCase();
- FileNamesLowerCase.push_back(FileName);
- Purposes.push_back(Purpose);
- }
- Element_End();
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- FILLING_BEGIN();
- Accept("Ptx"); //Could be Ptf (former format but not supported, so we don't care currently)
- Fill("Ptx");
- Fill(Stream_General, 0, General_Format, "Pro Tools Session");
- Fill(Stream_General, 0, General_Format_Version, "Version 10");
- Fill(Stream_General, 0, General_Encoded_Library_Name, LibraryName);
- Fill(Stream_General, 0, General_Encoded_Library_Version, LibraryVersion);
-
- // Role==2 + Purpose==EWAV + listed
- if (Names.size()>1 || FileNames.size()==1)
- {
- size_t Pos_Offset=0;
- for (int32u Pos=0; Pos<FileName_Count; Pos++)
- {
- if (Roles[Pos]==0x02
- && Purposes[Pos]==0x45564157 //"EWAV"
- && Pos-Pos_Offset<Names.size()
- && FileNames[Pos]!=__T("1 kHz @ -20dB.wav") //Exception?
- && FileNames[Pos]!=__T("1K@-20db.wav") //Exception?
- && FileNames[Pos]!=__T("1K@0VU-20REF.wav") //Exception?
- && FileNames[Pos]!=__T("1k@0vu -20.wav") //Exception?
- && FileNames[Pos]!=__T("1Khz@-20dB.wav") //Exception?
- && FileNames[Pos].find(__T(".1Khz.wav"))==string::npos //Exception?
- && FileNames[Pos].find(__T("_1KTONE_"))==string::npos //Exception?
- && FileNamesLowerCase[Pos].find(Names[Pos-Pos_Offset]+__T(".wav"))!=string::npos
- && FileNamesLowerCase[Pos].find(Names[Pos-Pos_Offset]+__T(".wav"))+Names[Pos-Pos_Offset].size()+4==FileNames[Pos].size())
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.StreamKind=Stream_Audio;
- ReferenceFile.FileNames.push_back(Directory+PathSeparator+FileNames[Pos]);
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- else if (ReferenceFiles->References.empty())
- Pos_Offset++;
- }
-
- if (Names.size()!=ReferenceFiles->References.size())
- ReferenceFiles->References.clear(); //Failed to detect correctly
- }
-
- // Role==2 + listed
- if (ReferenceFiles->References.empty() && (Names.size()>1 || FileNames.size()==1))
- {
- size_t Pos_Offset=0;
- for (int32u Pos=0; Pos<FileName_Count; Pos++)
- {
- if (Roles[Pos]==0x02
- && Pos-Pos_Offset<Names.size()
- && FileNames[Pos]!=__T("1 kHz @ -20dB.wav") //Exception?
- && FileNames[Pos]!=__T("1K@-20db.wav") //Exception?
- && FileNames[Pos]!=__T("1K@0VU-20REF.wav") //Exception?
- && FileNames[Pos]!=__T("1k@0vu -20.wav") //Exception?
- && FileNames[Pos]!=__T("1Khz@-20dB.wav") //Exception?
- && FileNames[Pos].find(__T(".1Khz.wav"))==string::npos //Exception?
- && FileNames[Pos].find(__T("_1KTONE_"))==string::npos) //Exception?
- {
- Ztring FileName=FileNames[Pos];
- Ztring Name=Names[Pos-Pos_Offset];
- FileName.MakeLowerCase();
- Name.MakeLowerCase();
- if (FileName.find(Name)==0
- || FileName.find(Name+__T(".wav"))+5==Name.size())
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.StreamKind=Stream_Audio;
- ReferenceFile.FileNames.push_back(Directory+PathSeparator+FileNames[Pos]);
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- else if (ReferenceFiles->References.empty())
- Pos_Offset++;
- }
- else if (ReferenceFiles->References.empty())
- Pos_Offset++;
- }
-
- if (Names.size()!=ReferenceFiles->References.size())
- ReferenceFiles->References.clear(); //Failed to detect correctly
- }
-
- // Role==2 + Purpose==EWAV + listed, special case with specific file names
- if (ReferenceFiles->References.empty() && (Names.size()>1 || FileNames.size()==1))
- {
- for (int32u Pos=0; Pos<FileName_Count; Pos++)
- {
- if (Roles[Pos]==0x02
- && Purposes[Pos]==0x45564157 //"EWAV"
- && FileNames[Pos]!=__T("1 kHz @ -20dB.wav") //Exception?
- && FileNames[Pos]!=__T("1K@-20db.wav") //Exception?
- && FileNames[Pos]!=__T("1K@0VU-20REF.wav") //Exception?
- && FileNames[Pos]!=__T("1k@0vu -20.wav") //Exception?
- && FileNames[Pos]!=__T("1Khz@-20dB.wav") //Exception?
- && FileNames[Pos].find(__T(".1Khz.wav"))==string::npos //Exception?
- && FileNames[Pos].find(__T("_1KTONE_"))==string::npos) //Exception?
- {
- for (int32u Pos2=0; Pos2<Names.size(); Pos2++)
- if (FileNamesLowerCase[Pos].find(Names[Pos2])==0)
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.StreamKind=Stream_Audio;
- ReferenceFile.FileNames.push_back(Directory+PathSeparator+FileNames[Pos]);
- ReferenceFiles->References.push_back(ReferenceFile);
- break;
- }
- }
- }
- }
-
- // Role==2 + Purpose==EWAV
- if (ReferenceFiles->References.empty())
- {
- for (int32u Pos=0; Pos<FileName_Count; Pos++)
- {
- if (Roles[Pos]==0x02
- && Purposes[Pos]==0x45564157 //"EWAV"
- && FileNames[Pos]!=__T("1 kHz @ -20dB.wav") //Exception?
- && FileNames[Pos]!=__T("1K@-20db.wav") //Exception?
- && FileNames[Pos]!=__T("1K@0VU-20REF.wav") //Exception?
- && FileNames[Pos]!=__T("1k@0vu -20.wav") //Exception?
- && FileNames[Pos]!=__T("1Khz@-20dB.wav") //Exception?
- && FileNames[Pos].find(__T(".1Khz.wav"))==string::npos //Exception?
- && FileNames[Pos].find(__T("_1KTONE_"))==string::npos) //Exception?
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.StreamKind=Stream_Audio;
- ReferenceFile.FileNames.push_back(Directory+PathSeparator+FileNames[Pos]);
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- }
- }
-
- // Role==2
- if (ReferenceFiles->References.empty())
- {
- for (int32u Pos=0; Pos<FileName_Count; Pos++)
- {
- if (Roles[Pos]==0x02
- && FileNames[Pos]!=__T("1 kHz @ -20dB.wav") //Exception?
- && FileNames[Pos]!=__T("1K@-20db.wav") //Exception?
- && FileNames[Pos]!=__T("1K@0VU-20REF.wav") //Exception?
- && FileNames[Pos]!=__T("1k@0vu -20.wav") //Exception?
- && FileNames[Pos]!=__T("1Khz@-20dB.wav") //Exception?
- && FileNames[Pos].find(__T(".1Khz.wav"))==string::npos //Exception?
- && FileNames[Pos].find(__T("_1KTONE_"))==string::npos) //Exception?
- {
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.StreamKind=Stream_Audio;
- ReferenceFile.FileNames.push_back(Directory+PathSeparator+FileNames[Pos]);
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- }
- }
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_PTX_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ptx.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ptx.h
deleted file mode 100644
index 3b0748003..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Ptx.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Pro Tools session 10 files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_PtxH
-#define MediaInfo_File_PtxH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_Ptx
-//***************************************************************************
-
-class File_Ptx : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Ptx();
- ~File_Ptx();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- void Read_Buffer_Continue ();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
- bool HasCpl;
- friend class File_DpcCpl; //Theses classes need access to internal structure for optimization. There is recursivity with theses formats
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff.cpp
deleted file mode 100644
index e77b14bfd..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff.cpp
+++ /dev/null
@@ -1,1023 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_RIFF_YES
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Riff.h"
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_DTS_YES)
- #include "MediaInfo/Audio/File_Dts.h"
-#endif
-#if defined(MEDIAINFO_DVDIF_YES)
- #include "MediaInfo/Multiple/File_DvDif.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#include <ZenLib/File.h>
-#include <ZenLib/Utils.h>
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-namespace Elements
-{
- const int32u AIFF_SSND=0x53534E44;
- const int32u AVI_=0x41564920;
- const int32u AVI__hdlr_strl_strh_txts=0x74787473;
- const int32u FORM=0x464F524D;
- const int32u LIST=0x4C495354;
- const int32u MThd=0x4D546864;
- const int32u ON2_=0x4F4E3220;
- const int32u ON2f=0x4F4E3266;
- const int32u RIFF=0x52494646;
- const int32u riff=0x72696666;
- const int32u RF64=0x52463634;
- const int32u SMV0=0x534D5630;
- const int32u SMV0_xxxx=0x534D563A;
- const int32u W3DI=0x57334449;
- const int32u WAVE=0x57415645;
- const int32u WAVE_data=0x64617461;
- const int32u WAVE_ds64=0x64733634;
-}
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Riff::File_Riff()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Riff;
- StreamIDs_Width[0]=4;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- DataMustAlwaysBeComplete=false;
-
- //In/Out
- #if defined(MEDIAINFO_ANCILLARY_YES)
- Ancillary=NULL;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
-
- //Data
- Interleaved0_1=0;
- Interleaved0_10=0;
- Interleaved1_1=0;
- Interleaved1_10=0;
-
- //Temp
- WAVE_data_Size=0xFFFFFFFF;
- WAVE_fact_samplesCount=0xFFFFFFFF;
- Buffer_DataToParse_Begin=(int64u)-1;
- Buffer_DataToParse_End=0;
- #if MEDIAINFO_DEMUX
- AvgBytesPerSec=0;
- #endif //!MEDIAINFO_DEMUX
- avih_FrameRate=0;
- avih_TotalFrame=0;
- dmlh_TotalFrame=0;
- Idx1_Offset=(int64u)-1;
- movi_Size=0;
- TimeReference=(int64u)-1;
- SMV_BlockSize=0;
- SamplesPerSec=0;
- stream_Count=0;
- rec__Present=false;
- NeedOldIndex=true;
- IsBigEndian=false;
- IsWave64=false;
- IsRIFF64=false;
- IsWaveBroken=false;
- IsNotWordAligned=false;
- IsNotWordAligned_Tested=false;
- SecondPass=false;
- DV_FromHeader=NULL;
- Kind=Kind_None;
- #if MEDIAINFO_DEMUX
- Demux_Parser=NULL;
- #endif //MEDIAINFO_DEMUX
-
- //Pointers
- Stream_Structure_Temp=Stream_Structure.end();
-}
-
-//---------------------------------------------------------------------------
-File_Riff::~File_Riff()
-{
- #ifdef MEDIAINFO_DVDIF_YES
- delete (File_DvDif*)DV_FromHeader; //DV_FromHeader=NULL
- #endif //MEDIAINFO_DVDIF_YES
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Riff::Streams_Finish ()
-{
- //Ancillary specific
- #if defined(MEDIAINFO_ANCILLARY_YES)
- if (Ancillary && (*Ancillary))
- {
- Clear();
- Stream_Prepare(Stream_General);
- Finish(*Ancillary);
- Merge(**Ancillary);
- Ztring LawRating=(*Ancillary)->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=(*Ancillary)->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- return;
- }
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
-
- //Global
- if (IsRIFF64)
- Fill(Stream_General, 0, General_Format_Profile, "RF64");
-
- //Time codes
- TimeCode_Fill(__T("ISMP"), INFO_ISMP);
- TimeCode_Fill(__T("Adobe tc_A"), Tdat_tc_A);
- TimeCode_Fill(__T("Adobe tc_O"), Tdat_tc_O);
-
- //For each stream
- std::map<int32u, stream>::iterator Temp=Stream.begin();
- while (Temp!=Stream.end())
- {
- //Preparing
- StreamKind_Last=Temp->second.StreamKind;
- StreamPos_Last=Temp->second.StreamPos;
-
- //StreamSize
- if (Temp->second.StreamSize>0)
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize), Temp->second.StreamSize);
-
- //When there are few frames, difficult to detect PCM
- if (Temp->second.IsPcm && !Temp->second.Parsers.empty() && !Temp->second.Parsers[0]->Status[IsAccepted])
- {
- for (size_t Pos=0; Pos<Temp->second.Parsers.size()-1; Pos++)
- delete Temp->second.Parsers[Pos];
- Temp->second.Parsers.erase(Temp->second.Parsers.begin(), Temp->second.Parsers.begin()+Temp->second.Parsers.size()-1);
- Temp->second.Parsers[0]->Accept();
- }
-
- //PAR
- if (PAR && StreamKind_Last==Stream_Video)
- Fill(Stream_Video, StreamPos_Last, Video_PixelAspectRatio, PAR);
-
- Ztring ID;
- if (Temp->first!=(int32u)-1)
- ID.From_Number(((Temp->first>>24)-'0')*10+(((Temp->first>>16)&0xFF)-'0'));
-
- //Parser specific
- if (Temp->second.Parsers.size()==1)
- {
- //Finalizing and Merging (except Video codec and 120 fps hack)
- Temp->second.Parsers[0]->ShouldContinueParsing=false;
-
- //Hack - Before
- Ztring StreamSize, Codec_Temp;
- if (StreamKind_Last==Stream_Video)
- Codec_Temp=Retrieve(Stream_Video, StreamPos_Last, Video_Codec); //We want to keep the 4CC of AVI
- StreamSize=Retrieve(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize)); //We want to keep the 4CC of AVI
-
- //Merging
- if (Config->ParseSpeed<=1.0)
- {
- Fill(Temp->second.Parsers[0]);
- Temp->second.Parsers[0]->Open_Buffer_Unsynch();
- }
- Finish(Temp->second.Parsers[0]);
-
- if (!Temp->second.Parsers.empty() && Temp->second.Parsers[0]->Count_Get(StreamKind_Last))
- {
- //Special case: Compressed audio hidden in PCM
- if (StreamKind_Last==Stream_Audio
- && Temp->second.Compression==1
- && Retrieve(Stream_General, 0, General_Format)==__T("Wave")
- && Temp->second.Parsers[0]->Get(Stream_Audio, 0, Audio_Format)!=__T("PCM")) //Some DTS or SMPTE ST 337 streams are coded "1"
- Clear(Stream_Audio, 0, Audio_Channel_s_);
-
- size_t StreamPos_Base=StreamPos_Last;
- for (size_t Pos=0; Pos<Temp->second.Parsers[0]->Count_Get(StreamKind_Last); Pos++)
- {
- Ztring Temp_ID=ID;
- Ztring Temp_ID_String=ID;
- Merge(*Temp->second.Parsers[0], StreamKind_Last, Pos, StreamPos_Base+Pos);
- if (!Retrieve(StreamKind_Last, StreamPos_Last, General_ID).empty())
- {
- if (!Temp_ID.empty())
- {
- Temp_ID+=__T('-');
- Temp_ID_String+=__T('-');
- }
- Temp_ID+=Retrieve(StreamKind_Last, StreamPos_Last, General_ID);
- Temp_ID_String+=Retrieve(StreamKind_Last, StreamPos_Last, General_ID);
- }
- Fill(StreamKind_Last, StreamPos_Last, General_ID, Temp_ID, true);
- Fill(StreamKind_Last, StreamPos_Last, General_StreamOrder, Temp_ID_String, true);
-
-
- //Special case - MPEG Video + Captions
- if (StreamKind_Last==Stream_Video && Temp->second.Parsers[0]->Count_Get(Stream_Text))
- {
- //Video and Text are together
- size_t Parser_Text_Count=Temp->second.Parsers[0]->Count_Get(Stream_Text);
- for (size_t Parser_Text_Pos=0; Parser_Text_Pos<Parser_Text_Count; Parser_Text_Pos++)
- {
- size_t StreamPos_Video=StreamPos_Last;
- Fill_Flush();
- Stream_Prepare(Stream_Text);
- Temp->second.Parsers[0]->Finish();
- Merge(*Temp->second.Parsers[0], Stream_Text, Parser_Text_Pos, StreamPos_Last);
- Fill(Stream_Text, StreamPos_Last, Text_Duration, Retrieve(Stream_Video, StreamPos_Video, Video_Duration));
- Ztring ID=Retrieve(Stream_Text, StreamPos_Last, Text_ID);
- Fill(Stream_Text, StreamPos_Last, Text_ID, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_ID)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_ID_String, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_ID_String)+__T("-")+ID, true);
- Fill(Stream_Text, StreamPos_Last, Text_Title, Retrieve(Stream_Video, Count_Get(Stream_Video)-1, Video_Title), true);
- Fill(Stream_Text, StreamPos_Last, "MuxingMode_MoreInfo", __T("Muxed in Video #")+Ztring().From_Number(Count_Get(Stream_Video)), true);
- }
-
- StreamKind_Last=Stream_Video;
- StreamPos_Last=Count_Get(Stream_Video)-1;
- }
- }
- }
- else
- {
- Fill(StreamKind_Last, StreamPos_Last, General_ID, ID, true);
- Fill(StreamKind_Last, StreamPos_Last, General_StreamOrder, ID, true);
- }
-
- //Hacks - After
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_StreamSize), StreamSize, true);
- if (StreamKind_Last==Stream_Video)
- {
- if (!Codec_Temp.empty())
- Fill(Stream_Video, StreamPos_Last, Video_Codec, Codec_Temp, true);
-
- //120 fps hack
- const Ztring &FrameRate=Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate);
- if (FrameRate.To_int32u()==120)
- {
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_String, MediaInfoLib::Config.Language_Get(FrameRate+__T(" (24/30)"), __T(" fps")), true);
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Minimum, 24, 10, true);
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Maximum, 30, 10, true);
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Mode, "VFR");
- }
- }
-
- //Hack - SMPTE ST 337, RIFF channels count is wrong
- if (StreamKind_Last==Stream_Audio && Retrieve(Stream_Audio, StreamPos_Last, Audio_MuxingMode)==__T("AES3") && Temp->second.Parsers[0]->Get(Stream_Audio, 0, Audio_Channel_s_).empty())
- Clear(Stream_Audio, StreamPos_Last, Audio_Channel_s_);
-
- //Alignment
- if (StreamKind_Last==Stream_Audio && Count_Get(Stream_Video)>0) //Only if this is not a WAV file
- {
- Fill(Stream_Audio, StreamPos_Last, Audio_Alignment, Temp->second.ChunksAreComplete?"Aligned":"Split");
- Fill(Stream_Audio, StreamPos_Last, Audio_Alignment_String, MediaInfoLib::Config.Language_Get(Temp->second.ChunksAreComplete?__T("Alignment_Aligned"):__T("Alignment_Split")));
- }
-
- //Delay
- if (StreamKind_Last==Stream_Audio && Count_Get(Stream_Video)==1 && Temp->second.Rate!=0 && Temp->second.Parsers[0]->Status[IsAccepted])
- {
- float Delay=0;
- bool Delay_IsValid=false;
-
- if (Temp->second.Parsers[0]->Buffer_TotalBytes_FirstSynched==0)
- {
- Delay=0;
- Delay_IsValid=true;
- }
- else if (Temp->second.Rate!=0)
- {
- Delay=((float)Temp->second.Parsers[0]->Buffer_TotalBytes_FirstSynched)*1000/Temp->second.Rate;
- Delay_IsValid=true;
- }
- else if (Temp->second.Parsers[0]->Retrieve(Stream_Audio, 0, Audio_BitRate).To_int64u()!=0)
- {
- Delay=((float)Temp->second.Parsers[0]->Buffer_TotalBytes_FirstSynched)*1000/Temp->second.Parsers[0]->Retrieve(Stream_Audio, 0, Audio_BitRate).To_int64u();
- Delay_IsValid=true;
- }
- else if (Temp->second.Parsers[0]->Retrieve(Stream_Audio, 0, Audio_BitRate_Nominal).To_int64u()!=0)
- {
- Delay=((float)Temp->second.Parsers[0]->Buffer_TotalBytes_FirstSynched)*1000/Temp->second.Parsers[0]->Retrieve(Stream_Audio, 0, Audio_BitRate_Nominal).To_int64u();
- Delay_IsValid=true;
- }
-
- if (Delay_IsValid)
- {
- Delay+=((float)Temp->second.Start)*1000/Temp->second.Rate;
- Fill(Stream_Audio, StreamPos_Last, Audio_Delay, Delay, 0, true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Delay_Source, "Stream", Unlimited, true, true);
- for (size_t StreamPos=0; StreamPos<Count_Get(Stream_Video); StreamPos++)
- Fill(Stream_Video, StreamPos, Video_Delay, 0, 10, true);
- }
- }
-
- //Special case: AAC
- if (StreamKind_Last==Stream_Audio
- && (Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("AAC")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("MPEG Audio")
- || Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("Vorbis")))
- Clear(Stream_Audio, StreamPos_Last, Audio_BitDepth); //Resolution is not valid for AAC / MPEG Audio / Vorbis
-
- //Format specific
- #if defined(MEDIAINFO_DVDIF_YES)
- if (StreamKind_Last==Stream_Video && (MediaInfoLib::Config.Codec_Get(Ztring().From_CC4(Temp->second.Compression), InfoCodec_KindofCodec).find(__T("DV"))==0
- || Retrieve(Stream_Video, StreamPos_Last, Video_Format)==__T("DV")
- || Retrieve(Stream_Video, StreamPos_Last, Video_Codec)==__T("DV")))
- {
- if (Retrieve(Stream_General, 0, General_Recorded_Date).empty())
- Fill(Stream_General, 0, General_Recorded_Date, Temp->second.Parsers[0]->Retrieve(Stream_General, 0, General_Recorded_Date));
-
- //Video and Audio are together
- size_t Audio_Count=Temp->second.Parsers[0]->Count_Get(Stream_Audio);
- for (size_t Audio_Pos=0; Audio_Pos<Audio_Count; Audio_Pos++)
- {
- Fill_Flush();
- Stream_Prepare(Stream_Audio);
- size_t Pos=Count_Get(Stream_Audio)-1;
- Merge(*Temp->second.Parsers[0], Stream_Audio, Audio_Pos, StreamPos_Last);
- Fill(Stream_Audio, Pos, Audio_MuxingMode, "DV");
- Fill(Stream_Audio, Pos, Audio_Duration, Retrieve(Stream_Video, Temp->second.StreamPos, Video_Duration));
- Fill(Stream_Audio, Pos, "MuxingMode_MoreInfo", __T("Muxed in Video #")+Ztring().From_Number(Temp->second.StreamPos+1));
- Fill(Stream_Audio, Pos, Audio_StreamSize_Encoded, 0); //Included in the DV stream size
- Ztring ID=Retrieve(Stream_Audio, Pos, Audio_ID);
- Fill(Stream_Audio, Pos, Audio_ID, Retrieve(Stream_Video, Temp->second.StreamPos, Video_ID)+__T("-")+ID, true);
- }
-
- StreamKind_Last=Stream_Video;
- StreamPos_Last=Temp->second.StreamPos;
- }
- #endif
- }
- else if (StreamKind_Last!=Stream_General)
- Fill(StreamKind_Last, StreamPos_Last, General_ID, ID);
-
- //Duration
- if (Temp->second.PacketCount>0)
- {
- if (StreamKind_Last==Stream_Video) // && Retrieve(Stream_Video, StreamPos_Last, Video_Duration).empty())
- {
- //Duration in case it is missing from header (malformed header...)
- if (Temp->second.indx_Duration && Temp->second.Rate)
- Fill(Stream_Video, StreamPos_Last, Video_Duration, ((float64)Temp->second.indx_Duration)*1000*Temp->second.Scale/Temp->second.Rate, 0, true);
- else
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, Temp->second.PacketCount, 10, true);
- }
- if (StreamKind_Last==Stream_Audio)
- {
- //Duration in case it is missing from header (malformed header...)
- int64u SamplingCount=0;
- #if defined(MEDIAINFO_MPEGA_YES)
- if (Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("MPEG Audio"))
- {
- if (Temp->second.Parsers[0] && Temp->second.PacketPos==((File_Mpega*)Temp->second.Parsers[0])->Frame_Count_Valid) //Only for stream with one frame per chunk
- {
- Ztring Version=Retrieve(Stream_Audio, StreamPos_Last, Audio_Format_Version);
- Ztring Layer=Retrieve(Stream_Audio, StreamPos_Last, Audio_Format_Profile);
- if (Version==__T("Version 1") && Layer==__T("Layer 1"))
- SamplingCount = (int64u)Temp->second.PacketCount * 384; //MPEG-1 Layer 1
- else if ((Version==__T("Version 2") || Version==__T("Version 2.5")) && Layer==__T("Layer 1"))
- SamplingCount = (int64u)Temp->second.PacketCount * 192; //MPEG-2 or 2.5 Layer 1
- else if ((Version==__T("Version 2") || Version==__T("Version 2.5")) && Layer==__T("Layer 3"))
- SamplingCount = (int64u)Temp->second.PacketCount * 576; //MPEG-2 or 2.5 Layer 3
- else
- SamplingCount = (int64u)Temp->second.PacketCount * 1152;
- }
- }
- #endif
- if (Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("PCM"))
- {
- int64u Resolution=Retrieve(Stream_Audio, StreamPos_Last, Audio_BitDepth).To_int64u();
- int64u Channels=Retrieve(Stream_Audio, StreamPos_Last, Audio_Channel_s_).To_int64u();
- if (Resolution>0 && Channels>0)
- SamplingCount=Temp->second.StreamSize*8/Resolution/Channels;
- }
- if (Retrieve(Stream_Audio, StreamPos_Last, Audio_Format)==__T("ADPCM"))
- {
- int64u Resolution=Retrieve(Stream_Audio, StreamPos_Last, Audio_BitDepth).To_int64u();
- int64u Channels=Retrieve(Stream_Audio, StreamPos_Last, Audio_Channel_s_).To_int64u();
- if (Resolution>0 && Channels>0)
- SamplingCount=(int64u)(Temp->second.StreamSize*8/Resolution/Channels*0.98); //0.98 is not precise!
-
- //ADPCM estimation is not precise, if container sampling count is around our value, using it rather than the estimation
- float32 SamplingRate=Retrieve(Stream_Audio, StreamPos_Last, Audio_SamplingRate).To_float32();
- if (SamplingRate>0
- && SamplingCount*1000/SamplingRate<((float32)avih_TotalFrame)/avih_FrameRate*1000*1.10
- && SamplingCount*1000/SamplingRate>((float32)avih_TotalFrame)/avih_FrameRate*1000*0.10)
- SamplingCount=0; //Value disabled
- }
- //One AC-3 frame is 32 ms
- //One DTS frame is 21 ms
-
- float32 SamplingRate=Retrieve(Stream_Audio, StreamPos_Last, Audio_SamplingRate).To_float32();
- if (SamplingCount>0 && SamplingRate>0)
- Fill(Stream_Audio, StreamPos_Last, Audio_Duration, SamplingCount*1000/SamplingRate, 0, true);
- else if (Temp->second.indx_Duration && Temp->second.Rate)
- Fill(Stream_Audio, StreamPos_Last, Audio_Duration, ((float64)Temp->second.indx_Duration)*1000*Temp->second.Scale/Temp->second.Rate, 0, true);
- else if (Temp->second.Rate && Temp->second.Scale!=1) //Note: some files with Scale==1 are buggy
- Fill(Stream_Audio, StreamPos_Last, Audio_Duration, ((float64)Temp->second.Length)*1000*Temp->second.Scale/Temp->second.Rate, 0, true);
-
- //Interleave
- if (Stream[0x30300000].PacketCount && Temp->second.PacketCount)
- {
- Fill(Stream_Audio, StreamPos_Last, "Interleave_VideoFrames", (float)Stream[0x30300000].PacketCount/Temp->second.PacketCount, 2);
- if (Retrieve(Stream_Video, 0, Video_FrameRate).To_float32())
- {
- Fill(Stream_Audio, StreamPos_Last, "Interleave_Duration", (float)Stream[0x30300000].PacketCount/Temp->second.PacketCount*1000/Retrieve(Stream_Video, 0, Video_FrameRate).To_float32(), 0);
- Ztring Interleave_Duration_String;
- Interleave_Duration_String+=Retrieve(Stream_Audio, StreamPos_Last, "Interleave_Duration");
- Interleave_Duration_String+=__T(" ");
- Interleave_Duration_String+=MediaInfoLib::Config.Language_Get(__T("ms"));
- if (!Retrieve(Stream_Audio, StreamPos_Last, "Interleave_VideoFrames").empty())
- {
- Interleave_Duration_String+=__T(" (");
- Interleave_Duration_String+=MediaInfoLib::Config.Language_Get(Retrieve(Stream_Audio, StreamPos_Last, "Interleave_VideoFrames"), __T(" video frames"));
- Interleave_Duration_String+=__T(")");
- }
- Fill(Stream_Audio, StreamPos_Last, "Interleave_Duration/String", Interleave_Duration_String);
- }
- int64u Audio_FirstBytes=0;
- for (std::map<int64u, stream_structure>::iterator Stream_Structure_Temp=Stream_Structure.begin(); Stream_Structure_Temp!=Stream_Structure.end(); ++Stream_Structure_Temp)
- {
- if (Stream_Structure_Temp->second.Name==0x30300000)
- break;
- if (Stream_Structure_Temp->second.Name==Temp->first)
- Audio_FirstBytes+=Stream_Structure_Temp->second.Size;
- }
- if (Audio_FirstBytes && Temp->second.AvgBytesPerSec)
- {
- Fill(Stream_Audio, StreamPos_Last, "Interleave_Preload", Audio_FirstBytes*1000/Temp->second.AvgBytesPerSec);
- Fill(Stream_Audio, StreamPos_Last, "Interleave_Preload/String", Retrieve(Stream_Audio, StreamPos_Last, "Interleave_Preload")+__T(" ")+MediaInfoLib::Config.Language_Get(__T("ms")));
- }
- }
- }
-
- //Source duration
- if (Temp->second.PacketCount && Temp->second.Length!=Temp->second.PacketCount)
- {
- if (StreamKind_Last==Stream_Video && Temp->second.Rate)
- Fill(Stream_Video, StreamPos_Last, "Source_Duration", ((float64)Temp->second.PacketCount)*1000*Temp->second.Scale/Temp->second.Rate, 0);
- if (StreamKind_Last==Stream_Audio && Temp->second.Rate)
- {
- float64 Duration_Source=((float64)Temp->second.StreamSize)*1000/Temp->second.AvgBytesPerSec;
- float64 Duration_Header=Retrieve(Stream_Audio, StreamPos_Last, Audio_Duration).To_float64();
- float64 Difference=Duration_Source-Duration_Header;
- if (Temp->second.Scale!=1 && float64_int64s(Duration_Header/Duration_Source)==Temp->second.Scale)
- Fill(Stream_Audio, StreamPos_Last, Audio_Duration, Duration_Source, 0, true); //Found 1 stream with Scale not being right
- else if (Difference<-2 || Difference>2) //+/- 2 ms
- Fill(Stream_Audio, StreamPos_Last, "Source_Duration", Duration_Source, 0);
- }
- }
- }
-
- ++Temp;
- }
-
- //Some work on the first video stream
- if (Count_Get(Stream_Video))
- {
- //ODML
- if (dmlh_TotalFrame!=0 && Retrieve(Stream_Video, 0, Video_Duration).empty())
- for (size_t StreamPos=0; StreamPos<Count_Get(Stream_Video); StreamPos++)
- Fill(Stream_Video, StreamPos, Video_FrameCount, dmlh_TotalFrame, 10, true);
- }
-
- //Rec
- if (rec__Present)
- Fill(Stream_General, 0, General_Format_Settings, "rec");
-
- //Interleaved
- if (Interleaved0_1 && Interleaved0_10 && Interleaved1_1 && Interleaved1_10)
- Fill(Stream_General, 0, General_Interleaved, ((Interleaved0_1<Interleaved1_1 && Interleaved0_10>Interleaved1_1)
- || (Interleaved1_1<Interleaved0_1 && Interleaved1_10>Interleaved0_1))?"Yes":"No");
-
- //MD5
- size_t Pos=0;
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Count_Get((stream_t)StreamKind); StreamPos++)
- if (Pos<MD5s.size())
- {
- Fill((stream_t)StreamKind, StreamPos, "MD5", MD5s[Pos]);
- Pos++;
- }
-
- //Commercial names
- if (Count_Get(Stream_Video)==1)
- {
- Streams_Finish_StreamOnly();
- if (!Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny).empty())
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny));
- Fill(Stream_General, 0, General_Format_Commercial, __T("AVI ")+Retrieve(Stream_Video, 0, Video_Format_Commercial_IfAny));
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("DV"))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "DV");
- Fill(Stream_General, 0, General_Format_Commercial, "AVI DV");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)==__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:2") && Retrieve(Stream_Video, 0, Video_BitRate)==__T("30000000"))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "MPEG IMX 30");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "MPEG IMX 30");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)==__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:2") && Retrieve(Stream_Video, 0, Video_BitRate)==__T("40000000"))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "MPEG IMX 40");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "MPEG IMX 40");
- }
- else if (Retrieve(Stream_Video, 0, Video_Format)==__T("MPEG Video") && Retrieve(Stream_Video, 0, Video_Format_Settings_GOP)==__T("N=1") && Retrieve(Stream_Video, 0, Video_Colorimetry)==__T("4:2:2") && Retrieve(Stream_Video, 0, Video_BitRate)==__T("50000000"))
- {
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, "MPEG IMX 50");
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "MPEG IMX 50");
- }
- }
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Riff::Read_Buffer_Init()
-{
- #if MEDIAINFO_DEMUX
- Demux_UnpacketizeContainer=Config->Demux_Unpacketize_Get();
- Demux_Rate=Config->Demux_Rate_Get();
- if (Demux_Rate==0)
- Demux_Rate=25; //Default value
- #endif //MEDIAINFO_DEMUX
-
- PAR=0;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Riff::Read_Buffer_Seek (size_t Method, int64u Value, int64u /*ID*/)
-{
- //Only Wave and AIFF
- switch (Kind)
- {
- case Kind_Wave :
- case Kind_Aiff :
- break;
- default : return (size_t)-1;
- }
-
- //Parsing
- switch (Method)
- {
- case 0 :
- if (Value<Buffer_DataToParse_Begin)
- Value=Buffer_DataToParse_Begin;
- if (Value>Buffer_DataToParse_End)
- Value=Buffer_DataToParse_End;
- GoTo(Value);
- Open_Buffer_Unsynch();
- return 1;
- case 1 :
- GoTo(Buffer_DataToParse_Begin+(Buffer_DataToParse_End-Buffer_DataToParse_Begin)*Value/10000);
- Open_Buffer_Unsynch();
- return 1;
- case 2 : //Timestamp
- {
- if (AvgBytesPerSec==0)
- return (size_t)-1;
-
- float64 ValueF=(float64)Value;
- ValueF/=1000000000; //Value is in ns
- ValueF*=AvgBytesPerSec;
- GoTo(Buffer_DataToParse_Begin+float64_int64s(ValueF));
- return 1;
- }
- case 3 : //FrameNumber
- {
- if (AvgBytesPerSec==0 || Demux_Rate==0 || BlockAlign==0)
- return (size_t)-1;
-
- float64 BytesPerFrame=AvgBytesPerSec/Demux_Rate;
- int64u StreamOffset=(int64u)(Value*BytesPerFrame);
- StreamOffset/=BlockAlign;
- StreamOffset*=BlockAlign;
-
- GoTo(Buffer_DataToParse_Begin+StreamOffset);
- return 1;
- }
- default : return (size_t)-1; //Not supported
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-void File_Riff::Read_Buffer_Unsynched()
-{
- for (std::map<int32u, stream>::iterator Stream_Item=Stream.begin(); Stream_Item!=Stream.end(); ++Stream_Item)
- for (size_t Pos=0; Pos<Stream_Item->second.Parsers.size(); Pos++)
- Stream_Item->second.Parsers[Pos]->Open_Buffer_Unsynch();
-
- if (IsSub)
- {
- while(Element_Level)
- Element_End0();
-
- #if defined(MEDIAINFO_ANCILLARY_YES)
- //Ancillary specific
- if (Ancillary && (*Ancillary))
- (*Ancillary)->Open_Buffer_Unsynch();
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
- }
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-void File_Riff::Read_Buffer_Continue()
-{
- if (Demux_Parser)
- {
- Open_Buffer_Continue(Demux_Parser, Buffer+Buffer_Offset, 0, false);
- Demux_Parser=NULL;
- //if (Config->Demux_EventWasSent)
- // return;
- }
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Riff::Header_Begin()
-{
- while (File_Offset+Buffer_Offset<Buffer_DataToParse_End)
- {
- #if MEDIAINFO_DEMUX
- if (AvgBytesPerSec && Demux_Rate && BlockAlign)
- {
- float64 BytesPerFrame=((float64)AvgBytesPerSec)/Demux_Rate;
- Frame_Count_NotParsedIncluded=float64_int64s(((float64)(File_Offset+Buffer_Offset-Buffer_DataToParse_Begin))/BytesPerFrame);
- Element_Size=float64_int64s(BytesPerFrame*(Frame_Count_NotParsedIncluded+1));
- Element_Size/=BlockAlign;
- Element_Size*=BlockAlign;
- Element_Size-=File_Offset+Buffer_Offset-Buffer_DataToParse_Begin;
- FrameInfo.PTS=FrameInfo.DTS=float64_int64s(((float64)Frame_Count_NotParsedIncluded)*1000000000/Demux_Rate);
- while (Element_Size && File_Offset+Buffer_Offset+Element_Size>Buffer_DataToParse_End)
- Element_Size-=BlockAlign;
- if (Element_Size==0)
- Element_Size=BlockAlign;
- if (Buffer_Offset+Element_Size>Buffer_Size)
- return false;
- }
- else
- #endif //MEDIAINFO_DEMUX
- if (File_Offset+Buffer_Size<=Buffer_DataToParse_End)
- Element_Size=Buffer_Size; //All the buffer is used
- else
- {
- Element_Size=File_Offset+Buffer_Size-Buffer_DataToParse_End;
- Buffer_DataToParse_End=0;
- }
-
- if (Buffer_Offset+(size_t)Element_Size>Buffer_Size)
- return false;
-
- // Fake header
- Element_Begin0();
- Element_Begin0();
- Header_Fill_Size(Buffer_DataToParse_End-(File_Offset+Buffer_Offset));
- Element_End();
-
- switch (Kind)
- {
- case Kind_Wave : WAVE_data_Continue(); break;
- case Kind_Aiff : AIFF_SSND_Continue(); break;
- case Kind_Rmp3 : RMP3_data_Continue(); break;
- default : AVI__movi_xxxx();
- }
-
- if (Config->ParseSpeed<1.0 && File_Offset+Buffer_Offset+Element_Offset-Buffer_DataToParse_Begin>=256*1024)
- {
- File_GoTo=Buffer_DataToParse_End;
- Buffer_Offset=Buffer_Size;
- Element_Size=0;
- }
- else
- {
- Buffer_Offset+=(size_t)Element_Size;
- Element_Size-=Element_Offset;
- }
- Element_Offset=0;
- Element_End0();
-
- if (Status[IsFinished] || (File_GoTo!=(int64u)-1 && (File_GoTo<=Buffer_DataToParse_Begin || File_GoTo>=Buffer_DataToParse_End)))
- {
- Buffer_DataToParse_Begin=(int64u)-1;
- Buffer_DataToParse_End=0;
- return false;
- }
-
- if (Buffer_Offset>=Buffer_Size)
- return false;
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- return false;
- #endif //MEDIAINFO_DEMUX
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::Header_Parse()
-{
- //Special case : W3DI tags (unknown format!) are at the end of the file
- if (Element_Level==2 && File_Offset+Buffer_Size==File_Size && Buffer_Size>8)
- {
- if (CC4(Buffer+Buffer_Size-4)==Elements::W3DI)
- {
- int32u Size=LittleEndian2int32u(Buffer+Buffer_Size-8);
- if (Size>8 && Size<=Buffer_Size && Buffer_Offset+Size==Buffer_Size)
- {
- //Filling
- Header_Fill_Code(Elements::W3DI, "W3DI");
- Header_Fill_Size(Size);
- return;
- }
- }
- }
-
- //Special case : SMV file detected
- if (SMV_BlockSize)
- {
- //Filling
- Header_Fill_Code(Elements::SMV0_xxxx, "SMV Block");
- Header_Fill_Size(SMV_BlockSize);
- return;
- }
-
- //Parsing
- int32u Size, Name;
- Get_C4 (Name, "Name");
- if (Name==Elements::SMV0)
- {
- //SMV specific
- //Filling
- Header_Fill_Code(Elements::SMV0, "SMV header");
- Header_Fill_Size(51);
- return;
- }
- if (Name==Elements::riff)
- IsWave64=true;
- if (IsWave64)
- {
- //Wave64 specific
- int64u Size_Complete;
- Skip_XX(12, "Name (GUID)");
- Get_L8 (Size_Complete, "Size");
-
- //Alignment
- if (Name!=Elements::riff && Size_Complete%8)
- {
- Alignement_ExtraByte=Size_Complete%8;
- Size_Complete+=Alignement_ExtraByte; //Always 8-byte aligned
- }
- else
- Alignement_ExtraByte=0;
-
- //Top level chunks
- if (Name==Elements::riff)
- {
- Get_C4 (Name, "Real Name");
- Skip_XX(12, "Real Name (GUID)");
- }
-
- //Special case: we don't need the full data
- if (Name==Elements::WAVE_data)
- {
- Buffer_DataToParse_Begin=File_Offset+Buffer_Offset;
- if (Size_Complete)
- Buffer_DataToParse_End=File_Offset+Buffer_Offset+Size_Complete;
- else
- Buffer_DataToParse_End=File_Size; //Found one file with 0 as size of data part
- Size_Complete=Element_Offset;
- }
-
- //Filling
- Header_Fill_Code(Name, Ztring().From_CC4(Name));
- Header_Fill_Size(Size_Complete);
- return;
- }
- if (Name==Elements::FORM
- || Name==Elements::MThd)
- IsBigEndian=true; //Swap from Little to Big Endian for "FORM" files (AIFF...)
- if (IsBigEndian)
- Get_B4 (Size, "Size");
- else
- {
- Get_L4 (Size, "Size");
-
- //Testing malformed (not word aligned)
- if (!IsNotWordAligned_Tested && Size%2)
- {
- if (File_Offset+Buffer_Offset+8+Size==File_Size)
- IsNotWordAligned=true;
- else if (!File_Name.empty())
- {
- File F(File_Name);
- F.GoTo(File_Offset+Buffer_Offset+8+Size);
- int8u Temp;
- if (F.Read(&Temp, 1))
- {
- if (!((Temp<'A' || Temp>'z') && Temp!=' '))
- IsNotWordAligned=true;
- }
- }
- IsNotWordAligned_Tested=true;
- }
- }
-
- //RF64
- int64u Size_Complete=Size;
- if (Size==0 && Name==Elements::RIFF)
- Size_Complete=File_Size-8;
- else if (Size==0xFFFFFFFF)
- {
- if (Element_Size<0x1C)
- {
- Element_WaitForMoreData();
- return;
- }
- if (Name==Elements::RF64 && CC4(Buffer+Buffer_Offset+0x0C)==Elements::WAVE_ds64)
- {
- Size_Complete=LittleEndian2int64u(Buffer+Buffer_Offset+0x14);
- Param_Info1(Size_Complete);
- }
- else if (Name==Elements::WAVE_data)
- {
- Size_Complete=WAVE_data_Size;
- Param_Info1(Size_Complete);
- }
- }
-
- //Coherency
- if (Stream_Structure_Temp!=Stream_Structure.end() && Stream_Structure_Temp->second.Size==0)
- {
- Name=(int32u)-1;
- Size_Complete=0; //Hack in some indexes with Size==0 (why?), ignoring content of header
- }
- if (File_Offset+Buffer_Offset+8+Size_Complete>File_Size)
- Size_Complete=File_Size-(File_Offset+Buffer_Offset+8);
-
- //Alignment
- if (Size_Complete%2 && !IsNotWordAligned)
- {
- Size_Complete++; //Always 2-byte aligned
- Alignement_ExtraByte=1;
- }
- else
- Alignement_ExtraByte=0;
-
- //Top level chunks
- if (Name==Elements::LIST
- || Name==Elements::RIFF
- || Name==Elements::RF64
- || Name==Elements::ON2_
- || Name==Elements::FORM)
- {
- if (Name==Elements::RF64)
- IsRIFF64=true;
- Get_C4 (Name, "Real Name");
- }
-
- //Integrity
- if (Name==0x00000000)
- {
- //Filling
- Header_Fill_Code(0, "Junk");
- Header_Fill_Size(File_Size-(File_Offset+Buffer_Offset));
- Alignement_ExtraByte=0;
- return;
- }
-
- //Specific
- if (Name==Elements::ON2f)
- Name=Elements::AVI_;
-
- //Tests
- if (Element_Level==2 && Name==Elements::WAVE && !IsRIFF64 && File_Size>0xFFFFFFFF)
- IsWaveBroken=true; //Non standard big files detection
- if (IsWaveBroken && (Name==Elements::WAVE || Name==Elements::WAVE_data))
- Size_Complete=File_Size-(File_Offset+Buffer_Offset+8); //Non standard big files detection
- if (movi_Size && Size_Complete>movi_Size/2 && 8+Size_Complete>1024*1024 && !((Name&0xFFFF0000)==0x69780000 || (Name&0x0000FFFF)==0x00006978) && Element_Level==(rec__Present?(size_t)5:(size_t)4) && Buffer_Offset+8+Size_Complete>Buffer_Size)
- {
- Buffer_DataToParse_End=File_Offset+Buffer_Offset+8+Size_Complete;
- Size_Complete=Buffer_Size-(Buffer_Offset+8);
- }
- if ((Name==Elements::WAVE_data || Name==Elements::AIFF_SSND))
- {
- Buffer_DataToParse_Begin=File_Offset+Buffer_Offset+8;
- if (Size_Complete)
- Buffer_DataToParse_End=File_Offset+Buffer_Offset+8+Size_Complete;
- else
- Buffer_DataToParse_End=File_Size; //Found one file with 0 as size of data part
- Size_Complete=0;
- }
-
- //Filling
- Header_Fill_Code(Name, Ztring().From_CC4(Name));
- Header_Fill_Size(Size_Complete+8);
-}
-
-//---------------------------------------------------------------------------
-bool File_Riff::BookMark_Needed()
-{
- //Go to the first usefull chunk
- if (stream_Count==0 && Stream_Structure.empty())
- return false; //No need
-
- Stream_Structure_Temp=Stream_Structure.begin();
- if (!Stream_Structure.empty())
- {
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get())
- {
- GoTo(0);
- Md5_ParseUpTo=Stream_Structure_Temp->first;
- }
- else
- #endif //MEDIAINFO_MD5
- GoTo(Stream_Structure_Temp->first);
- }
- NeedOldIndex=false;
- SecondPass=true;
- Index_Pos.clear(); //We didn't succeed to find theses indexes :(
- return true;
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Riff::TimeCode_Fill(const Ztring &Name, const Ztring &Value)
-{
- if (Value.empty())
- return;
-
- for (size_t StreamPos=0; StreamPos<Count_Get(Stream_Video); StreamPos++)
- {
- Fill(Stream_Video, StreamPos, Video_TimeCode_FirstFrame, Value);
- Fill(Stream_Video, StreamPos, Video_TimeCode_Source, Name);
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_RIFF_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff.h
deleted file mode 100644
index b73c543f1..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about RIFF files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_RiffH
-#define MediaInfo_File_RiffH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#if defined(MEDIAINFO_ANCILLARY_YES)
- #include <MediaInfo/Multiple/File_Ancillary.h>
-#endif //defined(MEDIAINFO_ANCILLARY_YES)
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Riff
-//***************************************************************************
-
-class File_Riff : public File__Analyze
-{
-public :
- //In/Out
- #if defined(MEDIAINFO_ANCILLARY_YES)
- File_Ancillary** Ancillary;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
-
-protected :
- //Streams management
- void Streams_Finish();
-
-public :
- File_Riff();
- ~File_Riff();
-
-private :
- //Buffer - Global
- void Read_Buffer_Init();
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- #if MEDIAINFO_DEMUX
- void Read_Buffer_Continue ();
- #endif //MEDIAINFO_DEMUX
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
-
- bool BookMark_Needed();
-
- //Data
- struct stream
- {
- std::vector<File__Analyze*> Parsers;
- int32u fccType;
- int32u fccHandler;
- int32u Scale;
- int32u Rate;
- int32u Start;
- int32u Length;
- int32u Compression;
- stream_t StreamKind;
- size_t StreamPos;
- int32u AvgBytesPerSec;
- size_t PacketPos;
- size_t PacketCount;
- int64u StreamSize;
- int64u indx_Duration;
- bool SearchingPayload;
- bool Specific_IsMpeg4v;
- bool ChunksAreComplete;
- bool IsPcm;
-
- stream()
- {
- fccType=0x00000000;
- fccHandler=0x00000000;
- Scale=0;
- Rate=0;
- Start=0;
- Length=0;
- Compression=0x00000000;
- StreamKind=Stream_Max;
- StreamPos=0;
- AvgBytesPerSec=0;
- PacketPos=0;
- PacketCount=0;
- StreamSize=0;
- indx_Duration=0;
- SearchingPayload=true;
- Specific_IsMpeg4v=false;
- ChunksAreComplete=true;
- IsPcm=false;
- }
-
- ~stream()
- {
- for (size_t Pos=0; Pos<Parsers.size(); Pos++)
- delete Parsers[Pos]; //Parser=NULL;
- }
- };
- std::map<int32u, stream> Stream;
- int32u Stream_ID;
-
- struct stream_structure
- {
- int64u Name;
- int64u Size;
- };
- std::map<int64u, stream_structure> Stream_Structure;
- std::map<int64u, stream_structure>::iterator Stream_Structure_Temp;
- std::map<int64u, int64u> Index_Pos;
- int64u Interleaved0_1;
- int64u Interleaved0_10;
- int64u Interleaved1_1;
- int64u Interleaved1_10;
-
- //Temp
- Ztring INFO_ISMP;
- Ztring Tdat_tc_A;
- Ztring Tdat_tc_O;
- ZtringList MD5s;
- int64u WAVE_data_Size; //RF64 WAVE_data real chunk size
- int64u WAVE_fact_samplesCount; //RF64 WAVE_fact real samplesCount
- int64u Alignement_ExtraByte; //Padding from the container
- int64u Buffer_DataToParse_Begin;
- int64u Buffer_DataToParse_End;
- int32u AvgBytesPerSec;
- int16u BlockAlign;
- float64 PAR;
- float64 Demux_Rate;
- float64 avih_FrameRate; //FrameRate of the first video stream in one MOVI chunk
- int32u avih_TotalFrame; //Count of frames in one MOVI chunk
- int32u dmlh_TotalFrame; //Count of frames in the whole AVI file (with odml too)
- int64u Idx1_Offset; //Pos of the data part (AVI) for Idx1 chunk
- int64u movi_Size; //Size of the data part (AVI and AVIX)
- int64u TimeReference; //Only used by Brodcast extension
- int32u SMV_BlockSize; //Size of a SMV block, 0 if not SMV
- int32u SMV_FrameCount; //Frame count of a SMV block, 0 if not SMV
- int32u SamplesPerSec; //For bext
- int16u BitsPerSample; //For PCM only
- int8u stream_Count; //How many stream we have to parse
- bool rec__Present; //True if synchro element is present
- bool NeedOldIndex;
- bool IsBigEndian;
- bool IsWave64;
- bool IsRIFF64;
- bool IsWaveBroken;
- bool IsNotWordAligned;
- bool IsNotWordAligned_Tested;
- bool SecondPass; //Second pass for streams
- File__Analyze* DV_FromHeader;
- enum kind
- {
- Kind_None,
- Kind_Avi,
- Kind_Wave,
- Kind_Aiff,
- Kind_Rmp3,
- };
- kind Kind;
- #if defined(MEDIAINFO_GXF_YES)
- int32u rcrd_fld__anc__pos__LineNumber;
- #endif //defined(MEDIAINFO_GXF_YES)
-
- void TimeCode_Fill(const Ztring &Name, const Ztring &Value);
-
- //Chunks
- void AIFC ();
- void AIFC_COMM ();
- void AIFC_COMT ();
- void AIFC_FVER ();
- void AIFC_SSND ();
- void AIFF_SSND_Continue();
- void AIFC_xxxx ();
- void AIFF ();
- void AIFF_COMM ();
- void AIFF_COMT ();
- void AIFF_ID3_ () {WAVE_ID3_();}
- void AIFF_SSND ();
- void AIFF_xxxx ();
- void AVI_ ();
- void AVI__cset ();
- void AVI__Cr8r ();
- void AVI__exif ();
- void AVI__exif_xxxx ();
- void AVI__goog ();
- void AVI__goog_GDAT ();
- void AVI__hdlr ();
- void AVI__hdlr_avih ();
- void AVI__hdlr_JUNK ();
- void AVI__hdlr_strl ();
- void AVI__hdlr_strl_indx ();
- void AVI__hdlr_strl_indx_StandardIndex (int32u Entry_Count, int32u ChunkId);
- void AVI__hdlr_strl_indx_FieldIndex (int32u Entry_Count, int32u ChunkId);
- void AVI__hdlr_strl_indx_SuperIndex (int32u Entry_Count, int32u ChunkId);
- void AVI__hdlr_strl_JUNK ();
- void AVI__hdlr_strl_strd ();
- void AVI__hdlr_strl_strf ();
- void AVI__hdlr_strl_strf_auds ();
- void AVI__hdlr_strl_strf_auds_Mpega();
- void AVI__hdlr_strl_strf_auds_Aac();
- void AVI__hdlr_strl_strf_auds_Vorbis();
- void AVI__hdlr_strl_strf_auds_Vorbis2();
- void AVI__hdlr_strl_strf_auds_ExtensibleWave();
- void AVI__hdlr_strl_strf_iavs ();
- void AVI__hdlr_strl_strf_mids ();
- void AVI__hdlr_strl_strf_txts ();
- void AVI__hdlr_strl_strf_vids ();
- void AVI__hdlr_strl_strf_vids_Avc ();
- void AVI__hdlr_strl_strf_vids_Ffv1();
- void AVI__hdlr_strl_strf_vids_HuffYUV(int16u BitCount, int32u Height);
- void AVI__hdlr_strl_strh ();
- void AVI__hdlr_strl_strn ();
- void AVI__hdlr_strl_vprp ();
- void AVI__hdlr_odml ();
- void AVI__hdlr_odml_dmlh ();
- void AVI__hdlr_ON2h ();
- void AVI__hdlr_xxxx ();
- void AVI__idx1 ();
- void AVI__INFO ();
- void AVI__INFO_IID3 ();
- void AVI__INFO_ILYC ();
- void AVI__INFO_IMP3 ();
- void AVI__INFO_JUNK ();
- void AVI__INFO_xxxx ();
- void AVI__JUNK ();
- void AVI__MD5_ ();
- void AVI__movi ();
- void AVI__movi_xxxx ();
- void AVI__movi_xxxx___dc ();
- void AVI__movi_xxxx___tx ();
- void AVI__movi_xxxx___wb ();
- void AVI__movi_rec_ ();
- void AVI__movi_rec__xxxx ();
- void AVI__movi_StreamJump ();
- void AVI__PrmA ();
- void AVI__Tdat ();
- void AVI__Tdat_rn_A ();
- void AVI__Tdat_rn_O ();
- void AVI__Tdat_tc_A ();
- void AVI__Tdat_tc_O ();
- void AVI__GMET ();
- void AVI__xxxx ();
- void AVIX ();
- void AVIX_idx1 ();
- void AVIX_movi ();
- void AVIX_movi_xxxx ();
- void AVIX_movi_rec_ ();
- void AVIX_movi_rec__xxxx ();
- void CADP ();
- void CDDA ();
- void CDDA_fmt_ ();
- void CMJP ();
- void CMP4 ();
- void IDVX ();
- void INDX ();
- void INDX_xxxx ();
- void JUNK ();
- void menu ();
- void MThd ();
- void MTrk ();
- void PAL_ ();
- void QLCM ();
- void QLCM_fmt_ ();
- #if defined(MEDIAINFO_GXF_YES)
- void rcrd ();
- void rcrd_desc ();
- void rcrd_fld_ ();
- void rcrd_fld__anc_ ();
- void rcrd_fld__anc__pos_ ();
- void rcrd_fld__anc__pyld ();
- void rcrd_fld__finf ();
- #endif //defined(MEDIAINFO_GXF_YES)
- void RDIB ();
- void RMID ();
- void RMMP ();
- void RMP3 ();
- void RMP3_data ();
- void RMP3_data_Continue();
- void RMP3_INFO() {AVI__INFO();}
- void RMP3_INFO_IID3() {AVI__INFO_IID3();}
- void RMP3_INFO_ILYC() {AVI__INFO_ILYC();}
- void RMP3_INFO_IMP3() {AVI__INFO_IMP3();}
- void RMP3_INFO_JUNK() {AVI__INFO_JUNK ();}
- void RMP3_INFO_xxxx() {AVI__INFO_xxxx ();}
- void SMV0 ();
- void SMV0_xxxx ();
- void WAVE ();
- void WAVE__pmx ();
- void WAVE_aXML ();
- void WAVE_bext ();
- void WAVE_cue_ ();
- void WAVE_data ();
- void WAVE_data_Continue ();
- void WAVE_ds64 ();
- void WAVE_fact ();
- void WAVE_fmt_ ();
- void WAVE_ID3_ ();
- void WAVE_id3_ () {WAVE_ID3_();}
- void WAVE_INFO() {AVI__INFO();}
- void WAVE_INFO_xxxx() {AVI__INFO_xxxx ();}
- void WAVE_iXML ();
- void wave ();
- void wave_data () {WAVE_data();}
- void wave_fmt_ () {WAVE_fmt_();}
- void W3DI();
-
- //Temp
- #if MEDIAINFO_DEMUX
- File__Analyze* Demux_Parser;
- #endif //MEDIAINFO_DEMUX
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff_Elements.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff_Elements.cpp
deleted file mode 100644
index 83a0cb97c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Riff_Elements.cpp
+++ /dev/null
@@ -1,3786 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Elements part
-//
-// Contributor: Lionel Duchateau, kurtnoise@free.fr
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_RIFF_YES
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Riff.h"
-#if defined(MEDIAINFO_DVDIF_YES)
- #include "MediaInfo/Multiple/File_DvDif.h"
-#endif
-#if defined(MEDIAINFO_OGG_YES)
- #include "MediaInfo/Multiple/File_Ogg.h"
- #include "MediaInfo/Multiple/File_Ogg_SubElement.h"
-#endif
-#if defined(MEDIAINFO_FFV1_YES)
- #include "MediaInfo/Video/File_Ffv1.h"
-#endif
-#if defined(MEDIAINFO_HUFFYUV_YES)
- #include "MediaInfo/Video/File_HuffYuv.h"
-#endif
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_PRORES_YES)
- #include "MediaInfo/Video/File_ProRes.h"
-#endif
-#if defined(MEDIAINFO_AVC_YES)
- #include "MediaInfo/Video/File_Avc.h"
-#endif
-#if defined(MEDIAINFO_CANOPUS_YES)
- #include "MediaInfo/Video/File_Canopus.h"
-#endif
-#if defined(MEDIAINFO_FRAPS_YES)
- #include "MediaInfo/Video/File_Fraps.h"
-#endif
-#if defined(MEDIAINFO_LAGARITH_YES)
- #include "MediaInfo/Video/File_Lagarith.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if defined(MEDIAINFO_AAC_YES)
- #include "MediaInfo/Audio/File_Aac.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_DTS_YES)
- #include "MediaInfo/Audio/File_Dts.h"
-#endif
-#if defined(MEDIAINFO_JPEG_YES)
- #include "MediaInfo/Image/File_Jpeg.h"
-#endif
-#if defined(MEDIAINFO_SUBRIP_YES)
- #include "MediaInfo/Text/File_SubRip.h"
-#endif
-#if defined(MEDIAINFO_OTHERTEXT_YES)
- #include "MediaInfo/Text/File_OtherText.h"
-#endif
-#if defined(MEDIAINFO_ADPCM_YES)
- #include "MediaInfo/Audio/File_Adpcm.h"
-#endif
-#if defined(MEDIAINFO_PCM_YES)
- #include "MediaInfo/Audio/File_Pcm.h"
-#endif
-#if defined(MEDIAINFO_SMPTEST0337_YES)
- #include "MediaInfo/Audio/File_SmpteSt0337.h"
-#endif
-#if defined(MEDIAINFO_ID3_YES)
- #include "MediaInfo/Tag/File_Id3.h"
-#endif
-#if defined(MEDIAINFO_ID3V2_YES)
- #include "MediaInfo/Tag/File_Id3v2.h"
-#endif
-#if defined(MEDIAINFO_GXF_YES)
- #if defined(MEDIAINFO_CDP_YES)
- #include "MediaInfo/Text/File_Cdp.h"
- #include <cstring>
- #endif
-#endif //MEDIAINFO_GXF_YES
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-std::string ExtensibleWave_ChannelMask (int32u ChannelMask)
-{
- std::string Text;
- if ((ChannelMask&0x0007)!=0x0000)
- Text+="Front:";
- if (ChannelMask&0x0001)
- Text+=" L";
- if (ChannelMask&0x0004)
- Text+=" C";
- if (ChannelMask&0x0002)
- Text+=" R";
-
- if ((ChannelMask&0x0600)!=0x0000)
- Text+=", Side:";
- if (ChannelMask&0x0200)
- Text+=" L";
- if (ChannelMask&0x0400)
- Text+=" R";
-
- if ((ChannelMask&0x0130)!=0x0000)
- Text+=", Back:";
- if (ChannelMask&0x0010)
- Text+=" L";
- if (ChannelMask&0x0100)
- Text+=" C";
- if (ChannelMask&0x0020)
- Text+=" R";
-
- if ((ChannelMask&0x0008)!=0x0000)
- Text+=", LFE";
-
- return Text;
-}
-
-//---------------------------------------------------------------------------
-std::string ExtensibleWave_ChannelMask2 (int32u ChannelMask)
-{
- std::string Text;
- int8u Count=0;
- if (ChannelMask&0x0001)
- Count++;
- if (ChannelMask&0x0004)
- Count++;
- if (ChannelMask&0x0002)
- Count++;
- Text+=Ztring::ToZtring(Count).To_UTF8();
- Count=0;
-
- if (ChannelMask&0x0200)
- Count++;
- if (ChannelMask&0x0400)
- Count++;
- Text+="/"+Ztring::ToZtring(Count).To_UTF8();
- Count=0;
-
- if (ChannelMask&0x0010)
- Count++;
- if (ChannelMask&0x0100)
- Count++;
- if (ChannelMask&0x0020)
- Count++;
- Text+="/"+Ztring::ToZtring(Count).To_UTF8();
- Count=0;
-
- if (ChannelMask&0x0008)
- Text+=".1";
-
- return Text;
-}
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-namespace Elements
-{
- const int32u FORM=0x464F524D;
- const int32u LIST=0x4C495354;
- const int32u ON2_=0x4F4E3220;
- const int32u RIFF=0x52494646;
- const int32u RF64=0x52463634;
-
- const int32u AIFC=0x41494643;
- const int32u AIFC_COMM=0x434F4D4D;
- const int32u AIFC_COMT=0x434F4D54;
- const int32u AIFC_FVER=0x46564552;
- const int32u AIFC_SSND=0x53534E44;
- const int32u AIFF=0x41494646;
- const int32u AIFF_COMM=0x434F4D4D;
- const int32u AIFF_COMT=0x434F4D54;
- const int32u AIFF_SSND=0x53534E44;
- const int32u AIFF__c__=0x28632920;
- const int32u AIFF_ANNO=0x414E4E4F;
- const int32u AIFF_AUTH=0x41555448;
- const int32u AIFF_NAME=0x4E414D45;
- const int32u AIFF_ID3_=0x49443320;
- const int32u AVI_=0x41564920;
- const int32u AVI__cset=0x63736574;
- const int32u AVI__Cr8r=0x43723872;
- const int32u AVI__exif=0x65786966;
- const int32u AVI__exif_ecor=0x65636F72;
- const int32u AVI__exif_emdl=0x656D646C;
- const int32u AVI__exif_emnt=0x656D6E74;
- const int32u AVI__exif_erel=0x6572656C;
- const int32u AVI__exif_etim=0x6574696D;
- const int32u AVI__exif_eucm=0x6575636D;
- const int32u AVI__exif_ever=0x65766572;
- const int32u AVI__goog=0x676F6F67;
- const int32u AVI__goog_GDAT=0x47444154;
- const int32u AVI__GMET=0x474D4554;
- const int32u AVI__hdlr=0x6864726C;
- const int32u AVI__hdlr_avih=0x61766968;
- const int32u AVI__hdlr_JUNK=0x4A554E4B;
- const int32u AVI__hdlr_strl=0x7374726C;
- const int32u AVI__hdlr_strl_indx=0x696E6478;
- const int32u AVI__hdlr_strl_JUNK=0x4A554E4B;
- const int32u AVI__hdlr_strl_strd=0x73747264;
- const int32u AVI__hdlr_strl_strf=0x73747266;
- const int32u AVI__hdlr_strl_strh=0x73747268;
- const int32u AVI__hdlr_strl_strh_auds=0x61756473;
- const int32u AVI__hdlr_strl_strh_iavs=0x69617673;
- const int32u AVI__hdlr_strl_strh_mids=0x6D696473;
- const int32u AVI__hdlr_strl_strh_vids=0x76696473;
- const int32u AVI__hdlr_strl_strh_txts=0x74787473;
- const int32u AVI__hdlr_strl_strn=0x7374726E;
- const int32u AVI__hdlr_strl_vprp=0x76707270;
- const int32u AVI__hdlr_odml=0x6F646D6C;
- const int32u AVI__hdlr_odml_dmlh=0x646D6C68;
- const int32u AVI__hdlr_ON2h=0x4F4E3268;
- const int32u AVI__idx1=0x69647831;
- const int32u AVI__INFO=0x494E464F;
- const int32u AVI__INFO_IARL=0x4941524C;
- const int32u AVI__INFO_IART=0x49415254;
- const int32u AVI__INFO_IAS1=0x49415331;
- const int32u AVI__INFO_IAS2=0x49415332;
- const int32u AVI__INFO_IAS3=0x49415333;
- const int32u AVI__INFO_IAS4=0x49415334;
- const int32u AVI__INFO_IAS5=0x49415335;
- const int32u AVI__INFO_IAS6=0x49415336;
- const int32u AVI__INFO_IAS7=0x49415337;
- const int32u AVI__INFO_IAS8=0x49415338;
- const int32u AVI__INFO_IAS9=0x49415339;
- const int32u AVI__INFO_ICDS=0x49434453;
- const int32u AVI__INFO_ICMS=0x49434D53;
- const int32u AVI__INFO_ICMT=0x49434D54;
- const int32u AVI__INFO_ICNT=0x49434E54;
- const int32u AVI__INFO_ICOP=0x49434F50;
- const int32u AVI__INFO_ICNM=0x49434E4D;
- const int32u AVI__INFO_ICRD=0x49435244;
- const int32u AVI__INFO_ICRP=0x49435250;
- const int32u AVI__INFO_IDIM=0x4944494D;
- const int32u AVI__INFO_IDIT=0x49444954;
- const int32u AVI__INFO_IDPI=0x49445049;
- const int32u AVI__INFO_IDST=0x49445354;
- const int32u AVI__INFO_IEDT=0x49454454;
- const int32u AVI__INFO_IENG=0x49454E47;
- const int32u AVI__INFO_IFRM=0x4946524D;
- const int32u AVI__INFO_IGNR=0x49474E52;
- const int32u AVI__INFO_IID3=0x49494433;
- const int32u AVI__INFO_IKEY=0x494B4559;
- const int32u AVI__INFO_ILGT=0x494C4754;
- const int32u AVI__INFO_ILNG=0x494C4E47;
- const int32u AVI__INFO_ILYC=0x494C5943;
- const int32u AVI__INFO_IMED=0x494D4544;
- const int32u AVI__INFO_IMP3=0x494D5033;
- const int32u AVI__INFO_IMUS=0x494D5553;
- const int32u AVI__INFO_INAM=0x494E414D;
- const int32u AVI__INFO_IPLT=0x49504C54;
- const int32u AVI__INFO_IPDS=0x49504453;
- const int32u AVI__INFO_IPRD=0x49505244;
- const int32u AVI__INFO_IPRT=0x49505254;
- const int32u AVI__INFO_IPRO=0x4950524F;
- const int32u AVI__INFO_IRTD=0x49525444;
- const int32u AVI__INFO_ISBJ=0x4953424A;
- const int32u AVI__INFO_ISGN=0x4953474E;
- const int32u AVI__INFO_ISTD=0x49535444;
- const int32u AVI__INFO_ISTR=0x49535452;
- const int32u AVI__INFO_ISFT=0x49534654;
- const int32u AVI__INFO_ISHP=0x49534850;
- const int32u AVI__INFO_ISMP=0x49534D50;
- const int32u AVI__INFO_ISRC=0x49535243;
- const int32u AVI__INFO_ISRF=0x49535246;
- const int32u AVI__INFO_ITCH=0x49544348;
- const int32u AVI__INFO_IWEB=0x49574542;
- const int32u AVI__INFO_IWRI=0x49575249;
- const int32u AVI__INFO_JUNK=0x4A554E4B;
- const int32u AVI__JUNK=0x4A554E4B;
- const int32u AVI__MD5_=0x4D443520;
- const int32u AVI__movi=0x6D6F7669;
- const int32u AVI__movi_rec_=0x72656320;
- const int32u AVI__movi_xxxx_____=0x00005F5F;
- const int32u AVI__movi_xxxx___db=0x00006462;
- const int32u AVI__movi_xxxx___dc=0x00006463;
- const int32u AVI__movi_xxxx___sb=0x00007362;
- const int32u AVI__movi_xxxx___tx=0x00007478;
- const int32u AVI__movi_xxxx___wb=0x00007762;
- const int32u AVI__PrmA=0x50726D41;
- const int32u AVI__Tdat=0x54646174;
- const int32u AVI__Tdat_rn_A=0x726E5F41;
- const int32u AVI__Tdat_rn_O=0x726E5F4F;
- const int32u AVI__Tdat_tc_A=0x74635F41;
- const int32u AVI__Tdat_tc_O=0x74635F4F;
- const int32u AVIX=0x41564958;
- const int32u AVIX_idx1=0x69647831;
- const int32u AVIX_movi=0x6D6F7669;
- const int32u AVIX_movi_rec_=0x72656320;
- const int32u CADP=0x43414450;
- const int32u CDDA=0x43444441;
- const int32u CDDA_fmt_=0x666D7420;
- const int32u CMJP=0x434D4A50;
- const int32u CMP4=0x434D5034;
- const int32u IDVX=0x49445658;
- const int32u INDX=0x494E4458;
- const int32u JUNK=0x4A554E4B;
- const int32u menu=0x6D656E75;
- const int32u MThd=0x4D546864;
- const int32u MTrk=0x4D54726B;
- const int32u PAL_=0x50414C20;
- const int32u QLCM=0x514C434D;
- const int32u QLCM_fmt_=0x666D7420;
- const int32u rcrd=0x72637264;
- const int32u rcrd_desc=0x64657363;
- const int32u rcrd_fld_=0x666C6420;
- const int32u rcrd_fld__anc_=0x616E6320;
- const int32u rcrd_fld__anc__pos_=0x706F7320;
- const int32u rcrd_fld__anc__pyld=0x70796C64;
- const int32u rcrd_fld__finf=0x66696E66;
- const int32u RDIB=0x52444942;
- const int32u RMID=0x524D4944;
- const int32u RMMP=0x524D4D50;
- const int32u RMP3=0x524D5033;
- const int32u RMP3_data=0x64617461;
- const int32u RMP3_INFO=0x494E464F;
- const int32u RMP3_INFO_IID3=0x49494433;
- const int32u RMP3_INFO_ILYC=0x494C5943;
- const int32u RMP3_INFO_IMP3=0x494D5033;
- const int32u RMP3_INFO_JUNK=0x4A554E4B;
- const int32u SMV0=0x534D5630;
- const int32u SMV0_xxxx=0x534D563A;
- const int32u WAVE=0x57415645;
- const int32u WAVE__pmx=0x20786D70;
- const int32u WAVE_aXML=0x61584D4C;
- const int32u WAVE_bext=0x62657874;
- const int32u WAVE_cue_=0x63756520;
- const int32u WAVE_data=0x64617461;
- const int32u WAVE_ds64=0x64733634;
- const int32u WAVE_fact=0x66616374;
- const int32u WAVE_fmt_=0x666D7420;
- const int32u WAVE_ID3_=0x49443320;
- const int32u WAVE_id3_=0x69643320;
- const int32u WAVE_INFO=0x494E464F;
- const int32u WAVE_iXML=0x69584D4C;
- const int32u wave=0x77617665;
- const int32u wave_data=0x64617461;
- const int32u wave_fmt_=0x666D7420;
- const int32u W3DI=0x57334449;
-
- #define UUID(NAME, PART1, PART2, PART3, PART4, PART5) \
- const int64u NAME =0x##PART3##PART2##PART1##ULL; \
- const int64u NAME##2=0x##PART4##PART5##ULL; \
-
- UUID(QLCM_QCELP1, 5E7F6D41, B115, 11D0, BA91, 00805FB4B97E)
- UUID(QLCM_QCELP2, 5E7F6D42, B115, 11D0, BA91, 00805FB4B97E)
- UUID(QLCM_EVRC, E689D48D, 9076, 46B5, 91EF, 736A5100CEB4)
- UUID(QLCM_SMV, 8D7C2B75, A797, ED49, 985E, D53C8CC75F84)
-}
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Riff::Data_Parse()
-{
- //Alignement specific
- Element_Size-=Alignement_ExtraByte;
-
- DATA_BEGIN
- LIST(AIFC)
- ATOM_BEGIN
- ATOM(AIFC_COMM)
- ATOM(AIFC_COMT)
- ATOM(AIFC_FVER)
- ATOM(AIFC_SSND)
- ATOM_DEFAULT(AIFC_xxxx)
- ATOM_END_DEFAULT
- LIST(AIFF)
- ATOM_BEGIN
- ATOM(AIFF_COMM)
- ATOM(AIFF_COMT)
- ATOM(AIFF_ID3_)
- LIST_SKIP(AIFF_SSND)
- ATOM_DEFAULT(AIFF_xxxx)
- ATOM_END_DEFAULT
- LIST(AVI_)
- ATOM_BEGIN
- ATOM(AVI__Cr8r);
- ATOM(AVI__cset)
- LIST(AVI__exif)
- ATOM_DEFAULT_ALONE(AVI__exif_xxxx)
- LIST(AVI__goog)
- ATOM_BEGIN
- ATOM(AVI__goog_GDAT)
- ATOM_END
- ATOM(AVI__GMET)
- LIST(AVI__hdlr)
- ATOM_BEGIN
- ATOM(AVI__hdlr_avih)
- ATOM(AVI__hdlr_JUNK)
- LIST(AVI__hdlr_strl)
- ATOM_BEGIN
- ATOM(AVI__hdlr_strl_indx)
- ATOM(AVI__hdlr_strl_JUNK)
- ATOM(AVI__hdlr_strl_strd)
- ATOM(AVI__hdlr_strl_strf)
- ATOM(AVI__hdlr_strl_strh)
- ATOM(AVI__hdlr_strl_strn)
- ATOM(AVI__hdlr_strl_vprp)
- ATOM_END
- LIST(AVI__hdlr_odml)
- ATOM_BEGIN
- ATOM(AVI__hdlr_odml_dmlh)
- ATOM_END
- ATOM(AVI__hdlr_ON2h)
- LIST(AVI__INFO)
- ATOM_BEGIN
- ATOM(AVI__INFO_IID3)
- ATOM(AVI__INFO_ILYC)
- ATOM(AVI__INFO_IMP3)
- ATOM(AVI__INFO_JUNK)
- ATOM_DEFAULT(AVI__INFO_xxxx)
- ATOM_END_DEFAULT
- ATOM_DEFAULT(AVI__hdlr_xxxx)
- ATOM_END_DEFAULT
- ATOM(AVI__idx1)
- LIST(AVI__INFO)
- ATOM_BEGIN
- ATOM(AVI__INFO_IID3)
- ATOM(AVI__INFO_ILYC)
- ATOM(AVI__INFO_IMP3)
- ATOM(AVI__INFO_JUNK)
- ATOM_DEFAULT(AVI__INFO_xxxx)
- ATOM_END_DEFAULT
- ATOM(AVI__JUNK)
- ATOM(AVI__MD5_)
- LIST(AVI__movi)
- ATOM_BEGIN
- LIST(AVI__movi_rec_)
- ATOM_DEFAULT_ALONE(AVI__movi_xxxx)
- ATOM_DEFAULT(AVI__movi_xxxx)
- ATOM_END_DEFAULT
- ATOM(AVI__PrmA);
- LIST(AVI__Tdat)
- ATOM_BEGIN
- ATOM(AVI__Tdat_rn_A)
- ATOM(AVI__Tdat_rn_O)
- ATOM(AVI__Tdat_tc_A)
- ATOM(AVI__Tdat_tc_O)
- ATOM_END
- ATOM_DEFAULT(AVI__xxxx)
- ATOM_END_DEFAULT
- LIST(AVIX) //OpenDML
- ATOM_BEGIN
- ATOM(AVIX_idx1)
- LIST(AVIX_movi)
- ATOM_BEGIN
- LIST(AVIX_movi_rec_)
- ATOM_DEFAULT_ALONE(AVIX_movi_xxxx)
- ATOM_DEFAULT(AVIX_movi_xxxx)
- ATOM_END_DEFAULT
- ATOM_END
- ATOM_PARTIAL(CADP)
- LIST(CDDA)
- ATOM_BEGIN
- ATOM(CDDA_fmt_)
- ATOM_END
- ATOM_PARTIAL(CMJP)
- ATOM(CMP4)
- ATOM(IDVX)
- LIST(INDX)
- ATOM_DEFAULT_ALONE(INDX_xxxx)
- LIST_SKIP(JUNK)
- LIST_SKIP(menu)
- ATOM(MThd)
- LIST_SKIP(MTrk)
- LIST_SKIP(PAL_)
- LIST(QLCM)
- ATOM_BEGIN
- ATOM(QLCM_fmt_)
- ATOM_END
- #if defined(MEDIAINFO_GXF_YES)
- LIST(rcrd)
- ATOM_BEGIN
- ATOM(rcrd_desc)
- LIST(rcrd_fld_)
- ATOM_BEGIN
- LIST(rcrd_fld__anc_)
- ATOM_BEGIN
- ATOM(rcrd_fld__anc__pos_)
- ATOM(rcrd_fld__anc__pyld)
- ATOM_END
- ATOM(rcrd_fld__finf)
- ATOM_END
- ATOM_END
- #endif //defined(MEDIAINFO_GXF_YES)
- LIST_SKIP(RDIB)
- LIST_SKIP(RMID)
- LIST_SKIP(RMMP)
- LIST(RMP3)
- ATOM_BEGIN
- LIST(RMP3_data)
- break;
- LIST(RMP3_INFO)
- ATOM_BEGIN
- ATOM(RMP3_INFO_IID3)
- ATOM(RMP3_INFO_ILYC)
- ATOM(RMP3_INFO_IMP3)
- ATOM(RMP3_INFO_JUNK)
- ATOM_DEFAULT(RMP3_INFO_xxxx)
- ATOM_END_DEFAULT
- ATOM_END
- ATOM(SMV0)
- ATOM(SMV0_xxxx)
- ATOM(W3DI)
- LIST(WAVE)
- ATOM_BEGIN
- ATOM(WAVE__pmx)
- ATOM(WAVE_aXML)
- ATOM(WAVE_bext)
- LIST(WAVE_data)
- break;
- ATOM(WAVE_cue_)
- ATOM(WAVE_ds64)
- ATOM(WAVE_fact)
- ATOM(WAVE_fmt_)
- ATOM(WAVE_ID3_)
- ATOM(WAVE_id3_)
- LIST(WAVE_INFO)
- ATOM_DEFAULT_ALONE(WAVE_INFO_xxxx)
- ATOM(WAVE_iXML)
- ATOM_END
- LIST(wave)
- ATOM_BEGIN
- LIST(wave_data)
- break;
- ATOM(wave_fmt_)
- ATOM_END
- DATA_END
-
- if (Alignement_ExtraByte)
- {
- Element_Size+=Alignement_ExtraByte;
- if (Element_Offset+Alignement_ExtraByte==Element_Size)
- Skip_XX(Alignement_ExtraByte, "Alignement");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFC()
-{
- Data_Accept("AIFF Compressed");
- Element_Name("AIFF Compressed");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "AIFF");
- Stream_Prepare(Stream_Audio);
- Kind=Kind_Aiff;
- #if MEDIAINFO_EVENTS
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFC_COMM()
-{
- AIFF_COMM();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFC_COMT()
-{
- AIFF_COMT();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFC_FVER()
-{
- Element_Name("Format Version");
-
- //Parsing
- Skip_B4( "Version");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFC_SSND()
-{
- AIFF_SSND();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFC_xxxx()
-{
- AIFF_xxxx();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFF()
-{
- Data_Accept("AIFF");
- Element_Name("AIFF");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "AIFF");
- Stream_Prepare(Stream_Audio);
- Kind=Kind_Aiff;
- #if MEDIAINFO_EVENTS
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFF_COMM()
-{
- Element_Name("Common");
-
- int32u numSampleFrames;
- int16u numChannels, sampleSize;
- float80 sampleRate;
- //Parsing
- Get_B2 (numChannels, "numChannels");
- Get_B4 (numSampleFrames, "numSampleFrames");
- Get_B2 (sampleSize, "sampleSize");
- Get_BF10(sampleRate, "sampleRate");
- if (Data_Remain()) //AIFC
- {
- int32u compressionType;
- Get_C4 (compressionType, "compressionType");
- Skip_PA( "compressionName");
-
- //Filling
- CodecID_Fill(Ztring().From_CC4(compressionType), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Mpeg4);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Ztring().From_CC4(compressionType));
- }
- else
- {
- //Filling
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, "PCM");
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "PCM");
- }
-
- //Filling
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, numChannels);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, sampleSize);
- if (sampleRate)
- Fill(Stream_Audio, StreamPos_Last, Audio_Duration, numSampleFrames/sampleRate*1000);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, sampleRate, 0);
-
- //Compute the current codec ID
- Element_Code=(int64u)-1;
- Stream_ID=(int32u)-1;
- stream_Count=1;
-
- //Specific cases
- #if defined(MEDIAINFO_SMPTEST0337_YES)
- if (Retrieve(Stream_Audio, 0, Audio_CodecID).empty() && numChannels==2 && sampleSize<=32 && sampleRate==48000) //Some SMPTE ST 337 streams are hidden in PCM stream
- {
- File_SmpteSt0337* Parser=new File_SmpteSt0337;
- Parser->Endianness='B';
- Parser->Container_Bits=(int8u)sampleSize;
- Parser->ShouldContinueParsing=true;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- Demux_Level=4; //Intermediate
- }
- #endif //MEDIAINFO_DEMUX
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
-
- #if defined(MEDIAINFO_PCM_YES)
- File_Pcm* Parser=new File_Pcm;
- Parser->Codec=Retrieve(Stream_Audio, StreamPos_Last, Audio_CodecID);
- if (Parser->Codec.empty() || Parser->Codec==__T("NONE"))
- Parser->Endianness='B';
- Parser->BitDepth=(int8u)sampleSize;
- #if MEDIAINFO_DEMUX
- if (Demux_Rate)
- Parser->Frame_Count_Valid = float64_int64s(Demux_Rate);
- if (Config->Demux_Unpacketize_Get())
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- Demux_Level=4; //Intermediate
- }
- #else //MEDIAINFO_DEMUX
- Parser->Frame_Count_Valid=(int64u)-1; //Disabling it, waiting for SMPTE ST 337 parser reject
- #endif //MEDIAINFO_DEMUX
- Stream[Stream_ID].Parsers.push_back(Parser);
- Stream[Stream_ID].IsPcm=true;
- Stream[Stream_ID].StreamKind=Stream_Audio;
- #endif
- #if MEDIAINFO_DEMUX
- BlockAlign=numChannels*sampleSize/8;
- AvgBytesPerSec=(int32u)float64_int64s(BlockAlign*(float64)sampleRate);
- #endif //MEDIAINFO_DEMUX
-
- Element_Code=(int64u)-1;
- for (size_t Pos=0; Pos<Stream[Stream_ID].Parsers.size(); Pos++)
- Open_Buffer_Init(Stream[Stream_ID].Parsers[Pos]);
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFF_COMT()
-{
- //Parsing
- int16u numComments;
- Get_B2(numComments, "numComments");
- for (int16u Pos=0; Pos<=numComments; Pos++)
- {
- Ztring text;
- int16u count;
- Element_Begin1("Comment");
- Skip_B4( "timeStamp");
- Skip_B4( "marker");
- Get_B2 (count, "count");
- count+=count%1; //always even
- Get_Local(count, text, "text");
- Element_End0();
-
- //Filling
- Fill(Stream_General, 0, General_Comment, text);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFF_SSND()
-{
- WAVE_data();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFF_SSND_Continue()
-{
- WAVE_data_Continue();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AIFF_xxxx()
-{
- #define ELEMENT_CASE(_ELEMENT, _NAME) \
- case Elements::_ELEMENT : Element_Name(_NAME); Name=_NAME; break;
-
- //Known?
- std::string Name;
- switch(Element_Code)
- {
- ELEMENT_CASE(AIFF__c__, "Copyright");
- ELEMENT_CASE(AIFF_ANNO, "Comment");
- ELEMENT_CASE(AIFF_AUTH, "Performer");
- ELEMENT_CASE(AIFF_NAME, "Title");
- default : Skip_XX(Element_Size, "Unknown");
- return;
- }
-
- //Parsing
- Ztring text;
- Get_Local(Element_Size, text, "text");
-
- //Filling
- Fill(Stream_General, 0, Name.c_str(), text);
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI_()
-{
- Element_Name("AVI");
-
- //Test if there is only one AVI chunk
- if (Status[IsAccepted])
- {
- Element_Info1("Problem: 2 AVI chunks, this is not normal");
- Skip_XX(Element_TotalSize_Get(), "Data");
- return;
- }
-
- Data_Accept("AVI");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "AVI");
- Kind=Kind_Avi;
-
- //Configuration
- Buffer_MaximumSize=64*1024*1024; //Some big frames are possible (e.g YUV 4:2:2 10 bits 1080p)
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__Cr8r()
-{
- Element_Name("Adobe Premiere Cr8r");
-
- //Parsing
- Skip_C4( "FourCC");
- Skip_B4( "Size");
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__cset()
-{
- Element_Name("Regional settings");
-
- //Parsing
- Skip_L2( "CodePage"); //TODO: take a look about IBM/MS RIFF/MCI Specification 1.0
- Skip_L2( "CountryCode");
- Skip_L2( "LanguageCode");
- Skip_L2( "Dialect");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__exif()
-{
- Element_Name("Exif (Exchangeable Image File Format)");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__exif_xxxx()
-{
- Element_Name("Value");
-
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Value");
-
- //Filling
- switch (Element_Code)
- {
- case Elements::AVI__exif_ecor : Fill(Stream_General, 0, "Make", Value); break;
- case Elements::AVI__exif_emdl : Fill(Stream_General, 0, "Model", Value); break;
- case Elements::AVI__exif_emnt : Fill(Stream_General, 0, "MakerNotes", Value); break;
- case Elements::AVI__exif_erel : Fill(Stream_General, 0, "RelatedImageFile", Value); break;
- case Elements::AVI__exif_etim : Fill(Stream_General, 0, "Written_Date", Value); break;
- case Elements::AVI__exif_eucm : Fill(Stream_General, 0, General_Comment, Value); break;
- case Elements::AVI__exif_ever : break; //Exif version
- default: Fill(Stream_General, 0, Ztring().From_CC4((int32u)Element_Code).To_Local().c_str(), Value);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__goog()
-{
- Element_Name("Google specific");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "Google Video", Unlimited, false, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__goog_GDAT()
-{
- Element_Name("Google datas");
-}
-
-//---------------------------------------------------------------------------
-// Google Metadata
-//
-void File_Riff::AVI__GMET()
-{
- Element_Name("Google Metadatas");
-
- //Parsing
- Ztring Value; Value.From_Local((const char*)(Buffer+Buffer_Offset+0), (size_t)Element_Size);
- ZtringListList List;
- List.Separator_Set(0, __T("\n"));
- List.Separator_Set(1, __T(":"));
- List.Max_Set(1, 2);
- List.Write(Value);
-
- //Details
- #if MEDIAINFO_TRACE
- if (Config_Trace_Level)
- {
- //for (size_t Pos=0; Pos<List.size(); Pos++)
- // Details_Add_Info(Pos, List(Pos, 0).To_Local().c_str(), List(Pos, 1));
- }
- #endif //MEDIAINFO_TRACE
-
- //Filling
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (List(Pos, 0)==__T("title")) Fill(Stream_General, 0, General_Title, List(Pos, 1));
- if (List(Pos, 0)==__T("description")) Fill(Stream_General, 0, General_Title_More, List(Pos, 1));
- if (List(Pos, 0)==__T("url")) Fill(Stream_General, 0, General_Title_Url, List(Pos, 1));
- if (List(Pos, 0)==__T("docid")) Fill(Stream_General, 0, General_UniqueID, List(Pos, 1));
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr()
-{
- Element_Name("AVI Header");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_avih()
-{
- Element_Name("File header");
-
- //Parsing
- int32u MicrosecPerFrame, Flags;
- Get_L4 (MicrosecPerFrame, "MicrosecPerFrame");
- Skip_L4( "MaxBytesPerSec");
- Skip_L4( "PaddingGranularity");
- Get_L4 (Flags, "Flags");
- Skip_Flags(Flags, 4, "HasIndex");
- Skip_Flags(Flags, 5, "MustUseIndex");
- Skip_Flags(Flags, 8, "IsInterleaved");
- Skip_Flags(Flags, 9, "UseCKTypeToFindKeyFrames");
- Skip_Flags(Flags, 11, "TrustCKType");
- Skip_Flags(Flags, 16, "WasCaptureFile");
- Skip_Flags(Flags, 17, "Copyrighted");
- Get_L4 (avih_TotalFrame, "TotalFrames");
- Skip_L4( "InitialFrames");
- Skip_L4( "StreamsCount");
- Skip_L4( "SuggestedBufferSize");
- Skip_L4( "Width");
- Skip_L4( "Height");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- if(Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- //Filling
- if (MicrosecPerFrame>0)
- avih_FrameRate=1000000.0/MicrosecPerFrame;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_JUNK()
-{
- Element_Name("Garbage");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_odml()
-{
- Element_Name("OpenDML");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_odml_dmlh()
-{
- Element_Name("OpenDML Header");
-
- //Parsing
- Get_L4(dmlh_TotalFrame, "GrandFrames");
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_ON2h()
-{
- Element_Name("On2 header");
-
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl()
-{
- Element_Name("Stream info");
- Element_Info1(stream_Count);
-
- //Clean up
- StreamKind_Last=Stream_Max;
- StreamPos_Last=(size_t)-1;
-
- //Compute the current codec ID
- Stream_ID=(('0'+stream_Count/10)*0x01000000
- +('0'+stream_Count )*0x00010000);
- stream_Count++;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_indx()
-{
- Element_Name("Index");
-
- int32u Entry_Count, ChunkId;
- int16u LongsPerEntry;
- int8u IndexType, IndexSubType;
- Get_L2 (LongsPerEntry, "LongsPerEntry"); //Size of each entry in aIndex array
- Get_L1 (IndexSubType, "IndexSubType");
- Get_L1 (IndexType, "IndexType");
- Get_L4 (Entry_Count, "EntriesInUse"); //Index of first unused member in aIndex array
- Get_C4 (ChunkId, "ChunkId"); //FCC of what is indexed
-
- //Depends of size of structure...
- switch (IndexType)
- {
- case 0x01 : //AVI_INDEX_OF_CHUNKS
- switch (IndexSubType)
- {
- case 0x00 : AVI__hdlr_strl_indx_StandardIndex(Entry_Count, ChunkId); break;
- case 0x01 : AVI__hdlr_strl_indx_FieldIndex(Entry_Count, ChunkId); break; //AVI_INDEX_2FIELD
- default: Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
- break;
- case 0x0 : //AVI_INDEX_OF_INDEXES
- switch (IndexSubType)
- {
- case 0x00 :
- case 0x01 : AVI__hdlr_strl_indx_SuperIndex(Entry_Count, ChunkId); break; //AVI_INDEX_2FIELD
- default: Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
- break;
- default: Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_indx_StandardIndex(int32u Entry_Count, int32u ChunkId)
-{
- Element_Name("Standard Index");
-
- //Parsing
- int64u BaseOffset, StreamSize=0;
- Get_L8 (BaseOffset, "BaseOffset");
- Skip_L4( "Reserved3");
- for (int32u Pos=0; Pos<Entry_Count; Pos++)
- {
- //Is too slow
- /*
- Element_Begin1("Index");
- int32u Offset, Size;
- Get_L4 (Offset, "Offset"); //BaseOffset + this is absolute file offset
- Get_L4 (Size, "Size"); //Bit 31 is set if this is NOT a keyframe
- Element_Info1(Size&0x7FFFFFFF);
- if (Size)
- Element_Info1("KeyFrame");
- Element_End0();
- */
-
- //Faster method
- if (Element_Offset+8>Element_Size)
- break; //Malformed index
- int32u Offset=LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset );
- int32u Size =LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset+4)&0x7FFFFFFF;
- Element_Offset+=8;
-
- //Stream Position and size
- if (Pos<300 || MediaInfoLib::Config.ParseSpeed_Get()==1.00)
- {
- Stream_Structure[BaseOffset+Offset-8].Name=ChunkId&0xFFFF0000;
- Stream_Structure[BaseOffset+Offset-8].Size=Size;
- }
- StreamSize+=(Size&0x7FFFFFFF);
- Stream[ChunkId&0xFFFF0000].PacketCount++;
-
- //Interleaved
- if (Pos== 0 && (ChunkId&0xFFFF0000)==0x30300000 && Interleaved0_1 ==0)
- Interleaved0_1 =BaseOffset+Offset-8;
- if (Pos==Entry_Count/10 && (ChunkId&0xFFFF0000)==0x30300000 && Interleaved0_10==0)
- Interleaved0_10=BaseOffset+Offset-8;
- if (Pos== 0 && (ChunkId&0xFFFF0000)==0x30310000 && Interleaved1_1 ==0)
- Interleaved1_1 =BaseOffset+Offset-8;
- if (Pos==Entry_Count/10 && (ChunkId&0xFFFF0000)==0x30310000 && Interleaved1_10==0)
- Interleaved1_10=BaseOffset+Offset-8;
- }
- Stream[ChunkId&0xFFFF0000].StreamSize+=StreamSize;
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Garbage");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_indx_FieldIndex(int32u Entry_Count, int32u)
-{
- Element_Name("Field Index");
-
- //Parsing
- Skip_L8( "Offset");
- Skip_L4( "Reserved2");
- for (int32u Pos=0; Pos<Entry_Count; Pos++)
- {
- Element_Begin1("Index");
- Skip_L4( "Offset"); //BaseOffset + this is absolute file offset
- Skip_L4( "Size"); //Bit 31 is set if this is NOT a keyframe
- Skip_L4( "OffsetField2"); //Offset to second field
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_indx_SuperIndex(int32u Entry_Count, int32u ChunkId)
-{
- Element_Name("Index of Indexes");
-
- //Parsing
- int64u Offset;
- Skip_L4( "Reserved0");
- Skip_L4( "Reserved1");
- Skip_L4( "Reserved2");
- for (int32u Pos=0; Pos<Entry_Count; Pos++)
- {
- int32u Duration;
- Element_Begin1("Index of Indexes");
- Get_L8 (Offset, "Offset");
- Skip_L4( "Size"); //Size of index chunk at this offset
- Get_L4 (Duration, "Duration"); //time span in stream ticks
- Index_Pos[Offset]=ChunkId;
- Stream[Stream_ID].indx_Duration+=Duration;
- Element_End0();
- }
-
- //We needn't anymore Old version
- NeedOldIndex=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_JUNK()
-{
- Element_Name("Garbage");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strd()
-{
- Element_Name("Stream datas");
-
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf()
-{
- Element_Name("Stream format");
-
- //Parse depending of kind of stream
- switch (Stream[Stream_ID].fccType)
- {
- case Elements::AVI__hdlr_strl_strh_auds : AVI__hdlr_strl_strf_auds(); break;
- case Elements::AVI__hdlr_strl_strh_iavs : AVI__hdlr_strl_strf_iavs(); break;
- case Elements::AVI__hdlr_strl_strh_mids : AVI__hdlr_strl_strf_mids(); break;
- case Elements::AVI__hdlr_strl_strh_txts : AVI__hdlr_strl_strf_txts(); break;
- case Elements::AVI__hdlr_strl_strh_vids : AVI__hdlr_strl_strf_vids(); break;
- default : Element_Info1("Unknown");
- }
-
- //Registering stream
- Stream[Stream_ID].StreamKind=StreamKind_Last;
- Stream[Stream_ID].StreamPos=StreamPos_Last;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_auds()
-{
- Element_Info1("Audio");
-
- //Parsing
- #if !MEDIAINFO_DEMUX
- int32u AvgBytesPerSec;
- #endif //!MEDIAINFO_DEMUX
- int16u FormatTag, Channels;
- BitsPerSample=0;
- Get_L2 (FormatTag, "FormatTag");
- Get_L2 (Channels, "Channels");
- Get_L4 (SamplesPerSec, "SamplesPerSec");
- Get_L4 (AvgBytesPerSec, "AvgBytesPerSec");
- #if MEDIAINFO_DEMUX
- Get_L2 (BlockAlign, "BlockAlign");
- #else //MEDIAINFO_DEMUX
- Skip_L2( "BlockAlign");
- #endif //MEDIAINFO_DEMUX
- if (Element_Offset+2<=Element_Size)
- Get_L2 (BitsPerSample, "BitsPerSample");
-
- if (FormatTag==1) //Only for PCM
- {
- //Coherancy
- if (BitsPerSample && SamplesPerSec*BitsPerSample*Channels/8==AvgBytesPerSec*8)
- AvgBytesPerSec*=8; //Found in one file. TODO: Provide information to end user about such error
-
- //Computing of missing value
- if (!BitsPerSample && AvgBytesPerSec && SamplesPerSec && Channels)
- BitsPerSample=(int16u)(AvgBytesPerSec*8/SamplesPerSec/Channels);
- }
-
- //Filling
- Stream_Prepare(Stream_Audio);
- Stream[Stream_ID].Compression=FormatTag;
- Ztring Codec; Codec.From_Number(FormatTag, 16);
- Codec.MakeUpperCase();
- CodecID_Fill(Codec, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Codec); //May be replaced by codec parser
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec_CC, Codec);
- if (Channels)
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, (Channels!=5 || FormatTag==0xFFFE)?Channels:6);
- if (SamplesPerSec)
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SamplesPerSec);
- if (AvgBytesPerSec)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, AvgBytesPerSec*8);
- if (BitsPerSample)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, BitsPerSample);
- Stream[Stream_ID].AvgBytesPerSec=AvgBytesPerSec; //Saving bitrate for each stream
- if (SamplesPerSec && TimeReference!=(int64u)-1)
- {
- Fill(Stream_Audio, 0, Audio_Delay, float64_int64s(((float64)TimeReference)*1000/SamplesPerSec));
- Fill(Stream_Audio, 0, Audio_Delay_Source, "Container (bext)");
- }
-
- //Specific cases
- #if defined(MEDIAINFO_DTS_YES) || defined(MEDIAINFO_SMPTEST0337_YES)
- if (FormatTag==0x1 && Retrieve(Stream_General, 0, General_Format)==__T("Wave")) //Some DTS or SMPTE ST 337 streams are coded "1"
- {
- #if defined(MEDIAINFO_DTS_YES)
- {
- File_Dts* Parser=new File_Dts;
- Parser->Frame_Count_Valid=2;
- Parser->ShouldContinueParsing=true;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get() && Retrieve(Stream_General, 0, General_Format)==__T("Wave"))
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- Demux_Level=4; //Intermediate
- }
- #endif //MEDIAINFO_DEMUX
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
-
- #if defined(MEDIAINFO_SMPTEST0337_YES)
- {
- File_SmpteSt0337* Parser=new File_SmpteSt0337;
- Parser->Container_Bits=(int8u)BitsPerSample;
- Parser->Aligned=true;
- Parser->ShouldContinueParsing=true;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get() && Retrieve(Stream_General, 0, General_Format)==__T("Wave"))
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- Demux_Level=4; //Intermediate
- }
- #endif //MEDIAINFO_DEMUX
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- }
- #endif
-
- //Creating the parser
- if (0);
- #if defined(MEDIAINFO_MPEGA_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Codec)==__T("MPEG Audio"))
- {
- File_Mpega* Parser=new File_Mpega;
- Parser->CalculateDelay=true;
- Parser->ShouldContinueParsing=true;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_AC3_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Codec)==__T("AC-3"))
- {
- File_Ac3* Parser=new File_Ac3;
- Parser->Frame_Count_Valid=2;
- Parser->CalculateDelay=true;
- Parser->ShouldContinueParsing=true;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_DTS_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Codec)==__T("DTS"))
- {
- File_Dts* Parser=new File_Dts;
- Parser->Frame_Count_Valid=2;
- Parser->ShouldContinueParsing=true;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_AAC_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Codec)==__T("AAC"))
- {
- File_Aac* Parser=new File_Aac;
- Parser->Mode=File_Aac::Mode_ADTS;
- Parser->Frame_Count_Valid=1;
- Parser->ShouldContinueParsing=true;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_PCM_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Codec)==__T("PCM"))
- {
- File_Pcm* Parser=new File_Pcm;
- Parser->Codec=Codec;
- Parser->Endianness='L';
- Parser->BitDepth=(int8u)BitsPerSample;
- #if MEDIAINFO_DEMUX
- if (Demux_Rate)
- Parser->Frame_Count_Valid = float64_int64s(Demux_Rate);
- if (Config->Demux_Unpacketize_Get() && Retrieve(Stream_General, 0, General_Format)==__T("Wave"))
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- Demux_Level=4; //Intermediate
- }
- #else //MEDIAINFO_DEMUX
- Parser->Frame_Count_Valid=(int64u)-1; //Disabling it, waiting for SMPTE ST 337 parser reject
- #endif //MEDIAINFO_DEMUX
- Stream[Stream_ID].Parsers.push_back(Parser);
- Stream[Stream_ID].IsPcm=true;
- }
- #endif
- #if defined(MEDIAINFO_ADPCM_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Codec)==__T("ADPCM"))
- {
- //Creating the parser
- File_Adpcm MI;
- MI.Codec=Codec;
-
- //Parsing
- Open_Buffer_Init(&MI);
- Open_Buffer_Continue(&MI, 0);
-
- //Filling
- Finish(&MI);
- Merge(MI, StreamKind_Last, 0, StreamPos_Last);
- }
- #endif
- #if defined(MEDIAINFO_OGG_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Codec)==__T("Vorbis")
- && FormatTag!=0x566F) //0x566F has config in this chunk
- {
- File_Ogg* Parser=new File_Ogg;
- Parser->ShouldContinueParsing=true;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- for (size_t Pos=0; Pos<Stream[Stream_ID].Parsers.size(); Pos++)
- Open_Buffer_Init(Stream[Stream_ID].Parsers[Pos]);
-
- //Options
- if (Element_Offset+2>Element_Size)
- return; //No options
-
- //Parsing
- int16u Option_Size;
- Get_L2 (Option_Size, "cbSize");
-
- //Filling
- if (Option_Size>0)
- {
- if (0);
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Codec)==__T("MPEG Audio"))
- {
- if (Option_Size==12)
- AVI__hdlr_strl_strf_auds_Mpega();
- else
- Skip_XX(Option_Size, "MPEG Audio - Uknown");
- }
- else if (Codec==__T("AAC") || Codec==__T("FF") || Codec==__T("8180"))
- AVI__hdlr_strl_strf_auds_Aac();
- else if (FormatTag==0x566F) //Vorbis with Config in this chunk
- AVI__hdlr_strl_strf_auds_Vorbis();
- else if (FormatTag==0x6750) //Vorbis with Config in this chunk
- AVI__hdlr_strl_strf_auds_Vorbis2();
- else if (FormatTag==0xFFFE) //Extensible Wave
- AVI__hdlr_strl_strf_auds_ExtensibleWave();
- else if (Element_Offset+Option_Size<=Element_Size)
- Skip_XX(Option_Size, "Unknown");
- else if (Element_Offset!=Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Error");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_auds_Mpega()
-{
- //Parsing
- Element_Begin1("MPEG Audio options");
- Skip_L2( "ID");
- Skip_L4( "Flags");
- Skip_L2( "BlockSize");
- Skip_L2( "FramesPerBlock");
- Skip_L2( "CodecDelay");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_auds_Aac()
-{
- //Parsing
- Element_Begin1("AAC options");
- #if defined(MEDIAINFO_AAC_YES)
- File_Aac* MI=new File_Aac();
- MI->Mode=File_Aac::Mode_AudioSpecificConfig;
- Open_Buffer_Init(MI);
- Open_Buffer_Continue(MI);
- Finish(MI);
- Merge(*MI, StreamKind_Last, 0, StreamPos_Last);
- delete MI; //MI=NULL;
- #else //MEDIAINFO_MPEG4_YES
- Skip_XX(Element_Size-Element_Offset, "(AudioSpecificConfig)");
- #endif
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_auds_Vorbis()
-{
- //Parsing
- Element_Begin1("Vorbis options");
- #if defined(MEDIAINFO_OGG_YES)
- File_Ogg_SubElement MI;
- Open_Buffer_Init(&MI);
- Element_Begin1("Element sizes");
- //All elements parsing, except last one
- std::vector<size_t> Elements_Size;
- size_t Elements_TotalSize=0;
- int8u Elements_Count;
- Get_L1(Elements_Count, "Element count");
- Elements_Size.resize(Elements_Count+1); //+1 for the last block
- for (int8u Pos=0; Pos<Elements_Count; Pos++)
- {
- int8u Size;
- Get_L1(Size, "Size");
- Elements_Size[Pos]=Size;
- Elements_TotalSize+=Size;
- }
- Element_End0();
- if (Element_Offset+Elements_TotalSize>Element_Size)
- return;
- //Adding the last block
- Elements_Size[Elements_Count]=(size_t)(Element_Size-(Element_Offset+Elements_TotalSize));
- Elements_Count++;
- //Parsing blocks
- for (int8u Pos=0; Pos<Elements_Count; Pos++)
- {
- Open_Buffer_Continue(&MI, Elements_Size[Pos]);
- Open_Buffer_Continue(&MI, 0);
- Element_Offset+=Elements_Size[Pos];
- }
- //Finalizing
- Finish(&MI);
- Merge(MI, StreamKind_Last, 0, StreamPos_Last);
- Clear(Stream_Audio, StreamPos_Last, Audio_BitDepth); //Resolution is not valid for Vorbis
- Element_Show();
- #else //MEDIAINFO_MPEG4_YES
- Skip_XX(Element_Size-Element_Offset, "(Vorbis headers)");
- #endif
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_auds_Vorbis2()
-{
- //Parsing
- Skip_XX(8, "Vorbis Unknown");
- Element_Begin1("Vorbis options");
- #if defined(MEDIAINFO_OGG_YES)
- Open_Buffer_Continue(Stream[Stream_ID].Parsers[0]);
- Open_Buffer_Continue(Stream[Stream_ID].Parsers[0], 0);
- Finish(Stream[Stream_ID].Parsers[0]);
- Merge(*Stream[Stream_ID].Parsers[0], StreamKind_Last, 0, StreamPos_Last);
- Element_Show();
- #else //MEDIAINFO_MPEG4_YES
- Skip_XX(Element_Size-Element_Offset, "(Vorbis headers)");
- #endif
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_auds_ExtensibleWave()
-{
- //Parsing
- int128u SubFormat;
- int32u ChannelMask;
- Skip_L2( "ValidBitsPerSample / SamplesPerBlock");
- Get_L4 (ChannelMask, "ChannelMask");
- Get_GUID(SubFormat, "SubFormat");
-
- FILLING_BEGIN();
- if ((SubFormat.hi&0xFFFFFFFFFFFF0000LL)==0x0010000000000000LL && SubFormat.lo==0x800000AA00389B71LL)
- {
- CodecID_Fill(Ztring().From_Number((int16u)SubFormat.hi, 16), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Audio, StreamPos_Last, Audio_CodecID, Ztring().From_GUID(SubFormat), true);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, MediaInfoLib::Config.Codec_Get(Ztring().From_Number((int16u)SubFormat.hi, 16)), true);
-
- //Creating the parser
- if (0);
- #if defined(MEDIAINFO_PCM_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Ztring().From_Number((int16u)SubFormat.hi, 16))==__T("PCM"))
- {
- //Creating the parser
- File_Pcm* Parser=new File_Pcm;
- Parser->Codec=Ztring().From_GUID(SubFormat);
- Parser->Endianness='L';
- Parser->Sign='S';
- Parser->BitDepth=(int8u)BitsPerSample;
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get() && Retrieve(Stream_General, 0, General_Format)==__T("Wave"))
- {
- Parser->Demux_Level=2; //Container
- Parser->Demux_UnpacketizeContainer=true;
- Demux_Level=4; //Intermediate
- }
- #endif //MEDIAINFO_DEMUX
- Stream[Stream_ID].Parsers.push_back(Parser);
- Stream[Stream_ID].IsPcm=true;
- }
- #endif
-
- for (size_t Pos=0; Pos<Stream[Stream_ID].Parsers.size(); Pos++)
- Open_Buffer_Init(Stream[Stream_ID].Parsers[Pos]);
- }
- else
- {
- CodecID_Fill(Ztring().From_GUID(SubFormat), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- }
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, ExtensibleWave_ChannelMask(ChannelMask));
- Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions_String2, ExtensibleWave_ChannelMask2(ChannelMask));
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_iavs()
-{
- //Standard video header before Iavs?
- if (Element_Size==72)
- {
- Element_Begin0();
- AVI__hdlr_strl_strf_vids();
- Element_End0();
- }
-
- Element_Info1("Interleaved Audio/Video");
-
- #ifdef MEDIAINFO_DVDIF_YES
- if (Element_Size<8*4)
- return;
-
- //Parsing
- DV_FromHeader=new File_DvDif();
- Open_Buffer_Init(DV_FromHeader);
-
- //DVAAuxSrc
- ((File_DvDif*)DV_FromHeader)->AuxToAnalyze=0x50; //Audio source
- Open_Buffer_Continue(DV_FromHeader, 4);
- //DVAAuxCtl
- ((File_DvDif*)DV_FromHeader)->AuxToAnalyze=0x51; //Audio control
- Open_Buffer_Continue(DV_FromHeader, Buffer+Buffer_Offset+(size_t)Element_Offset, 4);
- Element_Offset+=4;
- //DVAAuxSrc1
- Skip_L4( "DVAAuxSrc1");
- //DVAAuxCtl1
- Skip_L4( "DVAAuxCtl1");
- //DVVAuxSrc
- ((File_DvDif*)DV_FromHeader)->AuxToAnalyze=0x60; //Video source
- Open_Buffer_Continue(DV_FromHeader, 4);
- //DVAAuxCtl
- ((File_DvDif*)DV_FromHeader)->AuxToAnalyze=0x61; //Video control
- Open_Buffer_Continue(DV_FromHeader, 4);
- //Reserved
- if (Element_Offset<Element_Size)
- {
- Skip_L4( "DVReserved");
- Skip_L4( "DVReserved");
- }
-
- Finish(DV_FromHeader);
-
- Stream_Prepare(Stream_Video);
- Stream[Stream_ID].Parsers.push_back(new File_DvDif);
- Open_Buffer_Init(Stream[Stream_ID].Parsers[0]);
-
- #else //MEDIAINFO_DVDIF_YES
- //Parsing
- Skip_L4( "DVAAuxSrc");
- Skip_L4( "DVAAuxCtl");
- Skip_L4( "DVAAuxSrc1");
- Skip_L4( "DVAAuxCtl1");
- Skip_L4( "DVVAuxSrc");
- Skip_L4( "DVVAuxCtl");
- Skip_L4( "DVReserved");
- Skip_L4( "DVReserved");
-
- //Filling
- Ztring Codec; Codec.From_CC4(Stream[Stream_ID].fccHandler);
- Stream_Prepare(Stream_Video);
- float32 FrameRate=Retrieve(Stream_Video, StreamPos_Last, Video_FrameRate).To_float32();
- Fill(Stream_Video, StreamPos_Last, Video_Codec, Codec); //May be replaced by codec parser
- Fill(Stream_Video, StreamPos_Last, Video_Codec_CC, Codec);
- if (Codec==__T("dvsd")
- || Codec==__T("dvsl"))
- {
- Fill(Stream_Video, StreamPos_Last, Video_Width, 720);
- if (FrameRate==25.000) Fill(Stream_Video, StreamPos_Last, Video_Height, 576);
- else if (FrameRate==29.970) Fill(Stream_Video, StreamPos_Last, Video_Height, 480);
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, 4.0/3, 3, true);
- }
- else if (Codec==__T("dvhd"))
- {
- Fill(Stream_Video, StreamPos_Last, Video_Width, 1440);
- if (FrameRate==25.000) Fill(Stream_Video, StreamPos_Last, Video_Height, 1152);
- else if (FrameRate==30.000) Fill(Stream_Video, StreamPos_Last, Video_Height, 960);
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, 4.0/3, 3, true);
- }
- Stream_Prepare(Stream_Audio);
- CodecID_Fill(Codec, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Codec); //May be replaced by codec parser
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec_CC, Codec);
- #endif //MEDIAINFO_DVDIF_YES
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_mids()
-{
- Element_Info1("Midi");
-
- //Filling
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, "MIDI");
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "Midi");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_txts()
-{
- Element_Info1("Text");
-
- //Parsing
- Ztring Format;
- if (Element_Size)
- {
- Get_Local(10, Format, "Format");
- Skip_XX(22, "Unknown");
- }
-
- FILLING_BEGIN_PRECISE();
- Stream_Prepare(Stream_Text);
-
- if (Element_Size==0)
- {
- //Creating the parser
- #if defined(MEDIAINFO_SUBRIP_YES)
- Stream[Stream_ID].Parsers.push_back(new File_SubRip);
- #endif
- #if defined(MEDIAINFO_OTHERTEXT_YES)
- Stream[Stream_ID].Parsers.push_back(new File_OtherText); //For SSA
- #endif
-
- for (size_t Pos=0; Pos<Stream[Stream_ID].Parsers.size(); Pos++)
- Open_Buffer_Init(Stream[Stream_ID].Parsers[Pos]);
- }
- else
- {
- Fill(Stream_Text, StreamPos_Last, Text_Format, Format);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_vids()
-{
- Element_Info1("Video");
-
- //Parsing
- int32u Compression, Width, Height;
- int16u Resolution;
- Skip_L4( "Size");
- Get_L4 (Width, "Width");
- Get_L4 (Height, "Height");
- Skip_L2( "Planes");
- Get_L2 (Resolution, "BitCount"); //Do not use it
- Get_C4 (Compression, "Compression");
- Skip_L4( "SizeImage");
- Skip_L4( "XPelsPerMeter");
- Skip_L4( "YPelsPerMeter");
- Skip_L4( "ClrUsed");
- Skip_L4( "ClrImportant");
-
- //Filling
- Stream[Stream_ID].Compression=Compression;
-
- if (Compression==CC4("DXSB"))
- {
- //Divx.com hack for subtitle, this is a text stream in a DivX Format
- Fill(Stream_General, 0, General_Format, "DivX", Unlimited, true, true);
- Stream_Prepare(Stream_Text);
- }
- else
- Stream_Prepare(Stream_Video);
-
- //Filling
- CodecID_Fill(Ztring().From_CC4(Compression), StreamKind_Last, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec), Ztring().From_CC4(Compression).To_Local().c_str()); //FormatTag, may be replaced by codec parser
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Codec_CC), Ztring().From_CC4(Compression).To_Local().c_str()); //FormatTag
- Fill(StreamKind_Last, StreamPos_Last, "Width", Width, 10, true);
- Fill(StreamKind_Last, StreamPos_Last, "Height", Height>=0x80000000?(-((int32s)Height)):Height, 10, true); // AVI can use negative height for raw to signal that it's coded top-down, not bottom-up
- if (Resolution==32 && Compression==0x74736363) //tscc
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", 8);
- else if (Compression==0x44495633) //DIV3
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", 8);
- else if (MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression)).find(__T("Canopus"))!=std::string::npos) //Canopus codecs
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution/3);
- else if (Compression==0x44585342) //DXSB
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution);
- else if (MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_ColorSpace).find(__T("RGBA"))!=std::string::npos) //RGB codecs
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution/4);
- else if (Compression==0x00000000 //RGB
- || MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_ColorSpace).find(__T("RGB"))!=std::string::npos) //RGB codecs
- {
- if (Resolution==32)
- {
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Format), "RGBA", Unlimited, true, true);
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution/4); //With Alpha
- }
- else
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution<=16?8:(Resolution/3)); //indexed or normal
- }
- else if (Compression==0x56503632 //VP62
- || MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_Format)==__T("H.263") //H.263
- || MediaInfoLib::Config.CodecID_Get(StreamKind_Last, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_Format)==__T("VC-1")) //VC-1
- Fill(StreamKind_Last, StreamPos_Last, "BitDepth", Resolution/3);
- Stream[Stream_ID].StreamKind=StreamKind_Last;
-
- //Creating the parser
- if (0);
- #if defined(MEDIAINFO_FFV1_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_Format)==__T("FFV1"))
- {
- File_Ffv1* Parser=new File_Ffv1;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_HUFFYUV_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_Format)==__T("HuffYUV"))
- {
- File_HuffYuv* Parser=new File_HuffYuv;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_MPEGV_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_Format)==__T("MPEG Video"))
- {
- File_Mpegv* Parser=new File_Mpegv;
- Parser->FrameIsAlwaysComplete=true;
- Parser->TimeCodeIsNotTrustable=true;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_MPEG4V_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression))==__T("MPEG-4 Visual"))
- {
- File_Mpeg4v* Parser=new File_Mpeg4v;
- Stream[Stream_ID].Specific_IsMpeg4v=true;
- Parser->FrameIsAlwaysComplete=true;
- if (MediaInfoLib::Config.ParseSpeed_Get()>=0.5)
- Parser->ShouldContinueParsing=true;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_PRORES_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_Format)==__T("ProRes"))
- {
- File_ProRes* Parser=new File_ProRes;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_AVC_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression))==__T("AVC"))
- {
- File_Avc* Parser=new File_Avc;
- Parser->FrameIsAlwaysComplete=true;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_CANOPUS_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression))==__T("Canopus HQ"))
- {
- File_Canopus* Parser=new File_Canopus;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_JPEG_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression))==__T("JPEG"))
- {
- File_Jpeg* Parser=new File_Jpeg;
- Parser->StreamKind=Stream_Video;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_DVDIF_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression))==__T("DV"))
- {
- File_DvDif* Parser=new File_DvDif;
- Parser->IgnoreAudio=true;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- #if defined(MEDIAINFO_FRAPS_YES)
- else if (Compression==0x46505331) //"FPS1"
- {
- File_Fraps* Parser=new File_Fraps;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- else if (Compression==0x48465955) //"HFUY"
- {
- switch (Resolution)
- {
- case 16 : Fill(Stream_Video, StreamPos_Last, Video_ColorSpace, "YUV"); Fill(Stream_Video, StreamPos_Last, Video_ChromaSubsampling, "4:2:2"); Fill(Stream_Video, StreamPos_Last, Video_BitDepth, 8); break;
- case 24 : Fill(Stream_Video, StreamPos_Last, Video_ColorSpace, "RGB"); Fill(Stream_Video, StreamPos_Last, Video_BitDepth, 8); break;
- case 32 : Fill(Stream_Video, StreamPos_Last, Video_ColorSpace, "RGBA"); Fill(Stream_Video, StreamPos_Last, Video_BitDepth, 8); break;
- default : ;
- }
- }
- #if defined(MEDIAINFO_LAGARITH_YES)
- else if (Compression==0x4C414753) //"LAGS"
- {
- File_Lagarith* Parser=new File_Lagarith;
- Stream[Stream_ID].Parsers.push_back(Parser);
- }
- #endif
- for (size_t Pos=0; Pos<Stream[Stream_ID].Parsers.size(); Pos++)
- Open_Buffer_Init(Stream[Stream_ID].Parsers[Pos]);
-
- //Options
- if (Element_Offset>=Element_Size)
- return; //No options
-
- //Filling
- if (0);
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression))==__T("AVC"))
- AVI__hdlr_strl_strf_vids_Avc();
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression))==__T("FFV1"))
- AVI__hdlr_strl_strf_vids_Ffv1();
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression))==__T("HuffYUV"))
- AVI__hdlr_strl_strf_vids_HuffYUV(Resolution, Height);
- else Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_vids_Avc()
-{
- //Parsing
- Element_Begin1("AVC options");
- #if defined(MEDIAINFO_AVC_YES)
- //Can be sized block or with 000001
- File_Avc* Parser=(File_Avc*)Stream[Stream_ID].Parsers[0];
- Parser->MustParse_SPS_PPS=false;
- Parser->SizedBlocks=false;
- Parser->MustSynchronize=true;
- int64u Element_Offset_Save=Element_Offset;
- Open_Buffer_Continue(Parser);
- if (!Parser->Status[IsAccepted])
- {
- Element_Offset=Element_Offset_Save;
- delete Stream[Stream_ID].Parsers[0]; Stream[Stream_ID].Parsers[0]=new File_Avc;
- Parser=(File_Avc*)Stream[Stream_ID].Parsers[0];
- Open_Buffer_Init(Parser);
- Parser->FrameIsAlwaysComplete=true;
- Parser->MustParse_SPS_PPS=true;
- Parser->SizedBlocks=true;
- Parser->MustSynchronize=false;
- Open_Buffer_Continue(Parser);
- Element_Show();
- }
- #else //MEDIAINFO_AVC_YES
- Skip_XX(Element_Size-Element_Offset, "(AVC headers)");
- #endif
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_vids_Ffv1()
-{
- //Parsing
- Element_Begin1("FFV1 options");
- #if defined(MEDIAINFO_FFV1_YES)
- File_Ffv1* Parser=(File_Ffv1*)Stream[Stream_ID].Parsers[0];
- Parser->IsOutOfBandData=true;
- Open_Buffer_Continue(Parser);
- #else //MEDIAINFO_FFV1_YES
- Skip_XX(Element_Size-Element_Offset, "(FFV1 headers)");
- #endif
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strf_vids_HuffYUV(int16u BitCount, int32u Height)
-{
- //Parsing
- Element_Begin1("HuffYUV options");
- #if defined(MEDIAINFO_HUFFYUV_YES)
- File_HuffYuv* Parser=(File_HuffYuv*)Stream[Stream_ID].Parsers[0];
- Parser->IsOutOfBandData=true;
- Parser->BitCount=BitCount;
- Parser->Height=Height;
- Open_Buffer_Continue(Parser);
- #else //MEDIAINFO_HUFFYUV_YES
- Skip_XX(Element_Size-Element_Offset, "(HuffYUV headers)");
- #endif
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strh()
-{
- Element_Name("Stream header");
-
- //Parsing
- int32u fccType, fccHandler, Scale, Rate, Start, Length;
- int16u Left, Top, Right, Bottom;
- Get_C4 (fccType, "fccType");
- switch (fccType)
- {
- case Elements::AVI__hdlr_strl_strh_auds :
- Get_L4 (fccHandler, "fccHandler");
- break;
- default:
- Get_C4 (fccHandler, "fccHandler");
- }
- Skip_L4( "Flags");
- Skip_L2( "Priority");
- Skip_L2( "Language");
- Skip_L4( "InitialFrames");
- Get_L4 (Scale, "Scale");
- Get_L4 (Rate, "Rate"); //Rate/Scale is stream tick rate in ticks/sec
- Get_L4 (Start, "Start");
- Get_L4 (Length, "Length");
- Skip_L4( "SuggestedBufferSize");
- Skip_L4( "Quality");
- Skip_L4( "SampleSize");
- Get_L2 (Left, "Frame_Left");
- Get_L2 (Top, "Frame_Top");
- Get_L2 (Right, "Frame_Right");
- Get_L2 (Bottom, "Frame_Bottom");
- if(Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- //Filling
- float32 FrameRate=0;
- if (Rate>0 && Scale>0)
- {
- //FrameRate (without known value detection)
- FrameRate=((float32)Rate)/Scale;
- if (FrameRate>1)
- {
- float32 Rest=FrameRate-(int32u)FrameRate;
- if (Rest<0.01)
- FrameRate-=Rest;
- else if (Rest>0.99)
- FrameRate+=1-Rest;
- else
- {
- float32 Rest1001=FrameRate*1001/1000-(int32u)(FrameRate*1001/1000);
- if (Rest1001<0.001)
- FrameRate=(float32)((int32u)(FrameRate*1001/1000))*1000/1001;
- if (Rest1001>0.999)
- FrameRate=(float32)((int32u)(FrameRate*1001/1000)+1)*1000/1001;
- }
- }
-
- //Duration
- if (FrameRate)
- {
- int64u Duration=float32_int64s((1000*(float32)Length)/FrameRate);
- if (avih_TotalFrame>0 //avih_TotalFrame is here because some files have a wrong Audio Duration if TotalFrame==0 (which is a bug, of course!)
- && (avih_FrameRate==0 || Duration<((float32)avih_TotalFrame)/avih_FrameRate*1000*1.10) //Some file have a nearly perfect header, except that the value is false, trying to detect it (false if 10% more than 1st video)
- && (avih_FrameRate==0 || Duration>((float32)avih_TotalFrame)/avih_FrameRate*1000*0.90)) //Some file have a nearly perfect header, except that the value is false, trying to detect it (false if 10% less than 1st video)
- {
- Fill(StreamKind_Last, StreamPos_Last, "Duration", Duration);
- }
- }
- }
- switch (fccType)
- {
- case Elements::AVI__hdlr_strl_strh_vids :
- if (FrameRate>0) Fill(Stream_Video, StreamPos_Last, "FrameRate", FrameRate, 3);
- case Elements::AVI__hdlr_strl_strh_txts :
- if (Right-Left>0) Fill(Stream_Text, StreamPos_Last, "Width", Right-Left, 10, true);
- if (Bottom-Top>0) Fill(Stream_Text, StreamPos_Last, "Height", Bottom-Top, 10, true);
- break;
- default: ;
- }
- Stream[Stream_ID].fccType=fccType;
- Stream[Stream_ID].fccHandler=fccHandler;
- Stream[Stream_ID].Scale=Scale;
- Stream[Stream_ID].Rate=Rate;
- Stream[Stream_ID].Start=Start;
- Stream[Stream_ID].Length=Length;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_strn()
-{
- Element_Name("Stream name");
-
- //Parsing
- Ztring Title;
- Get_Local(Element_Size, Title, "StreamName");
-
- //Filling
- Fill(StreamKind_Last, StreamPos_Last, "Title", Title);
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_strl_vprp()
-{
- Element_Name("Video properties");
-
- //Parsing
- int32u FieldPerFrame;
- int16u FrameAspectRatio_H, FrameAspectRatio_W;
- Skip_L4( "VideoFormatToken");
- Skip_L4( "VideoStandard");
- Skip_L4( "VerticalRefreshRate");
- Skip_L4( "HTotalInT");
- Skip_L4( "VTotalInLines");
- Get_L2 (FrameAspectRatio_H, "FrameAspectRatio Height");
- Get_L2 (FrameAspectRatio_W, "FrameAspectRatio Width");
- Skip_L4( "FrameWidthInPixels");
- Skip_L4( "FrameHeightInLines");
- Get_L4 (FieldPerFrame, "FieldPerFrame");
- for (int32u Pos=0; Pos<FieldPerFrame; Pos++)
- {
- Skip_L4( "CompressedBMHeight");
- Skip_L4( "CompressedBMWidth");
- Skip_L4( "ValidBMHeight");
- Skip_L4( "ValidBMWidth");
- Skip_L4( "ValidBMXOffset");
- Skip_L4( "ValidBMYOffset");
- Skip_L4( "VideoXOffsetInT");
- Skip_L4( "VideoYValidStartLine");
- }
- if(Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- FILLING_BEGIN();
- if (FrameAspectRatio_H && FrameAspectRatio_W)
- Fill(Stream_Video, 0, Video_DisplayAspectRatio, ((float32)FrameAspectRatio_W)/FrameAspectRatio_H, 3);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__hdlr_xxxx()
-{
- AVI__INFO_xxxx();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__idx1()
-{
- Element_Name("Index (old)");
-
- //Tests
- if (!NeedOldIndex || Idx1_Offset==(int64u)-1)
- {
- Skip_XX(Element_Size, "Data");
- return;
- }
-
- //Testing malformed index (index is based on start of the file, wrong)
- if (16<=Element_Size && Idx1_Offset+4==LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset+ 8))
- Idx1_Offset=0; //Fixing base of movi atom, the index think it is the start of the file
-
- //Parsing
- while (Element_Offset+16<=Element_Size)
- {
- //Is too slow
- /*
- int32u ChunkID, Offset, Size;
- Element_Begin1("Index");
- Get_C4 (ChunkID, "ChunkID"); //Bit 31 is set if this is NOT a keyframe
- Info_L4(Flags, "Flags");
- Skip_Flags(Flags, 0, "NoTime");
- Skip_Flags(Flags, 1, "Lastpart");
- Skip_Flags(Flags, 2, "Firstpart");
- Skip_Flags(Flags, 3, "Midpart");
- Skip_Flags(Flags, 4, "KeyFrame");
- Get_L4 (Offset, "Offset"); //qwBaseOffset + this is absolute file offset
- Get_L4 (Size, "Size"); //Bit 31 is set if this is NOT a keyframe
- Element_Info1(Ztring().From_CC4(ChunkID));
- Element_Info1(Size);
-
- //Stream Pos and Size
- int32u StreamID=(ChunkID&0xFFFF0000);
- Stream[StreamID].StreamSize+=Size;
- Stream[StreamID].PacketCount++;
- Stream_Structure[Idx1_Offset+Offset].Name=StreamID;
- Stream_Structure[Idx1_Offset+Offset].Size=Size;
- Element_End0();
- */
-
- //Faster method
- int32u StreamID=BigEndian2int32u (Buffer+Buffer_Offset+(size_t)Element_Offset )&0xFFFF0000;
- int32u Offset =LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset+ 8);
- int32u Size =LittleEndian2int32u(Buffer+Buffer_Offset+(size_t)Element_Offset+12);
- stream& Stream_Item=Stream[StreamID];
- Stream_Item.StreamSize+=Size;
- Stream_Item.PacketCount++;
- stream_structure& Stream_Structure_Item=Stream_Structure[Idx1_Offset+Offset];
- Stream_Structure_Item.Name=StreamID;
- Stream_Structure_Item.Size=Size;
- Element_Offset+=16;
- }
-
- //Interleaved
- size_t Pos0=0;
- size_t Pos1=0;
- for (std::map<int64u, stream_structure>::iterator Temp=Stream_Structure.begin(); Temp!=Stream_Structure.end(); ++Temp)
- {
- switch (Temp->second.Name)
- {
- case 0x30300000 :
- if (Interleaved0_1==0) Interleaved0_1=Temp->first;
- if (Interleaved0_10==0)
- {
- Pos0++;
- if (Pos0>1)
- Interleaved0_10=Temp->first;
- }
- break;
- case 0x30310000 :
- if (Interleaved1_1==0) Interleaved1_1=Temp->first;
- if (Interleaved1_10==0)
- {
- Pos1++;
- if (Pos1>1)
- Interleaved1_10=Temp->first;
- }
- break;
- default:;
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__INFO()
-{
- Element_Name("Tags");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__INFO_IID3()
-{
- Element_Name("ID3 Tag");
-
- //Parsing
- #if defined(MEDIAINFO_ID3_YES)
- File_Id3 MI;
- Open_Buffer_Init(&MI);
- Open_Buffer_Continue(&MI);
- Finish(&MI);
- Merge(MI, Stream_General, 0, 0);
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__INFO_ILYC()
-{
- Element_Name("Lyrics");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__INFO_IMP3()
-{
- Element_Name("MP3 Information");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__INFO_JUNK()
-{
- Element_Name("Garbage");
-}
-
-//---------------------------------------------------------------------------
-// List of information atoms
-// Name X bytes, Pos=0
-//
-void File_Riff::AVI__INFO_xxxx()
-{
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Value");
-
- //Filling
- stream_t StreamKind=Stream_General;
- size_t StreamPos=0;
- size_t Parameter=(size_t)-1;
- switch (Element_Code)
- {
- case 0x00000000 : Parameter=General_Comment; break;
- case Elements::AVI__INFO_IARL : Parameter=General_Archival_Location; break;
- case Elements::AVI__INFO_IART : Parameter=General_Director; break;
- case Elements::AVI__INFO_IAS1 : Parameter=Audio_Language; StreamKind=Stream_Audio; StreamPos=0; break;
- case Elements::AVI__INFO_IAS2 : Parameter=Audio_Language; StreamKind=Stream_Audio; StreamPos=1; break;
- case Elements::AVI__INFO_IAS3 : Parameter=Audio_Language; StreamKind=Stream_Audio; StreamPos=2; break;
- case Elements::AVI__INFO_IAS4 : Parameter=Audio_Language; StreamKind=Stream_Audio; StreamPos=3; break;
- case Elements::AVI__INFO_IAS5 : Parameter=Audio_Language; StreamKind=Stream_Audio; StreamPos=4; break;
- case Elements::AVI__INFO_IAS6 : Parameter=Audio_Language; StreamKind=Stream_Audio; StreamPos=5; break;
- case Elements::AVI__INFO_IAS7 : Parameter=Audio_Language; StreamKind=Stream_Audio; StreamPos=6; break;
- case Elements::AVI__INFO_IAS8 : Parameter=Audio_Language; StreamKind=Stream_Audio; StreamPos=7; break;
- case Elements::AVI__INFO_IAS9 : Parameter=Audio_Language; StreamKind=Stream_Audio; StreamPos=8; break;
- case Elements::AVI__INFO_ICDS : Parameter=General_CostumeDesigner; break;
- case Elements::AVI__INFO_ICMS : Parameter=General_CommissionedBy; break;
- case Elements::AVI__INFO_ICMT : Parameter=General_Comment; break;
- case Elements::AVI__INFO_ICNM : Parameter=General_DirectorOfPhotography; break;
- case Elements::AVI__INFO_ICNT : Parameter=General_Movie_Country; break;
- case Elements::AVI__INFO_ICOP : Parameter=General_Copyright; break;
- case Elements::AVI__INFO_ICRD : Parameter=General_Recorded_Date; Value.Date_From_String(Value.To_Local().c_str()); break;
- case Elements::AVI__INFO_ICRP : Parameter=General_Cropped; break;
- case Elements::AVI__INFO_IDIM : Parameter=General_Dimensions; break;
- case Elements::AVI__INFO_IDIT : Parameter=General_Mastered_Date; Value.Date_From_String(Value.To_Local().c_str()); break;
- case Elements::AVI__INFO_IDPI : Parameter=General_DotsPerInch; break;
- case Elements::AVI__INFO_IDST : Parameter=General_DistributedBy; break;
- case Elements::AVI__INFO_IEDT : Parameter=General_EditedBy; break;
- case Elements::AVI__INFO_IENG : Parameter=General_EncodedBy; break;
- case Elements::AVI__INFO_IGNR : Parameter=General_Genre; break;
- case Elements::AVI__INFO_IFRM : Parameter=General_Part_Position_Total; break;
- case Elements::AVI__INFO_IKEY : Parameter=General_Keywords; break;
- case Elements::AVI__INFO_ILGT : Parameter=General_Lightness; break;
- case Elements::AVI__INFO_ILNG : Parameter=Audio_Language; StreamKind=Stream_Audio; break;
- case Elements::AVI__INFO_IMED : Parameter=General_OriginalSourceMedium; break;
- case Elements::AVI__INFO_IMUS : Parameter=General_MusicBy; break;
- case Elements::AVI__INFO_INAM : Parameter=General_Title; break;
- case Elements::AVI__INFO_IPDS : Parameter=General_ProductionDesigner; break;
- case Elements::AVI__INFO_IPLT : Parameter=General_OriginalSourceForm_NumColors; break;
- case Elements::AVI__INFO_IPRD : Parameter=General_OriginalSourceForm_Name; break;
- case Elements::AVI__INFO_IPRO : Parameter=General_Producer; break;
- case Elements::AVI__INFO_IPRT : Parameter=General_Part_Position; break;
- case Elements::AVI__INFO_IRTD : Parameter=General_LawRating; break;
- case Elements::AVI__INFO_ISBJ : Parameter=General_Subject; break;
- case Elements::AVI__INFO_ISFT : Parameter=General_Encoded_Application; break;
- case Elements::AVI__INFO_ISGN : Parameter=General_Genre; break;
- case Elements::AVI__INFO_ISHP : Parameter=General_OriginalSourceForm_Sharpness; break;
- case Elements::AVI__INFO_ISRC : Parameter=General_OriginalSourceForm_DistributedBy; break;
- case Elements::AVI__INFO_ISRF : Parameter=General_OriginalSourceForm; break;
- case Elements::AVI__INFO_ISTD : Parameter=General_ProductionStudio; break;
- case Elements::AVI__INFO_ISTR : Parameter=General_Performer; break;
- case Elements::AVI__INFO_ITCH : Parameter=General_EncodedBy; break;
- case Elements::AVI__INFO_IWEB : Parameter=General_Movie_Url; break;
- case Elements::AVI__INFO_IWRI : Parameter=General_WrittenBy; break;
- default : ;
- }
- Element_Name(MediaInfoLib::Config.Info_Get(StreamKind, Parameter, Info_Name));
- Element_Info1(Value);
-
- switch (Element_Code)
- {
- case Elements::AVI__INFO_ISMP : INFO_ISMP=Value;
- break;
- case Elements::AVI__INFO_IGNR :
- {
- Ztring ISGN=Retrieve(Stream_General, 0, General_Genre);
- Clear(Stream_General, 0, General_Genre);
- Fill(StreamKind, StreamPos, General_Genre, Value);
- if (!ISGN.empty())
- Fill(StreamKind, StreamPos, General_Genre, ISGN);
- }
- break;
- default :
- if (!Value.empty())
- {
- if (Parameter!=(size_t)-1)
- Fill(StreamKind, StreamPos, Parameter, Value);
- else
- Fill(StreamKind, StreamPos, Ztring().From_CC4((int32u)Element_Code).To_Local().c_str(), Value, true);
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__JUNK()
-{
- Element_Name("Garbage"); //Library defined size for padding, often used to store library name
-
- if (Element_Size<8)
- {
- Skip_XX(Element_Size, "Junk");
- return;
- }
-
- //Detect DivX files
- if (CC5(Buffer+Buffer_Offset)==CC5("DivX "))
- {
- Fill(Stream_General, 0, General_Format, "DivX", Unlimited, true, true);
- }
- //MPlayer
- else if (CC8(Buffer+Buffer_Offset)==CC8("[= MPlay") && Retrieve(Stream_General, 0, General_Encoded_Library).empty())
- Fill(Stream_General, 0, General_Encoded_Library, "MPlayer");
- //Scenalyzer
- else if (CC8(Buffer+Buffer_Offset)==CC8("scenalyz") && Retrieve(Stream_General, 0, General_Encoded_Library).empty())
- Fill(Stream_General, 0, General_Encoded_Library, "Scenalyzer");
- //FFMpeg broken files detection
- else if (CC8(Buffer+Buffer_Offset)==CC8("odmldmlh"))
- dmlh_TotalFrame=0; //this is not normal to have this string in a JUNK block!!! and in files tested, in this case TotalFrame is broken too
- //VirtualDubMod
- else if (CC8(Buffer+Buffer_Offset)==CC8("INFOISFT"))
- {
- int32u Size=LittleEndian2int32u(Buffer+Buffer_Offset+8);
- if (Size>Element_Size-12)
- Size=(int32u)Element_Size-12;
- Fill(Stream_General, 0, General_Encoded_Library, (const char*)(Buffer+Buffer_Offset+12), Size);
- }
- else if (CC8(Buffer+Buffer_Offset)==CC8("INFOIENG"))
- {
- int32u Size=LittleEndian2int32u(Buffer+Buffer_Offset+8);
- if (Size>Element_Size-12)
- Size=(int32u)Element_Size-12;
- Fill(Stream_General, 0, General_Encoded_Library, (const char*)(Buffer+Buffer_Offset+12), Size);
- }
- //Other libraries?
- else if (CC1(Buffer+Buffer_Offset)>=CC1("A") && CC1(Buffer+Buffer_Offset)<=CC1("z") && Retrieve(Stream_General, 0, General_Encoded_Library).empty())
- Fill(Stream_General, 0, General_Encoded_Library, (const char*)(Buffer+Buffer_Offset), (size_t)Element_Size);
-
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__MD5_()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- {
- int128u MD5Stored;
- Get_L16 (MD5Stored, "MD5");
- Ztring MD5_PerItem;
- MD5_PerItem.From_Number(MD5Stored, 16);
- while (MD5_PerItem.size()<32)
- MD5_PerItem.insert(MD5_PerItem.begin(), '0'); //Padding with 0, this must be a 32-byte string
- MD5_PerItem.MakeLowerCase();
- MD5s.push_back(MD5_PerItem);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__movi()
-{
- Element_Name("Datas");
-
- //Only the first time, no need in AVIX
- if (movi_Size==0)
- {
- Idx1_Offset=File_Offset+Buffer_Offset-4;
- BookMark_Set(); //Remenbering this place, for stream parsing in phase 2
-
- //For each stream
- std::map<int32u, stream>::iterator Temp=Stream.begin();
- while (Temp!=Stream.end())
- {
- if ((Temp->second.Parsers.empty() || Temp->second.Parsers[0]==NULL) && Temp->second.fccType!=Elements::AVI__hdlr_strl_strh_txts)
- {
- Temp->second.SearchingPayload=false;
- stream_Count--;
- }
- ++Temp;
- }
- }
-
- //Probing rec (with index, this is not always tested in the flow
- if (Element_Size<12)
- {
- Element_WaitForMoreData();
- return;
- }
- if (CC4(Buffer+Buffer_Offset+8)==0x72656320) //"rec "
- rec__Present=true;
-
- //Filling
- if (!SecondPass)
- movi_Size+=Element_TotalSize_Get();
-
- //We must parse moov?
- if (NeedOldIndex || (stream_Count==0 && Index_Pos.empty()))
- {
- //Jumping
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Param("Data", Ztring("(")+Ztring::ToZtring(Element_TotalSize_Get())+Ztring(" bytes)"));
- #endif //MEDIAINFO_TRACE
- Element_Offset=Element_TotalSize_Get(); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
- return;
- }
-
- //Jump to next useful data
- AVI__movi_StreamJump();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__movi_rec_()
-{
- Element_Name("Syncronisation");
-
- rec__Present=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__movi_rec__xxxx()
-{
- AVI__movi_xxxx();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__movi_xxxx()
-{
- if (Element_Code==Elements::AVI__JUNK)
- {
- Skip_XX(Element_Size, "Junk");
- AVI__movi_StreamJump();
- return;
- }
-
- if (Element_Code!=(int64u)-1)
- Stream_ID=(int32u)(Element_Code&0xFFFF0000);
- else
- Stream_ID=(int32u)-1;
-
- if (Stream_ID==0x69780000) //ix..
- {
- //AVI Standard Index Chunk
- AVI__hdlr_strl_indx();
- Stream_ID=(int32u)(Element_Code&0x0000FFFF)<<16;
- AVI__movi_StreamJump();
- return;
- }
- if ((Element_Code&0x0000FFFF)==0x00006978) //..ix (Out of specs, but found in a Adobe After Effects CS4 DV file
- {
- //AVI Standard Index Chunk
- AVI__hdlr_strl_indx();
- Stream_ID=(int32u)(Element_Code&0xFFFF0000);
- AVI__movi_StreamJump();
- return;
- }
-
- #if MEDIAINFO_DEMUX
- if (Stream[Stream_ID].Rate) //AVI
- {
- int64u Element_Code_Old=Element_Code;
- Element_Code=((Element_Code_Old>>24)&0xF)*10+((Element_Code_Old>>16)&0xF);
- Frame_Count_NotParsedIncluded=Stream[Stream_ID].PacketPos;
- FrameInfo.DTS=Frame_Count_NotParsedIncluded*1000000000*Stream[Stream_ID].Scale/Stream[Stream_ID].Rate;
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- Element_Code=Element_Code_Old;
- Frame_Count_NotParsedIncluded=(int64u)-1;
- }
- else //WAV
- {
- //TODO
- }
- #endif //MEDIAINFO_DEMUX
-
- Stream[Stream_ID].PacketPos++;
-
- //Finished?
- if (!Stream[Stream_ID].SearchingPayload)
- {
- Element_DoNotShow();
- AVI__movi_StreamJump();
- return;
- }
-
- #if MEDIAINFO_TRACE
- if (Config_Trace_Level)
- {
- switch (Element_Code&0x0000FFFF) //2 last bytes
- {
- case Elements::AVI__movi_xxxx_____ : Element_Info1("DV"); break;
- case Elements::AVI__movi_xxxx___db :
- case Elements::AVI__movi_xxxx___dc : Element_Info1("Video"); break;
- case Elements::AVI__movi_xxxx___sb :
- case Elements::AVI__movi_xxxx___tx : Element_Info1("Text"); break;
- case Elements::AVI__movi_xxxx___wb : Element_Info1("Audio"); break;
- default : Element_Info1("Unknown"); break;
- }
- Element_Info1(Stream[Stream_ID].PacketPos);
- }
- #endif //MEDIAINFO_TRACE
-
- //Some specific stuff
- switch (Element_Code&0x0000FFFF) //2 last bytes
- {
- case Elements::AVI__movi_xxxx___tx : AVI__movi_xxxx___tx(); break;
- default : ;
- }
-
- //Parsing
- for (size_t Pos=0; Pos<Stream[Stream_ID].Parsers.size(); Pos++)
- if (Stream[Stream_ID].Parsers[Pos])
- {
- if (FrameInfo.PTS!=(int64u)-1)
- Stream[Stream_ID].Parsers[Pos]->FrameInfo.PTS=FrameInfo.PTS;
- if (FrameInfo.DTS!=(int64u)-1)
- Stream[Stream_ID].Parsers[Pos]->FrameInfo.DTS=FrameInfo.DTS;
-
- Open_Buffer_Continue(Stream[Stream_ID].Parsers[Pos], Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- Element_Show();
- if (Stream[Stream_ID].Parsers.size()==1 && Stream[Stream_ID].Parsers[Pos]->Buffer_Size>0)
- Stream[Stream_ID].ChunksAreComplete=false;
-
- if (Stream[Stream_ID].Parsers.size()>1)
- {
- if (!Stream[Stream_ID].Parsers[Pos]->Status[IsAccepted] && Stream[Stream_ID].Parsers[Pos]->Status[IsFinished])
- {
- delete *(Stream[Stream_ID].Parsers.begin()+Pos);
- Stream[Stream_ID].Parsers.erase(Stream[Stream_ID].Parsers.begin()+Pos);
- Pos--;
- }
- else if (Stream[Stream_ID].Parsers.size()>1 && Stream[Stream_ID].Parsers[Pos]->Status[IsAccepted])
- {
- File__Analyze* Parser=Stream[Stream_ID].Parsers[Pos];
- for (size_t Pos2=0; Pos2<Stream[Stream_ID].Parsers.size(); Pos2++)
- {
- if (Pos2!=Pos)
- delete *(Stream[Stream_ID].Parsers.begin()+Pos2);
- }
- Stream[Stream_ID].Parsers.clear();
- Stream[Stream_ID].Parsers.push_back(Parser);
- Pos=0;
- }
- }
-
- #if MEDIAINFO_DEMUX
- if (Config->Demux_EventWasSent)
- {
- Demux_Parser=Stream[Stream_ID].Parsers[Pos];
- return;
- }
- #endif //MEDIAINFO_DEMUX
- }
- Element_Offset=Element_Size;
-
- //Some specific stuff
- switch (Element_Code&0x0000FFFF) //2 last bytes
- {
- case Elements::AVI__movi_xxxx_____ :
- case Elements::AVI__movi_xxxx___db :
- case Elements::AVI__movi_xxxx___dc : AVI__movi_xxxx___dc(); break;
- case Elements::AVI__movi_xxxx___wb : AVI__movi_xxxx___wb(); break;
- default : ;
- }
-
- //We must always parse moov?
- AVI__movi_StreamJump();
-
- Element_Show();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__movi_xxxx___dc()
-{
- //Finish (if requested)
- if (Stream[Stream_ID].Parsers.empty()
- || Stream[Stream_ID].Parsers[0]->Status[IsFinished]
- || (Stream[Stream_ID].PacketPos>=300 && MediaInfoLib::Config.ParseSpeed_Get()<1.00))
- {
- Stream[Stream_ID].SearchingPayload=false;
- stream_Count--;
- return;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__movi_xxxx___tx()
-{
- //Parsing
- int32u Name_Size;
- Ztring Value;
- int32u GAB2;
- Peek_B4(GAB2);
- if (GAB2==0x47414232 && Element_Size>=17)
- {
- Skip_C4( "GAB2");
- Skip_L1( "Zero");
- Skip_L2( "CodePage"); //2=Unicode
- Get_L4 (Name_Size, "Name_Size");
- Skip_UTF16L(Name_Size, "Name");
- Skip_L2( "Four");
- Skip_L4( "File_Size");
-
- if (Element_Offset>Element_Size)
- Element_Offset=Element_Size; //Problem
- }
-
- //Skip it
- Stream[Stream_ID].SearchingPayload=false;
- stream_Count--;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__movi_xxxx___wb()
-{
- //Finish (if requested)
- if (Stream[Stream_ID].PacketPos>=4 //For having the chunk alignement
- && (Stream[Stream_ID].Parsers.empty()
- || Stream[Stream_ID].Parsers[0]->Status[IsFinished]
- || (Stream[Stream_ID].PacketPos>=300 && MediaInfoLib::Config.ParseSpeed_Get()<1.00)))
- {
- Stream[Stream_ID].SearchingPayload=false;
- stream_Count--;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__movi_StreamJump()
-{
- //Jump to next useful data
- if (!Index_Pos.empty())
- {
- if (Index_Pos.begin()->first<=File_Offset+Buffer_Offset && Element_Code!=Elements::AVI__movi)
- Index_Pos.erase(Index_Pos.begin());
- int64u ToJump=File_Size;
- if (!Index_Pos.empty())
- ToJump=Index_Pos.begin()->first;
- if (ToJump>File_Size)
- ToJump=File_Size;
- if (ToJump>=File_Offset+Buffer_Offset+Element_TotalSize_Get(Element_Level-2)) //We want always Element movi
- {
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get() && SecondPass)
- Md5_ParseUpTo=File_Offset+Buffer_Offset+Element_TotalSize_Get(Element_Level-2);
- else
- #endif //MEDIAINFO_MD5
- GoTo(File_Offset+Buffer_Offset+Element_TotalSize_Get(Element_Level-2), "AVI"); //Not in this chunk
- }
- else if (ToJump!=File_Offset+Buffer_Offset+(Element_Code==Elements::AVI__movi?0:Element_Size))
- {
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get() && SecondPass)
- Md5_ParseUpTo=File_Offset+Buffer_Offset+Element_TotalSize_Get(Element_Level-2);
- else
- #endif //MEDIAINFO_MD5
- GoTo(ToJump, "AVI"); //Not just after
- }
- }
- else if (stream_Count==0)
- {
- //Jumping
- Element_Show();
- if (rec__Present)
- Element_End0();
- Info("movi, Jumping to end of chunk");
- if (SecondPass)
- {
- std::map<int32u, stream>::iterator Temp=Stream.begin();
- while (Temp!=Stream.end())
- {
- for (size_t Pos=0; Pos<Temp->second.Parsers.size(); ++Pos)
- {
- Temp->second.Parsers[Pos]->Fill();
- Temp->second.Parsers[Pos]->Open_Buffer_Unsynch();
- }
- ++Temp;
- }
- Finish("AVI"); //The rest is already parsed
- }
- else
- GoTo(File_Offset+Buffer_Offset+Element_TotalSize_Get(), "AVI");
- }
- else if (Stream_Structure_Temp!=Stream_Structure.end())
- {
- do
- Stream_Structure_Temp++;
- while (Stream_Structure_Temp!=Stream_Structure.end() && !(Stream[(int32u)Stream_Structure_Temp->second.Name].SearchingPayload && Config->ParseSpeed<1.0));
- if (Stream_Structure_Temp!=Stream_Structure.end())
- {
- int64u ToJump=Stream_Structure_Temp->first;
- if (ToJump>=File_Offset+Buffer_Offset+Element_TotalSize_Get(Element_Level-2))
- {
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get() && SecondPass)
- Md5_ParseUpTo=File_Offset+Buffer_Offset+Element_TotalSize_Get(Element_Level-2);
- else
- #endif //MEDIAINFO_MD5
- GoTo(File_Offset+Buffer_Offset+Element_TotalSize_Get(Element_Level-2), "AVI"); //Not in this chunk
- }
- else if (ToJump!=File_Offset+Buffer_Offset+Element_Size)
- {
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get() && SecondPass)
- Md5_ParseUpTo=ToJump;
- else
- #endif //MEDIAINFO_MD5
- GoTo(ToJump, "AVI"); //Not just after
- }
- }
- else
- Finish("AVI");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__PrmA()
-{
- Element_Name("Adobe Premiere PrmA");
-
- //Parsing
- int32u FourCC, Size;
- Get_C4 (FourCC, "FourCC");
- Get_B4 (Size, "Size");
- switch (FourCC)
- {
- case 0x50415266:
- if (Size==20)
- {
- int32u PAR_X, PAR_Y;
- Skip_B4( "Unknown");
- Get_B4 (PAR_X, "PAR_X");
- Get_B4 (PAR_Y, "PAR_Y");
-
- if (PAR_Y)
- PAR=((float64)PAR_X)/PAR_Y;
- }
- else
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- break;
- default:
- for (int32u Pos=8; Pos<Size; Pos++)
- Skip_B4( "Unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__Tdat()
-{
- Element_Name("Adobe Premiere Tdat");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__Tdat_tc_A()
-{
- Element_Name("tc_A");
-
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Unknown");
-
- if (Value.find_first_not_of(__T("0123456789:;"))==string::npos)
- Tdat_tc_A=Value;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__Tdat_tc_O()
-{
- Element_Name("tc_O");
-
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Unknown");
-
- if (Value.find_first_not_of(__T("0123456789:;"))==string::npos)
- Tdat_tc_O=Value;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__Tdat_rn_A()
-{
- Element_Name("rn_A");
-
- //Parsing
- Skip_Local(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__Tdat_rn_O()
-{
- Element_Name("rn_O");
-
- //Parsing
- Skip_Local(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVI__xxxx()
-{
- Stream_ID=(int32u)(Element_Code&0xFFFF0000);
-
- if (Stream_ID==0x69780000) //ix..
- {
- //AVI Standard Index Chunk
- AVI__hdlr_strl_indx();
- Stream_ID=(int32u)(Element_Code&0x0000FFFF)<<16;
- AVI__movi_StreamJump();
- return;
- }
- if ((Element_Code&0x0000FFFF)==0x00006978) //..ix (Out of specs, but found in a Adobe After Effects CS4 DV file
- {
- //AVI Standard Index Chunk
- AVI__hdlr_strl_indx();
- Stream_ID=(int32u)(Element_Code&0xFFFF0000);
- AVI__movi_StreamJump();
- return;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVIX()
-{
- //Filling
- Fill(Stream_General, 0, General_Format_Profile, "OpenDML", Unlimited, true, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVIX_idx1()
-{
- AVI__idx1();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVIX_movi()
-{
- AVI__movi();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVIX_movi_rec_()
-{
- AVI__movi_rec_();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVIX_movi_rec__xxxx()
-{
- AVIX_movi_xxxx();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::AVIX_movi_xxxx()
-{
- AVI__movi_xxxx();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::CADP()
-{
- Element_Name("CMP4 - ADPCM");
-
- //Testing if we have enough data
- if (Element_Size<4)
- {
- Element_WaitForMoreData();
- return;
- }
-
- //Parsing
- int32u Codec;
- Get_C4 (Codec, "Codec");
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Param("Data", Ztring("(")+Ztring::ToZtring(Element_TotalSize_Get()-Element_Offset)+Ztring(" bytes)"));
- #endif //MEDIAINFO_TRACE
- Element_Offset=Element_TotalSize_Get(); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
-
- FILLING_BEGIN();
- Stream_Prepare(Stream_Audio);
- if (Codec==0x41647063) //Adpc
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, "ADPCM");
- Fill(Stream_Audio, StreamPos_Last, Audio_StreamSize, Element_TotalSize_Get());
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::CDDA()
-{
- Element_Name("Compact Disc for Digital Audio");
-
- //Filling
- Accept("CDDA");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::CDDA_fmt_()
-{
- //Specs: http://fr.wikipedia.org/wiki/Compact_Disc_Audio_track
- //Specs: http://www.moon-soft.com/program/FORMAT/sound/cda.htm
-
- Element_Name("Stream format");
-
- //Parsing
- int32u id;
- int16u Version, tracknb=1;
- int8u TPositionF=0, TPositionS=0, TPositionM=0, TDurationF=0, TDurationS=0, TDurationM=0;
- Get_L2 (Version, "Version"); // Always 1
- if (Version!=1)
- {
- //Not supported
- Skip_XX(Element_Size-2, "Data");
- return;
- }
- Get_L2 (tracknb, "Number"); // Start at 1
- Get_L4 (id, "id");
- Skip_L4( "offset"); // in frames //Priority of FSM format
- Skip_L4( "Duration"); // in frames //Priority of FSM format
- Get_L1 (TPositionF, "Track_PositionF"); // in frames
- Get_L1 (TPositionS, "Track_PositionS"); // in seconds
- Get_L1 (TPositionM, "Track_PositionM"); // in minutes
- Skip_L1( "empty");
- Get_L1 (TDurationF, "Track_DurationF"); // in frames
- Get_L1 (TDurationS, "Track_DurationS"); // in seconds
- Get_L1 (TDurationM, "Track_DurationM"); // in minutes
- Skip_L1( "empty");
-
- FILLING_BEGIN();
- int32u TPosition=TPositionM*60*75+TPositionS*75+TPositionF;
- int32u TDuration=TDurationM*60*75+TDurationS*75+TDurationF;
-
- Fill(Stream_General, 0, General_Track_Position, tracknb);
- Fill(Stream_General, 0, General_Format, "CDDA");
- Fill(Stream_General, 0, General_Format_Info, "Compact Disc for Digital Audio");
- Fill(Stream_General, 0, General_UniqueID, id);
- Fill(Stream_General, 0, General_FileSize, File_Size+TDuration*2352, 10, true);
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, 0, Audio_Format, "PCM");
- Fill(Stream_Audio, 0, Audio_Format_Settings_Endianness, "Little");
- Fill(Stream_Audio, 0, Audio_BitDepth, 16);
- Fill(Stream_Audio, 0, Audio_Channel_s_, 2);
- Fill(Stream_Audio, 0, Audio_SamplingRate, 44100);
- Fill(Stream_Audio, 0, Audio_FrameRate, 75);
- Fill(Stream_Audio, 0, Audio_BitRate, 1411200);
- Fill(Stream_Audio, 0, Audio_Compression_Mode, "Lossless");
- Fill(Stream_Audio, 0, Audio_FrameCount, TDuration);
- Fill(Stream_Audio, 0, Audio_Duration, float32_int32s(((float32)TDuration)*1000/75));
- Fill(Stream_Audio, 0, Audio_Delay, float32_int32s(((float32)TPosition)*1000/75));
-
- //No more need data
- Finish("CDDA");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::CMJP()
-{
- Element_Name("CMP4 - JPEG");
-
- //Parsing
- #ifdef MEDIAINFO_JPEG_YES
- Stream_ID=0;
- File_Jpeg* Parser=new File_Jpeg;
- Open_Buffer_Init(Parser);
- Parser->StreamKind=Stream_Video;
- Open_Buffer_Continue(Parser);
- Element_Offset=Element_TotalSize_Get(); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
-
- FILLING_BEGIN();
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, StreamPos_Last, Video_StreamSize, Element_TotalSize_Get());
- Finish(Parser);
- Merge(*Parser, StreamKind_Last, 0, StreamPos_Last);
- FILLING_END();
-
- Stream[Stream_ID].Parsers.push_back(Parser);
- #else
- Element_Offset=Element_TotalSize_Get(); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
-
- FILLING_BEGIN();
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, StreamPos_Last, Video_Format, "JPEG");
- Fill(Stream_Video, StreamPos_Last, Video_StreamSize, Element_TotalSize_Get());
- FILLING_END();
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::CMP4()
-{
- Accept("CMP4");
- Element_Name("CMP4 - Header");
-
- //Parsing
- Ztring Title;
- Get_Local(Element_Size, Title, "Title");
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Format, "CMP4");
- Fill(Stream_General, 0, "Title", Title);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::IDVX()
-{
- Element_Name("Tags");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::INDX()
-{
- Element_Name("Index (from which spec?)");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::INDX_xxxx()
-{
- Stream_ID=(int32u)(Element_Code&0xFFFF0000);
-
- if (Stream_ID==0x69780000) //ix..
- {
- //Index
- int32u Entry_Count, ChunkId;
- int16u LongsPerEntry;
- int8u IndexType, IndexSubType;
- Get_L2 (LongsPerEntry, "LongsPerEntry"); //Size of each entry in aIndex array
- Get_L1 (IndexSubType, "IndexSubType");
- Get_L1 (IndexType, "IndexType");
- Get_L4 (Entry_Count, "EntriesInUse"); //Index of first unused member in aIndex array
- Get_C4 (ChunkId, "ChunkId"); //FCC of what is indexed
-
- Skip_L4( "Unknown");
- Skip_L4( "Unknown");
- Skip_L4( "Unknown");
-
- for (int32u Pos=0; Pos<Entry_Count; Pos++)
- {
- Skip_L8( "Offset");
- Skip_L4( "Size");
- Skip_L4( "Frame number?");
- Skip_L4( "Frame number?");
- Skip_L4( "Zero");
- }
- }
-
- //Currently, we do not use the index
- //TODO: use the index
- Stream_Structure.clear();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::JUNK()
-{
- Element_Name("Junk");
-
- //Parse
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Param("Junk", Ztring("(")+Ztring::ToZtring(Element_TotalSize_Get())+Ztring(" bytes)"));
- #endif //MEDIAINFO_TRACE
- Element_Offset=Element_TotalSize_Get(); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::menu()
-{
- Element_Name("DivX Menu");
-
- //Filling
- Stream_Prepare(Stream_Menu);
- Fill(Stream_Menu, StreamPos_Last, Menu_Format, "DivX Menu");
- Fill(Stream_Menu, StreamPos_Last, Menu_Codec, "DivX");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::MThd()
-{
- Element_Name("MIDI header");
-
- //Parsing
- Skip_B2( "format");
- Skip_B2( "ntrks");
- Skip_B2( "division");
-
- FILLING_BEGIN_PRECISE();
- Accept("MIDI");
- Fill(Stream_General, 0, General_Format, "MIDI");
- FILLING_ELSE();
- Reject("MIDI");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::MTrk()
-{
- Element_Name("MIDI Track");
-
- //Parsing
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Param("Data", Ztring("(")+Ztring::ToZtring(Element_TotalSize_Get())+Ztring(" bytes)"));
- #endif //MEDIAINFO_TRACE
- Element_Offset=Element_TotalSize_Get(); //Not using Skip_XX() because we want to skip data we don't have, and Skip_XX() does a test on size of buffer
-
- FILLING_BEGIN();
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, "MIDI");
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "Midi");
-
- Finish("MIDI");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::PAL_()
-{
- Data_Accept("RIFF Palette");
- Element_Name("RIFF Palette");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "RIFF Palette");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::QLCM()
-{
- Data_Accept("QLCM");
- Element_Name("QLCM");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "QLCM");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::QLCM_fmt_()
-{
- //Parsing
- Ztring codec_name;
- int128u codec_guid;
- int32u num_rates;
- int16u codec_version, average_bps, packet_size, block_size, sampling_rate, sample_size;
- int8u major, minor;
- Get_L1 (major, "major");
- Get_L1 (minor, "minor");
- Get_GUID(codec_guid, "codec-guid");
- Get_L2 (codec_version, "codec-version");
- Get_Local(80, codec_name, "codec-name");
- Get_L2 (average_bps, "average-bps");
- Get_L2 (packet_size, "packet-size");
- Get_L2 (block_size, "block-size");
- Get_L2 (sampling_rate, "sampling-rate");
- Get_L2 (sample_size, "sample-size");
- Element_Begin1("rate-map-table");
- Get_L4 (num_rates, "num-rates");
- for (int32u rate=0; rate<num_rates; rate++)
- {
- Skip_L2( "rate-size");
- Skip_L2( "rate-octet");
- }
- Element_End0();
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- if (Element_Offset<Element_Size)
- Skip_L4( "Reserved"); //Some files don't have the 5th reserved dword
-
- FILLING_BEGIN_PRECISE();
- Stream_Prepare (Stream_Audio);
- switch (codec_guid.hi)
- {
- case Elements::QLCM_QCELP1 :
- case Elements::QLCM_QCELP2 : Fill(Stream_Audio, 0, Audio_Format, "QCELP"); Fill(Stream_Audio, 0, Audio_Codec, "QCELP"); break;
- case Elements::QLCM_EVRC : Fill(Stream_Audio, 0, Audio_Format, "EVRC"); Fill(Stream_Audio, 0, Audio_Codec, "EVRC"); break;
- case Elements::QLCM_SMV : Fill(Stream_Audio, 0, Audio_Format, "SMV"); Fill(Stream_Audio, 0, Audio_Codec, "SMV"); break;
- default : ;
- }
- Fill(Stream_Audio, 0, Audio_BitRate, average_bps);
- Fill(Stream_Audio, 0, Audio_SamplingRate, sampling_rate);
- Fill(Stream_Audio, 0, Audio_BitDepth, sample_size);
- Fill(Stream_Audio, 0, Audio_Channel_s_, 1);
- FILLING_END();
-}
-
-#if defined(MEDIAINFO_GXF_YES)
-//---------------------------------------------------------------------------
-void File_Riff::rcrd()
-{
- Data_Accept("Ancillary media packets");
- Element_Name("Ancillary media packets");
-
- //Filling
- if (Retrieve(Stream_General, 0, General_Format).empty())
- Fill(Stream_General, 0, General_Format, "Ancillary media packets"); //GXF, RDD14-2007
-
- //Clearing old data
- if (Ancillary)
- {
- (*Ancillary)->FrameInfo.DTS=FrameInfo.DTS;
- Open_Buffer_Continue(*Ancillary, Buffer, 0);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::rcrd_desc()
-{
- Element_Name("Ancillary media packet description");
-
- //Parsing
- int32u Version;
- Get_L4 (Version, "Version");
- if (Version==2)
- {
- Skip_L4( "Number of fields");
- Skip_L4( "Length of the ancillary data field descriptions");
- Skip_L4( "Byte size of the complete ancillary media packet");
- Skip_L4( "Format of the video");
- }
- else
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::rcrd_fld_()
-{
- Element_Name("Ancillary data field description");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::rcrd_fld__anc_()
-{
- Element_Name("Ancillary data sample description");
-
- rcrd_fld__anc__pos__LineNumber=(int32u)-1;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::rcrd_fld__anc__pos_()
-{
- Element_Name("Ancillary data sample description");
-
- //Parsing
- Get_L4 (rcrd_fld__anc__pos__LineNumber, "Video line number");
- Skip_L4( "Ancillary video color difference or luma space");
- Skip_L4( "Ancillary video space");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::rcrd_fld__anc__pyld()
-{
- Element_Name("Ancillary data sample payload");
-
- if (Ancillary)
- {
- (*Ancillary)->FrameInfo.DTS=FrameInfo.DTS;
- (*Ancillary)->LineNumber=rcrd_fld__anc__pos__LineNumber;
- Open_Buffer_Continue(*Ancillary);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::rcrd_fld__finf()
-{
- Element_Name("Data field description");
-
- //Parsing
- Skip_L4( "Video field identifier");
-}
-#endif //MEDIAINFO_GXF_YES
-
-//---------------------------------------------------------------------------
-void File_Riff::RDIB()
-{
- Data_Accept("RIFF DIB");
- Element_Name("RIFF DIB");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "RIFF DIB");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::RMID()
-{
- Data_Accept("RIFF MIDI");
- Element_Name("RIFF MIDI");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "RIFF MIDI");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::RMMP()
-{
- Data_Accept("RIFF MMP");
- Element_Name("RIFF MMP");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "RIFF MMP");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::RMP3()
-{
- Data_Accept("RMP3");
- Element_Name("RMP3");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "RMP3");
- Kind=Kind_Rmp3;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::RMP3_data()
-{
- Element_Name("Raw datas");
-
- Fill(Stream_Audio, 0, Audio_StreamSize, Buffer_DataToParse_End-Buffer_DataToParse_Begin);
- Stream_Prepare(Stream_Audio);
-
- //Creating parser
- #if defined(MEDIAINFO_MPEGA_YES)
- File_Mpega* Parser=new File_Mpega;
- Parser->CalculateDelay=true;
- Parser->ShouldContinueParsing=true;
- Open_Buffer_Init(Parser);
- stream& StreamItem=Stream[(int32u)-1];
- StreamItem.StreamKind=Stream_Audio;
- StreamItem.StreamPos=0;
- StreamItem.Parsers.push_back(Parser);
- #else //MEDIAINFO_MPEG4_YES
- Fill(Stream_Audio, 0, Audio_Format, "MPEG Audio");
- Skip_XX(Buffer_DataToParse_End-Buffer_DataToParse_Begin, "Data");
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::RMP3_data_Continue()
-{
- #if MEDIAINFO_DEMUX
- if (Element_Size)
- {
- Demux_random_access=true;
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- }
- #endif //MEDIAINFO_DEMUX
-
- Element_Code=(int64u)-1;
- AVI__movi_xxxx();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::SMV0()
-{
- Accept("SMV");
-
- //Parsing
- int8u Version;
- Skip_C1( "Identifier (continuing)");
- Get_C1 (Version, "Version");
- Skip_C3( "Identifier (continuing)");
- if (Version=='1')
- {
- int32u Width, Height, FrameRate, BlockSize, FrameCount;
- Get_B3 (Width, "Width");
- Get_B3 (Height, "Height");
- Skip_B3( "0x000010");
- Skip_B3( "0x000001");
- Get_B3 (BlockSize, "Block size");
- Get_B3 (FrameRate, "Frame rate");
- Get_B3 (FrameCount, "Frame count");
- Skip_B3( "0x000000");
- Skip_B3( "0x000000");
- Skip_B3( "0x000000");
- Skip_B3( "0x010101");
- Skip_B3( "0x010101");
- Skip_B3( "0x010101");
- Skip_B3( "0x010101");
-
- //Filling
- Fill(Stream_General, 0, General_Format_Profile, "SMV v1");
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_MuxingMode, "SMV v1");
- Fill(Stream_Video, 0, Video_Width, Width);
- Fill(Stream_Video, 0, Video_Height, Height);
- Fill(Stream_Video, 0, Video_FrameRate, (float)FrameRate);
- Fill(Stream_Video, 0, Video_FrameCount, FrameCount);
-
- Finish("SMV");
- }
- else if (Version=='2')
- {
- int32u Width, Height, FrameRate;
- Get_L3 (Width, "Width");
- Get_L3 (Height, "Height");
- Skip_L3( "0x000010");
- Skip_L3( "0x000001");
- Get_L3 (SMV_BlockSize, "Block size");
- Get_L3 (FrameRate, "Frame rate");
- Get_L3 (SMV_FrameCount, "Frame count");
- Skip_L3( "0x000001");
- Skip_L3( "0x000000");
- Skip_L3( "Frame rate");
- Skip_L3( "0x010101");
- Skip_L3( "0x010101");
- Skip_L3( "0x010101");
- Skip_L3( "0x010101");
-
- //Filling
- SMV_BlockSize+=3;
- SMV_FrameCount++;
- Fill(Stream_General, 0, General_Format_Profile, "SMV v2");
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "JPEG");
- Fill(Stream_Video, 0, Video_Codec, "JPEG");
- Fill(Stream_Video, 0, Video_MuxingMode, "SMV v2");
- Fill(Stream_Video, 0, Video_Width, Width);
- Fill(Stream_Video, 0, Video_Height, Height);
- Fill(Stream_Video, 0, Video_FrameRate, FrameRate);
- Fill(Stream_Video, 0, Video_FrameCount, SMV_FrameCount);
- Fill(Stream_Video, 0, Video_StreamSize, SMV_BlockSize*SMV_FrameCount);
- }
- else
- Finish("SMV");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::SMV0_xxxx()
-{
- //Parsing
- int32u Size;
- Get_L3 (Size, "Size");
- #if defined(MEDIAINFO_JPEG_YES)
- //Creating the parser
- File_Jpeg MI;
- Open_Buffer_Init(&MI);
-
- //Parsing
- Open_Buffer_Continue(&MI, Size);
-
- //Filling
- Finish(&MI);
- Merge(MI, Stream_Video, 0, StreamPos_Last);
-
- //Positioning
- Element_Offset+=Size;
- #else
- //Parsing
- Skip_XX(Size, "JPEG data");
- #endif
- Skip_XX(Element_Size-Element_Offset, "Padding");
-
- //Filling
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get())
- Element_Offset=Element_Size+(SMV_FrameCount-1)*SMV_BlockSize;
- #endif //MEDIAINFO_MD5
- Data_GoTo(File_Offset+Buffer_Offset+(size_t)Element_Size+(SMV_FrameCount-1)*SMV_BlockSize, "SMV");
- SMV_BlockSize=0;
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE()
-{
- Data_Accept("Wave");
- Element_Name("Wave");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "Wave");
- Kind=Kind_Wave;
- #if MEDIAINFO_EVENTS
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE__pmx()
-{
- Element_Name("XMP");
-
- //Parsing
- Ztring XML_Data;
- Get_Local(Element_Size, XML_Data, "XML data");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_aXML()
-{
- Element_Name("aXML");
-
- //Parsing
- Skip_Local(Element_Size, "XML data");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_bext()
-{
- Element_Name("Broadcast extension");
-
- //Parsing
- Ztring Description, Originator, OriginatorReference, OriginationDate, OriginationTime, History;
- int16u Version;
- Get_Local(256, Description, "Description");
- Get_Local( 32, Originator, "Originator");
- Get_Local( 32, OriginatorReference, "OriginatorReference");
- Get_Local( 10, OriginationDate, "OriginationDate");
- Get_Local( 8, OriginationTime, "OriginationTime");
- Get_L8 ( TimeReference, "TimeReference"); //To be divided by SamplesPerSec
- Get_L2 ( Version, "Version");
- if (Version==1)
- Skip_UUID( "UMID");
- Skip_XX (602-Element_Offset, "Reserved");
- if (Element_Offset<Element_Size)
- Get_Local(Element_Size-Element_Offset, History, "History");
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Description, Description);
- Fill(Stream_General, 0, General_Producer, Originator);
- Fill(Stream_General, 0, "Producer_Reference", OriginatorReference);
- Fill(Stream_General, 0, General_Encoded_Date, OriginationDate+__T(' ')+OriginationTime);
- Fill(Stream_General, 0, General_Encoded_Library_Settings, History);
- if (SamplesPerSec && TimeReference!=(int64u)-1)
- {
- Fill(Stream_Audio, 0, Audio_Delay, float64_int64s(((float64)TimeReference)*1000/SamplesPerSec));
- Fill(Stream_Audio, 0, Audio_Delay_Source, "Container (bext)");
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_cue_()
-{
- Element_Name("Cue points");
-
- //Parsing
- int32u numCuePoints;
- Get_L4(numCuePoints, "numCuePoints");
- for (int32u Pos=0; Pos<numCuePoints; Pos++)
- {
- Element_Begin1("Cue point");
- Skip_L4( "ID");
- Skip_L4( "Position");
- Skip_C4( "DataChunkID");
- Skip_L4( "ChunkStart");
- Skip_L4( "BlockStart");
- Skip_L4( "SampleOffset");
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_data()
-{
- Element_Name("Raw datas");
-
- if (Buffer_DataToParse_End-Buffer_DataToParse_Begin<100)
- {
- Skip_XX(Buffer_DataToParse_End-Buffer_Offset, "Unknown");
- return; //This is maybe embeded in another container, and there is only the header (What is the junk?)
- }
-
- FILLING_BEGIN();
- Fill(Stream_Audio, 0, Audio_StreamSize, Buffer_DataToParse_End-Buffer_DataToParse_Begin);
- FILLING_END();
-
- //Parsing
- Element_Code=(int64u)-1;
-
- FILLING_BEGIN();
- int64u Duration=Retrieve(Stream_Audio, 0, Audio_Duration).To_int64u();
- int64u BitRate=Retrieve(Stream_Audio, 0, Audio_BitRate).To_int64u();
- if (Duration)
- {
- int64u BitRate_New=(Buffer_DataToParse_End-Buffer_DataToParse_Begin)*8*1000/Duration;
- if (BitRate_New<BitRate*0.95 || BitRate_New>BitRate*1.05)
- Fill(Stream_Audio, 0, Audio_BitRate, BitRate_New, 10, true); //Correcting the bitrate, it was false in the header
- }
- else if (BitRate)
- {
- if (IsSub)
- //Retrieving "data" real size, in case of truncated files and/or wave header in another container
- Duration=((int64u)LittleEndian2int32u(Buffer+Buffer_Offset-4))*8*1000/BitRate; //TODO: RF64 is not handled
- else
- Duration=(Buffer_DataToParse_End-Buffer_DataToParse_Begin)*8*1000/BitRate;
- Fill(Stream_General, 0, General_Duration, Duration, 10, true);
- Fill(Stream_Audio, 0, Audio_Duration, Duration, 10, true);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_data_Continue()
-{
- #if MEDIAINFO_DEMUX
- Element_Code=(int64u)-1;
- if (AvgBytesPerSec && Demux_Rate)
- {
- FrameInfo.DTS=float64_int64s((File_Offset+Buffer_Offset-Buffer_DataToParse_Begin)*1000000000.0/AvgBytesPerSec);
- FrameInfo.PTS=FrameInfo.DTS;
- Frame_Count_NotParsedIncluded=float64_int64s(((float64)FrameInfo.DTS)/1000000000.0*Demux_Rate);
- }
- Demux_random_access=true;
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_MainStream);
- Frame_Count_NotParsedIncluded=(int64u)-1;
- #endif //MEDIAINFO_DEMUX
-
- Element_Code=(int64u)-1;
- AVI__movi_xxxx();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_ds64()
-{
- Element_Name("DataSize64");
-
- //Parsing
- int32u tableLength;
- Skip_L8( "riffSize"); //Is directly read from the header parser
- Get_L8 (WAVE_data_Size, "dataSize");
- Get_L8 (WAVE_fact_samplesCount, "sampleCount");
- Get_L4 (tableLength, "tableLength");
- for (int32u Pos=0; Pos<tableLength; Pos++)
- Skip_L8( "table[]");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_fact()
-{
- Element_Name("Sample count");
-
- //Parsing
- int64u SamplesCount64;
- int32u SamplesCount;
- Get_L4 (SamplesCount, "SamplesCount");
- SamplesCount64=SamplesCount;
- if (SamplesCount64==0xFFFFFFFF)
- SamplesCount64=SamplesCount64;
-
- FILLING_BEGIN();
- int32u SamplingRate=Retrieve(Stream_Audio, 0, Audio_SamplingRate).To_int32u();
- if (SamplingRate)
- {
- //Calculating
- int64u Duration=(SamplesCount64*1000)/SamplingRate;
-
- //Coherency test
- bool IsOK=true;
- if (File_Size!=(int64u)-1)
- {
- int64u BitRate=Retrieve(Stream_Audio, 0, Audio_BitRate).To_int64u();
- if (BitRate)
- {
- int64u Duration_FromBitRate = File_Size * 8 * 1000 / BitRate;
- if (Duration_FromBitRate > Duration*1.10 || Duration_FromBitRate < Duration*0.9)
- IsOK = false;
- }
- }
-
- //Filling
- if (IsOK)
- Fill(Stream_Audio, 0, Audio_Duration, Duration);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_fmt_()
-{
- //Compute the current codec ID
- Element_Code=(int64u)-1;
- Stream_ID=(int32u)-1;
- stream_Count=1;
-
- Stream[(int32u)-1].fccType=Elements::AVI__hdlr_strl_strh_auds;
- AVI__hdlr_strl_strf();
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_ID3_()
-{
- Element_Name("ID3v2 tags");
-
- //Parsing
- #if defined(MEDIAINFO_ID3V2_YES)
- File_Id3v2 MI;
- Open_Buffer_Init(&MI);
- Open_Buffer_Continue(&MI);
- Finish(&MI);
- Merge(MI, Stream_General, 0, 0);
- #endif
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::WAVE_iXML()
-{
- Element_Name("iXML");
-
- //Parsing
- Skip_Local(Element_Size, "XML data");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::wave()
-{
- Data_Accept("Wave64");
- Element_Name("Wave64");
-
- //Filling
- Fill(Stream_General, 0, General_Format, "Wave64");
-}
-
-//---------------------------------------------------------------------------
-void File_Riff::W3DI()
-{
- Element_Name("IDVX tags (Out of specs!)");
-
- //Parsing
- int32u Size=(int32u)Element_Size;
- Ztring Title, Artist, Album, Unknown, Genre, Comment;
- int32u TrackPos;
- Get_Local(Size, Title, "Title");
- Element_Offset=(int32u)Title.size();
- Size-=(int32u)Title.size();
- if (Size==0) return;
- Skip_L1( "Zero"); Size--; //NULL char
- Get_Local(Size, Artist, "Artist");
- Element_Offset=(int32u)Title.size()+1+(int32u)Artist.size();
- Size-=(int32u)Artist.size();
- if (Size==0) return;
- Skip_L1( "Zero"); Size--; //NULL char
- Get_Local(Size, Album, "Album");
- Element_Offset=(int32u)Title.size()+1+(int32u)Artist.size()+1+(int32u)Album.size();
- Size-=(int32u)Album.size();
- if (Size==0) return;
- Skip_L1( "Zero"); Size--; //NULL char
- Get_Local(Size, Unknown, "Unknown");
- Element_Offset=(int32u)Title.size()+1+(int32u)Artist.size()+1+(int32u)Album.size()+1+(int32u)Unknown.size();
- Size-=(int32u)Unknown.size();
- if (Size==0) return;
- Skip_L1( "Zero"); Size--; //NULL char
- Get_Local(Size, Genre, "Genre");
- Element_Offset=(int32u)Title.size()+1+(int32u)Artist.size()+1+(int32u)Album.size()+1+(int32u)Unknown.size()+1+(int32u)Genre.size();
- Size-=(int32u)Genre.size();
- if (Size==0) return;
- Skip_L1( "Zero"); Size--; //NULL char
- Get_Local(Size, Comment, "Comment");
- Element_Offset=(int32u)Title.size()+1+(int32u)Artist.size()+1+(int32u)Album.size()+1+(int32u)Unknown.size()+1+(int32u)Genre.size()+1+(int32u)Comment.size();
- Size-=(int32u)Comment.size();
- if (Size==0) return;
- Skip_L1( "Zero"); Size--; //NULL char
- Get_L4 (TrackPos, "Track_Position");
- if(Element_Offset+8<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- Element_Begin1("Footer");
- Skip_L4( "Size");
- Skip_C4( "Name");
- Element_End0();
-
- //Filling
- Fill(Stream_General, 0, General_Track, Title);
- Fill(Stream_General, 0, General_Performer, Artist);
- Fill(Stream_General, 0, General_Album, Album);
- Fill(Stream_General, 0, "Unknown", Unknown);
- Fill(Stream_General, 0, General_Genre, Genre);
- Fill(Stream_General, 0, General_Comment, Comment);
- Fill(Stream_General, 0, General_Track_Position, TrackPos);
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_RIFF_YES
-
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Rm.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Rm.cpp
deleted file mode 100644
index 5e14f4cbf..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Rm.cpp
+++ /dev/null
@@ -1,805 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_RM_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <ZenLib/ZtringListList.h>
-#include <ZenLib/Utils.h>
-#include "MediaInfo/Multiple/File_Rm.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-// https://common.helixcommunity.org/2003/HCS_SDK_r5/htmfiles/rmff.htm
-// http://wiki.multimedia.cx/index.php?title=RealMedia
-
-//***************************************************************************
-// Const
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- const int32u RMF=0x2E524D46;
- const int32u CONT=0x434F4E54;
- const int32u DATA=0x44415441;
- const int32u INDX=0x494E4458;
- const int32u MDPR=0x4D445052;
- const int32u PROP=0x50524F50;
- const int32u RJMD=0x524A4D44;
- const int32u RMJE=0x524D4A45;
- const int32u RMMD=0x524D4D44;
- const int32u TAG =0x54414700;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Rm::File_Rm()
-:File__Analyze()
-{
- //In
- FromMKV_StreamType=Stream_Max;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Rm::FileHeader_Begin()
-{
- if (IsSub)
- return true;
-
- if (4>Buffer_Size)
- return false;
- if (Buffer[0]!=0x2E //".RMF"
- || Buffer[1]!=0x52
- || Buffer[2]!=0x4D
- || Buffer[3]!=0x46)
- {
- Reject();
- return false;
- }
-
- return true;
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Rm::Header_Parse()
-{
- //Specific case
- if (FromMKV_StreamType!=Stream_Max)
- {
- //Filling
- Header_Fill_Code(0, __T("Real Media Header"));
- Header_Fill_Size(Element_Size);
- return;
- }
-
- //Parsing
- int32u Name, Size;
- Get_C4 (Name, "Name");
-
- if (Name==Elements::RMMD)
- {
- Size=8; //Name + Size of the Metadata section (after Version) in bytes.
- }
- else if (Name==Elements::RJMD)
- {
- Skip_B4( "Version");
- Get_B4 (Size, "Size");
- Size+=8; //Name + Version + Size of the section (after Version) in bytes.
- if (Element_Size>=12)
- Element_Offset-=8; //Is valid, so we must keep Version and size in the stream
- }
- else if (Name==Elements::RMJE)
- {
- Size=12;
- }
- else if ((Name&0xFFFFFF00)==Elements::TAG)
- {
- Name=Elements::TAG;
- Element_Offset-=4;
- Size=0;
- }
- else
- {
- Get_B4 (Size, "Size");
- }
-
- //Filling
- Header_Fill_Code(Name, Ztring().From_CC4(Name));
- Header_Fill_Size(Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::Data_Parse()
-{
- //Specific case
- if (FromMKV_StreamType!=Stream_Max)
- {
- switch (FromMKV_StreamType)
- {
- case Stream_Video : MDPR_realvideo(); break;
- case Stream_Audio : MDPR_realaudio(); break;
- default : ;
- }
-
- Finish("RealMedia");
- return;
- }
-
- //Parsing
- DATA_BEGIN
- ATOM( RMF)
- ATOM(CONT)
- LIST_SKIP(DATA)
- ATOM(INDX)
- ATOM(MDPR)
- ATOM(PROP)
- ATOM(RJMD)
- ATOM(RMJE)
- ATOM(RMMD)
- ATOM(TAG)
- DATA_END
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-#define NAME_VERSION(ELEMENT_NAME) \
- Element_Name(ELEMENT_NAME); \
- int16u Version; \
- { \
- Get_B2(Version, "ObjectVersion"); \
- } \
-
-#define INTEGRITY_VERSION(_VERSION) \
- if (Version>_VERSION) \
- { \
- Skip_XX(Element_Size-Element_Offset, "Data"); \
- return; \
- } \
-
-//---------------------------------------------------------------------------
-void File_Rm::RMF()
-{
- NAME_VERSION("Real Media Format");
- INTEGRITY_VERSION(1);
-
- //Parsing
- if (Element_Size==4)
- Skip_B2( "file_version"); //The version of the RealMedia file.
- else
- Skip_B4( "file_version"); //The version of the RealMedia file.
- Skip_B4( "num_headers"); //The number of headers in the header section that follow the RealMedia File Header.
-
- //Filling
- Accept("RealMedia");
- Fill(Stream_General, 0, General_Format, "RealMedia");
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::CONT()
-{
- NAME_VERSION("Content");
- INTEGRITY_VERSION(0);
-
- //Parsing
- Ztring title, author, copyright, comment;
- int16u title_len, author_len, copyright_len, comment_len;
- Get_B2 (title_len, "title_len"); //The length of the title data in bytes.
- Get_Local(title_len, title, "title"); //An array of ASCII characters that represents the title information for the RealMedia file.
- Get_B2 (author_len, "author_len"); //The length of the author data in bytes.
- Get_Local(author_len, author, "author"); //An array of ASCII characters that represents the author information for the RealMedia file.
- Get_B2 (copyright_len, "copyright_len"); //The length of the copyright data in bytes.
- Get_Local(copyright_len, copyright, "copyright"); //An array of ASCII characters that represents the copyright information for the RealMedia file.
- Get_B2 (comment_len, "comment_len"); //The length of the comment data in bytes.
- Get_Local(comment_len, comment, "comment"); //An array of ASCII characters that represents the comment information for the RealMedia file.
-
- //Filling
- Fill(Stream_General, 0, General_Title, title);
- Fill(Stream_General, 0, General_Performer, author);
- Fill(Stream_General, 0, General_Copyright, copyright);
- Fill(Stream_General, 0, General_Comment, comment);
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::DATA()
-{
- NAME_VERSION("Data");
-
- //Currently, we stop here, enough info
- Finish("RealMedia");
- return;
-
- /*
- //Parsing
- int32u num_packets;
- int16u length;
- int8u flags;
- Get_B4 (num_packets, "num_packets"); //Number of packets in the data chunk.
- Skip_B4( "next_data_header"); //Offset from start of file to the next data chunk. A non-zero value refers to the file offset of the next data chunk. A value of zero means there are no more data chunks in this file. This field is not typically used.
- for (int32u Pos=0; Pos<num_packets; Pos++)
- {
- Element_Begin1("packet");
- Get_B2 (Version, "object_version");
- INTEGRITY_VERSION(1);
- Get_B2 (length, "length"); //The length of the packet in bytes.
- if (Version==0)
- Element_Info1("Media_Packet_Header");
- else
- Element_Info1("Media_Packet_Header");
- Skip_B2( "stream_number"); //The 16-bit alias used to associate data packets with their associated Media Properties Header.
- Skip_B4( "timestamp"); //The time stamp of the packet in milliseconds.
- if (Version==0)
- {
- Skip_B1( "packet_group"); //The packet group to which the packet belongs. If packet grouping is not used, set this field to 0 (zero).
- Get_B1 (flags, "flags"); //Flags describing the properties of the packet.
- Skip_Flags(flags, 0, "reliable"); //If this flag is set, the packet is delivered reliably.
- Skip_Flags(flags, 1, "keyframe"); //If this flag is set, the packet is part of a key frame or in some way marks a boundary in your data stream.
- }
- if (Version==1)
- {
- Skip_B2( "asm_rule"); //The ASM rule assigned to this packet.
- Skip_B1( "asm_Flags"); //Contains HX_ flags that dictate stream switching points.
- }
- if (Version==0)
- Skip_XX(length-12, "data");
- else
- Skip_XX(length-13, "data");
-
- //Stopping if too far
- if (Pos>10)
- {
- Pos=num_packets;
- Element_Info1("(...)");
- }
-
- Element_End0();
- }
- */
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::INDX()
-{
- NAME_VERSION("INDeX");
-
- //Parsing
- int32u num_indices;
- Get_B4 (num_indices, "num_indices"); //Number of index records in the index chunk.
- Skip_B2( "stream_number"); //The stream number for which the index records in this index chunk are associated.
- Skip_B4( "next_index_header"); //Offset from start of file to the next index chunk. This member enables RealMedia file format readers to find all the index chunks quickly. A value of zero for this member indicates there are no more index headers in this file.
- for (int32u Pos=0; Pos<num_indices; Pos++)
- {
- Element_Begin1("index");
- Get_B2 (Version, "object_version");
- INTEGRITY_VERSION(0);
- Element_Info1("Media_Packet_Header");
- Skip_B4( "timestamp"); //The time stamp (in milliseconds) associated with this record.
- Skip_B4( "offset"); //The offset from the start of the file at which this packet can be found.
- Skip_B4( "packet_count_for_this_packet"); //The packet number of the packet for this record. This is the same number of packets that would have been seen had the file been played from the beginning to this point.
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::MDPR()
-{
- NAME_VERSION("MeDia PRoperties");
- INTEGRITY_VERSION(0);
-
- //Parsing
- Ztring stream_name;
- std::string mime_type;
- int32u avg_bit_rate, start_time, duration, type_specific_len;
- int16u stream_number;
- int8u stream_name_size, mime_type_size;
- Get_B2 (stream_number, "stream_number"); //Unique value that identifies a physical stream
- Skip_B4( "max_bit_rate"); //The maximum bit rate required to deliver this stream over a network.
- Get_B4 (avg_bit_rate, "avg_bit_rate"); //The average bit rate required to deliver this stream over a network.
- Skip_B4( "max_packet_size"); //The largest packet size (in bytes) in the stream of media data.
- Skip_B4( "avg_packet_size"); //The average packet size (in bytes) in the stream of media data.
- Get_B4 (start_time, "start_time"); //The time offset in milliseconds to add to the time stamp of each packet in a physical stream.
- Skip_B4( "preroll"); //The time offset in milliseconds to subtract from the time stamp of each packet in a physical stream.
- Get_B4 (duration, "duration"); //The duration of the stream in milliseconds.
- Get_B1 (stream_name_size, "stream_name_size"); //The length of the following stream_name member in bytes.
- Get_Local(stream_name_size, stream_name, "stream_name"); //A nonunique alias or name for the stream.
- Get_B1 (mime_type_size, "mime_type_size"); //The length of the following mime_type field in bytes.
- Get_String(mime_type_size, mime_type, "mime_type"); //A nonunique MIME style type/subtype string for data associated with the stream.
- Get_B4 (type_specific_len, "type_specific_len"); //The length of the following type_specific_data in bytes
-
- //Parsing TypeSpecific
- Element_Info1(mime_type.c_str());
- MDPR_IsStream=true;
- if (mime_type=="audio/x-pn-multirate-realaudio")
- MDPR_IsStream=false; //What do we with this?
- else if (mime_type=="audio/X-MP3-draft-00")
- {
- Stream_Prepare(Stream_Audio);
- CodecID_Fill(Ztring(mime_type.c_str()), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Real);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "MPEG1AL3");
- }
- else if (mime_type=="audio/x-pn-realaudio")
- MDPR_realaudio();
- else if (mime_type=="audio/x-pn-realaudio-encrypted")
- {
- MDPR_realaudio();
- Fill(Stream_Audio, StreamPos_Last, Audio_Encryption, "Y");
- }
- else if (mime_type=="audio/x-ralf-mpeg4")
- {
- Stream_Prepare(Stream_Audio);
- CodecID_Fill(Ztring(mime_type.c_str()), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Real);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "ralf");
- }
- else if (mime_type=="audio/x-ralf-mpeg4-generic")
- {
- Stream_Prepare(Stream_Audio);
- CodecID_Fill(Ztring(mime_type.c_str()), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Real);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, "ralf");
- }
- else if (mime_type.find("audio/")==0)
- Stream_Prepare(Stream_Audio);
- else if (mime_type=="video/text")
- Stream_Prepare(Stream_Text);
- else if (mime_type=="video/x-pn-multirate-realvideo")
- MDPR_IsStream=false; //What do we with this?
- else if (mime_type=="video/x-pn-realvideo")
- MDPR_realvideo();
- else if (mime_type=="video/x-pn-realvideo-encrypted")
- {
- MDPR_realvideo();
- Fill(Stream_Video, StreamPos_Last, Video_Encryption, "Y");
- }
- else if (mime_type.find("video/")==0)
- Stream_Prepare(Stream_Video);
- else if (mime_type=="logical-audio/x-pn-multirate-realaudio")
- MDPR_IsStream=false; //What do we with this?
- else if (mime_type.find("logical-audio/")==0)
- MDPR_IsStream=false; //What do we with this?
- else if (mime_type=="logical-fileinfo")
- MDPR_fileinfo();
- //else if (mime_type=="logical-video/x-pn-multirate-realvideo")
- // MDPR_IsStream=false; //What do we with this?
- //else if (mime_type.find("logical-video/")==0)
- // MDPR_IsStream=false; //What do we with this?
- else
- MDPR_IsStream=false;
-
- //Filling
- FILLING_BEGIN();
- if (MDPR_IsStream)
- {
- Fill(StreamKind_Last, StreamPos_Last, General_ID, stream_number);
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_BitRate), avg_bit_rate, 10, true);
- //Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay), start_time);
- //Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Delay_Source), "Container");
- Fill(StreamKind_Last, StreamPos_Last, Fill_Parameter(StreamKind_Last, Generic_Duration), duration);
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::MDPR_realvideo()
-{
- //Parsing
- int32u Codec;
- int16u Width, Height, FrameRate;
- Skip_B4( "Size");
- Skip_C4( "FCC");
- Get_C4 (Codec, "Compression");
- Get_B2 (Width, "Width");
- Get_B2 (Height, "Height");
- Skip_B2( "bpp"); //Do not use it
- Skip_B4( "Unknown");
- Get_B2 (FrameRate, "fps");
- Skip_B2( "Unknown");
- Skip_C4( "Type1");
- Skip_C4( "Type2");
-
- //Filling
- if (!Status[IsAccepted])
- Accept("RealMedia"); //Is subs
-
- Stream_Prepare(Stream_Video);
- if (FromMKV_StreamType==Stream_Max) //Using the one from the container
- CodecID_Fill(Ztring().From_CC4(Codec), Stream_Video, StreamPos_Last, InfoCodecID_Format_Real);
- Fill(Stream_Video, StreamPos_Last, Video_Codec, Ztring().From_CC4(Codec));
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width); //Width
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height); //Height
- switch (FrameRate)
- {
- case 23 : Fill(Stream_Video, StreamPos_Last, Video_FrameRate, ((float)24)*1000/1001); break; //Hard-coded frame rate?
- case 29 : Fill(Stream_Video, StreamPos_Last, Video_FrameRate, ((float)30)*1000/1001); break; //Hard-coded frame rate?
- default : Fill(Stream_Video, StreamPos_Last, Video_FrameRate, (float)FrameRate);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::MDPR_realaudio()
-{
- //Parsing
- Ztring FourCC3="lpcJ"; //description of this codec : http://focus.ti.com/lit/an/spra136/spra136.pdf http://en.wikipedia.org/wiki/VSELP
- Ztring FourCC4;
- int32u FourCC5=0, BytesPerMinute=0;
- int16u Version, Samplerate=8000, Samplesize=16, Channels=0;
- Skip_C4( "Header signature");
- Get_B2 (Version, "Version");
- INTEGRITY_VERSION(5);
- if (Version==3)
- {
- Ztring title, author, copyright, comment;
- int32u length;
- int8u title_len, author_len, copyright_len, comment_len;
- Skip_B2( "Header size"); //Header size, after this tag.
- Get_B2 (Channels, "Channels");
- Skip_B4( "Uknown");
- Skip_B4( "Uknown");
- Skip_B4( "Data size");
- Get_B1 (title_len, "title_len"); //The length of the title data in bytes.
- Get_Local(title_len, title, "title"); //An array of ASCII characters that represents the title information for the RealMedia file.
- Get_B1 (author_len, "author_len"); //The length of the author data in bytes.
- Get_Local(author_len, author, "author"); //An array of ASCII characters that represents the author information for the RealMedia file.
- Get_B1 (copyright_len, "copyright_len"); //The length of the copyright data in bytes.
- Get_Local(copyright_len, copyright, "copyright"); //An array of ASCII characters that represents the copyright information for the RealMedia file.
- Get_B1 (comment_len, "comment_len"); //The length of the comment data in bytes.
- Get_Local(comment_len, comment, "comment"); //An array of ASCII characters that represents the comment information for the RealMedia file.
- if (Element_Offset<Element_Size) //Optional
- {
- Skip_B1( "Uknown");
- Get_B4 (length, "Fourcc string length");
- Get_Local(length, FourCC3, "Fourcc string");
- }
-
- //Filling
- Fill(Stream_General, 0, General_Duration, title);
- Fill(Stream_General, 0, General_Performer, author);
- Fill(Stream_General, 0, General_Copyright, copyright);
- Fill(Stream_General, 0, General_Comment, comment);
- }
- if (Version==4 || Version==5)
- {
- Skip_B2( "Unused");
- Skip_C4( "ra signature");
- Skip_B4( "AudioFileSize");
- Skip_B2( "Version2");
- Skip_B4( "Header size");
- Skip_B2( "Codec flavor");
- Skip_B4( "Coded frame size");
- Skip_B4( "AudioBytes");
- Get_B4 (BytesPerMinute, "BytesPerMinute");
- Skip_B4( "Unknown");
- Skip_B2( "Sub packet h");
- Skip_B2( "Frame size");
- Skip_B2( "Subpacket size");
- Skip_B2( "Unknown");
- }
- if (Version==5)
- {
- Skip_B2( "Unknown");
- Skip_B2( "Unknown");
- Skip_B2( "Unknown");
- }
- if (Version==4 || Version==5)
- {
- Get_B2 (Samplerate, "Samplerate");
- Skip_B2( "Unknown");
- Get_B2 (Samplesize, "Samplesize");
- Get_B2 (Channels, "Channels");
- }
- if (Version==4)
- {
- int8u length;
- Get_B1 (length, "Interleaver ID string lengt");
- Skip_Local(length, "Interleaver ID string");
- Get_B1 (length, "FourCC string lengt");
- Get_Local(length, FourCC4, "FourCC string");
- }
- if (Version==5)
- {
- Skip_C4( "Interleaver ID");
- Get_C4 (FourCC5, "FourCC");
- }
- if (Version==4 || Version==5)
- {
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- Skip_B1( "Unknown");
- }
- if (Version==5)
- {
- Skip_B1( "Unknown");
- }
- if (Version==4 || Version==5)
- {
- int32u length;
- Get_B4 (length, "Codec extradata length");
- Skip_XX(length, "Codec extradata");
- }
-
- //Filling
- if (!Status[IsAccepted])
- Accept("RealMedia"); //Is subs
-
- Stream_Prepare(Stream_Audio);
- if (Version==3)
- {
- if (FromMKV_StreamType==Stream_Max) //Using the one from the container
- CodecID_Fill(FourCC3, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Real);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, FourCC3);
- }
- if (Version==4)
- {
- if (FromMKV_StreamType==Stream_Max) //Using the one from the container
- CodecID_Fill(FourCC4, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Real);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, FourCC4);
- }
- if (Version==5)
- {
- if (FromMKV_StreamType==Stream_Max) //Using the one from the container
- CodecID_Fill(Ztring().From_CC4(FourCC5), Stream_Audio, StreamPos_Last, InfoCodecID_Format_Real);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Ztring().From_CC4(FourCC5));
- }
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, Samplerate);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, Samplesize);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels);
- if (BytesPerMinute)
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, BytesPerMinute*8/60, 10, true);
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::MDPR_fileinfo()
-{
- MDPR_IsStream=false;
-
- //Parsing
- int16u Version, num_physical_streams, num_rules, num_properties;
- Skip_B4( "size");
- Get_B2 (Version, "object_version");
- INTEGRITY_VERSION(0);
- Get_B2 (num_physical_streams, "num_physical_streams"); //The number of physical streams that make up this logical stream.
- for (int16u Pos=0; Pos<num_physical_streams; Pos++)
- {
- Skip_B2( "physical_stream_numbers"); //The list of physical stream numbers that comprise this logical stream.
- Skip_B4( "data_offsets"); //The list of data offsets indicating the start of the data section for each physical stream.
- }
- Get_B2 (num_rules, "num_rules"); //The number of ASM rules for the logical stream. Each physical stream in the logical stream has at least one ASM rule associated with it or it will never get played. The mapping of ASM rule numbers to physical stream numbers is stored in a list immediately following this member. These physical stream numbers refer to the stream_number field found in the Media Properties Object for each physical stream belonging to this logical stream.
- for (int16u Pos=0; Pos<num_physical_streams; Pos++)
- Skip_B2( "rule_to_physical_stream_number_map"); //The list of physical stream numbers that map to each rule. Each entry in the map corresponds to a 0-based rule number. The value in each entry is set to the physical stream number for the rule.
- Get_B2 (num_properties, "num_properties"); //The number of NameValueProperty structures contained in this structure. These name/value structures can be used to identify properties of this logical stream (for example, language).
-
- //Parsing
- for (int16u Pos=0; Pos<num_properties; Pos++)
- {
- Element_Begin1("property");
- std::string name;
- int32u size, type;
- int16u value_length;
- int8u name_length;
- Peek_B4(size);
- Skip_B4( "size");
- Skip_B2( "object_version");
- Get_B1 (name_length, "name_length"); //The length of the name data.
- Get_String(name_length, name, "name"); //The name string data.
- Get_B4 (type, "type"); //The type of the value data.
- Get_B2 (value_length, "value_length"); //value_length
- switch (type)
- {
- case 0 : //Unsigned integer
- Skip_B4( "value_data"); break; //unsigned integer
- case 2 : //String
- Skip_Local(value_length, "value_data"); break; //string
- default : Skip_XX(value_length, "unknown");
- }
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::PROP()
-{
- NAME_VERSION("PROPerties");
- INTEGRITY_VERSION(0);
-
- //Parsing
- int32u avg_bit_rate, duration;
- int16u flags;
- Skip_B4( "max_bit_rate"); //The maximum bit rate required to deliver this file over a network.
- Get_B4 (avg_bit_rate, "avg_bit_rate"); //The average bit rate required to deliver this file over a network.
- Skip_B4( "max_packet_size"); //The largest packet size (in bytes) in the media data.
- Skip_B4( "avg_packet_size"); //The average packet size (in bytes) in the media data.
- Skip_B4( "num_packets"); //The number of packets in the media data.
- Get_B4 (duration, "duration"); //The duration of the file in milliseconds.
- Skip_B4( "preroll"); //The number of milliseconds to prebuffer before starting playback.
- Skip_B4( "index_offset"); //The offset in bytes from the start of the file to the start of the index header object.
- Skip_B4( "data_offset"); //The offset in bytes from the start of the file to the start of the Data Section. \n Note: There can be a number of Data_Chunk_Headers in a RealMedia file. The data_offset value specifies the offset in bytes to the first Data_Chunk_Header. The offsets to the other Data_Chunk_Headers can be derived from the next_data_header field in a Data_Chunk_Header.
- Skip_B2( "num_streams"); //The total number of media properties headers in the main headers section.
- Get_B2 (flags, "flags"); //Bit mask containing information about this file.
- Skip_Flags(flags, 0, "Save_Enabled"); //If 1, clients are allowed to save this file to disk.
- Skip_Flags(flags, 1, "Perfect_Play"); //If 1, clients are instructed to use extra buffering.
- Skip_Flags(flags, 2, "Live_Broadcast"); //If 1, these streams are from a live broadcast.
- Skip_Flags(flags, 3, "Allow_Download");
-
- //Filling
- Fill(Stream_General, 0, General_OverallBitRate, avg_bit_rate);
- Fill(Stream_General, 0, General_Duration, duration);
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::RJMD()
-{
- Element_Name("Metadata Tag");
-
- //Parsing
- Skip_B4( "object_version");
-
- //Parsing
- RJMD_property(std::string());
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::RJMD_property(std::string Name)
-{
- //Element_Name("Property");
-
- //Parsing
- Ztring value;
- std::string name;
- int32u type, flags, num_subproperties, name_length, value_length;
- Element_Begin1("MetadataProperty");
- Skip_B4( "size");
- Get_B4 (type, "type");
- Get_B4 (flags, "flags");
- Skip_Flags(flags, 0, "readonly"); //Read only, cannot be modified.
- Skip_Flags(flags, 1, "private"); //Private, do not expose to users.
- Skip_Flags(flags, 2, "type_dexcriptor"); //Type descriptor used to further define type of value.
- Skip_B4( "value_offset"); //The offset to the value_length , relative to the beginning of the MetadataProperty structure.
- Skip_B4( "subproperties_offset"); //The offset to the subproperties_list , relative to the beginning of the MetadataProperty structure.
- Get_B4 (num_subproperties, "num_subproperties"); //The number of subproperties for this MetadataProperty structure.
- Get_B4 (name_length, "name_length"); //The length of the name data, including the null-terminator.
- Get_String(name_length, name, "name"); //The name of the property (string data).
- Get_B4 (value_length, "value_length"); //The length of the value data.
- switch(type)
- {
- case 0x00 : //Nothing
- Skip_XX(value_length, "Junk");
- break;
- case 0x01 : //String (text).
- Get_Local(value_length, value, "value"); //String.
- break;
- case 0x02 : //Separated list of strings, separator specified as sub-property/type descriptor.
- Get_Local(value_length, value, "value"); //String.
- break;
- case 0x03 : //Boolean flageither 1 byte or 4 bytes, check size value.
- switch(value_length)
- {
- case 1 : {
- int8u valueI;
- Get_L1(valueI, "value"); //1-byte boolean.
- value.From_Number(valueI);
- }
- break;
- case 4 : {
- int32u valueI;
- Get_L4(valueI, "value"); //4-byte boolean.
- value.From_Number(valueI);
- }
- break;
- default: Skip_XX(value_length, "Unknown");
- }
- break;
- case 0x04 : //Four-byte integer.
- {
- int32u valueI;
- Get_L4(valueI, "value");
- value.From_Number(valueI);
- }
- break;
- case 0x05 : //Byte stream.
- Skip_XX(value_length, "Byte stream");
- break;
- case 0x06 : //String (URL).
- Get_Local(value_length, value, "value"); //String.
- break;
- case 0x07 : //String representation of the date in the form: YYYYmmDDHHMMSS (m = month, M = minutes).
- Get_Local(value_length, value, "value"); //String.
- break;
- case 0x08 : //String (file name)
- Get_Local(value_length, value, "value"); //String.
- break;
- case 0x09 : //This property has subproperties, but its own value is empty.
- Skip_XX(value_length, "junk");
- break;
- case 0x0A : //Large buffer of data, use sub-properties/type descriptors to identify mime-type.
- Skip_XX(value_length, "data");
- break;
- default : //Unknown
- Skip_XX(value_length, "unknown");
- break;
- }
-
- //Filling
- if (!Name.empty())
- Name+='/';
- Name+=name;
- if (Name!="Track/Comments/DataSize"
- && Name!="Track/Comments/MimeType"
- )
- Fill(Stream_General, 0, Name.c_str(), value);
-
- //Parsing
- for (int32u Pos=0; Pos<num_subproperties; Pos++)
- {
- Element_Begin1("PropListEntry");
- Skip_B4( "offset"); //The offset for this indexed sub-property, relative to the beginning of the containing MetadataProperty.
- Skip_B4( "num_props_for_name"); //The number of sub-properties that share the same name. For example, a lyrics property could have multiple versions as differentiated by the language sub-property type descriptor.
- Element_End0();
- }
- for (int32u Pos=0; Pos<num_subproperties; Pos++)
- {
- RJMD_property(Name);
- }
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::RMJE()
-{
- Element_Name("Metadata Section Footer");
-
- //Parsing
- Skip_B4( "object_version");
- Skip_B4( "size"); //The size of the preceding metadata tag.
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::RMMD()
-{
- Element_Name("Metadata Section Header");
-
- //Parsing
- Skip_B4( "size"); //The size of the full metadata section in bytes.
-}
-
-//---------------------------------------------------------------------------
-void File_Rm::TAG()
-{
- Element_Name("Id3v1 Tag");
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_RM_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Rm.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Rm.h
deleted file mode 100644
index feaf4ec2c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Rm.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Real Media files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_RmH
-#define MediaInfo_File_RmH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Classe File_Rm
-//***************************************************************************
-
-class File_Rm : public File__Analyze
-{
-public :
- //In
- stream_t FromMKV_StreamType;
-
-public :
- File_Rm();
-
-private :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void RMF();
- void CONT();
- void DATA();
- void INDX();
- void MDPR();
- void MDPR_realvideo();
- void MDPR_realaudio();
- void MDPR_fileinfo();
- void PROP();
- void RJMD();
- void RJMD_property(std::string Name);
- void RMJE();
- void RMMD();
- void TAG ();
-
- //Temp
- bool MDPR_IsStream;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_SequenceInfo.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_SequenceInfo.cpp
deleted file mode 100644
index 74429df84..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_SequenceInfo.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SEQUENCEINFO_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_SequenceInfo.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "ZenLib/File.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/Format/Http/Http_Utils.h"
-#include "tinyxml2.h"
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_SequenceInfo::File_SequenceInfo()
-:File__Analyze()
-{
- #if MEDIAINFO_DEMUX
- Demux_EventWasSent_Accept_Specific=true;
- #endif //MEDIAINFO_DEMUX
-
- //Temp
- ReferenceFiles=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_SequenceInfo::~File_SequenceInfo()
-{
- delete ReferenceFiles; //ReferenceFiles=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_SequenceInfo::Streams_Finish()
-{
- if (ReferenceFiles==NULL)
- return;
-
- ReferenceFiles->ParseReferences();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_SequenceInfo::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- if (ReferenceFiles==NULL)
- return 0;
-
- return ReferenceFiles->Read_Buffer_Seek(Method, Value, ID);
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_SequenceInfo::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- {
- XMLElement* Root=document.FirstChildElement("SEQUENCEINFO");
- if (Root)
- {
- Accept("SequenceInfo");
- Fill(Stream_General, 0, General_Format, "SequenceInfo");
-
- ReferenceFiles=new File__ReferenceFilesHelper(this, Config);
-
- File__ReferenceFilesHelper::reference ReferenceFile;
- ReferenceFile.StreamKind=Stream_Video;
-
- FileName FN(File_Name);
- Ztring Base=FN.Path_Get();
- size_t Pos=Base.rfind(PathSeparator);
- if (Pos!=string::npos)
- {
- Ztring ToAdd=Base.substr(Pos, string::npos);
- Ztring DirectoryBase=Base;
- DirectoryBase+=ToAdd;
- DirectoryBase+=__T('_');
-
- size_t DirNumberCount=1;
- Ztring Directory=DirectoryBase;
- for (; DirNumberCount<9; DirNumberCount++)
- {
- Directory+=__T('0');
- if (Dir::Exists(Directory))
- break;
- }
-
- if (DirNumberCount<9)
- {
- int32u DirNumber=0;
- do
- {
- Ztring Number=Ztring::ToZtring(DirNumber);
- if (Number.size()<DirNumberCount)
- Number.insert(0, DirNumberCount-Number.size(), __T('0'));
-
- Directory=DirectoryBase;
- Directory+=Number;
- if (!Dir::Exists(Directory))
- break;
-
- Ztring FileBase=Directory;
- FileBase+=ToAdd;
- FileBase+=__T('_');
- FileBase+=__T('.');
-
- size_t FileNumberCount=1;
- Ztring FullFile=FileBase;
- Ztring Extension;
- for (; FileNumberCount<10; FileNumberCount++)
- {
- FullFile.insert(FullFile.begin()+FullFile.size()-Extension.size()-1, __T('0'));
- if (Extension.empty())
- {
- ZtringList List=Dir::GetAllFileNames(FullFile+__T('*'));
- if (List.size()>=2)
- {
- FileNumberCount=(size_t)-1; //Problem, which one to choose?
- break;
- }
- else if (List.size()==1)
- {
- FileName Temp(List[0]);
- Extension=Temp.Extension_Get();
- FileBase+=Extension;
- FullFile=FileBase;
- break;
- }
- }
- else if (File::Exists(FullFile))
- break;
- }
- bool FromZero=true;
- if (FileNumberCount>=9)
- {
- //Trying with consecutive file numbers betweens dirs
- Number=Ztring::ToZtring(ReferenceFile.FileNames.size());
- FullFile=FileBase;
- FullFile.insert(FullFile.size()-Extension.size()-1, Number);
- FileNumberCount=Number.size();
- if (!File::Exists(FullFile))
- {
- FileNumberCount++;
- for (; FileNumberCount<10; FileNumberCount++)
- {
- FullFile.insert(FullFile.begin()+FullFile.size()-Extension.size()-Number.size()-1, __T('0'));
- if (File::Exists(FullFile))
- {
- FromZero=false;
- break;
- }
- }
- }
- else
- FromZero=false;
- }
-
- if (FileNumberCount<9)
- {
- size_t FileNumber=FromZero?0:ReferenceFile.FileNames.size();
- do
- {
- Number=Ztring::ToZtring(FileNumber);
- if (Number.size()<FileNumberCount)
- Number.insert(0, FileNumberCount-Number.size(), __T('0'));
-
- FullFile=FileBase;
- FullFile.insert(FullFile.size()-Extension.size()-1, Number);
- if (!File::Exists(FullFile))
- break;
-
- ReferenceFile.FileNames.push_back(FullFile);
-
- FileNumber++;
- }
- while (FileNumber<1000000000);
- }
-
- DirNumber++;
- }
- while (DirNumber<1000000000);
-
- if (!ReferenceFile.FileNames.empty())
- ReferenceFiles->References.push_back(ReferenceFile);
- }
- }
- }
- else
- {
- Reject("SequenceInfo");
- return false;
- }
- }
-
- Element_Offset=File_Size;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_SEQUENCEINFO_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_SequenceInfo.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_SequenceInfo.h
deleted file mode 100644
index 09e05059d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_SequenceInfo.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about XML files starting with SEQUENCEINFO
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_SequenceInfoH
-#define MediaInfo_File_SequenceInfoH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-class File__ReferenceFilesHelper;
-
-//***************************************************************************
-// Class File_SequenceInfo
-//***************************************************************************
-
-class File_SequenceInfo : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_SequenceInfo();
- ~File_SequenceInfo();
-
-private :
- //Streams management
- void Streams_Finish ();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Temp
- File__ReferenceFilesHelper* ReferenceFiles;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Skm.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Skm.cpp
deleted file mode 100644
index 43253dd4e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Skm.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SKM_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Skm.h"
-#if defined(MEDIAINFO_MPEG4V_YES)
- #include "MediaInfo/Video/File_Mpeg4v.h"
-#endif
-#include "ZenLib/Utils.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Skm::File_Skm()
-:File__Analyze()
-{
- //Configuration
- MustSynchronize=true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Skm::Streams_Finish()
-{
- if (Stream.Parser)
- {
- Finish(Stream.Parser);
- Merge(*Stream.Parser);
- }
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Skm::FileHeader_Begin()
-{
- if (Buffer_Size<5)
- return false;
- if (CC5(Buffer)!=0x444D534B4DLL) //DMSKM
- {
- Reject("SKM");
- return false;
- }
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Skm::FileHeader_Parse()
-{
- Skip_C5( "Signature");
-
- FILLING_BEGIN();
- Accept("SKM");
-
- Fill(Stream_General, 0, General_Format, "SKM");
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Skm::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (CC3(Buffer+Buffer_Offset)!=0x000001)
- Synched=false;
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Skm::Header_Parse()
-{
- //Parsing
- int32u BodyLength;
- int8u Type;
- Skip_B4( "PreviousTagSize");
- if (File_Offset+Buffer_Offset+4<File_Size)
- {
- Get_B1 (Type, "Type"); //Param_Info1(Type<19?Flv_Type[Type]:__T("Unknown"));
- Get_B3 (BodyLength, "BodyLength");
- Skip_B3( "Timestamp_Base"); //in ms
- Skip_B1( "Timestamp_Extended"); //TimeStamp = Timestamp_Extended*0x01000000+Timestamp_Base
- Skip_B3( "StreamID");
- }
- else
- {
- Type=0;
- BodyLength=0;
- }
-
- //Filling
- Header_Fill_Code(Type, Ztring().From_Number(Type, 16));
- Header_Fill_Size(Element_Offset+BodyLength);
-}
-
-//---------------------------------------------------------------------------
-bool File_Skm::Header_Parse_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset+4;
- while (Buffer_Offset_Temp+4<=Buffer_Size
- && CC3(Buffer+Buffer_Offset_Temp)!=0x000001)
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
- }
-
- //Must wait more data?
- if (Buffer_Offset_Temp+4>Buffer_Size)
- {
- if (File_Offset+Buffer_Size==File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Skm::Data_Parse()
-{
- #if defined(MEDIAINFO_MPEG4V_YES)
- Stream.Parser=new File_Mpeg4v();
- ((File_Mpeg4v*)Stream.Parser)->FrameIsAlwaysComplete=true;
- ((File_Mpeg4v*)Stream.Parser)->OnlyVOP();
- Open_Buffer_Init(Stream.Parser);
- Open_Buffer_Continue(Stream.Parser);
- Finish("SKM");
- #endif
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_SKM_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Skm.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Skm.h
deleted file mode 100644
index eee178596..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Skm.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about SKM (Korean mobilphoner) files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_SkmH
-#define MediaInfo_File_SkmH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Skm
-//***************************************************************************
-
-class File_Skm : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Skm();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Synchro
- bool Synchronize() {return Synchronize_0x000001();}
- bool Synched_Test();
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parse_Fill_Size();
- void Data_Parse();
-
- //Streams
- struct stream
- {
- File__Analyze* Parser;
-
- stream()
- {
- Parser=NULL;
- }
-
- ~stream()
- {
- delete Parser; //Parser=NULL;
- }
- };
- stream Stream;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Swf.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Swf.cpp
deleted file mode 100644
index cc616ef4c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Swf.cpp
+++ /dev/null
@@ -1,694 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SWF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Swf.h"
-#include <zlib.h>
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const int8u Swf_SoundType[]=
-{
- 1,
- 2,
-};
-
-//---------------------------------------------------------------------------
-const int8u Swf_SoundSize[]=
-{
- 8,
- 16,
-};
-
-//---------------------------------------------------------------------------
-const int16u Swf_SoundRate[]=
-{
- 5500,
- 11025,
- 22050,
- 44100,
-};
-
-//---------------------------------------------------------------------------
-const char* Swf_Format_Audio[]=
-{
- "PCM",
- "ADPCM",
- "MPEG Audio",
- "PCM",
- "Nellymoser",
- "Nellymoser",
- "Nellymoser",
- "",
- "",
- "",
- "",
- "Speex",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Swf_Format_Version_Audio[]=
-{
- "",
- "",
- "Version 1",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Swf_Format_Profile_Audio[]=
-{
- "",
- "",
- "Layer 3",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Swf_SoundFormat[]=
-{
- "Uncompressed",
- "SWF ADPCM",
- "MPEG-1L3",
- "Uncompressed Little Endian",
- "",
- "",
- "Nellymoser",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Swf_Format_Video[]=
-{
- "",
- "",
- "H.263",
- "Screen video",
- "VP6",
- "VP6",
- "Screen video 2",
- "AVC",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Swf_Format_Profile_Video[]=
-{
- "",
- "",
- "",
- "",
- "",
- "Alpha channel",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Swf_Codec_Video[]=
-{
- "",
- "",
- "Sorenson H263",
- "Screen video",
- "On2 VP6",
- "On2 VP6 with alpha channel",
- "Screen video 2",
- "AVC",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-namespace Elements
-{
- const int16u End = 0; //V1+
- const int16u ShowFrame = 1; //V1+
- const int16u DefineShape = 2; //V1+
- const int16u PlaceObject = 4; //V1+
- const int16u RemoveObject = 5; //V1+
- const int16u DefineBits = 6; //V1+
- const int16u DefineButton = 7; //V1+
- const int16u JPEGTables = 8; //V1+
- const int16u SetBackgroundColor = 9; //V1+
- const int16u DefineFont = 10; //V1+
- const int16u DefineText = 11; //V1+
- const int16u DoAction = 12; //V3+
- const int16u DefineFontInfo = 13; //V1+
- const int16u DefineSound = 14; //V1+
- const int16u StartSound = 15; //V1+
- const int16u DefineButtonSound = 17; //V2+
- const int16u SoundStreamHead = 18; //V1+
- const int16u SoundStreamBlock = 19; //V1+
- const int16u DefineBitsLossless = 20; //V2+
- const int16u DefineBitsJPEG2 = 21; //V2+
- const int16u DefineShape2 = 22; //V2+
- const int16u DefineCxform = 23; //V2+
- const int16u Protect = 24; //V2+
- const int16u PlaceObject2 = 26; //V3+
- const int16u RemoveObject2 = 28; //V3+
- const int16u DefineShape3 = 32; //V3+
- const int16u DefineText2 = 33; //V3+
- const int16u DefineButton2 = 34; //V3+
- const int16u DefineBitsJPEG3 = 35; //V3+
- const int16u DefineBitsLossless2 = 36; //V3+
- const int16u DefineEditText = 37; //V4+
- const int16u DefineSprite = 39; //V3+
- const int16u FrameLabel = 43; //V3+
- const int16u SoundStreamHead2 = 45; //V3+
- const int16u DefineMorphShape = 46; //V3+
- const int16u DefineFont2 = 48; //V3+
- const int16u ExportAssets = 56; //V5+
- const int16u ImportAssets = 57; //V5+
- const int16u EnableDebugger = 58; //V5
- const int16u DoInitAction = 59; //V6+
- const int16u DefineVideoStream = 60; //V6+
- const int16u DefineVideoFrame = 61; //V6+
- const int16u DefineFontInfo2 = 62; //V6+
- const int16u EnableDebugger2 = 64; //V6+
- const int16u ScriptLimits = 65; //V6+
- const int16u SetTabIndex = 66; //V7+
- const int16u FileAttributes = 69; //V1+
- const int16u PlaceObject3 = 70; //V8+
- const int16u ImportAssets2 = 71; //V8+
- const int16u DefineFontAlignZones = 73; //V8+
- const int16u CSMTextSettings = 74; //V8+
- const int16u DefineFont3 = 75; //V8+
- const int16u SymbolClass = 76; //V9+
- const int16u Metadata = 77; //V1+
- const int16u DefineScalingGrid = 78; //V8+
- const int16u DoABC = 82; //V9+
- const int16u DefineShape4 = 83; //V8+
- const int16u DefineMorphShape2 = 84; //V8+
- const int16u DefineSceneAndFrameLabelData = 86; //V9+
- const int16u DefineBinaryData = 87; //V9+
- const int16u DefineFontName = 88; //V9+
- const int16u StartSound2 = 89; //V9+
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Swf::File_Swf()
-:File__Analyze()
-{
- //In
- Frame_Count_Valid=1024;
- FileLength=0;
- Version=0;
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Swf::FileHeader_Begin()
-{
- //Parsing
- if (Buffer_Size<8)
- return false;
-
- if (CC3(Buffer)!=0x435753) //CWS
- return true;
-
- //Compressed file
- if (File_Size>16*1024*1024)
- return true; //The file is too big, we will not parse all, only say this is SWF
- if (CC4(Buffer+4)<4*16*1024*1024) //FileLength
- return true; //The file is too big, we will not parse all, only say this is SWF
- Buffer_MaximumSize=(size_t)File_Size;
- if (Buffer_Size!=File_Size)
- return false;
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Swf::FileHeader_Parse()
-{
- //Parsing
- int32u Signature;
- if (FileLength==0 && Version==0)
- {
- Element_Begin1("SWF header");
- Get_C3 (Signature, "Signature");
- Get_L1 (Version, "Version");
- Get_L4 (FileLength, "FileLength");
- Element_End0();
- }
- else
- {
- //Was already done by compressed file handling
- Signature=0x465753;
- }
-
- //Compressed file handling
- if (Signature==0x435753) //CWS
- {
- Decompress();
- return;
- }
-
- //Parsing
- //Parsing - BitStream
- float32 FrameRate;
- int32u Xmin, Xmax, Ymin, Ymax;
- int16u FrameCount;
- int8u Nbits;
- BS_Begin();
- Get_S1 (5, Nbits, "Nbits");
- Get_BS (Nbits, Xmin, "Xmin");
- Get_BS (Nbits, Xmax, "Xmax"); Param_Info2((Xmax-Xmin)/20, " pixels");
- Get_BS (Nbits, Ymin, "Ymin");
- Get_BS (Nbits, Ymax, "Ymax"); Param_Info2((Ymax-Ymin)/20, " pixels");
- BS_End();
- if (Version<=7)
- {
- int8u FrameRate_8;
- Skip_L1( "Ignored");
- Get_L1 (FrameRate_8, "FrameRate");
- FrameRate=FrameRate_8;
- }
- else
- {
- int16u FrameRate_8_8;
- Get_L2(FrameRate_8_8, "FrameRate");
- FrameRate=((float32)FrameRate_8_8)/0x0100+(((float32)(FrameRate_8_8&0x00FF))/0x0100); //8.8 format
- Param_Info1(FrameRate);
- }
- Get_L2 (FrameCount, "FrameCount");
-
- FILLING_BEGIN();
- //Integrity
- if (Signature!=0x465753 && Signature!=0x435753) //FWS or CWS
- {
- Reject("SWF");
- return;
- }
-
- //Filling
- Accept("SWF");
-
- if (!IsSub)
- Fill(Stream_General, 0, General_Format, "ShockWave");
-
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Width, (Xmax-Xmin)/20);
- Fill(Stream_Video, 0, Video_Height, (Ymax-Ymin)/20);
- if (FrameRate)
- Fill(Stream_Video, 0, Video_FrameRate, FrameRate);
- if (FrameCount)
- Fill(Stream_Video, 0, Video_FrameCount, FrameCount);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Swf::Header_Parse()
-{
- //Parsing
- int16u TagCodeAndLength;
- Get_L2 (TagCodeAndLength, "TagCodeAndLength");
-
- //Filling
- int16u Tag=(TagCodeAndLength&0xFFC0)>>6; Param_Info1(Tag);
- Header_Fill_Code(Tag, Ztring().From_Number(Tag, 16));
-
- //Size
- int16u Length=TagCodeAndLength&0x003F;
- if (Length<0x003F)
- {
- Param_Info2(Length, " bytes");
-
- //Filling
- Header_Fill_Size(Element_Offset+Length);
- }
- else
- {
- int32u Length2;
- Get_L4(Length2, "Length"); Param_Info2(Length2, " bytes");
-
- //Filling
- Header_Fill_Size(Element_Offset+Length2);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Swf::Data_Parse()
-{
- #define LIS2(_ATOM, _NAME) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- { \
- Element_Name(_NAME); \
- _ATOM(); \
- Element_ThisIsAList(); \
- } \
-
- #define ATO2(_ATOM, _NAME) \
- case Elements::_ATOM : \
- if (Level==Element_Level) \
- { \
- if (Element_IsComplete_Get()) \
- { \
- Element_Name(_NAME); \
- _ATOM(); \
- } \
- else \
- { \
- Element_WaitForMoreData(); \
- return; \
- } \
- } \
- break; \
-
- //Parsing
- DATA_BEGIN
- ATO2(End, "End");
- ATO2(ShowFrame, "ShowFrame");
- ATO2(DefineShape, "DefineShape");
- ATO2(PlaceObject, "PlaceObject");
- ATO2(RemoveObject, "RemoveObject");
- ATO2(DefineBits, "DefineBits");
- ATO2(DefineButton, "DefineButton");
- ATO2(JPEGTables, "JPEGTables");
- ATO2(SetBackgroundColor, "SetBackgroundColor");
- ATO2(DefineFont, "DefineFont");
- ATO2(DefineText, "DefineText");
- ATO2(DoAction, "DoAction");
- ATO2(DefineFontInfo, "DefineFontInfo");
- ATO2(DefineSound, "DefineSound");
- ATO2(StartSound, "StartSound");
- ATO2(DefineButtonSound, "DefineButtonSound");
- ATO2(SoundStreamHead, "SoundStreamHead");
- ATO2(SoundStreamBlock, "SoundStreamBlock");
- ATO2(DefineBitsLossless, "DefineBitsLossless");
- ATO2(DefineBitsJPEG2, "DefineBitsJPEG2");
- ATO2(DefineShape2, "DefineShape2");
- ATO2(DefineCxform, "DefineCxform");
- ATO2(Protect, "Protect");
- ATO2(PlaceObject2, "PlaceObject2");
- ATO2(RemoveObject2, "RemoveObject2");
- ATO2(DefineShape3, "DefineShape3");
- ATO2(DefineText2, "DefineText2");
- ATO2(DefineButton2, "DefineButton2");
- ATO2(DefineBitsJPEG3, "DefineBitsJPEG3");
- ATO2(DefineBitsLossless2, "DefineBitsLossless2");
- ATO2(DefineEditText, "DefineEditText");
- LIS2(DefineSprite, "DefineSprite");
- ATOM_BEGIN
- ATO2(ShowFrame, "ShowFrame");
- ATO2(PlaceObject, "PlaceObject");
- ATO2(RemoveObject, "RemoveObject");
- ATO2(StartSound, "StartSound");
- ATO2(SoundStreamHead, "SoundStreamHead");
- ATO2(SoundStreamBlock, "SoundStreamBlock");
- ATO2(PlaceObject2, "PlaceObject2");
- ATO2(RemoveObject2, "RemoveObject2");
- ATO2(FrameLabel, "FrameLabel");
- ATO2(SoundStreamHead2, "SoundStreamHead2");
- ATO2(End, "End");
- ATOM_END
- ATO2(FrameLabel, "FrameLabel");
- ATO2(DefineMorphShape, "DefineMorphShape");
- ATO2(SoundStreamHead2, "SoundStreamHead2");
- ATO2(DefineFont2, "DefineFont2");
- ATO2(ExportAssets, "ExportAssets");
- ATO2(ImportAssets, "ImportAssets");
- ATO2(EnableDebugger, "EnableDebugger");
- ATO2(DoInitAction, "DoInitAction");
- ATO2(DefineVideoStream, "DefineVideoStream");
- ATO2(DefineVideoFrame, "DefineVideoFrame");
- ATO2(DefineFontInfo2, "DefineFontInfo2");
- ATO2(EnableDebugger2, "EnableDebugger2");
- ATO2(ScriptLimits, "ScriptLimits");
- ATO2(SetTabIndex, "SetTabIndex");
- ATO2(FileAttributes, "FileAttributes");
- ATO2(PlaceObject3, "PlaceObject3");
- ATO2(ImportAssets2, "ImportAssets2");
- ATO2(DefineFontAlignZones, "DefineFontAlignZones");
- ATO2(CSMTextSettings, "CSMTextSettings");
- ATO2(DefineFont3, "DefineFont3");
- ATO2(SymbolClass, "SymbolClass");
- ATO2(Metadata, "Metadata");
- ATO2(DefineScalingGrid, "DefineScalingGrid");
- ATO2(DoABC, "DoABC");
- ATO2(DefineShape4, "DefineShape4");
- ATO2(DefineMorphShape2, "DefineMorphShape2");
- ATO2(DefineSceneAndFrameLabelData, "DefineSceneAndFrameLabelData");
- ATO2(DefineBinaryData, "DefineBinaryData");
- ATO2(DefineFontName, "DefineFontName");
- ATO2(StartSound2, "StartSound2");
- DATA_END
-
- Frame_Count++;
- if (Frame_Count>=Frame_Count_Valid)
- Data_Finish("SWF");
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Swf::DefineSound()
-{
- //Parsing
- int16u SoundId;
- int8u SoundFormat, SoundRate, SoundSize, SoundType;
- Get_L2 (SoundId, "SoundId");
- BS_Begin();
- Get_S1 (4, SoundFormat, "SoundFormat"); Param_Info1(Swf_SoundFormat[SoundFormat]);
- Get_S1 (2, SoundRate, "SoundRate"); Param_Info2(Swf_SoundRate[SoundRate], " Hz");
- Get_S1 (1, SoundSize, "SoundSize"); Param_Info2(Swf_SoundSize[SoundSize], " bits");
- Get_S1 (1, SoundType, "SoundType"); Param_Info2(Swf_SoundType[SoundType], " channel(s)");
- BS_End();
- Skip_L4( "SoundSampleCount");
- Skip_XX(Element_Size-Element_Offset, "SoundData");
-
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_ID, SoundId);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, Swf_Format_Audio[SoundFormat]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Version, Swf_Format_Version_Audio[SoundFormat]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, Swf_Format_Profile_Audio[SoundFormat]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Swf_SoundFormat[SoundFormat]);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, Swf_SoundRate[SoundRate]);
- if (SoundFormat!=2) //SoundSize is not valid for MPEG Audio
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, Swf_SoundSize[SoundSize]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Swf_SoundType[SoundType]);
-}
-
-//---------------------------------------------------------------------------
-void File_Swf::SoundStreamHead()
-{
- //Parsing
- int16u StreamSoundSampleCount;
- int8u StreamSoundCompression, StreamSoundRate, StreamSoundType, StreamSoundSize;
- BS_Begin();
- Skip_S1(4, "Reserved");
- Info_S1(2, PlaybackSoundRate, "PlaybackSoundRate"); Param_Info2(Swf_SoundRate[PlaybackSoundRate], " Hz");
- Info_S1(1, PlaybackSoundSize, "PlaybackSoundSize"); Param_Info2(Swf_SoundSize[PlaybackSoundSize], " bits");
- Info_S1(1, PlaybackSoundType, "PlaybackSoundType"); Param_Info2(Swf_SoundType[PlaybackSoundType], " channel(s)");
- Get_S1 (4, StreamSoundCompression, "StreamSoundCompression"); Param_Info1(Swf_SoundFormat[StreamSoundCompression]);
- Get_S1 (2, StreamSoundRate, "StreamSoundRate"); Param_Info2(Swf_SoundRate[StreamSoundRate], " Hz");
- Get_S1 (1, StreamSoundSize, "StreamSoundSize"); Param_Info2(Swf_SoundSize[StreamSoundSize], " bits");
- Get_S1 (1, StreamSoundType, "StreamSoundType"); Param_Info2(Swf_SoundType[StreamSoundType], " channel(s)");
- BS_End();
- Get_L2 (StreamSoundSampleCount, "StreamSoundSampleCount");
- if (StreamSoundCompression==2)
- Skip_L2( "LatencySeek");
-
- if (StreamSoundSampleCount>0)
- {
- Stream_Prepare(Stream_Audio);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format, Swf_Format_Audio[StreamSoundCompression]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Version, Swf_Format_Version_Audio[StreamSoundCompression]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Format_Profile, Swf_Format_Profile_Audio[StreamSoundCompression]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Swf_SoundFormat[StreamSoundCompression]);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, Swf_SoundRate[StreamSoundRate]);
- if (StreamSoundCompression!=2) //SoundSize is not valid for MPEG Audio
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, Swf_SoundSize[StreamSoundSize]);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Swf_SoundType[StreamSoundType]);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Swf::DefineSprite()
-{
- //Parsing
- Skip_B2( "Character ID of sprite");
- Skip_B2( "Number of frames in sprite");
-}
-
-//---------------------------------------------------------------------------
-void File_Swf::DefineVideoStream()
-{
- //Parsing
- int16u CharacterID, NumFrames, Width, Height;
- int8u CodecID;
- Get_L2 (CharacterID, "CharacterID");
- Get_L2 (NumFrames, "NumFrames");
- Get_L2 (Width, "Width");
- Get_L2 (Height, "Height");
- BS_Begin();
- Skip_BS(4, "VideoFlagsReserved");
- Skip_BS(3, "VideoFlagsDeblocking");
- Skip_BS(1, "VideoFlagsSmoothing");
- BS_End();
- Get_L1 (CodecID, "CodecID"); Param_Info1C((CodecID<16), Swf_Format_Video[CodecID]);
-
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, StreamPos_Last, Video_ID, CharacterID);
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height);
- if (CodecID<16)
- {
- Fill(Stream_Video, StreamPos_Last, Video_Format, Swf_Format_Video[CodecID]);
- Fill(Stream_Video, StreamPos_Last, Video_Format_Profile, Swf_Format_Profile_Video[CodecID]);
- Fill(Stream_Video, StreamPos_Last, Video_Codec, Swf_Codec_Video[CodecID]);
- }
- Fill(Stream_Video, StreamPos_Last, Video_FrameCount, NumFrames);
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Swf::Decompress()
-{
- if (Buffer_Size!=File_Size)
- {
- //We must have the complete file in memory, but this is too big (not handled by FileHeader_Begin()), only saying this is SWF
- Fill(Stream_General, 0, General_Format, "ShockWave");
-
- Stream_Prepare(Stream_Video);
-
- Finish("SWF");
- return true;
- }
-
- //Sizes
- unsigned long Source_Size=(unsigned long)(File_Size-8);
- unsigned long Dest_Size=(unsigned long)(FileLength-8);
-
- //Uncompressing
- int8u* Dest=new int8u[Dest_Size];
- if (uncompress((Bytef*)Dest, &Dest_Size, (const Bytef*)Buffer+Buffer_Offset+8, Source_Size)<0)
- {
- delete[] Dest; //Dest=NULL
- Trusted_IsNot("Error while decompressing");
- Reject("SWF");
- return false;
- }
-
- Accept("SWF");
-
- Fill(Stream_General, 0, General_Format, "ShockWave");
-
- File_Swf MI;
- MI.FileLength=FileLength;
- MI.Version=Version;
- Open_Buffer_Init(&MI);
- MI.Open_Buffer_Continue(Dest, FileLength-8);
- MI.Open_Buffer_Finalize();
- Merge(MI, Stream_General, 0, 0);
- Merge(MI);
- delete[] Dest; //Dest=NULL;
-
- Finish("SWF");
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_SWF_*
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Swf.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Swf.h
deleted file mode 100644
index 760d1592b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Swf.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about SWF files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_SwfH
-#define MediaInfo_File_SwfH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Swf
-//***************************************************************************
-
-class File_Swf : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- int32u FileLength;
- int8u Version;
-
-public :
- File_Swf();
-
-private :
- //Buffer
- bool FileHeader_Begin();
- void FileHeader_Parse();
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Header();
- void Header_Continue();
- void End() {};
- void ShowFrame() {};
- void DefineShape() {};
- void PlaceObject() {};
- void RemoveObject() {};
- void DefineBits() {};
- void DefineButton() {};
- void JPEGTables() {};
- void SetBackgroundColor() {};
- void DefineFont() {};
- void DefineText() {};
- void DoAction() {};
- void DefineFontInfo() {};
- void DefineSound();
- void StartSound() {};
- void DefineButtonSound() {};
- void SoundStreamHead();
- void SoundStreamBlock() {};
- void DefineBitsLossless() {};
- void DefineBitsJPEG2() {};
- void DefineShape2() {};
- void DefineCxform() {};
- void Protect() {};
- void PlaceObject2() {};
- void RemoveObject2() {};
- void DefineShape3() {};
- void DefineText2() {};
- void DefineButton2() {};
- void DefineBitsJPEG3() {};
- void DefineBitsLossless2() {};
- void DefineEditText() {};
- void DefineSprite();
- void FrameLabel() {};
- void DefineMorphShape() {};
- void SoundStreamHead2() {SoundStreamHead();};
- void DefineFont2() {};
- void ExportAssets() {};
- void ImportAssets() {};
- void EnableDebugger() {};
- void DoInitAction() {};
- void DefineVideoStream();
- void DefineVideoFrame() {};
- void DefineFontInfo2() {};
- void EnableDebugger2() {};
- void ScriptLimits() {};
- void SetTabIndex() {};
- void FileAttributes() {};
- void PlaceObject3() {};
- void ImportAssets2() {};
- void DefineFontAlignZones() {};
- void CSMTextSettings() {};
- void DefineFont3() {};
- void SymbolClass() {};
- void Metadata() {};
- void DefineScalingGrid() {};
- void DoABC() {};
- void DefineShape4() {};
- void DefineMorphShape2() {};
- void DefineSceneAndFrameLabelData() {};
- void DefineBinaryData() {};
- void DefineFontName() {};
- void StartSound2() {};
-
- //Helpers
- bool Decompress();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Umf.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Umf.cpp
deleted file mode 100644
index 1a929c608..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Umf.cpp
+++ /dev/null
@@ -1,240 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_GXF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Umf.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Umf::File_Umf()
-:File__Analyze()
-{
- //In
- #if MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- GopSize=(int64u)-1;
- #endif //MEDIAINFO_SEEK || MEDIAINFO_DEMUX
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Umf::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<2)
- return false; //Must wait for more data
-
- int16u Length=LittleEndian2int16u(Buffer);
- if (Buffer_Size<Length)
- return false; //Must wait for more data
-
- //All should be OK...
- Accept("UMF");
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Umf::Read_Buffer_Continue()
-{
- //Parsing
- int32u Tracks, Segments;
- Element_Begin1("Payload description");
- Skip_L4( "Total length of the UMF data");
- Skip_L4( "Version of this file");
- Get_L4 (Tracks, "Number of tracks in the material");
- Skip_L4( "Offset to track description section");
- Skip_L4( "Size of the track description section");
- Get_L4 (Segments, "Number of segments");
- Skip_L4( "Offset to media description section");
- Skip_L4( "Size of the media description section");
- Skip_L4( "Offset to the user data section");
- Skip_L4( "Size of the user data section");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Element_End0();
-
- Element_Begin1("Material description");
- Skip_L4( "Attributes");
- Skip_L4( "Maximum length of the material in fields");
- Skip_L4( "Minimum length of the material in fields");
- Skip_L4( "Material mark in value in fields");
- Skip_L4( "Material mark out value in fields");
- Skip_L4( "Time code at mark in value");
- Skip_L4( "Time code at mark out value");
- Skip_L4( "last modified time (Most)");
- Skip_L4( "last modified time (Least)");
- Skip_L4( "creation time (Most)");
- Skip_L4( "creation time (Least)");
- Skip_L2( "Reserved");
- Skip_L2( "Reserved");
- Skip_L2( "Number of audio tracks");
- Skip_L2( "Number of time code tracks");
- Skip_L2( "Reserved");
- Skip_L2( "Number of MPEG-1, MPEG-2, and MPEG-2 HD video tracks");
- Element_End0();
-
- for (int32u Pos=0; Pos<Tracks; Pos++)
- {
- Element_Begin1("Track description");
- Skip_C1( "Track information - Track type");
- Skip_C1( "Track information - Track logical number");
- Skip_L2( "Number of segments on this track");
- Element_End0();
-
- if (Element_Offset>=Element_Size)
- break;
- }
-
- for (int32u Pos=0; Pos<Segments; Pos++)
- {
- Element_Begin1("Media description");
- int32u Type;
- int16u Length;
- Get_L2 (Length, "Length of this media description");
- int64u End=Element_Offset+Length-2;
- Skip_C1( "Track information - Track type");
- Skip_C1( "Track information - Track logical number");
- Skip_L2( "Media Sequence number");
- Skip_L2( "Reserved");
- Skip_L4( "Number of fields in segment");
- Skip_L4( "Reserved");
- Skip_L4( "Mark in value for the media file in fields");
- Skip_L4( "Mark out value for the media file in fields");
- Skip_Local(88, "Source device media file name");
- Get_L4 (Type, "Type of media track");
- Skip_L4( "Sampling rates for this track");
- Skip_L4( "Size of sample for audio and time codes");
- Skip_L4( "Reserved");
- switch (Type)
- {
- case 0x00000004 :
- case 0x00000007 :
- case 0x00000009 : //MPEG-Video
- {
- #if MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- int32u P, B;
- #endif //MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- Skip_L4( "Color difference format");
- Skip_L4( "GoP structure");
- Skip_L4( "Frame/field structure");
- Skip_L4( "Target I-pictures per GoP");
- #if MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- Get_L4 (P, "Target P-pictures per I-picture");
- Get_L4 (B, "Target B-pictures per P-picture or I-picture");
- #else //MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- Skip_L4( "Target P-pictures per I-picture");
- Skip_L4( "Target B-pictures per P-picture or I-picture");
- #endif //MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- Skip_L4( "MPEG video attributes");
- Skip_L4( "Reserved");
- #if MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- GopSize=(1+P)*(1+B);
- #endif //MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- }
- break;
- case 0x00000003 : //TimeCode
- Skip_L4( "Time code attributes");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- break;
- case 0x00000002 : //Audio
- //Skip_LF8( "Level at which to play this segment");
- //Skip_LF8( "Level at which to terminate this segment");
- Skip_L8( "Level at which to play this segment");
- Skip_L8( "Level at which to terminate this segment");
- Skip_L4( "Number of fields over which to ramp up");
- Skip_L4( "Number of fields over which to ramp down");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- break;
- case 0x00000005 : //DV25
- case 0x00000006 : //DV50
- Skip_L4( "Attributes"); //With Aspect ratio
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- #if MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- GopSize=1;
- #endif //MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- break;
- default :
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- Skip_L4( "Reserved");
- }
- if (Element_Offset<End)
- Skip_XX(End-Element_Offset, "Unknown");
- Element_End0();
-
- if (Element_Offset>=Element_Size)
- break;
- }
-
- while (Element_Offset<Element_Size)
- {
- Element_Begin1("User data");
- int32u Length;
- Get_L4 (Length, "The length of this user data record");
- Skip_L4( "Position on the material time line");
- Skip_L2( "Track associated with the user data record");
- Skip_L2( "Media Sequence Numbe");
- Skip_L4( "User-defined key");
- if (Length>18)
- Skip_XX(Length-18, "User data");
- else
- Skip_XX(Element_Size-Element_Offset-2, "User data");
- Skip_L1( "NULL byte");
- Skip_L1( "Reserved byte");
- Element_End0();
- }
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_UMF_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Umf.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Umf.h
deleted file mode 100644
index efd7f472f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Umf.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about UMF files
-// Unified Material Format
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_UmfH
-#define MediaInfo_File_UmfH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Umf
-//***************************************************************************
-
-class File_Umf : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Umf();
-
- //Out
- #if MEDIAINFO_SEEK || MEDIAINFO_DEMUX
- int64u GopSize;
- #endif //MEDIAINFO_SEEK || MEDIAINFO_DEMUX
-
-protected :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm.cpp
deleted file mode 100644
index d5827f42f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Main part
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_WM_YES
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Wm.h"
-#if defined(MEDIAINFO_MPEGPS_YES)
- #include "MediaInfo/Multiple/File_MpegPs.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Wm::File_Wm()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("Wm");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Wm;
- StreamIDs_Width[0]=2;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Level=2; //Container
- #endif //MEDIAINFO_DEMUX
- DataMustAlwaysBeComplete=false;
-
- //Stream
- Packet_Count=0;
- MaximumDataPacketSize=(int32u)-1;
- Header_ExtendedContentDescription_AspectRatioX=0;
- Header_ExtendedContentDescription_AspectRatioY=0;
- SizeOfMediaObject_BytesAlreadyParsed=0;
- FileProperties_Preroll=0;
- Codec_Description_Count=0;
- Stream_Number=0;
- Data_Parse_Padding=0;
- NumberPayloads=1;
- NumberPayloads_Pos=0;
- Data_Parse_Begin=true;
- IsDvrMs=false;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Wm::Streams_Finish()
-{
- //Encryption management
- /*const Ztring& Encryption=Retrieve(Stream_General, 0, General_Encryption);
- if (!Encryption.empty())
- {
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t Pos=0; Pos<(*Stream[StreamKind]).size(); Pos++)
- Fill ((stream_t)StreamKind, 0, "Encryption", Encryption);
- }
-
- Fill("BitRate", CurrentBitRate[StreamNumber]);
- */
-
- std::map<int16u, stream>::iterator Temp=Stream.begin();
- while (Temp!=Stream.end())
- {
- for (std::map<std::string, ZenLib::Ztring>::iterator Info_Temp=Temp->second.Info.begin(); Info_Temp!=Temp->second.Info.end(); ++Info_Temp)
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, Info_Temp->first.c_str(), Info_Temp->second, true);
-
- //Codec Info
- for (size_t Pos=0; Pos<CodecInfos.size(); Pos++)
- {
- if ((CodecInfos[Pos].Type==1 && Temp->second.StreamKind==Stream_Video)
- || (CodecInfos[Pos].Type==2 && Temp->second.StreamKind==Stream_Audio))
- {
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, "CodecID_Description", CodecInfos[Pos].Info, true);
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, "Codec_Description", CodecInfos[Pos].Info, true);
- }
- }
-
- if (Temp->second.StreamKind==Stream_Video)
- {
- //Some tests about the frame rate
- std::map<int32u, int32u> PresentationTime_Deltas_Problem;
- std::map<int32u, int32u> PresentationTime_Deltas_Most;
- for (std::map<ZenLib::int32u, ZenLib::int32u>::iterator PresentationTime_Delta=Temp->second.PresentationTime_Deltas.begin(); PresentationTime_Delta!=Temp->second.PresentationTime_Deltas.end(); ++PresentationTime_Delta)
- {
- if (PresentationTime_Delta->second>=5)
- PresentationTime_Deltas_Problem[PresentationTime_Delta->first]=PresentationTime_Delta->second;
- if (PresentationTime_Delta->second>=30)
- PresentationTime_Deltas_Most[PresentationTime_Delta->first]=PresentationTime_Delta->second;
- }
-
- if (PresentationTime_Deltas_Most.empty()
- || (PresentationTime_Deltas_Most.size()==1 && PresentationTime_Deltas_Problem.size()>1)
- || (PresentationTime_Deltas_Most.size()==2 && PresentationTime_Deltas_Problem.size()>2))
- {
- if (Temp->second.AverageTimePerFrame>0)
- Fill(Stream_Video, Temp->second.StreamPos, Video_FrameRate, ((float)10000000)/Temp->second.AverageTimePerFrame, 3, true);
- }
- else if (PresentationTime_Deltas_Most.size()==1)
- {
- if (PresentationTime_Deltas_Most.begin()->first>1) //Not 0, we want to remove Delta incremented 1 per 1
- Fill(Stream_Video, Temp->second.StreamPos, Video_FrameRate, 1000/((float64)PresentationTime_Deltas_Most.begin()->first), 3, true);
- if (Temp->second.AverageTimePerFrame>0)
- Fill(Stream_Video, Temp->second.StreamPos, Video_FrameRate_Nominal, ((float)10000000)/Temp->second.AverageTimePerFrame, 3, true);
- }
- else if (PresentationTime_Deltas_Most.size()==2)
- {
- std::map<int32u, int32u>::iterator PresentationTime_Delta_Most=PresentationTime_Deltas_Most.begin();
- float64 PresentationTime_Deltas_1_Value=(float64)PresentationTime_Delta_Most->first;
- float64 PresentationTime_Deltas_1_Count=(float64)PresentationTime_Delta_Most->second;
- ++PresentationTime_Delta_Most;
- float64 PresentationTime_Deltas_2_Value=(float64)PresentationTime_Delta_Most->first;
- float64 PresentationTime_Deltas_2_Count=(float64)PresentationTime_Delta_Most->second;
- float64 FrameRate_Real=1000/(((PresentationTime_Deltas_1_Value*PresentationTime_Deltas_1_Count)+(PresentationTime_Deltas_2_Value*PresentationTime_Deltas_2_Count))/(PresentationTime_Deltas_1_Count+PresentationTime_Deltas_2_Count));
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, Video_FrameRate, FrameRate_Real, 3, true);
- if (Temp->second.AverageTimePerFrame>0)
- Fill(Stream_Video, Temp->second.StreamPos, Video_FrameRate_Nominal, ((float)10000000)/Temp->second.AverageTimePerFrame, 3, true);
- }
- else
- {
- Fill(Stream_Video, Temp->second.StreamPos, Video_FrameRate_Mode, "VFR");
- if (Temp->second.AverageTimePerFrame>0)
- Fill(Stream_Video, Temp->second.StreamPos, Video_FrameRate_Nominal, ((float)10000000)/Temp->second.AverageTimePerFrame, 3, true);
- }
- }
- if (Temp->second.AverageBitRate>0)
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, "BitRate", Temp->second.AverageBitRate, 10, true);
- if (Temp->second.LanguageID!=(int16u)-1 && Temp->second.LanguageID<(int16u)Languages.size())
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, "Language", Languages[Temp->second.LanguageID]);
- else if (!Language_ForAll.empty())
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, "Language", Language_ForAll);
- if (Temp->second.Parser)
- {
- if (Temp->second.StreamKind==Stream_Max)
- if (Temp->second.Parser->Count_Get(Stream_Audio))
- {
- Stream_Prepare(Stream_Audio);
- Temp->second.StreamKind=StreamKind_Last;
- Temp->second.StreamPos=StreamPos_Last;
- }
- Ztring Format_Profile;
- if (Temp->second.StreamKind==Stream_Video)
- Format_Profile=Retrieve(Stream_Video, Temp->second.StreamPos, Video_Format_Profile);
- Finish(Temp->second.Parser);
- if (Temp->second.Parser->Get(Stream_Video, 0, Video_Format)==__T("MPEG Video"))
- {
- //Width/Height are junk
- Clear(Stream_Video, Temp->second.StreamPos, Video_Width);
- Clear(Stream_Video, Temp->second.StreamPos, Video_Height);
- Clear(Stream_Video, Temp->second.StreamPos, Video_PixelAspectRatio);
- Clear(Stream_Video, Temp->second.StreamPos, Video_DisplayAspectRatio);
- }
-
- //Delay (in case of MPEG-PS)
- if (Temp->second.TimeCode_First!=(int64u)-1)
- {
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, Fill_Parameter(Temp->second.StreamKind, Generic_Delay), Temp->second.TimeCode_First, 10);
- Fill(Temp->second.StreamKind, Temp->second.StreamPos, Fill_Parameter(Temp->second.StreamKind, Generic_Delay_Source), "Container");
- }
-
-
- Merge(*Temp->second.Parser, Temp->second.StreamKind, 0, Temp->second.StreamPos);
- if (!Format_Profile.empty() && Format_Profile.find(Retrieve(Stream_Video, Temp->second.StreamPos, Video_Format_Profile))==0)
- Fill(Stream_Video, Temp->second.StreamPos, Video_Format_Profile, Format_Profile, true);
- }
-
- ++Temp;
- }
-
- if (Count_Get(Stream_Video)==0 && Count_Get(Stream_Image)==0)
- Fill(Stream_General, 0, General_InternetMediaType, "audio/x-ms-wma", Unlimited, true, true);
-
- //Purge what is not needed anymore
- if (!File_Name.empty()) //Only if this is not a buffer, with buffer we can have more data
- Stream.clear();
-}
-
-//***************************************************************************
-// Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_Parse()
-{
- if (!MustUseAlternativeParser)
- {
- //Parsing
- int128u Name;
- int64u Size;
- Get_GUID(Name, "Name");
- Get_L8 (Size, "Size");
-
- //Filling
- Header_Fill_Code(Name.hi, Ztring().From_GUID(Name));
- Header_Fill_Size(Size);
- }
- else
- {
- Header_Fill_Code(0, "Packet");
- Header_Fill_Size(MaximumDataPacketSize);
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_WM_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm.h
deleted file mode 100644
index b0dbf3025..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_WmH
-#define MediaInfo_File_WmH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Wm
-//***************************************************************************
-
-class File_Wm : public File__Analyze
-{
-public :
- File_Wm();
-
-protected :
- //Streams management
- void Streams_Finish();
-
-private :
- //Buffer
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Header();
- void Header_FileProperties();
- void Header_StreamProperties();
- void Header_StreamProperties_Audio();
- void Header_StreamProperties_Audio_WMA();
- void Header_StreamProperties_Audio_AMR();
- void Header_StreamProperties_Video();
- void Header_StreamProperties_JFIF();
- void Header_StreamProperties_DegradableJPEG();
- void Header_StreamProperties_Binary();
- void Header_HeaderExtension();
- void Header_HeaderExtension_ExtendedStreamProperties();
- void Header_HeaderExtension_AdvancedMutualExclusion();
- void Header_HeaderExtension_GroupMutualExclusion();
- void Header_HeaderExtension_StreamPrioritization();
- void Header_HeaderExtension_BandwidthSharing();
- void Header_HeaderExtension_LanguageList();
- void Header_HeaderExtension_Metadata();
- void Header_HeaderExtension_MetadataLibrary();
- void Header_HeaderExtension_IndexParameters();
- void Header_HeaderExtension_MediaIndexParameters();
- void Header_HeaderExtension_TimecodeIndexParameters();
- void Header_HeaderExtension_Compatibility();
- void Header_HeaderExtension_AdvancedContentEncryption();
- void Header_HeaderExtension_IndexPlaceholder();
- void Header_CodecList();
- void Header_ScriptCommand();
- void Header_Marker();
- void Header_BitRateMutualExclusion();
- void Header_ErrorCorrection();
- void Header_ContentDescription();
- void Header_ExtendedContentDescription();
- void Header_ExtendedContentDescription_ASFLeakyBucketPairs(int16u Value_Length);
- void Header_StreamBitRate();
- void Header_ContentBranding();
- void Header_ContentEncryption();
- void Header_ExtendedContentEncryption();
- void Header_DigitalSignature();
- void Header_Padding();
- void Data();
- void Data_Packet();
- void Data_Packet_ReplicatedData(int32u Size);
- void Data_Packet_ReplicatedData_TimeStamp();
- void SimpleIndex();
- void Index();
- void MediaIndex();
- void TimecodeIndex();
-
- //Data
- struct stream
- {
- struct payload_extension_system
- {
- int128u ID;
- int16u Size;
- };
-
- File__Analyze* Parser;
- File__Analyze* Parser2;
- File__Analyze* Parser3;
- stream_t StreamKind;
- size_t StreamPos;
- size_t PacketCount;
- int64u AverageTimePerFrame;
- int32u AverageBitRate;
- int16u LanguageID;
- std::map<std::string, ZenLib::Ztring> Info;
- bool IsCreated; //if Stream_Prepare() is done
- bool SearchingPayload;
- int32u PresentationTime_Old;
- int32u PresentationTime_Count;
- std::map<int32u, int32u> PresentationTime_Deltas;
- std::vector<payload_extension_system> Payload_Extension_Systems;
- int64u TimeCode_First;
-
- stream()
- {
- Parser=NULL;
- Parser2=NULL;
- Parser3=NULL;
- StreamKind=Stream_Max;
- StreamPos=0;
- PacketCount=0;
- AverageTimePerFrame=0;
- AverageBitRate=0;
- LanguageID=(int16u)-1;
- IsCreated=false;
- SearchingPayload=false;
- PresentationTime_Old=0;
- PresentationTime_Count=0;
- TimeCode_First=(int64u)-1;
- }
-
- ~stream()
- {
- delete Parser; //Parser=NULL;
- delete Parser2; //Parser2=NULL
- delete Parser3; //Parser3=NULL
- }
- };
- struct codecinfo
- {
- int16u Type;
- Ztring Info;
- };
- std::map<int16u, stream> Stream;
- int16u Stream_Number; //In header: current pos, in Data: Count of enabled parsers
- std::vector<ZenLib::Ztring> Languages;
- std::vector<codecinfo> CodecInfos;
- Ztring Language_ForAll;
- int32u Data_Parse_Padding;
- int32u MaximumDataPacketSize;
- bool Data_Parse_Begin;
- bool Data_Parse_MultiplePayloads;
- bool Data_Parse_CompressedPayload;
- bool IsDvrMs; //Is DVR-Ms format (for finding MPEG Audio)
-
- //From Data headers
- size_t Codec_Description_Count;
- size_t Packet_Count;
- size_t Streams_Count;
- int64u Header_ExtendedContentDescription_AspectRatioX;
- int64u Header_ExtendedContentDescription_AspectRatioY;
- size_t Header_StreamProperties_StreamOrder;
- int64u Data_AfterTheDataChunk;
- int32u SizeOfMediaObject_BytesAlreadyParsed;
- int32u FileProperties_Preroll;
- int8u ReplicatedDataLengthType;
- int8u OffsetIntoMediaObjectLengthType;
- int8u MediaObjectNumberLengthType;
- int8u StreamNumberLengthType;
- int8u PayloadLengthType;
- int8u NumberPayloads;
- int8u NumberPayloads_Pos;
- bool MultiplePayloadsPresent;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm_Elements.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm_Elements.cpp
deleted file mode 100644
index c8fd8af26..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Wm_Elements.cpp
+++ /dev/null
@@ -1,1748 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Elements part
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_WM_YES
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Wm.h"
-#if defined(MEDIAINFO_VC1_YES)
- #include "MediaInfo/Video/File_Vc1.h"
-#endif
-#if defined(MEDIAINFO_MPEGV_YES)
- #include "MediaInfo/Video/File_Mpegv.h"
-#endif
-#if defined(MEDIAINFO_AC3_YES)
- #include "MediaInfo/Audio/File_Ac3.h"
-#endif
-#if defined(MEDIAINFO_MPEGA_YES)
- #include "MediaInfo/Audio/File_Mpega.h"
-#endif
-#if MEDIAINFO_DEMUX
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
- #include "base64.h"
-#endif //MEDIAINFO_DEMUX
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-const char* Wm_CodecList_Kind(int32u Kind)
-{
- switch (Kind)
- {
- case 0x01 : return "Video";
- case 0x02 : return "Audio";
- default : return "Unknown";
- }
-}
-
-const char* Wm_BannerImageData_Type(int32u Type)
-{
- switch (Type)
- {
- case 0x00 : return "";
- case 0x01 : return "Bitmap";
- case 0x02 : return "JPEG";
- case 0x03 : return "GIF";
- default : return "Unknown";
- }
-}
-
-#define UUID(NAME, PART1, PART2, PART3, PART4, PART5) \
- const int64u NAME =0x##PART3##PART2##PART1##ULL; \
- const int64u NAME##2=0x##PART4##PART5##ULL; \
-
-namespace Elements
-{
- UUID(Header, 75B22630, 668E, 11CF, A6D9, 00AA0062CE6C)
- UUID(Header_FileProperties, 8CABDCA1, A947, 11CF, 8EE4, 00C00C205365)
- UUID(Header_StreamProperties, B7DC0791, A9B7, 11CF, 8EE6, 00C00C205365)
- UUID(Header_StreamProperties_Audio, F8699E40, 5B4D, 11CF, A8FD, 00805F5C442B)
- UUID(Header_StreamProperties_Video, BC19EFC0, 5B4D, 11CF, A8FD, 00805F5C442B)
- UUID(Header_StreamProperties_Command, 59DACFC0, 59E6, 11D0, A3AC, 00A0C90348F6)
- UUID(Header_StreamProperties_JFIF, B61BE100, 5B4E, 11CF, A8FD, 00805F5C442B)
- UUID(Header_StreamProperties_DegradableJPEG, 35907DE0, E415, 11CF, A917, 00805F5C442B)
- UUID(Header_StreamProperties_FileTransfer, 91BD222C, F21C, 497A, 8B6D, 5AA86BFC0185)
- UUID(Header_StreamProperties_Binary, 3AFB65E2, 47EF, 40F2, AC2C, 70A90D71D343)
- UUID(Header_StreamProperties_Binary_WebStreamMediaSubType, 776257D4, C627, 41CB, 8F81, 7AC7FF1C40CC)
- UUID(Header_StreamProperties_Binary_WebStreamFormat, DA1E6B13, 8359, 4050, B398, 388E965BF00C)
- UUID(Header_HeaderExtension, 5FBF03B5, A92E, 11CF, 8EE3, 00C00C205365)
- UUID(Header_HeaderExtension_ExtendedStreamProperties, 14E6A5CB, C672, 4332, 8399, A96952065B5A)
- UUID(Header_HeaderExtension_AdvancedMutualExclusion, A08649CF, 4775, 4670, 8A16, 6E35357566CD)
- UUID(Header_HeaderExtension_GroupMutualExclusion, D1465A40, 5A79, 4338, B71B, E36B8FD6C249)
- UUID(Header_HeaderExtension_StreamPrioritization, D4FED15B, 88D3, 454F, 81F0, ED5C45999E24)
- UUID(Header_HeaderExtension_BandwidthSharing, A69609E6, 517B, 11D2, B6AF, 00C04FD908E9)
- UUID(Header_HeaderExtension_LanguageList, 7C4346A9, EFE0, 4BFC, B229, 393EDE415C85)
- UUID(Header_HeaderExtension_Metadata, C5F8CBEA, 5BAF, 4877, 8467, AA8C44FA4CCA)
- UUID(Header_HeaderExtension_MetadataLibrary, 44231C94, 9498, 49D1, A141, 1D134E457054)
- UUID(Header_HeaderExtension_IndexParameters, D6E229DF, 35DA, 11D1, 9034, 00A0C90349BE)
- UUID(Header_HeaderExtension_MediaIndexParameters, 6B203BAD, 3F11, 48E4, ACA8, D7613DE2CFA7)
- UUID(Header_HeaderExtension_TimecodeIndexParameters, F55E496D, 9797, 4B5D, 8C8B, 604DFE9BFB24)
- UUID(Header_HeaderExtension_Compatibility, 26F18B5D, 4584, 47EC, 9F5F, 0E651F0452C9)
- UUID(Header_HeaderExtension_AdvancedContentEncryption, 43058533, 6981, 49E6, 9B74, AD12CB86D58C)
- UUID(Header_HeaderExtension_IndexPlaceholder, D9AADE20, 7C17, 4F9C, BC28, 8555DD98E2A2)
- UUID(Header_CodecList, 86D15240, 311D, 11D0, A3A4, 00ACC90348F6)
- UUID(Header_ScriptCommand, 1EFB1A30, 0B62, 11D0, A39B, 00A0C90348F6)
- UUID(Header_Marker, F487CD01, A951, 11CF, 8EE6, 00C00C205365)
- UUID(Header_BitRateMutualExclusion, D6E229DC, 35DA, 11D1, 9034, 00A0C90349BE)
- UUID(Header_ErrorCorrection, 75B22635, 668E, 11CF, A6D9, 00AA0062CE6C)
- UUID(Header_ContentDescription, 75B22633, 668E, 11CF, A6D9, 00AA0062CE6C)
- UUID(Header_ExtendedContentDescription, D2D0A440, E307, 11D2, 97F0, 00A0C95EA850)
- UUID(Header_StreamBitRate, 7BF875CE, 468D, 11D1, 8D82, 006097C9A2B2)
- UUID(Header_ContentBranding, 2211B3FA, BD23, 11D2, B4B7, 00A0C955FC6E)
- UUID(Header_ContentEncryption, 2211B3FB, BD23, 11D2, B4B7, 00A0C955FC6E)
- UUID(Header_ExtendedContentEncryption, 298AE614, 2622, 4C17, B935, DAE07EE9289C)
- UUID(Header_DigitalSignature, 2211B3FC, BD23, 11D2, B4B7, 00A0C955FC6E)
- UUID(Header_Padding, 1806D474, CADF, 4509, A4BA, 9AABCB96AAE8)
- UUID(Data, 75B22636, 668E, 11CF, A6D9, 00AA0062CE6C)
- UUID(SimpleIndex, 33000890, E5B1, 11CF, 89F4, 00A0C90349CB)
- UUID(Index, D6E229D3, 35DA, 11D1, 9034, 00A0C90349BE)
- UUID(MediaIndex, FEB103F8, 12AD, 4C64, 840F, 2A1D2F7AD48C)
- UUID(TimecodeIndex, 3CB73FD0, 0C4A, 4803, 953D, EDF7B6228F0C)
-
- UUID(Payload_Extension_System_TimeStamp, 1135BEB7, 3A39, 478A, 98D9, 15C76B00EB69);
- UUID(Mutex_Language, D6E22A00, 35DA, 11D1, 9034, 00A0C90349BE);
- UUID(Mutex_Bitrate, D6E22A01, 35DA, 11D1, 9034, 00A0C90349BE);
-}
-
-const char* Wm_StreamType(const int128u Kind)
-{
- switch (Kind.hi)
- {
- case Elements::Header_StreamProperties_Audio : return "Audio";
- case Elements::Header_StreamProperties_Video : return "Video";
- case Elements::Header_StreamProperties_Command : return "Command";
- case Elements::Header_StreamProperties_JFIF : return "JFIF";
- case Elements::Header_StreamProperties_DegradableJPEG : return "Degradable JPEG";
- case Elements::Header_StreamProperties_FileTransfer : return "File Transfer";
- case Elements::Header_StreamProperties_Binary : return "Binary";
- default : return "Unknown";
- }
-}
-
-const char* Wm_ExclusionType(const int128u ExclusionType)
-{
- switch (ExclusionType.hi)
- {
- case Elements::Header_StreamProperties_Audio : return "Language";
- case Elements::Header_StreamProperties_Video : return "Bitrate";
- default : return "Unknown";
- }
-}
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Element parse
-//
-void File_Wm::Data_Parse()
-{
- //Parsing
- DATA_BEGIN
- LIST(Header)
- ATOM_BEGIN
- ATOM(Header_FileProperties)
- ATOM(Header_StreamProperties)
- LIST(Header_HeaderExtension)
- ATOM_BEGIN
- ATOM(Header_HeaderExtension_ExtendedStreamProperties)
- ATOM(Header_HeaderExtension_AdvancedMutualExclusion)
- ATOM(Header_HeaderExtension_GroupMutualExclusion)
- ATOM(Header_HeaderExtension_StreamPrioritization)
- ATOM(Header_HeaderExtension_BandwidthSharing)
- ATOM(Header_HeaderExtension_LanguageList)
- ATOM(Header_HeaderExtension_Metadata)
- ATOM(Header_HeaderExtension_MetadataLibrary)
- ATOM(Header_HeaderExtension_IndexParameters)
- ATOM(Header_HeaderExtension_MediaIndexParameters)
- ATOM(Header_HeaderExtension_TimecodeIndexParameters)
- ATOM(Header_HeaderExtension_Compatibility)
- ATOM(Header_HeaderExtension_AdvancedContentEncryption)
- ATOM(Header_HeaderExtension_IndexPlaceholder)
- ATOM(Header_Padding)
- ATOM_END
- ATOM(Header_CodecList)
- ATOM(Header_ScriptCommand)
- ATOM(Header_Marker)
- ATOM(Header_BitRateMutualExclusion)
- ATOM(Header_ErrorCorrection)
- ATOM(Header_ContentDescription)
- ATOM(Header_ExtendedContentDescription)
- ATOM(Header_StreamBitRate)
- ATOM(Header_ContentBranding)
- ATOM(Header_ContentEncryption)
- ATOM(Header_ExtendedContentEncryption)
- ATOM(Header_DigitalSignature)
- ATOM(Header_Padding)
- ATOM_END
- LIST(Data)
- ATOM_DEFAULT_ALONE(Data_Packet)
- LIST_SKIP(SimpleIndex)
- LIST_SKIP(Index)
- ATOM(MediaIndex)
- ATOM(TimecodeIndex)
- DATA_END
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Wm::Header()
-{
- Data_Accept("Windows Media");
- Element_Name("Header");
-
- //Parsing
- Skip_L4( "Number of Header Objects");
- Skip_L1( "Alignment");
- Skip_L1( "Architecture");
-
- FILLING_BEGIN();
- Fill(Stream_General, 0, General_Format, "Windows Media");
- Header_StreamProperties_StreamOrder=0;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_FileProperties()
-{
- Element_Name("File Properties");
-
- //Parsing
- int64u CreationDate, PlayDuration, SendDuration, Preroll;
- int32u Flags, MaximumBitRate;
- Skip_GUID( "File ID");
- Skip_L8( "File Size");
- Get_L8 (CreationDate, "Creation Date"); Param_Info1(Ztring().Date_From_Milliseconds_1601(CreationDate/10000));
- Skip_L8( "Data Packets Count");
- Get_L8 (PlayDuration, "Play Duration"); Param_Info_From_Milliseconds(PlayDuration/10000);
- Get_L8 (SendDuration, "Send Duration"); Param_Info_From_Milliseconds(SendDuration/10000);
- Get_L8 (Preroll, "Preroll"); Param_Info_From_Milliseconds(Preroll);
- Get_L4 (Flags, "Flags");
- Skip_Flags(Flags, 0, "Broadcast");
- Skip_Flags(Flags, 1, "Seekable");
- Skip_Flags(Flags, 2, "Use Packet Template");
- Skip_Flags(Flags, 3, "Live");
- Skip_Flags(Flags, 4, "Recordable");
- Skip_Flags(Flags, 5, "Unknown Data Size");
- Skip_L4( "Minimum Data Packet Size");
- Get_L4 (MaximumDataPacketSize, "Maximum Data Packet Size");
- Get_L4 (MaximumBitRate, "Maximum Bitrate");
-
- //Filling
- if (MaximumBitRate)
- Fill(Stream_General, 0, General_OverallBitRate_Maximum, MaximumBitRate);
- Fill(Stream_General, 0, General_Encoded_Date, Ztring().Date_From_Milliseconds_1601(CreationDate/10000));
- if (PlayDuration/1000>Preroll)
- Fill(Stream_General, 0, General_Duration, PlayDuration/10000-Preroll);
- FileProperties_Preroll=(int32u)(Preroll);
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_StreamProperties ()
-{
- Element_Name("Stream Properties");
-
- //Parsing
- int128u StreamType;
- int32u StreamTypeLength, ErrorCorrectionTypeLength;
- Get_GUID(StreamType, "StreamType"); Param_Info1(Wm_StreamType(StreamType)); Element_Info1(Wm_StreamType(StreamType));
- Skip_GUID( "Error Correction Type");
- Skip_L8( "Time Offset");
- Get_L4 (StreamTypeLength, "Type-Specific Data Length");
- Get_L4 (ErrorCorrectionTypeLength, "Error Correction Data Length");
- Get_L2 (Stream_Number, "Stream Number");
- if (Stream_Number&0x8000)
- {
- Param_Info1("Encrypted Content");
- Stream[Stream_Number&0x007F].Info["Encryption"]=__T("Encrypted");
- }
- Stream_Number&=0x007F; //Only 7bits
- Element_Info1(Stream_Number);
- Skip_L4( "Reserved");
- switch (StreamType.hi)
- {
- case Elements::Header_StreamProperties_Audio : Element_Begin0(); //size is StreamTypeLength
- Header_StreamProperties_Audio();
- Element_End0(); break;
- case Elements::Header_StreamProperties_Video : Element_Begin0(); //size is StreamTypeLength
- Header_StreamProperties_Video();
- Element_End0(); break;
- case Elements::Header_StreamProperties_JFIF : Element_Begin0(); //size is StreamTypeLength
- Header_StreamProperties_JFIF();
- Element_End0(); break;
- case Elements::Header_StreamProperties_DegradableJPEG : Element_Begin0(); //size is StreamTypeLength
- Header_StreamProperties_DegradableJPEG();
- Element_End0(); break;
- case Elements::Header_StreamProperties_FileTransfer :
- case Elements::Header_StreamProperties_Binary : Element_Begin0(); //size is StreamTypeLength
- Header_StreamProperties_Binary();
- StreamKind_Last=Stream_Max; StreamPos_Last=(size_t)-1;
- Element_End0(); break;
- default : if (StreamTypeLength>0)
- Skip_XX(StreamTypeLength, "Type-Specific Data");
- StreamKind_Last=Stream_Max; StreamPos_Last=(size_t)-1;
- }
- if (ErrorCorrectionTypeLength)
- Skip_XX(ErrorCorrectionTypeLength, "Error Correction Data");
-
- //Filling
- Stream[Stream_Number].StreamKind=StreamKind_Last;
- Stream[Stream_Number].StreamPos=StreamPos_Last;
- Stream[Stream_Number].Info["ID"].From_Number(Stream_Number);
- Stream[Stream_Number].Info["StreamOrder"].From_Number(Header_StreamProperties_StreamOrder);
- Header_StreamProperties_StreamOrder++;
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_StreamProperties_Audio ()
-{
- Element_Name("Audio");
-
- //Parsing
- int32u SamplingRate, BytesPerSec;
- int16u CodecID, Channels, Data_Size, Resolution;
- Get_L2 (CodecID, "Codec ID");
- Get_L2 (Channels, "Number of Channels");
- Get_L4 (SamplingRate, "Samples Per Second");
- Get_L4 (BytesPerSec, "Average Number of Bytes Per Second");
- Skip_L2( "Block Alignment");
- Get_L2 (Resolution, "Bits / Sample");
- Get_L2 (Data_Size, "Codec Specific Data Size");
-
- //Filling
- Stream_Prepare(Stream_Audio);
- Stream[Stream_Number].IsCreated=true;
- Ztring Codec; Codec.From_Number(CodecID, 16);
- Codec.MakeUpperCase();
- CodecID_Fill(Codec, Stream_Audio, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec, Codec); //May be replaced by codec parser
- Fill(Stream_Audio, StreamPos_Last, Audio_Codec_CC, Codec);
- Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels);
- Fill(Stream_Audio, StreamPos_Last, Audio_SamplingRate, SamplingRate);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate, BytesPerSec*8);
- Fill(Stream_Audio, StreamPos_Last, Audio_BitDepth, Resolution);
-
- FILLING_BEGIN();
- //Creating the parser
- if (0);
- #if defined(MEDIAINFO_MPEGA_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Audio, InfoCodecID_Format_Riff, Ztring::ToZtring(CodecID, 16))==__T("MPEG Audio"))
- {
- Stream[Stream_Number].Parser=new File_Mpega;
- ((File_Mpega*)Stream[Stream_Number].Parser)->Frame_Count_Valid=8;
- Stream[Stream_Number].Parser->ShouldContinueParsing=true;
- }
- #endif
- Open_Buffer_Init(Stream[Stream_Number].Parser);
- FILLING_END();
-
- //Parsing
- if (Data_Size>0)
- {
- Element_Begin1("Codec Specific Data");
- switch (CodecID)
- {
- case 0x0161 :
- case 0x0162 :
- case 0x0163 : Header_StreamProperties_Audio_WMA(); break;
- case 0x7A21 :
- case 0x7A22 : Header_StreamProperties_Audio_AMR(); break;
- default : Skip_XX(Data_Size, "Unknown");
- }
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_StreamProperties_Audio_WMA ()
-{
- Element_Info1("WMA");
-
- //Demux
- #if MEDIAINFO_DEMUX
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- Demux_Level=2; //Container
- Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_Header);
- break;
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+Buffer_Offset+Element_Offset), (size_t)10);//Element_Size-(Element_Offset));
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(Stream_Audio, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[Stream_Audio][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
- #endif //MEDIAINFO_DEMUX
-
- //Parsing
- Skip_L4( "SamplesPerBlock");
- Skip_L2( "EncodeOptions");
- Skip_L4( "SuperBlockAlign");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_StreamProperties_Audio_AMR ()
-{
- Element_Info1("AMR");
-
- //Parsing
- int32u Flags;
- bool VBR;
- Get_L4 (Flags, "Flags");
- Skip_Flags(Flags, 0, "SID is used");
- Get_Flags (Flags, 1, VBR, "Varying bitrate");
-
- //Filling
- Fill(Stream_Audio, StreamPos_Last, Audio_BitRate_Mode, VBR?"VBR":"CBR");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_StreamProperties_Video ()
-{
- Element_Name("Video");
-
- //Parsing
- int32u Width, Height, Compression;
- int16u Data_Size, Resolution;
- Get_L4 (Width, "Width");
- Get_L4 (Height, "Height");
- Skip_L1( "Flags");
- Get_L2 (Data_Size, "Format Data Size");
- Skip_L4( "Size");
- Get_L4 (Width, "Width");
- Get_L4 (Height, "Height");
- Skip_L2( "Planes");
- Get_L2 (Resolution, "BitCount");
- Get_C4 (Compression, "Compression");
- Skip_L4( "SizeImage");
- Skip_L4( "XPelsPerMeter");
- Skip_L4( "YPelsPerMeter");
- Skip_L4( "ClrUsed");
- Skip_L4( "ClrImportant");
-
- //Filling
- Stream_Prepare(Stream_Video);
- Stream[Stream_Number].IsCreated=true;
- CodecID_Fill(Ztring().From_CC4(Compression), Stream_Video, StreamPos_Last, InfoCodecID_Format_Riff);
- Fill(Stream_Video, StreamPos_Last, Video_Codec, Ztring().From_CC4(Compression)); //May be replaced by codec parser
- Fill(Stream_Video, StreamPos_Last, Video_Codec_CC, Ztring().From_CC4(Compression));
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height);
- if (Resolution>0)
- Fill(Stream_Video, StreamPos_Last, Video_BitDepth, (Resolution%3)?Resolution:(Resolution/3)); //If not a multiple of 3, the total resolution is filled
- if (Compression==CC4("DVR "))
- IsDvrMs=true;
-
- //From Content description (we imagine that data is for all video streams...)
- if (Header_ExtendedContentDescription_AspectRatioX && Header_ExtendedContentDescription_AspectRatioY)
- {
- if (Header_ExtendedContentDescription_AspectRatioX==16 && Header_ExtendedContentDescription_AspectRatioY==9)
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, ((float32)16)/9, 3);
- else if (Header_ExtendedContentDescription_AspectRatioX==4 && Header_ExtendedContentDescription_AspectRatioY==3)
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, ((float32)4)/3, 3);
- else
- Fill(Stream_Video, StreamPos_Last, Video_PixelAspectRatio, ((float32)Header_ExtendedContentDescription_AspectRatioX)/Header_ExtendedContentDescription_AspectRatioY, 3, true);
- }
-
- //Creating the parser
- if (0);
- #if defined(MEDIAINFO_VC1_YES)
- else if (MediaInfoLib::Config.CodecID_Get(Stream_Video, InfoCodecID_Format_Riff, Ztring().From_CC4(Compression), InfoCodecID_Format)==__T("VC-1"))
- {
- Stream[Stream_Number].Parser=new File_Vc1;
- if (Compression==CC4("WMV3"))
- {
- ((File_Vc1*)Stream[Stream_Number].Parser)->From_WMV3=true;
- ((File_Vc1*)Stream[Stream_Number].Parser)->MustSynchronize=false;
- }
- ((File_Vc1*)Stream[Stream_Number].Parser)->FrameIsAlwaysComplete=true; //Warning: this is not always the case, see data parsing
- Open_Buffer_Init(Stream[Stream_Number].Parser);
- if (Data_Size>40)
- {
-
- //Demux
- #if MEDIAINFO_DEMUX
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- Element_Code=Stream_Number;
- Demux_Level=2; //Container
- Demux(Buffer+(size_t)Element_Offset, (size_t)(Data_Size-40), ContentType_Header);
- break;
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+(size_t)Element_Offset), (size_t)(Data_Size-40));
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(Stream_Video, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[Stream_Video][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
- #endif //MEDIAINFO_DEMUX
-
- Open_Buffer_Continue(Stream[Stream_Number].Parser, (size_t)(Data_Size-40));
- if (Stream[Stream_Number].Parser->Status[IsFinished])
- {
- Finish(Stream[Stream_Number].Parser);
- Merge(*Stream[Stream_Number].Parser, Stream_Video, 0, StreamPos_Last);
- delete Stream[Stream_Number].Parser; Stream[Stream_Number].Parser=NULL;
- }
- else
- {
- ((File_Vc1*)Stream[Stream_Number].Parser)->Only_0D=true;
- ((File_Vc1*)Stream[Stream_Number].Parser)->MustSynchronize=false;
- }
- }
- }
- #endif
- #if defined(MEDIAINFO_MPEGV_YES)
- else if (MediaInfoLib::Config.Codec_Get(Ztring().From_CC4(Compression), InfoCodec_KindofCodec).find(__T("MPEG-2"))==0)
- {
- Stream[Stream_Number].Parser=new File_Mpegv;
- ((File_Mpegv*)Stream[Stream_Number].Parser)->Frame_Count_Valid=30; //For searching Pulldown
- Open_Buffer_Init(Stream[Stream_Number].Parser);
- }
- #endif
- else if (Data_Size>40) //TODO: see "The Mummy_e"
- Skip_XX(Data_Size-40, "Codec Specific Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_StreamProperties_JFIF ()
-{
- Element_Name("JFIF");
-
- //Parsing
- int32u Width, Height;
- Get_L4 (Width, "Width");
- Get_L4 (Height, "Height");
- Skip_L4( "Reserved");
-
- //Filling
- Stream_Prepare(Stream_Image);
- Fill(Stream_Video, StreamPos_Last, Video_Format, "JPEG");
- Fill(Stream_Video, StreamPos_Last, Video_Codec, "JPEG");
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height);
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_StreamProperties_DegradableJPEG ()
-{
- Element_Name("Degradable JPEG");
-
- int32u Width, Height;
- int16u InterchangeDataLength;
- Get_L4 (Width, "Width");
- Get_L4 (Height, "Height");
- Skip_L2( "Reserved");
- Skip_L2( "Reserved");
- Skip_L2( "Reserved");
- Get_L2 (InterchangeDataLength, "Interchange data length");
- if (InterchangeDataLength>0)
- Skip_XX(InterchangeDataLength, "Interchange data");
- else
- Skip_L1( "Zero");
-
- //Filling
- Stream_Prepare(Stream_Image);
- Fill(Stream_Video, StreamPos_Last, Video_Format, "JPEG");
- Fill(Stream_Video, StreamPos_Last, Video_Codec, "JPEG");
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height);
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_StreamProperties_Binary ()
-{
- Element_Name("Binary");
-
- //Parsing
- int32u FormatDataLength;
- Skip_GUID( "Major media type");
- Skip_GUID( "Media subtype");
- Skip_L4( "Fixed-size samples");
- Skip_L4( "Temporal compression");
- Skip_L4( "Sample size");
- Skip_GUID( "Format type");
- Get_L4 (FormatDataLength, "Format data size");
- if (FormatDataLength>0)
- Skip_XX(FormatDataLength, "Format data");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension()
-{
- Element_Name("Header Extension");
-
- //Parsing
- int32u Size;
- Skip_GUID( "ClockType");
- Skip_L2( "ClockSize");
- Get_L4 (Size, "Extension Data Size");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_ExtendedStreamProperties()
-{
- Element_Name("Extended Stream Properties");
-
- //Parsing
- int64u AverageTimePerFrame;
- int32u DataBitrate, Flags;
- int16u StreamNumber, LanguageID, StreamNameCount, PayloadExtensionSystemCount;
- Info_L8(StartTime, "Start Time"); Param_Info_From_Milliseconds(StartTime);
- Info_L8(EndTime, "End Time"); Param_Info_From_Milliseconds(EndTime);
- Get_L4 (DataBitrate, "Data Bitrate");
- Skip_L4( "Buffer Size");
- Skip_L4( "Initial Buffer Fullness");
- Skip_L4( "Alternate Data Bitrate");
- Skip_L4( "Alternate Buffer Size");
- Skip_L4( "Alternate Initial Buffer Fullness");
- Skip_L4( "Maximum Object Size");
- Get_L4 (Flags, "Flags");
- Skip_Flags(Flags, 0, "Reliable");
- Skip_Flags(Flags, 1, "Seekable");
- Skip_Flags(Flags, 2, "No Cleanpoints");
- Skip_Flags(Flags, 3, "Resend Live Cleanpoints");
- Get_L2 (StreamNumber, "Stream Number"); Element_Info1(StreamNumber);
- Get_L2 (LanguageID, "Stream Language ID Index");
- Get_L8 (AverageTimePerFrame, "Average Time Per Frame");
- Get_L2 (StreamNameCount, "Stream Name Count");
- Get_L2 (PayloadExtensionSystemCount, "Payload Extension System Count");
- for (int16u Pos=0; Pos<StreamNameCount; Pos++)
- {
- Element_Begin1("Stream Name");
- int16u StreamNameLength;
- Skip_L2( "Language ID Index");
- Get_L2 (StreamNameLength, "Stream Name Length");
- Skip_UTF16L(StreamNameLength, "Stream Name");
- Element_End0();
- }
- for (int16u Pos=0; Pos<PayloadExtensionSystemCount; Pos++)
- {
- Element_Begin1("Payload Extension System");
- stream::payload_extension_system Payload_Extension_System;
- int32u ExtensionSystemInfoLength;
- Get_GUID(Payload_Extension_System.ID, "Extension System ID");
- Get_L2 (Payload_Extension_System.Size, "Extension Data Size");
- Get_L4 (ExtensionSystemInfoLength, "Extension System Info Length");
- if (ExtensionSystemInfoLength>0)
- Skip_XX(ExtensionSystemInfoLength, "Extension System Info");
- Element_End0();
-
- //Filling
- Stream[StreamNumber].Payload_Extension_Systems.push_back(Payload_Extension_System);
- }
-
- //Header_StreamProperties
- if (Element_Offset<Element_Size)
- {
- //This could be everything, but in theory this is only Header_StreamProperties
- int128u Name;
- int64u Size;
- Element_Begin1("Stream Properties Object");
- Element_Begin1("Header");
- Get_GUID(Name, "Name");
- Get_L8 (Size, "Size");
- Element_End0();
- if (Size>=24 && Element_Offset+Size-24==Element_Size)
- {
- switch (Name.hi)
- {
- case Elements::Header_StreamProperties : Header_StreamProperties(); break;
- default : Skip_XX(Size-24, "Unknown");
- }
- }
- else
- Skip_XX(Element_Size-Element_Offset, "Problem");
- Element_End0();
- }
-
- //Filling
- Stream[StreamNumber].LanguageID=LanguageID;
- Stream[StreamNumber].AverageBitRate=DataBitrate;
- Stream[StreamNumber].AverageTimePerFrame=AverageTimePerFrame;
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_AdvancedMutualExclusion()
-{
- Element_Name("Advanced Mutual Exclusion");
-
- //Parsing
- int16u Count;
- Info_GUID(ExclusionType, "Exclusion Type"); Param_Info1(Wm_ExclusionType(ExclusionType));
- Get_L2 (Count, "Stream Numbers Count");
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Info_L2(StreamNumber, "Stream Number"); Element_Info1(StreamNumber);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_GroupMutualExclusion()
-{
- Element_Name("Group Mutual Exclusion");
-
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_StreamPrioritization()
-{
- Element_Name("Stream Prioritization");
-
- //Parsing
- int16u Count;
- Get_L2 (Count, "Stream Numbers Count");
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- int16u Flags;
- Element_Begin1("Stream");
- Info_L2(StreamNumber, "Stream Number"); Element_Info1(StreamNumber);
- Get_L2 (Flags, "Flags");
- Skip_Flags(Flags, 0, "Mandatory");
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_BandwidthSharing()
-{
- Element_Name("Bandwidth Sharing");
-
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_LanguageList()
-{
- Element_Name("Language List");
-
- //Parsing
- Ztring LanguageID;
- int16u Count;
- int8u LanguageID_Length;
- Get_L2 (Count, "Count");
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Language ID");
- Get_L1 (LanguageID_Length, "Language ID Length");
- if (LanguageID_Length>0)
- {
- Get_UTF16L(LanguageID_Length, LanguageID, "Language ID");
- Element_Info1(LanguageID);
- }
- Element_End0();
-
- //Filling
- Languages.push_back(LanguageID);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_MetadataLibrary()
-{
- Element_Name("Metadata Library");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_Metadata()
-{
- Element_Name("Metadata");
-
- //Parsing
- float32 AspectRatioX=0, AspectRatioY=0;
- int16u Count;
- Get_L2 (Count, "Description Records Count");
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Description Record");
- Ztring Name, Data;
- int64u Data_Int64=0;
- int32u Data_Length;
- int16u StreamNumber, Name_Length, Data_Type;
- Skip_L2( "Reserved");
- Get_L2 (StreamNumber, "Stream Number");
- Get_L2 (Name_Length, "Name Length");
- Get_L2 (Data_Type, "Data Type");
- Get_L4 (Data_Length, "Data Length");
- Get_UTF16L(Name_Length, Name, "Name Length");
- switch (Data_Type)
- {
- case 0x00 : Get_UTF16L(Data_Length, Data, "Data"); break;
- case 0x01 : Skip_XX(Data_Length, "Data"); Data=__T("(Binary)"); break;
- case 0x02 : {int16u Data_Int; Get_L2 (Data_Int, "Data"); Data=(Data_Int==0)?__T("No"):__T("Yes"); Data_Int64=Data_Int;} break;
- case 0x03 : {int32u Data_Int; Get_L4 (Data_Int, "Data"); Data.From_Number(Data_Int); Data_Int64=Data_Int;} break;
- case 0x04 : {int64u Data_Int; Get_L8 (Data_Int, "Data"); Data.From_Number(Data_Int); Data_Int64=Data_Int;} break;
- case 0x05 : {int16u Data_Int; Get_L2 (Data_Int, "Data"); Data.From_Number(Data_Int); Data_Int64=Data_Int;} break;
- default : Skip_XX(Data_Length, "Data"); Data=__T("(Unknown)"); break;
- }
- Element_Info1(Name);
- Element_Info1(Data);
- Element_End0();
-
- if (Name==__T("IsVBR"))
- Stream[StreamNumber].Info["BitRate_Mode"]=(Data_Int64==0)?"CBR":"VBR";
- else if (Name==__T("AspectRatioX"))
- {
- AspectRatioX=Data.To_float32();
- if (AspectRatioX && AspectRatioY)
- Stream[StreamNumber].Info["PixelAspectRatio"].From_Number(AspectRatioX/AspectRatioY, 3);
- }
- else if (Name==__T("AspectRatioY"))
- {
- AspectRatioY=Data.To_float32();
- if (AspectRatioX && AspectRatioY)
- Stream[StreamNumber].Info["PixelAspectRatio"].From_Number(AspectRatioX/AspectRatioY, 3);
- }
- else if (Name==__T("DeviceConformanceTemplate"))
- {
- if (Data!=__T("@") && Data.find(__T('@'))!=std::string::npos)
- Stream[StreamNumber].Info["Format_Profile"]=Data;
- }
- else if (Name==__T("WM/WMADRCPeakReference")) {}
- else if (Name==__T("WM/WMADRCAverageReference")) {}
- else if (Name==__T("WM/WMADRCAverageTarget")) {}
- else if (Name==__T("WM/WMADRCPeakTarget")) {}
- else
- Stream[StreamNumber].Info[Name.To_Local()]=Data;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_IndexParameters()
-{
- Element_Name("Index Parameters");
-
- //Parsing
- int16u Count;
- Skip_L4( "Index Entry Time Interval");
- Get_L2 (Count, "Index Specifiers Count");
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Index Specifier");
- int16u IndexType;
- Skip_L2( "Stream Number");
- Get_L2 (IndexType, "Index Type");
- Element_Info1(IndexType);
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_MediaIndexParameters()
-{
- Element_Name("MediaIndex Parameters");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_TimecodeIndexParameters()
-{
- Element_Name("Timecode Index Parameters");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_Compatibility()
-{
- Element_Name("Compatibility");
-
- //Parsing
- Skip_L1( "Profile");
- Skip_L1( "Mode");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_AdvancedContentEncryption()
-{
- Element_Name("Advanced Content Encryption");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_HeaderExtension_IndexPlaceholder()
-{
- Element_Name("Index Placeholder");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_CodecList()
-{
- Element_Name("Codec List");
-
- //Parsing
- Ztring CodecName, CodecDescription;
- int32u Count32;
- int16u Count, Type, CodecNameLength, CodecDescriptionLength, CodecInformationLength;
- Skip_GUID( "Reserved");
- Get_L4 (Count32, "Codec Entries Count");
- Count=(int16u)Count32;
- CodecInfos.resize(Count);
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Codec Entry");
- Get_L2 (Type, "Type"); Param_Info1(Wm_CodecList_Kind(Type));
- Get_L2 (CodecNameLength, "Codec Name Length");
- Get_UTF16L(CodecNameLength*2, CodecName, "Codec Name");
- Get_L2 (CodecDescriptionLength, "Codec Description Length");
- Get_UTF16L(CodecDescriptionLength*2, CodecDescription, "Codec Description");
- Get_L2 (CodecInformationLength, "Codec Information Length");
- if (Type==2 && CodecInformationLength==2) //Audio and 2CC
- Skip_L2( "2CC"); //Not used, we have it elsewhere
- else if (Type==1 && CodecInformationLength==4) //Video and 4CC
- Skip_C4( "4CC"); //Not used, we have it elsewhere
- else
- Skip_XX(CodecInformationLength, "Codec Information");
- Element_End0();
-
- FILLING_BEGIN();
- CodecInfos[Pos].Type=Type;
- CodecInfos[Pos].Info=CodecName;
- if (!CodecDescription.empty())
- {
- CodecInfos[Pos].Info+=__T(" - ");
- CodecInfos[Pos].Info+=CodecDescription;
- }
-
- Codec_Description_Count++;
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_ScriptCommand()
-{
- Element_Name("Script Command");
-
- //Parsing
- Skip_GUID( "Reserved");
- int16u Commands_Count, CommandTypes_Count;
- Get_L2 (Commands_Count, "Commands Count");
- Get_L2 (CommandTypes_Count, "Command Types Count");
- for (int16u Pos=0; Pos<CommandTypes_Count; Pos++)
- {
- Element_Begin1("Command Type");
- int16u Length;
- Get_L2 (Length, "Command Type Length");
- if (Length>0)
- Skip_UTF16L(Length*2, "Command Type");
- Element_End0();
- }
- for (int16u Pos=0; Pos<Commands_Count; Pos++)
- {
- Element_Begin1("Command");
- int16u Length;
- Skip_L2( "Type Index");
- Get_L2 (Length, "Command Length");
- if (Length>0)
- Skip_UTF16L(Length*2, "Command");
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_Marker()
-{
- Element_Name("Markers");
-
- //Parsing
- Skip_GUID( "Reserved");
- int32u Markers_Count;
- int16u Name_Length;
- Get_L4 (Markers_Count, "Markers Count");
- Skip_L2( "Reserved");
- Get_L2 (Name_Length, "Name Length");
- if (Name_Length>0)
- Skip_UTF16L(Name_Length, "Name");
-
- //Filling
- if (Markers_Count>0)
- Stream_Prepare(Stream_Menu);
-
- //Parsing
- for (int32u Pos=0; Pos<Markers_Count; Pos++)
- {
- Element_Begin1("Marker");
- Ztring Marker;
- int32u Marker_Length;
- Skip_L8( "Offset");
- Info_L8(PresentationTime, "Presentation Time"); Param_Info_From_Milliseconds(PresentationTime/10000);
- Skip_L2( "Entry Length");
- Info_L4(SendTime, "Send Time"); Param_Info_From_Milliseconds(SendTime);
- Skip_L4( "Flags");
- Get_L4 (Marker_Length, "Marker Description Length");
- if (Marker_Length>0)
- Get_UTF16L(Marker_Length*2, Marker, "Marker Description");
- Element_End0();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_BitRateMutualExclusion()
-{
- Element_Name("BitRate Mutual Exclusion");
-
- //Parsing
- int16u Count;
- Skip_GUID( "Exclusion Type");
- Get_L2 (Count, "Stream Numbers Count");
- for (int16u Pos=0; Pos<Count; Pos++)
- Skip_L2( "Stream Number");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_ErrorCorrection()
-{
- Element_Name("Error Correction");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_ContentDescription()
-{
- Element_Name("Content Description");
-
- //Parsing
- Ztring Title, Author, Copyright, Description, Rating;
- int16u TitleLength, AuthorLength, CopyrightLength, DescriptionLength, RatingLength;
- Get_L2 (TitleLength, "TitleLength");
- Get_L2 (AuthorLength, "AuthorLength");
- Get_L2 (CopyrightLength, "CopyrightLength");
- Get_L2 (DescriptionLength, "DescriptionLength");
- Get_L2 (RatingLength, "RatingLength");
- if (TitleLength>0)
- Get_UTF16L(TitleLength, Title, "Title");
- if (AuthorLength>0)
- Get_UTF16L(AuthorLength, Author, "Author");
- if (CopyrightLength>0)
- Get_UTF16L(CopyrightLength, Copyright, "Copyright");
- if (DescriptionLength>0)
- Get_UTF16L(DescriptionLength, Description, "Description");
- if (RatingLength>0)
- Get_UTF16L(RatingLength, Rating, "Rating");
-
- //Filling
- Fill(Stream_General, 0, General_Title, Title);
- Fill(Stream_General, 0, General_Performer, Author);
- Fill(Stream_General, 0, General_Copyright, Copyright);
- Fill(Stream_General, 0, General_Comment, Description);
- Fill(Stream_General, 0, General_Rating, Rating);
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_ExtendedContentDescription()
-{
- Element_Name("Extended Content Description");
-
- //Parsing
- int16u Count;
- Get_L2 (Count, "Content Descriptors Count");
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Content Descriptor");
- Ztring Name, Value;
- int64u Value_Int64=0;
- int16u Name_Length, Value_Type, Value_Length;
- Get_L2 (Name_Length, "Name Length");
- Get_UTF16L(Name_Length, Name, "Name");
- Get_L2 (Value_Type, "Value Data Type");
- Get_L2 (Value_Length, "Value Length");
- switch (Value_Type)
- {
- case 0x00 : Get_UTF16L(Value_Length, Value, "Value"); break;
- case 0x01 :
- if (Name==__T("ASFLeakyBucketPairs")) Header_ExtendedContentDescription_ASFLeakyBucketPairs(Value_Length);
- else {Skip_XX(Value_Length, "Value"); Value=__T("(Binary)");} break;
- case 0x02 : {int32u Value_Int; Get_L4 (Value_Int, "Value"); Value=(Value_Int==0)?__T("No"):__T("Yes"); Value_Int64=Value_Int;} break;
- case 0x03 : {int32u Value_Int; Get_L4 (Value_Int, "Value"); Value.From_Number(Value_Int); Value_Int64=Value_Int;} break;
- case 0x04 : {int64u Value_Int; Get_L8 (Value_Int, "Value"); Value.From_Number(Value_Int); Value_Int64=Value_Int;} break;
- case 0x05 : {int16u Value_Int; Get_L2 (Value_Int, "Value"); Value.From_Number(Value_Int); Value_Int64=Value_Int;} break;
- default : Skip_XX(Value_Length, "Value"); Value=__T("(Unknown)"); break;
- }
- Element_Info1(Name);
- Element_Info1(Value);
- Element_End0();
-
- //Filling
- if (!Value.empty())
- {
- if (Name==__T("Agility FPS")) {}
- else if (Name==__T("ASFLeakyBucketPairs")) {} //Already done elsewhere
- else if (Name==__T("AspectRatioX")) Header_ExtendedContentDescription_AspectRatioX=Value_Int64;
- else if (Name==__T("AspectRatioY")) Header_ExtendedContentDescription_AspectRatioY=Value_Int64;
- else if (Name==__T("Buffer Average")) {}
- else if (Name==__T("DVR Index Granularity")) {}
- else if (Name==__T("DVR File Version")) {}
- else if (Name==__T("IsVBR"))
- Fill(Stream_General, 0, General_OverallBitRate_Mode, Value_Int64==0?"CBR":"VBR");
- else if (Name==__T("VBR Peak")) {} //Already in "Stream Bitrate" chunk
- else if (Name==__T("WMFSDKVersion")) {}
- else if (Name==__T("WMFSDKNeeded")) {}
- else if (Name==__T("WM/AlbumTitle"))
- Fill(Stream_General, 0, General_Album, Value);
- else if (Name==__T("WM/AlbumArtist"))
- {
- Fill(Stream_General, 0, General_Performer, "");
- Fill(Stream_General, 0, General_Performer, Value, true); //Clear last value, like Author (Content Description)
- }
- else if (Name==__T("WM/ArtistSortOrder"))
- Fill(Stream_General, 0, General_Performer_Sort, Value);
- else if (Name==__T("WM/AuthorURL"))
- Fill(Stream_General, 0, "Author/Url", Value);
- else if (Name==__T("WM/BeatsPerMinute"))
- Fill(Stream_General, 0, General_BPM, Value);
- else if (Name==__T("WM/Binary"))
- Fill(Stream_General, 0, General_Cover, "Y");
- else if (Name==__T("WM/Comments"))
- Fill(Stream_General, 0, General_Comment, Value, true); //Clear last value
- else if (Name==__T("WM/Composer"))
- Fill(Stream_General, 0, General_Composer, Value);
- else if (Name==__T("WM/Conductor"))
- Fill(Stream_General, 0, General_Conductor, Value);
- else if (Name==__T("WM/EncodedBy"))
- Fill(Stream_General, 0, General_EncodedBy, Value);
- else if (Name==__T("WM/EncoderSettings"))
- Fill(Stream_General, 0, General_Encoded_Library_Settings, Value);
- else if (Name==__T("WM/EncodingTime"))
- Fill(Stream_General, 0, General_Encoded_Date, Ztring().Date_From_Seconds_1601(Value_Int64));
- else if (Name==__T("WM/Genre"))
- Fill(Stream_General, 0, General_Genre, Value, true); //Clear last value
- else if (Name==__T("WM/GenreID"))
- {
- if (Retrieve(Stream_General, 0, General_Genre).empty())
- Fill(Stream_General, 0, General_Genre, Value);
- }
- else if (Name==__T("WM/Language"))
- Language_ForAll=Value;
- else if (Name==__T("WM/MediaCredits"))
- Fill(Stream_General, 0, General_ThanksTo, Value);
- else if (Name==__T("WM/MediaPrimaryClassID")) {}
- else if (Name==__T("WM/MCDI")) {}
- else if (Name==__T("WM/ModifiedBy"))
- Fill(Stream_General, 0, General_RemixedBy, Value);
- else if (Name==__T("WM/OriginalAlbumTitle"))
- Fill(Stream_General, 0, "Original/Album", Value);
- else if (Name==__T("WM/OriginalReleaseTime"))
- Fill(Stream_General, 0, "Original/Released_Date", Value);
- else if (Name==__T("WM/ParentalRating"))
- Fill(Stream_General, 0, General_LawRating, Value);
- else if (Name==__T("WM/ParentalRatingReason"))
- Fill(Stream_General, 0, General_LawRating_Reason, Value);
- else if (Name==__T("WM/Picture"))
- Fill(Stream_General, 0, General_Cover, "Y");
- else if (Name==__T("WM/Provider"))
- Fill(Stream_General, 0, "Provider", Value);
- else if (Name==__T("WM/Publisher"))
- Fill(Stream_General, 0, General_Publisher, Value);
- else if (Name==__T("WM/RadioStationName"))
- Fill(Stream_General, 0, General_ServiceName, Value);
- else if (Name==__T("WM/RadioStationOwner"))
- Fill(Stream_General, 0, General_ServiceProvider, Value);
- else if (Name==__T("WM/SubTitle"))
- Fill(Stream_General, 0, General_Title_More, Value);
- else if (Name==__T("WM/SubTitleDescription"))
- Fill(Stream_General, 0, General_Title_More, Value);
- else if (Name==__T("WM/ToolName"))
- Fill(Stream_General, 0, General_Encoded_Application, Value);
- else if (Name==__T("WM/ToolVersion"))
- Fill(Stream_General, 0, General_Encoded_Application, Retrieve(Stream_General, 0, General_Encoded_Application)+__T(" ")+Value, true);
- else if (Name==__T("WM/TrackNumber"))
- Fill(Stream_General, 0, General_Track_Position, Value, true); //Clear last value, like WM/Track
- else if (Name==__T("WM/Track"))
- {
- if (Retrieve(Stream_General, 0, General_Track_Position).empty())
- Fill(Stream_General, 0, General_Track_Position, Value.To_int32u()+1);
- }
- else if (Name==__T("WM/UniqueFileIdentifier"))
- {
- if (Value.empty() || Value[0]!=__T(';')) //Test if there is only the separator
- {
- Value.FindAndReplace(__T(";"), MediaInfoLib::Config.TagSeparator_Get());
- Fill(Stream_General, 0, General_UniqueID, Value);
- }
- }
- else if (Name==__T("WM/Writer"))
- Fill(Stream_General, 0, General_WrittenBy, Value);
- else if (Name==__T("WM/Year"))
- Fill(Stream_General, 0, General_Recorded_Date, Value);
- else
- Fill(Stream_General, 0, Name.To_Local().c_str(), Value);
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_ExtendedContentDescription_ASFLeakyBucketPairs(int16u Value_Length)
-{
- Element_Begin1("ASFLeakyBucketPairs");
- Skip_L2( "Reserved");
- for (int16u Pos=2; Pos<Value_Length; Pos+=8)
- {
- Element_Begin1("Bucket");
- Skip_L4( "BitRate");
- Skip_L4( "msBufferWindow");
- Element_End0();
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_StreamBitRate()
-{
- Element_Name("Stream Bitrate");
-
- //Parsing
- int16u Count;
- Get_L2 (Count, "Count");
- for (int16u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Stream");
- int32u AverageBitRate;
- int16u StreamNumber;
- Get_L2 (StreamNumber, "Stream Number"); Element_Info1(StreamNumber);
- Get_L4 (AverageBitRate, "Average Bitrate"); Element_Info1(AverageBitRate);
- Element_End0();
-
- //Filling
- if (Stream[StreamNumber].AverageBitRate==0) //Prefere Average bitrate of Extended Stream Properties if present
- Stream[StreamNumber].AverageBitRate=AverageBitRate;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_ContentBranding()
-{
- Element_Name("Content Branding");
-
- //Parsing
- Ztring CopyrightURL, BannerImageURL;
- int32u BannerImageData_Type, BannerImageData_Length, BannerImageURL_Length, CopyrightURL_Length;
- Get_L4 (BannerImageData_Type, "Banner Image Data Type"); Param_Info1(Wm_BannerImageData_Type(BannerImageData_Type));
- Get_L4 (BannerImageData_Length, "Banner Image Data Length");
- if (BannerImageData_Length>0)
- Skip_XX(BannerImageData_Length, "Banner Image Data");
- Get_L4 (BannerImageURL_Length, "Banner Image URL Length");
- if (BannerImageURL_Length>0)
- Get_Local(BannerImageURL_Length, BannerImageURL, "Banner Image URL");
- Get_L4 (CopyrightURL_Length, "Copyright URL Length");
- if (CopyrightURL_Length>0)
- Get_Local(CopyrightURL_Length, CopyrightURL, "Copyright URL");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_ContentEncryption()
-{
- Element_Name("Content Encryption");
-
- //Parsing
- Ztring LicenseURL;
- int32u SecretDataLength, ProtectionTypeLength, KeyIDLength, LicenseURLLength;
- Get_L4 (SecretDataLength, "Secret Data Length");
- Skip_XX(SecretDataLength, "Secret Data");
- Get_L4 (ProtectionTypeLength, "Protection Type Length");
- Skip_Local(ProtectionTypeLength, "Protection Type");
- Get_L4 (KeyIDLength, "Key ID Length");
- Skip_Local(KeyIDLength, "Key ID Type");
- Get_L4 (LicenseURLLength, "License URL Length");
- Get_Local(LicenseURLLength, LicenseURL, "License URL");
-
- //Filling
- Fill(Stream_General, 0, "Encryption", LicenseURL);
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_ExtendedContentEncryption()
-{
- Element_Name("Extended Content Encryption");
-
- //Parsing
- int32u DataLength;
- Get_L4 (DataLength, "Data Length");
- Skip_XX(DataLength, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_DigitalSignature()
-{
- Element_Name("Digital Signature");
-
- //Parsing
- int32u DataLength;
- Skip_L4( "Signature Type");
- Get_L4 (DataLength, "Signature Data Length");
- Skip_XX(DataLength, "Signature Data");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Header_Padding()
-{
- Element_Name("Padding");
-
- //Parsing
- Skip_XX(Element_Size, "Padding");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Data()
-{
- Element_Name("Data");
-
- //Parsing
- Skip_GUID( "File ID");
- Skip_L8( "Total Data Packets");
- Skip_L1( "Alignment");
- Skip_L1( "Packet Alignment");
-
- //Filling
- Fill(Stream_General, 0, General_HeaderSize, File_Offset+Buffer_Offset-24);
- Fill(Stream_General, 0, General_DataSize, Element_TotalSize_Get()+24);
-
- //For each stream
- Streams_Count=0;
- std::map<int16u, stream>::iterator Temp=Stream.begin();
- while (Temp!=Stream.end())
- {
- #if defined(MEDIAINFO_MPEGA_YES)
- if (IsDvrMs && !Temp->second.Parser && Temp->second.AverageBitRate>=32768)
- {
- Temp->second.Parser=new File_Mpega; //No stream properties, trying to detect it in datas...
- ((File_Mpega*)Temp->second.Parser)->Frame_Count_Valid=8;
- Open_Buffer_Init(Temp->second.Parser);
- }
- #endif
- if (Temp->second.Parser || Temp->second.StreamKind==Stream_Video) //We need Stream_Video for Frame_Rate computing
- {
- Temp->second.SearchingPayload=true;
- Streams_Count++;
- }
- ++Temp;
- }
-
- //Enabling the alternative parser
- MustUseAlternativeParser=true;
- Data_AfterTheDataChunk=File_Offset+Buffer_Offset+Element_TotalSize_Get();
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Data_Packet()
-{
- //Counting
- Packet_Count++;
- Element_Info1(Packet_Count);
- size_t Element_Show_Count=0;
-
- //Parsing
- int32u PacketLength=0, SizeOfMediaObject=0;
- int8u Flags, ErrorCorrectionData_Length, ErrorCorrectionLengthType, SequenceType, PaddingLengthType, PacketLengthType;
- bool ErrorCorrectionPresent;
- Element_Begin1("Error Correction");
- Get_L1 (Flags, "Flags");
- Get_FlagsM(Flags&0x0F, ErrorCorrectionData_Length, "Error Correction Data Length"); //4 lowest bits
- Skip_Flags(Flags, 4, "Opaque Data Present");
- Get_FlagsM((Flags>>5)&0x03, ErrorCorrectionLengthType, "Error Correction Length Type"); //bits 6 and 7
- Get_Flags (Flags, 7, ErrorCorrectionPresent, "Error Correction Present");
- if (ErrorCorrectionPresent && ErrorCorrectionLengthType==0 && ErrorCorrectionData_Length==2)
- {
- int8u TypeNumber;
- Get_L1 (TypeNumber, "Type/Number");
- Skip_FlagsM((TypeNumber>>4)&0x0F, "Type");
- Skip_FlagsM( TypeNumber &0x0F, "Number");
- Skip_L1( "Cycle");
- }
- Element_End0();
-
- Element_Begin1("Payload Parsing Information");
- Get_L1 (Flags, "Length Type Flags");
- Get_Flags (Flags, 0, MultiplePayloadsPresent, "Multiple Payloads Present");
- Get_FlagsM((Flags>>1)&0x3, SequenceType, "Sequence Type");
- Get_FlagsM((Flags>>3)&0x3, PaddingLengthType, "Padding Length Type");
- Get_FlagsM((Flags>>5)&0x3, PacketLengthType, "Packet Length Type");
- Skip_Flags(Flags, 7, "Error Correction Present");
- Get_L1 (Flags, "Property Flags");
- Get_FlagsM( Flags &0x3, ReplicatedDataLengthType, "Replicated Data Length Type");
- Get_FlagsM((Flags>>2)&0x3, OffsetIntoMediaObjectLengthType, "Offset Into Media Object Length Type");
- Get_FlagsM((Flags>>4)&0x3, MediaObjectNumberLengthType, "Media Object Number Length Type");
- Get_FlagsM((Flags>>6)&0x3, StreamNumberLengthType, "Stream Number Length Type");
- switch (PacketLengthType)
- {
- case 1 : {int8u Data; Get_L1(Data, "Packet Length"); PacketLength=Data;} break;
- case 2 : {int16u Data; Get_L2(Data, "Packet Length"); PacketLength=Data;} break;
- case 3 : Get_L4(PacketLength, "Packet Length"); break;
- default: ;
- }
- switch (SequenceType)
- {
- case 1 : Skip_L1( "Sequence"); break;
- case 2 : Skip_L2( "Sequence"); break;
- case 3 : Skip_L4( "Sequence"); break;
- default: ;
- }
- switch (PaddingLengthType)
- {
- case 1 : {int8u Data; Get_L1(Data, "Padding Length"); Data_Parse_Padding=Data;} break;
- case 2 : {int16u Data; Get_L2(Data, "Padding Length"); Data_Parse_Padding=Data;} break;
- case 3 : Get_L4(Data_Parse_Padding, "Padding Length"); break;
- default: Data_Parse_Padding=0;
- }
- Skip_L4( "Send Time");
- Skip_L2( "Duration");
- Element_End0();
-
- if (MultiplePayloadsPresent)
- {
- //Parsing
- Element_Begin1("Multiple Payloads additional flags");
- int8u AdditionalFlags;
- Get_L1 (AdditionalFlags, "Flags");
- Get_FlagsM( AdditionalFlags &0x3F, NumberPayloads, "Number of Payloads"); //6 bits
- Get_FlagsM((AdditionalFlags>>6)&0x03, PayloadLengthType, "Payload Length Type"); //bits 6 and 7
- Element_End0();
- }
- else
- {
- SizeOfMediaObject=(int32u)(Element_Size-Element_Offset-Data_Parse_Padding);
- NumberPayloads=1;
- }
-
- for (NumberPayloads_Pos=0; NumberPayloads_Pos<NumberPayloads; NumberPayloads_Pos++)
- {
- Element_Begin1("Payload");
- int32u ReplicatedDataLength=0, PayloadLength=0;
- int8u StreamNumber;
- Get_L1 (StreamNumber, "Stream Number");
- Stream_Number=StreamNumber&0x7F; //For KeyFrame
- Element_Info1(Stream_Number);
- switch (MediaObjectNumberLengthType)
- {
- case 1 : Skip_L1( "Media Object Number"); break;
- case 2 : Skip_L2( "Media Object Number"); break;
- case 3 : Skip_L4( "Media Object Number"); break;
- default: Trusted_IsNot("Media Object Number"); return; //Problem
- }
- switch (OffsetIntoMediaObjectLengthType)
- {
- case 1 : Skip_L1( "Offset Into Media Object"); break;
- case 2 : Skip_L2( "Offset Into Media Object"); break;
- case 3 : Skip_L4( "Offset Into Media Object"); break;
- default: Trusted_IsNot("Offset Into Media Object"); return; //Problem
- }
- switch (ReplicatedDataLengthType)
- {
- case 1 : {int8u Data; Get_L1(Data, "Replicated Data Length"); ReplicatedDataLength=Data;} break;
- case 2 : {int16u Data; Get_L2(Data, "Replicated Data Length"); ReplicatedDataLength=Data;} break;
- case 3 : Get_L4(ReplicatedDataLength, "Replicated Data Length"); break;
- default: Trusted_IsNot("Replicated Data Length"); return; //Problem
- }
- if (ReplicatedDataLengthType!=0 && ReplicatedDataLength>0)
- {
- if (ReplicatedDataLength>=8)
- {
- int32u PresentationTime;
- Get_L4 (SizeOfMediaObject, "Size Of Media Object");
- Get_L4 (PresentationTime, "Presentation Time");
- if (ReplicatedDataLength>8)
- Data_Packet_ReplicatedData(ReplicatedDataLength-8);
-
- //Presentation time delta
- std::map<int16u, stream>::iterator Strea=Stream.find(Stream_Number);
- if (Strea!=Stream.end() && Strea->second.StreamKind==Stream_Video)
- {
- if (Strea->second.PresentationTime_Old==0)
- Strea->second.PresentationTime_Old=FileProperties_Preroll;
- if (PresentationTime!=Strea->second.PresentationTime_Old)
- {
- Strea->second.PresentationTime_Deltas[PresentationTime-Strea->second.PresentationTime_Old]++;
- Strea->second.PresentationTime_Old=PresentationTime;
- Strea->second.PresentationTime_Count++;
- }
- }
- }
- else if (ReplicatedDataLength==1)
- {
- Skip_L1( "Presentation Time Delta");
- //TODO
- }
- else
- {
- Skip_XX(ReplicatedDataLength, "Replicated Data");
- }
- }
-
- if (MultiplePayloadsPresent)
- {
- switch (PayloadLengthType)
- {
- case 1 : {int8u Data; Get_L1(Data, "Payload Length"); PayloadLength=Data;} break;
- case 2 : {int16u Data; Get_L2(Data, "Payload Length"); PayloadLength=Data;} break;
- case 3 : Get_L4(PayloadLength, "Payload Length"); break;
- default: Trusted_IsNot("Payload Length"); return; //Problem
- }
- }
- else if (Element_Size-Element_Offset>Data_Parse_Padding)
- PayloadLength=(int32u)(Element_Size-(Element_Offset+Data_Parse_Padding));
- else
- {
- Trusted_IsNot("Padding size problem");
- return; //Problem
- }
- if (Element_Offset+PayloadLength+Data_Parse_Padding>Element_Size)
- {
- Trusted_IsNot("Payload Length problem");
- return; //problem
- }
-
- //Demux
- Element_Code=Stream_Number;
- Demux(Buffer+(size_t)Element_Offset, (size_t)PayloadLength, ContentType_MainStream);
-
- //Analyzing
- if (Stream[Stream_Number].Parser && Stream[Stream_Number].SearchingPayload)
- {
- //Handling of spanned on multiple chunks
- #if defined(MEDIAINFO_VC1_YES)
- bool FrameIsAlwaysComplete=true;
- #endif
- if (PayloadLength!=SizeOfMediaObject)
- {
- if (SizeOfMediaObject_BytesAlreadyParsed==0)
- SizeOfMediaObject_BytesAlreadyParsed=SizeOfMediaObject-PayloadLength;
- else
- SizeOfMediaObject_BytesAlreadyParsed-=PayloadLength;
- if (SizeOfMediaObject_BytesAlreadyParsed==0)
- Element_Show_Count++;
- #if defined(MEDIAINFO_VC1_YES)
- else
- FrameIsAlwaysComplete=false;
- #endif
- }
- else
- Element_Show_Count++;
-
- //Codec specific
- #if defined(MEDIAINFO_VC1_YES)
- if (Retrieve(Stream[Stream_Number].StreamKind, Stream[Stream_Number].StreamPos, Fill_Parameter(Stream[Stream_Number].StreamKind, Generic_Format))==__T("VC-1"))
- ((File_Vc1*)Stream[Stream_Number].Parser)->FrameIsAlwaysComplete=FrameIsAlwaysComplete;
- #endif
-
- Open_Buffer_Continue(Stream[Stream_Number].Parser, (size_t)PayloadLength);
- if (Stream[Stream_Number].Parser->Status[IsFinished]
- || (Stream[Stream_Number].PresentationTime_Count>=300 && MediaInfoLib::Config.ParseSpeed_Get()<1))
- {
- Stream[Stream_Number].Parser->Open_Buffer_Unsynch();
- Stream[Stream_Number].SearchingPayload=false;
- Streams_Count--;
- }
-
- Element_Show();
- }
- else
- {
- Skip_XX(PayloadLength, "Data");
- if (Stream[Stream_Number].SearchingPayload
- && (Stream[Stream_Number].StreamKind==Stream_Video && Stream[Stream_Number].PresentationTime_Count>=300))
- {
- Stream[Stream_Number].SearchingPayload=false;
- Streams_Count--;
- }
- }
- Element_End0();
- }
-
- if (Data_Parse_Padding)
- Skip_XX(Data_Parse_Padding, "Padding");
-
- //Jumping if needed
- if (Streams_Count==0 || (Packet_Count>=1000 && MediaInfoLib::Config.ParseSpeed_Get()<1))
- {
- Info("Data, Jumping to end of chunk");
- GoTo(Data_AfterTheDataChunk, "Windows Media");
- }
-
- if (Element_Show_Count>0)
- Element_Show();
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Data_Packet_ReplicatedData(int32u Size)
-{
- Element_Begin1("Replicated Data");
- int64u Element_Offset_Final=Element_Offset+Size;
- for (size_t Pos=0; Pos<Stream[Stream_Number].Payload_Extension_Systems.size(); Pos++)
- {
- Element_Begin0();
- switch (Stream[Stream_Number].Payload_Extension_Systems[Pos].ID.hi)
- {
- case Elements::Payload_Extension_System_TimeStamp : Data_Packet_ReplicatedData_TimeStamp(); break;
- default : //Not enough info to validate this algorithm
- //if (Stream[Stream_Number].Payload_Extension_Systems[Pos].Size!=(int16u)-1)
- //{
- // Element_Name("Unknown");
- // Skip_XX(Stream[Stream_Number].Payload_Extension_Systems[Pos].Size, "Unknown");
- //}
- //else
- Pos=Stream[Stream_Number].Payload_Extension_Systems.size(); //Disabling the rest, all is unknown
- }
- Element_End0();
- }
-
- if (Element_Offset<Element_Offset_Final)
- {
- Element_Begin1("Other chunks");
- Skip_XX(Element_Offset_Final-Element_Offset, "Unknown");
- Element_End0();
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Data_Packet_ReplicatedData_TimeStamp()
-{
- Element_Name("TimeStamp");
-
- //Parsing
- int64u TS0;
- Skip_L2( "Unknown");
- Skip_L4( "Unknown");
- Skip_L4( "Unknown");
- Get_L8 (TS0, "TS0");
- #if MEDIAINFO_TRACE
- if (TS0!=(int64u)-1) Param_Info1(TS0/10000);
- #endif //MEDIAINFO_TRACE
- Info_L8(TS1, "TS1");
- #if MEDIAINFO_TRACE
- if (TS1!=(int64u)-1) Param_Info1(TS1/10000);
- #endif //MEDIAINFO_TRACE
- Skip_L4( "Unknown");
- Skip_L4( "Unknown");
- Skip_L4( "Unknown");
- Skip_L4( "Unknown");
-
- if (Stream[Stream_Number].TimeCode_First==(int64u)-1 && TS0!=(int64u)-1)
- Stream[Stream_Number].TimeCode_First=TS0/10000;
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::SimpleIndex()
-{
- Element_Name("Simple Index");
-
- //Parsing
- /*
- int32u Count;
- Skip_GUID( "File ID");
- Skip_L8( "Index Entry Time Interval");
- Skip_L4( "Maximum Packet Count");
- Get_L4 (Count, "Index Entries Count");
- for (int32u Pos=0; Pos<Count; Pos++)
- {
- Element_Begin1("Index Entry", 6);
- int32u PacketNumber;
- int16u PacketCount;
- Get_L4 (PacketNumber, "Packet Number");
- Get_L2 (PacketCount, "Packet Count");
- Element_End0();
- }
- */
- Skip_XX(Element_TotalSize_Get()-Element_Offset, "Indexes");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::Index()
-{
- Element_Name("Index");
-
- //Parsing
- /*
- int32u Blocks_Count;
- int16u Specifiers_Count;
- Skip_L4( "Index Entry Time Interval");
- Get_L2 (Specifiers_Count, "Index Specifiers Count");
- Get_L4 (Blocks_Count, "Index Blocks Count");
- for (int16u Pos=0; Pos<Specifiers_Count; Pos++)
- {
- Element_Begin1("Specifier");
- Skip_L2( "Stream Number");
- Skip_L2( "Index Type");
- Element_End0();
- }
- for (int32u Pos=0; Pos<Blocks_Count; Pos++)
- {
- Element_Begin1("Block");
- int32u Entry_Count;
- Get_L4 (Entry_Count, "Index Entry Count");
- Element_Begin1("Block Positions");
- for (int16u Pos=0; Pos<Specifiers_Count; Pos++)
- Skip_L4( "Position");
- Element_End0();
- for (int32u Pos=0; Pos<Entry_Count; Pos++)
- {
- Element_Begin1("Entry");
- for (int16u Pos=0; Pos<Specifiers_Count; Pos++)
- Skip_L4( "Offset");
- Element_End0();
- }
- Element_End0();
- }
- */
- Skip_XX(Element_TotalSize_Get()-Element_Offset, "Indexes");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::MediaIndex()
-{
- Element_Name("MediaIndex");
-}
-
-//---------------------------------------------------------------------------
-void File_Wm::TimecodeIndex()
-{
- Element_Name("TimecodeIndex");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_WM_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Xdcam_Clip.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Xdcam_Clip.cpp
deleted file mode 100644
index dc8f05ed2..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Xdcam_Clip.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_XDCAM_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Xdcam_Clip.h"
-#include "MediaInfo/MediaInfo.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/File.h"
-#include "ZenLib/FileName.h"
-#include "tinyxml2.h"
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Xdcam_Clip::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- {
- XMLElement* Root=document.FirstChildElement("NonRealTimeMeta");
- if (Root)
- {
- Accept("Xdcam_Clip");
- Fill(Stream_General, 0, General_Format, "XDCAM Clip");
-
- XMLElement* Element;
-
- //CreationDate
- Element=Root->FirstChildElement("CreationDate");
- if (Element)
- Fill(Stream_General, 0, General_Recorded_Date, Element->Attribute("value"));
-
- //LastUpdate
- Element=Root->FirstChildElement("LastUpdate");
- if (Element)
- Fill(Stream_General, 0, General_Tagged_Date, Element->Attribute("value"));
-
- //Duration
- Ztring Duration, EditUnit;
- Element=Root->FirstChildElement("Duration");
- if (Element)
- Duration=Element->Attribute("value");
- Element=Root->FirstChildElement("LtcChangeTable");
- if (Element)
- EditUnit=Element->Attribute("tcFps");
- int64u Duration_Frames=Duration.To_int64u();
- int64u EditUnit_Denominator=EditUnit.To_int64u();
- if (Duration_Frames && EditUnit_Denominator)
- Fill(Stream_General, 0, General_Duration, ((float32)Duration_Frames)*1000/EditUnit_Denominator, 0);
-
- int64u File_Size_Total=File_Size;
-
- #if defined(MEDIAINFO_MXF_YES)
- if (File_Name.size()>12
- && File_Name[File_Name.size()-7]==__T('M')
- && File_Name[File_Name.size()-6]==__T('0')
- && File_Name[File_Name.size()-5]==__T('1')
- && File_Name[File_Name.size()-4]==__T('.')
- && File_Name[File_Name.size()-3]==__T('X')
- && File_Name[File_Name.size()-2]==__T('M')
- && File_Name[File_Name.size()-1]==__T('L'))
- {
- Ztring file=File_Name.substr(File_Name.size()-12, 5);
- Ztring MXF_File=File_Name;
- MXF_File.resize(MXF_File.size()-12);
- MXF_File+=file;
- if (File::Exists(MXF_File+__T(".MXF")))
- MXF_File+=__T(".MXF");
- if (File::Exists(MXF_File+__T(".MP4")))
- MXF_File+=__T(".MP4");
-
- //int8u ReadByHuman=Ztring(MediaInfo::Option_Static(__T("ReadByHuman_Get"))).To_int8u();
- //MediaInfo::Option_Static(__T("ReadByHuman"), __T("0"));
- MediaInfo_Internal MI;
- if (MI.Open(MXF_File))
- {
- //MediaInfo::Option_Static(__T("ReadByHuman"), ReadByHuman?__T("1"):__T("0"));
- Merge(MI);
- Fill(Stream_Video, StreamPos_Last, "Source", MXF_File);
- File_Size_Total+=Ztring(MI.Get(Stream_General, 0, General_FileSize)).To_int64u();
-
- //Commercial names
- Fill(Stream_General, 0, General_Format_Commercial_IfAny, MI.Get(Stream_General, 0, General_Format_Commercial_IfAny));
- Ztring Format_Commercial=MI.Get(Stream_General, 0, General_Format_Commercial_IfAny);
- if (!Format_Commercial.empty())
- {
- Format_Commercial.FindAndReplace(__T("XDCAM "), Ztring());
- Fill(Stream_General, 0, General_Format_Commercial, __T("XDCAM Clip ")+Format_Commercial, true);
- }
- }
- //else
- // MediaInfo::Option_Static(__T("ReadByHuman"), ReadByHuman?__T("1"):__T("0"));
- }
- #endif //defined(MEDIAINFO_MXF_YES)
-
- //Device
- Element=Root->FirstChildElement("Device");
- if (Element)
- {
- const char* manufacturer=Element->Attribute("manufacturer");
- if (manufacturer)
- {
- string manufacturer_modelName(manufacturer);
- const char* modelName=Element->Attribute("modelName");
- if (modelName)
- {
- manufacturer_modelName+=' ';
- manufacturer_modelName+=modelName;
- }
- Fill(Stream_General, 0, General_Encoded_Application, manufacturer_modelName, true, true);
- }
- }
-
- if (File_Size_Total!=File_Size)
- Fill(Stream_General, 0, General_FileSize, File_Size_Total, 10, true);
- }
- else
- {
- Reject("Xdcam_Clip");
- return false;
- }
- }
-
- Element_Offset=File_Size;
-
- //All should be OK...
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_XDCAM_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Xdcam_Clip.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Xdcam_Clip.h
deleted file mode 100644
index fc0d8babf..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File_Xdcam_Clip.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about XDCAM Clip Movie files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Xdcam_ClipH
-#define MediaInfo_File_Xdcam_ClipH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Xdcam_Clip
-//***************************************************************************
-
-class File_Xdcam_Clip : public File__Analyze
-{
-private :
- //Buffer - File header
- bool FileHeader_Begin();
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.cpp b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.cpp
deleted file mode 100644
index af8fbad49..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.cpp
+++ /dev/null
@@ -1,1826 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_REFERENCES_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File__ReferenceFilesHelper.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include "ZenLib/Dir.h"
-#include "ZenLib/File.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/Format/Http/Http_Utils.h"
-#include <set>
-#include <algorithm>
-#include <cfloat>
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events_Internal.h"
- #include "MediaInfo/MediaInfo_Config_PerPackage.h"
-#endif //MEDIAINFO_EVENTS
-#if MEDIAINFO_AES
- #include "base64.h"
-#endif //MEDIAINFO_AES
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File__ReferenceFilesHelper::File__ReferenceFilesHelper(File__Analyze* MI_, MediaInfo_Config_MediaInfo* Config_)
-{
- //Temp
- MI=MI_;
- Config=Config_;
- Reference=References.end();
- Init_Done=false;
- TestContinuousFileNames=false;
- FilesForStorage=false;
- ContainerHasNoId=false;
- HasMainFile=false;
- HasMainFile_Filled=false;
- ID_Max=0;
- FrameRate=0;
- Duration=0;
- #if MEDIAINFO_NEXTPACKET
- DTS_Interval=(int64u)-1;
- #endif //MEDIAINFO_NEXTPACKET
- #if MEDIAINFO_EVENTS
- StreamID_Previous=(int64u)-1;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Offset_Video_DTS=0;
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-File__ReferenceFilesHelper::~File__ReferenceFilesHelper()
-{
- for (references::iterator ReferenceTemp=References.begin(); ReferenceTemp!=References.end(); ++ReferenceTemp)
- delete ReferenceTemp->MI; //ReferenceTemp->MI=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__ReferenceFilesHelper_Algo1 (const File__ReferenceFilesHelper::reference &Ref1, const File__ReferenceFilesHelper::reference &Ref2) { return (Ref1.StreamID<Ref2.StreamID);}
-bool File__ReferenceFilesHelper_Algo2 (const File__ReferenceFilesHelper::reference &Ref1, const File__ReferenceFilesHelper::reference &Ref2) { return (Ref1.StreamPos<Ref2.StreamPos);}
-bool File__ReferenceFilesHelper_Algo3 (const File__ReferenceFilesHelper::reference &Ref1, const File__ReferenceFilesHelper::reference &Ref2) { return (Ref1.StreamKind<Ref2.StreamKind);}
-void File__ReferenceFilesHelper_InfoFromFileName (File__ReferenceFilesHelper::references &References)
-{
- ZtringListList List;
- vector<File__ReferenceFilesHelper::references::iterator> Iterators;
-
- for (File__ReferenceFilesHelper::references::iterator Reference=References.begin(); Reference<References.end(); ++Reference)
- {
- ZtringList List2;
- List2.Separator_Set(0, __T(" "));
- if ((*Reference).StreamKind==Stream_Audio && !(*Reference).FileNames.empty())
- {
- Ztring Name=(*Reference).FileNames[0];
- while (Name.FindAndReplace(__T("51 "), Ztring()));
- while (Name.FindAndReplace(__T("_"), __T(" ")));
- while (Name.FindAndReplace(__T("."), __T(" ")));
- while (Name.FindAndReplace(__T(" "), __T(" ")));
- size_t PathSeparator_Pos=Name.rfind(PathSeparator);
- if (PathSeparator_Pos!=(size_t)-1)
- Name.erase(0, PathSeparator_Pos+1);
-
- //Removing extension
- if (Name.size()>4 && Name.rfind(__T('.'))==Name.size())
- Name.resize(Name.size()-4);
-
- List2.Write(Name);
- for (size_t Pos=0; Pos<List2.size(); Pos++)
- List2[Pos].MakeLowerCase();
- List.push_back(List2);
- Iterators.push_back(Reference);
- }
- }
-
- if (List.size()<2)
- return;
-
- size_t ChannelLayout_Pos=(size_t)-1;
- size_t Language_Pos=(size_t)-1;
- for (size_t Pos2=0; Pos2<List[0].size(); Pos2++)
- {
- bool IsChannelLayout=true;
- bool IsLanguage=true;
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (Pos2>=List[Pos].size())
- break; //Maybe begin of title
- const Ztring &Test=List[Pos][List[Pos].size()-1-Pos2];
-
- //ChannelLayout
- if (ChannelLayout_Pos==(size_t)-1
- && Test!=__T("l")
- && Test!=__T("r")
- && Test!=__T("lt")
- && Test!=__T("rt")
- && Test!=__T("c")
- && Test!=__T("lf")
- && Test!=__T("lfe")
- && Test!=__T("sub")
- && Test!=__T("ls")
- && Test!=__T("rs")
- && Test!=__T("b")
- && Test!=__T("mono"))
- IsChannelLayout=false;
-
- //Language
- if (Language_Pos==(size_t)-1
- && Test!=__T("ara")
- && Test!=__T("deu")
- && Test!=__T("eng")
- && Test!=__T("fra")
- && Test!=__T("fre")
- && Test!=__T("ita")
- && Test!=__T("jpn")
- && Test!=__T("rus")
- && Test!=__T("spa"))
- IsLanguage=false;
- }
-
- if (IsChannelLayout && ChannelLayout_Pos==(size_t)-1)
- ChannelLayout_Pos=Pos2;
- if (IsLanguage && Language_Pos==(size_t)-1)
- Language_Pos=Pos2;
- if (ChannelLayout_Pos!=(size_t)-1 && Language_Pos!=(size_t)-1)
- break;
- }
-
- //ChannelLayout
- if (ChannelLayout_Pos!=(size_t)-1)
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- Ztring ChannelPositions, ChannelPositions2, ChannelLayout;
- if (List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("l"))
- {
- ChannelPositions=__T("Front: L");
- ChannelPositions2=__T("1/0/0");
- ChannelLayout=__T("L");
- }
- if (List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("lt"))
- {
- ChannelPositions=__T("Front: Lt");
- ChannelPositions2=__T("1/0/0");
- ChannelLayout=__T("Lt");
- }
- if (List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("rt"))
- {
- ChannelPositions=__T("Front: Rt");
- ChannelPositions2=__T("1/0/0");
- ChannelLayout=__T("Rt");
- }
- if (List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("r"))
- {
- ChannelPositions=__T("Front: R");
- ChannelPositions2=__T("1/0/0");
- ChannelLayout=__T("R");
- }
- if (List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("c") || List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("mono"))
- {
- ChannelPositions=__T("Front: C");
- ChannelPositions2=__T("1/0/0");
- ChannelLayout=__T("C");
- }
- if (List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("lf") || List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("lfe") || List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("sub"))
- {
- ChannelPositions=__T("LFE");
- ChannelPositions2=__T(".1");
- ChannelLayout=__T("LFE");
- }
- if (List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("ls"))
- {
- ChannelPositions=__T("Side: L");
- ChannelPositions2=__T("0/1/0");
- ChannelLayout=__T("Ls");
- }
- if (List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("rs"))
- {
- ChannelPositions=__T("Side: R");
- ChannelPositions2=__T("0/1/0");
- ChannelLayout=__T("Rs");
- }
- if (List[Pos][List[Pos].size()-1-ChannelLayout_Pos]==__T("b"))
- {
- ChannelPositions=__T("Back: C");
- ChannelPositions2=__T("0/0/1");
- ChannelLayout=__T("Cs");
- }
-
- (*Iterators[Pos]).Infos["ChannelPositions"]=ChannelPositions;
- (*Iterators[Pos]).Infos["ChannelPositions/String2"]=ChannelPositions2;
- (*Iterators[Pos]).Infos["ChannelLayout"]=ChannelLayout;
- }
-
- //Language
- if (Language_Pos!=(size_t)-1)
- for (size_t Pos=0; Pos<List.size(); Pos++)
- if (1+Language_Pos<List[Pos].size())
- {
- Ztring Language;
- if (List[Pos][List[Pos].size()-1-Language_Pos]==__T("ara"))
- Language=__T("ar");
- if (List[Pos][List[Pos].size()-1-Language_Pos]==__T("deu"))
- Language=__T("de");
- if (List[Pos][List[Pos].size()-1-Language_Pos]==__T("eng"))
- Language=__T("en");
- if (List[Pos][List[Pos].size()-1-Language_Pos]==__T("fra") || List[Pos][List[Pos].size()-1-Language_Pos]==__T("fre"))
- Language=__T("fr");
- if (List[Pos][List[Pos].size()-1-Language_Pos]==__T("ita"))
- Language=__T("it");
- if (List[Pos][List[Pos].size()-1-Language_Pos]==__T("jpn"))
- Language=__T("ja");
- if (List[Pos][List[Pos].size()-1-Language_Pos]==__T("rus"))
- Language=__T("ru");
- if (List[Pos][List[Pos].size()-1-Language_Pos]==__T("spa"))
- Language=__T("es");
-
- if (!Language.empty())
- (*Iterators[Pos]).Infos["Language"]=Language;
- }
-}
-void File__ReferenceFilesHelper::ParseReferences()
-{
- if (!Init_Done)
- {
- #if MEDIAINFO_FILTER
- if (MI->Config->File_Filter_Audio_Get())
- {
- for (size_t Pos=0; Pos<References.size(); Pos++)
- if (References[Pos].StreamKind!=Stream_Audio)
- {
- References.erase(References.begin()+Pos);
- Pos--;
- }
- CountOfReferencesToParse=References.size();
- }
- #endif //MEDIAINFO_FILTER
-
- //Filling Filenames from the more complete version and Edit rates
- float64 EditRate=DBL_MAX;
- size_t EditRate_Count=0;
- for (Reference=References.begin(); Reference!=References.end(); Reference++)
- if (Reference->FileNames.empty())
- for (size_t Pos=0; Pos<Reference->CompleteDuration.size(); Pos++)
- {
- Reference->FileNames.push_back(Reference->CompleteDuration[Pos].FileName);
- if (Reference->CompleteDuration[Pos].IgnoreFramesRate && EditRate!=Reference->CompleteDuration[Pos].IgnoreFramesRate)
- {
- if (EditRate>Reference->CompleteDuration[Pos].IgnoreFramesRate)
- EditRate=Reference->CompleteDuration[Pos].IgnoreFramesRate;
- EditRate_Count++;
- }
- }
- if (EditRate_Count>1)
- //Multiple rates, using only one rate
- for (Reference=References.begin(); Reference!=References.end(); Reference++)
- for (size_t Pos=0; Pos<Reference->CompleteDuration.size(); Pos++)
- if (Reference->CompleteDuration[Pos].IgnoreFramesRate && EditRate!=Reference->CompleteDuration[Pos].IgnoreFramesRate)
- {
- if (Reference->CompleteDuration[Pos].IgnoreFramesBefore)
- {
- float64 Temp=(float64)Reference->CompleteDuration[Pos].IgnoreFramesBefore;
- Temp/=Reference->CompleteDuration[Pos].IgnoreFramesRate;
- Temp*=EditRate;
- Reference->CompleteDuration[Pos].IgnoreFramesBefore=float64_int64s(Temp);
- }
- if (Reference->CompleteDuration[Pos].IgnoreFramesAfter!=(int64u)-1)
- {
- float64 Temp=(float64)Reference->CompleteDuration[Pos].IgnoreFramesAfter;
- Temp/=Reference->CompleteDuration[Pos].IgnoreFramesRate;
- Temp*=EditRate;
- Reference->CompleteDuration[Pos].IgnoreFramesAfter=float64_int64s(Temp);
- }
- if (Reference->CompleteDuration[Pos].IgnoreFramesAfterDuration!=(int64u)-1)
- {
- float64 Temp=(float64)Reference->CompleteDuration[Pos].IgnoreFramesAfterDuration;
- Temp/=Reference->CompleteDuration[Pos].IgnoreFramesRate;
- Temp*=EditRate;
- Reference->CompleteDuration[Pos].IgnoreFramesAfterDuration=float64_int64s(Temp);
- }
- Reference->CompleteDuration[Pos].IgnoreFramesRate=EditRate;
- }
-
- //Testing IDs
- std::set<int64u> StreamList;
- bool StreamList_DuplicatedIds=false;
- for (Reference=References.begin(); Reference<References.end(); ++Reference)
- if (StreamList.find((*Reference).StreamID)==StreamList.end())
- StreamList.insert((*Reference).StreamID);
- else
- {
- StreamList_DuplicatedIds=true;
- break;
- }
- if (StreamList_DuplicatedIds)
- for (Reference=References.begin(); Reference<References.end(); ++Reference)
- (*Reference).StreamID=Reference-References.begin()+1;
- if (References.size()==1 && References.begin()->StreamID==(int64u)-1)
- {
- ContainerHasNoId=true;
- #if MEDIAINFO_EVENTS
- MI->StreamIDs_Width[MI->StreamIDs_Size-1]=0;
- #endif //MEDIAINFO_EVENTS
- }
- std::sort(References.begin(), References.end(), File__ReferenceFilesHelper_Algo1);
- std::sort(References.begin(), References.end(), File__ReferenceFilesHelper_Algo2);
- std::sort(References.begin(), References.end(), File__ReferenceFilesHelper_Algo3);
-
- //InfoFromFileName
- File__ReferenceFilesHelper_InfoFromFileName(References);
-
- #if MEDIAINFO_EVENTS
- if (MI->Config->Config_PerPackage==NULL)
- {
- MI->Config->Config_PerPackage=new MediaInfo_Config_PerPackage;
- MI->Config->Config_PerPackage->CountOfPackages=References.size();
- }
- #endif //MEDIAINFO_EVENTS
-
- //Configuring file names
- Reference=References.begin();
- while (Reference!=References.end())
- {
- ZtringList Names=Reference->FileNames;
- ZtringList AbsoluteNames; AbsoluteNames.Separator_Set(0, ",");
- for (size_t Pos=0; Pos<Names.size(); Pos++)
- {
- if (Names[Pos].find(__T("file:///"))==0)
- {
- Names[Pos].erase(0, 8); //Removing "file:///", this is the default behaviour and this makes comparison easier
- Names[Pos]=ZenLib::Format::Http::URL_Encoded_Decode(Names[Pos]);
- }
- if (Names[Pos].find(__T("file://"))==0)
- {
- Names[Pos].erase(0, 7); //Removing "file://", this is the default behaviour and this makes comparison easier
- Names[Pos]=ZenLib::Format::Http::URL_Encoded_Decode(Names[Pos]);
- }
- if (Names[Pos].find(__T("file:"))==0)
- {
- Names[Pos].erase(0, 5); //Removing "file:", this is the default behaviour and this makes comparison easier
- Names[Pos]=ZenLib::Format::Http::URL_Encoded_Decode(Names[Pos]);
- }
- Ztring AbsoluteName;
- if (Names[Pos].find(__T(':'))!=1 && Names[Pos].find(__T("/"))!=0 && Names[Pos].find(__T("\\\\"))!=0) //If absolute patch
- {
- if (MI->File_Name.find(__T("://"))==string::npos)
- AbsoluteName=ZenLib::FileName::Path_Get(MI->File_Name);
- else
- {
- size_t Pos_Path=MI->File_Name.find_last_of('/');
- if (Pos_Path!=Ztring::npos)
- AbsoluteName=MI->File_Name.substr(0, Pos_Path);
- }
- if (!AbsoluteName.empty())
- AbsoluteName+=ZenLib::PathSeparator;
- }
- AbsoluteName+=Names[Pos];
- #ifdef __WINDOWS__
- if (AbsoluteName.find(__T("://"))==string::npos)
- AbsoluteName.FindAndReplace(__T("/"), __T("\\"), 0, Ztring_Recursive); //Names[Pos] normalization local file
- else
- AbsoluteName.FindAndReplace(__T("\\"), __T("/"), 0, Ztring_Recursive); //Names[Pos] normalization with protocol (so "/" in all cases)
- #endif //__WINDOWS__
- AbsoluteNames.push_back(AbsoluteName);
- }
- if (AbsoluteNames.empty() || !(AbsoluteNames[0].find(__T("://"))!=string::npos || File::Exists(AbsoluteNames[0])))
- {
- AbsoluteNames.clear();
-
- //Configuring file name (this time, we try to force URL decode in all cases)
- for (size_t Pos=0; Pos<Names.size(); Pos++)
- {
- Names[Pos]=ZenLib::Format::Http::URL_Encoded_Decode(Names[Pos]);
- Ztring AbsoluteName;
- if (Names[Pos].find(__T(':'))!=1 && Names[Pos].find(__T("/"))!=0 && Names[Pos].find(__T("\\\\"))!=0) //If absolute patch
- {
- if (MI->File_Name.find(__T("://"))==string::npos)
- AbsoluteName=ZenLib::FileName::Path_Get(MI->File_Name);
- else
- {
- size_t Pos_Path=MI->File_Name.find_last_of('/');
- if (Pos_Path!=Ztring::npos)
- AbsoluteName=MI->File_Name.substr(0, Pos_Path);
- }
- if (!AbsoluteName.empty())
- AbsoluteName+=ZenLib::PathSeparator;
- }
- AbsoluteName+=Names[Pos];
- #ifdef __WINDOWS__
- AbsoluteName.FindAndReplace(__T("/"), __T("\\"), 0, Ztring_Recursive); //Names[Pos] normalization
- #endif //__WINDOWS__
- AbsoluteNames.push_back(AbsoluteName);
- }
-
- if (AbsoluteNames.empty() || !File::Exists(AbsoluteNames[0]))
- {
- AbsoluteNames.clear();
- Names=Reference->FileNames;
-
- //Configuring file name (this time, we try to test local files)
- size_t PathSeparator_Pos=Names.empty()?string::npos:Names[0].find_last_of(__T("\\/"));
- if (PathSeparator_Pos!=string::npos && PathSeparator_Pos)
- {
- Ztring PathToRemove=Names[0].substr(0, PathSeparator_Pos);
- bool IsOk=true;
- for (size_t Pos=0; Pos<Names.size(); Pos++)
- if (Names[Pos].find(PathToRemove))
- {
- IsOk=false;
- break;
- }
- if (IsOk)
- {
- for (size_t Pos=0; Pos<Names.size(); Pos++)
- {
- Names[Pos].erase(0, PathSeparator_Pos+1);
- Ztring AbsoluteName;
- if (MI->File_Name.find(__T("://"))==string::npos)
- AbsoluteName=ZenLib::FileName::Path_Get(MI->File_Name);
- else
- {
- size_t Pos_Path=MI->File_Name.find_last_of('/');
- if (Pos_Path!=Ztring::npos)
- AbsoluteName=MI->File_Name.substr(0, Pos_Path);
- }
- if (!AbsoluteName.empty())
- AbsoluteName+=ZenLib::PathSeparator;
- AbsoluteName+=Names[Pos];
- #ifdef __WINDOWS__
- if (AbsoluteName.find(__T("://"))==string::npos)
- AbsoluteName.FindAndReplace(__T("/"), __T("\\"), 0, Ztring_Recursive); //Names[Pos] normalization local file
- else
- AbsoluteName.FindAndReplace(__T("\\"), __T("/"), 0, Ztring_Recursive); //Names[Pos] normalization with protocol (so "/" in all cases)
- #endif //__WINDOWS__
- AbsoluteNames.push_back(AbsoluteName);
- }
-
- if (!File::Exists(AbsoluteNames[0]))
- {
- AbsoluteNames.clear();
- Names=Reference->FileNames;
-
- //Configuring file name (this time, we try to test local files)
- size_t PathSeparator_Pos=Names[0].find_last_of(__T("\\/"));
- if (PathSeparator_Pos!=string::npos && PathSeparator_Pos)
- PathSeparator_Pos=Names[0].find_last_of(__T("\\/"), PathSeparator_Pos-1);
- if (PathSeparator_Pos!=string::npos && PathSeparator_Pos)
- {
- Ztring PathToRemove=Names[0].substr(0, PathSeparator_Pos);
- bool IsOk=true;
- for (size_t Pos=0; Pos<Names.size(); Pos++)
- if (Names[Pos].find(PathToRemove))
- {
- IsOk=false;
- break;
- }
- if (IsOk)
- for (size_t Pos=0; Pos<Names.size(); Pos++)
- {
- Names[Pos].erase(0, PathSeparator_Pos+1);
- Ztring AbsoluteName;
- if (MI->File_Name.find(__T("://"))==string::npos)
- AbsoluteName=ZenLib::FileName::Path_Get(MI->File_Name);
- else
- {
- size_t Pos_Path=MI->File_Name.find_last_of('/');
- if (Pos_Path!=Ztring::npos)
- AbsoluteName=MI->File_Name.substr(0, Pos_Path);
- }
- if (!AbsoluteName.empty())
- AbsoluteName+=ZenLib::PathSeparator;
- AbsoluteName+=Names[Pos];
- #ifdef __WINDOWS__
- AbsoluteName.FindAndReplace(__T("/"), __T("\\"), 0, Ztring_Recursive); //Names[Pos] normalization
- #endif //__WINDOWS__
- AbsoluteNames.push_back(AbsoluteName);
- }
- }
-
- if (!AbsoluteNames.empty() && !File::Exists(AbsoluteNames[0]))
- AbsoluteNames.clear();
- }
- }
- }
- }
- }
- Reference->Source=Reference->FileNames.Read(0);
- if (Reference->StreamKind!=Stream_Max && !Reference->Source.empty())
- {
- if (Reference->StreamPos==(size_t)-1)
- Reference->StreamPos=Stream_Prepare(Reference->StreamKind);
- MI->Fill(Reference->StreamKind, Reference->StreamPos, "Source", Reference->Source);
- }
- if (!AbsoluteNames.empty())
- Reference->FileNames=AbsoluteNames;
-
- if (!AbsoluteNames.empty() && AbsoluteNames[0]==MI->File_Name)
- {
- Reference->IsCircular=true;
- Reference->FileNames.clear();
- Reference->Status.set(File__Analyze::IsFinished);
- }
- else if (!AbsoluteNames.empty())
- Reference->FileNames=AbsoluteNames;
- else
- {
- Reference->Status.set(File__Analyze::IsFinished);
- if (Reference->StreamKind!=Stream_Max && !Reference->Source.empty())
- {
- MI->Fill(Reference->StreamKind, Reference->StreamPos, "Source_Info", "Missing");
- if (MI->Retrieve(Reference->StreamKind, Reference->StreamPos, General_ID).empty() && Reference->StreamID!=(int64u)-1)
- MI->Fill(Reference->StreamKind, Reference->StreamPos, General_ID, Reference->StreamID);
- for (std::map<string, Ztring>::iterator Info=Reference->Infos.begin(); Info!=Reference->Infos.end(); ++Info)
- {
- if (Info->first=="CodecID")
- MI->CodecID_Fill(Info->second, Reference->StreamKind, Reference->StreamPos, InfoCodecID_Format_Mpeg4);
- else
- MI->Fill(Reference->StreamKind, Reference->StreamPos, Info->first.c_str(), Info->second);
- }
- }
- }
-
- if (FilesForStorage)
- {
- for (size_t Pos=0; Pos<Reference->FileNames.size(); Pos++)
- {
- if (Pos>=Reference->CompleteDuration.size())
- Reference->CompleteDuration.resize(Pos+1);
- Reference->CompleteDuration[Pos].FileName=Reference->FileNames[Pos];
- }
- Reference->FileNames.resize(1);
- }
-
- ++Reference;
- }
-
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- if (Config->NextPacket_Get())
- {
- Demux_Interleave=Config->File_Demux_Interleave_Get();
- if (Demux_Interleave)
- {
- CountOfReferencesToParse=References.size();
- for (references::iterator ReferenceSource=References.begin(); ReferenceSource!=References.end(); ++ReferenceSource)
- if (ReferenceSource->FileNames.empty())
- CountOfReferencesToParse--;
- DTS_Interval=3000000000LL; // 3 seconds
- }
- }
- else
- Demux_Interleave=false;
-
- //Using the frame rate from the first stream having a frame rate
- if (!FrameRate)
- for (references::iterator ReferenceFrameRate=References.begin(); ReferenceFrameRate!=References.end(); ++ReferenceFrameRate)
- if (ReferenceFrameRate->FrameRate)
- {
- FrameRate=ReferenceFrameRate->FrameRate;
- break;
- }
-
- if (Config->NextPacket_Get())
- {
- Reference=References.begin();
- while (Reference!=References.end())
- {
- ParseReference(); //Init
- Reference++;
- }
-
- //Cleanup
- for (size_t Pos=0; Pos<References.size(); Pos++)
- if (References[Pos].Status[File__Analyze::IsFinished])
- {
- References.erase(References.begin()+Pos);
- Pos--;
- }
- CountOfReferencesToParse=References.size();
- if (References.empty())
- return;
-
- //File size handling
- if (MI->Config->File_Size!=MI->File_Size)
- {
- MI->Fill(Stream_General, 0, General_FileSize, MI->Config->File_Size, 10, true);
- MI->Fill(Stream_General, 0, General_StreamSize, MI->File_Size, 10, true);
- }
-
- }
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
-
- FileSize_Compute();
- Reference=References.begin();
- CountOfReferences_ForReadSize=References.size();
- Init_Done=true;
-
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- if (Config->NextPacket_Get() && MI->Demux_EventWasSent_Accept_Specific)
- {
- MI->Config->Demux_EventWasSent=true;
- return;
- }
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- }
-
- while (Reference!=References.end())
- {
- #if MEDIAINFO_NEXTPACKET
- if (!Reference->Status[File__Analyze::IsFinished])
- #endif //MEDIAINFO_NEXTPACKET
- ParseReference();
-
- //State
- int64u FileSize_Parsed=0;
- #if MEDIAINFO_NEXTPACKET
- DTS_Minimal=(int64u)-1;
- #endif //MEDIAINFO_NEXTPACKET
- for (references::iterator ReferenceTemp=References.begin(); ReferenceTemp!=References.end(); ++ReferenceTemp)
- {
- if (ReferenceTemp->MI)
- {
- if (ReferenceTemp->State<10000)
- {
- if (ReferenceTemp->MI)
- ReferenceTemp->State=ReferenceTemp->MI->State_Get();
- if (ReferenceTemp->State && ReferenceTemp->MI->Config.File_Size!=(int64u)-1)
- FileSize_Parsed+=(int64u)(ReferenceTemp->MI->Config.File_Size*(((float)ReferenceTemp->State)/10000));
- }
- else
- FileSize_Parsed+=ReferenceTemp->MI->Config.File_Size;
-
- #if MEDIAINFO_NEXTPACKET
- //Minimal DTS
- if (DTS_Interval!=(int64u)-1 && !Reference->Status[File__Analyze::IsFinished] && ReferenceTemp->CompleteDuration_Pos<ReferenceTemp->CompleteDuration.size())
- {
- int64u DTS_Temp;
- if (ReferenceTemp->CompleteDuration_Pos)
- DTS_Temp=ReferenceTemp->CompleteDuration[ReferenceTemp->CompleteDuration_Pos].MI->Info->FrameInfo.DTS;
- else
- DTS_Temp=ReferenceTemp->MI->Info->FrameInfo.DTS;
- if (DTS_Minimal>DTS_Temp)
- DTS_Minimal=DTS_Temp;
- }
- #endif //MEDIAINFO_NEXTPACKET
- }
- else
- FileSize_Parsed+=ReferenceTemp->FileSize;
- }
- Config->State_Set(((float)FileSize_Parsed)/MI->Config->File_Size);
-
- #if MEDIAINFO_EVENTS
- struct MediaInfo_Event_General_SubFile_End_0 Event;
- MI->Event_Prepare((struct MediaInfo_Event_Generic*)&Event);
- Event.EventCode=MediaInfo_EventCode_Create(0, MediaInfo_Event_General_SubFile_End, 0);
- Event.EventSize=sizeof(struct MediaInfo_Event_General_SubFile_End_0);
-
- MI->Config->Event_Send(NULL, (const int8u*)&Event, Event.EventSize, MI->File_Name);
- #endif //MEDIAINFO_EVENTS
-
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- if (Demux_Interleave && (Reference->MI==NULL || Reference->MI->Info==NULL || Reference->MI->Info->Demux_CurrentParser==NULL || Reference->MI->Info->Demux_CurrentParser->Demux_TotalBytes>=Reference->MI->Info->Demux_CurrentParser->Buffer_TotalBytes+Reference->MI->Info->Demux_CurrentParser->Buffer_Size))
- {
- references::iterator Reference_Next=Reference; ++Reference_Next;
-
- if (Reference_Next==References.end() && Config->NextPacket_Get() && CountOfReferencesToParse)
- Reference=References.begin();
- else
- Reference=Reference_Next;
-
- if (Config->Demux_EventWasSent)
- return;
- }
- else
- {
- if (Config->Demux_EventWasSent)
- return;
-
- Reference++;
- }
- #else //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- ++Reference;
- #endif //MEDIAINFO_DEMUX
- }
-
- //File size handling
- FileSize_Compute();
- if (MI->Config->File_Size!=MI->File_Size
- #if MEDIAINFO_ADVANCED
- && !Config->File_IgnoreSequenceFileSize_Get()
- #endif //MEDIAINFO_ADVANCED
- )
- {
- MI->Fill(Stream_General, 0, General_FileSize, MI->Config->File_Size, 10, true);
- MI->Fill(Stream_General, 0, General_StreamSize, MI->File_Size, 10, true);
- }
- #if MEDIAINFO_ADVANCED
- if (Config->File_IgnoreSequenceFileSize_Get())
- MI->Clear(Stream_General, 0, General_FileSize);
- #endif //MEDIAINFO_ADVANCED
-}
-
-//---------------------------------------------------------------------------
-bool File__ReferenceFilesHelper::ParseReference_Init()
-{
- //Configuration
- Reference->MI=MI_Create();
- if (Config->ParseSpeed>=1)
- {
- for (size_t Pos=0; Pos<Reference->CompleteDuration.size(); Pos++)
- {
- MediaInfo_Internal MI2;
- MI2.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI2.Option(__T("ParseSpeed_Get"), __T("0"));
- Ztring Demux_Save=MI2.Option(__T("Demux_Get"), __T(""));
- MI2.Option(__T("ParseSpeed"), __T("0"));
- MI2.Option(__T("Demux"), Ztring());
- size_t MiOpenResult=MI2.Open(Reference->CompleteDuration[Pos].FileName);
- MI2.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI2.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (MiOpenResult)
- {
- #if MEDIAINFO_DEMUX
- int64u Duration=MI2.Get(Reference->StreamKind, 0, __T("Duration")).To_int64u()*1000000;
- int64u FrameCount=MI2.Get(Reference->StreamKind, 0, __T("FrameCount")).To_int64u();
- if (Pos==0)
- {
- int64u Delay=MI2.Get(Stream_Video, 0, Video_Delay).To_int64u()*1000000;
- if (Reference->StreamKind==Stream_Video && Offset_Video_DTS==0)
- Offset_Video_DTS=Delay;
- Reference->CompleteDuration[0].Demux_Offset_DTS=Offset_Video_DTS;
- Reference->CompleteDuration[0].Demux_Offset_Frame=0;
- }
- if (Pos+1<Reference->CompleteDuration.size())
- {
- Reference->CompleteDuration[Pos+1].Demux_Offset_DTS=Reference->CompleteDuration[Pos].Demux_Offset_DTS+Duration;
- Reference->CompleteDuration[Pos+1].Demux_Offset_Frame=Reference->CompleteDuration[Pos].Demux_Offset_Frame+FrameCount;
- }
- else
- Duration=Reference->CompleteDuration[Pos].Demux_Offset_DTS+Duration-Reference->CompleteDuration[0].Demux_Offset_DTS;
- #endif //MEDIAINFO_DEMUX
- }
-
- if (Pos)
- {
- Reference->CompleteDuration[Pos].MI=MI_Create();
- Reference->CompleteDuration[Pos].MI->Config.File_IgnoreFramesBefore=Reference->CompleteDuration[Pos].IgnoreFramesBefore;
- if (Reference->CompleteDuration[Pos].IgnoreFramesAfter==(int64u)-1 && Reference->CompleteDuration[Pos].IgnoreFramesAfterDuration!=(int64u)-1)
- Reference->CompleteDuration[Pos].MI->Config.File_IgnoreFramesAfter=Reference->CompleteDuration[Pos].IgnoreFramesBefore+Reference->CompleteDuration[Pos].IgnoreFramesAfterDuration;
- else
- Reference->CompleteDuration[Pos].MI->Config.File_IgnoreFramesAfter=Reference->CompleteDuration[Pos].IgnoreFramesAfter;
- Reference->CompleteDuration[Pos].MI->Config.File_IgnoreFramesRate=Reference->CompleteDuration[Pos].IgnoreFramesRate;
- #if MEDIAINFO_DEMUX
- Reference->CompleteDuration[Pos].MI->Config.Demux_Offset_Frame=Reference->CompleteDuration[Pos].Demux_Offset_Frame;
- Reference->CompleteDuration[Pos].MI->Config.Demux_Offset_DTS=Reference->CompleteDuration[Pos].Demux_Offset_DTS;
- #endif //MEDIAINFO_DEMUX
- }
- }
- if (!Reference->CompleteDuration.empty())
- {
- Reference->MI->Config.File_IgnoreFramesBefore=Reference->CompleteDuration[0].IgnoreFramesBefore;
- if (Reference->CompleteDuration[0].IgnoreFramesAfter==(int64u)-1 && Reference->CompleteDuration[0].IgnoreFramesAfterDuration!=(int64u)-1)
- Reference->MI->Config.File_IgnoreFramesAfter=Reference->CompleteDuration[0].IgnoreFramesBefore+Reference->CompleteDuration[0].IgnoreFramesAfterDuration;
- else
- Reference->MI->Config.File_IgnoreFramesAfter=Reference->CompleteDuration[0].IgnoreFramesAfter;
- Reference->MI->Config.File_IgnoreFramesRate=Reference->CompleteDuration[0].IgnoreFramesRate;
- #if MEDIAINFO_DEMUX
- Reference->MI->Config.Demux_Offset_Frame=Reference->CompleteDuration[0].Demux_Offset_Frame;
- Reference->MI->Config.Demux_Offset_DTS=Reference->CompleteDuration[0].Demux_Offset_DTS;
- #endif //MEDIAINFO_DEMUX
- }
- }
-
- if (Reference->IsCircular)
- {
- MI->Fill(Reference->StreamKind, Reference->StreamPos, "Source_Info", "Circular");
- if (!Config->File_KeepInfo_Get())
- {
- #if MEDIAINFO_DEMUX
- if (CountOfReferencesToParse)
- CountOfReferencesToParse--;
- #endif //MEDIAINFO_DEMUX
- Reference->StreamKind=Stream_Max;
- Reference->StreamPos=(size_t)-1;
- Reference->FileSize=Reference->MI->Config.File_Size;
- delete Reference->MI; Reference->MI=NULL;
- }
- Reference->FileNames.clear();
- Reference->Status.set(File__Analyze::IsFinished);
- }
- else
- {
- //Run
- #if MEDIAINFO_EVENTS
- SubFile_Start();
- #endif //MEDIAINFO_EVENTS
- if (!Reference->MI->Open(Reference->FileNames.Read()))
- {
- if (Reference->StreamKind!=Stream_Max)
- MI->Fill(Reference->StreamKind, Reference->StreamPos, "Source_Info", "Missing");
- if (!Config->File_KeepInfo_Get())
- {
- #if MEDIAINFO_DEMUX
- if (CountOfReferencesToParse)
- CountOfReferencesToParse--;
- #endif //MEDIAINFO_DEMUX
- Reference->StreamKind=Stream_Max;
- Reference->StreamPos=(size_t)-1;
- Reference->FileSize=Reference->MI->Config.File_Size;
- delete Reference->MI; Reference->MI=NULL;
- }
- Reference->Status.set(File__Analyze::IsFinished);
- }
-
- if (Config->ParseSpeed>=1)
- for (size_t Pos=1; Pos<Reference->CompleteDuration.size(); Pos++)
- Reference->CompleteDuration[Pos].MI->Open(Reference->CompleteDuration[Pos].FileName);
-
- #if MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
- if (Config->NextPacket_Get())
- return false;
- #endif //MEDIAINFO_NEXTPACKET
- }
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File__ReferenceFilesHelper::ParseReference()
-{
- if (Reference->MI==NULL && !Reference->FileNames.empty())
- {
- if (!ParseReference_Init())
- return;
- }
-
- if (Reference->MI)
- {
- #if MEDIAINFO_EVENTS && MEDIAINFO_NEXTPACKET
- if (DTS_Interval!=(int64u)-1 && !Reference->Status[File__Analyze::IsFinished] && Reference->MI->Info->FrameInfo.DTS!=(int64u)-1 && DTS_Minimal!=(int64u)-1 && Reference->CompleteDuration_Pos<Reference->CompleteDuration.size())
- {
- int64u DTS_Temp;
- if (Reference->CompleteDuration_Pos)
- DTS_Temp=Reference->CompleteDuration[Reference->CompleteDuration_Pos].MI->Info->FrameInfo.DTS;
- else
- DTS_Temp=Reference->MI->Info->FrameInfo.DTS;
- if (Reference->CompleteDuration_Pos<Reference->CompleteDuration.size() && Reference->CompleteDuration[Reference->CompleteDuration_Pos].IgnoreFramesRate && Reference->CompleteDuration[Reference->CompleteDuration_Pos].IgnoreFramesBefore)
- {
- int64u TimeOffset=float64_int64s(((float64)Reference->CompleteDuration[Reference->CompleteDuration_Pos].IgnoreFramesBefore)/Reference->CompleteDuration[Reference->CompleteDuration_Pos].IgnoreFramesRate*1000000000);
- if (DTS_Temp>TimeOffset)
- DTS_Temp-=TimeOffset;
- else
- DTS_Temp=0;
- }
- if (DTS_Temp>DTS_Minimal+DTS_Interval)
- return;
- }
- if (Config->Event_CallBackFunction_IsSet() && !Reference->Status[File__Analyze::IsFinished])
- {
- #if MEDIAINFO_DEMUX
- SubFile_Start();
- if (Reference->CompleteDuration_Pos==0)
- {
- while ((Reference->Status=Reference->MI->Open_NextPacket())[8])
- {
- if (!Reference->FileSize_IsPresent && Reference->MI->Config.File_Size!=(int64u)-1)
- {
- Reference->FileSize_IsPresent=true;
- if (CountOfReferences_ForReadSize)
- {
- CountOfReferences_ForReadSize--;
- if (!CountOfReferences_ForReadSize)
- CountOfReferences_ForReadSize_Run();
- }
- }
-
- if (Config->Event_CallBackFunction_IsSet())
- {
- Config->Demux_EventWasSent=true;
- return;
- }
- }
- Reference->CompleteDuration_Pos++;
- if (Reference->CompleteDuration_Pos<Reference->CompleteDuration.size() && Reference->CompleteDuration[Reference->CompleteDuration_Pos].MI)
- Reference->CompleteDuration[Reference->CompleteDuration_Pos].MI->Open_Buffer_Seek(0, 0, (int64u)-1);
- }
-
- #if MEDIAINFO_NEXTPACKET && MEDIAINFO_DEMUX
- if (Config->ParseSpeed<1.0)
- Reference->CompleteDuration_Pos=Reference->CompleteDuration.size(); //No need to parse all files
- #endif //MEDIAINFO_NEXTPACKET
-
- while (Reference->CompleteDuration_Pos<Reference->CompleteDuration.size())
- {
- while ((Reference->Status=Reference->CompleteDuration[Reference->CompleteDuration_Pos].MI->Open_NextPacket())[8])
- {
- if (!Reference->FileSize_IsPresent && Reference->MI->Config.File_Size!=(int64u)-1)
- {
- Reference->FileSize_IsPresent=true;
- if (CountOfReferences_ForReadSize)
- {
- CountOfReferences_ForReadSize--;
- if (!CountOfReferences_ForReadSize)
- CountOfReferences_ForReadSize_Run();
- }
- }
-
- if (Config->Event_CallBackFunction_IsSet())
- {
- Config->Demux_EventWasSent=true;
- return;
- }
- }
- Reference->CompleteDuration_Pos++;
- if (Reference->CompleteDuration_Pos<Reference->CompleteDuration.size() && Reference->CompleteDuration[Reference->CompleteDuration_Pos].MI)
- Reference->CompleteDuration[Reference->CompleteDuration_Pos].MI->Open_Buffer_Seek(0, 0, (int64u)-1);
- }
- if (CountOfReferencesToParse)
- CountOfReferencesToParse--;
- #endif //MEDIAINFO_DEMUX
- }
- #endif //MEDIAINFO_EVENTS && MEDIAINFO_NEXTPACKET
- ParseReference_Finalize();
- if (!Config->File_KeepInfo_Get())
- {
- Reference->StreamKind=Stream_Max;
- Reference->StreamPos=(size_t)-1;
- Reference->State=10000;
- if (Reference->CompleteDuration.empty())
- Reference->FileSize=Reference->MI->Config.File_Size;
- else if (Reference->FileSize==(int64u)-1)
- {
- Reference->FileSize=0;
- for (size_t Pos=0; Pos<Reference->CompleteDuration.size(); Pos++)
- Reference->FileSize+=File::Size_Get(Reference->CompleteDuration[Pos].FileName);
- }
- delete Reference->MI; Reference->MI=NULL;
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File__ReferenceFilesHelper::ParseReference_Finalize ()
-{
- //Removing wrong initial value
- if (Reference->MI->Count_Get(Reference->StreamKind)==0 && Reference->StreamPos!=(size_t)-1
- && Reference->MI->Count_Get(Stream_Video)+Reference->MI->Count_Get(Stream_Audio)+Reference->MI->Count_Get(Stream_Image)+Reference->MI->Count_Get(Stream_Text)+Reference->MI->Count_Get(Stream_Other))
- {
- MI->Stream_Erase(Reference->StreamKind, Reference->StreamPos);
- for (references::iterator ReferenceTemp=References.begin(); ReferenceTemp!=References.end(); ++ReferenceTemp)
- if (ReferenceTemp->StreamKind==Reference->StreamKind && ReferenceTemp->StreamPos!=(size_t)-1 && ReferenceTemp->StreamPos>Reference->StreamPos)
- ReferenceTemp->StreamPos--;
- Reference->StreamPos=(size_t)-1;
- }
-
- bool StreamFound=false;
- for (size_t StreamKind=Stream_General+1; StreamKind<Stream_Max; StreamKind++)
- for (size_t StreamPos=0; StreamPos<Reference->MI->Count_Get((stream_t)StreamKind); StreamPos++)
- {
- StreamKind_Last=(stream_t)StreamKind;
- if (Reference->StreamPos!=(size_t)-1 && StreamKind_Last==Reference->StreamKind && StreamPos==0)
- {
- StreamPos_To=Reference->StreamPos;
- StreamFound=true;
- }
- else
- {
- size_t ToInsert=(size_t)-1;
- for (references::iterator ReferencePos=References.begin(); ReferencePos!=References.end(); ++ReferencePos)
- if (ReferencePos->StreamKind==StreamKind_Last && Reference->StreamID<ReferencePos->StreamID)
- {
- ToInsert=ReferencePos->StreamPos;
- break;
- }
-
- StreamPos_To=Stream_Prepare((stream_t)StreamKind, ToInsert);
- }
- StreamPos_From=StreamPos;
-
- ParseReference_Finalize_PerStream();
- }
-
- if (!StreamFound && Reference->StreamKind!=Stream_Max && Reference->StreamPos!=(size_t)-1)
- {
- Ztring MuxingMode=MI->Retrieve(Reference->StreamKind, Reference->StreamPos, "MuxingMode");
- if (!MuxingMode.empty())
- MuxingMode.insert(0, __T(" / "));
- MI->Fill(Reference->StreamKind, Reference->StreamPos, "MuxingMode", Reference->MI->Info->Get(Stream_General, 0, General_Format)+MuxingMode, true);
- }
-}
-
-//---------------------------------------------------------------------------
-void File__ReferenceFilesHelper::ParseReference_Finalize_PerStream ()
-{
- //Hacks - Before
- Ztring CodecID=MI->Retrieve(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_CodecID));
- Ztring ID_Base;
- if (HasMainFile_Filled && !Reference->IsMain)
- {
- ID_Base=Ztring::ToZtring(ID_Max+Reference->StreamID-1);
- MI->Fill(StreamKind_Last, StreamPos_To, "SideCar_FilePos", Reference->StreamID-1);
- (*MI->Stream_More)[StreamKind_Last][StreamPos_To](Ztring().From_Local("SideCar_FilePos"), Info_Options)=__T("N NT");
- }
- else if (Reference->StreamID!=(int64u)-1)
- ID_Base=Ztring::ToZtring(Reference->StreamID);
- Ztring ID=ID_Base;
- Ztring ID_String=ID_Base;
- Ztring MenuID;
- Ztring MenuID_String;
-
- if (!HasMainFile_Filled && Reference->IsMain)
- {
- MI->Fill(Stream_General, 0, General_Format, Reference->MI->Get(Stream_General, 0, General_Format) , true);
- MI->Fill(Stream_General, 0, General_CompleteName, Reference->MI->Get(Stream_General, 0, General_CompleteName) , true);
- MI->Fill(Stream_General, 0, General_FileExtension, Reference->MI->Get(Stream_General, 0, General_FileExtension) , true);
- HasMainFile=true;
- HasMainFile_Filled=true;
- }
- if (Reference->IsMain)
- {
- int64u ID_New=Reference->MI->Get(StreamKind_Last, StreamPos_From, General_ID).To_int64u();
- if (ID_Max<ID_New)
- ID_Max=ID_New;
- }
-
- MI->Clear(StreamKind_Last, StreamPos_To, General_ID);
-
- MI->Merge(*Reference->MI->Info, StreamKind_Last, StreamPos_From, StreamPos_To);
-
- if (!Reference->CompleteDuration.empty())
- {
- MI->Clear(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_BitRate));
- MI->Clear(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_Duration));
- MI->Clear(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_FrameCount));
- MI->Clear(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_StreamSize));
-
- float64 BitRate_Before=0;
- int64u Duration_Temp=0;
- int64u FrameCount_Temp=0;
- int64u StreamSize_Temp=0;
- int64u FileSize_Temp=0;
- for (size_t Pos=0; Pos<Reference->CompleteDuration.size(); Pos++)
- {
- MediaInfo_Internal MI2;
- MI2.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI2.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI2.Option(__T("Demux_Get"), __T(""));
- MI2.Option(__T("ParseSpeed"), __T("0"));
- MI2.Option(__T("Demux"), Ztring());
- MI2.Config.File_IgnoreFramesBefore=Reference->CompleteDuration[Pos].IgnoreFramesBefore;
- if (Reference->CompleteDuration[Pos].IgnoreFramesAfter==(int64u)-1 && Reference->CompleteDuration[Pos].IgnoreFramesAfterDuration!=(int64u)-1)
- MI2.Config.File_IgnoreFramesAfter=Reference->CompleteDuration[Pos].IgnoreFramesBefore+Reference->CompleteDuration[Pos].IgnoreFramesAfterDuration;
- else
- MI2.Config.File_IgnoreFramesAfter=Reference->CompleteDuration[Pos].IgnoreFramesAfter;
- MI2.Config.File_IgnoreFramesRate=Reference->CompleteDuration[Pos].IgnoreFramesRate;
- size_t MiOpenResult=MI2.Open(Reference->CompleteDuration[Pos].FileName);
- MI2.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI2.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (MiOpenResult)
- {
- BitRate_Before=MI2.Get(StreamKind_Last, StreamPos_From, MI->Fill_Parameter(StreamKind_Last, Generic_BitRate)).To_float64();
- Ztring Duration_Temp2=MI2.Get(StreamKind_Last, StreamPos_From, MI->Fill_Parameter(StreamKind_Last, Generic_Duration));
- if (!Duration_Temp2.empty() && Duration_Temp!=(int64u)-1)
- Duration_Temp+=Duration_Temp2.To_int64u();
- else
- Duration_Temp=(int64u)-1;
- Ztring FrameCount_Temp2=MI2.Get(StreamKind_Last, StreamPos_From, MI->Fill_Parameter(StreamKind_Last, Generic_FrameCount));
- if (!FrameCount_Temp2.empty() && FrameCount_Temp!=(int64u)-1)
- FrameCount_Temp+=FrameCount_Temp2.To_int64u();
- else
- FrameCount_Temp=(int64u)-1;
- Ztring StreamSize_Temp2=MI2.Get(StreamKind_Last, StreamPos_From, MI->Fill_Parameter(StreamKind_Last, Generic_StreamSize));
- if (!StreamSize_Temp2.empty() && StreamSize_Temp!=(int64u)-1)
- StreamSize_Temp+=StreamSize_Temp2.To_int64u();
- else
- StreamSize_Temp=(int64u)-1;
- Ztring FileSize_Temp2=MI2.Get(Stream_General, 0, General_FileSize);
- if (!FileSize_Temp2.empty() && FileSize_Temp!=(int64u)-1)
- FileSize_Temp+=FileSize_Temp2.To_int64u();
- else
- FileSize_Temp=(int64u)-1;
- }
- else
- {
- Duration_Temp=(int64u)-1;
- FrameCount_Temp=(int64u)-1;
- StreamSize_Temp=(int64u)-1;
- FileSize_Temp=(int64u)-1;
- break;
- }
- }
-
- if (Duration_Temp!=(int64u)-1)
- MI->Fill(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_Duration), Duration_Temp, 10, true);
- if (FrameCount_Temp!=(int64u)-1)
- MI->Fill(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_FrameCount), FrameCount_Temp, 10, true);
- if (StreamSize_Temp!=(int64u)-1)
- MI->Fill(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_StreamSize), StreamSize_Temp, 10, true);
- if (FileSize_Temp!=(int64u)-1)
- Reference->FileSize=FileSize_Temp;
- if (BitRate_Before && Duration_Temp)
- {
- float64 BitRate_After=((float64)StreamSize_Temp)*8000/Duration_Temp;
- if (BitRate_Before>BitRate_After*0.999 && BitRate_Before<BitRate_After*1.001)
- MI->Fill(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_BitRate), BitRate_Before, 0, true); //In case of similar bitrate, there is great chance hte compute bit rate is different due to aproximation errors only, using the previous one. TODO: find a better way to detect it
- }
- }
-
- //Frame rate if available from container
- if (StreamKind_Last==Stream_Video && Reference->FrameRate)
- MI->Fill(Stream_Video, StreamPos_To, Video_FrameRate, Reference->FrameRate, 3 , true);
-
- //Hacks - After
- if (!Reference->IsMain && CodecID!=MI->Retrieve(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_CodecID)))
- {
- if (!CodecID.empty())
- CodecID+=__T(" / ");
- CodecID+=MI->Retrieve(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_CodecID));
- MI->Fill(StreamKind_Last, StreamPos_To, MI->Fill_Parameter(StreamKind_Last, Generic_CodecID), CodecID, true);
- }
- if (!Reference->IsMain && Reference->MI->Count_Get(Stream_Video)+Reference->MI->Count_Get(Stream_Audio)>1 && Reference->MI->Get(Stream_Video, 0, Video_Format)!=__T("DV"))
- {
- if (StreamKind_Last==Stream_Menu)
- {
- ZtringList List; List.Separator_Set(0, __T(" / ")); List.Write(MI->Retrieve(StreamKind_Last, StreamPos_To, "List"));
- ZtringList List_String; List_String.Separator_Set(0, __T(" / ")); List_String.Write(MI->Retrieve(StreamKind_Last, StreamPos_To, "List/String"));
- if (!ID_Base.empty())
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- List[Pos].insert(0, ID_Base+__T("-"));
- List_String[Pos].insert(0, ID_Base+__T("-"));
- }
- MI->Fill(Stream_Menu, StreamPos_To, Menu_List, List.Read(), true);
- MI->Fill(Stream_Menu, StreamPos_To, Menu_List_String, List_String.Read(), true);
- }
- else if (References.size()>1 && Reference->MI->Count_Get(Stream_Menu)==0)
- {
- if (Reference->MenuPos==(size_t)-1)
- {
- Reference->MenuPos=MI->Stream_Prepare(Stream_Menu);
- MI->Fill(Stream_Menu, Reference->MenuPos, General_ID, ID_Base);
- MI->Fill(Stream_Menu, Reference->StreamPos, "Source", Reference->Source);
- }
- Ztring List=Reference->MI->Get(StreamKind_Last, StreamPos_From, General_ID);
- Ztring List_String=Reference->MI->Get(StreamKind_Last, StreamPos_From, General_ID_String);
- if (!ID_Base.empty())
- {
- List.insert(0, ID_Base+__T("-"));
- List_String.insert(0, ID_Base+__T("-"));
- }
- MI->Fill(Stream_Menu, Reference->MenuPos, Menu_List, List);
- MI->Fill(Stream_Menu, Reference->MenuPos, Menu_List_String, List_String);
- }
- }
- if (!Reference->IsMain && (ContainerHasNoId || !Config->File_ID_OnlyRoot_Get() || Reference->MI->Get(Stream_General, 0, General_Format)==__T("SCC") || Reference->MI->Count_Get(Stream_Video)+Reference->MI->Count_Get(Stream_Audio)>1) && !MI->Retrieve(StreamKind_Last, StreamPos_To, General_ID).empty())
- {
- if (!ID.empty())
- ID+=__T('-');
- ID+=MI->Retrieve(StreamKind_Last, StreamPos_To, General_ID);
- if (!ID_String.empty())
- ID_String+=__T('-');
- ID_String+=MI->Retrieve(StreamKind_Last, StreamPos_To, General_ID_String);
- if (!MI->Retrieve(StreamKind_Last, StreamPos_To, "MenuID").empty())
- {
- if (!ID_Base.empty())
- MenuID=ID_Base+__T('-');
- MenuID+=MI->Retrieve(StreamKind_Last, StreamPos_To, "MenuID");
- if (!ID_Base.empty())
- MenuID_String=ID_Base+__T('-');
- MenuID_String+=MI->Retrieve(StreamKind_Last, StreamPos_To, "MenuID/String");
- }
- else if (Reference->MenuPos!=(size_t)-1)
- {
- MenuID=ID_Base;
- MenuID_String=ID_Base;
- }
- }
- if (!Reference->IsMain)
- {
- MI->Fill(StreamKind_Last, StreamPos_To, General_ID, ID, true);
- MI->Fill(StreamKind_Last, StreamPos_To, General_ID_String, ID_String, true);
- MI->Fill(StreamKind_Last, StreamPos_To, "MenuID", MenuID, true);
- MI->Fill(StreamKind_Last, StreamPos_To, "MenuID/String", MenuID_String, true);
- MI->Fill(StreamKind_Last, StreamPos_To, "Source", Reference->Source, true);
- }
- for (std::map<string, Ztring>::iterator Info=Reference->Infos.begin(); Info!=Reference->Infos.end(); ++Info)
- if (MI->Retrieve(StreamKind_Last, StreamPos_To, Info->first.c_str()).empty())
- MI->Fill(StreamKind_Last, StreamPos_To, Info->first.c_str(), Info->second);
-
- //Others
- if (!Reference->IsMain && Reference->MI->Info && MI->Retrieve(StreamKind_Last, StreamPos_To, Reference->MI->Info->Fill_Parameter(StreamKind_Last, Generic_Format))!=Reference->MI->Info->Get(Stream_General, 0, General_Format))
- {
- Ztring MuxingMode=MI->Retrieve(StreamKind_Last, StreamPos_To, "MuxingMode");
- if (!MuxingMode.empty())
- MuxingMode.insert(0, __T(" / "));
- MI->Fill(StreamKind_Last, StreamPos_To, "MuxingMode", Reference->MI->Info->Get(Stream_General, 0, General_Format)+MuxingMode, true);
- }
-
- //Lists
- #if MEDIAINFO_ADVANCED || MEDIAINFO_MD5
- if (!Reference->List_Compute_Done && (Reference->MI->Count_Get(Stream_Menu)==0 || StreamKind_Last==Stream_Menu))
- {
- List_Compute();
- Reference->List_Compute_Done=true;
- }
- #endif //MEDIAINFO_ADVANCED || MEDIAINFO_MD5
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED || MEDIAINFO_MD5
-void File__ReferenceFilesHelper::List_Compute()
-{
- stream_t StreamKind=References.size()>1?StreamKind_Last:Stream_General;
- size_t StreamPos=References.size()>1?StreamPos_To:0;
-
- stream_t StreamKind_Target=Reference->MenuPos==(size_t)-1?StreamKind:Stream_Menu;
- size_t StreamPos_Target=Reference->MenuPos==(size_t)-1?StreamPos:Reference->MenuPos;
-
- //MD5
- #if MEDIAINFO_MD5
- if (!HasMainFile && Config->File_Md5_Get())
- {
- if (!Reference->MI->Get(Stream_General, 0, __T("MD5_Generated")).empty())
- {
- if (Reference->MI->Config.File_Names.size()==1)
- {
- if (MI->Retrieve(StreamKind_Target, StreamPos_Target, "Source").empty())
- {
- Ztring SourcePath;
- Ztring SourceName=MI->Retrieve(Stream_General, 0, General_CompleteName);
- if (SourceName.find(__T("://"))==string::npos)
- SourcePath=ZenLib::FileName::Path_Get(SourceName);
- else
- {
- size_t Pos_Path=SourceName.find_last_of('/');
- if (Pos_Path!=Ztring::npos)
- SourcePath=SourceName.substr(0, Pos_Path);
- }
- size_t SourcePath_Size=SourcePath.size()+1; //Path size + path separator size
- Ztring Temp=Reference->MI->Config.File_Names[0];
- if (!Config->File_IsReferenced_Get())
- Temp.erase(0, SourcePath_Size);
- MI->Fill(StreamKind_Target, StreamPos_Target, "Source", Temp);
- }
- MI->Fill(StreamKind_Target, StreamPos_Target, "Source_MD5_Generated", Reference->MI->Get(Stream_General, 0, __T("MD5_Generated")));
- (*MI->Stream_More)[StreamKind_Target][StreamPos_Target](Ztring().From_Local("Source_MD5_Generated"), Info_Options)=__T("N NT");
- }
- MI->Fill(StreamKind_Target, StreamPos_Target, "Source_List_MD5_Generated", Reference->MI->Get(Stream_General, 0, __T("MD5_Generated")));
- (*MI->Stream_More)[StreamKind_Target][StreamPos_Target](Ztring().From_Local("Source_List_MD5_Generated"), Info_Options)=__T("N NT");
- }
- if (!Reference->MI->Get(Stream_General, 0, __T("Source_List_MD5_Generated")).empty())
- {
- MI->Fill(StreamKind_Target, StreamPos_Target, "Source_List_MD5_Generated", Reference->MI->Get(Stream_General, 0, __T("Source_List_MD5_Generated")));
- (*MI->Stream_More)[StreamKind_Target][StreamPos_Target](Ztring().From_Local("Source_List_MD5_Generated"), Info_Options)=__T("N NT");
- }
- else if (!Reference->MI->Get(StreamKind, StreamPos, __T("Source_List_MD5_Generated")).empty())
- {
- MI->Fill(StreamKind_Target, StreamPos_Target, "Source_List_MD5_Generated", Reference->MI->Get(StreamKind, StreamPos, __T("Source_List_MD5_Generated")));
- (*MI->Stream_More)[StreamKind_Target][StreamPos_Target](Ztring().From_Local("Source_List_MD5_Generated"), Info_Options)=__T("N NT");
- }
- }
- #endif //MEDIAINFO_MD5
-
- //Source_List
- #if MEDIAINFO_ADVANCED
- if (!HasMainFile && Config->File_Source_List_Get())
- {
- Ztring SourcePath;
- Ztring SourceName=MI->Retrieve(Stream_General, 0, General_CompleteName);
- if (SourceName.find(__T("://"))==string::npos)
- SourcePath=ZenLib::FileName::Path_Get(SourceName);
- else
- {
- size_t Pos_Path=SourceName.find_last_of('/');
- if (Pos_Path!=Ztring::npos)
- SourcePath=SourceName.substr(0, Pos_Path);
- }
- size_t SourcePath_Size=SourcePath.size()+1; //Path size + path separator size
- for (size_t Pos=0; Pos<Reference->FileNames.size(); Pos++)
- {
- Ztring Temp=Reference->FileNames[Pos];
- if (!Config->File_IsReferenced_Get())
- Temp.erase(0, SourcePath_Size);
- MI->Fill(StreamKind_Target, StreamPos_Target, "Source_List", Temp);
- }
- if (!Reference->MI->Get(Stream_General, 0, __T("Source_List")).empty())
- {
- ZtringList List;
- List.Separator_Set(0, __T(" / "));
- List.Write(Reference->MI->Get(Stream_General, 0, __T("Source_List")));
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- Ztring Temp=List[Pos];
- if (!Config->File_IsReferenced_Get())
- Temp.erase(0, SourcePath_Size);
- MI->Fill(StreamKind_Target, StreamPos_Target, "Source_List", Temp);
- }
- }
- (*MI->Stream_More)[StreamKind_Target][StreamPos_Target](Ztring().From_Local("Source_List"), Info_Options)=__T("N NT");
- }
- #endif //MEDIAINFO_ADVANCED
-}
-#endif //defined(MEDIAINFO_ADVANCED) || defined(MEDIAINFO_MD5)
-
-//---------------------------------------------------------------------------
-MediaInfo_Internal* File__ReferenceFilesHelper::MI_Create()
-{
- //Configuration
- MediaInfo_Internal* MI_Temp=new MediaInfo_Internal();
- MI_Temp->Option(__T("File_IsReferenced"), __T("1"));
- MI_Temp->Option(__T("File_FileNameFormat"), __T("CSV"));
- MI_Temp->Option(__T("File_KeepInfo"), __T("1"));
- MI_Temp->Option(__T("File_ID_OnlyRoot"), Config->File_ID_OnlyRoot_Get()?__T("1"):__T("0"));
- MI_Temp->Option(__T("File_DvDif_DisableAudioIfIsInContainer"), Config->File_DvDif_DisableAudioIfIsInContainer_Get()?__T("1"):__T("0"));
- if ((References.size()>1 || Config->File_MpegTs_ForceMenu_Get()) && !Reference->IsMain && !HasMainFile)
- MI_Temp->Option(__T("File_MpegTs_ForceMenu"), __T("1"));
- #if MEDIAINFO_AES
- MI_Temp->Option(__T("File_Encryption_Format"), MI->Retrieve(Stream_General, 0, "Encryption_Format"));
- MI_Temp->Option(__T("File_Encryption_Key"), Ztring().From_UTF8(Base64::encode(MI->Config->Encryption_Key_Get())));
- MI_Temp->Option(__T("File_Encryption_Method"), MI->Retrieve(Stream_General, 0, "Encryption_Method"));
- MI_Temp->Option(__T("File_Encryption_Mode"), MI->Retrieve(Stream_General, 0, "Encryption_Mode"));
- MI_Temp->Option(__T("File_Encryption_Padding"), MI->Retrieve(Stream_General, 0, "Encryption_Padding"));
- MI_Temp->Option(__T("File_Encryption_InitializationVector"), MI->Retrieve(Stream_General, 0, "Encryption_InitializationVector"));
- #endif //AES
- #if MEDIAINFO_NEXTPACKET
- if (Config->NextPacket_Get())
- MI_Temp->Option(__T("File_NextPacket"), __T("1"));
- #endif //MEDIAINFO_NEXTPACKET
- #if MEDIAINFO_ADVANCED
- if (Config->File_IgnoreSequenceFileSize_Get())
- MI_Temp->Option(__T("File_IgnoreSequenceFileSize"), __T("1"));
- if (Config->File_IgnoreSequenceFilesCount_Get())
- MI_Temp->Option(__T("File_IgnoreSequenceFilesCount"), __T("1"));
- if (Config->File_Source_List_Get())
- MI_Temp->Option(__T("File_Source_List"), __T("1"));
- #endif //MEDIAINFO_ADVANCED
- #if MEDIAINFO_MD5
- if (Config->File_Md5_Get())
- MI_Temp->Option(__T("File_MD5"), __T("1"));
- #endif //MEDIAINFO_MD5
- #if MEDIAINFO_EVENTS
- MI_Temp->Config.Config_PerPackage=Config->Config_PerPackage;
- if (Config->Event_CallBackFunction_IsSet())
- {
- MI_Temp->Option(__T("File_Event_CallBackFunction"), Config->Event_CallBackFunction_Get());
- MI_Temp->Config.Config_PerPackage->Event_CallBackFunction_Set(Config->Event_CallBackFunction_Get());
- }
- MI_Temp->Config.File_Names_RootDirectory=FileName(MI->File_Name).Path_Get();
- if (Reference->FileNames.size()>1)
- MI_Temp->Option(__T("File_TestContinuousFileNames"), __T("0"));
- ZtringListList SubFile_IDs;
- if (Reference->IsMain)
- HasMainFile=true;
- if (HasMainFile && !Reference->IsMain)
- {
- ZtringList ID;
- ID.push_back(Ztring::ToZtring((((int64u)MediaInfo_Parser_SideCar)<<56)|Reference->StreamID-1));
- ID.push_back(Ztring::ToZtring(16));
- ID.push_back(Ztring::ToZtring(MediaInfo_Parser_SideCar));
- SubFile_IDs.push_back(ID);
- }
- else if (!Reference->IsMain)
- for (size_t Pos=0; Pos<MI->StreamIDs_Size; Pos++)
- {
- ZtringList ID;
- if (MI->StreamIDs_Width[Pos]==0)
- ID.push_back(Ztring::ToZtring(-1));
- else if (Pos+1==MI->StreamIDs_Size)
- ID.push_back(Ztring::ToZtring(Reference->StreamID));
- else
- ID.push_back(Ztring::ToZtring(MI->StreamIDs[Pos]));
- ID.push_back(Ztring::ToZtring(MI->StreamIDs_Width[Pos]));
- ID.push_back(Ztring::ToZtring(MI->ParserIDs[Pos]));
- SubFile_IDs.push_back(ID);
- }
- if (!SubFile_IDs.empty())
- {
- SubFile_IDs.Separator_Set(0, EOL);
- SubFile_IDs.Separator_Set(1, __T(","));
- MI_Temp->Option(__T("File_SubFile_IDs_Set"), SubFile_IDs.Read());
- }
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- if (Config->Demux_Unpacketize_Get())
- MI_Temp->Option(__T("File_Demux_Unpacketize"), __T("1"));
- if (Config->Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Get())
- MI_Temp->Option(__T("File_Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10"), __T("1"));
- if (Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get())
- MI_Temp->Option(__T("File_Demux_Hevc_Transcode_Iso14496_15_to_AnnexB"), __T("1"));
- if (FrameRate)
- MI_Temp->Option(__T("File_Demux_Rate"), Ztring::ToZtring(FrameRate, 25));
- switch (Config->Demux_InitData_Get())
- {
- case 0 : MI_Temp->Option(__T("File_Demux_InitData"), __T("Event")); break;
- case 1 : MI_Temp->Option(__T("File_Demux_InitData"), __T("Field")); break;
- default: ;
- }
- #endif //MEDIAINFO_DEMUX
- #if MEDIAINFO_IBI
- if (!Reference->IbiStream.Infos.empty())
- {
- ibi Ibi;
- Ibi.Streams[(int64u)-1]=new ibi::stream(Reference->IbiStream);
-
- //IBI Creation
- File_Ibi_Creation IbiCreation(Ibi);
- Ztring IbiText=IbiCreation.Finish();
- if (!IbiText.empty())
- MI_Temp->Option(__T("File_Ibi"), IbiText);
- }
- #endif //MEDIAINFO_IBI
-
- return MI_Temp;
-}
-
-//---------------------------------------------------------------------------
-void File__ReferenceFilesHelper::Read_Buffer_Unsynched()
-{
- MI->Open_Buffer_Unsynch();
- for (references::iterator Reference=References.begin(); Reference!=References.end(); ++Reference)
- if (Reference->MI)
- Reference->MI->Open_Buffer_Unsynch();
-
- #if MEDIAINFO_DEMUX
- DTS_Minimal=(int64u)-1;
- Config->Demux_EventWasSent=true; //We want not try to read new data from the file
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File__ReferenceFilesHelper::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- for (Reference=References.begin(); Reference!=References.end(); Reference++)
- if (Reference->MI==NULL && !Reference->FileNames.empty())
- ParseReference_Init();
-
- //Parsing
- switch (Method)
- {
- case 0 :
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- {
- if (Value)
- {
- if (Value>MI->Config->File_Size)
- return 2; //Invalid value
-
- //Init
- if (!Duration)
- {
- MediaInfo_Internal MI2;
- MI2.Option(__T("File_KeepInfo"), __T("1"));
- Ztring ParseSpeed_Save=MI2.Option(__T("ParseSpeed_Get"), __T(""));
- Ztring Demux_Save=MI2.Option(__T("Demux_Get"), __T(""));
- MI2.Option(__T("ParseSpeed"), __T("0"));
- MI2.Option(__T("Demux"), Ztring());
- size_t MiOpenResult=MI2.Open(MI->File_Name);
- MI2.Option(__T("ParseSpeed"), ParseSpeed_Save); //This is a global value, need to reset it. TODO: local value
- MI2.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value
- if (!MiOpenResult)
- return (size_t)-1;
- Duration=MI2.Get(Stream_General, 0, General_Duration).To_float64()/1000;
- }
-
- //Time percentage
- float64 DurationF=Duration;
- DurationF*=Value;
- DurationF/=MI->Config->File_Size;
- size_t DurationM=(size_t)(DurationF*1000);
- Ztring DurationS;
- DurationS+=L'0'+(Char)(DurationM/(10*60*60*1000)); DurationM%=10*60*60*1000;
- DurationS+=L'0'+(Char)(DurationM/( 60*60*1000)); DurationM%= 60*60*1000;
- DurationS+=L':';
- DurationS+=L'0'+(Char)(DurationM/( 10*60*1000)); DurationM%= 10*60*1000;
- DurationS+=L'0'+(Char)(DurationM/( 60*1000)); DurationM%= 60*1000;
- DurationS+=L':';
- DurationS+=L'0'+(Char)(DurationM/( 10*1000)); DurationM%= 10*1000;
- DurationS+=L'0'+(Char)(DurationM/( 1000)); DurationM%= 1000;
- DurationS+=L'.';
- DurationS+=L'0'+(Char)(DurationM/( 100)); DurationM%= 100;
- DurationS+=L'0'+(Char)(DurationM/( 10)); DurationM%= 10;
- DurationS+=L'0'+(Char)(DurationM);
-
- CountOfReferencesToParse=References.size();
- bool HasProblem=false;
- for (Reference=References.begin(); Reference!=References.end(); Reference++)
- {
- if (Reference->MI)
- {
- Ztring Result;
- if (Reference->CompleteDuration.size()<=1 || DurationM<Reference->CompleteDuration[1].Demux_Offset_DTS)
- {
- Reference->CompleteDuration_Pos=0;
- Result=Reference->MI->Option(__T("File_Seek"), DurationS);
- }
- else
- {
- size_t CompleteDuration_Pos_Temp=1;
- while (CompleteDuration_Pos_Temp<Reference->CompleteDuration.size() && DurationM>=Reference->CompleteDuration[CompleteDuration_Pos_Temp].Demux_Offset_DTS)
- CompleteDuration_Pos_Temp++;
- CompleteDuration_Pos_Temp--;
- Result=Reference->CompleteDuration[CompleteDuration_Pos_Temp].MI->Option(__T("File_Seek"), DurationS);
- if (Result.empty())
- Reference->CompleteDuration_Pos=CompleteDuration_Pos_Temp;
- }
- if (!Result.empty())
- HasProblem=true;
- }
- Reference->Status.reset();
- }
- Reference=References.begin();
- Open_Buffer_Unsynch();
- return HasProblem?(size_t)-1:1; //Not supported value if there is a problem (TODO: better info)
- }
-
- CountOfReferencesToParse=References.size();
- bool HasProblem=false;
- for (Reference=References.begin(); Reference!=References.end(); Reference++)
- {
- if (Reference->MI)
- {
- Reference->CompleteDuration_Pos=0;
- Ztring Result=Reference->MI->Option(__T("File_Seek"), Ztring::ToZtring(Value));
- if (!Result.empty())
- HasProblem=true;
- }
- Reference->Status.reset();
- }
- Reference=References.begin();
- Open_Buffer_Unsynch();
- return HasProblem?(size_t)-1:1; //Not supported value if there is a problem (TODO: better info)
- }
- #else //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- return (size_t)-1; //Not supported
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- case 1 :
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- {
- //Time percentage
- int64u Duration=MI->Get(Stream_General, 0, General_Duration).To_int64u();
- Ztring DurationS;
- if (Duration)
- {
- Duration*=Value;
- Duration/=10000;
- DurationS+=L'0'+(Char)(Duration/(10*60*60*1000)); Duration%=10*60*60*1000;
- DurationS+=L'0'+(Char)(Duration/( 60*60*1000)); Duration%= 60*60*1000;
- DurationS+=L':';
- DurationS+=L'0'+(Char)(Duration/( 10*60*1000)); Duration%= 10*60*1000;
- DurationS+=L'0'+(Char)(Duration/( 60*1000)); Duration%= 60*1000;
- DurationS+=L':';
- DurationS+=L'0'+(Char)(Duration/( 10*1000)); Duration%= 10*1000;
- DurationS+=L'0'+(Char)(Duration/( 1000)); Duration%= 1000;
- DurationS+=L'.';
- DurationS+=L'0'+(Char)(Duration/( 100)); Duration%= 100;
- DurationS+=L'0'+(Char)(Duration/( 10)); Duration%= 10;
- DurationS+=L'0'+(Char)(Duration);
- }
- else
- DurationS=Ztring::ToZtring(((float64)Value)/100)+__T('%');
-
- CountOfReferencesToParse=References.size();
- bool HasProblem=false;
- for (Reference=References.begin(); Reference!=References.end(); Reference++)
- {
- if (Reference->MI)
- {
- Ztring Result;
- if (Reference->CompleteDuration.empty() || Duration<Reference->CompleteDuration[1].Demux_Offset_DTS)
- {
- Reference->CompleteDuration_Pos=0;
- Result=Reference->MI->Option(__T("File_Seek"), DurationS);
- }
- else
- {
- size_t CompleteDuration_Pos_Temp=1;
- while (CompleteDuration_Pos_Temp<Reference->CompleteDuration.size() && Duration>=Reference->CompleteDuration[CompleteDuration_Pos_Temp].Demux_Offset_DTS)
- CompleteDuration_Pos_Temp++;
- CompleteDuration_Pos_Temp--;
- Result=Reference->CompleteDuration[CompleteDuration_Pos_Temp].MI->Option(__T("File_Seek"), DurationS);
- if (Result.empty())
- Reference->CompleteDuration_Pos=CompleteDuration_Pos_Temp;
- }
- if (!Result.empty())
- HasProblem=true;
- }
- Reference->Status.reset();
- }
- Reference=References.begin();
- Open_Buffer_Unsynch();
- return HasProblem?2:1; //Invalid value if there is a problem (TODO: better info)
- }
- #else //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- return (size_t)-1; //Not supported
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- case 2 : //Timestamp
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- {
- CountOfReferencesToParse=References.size();
- Ztring Time; Time.Duration_From_Milliseconds(Value/1000000);
- for (Reference=References.begin(); Reference!=References.end(); Reference++)
- {
- if (Reference->MI)
- {
- Ztring Result;
- if (Reference->CompleteDuration.size()<2 || Value<Reference->CompleteDuration[1].Demux_Offset_DTS)
- {
- Reference->CompleteDuration_Pos=0;
- Result=Reference->MI->Option(__T("File_Seek"), Time);
- }
- else
- {
- size_t CompleteDuration_Pos_Temp=1;
- while (CompleteDuration_Pos_Temp<Reference->CompleteDuration.size() && Value>=Reference->CompleteDuration[CompleteDuration_Pos_Temp].Demux_Offset_DTS)
- CompleteDuration_Pos_Temp++;
- CompleteDuration_Pos_Temp--;
- Result=Reference->CompleteDuration[CompleteDuration_Pos_Temp].MI->Option(__T("File_Seek"), Time);
- if (Result.empty())
- Reference->CompleteDuration_Pos=CompleteDuration_Pos_Temp;
- }
- if (!Result.empty())
- return 2; //Invalid value
- }
- else
- {
- //There was a problem, removing Reference
- References.clear();
- return Read_Buffer_Seek(Method, Value, ID);
- }
- Reference->Status.reset();
- }
- Reference=References.begin();
- Open_Buffer_Unsynch();
- return 1;
- }
- #else //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- return (size_t)-1; //Not supported
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- case 3 : //FrameNumber
- #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- CountOfReferencesToParse=References.size();
- for (Reference=References.begin(); Reference!=References.end(); Reference++)
- {
- if (Reference->MI)
- {
- Ztring Result;
- if (Reference->CompleteDuration.size()<2 || Value<Reference->CompleteDuration[1].Demux_Offset_Frame)
- {
- Reference->CompleteDuration_Pos=0;
- Result=Reference->MI->Option(__T("File_Seek"), __T("Frame=")+Ztring::ToZtring(Value));
- }
- else
- {
- size_t CompleteDuration_Pos_Temp=1;
- while (CompleteDuration_Pos_Temp<Reference->CompleteDuration.size() && Value>=Reference->CompleteDuration[CompleteDuration_Pos_Temp].Demux_Offset_Frame)
- CompleteDuration_Pos_Temp++;
- CompleteDuration_Pos_Temp--;
- Result=Reference->CompleteDuration[CompleteDuration_Pos_Temp].MI->Option(__T("File_Seek"), __T("Frame=")+Ztring::ToZtring(Value-Reference->CompleteDuration[CompleteDuration_Pos_Temp].Demux_Offset_Frame));
- if (Result.empty())
- Reference->CompleteDuration_Pos=CompleteDuration_Pos_Temp;
- }
- if (!Result.empty())
- return 2; //Invalid value
- }
- Reference->Status.reset();
- }
- Reference=References.begin();
- Open_Buffer_Unsynch();
- return 1;
- #else //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- return (size_t)-1; //Not supported
- #endif //MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET
- default : return 0;
- }
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t File__ReferenceFilesHelper::Stream_Prepare (stream_t StreamKind, size_t StreamPos)
-{
- size_t StreamPos_Last=MI->Stream_Prepare(StreamKind, StreamPos);
-
- for (references::iterator ReferencePos=References.begin(); ReferencePos!=References.end(); ++ReferencePos)
- if (ReferencePos->StreamKind==StreamKind && ReferencePos->StreamPos>=StreamPos_Last)
- if (ReferencePos->StreamPos!=(size_t)-1)
- ReferencePos->StreamPos++;
-
- return StreamPos_Last;
-}
-
-//---------------------------------------------------------------------------
-void File__ReferenceFilesHelper::FileSize_Compute ()
-{
- if (MI->Config==NULL)
- return;
-
- MI->Config->File_Size=MI->File_Size;
-
- for (references::iterator Reference=References.begin(); Reference!=References.end(); ++Reference)
- {
- if (Reference->FileSize!=(int64u)-1)
- MI->Config->File_Size+=Reference->FileSize;
- else if (Reference->MI && Reference->MI->Config.File_Size!=(int64u)-1)
- {
- MI->Config->File_Size+=Reference->MI->Config.File_Size;
- #if MEDIAINFO_ADVANCED
- if (!Config->File_IgnoreSequenceFileSize_Get())
- #endif //MEDIAINFO_ADVANCED
- {
- if (!Reference->CompleteDuration.empty())
- for (size_t Pos=1; Pos<Reference->CompleteDuration.size(); Pos++)
- MI->Config->File_Size+=File::Size_Get(Reference->CompleteDuration[Pos].FileName);
- }
- }
- else
- {
- #if MEDIAINFO_ADVANCED
- if (!Config->File_IgnoreSequenceFileSize_Get())
- #endif //MEDIAINFO_ADVANCED
- {
- if (Reference->CompleteDuration.empty())
- for (size_t Pos=0; Pos<Reference->FileNames.size(); Pos++)
- MI->Config->File_Size+=File::Size_Get(Reference->FileNames[Pos]);
- else
- for (size_t Pos=0; Pos<Reference->CompleteDuration.size(); Pos++)
- MI->Config->File_Size+=File::Size_Get(Reference->CompleteDuration[Pos].FileName);
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File__ReferenceFilesHelper::CountOfReferences_ForReadSize_Run ()
-{
- //Computing read buffer size
- int64u File_Size_Total=0;
- int64u Buffer_Read_Size_Total=MI->Config->File_Buffer_Read_Size_Get();
- for (references::iterator Reference_Temp=References.begin(); Reference_Temp!=References.end(); ++Reference_Temp)
- if (Reference_Temp->MI && Reference_Temp->MI->Config.File_Size!=(int64u)-1)
- File_Size_Total+=Reference_Temp->MI->Config.File_Size;
- if (File_Size_Total)
- for (references::iterator Reference_Temp=References.begin(); Reference_Temp!=References.end(); ++Reference_Temp)
- if (Reference_Temp->MI)
- {
- int64u Buffer_Read_Size_Temp=float64_int64s(((float64)Reference_Temp->MI->Config.File_Size)/File_Size_Total*Buffer_Read_Size_Total);
- int64u Buffer_Read_Size=1;
- while (Buffer_Read_Size<Buffer_Read_Size_Temp)
- Buffer_Read_Size<<=1;
- Reference_Temp->MI->Config.File_Buffer_Read_Size_Set((size_t)Buffer_Read_Size);
- }
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_EVENTS
-void File__ReferenceFilesHelper::SubFile_Start()
-{
- if (Reference->StreamID!=StreamID_Previous)
- {
- Ztring FileName_Absolute, FileName_Relative;
- if (Reference->MI && Reference->MI->Config.File_Names_Pos && Reference->MI->Config.File_Names_Pos<Reference->MI->Config.File_Names.size())
- FileName_Absolute=Reference->MI->Config.File_Names[Reference->MI->Config.File_Names_Pos-1];
- else if (!Reference->FileNames.empty())
- FileName_Absolute=Reference->FileNames[0];
- else
- FileName_Absolute=Reference->Source.c_str();
-
- Reference->MI->Config.Event_SubFile_Start(FileName_Absolute);
- StreamID_Previous=Reference->StreamID;
- }
-}
-#endif //MEDIAINFO_EVENTS
-
-} //NameSpace
-
-#endif //MEDIAINFO_REFERENCES_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.h b/src/thirdparty/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.h
deleted file mode 100644
index e7e771af7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef File__ReferenceFilesHelperH
-#define File__ReferenceFilesHelperH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/MediaInfo_Internal.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File__ReferenceFilesHelper
-//***************************************************************************
-
-class File__ReferenceFilesHelper
-{
-public :
- //In
- struct reference
- {
- ZtringList FileNames;
- Ztring Source; //Source file name (relative path)
- stream_t StreamKind;
- size_t StreamPos;
- size_t MenuPos;
- int64u StreamID;
- float64 FrameRate;
- int64u Delay;
- int64u FileSize;
- bool IsCircular;
- bool IsMain;
- bool FileSize_IsPresent; //TODO: merge with FileSize after regression tests
- #if MEDIAINFO_ADVANCED || MEDIAINFO_MD5
- bool List_Compute_Done;
- #endif //MEDIAINFO_ADVANCED || MEDIAINFO_MD5
- size_t State;
- std::map<std::string, Ztring> Infos;
- MediaInfo_Internal* MI;
- struct completeduration
- {
- Ztring FileName;
- MediaInfo_Internal* MI;
- int64u IgnoreFramesBefore;
- int64u IgnoreFramesAfterDuration; //temporary value, some formats have duration instead of frame position
- int64u IgnoreFramesAfter;
- float64 IgnoreFramesRate;
- #if MEDIAINFO_DEMUX
- int64u Demux_Offset_Frame;
- int64u Demux_Offset_DTS;
- int64u Demux_Offset_FileSize;
- #endif //MEDIAINFO_DEMUX
-
- completeduration()
- {
- MI=NULL;
- IgnoreFramesBefore=0;
- IgnoreFramesAfterDuration=(int64u)-1;
- IgnoreFramesAfter=(int64u)-1;
- IgnoreFramesRate=0;
- #if MEDIAINFO_DEMUX
- Demux_Offset_Frame=0;
- Demux_Offset_DTS=0;
- Demux_Offset_FileSize=0;
- #endif //MEDIAINFO_DEMUX
- }
-
- ~completeduration()
- {
- delete MI;
- }
- };
- vector<completeduration> CompleteDuration;
- size_t CompleteDuration_Pos;
- #if MEDIAINFO_FILTER
- int64u Enabled;
- #endif //MEDIAINFO_FILTER
- std::bitset<32> Status;
- #if MEDIAINFO_NEXTPACKET && MEDIAINFO_IBI
- ibi::stream IbiStream;
- #endif //MEDIAINFO_NEXTPACKET && MEDIAINFO_IBI
-
- reference()
- {
- FileNames.Separator_Set(0, __T(","));
- StreamKind=Stream_Max;
- StreamPos=(size_t)-1;
- MenuPos=(size_t)-1;
- StreamID=(int64u)-1;
- FrameRate=0;
- Delay=0;
- FileSize=(int64u)-1;
- IsCircular=false;
- IsMain=false;
- FileSize_IsPresent=false;
- #if MEDIAINFO_ADVANCED || MEDIAINFO_MD5
- List_Compute_Done=false;
- #endif //MEDIAINFO_ADVANCED || MEDIAINFO_MD5
- State=0;
- MI=NULL;
- CompleteDuration_Pos=0;
- #if MEDIAINFO_FILTER
- Enabled=true;
- #endif //MEDIAINFO_FILTER
- }
- };
- typedef std::vector<reference> references;
- references References;
- bool TestContinuousFileNames;
- bool FilesForStorage;
- bool ContainerHasNoId;
- bool HasMainFile;
- bool HasMainFile_Filled;
- int64u ID_Max;
-
- //Streams management
- bool ParseReference_Init();
- void ParseReferences();
-
- //Constructor / Destructor
- File__ReferenceFilesHelper(File__Analyze* MI, MediaInfo_Config_MediaInfo* Config);
- ~File__ReferenceFilesHelper();
-
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
-private :
- //Streams management
- void ParseReference ();
- void ParseReference_Finalize ();
- void ParseReference_Finalize_PerStream ();
- void Open_Buffer_Unsynch() {Read_Buffer_Unsynched();}
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
-
- //temp
- File__Analyze* MI;
- MediaInfo_Config_MediaInfo* Config;
- references::iterator Reference;
- bool Init_Done;
- bool Demux_Interleave;
- size_t CountOfReferencesToParse;
- size_t CountOfReferences_ForReadSize;
- float64 FrameRate;
- float64 Duration;
- stream_t StreamKind_Last;
- size_t StreamPos_From;
- size_t StreamPos_To;
- #if MEDIAINFO_NEXTPACKET
- int64u DTS_Minimal;
- int64u DTS_Interval;
- #endif //MEDIAINFO_NEXTPACKET
-
- //Helpers
- size_t Stream_Prepare(stream_t StreamKind, size_t StreamPos=(size_t)-1);
- void FileSize_Compute();
- void CountOfReferences_ForReadSize_Run();
- MediaInfo_Internal* MI_Create();
- #if MEDIAINFO_ADVANCED || MEDIAINFO_MD5
- void List_Compute();
- #endif //MEDIAINFO_ADVANCED || MEDIAINFO_MD5
- #if MEDIAINFO_EVENTS
- void SubFile_Start();
- int64u StreamID_Previous;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- int64u Offset_Video_DTS;
- #endif //MEDIAINFO_DEMUX
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/PreComp.cpp b/src/thirdparty/MediaInfo/MediaInfo/PreComp.cpp
deleted file mode 100644
index d5ae78e9c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/PreComp.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Helpers for compilers (precompilation)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/PreComp.h"
-//---------------------------------------------------------------------------
diff --git a/src/thirdparty/MediaInfo/MediaInfo/PreComp.h b/src/thirdparty/MediaInfo/MediaInfo/PreComp.h
deleted file mode 100644
index 1b7c4545d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/PreComp.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Helpers for compilers (precompilation)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_PreCompH
-#define MediaInfo_PreCompH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(_MSC_VER) || defined(__BORLANDC__)
- #include "MediaInfo/Setup.h"
- #include "MediaInfo/File__Analyze.h"
-#endif //_MSC_VER
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_Directory.cpp b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_Directory.cpp
deleted file mode 100644
index b2267b853..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_Directory.cpp
+++ /dev/null
@@ -1,231 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DIRECTORY_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Reader/Reader_Directory.h"
-#include "ZenLib/Dir.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-size_t Reader_Directory::Format_Test(MediaInfo_Internal* MI, String File_Name)
-{
- #ifdef MEDIAINFO_BDMV_YES
- if (Dir::Exists(File_Name) && File_Name.find(Ztring(1, PathSeparator)+__T("BDMV"))+5==File_Name.size())
- return Bdmv_Format_Test(MI, File_Name);
- #endif //MEDIAINFO_BDMV_YES
-
- #ifdef MEDIAINFO_P2_YES
- if (Dir::Exists(File_Name) && File_Name.rfind(Ztring(1, PathSeparator)+__T("CONTENT"))+8==File_Name.size())
- return P2_Format_Test(MI, File_Name);
- #endif //MEDIAINFO_P2_YES
-
- #ifdef MEDIAINFO_XDCAM_YES
- if (Dir::Exists(File_Name) && File_Name.rfind(Ztring(1, PathSeparator)+__T("XDCAM"))+5==File_Name.size())
- return Xdcam_Format_Test(MI, File_Name);
- #endif //MEDIAINFO_XDCAM_YES
-
- return 0;
-}
-
-//---------------------------------------------------------------------------
-void Reader_Directory::Directory_Cleanup(ZtringList &List)
-{
- #ifdef MEDIAINFO_BDMV_YES
- Bdmv_Directory_Cleanup(List);
- #endif //MEDIAINFO_BDMV_YES
-
- #ifdef MEDIAINFO_P2_YES
- P2_Directory_Cleanup(List);
- #endif //MEDIAINFO_P2_YES
-
- #ifdef MEDIAINFO_XDCAM_YES
- Xdcam_Directory_Cleanup(List);
- #endif //MEDIAINFO_XDCAM_YES
-}
-
-//***************************************************************************
-// Blu-ray stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_BDMV_YES
-int Reader_Directory::Bdmv_Format_Test(MediaInfo_Internal* MI, const String &File_Name)
-{
- if (!MI->SelectFromExtension(__T("Bdmv")))
- return 0;
-
- MI->Open_Buffer_Init(0, File_Name);
-
- MI->Open_Buffer_Continue(NULL, 0);
-
- MI->Open_Buffer_Finalize();
-
- return 1;
-}
-#endif //MEDIAINFO_BDMV_YES
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_BDMV_YES
-void Reader_Directory::Bdmv_Directory_Cleanup(ZtringList &List)
-{
- //if there is a BDMV folder, this is blu-ray
- Ztring ToSearch=Ztring(1, PathSeparator)+__T("BDMV")+PathSeparator+__T("index.bdmv"); //"\BDMV\index.bdmv"
- for (size_t File_Pos=0; File_Pos<List.size(); File_Pos++)
- {
- size_t BDMV_Pos=List[File_Pos].find(ToSearch);
- if (BDMV_Pos!=string::npos && BDMV_Pos!=0 && BDMV_Pos+16==List[File_Pos].size())
- {
- //This is a BDMV index, parsing the directory only if index and movie objects are BOTH present
- ToSearch=List[File_Pos];
- ToSearch.resize(ToSearch.size()-10);
- ToSearch+=__T("MovieObject.bdmv"); //"%CompletePath%\BDMV\MovieObject.bdmv"
- if (List.Find(ToSearch)!=string::npos)
- {
- //We want the folder instead of the files
- List[File_Pos].resize(List[File_Pos].size()-11); //only %CompletePath%\BDMV
- ToSearch=List[File_Pos];
-
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (List[Pos].find(ToSearch)==0 && List[Pos]!=ToSearch) //Remove all subdirs of ToSearch but not ToSearch
- {
- //Removing the file in the blu-ray directory
- List.erase(List.begin()+Pos);
- Pos--;
- }
- }
- }
- }
- }
-}
-#endif //MEDIAINFO_BDMV_YES
-
-//***************************************************************************
-// P2 stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_P2_YES
-int Reader_Directory::P2_Format_Test(MediaInfo_Internal* MI, const String &File_Name)
-{
- if (!MI->SelectFromExtension(__T("P2_Clip")))
- return 0;
-
- MI->Open(File_Name+__T("CLIP")+PathSeparator+__T("0013MM.XML"));
-
- return 1;
-}
-#endif //MEDIAINFO_P2_YES
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_P2_YES
-void Reader_Directory::P2_Directory_Cleanup(ZtringList &List)
-{
- //if there is a CONTENTS/CLIP folder, this is P2
- Ztring ToSearch=Ztring(1, PathSeparator)+__T("CONTENTS")+PathSeparator+__T("CLIP")+PathSeparator; //"/CONTENTS/CLIP/"
- for (size_t File_Pos=0; File_Pos<List.size(); File_Pos++)
- {
- size_t P2_Pos=List[File_Pos].find(ToSearch);
- if (P2_Pos!=string::npos && P2_Pos!=0 && P2_Pos+1+8+1+4+1+10==List[File_Pos].size())
- {
- //This is a P2 CLIP
- Ztring Path_Begin=List[File_Pos];
- Path_Begin.resize(Path_Begin.size()-(1+8+1+4+1+10));
- Path_Begin+=Ztring(1, PathSeparator);
- bool HasChanged=false;
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (List[Pos].find(Path_Begin)==0 && List[Pos].find(Path_Begin+__T("CONTENTS")+PathSeparator+__T("CLIP")+PathSeparator)==string::npos) //Remove all subdirs of Path_Begin but not with CLIP
- {
- //Removing the file in the P2 directory
- List.erase(List.begin()+Pos);
- Pos--;
- HasChanged=true;
- }
- }
- if (HasChanged)
- File_Pos=0;
- }
- }
-}
-#endif //MEDIAINFO_P2_YES
-
-//***************************************************************************
-// P2 stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_XDCAM_YES
-int Reader_Directory::Xdcam_Format_Test(MediaInfo_Internal* MI, const String &File_Name)
-{
- if (!MI->SelectFromExtension(__T("Xdcam_Clip")))
- return 0;
-
- MI->Open(File_Name+__T("CLIP")+PathSeparator+__T("0013MM.XML"));
-
- return 1;
-}
-#endif //MEDIAINFO_XDCAM_YES
-
-//---------------------------------------------------------------------------
-#ifdef MEDIAINFO_XDCAM_YES
-void Reader_Directory::Xdcam_Directory_Cleanup(ZtringList &List)
-{
- //if there is a XDCAM/Clip folder, this is Xdcam
- Ztring ToSearch=Ztring(1, PathSeparator)+__T("Clip")+PathSeparator; //"/Clip/"
- for (size_t File_Pos=0; File_Pos<List.size(); File_Pos++)
- {
- size_t Xdcam_Pos=List[File_Pos].find(ToSearch);
- if (Xdcam_Pos!=string::npos && Xdcam_Pos!=0 && Xdcam_Pos+1+4+1+12==List[File_Pos].size())
- {
- //This is a XDCAM CLIP
- Ztring Path_Begin=List[File_Pos];
- Path_Begin.resize(Path_Begin.size()-(1+4+1+12));
- Path_Begin+=Ztring(1, PathSeparator);
- if (Dir::Exists(Path_Begin+__T("Edit")) && Dir::Exists(Path_Begin+__T("General")) && Dir::Exists(Path_Begin+__T("Sub")))
- {
- bool HasChanged=false;
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (List[Pos].find(Path_Begin)==0 && (List[Pos].find(Path_Begin+__T("Clip")+PathSeparator)==string::npos || (List[Pos].find(__T(".XML"))!=List[Pos].size()-4))) //Remove all subdirs of Path_Begin but not with the right XML
- {
- //Removing the file in the XDCAM directory
- List.erase(List.begin()+Pos);
- Pos--;
- HasChanged=true;
- }
- }
- if (HasChanged)
- File_Pos=0;
- }
- }
- }
-}
-#endif //MEDIAINFO_XDCAM_YES
-
-} //NameSpace
-
-#endif //MEDIAINFO_DIRECTORY_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_Directory.h b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_Directory.h
deleted file mode 100644
index e87eddb62..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_Directory.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give information about a lot of media files
-// Dispatch the file to be tested by all containers
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef Reader_DirectoryH
-#define Reader_DirectoryH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Reader/Reader__Base.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-/// @brief Reader_Directory
-//***************************************************************************
-
-class Reader_Directory : public Reader__Base
-{
-public :
- //Constructor/Destructor
- virtual ~Reader_Directory() {}
-
- //Format testing
- size_t Format_Test(MediaInfo_Internal* MI, String File_Name);
-
- //For the list
- void Directory_Cleanup(ZtringList &List);
-
-private :
- //Bdmv
- int Bdmv_Format_Test(MediaInfo_Internal* MI, const String &File_Name);
- void Bdmv_Directory_Cleanup(ZtringList &List);
-
- //P2
- int P2_Format_Test(MediaInfo_Internal* MI, const String &File_Name);
- void P2_Directory_Cleanup(ZtringList &List);
-
- //XDCAM
- int Xdcam_Format_Test(MediaInfo_Internal* MI, const String &File_Name);
- void Xdcam_Directory_Cleanup(ZtringList &List);
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_File.cpp b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_File.cpp
deleted file mode 100644
index ff5f40836..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_File.cpp
+++ /dev/null
@@ -1,785 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// For user: you can disable or enable it
-//#define MEDIAINFO_DEBUG
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Reader/Reader_File.h"
-#include "MediaInfo/File__Analyze.h"
-#include "ZenLib/FileName.h"
-#ifdef WINDOWS
- #undef __TEXT
- #include "Windows.h"
-#endif //WINDOWS
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-// Debug stuff
-#ifdef MEDIAINFO_DEBUG
- int64u Reader_File_Offset=0;
- int64u Reader_File_BytesRead_Total=0;
- int64u Reader_File_BytesRead=0;
- int64u Reader_File_Count=1;
- #include <iostream>
-#endif // MEDIAINFO_DEBUG
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-#if MEDIAINFO_READTHREAD
-void Reader_File_Thread::Entry()
-{
- ReadSize_Max=Base->Buffer_Max>>3;
-
- for (;;)
- {
- Base->CS.Enter();
- if (Base->Buffer_Begin==Base->Buffer_Max)
- {
- Base->IsLooping=false;
- Base->Buffer_End=Base->Buffer_End2;
- Base->Buffer_End2=0;
- Base->Buffer_Begin=0;
- }
-
- size_t ToRead;
- size_t Buffer_ToReadOffset;
- if (Base->IsLooping)
- {
- ToRead=Base->Buffer_Begin-Base->Buffer_End2;
- Buffer_ToReadOffset=Base->Buffer_End2;
- }
- else
- {
- ToRead=Base->Buffer_Max-Base->Buffer_End;
- Buffer_ToReadOffset=Base->Buffer_End;
- }
- Base->CS.Leave();
-
- if (ToRead)
- {
- if (ToRead>ReadSize_Max)
- ToRead=ReadSize_Max;
- size_t BytesRead=Base->F.Read(Base->Buffer+Buffer_ToReadOffset, ToRead);
- if (!BytesRead)
- break;
-
- Base->CS.Enter();
- if (Base->IsLooping)
- {
- Base->Buffer_End2+=BytesRead;
- }
- else
- {
- Base->Buffer_End+=BytesRead;
- if (Base->Buffer_End==Base->Buffer_Max)
- {
- Base->IsLooping=true;
- }
- }
- Base->CS.Leave();
-
- #ifdef WINDOWS
- SetEvent(Base->Condition_WaitingForMoreData);
- #endif //WINDOWS
- }
- #ifdef WINDOWS
- else
- WaitForSingleObject(Base->Condition_WaitingForMorePlace, INFINITE);
- #endif //WINDOWS
-
- if (IsTerminating())
- break;
- Yield();
- }
-
- #ifdef WINDOWS
- SetEvent(Base->Condition_WaitingForMoreData); //Sending the last event in case the main threading is waiting for more data
- #endif //WINDOWS
-}
-#endif //MEDIAINFO_READTHREAD
-
-const size_t Buffer_NoJump=128*1024;
-
-//---------------------------------------------------------------------------
-Reader_File::~Reader_File()
-{
- #if MEDIAINFO_READTHREAD
- if (ThreadInstance)
- {
- ThreadInstance->RequestTerminate();
- SetEvent(Condition_WaitingForMorePlace);
- while (!ThreadInstance->IsExited())
- Sleep(0);
- #ifdef WINDOWS
- CloseHandle(Condition_WaitingForMorePlace);
- CloseHandle(Condition_WaitingForMoreData);
- #endif //WINDOWS
- delete ThreadInstance;
-
- MI_Internal->Config.File_Buffer=NULL;
- MI_Internal->Config.File_Buffer_Size=0;
- MI_Internal->Config.File_Buffer_Size_Max=0;
- delete[] Buffer;
- }
- #endif //MEDIAINFO_READTHREAD
-}
-
-//---------------------------------------------------------------------------
-size_t Reader_File::Format_Test(MediaInfo_Internal* MI, String File_Name)
-{
- //std::cout<<Ztring(File_Name).To_Local().c_str()<<std::endl;
- #if MEDIAINFO_EVENTS
- {
- string File_Name_Local=Ztring(File_Name).To_Local();
- wstring File_Name_Unicode=Ztring(File_Name).To_Unicode();
- struct MediaInfo_Event_General_Start_0 Event;
- memset(&Event, 0xFF, sizeof(struct MediaInfo_Event_Generic));
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_General_Start, 0);
- Event.EventSize=sizeof(struct MediaInfo_Event_General_Start_0);
- Event.StreamIDs_Size=0;
- Event.Stream_Size=File::Size_Get(File_Name);
- Event.FileName=File_Name_Local.c_str();
- Event.FileName_Unicode=File_Name_Unicode.c_str();
- MI->Config.Event_Send(NULL, (const int8u*)&Event, sizeof(MediaInfo_Event_General_Start_0));
- }
- #endif //MEDIAINFO_EVENTS
-
- //With Parser MultipleParsing
- /*
- MI->Open_Buffer_Init((int64u)-1, File_Name);
- if (Format_Test_PerParser(MI, File_Name))
- return 1;
- return 0; //There is a problem
- */
-
- //Get the Extension
- Ztring Extension=FileName::Extension_Get(File_Name);
- Extension.MakeLowerCase();
-
- //Search the theorical format from extension
- InfoMap &FormatList=MediaInfoLib::Config.Format_Get();
- InfoMap::iterator Format=FormatList.end();
- if (!MI->Config.File_ForceParser_Get().empty())
- Format=FormatList.find(MI->Config.File_ForceParser_Get());
- if (Format==FormatList.end())
- {
- Format=FormatList.begin();
- while (Format!=FormatList.end())
- {
- const Ztring &Extensions=FormatList.Get(Format->first, InfoFormat_Extensions);
- if (Extensions.find(Extension)!=Error)
- {
- if(Extension.size()==Extensions.size())
- break; //Only one extenion in the list
- if(Extensions.find(Extension+__T(" "))!=Error
- || Extensions.find(__T(" ")+Extension)!=Error)
- break;
- }
- ++Format;
- }
- }
- if (Format!=FormatList.end())
- {
- const Ztring &Parser=Format->second(InfoFormat_Parser);
- if (MI->SelectFromExtension(Parser))
- {
- //Test the theorical format
- if (Format_Test_PerParser(MI, File_Name)>0)
- return 1;
- }
- }
-
- size_t ToReturn=MI->ListFormats(File_Name);
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-size_t Reader_File::Format_Test_PerParser(MediaInfo_Internal* MI, const String &File_Name)
-{
- //Init
- MI_Internal=MI;
- #if MEDIAINFO_READTHREAD
- ThreadInstance=NULL;
- Buffer_End2=0; //Is also used for counting bytes before activating the thread
- #endif //MEDIAINFO_READTHREAD
-
- //Opening the file
- F.Open(File_Name);
- if (!F.Opened_Get())
- return 0;
-
- //Info
- Status=0;
- MI->Config.File_Size=F.Size_Get();
- MI->Config.File_Current_Offset=0;
- MI->Config.File_Current_Size=MI->Config.File_Size;
- MI->Config.File_Sizes.clear();
- MI->Config.File_Sizes.push_back(MI->Config.File_Size);
- if (MI->Config.File_Names.size()>1)
- {
- #if MEDIAINFO_ADVANCED
- if (MI->Config.File_IgnoreSequenceFileSize_Get())
- {
- MI->Config.File_Size=(int64u)-1;
- }
- else
- #endif //MEDIAINFO_ADVANCED
- {
- for (size_t Pos=1; Pos<MI->Config.File_Names.size(); Pos++)
- {
- int64u Size=File::Size_Get(MI->Config.File_Names[Pos]);
- MI->Config.File_Sizes.push_back(Size);
- MI->Config.File_Size+=Size;
- }
- }
- }
-
- //Partial file handling
- Ztring Config_Partial_Begin=MI->Config.File_Partial_Begin_Get();
- if (!Config_Partial_Begin.empty() && Config_Partial_Begin[0]>=__T('0') && Config_Partial_Begin[0]<=__T('9'))
- {
- if (Config_Partial_Begin.find(__T('%'))==Config_Partial_Begin.size()-1)
- Partial_Begin=float64_int64s(MI->Config.File_Size*Config_Partial_Begin.To_float64()/100);
- else
- Partial_Begin=Config_Partial_Begin.To_int64u();
- if (Partial_Begin)
- F.GoTo(Partial_Begin);
- }
- else
- Partial_Begin=0;
- Ztring Config_Partial_End=MI->Config.File_Partial_End_Get();
- if (!Config_Partial_End.empty() && Config_Partial_End[0]>=__T('0') && Config_Partial_End[0]<=__T('9'))
- {
- if (Config_Partial_End.find(__T('%'))==Config_Partial_End.size()-1)
- Partial_End=float64_int64s(MI->Config.File_Size*Config_Partial_End.To_float64()/100);
- else
- Partial_End=Config_Partial_End.To_int64u();
- }
- else
- Partial_End=(int64u)-1;
- if (Partial_Begin>MI->Config.File_Size)
- Partial_Begin=0; //Wrong value
- if (Partial_Begin>Partial_End)
- Partial_Begin=0; //Wrong value
-
- //Parser
- MI->Open_Buffer_Init((Partial_End<=MI->Config.File_Size?Partial_End:MI->Config.File_Size)-Partial_Begin, File_Name);
-
- //Buffer
- MI->Option(__T("File_Buffer_Size_Hint_Pointer"), Ztring::ToZtring((size_t)(&MI->Config.File_Buffer_Size_ToRead)));
- MI->Config.File_Buffer_Repeat_IsSupported=true;
-
- //Test the format with buffer
- return Format_Test_PerParser_Continue(MI);
-}
-
-//---------------------------------------------------------------------------
-size_t Reader_File::Format_Test_PerParser_Continue (MediaInfo_Internal* MI)
-{
- if (MI == NULL)
- return 0;
-
- bool StopAfterFilled=MI->Config.File_StopAfterFilled_Get();
- bool ShouldContinue=true;
- if (MI->Info)
- Status=MI->Info->Status;
-
- //Previous data
- if (MI->Config.File_Buffer_Repeat)
- {
- MI->Config.File_Buffer_Repeat=false;
- #if MEDIAINFO_DEMUX
- MI->Config.Demux_EventWasSent=false;
- #endif //MEDIAINFO_DEMUX
-
- Status=MI->Open_Buffer_Continue(MI->Config.File_Buffer, MI->Config.File_Buffer_Size);
-
- #if MEDIAINFO_READTHREAD
- if (ThreadInstance && !MI->Config.File_Buffer_Repeat)
- {
- CS.Enter();
- Buffer_Begin+=MI->Config.File_Buffer_Size;
- #ifdef WINDOWS
- if (Buffer_Begin==Buffer_Max)
- {
- CS.Leave();
- SetEvent(Condition_WaitingForMorePlace);
- }
- else
- #endif //WINDOWS
- CS.Leave();
- }
- #endif //MEDIAINFO_READTHREAD
-
- #if MEDIAINFO_DEMUX
- //Demux
- if (MI->Config.Demux_EventWasSent)
- return 2; //Must return immediately
- #endif //MEDIAINFO_DEMUX
-
- //Threading
- if (MI->IsTerminating())
- return 1; //Termination is requested
-
- if (Status[File__Analyze::IsFinished] || (StopAfterFilled && Status[File__Analyze::IsFilled]))
- ShouldContinue=false;
- }
-
- #if MEDIAINFO_DEMUX
- //PerPacket
- if (ShouldContinue && MI->Config.Demux_EventWasSent)
- {
- MI->Config.Demux_EventWasSent=false;
-
- Status=MI->Open_Buffer_Continue(NULL, 0);
-
- //Demux
- if (MI->Config.Demux_EventWasSent)
- return 2; //Must return immediately
-
- //Threading
- if (MI->IsTerminating())
- return 1; //Termination is requested
-
- if (Status[File__Analyze::IsFinished] || (StopAfterFilled && Status[File__Analyze::IsFilled]))
- ShouldContinue=false;
- }
- #endif //MEDIAINFO_DEMUX
-
- if (ShouldContinue)
- {
- //Test the format with buffer
- while (!(Status[File__Analyze::IsFinished] || (StopAfterFilled && Status[File__Analyze::IsFilled])))
- {
- //Seek (if needed)
- if (MI->Open_Buffer_Continue_GoTo_Get()!=(int64u)-1)
- {
- #ifdef MEDIAINFO_DEBUG
- std::cout<<std::hex<<Reader_File_Offset<<" - "<<Reader_File_Offset+Reader_File_BytesRead<<" : "<<std::dec<<Reader_File_BytesRead<<" bytes"<<std::endl;
- Reader_File_Offset=MI->Open_Buffer_Continue_GoTo_Get();
- Reader_File_BytesRead=0;
- Reader_File_Count++;
- #endif //MEDIAINFO_DEBUG
-
- #if MEDIAINFO_READTHREAD
- if (ThreadInstance)
- {
- ThreadInstance->RequestTerminate();
- SetEvent(Condition_WaitingForMorePlace);
- while (!ThreadInstance->IsExited())
- Sleep(0);
- #ifdef WINDOWS
- CloseHandle(Condition_WaitingForMorePlace);
- CloseHandle(Condition_WaitingForMoreData);
- #endif //WINDOWS
- delete ThreadInstance; ThreadInstance=NULL;
-
- MI->Config.File_Buffer=NULL;
- MI->Config.File_Buffer_Size=0;
- MI->Config.File_Buffer_Size_Max=0;
- Buffer_Max=0;
- delete[] Buffer; Buffer=NULL;
- Buffer_Begin=0;
- Buffer_End=0;
- Buffer_End2=0;
- IsLooping=false;
- }
- if (Buffer_End2!=(size_t)-1)
- Buffer_End2=0;
- #endif //MEDIAINFO_READTHREAD
-
- int64u GoTo=Partial_Begin+MI->Open_Buffer_Continue_GoTo_Get();
- MI->Config.File_Current_Offset=0;
- int64u Buffer_NoJump_Temp=Buffer_NoJump;
- if (MI->Config.File_Names.size()>1)
- {
- size_t Pos;
- #if MEDIAINFO_SEEK
- if (MI->Config.File_GoTo_IsFrameOffset)
- {
- Pos=(size_t)MI->Open_Buffer_Continue_GoTo_Get(); //File_GoTo is the frame offset in that case
- MI->Info->File_GoTo=(int64u)-1;
- MI->Config.File_GoTo_IsFrameOffset=false;
- GoTo=0;
- }
- else
- #endif //MEDIAINFO_SEEK
- {
- for (Pos=0; Pos<MI->Config.File_Sizes.size(); Pos++)
- {
- if (GoTo>=MI->Config.File_Sizes[Pos])
- {
- GoTo-=MI->Config.File_Sizes[Pos];
- MI->Config.File_Current_Offset+=MI->Config.File_Sizes[Pos];
- }
- else
- break;
- }
- if (Pos>=MI->Config.File_Sizes.size())
- break;
- }
- if (Pos!=MI->Config.File_Names_Pos-1)
- {
- F.Close();
- F.Open(MI->Config.File_Names[Pos]);
- if (Pos>=MI->Config.File_Sizes.size())
- {
- MI->Config.File_Sizes.resize(Pos, (int64u)-1);
- MI->Config.File_Sizes.push_back(F.Size_Get());
- }
- MI->Config.File_Names_Pos=Pos+1;
- MI->Config.File_Current_Size=MI->Config.File_Current_Offset+F.Size_Get();
- Buffer_NoJump_Temp=0;
- }
- }
-
- if (GoTo>=F.Size_Get())
- break; //Seek requested, but on a file bigger in theory than what is in the real file, we can't do this
- if (!(GoTo>F.Position_Get() && GoTo<F.Position_Get()+Buffer_NoJump_Temp)) //No smal jumps
- {
- if (!F.GoTo(GoTo))
- break; //File is not seekable
-
- MI->Open_Buffer_Init((int64u)-1, MI->Config.File_Current_Offset+F.Position_Get()-Partial_Begin);
- }
- }
-
- #if MEDIAINFO_READTHREAD
- if (ThreadInstance==NULL && Buffer_End2!=(size_t)-1 && Buffer_End2>=16*1024*1024)
- {
- if (!MI->Config.File_IsGrowing && MI->Config.File_Names.size()==1)
- {
- delete[] MI->Config.File_Buffer; MI->Config.File_Buffer=NULL;
- MI->Config.File_Buffer_Size_Max=0;
- Buffer_Max=MI->Config.File_Buffer_Read_Size_Get();
- Buffer=new int8u[Buffer_Max];
- Buffer_Begin=0;
- Buffer_End=0;
- Buffer_End2=0;
- IsLooping=false;
- #ifdef WINDOWS
- Condition_WaitingForMorePlace=CreateEvent(NULL, FALSE, FALSE, NULL);
- Condition_WaitingForMoreData=CreateEvent(NULL, FALSE, FALSE, NULL);
- #endif //WINDOWS
- ThreadInstance=new Reader_File_Thread();
- ThreadInstance->Base=this;
- ThreadInstance->Run();
- }
- else
- Buffer_End2=(size_t)-1;
- }
- #endif //MEDIAINFO_READTHREAD
-
- //Handling of hints
- if (MI->Config.File_Buffer_Size_ToRead==0)
- break; //Problem while config
- if (
- #if MEDIAINFO_READTHREAD
- ThreadInstance==NULL &&
- #endif //MEDIAINFO_READTHREAD
- MI->Config.File_Buffer_Size_ToRead>MI->Config.File_Buffer_Size_Max)
- {
- delete[] MI->Config.File_Buffer;
- if (MI->Config.File_Buffer_Size_Max==0)
- MI->Config.File_Buffer_Size_Max=1;
- while (MI->Config.File_Buffer_Size_ToRead>MI->Config.File_Buffer_Size_Max)
- MI->Config.File_Buffer_Size_Max*=2;
- MI->Config.File_Buffer=new int8u[MI->Config.File_Buffer_Size_Max];
- }
-
- //Testing multiple file per stream
- if (
- #if MEDIAINFO_READTHREAD
- ThreadInstance==NULL &&
- #endif //MEDIAINFO_READTHREAD
- F.Position_Get()>=F.Size_Get())
- {
- #if MEDIAINFO_ADVANCED2
- MI->Open_Buffer_SegmentChange();
- #endif //MEDIAINFO_ADVANCED2
- if (MI->Config.File_Names_Pos<MI->Config.File_Names.size())
- {
- MI->Config.File_Current_Offset+=MI->Config.File_Names_Pos<=MI->Config.File_Sizes.size()?MI->Config.File_Sizes[MI->Config.File_Names_Pos-1]:F.Size_Get();
- F.Close();
- #if MEDIAINFO_EVENTS
- MI->Config.Event_SubFile_Start(MI->Config.File_Names[MI->Config.File_Names_Pos]);
- #endif //MEDIAINFO_EVENTS
- F.Open(MI->Config.File_Names[MI->Config.File_Names_Pos]);
- if (MI->Config.File_Names_Pos>=MI->Config.File_Sizes.size())
- {
- MI->Config.File_Sizes.resize(MI->Config.File_Names_Pos, (int64u)-1);
- MI->Config.File_Sizes.push_back(F.Size_Get());
- }
- MI->Config.File_Names_Pos++;
- MI->Config.File_Current_Size+=F.Size_Get();
- }
- }
-
- #if MEDIAINFO_READTHREAD
- if (ThreadInstance)
- {
- CS.Enter();
- #ifdef WINDOWS
- if (Buffer_End2+Buffer_End-Buffer_Begin<Buffer_Max/8*7)
- {
- CS.Leave();
- SetEvent(Condition_WaitingForMorePlace);
- CS.Enter();
- }
- #endif //WINDOWS
-
- for (;;)
- {
- MI->Config.File_Buffer_Size=Buffer_End-Buffer_Begin;
-
- if (MI->Config.File_Buffer_Size)
- break;
-
- if (!ThreadInstance->IsExited())
- {
- CS.Leave();
- #ifdef WINDOWS
- WaitForSingleObject(Condition_WaitingForMoreData, INFINITE);
- #else //WINDOWS
- Sleep(0);
- #endif //WINDOWS
- CS.Enter();
- }
- else
- {
- if (IsLooping)
- {
- IsLooping=false;
- Buffer_End=Buffer_End2;
- Buffer_End2=0;
- Buffer_Begin=0;
- }
-
- MI->Config.File_Buffer_Size=Buffer_End-Buffer_Begin;
- break;
- }
- }
- MI->Config.File_Buffer=Buffer+Buffer_Begin;
- CS.Leave();
- if (MI->Config.File_Buffer_Size>MI->Config.File_Buffer_Size_ToRead)
- MI->Config.File_Buffer_Size=MI->Config.File_Buffer_Size_ToRead;
- }
- else
- #endif //MEDIAINFO_READTHREAD
- {
- MI->Config.File_Buffer_Size=F.Read(MI->Config.File_Buffer, (F.Position_Get()+MI->Config.File_Buffer_Size_ToRead<(Partial_End<=MI->Config.File_Size?Partial_End:MI->Config.File_Size))?MI->Config.File_Buffer_Size_ToRead:((size_t)((Partial_End<=MI->Config.File_Size?Partial_End:MI->Config.File_Size)-F.Position_Get())));
- #if MEDIAINFO_READTHREAD
- if (ThreadInstance==NULL && Buffer_End2!=(size_t)-1)
- Buffer_End2+=MI->Config.File_Buffer_Size;
- #endif //MEDIAINFO_READTHREAD
- }
-
- /* High CPU usage
- #if MEDIAINFO_EVENTS
- if (MI->Config.File_Buffer_Size)
- {
- struct MediaInfo_Event_Global_BytesRead_0 Event;
- memset(&Event, 0xFF, sizeof(struct MediaInfo_Event_Generic));
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_Global_BytesRead, 0);
- Event.EventSize=sizeof(struct MediaInfo_Event_Global_BytesRead_0);
- Event.StreamIDs_Size=0;
- Event.StreamOffset=F.Position_Get()-MI->Config.File_Buffer_Size;
- Event.Content_Size=MI->Config.File_Buffer_Size;
- Event.Content=MI->Config.File_Buffer;
- MI->Config.Event_Send(NULL, (const int8u*)&Event, sizeof(MediaInfo_Event_Global_BytesRead_0));
- }
- #endif //MEDIAINFO_EVENTS
- */
-
- //Testing growing files
- int64u Growing_Temp=(int64u)-1;
- if (MI->Config.ParseSpeed>=1.0 && !MI->Config.File_IsGrowing && MI->Config.File_Current_Offset+F.Position_Get()>=MI->Config.File_Size)
- {
- if (MI->Config.File_Names.size()==1)
- {
- Growing_Temp=F.Size_Get();
- if (MI->Config.File_Size!=Growing_Temp)
- MI->Config.File_IsGrowing=true;
- }
- else if (MI->Config.File_TestContinuousFileNames_Get())
- {
- Growing_Temp=MI->Config.File_Names.size();
- MI->TestContinuousFileNames();
- if (MI->Config.File_Names.size()!=Growing_Temp)
- MI->Config.File_IsGrowing=true;
- }
- }
- if (MI->Config.File_IsNotGrowingAnymore)
- {
- MI->Config.File_Current_Size=MI->Config.File_Size=F.Size_Get();
- MI->Open_Buffer_Init(MI->Config.File_Size, F.Position_Get()-MI->Config.File_Buffer_Size);
- MI->Config.File_IsGrowing=false;
- MI->Config.File_IsNotGrowingAnymore=false;
- }
- if (MI->Config.File_IsGrowing && (Growing_Temp!=(int64u)-1 || MI->Config.File_Current_Offset+F.Position_Get()>=MI->Config.File_Size))
- {
- for (size_t CountOfSeconds=0; CountOfSeconds<(size_t)MI->Config.File_GrowingFile_Delay_Get(); CountOfSeconds++)
- {
- if (MI->Config.File_Names.size()==1)
- {
- Growing_Temp=F.Size_Get();
- if (MI->Config.File_Size!=Growing_Temp)
- {
- MI->Config.File_Current_Size=MI->Config.File_Size=Growing_Temp;
- MI->Open_Buffer_Init(MI->Config.File_Size, MI->Config.File_Current_Offset+F.Position_Get()-MI->Config.File_Buffer_Size);
- break;
- }
- }
- else
- {
- Growing_Temp=MI->Config.File_Names.size();
- MI->TestContinuousFileNames();
- if (MI->Config.File_Names.size()!=Growing_Temp)
- {
- MI->Open_Buffer_Init(MI->Config.File_Size, MI->Config.File_Current_Offset+F.Position_Get()-MI->Config.File_Buffer_Size);
- break;
- }
- }
- #ifdef WINDOWS
- Sleep(1000);
- #endif //WINDOWS
- }
- }
-
- #ifdef MEDIAINFO_DEBUG
- Reader_File_BytesRead_Total+=MI->Config.File_Buffer_Size;
- Reader_File_BytesRead+=MI->Config.File_Buffer_Size;
- #endif //MEDIAINFO_DEBUG
-
- //Parser
- Status=MI->Open_Buffer_Continue(MI->Config.File_Buffer, MI->Config.File_Buffer_Size);
-
- #if MEDIAINFO_READTHREAD
- if (ThreadInstance && !MI->Config.File_Buffer_Repeat)
- {
- CS.Enter();
- Buffer_Begin+=MI->Config.File_Buffer_Size;
- #ifdef WINDOWS
- if (Buffer_Begin==Buffer_Max)
- {
- CS.Leave();
- SetEvent(Condition_WaitingForMorePlace);
- }
- else
- #endif //WINDOWS
- CS.Leave();
- }
- #endif //MEDIAINFO_READTHREAD
-
- if (MI->Config.File_Buffer_Size==0)
- {
- #if MEDIAINFO_EVENTS
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0xF0F00101, "File read error");
- #endif //MEDIAINFO_EVENTS
- break;
- }
-
- #if MEDIAINFO_DEMUX
- if (MI->Config.Demux_EventWasSent)
- return 2; //Must return immediately
- #endif //MEDIAINFO_DEMUX
-
- //Threading
- if (MI->IsTerminating())
- break; //Termination is requested
- }
- }
-
- //Deleting buffer
- #if MEDIAINFO_READTHREAD
- if (ThreadInstance)
- {
- ThreadInstance->RequestTerminate();
- SetEvent(Condition_WaitingForMorePlace);
- while (!ThreadInstance->IsExited())
- Sleep(0);
- #ifdef WINDOWS
- CloseHandle(Condition_WaitingForMorePlace);
- CloseHandle(Condition_WaitingForMoreData);
- #endif //WINDOWS
- delete ThreadInstance; ThreadInstance=NULL;
-
- MI->Config.File_Buffer=NULL;
- MI->Config.File_Buffer_Size=0;
- MI->Config.File_Buffer_Size_Max=0;
- Buffer_Max=0;
- delete[] Buffer; Buffer=NULL;
- Buffer_Begin=0;
- Buffer_End=0;
- Buffer_End2=0;
- IsLooping=false;
- }
- else
- #endif //MEDIAINFO_READTHREAD
- {
- delete[] MI->Config.File_Buffer; MI->Config.File_Buffer=NULL;
- MI->Config.File_Buffer_Size_Max=0;
- }
-
- #ifdef MEDIAINFO_DEBUG
- std::cout<<std::hex<<Reader_File_Offset<<" - "<<Reader_File_Offset+Reader_File_BytesRead<<" : "<<std::dec<<Reader_File_BytesRead<<" bytes"<<std::endl;
- std::cout<<"Total: "<<std::dec<<Reader_File_BytesRead_Total<<" bytes in "<<Reader_File_Count<<" blocks"<<std::endl;
- #endif //MEDIAINFO_DEBUG
-
- if (!MI->Config.File_KeepInfo_Get())
- {
- //File
- F.Close();
- }
-
- //Is this file detected?
- if (!Status[File__Analyze::IsAccepted])
- return 0;
-
- MI->Open_Buffer_Finalize();
-
- #if MEDIAINFO_DEMUX
- if (MI->Config.Demux_EventWasSent)
- return 2; //Must return immediately
- #endif //MEDIAINFO_DEMUX
-
- return 1;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t Reader_File::Format_Test_PerParser_Seek (MediaInfo_Internal* MI, size_t Method, int64u Value, int64u ID)
-{
- size_t ToReturn=MI->Open_Buffer_Seek(Method, Value, ID);
-
- if (ToReturn==0 || ToReturn==1)
- {
- //Reset
- Status=0;
- }
-
- return ToReturn;
-}
-#endif //MEDIAINFO_SEEK
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_File.h b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_File.h
deleted file mode 100644
index 3210ccca4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_File.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give information about a lot of media files
-// Dispatch the file to be tested by all containers
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef Reader_FileH
-#define Reader_FileH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Reader/Reader__Base.h"
-#include "ZenLib/File.h"
-#include "ZenLib/Thread.h"
-#include "ZenLib/CriticalSection.h"
-#if MEDIAINFO_READTHREAD
- #ifdef WINDOWS
- #undef __TEXT
- #include "Windows.h"
- #endif //WINDOWS
-#endif //MEDIAINFO_READTHREAD
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-/// @brief Reader_File
-//***************************************************************************
-
-#if MEDIAINFO_READTHREAD
-class Reader_File;
-class Reader_File_Thread : public Thread
-{
-public:
- Reader_File* Base;
- size_t ReadSize_Max;
- void Entry();
-};
-#endif //MEDIAINFO_READTHREAD
-
-class Reader_File : public Reader__Base
-{
-public :
- //Constructor/Destructor
- virtual ~Reader_File();
-
- //Format testing
- size_t Format_Test(MediaInfo_Internal* MI, String File_Name);
- size_t Format_Test_PerParser(MediaInfo_Internal* MI, const String &File_Name);
- size_t Format_Test_PerParser_Continue (MediaInfo_Internal* MI);
- size_t Format_Test_PerParser_Seek (MediaInfo_Internal* MI, size_t Method, int64u Value, int64u ID);
-
- ZenLib::File F;
- std::bitset<32> Status;
- int64u Partial_Begin;
- int64u Partial_End;
-
- //Thread
- #if MEDIAINFO_READTHREAD
- Reader_File_Thread* ThreadInstance;
- int8u* Buffer;
- size_t Buffer_Max;
- size_t Buffer_Begin;
- size_t Buffer_End;
- size_t Buffer_End2; //Is also used for counting bytes before activating the thread
- bool IsLooping;
- #ifdef WINDOWS
- HANDLE Condition_WaitingForMorePlace;
- HANDLE Condition_WaitingForMoreData;
- #endif //WINDOWS
- #endif //MEDIAINFO_READTHREAD
- CriticalSection CS;
- MediaInfo_Internal* MI_Internal;
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader__Base.h b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader__Base.h
deleted file mode 100644
index b6071c58a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader__Base.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give information about a lot of media files
-// Dispatch the file to be tested by all containers
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef Reader__BaseH
-#define Reader__BaseH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/MediaInfo_Internal.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-/// @brief Reader__Base
-//***************************************************************************
-
-class Reader__Base
-{
-public :
- //Constructor/Destructor
- virtual ~Reader__Base() {}
-
- //Format testing
- virtual size_t Format_Test(MediaInfo_Internal* MI, String File_Name)=0;
- virtual size_t Format_Test_PerParser_Continue (MediaInfo_Internal* /*MI*/) {return 0;};
- #if MEDIAINFO_SEEK
- virtual size_t Format_Test_PerParser_Seek (MediaInfo_Internal*, size_t, int64u, int64u) {return 0;};
- #endif //MEDIAINFO_SEEK
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl.cpp b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl.cpp
deleted file mode 100644
index 6eead5765..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl.cpp
+++ /dev/null
@@ -1,863 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// For user: you can disable or enable it
-//#define MEDIAINFO_DEBUG
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_LIBCURL_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Reader/Reader_libcurl.h"
-#include "MediaInfo/File__Analyze.h"
-#if defined MEDIAINFO_LIBCURL_DLL_RUNTIME
- //Copy of cURL include files
- #include "MediaInfo/Reader/Reader_libcurl_Include.h"
-#else
- #define CURL_STATICLIB
- #undef __TEXT
- #include "curl/curl.h"
-#endif
-#include <ctime>
-#include "ZenLib/File.h"
-using namespace ZenLib;
-using namespace std;
-#ifdef MEDIAINFO_DEBUG
- #include <iostream>
-#endif // MEDIAINFO_DEBUG
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// libcurl stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-struct Reader_libcurl::curl_data
-{
- MediaInfo_Internal* MI;
- CURL* Curl;
- char ErrorBuffer[CURL_ERROR_SIZE];
- #if MEDIAINFO_NEXTPACKET
- CURLM* CurlM;
- #endif MEDIAINFO_NEXTPACKET
- struct curl_slist* HttpHeader;
- std::bitset<32> Status;
- String File_Name;
- std::string Ssl_CertificateFileName;
- std::string Ssl_CertificateFormat;
- std::string Ssl_PrivateKeyFileName;
- std::string Ssl_PrivateKeyFormat;
- std::string Ssl_CertificateAuthorityFileName;
- std::string Ssl_CertificateAuthorityPath;
- std::string Ssl_CertificateRevocationListFileName;
- bool Ssl_IgnoreSecurity;
- std::string Ssh_KnownHostsFileName;
- std::string Ssh_PublicKeyFileName;
- std::string Ssh_PrivateKeyFileName;
- bool Ssh_IgnoreSecurity;
- bool Init_AlreadyDone;
- bool Init_NotAFile;
- #if MEDIAINFO_NEXTPACKET
- bool NextPacket;
- #endif MEDIAINFO_NEXTPACKET
- time_t Time_Max;
- #ifdef MEDIAINFO_DEBUG
- int64u Debug_BytesRead_Total;
- int64u Debug_BytesRead;
- int64u Debug_Count;
- #endif // MEDIAINFO_DEBUG
- #if MEDIAINFO_EVENTS
- int64u Stream_Offset;
- #endif //MEDIAINFO_EVENTS
-
- curl_data()
- {
- MI=NULL;
- Curl=NULL;
- ErrorBuffer[0]='\0';
- #if MEDIAINFO_NEXTPACKET
- CurlM=NULL;
- #endif MEDIAINFO_NEXTPACKET
- HttpHeader=NULL;
- Ssl_IgnoreSecurity=false;
- Ssh_IgnoreSecurity=false;
- Init_AlreadyDone=false;
- Init_NotAFile=false;
- #if MEDIAINFO_NEXTPACKET
- NextPacket=false;
- #endif MEDIAINFO_NEXTPACKET
- Time_Max=0;
- #ifdef MEDIAINFO_DEBUG
- Debug_BytesRead_Total=0;
- Debug_BytesRead=0;
- Debug_Count=1;
- #endif // MEDIAINFO_DEBUG
- #if MEDIAINFO_EVENTS
- Stream_Offset=(int64u)-1;
- #endif //MEDIAINFO_EVENTS
- }
-};
-
-//---------------------------------------------------------------------------
-size_t libcurl_WriteData_CallBack(void *ptr, size_t size, size_t nmemb, void *data)
-{
- #ifdef MEDIAINFO_DEBUG
- ((Reader_libcurl::curl_data*)data)->Debug_BytesRead_Total+=size*nmemb;
- ((Reader_libcurl::curl_data*)data)->Debug_BytesRead+=size*nmemb;
- #endif //MEDIAINFO_DEBUG
-
- //Init
- if (!((Reader_libcurl::curl_data*)data)->Init_AlreadyDone)
- {
- double File_SizeD;
- CURLcode Result=curl_easy_getinfo(((Reader_libcurl::curl_data*)data)->Curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &File_SizeD);
- if (Result==CURLE_OK && File_SizeD==0)
- {
- ((Reader_libcurl::curl_data*)data)->Init_NotAFile=true;
- return 0; //Great chances it is FTP file listing due to interogation mark in the file name
- }
- else if (Result==CURLE_OK && File_SizeD!=-1)
- {
- ((Reader_libcurl::curl_data*)data)->MI->Open_Buffer_Init((int64u)File_SizeD, ((Reader_libcurl::curl_data*)data)->File_Name);
- }
- else
- ((Reader_libcurl::curl_data*)data)->MI->Open_Buffer_Init((int64u)-1, ((Reader_libcurl::curl_data*)data)->File_Name);
- #if MEDIAINFO_EVENTS
- ((Reader_libcurl::curl_data*)data)->Stream_Offset=0;
- #endif //MEDIAINFO_EVENTS
- ((Reader_libcurl::curl_data*)data)->Init_AlreadyDone=true;
- }
-
- #if MEDIAINFO_EVENTS
- if (size*nmemb)
- {
- struct MediaInfo_Event_Global_BytesRead_0 Event;
- memset(&Event, 0xFF, sizeof(struct MediaInfo_Event_Generic));
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_Global_BytesRead, 0);
- Event.EventSize=sizeof(struct MediaInfo_Event_Global_BytesRead_0);
- Event.StreamIDs_Size=0;
- Event.StreamOffset=((Reader_libcurl::curl_data*)data)->Stream_Offset;
- Event.Content_Size=size*nmemb;
- Event.Content=(int8u*)ptr;
- ((Reader_libcurl::curl_data*)data)->MI->Config.Event_Send(NULL, (const int8u*)&Event, sizeof(MediaInfo_Event_Global_BytesRead_0));
- ((Reader_libcurl::curl_data*)data)->Stream_Offset+=size*nmemb;
- }
- #endif //MEDIAINFO_EVENTS
-
- //Continue
- ((Reader_libcurl::curl_data*)data)->Status=((Reader_libcurl::curl_data*)data)->MI->Open_Buffer_Continue((int8u*)ptr, size*nmemb);
- time_t CurrentTime = time(0);
-
- if (((Reader_libcurl::curl_data*)data)->Status[File__Analyze::IsFinished] || (((Reader_libcurl::curl_data*)data)->Time_Max && CurrentTime>=((Reader_libcurl::curl_data*)data)->Time_Max))
- {
- return 0;
- }
-
- //GoTo
- if (((Reader_libcurl::curl_data*)data)->MI->Open_Buffer_Continue_GoTo_Get()!=(int64u)-1)
- {
- return 0;
- }
-
- //Continue parsing
- return size*nmemb;
-}
-
-Ztring Reader_libcurl_FileNameWithoutPassword(const Ztring &FileName)
-{
- Ztring FileName_Modified(FileName);
- size_t Begin=FileName_Modified.find(__T(':'), 6);
- size_t End=FileName_Modified.find(__T('@'));
- if (Begin!=string::npos && End!=string::npos && Begin<End)
- FileName_Modified.erase(Begin, End-Begin);
- return FileName_Modified;
-}
-
-bool Reader_libcurl_HomeIsSet()
-{
- return getenv("HOME")?true:false;
-}
-
-Ztring Reader_libcurl_ExpandFileName(const Ztring &FileName)
-{
- Ztring FileName_Modified(FileName);
- if (FileName_Modified.find(__T("$HOME"))==0)
- {
- char* env=getenv("HOME");
- if (env)
- FileName_Modified.FindAndReplace(__T("$HOME"), Ztring().From_Local(env));
- }
- if (FileName_Modified.find(__T("~"))==0)
- {
- char* env=getenv("HOME");
- if (env)
- FileName_Modified.FindAndReplace(__T("~"), Ztring().From_Local(env));
- }
- return FileName_Modified;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Reader_libcurl::Reader_libcurl ()
-{
- Curl_Data=NULL;
-}
-
-//---------------------------------------------------------------------------
-Reader_libcurl::~Reader_libcurl ()
-{
- if (Curl_Data==NULL)
- return;
-
- //Cleanup
- #if MEDIAINFO_NEXTPACKET
- if (Curl_Data->CurlM)
- {
- curl_multi_remove_handle(Curl_Data->CurlM, Curl_Data->Curl);
- curl_multi_cleanup(Curl_Data->CurlM);
- }
- #endif //MEDIAINFO_NEXTPACKET
- if (Curl_Data->Curl)
- curl_easy_cleanup(Curl_Data->Curl);
- if (Curl_Data->HttpHeader)
- curl_slist_free_all(Curl_Data->HttpHeader);
- delete Curl_Data; //Curl_Data=NULL;
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t Reader_libcurl::Format_Test(MediaInfo_Internal* MI, String File_Name)
-{
- #if defined MEDIAINFO_LIBCURL_DLL_RUNTIME
- if (libcurl_Module_Count==0)
- {
- size_t Errors=0;
-
- /* Load library */
- #ifdef MEDIAINFO_GLIBC
- libcurl_Module=g_module_open(MEDIAINFODLL_NAME, G_MODULE_BIND_LAZY);
- #elif defined (_WIN32) || defined (WIN32)
- libcurl_Module=LoadLibrary(MEDIAINFODLL_NAME);
- #else
- libcurl_Module=dlopen(MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!libcurl_Module)
- libcurl_Module=dlopen("./" MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!libcurl_Module)
- libcurl_Module=dlopen("/usr/local/lib/" MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!libcurl_Module)
- libcurl_Module=dlopen("/usr/local/lib64/" MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!libcurl_Module)
- libcurl_Module=dlopen("/usr/lib/" MEDIAINFODLL_NAME, RTLD_LAZY);
- if (!libcurl_Module)
- libcurl_Module=dlopen("/usr/lib64/" MEDIAINFODLL_NAME, RTLD_LAZY);
- #endif
- if (!libcurl_Module)
- {
- #if MEDIAINFO_EVENTS
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", Libcurl library is not found"));
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
-
- /* Load methods */
- MEDIAINFO_ASSIGN (curl_easy_init, "curl_easy_init")
- MEDIAINFO_ASSIGN (curl_easy_setopt, "curl_easy_setopt")
- MEDIAINFO_ASSIGN (curl_easy_perform, "curl_easy_perform")
- MEDIAINFO_ASSIGN (curl_easy_cleanup, "curl_easy_cleanup")
- MEDIAINFO_ASSIGN (curl_easy_getinfo, "curl_easy_getinfo")
- MEDIAINFO_ASSIGN (curl_slist_append, "curl_slist_append")
- MEDIAINFO_ASSIGN (curl_slist_free_all, "curl_slist_free_all")
- MEDIAINFO_ASSIGN (curl_easy_duphandle, "curl_easy_duphandle")
- MEDIAINFO_ASSIGN (curl_easy_strerror, "curl_easy_strerror")
- MEDIAINFO_ASSIGN (curl_version_info, "curl_version_info")
- MEDIAINFO_ASSIGN (curl_multi_init, "curl_multi_init")
- MEDIAINFO_ASSIGN (curl_multi_add_handle, "curl_multi_add_handle")
- MEDIAINFO_ASSIGN (curl_multi_remove_handle, "curl_multi_remove_handle")
- MEDIAINFO_ASSIGN (curl_multi_perform, "curl_multi_perform")
- MEDIAINFO_ASSIGN (curl_multi_cleanup, "curl_multi_cleanup")
- if (Errors>0)
- {
- #if MEDIAINFO_EVENTS
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", Libcurl library is not correctly loaded"));
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
-
- libcurl_Module_Count++;
- }
- #endif //defined MEDIAINFO_LIBCURL_DLL_RUNTIME
-
- #if MEDIAINFO_EVENTS
- {
- string File_Name_Local=Ztring(File_Name).To_Local();
- wstring File_Name_Unicode=Ztring(File_Name).To_Unicode();
- struct MediaInfo_Event_General_Start_0 Event;
- memset(&Event, 0xFF, sizeof(struct MediaInfo_Event_General_Start_0));
- Event.StreamIDs_Size=0;
- Event.EventCode=MediaInfo_EventCode_Create(MediaInfo_Parser_None, MediaInfo_Event_General_Start, 0);
- Event.Stream_Size=(int64u)-1;
- Event.FileName=File_Name_Local.c_str();
- Event.FileName_Unicode=File_Name_Unicode.c_str();
- MI->Config.Event_Send(NULL, (const int8u*)&Event, sizeof(MediaInfo_Event_General_Start_0));
- }
- #endif //MEDIAINFO_EVENTS
-
- //With Parser MultipleParsing
- return Format_Test_PerParser(MI, File_Name);
-}
-
-//---------------------------------------------------------------------------
-size_t Reader_libcurl::Format_Test_PerParser(MediaInfo_Internal* MI, const String &File_Name)
-{
- #if defined MEDIAINFO_LIBCURL_DLL_RUNTIME
- if (libcurl_Module_Count==0)
- return 0; //No libcurl library
- #endif //defined MEDIAINFO_LIBCURL_DLL_RUNTIME
-
- Curl_Data=new curl_data();
- Curl_Data->Ssl_CertificateFileName=MediaInfoLib::Config.Ssl_CertificateFileName_Get().To_Local();
- Curl_Data->Ssl_CertificateFormat=MediaInfoLib::Config.Ssl_CertificateFormat_Get().To_Local();
- Curl_Data->Ssl_PrivateKeyFileName=MediaInfoLib::Config.Ssl_PrivateKeyFileName_Get().To_Local();
- Curl_Data->Ssl_PrivateKeyFormat=MediaInfoLib::Config.Ssl_PrivateKeyFormat_Get().To_Local();
- Curl_Data->Ssl_CertificateAuthorityFileName=MediaInfoLib::Config.Ssl_CertificateAuthorityFileName_Get().To_Local();
- Curl_Data->Ssl_CertificateAuthorityPath=MediaInfoLib::Config.Ssl_CertificateAuthorityPath_Get().To_Local();
- Curl_Data->Ssl_CertificateRevocationListFileName=MediaInfoLib::Config.Ssl_CertificateRevocationListFileName_Get().To_Local();
- Curl_Data->Ssl_IgnoreSecurity=MediaInfoLib::Config.Ssl_IgnoreSecurity_Get();
- Curl_Data->Ssh_PublicKeyFileName=Reader_libcurl_ExpandFileName(MediaInfoLib::Config.Ssh_PublicKeyFileName_Get()).To_Local();
- if (Curl_Data->Ssh_PublicKeyFileName.empty())
- {
- if (Reader_libcurl_HomeIsSet())
- {
- Ztring Temp=Reader_libcurl_ExpandFileName(__T("$HOME/.ssh/id_rsa.pub"));
- if (File::Exists(Temp))
- Curl_Data->Ssh_PublicKeyFileName=Temp.To_Local();
- }
- else
- {
- if (File::Exists(__T("id_rsa.pub")))
- Curl_Data->Ssh_PublicKeyFileName="id_rsa.pub";
- }
- }
- Curl_Data->Ssh_PrivateKeyFileName=Reader_libcurl_ExpandFileName(MediaInfoLib::Config.Ssh_PrivateKeyFileName_Get()).To_Local();
- if (Curl_Data->Ssh_PrivateKeyFileName.empty())
- {
- if (Reader_libcurl_HomeIsSet())
- {
- Ztring Temp=Reader_libcurl_ExpandFileName(__T("$HOME/.ssh/id_rsa"));
- if (File::Exists(Temp))
- Curl_Data->Ssh_PrivateKeyFileName=Temp.To_Local();
- }
- else
- {
- if (File::Exists(__T("id_rsa")))
- Curl_Data->Ssh_PrivateKeyFileName = "id_rsa";
- }
- }
- Curl_Data->Ssh_KnownHostsFileName=Reader_libcurl_ExpandFileName(MediaInfoLib::Config.Ssh_KnownHostsFileName_Get()).To_Local();
- if (Curl_Data->Ssh_KnownHostsFileName.empty())
- {
- if (Reader_libcurl_HomeIsSet())
- Curl_Data->Ssh_KnownHostsFileName=Reader_libcurl_ExpandFileName(__T("$HOME/.ssh/known_hosts")).To_Local();
- else
- Curl_Data->Ssh_KnownHostsFileName="known_hosts";
- }
- Curl_Data->Ssh_IgnoreSecurity=MediaInfoLib::Config.Ssh_IgnoreSecurity_Get();
- Curl_Data->Curl=curl_easy_init();
- if (Curl_Data->Curl==NULL)
- return 0;
- #if MEDIAINFO_NEXTPACKET
- if (MI->Config.NextPacket_Get())
- {
- Curl_Data->CurlM=curl_multi_init( );
- if (Curl_Data->CurlM==NULL)
- return 0;
- CURLMcode CodeM=curl_multi_add_handle(Curl_Data->CurlM, Curl_Data->Curl);
- if (CodeM!=CURLM_OK)
- return 0;
- Curl_Data->NextPacket=true;
- }
- #endif //MEDIAINFO_NEXTPACKET
- Curl_Data->MI=MI;
- Curl_Data->File_Name=File_Name;
- string FileName_String=Ztring(Curl_Data->File_Name).To_UTF8();
- if (MI->Config.File_TimeToLive_Get())
- Curl_Data->Time_Max=time(0)+(time_t)MI->Config.File_TimeToLive_Get();
- if (!MI->Config.File_Curl_Get(__T("UserAgent")).empty())
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_USERAGENT, MI->Config.File_Curl_Get(__T("UserAgent")).To_Local().c_str());
- if (!MI->Config.File_Curl_Get(__T("Proxy")).empty())
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_PROXY, MI->Config.File_Curl_Get(__T("Proxy")).To_Local().c_str());
- if (!MI->Config.File_Curl_Get(__T("HttpHeader")).empty())
- {
- ZtringList HttpHeaderStrings; HttpHeaderStrings.Separator_Set(0, EOL); //End of line is set depending of the platform: \n on Linux, \r on Mac, or \r\n on Windows
- HttpHeaderStrings.Write(MI->Config.File_Curl_Get(__T("HttpHeader")));
- for (size_t Pos=0; Pos<HttpHeaderStrings.size(); Pos++)
- curl_slist_append(Curl_Data->HttpHeader, HttpHeaderStrings[Pos].To_Local().c_str());
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_HTTPHEADER, Curl_Data->HttpHeader);
- }
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_URL, FileName_String.c_str());
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_FOLLOWLOCATION, 1);
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_MAXREDIRS, 3);
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_WRITEFUNCTION, &libcurl_WriteData_CallBack);
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_WRITEDATA, Curl_Data);
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_ERRORBUFFER, Curl_Data->ErrorBuffer);
- size_t Protocol_Limit=File_Name.find(__T(":"));
- if (Protocol_Limit!=string::npos)
- {
- Ztring Protocol=File_Name;
- Protocol.resize(Protocol_Limit);
- Protocol.MakeLowerCase();
-
- if (Protocol==__T("sftp") || Protocol==__T("scp"))
- {
- if (!Curl_Data->Ssh_PublicKeyFileName.empty())
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_SSH_PUBLIC_KEYFILE, Curl_Data->Ssh_PublicKeyFileName.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- if (Result==CURLE_UNKNOWN_TELNET_OPTION)
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0xF1010101, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", The Curl library you use has no support for secure connections."));
- else
- {
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- }
- Curl_Data->ErrorBuffer[0]='\0';
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
-
- if (!Curl_Data->Ssh_PrivateKeyFileName.empty())
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_SSH_PRIVATE_KEYFILE, Curl_Data->Ssh_PrivateKeyFileName.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- if (Result==CURLE_UNKNOWN_TELNET_OPTION)
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0xF1010101, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", The Curl library you use has no support for secure connections."));
- else
- {
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- }
- Curl_Data->ErrorBuffer[0]='\0';
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
-
- if (!Curl_Data->Ssh_IgnoreSecurity)
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_SSH_KNOWNHOSTS, Curl_Data->Ssh_KnownHostsFileName.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- if (Result==CURLE_UNKNOWN_TELNET_OPTION)
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0xF1010102, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", The Curl library you use has no support for known_host security file, transfer would not be secure."));
- else
- {
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- }
- Curl_Data->ErrorBuffer[0]='\0';
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
- }
-
- if (Protocol==__T("ftps"))
- {
- if (!Curl_Data->Ssl_CertificateFileName.empty())
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_SSLCERT, Curl_Data->Ssl_CertificateFileName.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
-
- if (!Curl_Data->Ssl_CertificateFormat.empty())
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_SSLCERTTYPE, Curl_Data->Ssl_CertificateFormat.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
-
- if (!Curl_Data->Ssl_PrivateKeyFileName.empty())
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_SSLKEY, Curl_Data->Ssl_PrivateKeyFileName.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
-
- if (!Curl_Data->Ssl_PrivateKeyFormat.empty())
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_SSLKEYTYPE, Curl_Data->Ssl_PrivateKeyFormat.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
-
- if (!Curl_Data->Ssl_CertificateAuthorityFileName.empty())
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_CAINFO, Curl_Data->Ssl_CertificateAuthorityFileName.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
-
- if (!Curl_Data->Ssl_CertificateAuthorityPath.empty())
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_CAPATH, Curl_Data->Ssl_CertificateAuthorityPath.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
-
- if (!Curl_Data->Ssl_CertificateRevocationListFileName.empty())
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_CRLFILE, Curl_Data->Ssl_CertificateRevocationListFileName.c_str());
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
-
- if (Curl_Data->Ssl_IgnoreSecurity)
- {
- CURLcode Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_SSL_VERIFYPEER, 0);
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
-
- Result=curl_easy_setopt(Curl_Data->Curl, CURLOPT_SSL_VERIFYHOST, 0);
- if (Result)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, Reader_libcurl_FileNameWithoutPassword(File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- return 0;
- }
- }
- }
- }
-
- //Test the format with buffer
- return Format_Test_PerParser_Continue(MI);
-}
-
-//---------------------------------------------------------------------------
-size_t Reader_libcurl::Format_Test_PerParser_Continue (MediaInfo_Internal* MI)
-{
- bool StopAfterFilled=MI->Config.File_StopAfterFilled_Get();
- bool ShouldContinue=true;
-
- #if MEDIAINFO_DEMUX
- //PerPacket
- if (ShouldContinue && MI->Config.Demux_EventWasSent)
- {
- MI->Config.Demux_EventWasSent=false;
-
- Curl_Data->Status=MI->Open_Buffer_Continue(NULL, 0);
-
- //Demux
- if (MI->Config.Demux_EventWasSent)
- return 2; //Must return immediately
-
- //Threading
- if (MI->IsTerminating())
- return 1; //Termination is requested
-
- if (Curl_Data->Status[File__Analyze::IsFinished] || (StopAfterFilled && Curl_Data->Status[File__Analyze::IsFilled]))
- ShouldContinue=false;
- }
- #endif //MEDIAINFO_DEMUX
-
- if (ShouldContinue)
- {
- CURLcode Result=CURLE_WRITE_ERROR;
- while ((!(Curl_Data->Status[File__Analyze::IsFinished] || (StopAfterFilled && Curl_Data->Status[File__Analyze::IsFilled]))) && Result==CURLE_WRITE_ERROR)
- {
- //GoTo
- if (Curl_Data->MI->Open_Buffer_Continue_GoTo_Get()!=(int64u)-1)
- {
- #ifdef MEDIAINFO_DEBUG
- std::cout<<std::hex<<Curl_Data->File_Offset-Curl_Data->Debug_BytesRead<<" - "<<Curl_Data->File_Offset<<" : "<<std::dec<<Curl_Data->Debug_BytesRead<<" bytes"<<std::endl;
- Curl_Data->Debug_BytesRead=0;
- Curl_Data->Debug_Count++;
- #endif //MEDIAINFO_DEBUG
- CURLcode Code;
- CURL* Temp=curl_easy_duphandle(Curl_Data->Curl);
- if (Temp==0)
- return 0;
- #if MEDIAINFO_NEXTPACKET
- if (Curl_Data->CurlM)
- curl_multi_remove_handle(Curl_Data->CurlM, Curl_Data->Curl);
- #endif //MEDIAINFO_NEXTPACKET
- curl_easy_cleanup(Curl_Data->Curl); Curl_Data->Curl=Temp;
- #if MEDIAINFO_NEXTPACKET
- if (Curl_Data->CurlM)
- curl_multi_add_handle(Curl_Data->CurlM, Curl_Data->Curl);
- #endif //MEDIAINFO_NEXTPACKET
- if (Curl_Data->MI->Open_Buffer_Continue_GoTo_Get()<0x80000000)
- {
- //We do NOT use large version if we can, because some version (tested: 7.15 linux) do NOT like large version (error code 18)
- long File_GoTo_Long=(long)Curl_Data->MI->Open_Buffer_Continue_GoTo_Get();
- Code=curl_easy_setopt(Curl_Data->Curl, CURLOPT_RESUME_FROM, File_GoTo_Long);
- }
- else
- {
- curl_off_t File_GoTo_Off=(curl_off_t)Curl_Data->MI->Open_Buffer_Continue_GoTo_Get();
- Code=curl_easy_setopt(Curl_Data->Curl, CURLOPT_RESUME_FROM_LARGE, File_GoTo_Off);
- }
- if (Code==CURLE_OK)
- {
- #if MEDIAINFO_EVENTS
- Curl_Data->Stream_Offset=Curl_Data->MI->Open_Buffer_Continue_GoTo_Get();
- #endif //MEDIAINFO_EVENTS
- MI->Open_Buffer_Init((int64u)-1, Curl_Data->MI->Open_Buffer_Continue_GoTo_Get());
- }
- }
-
- //Parsing
- #if MEDIAINFO_NEXTPACKET
- if (Curl_Data->NextPacket)
- {
- int running_handles=0;
- do
- {
- CURLMcode CodeM=curl_multi_perform(Curl_Data->CurlM, &running_handles);
- if (Result==CURLE_WRITE_ERROR && Curl_Data->Init_NotAFile)
- {
- //Not possible to get the file with UTF-8, trying local code page
- Curl_Data->Init_NotAFile=false;
- string FileName_String=Ztring(Curl_Data->File_Name).To_Local();
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_URL, FileName_String.c_str());
- CodeM=curl_multi_perform(Curl_Data->CurlM, &running_handles);
- }
- if (CodeM!=CURLM_OK && CodeM!=CURLM_CALL_MULTI_PERFORM)
- break; //There is a problem
- #if MEDIAINFO_DEMUX
- if (MI->Config.Demux_EventWasSent)
- return 2; //Must return immediately
- #endif //MEDIAINFO_DEMUX
- if (running_handles==0)
- break; //cUrl has finished
- }
- while (running_handles);
- if (running_handles==0 && Curl_Data->MI->Open_Buffer_Continue_GoTo_Get()==(int64u)-1)
- break; //cUrl has finished
- Result=CURLE_WRITE_ERROR; //Configuring as if classic method is used
- }
- else
- #endif //MEDIAINFO_NEXTPACKET
- {
- Result=curl_easy_perform(Curl_Data->Curl);
- if (Result==CURLE_WRITE_ERROR && Curl_Data->Init_NotAFile)
- {
- //Not possible to get the file with UTF-8, trying local code page
- Curl_Data->Init_NotAFile=false;
- string FileName_String=Ztring(Curl_Data->File_Name).To_Local();
- curl_easy_setopt(Curl_Data->Curl, CURLOPT_URL, FileName_String.c_str());
- Result=curl_easy_perform(Curl_Data->Curl);
- }
- }
-
- if (Result!=CURLE_OK && Result!=CURLE_WRITE_ERROR)
- {
- #if MEDIAINFO_EVENTS
- Ztring MessageString;
- int32u MessageCode=0;
- MessageString.From_Local(Curl_Data->ErrorBuffer);
- if (MessageString.empty())
- MessageString.From_Local(curl_easy_strerror(Result));
- if (Result==CURLE_PEER_FAILED_VERIFICATION)
- {
- size_t Protocol_Limit=Curl_Data->File_Name.find(__T(":"));
- if (Protocol_Limit!=string::npos)
- {
- Ztring Protocol=Curl_Data->File_Name;
- Protocol.resize(Protocol_Limit);
- Protocol.MakeLowerCase();
- if (Protocol==__T("sftp") || Protocol==__T("scp"))
- {
- MessageString=__T("The remote server's SSH fingerprint was deemed not OK (not in your known_host file).");
- MessageCode=0xF1010103;
- }
- else if (Protocol==__T("https") || Protocol==__T("ftps"))
- {
- MessageString=__T("The remote server's SSL certificate was deemed not OK.");
- MessageCode=0xF1010104;
- }
- }
- }
- Curl_Data->ErrorBuffer[0]='\0';
- MediaInfoLib::Config.Log_Send(0xC0, 0xFF, MessageCode, Reader_libcurl_FileNameWithoutPassword(Curl_Data->File_Name)+__T(", ")+MessageString);
- #endif //MEDIAINFO_EVENTS
- }
-
- #if MEDIAINFO_DEMUX
- if (MI->Config.Demux_EventWasSent)
- return 2; //Must return immediately
- #endif //MEDIAINFO_DEMUX
-
- //Threading
- if (MI->IsTerminating())
- break; //Termination is requested
- }
- }
-
- #ifdef MEDIAINFO_DEBUG
- std::cout<<std::hex<<Curl_Data->File_Offset-Curl_Data->Debug_BytesRead<<" - "<<Curl_Data->File_Offset<<" : "<<std::dec<<Curl_Data->Debug_BytesRead<<" bytes"<<std::endl;
- std::cout<<"Total: "<<std::dec<<Curl_Data->Debug_BytesRead_Total<<" bytes in "<<Curl_Data->Debug_Count<<" blocks"<<std::endl;
- #endif //MEDIAINFO_DEBUG
-
- //Is this file detected?
- if (!Curl_Data->Status[File__Analyze::IsAccepted])
- return 0;
-
- MI->Open_Buffer_Finalize();
-
- #if MEDIAINFO_DEMUX
- if (MI->Config.Demux_EventWasSent)
- return 2; //Must return immediately
- #endif //MEDIAINFO_DEMUX
-
- return 1;
-}
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t Reader_libcurl::Format_Test_PerParser_Seek (MediaInfo_Internal* MI, size_t Method, int64u Value, int64u ID)
-{
- size_t ToReturn=MI->Open_Buffer_Seek(Method, Value, ID);
-
- if (ToReturn==0 || ToReturn==1)
- {
- //Reset
- Curl_Data->Status=0;
- }
-
- return ToReturn;
-}
-#endif //MEDIAINFO_SEEK
-
-} //NameSpace
-
-#endif //MEDIAINFO_LIBCURL_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl.h b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl.h
deleted file mode 100644
index 4271251ce..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give information about a lot of media files
-// Dispatch the file to be tested by all containers
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef Reader_libcurlH
-#define Reader_libcurlH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Reader/Reader__Base.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-/// @brief Reader_libcurl
-//***************************************************************************
-
-class Reader_libcurl : public Reader__Base
-{
-public :
- //Constructor/Destructor
- Reader_libcurl ();
- virtual ~Reader_libcurl();
-
- //Format testing
- size_t Format_Test(MediaInfo_Internal* MI, String File_Name);
- size_t Format_Test_PerParser(MediaInfo_Internal* MI, const String &File_Name);
- size_t Format_Test_PerParser_Continue (MediaInfo_Internal* MI);
- size_t Format_Test_PerParser_Seek (MediaInfo_Internal* MI, size_t Method, int64u Value, int64u ID);
-
-public:
- struct curl_data;
-
-private :
- curl_data* Curl_Data;
-};
-
-} //NameSpace
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl_Include.h b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl_Include.h
deleted file mode 100644
index 32e8cc4b3..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libcurl_Include.h
+++ /dev/null
@@ -1,975 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Reader_libcurl_IncludeH
-#define MediaInfo_Reader_libcurl_IncludeH
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Copy of curl include files - Easy interface
-//***************************************************************************
-
-typedef void CURL;
-
-typedef enum {
- CURLE_OK = 0,
- CURLE_UNSUPPORTED_PROTOCOL, /* 1 */
- CURLE_FAILED_INIT, /* 2 */
- CURLE_URL_MALFORMAT, /* 3 */
- CURLE_OBSOLETE4, /* 4 - NOT USED */
- CURLE_COULDNT_RESOLVE_PROXY, /* 5 */
- CURLE_COULDNT_RESOLVE_HOST, /* 6 */
- CURLE_COULDNT_CONNECT, /* 7 */
- CURLE_FTP_WEIRD_SERVER_REPLY, /* 8 */
- CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server
- due to lack of access - when login fails
- this is not returned. */
- CURLE_OBSOLETE10, /* 10 - NOT USED */
- CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */
- CURLE_OBSOLETE12, /* 12 - NOT USED */
- CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */
- CURLE_FTP_WEIRD_227_FORMAT, /* 14 */
- CURLE_FTP_CANT_GET_HOST, /* 15 */
- CURLE_OBSOLETE16, /* 16 - NOT USED */
- CURLE_FTP_COULDNT_SET_TYPE, /* 17 */
- CURLE_PARTIAL_FILE, /* 18 */
- CURLE_FTP_COULDNT_RETR_FILE, /* 19 */
- CURLE_OBSOLETE20, /* 20 - NOT USED */
- CURLE_QUOTE_ERROR, /* 21 - quote command failure */
- CURLE_HTTP_RETURNED_ERROR, /* 22 */
- CURLE_WRITE_ERROR, /* 23 */
- CURLE_OBSOLETE24, /* 24 - NOT USED */
- CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */
- CURLE_READ_ERROR, /* 26 - couldn't open/read from file */
- CURLE_OUT_OF_MEMORY, /* 27 */
- /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error
- instead of a memory allocation error if CURL_DOES_CONVERSIONS
- is defined
- */
- CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */
- CURLE_OBSOLETE29, /* 29 - NOT USED */
- CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */
- CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */
- CURLE_OBSOLETE32, /* 32 - NOT USED */
- CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */
- CURLE_HTTP_POST_ERROR, /* 34 */
- CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */
- CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */
- CURLE_FILE_COULDNT_READ_FILE, /* 37 */
- CURLE_LDAP_CANNOT_BIND, /* 38 */
- CURLE_LDAP_SEARCH_FAILED, /* 39 */
- CURLE_OBSOLETE40, /* 40 - NOT USED */
- CURLE_FUNCTION_NOT_FOUND, /* 41 */
- CURLE_ABORTED_BY_CALLBACK, /* 42 */
- CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */
- CURLE_OBSOLETE44, /* 44 - NOT USED */
- CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */
- CURLE_OBSOLETE46, /* 46 - NOT USED */
- CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */
- CURLE_UNKNOWN_TELNET_OPTION, /* 48 - User specified an unknown option */
- CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */
- CURLE_OBSOLETE50, /* 50 - NOT USED */
- CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint
- wasn't verified fine */
- CURLE_GOT_NOTHING, /* 52 - when this is a specific error */
- CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */
- CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as
- default */
- CURLE_SEND_ERROR, /* 55 - failed sending network data */
- CURLE_RECV_ERROR, /* 56 - failure in receiving network data */
- CURLE_OBSOLETE57, /* 57 - NOT IN USE */
- CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */
- CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */
- CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */
- CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized transfer encoding */
- CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */
- CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */
- CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */
- CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind
- that failed */
- CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */
- CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not
- accepted and we failed to login */
- CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */
- CURLE_TFTP_PERM, /* 69 - permission problem on server */
- CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */
- CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */
- CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */
- CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */
- CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */
- CURLE_CONV_FAILED, /* 75 - conversion failed */
- CURLE_CONV_REQD, /* 76 - caller must register conversion
- callbacks using curl_easy_setopt options
- CURLOPT_CONV_FROM_NETWORK_FUNCTION,
- CURLOPT_CONV_TO_NETWORK_FUNCTION, and
- CURLOPT_CONV_FROM_UTF8_FUNCTION */
- CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing
- or wrong format */
- CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */
- CURLE_SSH, /* 79 - error from the SSH layer, somewhat
- generic so the error message will be of
- interest when this has happened */
-
- CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL
- connection */
- CURLE_AGAIN, /* 81 - socket is not ready for send/recv,
- wait till it's ready and try again (Added
- in 7.18.2) */
- CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or
- wrong format (Added in 7.19.0) */
- CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in
- 7.19.0) */
- CURL_LAST /* never use! */
-} CURLcode;
-
-#define CURLINFO_STRING 0x100000
-#define CURLINFO_LONG 0x200000
-#define CURLINFO_DOUBLE 0x300000
-#define CURLINFO_SLIST 0x400000
-#define CURLINFO_MASK 0x0fffff
-#define CURLINFO_TYPEMASK 0xf00000
-
-typedef enum {
- CURLINFO_NONE, /* first, never use this */
- CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1,
- CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2,
- CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3,
- CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4,
- CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5,
- CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6,
- CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7,
- CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8,
- CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9,
- CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10,
- CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11,
- CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12,
- CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13,
- CURLINFO_FILETIME = CURLINFO_LONG + 14,
- CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15,
- CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16,
- CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
- CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18,
- CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19,
- CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20,
- CURLINFO_PRIVATE = CURLINFO_STRING + 21,
- CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22,
- CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23,
- CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24,
- CURLINFO_OS_ERRNO = CURLINFO_LONG + 25,
- CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26,
- CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27,
- CURLINFO_COOKIELIST = CURLINFO_SLIST + 28,
- CURLINFO_LASTSOCKET = CURLINFO_LONG + 29,
- CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30,
- CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31,
- CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32,
- CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33,
- CURLINFO_CERTINFO = CURLINFO_SLIST + 34,
- CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35,
- /* Fill in new entries below here! */
-
- CURLINFO_LASTONE = 35
-} CURLINFO;
-
-/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */
-#define CURLPROTO_HTTP (1<<0)
-#define CURLPROTO_HTTPS (1<<1)
-#define CURLPROTO_FTP (1<<2)
-#define CURLPROTO_FTPS (1<<3)
-#define CURLPROTO_SCP (1<<4)
-#define CURLPROTO_SFTP (1<<5)
-#define CURLPROTO_TELNET (1<<6)
-#define CURLPROTO_LDAP (1<<7)
-#define CURLPROTO_LDAPS (1<<8)
-#define CURLPROTO_DICT (1<<9)
-#define CURLPROTO_FILE (1<<10)
-#define CURLPROTO_TFTP (1<<11)
-#define CURLPROTO_ALL (~0) /* enable everything */
-
-/* long may be 32 or 64 bits, but we should never depend on anything else
- but 32 */
-#define CURLOPTTYPE_LONG 0
-#define CURLOPTTYPE_OBJECTPOINT 10000
-#define CURLOPTTYPE_FUNCTIONPOINT 20000
-#define CURLOPTTYPE_OFF_T 30000
-
-#define CINIT(name,type,number) CURLOPT_ ## name = CURLOPTTYPE_ ## type + number
-
-/*
- * This macro-mania below setups the CURLOPT_[what] enum, to be used with
- * curl_easy_setopt(). The first argument in the CINIT() macro is the [what]
- * word.
- */
-
-typedef enum {
- /* This is the FILE * or void * the regular output should be written to. */
- CINIT(FILE, OBJECTPOINT, 1),
-
- /* The full URL to get/put */
- CINIT(URL, OBJECTPOINT, 2),
-
- /* Port number to connect to, if other than default. */
- CINIT(PORT, LONG, 3),
-
- /* Name of proxy to use. */
- CINIT(PROXY, OBJECTPOINT, 4),
-
- /* "name:password" to use when fetching. */
- CINIT(USERPWD, OBJECTPOINT, 5),
-
- /* "name:password" to use with proxy. */
- CINIT(PROXYUSERPWD, OBJECTPOINT, 6),
-
- /* Range to get, specified as an ASCII string. */
- CINIT(RANGE, OBJECTPOINT, 7),
-
- /* not used */
-
- /* Specified file stream to upload from (use as input): */
- CINIT(INFILE, OBJECTPOINT, 9),
-
- /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE
- * bytes big. If this is not used, error messages go to stderr instead: */
- CINIT(ERRORBUFFER, OBJECTPOINT, 10),
-
- /* Function that will be called to store the output (instead of fwrite). The
- * parameters will use fwrite() syntax, make sure to follow them. */
- CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),
-
- /* Function that will be called to read the input (instead of fread). The
- * parameters will use fread() syntax, make sure to follow them. */
- CINIT(READFUNCTION, FUNCTIONPOINT, 12),
-
- /* Time-out the read operation after this amount of seconds */
- CINIT(TIMEOUT, LONG, 13),
-
- /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about
- * how large the file being sent really is. That allows better error
- * checking and better verifies that the upload was successful. -1 means
- * unknown size.
- *
- * For large file support, there is also a _LARGE version of the key
- * which takes an off_t type, allowing platforms with larger off_t
- * sizes to handle larger files. See below for INFILESIZE_LARGE.
- */
- CINIT(INFILESIZE, LONG, 14),
-
- /* POST static input fields. */
- CINIT(POSTFIELDS, OBJECTPOINT, 15),
-
- /* Set the referrer page (needed by some CGIs) */
- CINIT(REFERER, OBJECTPOINT, 16),
-
- /* Set the FTP PORT string (interface name, named or numerical IP address)
- Use i.e '-' to use default address. */
- CINIT(FTPPORT, OBJECTPOINT, 17),
-
- /* Set the User-Agent string (examined by some CGIs) */
- CINIT(USERAGENT, OBJECTPOINT, 18),
-
- /* If the download receives less than "low speed limit" bytes/second
- * during "low speed time" seconds, the operations is aborted.
- * You could i.e if you have a pretty high speed connection, abort if
- * it is less than 2000 bytes/sec during 20 seconds.
- */
-
- /* Set the "low speed limit" */
- CINIT(LOW_SPEED_LIMIT, LONG, 19),
-
- /* Set the "low speed time" */
- CINIT(LOW_SPEED_TIME, LONG, 20),
-
- /* Set the continuation offset.
- *
- * Note there is also a _LARGE version of this key which uses
- * off_t types, allowing for large file offsets on platforms which
- * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE.
- */
- CINIT(RESUME_FROM, LONG, 21),
-
- /* Set cookie in request: */
- CINIT(COOKIE, OBJECTPOINT, 22),
-
- /* This points to a linked list of headers, struct curl_slist kind */
- CINIT(HTTPHEADER, OBJECTPOINT, 23),
-
- /* This points to a linked list of post entries, struct curl_httppost */
- CINIT(HTTPPOST, OBJECTPOINT, 24),
-
- /* name of the file keeping your private SSL-certificate */
- CINIT(SSLCERT, OBJECTPOINT, 25),
-
- /* password for the SSL or SSH private key */
- CINIT(KEYPASSWD, OBJECTPOINT, 26),
-
- /* send TYPE parameter? */
- CINIT(CRLF, LONG, 27),
-
- /* send linked-list of QUOTE commands */
- CINIT(QUOTE, OBJECTPOINT, 28),
-
- /* send FILE * or void * to store headers to, if you use a callback it
- is simply passed to the callback unmodified */
- CINIT(WRITEHEADER, OBJECTPOINT, 29),
-
- /* point to a file to read the initial cookies from, also enables
- "cookie awareness" */
- CINIT(COOKIEFILE, OBJECTPOINT, 31),
-
- /* What version to specifically try to use.
- See CURL_SSLVERSION defines below. */
- CINIT(SSLVERSION, LONG, 32),
-
- /* What kind of HTTP time condition to use, see defines */
- CINIT(TIMECONDITION, LONG, 33),
-
- /* Time to use with the above condition. Specified in number of seconds
- since 1 Jan 1970 */
- CINIT(TIMEVALUE, LONG, 34),
-
- /* 35 = OBSOLETE */
-
- /* Custom request, for customizing the get command like
- HTTP: DELETE, TRACE and others
- FTP: to use a different list command
- */
- CINIT(CUSTOMREQUEST, OBJECTPOINT, 36),
-
- /* HTTP request, for odd commands like DELETE, TRACE and others */
- CINIT(STDERR, OBJECTPOINT, 37),
-
- /* 38 is not used */
-
- /* send linked-list of post-transfer QUOTE commands */
- CINIT(POSTQUOTE, OBJECTPOINT, 39),
-
- /* Pass a pointer to string of the output using full variable-replacement
- as described elsewhere. */
- CINIT(WRITEINFO, OBJECTPOINT, 40),
-
- CINIT(VERBOSE, LONG, 41), /* talk a lot */
- CINIT(HEADER, LONG, 42), /* throw the header out too */
- CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */
- CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */
- CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 300 */
- CINIT(UPLOAD, LONG, 46), /* this is an upload */
- CINIT(POST, LONG, 47), /* HTTP POST method */
- CINIT(DIRLISTONLY, LONG, 48), /* return bare names when listing directories */
-
- CINIT(APPEND, LONG, 50), /* Append instead of overwrite on upload! */
-
- /* Specify whether to read the user+password from the .netrc or the URL.
- * This must be one of the CURL_NETRC_* enums below. */
- CINIT(NETRC, LONG, 51),
-
- CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */
-
- CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */
- CINIT(PUT, LONG, 54), /* HTTP PUT */
-
- /* 55 = OBSOLETE */
-
- /* Function that will be called instead of the internal progress display
- * function. This function should be defined as the curl_progress_callback
- * prototype defines. */
- CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),
-
- /* Data passed to the progress callback */
- CINIT(PROGRESSDATA, OBJECTPOINT, 57),
-
- /* We want the referrer field set automatically when following locations */
- CINIT(AUTOREFERER, LONG, 58),
-
- /* Port of the proxy, can be set in the proxy string as well with:
- "[host]:[port]" */
- CINIT(PROXYPORT, LONG, 59),
-
- /* size of the POST input data, if strlen() is not good to use */
- CINIT(POSTFIELDSIZE, LONG, 60),
-
- /* tunnel non-http operations through a HTTP proxy */
- CINIT(HTTPPROXYTUNNEL, LONG, 61),
-
- /* Set the interface string to use as outgoing network interface */
- CINIT(INTERFACE, OBJECTPOINT, 62),
-
- /* Set the krb4/5 security level, this also enables krb4/5 awareness. This
- * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string
- * is set but doesn't match one of these, 'private' will be used. */
- CINIT(KRBLEVEL, OBJECTPOINT, 63),
-
- /* Set if we should verify the peer in ssl handshake, set 1 to verify. */
- CINIT(SSL_VERIFYPEER, LONG, 64),
-
- /* The CApath or CAfile used to validate the peer certificate
- this option is used only if SSL_VERIFYPEER is true */
- CINIT(CAINFO, OBJECTPOINT, 65),
-
- /* 66 = OBSOLETE */
- /* 67 = OBSOLETE */
-
- /* Maximum number of http redirects to follow */
- CINIT(MAXREDIRS, LONG, 68),
-
- /* Pass a long set to 1 to get the date of the requested document (if
- possible)! Pass a zero to shut it off. */
- CINIT(FILETIME, LONG, 69),
-
- /* This points to a linked list of telnet options */
- CINIT(TELNETOPTIONS, OBJECTPOINT, 70),
-
- /* Max amount of cached alive connections */
- CINIT(MAXCONNECTS, LONG, 71),
-
- /* What policy to use when closing connections when the cache is filled
- up */
- CINIT(CLOSEPOLICY, LONG, 72),
-
- /* 73 = OBSOLETE */
-
- /* Set to explicitly use a new connection for the upcoming transfer.
- Do not use this unless you're absolutely sure of this, as it makes the
- operation slower and is less friendly for the network. */
- CINIT(FRESH_CONNECT, LONG, 74),
-
- /* Set to explicitly forbid the upcoming transfer's connection to be re-used
- when done. Do not use this unless you're absolutely sure of this, as it
- makes the operation slower and is less friendly for the network. */
- CINIT(FORBID_REUSE, LONG, 75),
-
- /* Set to a file name that contains random data for libcurl to use to
- seed the random engine when doing SSL connects. */
- CINIT(RANDOM_FILE, OBJECTPOINT, 76),
-
- /* Set to the Entropy Gathering Daemon socket pathname */
- CINIT(EGDSOCKET, OBJECTPOINT, 77),
-
- /* Time-out connect operations after this amount of seconds, if connects
- are OK within this time, then fine... This only aborts the connect
- phase. [Only works on unix-style/SIGALRM operating systems] */
- CINIT(CONNECTTIMEOUT, LONG, 78),
-
- /* Function that will be called to store headers (instead of fwrite). The
- * parameters will use fwrite() syntax, make sure to follow them. */
- CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
-
- /* Set this to force the HTTP request to get back to GET. Only really usable
- if POST, PUT or a custom request have been used first.
- */
- CINIT(HTTPGET, LONG, 80),
-
- /* Set if we should verify the Common name from the peer certificate in ssl
- * handshake, set 1 to check existence, 2 to ensure that it matches the
- * provided hostname. */
- CINIT(SSL_VERIFYHOST, LONG, 81),
-
- /* Specify which file name to write all known cookies in after completed
- operation. Set file name to "-" (dash) to make it go to stdout. */
- CINIT(COOKIEJAR, OBJECTPOINT, 82),
-
- /* Specify which SSL ciphers to use */
- CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83),
-
- /* Specify which HTTP version to use! This must be set to one of the
- CURL_HTTP_VERSION* enums set below. */
- CINIT(HTTP_VERSION, LONG, 84),
-
- /* Specifically switch on or off the FTP engine's use of the EPSV command. By
- default, that one will always be attempted before the more traditional
- PASV command. */
- CINIT(FTP_USE_EPSV, LONG, 85),
-
- /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
- CINIT(SSLCERTTYPE, OBJECTPOINT, 86),
-
- /* name of the file keeping your private SSL-key */
- CINIT(SSLKEY, OBJECTPOINT, 87),
-
- /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
- CINIT(SSLKEYTYPE, OBJECTPOINT, 88),
-
- /* crypto engine for the SSL-sub system */
- CINIT(SSLENGINE, OBJECTPOINT, 89),
-
- /* set the crypto engine for the SSL-sub system as default
- the param has no meaning...
- */
- CINIT(SSLENGINE_DEFAULT, LONG, 90),
-
- /* Non-zero value means to use the global dns cache */
- CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* To become OBSOLETE soon */
-
- /* DNS cache timeout */
- CINIT(DNS_CACHE_TIMEOUT, LONG, 92),
-
- /* send linked-list of pre-transfer QUOTE commands */
- CINIT(PREQUOTE, OBJECTPOINT, 93),
-
- /* set the debug function */
- CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94),
-
- /* set the data for the debug function */
- CINIT(DEBUGDATA, OBJECTPOINT, 95),
-
- /* mark this as start of a cookie session */
- CINIT(COOKIESESSION, LONG, 96),
-
- /* The CApath directory used to validate the peer certificate
- this option is used only if SSL_VERIFYPEER is true */
- CINIT(CAPATH, OBJECTPOINT, 97),
-
- /* Instruct libcurl to use a smaller receive buffer */
- CINIT(BUFFERSIZE, LONG, 98),
-
- /* Instruct libcurl to not use any signal/alarm handlers, even when using
- timeouts. This option is useful for multi-threaded applications.
- See libcurl-the-guide for more background information. */
- CINIT(NOSIGNAL, LONG, 99),
-
- /* Provide a CURLShare for mutexing non-ts data */
- CINIT(SHARE, OBJECTPOINT, 100),
-
- /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default),
- CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and CURLPROXY_SOCKS5. */
- CINIT(PROXYTYPE, LONG, 101),
-
- /* Set the Accept-Encoding string. Use this to tell a server you would like
- the response to be compressed. */
- CINIT(ENCODING, OBJECTPOINT, 102),
-
- /* Set pointer to private data */
- CINIT(PRIVATE, OBJECTPOINT, 103),
-
- /* Set aliases for HTTP 200 in the HTTP Response header */
- CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
-
- /* Continue to send authentication (user+password) when following locations,
- even when hostname changed. This can potentially send off the name
- and password to whatever host the server decides. */
- CINIT(UNRESTRICTED_AUTH, LONG, 105),
-
- /* Specifically switch on or off the FTP engine's use of the EPRT command ( it
- also disables the LPRT attempt). By default, those ones will always be
- attempted before the good old traditional PORT command. */
- CINIT(FTP_USE_EPRT, LONG, 106),
-
- /* Set this to a bitmask value to enable the particular authentications
- methods you like. Use this in combination with CURLOPT_USERPWD.
- Note that setting multiple bits may cause extra network round-trips. */
- CINIT(HTTPAUTH, LONG, 107),
-
- /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx
- in second argument. The function must be matching the
- curl_ssl_ctx_callback proto. */
- CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108),
-
- /* Set the userdata for the ssl context callback function's third
- argument */
- CINIT(SSL_CTX_DATA, OBJECTPOINT, 109),
-
- /* FTP Option that causes missing dirs to be created on the remote server.
- In 7.19.4 we introduced the convenience enums for this option using the
- CURLFTP_CREATE_DIR prefix.
- */
- CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110),
-
- /* Set this to a bitmask value to enable the particular authentications
- methods you like. Use this in combination with CURLOPT_PROXYUSERPWD.
- Note that setting multiple bits may cause extra network round-trips. */
- CINIT(PROXYAUTH, LONG, 111),
-
- /* FTP option that changes the timeout, in seconds, associated with
- getting a response. This is different from transfer timeout time and
- essentially places a demand on the FTP server to acknowledge commands
- in a timely manner. */
- CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112),
-
- /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to
- tell libcurl to resolve names to those IP versions only. This only has
- affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
- CINIT(IPRESOLVE, LONG, 113),
-
- /* Set this option to limit the size of a file that will be downloaded from
- an HTTP or FTP server.
-
- Note there is also _LARGE version which adds large file support for
- platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */
- CINIT(MAXFILESIZE, LONG, 114),
-
- /* See the comment for INFILESIZE above, but in short, specifies
- * the size of the file being uploaded. -1 means unknown.
- */
- CINIT(INFILESIZE_LARGE, OFF_T, 115),
-
- /* Sets the continuation offset. There is also a LONG version of this;
- * look above for RESUME_FROM.
- */
- CINIT(RESUME_FROM_LARGE, OFF_T, 116),
-
- /* Sets the maximum size of data that will be downloaded from
- * an HTTP or FTP server. See MAXFILESIZE above for the LONG version.
- */
- CINIT(MAXFILESIZE_LARGE, OFF_T, 117),
-
- /* Set this option to the file name of your .netrc file you want libcurl
- to parse (using the CURLOPT_NETRC option). If not set, libcurl will do
- a poor attempt to find the user's home directory and check for a .netrc
- file in there. */
- CINIT(NETRC_FILE, OBJECTPOINT, 118),
-
- /* Enable SSL/TLS for FTP, pick one of:
- CURLFTPSSL_TRY - try using SSL, proceed anyway otherwise
- CURLFTPSSL_CONTROL - SSL for the control connection or fail
- CURLFTPSSL_ALL - SSL for all communication or fail
- */
- CINIT(USE_SSL, LONG, 119),
-
- /* The _LARGE version of the standard POSTFIELDSIZE option */
- CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120),
-
- /* Enable/disable the TCP Nagle algorithm */
- CINIT(TCP_NODELAY, LONG, 121),
-
- /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
- /* 123 OBSOLETE. Gone in 7.16.0 */
- /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
- /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
- /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
- /* 127 OBSOLETE. Gone in 7.16.0 */
- /* 128 OBSOLETE. Gone in 7.16.0 */
-
- /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option
- can be used to change libcurl's default action which is to first try
- "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK
- response has been received.
-
- Available parameters are:
- CURLFTPAUTH_DEFAULT - let libcurl decide
- CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS
- CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL
- */
- CINIT(FTPSSLAUTH, LONG, 129),
-
- CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130),
- CINIT(IOCTLDATA, OBJECTPOINT, 131),
-
- /* 132 OBSOLETE. Gone in 7.16.0 */
- /* 133 OBSOLETE. Gone in 7.16.0 */
-
- /* zero terminated string for pass on to the FTP server when asked for
- "account" info */
- CINIT(FTP_ACCOUNT, OBJECTPOINT, 134),
-
- /* feed cookies into cookie engine */
- CINIT(COOKIELIST, OBJECTPOINT, 135),
-
- /* ignore Content-Length */
- CINIT(IGNORE_CONTENT_LENGTH, LONG, 136),
-
- /* Set to non-zero to skip the IP address received in a 227 PASV FTP server
- response. Typically used for FTP-SSL purposes but is not restricted to
- that. libcurl will then instead use the same IP address it used for the
- control connection. */
- CINIT(FTP_SKIP_PASV_IP, LONG, 137),
-
- /* Select "file method" to use when doing FTP, see the curl_ftpmethod
- above. */
- CINIT(FTP_FILEMETHOD, LONG, 138),
-
- /* Local port number to bind the socket to */
- CINIT(LOCALPORT, LONG, 139),
-
- /* Number of ports to try, including the first one set with LOCALPORT.
- Thus, setting it to 1 will make no additional attempts but the first.
- */
- CINIT(LOCALPORTRANGE, LONG, 140),
-
- /* no transfer, set up connection and let application use the socket by
- extracting it with CURLINFO_LASTSOCKET */
- CINIT(CONNECT_ONLY, LONG, 141),
-
- /* Function that will be called to convert from the
- network encoding (instead of using the iconv calls in libcurl) */
- CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142),
-
- /* Function that will be called to convert to the
- network encoding (instead of using the iconv calls in libcurl) */
- CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143),
-
- /* Function that will be called to convert from UTF8
- (instead of using the iconv calls in libcurl)
- Note that this is used only for SSL certificate processing */
- CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144),
-
- /* if the connection proceeds too quickly then need to slow it down */
- /* limit-rate: maximum number of bytes per second to send or receive */
- CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145),
- CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146),
-
- /* Pointer to command string to send if USER/PASS fails. */
- CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147),
-
- /* callback function for setting socket options */
- CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148),
- CINIT(SOCKOPTDATA, OBJECTPOINT, 149),
-
- /* set to 0 to disable session ID re-use for this transfer, default is
- enabled (== 1) */
- CINIT(SSL_SESSIONID_CACHE, LONG, 150),
-
- /* allowed SSH authentication methods */
- CINIT(SSH_AUTH_TYPES, LONG, 151),
-
- /* Used by scp/sftp to do public/private key authentication */
- CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152),
- CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153),
-
- /* Send CCC (Clear Command Channel) after authentication */
- CINIT(FTP_SSL_CCC, LONG, 154),
-
- /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */
- CINIT(TIMEOUT_MS, LONG, 155),
- CINIT(CONNECTTIMEOUT_MS, LONG, 156),
-
- /* set to zero to disable the libcurl's decoding and thus pass the raw body
- data to the application even when it is encoded/compressed */
- CINIT(HTTP_TRANSFER_DECODING, LONG, 157),
- CINIT(HTTP_CONTENT_DECODING, LONG, 158),
-
- /* Permission used when creating new files and directories on the remote
- server for protocols that support it, SFTP/SCP/FILE */
- CINIT(NEW_FILE_PERMS, LONG, 159),
- CINIT(NEW_DIRECTORY_PERMS, LONG, 160),
-
- /* Set the behaviour of POST when redirecting. Values must be set to one
- of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */
- CINIT(POSTREDIR, LONG, 161),
-
- /* used by scp/sftp to verify the host's public key */
- CINIT(SSH_HOST_PUBLIC_KEY_MD5, OBJECTPOINT, 162),
-
- /* Callback function for opening socket (instead of socket(2)). Optionally,
- callback is able change the address or refuse to connect returning
- CURL_SOCKET_BAD. The callback should have type
- curl_opensocket_callback */
- CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163),
- CINIT(OPENSOCKETDATA, OBJECTPOINT, 164),
-
- /* POST volatile input fields. */
- CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165),
-
- /* set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy */
- CINIT(PROXY_TRANSFER_MODE, LONG, 166),
-
- /* Callback function for seeking in the input stream */
- CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167),
- CINIT(SEEKDATA, OBJECTPOINT, 168),
-
- /* CRL file */
- CINIT(CRLFILE, OBJECTPOINT, 169),
-
- /* Issuer certificate */
- CINIT(ISSUERCERT, OBJECTPOINT, 170),
-
- /* (IPv6) Address scope */
- CINIT(ADDRESS_SCOPE, LONG, 171),
-
- /* Collect certificate chain info and allow it to get retrievable with
- CURLINFO_CERTINFO after the transfer is complete. (Unfortunately) only
- working with OpenSSL-powered builds. */
- CINIT(CERTINFO, LONG, 172),
-
- /* "name" and "pwd" to use when fetching. */
- CINIT(USERNAME, OBJECTPOINT, 173),
- CINIT(PASSWORD, OBJECTPOINT, 174),
-
- /* "name" and "pwd" to use with Proxy when fetching. */
- CINIT(PROXYUSERNAME, OBJECTPOINT, 175),
- CINIT(PROXYPASSWORD, OBJECTPOINT, 176),
-
- /* Comma separated list of hostnames defining no-proxy zones. These should
- match both hostnames directly, and hostnames within a domain. For
- example, local.com will match local.com and www.local.com, but NOT
- notlocal.com or www.notlocal.com. For compatibility with other
- implementations of this, .local.com will be considered to be the same as
- local.com. A single * is the only valid wildcard, and effectively
- disables the use of proxy. */
- CINIT(NOPROXY, OBJECTPOINT, 177),
-
- /* block size for TFTP transfers */
- CINIT(TFTP_BLKSIZE, LONG, 178),
-
- /* Socks Service */
- CINIT(SOCKS5_GSSAPI_SERVICE, OBJECTPOINT, 179),
-
- /* Socks Service */
- CINIT(SOCKS5_GSSAPI_NEC, LONG, 180),
-
- /* set the bitmask for the protocols that are allowed to be used for the
- transfer, which thus helps the app which takes URLs from users or other
- external inputs and want to restrict what protocol(s) to deal
- with. Defaults to CURLPROTO_ALL. */
- CINIT(PROTOCOLS, LONG, 181),
-
- /* set the bitmask for the protocols that libcurl is allowed to follow to,
- as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
- to be set in both bitmasks to be allowed to get redirected to. Defaults
- to all protocols except FILE and SCP. */
- CINIT(REDIR_PROTOCOLS, LONG, 182),
-
- /* set the SSH knownhost file name to use */
- CINIT(SSH_KNOWNHOSTS, OBJECTPOINT, 183),
-
- /* set the SSH host key callback, must point to a curl_sshkeycallback
- function */
- CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184),
-
- /* set the SSH host key callback custom pointer */
- CINIT(SSH_KEYDATA, OBJECTPOINT, 185),
-
- CURLOPT_LASTENTRY /* the last unused */
-} CURLoption;
-
- /* three convenient "aliases" that follow the name scheme better */
-#define CURLOPT_WRITEDATA CURLOPT_FILE
-#define CURLOPT_READDATA CURLOPT_INFILE
-#define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER
-
-typedef int64u curl_off_t;
-
-//***************************************************************************
-// Copy of curl include files - Multi interface
-//***************************************************************************
-
-typedef void CURLM;
-
-typedef enum {
- CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
- curl_multi_socket*() soon */
- CURLM_OK,
- CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */
- CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
- CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */
- CURLM_INTERNAL_ERROR, /* this is a libcurl bug */
- CURLM_BAD_SOCKET, /* the passed in socket argument did not match */
- CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */
- CURLM_LAST
-} CURLMcode;
-
-typedef enum {
- CURLVERSION_FIRST,
- CURLVERSION_SECOND,
- CURLVERSION_THIRD,
- CURLVERSION_FOURTH,
- CURLVERSION_LAST /* never actually use this */
-} CURLversion;
-
-#define CURLVERSION_NOW CURLVERSION_FOURTH
-
-typedef struct {
- CURLversion age; /* age of the returned struct */
- const char *version; /* LIBCURL_VERSION */
- unsigned int version_num; /* LIBCURL_VERSION_NUM */
- const char *host; /* OS/host/cpu/machine when configured */
- int features; /* bitmask, see defines below */
- const char *ssl_version; /* human readable string */
- long ssl_version_num; /* not used anymore, always 0 */
- const char *libz_version; /* human readable string */
- /* protocols is terminated by an entry with a NULL protoname */
- const char * const *protocols;
-
- /* The fields below this were added in CURLVERSION_SECOND */
- const char *ares;
- int ares_num;
-
- /* This field was added in CURLVERSION_THIRD */
- const char *libidn;
-
- /* These field were added in CURLVERSION_FOURTH */
-
- /* Same as '_libiconv_version' if built with HAVE_ICONV */
- int iconv_ver_num;
-
- const char *libssh_version; /* human readable string */
-
-} curl_version_info_data;
-
-#define CURL_ERROR_SIZE 256
-
-//***************************************************************************
-// Dynamic load stuff
-//***************************************************************************
-
-extern "C"
-{
-
-#if defined (_WIN32) || defined (WIN32)
- #ifdef _UNICODE
- #define MEDIAINFODLL_NAME L"libcurl.dll"
- #else //_UNICODE
- #define MEDIAINFODLL_NAME "libcurl.dll"
- #endif //_UNICODE
-#elif defined(__APPLE__) && defined(__MACH__)
- #define MEDIAINFODLL_NAME "libcurl.0.dylib"
- #define __stdcall
-#else
- #define MEDIAINFODLL_NAME "libcurl.so.0"
- #define __stdcall
-#endif //!defined(_WIN32) || defined (WIN32)
-
-#ifdef MEDIAINFO_GLIBC
- #include <gmodule.h>
- static GModule* libcurl_Module=NULL;
-#elif defined (_WIN32) || defined (WIN32)
- #undef __TEXT
- #include <windows.h>
- static HMODULE libcurl_Module=NULL;
-#else
- #include <dlfcn.h>
- static void* libcurl_Module=NULL;
-#endif
-
-size_t libcurl_Module_Count=0;
-
-#ifdef MEDIAINFO_GLIBC
-#define MEDIAINFO_ASSIGN(_Name,_Name2) \
- if (!g_module_symbol (libcurl_Module, _Name2, (gpointer*)&_Name)) \
- Errors++;
-#elif defined (_WIN32) || defined (WIN32)
-#define MEDIAINFO_ASSIGN(_Name,_Name2) \
- _Name=(LIBCURL_##_Name)GetProcAddress(libcurl_Module, _Name2); \
- if (_Name==NULL) Errors++;
-#else
-#define MEDIAINFO_ASSIGN(_Name,_Name2) \
- _Name=(LIBCURL_##_Name)dlsym(libcurl_Module, _Name2); \
- if (_Name==NULL) Errors++;
-#endif
-
-//---------------------------------------------------------------------------
-// Easy interface
-typedef CURL* (*LIBCURL_curl_easy_init) (); static LIBCURL_curl_easy_init curl_easy_init;
-typedef CURLcode (*LIBCURL_curl_easy_setopt) (CURL *curl, CURLoption option, ...); static LIBCURL_curl_easy_setopt curl_easy_setopt;
-typedef CURLcode (*LIBCURL_curl_easy_perform)(CURL *curl); static LIBCURL_curl_easy_perform curl_easy_perform;
-typedef void (*LIBCURL_curl_easy_cleanup)(CURL *curl); static LIBCURL_curl_easy_cleanup curl_easy_cleanup;
-typedef CURLcode (*LIBCURL_curl_easy_getinfo)(CURL *curl, CURLINFO info, ...); static LIBCURL_curl_easy_getinfo curl_easy_getinfo;
-typedef struct curl_slist* (*LIBCURL_curl_slist_append) (struct curl_slist *, const char *); static LIBCURL_curl_slist_append curl_slist_append;
-typedef void (*LIBCURL_curl_slist_free_all) (struct curl_slist *); static LIBCURL_curl_slist_free_all curl_slist_free_all;
-typedef CURL* (*LIBCURL_curl_easy_duphandle)(CURL *curl); static LIBCURL_curl_easy_duphandle curl_easy_duphandle;
-typedef const char* (*LIBCURL_curl_easy_strerror)(CURLcode curlcode); static LIBCURL_curl_easy_strerror curl_easy_strerror;
-typedef curl_version_info_data* (*LIBCURL_curl_version_info)(CURLversion version); static LIBCURL_curl_version_info curl_version_info;
-
-//---------------------------------------------------------------------------
-// Multi interface
-typedef CURLM* (*LIBCURL_curl_multi_init) (); static LIBCURL_curl_multi_init curl_multi_init;
-typedef CURLMcode (*LIBCURL_curl_multi_add_handle) (CURLM *multi_handle, CURL *curl_handle); static LIBCURL_curl_multi_add_handle curl_multi_add_handle;
-typedef CURLMcode (*LIBCURL_curl_multi_remove_handle) (CURLM *multi_handle, CURL *curl_handle); static LIBCURL_curl_multi_remove_handle curl_multi_remove_handle;
-typedef CURLMcode (*LIBCURL_curl_multi_perform)(CURLM *curl, int *running_handles); static LIBCURL_curl_multi_perform curl_multi_perform;
-typedef void (*LIBCURL_curl_multi_cleanup)(CURLM *curl); static LIBCURL_curl_multi_cleanup curl_multi_cleanup;
-
-}
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libmms.cpp b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libmms.cpp
deleted file mode 100644
index 7c18dafe7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libmms.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Config
-#ifndef MEDIAINFO_LIBMMS_DESCRIBE_SUPPORT //If not defined by the compiler
- #define MEDIAINFO_LIBMMS_DESCRIBE_SUPPORT 0 //0=without, 1=with libmms customized version containing DESCRIBE only API
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_LIBMMS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Reader/Reader_libmms.h"
-#include "MediaInfo/File__Analyze.h"
-#if defined LIBMMS_DLL_RUNTIME
-#elif defined LIBMMS_DLL_STATIC
-#else
- #ifdef MEDIAINFO_LIBMMS_FROMSOURCE
- #include "mmsx.h"
- #include "mmsh.h"
- #else //MEDIAINFO_LIBMMS_FROMSOURCE
- #include "libmms/mmsx.h"
- #include "libmms/mmsh.h"
- #endif //MEDIAINFO_LIBMMS_FROMSOURCE
-#endif
-#include <iostream>
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-const size_t Buffer_NormalSize=64*1024;
-
-//***************************************************************************
-// libmms stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t Reader_libmms::Format_Test(MediaInfo_Internal* MI, String File_Name)
-{
- mmsx_t* Handle;
-
- //Opening the file
- #if MEDIAINFO_LIBMMS_DESCRIBE_SUPPORT
- if (MI->Config.File_Mmsh_Describe_Only_Get())
- {
- // Use MMSH & Send a DESCRIBE request
- mmsh_t* MmshHandle;
-
- MmshHandle=mmsh_describe_request(0, 0, Ztring(File_Name).To_Local().c_str());
- if (MmshHandle==NULL)
- return 0;
-
- Handle=mmsx_set_mmsh_handle(MmshHandle);
- if (Handle==NULL)
- {
- mmsh_close(MmshHandle);
- return 0;
- }
- }
- else
- #endif //MEDIAINFO_LIBMMS_DESCRIBE_SUPPORT
- {
- // Use MMS or MMSH (Send a DESCRIBE & PLAY request)
- Handle=mmsx_connect(0, 0, Ztring(File_Name).To_Local().c_str(), (int)-1);
- if (Handle==NULL)
- return 0;
- }
-
- //Init
- size_t Buffer_Size_Max;
- uint32_t Length;
- if (!MI->Config.File_Mmsh_Describe_Only_Get())
- {
- //Buffer
- Buffer_Size_Max=Buffer_NormalSize;
-
- //MediaInfo init
- mms_off_t Offset=mmsx_seek(0, Handle, 0, SEEK_SET);
- uint32_t Length=mmsx_get_length(Handle);
- MI->Open_Buffer_Init(Length, File_Name);
- }
- else
- {
- //Buffer
- Buffer_Size_Max=mmsx_get_asf_header_len(Handle);
-
- //MediaInfo init
- Length=(uint32_t)-1;
- MI->Open_Buffer_Init((int64u)-1, File_Name);
- }
- int8u* Buffer=new int8u[Buffer_Size_Max];
-
- //Test the format with buffer
- bool StopAfterFilled=MI->Config.File_StopAfterFilled_Get();
- std::bitset<32> Status;
- do
- {
- //Seek (if needed)
- if (MI->Open_Buffer_Continue_GoTo_Get()!=(int64u)-1)
- {
- if (MI->Open_Buffer_Continue_GoTo_Get()>=Length)
- break; //Seek requested, but on a file bigger in theory than what is in the real file, we can't do this
- if (mmsx_seek(0, Handle, mms_off_t(MI->Open_Buffer_Continue_GoTo_Get()), SEEK_SET)!=MI->Open_Buffer_Continue_GoTo_Get())
- break; //File is not seekable
-
- MI->Open_Buffer_Init((int64u)-1, MI->Open_Buffer_Continue_GoTo_Get());
- }
-
- //Buffering
- size_t Buffer_Size;
- if (!MI->Config.File_Mmsh_Describe_Only_Get())
- Buffer_Size=mmsx_read(0, Handle, (char*)Buffer, (int)Buffer_Size_Max);
- else
- Buffer_Size=mmsx_peek_header(Handle, (char*)Buffer, (int)Buffer_Size_Max);
-
- //Parser
- Status=MI->Open_Buffer_Continue(Buffer, Buffer_Size);
- if (Buffer_Size==0 || MI->Config.File_Mmsh_Describe_Only_Get())
- break;
- }
- while (!(Status[File__Analyze::IsFinished] || (StopAfterFilled && Status[File__Analyze::IsFilled])));
-
- //File
- mmsx_close(Handle);
-
- //Buffer
- delete[] Buffer; //Buffer=NULL;
-
- //Is this file detected?
- if (!Status[File__Analyze::IsAccepted])
- return 0;
-
- MI->Open_Buffer_Finalize();
-
- return 1;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_LIBMMS_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libmms.h b/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libmms.h
deleted file mode 100644
index 4079a04e2..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Reader/Reader_libmms.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Give information about a lot of media files
-// Dispatch the file to be tested by all containers
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef Reader_libmmsH
-#define Reader_libmmsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Reader/Reader__Base.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-/// @brief Reader_libmms
-//***************************************************************************
-
-class Reader_libmms : public Reader__Base
-{
-public :
- //Constructor/Destructor
- virtual ~Reader_libmms() {}
-
- //Format testing
- size_t Format_Test(MediaInfo_Internal* MI, String File_Name);
-};
-
-} //NameSpace
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Setup.h b/src/thirdparty/MediaInfo/MediaInfo/Setup.h
deleted file mode 100644
index 98fcfb3c5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Setup.h
+++ /dev/null
@@ -1,804 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// All compilation definitions
-// Helpers for compilers (precompilation)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_SetupH
-#define MediaInfo_SetupH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//Needed in the whole library
-#include "ZenLib/Conf.h"
-
-//***************************************************************************
-// General configuration
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Legacy
-#if defined(MEDIAINFO_MINIMIZESIZE)
- #if !defined (MEDIAINFO_TRACE_NO) && !defined (MEDIAINFO_TRACE_YES)
- #define MEDIAINFO_TRACE_NO
- #endif
- //#if !defined (MEDIAINFO_FILTER_NO) && !defined (MEDIAINFO_FILTER_YES)
- // #define MEDIAINFO_FILTER_NO
- //#endif
- //#if !defined (MEDIAINFO_DUPLICATE_NO) && !defined (MEDIAINFO_DUPLICATE_YES)
- // #define MEDIAINFO_DUPLICATE_NO
- //#endif
- #if !defined (MEDIAINFO_MACROBLOCKS_NO) && !defined (MEDIAINFO_MACROBLOCKS_YES)
- #define MEDIAINFO_MACROBLOCKS_NO
- #endif
- #if !defined (MEDIAINFO_NEXTPACKET_NO) && !defined (MEDIAINFO_NEXTPACKET_YES)
- #define MEDIAINFO_NEXTPACKET_NO
- #endif
- #if !defined (MEDIAINFO_SEEK_NO) && !defined (MEDIAINFO_SEEK_YES)
- #define MEDIAINFO_SEEK_NO
- #endif
- #if !defined (MEDIAINFO_EVENTS_NO) && !defined (MEDIAINFO_EVENTS_YES)
- #define MEDIAINFO_EVENTS_NO
- #endif
- #if !defined (MEDIAINFO_DEMUX_NO) && !defined (MEDIAINFO_DEMUX_YES)
- #define MEDIAINFO_DEMUX_NO
- #endif
- #if !defined (MEDIAINFO_IBI_NO) && !defined (MEDIAINFO_IBI_YES)
- #define MEDIAINFO_IBI_NO
- #endif
-#endif
-#if defined(MEDIAINFO_EVENTS)
- #undef MEDIAINFO_EVENTS
- #if !defined (MEDIAINFO_EVENTS_NO) && !defined (MEDIAINFO_EVENTS_YES)
- #define MEDIAINFO_EVENTS_YES
- #endif
-#endif
-
-//---------------------------------------------------------------------------
-// Special configurations
-#if defined(MEDIAINFO_MINIMAL_YES)
- #if !defined (MEDIAINFO_TRACE_NO) && !defined (MEDIAINFO_TRACE_YES)
- #define MEDIAINFO_TRACE_NO
- #endif
- #if !defined (MEDIAINFO_FILTER_NO) && !defined (MEDIAINFO_FILTER_YES)
- #define MEDIAINFO_FILTER_NO
- #endif
- #if !defined (MEDIAINFO_DUPLICATE_NO) && !defined (MEDIAINFO_DUPLICATE_YES)
- #define MEDIAINFO_DUPLICATE_NO
- #endif
- #if !defined (MEDIAINFO_MACROBLOCKS_NO) && !defined (MEDIAINFO_MACROBLOCKS_YES)
- #define MEDIAINFO_MACROBLOCKS_NO
- #endif
- #if !defined (MEDIAINFO_NEXTPACKET_NO) && !defined (MEDIAINFO_NEXTPACKET_YES)
- #define MEDIAINFO_NEXTPACKET_NO
- #endif
- #if !defined (MEDIAINFO_SEEK_NO) && !defined (MEDIAINFO_SEEK_YES)
- #define MEDIAINFO_SEEK_NO
- #endif
- #if !defined (MEDIAINFO_EVENTS_NO) && !defined (MEDIAINFO_EVENTS_YES)
- #define MEDIAINFO_EVENTS_NO
- #endif
- #if !defined (MEDIAINFO_DEMUX_NO) && !defined (MEDIAINFO_DEMUX_YES)
- #define MEDIAINFO_DEMUX_NO
- #endif
- #if !defined (MEDIAINFO_IBI_NO) && !defined (MEDIAINFO_IBI_YES)
- #define MEDIAINFO_IBI_NO
- #endif
- #if !defined (MEDIAINFO_DIRECTORY_NO) && !defined (MEDIAINFO_DIRECTORY_YES)
- #define MEDIAINFO_DIRECTORY_NO
- #endif
- #if !defined (MEDIAINFO_LIBCURL_NO) && !defined (MEDIAINFO_LIBCURL_YES)
- #define MEDIAINFO_LIBCURL_NO
- #endif
- #if !defined (MEDIAINFO_LIBMMS_NO) && !defined (MEDIAINFO_LIBMM_YES)
- #define MEDIAINFO_LIBMMS_NO
- #endif
- #if !defined (MEDIAINFO_DVDIF_ANALYZE_NO) && !defined (MEDIAINFO_DVDIF_ANALYZE_YES)
- #define MEDIAINFO_DVDIF_ANALYZE_NO
- #endif
- #if !defined (MEDIAINFO_MPEGTS_DUPLICATE_NO) && !defined (MEDIAINFO_MPEGTS_DUPLICATE_YES)
- #define MEDIAINFO_MPEGTS_DUPLICATE_NO
- #endif
- #if !defined (MEDIAINFO_READTHREAD_NO) && !defined (MEDIAINFO_READTHREAD_YES)
- #define MEDIAINFO_READTHREAD_NO
- #endif
- #if !defined (MEDIAINFO_MD5_NO) && !defined (MEDIAINFO_MD5_YES)
- #define MEDIAINFO_MD5_NO
- #endif
- #if !defined (MEDIAINFO_AES_NO) && !defined (MEDIAINFO_AES_YES)
- #define MEDIAINFO_AES_NO
- #endif
-#endif
-
-//---------------------------------------------------------------------------
-// Optional features
-#if !defined(MEDIAINFO_TRACE)
- #if defined(MEDIAINFO_TRACE_NO) && defined(MEDIAINFO_TRACE_YES)
- #undef MEDIAINFO_TRACE_NO //MEDIAINFO_TRACE_YES has priority
- #endif
- #if defined(MEDIAINFO_TRACE_NO)
- #define MEDIAINFO_TRACE 0
- #else
- #define MEDIAINFO_TRACE 1
- #endif
-#endif
-#if !defined(MEDIAINFO_FILTER)
- #if defined(MEDIAINFO_FILTER_NO) && defined(MEDIAINFO_FILTER_YES)
- #undef MEDIAINFO_FILTER_NO //MEDIAINFO_FILTER_YES has priority
- #endif
- #if defined(MEDIAINFO_FILTER_NO)
- #define MEDIAINFO_FILTER 0
- #else
- #define MEDIAINFO_FILTER 1
- #endif
-#endif
-#if !defined(MEDIAINFO_DUPLICATE)
- #if defined(MEDIAINFO_DUPLICATE_NO) && defined(MEDIAINFO_DUPLICATE_YES)
- #undef MEDIAINFO_DUPLICATE_NO //MEDIAINFO_DUPLICATE_YES has priority
- #endif
- #if defined(MEDIAINFO_DUPLICATE_NO)
- #define MEDIAINFO_DUPLICATE 0
- #else
- #define MEDIAINFO_DUPLICATE 1
- #endif
-#endif
-#if !defined(MEDIAINFO_MACROBLOCKS)
- #if defined(MEDIAINFO_MACROBLOCKS_NO) && defined(MEDIAINFO_MACROBLOCKS_YES)
- #undef MEDIAINFO_MACROBLOCKS_NO //MEDIAINFO_MACROBLOCKS_YES has priority
- #endif
- #if defined(MEDIAINFO_MACROBLOCKS_NO)
- #define MEDIAINFO_MACROBLOCKS 0
- #else
- #define MEDIAINFO_MACROBLOCKS 1
- #endif
-#endif
-#if !defined(MEDIAINFO_AES)
- #if defined(MEDIAINFO_AES_NO) && defined(MEDIAINFO_AES_YES)
- #undef MEDIAINFO_AES_NO //MEDIAINFO_AES_YES has priority
- #endif
- #if defined(MEDIAINFO_AES_NO)
- #define MEDIAINFO_AES 0
- #else
- #define MEDIAINFO_AES 1
- #endif
-#endif
-#if !defined(MEDIAINFO_NEXTPACKET)
- #if defined(MEDIAINFO_NEXTPACKET_NO) && defined(MEDIAINFO_NEXTPACKET_YES)
- #undef MEDIAINFO_NEXTPACKET_NO //MEDIAINFO_NEXTPACKET_YES has priority
- #endif
- #if defined(MEDIAINFO_NEXTPACKET_NO)
- #define MEDIAINFO_NEXTPACKET 0
- #else
- #define MEDIAINFO_NEXTPACKET 1
- #endif
-#endif
-#if !defined(MEDIAINFO_SEEK)
- #if defined(MEDIAINFO_SEEK_NO) && defined(MEDIAINFO_SEEK_YES)
- #undef MEDIAINFO_SEEK_NO //MEDIAINFO_SEEK_YES has priority
- #endif
- #if defined(MEDIAINFO_SEEK_NO)
- #define MEDIAINFO_SEEK 0
- #else
- #define MEDIAINFO_SEEK 1
- #endif
-#endif
-#if !defined(MEDIAINFO_EVENTS)
- #if defined(MEDIAINFO_EVENTS_NO) && defined(MEDIAINFO_EVENTS_YES)
- #undef MEDIAINFO_EVENTS_NO //MEDIAINFO_EVENTS_YES has priority
- #endif
- #if defined(MEDIAINFO_EVENTS_NO)
- #define MEDIAINFO_EVENTS 0
- #else
- #define MEDIAINFO_EVENTS 1
- #endif
-#endif
-#if !defined(MEDIAINFO_ADVANCED)
- #if defined(MEDIAINFO_ADVANCED_NO) && defined(MEDIAINFO_ADVANCED_YES)
- #undef MEDIAINFO_ADVANCED_NO //MEDIAINFO_ADVANCED_YES has priority
- #endif
- #if defined(MEDIAINFO_ADVANCED_NO)
- #define MEDIAINFO_ADVANCED 0
- #else
- #define MEDIAINFO_ADVANCED 1
- #endif
-#endif
-#if !defined(MEDIAINFO_ADVANCED2) //ADVANCED2 is for optional build during defualt build
- #if defined(MEDIAINFO_ADVANCED2_NO) && defined(MEDIAINFO_ADVANCED2_YES)
- #undef MEDIAINFO_ADVANCED2_NO //MEDIAINFO_ADVANCED2_YES has priority
- #endif
- #if defined(MEDIAINFO_ADVANCED2_YES)
- #define MEDIAINFO_ADVANCED2 1
- #else
- #define MEDIAINFO_ADVANCED2 0
- #endif
-#endif
-#if !defined(MEDIAINFO_MD5)
- #if defined(MEDIAINFO_MD5_NO) && defined(MEDIAINFO_MD5_YES)
- #undef MEDIAINFO_MD5_NO //MEDIAINFO_MD5_YES has priority
- #endif
- #if defined(MEDIAINFO_MD5_NO)
- #define MEDIAINFO_MD5 0
- #else
- #define MEDIAINFO_MD5 1
- #endif
-#endif
-#if !defined(MEDIAINFO_DEMUX)
- #if !defined(MEDIAINFO_DEMUX_NO) && !defined(MEDIAINFO_DEMUX_YES) && !MEDIAINFO_EVENTS
- #define MEDIAINFO_DEMUX_NO //MEDIAINFO_DEMUX is disabled by default if MEDIAINFO_EVENTS is set to 0
- #endif
- #if defined(MEDIAINFO_DEMUX_NO) && defined(MEDIAINFO_DEMUX_YES)
- #undef MEDIAINFO_DEMUX_NO //MEDIAINFO_DEMUX_YES has priority
- #endif
- #if defined(MEDIAINFO_DEMUX_NO)
- #define MEDIAINFO_DEMUX 0
- #else
- #define MEDIAINFO_DEMUX 1
- #endif
-#endif
-#if MEDIAINFO_DEMUX && !MEDIAINFO_EVENTS
- pragma error MEDIAINFO_DEMUX can be set to 1 only if MEDIAINFO_EVENTS is set to 1
-#endif
-#if !defined(MEDIAINFO_IBI)
- #if defined(MEDIAINFO_IBI_NO) && defined(MEDIAINFO_IBI_YES)
- #undef MEDIAINFO_IBI_NO //MEDIAINFO_IBI_YES has priority
- #endif
- #if defined(MEDIAINFO_IBI_NO)
- #define MEDIAINFO_IBI 0
- #else
- #define MEDIAINFO_IBI 1
- #endif
-#endif
-#if !defined(MEDIAINFO_READTHREAD)
- #if defined(MEDIAINFO_READTHREAD_NO) && defined(MEDIAINFO_READTHREAD_YES)
- #undef MEDIAINFO_READTHREAD_NO //MEDIAINFO_READTHREAD_YES has priority
- #endif
- #if defined(MEDIAINFO_READTHREAD_NO) || !defined(WINDOWS) //Currently supported only on Windows TODO: add support of non Windows OS
- #define MEDIAINFO_READTHREAD 0
- #else
- #define MEDIAINFO_READTHREAD 1
- #endif
-#endif
-
-//***************************************************************************
-// Precise configuration
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Readers
-#if !defined(MEDIAINFO_READER_NO) && !defined(MEDIAINFO_DIRECTORY_NO) && !defined(MEDIAINFO_DIRECTORY_YES)
- #define MEDIAINFO_DIRECTORY_YES
-#endif
-#if !defined(MEDIAINFO_READER_NO) && !defined(MEDIAINFO_FILE_NO) && !defined(MEDIAINFO_FILE_YES)
- #define MEDIAINFO_FILE_YES
-#endif
-#if !defined(MEDIAINFO_READER_NO) && !defined(MEDIAINFO_LIBCURL_NO) && !defined(MEDIAINFO_LIBCURL_YES)
- #define MEDIAINFO_LIBCURL_YES
-#endif
-#if !defined(MEDIAINFO_READER_NO) && !defined(MEDIAINFO_LIBMMS_NO) && !defined(MEDIAINFO_LIBMMS_YES)
- #ifndef WINDOWS
- #define MEDIAINFO_LIBMMS_YES
- #endif //WINDOWS
-#endif
-
-//---------------------------------------------------------------------------
-// All in one for no parsers
-#if defined(MEDIAINFO_ALL_NO) && !defined(MEDIAINFO_MULTI_NO)
- #define MEDIAINFO_MULTI_NO
-#endif
-#if defined(MEDIAINFO_ALL_NO) && !defined(MEDIAINFO_VIDEO_NO)
- #define MEDIAINFO_VIDEO_NO
-#endif
-#if defined(MEDIAINFO_ALL_NO) && !defined(MEDIAINFO_AUDIO_NO)
- #define MEDIAINFO_AUDIO_NO
-#endif
-#if defined(MEDIAINFO_ALL_NO) && !defined(MEDIAINFO_TEXT_NO)
- #define MEDIAINFO_TEXT_NO
-#endif
-#if defined(MEDIAINFO_ALL_NO) && !defined(MEDIAINFO_IMAGE_NO)
- #define MEDIAINFO_IMAGE_NO
-#endif
-#if defined(MEDIAINFO_ALL_NO) && !defined(MEDIAINFO_ARCHIVE_NO)
- #define MEDIAINFO_ARCHIVE_NO
-#endif
-#if defined(MEDIAINFO_ALL_NO) && !defined(MEDIAINFO_TAG_NO)
- #define MEDIAINFO_TAG_NO
-#endif
-
-//---------------------------------------------------------------------------
-// Multiple
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_REFERENCES_NO) && !defined(MEDIAINFO_REFERENCES_YES)
- #define MEDIAINFO_REFERENCES_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_AAF_NO) && !defined(MEDIAINFO_AAF_YES)
- #define MEDIAINFO_AAF_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_ANCILLARY_NO) && !defined(MEDIAINFO_ANCILLARY_YES)
- #define MEDIAINFO_ANCILLARY_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_BDAV_NO) && !defined(MEDIAINFO_BDAV_YES)
- #define MEDIAINFO_BDAV_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_BDMV_NO) && !defined(MEDIAINFO_BDMV_YES)
- #define MEDIAINFO_BDMV_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_CDXA_NO) && !defined(MEDIAINFO_CDXA_YES)
- #define MEDIAINFO_CDXA_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_DASHMPD_NO) && !defined(MEDIAINFO_DASHMPD_YES)
- #define MEDIAINFO_DASHMPD_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_DCP_NO) && !defined(MEDIAINFO_DCP_YES)
- #define MEDIAINFO_DCP_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_DVDIF_NO) && !defined(MEDIAINFO_DVDIF_YES)
- #define MEDIAINFO_DVDIF_YES
-#endif
-#if defined(MEDIAINFO_DVDIF_YES) && !defined(MEDIAINFO_DVDIF_ANALYZE_NO) && !defined(MEDIAINFO_DVDIF_ANALYZE_YES)
- #define MEDIAINFO_DVDIF_ANALYZE_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_DVDV_NO) && !defined(MEDIAINFO_DVDV_YES)
- #define MEDIAINFO_DVDV_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_DXW_NO) && !defined(MEDIAINFO_DXW_YES)
- #define MEDIAINFO_DXW_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_FLV_NO) && !defined(MEDIAINFO_FLV_YES)
- #define MEDIAINFO_FLV_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_GXF_NO) && !defined(MEDIAINFO_GXF_YES)
- #define MEDIAINFO_GXF_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_HDSF4M_NO) && !defined(MEDIAINFO_HDSF4M_YES)
- #define MEDIAINFO_HDSF4M_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_HLS_NO) && !defined(MEDIAINFO_HLS_YES)
- #define MEDIAINFO_HLS_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_ISM_NO) && !defined(MEDIAINFO_ISM_YES)
- #define MEDIAINFO_ISM_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_IVF_NO) && !defined(MEDIAINFO_IVF_YES)
- #define MEDIAINFO_IVF_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_IBI_NO) && !defined(MEDIAINFO_IBI_YES)
- #define MEDIAINFO_IBI_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_LXF_NO) && !defined(MEDIAINFO_LXF_YES)
- #define MEDIAINFO_LXF_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_MK_NO) && !defined(MEDIAINFO_MK_YES)
- #define MEDIAINFO_MK_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_MPEG4_NO) && !defined(MEDIAINFO_MPEG4_YES)
- #define MEDIAINFO_MPEG4_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_MPEGPS_NO) && !defined(MEDIAINFO_MPEGPS_YES)
- #define MEDIAINFO_MPEGPS_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_MPEGTS_NO) && !defined(MEDIAINFO_MPEGTS_YES)
- #define MEDIAINFO_MPEGTS_YES
-#endif
-#if defined(MEDIAINFO_MPEGTS_YES) && !defined(MEDIAINFO_MPEGTS_PCR_NO) && !defined(MEDIAINFO_MPEGTS_PCR_YES)
- #define MEDIAINFO_MPEGTS_PCR_YES
-#endif
-#if defined(MEDIAINFO_MPEGTS_YES) && !defined(MEDIAINFO_MPEGTS_PESTIMESTAMP_NO) && !defined(MEDIAINFO_MPEGTS_PESTIMESTAMP_YES)
- #define MEDIAINFO_MPEGTS_PESTIMESTAMP_YES
-#endif
-#if defined(MEDIAINFO_MPEGTS_YES) && !defined(MEDIAINFO_MPEGTS_DUPLICATE_NO) && !defined(MEDIAINFO_MPEGTS_DUPLICATE_YES)
- #define MEDIAINFO_MPEGTS_DUPLICATE_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_MXF_NO) && !defined(MEDIAINFO_MXF_YES)
- #define MEDIAINFO_MXF_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_NUT_NO) && !defined(MEDIAINFO_NUT_YES)
- #define MEDIAINFO_NUT_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_OGG_NO) && !defined(MEDIAINFO_OGG_YES)
- #define MEDIAINFO_OGG_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_P2_NO) && !defined(MEDIAINFO_P2_YES)
- #define MEDIAINFO_P2_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_PMP_NO) && !defined(MEDIAINFO_PMP_YES)
- #define MEDIAINFO_PMP_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_PTX_NO) && !defined(MEDIAINFO_PTX_YES)
- #define MEDIAINFO_PTX_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_RIFF_NO) && !defined(MEDIAINFO_RIFF_YES)
- #define MEDIAINFO_RIFF_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_RM_NO) && !defined(MEDIAINFO_RM_YES)
- #define MEDIAINFO_RM_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_SEQUENCEINFO_NO) && !defined(MEDIAINFO_SEQUENCEINFO_YES)
- #define MEDIAINFO_SEQUENCEINFO_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_SKM_NO) && !defined(MEDIAINFO_SKM_YES)
- #define MEDIAINFO_SKM_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_SWF_NO) && !defined(MEDIAINFO_SWF_YES)
- #define MEDIAINFO_SWF_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_TSP_NO) && !defined(MEDIAINFO_TSP_YES)
- #define MEDIAINFO_TSP_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_UMF_NO) && !defined(MEDIAINFO_UMF_YES)
- #define MEDIAINFO_UMF_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_WM_NO) && !defined(MEDIAINFO_WM_YES)
- #define MEDIAINFO_WM_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_XDCAM_NO) && !defined(MEDIAINFO_XDCAM_YES)
- #define MEDIAINFO_XDCAM_YES
-#endif
-#if !defined(MEDIAINFO_MULTI_NO) && !defined(MEDIAINFO_DPG_NO) && !defined(MEDIAINFO_DPG_YES)
- #define MEDIAINFO_DPG_YES
-#endif
-
-//---------------------------------------------------------------------------
-// Video
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_AIC_NO) && !defined(MEDIAINFO_AIC_YES)
- #define MEDIAINFO_AIC_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_AFDBARDATA_NO) && !defined(MEDIAINFO_AFDBARDATA_YES)
- #define MEDIAINFO_AFDBARDATA_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_AVC_NO) && !defined(MEDIAINFO_AVC_YES)
- #define MEDIAINFO_AVC_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_AVSV_NO) && !defined(MEDIAINFO_AVSV_YES)
- #define MEDIAINFO_AVSV_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_CANOPUS_NO) && !defined(MEDIAINFO_CANOPUS_YES)
- #define MEDIAINFO_CANOPUS_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_DIRAC_NO) && !defined(MEDIAINFO_DIRAC_YES)
- #define MEDIAINFO_DIRAC_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_FFV1_NO) && !defined(MEDIAINFO_FFV1_YES)
- #define MEDIAINFO_FFV1_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_FLIC_NO) && !defined(MEDIAINFO_FLIC_YES)
- #define MEDIAINFO_FLIC_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_FRAPS_NO) && !defined(MEDIAINFO_FRAPS_YES)
- #define MEDIAINFO_FRAPS_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_H263_NO) && !defined(MEDIAINFO_H263_YES)
- #define MEDIAINFO_H263_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_HEVC_NO) && !defined(MEDIAINFO_HEVC_YES)
- #define MEDIAINFO_HEVC_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_HUFFYUV_NO) && !defined(MEDIAINFO_HUFFYUV_YES)
- #define MEDIAINFO_HUFFYUV_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_LAGARITH_NO) && !defined(MEDIAINFO_LAGARITH_YES)
- #define MEDIAINFO_LAGARITH_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_MPEG4V_NO) && !defined(MEDIAINFO_MPEG4V_YES)
- #define MEDIAINFO_MPEG4V_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_MPEGV_NO) && !defined(MEDIAINFO_MPEGV_YES)
- #define MEDIAINFO_MPEGV_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_PRORES_NO) && !defined(MEDIAINFO_PRORES_YES)
- #define MEDIAINFO_PRORES_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_VC1_NO) && !defined(MEDIAINFO_VC1_YES)
- #define MEDIAINFO_VC1_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_VC3_NO) && !defined(MEDIAINFO_VC3_YES)
- #define MEDIAINFO_VC3_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_TIMECODE_NO) && !defined(MEDIAINFO_TIMECODE_YES)
- #define MEDIAINFO_TIMECODE_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_THEORA_NO) && !defined(MEDIAINFO_THEORA_YES)
- #define MEDIAINFO_THEORA_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_VP8_NO) && !defined(MEDIAINFO_VP8_YES)
- #define MEDIAINFO_VP8_YES
-#endif
-#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_Y4M_NO) && !defined(MEDIAINFO_Y4M_YES)
- #define MEDIAINFO_Y4M_YES
-#endif
-
-//---------------------------------------------------------------------------
-// Audio
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_AAC_NO) && !defined(MEDIAINFO_AAC_YES)
- #define MEDIAINFO_AAC_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_AC3_NO) && !defined(MEDIAINFO_AC3_YES)
- #define MEDIAINFO_AC3_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_ADPCM_NO) && !defined(MEDIAINFO_ADPCM_YES)
- #define MEDIAINFO_ADPCM_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_ALS_NO) && !defined(MEDIAINFO_ALS_YES)
- #define MEDIAINFO_ALS_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_LATM_NO) && !defined(MEDIAINFO_LATM_YES)
- #define MEDIAINFO_LATM_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_AMR_NO) && !defined(MEDIAINFO_AMR_YES)
- #define MEDIAINFO_AMR_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_AMV_NO) && !defined(MEDIAINFO_AMV_YES)
- #define MEDIAINFO_AMV_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_APE_NO) && !defined(MEDIAINFO_APE_YES)
- #define MEDIAINFO_APE_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_AU_NO) && !defined(MEDIAINFO_AU_YES)
- #define MEDIAINFO_AU_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_CELT_NO) && !defined(MEDIAINFO_CELT_YES)
- #define MEDIAINFO_CELT_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_DOLBYE_NO) && !defined(MEDIAINFO_DOLBYE_YES)
- #define MEDIAINFO_DOLBYE_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_DTS_NO) && !defined(MEDIAINFO_DTS_YES)
- #define MEDIAINFO_DTS_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_FLAC_NO) && !defined(MEDIAINFO_FLAC_YES)
- #define MEDIAINFO_FLAC_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_IT_NO) && !defined(MEDIAINFO_IT_YES)
- #define MEDIAINFO_IT_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_LA_NO) && !defined(MEDIAINFO_LA_YES)
- #define MEDIAINFO_LA_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_MIDO_NO) && !defined(MEDIAINFO_MIDO_YES)
- #define MEDIAINFO_MIDI_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_MOD_NO) && !defined(MEDIAINFO_MOD_YES)
- #define MEDIAINFO_MOD_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_MPC_NO) && !defined(MEDIAINFO_MPC_YES)
- #define MEDIAINFO_MPC_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_MPCSV8_NO) && !defined(MEDIAINFO_MPCSV8_YES)
- #define MEDIAINFO_MPCSV8_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_MPEGA_NO) && !defined(MEDIAINFO_MPEGA_YES)
- #define MEDIAINFO_MPEGA_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_OPENMG_NO) && !defined(MEDIAINFO_OPENMG_YES)
- #define MEDIAINFO_OPENMG_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_OPUS_NO) && !defined(MEDIAINFO_OPUS_YES)
- #define MEDIAINFO_OPUS_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_PCM_NO) && !defined(MEDIAINFO_PCM_YES)
- #define MEDIAINFO_PCM_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_PCMM2TS_NO) && !defined(MEDIAINFO_PCMM2TS_YES)
- #define MEDIAINFO_PCMM2TS_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_PCMVOB_NO) && !defined(MEDIAINFO_PCMVOB_YES)
- #define MEDIAINFO_PCMVOB_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_PS2A_NO) && !defined(MEDIAINFO_PS2A_YES)
- #define MEDIAINFO_PS2A_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_RKAU_NO) && !defined(MEDIAINFO_RKAU_YES)
- #define MEDIAINFO_RKAU_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_S3M_NO) && !defined(MEDIAINFO_S3M_YES)
- #define MEDIAINFO_S3M_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_SPEEX_NO) && !defined(MEDIAINFO_SPEEX_YES)
- #define MEDIAINFO_SPEEX_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_SMPTEST0302_NO) && !defined(MEDIAINFO_SMPTEST0302_YES)
- #define MEDIAINFO_SMPTEST0302_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_SMPTEST0331_NO) && !defined(MEDIAINFO_SMPTEST0331_YES)
- #define MEDIAINFO_SMPTEST0331_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_SMPTEST0337_NO) && !defined(MEDIAINFO_SMPTEST0337_YES)
- #define MEDIAINFO_SMPTEST0337_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_TAK_NO) && !defined(MEDIAINFO_TAK_YES)
- #define MEDIAINFO_TAK_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_TTA_NO) && !defined(MEDIAINFO_TTA_YES)
- #define MEDIAINFO_TTA_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_TWINVQ_NO) && !defined(MEDIAINFO_TWINVQ_YES)
- #define MEDIAINFO_TWINVQ_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_VORBIS_NO) && !defined(MEDIAINFO_VORBIS_YES)
- #define MEDIAINFO_VORBIS_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_WVPK_NO) && !defined(MEDIAINFO_WVPK_YES)
- #define MEDIAINFO_WVPK_YES
-#endif
-#if !defined(MEDIAINFO_AUDIO_NO) && !defined(MEDIAINFO_XM_NO) && !defined(MEDIAINFO_XM_YES)
- #define MEDIAINFO_XM_YES
-#endif
-
-//---------------------------------------------------------------------------
-// Text
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_ARIBSTDB24B37_NO) && !defined(MEDIAINFO_ARIBSTDB24B37_YES)
- #define MEDIAINFO_ARIBSTDB24B37_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_CDP_NO) && !defined(MEDIAINFO_CDP_YES)
- #define MEDIAINFO_CDP_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_CMML_NO) && !defined(MEDIAINFO_CMML_YES)
- #define MEDIAINFO_CMML_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_DVBSUBTITLE_NO) && !defined(MEDIAINFO_DVBSUBTITLE_YES)
- #define MEDIAINFO_DVBSUBTITLE_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_DTVCCTRANSPORT_NO) && !defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #define MEDIAINFO_DTVCCTRANSPORT_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_EIA608_NO) && !defined(MEDIAINFO_EIA608_YES)
- #define MEDIAINFO_EIA608_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_EIA708_NO) && !defined(MEDIAINFO_EIA708_YES)
- #define MEDIAINFO_EIA708_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_N19_NO) && !defined(MEDIAINFO_N19_YES)
- #define MEDIAINFO_N19_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_KATE_NO) && !defined(MEDIAINFO_KATE_YES)
- #define MEDIAINFO_KATE_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_PDF_NO) && !defined(MEDIAINFO_PDF_YES)
- #define MEDIAINFO_PDF_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_PGS_NO) && !defined(MEDIAINFO_PGS_YES)
- #define MEDIAINFO_PGS_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_SCC_NO) && !defined(MEDIAINFO_SCC_YES)
- #define MEDIAINFO_SCC_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_SCTE20_NO) && !defined(MEDIAINFO_SCTE20_YES)
- #define MEDIAINFO_SCTE20_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_SUBRIP_NO) && !defined(MEDIAINFO_SUBRIP_YES)
- #define MEDIAINFO_SUBRIP_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_TELETEXT_NO) && !defined(MEDIAINFO_TELETEXT_YES)
- #define MEDIAINFO_TELETEXT_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_TIMEDTEXT_NO) && !defined(MEDIAINFO_TIMEDTEXT_YES)
- #define MEDIAINFO_TIMEDTEXT_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_TTML_NO) && !defined(MEDIAINFO_TTML_YES)
- #define MEDIAINFO_TTML_YES
-#endif
-#if !defined(MEDIAINFO_TEXT_NO) && !defined(MEDIAINFO_OTHERTEXT_NO) && !defined(MEDIAINFO_OTHERTEXT_YES)
- #define MEDIAINFO_OTHERTEXT_YES
-#endif
-
-//---------------------------------------------------------------------------
-// Image
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_ARRIRAW_NO) && !defined(MEDIAINFO_ARRIRAW_YES)
- #define MEDIAINFO_ARRIRAW_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_BMP_NO) && !defined(MEDIAINFO_BMP_YES)
- #define MEDIAINFO_BMP_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_DDS_NO) && !defined(MEDIAINFO_DDS_YES)
- #define MEDIAINFO_DDS_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_DPX_NO) && !defined(MEDIAINFO_DPX_YES)
- #define MEDIAINFO_DPX_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_EXR_NO) && !defined(MEDIAINFO_EXR_YES)
- #define MEDIAINFO_EXR_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_GIF_NO) && !defined(MEDIAINFO_GIF_YES)
- #define MEDIAINFO_GIF_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_ICO_NO) && !defined(MEDIAINFO_ICO_YES)
- #define MEDIAINFO_ICO_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_JPEG_NO) && !defined(MEDIAINFO_JPEG_YES)
- #define MEDIAINFO_JPEG_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_PCX_NO) && !defined(MEDIAINFO_PCX_YES)
- #define MEDIAINFO_PCX_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_PNG_NO) && !defined(MEDIAINFO_PNG_YES)
- #define MEDIAINFO_PNG_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_PSD_NO) && !defined(MEDIAINFO_PSD_YES)
- #define MEDIAINFO_PSD_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_RLE_NO) && !defined(MEDIAINFO_RLE_YES)
- #define MEDIAINFO_RLE_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_TIFF_NO) && !defined(MEDIAINFO_TIFF_YES)
- #define MEDIAINFO_TIFF_YES
-#endif
-#if !defined(MEDIAINFO_IMAGE_NO) && !defined(MEDIAINFO_TGA_NO) && !defined(MEDIAINFO_TGA_YES)
- #define MEDIAINFO_TGA_YES
-#endif
-
-//---------------------------------------------------------------------------
-// Archive
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_7Z_NO) && !defined(MEDIAINFO_7Z_YES)
- #define MEDIAINFO_7Z_YES
-#endif
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_ACE_NO) && !defined(MEDIAINFO_ACE_YES)
- #define MEDIAINFO_ACE_YES
-#endif
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_BZIP2_NO) && !defined(MEDIAINFO_BZIP2_YES)
- #define MEDIAINFO_BZIP2_YES
-#endif
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_ELF_NO) && !defined(MEDIAINFO_ELF_YES)
- #define MEDIAINFO_ELF_YES
-#endif
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_GZIP_NO) && !defined(MEDIAINFO_GZIP_YES)
- #define MEDIAINFO_GZIP_YES
-#endif
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_ISO9660_NO) && !defined(MEDIAINFO_ISO9660_YES)
- #define MEDIAINFO_ISO9660_YES
-#endif
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_MZ_NO) && !defined(MEDIAINFO_MZ_YES)
- #define MEDIAINFO_MZ_YES
-#endif
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_RAR_NO) && !defined(MEDIAINFO_RAR_YES)
- #define MEDIAINFO_RAR_YES
-#endif
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_TAR_NO) && !defined(MEDIAINFO_TAR_YES)
- #define MEDIAINFO_TAR_YES
-#endif
-#if !defined(MEDIAINFO_ARCHIVE_NO) && !defined(MEDIAINFO_ZIP_NO) && !defined(MEDIAINFO_ZIP_YES)
- #define MEDIAINFO_ZIP_YES
-#endif
-
-//---------------------------------------------------------------------------
-// Tag
-#if !defined(MEDIAINFO_TAG_NO) && !defined(MEDIAINFO_TAG_NO) && !defined(MEDIAINFO_TAG_YES)
- #define MEDIAINFO_TAG_YES
-#endif
-#if !defined(MEDIAINFO_TAG_NO) && !defined(MEDIAINFO_APETAG_NO) && !defined(MEDIAINFO_APETAG_YES)
- #define MEDIAINFO_APETAG_YES
-#endif
-#if !defined(MEDIAINFO_TAG_NO) && !defined(MEDIAINFO_ID3_NO) && !defined(MEDIAINFO_ID3_YES)
- #define MEDIAINFO_ID3_YES
-#endif
-#if !defined(MEDIAINFO_TAG_NO) && !defined(MEDIAINFO_ID3V2_NO) && !defined(MEDIAINFO_ID3V2_YES)
- #define MEDIAINFO_ID3V2_YES
-#endif
-#if !defined(MEDIAINFO_TAG_NO) && !defined(MEDIAINFO_LYRICS3_NO) && !defined(MEDIAINFO_LYRICS3_YES)
- #define MEDIAINFO_LYRICS3_YES
-#endif
-#if !defined(MEDIAINFO_TAG_NO) && !defined(MEDIAINFO_LYRICS3V2_NO) && !defined(MEDIAINFO_LYRICS3V2_YES)
- #define MEDIAINFO_LYRICS3V2_YES
-#endif
-#if !defined(MEDIAINFO_TAG_NO) && !defined(MEDIAINFO_VORBISCOM_NO) && !defined(MEDIAINFO_VORBISCOM_YES)
- #define MEDIAINFO_VORBISCOM_YES
-#endif
-
-//---------------------------------------------------------------------------
-// Other
-#if !defined(MEDIAINFO_DUMMY_NO)
- //#define MEDIAINFO_DUMMY_YES
-#endif
-#if !defined(MEDIAINFO_OTHER_NO)
- #define MEDIAINFO_OTHER_YES
-#endif
-#if !defined(MEDIAINFO_UNKNOWN_NO)
- #define MEDIAINFO_UNKNOWN_YES
-#endif
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_ApeTag.cpp b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_ApeTag.cpp
deleted file mode 100644
index 97b49e906..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_ApeTag.cpp
+++ /dev/null
@@ -1,201 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_APETAG_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File_ApeTag.h"
-#include <algorithm>
-#include <ctime>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ApeTag::FileHeader_Parse()
-{
- //Parsing
- int64u Signature;
- Peek_B8(Signature);
- if (Signature==0x4150455441474558LL) //"APETAGEX"
- HeaderFooter(); //v2
-
- FILLING_BEGIN();
- Accept("ApeTag");
-
- Stream_Prepare(Stream_General);
-
- Stream_Prepare(Stream_Audio);
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_ApeTag::Header_Begin()
-{
- if (Buffer_Size<0x20)
- return false; //At least 32 bytes are needed for footer
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_ApeTag::Header_Parse()
-{
- //Testing if begin or end of tags
- if (CC8(Buffer+Buffer_Offset)==0x4150455441474558LL) //"APETAGEX"
- {
- //Filling
- Header_Fill_Code((int64u)-1, "File Footer");
- Header_Fill_Size(0x20);
- return;
- }
-
- //Parsing
- Ztring Value;
- int32u Flags, Length;
- Get_L4 (Length, "Length");
- Get_L4 (Flags, "Flags");
- Skip_Flags(Flags, 0, "Read Only");
- Skip_Flags(Flags, 1, "Binary");
- Skip_Flags(Flags, 2, "Locator of external stored information");
- Skip_Flags(Flags, 29, "Is the header");
- Skip_Flags(Flags, 30, "Contains a footer");
- Skip_Flags(Flags, 31, "Contains a header");
- size_t Pos=(size_t)Element_Offset;
- for (; Pos<Element_Size; Pos++)
- if (Buffer[Buffer_Offset+Pos]==0x00)
- break;
- if (Pos==Element_Size)
- {
- Element_WaitForMoreData();
- return;
- }
- Get_String(Pos-Element_Offset, Key, "Key");
- Skip_L1( "0x00");
-
- //Filling
- Header_Fill_Code(0, Key.c_str());
- Header_Fill_Size(Element_Offset+Length);
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ApeTag::HeaderFooter()
-{
- //Parsing
- int32u Flags;
- Skip_C8( "Preamble");
- Skip_L4( "Version");
- Skip_L4( "Size");
- Skip_L4( "Count");
- Get_L4 (Flags, "Flags");
- Skip_Flags(Flags, 0, "Read Only");
- Skip_Flags(Flags, 1, "Binary");
- Skip_Flags(Flags, 2, "Locator of external stored information");
- Skip_Flags(Flags, 29, "Is the header");
- Skip_Flags(Flags, 30, "Contains a footer");
- Skip_Flags(Flags, 31, "Contains a header");
- Skip_L8( "Reserved");
-}
-
-//---------------------------------------------------------------------------
-void File_ApeTag::Data_Parse()
-{
- //If footer
- if (Element_Code==(int64u)-1)
- {
- HeaderFooter();
- Finish("ApeTag");
- return;
- }
-
- //Parsing
- Ztring Value;
- Get_UTF8(Element_Size, Value, "Value"); Element_Info1(Value);
-
- //Filling
- transform(Key.begin(), Key.end(), Key.begin(), (int(*)(int))toupper); //(int(*)(int)) is a patch for unix
- if (Key=="ALBUM") Fill(Stream_General, 0, General_Album, Value);
- else if (Key=="ARTIST") Fill(Stream_General, 0, General_Performer, Value);
- else if (Key=="AUTHOR") Fill(Stream_General, 0, General_WrittenBy, Value);
- else if (Key=="BAND") Fill(Stream_General, 0, General_Performer, Value);
- else if (Key=="COMMENT") Fill(Stream_General, 0, General_Comment, Value);
- else if (Key=="COMMENTS") Fill(Stream_General, 0, General_Comment, Value);
- else if (Key=="COMPOSER") Fill(Stream_General, 0, General_Composer, Value);
- else if (Key=="CONTENTGROUP") Fill(Stream_General, 0, General_Genre, Value);
- else if (Key=="COPYRIGHT") Fill(Stream_General, 0, General_Copyright, Value);
- else if (Key=="DISK")
- {
- if (Value.find(__T("/"))!=Error)
- {
- Fill(Stream_General, 0, General_Part_Position_Total, Value.SubString(__T("/"), __T("")));
- Fill(Stream_General, 0, General_Part_Position, Value.SubString(__T(""), __T("/")));
- }
- else
- Fill(Stream_General, 0, General_Track_Position, Value);
- }
- else if (Key=="ENCODEDBY") Fill(Stream_General, 0, General_EncodedBy, Value);
- else if (Key=="GENRE") Fill(Stream_General, 0, General_Genre, Value);
- else if (Key=="ORIGARTIST") Fill(Stream_General, 0, General_Original_Performer, Value);
- else if (Key=="TITLE") Fill(Stream_General, 0, General_Title, Value);
- else if (Key=="TRACK")
- {
- if (Value.find(__T("/"))!=Error)
- {
- Fill(Stream_General, 0, General_Track_Position_Total, Value.SubString(__T("/"), __T("")));
- Fill(Stream_General, 0, General_Track_Position, Value.SubString(__T(""), __T("/")));
- }
- else
- Fill(Stream_General, 0, General_Track_Position, Value);
- }
- else if (Key=="UNSYNCEDLYRICS") Fill(Stream_General, 0, General_Lyrics, Value);
- else if (Key=="WWW") Fill(Stream_General, 0, General_Title_Url, Value);
- else if (Key=="YEAR") Fill(Stream_General, 0, General_Recorded_Date, Value);
- else if (Key=="CONTENT GROUP DESCRIPTION") Fill(Stream_General, 0, General_Title, Value);
- else if (Key=="ORIGINAL ALBUM/MOVIE/SHOW TITLE") Fill(Stream_General, 0, General_Original_Album, Value);
- else if (Key=="ORIGINAL ARTIST(S)/PERFORMER(S)") Fill(Stream_General, 0, General_Original_Performer, Value);
- else if (Key=="MP3GAIN_MINMAX") Fill(Stream_Audio, 0, "MP3Gain, Min/Max", Value);
- else if (Key=="MP3GAIN_UNDO") Fill(Stream_Audio, 0, "MP3Gain, Undo", Value);
- else if (Key=="REPLAYGAIN_TRACK_GAIN") Fill(Stream_Audio, 0, Audio_ReplayGain_Gain, Value.To_float64(), 2, true);
- else if (Key=="REPLAYGAIN_TRACK_PEAK") Fill(Stream_Audio, 0, Audio_ReplayGain_Peak, Value.To_float64(), 6, true);
- else Fill(Stream_General, 0, Key.c_str(), Value);
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_APETAG_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_ApeTag.h b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_ApeTag.h
deleted file mode 100644
index a8b030472..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_ApeTag.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about APETAG tagged files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ApeTagH
-#define MediaInfo_File_ApeTagH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_ApeTag
-//***************************************************************************
-
-class File_ApeTag : public File__Analyze
-{
-private :
- //Buffer - File header
- void FileHeader_Parse();
-
- //Buffer - Per element
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void HeaderFooter();
-
- //Temp
- std::string Key;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3.cpp b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3.cpp
deleted file mode 100644
index 5e0e98161..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ID3_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File_Id3.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Id3::Read_Buffer_Continue()
-{
- //Buffer size
- if (Buffer_Size<128)
- return;
-
- int32u Magic;
- Peek_B4(Magic);
- Ztring TitleAddition;
- Ztring ArtistAddition;
- Ztring AlbumAddition;
- Ztring GenreAddition;
- if (Magic==0x5441472B)
- {
- if (Buffer_Size<227+128)
- return;
-
- Skip_C4 ( "ID");
- Get_Local (60, TitleAddition, "Title");
- Get_Local (60, ArtistAddition, "Artist");
- Get_Local (60, AlbumAddition, "Album");
- Skip_B1 ( "Speed");
- Get_Local (30, GenreAddition, "Genre");
- Skip_Local(6, "Start time"); //mmm:ss
- Skip_Local(6, "End time"); //mmm:ss
-
- TitleAddition.TrimRight();
- ArtistAddition.TrimRight();
- AlbumAddition.TrimRight();
- GenreAddition.TrimRight();
- }
-
- //Parsing
- Ztring Title, Artist, Album, Year, Comment;
- int8u Track=0, Genre;
- Skip_C3 ( "ID");
- Get_Local (30, Title, "Title");
- Get_Local (30, Artist, "Artist");
- Get_Local (30, Album, "Album");
- Get_Local ( 4, Year, "Year");
- Get_Local (30, Comment, "Comment");
- if (Comment.size()<29) //Id3v1.1 specifications : Track number addition
- {
- Element_Offset-=2;
- int8u Zero;
- Peek_B1(Zero);
- if (Zero==0)
- {
- Skip_B1( "Zero");
- Get_B1 (Track, "Track");
- }
- else
- Element_Offset+=2;
- }
- Get_B1 (Genre, "Genre");
-
- FILLING_BEGIN();
- if (TitleAddition.empty())
- Title.TrimRight();
- if (ArtistAddition.empty())
- Artist.TrimRight();
- if (AlbumAddition.empty())
- Album.TrimRight();
- Year.TrimRight();
- Comment.TrimRight();
-
- Accept("Id3");
-
- Stream_Prepare(Stream_General);
- Fill(Stream_General, 0, General_Album, Album+AlbumAddition);
- Fill(Stream_General, 0, General_Track, Title+TitleAddition);
- Fill(Stream_General, 0, General_Performer, Artist+ArtistAddition);
- if (Comment.find(__T("ExactAudioCopy"))==0)
- Fill(Stream_General, 0, General_Encoded_Application, Comment);
- else
- Fill(Stream_General, 0, General_Comment, Comment);
- Fill(Stream_General, 0, General_Recorded_Date, Year);
- if (GenreAddition.empty())
- Fill(Stream_General, 0, General_Genre, GenreAddition);
- if (Genre && Genre!=(int8u)-1)
- Fill(Stream_General, 0, General_Genre, Genre);
- if (Track)
- Fill(Stream_General, 0, General_Track_Position, Track);
-
- Finish("Id3");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_ID3_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3.h b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3.h
deleted file mode 100644
index 093b65d68..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ID3 tagged files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Id3H
-#define MediaInfo_File_Id3H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Id3
-//***************************************************************************
-
-class File_Id3 : public File__Analyze
-{
-private :
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3v2.cpp b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3v2.cpp
deleted file mode 100644
index 3e10e5054..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3v2.cpp
+++ /dev/null
@@ -1,1414 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos (Common)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ID3V2_YES) || defined(MEDIAINFO_FLAC_YES) || defined(MEDIAINFO_VORBISCOM_YES) || defined(MEDIAINFO_OGG_YES)
-//---------------------------------------------------------------------------
-
-#include "ZenLib/Conf.h"
-using namespace ZenLib;
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-extern const char* Id3v2_PictureType(int8u Type)
-{
- switch (Type)
- {
- case 0x01 :
- case 0x02 : return "File icon";
- case 0x03 : return "Cover (front)";
- case 0x04 : return "Cover (back)";
- case 0x05 : return "Leaflet page";
- case 0x06 : return "Media";
- case 0x07 :
- case 0x08 : return "Performer";
- case 0x09 : return "Conductor";
- case 0x0A : return "Performer";
- case 0x0B : return "Composer";
- case 0x0C : return "Lyricist";
- case 0x0D : return "Recording Location";
- case 0x0E : return "During recording";
- case 0x0F : return "During performance";
- case 0x10 : return "Screen capture";
- case 0x12 : return "Illustration";
- case 0x13 : return "Performer logo";
- case 0x14 : return "Publisher logo";
- default : return "";
- }
-}
-
-} //NameSpace
-
-//---------------------------------------------------------------------------
-#endif //...
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-//
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ID3V2_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File_Id3v2.h"
-#include "ZenLib/ZtringListList.h"
-#include "ZenLib/Utils.h"
-#include "base64.h"
-#include <cstring>
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Id3v2_TextEnc[]=
-{
- "ISO 8859-1",
- "UTF-16",
- "UTF-16BE",
- "UTF-8",
-};
-
-//---------------------------------------------------------------------------
-const char* Id3v2_RGAD_Name_code[]=
-{
- "",
- "Radio Gain Adjustment",
- "Audiophile Gain Adjustment",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Id3v2_RGAD_Originator_code[]=
-{
- "",
- "Pre-set by artist/producer/mastering engineer",
- "Set by user",
- "Determined automatically",
- "",
- "",
- "",
- "",
-};
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-namespace Elements
-{
- const int32u AENC=0x41454E47;
- const int32u APIC=0x41504943;
- const int32u ASPI=0x41535049;
- const int32u COMM=0x434F4D4D;
- const int32u COMR=0x434F4D52;
- const int32u ENCR=0x454E4352;
- const int32u EQU2=0x45515532;
- const int32u EQUA=0x45515541;
- const int32u ETCO=0x4554434F;
- const int32u GEOB=0x47454F42;
- const int32u GRID=0x47524944;
- const int32u IPLS=0x49504C53;
- const int32u LINK=0x4C494E4B;
- const int32u MCDI=0x4D434449;
- const int32u MLLT=0x4D4C4C54;
- const int32u OWNE=0x4F574E45;
- const int32u PCNT=0x50434E58;
- const int32u POPM=0x504F504D;
- const int32u POSS=0x504F5353;
- const int32u PRIV=0x50524956;
- const int32u RBUF=0x52425546;
- const int32u RGAD=0x52474144;
- const int32u RVA2=0x52564132;
- const int32u RVRB=0x52565242;
- const int32u SEEK=0x5345454B;
- const int32u SIGN=0x5349474E;
- const int32u SYLT=0x53594C54;
- const int32u SYTC=0x53595443;
- const int32u TALB=0x54414C42;
- const int32u TBPM=0x5442504D;
- const int32u TCMP=0x54434D50;
- const int32u TCOM=0x54434F4D;
- const int32u TCON=0x54434F4E;
- const int32u TCOP=0x54434F50;
- const int32u TDAT=0x54444154;
- const int32u TDEN=0x5444454E;
- const int32u TDLY=0x54444C59;
- const int32u TDOR=0x54444F52;
- const int32u TDRC=0x54445243;
- const int32u TDRL=0x5444524C;
- const int32u TDTG=0x54445447;
- const int32u TENC=0x54454E43;
- const int32u TEXT=0x54455854;
- const int32u TFLT=0x54464C54;
- const int32u TIME=0x54494D45;
- const int32u TIPL=0x5449504C;
- const int32u TIT1=0x54495431;
- const int32u TIT2=0x54495432;
- const int32u TIT3=0x54495433;
- const int32u TKEY=0x544B4559;
- const int32u TLAN=0x544C414E;
- const int32u TLEN=0x544C454E;
- const int32u TMCL=0x544D434C;
- const int32u TMED=0x544D4544;
- const int32u TMOO=0x544D4F4F;
- const int32u TOAL=0x544F414C;
- const int32u TOFN=0x544F464E;
- const int32u TOLY=0x544F4C59;
- const int32u TOPE=0x544F5045;
- const int32u TORY=0x544F5259;
- const int32u TOWN=0x544F574E;
- const int32u TPE1=0x54504531;
- const int32u TPE2=0x54504532;
- const int32u TPE3=0x54504533;
- const int32u TPE4=0x54504534;
- const int32u TPOS=0x54504F53;
- const int32u TPRO=0x5450524F;
- const int32u TPUB=0x54505542;
- const int32u TRCK=0x5452434B;
- const int32u TRDA=0x54524441;
- const int32u TRSN=0x5452534E;
- const int32u TRSO=0x5452534F;
- const int32u TSIZ=0x5453495A;
- const int32u TSO2=0x54534F32;
- const int32u TSOA=0x54534F41;
- const int32u TSOC=0x54534F43;
- const int32u TSOP=0x54534F50;
- const int32u TSOT=0x54534F54;
- const int32u TSRC=0x54535243;
- const int32u TSSE=0x54535345;
- const int32u TSST=0x54535354;
- const int32u TXXX=0x54585858;
- const int32u TYER=0x54594552;
- const int32u UFID=0x55464944;
- const int32u USER=0x55534552;
- const int32u USLT=0x55534C54;
- const int32u WCOM=0x57434F4D;
- const int32u WCOP=0x57434F50;
- const int32u WOAF=0x574F4146;
- const int32u WOAR=0x574F4152;
- const int32u WOAS=0x574F4153;
- const int32u WORS=0x574F5253;
- const int32u WPAY=0x57504159;
- const int32u WPUB=0x57505542;
- const int32u WXXX=0x57585858;
- const int32u XRVA=0x58525641;
- const int32u BUF=0x425546;
- const int32u CNT=0x434E56;
- const int32u COM=0x434F4D;
- const int32u CRA=0x435241;
- const int32u CRM=0x43524D;
- const int32u EQU=0x455155;
- const int32u ETC=0x455443;
- const int32u GEO=0x47454F;
- const int32u IPL=0x49504C;
- const int32u LNK=0x4C4E4B;
- const int32u MCI=0x4D4349;
- const int32u MLL=0x4D4C4C;
- const int32u PIC_=0x504943; //PIC is used by shared libs in GCC
- const int32u POP=0x504F50;
- const int32u REV=0x524556;
- const int32u RVA=0x525641;
- const int32u SLT=0x534C54;
- const int32u STC=0x535443;
- const int32u TAL=0x54414C;
- const int32u TBP=0x544250;
- const int32u TCM=0x54434D;
- const int32u TCO=0x54434F;
- const int32u TCP=0x544350;
- const int32u TCR=0x544352;
- const int32u TDA=0x544441;
- const int32u TDY=0x544459;
- const int32u TEN=0x54454E;
- const int32u TFT=0x544654;
- const int32u TIM=0x54494D;
- const int32u TKE=0x544B45;
- const int32u TLA=0x544C41;
- const int32u TLE=0x544C45;
- const int32u TMT=0x544D54;
- const int32u TOA=0x544F41;
- const int32u TOF=0x544F46;
- const int32u TOL=0x544F4C;
- const int32u TOR=0x544F52;
- const int32u TOT=0x544F54;
- const int32u TP1=0x545031;
- const int32u TP2=0x545032;
- const int32u TP3=0x545033;
- const int32u TP4=0x545034;
- const int32u TPA=0x545041;
- const int32u TPB=0x545042;
- const int32u TRC=0x545243;
- const int32u TRD=0x545244;
- const int32u TRK=0x54524B;
- const int32u TSI=0x545349;
- const int32u TSS=0x545353;
- const int32u TT1=0x545431;
- const int32u TT2=0x545432;
- const int32u TT3=0x545433;
- const int32u TXT=0x545854;
- const int32u TXX=0x545858;
- const int32u TYE=0x545945;
- const int32u UFI=0x554649;
- const int32u ULT=0x554C54;
- const int32u WAF=0x574146;
- const int32u WAR=0x574152;
- const int32u WAS=0x574153;
- const int32u WCM=0x57434D;
- const int32u WCP=0x574350;
- const int32u WPB=0x575042;
- const int32u WXX=0x575858;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Id3v2::File_Id3v2()
-:File__Analyze()
-{
- //Temp
- Id3v2_Size=0;
-}
-
-//***************************************************************************
-// Static stuff
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Id3v2::Static_Synchronize_Tags(const int8u* Buffer, size_t Buffer_Offset, size_t Buffer_Size, bool &Tag_Found)
-{
- //Buffer size
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- //ID
- if ((Buffer[Buffer_Offset ]==0x49 // "ID3"
- && Buffer[Buffer_Offset+1]==0x44
- && Buffer[Buffer_Offset+2]==0x33)
- || (Buffer[Buffer_Offset ]==0x65 // "ea3", found in OpenMG
- && Buffer[Buffer_Offset+1]==0x61
- && Buffer[Buffer_Offset+2]==0x33))
- Tag_Found=true;
- else
- Tag_Found=false;
-
- //Continue
- return true;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Id3v2::Streams_Fill()
-{
- if (Count_Get(Stream_General)==0)
- return;
-
- //Specific formats (multiple Id3v2 tags for one MI tag)
- if (Retrieve(Stream_General, 0, General_Recorded_Date).empty() && !Year.empty())
- {
- Ztring Recorded_Date=Year;
- if (!Month.empty())
- {
- Recorded_Date+=__T('-');
- Recorded_Date+=Month;
- if (!Day.empty())
- {
- Recorded_Date+=__T('-');
- Recorded_Date+=Day;
- if (!Hour.empty())
- {
- Recorded_Date+=__T(' ');
- Recorded_Date+=Hour;
- if (!Minute.empty())
- {
- Recorded_Date+=__T(':');
- Recorded_Date+=Minute;
- }
- }
- }
- }
- Fill(Stream_General, 0, General_Recorded_Date, Recorded_Date);
- }
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Id3v2::FileHeader_Parse()
-{
- //Parsing
- int32u Size;
- int8u Flags;
- bool ExtendedHeader;
- Skip_C3( "identifier");
- Get_B1 (Id3v2_Version, "version_major");
- Skip_B1( "version_revision");
- Get_B1 (Flags, "flags");
- Get_Flags (Flags, 7, Unsynchronisation_Global, "Unsynchronisation");
- Get_Flags (Flags, 6, ExtendedHeader, "Extended header");
- Skip_Flags(Flags, 5, "Experimental indicator");
- Get_B4 (Size, "Size");
- Id3v2_Size=((Size>>0)&0x7F)
- | ((Size>>1)&0x3F80)
- | ((Size>>2)&0x1FC000)
- | ((Size>>3)&0x0FE00000);
- Param_Info1(Id3v2_Size);
- if (ExtendedHeader)
- {
- Element_Begin1("Extended header");
- int32u Size_Extended;
- Get_B4 (Size_Extended, "Size");
- Skip_XX(Size_Extended, "Extended header");
- Element_End0();
- }
-
- FILLING_BEGIN();
- //Versions
- switch (Id3v2_Version)
- {
- case 2 : break;
- case 3 : break;
- case 4 : break;
- default :
- Skip_XX(Id3v2_Size, "Data");
- return;
- }
-
- Accept("Id3v2");
- Stream_Prepare(Stream_General);
-
- Stream_Prepare(Stream_Audio);
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Id3v2::Header_Parse()
-{
- Unsynchronisation_Frame=false;
- DataLengthIndicator=false;
-
- if (Id3v2_Size<10) //first 10 is minimum size of a tag, Second 10 is ID3v2 header size
- {
- //Not enough place for a tag, must be padding
- Header_Fill_Code((int64u)-1, "Padding");
- Header_Fill_Size(Id3v2_Size);
- return;
- }
-
- if (Buffer_Offset+10>Buffer_Size)
- {
- Element_WaitForMoreData();
- return; //Not enough buffer
- }
-
- //Testing padding
- int32u Frame_ID, Size;
- Frame_ID=CC1(Buffer+Buffer_Offset);
- if (Frame_ID==0x00)
- {
- //This is the padding
- Header_Fill_Code(0xFFFFFFFF, "Padding");
- Header_Fill_Size(Id3v2_Size);
- return;
- }
-
- //Parsing
- if (Id3v2_Version==2)
- {
- Get_C3 (Frame_ID, "Frame ID");
- Get_B3 (Size, "Size");
- }
- else
- {
- int16u Flags;
- Get_C4 (Frame_ID, "Frame ID");
- Get_B4 (Size, "Size");
- if (Id3v2_Version!=3)
- {
- Size=((Size>>0)&0x7F)
- | ((Size>>1)&0x3F80)
- | ((Size>>2)&0x1FC000)
- | ((Size>>3)&0x0FE00000);
- Param_Info2(Size, " bytes");
- }
- Get_B2 (Flags, "Flags");
- if (Id3v2_Version==3)
- {
- Skip_Flags(Flags, 15, "Tag alter preservation");
- Skip_Flags(Flags, 14, "File alter preservation");
- Skip_Flags(Flags, 13, "Read only");
- Skip_Flags(Flags, 7, "Compression");
- Skip_Flags(Flags, 6, "Encryption");
- Skip_Flags(Flags, 5, "Grouping identity");
- }
- if (Id3v2_Version==4)
- {
- Skip_Flags(Flags, 14, "Tag alter preservation");
- Skip_Flags(Flags, 13, "File alter preservation");
- Skip_Flags(Flags, 12, "Read only");
- Skip_Flags(Flags, 6, "Grouping identity");
- Skip_Flags(Flags, 3, "Compression");
- Skip_Flags(Flags, 2, "Encryption");
- Get_Flags (Flags, 1, Unsynchronisation_Frame, "Unsynchronisation");
- Get_Flags (Flags, 0, DataLengthIndicator, "Data length indicator");
- }
- }
-
- //Hanlding Unsynchronisation
- if (Unsynchronisation_Global || Unsynchronisation_Frame)
- {
- if (Buffer_Offset+(size_t)Element_Offset+Size>Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
- for (size_t Element_Offset_Unsynch=0; Element_Offset_Unsynch+2<Element_Offset+Size; Element_Offset_Unsynch++)
- if (CC2(Buffer+Buffer_Offset+Element_Offset_Unsynch)==0xFF00)
- {
- Size++;
- if (Buffer_Offset+(size_t)Element_Offset+Size>Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
- }
- }
-
- //Filling
- Ztring ToShow;
- if (Id3v2_Version==2)
- ToShow.From_CC3(Frame_ID);
- else
- ToShow.From_CC4(Frame_ID);
- Header_Fill_Code(Frame_ID, ToShow);
- Header_Fill_Size(Element_Offset+Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::Data_Parse()
-{
- Id3v2_Size-=Header_Size+Element_Size;
-
- int32u DataLength=(int32u)-1;
- if (DataLengthIndicator)
- {
- Get_B4 (DataLength, "Data length");
- DataLength=((DataLength>>0)&0x7F)
- | ((DataLength>>1)&0x3F80)
- | ((DataLength>>2)&0x1FC000)
- | ((DataLength>>3)&0x0FE00000);
- Param_Info2(DataLength, " bytes");
- }
-
- //Unsynchronisation
- int8u* Buffer_Unsynch=NULL;
- const int8u* Save_Buffer=Buffer;
- int64u Save_File_Offset=File_Offset;
- size_t Save_Buffer_Offset=Buffer_Offset;
- int64u Save_Element_Size=Element_Size;
- int64u Element_Offset_Unsynch=Element_Offset;
- std::vector<size_t> Unsynch_List;
- if (Unsynchronisation_Global || Unsynchronisation_Frame)
- {
- while (Element_Offset_Unsynch+2<Element_Size)
- {
- if (CC2(Buffer+Buffer_Offset+(size_t)Element_Offset_Unsynch)==0xFF00)
- Unsynch_List.push_back((size_t)(Element_Offset_Unsynch+1));
- Element_Offset_Unsynch++;
- }
- if (DataLength!=(int32u)-1 && 4+DataLength!=Element_Size-Unsynch_List.size())
- {
- Skip_XX(Element_Size-Element_Offset, "Size coherency issue");
- return;
- }
- if (!Unsynch_List.empty())
- {
- //We must change the buffer for keeping out
- File_Offset=Save_File_Offset+Buffer_Offset;
- Element_Size=Save_Element_Size-Unsynch_List.size();
- Buffer_Offset=0;
- Buffer_Unsynch=new int8u[(size_t)Element_Size];
- for (size_t Pos=0; Pos<=Unsynch_List.size(); Pos++)
- {
- size_t Pos0=(Pos==Unsynch_List.size())?(size_t)Save_Element_Size:(Unsynch_List[Pos]);
- size_t Pos1=(Pos==0)?0:(Unsynch_List[Pos-1]+1);
- size_t Buffer_Unsynch_Begin=Pos1-Pos;
- size_t Save_Buffer_Begin =Pos1;
- size_t Size= Pos0-Pos1;
- std::memcpy(Buffer_Unsynch+Buffer_Unsynch_Begin, Save_Buffer+Save_Buffer_Offset+Save_Buffer_Begin, Size);
- }
- Buffer=Buffer_Unsynch;
- }
- }
-
- #define CASE_INFO(_NAME, _DETAIL) \
- case Elements::_NAME : Element_Info1(_DETAIL); _NAME(); break;
-
- //Parsing
- Element_Value.clear();
- Element_Values.clear();
- switch (Element_Code)
- {
- CASE_INFO(AENC, "Audio encryption");
- CASE_INFO(APIC, "Attached picture");
- CASE_INFO(ASPI, "Audio seek point index");
- CASE_INFO(COMM, "Comments");
- CASE_INFO(COMR, "Commercial frame");
- CASE_INFO(ENCR, "Encryption method registration");
- CASE_INFO(EQU2, "Equalisation (2)");
- CASE_INFO(EQUA, "Equalization");
- CASE_INFO(ETCO, "Event timing codes");
- CASE_INFO(GEOB, "General encapsulated object");
- CASE_INFO(GRID, "Group identification registration");
- CASE_INFO(IPLS, "Involved people list");
- CASE_INFO(LINK, "Linked information");
- CASE_INFO(MCDI, "Music CD identifier");
- CASE_INFO(MLLT, "MPEG location lookup table");
- CASE_INFO(OWNE, "Ownership frame");
- CASE_INFO(PCNT, "Play counter");
- CASE_INFO(POPM, "Popularimeter");
- CASE_INFO(POSS, "Position synchronisation frame");
- CASE_INFO(PRIV, "Private frame");
- CASE_INFO(RBUF, "Recommended buffer size");
- CASE_INFO(RGAD, "Replay Gain Adjustment");
- CASE_INFO(RVA2, "Relative volume adjustment (2)");
- CASE_INFO(RVRB, "Reverb");
- CASE_INFO(SEEK, "Seek frame");
- CASE_INFO(SIGN, "Signature frame");
- CASE_INFO(SYLT, "Synchronised lyric/text");
- CASE_INFO(SYTC, "Synchronised tempo codes");
- CASE_INFO(TALB, "Album/Movie/Show title");
- CASE_INFO(TBPM, "BPM (beats per minute)");
- CASE_INFO(TCMP, "iTunes Compilation Flag");
- CASE_INFO(TCOM, "Composer");
- CASE_INFO(TCON, "Content type");
- CASE_INFO(TCOP, "Copyright message");
- CASE_INFO(TDAT, "Date");
- CASE_INFO(TDEN, "Encoding time");
- CASE_INFO(TDLY, "Playlist delay");
- CASE_INFO(TDOR, "Original release time");
- CASE_INFO(TDRC, "Recording time");
- CASE_INFO(TDRL, "Release time");
- CASE_INFO(TDTG, "Tagging time");
- CASE_INFO(TENC, "Encoded by");
- CASE_INFO(TEXT, "Lyricist/Text writer");
- CASE_INFO(TFLT, "File type");
- CASE_INFO(TIME, "Time");
- CASE_INFO(TIPL, "Involved people list");
- CASE_INFO(TIT1, "Content group description");
- CASE_INFO(TIT2, "Title/songname/content description");
- CASE_INFO(TIT3, "Subtitle/Description refinement");
- CASE_INFO(TKEY, "Initial key");
- CASE_INFO(TLAN, "Language(s)");
- CASE_INFO(TLEN, "Length");
- CASE_INFO(TMCL, "Musician credits list");
- CASE_INFO(TMED, "Media type");
- CASE_INFO(TMOO, "Mood");
- CASE_INFO(TOAL, "Original album/movie/show title");
- CASE_INFO(TOFN, "Original filename");
- CASE_INFO(TOLY, "Original lyricist(s)/text writer(s)");
- CASE_INFO(TOPE, "Original artist(s)/performer(s)");
- CASE_INFO(TORY, "Original release year");
- CASE_INFO(TOWN, "File owner/licensee");
- CASE_INFO(TPE1, "Lead performer(s)/Soloist(s)");
- CASE_INFO(TPE2, "Band/orchestra/accompaniment");
- CASE_INFO(TPE3, "Conductor/performer refinement");
- CASE_INFO(TPE4, "Interpreted, remixed, or otherwise modified by");
- CASE_INFO(TPOS, "Part of a set");
- CASE_INFO(TPRO, "Produced notice");
- CASE_INFO(TPUB, "Publisher");
- CASE_INFO(TRCK, "Track number/Position in set");
- CASE_INFO(TRDA, "Recording dates");
- CASE_INFO(TRSN, "Internet radio station name");
- CASE_INFO(TRSO, "Internet radio station owner");
- CASE_INFO(TSIZ, "Size");
- CASE_INFO(TSO2, "Performer order");
- CASE_INFO(TSOA, "Album sort order");
- CASE_INFO(TSOC, "Composer sort order");
- CASE_INFO(TSOP, "Performer sort order");
- CASE_INFO(TSOT, "Title sort order");
- CASE_INFO(TSRC, "ISRC (international standard recording code)");
- CASE_INFO(TSSE, "Software/Hardware and settings used for encoding");
- CASE_INFO(TSST, "Set subtitle");
- CASE_INFO(TXXX, "User defined text information frame");
- CASE_INFO(TYER, "Year");
- CASE_INFO(UFID, "Unique file identifier");
- CASE_INFO(USER, "Terms of use");
- CASE_INFO(USLT, "Unsynchronised lyric/text transcription");
- CASE_INFO(WCOM, "Commercial information");
- CASE_INFO(WCOP, "Copyright/Legal information");
- CASE_INFO(WOAF, "Official audio file webpage");
- CASE_INFO(WOAR, "Official artist/performer webpage");
- CASE_INFO(WOAS, "Official audio source webpage");
- CASE_INFO(WORS, "Official Internet radio station homepage");
- CASE_INFO(WPAY, "Payment");
- CASE_INFO(WPUB, "Publishers official webpage");
- CASE_INFO(WXXX, "User defined URL link frame");
- CASE_INFO(XRVA, "Relative volume adjustment (2)");
- CASE_INFO(BUF, "Recommended buffer size");
- CASE_INFO(CNT, "Play counter");
- CASE_INFO(COM, "Comments");
- CASE_INFO(CRA, "Audio encryption");
- CASE_INFO(CRM, "Encrypted meta frame");
- CASE_INFO(EQU, "Equalization");
- CASE_INFO(ETC, "Event timing codes");
- CASE_INFO(GEO, "General encapsulated object");
- CASE_INFO(IPL, "Involved people list");
- CASE_INFO(LNK, "Linked information");
- CASE_INFO(MCI, "Music CD Identifier");
- CASE_INFO(MLL, "MPEG location lookup table");
- CASE_INFO(PIC_, "Attached picture");
- CASE_INFO(POP, "Popularimeter");
- CASE_INFO(REV, "Reverb");
- CASE_INFO(RVA, "Relative volume adjustment");
- CASE_INFO(SLT, "Synchronized lyric/text");
- CASE_INFO(STC, "Synced tempo codes");
- CASE_INFO(TAL, "Album/Movie/Show title");
- CASE_INFO(TBP, "BPM (Beats Per Minute)");
- CASE_INFO(TCM, "Composer");
- CASE_INFO(TCO, "Content type");
- CASE_INFO(TCP, "iTunes Compilation Flag");
- CASE_INFO(TCR, "Copyright message");
- CASE_INFO(TDA, "Date");
- CASE_INFO(TDY, "Playlist delay");
- CASE_INFO(TEN, "Encoded by");
- CASE_INFO(TFT, "File type");
- CASE_INFO(TIM, "Time");
- CASE_INFO(TKE, "Initial key");
- CASE_INFO(TLA, "Language(s)");
- CASE_INFO(TLE, "Length");
- CASE_INFO(TMT, "Media type");
- CASE_INFO(TOA, "Original artist(s)/performer(s)");
- CASE_INFO(TOF, "Original filename");
- CASE_INFO(TOL, "Original Lyricist(s)/text writer(s)");
- CASE_INFO(TOR, "Original release year");
- CASE_INFO(TOT, "Original album/Movie/Show title");
- CASE_INFO(TP1, "Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group");
- CASE_INFO(TP2, "Band/Orchestra/Accompaniment");
- CASE_INFO(TP3, "Conductor/Performer refinement");
- CASE_INFO(TP4, "Interpreted, remixed, or otherwise modified by");
- CASE_INFO(TPA, "Part of a set");
- CASE_INFO(TPB, "Publisher");
- CASE_INFO(TRC, "ISRC (International Standard Recording Code)");
- CASE_INFO(TRD, "Recording dates");
- CASE_INFO(TRK, "Track number/Position in set");
- CASE_INFO(TSI, "Size");
- CASE_INFO(TSS, "Software/hardware and settings used for encoding");
- CASE_INFO(TT1, "Content group description");
- CASE_INFO(TT2, "Title/Songname/Content description");
- CASE_INFO(TT3, "Subtitle/Description refinement");
- CASE_INFO(TXT, "Lyricist/text writer");
- CASE_INFO(TXX, "User defined text information frame");
- CASE_INFO(TYE, "Year");
- CASE_INFO(UFI, "Unique file identifier");
- CASE_INFO(ULT, "Unsychronized lyric/text transcription");
- CASE_INFO(WAF, "Official audio file webpage");
- CASE_INFO(WAR, "Official artist/performer webpage");
- CASE_INFO(WAS, "Official audio source webpage");
- CASE_INFO(WCM, "Commercial information");
- CASE_INFO(WCP, "Copyright/Legal information");
- CASE_INFO(WPB, "Publishers official webpage");
- CASE_INFO(WXX, "User defined URL link frame");
- default : Skip_XX(Element_Size, "Data");
- }
-
- if (!Unsynch_List.empty())
- {
- //We must change the buffer for keeping out
- File_Offset=Save_File_Offset;
- Element_Size=Save_Element_Size;
- Buffer_Offset=Save_Buffer_Offset;
- delete[] Buffer; Buffer=Save_Buffer;
- Buffer_Unsynch=NULL; //Same as Buffer...
- Element_Offset+=Unsynch_List.size();
- }
-
- if (!Id3v2_Size)
- Finish("Id3v2");
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//
-void File_Id3v2::T___()
-{
- int8u Encoding;
- Get_B1 (Encoding, "Text_encoding");
- switch (Encoding)
- {
- case 0 : Get_ISO_8859_1 (Element_Size-Element_Offset, Element_Value, "Information"); break;
- case 1 : Get_UTF16 (Element_Size-Element_Offset, Element_Value, "Information"); break;
- case 2 : Get_UTF16B (Element_Size-Element_Offset, Element_Value, "Information"); break;
- case 3 : Get_UTF8 (Element_Size-Element_Offset, Element_Value, "Information"); break;
- default : ;
- }
-
- //Exceptions
- if (Element_Code==Elements::TCMP || Element_Code==Elements::TCP)
- {
- if (Element_Value==__T("0")) Element_Value.clear(); //This is usually set to 0 even if the user did not explicitely indicated something (default)
- if (Element_Value==__T("1")) Element_Value=__T("Yes");
- }
-
- //Filling
- if (Element_Value.empty())
- return;
- Fill_Name();
-}
-
-//---------------------------------------------------------------------------
-//
-void File_Id3v2::T__X()
-{
- //Integrity
- if (Element_Size<(Elements::TXXX?4:1))
- {
- Element_Values(1).clear();
- Element_Values(0).clear();
- return;
- }
-
- int8u Encoding;
- Get_B1 (Encoding, "Text_encoding");
- if (Element_Code!=Elements::TXXX)
- Skip_C3( "Language");
- size_t Value0_Size=0;
- switch (Encoding)
- {
- case 0 :
- case 3 : //1-byte char
- while (Element_Offset+Value0_Size<Element_Size && Buffer[Buffer_Offset+(size_t)Element_Offset+Value0_Size]!='\0')
- Value0_Size++;
- if (Element_Offset+Value0_Size>=Element_Size)
- return; //Problem
- switch (Encoding)
- {
- case 0 : Get_ISO_8859_1 (Value0_Size, Element_Values(0), "Short_content_descrip"); break;
- case 3 : Get_UTF8 (Value0_Size, Element_Values(0), "Short_content_descrip"); break;
- default : ;
- }
- Skip_B1( "Null");
- switch (Encoding)
- {
- case 0 : Get_ISO_8859_1 (Element_Size-Element_Offset, Element_Values(1), "The_actual_text"); break;
- case 3 : Get_UTF8 (Element_Size-Element_Offset, Element_Values(1), "The_actual_text"); break;
- default : ;
- }
- break;
- case 1 :
- case 2 : //2-byte char
- while (Element_Offset+Value0_Size+1<Element_Size
- && !(Buffer[Buffer_Offset+(size_t)Element_Offset+Value0_Size ]=='\0'
- && Buffer[Buffer_Offset+(size_t)Element_Offset+Value0_Size+1]=='\0')) //2-byte zero
- Value0_Size+=2;
- if (Element_Offset+Value0_Size>=Element_Size)
- return; //Problem
- switch (Encoding)
- {
- case 1 : Get_UTF16 (Value0_Size, Element_Values(0), "Short_content_descrip"); break;
- case 2 : Get_UTF16B(Value0_Size, Element_Values(0), "Short_content_descrip"); break;
- default : ;
- }
- Skip_B2( "Null");
- switch (Encoding)
- {
- case 1 : Get_UTF16 (Element_Size-Element_Offset, Element_Values(1), "The_actual_text"); break;
- case 2 : Get_UTF16B(Element_Size-Element_Offset, Element_Values(1), "The_actual_text"); break;
- default : ;
- }
- break;
- default: //Unknown
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::W___()
-{
- Get_ISO_8859_1(Element_Size, Element_Value, "URL");
-
- //Filling
- Fill_Name();
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::W__X()
-{
- if (Element_Size<1)
- return; //Problem
-
- int8u Encoding;
- Get_B1 (Encoding, "Text_encoding");
- switch (Encoding)
- {
- case 0 : Get_ISO_8859_1 (Element_Size-1, Element_Values(0), "Description"); break;
- case 1 : Get_UTF16 (Element_Size-1, Element_Values(0), "Description"); break;
- case 2 : Get_UTF16B (Element_Size-1, Element_Values(0), "Description"); break;
- case 3 : Get_UTF8 (Element_Size-1, Element_Values(0), "Description"); break;
- default : ;
- }
- Element_Offset=1;
- switch (Encoding)
- {
- case 0 : Element_Offset+=Element_Values(0).size()+1; break; //NULL
- case 1 : Element_Offset+=Element_Values(0).size()*2+4; break; //UTF-16 BOM + UTF-16 NULL
- case 2 : Element_Offset+=Element_Values(0).size()*2+2; break; //UTF-16 NULL
- case 3 : Element_Offset+=Element_Values(0).To_UTF8().size()+1; break; //UTF-8 NULL
- default : ;
- }
- if (Element_Offset<Element_Size)
- Get_ISO_8859_1(Element_Size-Element_Offset, Element_Values(1), "URL");
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::APIC()
-{
- int8u Encoding, PictureType;
- Ztring Mime, Description;
- Get_B1 (Encoding, "Text_encoding");
- if (Id3v2_Version==2)
- {
- int32u Image_format;
- Get_C3(Image_format, "Image_format");
- switch (Image_format)
- {
- case 0x504E47 : Mime="image/png"; break;
- case 0x4A5047 : Mime="image/jpeg"; break;
- default : ;
- }
- }
- else
- {
- int64u Element_Offset_Real=Element_Offset;
- Get_ISO_8859_1(Element_Size-Element_Offset, Mime, "MIME_type");
- Element_Offset=Element_Offset_Real+Mime.size()+1;
- }
- Get_B1 (PictureType, "Picture_type"); Element_Info1(Id3v2_PictureType(PictureType));
- int64u Element_Offset_Real=Element_Offset;
- switch (Encoding)
- {
- case 0 : Get_ISO_8859_1 (Element_Size-Element_Offset, Description, "Description"); break;
- case 1 : Get_UTF16 (Element_Size-Element_Offset, Description, "Description"); break;
- case 2 : Get_UTF16B (Element_Size-Element_Offset, Description, "Description"); break;
- case 3 : Get_UTF8 (Element_Size-Element_Offset, Description, "Description"); break;
- default : ;
- }
- Element_Offset=Element_Offset_Real;
- switch (Encoding)
- {
- case 0 : Element_Offset+=Description.size()+1; break; //NULL
- case 1 : Element_Offset+=Description.size()*2+4; break; //UTF-16 BOM + UTF-16 NULL
- case 2 : Element_Offset+=Description.size()*2+2; break; //UTF-16 NULL
- case 3 : Element_Offset+=Description.To_UTF8().size()+1; break; //UTF-8 NULL
- default : ;
- }
- if (Element_Offset>Element_Size)
- return; //There is a problem
- std::string Data_Raw((const char*)(Buffer+(size_t)(Buffer_Offset+Element_Offset)), (size_t)(Element_Size-Element_Offset));
- std::string Data_Base64(Base64::encode(Data_Raw));
-
- //Filling
- Fill_Name();
- Fill(Stream_General, 0, General_Cover_Description, Description);
- Fill(Stream_General, 0, General_Cover_Type, Id3v2_PictureType(PictureType));
- Fill(Stream_General, 0, General_Cover_Mime, Mime);
- Fill(Stream_General, 0, General_Cover_Data, Data_Base64);
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::COMM()
-{
- T__X();
-
- //Testing
- if (Element_Values(0)==__T("iTunes_CDDB_IDs")) return;
- else if (Element_Values(0)==__T("iTunNORM")) return;
- else if (Element_Values(0)==__T("iTunSMPB")) return;
- else if (Element_Values(0)==__T("Songs-DB_Tempo")) return;
- else if (Element_Values(0)==__T("Songs-DB_Preference")) return;
- else if (Element_Values(0)==__T("MusicMatch_Tempo")) return;
- else if (Element_Values(0)==__T("MusicMatch_Mood"))
- {
- if (Retrieve(Stream_General, 0, General_Mood).empty())
- Element_Values(0)==__T("Mood");
- else
- return;
- }
- else if (Element_Values(0)==__T("MusicMatch_Preference")) return;
-
- //Filling
- if (Element_Values(0).empty())
- {
- if (Element_Values(1).find(__T("ExactAudioCopy"))==0)
- {
- Fill(Stream_General, 0, General_Encoded_Application, Element_Values(1));
- return;
- }
-
- Element_Values(0)=__T("Comment");
- }
- Fill_Name();
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::RGAD()
-{
- //Parsing
- float32 Peak_Amplitude;
- Get_BF4 (Peak_Amplitude, "Peak Amplitude");
- while (Element_Offset+2<=Element_Size)
- {
- Element_Begin1("Gain Adjustement");
- int16u Replay_Gain_Adjustment;
- int8u Name_code;
- bool Sign_bit;
- BS_Begin();
- Get_S1 (3, Name_code, "Name code"); Param_Info1(Id3v2_RGAD_Name_code[Name_code]);
- Info_S1(3, Originator_code, "Originator code"); Param_Info1(Id3v2_RGAD_Originator_code[Originator_code]);
- Get_SB (Sign_bit, "Sign bit");
- Get_S2 (9, Replay_Gain_Adjustment, "Replay Gain Adjustment"); Param_Info3 ((Sign_bit?-1:1)*(float)Replay_Gain_Adjustment/10, 1, " dB");
- BS_End();
- Element_End0();
-
- FILLING_BEGIN();
- switch (Name_code)
- {
- case 1 : if (Retrieve(Stream_Audio, 0, Audio_ReplayGain_Gain).empty()) //this tag is not precise, we prefer other RG tags
- Fill(Stream_Audio, 0, Audio_ReplayGain_Gain, (Sign_bit?-1:1)*(float)Replay_Gain_Adjustment/10, 1);
- break;
- case 2 : if (Retrieve(Stream_General, 0, General_Album_ReplayGain_Gain).empty()) //this tag is not precise, we prefer other RG tags
- Fill(Stream_General, 0, General_Album_ReplayGain_Gain, (Sign_bit?-1:1)*(float)Replay_Gain_Adjustment/10, 1);
- break;
- default: ;
- }
- FILLING_END();
- }
-
- FILLING_BEGIN();
- if (Peak_Amplitude && Retrieve(Stream_Audio, 0, Audio_ReplayGain_Peak).empty()) //this tag is not precise, we prefer other RG tags
- Fill(Stream_Audio, 0, Audio_ReplayGain_Peak, Peak_Amplitude, 6);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::PRIV()
-{
- //Parsing
- //Ztring Owner;
- //Get_ISO_8859_1(Element_Size, Owner, "Owner identifier");
- string Owner;
- size_t Owner_Size=0;
- while (Element_Offset+Owner_Size<Element_Size && Buffer[Buffer_Offset+(size_t)Element_Offset+Owner_Size]!='\0')
- Owner_Size++;
- if (Owner_Size==0 || Element_Offset+Owner_Size>=Element_Size)
- {
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- return;
- }
- Get_String(Owner_Size, Owner, "Owner identifier");
- Skip_B1( "Null");
- if (Owner=="com.apple.streaming.transportStreamTimestamp")
- {
- //http://tools.ietf.org/html/draft-pantos-http-live-streaming-13
- int64u DTS;
- Get_B8 (DTS, "DTS");
-
- FILLING_BEGIN();
- if (DTS>=0x200000000LL) //33 bits
- {
- Fill(Stream_Audio, 0, Audio_Delay, DTS/90);
- FrameInfo.DTS=DTS*1000000/90;
- }
- FILLING_END();
- }
- else
- {
- Skip_XX(Element_Size-Element_Offset, "Data");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::USLT()
-{
- T__X();
-
- //Filling
- if (!Element_Values(0).empty())
- Element_Values(1)=Element_Values(0)+MediaInfoLib::Config.Language_Get(__T(": "))+Element_Values(1);
- Element_Values(0)=__T("Lyrics");
-
- Fill_Name();
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::TXXX()
-{
- T__X();
-
- //Filling
- if (Element_Values(0).empty())
- Element_Values(0)=__T("Comment");
- Fill_Name();
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::SYLT()
-{
- if (Element_Size<6)
- {
- Skip_XX(Element_Size, "(Problem)");
- return;
- }
-
- int8u Encoding;
- Get_B1 (Encoding, "Text encoding");
- Skip_C3( "Language");
- Skip_B1( "Time_stamp_format");
- Skip_B1( "Content_type");
- switch (Encoding)
- {
- case 0 : Get_ISO_8859_1 (Element_Size-6, Element_Value, "Short_content_descrip"); break;
- case 1 : Get_UTF16 (Element_Size-6, Element_Value, "Short_content_descrip"); break;
- case 2 : Get_UTF16B (Element_Size-6, Element_Value, "Short_content_descrip"); break;
- case 3 : Get_UTF8 (Element_Size-6, Element_Value, "Short_content_descrip"); break;
- default : ;
- }
-
- //Filling
- Fill_Name();
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::WXXX()
-{
- W__X();
-
- //Filling
- if (Element_Values(1).empty())
- return;
- if (Element_Values(0).empty())
- Element_Values(0)=__T("URL");
- Fill_Name();
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Id3v2::Fill_Name()
-{
- Ztring Value=Ztring().From_CC4((int32u)Element_Code);
- if (MediaInfoLib::Config.CustomMapping_IsPresent(__T("Id3v2"), Value))
- {
- Fill(Stream_General, 0, MediaInfoLib::Config.CustomMapping_Get(__T("Id3v2"), Value).To_Local().c_str(), Element_Value);
- return;
- }
-
- switch (Element_Code)
- {
- case Elements::AENC : break;
- case Elements::APIC : Fill(Stream_General, 0, General_Cover, "Yes"); break;
- case Elements::ASPI : break;
- case Elements::COMM : Fill(Stream_General, 0, Element_Values(0).To_UTF8().c_str(), Element_Values(1)); break;
- case Elements::COMR : Fill(Stream_General, 0, "Commercial frame", Element_Value); break;
- case Elements::ENCR : break;
- case Elements::EQU2 : break;
- case Elements::EQUA : break;
- case Elements::ETCO : break;
- case Elements::GEOB : break;
- case Elements::GRID : Fill(Stream_General, 0, "Group identification registration", Element_Value); break;
- case Elements::IPLS : Fill(Stream_General, 0, "Involved people list", Element_Value); break;
- case Elements::LINK : Fill(Stream_General, 0, "Linked information", Element_Value); break;
- case Elements::MCDI : Fill(Stream_General, 0, "MCDI", "Yes"); break;
- case Elements::MLLT : break;
- case Elements::OWNE : Fill(Stream_General, 0, General_Owner, Element_Value); break;
- case Elements::PCNT : break;
- case Elements::POPM : break;
- case Elements::POSS : break;
- case Elements::PRIV : break;
- case Elements::RBUF : break;
- case Elements::RVA2 : break;
- case Elements::RVRB : break;
- case Elements::SEEK : break;
- case Elements::SIGN : break;
- case Elements::SYLT : Fill(Stream_General, 0, General_Lyrics, Element_Value); break;
- case Elements::SYTC : break;
- case Elements::TALB : Fill(Stream_General, 0, General_Album, Element_Value); break;
- case Elements::TBPM : Fill(Stream_General, 0, General_BPM, Element_Value); break;
- case Elements::TCMP : Fill(Stream_General, 0, General_Compilation, Element_Value); break;
- case Elements::TCOM : Fill(Stream_General, 0, General_Composer, Element_Value); break;
- case Elements::TCON :
- {
- if (Element_Value.find(__T("("))==0)
- Element_Value=Element_Value.SubString(__T("("), __T(")")); //Replace (nn) by nn
- if (Element_Value==__T("0") || Element_Value==__T("255"))
- Element_Value.clear();
- Fill(Stream_General, 0, General_Genre, Element_Value);
- }
- break;
- case Elements::TCOP : Fill(Stream_General, 0, General_Copyright, Element_Value); break;
- case Elements::TDA :
- case Elements::TDAT : if (Element_Value.size()==4)
- {
- Month.assign(Element_Value.c_str(), 0, 2);
- Day.assign (Element_Value.c_str(), 2, 2); break;
- }
- case Elements::TDEN : Normalize_Date(Element_Value); Fill(Stream_General, 0, "Encoded_Date", Element_Value); break;
- case Elements::TDLY : break;
- case Elements::TDOR : Normalize_Date(Element_Value); Fill(Stream_General, 0, "Original/Released_Date", Element_Value); break;
- case Elements::TDRC : Normalize_Date(Element_Value); Fill(Stream_General, 0, General_Recorded_Date, Element_Value); break;
- case Elements::TDRL : Normalize_Date(Element_Value); Fill(Stream_General, 0, General_Released_Date, Element_Value); break;
- case Elements::TDTG : Normalize_Date(Element_Value); Fill(Stream_General, 0, General_Tagged_Date, Element_Value); break;
- case Elements::TENC : Fill(Stream_General, 0, General_EncodedBy, Element_Value); break;
- case Elements::TEXT : Fill(Stream_General, 0, General_Lyricist, Element_Value); break;
- case Elements::TFLT : Fill(Stream_General, 0, "File type", Element_Value); break;
- case Elements::TIM :
- case Elements::TIME : if (Element_Value.size()==4)
- {
- Hour.assign (Element_Value.c_str(), 0, 2);
- Minute.assign(Element_Value.c_str(), 2, 2); break;
- }
- case Elements::TIPL : Fill(Stream_General, 0, General_ThanksTo, Element_Value); break;
- case Elements::TIT1 : Fill(Stream_General, 0, General_Grouping, Element_Value); break;
- case Elements::TIT2 : Fill(Stream_General, 0, General_Track, Element_Value); break;
- case Elements::TIT3 : Fill(Stream_General, 0, General_Track_More, Element_Value); break;
- case Elements::TKEY : Fill(Stream_General, 0, "Initial key", Element_Value); break;
- case Elements::TLAN : Fill(Stream_Audio, 0, Audio_Language, Element_Value); break;
- case Elements::TLEN : break; //Fill(Stream_General, 0, "Length", Element_Value); break;
- case Elements::TMCL : Fill(Stream_General, 0, "Musician Credit List", Element_Value); break;
- case Elements::TMED : Fill(Stream_General, 0, "Media Type", Element_Value); break;
- case Elements::TMOO : Fill(Stream_General, 0, "Mood", Element_Value); break;
- case Elements::TOAL : Fill(Stream_General, 0, "Original/Album", Element_Value); break;
- case Elements::TOFN : Fill(Stream_General, 0, "Original/FileName", Element_Value); break;
- case Elements::TOLY : Fill(Stream_General, 0, "Original/Lyricist", Element_Value); break;
- case Elements::TOPE : Fill(Stream_General, 0, "Original/Performer", Element_Value); break;
- case Elements::TORY : Normalize_Date(Element_Value); Fill(Stream_General, 0, "Original/Released_Date", Element_Value); break;
- case Elements::TOWN : Fill(Stream_General, 0, General_Owner, Element_Value); break;
- case Elements::TPE1 : Fill(Stream_General, 0, General_Performer, Element_Value); break;
- case Elements::TPE2 : Fill(Stream_General, 0, General_Album_Performer, Element_Value); break;
- case Elements::TPE3 : Fill(Stream_General, 0, General_Conductor, Element_Value); break;
- case Elements::TPE4 : Fill(Stream_General, 0, General_RemixedBy, Element_Value); break;
- case Elements::TPOS :
- {
- ZtringList List; List.Separator_Set(0, __T("/")); List.Write(Element_Value);
- if (!List(0).empty())
- Fill(Stream_General, 0, General_Part_Position, List(0));
- if (!List(1).empty())
- Fill(Stream_General, 0, General_Part_Position_Total, List(1));
- }
- break;
- case Elements::TPRO : Fill(Stream_General, 0, General_Producer_Copyright, Element_Value); break;
- case Elements::TPUB : Fill(Stream_General, 0, General_Publisher, Element_Value); break;
- case Elements::TRCK :
- {
- ZtringList List; List.Separator_Set(0, __T("/")); List.Write(Element_Value);
- if (!List(0).empty())
- Fill(Stream_General, 0, General_Track_Position, List(0));
- if (!List(1).empty())
- Fill(Stream_General, 0, General_Track_Position_Total, List(1));
- }
- break;
- case Elements::TRDA : Normalize_Date(Element_Value); Fill(Stream_General, 0, "Recorded_Date", Element_Value); break;
- case Elements::TRSN : Fill(Stream_General, 0, General_ServiceName, Element_Value); break;
- case Elements::TRSO : Fill(Stream_General, 0, General_ServiceProvider, Element_Value); break;
- case Elements::TSIZ : Fill(Stream_General, 0, "Size", Element_Value); break;
- case Elements::TSO2 : Fill(Stream_General, 0, General_Performer_Sort, Element_Value); break;
- case Elements::TSOA : Fill(Stream_General, 0, General_Album_Sort, Element_Value); break;
- case Elements::TSOC : Fill(Stream_General, 0, "Composer/Sort", Element_Value); break;
- case Elements::TSOP : Fill(Stream_General, 0, General_Performer_Sort, Element_Value); break;
- case Elements::TSOT : Fill(Stream_General, 0, General_Track_Sort, Element_Value); break;
- case Elements::TSRC : Fill(Stream_General, 0, General_ISRC, Element_Value); break;
- case Elements::TSSE : Fill(Stream_General, 0, General_Encoded_Library, Element_Value); break;
- case Elements::TSST : Fill(Stream_General, 0, "Set subtitle", Element_Value); break;
- case Elements::TXXX : if (Element_Values(0)==__T("AccurateRipResult")) ;
- else if (Element_Values(0)==__T("AccurateRipDiscID")) ;
- else if (Element_Values(0)==__T("CT_GAPLESS_DATA")) ;
- else if (Element_Values(0)==__T("DISCNUMBER")) Fill(Stream_General, 0, General_Part_Position, Element_Values(1), true);
- else if (Element_Values(0)==__T("DISCTOTAL")) Fill(Stream_General, 0, General_Part_Position_Total, Element_Values(1), true);
- else if (Element_Values(0)==__T("first_played_timestamp")) Fill(Stream_General, 0, General_Played_First_Date, Ztring().Date_From_Milliseconds_1601(Element_Values(1).To_int64u()/10000));
- else if (Element_Values(0)==__T("last_played_timestamp")) Fill(Stream_General, 0, General_Played_Last_Date, Ztring().Date_From_Milliseconds_1601(Element_Values(1).To_int64u()/10000));
- else if (Element_Values(0)==__T("play_count")) Fill(Stream_General, 0, General_Played_Count, Element_Values(1).To_int64u());
- else if (Element_Values(0)==__T("added_timestamp")) Fill(Stream_General, 0, General_Added_Date, Ztring().Date_From_Milliseconds_1601(Element_Values(1).To_int64u()/10000));
- else if (Element_Values(0)==__T("replaygain_album_gain")) Fill(Stream_General, 0, General_Album_ReplayGain_Gain, Element_Values(1).To_float64(), 2, true);
- else if (Element_Values(0)==__T("replaygain_album_peak")) Fill(Stream_General, 0, General_Album_ReplayGain_Peak, Element_Values(1).To_float64(), 6, true);
- else if (Element_Values(0)==__T("replaygain_track_gain")) Fill(Stream_Audio, 0, Audio_ReplayGain_Gain, Element_Values(1).To_float64(), 2, true);
- else if (Element_Values(0)==__T("replaygain_track_peak")) Fill(Stream_Audio, 0, Audio_ReplayGain_Peak, Element_Values(1).To_float64(), 6, true);
- else if (Element_Values(0)==__T("TRACKTOTAL")) Fill(Stream_General, 0, General_Track_Position_Total, Element_Values(1), true);
- else if (Element_Values(0)==__T("OMG_AGENR")) ; //Duplicate of Genre
- else if (Element_Values(0)==__T("OMG_ALBMS")) ; //Duplicate of Album
- else if (Element_Values(0)==__T("OMG_ASGTM")) ; //?
- else if (Element_Values(0)==__T("OMG_ATPE1")) ; //Duplicate of Title
- else if (Element_Values(0)==__T("OMG_TIT2S")) ; //Duplicate of Title
- else if (Element_Values(0)==__T("OMG_TPE1S")) ; //Duplicate of Artist
- else if (Element_Values(0)==__T("OMG_TRACK")) Fill(Stream_General, 0, General_Track_Position, Element_Values(1), true);
- else if (Element_Values(0)==__T("OMG_TRLDA")) ; //Duplicate of Date
- else
- Fill(Stream_General, 0, Element_Values(0).To_UTF8().c_str(), Element_Values(1));
- break;
- case Elements::TYER : Year=Element_Value; break;
- case Elements::UFID : Fill(Stream_Audio, 0, "UID", Element_Value); break;
- case Elements::USER : Fill(Stream_General, 0, General_TermsOfUse, Element_Value); break;
- case Elements::USLT : Fill(Stream_General, 0, Element_Values(0).To_UTF8().c_str(), Element_Values(1)); break;
- case Elements::WCOM : Fill(Stream_General, 0, "Commercial information", Element_Value); break;
- case Elements::WCOP : Fill(Stream_General, 0, "Copyright/Legal information", Element_Value); break;
- case Elements::WOAF : Fill(Stream_General, 0, "Official audio file webpage", Element_Value); break;
- case Elements::WOAR : Fill(Stream_General, 0, "Performer/Url", Element_Value); break;
- case Elements::WOAS : Fill(Stream_General, 0, "Official audio source webpage", Element_Value); break;
- case Elements::WORS : Fill(Stream_General, 0, General_Service_Url, Element_Value); break;
- case Elements::WPAY : Fill(Stream_General, 0, "Payment", Element_Value); break;
- case Elements::WPUB : Fill(Stream_General, 0, "Publisher/Url", Element_Value); break;
- case Elements::WXXX : Fill(Stream_General, 0, Element_Values(0).To_UTF8().c_str(), Element_Values(1)); break;
- case Elements::BUF : break;
- case Elements::CNT : break;
- case Elements::COM : Fill(Stream_General, 0, Element_Values(0).To_UTF8().c_str(), Element_Values(1)); break;
- case Elements::CRA : break;
- case Elements::CRM : break;
- case Elements::EQU : break;
- case Elements::ETC : break;
- case Elements::GEO : break;
- case Elements::IPL : Fill(Stream_General, 0, "Involved people list", Element_Value); break;
- case Elements::LNK : Fill(Stream_General, 0, "Linked information,", Element_Value); break;
- case Elements::MCI : Fill(Stream_General, 0, "MCDI", Element_Value); break;
- case Elements::MLL : break;
- case Elements::PIC_ : Fill(Stream_General, 0, "Cover", "Yes"); break;
- case Elements::POP : break;
- case Elements::REV : break;
- case Elements::RVA : break;
- case Elements::SLT : break;
- case Elements::STC : break;
- case Elements::TAL : Fill(Stream_General, 0, "Album", Element_Value); break;
- case Elements::TBP : Fill(Stream_General, 0, "BPM", Element_Value); break;
- case Elements::TCM : Fill(Stream_General, 0, "Composer", Element_Value); break;
- case Elements::TCO :
- {
- if (Element_Value.find(__T("("))==0)
- Element_Value=Element_Value.SubString(__T("("), __T(")")); //Replace (nn) by nn
- if (Element_Value==__T("0") || Element_Value==__T("255"))
- Element_Value.clear();
- if (!Element_Value.empty())
- Fill(Stream_General, 0, General_Genre, Element_Value);
- }
- break;
- case Elements::TCR : Fill(Stream_General, 0, "Copyright", Element_Value); break;
- case Elements::TDY : break;
- case Elements::TEN : Fill(Stream_General, 0, "Encoded_Library", Element_Value); break;
- case Elements::TFT : Fill(Stream_General, 0, "File type", Element_Value); break;
- case Elements::TKE : Fill(Stream_General, 0, "Initial key", Element_Value); break;
- case Elements::TLA : Fill(Stream_Audio, 0, Audio_Language, Element_Value); break;
- case Elements::TLE : break;
- case Elements::TMT : Fill(Stream_General, 0, "Media type", Element_Value); break;
- case Elements::TOA : Fill(Stream_General, 0, "Original/Performer", Element_Value); break;
- case Elements::TOF : Fill(Stream_General, 0, "Original/FileName", Element_Value); break;
- case Elements::TOL : Fill(Stream_General, 0, "Original/Lyricist", Element_Value); break;
- case Elements::TOR : Normalize_Date(Element_Value); Fill(Stream_General, 0, "Original/Released_Date", Element_Value); break;
- case Elements::TOT : Fill(Stream_General, 0, "Original/Album", Element_Value); break;
- case Elements::TP1 : Fill(Stream_General, 0, "Performer", Element_Value); break;
- case Elements::TP2 : Fill(Stream_General, 0, "Accompaniment", Element_Value); break;
- case Elements::TP3 : Fill(Stream_General, 0, "Conductor", Element_Value); break;
- case Elements::TP4 : Fill(Stream_General, 0, "RemixedBy", Element_Value); break;
- case Elements::TPA :
- {
- ZtringList List; List.Separator_Set(0, __T("/")); List.Write(Element_Value);
- if (!List(0).empty())
- Fill(Stream_General, 0, General_Part_Position, List(0));
- if (!List(1).empty())
- Fill(Stream_General, 0, General_Part_Position_Total, List(1));
- }
- break;
- case Elements::TPB : Fill(Stream_General, 0, "Publisher", Element_Value); break;
- case Elements::TRC : Fill(Stream_General, 0, "ISRC", Element_Value); break;
- case Elements::TRD : Normalize_Date(Element_Value); Fill(Stream_General, 0, "Recorded_Date", Element_Value); break;
- case Elements::TRK :
- {
- ZtringList List; List.Separator_Set(0, __T("/")); List.Write(Element_Value);
- if (!List(0).empty())
- Fill(Stream_General, 0, General_Track_Position, List(0));
- if (!List(1).empty())
- Fill(Stream_General, 0, General_Track_Position_Total, List(1));
- }
- break;
- case Elements::TSI : break;
- case Elements::TSS : break;
- case Elements::TT1 : Fill(Stream_General, 0, "Grouping", Element_Value); break;
- case Elements::TT2 : Fill(Stream_General, 0, "Track", Element_Value); break;
- case Elements::TT3 : Fill(Stream_General, 0, "Track/More", Element_Value); break;
- case Elements::TXT : Fill(Stream_General, 0, "Lyricist", Element_Value); break;
- case Elements::TXX : Fill(Stream_General, 0, Element_Values(0).To_UTF8().c_str(), Element_Values(1)); break;
- case Elements::TYE : Year=Element_Value; break;
- case Elements::UFI : Fill(Stream_Audio, 0, "UID", Element_Value); break;
- case Elements::ULT : Fill(Stream_General, 0, Element_Values(0).To_UTF8().c_str(), Element_Values(1)); break;
- case Elements::WAF : break;
- case Elements::WAR : Fill(Stream_General, 0, General_Service_Url, Element_Value); break;
- case Elements::WAS : Fill(Stream_General, 0, "Official audio source webpage", Element_Value); break;
- case Elements::WCM : Fill(Stream_General, 0, "Commercial information", Element_Value); break;
- case Elements::WCP : Fill(Stream_General, 0, "Copyright/Legal information", Element_Value); break;
- case Elements::WPB : Fill(Stream_General, 0, "Publisher/Url", Element_Value); break;
- case Elements::WXX : Fill(Stream_General, 0, Element_Values(0).To_UTF8().c_str(), Element_Values(1)); break;
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Id3v2::Normalize_Date(Ztring& Date)
-{
- if (Date.size()<=8)
- return; //Format unknown
- Date[8]=__T(' '); //could be "T"
- Date=Ztring(__T("UTC "))+Date; //Id3v2 specify a UTC date
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEGA_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3v2.h b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3v2.h
deleted file mode 100644
index a17fc6e01..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Id3v2.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ID3v2 tagged files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Id3v2H
-#define MediaInfo_File_Id3v2H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-///***************************************************************************
-// Class File_Id3v2
-//***************************************************************************
-
-class File_Id3v2 : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Id3v2();
-
- //Static stuff
- static bool Static_Synchronize_Tags (const int8u* Buffer, size_t Buffer_Offset, size_t Buffer_Size, bool &Tag_Found);
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - File header
- void FileHeader_Parse ();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- #ifdef TEXT
- #undef TEXT
- #endif
- void T___();
- void T__X();
- void W___();
- void W__X();
- void AENC() {Skip_XX(Element_Size, "Data");}
- void APIC();
- void ASPI() {Skip_XX(Element_Size, "Data");}
- void COMM();
- void COMR() {Skip_XX(Element_Size, "Data");}
- void ENCR() {Skip_XX(Element_Size, "Data");}
- void EQU2() {Skip_XX(Element_Size, "Data");}
- void EQUA() {Skip_XX(Element_Size, "Data");}
- void ETCO() {Skip_XX(Element_Size, "Data");}
- void GEOB() {Skip_XX(Element_Size, "Data");}
- void GRID() {Skip_XX(Element_Size, "Data");}
- void IPLS() {Skip_XX(Element_Size, "Data");}
- void LINK() {Skip_XX(Element_Size, "Data");}
- void MCDI() {T___();}
- void MLLT() {Skip_XX(Element_Size, "Data");}
- void OWNE() {Skip_XX(Element_Size, "Data");}
- void PCNT() {Skip_XX(Element_Size, "Data");}
- void POPM() {Skip_XX(Element_Size, "Data");}
- void POSS() {Skip_XX(Element_Size, "Data");}
- void PRIV();
- void RBUF() {Skip_XX(Element_Size, "Data");}
- void RGAD();
- void RVA2() {Skip_XX(Element_Size, "Data");}
- void RVRB() {Skip_XX(Element_Size, "Data");}
- void SEEK() {Skip_XX(Element_Size, "Data");}
- void SIGN() {Skip_XX(Element_Size, "Data");}
- void SYLT();
- void SYTC() {Skip_XX(Element_Size, "Data");}
- void TALB() {T___();}
- void TBPM() {T___();}
- void TCMP() {T___();}
- void TCOM() {T___();}
- void TCON() {T___();}
- void TCOP() {T___();}
- void TDAT() {T___();}
- void TDEN() {T___();}
- void TDLY() {T___();}
- void TDOR() {T___();}
- void TDRC() {T___();}
- void TDRL() {T___();}
- void TDTG() {T___();}
- void TENC() {T___();}
- void TEXT() {T___();}
- void TFLT() {T___();}
- void TIME() {T___();}
- void TIPL() {T___();}
- void TIT1() {T___();}
- void TIT2() {T___();}
- void TIT3() {T___();}
- void TKEY() {T___();}
- void TLAN() {T___();}
- void TLEN() {T___();}
- void TMCL() {T___();}
- void TMED() {T___();}
- void TMOO() {T___();}
- void TOAL() {T___();}
- void TOFN() {T___();}
- void TOLY() {T___();}
- void TOPE() {T___();}
- void TORY() {T___();}
- void TOWN() {T___();}
- void TPE1() {T___();}
- void TPE2() {T___();}
- void TPE3() {T___();}
- void TPE4() {T___();}
- void TPOS() {T___();}
- void TPRO() {T___();}
- void TPUB() {T___();}
- void TRCK() {T___();}
- void TRDA() {T___();}
- void TRSN() {T___();}
- void TRSO() {T___();}
- void TSIZ() {T___();}
- void TSO2() {T___();}
- void TSOA() {T___();}
- void TSOC() {T___();}
- void TSOP() {T___();}
- void TSOT() {T___();}
- void TSRC() {T___();}
- void TSSE() {T___();}
- void TSST() {T___();}
- void TXXX();
- void TYER() {T___();}
- void UFID() {Skip_XX(Element_Size, "Data");}
- void USER() {Skip_XX(Element_Size, "Data");}
- void USLT();
- void WCOM() {W___();}
- void WCOP() {W___();}
- void WOAF() {W___();}
- void WOAR() {W___();}
- void WOAS() {W___();}
- void WORS() {W___();}
- void WPAY() {W___();}
- void WPUB() {W___();}
- void WXXX();
- void BUF() {Skip_XX(Element_Size, "Data");}
- void CNT() {Skip_XX(Element_Size, "Data");}
- void COM() {COMM();}
- void CRA() {Skip_XX(Element_Size, "Data");}
- void CRM() {Skip_XX(Element_Size, "Data");}
- void EQU() {Skip_XX(Element_Size, "Data");}
- void ETC() {Skip_XX(Element_Size, "Data");}
- void GEO() {Skip_XX(Element_Size, "Data");}
- void IPL() {Skip_XX(Element_Size, "Data");}
- void LNK() {Skip_XX(Element_Size, "Data");}
- void MCI() {Skip_XX(Element_Size, "Data");}
- void MLL() {Skip_XX(Element_Size, "Data");}
- void PIC_() {APIC();}
- void POP() {Skip_XX(Element_Size, "Data");}
- void REV() {Skip_XX(Element_Size, "Data");}
- void RVA() {Skip_XX(Element_Size, "Data");}
- void SLT() {Skip_XX(Element_Size, "Data");}
- void STC() {Skip_XX(Element_Size, "Data");}
- void TAL() {T___();}
- void TBP() {T___();}
- void TCM() {T___();}
- void TCO() {T___();}
- void TCP() {Skip_XX(Element_Size, "Data");}
- void TCR() {T___();}
- void TDA() {T___();}
- void TDY() {T___();}
- void TEN() {T___();}
- void TFT() {T___();}
- void TIM() {T___();}
- void TKE() {T___();}
- void TLA() {T___();}
- void TLE() {T___();}
- void TMT() {T___();}
- void TOA() {T___();}
- void TOF() {T___();}
- void TOL() {T___();}
- void TOR() {T___();}
- void TOT() {T___();}
- void TP1() {T___();}
- void TP2() {T___();}
- void TP3() {T___();}
- void TP4() {T___();}
- void TPA() {T___();}
- void TPB() {T___();}
- void TRC() {T___();}
- void TRD() {T___();}
- void TRK() {T___();}
- void TSI() {T___();}
- void TSS() {T___();}
- void TT1() {T___();}
- void TT2() {T___();}
- void TT3() {T___();}
- void TXT() {T___();}
- void TXX() {TXXX();}
- void TYE() {T___();}
- void UFI() {Skip_XX(Element_Size, "Data");}
- void ULT() {USLT();}
- void WAF() {W___();}
- void WAR() {W___();}
- void WAS() {W___();}
- void WCM() {W___();}
- void WCP() {W___();}
- void WPB() {W___();}
- void WXX() {WXXX();}
- void XRVA() {RVA2();}
-
- //Temp
- ZtringList Element_Values;
- Ztring Element_Value;
- Ztring Year, Month, Day, Hour, Minute;
- stream_t StreamKind;
- int64u Id3v2_Size;
- int8u Id3v2_Version;
- bool Unsynchronisation_Global;
- bool Unsynchronisation_Frame;
- bool DataLengthIndicator;
-
- //Helpers
- void Fill_Name();
- void Normalize_Date (Ztring& Date);
-};
-
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3.cpp b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3.cpp
deleted file mode 100644
index 3576707e7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_LYRICS3_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File_Lyrics3.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Lyrics3::File_Lyrics3()
-:File__Analyze()
-{
- //Configuration
- TotalSize=(int64u)-1;
-}
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Lyrics3::Read_Buffer_Continue()
-{
- if (TotalSize==(int64u)-1)
- TotalSize=Buffer_Size;
-
- //Coherency
- if (TotalSize<20)
- {
- Reject("Lyrics3");
- return;
- }
-
- //Buffer size
- if (Buffer_Size<TotalSize)
- return;
-
- //Parsing
- Element_Offset=0;
- Element_Size=TotalSize;
- Skip_Local(11, "Signature");
- Skip_Local(TotalSize-20, "Lyrics");
- Skip_Local(9, "Signature");
-
- //Filling
- Accept("Lyric3");
-
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Codec, "Lyrics3");
-
- Finish("Lyrics3");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_LYRICS3_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3.h b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3.h
deleted file mode 100644
index a93141daa..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Lyrics3 tagged files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Lyrics3H
-#define MediaInfo_File_Lyrics3H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Lyrics3
-//***************************************************************************
-
-class File_Lyrics3 : public File__Analyze
-{
-public :
- //In
- int64u TotalSize;
-
- //Constructor/Destructor
- File_Lyrics3();
-
-private :
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3v2.cpp b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3v2.cpp
deleted file mode 100644
index 51bef8675..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3v2.cpp
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_LYRICS3V2_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File_Lyrics3v2.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-namespace Elements
-{
- const int32u AUT=0x415554;
- const int32u CRC=0x435243;
- const int32u EAL=0x45414C;
- const int32u EAR=0x454152;
- const int32u ETT=0x455454;
- const int32u IMG=0x494D47;
- const int32u IND=0x494E44;
- const int32u INF=0x494E46;
- const int32u LYR=0x4C5952;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Lyrics3v2::File_Lyrics3v2()
-:File__Analyze()
-{
- //Configuration
- TotalSize=(int64u)-1;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::FileHeader_Parse()
-{
- if (TotalSize==(int64u)-1)
- TotalSize=Buffer_Size;
-
- //Parsing
- Skip_Local(11, "Signature");
-
- FILLING_BEGIN();
- Accept("Lyrics3v2");
-
- TotalSize-=11;
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::Header_Parse()
-{
- if (TotalSize<=15) //First 10 is minimum size of a tag, Second 10 is ID3v2 header size
- {
- //Place for footer
- Header_Fill_Code((int64u)-1, "File Footer");
- Header_Fill_Size(TotalSize);
- return;
- }
-
- //Parsing
- Ztring SizeT;
- int64u Size;
- int32u Field;
- Get_C3 (Field, "Field");
- Get_Local(5, SizeT, "Size");
- Size=8+SizeT.To_int64u();
-
- //Filling
- if (Size+15>TotalSize)
- Size=TotalSize-15;
- Header_Fill_Code(Field, Ztring().From_CC3(Field));
- Header_Fill_Size(Size);
- TotalSize-=Size;
-}
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::Data_Parse()
-{
- #define CASE_INFO(_NAME, _DETAIL) \
- case Elements::_NAME : Element_Info1(_DETAIL); _NAME(); break;
-
- //Parsing
- switch (Element_Code)
- {
- CASE_INFO(AUT, "Lyrics Author Name");
- CASE_INFO(CRC, "CRC");
- CASE_INFO(EAL, "Extended Album name");
- CASE_INFO(EAR, "Extended Artist name");
- CASE_INFO(ETT, "Extended Track Title");
- CASE_INFO(IMG, "Image location");
- CASE_INFO(IND, "Indications field");
- CASE_INFO(INF, "Additional information");
- CASE_INFO(LYR, "Lyrics");
- case (int64u)-1 : Footer(); break;
- default : Skip_XX(Element_Size, "Data");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::Footer()
-{
- //Parsing
- Skip_Local(6, "Size");
- Skip_Local(9, "Signature");
-
- Finish("Lyrics3v2");
-}
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::EAL()
-{
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Value");
-
- //Filling
- Fill(Stream_General, 0, General_Album, Value);
-}
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::EAR()
-{
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Value");
-
- //Filling
- Fill(Stream_General, 0, General_Performer, Value);
-}
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::ETT()
-{
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Value");
-
- //Filling
- Fill(Stream_General, 0, General_Title, Value);
-}
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::IND()
-{
- //Parsing
- if (Element_Size>=1)
- Skip_Local(1, "lyrics present");
- if (Element_Size>=2)
- Skip_Local(1, "timestamp in lyrics");
- if (Element_Size>=3)
- Skip_Local(1, "inhibits tracks for random selection");
- while (Element_Offset<Element_Size)
- Skip_Local(1, "unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::INF()
-{
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Value");
-
- //Filling
- Fill(Stream_General, 0, General_Comment, Value);
-}
-
-//---------------------------------------------------------------------------
-void File_Lyrics3v2::LYR()
-{
- //Parsing
- Skip_XX(Element_Size, "Value");
-
- //Filling
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Codec, "Lyrics3v2");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_LYRICS3V2_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3v2.h b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3v2.h
deleted file mode 100644
index f495323de..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Lyrics3v2.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Lyrics3v2 tagged files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Lyrics3v2H
-#define MediaInfo_File_Lyrics3v2H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Lyrics3v2
-//***************************************************************************
-
-class File_Lyrics3v2 : public File__Analyze
-{
-public :
- //In
- int64u TotalSize;
-
- //Constructor/Destructor
- File_Lyrics3v2();
-
-private :
- //Buffer - File header
- void FileHeader_Parse();
-
- //Buffer - Per element
- void Header_Parse ();
- void Data_Parse ();
-
- //Elements
- void Header();
- void Footer();
- void AUT() {Skip_Local(Element_Size, "Value");}
- void CRC() {Skip_Local(Element_Size, "Value");}
- void EAL();
- void EAR();
- void ETT();
- void IMG() {Skip_Local(Element_Size, "Value");}
- void IND();
- void INF();
- void LYR();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_VorbisCom.cpp b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_VorbisCom.cpp
deleted file mode 100644
index 3f598d44b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_VorbisCom.cpp
+++ /dev/null
@@ -1,344 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_VORBISCOM_YES) || defined(MEDIAINFO_OGG_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File_VorbisCom.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-extern const char* Id3v2_PictureType(int8u Type); //In Tag/File_Id3v2.cpp
-extern std::string ExtensibleWave_ChannelMask (int32u ChannelMask); //In Multiple/File_Riff_Elements.cpp
-extern std::string ExtensibleWave_ChannelMask2 (int32u ChannelMask); //In Multiple/File_Riff_Elements.cpp
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_VorbisCom::File_VorbisCom()
-:File__Analyze()
-{
- //In
- StreamKind_Specific=Stream_General;
- StreamKind_Multiple=Stream_General;
- StreamKind_Common =Stream_General;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_VorbisCom::Streams_Fill()
-{
- if (!Performers.empty())
- {
- Artists.Separator_Set(0, __T(" / "));
- Fill(StreamKind_Common, 0, "Performer", Performers.Read());
- }
-
- if (!Artists.empty() && Artists!=Performers)
- {
- Artists.Separator_Set(0, __T(" / "));
- Fill(StreamKind_Common, 0, Performers.empty()?"Performer":"Composer", Artists.Read());
- }
-
- if (!Accompaniments.empty() && Accompaniments!=Artists && Accompaniments!=Performers)
- {
- Artists.Separator_Set(0, __T(" / "));
- Fill(StreamKind_Common, 0, "Accompaniment", Accompaniments.Read());
- }
-
- if (!AlbumArtists.empty())
- {
- AlbumArtists.Separator_Set(0, __T(" / "));
- Fill(StreamKind_Common, 0, (Performers==Artists || Performers.empty())?"Album/Performer":"Album/Composer", AlbumArtists.Read());
- }
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_VorbisCom::FileHeader_Parse()
-{
- //Parsing
- Ztring vendor_string;
- int32u vendor_length;
- Get_L4 (vendor_length, "vendor_length");
- Get_Local(vendor_length, vendor_string, "vendor_string");
- Get_L4 (user_comment_list_length, "user_comment_list_length");
-
- FILLING_BEGIN();
- Accept("VorbisCom");
-
- if (Count_Get(Stream_General)==0)
- Stream_Prepare(Stream_General);
- if (StreamKind_Specific!=Stream_General)
- Stream_Prepare(StreamKind_Specific);
- if (StreamKind_Multiple!=Stream_General && StreamKind_Multiple!=StreamKind_Specific)
- Stream_Prepare(StreamKind_Multiple);
-
- //vendor_string
- if (StreamKind_Specific!=Stream_Audio && vendor_string.find(__T("Xiph.Org libVorbis"))==0)
- vendor_string.clear(); //string was set "by default"
- Ztring Library_Name, Library_Version, Library_Date;
- Ztring vendor_string_Without=vendor_string; vendor_string_Without.FindAndReplace(__T(";"), __T(""), 0, Ztring_Recursive);
- Library_Version=MediaInfoLib::Config.Library_Get(InfoLibrary_Format_VorbisCom, vendor_string_Without, InfoLibrary_Version);
- Library_Date=MediaInfoLib::Config.Library_Get(InfoLibrary_Format_VorbisCom, vendor_string_Without, InfoLibrary_Date);
- if (Library_Version.empty())
- {
- if (vendor_string.find(__T(" I "))!=std::string::npos)
- {
- Library_Name=vendor_string.SubString(__T(""), __T(" I "));
- Library_Date=vendor_string.SubString(__T(" I "), __T(""));
- if (Library_Date.size()>9)
- {
- Library_Version=Library_Date.substr(9, std::string::npos);
- if (Library_Version.find(__T("("))==std::string::npos)
- {
- Library_Version.FindAndReplace(__T(" "), __T("."), 0, Ztring_Recursive);
- Library_Date.resize(8);
- }
- }
- }
- else if (vendor_string.size()>9 && Ztring(vendor_string.substr(vendor_string.size()-8, std::string::npos)).To_int32u()>20000000)
- {
- Library_Name=vendor_string.substr(0, vendor_string.size()-9);
- Library_Date=vendor_string.substr(vendor_string.size()-8, std::string::npos);
- if (!Library_Name.empty())
- {
- std::string::size_type Pos=Library_Name.rfind(__T(' '));
- if (Pos<Library_Name.size()-2 && Library_Name[Pos+1]>=__T('0') && Library_Name[Pos+1]<=__T('9'))
- {
- Library_Version=Library_Name.substr(Pos+1, std::string::npos);
- Library_Name.resize(Pos);
- }
- }
- }
- else if (vendor_string.find(__T("aoTuV "))!=std::string::npos)
- {
- Library_Name=__T("aoTuV");
- Library_Version=vendor_string.SubString(__T("aoTuV "), __T("["));
- Library_Date=vendor_string.SubString(__T("["), __T("]"));
- }
- else if (vendor_string.find(__T("Lancer "))!=std::string::npos)
- {
- Library_Name=__T("Lancer");
- Library_Date=vendor_string.SubString(__T("["), __T("]"));
- }
- if (Library_Version.empty())
- Library_Version=Library_Date;
- if (Library_Date.size()==8)
- {
- Library_Date.insert(6, 1, __T('-'));
- Library_Date.insert(4, 1, __T('-'));
- Library_Date.insert(0, __T("UTC "));
- }
- }
- if (vendor_string.find(__T("libFLAC"))!=std::string::npos) Library_Name="libFLAC";
- if (vendor_string.find(__T("libVorbis I"))!=std::string::npos) Library_Name="libVorbis";
- if (vendor_string.find(__T("libTheora I"))!=std::string::npos) Library_Name="libTheora";
- if (vendor_string.find(__T("AO; aoTuV"))==0) Library_Name="aoTuV";
- if (vendor_string.find(__T("BS; Lancer"))==0) Library_Name="Lancer";
-
- Fill(StreamKind_Specific, 0, "Encoded_Library", vendor_string);
- Fill(StreamKind_Specific, 0, "Encoded_Library/Name", Library_Name);
- Fill(StreamKind_Specific, 0, "Encoded_Library/Version", Library_Version);
- Fill(StreamKind_Specific, 0, "Encoded_Library/Date", Library_Date);
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_VorbisCom::Header_Parse()
-{
- //Parsing
- int32u user_comment_length;
- Get_L4 (user_comment_length, "length");
-
- //Filling
- Header_Fill_Size(Element_Offset+user_comment_length);
-}
-
-//---------------------------------------------------------------------------
-void File_VorbisCom::Data_Parse()
-{
- user_comment_list_length--;
-
- //Parsing
- Ztring comment;
- Get_UTF8(Element_Size, comment, "comment");
- if (Element_Size && comment.empty())
- {
- Element_Offset=0; //Retry
- Get_Local(Element_Size, comment, "comment");
- }
- Element_Name(comment);
-
- FILLING_BEGIN_PRECISE();
- Ztring Key=comment.SubString(__T(""), __T("="));
- Key.MakeUpperCase();
- Ztring Value=comment.SubString(__T("="), __T(""));
-
- if (Key==__T("ADDED_TIMESTAMP")) Fill(StreamKind_Common, 0, "Added_Date", Ztring().Date_From_Milliseconds_1601(Value.To_int64u()/1000));
- else if (Key==__T("ALBUM ARTIST")) AlbumArtists.push_back(Value);
- else if (Key==__T("ALBUM")) Fill(StreamKind_Common, 0, "Album", Value);
- else if (Key==__T("ALBUM_COMMENT")) Fill(StreamKind_Common, 0, "Comment", Value);
- else if (Key==__T("ALBUMARTIST")) AlbumArtists.push_back(Value);
- else if (Key==__T("ARTIST")) Artists.push_back(Value);
- else if (Key==__T("AUTHOR")) Fill(StreamKind_Common, 0, "WrittenBy", Value);
- else if (Key==__T("BUYCDURL")) {}
- else if (Key==__T("CLASS")) Fill(StreamKind_Common, 0, "ContentType", Value);
- else if (Key==__T("COMPOSER")) Fill(StreamKind_Common, 0, "Composer", Value);
- else if (Key==__T("COMMENT")) Fill(StreamKind_Common, 0, "Comment", Value);
- else if (Key==__T("COMMENTS")) Fill(StreamKind_Common, 0, "Comment", Value);
- else if (Key==__T("CONDUCTOR")) Fill(StreamKind_Common, 0, "Conductor", Value);
- else if (Key==__T("CONTACT")) Fill(StreamKind_Common, 0, "Publisher", Value);
- else if (Key==__T("COPYRIGHT")) Fill(StreamKind_Common, 0, "Copyright", Value);
- else if (Key==__T("DATE")) Fill(StreamKind_Common, 0, "Recorded_Date", Value, true);
- else if (Key==__T("DESCRIPTION")) Fill(StreamKind_Common, 0, "Description", Value);
- else if (Key==__T("DISC")) Fill(StreamKind_Common, 0, "Part", Value, true);
- else if (Key==__T("DISCID")) {}
- else if (Key==__T("DISCNUMBER")) Fill(StreamKind_Common, 0, "Part", Value, true);
- else if (Key==__T("DISCTOTAL")) Fill(StreamKind_Common, 0, "Part/Position_Total", Value);
- else if (Key==__T("ENCODEDBY")) Fill(StreamKind_Common, 0, "EncodedBy", Value);
- else if (Key==__T("ENCODED-BY")) Fill(StreamKind_Common, 0, "EncodedBy", Value);
- else if (Key==__T("ENCODER")) Fill(StreamKind_Common, 0, "Encoded_Application", Value);
- else if (Key==__T("ENCODED_USING")) Fill(StreamKind_Common, 0, "Encoded_Application", Value);
- else if (Key==__T("ENCODER_URL")) Fill(StreamKind_Common, 0, "Encoded_Application/Url", Value);
- else if (Key==__T("ENSEMBLE")) Accompaniments.push_back(Value);
- else if (Key==__T("GENRE")) Fill(StreamKind_Common, 0, "Genre", Value);
- else if (Key==__T("FIRST_PLAYED_TIMESTAMP")) Fill(StreamKind_Common, 0, "Played_First_Date", Ztring().Date_From_Milliseconds_1601(Value.To_int64u()/10000));
- else if (Key==__T("ISRC")) Fill(StreamKind_Multiple, 0, "ISRC", Value);
- else if (Key==__T("LABEL")) Fill(StreamKind_Common, 0, "Label", Value);
- else if (Key==__T("LANGUAGE")) {if (Value.find(__T("Director"))==0) Fill(StreamKind_Specific, 0, "Language_More", Value); else if (!Value.SubString(__T("["), __T("]")).empty()) Fill(StreamKind_Specific, 0, "Language", Value.SubString(__T("["), __T("]"))); else Fill(StreamKind_Specific, 0, "Language", Value);}
- else if (Key==__T("LAST_PLAYED_TIMESTAMP")) Fill(StreamKind_Multiple, 0, "Played_Last_Date", Ztring().Date_From_Milliseconds_1601(Value.To_int64u()/10000));
- else if (Key==__T("LICENCE")) Fill(StreamKind_Common, 0, "TermsOfUse", Value);
- else if (Key==__T("LICENSE")) Fill(StreamKind_Common, 0, "TermsOfUse", Value);
- else if (Key==__T("LYRICS")) Fill(StreamKind_Common, 0, "Lyrics", Value);
- else if (Key==__T("LWING_GAIN")) Fill(StreamKind_Multiple, 0, "ReplayGain_Gain", Value.To_float64(), 2);
- else if (Key==__T("LOCATION")) Fill(StreamKind_Common, 0, "Recorded/Location", Value);
- else if (Key==__T("MUSICBRAINZ_ALBUMID")) {}
- else if (Key==__T("MUSICBRAINZ_ALBUMARTISTID")) {}
- else if (Key==__T("MUSICBRAINZ_ARTISTID")) {}
- else if (Key==__T("MUSICBRAINZ_TRACKID")) {}
- else if (Key==__T("MUSICBRAINZ_SORTNAME")) Fill(StreamKind_Common, 0, "Performer/Sort", Value);
- else if (Key==__T("MUSICBRAINZ_DISCID")) {}
- else if (Key==__T("ORGANIZATION")) Fill(StreamKind_Common, 0, "Producer", Value);
- else if (Key==__T("PERFORMER")) Performers.push_back(Value);
- else if (Key==__T("PLAY_COUNT")) Fill(StreamKind_Multiple, 0, "Played_Count", Value.To_int64u());
- else if (Key==__T("RATING")) Fill(StreamKind_Multiple, 0, "Rating", Value);
- else if (Key==__T("REPLAYGAIN_ALBUM_GAIN")) Fill(StreamKind_Common, 0, "Album_ReplayGain_Gain", Value.To_float64(), 2);
- else if (Key==__T("REPLAYGAIN_ALBUM_PEAK")) Fill(StreamKind_Common, 0, "Album_ReplayGain_Peak", Value.To_float64(), 6);
- else if (Key==__T("REPLAYGAIN_REFERENCE_LOUDNESS")) {}
- else if (Key==__T("REPLAYGAIN_TRACK_GAIN")) Fill(StreamKind_Specific, 0, "ReplayGain_Gain", Value.To_float64(), 2);
- else if (Key==__T("REPLAYGAIN_TRACK_PEAK")) Fill(StreamKind_Specific, 0, "ReplayGain_Peak", Value.To_float64(), 6);
- else if (Key==__T("TITLE")) Fill(StreamKind_Common, 0, "Title", Value);
- else if (Key==__T("TOTALTRACKS")) Fill(StreamKind_Common, 0, "Track/Position_Total", Value);
- else if (Key==__T("TOTALDISCS")) Fill(StreamKind_Common, 0, "Part/Position_Total", Value);
- else if (Key==__T("TRACK_COMMENT")) Fill(StreamKind_Multiple, 0, "Comment", Value);
- else if (Key==__T("TRACKNUMBER")) Fill(StreamKind_Multiple, 0, "Track/Position", Value);
- else if (Key==__T("TRACKTOTAL")) Fill(StreamKind_Multiple, 0, "Track/Position_Total", Value);
- else if (Key==__T("VERSION")) Fill(StreamKind_Common, 0, "Track/More", Value);
- else if (Key==__T("BPM")) Fill(StreamKind_Common, 0, "BPM", Value);
- else if (Key==__T("WAVEFORMATEXTENSIBLE_CHANNEL_MASK"))
- {
- //This is an hexadecimal value
- if (Value.size()>2 && Value[0]==__T('0') && Value[1]==__T('x'))
- {
- int16u ValueI=0;
- for (size_t Pos=2; Pos<Value.size(); Pos++)
- {
- ValueI*=16;
- if (Value[Pos]>=__T('0') && Value[Pos]<=__T('9'))
- ValueI+=Value[Pos]-__T('0');
- else if (Value[Pos]>=__T('A') && Value[Pos]<=__T('F'))
- ValueI+=10+Value[Pos]-__T('A');
- else if (Value[Pos]>=__T('a') && Value[Pos]<=__T('f'))
- ValueI+=10+Value[Pos]-__T('a');
- else
- break;
- }
- Fill(Stream_Audio, 0, Audio_ChannelPositions, ExtensibleWave_ChannelMask(ValueI));
- Fill(Stream_Audio, 0, Audio_ChannelPositions_String2, ExtensibleWave_ChannelMask2(ValueI));
- }
- }
- else if (Key==__T("YEAR")) {if (Value!=Retrieve(StreamKind_Common, 0, "Recorded_Date")) Fill(StreamKind_Common, 0, "Recorded_Date", Value);}
- else if (Key.find(__T("COVERART"))==0)
- {
- if (Key==__T("COVERARTCOUNT"))
- ;
- else if (Key.find(__T("COVERARTMIME"))==0)
- Fill(Stream_General, 0, General_Cover_Mime, Value);
- else if (Key.find(__T("COVERARTFILELINK"))==0)
- Fill(Stream_General, 0, General_Cover_Data, __T("file://")+Value);
- else if (Key.find(__T("COVERARTTYPE"))==0)
- Fill(Stream_General, 0, General_Cover_Type, Id3v2_PictureType(Value.To_int8u()));
- }
- else if (Key.find(__T("CHAPTER"))==0)
- {
- if (Count_Get(Stream_Menu)==0)
- {
- Stream_Prepare(Stream_Menu);
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_Begin, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
- }
- if (Key.find(__T("NAME"))==Error)
- {
- Chapter_Pos=Key.SubString(__T("CHAPTER"), __T(""));
- Chapter_Time=Value;
- }
- else
- {
- Value.FindAndReplace(__T("\n"), __T(""), Count_Get(Stream_Text)-1); //Some chapters names have extra characters, not needed
- Value.FindAndReplace(__T("\r"), __T(""), Count_Get(Stream_Text)-1); //Some chapters names have extra characters, not needed
- Value.FindAndReplace(__T(" "), __T(""), Count_Get(Stream_Text)-1); //Some chapters names have extra characters, not needed
- Fill(Stream_Menu, 0, Chapter_Time.To_UTF8().c_str(), Value);
- }
- Fill(Stream_Menu, StreamPos_Last, Menu_Chapters_Pos_End, Count_Get(Stream_Menu, StreamPos_Last), 10, true);
- }
- else Fill(Stream_General, 0, comment.SubString(__T(""), __T("=")).To_Local().c_str(), Value);
- FILLING_END();
-
- if (user_comment_list_length==0)
- Finish("VorbisCom");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_VORBISCOM_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_VorbisCom.h b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_VorbisCom.h
deleted file mode 100644
index a27942f01..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_VorbisCom.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Vorbis comments
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_VorbisComH
-#define MediaInfo_File_VorbisComH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "ZenLib/ZtringList.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_VorbisCom
-//***************************************************************************
-
-class File_VorbisCom : public File__Analyze
-{
-public :
- //In
- stream_t StreamKind_Specific; //Always in this stream kind whatever is the configuration
- stream_t StreamKind_Multiple; //Specific stream kind depend if there is multiple streams or not
- stream_t StreamKind_Common; //Stream kind for common values
-
- //Constructor/Destructor
- File_VorbisCom();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - File header
- void FileHeader_Parse();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Temp
- int32u user_comment_list_length;
- Ztring Chapter_Pos;
- Ztring Chapter_Time;
- ZtringList Performers;
- ZtringList Artists;
- ZtringList Accompaniments;
- ZtringList AlbumArtists;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Xmp.cpp b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Xmp.cpp
deleted file mode 100644
index 9ececa92a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Xmp.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PDF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File_Xmp.h"
-#include <cstring>
-#include "tinyxml2.h"
-using namespace tinyxml2;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Xmp::FileHeader_Begin()
-{
- XMLDocument document;
- if (!FileHeader_Begin_XML(document))
- return false;
-
- std::string NameSpace;
- XMLElement* XmpMeta=document.FirstChildElement("xmpmeta");
- if (XmpMeta==NULL)
- {
- NameSpace="x:";
- XmpMeta=document.FirstChildElement((NameSpace+"xmpmeta").c_str());
- }
- if (!XmpMeta)
- {
- Reject("XMP");
- return false;
- }
-
- XMLElement* Rdf=XmpMeta->FirstChildElement("RDF");
- if (Rdf==NULL)
- {
- NameSpace="rdf:";
- Rdf=XmpMeta->FirstChildElement((NameSpace+"RDF").c_str());
- }
- if (!Rdf)
- {
- Reject("XMP");
- return false;
- }
-
- Accept("XMP");
-
- for (XMLElement* Rdf_Item=Rdf->FirstChildElement(); Rdf_Item; Rdf_Item=Rdf_Item->NextSiblingElement())
- {
- //RDF item
- if (!strcmp(Rdf_Item->Value(), (NameSpace+"Description").c_str()))
- {
- const char* Attribute;
-
- Attribute=Rdf_Item->Attribute("xmlns:pdfaid");
- if (Attribute)
- {
- string Profile;
-
- if (strcmp(Attribute, "http://www.aiim.org/pdfa/ns/id/"))
- Profile=Attribute;
- else
- {
- Profile+="A";
-
- Attribute=Rdf_Item->Attribute("pdfaid:part");
- if (Attribute)
- {
- Profile+='-';
- Profile+=Attribute;
-
- Attribute=Rdf_Item->Attribute("pdfaid:conformance");
- if (Attribute)
- {
- string Conformance(Attribute);
- if (Conformance.size()==1 && Conformance[0]>='A' && Conformance[0]<='Z')
- Conformance[0]+=0x20; // From "A" to "a"
- Profile+=Conformance;
- }
- }
- }
-
- Fill(Stream_General, 0, General_Format_Profile, Profile);
- }
- }
- }
-
- Finish();
- return true;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_PDF_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Xmp.h b/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Xmp.h
deleted file mode 100644
index 38e0a6d80..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File_Xmp.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about XMP files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_XmpH
-#define MediaInfo_File_XmpH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Sami
-//***************************************************************************
-
-class File_Xmp : public File__Analyze
-{
-private :
- //Buffer - File header
- bool FileHeader_Begin();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File__Tags.cpp b/src/thirdparty/MediaInfo/MediaInfo/Tag/File__Tags.cpp
deleted file mode 100644
index 4d6aee0cf..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File__Tags.cpp
+++ /dev/null
@@ -1,655 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Tag/File__Tags.h"
-#if defined(MEDIAINFO_APETAG_YES)
- #include "MediaInfo/Tag/File_ApeTag.h"
-#endif //MEDIAINFO_APETAG_YES
-#if defined(MEDIAINFO_ID3_YES)
- #include "MediaInfo/Tag/File_Id3.h"
-#endif //MEDIAINFO_ID3_YES
-#if defined(MEDIAINFO_ID3V2_YES)
- #include "MediaInfo/Tag/File_Id3v2.h"
-#endif //MEDIAINFO_ID3V2_YES
-#if defined(MEDIAINFO_LYRICS3_YES)
- #include "MediaInfo/Tag/File_Lyrics3.h"
-#endif //MEDIAINFO_LYRICS3_YES
-#if defined(MEDIAINFO_LYRICS3V2_YES)
- #include "MediaInfo/Tag/File_Lyrics3v2.h"
-#endif //MEDIAINFO_LYRICS3V2_YES
- #include "MediaInfo/File_Unknown.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File__Tags_Helper::File__Tags_Helper()
-{
- //In
- Base=NULL;
-
- //Out
- TagsSize=0;
- File_BeginTagSize=0;
- File_EndTagSize=0;
-
- //Temp
- Parser=NULL;
- Id3v1_Offset=(int64u)-1;
- Lyrics3_Offset=(int64u)-1;
- Lyrics3v2_Offset=(int64u)-1;
- ApeTag_Offset=(int64u)-1;
- JumpTo_WantedByParser=(int64u)-1;
- Id3v1_Size=0;
- Lyrics3_Size=0;
- Lyrics3v2_Size=0;
- ApeTag_Size=0;
- TagSizeIsFinal=false;
- SearchingForEndTags=false;
-}
-
-//---------------------------------------------------------------------------
-File__Tags_Helper::~File__Tags_Helper()
-{
- delete Parser; //Parser=NULL;
- for (size_t Pos=0; Pos<Parser_Streams_Fill.size(); Pos++)
- delete Parser_Streams_Fill[Pos]; //Parser_Streams_Fill[Pos]=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Tags_Helper::Streams_Fill()
-{
- for (size_t Pos=0; Pos<Parser_Streams_Fill.size(); Pos++)
- {
- if (Parser_Streams_Fill[Pos] && Parser_Streams_Fill[Pos]->Status[File__Analyze::IsAccepted])
- {
- #ifndef MEDIAINFO_ID3V2_YES
- const bool Priority=false;
- #else
- bool Priority=Parser_Streams_Fill_Priority[Pos];
- #endif
-
- Parser_Streams_Fill[Pos]->Read_Buffer_Finalize();
- Base->Merge(*(Parser_Streams_Fill[Pos]), Stream_General, 0, 0, Priority);
- Base->Merge(*(Parser_Streams_Fill[Pos]), Stream_Audio , 0, 0, Priority);
- }
- delete Parser_Streams_Fill[Pos]; //Parser_Streams_Fill[Pos]=NULL;
- }
- Parser_Streams_Fill.clear();
-}
-
-//---------------------------------------------------------------------------
-void File__Tags_Helper::Streams_Finish()
-{
- if (!Base->IsSub)
- {
- Base->Fill(Stream_General, 0, General_StreamSize, TagsSize+Base->Retrieve(Stream_General, 0, General_StreamSize).To_int64u(), 10, true);
- if (Base->Retrieve(Stream_Audio, 0, Audio_StreamSize).empty())
- Base->Fill(Stream_Audio, 0, Audio_StreamSize, Base->File_Size-TagsSize);
- }
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__Tags_Helper::Read_Buffer_Continue()
-{
- //Tags
- bool Tag_Found;
- if (File__Tags_Helper::Synchronize(Tag_Found) && Tag_Found)
- File__Tags_Helper::Synched_Test();
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File__Tags_Helper::Synchronize(bool &Tag_Found, size_t Synchro_Offset)
-{
- //Buffer size
- if (Parser)
- {
- Synched_Test();
- if (Parser)
- return false;
- }
-
- if (SearchingForEndTags)
- {
- GoTo(0, "Tags detected");
- return false;
- }
-
- if (!Synchro_Offset)
- {
- if (!Synched_Test()) //Handling begin/intermediate Id3v2
- return false;
- }
-
- //ID
- if (Base->Buffer_Offset+Synchro_Offset+8>Base->Buffer_Size)
- return false;
- int32u ID3=CC3(Base->Buffer+Base->Buffer_Offset+Synchro_Offset);
- int64u ID8=CC8(Base->Buffer+Base->Buffer_Offset+Synchro_Offset);
- if (ID3==0x494433 //"ID3"
- || ID8==0x4150455441474558LL //"APETAGEX"
- || ID8==0x4C59524943534245LL //"LYRICSBE"
- || ID3==0x544147) //"TAG" / "TAG+"
- Tag_Found=true;
- else
- Tag_Found=false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File__Tags_Helper::Synched_Test()
-{
- if (SearchingForEndTags)
- return true;
-
- for (;;)
- {
- #ifdef MEDIAINFO_ID3V2_YES
- bool Priority=false;
- #else
- const bool Priority=false;
- #endif
-
- if (!Parser)
- {
- //Must have enough buffer for having header
- if (Base->Buffer_Offset+8>Base->Buffer_Size)
- return Base->IsSub; //If IsSub, we consider this is a complete block
-
- //Quick test of synchro
- int32u ID=CC3(Base->Buffer+Base->Buffer_Offset);
- int32u ID4=CC4(Base->Buffer+Base->Buffer_Offset);
- int64u ID8=CC8(Base->Buffer+Base->Buffer_Offset);
- if (ID==0x494433 || ID==0x656133) //"ID3" and "ea3" (found in OpenMG)
- {
- if (Base->Buffer_Offset+10>Base->Buffer_Size)
- return false;
- int32u Size=BigEndian2int32u(Base->Buffer+Base->Buffer_Offset+6);
- Parser_Buffer_Size=(((Size>>0)&0x7F)
- | ((Size>>1)&0x3F80)
- | ((Size>>2)&0x1FC000)
- | ((Size>>3)&0x0FE00000))
- +10;
- if (Base->Buffer_Offset+Parser_Buffer_Size>Base->Buffer_Size)
- return false;
- if (!TagSizeIsFinal)
- File_BeginTagSize+=Parser_Buffer_Size;
- if (Base->File_Offset_FirstSynched==(int64u)-1)
- Base->Buffer_TotalBytes_FirstSynched_Max+=Parser_Buffer_Size;
- #ifdef MEDIAINFO_ID3V2_YES
- Parser=new File_Id3v2;
- Priority=true;
- #else
- Parser=new File_Unknown;
- #endif
- Base->Element_Begin1("Id3v2");
- }
- else if (ID8==0x4150455441474558LL) //"APETAGEX"
- {
- if (Base->Buffer_Offset+16>Base->Buffer_Size)
- return false;
- Parser_Buffer_Size=LittleEndian2int32u(Base->Buffer+Base->Buffer_Offset+12);
- if (LittleEndian2int32u(Base->Buffer+Base->Buffer_Offset+8))
- Parser_Buffer_Size+=32;
- if (Base->Buffer_Offset+Parser_Buffer_Size>Base->Buffer_Size)
- return false;
- if (!TagSizeIsFinal)
- File_BeginTagSize+=Parser_Buffer_Size;
- if (Base->File_Offset_FirstSynched==(int64u)-1)
- Base->Buffer_TotalBytes_FirstSynched_Max+=Parser_Buffer_Size;
- #ifdef MEDIAINFO_APETAG_YES
- Parser=new File_ApeTag;
- #else
- Parser=new File_Unknown;
- #endif
- Base->Element_Begin1("ApeTag");
- }
- else if (ID8==0x4C59524943534245LL) //"LYRICSBE"
- {
- if (Base->Buffer_Offset+16>Base->Buffer_Size)
- return false;
- //Searching for "LYRICS200"
- std::string Buf((const char*)(Base->Buffer+Base->Buffer_Offset), Base->Buffer_Size-Base->Buffer_Offset);
- size_t Pos2=Buf.find("LYRICS200");
- size_t Pos1=std::string::npos;
- if (Pos2==std::string::npos)
- Pos1=Buf.find("LYRICSEND");
- if (Pos2!=std::string::npos)
- Parser_Buffer_Size=Pos2+9;
- else if (Pos1!=std::string::npos)
- Parser_Buffer_Size=Pos1+9;
- else
- Parser_Buffer_Size=(size_t)(Base->File_Size-(Base->File_Offset+Base->Buffer_Offset));
- if (Base->Buffer_Offset+Parser_Buffer_Size>Base->Buffer_Size)
- return false;
- if (!TagSizeIsFinal)
- File_BeginTagSize+=Parser_Buffer_Size;
- if (Base->File_Offset_FirstSynched==(int64u)-1)
- Base->Buffer_TotalBytes_FirstSynched_Max+=Parser_Buffer_Size;
- if (Pos2!=std::string::npos)
- {
- #ifdef MEDIAINFO_LYRICS3V2_YES
- Parser=new File_Lyrics3v2;
- ((File_Lyrics3v2*)Parser)->TotalSize=Parser_Buffer_Size;
- #else
- Parser=new File_Unknown;
- #endif
- Base->Element_Begin1("Lyrics2");
- }
- else if (Pos1!=std::string::npos)
- {
- #ifdef MEDIAINFO_LYRICS3_YES
- Parser=new File_Lyrics3;
- ((File_Lyrics3*)Parser)->TotalSize=Parser_Buffer_Size;
- #else
- Parser=new File_Unknown;
- #endif
- Base->Element_Begin1("Lyrics");
- }
- else
- {
- Parser=new File_Unknown;
- Base->Element_Begin1("Problem");
- }
- }
- else if (ID4==0x5441472B) //"TAG+"
- {
- #ifdef MEDIAINFO_ID3_YES
- Parser=new File_Id3;
- #else
- Parser=new File_Unknown;
- #endif
- Parser_Buffer_Size=227+128;
- Base->Element_Begin1("Id3+");
- }
- else if (ID==0x544147) //"TAG"
- {
- #ifdef MEDIAINFO_ID3_YES
- Parser=new File_Id3;
- #else
- Parser=new File_Unknown;
- #endif
- Parser_Buffer_Size=128;
- if (!TagSizeIsFinal)
- File_BeginTagSize+=Parser_Buffer_Size;
- Base->Element_Begin1("Id3");
- }
- else if (Base->File_Offset+Base->Buffer_Offset==Lyrics3_Offset)
- {
- #ifdef MEDIAINFO_LYRICS3_YES
- Parser=new File_Lyrics3;
- ((File_Lyrics3*)Parser)->TotalSize=Lyrics3_Size;
- #else
- Parser=new File__Analyze;
- #endif
- Parser_Buffer_Size=(size_t)Lyrics3_Size;
- if (!TagSizeIsFinal)
- File_BeginTagSize+=Parser_Buffer_Size;
- Base->Element_Begin1("Lyrics3");
- }
- else if (Base->File_Offset+Base->Buffer_Offset==Lyrics3v2_Offset)
- {
- #ifdef MEDIAINFO_LYRICS3V2_YES
- Parser=new File_Lyrics3v2;
- ((File_Lyrics3v2*)Parser)->TotalSize=Lyrics3v2_Size;
- #else
- Parser=new File_Unknown;
- #endif
- Parser_Buffer_Size=(size_t)Lyrics3v2_Size;
- if (!TagSizeIsFinal)
- File_BeginTagSize+=Parser_Buffer_Size;
- Base->Element_Begin1("Lyrics3v2");
- }
- else if (Base->File_Offset+Base->Buffer_Offset==ApeTag_Offset)
- {
- #ifdef MEDIAINFO_APETAG_YES
- Parser=new File_ApeTag;
- #else
- Parser=new File_Unknown;
- #endif
- if (!TagSizeIsFinal)
- File_BeginTagSize+=Parser_Buffer_Size;
- Parser_Buffer_Size=(size_t)ApeTag_Size;
- Base->Element_Begin1("ApeTag");
- }
- else
- break;
- Base->Open_Buffer_Init(Parser);
- }
-
- //We continue
- if (Parser)
- {
- if (!Parser_Buffer_Size)
- {
- delete Parser; Parser=NULL;
- return false; //Probably stuck in a loop, exit
- }
- int64u Size_ToParse=(Parser_Buffer_Size<Base->Buffer_Size-Base->Buffer_Offset)?Parser_Buffer_Size:(Base->Buffer_Size-Base->Buffer_Offset);
- Base->Open_Buffer_Continue(Parser, Base->Buffer+Base->Buffer_Offset, (size_t)Size_ToParse);
- Base->Buffer_Offset+=(size_t)Size_ToParse;
- TagsSize+=Size_ToParse;
- Parser_Buffer_Size-=(size_t)Size_ToParse;
- if (Parser->Status[File__Analyze::IsFinished] || Parser_Buffer_Size==0)
- {
- if (Base->Status[File__Analyze::IsAccepted] && Parser->Count_Get(Stream_General)>0)
- {
- if (!Base->Status[File__Analyze::IsFilled])
- Base->Fill();
- Parser->Read_Buffer_Finalize();
- Base->Merge(*Parser, Stream_General, 0, 0, Priority);
- Base->Merge(*Parser, Stream_Audio , 0, 0, Priority);
- delete Parser; Parser=NULL;
- }
- else
- {
- Parser_Streams_Fill.push_back(Parser);
- #ifdef MEDIAINFO_ID3V2_YES
- Parser_Streams_Fill_Priority.push_back(Priority);
- #endif
- Parser=NULL;
- }
- if (Parser_Buffer_Size)
- Base->Skip_XX(Parser_Buffer_Size, "Data continued");
- Base->Element_Show();
- Base->Element_End0();
- }
- else
- break;
- }
- }
-
- return true;
-}
-
-//***************************************************************************
-// Streams
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t File__Tags_Helper::Stream_Prepare(stream_t StreamKind)
-{
- if (Base->Count_Get(StreamKind))
- return 1; //Only one is permited
- return Base->Stream_Prepare(StreamKind);
-}
-
-//***************************************************************************
-// End
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File__Tags_Helper::GoTo (int64u GoTo, const char* ParserName)
-{
- if (Base->IsSub)
- {
- Base->GoTo(GoTo, ParserName);
- return;
- }
-
- //Normal Data_GoTo;
-
- //Configuring
- if (!SearchingForEndTags)
- {
- if (GoTo==(int64u)-1)
- JumpTo_WantedByParser=Base->File_Offset+Base->Buffer_Offset;
- else
- JumpTo_WantedByParser=GoTo;
- SearchingForEndTags=true;
- }
-
- //Trying to parse tags
- while (!TagSizeIsFinal && DetectBeginOfEndTags_Test());
-
- //If a jump is requested
- if (!TagSizeIsFinal)
- return;
-
- //Positionning (if finnished)
- if (TagSizeIsFinal)
- {
- if (JumpTo_WantedByParser!=(int64u)-1)
- {
- if (JumpTo_WantedByParser<Id3v1_Size+Lyrics3_Size+Lyrics3v2_Size+ApeTag_Size)
- Base->GoTo(JumpTo_WantedByParser, ParserName);
- else
- Base->GoTo(JumpTo_WantedByParser-Id3v1_Size-Lyrics3_Size-Lyrics3v2_Size-ApeTag_Size, ParserName);
- }
- SearchingForEndTags=false;
- }
- else
- Base->GoTo(GoTo, ParserName);
-}
-
-//---------------------------------------------------------------------------
-void File__Tags_Helper::GoToFromEnd (int64u GoToFromEnd, const char* ParserName)
-{
- if (GoToFromEnd>Base->File_Size)
- {
- if (ParserName)
- {
- bool MustElementBegin=Base->Element_Level?true:false;
- if (Base->Element_Level>0)
- Base->Element_End0(); //Element
- Base->Info(Ztring(ParserName)+__T(", wants to go to somewhere, but not valid"));
- if (MustElementBegin)
- Base->Element_Level++;
- }
- Finish(ParserName);
- return;
- }
-
- GoTo(Base->File_Size-GoToFromEnd, ParserName);
-}
-
-//---------------------------------------------------------------------------
-void File__Tags_Helper::Accept (const char* ParserName)
-{
- Base->Accept(ParserName);
-}
-
-//---------------------------------------------------------------------------
-void File__Tags_Helper::Reject (const char* ParserName)
-{
- Base->Reject(ParserName);
-}
-
-//---------------------------------------------------------------------------
-void File__Tags_Helper::Finish (const char* ParserName)
-{
- if (ParserName)
- {
- bool MustElementBegin=Base->Element_Level?true:false;
- if (Base->Element_Level>0)
- Base->Element_End0(); //Element
- Base->Info(Ztring(ParserName)+__T(", finished but searching tags"));
- if (MustElementBegin)
- Base->Element_Level++;
- }
-
- GoToFromEnd(0, ParserName);
-}
-
-//---------------------------------------------------------------------------
-bool File__Tags_Helper::DetectBeginOfEndTags_Test()
-{
- TagSizeIsFinal=true;
-
- //Id3v1
- if (Id3v1_Size==0 && File_EndTagSize==0 && Base->File_Size>=128) //Only one, at the end, larger than 128 bytes
- {
- if (Base->File_Offset>Base->File_Size-128-32) //Must be at least at the end less 128 bytes
- {
- Base->GoTo(Base->File_Size-128-32, "Tags detection"); //32 to be able to quickly see another tag system
- TagSizeIsFinal=false;
- return false;
- }
-
- if (Base->File_Offset+Base->Buffer_Size<Base->File_Size) //Must be at least at the end less 128 bytes of tags
- {
- if (Base->File_Offset<Base->File_Size-128-32)
- Base->GoTo(Base->File_Size-128-32, "Tags detection");
- TagSizeIsFinal=false;
- return false;
- }
-
- if (CC3(Base->Buffer+((size_t)((Base->File_Size-128)-Base->File_Offset)))==CC3("TAG"))
- {
- Id3v1_Size=128;
- File_EndTagSize+=128;
- Id3v1_Offset=Base->File_Size-File_EndTagSize;
- TagSizeIsFinal=false;
- }
- }
-
- //Lyrics3
- if (Lyrics3_Size==0 && Base->File_Size>=File_EndTagSize+9) //Only one, larger than File_EndTagSize+15 bytes
- {
- if (Base->File_Offset>Base->File_Size-File_EndTagSize-9) //Must be at the end less 15 bytes
- {
- Base->GoTo(Base->File_Size-File_EndTagSize-9, "Tags");
- TagSizeIsFinal=false;
- return false;
- }
-
- if (Base->File_Offset+Base->Buffer_Size<Base->File_Size-File_EndTagSize) //Must be at the end less File_EndTagSize+9 bytes plus 9 bytes of tags
- {
- if (Base->File_Offset!=Base->File_Size-File_EndTagSize)
- Base->GoTo(Base->File_Size-File_EndTagSize, "Tags");
- TagSizeIsFinal=false;
- return false;
- }
-
- if (CC8(Base->Buffer+((size_t)((Base->File_Size-File_EndTagSize-9)-Base->File_Offset)))==CC8("LYRICSEN"))
- {
- //Must find the beginning, 5100 bytes before
- if (Base->File_Offset>Base->File_Size-File_EndTagSize-5100) //Must be at the end less 15 bytes
- {
- Base->GoTo(Base->File_Size-File_EndTagSize-5100, "Tags");
- TagSizeIsFinal=false;
- return false;
- }
-
- if (Base->File_Offset+Base->Buffer_Size<Base->File_Size-File_EndTagSize) //Must be at the end less File_EndTagSize
- {
- if (Base->File_Offset!=Base->File_Size-File_EndTagSize)
- Base->GoTo(Base->File_Size-File_EndTagSize, "Tags");
- TagSizeIsFinal=false;
- return false;
- }
-
- //Searching for "LYRICSBEGIN"
- std::string Buf((const char*)(Base->Buffer+Base->Buffer_Offset), Base->Buffer_Size-Base->Buffer_Offset);
- size_t Pos=Buf.find("LYRICSBEGIN");
- if (Pos!=std::string::npos)
- {
- Lyrics3_Size=Base->File_Size-File_EndTagSize-(Base->File_Offset+Base->Buffer_Offset+Pos);
- File_EndTagSize+=Lyrics3_Size;
- Lyrics3_Offset=Base->File_Size-File_EndTagSize;
- TagSizeIsFinal=false;
- }
- }
- }
-
- //Lyrics3v2
- if (Lyrics3v2_Size==0 && Base->File_Size>=File_EndTagSize+15) //Only one, larger than File_EndTagSize+15 bytes
- {
- if (Base->File_Offset>Base->File_Size-File_EndTagSize-15) //Must be at the end less 15 bytes
- {
- Base->GoTo(Base->File_Size-File_EndTagSize-15, "Tags");
- TagSizeIsFinal=false;
- return false;
- }
-
- if (Base->File_Offset+Base->Buffer_Size<Base->File_Size-File_EndTagSize) //Must be at the end less File_EndTagSize
- {
- if (Base->File_Offset!=Base->File_Size-File_EndTagSize)
- Base->GoTo(Base->File_Size-File_EndTagSize, "Tags");
- TagSizeIsFinal=false;
- return false;
- }
-
- if (CC8(Base->Buffer+((size_t)((Base->File_Size-File_EndTagSize-15+6)-Base->File_Offset)))==CC8("LYRICS20"))
- {
- Lyrics3v2_Size=Ztring((const char*)(Base->Buffer+((size_t)((Base->File_Size-File_EndTagSize-15)-Base->File_Offset))), 6).To_int32u()+15;
- File_EndTagSize+=Lyrics3v2_Size;
- Lyrics3v2_Offset=Base->File_Size-File_EndTagSize;
- TagSizeIsFinal=false;
- }
- }
-
- //ApeTag
- if (ApeTag_Size==0 && Base->File_Size>=File_EndTagSize+32) //Only one, larger than File_EndTagSize+32 bytes
- {
- if (Base->File_Offset>Base->File_Size-File_EndTagSize-32) //Must be at the end less 32 bytes
- {
- Base->GoTo(Base->File_Size-File_EndTagSize-32, "Tags");
- TagSizeIsFinal=false;
- return false;
- }
-
- if (Base->File_Offset+Base->Buffer_Size<Base->File_Size-File_EndTagSize) //Must be at the end less File_EndTagSize+15 bytes plus 15 bytes of tags
- {
- if (Base->File_Offset!=Base->File_Size-File_EndTagSize-32)
- Base->GoTo(Base->File_Size-File_EndTagSize-32, "Tags");
- TagSizeIsFinal=false;
- return false;
- }
-
- if (CC8(Base->Buffer+((size_t)((Base->File_Size-File_EndTagSize-32)-Base->File_Offset)))==CC8("APETAGEX"))
- {
- ApeTag_Size=LittleEndian2int32u(Base->Buffer+((size_t)((Base->File_Size-File_EndTagSize-32+12)-Base->File_Offset)));
- if (LittleEndian2int32u(Base->Buffer+((size_t)((Base->File_Size-File_EndTagSize-32+8)-Base->File_Offset)))==2000)
- ApeTag_Size+=32;
- File_EndTagSize+=ApeTag_Size;
- ApeTag_Offset=Base->File_Size-File_EndTagSize;
- TagSizeIsFinal=false;
- }
- }
-
- //Finished
- return true;
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Tag/File__Tags.h b/src/thirdparty/MediaInfo/MediaInfo/Tag/File__Tags.h
deleted file mode 100644
index 7347ec8d4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Tag/File__Tags.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about all kind of framed tags tagged files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File__TagsH
-#define MediaInfo_File__TagsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File__Tags_Helper
-//***************************************************************************
-
-class File__Tags_Helper
-{
-public :
- //In
- File__Analyze* Base;
-
- //Out
- int64u TagsSize;
- int64u File_BeginTagSize;
- int64u File_EndTagSize;
-
- //Constructor/Destructor
- File__Tags_Helper();
- ~File__Tags_Helper();
-
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin() {return Synched_Test();}
-
- //Buffer - Synchro
- bool Synchronize(bool &Tag_Found, size_t Synchro_Offset=0);
- bool Synched_Test();
-
- //Buffer - Global
- bool Read_Buffer_Continue ();
-
- //Per element
- bool Header_Begin() {return Synched_Test();}
-
- //Streams
- size_t Stream_Prepare(stream_t StreamKind);
-
- //End
- void GoTo (int64u GoTo, const char* ParserName=NULL);
- void GoToFromEnd (int64u GoToFromEnd=0, const char* ParserName=NULL);
- void Accept (const char* ParserName=NULL);
- void Reject (const char* ParserName=NULL);
- void Finish (const char* ParserName=NULL);
-
-private :
- //Temp
- File__Analyze* Parser;
- vector<File__Analyze*> Parser_Streams_Fill; //Parser to merge when filling
- #ifdef MEDIAINFO_ID3V2_YES
- vector<bool> Parser_Streams_Fill_Priority; //Parser to merge when filling
- #endif
- size_t Parser_Buffer_Size;
- int64u Id3v1_Offset;
- int64u Lyrics3_Offset;
- int64u Lyrics3v2_Offset;
- int64u ApeTag_Offset;
- int64u JumpTo_WantedByParser;
- int64u Id3v1_Size;
- int64u Lyrics3_Size;
- int64u Lyrics3v2_Size;
- int64u ApeTag_Size;
- bool TagSizeIsFinal;
- bool SearchingForEndTags;
-
- //Helpers
- bool DetectBeginOfEndTags(); //return true if we can continue, false if want return
- bool DetectBeginOfEndTags_Test();
-
-};} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_AribStdB24B37.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_AribStdB24B37.cpp
deleted file mode 100644
index 049c81549..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_AribStdB24B37.cpp
+++ /dev/null
@@ -1,1483 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_ARIBSTDB24B37_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_AribStdB24B37.h"
-#if defined(MEDIAINFO_MPEGTS_YES)
- #include "MediaInfo/Multiple/File_MpegTs.h"
-#endif
-#include <vector>
-#ifdef __WINDOWS__
- #undef __TEXT
- #include "windows.h"
-#endif // __WINDOWS__
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_Caption_conversion_type(int8u Caption_conversion_type)
-{
- switch (Caption_conversion_type)
- {
- case 0 : return "Analog";
- case 1 : return "HD side panel";
- case 2 : return "SD (4:3)";
- case 3 : return "SD wide side panel";
- case 4 : return "Mobile closed caption";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_Caption_DataIdentifier(int8u DataIdentifier)
-{
- switch (DataIdentifier)
- {
- case 0 : return "Exchange format data (closed caption data label)";
- case 1 : return "Exchange format data (program management information)";
- case 2 : return "Exchange format data (page information 1)";
- case 3 : return "Exchange format data (page information 2)";
- case 4 : return "Short form data (closed caption management data)";
- case 5 : return "Short form data (closed caption text data)";
- case 6 : return "Undefined";
- case 7 : return "Dummy data";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_DRCS_conversion_type(int8u DRCS_conversion_type)
-{
- switch (DRCS_conversion_type)
- {
- case 0 : return "DRCS conversion mode A";
- case 1 : return "DRCS conversion mode B";
- case 2 : return "Mobile DRCS";
- case 3 : return "DRCS conversion not possible";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_data_group_id(int8u data_group_id)
-{
- switch (data_group_id)
- {
- case 0 : return "Caption management";
- case 1 : return "Caption statement (1st)";
- case 2 : return "Caption statement (2nd)";
- case 3 : return "Caption statement (3rd)";
- case 4 : return "Caption statement (4th)";
- case 5 : return "Caption statement (5th)";
- case 6 : return "Caption statement (6th)";
- case 7 : return "Caption statement (7th)";
- case 8 : return "Caption statement (8th)";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_TMD(int8u TMD)
-{
- switch (TMD)
- {
- case 0 : return "Free";
- case 1 : return "Real time";
- case 2 : return "Offset time";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_DMF_reception(int8u DMF_reception)
-{
- switch (DMF_reception)
- {
- case 0 : return "Automatic display when received";
- case 1 : return "Non-displayed automatically when received";
- case 2 : return "Selectable display when received";
- case 3 : return "Automatic display/non-display under specific condition when received";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_DMF_recording(int8u DMF_recording)
-{
- switch (DMF_recording)
- {
- case 0 : return "Automatic display when recording and playback";
- case 1 : return "Non- displayed automatically when recording and playback";
- case 2 : return "Selectable display when recording and playback";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_format(int8u format)
-{
- switch (format)
- {
- case 0 : return "Horizontal writing in standard density";
- case 1 : return "Vertical writing in standard density";
- case 2 : return "Horizontal writing in high density";
- case 3 : return "Vertical writing in high density";
- case 4 : return "Horizontal writing of Western language";
- case 5 : return "Horizontal writing in 1920 x 1080";
- case 6 : return "Vertical writing in 1920 x 1080";
- case 7 : return "Horizontal writing in 960 x 540";
- case 8 : return "Vertical writing in 960 x 540";
- case 9 : return "Horizontal writing in 1280 x 720";
- case 10 : return "Vertical writing in 1280 x 720";
- case 11 : return "Horizontal writing in 720 x 480";
- case 12 : return "Vertical writing in 720 x 480";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_TCS(int8u TCS)
-{
- switch (TCS)
- {
- case 0 : return "8-bit character codes";
- case 1 : return "UCS";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_rollup_mode(int8u rollup_mode)
-{
- switch (rollup_mode)
- {
- case 0 : return "Non-roll up";
- case 1 : return "Roll up";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* AribStdB24B37_data_unit_parameter(int8u data_unit_parameter)
-{
- switch (data_unit_parameter)
- {
- case 0x20 : return "Texts";
- case 0x28 : return "Geometric graphics";
- case 0x2C : return "Synthesized sound";
- case 0x30 : return "1 byte DRCS";
- case 0x31 : return "2 byte DRCS";
- case 0x34 : return "color map";
- case 0x35 : return "Bit map";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-// Table 7-18 Default macro code strings
-static const int8u AribStdB24B37_DefaultMacros[][19] =
-{
- { 0x1B, 0x24, 0x42, 0x1B, 0x29, 0x4A, 0x1B, 0x2A, 0x30, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x24, 0x42, 0x1B, 0x29, 0x31, 0x1B, 0x2A, 0x30, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x24, 0x42, 0x1B, 0x29, 0x20, 0x41, 0x1B, 0x2A, 0x30, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x32, 0x1B, 0x29, 0x34, 0x1B, 0x2A, 0x35, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x32, 0x1B, 0x29, 0x33, 0x1B, 0x2A, 0x35, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x32, 0x1B, 0x29, 0x20, 0x41, 0x1B, 0x2A, 0x35, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x20, 0x41, 0x1B, 0x29, 0x20, 0x42, 0x1B, 0x2A, 0x20, 0x43, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x20, 0x44, 0x1B, 0x29, 0x20, 0x45, 0x1B, 0x2A, 0x20, 0x46, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x20, 0x47, 0x1B, 0x29, 0x20, 0x48, 0x1B, 0x2A, 0x20, 0x49, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x20, 0x4A, 0x1B, 0x29, 0x20, 0x4B, 0x1B, 0x2A, 0x20, 0x4C, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x20, 0x4D, 0x1B, 0x29, 0x20, 0x4E, 0x1B, 0x2A, 0x20, 0x4F, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x24, 0x42, 0x1B, 0x29, 0x20, 0x42, 0x1B, 0x2A, 0x30, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x24, 0x42, 0x1B, 0x29, 0x20, 0x43, 0x1B, 0x2A, 0x30, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x24, 0x42, 0x1B, 0x29, 0x20, 0x44, 0x1B, 0x2A, 0x30, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x31, 0x1B, 0x29, 0x30, 0x1B, 0x2A, 0x4A, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
- { 0x1B, 0x28, 0x4A, 0x1B, 0x29, 0x32, 0x1B, 0x2A, 0x20, 0x41, 0x1B, 0x2B, 0x20, 0x70, 0x0F, 0x1B, 0x7D },
-};
-
-//---------------------------------------------------------------------------
-static const int8u AribStdB24B37_DefaultMacros_size[] =
-{
- 16,
- 16,
- 17,
- 16,
- 16,
- 17,
- 19,
- 19,
- 19,
- 19,
- 19,
- 17,
- 17,
- 17,
- 16,
- 17,
-};
-
-//---------------------------------------------------------------------------
-// CRC_CCIT_Xmodem_Table
-// A CRC is computed like this:
-// Init: int16u CRC_CCIT_Xmodem = 0x0000;
-// for each data byte do
-// CRC_CCIT_Xmodem=(CRC_CCIT_Xmodem<<8) ^ CRC_CCIT_Xmodem_Table[(CRC_CCIT_Xmodem>>8)^(data_byte)];
-// Array built with the help of http://www.sanity-free.com/133/crc_16_ccitt_in_csharp.html
-int16u AribStdB24B37_CRC_CCIT_Xmodem_Table[256] =
-{
- 0x0000, 0x1021, 0x2042, 0x3063,
- 0x4084, 0x50A5, 0x60C6, 0x70E7,
- 0x8108, 0x9129, 0xA14A, 0xB16B,
- 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
- 0x1231, 0x0210, 0x3273, 0x2252,
- 0x52B5, 0x4294, 0x72F7, 0x62D6,
- 0x9339, 0x8318, 0xB37B, 0xA35A,
- 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
- 0x2462, 0x3443, 0x0420, 0x1401,
- 0x64E6, 0x74C7, 0x44A4, 0x5485,
- 0xA56A, 0xB54B, 0x8528, 0x9509,
- 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
- 0x3653, 0x2672, 0x1611, 0x0630,
- 0x76D7, 0x66F6, 0x5695, 0x46B4,
- 0xB75B, 0xA77A, 0x9719, 0x8738,
- 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
- 0x48C4, 0x58E5, 0x6886, 0x78A7,
- 0x0840, 0x1861, 0x2802, 0x3823,
- 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF,
- 0x8948, 0x9969, 0xA90A, 0xB92B,
- 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96,
- 0x1A71, 0x0A50, 0x3A33, 0x2A12,
- 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E,
- 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
- 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5,
- 0x2C22, 0x3C03, 0x0C60, 0x1C41,
- 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD,
- 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
- 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4,
- 0x3E13, 0x2E32, 0x1E51, 0x0E70,
- 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC,
- 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
- 0x9188, 0x81A9, 0xB1CA, 0xA1EB,
- 0xD10C, 0xC12D, 0xF14E, 0xE16F,
- 0x1080, 0x00A1, 0x30C2, 0x20E3,
- 0x5004, 0x4025, 0x7046, 0x6067,
- 0x83B9, 0x9398, 0xA3FB, 0xB3DA,
- 0xC33D, 0xD31C, 0xE37F, 0xF35E,
- 0x02B1, 0x1290, 0x22F3, 0x32D2,
- 0x4235, 0x5214, 0x6277, 0x7256,
- 0xB5EA, 0xA5CB, 0x95A8, 0x8589,
- 0xF56E, 0xE54F, 0xD52C, 0xC50D,
- 0x34E2, 0x24C3, 0x14A0, 0x0481,
- 0x7466, 0x6447, 0x5424, 0x4405,
- 0xA7DB, 0xB7FA, 0x8799, 0x97B8,
- 0xE75F, 0xF77E, 0xC71D, 0xD73C,
- 0x26D3, 0x36F2, 0x0691, 0x16B0,
- 0x6657, 0x7676, 0x4615, 0x5634,
- 0xD94C, 0xC96D, 0xF90E, 0xE92F,
- 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
- 0x5844, 0x4865, 0x7806, 0x6827,
- 0x18C0, 0x08E1, 0x3882, 0x28A3,
- 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E,
- 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
- 0x4A75, 0x5A54, 0x6A37, 0x7A16,
- 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
- 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D,
- 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
- 0x7C26, 0x6C07, 0x5C64, 0x4C45,
- 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
- 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C,
- 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
- 0x6E17, 0x7E36, 0x4E55, 0x5E74,
- 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_AribStdB24B37::File_AribStdB24B37()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_AribStdB24B37;
- StreamIDs_Width[0]=1;
- #endif //MEDIAINFO_EVENTS
- PTS_DTS_Needed=true;
-
- //In
- HasCcis=false;
- ParseCcis=false;
- IsAncillaryData=false;
-
- //Config
- Caption_conversion_type=(int8u)-1;
-
- //Ancillary
- #if defined(MEDIAINFO_MPEGTS_YES)
- Parser=NULL;
- #endif
-}
-
-//---------------------------------------------------------------------------
-File_AribStdB24B37::~File_AribStdB24B37()
-{
- #if defined(MEDIAINFO_MPEGTS_YES)
- delete Parser;
- #endif
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::Streams_Fill()
-{
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- {
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_ID, Pos+1);
- Fill(Stream_Text, StreamPos_Last, Text_Format, "ARIB STD B24/B37");
- if (HasCcis)
- {
- Fill(Stream_Text, StreamPos_Last, Text_MuxingMode, "CCIS");
- Fill(Stream_Text, StreamPos_Last, Text_Format_Profile, AribStdB24B37_Caption_conversion_type(Caption_conversion_type));
- }
- Fill(Stream_Text, StreamPos_Last, Text_StreamSize, 0);
- Fill(Stream_Text, StreamPos_Last, Text_BitRate_Mode, "CBR");
- Fill(Stream_Text, StreamPos_Last, Text_Language, Streams[Pos].ISO_639_language_code);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::Streams_Finish()
-{
- #if defined(MEDIAINFO_MPEGTS_YES)
- if (Parser)
- {
- Finish(Parser);
- Merge(*Parser);
- }
- #endif
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::Read_Buffer_Continue()
-{
- if (Buffer_Size==0)
- return;
-
- if (IsAncillaryData)
- {
- if (!Status[IsAccepted])
- Accept();
- int8u DataIdentifier;
- BS_Begin();
- Skip_SB( "Error correction");
- Skip_SB( "Undefined");
- Skip_SB( "Undefined");
- Skip_SB( "Undefined");
- Skip_S1(4, "Continuity Index");
- Skip_S1(8, "Undefined");
- Skip_SB( "Undefined");
- Skip_SB( "Start packet flag");
- Skip_SB( "End packet flag");
- Skip_SB( "Send mode");
- Info_S1(4, Caption_conversion_type, "Format identifier"); Param_Info1(AribStdB24B37_Caption_conversion_type(Caption_conversion_type));
- Skip_S1(2, "Undefined");
- Get_S1 (3, DataIdentifier, "Closed caption data identifier"); Param_Info1(AribStdB24B37_Caption_DataIdentifier(DataIdentifier));
- Info_S1(3, data_group_id, "Language identifier"); if (DataIdentifier) {Param_Info1(AribStdB24B37_data_group_id(data_group_id));}
- BS_End();
-
- if (DataIdentifier>6)
- {
- Skip_XX(245, "Dummy");
- }
- else if (DataIdentifier<4)
- {
- Skip_XX(245, "Exchange format data, not supported");
- }
- else
- {
- Element_Begin1("Short form data");
- int8u LEN, Label_01, Label_3A, Data_Length;
- Get_B1(LEN, "LEN");
- Element_Begin1("display timing");
- Get_B1(Label_01, "Label (01)");
- BS_Begin();
- Skip_S1(6, "Undefined");
- Skip_S1(2, "Data-type identifier");
- Skip_S1(6, "Undefined");
- Skip_S1(2, "Timing-type identifier");
- Skip_S1(6, "Undefined");
- Skip_S1(2, "Timing-direction identifier");
- Skip_B5( "Display timing value");
- BS_End();
- Element_End0();
- Element_Begin1("closed caption data");
- Get_B1(Label_3A, "Label (3A)");
- Get_B1(Data_Length, "Data Length");
- #if defined(MEDIAINFO_MPEGTS_YES)
- if (Parser==NULL)
- {
- Parser=new File_MpegTs;
- ((File_MpegTs*)Parser)->FromAribStdB24B37=true;
- Open_Buffer_Init(Parser);
- }
- if (FrameInfo.PTS==(int64u)-1)
- FrameInfo.PTS=FrameInfo.DTS;
- Parser->FrameInfo=FrameInfo;
- Open_Buffer_Continue(Parser, Buffer+Buffer_Offset+(size_t)Element_Offset, 188);
- Element_Offset+=188;
- #else
- Skip_XX(188, "TS data");
- #endif
- if (Data_Length==192)
- {
- Skip_B2( "Group-A CRC");
- Skip_B2( "Group-B CRC");
- }
- else if (Data_Length>188)
- Skip_XX(Data_Length-188, "Unknown");
- Element_End0();
- if (LEN>203)
- Skip_XX(LEN-204, "User Data");
- if (LEN<244)
- Skip_XX(244-LEN, "Unused");
- Skip_XX(Element_Size-Element_Offset-6, "Format data");
- Element_End0();
- }
-
- Skip_B6( "ECC");
- return;
- }
-
-
- if (ParseCcis)
- {
- int32u CCIS_code;
- Get_C4 ( CCIS_code, "CCIS_code");
- if (CCIS_code==0xFFFFFFFF)
- {
- Skip_XX(Element_Size, "?");
- return;
- }
- Get_B1 ( Caption_conversion_type, "Caption_conversion_type"); Param_Info1(AribStdB24B37_Caption_conversion_type(Caption_conversion_type));
- BS_Begin();
- Info_S1(2, DRCS_conversion_type, "DRCS_conversion_type"); Param_Info1(AribStdB24B37_DRCS_conversion_type(DRCS_conversion_type));
- Skip_S1(6, "reserved");
- BS_End();
- Skip_B2( "reserved");
- Skip_B8( "reserved");
- ParseCcis=false;
- return;
- }
-
- Skip_B1( "Data_identifier");
- Skip_B1( "Private_stream_id");
- BS_Begin();
- Skip_S1(4, "reserved");
- Skip_S1(4, "PES_data_packet_header_length");
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::Read_Buffer_Unsynched()
-{
- #if defined(MEDIAINFO_MPEGTS_YES)
- if (Parser)
- Parser->Open_Buffer_Unsynch();
- #endif
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::Header_Parse()
-{
- //Parsing
- int16u data_group_size;
- int8u data_group_id;
- BS_Begin();
- Skip_SB( "data_group_id (update part)");
- Get_S1 (5, data_group_id, "data_group_id"); Param_Info1(AribStdB24B37_data_group_id(data_group_id));
- Skip_S1(2, "data_group_version");
- BS_End();
- Skip_B1( "data_group_link_number");
- Skip_B1( "last_data_group_link_number");
- Get_B2 (data_group_size, "data_group_size");
-
- //Filling
- Header_Fill_Code(data_group_id, AribStdB24B37_data_group_id(data_group_id));
- Header_Fill_Size(Element_Offset+data_group_size+2);
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::Data_Parse()
-{
- //CRC
- int16u CRC_CCIT_Xmodem=0x0000;
- const int8u* CRC_CCIT_Xmodem_Buffer=Buffer+Buffer_Offset-Header_Size; //data_group_id position
- while(CRC_CCIT_Xmodem_Buffer<Buffer+Buffer_Offset+(size_t)Element_Size) //from data_group_id to the end, CRC included
- {
- CRC_CCIT_Xmodem=(CRC_CCIT_Xmodem<<8) ^ AribStdB24B37_CRC_CCIT_Xmodem_Table[(CRC_CCIT_Xmodem>>8)^(*CRC_CCIT_Xmodem_Buffer)];
- CRC_CCIT_Xmodem_Buffer++;
- }
- if (CRC_CCIT_Xmodem)
- {
- Skip_XX(Element_Size, "Data");
- Trusted_IsNot("CRC error");
- return;
- }
-
- Element_Size-=2;
-
- switch (Element_Code)
- {
- case 0 :
- caption_management(); break;
- case 1 :
- case 2 :
- case 3 :
- case 4 :
- case 5 :
- case 6 :
- case 7 :
- case 8 :
- if (Streams.empty())
- {
- Skip_XX(Element_Size, "Waiting for caption_management");
- break;
- }
- if (Element_Code>Streams.size())
- {
- Skip_XX(Element_Size, "Unknown service");
- Trusted_IsNot("Invalid service number");
- break;
- }
-
- Streams[(size_t)(Element_Code-1)].Line.clear();
- caption_statement();
- Streams[(size_t)(Element_Code-1)].Line.clear();
- break;
- default: Skip_XX(Element_Size, "Unknown");
- }
-
- Element_Size+=2;
- Skip_B2( "CRC_16");
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::caption_management() //caption_management_data()
-{
- //Parsing
- int32u data_unit_loop_length;
- int8u TMD, num_languages;
- BS_Begin();
- Get_S1 (2, TMD, "TMD"); Param_Info1(AribStdB24B37_TMD(TMD));
- Skip_S1(6, "Reserved");
- if (TMD==2)
- {
- Skip_S5(36, "OTM"); //Note: time offset (HHMMSSmmm in BCD format) is currently not supported
- Skip_S5( 4, "Reserved");
- }
- BS_End();
- Get_B1 (num_languages, "num_languages");
-
- Streams.clear();
- Streams.resize(num_languages);
- for (int8u pos_languages=0; pos_languages<num_languages; pos_languages++)
- {
- int8u DMF_reception, Format;
- string ISO_639_language_code;
- Element_Begin1("language");
- BS_Begin();
- Skip_S1(3, "language_tag");
- Skip_SB( "Reserved");
- Get_S1 (2, DMF_reception, "DMF (reception)"); Param_Info1(AribStdB24B37_DMF_reception(DMF_reception)); //Note: Display Method is currently not supported (all is displayed immediatly)
- Info_S1(2, DMF_recording, "DMF (recording)"); Param_Info1(AribStdB24B37_DMF_recording(DMF_recording));
- BS_End();
- if (DMF_reception==3)
- Skip_B1( "DC");
- Get_String(3, ISO_639_language_code, "ISO_639_language_code");
- BS_Begin();
- Get_S1 (4, Format, "Format"); Param_Info1(AribStdB24B37_format(Format));
- Info_S1(2, TCS, "TCS"); Param_Info1(AribStdB24B37_TCS(TCS));
- Info_S1(2, rollup_mode, "rollup_mode"); Param_Info1(AribStdB24B37_rollup_mode(rollup_mode));
- BS_End();
- Element_End0();
-
- FILLING_BEGIN();
- Streams[pos_languages].ISO_639_language_code=ISO_639_language_code;
- Streams[pos_languages].DMF_reception=DMF_reception;
- Streams[pos_languages].Format=Format;
-
- // Special case
- if (ISO_639_language_code=="por")
- {
- Streams[pos_languages].G[0]=GS_Alphanumeric; //GS_Kanji;
- Streams[pos_languages].G[1]=GS_Alphanumeric;
- Streams[pos_languages].G[2]=GS_Alphanumeric; //GS_Hiragana;
- Streams[pos_languages].G[3]=GS_Alphanumeric; //GS_DRCS|GS_Macro;
- Streams[pos_languages].G_Width[0]=2;
- Streams[pos_languages].G_Width[1]=1;
- Streams[pos_languages].G_Width[2]=1;
- Streams[pos_languages].G_Width[3]=1;
- }
- FILLING_END();
- }
- Get_B3 (data_unit_loop_length, "data_unit_loop_length");
- if (data_unit_loop_length)
- Skip_XX(data_unit_loop_length, "data_unit");
-
- FILLING_BEGIN();
- if (!Status[IsAccepted])
- Accept();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::caption_statement() //caption_data()
-{
- if (Streams[(size_t)(Element_Code-1)].ISO_639_language_code!="jpn")
- {
- Skip_XX(Element_Size-Element_Offset, "Data");
- return; //Not supported (e.g. Portuguese from Brazil, ISDB-Tb)
- }
-
- //Parsing
- int32u data_unit_loop_length;
- int8u TMD;
- BS_Begin();
- Get_S1 (2, TMD, "TMD"); Param_Info1(AribStdB24B37_TMD(TMD));
- Skip_S1(6, "Reserved");
- if (TMD==2)
- {
- Skip_S5(36, "STM"); //Note: start time (HHMMSSmmm in BCD format) is currently not supported (and is applicable only if out of band PTS is not avaialble)
- Skip_S5( 4, "Reserved");
- }
- BS_End();
- Get_B3 (data_unit_loop_length, "data_unit_loop_length");
-
- if (Element_Offset+data_unit_loop_length!=Element_Size)
- {
- Skip_XX(Element_Size-Element_Offset, "Problem");
- return;
- }
-
- while (Element_Offset<Element_Size)
- {
- Element_Begin1("data_unit");
- int8u unit_separator;
- Get_B1 (unit_separator, "unit_separator"); // Should always be 0x1F?
- if (unit_separator==0x1F)
- {
- int32u data_unit_size;
- int8u data_unit_parameter;
- Get_B1 (data_unit_parameter, "data_unit_parameter"); Param_Info1(AribStdB24B37_data_unit_parameter(data_unit_parameter));
- Get_B3 (data_unit_size, "data_unit_size");
- switch (data_unit_parameter)
- {
- case 0x20 : data_unit_data(Element_Offset+data_unit_size); break;
- default : Skip_XX(data_unit_size, "(Not implemented)");
- }
- }
- Element_End0();
- }
-
- Frame_Count++;
- Frame_Count_NotParsedIncluded++;
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::data_unit_data(int64u End)
-{
- Element_Begin1("data_unit_data");
-
- //data_unit_data_byte
- while (Element_Offset<End)
- {
- int8u header;
- Peek_B1(header);
- if (header&0x60) // Not C0 or C1
- {
- if ((header&0x7F)==0x20
- || (header&0x7F)==0x7F)
- {
- Skip_C1 ( "Character");
- Add((Char)header);
- }
- else if (header&0x80) // GR //TODO: buffer check //Note about Caption_conversion_type == Mobile closed caption: see B37 Figure 3-4 Code Ranges for Mobile Closed Caption
- Character(Caption_conversion_type==4?GS_Kanji:Streams[(size_t)(Element_Code-1)].G[Streams[(size_t)(Element_Code-1)].GR],
- Streams[(size_t)(Element_Code-1)].GR,
- Buffer[Buffer_Offset+Element_Offset]&0x7F,
- Buffer[Buffer_Offset+Element_Offset+1]&0x7F);
- else // GL
- {
- Character(Caption_conversion_type==4?GS_DRCS:Streams[(size_t)(Element_Code-1)].G[Streams[(size_t)(Element_Code-1)].GL_SS?Streams[(size_t)(Element_Code-1)].GL_SS:Streams[(size_t)(Element_Code-1)].GL],
- Streams[(size_t)(Element_Code-1)].GL_SS?Streams[(size_t)(Element_Code-1)].GL_SS:Streams[(size_t)(Element_Code-1)].GL,
- Buffer[Buffer_Offset+Element_Offset],
- Buffer[Buffer_Offset+Element_Offset+1]);
- Streams[(size_t)(Element_Code-1)].GL_SS=0;
- }
- }
- else
- control_code(); // C0 or C1
- }
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::JIS (int8u Row, int8u Column)
-{
- // Encoding is JIS, but we have only Shift-JIS to Unicode algo, we transform JIS to Shift-JIS (Windows-31J)
- // See http://en.wikipedia.org/wiki/Shift_JIS for the formula
-
- if (Column<32)
- return; // Problem
-
- #ifdef __WINDOWS__
- char ShiftJIS[2];
- ShiftJIS[0]=((Row+1)>>1) + (Row<=94?112:176);
- if (Row%2)
- ShiftJIS[1]=Column+31+(Column>=96);
- else
- ShiftJIS[1]=Column+126;
-
- wchar_t Temp[2];
- int CharSize=MultiByteToWideChar(932, 0, ShiftJIS, 2, Temp, 2); //932 = Shift-JIS (Windows-31J)
- if (CharSize>0)
- {
- Temp[CharSize]=__T('\0');
- Param_Info1(Ztring().From_Unicode(Temp));
- Add (Ztring().From_Unicode(Temp));
- }
- #else // __WINDOWS__
- //TODO
- #endif // __WINDOWS__
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::Add (Char Character)
-{
- Streams[(size_t)(Element_Code-1)].Line+=Character;
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::Add (Ztring Character)
-{
- Streams[(size_t)(Element_Code-1)].Line+=Character;
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::DefaultMacro()
-{
- Element_Begin1("Default Macro");
- int8u control_code;
- Get_B1 (control_code, "control_code");
-
- if ((control_code&0xF0)==0x60) //Known macros
- {
- //Buffer
- const int8u* Save_Buffer=Buffer;
- size_t Save_Buffer_Offset=Buffer_Offset;
- size_t Save_Buffer_Size=Buffer_Size;
- int64u Save_Element_Offset=Element_Offset;
- int64u Save_Element_Size=Element_Size;
-
- Buffer=AribStdB24B37_DefaultMacros[control_code&0x0F];
- Buffer_Offset=0;
- Buffer_Size=AribStdB24B37_DefaultMacros_size[control_code&0x0F];
- Element_Offset=0;
- Element_Size=Buffer_Size;
-
- data_unit_data(Element_Size);
-
- Buffer=Save_Buffer; Save_Buffer=NULL;
- Buffer_Offset=Save_Buffer_Offset;
- Buffer_Size=Save_Buffer_Size;
- Element_Offset=Save_Element_Offset;
- Element_Size=Save_Element_Size;
- }
- else
- {
- Element_Info1("Unknown");
- Param_Info1("Unknown");
- }
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::Character (int16u CharacterSet, int8u G_Value, int8u FirstByte, int8u SecondByte)
-{
- int16u Value=(FirstByte<<8) | SecondByte;
-
- //ARIB STD B24/B37 provide numbers with 2 number (Row and Colupmn) a shift of 32 (b00100000)
- #define Compute(f,s) (((f+32)<<8) | (s+32))
-
- switch (CharacterSet)
- {
- case GS_Kanji:
- Skip_B2( "Character");
- if (Value<=Compute(84, 6))
- JIS(FirstByte, SecondByte);
- else
- switch (Value)
- {
- case Compute(92, 1): JIS( 35, 42); break;
- case Compute(92, 2): JIS( 35, 43); break;
- case Compute(92, 3): JIS( 35, 44); break;
- case Compute(92, 4): JIS( 35, 45); break;
- case Compute(93, 79): JIS( 40, 110); break;
- case Compute(93, 88): Param_Info1(Ztring().From_UTF8("\xE2\x99\xAB")+__T(" (not exact)")); Add (Ztring().From_UTF8("\xE2\x99\xAB")); break; //Ending music note?
- case Compute(93, 89): Param_Info1(Ztring().From_UTF8("\xE2\x99\xAB")+__T(" (not exact)")); Add (Ztring().From_UTF8("\xE2\x99\xAB")); break; //Opening music note?
- case Compute(93, 90): Param_Info1(Ztring().From_UTF8("\xE2\x99\xAB")); Add (Ztring().From_UTF8("\xE2\x99\xAB")); break; //Music note
- default: Param_Info1("(Unsupported)"); //empty in spec or not yet mapped
- }
- break;
- case GS_Hiragana:
- case GS_PropHiragana:
- Skip_C1( "Character");
- switch (FirstByte)
- {
- case 0x74:
- case 0x75:
- case 0x76:
- Param_Info1("(Unsupported)");
- break; //empty in spec
- case 0x77: JIS( 33, 53); break;
- case 0x78: JIS( 33, 54); break;
- case 0x79: JIS( 33, 60); break;
- case 0x7A: JIS( 33, 35); break;
- case 0x7B: JIS( 33, 86); break;
- case 0x7C: JIS( 33, 87); break;
- case 0x7D: JIS( 33, 34); break;
- case 0x7E: JIS( 33, 38); break;
- default : JIS( 36, FirstByte);
- }
- break;
- case GS_Katakana:
- case GS_PropKatakana:
- Skip_C1( "Character");
- switch (FirstByte)
- {
- case 0x77: JIS( 33, 41); break;
- case 0x78: JIS( 33, 42); break;
- case 0x79: JIS( 33, 51); break;
- case 0x7A: JIS( 33, 33); break;
- case 0x7B: JIS( 33, 86); break;
- case 0x7C: JIS( 33, 87); break;
- case 0x7D: JIS( 33, 34); break;
- case 0x7E: JIS( 33, 38); break;
- default : JIS( 37, FirstByte); break;
- }
- break;
- case GS_Alphanumeric:
- case GS_PropAscii:
- Skip_C1( "Character");
- Add(FirstByte);
- break;
- case GS_DRCS|GS_Macro :
- DefaultMacro();
- break;
- default : ;
- switch (Streams[(size_t)(Element_Code-1)].G_Width[G_Value])
- {
- case 1 : Skip_C1("Character (unsupported)"); break;
- case 2 : Skip_C2("Character (unsupported)"); break;
- default: Skip_XX(Streams[(size_t)(Element_Code-1)].G_Width[G_Value], "Character (unsupported)");
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::control_code()
-{
- int8u control_code;
- Peek_B1(control_code);
-
- switch (control_code)
- {
- // Table 7-15 C0 control set
- case 0x00 : NUL(); break;
- case 0x07 : BEL(); break;
- case 0x08 : APB(); break;
- case 0x09 : APF(); break;
- case 0x0A : APD(); break;
- case 0x0B : APU(); break;
- case 0x0C : CS(); break;
- case 0x0D : APR(); break;
- case 0x0E : LS1(); break;
- case 0x0F : LS0(); break;
- case 0x16 : PAPF(); break;
- case 0x18 : CAN(); break;
- case 0x19 : SS2(); break;
- case 0x1B : ESC(); break;
- case 0x1C : APS(); break;
- case 0x1D : SS3(); break;
- case 0x1E : RS(); break;
- case 0x1F : US(); break;
-
- // Table 7-16 C1 control set
- case 0x80: //BKF
- case 0x81: //RDF
- case 0x82: //GRF
- case 0x83: //YLF
- case 0x84: //BLF
- case 0x85: //MGF
- case 0x86: //CNF
- case 0x87: //WHF
- xxF(); break;
- case 0x88: //SSZ
- case 0x89: //MSZ
- case 0x8A: //NSZ
- xxZ(); break;
- case 0x8B : SZX(); break;
- case 0x90 : COL(); break;
- case 0x91 : FLC(); break;
- case 0x92 : CDC(); break;
- case 0x93 : POL(); break;
- case 0x94 : WMM(); break;
- case 0x95 : MACRO(); break;
- case 0x97 : HLC(); break;
- case 0x98 : RPC(); break;
- case 0x99 : SPL(); break;
- case 0x9A : STL(); break;
- case 0x9B : CSI(); break;
- case 0x9D : TIME(); break;
-
- // Unknown
- default : Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::NUL()
-{
- Element_Begin1("NUL - Empty");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::BEL()
-{
- Element_Begin1("BEL - Bell");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::APB()
-{
- Element_Begin1("APB - Active position backward");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::APF()
-{
- Element_Begin1("APF - Active position forwards");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::APD()
-{
- Element_Begin1("APD - Active position down");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::APU()
-{
- Element_Begin1("APU - Active position up");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::CS()
-{
- Element_Begin1("CS - Clear Screen");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::APR()
-{
- Element_Begin1("APR - Line return at operation position");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::LS1()
-{
- Element_Begin1("LS1 - Locking shift 1");
- Skip_B1( "control_code");
- Element_End0();
-
- Streams[(size_t)(Element_Code-1)].GL=1;
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::LS0()
-{
- Element_Begin1("LS0 - Locking shift 0");
- Skip_B1( "control_code");
- Element_End0();
-
- Streams[(size_t)(Element_Code-1)].GL=0;
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::PAPF()
-{
- Element_Begin1("PAPF - Move forwards at specified operation position");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::CAN()
-{
- Element_Begin1("CAN - Cancel");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::SS2()
-{
- Element_Begin1("SS2 - Single shift 2");
- Skip_B1( "control_code");
- Element_End0();
-
- Streams[(size_t)(Element_Code-1)].GL_SS=3;
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::ESC()
-{
- Element_Begin1("ESC - Escape");
- int8u P1;
- Skip_B1( "control_code");
- Get_B1 (P1, "P1");
-
- switch (P1)
- {
- // Table 7-2 Designation of graphic sets
- case 0x24 :
- {
- int8u P2;
- Get_B1 (P2, "P2");
- switch (P2)
- {
- case 0x28 :
- {
- int8u P3;
- Get_B1 (P3, "P3");
- switch (P3)
- {
- case 0x20 :
- {
- int8u P4;
- Get_B1 (P4, "P4");
- Streams[(size_t)(Element_Code-1)].G[0]=GS_DRCS|P4;
- Streams[(size_t)(Element_Code-1)].G_Width[0]=2;
- }
- break;
- case 0x29 :
- case 0x2A :
- case 0x2B :
- default :
- Streams[(size_t)(Element_Code-1)].G[0]=P2;
- Streams[(size_t)(Element_Code-1)].G_Width[0]=2;
- }
- }
- break;
- case 0x29 :
- case 0x2A :
- case 0x2B :
- {
- int8u P3;
- Get_B1 (P3, "P3");
- if (P3==0x20)
- {
- int8u P4;
- Get_B1 (P4, "P4");
- Streams[(size_t)(Element_Code-1)].G[P2-0x28]=GS_DRCS|P4;
- }
- else
- Streams[(size_t)(Element_Code-1)].G[P2 - 0x28]=P3;
- Streams[(size_t)(Element_Code-1)].G_Width[P2-0x28]=2;
- }
- break;
- default :
- Streams[(size_t)(Element_Code-1)].G[0]=P2;
- Streams[(size_t)(Element_Code-1)].G_Width[0]=2;
- }
- }
- break;
- case 0x28 :
- case 0x29 :
- case 0x2A :
- case 0x2B :
- {
- int8u P2;
- Get_B1 (P2, "P2");
- if (P2==0x20)
- {
- int8u P3;
- Get_B1 (P3, "P3");
- Streams[(size_t)(Element_Code-1)].G[P1-0x28]=GS_DRCS|P3;
- }
- else
- Streams[(size_t)(Element_Code-1)].G[P1 - 0x28]=P2;
- Streams[(size_t)(Element_Code-1)].G_Width[P1-0x28]=1;
- }
- break;
-
- // Table 7-1 Invocation of code elements (locking shift)
- case 0x6E : Streams[(size_t)(Element_Code-1)].GL=2; break;
- case 0x6F : Streams[(size_t)(Element_Code-1)].GL=3; break;
- case 0x7C : Streams[(size_t)(Element_Code-1)].GR=3; break;
- case 0x7D : Streams[(size_t)(Element_Code-1)].GR=2; break;
- case 0x7E : Streams[(size_t)(Element_Code-1)].GR=1; break;
-
- default : ; //Problem?
- }
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::APS()
-{
- Element_Begin1("APS - Specify operation position");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Skip_B1( "P2");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::SS3()
-{
- Element_Begin1("SS3 - Single shift 3");
- Skip_B1( "control_code");
- Element_End0();
-
- Streams[(size_t)(Element_Code-1)].GL_SS=3;
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::RS()
-{
- Element_Begin1("RS - Record separator");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::US()
-{
- Element_Begin1("US - Unit separator");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::xxF()
-{
- Element_Begin1("xxF - foreground");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::xxZ()
-{
- Element_Begin1("xxZ - size");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::SZX()
-{
- Element_Begin1("SZX - Specified size");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::COL()
-{
- Element_Begin1("COL - Color specification");
- int8u P1;
- Skip_B1( "control_code");
- Get_B1 (P1, "P1");
- if (P1==0x20)
- Skip_B1( "P2");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::FLC()
-{
- Element_Begin1("FLC - Flashing control");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::CDC()
-{
- Element_Begin1("CDC - Conceal Display Controls");
- int8u P1;
- Skip_B1( "control_code");
- Get_B1 (P1, "P1");
- if (P1==0x20)
- Skip_B1( "P2");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::POL()
-{
- Element_Begin1("POL - Pattern polarity");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::WMM()
-{
- Element_Begin1("WMM - Modification of write mode");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::MACRO()
-{
- Element_Begin1("MACRO - Macro specification");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Element_End0();
-
- //TODO: save macros
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::HLC()
-{
- Element_Begin1("HLC - Enclosure control");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::RPC()
-{
- Element_Begin1("RPC - Character repeat");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::SPL()
-{
- Element_Begin1("SPL - End of underline and mosaic separation");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::STL()
-{
- Element_Begin1("STL - Start of underline and mosaic separation");
- Skip_B1( "control_code");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::CSI()
-{
- Element_Begin1("CSI - Extended Control Codes");
- Skip_B1( "control_code");
-
- vector<int64u> Params;
- Params.push_back(0);
- size_t Pos=0;
-
- while (Element_Offset+Pos<=Element_Size)
- {
- int8u Value=Buffer[Buffer_Offset+Element_Offset+Pos];
- Pos++;
- if (Value==0x3B)
- Params.push_back(0);
- else if (Value>=0x30 && Value<0x3A)
- {
- Params[Params.size()-1]*=10;
- Params[Params.size()-1]+=Value&0x0F;
- }
- else if (Value>=0x40 && Value<0x80)
- {
- Pos--;
- Skip_Local(Pos, "Values");
- Get_B1(Value, "Delimiter");
- switch (Value)
- {
- case 0x3B:
- Element_Info1("SRC - Raster Colour Designation");
- break;
- case 0x42:
- Element_Info1("GSM - Character deformation");
- break;
- case 0x53:
- Element_Info1("SWF - Set Writing Format");
- if (!Params.empty() && Params[0]<0x100)
- Streams[(size_t)(Element_Code-1)].Format=(int8u)Params[0];
- break;
- case 0x54:
- Element_Info1("CCC - Composite Character Composition");
- break;
- case 0x56:
- Element_Info1("SDF - Set Display Format");
- break;
- case 0x57:
- Element_Info1("SSM - Character composition dot designation");
- break;
- case 0x58:
- Element_Info1("SHS - Set Horizontal Spacing");
- break;
- case 0x59:
- Element_Info1("SVS - Set Vertical Spacing");
- break;
- case 0x5B:
- Element_Info1("PLD - Partially Line Down");
- break;
- case 0x5C:
- Element_Info1("PLU - Partialyl Line Up");
- break;
- case 0x5D:
- Element_Info1("GAA - Colouring block");
- break;
- case 0x5F:
- Element_Info1("SDF - Set Display Position");
- break;
- case 0x61:
- Element_Info1("ACPS - Active Coordinate Position Set");
- //TODO: positioning
- break;
- case 0x62:
- Element_Info1("TCC - Switching control"); // Also Table 5-3
- break;
- case 0x63:
- Element_Info1("ORN - Ornament Control");
- break;
- case 0x64:
- Element_Info1("MDF - Font");
- break;
- case 0x65:
- Element_Info1("CFS - Character Font Set");
- break;
- case 0x66:
- Element_Info1("XCS - External Character Set");
- break;
- case 0x67:
- Element_Info1("SCR - Scroll designation"); // Also Table 5-4
- break;
- case 0x68:
- Element_Info1("PRA - Built-in sound replay");
- break;
- case 0x69:
- Element_Info1("ACS - Alternative Character Set");
- break;
- case 0x6E:
- Element_Info1("RCS - Raster Colour command");
- break;
- case 0x6F:
- Element_Info1("SCS - Skip Character Set");
- break;
- default: ; //Unknown
- }
- break;
- }
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AribStdB24B37::TIME()
-{
- Element_Begin1("TIME - Time");
- Skip_B1( "control_code");
- Skip_B1( "P1");
- Skip_B1( "P2");
- Element_End0();
-
- // if P1 is 0x20, there should be a delay
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_ARIBSTDB24B37_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_AribStdB24B37.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_AribStdB24B37.h
deleted file mode 100644
index 3e9afcf0b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_AribStdB24B37.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DVB Subtitle streams
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_AribStdB24B37H
-#define MediaInfo_File_AribStdB24B37H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_AribStdB24B37
-//***************************************************************************
-
-class File_AribStdB24B37 : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_AribStdB24B37();
- ~File_AribStdB24B37();
-
- //In
- bool HasCcis;
- bool ParseCcis;
- bool IsAncillaryData;
-
- //enums
- enum graphic_set
- {
- // Table 7-3 Classification of code set and Final Byte
- GS_Kanji = 0x42, //2-byte
- GS_Alphanumeric = 0x4A,
- GS_Hiragana = 0x30,
- GS_Katakana = 0x31,
- GS_Mosaic_A = 0x32,
- GS_Mosaic_B = 0x33,
- GS_Mosaic_C = 0x34,
- GS_Mosaic_D = 0x35,
- GS_PropAscii = 0x36,
- GS_PropHiragana = 0x37,
- GS_PropKatakana = 0x38,
- GS_JisX0201_Katakana = 0x49,
- GS_Jis_Kanji_Plane1 = 0x39, //2-byte
- GS_Jis_Kanji_Plane2 = 0x3A, //2-byte
- GS_AddSymbols = 0x3B, //2-byte
- GS_Macro = 0x70,
-
- GS_G = 0x0000, // G set
- GS_DRCS = 0x0100, // DRCS set
- };
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - Per element
- void Read_Buffer_Continue();
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void caption_management();
- void caption_statement();
- void data_unit_data(int64u End);
- void Character(int16u CharacterSet, int8u G_Value, int8u FirstByte, int8u SecondByte);
- void Add(Char Character);
- void Add(Ztring Character);
- void DefaultMacro();
- void control_code();
- void NUL();
- void BEL();
- void APB();
- void APF();
- void APD();
- void APU();
- void CS();
- void APR();
- void LS1();
- void LS0();
- void PAPF();
- void CAN();
- void SS2();
- void ESC();
- void APS();
- void SS3();
- void RS();
- void US();
- void xxF();
- void xxZ();
- void SZX();
- void COL();
- void FLC();
- void CDC();
- void POL();
- void WMM();
- void MACRO();
- void HLC();
- void RPC();
- void SPL();
- void STL();
- void CSI();
- void TIME();
-
- //Stream
- struct stream
- {
- string ISO_639_language_code;
- int8u DMF_reception;
- int8u Format;
-
- int16u G[4];
- int8u G_Width[4];
- int8u GL; // Locked
- int8u GL_SS; // Single
- int8u GR; // Locked
-
- Ztring Line;
-
- stream()
- {
- DMF_reception=(int8u)-1;
- Format=(int8u)-1;
-
- // Table 8-2 Initial status
- G[0]=GS_Kanji;
- G[1]=GS_Alphanumeric;
- G[2]=GS_Hiragana;
- G[3]=GS_DRCS|GS_Macro;
- G_Width[0]=2;
- G_Width[1]=1;
- G_Width[2]=1;
- G_Width[3]=1;
- GL=0;
- GL_SS=0;
- GR=2;
- }
- };
- typedef std::vector<stream> streams;
- streams Streams;
-
- //Temp
- void JIS (int8u Row, int8u Column);
-
- //Config
- int8u Caption_conversion_type;
-
- //Ancillary
- #if defined(MEDIAINFO_MPEGTS_YES)
- File__Analyze* Parser;
- #endif
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cdp.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cdp.cpp
deleted file mode 100644
index b355d51fa..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cdp.cpp
+++ /dev/null
@@ -1,589 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_CDP_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Cdp.h"
-#if defined(MEDIAINFO_EIA608_YES)
- #include "MediaInfo/Text/File_Eia608.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-using namespace std;
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Cdp_cc_type(int8u cc_type)
-{
- switch (cc_type)
- {
- case 0 : return "CEA-608 line 21 field 1 closed captions"; //closed caption 3 if this is second field
- case 1 : return "CEA-608 line 21 field 2 closed captions"; //closed caption 4 if this is second field
- case 2 : return "DTVCC Channel Packet Data";
- case 3 : return "DTVCC Channel Packet Start";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-float32 Cdp_cdp_frame_rate(int8u cdp_frame_rate)
-{
- switch (cdp_frame_rate)
- {
- case 1 : return (float32)23.976;
- case 2 : return (float32)24.000;
- case 3 : return (float32)25.000;
- case 4 : return (float32)29.970;
- case 5 : return (float32)30.000;
- case 6 : return (float32)50.000;
- case 7 : return (float32)59.940;
- case 8 : return (float32)60.000;
- default : return (float32) 0.000;
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Cdp::File_Cdp()
-:File__Analyze()
-{
- //Config
- PTS_DTS_Needed=true;
-
- //In
- AspectRatio=0;
-
- //Temp
- ParserName=__T("CDP");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Cdp;
- StreamIDs_Width[0]=1;
- #endif //MEDIAINFO_EVENTS
- Streams.resize(3); //CEA-608 Field 1, CEA-608 Field 2, CEA-708 Channel
- Streams_Count=0;
-
- //In
- WithAppleHeader=false;
- AspectRatio=0;
-
- //Temp
- cdp_frame_rate=(int8u)-1;
-
- //Descriptors
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- ServiceDescriptors=new File__Analyze::servicedescriptors;
- #endif
-
- //cdp_length
- cdp_length_Min=(int8u)-1;
- cdp_length_Max=0;
-}
-
-//---------------------------------------------------------------------------
-File_Cdp::~File_Cdp()
-{
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- delete Streams[Pos]; //Streams[Pos]=NULL
-
- //EIA-708 descriptors
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- delete ServiceDescriptors;
- #endif
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Cdp::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, WithAppleHeader?"Final Cut CDP":"CDP");
-}
-
-//---------------------------------------------------------------------------
-void File_Cdp::Streams_Update()
-{
- Clear(Stream_Text);
-
- //Per stream
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] && Streams[Pos]->Parser && Streams[Pos]->Parser->Status[IsFilled] /*&& Streams[Pos]->Parser->Status[IsUpdated]*/ && Streams[Pos]->Parser->Count_Get(Stream_Text))
- Streams_Update_PerStream(Pos);
-}
-
-//---------------------------------------------------------------------------
-void File_Cdp::Streams_Update_PerStream(size_t Pos)
-{
- if (Streams[Pos]==NULL)
- return;
-
- Update(Streams[Pos]->Parser);
-
- if (Streams[Pos]->Parser)
- {
- for (size_t Pos2=0; Pos2<Streams[Pos]->Parser->Count_Get(Stream_Text); Pos2++)
- {
- Stream_Prepare(Stream_Text);
- Merge(*Streams[Pos]->Parser, Stream_Text, Pos2, StreamPos_Last);
- if (WithAppleHeader)
- Fill(Stream_Text, StreamPos_Last, "MuxingMode", "Final Cut");
- Fill(Stream_Text, StreamPos_Last, "MuxingMode", "CDP");
- if (cdp_frame_rate!=(int8u)-1)
- Fill(Stream_Text, StreamPos_Last, Text_FrameRate, Cdp_cdp_frame_rate(cdp_frame_rate));
- Fill(Stream_Text, StreamPos_Last, Text_ID, Streams[Pos]->Parser->Retrieve(Stream_Text, Pos2, Text_ID), true);
-
- //cdp_length
- if (cdp_length_Min<=cdp_length_Max)
- {
- Fill(Stream_Text, StreamPos_Last, "cdp_length_Min", cdp_length_Min, 10, true);
- Fill(Stream_Text, StreamPos_Last, "cdp_length_Max", cdp_length_Max, 10, true);
- (*Stream_More)[Stream_Text][StreamPos_Last](Ztring().From_Local("cdp_length_Min"), Info_Options)=__T("N NT");
- (*Stream_More)[Stream_Text][StreamPos_Last](Ztring().From_Local("cdp_length_Max"), Info_Options)=__T("N NT");
- }
- }
-
- Ztring LawRating=Streams[Pos]->Parser->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Streams[Pos]->Parser->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Cdp::Streams_Finish()
-{
- Clear(Stream_Text);
-
- //Per stream
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] && Streams[Pos]->Parser && Streams[Pos]->Parser->Status[IsAccepted] /*&& Streams[Pos]->Parser->Status[IsUpdated]*/)
- {
- Finish(Streams[Pos]->Parser);
- Streams_Update_PerStream(Pos);
- }
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Cdp::Read_Buffer_Unsynched()
-{
- //Parsing
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] && Streams[Pos]->Parser)
- Streams[Pos]->Parser->Open_Buffer_Unsynch();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Cdp::Read_Buffer_Continue()
-{
- if (Buffer_Size==0)
- return;
-
- if (WithAppleHeader)
- {
- int32u Size, Magic;
- Get_B4 (Size, "Size");
- Get_B4 (Magic, "Magic");
-
- FILLING_BEGIN();
- if (Magic!=0x63636470)
- {
- Reject("CDP");
- return;
- }
- FILLING_END();
- }
-
- //CRC
- int8u CRC=0;
- for (size_t Pos=WithAppleHeader?8:0; Pos<Buffer_Size; Pos++)
- CRC+=Buffer[Pos];
- if (CRC)
- {
- Skip_XX(Element_Size-Element_Offset, "Invalid data (CRC fails)");
- return;
- }
-
- cdp_header();
- while(Element_Offset<Element_Size)
- {
- int8u section_id;
- Peek_L1(section_id);
- switch (section_id)
- {
- case 0x71 : time_code_section(); break;
- case 0x72 : ccdata_section(); break;
- case 0x73 : ccsvcinfo_section(); break;
- case 0x74 : cdp_footer(); break;
- case 0xFF : Skip_B1("Padding?"); break;
- default : if (section_id>=0x75 && section_id<=0xEF)
- future_section();
- else
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
- }
-}
-
-//***************************************************************************
-// Functions
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Cdp::cdp_header()
-{
- Element_Begin1("cdp_header");
- int16u cdp_identifier;
- int8u cdp_length;
- Get_B2 ( cdp_identifier, "cdp_identifier");
- Get_B1 ( cdp_length, "cdp_length");
- BS_Begin();
- Get_S1 (4, cdp_frame_rate, "cdp_frame_rate"); Param_Info1(Ztring::ToZtring(Cdp_cdp_frame_rate(cdp_frame_rate))+__T(" fps"));
- Skip_S1(4, "Reserved");
- Skip_SB( "time_code_present");
- Skip_SB( "ccdata_present");
- Skip_SB( "svcinfo_present");
- Skip_SB( "svc_info_start");
- Skip_SB( "svc_info_change");
- Skip_SB( "svc_info_complete");
- Skip_SB( "caption_service_active");
- Skip_SB( "Reserved");
- BS_End();
- Skip_B2( "cdp_hdr_sequence_cntr");
- Element_End0();
-
- FILLING_BEGIN();
- if (!Status[IsAccepted])
- {
- if (cdp_identifier!=0x9669)
- {
- Reject("CDP");
- return;
- }
-
- Accept("CDP");
- }
-
- //cdp_length
- if (cdp_length>cdp_length_Max)
- cdp_length_Max=cdp_length;
- if (cdp_length<cdp_length_Min)
- cdp_length_Min=cdp_length;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Cdp::time_code_section()
-{
- Element_Begin1("time_code_section");
- Skip_B1( "time_code_section_id");
- BS_Begin();
- Mark_1();
- Mark_1();
- Skip_S1(2, "tc_10hrs");
- Skip_S1(4, "tc_1hrs");
- Mark_1();
- Skip_S1(3, "tc_10min");
- Skip_S1(4, "tc_1min");
- Skip_SB( "tc_field_flag");
- Skip_S1(3, "tc_10sec");
- Skip_S1(4, "tc_1sec");
- Skip_SB( "drop_frame_flag");
- Mark_0();
- Skip_S1(2, "tc_10fr");
- Skip_S1(4, "tc_1fr");
- BS_End();
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Cdp::ccdata_section()
-{
- //Parsing
- int8u cc_count;
- Element_Begin1("ccdata_section");
- Skip_B1( "ccdata_id");
- BS_Begin();
- Mark_1();
- Mark_1();
- Mark_1();
- Get_S1 (5, cc_count, "cc_count");
- BS_End();
- for (int8u Pos=0; Pos<cc_count; Pos++)
- {
- Element_Begin1("cc");
- int8u cc_type;
- bool cc_valid;
- BS_Begin();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Get_SB ( cc_valid, "cc_valid");
- Get_S1 (2, cc_type, "cc_type"); Param_Info1(Cdp_cc_type(cc_type));
- BS_End();
- if (cc_valid)
- {
- Element_Begin1("cc_data");
- //Calculating the parser position
- int8u Parser_Pos=cc_type==3?2:cc_type; //cc_type 2 and 3 are for the same text
-
- //Stream creation
- if (Streams[Parser_Pos]==NULL)
- CreateStream(Parser_Pos);
-
- //Parsing
- #if MEDIAINFO_DEMUX
- Element_Code=Parser_Pos;
- Demux(Buffer+(size_t)(Buffer_Offset+Element_Offset), 2, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
- if (!Streams[Parser_Pos]->Parser->Status[IsFinished])
- {
- if (Streams[Parser_Pos]->Parser->PTS_DTS_Needed)
- {
- Streams[Parser_Pos]->Parser->FrameInfo.PCR=FrameInfo.PCR;
- Streams[Parser_Pos]->Parser->FrameInfo.PTS=FrameInfo.PTS;
- Streams[Parser_Pos]->Parser->FrameInfo.DTS=FrameInfo.DTS;
- }
- if (Parser_Pos==2)
- {
- #if defined(MEDIAINFO_EIA708_YES)
- ((File_Eia708*)Streams[2]->Parser)->cc_type=cc_type;
- if (AspectRatio)
- ((File_Eia708*)Streams[2]->Parser)->AspectRatio=AspectRatio;
- #endif //defined(MEDIAINFO_EIA708_YES)
- }
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- Streams[Parser_Pos]->Parser->ServiceDescriptors=ServiceDescriptors;
- #endif
- Open_Buffer_Continue(Streams[Parser_Pos]->Parser, Buffer+(size_t)(Buffer_Offset+Element_Offset), 2);
- Element_Offset+=2;
-
- //Filled
- if (!Streams[Parser_Pos]->IsFilled && Streams[Parser_Pos]->Parser->Status[IsFilled])
- {
- if (Count_Get(Stream_General)==0)
- Accept("CDP");
- Streams_Count++;
- if (Streams_Count==3)
- Fill("CDP");
- Streams[Parser_Pos]->IsFilled=true;
- }
- }
- else
- Skip_XX(2, "Data");
- Element_End0();
- }
- else
- Skip_XX(2, "Junk");
- Element_End0();
- }
- Element_End0();
-
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
-}
-
-//---------------------------------------------------------------------------
-void File_Cdp::ccsvcinfo_section()
-{
- //Parsing
- int8u svc_count;
- Element_Begin1("ccsvcinfo_section");
- Skip_B1( "ccsvcinfo_id");
- BS_Begin();
- Skip_SB( "reserved");
- Skip_SB( "svc_info_start");
- Skip_SB( "svc_info_change");
- Skip_SB( "svc_info_complete");
- Get_S1 (4, svc_count, "svc_count");
- BS_End();
- for (int8u Pos=0; Pos<svc_count; Pos++)
- {
- Element_Begin1("svc");
- bool csn_size;
- BS_Begin();
- Skip_SB( "reserved");
- Get_SB ( csn_size, "csn_size");
- if (csn_size)
- {
- Skip_SB( "reserved");
- Skip_S1(5, "caption_service_number");
- }
- else
- Skip_S1(6, "caption_service_number");
- BS_End();
-
- //svc_data_byte - caption_service_descriptor
- Element_Begin1("service");
- string language;
- int8u caption_service_number=0;
- bool digital_cc, line21_field=false;
- Get_String(3, language, "language");
- BS_Begin();
- Get_SB (digital_cc, "digital_cc");
- Skip_SB( "reserved");
- if (digital_cc) //line21
- Get_S1 (6, caption_service_number, "caption_service_number");
- else
- {
- Skip_S1(5, "reserved");
- Get_SB ( line21_field, "line21_field");
-
- //Coherency test
- if (line21_field && svc_count==1)
- line21_field=false; // Wrong info in the descriptor?
- }
- Skip_SB( "easy_reader");
- Skip_SB( "wide_aspect_ratio");
- Skip_S2(14, "reserved");
- BS_End();
- Element_End0();
- Element_End0();
-
- FILLING_BEGIN();
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- if (digital_cc)
- {
- #if defined(MEDIAINFO_EIA708_YES)
- ServiceDescriptors->ServiceDescriptors708[caption_service_number].language=language;
- #endif
- }
- else
- {
- #if defined(MEDIAINFO_EIA708_YES)
- ServiceDescriptors->ServiceDescriptors608[line21_field?1:0].language=language;
- #endif
- }
- #endif
-
- //Stream creation
- int8u Parser_Pos;
- if (digital_cc) //line21
- Parser_Pos = 2;
- else
- Parser_Pos= (line21_field ? 1 : 0); //cc_type 2 and 3 are for the same text
- if (Streams[Parser_Pos]==NULL)
- CreateStream(Parser_Pos);
- FILLING_END();
- }
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Cdp::cdp_footer()
-{
- Element_Begin1("cdp_footer");
- Skip_B1( "cdp_footer_id");
- Skip_B2( "cdp_ftr_sequence_cntr");
- Skip_B1( "packet_checksum");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Cdp::future_section()
-{
- //Parsing
- int8u length;
- Element_Begin1("future_section");
- Skip_B1( "future_section_id");
- Get_B1 (length, "length");
- Skip_XX(length, "Unknown");
- Element_End0();
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Cdp::CreateStream(int8u Parser_Pos)
-{
- if (Streams[Parser_Pos])
- return; //Already done
-
- //Parsing
- #if MEDIAINFO_DEMUX
- Element_Code=Parser_Pos;
- #endif //MEDIAINFO_DEMUX
-
- //Creation of the parser
- Streams[Parser_Pos]=new stream;
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- if (Parser_Pos<2)
- {
- #if defined(MEDIAINFO_EIA608_YES)
- Streams[Parser_Pos]->Parser=new File_Eia608();
- ((File_Eia608*)Streams[Parser_Pos]->Parser)->cc_type=Parser_Pos;
- #else //defined(MEDIAINFO_EIA608_YES)
- Streams[Parser_Pos]->Parser=new File__Analyze();
- #endif //defined(MEDIAINFO_EIA608_YES)
- }
- else
- {
- #if defined(MEDIAINFO_EIA708_YES)
- Streams[Parser_Pos]->Parser=new File_Eia708();
- #else //defined(MEDIAINFO_EIA708_YES)
- Streams[Parser_Pos]->Parser=new File__Analyze();
- #endif //defined(MEDIAINFO_EIA708_YES)
- }
- #else //defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- Streams[Parser_Pos]->Parser=new File__Analyze();
- #endif //defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
-
- //Init
- Streams[Parser_Pos]->Parser->ServiceDescriptors=ServiceDescriptors;
- Open_Buffer_Init(Streams[Parser_Pos]->Parser);
- Streams[Parser_Pos]->Parser->Accept();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_CDP_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cdp.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cdp.h
deleted file mode 100644
index a7f04ff1f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cdp.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Caption Distribution Packet files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_CdpH
-#define MediaInfo_File_CdpH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#if defined(MEDIAINFO_EIA608_YES)
- #include "MediaInfo/Text/File_Eia608.h"
-#endif
-#if defined(MEDIAINFO_EIA708_YES)
- #include "MediaInfo/Text/File_Eia708.h"
-#endif
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Cdp
-//***************************************************************************
-
-class File_Cdp : public File__Analyze
-{
-public :
- //In
- bool WithAppleHeader;
- float64 AspectRatio;
-
- //Constructor/Destructor
- File_Cdp();
- ~File_Cdp();
-
-private :
- //Streams management
- void Streams_Accept();
- void Streams_Update();
- void Streams_Update_PerStream(size_t Pos);
- void Streams_Finish();
-
- //Synchro
- void Read_Buffer_Unsynched();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-
- //Elements
- void cdp_header();
- void time_code_section();
- void ccdata_section();
- void ccsvcinfo_section();
- void cdp_footer();
- void future_section();
-
- //Stream
- struct stream
- {
- File__Analyze* Parser;
- size_t StreamPos;
- bool IsFilled;
-
- stream()
- {
- Parser=NULL;
- StreamPos=(size_t)-1;
- IsFilled=false;
- }
-
- ~stream()
- {
- delete Parser; //Parser=NULL;
- }
- };
- std::vector<stream*> Streams;
- size_t Streams_Count;
-
- //Temp
- int8u cdp_frame_rate;
-
- //Helpers
- void CreateStream(int8u Parser_Pos);
-
- //Tests
- int8u cdp_length_Min;
- int8u cdp_length_Max;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cmml.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cmml.cpp
deleted file mode 100644
index 15a44f6f5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cmml.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Note : the buffer must be given in ONE call
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_CMML_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Cmml.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Cmml::Header_Parse()
-{
- //Filling
- Header_Fill_Code(0, "Cmml");
- Header_Fill_Size(Element_Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Cmml::Data_Parse()
-{
- //Parsing
- if (Status[IsAccepted])
- Configuration();
- else
- Identification();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Cmml::Identification()
-{
- Element_Name("Identification");
-
- //Parsing
- int16u VersionMajor, VersionMinor;
- Skip_Local(8, "Signature");
- Get_L2 (VersionMajor, "version major");
- Get_L2 (VersionMinor, "version minor");
- Skip_L8( "granule rate numerator");
- Skip_L8( "granule rate denominator");
- Skip_L1( "granule shift");
-
- FILLING_BEGIN();
- Accept("CMML");
-
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Format, "CMML");
- Fill(Stream_Text, 0, Text_Codec, "CMML");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Cmml::Configuration()
-{
- Element_Name("Configuration");
-
- //Parsing
- Ztring Data;
- Get_UTF8(Element_Size, Data, "Data");
-
- FILLING_BEGIN();
- Ztring Value;
- Value=Data.SubString(__T("<head>"), __T("</head>"));
- if (!Value.empty())
- Fill(Stream_Text, 0, Text_Title, Value.SubString(__T("<title>"), __T("</title>")));
- if (Data.find(__T("<clip"))!=string::npos)
- Finish("CMML");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_CMML_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cmml.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cmml.h
deleted file mode 100644
index b20f0b592..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Cmml.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Cmml files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_CmmlH
-#define MediaInfo_File_CmmlH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Cmml
-//***************************************************************************
-
-class File_Cmml : public File__Analyze
-{
-private :
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Identification();
- void Configuration();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_DtvccTransport.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_DtvccTransport.cpp
deleted file mode 100644
index 6412809b8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_DtvccTransport.cpp
+++ /dev/null
@@ -1,375 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_DtvccTransport.h"
-#if defined(MEDIAINFO_EIA608_YES)
- #include "MediaInfo/Text/File_Eia608.h"
-#endif
-#if defined(MEDIAINFO_EIA708_YES)
- #include "MediaInfo/Text/File_Eia708.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* DtvccTransport_cc_type (int8u cc_type)
-{
- switch (cc_type)
- {
- case 0 : return "CEA-608 line 21 field 1 closed captions"; //closed caption 3 if this is second field
- case 1 : return "CEA-608 line 21 field 2 closed captions"; //closed caption 4 if this is second field
- case 2 : return "DTVCC Channel Packet Data";
- case 3 : return "DTVCC Channel Packet Start";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_DtvccTransport::File_DtvccTransport()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("DTVCC Transport");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_DtvccTransport;
- StreamIDs_Width[0]=1;
- #endif //MEDIAINFO_EVENTS
- PTS_DTS_Needed=true;
-
- //In
- Format=Format_Unknown;
- AspectRatio=0;
-
- //Temp
- Streams.resize(3); //CEA-608 Field 1, CEA-608 Field 2, CEA-708 Channel
-}
-
-//---------------------------------------------------------------------------
-File_DtvccTransport::~File_DtvccTransport()
-{
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- delete Streams[Pos]; //Streams[Pos]=NULL
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DtvccTransport::Streams_Update()
-{
- Clear(Stream_Text);
-
- //Per stream
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] && Streams[Pos]->Parser && Streams[Pos]->Parser->Status[IsFilled] /*&& Streams[Pos]->Parser->Status[IsUpdated]*/ && Streams[Pos]->Parser->Count_Get(Stream_Text))
- Streams_Update_PerStream(Pos);
-}
-
-//---------------------------------------------------------------------------
-void File_DtvccTransport::Streams_Update_PerStream(size_t Pos)
-{
- if (Streams[Pos]==NULL)
- return;
-
- Update(Streams[Pos]->Parser);
-
- if (Streams[Pos]->Parser)
- {
- for (size_t Pos2=0; Pos2<Streams[Pos]->Parser->Count_Get(Stream_Text); Pos2++)
- {
- Stream_Prepare(Stream_Text);
- Merge(*Streams[Pos]->Parser, Stream_Text, Pos2, StreamPos_Last);
- Fill(Stream_Text, StreamPos_Last, "MuxingMode", Format==Format_DVD?__T("DVD-Video"):__T("DTVCC Transport"));
- Fill(Stream_Text, StreamPos_Last, Text_ID, Streams[Pos]->Parser->Retrieve(Stream_Text, Pos2, Text_ID), true);
- }
-
- Ztring LawRating=Streams[Pos]->Parser->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Streams[Pos]->Parser->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_DtvccTransport::Streams_Finish()
-{
- Clear(Stream_Text);
-
- if (ServiceDescriptors)
- {
- if (ServiceDescriptors->ServiceDescriptors608.find(0)!=ServiceDescriptors->ServiceDescriptors608.end())
- CreateStream(0);
- if (ServiceDescriptors->ServiceDescriptors608.find(1)!=ServiceDescriptors->ServiceDescriptors608.end())
- CreateStream(1);
- if (!ServiceDescriptors->ServiceDescriptors708.empty())
- CreateStream(2);
- }
-
- //Per stream
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] && Streams[Pos]->Parser && Streams[Pos]->Parser->Status[IsAccepted] /*&& Streams[Pos]->Parser->Status[IsUpdated]*/)
- {
- Finish(Streams[Pos]->Parser);
- Streams_Update_PerStream(Pos);
- }
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DtvccTransport::Read_Buffer_Unsynched()
-{
- //Parsing
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] && Streams[Pos]->Parser)
- Streams[Pos]->Parser->Open_Buffer_Unsynch();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DtvccTransport::Read_Buffer_Continue()
-{
- //Parsing
- Element_Begin1(Format==Format_DVD?"DVD Captions":"DTVCC Transport");
- int8u cc_count;
- bool process_cc_data_flag, additional_data_flag;
- BS_Begin();
- if (Format==Format_DVD)
- {
- //Modified DTVCC Transport from DVD
- Skip_SB( "field 1 then field 2");
- Get_S1 (7, cc_count, "cc_count");
- process_cc_data_flag=true;
- additional_data_flag=false;
- }
- else
- {
- //Normal DTVCC Transport
- bool process_em_data_flag;
- Get_SB (process_em_data_flag, "process_em_data_flag");
- Get_SB (process_cc_data_flag, "process_cc_data_flag");
- Get_SB (additional_data_flag, "additional_data_flag");
- Get_S1 (5, cc_count, "cc_count");
- Skip_S1(8, process_em_data_flag?"em_data":"reserved"); //Emergency message
- }
- BS_End();
- if (process_cc_data_flag)
- {
- for (int8u Pos=0; Pos<cc_count; Pos++)
- {
- if (Element_Offset+3>Element_Size)
- break; //Found one stream with bad cc_count, we discard cc_count without flagging the stream as untrusted for the moment
-
- Element_Begin1("cc");
- int8u cc_type;
- bool cc_valid;
- BS_Begin();
- Mark_1();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- if (Format==Format_DVD)
- {
- //Modified DTVCC Transport from DVD
- Mark_1();
- Mark_1();
- Get_S1 (1, cc_type, "cc_type"); Param_Info1(DtvccTransport_cc_type(cc_type));
- cc_valid=true;
- }
- else
- {
- //Normal DTVCC Transport
- Get_SB ( cc_valid, "cc_valid");
- Get_S1 (2, cc_type, "cc_type"); Param_Info1(DtvccTransport_cc_type(cc_type));
- }
- BS_End();
- if (cc_valid)
- {
- Element_Begin1("cc_data");
- //Calculating the parser position
- int8u Parser_Pos=cc_type==3?2:cc_type; //cc_type 2 and 3 are for the same text
-
- //Stream creation
- if (Streams[Parser_Pos]==NULL)
- CreateStream(Parser_Pos);
-
- //Parsing
- #if MEDIAINFO_DEMUX
- Element_Code=Parser_Pos;
- Demux(Buffer+(size_t)(Buffer_Offset+Element_Offset), 2, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
- if (!Streams[Parser_Pos]->Parser->Status[IsFinished])
- {
- //Parsing
- if (Streams[Parser_Pos]->Parser->PTS_DTS_Needed)
- {
- Streams[Parser_Pos]->Parser->FrameInfo.PCR=FrameInfo.PCR;
- Streams[Parser_Pos]->Parser->FrameInfo.PTS=FrameInfo.PTS;
- Streams[Parser_Pos]->Parser->FrameInfo.DTS=FrameInfo.DTS;
- }
- if (Parser_Pos==2)
- {
- #if defined(MEDIAINFO_EIA708_YES)
- ((File_Eia708*)Streams[2]->Parser)->cc_type=cc_type;
- if (AspectRatio)
- ((File_Eia708*)Streams[2]->Parser)->AspectRatio=AspectRatio;
- #endif
- if (cc_type==3)
- {
- ((File_Eia708*)Streams[2]->Parser)->cc_type=4; //Magic value saying that the buffer must be kept (this is only a point of synchro from the undelying layer)
- Open_Buffer_Continue(Streams[Parser_Pos]->Parser, Buffer+(size_t)(Buffer_Offset+Element_Offset), 0);
- ((File_Eia708*)Streams[2]->Parser)->cc_type=3;
- }
- }
- else
- {
- }
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- Streams[Parser_Pos]->Parser->ServiceDescriptors=ServiceDescriptors;
- #endif
- Open_Buffer_Continue(Streams[Parser_Pos]->Parser, Buffer+(size_t)(Buffer_Offset+Element_Offset), 2);
- Element_Show();
- Element_Offset+=2;
- }
- else
- Skip_XX(2, "Data");
- Element_End0();
- }
- else
- Skip_XX(2, "Junk");
- Element_End0();
- }
-
- FILLING_BEGIN();
- if (!Status[IsAccepted])
- Accept("DTVCC Transport");
- FILLING_END();
- }
- else
- Skip_XX(cc_count*2, "Junk");
-
- if (Format==Format_A53_4_GA94_03)
- {
- //Normal DTVCC Transport
- BS_Begin();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- BS_End();
-
- if (additional_data_flag)
- {
- Skip_XX(Element_Size-Element_Offset, "additional_user_data");
- }
-
- while (Element_Offset<Element_Size)
- {
- Skip_B1( "Zero"); //TODO: test Zero
- }
- }
-
- Element_End0();
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DtvccTransport::CreateStream(int8u Parser_Pos)
-{
- if (Streams[Parser_Pos])
- return; //Already done
-
- //Parsing
- #if MEDIAINFO_DEMUX
- Element_Code=Parser_Pos;
- #endif //MEDIAINFO_DEMUX
-
- //Creation of the parser
- Streams[Parser_Pos]=new stream;
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- if (Parser_Pos<2)
- {
- #if defined(MEDIAINFO_EIA608_YES)
- Streams[Parser_Pos]->Parser=new File_Eia608();
- ((File_Eia608*)Streams[Parser_Pos]->Parser)->cc_type=Parser_Pos;
- #else //defined(MEDIAINFO_EIA608_YES)
- Streams[Parser_Pos]->Parser=new File__Analyze();
- #endif //defined(MEDIAINFO_EIA608_YES)
- }
- else
- {
- #if defined(MEDIAINFO_EIA708_YES)
- Streams[Parser_Pos]->Parser=new File_Eia708();
- #else //defined(MEDIAINFO_EIA708_YES)
- Streams[Parser_Pos]->Parser=new File__Analyze();
- #endif //defined(MEDIAINFO_EIA708_YES)
- }
- #else //defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- Streams[Parser_Pos]->Parser=new File__Analyze();
- #endif //defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
-
- //Init
- Streams[Parser_Pos]->Parser->ServiceDescriptors=ServiceDescriptors;
- Open_Buffer_Init(Streams[Parser_Pos]->Parser);
- Streams[Parser_Pos]->Parser->Accept();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_DTVCCTRANSPORT_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_DtvccTransport.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_DtvccTransport.h
deleted file mode 100644
index 200cb450a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_DtvccTransport.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Bar Data files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_DtvccTransportH
-#define MediaInfo_DtvccTransportH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_DtvccTransport
-//***************************************************************************
-
-class File_DtvccTransport : public File__Analyze
-{
-public :
- //In
- enum format
- {
- Format_Unknown,
- Format_A53_4_GA94_03, //MPEG_cc_data
- Format_DVD, //Unknown standard
- };
- format Format;
- float64 AspectRatio;
-
- //Constructor/Destructor
- File_DtvccTransport();
- ~File_DtvccTransport();
-
-private :
- //Streams management
- void Streams_Update();
- void Streams_Update_PerStream(size_t Pos);
- void Streams_Finish();
-
- //Synchro
- void Read_Buffer_Unsynched();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-
- //Temp
- struct stream
- {
- File__Analyze* Parser;
-
- stream()
- {
- Parser=NULL;
- }
-
- ~stream()
- {
- delete Parser; //Parser=NULL;
- }
- };
- std::vector<stream*> Streams;
-
- //Helpers
- void CreateStream(int8u Parser_Pos);
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_DvbSubtitle.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_DvbSubtitle.cpp
deleted file mode 100644
index 4d17c99c8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_DvbSubtitle.cpp
+++ /dev/null
@@ -1,468 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DVBSUBTITLE_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_DvbSubtitle.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-const int8u DvbSubtitle_region_depth[8]=
-{
- 0,
- 2,
- 4,
- 8,
- 0,
- 0,
- 0,
- 0,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_DvbSubtitle::File_DvbSubtitle()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("DVB Subtitle");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_DvbSubtitle;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- PTS_DTS_Needed=true;
- IsRawStream=true;
- MustSynchronize=true;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.3?32:2;
-
- //Temp
- MustFindDvbHeader=true;
-}
-
-//---------------------------------------------------------------------------
-File_DvbSubtitle::~File_DvbSubtitle()
-{
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::Streams_Fill()
-{
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Format, "DVB Subtitle");
-
- for (std::map<int8u, subtitle_stream_data>::iterator subtitle_stream=subtitle_streams.begin(); subtitle_stream!=subtitle_streams.end(); ++subtitle_stream)
- for (std::map<int16u, page_data>::iterator page=subtitle_stream->second.pages.begin(); page!=subtitle_stream->second.pages.end(); ++page)
- for (std::map<int8u, region_data>::iterator region=page->second.regions.begin(); region!=page->second.regions.end(); ++region)
- {
- Fill(Stream_Text, 0, "subtitle_stream_id", subtitle_stream->first);
- (*Stream_More)[Stream_Text][0](Ztring().From_Local("subtitle_stream_id"), Info_Options)=__T("N NI");
- Fill(Stream_Text, 0, "page_id", page->first);
- (*Stream_More)[Stream_Text][0](Ztring().From_Local("page_id"), Info_Options)=__T("N NI");
- Fill(Stream_Text, 0, "region_id", region->first);
- (*Stream_More)[Stream_Text][0](Ztring().From_Local("region_id"), Info_Options)=__T("N NI");
- Fill(Stream_Text, 0, "region_horizontal_address", region->second.page_composition_segment?Ztring::ToZtring(region->second.region_horizontal_address):Ztring());
- (*Stream_More)[Stream_Text][0](Ztring().From_Local("region_horizontal_address"), Info_Options)=__T("N NI");
- Fill(Stream_Text, 0, "region_vertical_address", region->second.page_composition_segment?Ztring::ToZtring(region->second.region_vertical_address):Ztring());
- (*Stream_More)[Stream_Text][0](Ztring().From_Local("region_vertical_address"), Info_Options)=__T("N NI");
- Fill(Stream_Text, 0, "region_width", region->second.region_composition_segment?Ztring::ToZtring(region->second.region_width):Ztring());
- (*Stream_More)[Stream_Text][0](Ztring().From_Local("region_width"), Info_Options)=__T("N NI");
- Fill(Stream_Text, 0, "region_height", region->second.region_composition_segment?Ztring::ToZtring(region->second.region_height):Ztring());
- (*Stream_More)[Stream_Text][0](Ztring().From_Local("region_height"), Info_Options)=__T("N NI");
- Fill(Stream_Text, 0, "region_depth", region->second.region_composition_segment?Ztring::ToZtring(DvbSubtitle_region_depth[region->second.region_depth]):Ztring());
- (*Stream_More)[Stream_Text][0](Ztring().From_Local("region_depth"), Info_Options)=__T("N NI");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::Streams_Finish()
-{
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_DvbSubtitle::Synchronize()
-{
- //Synchronizing
- if (MustFindDvbHeader)
- {
- while(Buffer_Offset+3<=Buffer_Size)
- {
- if (Buffer[Buffer_Offset]==0x20
- && Buffer[Buffer_Offset+1]==0x00
- && (Buffer[Buffer_Offset+2]==0x0F
- || Buffer[Buffer_Offset+1]==0xFF))
- break;
- Buffer_Offset++;
- }
-
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- Accept();
- }
- else
- {
- while(Buffer_Offset<Buffer_Size)
- {
- if (Buffer[Buffer_Offset]==0x0F
- || Buffer[Buffer_Offset]==0xFF)
- break;
- Buffer_Offset++;
- }
-
- if (Buffer_Offset>=Buffer_Size)
- return false;
- }
-
- //Synched is OK
- Synched=true;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_DvbSubtitle::Synched_Test()
-{
- if (MustFindDvbHeader)
- {
- //Must have enough buffer for having header
- if (Buffer_Offset+1>Buffer_Size)
- return false;
-
- if (CC2(Buffer+Buffer_Offset)!=0x2000)
- {
- Synched=false;
- return true;
- }
-
- //Displaying it
- Element_Size=2;
- Skip_B1( "data_identifier");
- Get_B1 (subtitle_stream_id, "subtitle_stream_id");
- Buffer_Offset+=2;
- MustFindDvbHeader=false;
- }
-
- //Must have enough buffer for having header
- if (Buffer_Offset+1>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset]!=0x0F
- && Buffer[Buffer_Offset]!=0xFF)
- {
- Synched=false;
- return true;
- }
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::Read_Buffer_Unsynched()
-{
- MustParseTheHeaderFile=true;
- Synched=false;
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_DvbSubtitle::Demux_UnpacketizeContainer_Test()
-{
- if (Demux_Offset==0)
- {
- Demux_Offset=Buffer_Offset;
- }
- while (Demux_Offset<Buffer_Size)
- {
- bool MustBreak;
- switch (Buffer[Demux_Offset])
- {
- case 0xFF :
- MustBreak=true; break; //0xFF is not in the demuxed frame
- default : MustBreak=false;
- }
- if (MustBreak)
- break; //while() loop
-
- if (Demux_Offset+6>Buffer_Size)
- return false; //No complete frame
-
- int16u segment_length=BigEndian2int16u(Buffer+Demux_Offset+4);
- Demux_Offset+=6+segment_length;
-
- if (Demux_Offset>=Buffer_Size)
- return false; //No complete frame
- }
-
- if (Demux_Offset>=Buffer_Size)
- return false; //No complete frame
-
- Demux_UnpacketizeContainer_Demux();
-
- Demux_TotalBytes++; //0xFF is not demuxed
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::Header_Parse()
-{
- //Parsing
- int8u sync_byte;
- Get_B1 (sync_byte, "sync_byte");
- switch (sync_byte)
- {
- case 0xFF : //Stuffing
- MustFindDvbHeader=true;
-
- //Filling
- Header_Fill_Code(0xFF, "end of PES data field marker");
- Header_Fill_Size(1);
- return;
- default : ; //Normal (0x0F)
- }
-
- int16u segment_length;
- int8u segment_type;
- Get_B1 (segment_type, "segment_type");
- Get_B2 (page_id, "page_id");
- Get_B2 (segment_length, "segment_length");
-
- //Filling
- Header_Fill_Code(segment_type);
- Header_Fill_Size(Element_Offset+segment_length);
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::Data_Parse()
-{
- switch (Element_Code)
- {
- case 0x10 : page_composition_segment(); break;
- case 0x11 : region_composition_segment(); break;
- case 0x12 : CLUT_definition_segment(); break;
- case 0x13 : object_data_segment(); break;
- case 0x14 : display_definition_segment(); break;
- case 0x80 : end_of_display_set_segment(); break;
- case 0xFF : end_of_PES_data_field_marker(); return;
- default :
- if (Element_Code>=0x40 && Element_Code<=0x7F)
- reserved_for_future_use();
- else if (Element_Code>=0x81 && Element_Code<=0xEF)
- private_data();
- else if (Element_Size)
- Skip_XX(Element_Size, "Unknown");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::page_composition_segment()
-{
- Element_Name("page composition segment");
-
- //Parsing
- Skip_B1( "page_time_out");
- BS_Begin();
- Skip_S1(4, "page_version_number");
- Skip_S1(2, "page_state");
- Skip_S1(2, "reserved");
- BS_End();
- while(Element_Offset<Element_Size)
- {
- Element_Begin1("Region");
- int16u region_horizontal_address, region_vertical_address;
- int8u region_id;
- Get_B1 (region_id, "region_id");
- Skip_B1( "reserved");
- Get_B2 (region_horizontal_address, "region_horizontal_address");
- Get_B2 (region_vertical_address, "region_vertical_address");
- Element_End0();
-
- FILLING_BEGIN();
- subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].page_composition_segment=true;
- subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].region_horizontal_address=region_horizontal_address;
- subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].region_vertical_address=region_vertical_address;
- FILLING_END();
- }
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::region_composition_segment()
-{
- Element_Name("region composition segment");
-
- //Parsing
- int16u region_width, region_height;
- int8u region_id, region_depth;
- Get_B1 ( region_id, "region_id");
- BS_Begin();
- Skip_S1(4, "region_version_number");
- Skip_S1(1, "region_fill_flag");
- Skip_S1(3, "reserved");
- BS_End();
- Get_B2 ( region_width, "region_width");
- Get_B2 ( region_height, "region_height");
- BS_Begin();
- Skip_S1(3, "region_level_of_compatibility");
- Get_S1 (3, region_depth, "region_depth"); Param_Info2(DvbSubtitle_region_depth[region_depth], " bits");
- Skip_S1(2, "reserved");
- BS_End();
- Skip_B1( "CLUT_id");
- Skip_B1( "region_8-bit_pixel_code");
- BS_Begin();
- Skip_S1(4, "region_4-bit_pixel-code");
- Skip_S1(2, "region_2-bit_pixel-code");
- Skip_S1(2, "reserved");
- BS_End();
- while(Element_Offset<Element_Size)
- {
- Element_Begin1("Object");
- int8u object_type;
- Skip_B2( "object_id");
- BS_Begin();
- Get_S1 ( 2, object_type, "object_type");
- Skip_S1( 2, "object_provider_flag");
- Skip_S1(12, "object_horizontal_position");
- Skip_S1( 4, "reserved");
- Skip_S1(12, "object_vertical_position");
- BS_End();
- switch (object_type)
- {
- case 0x01 :
- case 0x02 :
- Skip_B2( "foreground_pixel_code");
- Skip_B2( "background_pixel_code");
- break;
- default : ;
- }
- }
- Element_End0();
-
- FILLING_BEGIN();
- subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].region_composition_segment=true;
- subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].region_width=region_width;
- subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].region_height=region_height;
- subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].region_depth=region_depth;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::CLUT_definition_segment()
-{
- Element_Name("CLUT definition segment");
-
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::object_data_segment()
-{
- Element_Name("object data segment");
-
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::display_definition_segment()
-{
- Element_Name("display definition segment");
-
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::reserved_for_future_use()
-{
- Element_Name("reserved for future use");
-
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::end_of_display_set_segment()
-{
- Element_Name("end of display set segment");
-
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::private_data()
-{
- Element_Name("private data");
-
- Skip_XX(Element_Size, "Data");
-}
-
-//---------------------------------------------------------------------------
-void File_DvbSubtitle::end_of_PES_data_field_marker()
-{
- Frame_Count++;
- if (!Status[IsFilled] && Frame_Count>Frame_Count_Valid)
- {
- Fill();
- Finish();
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_DVBSUBTITLE_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_DvbSubtitle.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_DvbSubtitle.h
deleted file mode 100644
index 15cda5921..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_DvbSubtitle.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about DVB Subtitle streams
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DvbSubtitleH
-#define MediaInfo_File_DvbSubtitleH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_DvbSubtitle
-//***************************************************************************
-
-class File_DvbSubtitle : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
-
- //Constructor/Destructor
- File_DvbSubtitle();
- ~File_DvbSubtitle();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Read_Buffer_Unsynched();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void page_composition_segment();
- void region_composition_segment();
- void CLUT_definition_segment();
- void object_data_segment();
- void display_definition_segment();
- void reserved_for_future_use();
- void end_of_display_set_segment();
- void private_data();
- void end_of_PES_data_field_marker();
-
- //Temp
- bool MustFindDvbHeader;
- int16u page_id;
- int8u subtitle_stream_id;
- struct region_data
- {
- int16u region_horizontal_address;
- int16u region_vertical_address;
-
- int16u region_width;
- int16u region_height;
- int16u region_depth;
-
- bool page_composition_segment;
- bool region_composition_segment;
-
- region_data()
- {
- page_composition_segment=false;
- region_composition_segment=false;
- }
- };
- struct page_data
- {
- std::map<int8u, region_data> regions; //Key is region_id
- };
- struct subtitle_stream_data
- {
- std::map<int16u, page_data> pages; //Key is page_id
- };
- std::map<int8u, subtitle_stream_data> subtitle_streams; //Key is subtitle_stream_id
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia608.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia608.cpp
deleted file mode 100644
index f107766b4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia608.cpp
+++ /dev/null
@@ -1,1102 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_EIA608_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Eia608.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// CAE-608-E section F.1.1.5
-static const int8u Eia608_PAC_Row[]=
-{
- 10,
- 0, //or 1
- 2, //or 3
- 11, //or 12
- 13, //or 14
- 4, //or 5
- 6, //or 7
- 8 //or 9
-};
-
-//***************************************************************************
-//
-//***************************************************************************
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Eia608::File_Eia608()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Eia608;
- StreamIDs_Width[0]=1;
- #endif //MEDIAINFO_EVENTS
- ParserName=__T("EIA-608");
- PTS_DTS_Needed=true;
-
- //In
- cc_type=(int8u)-1;
-
- //Temp
- XDS_Level=(size_t)-1;
- TextMode=false;
- DataChannelMode=false;
- cc_data_1_Old=0x00;
- cc_data_2_Old=0x00;
- HasContent=false;
-}
-
-//---------------------------------------------------------------------------
-File_Eia608::~File_Eia608()
-{
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- delete Streams[Pos];
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Eia608::Streams_Fill()
-{
- if (Config->File_Eia608_DisplayEmptyStream_Get() && Streams.size()<2)
- Streams.resize(2);
-
- if (!HasContent && ServiceDescriptors && ServiceDescriptors->ServiceDescriptors608.find(cc_type)!=ServiceDescriptors->ServiceDescriptors608.end())
- {
- TextMode=0;
- DataChannelMode=0;
- Special_14(0x20); //CC1/CC3 fake RCL - Resume Caption Loading
- }
-
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] || (Pos<2 && Config->File_Eia608_DisplayEmptyStream_Get()))
- {
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_Format, "EIA-608");
- Fill(Stream_Text, StreamPos_Last, Text_StreamSize, 0);
- Fill(Stream_Text, StreamPos_Last, Text_BitRate_Mode, "CBR");
- if (cc_type!=(int8u)-1)
- {
- string ID=Pos<2?"CC":"T";
- ID+='1'+(cc_type*2)+(Pos%2);
- Fill(Stream_Text, StreamPos_Last, Text_ID, ID);
- Fill(Stream_Text, StreamPos_Last, "CaptionServiceName", ID);
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Ztring().From_Local("CaptionServiceName"), Info_Options)=__T("N NT");
- }
- if (Config->ParseSpeed>=1.0)
- {
- Fill(Stream_Text, StreamPos_Last, "CaptionServiceContent_IsPresent", DataDetected[Pos+1]?"Yes":"No", Unlimited, true, true); //1 bit per service, starting at 1
- (*Stream_More)[Stream_Text][StreamPos_Last](Ztring().From_Local("CaptionServiceContent_IsPresent"), Info_Options)=__T("N NT");
- }
- if (ServiceDescriptors)
- {
- servicedescriptors608::iterator ServiceDescriptor=ServiceDescriptors->ServiceDescriptors608.find(cc_type);
- if (ServiceDescriptor!=ServiceDescriptors->ServiceDescriptors608.end())
- {
- if (Pos==0 && Retrieve(Stream_Text, StreamPos_Last, Text_Language).empty()) //Only CC1/CC3
- Fill(Stream_Text, StreamPos_Last, Text_Language, ServiceDescriptor->second.language, true);
- Fill(Stream_Text, StreamPos_Last, "CaptionServiceDescriptor_IsPresent", "Yes", Unlimited, true, true);
- (*Stream_More)[Stream_Text][StreamPos_Last](Ztring().From_Local("CaptionServiceDescriptor_IsPresent"), Info_Options)=__T("N NT");
- }
- else //ServiceDescriptors pointer is for the support by the transport layer of the info
- {
- Fill(Stream_Text, StreamPos_Last, "CaptionServiceDescriptor_IsPresent", "No", Unlimited, true, true);
- (*Stream_More)[Stream_Text][StreamPos_Last](Ztring().From_Local("CaptionServiceDescriptor_IsPresent"), Info_Options)=__T("N NT");
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Streams_Finish()
-{
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Eia608::Read_Buffer_Unsynched()
-{
- for (size_t StreamPos=0; StreamPos<Streams.size(); StreamPos++)
- if (Streams[StreamPos])
- {
- for (size_t Pos_Y=0; Pos_Y<Streams[StreamPos]->CC_Displayed.size(); Pos_Y++)
- {
- for (size_t Pos_X=0; Pos_X<Streams[StreamPos]->CC_Displayed[Pos_Y].size(); Pos_X++)
- if (Streams[StreamPos])
- {
- Streams[StreamPos]->CC_Displayed[Pos_Y][Pos_X].Value=L' ';
- Streams[StreamPos]->CC_Displayed[Pos_Y][Pos_X].Attribute=0;
- if (StreamPos<2)
- {
- Streams[StreamPos]->CC_NonDisplayed[Pos_Y][Pos_X].Value=L' ';
- Streams[StreamPos]->CC_NonDisplayed[Pos_Y][Pos_X].Attribute=0;
- }
- }
- }
- Streams[StreamPos]->Synched=false;
- }
-
- XDS_Data.clear();
- XDS_Level=(size_t)-1;
-
- #if MEDIAINFO_EVENTS
- TextMode=true; DataChannelMode=true;
- HasChanged();
- TextMode=true; DataChannelMode=false;
- HasChanged();
- TextMode=false; DataChannelMode=true;
- HasChanged();
- TextMode=false; DataChannelMode=false;
- HasChanged();
- #endif //MEDIAINFO_EVENTS
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Eia608::Read_Buffer_Init()
-{
- #if MEDIAINFO_DEMUX
- if (Frame_Count_NotParsedIncluded==(int64u)-1)
- Frame_Count_NotParsedIncluded=Config->Demux_FirstFrameNumber_Get();
- if (FrameInfo.DUR==(int64u)-1 && Config->Demux_Rate_Get())
- FrameInfo.DUR=float64_int64s(((float64)1000000000)/Config->Demux_Rate_Get());
- if (FrameInfo.DTS==(int64u)-1)
- FrameInfo.DTS=Config->Demux_FirstDts_Get();
- #endif //MEDIAINFO_DEMUX
- if (FrameInfo.DUR!=(int64u)-1)
- {
- if (FrameInfo.DTS==(int64u)-1)
- FrameInfo.DTS=0;
- if (FrameInfo.PTS==(int64u)-1)
- FrameInfo.PTS=0;
- }
-
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Read_Buffer_AfterParsing()
-{
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (FrameInfo.DUR!=(int64u)-1)
- {
- FrameInfo.DTS+=FrameInfo.DUR;
- FrameInfo.PTS=FrameInfo.DTS;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Read_Buffer_Continue()
-{
- FrameInfo.PTS=FrameInfo.DTS;
-
- if (!Status[IsAccepted])
- Accept("EIA-608");
-
- int8u cc_data_1, cc_data_2;
- Get_B1 (cc_data_1, "cc_data");
- Get_B1 (cc_data_2, "cc_data");
-
- //Removing checksume
- cc_data_1&=0x7F;
- cc_data_2&=0x7F;
-
- //Test if non-printing chars (0x10-0x1F) are repeated (CEA-608-E section D.2)
- if (cc_data_1_Old)
- {
- if (cc_data_1_Old==cc_data_1 && cc_data_2_Old==cc_data_2)
- {
- //This is duplicate
- cc_data_1_Old=0x00;
- cc_data_2_Old=0x00;
- return; //Nothing to do
- }
- else if (cc_type==0) // Field 1 only
- {
- //They should be duplicated, there is a problem
- }
- cc_data_1_Old=0x00;
- cc_data_2_Old=0x00;
- }
-
- if ((cc_data_1 && cc_data_1<0x10) || (XDS_Level!=(size_t)-1 && cc_data_1>=0x20)) //XDS
- {
- XDS(cc_data_1, cc_data_2);
- }
- else if (cc_data_1>=0x20) //Basic characters
- {
- size_t StreamPos=TextMode*2+DataChannelMode;
- if (StreamPos>=Streams.size() || Streams[StreamPos]==NULL || !Streams[StreamPos]->Synched)
- return; //Not synched
-
- Standard(cc_data_1);
- if ((cc_data_2&0x7F)>=0x20)
- Standard(cc_data_2);
- }
- else if (cc_data_1) //Special
- Special(cc_data_1, cc_data_2);
-}
-
-//***************************************************************************
-// Functions
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS(int8u cc_data_1, int8u cc_data_2)
-{
- if (cc_data_1 && cc_data_1<0x10 && cc_data_1%2==0)
- {
- // Continue
- cc_data_1--;
- for (XDS_Level=0; XDS_Level<XDS_Data.size(); XDS_Level++)
- if (XDS_Data[XDS_Level].size()>=2 && XDS_Data[XDS_Level][0]==cc_data_1 && XDS_Data[XDS_Level][1]==cc_data_2)
- break;
- if (XDS_Level>=XDS_Data.size())
- XDS_Level=(size_t)-1; // There is a problem
-
- return;
- }
- else if (cc_data_1 && cc_data_1<0x0F)
- {
- // Start
- for (XDS_Level=0; XDS_Level<XDS_Data.size(); XDS_Level++)
- if (XDS_Data[XDS_Level].size()>=2 && XDS_Data[XDS_Level][0]==cc_data_1 && XDS_Data[XDS_Level][1]==cc_data_2)
- break;
- if (XDS_Level>=XDS_Data.size())
- {
- XDS_Level=XDS_Data.size();
- XDS_Data.resize(XDS_Level+1);
- }
- else
- XDS_Data[XDS_Level].clear(); // There is a problem, erasing the previous item
- }
-
- if (XDS_Level==(size_t)-1)
- return; //There is a problem
-
- XDS_Data[XDS_Level].push_back(cc_data_1);
- XDS_Data[XDS_Level].push_back(cc_data_2);
- if (cc_data_1==0x0F)
- XDS();
- if (XDS_Level!=(size_t)-1 && XDS_Data[XDS_Level].size()>=36)
- XDS_Data[XDS_Level].clear(); // Clear, this is a security
- TextMode=0; // This is CC
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS()
-{
- if (XDS_Data[XDS_Level].size()<4)
- {
- XDS_Data.erase(XDS_Data.begin()+XDS_Level);
- XDS_Level=(size_t)-1;
- return; //There is a problem
- }
-
- switch (XDS_Data[XDS_Level][0])
- {
- case 0x01 : XDS_Current(); break;
- case 0x05 : XDS_Channel(); break;
- case 0x09 : XDS_PublicService(); break;
- default : ;
- }
-
- XDS_Data.erase(XDS_Data.begin()+XDS_Level);
- XDS_Level=(size_t)-1;
-
- DataDetected[5]=true; //bit 5=XDS
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS_Current()
-{
- switch (XDS_Data[XDS_Level][1])
- {
- case 0x03 : XDS_Current_ProgramName(); break;
- case 0x05 : XDS_Current_ContentAdvisory(); break;
- case 0x08 : XDS_Current_CopyAndRedistributionControlPacket(); break;
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS_Current_ContentAdvisory()
-{
- if (XDS_Data[XDS_Level].size()!=6)
- {
- return; //There is a problem
- }
-
- Clear(Stream_General, 0, General_LawRating);
-
- int8u a1a0=(XDS_Data[XDS_Level][2]>>3)&0x3;
- const char* ContentAdvisory=NULL;
- string ContentDescriptors;
- switch (a1a0)
- {
- case 0:
- case 2:
- switch (XDS_Data[XDS_Level][2]&0x7) //r2r1r0
- {
- case 0 : ContentAdvisory="N/A"; break;
- case 1 : ContentAdvisory="G"; break;
- case 2 : ContentAdvisory="PG"; break;
- case 3 : ContentAdvisory="PG-13"; break;
- case 4 : ContentAdvisory="R"; break;
- case 5 : ContentAdvisory="NC-17"; break;
- case 6 : ContentAdvisory="C"; break;
- default: ;
- }
- break;
- case 1:
- switch (XDS_Data[XDS_Level][3]&0x7) //g2g1g0
- {
- case 0 : ContentAdvisory="None"; break;
- case 1 : ContentAdvisory="TV-Y"; break;
- case 2 : ContentAdvisory="TV-Y7"; break;
- case 3 : ContentAdvisory="TV-G"; break;
- case 4 : ContentAdvisory="TV-PG"; break;
- case 5 : ContentAdvisory="TV-14"; break;
- case 6 : ContentAdvisory="TV-MA"; break;
- case 7 : ContentAdvisory="None"; break;
- default: ;
- }
- if (XDS_Data[XDS_Level][2]&0x20) //Suggestive dialogue
- ContentDescriptors+='D';
- if (XDS_Data[XDS_Level][3]&0x8) //Coarse language
- ContentDescriptors+='L';
- if (XDS_Data[XDS_Level][3]&0x10) //Sexual content
- ContentDescriptors+='S';
- if (XDS_Data[XDS_Level][3]&0x20) //Violence
- {
- if ((XDS_Data[XDS_Level][3]&0x7)==2) //"TV-Y7" --> Fantasy Violence
- ContentDescriptors+="FV";
- else
- ContentDescriptors+='V';
- }
- break;
- case 3:
- if (XDS_Data[XDS_Level][3]&0x8) //a3
- {
- ContentAdvisory="(Reserved)";
- }
- else
- {
- if (XDS_Data[XDS_Level][2]&0x20) //a2
- switch (XDS_Data[XDS_Level][3]&0x7) //g2g1g0
- {
- case 0 : ContentAdvisory="E"; break;
- case 1 : ContentAdvisory="G"; break;
- case 2 : ContentAdvisory="8+"; break;
- case 3 : ContentAdvisory="13+"; break;
- case 4 : ContentAdvisory="16+"; break;
- case 5 : ContentAdvisory="18+"; break;
- default: ;
- }
- else
- switch (XDS_Data[XDS_Level][3]&0x7) //g2g1g0
- {
- case 0 : ContentAdvisory="E"; break;
- case 1 : ContentAdvisory="C"; break;
- case 2 : ContentAdvisory="C8+"; break;
- case 3 : ContentAdvisory="G"; break;
- case 4 : ContentAdvisory="PG"; break;
- case 5 : ContentAdvisory="14+"; break;
- case 6 : ContentAdvisory="18+"; break;
- default: ;
- }
- }
- break;
- default: ;
- }
-
- if (ContentAdvisory)
- {
- string ContentAdvisory_String=ContentAdvisory;
- if (!ContentDescriptors.empty())
- ContentAdvisory_String+=" ("+ContentDescriptors+')';
- Fill(Stream_General, 0, General_LawRating, ContentAdvisory_String.c_str());
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS_Current_ProgramName()
-{
- string ValueS;
- for (size_t Pos=2; Pos<XDS_Data[XDS_Level].size()-2; Pos++)
- ValueS.append(1, (const char)(XDS_Data[XDS_Level][Pos]));
- Ztring Value;
- Value.From_UTF8(ValueS.c_str());
- Element_Info1(__T("Program Name=")+Value);
- if (Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Value);
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS_Current_CopyAndRedistributionControlPacket()
-{
- if (XDS_Data[XDS_Level].size()!=6)
- {
- return; //There is a problem
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS_Channel()
-{
- switch (XDS_Data[XDS_Level][1])
- {
- case 0x01 : XDS_Channel_NetworkName(); break;
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS_Channel_NetworkName()
-{
- string ValueS;
- for (size_t Pos=2; Pos<XDS_Data[XDS_Level].size()-2; Pos++)
- ValueS.append(1, (const char)(XDS_Data[XDS_Level][Pos]));
- Ztring Value;
- Value.From_UTF8(ValueS.c_str());
- Element_Info1(__T("Network Name=")+Value);
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS_PublicService()
-{
- switch (XDS_Data[XDS_Level][1])
- {
- case 0x01 : XDS_PublicService_NationalWeatherService(); break;
- default : ;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::XDS_PublicService_NationalWeatherService()
-{
- if (XDS_Data[XDS_Level].size()!=20)
- {
- return; //There is a problem
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Special(int8u cc_data_1, int8u cc_data_2)
-{
- //Data channel check
- DataChannelMode=(cc_data_1&0x08)!=0; //bit3 is the Data Channel number
-
- //Field check
- if (cc_type==(int8u)-1)
- {
- if ((cc_data_1==0x14 || cc_data_1==0x1C) && (cc_data_2&0xF0)==0x20)
- cc_type=0;
- if ((cc_data_1==0x15 || cc_data_1==0x1D) && (cc_data_2&0xF0)==0x20)
- cc_type=1;
- }
-
- cc_data_1&=0xF7;
- if (cc_data_1==0x15 && (cc_data_2&0xF0)==0x20)
- cc_data_1=0x14;
-
- if (cc_data_1>=0x10 && cc_data_1<=0x17 && cc_data_2>=0x40)
- {
- PreambleAddressCode(cc_data_1, cc_data_2);
- }
- else
- {
- switch (cc_data_1)
- {
- case 0x10 : Special_10(cc_data_2); break;
- case 0x11 : Special_11(cc_data_2); break;
- case 0x12 : Special_12(cc_data_2); break;
- case 0x13 : Special_13(cc_data_2); break;
- case 0x14 : Special_14(cc_data_2); break;
- case 0x17 : Special_17(cc_data_2); break;
- default : Illegal(cc_data_1, cc_data_2);
- }
- }
-
- //Saving data, for repetition of the code
- cc_data_1_Old=cc_data_1;
- cc_data_2_Old=cc_data_2;
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::PreambleAddressCode(int8u cc_data_1, int8u cc_data_2)
-{
- //CEA-608-E, Section F.1.1.5
-
- size_t StreamPos=TextMode*2+DataChannelMode;
- if (StreamPos>=Streams.size() || Streams[StreamPos]==NULL || !Streams[StreamPos]->Synched)
- return; //Not synched
- Streams[StreamPos]->x=0; //I am not sure of this, specifications are not precise
-
- //Horizontal position
- if (!TextMode)
- {
- Streams[StreamPos]->y=Eia608_PAC_Row[cc_data_1&0x07]+((cc_data_2&0x20)?1:0);
- if (Streams[StreamPos]->y>=Eia608_Rows)
- {
- Streams[StreamPos]->y=Eia608_Rows-1;
- }
- }
-
- //Attributes (except Underline)
- if (cc_data_2&0x10) //0x5x and 0x7x
- {
- Streams[StreamPos]->x=(((size_t)cc_data_2)&0x0E)<<1;
- Streams[StreamPos]->Attribute_Current=Attribute_Color_White;
- }
- else if ((cc_data_2&0x0E)==0x0E) //0x4E, 0x4F, 0x6E, 0x6F
- {
- Streams[StreamPos]->Attribute_Current=Attribute_Color_White|Attribute_Italic;
- }
- else //0x40-0x4D, 0x60-0x6D
- Streams[StreamPos]->Attribute_Current=(cc_data_2&0x0E)>>1;
-
- //Underline
- if (cc_data_2&0x01)
- Streams[StreamPos]->Attribute_Current|=Attribute_Underline;
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Special_10(int8u cc_data_2)
-{
- switch (cc_data_2)
- {
- //CEA-608-E, Section 6.2
- case 0x20 : break; //Background White, Opaque
- case 0x21 : break; //Background White, Semi-transparent
- case 0x22 : break; //
- case 0x23 : break; //
- case 0x24 : break; //
- case 0x25 : break; //
- case 0x26 : break; //
- case 0x27 : break; //
- case 0x28 : break; //
- case 0x29 : break; //
- case 0x2A : break; //
- case 0x2B : break; //
- case 0x2C : break; //
- case 0x2D : break; //
- case 0x2E : break; //
- case 0x2F : break; //
- default : Illegal(0x10, cc_data_2);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Special_11(int8u cc_data_2)
-{
- size_t StreamPos=TextMode*2+DataChannelMode;
- if (StreamPos>=Streams.size() || Streams[StreamPos]==NULL || !Streams[StreamPos]->Synched)
- return; //Not synched
-
- switch (cc_data_2)
- {
- //CEA-608-E, Section F.1.1.3
- case 0x20 : //White
- case 0x21 : //White Underline
- case 0x22 : //
- case 0x23 : //
- case 0x24 : //
- case 0x25 : //
- case 0x26 : //
- case 0x27 : //
- case 0x28 : //
- case 0x29 : //
- case 0x2A : //
- case 0x2B : //
- case 0x2C : //
- case 0x2D : //
- case 0x2E : //
- case 0x2F : //
- //Color or Italic
- if ((cc_data_2&0xFE)==0x2E) //Italic
- Streams[StreamPos]->Attribute_Current|=Attribute_Italic;
- else //Other attributes
- Streams[StreamPos]->Attribute_Current=(cc_data_2&0x0F)>>1;
-
- //Underline
- if (cc_data_2&0x01)
- Streams[StreamPos]->Attribute_Current|=Attribute_Underline;
-
- break;
- //CEA-608-E, Section F.1.1.1
- case 0x30 : Character_Fill(L'\x2122'); break; //Registered mark symbol
- case 0x31 : Character_Fill(L'\xB0' ); break; //Degree sign
- case 0x32 : Character_Fill(L'\xBD' ); break; //1/2
- case 0x33 : Character_Fill(L'\xBF' ); break; //interogation mark inverted
- case 0x34 : Character_Fill(L'\xA9' ); break; //Trademark symbol
- case 0x35 : Character_Fill(L'\xA2' ); break; //Cents sign
- case 0x36 : Character_Fill(L'\xA3' ); break; //Pounds Sterling sign
- case 0x37 : Character_Fill(L'\x266A'); break; //Music note
- case 0x38 : Character_Fill(L'\xE0' ); break; //a grave
- case 0x39 : Character_Fill(L' ' ); break; //Transparent space
- case 0x3A : Character_Fill(L'\xE8' ); break; //e grave
- case 0x3B : Character_Fill(L'\xE2' ); break; //a circumflex
- case 0x3C : Character_Fill(L'\xEA' ); break; //e circumflex
- case 0x3D : Character_Fill(L'\xEE' ); break; //i circumflex
- case 0x3E : Character_Fill(L'\xF4' ); break; //o circumflex
- case 0x3F : Character_Fill(L'\xFB' ); break; //u circumflex
- default : Illegal(0x11, cc_data_2);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Special_12(int8u cc_data_2)
-{
- size_t StreamPos=TextMode*2+DataChannelMode;
- if (StreamPos>=Streams.size() || Streams[StreamPos]==NULL || !Streams[StreamPos]->Synched)
- return; //Not synched
-
- if (Streams[StreamPos]->x && cc_data_2>=0x20 && cc_data_2<0x40)
- Streams[StreamPos]->x--; //Erasing previous character
-
- switch (cc_data_2)
- {
- //CEA-608-E, Section 6.4.2
- case 0x20 : Character_Fill(L'A' ); break; //A with acute
- case 0x21 : Character_Fill(L'E' ); break; //E with acute
- case 0x22 : Character_Fill(L'O' ); break; //O with acute
- case 0x23 : Character_Fill(L'U' ); break; //U with acute
- case 0x24 : Character_Fill(L'U' ); break; //U withdiaeresis or umlaut
- case 0x25 : Character_Fill(L'u' ); break; //u with diaeresis or umlaut
- case 0x26 : Character_Fill(L'\'' ); break; //opening single quote
- case 0x27 : Character_Fill(L'!' ); break; //inverted exclamation mark
- case 0x28 : Character_Fill(L'*' ); break; //Asterisk
- case 0x29 : Character_Fill(L'\'' ); break; //plain single quote
- case 0x2A : Character_Fill(L'_' ); break; //em dash
- case 0x2B : Character_Fill(L'C' ); break; //Copyright
- case 0x2C : Character_Fill(L'S' ); break; //Servicemark
- case 0x2D : Character_Fill(L'x' ); break; //round bullet
- case 0x2E : Character_Fill(L'\"' ); break; //opening double quotes
- case 0x2F : Character_Fill(L'\"' ); break; //closing double quotes
- case 0x30 : Character_Fill(L'A' ); break; //A with grave accent
- case 0x31 : Character_Fill(L'A' ); break; //A with circumflex accent
- case 0x32 : Character_Fill(L'C' ); break; //C with cedilla
- case 0x33 : Character_Fill(L'E' ); break; //E with grave accent
- case 0x34 : Character_Fill(L'E' ); break; //E with circumflex accent
- case 0x35 : Character_Fill(L'E' ); break; //E with diaeresis or umlaut mark
- case 0x36 : Character_Fill(L'e' ); break; //e with diaeresis or umlaut mark
- case 0x37 : Character_Fill(L'I' ); break; //I with circumflex accent
- case 0x38 : Character_Fill(L'I' ); break; //I with diaeresis or umlaut mark
- case 0x39 : Character_Fill(L'i' ); break; //i with diaeresis or umlaut mark
- case 0x3A : Character_Fill(L'O' ); break; //O with circumflex
- case 0x3B : Character_Fill(L'U' ); break; //U with grave accent
- case 0x3C : Character_Fill(L'u' ); break; //u with grave accent
- case 0x3D : Character_Fill(L'U' ); break; //U with circumflex accent
- case 0x3E : Character_Fill(L'\"' ); break; //opening guillemets
- case 0x3F : Character_Fill(L'\"' ); break; //closing guillemets
- default : Illegal(0x12, cc_data_2);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Special_13(int8u cc_data_2)
-{
- size_t StreamPos=TextMode*2+DataChannelMode;
- if (StreamPos>=Streams.size() || Streams[StreamPos]==NULL || !Streams[StreamPos]->Synched)
- return; //Not synched
-
- if (Streams[StreamPos]->x && cc_data_2>=0x20 && cc_data_2<0x40)
- Streams[StreamPos]->x--; //Erasing previous character
-
- switch (cc_data_2)
- {
- //CEA-608-E, Section 6.4.2
- case 0x20 : Character_Fill(L'A' ); break; //A with tilde
- case 0x21 : Character_Fill(L'a' ); break; //a with tilde
- case 0x22 : Character_Fill(L'I' ); break; //I with acute accent
- case 0x23 : Character_Fill(L'I' ); break; //I with grave accent
- case 0x24 : Character_Fill(L'i' ); break; //i with grave accent
- case 0x25 : Character_Fill(L'O' ); break; //O with grave accent
- case 0x26 : Character_Fill(L'o' ); break; //o with grave accent
- case 0x27 : Character_Fill(L'O' ); break; //O with tilde
- case 0x28 : Character_Fill(L'o' ); break; //o with tilde
- case 0x29 : Character_Fill(L'{' ); break; //opening brace
- case 0x2A : Character_Fill(L'}' ); break; //closing brace
- case 0x2B : Character_Fill(L'\\' ); break; //backslash
- case 0x2C : Character_Fill(L'^' ); break; //caret
- case 0x2D : Character_Fill(L'_' ); break; //Underbar
- case 0x2E : Character_Fill(L'|' ); break; //pipe
- case 0x2F : Character_Fill(L'~' ); break; //tilde
- case 0x30 : Character_Fill(L'A' ); break; //A with diaeresis or umlaut mark
- case 0x31 : Character_Fill(L'a' ); break; //a with diaeresis or umlaut mark
- case 0x32 : Character_Fill(L'O' ); break; //o with diaeresis or umlaut mark
- case 0x33 : Character_Fill(L'o' ); break; //o with diaeresis or umlaut mark
- case 0x34 : Character_Fill(L's' ); break; //eszett (mall sharp s)
- case 0x35 : Character_Fill(L'Y' ); break; //yen
- case 0x36 : Character_Fill(L' ' ); break; //non-specific currency sign
- case 0x37 : Character_Fill(L'|' ); break; //Vertical bar
- case 0x38 : Character_Fill(L'A' ); break; //I with diaeresis or umlaut mark
- case 0x39 : Character_Fill(L'a' ); break; //i with diaeresis or umlaut mark
- case 0x3A : Character_Fill(L'O' ); break; //O with ring
- case 0x3B : Character_Fill(L'o' ); break; //a with ring
- case 0x3C : Character_Fill(L' ' ); break; //upper left corner
- case 0x3D : Character_Fill(L' ' ); break; //upper right corner
- case 0x3E : Character_Fill(L' ' ); break; //lower left corner
- case 0x3F : Character_Fill(L' ' ); break; //lower right corner
- default : Illegal(0x13, cc_data_2);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Special_14(int8u cc_data_2)
-{
- size_t StreamPos=TextMode*2+DataChannelMode;
-
- switch (cc_data_2)
- {
- case 0x20 : //RCL - Resume Caption Loading
- case 0x25 : //RU2 - Roll-Up Captions2 Rows
- case 0x26 : //RU3 - Roll-Up Captions3 Rows
- case 0x27 : //RU4 - Roll-Up Captions4 Rows
- case 0x29 : //RDC - Resume Direct Captioning
- case 0x2A : //TR - Text Restart
- case 0x2B : //RTD - Resume Text Display
- case 0x2C : //EDM - Erase Displayed Memory
- TextMode=(cc_data_2&0xFE)==0x2A;
- XDS_Level=(size_t)-1; // No more XDS
- StreamPos=TextMode*2+DataChannelMode;
-
- //Alloc
- if (StreamPos>=Streams.size())
- Streams.resize(StreamPos+1);
- if (Streams[StreamPos]==NULL)
- {
- Streams[StreamPos]=new stream();
- Streams[StreamPos]->CC_Displayed.resize(Eia608_Rows);
- for (size_t Pos=0; Pos<Streams[StreamPos]->CC_Displayed.size(); Pos++)
- Streams[StreamPos]->CC_Displayed[Pos].resize(Eia608_Columns);
- if (StreamPos<2) //CC only, not in Text
- {
- Streams[StreamPos]->CC_NonDisplayed.resize(Eia608_Rows);
- for (size_t Pos=0; Pos<Streams[StreamPos]->CC_NonDisplayed.size(); Pos++)
- Streams[StreamPos]->CC_NonDisplayed[Pos].resize(Eia608_Columns);
- }
- }
- Streams[StreamPos]->Synched=true;
-
- break;
- case 0x2F : //EOC - end of Caption
- TextMode=false;
- StreamPos=TextMode*2+DataChannelMode;
- default: ;
- }
-
- if (StreamPos>=Streams.size() || Streams[StreamPos]==NULL || !Streams[StreamPos]->Synched)
- return; //Not synched
-
- switch (cc_data_2)
- {
- case 0x20 : TextMode=false;
- Streams[StreamPos]->InBack=true;
- break; //RCL - Resume Caption Loading (Select pop-on style)
- case 0x21 : if (Streams[StreamPos]->x)
- Streams[StreamPos]->x--;
- (Streams[StreamPos]->InBack?Streams[StreamPos]->CC_NonDisplayed:Streams[StreamPos]->CC_Displayed)[Streams[StreamPos]->y][Streams[StreamPos]->x].Value=L' '; //Clear the character
- if (!Streams[StreamPos]->InBack)
- HasChanged();
- break; //BS - Backspace
- case 0x22 : Special_14(0x2D); //Found 1 file with AOF and non CR
- break; //AOF - Alarm Off
- case 0x23 : break; //AON - Alarm On
- case 0x24 : for (size_t Pos=Streams[StreamPos]->x; Pos<Eia608_Columns; Pos++)
- (Streams[StreamPos]->InBack?Streams[StreamPos]->CC_NonDisplayed:Streams[StreamPos]->CC_Displayed)[Streams[StreamPos]->y][Pos].Value=L' '; //Clear up to the end of line
- if (!Streams[StreamPos]->InBack)
- HasChanged();
- break; //DER - Delete to End of Row
- case 0x25 : //RU2 - Roll-Up Captions2 Rows
- case 0x26 : //RU3 - Roll-Up Captions3 Rows
- case 0x27 : //RU4 - Roll-Up Captions4 Rows
- Streams[StreamPos]->RollUpLines=cc_data_2-0x25+2;
- Streams[StreamPos]->InBack=false;
- break; //RUx - Roll-Up Captionsx Rows
- case 0x28 : break; //FON - Flash On
- case 0x29 : Streams[StreamPos]->InBack=false;
- break; //RDC - Resume Direct Captioning (paint-on style)
- case 0x2A : TextMode=true;
- Streams[StreamPos]->RollUpLines=Eia608_Rows; //Roll up all the lines
- Streams[StreamPos]->y=Eia608_Rows-1; //Base is the bottom line
- Streams[StreamPos]->Attribute_Current=0; //Reset all attributes
- Special_14(0x2D); //Next line
- break; //TR - Text Restart (clear Text, but not boxes)
- case 0x2B : TextMode=true;
- break; //RTD - Resume Text Display
- case 0x2C :
- if (StreamPos<Streams.size() && Streams[StreamPos])
- {
- bool HasChanged_=false;
- for (size_t Pos_Y=0; Pos_Y<Eia608_Rows; Pos_Y++)
- for (size_t Pos_X=0; Pos_X<Eia608_Columns; Pos_X++)
- if (Streams[StreamPos]->CC_Displayed[Pos_Y][Pos_X].Value!=L' ')
- {
- Streams[StreamPos]->CC_Displayed[Pos_Y][Pos_X].Value=L' ';
- Streams[StreamPos]->CC_Displayed[Pos_Y][Pos_X].Attribute=0;
- HasChanged_=true;
- }
- if (HasChanged_)
- HasChanged();
- }
- break; //EDM - Erase Displayed Memory
- case 0x2D : for (size_t Pos=1; Pos<Streams[StreamPos]->RollUpLines; Pos++)
- {
- if (Streams[StreamPos]->y>=Streams[StreamPos]->RollUpLines-Pos && Streams[StreamPos]->y-Streams[StreamPos]->RollUpLines+Pos+1<Eia608_Rows)
- Streams[StreamPos]->CC_Displayed[Streams[StreamPos]->y-Streams[StreamPos]->RollUpLines+Pos]=Streams[StreamPos]->CC_Displayed[Streams[StreamPos]->y-Streams[StreamPos]->RollUpLines+Pos+1];
- }
- for (size_t Pos_X=0; Pos_X<Eia608_Columns; Pos_X++)
- {
- Streams[StreamPos]->CC_Displayed[Streams[StreamPos]->y][Pos_X].Value=L' ';
- Streams[StreamPos]->CC_Displayed[Streams[StreamPos]->y][Pos_X].Attribute=0;
- }
- if (!Streams[StreamPos]->InBack)
- HasChanged();
- Streams[StreamPos]->x=0;
- break; //CR - Carriage Return
- case 0x2E : for (size_t Pos_Y=0; Pos_Y<Streams[StreamPos]->CC_NonDisplayed.size(); Pos_Y++)
- for (size_t Pos_X=0; Pos_X<Streams[StreamPos]->CC_NonDisplayed[Pos_Y].size(); Pos_X++)
- {
- Streams[StreamPos]->CC_NonDisplayed[Pos_Y][Pos_X].Value=L' ';
- Streams[StreamPos]->CC_NonDisplayed[Pos_Y][Pos_X].Attribute=0;
- }
- break; //ENM - Erase Non-Displayed Memory
- case 0x2F : Streams[StreamPos]->CC_Displayed.swap(Streams[StreamPos]->CC_NonDisplayed);
- HasChanged();
- Streams[StreamPos]->Synched=false;
- break; //EOC - End of Caption
- default : Illegal(0x14, cc_data_2);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Special_17(int8u cc_data_2)
-{
- size_t StreamPos=TextMode*2+DataChannelMode;
- if (StreamPos>=Streams.size() || Streams[StreamPos]==NULL || !Streams[StreamPos]->Synched)
- return; //Not synched
-
- switch (cc_data_2)
- {
- //CEA-608-E, section B.4
- case 0x21 : //TO1 - Tab Offset 1 Column
- case 0x22 : //TO2 - Tab Offset 2 Columns
- case 0x23 : //TO3 - Tab Offset 3 Columns
- Streams[StreamPos]->x+=cc_data_2&0x03;
- if (Streams[StreamPos]->x>=Eia608_Columns)
- Streams[StreamPos]->x=Eia608_Columns-1;
- break;
- //CEA-608-E, section 6.3
- case 0x24 : break; //Select the standard line 21 character set in normal size
- case 0x25 : break; //Select the standard line 21 character set in double size
- case 0x26 : break; //Select the first private character set
- case 0x27 : break; //Select the second private character set
- case 0x28 : break; //Select the People's Republic of China character set: GB 2312-80
- case 0x29 : break; //Select the Korean Standard character set: KSC 5601-1987
- case 0x2A : break; //Select the first registered character set
- //CEA-608-E, section 6.2
- case 0x2D : break; //Background Transparent
- case 0x2E : break; //Foreground Black
- case 0x2F : break; //Foreground Black Underline
- default : Illegal(0x17, cc_data_2);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Standard(int8u Character)
-{
- switch (Character)
- {
- //CEA-608-E, Section F.1.1.2
- case 0x20 : Character_Fill(L' ' ); break;
- case 0x21 : Character_Fill(L'!' ); break;
- case 0x22 : Character_Fill(L'"' ); break;
- case 0x23 : Character_Fill(L'#' ); break;
- case 0x24 : Character_Fill(L'$' ); break;
- case 0x25 : Character_Fill(L'%' ); break;
- case 0x26 : Character_Fill(L'&' ); break;
- case 0x27 : Character_Fill(L'\'' ); break;
- case 0x28 : Character_Fill(L'(' ); break;
- case 0x29 : Character_Fill(L')' ); break;
- case 0x2A : Character_Fill(L'\xE1' ); break; //a acute
- case 0x2B : Character_Fill(L'+' ); break;
- case 0x2C : Character_Fill(L',' ); break;
- case 0x2D : Character_Fill(L'-' ); break;
- case 0x2E : Character_Fill(L'.' ); break;
- case 0x2F : Character_Fill(L'/' ); break;
- case 0x30 : Character_Fill(L'0' ); break;
- case 0x31 : Character_Fill(L'1' ); break;
- case 0x32 : Character_Fill(L'2' ); break;
- case 0x33 : Character_Fill(L'3' ); break;
- case 0x34 : Character_Fill(L'4' ); break;
- case 0x35 : Character_Fill(L'5' ); break;
- case 0x36 : Character_Fill(L'6' ); break;
- case 0x37 : Character_Fill(L'7' ); break;
- case 0x38 : Character_Fill(L'8' ); break;
- case 0x39 : Character_Fill(L'9' ); break;
- case 0x3A : Character_Fill(L':' ); break;
- case 0x3B : Character_Fill(L';' ); break;
- case 0x3C : Character_Fill(L'<' ); break;
- case 0x3E : Character_Fill(L'>' ); break;
- case 0x3F : Character_Fill(L'?' ); break;
- case 0x40 : Character_Fill(L'@' ); break;
- case 0x41 : Character_Fill(L'A' ); break;
- case 0x42 : Character_Fill(L'B' ); break;
- case 0x43 : Character_Fill(L'C' ); break;
- case 0x44 : Character_Fill(L'D' ); break;
- case 0x45 : Character_Fill(L'E' ); break;
- case 0x46 : Character_Fill(L'F' ); break;
- case 0x47 : Character_Fill(L'G' ); break;
- case 0x48 : Character_Fill(L'H' ); break;
- case 0x49 : Character_Fill(L'I' ); break;
- case 0x4A : Character_Fill(L'J' ); break;
- case 0x4B : Character_Fill(L'K' ); break;
- case 0x4C : Character_Fill(L'L' ); break;
- case 0x4D : Character_Fill(L'M' ); break;
- case 0x4E : Character_Fill(L'N' ); break;
- case 0x4F : Character_Fill(L'O' ); break;
- case 0x50 : Character_Fill(L'P' ); break;
- case 0x51 : Character_Fill(L'Q' ); break;
- case 0x52 : Character_Fill(L'R' ); break;
- case 0x53 : Character_Fill(L'S' ); break;
- case 0x54 : Character_Fill(L'T' ); break;
- case 0x55 : Character_Fill(L'U' ); break;
- case 0x56 : Character_Fill(L'V' ); break;
- case 0x57 : Character_Fill(L'W' ); break;
- case 0x58 : Character_Fill(L'X' ); break;
- case 0x59 : Character_Fill(L'Y' ); break;
- case 0x5A : Character_Fill(L'Z' ); break;
- case 0x5B : Character_Fill(L'[' ); break;
- case 0x5C : Character_Fill(L'\xE9' ); break; //e acute
- case 0x5D : Character_Fill(L']' ); break;
- case 0x5E : Character_Fill(L'\xED' ); break; //i acute
- case 0x5F : Character_Fill(L'\xF3' ); break; //o acute
- case 0x60 : Character_Fill(L'\xFA' ); break; //u acute
- case 0x61 : Character_Fill(L'a' ); break;
- case 0x62 : Character_Fill(L'b' ); break;
- case 0x63 : Character_Fill(L'c' ); break;
- case 0x64 : Character_Fill(L'd' ); break;
- case 0x65 : Character_Fill(L'e' ); break;
- case 0x66 : Character_Fill(L'f' ); break;
- case 0x67 : Character_Fill(L'g' ); break;
- case 0x68 : Character_Fill(L'h' ); break;
- case 0x69 : Character_Fill(L'i' ); break;
- case 0x6A : Character_Fill(L'j' ); break;
- case 0x6B : Character_Fill(L'k' ); break;
- case 0x6C : Character_Fill(L'l' ); break;
- case 0x6D : Character_Fill(L'm' ); break;
- case 0x6E : Character_Fill(L'n' ); break;
- case 0x6F : Character_Fill(L'o' ); break;
- case 0x70 : Character_Fill(L'p' ); break;
- case 0x71 : Character_Fill(L'q' ); break;
- case 0x72 : Character_Fill(L'r' ); break;
- case 0x73 : Character_Fill(L's' ); break;
- case 0x74 : Character_Fill(L't' ); break;
- case 0x75 : Character_Fill(L'u' ); break;
- case 0x76 : Character_Fill(L'v' ); break;
- case 0x77 : Character_Fill(L'w' ); break;
- case 0x78 : Character_Fill(L'x' ); break;
- case 0x79 : Character_Fill(L'y' ); break;
- case 0x7A : Character_Fill(L'z' ); break;
- case 0x7B : Character_Fill(L'\xE7' ); break; //c with cedilla
- case 0x7C : Character_Fill(L'\xF7' ); break; //division symbol
- case 0x7D : Character_Fill(L'\xD1' ); break; //N tilde
- case 0x7E : Character_Fill(L'\xF1' ); break; //n tilde
- case 0x7F : Character_Fill(L'\x25A0'); break; //Solid block
- default : Illegal(0x00, Character);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Character_Fill(wchar_t Character)
-{
- size_t StreamPos=TextMode*2+DataChannelMode;
- if (StreamPos>=Streams.size() || Streams[StreamPos]==NULL || !Streams[StreamPos]->Synched)
- return; //Not synched
-
- if (Streams[StreamPos]->x==Eia608_Columns)
- {
- Streams[StreamPos]->x--; //There is a problem
-
- //TODO: Put it at the end, for the conversion
- //TODO: Handle special chars
- }
-
- if (Streams[StreamPos]->InBack)
- Streams[StreamPos]->CC_NonDisplayed[Streams[StreamPos]->y][Streams[StreamPos]->x].Value=Character;
- else
- Streams[StreamPos]->CC_Displayed[Streams[StreamPos]->y][Streams[StreamPos]->x].Value=Character;
-
- Streams[StreamPos]->x++;
-
- if (TextMode || !Streams[StreamPos]->InBack)
- HasChanged();
-
- if (!HasContent)
- HasContent=true;
- DataDetected[1+StreamPos]=true;
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::HasChanged()
-{
-}
-
-//---------------------------------------------------------------------------
-void File_Eia608::Illegal(int8u cc_data_1, int8u cc_data_2)
-{
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_EIA608_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia608.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia608.h
deleted file mode 100644
index f4a270da7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia608.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PGS files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Eia608H
-#define MediaInfo_File_Eia608H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-#include <bitset>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Eia608
-//***************************************************************************
-
-static const int8u Eia608_Rows=15; //Screen size, specified by the standard
-static const int8u Eia608_Columns=32; //Screen size, specified by the standard
-class File_Eia608 : public File__Analyze
-{
-public :
- //In
- int8u cc_type;
-
- //Constructor/Destructor
- File_Eia608();
- ~File_Eia608();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Synchro
- void Read_Buffer_Unsynched();
-
- //Buffer - Global
- void Read_Buffer_Init();
- void Read_Buffer_Continue();
- void Read_Buffer_AfterParsing();
-
- //Function
- void Standard (int8u Character);
-
- std::vector<std::vector<int8u> > XDS_Data;
- size_t XDS_Level;
- bool TextMode; //CC or T
- bool DataChannelMode; //if true, CC2/CC4/T2/T4
-
- void XDS(int8u cc_data_1, int8u cc_data_2);
- void XDS();
- void XDS_Current();
- void XDS_Current_ProgramName();
- void XDS_Current_ContentAdvisory();
- void XDS_Current_CopyAndRedistributionControlPacket();
- void XDS_PublicService();
- void XDS_PublicService_NationalWeatherService();
- void XDS_Channel();
- void XDS_Channel_NetworkName();
- void Special(int8u cc_data_1, int8u cc_data_2);
- void Special_10(int8u cc_data_2);
- void Special_11(int8u cc_data_2);
- void Special_12(int8u cc_data_2);
- void Special_13(int8u cc_data_2);
- void Special_14(int8u cc_data_2);
- void Special_17(int8u cc_data_2);
- void PreambleAddressCode(int8u cc_data_1, int8u cc_data_2);
-
- //An attribute consists of Attribute_Color_*, optionally OR'd with Attribute_Underline and/or Attribute_Italic
- enum attributes
- {
- Attribute_Color_White =0x00,
- Attribute_Color_Green =0x01,
- Attribute_Color_Blue =0x02,
- Attribute_Color_Cyan =0x03,
- Attribute_Color_Red =0x04,
- Attribute_Color_Yellow =0x05,
- Attribute_Color_Magenta =0x06,
- Attribute_Underline =0x10,
- Attribute_Italic =0x20,
- };
-
- struct character
- {
- wchar_t Value;
- int8u Attribute;
-
- character()
- :
- Value(L' '),
- Attribute(0x00)
- {
- }
- };
- void Character_Fill(wchar_t Character);
- void HasChanged();
- void Illegal(int8u cc_data_1, int8u cc_data_2);
- struct stream
- {
- vector<vector<character> > CC_Displayed;
- vector<vector<character> > CC_NonDisplayed;
- bool InBack; //The back buffer is written
- size_t x;
- size_t y;
- int8u Attribute_Current;
- size_t RollUpLines;
- bool Synched;
-
- stream()
- {
- InBack=false;
- x=0;
- y=Eia608_Rows-1;
- Attribute_Current=0;
- RollUpLines=0;
- Synched=false;
- }
- };
- std::vector<stream*> Streams;
-
- int8u cc_data_1_Old;
- int8u cc_data_2_Old;
- bool HasContent;
- std::bitset<8> DataDetected; //1=CC1, 2=CC2, 3=T1, 4=T2, 5=XDS
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia708.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia708.cpp
deleted file mode 100644
index 666256f7e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia708.cpp
+++ /dev/null
@@ -1,1415 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_EIA708_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Eia708.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Eia708::File_Eia708()
-:File__Analyze()
-{
- //Config
- PTS_DTS_Needed=true;
- MustSynchronize=true;
-
- //In
- cc_type=(int8u)-1;
- AspectRatio=((float32)4)/3; //Default to 4:3
- ParserName=__T("EIA-708");
-
- //Stream
- service_number=(int8u)-1;
-
- //Temp
- StandAloneCommand=false;
- HasContent=false;
- DataDetected=0x0000000000000000LL;
-}
-
-//---------------------------------------------------------------------------
-File_Eia708::~File_Eia708()
-{
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- delete Streams[Pos]; //Streams[Pos]=NULL
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Eia708::Streams_Fill()
-{
- if (Config->File_Eia708_DisplayEmptyStream_Get() && Streams.size()<2)
- Streams.resize(2);
-
- if (ServiceDescriptors)
- {
- for (servicedescriptors708::iterator ServiceDescriptor=ServiceDescriptors->ServiceDescriptors708.begin(); ServiceDescriptor!=ServiceDescriptors->ServiceDescriptors708.end(); ++ServiceDescriptor)
- {
- service_number=ServiceDescriptor->first;
- block_size=0;
- Service();
- }
- }
-
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] || (Pos && Pos<2 && Config->File_Eia708_DisplayEmptyStream_Get()))
- {
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, StreamPos_Last, Text_ID, Pos);
- Fill(Stream_Text, StreamPos_Last, "CaptionServiceName", Pos);
- (*Stream_More)[StreamKind_Last][StreamPos_Last](Ztring().From_Local("CaptionServiceName"), Info_Options)=__T("N NT");
- Fill(Stream_Text, StreamPos_Last, Text_Format, "EIA-708");
- Fill(Stream_Text, StreamPos_Last, Text_StreamSize, 0);
- Fill(Stream_Text, StreamPos_Last, Text_BitRate_Mode, "CBR");
- if (Config->ParseSpeed>=1.0)
- {
- Fill(Stream_Text, StreamPos_Last, "CaptionServiceContent_IsPresent", (DataDetected&((int64u)1)<<Pos)?"Yes":"No", Unlimited, true, true); //1 bit per service
- (*Stream_More)[Stream_Text][StreamPos_Last](Ztring().From_Local("CaptionServiceContent_IsPresent"), Info_Options)=__T("N NT");
- }
- if (ServiceDescriptors)
- {
- servicedescriptors708::iterator ServiceDescriptor=ServiceDescriptors->ServiceDescriptors708.find((int8u)Pos);
- if (ServiceDescriptor!=ServiceDescriptors->ServiceDescriptors708.end())
- {
- Fill(Stream_Text, StreamPos_Last, Text_Language, ServiceDescriptor->second.language, true);
- Fill(Stream_Text, StreamPos_Last, "CaptionServiceDescriptor_IsPresent", "Yes", Unlimited, true, true);
- (*Stream_More)[Stream_Text][StreamPos_Last](Ztring().From_Local("CaptionServiceDescriptor_IsPresent"), Info_Options)=__T("N NT");
- }
- else //ServiceDescriptors pointer is for the support by the transport layer of the info
- {
- Fill(Stream_Text, StreamPos_Last, "CaptionServiceDescriptor_IsPresent", "No", Unlimited, true, true);
- (*Stream_More)[Stream_Text][StreamPos_Last](Ztring().From_Local("CaptionServiceDescriptor_IsPresent"), Info_Options)=__T("N NT");
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia708::Streams_Finish()
-{
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Eia708::Synchronize()
-{
- if (cc_type!=3)
- return false; //Waiting for sync from underlying layer
-
- if (!Status[IsAccepted])
- Accept("EIA-708");
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Eia708::Synched_Test()
-{
- if (cc_type==4) //Magic value saying that the buffer must be kept (this is only a point of synchro from the undelying layer)
- Buffer_Offset=Buffer_Size; //Sync point
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Eia708::Read_Buffer_Init()
-{
-}
-
-//---------------------------------------------------------------------------
-void File_Eia708::Read_Buffer_Continue()
-{
- FrameInfo.PTS=FrameInfo.DTS;
-}
-
-//---------------------------------------------------------------------------
-void File_Eia708::Read_Buffer_Unsynched()
-{
- for (int8u service_number=1; service_number<Streams.size(); service_number++)
- if (Streams[service_number])
- {
- //Per window
- for (size_t WindowID=0; WindowID<Streams[service_number]->Windows.size(); WindowID++)
- {
- window* Window=Streams[service_number]->Windows[WindowID];
- if (Window)
- for (size_t Pos_Y=0; Pos_Y<Window->Minimal.CC.size(); Pos_Y++)
- {
- for (size_t Pos_X=0; Pos_X<Window->Minimal.CC[Pos_Y].size(); Pos_X++)
- {
- Window->Minimal.CC[Pos_Y][Pos_X].Value=L' ';
- Window->Minimal.CC[Pos_Y][Pos_X].Attribute=0;
- }
- }
- }
-
- //Global display
- for (size_t Pos_Y=0; Pos_Y<Streams[service_number]->Minimal.CC.size(); Pos_Y++)
- {
- for (size_t Pos_X=0; Pos_X<Streams[service_number]->Minimal.CC[Pos_Y].size(); Pos_X++)
- {
- Streams[service_number]->Minimal.CC[Pos_Y][Pos_X].Value=L' ';
- Streams[service_number]->Minimal.CC[Pos_Y][Pos_X].Attribute=0;
- }
- }
- }
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Eia708::Header_Parse()
-{
- //Parsing
- int8u packet_size, sequence_number;
- BS_Begin();
- Get_S1(2, sequence_number, "sequence_number");
- Get_S1(6, packet_size, "packet_size_code");
- BS_End();
-
- Header_Fill_Code(0, __T("DTVCC packet"));
- Header_Fill_Size(packet_size==0?128:(packet_size*2));
-}
-
-//---------------------------------------------------------------------------
-void File_Eia708::Data_Parse()
-{
- //Parsing
- while (Element_Offset<Element_Size)
- {
- BS_Begin();
- Get_S1(3, service_number, "service_number");
- Get_S1(5, block_size, "block_size");
- if (service_number==7)
- {
- Mark_0();
- Mark_0();
- Get_S1(6, service_number, "extended_service_number");
- }
- BS_End();
-
- if (service_number)
- {
- Element_Begin1("Service Block Packet");
- Service();
- Element_End0();
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Eia708::Service()
-{
- if (service_number>=Streams.size())
- Streams.resize(service_number+1);
- if (Streams[service_number]==NULL)
- {
- Streams[service_number]=new stream;
- Streams[service_number]->Minimal.CC.resize(15);
- for (int8u Pos_Y=0; Pos_Y<15; Pos_Y++)
- Streams[service_number]->Minimal.CC[Pos_Y].resize((size_t)(24*AspectRatio));
- Streams[service_number]->Windows.resize(8);
- }
-
- for (int8u Pos=0; Pos<block_size; Pos++)
- {
- int8u cc_data_1;
- Get_B1(cc_data_1, "cc_data");
- switch (cc_data_1)
- {
- //CEA-708-D, Section 7.1.4 (C0)
- case 0x00 : NUL(); break; //NUL
- case 0x03 : ETX(); break; //End Of Text
- case 0x08 : BS(); break; //BackSpace
- case 0x0C : FF(); break; //Form Feed
- case 0x0D : CR(); break; //Carriage Return
- case 0x0E : HCR(); break; //Horizontal Carriage Return
- case 0x01 :
- case 0x02 :
- case 0x04 :
- case 0x05 :
- case 0x06 :
- case 0x07 :
- case 0x09 :
- case 0x0A :
- case 0x0B :
- case 0x0F : break; //1-byte long undefined code
- case 0x10 : //EXT1
- {
- int8u cc_data_2;
- Get_B1(cc_data_2, "cc_data");
- Pos++;
- switch (cc_data_2)
- {
- //CEA-708-D, Section 7.1.8 (G2)
- case 0x20 : Character_Fill(L' ' ); break;
- case 0x21 : Character_Fill(L' ' ); break;
- case 0x25 : Character_Fill(L'.' ); Character_Fill(L'.'); Character_Fill(L'.'); break;
- case 0x2A : Character_Fill(L'S' ); break;
- case 0x2C : Character_Fill(L'O' ); Character_Fill(L'E'); break;
- case 0x30 : Character_Fill(L' ' ); break; //(Solid Block)
- case 0x31 : Character_Fill(L'\'' ); break;
- case 0x32 : Character_Fill(L'\'' ); break;
- case 0x33 : Character_Fill(L'\'' ); break;
- case 0x34 : Character_Fill(L'\'' ); break;
- case 0x35 : Character_Fill(L'.' ); break;
- case 0x39 : Character_Fill(L'_' ); break; //TM
- case 0x3A : Character_Fill(L's' ); break;
- case 0x3C : Character_Fill(L'_' ); break; //oe
- case 0x3D : Character_Fill(L'_' ); break; //SM
- case 0x3F : Character_Fill(L'Y' ); break;
- case 0x76 : Character_Fill(L'_' ); break; //1/8
- case 0x77 : Character_Fill(L'_' ); break; //3/8
- case 0x78 : Character_Fill(L'_' ); break; //5/8
- case 0x79 : Character_Fill(L'_' ); break; //7/8
- case 0x7A : Character_Fill(L'+' ); break;
- case 0x7B : Character_Fill(L'+' ); break;
- case 0x7C : Character_Fill(L'+' ); break;
- case 0x7D : Character_Fill(L'+' ); break;
- case 0x7E : Character_Fill(L'+' ); break;
- case 0x7F : Character_Fill(L'+' ); break;
- //CEA-708-D, Section 7.1.9 (G3)
- case 0x80 : Character_Fill(L'_' ); break; //(CC)
- default :
- //CEA-708-D, Section 7.1.10 (C2)
- if (cc_data_2>=0x08 && cc_data_2<0x10)
- {
- Skip_B1( "EXT1 1 byte");
- Pos++;
- }
- else if (cc_data_2>=0x10 && cc_data_2<0x18)
- {
- Skip_B2( "EXT1 2 byte");
- Pos+=2;
- }
- else if (cc_data_2>=0x18 && cc_data_2<0x20)
- {
- Skip_B3( "EXT1 3 byte");
- Pos+=3;
- }
- //CEA-708-D, Section 7.1.11 (C3)
- else if (cc_data_2>=0x80 && cc_data_2<0x88)
- {
- Skip_B4( "EXT1 4 byte");
- Pos+=4;
- }
- else if (cc_data_2>=0x88 && cc_data_2<0x90)
- {
- Skip_B5( "EXT1 5 byte");
- Pos+=5;
- }
- else if (cc_data_2>=0x90 && cc_data_2<0xA0)
- {
- //CEA-708-D, Section 7.1.11.2 (Variable Length Codes)
- int8u Length;
- BS_Begin();
- Skip_S1(2, "Type");
- Mark_0();
- Get_S1 (5, Length, "Length");
- Skip_XX(Length, "Data");
- Pos+=1+Length;
- }
- //CEA-708-D, Section 7.1.9 (G3)
- else
- Character_Fill(L'_' );
- }
- }
- break;
- case 0x11 :
- case 0x12 :
- case 0x13 :
- case 0x14 :
- case 0x15 :
- case 0x16 :
- case 0x17 : //2-byte long undefined
- {
- Skip_B1( "Undefined");
- Pos++;
- }
- break;
- case 0x18 : //P16
- {
- Skip_B2( "P16");
- Pos+=2;
- }
- break;
- case 0x19 :
- case 0x1A :
- case 0x1B :
- case 0x1C :
- case 0x1D :
- case 0x1E :
- case 0x1F : //3-byte long undefined
- {
- Skip_B2( "Undefined");
- Pos+=2;
- }
- break;
- //CEA-708-D, Section 7.1.6 (G0)
- case 0x20 : Character_Fill(L' ' ); break;
- case 0x21 : Character_Fill(L'!' ); break;
- case 0x22 : Character_Fill(L'"' ); break;
- case 0x23 : Character_Fill(L'#' ); break;
- case 0x24 : Character_Fill(L'$' ); break;
- case 0x25 : Character_Fill(L'%' ); break;
- case 0x26 : Character_Fill(L'&' ); break;
- case 0x27 : Character_Fill(L'\'' ); break;
- case 0x28 : Character_Fill(L'(' ); break;
- case 0x29 : Character_Fill(L')' ); break;
- case 0x2A : Character_Fill(L'*' ); break;
- case 0x2B : Character_Fill(L'+' ); break;
- case 0x2C : Character_Fill(L',' ); break;
- case 0x2D : Character_Fill(L'-' ); break;
- case 0x2E : Character_Fill(L'.' ); break;
- case 0x2F : Character_Fill(L'/' ); break;
- case 0x30 : Character_Fill(L'0' ); break;
- case 0x31 : Character_Fill(L'1' ); break;
- case 0x32 : Character_Fill(L'2' ); break;
- case 0x33 : Character_Fill(L'3' ); break;
- case 0x34 : Character_Fill(L'4' ); break;
- case 0x35 : Character_Fill(L'5' ); break;
- case 0x36 : Character_Fill(L'6' ); break;
- case 0x37 : Character_Fill(L'7' ); break;
- case 0x38 : Character_Fill(L'8' ); break;
- case 0x39 : Character_Fill(L'9' ); break;
- case 0x3A : Character_Fill(L':' ); break;
- case 0x3B : Character_Fill(L';' ); break;
- case 0x3C : Character_Fill(L'<' ); break;
- case 0x3E : Character_Fill(L'>' ); break;
- case 0x3F : Character_Fill(L'?' ); break;
- case 0x40 : Character_Fill(L'@' ); break;
- case 0x41 : Character_Fill(L'A' ); break;
- case 0x42 : Character_Fill(L'B' ); break;
- case 0x43 : Character_Fill(L'C' ); break;
- case 0x44 : Character_Fill(L'D' ); break;
- case 0x45 : Character_Fill(L'E' ); break;
- case 0x46 : Character_Fill(L'F' ); break;
- case 0x47 : Character_Fill(L'G' ); break;
- case 0x48 : Character_Fill(L'H' ); break;
- case 0x49 : Character_Fill(L'I' ); break;
- case 0x4A : Character_Fill(L'J' ); break;
- case 0x4B : Character_Fill(L'K' ); break;
- case 0x4C : Character_Fill(L'L' ); break;
- case 0x4D : Character_Fill(L'M' ); break;
- case 0x4E : Character_Fill(L'N' ); break;
- case 0x4F : Character_Fill(L'O' ); break;
- case 0x50 : Character_Fill(L'P' ); break;
- case 0x51 : Character_Fill(L'Q' ); break;
- case 0x52 : Character_Fill(L'R' ); break;
- case 0x53 : Character_Fill(L'S' ); break;
- case 0x54 : Character_Fill(L'T' ); break;
- case 0x55 : Character_Fill(L'U' ); break;
- case 0x56 : Character_Fill(L'V' ); break;
- case 0x57 : Character_Fill(L'W' ); break;
- case 0x58 : Character_Fill(L'X' ); break;
- case 0x59 : Character_Fill(L'Y' ); break;
- case 0x5A : Character_Fill(L'Z' ); break;
- case 0x5B : Character_Fill(L'[' ); break;
- case 0x5C : Character_Fill(L'\\' ); break;
- case 0x5D : Character_Fill(L']' ); break;
- case 0x5E : Character_Fill(L'^' ); break;
- case 0x5F : Character_Fill(L'_' ); break;
- case 0x60 : Character_Fill(L'`' ); break;
- case 0x61 : Character_Fill(L'a' ); break;
- case 0x62 : Character_Fill(L'b' ); break;
- case 0x63 : Character_Fill(L'c' ); break;
- case 0x64 : Character_Fill(L'd' ); break;
- case 0x65 : Character_Fill(L'e' ); break;
- case 0x66 : Character_Fill(L'f' ); break;
- case 0x67 : Character_Fill(L'g' ); break;
- case 0x68 : Character_Fill(L'h' ); break;
- case 0x69 : Character_Fill(L'i' ); break;
- case 0x6A : Character_Fill(L'j' ); break;
- case 0x6B : Character_Fill(L'k' ); break;
- case 0x6C : Character_Fill(L'l' ); break;
- case 0x6D : Character_Fill(L'm' ); break;
- case 0x6E : Character_Fill(L'n' ); break;
- case 0x6F : Character_Fill(L'o' ); break;
- case 0x70 : Character_Fill(L'p' ); break;
- case 0x71 : Character_Fill(L'q' ); break;
- case 0x72 : Character_Fill(L'r' ); break;
- case 0x73 : Character_Fill(L's' ); break;
- case 0x74 : Character_Fill(L't' ); break;
- case 0x75 : Character_Fill(L'u' ); break;
- case 0x76 : Character_Fill(L'v' ); break;
- case 0x77 : Character_Fill(L'w' ); break;
- case 0x78 : Character_Fill(L'x' ); break;
- case 0x79 : Character_Fill(L'y' ); break;
- case 0x7A : Character_Fill(L'z' ); break;
- case 0x7B : Character_Fill(L'{' ); break;
- case 0x7C : Character_Fill(L'|' ); break;
- case 0x7D : Character_Fill(L'}' ); break;
- case 0x7E : Character_Fill(L'~' ); break;
- case 0x7F : Character_Fill(L'\x266A'); break;
- //CEA-708-D, Section 7.1.5 (C1)
- case 0x80 : //CW0
- case 0x81 : //CW1
- case 0x82 : //CW2
- case 0x83 : //CW3
- case 0x84 : //CW4
- case 0x85 : //CW5
- case 0x86 : //CW6
- case 0x87 : //CW7
- CWx(cc_data_1-0x80); break; //SetCurrentWindow
- case 0x88 : CLW(); Pos+=1; break; //ClearWindows
- case 0x89 : DSW(); Pos+=1; break; //DisplayWindows
- case 0x8A : HDW(); Pos+=1; break; //HideWindows
- case 0x8B : TGW(); Pos+=1; break; //ToggleWindows
- case 0x8C : DLW(); Pos+=1; break; //DeleteWindows
- case 0x8D : DLY(); Pos+=1; break; //Delay
- case 0x8E : DLC(); break; //Delay Cancel
- case 0x8F : RST(); break; //Reset
- case 0x90 : SPA(); Pos+=2; break; //SetPenAttributes
- case 0x91 : SPC(); Pos+=3; break; //SetPenColor
- case 0x92 : SPL(); Pos+=2; break; //SetPenLocation
- case 0x97 : SWA(); Pos+=5; break; //SetWindowAttributes
- case 0x98 : //DF0
- case 0x99 : //DF1
- case 0x9A : //DF2
- case 0x9B : //DF3
- case 0x9C : //DF4
- case 0x9D : //DF5
- case 0x9E : //DF6
- case 0x9F : //DF7
- DFx(cc_data_1-0x98); Pos+=6; break; //DefineWindow
- //CEA-708-D, Section 7.1.6 (G1)
- case 0xA0 : Character_Fill(L'\xA0' ); break;
- case 0xA1 : Character_Fill(L'\xA1' ); break;
- case 0xA2 : Character_Fill(L'\xA2' ); break;
- case 0xA3 : Character_Fill(L'\xA3' ); break;
- case 0xA4 : Character_Fill(L'\xA4' ); break;
- case 0xA5 : Character_Fill(L'\xA5' ); break;
- case 0xA6 : Character_Fill(L'\xA6' ); break;
- case 0xA7 : Character_Fill(L'\xA7' ); break;
- case 0xA8 : Character_Fill(L'\xA8' ); break;
- case 0xA9 : Character_Fill(L'\xA9' ); break;
- case 0xAA : Character_Fill(L'\xAA' ); break;
- case 0xAB : Character_Fill(L'\xAB' ); break;
- case 0xAC : Character_Fill(L'\xAC' ); break;
- case 0xAD : Character_Fill(L'\xAD' ); break;
- case 0xAE : Character_Fill(L'\xAE' ); break;
- case 0xAF : Character_Fill(L'\xAF' ); break;
- case 0xB0 : Character_Fill(L'\xB0' ); break;
- case 0xB1 : Character_Fill(L'\xB1' ); break;
- case 0xB2 : Character_Fill(L'\xB2' ); break;
- case 0xB3 : Character_Fill(L'\xB3' ); break;
- case 0xB4 : Character_Fill(L'\xB4' ); break;
- case 0xB5 : Character_Fill(L'\xB5' ); break;
- case 0xB6 : Character_Fill(L'\xB6' ); break;
- case 0xB7 : Character_Fill(L'\xB7' ); break;
- case 0xB8 : Character_Fill(L'\xB8' ); break;
- case 0xB9 : Character_Fill(L'\xB9' ); break;
- case 0xBA : Character_Fill(L'\xBA' ); break;
- case 0xBB : Character_Fill(L'\xBB' ); break;
- case 0xBC : Character_Fill(L'\xBC' ); break;
- case 0xBD : Character_Fill(L'\xBD' ); break;
- case 0xBE : Character_Fill(L'\xBE' ); break;
- case 0xBF : Character_Fill(L'\xBF' ); break;
- case 0xC0 : Character_Fill(L'\xC0' ); break;
- case 0xC1 : Character_Fill(L'\xC1' ); break;
- case 0xC2 : Character_Fill(L'\xC2' ); break;
- case 0xC3 : Character_Fill(L'\xC3' ); break;
- case 0xC4 : Character_Fill(L'\xC4' ); break;
- case 0xC5 : Character_Fill(L'\xC5' ); break;
- case 0xC6 : Character_Fill(L'\xC6' ); break;
- case 0xC7 : Character_Fill(L'\xC7' ); break;
- case 0xC8 : Character_Fill(L'\xC8' ); break;
- case 0xC9 : Character_Fill(L'\xC9' ); break;
- case 0xCA : Character_Fill(L'\xCA' ); break;
- case 0xCB : Character_Fill(L'\xCB' ); break;
- case 0xCC : Character_Fill(L'\xCC' ); break;
- case 0xCD : Character_Fill(L'\xCD' ); break;
- case 0xCE : Character_Fill(L'\xCE' ); break;
- case 0xCF : Character_Fill(L'\xCF' ); break;
- case 0xD0 : Character_Fill(L'\xD0' ); break;
- case 0xD1 : Character_Fill(L'\xD1' ); break;
- case 0xD2 : Character_Fill(L'\xD2' ); break;
- case 0xD3 : Character_Fill(L'\xD3' ); break;
- case 0xD4 : Character_Fill(L'\xD4' ); break;
- case 0xD5 : Character_Fill(L'\xD5' ); break;
- case 0xD6 : Character_Fill(L'\xD6' ); break;
- case 0xD7 : Character_Fill(L'\xD7' ); break;
- case 0xD8 : Character_Fill(L'\xD8' ); break;
- case 0xD9 : Character_Fill(L'\xD9' ); break;
- case 0xDA : Character_Fill(L'\xDA' ); break;
- case 0xDB : Character_Fill(L'\xDB' ); break;
- case 0xDC : Character_Fill(L'\xDC' ); break;
- case 0xDD : Character_Fill(L'\xDD' ); break;
- case 0xDE : Character_Fill(L'\xDE' ); break;
- case 0xDF : Character_Fill(L'\xDF' ); break;
- case 0xE0 : Character_Fill(L'\xE0' ); break;
- case 0xE1 : Character_Fill(L'\xE1' ); break;
- case 0xE2 : Character_Fill(L'\xE2' ); break;
- case 0xE3 : Character_Fill(L'\xE3' ); break;
- case 0xE4 : Character_Fill(L'\xE4' ); break;
- case 0xE5 : Character_Fill(L'\xE5' ); break;
- case 0xE6 : Character_Fill(L'\xE6' ); break;
- case 0xE7 : Character_Fill(L'\xE7' ); break;
- case 0xE8 : Character_Fill(L'\xE8' ); break;
- case 0xE9 : Character_Fill(L'\xE9' ); break;
- case 0xEA : Character_Fill(L'\xEA' ); break;
- case 0xEB : Character_Fill(L'\xEB' ); break;
- case 0xEC : Character_Fill(L'\xEC' ); break;
- case 0xED : Character_Fill(L'\xED' ); break;
- case 0xEE : Character_Fill(L'\xEE' ); break;
- case 0xEF : Character_Fill(L'\xEF' ); break;
- case 0xF0 : Character_Fill(L'\xF0' ); break;
- case 0xF1 : Character_Fill(L'\xF1' ); break;
- case 0xF2 : Character_Fill(L'\xF2' ); break;
- case 0xF3 : Character_Fill(L'\xF3' ); break;
- case 0xF4 : Character_Fill(L'\xF4' ); break;
- case 0xF5 : Character_Fill(L'\xF5' ); break;
- case 0xF6 : Character_Fill(L'\xF6' ); break;
- case 0xF7 : Character_Fill(L'\xF7' ); break;
- case 0xF8 : Character_Fill(L'\xF8' ); break;
- case 0xF9 : Character_Fill(L'\xF9' ); break;
- case 0xFA : Character_Fill(L'\xFA' ); break;
- case 0xFB : Character_Fill(L'\xFB' ); break;
- case 0xFC : Character_Fill(L'\xFC' ); break;
- case 0xFD : Character_Fill(L'\xFD' ); break;
- case 0xFE : Character_Fill(L'\xFE' ); break;
- case 0xFF : Character_Fill(L'\xFF' ); break;
- default : Illegal(1, cc_data_1);
- }
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//NUL
-void File_Eia708::NUL()
-{
-}
-
-//---------------------------------------------------------------------------
-//End Of Text
-void File_Eia708::ETX()
-{
-}
-
-//---------------------------------------------------------------------------
-//Backspace
-void File_Eia708::BS()
-{
- Param_Info1("Backspace");
-
- int8u WindowID=Streams[service_number]->WindowID;
- if (WindowID==(int8u)-1)
- return; //Must wait for the corresponding CWx
- window* Window=Streams[service_number]->Windows[WindowID];
- if (Window==NULL)
- return; //Must wait for the corresponding DFx
-
- if (Window->Minimal.x)
- {
- //Clearing window
- Window->Minimal.x--;
- Window->Minimal.CC[Window->Minimal.y][Window->Minimal.x]=character();
-
- if (Window->visible)
- {
- //Clearing global area
- if (Window->Minimal.Window_y+Window->Minimal.y<(int8u)Streams[service_number]->Minimal.CC.size() && Window->Minimal.Window_x+Window->Minimal.x<(int8u)Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Window->Minimal.y].size())
- Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Window->Minimal.y][Window->Minimal.Window_x+Window->Minimal.x]=character();
-
- //Has changed
- Window_HasChanged();
- HasChanged();
- }
- }
-}
-
-//---------------------------------------------------------------------------
-//Form Feed
-void File_Eia708::FF()
-{
- Param_Info1("Form Feed");
-
- int8u WindowID=Streams[service_number]->WindowID;
- if (WindowID==(int8u)-1)
- return; //Must wait for the corresponding CWx
- window* Window=Streams[service_number]->Windows[WindowID];
- if (Window==NULL)
- return; //Must wait for the corresponding DFx
-
- for (size_t Pos_Y=0; Pos_Y<Window->row_count; Pos_Y++)
- for (size_t Pos_X=0; Pos_X<Window->column_count; Pos_X++)
- {
- //Clearing window
- Streams[service_number]->Windows[Streams[service_number]->WindowID]->Minimal.CC[Pos_Y][Pos_X]=character();
-
- if (Window->visible)
- {
- //Clearing global area
- if (Window->Minimal.Window_y+Pos_Y<Streams[service_number]->Minimal.CC.size() && Window->Minimal.Window_x+Pos_X<Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y].size())
- Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y][Window->Minimal.Window_x+Pos_X]=character();
- }
- }
-
- if (Window->visible)
- {
- //Has changed
- Window_HasChanged();
- HasChanged();
- }
-
- //SetPenLocation
- Window->Minimal.x=0;
- Window->Minimal.y=0;
-}
-
-//---------------------------------------------------------------------------
-//Carriage return
-void File_Eia708::CR()
-{
- Param_Info1("Carriage return");
-
- int8u WindowID=Streams[service_number]->WindowID;
- if (WindowID==(int8u)-1)
- return; //Must wait for the corresponding CWx
- window* Window=Streams[service_number]->Windows[WindowID];
- if (Window==NULL)
- return; //Must wait for the corresponding DFx
- int8u y=Window->Minimal.y;
-
- y++;
- if (y>=Window->row_count)
- {
- //Rolling up window
- for (int8u Pos_Y=0; Pos_Y<Window->row_count-1; Pos_Y++)
- Window->Minimal.CC[Pos_Y]=Window->Minimal.CC[Pos_Y+1];
-
- //SetPenLocation
- y=Window->row_count-1;
-
- //Clearing last line of window
- for (int8u Pos_X=0; Pos_X<Window->column_count; Pos_X++)
- Window->Minimal.CC[y][Pos_X]=character();
-
- if (Window->visible)
- {
- //Updating global area
- for (int8u Pos_Y=0; Pos_Y<Window->row_count; Pos_Y++)
- for (int8u Pos_X=0; Pos_X<Window->column_count; Pos_X++)
- if (Window->Minimal.Window_y+Pos_Y<(int8u)Streams[service_number]->Minimal.CC.size() && Window->Minimal.Window_x+Pos_X<(int8u)Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y].size())
- Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y][Window->Minimal.Window_x+Pos_X]=Window->Minimal.CC[Pos_Y][Pos_X];
-
- //Has changed
- Window_HasChanged();
- HasChanged();
- }
- }
-
- //SetPenLocation
- Window->Minimal.x=0;
- Window->Minimal.y=y;
-}
-
-//---------------------------------------------------------------------------
-//Horizontal Carriage Return
-void File_Eia708::HCR()
-{
- Param_Info1("Horizontal Carriage Return");
-
- int8u WindowID=Streams[service_number]->WindowID;
- if (WindowID==(int8u)-1)
- return; //Must wait for the corresponding CWx
- window* Window=Streams[service_number]->Windows[WindowID];
- if (Window==NULL)
- return; //Must wait for the corresponding DFx
- int8u y=Window->Minimal.y;
-
- for (int8u Pos_X=0; Pos_X<Window->column_count; Pos_X++)
- {
- //Clearing window
- Streams[service_number]->Windows[Streams[service_number]->WindowID]->Minimal.CC[y][Pos_X]=character();
-
- if (Window->visible)
- {
- //Clearing global area
- if (Window->Minimal.Window_y+y<(int8u)Streams[service_number]->Minimal.CC.size() && Window->Minimal.Window_x+Pos_X<(int8u)Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Window->Minimal.y].size())
- Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+y][Window->Minimal.Window_x+Pos_X]=character();
-
- //Has changed
- Window_HasChanged();
- HasChanged();
- }
- }
-
- //SetPenLocation
- Window->Minimal.x=0;
-}
-
-//---------------------------------------------------------------------------
-//SetCurrentWindow
-void File_Eia708::CWx(int8u WindowID)
-{
- Param_Info1("SetCurrentWindow"); Param_Info1(WindowID);
-
- Streams[service_number]->WindowID=WindowID;
-}
-
-//---------------------------------------------------------------------------
-//ClearWindows
-void File_Eia708::CLW()
-{
- Param_Info1("ClearWindows");
-
- int8u Save_WindowID=Streams[service_number]->WindowID;
- bool Save_StandAloneCommand=StandAloneCommand;
- StandAloneCommand=false;
-
- Element_Begin1("ClearWindows");
- BS_Begin();
- int8u WindowID=8;
- bool HasChanged_=false;
- do
- {
- WindowID--;
- bool IsSet;
- Get_SB ( IsSet, Ztring(__T("window ")+Ztring::ToZtring(WindowID)).To_Local().c_str());
-
- if (IsSet)
- {
- Streams[service_number]->WindowID=WindowID;
- window* Window=Streams[service_number]->Windows[WindowID];
-
- //ClearWindow is like Form Feed
- FF();
-
- if (Window && Window->visible)
- {
- //Has changed
- HasChanged_=true;
- Window_HasChanged();
- }
- }
- }
- while (WindowID>0);
- BS_End();
- Element_End0();
-
- Streams[service_number]->WindowID=Save_WindowID;
- StandAloneCommand=Save_StandAloneCommand;
-
- if (HasChanged_)
- {
- //Has changed
- HasChanged();
- }
-}
-
-//---------------------------------------------------------------------------
-//DisplayWindows
-void File_Eia708::DSW()
-{
- Param_Info1("DisplayWindows");
-
- int8u Save_WindowID=Streams[service_number]->WindowID;
- bool Save_StandAloneCommand=StandAloneCommand;
- StandAloneCommand=false;
-
- Element_Begin1("DisplayWindows");
- BS_Begin();
- int8u WindowID=8;
- bool HasChanged_=false;
- do
- {
- WindowID--;
- bool IsSet;
- Get_SB ( IsSet, Ztring(__T("window ")+Ztring::ToZtring(WindowID)).To_Local().c_str());
-
- if (IsSet)
- {
- window* Window=Streams[service_number]->Windows[WindowID];
-
- if (Window && !Window->visible)
- {
- Window->visible=true;
-
- //Filling global area
- for (size_t Pos_Y=0; Pos_Y<Window->row_count; Pos_Y++)
- for (size_t Pos_X=0; Pos_X<Window->column_count; Pos_X++)
- {
- if (Window->Minimal.Window_y+Pos_Y<Streams[service_number]->Minimal.CC.size() && Window->Minimal.Window_x+Pos_X<Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y].size())
- Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y][Window->Minimal.Window_x+Pos_X]=Window->Minimal.CC[Pos_Y][Pos_X];
- }
-
- //Has changed
- HasChanged_=true;
- Window_HasChanged();
- }
- }
- }
- while (WindowID>0);
- BS_End();
- Element_End0();
-
- Streams[service_number]->WindowID=Save_WindowID;
- StandAloneCommand=Save_StandAloneCommand;
-
- if (HasChanged_)
- {
- //Has changed
- HasChanged();
- }
-}
-
-//---------------------------------------------------------------------------
-//HideWindows
-void File_Eia708::HDW()
-{
- Param_Info1("HideWindows");
-
- int8u Save_WindowID=Streams[service_number]->WindowID;
- bool Save_StandAloneCommand=StandAloneCommand;
- StandAloneCommand=false;
-
- Element_Begin1("HideWindows");
- BS_Begin();
- int8u WindowID=8;
- bool HasChanged_=false;
- do
- {
- WindowID--;
-
- bool IsSet;
- Get_SB ( IsSet, Ztring(__T("window ")+Ztring::ToZtring(WindowID)).To_Local().c_str());
-
- if (IsSet)
- {
- window* Window=Streams[service_number]->Windows[WindowID];
-
- if (Window && Window->visible)
- {
- Window->visible=false;
-
- for (size_t Pos_Y=0; Pos_Y<Window->row_count; Pos_Y++)
- for (size_t Pos_X=0; Pos_X<Window->column_count; Pos_X++)
- {
- //Clearing window
- Window->Minimal.CC[Pos_Y][Pos_X]=character();
-
- //Filling global area
- if (Window->Minimal.Window_y+Pos_Y<Streams[service_number]->Minimal.CC.size() && Window->Minimal.Window_x+Pos_X<Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y].size())
- Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y][Window->Minimal.Window_x+Pos_X]=character();
- }
-
- //Has changed
- HasChanged_=true;
- Window_HasChanged();
- }
- }
- }
- while (WindowID>0);
- BS_End();
- Element_End0();
-
- Streams[service_number]->WindowID=Save_WindowID;
- StandAloneCommand=Save_StandAloneCommand;
-
- if (HasChanged_)
- {
- //Has changed
- HasChanged();
- }
-}
-
-//---------------------------------------------------------------------------
-//ToggleWindows
-void File_Eia708::TGW()
-{
- Param_Info1("ToggleWindows");
-
- int8u Save_WindowID=Streams[service_number]->WindowID;
- bool Save_StandAloneCommand=StandAloneCommand;
- StandAloneCommand=false;
-
- Element_Begin1("ToggleWindows");
- BS_Begin();
- int8u WindowID=8;
- bool HasChanged_=false;
- do
- {
- WindowID--;
- bool IsSet;
- Get_SB ( IsSet, Ztring(__T("window ")+Ztring::ToZtring(WindowID)).To_Local().c_str());
-
- if (IsSet)
- {
- window* Window=Streams[service_number]->Windows[WindowID];
-
- if (Window)
- {
- Window->visible=!Window->visible;
-
- //Filling global area
- for (size_t Pos_Y=0; Pos_Y<Window->row_count; Pos_Y++)
- for (size_t Pos_X=0; Pos_X<Window->column_count; Pos_X++)
- {
- if (Window->Minimal.Window_y+Pos_Y<Streams[service_number]->Minimal.CC.size() && Window->Minimal.Window_x+Pos_X<Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y].size())
- Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y][Window->Minimal.Window_x+Pos_X]=Window->visible?Window->Minimal.CC[Pos_Y][Pos_X]:character();
- }
-
- //Has changed
- HasChanged_=true;
- Window_HasChanged();
- }
- }
- }
- while (WindowID>0);
- BS_End();
- Element_End0();
-
- Streams[service_number]->WindowID=Save_WindowID;
- StandAloneCommand=Save_StandAloneCommand;
-
- if (HasChanged_)
- {
- //Has changed
- HasChanged();
- }
-}
-
-//---------------------------------------------------------------------------
-//DeleteWindows
-void File_Eia708::DLW()
-{
- Param_Info1("DeleteWindows");
-
- int8u Save_WindowID=Streams[service_number]->WindowID;
- bool Save_StandAloneCommand=StandAloneCommand;
- StandAloneCommand=false;
-
- //Bug in some files
- bool Bug_WindowOffset=false;
-
- Element_Begin1("DeleteWindows");
- BS_Begin();
- int8u WindowID=8;
- bool HasChanged_=false;
- do
- {
- WindowID--;
- bool IsSet;
- Get_SB ( IsSet, Ztring(__T("window ")+Ztring::ToZtring(WindowID)).To_Local().c_str());
-
- //Bug in some files
- if (IsSet && WindowID==1 && Streams[service_number]->Windows[0]!=NULL && Streams[service_number]->Windows[1]==NULL) //Mix between Windows 0 and 1
- Bug_WindowOffset=true;
- if (!IsSet && WindowID==0 && Bug_WindowOffset)
- IsSet=true;
-
- if (IsSet)
- {
- window* Window=Streams[service_number]->Windows[WindowID];
-
- if (Window && Window->visible)
- {
- //Filling global area
- for (size_t Pos_Y=0; Pos_Y<Window->row_count; Pos_Y++)
- for (size_t Pos_X=0; Pos_X<Window->column_count; Pos_X++)
- {
- //Clearing window
- Window->Minimal.CC[Pos_Y][Pos_X]=character();
-
- //Filling global area
- if (Window->Minimal.Window_y+Pos_Y<Streams[service_number]->Minimal.CC.size() && Window->Minimal.Window_x+Pos_X<Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y].size())
- Streams[service_number]->Minimal.CC[Window->Minimal.Window_y+Pos_Y][Window->Minimal.Window_x+Pos_X]=character();
- }
-
- //Has changed
- HasChanged_=true;
- Window_HasChanged();
- }
-
- //Removing the window
- delete Streams[service_number]->Windows[WindowID]; Streams[service_number]->Windows[WindowID]=NULL;
- if (WindowID==Save_WindowID)
- Save_WindowID=(int8u)-1;
- }
- }
- while (WindowID>0);
- BS_End();
- Element_End0();
-
- Streams[service_number]->WindowID=Save_WindowID;
- StandAloneCommand=Save_StandAloneCommand;
-
- if (HasChanged_)
- {
- //Has changed
- HasChanged();
- }
-}
-
-//---------------------------------------------------------------------------
-//Delay
-void File_Eia708::DLY()
-{
- Param_Info1("Delay");
- Element_Begin1("Delay");
- Skip_B1( "tenths of seconds");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-//Delay Cancel
-void File_Eia708::DLC()
-{
- Param_Info1("Delay Cancel");
-}
-
-//---------------------------------------------------------------------------
-//Reset
-void File_Eia708::RST()
-{
- //TODO: Should clear all buffers
- Param_Info1("Reset");
-}
-
-//---------------------------------------------------------------------------
-//Set Pen Attributes
-void File_Eia708::SPA()
-{
- Param_Info1("Set Pen Attributes");
- Element_Begin1("Set Pen Attributes");
- BS_Begin();
- Skip_S1(4, "text tag");
- Skip_S1(2, "offset");
- Skip_S1(2, "pen size");
- Skip_SB( "italics");
- Skip_SB( "underline");
- Skip_S1(3, "edge type");
- Skip_S1(3, "font style");
- BS_End();
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-//Set Pen Color
-void File_Eia708::SPC()
-{
- Param_Info1("Set Pen Color");
- Element_Begin1("Set Pen Color");
- BS_Begin();
- Skip_S1(2, "foreground opacity");
- Skip_S1(2, "foreground red");
- Skip_S1(2, "foreground green");
- Skip_S1(2, "foreground blue");
- Skip_S1(2, "background opacity");
- Skip_S1(2, "background red");
- Skip_S1(2, "background green");
- Skip_S1(2, "background blue");
- Mark_0();
- Mark_0();
- Skip_S1(2, "edge red");
- Skip_S1(2, "edge green");
- Skip_S1(2, "edge blue");
- BS_End();
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-//SetPenLocation
-void File_Eia708::SPL()
-{
- Param_Info1("SetPenLocation");
- Element_Begin1("SetPenLocation");
- int8u row, column;
- BS_Begin();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Get_S1 (4, row, "row");
- Mark_0();
- Mark_0();
- Get_S1 (6, column, "column");
- BS_End();
- Element_End0();
-
- int8u WindowID=Streams[service_number]->WindowID;
- if (WindowID==(int8u)-1)
- return; //Must wait for the corresponding CWx
- window* Window=Streams[service_number]->Windows[WindowID];
- if (Window==NULL)
- return; //Must wait for the corresponding DFx
-
- if (row<Window->Minimal.CC.size() && column<Window->Minimal.CC[Window->Minimal.y].size())
- {
- Window->Minimal.x=column;
- Window->Minimal.y=row;
- }
- else
- {
- // There is a problem, resetting pen location
- Window->Minimal.x=0;
- Window->Minimal.y=0;
- }
-}
-
-//---------------------------------------------------------------------------
-//SetWindowAttributes
-void File_Eia708::SWA()
-{
- Param_Info1("SetWindowAttributes");
- Element_Begin1("SetWindowAttributes");
- BS_Begin();
- Skip_S1(2, "fill opacity");
- Skip_S1(2, "fill red");
- Skip_S1(2, "fill green");
- Skip_S1(2, "fill blue");
- Skip_S1(2, "border type (low)");
- Skip_S1(2, "border red");
- Skip_S1(2, "border green");
- Skip_S1(2, "border blue");
- Skip_SB( "border type (high)");
- Skip_SB( "wordwrap");
- Skip_S1(2, "print direction");
- Skip_S1(2, "scroll direction");
- Skip_S1(2, "justify");
- Skip_S1(4, "effect speed");
- Skip_S1(2, "effect direction");
- Skip_S1(2, "display effect");
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Skip_S1(2, "edge red");
- Skip_S1(2, "edge green");
- Skip_S1(2, "edge blue");
- BS_End();
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-//DefineWindow
-void File_Eia708::DFx(int8u WindowID)
-{
- Param_Info1("DefineWindow"); Param_Info1(WindowID);
- Element_Begin1("DefineWindow");
- int8u anchor_vertical, anchor_horizontal, anchor_point, row_count, column_count;
- bool visible, relative_positioning;
- BS_Begin();
- Mark_0();
- Mark_0();
- Get_SB ( visible, "visible");
- Skip_SB( "row lock");
- Skip_SB( "column lock");
- Skip_S1(3, "priority");
- Get_SB ( relative_positioning, "relative positioning");
- Get_S1 (7, anchor_vertical, "anchor vertical"); //Top left
- Get_S1 (8, anchor_horizontal, "anchor horizontal"); //Top left
- Get_S1 (4, anchor_point, "anchor point");
- Get_S1 (4, row_count, "row count"); //Maximum=14
- Mark_0();
- Mark_0();
- Get_S1 (6, column_count, "column count"); //Maximum=31
- Mark_0();
- Mark_0();
- Skip_S1(4, "window style");
- Skip_S1(2, "pen style ID");
- BS_End();
- Element_End0();
-
- Streams[service_number]->WindowID=WindowID;
- if (Streams[service_number]->Windows[WindowID]==NULL)
- Streams[service_number]->Windows[WindowID]=new window;
- window* Window=Streams[service_number]->Windows[WindowID];
- Window->visible=visible;
- Window->relative_positioning=relative_positioning;
- Window->anchor_vertical=anchor_vertical;
- if (relative_positioning)
- Window->Minimal.Window_y=(int8u)(((float)15)*anchor_vertical/100);
- else
- Window->Minimal.Window_y=anchor_vertical/5;
- Window->anchor_horizontal=anchor_horizontal;
- int8u offset_y;
- switch (anchor_point)
- {
- case 0 :
- case 1 :
- case 2 :
- offset_y=0;
- break;
- case 3 :
- case 4 :
- case 5 :
- offset_y=(row_count+1)/2;
- break;
- case 6 :
- case 7 :
- case 8 :
- offset_y=(row_count+1);
- break;
- default: offset_y=0; //Not valid
- }
- if (offset_y<Window->Minimal.Window_y)
- Window->Minimal.Window_y-=offset_y;
- if (relative_positioning)
- Window->Minimal.Window_x=(int8u)(24*AspectRatio*anchor_horizontal/100);
- else
- Window->Minimal.Window_x=anchor_horizontal/5;
- int8u offset_x;
- switch (anchor_point)
- {
- case 0 :
- case 3 :
- case 6 :
- offset_x=0;
- break;
- case 1 :
- case 4 :
- case 7 :
- offset_x=(column_count+1)/2;
- break;
- case 2 :
- case 5 :
- case 8 :
- offset_x=(column_count+1);
- break;
- default: offset_x=0; //Not valid
- }
- if (offset_x<Window->Minimal.Window_x)
- Window->Minimal.Window_x-=offset_x;
- Window->row_count=row_count+1;
- Window->column_count=column_count+1;
- Window->Minimal.x=0;
- Window->Minimal.y=0;
-
- if (Window->row_count>12)
- {
- Window->row_count=12; //Limitation of specifications
- }
- if (AspectRatio && Window->column_count>(int8u)(24*AspectRatio))
- {
- Window->column_count=(int8u)(24*AspectRatio); //Limitation of specifications
- }
- Window->Minimal.CC.resize(Window->row_count);
- for (int8u Pos_Y=0; Pos_Y<Window->row_count; Pos_Y++)
- Window->Minimal.CC[Pos_Y].resize(Window->column_count);
-
- if (Window->row_count>12)
- {
- Window->row_count=12; //Limitation of specifications
- }
- if (AspectRatio && Window->column_count>(int8u)(24*AspectRatio))
- {
- Window->column_count=(int8u)(24*AspectRatio); //Limitation of specifications
- }
- Window->Minimal.CC.resize(Window->row_count);
- for (int8u Pos_Y=0; Pos_Y<Window->row_count; Pos_Y++)
- Window->Minimal.CC[Pos_Y].resize(Window->column_count);
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Eia708::Character_Fill(wchar_t Character)
-{
- Param_Info1(Ztring().From_Unicode(&Character, 1)); //(Character) after new ZenLib release
-
- int8u WindowID=Streams[service_number]->WindowID;
- if (WindowID==(int8u)-1)
- return; //Must wait for the corresponding CWx
- window* Window=Streams[service_number]->Windows[WindowID];
- if (Window==NULL)
- return; //Must wait for the corresponding DFx
-
- int8u x=Window->Minimal.x;
- int8u y=Window->Minimal.y;
- int8u Window_x=Window->Minimal.Window_x;
- int8u Window_y=Window->Minimal.Window_y;
-
- if (x<Window->column_count && y<Window->row_count)
- {
- //Filling window
- Window->Minimal.CC[y][x].Value=Character;
-
- if (Window->visible)
- {
- //Filling global area
- if (Window_y+y<(int8u)Streams[service_number]->Minimal.CC.size() && Window_x+x<(int8u)Streams[service_number]->Minimal.CC[Window_y+y].size())
- Streams[service_number]->Minimal.CC[Window_y+y][Window_x+x].Value=Character;
-
- //Has changed
- Window_HasChanged();
- HasChanged();
- }
-
- x++;
- Window->Minimal.x=x;
- }
-
- if (!HasContent)
- HasContent=true;
- DataDetected|=((int64u)1)<<service_number; //1 bit per service
-}
-
-//---------------------------------------------------------------------------
-void File_Eia708::Window_HasChanged()
-{
-}
-
-//---------------------------------------------------------------------------
-void File_Eia708::HasChanged()
-{
-}
-
-//---------------------------------------------------------------------------
-void File_Eia708::Illegal(int8u Size, int8u cc_data_1, int8u cc_data_2, int8u cc_data_3, int8u cc_data_4, int8u cc_data_5, int8u cc_data_6)
-{
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_EIA708_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia708.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia708.h
deleted file mode 100644
index 029707d27..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Eia708.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PGS files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_Eia708H
-#define MediaInfo_File_Eia708H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-#include <string>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Eia708
-//***************************************************************************
-
-class File_Eia708 : public File__Analyze
-{
-public :
- //In
- int8u cc_type;
- float64 AspectRatio;
-
- //Constructor/Destructor
- File_Eia708();
- ~File_Eia708();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Global
- void Read_Buffer_Init();
- void Read_Buffer_Continue();
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Temp
- struct character
- {
- wchar_t Value;
- int8u Attribute;
-
- character()
- :
- Value(L' '),
- Attribute(0x00)
- {
- }
- };
- struct window
- {
- enum scroll_direction
- {
- Scroll_Direction_Unknown,
- Scroll_Direction_LeftToRight,
- Scroll_Direction_RightToLeft,
- Scroll_Direction_TopToBottom,
- };
- bool visible;
- scroll_direction Scroll_Direction;
- int8u row_count;
- int8u column_count;
- bool relative_positioning;
- int8u anchor_vertical;
- int8u anchor_horizontal;
- struct data
- {
- vector<vector<character> > CC;
- int8u Window_x; //x of the Windows, relative to the global area
- int8u Window_y;
- int8u x;
- int8u y;
-
- data()
- {
- Window_x=0;
- Window_y=0;
- x=0;
- y=0;
- }
- };
- data Minimal; //In characters
- int8u PenSize;
-
- window()
- {
- visible=false;
- Scroll_Direction=Scroll_Direction_Unknown;
- row_count=(int8u)-1;
- column_count=(int8u)-1;
- relative_positioning=false;
- anchor_vertical=(int8u)-1;
- anchor_horizontal=(int8u)-1;
- PenSize=1; //Standard
- }
- };
- struct stream
- {
- std::vector<window*> Windows;
- struct data
- {
- vector<vector<character> > CC;
- };
- data Minimal;
- int8u WindowID;
-
- stream()
- {
- WindowID=(int8u)-1;
- }
-
- ~stream()
- {
- for (size_t Pos=0; Pos<Windows.size(); Pos++)
- delete Windows[Pos]; //Windows[Pos]=NULL;
- }
- };
- std::vector<stream*> Streams;
- int8u service_number;
- int8u block_size;
- bool HasContent;
- int64u DataDetected; //1 service per bit
-
- //Elements
- void NUL(); //NUL
- void ETX(); //End Of Text
- void BS(); //Backspace
- void FF(); //Form Feed
- void CR(); //Carriage Return
- void HCR(); //Horizontal Carriage Return
- void CWx(int8u WindowID); //SetCurrentWindow
- void CLW(); //ClearWindows
- void DSW(); //DisplayWindows
- void HDW(); //HideWindows
- void TGW(); //ToggleWindows
- void DLW(); //DeleteWindows
- void DLY(); //Delay
- void DLC(); //Delay Cancel
- void RST(); //Reset
- void SPA(); //SetPenAttributes
- void SPC(); //SetPenColor
- void SPL(); //SetPenLocation
- void SWA(); //SetWindowAttributes
- void DFx(int8u WindowID); //DefineWindow
-
- //Temp
- bool StandAloneCommand; //If this is a command simulated from another command
-
- //Helpers
- void Service();
- void Character_Fill(wchar_t Character);
- void HasChanged();
- void Window_HasChanged();
- void Illegal(int8u Size, int8u cc_data_1, int8u cc_data_2=(int8u)-1, int8u cc_data_3=(int8u)-1, int8u cc_data_4=(int8u)-1, int8u cc_data_5=(int8u)-1, int8u cc_data_6=(int8u)-1);
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Kate.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Kate.cpp
deleted file mode 100644
index cad475547..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Kate.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Note : the buffer must be given in ONE call
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_KATE_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Kate.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring Kate_Category(const Ztring &Category)
-{
- //http://wiki.xiph.org/index.php/OggText#Categories_of_Text_Codecs
- if (Category==__T("CC"))
- return __T("Closed caption");
- if (Category==__T("SUB"))
- return __T("Subtitles");
- if (Category==__T("TAD"))
- return __T("Textual audio descriptions");
- if (Category==__T("KTV"))
- return __T("Karaoke");
- if (Category==__T("TIK"))
- return __T("Ticker text");
- if (Category==__T("AR"))
- return __T("Active regions");
- if (Category==__T("NB"))
- return __T("Semantic annotations");
- if (Category==__T("META"))
- return __T("Metadata, mostly machine-readable");
- if (Category==__T("TRX"))
- return __T("Transcript");
- if (Category==__T("LRC"))
- return __T("Lyrics");
- if (Category==__T("LIN"))
- return __T("Linguistic markup");
- if (Category==__T("CUE"))
- return __T("Cue points");
-
- //From Kate
- if (Category==__T("K-SLD-I"))
- return __T("Slides, as images");
- if (Category==__T("K-SLD-T"))
- return __T("Slides, as text");
- return Category;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Kate::Data_Parse()
-{
- //Parsing
- Identification();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Kate::Identification()
-{
- Element_Name("Identification");
-
- //Parsing
- Ztring Language, Category;
- int16u Width, Height;
- int8u VersionMajor, VersionMinor, NumHeaders, TextEncoding;
- Skip_B1 ( "Signature");
- Skip_Local(7, "Signature");
- Skip_L1( "Reserved");
- Get_L1 (VersionMajor, "version major");
- Get_L1 (VersionMinor, "version minor");
- Get_L1 (NumHeaders, "num headers");
- Get_L1 (TextEncoding, "text encoding");
- Skip_L1( "directionality");
- Skip_L1( "Reserved");
- Skip_L1( "granule shift");
- Skip_L4( "Reserved");
- Get_L2 (Width, "cw sh + canvas width");
- Get_L2 (Height, "ch sh + canvas height");
- /*
- BS_Begin();
- Skip_BS( 4, "cw sh");
- Get_BS (12, Width, "canvas width");
- Skip_BS( 4, "ch sh");
- Get_BS (12, Height, "canvas height");
- BS_End();
- */
- Skip_L4( "granule rate numerator");
- Skip_L4( "granule rate denominator");
- Get_UTF8(16, Language, "Language");
- Get_UTF8(16, Category, "Category");
-
- FILLING_BEGIN();
- Accept("Kate");
-
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Format, "Kate");
- Fill(Stream_Text, 0, Text_Codec, "Kate");
- Fill(Stream_Text, 0, Text_Language, Language);
- Fill(Stream_Text, 0, Text_Language_More, Kate_Category(Category));
-
- Finish("Kate");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_KATE_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Kate.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Kate.h
deleted file mode 100644
index 8e92cf8ef..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Kate.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Kate files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_KateH
-#define MediaInfo_File_KateH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Kate
-//***************************************************************************
-
-class File_Kate : public File__Analyze
-{
-private :
- //Buffer - Per element
- void Data_Parse();
-
- //Elements
- void Identification();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_N19.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_N19.cpp
deleted file mode 100644
index f7cc9240d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_N19.cpp
+++ /dev/null
@@ -1,442 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_N19_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_N19.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* N19_CodePageNumber(int32u CPN)
-{
- switch (CPN)
- {
- case 0x343337 : return "United States";
- case 0x383530 : return "Multilingual";
- case 0x383630 : return "Portugal";
- case 0x383633 : return "Canada-French";
- case 0x383635 : return "Nordic";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* N19_CharacterCodeTable(int16u CCT)
-{
- switch (CCT)
- {
- case 0x3030 : return "Latin, ISO 6937-2";
- case 0x3031 : return "Latin/Cyrillic, ISO 8859-5";
- case 0x3032 : return "Latin/Arabic, ISO 8859-6";
- case 0x3033 : return "Latin/Greek, ISO 8859-7";
- case 0x3034 : return "Latin/Hebrew, ISO 8859-8";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-float32 N19_DiskFormatCode_FrameRate(int64u DFC)
-{
- switch (DFC)
- {
- case 0x53544C32352E3031LL : return 25.000;
- case 0x53544C33302E3031LL : return 30.000;
- default : return 0.000;
- }
-}
-
-//---------------------------------------------------------------------------
-const char* N19_DisplayStandardCode(int8u DSC)
-{
- switch (DSC)
- {
- case 0x30 : return "Open subtitling";
- case 0x31 : return "Level-1 teletext";
- case 0x32 : return "Level-2 teletext";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* N19_LanguageCode(int16u LC)
-{
- switch (LC)
- {
- case 0x3030 : return "";
- case 0x3031 : return "sq";
- case 0x3032 : return "br";
- case 0x3033 : return "ca";
- case 0x3034 : return "hr";
- case 0x3035 : return "cy";
- case 0x3036 : return "cs";
- case 0x3037 : return "da";
- case 0x3038 : return "de";
- case 0x3039 : return "en";
- case 0x3041 : return "es";
- case 0x3042 : return "eo";
- case 0x3043 : return "et";
- case 0x3044 : return "eu";
- case 0x3045 : return "fo";
- case 0x3046 : return "fr";
- case 0x3130 : return "fy";
- case 0x3131 : return "ga";
- case 0x3132 : return "gd";
- case 0x3133 : return "gl";
- case 0x3134 : return "is";
- case 0x3135 : return "it";
- case 0x3136 : return "Lappish";
- case 0x3137 : return "la";
- case 0x3138 : return "lv";
- case 0x3139 : return "lb";
- case 0x3141 : return "lt";
- case 0x3142 : return "hu";
- case 0x3143 : return "mt";
- case 0x3144 : return "nl";
- case 0x3145 : return "no";
- case 0x3146 : return "oc";
- case 0x3230 : return "pl";
- case 0x3231 : return "pt";
- case 0x3232 : return "ro";
- case 0x3233 : return "Romansh";
- case 0x3234 : return "sr";
- case 0x3235 : return "sk";
- case 0x3236 : return "sl";
- case 0x3237 : return "fi";
- case 0x3238 : return "sv";
- case 0x3239 : return "tr";
- case 0x3241 : return "Flemish";
- case 0x3242 : return "wa";
- case 0x3435 : return "zu";
- case 0x3436 : return "vi";
- case 0x3437 : return "uz";
- case 0x3438 : return "ur";
- case 0x3439 : return "uk";
- case 0x3441 : return "th";
- case 0x3442 : return "te";
- case 0x3443 : return "tt";
- case 0x3444 : return "ta";
- case 0x3445 : return "Tadzhik";
- case 0x3446 : return "sw";
- case 0x3530 : return "Sranan Tongo";
- case 0x3531 : return "so";
- case 0x3532 : return "si";
- case 0x3533 : return "sn";
- case 0x3534 : return "sr";
- case 0x3535 : return "Ruthenian";
- case 0x3536 : return "ru";
- case 0x3537 : return "qu";
- case 0x3538 : return "ps";
- case 0x3539 : return "Punjabi";
- case 0x3541 : return "fa";
- case 0x3542 : return "Papamiento";
- case 0x3543 : return "or";
- case 0x3544 : return "ne";
- case 0x3545 : return "nr";
- case 0x3546 : return "mr";
- case 0x3630 : return "mo";
- case 0x3631 : return "ms";
- case 0x3632 : return "mg";
- case 0x3633 : return "mk";
- case 0x3634 : return "Laotian";
- case 0x3635 : return "kr";
- case 0x3636 : return "km";
- case 0x3637 : return "kk";
- case 0x3638 : return "kn";
- case 0x3639 : return "jp";
- case 0x3641 : return "id";
- case 0x3642 : return "hi";
- case 0x3643 : return "he";
- case 0x3644 : return "ha";
- case 0x3645 : return "Gurani";
- case 0x3646 : return "Gujurati";
- case 0x3730 : return "hr";
- case 0x3731 : return "ka";
- case 0x3732 : return "ff";
- case 0x3733 : return "Dari";
- case 0x3734 : return "Churash";
- case 0x3735 : return "zh";
- case 0x3736 : return "my";
- case 0x3737 : return "bg";
- case 0x3738 : return "bn";
- case 0x3739 : return "be";
- case 0x3741 : return "bm";
- case 0x3742 : return "az";
- case 0x3743 : return "as";
- case 0x3744 : return "hy";
- case 0x3745 : return "ar";
- case 0x3746 : return "am";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_N19::File_N19()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_N19;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_N19::FileHeader_Begin()
-{
- //Element_Size
- if (Buffer_Size<11)
- return false; //Must wait for more data
-
- int64u DiskFormatCode=CC8(Buffer+3);
- if (DiskFormatCode!=0x53544C32352E3031LL
- && DiskFormatCode!=0x53544C33302E3031LL)
- {
- Reject("N19");
- return false;
- }
-
- //Element_Size
- if (Buffer_Size<1024)
- return false; //Must wait for more data about GSI
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_N19::FileHeader_Parse()
-{
- Element_Name("General Subtitle Information");
-
- //Parsing
- Ztring OPT, RD, TNS, MNC, MNR, CO, EN;
- string TCP;
- int16u LC;
- int8u TCS;
- Info_C3 ( CPN, "CPN - Code Page Number"); Param_Info1(N19_CodePageNumber(CPN));
- Get_C8 ( DFC, "DFC - Disk Format Code"); Param_Info1(N19_DiskFormatCode_FrameRate(DFC));
- Info_C1 ( DSC, "DSC - Display Standard Code"); Param_Info1(N19_DisplayStandardCode(DSC));
- Get_C2 ( CCT, "CCT - Character Code Table number"); Param_Info1(N19_CharacterCodeTable(CCT));
- Get_C2 ( LC, "LC - Language Code"); Param_Info1(N19_LanguageCode(LC));
- Get_Local (32, OPT, "OPT - Original Programme Title");
- Skip_Local(32, "OET - Original Episode Title");
- Skip_Local(32, "TPT - Translated Programme");
- Skip_Local(32, "TET - Translated Episode");
- Skip_Local(32, "TN - Translator's Name");
- Skip_Local(32, "TCD - Translator's Contact Details");
- Skip_Local(16, "SLR - Subtitle List Reference Code");
- Skip_Local( 6, "CD - Creation Date");
- Get_Local ( 6, RD, "RD - Revision Date");
- Skip_C2 ( "RN - Revision number");
- Skip_C5 ( "TNB - Total Number of Text and Timing Information (TTI) blocks");
- Get_Local ( 5, TNS, "TNS - Total Number of Subtitles");
- Skip_C3 ( "TNG - Total Number of Subtitle Groups");
- Get_Local ( 2, MNC, "MNC - Maximum Number of Displayable Characters in any text row");
- Get_Local ( 2, MNR, "MNR - Maximum Number of Displayable Rows");
- Get_C1 ( TCS, "TCS - Time Code: Status");
- Get_String( 8, TCP, "TCP - Time Code: Start-of-Programme");
- Skip_Local( 8, "TCF - Time Code: First In-Cue");
- Skip_C1 ( "TND - Total Number of Disks");
- Skip_C1 ( "DSN - Disk Sequence Number");
- Get_Local ( 3, CO, "CO - Country of Origin");
- Skip_Local(32, "PUB - Publisher");
- Get_Local (32, EN, "EN - Editor's Name");
- Skip_Local(32, "ECD - Editor's Contact Details");
- Skip_XX(75, "Spare Bytes");
- Skip_XX(576, "UDA - User-Defined Area");
-
- FILLING_BEGIN();
- Accept("N19");
-
- Fill(Stream_General, 0, General_Format, "N19");
- Fill(Stream_General, 0, General_Title, OPT);
- RD.insert(0, __T("20"));
- RD.insert(4, __T("-"));
- RD.insert(7, __T("-"));
- Fill(Stream_General, 0, General_Recorded_Date, RD);
- Fill(Stream_General, 0, General_Country, Ztring(CO).MakeLowerCase());
- Fill(Stream_General, 0, General_DistributedBy, EN);
-
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Format, "N19");
- if (N19_DiskFormatCode_FrameRate(DFC))
- {
- Fill(Stream_Text, 0, "FrameRate", N19_DiskFormatCode_FrameRate(DFC));
- if (TCS==0x31 && TCP.size()==8
- && TCP[0]>='0' && TCP[0]<='9'
- && TCP[1]>='0' && TCP[1]<='9'
- && TCP[2]>='0' && TCP[2]<='6'
- && TCP[3]>='0' && TCP[3]<='9'
- && TCP[4]>='0' && TCP[4]<='6'
- && TCP[5]>='0' && TCP[5]<='9'
- && TCP[6]>='0' && TCP[6]<='2'
- && TCP[7]>='0' && TCP[7]<='9')
- {
- int32u Delay=0;
- Delay+=(((int32u)TCP[0])-'0')*10*60*60*1000;
- Delay+=(((int32u)TCP[1])-'0')* 60*60*1000;
- Delay+=(((int32u)TCP[2])-'0')* 10*60*1000;
- Delay+=(((int32u)TCP[3])-'0')* 60*1000;
- Delay+=(((int32u)TCP[4])-'0')* 10*1000;
- Delay+=(((int32u)TCP[5])-'0')* 1000;
- int8u Frames=0;
- Frames+=(((int8u)TCP[6])-'0')*10;
- Frames+=(((int8u)TCP[7])-'0');
- Delay+=float32_int32s(Frames*1000/N19_DiskFormatCode_FrameRate(DFC));
- //Fill(Stream_Text, 0, Text_Delay, Delay); //TODO is 0???
- /*TCP.insert(':', 2);
- TCP.insert(':', 5);
- TCP.insert(':', 8);
- Fill(Stream_Text, 0, "Delay/String4", TCP);*/
- }
- }
- Fill(Stream_Text, 0, Text_Width, MNC.To_int32u());
- Fill(Stream_Text, 0, Text_Width_String, Ztring::ToZtring(MNC.To_int32u())+__T(" characters"), true);
- Fill(Stream_Text, 0, Text_Height, MNR.To_int32u());
- Fill(Stream_Text, 0, Text_Height_String, Ztring::ToZtring(MNR.To_int32u())+__T(" characters"), true);
- Fill(Stream_Text, 0, Text_Language, N19_LanguageCode(LC));
-
- //Init
- FirstFrame_TCI=(int64u)-1;
- #if MEDIAINFO_DEMUX
- Frame_Count=0;
- TCO_Latest=(int64u)-1;
- #endif //MEDIAINFO_DEMUX
- FILLING_END();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_N19::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- #if MEDIAINFO_DEMUX
- TCO_Latest=(int64u)-1;
- #endif //MEDIAINFO_DEMUX
-
- GoTo(0x400);
- Open_Buffer_Unsynch();
- return 1;
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_N19::Header_Parse()
-{
- //Filling
- Header_Fill_Size(128);
- Header_Fill_Code(0, __T("TTI"));
-}
-
-//---------------------------------------------------------------------------
-void File_N19::Data_Parse()
-{
- //Parsing
- Ztring TF;
- int32u TCI, TCO;
- Skip_B1 ( "SGN - Subtitle Group Number");
- Skip_B2 ( "SN - Subtitle Number");
- Skip_B1 ( "EBN - Extension Block Number");
- Skip_B1 ( "CS - Cumulative Status");
- Get_B4 (TCI, "TCI - Time Code In");
- TCI=((TCI>>24)&0xFF)*60*60*1000
- + ((TCI>>16)&0xFF) *60*1000
- + ((TCI>>8 )&0xFF) *1000
- + float32_int32s((TCI &0xFF) *1000/N19_DiskFormatCode_FrameRate(DFC));
- Param_Info1(Ztring().Duration_From_Milliseconds((int64u)TCI));
- Get_B4 (TCO, "TCO - Time Code Out");
- TCO=((TCO>>24)&0xFF)*60*60*1000
- + ((TCO>>16)&0xFF) *60*1000
- + ((TCO>>8 )&0xFF) *1000
- + float32_int32s((TCO &0xFF) *1000/N19_DiskFormatCode_FrameRate(DFC));
- Param_Info1(Ztring().Duration_From_Milliseconds((int64u)TCO));
- Skip_B1 ( "VP - Vertical Position");
- Skip_B1 ( "JC - Justification Code");
- Skip_B1 ( "CF - Comment Flag");
- switch (CCT)
- {
- case 0x3030 : //Latin ISO 6937-2
- Get_ISO_6937_2(112, TF, "TF - Text Field");
- break;
- case 0x3031 : //Latin ISO 8859-5
- Get_ISO_8859_5(112, TF, "TF - Text Field");
- break;
- default:
- //Not yet supported, basic default
- Get_ISO_8859_1(112, TF, "TF - Text Field");
- }
- #if MEDIAINFO_TRACE
- TF.FindAndReplace(__T("\x8A"), EOL, 0, Ztring_Recursive);
- TF.FindAndReplace(__T("\x8F"), Ztring(), 0, Ztring_Recursive);
- Param_Info1(TF);
- #endif //MEDIAINFO_TRACE
-
- FILLING_BEGIN();
- if (FirstFrame_TCI==(int64u)-1)
- {
- FirstFrame_TCI=TCI;
- Fill(Stream_Text, 0, Text_Delay, TCI);
- Fill(Stream_Text, 0, Text_Delay_Source, "Container");
- }
- if (File_Offset+Buffer_Offset+Element_Size+128>File_Size)
- {
- Fill(Stream_Text, 0, Text_Duration, TCO-FirstFrame_TCI);
- }
- else if (Config->ParseSpeed<1.0)
- //Jumping
- GoToFromEnd(128, "N19");
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_N19_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_N19.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_N19.h
deleted file mode 100644
index 3c79dbcde..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_N19.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about N19 files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_N19H
-#define MediaInfo_File_N19H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_N19
-//***************************************************************************
-
-class File_N19 : public File__Analyze
-{
-public :
- File_N19();
-
-private :
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Temp
- int64u FirstFrame_TCI;
- int64u DFC;
- int16u CCT;
- #if MEDIAINFO_DEMUX
- int64u TCO_Latest;
- #endif //MEDIAINFO_DEMUX
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_OtherText.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_OtherText.cpp
deleted file mode 100644
index 824f5925e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_OtherText.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_OTHERTEXT_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_OtherText.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Functions
-//***************************************************************************
-
-void File_OtherText::Read_Buffer_Continue()
-{
- if (Buffer_Size<0x200)
- {
- Element_WaitForMoreData();
- return;
- }
-
- Element_Offset=File_Size-(File_Offset+Buffer_Offset);
-
- Ztring Format, FormatMore, Codec;
- Ztring File;
- ZtringList Lines;
-
- //Feed File and Lines
- File.From_UTF8((const char*)Buffer, Buffer_Size>65536?65536:Buffer_Size);
- if (File.empty())
- File.From_Local((const char*)Buffer, Buffer_Size>65536?65536:Buffer_Size); // Trying from local code page
- if (File.size()<0x100)
- {
- File.From_Unicode((wchar_t*)Buffer, 0, Buffer_Size/sizeof(wchar_t)); //Unicode with BOM
- //TODO: Order of bytes (big or Little endian)
- if (File.size()<0x100)
- {
- Reject("Other text");
- return;
- }
- }
- if (File.size()>0x1000)
- File.resize(0x1000); //Do not work on too big
- File.FindAndReplace(__T("\r\n"), __T("\n"), 0, Ztring_Recursive);
- File.FindAndReplace(__T("\r"), __T("\n"), 0, Ztring_Recursive);
- Lines.Separator_Set(0, __T("\n"));
- Lines.Write(File);
- Lines.resize(0x20);
-
- if (Lines[0]==__T("[Script Info]")
- && (Lines.Find(__T("ScriptType: v4.00"))!=Error || Lines.Find(__T("Script Type: V4.00"))!=Error)
- && Lines.Find(__T("[V4 Styles]"))!=Error
- )
- {
- Format=__T("SSA");
- FormatMore=__T("SubStation Alpha");
- Codec=__T("SSA");
- }
- else if (Lines[0]==__T("[Script Info]")
- && (Lines.Find(__T("ScriptType: v4.00+"))!=Error || Lines.Find(__T("Script Type: V4.00+"))!=Error)
- && Lines.Find(__T("[V4+ Styles]"))!=Error
- )
- {
- Format=__T("ASS");
- FormatMore=__T("Advanced SubStation Alpha");
- Codec=__T("ASS");
- }
- else if (Lines[0].size()>24
- && Lines[0][ 0]==__T('0') && Lines[0][ 1]==__T('0')
- && Lines[0][ 2]==__T(':') && Lines[0][ 5]==__T(':') && Lines[0][ 8]==__T(':')
- && Lines[0][11]==__T(' ')
- && Lines[0][12]==__T('0') && Lines[0][13]==__T('0')
- && Lines[0][14]==__T(':') && Lines[0][17]==__T(':') && Lines[0][20]==__T(':')
- && Lines[0][23]==__T(' ')
- )
- {
- Format=__T("Adobe encore DVD");
- Codec=__T("Adobe");
- }
- else if (Lines[0].size()==11
- && Lines[0][0]==__T('-') && Lines[0][1]==__T('-') && Lines[0][2]==__T('>') && Lines[0][3]==__T('>') && Lines[0][4]==__T(' ')
- && Lines[0][5]==__T('0')
- && Lines[1].empty()!=true
- )
- {
- Format=__T("AQTitle");
- Codec=__T("AQTitle");
- }
- else if (Lines[0].size()>28
- && Lines[0][ 0]==__T('0') && Lines[0][ 1]==__T('0')
- && Lines[0][ 2]==__T(':') && Lines[0][ 5]==__T(':') && Lines[0][ 8]==__T(':')
- && Lines[0][11]==__T(' ') && Lines[0][12]==__T(',') && Lines[0][13]==__T(' ')
- && Lines[0][14]==__T('0') && Lines[0][15]==__T('0')
- && Lines[0][16]==__T(':') && Lines[0][19]==__T(':') && Lines[0][22]==__T(':')
- && Lines[0][25]==__T(' ') && Lines[0][16]==__T(',') && Lines[0][27]==__T(' ')
- )
- {
- Format=__T("Captions 32");
- Codec=__T("Caption 32");
- }
- else if (Lines[0].size()==23
- && Lines[0]==__T("*Timecode type: PAL/EBU")
- && Lines[1].empty()
- && Lines[2].size()==23
- && Lines[2][ 0]==__T('0') && Lines[2][ 1]==__T('0')
- && Lines[2][ 2]==__T(':') && Lines[2][ 5]==__T(':') && Lines[2][ 8]==__T(':')
- && Lines[2][11]==__T(' ')
- && Lines[2][12]==__T('0') && Lines[2][13]==__T('0')
- && Lines[2][14]==__T(':') && Lines[2][17]==__T(':') && Lines[2][20]==__T(':')
- && Lines[2].size()>0
- )
- {
- Format=__T("Captions Inc");
- Codec=__T("Captions inc");
- }
- else if (Lines[0].size()>1
- && Lines[0][0]==__T('*')
- && Lines.Find(__T("** Caption Number 1"))!=Error
- )
- {
- Format=__T("Cheeta");
- }
- else if (Lines[0].size()>10
- && Lines[0][0]==__T('~') && Lines[0][1]==__T('C') && Lines[0][2]==__T('P') && Lines[0][3]==__T('C') && Lines[0][9]==__T('~')
- && Lines[1][ 0]==__T('0') && Lines[1][ 1]==__T('0')
- && Lines[1][ 2]==__T(':') && Lines[1][ 5]==__T(':') && Lines[1][ 8]==__T(':')
- )
- {
- Format=__T("CPC Captioning");
- Codec=__T("CPC Captioning");
- }
- else if (Lines[0].find(__T("<SAMI>"))==0)
- {
- Format=__T("SAMI");
- }
- else
- return;
-
- if (Format.empty())
- return;
-
- Accept("Other text");
-
- if (!IsSub)
- {
- Fill(Stream_General, 0, General_Format, Format);
- Fill(Stream_General, 0, General_Format_Info, FormatMore, true);
- }
-
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, Text_Format, Format);
- Fill(Stream_Text, 0, Text_Codec, Codec);
-
- //No more need data
- Element_Begin1(Format);
- Element_End0();
- Finish("Other text");
-}
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_OtherText.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_OtherText.h
deleted file mode 100644
index fcc129296..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_OtherText.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Use magic number to detect only the format (Text)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_OtherTextH
-#define MediaInfo_File_OtherTextH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_OtherText
-//***************************************************************************
-
-class File_OtherText : public File__Analyze
-{
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pdf.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pdf.cpp
deleted file mode 100644
index ed97ff96e..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pdf.cpp
+++ /dev/null
@@ -1,683 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PDF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Pdf.h"
-#include "MediaInfo/Tag/File_Xmp.h"
-#include <cstdlib>
-#include <algorithm>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Pdf::File_Pdf()
-:File__Analyze()
-{
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pdf::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "PDF");
-
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, "Format", "PDF");
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Pdf::FileHeader_Begin()
-{
- //Synchro
- if (5>Buffer_Size)
- return false;
- if (Buffer[0]!=0x25 //"%PDF-"
- || Buffer[1]!=0x50
- || Buffer[2]!=0x44
- || Buffer[3]!=0x46
- || Buffer[4]!=0x2D)
- {
- Reject();
- return false;
- }
-
- Accept();
-
- //Temp
- Catalog_Level=0;
- Offsets_Max=0;
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Pdf::FileHeader_Parse()
-{
- string PdfHeader;
- Get_String(SizeOfLine(), PdfHeader, "Header");
- for (;;)
- {
- int64u CommentSize=SizeOfLine();
- if (Buffer_Offset+Element_Offset>=Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
- if (Buffer[Buffer_Offset+Element_Offset]!='%')
- break;
- Skip_String(CommentSize, "Comment");
- }
-
- //Filling
- Fill(Stream_General, 0, General_Format_Version, PdfHeader.substr(5));
-
- GoToFromEnd(9+2+10+2+5+2); // "startxref" + EOL + 10max digits + EOL + "%%EOF" + EOL
- State=State_Parsing_startxref;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pdf::Read_Buffer_Continue()
-{
- switch (State)
- {
- case State_Parsing_xref : xref(); if (!Element_IsWaitingForMoreData()) trailer(); break;
- case State_Parsing_startxref : eof(); startxref(); break;
- case State_Parsing_object : break; //Using elements
- default : Finish();
- }
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Pdf::Header_Begin()
-{
- //Offsets_Current=Offsets.find(Objects_Current->second.Offset);
- //offsets::iterator Offsets_Next=Offsets_Current;
- //Offsets_Next++;
- //if (Offsets_Next!=Offsets.end() && Offsets_Next->first>File_Offset+Buffer_Size)
- //{
- // Element_WaitForMoreData();
- // return false;
- //}
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Pdf::Header_Parse()
-{
- offsets::iterator Offsets_Next=upper_bound(Offsets.begin(), Offsets.end(), (int32u)(File_Offset+Buffer_Offset));
- if (Offsets_Next!=Offsets.end() && *Offsets_Next>File_Offset+Buffer_Size)
- {
- Element_WaitForMoreData();
- return;
- }
-
- int64u Size;
- //if (Offsets_Current==Offsets.end())
- // Size=Offsets_Max-(File_Offset+Buffer_Offset);
- //else
- // Size=Offsets_Current->first-(File_Offset+Buffer_Offset);
- if (Offsets_Next==Offsets.end())
- Size=Offsets_Max-(File_Offset+Buffer_Offset);
- else
- Size=*Offsets_Next-(File_Offset+Buffer_Offset);
-
- Header_Fill_Size(Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Pdf::Data_Parse()
-{
- Element_Name("Object");
-
- string Line;
- Get_String(SizeOfLine(), Line, "Header");
-
- size_t Space_Pos=Line.find(' ');
- int32u ObjectNumber=Ztring().From_UTF8(Line.substr(0, Space_Pos)).To_int32u();
- Element_Info1(ObjectNumber);
- objects::iterator Object=Objects.find(ObjectNumber);
- if (Object==Objects.end())
- Skip_XX(Element_Size-Element_Offset, "Data");
- else
- switch(Object->second.Type)
- {
- case Type_Root : Object_Root(); break;
- case Type_Info : Object_Info(); break;
- case Type_Metadata : Object_Metadata(); break;
- default : Skip_XX(Element_Size-Element_Offset, "Data");
- }
-
- for (;;)
- {
- Objects_Current->second.BottomPos++;
- if (Objects_Current->second.BottomPos>=Objects_Current->second.Bottoms.size())
- {
- if (Objects_Current->first==(int32u)-1)
- {
- //No more to parse
- Objects_Current=Objects.end();
- Objects.clear();
- Finish();
- break;
- }
-
- Objects_Current=Objects.find(Objects_Current->second.TopObject);
- continue;
- }
-
- Objects_Current=Objects.find(Objects_Current->second.Bottoms[Objects_Current->second.BottomPos]);
- GoTo(Objects_Current->second.Offset);
- break;
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pdf::xref()
-{
- //Parsing
- Element_Begin1("Cross-Reference Table");
-
- Element_Begin1("Cross-Reference Section");
-
- string FirstLine;
- Skip_String(SizeOfLine(), "Object name");
- Element_Begin1("Cross-Reference SubSection");
- Get_String(SizeOfLine(), FirstLine, "Header");
- size_t FirstLine_Space=FirstLine.find(' ');
- int32u Base=atoi((const char*)FirstLine.c_str());
- int32u Count=0;
- if (FirstLine_Space!=string::npos)
- Count=atoi((const char*)FirstLine.c_str()+FirstLine_Space+1);
-
- if (0x10000+20*Count>Buffer_Size && File_Offset+Buffer_Size<File_Size)
- {
- // We wait for more data
- Buffer_Offset=0;
- Element_Offset=0;
- Element_DoNotShow();
- Element_End0();
- Element_End0();
- Element_End0();
- Element_WaitForMoreData();
- return;
- }
-
- while (Element_Offset<Element_Size && (Buffer[Buffer_Offset+(size_t)Element_Offset]=='\r' || Buffer[Buffer_Offset+(size_t)Element_Offset]=='\n'))
- Element_Offset++;
- const int8u* Buffer_Temp=Buffer+Buffer_Offset+(size_t)Element_Offset+17;
- for (int32u Pos=0; Pos<Count; ++Pos)
- {
- if (*Buffer_Temp=='n')
- {
- int32u Offset=(int32u)atoi((const char*)(Buffer_Temp-17));
- Objects[Base+Pos].Offset=Offset;
- //Offsets[Offset]=Base+Pos;
- Offsets.push_back(Offset);
- }
- Buffer_Temp+=20;
- if (Pos>100)
- Element_Offset+=20;
- else
- {
- Skip_String(18, "Entry"); Param_Info1(Base+Pos);
- Element_Offset+=2; //Skipping spaces at end and line return
- }
- }
- Element_End0();
-
- Element_End0();
-
- Element_End0();
-
- if (File_Offset+Buffer_Offset>Offsets_Max)
- Offsets_Max=(int32u)(File_Offset+Buffer_Offset);
-}
-
-//---------------------------------------------------------------------------
-void File_Pdf::trailer()
-{
- Element_Begin1("Trailer");
-
- //Parsing
- int32u Prev=(int32u)-1;
- string Key;
- Ztring Value;
- Skip_String(SizeOfLine(), "Object name");
- while (Element_Offset<Element_Size)
- {
- if (Get_Next(Key, Value))
- {
- for (;;)
- {
- Get_Next(Key, Value);
- if (Key.empty())
- break;
- else if (Key=="Root")
- {
- int32u ObjectNumber=Value.To_int32u();
- Objects[ObjectNumber].Type=Type_Root;
- Objects[ObjectNumber].TopObject=(int32u)-1;
- Objects[(int32u)-1].Bottoms.push_back(ObjectNumber);
- Param_Info1(__T("Document Catalog is at offset 0x"+Ztring().From_Number(Objects[ObjectNumber].Offset, 16)));
- }
- else if (Key=="Info")
- {
- int32u ObjectNumber=Value.To_int32u();
- Objects[ObjectNumber].Type=Type_Info;
- Objects[ObjectNumber].TopObject=(int32u)-1;
- Objects[(int32u)-1].Bottoms.push_back(ObjectNumber);
- Param_Info1(__T("Info is at offset 0x"+Ztring().From_Number(Objects[ObjectNumber].Offset, 16)));
- }
- else if (Key=="Prev")
- {
- Prev=Value.To_int32u();
- Param_Info1(__T("Previous Cross-Reference Table is at offset 0x"+Ztring().From_Number(Prev, 16)));
- }
- }
-
- continue;
- }
-
- if (Key.empty())
- break;
- }
-
- Element_End0();
-
- //Previous Cross-Reference Table
- if (Prev!=(int32u)-1)
- {
- GoTo(Prev);
- return;
- }
-
- objects::iterator Object_Top=Objects.find((int32u)-1);
- if (Offsets.empty() || Object_Top==Objects.end())
- {
- Finish();
- return;
- }
-
- sort(Offsets.begin(), Offsets.end());
-
- //Offsets_Current=Offsets.end(); //No more used for the moment
- Objects[(int32u)-1].BottomPos=0;
- Objects_Current=Objects.find(Object_Top->second.Bottoms[0]);
- GoTo(Objects_Current->second.Offset);
- State=State_Parsing_object;
-}
-
-//---------------------------------------------------------------------------
-void File_Pdf::startxref()
-{
- //We need to find the exact begin
- Buffer_Offset=Buffer_Size-1;
- while (Buffer_Offset && (Buffer[Buffer_Offset]=='\r' || Buffer[Buffer_Offset]=='\n'))
- Buffer_Offset--;
- Buffer_Offset-=5; // "%%EOF"
- while (Buffer_Offset && (Buffer[Buffer_Offset]=='\r' || Buffer[Buffer_Offset]=='\n'))
- Buffer_Offset--;
- while (Buffer_Offset && Buffer[Buffer_Offset]>='0' && Buffer[Buffer_Offset]<='9') // Value
- Buffer_Offset--;
- while (Buffer_Offset && (Buffer[Buffer_Offset]=='\r' || Buffer[Buffer_Offset]=='\n'))
- Buffer_Offset--;
-
- Buffer_Offset-=8;
-
- //Parsing
- Element_Begin1("Cross-Reference Table Offset");
-
- string xrefOffsetS;
- Skip_String(SizeOfLine(), "Object name");
- Get_String (SizeOfLine(), xrefOffsetS, "xref Offset");
- while (Buffer_Offset<Buffer_Size && (Buffer[Buffer_Offset]=='\r' || Buffer[Buffer_Offset]=='\n'))
- ++Buffer_Offset;
- int32u xref_Offset=atoi(xrefOffsetS.c_str());
-
- Element_End0();
-
- //Going to xref
- if (xref_Offset>Offsets_Max)
- Offsets_Max=xref_Offset;
- GoTo (xref_Offset);
- State=State_Parsing_xref;
-}
-
-//---------------------------------------------------------------------------
-void File_Pdf::eof()
-{
- if (File_Size!=(int64u)-1 && File_Offset+Buffer_Size<File_Size)
- {
- Element_WaitForMoreData();
- return;
- }
-
- //We need to find the exact begin
- Buffer_Offset=Buffer_Size-1;
- while (Buffer_Offset && (Buffer[Buffer_Offset]=='\r' || Buffer[Buffer_Offset]=='\n'))
- Buffer_Offset--;
-
- Buffer_Offset-=5;
-
- //Parsing
- Element_Begin1("End Of File");
-
- Skip_String(SizeOfLine(), "Object name");
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Pdf::Object_Root()
-{
- Element_Info1("Document Catalog");
-
- //Parsing
- string Key;
- Ztring Value;
- while (Element_Offset<Element_Size)
- {
- if (Get_Next(Key, Value))
- {
- for (;;)
- {
- Get_Next(Key, Value);
- if (Key.empty())
- break;
- else if (Key=="Metadata")
- {
- int32u ObjectNumber=Value.To_int32u();
- Objects[ObjectNumber].Type=Type_Metadata;
- Objects[ObjectNumber].TopObject=Objects_Current->first;
- Objects[Objects_Current->first].Bottoms.push_back(ObjectNumber);
- Param_Info1(__T("Metadata is at offset 0x"+Ztring().From_Number(Objects[ObjectNumber].Offset)));
- }
- }
-
- continue;
- }
-
- if (Key.empty())
- break;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Pdf::Object_Info()
-{
- Element_Info1("Info");
-
- //Parsing
- string Key;
- Ztring Value;
- while (Element_Offset<Element_Size)
- {
- if (Get_Next(Key, Value))
- {
- for (;;)
- {
- Get_Next(Key, Value);
- if (Key.empty())
- break;
- }
-
- continue;
- }
-
- if (Key.empty())
- break;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Pdf::Object_Metadata()
-{
- Element_Info1("Metadata");
-
- //Parsing
- string Key;
- Ztring Value;
- int32u Length=0;
- while (Element_Offset<Element_Size)
- {
- if (Get_Next(Key, Value))
- {
- for (;;)
- {
- Get_Next(Key, Value);
- if (Key.empty())
- break;
- else if (Key=="Length")
- {
- Length=Value.To_int32u();
- }
- }
-
- continue;
- }
-
- if (Key.empty())
- break;
- else if (Key=="stream")
- {
- //Removig end of lines
- if (Element_Offset<Element_Size && Buffer[Buffer_Offset+(size_t)Element_Offset]=='\r')
- Element_Offset++;
- if (Element_Offset<Element_Size && Buffer[Buffer_Offset+(size_t)Element_Offset]=='\n')
- Element_Offset++;
-
- File_Xmp MI;
- Open_Buffer_Init(&MI, Length);
- Open_Buffer_Continue(&MI, Buffer+Buffer_Offset+(size_t)Element_Offset, Length);
- Skip_XX(Length, "Stream, Data");
- Open_Buffer_Finalize(&MI);
- Merge(MI, Stream_General, 0, 0);
- }
- }
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-int64u File_Pdf::SizeOfLine()
-{
- //while (Element_Offset<Element_Size && (Buffer[Buffer_Offset+(size_t)Element_Offset]=='\r' || Buffer[Buffer_Offset+(size_t)Element_Offset]=='\n' || Buffer[Buffer_Offset+(size_t)Element_Offset]=='<' || Buffer[Buffer_Offset+(size_t)Element_Offset]=='>'))
- while (Element_Offset<Element_Size && (Buffer[Buffer_Offset+(size_t)Element_Offset]=='\r' || Buffer[Buffer_Offset+(size_t)Element_Offset]=='\n' || Buffer[Buffer_Offset+(size_t)Element_Offset]==' '))
- Element_Offset++;
- size_t End=Buffer_Offset+(size_t)Element_Offset;
- while (End<Buffer_Size && Buffer[End]!='\r' && Buffer[End]!='\n' && !(End+1<Buffer_Size && Buffer[End]=='<' && Buffer[End+1]=='<') && !(End+1<Buffer_Size && Buffer[End]=='>' && Buffer[End+1]=='>'))
- End++;
- return End-(Buffer_Offset+(size_t)Element_Offset);
-}
-
-//---------------------------------------------------------------------------
-bool File_Pdf::Get_Next(string &Key, Ztring &Value)
-{
- Key.clear();
- Value.clear();
-
- string Line;
-
- //Removig end of lines
- while (Element_Offset<Element_Size && (Buffer[Buffer_Offset+(size_t)Element_Offset]=='\r' || Buffer[Buffer_Offset+(size_t)Element_Offset]=='\n' || Buffer[Buffer_Offset+(size_t)Element_Offset]==' '))
- Element_Offset++;
-
- //End
- if (Element_Offset>=Element_Size)
- return true;
-
- //Testing Catalog
- Peek_String (2, Line);
- if (Line=="<<")
- {
- Element_Offset+=2;
- Catalog_Level++;
- return true;
- }
- else if (Line==">>")
- {
- Element_Offset+=2;
- Catalog_Level--;
- return true;
- }
-
- //Getting a complete line
- Peek_String (SizeOfLine(), Line);
-
- //Testing Catalog
- size_t Catalog_End=Line.find(">>");
- if (Catalog_End!=String::npos)
- Line.resize(Catalog_End);
-
- //Testing stream
- if (Line=="stream")
- {
- Skip_String(Line.size(), "Stream, Header");
- Key=Line;
- return false;
- }
- if (Line=="endstream")
- {
- Skip_String(Line.size(), "Stream, Footer");
- Key=Line;
- return false;
- }
-
- //Testing object
- if (Line=="endobj")
- {
- Skip_String(Line.size(), "Footer");
- Key=Line;
- return false;
- }
-
- //Base
- int64u Line_Base=Element_Offset;
-
- //Testing next key
- size_t Line_End=0;
- size_t Line_Begin=Line_End;
-
- // Key-Value
- if (Line_Begin<Line.size() && Line[Line_Begin]=='/')
- {
- Line_End= Line_Begin+1;
- size_t HasParenthesis=0;
- size_t HasBracket=0;
- size_t HasSpace=0;
- size_t HasValue=0;
- for (;;)
- {
- if (Line_End==Line.size())
- break;
-
- if (!HasParenthesis && !HasBracket && HasValue && Line[Line_End]=='<' && Line_End+1<Line.size() && Line[Line_End+1]=='<')
- break;
- if (!HasParenthesis && !HasBracket && HasValue && Line[Line_End]=='/')
- break;
- else if (!HasValue && Line[Line_End]=='/')
- ++HasValue;
- else if (!HasValue && HasSpace)
- ++HasValue;
-
- if (Line[Line_End]==' ')
- ++HasSpace;
-
- if (Line[Line_End]=='(')
- ++HasParenthesis;
- if (HasParenthesis && Line[Line_End]==')')
- --HasParenthesis;
-
- if (Line[Line_End]=='[')
- ++HasBracket;
- if (HasBracket && Line[Line_End]==']')
- --HasBracket;
-
- ++Line_End;
- }
- while(Line_End && Line[Line_End-1]==' ')
- Line_End--; //Removing trailing spaces
-
- Element_Offset=Line_Base+Line_Begin;
- string KeyValue;
- Get_String(Line_End-Line_Begin, KeyValue, "Key-Value");
-
- size_t Key_Max=KeyValue.find_first_of(" (");
- if (Key_Max==string::npos)
- Key_Max=KeyValue.size();
- Key=KeyValue.substr(1, Key_Max-1);
- size_t Value_Min=Key_Max;
- while (Value_Min<KeyValue.size() && KeyValue[Value_Min]==' ')
- ++Value_Min;
- if (Value_Min<KeyValue.size() && KeyValue[Value_Min]=='(')
- {
- ++Value_Min;
- size_t Value_Max=KeyValue.find(')', Value_Min);
- if (Value_Max!=string::npos)
- {
- //TODO
- Value.From_UTF8(KeyValue.c_str()+Value_Min, Value_Max-Value_Min);
- }
- else
- Value.From_UTF8(KeyValue.c_str()+Value_Min);
- }
- else
- Value.From_UTF8(KeyValue.c_str()+Value_Min);
- return false;
- }
-
- return false;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_PDF_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pdf.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pdf.h
deleted file mode 100644
index 2edf064e5..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pdf.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PDF files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_PdfH
-#define MediaInfo_File_PdfH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Sami
-//***************************************************************************
-
-class File_Pdf : public File__Analyze
-{
-public :
- File_Pdf();
-
-private :
- //Streams management
- void Streams_Accept();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-
- //Buffer - Per element
- bool Header_Begin();
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void obj();
- void xref();
- void trailer();
- void startxref();
- void eof();
- void Object_Root();
- void Object_Info();
- void Object_Metadata();
-
- //Helpers
- int64u SizeOfLine();
- bool Get_Next(string &Key, Ztring &Value); //Returns true if it is an array
-
- //Temp
- enum state
- {
- State_ParsingElements,
- State_Parsing_xref,
- State_Parsing_startxref,
- State_Parsing_object,
- };
- state State;
- //typedef std::map<int32u, int32u> offsets;
- //offsets Offsets; //Key is offset
- //offsets::iterator Offsets_Current;
- typedef std::vector<int32u> offsets;
- offsets Offsets;
- int32u Offsets_Max;
- enum type
- {
- Type_Root,
- Type_Info,
- Type_Metadata,
- Type_Other,
- };
- struct object
- {
- int32u Offset;
- type Type;
- int32u TopObject;
- size_t BottomPos;
- std::vector<int32u> Bottoms;
-
- object()
- :
- Offset((int32u)-1),
- #ifdef __BORLANDC__
- Type(type::Type_Other),
- #else
- Type(Type_Other),
- #endif
- TopObject((int32u)-1),
- BottomPos((size_t)-1)
- {
- }
-
- };
- typedef std::map<int32u, object> objects;
- objects Objects; //Key is object number
- objects::iterator Objects_Current;
-
- size_t Catalog_Level;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pgs.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pgs.cpp
deleted file mode 100644
index 5aa012ecd..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pgs.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PGS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Pgs.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pgs::Streams_Fill()
-{
- Stream_Prepare(Stream_Text); //TODO: This is currenlty only text
- Fill(Stream_Text, 0, Text_Format, "PGS");
- Fill(Stream_Text, 0, Text_Codec, "PGS");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Pgs::Read_Buffer_Continue()
-{
- Skip_XX(Element_Size, "PGS data");
-
- if (!Status[IsAccepted])
- {
- Accept("PGS");
- Finish("PGS");
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_PGS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pgs.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pgs.h
deleted file mode 100644
index 779f571d6..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Pgs.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about PGS files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_PgsH
-#define MediaInfo_File_PgsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Pgs
-//***************************************************************************
-
-class File_Pgs : public File__Analyze
-{
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scc.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scc.cpp
deleted file mode 100644
index dcebeae85..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scc.cpp
+++ /dev/null
@@ -1,275 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SCC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Scc.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "MediaInfo/Text/File_Eia608.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Utils
-//***************************************************************************
-
-int64u Scc_str2timecode(const char* Value)
-{
- size_t Length=strlen(Value);
- if (Length==11
- && Value[0]>='0' && Value[0]<='9'
- && Value[1]>='0' && Value[1]<='9'
- && Value[2]==':'
- && Value[3]>='0' && Value[3]<='9'
- && Value[4]>='0' && Value[4]<='9'
- && Value[5]==':'
- && Value[6]>='0' && Value[6]<='9'
- && Value[7]>='0' && Value[7]<='9'
- && (Value[8]==':' || Value[8]==';')
- && Value[9]>='0' && Value[9]<='9'
- && Value[10]>='0' && Value[10]<='9')
- {
- int64u ToReturn=(int64u)(Value[0]-'0')*10*60*60*1000000000
- +(int64u)(Value[1]-'0') *60*60*1000000000
- +(int64u)(Value[3]-'0') *10*60*1000000000
- +(int64u)(Value[4]-'0') *60*1000000000
- +(int64u)(Value[6]-'0') *10*1000000000
- +(int64u)(Value[7]-'0') *1000000000
- +(int64u)(Value[9]-'0') * 333333333
- +(int64u)(Value[10]-'0') * 33333333;
-
- return ToReturn;
- }
- else
- return (int64u)-1;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Scc::File_Scc()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("SCC");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Scc;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- PTS_DTS_Needed=true;
-
- //Temp
- Parser=NULL;
-}
-
-//---------------------------------------------------------------------------
-File_Scc::~File_Scc()
-{
- delete Parser; //Parser=NULL;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Scc::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- GoTo(0);
- Open_Buffer_Unsynch();
- return 1;
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-void File_Scc::Read_Buffer_Unsynched()
-{
- if (Parser)
- Parser->Open_Buffer_Unsynch();
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-void File_Scc::Read_Buffer_AfterParsing()
-{
- if (Parser && File_Offset+Buffer_Size==File_Size)
- Parser->Open_Buffer_Unsynch();
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Scc::Streams_Finish()
-{
- if (Parser && Parser->Status[IsAccepted])
- {
- Finish(Parser);
- for (size_t Pos2=0; Pos2<Parser->Count_Get(Stream_Text); Pos2++)
- {
- Stream_Prepare(Stream_Text);
- Merge(*Parser, Stream_Text, StreamPos_Last, Pos2);
- Fill(Stream_Text, StreamPos_Last, Text_ID, Parser->Retrieve(Stream_Text, Pos2, Text_ID), true);
- }
- }
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Scc::FileHeader_Begin()
-{
- //Element_Size
- if (File_Size<22)
- {
- Reject("N19");
- return false;
- }
- if (Buffer_Size<22)
- return false; //Must wait for more data
-
- if (Buffer[ 0]!=0x53
- || Buffer[ 1]!=0x63
- || Buffer[ 2]!=0x65
- || Buffer[ 3]!=0x6E
- || Buffer[ 4]!=0x61
- || Buffer[ 5]!=0x72
- || Buffer[ 6]!=0x69
- || Buffer[ 7]!=0x73
- || Buffer[ 8]!=0x74
- || Buffer[ 9]!=0x5F
- || Buffer[10]!=0x53
- || Buffer[11]!=0x43
- || Buffer[12]!=0x43
- || Buffer[13]!=0x20
- || Buffer[14]!=0x56
- || Buffer[15]!=0x31
- || Buffer[16]!=0x2E
- || Buffer[17]!=0x30
- )
- {
- Reject("SCC");
- return false;
- }
-
- //Element_Size
- if (Buffer_Size<File_Size)
- return false; //Must wait for more data
-
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Scc::FileHeader_Parse()
-{
- Skip_String(18, "Magic");
- while (Element_Offset<Buffer_Size)
- {
- if (Buffer[(size_t)Element_Offset]!=0x0D && Buffer[(size_t)Element_Offset]!=0x0A)
- break;
- Element_Offset++;
- }
-
- Accept();
- Fill(Stream_General, 0, General_Format, "SCC");
-
- //Init
- Parser=new File_Eia608();
- Open_Buffer_Init(Parser);
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Scc::Header_Parse()
-{
- size_t End=Buffer_Offset;
-
- //Content
- while (End<Buffer_Size)
- {
- if (Buffer[End]==0x0D || Buffer[End]==0x0A)
- break;
- End++;
- }
-
- //EOL
- while (End<Buffer_Size)
- {
- if (Buffer[End]!=0x0D && Buffer[End]!=0x0A)
- break;
- End++;
- }
-
- //Filling
- Header_Fill_Size(End-Buffer_Offset);
- Header_Fill_Code(0, __T("Block"));
-}
-
-//---------------------------------------------------------------------------
-void File_Scc::Data_Parse()
-{
- while (Element_Offset<Element_Size && (Buffer[Buffer_Offset+(size_t)Element_Offset]==0x0D || Buffer[Buffer_Offset+(size_t)Element_Offset]==0x0A))
- Element_Offset++;
- if (Element_Offset==Element_Size)
- return;
-
- //Parsing
- string TimeStamp;
- Get_String(11, TimeStamp, "TimeStamp");
- Parser->FrameInfo.DTS=Scc_str2timecode(TimeStamp.c_str());
- while (Element_Offset+5<=Element_Size)
- {
- int8u Buffer_Temp[2];
- Buffer_Temp[0]=(Buffer[Buffer_Offset+(size_t)Element_Offset+1]-(Buffer[Buffer_Offset+(size_t)Element_Offset+1]>='a'?('a'-10):'0'))<<4
- | (Buffer[Buffer_Offset+(size_t)Element_Offset+2]-(Buffer[Buffer_Offset+(size_t)Element_Offset+2]>='a'?('a'-10):'0'));
- Buffer_Temp[1]=(Buffer[Buffer_Offset+(size_t)Element_Offset+3]-(Buffer[Buffer_Offset+(size_t)Element_Offset+3]>='a'?('a'-10):'0'))<<4
- | (Buffer[Buffer_Offset+(size_t)Element_Offset+4]-(Buffer[Buffer_Offset+(size_t)Element_Offset+4]>='a'?('a'-10):'0'));
- Open_Buffer_Continue(Parser, Buffer_Temp, 2);
- Element_Offset+=5;
- if (Parser->FrameInfo.DTS!=(int64u)-1)
- Parser->FrameInfo.DTS+=33333333;
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_SCC_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scc.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scc.h
deleted file mode 100644
index d393c95ee..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scc.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about SCC (Scenarist Closed Captioning) files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_SccH
-#define MediaInfo_File_SccH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Scc
-//***************************************************************************
-
-class File_Scc : public File__Analyze
-{
-public :
- File_Scc();
- ~File_Scc();
-
-private :
- //Streams management
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- void Read_Buffer_Unsynched ();
- void Read_Buffer_AfterParsing ();
- #endif //MEDIAINFO_SEEK
-
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Temp
- File__Analyze* Parser;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scte20.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scte20.cpp
deleted file mode 100644
index 71d089419..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scte20.cpp
+++ /dev/null
@@ -1,278 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SCTE20_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Scte20.h"
-#if defined(MEDIAINFO_EIA608_YES)
- #include "MediaInfo/Text/File_Eia608.h"
-#endif
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
-#endif //MEDIAINFO_EVENTS
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Scte20_field_number (int8u field_number)
-{
- switch (field_number)
- {
- case 0 : return "Forbidden";
- case 1 : return "1st display field";
- case 2 : return "2nd display field";
- case 3 : return "3rd display field";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Scte20::File_Scte20()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("SCTE 20");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Scte20;
- StreamIDs_Width[0]=1;
- #endif //MEDIAINFO_EVENTS
- PTS_DTS_Needed=true;
-
- //In
- picture_structure=(int8u)-1;
- progressive_sequence=false;
- progressive_frame=false;
- top_field_first=false;
- repeat_first_field=false;
-
- //Temp
- Streams.resize(2); //CEA-608 Field 1, CEA-608 Field 2
- Streams_Count=0;
-}
-
-//---------------------------------------------------------------------------
-File_Scte20::~File_Scte20()
-{
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- delete Streams[Pos]; //Streams[Pos]=NULL
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Scte20::Streams_Update()
-{
- Clear(Stream_Text);
-
- //Per stream
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] && Streams[Pos]->Parser && Streams[Pos]->Parser->Status[IsFilled] /*&& Streams[Pos]->Parser->Status[IsUpdated]*/ && Streams[Pos]->Parser->Count_Get(Stream_Text))
- Streams_Update_PerStream(Pos);
-}
-
-//---------------------------------------------------------------------------
-void File_Scte20::Streams_Update_PerStream(size_t Pos)
-{
- if (Streams[Pos]==NULL)
- return;
-
- Update(Streams[Pos]->Parser);
-
- if (Streams[Pos]->Parser)
- {
- for (size_t Pos2=0; Pos2<Streams[Pos]->Parser->Count_Get(Stream_Text); Pos2++)
- {
- Stream_Prepare(Stream_Text);
- Merge(*Streams[Pos]->Parser, Stream_Text, Pos2, StreamPos_Last);
- Fill(Stream_Text, StreamPos_Last, "MuxingMode", "SCTE 20");
- Fill(Stream_Text, StreamPos_Last, Text_ID, Streams[Pos]->Parser->Retrieve(Stream_Text, Pos2, Text_ID), true);
- }
-
- Ztring LawRating=Streams[Pos]->Parser->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=Streams[Pos]->Parser->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Scte20::Streams_Finish()
-{
- Clear(Stream_Text);
-
- //Per stream
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] && Streams[Pos]->Parser && Streams[Pos]->Parser->Status[IsAccepted] /*&& Streams[Pos]->Parser->Status[IsUpdated]*/)
- {
- Finish(Streams[Pos]->Parser);
- Streams_Update_PerStream(Pos);
- }
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Scte20::Read_Buffer_Unsynched()
-{
- //Parsing
- for (size_t Pos=0; Pos<Streams.size(); Pos++)
- if (Streams[Pos] && Streams[Pos]->Parser)
- Streams[Pos]->Parser->Open_Buffer_Unsynch();
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-static inline int8u ReverseBits(int8u c)
-{
- // Input: bit order is 76543210
- //Output: bit order is 01234567
- c = (c & 0x0F) << 4 | (c & 0xF0) >> 4;
- c = (c & 0x33) << 2 | (c & 0xCC) >> 2;
- c = (c & 0x55) << 1 | (c & 0xAA) >> 1;
- return c;
-}
-
-//---------------------------------------------------------------------------
-void File_Scte20::Read_Buffer_Continue()
-{
- //Parsing
- Element_Begin1("SCTE 20");
- int8u cc_count;
- bool vbi_data_flag;
- BS_Begin();
- Mark_1_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Get_SB (vbi_data_flag, "vbi_data_flag");
- if (vbi_data_flag)
- {
- Get_S1 (5, cc_count, "cc_count");
- for (int8u Pos=0; Pos<cc_count; Pos++)
- {
- Element_Begin1("cc");
- int8u cc_data[2];
- int8u field_number, cc_data_1, cc_data_2;
- Skip_S1(2, "cc_priority");
- Get_S1 (2, field_number, "field_number"); Param_Info1(Scte20_field_number(field_number));
- Skip_S1(5, "line_offset");
- Get_S1 (8, cc_data_1, "cc_data_1");
- cc_data[0]=ReverseBits(cc_data_1);
- Param_Info1(Ztring::ToZtring(cc_data[0], 16));
- Get_S1 (8, cc_data_2, "cc_data_2");
- cc_data[1]=ReverseBits(cc_data_2);
- Param_Info1(Ztring::ToZtring(cc_data[1], 16));
- Mark_1_NoTrustError();
- if (field_number!=0 && picture_structure!=(int8u)-1 && picture_structure!=0)
- {
- Element_Begin1("cc_data");
-
- //Finding the corresponding cc_type (CEA-608 1st field or 2nd field)
- int8u cc_type;
- if (progressive_sequence)
- cc_type=0;
- else if (picture_structure!=3)
- cc_type=picture_structure-1;
- else if (field_number==2)
- cc_type=top_field_first?1:0;
- else //if (field_number==1 || field_number==3)
- cc_type=top_field_first?0:1;
-
- //Parsing
- #if MEDIAINFO_DEMUX
- Element_Code=cc_type;
- #endif //MEDIAINFO_DEMUX
- if (Streams[cc_type]==NULL)
- Streams[cc_type]=new stream;
- if (Streams[cc_type]->Parser==NULL)
- {
- #if defined(MEDIAINFO_EIA608_YES)
- Streams[cc_type]->Parser=new File_Eia608();
- ((File_Eia608*)Streams[cc_type]->Parser)->cc_type=cc_type;
- #else //defined(MEDIAINFO_EIA608_YES)
- Streams[cc_type]->Parser=new File__Analyze();
- #endif //defined(MEDIAINFO_EIA608_YES)
- Open_Buffer_Init(Streams[cc_type]->Parser);
- }
- Demux(cc_data, 2, ContentType_MainStream);
- if (!Streams[cc_type]->Parser->Status[IsFinished])
- {
- //Parsing
- if (Streams[cc_type]->Parser->PTS_DTS_Needed)
- {
- Streams[cc_type]->Parser->FrameInfo.PCR=FrameInfo.PCR;
- Streams[cc_type]->Parser->FrameInfo.PTS=FrameInfo.PTS;
- Streams[cc_type]->Parser->FrameInfo.DTS=FrameInfo.DTS;
- }
- Open_Buffer_Continue(Streams[cc_type]->Parser, cc_data, 2);
- Element_Show();
-
- //Filled
- if (!Status[IsAccepted])
- Accept("SCTE 20");
- }
- else
- Skip_XX(2, "Data");
- Element_End0();
- }
- Element_End0();
- }
- }
- Skip_S1(4, "non_real_time_video_count");
- BS_End();
-
- if (Element_Size-Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "non_real_time_video + reserved");
- Element_End0();
- Element_Show();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_SCTE20_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scte20.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scte20.h
deleted file mode 100644
index 1f9f71976..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Scte20.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about SCTE 20 streams
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Scte20H
-#define MediaInfo_Scte20H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Scte20
-//***************************************************************************
-
-class File_Scte20 : public File__Analyze
-{
-public :
- //In
- int8u picture_structure;
- bool progressive_sequence;
- bool progressive_frame;
- bool top_field_first;
- bool repeat_first_field;
-
- //Constructor/Destructor
- File_Scte20();
- ~File_Scte20();
-
-private :
- //Streams management
- void Streams_Update();
- void Streams_Update_PerStream(size_t Pos);
- void Streams_Finish();
-
- //Synchro
- void Read_Buffer_Unsynched();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-
- //Temp
- struct stream
- {
- File__Analyze* Parser;
- size_t StreamPos;
- bool IsFilled;
-
- stream()
- {
- Parser=NULL;
- StreamPos=(size_t)-1;
- IsFilled=false;
- }
-
- ~stream()
- {
- delete Parser; //Parser=NULL;
- }
- };
- std::vector<stream*> Streams;
- size_t Streams_Count;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_SubRip.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_SubRip.cpp
deleted file mode 100644
index 35140bbf1..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_SubRip.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_SUBRIP_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_SubRip.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Utils
-//***************************************************************************
-
-int64u SubRip_str2timecode(const char* Value)
-{
- size_t Length=strlen(Value);
- if (Length>=8
- && Value[0]>='0' && Value[0]<='9'
- && Value[1]>='0' && Value[1]<='9'
- && Value[2]==':'
- && Value[3]>='0' && Value[3]<='9'
- && Value[4]>='0' && Value[4]<='9'
- && Value[5]==':'
- && Value[6]>='0' && Value[6]<='9'
- && Value[7]>='0' && Value[7]<='9')
- {
- int64u ToReturn=(int64u)(Value[0]-'0')*10*60*60*1000000000
- +(int64u)(Value[1]-'0') *60*60*1000000000
- +(int64u)(Value[3]-'0') *10*60*1000000000
- +(int64u)(Value[4]-'0') *60*1000000000
- +(int64u)(Value[6]-'0') *10*1000000000
- +(int64u)(Value[7]-'0') *1000000000;
- if (Length>=9 && (Value[8]=='.' || Value[8]==','))
- {
- if (Length>9+9)
- Length=9+9; //Nanoseconds max
- const char* Value_End=Value+Length;
- Value+=9;
- int64u Multiplier=100000000;
- while (Value<Value_End)
- {
- ToReturn+=(int64u)(*Value-'0')*Multiplier;
- Multiplier/=10;
- Value++;
- }
- }
-
- return ToReturn;
- }
- else if (Length>=2
- && Value[Length-1]=='s')
- {
- return (int64u)(atof(Value)*1000000000);
- }
- else
- return (int64u)-1;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_SubRip::File_SubRip()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_SubRip;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
-
- //Init
- Frame_Count=0;
-
- //Temp
- IsVTT=false;
- HasBOM=false;
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_SubRip::FileHeader_Begin()
-{
- if (!IsSub && (Buffer_Size<File_Size && Buffer_Size<65536))
- {
- Element_WaitForMoreData();
- return false;
- }
-
- ZtringListList List;
- List.Separator_Set(0, __T("\n\n"));
- List.Separator_Set(1, __T("\n"));
-
- if (Buffer[0]==0xEF
- && Buffer[1]==0xBB
- && Buffer[2]==0xBF)
- HasBOM=true;
- bool IsLocal=false;
- Ztring Temp;
- Temp.From_UTF8((const char*)Buffer+(HasBOM?3:0), (Buffer_Size>65536?65536:Buffer_Size)-(HasBOM?3:0));
- if (Temp.empty())
- {
- Temp.From_Local((const char*)Buffer+(HasBOM?3:0), (Buffer_Size>65536?65536:Buffer_Size)-(HasBOM?3:0)); // Trying from local code page
- IsLocal=true;
- }
- Temp.FindAndReplace(__T("\r\n"), __T("\n"), 0, Ztring_Recursive);
- Temp.FindAndReplace(__T("\r"), __T("\n"), 0, Ztring_Recursive);
- List.Write(Temp);
-
- if (List(0, 0)==__T("WEBVTT FILE") || List(0, 0)==__T("WEBVTT"))
- IsVTT=true;
-
- if (!IsVTT)
- {
- size_t IsOk=0;
- size_t IsNok=0;
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (List(Pos, 0).To_int64u()==Pos+1)
- IsOk++;
- else
- IsNok++;
-
- if (List(Pos, 1).size()>22 && List(Pos, 1)[2]==__T(':') && List(Pos, 1)[5]==__T(':') && List(Pos, 1).find(__T(" --> "))!=string::npos)
- IsOk++;
- else
- IsNok++;
- }
-
- if (!IsOk || IsNok>IsOk/2)
- {
- Reject();
- return true;
- }
- }
-
- if (!IsSub && File_Size!=(int64u)-1 && Buffer_Size!=File_Size)
- {
- Element_WaitForMoreData();
- return false;
- }
-
- if (!Status[IsAccepted])
- {
- Accept();
- Fill(Stream_General, 0, General_Format, IsVTT?"WebVTT":"SubRip");
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, "Format", IsVTT?"WebVTT":"SubRip");
- Fill(Stream_Text, 0, "Codec", IsVTT?"WebVTT":"SubRip");
- }
-
- if (IsLocal)
- Temp.From_Local((const char*)Buffer+(HasBOM?3:0), Buffer_Size-(HasBOM?3:0));
- else
- Temp.From_UTF8((const char*)Buffer+(HasBOM?3:0), Buffer_Size-(HasBOM?3:0));
- Temp.FindAndReplace(__T("\r\n"), __T("\n"), 0, Ztring_Recursive);
- Temp.FindAndReplace(__T("\r"), __T("\n"), 0, Ztring_Recursive);
- List.Write(Temp);
-
- #if MEDIAINFO_DEMUX
- size_t Pos=0;
- for (;;)
- {
- if (Pos>=List.size())
- break;
-
- if (List[Pos].size()>=3 || (IsVTT && List[Pos].size()>=2))
- {
- Ztring PTS_Begin_String=List[Pos][IsVTT?0:1].SubString(Ztring(), __T(" --> "));
- Ztring PTS_End_String=List[Pos][IsVTT?0:1].SubString(__T(" --> "), Ztring());
- if (IsVTT)
- {
- size_t Extra_Pos=PTS_End_String.find(__T(' '));
- if (Extra_Pos!=string::npos)
- PTS_End_String.resize(Extra_Pos); //Discarding positioning
- }
- item Item;
- Item.PTS_Begin=SubRip_str2timecode(PTS_Begin_String.To_UTF8().c_str());
- Item.PTS_End=SubRip_str2timecode(PTS_End_String.To_UTF8().c_str());
- for (size_t Pos2=IsVTT?1:2; Pos2<List[Pos].size(); Pos2++)
- {
- List[Pos][Pos2].Trim();
- Item.Content+=List[Pos][Pos2];
- if (Pos2+1<List[Pos].size())
- Item.Content+=EOL;
- }
- Items.push_back(Item);
- }
-
- Pos++;
- }
- #endif //MEDIAINFO_DEMUX
-
- return true;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_SubRip::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- GoTo(0);
- Open_Buffer_Unsynch();
- return 1;
-}
-#endif //MEDIAINFO_SEEK
-
-//---------------------------------------------------------------------------
-void File_SubRip::Read_Buffer_Continue()
-{
- #if MEDIAINFO_DEMUX
- Demux(Buffer+(HasBOM?3:0), Buffer_Size-((HasBOM && Buffer_Size>=3)?3:0), ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- Buffer_Offset=Buffer_Size;
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_SUBRIP_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_SubRip.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_SubRip.h
deleted file mode 100644
index aeff2f773..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_SubRip.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about SubRip files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_SubRipH
-#define MediaInfo_File_SubRipH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_SubRip
-//***************************************************************************
-
-class File_SubRip : public File__Analyze
-{
-public :
- File_SubRip();
-
-private :
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- void Read_Buffer_Continue();
-
- //Temp
- bool IsVTT;
- bool HasBOM;
- #if MEDIAINFO_DEMUX
- struct item
- {
- int64u PTS_Begin;
- int64u PTS_End;
- Ztring Content;
- };
- std::vector<item> Items;
- #endif //MEDIAINFO_DEMUX
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Teletext.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Teletext.cpp
deleted file mode 100644
index 851646941..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Teletext.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DVBSUBTITLE_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Teletext.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Teletext::File_Teletext()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("Teletext");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Teletext;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- PTS_DTS_Needed=true;
- IsRawStream=true;
-}
-
-//---------------------------------------------------------------------------
-File_Teletext::~File_Teletext()
-{
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Teletext::Streams_Fill()
-{
- Stream_Prepare(Stream_Text);
-}
-
-//---------------------------------------------------------------------------
-void File_Teletext::Streams_Finish()
-{
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Teletext::Read_Buffer_Continue()
-{
- Fill();
- Finish();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_DVBSUBTITLE_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Teletext.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Teletext.h
deleted file mode 100644
index e52f3dede..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Teletext.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Teletext streams
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TeletextH
-#define MediaInfo_File_TeletextH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Teletext
-//***************************************************************************
-
-class File_Teletext : public File__Analyze
-{
-public :
- File_Teletext();
- ~File_Teletext();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_TimedText.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_TimedText.cpp
deleted file mode 100644
index 0c3c2c8d8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_TimedText.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_TIMEDTEXT_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_TimedText.h"
-#include "tinyxml2.h"
-using namespace tinyxml2;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_TimedText::File_TimedText()
-{
- //Configuration
- ParserName=__T("Timed Text");
-
- //Temp
- #ifdef MEDIAINFO_MPEG4_YES
- IsChapter=false;
- #endif //MEDIAINFO_MPEG4_YES
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_TimedText::Header_Parse()
-{
- //Parsing
- int16u Size;
- Get_B2 (Size, "Size");
-
- //Filling
- Header_Fill_Code(0, "Block");
- Header_Fill_Size(Element_Offset+Size);
-}
-
-//---------------------------------------------------------------------------
-void File_TimedText::Data_Parse()
-{
- //Parsing
- Ztring Value;
- Get_UTF8 (Element_Size, Value, "Value");
-
- FILLING_BEGIN();
- if (!Status[IsAccepted])
- {
- Accept();
- #ifdef MEDIAINFO_MPEG4_YES
- if (IsChapter)
- {
- Stream_Prepare(Stream_Menu);
- }
- else
- #endif //MEDIAINFO_MPEG4_YES
- {
- Stream_Prepare(Stream_Text);
- }
- Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Format), "Timed Text");
- }
- #ifdef MEDIAINFO_MPEG4_YES
- if (IsChapter)
- {
- }
- else
- #endif //MEDIAINFO_MPEG4_YES
- {
- Finish();
- }
-
- #ifdef MEDIAINFO_MPEG4_YES
- if (IsChapter && FrameInfo.DTS!=(int64u)-1 && Buffer_Offset==2)
- Fill(Stream_Menu, 0, Ztring().Duration_From_Milliseconds(FrameInfo.DTS/1000000).To_UTF8().c_str(), Value);
- #endif //MEDIAINFO_MPEG4_YES
- FILLING_END();
-
- Element_Offset=Buffer_Size-Buffer_Offset; //Buffer can also contain atoms after the text, ignoring them
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_TIMEDTEXT_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_TimedText.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_TimedText.h
deleted file mode 100644
index 31420b4ed..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_TimedText.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Timed Text (MPEG-4 Part 17)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TimedTextH
-#define MediaInfo_File_TimedTextH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Sami
-//***************************************************************************
-
-class File_TimedText : public File__Analyze
-{
-public:
- //Constructor/Destructor
- File_TimedText();
-
- #ifdef MEDIAINFO_MPEG4_YES
- bool IsChapter;
- #endif //MEDIAINFO_MPEG4_YES
-
-private :
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Ttml.cpp b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Ttml.cpp
deleted file mode 100644
index fd4276d2f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Ttml.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_TTML_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Text/File_Ttml.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-#include "tinyxml2.h"
-#include <cstring>
-using namespace tinyxml2;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Utils
-//***************************************************************************
-
-int64u Ttml_str2timecode(const char* Value)
-{
- size_t Length=strlen(Value);
- if (Length>=8
- && Value[0]>='0' && Value[0]<='9'
- && Value[1]>='0' && Value[1]<='9'
- && Value[2]==':'
- && Value[3]>='0' && Value[3]<='9'
- && Value[4]>='0' && Value[4]<='9'
- && Value[5]==':'
- && Value[6]>='0' && Value[6]<='9'
- && Value[7]>='0' && Value[7]<='9')
- {
- int64u ToReturn=(int64u)(Value[0]-'0')*10*60*60*1000000000
- +(int64u)(Value[1]-'0') *60*60*1000000000
- +(int64u)(Value[3]-'0') *10*60*1000000000
- +(int64u)(Value[4]-'0') *60*1000000000
- +(int64u)(Value[6]-'0') *10*1000000000
- +(int64u)(Value[7]-'0') *1000000000;
- if (Length>=9 && (Value[8]=='.' || Value[8]==','))
- {
- if (Length>9+9)
- Length=9+9; //Nanoseconds max
- const char* Value_End=Value+Length;
- Value+=9;
- int64u Multiplier=100000000;
- while (Value<Value_End)
- {
- ToReturn+=(int64u)(*Value-'0')*Multiplier;
- Multiplier/=10;
- Value++;
- }
- }
-
- return ToReturn;
- }
- else if (Length>=2
- && Value[Length-1]=='s')
- {
- return (int64u)(atof(Value)*1000000000);
- }
- else
- return (int64u)-1;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ttml::File_Ttml()
-:File__Analyze()
-{
- //Configuration
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Ttml;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
-
- //Init
- Frame_Count=0;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ttml::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "TTML");
-
- Stream_Prepare(Stream_Text);
- Fill(Stream_Text, 0, "Format", "TTML");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_SEEK
-size_t File_Ttml::Read_Buffer_Seek (size_t Method, int64u Value, int64u ID)
-{
- GoTo(0);
- Open_Buffer_Unsynch();
- return 1;
-}
-#endif //MEDIAINFO_SEEK
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Ttml::FileHeader_Begin()
-{
- //All should be OK...
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Ttml::Read_Buffer_Continue()
-{
- tinyxml2::XMLDocument document;
-
- if (!FileHeader_Begin_XML(document))
- return;
-
- XMLElement* Root=document.FirstChildElement("tt");
- if (!Root)
- {
- Reject();
- return;
- }
-
- if (!Status[IsAccepted])
- {
- Accept();
-
- #if MEDIAINFO_EVENTS
- MuxingMode=(int8u)-1;
- if (StreamIDs_Size>=2 && ParserIDs[StreamIDs_Size-2]==MediaInfo_Parser_Mpeg4)
- MuxingMode=11; //MPEG-4
- #endif MEDIAINFO_EVENTS
- }
-
- tinyxml2::XMLElement* div=NULL;
- #if MEDIAINFO_EVENTS
- tinyxml2::XMLElement* p=NULL;
- #endif //MEDIAINFO_EVENTS
- for (XMLElement* tt_element=Root->FirstChildElement(); tt_element; tt_element=tt_element->NextSiblingElement())
- {
- //body
- if (!strcmp(tt_element->Value(), "body"))
- {
- for (XMLElement* body_element=tt_element->FirstChildElement(); body_element; body_element=body_element->NextSiblingElement())
- {
- //div
- if (!strcmp(body_element->Value(), "div"))
- {
- for (XMLElement* div_element=body_element->FirstChildElement(); div_element; div_element=div_element->NextSiblingElement())
- {
- //p
- if (!strcmp(div_element->Value(), "p"))
- {
- div=body_element;
- #if MEDIAINFO_EVENTS
- p=div_element;
- #endif //MEDIAINFO_EVENTS
- break;
- }
- }
-
- if (div)
- break;
- }
- }
-
- if (div)
- break;
- }
- }
-
- #if MEDIAINFO_DEMUX
- Demux(Buffer, Buffer_Size, ContentType_MainStream);
- #endif //MEDIAINFO_DEMUX
-
- // Output
- #if MEDIAINFO_EVENTS
- for (; p; p=p->NextSiblingElement())
- {
- //p
- if (!strcmp(p->Value(), "p"))
- {
- const char* Attribute;
-
- int64u DTS_Begin=(int64u)-1;
- Attribute=p->Attribute("begin");
- if (Attribute)
- DTS_Begin=Ttml_str2timecode(Attribute);
- int64u DTS_End=(int64u)-1;
- Attribute=p->Attribute("end");
- if (Attribute)
- DTS_End=Ttml_str2timecode(Attribute);
- Ztring Content; if (p->FirstChild()) Content.From_UTF8(p->FirstChild()->Value());
-
- Frame_Count++;
- }
- }
- #endif MEDIAINFO_EVENTS
-
- Buffer_Offset=Buffer_Size;
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_TTML_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Ttml.h b/src/thirdparty/MediaInfo/MediaInfo/Text/File_Ttml.h
deleted file mode 100644
index 6d01d633c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Text/File_Ttml.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about TTML files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TtmlH
-#define MediaInfo_File_TtmlH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace tinyxml2
-{
- class XMLDocument;
- class XMLElement;
-}
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Sami
-//***************************************************************************
-
-class File_Ttml : public File__Analyze
-{
-public :
- File_Ttml();
-
- #if MEDIAINFO_EVENTS
- int8u MuxingMode;
- #endif MEDIAINFO_EVENTS
-
-private :
- //Streams management
- void Streams_Accept();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Global
- #if MEDIAINFO_SEEK
- size_t Read_Buffer_Seek (size_t Method, int64u Value, int64u ID);
- #endif //MEDIAINFO_SEEK
- void Read_Buffer_Continue();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/TimeCode.cpp b/src/thirdparty/MediaInfo/MediaInfo/TimeCode.cpp
deleted file mode 100644
index a8c6a0796..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/TimeCode.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/TimeCode.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-TimeCode::TimeCode ()
-: Hours((int8u)-1),
- Minutes((int8u)-1),
- Seconds((int8u)-1),
- Frames((int8u)-1),
- FramesPerSecond(0),
- DropFrame(false),
- MustUseSecondField(false),
- IsSecondField(false),
- IsNegative(false)
-{
-}
-
-//---------------------------------------------------------------------------
-TimeCode::TimeCode (int8u Hours_, int8u Minutes_, int8u Seconds_, int8u Frames_, int8u FramesPerSecond_, bool DropFrame_, bool MustUseSecondField_, bool IsSecondField_)
-: Hours(Hours_),
- Minutes(Minutes_),
- Seconds(Seconds_),
- Frames(Frames_),
- FramesPerSecond(FramesPerSecond_),
- DropFrame(DropFrame_),
- MustUseSecondField(MustUseSecondField_),
- IsSecondField(IsSecondField_),
- IsNegative(false)
-{
-}
-
-//---------------------------------------------------------------------------
-TimeCode::TimeCode (int64s Frames_, int8u FramesPerSecond_, bool DropFrame_, bool MustUseSecondField_, bool IsSecondField_)
-: FramesPerSecond(FramesPerSecond_),
- DropFrame(DropFrame_),
- MustUseSecondField(MustUseSecondField_),
- IsSecondField(IsSecondField_)
-{
- if (Frames_<0)
- {
- IsNegative=true;
- Frames_=-Frames_;
- }
- else
- IsNegative=false;
-
- int8u Dropped=0;
- if (DropFrame_)
- {
- Dropped=2;
- if (FramesPerSecond_>30)
- Dropped+=2;
- if (FramesPerSecond_>60)
- Dropped+=2;
- if (FramesPerSecond_>90)
- Dropped+=2;
- if (FramesPerSecond_>120)
- Dropped+=2;
- }
-
- int64u Minutes_Tens = Frames_/(600*FramesPerSecond_-Dropped*9); //Count of 10 minutes
- int64u Minutes_Units = (Frames_-Minutes_Tens*(600*FramesPerSecond_-Dropped*9))/(60*FramesPerSecond_-Dropped);
-
- Frames_ += 9*Dropped*Minutes_Tens+Dropped*Minutes_Units;
- if (Minutes_Units && ((Frames_/FramesPerSecond_)%60)==0 && (Frames_%FramesPerSecond_)<Dropped) // If Minutes_Tens is not 0 (drop) but count of remaining seconds is 0 and count of remaining frames is less than 2, 1 additional drop was actually counted, removing it
- Frames_-=Dropped;
-
- Frames = Frames_ % FramesPerSecond_;
- Seconds = (Frames_ / FramesPerSecond_) % 60;
- Minutes = ((Frames_ / FramesPerSecond_) / 60) % 60;
- Hours = (((Frames_ / FramesPerSecond_) / 60) / 60) % 24;
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void TimeCode::PlusOne()
-{
- //TODO: negative values
-
- if (FramesPerSecond==0)
- return;
- if (MustUseSecondField)
- {
- if (IsSecondField)
- {
- Frames++;
- IsSecondField=false;
- }
- else
- IsSecondField=true;
- }
- else
- Frames++;
- if (Frames>=FramesPerSecond)
- {
- Seconds++;
- Frames=0;
- if (Seconds>=60)
- {
- Seconds=0;
- Minutes++;
-
- if (DropFrame && Minutes%10)
- Frames=2; //frames 0 and 1 are dropped for every minutes except 00 10 20 30 40 50
-
- if (Minutes>=60)
- {
- Minutes=0;
- Hours++;
- if (Hours>=24)
- {
- Hours=0;
- }
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void TimeCode::MinusOne()
-{
- //TODO: negative values
-
- if (FramesPerSecond==0)
- return;
- if (MustUseSecondField && IsSecondField)
- IsSecondField=false;
- else
- {
- if (Frames==0 || (DropFrame && Minutes%10 && Frames<=2))
- {
- Frames=FramesPerSecond;
- if (Seconds==0)
- {
- Seconds=60;
- if (Minutes==0)
- {
- Minutes=60;
- if (Hours==0)
- Hours=24;
- Hours--;
- }
- Minutes--;
- }
- Seconds--;
- }
- Frames--;
-
- if (MustUseSecondField)
- IsSecondField=true;
- }
-}
-
-//---------------------------------------------------------------------------
-string TimeCode::ToString()
-{
- string TC;
- if (IsNegative)
- TC+='-';
- TC+=('0'+Hours/10);
- TC+=('0'+Hours%10);
- TC+=':';
- TC+=('0'+Minutes/10);
- TC+=('0'+Minutes%10);
- TC+=':';
- TC+=('0'+Seconds/10);
- TC+=('0'+Seconds%10);
- TC+=DropFrame?';':':';
- TC+=('0'+Frames/10);
- TC+=('0'+Frames%10);
-
- return TC;
-}
-
-//---------------------------------------------------------------------------
-int64s TimeCode::ToFrames()
-{
- if (!FramesPerSecond)
- return 0;
-
- int64s TC=(int64s(Hours) *3600
- + int64s(Minutes) * 60
- + int64s(Seconds) )*int64s(FramesPerSecond)
- + int64s(Frames);
-
- if (DropFrame)
- {
- TC-= int64s(Hours) *108
- + (int64s(Minutes)/10)*18
- + (int64s(Minutes)%10)*2;
- }
-
- return IsNegative?-TC:TC;
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //NameSpace
diff --git a/src/thirdparty/MediaInfo/MediaInfo/TimeCode.h b/src/thirdparty/MediaInfo/MediaInfo/TimeCode.h
deleted file mode 100644
index 0e8d48253..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/TimeCode.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_TimeCodeH
-#define MediaInfo_TimeCodeH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Unknown
-//***************************************************************************
-
-class TimeCode
-{
-public:
- //constructor/Destructor
- TimeCode ();
- TimeCode (int8u Hours, int8u Minutes, int8u Seconds, int8u Frames, int8u FramesPerSecond, bool DropFrame, bool MustUseSecondField=false, bool IsSecondField=false);
- TimeCode (int64s Frames, int8u FramesPerSecond, bool DropFrame, bool MustUseSecondField=false, bool IsSecondField_=false);
-
- //Operators
- TimeCode &operator ++()
- {
- PlusOne();
- return *this;
- }
- TimeCode operator ++(int)
- {
- PlusOne();
- return *this;
- }
- TimeCode &operator --()
- {
- MinusOne();
- return *this;
- }
- TimeCode operator --(int)
- {
- MinusOne();
- return *this;
- }
- bool operator== (const TimeCode &tc) const
- {
- return Hours ==tc.Hours
- && Minutes ==tc.Minutes
- && Seconds ==tc.Seconds
- && Frames ==tc.Frames
- && FramesPerSecond ==tc.FramesPerSecond
- && DropFrame ==tc.DropFrame
- && MustUseSecondField ==tc.MustUseSecondField
- && IsSecondField ==tc.IsSecondField;
- }
- bool operator!= (const TimeCode &tc) const
- {
- return Hours !=tc.Hours
- || Minutes !=tc.Minutes
- || Seconds !=tc.Seconds
- || Frames !=tc.Frames
- || FramesPerSecond !=tc.FramesPerSecond
- || DropFrame !=tc.DropFrame
- || MustUseSecondField !=tc.MustUseSecondField
- || IsSecondField !=tc.IsSecondField;
- }
-
- //Helpers
- bool IsValid() const
- {
- return FramesPerSecond?true:false;
- }
- void PlusOne();
- void MinusOne();
- string ToString();
- int64s ToFrames();
-
-public:
- int8u Hours;
- int8u Minutes;
- int8u Seconds;
- int8u Frames;
- int8u FramesPerSecond;
- bool DropFrame;
- bool MustUseSecondField;
- bool IsSecondField;
- bool IsNegative;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_AfdBarData.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_AfdBarData.cpp
deleted file mode 100644
index 7f87e7443..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_AfdBarData.cpp
+++ /dev/null
@@ -1,355 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AFDBARDATA_YES) || defined(MEDIAINFO_MXF_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* AfdBarData_active_format[]=
-{
- //1st value is for 4:3, 2nd is for 16:9
- "", //Undefined
- "Reserved",
- "Not recommended",
- "Not recommended",
- "Aspect ratio greater than 16:9", //Use GA94
- "Reserved",
- "Reserved",
- "Reserved",
- "4:3 full frame image / 16:9 full frame image",
- "4:3 full frame image / 4:3 pillarbox image",
- "16:9 letterbox image / 16:9 full frame image",
- "14:9 letterbox image / 14:9 pillarbox image",
- "Reserved",
- "4:3 full frame image, alternative 14:9 center / 4:3 pillarbox image, alternative 14:9 center",
- "16:9 letterbox image, alternative 14:9 center / 16:9 full frame image, alternative 14:9 center",
- "16:9 letterbox image, alternative 4:3 center / 16:9 full frame image, alternative 4:3 center",
-};
-
-//---------------------------------------------------------------------------
-const char* AfdBarData_active_format_4_3[]=
-{
- "", //Undefined
- "Reserved",
- "Letterbox 16:9 image (top)",
- "Letterbox 14:9 image (top)",
- "Letterbox image with an aspect ratio greater than 16:9",
- "Reserved",
- "Reserved",
- "Reserved",
- "Full frame 4:3 image",
- "Full frame 4:3 image",
- "Letterbox 16:9 image",
- "Letterbox 14:9 image",
- "Reserved",
- "Full frame 4:3 image, with alternative 14:9 center",
- "Letterbox 16:9 image, with alternative 14:9 center",
- "Letterbox 16:9 image, with alternative 4:3 center",
-};
-
-//---------------------------------------------------------------------------
-const char* AfdBarData_active_format_16_9[]=
-{
- "", //Undefined
- "Reserved",
- "Letterbox 16:9 image (top)",
- "Pillarbox 14:9 image (top)",
- "Letterbox image with an aspect ratio greater than 16:9",
- "Reserved",
- "Reserved",
- "Reserved",
- "Full frame 16:9 image",
- "Pillarbox 4:3 image",
- "Letterbox 16:9 image",
- "Pillarbox 14:9 image",
- "Reserved",
- "Full frame 4:3 image, with alternative 14:9 center",
- "Letterbox 16:9 image, with alternative 14:9 center",
- "Letterbox 16:9 image, with alternative 4:3 center",
-};
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //defined(MEDIAINFO_AFDBARDATA_YES) || defined(MEDIAINFO_MXF_YES)
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AFDBARDATA_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_AfdBarData.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* AfdBarData_aspect_ratio[]=
-{
- "4:3",
- "16:9",
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_AfdBarData::File_AfdBarData()
-:File__Analyze()
-{
- //Configuration
- PTS_DTS_Needed=true;
-
- //In
- Format=Format_Unknown;
- aspect_ratio_FromContainer=(int8u)-1;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_AfdBarData::Streams_Fill()
-{
- //Filling
- Stream_Prepare(Stream_Video);
- if (active_format!=(int8u)-1)
- {
- Fill(Stream_Video, 0, Video_ActiveFormatDescription, Stream.active_format);
- if (aspect_ratio==(int8u)-1)
- aspect_ratio=aspect_ratio_FromContainer;
- if (aspect_ratio!=(int8u)-1)
- {
- Fill(Stream_Video, 0, Video_ActiveFormatDescription_String, Stream.aspect_ratio?AfdBarData_active_format_16_9[Stream.active_format]:AfdBarData_active_format_4_3[Stream.active_format]);
- switch (Format)
- {
- case Format_A53_4_DTG1 : Fill(Stream_Video, 0, Video_ActiveFormatDescription_MuxingMode, "A/53"); break;
- case Format_S2016_3 : Fill(Stream_Video, 0, Video_ActiveFormatDescription_MuxingMode, "SMPTE ST 2016-3"); break;
- default :
- Skip_XX(Element_Size, "Unknown");
- return;
- }
- }
- }
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_AfdBarData::Read_Buffer_Continue()
-{
- //Default
- line_number_end_of_top_bar=(int16u)-1;
- line_number_start_of_bottom_bar=(int16u)-1;
- pixel_number_end_of_left_bar=(int16u)-1;
- pixel_number_start_of_right_bar=(int16u)-1;
- active_format=(int8u)-1;
- aspect_ratio=(int8u)-1;
-
- //Parsing
- switch (Format)
- {
- case Format_A53_4_DTG1 :
- afd_data();
- break;
- case Format_A53_4_GA94_06 :
- bar_data();
- break;
- case Format_S2016_3 :
- afd_data();
- Skip_B1( "Reserved");
- Skip_B1( "Reserved");
- bar_data();
- break;
- default :
- Skip_XX(Element_Size, "Unknown");
- return;
- }
-
- FILLING_BEGIN();
- //Filling
- Stream.line_number_end_of_top_bar=line_number_end_of_top_bar;
- Stream.line_number_start_of_bottom_bar=line_number_start_of_bottom_bar;
- Stream.pixel_number_end_of_left_bar=pixel_number_end_of_left_bar;
- Stream.pixel_number_start_of_right_bar=pixel_number_start_of_right_bar;
- Stream.active_format=active_format;
- Stream.aspect_ratio=aspect_ratio;
-
- if (!Status[IsAccepted])
- {
- Accept("AfdBarData");
- Fill("AfdBarData");
- }
- if (MediaInfoLib::Config.ParseSpeed_Get()<1)
- Finish("AfdBarData");
- FILLING_END();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_AfdBarData::afd_data()
-{
- //Parsing
- Element_Begin1("Active Format Description");
- BS_Begin();
- if (Format==Format_S2016_3)
- {
- Mark_0_NoTrustError();
- Get_S1 (4, active_format, "active_format"); Param_Info1(AfdBarData_active_format[active_format]);
- Get_S1 (1, aspect_ratio, "aspect_ratio"); Param_Info1(AfdBarData_aspect_ratio[aspect_ratio]);
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- }
- else
- {
- bool active_format_flag;
- Mark_0();
- Get_SB (active_format_flag, "active_format_flag");
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_1_NoTrustError();
- if (active_format_flag)
- {
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Get_S1 (4, active_format, "active_format"); Param_Info1(AfdBarData_active_format[active_format]);
- }
- }
- BS_End();
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_AfdBarData::bar_data()
-{
- //Parsing
- Element_Begin1("bar_data");
- bool top_bar_flag, bottom_bar_flag, left_bar_flag, right_bar_flag;
- BS_Begin();
- Get_SB (top_bar_flag, "top_bar_flag");
- Get_SB (bottom_bar_flag, "bottom_bar_flag");
- Get_SB (left_bar_flag, "left_bar_flag");
- Get_SB (right_bar_flag, "right_bar_flag");
- if (Format==Format_S2016_3)
- {
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- }
- else
- {
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- }
- if (top_bar_flag)
- {
- Mark_1();
- Mark_1();
- Get_S2 (14, line_number_end_of_top_bar, "line_number_end_of_top_bar");
- }
- if (bottom_bar_flag)
- {
- Mark_1();
- Mark_1();
- Get_S2 (14, line_number_start_of_bottom_bar, "line_number_start_of_bottom_bar");
- }
- if (left_bar_flag)
- {
- Mark_1();
- Mark_1();
- Get_S2 (14, pixel_number_end_of_left_bar, "pixel_number_end_of_left_bar");
- }
- if (right_bar_flag)
- {
- Mark_1();
- Mark_1();
- Get_S2 (14, pixel_number_start_of_right_bar, "pixel_number_start_of_right_bar");
- }
- if (!top_bar_flag && !bottom_bar_flag && !left_bar_flag && !right_bar_flag)
- {
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Skip_S2(14, "reserved");
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Skip_S2(14, "reserved");
- }
- BS_End();
- Element_End0();
-
- if (Format==Format_A53_4_DTG1)
- {
- BS_Begin();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- BS_End();
-
- if (Element_Size-Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "additional_bar_data");
- }
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_AFDBARDATA_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_AfdBarData.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_AfdBarData.h
deleted file mode 100644
index 05c145f4f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_AfdBarData.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about AFD and Bar Data files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_AfdBarDataH
-#define MediaInfo_AfdBarDataH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_AfdBarData
-//***************************************************************************
-
-class File_AfdBarData : public File__Analyze
-{
-public :
- //In
- enum format
- {
- Format_Unknown,
- Format_A53_4_DTG1, //Active Format Description
- Format_A53_4_GA94_06, //Bar Data
- Format_S2016_3, //Active Format Description & Bar Data
- };
- format Format;
- int8u aspect_ratio_FromContainer; //May come from the containing parser
-
- //Constructor/Destructor
- File_AfdBarData();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-
- //Elements
- void afd_data();
- void bar_data();
-
- //Sream
- struct stream
- {
- int16u line_number_end_of_top_bar;
- int16u line_number_start_of_bottom_bar;
- int16u pixel_number_end_of_left_bar;
- int16u pixel_number_start_of_right_bar;
- int8u active_format;
- int8u aspect_ratio;
-
- stream()
- {
- line_number_end_of_top_bar=(int16u)-1;
- line_number_start_of_bottom_bar=(int16u)-1;
- pixel_number_end_of_left_bar=(int16u)-1;
- pixel_number_start_of_right_bar=(int16u)-1;
- active_format=(int8u)-1;
- aspect_ratio=(int8u)-1;
- }
- };
- stream Stream;
-
- //Temp
- int16u line_number_end_of_top_bar;
- int16u line_number_start_of_bottom_bar;
- int16u pixel_number_end_of_left_bar;
- int16u pixel_number_start_of_right_bar;
- int8u active_format;
- int8u aspect_ratio;
-};
-
-} //NameSpace
-
-#endif
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Aic.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Aic.cpp
deleted file mode 100644
index c9a80b67d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Aic.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AIC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Aic.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aic::Streams_Fill()
-{
- //Filling
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "AIC");
- Fill(Stream_Video, 0, Video_Width, Width);
- Fill(Stream_Video, 0, Video_Height, Height);
- Fill(Stream_Video, 0, Video_BitDepth, 8);
- //Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- //Fill(Stream_Video, 0, Video_ChromaSubsampling, "4:2:0");
- switch (FieldFrame)
- {
- case 0 : Fill(Stream_Video, 0, Video_ScanType, "Progressive"); break;
- case 3 : Fill(Stream_Video, 0, Video_ScanType, "Interlaced"); break;
- default: ;
- }
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Aic::Header_Parse()
-{
- //Parsing
- int32u Size;
- int16u Sync;
- Get_B2 (Sync, "Sync");
- Get_B4 (Size, "Size");
- if (Sync!=0x0116 || Size<24 || Size!=Buffer_Size)
- {
- Reject("AIC");
- return;
- }
- Get_B2 (Width, "Width");
- Get_B2 (Height, "Height");
- Skip_B2( "Width again?");
- Skip_B2( "Height again?");
- Skip_B2( "Unknown");
- BS_Begin();
- Get_S1 (4, FieldFrame, "field/Frame info?");
- Skip_S1(4, "Unknown");
- Skip_S1(4, "Unknown");
- Skip_S1(4, "Unknown");
- BS_End();
- Skip_B3( "Unknown");
- Skip_B3( "Unknown");
-
- Header_Fill_Code(0, "Frame");
- Header_Fill_Size(Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Aic::Data_Parse()
-{
- //Parsing
- Skip_XX(Element_Size, "Data");
-
- FILLING_BEGIN();
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (!Status[IsFilled])
- {
- Accept("AIC");
- Finish("AIC");
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_AIC_*
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Aic.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Aic.h
deleted file mode 100644
index 985e8761b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Aic.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Apple Intermediate Codec video streams
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_AicH
-#define MediaInfo_AicH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Aic
-//***************************************************************************
-
-class File_Aic : public File__Analyze
-{
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Per element
- void Header_Parse ();
- void Data_Parse ();
-
- //Temp
- int16u Width;
- int16u Height;
- int8u FieldFrame;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc.cpp
deleted file mode 100644
index ce732d833..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc.cpp
+++ /dev/null
@@ -1,3840 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AVC_YES) || defined(MEDIAINFO_MPEGPS_YES) || defined(MEDIAINFO_MPEGTS_YES)
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-#include "ZenLib/Conf.h"
-using namespace ZenLib;
-
-//---------------------------------------------------------------------------
-const char* Avc_profile_idc(int8u profile_idc)
-{
- switch (profile_idc)
- {
- case 44 : return "CAVLC 4:4:4 Intra";
- case 66 : return "Baseline";
- case 77 : return "Main";
- case 83 : return "Scalable Baseline";
- case 86 : return "Scalable High";
- case 88 : return "Extended";
- case 100 : return "High";
- case 110 : return "High 10";
- case 118 : return "Multiview High";
- case 122 : return "High 4:2:2";
- case 128 : return "Stereo High";
- case 138 : return "Multiview Depth High";
- case 144 : return "High 4:4:4";
- case 244 : return "High 4:4:4 Predictive";
- default : return "Unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-} //NameSpace
-
-//---------------------------------------------------------------------------
-#endif //...
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-//
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AVC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Avc.h"
-#if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #include "MediaInfo/Text/File_DtvccTransport.h"
-#endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
- #include "MediaInfo/MediaInfo_Events.h"
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-#include <cstring>
-#include <algorithm>
-using namespace std;
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const size_t Avc_Errors_MaxCount=32;
-
-//---------------------------------------------------------------------------
-extern const int8u Avc_PixelAspectRatio_Size=17;
-extern const float32 Avc_PixelAspectRatio[]=
-{
- (float32)1, //Reserved
- (float32)1,
- (float32)12/(float32)11,
- (float32)10/(float32)11,
- (float32)16/(float32)11,
- (float32)40/(float32)33,
- (float32)24/(float32)11,
- (float32)20/(float32)11,
- (float32)32/(float32)11,
- (float32)80/(float32)33,
- (float32)18/(float32)11,
- (float32)15/(float32)11,
- (float32)64/(float32)33,
- (float32)160/(float32)99,
- (float32)4/(float32)3,
- (float32)3/(float32)2,
- (float32)2,
-};
-
-//---------------------------------------------------------------------------
-extern const char* Avc_video_format[]=
-{
- "Component",
- "PAL",
- "NTSC",
- "SECAM",
- "MAC",
- "",
- "Reserved",
- "Reserved",
-};
-
-//---------------------------------------------------------------------------
-const char* Avc_primary_pic_type[]=
-{
- "I",
- "I, P",
- "I, P, B",
- "SI",
- "SI, SP",
- "I, SI",
- "I, SI, P, SP",
- "I, SI, P, SP, B",
-};
-
-//---------------------------------------------------------------------------
-const char* Avc_slice_type[]=
-{
- "P",
- "B",
- "I",
- "SP",
- "SI",
- "P",
- "B",
- "I",
- "SP",
- "SI",
-};
-
-//---------------------------------------------------------------------------
-const int8u Avc_pic_struct_Size=9;
-const char* Avc_pic_struct[]=
-{
- "frame",
- "top field",
- "bottom field",
- "top field, bottom field",
- "bottom field, top field",
- "top field, bottom field, top field repeated",
- "bottom field, top field, bottom field repeated",
- "frame doubling",
- "frame tripling",
-};
-
-//---------------------------------------------------------------------------
-const int8u Avc_NumClockTS[]=
-{
- 1,
- 1,
- 1,
- 2,
- 2,
- 3,
- 3,
- 2,
- 3,
-};
-
-//---------------------------------------------------------------------------
-const char* Avc_ct_type[]=
-{
- "Progressive",
- "Interlaced",
- "Unknown",
- "Reserved",
-};
-
-//---------------------------------------------------------------------------
-const char* Avc_Colorimetry_format_idc[]=
-{
- "monochrome",
- "4:2:0",
- "4:2:2",
- "4:4:4",
-};
-
-//---------------------------------------------------------------------------
-const int8u Avc_SubWidthC[]=
-{
- 1,
- 2,
- 2,
- 1,
-};
-
-//---------------------------------------------------------------------------
-const int8u Avc_SubHeightC[]=
-{
- 1,
- 2,
- 1,
- 1,
-};
-
-//---------------------------------------------------------------------------
-const char* Avc_user_data_DTG1_active_format[]=
-{
- //1st value is for 4:3, 2nd is for 16:9
- "", //Undefined
- "Reserved",
- "Not recommended",
- "Not recommended",
- "Aspect ratio greater than 16:9", //Use GA94
- "Reserved",
- "Reserved",
- "Reserved",
- "4:3 full frame image / 16:9 full frame image",
- "4:3 full frame image / 4:3 pillarbox image",
- "16:9 letterbox image / 16:9 full frame image",
- "14:9 letterbox image / 14:9 pillarbox image",
- "Reserved",
- "4:3 full frame image, alternative 14:9 center / 4:3 pillarbox image, alternative 14:9 center",
- "16:9 letterbox image, alternative 14:9 center / 16:9 full frame image, alternative 14:9 center",
- "16:9 letterbox image, alternative 4:3 center / 16:9 full frame image, alternative 4:3 center",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpegv_colour_primaries(int8u colour_primaries);
-const char* Mpegv_transfer_characteristics(int8u transfer_characteristics);
-const char* Mpegv_matrix_coefficients(int8u matrix_coefficients);
-
-//---------------------------------------------------------------------------
-const char* Avc_user_data_GA94_cc_type(int8u cc_type)
-{
- switch (cc_type)
- {
- case 0 : return "CEA-608 line 21 field 1 closed captions"; //closed caption 3 if this is second field
- case 1 : return "CEA-608 line 21 field 2 closed captions"; //closed caption 4 if this is second field
- case 2 : return "DTVCC Channel Packet Data";
- case 3 : return "DTVCC Channel Packet Start";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-int32u Avc_MaxDpbMbs(int8u level)
-{
- switch (level)
- {
- case 10 : return 1485;
- case 11 : return 3000;
- case 12 : return 6000;
- case 13 :
- case 20 : return 11880;
- case 21 : return 19800;
- case 22 : return 20250;
- case 30 : return 40500;
- case 31 : return 108000;
- case 32 : return 216000;
- case 40 :
- case 41 : return 245760;
- case 42 : return 522240;
- case 50 : return 589824;
- case 51 : return 983040;
- default : return 0;
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Avc::File_Avc()
-#if MEDIAINFO_DUPLICATE
-:File__Duplicate()
-#endif //MEDIAINFO_DUPLICATE
-{
- //Config
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Avc;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- PTS_DTS_Needed=true;
- IsRawStream=true;
- Frame_Count_NotParsedIncluded=0;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.3?512:2;
- FrameIsAlwaysComplete=false;
- MustParse_SPS_PPS=false;
- SizedBlocks=false;
-
- //Temporal references
- TemporalReferences_DelayedElement=NULL;
-
- //Text
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- GA94_03_Parser=NULL;
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-}
-
-//---------------------------------------------------------------------------
-File_Avc::~File_Avc()
-{
- for (size_t Pos=0; Pos<TemporalReferences.size(); Pos++)
- delete TemporalReferences[Pos]; //TemporalReferences[Pos]=NULL;
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- delete GA94_03_Parser; //GA94_03_Parser=NULL;
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-
- for (size_t Pos=0; Pos<seq_parameter_sets.size(); Pos++)
- delete seq_parameter_sets[Pos]; //TemporalReferences[Pos]=NULL;
-
- for (size_t Pos=0; Pos<subset_seq_parameter_sets.size(); Pos++)
- delete subset_seq_parameter_sets[Pos]; //TemporalReferences[Pos]=NULL;
-
- for (size_t Pos=0; Pos<pic_parameter_sets.size(); Pos++)
- delete pic_parameter_sets[Pos]; //TemporalReferences[Pos]=NULL;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Avc::Streams_Fill()
-{
- for (std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item=seq_parameter_sets.begin(); seq_parameter_set_Item!=seq_parameter_sets.end(); ++seq_parameter_set_Item)
- if ((*seq_parameter_set_Item))
- Streams_Fill(seq_parameter_set_Item);
- for (std::vector<seq_parameter_set_struct*>::iterator subset_seq_parameter_set_Item=subset_seq_parameter_sets.begin(); subset_seq_parameter_set_Item!=subset_seq_parameter_sets.end(); ++subset_seq_parameter_set_Item)
- if ((*subset_seq_parameter_set_Item))
- {
- if (seq_parameter_sets.empty())
- Streams_Fill(subset_seq_parameter_set_Item);
- else
- Streams_Fill_subset(subset_seq_parameter_set_Item);
- Fill(Stream_Video, 0, Video_MultiView_Count, (*subset_seq_parameter_set_Item)->num_views_minus1+1);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::Streams_Fill(std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item)
-{
- //Calculating - Pixels
- int32u Width =((*seq_parameter_set_Item)->pic_width_in_mbs_minus1 +1)*16;
- int32u Height=((*seq_parameter_set_Item)->pic_height_in_map_units_minus1+1)*16*(2-(*seq_parameter_set_Item)->frame_mbs_only_flag);
- int32u CropUnitX=Avc_SubWidthC [(*seq_parameter_set_Item)->ChromaArrayType()];
- int32u CropUnitY=Avc_SubHeightC[(*seq_parameter_set_Item)->ChromaArrayType()]*(2-(*seq_parameter_set_Item)->frame_mbs_only_flag);
- Width -=((*seq_parameter_set_Item)->frame_crop_left_offset+(*seq_parameter_set_Item)->frame_crop_right_offset )*CropUnitX;
- Height-=((*seq_parameter_set_Item)->frame_crop_top_offset +(*seq_parameter_set_Item)->frame_crop_bottom_offset)*CropUnitY;
-
- //From vui_parameters
- float64 PixelAspectRatio=1;
- if ((*seq_parameter_set_Item)->vui_parameters)
- {
- if ((*seq_parameter_set_Item)->vui_parameters->aspect_ratio_info_present_flag)
- {
- if ((*seq_parameter_set_Item)->vui_parameters->aspect_ratio_idc<Avc_PixelAspectRatio_Size)
- PixelAspectRatio=Avc_PixelAspectRatio[(*seq_parameter_set_Item)->vui_parameters->aspect_ratio_idc];
- else if ((*seq_parameter_set_Item)->vui_parameters->aspect_ratio_idc==0xFF && (*seq_parameter_set_Item)->vui_parameters->sar_height)
- PixelAspectRatio=((float64)(*seq_parameter_set_Item)->vui_parameters->sar_width)/(*seq_parameter_set_Item)->vui_parameters->sar_height;
- }
- if ((*seq_parameter_set_Item)->vui_parameters->timing_info_present_flag)
- {
- if (!(*seq_parameter_set_Item)->vui_parameters->fixed_frame_rate_flag)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Mode, "VFR");
- else if ((*seq_parameter_set_Item)->vui_parameters->timing_info_present_flag && (*seq_parameter_set_Item)->vui_parameters->time_scale && (*seq_parameter_set_Item)->vui_parameters->num_units_in_tick)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, (float64)(*seq_parameter_set_Item)->vui_parameters->time_scale/(*seq_parameter_set_Item)->vui_parameters->num_units_in_tick/((*seq_parameter_set_Item)->frame_mbs_only_flag?2:((*seq_parameter_set_Item)->pic_order_cnt_type==2?1:2))/FrameRate_Divider);
- }
-
- //Colour description
- if ((*seq_parameter_set_Item)->vui_parameters->video_signal_type_present_flag)
- {
- Fill(Stream_Video, 0, Video_Standard, Avc_video_format[(*seq_parameter_set_Item)->vui_parameters->video_format]);
- if ((*seq_parameter_set_Item)->vui_parameters->colour_description_present_flag)
- {
- Fill(Stream_Video, 0, Video_colour_description_present, "Yes");
- Fill(Stream_Video, 0, Video_colour_primaries, Mpegv_colour_primaries((*seq_parameter_set_Item)->vui_parameters->colour_primaries));
- Fill(Stream_Video, 0, Video_transfer_characteristics, Mpegv_transfer_characteristics((*seq_parameter_set_Item)->vui_parameters->transfer_characteristics));
- Fill(Stream_Video, 0, Video_matrix_coefficients, Mpegv_matrix_coefficients((*seq_parameter_set_Item)->vui_parameters->matrix_coefficients));
- }
- }
-
- //hrd_parameter_sets
- int64u bit_rate_value=(int64u)-1;
- bool bit_rate_value_IsValid=true;
- bool cbr_flag=false;
- bool cbr_flag_IsSet=false;
- bool cbr_flag_IsValid=true;
- seq_parameter_set_struct::vui_parameters_struct::xxl* NAL=(*seq_parameter_set_Item)->vui_parameters->NAL;
- if (NAL)
- for (size_t Pos=0; Pos<NAL->SchedSel.size(); Pos++)
- {
- if (NAL->SchedSel[Pos].cpb_size_value!=(int32u)-1)
- Fill(Stream_Video, 0, Video_BufferSize, NAL->SchedSel[Pos].cpb_size_value);
- if (bit_rate_value!=(int64u)-1 && bit_rate_value!=NAL->SchedSel[Pos].bit_rate_value)
- bit_rate_value_IsValid=false;
- if (bit_rate_value==(int64u)-1)
- bit_rate_value=NAL->SchedSel[Pos].bit_rate_value;
- if (cbr_flag_IsSet==true && cbr_flag!=NAL->SchedSel[Pos].cbr_flag)
- cbr_flag_IsValid=false;
- if (cbr_flag_IsSet==0)
- {
- cbr_flag=NAL->SchedSel[Pos].cbr_flag;
- cbr_flag_IsSet=true;
- }
- }
- seq_parameter_set_struct::vui_parameters_struct::xxl* VCL=(*seq_parameter_set_Item)->vui_parameters->VCL;
- if (VCL)
- for (size_t Pos=0; Pos<VCL->SchedSel.size(); Pos++)
- {
- Fill(Stream_Video, 0, Video_BufferSize, VCL->SchedSel[Pos].cpb_size_value);
- if (bit_rate_value!=(int64u)-1 && bit_rate_value!=VCL->SchedSel[Pos].bit_rate_value)
- bit_rate_value_IsValid=false;
- if (bit_rate_value==(int64u)-1)
- bit_rate_value=VCL->SchedSel[Pos].bit_rate_value;
- if (cbr_flag_IsSet==true && cbr_flag!=VCL->SchedSel[Pos].cbr_flag)
- cbr_flag_IsValid=false;
- if (cbr_flag_IsSet==0)
- {
- cbr_flag=VCL->SchedSel[Pos].cbr_flag;
- cbr_flag_IsSet=true;
- }
- }
- if (cbr_flag_IsSet && cbr_flag_IsValid)
- {
- Fill(Stream_Video, 0, Video_BitRate_Mode, cbr_flag?"CBR":"VBR");
- if (bit_rate_value!=(int64u)-1 && bit_rate_value_IsValid)
- Fill(Stream_Video, 0, cbr_flag?Video_BitRate_Nominal:Video_BitRate_Maximum, bit_rate_value);
- }
- }
-
- if (Count_Get(Stream_Video)==0)
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "AVC");
- Fill(Stream_Video, 0, Video_Codec, "AVC");
-
- Ztring Profile=Ztring().From_Local(Avc_profile_idc((*seq_parameter_set_Item)->profile_idc))+__T("@L")+Ztring().From_Number(((float)(*seq_parameter_set_Item)->level_idc)/10, 1);
- Fill(Stream_Video, 0, Video_Format_Profile, Profile);
- Fill(Stream_Video, 0, Video_Codec_Profile, Profile);
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height);
- Fill(Stream_Video, 0, Video_PixelAspectRatio, PixelAspectRatio, 3, true);
- Fill(Stream_Video, 0, Video_DisplayAspectRatio, Width*PixelAspectRatio/Height, 3, true); //More precise
- if (FrameRate_Divider==2)
- {
- Fill(Stream_Video, StreamPos_Last, Video_Format_Settings_FrameMode, "Frame doubling");
- Fill(Stream_Video, StreamPos_Last, Video_Format_Settings, "Frame doubling");
- }
- if (FrameRate_Divider==3)
- {
- Fill(Stream_Video, StreamPos_Last, Video_Format_Settings_FrameMode, "Frame tripling");
- Fill(Stream_Video, StreamPos_Last, Video_Format_Settings, "Frame tripling");
- }
-
- //Interlacement
- if ((*seq_parameter_set_Item)->mb_adaptive_frame_field_flag && Structure_Frame>0) //Interlaced macro-block
- {
- Fill(Stream_Video, 0, Video_ScanType, "MBAFF");
- Fill(Stream_Video, 0, Video_Interlacement, "MBAFF");
- }
- else if ((*seq_parameter_set_Item)->frame_mbs_only_flag || (Structure_Frame>0 && Structure_Field==0)) //No interlaced frame
- {
- Fill(Stream_Video, 0, Video_ScanType, "Progressive");
- Fill(Stream_Video, 0, Video_Interlacement, "PPF");
- }
- else if (Structure_Field>0)
- {
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- Fill(Stream_Video, 0, Video_Interlacement, "Interlaced");
- }
- std::string ScanOrders, PictureTypes(PictureTypes_PreviousFrames);
- ScanOrders.reserve(TemporalReferences.size());
- for (size_t Pos=0; Pos<TemporalReferences.size(); Pos++)
- if (TemporalReferences[Pos])
- {
- ScanOrders+=TemporalReferences[Pos]->IsTop?'T':'B';
- if ((Pos%2)==0)
- PictureTypes+=Avc_slice_type[TemporalReferences[Pos]->slice_type];
- }
- else if (!PictureTypes.empty()) //Only if stream already started
- {
- ScanOrders+=' ';
- if ((Pos%2)==0)
- PictureTypes+=' ';
- }
- Fill(Stream_Video, 0, Video_ScanOrder, ScanOrder_Detect(ScanOrders));
- { //Legacy
- string Result=ScanOrder_Detect(ScanOrders);
- if (!Result.empty())
- Fill(Stream_Video, 0, Video_Interlacement, Result, true, true);
- }
- Fill(Stream_Video, 0, Video_Format_Settings_GOP, GOP_Detect(PictureTypes));
-
- Fill(Stream_General, 0, General_Encoded_Library, Encoded_Library);
- Fill(Stream_General, 0, General_Encoded_Library_Name, Encoded_Library_Name);
- Fill(Stream_General, 0, General_Encoded_Library_Version, Encoded_Library_Version);
- Fill(Stream_General, 0, General_Encoded_Library_Settings, Encoded_Library_Settings);
- Fill(Stream_Video, 0, Video_Encoded_Library, Encoded_Library);
- Fill(Stream_Video, 0, Video_Encoded_Library_Name, Encoded_Library_Name);
- Fill(Stream_Video, 0, Video_Encoded_Library_Version, Encoded_Library_Version);
- Fill(Stream_Video, 0, Video_Encoded_Library_Settings, Encoded_Library_Settings);
- Fill(Stream_Video, 0, Video_BitRate_Nominal, BitRate_Nominal);
- Fill(Stream_Video, 0, Video_MuxingMode, MuxingMode);
- for (std::vector<pic_parameter_set_struct*>::iterator pic_parameter_set_Item=pic_parameter_sets.begin(); pic_parameter_set_Item!=pic_parameter_sets.end(); ++pic_parameter_set_Item)
- if (*pic_parameter_set_Item && (*pic_parameter_set_Item)->seq_parameter_set_id==seq_parameter_set_Item-(seq_parameter_sets.empty()?subset_seq_parameter_sets.begin():seq_parameter_sets.begin()))
- {
- if ((*pic_parameter_set_Item)->entropy_coding_mode_flag)
- {
- Fill(Stream_Video, 0, Video_Format_Settings, "CABAC");
- Fill(Stream_Video, 0, Video_Format_Settings_CABAC, "Yes");
- Fill(Stream_Video, 0, Video_Codec_Settings, "CABAC");
- Fill(Stream_Video, 0, Video_Codec_Settings_CABAC, "Yes");
- }
- else
- {
- Fill(Stream_Video, 0, Video_Format_Settings_CABAC, "No");
- Fill(Stream_Video, 0, Video_Codec_Settings_CABAC, "No");
- }
- break; //TODO: currently, testing only the first pic_parameter_set
- }
- if ((*seq_parameter_set_Item)->max_num_ref_frames>0)
- {
- Fill(Stream_Video, 0, Video_Format_Settings, Ztring::ToZtring((*seq_parameter_set_Item)->max_num_ref_frames)+__T(" Ref Frames"));
- Fill(Stream_Video, 0, Video_Codec_Settings, Ztring::ToZtring((*seq_parameter_set_Item)->max_num_ref_frames)+__T(" Ref Frames"));
- Fill(Stream_Video, 0, Video_Format_Settings_RefFrames, (*seq_parameter_set_Item)->max_num_ref_frames);
- Fill(Stream_Video, 0, Video_Codec_Settings_RefFrames, (*seq_parameter_set_Item)->max_num_ref_frames);
- }
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- Fill(Stream_Video, 0, Video_Colorimetry, Avc_Colorimetry_format_idc[(*seq_parameter_set_Item)->chroma_format_idc]);
- if ((*seq_parameter_set_Item)->bit_depth_luma_minus8==(*seq_parameter_set_Item)->bit_depth_chroma_minus8)
- Fill(Stream_Video, 0, Video_BitDepth, (*seq_parameter_set_Item)->bit_depth_luma_minus8+8);
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::Streams_Fill_subset(const std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item)
-{
- Ztring Profile=Ztring().From_Local(Avc_profile_idc((*seq_parameter_set_Item)->profile_idc))+__T("@L")+Ztring().From_Number(((float)(*seq_parameter_set_Item)->level_idc)/10, 1);
- Ztring Profile_Base=Retrieve(Stream_Video, 0, Video_Format_Profile);
- Fill(Stream_Video, 0, Video_Format_Profile, Profile, true);
- if (!Profile_Base.empty())
- Fill(Stream_Video, 0, Video_Format_Profile, Profile_Base);
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::Streams_Finish()
-{
- if (PTS_End!=(int64u)-1 && (IsSub || File_Offset+Buffer_Offset+Element_Size==File_Size))
- {
- if (PTS_End>PTS_Begin)
- Fill(Stream_Video, 0, Video_Duration, float64_int64s(((float64)(PTS_End-PTS_Begin))/1000000));
- }
-
- //GA94 captions
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- if (GA94_03_Parser && GA94_03_Parser->Status[IsAccepted])
- {
- Finish(GA94_03_Parser);
- Merge(*GA94_03_Parser);
-
- Ztring LawRating=GA94_03_Parser->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=GA94_03_Parser->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
-
- for (size_t Pos=0; Pos<Count_Get(Stream_Text); Pos++)
- {
- Ztring MuxingMode=Retrieve(Stream_Text, Pos, "MuxingMode");
- Fill(Stream_Text, Pos, "MuxingMode", __T("SCTE 128 / ")+MuxingMode, true);
- }
- }
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-
- #if MEDIAINFO_IBI
- if (seq_parameter_sets.size()==1 && (*seq_parameter_sets.begin())->vui_parameters && (*seq_parameter_sets.begin())->vui_parameters->timing_info_present_flag && (*seq_parameter_sets.begin())->vui_parameters->fixed_frame_rate_flag)
- Ibi_Stream_Finish((*seq_parameter_sets.begin())->vui_parameters->time_scale, (*seq_parameter_sets.begin())->vui_parameters->num_units_in_tick);
- #endif //MEDIAINFO_IBI
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Avc::FileHeader_Begin()
-{
- if (!File__Analyze::FileHeader_Begin_0x000001())
- return false;
-
- if (!MustSynchronize)
- {
- Synched_Init();
- Buffer_TotalBytes_FirstSynched=0;
- File_Offset_FirstSynched=File_Offset;
- }
-
- //All should be OK
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Avc::Synchronize()
-{
- //Synchronizing
- size_t Buffer_Offset_Min=Buffer_Offset;
- while(Buffer_Offset+4<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01))
- {
- Buffer_Offset+=2;
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Buffer_Offset+=2;
- if (Buffer_Offset>=Buffer_Size || Buffer[Buffer_Offset-1]==0x00)
- Buffer_Offset--;
- }
- if (Buffer_Offset>Buffer_Offset_Min && Buffer[Buffer_Offset-1]==0x00)
- Buffer_Offset--;
-
- //Parsing last bytes if needed
- if (Buffer_Offset+4==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x00
- || Buffer[Buffer_Offset+3]!=0x01))
- Buffer_Offset++;
- if (Buffer_Offset+3==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01))
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00))
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && Buffer[Buffer_Offset ]!=0x00)
- Buffer_Offset++;
-
- if (Buffer_Offset+4>Buffer_Size)
- return false;
-
- //Synched is OK
- Synched=true;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Avc::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+6>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || (Buffer[Buffer_Offset+2]!=0x01 && (Buffer[Buffer_Offset+2]!=0x00 || Buffer[Buffer_Offset+3]!=0x01)))
- {
- Synched=false;
- return true;
- }
-
- //Quick search
- if (!Header_Parser_QuickSearch())
- return false;
-
- #if MEDIAINFO_IBI
- bool zero_byte=Buffer[Buffer_Offset+2]==0x00;
- bool RandomAccess=(Buffer[Buffer_Offset+(zero_byte?4:3)]&0x1F)==0x07 || ((Buffer[Buffer_Offset+(zero_byte?4:3)]&0x1F)==0x09 && ((Buffer[Buffer_Offset+(zero_byte?5:4)]&0xE0)==0x00 || (Buffer[Buffer_Offset+(zero_byte?5:4)]&0xE0)==0xA0)); //seq_parameter_set or access_unit_delimiter with value=0 or 5 (3 bits)
- if (RandomAccess)
- Ibi_Add();
- #endif //MEDIAINFO_IBI
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Avc::Demux_UnpacketizeContainer_Test()
-{
- const int8u* Buffer_Temp=NULL;
- size_t Buffer_Temp_Size=0;
- bool RandomAccess=true; //Default, in case of problem
-
- if ((MustParse_SPS_PPS || SizedBlocks) && Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10)
- {
- if (MustParse_SPS_PPS)
- return true; //Wait for SPS and PPS
-
- //Random access check
- RandomAccess=false;
-
- //Computing final size
- size_t TranscodedBuffer_Size=0;
- while (Buffer_Offset+SizeOfNALU_Minus1+1+1<=Buffer_Size)
- {
- size_t Size;
- switch (SizeOfNALU_Minus1)
- {
- case 0: Size=Buffer[Buffer_Offset];
- TranscodedBuffer_Size+=2;
- break;
- case 1: Size=BigEndian2int16u(Buffer+Buffer_Offset);
- TranscodedBuffer_Size++;
- break;
- case 2: Size=BigEndian2int24u(Buffer+Buffer_Offset);
- break;
- case 3: Size=BigEndian2int32u(Buffer+Buffer_Offset);
- TranscodedBuffer_Size--;
- break;
- default: return true; //Problem
- }
- Size+=SizeOfNALU_Minus1+1;
-
- //Coherency checking
- if (Size==0 || Buffer_Offset+Size>Buffer_Size || (Buffer_Offset+Size!=Buffer_Size && Buffer_Offset+Size+SizeOfNALU_Minus1+1>Buffer_Size))
- Size=Buffer_Size-Buffer_Offset;
-
- //Random access check
- if (!RandomAccess && Buffer_Offset+SizeOfNALU_Minus1+1<Buffer_Size && (Buffer[Buffer_Offset+SizeOfNALU_Minus1+1]&0x1F) && (Buffer[Buffer_Offset+SizeOfNALU_Minus1+1]&0x1F)<=5) //Is a slice
- {
- int32u slice_type;
- Element_Offset=SizeOfNALU_Minus1+1+1;
- Element_Size=Size;
- BS_Begin();
- Skip_UE("first_mb_in_slice");
- Get_UE (slice_type, "slice_type");
- BS_End();
- Element_Offset=0;
-
- switch (slice_type)
- {
- case 2 :
- case 7 :
- RandomAccess=true;
- }
- }
-
- TranscodedBuffer_Size+=Size;
- Buffer_Offset+=Size;
- }
- Buffer_Offset=0;
-
- //Adding SPS/PPS sizes
- if (RandomAccess)
- {
- for (seq_parameter_set_structs::iterator Data_Item=seq_parameter_sets.begin(); Data_Item!=seq_parameter_sets.end(); ++Data_Item)
- TranscodedBuffer_Size+=(*Data_Item)->Iso14496_10_Buffer_Size;
- for (seq_parameter_set_structs::iterator Data_Item=subset_seq_parameter_sets.begin(); Data_Item!=subset_seq_parameter_sets.end(); ++Data_Item)
- TranscodedBuffer_Size+=(*Data_Item)->Iso14496_10_Buffer_Size;
- for (pic_parameter_set_structs::iterator Data_Item=pic_parameter_sets.begin(); Data_Item!=pic_parameter_sets.end(); ++Data_Item)
- TranscodedBuffer_Size+=(*Data_Item)->Iso14496_10_Buffer_Size;
- }
-
- //Copying
- int8u* TranscodedBuffer=new int8u[TranscodedBuffer_Size+100];
- size_t TranscodedBuffer_Pos=0;
- if (RandomAccess)
- {
- for (seq_parameter_set_structs::iterator Data_Item=seq_parameter_sets.begin(); Data_Item!=seq_parameter_sets.end(); ++Data_Item)
- {
- std::memcpy(TranscodedBuffer+TranscodedBuffer_Pos, (*Data_Item)->Iso14496_10_Buffer, (*Data_Item)->Iso14496_10_Buffer_Size);
- TranscodedBuffer_Pos+=(*Data_Item)->Iso14496_10_Buffer_Size;
- }
- for (seq_parameter_set_structs::iterator Data_Item=subset_seq_parameter_sets.begin(); Data_Item!=subset_seq_parameter_sets.end(); ++Data_Item)
- {
- std::memcpy(TranscodedBuffer+TranscodedBuffer_Pos, (*Data_Item)->Iso14496_10_Buffer, (*Data_Item)->Iso14496_10_Buffer_Size);
- TranscodedBuffer_Pos+=(*Data_Item)->Iso14496_10_Buffer_Size;
- }
- for (pic_parameter_set_structs::iterator Data_Item=pic_parameter_sets.begin(); Data_Item!=pic_parameter_sets.end(); ++Data_Item)
- {
- std::memcpy(TranscodedBuffer+TranscodedBuffer_Pos, (*Data_Item)->Iso14496_10_Buffer, (*Data_Item)->Iso14496_10_Buffer_Size);
- TranscodedBuffer_Pos+=(*Data_Item)->Iso14496_10_Buffer_Size;
- }
- }
- while (Buffer_Offset<Buffer_Size)
- {
- //Sync layer
- TranscodedBuffer[TranscodedBuffer_Pos]=0x00;
- TranscodedBuffer_Pos++;
- TranscodedBuffer[TranscodedBuffer_Pos]=0x00;
- TranscodedBuffer_Pos++;
- TranscodedBuffer[TranscodedBuffer_Pos]=0x01;
- TranscodedBuffer_Pos++;
-
- //Block
- size_t Size;
- switch (SizeOfNALU_Minus1)
- {
- case 0: Size=Buffer[Buffer_Offset];
- Buffer_Offset++;
- break;
- case 1: Size=BigEndian2int16u(Buffer+Buffer_Offset);
- Buffer_Offset+=2;
- break;
- case 2: Size=BigEndian2int24u(Buffer+Buffer_Offset);
- Buffer_Offset+=3;
- break;
- case 3: Size=BigEndian2int32u(Buffer+Buffer_Offset);
- Buffer_Offset+=4;
- break;
- default: //Problem
- delete [] TranscodedBuffer;
- return false;
- }
-
- //Coherency checking
- if (Size==0 || Buffer_Offset+Size>Buffer_Size || (Buffer_Offset+Size!=Buffer_Size && Buffer_Offset+Size+SizeOfNALU_Minus1+1>Buffer_Size))
- Size=Buffer_Size-Buffer_Offset;
-
- std::memcpy(TranscodedBuffer+TranscodedBuffer_Pos, Buffer+Buffer_Offset, Size);
- TranscodedBuffer_Pos+=Size;
- Buffer_Offset+=Size;
- }
- Buffer_Offset=0;
-
- Buffer_Temp=Buffer;
- Buffer=TranscodedBuffer;
- Buffer_Temp_Size=Buffer_Size;
- Buffer_Size=TranscodedBuffer_Size;
- Demux_Offset=Buffer_Size;
- }
- else
- {
- bool zero_byte=Buffer[Buffer_Offset+2]==0x00;
- if (!(((Buffer[Buffer_Offset+(zero_byte?4:3)]&0x1B)==0x01 && (Buffer[Buffer_Offset+(zero_byte?5:4)]&0x80)!=0x80)
- || (Buffer[Buffer_Offset+(zero_byte?4:3)]&0x1F)==0x0C))
- {
- if (Demux_Offset==0)
- {
- Demux_Offset=Buffer_Offset;
- Demux_IntermediateItemFound=false;
- }
- while (Demux_Offset+6<=Buffer_Size)
- {
- //Synchronizing
- while(Demux_Offset+6<=Buffer_Size && (Buffer[Demux_Offset ]!=0x00
- || Buffer[Demux_Offset+1]!=0x00
- || Buffer[Demux_Offset+2]!=0x01))
- {
- Demux_Offset+=2;
- while(Demux_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Demux_Offset+=2;
- if (Demux_Offset>=Buffer_Size || Buffer[Demux_Offset-1]==0x00)
- Demux_Offset--;
- }
-
- if (Demux_Offset+6>Buffer_Size)
- {
- if (File_Offset+Buffer_Size==File_Size)
- Demux_Offset=Buffer_Size;
- break;
- }
-
- zero_byte=Buffer[Demux_Offset+2]==0x00;
- if (Demux_IntermediateItemFound)
- {
- if (!(((Buffer[Demux_Offset+(zero_byte?4:3)]&0x1B)==0x01 && (Buffer[Demux_Offset+(zero_byte?5:4)]&0x80)!=0x80)
- || (Buffer[Demux_Offset+(zero_byte?4:3)]&0x1F)==0x0C))
- break;
- }
- else
- {
- if ((Buffer[Demux_Offset+(zero_byte?4:3)]&0x1B)==0x01 && (Buffer[Demux_Offset+(zero_byte?5:4)]&0x80)==0x80)
- Demux_IntermediateItemFound=true;
- }
-
- Demux_Offset++;
- }
-
- if (Demux_Offset+6>Buffer_Size && !FrameIsAlwaysComplete && File_Offset+Buffer_Size<File_Size)
- return false; //No complete frame
-
- if (Demux_Offset && Buffer[Demux_Offset-1]==0x00)
- Demux_Offset--;
-
- zero_byte=Buffer[Buffer_Offset+2]==0x00;
- size_t Buffer_Offset_Random=Buffer_Offset;
- if ((Buffer[Buffer_Offset_Random+(zero_byte?4:3)]&0x1F)==0x09)
- {
- Buffer_Offset_Random++;
- if (zero_byte)
- Buffer_Offset_Random++;
- while(Buffer_Offset_Random+6<=Buffer_Size && (Buffer[Buffer_Offset_Random ]!=0x00
- || Buffer[Buffer_Offset_Random+1]!=0x00
- || Buffer[Buffer_Offset_Random+2]!=0x01))
- Buffer_Offset_Random++;
- zero_byte=Buffer[Buffer_Offset_Random+2]==0x00;
- }
- RandomAccess=Buffer_Offset_Random+6<=Buffer_Size && (Buffer[Buffer_Offset_Random+(zero_byte?4:3)]&0x1F)==0x07; //seq_parameter_set
- }
- }
-
- if (!Status[IsAccepted])
- {
- if (Config->Demux_EventWasSent)
- return false;
- File_Avc* MI=new File_Avc;
- Open_Buffer_Init(MI);
- Open_Buffer_Continue(MI, Buffer, Buffer_Size);
- bool IsOk=MI->Status[IsAccepted];
- delete MI;
- if (!IsOk)
- return false;
- }
-
- if (IFrame_Count || RandomAccess)
- {
- bool Frame_Count_NotParsedIncluded_PlusOne=false;
- int64u PTS_Temp=FrameInfo.PTS;
- if (!IsSub)
- FrameInfo.PTS=(int64u)-1;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1 && Interlaced_Top!=Interlaced_Bottom)
- {
- Frame_Count_NotParsedIncluded--;
- Frame_Count_NotParsedIncluded_PlusOne=true;
- }
- Demux_UnpacketizeContainer_Demux(RandomAccess);
- if (!IsSub)
- FrameInfo.PTS=PTS_Temp;
- if (Frame_Count_NotParsedIncluded_PlusOne)
- Frame_Count_NotParsedIncluded++;
- }
- else
- Demux_UnpacketizeContainer_Demux_Clear();
-
- if (Buffer_Temp)
- {
- Demux_TotalBytes-=Buffer_Size;
- Demux_TotalBytes+=Buffer_Temp_Size;
- delete[] Buffer;
- Buffer=Buffer_Temp;
- Buffer_Size=Buffer_Temp_Size;
- }
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//---------------------------------------------------------------------------
-void File_Avc::Synched_Init()
-{
- //FrameInfo
- PTS_End=0;
- if (FrameInfo.DTS==(int64u)-1)
- FrameInfo.DTS=0; //No DTS in container
- DTS_Begin=FrameInfo.DTS;
- DTS_End=FrameInfo.DTS;
-
- //Temporal references
- TemporalReferences_DelayedElement=NULL;
- TemporalReferences_Min=0;
- TemporalReferences_Max=0;
- TemporalReferences_Reserved=0;
- TemporalReferences_Offset=0;
- TemporalReferences_Offset_pic_order_cnt_lsb_Last=0;
- TemporalReferences_pic_order_cnt_Min=0;
-
- //Text
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- GA94_03_IsPresent=false;
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-
- //File specific
- SizeOfNALU_Minus1=(int8u)-1;
-
- //Status
- IFrame_Count=0;
- prevPicOrderCntMsb=0;
- prevPicOrderCntLsb=(int32u)-1;
- prevTopFieldOrderCnt=(int32u)-1;
- prevFrameNum=(int32u)-1;
- prevFrameNumOffset=(int32u)-1;
-
- //Count of a Packets
- Block_Count=0;
- Interlaced_Top=0;
- Interlaced_Bottom=0;
- Structure_Field=0;
- Structure_Frame=0;
-
- //Temp
- FrameRate_Divider=1;
- FirstPFrameInGop_IsParsed=false;
- tc=0;
-
- //Default values
- Streams.resize(0x100);
- Streams[0x06].Searching_Payload=true; //sei
- Streams[0x07].Searching_Payload=true; //seq_parameter_set
- Streams[0x09].Searching_Payload=true; //access_unit_delimiter
- Streams[0x0F].Searching_Payload=true; //subset_seq_parameter_set
- for (int8u Pos=0xFF; Pos>=0xB9; Pos--)
- Streams[Pos].Searching_Payload=true; //Testing MPEG-PS
-
- //Options
- Option_Manage();
-
- //Specific cases
- #if MEDIAINFO_EVENTS
- if (Config->ParseUndecodableFrames_Get())
- {
- Accept(); //In some case, we must accept the stream very quickly and before the sequence header is detected
- Streams[0x01].Searching_Payload=true; //slice_header
- Streams[0x05].Searching_Payload=true; //slice_header
- }
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_DEMUX
- Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10=Config->Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10_Get();
- #endif //MEDIAINFO_DEMUX
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_ADVANCED2
-void File_Avc::Read_Buffer_SegmentChange()
-{
-}
-#endif //MEDIAINFO_ADVANCED2
-
-//---------------------------------------------------------------------------
-void File_Avc::Read_Buffer_Unsynched()
-{
- //Temporal references
- for (size_t Pos=0; Pos<TemporalReferences.size(); Pos++)
- delete TemporalReferences[Pos]; //TemporalReferences[Pos]=NULL;
- TemporalReferences.clear();
- delete TemporalReferences_DelayedElement; TemporalReferences_DelayedElement=NULL;
- TemporalReferences_Min=0;
- TemporalReferences_Max=0;
- TemporalReferences_Reserved=0;
- TemporalReferences_Offset=0;
- TemporalReferences_Offset_pic_order_cnt_lsb_Last=0;
- TemporalReferences_pic_order_cnt_Min=0;
-
- //Text
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- if (GA94_03_Parser)
- GA94_03_Parser->Open_Buffer_Unsynch();
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-
- //parameter_sets
- if (SizedBlocks) //If sized blocks, it is not a broadcasted stream so SPS/PPS are only in container header, we must not disable them.
- {
- //Rebuilding immediatly TemporalReferences
- for (std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item=seq_parameter_sets.begin(); seq_parameter_set_Item!=seq_parameter_sets.end(); ++seq_parameter_set_Item)
- if ((*seq_parameter_set_Item))
- {
- size_t MaxNumber;
- switch ((*seq_parameter_set_Item)->pic_order_cnt_type)
- {
- case 0 : MaxNumber=(*seq_parameter_set_Item)->MaxPicOrderCntLsb; break;
- case 2 : MaxNumber=(*seq_parameter_set_Item)->MaxFrameNum*2; break;
- default: Trusted_IsNot("Not supported"); return;
- }
-
- TemporalReferences.resize(4*MaxNumber);
- TemporalReferences_Reserved=MaxNumber;
- }
- }
- else
- {
- seq_parameter_sets.clear();
- subset_seq_parameter_sets.clear();
- pic_parameter_sets.clear();
- }
-
- //Status
- Interlaced_Top=0;
- Interlaced_Bottom=0;
- prevPicOrderCntMsb=0;
- prevPicOrderCntLsb=(int32u)-1;
- prevTopFieldOrderCnt=(int32u)-1;
- prevFrameNum=(int32u)-1;
- prevFrameNumOffset=(int32u)-1;
-
- //Temp
- FrameRate_Divider=1;
- FirstPFrameInGop_IsParsed=false;
- tc=0;
-
- //Impossible to know TimeStamps now
- PTS_End=0;
- DTS_End=0;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Avc::Header_Parse()
-{
- //Specific case
- if (MustParse_SPS_PPS)
- {
- Header_Fill_Size(Element_Size);
- Header_Fill_Code((int64u)-1, "Specific");
- return;
- }
-
- //Parsing
- int8u nal_unit_type;
- if (!SizedBlocks)
- {
- if (Buffer[Buffer_Offset+2]==0x00)
- Skip_B1( "zero_byte");
- Skip_B3( "start_code_prefix_one_3bytes");
- BS_Begin();
- Mark_0 ();
- Get_S1 ( 2, nal_ref_idc, "nal_ref_idc");
- Get_S1 ( 5, nal_unit_type, "nal_unit_type");
- BS_End();
- if (!Header_Parser_Fill_Size())
- {
- Element_WaitForMoreData();
- return;
- }
- }
- else
- {
- int32u Size;
- switch (SizeOfNALU_Minus1)
- {
- case 0: {
- int8u Size_;
- Get_B1 (Size_, "size");
- Size=Size_;
- }
- break;
- case 1: {
- int16u Size_;
- Get_B2 (Size_, "size");
- Size=Size_;
- }
- break;
- case 2: {
- int32u Size_;
- Get_B3 (Size_, "size");
- Size=Size_;
- }
- break;
- case 3: Get_B4 (Size, "size");
- break;
- default: Trusted_IsNot("No size of NALU defined");
- Size=(int32u)(Buffer_Size-Buffer_Offset);
- }
- BS_Begin();
- Mark_0 ();
- Get_S1 ( 2, nal_ref_idc, "nal_ref_idc");
- Get_S1 ( 5, nal_unit_type, "nal_unit_type");
- BS_End();
-
- FILLING_BEGIN();
- Header_Fill_Size(Size?(Element_Offset-1+Size):(Buffer_Size-Buffer_Offset)); //If Size is 0, it is not normal, we skip the complete frame
- FILLING_END();
- }
-
- //Filling
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Header_Fill_Code(nal_unit_type, Ztring().From_CC1(nal_unit_type));
- else
- #endif //MEDIAINFO_TRACE
- Header_Fill_Code(nal_unit_type);
-}
-
-//---------------------------------------------------------------------------
-bool File_Avc::Header_Parser_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset+4;
- while (Buffer_Offset_Temp+5<=Buffer_Size
- && CC3(Buffer+Buffer_Offset_Temp)!=0x000001)
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer_Offset_Temp>=Buffer_Size || Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
- }
-
- //Must wait more data?
- if (Buffer_Offset_Temp+5>Buffer_Size)
- {
- if (FrameIsAlwaysComplete || File_Offset+Buffer_Size>=File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- if (Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Avc::Header_Parser_QuickSearch()
-{
- while ( Buffer_Offset+6<=Buffer_Size
- && Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && (Buffer[Buffer_Offset+2]==0x01
- || (Buffer[Buffer_Offset+2]==0x00 && Buffer[Buffer_Offset+3]==0x01)))
- {
- //Getting start_code
- int8u start_code;
- if (Buffer[Buffer_Offset+2]==0x00)
- start_code=CC1(Buffer+Buffer_Offset+4)&0x1F;
- else
- start_code=CC1(Buffer+Buffer_Offset+3)&0x1F;
-
- //Searching start
- if (Streams[start_code].Searching_Payload
- || Streams[start_code].ShouldDuplicate)
- return true;
-
- //Synchronizing
- Buffer_Offset+=4;
- Synched=false;
- if (!Synchronize())
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
-
- if (Buffer_Offset+6>Buffer_Size)
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
- }
-
- Trusted_IsNot("AVC, Synchronisation lost");
- return Synchronize();
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::Data_Parse()
-{
- //Specific case
- if (Element_Code==(int64u)-1)
- {
- SPS_PPS();
- return;
- }
-
- //Trailing zeroes
- int64u Element_Size_SaveBeforeZeroes=Element_Size;
- if (Element_Size)
- {
- while (Element_Size && Buffer[Buffer_Offset+(size_t)Element_Size-1]==0)
- Element_Size--;
- }
-
- //svc_extension
- bool svc_extension_flag=false;
- if (Element_Code==0x0E || Element_Code==0x14)
- {
- BS_Begin();
- Get_SB (svc_extension_flag, "svc_extension_flag");
- if (svc_extension_flag)
- nal_unit_header_svc_extension();
- else
- nal_unit_header_mvc_extension();
- BS_End();
- }
-
- //Searching emulation_prevention_three_byte
- int8u* Buffer_3Bytes=NULL;
- const int8u* Save_Buffer=Buffer;
- int64u Save_File_Offset=File_Offset;
- size_t Save_Buffer_Offset=Buffer_Offset;
- int64u Save_Element_Size=Element_Size;
- size_t Element_Offset_3Bytes=(size_t)Element_Offset;
- std::vector<size_t> ThreeByte_List;
- while (Element_Offset_3Bytes+3<=Element_Size)
- {
- if (CC3(Buffer+Buffer_Offset+(size_t)Element_Offset_3Bytes)==0x000003)
- ThreeByte_List.push_back(Element_Offset_3Bytes+2);
- Element_Offset_3Bytes+=2;
- while(Element_Offset_3Bytes<Element_Size && Buffer[Buffer_Offset+(size_t)Element_Offset_3Bytes]!=0x00)
- Element_Offset_3Bytes+=2;
- if (Element_Offset_3Bytes>=Element_Size || Buffer[Buffer_Offset+(size_t)Element_Offset_3Bytes-1]==0x00)
- Element_Offset_3Bytes--;
- }
-
- if (!ThreeByte_List.empty())
- {
- //We must change the buffer for keeping out
- Element_Size=Save_Element_Size-ThreeByte_List.size();
- File_Offset+=Buffer_Offset;
- Buffer_Offset=0;
- Buffer_3Bytes=new int8u[(size_t)Element_Size];
- for (size_t Pos=0; Pos<=ThreeByte_List.size(); Pos++)
- {
- size_t Pos0=(Pos==ThreeByte_List.size())?(size_t)Save_Element_Size:(ThreeByte_List[Pos]);
- size_t Pos1=(Pos==0)?0:(ThreeByte_List[Pos-1]+1);
- size_t Buffer_3bytes_Begin=Pos1-Pos;
- size_t Save_Buffer_Begin =Pos1;
- size_t Size= Pos0-Pos1;
- std::memcpy(Buffer_3Bytes+Buffer_3bytes_Begin, Save_Buffer+Save_Buffer_Offset+Save_Buffer_Begin, Size);
- }
- Buffer=Buffer_3Bytes;
- }
-
- //Parsing
- switch (Element_Code)
- {
- case 0x00 : Element_Name("unspecified"); Skip_XX(Element_Size-Element_Offset, "Data"); break;
- case 0x01 : slice_layer_without_partitioning_non_IDR(); break;
- case 0x02 : Element_Name("slice_data_partition_a_layer"); Skip_XX(Element_Size-Element_Offset, "Data"); break;
- case 0x03 : Element_Name("slice_data_partition_b_layer"); Skip_XX(Element_Size-Element_Offset, "Data"); break;
- case 0x04 : Element_Name("slice_data_partition_c_layer"); Skip_XX(Element_Size-Element_Offset, "Data"); break;
- case 0x05 : slice_layer_without_partitioning_IDR(); break;
- case 0x06 : sei(); break;
- case 0x07 : seq_parameter_set(); break;
- case 0x08 : pic_parameter_set(); break;
- case 0x09 : access_unit_delimiter(); break;
- case 0x0A : Element_Name("end_of_seq"); Skip_XX(Element_Size-Element_Offset, "Data"); break;
- case 0x0B : Element_Name("end_of_stream"); Skip_XX(Element_Size-Element_Offset, "Data"); break;
- case 0x0C : filler_data(); break;
- case 0x0D : Element_Name("seq_parameter_set_extension"); Skip_XX(Element_Size-Element_Offset, "Data"); break;
- case 0x0E : prefix_nal_unit(svc_extension_flag); break;
- case 0x0F : subset_seq_parameter_set(); break;
- case 0x13 : Element_Name("slice_layer_without_partitioning"); Skip_XX(Element_Size-Element_Offset, "Data"); break;
- case 0x14 : slice_layer_extension(svc_extension_flag); break;
- default :
- if (Element_Code<0x18)
- Element_Name("reserved");
- else
- Element_Name("unspecified");
- Skip_XX(Element_Size-Element_Offset, "Data");
- }
-
- if (!ThreeByte_List.empty())
- {
- //We must change the buffer for keeping out
- Element_Size=Save_Element_Size;
- File_Offset=Save_File_Offset;
- Buffer_Offset=Save_Buffer_Offset;
- delete[] Buffer; Buffer=Save_Buffer;
- Buffer_3Bytes=NULL; //Same as Buffer...
- Element_Offset+=ThreeByte_List.size();
- }
-
- //Duplicate
- #if MEDIAINFO_DUPLICATE
- if (!Streams.empty() && Streams[(size_t)Element_Code].ShouldDuplicate)
- File__Duplicate_Write(Element_Code);
- #endif //MEDIAINFO_DUPLICATE
-
- #if MEDIAINFO_DEMUX
- if (Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10)
- {
- if (Element_Code==0x07)
- {
- std::vector<seq_parameter_set_struct*>::iterator Data_Item=seq_parameter_sets.begin();
- if (Data_Item!=seq_parameter_sets.end() && (*Data_Item))
- {
- delete[] (*Data_Item)->Iso14496_10_Buffer;
- (*Data_Item)->Iso14496_10_Buffer_Size=(size_t)(Element_Size+4);
- (*Data_Item)->Iso14496_10_Buffer=new int8u[(*Data_Item)->Iso14496_10_Buffer_Size];
- (*Data_Item)->Iso14496_10_Buffer[0]=0x00;
- (*Data_Item)->Iso14496_10_Buffer[1]=0x00;
- (*Data_Item)->Iso14496_10_Buffer[2]=0x01;
- (*Data_Item)->Iso14496_10_Buffer[3]=0x67;
- std::memcpy((*Data_Item)->Iso14496_10_Buffer+4, Buffer+Buffer_Offset, (size_t)Element_Size);
- }
- }
- if (Element_Code==0x08)
- {
- std::vector<pic_parameter_set_struct*>::iterator Data_Item=pic_parameter_sets.begin();
- if (Data_Item!=pic_parameter_sets.end() && (*Data_Item))
- {
- delete[] (*Data_Item)->Iso14496_10_Buffer;
- (*Data_Item)->Iso14496_10_Buffer_Size=(size_t)(Element_Size+4);
- (*Data_Item)->Iso14496_10_Buffer=new int8u[(*Data_Item)->Iso14496_10_Buffer_Size];
- (*Data_Item)->Iso14496_10_Buffer[0]=0x00;
- (*Data_Item)->Iso14496_10_Buffer[1]=0x00;
- (*Data_Item)->Iso14496_10_Buffer[2]=0x01;
- (*Data_Item)->Iso14496_10_Buffer[3]=0x68;
- std::memcpy((*Data_Item)->Iso14496_10_Buffer+4, Buffer+Buffer_Offset, (size_t)Element_Size);
- }
- }
- if (Element_Code==0x0F)
- {
- std::vector<seq_parameter_set_struct*>::iterator Data_Item=subset_seq_parameter_sets.begin();
- if (Data_Item!=subset_seq_parameter_sets.end() && (*Data_Item))
- {
- SizeOfNALU_Minus1=0;
- delete[] (*Data_Item)->Iso14496_10_Buffer;
- (*Data_Item)->Iso14496_10_Buffer_Size=(size_t)(Element_Size+4);
- (*Data_Item)->Iso14496_10_Buffer=new int8u[(*Data_Item)->Iso14496_10_Buffer_Size];
- (*Data_Item)->Iso14496_10_Buffer[0]=0x00;
- (*Data_Item)->Iso14496_10_Buffer[1]=0x00;
- (*Data_Item)->Iso14496_10_Buffer[2]=0x01;
- (*Data_Item)->Iso14496_10_Buffer[3]=0x6F;
- std::memcpy((*Data_Item)->Iso14496_10_Buffer+4, Buffer+Buffer_Offset, (size_t)Element_Size);
- }
- }
- }
- #endif //MEDIAINFO_DEMUX
-
- //Trailing zeroes
- Element_Size=Element_Size_SaveBeforeZeroes;
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Packet "01"
-void File_Avc::slice_layer_without_partitioning_non_IDR()
-{
- Element_Name("slice_layer_without_partitioning (non-IDR)");
-
- //Parsing
- BS_Begin();
- slice_header();
- slice_data(true);
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-// Packet "05"
-void File_Avc::slice_layer_without_partitioning_IDR()
-{
- Element_Name("slice_layer_without_partitioning (IDR)");
-
- //Parsing
- BS_Begin();
- slice_header();
- slice_data(true);
- BS_End();
-
- FILLING_BEGIN_PRECISE();
- //NextCode
- for (int8u Pos=0x01; Pos<=0x05; Pos++)
- NextCode_Add(Pos);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-//
-void File_Avc::slice_header()
-{
- //Encryption management
- if (CA_system_ID_MustSkipSlices)
- {
- //Is not decodable
- Skip_BS(Data_BS_Remain(), "Data");
- Finish("AVC");
- return;
- }
-
- Element_Begin1("slice_header");
-
- //Parsing
- int32u slice_type, pic_order_cnt_lsb=(int32u)-1;
- int32u first_mb_in_slice, pic_parameter_set_id, frame_num, num_ref_idx_l0_active_minus1, num_ref_idx_l1_active_minus1, disable_deblocking_filter_idc, num_slice_groups_minus1, slice_group_map_type;
- int32s delta_pic_order_cnt_bottom=0;
- bool field_pic_flag=false, bottom_field_flag=false;
- Get_UE (first_mb_in_slice, "first_mb_in_slice");
- Get_UE (slice_type, "slice_type"); Param_Info1C((slice_type<10), Avc_slice_type[slice_type]);
- #if MEDIAINFO_EVENTS
- {
- EVENT_BEGIN (Video, SliceInfo, 0)
- Event.FieldPosition=Field_Count;
- Event.SlicePosition=Element_IsOK()?first_mb_in_slice:(int64u)-1;
- switch (slice_type)
- {
- case 0 :
- case 3 :
- case 5 :
- case 8 :
- Event.SliceType=1; break;
- case 1 :
- case 6 :
- Event.SliceType=2; break;
- case 2 :
- case 4 :
- case 7 :
- case 9 :
- Event.SliceType=0; break;
- default:
- Event.SliceType=(int8u)-1;
- }
- Event.Flags=0;
- EVENT_END ()
- }
- #endif //MEDIAINFO_EVENTS
- if (slice_type>=10)
- {
- Skip_BS(Data_BS_Remain(), "Data");
- Element_End0();
- return;
- }
- Get_UE (pic_parameter_set_id, "pic_parameter_set_id");
- std::vector<pic_parameter_set_struct*>::iterator pic_parameter_set_Item;
- if (pic_parameter_set_id>=pic_parameter_sets.size() || (*(pic_parameter_set_Item=pic_parameter_sets.begin()+pic_parameter_set_id))==NULL)
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (pic_parameter_set is missing)");
- Element_End0();
- return;
- }
- std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item;
- if ((*pic_parameter_set_Item)->seq_parameter_set_id>=seq_parameter_sets.size() || (*(seq_parameter_set_Item=seq_parameter_sets.begin()+(*pic_parameter_set_Item)->seq_parameter_set_id))==NULL)
- {
- if ((*pic_parameter_set_Item)->seq_parameter_set_id>=subset_seq_parameter_sets.size() || (*(seq_parameter_set_Item=subset_seq_parameter_sets.begin()+(*pic_parameter_set_Item)->seq_parameter_set_id))==NULL)
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (seq_parameter_set is missing)");
- Element_End0();
- return;
- }
- }
- if ((*seq_parameter_set_Item)->separate_colour_plane_flag==1)
- Skip_S1(2, "color_plane_id");
- num_ref_idx_l0_active_minus1=(*pic_parameter_set_Item)->num_ref_idx_l0_default_active_minus1; //Default
- num_ref_idx_l1_active_minus1=(*pic_parameter_set_Item)->num_ref_idx_l1_default_active_minus1; //Default
- Get_BS ((*seq_parameter_set_Item)->log2_max_frame_num_minus4+4, frame_num, "frame_num");
- if (!(*seq_parameter_set_Item)->frame_mbs_only_flag)
- {
- TEST_SB_GET(field_pic_flag, "field_pic_flag");
- Get_SB (bottom_field_flag, "bottom_field_flag");
- TEST_SB_END();
- }
- if (Element_Code==5) //IdrPicFlag
- Skip_UE( "idr_pic_id");
- if ((*seq_parameter_set_Item)->pic_order_cnt_type==0)
- {
- Get_BS ((*seq_parameter_set_Item)->log2_max_pic_order_cnt_lsb_minus4+4, pic_order_cnt_lsb, "pic_order_cnt_lsb");
- if ((*pic_parameter_set_Item)->bottom_field_pic_order_in_frame_present_flag && !field_pic_flag)
- Get_SE (delta_pic_order_cnt_bottom, "delta_pic_order_cnt_bottom");
- }
- if ((*seq_parameter_set_Item)->pic_order_cnt_type==1 && !(*seq_parameter_set_Item)->delta_pic_order_always_zero_flag )
- {
- Skip_SE( "delta_pic_order_cnt[0]");
- if((*pic_parameter_set_Item)->bottom_field_pic_order_in_frame_present_flag && !field_pic_flag)
- Skip_SE( "delta_pic_order_cnt[1]");
- }
- if((*pic_parameter_set_Item)->redundant_pic_cnt_present_flag)
- Skip_UE( "redundant_pic_cnt");
- if (slice_type==1 || slice_type==6) //B-Frame
- Skip_SB( "direct_spatial_mv_pred_flag");
- switch (slice_type)
- {
- case 0 : //P-Frame
- case 1 : //B-Frame
- case 3 : //SP-Frame
- case 5 : //P-Frame
- case 6 : //B-Frame
- case 8 : //SP-Frame
- TEST_SB_SKIP( "num_ref_idx_active_override_flag");
- Get_UE (num_ref_idx_l0_active_minus1, "num_ref_idx_l0_active_minus1");
- switch (slice_type)
- {
- case 1 : //B-Frame
- case 6 : //B-Frame
- Get_UE (num_ref_idx_l1_active_minus1, "num_ref_idx_l1_active_minus1");
- break;
- default: ;
- }
- TEST_SB_END();
- break;
- default: ;
- }
- ref_pic_list_modification(slice_type, Element_Code==20); //nal_unit_type==20 --> ref_pic_list_mvc_modification()
- if (((*pic_parameter_set_Item)->weighted_pred_flag && (slice_type==0 || slice_type==3 || slice_type==5 || slice_type==8))
- || ((*pic_parameter_set_Item)->weighted_bipred_idc==1 && (slice_type==1 || slice_type==6)))
- pred_weight_table(num_ref_idx_l0_active_minus1, num_ref_idx_l1_active_minus1, (*seq_parameter_set_Item)->ChromaArrayType());
- std::vector<int8u> memory_management_control_operations;
- if (nal_ref_idc)
- dec_ref_pic_marking(memory_management_control_operations);
-
- if ((*pic_parameter_set_Item)->entropy_coding_mode_flag &&
- (slice_type!=2 && slice_type!=7 && //I-Frames
- slice_type!=4 && slice_type!=9)) //SI-Frames
- Skip_UE( "cabac_init_idc");
- Skip_SE( "slice_qp_delta");
- switch (slice_type)
- {
- case 3 : //SP-Frame
- case 4 : //SI-Frame
- case 8 : //SP-Frame
- case 9 : //SI-Frame
- switch (slice_type)
- {
- case 3 : //SP-Frame
- case 8 : //SP-Frame
- Skip_SB( "sp_for_switch_flag");
- break;
- default: ;
- }
- Skip_SE ( "slice_qs_delta");
- break;
- default: ;
- }
- if ((*pic_parameter_set_Item)->deblocking_filter_control_present_flag)
- {
- Get_UE(disable_deblocking_filter_idc, "disable_deblocking_filter_idc");
- if (disable_deblocking_filter_idc!=1)
- {
- Skip_SE( "slice_alpha_c0_offset_div2");
- Skip_SE( "slice_beta_offset_div2");
- }
- }
- num_slice_groups_minus1=(*pic_parameter_set_Item)->num_slice_groups_minus1; //Default
- slice_group_map_type=(*pic_parameter_set_Item)->slice_group_map_type; //Default
- //if (num_slice_groups_minus1 > 0 && slice_group_map_type >=3 && slice_group_map_type <=5)
- // Get_BS ((*seq_parameter_set_Item)->log2_max_slice_group_change_cycle_minus4+4, slice_group_change_cycle, "slice_group_change_cycle");
-
- Element_End0();
-
- FILLING_BEGIN();
- //Count of I-Frames
- if (first_mb_in_slice==0 && Element_Code!=20 && (slice_type==2 || slice_type==7)) //Not slice_layer_extension, I-Frame
- IFrame_Count++;
-
- //pic_struct
- if (field_pic_flag && (*seq_parameter_set_Item)->pic_struct_FirstDetected==(int8u)-1)
- (*seq_parameter_set_Item)->pic_struct_FirstDetected=bottom_field_flag?2:1; //2=BFF, 1=TFF
-
- //Saving some info
- int32s TemporalReferences_Offset_pic_order_cnt_lsb_Diff=0;
- if ((*seq_parameter_set_Item)->pic_order_cnt_type!=1 && first_mb_in_slice==0 && (Element_Code!=0x14 || seq_parameter_sets.empty())) //Not slice_layer_extension except if MVC only
- {
- if (field_pic_flag)
- {
- Structure_Field++;
- if (bottom_field_flag)
- Interlaced_Bottom++;
- else
- Interlaced_Top++;
- }
- else
- Structure_Frame++;
-
- //Frame order detection
- int64s pic_order_cnt=0;
- switch ((*seq_parameter_set_Item)->pic_order_cnt_type)
- {
- case 0 :
- {
- if (Element_Code==5) //IDR
- {
- prevPicOrderCntMsb=0;
- prevPicOrderCntLsb=0;
- TemporalReferences_Offset=TemporalReferences_Max;
- if (TemporalReferences_Offset%2)
- TemporalReferences_Offset++;
- TemporalReferences_pic_order_cnt_Min=0;
- }
- else
- {
- bool Has5=false;
- for (std::vector<int8u>::iterator Temp=memory_management_control_operations.begin(); Temp!=memory_management_control_operations.end(); ++Temp)
- if ((*Temp)==5)
- {
- Has5=true;
- break;
- }
- if (Has5)
- {
- prevPicOrderCntMsb=0;
- if (bottom_field_flag)
- prevPicOrderCntLsb=0;
- else
- prevPicOrderCntLsb=prevTopFieldOrderCnt;
- }
- }
- int32s PicOrderCntMsb;
- if (prevPicOrderCntLsb==(int32u)-1)
- {
- PicOrderCntMsb=0;
- if ((int32u)(2*((*seq_parameter_set_Item)->max_num_ref_frames+3))<pic_order_cnt_lsb)
- TemporalReferences_Min=pic_order_cnt_lsb-2*((*seq_parameter_set_Item)->max_num_ref_frames+3);
- }
- else if (pic_order_cnt_lsb<prevPicOrderCntLsb && prevPicOrderCntLsb-pic_order_cnt_lsb>=(*seq_parameter_set_Item)->MaxPicOrderCntLsb/2)
- PicOrderCntMsb=prevPicOrderCntMsb+(*seq_parameter_set_Item)->MaxPicOrderCntLsb;
- else if (pic_order_cnt_lsb>prevPicOrderCntLsb && pic_order_cnt_lsb-prevPicOrderCntLsb>(*seq_parameter_set_Item)->MaxPicOrderCntLsb/2)
- PicOrderCntMsb=prevPicOrderCntMsb-(*seq_parameter_set_Item)->MaxPicOrderCntLsb;
- else
- PicOrderCntMsb=prevPicOrderCntMsb;
-
- int32s TopFieldOrderCnt=PicOrderCntMsb+pic_order_cnt_lsb;
- int32s BottomFieldOrderCnt;
- if (field_pic_flag)
- BottomFieldOrderCnt=TopFieldOrderCnt+delta_pic_order_cnt_bottom;
- else
- BottomFieldOrderCnt=PicOrderCntMsb+pic_order_cnt_lsb;
-
- prevPicOrderCntMsb=PicOrderCntMsb;
- prevPicOrderCntLsb=pic_order_cnt_lsb;
- prevTopFieldOrderCnt=TopFieldOrderCnt;
-
- pic_order_cnt=bottom_field_flag?BottomFieldOrderCnt:TopFieldOrderCnt;
- }
- break;
- case 2 :
- {
- bool Has5=false;
- for (std::vector<int8u>::iterator Temp=memory_management_control_operations.begin(); Temp!=memory_management_control_operations.end(); ++Temp)
- if ((*Temp)==5)
- {
- Has5=true;
- break;
- }
- if (Has5)
- prevFrameNumOffset=0;
- int32u FrameNumOffset;
-
- if (Element_Code==5) //IdrPicFlag
- {
- TemporalReferences_Offset=TemporalReferences_Max;
- if (TemporalReferences_Offset%2)
- TemporalReferences_Offset++;
- FrameNumOffset=0;
- }
- else if (prevFrameNumOffset==(int32u)-1)
- FrameNumOffset=0;
- else if (prevFrameNum>frame_num)
- FrameNumOffset=prevFrameNumOffset+(*seq_parameter_set_Item)->MaxFrameNum;
- else
- FrameNumOffset=prevFrameNumOffset;
-
- int32u tempPicOrderCnt;
- if (Element_Code==5) //IdrPicFlag
- tempPicOrderCnt=0;
- else if (nal_ref_idc)
- tempPicOrderCnt=2*(FrameNumOffset+frame_num);
- else
- tempPicOrderCnt=2*(FrameNumOffset+frame_num)-1;
-
- pic_order_cnt=tempPicOrderCnt;
-
- prevFrameNum=frame_num;
- prevFrameNumOffset=FrameNumOffset;
-
- pic_order_cnt_lsb=frame_num;
- }
- break;
- default: ;
- }
-
- if (pic_order_cnt<TemporalReferences_pic_order_cnt_Min)
- {
- if (pic_order_cnt<0)
- {
- size_t Base=(size_t)(TemporalReferences_Offset+TemporalReferences_pic_order_cnt_Min);
- size_t ToInsert=(size_t)(TemporalReferences_pic_order_cnt_Min-pic_order_cnt);
- if (Base+ToInsert>=4*TemporalReferences_Reserved || Base>=4*TemporalReferences_Reserved || ToInsert+TemporalReferences_Max>=4*TemporalReferences_Reserved || TemporalReferences_Max>=4*TemporalReferences_Reserved || TemporalReferences_Max-Base>=4*TemporalReferences_Reserved)
- {
- Trusted_IsNot("Problem in temporal references");
- return;
- }
- Element_Info1(__T("Offset of ")+Ztring::ToZtring(ToInsert));
- TemporalReferences.insert(TemporalReferences.begin()+Base, ToInsert, NULL);
- TemporalReferences_Offset+=ToInsert;
- TemporalReferences_Max+=ToInsert;
- TemporalReferences_pic_order_cnt_Min=pic_order_cnt;
- }
- else if (TemporalReferences_Min>(size_t)(TemporalReferences_Offset+pic_order_cnt))
- TemporalReferences_Min=(size_t)(TemporalReferences_Offset+pic_order_cnt);
- }
-
- if (pic_order_cnt<0 && TemporalReferences_Offset<(size_t)(-pic_order_cnt)) //Found in playreadyEncryptedBlowUp.ts without encryption test
- {
- Trusted_IsNot("Problem in temporal references");
- return;
- }
-
- if ((size_t)(TemporalReferences_Offset+pic_order_cnt)>=3*TemporalReferences_Reserved)
- {
- size_t Offset=TemporalReferences_Max-TemporalReferences_Offset;
- if (Offset%2)
- Offset++;
- if (Offset>=TemporalReferences_Reserved && pic_order_cnt>=(int64s)TemporalReferences_Reserved)
- {
- TemporalReferences_Offset+=TemporalReferences_Reserved;
- pic_order_cnt-=TemporalReferences_Reserved;
- switch ((*seq_parameter_set_Item)->pic_order_cnt_type)
- {
- case 0 :
- prevPicOrderCntMsb-=(int32u)TemporalReferences_Reserved;
- break;
- case 2 :
- prevFrameNumOffset-=(int32u)TemporalReferences_Reserved/2;
- break;
- default:;
- }
- }
- else if (Offset && Offset<=2) //Only I-frames
- TemporalReferences_Offset+=2;
- while (TemporalReferences_Offset+pic_order_cnt>=3*TemporalReferences_Reserved)
- {
- for (size_t Pos=0; Pos<TemporalReferences_Reserved; Pos++)
- {
- if (TemporalReferences[Pos])
- {
- if ((Pos%2)==0)
- PictureTypes_PreviousFrames+=Avc_slice_type[TemporalReferences[Pos]->slice_type];
- }
- else if (!PictureTypes_PreviousFrames.empty()) //Only if stream already started
- {
- if ((Pos%2)==0)
- PictureTypes_PreviousFrames+=' ';
- }
- delete TemporalReferences[Pos];
- }
- if (PictureTypes_PreviousFrames.size()>=8*TemporalReferences.size())
- PictureTypes_PreviousFrames.erase(PictureTypes_PreviousFrames.begin(), PictureTypes_PreviousFrames.begin()+PictureTypes_PreviousFrames.size()-TemporalReferences.size());
- TemporalReferences.erase(TemporalReferences.begin(), TemporalReferences.begin()+TemporalReferences_Reserved);
- TemporalReferences.resize(4*TemporalReferences_Reserved);
- if (TemporalReferences_Reserved<TemporalReferences_Offset)
- TemporalReferences_Offset-=TemporalReferences_Reserved;
- else
- TemporalReferences_Offset=0;
- if (TemporalReferences_Reserved<TemporalReferences_Min)
- TemporalReferences_Min-=TemporalReferences_Reserved;
- else
- TemporalReferences_Min=0;
- if (TemporalReferences_Reserved<TemporalReferences_Max)
- TemporalReferences_Max-=TemporalReferences_Reserved;
- else
- TemporalReferences_Max=0;
- }
- }
-
- TemporalReferences_Offset_pic_order_cnt_lsb_Diff=(int32s)((int32s)(TemporalReferences_Offset+pic_order_cnt)-TemporalReferences_Offset_pic_order_cnt_lsb_Last);
- TemporalReferences_Offset_pic_order_cnt_lsb_Last=(size_t)(TemporalReferences_Offset+pic_order_cnt);
- if (TemporalReferences_Max<=TemporalReferences_Offset_pic_order_cnt_lsb_Last)
- TemporalReferences_Max=TemporalReferences_Offset_pic_order_cnt_lsb_Last+((*seq_parameter_set_Item)->frame_mbs_only_flag?2:1);
- if (TemporalReferences_Min>TemporalReferences_Offset_pic_order_cnt_lsb_Last)
- TemporalReferences_Min=TemporalReferences_Offset_pic_order_cnt_lsb_Last;
- if (TemporalReferences_DelayedElement)
- {
- delete TemporalReferences[TemporalReferences_Offset_pic_order_cnt_lsb_Last]; TemporalReferences[TemporalReferences_Offset_pic_order_cnt_lsb_Last]=TemporalReferences_DelayedElement;
- }
- if (TemporalReferences[TemporalReferences_Offset_pic_order_cnt_lsb_Last]==NULL)
- TemporalReferences[TemporalReferences_Offset_pic_order_cnt_lsb_Last]=new temporal_reference();
- TemporalReferences[TemporalReferences_Offset_pic_order_cnt_lsb_Last]->frame_num=frame_num;
- TemporalReferences[TemporalReferences_Offset_pic_order_cnt_lsb_Last]->slice_type=(int8u)slice_type;
- TemporalReferences[TemporalReferences_Offset_pic_order_cnt_lsb_Last]->IsTop=!bottom_field_flag;
- TemporalReferences[TemporalReferences_Offset_pic_order_cnt_lsb_Last]->IsField=field_pic_flag;
- if (TemporalReferences_DelayedElement)
- {
- TemporalReferences_DelayedElement=NULL;
- sei_message_user_data_registered_itu_t_t35_GA94_03_Delayed((*pic_parameter_set_Item)->seq_parameter_set_id);
- }
- }
-
- if ((*seq_parameter_set_Item)->vui_parameters && (*seq_parameter_set_Item)->vui_parameters->timing_info_present_flag && (*seq_parameter_set_Item)->vui_parameters->num_units_in_tick)
- tc=float64_int64s(((float64)1000000000)/((float64)(*seq_parameter_set_Item)->vui_parameters->time_scale/(*seq_parameter_set_Item)->vui_parameters->num_units_in_tick/((*seq_parameter_set_Item)->pic_order_cnt_type==2?1:2)/FrameRate_Divider)/((!(*seq_parameter_set_Item)->frame_mbs_only_flag && field_pic_flag)?2:1));
- if (first_mb_in_slice==0)
- {
- if (Frame_Count==0)
- {
- if (FrameInfo.PTS==(int64u)-1)
- FrameInfo.PTS=FrameInfo.DTS+tc*(TemporalReferences_Offset_pic_order_cnt_lsb_Diff?2:1)*((!(*seq_parameter_set_Item)->frame_mbs_only_flag && field_pic_flag)?2:1); //No PTS in container
- PTS_Begin=FrameInfo.PTS;
- }
- #if MEDIAINFO_ADVANCED2
- if (PTS_Begin_Segment==(int64u)-1 && File_Offset>=Config->File_Current_Offset)
- {
- PTS_Begin_Segment=FrameInfo.PTS;
- }
- #endif //MEDIAINFO_ADVANCED2
- if (slice_type==2 || slice_type==7) //IFrame
- FirstPFrameInGop_IsParsed=false;
- }
- else
- {
- if (FrameInfo.PTS!=(int64u)-1)
- FrameInfo.PTS-=tc;
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.DTS-=tc;
- }
-
- //Frame pos
- if (Frame_Count!=(int64u)-1 && Frame_Count && ((!(*seq_parameter_set_Item)->frame_mbs_only_flag && Interlaced_Top==Interlaced_Bottom && field_pic_flag) || first_mb_in_slice!=0 || (Element_Code==0x14 && !seq_parameter_sets.empty())))
- {
- Frame_Count--;
- if (IFrame_Count && Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded--;
- Frame_Count_InThisBlock--;
- }
- else if (first_mb_in_slice==0)
- {
- if ((*seq_parameter_set_Item)->pic_order_cnt_type!=1 && (Element_Code!=0x14 || seq_parameter_sets.empty())) //Not slice_layer_extension except if MVC only
- {
- if ((!IsSub || Frame_Count_InThisBlock) && TemporalReferences_Offset_pic_order_cnt_lsb_Diff && TemporalReferences_Offset_pic_order_cnt_lsb_Diff!=2)
- FrameInfo.PTS+=(TemporalReferences_Offset_pic_order_cnt_lsb_Diff-(field_pic_flag?1:2))/((!(*seq_parameter_set_Item)->frame_mbs_only_flag && field_pic_flag)?1:2)*(int64s)tc;
- }
-
- if (!FirstPFrameInGop_IsParsed && (slice_type==0 || slice_type==5)) //P-Frame
- {
- FirstPFrameInGop_IsParsed=true;
-
- //Testing if we have enough to test GOP
- if (Frame_Count<=Frame_Count_Valid)
- {
- std::string PictureTypes(PictureTypes_PreviousFrames);
- PictureTypes.reserve(TemporalReferences.size());
- for (size_t Pos=0; Pos<TemporalReferences.size(); Pos++)
- if (TemporalReferences[Pos])
- {
- if ((Pos%2)==0)
- PictureTypes+=Avc_slice_type[TemporalReferences[Pos]->slice_type];
- }
- else if (!PictureTypes.empty()) //Only if stream already started
- {
- if ((Pos%2)==0)
- PictureTypes+=' ';
- }
- if (!GOP_Detect(PictureTypes).empty() && !GA94_03_IsPresent)
- Frame_Count_Valid=Frame_Count; //We have enough frames
- }
- }
- }
-
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- Element_Info1(TemporalReferences_Offset_pic_order_cnt_lsb_Last);
- Element_Info1((((*seq_parameter_set_Item)->frame_mbs_only_flag || !field_pic_flag)?__T("Frame "):(bottom_field_flag?__T("Field (Bottom) "):__T("Field (Top) ")))+Ztring::ToZtring(Frame_Count));
- if (slice_type<9)
- Element_Info1(__T("slice_type ")+Ztring().From_Local(Avc_slice_type[slice_type]));
- Element_Info1(__T("frame_num ")+Ztring::ToZtring(frame_num));
- if ((*seq_parameter_set_Item)->vui_parameters && (*seq_parameter_set_Item)->vui_parameters->fixed_frame_rate_flag)
- {
- if (FrameInfo.PCR!=(int64u)-1)
- Element_Info1(__T("PCR ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.PCR)/1000000)));
- if (FrameInfo.DTS!=(int64u)-1)
- Element_Info1(__T("DTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.DTS)/1000000)));
- if (FrameInfo.PTS!=(int64u)-1)
- Element_Info1(__T("PTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/1000000)));
- }
- if ((*seq_parameter_set_Item)->pic_order_cnt_type==0)
- Element_Info1(__T("pic_order_cnt_lsb ")+Ztring::ToZtring(pic_order_cnt_lsb));
- if (first_mb_in_slice)
- Element_Info1(__T("first_mb_in_slice ")+Ztring::ToZtring(first_mb_in_slice));
- }
- #endif //MEDIAINFO_TRACE
-
- //Counting
- if (Frame_Count!=(int64u)-1)
- {
- if (File_Offset+Buffer_Offset+Element_Size==File_Size)
- Frame_Count_Valid=Frame_Count; //Finish frames in case of there are less than Frame_Count_Valid frames
- Frame_Count++;
- if (IFrame_Count && Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- Frame_Count_InThisBlock++;
- }
- if ((*seq_parameter_set_Item)->pic_order_cnt_type==0 && field_pic_flag)
- {
- Field_Count++;
- Field_Count_InThisBlock++;
- }
- if (FrameInfo.PTS!=(int64u)-1)
- FrameInfo.PTS+=tc;
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.DTS+=tc;
- if (FrameInfo.PTS!=(int64u)-1 && (FrameInfo.PTS>PTS_End || (PTS_End>1000000000 && FrameInfo.PTS<=PTS_End-1000000000))) //More than current PTS_End or less than current PTS_End minus 1 second (there is a problem?)
- PTS_End=FrameInfo.PTS;
-
- #if MEDIAINFO_DUPLICATE
- if (Streams[(size_t)Element_Code].ShouldDuplicate)
- File__Duplicate_Write(Element_Code, (*seq_parameter_set_Item)->pic_order_cnt_type==0?pic_order_cnt_lsb:frame_num);
- #endif //MEDIAINFO_DUPLICATE
-
- //Filling only if not already done
- if (Frame_Count==1 && !Status[IsAccepted])
- Accept("AVC");
- if (!Status[IsFilled])
- {
- if (!GA94_03_IsPresent && IFrame_Count>=8)
- Frame_Count_Valid=Frame_Count; //We have enough frames
- if (Frame_Count>=Frame_Count_Valid)
- {
- Fill("AVC");
- if (!IsSub && !Streams[(size_t)Element_Code].ShouldDuplicate && MediaInfoLib::Config.ParseSpeed_Get()<1.0)
- Finish("AVC");
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-//
-void File_Avc::slice_data(bool AllCategories)
-{
- Element_Begin1("slice_data");
-
- Skip_BS(Data_BS_Remain(), "(ToDo)");
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-//
-void File_Avc::ref_pic_list_modification(int32u slice_type, bool mvc)
-{
- if ((slice_type%5)!=2 && (slice_type%5)!=4)
- {
- TEST_SB_SKIP( "ref_pic_list_modification_flag_l0");
- int32u modification_of_pic_nums_idc;
- do
- {
- Get_UE (modification_of_pic_nums_idc, "modification_of_pic_nums_idc");
- if (modification_of_pic_nums_idc<2)
- Skip_UE( "abs_diff_pic_num_minus1");
- else if (modification_of_pic_nums_idc==2)
- Skip_UE( "long_term_pic_num");
- else if (mvc && (modification_of_pic_nums_idc==4 || modification_of_pic_nums_idc==5)) //ref_pic_list_mvc_modification only
- Skip_UE( "abs_diff_view_idx_minus1");
- else if (modification_of_pic_nums_idc!=3)
- {
- Trusted_IsNot("ref_pic_list_modification_flag_l0");
- Skip_BS(Data_BS_Remain(), "(Remaining bits)");
- }
- }
- while (modification_of_pic_nums_idc!=3 && Data_BS_Remain());
- TEST_SB_END();
- }
- if ((slice_type%5)==1)
- {
- TEST_SB_SKIP( "ref_pic_list_modification_flag_l1");
- int32u modification_of_pic_nums_idc;
- do
- {
- Get_UE (modification_of_pic_nums_idc, "modification_of_pic_nums_idc");
- if (modification_of_pic_nums_idc<2)
- Skip_UE( "abs_diff_pic_num_minus1");
- else if (modification_of_pic_nums_idc==2)
- Skip_UE( "long_term_pic_num");
- else if (mvc && (modification_of_pic_nums_idc==4 || modification_of_pic_nums_idc==5)) //ref_pic_list_mvc_modification only
- Skip_UE( "abs_diff_view_idx_minus1");
- else if (modification_of_pic_nums_idc!=3)
- {
- Trusted_IsNot("ref_pic_list_modification_flag_l1");
- Skip_BS(Data_BS_Remain(), "(Remaining bits)");
- }
- }
- while (modification_of_pic_nums_idc!=3 && Data_BS_Remain());
- TEST_SB_END();
- }
-}
-
-//---------------------------------------------------------------------------
-//
-void File_Avc::pred_weight_table(int32u num_ref_idx_l0_active_minus1, int32u num_ref_idx_l1_active_minus1, int8u ChromaArrayType)
-{
- Skip_UE( "luma_log2_weight_denom");
- if (ChromaArrayType)
- Skip_UE( "chroma_log2_weight_denom");
- for(int32u i=0; i<=num_ref_idx_l0_active_minus1; i++)
- {
- TEST_SB_SKIP( "luma_weight_l0_flag");
- Skip_SE( "luma_weight_l0");
- Skip_SE( "luma_offset_l0");
- TEST_SB_END();
- }
- if (ChromaArrayType)
- {
- TEST_SB_SKIP( "chroma_weight_l0_flag");
- Skip_SE( "chroma_weight_l0");
- Skip_SE( "chroma_offset_l0");
- TEST_SB_END();
- }
-}
-
-//---------------------------------------------------------------------------
-//
-void File_Avc::dec_ref_pic_marking(std::vector<int8u> &memory_management_control_operations)
-{
- if (Element_Code==5) //IdrPicFlag
- {
- Skip_SB( "no_output_of_prior_pics_flag");
- Skip_SB( "long_term_reference_flag");
- }
- else
- {
- TEST_SB_SKIP( "adaptive_ref_pic_marking_mode_flag");
- int32u memory_management_control_operation;
- do
- {
- Get_UE (memory_management_control_operation, "memory_management_control_operation");
- switch (memory_management_control_operation)
- {
- case 1 :
- Skip_UE( "difference_of_pic_nums_minus1");
- break;
- case 2 :
- Skip_UE( "long_term_pic_num");
- break;
- case 3 :
- Skip_UE( "difference_of_pic_nums_minus1");
- //break; 3 --> difference_of_pic_nums_minus1 then long_term_frame_idx
- case 6 :
- Skip_UE( "long_term_frame_idx");
- break;
- case 4 :
- Skip_UE( "max_long_term_frame_idx_plus1");
- break;
- }
- memory_management_control_operations.push_back((int8u)memory_management_control_operation);
- }
- while (Data_BS_Remain() && memory_management_control_operation);
- TEST_SB_END()
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet "06"
-void File_Avc::sei()
-{
- Element_Name("sei");
-
- //Parsing
- int32u seq_parameter_set_id=(int32u)-1;
- while(Element_Offset+1<Element_Size)
- {
- Element_Begin1("sei message");
- sei_message(seq_parameter_set_id);
- Element_End0();
- }
- BS_Begin();
- Mark_1( );
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::sei_message(int32u &seq_parameter_set_id)
-{
- //Parsing
- int32u payloadType=0, payloadSize=0;
- int8u payload_type_byte, payload_size_byte;
- Element_Begin1("sei message header");
- do
- {
- Get_B1 (payload_type_byte, "payload_type_byte");
- payloadType+=payload_type_byte;
- }
- while(payload_type_byte==0xFF);
- do
- {
- Get_B1 (payload_size_byte, "payload_size_byte");
- payloadSize+=payload_size_byte;
- }
- while(payload_size_byte==0xFF);
- Element_End0();
-
- int64u Element_Offset_Save=Element_Offset+payloadSize;
- if (Element_Offset_Save>Element_Size)
- {
- Trusted_IsNot("Wrong size");
- Skip_XX(Element_Size-Element_Offset, "unknown");
- return;
- }
- int64u Element_Size_Save=Element_Size;
- Element_Size=Element_Offset_Save;
- switch (payloadType)
- {
- case 0 : sei_message_buffering_period(seq_parameter_set_id); break;
- case 1 : sei_message_pic_timing(payloadSize, seq_parameter_set_id); break;
- case 4 : sei_message_user_data_registered_itu_t_t35(); break;
- case 5 : sei_message_user_data_unregistered(payloadSize); break;
- case 6 : sei_message_recovery_point(); break;
- case 32 : sei_message_mainconcept(payloadSize); break;
- default :
- Element_Info1("unknown");
- Skip_XX(payloadSize, "data");
- }
- Element_Offset=Element_Offset_Save; //Positionning in the right place.
- Element_Size=Element_Size_Save; //Positionning in the right place.
-}
-
-//---------------------------------------------------------------------------
-// SEI - 0
-void File_Avc::sei_message_buffering_period(int32u &seq_parameter_set_id)
-{
- Element_Info1("buffering_period");
-
- //Parsing
- if (Element_Offset==Element_Size)
- return; //Nothing to do
- BS_Begin();
- Get_UE (seq_parameter_set_id, "seq_parameter_set_id");
- std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item;
- if (seq_parameter_set_id>=seq_parameter_sets.size() || (*(seq_parameter_set_Item=seq_parameter_sets.begin()+seq_parameter_set_id))==NULL)
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (seq_parameter_set is missing)");
- BS_End();
- return;
- }
- if ((*seq_parameter_set_Item)->NalHrdBpPresentFlag())
- sei_message_buffering_period_xxl((*seq_parameter_set_Item)->vui_parameters->NAL);
- if ((*seq_parameter_set_Item)->VclHrdBpPresentFlag())
- sei_message_buffering_period_xxl((*seq_parameter_set_Item)->vui_parameters->VCL);
- BS_End();
-}
-
-void File_Avc::sei_message_buffering_period_xxl(seq_parameter_set_struct::vui_parameters_struct::xxl* xxl)
-{
- if (xxl==NULL)
- return;
- for (int32u SchedSelIdx=0; SchedSelIdx<xxl->SchedSel.size(); SchedSelIdx++)
- {
- //Get_S4 (xxl->initial_cpb_removal_delay_length_minus1+1, xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay, "initial_cpb_removal_delay"); Param_Info2(xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay/90, " ms");
- //Get_S4 (xxl->initial_cpb_removal_delay_length_minus1+1, xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay_offset, "initial_cpb_removal_delay_offset"); Param_Info2(xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay_offset/90, " ms");
- Info_S4 (xxl->initial_cpb_removal_delay_length_minus1+1, initial_cpb_removal_delay, "initial_cpb_removal_delay"); Param_Info2(initial_cpb_removal_delay/90, " ms");
- Info_S4 (xxl->initial_cpb_removal_delay_length_minus1+1, initial_cpb_removal_delay_offset, "initial_cpb_removal_delay_offset"); Param_Info2(initial_cpb_removal_delay_offset/90, " ms");
- }
-}
-
-//---------------------------------------------------------------------------
-// SEI - 1
-void File_Avc::sei_message_pic_timing(int32u /*payloadSize*/, int32u seq_parameter_set_id)
-{
- Element_Info1("pic_timing");
-
- //Testing if we can parsing it now. TODO: handle case seq_parameter_set_id is unknown (buffering of message, decoding in slice parsing)
- if (seq_parameter_set_id==(int32u)-1 && seq_parameter_sets.size()==1)
- seq_parameter_set_id=0;
- std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item;
- if (seq_parameter_set_id>=seq_parameter_sets.size() || (*(seq_parameter_set_Item=seq_parameter_sets.begin()+seq_parameter_set_id))==NULL)
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (seq_parameter_set is missing)");
- return;
- }
-
- //Parsing
- int8u pic_struct=(int8u)-1;
- BS_Begin();
- if ((*seq_parameter_set_Item)->CpbDpbDelaysPresentFlag())
- {
- int8u cpb_removal_delay_length_minus1=(*seq_parameter_set_Item)->vui_parameters->NAL?(*seq_parameter_set_Item)->vui_parameters->NAL->cpb_removal_delay_length_minus1:(*seq_parameter_set_Item)->vui_parameters->VCL->cpb_removal_delay_length_minus1; //Spec is not precise, I am not sure
- int8u dpb_output_delay_length_minus1=(*seq_parameter_set_Item)->vui_parameters->NAL?(*seq_parameter_set_Item)->vui_parameters->NAL->dpb_output_delay_length_minus1:(*seq_parameter_set_Item)->vui_parameters->VCL->dpb_output_delay_length_minus1; //Spec is not precise, I am not sure
- Skip_S4(cpb_removal_delay_length_minus1+1, "cpb_removal_delay");
- Skip_S4(dpb_output_delay_length_minus1+1, "dpb_output_delay");
- }
- if ((*seq_parameter_set_Item)->vui_parameters && (*seq_parameter_set_Item)->vui_parameters->pic_struct_present_flag)
- {
- Get_S1 (4, pic_struct, "pic_struct");
- switch (pic_struct)
- {
- case 0 :
- case 1 :
- case 2 :
- case 3 :
- case 4 :
- case 5 :
- case 6 : break;
- case 7 : FrameRate_Divider=2; break;
- case 8 : FrameRate_Divider=3; break;
- default : Param_Info1("Reserved"); return; //NumClockTS is unknown
- }
- Param_Info1(Avc_pic_struct[pic_struct]);
- int8u NumClockTS=Avc_NumClockTS[pic_struct];
- int8u seconds_value=0, minutes_value=0, hours_value=0; //Here because theses values can be reused in later ClockTSs.
- for (int8u i=0; i<NumClockTS; i++)
- {
- Element_Begin1("ClockTS");
- TEST_SB_SKIP( "clock_timestamp_flag");
- Ztring TimeStamp;
- int32u time_offset=0;
- int8u n_frames;
- bool full_timestamp_flag, nuit_field_based_flag;
- Info_S1(2, ct_type, "ct_type"); Param_Info1(Avc_ct_type[ct_type]);
- Get_SB ( nuit_field_based_flag, "nuit_field_based_flag");
- Skip_S1(5, "counting_type");
- Get_SB ( full_timestamp_flag, "full_timestamp_flag");
- Skip_SB( "discontinuity_flag");
- Skip_SB( "cnt_dropped_flag");
- Get_S1 (8, n_frames, "n_frames");
- if (full_timestamp_flag)
- {
- Get_S1 (6, seconds_value, "seconds_value");
- Get_S1 (6, minutes_value, "minutes_value");
- Get_S1 (5, hours_value, "hours_value");
- }
- else
- {
- TEST_SB_SKIP( "seconds_flag");
- Get_S1 (6, seconds_value, "seconds_value");
- TEST_SB_SKIP( "minutes_flag");
- Get_S1 (6, minutes_value, "minutes_value");
- TEST_SB_SKIP( "hours_flag");
- Get_S1 (5, hours_value, "hours_value");
- TEST_SB_END();
- TEST_SB_END();
- TEST_SB_END();
- }
- TimeStamp=Ztring::ToZtring(hours_value)+__T(':')+Ztring::ToZtring(minutes_value)+__T(':')+Ztring::ToZtring(seconds_value);
- if ((*seq_parameter_set_Item)->CpbDpbDelaysPresentFlag())
- {
- int8u time_offset_length=(*seq_parameter_set_Item)->vui_parameters->NAL?(*seq_parameter_set_Item)->vui_parameters->NAL->time_offset_length:(*seq_parameter_set_Item)->vui_parameters->VCL->time_offset_length; //Spec is not precise, I am not sure
- if (time_offset_length)
- Get_S4 (time_offset_length, time_offset, "time_offset");
- }
- if ((*seq_parameter_set_Item)->vui_parameters && (*seq_parameter_set_Item)->vui_parameters->timing_info_present_flag && (*seq_parameter_set_Item)->vui_parameters->time_scale)
- {
- float32 Milliseconds=((float32)(n_frames*((*seq_parameter_set_Item)->vui_parameters->num_units_in_tick*(1+(nuit_field_based_flag?1:0)))+time_offset))/(*seq_parameter_set_Item)->vui_parameters->time_scale;
- TimeStamp+=__T('.');
- TimeStamp+=Ztring::ToZtring(Milliseconds);
- }
- Param_Info1(TimeStamp);
- TEST_SB_END();
- Element_End0();
- }
- }
- BS_End();
-
- FILLING_BEGIN();
- if ((*seq_parameter_set_Item)->pic_struct_FirstDetected==(int8u)-1 && (*seq_parameter_set_Item)->vui_parameters && (*seq_parameter_set_Item)->vui_parameters->pic_struct_present_flag)
- (*seq_parameter_set_Item)->pic_struct_FirstDetected=pic_struct;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5
-void File_Avc::sei_message_user_data_registered_itu_t_t35()
-{
- Element_Info1("user_data_registered_itu_t_t35");
-
- //Parsing
- int8u itu_t_t35_country_code;
- Get_B1 (itu_t_t35_country_code, "itu_t_t35_country_code");
- if (itu_t_t35_country_code==0xFF)
- Skip_B1( "itu_t_t35_country_code_extension_byte");
- if (itu_t_t35_country_code!=0xB5 || Element_Offset+2>=Element_Size)
- {
- if (Element_Size-Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- return;
- }
-
- //United-States
- int16u id;
- Get_B2 (id, "id?");
- if (id!=0x0031 || Element_Offset+4>=Element_Size)
- {
- if (Element_Size-Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- return;
- }
-
- int32u Identifier;
- Peek_B4(Identifier);
- switch (Identifier)
- {
- case 0x44544731 : sei_message_user_data_registered_itu_t_t35_DTG1(); return;
- case 0x47413934 : sei_message_user_data_registered_itu_t_t35_GA94(); return;
- default : if (Element_Size-Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5 - DTG1
-void File_Avc::sei_message_user_data_registered_itu_t_t35_DTG1()
-{
- Element_Info1("Active Format Description");
-
- //Parsing
- bool active_format_flag;
- Skip_C4( "afd_identifier");
- BS_Begin();
- Mark_0();
- Get_SB (active_format_flag, "active_format_flag");
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_0_NoTrustError();
- Mark_1_NoTrustError();
- if (active_format_flag)
- {
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Info_S1(4, active_format, "active_format"); Param_Info1(Avc_user_data_DTG1_active_format[active_format]);
- }
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5 - GA94
-void File_Avc::sei_message_user_data_registered_itu_t_t35_GA94()
-{
- //Parsing
- int8u user_data_type_code;
- Skip_B4( "GA94_identifier");
- Get_B1 (user_data_type_code, "user_data_type_code");
- switch (user_data_type_code)
- {
- case 0x03 : sei_message_user_data_registered_itu_t_t35_GA94_03(); break;
- case 0x06 : sei_message_user_data_registered_itu_t_t35_GA94_06(); break;
- default : Skip_XX(Element_Size-Element_Offset, "GA94_reserved_user_data");
- }
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5 - GA94 - 0x03
-void File_Avc::sei_message_user_data_registered_itu_t_t35_GA94_03()
-{
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- GA94_03_IsPresent=true;
- MustExtendParsingDuration=true;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
-
- Element_Info1("DTVCC Transport");
-
- //Coherency
- delete TemporalReferences_DelayedElement; TemporalReferences_DelayedElement=new temporal_reference();
-
- TemporalReferences_DelayedElement->GA94_03=new temporal_reference::buffer_data;
- TemporalReferences_DelayedElement->GA94_03->Size=(size_t)(Element_Size-Element_Offset);
- delete[] TemporalReferences_DelayedElement->GA94_03->Data;
- TemporalReferences_DelayedElement->GA94_03->Data=new int8u[(size_t)(Element_Size-Element_Offset)];
- std::memcpy(TemporalReferences_DelayedElement->GA94_03->Data, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
-
- //Parsing
- Skip_XX(Element_Size-Element_Offset, "CC data");
- #else //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- Skip_XX(Element_Size-Element_Offset, "DTVCC Transport data");
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-}
-
-void File_Avc::sei_message_user_data_registered_itu_t_t35_GA94_03_Delayed(int32u seq_parameter_set_id)
-{
- // Skipping missing frames
- if (TemporalReferences_Max-TemporalReferences_Min>(size_t)(4*(seq_parameter_sets[seq_parameter_set_id]->max_num_ref_frames+3))) // max_num_ref_frames ref frame maximum
- {
- TemporalReferences_Min=TemporalReferences_Max-4*(seq_parameter_sets[seq_parameter_set_id]->max_num_ref_frames+3);
- while (TemporalReferences[TemporalReferences_Min]==NULL)
- TemporalReferences_Min++;
- }
-
- // Parsing captions
- while (TemporalReferences[TemporalReferences_Min] && TemporalReferences_Min+2*seq_parameter_sets[seq_parameter_set_id]->max_num_ref_frames<TemporalReferences_Max)
- {
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- Element_Begin1("Reordered DTVCC Transport");
-
- //Parsing
- #if MEDIAINFO_DEMUX
- int64u Element_Code_Old=Element_Code;
- Element_Code=0x4741393400000003LL;
- #endif //MEDIAINFO_DEMUX
- if (GA94_03_Parser==NULL)
- {
- GA94_03_Parser=new File_DtvccTransport;
- Open_Buffer_Init(GA94_03_Parser);
- ((File_DtvccTransport*)GA94_03_Parser)->Format=File_DtvccTransport::Format_A53_4_GA94_03;
- }
- if (((File_DtvccTransport*)GA94_03_Parser)->AspectRatio==0)
- {
- float64 PixelAspectRatio=1;
- std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item=seq_parameter_sets.begin();
- for (; seq_parameter_set_Item!=seq_parameter_sets.end(); ++seq_parameter_set_Item)
- if ((*seq_parameter_set_Item))
- break;
- if (seq_parameter_set_Item!=seq_parameter_sets.end())
- {
- if ((*seq_parameter_set_Item)->vui_parameters->aspect_ratio_info_present_flag)
- {
- if ((*seq_parameter_set_Item)->vui_parameters->aspect_ratio_idc<Avc_PixelAspectRatio_Size)
- PixelAspectRatio=Avc_PixelAspectRatio[(*seq_parameter_set_Item)->vui_parameters->aspect_ratio_idc];
- else if ((*seq_parameter_set_Item)->vui_parameters->aspect_ratio_idc==0xFF && (*seq_parameter_set_Item)->vui_parameters->sar_height)
- PixelAspectRatio=((float64)(*seq_parameter_set_Item)->vui_parameters->sar_width)/(*seq_parameter_set_Item)->vui_parameters->sar_height;
- }
- int32u Width =((*seq_parameter_set_Item)->pic_width_in_mbs_minus1 +1)*16;
- int32u Height=((*seq_parameter_set_Item)->pic_height_in_map_units_minus1+1)*16*(2-(*seq_parameter_set_Item)->frame_mbs_only_flag);
- ((File_DtvccTransport*)GA94_03_Parser)->AspectRatio=Width*PixelAspectRatio/Height;
- }
- }
- if (GA94_03_Parser->PTS_DTS_Needed)
- {
- GA94_03_Parser->FrameInfo.PCR=FrameInfo.PCR;
- GA94_03_Parser->FrameInfo.PTS=FrameInfo.PTS;
- GA94_03_Parser->FrameInfo.DTS=FrameInfo.DTS;
- }
- #if MEDIAINFO_DEMUX
- if (TemporalReferences[TemporalReferences_Min]->GA94_03)
- {
- int8u Demux_Level_Save=Demux_Level;
- Demux_Level=8; //Ancillary
- Demux(TemporalReferences[TemporalReferences_Min]->GA94_03->Data, TemporalReferences[TemporalReferences_Min]->GA94_03->Size, ContentType_MainStream);
- Demux_Level=Demux_Level_Save;
- }
- Element_Code=Element_Code_Old;
- #endif //MEDIAINFO_DEMUX
- if (TemporalReferences[TemporalReferences_Min]->GA94_03)
- {
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- GA94_03_Parser->ServiceDescriptors=ServiceDescriptors;
- #endif
- Open_Buffer_Continue(GA94_03_Parser, TemporalReferences[TemporalReferences_Min]->GA94_03->Data, TemporalReferences[TemporalReferences_Min]->GA94_03->Size);
- }
-
- Element_End0();
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-
- TemporalReferences_Min+=((seq_parameter_sets[seq_parameter_set_id]->frame_mbs_only_flag | !TemporalReferences[TemporalReferences_Min]->IsField)?2:1);
- }
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5 - GA94 - 0x03
-void File_Avc::sei_message_user_data_registered_itu_t_t35_GA94_06()
-{
- Element_Info1("Bar data");
-
- //Parsing
- bool top_bar_flag, bottom_bar_flag, left_bar_flag, right_bar_flag;
- BS_Begin();
- Get_SB (top_bar_flag, "top_bar_flag");
- Get_SB (bottom_bar_flag, "bottom_bar_flag");
- Get_SB (left_bar_flag, "left_bar_flag");
- Get_SB (right_bar_flag, "right_bar_flag");
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- BS_End();
- if (top_bar_flag)
- {
- Mark_1();
- Mark_1();
- Skip_S2(14, "line_number_end_of_top_bar");
- }
- if (bottom_bar_flag)
- {
- Mark_1();
- Mark_1();
- Skip_S2(14, "line_number_start_of_bottom_bar");
- }
- if (left_bar_flag)
- {
- Mark_1();
- Mark_1();
- Skip_S2(14, "pixel_number_end_of_left_bar");
- }
- if (right_bar_flag)
- {
- Mark_1();
- Mark_1();
- Skip_S2(14, "pixel_number_start_of_right_bar");
- }
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- Mark_1();
- BS_End();
-
- if (Element_Size-Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "additional_bar_data");
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5
-void File_Avc::sei_message_user_data_unregistered(int32u payloadSize)
-{
- Element_Info1("user_data_unregistered");
-
- //Parsing
- int128u uuid_iso_iec_11578;
- Get_GUID(uuid_iso_iec_11578, "uuid_iso_iec_11578");
-
- switch (uuid_iso_iec_11578.hi)
- {
- case 0xB748D9E6BDE945DCLL : Element_Info1("x264");
- sei_message_user_data_unregistered_x264(payloadSize-16); break;
- case 0x684E92AC604A57FBLL : Element_Info1("eavc");
- sei_message_user_data_unregistered_x264(payloadSize-16); break;
- case 0xD9114Df8608CEE17LL : Element_Info1("Blu-ray");
- sei_message_user_data_unregistered_bluray(payloadSize-16); break;
- default :
- Element_Info1("unknown");
- Skip_XX(payloadSize-16, "data");
- }
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5 - x264
-void File_Avc::sei_message_user_data_unregistered_x264(int32u payloadSize)
-{
- //Parsing
- Ztring Data;
- Peek_Local(payloadSize, Data);
- if (Data.size()!=payloadSize && Data.size()+1!=payloadSize)
- {
- Skip_XX(payloadSize, "Unknown");
- return; //This is not a text string
- }
- size_t Data_Pos_Before=0;
- size_t Loop=0;
- do
- {
- size_t Data_Pos=Data.find(__T(" - "), Data_Pos_Before);
- if (Data_Pos==std::string::npos)
- Data_Pos=Data.size();
- if (Data.find(__T("options: "), Data_Pos_Before)==Data_Pos_Before)
- {
- Element_Begin1("options");
- size_t Options_Pos_Before=Data_Pos_Before;
- Encoded_Library_Settings.clear();
- do
- {
- size_t Options_Pos=Data.find(__T(" "), Options_Pos_Before);
- if (Options_Pos==std::string::npos)
- Options_Pos=Data.size();
- Ztring option;
- Get_Local (Options_Pos-Options_Pos_Before, option, "option");
- Options_Pos_Before=Options_Pos;
- do
- {
- Ztring Separator;
- Peek_Local(1, Separator);
- if (Separator==__T(" "))
- {
- Skip_Local(1, "separator");
- Options_Pos_Before+=1;
- }
- else
- break;
- }
- while (Options_Pos_Before!=Data.size());
-
- //Filling
- if (option!=__T("options:"))
- {
- if (!Encoded_Library_Settings.empty())
- Encoded_Library_Settings+=__T(" / ");
- Encoded_Library_Settings+=option;
- if (option.find(__T("bitrate="))==0)
- BitRate_Nominal=option.substr(8)+__T("000"); //After "bitrate="
- }
- }
- while (Options_Pos_Before!=Data.size());
- Element_End0();
- }
- else
- {
- Ztring Value;
- Get_Local(Data_Pos-Data_Pos_Before, Value, "data");
-
- //Saving
- if (Loop==0)
- {
- //Cleaning a little the value
- while (!Value.empty() && Value[0]<0x30)
- Value.erase(Value.begin());
- while (!Value.empty() && Value[Value.size()-1]<0x30)
- Value.erase(Value.end()-1);
- Encoded_Library=Value;
- }
- if (Loop==1 && Encoded_Library.find(__T("x264"))==0)
- {
- Encoded_Library+=__T(" - ");
- Encoded_Library+=Value;
- }
- }
- Data_Pos_Before=Data_Pos;
- if (Data_Pos_Before+3<=Data.size())
- {
- Skip_Local(3, "separator");
- Data_Pos_Before+=3;
- }
-
- Loop++;
- }
- while (Data_Pos_Before!=Data.size());
-
- //Encoded_Library
- if (Encoded_Library.find(__T("eavc "))==0)
- {
- Encoded_Library_Name=__T("eavc");
- Encoded_Library_Version=Encoded_Library.SubString(__T("eavc "), __T(""));
- }
- else if (Encoded_Library.find(__T("x264 - "))==0)
- {
- Encoded_Library_Name=__T("x264");
- Encoded_Library_Version=Encoded_Library.SubString(__T("x264 - "), __T(""));
- }
- else if (Encoded_Library.find(__T("SUPER(C) by eRightSoft "))==0)
- {
- Encoded_Library_Name=__T("SUPER(C) by eRightSoft");
- Encoded_Library_Date=Ztring(__T("UTC "))+Encoded_Library.SubString(__T("2000-"), __T(" "));
- }
- else
- Encoded_Library_Name=Encoded_Library;
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5 - x264
-void File_Avc::sei_message_user_data_unregistered_bluray(int32u payloadSize)
-{
- if (payloadSize<4)
- {
- Skip_XX(payloadSize, "Unknown");
- return;
- }
- int32u Identifier;
- Get_B4 (Identifier, "Identifier");
- switch (Identifier)
- {
- case 0x47413934 : sei_message_user_data_registered_itu_t_t35_GA94_03(); return;
- default : Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
-}
-
-//---------------------------------------------------------------------------
-// SEI - 6
-void File_Avc::sei_message_recovery_point()
-{
- Element_Info1("recovery_point");
-
- //Parsing
- BS_Begin();
- Skip_UE( "recovery_frame_cnt");
- Skip_SB( "exact_match_flag");
- Skip_SB( "broken_link_flag");
- Skip_S1(2, "changing_slice_group_idc");
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-// SEI - 32
-void File_Avc::sei_message_mainconcept(int32u payloadSize)
-{
- Element_Info1("MainConcept text");
-
- //Parsing
- Ztring Text;
- Get_Local(payloadSize, Text, "text");
-
- if (Text.find(__T("produced by MainConcept H.264/AVC Codec v"))!=std::string::npos)
- {
- Encoded_Library=Text.SubString(__T("produced by "), __T(" MainConcept AG"));
- Encoded_Library_Name=__T("MainConcept H.264/AVC Codec");
- Encoded_Library_Version=Text.SubString(__T("produced by MainConcept H.264/AVC Codec v"), __T(" (c) "));
- Encoded_Library_Date=MediaInfoLib::Config.Library_Get(InfoLibrary_Format_MainConcept_Avc, Encoded_Library_Version, InfoLibrary_Date);
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet "07"
-void File_Avc::seq_parameter_set()
-{
- Element_Name("seq_parameter_set");
-
- //parsing
- int32u seq_parameter_set_id;
- if (!seq_parameter_set_data(seq_parameter_sets, seq_parameter_set_id))
- return;
- Mark_1( );
- size_t BS_bits=Data_BS_Remain()%8;
- while (BS_bits)
- {
- Mark_0( );
- BS_bits--;
- }
- BS_End();
-
- //Hack for 00003.m2ts: There is a trailing 0x89, why?
- if (Element_Offset+1==Element_Size)
- {
- int8u ToTest;
- Peek_B1(ToTest);
- if (ToTest==0x98)
- Skip_B1( "Unknown");
-
- }
-
- //Hack for : There is a trailing data, why?
- if (Element_Offset+4==Element_Size)
- {
- int32u ToTest;
- Peek_B4(ToTest);
- if (ToTest==0xE30633C0)
- Skip_B4( "Unknown");
- }
-
- //NULL bytes
- while (Element_Offset<Element_Size)
- {
- int8u Null;
- Get_B1 (Null, "NULL byte");
- if (Null)
- Trusted_IsNot("Should be NULL byte");
- }
-
- FILLING_BEGIN_PRECISE();
- //NextCode
- NextCode_Clear();
- NextCode_Add(0x08);
-
- //Autorisation of other streams
- Streams[0x08].Searching_Payload=true; //pic_parameter_set
- if (Streams[0x07].ShouldDuplicate)
- Streams[0x08].ShouldDuplicate=true; //pic_parameter_set
- Streams[0x0A].Searching_Payload=true; //end_of_seq
- if (Streams[0x07].ShouldDuplicate)
- Streams[0x0A].ShouldDuplicate=true; //end_of_seq
- Streams[0x0B].Searching_Payload=true; //end_of_stream
- if (Streams[0x07].ShouldDuplicate)
- Streams[0x0B].ShouldDuplicate=true; //end_of_stream
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "08"
-void File_Avc::pic_parameter_set()
-{
- Element_Name("pic_parameter_set");
-
- //Parsing
- int32u pic_parameter_set_id, seq_parameter_set_id, num_slice_groups_minus1, num_ref_idx_l0_default_active_minus1, num_ref_idx_l1_default_active_minus1, slice_group_map_type=0;
- int8u weighted_bipred_idc=0;
- bool entropy_coding_mode_flag,bottom_field_pic_order_in_frame_present_flag, redundant_pic_cnt_present_flag, weighted_pred_flag, deblocking_filter_control_present_flag;
- BS_Begin();
- Get_UE (pic_parameter_set_id, "pic_parameter_set_id");
- Get_UE (seq_parameter_set_id, "seq_parameter_set_id");
- std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item;
- if (seq_parameter_set_id>=seq_parameter_sets.size() || (*(seq_parameter_set_Item=seq_parameter_sets.begin()+seq_parameter_set_id))==NULL)
- {
- if (seq_parameter_set_id>=subset_seq_parameter_sets.size() || (*(seq_parameter_set_Item=subset_seq_parameter_sets.begin()+seq_parameter_set_id))==NULL)
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (seq_parameter_set is missing)");
- return;
- }
- }
- Get_SB (entropy_coding_mode_flag, "entropy_coding_mode_flag");
- Get_SB (bottom_field_pic_order_in_frame_present_flag, "bottom_field_pic_order_in_frame_present_flag");
- Get_UE (num_slice_groups_minus1, "num_slice_groups_minus1");
- if (num_slice_groups_minus1>7)
- {
- Trusted_IsNot("num_slice_groups_minus1 too high");
- num_slice_groups_minus1=0;
- }
- if (num_slice_groups_minus1>0)
- {
- Get_UE (slice_group_map_type, "slice_group_map_type");
- if (slice_group_map_type==0)
- {
- for (int32u Pos=0; Pos<=num_slice_groups_minus1; Pos++)
- Skip_UE( "run_length_minus1");
- }
- else if (slice_group_map_type==2)
- {
- for (int32u Pos=0; Pos<num_slice_groups_minus1; Pos++)
- {
- Skip_UE( "top_left");
- Skip_UE( "bottom_right");
- }
- }
- else if (slice_group_map_type==3
- || slice_group_map_type==4
- || slice_group_map_type==5)
- {
- Skip_SB( "slice_group_change_direction_flag");
- Skip_UE( "slice_group_change_rate_minus1");
- }
- else if (slice_group_map_type==6)
- {
- int32u pic_size_in_map_units_minus1;
- Get_UE (pic_size_in_map_units_minus1, "pic_size_in_map_units_minus1");
- if(pic_size_in_map_units_minus1>((*seq_parameter_set_Item)->pic_width_in_mbs_minus1+1)*((*seq_parameter_set_Item)->pic_height_in_map_units_minus1+1))
- {
- Trusted_IsNot("pic_size_in_map_units_minus1 too high");
- return;
- }
- #if defined (__mips__) || defined (__mipsel__)
- int32u slice_group_id_Size=(int32u)(std::ceil(std::log((double)(num_slice_groups_minus1+1))/std::log((double)10))); //std::log is natural logarithm
- #else
- int32u slice_group_id_Size=(int32u)(std::ceil(std::log((float32)(num_slice_groups_minus1+1))/std::log((float32)10))); //std::log is natural logarithm
- #endif
- for (int32u Pos=0; Pos<=pic_size_in_map_units_minus1; Pos++)
- Skip_BS(slice_group_id_Size, "slice_group_id");
- }
- }
- Get_UE (num_ref_idx_l0_default_active_minus1, "num_ref_idx_l0_default_active_minus1");
- Get_UE (num_ref_idx_l1_default_active_minus1, "num_ref_idx_l1_default_active_minus1");
- Get_SB (weighted_pred_flag, "weighted_pred_flag");
- Get_S1 (2, weighted_bipred_idc, "weighted_bipred_idc");
- Skip_SE( "pic_init_qp_minus26");
- Skip_SE( "pic_init_qs_minus26");
- Skip_SE( "chroma_qp_index_offset");
- Get_SB (deblocking_filter_control_present_flag, "deblocking_filter_control_present_flag");
- Skip_SB( "constrained_intra_pred_flag");
- Get_SB (redundant_pic_cnt_present_flag, "redundant_pic_cnt_present_flag");
- bool more_rbsp_data=false;
- if (Element_Size)
- {
- int64u Offset=Element_Size-1;
- while (Offset && Buffer[Buffer_Offset+(size_t)Offset]==0x00) //Searching if there are NULL bytes at the end of the data
- Offset--;
- size_t Bit_Pos=7;
- while (Bit_Pos && !(Buffer[Buffer_Offset+(size_t)Offset]&(1<<(7-Bit_Pos))))
- Bit_Pos--;
- if (Data_BS_Remain()>1+(7-Bit_Pos)+(Element_Size-Offset-1)*8)
- more_rbsp_data=true;
- }
- if (more_rbsp_data)
- {
- bool transform_8x8_mode_flag;
- Get_SB (transform_8x8_mode_flag, "transform_8x8_mode_flag");
- TEST_SB_SKIP( "pic_scaling_matrix_present_flag");
- for (int8u Pos=0; Pos<6+(transform_8x8_mode_flag?((*seq_parameter_set_Item)->chroma_format_idc!=3?2:6):0); Pos++ )
- {
- TEST_SB_SKIP( "pic_scaling_list_present_flag");
- scaling_list(Pos<6?16:64);
- TEST_SB_END();
- }
- TEST_SB_END();
- Skip_SE( "second_chroma_qp_index_offset");
- }
- Mark_1( );
- BS_End();
-
- while (Element_Offset<Element_Size) //Not always removed from the stream, ie in MPEG-4
- {
- int8u Padding;
- Peek_B1(Padding);
- if (!Padding)
- Skip_B1( "Padding");
- else
- break;
- }
-
- FILLING_BEGIN_PRECISE();
- //Integrity
- if (pic_parameter_set_id>=256)
- {
- Trusted_IsNot("pic_parameter_set_id not valid");
- return; //Problem, not valid
- }
- if (seq_parameter_set_id>=32)
- {
- Trusted_IsNot("seq_parameter_set_id not valid");
- return; //Problem, not valid
- }
-
- //NextCode
- NextCode_Clear();
- NextCode_Add(0x05);
- NextCode_Add(0x06);
- if (!subset_seq_parameter_sets.empty())
- NextCode_Add(0x14); //slice_layer_extension
-
- //Filling
- if (pic_parameter_set_id>=pic_parameter_sets.size())
- pic_parameter_sets.resize(pic_parameter_set_id+1);
- std::vector<pic_parameter_set_struct*>::iterator pic_parameter_sets_Item=pic_parameter_sets.begin()+pic_parameter_set_id;
- delete *pic_parameter_sets_Item; *pic_parameter_sets_Item = new pic_parameter_set_struct(
- (int8u)seq_parameter_set_id,
- (int8u)num_ref_idx_l0_default_active_minus1,
- (int8u)num_ref_idx_l1_default_active_minus1,
- weighted_bipred_idc,
- num_slice_groups_minus1,
- slice_group_map_type,
- entropy_coding_mode_flag,
- bottom_field_pic_order_in_frame_present_flag,
- weighted_pred_flag,
- redundant_pic_cnt_present_flag,
- deblocking_filter_control_present_flag
- );
-
- //Autorisation of other streams
- if (!seq_parameter_sets.empty())
- {
- for (int8u Pos=0x01; Pos<=0x06; Pos++)
- {
- Streams[Pos].Searching_Payload=true; //Coded slice...
- if (Streams[0x08].ShouldDuplicate)
- Streams[Pos].ShouldDuplicate=true;
- }
- }
- if (!subset_seq_parameter_sets.empty())
- {
- Streams[0x14].Searching_Payload=true; //slice_layer_extension
- if (Streams[0x08].ShouldDuplicate)
- Streams[0x14].ShouldDuplicate=true; //slice_layer_extension
- }
-
- //Setting as OK
- if (!Status[IsAccepted])
- Accept("AVC");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "09"
-void File_Avc::access_unit_delimiter()
-{
- Element_Name("access_unit_delimiter");
-
- int8u primary_pic_type;
- BS_Begin();
- Get_S1 ( 3, primary_pic_type, "primary_pic_type"); Param_Info1(Avc_primary_pic_type[primary_pic_type]);
- Mark_1_NoTrustError( ); //Found 1 file without this bit
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-// Packet "09"
-void File_Avc::filler_data()
-{
- Element_Name("filler_data");
-
- while (Element_Offset<Element_Size)
- {
- int8u FF;
- Peek_B1(FF);
- if (FF!=0xFF)
- break;
- Element_Offset++;
- }
- BS_Begin();
- Mark_1( );
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-// Packet "0E"
-void File_Avc::prefix_nal_unit(bool svc_extension_flag)
-{
- Element_Name("prefix_nal_unit");
-
- //Parsing
- if (svc_extension_flag)
- {
- Skip_XX(Element_Size-Element_Offset, "prefix_nal_unit_svc");
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet "0F"
-void File_Avc::subset_seq_parameter_set()
-{
- Element_Name("subset_seq_parameter_set");
-
- //Parsing
- int32u subset_seq_parameter_set_id;
- if (!seq_parameter_set_data(subset_seq_parameter_sets, subset_seq_parameter_set_id))
- return;
- std::vector<seq_parameter_set_struct*>::iterator subset_seq_parameter_sets_Item=subset_seq_parameter_sets.begin()+subset_seq_parameter_set_id;
- if ((*subset_seq_parameter_sets_Item)->profile_idc==83 || (*subset_seq_parameter_sets_Item)->profile_idc==86)
- {
- //bool svc_vui_parameters_present_flag;
- seq_parameter_set_svc_extension();
- /* The rest is not yet implemented
- Get_SB (svc_vui_parameters_present_flag, "svc_vui_parameters_present_flag");
- if (svc_vui_parameters_present_flag)
- svc_vui_parameters_extension();
- */
- }
- else if ((*subset_seq_parameter_sets_Item)->profile_idc==118 || (*subset_seq_parameter_sets_Item)->profile_idc==128)
- {
- //bool mvc_vui_parameters_present_flag, additional_extension2_flag;
- Mark_1();
- seq_parameter_set_mvc_extension(subset_seq_parameter_set_id);
- /* The rest is not yet implemented
- Get_SB (mvc_vui_parameters_present_flag, "mvc_vui_parameters_present_flag");
- if (mvc_vui_parameters_present_flag)
- mvc_vui_parameters_extension();
- Get_SB (additional_extension2_flag, "additional_extension2_flag");
- if (additional_extension2_flag)
- {
- //Not handled, should skip all bits except 1
- BS_End();
- return;
- }
- */
- }
- /* The rest is not yet implemented
- Mark_1( );
- */
- BS_End();
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Clear();
- NextCode_Add(0x08);
-
- //Autorisation of other streams
- Streams[0x08].Searching_Payload=true; //pic_parameter_set
- if (Streams[0x0F].ShouldDuplicate)
- Streams[0x08].ShouldDuplicate=true; //pic_parameter_set
- Streams[0x0A].Searching_Payload=true; //end_of_seq
- if (Streams[0x0F].ShouldDuplicate)
- Streams[0x0A].ShouldDuplicate=true; //end_of_seq
- Streams[0x0B].Searching_Payload=true; //end_of_stream
- if (Streams[0x0F].ShouldDuplicate)
- Streams[0x0B].ShouldDuplicate=true; //end_of_stream
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "14"
-void File_Avc::slice_layer_extension(bool svc_extension_flag)
-{
- Element_Name("slice_layer_extension");
-
- //Parsing
- if (svc_extension_flag)
- {
- Skip_XX(Element_Size-Element_Offset, "slice_header_in_scalable_extension + slice_data_in_scalable_extension");
- }
- else
- {
- BS_Begin();
- slice_header();
- slice_data(true);
- BS_End();
- }
-}
-
-//***************************************************************************
-// SubElements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Avc::seq_parameter_set_data(std::vector<seq_parameter_set_struct*> &Data, int32u &Data_id)
-{
- //Parsing
- seq_parameter_set_struct::vui_parameters_struct* vui_parameters_Item=NULL;
- int32u chroma_format_idc=1, bit_depth_luma_minus8=0, bit_depth_chroma_minus8=0, log2_max_frame_num_minus4, pic_order_cnt_type, log2_max_pic_order_cnt_lsb_minus4=(int32u)-1, max_num_ref_frames, pic_width_in_mbs_minus1, pic_height_in_map_units_minus1, frame_crop_left_offset=0, frame_crop_right_offset=0, frame_crop_top_offset=0, frame_crop_bottom_offset=0;
- int8u profile_idc, level_idc;
- bool constraint_set3_flag, separate_colour_plane_flag=false, delta_pic_order_always_zero_flag=false, frame_mbs_only_flag, mb_adaptive_frame_field_flag=false;
- Get_B1 (profile_idc, "profile_idc");
- BS_Begin();
- Element_Begin1("constraints");
- Skip_SB( "constraint_set0_flag");
- Skip_SB( "constraint_set1_flag");
- Skip_SB( "constraint_set2_flag");
- Get_SB (constraint_set3_flag, "constraint_set3_flag");
- Skip_SB( "constraint_set4_flag");
- Skip_SB( "constraint_set5_flag");
- Skip_BS(2, "reserved_zero_2bits");
- Element_End0();
- Get_S1 ( 8, level_idc, "level_idc");
- Get_UE ( Data_id, "seq_parameter_set_id");
- switch (profile_idc)
- {
- case 100 :
- case 110 :
- case 122 :
- case 244 :
- case 44 :
- case 83 :
- case 86 :
- case 118 :
- case 128 : //High profiles
- case 138 :
- Element_Begin1("high profile specific");
- Get_UE (chroma_format_idc, "chroma_format_idc"); Param_Info1C((chroma_format_idc<3), Avc_Colorimetry_format_idc[chroma_format_idc]);
- if (chroma_format_idc==3)
- Get_SB (separate_colour_plane_flag, "separate_colour_plane_flag");
- Get_UE (bit_depth_luma_minus8, "bit_depth_luma_minus8");
- Get_UE (bit_depth_chroma_minus8, "bit_depth_chroma_minus8");
- Skip_SB( "qpprime_y_zero_transform_bypass_flag");
- TEST_SB_SKIP( "seq_scaling_matrix_present_flag");
- for (int32u Pos=0; Pos<(int32u)((chroma_format_idc!=3) ? 8 : 12); Pos++)
- {
- TEST_SB_SKIP( "seq_scaling_list_present_flag");
- scaling_list(Pos<6?16:64);
- TEST_SB_END();
- }
- TEST_SB_END();
- Element_End0();
- break;
- default : ;
- }
- Get_UE (log2_max_frame_num_minus4, "log2_max_frame_num_minus4");
- Get_UE (pic_order_cnt_type, "pic_order_cnt_type");
- if (pic_order_cnt_type==0)
- Get_UE (log2_max_pic_order_cnt_lsb_minus4, "log2_max_pic_order_cnt_lsb_minus4");
- else if (pic_order_cnt_type==1)
- {
- int32u num_ref_frames_in_pic_order_cnt_cycle;
- Get_SB (delta_pic_order_always_zero_flag, "delta_pic_order_always_zero_flag");
- Skip_SE( "offset_for_non_ref_pic");
- Skip_SE( "offset_for_top_to_bottom_field");
- Get_UE (num_ref_frames_in_pic_order_cnt_cycle, "num_ref_frames_in_pic_order_cnt_cycle");
- if (num_ref_frames_in_pic_order_cnt_cycle>=256)
- {
- Trusted_IsNot("num_ref_frames_in_pic_order_cnt_cycle too high");
- return false;
- }
- for(int32u Pos=0; Pos<num_ref_frames_in_pic_order_cnt_cycle; Pos++)
- Skip_SE( "offset_for_ref_frame");
- }
- else if (pic_order_cnt_type > 2)
- {
- Trusted_IsNot("pic_order_cnt_type not supported");
- return false;
- }
- Get_UE (max_num_ref_frames, "max_num_ref_frames");
- Skip_SB( "gaps_in_frame_num_value_allowed_flag");
- Get_UE (pic_width_in_mbs_minus1, "pic_width_in_mbs_minus1");
- Get_UE (pic_height_in_map_units_minus1, "pic_height_in_map_units_minus1");
- Get_SB (frame_mbs_only_flag, "frame_mbs_only_flag");
- if (!frame_mbs_only_flag)
- Get_SB (mb_adaptive_frame_field_flag, "mb_adaptive_frame_field_flag");
- Skip_SB( "direct_8x8_inference_flag");
- TEST_SB_SKIP( "frame_cropping_flag");
- Get_UE (frame_crop_left_offset, "frame_crop_left_offset");
- Get_UE (frame_crop_right_offset, "frame_crop_right_offset");
- Get_UE (frame_crop_top_offset, "frame_crop_top_offset");
- Get_UE (frame_crop_bottom_offset, "frame_crop_bottom_offset");
- TEST_SB_END();
- TEST_SB_SKIP( "vui_parameters_present_flag");
- vui_parameters(vui_parameters_Item);
- TEST_SB_END();
-
- FILLING_BEGIN();
- //Integrity
- if (Data_id>=32)
- {
- Trusted_IsNot("seq_parameter_set_id not valid");
- delete (seq_parameter_set_struct::vui_parameters_struct*)vui_parameters_Item;
- return false; //Problem, not valid
- }
- if (pic_order_cnt_type==0 && log2_max_pic_order_cnt_lsb_minus4>12)
- {
- Trusted_IsNot("log2_max_pic_order_cnt_lsb_minus4 not valid");
- delete (seq_parameter_set_struct::vui_parameters_struct*)vui_parameters_Item;
- return false; //Problem, not valid
- }
- if (log2_max_frame_num_minus4>12)
- {
- Trusted_IsNot("log2_max_frame_num_minus4 not valid");
- delete (seq_parameter_set_struct::vui_parameters_struct*)vui_parameters_Item;
- return false; //Problem, not valid
- }
-
- //Creating Data
- if (Data_id>=Data.size())
- Data.resize(Data_id+1);
- std::vector<seq_parameter_set_struct*>::iterator Data_Item=Data.begin()+Data_id;
- delete *Data_Item; *Data_Item=new seq_parameter_set_struct(
- vui_parameters_Item,
- pic_width_in_mbs_minus1,
- pic_height_in_map_units_minus1,
- frame_crop_left_offset,
- frame_crop_right_offset,
- frame_crop_top_offset,
- frame_crop_bottom_offset,
- (int8u)chroma_format_idc,
- profile_idc,
- level_idc,
- (int8u)bit_depth_luma_minus8,
- (int8u)bit_depth_chroma_minus8,
- (int8u)log2_max_frame_num_minus4,
- (int8u)pic_order_cnt_type,
- (int8u)log2_max_pic_order_cnt_lsb_minus4,
- (int8u)max_num_ref_frames,
- constraint_set3_flag,
- separate_colour_plane_flag,
- delta_pic_order_always_zero_flag,
- frame_mbs_only_flag,
- mb_adaptive_frame_field_flag
- );
-
- //Computing values (for speed)
- size_t MaxNumber;
- switch (pic_order_cnt_type)
- {
- case 0 :
- MaxNumber=(*Data_Item)->MaxPicOrderCntLsb;
- break;
- case 1 :
- case 2 :
- MaxNumber=(*Data_Item)->MaxFrameNum*2;
- break;
- default:
- MaxNumber = 0;
- }
-
- if (MaxNumber>TemporalReferences_Reserved)
- {
- TemporalReferences.resize(4*MaxNumber);
- TemporalReferences_Reserved=MaxNumber;
- }
- FILLING_ELSE();
- delete vui_parameters_Item; //vui_parameters_Item=NULL;
- return false;
- FILLING_END();
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::scaling_list(int32u ScalingList_Size)
-{
- //From http://mpeg4ip.cvs.sourceforge.net/mpeg4ip/mpeg4ip/util/h264/main.cpp?revision=1.17&view=markup
- int32u lastScale=8, nextScale=8;
- for (int32u Pos=0; Pos<ScalingList_Size; Pos++)
- {
- if (nextScale!=0)
- {
- int32s delta_scale;
- Get_SE (delta_scale, "scale_delta");
- nextScale=(lastScale+delta_scale+256)%256;
- }
- if (nextScale)
- lastScale=nextScale;
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::vui_parameters(seq_parameter_set_struct::vui_parameters_struct* &vui_parameters_Item_)
-{
- //Parsing
- seq_parameter_set_struct::vui_parameters_struct::xxl *NAL=NULL, *VCL=NULL;
- seq_parameter_set_struct::vui_parameters_struct::bitstream_restriction_struct* bitstream_restriction=NULL;
- int32u num_units_in_tick=(int32u)-1, time_scale=(int32u)-1;
- int16u sar_width=(int16u)-1, sar_height=(int16u)-1;
- int8u aspect_ratio_idc=0, video_format=5, colour_primaries=2, transfer_characteristics=2, matrix_coefficients=2;
- bool aspect_ratio_info_present_flag, video_signal_type_present_flag, colour_description_present_flag=false, timing_info_present_flag, fixed_frame_rate_flag=false, nal_hrd_parameters_present_flag, vcl_hrd_parameters_present_flag, pic_struct_present_flag;
- TEST_SB_GET (aspect_ratio_info_present_flag, "aspect_ratio_info_present_flag");
- Get_S1 (8, aspect_ratio_idc, "aspect_ratio_idc"); Param_Info1C((aspect_ratio_idc<Avc_PixelAspectRatio_Size), Avc_PixelAspectRatio[aspect_ratio_idc]);
- if (aspect_ratio_idc==0xFF)
- {
- Get_S2 (16, sar_width, "sar_width");
- Get_S2 (16, sar_height, "sar_height");
- }
- TEST_SB_END();
- TEST_SB_SKIP( "overscan_info_present_flag");
- Skip_SB( "overscan_appropriate_flag");
- TEST_SB_END();
- TEST_SB_GET (video_signal_type_present_flag, "video_signal_type_present_flag");
- Get_S1 (3, video_format, "video_format"); Param_Info1(Avc_video_format[video_format]);
- Skip_SB( "video_full_range_flag");
- TEST_SB_GET (colour_description_present_flag, "colour_description_present_flag");
- Get_S1 (8, colour_primaries, "colour_primaries"); Param_Info1(Mpegv_colour_primaries(colour_primaries));
- Get_S1 (8, transfer_characteristics, "transfer_characteristics"); Param_Info1(Mpegv_transfer_characteristics(transfer_characteristics));
- Get_S1 (8, matrix_coefficients, "matrix_coefficients"); Param_Info1(Mpegv_matrix_coefficients(matrix_coefficients));
- TEST_SB_END();
- TEST_SB_END();
- TEST_SB_SKIP( "chroma_loc_info_present_flag");
- Skip_UE( "chroma_sample_loc_type_top_field");
- Skip_UE( "chroma_sample_loc_type_bottom_field");
- TEST_SB_END();
- TEST_SB_GET (timing_info_present_flag, "timing_info_present_flag");
- Get_S4 (32, num_units_in_tick, "num_units_in_tick");
- Get_S4 (32, time_scale, "time_scale");
- Get_SB ( fixed_frame_rate_flag, "fixed_frame_rate_flag");
- TEST_SB_END();
- TEST_SB_GET (nal_hrd_parameters_present_flag, "nal_hrd_parameters_present_flag");
- hrd_parameters(NAL);
- TEST_SB_END();
- TEST_SB_GET (vcl_hrd_parameters_present_flag, "vcl_hrd_parameters_present_flag");
- hrd_parameters(VCL);
- TEST_SB_END();
- if (nal_hrd_parameters_present_flag || vcl_hrd_parameters_present_flag)
- Skip_SB( "low_delay_hrd_flag");
- Get_SB ( pic_struct_present_flag, "pic_struct_present_flag");
- TEST_SB_SKIP( "bitstream_restriction_flag");
- int32u max_num_reorder_frames;
- Skip_SB( "motion_vectors_over_pic_boundaries_flag");
- Skip_UE( "max_bytes_per_pic_denom");
- Skip_UE( "max_bits_per_mb_denom");
- Skip_UE( "log2_max_mv_length_horizontal");
- Skip_UE( "log2_max_mv_length_vertical");
- Get_UE (max_num_reorder_frames, "max_num_reorder_frames");
- Skip_UE( "max_dec_frame_buffering");
- if (max_num_reorder_frames<256)
- bitstream_restriction=new seq_parameter_set_struct::vui_parameters_struct::bitstream_restriction_struct(
- (int8u)max_num_reorder_frames
- );
- TEST_SB_END();
-
- FILLING_BEGIN();
- vui_parameters_Item_=new seq_parameter_set_struct::vui_parameters_struct(
- NAL,
- VCL,
- bitstream_restriction,
- num_units_in_tick,
- time_scale,
- sar_width,
- sar_height,
- aspect_ratio_idc,
- video_format,
- colour_primaries,
- transfer_characteristics,
- matrix_coefficients,
- aspect_ratio_info_present_flag,
- video_signal_type_present_flag,
- colour_description_present_flag,
- timing_info_present_flag,
- fixed_frame_rate_flag,
- pic_struct_present_flag
- );
- FILLING_ELSE();
- delete NAL;
- delete VCL;
- delete bitstream_restriction;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::hrd_parameters(seq_parameter_set_struct::vui_parameters_struct::xxl* &hrd_parameters_Item_)
-{
- //Parsing
- int32u cpb_cnt_minus1;
- int8u bit_rate_scale, cpb_size_scale, initial_cpb_removal_delay_length_minus1, cpb_removal_delay_length_minus1, dpb_output_delay_length_minus1, time_offset_length;
- Get_UE ( cpb_cnt_minus1, "cpb_cnt_minus1");
- Get_S1 (4, bit_rate_scale, "bit_rate_scale");
- Get_S1 (4, cpb_size_scale, "cpb_size_scale");
- if (cpb_cnt_minus1>31)
- {
- Trusted_IsNot("cpb_cnt_minus1 too high");
- cpb_cnt_minus1=0;
- }
- vector<seq_parameter_set_struct::vui_parameters_struct::xxl::xxl_data> SchedSel;
- SchedSel.reserve(cpb_cnt_minus1+1);
- for (int8u SchedSelIdx = 0; SchedSelIdx <= cpb_cnt_minus1; ++SchedSelIdx)
- {
- Element_Begin1("ShedSel");
- int64u bit_rate_value, cpb_size_value;
- int32u bit_rate_value_minus1, cpb_size_value_minus1;
- bool cbr_flag;
- Get_UE (bit_rate_value_minus1, "bit_rate_value_minus1");
- bit_rate_value=(int64u)((bit_rate_value_minus1+1)*pow(2.0, 6+bit_rate_scale)); Param_Info2(bit_rate_value, " bps");
- Get_UE (cpb_size_value_minus1, "cpb_size_value_minus1");
- cpb_size_value=(int64u)((cpb_size_value_minus1+1)*pow(2.0, 4+cpb_size_scale)); Param_Info2(cpb_size_value, " bits");
- Get_SB (cbr_flag, "cbr_flag");
- Element_End0();
-
- FILLING_BEGIN();
- SchedSel.push_back(seq_parameter_set_struct::vui_parameters_struct::xxl::xxl_data(
- bit_rate_value,
- cpb_size_value,
- cbr_flag
- ));
- FILLING_END();
- }
- Get_S1 (5, initial_cpb_removal_delay_length_minus1, "initial_cpb_removal_delay_length_minus1");
- Get_S1 (5, cpb_removal_delay_length_minus1, "cpb_removal_delay_length_minus1");
- Get_S1 (5, dpb_output_delay_length_minus1, "dpb_output_delay_length_minus1");
- Get_S1 (5, time_offset_length, "time_offset_length");
-
- //Validity test
- if (!Element_IsOK() || (SchedSel.size() == 1 && SchedSel[0].bit_rate_value == 64))
- {
- return; //We do not trust this kind of data
- }
-
- //Filling
- hrd_parameters_Item_=new seq_parameter_set_struct::vui_parameters_struct::xxl(
- SchedSel,
- initial_cpb_removal_delay_length_minus1,
- cpb_removal_delay_length_minus1,
- dpb_output_delay_length_minus1,
- time_offset_length
- );
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::nal_unit_header_svc_extension()
-{
- //Parsing
- Element_Begin1("nal_unit_header_svc_extension");
- Skip_SB( "idr_flag");
- Skip_S1( 6, "priority_id");
- Skip_SB( "no_inter_layer_pred_flag");
- Skip_S1( 3, "dependency_id");
- Skip_S1( 4, "quality_id");
- Skip_S1( 3, "temporal_id");
- Skip_SB( "use_ref_base_pic_flag");
- Skip_SB( "discardable_flag");
- Skip_SB( "output_flag");
- Skip_S1( 2, "reserved_three_2bits");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::nal_unit_header_mvc_extension()
-{
- //Parsing
- Element_Begin1("nal_unit_header_mvc_extension");
- Skip_SB( "non_idr_flag");
- Skip_S1( 6, "priority_id");
- Skip_S1(10, "view_id");
- Skip_S1( 3, "temporal_id");
- Skip_SB( "anchor_pic_flag");
- Skip_SB( "inter_view_flag");
- Skip_SB( "reserved_one_bit");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::seq_parameter_set_svc_extension()
-{
- //Parsing
- Element_Begin1("seq_parameter_set_svc_extension");
- //Skip_SB( "");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::svc_vui_parameters_extension()
-{
- //Parsing
- Element_Begin1("svc_vui_parameters_extension");
- //Skip_SB( "");
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::seq_parameter_set_mvc_extension(int32u subset_seq_parameter_sets_id)
-{
- //Parsing
- Element_Begin1("seq_parameter_set_mvc_extension");
- int32u num_views_minus1;
- Get_UE (num_views_minus1, "num_views_minus1");
- //(Not implemented)
- Element_End0();
-
- FILLING_BEGIN();
- subset_seq_parameter_sets[subset_seq_parameter_sets_id]->num_views_minus1 = (int16u)num_views_minus1;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Avc::mvc_vui_parameters_extension()
-{
- //Parsing
- Element_Begin1("mvc_vui_parameters_extension");
- Skip_SB( "");
- Element_End0();
-}
-
-//***************************************************************************
-// Specific
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Avc::SPS_PPS()
-{
- //Parsing
- int8u Profile, Level, seq_parameter_set_count, pic_parameter_set_count;
- if (SizedBlocks)
- Skip_B1( "Version");
- Get_B1 (Profile, "Profile");
- Skip_B1( "Compatible profile");
- Get_B1 (Level, "Level");
- BS_Begin();
- Skip_S1(6, "Reserved");
- Get_S1 (2, SizeOfNALU_Minus1, "Size of NALU length minus 1");
- Skip_S1(3, "Reserved");
- Get_S1 (5, seq_parameter_set_count, "seq_parameter_set count");
- BS_End();
- for (int8u Pos=0; Pos<seq_parameter_set_count; Pos++)
- {
- Element_Begin1("seq_parameter_set");
- int16u Size;
- Get_B2 (Size, "Size");
- BS_Begin();
- Mark_0 ();
- Skip_S1( 2, "nal_ref_idc");
- Skip_S1( 5, "nal_unit_type");
- BS_End();
- if (Element_Offset+Size-1>Element_Size)
- {
- Trusted_IsNot("Size is wrong");
- break; //There is an error
- }
- int64u Element_Offset_Save=Element_Offset;
- int64u Element_Size_Save=Element_Size;
- Buffer_Offset+=(size_t)Element_Offset_Save;
- Element_Offset=0;
- Element_Size=Size-(Size?1:0);
- Element_Code=0x07; //seq_parameter_set
- Data_Parse();
- Buffer_Offset-=(size_t)Element_Offset_Save;
- Element_Offset=Element_Offset_Save+Size-1;
- Element_Size=Element_Size_Save;
- Element_End0();
- }
- Get_B1 (pic_parameter_set_count, "pic_parameter_set count");
- for (int8u Pos=0; Pos<pic_parameter_set_count; Pos++)
- {
- Element_Begin1("pic_parameter_set");
- int16u Size;
- Get_B2 (Size, "Size");
- BS_Begin();
- Mark_0 ();
- Skip_S1( 2, "nal_ref_idc");
- Skip_S1( 5, "nal_unit_type");
- BS_End();
- int64u Element_Offset_Save=Element_Offset;
- int64u Element_Size_Save=Element_Size;
- Buffer_Offset+=(size_t)Element_Offset_Save;
- Element_Offset=0;
- Element_Size=Size-1;
- if (Element_Size>Element_Size_Save-Element_Offset_Save)
- break; //There is an error
- Element_Code=0x08; //pic_parameter_set
- Data_Parse();
- Buffer_Offset-=(size_t)Element_Offset_Save;
- Element_Offset=Element_Offset_Save+Size-1;
- Element_Size=Element_Size_Save;
- Element_End0();
- }
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Padding?");
-
- //Filling
- FILLING_BEGIN_PRECISE();
- //Detection of some bugs in the file
- if (!seq_parameter_sets.empty() && seq_parameter_sets[0] && (Profile!=seq_parameter_sets[0]->profile_idc || Level!=seq_parameter_sets[0]->level_idc))
- MuxingMode=Ztring("Container profile=")+Ztring().From_Local(Avc_profile_idc(Profile))+__T("@")+Ztring().From_Number(((float)Level)/10, 1);
-
- MustParse_SPS_PPS=false;
- if (!Status[IsAccepted])
- Accept("AVC");
- FILLING_END();
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-std::string File_Avc::GOP_Detect (std::string PictureTypes)
-{
- //Finding a string without blanks
- size_t PictureTypes_Limit=PictureTypes.find(' ');
- if (PictureTypes_Limit!=string::npos)
- {
- if (PictureTypes_Limit>PictureTypes.size()/2)
- PictureTypes.resize(PictureTypes_Limit);
- else
- {
- //Trim
- size_t TrimPos;
- TrimPos=PictureTypes.find_first_not_of(' ');
- if (TrimPos!=string::npos)
- PictureTypes.erase(0, TrimPos);
- TrimPos=PictureTypes.find_last_not_of(' ');
- if (TrimPos!=string::npos)
- PictureTypes.erase(TrimPos+1);
-
- //Finding the longest string
- ZtringList List; List.Separator_Set(0, __T(" "));
- List.Write(Ztring().From_Local(PictureTypes));
- size_t MaxLength=0;
- size_t MaxLength_Pos=0;
- for (size_t Pos=0; Pos<List.size(); Pos++)
- if (List[Pos].size()>MaxLength)
- {
- MaxLength=List[Pos].size();
- MaxLength_Pos=Pos;
- }
- PictureTypes=List[MaxLength_Pos].To_Local();
-
- }
- }
-
- //Creating all GOP values
- std::vector<Ztring> GOPs;
- size_t GOP_Frame_Count=0;
- size_t GOP_BFrames_Max=0;
- size_t I_Pos1=PictureTypes.find('I');
- while (I_Pos1!=std::string::npos)
- {
- size_t I_Pos2=PictureTypes.find('I', I_Pos1+1);
- if (I_Pos2!=std::string::npos)
- {
- std::vector<size_t> P_Positions;
- size_t P_Position=I_Pos1;
- do
- {
- P_Position=PictureTypes.find('P', P_Position+1);
- if (P_Position<I_Pos2)
- P_Positions.push_back(P_Position);
- }
- while (P_Position<I_Pos2);
- if (P_Positions.size()>1 && P_Positions[0]>I_Pos1+1 && P_Positions[P_Positions.size()-1]==I_Pos2-1)
- P_Positions.resize(P_Positions.size()-1); //Removing last P-Frame for next test, this is often a terminating P-Frame replacing a B-Frame
- Ztring GOP;
- bool IsOK=true;
- if (!P_Positions.empty())
- {
- size_t Delta=P_Positions[0]-I_Pos1;
- for (size_t Pos=1; Pos<P_Positions.size(); Pos++)
- if (P_Positions[Pos]-P_Positions[Pos-1]!=Delta)
- {
- IsOK=false;
- break;
- }
- if (IsOK)
- {
- GOP+=__T("M=")+Ztring::ToZtring(P_Positions[0]-I_Pos1)+__T(", ");
- if (P_Positions[0]-I_Pos1>GOP_BFrames_Max)
- GOP_BFrames_Max=P_Positions[0]-I_Pos1;
- }
- }
- if (IsOK)
- {
- GOP+=__T("N=")+Ztring::ToZtring(I_Pos2-I_Pos1);
- GOPs.push_back(GOP);
- }
- else
- GOPs.push_back(Ztring()); //There is a problem, blank
- GOP_Frame_Count+=I_Pos2-I_Pos1;
- }
- I_Pos1=I_Pos2;
- }
-
- //Some clean up
- if (GOP_Frame_Count+GOP_BFrames_Max>Frame_Count && !GOPs.empty())
- GOPs.resize(GOPs.size()-1); //Removing the last one, there may have uncomplete B-frame filling
- if (GOPs.size()>4)
- GOPs.erase(GOPs.begin()); //Removing the first one, it is sometime different and we have enough to deal with
-
- //Filling
- if (GOPs.size()>=4)
- {
- bool IsOK=true;
- for (size_t Pos=1; Pos<GOPs.size(); Pos++)
- if (GOPs[Pos]!=GOPs[0])
- {
- IsOK=false;
- break;
- }
- if (IsOK)
- return GOPs[0].To_Local();
- }
-
- return string();
-}
-
-//---------------------------------------------------------------------------
-std::string File_Avc::ScanOrder_Detect (std::string ScanOrders)
-{
- //Finding a string without blanks
- size_t ScanOrders_Limit=ScanOrders.find(' ');
- if (ScanOrders_Limit!=string::npos)
- {
- if (ScanOrders_Limit>ScanOrders.size()/2)
- ScanOrders.resize(ScanOrders_Limit);
- else
- {
- //Trim
- size_t TrimPos;
- TrimPos=ScanOrders.find_first_not_of(' ');
- if (TrimPos!=string::npos)
- ScanOrders.erase(0, TrimPos);
- TrimPos=ScanOrders.find_last_not_of(' ');
- if (TrimPos!=string::npos)
- ScanOrders.erase(TrimPos+1);
-
- //Finding the longest string
- ZtringList List; List.Separator_Set(0, __T(" "));
- List.Write(Ztring().From_Local(ScanOrders));
- size_t MaxLength=0;
- size_t MaxLength_Pos=0;
- for (size_t Pos=0; Pos<List.size(); Pos++)
- if (List[Pos].size()>MaxLength)
- {
- MaxLength=List[Pos].size();
- MaxLength_Pos=Pos;
- }
- ScanOrders=List[MaxLength_Pos].To_Local();
-
- }
- }
-
- //Filling
- if (ScanOrders.find("TBTBTBTB")==0)
- return ("TFF");
- if (ScanOrders.find("BTBTBTBT")==0)
- return ("BFF");
- return string();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_AVC_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc.h
deleted file mode 100644
index dfb06033b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc.h
+++ /dev/null
@@ -1,564 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_AvcH
-#define MediaInfo_AvcH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/File__Duplicate.h"
-#include <cmath>
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Avc
-//***************************************************************************
-
-class File_Avc :
-#if MEDIAINFO_DUPLICATE
- public File__Duplicate
-#else //MEDIAINFO_DUPLICATE
- public File__Analyze
-#endif //MEDIAINFO_DUPLICATE
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool FrameIsAlwaysComplete;
- bool MustParse_SPS_PPS;
- bool SizedBlocks;
-
- //Constructor/Destructor
- File_Avc();
- ~File_Avc();
-
-private :
- File_Avc(const File_Avc &File_Avc); //No copy
-
- //Structures - seq_parameter_set
- struct seq_parameter_set_struct
- {
- struct vui_parameters_struct
- {
- struct xxl
- {
- struct xxl_data
- {
- //HRD configuration
- int64u bit_rate_value;
- int64u cpb_size_value;
- bool cbr_flag;
-
- //sei_message_buffering_period
- //int32u initial_cpb_removal_delay;
- //int32u initial_cpb_removal_delay_offset;
-
- xxl_data(int64u bit_rate_value_, int64u cpb_size_value_, bool cbr_flag_) //int32u initial_cpb_removal_delay_, int32u initial_cpb_removal_delay_offset_)
- :
- bit_rate_value(bit_rate_value_),
- cpb_size_value(cpb_size_value_),
- cbr_flag(cbr_flag_)
- //initial_cpb_removal_delay(initial_cpb_removal_delay_),
- //initial_cpb_removal_delay_offset(initial_cpb_removal_delay_offset_)
- {
- }
-
- xxl_data &operator=(const xxl_data &x)
- {
- bit_rate_value=x.bit_rate_value;
- cpb_size_value=x.cpb_size_value;
- cbr_flag=x.cbr_flag;
- //initial_cpb_removal_delay=x.initial_cpb_removal_delay;
- //initial_cpb_removal_delay_offset=x.initial_cpb_removal_delay_offset;
- return *this;
- }
-
- private:
- xxl_data();
- };
- vector<xxl_data> SchedSel;
- int8u initial_cpb_removal_delay_length_minus1;
- int8u cpb_removal_delay_length_minus1;
- int8u dpb_output_delay_length_minus1;
- int8u time_offset_length;
-
- xxl(const vector<xxl_data> &SchedSel_, int8u initial_cpb_removal_delay_length_minus1_, int8u cpb_removal_delay_length_minus1_, int8u dpb_output_delay_length_minus1_, int8u time_offset_length_)
- :
- SchedSel(SchedSel_),
- initial_cpb_removal_delay_length_minus1(initial_cpb_removal_delay_length_minus1_),
- cpb_removal_delay_length_minus1(cpb_removal_delay_length_minus1_),
- dpb_output_delay_length_minus1(dpb_output_delay_length_minus1_),
- time_offset_length(time_offset_length_)
- {
- }
-
- xxl &operator=(const xxl &x)
- {
- SchedSel=x.SchedSel;
- initial_cpb_removal_delay_length_minus1=x.initial_cpb_removal_delay_length_minus1;
- cpb_removal_delay_length_minus1=x.cpb_removal_delay_length_minus1;
- dpb_output_delay_length_minus1=x.dpb_output_delay_length_minus1;
- time_offset_length=x.time_offset_length;
-
- return *this;
- }
-
- private:
- xxl();
- };
- struct bitstream_restriction_struct
- {
- int8u max_num_reorder_frames;
-
- bitstream_restriction_struct(int8u max_num_reorder_frames_)
- :
- max_num_reorder_frames(max_num_reorder_frames_)
- {
- }
-
- bitstream_restriction_struct &operator=(const bitstream_restriction_struct &b)
- {
- max_num_reorder_frames=b.max_num_reorder_frames;
-
- return *this;
- }
-
- private:
- bitstream_restriction_struct();
- };
- xxl* NAL;
- xxl* VCL;
- bitstream_restriction_struct* bitstream_restriction;
- int32u num_units_in_tick;
- int32u time_scale;
- int16u sar_width;
- int16u sar_height;
- int8u aspect_ratio_idc;
- int8u video_format;
- int8u colour_primaries;
- int8u transfer_characteristics;
- int8u matrix_coefficients;
- bool aspect_ratio_info_present_flag;
- bool video_signal_type_present_flag;
- bool colour_description_present_flag;
- bool timing_info_present_flag;
- bool fixed_frame_rate_flag;
- bool pic_struct_present_flag;
-
- vui_parameters_struct(xxl* NAL_, xxl* VCL_, bitstream_restriction_struct* bitstream_restriction_, int32u num_units_in_tick_, int32u time_scale_, int16u sar_width_, int16u sar_height_, int8u aspect_ratio_idc_, int8u video_format_, int8u colour_primaries_, int8u transfer_characteristics_, int8u matrix_coefficients_, bool aspect_ratio_info_present_flag_, bool video_signal_type_present_flag_, bool colour_description_present_flag_, bool timing_info_present_flag_, bool fixed_frame_rate_flag_, bool pic_struct_present_flag_)
- :
- NAL(NAL_),
- VCL(VCL_),
- bitstream_restriction(bitstream_restriction_),
- num_units_in_tick(num_units_in_tick_),
- time_scale(time_scale_),
- sar_width(sar_width_),
- sar_height(sar_height_),
- aspect_ratio_idc(aspect_ratio_idc_),
- video_format(video_format_),
- colour_primaries(colour_primaries_),
- transfer_characteristics(transfer_characteristics_),
- matrix_coefficients(matrix_coefficients_),
- aspect_ratio_info_present_flag(aspect_ratio_info_present_flag_),
- video_signal_type_present_flag(video_signal_type_present_flag_),
- colour_description_present_flag(colour_description_present_flag_),
- timing_info_present_flag(timing_info_present_flag_),
- fixed_frame_rate_flag(fixed_frame_rate_flag_),
- pic_struct_present_flag(pic_struct_present_flag_)
- {
- }
-
- ~vui_parameters_struct()
- {
- delete NAL; //NAL=NULL;
- delete VCL; //VCL=NULL;
- delete bitstream_restriction; //bitstream_restriction=NULL;
- }
-
- private:
- vui_parameters_struct &operator=(const vui_parameters_struct &v);
- vui_parameters_struct();
- };
- vui_parameters_struct* vui_parameters;
- #if MEDIAINFO_DEMUX
- int8u* Iso14496_10_Buffer;
- size_t Iso14496_10_Buffer_Size;
- #endif //MEDIAINFO_DEMUX
- int32u pic_width_in_mbs_minus1;
- int32u pic_height_in_map_units_minus1;
- int32u frame_crop_left_offset;
- int32u frame_crop_right_offset;
- int32u frame_crop_top_offset;
- int32u frame_crop_bottom_offset;
- int32u MaxPicOrderCntLsb; //Computed value (for speed)
- int32u MaxFrameNum; //Computed value (for speed)
- int16u num_views_minus1; //MultiView specific field
- int8u chroma_format_idc;
- int8u profile_idc;
- int8u level_idc;
- int8u bit_depth_luma_minus8;
- int8u bit_depth_chroma_minus8;
- int8u log2_max_frame_num_minus4;
- int8u pic_order_cnt_type;
- int8u log2_max_pic_order_cnt_lsb_minus4;
- int8u max_num_ref_frames;
- int8u pic_struct_FirstDetected; //For stats only
- bool constraint_set3_flag;
- bool separate_colour_plane_flag;
- bool delta_pic_order_always_zero_flag;
- bool frame_mbs_only_flag;
- bool mb_adaptive_frame_field_flag;
-
- //Computed values
- bool NalHrdBpPresentFlag() {return vui_parameters && vui_parameters->NAL;}
- bool VclHrdBpPresentFlag() {return vui_parameters && vui_parameters->VCL;}
- bool CpbDpbDelaysPresentFlag() {return vui_parameters && (vui_parameters->NAL || vui_parameters->VCL);}
- int8u ChromaArrayType() {return separate_colour_plane_flag?0:chroma_format_idc;}
-
- //Constructor/Destructor
- seq_parameter_set_struct(vui_parameters_struct* vui_parameters_, int32u pic_width_in_mbs_minus1_, int32u pic_height_in_map_units_minus1_, int32u frame_crop_left_offset_, int32u frame_crop_right_offset_, int32u frame_crop_top_offset_, int32u frame_crop_bottom_offset_, int8u chroma_format_idc_, int8u profile_idc_, int8u level_idc_, int8u bit_depth_luma_minus8_, int8u bit_depth_chroma_minus8_, int8u log2_max_frame_num_minus4_, int8u pic_order_cnt_type_, int8u log2_max_pic_order_cnt_lsb_minus4_, int8u max_num_ref_frames_, bool constraint_set3_flag_, bool separate_colour_plane_flag_, bool delta_pic_order_always_zero_flag_, bool frame_mbs_only_flag_, bool mb_adaptive_frame_field_flag_)
- :
- vui_parameters(vui_parameters_),
- #if MEDIAINFO_DEMUX
- Iso14496_10_Buffer(NULL),
- Iso14496_10_Buffer_Size(0),
- #endif //MEDIAINFO_DEMUX
- pic_width_in_mbs_minus1(pic_width_in_mbs_minus1_),
- pic_height_in_map_units_minus1(pic_height_in_map_units_minus1_),
- frame_crop_left_offset(frame_crop_left_offset_),
- frame_crop_right_offset(frame_crop_right_offset_),
- frame_crop_top_offset(frame_crop_top_offset_),
- frame_crop_bottom_offset(frame_crop_bottom_offset_),
- num_views_minus1(0),
- chroma_format_idc(chroma_format_idc_),
- profile_idc(profile_idc_),
- level_idc(level_idc_),
- bit_depth_luma_minus8(bit_depth_luma_minus8_),
- bit_depth_chroma_minus8(bit_depth_chroma_minus8_),
- log2_max_frame_num_minus4(log2_max_frame_num_minus4_),
- pic_order_cnt_type(pic_order_cnt_type_),
- log2_max_pic_order_cnt_lsb_minus4(log2_max_pic_order_cnt_lsb_minus4_),
- max_num_ref_frames(max_num_ref_frames_),
- pic_struct_FirstDetected((int8u)-1), //For stats only, init
- constraint_set3_flag(constraint_set3_flag_),
- separate_colour_plane_flag(separate_colour_plane_flag_),
- delta_pic_order_always_zero_flag(delta_pic_order_always_zero_flag_),
- frame_mbs_only_flag(frame_mbs_only_flag_),
- mb_adaptive_frame_field_flag(mb_adaptive_frame_field_flag_)
- {
- switch (pic_order_cnt_type)
- {
- case 0 :
- MaxPicOrderCntLsb = (int32u)std::pow(2.0, (int)(log2_max_pic_order_cnt_lsb_minus4 + 4));
- MaxFrameNum = (int32u)-1; //Unused
- break;
- case 1 :
- case 2 :
- MaxPicOrderCntLsb = (int32u)-1; //Unused
- MaxFrameNum = (int32u)std::pow(2.0, (int)(log2_max_frame_num_minus4 + 4));
- break;
- default:
- MaxFrameNum = (int32u)-1; //Unused
- MaxPicOrderCntLsb = (int32u)-1; //Unused
- }
- }
-
- ~seq_parameter_set_struct()
- {
- delete vui_parameters; //vui_parameters=NULL;
- #if MEDIAINFO_DEMUX
- delete[] Iso14496_10_Buffer;
- #endif //MEDIAINFO_DEMUX
- }
-
- private:
- seq_parameter_set_struct &operator=(const seq_parameter_set_struct &v);
- seq_parameter_set_struct();
- };
- typedef vector<seq_parameter_set_struct*> seq_parameter_set_structs;
-
- //Structures - pic_parameter_set
- struct pic_parameter_set_struct
- {
- #if MEDIAINFO_DEMUX
- int8u* Iso14496_10_Buffer;
- size_t Iso14496_10_Buffer_Size;
- #endif //MEDIAINFO_DEMUX
- int8u seq_parameter_set_id;
- int8u num_ref_idx_l0_default_active_minus1;
- int8u num_ref_idx_l1_default_active_minus1;
- int8u weighted_bipred_idc;
- int32u num_slice_groups_minus1;
- int32u slice_group_map_type;
- bool entropy_coding_mode_flag;
- bool bottom_field_pic_order_in_frame_present_flag;
- bool weighted_pred_flag;
- bool redundant_pic_cnt_present_flag;
- bool deblocking_filter_control_present_flag;
-
- //Constructor/Destructor
- pic_parameter_set_struct(int8u seq_parameter_set_id_, int8u num_ref_idx_l0_default_active_minus1_, int8u num_ref_idx_l1_default_active_minus1_, int8u weighted_bipred_idc_, int32u num_slice_groups_minus1_, int32u slice_group_map_type_, bool entropy_coding_mode_flag_, bool bottom_field_pic_order_in_frame_present_flag_, bool weighted_pred_flag_, bool redundant_pic_cnt_present_flag_, bool deblocking_filter_control_present_flag_)
- :
- #if MEDIAINFO_DEMUX
- Iso14496_10_Buffer(NULL),
- Iso14496_10_Buffer_Size(0),
- #endif //MEDIAINFO_DEMUX
- seq_parameter_set_id(seq_parameter_set_id_),
- num_ref_idx_l0_default_active_minus1(num_ref_idx_l0_default_active_minus1_),
- num_ref_idx_l1_default_active_minus1(num_ref_idx_l1_default_active_minus1_),
- weighted_bipred_idc(weighted_bipred_idc_),
- num_slice_groups_minus1(num_slice_groups_minus1_),
- slice_group_map_type(slice_group_map_type_),
- entropy_coding_mode_flag(entropy_coding_mode_flag_),
- bottom_field_pic_order_in_frame_present_flag(bottom_field_pic_order_in_frame_present_flag_),
- weighted_pred_flag(weighted_pred_flag_),
- redundant_pic_cnt_present_flag(redundant_pic_cnt_present_flag_),
- deblocking_filter_control_present_flag(deblocking_filter_control_present_flag_)
- {
- }
-
- ~pic_parameter_set_struct()
- {
- #if MEDIAINFO_DEMUX
- delete[] Iso14496_10_Buffer;
- #endif //MEDIAINFO_DEMUX
- }
-
- private:
- pic_parameter_set_struct &operator=(const pic_parameter_set_struct &v);
- pic_parameter_set_struct();
- };
- typedef vector<pic_parameter_set_struct*> pic_parameter_set_structs;
-
- //Streams management
- void Streams_Fill();
- void Streams_Fill(vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item);
- void Streams_Fill_subset(vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item);
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- bool Demux_Avc_Transcode_Iso14496_15_to_Iso14496_10;
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- #if MEDIAINFO_ADVANCED2
- void Read_Buffer_SegmentChange();
- #endif //MEDIAINFO_ADVANCED2
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parser_QuickSearch();
- bool Header_Parser_Fill_Size();
- void Data_Parse();
-
- #if MEDIAINFO_DUPLICATE
- //Output buffer
- size_t Output_Buffer_Get (const String &Value);
- size_t Output_Buffer_Get (size_t Pos);
- #endif //MEDIAINFO_DUPLICATE
-
- //Options
- void Option_Manage ();
-
- //Elements
- void slice_layer_without_partitioning_IDR();
- void slice_layer_without_partitioning_non_IDR();
- void slice_header();
- void slice_data (bool AllCategories);
- void seq_parameter_set();
- void pic_parameter_set();
- void sei();
- void sei_message(int32u &seq_parameter_set_id);
- void sei_message_buffering_period(int32u &seq_parameter_set_id);
- void sei_message_buffering_period_xxl(seq_parameter_set_struct::vui_parameters_struct::xxl* xxl);
- void sei_message_pic_timing(int32u payloadSize, int32u seq_parameter_set_id);
- void sei_message_user_data_registered_itu_t_t35();
- void sei_message_user_data_registered_itu_t_t35_DTG1();
- void sei_message_user_data_registered_itu_t_t35_GA94();
- void sei_message_user_data_registered_itu_t_t35_GA94_03();
- void sei_message_user_data_registered_itu_t_t35_GA94_03_Delayed(int32u seq_parameter_set_id);
- void sei_message_user_data_registered_itu_t_t35_GA94_06();
- void sei_message_user_data_unregistered(int32u payloadSize);
- void sei_message_user_data_unregistered_x264(int32u payloadSize);
- void sei_message_user_data_unregistered_bluray(int32u payloadSize);
- void sei_message_recovery_point();
- void sei_message_mainconcept(int32u payloadSize);
- void access_unit_delimiter();
- void filler_data();
- void prefix_nal_unit(bool svc_extension_flag);
- void subset_seq_parameter_set();
- void slice_layer_extension(bool svc_extension_flag);
-
- //Packets - SubElements
- bool seq_parameter_set_data(vector<seq_parameter_set_struct*> &Data, int32u &Data_id);
- void seq_parameter_set_svc_extension();
- void seq_parameter_set_mvc_extension(int32u subset_seq_parameter_sets_id);
- void scaling_list(int32u ScalingList_Size);
- void vui_parameters(seq_parameter_set_struct::vui_parameters_struct* &vui_parameters_Item);
- void svc_vui_parameters_extension();
- void mvc_vui_parameters_extension();
- void hrd_parameters(seq_parameter_set_struct::vui_parameters_struct::xxl* &hrd_parameters_Item);
- void nal_unit_header_svc_extension();
- void nal_unit_header_mvc_extension();
- void ref_pic_list_modification(int32u slice_type, bool mvc);
- void pred_weight_table(int32u num_ref_idx_l0_active_minus1, int32u num_ref_idx_l1_active_minus1, int8u ChromaArrayType);
- void dec_ref_pic_marking(vector<int8u> &memory_management_control_operations);
-
- //Packets - Specific
- void SPS_PPS();
-
- //Streams
- struct stream
- {
- bool Searching_Payload;
- bool ShouldDuplicate;
-
- stream()
- :
- Searching_Payload(false),
- ShouldDuplicate(false)
- {
- }
- };
- vector<stream> Streams;
-
- //Temporal references
- struct temporal_reference
- {
- struct buffer_data
- {
- size_t Size;
- int8u* Data;
-
- buffer_data()
- {
- Size=0;
- Data=NULL;
- }
-
- ~buffer_data()
- {
- delete[] Data; //Data=NULL;
- }
- };
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- buffer_data* GA94_03;
- #endif //MEDIAINFO_DTVCCTRANSPORT_YES
-
- int32u frame_num;
- int8u slice_type;
- bool IsTop;
- bool IsField;
-
- temporal_reference()
- {
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- GA94_03=NULL;
- #endif //MEDIAINFO_DTVCCTRANSPORT_YES
- slice_type=(int8u)-1;
- }
-
- ~temporal_reference()
- {
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- delete GA94_03; //GA94_03=NULL;
- #endif //MEDIAINFO_DTVCCTRANSPORT_YES
- }
- };
- typedef vector<temporal_reference*> temporal_references;
- temporal_references TemporalReferences; //per pic_order_cnt_lsb
- temporal_reference* TemporalReferences_DelayedElement;
- size_t TemporalReferences_Min;
- size_t TemporalReferences_Max;
- size_t TemporalReferences_Reserved;
- size_t TemporalReferences_Offset;
- size_t TemporalReferences_Offset_pic_order_cnt_lsb_Last;
- int64s TemporalReferences_pic_order_cnt_Min;
-
- //Text
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- File__Analyze* GA94_03_Parser;
- bool GA94_03_IsPresent;
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-
- //Replacement of File__Analyze buffer
- const int8u* Buffer_ToSave;
- size_t Buffer_Size_ToSave;
-
- //parameter_sets
- seq_parameter_set_structs seq_parameter_sets;
- seq_parameter_set_structs subset_seq_parameter_sets;
- pic_parameter_set_structs pic_parameter_sets;
-
- //File specific
- int8u SizeOfNALU_Minus1;
-
- //Status
- size_t IFrame_Count;
- int32s prevPicOrderCntMsb;
- int32u prevPicOrderCntLsb;
- int32u prevTopFieldOrderCnt;
- int32u prevFrameNum;
- int32u prevFrameNumOffset;
- vector<int8u> prevMemoryManagementControlOperations;
-
- //Count of a Packets
- size_t Block_Count;
- size_t Interlaced_Top;
- size_t Interlaced_Bottom;
- size_t Structure_Field;
- size_t Structure_Frame;
-
- //Temp
- Ztring Encoded_Library;
- Ztring Encoded_Library_Name;
- Ztring Encoded_Library_Version;
- Ztring Encoded_Library_Date;
- Ztring Encoded_Library_Settings;
- Ztring BitRate_Nominal;
- Ztring MuxingMode;
- string PictureTypes_PreviousFrames;
- int64u tc;
- int32u Firstpic_order_cnt_lsbInBlock;
- int8u nal_ref_idc;
- int8u FrameRate_Divider;
- bool FirstPFrameInGop_IsParsed;
-
- //Helpers
- string GOP_Detect (string PictureTypes);
- string ScanOrder_Detect (string ScanOrders);
-
- #if MEDIAINFO_DUPLICATE
- bool File__Duplicate_Set (const Ztring &Value); //Fill a new File__Duplicate value
- void File__Duplicate_Write (int64u Element_Code, int32u frame_num=(int32u)-1);
- File__Duplicate__Writer Writer;
- int8u Duplicate_Buffer[1024*1024];
- size_t Duplicate_Buffer_Size;
- size_t frame_num_Old;
- bool SPS_PPS_AlreadyDone;
- bool FLV;
- #endif //MEDIAINFO_DUPLICATE
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc_Duplicate.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc_Duplicate.cpp
deleted file mode 100644
index da39b510b..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Avc_Duplicate.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Duplication helper for some specific formats
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AVC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Avc.h"
-#include "MediaInfo/MediaInfo_Config.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/ZtringList.h"
-#include "ZenLib/File.h"
-#include <cstring>
-using namespace ZenLib;
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Options
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Avc::Option_Manage()
-{
- #if MEDIAINFO_DUPLICATE
- //File__Duplicate configuration
- if (File__Duplicate_HasChanged())
- {
- //Autorisation of other streams
- Streams[0x07].ShouldDuplicate=true;
- }
- #endif //MEDIAINFO_DUPLICATE
-}
-
-//***************************************************************************
-// Set
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DUPLICATE
-bool File_Avc::File__Duplicate_Set (const Ztring &Value)
-{
- ZtringList List(Value);
-
- //Searching Target
- bool IsForUs=false;
- std::vector<ZtringList::iterator> Targets_ToAdd;
- std::vector<ZtringList::iterator> Targets_ToRemove;
- std::vector<ZtringList::iterator> Orders_ToAdd;
- std::vector<ZtringList::iterator> Orders_ToRemove;
- for (ZtringList::iterator Current=List.begin(); Current<List.end(); ++Current)
- {
- //Detecting if we want to remove
- bool ToRemove=false;
- if (Current->find(__T('-'))==0)
- {
- ToRemove=true;
- Current->erase(Current->begin());
- }
-
- //Managing targets
- if (Current->find(__T("file:"))==0
- || Current->find(__T("memory:"))==0)
- (ToRemove?Targets_ToRemove:Targets_ToAdd).push_back(Current);
- //Parser name
- else if (Current->find(__T("parser=Avc"))==0)
- IsForUs=true;
- //Managing orders
- else
- (ToRemove?Orders_ToRemove:Orders_ToAdd).push_back(Current);
- }
-
- //For us?
- if (!IsForUs)
- return false;
-
- //Configuration of initial values
- frame_num_Old=(int32u)-1;
- Duplicate_Buffer_Size=0;
- SPS_PPS_AlreadyDone=false;
- FLV=false;
-
- //For each target to add
- for (std::vector<ZtringList::iterator>::iterator Target=Targets_ToAdd.begin(); Target<Targets_ToAdd.end(); ++Target)
- Writer.Configure(**Target);
-
- //For each order to add
- for (std::vector<ZtringList::iterator>::iterator Order=Orders_ToAdd.begin(); Order<Orders_ToAdd.end(); ++Order)
- if ((**Order)==__T("format=Flv"))
- FLV=true;
-
- return true;
-}
-#endif //MEDIAINFO_DUPLICATE
-
-//***************************************************************************
-// Write
-//***************************************************************************
-
-#if MEDIAINFO_DUPLICATE
-void File_Avc::File__Duplicate_Write (int64u Element_Code, int32u frame_num)
-{
- const int8u* ToAdd=Buffer+Buffer_Offset-(size_t)Header_Size+3;
- size_t ToAdd_Size=(size_t)(Element_Size+Header_Size-3);
-
- if (!SPS_PPS_AlreadyDone)
- {
- if (Element_Code==7)
- {
- std::memcpy(Duplicate_Buffer, ToAdd, ToAdd_Size);
- Duplicate_Buffer_Size=ToAdd_Size;
-
- }
- else if (Element_Code==8)
- {
-
- // Form:
- // 8 bytes : PTS
- // 8 bytes : DTS
- // 8 bytes : Size (without header)
- // 1 byte : Type (0=Frame, 1=Header);
- // 7 bytes : Reserved
- size_t Extra;
- if (FLV)
- Extra=1; //FLV
- else
- Extra=0; //MPEG-4
- int8u Header[32];
- int64u2BigEndian(Header+ 0, FrameInfo.PTS);
- int64u2BigEndian(Header+ 8, FrameInfo.DTS);
- int64u2BigEndian(Header+16, 5+Extra+2+Duplicate_Buffer_Size+1+2+ToAdd_Size); //5+Extra for SPS_SQS header, 2 for SPS size, 1 for PPS count, 2 for PPS size
- Header[24]=1;
- int56u2BigEndian(Header+25, 0);
- Writer.Write(Header, 32);
-
- //SPS_PPS
- int8u* SPS_SQS=new int8u[5+Extra];
- if (Extra==1)
- {
- SPS_SQS[0]=0x01; //Profile FLV
- SPS_SQS[1]=(!seq_parameter_sets.empty() && seq_parameter_sets[0])?seq_parameter_sets[0]->profile_idc:0x00; //Compatible Profile. TODO: Handling more than 1 seq_parameter_set
- SPS_SQS[2]=0x00; //Reserved
- }
- else
- {
- SPS_SQS[0]=(!seq_parameter_sets.empty() && seq_parameter_sets[0])?seq_parameter_sets[0]->profile_idc:0x00; //Profile MPEG-4. TODO: Handling more than 1 seq_parameter_set
- SPS_SQS[1]=0x00; //Compatible Profile
- }
- SPS_SQS[2+Extra]=(!seq_parameter_sets.empty() && seq_parameter_sets[0])?seq_parameter_sets[0]->level_idc:0x00; //Level. TODO: Handling more than 1 seq_parameter_set
- SPS_SQS[3+Extra]=0xFF; //Reserved + Size of NALU length minus 1
- SPS_SQS[4+Extra]=0xE1; //Reserved + seq_parameter_set count
- Writer.Write(SPS_SQS, 5+Extra);
-
- //NALU
- int8u NALU[2];
- NALU[0]=((Duplicate_Buffer_Size)>> 8)&0xFF;
- NALU[1]=((Duplicate_Buffer_Size)>> 0)&0xFF;
- Writer.Write(NALU, 2);
-
- //SPS
- Writer.Write(Duplicate_Buffer, Duplicate_Buffer_Size);
- Duplicate_Buffer_Size=0;
-
- //PPS count
- SPS_SQS[0]=0x01; //pic_parameter_set count
- Writer.Write(SPS_SQS, 1);
- delete[] SPS_SQS;
-
- //NALU
- NALU[0]=((ToAdd_Size)>> 8)&0xFF;
- NALU[1]=((ToAdd_Size)>> 0)&0xFF;
- Writer.Write(NALU, 2);
-
- //PPS
- Writer.Write(ToAdd, ToAdd_Size);
-
- SPS_PPS_AlreadyDone=true;
- }
- }
- else if (frame_num!=(int32u)-1)
- {
- if (frame_num!=frame_num_Old && frame_num_Old!=(int32u)-1 && frame_num!=(int32u)-1)
- {
- // Form:
- // 8 bytes : PTS
- // 8 bytes : DTS
- // 8 bytes : Size (without header)
- // 1 byte : Type (0=Frame, 1=Header);
- // 7 bytes : Reserved
- int8u Header[32];
- int64u2BigEndian(Header+ 0, FrameInfo.PTS);
- int64u2BigEndian(Header+ 8, FrameInfo.DTS);
- int64u2BigEndian(Header+16, Duplicate_Buffer_Size);
- Header[24]=0;
- int56u2BigEndian(Header+25, 0);
- Writer.Write(Header, 32);
-
- Writer.Write(Duplicate_Buffer, Duplicate_Buffer_Size);
- Duplicate_Buffer_Size=0;
- }
-
-
- //NALU
- int32u2BigEndian(Duplicate_Buffer+Duplicate_Buffer_Size, (int32u)ToAdd_Size); //4 bytes for NALU header
- Duplicate_Buffer_Size+=4;
-
- //Frame (partial)
- std::memcpy(Duplicate_Buffer+Duplicate_Buffer_Size, ToAdd, ToAdd_Size);
- Duplicate_Buffer_Size+=ToAdd_Size;
- frame_num_Old=frame_num;
- }
-}
-#endif //MEDIAINFO_DUPLICATE
-
-//***************************************************************************
-// Output_Buffer
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DUPLICATE
-size_t File_Avc::Output_Buffer_Get (const String &)
-{
- return Writer.Output_Buffer_Get();
-}
-#endif //MEDIAINFO_DUPLICATE
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DUPLICATE
-size_t File_Avc::Output_Buffer_Get (size_t)
-{
- return Writer.Output_Buffer_Get();
-}
-#endif //MEDIAINFO_DUPLICATE
-
-} //NameSpace
-
-#endif //MEDIAINFO_AVC_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_AvsV.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_AvsV.cpp
deleted file mode 100644
index 3178f9ff0..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_AvsV.cpp
+++ /dev/null
@@ -1,827 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_AVSV_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_AvsV.h"
-#undef FILLING_BEGIN
-#define FILLING_BEGIN() \
- while (Element_Offset<Element_Size && Buffer[Buffer_Offset+(size_t)Element_Offset]==0x00) \
- Element_Offset++; \
- if (Element_Offset!=Element_Size) \
- Trusted_IsNot("Size error"); \
- else if (Element_IsOK()) \
- {
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring AvsV_profile(int8u profile_id)
-{
- switch (profile_id)
- {
- case 0x20 : return "Base";
- default :
- return Ztring::ToZtring(profile_id);
- }
-}
-
-//---------------------------------------------------------------------------
-Ztring AvsV_level(int8u level_id)
-{
- switch (level_id)
- {
- case 0x00 : return Ztring();
- case 0x10 : return "@2.0";
- case 0x20 : return "@4.0";
- case 0x22 : return "@4.2";
- case 0x40 : return "@6.0";
- case 0x42 : return "@6.2";
- default :
- return __T('@')+Ztring::ToZtring(level_id);
- }
-}
-
-//---------------------------------------------------------------------------
-const float32 AvsV_frame_rate[]=
-{
- (float32)0,
- ((float32)24000)/1001,
- (float32)24,
- (float32)25,
- ((float32)30000)/1001,
- (float32)30,
- (float32)50,
- ((float32)60000)/1001,
- (float32)60,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
-};
-
-//---------------------------------------------------------------------------
-const char* AvsV_chroma_format[]=
-{
- "",
- "4:2:0",
- "4:2:2",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* AvsV_extension_start_code_identifier[]=
-{
- "",
- "",
- "sequence_display",
- "",
- "copyright",
- "",
- "",
- "picture_display",
- "",
- "",
- "",
- "camera_parameters",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* AvsV_video_format[]=
-{
- "Component",
- "PAL",
- "NTSC",
- "SECAM",
- "MAC",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const float32 AvsV_aspect_ratio[]=
-{
- (float32)0,
- (float32)1,
- (float32)4/(float32)3,
- (float32)16/(float32)9,
- (float32)2.21,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
-};
-
-//---------------------------------------------------------------------------
-const char* AvsV_picture_coding_type[]=
-{
- "",
- "P",
- "B",
- "",
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_AvsV::File_AvsV()
-:File__Analyze()
-{
- //Config
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
-
- //In
- Frame_Count_Valid=30;
- FrameIsAlwaysComplete=false;
-
- //Temp
- video_sequence_start_IsParsed=false;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_AvsV::Streams_Fill()
-{
- //Filling
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "AVS Video");
- Fill(Stream_Video, 0, Video_Codec, "AVS Video");
-
- //From sequence header
- Fill(Stream_Video, 0, Video_Format_Profile, AvsV_profile(profile_id)+AvsV_level(level_id));
- Fill(Stream_Video, 0, Video_Codec_Profile, AvsV_profile(profile_id)+AvsV_level(level_id));
- Fill(Stream_Video, StreamPos_Last, Video_Width, horizontal_size);
- Fill(Stream_Video, StreamPos_Last, Video_Height, vertical_size);
- Fill(Stream_Video, 0, Video_FrameRate, AvsV_frame_rate[frame_rate_code]/(progressive_sequence?1:2));
- if (aspect_ratio==0)
- ;//Forbidden
- else if (aspect_ratio==1)
- Fill(Stream_Video, 0, Video_PixelAspectRatio, 1.000, 3, true);
- else if (display_horizontal_size && display_vertical_size)
- {
- if (vertical_size && AvsV_aspect_ratio[aspect_ratio])
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, (float)horizontal_size/vertical_size
- *AvsV_aspect_ratio[aspect_ratio]/((float)display_horizontal_size/display_vertical_size), 3, true);
- }
- else if (AvsV_aspect_ratio[aspect_ratio])
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, AvsV_aspect_ratio[aspect_ratio], 3, true);
- Fill(Stream_Video, 0, Video_Colorimetry, AvsV_chroma_format[chroma_format]);
- if (progressive_frame_Count && progressive_frame_Count!=Frame_Count)
- {
- //This is mixed
- }
- else if (Frame_Count>0) //Only if we have at least one progressive_frame definition
- {
- if (progressive_sequence || progressive_frame_Count==Frame_Count)
- {
- Fill(Stream_Video, 0, Video_ScanType, "Progressive");
- Fill(Stream_Video, 0, Video_Interlacement, "PPF");
- }
- else
- {
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- if ((Interlaced_Top && Interlaced_Bottom) || (!Interlaced_Top && !Interlaced_Bottom))
- Fill(Stream_Video, 0, Video_Interlacement, "Interlaced");
- else
- {
- Fill(Stream_Video, 0, Video_ScanOrder, Interlaced_Top?"TFF":"BFF");
- Fill(Stream_Video, 0, Video_Interlacement, Interlaced_Top?"TFF":"BFF");
- }
- }
- }
- Fill(Stream_Video, 0, Video_BitRate_Nominal, bit_rate*8);
-
- //From extensions
- Fill(Stream_Video, 0, Video_Standard, AvsV_video_format[video_format]);
-
- //Library name
- if (!Library.empty())
- {
- Fill(Stream_Video, 0, Video_Encoded_Library, Library);
- Fill(Stream_Video, 0, Video_Encoded_Library_Name, Library_Name);
- Fill(Stream_Video, 0, Video_Encoded_Library_Version, Library_Version);
- Fill(Stream_Video, 0, Video_Encoded_Library_Date, Library_Date);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_AvsV::Streams_Finish()
-{
- //Purge what is not needed anymore
- if (!File_Name.empty()) //Only if this is not a buffer, with buffer we can have more data
- Streams.clear();
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_AvsV::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (CC3(Buffer+Buffer_Offset)!=0x000001)
- Synched=false;
-
- //Quick search
- if (Synched && !Header_Parser_QuickSearch())
- return false;
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_AvsV::Synched_Init()
-{
- //Count of a Packets
- progressive_frame_Count=0;
- Interlaced_Top=0;
- Interlaced_Bottom=0;
-
- //Temp
- bit_rate=0;
- horizontal_size=0;
- vertical_size=0;
- display_horizontal_size=0;
- display_vertical_size=0;
- profile_id=0;
- level_id=0;
- chroma_format=0;
- aspect_ratio=0;
- frame_rate_code=0;
- video_format=5; //Unspecified video format
- progressive_sequence=false;
- low_delay=false;
-
- //Default stream values
- Streams.resize(0x100);
- Streams[0xB0].Searching_Payload=true; //video_sequence_start
- for (int8u Pos=0xFF; Pos>=0xB9; Pos--)
- Streams[Pos].Searching_Payload=true; //Testing MPEG-PS
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_AvsV::Header_Parse()
-{
- //Parsing
- int8u start_code;
- Skip_B3( "synchro");
- Get_B1 (start_code, "start_code");
- if (!Header_Parser_Fill_Size())
- {
- Element_WaitForMoreData();
- return;
- }
-
- //Filling
- Header_Fill_Code(start_code, Ztring().From_CC1(start_code));
-}
-
-//---------------------------------------------------------------------------
-bool File_AvsV::Header_Parser_QuickSearch()
-{
- while ( Buffer_Offset+4<=Buffer_Size
- && Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x01)
- {
- //Getting start_code
- int8u start_code=Buffer[Buffer_Offset+3];
-
- //Searching start or timestamp
- if (Streams[start_code].Searching_Payload)
- return true;
-
- //Synchronizing
- Buffer_Offset+=4;
- Synched=false;
- if (!Synchronize_0x000001())
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
- }
-
- if (Buffer_Offset+3==Buffer_Size)
- return false; //Sync is OK, but start_code is not available
- Trusted_IsNot("AVS Video, Synchronisation lost");
- return Synchronize();
-}
-
-//---------------------------------------------------------------------------
-bool File_AvsV::Header_Parser_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset+4;
- while (Buffer_Offset_Temp+4<=Buffer_Size
- && CC3(Buffer+Buffer_Offset_Temp)!=0x000001)
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer_Offset_Temp>=Buffer_Size || Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
- }
-
- //Must wait more data?
- if (Buffer_Offset_Temp+4>Buffer_Size)
- {
- if (FrameIsAlwaysComplete || File_Offset+Buffer_Size==File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_AvsV::Data_Parse()
-{
- //Parsing
- switch (Element_Code)
- {
- case 0xB0: video_sequence_start(); break;
- case 0xB1: video_sequence_end(); break;
- case 0xB2: user_data_start(); break;
- case 0xB5: extension_start(); break;
- case 0xB3:
- case 0xB6: picture_start(); break;
- case 0xB7: video_edit(); break;
- case 0xB4:
- case 0xB8: reserved(); break;
- default:
- if (Element_Code<=0xAF)
- slice();
- else
- {
- if (Frame_Count==0 && Buffer_TotalBytes>Buffer_TotalBytes_FirstSynched_Max)
- Trusted=0;
- Trusted_IsNot("Unattended element");
-
- }
- }
-
- if (File_Offset+Buffer_Offset+Element_Size==File_Size && Frame_Count>0 && Count_Get(Stream_Video)==0) //Finalize frames in case of there are less than Frame_Count_Valid frames
- {
- //No need of more
- Accept("AVS Video");
- Finish("AVS Video");
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Packet "00" to "AF"
-void File_AvsV::slice()
-{
- Element_Name("Slice");
-
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Test();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B0"
-void File_AvsV::video_sequence_start()
-{
- Element_Name("video_sequence_start");
-
- //Parsing
- int32u bit_rate_upper, bit_rate_lower;
- Get_B1 ( profile_id, "profile_id");
- Get_B1 ( level_id, "level_id");
- BS_Begin();
- Get_SB ( progressive_sequence, "progressive_sequence");
- Get_S2 (14, horizontal_size, "horizontal_size");
- Get_S2 (14, vertical_size, "vertical_size");
- Get_S1 ( 2, chroma_format, "chroma_format");
- Skip_S1( 3, "sample_precision");
- Get_S1 ( 4, aspect_ratio, "aspect_ratio"); Param_Info1(AvsV_aspect_ratio[aspect_ratio]);
- Get_S1 ( 4, frame_rate_code, "frame_rate_code"); Param_Info1(AvsV_frame_rate[frame_rate_code]);
- Get_S3 (18, bit_rate_lower, "bit_rate_lower");
- Mark_1 ();
- Get_S3 (12, bit_rate_upper, "bit_rate_upper");
- bit_rate=(bit_rate_upper<<18)+bit_rate_lower; Param_Info2(bit_rate*8, " bps");
- Get_SB ( low_delay, "low_delay");
- Mark_1 ();
- Skip_S3(18, "bbv_buffer_size");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- BS_End();
-
- //Not sure, but the 3 first official files have this
- if (Element_Size-Element_Offset)
- {
- BS_Begin();
- Mark_1();
- BS_End();
- }
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Clear();
- NextCode_Add(0xB2); //user_data_start
- NextCode_Add(0xB3); //picture_start (I)
- NextCode_Add(0xB5); //extension_start
-
- //Autorisation of other streams
- Streams[0xB1].Searching_Payload=true, //video_sequence_end
- Streams[0xB2].Searching_Payload=true; //user_data_start
- Streams[0xB3].Searching_Payload=true, //picture_start (I)
- Streams[0xB4].Searching_Payload=true, //reserved
- Streams[0xB5].Searching_Payload=true; //extension_start
- Streams[0xB6].Searching_Payload=true, //picture_start (P or B)
- Streams[0xB7].Searching_Payload=true; //video_edit
- Streams[0xB8].Searching_Payload=true, //reserved
-
- video_sequence_start_IsParsed=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B1"
-void File_AvsV::video_sequence_end()
-{
- Element_Name("video_sequence_start");
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Clear();
- NextCode_Add(0xB0); //SeqenceHeader
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B2", User defined size, this is often used of library name
-void File_AvsV::user_data_start()
-{
- Element_Name("user_data_start");
-
- //Rejecting junk from the end
- size_t Library_End_Offset=(size_t)Element_Size;
- while (Library_End_Offset>0
- && (Buffer[Buffer_Offset+Library_End_Offset-1]<0x20
- || Buffer[Buffer_Offset+Library_End_Offset-1]>0x7D
- || (Buffer[Buffer_Offset+Library_End_Offset-1]>=0x3A
- && Buffer[Buffer_Offset+Library_End_Offset-1]<=0x40)))
- Library_End_Offset--;
- if (Library_End_Offset==0)
- return; //No good info
-
- //Accepting good data after junk
- size_t Library_Start_Offset=Library_End_Offset-1;
- while (Library_Start_Offset>0 && (Buffer[Buffer_Offset+Library_Start_Offset-1]>=0x20 && Buffer[Buffer_Offset+Library_Start_Offset-1]<=0x7D))
- Library_Start_Offset--;
-
- //But don't accept non-alpha caracters at the beginning (except for "3ivx")
- if (Library_End_Offset-Library_Start_Offset!=4 || CC4(Buffer+Buffer_Offset+Library_Start_Offset)!=0x33697678) //3ivx
- while (Library_Start_Offset<Element_Size && Buffer[Buffer_Offset+Library_Start_Offset]<=0x40)
- Library_Start_Offset++;
-
- //Parsing
- Ztring Temp;
- if (Library_Start_Offset>0)
- Skip_XX(Library_Start_Offset, "junk");
- if (Library_End_Offset-Library_Start_Offset)
- Get_Local(Library_End_Offset-Library_Start_Offset, Temp,"data");
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "junk");
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Test();
-
- if (Temp.size()>=4)
- Library=Temp;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B5"
-void File_AvsV::extension_start()
-{
- Element_Name("Extension");
-
- //Parsing
- int8u extension_start_code_identifier;
- BS_Begin();
- Get_S1 ( 4, extension_start_code_identifier, "extension_start_code_identifier"); Param_Info1(AvsV_extension_start_code_identifier[extension_start_code_identifier]);
- Element_Info1(AvsV_extension_start_code_identifier[extension_start_code_identifier]);
-
- switch (extension_start_code_identifier)
- {
- case 2 : //sequence_display
- {
- //Parsing
- Get_S1 ( 3, video_format, "video_format"); Param_Info1(AvsV_video_format[video_format]);
- Skip_SB( "sample_range");
- TEST_SB_SKIP( "colour_description");
- Skip_S1( 8, "colour_primaries");
- Skip_S1( 8, "transfer_characteristics");
- Skip_S1( 8, "matrix_coefficients");
- TEST_SB_END();
- Get_S2 (14, display_horizontal_size, "display_horizontal_size");
- Mark_1 ();
- Get_S2 (14, display_vertical_size, "display_vertical_size");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- BS_End();
- }
- break;
- case 4 : //copyright
- {
- //Parsing
- Skip_SB( "copyright_flag");
- Skip_S1( 8, "copyright_id");
- Skip_SB( "original_or_copy");
- Skip_S1( 7, "reserved");
- Mark_1 ();
- Info_S3(20, copyright_number_1, "copyright_number_1");
- Mark_1 ();
- Info_S3(22, copyright_number_2, "copyright_number_2");
- Mark_1 ();
- Info_S3(22, copyright_number_3, "copyright_number_3"); Param_Info1(Ztring::ToZtring(((int64u)copyright_number_1<<44)+((int64u)copyright_number_2<<22)+(int64u)copyright_number_3, 16));
- BS_End();
- }
- break;
- case 11 : //camera_parameters
- {
- //Parsing
- Skip_SB( "reserved");
- Skip_S1( 7, "camera_id");
- Mark_1 ();
- Skip_S3(22, "height_of_image_device");
- Mark_1 ();
- Skip_S3(22, "focal_length");
- Mark_1 ();
- Skip_S3(22, "f_number");
- Mark_1 ();
- Skip_S3(22, "vertical_angle_of_view");
- Mark_1 ();
- Skip_S3(16, "camera_position_x_upper");
- Mark_1 ();
- Skip_S3(16, "camera_position_x_lower");
- Mark_1 ();
- Skip_S3(16, "camera_position_y_upper");
- Mark_1 ();
- Skip_S3(16, "camera_position_y_lower");
- Mark_1 ();
- Skip_S3(16, "camera_position_z_upper");
- Mark_1 ();
- Skip_S3(16, "camera_position_z_lower");
- Mark_1 ();
- Skip_S3(22, "camera_direction_x");
- Mark_1 ();
- Skip_S3(22, "camera_direction_y");
- Mark_1 ();
- Skip_S3(22, "camera_direction_z");
- Mark_1 ();
- Skip_S3(22, "camera_plane_vertical_x");
- Mark_1 ();
- Skip_S3(22, "camera_plane_vertical_y");
- Mark_1 ();
- Skip_S3(22, "camera_plane_vertical_z");
- Mark_1 ();
- Skip_S4(32, "reserved");
- BS_End();
- }
- break;
- default :
- {
- //Parsing
- Skip_S1(4, "data");
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "data");
- }
- }
-
- //Not sure, but the 3 first official files have this
- if (Element_Size-Element_Offset)
- {
- BS_Begin();
- Mark_1();
- BS_End();
- }
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Test();
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B3" or "B6"
-void File_AvsV::picture_start()
-{
- //Counting
- if (File_Offset+Buffer_Offset+Element_Size==File_Size)
- Frame_Count_Valid=Frame_Count; //Finalize frames in case of there are less than Frame_Count_Valid frames
- Frame_Count++;
-
- //Name
- Element_Name("picture_start");
- Element_Info1(Ztring::ToZtring(Frame_Count));
- Element_Info1C((Element_Code==0xB3), __T("I"));
-
- //Parsing
- int8u picture_coding_type=(int8u)-1;
- bool time_code_flag, progressive_frame, picture_structure=true, top_field_first, repeat_first_field, skip_mode_flag=false, loop_filter_disable;
- Skip_B2( "bbv_delay");
- BS_Begin();
- if (Element_Code==0xB3) //Only I
- {
- Get_SB ( time_code_flag, "time_code_flag");
- if (time_code_flag)
- {
- Skip_SB( "time_code_dropframe");
- Skip_S1(5, "time_code_hours");
- Skip_S1(6, "time_code_minutes");
- Skip_S1(6, "time_code_seconds");
- Skip_S1(6, "time_code_pictures");
- }
- }
- if (Element_Code==0xB6) //Only P or B
- {
- Get_S1 ( 2, picture_coding_type, "picture_coding_type"); Element_Info1(AvsV_picture_coding_type[picture_coding_type]);
- }
- Skip_S1( 8, "picture_distance");
- if (low_delay)
- Skip_UE( "bbv_check_times");
- Get_SB ( progressive_frame, "progressive_frame");
- if (!progressive_frame)
- {
- Get_SB( picture_structure, "picture_structure");
- if (Element_Code==0xB6) //Only P or B
- {
- if (picture_structure)
- Skip_SB( "advanced_pred_mode_disable");
- }
- }
- Get_SB ( top_field_first, "top_field_first");
- Get_SB ( repeat_first_field, "repeat_first_field");
- Skip_SB( "fixed_picture_qp");
- Skip_S1( 6, "picture_qp");
- if (Element_Code==0xB3) //Only I
- {
- if (!progressive_frame && !picture_structure)
- Get_SB( skip_mode_flag, "skip_mode_flag");
- }
- if (Element_Code==0xB6) //Only P or B
- {
- if (picture_coding_type!=2 || !picture_structure)
- Skip_SB( "picture_reference_flag");
- }
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- Skip_SB( "reserved");
- if (Element_Code==0xB6) //Only P or B
- {
- Get_SB( skip_mode_flag, "skip_mode_flag");
- }
- Get_SB ( loop_filter_disable, "loop_filter_disable");
- if (!loop_filter_disable)
- {
- bool loop_filter_parameter_flag;
- Get_SB ( loop_filter_parameter_flag, "loop_filter_parameter_flag");
- if (loop_filter_parameter_flag)
- {
- Skip_SE( "alpha_c_offset");
- Skip_SE( "beta_offset");
- }
- }
- BS_End();
-
- if (Element_Size-Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Unknown");
-
- FILLING_BEGIN();
- if (progressive_frame==false)
- {
- if (picture_structure==true) //Frame
- {
- if (top_field_first)
- Interlaced_Top++;
- else
- Interlaced_Bottom++;
- }
- }
- else
- progressive_frame_Count++;
-
- //NextCode
- NextCode_Test();
- NextCode_Clear();
- for (int8u Pos=0x00; Pos<=0xAF; Pos++)
- NextCode_Add(Pos); //slice
- NextCode_Add(0xB0); //video_sequence_start
- NextCode_Add(0xB3); //picture_start
- NextCode_Add(0xB6); //picture_start
-
- //Autorisation of other streams
- for (int8u Pos=0x00; Pos<=0xAF; Pos++)
- Streams[Pos].Searching_Payload=true; //slice
-
- //Filling only if not already done
- if (Frame_Count>=Frame_Count_Valid && Count_Get(Stream_Video)==0)
- {
- //No need of more
- Accept("AVS Video");
- Finish("AVS Video");
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B7"
-void File_AvsV::video_edit()
-{
- Element_Name("video_edit");
-}
-
-//---------------------------------------------------------------------------
-// Packet "B4" and "B8"
-void File_AvsV::reserved()
-{
- Element_Name("reserved");
-
- //Parsing
- if (Element_Size)
- Skip_XX(Element_Size, "reserved");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_AVSV_*
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_AvsV.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_AvsV.h
deleted file mode 100644
index 985ff5d7d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_AvsV.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about AVS Video files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_AvsVH
-#define MediaInfo_AvsVH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/Multiple/File_Mpeg4.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Avs
-//***************************************************************************
-
-class File_AvsV : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool FrameIsAlwaysComplete;
-
- //constructor/Destructor
- File_AvsV();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin() {return FileHeader_Begin_0x000001();}
-
- //Buffer - Synchro
- bool Synchronize() {return Synchronize_0x000001();}
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parser_QuickSearch();
- bool Header_Parser_Fill_Size();
- void Data_Parse();
-
- //Elements
- void slice();
- void video_sequence_start();
- void video_sequence_end();
- void user_data_start();
- void extension_start();
- void picture_start();
- void video_edit();
- void reserved();
-
- //Count of a Packets
- size_t progressive_frame_Count;
- size_t Interlaced_Top;
- size_t Interlaced_Bottom;
-
- //From user_data
- Ztring Library;
- Ztring Library_Name;
- Ztring Library_Version;
- Ztring Library_Date;
-
- //Temp
- int32u bit_rate; //From video_sequence_start
- int16u horizontal_size; //From video_sequence_start
- int16u vertical_size; //From video_sequence_start
- int16u display_horizontal_size; //From sequence_display
- int16u display_vertical_size; //From sequence_display
- int8u profile_id; //From video_sequence_start
- int8u level_id; //From video_sequence_start
- int8u chroma_format; //From video_sequence_start
- int8u aspect_ratio; //From video_sequence_start
- int8u frame_rate_code; //From video_sequence_start
- int8u video_format; //From sequence_display
- bool progressive_sequence; //From video_sequence_start
- bool low_delay; //From video_sequence_start
- bool video_sequence_start_IsParsed; //From video_sequence_start
-
- //Streams
- struct stream
- {
- bool Searching_Payload;
-
- stream()
- {
- Searching_Payload=false;
- }
- };
- std::vector<stream> Streams;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Canopus.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Canopus.cpp
deleted file mode 100644
index c35a74696..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Canopus.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_CANOPUS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Canopus.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Canopus::File_Canopus()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("Canopus");
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Canopus::Streams_Fill()
-{
- Stream_Prepare(Stream_Video);
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Canopus::Read_Buffer_Continue()
-{
- //Parsing
- int32u PAR_X=0, PAR_Y=0, FieldOrder=(int32u)-1;
- while (Element_Offset<Element_Size)
- {
- Element_Begin0();
- int32u FourCC;
- Get_C4 (FourCC, "FourCC");
- switch (FourCC)
- {
- case 0x494E464F : // "INFO"
- {
- Element_Name("Information");
- int32u Info_Size;
- Get_L4 (Info_Size, "Size");
- int64u Info_End=Element_Offset+Info_Size;
- if (Info_Size<16 || Info_End>Element_Size)
- {
- Skip_XX(Element_Size-Element_Offset, "Problem");
- Element_End0();
- return;
- }
- Skip_L4( "Unknown");
- Skip_L4( "Unknown");
- Get_L4 (PAR_X, "PAR_X");
- Get_L4 (PAR_Y, "PAR_Y");
- while (Element_Offset<Info_End)
- {
- Element_Begin0();
- Get_C4 (FourCC, "FourCC");
- switch (FourCC)
- {
- case 0x4649454C : // "FIEL"
- {
- Element_Name("Field information?");
- int32u FIEL_Size;
- Get_L4 (FIEL_Size, "Size");
- int64u FIEL_End=Element_Offset+FIEL_Size;
- if (FIEL_End>Info_End)
- {
- Skip_XX(Info_End-Element_Offset, "Problem");
- break;
- }
- if (Element_Offset<FIEL_End)
- Get_L4(FieldOrder, "Field order");
- while (Element_Offset<FIEL_End)
- Skip_L4( "Unknown");
- }
- break;
- case 0x52445254 : // "RDRT"
- {
- Element_Name("RDRT?");
- int32u RDRT_Size;
- Get_L4 (RDRT_Size, "Size");
- int64u RDRT_End=Element_Offset+RDRT_Size;
- if (RDRT_End>Info_End)
- {
- Skip_XX(Info_End-Element_Offset, "Problem");
- break;
- }
- while (Element_Offset<RDRT_End)
- Skip_L4( "Unknown");
- }
- break;
- default: Element_Name("Unknown");
- Skip_XX(Info_End-Element_Offset, "Unknown");
- }
- Element_End0();
- }
- }
- break;
- case 0x55564307 : // "UVC" 7
- Element_Name("Data?");
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- break;
- default: Element_Name("Unknown");
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
- Element_End0();
- }
-
- FILLING_BEGIN();
- if (!Status[IsAccepted])
- {
- Accept();
- Fill();
-
- //Info
- if (PAR_X && PAR_Y)
- Fill(Stream_Video, 0, Video_PixelAspectRatio, ((float32)PAR_X)/PAR_Y, 3);
- switch (FieldOrder)
- {
- case 0 :
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- Fill(Stream_Video, 0, Video_ScanOrder, "TFF");
- break;
- case 1 :
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- Fill(Stream_Video, 0, Video_ScanOrder, "BFF");
- break;
- case 2 :
- Fill(Stream_Video, 0, Video_ScanType, "Progressive");
- break;
- default : ;
- }
-
- if (Config->ParseSpeed<1.0)
- Finish();
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-
-} //NameSpace
-
-#endif //MEDIAINFO_CANOPUS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Canopus.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Canopus.h
deleted file mode 100644
index 8d352f7d1..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Canopus.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Canopus streams
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_CanopusH
-#define MediaInfo_File_CanopusH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Theora
-//***************************************************************************
-
-class File_Canopus : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Canopus();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Dirac.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Dirac.cpp
deleted file mode 100644
index 23d2df9b4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Dirac.cpp
+++ /dev/null
@@ -1,889 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_DIRAC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Dirac.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-const char* Dirac_base_video_format(intu base_video_format)
-{
- switch (base_video_format)
- {
- case 1 : return "QSIF525";
- case 2 : return "QCIF";
- case 3 : return "SIF525";
- case 4 : return "CIF";
- case 5 : return "4SIF525";
- case 6 : return "4CIF";
- case 7 : return "480i60";
- case 8 : return "576i50";
- case 9 : return "720p50";
- case 10 : return "720p60";
- case 11 : return "1080i60";
- case 12 : return "1080i50";
- case 13 : return "1080p60";
- case 14 : return "1080p60";
- case 15 : return "2K-24";
- case 16 : return "4K-24";
- case 17 : return "4K-60";
- case 18 : return "4K-50";
- case 19 : return "8K-60";
- case 20 : return "8K-50";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-float32 Dirac_frame_rate(int32u frame_rate_index)
-{
- switch (frame_rate_index)
- {
- case 0 : return (float32)0; //Reserved
- case 1 : return (float32)24000/(float32)1001;
- case 2 : return (float32)24;
- case 3 : return (float32)25;
- case 4 : return (float32)30000/(float32)1001;
- case 5 : return (float32)30;
- case 6 : return (float32)50;
- case 7 : return (float32)60000/(float32)1001;
- case 8 : return (float32)60;
- case 9 : return (float32)15000/(float32)1001;
- case 10 : return (float32)12.5;
- default : return (float32)0; //Unknown
- }
-}
-
-//---------------------------------------------------------------------------
-float32 Dirac_pixel_aspect_ratio(int32u pixel_aspect_ratio_index)
-{
- switch (pixel_aspect_ratio_index)
- {
- case 0 : return (float32)0; //Reserved
- case 1 : return (float32)1; //Reserved
- case 2 : return (float32)10/(float32)11;
- case 3 : return (float32)12/(float32)11;
- case 4 : return (float32)40/(float32)33;
- case 5 : return (float32)16/(float32)11;
- case 6 : return (float32) 4/(float32) 3;
- default : return (float32)0; //Unknown
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Dirac_picture_coding_mode(int32u picture_coding_mode)
-{
- switch (picture_coding_mode)
- {
- case 0 : return "PPF";
- case 1 : return "Interlaced";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Dirac_source_sampling(int32u source_sampling)
-{
- switch (source_sampling)
- {
- case 0 : return "Progressive";
- case 1 : return "Interlaced";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Dirac_source_sampling_Codec(int32u source_sampling)
-{
- switch (source_sampling)
- {
- case 0 : return "PPF";
- case 1 : return "Interlaced";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Dirac_chroma_format(int32u chroma_format)
-{
- switch (chroma_format)
- {
- case 0 : return "4:4:4";
- case 1 : return "4:2:2";
- case 2 : return "4:2:0";
- default: return "";
- }
-}
-
-//---------------------------------------------------------------------------
-void Dirac_base_video_format(int32u base_video_format,
- int32u &frame_width,
- int32u &frame_height,
- int32u &chroma_format,
- int32u &source_sampling,
- int32u &clean_width,
- int32u &clean_height,
- int32u &clean_left_offset,
- int32u &clean_top_offset,
- float32 &frame_rate,
- float32 &pixel_aspect_ratio)
-{
- switch (base_video_format)
- {
- case 0 : frame_width=640;
- frame_height=480;
- chroma_format=2;
- source_sampling=0;
- clean_width=640;
- clean_height=480;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(1);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 1 : frame_width=176;
- frame_height=120;
- chroma_format=2;
- source_sampling=0;
- clean_width=176;
- clean_height=144;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(9);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(2);
- return;
- case 2 : frame_width=176;
- frame_height=144;
- chroma_format=2;
- source_sampling=0;
- clean_width=176;
- clean_height=144;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(10);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(3);
- return;
- case 3 : frame_width=352;
- frame_height=240;
- chroma_format=2;
- source_sampling=0;
- clean_width=352;
- clean_height=240;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(9);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(2);
- return;
- case 4 : frame_width=352;
- frame_height=288;
- chroma_format=2;
- source_sampling=0;
- clean_width=352;
- clean_height=288;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(10);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(3);
- return;
- case 5 : frame_width=704;
- frame_height=480;
- chroma_format=2;
- source_sampling=0;
- clean_width=704;
- clean_height=480;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(9);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(2);
- return;
- case 6 : frame_width=704;
- frame_height=576;
- chroma_format=2;
- source_sampling=0;
- clean_width=704;
- clean_height=576;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(10);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(3);
- return;
- case 7 : frame_width=720;
- frame_height=480;
- chroma_format=1;
- source_sampling=1;
- clean_width=704;
- clean_height=480;
- clean_left_offset=8;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(4);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(2);
- return;
- case 8 : frame_width=720;
- frame_height=576;
- chroma_format=1;
- source_sampling=1;
- clean_width=704;
- clean_height=576;
- clean_left_offset=8;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(3);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(3);
- return;
- case 9 : frame_width=1280;
- frame_height=720;
- chroma_format=1;
- source_sampling=0;
- clean_width=1280;
- clean_height=720;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(7);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 10 : frame_width=1280;
- frame_height=720;
- chroma_format=1;
- source_sampling=0;
- clean_width=1280;
- clean_height=720;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(6);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 11 : frame_width=1920;
- frame_height=1080;
- chroma_format=1;
- source_sampling=1;
- clean_width=1920;
- clean_height=1080;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(4);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 12 : frame_width=1920;
- frame_height=1080;
- chroma_format=1;
- source_sampling=1;
- clean_width=1920;
- clean_height=1080;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(3);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 13 : frame_width=1920;
- frame_height=1080;
- chroma_format=1;
- source_sampling=0;
- clean_width=1920;
- clean_height=1080;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(7);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 14 : frame_width=1920;
- frame_height=1080;
- chroma_format=1;
- source_sampling=0;
- clean_width=1920;
- clean_height=1080;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(6);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 15 : frame_width=2048;
- frame_height=1080;
- chroma_format=0;
- source_sampling=0;
- clean_width=2048;
- clean_height=1080;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(2);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 16 : frame_width=4096;
- frame_height=2160;
- chroma_format=0;
- source_sampling=0;
- clean_width=4096;
- clean_height=2160;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(2);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 17 : frame_width=3840;
- frame_height=2160;
- chroma_format=0;
- source_sampling=0;
- clean_width=3840;
- clean_height=2160;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(7);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 18 : frame_width=3840;
- frame_height=2160;
- chroma_format=0;
- source_sampling=0;
- clean_width=3840;
- clean_height=2160;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(6);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 19 : frame_width=7680;
- frame_height=4320;
- chroma_format=0;
- source_sampling=0;
- clean_width=7680;
- clean_height=4320;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(7);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- case 20 : frame_width=7680;
- frame_height=4320;
- chroma_format=0;
- source_sampling=0;
- clean_width=7680;
- clean_height=4320;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate(6);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(1);
- return;
- default : frame_width=0;
- frame_height=0;
- chroma_format=(int32u)-1;
- source_sampling=(int32u)-1;
- clean_width=0;
- clean_height=0;
- clean_left_offset=0;
- clean_top_offset=0;
- frame_rate=Dirac_frame_rate((int32u)-1);
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio((int32u)-1);
- return;
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Dirac::File_Dirac()
-:File__Analyze()
-{
- //Configuration
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
-
- //In
- Frame_Count_Valid=1;
- Ignore_End_of_Sequence=false;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dirac::Streams_Fill()
-{
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "Dirac");
- Fill(Stream_Video, 0, Video_Codec, "Dirac");
-
- if (clean_width)
- Fill(Stream_Video, StreamPos_Last, Video_Width, clean_width);
- if (clean_height)
- Fill(Stream_Video, StreamPos_Last, Video_Height, clean_height);
- if (pixel_aspect_ratio)
- {
- Fill(Stream_Video, 0, Video_PixelAspectRatio, pixel_aspect_ratio, 3, true);
- if (clean_height!=0)
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, ((float)clean_width)/clean_height*pixel_aspect_ratio, 3, true);
- }
- if (frame_rate)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, frame_rate);
- Fill(Stream_Video, 0, Video_Colorimetry, Dirac_chroma_format(chroma_format));
- Fill(Stream_Video, 0, Video_ScanType, Dirac_source_sampling(source_sampling));
- Fill(Stream_Video, 0, Video_Interlacement, Dirac_source_sampling_Codec(source_sampling));
-}
-
-//---------------------------------------------------------------------------
-void File_Dirac::Streams_Finish()
-{
- //Purge what is not needed anymore
- if (!File_Name.empty()) //Only if this is not a buffer, with buffer we can have more data
- Streams.clear();
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Dirac::Synchronize()
-{
- //Synchronizing
- while(Buffer_Offset+4<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x42
- || Buffer[Buffer_Offset+1]!=0x42
- || Buffer[Buffer_Offset+2]!=0x43
- || Buffer[Buffer_Offset+3]!=0x44)) //"BBCD"
- {
- Buffer_Offset+=2;
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x42)
- Buffer_Offset+=2;
- if (Buffer_Offset>=Buffer_Size || Buffer[Buffer_Offset-1]==0x42)
- Buffer_Offset--;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+4>Buffer_Size)
- {
- if (Buffer_Offset+3==Buffer_Size && CC3(Buffer+Buffer_Offset)!=0x424243) //"BBC"
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && CC2(Buffer+Buffer_Offset)!=0x4242) //"BB"
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && CC1(Buffer+Buffer_Offset)!=0x42) //"B"
- Buffer_Offset++;
- return false;
- }
-
- //Synched is OK
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Dirac::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+4>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (CC4(Buffer+Buffer_Offset)!=0x42424344) //"BBCD"
- Synched=false;
-
- //Quick search
- if (Synched && !Header_Parser_QuickSearch())
- return false;
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Dirac::Synched_Init()
-{
- //Temp
- Dirac_base_video_format((int32u)-1, frame_width, frame_height, chroma_format, source_sampling,
- clean_width, clean_height, clean_left_offset, clean_top_offset,
- frame_rate, pixel_aspect_ratio);
-
- //Default stream values
- Streams.resize(0x100);
- Streams[0x00].Searching_Payload=true; //Sequence header
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Dirac::Header_Parse()
-{
- //Parsing
- int32u Next_Parse_Offset, Previous_Parse_Offset;
- int8u Parse_Code;
- Skip_C4( "Parse Info Prefix");
- Get_B1 (Parse_Code, "Parse Code");
- Get_B4 (Next_Parse_Offset, "Next Parse Offset");
- Get_B4 (Previous_Parse_Offset, "Previous Parse Offset");
-
- //Filling
- Header_Fill_Code(Parse_Code, Ztring().From_CC1(Parse_Code));
- Header_Fill_Size((Parse_Code==0x10 && Next_Parse_Offset==0)?13:Next_Parse_Offset); //Speacial case if this is the End Of Sequence
-}
-
-//---------------------------------------------------------------------------
-bool File_Dirac::Header_Parser_QuickSearch()
-{
- while ( Buffer_Offset+5<=Buffer_Size
- && Buffer[Buffer_Offset ]==0x42
- && Buffer[Buffer_Offset+1]==0x42
- && Buffer[Buffer_Offset+2]==0x43
- && Buffer[Buffer_Offset+3]==0x44) //"BBCD"
- {
- //Getting start_code
- int8u start_code=CC1(Buffer+Buffer_Offset+4);
-
- //Searching start
- if (Streams[start_code].Searching_Payload)
- return true;
-
- //Getting size
- Buffer_Offset+=BigEndian2int32u(Buffer+Buffer_Offset+5);
- }
-
- if (Buffer_Offset+4==Buffer_Size)
- return false; //Sync is OK, but start_code is not available
- if (Buffer_Offset+5<=Buffer_Size)
- Trusted_IsNot("Dirac, Synchronisation lost");
- Synched=false;
- return Synchronize();
-}
-
-//---------------------------------------------------------------------------
-void File_Dirac::Data_Parse()
-{
- //Parsing
- switch (Element_Code)
- {
- case 0x00 : Sequence_header(); break;
- case 0x10 : End_of_Sequence(); break;
- case 0x20 : Auxiliary_data(); break;
- case 0x30 : Padding_data(); break;
- case 0x0C : Intra_Reference_Picture(); break;
- case 0x08 : Intra_Non_Reference_Picture(); break;
- case 0x4C : Intra_Reference_Picture_No(); break;
- case 0x48 : Intra_Non_Reference_Picture_No(); break;
- case 0x0D : Inter_Reference_Picture_1(); break;
- case 0x0E : Inter_Reference_Picture_2(); break;
- case 0x09 : Inter_Non_Reference_Picture_1(); break;
- case 0x0A : Inter_Non_Reference_Picture_2(); break;
- case 0xCC : Reference_Picture_Low(); break;
- case 0xC8 : Intra_Non_Reference_Picture_Low(); break;
- default : Reserved();
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Packet "00"
-void File_Dirac::Sequence_header()
-{
- Element_Name("Sequence header");
-
- //Parsing
- int32u version_major, version_minor, profile, level, base_video_format;
- BS_Begin();
- Get_UI(version_major, "version major");
- Get_UI(version_minor, "version minor");
- Get_UI(profile, "profile");
- Get_UI(level, "level");
-
- if (version_major<=2)
- {
- Get_UI(base_video_format, "base video format"); //Param_Info1(Dirac_base_video_format(base_video_format));
- Dirac_base_video_format(base_video_format, frame_width, frame_height, chroma_format, source_sampling,
- clean_width, clean_height, clean_left_offset, clean_top_offset,
- frame_rate, pixel_aspect_ratio);
- TEST_SB_SKIP( "custom dimensions flag");
- Get_UI (frame_width, "frame width");
- Get_UI (frame_height, "frame height");
- TEST_SB_END();
- TEST_SB_SKIP( "custom chroma format flag");
- Get_UI (chroma_format, "chroma format"); Param_Info1(Dirac_chroma_format(chroma_format));
- TEST_SB_END();
- TEST_SB_SKIP( "custom scan format flag");
- Get_UI (source_sampling, "source sampling"); Param_Info1(Dirac_source_sampling(source_sampling));
- TEST_SB_END();
- TEST_SB_SKIP( "frame rate flag");
- int32u frame_rate_index;
- Get_UI (frame_rate_index, "index"); Param_Info1(Dirac_frame_rate(frame_rate_index));
- if (frame_rate_index==0)
- {
- int32u frame_rate_numer, frame_rate_denom;
- Get_UI (frame_rate_numer, "frame rate numer");
- Get_UI (frame_rate_denom, "frame rate denom");
- frame_rate=((float32)frame_rate_numer)/((float32)frame_rate_denom);
- }
- else
- frame_rate=Dirac_frame_rate(frame_rate_index);
- TEST_SB_END();
- TEST_SB_SKIP( "pixel aspect ratio flag");
- int32u pixel_aspect_ratio_index;
- Get_UI (pixel_aspect_ratio_index, "index"); Param_Info1(Dirac_pixel_aspect_ratio(pixel_aspect_ratio_index));
- if (pixel_aspect_ratio_index==0)
- {
- int32u pixel_aspect_ratio_numer, pixel_aspect_ratio_denom;
- Get_UI (pixel_aspect_ratio_numer, "pixel aspect ratio numer");
- Get_UI (pixel_aspect_ratio_denom, "pixel aspect ratio denom");
- pixel_aspect_ratio=((float32)pixel_aspect_ratio_numer)/((float32)pixel_aspect_ratio_denom);
- }
- else
- pixel_aspect_ratio=Dirac_pixel_aspect_ratio(pixel_aspect_ratio_index);
- TEST_SB_END();
- TESTELSE_SB_SKIP( "custom clean area flag");
- Get_UI (clean_width, "clean width");
- Get_UI (clean_height, "clean height");
- Get_UI (clean_left_offset, "clean left offset");
- Get_UI (clean_top_offset, "clean top offset");
- TESTELSE_SB_ELSE( "custom clean area flag");
- clean_width=frame_width;
- clean_height=frame_height;
- TESTELSE_SB_END();
- TEST_SB_SKIP( "custom signal range flag");
- int32u custom_signal_range_index;
- Get_UI(custom_signal_range_index, "index");
- if (custom_signal_range_index==0)
- {
- Skip_UI( "luma offset");
- Skip_UI( "luma excursion");
- Skip_UI( "chroma offset");
- Skip_UI( "chroma excursion");
- }
- TEST_SB_END();
- TEST_SB_SKIP( "custom colour spec flag");
- int32u custom_colour_spec_index;
- Get_UI(custom_colour_spec_index, "index");
- if (custom_colour_spec_index==0)
- {
- TEST_SB_SKIP( "custom colour primaries flag");
- Skip_UI( "custom colour primaries index");
- TEST_SB_END();
- TEST_SB_SKIP( "colour matrix flag");
- Skip_UI( "colour matrix index");
- TEST_SB_END();
- TEST_SB_SKIP( "custom transfer function flag");
- Skip_UI( "custom transfer function index");
- TEST_SB_END();
- }
- TEST_SB_END();
- Info_UI(picture_coding_mode, "picture coding mode"); Param_Info1(Dirac_picture_coding_mode(picture_coding_mode));
- }
- else
- {
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- }
-
- FILLING_BEGIN();
- //Autorisation of other streams
- Streams[0x10].Searching_Payload=true; //End_of_Sequence
- Streams[0x20].Searching_Payload=true; //Auxiliary_data
- Streams[0x30].Searching_Payload=true; //Padding_data
- Streams[0x0C].Searching_Payload=true; //Intra_Reference_Picture
- Streams[0x08].Searching_Payload=true; //Intra_Non_Reference_Picture
- Streams[0x4C].Searching_Payload=true; //Intra_Reference_Picture_No
- Streams[0x48].Searching_Payload=true; //Intra_Non_Reference_Picture_No
- Streams[0x0D].Searching_Payload=true; //Inter_Reference_Picture_1
- Streams[0x0E].Searching_Payload=true; //Inter_Reference_Picture_2
- Streams[0x09].Searching_Payload=true; //Inter_Non_Reference_Picture_1
- Streams[0x0A].Searching_Payload=true; //Inter_Non_Reference_Picture_2
- Streams[0xCC].Searching_Payload=true; //Reference_Picture_Low
- Streams[0xC8].Searching_Payload=true; //Intra_Non_Reference_Picture_Low
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "10"
-void File_Dirac::End_of_Sequence()
-{
- Element_Name("End of Sequence");
-
- //Parsing
- if (!Ignore_End_of_Sequence)
- {
- NextCode_Clear();
- Accept("Dirac");
- Finish("Dirac");
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet "20"
-void File_Dirac::Auxiliary_data()
-{
- Element_Name("Auxiliary data");
-
- //Parsing
- Skip_XX(Element_Size, "Auxiliary data");
-}
-
-//---------------------------------------------------------------------------
-// Packet "30"
-void File_Dirac::Padding_data()
-{
- Element_Name("Padding data");
-
- //Parsing
- Skip_XX(Element_Size, "Padding data");
-}
-
-//---------------------------------------------------------------------------
-// Packet "0C"
-void File_Dirac::Intra_Reference_Picture()
-{
- Element_Name("Intra Reference Picture");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-// Packet "08"
-void File_Dirac::Intra_Non_Reference_Picture()
-{
- Element_Name("Intra Non Reference Picture");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-// Packet "4C"
-void File_Dirac::Intra_Reference_Picture_No()
-{
- Element_Name("Intra Reference Picture (no arithmetic coding)");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-// Packet "48"
-void File_Dirac::Intra_Non_Reference_Picture_No()
-{
- Element_Name("Intra Non Reference Picture (no arithmetic coding)");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-// Packet "0D"
-void File_Dirac::Inter_Reference_Picture_1()
-{
- Element_Name("Inter Reference Picture (1 picture)");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-// Packet "0E"
-void File_Dirac::Inter_Reference_Picture_2()
-{
- Element_Name("Inter Reference Picture (2 pictures)");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-// Packet "09"
-void File_Dirac::Inter_Non_Reference_Picture_1()
-{
- Element_Name("Inter Non Reference Picture (1 picture)");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-// Packet "0A"
-void File_Dirac::Inter_Non_Reference_Picture_2()
-{
- Element_Name("Inter Non Reference Picture (2 pictures)");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-// Packet "CC"
-void File_Dirac::Reference_Picture_Low()
-{
- Element_Name("Reference Picture (low-delay)");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-// Packet "C8"
-void File_Dirac::Intra_Non_Reference_Picture_Low()
-{
- Element_Name("Intra Non Reference Picture (low-delay)");
-
- //Parsing
- picture();
-}
-
-//---------------------------------------------------------------------------
-void File_Dirac::Reserved()
-{
- Element_Name("Reserved");
-
- Skip_XX(Element_Size, "Unknown");
-}
-
-//---------------------------------------------------------------------------
-void File_Dirac::picture()
-{
- //Parsing
- Skip_XX(Element_Size, "Data");
-
- FILLING_BEGIN();
- //Counting
- if (File_Offset+Buffer_Offset+Element_Size==File_Size)
- Frame_Count_Valid=Frame_Count; //Finalize frames in case of there are less than Frame_Count_Valid frames
-
- //Name
- Element_Info1(Ztring::ToZtring(Frame_Count));
-
- //Filling only if not already done
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count>=Frame_Count_Valid && Count_Get(Stream_Video)==0)
- {
- NextCode_Clear();
- Accept("Dirac");
- Finish("Dirac");
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_DIRAC_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Dirac.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Dirac.h
deleted file mode 100644
index b3a6fe539..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Dirac.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Dirac files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_DiracH
-#define MediaInfo_File_DiracH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Dirac
-//***************************************************************************
-
-class File_Dirac : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool Ignore_End_of_Sequence;
-
- //Constructor/Destructor
- File_Dirac();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin() {return FileHeader_Begin_0x000001();}
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parser_QuickSearch();
- bool Header_Parser_Fill_Size();
- void Data_Parse();
-
- //Elements
- void Sequence_header();
- void End_of_Sequence();
- void Auxiliary_data();
- void Padding_data();
- void Intra_Reference_Picture();
- void Intra_Non_Reference_Picture();
- void Intra_Reference_Picture_No();
- void Intra_Non_Reference_Picture_No();
- void Inter_Reference_Picture_1();
- void Inter_Reference_Picture_2();
- void Inter_Non_Reference_Picture_1();
- void Inter_Non_Reference_Picture_2();
- void Reference_Picture_Low();
- void Intra_Non_Reference_Picture_Low();
- void Reserved();
- void picture();
-
- //Streams
- struct stream
- {
- bool Searching_Payload;
-
- stream()
- {
- Searching_Payload=false;
- }
- };
- std::vector<stream> Streams;
-
- //Temp
- int32u frame_width;
- int32u frame_height;
- int32u chroma_format;
- int32u source_sampling;
- int32u clean_width;
- int32u clean_height;
- int32u clean_left_offset;
- int32u clean_top_offset;
- float32 frame_rate;
- float32 pixel_aspect_ratio;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Ffv1.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Ffv1.cpp
deleted file mode 100644
index bd68d894f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Ffv1.cpp
+++ /dev/null
@@ -1,491 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// http://www.ffmpeg.org/~michael/ffv1.html
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_FFV1_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Ffv1.h"
-#include "ZenLib/BitStream.h"
-//---------------------------------------------------------------------------
-
-#include <algorithm>
-using namespace std;
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// RangeCoder
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-RangeCoder::RangeCoder (const int8u* Buffer, size_t Buffer_Size, const state_transitions default_state_transition)
-{
- //Assign buffer
- Buffer_Cur=Buffer;
- Buffer_End=Buffer+Buffer_Size;
-
- //Init
- if (Buffer_Size>=2)
- {
- Current=BigEndian2int16u(Buffer_Cur);
- Buffer_Cur+=2;
- Mask=0xFF00;
- }
- else
- {
- Current=0;
- Mask=0;
- }
-
- //Assign StateTransitions
- std::memcpy (one_state, default_state_transition, state_transitions_size);
- zero_state[0]=0;
- for (size_t i=1; i<state_transitions_size; i++)
- zero_state[i]=-one_state[state_transitions_size-i];
-}
-
-//---------------------------------------------------------------------------
-bool RangeCoder::get_rac(int8u States[])
-{
- //Here is some black magic... But it works. TODO: better understanding of the algorithm and maybe optimization
- int16u Mask2=(int16u)((((int32u)Mask) * (*States)) >> 8);
- Mask-=Mask2;
- bool Value;
- if (Current<Mask)
- {
- *States=zero_state[*States];
- Value=false;
- }
- else
- {
- Current-=Mask;
- Mask=Mask2;
- *States=one_state[*States];
- Value=true;
- }
-
- // Next byte
- if (Mask<0x100)
- {
- if (Buffer_Cur >= Buffer_End)
- {
- //Problem
- Current=0;
- Mask=0;
- return false;
- }
- Mask<<=8;
- Current<<=8;
- Current|=*Buffer_Cur;
- Buffer_Cur++;
- }
-
- return Value;
-}
-
-//---------------------------------------------------------------------------
-int8u RangeCoder::get_symbol_u(states &States)
-{
- if (get_rac(States))
- return 0;
-
- int8u e=0;
- while (get_rac((States+1+min(e, (int8u)9)))) // 1..10
- e++;
-
- int8u a=1;
- if (e)
- {
- do
- {
- --e;
- a<<=1;
- if (get_rac((States+22+min(e, (int8u)9)))) // 22..31
- ++a;
- }
- while (e);
- }
- return a;
-}
-
-//---------------------------------------------------------------------------
-int8u RangeCoder::get_symbol_s(states &States)
-{
- if (get_rac(States))
- return 0;
-
- int8u e=0;
- while (get_rac(States+1+min(e, (int8u)9))) // 1..10
- e++;
-
- int8u a=1;
- if (e)
- {
- int8u i = e;
- do
- {
- --i;
- a<<=1;
- if (get_rac((States+22+min(i, (int8u)9)))) // 22..31
- ++a;
- }
- while (i);
- }
-
- if (get_rac((States+11+min(e, (int8u)10)))) // 11..21
- return -((int8s)a);
- else
- return a;
-}
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-const char* Ffv1_coder_type(int8u coder_type)
-{
- switch (coder_type)
- {
- case 0 :
- return "Golomb Rice";
- case 1 :
- case 2 :
- return "Range Coder";
- default:
- return "";
- }
-}
-
-const string Ffv1_colorspace_type(int8u colorspace_type, bool chroma_planes, bool alpha_plane)
-{
- string ToReturn;
- switch (colorspace_type)
- {
- case 0 :
- ToReturn=chroma_planes?"YUV":"Y";
- break;
- case 1 : ToReturn="RGB"; break;
- default: return string();
- }
-
- if (alpha_plane)
- ToReturn+='A';
-
- return ToReturn;
-}
-
-const state_transitions Ffv1_default_state_transition =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57,
- 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99,100,101,102,103,
- 104,105,106,107,108,109,110,111,112,113,114,114,115,116,117,118,
- 119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,133,
- 134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,
- 150,151,152,152,153,154,155,156,157,158,159,160,161,162,163,164,
- 165,166,167,168,169,170,171,171,172,173,174,175,176,177,178,179,
- 180,181,182,183,184,185,186,187,188,189,190,190,191,192,194,194,
- 195,196,197,198,199,200,201,202,202,204,205,206,207,208,209,209,
- 210,211,212,213,215,215,216,217,218,219,220,220,222,223,224,225,
- 226,227,227,229,229,230,231,232,234,234,235,236,237,238,239,240,
- 241,242,243,244,245,246,247,248,248, 0, 0, 0, 0, 0, 0, 0,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Ffv1::File_Ffv1()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("FFV1");
- IsRawStream=true;
-
- //In
- IsOutOfBandData=false;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Streams_Accept()
-{
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "FFV1");
-}
-
-//***************************************************************************
-// RangeCoder
-//***************************************************************************
-
-#if MEDIAINFO_TRACE
-//---------------------------------------------------------------------------
-void File_Ffv1::Get_RC (states &States, bool &Info, const char* Name)
-{
- Info=RC->get_rac(States);
-
- if (Trace_Activated)
- {
- Element_Offset=RC->Buffer_Cur-Buffer;
- Param(Name, Info);
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Get_RU (states &States, int8u &Info, const char* Name)
-{
- Info=RC->get_symbol_u(States);
-
- if (Trace_Activated)
- Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Get_RS (states &States, int8s &Info, const char* Name)
-{
- Info=RC->get_symbol_s(States);
-
- if (Trace_Activated)
- Param(Name, Info);
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Skip_RC (states &States, const char* Name)
-{
- if (Trace_Activated)
- {
- int8u Info=RC->get_rac(States);
- Element_Offset=RC->Buffer_Cur-Buffer;
- Param(Name, Info);
- }
- else
- RC->get_rac(States);
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Skip_RU (states &States, const char* Name)
-{
- if (Trace_Activated)
- Param(Name, RC->get_symbol_u(States));
- else
- RC->get_symbol_u(States);
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Skip_RS (states &States, const char* Name)
-{
- if (Trace_Activated)
- Param(Name, RC->get_symbol_s(States));
- else
- RC->get_symbol_s(States);
-}
-
-#else //MEDIAINFO_TRACE
-//---------------------------------------------------------------------------
-void File_Ffv1::Get_RC_ (states &States, bool &Info)
-{
- Info=RC->get_rac(States);
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Get_RU_ (states &States, int8u &Info)
-{
- Info=RC->get_symbol_u(States);
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Get_RS_ (states &States, int8s &Info)
-{
- Info=RC->get_symbol_s(States);
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Skip_RC_ (states &States)
-{
- RC->get_rac(States);
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Skip_RU_ (states &States)
-{
- RC->get_symbol_u(States);
-}
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Skip_RS_ (states &States)
-{
- RC->get_symbol_s(States);
-}
-
-#endif //MEDIAINFO_TRACE
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ffv1::Read_Buffer_Continue()
-{
- if (Buffer_Size<2)
- {
- Reject();
- return;
- }
-
- Accept();
-
-
-
- RC = new RangeCoder(Buffer, Buffer_Size, Ffv1_default_state_transition);
- states KeyStates;
- memset(KeyStates, 128, states_size);
-
- if (!IsOutOfBandData)
- {
- bool keyframe;
- Get_RC (KeyStates, keyframe, "keyframe");
- }
-
- FrameHeader();
-
- Skip_XX(Element_Size-Element_Offset, "Other data");
-
- Frame_Count++;
- Finish();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Ffv1::FrameHeader()
-{
- //Parsing
- states States;
- memset(States, 128, states_size);
- int8u version, micro_version=0, coder_type, colorspace_type, bits_per_raw_sample=8, chroma_h_shift, chroma_v_shift, num_h_slices_minus1=0, num_v_slices_minus1=0;
- bool chroma_planes, alpha_plane;
- Get_RU (States, version, "version");
- if (( IsOutOfBandData && version<=1)
- || (!IsOutOfBandData && version> 1))
- {
- Trusted_IsNot("Invalid version in global header");
- return;
- }
- if (version>2)
- {
- RC->Buffer_End-=4;
- Get_RU (States, micro_version, "micro_version");
- }
- Get_RU (States, coder_type, "coder_type");
- if (coder_type == 2) //Range coder with custom state transition table
- {
- for (int16u i = 1; i < state_transitions_size; i++)
- {
- Info_RS(States, StateTransition, "state_transition_delta"); Param_Info1(StateTransition+RC->one_state[i]);
- }
- }
- Get_RU (States, colorspace_type, "colorspace_type");
- if (version)
- {
- Get_RU (States, bits_per_raw_sample, "bits_per_raw_sample");
- if (bits_per_raw_sample==0)
- bits_per_raw_sample=8; //I don't know the reason, 8-bit is coded 0 and 10-bit coded 10 (not 2?).
- }
- Get_RC (States, chroma_planes, "chroma_planes");
- Get_RU (States, chroma_h_shift, "log2(h_chroma_subsample)");
- Get_RU (States, chroma_v_shift, "log2(v_chroma_subsample)");
- Get_RC (States, alpha_plane, "alpha_plane");
- if (version>1)
- {
- Get_RU (States, num_h_slices_minus1, "num_h_slices_minus1");
- Get_RU (States, num_v_slices_minus1, "num_v_slices_minus1");
- IsOutOfBandData=false;
- }
-
- if (Frame_Count==0)
- {
- Ztring Version=__T("Version ")+Ztring::ToZtring(version);
- if (version>2)
- {
- Version+=__T('.');
- Version+=Ztring::ToZtring(micro_version);
- }
- Fill(Stream_Video, 0, Video_Format_Version, Version);
- Fill(Stream_Video, 0, Video_BitDepth, bits_per_raw_sample);
- Fill(Stream_Video, 0, "coder_type", Ffv1_coder_type(coder_type));
- Fill(Stream_Video, 0, Video_ColorSpace, Ffv1_colorspace_type(colorspace_type, chroma_planes, alpha_plane));
- if (colorspace_type==0 && chroma_planes)
- {
- string ChromaSubsampling;
- switch (chroma_h_shift)
- {
- case 0 :
- switch (chroma_v_shift)
- {
- case 0 : ChromaSubsampling="4:4:4"; break;
- default: ;
- }
- break;
- case 1 :
- switch (chroma_v_shift)
- {
- case 0 : ChromaSubsampling="4:2:2"; break;
- case 1 : ChromaSubsampling="4:2:0"; break;
- default: ;
- }
- break;
- case 2 :
- switch (chroma_v_shift)
- {
- case 0 : ChromaSubsampling="4:1:1"; break;
- case 1 : ChromaSubsampling="4:1:0"; break;
- case 2 : ChromaSubsampling="4:1:0 (4x4)"; break;
- default: ;
- }
- break;
- default: ;
- }
- if (!ChromaSubsampling.empty() && alpha_plane)
- ChromaSubsampling+=":4";
- Fill(Stream_Video, 0, Video_ChromaSubsampling, ChromaSubsampling);
- }
- }
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_FFV1_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Ffv1.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Ffv1.h
deleted file mode 100644
index bdea0e0c4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Ffv1.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about FFV1 files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Ffv1H
-#define MediaInfo_Ffv1H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class RangeCoder
-//***************************************************************************
-
-const size_t states_size=32;
-const size_t state_transitions_size=256;
-typedef int8u states[states_size];
-typedef int8u state_transitions[state_transitions_size];
-
-class RangeCoder
-{
-public :
- RangeCoder(const int8u* Buffer, size_t Buffer_Size, const state_transitions default_state_transition);
-
- bool get_rac(int8u States[]);
- int8u get_symbol_u(states &States);
- int8u get_symbol_s(states &States);
-
- int16u Current;
- int16u Mask;
- state_transitions zero_state;
-public : //Temp
- state_transitions one_state;
- const int8u* Buffer_Cur;
- const int8u* Buffer_End;
-
-};
-
-//***************************************************************************
-// Class File_Ffv1
-//***************************************************************************
-
-class File_Ffv1 : public File__Analyze
-{
-public :
- //In
- bool IsOutOfBandData;
-
- //Constructor/Destructor
- File_Ffv1();
-
-private :
- //Streams management
- void Streams_Accept();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-
- //Elements
- void FrameHeader();
-
- //Range coder
- #if MEDIAINFO_TRACE
- void Get_RC (states &state, bool &Info, const char* Name);
- void Get_RU (states &State, int8u &Info, const char* Name);
- void Get_RS (states &State, int8s &Info, const char* Name);
- void Skip_RC(states &state, const char* Name);
- void Skip_RU(states &State, const char* Name);
- void Skip_RS(states &State, const char* Name);
- #define Info_RC(_STATE, _INFO, _NAME) bool _INFO; Get_RC (_STATE, _INFO, _NAME)
- #define Info_RU(_STATE, _INFO, _NAME) int8u _INFO; Get_RU (_STATE, _INFO, _NAME)
- #define Info_RS(_STATE, _INFO, _NAME) int8s _INFO; Get_RS (_STATE, _INFO, _NAME)
- #else //MEDIAINFO_TRACE
- void Get_RC_ (states &state, bool &Info);
- void Get_RU_ (states &State, int8u &Info);
- void Get_RS_ (states &State, int8s &Info);
- #define Get_RC(Bits, Info, Name) Get_RC_(Bits, Info)
- #define Get_RU(Bits, Info, Name) Get_RU_(Bits, Info)
- #define Get_RS(Bits, Info, Name) Get_RS_(Bits, Info)
- void Skip_RC_(states &state);
- void Skip_RU_(states &State);
- void Skip_RS_(states &State);
- #define Skip_RC(Bits, Name) Skip_RC_(Bits)
- #define Skip_RU(Bits, Name) Skip_RU_(Bits)
- #define Skip_RS(Bits, Name) Skip_RS_(Bits)
- #define Info_RC(_STATE, _INFO, _NAME) Skip_RC_(_STATE)
- #define Info_RU(_STATE, _INFO, _NAME) Skip_RU_(_STATE)
- #define Info_RS(_STATE, _INFO, _NAME) Skip_RS_(_STATE)
- #endif //MEDIAINFO_TRACE
- RangeCoder* RC;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Flic.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Flic.cpp
deleted file mode 100644
index 1570106ab..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Flic.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// From : http://www.compuphase.com/flic.htm
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_FLIC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Flic.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Flic::FileHeader_Parse()
-{
- //Parsing
- int32u DelayBetweenFrames;
- int16u Type, Frames, Width, Height, BitsPerPixel, AspectX=0, AspectY=0;
- Skip_L4( "Size of FLIC including this header");
- Get_L2 (Type, "File type");
- Get_L2 (Frames, "Number of frames in first segment");
- Get_L2 (Width, "Width");
- Get_L2 (Height, "Height");
- Get_L2 (BitsPerPixel, "Bits per pixel");
- Skip_L2( "Flags");
- Get_L4 (DelayBetweenFrames, "Delay between frames");
- if (Type!=0xAF11)
- {
- Skip_L2( "Reserved");
- Skip_L4( "Date of Creation)");
- Skip_L4( "Serial number or compiler id");
- Skip_L4( "Date of FLIC update");
- Skip_L4( "Serial number");
- Get_L2 (AspectX, "Width of square rectangle");
- Get_L2 (AspectY, "Height of square rectangle");
- }
- else
- Skip_XX(22, "Reserved");
- Skip_L2( "EGI: flags for specific EGI extensions");
- Skip_L2( "EGI: key-image frequency");
- Skip_L2( "EGI: total number of frames (segments)");
- Skip_L4( "EGI: maximum chunk size (uncompressed)");
- Skip_L2( "EGI: max. number of regions in a CHK_REGION chunk");
- Skip_L2( "EGI: number of transparent levels");
- if (Type!=0xAF11)
- {
- Skip_XX(24, "Reserved");
- Skip_L4( "Offset to frame 1");
- Skip_L4( "Offset to frame 2");
- Skip_XX(40, "Reserved");
- }
- else
- Skip_XX(72, "Reserved");
-
- //Filling
- FILLING_BEGIN();
- switch (Type)
- {
- case 0xAF11 :
- case 0xAF12 :
- case 0xAF30 :
- case 0xAF31 :
- case 0xAF44 :
- break;
- default :
- Reject("FLIC");
- return;
- }
-
- //Filling
- Accept("FLIC");
-
- Fill(Stream_General, 0, General_Format, "FLIC");
-
- Stream_Prepare(Stream_Video);
- if (Type==0xAF11)
- {
- Fill(Stream_Video, 0, Video_Format, "FLI");
- Fill(Stream_Video, 0, Video_Codec, "FLI");
- if (DelayBetweenFrames)
- {
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, 1000.0/(DelayBetweenFrames*70)); //multiple of 1/70 per frame
- Fill(Stream_Video, 0, Video_Duration, Frames*DelayBetweenFrames*70);
- }
- }
- else
- {
- Fill(Stream_Video, 0, Video_Format, "FLC");
- Fill(Stream_Video, 0, Video_Codec, "FLC");
- if (DelayBetweenFrames)
- {
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, 1000.0/DelayBetweenFrames); //ms per frame
- Fill(Stream_Video, 0, Video_Duration, Frames*DelayBetweenFrames);
- }
- if (AspectY>0)
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, AspectX/AspectY, 3, true);
- }
- Fill(Stream_Video, 0, Video_FrameCount, Frames);
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height);
- Fill(Stream_Video, 0, Video_BitDepth, (BitsPerPixel%3)?BitsPerPixel:(BitsPerPixel/3), 10, true); //If not a multiple of 3, the total resolution is filled
- //No more need data
- Finish("FLIC");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_FLIC_*
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Flic.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Flic.h
deleted file mode 100644
index f8cd53a76..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Flic.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Flic files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_FlicH
-#define MediaInfo_FlicH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Flic
-//***************************************************************************
-
-class File_Flic : public File__Analyze
-{
-private :
- //Buffer
- void FileHeader_Parse();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Fraps.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Fraps.cpp
deleted file mode 100644
index 396cf35f9..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Fraps.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_FRAPS_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Fraps.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Fraps::File_Fraps()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("Fraps");
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Fraps::Streams_Fill()
-{
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "Fraps");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Fraps::Read_Buffer_Continue()
-{
- //Parsing
- int8u version, flags;
- Get_L1 (version, "version");
- Skip_L2( "unknown");
- Get_L1 (flags, "flags");
- if (flags&0x40)
- Skip_L4( "unknown");
- switch (version)
- {
- case 0x00 :
- Version0(); break;
- case 0x01 :
- Version1(); break;
- case 0x02 :
- case 0x04 :
- Version2(); break;
- default : Skip_XX(Element_Size-Element_Offset, "data");
- }
-
- Finish();
-}
-
-//---------------------------------------------------------------------------
-void File_Fraps::Version0()
-{
- //Parsing
- Skip_XX(Element_Size-Element_Offset, "data");
-
- FILLING_BEGIN();
- Accept();
- Fill();
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- Fill(Stream_Video, 0, Video_ChromaSubsampling, "4:2:0");
- Fill(Stream_Video, 0, Video_BitDepth, 8);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Fraps::Version1()
-{
- //Parsing
- Skip_XX(Element_Size-Element_Offset, "data");
-
- FILLING_BEGIN();
- Accept();
- Fill();
- Fill(Stream_Video, 0, Video_ColorSpace, "RGB");
- Fill(Stream_Video, 0, Video_BitDepth, 8);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Fraps::Version2()
-{
- //Parsing
- if (Element_Size>8) //Else this is a repeat frame
- {
- Skip_C4( "FPSx");
- Skip_L4( "offset to the Y plane (minus 8)");
- Skip_L4( "offset to the U plane (minus 8)");
- Skip_L4( "offset to the V plane (minus 8)");
- Skip_XX(Element_Size-Element_Offset, "data");
- }
-
- FILLING_BEGIN();
- Accept();
- Fill();
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- Fill(Stream_Video, 0, Video_BitDepth, 8);
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_FRAPS_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Fraps.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Fraps.h
deleted file mode 100644
index 13cf73552..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Fraps.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Fraps files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_FrapsH
-#define MediaInfo_File_FrapsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Fraps
-//***************************************************************************
-
-class File_Fraps : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Fraps();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-
- //Elements
- void Version0();
- void Version1();
- void Version2();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_H263.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_H263.cpp
deleted file mode 100644
index 5be034025..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_H263.cpp
+++ /dev/null
@@ -1,421 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_H263_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_H263.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/BitStream.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* H263_Source_Format[]=
-{
- "",
- "sub-QCIF",
- "QCIF",
- "CIF",
- "4CIF",
- "16CIF",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const int16u H263_Source_Format_Width[]=
-{
- 0,
- 128,
- 176,
- 352,
- 704,
- 1408,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-const int16u H263_Source_Format_Height[]=
-{
- 0,
- 96,
- 144,
- 288,
- 576,
- 1152,
- 0,
- 0,
-};
-
-//---------------------------------------------------------------------------
-const int8u H263_PAR_W[]=
-{
- 0,
- 12,
- 10,
- 16,
- 40,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-const int8u H263_PAR_H[]=
-{
- 0,
- 11,
- 11,
- 11,
- 33,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_H263::File_H263()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("H.263");
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- IsRawStream=true;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.3?8:2;
- FrameIsAlwaysComplete=false;
-}
-
-//---------------------------------------------------------------------------
-File_H263::~File_H263()
-{
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_H263::Streams_Accept()
-{
- Stream_Prepare(Stream_Video);
-}
-
-//---------------------------------------------------------------------------
-void File_H263::Streams_Update()
-{
-}
-
-//---------------------------------------------------------------------------
-void File_H263::Streams_Fill()
-{
- Fill(Stream_General, 0, General_Format_Version, "H.263");
- Fill(Stream_Video, 0, Video_Format, "H.263");
- Fill(Stream_Video, 0, Video_Codec, "H.263");
-
- Fill(Stream_Video, 0, Video_Width, H263_Source_Format_Width[Source_Format]);
- Fill(Stream_Video, 0, Video_Height, H263_Source_Format_Height[Source_Format]);
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- Fill(Stream_Video, 0, Video_Colorimetry, "4:2:0");
- Fill(Stream_Video, 0, Video_BitDepth, 8);
- Fill(Stream_Video, 0, Video_PixelAspectRatio, ((float32)PAR_W)/PAR_H, 3);
-}
-
-//---------------------------------------------------------------------------
-void File_H263::Streams_Finish()
-{
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_H263::Synchronize()
-{
- //Synchronizing
- while(Buffer_Offset+3<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || (Buffer[Buffer_Offset+2]&0xFC)!=0x80))
- {
- Buffer_Offset+=2;
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Buffer_Offset+=2;
- if ((Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset-1]==0x00) || Buffer_Offset>=Buffer_Size)
- Buffer_Offset--;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+3==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || (Buffer[Buffer_Offset+2]&0xFC)!=0x80))
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00))
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && Buffer[Buffer_Offset ]!=0x00)
- Buffer_Offset++;
-
- if (Buffer_Offset+3>Buffer_Size)
- return false;
-
- //Synched is OK
- Synched=true;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_H263::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+4>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || (Buffer[Buffer_Offset+2]&0xFC)!=0x80)
- {
- Synched=false;
- return true;
- }
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_H263::Synched_Init()
-{
- //Temp
- PAR_W=12;
- PAR_H=11;
- Temporal_Reference_IsValid=false;
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_H263::Read_Buffer_Unsynched()
-{
- Temporal_Reference_IsValid=false;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_H263::Header_Parse()
-{
- Header_Fill_Code(0x00, "Frame");
- Header_Parser_Fill_Size();
-}
-
-//---------------------------------------------------------------------------
-bool File_H263::Header_Parser_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset+3;
- while (Buffer_Offset_Temp+3<=Buffer_Size
- && (Buffer[Buffer_Offset_Temp ]!=0x00
- || Buffer[Buffer_Offset_Temp+1]!=0x00
- || (Buffer[Buffer_Offset_Temp+2]&0xFC)!=0x80))
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer_Offset_Temp>=Buffer_Size || Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
- }
-
- //Must wait more data?
- if (Buffer_Offset_Temp+3>Buffer_Size)
- {
- if (FrameIsAlwaysComplete || File_Offset+Buffer_Size==File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-
-}
-
-//---------------------------------------------------------------------------
-void File_H263::Data_Parse()
-{
- //Parsing
- int8u Temporal_Reference_Temp;
- BS_Begin();
- Skip_S3(22, "Picture Start Code (PSC)");
- Get_S1 ( 8, Temporal_Reference_Temp, "Temporal Reference (TR)");
- if (!Temporal_Reference_IsValid)
- {
- Temporal_Reference=Temporal_Reference_Temp;
- Temporal_Reference_IsValid=true;
- }
- else
- Temporal_Reference++;
- if (Temporal_Reference_Temp!=Temporal_Reference)
- {
- Trusted_IsNot("Out of Order");
- Open_Buffer_Unsynch();
- return;
- }
- Element_Begin1("Type Information (PTYPE)");
- Mark_1();
- Mark_0();
- Skip_SB( "Split screen indicator");
- Skip_SB( "Document camera indicator");
- Skip_SB( "Full Picture Freeze Release");
- Get_S1 (3, Source_Format, "Source Format"); Param_Info1(H263_Source_Format[Source_Format]);
- if (Source_Format!=7)
- {
- Skip_SB( "Picture Coding Type");
- Skip_SB( "Unrestricted Motion Vector mode");
- Skip_SB( "Syntax-based Arithmetic Coding mode");
- Skip_SB( "Advanced Prediction mode");
- Skip_SB( "PB-frames mode");
- }
- Element_End0();
- if (Source_Format==7) // Extended PTYPE
- {
- Element_Begin1("Plus PTYPE (PLUSPTYPE)");
- int8u Ufep, PixelAspectRatioCode=0, Width=0, Height=0;
- Get_S1 ( 3, Ufep, "Update Full Extended PTYPE (UFEP)");
- switch (Ufep)
- {
- case 0 :
- break;
- case 1 :
- Element_Begin1("Optional Part of PLUSPTYPE (OPPTYPE)");
- Get_S1 (3, Source_Format, "Source Format"); Param_Info1(H263_Source_Format[Source_Format]);
- Skip_SB( "Custom PCF");
- Skip_SB( "Unrestricted Motion Vector (UMV) mode");
- Skip_SB( "Syntax-based Arithmetic Coding (SAC) mode");
- Skip_SB( "Advanced Prediction (AP) mode");
- Skip_SB( "Advanced INTRA Coding (AIC) mode");
- Skip_SB( "Deblocking Filter (DF) mode");
- Skip_SB( "Slice Structured (SS) mode");
- Skip_SB( "Reference Picture Selection (RPS) mode");
- Skip_SB( "Independent Segment Decoding (ISD) mode");
- Skip_SB( "Alternative INTER VLC (AIV) mode");
- Skip_SB( "Modified Quantization (MQ) mode");
- Mark_1();
- Mark_0();
- Mark_0();
- Mark_0();
- Element_End0();
- break;
- default :
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "Unknown");
- return; //TODO: frame count...
- }
- Element_Begin1("mandatory part of PLUSPTYPE when PLUSPTYPE present (MPPTYPE)");
- Skip_S1(3, "Picture Type Code");
- Skip_SB( "Reference Picture Resampling (RPR) mode");
- Skip_SB( "Reduced-Resolution Update (RRU) mode");
- Skip_SB( "Rounding Type (RTYPE)");
- Mark_0();
- Mark_0();
- Mark_1();
- Element_End0();
- Element_End0();
- Skip_SB( "CPM");
- Skip_S1(2, "PSBI");
- Element_Begin1("Custom Picture Format (CPFMT)");
- Get_S1 (4, PixelAspectRatioCode, "Pixel Aspect Ratio Code");
- Get_S1 (4, Width, "Picture Width Indication");
- Width++; Width<<=2; Param_Info2(Width, " pixels");
- Mark_1();
- Get_S1 (4, Height, "Picture Height Indication");
- Height<<=2; Param_Info2(Height, " pixels");
- Element_End0();
- if (PixelAspectRatioCode==0xF)
- {
- Element_Begin1("Extended Pixel Aspect Ratio (EPAR)");
- Get_S1 (8, PAR_W, "PAR Width");
- Get_S1 (8, PAR_H, "PAR Height");
- Element_End0();
- }
- else
- {
- PAR_W=H263_PAR_W[PixelAspectRatioCode];
- PAR_H=H263_PAR_H[PixelAspectRatioCode];
- }
- }
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "Other data");
-
- FILLING_BEGIN();
- Element_Info1(Frame_Count);
- Frame_Count++;
-
- //Filling
- if (!Status[IsFilled] && Frame_Count>=Frame_Count_Valid)
- {
- Accept("H.263");
- Finish("H.263");
- }
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_H263_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_H263.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_H263.h
deleted file mode 100644
index 5d1339cf7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_H263.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about h.263 files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_H263H
-#define MediaInfo_H263H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_H263
-//***************************************************************************
-
-class File_H263 : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool FrameIsAlwaysComplete;
-
- //Constructor/Destructor
- File_H263();
- ~File_H263();
-
-private :
- //Streams management
- void Streams_Accept();
- void Streams_Update();
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parser_Fill_Size();
- void Data_Parse();
-
- //Elements
-
- //Temp
- int8u Temporal_Reference;
- int8u Source_Format;
- int8u PAR_W;
- int8u PAR_H;
- bool Temporal_Reference_IsValid;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Hevc.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Hevc.cpp
deleted file mode 100644
index cf25daba4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Hevc.cpp
+++ /dev/null
@@ -1,2702 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_HEVC_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Hevc.h"
-#include <cmath>
-#include <algorithm>
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
- #include "MediaInfo/MediaInfo_Events.h"
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const int8u Hevc_SubWidthC[]=
-{
- 1,
- 2,
- 2,
- 1,
-};
-
-//---------------------------------------------------------------------------
-const int8u Hevc_SubHeightC[]=
-{
- 1,
- 2,
- 1,
- 1,
-};
-
-//---------------------------------------------------------------------------
-const char* Hevc_profile_idc(int32u profile_idc)
-{
- switch (profile_idc)
- {
- case 0 : return "No profile";
- case 1 : return "Main";
- case 2 : return "Main 10";
- case 3 : return "Main Still";
- default : return "Unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Hevc_chroma_format_idc(int8u chroma_format_idc)
-{
- switch (chroma_format_idc)
- {
- case 0 : return "monochrome";
- case 1 : return "4:2:0";
- case 2 : return "4:2:2";
- case 3 : return "4:4:4";
- default : return "Unknown";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Hevc_pic_type[]=
-{
- "I",
- "I, P",
- "I, P, B",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Hevc_slice_type(int32u slice_type)
-{
- switch (slice_type)
- {
- case 0 : return "P";
- case 1 : return "B";
- case 2 : return "I";
- default: return "";
- }
-};
-
-//---------------------------------------------------------------------------
-extern const char* Mpegv_colour_primaries(int8u colour_primaries);
-extern const char* Mpegv_transfer_characteristics(int8u transfer_characteristics);
-extern const char* Mpegv_matrix_coefficients(int8u matrix_coefficients);
-
-//---------------------------------------------------------------------------
-extern const int8u Avc_PixelAspectRatio_Size;
-extern const float32 Avc_PixelAspectRatio[];
-extern const char* Avc_video_format[];
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Hevc::File_Hevc()
-{
- //Config
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Hevc;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- PTS_DTS_Needed=true;
- IsRawStream=true;
- Frame_Count_NotParsedIncluded=0;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.3?16:16; //Note: should be replaced by "512:2" when I-frame/GOP detection is OK
- FrameIsAlwaysComplete=false;
- MustParse_VPS_SPS_PPS=false;
- MustParse_VPS_SPS_PPS_FromMatroska=false;
- MustParse_VPS_SPS_PPS_FromFlv=false;
- SizedBlocks=false;
-
- //File specific
- lengthSizeMinusOne=(int8u)-1;
-}
-
-//---------------------------------------------------------------------------
-File_Hevc::~File_Hevc()
-{
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Hevc::Streams_Fill()
-{
- if (MustParse_VPS_SPS_PPS_FromFlv)
- return;
-
- if (Count_Get(Stream_Video)==0)
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "HEVC");
- Fill(Stream_Video, 0, Video_Codec, "HEVC");
-
- for (std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item=seq_parameter_sets.begin(); seq_parameter_set_Item!=seq_parameter_sets.end(); ++seq_parameter_set_Item)
- if ((*seq_parameter_set_Item))
- Streams_Fill(seq_parameter_set_Item);
-
- //Library name
- Fill(Stream_General, 0, General_Encoded_Library, Encoded_Library);
- Fill(Stream_General, 0, General_Encoded_Library_Name, Encoded_Library_Name);
- Fill(Stream_General, 0, General_Encoded_Library_Version, Encoded_Library_Version);
- Fill(Stream_General, 0, General_Encoded_Library_Settings, Encoded_Library_Settings);
- Fill(Stream_Video, 0, Video_Encoded_Library, Encoded_Library);
- Fill(Stream_Video, 0, Video_Encoded_Library_Name, Encoded_Library_Name);
- Fill(Stream_Video, 0, Video_Encoded_Library_Version, Encoded_Library_Version);
- Fill(Stream_Video, 0, Video_Encoded_Library_Settings, Encoded_Library_Settings);
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::Streams_Fill(std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item)
-{
- int32u Width = (*seq_parameter_set_Item)->pic_width_in_luma_samples;
- int32u Height= (*seq_parameter_set_Item)->pic_height_in_luma_samples;
- int32u CropUnitX=Hevc_SubWidthC [(*seq_parameter_set_Item)->ChromaArrayType()];
- int32u CropUnitY=Hevc_SubHeightC[(*seq_parameter_set_Item)->ChromaArrayType()];
- Width -=((*seq_parameter_set_Item)->conf_win_left_offset+(*seq_parameter_set_Item)->conf_win_right_offset)*CropUnitX;
- Height-=((*seq_parameter_set_Item)->conf_win_top_offset +(*seq_parameter_set_Item)->conf_win_bottom_offset)*CropUnitY;
-
- Ztring Profile;
- if ((*seq_parameter_set_Item)->profile_space==0)
- {
- if ((*seq_parameter_set_Item)->profile_idc)
- Profile=Ztring().From_Local(Hevc_profile_idc((*seq_parameter_set_Item)->profile_idc));
- if ((*seq_parameter_set_Item)->level_idc)
- {
- if ((*seq_parameter_set_Item)->profile_idc)
- Profile+=__T('@');
- Profile+=__T('L')+Ztring().From_Number(((float)(*seq_parameter_set_Item)->level_idc)/30, 1);
- }
- }
- Fill(Stream_Video, 0, Video_Format_Profile, Profile);
- Fill(Stream_Video, 0, Video_Codec_Profile, Profile);
- Fill(Stream_Video, StreamPos_Last, Video_Width, Width);
- Fill(Stream_Video, StreamPos_Last, Video_Height, Height);
- //Fill(Stream_Video, 0, Video_PixelAspectRatio, PixelAspectRatio, 3, true);
- //Fill(Stream_Video, 0, Video_DisplayAspectRatio, Width*PixelAspectRatio/Height, 3, true); //More precise
-
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- Fill(Stream_Video, 0, Video_Colorimetry, Hevc_chroma_format_idc((*seq_parameter_set_Item)->chroma_format_idc));
- if ((*seq_parameter_set_Item)->bit_depth_luma_minus8==(*seq_parameter_set_Item)->bit_depth_chroma_minus8)
- Fill(Stream_Video, 0, Video_BitDepth, (*seq_parameter_set_Item)->bit_depth_luma_minus8+8);
-
- if ((*seq_parameter_set_Item)->vui_parameters)
- {
- if ((*seq_parameter_set_Item)->vui_parameters->timing_info_present_flag)
- {
- if ((*seq_parameter_set_Item)->vui_parameters->time_scale && (*seq_parameter_set_Item)->vui_parameters->num_units_in_tick)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, (float64)(*seq_parameter_set_Item)->vui_parameters->time_scale / (*seq_parameter_set_Item)->vui_parameters->num_units_in_tick);
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::Streams_Finish()
-{
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Hevc::FileHeader_Begin()
-{
- if (!File__Analyze::FileHeader_Begin_0x000001())
- return false;
-
- if (!MustSynchronize)
- {
- Synched_Init();
- Buffer_TotalBytes_FirstSynched=0;
- File_Offset_FirstSynched=File_Offset;
- }
-
- //All should be OK
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Hevc::Synchronize()
-{
- //Synchronizing
- size_t Buffer_Offset_Min=Buffer_Offset;
- while(Buffer_Offset+4<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01))
- {
- Buffer_Offset+=2;
- while(Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Buffer_Offset+=2;
- if (Buffer_Offset>=Buffer_Size || Buffer[Buffer_Offset-1]==0x00)
- Buffer_Offset--;
- }
- if (Buffer_Offset>Buffer_Offset_Min && Buffer[Buffer_Offset-1]==0x00)
- Buffer_Offset--;
-
- //Parsing last bytes if needed
- if (Buffer_Offset+4==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x00
- || Buffer[Buffer_Offset+3]!=0x01))
- Buffer_Offset++;
- if (Buffer_Offset+3==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01))
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00))
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && Buffer[Buffer_Offset ]!=0x00)
- Buffer_Offset++;
-
- if (Buffer_Offset+4>Buffer_Size)
- return false;
-
- if (File_Offset==0 && Buffer_Offset==0 && (Buffer[3]==0xE0 || Buffer[3]==0xFE))
- {
- //It is from MPEG-PS
- Reject();
- return false;
- }
-
- //Synched is OK
- Synched=true;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Hevc::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+6>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || (Buffer[Buffer_Offset+2]!=0x01 && (Buffer[Buffer_Offset+2]!=0x00 || Buffer[Buffer_Offset+3]!=0x01)))
- {
- Synched=false;
- return true;
- }
-
- //Quick search
- if (!Header_Parser_QuickSearch())
- return false;
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Hevc::Demux_UnpacketizeContainer_Test()
-{
- const int8u* Buffer_Temp=NULL;
- size_t Buffer_Temp_Size=0;
- bool RandomAccess=true; //Default, in case of problem
-
- if ((MustParse_VPS_SPS_PPS || SizedBlocks) && Demux_Transcode_Iso14496_15_to_AnnexB)
- {
- if (MustParse_VPS_SPS_PPS)
- return true; //Wait for SPS and PPS
-
- //Random access check
- RandomAccess=false;
-
- //Computing final size
- size_t TranscodedBuffer_Size=0;
- while (Buffer_Offset+lengthSizeMinusOne+1+1<=Buffer_Size)
- {
- size_t Size;
- switch (lengthSizeMinusOne)
- {
- case 0: Size=Buffer[Buffer_Offset];
- TranscodedBuffer_Size+=2;
- break;
- case 1: Size=BigEndian2int16u(Buffer+Buffer_Offset);
- TranscodedBuffer_Size++;
- break;
- case 2: Size=BigEndian2int24u(Buffer+Buffer_Offset);
- break;
- case 3: Size=BigEndian2int32u(Buffer+Buffer_Offset);
- TranscodedBuffer_Size--;
- break;
- default: return true; //Problem
- }
- Size+=lengthSizeMinusOne+1;
-
- //Coherency checking
- if (Size==0 || Buffer_Offset+Size>Buffer_Size || (Buffer_Offset+Size!=Buffer_Size && Buffer_Offset+Size+lengthSizeMinusOne+1>Buffer_Size))
- Size=Buffer_Size-Buffer_Offset;
-
- //Random access check
- if (!RandomAccess && Buffer_Offset+lengthSizeMinusOne+1<Buffer_Size && (Buffer[Buffer_Offset+lengthSizeMinusOne+1]&0x40)==0) //Is a slice
- {
- Element_Offset=lengthSizeMinusOne+1+2;
- Element_Size=Size;
-
- BS_Begin();
- Get_SB ( first_slice_segment_in_pic_flag, "first_slice_segment_in_pic_flag");
- if (first_slice_segment_in_pic_flag)
- {
- Element_Code=(Buffer[Buffer_Offset+lengthSizeMinusOne+1]&0x3E)>>1; //nal_unit_type
- RapPicFlag=Element_Code>=16 && Element_Code<=23;
- if (RapPicFlag)
- Skip_SB( "no_output_of_prior_pics_flag");
- Get_UE ( slice_pic_parameter_set_id, "slice_pic_parameter_set_id");
- int8u num_extra_slice_header_bits=(int8u)-1;
- std::vector<pic_parameter_set_struct*>::iterator pic_parameter_set_Item;
- if (MustParse_VPS_SPS_PPS_FromFlv)
- num_extra_slice_header_bits=0; // We bet it is old, so without num_extra_slice_header_bits
- else if (!(slice_pic_parameter_set_id>=pic_parameter_sets.size() || (*(pic_parameter_set_Item=pic_parameter_sets.begin()+slice_pic_parameter_set_id))==NULL))
- {
- num_extra_slice_header_bits=(*pic_parameter_set_Item)->num_extra_slice_header_bits;
- }
- if (num_extra_slice_header_bits!=(int8u)-1)
- {
- int32u slice_type;
- Skip_S1(num_extra_slice_header_bits, "slice_reserved_flags");
- Get_UE (slice_type, "slice_type");
-
- switch (slice_type)
- {
- case 2 :
- case 7 :
- RandomAccess=true;
- }
- }
- }
- BS_End();
- }
-
- TranscodedBuffer_Size+=Size;
- Buffer_Offset+=Size;
- }
- Buffer_Offset=0;
-
- //Adding VPS/SPS/PPS sizes
- if (RandomAccess)
- {
- for (video_parameter_set_structs::iterator Data_Item=video_parameter_sets.begin(); Data_Item!=video_parameter_sets.end(); ++Data_Item)
- TranscodedBuffer_Size+=(*Data_Item)->AnnexB_Buffer_Size;
- for (seq_parameter_set_structs::iterator Data_Item=seq_parameter_sets.begin(); Data_Item!=seq_parameter_sets.end(); ++Data_Item)
- TranscodedBuffer_Size+=(*Data_Item)->AnnexB_Buffer_Size;
- for (pic_parameter_set_structs::iterator Data_Item=pic_parameter_sets.begin(); Data_Item!=pic_parameter_sets.end(); ++Data_Item)
- TranscodedBuffer_Size+=(*Data_Item)->AnnexB_Buffer_Size;
- }
-
- //Copying
- int8u* TranscodedBuffer=new int8u[TranscodedBuffer_Size+100];
- size_t TranscodedBuffer_Pos=0;
- if (RandomAccess)
- {
- for (video_parameter_set_structs::iterator Data_Item=video_parameter_sets.begin(); Data_Item!=video_parameter_sets.end(); ++Data_Item)
- {
- std::memcpy(TranscodedBuffer+TranscodedBuffer_Pos, (*Data_Item)->AnnexB_Buffer, (*Data_Item)->AnnexB_Buffer_Size);
- TranscodedBuffer_Pos+=(*Data_Item)->AnnexB_Buffer_Size;
- }
- for (seq_parameter_set_structs::iterator Data_Item=seq_parameter_sets.begin(); Data_Item!=seq_parameter_sets.end(); ++Data_Item)
- {
- std::memcpy(TranscodedBuffer+TranscodedBuffer_Pos, (*Data_Item)->AnnexB_Buffer, (*Data_Item)->AnnexB_Buffer_Size);
- TranscodedBuffer_Pos+=(*Data_Item)->AnnexB_Buffer_Size;
- }
- for (pic_parameter_set_structs::iterator Data_Item=pic_parameter_sets.begin(); Data_Item!=pic_parameter_sets.end(); ++Data_Item)
- {
- std::memcpy(TranscodedBuffer+TranscodedBuffer_Pos, (*Data_Item)->AnnexB_Buffer, (*Data_Item)->AnnexB_Buffer_Size);
- TranscodedBuffer_Pos+=(*Data_Item)->AnnexB_Buffer_Size;
- }
- }
- while (Buffer_Offset<Buffer_Size)
- {
- //Sync layer
- TranscodedBuffer[TranscodedBuffer_Pos]=0x00;
- TranscodedBuffer_Pos++;
- TranscodedBuffer[TranscodedBuffer_Pos]=0x00;
- TranscodedBuffer_Pos++;
- TranscodedBuffer[TranscodedBuffer_Pos]=0x01;
- TranscodedBuffer_Pos++;
-
- //Block
- size_t Size;
- switch (lengthSizeMinusOne)
- {
- case 0: Size=Buffer[Buffer_Offset];
- Buffer_Offset++;
- break;
- case 1: Size=BigEndian2int16u(Buffer+Buffer_Offset);
- Buffer_Offset+=2;
- break;
- case 2: Size=BigEndian2int24u(Buffer+Buffer_Offset);
- Buffer_Offset+=3;
- break;
- case 3: Size=BigEndian2int32u(Buffer+Buffer_Offset);
- Buffer_Offset+=4;
- break;
- default: //Problem
- delete [] TranscodedBuffer;
- return false;
- }
-
- //Coherency checking
- if (Size==0 || Buffer_Offset+Size>Buffer_Size || (Buffer_Offset+Size!=Buffer_Size && Buffer_Offset+Size+lengthSizeMinusOne+1>Buffer_Size))
- Size=Buffer_Size-Buffer_Offset;
-
- std::memcpy(TranscodedBuffer+TranscodedBuffer_Pos, Buffer+Buffer_Offset, Size);
- TranscodedBuffer_Pos+=Size;
- Buffer_Offset+=Size;
- }
- Buffer_Offset=0;
-
- Buffer_Temp=Buffer;
- Buffer=TranscodedBuffer;
- Buffer_Temp_Size=Buffer_Size;
- Buffer_Size=TranscodedBuffer_Size;
- Demux_Offset=Buffer_Size;
- }
- else
- {
- bool zero_byte=Buffer[Buffer_Offset+2]==0x00;
- if (!(((Buffer[Buffer_Offset+(zero_byte?4:3)]&0x40)==0 && (Buffer[Buffer_Offset+(zero_byte?6:5)]&0x80)!=0x80)
- || (Buffer[Buffer_Offset+(zero_byte?4:3)]&0x7E)==(38<<1)))
- {
- if (Demux_Offset==0)
- {
- Demux_Offset=Buffer_Offset;
- Demux_IntermediateItemFound=false;
- }
- while (Demux_Offset+6<=Buffer_Size)
- {
- //Synchronizing
- while(Demux_Offset+6<=Buffer_Size && (Buffer[Demux_Offset ]!=0x00
- || Buffer[Demux_Offset+1]!=0x00
- || Buffer[Demux_Offset+2]!=0x01))
- {
- Demux_Offset+=2;
- while(Demux_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Demux_Offset+=2;
- if (Demux_Offset>=Buffer_Size || Buffer[Demux_Offset-1]==0x00)
- Demux_Offset--;
- }
-
- if (Demux_Offset+6>Buffer_Size)
- {
- if (File_Offset+Buffer_Size==File_Size)
- Demux_Offset=Buffer_Size;
- break;
- }
-
- zero_byte=Buffer[Demux_Offset+2]==0x00;
- if (Demux_IntermediateItemFound)
- {
- if (!(((Buffer[Demux_Offset+(zero_byte?4:3)]&0x40)==0 && (Buffer[Demux_Offset+(zero_byte?6:5)]&0x80)!=0x80)
- || (Buffer[Demux_Offset+(zero_byte?4:3)]&0x7E)==(38<<1)))
- break;
- }
- else
- {
- if ((Buffer[Demux_Offset+(zero_byte?4:3)]&0x40)==0 && (Buffer[Demux_Offset+(zero_byte?6:5)]&0x80)==0x80)
- Demux_IntermediateItemFound=true;
- }
-
- Demux_Offset++;
- }
-
- if (Demux_Offset+6>Buffer_Size && !FrameIsAlwaysComplete && File_Offset+Buffer_Size<File_Size)
- return false; //No complete frame
-
- if (Demux_Offset && Buffer[Demux_Offset-1]==0x00)
- Demux_Offset--;
-
- zero_byte=Buffer[Buffer_Offset+2]==0x00;
- size_t Buffer_Offset_Random=Buffer_Offset;
- if ((Buffer[Buffer_Offset_Random+(zero_byte?4:3)]&0x7E)==(35<<1))
- {
- Buffer_Offset_Random++;
- if (zero_byte)
- Buffer_Offset_Random++;
- while(Buffer_Offset_Random+6<=Buffer_Size && (Buffer[Buffer_Offset_Random ]!=0x00
- || Buffer[Buffer_Offset_Random+1]!=0x00
- || Buffer[Buffer_Offset_Random+2]!=0x01))
- Buffer_Offset_Random++;
- zero_byte=Buffer[Buffer_Offset_Random+2]==0x00;
- }
- RandomAccess=Buffer_Offset_Random+6<=Buffer_Size && (Buffer[Buffer_Offset_Random+(zero_byte?4:3)]&0x7E)==(32<<1); //video_parameter_set
- }
- }
-
- if (!Status[IsAccepted])
- {
- if (Config->Demux_EventWasSent)
- return false;
- File_Hevc* MI=new File_Hevc;
- Open_Buffer_Init(MI);
- Open_Buffer_Continue(MI, Buffer, Buffer_Size);
- bool IsOk=MI->Status[IsAccepted];
- delete MI;
- if (!IsOk)
- return false;
- }
-
- if (IFrame_Count || RandomAccess)
- {
- int64u PTS_Temp=FrameInfo.PTS;
- if (!IsSub)
- FrameInfo.PTS=(int64u)-1;
- Demux_UnpacketizeContainer_Demux(RandomAccess);
- if (!IsSub)
- FrameInfo.PTS=PTS_Temp;
- }
- else
- Demux_UnpacketizeContainer_Demux_Clear();
-
- if (Buffer_Temp)
- {
- Demux_TotalBytes-=Buffer_Size;
- Demux_TotalBytes+=Buffer_Temp_Size;
- delete[] Buffer;
- Buffer=Buffer_Temp;
- Buffer_Size=Buffer_Temp_Size;
- }
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//---------------------------------------------------------------------------
-void File_Hevc::Synched_Init()
-{
- //FrameInfo
- PTS_End=0;
- if (FrameInfo.DTS==(int64u)-1)
- FrameInfo.DTS=0; //No DTS in container
- DTS_Begin=FrameInfo.DTS;
- DTS_End=FrameInfo.DTS;
-
- //Status
- IFrame_Count=0;
-
- //Temp
-
- //Default values
- Streams.resize(0x100);
- Streams[32].Searching_Payload=true; //video_parameter_set
- Streams[35].Searching_Payload=true; //access_unit_delimiter
- Streams[39].Searching_Payload=true; //sei
- for (int8u Pos=0xFF; Pos>=48; Pos--)
- Streams[Pos].Searching_Payload=true; //unspecified
-
- #if MEDIAINFO_DEMUX
- Demux_Transcode_Iso14496_15_to_AnnexB=Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get();
- #endif //MEDIAINFO_DEMUX
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Hevc::Read_Buffer_Unsynched()
-{
- //Impossible to know TimeStamps now
- PTS_End=0;
- DTS_End=0;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Hevc::Header_Parse()
-{
- //Specific case
- if (MustParse_VPS_SPS_PPS)
- {
- Header_Fill_Size(Element_Size);
- Header_Fill_Code((int64u)-1, "Specific");
- return;
- }
-
- //Parsing
- int8u nal_unit_type, nuh_temporal_id_plus1;
- if (!SizedBlocks)
- {
- if (Buffer[Buffer_Offset+2]==0x00)
- Skip_B1( "zero_byte");
- Skip_B3( "start_code_prefix_one_3bytes");
- BS_Begin();
- Mark_0 ();
- Get_S1 (6, nal_unit_type, "nal_unit_type");
- Get_S1 (6, nuh_layer_id, "nuh_layer_id");
- Get_S1 (3, nuh_temporal_id_plus1, "nuh_temporal_id_plus1");
- BS_End();
-
- if (!Header_Parser_Fill_Size())
- {
- Element_WaitForMoreData();
- return;
- }
-
- if (nuh_temporal_id_plus1==0)
- Trusted_IsNot("nuh_temporal_id_plus1");
- }
- else
- {
- int32u Size;
- switch (lengthSizeMinusOne)
- {
- case 0: {
- int8u Size_;
- Get_B1 (Size_, "size");
- Size=Size_;
- }
- break;
- case 1: {
- int16u Size_;
- Get_B2 (Size_, "size");
- Size=Size_;
- }
- break;
- case 2: {
- int32u Size_;
- Get_B3 (Size_, "size");
- Size=Size_;
- }
- break;
- case 3: Get_B4 (Size, "size");
- break;
- default: Trusted_IsNot("No size of NALU defined");
- Size=(int32u)(Buffer_Size-Buffer_Offset);
- }
- BS_Begin();
- Mark_0 ();
- Get_S1 (6, nal_unit_type, "nal_unit_type");
- Get_S1 (6, nuh_layer_id, "nuh_layer_id");
- Get_S1 (3, nuh_temporal_id_plus1, "nuh_temporal_id_plus1");
- BS_End();
-
- if (nuh_temporal_id_plus1==0)
- Trusted_IsNot("nuh_temporal_id_plus1");
-
- FILLING_BEGIN();
- Header_Fill_Size(Size?(Element_Offset-2+Size):(Buffer_Size-Buffer_Offset)); //If Size is 0, it is not normal, we skip the complete frame
- FILLING_END();
- }
-
- //Filling
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- Header_Fill_Code(nal_unit_type, Ztring().From_CC1(nal_unit_type));
- else
- #endif //MEDIAINFO_TRACE
- Header_Fill_Code(nal_unit_type);
-}
-
-//---------------------------------------------------------------------------
-bool File_Hevc::Header_Parser_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset+4;
- while (Buffer_Offset_Temp+5<=Buffer_Size
- && CC3(Buffer+Buffer_Offset_Temp)!=0x000001)
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer_Offset_Temp>=Buffer_Size || Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
- }
-
- //Must wait more data?
- if (Buffer_Offset_Temp+5>Buffer_Size)
- {
- if (FrameIsAlwaysComplete || File_Offset+Buffer_Size>=File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- if (Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Hevc::Header_Parser_QuickSearch()
-{
- while ( Buffer_Offset+6<=Buffer_Size
- && Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && (Buffer[Buffer_Offset+2]==0x01
- || (Buffer[Buffer_Offset+2]==0x00 && Buffer[Buffer_Offset+3]==0x01)))
- {
- //Getting start_code
- int8u nal_unit_type;
- if (Buffer[Buffer_Offset+2]==0x00)
- nal_unit_type=(CC1(Buffer+Buffer_Offset+4)&0x7E)>>1;
- else
- nal_unit_type=(CC1(Buffer+Buffer_Offset+3)&0x7E)>>1;
-
- //Searching start
- if (Streams[nal_unit_type].Searching_Payload)
- return true;
-
- //Synchronizing
- Buffer_Offset+=4;
- Synched=false;
- if (!Synchronize())
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
-
- if (Buffer_Offset+6>Buffer_Size)
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
- }
-
- Trusted_IsNot("HEVC, Synchronisation lost");
- return Synchronize();
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::Data_Parse()
-{
- //Specific case
- if (Element_Code==(int64u)-1)
- {
- VPS_SPS_PPS();
- return;
- }
-
- if (nuh_layer_id)
- {
- //Skip_XX(Element_Size, "(Extension)");
- //return;
- }
-
- //Trailing zeroes
- int64u Element_Size_SaveBeforeZeroes=Element_Size;
- if (Element_Size)
- {
- while (Element_Size && Buffer[Buffer_Offset+(size_t)Element_Size-1]==0)
- Element_Size--;
- }
-
- //Searching emulation_prevention_three_byte
- int8u* Buffer_3Bytes=NULL;
- const int8u* Save_Buffer=Buffer;
- int64u Save_File_Offset=File_Offset;
- size_t Save_Buffer_Offset=Buffer_Offset;
- int64u Save_Element_Size=Element_Size;
- size_t Element_Offset_3Bytes=(size_t)Element_Offset;
- std::vector<size_t> ThreeByte_List;
- while (Element_Offset_3Bytes+3<=Element_Size)
- {
- if (CC3(Buffer+Buffer_Offset+(size_t)Element_Offset_3Bytes)==0x000003)
- ThreeByte_List.push_back(Element_Offset_3Bytes+2);
- Element_Offset_3Bytes+=2;
- while(Element_Offset_3Bytes<Element_Size && Buffer[Buffer_Offset+(size_t)Element_Offset_3Bytes]!=0x00)
- Element_Offset_3Bytes+=2;
- if (Element_Offset_3Bytes>=Element_Size || Buffer[Buffer_Offset+(size_t)Element_Offset_3Bytes-1]==0x00)
- Element_Offset_3Bytes--;
- }
-
- if (!ThreeByte_List.empty())
- {
- //We must change the buffer for keeping out
- Element_Size=Save_Element_Size-ThreeByte_List.size();
- File_Offset+=Buffer_Offset;
- Buffer_Offset=0;
- Buffer_3Bytes=new int8u[(size_t)Element_Size];
- for (size_t Pos=0; Pos<=ThreeByte_List.size(); Pos++)
- {
- size_t Pos0=(Pos==ThreeByte_List.size())?(size_t)Save_Element_Size:(ThreeByte_List[Pos]);
- size_t Pos1=(Pos==0)?0:(ThreeByte_List[Pos-1]+1);
- size_t Buffer_3bytes_Begin=Pos1-Pos;
- size_t Save_Buffer_Begin =Pos1;
- size_t Size= Pos0-Pos1;
- std::memcpy(Buffer_3Bytes+Buffer_3bytes_Begin, Save_Buffer+Save_Buffer_Offset+Save_Buffer_Begin, Size);
- }
- Buffer=Buffer_3Bytes;
- }
-
- //Parsing
- switch (Element_Code)
- {
- case 0 :
- case 1 :
- case 2 :
- case 3 :
- case 16 :
- case 17 :
- case 18 :
- case 19 :
- case 20 :
- case 21 :
- slice_segment_layer(); break;
- case 4 :
- case 5 :
- case 6 :
- case 7 :
- case 8 :
- case 9 :
- slice_layer(); break;
- case 32 : video_parameter_set(); break;
- case 33 : seq_parameter_set(); break;
- case 34 : pic_parameter_set(); break;
- case 35 : access_unit_delimiter(); break;
- case 36 : end_of_seq(); break;
- case 37 : end_of_bitstream(); break;
- case 38 : filler_data(); break;
- case 39 :
- case 40 :
- sei(); break;
- default :
- Skip_XX(Element_Size-Element_Offset, "Data");
- if (Element_Code>=48)
- Trusted_IsNot("Unspecified");
- }
-
- if (!ThreeByte_List.empty())
- {
- //We must change the buffer for keeping out
- Element_Size=Save_Element_Size;
- File_Offset=Save_File_Offset;
- Buffer_Offset=Save_Buffer_Offset;
- delete[] Buffer; Buffer=Save_Buffer;
- Buffer_3Bytes=NULL; //Same as Buffer...
- Element_Offset+=ThreeByte_List.size();
- }
-
- #if MEDIAINFO_DEMUX
- if (Demux_Transcode_Iso14496_15_to_AnnexB)
- {
- if (Element_Code==32)
- {
- std::vector<video_parameter_set_struct*>::iterator Data_Item=video_parameter_sets.begin();
- if (Data_Item!=video_parameter_sets.end() && (*Data_Item))
- {
- delete[] (*Data_Item)->AnnexB_Buffer;
- (*Data_Item)->AnnexB_Buffer_Size=(size_t)(Element_Size+5);
- (*Data_Item)->AnnexB_Buffer=new int8u[(*Data_Item)->AnnexB_Buffer_Size];
- (*Data_Item)->AnnexB_Buffer[0]=0x00;
- (*Data_Item)->AnnexB_Buffer[1]=0x00;
- (*Data_Item)->AnnexB_Buffer[2]=0x01;
- (*Data_Item)->AnnexB_Buffer[3]=Buffer[Buffer_Offset-2];
- (*Data_Item)->AnnexB_Buffer[4]=Buffer[Buffer_Offset-1];
- std::memcpy((*Data_Item)->AnnexB_Buffer+5, Buffer+Buffer_Offset, (size_t)Element_Size);
- }
- }
- if (Element_Code==33)
- {
- std::vector<seq_parameter_set_struct*>::iterator Data_Item=seq_parameter_sets.begin();
- if (Data_Item!=seq_parameter_sets.end() && (*Data_Item))
- {
- delete[] (*Data_Item)->AnnexB_Buffer;
- (*Data_Item)->AnnexB_Buffer_Size=(size_t)(Element_Size+5);
- (*Data_Item)->AnnexB_Buffer=new int8u[(*Data_Item)->AnnexB_Buffer_Size];
- (*Data_Item)->AnnexB_Buffer[0]=0x00;
- (*Data_Item)->AnnexB_Buffer[1]=0x00;
- (*Data_Item)->AnnexB_Buffer[2]=0x01;
- (*Data_Item)->AnnexB_Buffer[3]=Buffer[Buffer_Offset-2];
- (*Data_Item)->AnnexB_Buffer[4]=Buffer[Buffer_Offset-1];
- std::memcpy((*Data_Item)->AnnexB_Buffer+5, Buffer+Buffer_Offset, (size_t)Element_Size);
- }
- }
- if (Element_Code==34)
- {
- std::vector<pic_parameter_set_struct*>::iterator Data_Item=pic_parameter_sets.begin();
- if (Data_Item!=pic_parameter_sets.end() && (*Data_Item))
- {
- delete[] (*Data_Item)->AnnexB_Buffer;
- (*Data_Item)->AnnexB_Buffer_Size=(size_t)(Element_Size+5);
- (*Data_Item)->AnnexB_Buffer=new int8u[(*Data_Item)->AnnexB_Buffer_Size];
- (*Data_Item)->AnnexB_Buffer[0]=0x00;
- (*Data_Item)->AnnexB_Buffer[1]=0x00;
- (*Data_Item)->AnnexB_Buffer[2]=0x01;
- (*Data_Item)->AnnexB_Buffer[3]=Buffer[Buffer_Offset-2];
- (*Data_Item)->AnnexB_Buffer[4]=Buffer[Buffer_Offset-1];
- std::memcpy((*Data_Item)->AnnexB_Buffer+5, Buffer+Buffer_Offset, (size_t)Element_Size);
- }
- }
- }
- #endif //MEDIAINFO_DEMUX
-
- //Trailing zeroes
- Element_Size=Element_Size_SaveBeforeZeroes;
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Packets
-void File_Hevc::slice_segment_layer()
-{
- #if MEDIAINFO_TRACE
- Element_Name("slice_segment_layer");
- switch (Element_Code)
- {
- case 0 :
- case 1 : break;
- case 2 :
- case 3 : Element_Info("TSA"); break;
- case 16 :
- case 17 :
- case 18 : Element_Info("BLA"); break;
- case 19 :
- case 20 : Element_Info("IDR"); break;
- case 21 : Element_Info("CRA"); break;
- default: ;
- }
- #endif //MEDIAINFO_TRACE
-
- //Parsing
- RapPicFlag=Element_Code>=16 && Element_Code<=23;
- BS_Begin();
- slice_segment_header();
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "(ToDo)");
-
- FILLING_BEGIN();
- if (slice_pic_parameter_set_id==(int32u)-1)
- return;
-
- //Count of I-Frames
- if (first_slice_segment_in_pic_flag && (Element_Code==19 || Element_Code==20))
- IFrame_Count++;
-
- if (first_slice_segment_in_pic_flag)
- {
- //Frame_Count
- Frame_Count++;
- if (IFrame_Count && Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- Frame_Count_InThisBlock++;
-
- //Filling only if not already done
- if (Frame_Count==1 && !Status[IsAccepted])
- Accept("HEVC");
- if (!Status[IsFilled])
- {
- if (IFrame_Count>=8)
- Frame_Count_Valid=Frame_Count; //We have enough frames
- if (Frame_Count>=Frame_Count_Valid)
- {
- Fill("HEVC");
- if (!IsSub && MediaInfoLib::Config.ParseSpeed_Get()<1.0)
- Finish("HEVC");
- }
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packets
-void File_Hevc::slice_layer()
-{
- #if MEDIAINFO_TRACE
- Element_Name("slice_layer");
- switch (Element_Code)
- {
- case 4 :
- case 5 : Element_Info("STSA"); break;
- case 6 :
- case 7 : Element_Info("RADL"); break;
- case 8 :
- case 9 : Element_Info("RASL"); break;
- default: ;
- }
- #endif //MEDIAINFO_TRACE
-
- //Parsing
- Skip_XX(Element_Size-Element_Offset, "(ToDo)");
-}
-
-//---------------------------------------------------------------------------
-// Packet "32"
-void File_Hevc::video_parameter_set()
-{
- Element_Name("video_parameter_set");
-
- //Parsing
- int32u vps_num_layer_sets_minus1;
- int8u vps_video_parameter_set_id, vps_max_sub_layers_minus1, vps_max_layer_id;
- bool vps_temporal_id_nesting_flag, vps_sub_layer_ordering_info_present_flag;
- BS_Begin();
- Get_S1 (4, vps_video_parameter_set_id, "vps_video_parameter_set_id");
- if (MustParse_VPS_SPS_PPS_FromFlv)
- {
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- //Creating Data
- if (vps_video_parameter_set_id>=video_parameter_sets.size())
- video_parameter_sets.resize(vps_video_parameter_set_id+1);
- std::vector<video_parameter_set_struct*>::iterator Data_Item=video_parameter_sets.begin()+vps_video_parameter_set_id;
- delete *Data_Item; *Data_Item=new video_parameter_set_struct(
- 0 //TODO: check which code is intended here
- );
-
- //NextCode
- NextCode_Clear();
- NextCode_Add(33);
-
- //Autorisation of other streams
- Streams[33].Searching_Payload=true; //seq_parameter_set
- Streams[36].Searching_Payload=true; //end_of_seq
- Streams[37].Searching_Payload=true; //end_of_bitstream
- Streams[38].Searching_Payload=true; //filler_data
-
- return;
- }
- Skip_S1(2, "vps_reserved_three_2bits");
- Skip_S1(6, "vps_reserved_zero_6bits");
- Get_S1 (3, vps_max_sub_layers_minus1, "vps_max_sub_layers_minus1");
- if (vps_max_sub_layers_minus1>6)
- {
- Trusted_IsNot("vps_max_sub_layers_minus1 not valid");
- BS_End();
- return; //Problem, not valid
- }
- Get_SB ( vps_temporal_id_nesting_flag, "vps_temporal_id_nesting_flag");
- //if (vps_max_sub_layers_minus1==0 && !vps_temporal_id_nesting_flag)
- //{
- // Trusted_IsNot("vps_temporal_id_nesting_flag not valid");
- // BS_End();
- // return; //Problem, not valid
- //}
- Skip_S2(16, "vps_reserved_0xffff_16bits");
- profile_tier_level(vps_max_sub_layers_minus1);
- Get_SB ( vps_sub_layer_ordering_info_present_flag, "vps_sub_layer_ordering_info_present_flag");
- for (int32u SubLayerPos=(vps_sub_layer_ordering_info_present_flag?0:vps_max_sub_layers_minus1); SubLayerPos<=vps_max_sub_layers_minus1; SubLayerPos++)
- {
- Element_Begin1("SubLayer");
- Skip_UE( "vps_max_dec_pic_buffering_minus1");
- Skip_UE( "vps_max_num_reorder_pics");
- Skip_UE( "vps_max_latency_increase_plus1");
- Element_End0();
- }
- Get_S1 ( 6, vps_max_layer_id, "vps_max_layer_id");
- Get_UE ( vps_num_layer_sets_minus1, "vps_num_layer_sets_minus1");
- if (vps_num_layer_sets_minus1>=1024)
- {
- Trusted_IsNot("vps_num_layer_sets_minus1 not valid");
- BS_End();
- return; //Problem, not valid
- }
- for (int32u LayerSetPos=1; LayerSetPos<=vps_num_layer_sets_minus1; LayerSetPos++)
- for (int8u LayerId=0; LayerId<=vps_max_layer_id; LayerId++)
- Skip_SB( "layer_id_included_flag");
- TEST_SB_SKIP( "vps_timing_info_present_flag");
- int32u vps_time_scale, vps_num_hrd_parameters;
- Skip_S4(32, "vps_num_units_in_tick");
- Get_S4 (32, vps_time_scale, "vps_time_scale");
- if (vps_time_scale==0)
- {
- Trusted_IsNot("vps_time_scale not valid");
- Element_End0();
- BS_End();
- return; //Problem, not valid
- }
- TEST_SB_SKIP( "vps_poc_proportional_to_timing_flag");
- Skip_UE( "vps_num_ticks_poc_diff_one_minus1");
- TEST_SB_END();
- Get_UE ( vps_num_hrd_parameters, "vps_num_hrd_parameters");
- if (vps_num_hrd_parameters>1024)
- {
- Trusted_IsNot("vps_num_hrd_parameters not valid");
- vps_num_hrd_parameters=0;
- }
- for (int32u HrdPos=0; HrdPos<vps_num_hrd_parameters; HrdPos++)
- {
- int32u hrd_layer_set_idx;
- Get_UE ( hrd_layer_set_idx, "hrd_layer_set_idx");
- if (hrd_layer_set_idx>=1024)
- Trusted_IsNot("hrd_layer_set_idx not valid");
- if (HrdPos)
- Skip_SB( "cprms_present_flag");
- Trusted_IsNot("hrd_parameters not supported");
- //hrd_parameters
- }
- TEST_SB_END();
- TESTELSE_SB_SKIP( "vps_extension_flag");
- Skip_BS(Data_BS_Remain(), "vps_extension_data");
- Trusted_IsNot("(Not supported)"); // Should be skipped, but the detection is too sensible in that case, do not remove it until the detection is adapted
- TESTELSE_SB_ELSE( "vps_extension_flag");
- Mark_1();
- while (Data_BS_Remain())
- Mark_0();
- TESTELSE_SB_END();
- BS_End();
-
- FILLING_BEGIN_PRECISE();
- //Creating Data
- if (vps_video_parameter_set_id>=video_parameter_sets.size())
- video_parameter_sets.resize(vps_video_parameter_set_id+1);
- std::vector<video_parameter_set_struct*>::iterator Data_Item=video_parameter_sets.begin()+vps_video_parameter_set_id;
- delete *Data_Item; *Data_Item=new video_parameter_set_struct(
- vps_max_sub_layers_minus1
- );
-
- //NextCode
- NextCode_Clear();
- NextCode_Add(33);
-
- //Autorisation of other streams
- Streams[33].Searching_Payload=true; //seq_parameter_set
- Streams[36].Searching_Payload=true; //end_of_seq
- Streams[37].Searching_Payload=true; //end_of_bitstream
- Streams[38].Searching_Payload=true; //filler_data
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "33"
-void File_Hevc::seq_parameter_set()
-{
- Element_Name("seq_parameter_set");
-
- //Parsing
- seq_parameter_set_struct::vui_parameters_struct* vui_parameters_Item=NULL;
- int32u sps_seq_parameter_set_id, chroma_format_idc, pic_width_in_luma_samples, pic_height_in_luma_samples, bit_depth_luma_minus8, bit_depth_chroma_minus8, log2_max_pic_order_cnt_lsb_minus4, num_short_term_ref_pic_sets;
- int32u conf_win_left_offset=0, conf_win_right_offset=0, conf_win_top_offset=0, conf_win_bottom_offset=0;
- int8u video_parameter_set_id, max_sub_layers_minus1;
- bool separate_colour_plane_flag=false, sps_sub_layer_ordering_info_present_flag;
- BS_Begin();
- Get_S1 (4, video_parameter_set_id, "sps_video_parameter_set_id");
- std::vector<video_parameter_set_struct*>::iterator video_parameter_set_Item;
- if (video_parameter_set_id >= video_parameter_sets.size() || (*(video_parameter_set_Item = video_parameter_sets.begin() + video_parameter_set_id)) == NULL)
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (video_parameter_set is missing)");
- BS_End();
- return;
- }
- Get_S1 (3, max_sub_layers_minus1, "sps_max_sub_layers_minus1");
- Skip_SB( "sps_temporal_id_nesting_flag");
- profile_tier_level(max_sub_layers_minus1);
- Get_UE ( sps_seq_parameter_set_id, "sps_seq_parameter_set_id");
- if (MustParse_VPS_SPS_PPS_FromFlv)
- {
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- //Creating Data
- if (sps_seq_parameter_set_id>=seq_parameter_sets.size())
- seq_parameter_sets.resize(sps_seq_parameter_set_id+1);
- std::vector<seq_parameter_set_struct*>::iterator Data_Item=seq_parameter_sets.begin()+sps_seq_parameter_set_id;
- delete *Data_Item; *Data_Item=new seq_parameter_set_struct(
- NULL, //TODO: check which code is intended here
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- false,
- false,
- false
- );
-
- //NextCode
- NextCode_Clear();
- NextCode_Add(34);
-
- //Autorisation of other streams
- Streams[34].Searching_Payload=true; //pic_parameter_set
-
- return;
- }
- Get_UE ( chroma_format_idc, "chroma_format_idc"); Param_Info1(Hevc_chroma_format_idc((int8u)chroma_format_idc));
- if (chroma_format_idc>=4)
- {
- Trusted_IsNot("chroma_format_idc not valid");
- BS_End();
- return; //Problem, not valid
- }
- if (chroma_format_idc==3)
- Get_SB (separate_colour_plane_flag, "separate_colour_plane_flag");
- Get_UE ( pic_width_in_luma_samples, "pic_width_in_luma_samples");
- Get_UE ( pic_height_in_luma_samples, "pic_height_in_luma_samples");
- TEST_SB_SKIP( "conformance_window_flag");
- Get_UE (conf_win_left_offset, "conf_win_left_offset");
- Get_UE (conf_win_right_offset, "conf_win_right_offset");
- Get_UE (conf_win_top_offset, "conf_win_top_offset");
- Get_UE (conf_win_bottom_offset, "conf_win_bottom_offset");
- TEST_SB_END();
- Get_UE ( bit_depth_luma_minus8, "bit_depth_luma_minus8");
- if (bit_depth_luma_minus8>6)
- {
- Trusted_IsNot("bit_depth_luma_minus8 not valid");
- return; //Problem, not valid
- }
- Get_UE ( bit_depth_chroma_minus8, "bit_depth_chroma_minus8");
- if (bit_depth_chroma_minus8>6)
- {
- Trusted_IsNot("bit_depth_chroma_minus8 not valid");
- return; //Problem, not valid
- }
- Get_UE ( log2_max_pic_order_cnt_lsb_minus4, "log2_max_pic_order_cnt_lsb_minus4");
- if (log2_max_pic_order_cnt_lsb_minus4>12)
- {
- Trusted_IsNot("log2_max_pic_order_cnt_lsb_minus4 not valid");
- return; //Problem, not valid
- }
- Get_SB ( sps_sub_layer_ordering_info_present_flag, "sps_sub_layer_ordering_info_present_flag");
- for (int32u SubLayerPos = (sps_sub_layer_ordering_info_present_flag ? 0 : max_sub_layers_minus1); SubLayerPos <= max_sub_layers_minus1; SubLayerPos++)
- {
- Element_Begin1("SubLayer");
- Skip_UE( "sps_max_dec_pic_buffering_minus1");
- Skip_UE( "sps_max_num_reorder_pics");
- Skip_UE( "sps_max_latency_increase_plus1");
- Element_End0();
- }
- Skip_UE( "log2_min_luma_coding_block_size_minus3");
- Skip_UE( "log2_diff_max_min_luma_coding_block_size");
- Skip_UE( "log2_min_transform_block_size_minus2");
- Skip_UE( "log2_diff_max_min_transform_block_size");
- Skip_UE( "max_transform_hierarchy_depth_inter");
- Skip_UE( "max_transform_hierarchy_depth_intra");
- TEST_SB_SKIP( "scaling_list_enabled_flag");
- TEST_SB_SKIP( "sps_scaling_list_data_present_flag");
- scaling_list_data();
- TEST_SB_END();
- TEST_SB_END();
- Skip_SB( "amp_enabled_flag");
- Skip_SB( "sample_adaptive_offset_enabled_flag");
- TEST_SB_SKIP( "pcm_enabled_flag");
- Element_Begin1("pcm");
- Skip_S1(4, "pcm_sample_bit_depth_luma_minus1");
- Skip_S1(4, "pcm_sample_bit_depth_chroma_minus1");
- Skip_UE( "log2_min_pcm_luma_coding_block_size_minus3");
- Skip_UE( "log2_diff_max_min_pcm_luma_coding_block_size");
- Skip_SB( "pcm_loop_filter_disabled_flag");
- Element_End0();
- TEST_SB_END();
- Get_UE ( num_short_term_ref_pic_sets, "num_short_term_ref_pic_sets");
- if (num_short_term_ref_pic_sets>64)
- {
- BS_End();
- Trusted_IsNot("num_short_term_ref_pic_sets not valid");
- return; //Problem, not valid
- }
- short_term_ref_pic_sets((int8u)num_short_term_ref_pic_sets);
- TEST_SB_SKIP( "long_term_ref_pics_present_flag");
- Element_Begin1("long_term_ref_pics");
- int32u num_long_term_ref_pics_sps;
- Get_UE (num_long_term_ref_pics_sps, "num_long_term_ref_pics_sps");
- for (int32u long_term_ref_pics_sps_pos=0; long_term_ref_pics_sps_pos<num_long_term_ref_pics_sps; long_term_ref_pics_sps_pos++)
- {
- Skip_BS(log2_max_pic_order_cnt_lsb_minus4+4, "lt_ref_pic_poc_lsb_sps");
- Skip_SB( "used_by_curr_pic_lt_sps_flag");
- }
- Element_End0();
- TEST_SB_END();
- Skip_SB( "sps_temporal_mvp_enabled_flag");
- Skip_SB( "strong_intra_smoothing_enabled_flag");
- TEST_SB_SKIP( "vui_parameters_present_flag");
- vui_parameters(video_parameter_set_Item, vui_parameters_Item);
- TEST_SB_END();
- TESTELSE_SB_SKIP( "sps_extension_flag");
- Skip_BS(Data_BS_Remain(), "sps_extension_data");
- Trusted_IsNot("(Not supported)"); // Should be skipped, but the detection is too sensible in that case, do not remove it until the detection is adapted
- TESTELSE_SB_ELSE( "sps_extension_flag");
- Mark_1();
- while (Data_BS_Remain())
- Mark_0();
- TESTELSE_SB_END();
- BS_End();
-
- FILLING_BEGIN_PRECISE();
- //Creating Data
- if (sps_seq_parameter_set_id>=seq_parameter_sets.size())
- seq_parameter_sets.resize(sps_seq_parameter_set_id+1);
- std::vector<seq_parameter_set_struct*>::iterator Data_Item=seq_parameter_sets.begin()+sps_seq_parameter_set_id;
- delete *Data_Item; *Data_Item=new seq_parameter_set_struct(
- vui_parameters_Item,
- profile_space,
- profile_idc,
- level_idc,
- pic_width_in_luma_samples,
- pic_height_in_luma_samples,
- conf_win_left_offset,
- conf_win_right_offset,
- conf_win_top_offset,
- conf_win_bottom_offset,
- (int8u)video_parameter_set_id,
- (int8u)chroma_format_idc,
- separate_colour_plane_flag,
- (int8u)log2_max_pic_order_cnt_lsb_minus4,
- (int8u)bit_depth_luma_minus8,
- (int8u)bit_depth_chroma_minus8,
- general_progressive_source_flag,
- general_interlaced_source_flag,
- general_frame_only_constraint_flag
- );
-
- //NextCode
- NextCode_Clear();
- NextCode_Add(34);
-
- //Autorisation of other streams
- Streams[34].Searching_Payload=true; //pic_parameter_set
- FILLING_ELSE();
- delete vui_parameters_Item; //vui_parameters_Item=NULL;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "34"
-void File_Hevc::pic_parameter_set()
-{
- Element_Name("pic_parameter_set");
-
- //Parsing
- int32u pps_pic_parameter_set_id, pps_seq_parameter_set_id, num_ref_idx_l0_default_active_minus1, num_ref_idx_l1_default_active_minus1;
- int8u num_extra_slice_header_bits;
- bool tiles_enabled_flag, dependent_slice_segments_enabled_flag;
- BS_Begin();
- Get_UE ( pps_pic_parameter_set_id, "pps_pic_parameter_set_id");
- if (pps_pic_parameter_set_id>=64)
- {
- Trusted_IsNot("pic_parameter_set_id not valid");
- BS_End();
- return; //Problem, not valid
- }
- Get_UE ( pps_seq_parameter_set_id, "pps_seq_parameter_set_id");
- if (pps_seq_parameter_set_id>=16)
- {
- Trusted_IsNot("seq_parameter_set_id not valid");
- return; //Problem, not valid
- }
- //std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item;
- if (pps_seq_parameter_set_id>=seq_parameter_sets.size() || (*(seq_parameter_sets.begin()+pps_seq_parameter_set_id))==NULL) //(seq_parameter_set_Item=seq_parameter_sets.begin()+pps_seq_parameter_set_id) not usd for the moment
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (seq_parameter_set is missing)");
- BS_End();
- return;
- }
- if (MustParse_VPS_SPS_PPS_FromFlv)
- {
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- //Filling
- if (pps_pic_parameter_set_id>=pic_parameter_sets.size())
- pic_parameter_sets.resize(pps_pic_parameter_set_id+1);
- std::vector<pic_parameter_set_struct*>::iterator pic_parameter_sets_Item=pic_parameter_sets.begin()+pps_pic_parameter_set_id;
- delete *pic_parameter_sets_Item; *pic_parameter_sets_Item=new pic_parameter_set_struct(
- 0,
- 0,
- 0,
- 0,
- false
- );
-
- //NextCode
- NextCode_Clear();
-
- //Autorisation of other streams
- Streams[ 0].Searching_Payload=true; //slice_segment_layer
- Streams[ 1].Searching_Payload=true; //slice_segment_layer
- Streams[ 2].Searching_Payload=true; //slice_segment_layer
- Streams[ 3].Searching_Payload=true; //slice_segment_layer
- Streams[ 4].Searching_Payload=true; //slice_layer
- Streams[ 5].Searching_Payload=true; //slice_layer
- Streams[ 6].Searching_Payload=true; //slice_layer
- Streams[ 7].Searching_Payload=true; //slice_layer
- Streams[ 8].Searching_Payload=true; //slice_layer
- Streams[ 9].Searching_Payload=true; //slice_layer
- Streams[16].Searching_Payload=true; //slice_segment_layer
- Streams[17].Searching_Payload=true; //slice_segment_layer
- Streams[18].Searching_Payload=true; //slice_segment_layer
- Streams[19].Searching_Payload=true; //slice_segment_layer
- Streams[20].Searching_Payload=true; //slice_segment_layer
- Streams[21].Searching_Payload=true; //slice_segment_layer
-
- return;
- }
- Get_SB ( dependent_slice_segments_enabled_flag, "dependent_slice_segments_enabled_flag");
- Skip_SB( "output_flag_present_flag");
- Get_S1 (3, num_extra_slice_header_bits, "num_extra_slice_header_bits");
- Skip_SB( "sign_data_hiding_flag");
- Skip_SB( "cabac_init_present_flag");
- Get_UE ( num_ref_idx_l0_default_active_minus1, "num_ref_idx_l0_default_active_minus1");
- Get_UE ( num_ref_idx_l1_default_active_minus1, "num_ref_idx_l1_default_active_minus1");
- Skip_SE( "init_qp_minus26");
- Skip_SB( "constrained_intra_pred_flag");
- Skip_SB( "transform_skip_enabled_flag");
- TEST_SB_SKIP( "cu_qp_delta_enabled_flag");
- Skip_UE( "diff_cu_qp_delta_depth");
- TEST_SB_END();
- Skip_SE( "pps_cb_qp_offset");
- Skip_SE( "pps_cr_qp_offset");
- Skip_SB( "pps_slice_chroma_qp_offsets_present_flag");
- Skip_SB( "weighted_pred_flag");
- Skip_SB( "weighted_bipred_flag");
- Skip_SB( "transquant_bypass_enable_flag");
- Get_SB ( tiles_enabled_flag, "tiles_enabled_flag");
- Skip_SB( "entropy_coding_sync_enabled_flag");
- if (tiles_enabled_flag)
- {
- Element_Begin1("tiles");
- int32u num_tile_columns_minus1, num_tile_rows_minus1;
- bool uniform_spacing_flag;
- Get_UE ( num_tile_columns_minus1, "num_tile_columns_minus1");
- Get_UE ( num_tile_rows_minus1, "num_tile_rows_minus1");
- Get_SB ( uniform_spacing_flag, "uniform_spacing_flag");
- if (!uniform_spacing_flag)
- {
- for (int32u tile_pos=0; tile_pos<num_tile_columns_minus1; tile_pos++)
- Skip_UE( "column_width_minus1");
- for (int32u tile_pos=0; tile_pos<num_tile_rows_minus1; tile_pos++)
- Skip_UE( "row_height_minus1");
- }
- Skip_SB( "loop_filter_across_tiles_enabled_flag");
- Element_End0();
- }
- Skip_SB( "pps_loop_filter_across_slices_enabled_flag");
- TEST_SB_SKIP( "deblocking_filter_control_present_flag");
- bool pps_disable_deblocking_filter_flag;
- Skip_SB( "deblocking_filter_override_enabled_flag");
- Get_SB ( pps_disable_deblocking_filter_flag, "pps_disable_deblocking_filter_flag");
- if (!pps_disable_deblocking_filter_flag)
- {
- Skip_SE( "pps_beta_offset_div2");
- Skip_SE( "pps_tc_offset_div2");
- }
- TEST_SB_END();
- TEST_SB_SKIP( "pps_scaling_list_data_present_flag ");
- scaling_list_data();
- TEST_SB_END();
- Skip_SB( "lists_modification_present_flag");
- Skip_UE( "log2_parallel_merge_level_minus2");
- Skip_SB( "slice_segment_header_extension_present_flag");
- TESTELSE_SB_SKIP( "pps_extension_flag");
- Skip_BS(Data_BS_Remain(), "pps_extension_data");
- Trusted_IsNot("(Not supported)"); // Should be skipped, but the detection is too sensible in that case, do not remove it until the detection is adapted
- TESTELSE_SB_ELSE( "pps_extension_flag");
- Mark_1();
- while (Data_BS_Remain())
- Mark_0();
- TESTELSE_SB_END();
- BS_End();
-
- FILLING_BEGIN_PRECISE();
- //NextCode
- //NextCode_Clear();
- //NextCode_Add(0x05);
- //NextCode_Add(0x06);
-
- //Filling
- if (pps_pic_parameter_set_id>=pic_parameter_sets.size())
- pic_parameter_sets.resize(pps_pic_parameter_set_id+1);
- std::vector<pic_parameter_set_struct*>::iterator pic_parameter_sets_Item=pic_parameter_sets.begin()+pps_pic_parameter_set_id;
- delete *pic_parameter_sets_Item; *pic_parameter_sets_Item = new pic_parameter_set_struct(
- (int8u)pps_seq_parameter_set_id,
- (int8u)num_ref_idx_l0_default_active_minus1,
- (int8u)num_ref_idx_l1_default_active_minus1,
- num_extra_slice_header_bits,
- dependent_slice_segments_enabled_flag
- );
- //Autorisation of other streams
- //if (!seq_parameter_sets.empty())
- //{
- // for (int8u Pos=0x01; Pos<=0x06; Pos++)
- // {
- // Streams[Pos].Searching_Payload=true; //Coded slice...
- // if (Streams[0x08].ShouldDuplicate)
- // Streams[Pos].ShouldDuplicate=true;
- // }
- //}
-
- //NextCode
- NextCode_Clear();
-
- //Autorisation of other streams
- Streams[ 0].Searching_Payload=true; //slice_segment_layer
- Streams[ 1].Searching_Payload=true; //slice_segment_layer
- Streams[ 2].Searching_Payload=true; //slice_segment_layer
- Streams[ 3].Searching_Payload=true; //slice_segment_layer
- Streams[ 4].Searching_Payload=true; //slice_layer
- Streams[ 5].Searching_Payload=true; //slice_layer
- Streams[ 6].Searching_Payload=true; //slice_layer
- Streams[ 7].Searching_Payload=true; //slice_layer
- Streams[ 8].Searching_Payload=true; //slice_layer
- Streams[ 9].Searching_Payload=true; //slice_layer
- Streams[16].Searching_Payload=true; //slice_segment_layer
- Streams[17].Searching_Payload=true; //slice_segment_layer
- Streams[18].Searching_Payload=true; //slice_segment_layer
- Streams[19].Searching_Payload=true; //slice_segment_layer
- Streams[20].Searching_Payload=true; //slice_segment_layer
- Streams[21].Searching_Payload=true; //slice_segment_layer
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "35"
-void File_Hevc::access_unit_delimiter()
-{
- Element_Name("access_unit_delimiter");
-
- //Parsing
- BS_Begin();
- Info_S1( 3, pic_type, "pic_type"); Param_Info1(Hevc_pic_type[pic_type]);
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-// Packet "36"
-void File_Hevc::end_of_seq()
-{
- Element_Name("end_of_seq");
-}
-
-//---------------------------------------------------------------------------
-// Packet "37"
-void File_Hevc::end_of_bitstream()
-{
- Element_Name("end_of_bitstream");
-}
-
-//---------------------------------------------------------------------------
-// Packet "38"
-void File_Hevc::filler_data()
-{
- Element_Name("filler_data");
-
- //Parsing
- Skip_XX(Element_Size, "ff_bytes");
-}
-
-//---------------------------------------------------------------------------
-// Packet "39" or "40
-void File_Hevc::sei()
-{
- Element_Name("sei");
-
- //Parsing
- int32u seq_parameter_set_id=(int32u)-1;
- while(Element_Offset+1<Element_Size)
- {
- Element_Begin1("sei message");
- sei_message(seq_parameter_set_id);
- Element_End0();
- }
- BS_Begin();
- Mark_1( );
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::sei_message(int32u &seq_parameter_set_id)
-{
- //Parsing
- int32u payloadType=0, payloadSize=0;
- int8u payload_type_byte, payload_size_byte;
- Element_Begin1("sei message header");
- do
- {
- Get_B1 (payload_type_byte, "payload_type_byte");
- payloadType+=payload_type_byte;
- }
- while(payload_type_byte==0xFF);
- do
- {
- Get_B1 (payload_size_byte, "payload_size_byte");
- payloadSize+=payload_size_byte;
- }
- while(payload_size_byte==0xFF);
- Element_End0();
-
- int64u Element_Offset_Save=Element_Offset+payloadSize;
- if (Element_Offset_Save>Element_Size)
- {
- Trusted_IsNot("Wrong size");
- Skip_XX(Element_Size-Element_Offset, "unknown");
- return;
- }
- int64u Element_Size_Save=Element_Size;
- Element_Size=Element_Offset_Save;
- switch (payloadType)
- {
- case 0 : sei_message_buffering_period(seq_parameter_set_id, payloadSize); break;
- case 1 : sei_message_pic_timing(seq_parameter_set_id, payloadSize); break;
- //case 4 : sei_message_user_data_registered_itu_t_t35(); break;
- case 5 : sei_message_user_data_unregistered(payloadSize); break;
- //case 6 : sei_message_recovery_point(); break;
- //case 32 : sei_message_mainconcept(payloadSize); break;
- case 129 : sei_message_active_parameter_sets(); break;
- case 132 : sei_message_decoded_picture_hash(payloadSize); break;
- default :
- Element_Info1("unknown");
- Skip_XX(payloadSize, "data");
- }
- Element_Offset=Element_Offset_Save; //Positionning in the right place.
- Element_Size=Element_Size_Save; //Positionning in the right place.
-}
-
-//---------------------------------------------------------------------------
-// SEI - 0
-void File_Hevc::sei_message_buffering_period(int32u &seq_parameter_set_id, int32u payloadSize)
-{
- Element_Info1("buffering_period");
-
- //Parsing
- if (Element_Offset==Element_Size)
- return; //Nothing to do
- BS_Begin();
- Get_UE (seq_parameter_set_id, "seq_parameter_set_id");
- std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item;
- if (seq_parameter_set_id>=seq_parameter_sets.size() || (*(seq_parameter_set_Item=seq_parameter_sets.begin()+seq_parameter_set_id))==NULL)
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (seq_parameter_set is missing)");
- BS_End();
- return;
- }
- bool sub_pic_hrd_params_present_flag=false; //Default
- bool irap_cpb_params_present_flag=((*seq_parameter_set_Item)->vui_parameters && (*seq_parameter_set_Item)->vui_parameters->xxL_Common)?(*seq_parameter_set_Item)->vui_parameters->xxL_Common->sub_pic_hrd_params_present_flag:false;
- if (!sub_pic_hrd_params_present_flag)
- Get_SB (irap_cpb_params_present_flag, "irap_cpb_params_present_flag");
- int8u au_cpb_removal_delay_length_minus1=((*seq_parameter_set_Item)->vui_parameters && (*seq_parameter_set_Item)->vui_parameters->xxL_Common)?(*seq_parameter_set_Item)->vui_parameters->xxL_Common->au_cpb_removal_delay_length_minus1:23;
- int8u dpb_output_delay_length_minus1=((*seq_parameter_set_Item)->vui_parameters && (*seq_parameter_set_Item)->vui_parameters->xxL_Common)?(*seq_parameter_set_Item)->vui_parameters->xxL_Common->dpb_output_delay_length_minus1:23;
- if (irap_cpb_params_present_flag)
- {
- Skip_S4(au_cpb_removal_delay_length_minus1+1, "cpb_delay_offset");
- Skip_S4(dpb_output_delay_length_minus1+1, "dpb_delay_offset");
- }
- Skip_SB( "concatenation_flag");
- Skip_S4(au_cpb_removal_delay_length_minus1+1, "au_cpb_removal_delay_delta_minus1");
- if ((*seq_parameter_set_Item)->NalHrdBpPresentFlag())
- sei_message_buffering_period_xxl((*seq_parameter_set_Item)->vui_parameters?(*seq_parameter_set_Item)->vui_parameters->xxL_Common:NULL, irap_cpb_params_present_flag, (*seq_parameter_set_Item)->vui_parameters->NAL);
- if ((*seq_parameter_set_Item)->VclHrdBpPresentFlag())
- sei_message_buffering_period_xxl((*seq_parameter_set_Item)->vui_parameters?(*seq_parameter_set_Item)->vui_parameters->xxL_Common:NULL, irap_cpb_params_present_flag, (*seq_parameter_set_Item)->vui_parameters->VCL);
- BS_End();
-}
-
-void File_Hevc::sei_message_buffering_period_xxl(seq_parameter_set_struct::vui_parameters_struct::xxl_common* xxL_Common, bool irap_cpb_params_present_flag, seq_parameter_set_struct::vui_parameters_struct::xxl* xxl)
-{
- if (xxL_Common==NULL || xxl==NULL)
- {
- //Problem?
- Skip_BS(Data_BS_Remain(), "Problem?");
- return;
- }
- for (int32u SchedSelIdx=0; SchedSelIdx<xxl->SchedSel.size(); SchedSelIdx++)
- {
- //Get_S4 (xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay_length_minus1+1, xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay, "initial_cpb_removal_delay"); Param_Info2(xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay/90, " ms");
- //Get_S4 (xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay_length_minus1+1, xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay_offset, "initial_cpb_removal_delay_offset"); Param_Info2(xxl->SchedSel[SchedSelIdx].initial_cpb_removal_delay_offset/90, " ms");
- Info_S4 (xxL_Common->initial_cpb_removal_delay_length_minus1+1, initial_cpb_removal_delay, "initial_cpb_removal_delay"); Param_Info2(initial_cpb_removal_delay/90, " ms");
- Info_S4 (xxL_Common->initial_cpb_removal_delay_length_minus1+1, initial_cpb_removal_delay_offset, "initial_cpb_removal_delay_offset"); Param_Info2(initial_cpb_removal_delay_offset/90, " ms");
- if (xxL_Common->sub_pic_hrd_params_present_flag || irap_cpb_params_present_flag)
- {
- Info_S4 (xxL_Common->initial_cpb_removal_delay_length_minus1+1, initial_alt_cpb_removal_delay, "initial_alt_cpb_removal_delay"); Param_Info2(initial_alt_cpb_removal_delay/90, " ms");
- Info_S4 (xxL_Common->initial_cpb_removal_delay_length_minus1+1, initial_alt_cpb_removal_delay_offset, "initial_alt_cpb_removal_delay_offset"); Param_Info2(initial_alt_cpb_removal_delay_offset/90, " ms");
- }
- }
-}
-
-//---------------------------------------------------------------------------
-// SEI - 1
-void File_Hevc::sei_message_pic_timing(int32u &seq_parameter_set_id, int32u payloadSize)
-{
- Element_Info1("pic_timing");
-
- //Testing if we can parsing it now. TODO: handle case seq_parameter_set_id is unknown (buffering of message, decoding in slice parsing)
- if (seq_parameter_set_id==(int32u)-1 && seq_parameter_sets.size()==1)
- seq_parameter_set_id=0;
- std::vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item;
- if (seq_parameter_set_id>=seq_parameter_sets.size() || (*(seq_parameter_set_Item=seq_parameter_sets.begin()+seq_parameter_set_id))==NULL)
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (seq_parameter_set is missing)");
- return;
- }
-
- //Parsing
- BS_Begin();
- if ((*seq_parameter_set_Item)->vui_parameters?(*seq_parameter_set_Item)->vui_parameters->frame_field_info_present_flag:((*seq_parameter_set_Item)->general_progressive_source_flag && (*seq_parameter_set_Item)->general_interlaced_source_flag))
- {
- Skip_S1(4, "pic_struct");
- Skip_S1(2, "source_scan_type");
- Skip_SB( "duplicate_flag");
- }
- if ((*seq_parameter_set_Item)->CpbDpbDelaysPresentFlag())
- {
- int8u au_cpb_removal_delay_length_minus1=(*seq_parameter_set_Item)->vui_parameters->xxL_Common->au_cpb_removal_delay_length_minus1;
- int8u dpb_output_delay_length_minus1=(*seq_parameter_set_Item)->vui_parameters->xxL_Common->dpb_output_delay_length_minus1;
- bool sub_pic_hrd_params_present_flag=(*seq_parameter_set_Item)->vui_parameters->xxL_Common->sub_pic_hrd_params_present_flag;
- Skip_S4(au_cpb_removal_delay_length_minus1+1, "au_cpb_removal_delay_minus1");
- Skip_S4(dpb_output_delay_length_minus1+1, "pic_dpb_output_delay");
- if (sub_pic_hrd_params_present_flag)
- {
- int8u dpb_output_delay_du_length_minus1=(*seq_parameter_set_Item)->vui_parameters->xxL_Common->dpb_output_delay_du_length_minus1;
- Skip_S4(dpb_output_delay_du_length_minus1+1, "pic_dpb_output_du_delay");
- }
- }
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5
-void File_Hevc::sei_message_user_data_unregistered(int32u payloadSize)
-{
- Element_Info1("user_data_unregistered");
-
- //Parsing
- int128u uuid_iso_iec_11578;
- Get_GUID(uuid_iso_iec_11578, "uuid_iso_iec_11578");
-
- switch (uuid_iso_iec_11578.hi)
- {
- case 0x214892b89bCC7f42LL : Element_Info1("Ateme");
- sei_message_user_data_unregistered_Ateme(payloadSize-16); break;
- case 0xDB4717b509DEA22CLL : Element_Info1("x265");
- sei_message_user_data_unregistered_x265(payloadSize-16); break;
- default :
- Element_Info1("unknown");
- Skip_XX(payloadSize-16, "data");
- }
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5 - Ateme
-void File_Hevc::sei_message_user_data_unregistered_Ateme(int32u payloadSize)
-{
- //Parsing
- Get_Local(payloadSize, Encoded_Library, "Library name");
-
- //Encoded_Library
- if (Encoded_Library.find(__T("ATEME "))==0)
- {
- size_t Pos=Encoded_Library.find_first_of(__T("0123456789"));
- if (Pos && Encoded_Library[Pos-1]==__T(' '))
- {
- Encoded_Library_Name=Encoded_Library.substr(0, Pos-1);
- Encoded_Library_Version=Encoded_Library.substr(Pos);
- }
- }
-}
-
-//---------------------------------------------------------------------------
-// SEI - 5 - x265
-void File_Hevc::sei_message_user_data_unregistered_x265(int32u payloadSize)
-{
- //Parsing
- Ztring Data;
- Peek_Local(payloadSize, Data);
- if (Data.size()!=payloadSize && Data.size()+1!=payloadSize)
- {
- Skip_XX(payloadSize, "Unknown");
- return; //This is not a text string
- }
- size_t Data_Pos_Before=0;
- size_t Loop=0;
- do
- {
- size_t Data_Pos=Data.find(__T(" - "), Data_Pos_Before);
- if (Data_Pos==std::string::npos)
- Data_Pos=Data.size();
- if (Data.find(__T("options: "), Data_Pos_Before)==Data_Pos_Before)
- {
- Element_Begin1("options");
- size_t Options_Pos_Before=Data_Pos_Before;
- Encoded_Library_Settings.clear();
- do
- {
- size_t Options_Pos=Data.find(__T(" "), Options_Pos_Before);
- if (Options_Pos==std::string::npos)
- Options_Pos=Data.size();
- Ztring option;
- Get_Local (Options_Pos-Options_Pos_Before, option, "option");
- Options_Pos_Before=Options_Pos;
- do
- {
- Ztring Separator;
- Peek_Local(1, Separator);
- if (Separator==__T(" "))
- {
- Skip_Local(1, "separator");
- Options_Pos_Before+=1;
- }
- else
- break;
- }
- while (Options_Pos_Before!=Data.size());
-
- //Filling
- if (option!=__T("options:") && !(!option.empty() && option[0]>=__T('0') && option[0]<=__T('9')) && option.find(__T("fps="))!=0 && option.find(__T("bitdepth="))!=0) //Ignoring redundant information e.g. width, height, frame rate, bit depth
- {
- if (!Encoded_Library_Settings.empty())
- Encoded_Library_Settings+=__T(" / ");
- Encoded_Library_Settings+=option;
- }
- }
- while (Options_Pos_Before!=Data.size());
- Element_End0();
- }
- else
- {
- Ztring Value;
- Get_Local(Data_Pos-Data_Pos_Before, Value, "data");
-
- //Saving
- if (Loop==0)
- {
- //Cleaning a little the value
- while (!Value.empty() && Value[0]<0x30)
- Value.erase(Value.begin());
- while (!Value.empty() && Value[Value.size()-1]<0x30)
- Value.erase(Value.end()-1);
- size_t Value_Pos=Value.find(__T(" "));
- if (Value_Pos!=string::npos)
- Value.resize(Value_Pos);
- Encoded_Library=Value;
- }
- if (Loop==1 && Encoded_Library.find(__T("x265"))==0)
- {
- size_t Value_Pos=Value.find(__T(" 8bpp"));
- if (Value_Pos!=string::npos)
- Value.resize(Value_Pos);
-
- Encoded_Library+=__T(" - ");
- Encoded_Library+=Value;
- }
- }
- Data_Pos_Before=Data_Pos;
- if (Data_Pos_Before+3<=Data.size())
- {
- Skip_Local(3, "separator");
- Data_Pos_Before+=3;
- }
-
- Loop++;
- }
- while (Data_Pos_Before!=Data.size());
-
- //Encoded_Library
- if (Encoded_Library.find(__T("x265 - "))==0)
- {
- Encoded_Library_Name=__T("x265");
- Encoded_Library_Version=Encoded_Library.SubString(__T("x265 - "), Ztring());
- }
- else
- Encoded_Library_Name=Encoded_Library;
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::sei_message_active_parameter_sets()
-{
- Element_Info1("active_parameter_sets");
-
- //Parsing
- int32u num_sps_ids_minus1;
- BS_Begin();
- Skip_S1(4, "active_video_parameter_set_id");
- Skip_SB( "self_contained_cvs_flag");
- Skip_SB( "no_parameter_set_update_flag");
- Get_UE ( num_sps_ids_minus1, "num_sps_ids_minus1");
- for (int32u i=0; i<=num_sps_ids_minus1; ++i)
- {
- Skip_UE( "active_seq_parameter_set_id");
- }
- BS_End();
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::sei_message_decoded_picture_hash(int32u payloadSize)
-{
- Element_Info1("decoded_picture_hash");
-
- //Parsing
- int8u hash_type;
- Get_B1 (hash_type, "hash_type");
- for (int8u cIdx=0; cIdx<(chroma_format_idc?3:1); cIdx++)
- switch (hash_type)
- {
- case 0 : // md5
- Skip_XX(16, "md5");
- break;
- case 1 : // crc
- Skip_XX( 2, "crc");
- break;
- case 2 : // checksum
- Skip_XX( 4, "checksum");
- break;
- default : //
- Skip_XX((Element_Size-1)/(chroma_format_idc?1:3), "unknown");
- break;
- }
-}
-
-//***************************************************************************
-// Sub-elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Hevc::slice_segment_header()
-{
- Element_Begin1("slice_segment_header");
-
- //Parsing
- bool dependent_slice_segment_flag=false;
- Get_SB ( first_slice_segment_in_pic_flag, "first_slice_segment_in_pic_flag");
- if (RapPicFlag)
- Skip_SB( "no_output_of_prior_pics_flag");
- Get_UE ( slice_pic_parameter_set_id, "slice_pic_parameter_set_id");
- std::vector<pic_parameter_set_struct*>::iterator pic_parameter_set_Item;
- if (slice_pic_parameter_set_id>=pic_parameter_sets.size() || (*(pic_parameter_set_Item=pic_parameter_sets.begin()+slice_pic_parameter_set_id))==NULL)
- {
- //Not yet present
- Skip_BS(Data_BS_Remain(), "Data (pic_parameter_set is missing)");
- Element_End0();
- slice_pic_parameter_set_id=(int32u)-1;
- slice_type=(int32u)-1;
- return;
- }
- if (!first_slice_segment_in_pic_flag)
- {
- if (!MustParse_VPS_SPS_PPS_FromFlv && (*pic_parameter_set_Item)->dependent_slice_segments_enabled_flag)
- Get_SB (dependent_slice_segment_flag, "dependent_slice_segment_flag");
- //Skip_BS(Ceil( Log2( PicSizeInCtbsY ) ), "slice_segment_address");
- Skip_BS(Data_BS_Remain(), "(ToDo)");
- Element_End0();
- slice_type=(int32u)-1;
- return;
- }
- if (!dependent_slice_segment_flag)
- {
- if (!MustParse_VPS_SPS_PPS_FromFlv)
- Skip_S1((*pic_parameter_set_Item)->num_extra_slice_header_bits, "slice_reserved_flags");
- Get_UE (slice_type, "slice_type"); Param_Info1(Hevc_slice_type(slice_type));
- }
- //TODO...
- Skip_BS(Data_BS_Remain(), "(ToDo)");
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::profile_tier_level(int8u maxNumSubLayersMinus1)
-{
- Element_Begin1("profile_tier_level");
-
- //Parsing
- std::vector<bool>sub_layer_profile_present_flags, sub_layer_level_present_flags;
- Get_S1 (2, profile_space, "general_profile_space");
- Skip_SB( "general_tier_flag");
- Get_S1 (5, profile_idc, "general_profile_idc");
- Element_Begin1("general_profile_compatibility_flags");
- for (int8u profile_pos=0; profile_pos<32; profile_pos++)
- if (profile_pos==profile_idc)
- {
- bool general_profile_compatibility_flag;
- Get_SB ( general_profile_compatibility_flag, "general_profile_compatibility_flag");
- //if (!general_profile_compatibility_flag && !profile_space) //found some files without this flag, ignoring the test for the moment (not really important)
- // Trusted_IsNot("general_profile_compatibility_flag not valid");
- }
- else
- Skip_SB( "general_profile_compatibility_flag");
- Element_End0();
- Get_SB ( general_progressive_source_flag, "general_progressive_source_flag");
- Get_SB ( general_interlaced_source_flag, "general_interlaced_source_flag");
- Skip_SB( "general_non_packed_constraint_flag");
- Get_SB ( general_frame_only_constraint_flag, "general_frame_only_constraint_flag");
- Skip_S8(44, "general_reserved_zero_44bits");
- Get_S1 (8, level_idc, "general_level_idc");
- for (int32u SubLayerPos=0; SubLayerPos<maxNumSubLayersMinus1; SubLayerPos++)
- {
- Element_Begin1("SubLayer");
- bool sub_layer_profile_present_flag, sub_layer_level_present_flag;
- Get_SB ( sub_layer_profile_present_flag, "sub_layer_profile_present_flag");
- Get_SB ( sub_layer_level_present_flag, "sub_layer_level_present_flag");
- sub_layer_profile_present_flags.push_back(sub_layer_profile_present_flag);
- sub_layer_level_present_flags.push_back(sub_layer_level_present_flag);
- Element_End0();
- }
- if (maxNumSubLayersMinus1)
- for(int32u SubLayerPos=maxNumSubLayersMinus1; SubLayerPos<8; SubLayerPos++)
- Skip_S1(2, "reserved_zero_2bits");
- for (int32u SubLayerPos=0; SubLayerPos<maxNumSubLayersMinus1; SubLayerPos++)
- {
- Element_Begin1("SubLayer");
- if (sub_layer_profile_present_flags[SubLayerPos])
- {
- Skip_S1(2, "sub_layer_profile_space");
- Skip_SB( "sub_layer_tier_flag");
- Skip_S1(5, "sub_layer_profile_idc");
- Skip_S4(32, "sub_layer_profile_compatibility_flags");
- Skip_SB( "sub_layer_progressive_source_flag");
- Skip_SB( "sub_layer_interlaced_source_flag");
- Skip_SB( "sub_layer_non_packed_constraint_flag");
- Skip_SB( "sub_layer_frame_only_constraint_flag");
- Skip_S8(44, "sub_layer_reserved_zero_44bits");
- }
- if (sub_layer_level_present_flags[SubLayerPos])
- {
- Skip_S1(8, "sub_layer_level_idc");
- }
- Element_End0();
- }
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::short_term_ref_pic_sets(int8u num_short_term_ref_pic_sets)
-{
- Element_Begin1("short_term_ref_pic_sets");
- int32u num_pics=0;
-
- for (int32u stRpsIdx=0; stRpsIdx<num_short_term_ref_pic_sets; stRpsIdx++)
- {
- Element_Begin1("short_term_ref_pic_set");
- bool inter_ref_pic_set_prediction_flag=false;
- if (stRpsIdx)
- Get_SB (inter_ref_pic_set_prediction_flag, "inter_ref_pic_set_prediction_flag");
- if (inter_ref_pic_set_prediction_flag)
- {
- int32u delta_idx_minus1=0, abs_delta_rps_minus1;
- bool delta_rps_sign;
- if (stRpsIdx==num_short_term_ref_pic_sets)
- Get_UE (delta_idx_minus1, "delta_idx_minus1");
- if (delta_idx_minus1+1>stRpsIdx)
- {
- Skip_BS(Data_BS_Remain(), "(Problem)");
- Element_End0();
- Element_End0();
- return;
- }
- Get_SB ( delta_rps_sign, "delta_rps_sign");
- Get_UE ( abs_delta_rps_minus1, "abs_delta_rps_minus1");
- int32u num_pics_new=0;
- for(int32u pic_pos=0 ; pic_pos<=num_pics; pic_pos++)
- {
- TESTELSE_SB_SKIP( "used_by_curr_pic_flag");
- num_pics_new++;
- TESTELSE_SB_ELSE( "used_by_curr_pic_flag");
- bool use_delta_flag;
- Get_SB (use_delta_flag, "use_delta_flag");
- if (use_delta_flag)
- num_pics_new++;
- TESTELSE_SB_END();
- }
- num_pics=num_pics_new;
- }
- else
- {
- int32u num_negative_pics, num_positive_pics;
- Get_UE (num_negative_pics, "num_negative_pics");
- Get_UE (num_positive_pics, "num_positive_pics");
- num_pics=num_negative_pics+num_positive_pics;
- for (int32u i=0; i<num_negative_pics; i++)
- {
- Skip_UE( "delta_poc_s0_minus1");
- Skip_SB( "used_by_curr_pic_s0_flag");
- }
- for (int32u i=0; i<num_positive_pics; i++)
- {
- Skip_UE( "delta_poc_s1_minus1");
- Skip_SB( "used_by_curr_pic_s1_flag");
- }
- }
- Element_End0();
- }
-
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::vui_parameters(std::vector<video_parameter_set_struct*>::iterator video_parameter_set_Item, seq_parameter_set_struct::vui_parameters_struct* &vui_parameters_Item_)
-{
- //Parsing
- seq_parameter_set_struct::vui_parameters_struct::xxl_common *xxL_Common=NULL;
- seq_parameter_set_struct::vui_parameters_struct::xxl *NAL = NULL, *VCL = NULL;
- int32u num_units_in_tick = (int32u)-1, time_scale = (int32u)-1;
- int16u sar_width=(int16u)-1, sar_height=(int16u)-1;
- int8u aspect_ratio_idc=0, video_format=5, colour_primaries=2, transfer_characteristics=2, matrix_coefficients=2;
- bool aspect_ratio_info_present_flag, video_signal_type_present_flag, frame_field_info_present_flag, colour_description_present_flag=false, timing_info_present_flag;
- TEST_SB_GET (aspect_ratio_info_present_flag, "aspect_ratio_info_present_flag");
- Get_S1 (8, aspect_ratio_idc, "aspect_ratio_idc"); Param_Info1C((aspect_ratio_idc<Avc_PixelAspectRatio_Size), Avc_PixelAspectRatio[aspect_ratio_idc]);
- if (aspect_ratio_idc==0xFF)
- {
- Get_S2 (16, sar_width, "sar_width");
- Get_S2 (16, sar_height, "sar_height");
- }
- TEST_SB_END();
- TEST_SB_SKIP( "overscan_info_present_flag");
- Skip_SB( "overscan_appropriate_flag");
- TEST_SB_END();
- TEST_SB_GET (video_signal_type_present_flag, "video_signal_type_present_flag");
- Get_S1 (3, video_format, "video_format"); Param_Info1(Avc_video_format[video_format]);
- Skip_SB( "video_full_range_flag");
- TEST_SB_GET (colour_description_present_flag, "colour_description_present_flag");
- Get_S1 (8, colour_primaries, "colour_primaries"); Param_Info1(Mpegv_colour_primaries(colour_primaries));
- Get_S1 (8, transfer_characteristics, "transfer_characteristics"); Param_Info1(Mpegv_transfer_characteristics(transfer_characteristics));
- Get_S1 (8, matrix_coefficients, "matrix_coefficients"); Param_Info1(Mpegv_matrix_coefficients(matrix_coefficients));
- TEST_SB_END();
- TEST_SB_END();
- TEST_SB_SKIP( "chroma_loc_info_present_flag");
- Skip_UE( "chroma_sample_loc_type_top_field");
- Skip_UE( "chroma_sample_loc_type_bottom_field");
- TEST_SB_END();
- Skip_SB( "neutral_chroma_indication_flag");
- Skip_SB( "field_seq_flag");
- Get_SB ( frame_field_info_present_flag, "frame_field_info_present_flag");
- TEST_SB_SKIP( "default_display_window_flag ");
- Skip_UE( "def_disp_win_left_offset");
- Skip_UE( "def_disp_win_right_offset");
- Skip_UE( "def_disp_win_top_offset");
- Skip_UE( "def_disp_win_bottom_offset");
- TEST_SB_END();
- TEST_SB_GET (timing_info_present_flag, "timing_info_present_flag");
- Get_S4 (32, num_units_in_tick, "num_units_in_tick");
- Get_S4 (32, time_scale, "time_scale");
- TEST_SB_SKIP( "vui_poc_proportional_to_timing_flag");
- Skip_UE( "vui_num_ticks_poc_diff_one_minus1");
- TEST_SB_END();
- TEST_SB_SKIP( "hrd_parameters_present_flag");
- hrd_parameters(true, (*video_parameter_set_Item)->vps_max_sub_layers_minus1, xxL_Common, NAL, VCL);
- TEST_SB_END();
- TEST_SB_END();
- TEST_SB_SKIP( "bitstream_restriction_flag");
- Skip_SB( "tiles_fixed_structure_flag");
- Skip_SB( "motion_vectors_over_pic_boundaries_flag");
- Skip_SB( "restricted_ref_pic_lists_flag");
- Skip_UE( "min_spatial_segmentation_idc");
- Skip_UE( "max_bytes_per_pic_denom");
- Skip_UE( "max_bits_per_min_cu_denom");
- Skip_UE( "log2_max_mv_length_horizontal");
- Skip_UE( "log2_max_mv_length_vertical");
- TEST_SB_END();
-
- FILLING_BEGIN();
- vui_parameters_Item_ = new seq_parameter_set_struct::vui_parameters_struct(
- NAL,
- VCL,
- xxL_Common,
- num_units_in_tick,
- time_scale,
- sar_width,
- sar_height,
- aspect_ratio_idc,
- video_format,
- colour_primaries,
- transfer_characteristics,
- matrix_coefficients,
- aspect_ratio_info_present_flag,
- video_signal_type_present_flag,
- frame_field_info_present_flag,
- colour_description_present_flag,
- timing_info_present_flag
- );
- FILLING_ELSE();
- delete xxL_Common;
- delete NAL;
- delete VCL;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::hrd_parameters(bool commonInfPresentFlag, int8u maxNumSubLayersMinus1, seq_parameter_set_struct::vui_parameters_struct::xxl_common* &xxL_Common, seq_parameter_set_struct::vui_parameters_struct::xxl* &NAL, seq_parameter_set_struct::vui_parameters_struct::xxl* &VCL)
-{
- //Parsing
- int8u bit_rate_scale=0, cpb_size_scale=0, du_cpb_removal_delay_increment_length_minus1=0, dpb_output_delay_du_length_minus1=0, initial_cpb_removal_delay_length_minus1=0, au_cpb_removal_delay_length_minus1=0, dpb_output_delay_length_minus1=0;
- bool nal_hrd_parameters_present_flag=false, vcl_hrd_parameters_present_flag=false, sub_pic_hrd_params_present_flag=false;
- if (commonInfPresentFlag)
- {
- Get_SB (nal_hrd_parameters_present_flag, "nal_hrd_parameters_present_flag");
- Get_SB (vcl_hrd_parameters_present_flag, "vcl_hrd_parameters_present_flag");
- if (nal_hrd_parameters_present_flag || vcl_hrd_parameters_present_flag)
- {
- TEST_SB_GET (sub_pic_hrd_params_present_flag, "sub_pic_hrd_params_present_flag");
- Skip_S1(8, "tick_divisor_minus2");
- Get_S1 (5, du_cpb_removal_delay_increment_length_minus1, "du_cpb_removal_delay_increment_length_minus1");
- Skip_SB( "sub_pic_cpb_params_in_pic_timing_sei_flag");
- Get_S1 (5, dpb_output_delay_du_length_minus1, "dpb_output_delay_du_length_minus1");
- TEST_SB_END();
- Get_S1 (4, bit_rate_scale, "bit_rate_scale");
- Get_S1 (4, cpb_size_scale, "cpb_size_scale");
- if (sub_pic_hrd_params_present_flag)
- Skip_S1(4, "cpb_size_du_scale");
- Get_S1 (5, initial_cpb_removal_delay_length_minus1, "initial_cpb_removal_delay_length_minus1");
- Get_S1 (5, au_cpb_removal_delay_length_minus1, "au_cpb_removal_delay_length_minus1");
- Get_S1 (5, dpb_output_delay_length_minus1, "dpb_output_delay_length_minus1");
- }
- }
-
- for (int8u NumSubLayer=0; NumSubLayer<=maxNumSubLayersMinus1; NumSubLayer++)
- {
- int32u cpb_cnt_minus1=0;
- bool fixed_pic_rate_general_flag, fixed_pic_rate_within_cvs_flag=true, low_delay_hrd_flag=false;
- Get_SB (fixed_pic_rate_general_flag, "fixed_pic_rate_general_flag");
- if (!fixed_pic_rate_general_flag)
- Get_SB (fixed_pic_rate_within_cvs_flag, "fixed_pic_rate_within_cvs_flag");
- if (fixed_pic_rate_within_cvs_flag)
- Skip_UE( "elemental_duration_in_tc_minus1");
- else
- Get_SB (low_delay_hrd_flag, "low_delay_hrd_flag");
- if (!low_delay_hrd_flag)
- {
- Get_UE (cpb_cnt_minus1, "cpb_cnt_minus1");
- if (cpb_cnt_minus1>31)
- {
- Trusted_IsNot("cpb_cnt_minus1 too high");
- cpb_cnt_minus1=0;
- return;
- }
- }
- if (nal_hrd_parameters_present_flag || vcl_hrd_parameters_present_flag)
- xxL_Common=new seq_parameter_set_struct::vui_parameters_struct::xxl_common(
- sub_pic_hrd_params_present_flag,
- du_cpb_removal_delay_increment_length_minus1,
- dpb_output_delay_du_length_minus1,
- initial_cpb_removal_delay_length_minus1,
- au_cpb_removal_delay_length_minus1,
- dpb_output_delay_length_minus1
- );
- if (nal_hrd_parameters_present_flag)
- sub_layer_hrd_parameters(xxL_Common, bit_rate_scale, cpb_size_scale, cpb_cnt_minus1, NAL); //TODO: save HRD per NumSubLayer
- if (vcl_hrd_parameters_present_flag)
- sub_layer_hrd_parameters(xxL_Common, bit_rate_scale, cpb_size_scale, cpb_cnt_minus1, VCL); //TODO: save HRD per NumSubLayer
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::sub_layer_hrd_parameters(seq_parameter_set_struct::vui_parameters_struct::xxl_common* xxL_Common, int8u bit_rate_scale, int8u cpb_size_scale, int32u cpb_cnt_minus1, seq_parameter_set_struct::vui_parameters_struct::xxl* &hrd_parameters_Item_)
-{
- //Parsing
- vector<seq_parameter_set_struct::vui_parameters_struct::xxl::xxl_data> SchedSel;
- SchedSel.reserve(cpb_cnt_minus1 + 1);
- for (int8u SchedSelIdx = 0; SchedSelIdx <= cpb_cnt_minus1; ++SchedSelIdx)
- {
- Element_Begin1("ShedSel");
- int64u bit_rate_value, cpb_size_value;
- int32u bit_rate_value_minus1, cpb_size_value_minus1;
- bool cbr_flag;
- Get_UE (bit_rate_value_minus1, "bit_rate_value_minus1");
- bit_rate_value = (int64u)((bit_rate_value_minus1 + 1)*pow(2.0, 6 + bit_rate_scale)); Param_Info2(bit_rate_value, " bps");
- Get_UE (cpb_size_value_minus1, "cpb_size_value_minus1");
- cpb_size_value = (int64u)((cpb_size_value_minus1 + 1)*pow(2.0, 4 + cpb_size_scale)); Param_Info2(cpb_size_value, " bits");
- if (xxL_Common->sub_pic_hrd_params_present_flag)
- {
- Skip_UE( "cpb_size_du_value_minus1");
- Skip_UE( "bit_rate_du_value_minus1");
- }
- Get_SB (cbr_flag, "cbr_flag");
- Element_End0();
-
- FILLING_BEGIN();
- SchedSel.push_back(seq_parameter_set_struct::vui_parameters_struct::xxl::xxl_data(
- bit_rate_value,
- cpb_size_value,
- cbr_flag
- ));
- FILLING_END();
- }
-
- //Validity test
- if (!Element_IsOK() || (SchedSel.size() == 1 && SchedSel[0].bit_rate_value == 64))
- {
- return; //We do not trust this kind of data
- }
-
- //Filling
- hrd_parameters_Item_=new seq_parameter_set_struct::vui_parameters_struct::xxl(
- SchedSel
- );
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::scaling_list_data()
-{
- for(int8u sizeId=0; sizeId<4; sizeId++)
- for (int8u matrixId = 0; matrixId<((sizeId == 3) ? 2 : 6); matrixId++)
- {
- bool scaling_list_pred_mode_flag;
- Get_SB (scaling_list_pred_mode_flag, "scaling_list_pred_mode_flag");
- if(!scaling_list_pred_mode_flag)
- Skip_UE( "scaling_list_pred_matrix_id_delta");
- else
- {
- //nextCoef = 8
- size_t coefNum=std::min(64, (1<<(4+(sizeId<<1))));
- if( sizeId > 1 )
- {
- Skip_SE( "scaling_list_dc_coef_minus8"); //[ sizeId ? 2 ][ matrixId ] se(v)
- //nextCoef = scaling_list_dc_coef_minus8[ sizeId ? 2 ][ matrixId ] + 8
- }
- for(size_t i=0; i<coefNum; i++)
- {
- Skip_SE( "scaling_list_delta_coef");
- //nextCoef = ( nextCoef + scaling_list_delta_coef + 256 ) % 256
- //ScalingList[ sizeId ][ matrixId ][ i ] = nextCoef
- }
- }
- }
-}
-
-//***************************************************************************
-// Specific
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Hevc::VPS_SPS_PPS()
-{
- if (MustParse_VPS_SPS_PPS_FromMatroska || MustParse_VPS_SPS_PPS_FromFlv)
- {
- if (Element_Size>=5
- && Buffer[Buffer_Offset ]==0x01
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x00
- && Buffer[Buffer_Offset+3]==0x00
- && Buffer[Buffer_Offset+4]==0xFF) //Trying to detect old proposal of the form of Matroska implementation
- return VPS_SPS_PPS_FromMatroska();
-
- MustParse_VPS_SPS_PPS_FromMatroska=false;
- MustParse_VPS_SPS_PPS_FromFlv=false;
- }
-
- //Parsing
- int64u general_constraint_indicator_flags;
- int32u general_profile_compatibility_flags;
- int8u configurationVersion;
- int8u chromaFormat, bitDepthLumaMinus8, bitDepthChromaMinus8;
- int8u general_profile_space, general_profile_idc, general_level_idc;
- int8u numOfArrays, constantFrameRate, numTemporalLayers;
- bool temporalIdNested;
- Get_B1 (configurationVersion, "configurationVersion");
- BS_Begin();
- Get_S1 (2, general_profile_space, "general_profile_space");
- Skip_SB( "general_tier_flag");
- Get_S1 (5, general_profile_idc, "general_profile_idc");
- BS_End();
- Get_B4 (general_profile_compatibility_flags, "general_profile_compatibility_flags");
- Get_B6 (general_constraint_indicator_flags, "general_constraint_indicator_flags");
- Get_B1 (general_level_idc, "general_level_idc");
- BS_Begin();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Skip_S2(12, "min_spatial_segmentation_idc");
- BS_End();
- BS_Begin();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Skip_S1(2, "parallelismType");
- BS_End();
- BS_Begin();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Get_S1 (2, chromaFormat, "chromaFormat");
- BS_End();
- BS_Begin();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Get_S1 (3, bitDepthLumaMinus8, "bitDepthLumaMinus8");
- BS_End();
- BS_Begin();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Mark_1_NoTrustError();
- Get_S1 (3, bitDepthChromaMinus8, "bitDepthChromaMinus8");
- BS_End();
- Skip_B2( "avgFrameRate");
- BS_Begin();
- Get_S1 (2, constantFrameRate, "constantFrameRate");
- Get_S1 (3, numTemporalLayers, "numTemporalLayers");
- Get_SB ( temporalIdNested, "temporalIdNested");
- Get_S1 (2, lengthSizeMinusOne, "lengthSizeMinusOne");
- BS_End();
- Get_B1 (numOfArrays, "numOfArrays");
- for (size_t ArrayPos=0; ArrayPos<numOfArrays; ArrayPos++)
- {
- Element_Begin1("Array");
- int16u numNalus;
- int8u NAL_unit_type;
- BS_Begin();
- Skip_SB( "array_completeness");
- Mark_0_NoTrustError();
- Get_S1 (6, NAL_unit_type, "NAL_unit_type");
- BS_End();
- Get_B2 (numNalus, "numNalus");
- for (size_t NaluPos=0; NaluPos<numNalus; NaluPos++)
- {
- Element_Begin1("nalUnit");
- int16u nalUnitLength;
- Get_B2 (nalUnitLength, "nalUnitLength");
- if (nalUnitLength<2 || Element_Offset+nalUnitLength>Element_Size)
- {
- Trusted_IsNot("Size is wrong");
- break; //There is an error
- }
-
- //Header
- int8u nal_unit_type, nuh_temporal_id_plus1;
- BS_Begin();
- Mark_0 ();
- Get_S1 (6, nal_unit_type, "nal_unit_type");
- Get_S1 (6, nuh_layer_id, "nuh_layer_id");
- Get_S1 (3, nuh_temporal_id_plus1, "nuh_temporal_id_plus1");
- if (nuh_temporal_id_plus1==0)
- Trusted_IsNot("nuh_temporal_id_plus1 is invalid");
- BS_End();
-
- //Data
- int64u Element_Offset_Save=Element_Offset;
- int64u Element_Size_Save=Element_Size;
- Buffer_Offset+=(size_t)Element_Offset_Save;
- Element_Offset=0;
- Element_Size=nalUnitLength-2;
- Element_Code=nal_unit_type;
- Data_Parse();
- Buffer_Offset-=(size_t)Element_Offset_Save;
- Element_Offset=Element_Offset_Save+nalUnitLength-2;
- Element_Size=Element_Size_Save;
-
- Element_End0();
- }
- Element_End0();
- }
-
- MustParse_VPS_SPS_PPS=false;
- FILLING_BEGIN_PRECISE();
- Accept("HEVC");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Hevc::VPS_SPS_PPS_FromMatroska()
-{
- //Parsing
- int8u Profile, Level, vid_parameter_set_count, seq_parameter_set_count, pic_parameter_set_count;
- if (SizedBlocks)
- Skip_B1( "Version");
- Get_B1 (Profile, "Profile");
- Skip_B1( "Compatible profile");
- Get_B1 (Level, "Level");
- BS_Begin();
- Skip_S1(6, "Reserved");
- Get_S1 (2, lengthSizeMinusOne, "Size of NALU length minus 1");
- Skip_S1(3, "Reserved");
- Get_S1 (5, vid_parameter_set_count, MustParse_VPS_SPS_PPS_FromFlv?"vid_parameter_set+seq_parameter_set count":"vid_parameter_set count");
- BS_End();
- for (int8u Pos=0; Pos<vid_parameter_set_count; Pos++)
- {
- Element_Begin1("nalUnit");
- int16u nalUnitLength;
- Get_B2 (nalUnitLength, "nalUnitLength");
- if (nalUnitLength<2 || Element_Offset+nalUnitLength>Element_Size)
- {
- Trusted_IsNot("Size is wrong");
- break; //There is an error
- }
-
- //Header
- int8u nal_unit_type, nuh_temporal_id_plus1;
- BS_Begin();
- Mark_0 ();
- Get_S1 (6, nal_unit_type, "nal_unit_type");
- Get_S1 (6, nuh_layer_id, "nuh_layer_id");
- Get_S1 (3, nuh_temporal_id_plus1, "nuh_temporal_id_plus1");
- if (nuh_temporal_id_plus1==0)
- Trusted_IsNot("nuh_temporal_id_plus1 is invalid");
- BS_End();
-
- //Data
- int64u Element_Offset_Save=Element_Offset;
- int64u Element_Size_Save=Element_Size;
- Buffer_Offset+=(size_t)Element_Offset_Save;
- Element_Offset=0;
- Element_Size=nalUnitLength-2;
- Element_Code=nal_unit_type;
- Data_Parse();
- Buffer_Offset-=(size_t)Element_Offset_Save;
- Element_Offset=Element_Offset_Save+nalUnitLength-2;
- Element_Size=Element_Size_Save;
-
- Element_End0();
- }
- if (MustParse_VPS_SPS_PPS_FromFlv)
- seq_parameter_set_count=0;
- else
- {
- BS_Begin();
- Skip_S1(3, "Reserved");
- Get_S1 (5, seq_parameter_set_count, "seq_parameter_set count");
- BS_End();
- }
- for (int8u Pos=0; Pos<seq_parameter_set_count; Pos++)
- {
- Element_Begin1("nalUnit");
- int16u nalUnitLength;
- Get_B2 (nalUnitLength, "nalUnitLength");
- if (nalUnitLength<2 || Element_Offset+nalUnitLength>Element_Size)
- {
- Trusted_IsNot("Size is wrong");
- break; //There is an error
- }
-
- //Header
- int8u nal_unit_type, nuh_temporal_id_plus1;
- BS_Begin();
- Mark_0 ();
- Get_S1 (6, nal_unit_type, "nal_unit_type");
- Get_S1 (6, nuh_layer_id, "nuh_layer_id");
- Get_S1 (3, nuh_temporal_id_plus1, "nuh_temporal_id_plus1");
- if (nuh_temporal_id_plus1==0)
- Trusted_IsNot("nuh_temporal_id_plus1 is invalid");
- BS_End();
-
- //Data
- int64u Element_Offset_Save=Element_Offset;
- int64u Element_Size_Save=Element_Size;
- Buffer_Offset+=(size_t)Element_Offset_Save;
- Element_Offset=0;
- Element_Size=nalUnitLength-2;
- Element_Code=nal_unit_type;
- Data_Parse();
- Buffer_Offset-=(size_t)Element_Offset_Save;
- Element_Offset=Element_Offset_Save+nalUnitLength-2;
- Element_Size=Element_Size_Save;
-
- Element_End0();
- }
- Get_B1 (pic_parameter_set_count, "pic_parameter_set count");
- for (int8u Pos=0; Pos<pic_parameter_set_count; Pos++)
- {
- Element_Begin1("nalUnit");
- int16u nalUnitLength;
- Get_B2 (nalUnitLength, "nalUnitLength");
- if (nalUnitLength<2 || Element_Offset+nalUnitLength>Element_Size)
- {
- Trusted_IsNot("Size is wrong");
- break; //There is an error
- }
-
- //Header
- int8u nal_unit_type, nuh_temporal_id_plus1;
- BS_Begin();
- Mark_0 ();
- Get_S1 (6, nal_unit_type, "nal_unit_type");
- Get_S1 (6, nuh_layer_id, "nuh_layer_id");
- Get_S1 (3, nuh_temporal_id_plus1, "nuh_temporal_id_plus1");
- if (nuh_temporal_id_plus1==0)
- Trusted_IsNot("nuh_temporal_id_plus1 is invalid");
- BS_End();
-
- //Data
- int64u Element_Offset_Save=Element_Offset;
- int64u Element_Size_Save=Element_Size;
- Buffer_Offset+=(size_t)Element_Offset_Save;
- Element_Offset=0;
- Element_Size=nalUnitLength-2;
- Element_Code=nal_unit_type;
- Data_Parse();
- Buffer_Offset-=(size_t)Element_Offset_Save;
- Element_Offset=Element_Offset_Save+nalUnitLength-2;
- Element_Size=Element_Size_Save;
-
- Element_End0();
- }
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "Padding?");
-
- //Filling
- MustParse_VPS_SPS_PPS=false;
- FILLING_BEGIN_PRECISE();
- Accept("HEVC");
- FILLING_END();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_HEVC_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Hevc.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Hevc.h
deleted file mode 100644
index 033d0f559..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Hevc.h
+++ /dev/null
@@ -1,446 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_HevcH
-#define MediaInfo_HevcH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Hevc
-//***************************************************************************
-
-class File_Hevc : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool FrameIsAlwaysComplete;
- bool MustParse_VPS_SPS_PPS;
- bool MustParse_VPS_SPS_PPS_FromMatroska;
- bool MustParse_VPS_SPS_PPS_FromFlv;
- bool SizedBlocks;
-
- //Constructor/Destructor
- File_Hevc();
- ~File_Hevc();
-
-private :
- File_Hevc(const File_Hevc &File_Hevc); //No copy
-
- //Structures - video_parameter_set
- struct video_parameter_set_struct
- {
- #if MEDIAINFO_DEMUX
- int8u* AnnexB_Buffer;
- size_t AnnexB_Buffer_Size;
- #endif //MEDIAINFO_DEMUX
- int8u vps_max_sub_layers_minus1;
-
- //Constructor/Destructor
- video_parameter_set_struct(int8u vps_max_sub_layers_minus1_)
- :
- #if MEDIAINFO_DEMUX
- AnnexB_Buffer(NULL),
- AnnexB_Buffer_Size(0),
- #endif //MEDIAINFO_DEMUX
- vps_max_sub_layers_minus1(vps_max_sub_layers_minus1_)
- {
- }
-
- ~video_parameter_set_struct()
- {
- #if MEDIAINFO_DEMUX
- delete[] AnnexB_Buffer;
- #endif //MEDIAINFO_DEMUX
- }
-
- private:
- video_parameter_set_struct &operator=(const video_parameter_set_struct &v);
- video_parameter_set_struct();
- };
- typedef vector<video_parameter_set_struct*> video_parameter_set_structs;
-
- //Structures - seq_parameter_set
- struct seq_parameter_set_struct
- {
- struct vui_parameters_struct
- {
- struct xxl
- {
- struct xxl_data
- {
- //HRD configuration
- int64u bit_rate_value;
- int64u cpb_size_value;
- bool cbr_flag;
-
- //sei_message_buffering_period
- //int32u initial_cpb_removal_delay;
- //int32u initial_cpb_removal_delay_offset;
-
- xxl_data(int64u bit_rate_value_, int64u cpb_size_value_, bool cbr_flag_) //int32u initial_cpb_removal_delay_, int32u initial_cpb_removal_delay_offset_)
- :
- bit_rate_value(bit_rate_value_),
- cpb_size_value(cpb_size_value_),
- cbr_flag(cbr_flag_)
- //initial_cpb_removal_delay(initial_cpb_removal_delay_),
- //initial_cpb_removal_delay_offset(initial_cpb_removal_delay_offset_)
- {
- }
-
- xxl_data &operator=(const xxl_data &x)
- {
- bit_rate_value = x.bit_rate_value;
- cpb_size_value = x.cpb_size_value;
- cbr_flag = x.cbr_flag;
- //initial_cpb_removal_delay=x.initial_cpb_removal_delay;
- //initial_cpb_removal_delay_offset=x.initial_cpb_removal_delay_offset;
- return *this;
- }
-
- private:
- xxl_data();
- };
- vector<xxl_data> SchedSel;
-
- xxl(const vector<xxl_data> &SchedSel_)
- :
- SchedSel(SchedSel_)
- {
- }
-
- xxl &operator=(const xxl &x)
- {
- SchedSel = x.SchedSel;
-
- return *this;
- }
-
- private:
- xxl();
- };
- struct xxl_common
- {
- //Common to all xxl
- bool sub_pic_hrd_params_present_flag;
- int8u du_cpb_removal_delay_increment_length_minus1;
- int8u dpb_output_delay_du_length_minus1;
- int8u initial_cpb_removal_delay_length_minus1;
- int8u au_cpb_removal_delay_length_minus1;
- int8u dpb_output_delay_length_minus1;
-
- xxl_common(bool sub_pic_hrd_params_present_flag_, int8u du_cpb_removal_delay_increment_length_minus1_, int8u dpb_output_delay_du_length_minus1_, int8u initial_cpb_removal_delay_length_minus1_, int8u au_cpb_removal_delay_length_minus1_, int8u dpb_output_delay_length_minus1_)
- :
- sub_pic_hrd_params_present_flag(sub_pic_hrd_params_present_flag_),
- du_cpb_removal_delay_increment_length_minus1(du_cpb_removal_delay_increment_length_minus1_),
- dpb_output_delay_du_length_minus1(dpb_output_delay_du_length_minus1_),
- initial_cpb_removal_delay_length_minus1(initial_cpb_removal_delay_length_minus1_),
- au_cpb_removal_delay_length_minus1(au_cpb_removal_delay_length_minus1_),
- dpb_output_delay_length_minus1(dpb_output_delay_length_minus1_)
- {
- }
-
- xxl_common &operator=(const xxl_common &x)
- {
- sub_pic_hrd_params_present_flag = x.sub_pic_hrd_params_present_flag;
- du_cpb_removal_delay_increment_length_minus1 = x.du_cpb_removal_delay_increment_length_minus1;
- dpb_output_delay_du_length_minus1 = x.dpb_output_delay_du_length_minus1;
- initial_cpb_removal_delay_length_minus1 = x.initial_cpb_removal_delay_length_minus1;
- au_cpb_removal_delay_length_minus1 = x.au_cpb_removal_delay_length_minus1;
- dpb_output_delay_length_minus1 = x.dpb_output_delay_length_minus1;
-
- return *this;
- }
-
- private:
- xxl_common();
- };
- xxl* NAL;
- xxl* VCL;
- xxl_common* xxL_Common;
- int32u num_units_in_tick;
- int32u time_scale;
- int16u sar_width;
- int16u sar_height;
- int8u aspect_ratio_idc;
- int8u video_format;
- int8u colour_primaries;
- int8u transfer_characteristics;
- int8u matrix_coefficients;
- bool aspect_ratio_info_present_flag;
- bool video_signal_type_present_flag;
- bool frame_field_info_present_flag;
- bool colour_description_present_flag;
- bool timing_info_present_flag;
-
- vui_parameters_struct(xxl* NAL_, xxl* VCL_, xxl_common* xxL_Common_, int32u num_units_in_tick_, int32u time_scale_, int16u sar_width_, int16u sar_height_, int8u aspect_ratio_idc_, int8u video_format_, int8u colour_primaries_, int8u transfer_characteristics_, int8u matrix_coefficients_, bool aspect_ratio_info_present_flag_, bool video_signal_type_present_flag_, bool frame_field_info_present_flag_, bool colour_description_present_flag_, bool timing_info_present_flag_)
- :
- NAL(NAL_),
- VCL(VCL_),
- xxL_Common(xxL_Common_),
- num_units_in_tick(num_units_in_tick_),
- time_scale(time_scale_),
- sar_width(sar_width_),
- sar_height(sar_height_),
- aspect_ratio_idc(aspect_ratio_idc_),
- video_format(video_format_),
- colour_primaries(colour_primaries_),
- transfer_characteristics(transfer_characteristics_),
- matrix_coefficients(matrix_coefficients_),
- aspect_ratio_info_present_flag(aspect_ratio_info_present_flag_),
- video_signal_type_present_flag(video_signal_type_present_flag_),
- frame_field_info_present_flag(frame_field_info_present_flag_),
- colour_description_present_flag(colour_description_present_flag_),
- timing_info_present_flag(timing_info_present_flag_)
- {
- }
-
- ~vui_parameters_struct()
- {
- delete NAL; //NAL=NULL;
- delete VCL; //VCL=NULL;
- delete xxL_Common; //xxL_Common=NULL
- }
-
- private:
- vui_parameters_struct &operator=(const vui_parameters_struct &v);
- vui_parameters_struct();
- };
- vui_parameters_struct* vui_parameters;
- #if MEDIAINFO_DEMUX
- int8u* AnnexB_Buffer;
- size_t AnnexB_Buffer_Size;
- #endif //MEDIAINFO_DEMUX
- int32u profile_space;
- int32u profile_idc;
- int32u level_idc;
- int32u pic_width_in_luma_samples;
- int32u pic_height_in_luma_samples;
- int32u conf_win_left_offset;
- int32u conf_win_right_offset;
- int32u conf_win_top_offset;
- int32u conf_win_bottom_offset;
- int8u video_parameter_set_id;
- int8u chroma_format_idc;
- bool separate_colour_plane_flag;
- int8u log2_max_pic_order_cnt_lsb_minus4;
- int8u bit_depth_luma_minus8;
- int8u bit_depth_chroma_minus8;
- bool general_progressive_source_flag;
- bool general_interlaced_source_flag;
- bool general_frame_only_constraint_flag;
-
- //Computed value
- bool NalHrdBpPresentFlag() {return vui_parameters && vui_parameters->NAL;}
- bool VclHrdBpPresentFlag() {return vui_parameters && vui_parameters->VCL;}
- bool CpbDpbDelaysPresentFlag() {return vui_parameters && vui_parameters->xxL_Common;} //xxL_Common is present if NAL or VCL
- int8u ChromaArrayType() {return separate_colour_plane_flag?0:chroma_format_idc;}
-
- //Constructor/Destructor
- seq_parameter_set_struct(vui_parameters_struct* vui_parameters_, int32u profile_space_, int32u profile_idc_, int32u level_idc_, int32u pic_width_in_luma_samples_, int32u pic_height_in_luma_samples_, int32u conf_win_left_offset_, int32u conf_win_right_offset_, int32u conf_win_top_offset_, int32u conf_win_bottom_offset_, int8u video_parameter_set_id_, int8u chroma_format_idc_, bool separate_colour_plane_flag_, int8u log2_max_pic_order_cnt_lsb_minus4_, int8u bit_depth_luma_minus8_, int8u bit_depth_chroma_minus8_, bool general_progressive_source_flag_, bool general_interlaced_source_flag_, bool general_frame_only_constraint_flag_)
- :
- vui_parameters(vui_parameters_),
- #if MEDIAINFO_DEMUX
- AnnexB_Buffer(NULL),
- AnnexB_Buffer_Size(0),
- #endif //MEDIAINFO_DEMUX
- profile_space(profile_space_),
- profile_idc(profile_idc_),
- level_idc(level_idc_),
- pic_width_in_luma_samples(pic_width_in_luma_samples_),
- pic_height_in_luma_samples(pic_height_in_luma_samples_),
- conf_win_left_offset(conf_win_left_offset_),
- conf_win_right_offset(conf_win_right_offset_),
- conf_win_top_offset(conf_win_top_offset_),
- conf_win_bottom_offset(conf_win_bottom_offset_),
- video_parameter_set_id(video_parameter_set_id_),
- chroma_format_idc(chroma_format_idc_),
- separate_colour_plane_flag(separate_colour_plane_flag_),
- log2_max_pic_order_cnt_lsb_minus4(log2_max_pic_order_cnt_lsb_minus4_),
- bit_depth_luma_minus8(bit_depth_luma_minus8_),
- bit_depth_chroma_minus8(bit_depth_chroma_minus8_),
- general_progressive_source_flag(general_progressive_source_flag_),
- general_interlaced_source_flag(general_interlaced_source_flag_),
- general_frame_only_constraint_flag(general_frame_only_constraint_flag_)
- {
- }
-
- ~seq_parameter_set_struct()
- {
- delete vui_parameters; //vui_parameters=NULL;
- #if MEDIAINFO_DEMUX
- delete[] AnnexB_Buffer;
- #endif //MEDIAINFO_DEMUX
- }
-
- private:
- seq_parameter_set_struct &operator=(const seq_parameter_set_struct &v);
- seq_parameter_set_struct();
- };
- typedef vector<seq_parameter_set_struct*> seq_parameter_set_structs;
-
- //Structures - pic_parameter_set
- struct pic_parameter_set_struct
- {
- #if MEDIAINFO_DEMUX
- int8u* AnnexB_Buffer;
- size_t AnnexB_Buffer_Size;
- #endif //MEDIAINFO_DEMUX
- int8u seq_parameter_set_id;
- int8u num_ref_idx_l0_default_active_minus1;
- int8u num_ref_idx_l1_default_active_minus1;
- int8u num_extra_slice_header_bits;
- bool dependent_slice_segments_enabled_flag;
-
- //Constructor/Destructor
- pic_parameter_set_struct(int8u seq_parameter_set_id_, int8u num_ref_idx_l0_default_active_minus1_, int8u num_ref_idx_l1_default_active_minus1_, int8u num_extra_slice_header_bits_, bool dependent_slice_segments_enabled_flag_)
- :
- #if MEDIAINFO_DEMUX
- AnnexB_Buffer(NULL),
- AnnexB_Buffer_Size(0),
- #endif //MEDIAINFO_DEMUX
- seq_parameter_set_id(seq_parameter_set_id_),
- num_ref_idx_l0_default_active_minus1(num_ref_idx_l0_default_active_minus1_),
- num_ref_idx_l1_default_active_minus1(num_ref_idx_l1_default_active_minus1_),
- num_extra_slice_header_bits(num_extra_slice_header_bits_),
- dependent_slice_segments_enabled_flag(dependent_slice_segments_enabled_flag_)
- {
- }
-
- ~pic_parameter_set_struct()
- {
- #if MEDIAINFO_DEMUX
- delete[] AnnexB_Buffer;
- #endif //MEDIAINFO_DEMUX
- }
-
- private:
- pic_parameter_set_struct &operator=(const pic_parameter_set_struct &v);
- pic_parameter_set_struct();
- };
- typedef vector<pic_parameter_set_struct*> pic_parameter_set_structs;
-
- //Streams management
- void Streams_Fill();
- void Streams_Fill(vector<seq_parameter_set_struct*>::iterator seq_parameter_set_Item);
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- bool Demux_Transcode_Iso14496_15_to_AnnexB;
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parser_QuickSearch();
- bool Header_Parser_Fill_Size();
- void Data_Parse();
-
- //Elements
- void slice_segment_layer();
- void slice_layer();
- void video_parameter_set();
- void seq_parameter_set();
- void pic_parameter_set();
- void access_unit_delimiter();
- void end_of_seq();
- void end_of_bitstream();
- void filler_data();
- void sei();
- void sei_message(int32u &seq_parameter_set_id);
- void sei_message_buffering_period(int32u &seq_parameter_set_id, int32u payloadSize);
- void sei_message_buffering_period_xxl(seq_parameter_set_struct::vui_parameters_struct::xxl_common* xxL_Common, bool irap_cpb_params_present_flag, seq_parameter_set_struct::vui_parameters_struct::xxl* xxl);
- void sei_message_pic_timing(int32u &seq_parameter_set_id, int32u payloadSize);
- void sei_message_user_data_unregistered(int32u payloadSize);
- void sei_message_user_data_unregistered_Ateme(int32u payloadSize);
- void sei_message_user_data_unregistered_x265(int32u payloadSize);
- void sei_message_active_parameter_sets();
- void sei_message_decoded_picture_hash(int32u payloadSize);
-
- //Packets - SubElements
- void slice_segment_header();
- void profile_tier_level(int8u maxNumSubLayersMinus1);
- void short_term_ref_pic_sets(int8u num_short_term_ref_pic_sets);
- void vui_parameters(std::vector<video_parameter_set_struct*>::iterator video_parameter_set_Item, seq_parameter_set_struct::vui_parameters_struct* &vui_parameters_Item);
- void hrd_parameters(bool commonInfPresentFlag, int8u maxNumSubLayersMinus1, seq_parameter_set_struct::vui_parameters_struct::xxl_common* &xxL_Common, seq_parameter_set_struct::vui_parameters_struct::xxl* &NAL, seq_parameter_set_struct::vui_parameters_struct::xxl* &VCL);
- void sub_layer_hrd_parameters(seq_parameter_set_struct::vui_parameters_struct::xxl_common* xxL_Common, int8u bit_rate_scale, int8u cpb_size_scale, int32u cpb_cnt_minus1, seq_parameter_set_struct::vui_parameters_struct::xxl* &hrd_parameters_Item);
- void scaling_list_data();
-
- //Packets - Specific
- void VPS_SPS_PPS();
- void VPS_SPS_PPS_FromMatroska();
-
- //Streams
- struct stream
- {
- bool Searching_Payload;
-
- stream()
- :
- Searching_Payload(false)
- {
- }
- };
- vector<stream> Streams;
-
- //Replacement of File__Analyze buffer
- const int8u* Buffer_ToSave;
- size_t Buffer_Size_ToSave;
-
- //parameter_sets
- video_parameter_set_structs video_parameter_sets;
- seq_parameter_set_structs seq_parameter_sets;
- pic_parameter_set_structs pic_parameter_sets;
-
- //File specific
- int8u lengthSizeMinusOne;
-
- //File specific
- size_t IFrame_Count;
-
- //Temp
- Ztring Encoded_Library;
- Ztring Encoded_Library_Name;
- Ztring Encoded_Library_Version;
- Ztring Encoded_Library_Date;
- Ztring Encoded_Library_Settings;
- int32u chroma_format_idc;
- int32u slice_pic_parameter_set_id;
- int32u slice_type;
- int8u nuh_layer_id;
- int8u profile_space;
- int8u profile_idc;
- int8u level_idc;
- bool general_progressive_source_flag;
- bool general_interlaced_source_flag;
- bool general_frame_only_constraint_flag;
- bool RapPicFlag;
- bool first_slice_segment_in_pic_flag;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_HuffYuv.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_HuffYuv.cpp
deleted file mode 100644
index b1d1864f7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_HuffYuv.cpp
+++ /dev/null
@@ -1,309 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// http://multimedia.cx/huffyuv.txt
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_HUFFYUV_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_HuffYuv.h"
-#include "ZenLib/BitStream.h"
-//---------------------------------------------------------------------------
-
-#include <algorithm>
-using namespace std;
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Info
-//***************************************************************************
-
-const char* HuffYUV_ColorSpace (int16u BitCount)
-{
- switch (BitCount&0xFFF8)
- {
- case 8 :
- case 16 : return "YUV";
- case 24 : return "RGB";
- case 32 : return "RGBA";
- default : return "";
- }
-}
-
-const char* HuffYUV_ChromaSubsampling (int16u BitCount)
-{
- switch (BitCount&0xFFF8)
- {
- case 8 : return "4:2:0";
- case 16 : return "4:2:2";
- default : return "";
- }
-}
-
-const string HuffYUV_ColorSpace(bool rgb, bool chroma, bool alpha)
-{
- string ToReturn;
- switch (rgb)
- {
- case false :
- ToReturn=chroma?"YUV":"Y";
- break;
- case true :
- ToReturn="RGB";
- break;
- }
-
- if (alpha)
- ToReturn+='A';
-
- return ToReturn;
-}
-
-const char* HuffYUV_method (int16u BitCount, int8u method)
-{
- switch (BitCount&0x0007)
- {
- case 0 :
- switch (method)
- {
- case 0xFE : return "old";
- case 0 : return "left";
- case 1 : return "gradient";
- case 2 : return "median";
- case 64 : return "left with decorrelation";
- case 65 : return "gradient with decorrelation";
- default : return "";
- }
- case 1 : return "left";
- case 2 : return "left with decorrelation";
- case 3 :
- switch (BitCount&0xFFF8)
- {
- case 16 : return "gradient";
- case 24 :
- case 32 : return "gradient with decorrelation";
- default : return "";
- }
- case 4 : return "median";
- default : return "";
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_HuffYuv::File_HuffYuv()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("HuffYUV");
- IsRawStream=true;
-
- //In
- IsOutOfBandData=false;
- BitCount=0;
- Height=0;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_HuffYuv::Streams_Accept()
-{
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "HuffYUV");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_HuffYuv::Read_Buffer_Continue()
-{
- Accept();
-
- if (IsOutOfBandData)
- {
- FrameHeader();
- }
- else if (Frame_Count==0)
- Fill(Stream_Video, 0, Video_Format_Version, "Version 1");
-
- Skip_XX(Element_Size-Element_Offset, "Other data");
-
- Frame_Count++;
- Finish();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_HuffYuv::FrameHeader()
-{
- //Version
- if (Element_Size<4)
- {
- Reject();
- return;
- }
- int8u Version;
- if (Buffer[3]==0)
- {
- Version=Element_Size>4?2:1;
- }
- else
- Version=3;
-
- //Parsing
- int8u bpp_override=0, chroma_v_shift=0, chroma_h_shift=0, interlace;
- bool alpha=false, chroma=false, rgb=false;
- Element_Begin1("method");
- BS_Begin();
- Skip_SB( "unknown");
- Skip_SB( "decorrelate");
- Skip_S1(6, "predictor");
- Element_End0();
- if (Version<=2)
- {
- Get_S1 (8, bpp_override, "bpp_override");
- }
- else
- {
- Get_S1 (4, bpp_override, "bit_depth"); Param_Info2(bpp_override+1, "bits");
- Get_S1 (2, chroma_v_shift, "chroma_v_shift");
- Get_S1 (2, chroma_h_shift, "chroma_h_shift");
- }
- Skip_SB( "unknown");
- Skip_SB( "context");
- Get_S1 (2, interlace, "interlace");
- if (Version<=2)
- {
- Skip_S1(4, "unknown");
- Skip_S1(8, "zero");
- }
- else
- {
- Skip_SB( "unknown");
- Get_SB ( alpha, "alpha");
- Get_SB ( rgb, "rgb");
- if (rgb)
- Skip_SB( "unused");
- else
- Get_SB ( chroma, "chroma");
- Skip_S1(7, "unused");
- Skip_SB( "version 3+ indicator");
- }
- BS_End();
-
- if (Frame_Count==0)
- {
- if (Version==2)
- {
- //BiCount;
- if (bpp_override)
- BitCount=bpp_override;
- Fill(Stream_Video, 0, Video_BitDepth, 8);
- }
- else
- {
- Fill(Stream_Video, 0, Video_BitDepth, bpp_override+1);
- }
-
- Fill(Stream_Video, 0, Video_Format_Version, __T("Version ")+Ztring::ToZtring(Version));
-
- if (Version==2)
- {
- Fill(Stream_Video, 0, Video_ColorSpace, HuffYUV_ColorSpace(BitCount));
- Fill(Stream_Video, 0, Video_ChromaSubsampling, HuffYUV_ChromaSubsampling(BitCount));
- }
- else
- {
- Fill(Stream_Video, 0, Video_ColorSpace, HuffYUV_ColorSpace(rgb, chroma, alpha));
- string ChromaSubsampling;
- if (chroma)
- {
- switch (chroma_h_shift)
- {
- case 0 :
- switch (chroma_v_shift)
- {
- case 0 : ChromaSubsampling="4:4:4"; break;
- default: ;
- }
- break;
- case 1 :
- switch (chroma_v_shift)
- {
- case 0 : ChromaSubsampling="4:2:2"; break;
- case 1 : ChromaSubsampling="4:2:0"; break;
- default: ;
- }
- break;
- case 2 :
- switch (chroma_v_shift)
- {
- case 0 : ChromaSubsampling="4:1:1"; break;
- case 1 : ChromaSubsampling="4:1:0"; break;
- case 2 : ChromaSubsampling="4:1:0 (4x4)"; break;
- default: ;
- }
- break;
- default: ;
- }
- }
- if (!ChromaSubsampling.empty() && alpha)
- ChromaSubsampling+=":4";
- Fill(Stream_Video, 0, Video_ChromaSubsampling, ChromaSubsampling);
- }
-
- switch (interlace)
- {
- case 0 :
- if (Version<=2 && Height)
- Fill(Stream_Video, 0, Video_ScanType, Height>288?"Interlaced":"Progressive");
- break;
- case 1 :
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- break;
- case 2 :
- Fill(Stream_Video, 0, Video_ScanType, "Progressive");
- break;
- default:;
- }
- }
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_HUFFYUV_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_HuffYuv.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_HuffYuv.h
deleted file mode 100644
index 05e78d6a7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_HuffYuv.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about HUFFYUV files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_HuffYUVH
-#define MediaInfo_HuffYUVH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_HuffYuv
-//***************************************************************************
-
-class File_HuffYuv : public File__Analyze
-{
-public :
- //In
- bool IsOutOfBandData;
- int16u BitCount;
- int32u Height;
-
- //Constructor/Destructor
- File_HuffYuv();
-
-private :
- //Streams management
- void Streams_Accept();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-
- //Elements
- void FrameHeader();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Lagarith.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Lagarith.cpp
deleted file mode 100644
index 1c2b8fa10..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Lagarith.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_LAGARITH_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Lagarith.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Lagarith::File_Lagarith()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("Lagarith");
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Lagarith::Streams_Fill()
-{
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "Lagarith");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Lagarith::Read_Buffer_Continue()
-{
- //Parsing
- int8u version;
- Get_L1 (version, "version");
- Skip_XX(Element_Size-Element_Offset, "data");
-
- FILLING_BEGIN();
- Accept();
- Fill();
- switch (version)
- {
- case 0x02 :
- case 0x04 : Fill(Stream_Video, 0, Video_ColorSpace, "RGB"); Fill(Stream_Video, 0, Video_BitDepth, 8); break;
- case 0x03 : Fill(Stream_Video, 0, Video_ColorSpace, "YUV"); Fill(Stream_Video, 0, Video_ChromaSubsampling, "4:2:2"); Fill(Stream_Video, 0, Video_BitDepth, 8); break;
- case 0x05 : Fill(Stream_Video, 0, Video_ColorSpace, "Y"); break;
- case 0x06 :
- case 0x07 : Fill(Stream_Video, 0, Video_ColorSpace, "RGB"); break;
- case 0x08 :
- case 0x09 : Fill(Stream_Video, 0, Video_ColorSpace, "RGBA"); break;
- case 0x0A :
- case 0x0B : Fill(Stream_Video, 0, Video_ColorSpace, "YUV"); Fill(Stream_Video, 0, Video_ChromaSubsampling, "4:2:0"); Fill(Stream_Video, 0, Video_BitDepth, 8); break;
- default : ;
- }
-
- FILLING_END();
- Finish();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_LAGARITH_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Lagarith.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Lagarith.h
deleted file mode 100644
index 8e317b5df..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Lagarith.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Lagarith files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_LagarithH
-#define MediaInfo_File_LagarithH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Lagarith
-//***************************************************************************
-
-class File_Lagarith : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Lagarith();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpeg4v.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpeg4v.cpp
deleted file mode 100644
index 785e9d15f..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpeg4v.cpp
+++ /dev/null
@@ -1,1864 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constants (Common)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEG4V_YES) || defined(MEDIAINFO_MPEG4_YES)
-//---------------------------------------------------------------------------
-
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-#include "ZenLib/Conf.h"
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-
-namespace MediaInfoLib
-{
-
-//---------------------------------------------------------------------------
-const char* Mpeg4v_Profile_Level(int32u Profile_Level)
-{
- switch (Profile_Level)
- {
- case B8(00000001) : return "Simple@L1";
- case B8(00000010) : return "Simple@L2";
- case B8(00000011) : return "Simple@L3";
- case B8(00000100) : return "Simple@L4a";
- case B8(00000101) : return "Simple@L5";
- case B8(00000110) : return "Simple@L6";
- case B8(00001000) : return "Simple@L0";
- case B8(00001001) : return "Simple@L0b";
- case B8(00010000) : return "Simple Scalable@L0";
- case B8(00010001) : return "Simple Scalable@L1";
- case B8(00010010) : return "Simple Scalable@L2";
- case B8(00010101) : return "AVC"; //For descriptors
- case B8(00100001) : return "Core@L1";
- case B8(00100010) : return "Core@L2";
- case B8(00110010) : return "Main@L2";
- case B8(00110011) : return "Main@L3";
- case B8(00110100) : return "Main@L4";
- case B8(01000010) : return "N-bit@L2";
- case B8(01010001) : return "Scalable Texture@L1";
- case B8(01100001) : return "Simple Face Animation@L1";
- case B8(01100010) : return "Simple Face Animation@L2";
- case B8(01100011) : return "Simple FBA@L1";
- case B8(01100100) : return "Simple FBA@L2";
- case B8(01110001) : return "Basic Animated Texture@L1";
- case B8(01110010) : return "Basic Animated Texture@L2";
- case B8(01111111) : return "AVC"; //For descriptors
- case B8(10000001) : return "Hybrid@L1";
- case B8(10000010) : return "Hybrid@L2";
- case B8(10010001) : return "Advanced Real Time Simple@L1";
- case B8(10010010) : return "Advanced Real Time Simple@L2";
- case B8(10010011) : return "Advanced Real Time Simple@L3";
- case B8(10010100) : return "Advanced Real Time Simple@L4";
- case B8(10100001) : return "Core Scalable@L1";
- case B8(10100010) : return "Core Scalable@L2";
- case B8(10100011) : return "Core Scalable@L3";
- case B8(10110001) : return "Advanced Coding Efficiency@L1";
- case B8(10110010) : return "Advanced Coding Efficiency@L2";
- case B8(10110011) : return "Advanced Coding Efficiency@L3";
- case B8(10110100) : return "Advanced Coding Efficiency@L4";
- case B8(11000001) : return "Advanced Core@L1";
- case B8(11000010) : return "Advanced Core@L2";
- case B8(11010001) : return "Advanced Scalable Texture@L1";
- case B8(11010010) : return "Advanced Scalable Texture@L2";
- case B8(11010011) : return "Advanced Scalable Texture@L3";
- case B8(11100001) : return "Simple Studio@L1";
- case B8(11100010) : return "Simple Studio@L2";
- case B8(11100011) : return "Simple Studio@L3";
- case B8(11100100) : return "Simple Studio@L4";
- case B8(11100101) : return "Core Studio@L1";
- case B8(11100110) : return "Core Studio@L2";
- case B8(11100111) : return "Core Studio@L3";
- case B8(11101000) : return "Core Studio@L4";
- case B8(11110000) : return "Advanced Simple@L0";
- case B8(11110001) : return "Advanced Simple@L1";
- case B8(11110010) : return "Advanced Simple@L2";
- case B8(11110011) : return "Advanced Simple@L3";
- case B8(11110100) : return "Advanced Simple@L4";
- case B8(11110101) : return "Advanced Simple@L5";
- case B8(11110111) : return "Advanced Simple@L3b";
- case B8(11111000) : return "Fine Granularity Scalable@L0";
- case B8(11111001) : return "Fine Granularity Scalable@L1";
- case B8(11111010) : return "Fine Granularity Scalable@L2";
- case B8(11111011) : return "Fine Granularity Scalable@L3";
- case B8(11111100) : return "Fine Granularity Scalable@L4";
- case B8(11111101) : return "Fine Granularity Scalable@L5";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-} //NameSpace
-
-//---------------------------------------------------------------------------
-#endif //...
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-//
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEG4V_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Mpeg4v.h"
-#include "ZenLib/BitStream.h"
-#include "ZenLib/Utils.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Constants
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Mpeg4v_Colorimetry[]=
-{
- "",
- "4:2:0",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg4v_visual_object_type[]=
-{
- "",
- "video",
- "still texture",
- "mesh",
- "FBA",
- "3D mesh",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg4v_visual_object_verid[]=
-{
- "",
- "ISO/IEC 14496-2",
- "ISO/IEC 14496-2 AMD 1",
- "ISO/IEC 14496-2 AMD 2",
- "ISO/IEC 14496-2 AMD 3 (Studio)",
- "ISO/IEC 14496-2 AMD 4 (SVP)",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg4v_video_object_layer_verid[]=
-{
- "",
- "ISO/IEC 14496-2",
- "ISO/IEC 14496-2 AMD 1",
- "ISO/IEC 14496-2 AMD 2",
- "ISO/IEC 14496-2 AMD 3 (Studio)",
- "ISO/IEC 14496-2 AMD 4 (SVP)",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpeg4v_vop_coding_type[]=
-{
- "I",
- "P",
- "B",
- "S",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpegv_colour_primaries(int8u colour_primaries);
-const char* Mpegv_transfer_characteristics(int8u transfer_characteristics);
-const char* Mpegv_matrix_coefficients(int8u matrix_coefficients);
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mpeg4v::File_Mpeg4v()
-:File__Analyze()
-{
- //Config
- Trusted_Multiplier=2;
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- PTS_DTS_Needed=true;
- IsRawStream=true;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.3?30:2;
- FrameIsAlwaysComplete=false;
-
- //Temp
- video_object_layer_start_IsParsed=false;
- colour_description=false;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4v::OnlyVOP()
-{
- //Default stream values
- Synched_Init();
- Streams[0xB3].Searching_Payload=true; //group_of_vop_start
- Streams[0xB6].Searching_Payload=true; //vop_start
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mpeg4v::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+4>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01)
- {
- Synched=false;
- return true;
- }
-
- //Quick search
- if (!Header_Parser_QuickSearch())
- return false;
-
- #if MEDIAINFO_IBI
- bool RandomAccess=Buffer[Buffer_Offset+3]==0xB0; //SequenceHeader
- if (RandomAccess)
- Ibi_Add();
- #endif //MEDIAINFO_IBI
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4v::Synched_Init()
-{
- //Count of a Packets
- IVOP_Count=0;
- PVOP_Count=0;
- BVOP_Count=0;
- BVOP_Count_Max=0;
- SVOP_Count=0;
- NVOP_Count=0;
- Interlaced_Top=0;
- Interlaced_Bottom=0;
- Frame_Count_InThisBlock_Max=0;
- if (Frame_Count_NotParsedIncluded==(int64u)-1)
- Frame_Count_NotParsedIncluded=0; //No Frame_Count_NotParsedIncluded in the container
-
- //From VOL, needed in VOP
- fixed_vop_time_increment=0;
- Time_Begin_Seconds=(int32u)-1;
- Time_End_Seconds=(int32u)-1;
- Time_Begin_MilliSeconds=(int16u)-1;
- Time_End_MilliSeconds=(int16u)-1;
- object_layer_width=0;
- object_layer_height=0;
- vop_time_increment_resolution=0;
- visual_object_verid=1;
- profile_and_level_indication=0;
- no_of_sprite_warping_points=0;
- aspect_ratio_info=0;
- par_width=0;
- par_height=0;
- bits_per_pixel=8;
- shape=0;
- sprite_enable=0;
- estimation_method=0;
- chroma_format=(int8u)-1;
- colour_primaries=(int8u)-1;
- transfer_characteristics=(int8u)-1;
- matrix_coefficients=(int8u)-1;
- quarter_sample=false;
- low_delay=false;
- load_intra_quant_mat=false;
- load_nonintra_quant_mat=false;
- load_intra_quant_mat_grayscale=false;
- load_nonintra_quant_mat_grayscale=false;
- interlaced=false;
- newpred_enable=0;
- time_size=0;
- reduced_resolution_vop_enable=0;
- scalability=0;
- enhancement_type=0;
- complexity_estimation_disable=false;
- opaque=false;
- transparent=false;
- intra_cae=false;
- inter_cae=false;
- no_update=false;
- upsampling=false;
- intra_blocks=false;
- inter_blocks=false;
- inter4v_blocks=false;
- not_coded_blocks=false;
- dct_coefs=false;
- dct_lines=false;
- vlc_symbols=false;
- vlc_bits=false;
- apm=false;
- npm=false;
- interpolate_mc_q=false;
- forw_back_mc_q=false;
- halfpel2=false;
- halfpel4=false;
- sadct=false;
- quarterpel=false;
- quant_type=false;
-
- if (!IsSub)
- FrameInfo.DTS=0;
-
- //Default stream values
- Streams.resize(0x100);
- Streams[0x00].Searching_Payload=true; //video_object_start
- Streams[0x20].Searching_Payload=true; //video_object_layer_start
- Streams[0xB0].Searching_Payload=true; //visual_object_sequence_start
- Streams[0xB5].Searching_Payload=true; //visual_object_start
- NextCode_Add(0x20); //video_object_layer_start
- for (int8u Pos=0xFF; Pos>=0xB9; Pos--)
- Streams[Pos].Searching_Payload=true; //Testing MPEG-PS
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4v::Streams_Fill()
-{
- //Filling
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "MPEG-4 Visual");
- Fill(Stream_Video, 0, Video_Codec, "MPEG-4V");
-
- if (profile_and_level_indication>0)
- {
- Fill(Stream_Video, 0, Video_Format_Profile, Mpeg4v_Profile_Level(profile_and_level_indication));
- Fill(Stream_Video, 0, Video_Codec_Profile, Mpeg4v_Profile_Level(profile_and_level_indication));
- }
-
- if (fixed_vop_time_increment && vop_time_increment_resolution)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, ((float)vop_time_increment_resolution)/fixed_vop_time_increment);
- if (object_layer_height)
- {
- Fill(Stream_Video, StreamPos_Last, Video_Width, object_layer_width);
- Fill(Stream_Video, StreamPos_Last, Video_Height, object_layer_height);
- float32 PixelAspectRatio_Value=1.0;
- if (aspect_ratio_info==0x01) PixelAspectRatio_Value=(float32)1;
- if (aspect_ratio_info==0x02) PixelAspectRatio_Value=(float32)12/(float32)11;
- else if (aspect_ratio_info==0x03) PixelAspectRatio_Value=(float32)10/(float32)11;
- else if (aspect_ratio_info==0x04) PixelAspectRatio_Value=(float32)16/(float32)11;
- else if (aspect_ratio_info==0x05) PixelAspectRatio_Value=(float32)40/(float32)33;
- else if (aspect_ratio_info==0x0F && par_height) PixelAspectRatio_Value=((float32)par_width)/par_height;
- Fill(Stream_Video, 0, Video_PixelAspectRatio, PixelAspectRatio_Value, 3, true);
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, ((float)object_layer_width)/object_layer_height*PixelAspectRatio_Value, 3, true);
- }
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- Fill(Stream_Video, 0, Video_BitDepth, bits_per_pixel);
- if (chroma_format<4)
- Fill(Stream_Video, 0, Video_Colorimetry, Mpeg4v_Colorimetry[chroma_format]);
- if (colour_description)
- {
- Fill(Stream_Video, 0, Video_colour_description_present, "Yes");
- Fill(Stream_Video, 0, Video_colour_primaries, Mpegv_colour_primaries(colour_primaries));
- Fill(Stream_Video, 0, Video_transfer_characteristics, Mpegv_transfer_characteristics(transfer_characteristics));
- Fill(Stream_Video, 0, Video_matrix_coefficients, Mpegv_matrix_coefficients(matrix_coefficients));
- }
- if (low_delay)
- {
- Fill(Stream_Video, 0, Video_Format_Settings_BVOP, "No");
- Fill(Stream_Video, 0, Video_Codec_Settings_BVOP, "No");
- }
- else
- {
- Fill(Stream_Video, 0, Video_Format_Settings, "BVOP");
- Fill(Stream_Video, 0, Video_Format_Settings_BVOP, "Yes");
- Fill(Stream_Video, 0, Video_Codec_Settings, "BVOP");
- Fill(Stream_Video, 0, Video_Codec_Settings_BVOP, "Yes");
- }
- if (no_of_sprite_warping_points)
- {
- Fill(Stream_Video, 0, Video_Format_Settings, Ztring(__T("GMC"))+Ztring::ToZtring(no_of_sprite_warping_points));
- Fill(Stream_Video, 0, Video_Format_Settings_GMC, no_of_sprite_warping_points);
- Fill(Stream_Video, 0, Video_Codec_Settings, Ztring(__T("GMC"))+Ztring::ToZtring(no_of_sprite_warping_points));
- Fill(Stream_Video, 0, Video_Codec_Settings_GMC, no_of_sprite_warping_points);
- }
- else
- {
- Fill(Stream_Video, 0, Video_Format_Settings_GMC, 0);
- Fill(Stream_Video, 0, Video_Codec_Settings_GMC, 0);
- }
- if (quarter_sample)
- {
- Fill(Stream_Video, 0, Video_Format_Settings, "QPel");
- Fill(Stream_Video, 0, Video_Format_Settings_QPel, "Yes");
- Fill(Stream_Video, 0, Video_Codec_Settings, "QPel");
- Fill(Stream_Video, 0, Video_Codec_Settings_QPel, "Yes");
- }
- else
- {
- Fill(Stream_Video, 0, Video_Format_Settings_QPel, "No");
- Fill(Stream_Video, 0, Video_Codec_Settings_QPel, "No");
- }
- if (!quant_type)
- {
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix, "Default (H.263)");
- Fill(Stream_Video, 0, Video_Codec_Settings_Matrix, "Default (H.263)");
- }
- else if (load_intra_quant_mat_grayscale || load_nonintra_quant_mat_grayscale)
- {
- Fill(Stream_Video, 0, Video_Format_Settings, "Custom Matrix (Gray)");
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix, "Custom (Gray)");
- Fill(Stream_Video, 0, Video_Codec_Settings, "Custom Matrix (Gray)");
- Fill(Stream_Video, 0, Video_Codec_Settings_Matrix, "Custom (Gray)");
- }
- else if (load_intra_quant_mat || load_nonintra_quant_mat)
- {
- Fill(Stream_Video, 0, Video_Format_Settings, "Custom Matrix");
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix, "Custom");
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix_Data, Matrix_intra);
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix_Data, Matrix_nonintra);
- Fill(Stream_Video, 0, Video_Codec_Settings, "Custom Matrix");
- Fill(Stream_Video, 0, Video_Codec_Settings_Matrix, "Custom");
- }
- else
- {
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix, "Default (MPEG)");
- Fill(Stream_Video, 0, Video_Codec_Settings_Matrix, "Default (MPEG)");
- }
- if (interlaced)
- {
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- if ((Interlaced_Top && Interlaced_Bottom) || (!Interlaced_Top && !Interlaced_Bottom))
- Fill(Stream_Video, 0, Video_Interlacement, "Interlaced");
- else
- {
- Fill(Stream_Video, 0, Video_ScanOrder, Interlaced_Top?"TFF":"BFF");
- Fill(Stream_Video, 0, Video_Interlacement, Interlaced_Top?"TFF":"BFF");
- }
- }
- else
- {
- Fill(Stream_Video, 0, Video_ScanType, "Progressive");
- Fill(Stream_Video, 0, Video_Interlacement, "PPF");
- }
- if (!Library.empty())
- {
- Fill(Stream_Video, 0, Video_Encoded_Library, Library);
- Fill(Stream_Video, 0, Video_Encoded_Library_Name, Library_Name);
- Fill(Stream_Video, 0, Video_Encoded_Library_Version, Library_Version);
- Fill(Stream_Video, 0, Video_Encoded_Library_Date, Library_Date);
- }
- for (size_t Pos=0; Pos<user_data_start_SNC_Data.size(); Pos++)
- {
- if (user_data_start_SNC_Data[Pos][0]==__T("CamTim"))
- Fill(Stream_General, 0, General_Recorded_Date, Ztring().Date_From_String(user_data_start_SNC_Data[Pos][1].To_UTF8().c_str()));
- if (user_data_start_SNC_Data[Pos][0]==__T("FrmRate"))
- Fill(Stream_Video, 0, Video_FrameRate, user_data_start_SNC_Data[Pos][1].To_float32(), 3);
- if (user_data_start_SNC_Data[Pos][0]==__T("TimStamp"))
- {
- Fill(Stream_Video, 0, Video_Delay, user_data_start_SNC_Data[Pos][1].To_int64u());
- Fill(Stream_Video, 0, Video_Delay_Source, "Stream");
- }
- if (user_data_start_SNC_Data[Pos][0]==__T("CamPos") && user_data_start_SNC_Data[Pos][1].size()==16)
- {
- Fill(Stream_Video, 0, "Pan / Tilt / Zoom / Status", Ztring(user_data_start_SNC_Data[Pos][1].substr( 3, 4)).To_int8u(16));
- Fill(Stream_Video, 0, "Pan / Tilt / Zoom / Status", Ztring(user_data_start_SNC_Data[Pos][1].substr( 7, 4)).To_int8u(16));
- Fill(Stream_Video, 0, "Pan / Tilt / Zoom / Status", Ztring(user_data_start_SNC_Data[Pos][1].substr(11, 4)).To_int8u(16));
- if (user_data_start_SNC_Data[Pos][1][15]==__T('M'))
- Fill(Stream_Video, 0, "Pan / Tilt / Zoom / Status", __T("Move"));
- else if (user_data_start_SNC_Data[Pos][1][15]==__T('S'))
- Fill(Stream_Video, 0, "Pan / Tilt / Zoom / Status", __T("Stop"));
- else
- Fill(Stream_Video, 0, "Pan / Tilt / Zoom / Status", user_data_start_SNC_Data[Pos][1][15]);
- }
- if (user_data_start_SNC_Data[Pos][0]==__T("AlmEvent") && user_data_start_SNC_Data[Pos][1].size()==16)
- Fill(Stream_Video, 0, "Alarm event", user_data_start_SNC_Data[Pos][1]);
- }
- if (video_object_layer_start_IsParsed && shape!=2 && !complexity_estimation_disable)
- {
- Fill(Stream_Video, 0, "data_partitioned", data_partitioned?"Yes":"No");
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("data_partitioned"), Info_Options)=__T("N NT");
- if (data_partitioned)
- {
- Fill(Stream_Video, 0, "reversible_vlc", reversible_vlc?"Yes":"No");
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("reversible_vlc"), Info_Options)=__T("N NT");
- }
- }
-
- //BVOPs
- if (BVOP_Count_Max)
- {
- Ztring Format_Settings=Retrieve(Stream_Video, 0, Video_Format_Settings);
- Format_Settings.FindAndReplace(__T("BVOP"), __T("BVOP")+Ztring::ToZtring(BVOP_Count_Max));
- Fill(Stream_Video, 0, Video_Format_Settings, Format_Settings, true);
- Fill(Stream_Video, 0, Video_Format_Settings_BVOP, BVOP_Count_Max, 10, true);
- }
-
- //Packed Bitstream
- if (Frame_Count_InThisBlock_Max==2)
- {
- Fill(Stream_Video, 0, Video_MuxingMode, MediaInfoLib::Config.Language_Get("MuxingMode_PackedBitstream"));
- Fill(Stream_Video, 0, Video_Codec_Settings, "Packed Bitstream");
- Fill(Stream_Video, 0, Video_Codec_Settings_PacketBitStream, "Yes");
- }
- else
- {
- Fill(Stream_Video, 0, Video_Codec_Settings_PacketBitStream, "No");
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4v::Streams_Finish()
-{
- //Duration
- if (!IsSub && Time_End_Seconds!=(int32u)-1 && Time_Begin_Seconds!=(int32u)-1)
- {
- int32u Duration=(Time_End_Seconds-Time_Begin_Seconds)*1000+Time_End_MilliSeconds-Time_Begin_MilliSeconds;
- if (fixed_vop_time_increment && vop_time_increment_resolution)
- Duration+=(float32_int32s)(((float)1000)/(((float)vop_time_increment_resolution)/fixed_vop_time_increment));
- Fill(Stream_Video, 0, Video_Duration, Duration);
- }
-
- #if MEDIAINFO_IBI
- if (fixed_vop_time_increment)
- Ibi_Stream_Finish(vop_time_increment_resolution, fixed_vop_time_increment);
- #endif //MEDIAINFO_IBI
-}
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Mpeg4v::Demux_UnpacketizeContainer_Test()
-{
- if ((Demux_IntermediateItemFound && Buffer[Buffer_Offset+3]==0xB0) || Buffer[Buffer_Offset+3]==0xB3 || Buffer[Buffer_Offset+3]==0xB6)
- {
- if (Demux_Offset==0)
- {
- Demux_Offset=Buffer_Offset;
- Demux_IntermediateItemFound=false;
- }
- while (Demux_Offset+4<=Buffer_Size)
- {
- //Synchronizing
- while(Demux_Offset+3<=Buffer_Size && (Buffer[Demux_Offset ]!=0x00
- || Buffer[Demux_Offset+1]!=0x00
- || Buffer[Demux_Offset+2]!=0x01))
- {
- Demux_Offset+=2;
- while(Demux_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Demux_Offset+=2;
- if (Demux_Offset>=Buffer_Size || Buffer[Demux_Offset-1]==0x00)
- Demux_Offset--;
- }
-
- if (Demux_Offset+4<=Buffer_Size)
- {
- if (Demux_IntermediateItemFound)
- {
- bool MustBreak;
- switch (Buffer[Demux_Offset+3])
- {
- case 0xB0 :
- case 0xB3 :
- case 0xB6 :
- MustBreak=true; break;
- default :
- Demux_Offset+=3;
- MustBreak=false;
- }
- if (MustBreak)
- break; //while() loop
- }
- else
- {
- if (Buffer[Demux_Offset+3]==0xB6)
- Demux_IntermediateItemFound=true;
- }
- }
- Demux_Offset++;
- }
-
- if (Demux_Offset+4>Buffer_Size && File_Offset+Buffer_Size!=File_Size)
- return false; //No complete frame
-
- if (!Status[IsAccepted])
- {
- if (Config->Demux_EventWasSent)
- return false;
- File_Mpeg4v* MI=new File_Mpeg4v;
- Open_Buffer_Init(MI);
- Open_Buffer_Continue(MI, Buffer, Buffer_Size);
- bool IsOk=MI->Status[IsAccepted];
- delete MI;
- if (!IsOk)
- return false;
- }
-
- Demux_UnpacketizeContainer_Demux(Buffer[Buffer_Offset+3]==0xB0);
- }
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4v::Read_Buffer_Unsynched()
-{
- Time_End_Seconds=(int32u)-1;
- Time_End_MilliSeconds=(int16u)-1;
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpeg4v::Header_Parse()
-{
- //Parsing
- int8u start_code;
- Skip_B3( "synchro");
- Get_B1 (start_code, "start_code");
- if (!Header_Parser_Fill_Size())
- {
- Element_WaitForMoreData();
- return;
- }
-
- //Filling
- Header_Fill_Code(start_code, Ztring().From_CC1(start_code));
-}
-
-//---------------------------------------------------------------------------
-bool File_Mpeg4v::Header_Parser_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset+4;
- while (Buffer_Offset_Temp+4<=Buffer_Size
- && CC3(Buffer+Buffer_Offset_Temp)!=0x000001)
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer_Offset_Temp>=Buffer_Size || Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
- }
-
- //Must wait more data?
- if (Buffer_Offset_Temp+4>Buffer_Size)
- {
- if (FrameIsAlwaysComplete || File_Offset+Buffer_Size==File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Mpeg4v::Header_Parser_QuickSearch()
-{
- while ( Buffer_Offset+4<=Buffer_Size
- && Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x01)
- {
- //Getting start_code
- int8u start_code=CC1(Buffer+Buffer_Offset+3);
-
- //Searching start
- if (Streams[start_code].Searching_Payload)
- return true;
-
- //Synchronizing
- Buffer_Offset+=4;
- Synched=false;
- if (!Synchronize())
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
-
- if (Buffer_Offset+4>Buffer_Size)
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
- }
-
- if (Buffer_Offset+3==Buffer_Size)
- return false; //Sync is OK, but start_code is not available
- Trusted_IsNot("MPEG-4 Visual, Synchronisation lost");
- return Synchronize();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpeg4v::Data_Parse()
-{
- //Parsing
- switch (Element_Code)
- {
- case 0xB0: visual_object_sequence_start(); break;
- case 0xB1: visual_object_sequence_end(); break;
- case 0xB2: user_data_start(); break;
- case 0xB3: group_of_vop_start(); break;
- case 0xB4: video_session_error(); break;
- case 0xB5: visual_object_start(); break;
- case 0xB6: vop_start(); break;
- case 0xB7: slice_start(); break;
- case 0xB8: extension_start(); break;
- case 0xB9: fgs_vop_start(); break;
- case 0xBA: fba_object_start(); break;
- case 0xBB: fba_object_plane_start(); break;
- case 0xBC: mesh_object_start(); break;
- case 0xBD: mesh_object_plane_start(); break;
- case 0xBE: still_texture_object_start(); break;
- case 0xBF: texture_spatial_layer_start(); break;
- case 0xC0: texture_snr_layer_start(); break;
- case 0xC1: texture_tile_start(); break;
- case 0xC2: texture_shape_layer_start(); break;
- case 0xC3: stuffing_start(); break;
- default:
- if (Element_Code<=0x1F) video_object_start();
- else if (Element_Code>=0x20
- && Element_Code<=0x2F) video_object_layer_start();
- else if (Element_Code>=0x40
- && Element_Code<=0x4F) fgs_bp_start();
- else if (Element_Code<=0xC5) reserved();
- else
- {
- if (Frame_Count==0 && Buffer_TotalBytes>Buffer_TotalBytes_FirstSynched_Max)
- Trusted=0;
- Trusted_IsNot("Unattended element!");
- }
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Packet "00"
-void File_Mpeg4v::video_object_start()
-{
- Element_Name("video_object_start");
-
- //Integrity
- if (Element_Size>0)
- {
- Trusted_IsNot("size is wrong");
- return;
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet "20"
-void File_Mpeg4v::video_object_layer_start()
-{
- Element_Name("video_object_layer_start");
-
- //Default
- Matrix_intra.clear();
- Matrix_nonintra.clear();
-
- //Parsing
- int8u video_object_layer_verid=visual_object_verid;
- int8u shape_extension=0;
- int32u aux_comp_count=0;
- BS_Begin();
- Skip_SB( "random_accessible_vol");
- Skip_S1(8, "video_object_type_indication");
- TEST_SB_SKIP( "is_object_layer_identifier");
- Get_S1 (4, video_object_layer_verid, "video_object_layer_verid"); Param_Info1(Mpeg4v_video_object_layer_verid[video_object_layer_verid]);
- Skip_S1(3, "video_object_layer_priority");
- TEST_SB_END();
- Get_S1 (4, aspect_ratio_info, "aspect_ratio_info");
- if (aspect_ratio_info==0x0F)
- {
- Get_S1 (8, par_width, "par_width");
- Get_S1 (8, par_height, "par_height");
- }
- TEST_SB_SKIP( "vol_control_parameters");
- Get_S1 (2, chroma_format, "chroma_format");
- Get_SB ( low_delay, "low_delay");
- TEST_SB_SKIP( "vbv_parameters");
- Skip_S2(15, "first_half_bit_rate");
- Mark_1 ();
- Skip_S2(15, "latter_half_bit_rate");
- Mark_1 ();
- Skip_S2(15, "first_half_vbv_Element_Size");
- Mark_1 ();
- Skip_S1( 3, "latter_half_vbv_Element_Size");
- Skip_S2(11, "first_half_vbv_occupancy");
- Mark_1 ();
- Skip_S2(15, "latter_half_vbv_occupancy");
- Mark_1 ();
- TEST_SB_END();
- TEST_SB_END();
- Get_S1 (2, shape, "video_object_layer_shape");
- if (shape==3 && video_object_layer_verid!=1) //Shape=GrayScale
- Get_S1 (4, shape_extension, "video_object_layer_shape_extension");
- switch (shape_extension)
- {
- case 0 :
- case 1 :
- case 5 :
- case 7 :
- case 8 :
- aux_comp_count=1; break;
- case 2 :
- case 3 :
- case 6 :
- case 9 :
- case 11 :
- aux_comp_count=2; break;
- case 4 :
- case 10 :
- case 12 :
- aux_comp_count=3; break;
- default : ;
- }
- Mark_1 ();
- Get_S2 (16, vop_time_increment_resolution, "vop_time_increment_resolution");
- int32u PowerOf2=1;
- for (time_size=0; time_size<=16; time_size++)
- {
- if ((int32u)vop_time_increment_resolution<PowerOf2)
- break;
- PowerOf2<<=1;
- }
- Mark_1 ();
- TEST_SB_SKIP( "fixed_vop_rate");
- Get_BS (time_size, fixed_vop_time_increment, "fixed_vop_time_increment"); Param_Info2C((vop_time_increment_resolution), fixed_vop_time_increment*1000/vop_time_increment_resolution, " ms");
- TEST_SB_END();
- if (shape!=2) //Shape!=BinaryOnly
- {
- if (shape==0) //Shape=Rectangular
- {
- Mark_1 ();
- Get_S2 (13, object_layer_width, "object_layer_width");
- Mark_1 ();
- Get_S2 (13, object_layer_height, "object_layer_height");
- Mark_1 ();
- }
- Get_SB (interlaced, "interlaced");
- Skip_SB( "obmc_disable");
- if (video_object_layer_verid==1)
- Get_S1 (1, sprite_enable, "sprite_enable");
- else
- Get_S1 (2, sprite_enable, "sprite_enable");
- if (sprite_enable==1 || sprite_enable==2 ) //static or GMC
- {
- if (sprite_enable!=2) //No GMC
- {
- Skip_S2(13, "sprite_width");
- Mark_1 ();
- Skip_S2(13, "sprite_height");
- Mark_1 ();
- Skip_S2(13, "sprite_top_coordinate");
- Mark_1 ();
- Skip_S2(13, "sprite_left_coordinate");
- Mark_1 ();
- }
- Get_S1 (6, no_of_sprite_warping_points, "no_of_sprite_warping_points");
- Skip_S1(2, "sprite_warping_accuracy");
- Skip_SB( "sprite_brightness_change");
- if (sprite_enable!=2) //No GMC
- Skip_SB( "low_latency_sprite_enable");
- }
- if (video_object_layer_verid!=1 && shape!=0) //Shape!=Rectangular
- Skip_SB( "sadct_disable");
- TEST_SB_SKIP( "bits_per_pixel_not_8_bit");
- Skip_S1(4, "quant_precision");
- Get_S1 (4, bits_per_pixel, "bits_per_pixel");
- TEST_SB_END();
- if (shape==3) //Shape=GrayScale
- {
- Skip_SB( "no_gray_quant_update");
- Skip_SB( "composition_method");
- Skip_SB( "linear_composition");
- }
- TEST_SB_GET (quant_type, "quant_type");
- Get_SB (load_intra_quant_mat, "load_intra_quant_mat");
- if(load_intra_quant_mat)
- for (int16u Pos=0; Pos<64; Pos++)
- {
- int8u intra_quant_mat;
- Get_S1 (8, intra_quant_mat, "intra_quant_mat");
- if (!intra_quant_mat)
- {
- if (Matrix_intra.size()<2)
- break; //There is a problem
- Ztring Value=Matrix_intra.substr(Matrix_intra.size()-2, 2);
- for (;Pos<64; Pos++)
- Matrix_intra+=Value;
- }
- else
- {
- Ztring Value=Ztring::ToZtring(intra_quant_mat, 16);
- if (Value.size()==1)
- Value.insert(0, __T("0"));
- Matrix_intra+=Value;
- }
- }
- else
- Matrix_intra="Default";
- Get_SB (load_nonintra_quant_mat, "load_nonintra_quant_mat");
- if(load_nonintra_quant_mat)
- for (int16u Pos=0; Pos<64; Pos++)
- {
- int8u nonintra_quant_mat;
- Get_S1 (8, nonintra_quant_mat, "nonintra_quant_mat");
- if (!nonintra_quant_mat)
- {
- if (Matrix_nonintra.size()<2)
- break; //There is a problem
- Ztring Value=Matrix_nonintra.substr(Matrix_nonintra.size()-2, 2);
- for (;Pos<64; Pos++)
- Matrix_nonintra+=Value;
- }
- else
- {
- Ztring Value=Ztring::ToZtring(nonintra_quant_mat, 16);
- if (Value.size()==1)
- Value.insert(0, __T("0"));
- Matrix_nonintra+=Value;
- }
- }
- else
- Matrix_nonintra="Default";
- if(shape==3) //Shape=GrayScale
- {
- for(size_t aux_comp_Pos=0; aux_comp_Pos<aux_comp_count; aux_comp_Pos++)
- {
- Get_SB (load_intra_quant_mat_grayscale, "load_intra_quant_mat_grayscale");
- if(load_intra_quant_mat_grayscale)
- for (int16u Pos=0; Pos<64; Pos++)
- {
- int8u intra_quant_mat_grayscale;
- Get_S1 (8, intra_quant_mat_grayscale, "intra_quant_mat_grayscale");
- if (!intra_quant_mat_grayscale)
- break;
- }
- Get_SB (load_nonintra_quant_mat_grayscale, "load_nonintra_quant_mat_grayscale");
- if(load_nonintra_quant_mat_grayscale)
- for (int16u Pos=0; Pos<64; Pos++)
- {
- int8u nonintra_quant_mat_grayscale;
- Get_S1 (8, nonintra_quant_mat_grayscale, "nonintra_quant_mat_grayscale");
- if (!nonintra_quant_mat_grayscale)
- break;
- }
- }
- }
- TEST_SB_END();
- if (video_object_layer_verid!=1)
- {
- Get_SB (quarter_sample, "quarter_sample");
- }
- Get_SB (complexity_estimation_disable, "complexity_estimation_disable");
- if (!complexity_estimation_disable)
- {
- Get_S1 (2, estimation_method, "estimation_method");
- if (estimation_method==0 || estimation_method==1)
- {
- TEST_SB_SKIP( "shape_complexity_estimation_disable");
- Get_SB (opaque, "opaque");
- Get_SB (transparent, "transparent");
- Get_SB (intra_cae, "intra_cae");
- Get_SB (inter_cae, "inter_cae");
- Get_SB (no_update, "no_update");
- Get_SB (upsampling, "upsampling");
- TEST_SB_END();
- TEST_SB_SKIP( "texture_complexity_estimation_set_1_disable");
- Get_SB (intra_blocks, "intra_blocks");
- Get_SB (inter_blocks, "inter_blocks");
- Get_SB (inter4v_blocks, "inter4v_blocks");
- Get_SB (not_coded_blocks, "not_coded_blocks");
- TEST_SB_END();
- Mark_1 ();
- TEST_SB_SKIP( "texture_complexity_estimation_set_2_disable");
- Get_SB (dct_coefs, "dct_coefs");
- Get_SB (dct_lines, "dct_lines");
- Get_SB (vlc_symbols, "vlc_symbols");
- Get_SB (vlc_bits, "vlc_bits");
- TEST_SB_END();
- TEST_SB_SKIP( "motion_compensation_complexity_disable");
- Get_SB (apm, "apm");
- Get_SB (npm, "npm");
- Get_SB (interpolate_mc_q, "interpolate_mc_q");
- Get_SB (forw_back_mc_q, "forw_back_mc_q");
- Get_SB (halfpel2, "halfpel2");
- Get_SB (halfpel4, "halfpel4");
- TEST_SB_END();
- Mark_1 ();
- if (estimation_method==1)
- {
- TEST_SB_SKIP( "version2_complexity_estimation_disable");
- Get_SB (sadct, "sadct");
- Get_SB (quarterpel, "quarterpel");
- TEST_SB_END();
- }
- }
- }
- Skip_SB( "resync_marker_disable");
- TEST_SB_GET( data_partitioned, "data_partitioned");
- Get_SB ( reversible_vlc, "reversible_vlc");
- TEST_SB_END();
- if (video_object_layer_verid!=1)
- {
- Get_SB (newpred_enable, "newpred_enable");
- if (newpred_enable)
- {
- Skip_S1(2, "requested_upstream_message_type");
- Skip_SB( "newpred_segment_type");
- }
- Get_SB (reduced_resolution_vop_enable, "reduced_resolution_vop_enable");
- }
- Get_SB (scalability, "scalability");
- if (scalability==1)
- {
- bool Hierarchy;
- Get_SB ( Hierarchy, "hierarchy_type");
- Skip_S1(4, "ref_layer_id");
- Skip_SB( "ref_layer_sampling_direc");
- Skip_S1(5, "hor_sampling_factor_n");
- Skip_S1(5, "hor_sampling_factor_m");
- Skip_S1(5, "vert_sampling_factor_n");
- Skip_S1(5, "vert_sampling_factor_m");
- Get_SB ( enhancement_type, "enhancement_type");
- if (shape==1 && Hierarchy==0) //Shape=Binary
- {
- Skip_SB( "use_ref_shape");
- Skip_SB( "use_ref_texture");
- Skip_S1(5, "shape_hor_sampling_factor_n");
- Skip_S1(5, "shape_hor_sampling_factor_m");
- Skip_S1(5, "shape_vert_sampling_factor_n");
- Skip_S1(5, "shape_vert_sampling_factor_m");
- }
- }
- }
- else
- {
- if (video_object_layer_verid!=1)
- {
- TEST_SB_SKIP( "scalability");
- Skip_S1(4, "ref_layer_id");
- Skip_S1(5, "shape_hor_sampling_factor_n");
- Skip_S1(5, "shape_hor_sampling_factor_m");
- Skip_S1(5, "shape_vert_sampling_factor_n");
- Skip_S1(5, "shape_vert_sampling_factor_m");
- TEST_SB_END();
- }
- Skip_SB( "resync_marker_disable");
- }
- BS_End();
-
- //Coherancy
- if (object_layer_width==0 || object_layer_height==0 || ((float32)object_layer_width)/object_layer_height<((float32)0.1) || object_layer_width/object_layer_height>10)
- Trusted_IsNot("Problem with width and height!");
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Test();
- NextCode_Clear();
- NextCode_Add(0xB2); //user_data
- NextCode_Add(0xB3); //group_of_vop_start
- NextCode_Add(0xB6); //vop_start
- for (int8u Pos=0x00; Pos<0x1F; Pos++)
- NextCode_Add(Pos); //video_object_start
-
- //Autorisation of other streams
- Streams[0xB2].Searching_Payload=true; //user_data
- Streams[0xB3].Searching_Payload=true; //group_of_vop_start
- Streams[0xB6].Searching_Payload=true; //vop_start
-
- //Setting as OK
- video_object_layer_start_IsParsed=true;
- if (!Status[IsAccepted])
- Accept("MPEG-4 Visual");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "40"
-//
-void File_Mpeg4v::fgs_bp_start()
-{
- Element_Name("fgs_bp_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "B0"
-void File_Mpeg4v::visual_object_sequence_start()
-{
- Element_Name("visual_object_sequence_start");
-
- //Parsing
- Get_B1 (profile_and_level_indication, "profile_and_level_indication"); Param_Info1(Mpeg4v_Profile_Level(profile_and_level_indication));
-
- //Integrity
- if (Element_Size>1)
- {
- Trusted_IsNot("Size is wrong");
- return;
- }
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Clear();
- NextCode_Add(0xB1); //visual_object_sequence_end
- NextCode_Add(0xB2); //user_data
- NextCode_Add(0xB5); //visual_object_start
-
- //Autorisation of other streams
- Streams[0xB1].Searching_Payload=true, //visual_object_sequence_end
- Streams[0xB2].Searching_Payload=true; //user_data
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B1"
-void File_Mpeg4v::visual_object_sequence_end()
-{
- Element_Name("visual_object_sequence_end");
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Clear();
- NextCode_Add(0xB0); //visual_object_sequence_start
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B2", User defined size, this is often used of library name
-void File_Mpeg4v::user_data_start()
-{
- Element_Name("user_data_start");
-
- //Sony SNC files (security video)
- if (Element_Size>=120 && Element_Size<=140)
- {
- int64u SNC_Identifier;
- Peek_B8(SNC_Identifier);
- if (SNC_Identifier==0x43616D54696D3A20ULL)
- {
- user_data_start_SNC();
- return;
- }
- }
-
- //Rejecting junk at the begin
- size_t Library_Start_Offset=0;
- while (Library_Start_Offset+4<=Element_Size)
- {
- bool OK=true;
- for (size_t Pos=0; Pos<4; Pos++)
- {
- if (!((Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x20 && Pos)
- || Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x22
- || Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x27
- || Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x28
- || (Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x29 && Pos)
- || (Buffer[Buffer_Offset+Library_Start_Offset+Pos]>=0x30 && Buffer[Buffer_Offset+Library_Start_Offset+Pos]<=0x3F)
- || (Buffer[Buffer_Offset+Library_Start_Offset+Pos]>=0x41 && Buffer[Buffer_Offset+Library_Start_Offset+Pos]<=0x7D)))
- {
- OK=false;
- break;
- }
- }
- if (OK)
- break;
- Library_Start_Offset++;
- }
- if (Library_Start_Offset+4>Element_Size)
- {
- Skip_XX(Element_Size, "junk");
- return; //No good info
- }
-
- //Accepting good data after junk
- size_t Library_End_Offset=Library_Start_Offset+4;
- while (Library_End_Offset<Element_Size
- && (Buffer[Buffer_Offset+Library_End_Offset]==0x0D
- || Buffer[Buffer_Offset+Library_End_Offset]==0x0A
- || (Buffer[Buffer_Offset+Library_End_Offset]>=0x20 && Buffer[Buffer_Offset+Library_End_Offset]<=0x3F)
- || (Buffer[Buffer_Offset+Library_End_Offset]>=0x41 && Buffer[Buffer_Offset+Library_End_Offset]<=0x7D)))
- Library_End_Offset++;
-
- //Parsing
- Ztring Temp;
- if (Library_Start_Offset>0)
- Skip_XX(Library_Start_Offset, "junk");
- if (Library_End_Offset-Library_Start_Offset)
- Get_Local(Library_End_Offset-Library_Start_Offset, Temp,"data");
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "junk");
-
- //Cleanup
- while(Temp.size()>3 && Temp[1]==__T('e') && Temp[2]==__T('n') && Temp[3]==__T('c'))
- Temp.erase(0, 1);
- while(Temp.size()>5 && Temp[3]==__T('M') && Temp[4]==__T('P') && Temp[5]==__T('E'))
- Temp.erase(0, 1);
-
- FILLING_BEGIN();
- if (Temp.size()>=4)
- {
- if (Temp.find(__T("build"))==0)
- Library+=Ztring(__T(" "))+Temp;
- else
- Library=Temp;
-
- //Library
- if (Library.find(__T("DivX50"))==0)
- {
- Library_Name=__T("DivX");
- Ztring Version=Library.SubString(__T("Build"), __T(""));
- if (Version.empty())
- Version=Library.SubString(__T("b"), __T("p"));
- if (Version.empty())
- Version=Library.SubString(__T("b"), __T(""));
- Library_Version=MediaInfoLib::Config.Library_Get(InfoLibrary_Format_DivX, Version, InfoLibrary_Version);
- if (Library_Version.empty())
- Library_Version=Version;
- Library_Date=MediaInfoLib::Config.Library_Get(InfoLibrary_Format_DivX, Version, InfoLibrary_Date);
- }
- if (Library.find(__T("XviD"))==0)
- {
- Library_Name=__T("XviD");
- if (Library.find(__T("build="))==std::string::npos)
- {
- Ztring Version=Library.SubString(__T("XviD"), __T(""));
- Version.FindAndReplace(__T("C"), __T(""));
- Version.TrimLeft(__T('0'));
- Library_Version=MediaInfoLib::Config.Library_Get(InfoLibrary_Format_XviD, Version, InfoLibrary_Version);
- if (Library_Version.empty())
- Library_Version=Version;
- Library_Date=MediaInfoLib::Config.Library_Get(InfoLibrary_Format_XviD, Version, InfoLibrary_Date);
- }
- else
- {
- Library_Version=Library.SubString(__T("XviD"), __T(""));
- Ztring Date=Library.SubString(__T(" build="), __T(""));
- if (Date.size()==10)
- {
- Date[4]=__T('-');
- Date[7]=__T('-');
- Library_Date=__T("UTC ")+Date;
- }
- }
- }
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B2", SNC (From Sony SNC surveillance video)
-void File_Mpeg4v::user_data_start_SNC()
-{
- Element_Info1("Sony SNC");
-
- if (!user_data_start_SNC_Data.empty())
- {
- Skip_XX(Element_Size, "Value");
- return;
- }
-
- //Parsing
- Ztring Value;
- Get_Local(Element_Size, Value, "Value");
- ZtringListList List;
- List.Separator_Set(0, __T("\r\n"));
- List.Separator_Set(1, __T(": "));
- List.Write(Value);
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- if (List[Pos].size()==2)
- user_data_start_SNC_Data(List[Pos][0])=List[Pos][1];
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet "B3"
-void File_Mpeg4v::group_of_vop_start()
-{
- Element_Name("group_of_vop_start");
-
- //Parsing
- int8u Hours, Minutes, Seconds;
- bool closed_gop, broken_link;
- BS_Begin();
- Get_S1 ( 5, Hours, "time_code_hours");
- Get_S1 ( 6, Minutes, "time_code_minutes");
- Mark_1();
- Get_S1 ( 6, Seconds, "time_code_seconds");
- Get_SB ( closed_gop, "closed_gop");
- Get_SB ( broken_link, "broken_link");
- BS_End();
- Ztring Time;
- Time+=Ztring::ToZtring(Hours);
- Time+=__T(':');
- Time+=Ztring::ToZtring(Minutes);
- Time+=__T(':');
- Time+=Ztring::ToZtring(Seconds);
- Time+=__T(".000");
- Element_Info1(Time);
-
- FILLING_BEGIN();
- //Calculating
- if (Time_Begin_Seconds==(int32u)-1)
- Time_Begin_Seconds=60*60*Hours+60*Minutes+Seconds;
- Time_End_Seconds=60*60*Hours+60*Minutes+Seconds;
- Time_End_MilliSeconds=(int16u)-1;
-
- //NextCode
- NextCode_Test();
- NextCode_Clear();
- for (int8u Pos=0x00; Pos<0x1F; Pos++)
- NextCode_Add(Pos); //video_object_start
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B4"
-void File_Mpeg4v::video_session_error()
-{
- Element_Name("video_session_error");
-}
-
-//---------------------------------------------------------------------------
-// Packet "B5"
-void File_Mpeg4v::visual_object_start()
-{
- Element_Name("visual_object_start");
-
- //Parsing
- int8u visual_object_type;
- BS_Begin();
- TEST_SB_SKIP( "is_visual_object_identifier");
- Get_S1 ( 4, visual_object_verid, "visual_object_verid"); Param_Info1(Mpeg4v_visual_object_verid[visual_object_verid]);
- Skip_BS( 3, "visual_object_priority");
- TEST_SB_END();
- Get_S1 ( 4, visual_object_type, "visual_object_type"); Param_Info1(Mpeg4v_visual_object_type[visual_object_type]);
- if (visual_object_type==1 || visual_object_type==2)
- {
- TEST_SB_SKIP( "video_signal_type");
- Skip_S1(3, "video_format");
- Skip_SB( "video_range");
- TEST_SB_GET ( colour_description, "colour_description");
- Get_S1 (8, colour_primaries, "colour_primaries"); Param_Info1(Mpegv_colour_primaries(colour_primaries));
- Get_S1 (8, transfer_characteristics, "transfer_characteristics"); Param_Info1(Mpegv_transfer_characteristics(transfer_characteristics));
- Get_S1 (8, matrix_coefficients, "matrix_coefficients"); Param_Info1(Mpegv_matrix_coefficients(matrix_coefficients));
- TEST_SB_END();
- TEST_SB_END();
- BS_End();
-
- //Integrity
- if (Element_Offset<Element_Size)
- Trusted_IsNot("Size is wrong");
- }
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Clear();
- NextCode_Add(0xB2); //user_data
- for (int8u Pos=0x00; Pos<0x2F; Pos++)
- NextCode_Add(Pos); //video_object_start and video_object_layer_start
-
- //Autorisation of other streams
- Streams[0xB2].Searching_Payload=true;
- for (int8u Pos=0x00; Pos<0x25; Pos++)
- Streams[Pos].Searching_Payload=true; //video_object_start and video_object_layer_start
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B6"
-void File_Mpeg4v::vop_start()
-{
- Element_Info1C( (FrameInfo.DTS!=(int64u)-1), __T("DTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.DTS)/1000000)));
-
- //Counting
- if (File_Offset+Buffer_Offset+Element_Size==File_Size)
- Frame_Count_Valid=Frame_Count; //Finish frames in case of there are less than Frame_Count_Valid frames
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_InThisBlock>Frame_Count_InThisBlock_Max)
- Frame_Count_InThisBlock_Max=Frame_Count_InThisBlock;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
-
- //Name
- Element_Name("vop_start");
- Element_Info1(Ztring(__T("Frame ")+Ztring::ToZtring(Frame_Count)));
-
- //Parsing
- int32u vop_time_increment;
- int8u vop_coding_type;
- bool vop_coded;
- BS_Begin();
- Get_S1 (2, vop_coding_type, "vop_coding_type"); Param_Info1(Mpeg4v_vop_coding_type[vop_coding_type]);
- Element_Info1(Mpeg4v_vop_coding_type[vop_coding_type]);
- bool modulo_time_base_Continue;
- int8u modulo_time_base=0;
- do
- {
- Get_SB (modulo_time_base_Continue, "modulo_time_base");
- if (modulo_time_base_Continue)
- modulo_time_base++;
- }
- while (modulo_time_base_Continue);
- Mark_1 ();
-
- FILLING_BEGIN();
- if (time_size==0)
- {
- //Filling only if not already done
- if (Frame_Count>=Frame_Count_Valid && Count_Get(Stream_Video)==0)
- {
- Accept("MPEG-4 Visual");
- Finish("MPEG-4 Visual");
- }
- return;
- }
- FILLING_END();
-
- Get_S4 (time_size, vop_time_increment, "vop_time_increment"); Param_Info2C((vop_time_increment_resolution), vop_time_increment*1000/vop_time_increment_resolution, " ms");
- Mark_1 ();
- Get_SB (vop_coded, "vop_coded");
- if (vop_coded)
- {
- if (newpred_enable)
- {
- Skip_S3(time_size+3<15?time_size+3:15, "vop_id");
- TEST_SB_SKIP( "vop_id_for_prediction_indication");
- Skip_BS(time_size+3<15?time_size+3:15, "vop_id_for_prediction");
- TEST_SB_END();
- Mark_1 ();
- }
-
- if (shape!=2 //Shape!=BinaryOnly
- && (vop_coding_type==1 //Type=P
- || (vop_coding_type==3 //Type=S
- && sprite_enable==2))) //Sprite_Enable=GMC
- Skip_SB( "vop_rounding_type");
- if (reduced_resolution_vop_enable==1
- && shape==0 //Shape=Rectangular
- && (vop_coding_type==1 //Type=P
- || vop_coding_type==0)) //Type=I
- Skip_SB( "vop_reduced_resolution");
- if (shape!=0) //Shape!=Rectangular
- {
- if (sprite_enable==1 //Sprite_Enable=Static
- && vop_coding_type==0) //Type=I
- {
- Skip_S2(13, "vop_width");
- Mark_1 ();
- Skip_S2(13, "vop_height");
- Mark_1 ();
- Skip_S2(13, "vop_horizontal_mc_spatial_ref");
- Mark_1 ();
- Skip_S2(13, "vop_vertical_mc_spatial_ref");
- Mark_1 ();
- }
- if (shape!=2 //Shape=BinaryOnly
- && scalability==1
- && enhancement_type==1)
- Skip_SB( "background_composition");
- Skip_SB( "change_conv_ratio_disable");
- TEST_SB_SKIP( "vop_constant_alpha");
- Skip_S1(8, "vop_constant_alpha_value");
- TEST_SB_END();
- }
-
- if (shape!=2) //Shape=BinaryOnly
- if (complexity_estimation_disable==0)
- {
- if (estimation_method==0)
- {
- if (vop_coding_type==0) //I
- {
- if (opaque) Skip_S1(8, "dcecs_opaque");
- if (transparent) Skip_S1(8, "dcecs_transparent");
- if (intra_cae) Skip_S1(8, "dcecs_intra_cae");
- if (inter_cae) Skip_S1(8, "dcecs_inter_cae");
- if (no_update) Skip_S1(8, "dcecs_no_update");
- if (upsampling) Skip_S1(8, "dcecs_upsampling");
- if (intra_blocks) Skip_S1(8, "dcecs_intra_blocks");
- if (not_coded_blocks) Skip_S1(8, "dcecs_not_coded_blocks");
- if (dct_coefs) Skip_S1(8, "dcecs_dct_coefs");
- if (dct_lines) Skip_S1(8, "dcecs_dct_lines");
- if (vlc_symbols) Skip_S1(8, "dcecs_vlc_symbols");
- if (vlc_bits) Skip_S1(4, "dcecs_vlc_bits");
- if (sadct) Skip_S1(8, "dcecs_sadct");
- }
- if (vop_coding_type==1) //P
- {
- if (opaque) Skip_S1(8, "dcecs_opaque");
- if (transparent) Skip_S1(8, "dcecs_transparent");
- if (intra_cae) Skip_S1(8, "dcecs_intra_cae");
- if (inter_cae) Skip_S1(8, "dcecs_inter_cae");
- if (no_update) Skip_S1(8, "dcecs_no_update");
- if (upsampling) Skip_S1(8, "dcecs_upsampling");
- if (intra_blocks) Skip_S1(8, "dcecs_intra_blocks");
- if (not_coded_blocks) Skip_S1(8, "dcecs_not_coded_blocks");
- if (dct_coefs) Skip_S1(8, "dcecs_dct_coefs");
- if (dct_lines) Skip_S1(8, "dcecs_dct_lines");
- if (vlc_symbols) Skip_S1(8, "dcecs_vlc_symbols");
- if (vlc_bits) Skip_S1(4, "dcecs_vlc_bits");
- if (inter_blocks) Skip_S1(8, "dcecs_inter_blocks");
- if (inter4v_blocks) Skip_S1(8, "dcecs_inter4v_blocks");
- if (apm) Skip_S1(8, "dcecs_apm");
- if (npm) Skip_S1(8, "dcecs_npm");
- if (forw_back_mc_q) Skip_S1(8, "dcecs_forw_back_mc_q");
- if (halfpel2) Skip_S1(8, "dcecs_halfpel2");
- if (halfpel4) Skip_S1(8, "dcecs_halfpel4");
- if (sadct) Skip_S1(8, "dcecs_sadct");
- if (quarterpel) Skip_S1(8, "dcecs_quarterpel");
- }
- if (vop_coding_type==2) //B
- {
- if (opaque) Skip_S1(8, "dcecs_opaque");
- if (transparent) Skip_S1(8, "dcecs_transparent");
- if (intra_cae) Skip_S1(8, "dcecs_intra_cae");
- if (inter_cae) Skip_S1(8, "dcecs_inter_cae");
- if (no_update) Skip_S1(8, "dcecs_no_update");
- if (upsampling) Skip_S1(8, "dcecs_upsampling");
- if (intra_blocks) Skip_S1(8, "dcecs_intra_blocks");
- if (not_coded_blocks) Skip_S1(8, "dcecs_not_coded_blocks");
- if (dct_coefs) Skip_S1(8, "dcecs_dct_coefs");
- if (dct_lines) Skip_S1(8, "dcecs_dct_lines");
- if (vlc_symbols) Skip_S1(8, "dcecs_vlc_symbols");
- if (vlc_bits) Skip_S1(4, "dcecs_vlc_bits");
- if (inter_blocks) Skip_S1(8, "dcecs_inter_blocks");
- if (inter4v_blocks) Skip_S1(8, "dcecs_inter4v_blocks");
- if (apm) Skip_S1(8, "dcecs_apm");
- if (npm) Skip_S1(8, "dcecs_npm");
- if (forw_back_mc_q) Skip_S1(8, "dcecs_forw_back_mc_q");
- if (halfpel2) Skip_S1(8, "dcecs_halfpel2");
- if (halfpel4) Skip_S1(8, "dcecs_halfpel4");
- if (interpolate_mc_q) Skip_S1(8, "dcecs_interpolate_mc_q");
- if (sadct) Skip_S1(8, "dcecs_sadct");
- if (quarterpel) Skip_S1(8, "dcecs_sadct");
- }
- if (vop_coding_type==3 && sprite_enable==1) //B and static
- {
- if (intra_blocks) Skip_S1(8, "dcecs_intra_blocks");
- if (not_coded_blocks) Skip_S1(8, "dcecs_not_coded_blocks");
- if (dct_coefs) Skip_S1(8, "dcecs_dct_coefs");
- if (dct_lines) Skip_S1(8, "dcecs_dct_lines");
- if (vlc_symbols) Skip_S1(8, "dcecs_vlc_symbols");
- if (vlc_bits) Skip_S1(4, "dcecs_vlc_bits");
- if (inter_blocks) Skip_S1(8, "dcecs_inter_blocks");
- if (inter4v_blocks) Skip_S1(8, "dcecs_inter4v_blocks");
- if (apm) Skip_S1(8, "dcecs_apm");
- if (npm) Skip_S1(8, "dcecs_npm");
- if (forw_back_mc_q) Skip_S1(8, "dcecs_forw_back_mc_q");
- if (halfpel2) Skip_S1(8, "dcecs_halfpel2");
- if (halfpel4) Skip_S1(8, "dcecs_halfpel4");
- if (interpolate_mc_q) Skip_S1(8, "dcecs_interpolate_mc_q");
- }
- }
- }
- if (shape!=2) //Shape!=BinaryOnly
- {
- Skip_S1(3, "intra_dc_vlc_thr");
- if (interlaced)
- {
- bool top_field_first;
- Get_SB (top_field_first, "top_field_first");
- Skip_SB( "alternate_vertical_scan_flag");
-
- //Filling
- if (top_field_first)
- Interlaced_Top++;
- else
- Interlaced_Bottom++;
- }
- }
- //...
- }
-
- if (!vop_coded) //VOP with no data
- NVOP_Count++;
- else if (vop_coding_type==0) //Type I
- {
- IVOP_Count++;
- PVOP_Count=0;
- BVOP_Count=0;
- }
- else if (vop_coding_type==1) //Type P
- {
- PVOP_Count++;
- BVOP_Count=0;
- }
- else if (vop_coding_type==2) //Type B
- {
- BVOP_Count++;
- if (BVOP_Count>BVOP_Count_Max)
- BVOP_Count_Max=BVOP_Count;
- }
- else if (vop_coding_type==3)
- {
- SVOP_Count++; //Type S
- BVOP_Count=0;
- }
-
- FILLING_BEGIN();
- //Duration
- if (vop_time_increment_resolution)
- {
- int16u Time=modulo_time_base*1000+(int16u)vop_time_increment*1000/vop_time_increment_resolution;
- while (Time_End_MilliSeconds!=(int16u)-1 && Time+500<Time_End_MilliSeconds)
- Time+=1000;
- Time_End_MilliSeconds=Time;
- if (Time_Begin_MilliSeconds==(int16u)-1)
- Time_Begin_MilliSeconds=Time_End_MilliSeconds;
-
- Element_Info1C((Time_End_Seconds!=(int32u)-1), Ztring().Duration_From_Milliseconds((int64u)(Time_End_Seconds*1000+Time_End_MilliSeconds)));
-
- if (FrameInfo.DTS!=(int64u)-1)
- {
- if (fixed_vop_time_increment && vop_time_increment_resolution)
- FrameInfo.DTS+=((int64u)fixed_vop_time_increment)*1000000000/vop_time_increment_resolution;
- else
- FrameInfo.DTS=(int64u)-1;
- }
- }
-
- //NextCode
- NextCode_Test();
- NextCode_Clear();
- for (int8u Pos=0x00; Pos<0x2F; Pos++)
- NextCode_Add(Pos); //video_object_start and video_object_layer_start
- NextCode_Add(0xB1); //visual_object_sequence_end
- NextCode_Add(0xB3); //group_of_vop_start_code
- NextCode_Add(0xB5); //visual_object_start
- NextCode_Add(0xB6); //vop_start
-
- //Filling only if not already done
- if (Frame_Count==2 && !Status[IsAccepted])
- Accept("MPEG-4 Visual");
- if (Frame_Count>=Frame_Count_Valid && Count_Get(Stream_Video)==0)
- {
- //TODO: better handling of the difference
- if (IsSub)
- Finish("MPEG-4 Visual");
- else
- {
- Fill("MPEG-4 Visual");
- if (Config->ParseSpeed<1.0)
- {
- if (!IsSub)
- Open_Buffer_Unsynch();
- GoToFromEnd(1024*1024, "MPEG-4 Visual");
- }
- }
- }
-
- #if MEDIAINFO_EVENTS
- {
- EVENT_BEGIN (Video, SliceInfo, 0)
- Event.FieldPosition=Field_Count;
- Event.SlicePosition=0;
- switch (vop_coding_type)
- {
- case 0 :
- Event.SliceType=0; break;
- case 1 :
- Event.SliceType=1; break;
- case 2 :
- Event.SliceType=2; break;
- case 3 :
- Event.SliceType=3; break;
- default:
- Event.SliceType=(int8u)-1;
- }
- Event.Flags=0;
- EVENT_END ()
- }
- #endif //MEDIAINFO_EVENTS
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B7"
-void File_Mpeg4v::slice_start()
-{
- Element_Name("slice_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "B8"
-void File_Mpeg4v::extension_start()
-{
- Element_Name("extension_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "B9"
-void File_Mpeg4v::fgs_vop_start()
-{
- Element_Name("fgs_vop_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "BA"
-void File_Mpeg4v::fba_object_start()
-{
- Element_Name("fba_object_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "BB"
-void File_Mpeg4v::fba_object_plane_start()
-{
- Element_Name("fba_object_plane_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "BC"
-void File_Mpeg4v::mesh_object_start()
-{
- Element_Name("mesh_object_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "BD"
-void File_Mpeg4v::mesh_object_plane_start()
-{
- Element_Name("mesh_object_plane_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "BE"
-void File_Mpeg4v::still_texture_object_start()
-{
- Element_Name("still_texture_object_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "BF"
-void File_Mpeg4v::texture_spatial_layer_start()
-{
- Element_Name("texture_spatial_layer_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "C0"
-void File_Mpeg4v::texture_snr_layer_start()
-{
- Element_Name("texture_snr_layer_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "C1"
-void File_Mpeg4v::texture_tile_start()
-{
- Element_Name("texture_tile_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "C2"
-void File_Mpeg4v::texture_shape_layer_start()
-{
- Element_Name("texture_shape_layer_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "C3"
-void File_Mpeg4v::stuffing_start()
-{
- Element_Name("stuffing_start");
-}
-
-//---------------------------------------------------------------------------
-// Packet "C4" and C5"
-void File_Mpeg4v::reserved()
-{
- Element_Name("reserved");
-}
-
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEG4V_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpeg4v.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpeg4v.h
deleted file mode 100644
index 330d49bb8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpeg4v.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG-4 Visual files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Mpeg4vH
-#define MediaInfo_Mpeg4vH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Multiple/File_Mpeg4.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Mpeg4v
-//***************************************************************************
-
-class File_Mpeg4v : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool FrameIsAlwaysComplete;
- void OnlyVOP(); //Data has only VOPs in it (configuration is elsewhere)
-
- //Constructor/Destructor
- File_Mpeg4v();
-
-private :
- //Streams management
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin() {return FileHeader_Begin_0x000001();}
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
-
- //Buffer - Synchro
- bool Synchronize() {return Synchronize_0x000001();}
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parser_QuickSearch();
- bool Header_Parser_Fill_Size();
- void Data_Parse();
-
- //Elements
- void video_object_start();
- void video_object_layer_start();
- void fgs_bp_start();
- void visual_object_sequence_start();
- void visual_object_sequence_end();
- void user_data_start();
- void user_data_start_SNC();
- void group_of_vop_start();
- void video_session_error();
- void visual_object_start();
- void vop_start();
- void slice_start();
- void extension_start();
- void fgs_vop_start();
- void fba_object_start();
- void fba_object_plane_start();
- void mesh_object_start();
- void mesh_object_plane_start();
- void still_texture_object_start();
- void texture_spatial_layer_start();
- void texture_snr_layer_start();
- void texture_tile_start();
- void texture_shape_layer_start();
- void stuffing_start();
- void reserved();
-
- //Streams
- struct stream
- {
- bool Searching_Payload;
-
- stream()
- {
- Searching_Payload=false;
- }
- };
- std::vector<stream> Streams;
-
- //Count of a Packets
- size_t IVOP_Count;
- size_t PVOP_Count;
- size_t BVOP_Count;
- size_t BVOP_Count_Max;
- size_t SVOP_Count;
- size_t NVOP_Count;
- size_t Interlaced_Top;
- size_t Interlaced_Bottom;
- int64u Frame_Count_InThisBlock_Max;
-
- //From video_object_layer
- int32u fixed_vop_time_increment;
- int32u Time_Begin_Seconds;
- int32u Time_End_Seconds;
- int16u Time_Begin_MilliSeconds;
- int16u Time_End_MilliSeconds;
- int16u object_layer_width;
- int16u object_layer_height;
- int16u vop_time_increment_resolution;
- int8u time_size;
- int8u visual_object_verid;
- int8u profile_and_level_indication;
- int8u no_of_sprite_warping_points;
- int8u aspect_ratio_info;
- int8u par_width;
- int8u par_height;
- int8u bits_per_pixel;
- int8u shape;
- int8u sprite_enable;
- int8u estimation_method;
- int8u chroma_format;
- int8u colour_primaries;
- int8u transfer_characteristics;
- int8u matrix_coefficients;
- bool quarter_sample;
- bool low_delay;
- bool load_intra_quant_mat;
- bool load_nonintra_quant_mat;
- bool load_intra_quant_mat_grayscale;
- bool load_nonintra_quant_mat_grayscale;
- bool interlaced;
- bool newpred_enable;
- bool reduced_resolution_vop_enable;
- bool scalability;
- bool enhancement_type;
- bool complexity_estimation_disable;
- bool opaque;
- bool transparent;
- bool intra_cae;
- bool inter_cae;
- bool no_update;
- bool upsampling;
- bool intra_blocks;
- bool inter_blocks;
- bool inter4v_blocks;
- bool not_coded_blocks;
- bool dct_coefs;
- bool dct_lines;
- bool vlc_symbols;
- bool vlc_bits;
- bool apm;
- bool npm;
- bool interpolate_mc_q;
- bool forw_back_mc_q;
- bool halfpel2;
- bool halfpel4;
- bool sadct;
- bool quarterpel;
- bool video_object_layer_start_IsParsed;
- bool quant_type;
- bool data_partitioned;
- bool reversible_vlc;
- bool colour_description;
-
- //From user_data
- Ztring Library;
- Ztring Library_Name;
- Ztring Library_Version;
- Ztring Library_Date;
- Ztring Matrix_intra;
- Ztring Matrix_nonintra;
- ZtringListList user_data_start_SNC_Data;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpegv.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpegv.cpp
deleted file mode 100644
index ac498960c..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpegv.cpp
+++ /dev/null
@@ -1,4068 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos (Global)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGV_YES) || defined(MEDIAINFO_MPEG4V_YES) || defined(MEDIAINFO_AVC_YES) || defined(MEDIAINFO_MPEG4_YES) || defined(MEDIAINFO_PRORES_YES)
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-#include "ZenLib/Conf.h"
-using namespace ZenLib;
-
-//---------------------------------------------------------------------------
-extern const char* Mpegv_colour_primaries(int8u colour_primaries)
-{
- switch (colour_primaries)
- {
- case 1 : return "BT.709";
- case 4 : return "BT.470 System M";
- case 5 : return "BT.601 PAL";
- case 6 : return "BT.601 NTSC";
- case 7 : return "SMPTE 240M"; //Same as BT.601 NTSC
- case 8 : return "Generic film";
- case 9 : return "BT.2020"; //Added in HEVC
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-extern const char* Mpegv_transfer_characteristics(int8u transfer_characteristics)
-{
- switch (transfer_characteristics)
- {
- case 1 : return "BT.709"; //Same as BT.609
- case 4 : return "BT.470 System M";
- case 5 : return "BT.470 System B, BT.470 System G";
- case 6 : return "BT.601";
- case 7 : return "SMPTE 240M";
- case 8 : return "Linear";
- case 9 : return "Logarithmic (100:1)"; //Added in MPEG-4 Visual
- case 10 : return "Logarithmic (316.22777:1)"; //Added in MPEG-4 Visual
- case 11 : return "IEC 61966-2-4"; //Added in AVC
- case 12 : return "BT.1361 extended colour gamut system"; //Added in AVC
- case 13 : return "sYCC"; //Added in HEVC
- case 14 : return "BT.2020"; //Added in HEVC
- case 15 : return "BT.2020"; //Added in HEVC
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-extern const char* Mpegv_matrix_coefficients(int8u matrix_coefficients)
-{
- switch (matrix_coefficients)
- {
- case 0 : return "RGB"; //Added in AVC
- case 1 : return "BT.709";
- case 4 : return "FCC 73.682";
- case 5 : return "BT.601";
- case 6 : return "BT.601";
- case 7 : return "SMPTE 240M";
- case 8 : return "YCgCo"; //Added in AVC
- case 9 : return "BT.2020 non-constant"; //Added in HEVC
- case 10 : return "BT.2020 constant"; //Added in HEVC
- default : return "";
- }
-}
-
-} //NameSpace
-
-#if !MEDIAINFO_ADVANCED
- const int64u Config_VariableGopDetection_Occurences=4;
-#endif // MEDIAINFO_ADVANCED
-//---------------------------------------------------------------------------
-#endif //...
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos (Global)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGV_YES) || defined(MEDIAINFO_MPEGTS_YES) || defined(MEDIAINFO_MPEGPS_YES) || defined(MEDIAINFO_MXF_YES)
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-#include "ZenLib/Conf.h"
-using namespace ZenLib;
-
-//---------------------------------------------------------------------------
-extern const float32 Mpegv_frame_rate[16]=
-{
- (float32) 0,
- (float32)24000/(float32)1001,
- (float32)24,
- (float32)25,
- (float32)30000/(float32)1001,
- (float32)30,
- (float32)50,
- (float32)60000/(float32)1001,
- (float32)60,
- (float32) 0,
- (float32) 0,
- (float32) 0,
- (float32) 0,
- (float32) 0,
- (float32) 0,
- (float32) 0,
-};
-
-//---------------------------------------------------------------------------
-const char* Mpegv_Colorimetry_format[4]=
-{
- "",
- "4:2:0",
- "4:2:2",
- "4:4:4",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpegv_profile_and_level_indication (int8u profile_and_level_indication)
-{
- switch (profile_and_level_indication)
- {
- case 0x82 : return "4:2:2@High";
- case 0x85 : return "4:2:2@Main";
- case 0x8A : return "Multi-view@High";
- case 0x8B : return "Multi-view@High-1440";
- case 0x8D : return "Multi-view@Main";
- case 0x8E : return "Multi-view@Low";
- default : return "";
- }
-};
-
-//---------------------------------------------------------------------------
-const char* Mpegv_profile_and_level_indication_profile[]=
-{
- "0",
- "High",
- "Spatially Scalable",
- "SNR Scalable",
- "Main",
- "Simple",
- "6",
- "7",
-}; //4:2:2 Profile?
-
-//---------------------------------------------------------------------------
-const char* Mpegv_profile_and_level_indication_level[]=
-{
- "0",
- "1",
- "2",
- "3",
- "High",
- "4",
- "High 1440",
- "5",
- "Main",
- "6",
- "Low",
- "7",
- "8",
- "9",
- "10",
- "11",
-};
-
-} //NameSpace
-
-//---------------------------------------------------------------------------
-#endif //...
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_MPEGV_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Mpegv.h"
-#include "MediaInfo/TimeCode.h"
-#include "ZenLib/BitStream.h"
-#include "ZenLib/Utils.h"
-#if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #include "MediaInfo/Text/File_DtvccTransport.h"
-#endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-#if defined(MEDIAINFO_SCTE20_YES)
- #include "MediaInfo/Text/File_Scte20.h"
-#endif //defined(MEDIAINFO_SCTE20_YES)
-#if defined(MEDIAINFO_CDP_YES)
- #include "MediaInfo/Text/File_Cdp.h"
- #include <cstring>
-#endif //defined(MEDIAINFO_CDP_YES)
-#if defined(MEDIAINFO_AFDBARDATA_YES)
- #include "MediaInfo/Video/File_AfdBarData.h"
- #include <cstring>
-#endif //defined(MEDIAINFO_AFDBARDATA_YES)
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Events.h"
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-#include <cmath>
-using namespace ZenLib;
-using namespace std;
-
-#undef FILLING_BEGIN
-#define FILLING_BEGIN() \
- while (Element_Offset<Element_Size && Buffer[Buffer_Offset+(size_t)Element_Offset]==0x00) \
- Element_Offset++; \
- if (Element_Offset!=Element_Size) \
- Trusted_IsNot("Size error"); \
- else if (Element_IsOK()) \
- { \
-
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const float32 Mpegv_aspect_ratio1[]=
-{
- (float32)0,
- (float32)1,
- (float32)0.6735,
- (float32)0.7031, //16/9 PAL
- (float32)0.7615,
- (float32)0.8055,
- (float32)0.8437, //16/9 NTSC
- (float32)0.8935,
- (float32)0.9375, //4/3 PAL
- (float32)0.9815,
- (float32)1.0255,
- (float32)1.0695,
- (float32)1.1250, //4/3 NTSC
- (float32)1.1575,
- (float32)1.2015,
- (float32)0,
-};
-
-//---------------------------------------------------------------------------
-const float32 Mpegv_aspect_ratio2[]=
-{
- (float32)0,
- (float32)1,
- (float32)4/(float32)3,
- (float32)16/(float32)9,
- (float32)2.21,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
- (float32)0,
-};
-
-//---------------------------------------------------------------------------
-const char* Mpegv_video_format[]=
-{
- "Component",
- "PAL",
- "NTSC",
- "SECAM",
- "MAC",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const char* Mpegv_picture_structure[]=
-{
- "",
- "T", //Top Field
- "B", //Bottom Field
- "F", //Frame
-};
-
-const char* Mpegv_picture_coding_type[]=
-{
- "",
- "I",
- "P",
- "B",
- "D",
- "",
- "",
- "",
-};
-
-const char* Mpegv_extension_start_code_identifier[]=
-{
- "",
- "Sequence",
- "Sequence Display",
- "Quant Matrix",
- "Copyright",
- "Sequence Scalable",
- "",
- "Picture Display",
- "Picture Coding",
- "Picture Spatial Scalable",
- "Picture Temporal Scalable",
- "Camera Parameters",
- "ITU-T",
- "",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_MACROBLOCKS
-const int8u Mpegv_block_count[4]=
-{
- 0,
- 6,
- 8,
- 12,
-};
-
-const File__Analyze::vlc Mpegv_macroblock_address_increment[]=
-{
- // macroblock_address_increment
- { 1 , 1 , 0 , 0 , 1 },
- { 2 , 2 , 0 , 0 , 3 },
- { 3 , 0 , 0 , 0 , 2 },
- { 2 , 1 , 0 , 0 , 5 },
- { 3 , 0 , 0 , 0 , 4 },
- { 2 , 1 , 0 , 0 , 7 },
- { 3 , 0 , 0 , 0 , 6 },
- { 6 , 2 , 0 , 0 , 9 },
- { 7 , 0 , 0 , 0 , 8 },
- { 6 , 1 , 0 , 0 , 15 },
- { 7 , 0 , 0 , 0 , 14 },
- { 8 , 0 , 0 , 0 , 13 },
- { 9 , 0 , 0 , 0 , 12 },
- { 10 , 0 , 0 , 0 , 11 },
- { 11 , 0 , 0 , 0 , 10 },
- { 18 , 2 , 0 , 0 , 21 },
- { 19 , 0 , 0 , 0 , 20 },
- { 20 , 0 , 0 , 0 , 19 },
- { 21 , 0 , 0 , 0 , 18 },
- { 22 , 0 , 0 , 0 , 17 },
- { 23 , 0 , 0 , 0 , 16 },
- { 8 , 1 , 2 , 0 , 33 }, //Escape
- { 24 , 0 , 0 , 0 , 33 },
- { 25 , 0 , 0 , 0 , 32 },
- { 26 , 0 , 0 , 0 , 31 },
- { 27 , 0 , 0 , 0 , 30 },
- { 28 , 0 , 0 , 0 , 29 },
- { 29 , 0 , 0 , 0 , 28 },
- { 30 , 0 , 0 , 0 , 27 },
- { 31 , 0 , 0 , 0 , 26 },
- { 32 , 0 , 0 , 0 , 25 },
- { 33 , 0 , 0 , 0 , 24 },
- { 34 , 0 , 0 , 0 , 23 },
- { 35 , 0 , 0 , 0 , 22 },
- VLC_END
-};
-const File__Analyze::vlc Mpegv_dct_dc_size_luminance[]=
-{
- { 0, 2, 0, 0, 1},
- { 1, 0, 0, 0, 2},
- { 4, 1, 0, 0, 0},
- { 5, 0, 0, 0, 3},
- { 6, 0, 0, 0, 4},
- { 14, 1, 0, 0, 5},
- { 30, 1, 0, 0, 6},
- { 62, 1, 0, 0, 7},
- { 126, 1, 0, 0, 8},
- { 254, 1, 0, 0, 9},
- { 510, 1, 0, 0, 10},
- { 511, 0, 0, 0, 11},
- VLC_END
-};
-
-const File__Analyze::vlc Mpegv_dct_dc_size_chrominance[]=
-{
- { 0, 2, 0, 0, 0},
- { 1, 0, 0, 0, 1},
- { 2, 0, 0, 0, 2},
- { 6, 1, 0, 0, 3},
- { 14, 1, 0, 0, 4},
- { 30, 1, 0, 0, 5},
- { 62, 1, 0, 0, 6},
- { 126, 1, 0, 0, 7},
- { 254, 1, 0, 0, 8},
- { 510, 1, 0, 0, 9},
- { 1022, 1, 0, 0, 10},
- { 1023, 0, 0, 0, 11},
- VLC_END
-};
-
-const File__Analyze::vlc Mpegv_dct_coefficients_0[]=
-{
- // Run Level
- { 2 , 2 , 3 , 0 , 1 }, // End of Block (others) or Run=0/Level=1 (first DCT)
- { 3 , 0 , 3 , 0 , -1 }, // End of Block (others) or Run=0/Level=1 (first DCT)
- { 6 , 2 , 0 , 1 , 1 },
- { 7 , 0 , 0 , 1 , -1 },
- { 8 , 1 , 0 , 0 , 2 },
- { 9 , 0 , 0 , 0 , -2 },
- { 10 , 0 , 0 , 2 , 1 },
- { 11 , 0 , 0 , 2 , -1 },
- { 1 , 1 , 2 , 0 , 0 }, // Escape
- { 10 , 0 , 0 , 0 , 3 },
- { 11 , 0 , 0 , 0 , -3 },
- { 12 , 0 , 0 , 4 , 1 },
- { 13 , 0 , 0 , 4 , -1 },
- { 14 , 0 , 0 , 3 , 1 },
- { 15 , 0 , 0 , 3 , -1 },
- { 8 , 1 , 0 , 7 , 1 },
- { 9 , 0 , 0 , 7 , -1 },
- { 10 , 0 , 0 , 6 , 1 },
- { 11 , 0 , 0 , 6 , -1 },
- { 12 , 0 , 0 , 1 , 2 },
- { 13 , 0 , 0 , 1 , -2 },
- { 14 , 0 , 0 , 5 , 1 },
- { 15 , 0 , 0 , 5 , -1 },
- { 8 , 1 , 0 , 2 , 2 },
- { 9 , 0 , 0 , 2 , -2 },
- { 10 , 0 , 0 , 9 , 1 },
- { 11 , 0 , 0 , 9 , -1 },
- { 12 , 0 , 0 , 0 , 4 },
- { 13 , 0 , 0 , 0 , -4 },
- { 14 , 0 , 0 , 8 , 1 },
- { 15 , 0 , 0 , 8 , -1 },
- { 64 , 1 , 0 , 13 , 1 },
- { 65 , 0 , 0 , 13 , -1 },
- { 66 , 0 , 0 , 0 , 6 },
- { 67 , 0 , 0 , 0 , -6 },
- { 68 , 0 , 0 , 12 , 1 },
- { 69 , 0 , 0 , 12 , -1 },
- { 70 , 0 , 0 , 11 , 1 },
- { 71 , 0 , 0 , 11 , -1 },
- { 72 , 0 , 0 , 3 , 2 },
- { 73 , 0 , 0 , 3 , -2 },
- { 74 , 0 , 0 , 1 , 3 },
- { 75 , 0 , 0 , 1 , -3 },
- { 76 , 0 , 0 , 0 , 5 },
- { 77 , 0 , 0 , 0 , -5 },
- { 78 , 0 , 0 , 10 , 1 },
- { 79 , 0 , 0 , 10 , -1 },
- { 16 , 2 , 0 , 16 , 1 },
- { 17 , 0 , 0 , 16 , -1 },
- { 18 , 0 , 0 , 5 , 2 },
- { 19 , 0 , 0 , 5 , -2 },
- { 20 , 0 , 0 , 0 , 7 },
- { 21 , 0 , 0 , 0 , -7 },
- { 22 , 0 , 0 , 2 , 3 },
- { 23 , 0 , 0 , 2 , -3 },
- { 24 , 0 , 0 , 1 , 4 },
- { 25 , 0 , 0 , 1 , -4 },
- { 26 , 0 , 0 , 15 , 1 },
- { 27 , 0 , 0 , 15 , -1 },
- { 28 , 0 , 0 , 14 , 1 },
- { 29 , 0 , 0 , 14 , -1 },
- { 30 , 0 , 0 , 4 , 2 },
- { 31 , 0 , 0 , 4 , -2 },
- { 32 , 2 , 0 , 0 , 11 },
- { 33 , 0 , 0 , 0 , -11 },
- { 34 , 0 , 0 , 8 , 2 },
- { 35 , 0 , 0 , 8 , -2 },
- { 36 , 0 , 0 , 4 , 3 },
- { 37 , 0 , 0 , 4 , -3 },
- { 38 , 0 , 0 , 0 , 10 },
- { 39 , 0 , 0 , 0 , -10 },
- { 40 , 0 , 0 , 2 , 4 },
- { 41 , 0 , 0 , 2 , -4 },
- { 42 , 0 , 0 , 7 , 2 },
- { 43 , 0 , 0 , 7 , -2 },
- { 44 , 0 , 0 , 21 , 1 },
- { 45 , 0 , 0 , 21 , -1 },
- { 46 , 0 , 0 , 20 , 1 },
- { 47 , 0 , 0 , 20 , -1 },
- { 48 , 0 , 0 , 0 , 9 },
- { 49 , 0 , 0 , 0 , -9 },
- { 50 , 0 , 0 , 19 , 1 },
- { 51 , 0 , 0 , 19 , -1 },
- { 52 , 0 , 0 , 18 , 1 },
- { 53 , 0 , 0 , 18 , -1 },
- { 54 , 0 , 0 , 1 , 5 },
- { 55 , 0 , 0 , 1 , -5 },
- { 56 , 0 , 0 , 3 , 3 },
- { 57 , 0 , 0 , 3 , -3 },
- { 58 , 0 , 0 , 0 , 8 },
- { 59 , 0 , 0 , 0 , -8 },
- { 60 , 0 , 0 , 6 , 2 },
- { 61 , 0 , 0 , 6 , -2 },
- { 62 , 0 , 0 , 17 , 1 },
- { 63 , 0 , 0 , 17 , -1 },
- { 32 , 1 , 0 , 10 , 2 },
- { 33 , 0 , 0 , 10 , -2 },
- { 34 , 0 , 0 , 9 , 2 },
- { 35 , 0 , 0 , 9 , -2 },
- { 36 , 0 , 0 , 5 , 3 },
- { 37 , 0 , 0 , 5 , -3 },
- { 38 , 0 , 0 , 3 , 4 },
- { 39 , 0 , 0 , 3 , -4 },
- { 40 , 0 , 0 , 2 , 5 },
- { 41 , 0 , 0 , 2 , -5 },
- { 42 , 0 , 0 , 1 , 7 },
- { 43 , 0 , 0 , 1 , -7 },
- { 44 , 0 , 0 , 1 , 6 },
- { 45 , 0 , 0 , 1 , -6 },
- { 46 , 0 , 0 , 0 , 15 },
- { 47 , 0 , 0 , 0 , -15 },
- { 48 , 0 , 0 , 0 , 14 },
- { 49 , 0 , 0 , 0 , -14 },
- { 50 , 0 , 0 , 0 , 13 },
- { 51 , 0 , 0 , 0 , -13 },
- { 52 , 0 , 0 , 0 , 12 },
- { 53 , 0 , 0 , 0 , -12 },
- { 54 , 0 , 0 , 26 , 1 },
- { 55 , 0 , 0 , 26 , -1 },
- { 56 , 0 , 0 , 25 , 1 },
- { 57 , 0 , 0 , 25 , -1 },
- { 58 , 0 , 0 , 24 , 1 },
- { 59 , 0 , 0 , 24 , -1 },
- { 60 , 0 , 0 , 23 , 1 },
- { 61 , 0 , 0 , 23 , -1 },
- { 62 , 0 , 0 , 22 , 1 },
- { 63 , 0 , 0 , 22 , -1 },
- { 32 , 1 , 0 , 0 , 31 },
- { 33 , 0 , 0 , 0 , -31 },
- { 34 , 0 , 0 , 0 , 30 },
- { 35 , 0 , 0 , 0 , -30 },
- { 36 , 0 , 0 , 0 , 29 },
- { 37 , 0 , 0 , 0 , -29 },
- { 38 , 0 , 0 , 0 , 28 },
- { 39 , 0 , 0 , 0 , -28 },
- { 40 , 0 , 0 , 0 , 27 },
- { 41 , 0 , 0 , 0 , -27 },
- { 42 , 0 , 0 , 0 , 26 },
- { 43 , 0 , 0 , 0 , -26 },
- { 44 , 0 , 0 , 0 , 25 },
- { 45 , 0 , 0 , 0 , -25 },
- { 46 , 0 , 0 , 0 , 24 },
- { 47 , 0 , 0 , 0 , -24 },
- { 48 , 0 , 0 , 0 , 23 },
- { 49 , 0 , 0 , 0 , -23 },
- { 50 , 0 , 0 , 0 , 22 },
- { 51 , 0 , 0 , 0 , -22 },
- { 52 , 0 , 0 , 0 , 21 },
- { 53 , 0 , 0 , 0 , -21 },
- { 54 , 0 , 0 , 0 , 20 },
- { 55 , 0 , 0 , 0 , -20 },
- { 56 , 0 , 0 , 0 , 19 },
- { 57 , 0 , 0 , 0 , -19 },
- { 58 , 0 , 0 , 0 , 18 },
- { 59 , 0 , 0 , 0 , -18 },
- { 60 , 0 , 0 , 0 , 17 },
- { 61 , 0 , 0 , 0 , -17 },
- { 62 , 0 , 0 , 0 , 16 },
- { 63 , 0 , 0 , 0 , -16 },
- { 32 , 1 , 0 , 0 , 40 },
- { 33 , 0 , 0 , 0 , -40 },
- { 34 , 0 , 0 , 0 , 39 },
- { 35 , 0 , 0 , 0 , -39 },
- { 36 , 0 , 0 , 0 , 38 },
- { 37 , 0 , 0 , 0 , -38 },
- { 38 , 0 , 0 , 0 , 37 },
- { 39 , 0 , 0 , 0 , -37 },
- { 40 , 0 , 0 , 0 , 36 },
- { 41 , 0 , 0 , 0 , -36 },
- { 42 , 0 , 0 , 0 , 35 },
- { 43 , 0 , 0 , 0 , -35 },
- { 44 , 0 , 0 , 0 , 34 },
- { 45 , 0 , 0 , 0 , -34 },
- { 46 , 0 , 0 , 0 , 33 },
- { 47 , 0 , 0 , 0 , -33 },
- { 48 , 0 , 0 , 0 , 32 },
- { 49 , 0 , 0 , 0 , -32 },
- { 50 , 0 , 0 , 1 , 14 },
- { 51 , 0 , 0 , 1 , -14 },
- { 52 , 0 , 0 , 1 , 13 },
- { 53 , 0 , 0 , 1 , -13 },
- { 54 , 0 , 0 , 1 , 12 },
- { 55 , 0 , 0 , 1 , -12 },
- { 56 , 0 , 0 , 1 , 11 },
- { 57 , 0 , 0 , 1 , -11 },
- { 58 , 0 , 0 , 1 , 10 },
- { 59 , 0 , 0 , 1 , -10 },
- { 60 , 0 , 0 , 1 , 9 },
- { 61 , 0 , 0 , 1 , -9 },
- { 62 , 0 , 0 , 1 , 8 },
- { 63 , 0 , 0 , 1 , -8 },
- { 32 , 1 , 0 , 1 , 18 },
- { 33 , 0 , 0 , 1 , -18 },
- { 34 , 0 , 0 , 1 , 17 },
- { 35 , 0 , 0 , 1 , -17 },
- { 36 , 0 , 0 , 1 , 16 },
- { 37 , 0 , 0 , 1 , -16 },
- { 38 , 0 , 0 , 1 , 15 },
- { 39 , 0 , 0 , 1 , -15 },
- { 40 , 0 , 0 , 6 , 3 },
- { 41 , 0 , 0 , 6 , -3 },
- { 42 , 0 , 0 , 16 , 2 },
- { 43 , 0 , 0 , 16 , -2 },
- { 44 , 0 , 0 , 15 , 2 },
- { 45 , 0 , 0 , 15 , -2 },
- { 46 , 0 , 0 , 14 , 2 },
- { 47 , 0 , 0 , 14 , -2 },
- { 48 , 0 , 0 , 13 , 2 },
- { 49 , 0 , 0 , 13 , -2 },
- { 50 , 0 , 0 , 12 , 2 },
- { 51 , 0 , 0 , 12 , -2 },
- { 52 , 0 , 0 , 11 , 2 },
- { 53 , 0 , 0 , 11 , -2 },
- { 54 , 0 , 0 , 31 , 1 },
- { 55 , 0 , 0 , 31 , -1 },
- { 56 , 0 , 0 , 30 , 1 },
- { 57 , 0 , 0 , 30 , -1 },
- { 58 , 0 , 0 , 29 , 1 },
- { 59 , 0 , 0 , 29 , -1 },
- { 60 , 0 , 0 , 28 , 1 },
- { 61 , 0 , 0 , 28 , -1 },
- { 62 , 0 , 0 , 27 , 1 },
- { 63 , 0 , 0 , 27 , -1 },
- {(int32u)-1, (int8u)-1, 1, -1, -1} //
-};
-
-const File__Analyze::vlc Mpegv_dct_coefficients_1[]=
-{
- // Run Level
- { 4 , 3 , 0 , 0 , 1 },
- { 5 , 0 , 0 , 0 , -1 },
- { 4 , 1 , 0 , 1 , 1 },
- { 5 , 0 , 0 , 1 , -1 },
- { 6 , 0 , 1 , 0 , 0 },
- { 12 , 0 , 0 , 0 , 2 },
- { 13 , 0 , 0 , 0 , -2 },
- { 14 , 1 , 0 , 0 , 3 },
- { 15 , 0 , 0 , 0 , -3 },
- { 1 , 1 , 2 , 0 , 0 },
- { 10 , 0 , 0 , 2 , 1 },
- { 11 , 0 , 0 , 2 , -1 },
- { 12 , 0 , 0 , 1 , 2 },
- { 13 , 0 , 0 , 1 , -2 },
- { 14 , 0 , 0 , 3 , 1 },
- { 15 , 0 , 0 , 3 , -1 },
- { 56 , 0 , 0 , 0 , 4 },
- { 57 , 0 , 0 , 0 , -4 },
- { 58 , 0 , 0 , 0 , 5 },
- { 59 , 0 , 0 , 0 , -5 },
- { 8 , 1 , 0 , 0 , 7 },
- { 9 , 0 , 0 , 0 , -7 },
- { 10 , 0 , 0 , 0 , 6 },
- { 11 , 0 , 0 , 0 , -6 },
- { 12 , 0 , 0 , 4 , 1 },
- { 13 , 0 , 0 , 4 , -1 },
- { 14 , 0 , 0 , 5 , 1 },
- { 15 , 0 , 0 , 5 , -1 },
- { 8 , 1 , 0 , 7 , 1 },
- { 9 , 0 , 0 , 7 , -1 },
- { 10 , 0 , 0 , 8 , 1 },
- { 11 , 0 , 0 , 8 , -1 },
- { 12 , 0 , 0 , 6 , 1 },
- { 13 , 0 , 0 , 6 , -1 },
- { 14 , 0 , 0 , 2 , 2 },
- { 15 , 0 , 0 , 2 , -2 },
- { 240 , 0 , 0 , 9 , 1 },
- { 241 , 0 , 0 , 9 , -1 },
- { 242 , 0 , 0 , 1 , 3 },
- { 243 , 0 , 0 , 1 , -3 },
- { 244 , 0 , 0 , 10 , 1 },
- { 245 , 0 , 0 , 10 , -1 },
- { 246 , 0 , 0 , 0 , 8 },
- { 247 , 0 , 0 , 0 , -8 },
- { 248 , 0 , 0 , 0 , 9 },
- { 249 , 0 , 0 , 0 , -9 },
- { 64 , 1 , 0 , 1 , 5 },
- { 65 , 0 , 0 , 1 , -5 },
- { 66 , 0 , 0 , 11 , 1 },
- { 67 , 0 , 0 , 11 , -1 },
- { 68 , 0 , 0 , 0 , 11 },
- { 69 , 0 , 0 , 0 , -11 },
- { 70 , 0 , 0 , 0 , 10 },
- { 71 , 0 , 0 , 0 , -10 },
- { 72 , 0 , 0 , 13 , 1 },
- { 73 , 0 , 0 , 13 , -1 },
- { 74 , 0 , 0 , 12 , 1 },
- { 75 , 0 , 0 , 12 , -1 },
- { 76 , 0 , 0 , 3 , 2 },
- { 77 , 0 , 0 , 3 , -2 },
- { 78 , 0 , 0 , 1 , 4 },
- { 79 , 0 , 0 , 1 , -4 },
- { 500 , 0 , 0 , 0 , 12 },
- { 501 , 0 , 0 , 0 , -12 },
- { 502 , 0 , 0 , 0 , 13 },
- { 503 , 0 , 0 , 0 , -13 },
- { 504 , 0 , 0 , 2 , 3 },
- { 505 , 0 , 0 , 2 , -3 },
- { 506 , 0 , 0 , 4 , 2 },
- { 507 , 0 , 0 , 4 , -2 },
- { 508 , 0 , 0 , 0 , 14 },
- { 509 , 0 , 0 , 0 , -14 },
- { 510 , 0 , 0 , 0 , 15 },
- { 511 , 0 , 0 , 0 , -15 },
- { 8 , 1 , 0 , 5 , 2 },
- { 9 , 0 , 0 , 5 , -2 },
- { 10 , 0 , 0 , 14 , 1 },
- { 11 , 0 , 0 , 14 , -1 },
- { 14 , 0 , 0 , 15 , 1 },
- { 15 , 0 , 0 , 15 , -1 },
- { 24 , 1 , 0 , 2 , 4 },
- { 25 , 0 , 0 , 2 , -4 },
- { 26 , 0 , 0 , 16 , 1 },
- { 27 , 0 , 0 , 16 , -1 },
- { 34 , 2 , 0 , 8 , 2 },
- { 35 , 0 , 0 , 8 , -2 },
- { 36 , 0 , 0 , 4 , 3 },
- { 37 , 0 , 0 , 4 , -3 },
- { 42 , 0 , 0 , 7 , 2 },
- { 43 , 0 , 0 , 7 , -2 },
- { 44 , 0 , 0 , 21 , 1 },
- { 45 , 0 , 0 , 21 , -1 },
- { 46 , 0 , 0 , 20 , 1 },
- { 47 , 0 , 0 , 20 , -1 },
- { 50 , 0 , 0 , 19 , 1 },
- { 51 , 0 , 0 , 19 , -1 },
- { 52 , 0 , 0 , 18 , 1 },
- { 53 , 0 , 0 , 18 , -1 },
- { 56 , 0 , 0 , 3 , 3 },
- { 57 , 0 , 0 , 3 , -3 },
- { 60 , 0 , 0 , 6 , 2 },
- { 61 , 0 , 0 , 6 , -2 },
- { 62 , 0 , 0 , 17 , 1 },
- { 63 , 0 , 0 , 17 , -1 },
- { 32 , 1 , 0 , 10 , 2 },
- { 33 , 0 , 0 , 10 , -2 },
- { 34 , 0 , 0 , 9 , 2 },
- { 35 , 0 , 0 , 9 , -2 },
- { 36 , 0 , 0 , 5 , 3 },
- { 37 , 0 , 0 , 5 , -3 },
- { 38 , 0 , 0 , 3 , 4 },
- { 39 , 0 , 0 , 3 , -4 },
- { 40 , 0 , 0 , 2 , 5 },
- { 41 , 0 , 0 , 2 , -5 },
- { 42 , 0 , 0 , 1 , 7 },
- { 43 , 0 , 0 , 1 , -7 },
- { 44 , 0 , 0 , 1 , 6 },
- { 45 , 0 , 0 , 1 , -6 },
- { 54 , 0 , 0 , 26 , 1 },
- { 55 , 0 , 0 , 26 , -1 },
- { 56 , 0 , 0 , 25 , 1 },
- { 57 , 0 , 0 , 25 , -1 },
- { 58 , 0 , 0 , 24 , 1 },
- { 59 , 0 , 0 , 24 , -1 },
- { 60 , 0 , 0 , 23 , 1 },
- { 61 , 0 , 0 , 23 , -1 },
- { 62 , 0 , 0 , 22 , 1 },
- { 63 , 0 , 0 , 22 , -1 },
- { 32 , 1 , 0 , 0 , 31 },
- { 33 , 0 , 0 , 0 , -31 },
- { 34 , 0 , 0 , 0 , 30 },
- { 35 , 0 , 0 , 0 , -30 },
- { 36 , 0 , 0 , 0 , 29 },
- { 37 , 0 , 0 , 0 , -29 },
- { 38 , 0 , 0 , 0 , 28 },
- { 39 , 0 , 0 , 0 , -28 },
- { 40 , 0 , 0 , 0 , 27 },
- { 41 , 0 , 0 , 0 , -27 },
- { 42 , 0 , 0 , 0 , 26 },
- { 43 , 0 , 0 , 0 , -26 },
- { 44 , 0 , 0 , 0 , 25 },
- { 45 , 0 , 0 , 0 , -25 },
- { 46 , 0 , 0 , 0 , 24 },
- { 47 , 0 , 0 , 0 , -24 },
- { 48 , 0 , 0 , 0 , 23 },
- { 49 , 0 , 0 , 0 , -23 },
- { 50 , 0 , 0 , 0 , 22 },
- { 51 , 0 , 0 , 0 , -22 },
- { 52 , 0 , 0 , 0 , 21 },
- { 53 , 0 , 0 , 0 , -21 },
- { 54 , 0 , 0 , 0 , 20 },
- { 55 , 0 , 0 , 0 , -20 },
- { 56 , 0 , 0 , 0 , 19 },
- { 57 , 0 , 0 , 0 , -19 },
- { 58 , 0 , 0 , 0 , 18 },
- { 59 , 0 , 0 , 0 , -18 },
- { 60 , 0 , 0 , 0 , 17 },
- { 61 , 0 , 0 , 0 , -17 },
- { 62 , 0 , 0 , 0 , 16 },
- { 63 , 0 , 0 , 0 , -16 },
- { 32 , 1 , 0 , 0 , 40 },
- { 33 , 0 , 0 , 0 , -40 },
- { 34 , 0 , 0 , 0 , 39 },
- { 35 , 0 , 0 , 0 , -39 },
- { 36 , 0 , 0 , 0 , 38 },
- { 37 , 0 , 0 , 0 , -38 },
- { 38 , 0 , 0 , 0 , 37 },
- { 39 , 0 , 0 , 0 , -37 },
- { 40 , 0 , 0 , 0 , 36 },
- { 41 , 0 , 0 , 0 , -36 },
- { 42 , 0 , 0 , 0 , 35 },
- { 43 , 0 , 0 , 0 , -35 },
- { 44 , 0 , 0 , 0 , 34 },
- { 45 , 0 , 0 , 0 , -34 },
- { 46 , 0 , 0 , 0 , 33 },
- { 47 , 0 , 0 , 0 , -33 },
- { 48 , 0 , 0 , 0 , 32 },
- { 49 , 0 , 0 , 0 , -32 },
- { 50 , 0 , 0 , 1 , 14 },
- { 51 , 0 , 0 , 1 , -14 },
- { 52 , 0 , 0 , 1 , 13 },
- { 53 , 0 , 0 , 1 , -13 },
- { 54 , 0 , 0 , 1 , 12 },
- { 55 , 0 , 0 , 1 , -12 },
- { 56 , 0 , 0 , 1 , 11 },
- { 57 , 0 , 0 , 1 , -11 },
- { 58 , 0 , 0 , 1 , 10 },
- { 59 , 0 , 0 , 1 , -10 },
- { 60 , 0 , 0 , 1 , 9 },
- { 61 , 0 , 0 , 1 , -9 },
- { 62 , 0 , 0 , 1 , 8 },
- { 63 , 0 , 0 , 1 , -8 },
- { 32 , 1 , 0 , 1 , 18 },
- { 33 , 0 , 0 , 1 , -18 },
- { 34 , 0 , 0 , 1 , 17 },
- { 35 , 0 , 0 , 1 , -17 },
- { 36 , 0 , 0 , 1 , 16 },
- { 37 , 0 , 0 , 1 , -16 },
- { 38 , 0 , 0 , 1 , 15 },
- { 39 , 0 , 0 , 1 , -15 },
- { 40 , 0 , 0 , 6 , 3 },
- { 41 , 0 , 0 , 6 , -3 },
- { 42 , 0 , 0 , 16 , 2 },
- { 43 , 0 , 0 , 16 , -2 },
- { 44 , 0 , 0 , 15 , 2 },
- { 45 , 0 , 0 , 15 , -2 },
- { 46 , 0 , 0 , 14 , 2 },
- { 47 , 0 , 0 , 14 , -2 },
- { 48 , 0 , 0 , 13 , 2 },
- { 49 , 0 , 0 , 13 , -2 },
- { 50 , 0 , 0 , 12 , 2 },
- { 51 , 0 , 0 , 12 , -2 },
- { 52 , 0 , 0 , 11 , 2 },
- { 53 , 0 , 0 , 11 , -2 },
- { 54 , 0 , 0 , 31 , 1 },
- { 55 , 0 , 0 , 31 , -1 },
- { 56 , 0 , 0 , 30 , 1 },
- { 57 , 0 , 0 , 30 , -1 },
- { 58 , 0 , 0 , 29 , 1 },
- { 59 , 0 , 0 , 29 , -1 },
- { 60 , 0 , 0 , 28 , 1 },
- { 61 , 0 , 0 , 28 , -1 },
- { 62 , 0 , 0 , 27 , 1 },
- { 63 , 0 , 0 , 27 , -1 },
- {(int32u)-1, (int8u)-1, 1, -1, -1} //
-};
-
-const File__Analyze::vlc Mpegv_macroblock_type_I[]=
-{
- { 1, 1, 0, 0, 0x02},
- { 1, 1, 0, 0, 0x22},
- VLC_END
-};
-
-const File__Analyze::vlc Mpegv_macroblock_type_P[]=
-{
- { 1, 1, 0, 0, 0x14},
- { 1, 1, 0, 0, 0x04},
- { 1, 1, 0, 0, 0x10},
- { 3, 2, 0, 0, 0x02},
- { 2, 0, 0, 0, 0x34},
- { 1, 0, 0, 0, 0x24},
- { 1, 1, 0, 0, 0x22},
- {(int32u)-1,(int8u)-1, 0, 0, 0}
-};
-
-const File__Analyze::vlc Mpegv_macroblock_type_B[]=
-{
- { 2 , 2 , 0 , 0 , 0x18 },
- { 3 , 0 , 0 , 0 , 0x1C },
- { 2 , 1 , 0 , 0 , 0x08 },
- { 3 , 0 , 0 , 0 , 0x0C },
- { 2 , 1 , 0 , 0 , 0x10 },
- { 3 , 0 , 0 , 0 , 0x14 },
- { 3 , 1 , 0 , 0 , 0x02 },
- { 2 , 0 , 0 , 0 , 0x3C },
- { 3 , 1 , 0 , 0 , 0x34 },
- { 2 , 0 , 0 , 0 , 0x2C },
- { 1 , 0 , 0 , 0 , 0x22 },
- VLC_END
-};
-
-const File__Analyze::vlc Mpegv_motion_code[]=
-{
- { 1 , 1 , 0 , 0 , 0 },
- { 1 , 1 , 0 , 0 , 1 },
- { 1 , 1 , 0 , 0 , 2 },
- { 1 , 1 , 0 , 0 , 3 },
- { 3 , 2 , 0 , 0 , 4 },
- { 5 , 1 , 0 , 0 , 5 },
- { 4 , 0 , 0 , 0 , 6 },
- { 3 , 0 , 0 , 0 , 7 },
- { 11 , 2 , 0 , 0 , 8 },
- { 10 , 0 , 0 , 0 , 9 },
- { 9 , 0 , 0 , 0 , 10 },
- { 17 , 1 , 0 , 0 , 11 },
- { 16 , 0 , 0 , 0 , 12 },
- { 15 , 0 , 0 , 0 , 13 },
- { 14 , 0 , 0 , 0 , 14 },
- { 13 , 0 , 0 , 0 , 15 },
- { 12 , 0 , 0 , 0 , 16 },
-
- VLC_END
-};
-
-const File__Analyze::vlc Mpegv_dmvector[]=
-{
- { 0 , 1 , 0 , 0 , 0 },
- { 2 , 1 , 0 , 0 , 1 },
- { 3 , 0 , 0 , 0 , -1 },
- VLC_END
-};
-
-const File__Analyze::vlc Mpegv_coded_block_pattern[]=
-{
- // cbp
- { 7 , 3 , 0 , 0 , 60 },
- { 13 , 1 , 0 , 0 , 4 },
- { 12 , 0 , 0 , 0 , 8 },
- { 11 , 0 , 0 , 0 , 16 },
- { 10 , 0 , 0 , 0 , 32 },
- { 19 , 1 , 0 , 0 , 12 },
- { 18 , 0 , 0 , 0 , 48 },
- { 17 , 0 , 0 , 0 , 20 },
- { 16 , 0 , 0 , 0 , 40 },
- { 15 , 0 , 0 , 0 , 28 },
- { 14 , 0 , 0 , 0 , 44 },
- { 13 , 0 , 0 , 0 , 52 },
- { 12 , 0 , 0 , 0 , 56 },
- { 11 , 0 , 0 , 0 , 1 },
- { 10 , 0 , 0 , 0 , 61 },
- { 9 , 0 , 0 , 0 , 2 },
- { 8 , 0 , 0 , 0 , 62 },
- { 15 , 1 , 0 , 0 , 24 },
- { 14 , 0 , 0 , 0 , 36 },
- { 13 , 0 , 0 , 0 , 3 },
- { 12 , 0 , 0 , 0 , 63 },
- { 23 , 1 , 0 , 0 , 5 },
- { 22 , 0 , 0 , 0 , 9 },
- { 21 , 0 , 0 , 0 , 17 },
- { 20 , 0 , 0 , 0 , 33 },
- { 19 , 0 , 0 , 0 , 6 },
- { 18 , 0 , 0 , 0 , 10 },
- { 17 , 0 , 0 , 0 , 18 },
- { 16 , 0 , 0 , 0 , 34 },
- { 31 , 1 , 0 , 0 , 7 },
- { 30 , 0 , 0 , 0 , 11 },
- { 29 , 0 , 0 , 0 , 19 },
- { 28 , 0 , 0 , 0 , 35 },
- { 27 , 0 , 0 , 0 , 13 },
- { 26 , 0 , 0 , 0 , 49 },
- { 25 , 0 , 0 , 0 , 21 },
- { 24 , 0 , 0 , 0 , 41 },
- { 23 , 0 , 0 , 0 , 14 },
- { 22 , 0 , 0 , 0 , 50 },
- { 21 , 0 , 0 , 0 , 22 },
- { 20 , 0 , 0 , 0 , 42 },
- { 19 , 0 , 0 , 0 , 15 },
- { 18 , 0 , 0 , 0 , 51 },
- { 17 , 0 , 0 , 0 , 23 },
- { 16 , 0 , 0 , 0 , 43 },
- { 15 , 0 , 0 , 0 , 25 },
- { 14 , 0 , 0 , 0 , 37 },
- { 13 , 0 , 0 , 0 , 26 },
- { 12 , 0 , 0 , 0 , 38 },
- { 11 , 0 , 0 , 0 , 29 },
- { 10 , 0 , 0 , 0 , 45 },
- { 9 , 0 , 0 , 0 , 53 },
- { 8 , 0 , 0 , 0 , 57 },
- { 7 , 0 , 0 , 0 , 30 },
- { 6 , 0 , 0 , 0 , 46 },
- { 5 , 0 , 0 , 0 , 54 },
- { 4 , 0 , 0 , 0 , 58 },
- { 7 , 1 , 0 , 0 , 31 },
- { 6 , 0 , 0 , 0 , 47 },
- { 5 , 0 , 0 , 0 , 55 },
- { 4 , 0 , 0 , 0 , 59 },
- { 3 , 0 , 0 , 0 , 27 },
- { 2 , 0 , 0 , 0 , 39 },
- { 1 , 0 , 0 , 0 , 0 },
- VLC_END
-};
-
-#endif //MEDIAINFO_MACROBLOCKS
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Mpegv::File_Mpegv()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("MPEG Video");
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Mpegv;
- StreamIDs_Width[0]=16;
- #endif //MEDIAINFO_EVENTS
- #if MEDIAINFO_TRACE
- Trace_Layers_Update(8); //Stream
- #endif //MEDIAINFO_TRACE
- Trusted_Multiplier=2;
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- PTS_DTS_Needed=true;
- IsRawStream=true;
- Frame_Count_NotParsedIncluded=0;
-
- //In
- MPEG_Version=1;
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.3?512:2;
- FrameIsAlwaysComplete=false;
- TimeCodeIsNotTrustable=false;
- #if defined(MEDIAINFO_ANCILLARY_YES)
- Ancillary=NULL;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
- #if MEDIAINFO_ADVANCED
- InitDataNotRepeated_Optional=false;
- #endif // MEDIAINFO_ADVANCED
-
- //temporal_reference
- TemporalReference_Offset=0;
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- GA94_03_Parser=NULL;
- GA94_03_TemporalReference_Offset=0;
- GA94_03_IsPresent=false;
- Text_Positions.push_back(text_position(GA94_03_Parser));
- CC___Parser=NULL;
- CC___IsPresent=false;
- Text_Positions.push_back(text_position(CC___Parser));
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #if defined(MEDIAINFO_SCTE20_YES)
- Scte_Parser=NULL;
- Scte_TemporalReference_Offset=0;
- Scte_IsPresent=false;
- Text_Positions.push_back(text_position(Scte_Parser));
- #endif //defined(MEDIAINFO_SCTE20_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- DTG1_Parser=NULL;
- GA94_06_Parser=NULL;
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
- #if defined(MEDIAINFO_CDP_YES)
- Cdp_Parser=NULL;
- Cdp_IsPresent=false;
- Text_Positions.push_back(text_position(Cdp_Parser));
- #endif //defined(MEDIAINFO_CDP_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- AfdBarData_Parser=NULL;
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
-
- //Temp
- SizeToAnalyse_Begin=1*1024*1024;
- SizeToAnalyse_End=1*1024*1024;
- Frame_Count_LastIFrame=(int64u)-1;
- Searching_TimeStamp_Start_DoneOneTime=false;
- sequence_header_IsParsed=false;
- FrameInfo.DTS=0;
- Parsing_End_ForDTS=false;
-
- //Macroblocks
- #if MEDIAINFO_MACROBLOCKS
- Macroblocks_Parse=false;
- #endif //MEDIAINFO_MACROBLOCKS
-
- #if MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- Slices_Count=0;
- Has_sequence_header=false;
- Has_sequence_extension=false;
- #endif // MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
-}
-
-//---------------------------------------------------------------------------
-File_Mpegv::~File_Mpegv()
-{
- for (size_t Pos=0; Pos<TemporalReference.size(); Pos++)
- delete TemporalReference[Pos]; //TemporalReference[Pos]=NULL;
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- delete GA94_03_Parser; //GA94_03_Parser=NULL;
- delete CC___Parser; //CC___Parser=NULL;
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #if defined(MEDIAINFO_SCTE20_YES)
- delete Scte_Parser; //Scte_Parser=NULL;
- #endif //defined(MEDIAINFO_SCTE20_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- delete DTG1_Parser; //DTG1_Parser=NULL;
- delete GA94_06_Parser; //GA94_06_Parser=NULL;
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
-
- //Macroblocks
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- {
- delete[] macroblock_address_increment_Vlc.Array; //macroblock_address_increment_Vlc.Array=NULL;
- delete[] macroblock_address_increment_Vlc.BitsToSkip; //macroblock_address_increment_Vlc.Size=NULL;
- delete[] dct_dc_size_luminance.Array; //dct_dc_size_luminance.Array=NULL;
- delete[] dct_dc_size_luminance.BitsToSkip; //dct_dc_size_luminance.Size=NULL;
- delete[] dct_dc_size_chrominance.Array; //dct_dc_size_chrominance.Array=NULL;
- delete[] dct_dc_size_chrominance.BitsToSkip; //dct_dc_size_chrominance.Size=NULL;
- delete[] dct_coefficients_0.Array; //dct_coefficients_0.Array=NULL;
- delete[] dct_coefficients_0.BitsToSkip; //dct_coefficients_0.Size=NULL;
- delete[] dct_coefficients_1.Array; //dct_coefficients_1.Array=NULL;
- delete[] dct_coefficients_1.BitsToSkip; //dct_coefficients_1.Size=NULL;
- }
- #endif //MEDIAINFO_MACROBLOCKS
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpegv::Streams_Accept()
-{
- Stream_Prepare(Stream_Video);
-}
-
-//---------------------------------------------------------------------------
-void File_Mpegv::Streams_Update()
-{
- for (size_t Text_Positions_Pos=0; Text_Positions_Pos<Text_Positions.size(); Text_Positions_Pos++)
- {
- if (*Text_Positions[Text_Positions_Pos].Parser && (*Text_Positions[Text_Positions_Pos].Parser)->Status[IsUpdated])
- {
- Update(*Text_Positions[Text_Positions_Pos].Parser);
- for (size_t Pos=0; Pos<(*Text_Positions[Text_Positions_Pos].Parser)->Count_Get(Stream_Text); Pos++)
- {
- //Saving previous Muxing mode
- Ztring MuxingMode=Retrieve(Stream_Text, Text_Positions[Text_Positions_Pos].StreamPos+Pos, "MuxingMode");
-
- bool IsNewStream=false;
- if (Retrieve(Stream_Text, Text_Positions[Text_Positions_Pos].StreamPos+Pos, Text_ID)!=(*Text_Positions[Text_Positions_Pos].Parser)->Get(Stream_Text, Pos, Text_ID))
- {
- Stream_Prepare(Stream_Text, Text_Positions[Text_Positions_Pos].StreamPos+Pos);
- for (size_t Text_Positions_Pos2=Text_Positions_Pos+1; Text_Positions_Pos2<Text_Positions.size(); Text_Positions_Pos2++)
- Text_Positions[Text_Positions_Pos2].StreamPos++;
- IsNewStream=true;
- }
- Merge(*(*Text_Positions[Text_Positions_Pos].Parser), Stream_Text, Pos, Text_Positions[Text_Positions_Pos].StreamPos+Pos);
- Ztring LawRating=(*Text_Positions[Text_Positions_Pos].Parser)->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=(*Text_Positions[Text_Positions_Pos].Parser)->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
-
- if (IsNewStream)
- {
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- if ((*Text_Positions[Text_Positions_Pos].Parser)==GA94_03_Parser)
- MuxingMode=__T("A/53 / ")+Retrieve(Stream_Text, Text_Positions[Text_Positions_Pos].StreamPos+Pos, "MuxingMode");
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #if defined(MEDIAINFO_SCTE20_YES)
- if ((*Text_Positions[Text_Positions_Pos].Parser)==Scte_Parser)
- MuxingMode=Retrieve(Stream_Text, Text_Positions[Text_Positions_Pos].StreamPos+Pos, "MuxingMode");
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #if defined(MEDIAINFO_GXF_YES) && defined(MEDIAINFO_CDP_YES)
- if ((*Text_Positions[Text_Positions_Pos].Parser)==Cdp_Parser)
- MuxingMode=__T("Ancillary data / ")+Retrieve(Stream_Text, Text_Positions[Text_Positions_Pos].StreamPos+Pos, "MuxingMode");
- #endif //defined(MEDIAINFO_GXF_YES) && defined(MEDIAINFO_CDP_YES)
- }
- Fill(Stream_Text, Text_Positions[Text_Positions_Pos].StreamPos+Pos, "MuxingMode", MuxingMode, true);
- }
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpegv::Streams_Fill()
-{
- //Version
- if (MPEG_Version==2)
- {
- Fill(Stream_General, 0, General_Format_Version, "Version 2");
- Fill(Stream_Video, 0, Video_Format, "MPEG Video");
- Fill(Stream_Video, 0, Video_Format_Version, "Version 2");
- Fill(Stream_Video, 0, Video_Format_Commercial, "MPEG-2 Video");
- Fill(Stream_Video, 0, Video_Codec, "MPEG-2V");
- Fill(Stream_Video, 0, Video_Codec_String, "MPEG-2 Video", Unlimited, true, true);
- }
- else
- {
- Fill(Stream_General, 0, General_Format_Version, "Version 1");
- Fill(Stream_Video, 0, Video_Format, "MPEG Video");
- Fill(Stream_Video, 0, Video_Format_Version, "Version 1");
- Fill(Stream_Video, 0, Video_Format_Commercial, "MPEG-1 Video");
- Fill(Stream_Video, 0, Video_Codec, "MPEG-1V");
- Fill(Stream_Video, 0, Video_Codec_String, "MPEG-1 Video", Unlimited, true, true);
- }
-
- Fill(Stream_Video, 0, Video_Width, 0x1000*horizontal_size_extension+horizontal_size_value);
- Fill(Stream_Video, 0, Video_Height, 0x1000*vertical_size_extension+vertical_size_value);
- Fill(Stream_Video, 0, Video_Colorimetry, Mpegv_Colorimetry_format[chroma_format]);
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- Fill(Stream_Video, 0, Video_BitDepth, 8);
-
- //AspectRatio
- if (MPEG_Version==2)
- {
- if (aspect_ratio_information==0)
- ;//Forbidden
- else if (aspect_ratio_information==1)
- Fill(Stream_Video, 0, Video_PixelAspectRatio, 1.000, 3, true);
- else if (display_horizontal_size && display_vertical_size)
- {
- if (vertical_size_value && Mpegv_aspect_ratio2[aspect_ratio_information])
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, (float)(0x1000*horizontal_size_extension+horizontal_size_value)/(0x1000*vertical_size_extension+vertical_size_value)
- *Mpegv_aspect_ratio2[aspect_ratio_information]/((float)display_horizontal_size/display_vertical_size), 3, true);
- }
- else if (Mpegv_aspect_ratio2[aspect_ratio_information])
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, Mpegv_aspect_ratio2[aspect_ratio_information], 3, true);
- }
- else //Version 1
- {
- if (vertical_size_value && Mpegv_aspect_ratio1[aspect_ratio_information])
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, (float)(0x1000*horizontal_size_extension+horizontal_size_value)/(0x1000*vertical_size_extension+vertical_size_value)/Mpegv_aspect_ratio1[aspect_ratio_information], 3, true);
- }
-
- //FrameRate
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, (float)(Mpegv_frame_rate[frame_rate_code] * (frame_rate_extension_n + 1)) / (float)(frame_rate_extension_d + 1));
-
- //BitRate
- if (vbv_delay==0xFFFF || (MPEG_Version==1 && bit_rate_value==0x3FFFF))
- Fill(Stream_Video, 0, Video_BitRate_Mode, "VBR");
- if (bit_rate_value_IsValid && (bit_rate_extension>0 || bit_rate_value!=0x3FFFF))
- Fill(Stream_Video, 0, Video_BitRate_Maximum, ((((int32u)bit_rate_extension<<12))+bit_rate_value)*400);
-
- //Interlacement
- if (MPEG_Version==1)
- {
- Fill(Stream_Video, 0, Video_ScanType, "Progressive");
- Fill(Stream_Video, 0, Video_Interlacement, "PPF");
- }
- else if (progressive_frame_Count && progressive_frame_Count!=Frame_Count && progressive_frame_Count!=Frame_Count+1) //In case the stream is cut before a slice
- {
- //This is mixed
- }
- else if (Frame_Count>0) //Only if we have at least one progressive_frame definition
- {
- if (progressive_sequence || progressive_frame_Count==Frame_Count || progressive_frame_Count==Frame_Count+1)
- {
- Fill(Stream_Video, 0, Video_ScanType, "Progressive");
- Fill(Stream_Video, 0, Video_Interlacement, "PPF");
- if (!progressive_sequence && !(Interlaced_Top && Interlaced_Bottom) && !(!Interlaced_Top && !Interlaced_Bottom))
- Fill(Stream_Video, 0, Video_ScanOrder, Interlaced_Top?"TFF":"BFF");
- }
- else
- {
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- if ((Interlaced_Top && Interlaced_Bottom) || (!Interlaced_Top && !Interlaced_Bottom))
- Fill(Stream_Video, 0, Video_Interlacement, "Interlaced");
- else
- {
- Fill(Stream_Video, 0, Video_ScanOrder, Interlaced_Top?"TFF":"BFF");
- Fill(Stream_Video, 0, Video_Interlacement, Interlaced_Top?"TFF":"BFF");
- }
- if (!(PictureStructure_Field && PictureStructure_Frame) && !(!PictureStructure_Field && !PictureStructure_Frame))
- Fill(Stream_Video, 0, Video_Format_Settings_PictureStructure, PictureStructure_Field?"Field":"Frame");
- }
- std::string TempRef;
- for (size_t Pos=0; Pos<TemporalReference.size(); Pos++)
- if (TemporalReference[Pos] && TemporalReference[Pos]->HasPictureCoding)
- {
- TempRef+=TemporalReference[Pos]->top_field_first?"T":"B";
- TempRef+=TemporalReference[Pos]->repeat_first_field?"3":"2";
- }
- if (TempRef.find('3')!=std::string::npos)
- {
- if (TempRef.find("T2T3B2B3T2T3B2B3")!=std::string::npos
- || TempRef.find("B2B3T2T3B2B3T2T3")!=std::string::npos)
- {
- Fill(Stream_Video, 0, Video_ScanOrder, "2:3 Pulldown", Unlimited, true, true);
- Fill(Stream_Video, 0, Video_FrameRate, FrameRate*24/30, 3, true); //Real framerate
- Fill(Stream_Video, 0, Video_ScanType, "Progressive", Unlimited, true, true);
- Fill(Stream_Video, 0, Video_Interlacement, "PPF", Unlimited, true, true);
- }
- if (TempRef.find("T2T2T2T2T2T2T2T2T2T2T2T3B2B2B2B2B2B2B2B2B2B2B2B3")!=std::string::npos
- || TempRef.find("B2B2B2B2B2B2B2B2B2B2B2B3T2T2T2T2T2T2T2T2T2T2T2T3")!=std::string::npos)
- {
- Fill(Stream_Video, 0, Video_ScanOrder, "2:2:2:2:2:2:2:2:2:2:2:3 Pulldown", Unlimited, true, true);
- Fill(Stream_Video, 0, Video_FrameRate, FrameRate*24/25, 3, true); //Real framerate
- Fill(Stream_Video, 0, Video_ScanType, "Progressive", Unlimited, true, true);
- Fill(Stream_Video, 0, Video_Interlacement, "PPF", Unlimited, true, true);
- }
- }
- }
-
- //Profile
- if (!profile_and_level_indication_escape && profile_and_level_indication_profile!=(int8u)-1 && profile_and_level_indication_level!=(int8u)-1)
- {
- Fill(Stream_Video, 0, Video_Format_Profile, Ztring().From_Local(Mpegv_profile_and_level_indication_profile[profile_and_level_indication_profile])+__T("@")+Ztring().From_Local(Mpegv_profile_and_level_indication_level[profile_and_level_indication_level]));
- Fill(Stream_Video, 0, Video_Codec_Profile, Ztring().From_Local(Mpegv_profile_and_level_indication_profile[profile_and_level_indication_profile])+__T("@")+Ztring().From_Local(Mpegv_profile_and_level_indication_level[profile_and_level_indication_level]));
- }
- else if (profile_and_level_indication_escape)
- {
- Fill(Stream_Video, 0, Video_Format_Profile, Ztring().From_Local(Mpegv_profile_and_level_indication(profile_and_level_indication)));
- Fill(Stream_Video, 0, Video_Codec_Profile, Ztring().From_Local(Mpegv_profile_and_level_indication(profile_and_level_indication)));
- }
-
- //Standard
- Fill(Stream_Video, 0, Video_Standard, Mpegv_video_format[video_format]);
- if (colour_description)
- {
- Fill(Stream_Video, 0, Video_colour_description_present, "Yes");
- Fill(Stream_Video, 0, Video_colour_primaries, Mpegv_colour_primaries(colour_primaries));
- Fill(Stream_Video, 0, Video_transfer_characteristics, Mpegv_transfer_characteristics(transfer_characteristics));
- Fill(Stream_Video, 0, Video_matrix_coefficients, Mpegv_matrix_coefficients(matrix_coefficients));
- }
-
- //Matrix
- if (load_intra_quantiser_matrix || load_non_intra_quantiser_matrix)
- {
- Fill(Stream_Video, 0, Video_Format_Settings, "CustomMatrix");
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix, "Custom");
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix_Data, Matrix_intra);
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix_Data, Matrix_nonintra);
- Fill(Stream_Video, 0, Video_Codec_Settings, "CustomMatrix");
- Fill(Stream_Video, 0, Video_Codec_Settings_Matrix, "Custom");
- }
- else
- {
- Fill(Stream_Video, 0, Video_Format_Settings_Matrix, "Default");
- Fill(Stream_Video, 0, Video_Codec_Settings_Matrix, "Default");
- }
-
- //library
- if (Library.size()>=8)
- {
- Fill(Stream_Video, 0, Video_Encoded_Library, Library);
- Fill(Stream_Video, 0, Video_Encoded_Library_Name, Library_Name);
- Fill(Stream_Video, 0, Video_Encoded_Library_Version, Library_Version);
- Fill(Stream_General, 0, General_Encoded_Library, Library);
- Fill(Stream_General, 0, General_Encoded_Library_Name, Library_Name);
- Fill(Stream_General, 0, General_Encoded_Library_Version, Library_Version);
- }
-
- //Delay
- if (group_start_FirstPass && !TimeCodeIsNotTrustable && Time_Begin_Seconds!=Error)
- {
- float64 Time_Begin=((float64)Time_Begin_Seconds)*1000;
- if (FrameRate)
- Time_Begin+=((float64)Time_Begin_Frames)*1000/FrameRate;
- Fill(Stream_Video, 0, Video_Delay, Time_Begin, 0);
- Fill(Stream_Video, 0, Video_Delay_Settings, Ztring(__T("drop_frame_flag="))+(group_start_drop_frame_flag?__T("1"):__T("0")));
- Fill(Stream_Video, 0, Video_Delay_Settings, Ztring(__T("closed_gop="))+(group_start_closed_gop?__T("1"):__T("0")));
- Fill(Stream_Video, 0, Video_Delay_Settings, Ztring(__T("broken_link="))+(group_start_broken_link?__T("1"):__T("0")));
- Fill(Stream_Video, 0, Video_Delay_Source, "Stream");
- Fill(Stream_Video, 0, Video_Delay_DropFrame, group_start_drop_frame_flag?"Yes":"No");
-
- Fill(Stream_Video, 0, Video_TimeCode_FirstFrame, TimeCode_FirstFrame.c_str());
- if (IsSub)
- Fill(Stream_Video, 0, Video_TimeCode_Source, "Group of pictures header");
- }
-
- //BVOP
- if (BVOP_Count>0)
- {
- Fill(Stream_Video, 0, Video_Format_Settings, "BVOP");
- Fill(Stream_Video, 0, Video_Format_Settings_BVOP, "Yes");
- }
- else
- Fill(Stream_Video, 0, Video_Format_Settings_BVOP, "No");
-
- //Buffer
- Fill(Stream_Video, 0, Video_BufferSize, 2*1024*((((int32u)vbv_buffer_size_extension)<<10)+vbv_buffer_size_value));
-
- //Autorisation of other streams
- if (!Status[IsAccepted])
- {
- NextCode_Clear();
- NextCode_Add(0x00);
- NextCode_Add(0xB8);
- }
- #if MEDIAINFO_MACROBLOCKS
- if (!Macroblocks_Parse)
- #endif //MEDIAINFO_MACROBLOCKS
- for (int8u Pos=0x01; Pos<=0xAF; Pos++)
- Streams[Pos].Searching_Payload=false;
- Streams[0xB8].Searching_TimeStamp_End=true;
- if (IsSub)
- {
- Streams[0xB3].Searching_TimeStamp_End=true;
- Streams[0x00].Searching_TimeStamp_End=true;
- }
-
- //Caption may be in user_data, must be activated if full parsing is requested
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES) || defined(MEDIAINFO_SCTE20_YES) || (defined(MEDIAINFO_GXF_YES) && defined(MEDIAINFO_CDP_YES))
- Streams[0x00].Searching_Payload=GA94_03_IsPresent || Cdp_IsPresent;
- Streams[0xB2].Searching_Payload=GA94_03_IsPresent || CC___IsPresent || Scte_IsPresent;
- Streams[0xB3].Searching_Payload=GA94_03_IsPresent || Cdp_IsPresent;
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES) || defined(MEDIAINFO_SCTE20_YES) || (defined(MEDIAINFO_GXF_YES) && defined(MEDIAINFO_CDP_YES))
- if (Config->ParseSpeed>=1)
- {
- Streams[0x00].Searching_Payload=true;
- Streams[0xB2].Searching_Payload=true;
- Streams[0xB3].Searching_Payload=true;
- Streams[0xB5].Searching_Payload=true;
- }
-
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- if (DTG1_Parser)
- Merge(*DTG1_Parser, Stream_Video, 0, 0);
- if (GA94_06_Parser)
- {
- Merge(*GA94_06_Parser, Stream_Video, 0, 0);
- Ztring LawRating=GA94_06_Parser->Retrieve(Stream_General, 0, General_LawRating);
- if (!LawRating.empty())
- Fill(Stream_General, 0, General_LawRating, LawRating, true);
- Ztring Title=GA94_06_Parser->Retrieve(Stream_General, 0, General_Title);
- if (!Title.empty() && Retrieve(Stream_General, 0, General_Title).empty())
- Fill(Stream_General, 0, General_Title, Title);
- }
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- if (AfdBarData_Parser)
- Merge(*AfdBarData_Parser, Stream_Video, 0, 0);
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
-
- //extra
- if (intra_dc_precision!=(int8u)-1)
- {
- Fill(Stream_Video, 0, "intra_dc_precision", 8+intra_dc_precision);
- (*Stream_More)[Stream_Video][0](Ztring().From_Local("intra_dc_precision"), Info_Options)=__T("N NT");
- }
-
- //Commercial name
- if (Retrieve(Stream_Video, 0, Video_Format_Version)==__T("Version 2")
- && Retrieve(Stream_Video, 0, Video_DisplayAspectRatio)==__T("1.778")
- && Retrieve(Stream_Video, 0, Video_BitDepth)==__T("8")
- && Retrieve(Stream_Video, 0, Video_ChromaSubsampling)==__T("4:2:0"))
- {
- //HDV1
- if (Retrieve(Stream_Video, 0, Video_Width)==__T("1280")
- && Retrieve(Stream_Video, 0, Video_Height)==__T("720")
- && Retrieve(Stream_Video, 0, Video_ScanType)==__T("Progressive")
- && (Retrieve(Stream_Video, 0, Video_FrameRate)==__T("60.000") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("59.940") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("30.000") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("29.970") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("24.000") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("23.976") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("50.000") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("25.000"))
- && (Retrieve(Stream_Video, 0, Video_Format_Profile)==__T("Main@High") || Retrieve(Stream_Video, 0, Video_Format_Profile)==__T("Main@High 1440"))
- && Retrieve(Stream_Video, 0, Video_BitRate).To_int64u()<20000000 && Retrieve(Stream_Video, 0, Video_BitRate_Maximum).To_int64u()<20000000)
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "HDV 720p");
-
- //HDV2
- if (Retrieve(Stream_Video, 0, Video_Width)==__T("1440")
- && Retrieve(Stream_Video, 0, Video_Height)==__T("1080")
- && Retrieve(Stream_Video, 0, Video_Format_Profile)==__T("Main@High 1440")
- && Retrieve(Stream_Video, 0, Video_BitRate).To_int64u()<27000000 && Retrieve(Stream_Video, 0, Video_BitRate_Maximum).To_int64u()<27000000)
- {
- //Interlaced
- if (Retrieve(Stream_Video, 0, Video_ScanType)==__T("Interlaced")
- && (Retrieve(Stream_Video, 0, Video_FrameRate)==__T("30.000") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("29.970") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("50.000") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("25.000")))
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "HDV 1080i");
-
- //Progressive
- if (Retrieve(Stream_Video, 0, Video_ScanType)==__T("Progressive")
- && (Retrieve(Stream_Video, 0, Video_FrameRate)==__T("30.000") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("29.970") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("24.000") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("23.976") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("50.000") || Retrieve(Stream_Video, 0, Video_FrameRate)==__T("25.000")))
- Fill(Stream_Video, 0, Video_Format_Commercial_IfAny, "HDV 1080p");
- }
- }
-}
-
-//---------------------------------------------------------------------------
-void File_Mpegv::Streams_Finish()
-{
- //Duration
- if (PTS_End>PTS_Begin)
- {
- if (PTS_End_temporal_reference<temporal_reference_Max)
- {
- int64u tc_ToAdd=tc/((progressive_sequence || picture_structure==3)?1:2); //Progressive of Frame
- PTS_End+=tc_ToAdd*(temporal_reference_Max-PTS_End_temporal_reference-1); //TODO: handle cases with 3:2 Pulldown (different progressive_sequence / picture_structure)
- }
- Fill(Stream_Video, 0, Video_Duration, float64_int64s(((float64)(PTS_End-PTS_Begin))/1000000));
- }
- else if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- {
- Fill(Stream_Video, 0, Video_FrameCount, Frame_Count_NotParsedIncluded);
- if (FrameRate)
- Fill(Stream_Video, 0, Video_Duration, Frame_Count_NotParsedIncluded/FrameRate*1000, 0);
- }
- else if (!TimeCodeIsNotTrustable && Time_End_Seconds!=Error && FrameRate)
- {
- TimeCode Time_Begin_TC;
- Time_Begin_TC.FramesPerSecond=(int8u)ceil(FrameRate);
- Time_Begin_TC.DropFrame=group_start_IsParsed?group_start_drop_frame_flag:((FrameRate-ceil(FrameRate))?true:false);
- Time_Begin_TC.Hours=(int8u)(Time_Begin_Seconds/3600);
- Time_Begin_TC.Minutes=(int8u)((Time_Begin_Seconds%3600)/60);
- Time_Begin_TC.Seconds=(int8u)(Time_Begin_Seconds%60);
- Time_Begin_TC.Frames=(int8u)Time_Begin_Frames;
- TimeCode Time_End_TC;
- Time_End_TC.FramesPerSecond=(int8u)ceil(FrameRate);
- Time_End_TC.DropFrame=Time_Begin_TC.DropFrame;
- Time_End_TC.Hours=(int8u)(Time_End_Seconds/3600);
- Time_End_TC.Minutes=(int8u)((Time_End_Seconds%3600)/60);
- Time_End_TC.Seconds=(int8u)(Time_End_Seconds%60);
- Time_End_TC.Frames=(int8u)Time_End_Frames;
- int64u Time_Begin_FrameCount=Time_Begin_TC.ToFrames();
- int64u Time_End_FrameCount = Time_End_TC.ToFrames();
- Fill(Stream_Video, 0, Video_FrameCount, Time_End_FrameCount-Time_Begin_FrameCount, 0);
- Fill(Stream_Video, 0, Video_Duration, (Time_End_FrameCount-Time_Begin_FrameCount)/FrameRate*1000, 0);
- }
-
- //picture_coding_types
- if (!picture_coding_types.empty())
- {
- int64u MaxCount=0;
- int64u Total=0;
- string MaxCount_type;
- for (std::map<std::string, int64u>::iterator Temp=picture_coding_types.begin(); Temp!=picture_coding_types.end(); ++Temp)
- {
- if (Temp->second>MaxCount)
- {
- MaxCount=Temp->second;
- MaxCount_type=Temp->first;
- }
- Total+=Temp->second;
- }
-
- if (Total>=4)
- {
- int64u Count=0;
- for (std::map<std::string, int64u>::iterator Temp=picture_coding_types.begin(); Temp!=picture_coding_types.end(); ++Temp)
- if (Temp->first!=MaxCount_type)
- Count+=Temp->second;
-
- if (Count<Total/2 && Count<Config_VariableGopDetection_Occurences)
- {
- size_t M=1;
- size_t M_Max=1;
- for (size_t Pos=1; Pos<MaxCount_type.size(); Pos++)
- if (MaxCount_type[Pos]==__T('B'))
- {
- M++;
- if (M>M_Max)
- M_Max=M;
- }
- else
- M=1;
- Ztring GOP;
- if (M_Max>1)
- {
- GOP+=__T("M=");
- GOP+=Ztring::ToZtring(M_Max);
- GOP+=__T(", ");
- }
- GOP+=__T("N=");
- GOP+=Ztring::ToZtring(MaxCount_type.size());
- Fill(Stream_Video, 0, Video_Format_Settings_GOP, GOP, true);
- }
- else
- Fill(Stream_Video, 0, Video_Format_Settings_GOP, "Variable", Unlimited, true, true);
- }
- }
-
- //InitDataNotRepeated
- #if MEDIAINFO_ADVANCED
- if (!InitDataNotRepeated_Optional && Config_InitDataNotRepeated_Occurences!=(int64u)-1)
- Fill(Stream_Video, 0, "InitDataRepeated", InitDataNotRepeated>=Config_InitDataNotRepeated_Occurences?"No":"Yes", Unlimited, true, true);
- #endif // MEDIAINFO_ADVANCED
-
- //Other parsers
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- if (GA94_03_Parser && !GA94_03_Parser->Status[IsFinished] && GA94_03_Parser->Status[IsAccepted])
- Finish(GA94_03_Parser);
- if (CC___Parser && !CC___Parser->Status[IsFinished] && CC___Parser->Status[IsAccepted])
- Finish(CC___Parser);
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #if defined(MEDIAINFO_SCTE20_YES)
- if (Scte_Parser && !Scte_Parser->Status[IsFinished] && Scte_Parser->Status[IsAccepted])
- Finish(Scte_Parser);
- #endif //defined(MEDIAINFO_SCTE20_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- if (DTG1_Parser && !DTG1_Parser->Status[IsFinished] && DTG1_Parser->Status[IsAccepted])
- {
- Finish(DTG1_Parser);
- Merge(*DTG1_Parser, Stream_Video, 0, 0);
- }
- if (GA94_06_Parser && !GA94_06_Parser->Status[IsFinished] && GA94_06_Parser->Status[IsAccepted])
- {
- Finish(GA94_06_Parser);
- Merge(*GA94_06_Parser, Stream_Video, 0, 0);
- }
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
- #if defined(MEDIAINFO_CDP_YES)
- if (Cdp_Parser && !Cdp_Parser->Status[IsFinished] && Cdp_Parser->Status[IsAccepted])
- Finish(Cdp_Parser);
- #endif //defined(MEDIAINFO_CDP_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- if (AfdBarData_Parser && !AfdBarData_Parser->Status[IsFinished] && AfdBarData_Parser->Status[IsAccepted])
- {
- Finish(AfdBarData_Parser);
- Merge(*AfdBarData_Parser, Stream_Video, 0, 0);
- }
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
-
- #if MEDIAINFO_IBI
- int64u Numerator=0, Denominator=0;
- switch (frame_rate_code)
- {
- case 1 : Numerator=24000; Denominator=1001; break;
- case 2 : Numerator=24; Denominator=1; break;
- case 3 : Numerator=25; Denominator=1; break;
- case 4 : Numerator=30000; Denominator=1001; break;
- case 5 : Numerator=30; Denominator=1; break;
- case 6 : Numerator=50; Denominator=1; break;
- case 7 : Numerator=60000; Denominator=1001; break;
- case 8 : Numerator=60; Denominator=1; break;
- default: ;
- }
- if (Numerator)
- {
- Numerator*=frame_rate_extension_n+1;
- Denominator*=frame_rate_extension_d+1;
- Ibi_Stream_Finish(Numerator, Denominator);
- }
- #endif //MEDIAINFO_IBI
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Mpegv::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+4>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01)
- {
- Synched=false;
- return true;
- }
-
- //Quick search
- if (!Header_Parser_QuickSearch())
- return false;
-
- #if MEDIAINFO_IBI
- if ((Ibi_SliceParsed && (Buffer[Buffer_Offset+3]==0x00)) || Buffer[Buffer_Offset+3]==0xB3) // picture_start without sequence_header or sequence_header
- {
- if (Buffer_Offset+6>Buffer_Size)
- return false;
- bool RandomAccess=(Buffer[Buffer_Offset+5]&0x38)==0x08 || Buffer[Buffer_Offset+3]==0xB3; //picture_start with I-Frame || sequence_header
- if (RandomAccess)
- Ibi_Add();
-
- Ibi_SliceParsed=false;
- }
- #endif //MEDIAINFO_IBI
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Mpegv::Synched_Init()
-{
- //Temp
- BVOP_Count=0;
- progressive_frame_Count=0;
- Interlaced_Top=0;
- Interlaced_Bottom=0;
- PictureStructure_Field=0;
- PictureStructure_Frame=0;
- display_horizontal_size=0;
- display_vertical_size=0;
- vbv_delay=0;
- vbv_buffer_size_value=0;
- Time_Current_Seconds=Error;
- Time_Current_Frames=(int8u)-1;
- Time_Begin_Seconds=Error;
- Time_Begin_Frames=(int8u)-1;
- Time_End_Seconds=Error;
- Time_End_Frames=(int8u)-1;
- picture_coding_type=(int8u)-1;
- bit_rate_value=0;
- FrameRate=0;
- horizontal_size_value=0;
- vertical_size_value=0;
- bit_rate_extension=0;
- temporal_reference_Old=(int16u)-1;
- temporal_reference_Max=0;
- aspect_ratio_information=0;
- frame_rate_code=0;
- profile_and_level_indication_profile=(int8u)-1;
- profile_and_level_indication_level=(int8u)-1;
- chroma_format=1; //Default is 4:2:0
- horizontal_size_extension=0;
- vertical_size_extension=0;
- frame_rate_extension_n=0;
- frame_rate_extension_d=0;
- video_format=5; //Unspecified video format
- colour_primaries=(int8u)-1;
- transfer_characteristics=(int8u)-1;
- matrix_coefficients=(int8u)-1;
- vbv_buffer_size_extension=0;
- intra_dc_precision=(int8u)-1;
- load_intra_quantiser_matrix=false;
- load_non_intra_quantiser_matrix=false;
- progressive_sequence=true; //progressive by default
- top_field_first=false;
- repeat_first_field=false;
- FirstFieldFound=false;
- group_start_IsParsed=false;
- group_start_FirstPass=false;
- PTS_LastIFrame=(int64u)-1;
- PTS_End_temporal_reference=(int16u)-1;
- bit_rate_value_IsValid=false;
- profile_and_level_indication_escape=false;
- colour_description=false;
- low_delay=false;
- RefFramesCount=0;
- BVOPsSinceLastRefFrames=0;
- temporal_reference_LastIFrame=0;
- tc=0;
- IFrame_IsParsed=false;
- IFrame_Count=0;
- #if MEDIAINFO_IBI
- Ibi_SliceParsed=true;
- #endif //MEDIAINFO_IBI
- #if MEDIAINFO_ADVANCED
- Config_VariableGopDetection_Occurences=MediaInfoLib::Config.VariableGopDetection_Occurences_Get();
- Config_VariableGopDetection_GiveUp=MediaInfoLib::Config.VariableGopDetection_GiveUp_Get();
- InitDataNotRepeated=0;
- Config_InitDataNotRepeated_Occurences=MediaInfoLib::Config.InitDataNotRepeated_Occurences_Get();
- Config_InitDataNotRepeated_GiveUp=MediaInfoLib::Config.InitDataNotRepeated_GiveUp_Get();
- #endif //MEDIAINFO_ADVANCED
-
- //Default stream values
- Streams.resize(0x100);
- Streams[0xB3].Searching_Payload=true;
- for (int8u Pos=0xFF; Pos>=0xB9; Pos--)
- Streams[Pos].Searching_Payload=true; //Testing MPEG-PS
-
- //Macroblocks
- #if MEDIAINFO_MACROBLOCKS
- Macroblocks_Parse=Config->File_Macroblocks_Parse_Get();
- if (Macroblocks_Parse)
- {
- macroblock_address_increment_Vlc.Array=NULL;
- macroblock_address_increment_Vlc.Vlc=Mpegv_macroblock_address_increment;
- macroblock_address_increment_Vlc.Size=11;
- Get_VL_Prepare(macroblock_address_increment_Vlc);
- dct_dc_size_luminance.Array=NULL;
- dct_dc_size_luminance.Vlc=Mpegv_dct_dc_size_luminance;
- dct_dc_size_luminance.Size=9;
- Get_VL_Prepare(dct_dc_size_luminance);
- dct_dc_size_chrominance.Array=NULL;
- dct_dc_size_chrominance.Vlc=Mpegv_dct_dc_size_chrominance;
- dct_dc_size_chrominance.Size=10;
- Get_VL_Prepare(dct_dc_size_chrominance);
- dct_coefficients_0.Array=NULL;
- dct_coefficients_0.Vlc=Mpegv_dct_coefficients_0;
- dct_coefficients_0.Size=17;
- Get_VL_Prepare(dct_coefficients_0);
- dct_coefficients_1.Array=NULL;
- dct_coefficients_1.Vlc=Mpegv_dct_coefficients_1;
- dct_coefficients_1.Size=17;
- Get_VL_Prepare(dct_coefficients_1);
- macroblock_type_I.Array=NULL;
- macroblock_type_I.Vlc=Mpegv_macroblock_type_I;
- macroblock_type_I.Size=2;
- Get_VL_Prepare(macroblock_type_I);
- macroblock_type_P.Array=NULL;
- macroblock_type_P.Vlc=Mpegv_macroblock_type_P;
- macroblock_type_P.Size=6;
- Get_VL_Prepare(macroblock_type_P);
- macroblock_type_B.Array=NULL;
- macroblock_type_B.Vlc=Mpegv_macroblock_type_B;
- macroblock_type_B.Size=6;
- Get_VL_Prepare(macroblock_type_B);
- motion_code.Array=NULL;
- motion_code.Vlc=Mpegv_motion_code;
- motion_code.Size=11;
- Get_VL_Prepare(motion_code);
- dmvector.Array=NULL;
- dmvector.Vlc=Mpegv_dmvector;
- dmvector.Size=2;
- Get_VL_Prepare(dmvector);
- coded_block_pattern.Array=NULL;
- coded_block_pattern.Vlc=Mpegv_coded_block_pattern;
- coded_block_pattern.Size=9;
- Get_VL_Prepare(coded_block_pattern);
- }
- #endif //MEDIAINFO_MACROBLOCKS
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Mpegv::Demux_UnpacketizeContainer_Test()
-{
- if ((Demux_IntermediateItemFound && Buffer[Buffer_Offset+3]==0x00) || Buffer[Buffer_Offset+3]==0xB3)
- {
- if (Demux_Offset==0)
- {
- Demux_Offset=Buffer_Offset;
- Demux_IntermediateItemFound=false;
- }
- if (ParserIDs[0]==MediaInfo_Parser_Mxf)
- {
- Demux_Offset=Buffer_Size;
- Demux_IntermediateItemFound=true;
- }
- else
- {
- while (Demux_Offset+4<=Buffer_Size)
- {
- //Synchronizing
- while(Demux_Offset+4<=Buffer_Size && (Buffer[Demux_Offset ]!=0x00
- || Buffer[Demux_Offset+1]!=0x00
- || Buffer[Demux_Offset+2]!=0x01))
- {
- Demux_Offset+=2;
- while(Demux_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Demux_Offset+=2;
- if (Demux_Offset>=Buffer_Size || Buffer[Demux_Offset-1]==0x00)
- Demux_Offset--;
- }
- if (Demux_Offset+4>Buffer_Size)
- {
- if (File_Offset+Buffer_Size==File_Size)
- Demux_Offset=Buffer_Size;
- break;
- }
-
- if (Demux_IntermediateItemFound)
- {
- bool MustBreak;
- switch (Buffer[Demux_Offset+3])
- {
- case 0x00 :
- case 0xB3 :
- MustBreak=true; break;
- default :
- Demux_Offset+=3;
- MustBreak=false;
- }
- if (MustBreak)
- break; //while() loop
- }
- else
- {
- if (!Buffer[Demux_Offset+3])
- Demux_IntermediateItemFound=true;
- }
-
- Demux_Offset++;
- }
-
- if (Demux_Offset+4>Buffer_Size && File_Offset+Buffer_Size!=File_Size)
- return false; //No complete frame
- }
-
- bool RandomAccess=Buffer[Buffer_Offset+3]==0xB3;
- if (!Status[IsAccepted])
- {
- if (Config->Demux_EventWasSent)
- return false;
- File_Mpegv* MI=new File_Mpegv;
- Open_Buffer_Init(MI);
- Open_Buffer_Continue(MI, Buffer, Buffer_Size);
- bool IsOk=MI->Status[IsAccepted];
- delete MI;
- if (!IsOk)
- return false;
- }
- if (IFrame_IsParsed || RandomAccess)
- Demux_UnpacketizeContainer_Demux(RandomAccess);
- else
- Demux_UnpacketizeContainer_Demux_Clear();
- }
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpegv::Read_Buffer_Unsynched()
-{
- for (int8u Pos=0x00; Pos<0xB9; Pos++)
- {
- Streams[Pos].Searching_Payload=false;
- Streams[Pos].Searching_TimeStamp_Start=false;
- Streams[Pos].Searching_TimeStamp_End=false;
- }
- Streams[0xB3].Searching_TimeStamp_End=true; //sequence_header
- Streams[0xB8].Searching_TimeStamp_End=true; //group_start
- Time_End_Seconds=Error;
- Time_End_Frames=(int8u)-1;
- RefFramesCount=0;
- sequence_header_IsParsed=false;
- group_start_IsParsed=false;
- PTS_LastIFrame=(int64u)-1;
- IFrame_IsParsed=false;
- picture_coding_types_Current.clear();
- #if MEDIAINFO_IBI
- Ibi_SliceParsed=true;
- #endif //MEDIAINFO_IBI
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- {
- macroblock_x_PerFrame=0;
- macroblock_y_PerFrame=0;
- }
- #endif //MEDIAINFO_MACROBLOCKS
-
- temporal_reference_Old=(int16u)-1;
- for (size_t Pos=0; Pos<TemporalReference.size(); Pos++)
- delete TemporalReference[Pos]; //TemporalReference[Pos]=NULL;
- TemporalReference.clear();
- TemporalReference_Offset=0;
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- GA94_03_TemporalReference_Offset=0;
- if (GA94_03_Parser)
- GA94_03_Parser->Open_Buffer_Unsynch();
- if (CC___Parser)
- CC___Parser->Open_Buffer_Unsynch();
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #if defined(MEDIAINFO_SCTE20_YES)
- Scte_TemporalReference_Offset=0;
- if (Scte_Parser)
- Scte_Parser->Open_Buffer_Unsynch();
- #endif //defined(MEDIAINFO_SCTE20_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- if (DTG1_Parser)
- DTG1_Parser->Open_Buffer_Unsynch();
- if (GA94_06_Parser)
- GA94_06_Parser->Open_Buffer_Unsynch();
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
- #if defined(MEDIAINFO_CDP_YES)
- if (Cdp_Parser)
- Cdp_Parser->Open_Buffer_Unsynch();
- #endif //defined(MEDIAINFO_CDP_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- if (AfdBarData_Parser)
- AfdBarData_Parser->Open_Buffer_Unsynch();
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
-
- #if defined(MEDIAINFO_ANCILLARY_YES)
- if (Ancillary && *Ancillary && (*Ancillary)->Cdp_Data.empty())
- (*Ancillary)->AspectRatio=0;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
-
- //NextCode
- if (!Status[IsAccepted])
- {
- NextCode_Clear();
- NextCode_Add(0xB3);
- NextCode_Add(0xB8);
- }
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpegv::Header_Parse()
-{
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- //Parsing
- int8u start_code;
- Skip_B3( "synchro");
- Get_B1 (start_code, "start_code");
- if (!Header_Parser_Fill_Size())
- {
- Element_WaitForMoreData();
- return;
- }
-
- //Filling
- Header_Fill_Code(start_code, Ztring().From_CC1(start_code));
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- //Parsing
- int8u start_code=Buffer[Buffer_Offset+3];
- Element_Offset+=4;
- if (!Header_Parser_Fill_Size())
- {
- Element_WaitForMoreData();
- return;
- }
-
- //Filling
- Header_Fill_Code(start_code, Ztring().From_CC1(start_code));
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
-}
-
-//---------------------------------------------------------------------------
-bool File_Mpegv::Header_Parser_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset+4;
- while (Buffer_Offset_Temp+4<=Buffer_Size
- && CC3(Buffer+Buffer_Offset_Temp)!=0x000001)
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer_Offset_Temp>=Buffer_Size || Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
- }
-
- //Must wait more data?
- if (Buffer_Offset_Temp+4>Buffer_Size)
- {
- if (FrameIsAlwaysComplete || File_Offset+Buffer_Size==File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Mpegv::Header_Parser_QuickSearch()
-{
- while ( Buffer_Offset+4<=Buffer_Size
- && Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x01)
- {
- //Getting start_code
- int8u start_code=Buffer[Buffer_Offset+3];
-
- //Searching start or timestamp
- if (Streams[start_code].Searching_Payload
- || Streams[start_code].Searching_TimeStamp_Start
- || Streams[start_code].Searching_TimeStamp_End)
- return true;
-
- #if MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- if (start_code==0xB3) // sequence_header
- {
- //
- Has_sequence_header=true;
- }
- if (start_code==0xB5) // extension_start
- {
- if (Buffer_Offset+5>Buffer_Size)
- return false;
-
- if ((Buffer[Buffer_Offset+4]&0xF0)==0x10) // sequence_extension
- Has_sequence_extension=true;
- }
- #endif // MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
-
- //Synchronizing
- Buffer_Offset+=4;
- Synched=false;
- if (!Synchronize())
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
-
- if (Buffer_Offset+4>Buffer_Size)
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
- }
-
- Trusted_IsNot("MPEG Video, Synchronisation lost");
- return Synchronize();
-}
-
-//---------------------------------------------------------------------------
-void File_Mpegv::Data_Parse()
-{
- //Parsing
- switch (Element_Code)
- {
- case 0x00: picture_start(); break;
- case 0xB0: Skip_XX(Element_Size, "Unknown"); break;
- case 0xB1: Skip_XX(Element_Size, "Unknown"); break;
- case 0xB2: user_data_start(); break;
- case 0xB3: sequence_header(); break;
- case 0xB4: sequence_error(); break;
- case 0xB5: extension_start(); break;
- case 0xB6: Skip_XX(Element_Size, "Unknown"); break;
- case 0xB7: sequence_end(); break;
- case 0xB8: group_start(); break;
- default:
- if (Element_Code>=0x01
- && Element_Code<=0xAF) slice_start();
- else
- Trusted_IsNot("Unattended element");
- }
-}
-
-//***************************************************************************
-// EOF
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Mpegv::Detect_EOF()
-{
- if ((IsSub && Status[IsFilled])
- || (!IsSub && File_Size>SizeToAnalyse_Begin+SizeToAnalyse_End && File_Offset+Buffer_Offset+Element_Offset>SizeToAnalyse_Begin && File_Offset+Buffer_Offset+Element_Offset<File_Size-SizeToAnalyse_End && Config->ParseSpeed<=0.5))
- {
- if (MustExtendParsingDuration && Frame_Count<Frame_Count_Valid
- && !(!IsSub && File_Size>SizeToAnalyse_Begin*10+SizeToAnalyse_End*10 && File_Offset+Buffer_Offset+Element_Offset>SizeToAnalyse_Begin*10 && File_Offset+Buffer_Offset+Element_Offset<File_Size-SizeToAnalyse_End*10))
- {
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES) || defined(MEDIAINFO_SCTE20_YES) || (defined(MEDIAINFO_GXF_YES) && defined(MEDIAINFO_CDP_YES))
- Streams[0x00].Searching_Payload=GA94_03_IsPresent || Cdp_IsPresent;
- Streams[0xB2].Searching_Payload=GA94_03_IsPresent || CC___IsPresent || Scte_IsPresent;
- Streams[0xB3].Searching_Payload=GA94_03_IsPresent || Cdp_IsPresent;
- #endif defined(MEDIAINFO_DTVCCTRANSPORT_YES) || defined(MEDIAINFO_SCTE20_YES) || (defined(MEDIAINFO_GXF_YES) && defined(MEDIAINFO_CDP_YES))
- return;
- }
-
- //
- Time_End_Seconds=Error;
- Time_End_Frames=(int8u)-1;
-
- //Autorisation of other streams
- if (!IsSub)
- Streams[0x00].Searching_TimeStamp_End=false;
-
- //Jumping
- if (!Status[IsFilled])
- Fill("MPEG Video");
-
- if (!IsSub)
- Open_Buffer_Unsynch();
- GoToFromEnd(SizeToAnalyse_End, "MPEG Video");
- EOF_AlreadyDetected=true; //Sometimes called from Filling
- }
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Packet "00"
-void File_Mpegv::picture_start()
-{
- Element_Name("picture_start");
-
- //Coherency
- if (!Status[IsAccepted])
- {
- if (!NextCode_Test())
- return;
- }
-
- //Parsing
- int8u picture_coding_type_Old=picture_coding_type;
- BS_Begin();
- Get_S2 (10, temporal_reference, "temporal_reference");
- Get_S1 ( 3, picture_coding_type, "picture_coding_type"); Param_Info1(Mpegv_picture_coding_type[picture_coding_type]);
- Get_S2 (16, vbv_delay, "vbv_delay");
- if (picture_coding_type==2 || picture_coding_type==3) //P or B
- {
- Skip_S1(1, "full_pel_forward_vector");
- Skip_S1(3, "forward_f_code");
- }
- if (picture_coding_type==3) //B
- {
- Skip_S1(1, "full_pel_backward_vector");
- Skip_S1(3, "backward_f_code");
- }
- bool extra_bit_picture;
- do
- {
- Peek_SB(extra_bit_picture);
- if (extra_bit_picture)
- {
- Skip_S1(1, "extra_bit_picture");
- Skip_S1(8, "extra_information_picture");
- }
- }
- while (extra_bit_picture);
- BS_End();
-
- FILLING_BEGIN();
- if (picture_coding_type==1)
- Frame_Count_LastIFrame=Frame_Count_NotParsedIncluded;
-
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- {
- macroblock_x_PerFrame=0;
- macroblock_y_PerFrame=0;
- }
- #endif //MEDIAINFO_MACROBLOCKS
-
- #if MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- Slices_Count=0;
- #endif // MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- #if MEDIAINFO_EVENTS
- {
- EVENT_BEGIN (Video, SliceInfo, 0)
- Event.FieldPosition=Field_Count;
- Event.SlicePosition=0;
- switch (picture_coding_type)
- {
- case 1 :
- Event.SliceType=0; break;
- case 2 :
- Event.SliceType=1; break;
- case 3 :
- Event.SliceType=2; break;
- default:
- Event.SliceType=(int8u)-1;
- }
- Event.Flags=0;
- EVENT_END ()
- }
- #endif //MEDIAINFO_EVENTS
-
- //Detection of first I-Frame
- if (!IFrame_IsParsed)
- {
- if (picture_coding_type==1 || picture_coding_type==4) //I-Frame or D-Frame
- IFrame_IsParsed=true;
- }
-
- if (Frame_Count_LastIFrame!=(int64u)-1)
- FrameNumber_PresentationOrder=Frame_Count_LastIFrame+temporal_reference;
-
- //Config
- progressive_frame=true;
- picture_structure=3; //Frame is default
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- {
- spatial_temporal_weight_code_table_index=0;
- f_code[0][0]=0;
- f_code[0][1]=0;
- f_code[1][0]=0;
- f_code[1][1]=0;
- sequence_scalable_extension_Present=false;
- frame_pred_frame_dct=false;
- concealment_motion_vectors=false;
- intra_vlc_format=false;
- }
- #endif //MEDIAINFO_MACROBLOCKS
-
- //Temporal reference
- if (TemporalReference_Offset+temporal_reference>=TemporalReference.size())
- TemporalReference.resize(TemporalReference_Offset+temporal_reference+1);
- if (TemporalReference[TemporalReference_Offset+temporal_reference]==NULL)
- TemporalReference[TemporalReference_Offset+temporal_reference]=new temporalreference;
- TemporalReference[TemporalReference_Offset+temporal_reference]->IsValid=true;
-
- //picture_coding_types
- if (picture_coding_type==1) //I-Frame
- {
- if (!picture_coding_types_Current.empty())
- {
- picture_coding_types[picture_coding_types_Current]++;
-
- #if MEDIAINFO_ADVANCED
- // Testing if we must give up
- if (Config_VariableGopDetection_GiveUp && picture_coding_types.size()>1)
- {
- int64u MaxCount=0;
- string MaxCount_type;
- for (std::map<std::string, int64u>::iterator Temp=picture_coding_types.begin(); Temp!=picture_coding_types.end(); ++Temp)
- if (Temp->second>MaxCount)
- {
- MaxCount=Temp->second;
- MaxCount_type=Temp->first;
- }
- int64u Count=0;
- for (std::map<std::string, int64u>::iterator Temp=picture_coding_types.begin(); Temp!=picture_coding_types.end(); ++Temp)
- if (Temp->first!=MaxCount_type)
- Count+=Temp->second;
- if (Count>=Config_VariableGopDetection_Occurences)
- Config->ParseSpeed=0; // Give up
- }
- #endif // MEDIAINFO_ADVANCED
- }
- picture_coding_types_Current='I';
- }
- else if (!picture_coding_types_Current.empty()) //If an I-Frame is already found
- picture_coding_types_Current+=Mpegv_picture_coding_type[picture_coding_type];
-
- //Detecting streams with only I-Frames
- if (picture_coding_type==1 && picture_coding_type_Old==1 && !FirstFieldFound)
- temporal_reference_Old=(int16u)-1; //Resetting temporal_reference_Old
-
- //NextCode
- if (!Status[IsAccepted])
- {
- NextCode_Clear();
- for (int64u Element_Name_Next=0x01; Element_Name_Next<=0xAF; Element_Name_Next++)
- NextCode_Add(Element_Name_Next);
- NextCode_Add(0xB2);
- NextCode_Add(0xB5);
- NextCode_Add(0xB8);
- }
-
- //Autorisation of other streams
- for (int8u Pos=0x01; Pos<=0xAF; Pos++)
- Streams[Pos].Searching_Payload=true;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "01" --> "AF"
-void File_Mpegv::slice_start()
-{
- //Encryption management
- if (CA_system_ID_MustSkipSlices)
- {
- //Is not decodable
- Finish("MPEG Video");
- return;
- }
-
- if (!Status[IsAccepted])
- {
- if (!NextCode_Test())
- return;
- }
- Element_Name("slice_start");
-
- //Parsing
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse && MPEG_Version==2)
- {
- BS_Begin();
-
- bool intra_slice_flag;
- if (0x1000*vertical_size_extension+vertical_size_value>2800) //vertical_size
- Skip_S1(3, "slice_vertical_position_extension");
- if (sequence_scalable_extension_Present)
- Skip_S1(7, "priority_breakpoint");
- Skip_S1(5, "quantiser_scale_code");
- Peek_SB(intra_slice_flag);
- if (intra_slice_flag)
- {
- Skip_SB( "intra_slice_flag");
- Skip_SB( "intra_slice");
- Skip_S1(7, "reserved_bits");
- for (;;)
- {
- bool extra_bit_slice;
- Peek_SB(extra_bit_slice);
- if (extra_bit_slice)
- {
- Skip_S1(8, "extra_information_slice");
- }
- else
- break;
- if (!Data_BS_Remain())
- {
- Trusted_IsNot("extra_bit_slice is missing");
- return;
- }
- }
- }
- Skip_SB( "extra_bit_slice (must be 0)");
-
- macroblock_x=(int64u)-1;
- while (Synched) //Synched: testing if this is still valid
- {
- int8u Remain;
- if (Data_BS_Remain()%8)
- Peek_S1(Data_BS_Remain()%8, Remain);
- else if (Data_Remain())
- Remain=Buffer[Buffer_Offset+(size_t)(Element_Size-Data_Remain())];
- else
- Remain=0;
- if (Remain==0)
- {
- int32u Remain3;
- size_t Bits=Data_BS_Remain();
- if (Bits>23)
- Bits=23;
- Peek_S3((int8u)Bits, Remain3);
- if (Remain3==0)
- break;
- }
- slice_start_macroblock();
- }
-
- if (Data_BS_Remain())
- Skip_BS(Data_BS_Remain(), "padding");
- BS_End();
- }
- else
- #endif //MEDIAINFO_MACROBLOCK
- Skip_XX(Element_Size, "data");
-
- FILLING_BEGIN();
- int64u tc_ToAdd=tc/((progressive_sequence || picture_structure==3)?1:2); //Progressive of Frame
-
- //Timestamp
- if (!TimeCodeIsNotTrustable && group_start_FirstPass && (Time_Begin_Seconds==Error || (Frame_Count<16 && Time_Current_Seconds*FrameRate+Time_Current_Frames+temporal_reference<Time_Begin_Seconds*FrameRate+Time_Begin_Frames))) //Accepting a lower time code at the beginning of the stream
- {
- Time_Begin_Seconds=Time_Current_Seconds;
- Time_Begin_Frames =Time_Current_Frames+(int8u)temporal_reference;
- }
- if (!TimeCodeIsNotTrustable && (Time_Current_Seconds<Time_Begin_Seconds || (Time_Current_Seconds==Time_Begin_Seconds && Time_Current_Frames+(int8u)temporal_reference<Time_Begin_Frames)))
- {
- //Time code loop
- TimeCodeIsNotTrustable=true;
- Time_End_Seconds=(size_t)-1;
- }
- if (!TimeCodeIsNotTrustable && (picture_coding_type==1 || picture_coding_type==2)) //IFrame or PFrame
- {
- Time_End_Seconds=Time_Current_Seconds;
- Time_End_Frames =Time_Current_Frames+(int8u)temporal_reference;
- }
-
- if (temporal_reference==temporal_reference_Old)
- {
- Frame_Count--;
- if (IFrame_IsParsed && Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded--;
- Frame_Count_InThisBlock--;
- if (FrameInfo.DTS!=(int64u)-1)
- FrameInfo.DTS-=tc_ToAdd;
- if (FrameInfo.PTS!=(int64u)-1)
- FrameInfo.PTS-=tc_ToAdd;
- }
- else
- {
- temporal_reference_Old=temporal_reference;
- if (temporal_reference_Max<temporal_reference)
- temporal_reference_Max=temporal_reference;
- }
-
- if (picture_coding_type==1) //IFrame
- {
- temporal_reference_LastIFrame=temporal_reference;
- PTS_LastIFrame=FrameInfo.PTS;
- IFrame_Count++;
- }
- if (PTS_LastIFrame!=(int64u)-1)
- {
- FrameInfo.PTS=PTS_LastIFrame+(temporal_reference-temporal_reference_LastIFrame)*tc;
- if ((PTS_Begin==(int64u)-1 && picture_coding_type==1) //IFrame
- || (IFrame_Count<2 && group_start_IsParsed && group_start_closed_gop && FrameInfo.PTS<PTS_Begin))
- PTS_Begin=FrameInfo.PTS;
- }
-
- //Info
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- Element_Info1(__T("Frame (decoding order) ")+Ztring::ToZtring(Frame_Count));
- if (Frame_Count_LastIFrame!=(int64u)-1)
- Element_Info1(__T("Frame (presentation order) ")+Ztring::ToZtring(Frame_Count_LastIFrame+temporal_reference));
- Element_Info1(__T("picture_coding_type ")+Ztring().From_Local(Mpegv_picture_coding_type[picture_coding_type]));
- Element_Info1(__T("temporal_reference ")+Ztring::ToZtring(temporal_reference));
- if (FrameInfo.PTS!=(int64u)-1)
- Element_Info1(__T("PTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/1000000)));
- if (FrameInfo.DTS!=(int64u)-1)
- Element_Info1(__T("DTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.DTS)/1000000)));
- if (Time_End_Seconds!=Error)
- {
- int64u Time_End =Time_End_Seconds *1000;
- if (FrameRate)
- Time_End +=float32_int32s((Time_Current_Frames+temporal_reference)*1000/FrameRate);
- size_t Hours =(size_t) Time_End/60/60/1000;
- size_t Minutes=(size_t)(Time_End-(Hours*60*60*1000))/60/1000;
- size_t Seconds=(size_t)(Time_End-(Hours*60*60*1000)-(Minutes*60*1000))/1000;
- size_t Milli =(size_t)(Time_End-(Hours*60*60*1000)-(Minutes*60*1000)-(Seconds*1000));
-
- Ztring Time;
- Time+=Ztring::ToZtring(Hours);
- Time+=__T(':');
- Time+=Ztring::ToZtring(Minutes);
- Time+=__T(':');
- Time+=Ztring::ToZtring(Seconds);
- if (FrameRate!=0)
- {
- Time+=__T('.');
- Time+=Ztring::ToZtring(Milli);
- }
- Element_Info1(__T("time_code ")+Time);
- }
- }
- #endif //MEDIAINFO_TRACE
-
- //CDP
- #if defined(MEDIAINFO_CDP_YES)
- if (Ancillary)
- {
- Cdp_IsPresent=true;
- MustExtendParsingDuration=true;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
-
- Element_Trace_Begin1("CDP");
- if ((*Ancillary)==NULL)
- (*Ancillary)=new File_Ancillary();
- (*Ancillary)->AspectRatio=MPEG_Version==1?Mpegv_aspect_ratio1[aspect_ratio_information]:Mpegv_aspect_ratio2[aspect_ratio_information];
- (*Ancillary)->FrameRate=((float)(Mpegv_frame_rate[frame_rate_code] * (frame_rate_extension_n + 1)) / (float)(frame_rate_extension_d + 1));
- if ((*Ancillary)->PTS_DTS_Needed)
- (*Ancillary)->FrameInfo.DTS=FrameInfo.DTS;
- if ((*Ancillary)->Status[IsAccepted]) //In order to test if there is a parser using ancillary data
- Open_Buffer_Continue((*Ancillary), Buffer+Buffer_Offset, 0);
- Element_Trace_End0();
- }
- #endif //defined(MEDIAINFO_CDP_YES)
-
- //Active Format Description & Bar Data
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- if (Ancillary && *Ancillary && !(*Ancillary)->AfdBarData_Data.empty())
- {
- Element_Trace_Begin1("Active Format Description & Bar Data");
-
- //Parsing
- if (AfdBarData_Parser==NULL)
- {
- AfdBarData_Parser=new File_AfdBarData;
- Open_Buffer_Init(AfdBarData_Parser);
- ((File_AfdBarData*)AfdBarData_Parser)->Format=File_AfdBarData::Format_S2016_3;
- }
- if (AfdBarData_Parser->PTS_DTS_Needed)
- AfdBarData_Parser->FrameInfo.DTS=FrameInfo.DTS;
- if (!AfdBarData_Parser->Status[IsFinished])
- Open_Buffer_Continue(AfdBarData_Parser, (*Ancillary)->AfdBarData_Data[0]->Data, (*Ancillary)->AfdBarData_Data[0]->Size);
-
- //Removing data from stack
- delete (*Ancillary)->AfdBarData_Data[0]; //(*Ancillary)->AfdBarData_Data[0]=NULL;
- (*Ancillary)->AfdBarData_Data.erase((*Ancillary)->AfdBarData_Data.begin());
-
- Element_Trace_End0();
- }
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
-
- //Counting
- if (!MustExtendParsingDuration && File_Offset+Buffer_Offset+Element_Size==File_Size)
- Frame_Count_Valid=Frame_Count; //Finish frames in case of there are less than Frame_Count_Valid frames
- if (!TimeCodeIsNotTrustable && (picture_coding_type==1 || picture_coding_type==2)) //IFrame or PFrame
- {
- Time_End_Frames++; //One frame
- if (progressive_sequence && repeat_first_field)
- {
- Time_End_Frames++; //Frame repeated a second time
- if (top_field_first)
- Time_End_Frames++; //Frame repeated a third time
- }
- }
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (IFrame_IsParsed && Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (!(progressive_sequence || picture_structure==3))
- {
- Field_Count++;
- Field_Count_InThisBlock++;
- }
- if (picture_coding_type==3)
- BVOP_Count++;
- else
- BVOPsSinceLastRefFrames=0;
- if (RefFramesCount<2 && (picture_coding_type==1 || picture_coding_type==2))
- RefFramesCount++;
- if (repeat_first_field)
- {
- if (progressive_sequence)
- {
- tc_ToAdd+=tc;
- if (top_field_first)
- tc_ToAdd+=tc;
- }
- else
- tc_ToAdd+=tc/2;
- }
- if (FrameInfo.DTS!=(int64u)-1)
- {
- FrameInfo.DTS+=tc_ToAdd;
- if (DTS_End<FrameInfo.DTS)
- DTS_End=FrameInfo.DTS;
- }
- if (FrameInfo.PTS!=(int64u)-1)
- {
- if (FrameInfo.PTS+tc_ToAdd>PTS_End || (PTS_End>1000000000 && FrameInfo.PTS+tc_ToAdd<=PTS_End-1000000000)) //More than current PTS_End or less than current PTS_End minus 1 second (there is a problem?)
- {
- PTS_End=FrameInfo.PTS+tc_ToAdd;
- PTS_End_temporal_reference=temporal_reference;
- }
- if (low_delay)
- FrameInfo.PTS+=tc_ToAdd;
- else
- FrameInfo.PTS=(int64u)-1; //With repeat_first_field option, it is impossible to know what is the next PTS
- }
-
- //NextCode
- if (!Status[IsAccepted])
- {
- NextCode_Clear();
- NextCode_Add(0x00);
- NextCode_Add(0xB3);
- NextCode_Add(0xB8);
- }
-
- //Autorisation of other streams
- #if MEDIAINFO_MACROBLOCKS
- if (!Macroblocks_Parse)
- #endif //MEDIAINFO_MACROBLOCKS
- for (int8u Pos=0x01; Pos<=0xAF; Pos++)
- Streams[Pos].Searching_Payload=false;
-
- //Filling only if not already done
- if (!Status[IsAccepted])
- Accept("MPEG Video");
- if (!MustExtendParsingDuration && IFrame_Count==8)
- Frame_Count_Valid=Frame_Count; //We have enough frames
- if (!Status[IsFilled] && Frame_Count>=Frame_Count_Valid)
- {
- Fill("MPEG Video");
- if (File_Size==(int64u)-1)
- Finish("MPEG Video");
- else if (!IsSub && 2*(File_Offset+Buffer_Size+SizeToAnalyse_End)<File_Size && Config->ParseSpeed<1.0)
- {
- Open_Buffer_Unsynch();
- GoToFromEnd(SizeToAnalyse_End);
- }
- }
-
- //Skipping slices (if already unpacketized)
- #if MEDIAINFO_DEMUX
- if (Demux_UnpacketizeContainer && Buffer_TotalBytes+Buffer_Offset<Demux_TotalBytes
- #if MEDIAINFO_MACROBLOCKS
- && !Macroblocks_Parse
- #endif //MEDIAINFO_MACROBLOCKS
- )
- {
- Element_Offset=Demux_TotalBytes-(Buffer_TotalBytes+Buffer_Offset);
- }
- #endif //MEDIAINFO_DEMUX
-
- #if MEDIAINFO_IBI
- Ibi_SliceParsed=true;
- #endif //MEDIAINFO_IBI
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- {
- macroblock_x++;
- Element_Info1(Ztring::ToZtring(macroblock_x)+__T(" macroblocks"));
- macroblock_x_PerFrame+=macroblock_x;
- macroblock_y_PerFrame++;
- }
- #endif //MEDIAINFO_MACROBLOCKS
-
- #if MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- if (Slices_Count)
- return;
- Slices_Count++;
-
- //sequence_header
- if (picture_coding_type==1 && (!Has_sequence_header || !Has_sequence_extension))
- {
- #if MEDIAINFO_ADVANCED
- if (!InitDataNotRepeated_Optional && !Has_sequence_header) //Currently we test only sequence_header
- {
- InitDataNotRepeated++;
-
- //Testing if we must give up
- if (Config_InitDataNotRepeated_GiveUp && InitDataNotRepeated>=Config_InitDataNotRepeated_Occurences)
- Config->ParseSpeed=0; // Give up
- }
- #endif // MEDIAINFO_ADVANCED
- }
- #endif // MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
-
- #if MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- //Packets
- Has_sequence_header=false;
- Has_sequence_extension=false;
- #endif // MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet Packet "01" --> "AF", slice_start, macroblock
-#if MEDIAINFO_MACROBLOCKS
-enum Mpegv_macroblock_type_config //bitwise
-{
- spatial_temporal_weight_code_flag =0x01,
- macroblock_intra =0x02,
- macroblock_pattern =0x04,
- macroblock_motion_backward =0x08,
- macroblock_motion_forward =0x10,
- macroblock_quant =0x20,
-};
-void File_Mpegv::slice_start_macroblock()
-{
- frame_motion_type=(int8u)-1;
- spatial_temporal_weight_code=0;
-
- Element_Trace_Begin1("macroblock");
-
- size_t macroblock_address_increment;
- do
- {
- Get_VL(macroblock_address_increment_Vlc, macroblock_address_increment, "macroblock_address_increment");
- Element_Info1(__T("macroblock_address_increment=")+Ztring::ToZtring(Mpegv_macroblock_address_increment[macroblock_address_increment].mapped_to3));
- if (macroblock_x!=(int64u)-1)
- macroblock_x+=Mpegv_macroblock_address_increment[macroblock_address_increment].mapped_to3;
- }
- while (Mpegv_macroblock_address_increment[macroblock_address_increment].mapped_to1==2); //Escape code
- if (macroblock_x==(int64u)-1)
- macroblock_x=0;
- Element_Info1(__T("macroblock_x=")+Ztring::ToZtring(macroblock_x));
- Element_Trace_Begin1("macroblock_modes");
- vlc_fast* macroblock_type_X;
- switch(picture_coding_type)
- {
- case 1: macroblock_type_X=&macroblock_type_I; break;
- case 2: macroblock_type_X=&macroblock_type_P; break;
- case 3: macroblock_type_X=&macroblock_type_B; break;
- default : Element_DoNotTrust("Wrong picture_coding_type");
- Element_Trace_End0();
- Element_Trace_End0();
- return;
- }
- size_t macroblock_type_offset;
- Get_VL(*macroblock_type_X, macroblock_type_offset, "macroblock_type");
- macroblock_type=macroblock_type_X->Vlc[macroblock_type_offset].mapped_to3;
- if (!Synched)
- {
- BS_End();
- Element_Offset=Element_Size;
- return;
- }
- Element_Info1(__T("macroblock_quant=")+Ztring::ToZtring(macroblock_type&macroblock_quant));
- Element_Info1(__T("macroblock_motion_forward=")+Ztring::ToZtring(macroblock_type&macroblock_motion_forward));
- Element_Info1(__T("macroblock_motion_backward=")+Ztring::ToZtring(macroblock_type&macroblock_motion_backward));
- Element_Info1(__T("macroblock_pattern=")+Ztring::ToZtring(macroblock_type&macroblock_pattern));
- Element_Info1(__T("macroblock_intra=")+Ztring::ToZtring(macroblock_type&macroblock_intra));
- Element_Info1(__T("spatial_temporal_weight_code_flag=")+Ztring::ToZtring(macroblock_type&spatial_temporal_weight_code_flag));
- if (macroblock_type&spatial_temporal_weight_code_flag
- && spatial_temporal_weight_code_table_index)
- Get_S1 (2, spatial_temporal_weight_code, "spatial_temporal_weight_code");
- if (macroblock_type&macroblock_intra
- && concealment_motion_vectors)
- frame_motion_type=2;
- if (macroblock_type&macroblock_motion_forward
- || macroblock_type&macroblock_motion_backward)
- {
- if (picture_structure==3) //Frame
- {
- if (!frame_pred_frame_dct)
- Get_S1(2, frame_motion_type, "frame_motion_type");
- else
- frame_motion_type=2;
- }
- else
- Get_S1 (2, field_motion_type, "field_motion_type");
- }
- if (picture_structure==3 //Frame
- && !frame_pred_frame_dct
- && (macroblock_type&macroblock_intra
- || macroblock_type&macroblock_pattern))
- Skip_SB( "dct_type");
- Element_Trace_End0();
- if (macroblock_type&macroblock_quant)
- Skip_S1(5, "quantiser_scale_code");
- if (macroblock_type&macroblock_motion_forward
- || (macroblock_type&macroblock_intra
- && concealment_motion_vectors))
- slice_start_macroblock_motion_vectors(false);
- if (macroblock_type&macroblock_motion_backward)
- slice_start_macroblock_motion_vectors(true);
- if (macroblock_type&macroblock_intra
- && concealment_motion_vectors)
- Mark_1();
- if (macroblock_type&macroblock_pattern)
- slice_start_macroblock_coded_block_pattern();
- for (int8u i=0; i<block_count; i++)
- slice_start_macroblock_block(i);
- Element_Trace_End0();
-}
-#endif //MEDIAINFO_MACROBLOCKS
-
-//---------------------------------------------------------------------------
-// Packet Packet "01" --> "AF", slice_start, macroblock, motion_vectors
-#if MEDIAINFO_MACROBLOCKS
-void File_Mpegv::slice_start_macroblock_motion_vectors(bool s)
-{
- Element_Trace_Begin1("motion_vectors");
- int8u motion_vector_count;
- switch (frame_motion_type)
- {
- case 1 :
- switch (spatial_temporal_weight_code)
- {
- case 0 :
- case 1 :
- motion_vector_count=2;
- break;
- case 2 :
- case 3 :
- motion_vector_count=1;
- break;
- default: Trusted_IsNot("spatial_temporal_weight_code problem");
- Element_Trace_End0();
- return;
- }
- break;
- case 2 :
- motion_vector_count=1;
- break;
- case 3 :
- switch (spatial_temporal_weight_code)
- {
- case 1 :
- Trusted_IsNot("spatial_temporal_weight_code problem");
- Element_Trace_End0();
- return;
- default:
- motion_vector_count=1;
- break;
- }
- break;
- default : Trusted_IsNot("frame_motion_type problem");
- Element_Trace_End0();
- return;
- }
- if (motion_vector_count==1)
- {
- if (!(picture_structure==3 //Frame
- && frame_motion_type==2) //mv_format==Frame
- && frame_motion_type!=3) //dmv!=1
- Skip_SB( "motion_vertical_field_select[0][s]");
- slice_start_macroblock_motion_vectors_motion_vector(false, s);
- }
- else
- {
- Skip_SB( "motion_vertical_field_select[0][s]");
- slice_start_macroblock_motion_vectors_motion_vector(false, s);
- Skip_SB( "motion_vertical_field_select[1][s]");
- slice_start_macroblock_motion_vectors_motion_vector(true, s);
- }
- Element_Trace_End0();
-}
-#endif //MEDIAINFO_MACROBLOCKS
-
-//---------------------------------------------------------------------------
-// Packet Packet "01" --> "AF", slice_start, macroblock, motion_vectors, motion_vector
-#if MEDIAINFO_MACROBLOCKS
-void File_Mpegv::slice_start_macroblock_motion_vectors_motion_vector(bool r, bool s)
-{
- Element_Trace_Begin1("motion_vector");
- size_t motion_code_;
-
- Get_VL(motion_code, motion_code_, "motion_code[r][s][0]"); Param_Info1(Mpegv_motion_code[motion_code_].mapped_to3);
- if (Mpegv_motion_code[motion_code_].mapped_to3)
- Skip_SB( "motion_code[r][s][0] sign");
- if (f_code[s][0]>1 && Mpegv_motion_code[motion_code_].mapped_to3)
- Skip_S1(f_code[s][0]-1, "motion_residual[r][s][0]");
- if (frame_motion_type==3) //dmv==1
- {
- Info_VL(dmvector, dmvector_, "dmvector[0]"); Param_Info1(Mpegv_dmvector[dmvector_].mapped_to3);
- }
-
- Get_VL(motion_code, motion_code_, "motion_code[r][s][1]"); Param_Info1(Mpegv_motion_code[motion_code_].mapped_to3);
- if (Mpegv_motion_code[motion_code_].mapped_to3)
- Skip_SB( "motion_code[r][s][1] sign");
- if (f_code[s][1]>1 && Mpegv_motion_code[motion_code_].mapped_to3)
- Skip_S1(f_code[s][1]-1, "motion_residual[r][s][1]");
- if (frame_motion_type==3) //dmv==1
- {
- Info_VL(dmvector, dmvector_, "dmvector[1]"); Param_Info1(Mpegv_dmvector[dmvector_].mapped_to3);
- }
-
- Element_Trace_End0();
-}
-#endif //MEDIAINFO_MACROBLOCKS
-
-//---------------------------------------------------------------------------
-// Packet Packet "01" --> "AF", slice_start, macroblock, coded_block_pattern
-#if MEDIAINFO_MACROBLOCKS
-void File_Mpegv::slice_start_macroblock_coded_block_pattern()
-{
- Element_Trace_Begin1("coded_block_pattern");
- size_t coded_block_pattern_;
- Get_VL(coded_block_pattern, coded_block_pattern_, "coded_block_pattern_420");
- cbp=Mpegv_coded_block_pattern[coded_block_pattern_].mapped_to3;
- switch (chroma_format)
- {
- case 2 : //4:2:2
- {
- int8u coded_block_pattern_1;
- Get_S1 (2, coded_block_pattern_1, "coded_block_pattern_1");
- cbp<<=2;
- cbp|=coded_block_pattern_1;
- }
- break;
- case 3 : //4:4:4
- {
- int8u coded_block_pattern;
- Get_S1 (8, coded_block_pattern, "coded_block_pattern_1/2");
- cbp<<=8;
- cbp|=coded_block_pattern;
- }
- break;
- default : ;
- }
- Element_Info1(Ztring::ToZtring((int16u)cbp, 2));
- Element_Trace_End0();
-}
-#endif //MEDIAINFO_MACROBLOCKS
-
-//---------------------------------------------------------------------------
-// Packet Packet "01" --> "AF", slice_start, macroblock, block
-#if MEDIAINFO_MACROBLOCKS
-void File_Mpegv::slice_start_macroblock_block(int8u i)
-{
- //pattern_code
- if (!(macroblock_type&macroblock_intra) && !((macroblock_type&macroblock_pattern) && (cbp&(1<<(block_count-1-i)))))
- return;
-
- Element_Trace_Begin1("block"); Element_Info1(i);
- bool IsFirst;
- const vlc* Mpegv_dct_coefficients;
- vlc_fast* Mpegv_dct_coefficients2;
- if (macroblock_type&macroblock_intra)
- {
- IsFirst=false;
- Mpegv_dct_coefficients=intra_vlc_format?Mpegv_dct_coefficients_1:Mpegv_dct_coefficients_0;
- Mpegv_dct_coefficients2=&(intra_vlc_format?dct_coefficients_1:dct_coefficients_0);
- if (i<4)
- {
- size_t dct_dc_size_luminance_;
- Get_VL(dct_dc_size_luminance, dct_dc_size_luminance_, "dct_dc_size_luminance"); Param_Info1(Mpegv_dct_dc_size_luminance[dct_dc_size_luminance_].mapped_to3);
- if (Mpegv_dct_dc_size_luminance[dct_dc_size_luminance_].mapped_to3)
- Skip_S2(Mpegv_dct_dc_size_luminance[dct_dc_size_luminance_].mapped_to3, "dct_dc_differential");
- }
- else
- {
- size_t dct_dc_size_chrominance_;
- Get_VL(dct_dc_size_chrominance, dct_dc_size_chrominance_, "dct_dc_size_chrominance"); Param_Info1(Mpegv_dct_dc_size_chrominance[dct_dc_size_chrominance_].mapped_to3);
- if (Mpegv_dct_dc_size_chrominance[dct_dc_size_chrominance_].mapped_to3)
- Skip_S2((int8u)dct_dc_size_chrominance_, "dct_dc_differential");
- }
- }
- else
- {
- IsFirst=true;
- Mpegv_dct_coefficients=Mpegv_dct_coefficients_0;
- Mpegv_dct_coefficients2=&dct_coefficients_0;
- }
-
- for (;;)
- {
- Element_Trace_Begin1("dct_coefficient");
- size_t dct_coefficient;
- Get_VL(*Mpegv_dct_coefficients2, dct_coefficient, "dct_coefficient");
- switch (Mpegv_dct_coefficients[dct_coefficient].mapped_to1)
- {
- case 1 :
- Element_Trace_End1("End of block");
- Element_Trace_End0();
- return;
- case 2 :
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- Info_S1( 6, Run, "Run"); Element_Info1(Run);
- Info_S2(12, Level, "Level"); Element_Info1(Level-(Level>0x800?4096:0));
- }
- else
- #endif //MEDIAINFO_MACROBLOCKS
- Skip_S3(18, "Run + Level");
- break;
- case 3 :
- if (!IsFirst)
- {
- if (Mpegv_dct_coefficients[dct_coefficient].bit_increment)
- {
- Element_Trace_End1("End of block");
- Element_Trace_End0();
- return;
- }
- Skip_SB( "dct_coefficient sign");
- }
- default:
- Element_Info1(Mpegv_dct_coefficients[dct_coefficient].mapped_to2);
- Element_Info1(Mpegv_dct_coefficients[dct_coefficient].mapped_to3);
- }
- if (IsFirst)
- IsFirst=false;
- Element_Trace_End0();
- }
-}
-#endif //MEDIAINFO_MACROBLOCKS
-
-//---------------------------------------------------------------------------
-// Packet "B2"
-void File_Mpegv::user_data_start()
-{
- Element_Name("user_data_start");
-
- //GA94 stuff
- if (Element_Size>=4)
- {
- int32u GA94_Identifier;
- Peek_B4(GA94_Identifier);
- switch (GA94_Identifier)
- {
- case 0x434301F8 : user_data_start_CC(); return;
- case 0x44544731 : user_data_start_DTG1(); return;
- case 0x47413934 : user_data_start_GA94(); return;
- default : {
- int8u SCTE20_Identifier;
- Peek_B1(SCTE20_Identifier);
- if (SCTE20_Identifier==0x03)
- {
- user_data_start_3();
- return;
- }
- }
- }
- }
-
- //Rejecting junk at the begin
- size_t Library_Start_Offset=0;
- while (Library_Start_Offset+4<=Element_Size)
- {
- bool OK=true;
- for (size_t Pos=0; Pos<4; Pos++)
- {
- if (!((Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x20 && Pos)
- || Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x22
- || Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x27
- || Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x28
- || (Buffer[Buffer_Offset+Library_Start_Offset+Pos]==0x29 && Pos)
- || (Buffer[Buffer_Offset+Library_Start_Offset+Pos]>=0x30
- && Buffer[Buffer_Offset+Library_Start_Offset+Pos]<=0x3F)
- || (Buffer[Buffer_Offset+Library_Start_Offset+Pos]>=0x41
- && Buffer[Buffer_Offset+Library_Start_Offset+Pos]<=0x7D)))
- {
- OK=false;
- break;
- }
- }
- if (OK)
- break;
- Library_Start_Offset++;
- }
- if (Library_Start_Offset+4>Element_Size)
- {
- Skip_XX(Element_Size, "junk");
- return; //No good info
- }
-
- //Accepting good data after junk
- size_t Library_End_Offset=Library_Start_Offset+4;
- while (Library_End_Offset<Element_Size
- && (Buffer[Buffer_Offset+Library_End_Offset]==0x0D
- || Buffer[Buffer_Offset+Library_End_Offset]==0x0A
- || (Buffer[Buffer_Offset+Library_End_Offset]>=0x20 && Buffer[Buffer_Offset+Library_End_Offset]<=0x3F)
- || (Buffer[Buffer_Offset+Library_End_Offset]>=0x41 && Buffer[Buffer_Offset+Library_End_Offset]<=0x7D)))
- Library_End_Offset++;
-
- //Parsing
- Ztring Temp;
- if (Library_Start_Offset>0)
- Skip_XX(Library_Start_Offset, "junk");
- if (Library_End_Offset-Library_Start_Offset)
- Get_Local(Library_End_Offset-Library_Start_Offset, Temp,"data");
- if (Element_Offset<Element_Size)
- Skip_XX(Element_Size-Element_Offset, "junk");
-
- //Cleanup
- while(Temp.size()>3 && Temp[1]==__T('e') && Temp[2]==__T('n') && Temp[3]==__T('c'))
- Temp.erase(0, 1);
- while(Temp.size()>5 && Temp[3]==__T('M') && Temp[4]==__T('P') && Temp[5]==__T('E'))
- Temp.erase(0, 1);
-
- //Cleanup
- while(!Temp.empty() && Temp[0]==__T('0'))
- Temp.erase(0, 1);
-
- FILLING_BEGIN();
- if (!Temp.empty())
- {
- if (Temp.find(__T("build"))==0)
- Library+=Ztring(__T(" "))+Temp;
- else
- Library=Temp;
-
- //Library
- if (Temp.find(__T("Created with Nero"))==0)
- {
- Library_Name=__T("Ahead Nero");
- }
- else if (Library.find(__T("encoded by avi2mpg1 ver "))==0)
- {
- Library_Name=__T("avi2mpg1");
- Library_Version=Library.SubString(__T("encoded by avi2mpg1 ver "), __T(""));
- }
- else if (Library.find(__T("encoded by TMPGEnc (ver. "))==0)
- {
- Library_Name=__T("TMPGEnc");
- Library_Version=Library.SubString(__T("encoded by TMPGEnc (ver. "), __T(")"));
- }
- else if (Library.find(__T("encoded by TMPGEnc 4.0 XPress Version. "))==0)
- {
- Library_Name=__T("TMPGEnc XPress");
- Library_Version=Library.SubString(__T("encoded by TMPGEnc 4.0 XPress Version. "), __T(""));
- }
- else if (Library.find(__T("encoded by TMPGEnc MPEG Editor "))==0)
- {
- Library_Name=__T("TMPGEnc MPEG Editor");
- Library_Version=Library.SubString(__T("Version. "), __T(""));
- }
- else if (Library.find(__T("encoded by TMPGEnc "))==0)
- {
- Library_Name=__T("TMPGEnc");
- Library_Version=Library.SubString(__T("encoded by TMPGEnc "), __T(""));
- }
- else if (Library.find(__T("MPEG Encoder v"))==0)
- {
- Library_Name=__T("MPEG Encoder by Tristan Savatier");
- Library_Version=Library.SubString(__T("MPEG Encoder v"), __T(" by"));
- }
- else
- Library_Name=Library;
-
- }
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B2", CC (From DVD)
-void File_Mpegv::user_data_start_CC()
-{
- Skip_B4( "identifier");
-
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- Element_Info1("DVD Captions");
-
- //Parsing
- #if MEDIAINFO_DEMUX
- Element_Code=0x434301F800000000LL;
- #endif //MEDIAINFO_DEMUX
- if (CC___Parser==NULL)
- {
- CC___IsPresent=true;
- MustExtendParsingDuration=true;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
- CC___Parser=new File_DtvccTransport;
- Open_Buffer_Init(CC___Parser);
- ((File_DtvccTransport*)CC___Parser)->Format=File_DtvccTransport::Format_DVD;
- }
- if (CC___Parser->PTS_DTS_Needed)
- {
- CC___Parser->FrameInfo.PCR=FrameInfo.PCR;
- CC___Parser->FrameInfo.PTS=FrameInfo.PTS;
- CC___Parser->FrameInfo.DTS=FrameInfo.DTS;
- }
- #if MEDIAINFO_DEMUX
- int8u Demux_Level_Save=Demux_Level;
- Demux_Level=8; //Ancillary
- Demux(Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset), ContentType_MainStream);
- Demux_Level=Demux_Level_Save;
- #endif // MEDIAINFO_DEMUX
- Open_Buffer_Continue(CC___Parser, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- Element_Offset=Element_Size;
- #else //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- Skip_XX(Element_Size-Element_Offset, "DVD Captions");
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-}
-
-//---------------------------------------------------------------------------
-// Packet "B2", 0x03 (SCTE20)
-void File_Mpegv::user_data_start_3()
-{
- Skip_B1( "identifier");
-
- #if defined(MEDIAINFO_SCTE20_YES)
- Scte_IsPresent=true;
- MustExtendParsingDuration=true;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
-
- Element_Info1("SCTE 20");
-
- //Coherency
- if (TemporalReference_Offset+temporal_reference>=TemporalReference.size())
- return;
-
- //Purging too old orphelins
- if (Scte_TemporalReference_Offset+8<TemporalReference_Offset+temporal_reference)
- {
- size_t Pos=TemporalReference_Offset+temporal_reference;
- do
- {
- if (TemporalReference[Pos]==NULL || !TemporalReference[Pos]->IsValid || TemporalReference[Pos]->Scte.empty())
- break;
- Pos--;
- }
- while (Pos>0);
- Scte_TemporalReference_Offset=Pos+1;
- }
-
- if (TemporalReference_Offset+temporal_reference>=TemporalReference.size())
- TemporalReference.resize(TemporalReference_Offset+temporal_reference+1);
- if (TemporalReference[TemporalReference_Offset+temporal_reference]==NULL)
- TemporalReference[TemporalReference_Offset+temporal_reference]=new temporalreference;
- temporalreference::buffer_data* BufferData=new temporalreference::buffer_data;
- BufferData->Size=(size_t)(Element_Size-Element_Offset);
- BufferData->Data=new int8u[(size_t)(Element_Size-Element_Offset)];
- std::memcpy(BufferData->Data, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- TemporalReference[TemporalReference_Offset+temporal_reference]->Scte.push_back(BufferData);
- TemporalReference[TemporalReference_Offset+temporal_reference]->Scte_Parsed.push_back(false);
- if (TemporalReference[TemporalReference_Offset+temporal_reference]->Scte_Parsed.size()>=2 && TemporalReference[TemporalReference_Offset+temporal_reference]->Scte_Parsed[TemporalReference[TemporalReference_Offset+temporal_reference]->Scte_Parsed.size()-2] && Scte_TemporalReference_Offset==TemporalReference_Offset+temporal_reference+1)
- Scte_TemporalReference_Offset--;
-
- //Parsing
- Skip_XX(Element_Size-Element_Offset, "SCTE 20 data");
-
- //Parsing Captions after reordering
- bool CanBeParsed=true;
- size_t FirstSize=(size_t)-1;
- for (size_t Scte20_Pos=Scte_TemporalReference_Offset; Scte20_Pos<TemporalReference.size(); Scte20_Pos++)
- {
- if (TemporalReference[Scte20_Pos]==NULL || !TemporalReference[Scte20_Pos]->IsValid || TemporalReference[Scte20_Pos]->Scte.empty())
- CanBeParsed=false; //There is a missing field/frame
- if (CanBeParsed)
- {
- if (FirstSize==(size_t)-1)
- FirstSize=TemporalReference[Scte20_Pos]->Scte.size();
- else if (!progressive_sequence && !TemporalReference[Scte20_Pos]->progressive_frame && TemporalReference[Scte20_Pos]->picture_structure==3 && TemporalReference[Scte20_Pos]->Scte.size()!=FirstSize)
- CanBeParsed=false; //There is a missing field in a frame duo
- }
- }
- if (CanBeParsed)
- {
- for (size_t Scte20_Pos=Scte_TemporalReference_Offset; Scte20_Pos<TemporalReference.size(); Scte20_Pos++)
- {
- Element_Begin1("Reordered SCTE 20");
-
- //Parsing
- #if MEDIAINFO_DEMUX
- Element_Code=0x0000000300000000LL;
- #endif //MEDIAINFO_DEMUX
- if (Scte_Parser==NULL)
- {
- Scte_Parser=new File_Scte20;
- Open_Buffer_Init(Scte_Parser);
- }
- //((File_Scte20*)Scte_Parser)->AspectRatio=MPEG_Version==1?Mpegv_aspect_ratio1[aspect_ratio_information]:Mpegv_aspect_ratio2[aspect_ratio_information];
- ((File_Scte20*)Scte_Parser)->picture_structure=TemporalReference[Scte20_Pos]->picture_structure;
- ((File_Scte20*)Scte_Parser)->progressive_sequence=progressive_sequence;
- ((File_Scte20*)Scte_Parser)->progressive_frame=TemporalReference[Scte20_Pos]->progressive_frame;
- ((File_Scte20*)Scte_Parser)->top_field_first=TemporalReference[Scte20_Pos]->top_field_first;
- ((File_Scte20*)Scte_Parser)->repeat_first_field=TemporalReference[Scte20_Pos]->repeat_first_field;
- for (size_t Pos=0; Pos<TemporalReference[Scte20_Pos]->Scte.size(); Pos++)
- if (!TemporalReference[Scte20_Pos]->Scte_Parsed[Pos])
- {
- if (Scte_Parser->PTS_DTS_Needed)
- {
- Scte_Parser->FrameInfo.PCR=FrameInfo.PCR;
- Scte_Parser->FrameInfo.PTS=FrameInfo.PTS-(TemporalReference.size()-1-Scte20_Pos)*tc;
- Scte_Parser->FrameInfo.DTS=FrameInfo.DTS-(TemporalReference.size()-1-Scte20_Pos)*tc;
- }
- #if MEDIAINFO_DEMUX
- int8u Demux_Level_Save=Demux_Level;
- Demux_Level=8; //Ancillary
- Demux(TemporalReference[Scte20_Pos]->Scte[Pos]->Data, TemporalReference[Scte20_Pos]->Scte[Pos]->Size, ContentType_MainStream);
- Demux_Level=Demux_Level_Save;
- #endif // MEDIAINFO_DEMUX
- Open_Buffer_Continue(Scte_Parser, TemporalReference[Scte20_Pos]->Scte[Pos]->Data, TemporalReference[Scte20_Pos]->Scte[Pos]->Size);
- TemporalReference[Scte20_Pos]->Scte_Parsed[Pos]=true;
- }
-
- Element_End0();
- }
- Scte_TemporalReference_Offset=TemporalReference.size();
- }
- #else //defined(MEDIAINFO_SCTE20_YES)
- Skip_XX(Element_Size-Element_Offset, "SCTE 20 data");
- #endif //defined(MEDIAINFO_SCTE20_YES)
-}
-
-//---------------------------------------------------------------------------
-// Packet "B2", DTG1
-void File_Mpegv::user_data_start_DTG1()
-{
- Skip_B4( "identifier");
-
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- Element_Info1("Active Format Description");
-
- //Parsing
- if (DTG1_Parser==NULL)
- {
- DTG1_Parser=new File_AfdBarData;
- Open_Buffer_Init(DTG1_Parser);
- ((File_AfdBarData*)DTG1_Parser)->Format=File_AfdBarData::Format_A53_4_DTG1;
-
- //Aspect ratio for AFD
- float32 DAR=0;
- if (MPEG_Version==2)
- {
- if (aspect_ratio_information==0)
- ; //Forbidden
- else if (aspect_ratio_information==1)
- DAR=((float32)(0x1000*horizontal_size_extension+horizontal_size_value))/(0x1000*vertical_size_extension+vertical_size_value);
- else if (display_horizontal_size && display_vertical_size)
- {
- if (vertical_size_value && Mpegv_aspect_ratio2[aspect_ratio_information])
- DAR=((float32)(0x1000*horizontal_size_extension+horizontal_size_value))/(0x1000*vertical_size_extension+vertical_size_value)
- *Mpegv_aspect_ratio2[aspect_ratio_information]/((float32)display_horizontal_size/display_vertical_size);
- }
- else if (Mpegv_aspect_ratio2[aspect_ratio_information])
- DAR=Mpegv_aspect_ratio2[aspect_ratio_information];
- }
- else //Version 1
- {
- if (vertical_size_value && Mpegv_aspect_ratio1[aspect_ratio_information])
- DAR=((float32)(0x1000*horizontal_size_extension+horizontal_size_value))/(0x1000*vertical_size_extension+vertical_size_value)/Mpegv_aspect_ratio1[aspect_ratio_information];
- }
- if (DAR>=1.330 && DAR<1.336) ((File_AfdBarData*)DTG1_Parser)->aspect_ratio_FromContainer=0; //4/3
- if (DAR>=1.774 && DAR<1.780) ((File_AfdBarData*)DTG1_Parser)->aspect_ratio_FromContainer=1; //16/9
- }
- if (DTG1_Parser->PTS_DTS_Needed)
- {
- DTG1_Parser->FrameInfo.PCR=FrameInfo.PCR;
- DTG1_Parser->FrameInfo.PTS=FrameInfo.PTS;
- DTG1_Parser->FrameInfo.DTS=FrameInfo.DTS;
- }
- Open_Buffer_Continue(DTG1_Parser, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- Element_Offset=Element_Size;
- #else //defined(MEDIAINFO_AFDBARDATA_YES)
- Skip_XX(Element_Size-Element_Offset, "Active Format Description");
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
-}
-
-//---------------------------------------------------------------------------
-// Packet "B2", GA94
-void File_Mpegv::user_data_start_GA94()
-{
- //Parsing
- int8u user_data_type_code;
- Skip_B4( "GA94_identifier");
- Get_B1 (user_data_type_code, "user_data_type_code");
- switch (user_data_type_code)
- {
- case 0x03 : user_data_start_GA94_03(); break;
- case 0x06 : user_data_start_GA94_06(); break;
- default : Skip_XX(Element_Size-Element_Offset, "GA94_reserved_user_data");
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet "B2", GA94 0x03 (styled captioning)
-void File_Mpegv::user_data_start_GA94_03()
-{
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- GA94_03_IsPresent=true;
- MustExtendParsingDuration=true;
- Buffer_TotalBytes_Fill_Max=(int64u)-1; //Disabling this feature for this format, this is done in the parser
-
- Element_Info1("DTVCC Transport");
-
- //Coherency
- if (TemporalReference_Offset+temporal_reference>=TemporalReference.size())
- return;
-
- //Purging too old orphelins
- if (GA94_03_TemporalReference_Offset+8<TemporalReference_Offset+temporal_reference)
- {
- size_t Pos=TemporalReference_Offset+temporal_reference;
- do
- {
- if (TemporalReference[Pos]==NULL || !TemporalReference[Pos]->IsValid || TemporalReference[Pos]->GA94_03==NULL)
- break;
- Pos--;
- }
- while (Pos>0);
- GA94_03_TemporalReference_Offset=Pos+1;
- }
-
- if (TemporalReference_Offset+temporal_reference>=TemporalReference.size())
- TemporalReference.resize(TemporalReference_Offset+temporal_reference+1);
- if (TemporalReference[TemporalReference_Offset+temporal_reference]==NULL)
- TemporalReference[TemporalReference_Offset+temporal_reference]=new temporalreference;
- if (TemporalReference[TemporalReference_Offset+temporal_reference]->GA94_03==NULL)
- TemporalReference[TemporalReference_Offset+temporal_reference]->GA94_03=new temporalreference::buffer_data;
- TemporalReference[TemporalReference_Offset+temporal_reference]->GA94_03->Size=(size_t)(Element_Size-Element_Offset);
- delete[] TemporalReference[TemporalReference_Offset+temporal_reference]->GA94_03->Data;
- TemporalReference[TemporalReference_Offset+temporal_reference]->GA94_03->Data=new int8u[(size_t)(Element_Size-Element_Offset)];
- std::memcpy(TemporalReference[TemporalReference_Offset+temporal_reference]->GA94_03->Data, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
-
- //Parsing
- Skip_XX(Element_Size-Element_Offset, "CC data");
-
- //Parsing Captions after reordering
- bool CanBeParsed=true;
- for (size_t GA94_03_Pos=GA94_03_TemporalReference_Offset; GA94_03_Pos<TemporalReference.size(); GA94_03_Pos++)
- if (TemporalReference[GA94_03_Pos]==NULL || !TemporalReference[GA94_03_Pos]->IsValid || TemporalReference[GA94_03_Pos]->GA94_03==NULL)
- CanBeParsed=false; //There is a missing field/frame
- if (CanBeParsed)
- {
- for (size_t GA94_03_Pos=GA94_03_TemporalReference_Offset; GA94_03_Pos<TemporalReference.size(); GA94_03_Pos++)
- {
- Element_Begin1("Reordered DTVCC Transport");
-
- //Parsing
- #if MEDIAINFO_DEMUX
- Element_Code=0x4741393400000003LL;
- #endif //MEDIAINFO_DEMUX
- if (GA94_03_Parser==NULL)
- {
- GA94_03_Parser=new File_DtvccTransport;
- Open_Buffer_Init(GA94_03_Parser);
- ((File_DtvccTransport*)GA94_03_Parser)->Format=File_DtvccTransport::Format_A53_4_GA94_03;
- }
- if (GA94_03_Parser->PTS_DTS_Needed)
- {
- GA94_03_Parser->FrameInfo.PCR=FrameInfo.PCR;
- GA94_03_Parser->FrameInfo.PTS=FrameInfo.PTS-(FrameInfo.PTS!=(int64u)-1?((TemporalReference.size()-1-GA94_03_Pos)*tc):0);
- GA94_03_Parser->FrameInfo.DTS=FrameInfo.DTS-(FrameInfo.DTS!=(int64u)-1?((TemporalReference.size()-1-GA94_03_Pos)*tc):0);
- }
- #if MEDIAINFO_DEMUX
- int8u Demux_Level_Save=Demux_Level;
- Demux_Level=8; //Ancillary
- Demux(TemporalReference[GA94_03_Pos]->GA94_03->Data, TemporalReference[GA94_03_Pos]->GA94_03->Size, ContentType_MainStream);
- Demux_Level=Demux_Level_Save;
- #endif // MEDIAINFO_DEMUX
- #if defined(MEDIAINFO_EIA608_YES) || defined(MEDIAINFO_EIA708_YES)
- GA94_03_Parser->ServiceDescriptors=ServiceDescriptors;
- #endif
- ((File_DtvccTransport*)GA94_03_Parser)->AspectRatio=MPEG_Version==1?Mpegv_aspect_ratio1[aspect_ratio_information]:Mpegv_aspect_ratio2[aspect_ratio_information];
- Open_Buffer_Continue(GA94_03_Parser, TemporalReference[GA94_03_Pos]->GA94_03->Data, TemporalReference[GA94_03_Pos]->GA94_03->Size);
-
- Element_End0();
- }
- GA94_03_TemporalReference_Offset=TemporalReference.size();
- }
- #else //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- Skip_XX(Element_Size-Element_Offset, "DTVCC Transport data");
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
-}
-
-//---------------------------------------------------------------------------
-// Packet "B2", GA94 0x06 (bar data)
-void File_Mpegv::user_data_start_GA94_06()
-{
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- Element_Info1("Bar Data");
-
- //Parsing
- if (GA94_06_Parser==NULL)
- {
- GA94_06_Parser=new File_AfdBarData;
- Open_Buffer_Init(GA94_06_Parser);
- ((File_AfdBarData*)GA94_06_Parser)->Format=File_AfdBarData::Format_A53_4_GA94_06;
- }
- if (GA94_06_Parser->PTS_DTS_Needed)
- {
- GA94_06_Parser->FrameInfo.PCR=FrameInfo.PCR;
- GA94_06_Parser->FrameInfo.PTS=FrameInfo.PTS;
- GA94_06_Parser->FrameInfo.DTS=FrameInfo.DTS;
- }
- Open_Buffer_Init(GA94_06_Parser);
- Open_Buffer_Continue(GA94_06_Parser, Buffer+Buffer_Offset+(size_t)Element_Offset, (size_t)(Element_Size-Element_Offset));
- Element_Offset=Element_Size;
- #else //defined(MEDIAINFO_AFDBARDATA_YES)
- Skip_XX(Element_Size-Element_Offset, "Bar Data");
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
-}
-
-//---------------------------------------------------------------------------
-// Packet "B3"
-void File_Mpegv::sequence_header()
-{
- Element_Name("sequence_header");
-
- //Reset
- display_horizontal_size=0;
- display_vertical_size=0;
-
- //Reading
- int32u bit_rate_value_temp;
- BS_Begin();
- Get_S2 (12, horizontal_size_value, "horizontal_size_value");
- Get_S2 (12, vertical_size_value, "vertical_size_value");
- Get_S1 ( 4, aspect_ratio_information, "aspect_ratio_information"); Param_Info1C((vertical_size_value && Mpegv_aspect_ratio1[aspect_ratio_information]), (float)horizontal_size_value/vertical_size_value/Mpegv_aspect_ratio1[aspect_ratio_information]); Param_Info1(Mpegv_aspect_ratio2[aspect_ratio_information]);
- Get_S1 ( 4, frame_rate_code, "frame_rate_code"); Param_Info1(Mpegv_frame_rate[frame_rate_code]);
- Get_S3 (18, bit_rate_value_temp, "bit_rate_value"); Param_Info1(bit_rate_value_temp*400);
- Mark_1 ();
- Get_S2 (10, vbv_buffer_size_value, "vbv_buffer_size_value"); Param_Info2(2*1024*((int32u)vbv_buffer_size_value), " bytes");
- Skip_SB( "constrained_parameters_flag");
- TEST_SB_GET(load_intra_quantiser_matrix, "load_intra_quantiser_matrix");
- bool FillMatrix=Matrix_intra.empty();
- for (size_t Pos=0; Pos<64; Pos++)
- {
- int8u intra_quantiser;
- Get_S1 (8, intra_quantiser, "intra_quantiser");
- if (FillMatrix)
- {
- Ztring Value=Ztring::ToZtring(intra_quantiser, 16);
- if (Value.size()==1)
- Value.insert(0, __T("0"));
- Matrix_intra+=Value;
- }
- }
- TEST_SB_END();
- TEST_SB_GET(load_non_intra_quantiser_matrix, "load_non_intra_quantiser_matrix");
- bool FillMatrix=Matrix_nonintra.empty();
- for (size_t Pos=0; Pos<64; Pos++)
- {
- int8u non_intra_quantiser;
- Get_S1 (8, non_intra_quantiser, "non_intra_quantiser");
- if (FillMatrix)
- {
- Ztring Value=Ztring::ToZtring(non_intra_quantiser, 16);
- if (Value.size()==1)
- Value.insert(0, __T("0"));
- Matrix_nonintra+=Value;
- }
- }
- TEST_SB_END();
- BS_End();
-
- //0x00 at the end
- if (Element_Offset<Element_Size)
- {
- int64u NullBytes_Begin=Element_Size-1;
- while (NullBytes_Begin>Element_Offset && Buffer[Buffer_Offset+(size_t)NullBytes_Begin]==0x00)
- NullBytes_Begin--;
-
- if (NullBytes_Begin==Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Padding");
- }
-
- FILLING_BEGIN_PRECISE();
- temporal_reference_Adapt(); //TODO: this line should not exist but some streams do not have group_start and/or do not start from temporal_reference 0, fast and dirty patch
-
- //Bit_rate
- if (bit_rate_value_IsValid && bit_rate_value_temp!=bit_rate_value)
- bit_rate_value_IsValid=false; //two bit_rate_values, not handled.
- else if (bit_rate_value==0)
- {
- bit_rate_value=bit_rate_value_temp;
- bit_rate_value_IsValid=true;
- }
-
- //NextCode
- if (!Status[IsAccepted])
- {
- NextCode_Clear();
- NextCode_Add(0x00);
- NextCode_Add(0xB2);
- NextCode_Add(0xB5);
- NextCode_Add(0xB8);
- }
-
- //Autorisation of other streams
- Streams[0x00].Searching_Payload=true;
- Streams[0xB2].Searching_Payload=true;
- Streams[0xB5].Searching_Payload=true;
- if (Frame_Count==0)
- Streams[0xB8].Searching_TimeStamp_Start=true;
- Streams[0xB8].Searching_TimeStamp_End=true;
-
- //Temp
- if (Mpegv_frame_rate[frame_rate_code])
- tc=float64_int64s(((float64)1000000000)/Mpegv_frame_rate[frame_rate_code]);
- if (Frame_Count<Frame_Count_Valid)
- {
- FrameRate=Mpegv_frame_rate[frame_rate_code];
- SizeToAnalyse_Begin=((int64u)bit_rate_value)*50*2; //standard delay between TimeStamps is 0.7s, we try 2s to be sure to have at least 2 timestamps (for integrity checking)
- SizeToAnalyse_End=((int64u)bit_rate_value)*50*2; //standard delay between TimeStamps is 0.7s, we try 2s to be sure
- }
-
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- block_count=6; //chroma_format default to 4:2:0
- #endif //MEDIAINFO_MACROBLOCKS
-
- //Setting as OK
- sequence_header_IsParsed=true;
- if (Frame_Count==0 && FrameInfo.DTS==(int64u)-1)
- FrameInfo.DTS=0; //No DTS in container
-
- #if MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- //
- Has_sequence_header=true;
- #endif // MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "B4"
-void File_Mpegv::sequence_error()
-{
- Element_Name("sequence_error");
-}
-
-//---------------------------------------------------------------------------
-// Packet "B5"
-void File_Mpegv::extension_start()
-{
- Element_Name("extension_start");
- MPEG_Version=2; //extension_start only exists in MPEG-2 specs
-
- //Parsing
- int8u extension_start_code_identifier;
- BS_Begin();
- Get_S1 ( 4, extension_start_code_identifier, "extension_start_code_identifier"); Param_Info1(Mpegv_extension_start_code_identifier[extension_start_code_identifier]);
- Element_Info1(Mpegv_extension_start_code_identifier[extension_start_code_identifier]);
-
- switch (extension_start_code_identifier)
- {
- case 1 : //Sequence
- {
- //Parsing
- Peek_SB(profile_and_level_indication_escape);
- if (profile_and_level_indication_escape)
- {
- Get_S1 ( 8, profile_and_level_indication, "profile_and_level_indication"); Param_Info1(Mpegv_profile_and_level_indication(profile_and_level_indication));
- }
- else
- {
- Skip_SB( "profile_and_level_indication_escape");
- Get_S1 ( 3, profile_and_level_indication_profile, "profile_and_level_indication_profile"); Param_Info1(Mpegv_profile_and_level_indication_profile[profile_and_level_indication_profile]);
- Get_S1 ( 4, profile_and_level_indication_level, "profile_and_level_indication_level"); Param_Info1(Mpegv_profile_and_level_indication_level[profile_and_level_indication_level]);
- }
- Get_SB ( progressive_sequence, "progressive_sequence");
- Get_S1 ( 2, chroma_format, "chroma_format"); Param_Info1(Mpegv_Colorimetry_format[chroma_format]);
- Get_S1 ( 2, horizontal_size_extension, "horizontal_size_extension");
- Get_S1 ( 2, vertical_size_extension, "vertical_size_extension");
- Get_S2 (12, bit_rate_extension, "bit_rate_extension");
- Mark_1 ();
- Get_S1 ( 8, vbv_buffer_size_extension, "vbv_buffer_size_extension"); Param_Info2(2*1024*((((int32u)vbv_buffer_size_extension)<<10)+vbv_buffer_size_value), " bytes");
- Get_SB ( low_delay, "low_delay");
- Get_S1 ( 2, frame_rate_extension_n, "frame_rate_extension_n");
- Get_S1 ( 5, frame_rate_extension_d, "frame_rate_extension_d");
- BS_End();
-
- FILLING_BEGIN();
- if (frame_rate_extension_d)
- FrameRate=(float)frame_rate_extension_n/frame_rate_extension_d;
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- block_count=Mpegv_block_count[chroma_format];
- #endif //MEDIAINFO_MACROBLOCKS
-
- #if MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- //
- Has_sequence_extension=true;
- #endif // MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- FILLING_END();
- }
- break;
- case 2 : //Sequence Display
- {
- //Parsing
- Get_S1 ( 3, video_format, "video_format"); Param_Info1(Mpegv_video_format[video_format]);
- TEST_SB_GET ( colour_description, "colour_description");
- Get_S1 (8, colour_primaries, "colour_primaries"); Param_Info1(Mpegv_colour_primaries(colour_primaries));
- Get_S1 (8, transfer_characteristics, "transfer_characteristics"); Param_Info1(Mpegv_transfer_characteristics(transfer_characteristics));
- Get_S1 (8, matrix_coefficients, "matrix_coefficients"); Param_Info1(Mpegv_matrix_coefficients(matrix_coefficients));
- TEST_SB_END();
- Get_S2 (14, display_horizontal_size, "display_horizontal_size");
- Mark_1 ();
- Get_S2 (14, display_vertical_size, "display_vertical_size");
- BS_End();
- }
- break;
- case 5 : //Sequence Scalable Extension
- {
- //Parsing
- Skip_S2(10, "lower_layer_temporal_reference");
- Mark_1();
- Skip_S2(15, "lower_layer_horizontal_offset");
- Mark_1();
- Skip_S2(15, "lower_layer_vertical_offset");
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- {
- sequence_scalable_extension_Present=true;
- Get_S1 ( 2, spatial_temporal_weight_code_table_index, "spatial_temporal_weight_code_table_index");
- }
- else
- #endif //MEDIAINFO_MACROBLOCKS
- Skip_S1( 2, "spatial_temporal_weight_code_table_index");
- Skip_SB( "lower_layer_progressive_frame");
- Skip_SB( "lower_layer_deinterlaced_field_select");
- BS_End();
- }
- break;
- case 8 : //Picture Coding
- {
- //Parsing
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- {
- Get_S1 ( 4, f_code[0][0], "f_code_forward_horizontal");
- Get_S1 ( 4, f_code[0][1], "f_code_forward_vertical");
- Get_S1 ( 4, f_code[1][0], "f_code_backward_horizontal");
- Get_S1 ( 4, f_code[1][1], "f_code_backward_vertical");
- }
- else
- #endif //MEDIAINFO_MACROBLOCKS
- {
- Skip_S1( 4, "f_code_forward_horizontal");
- Skip_S1( 4, "f_code_forward_vertical");
- Skip_S1( 4, "f_code_backward_horizontal");
- Skip_S1( 4, "f_code_backward_vertical");
- }
- Get_S1 ( 2, intra_dc_precision, "intra_dc_precision");
- Get_S1 ( 2, picture_structure, "picture_structure"); Param_Info1(Mpegv_picture_structure[picture_structure]);
- Get_SB ( top_field_first, "top_field_first");
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- {
- Get_SB ( frame_pred_frame_dct, "frame_pred_frame_dct");
- Get_SB ( concealment_motion_vectors, "concealment_motion_vectors");
- }
- else
- #endif //MEDIAINFO_MACROBLOCKS
- {
- Skip_SB( "frame_pred_frame_dct");
- Skip_SB( "concealment_motion_vectors");
- }
- Skip_SB( "q_scale_type");
- #if MEDIAINFO_MACROBLOCKS
- if (Macroblocks_Parse)
- {
- Get_SB ( intra_vlc_format, "intra_vlc_format");
- }
- else
- #endif //MEDIAINFO_MACROBLOCKS
- {
- Skip_SB( "intra_vlc_format");
- }
- Skip_SB( "alternate_scan");
- Get_SB ( repeat_first_field, "repeat_first_field");
- Skip_SB( "chroma_420_type");
- Get_SB ( progressive_frame, "progressive_frame");
- TEST_SB_SKIP( "composite_display_flag");
- Skip_SB( "v_axis");
- Skip_S1( 3, "field_sequence");
- Skip_SB( "sub_carrier");
- Skip_S1( 7, "burst_amplitude");
- Skip_S1( 8, "sub_carrier_phase");
- TEST_SB_END();
- BS_End();
- }
-
- FILLING_BEGIN();
- if (progressive_frame==false)
- {
- if (picture_structure==3) //Frame
- {
- if (top_field_first)
- Interlaced_Top++;
- else
- Interlaced_Bottom++;
- PictureStructure_Frame++;
- FirstFieldFound=false;
- if (TemporalReference_Offset+temporal_reference>=TemporalReference.size())
- TemporalReference.resize(TemporalReference_Offset+temporal_reference+1);
- if (TemporalReference[TemporalReference_Offset+temporal_reference]==NULL)
- TemporalReference[TemporalReference_Offset+temporal_reference]=new temporalreference;
- TemporalReference[TemporalReference_Offset+temporal_reference]->picture_coding_type=picture_coding_type;
- TemporalReference[TemporalReference_Offset+temporal_reference]->progressive_frame=progressive_frame;
- TemporalReference[TemporalReference_Offset+temporal_reference]->picture_structure=picture_structure;
- TemporalReference[TemporalReference_Offset+temporal_reference]->top_field_first=top_field_first;
- TemporalReference[TemporalReference_Offset+temporal_reference]->repeat_first_field=repeat_first_field;
- TemporalReference[TemporalReference_Offset+temporal_reference]->HasPictureCoding=true;
- }
- else //Field
- {
- if (!FirstFieldFound)
- {
- if (picture_structure==1) //-Top
- Interlaced_Top++;
- else //-Bottom
- Interlaced_Bottom++;
- }
- FirstFieldFound=!FirstFieldFound;
- PictureStructure_Field++;
- }
- }
- else
- {
- progressive_frame_Count++;
- if (top_field_first)
- Interlaced_Top++;
- else
- Interlaced_Bottom++;
- PictureStructure_Frame++;
- if (picture_structure==3) //Frame
- {
- if (TemporalReference_Offset+temporal_reference>=TemporalReference.size())
- TemporalReference.resize(TemporalReference_Offset+temporal_reference+1);
- if (TemporalReference[TemporalReference_Offset+temporal_reference]==NULL)
- TemporalReference[TemporalReference_Offset+temporal_reference]=new temporalreference;
- TemporalReference[TemporalReference_Offset+temporal_reference]->picture_coding_type=picture_coding_type;
- TemporalReference[TemporalReference_Offset+temporal_reference]->progressive_frame=progressive_frame;
- TemporalReference[TemporalReference_Offset+temporal_reference]->picture_structure=picture_structure;
- TemporalReference[TemporalReference_Offset+temporal_reference]->top_field_first=top_field_first;
- TemporalReference[TemporalReference_Offset+temporal_reference]->repeat_first_field=repeat_first_field;
- TemporalReference[TemporalReference_Offset+temporal_reference]->HasPictureCoding=true;
- }
- }
- FILLING_END();
- break;
- case 9 : //Picture Spatial Scalable Extension
- {
- //Parsing
- Skip_S1(4, "data");
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "data");
- }
- break;
- case 10 : //Picture Temporal Scalable Extension
- {
- //Parsing
- Skip_S1(4, "data");
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "data");
- }
- break;
- default :
- {
- //Parsing
- Skip_S1(4, "data");
- BS_End();
- Skip_XX(Element_Size-Element_Offset, "data");
- }
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet "B7"
-void File_Mpegv::sequence_end()
-{
- Element_Name("sequence_end");
-
- if (!Status[IsFilled] && sequence_header_IsParsed)
- {
- //End of file, and we have some frames
- Accept("MPEG Video");
- Finish("MPEG Video");
- }
-}
-
-//---------------------------------------------------------------------------
-// Packet "B8"
-void File_Mpegv::group_start()
-{
- if (!Status[IsAccepted])
- {
- if (!NextCode_Test())
- return;
- }
- Element_Name("group_start");
-
- //Reading
- int8u Hours, Minutes, Seconds, Frames;
- bool drop_frame_flag, closed_gop, broken_link;
- #if MEDIAINFO_TRACE
- if (Trace_Activated)
- {
- //Parsing
- BS_Begin();
- Get_SB ( drop_frame_flag, "time_code_drop_frame_flag");
- Get_S1 ( 5, Hours, "time_code_time_code_hours");
- Get_S1 ( 6, Minutes, "time_code_time_code_minutes");
- Mark_1();
- Get_S1 ( 6, Seconds, "time_code_time_code_seconds");
- Get_S1 ( 6, Frames, "time_code_time_code_pictures");
- Get_SB ( closed_gop, "closed_gop");
- Get_SB ( broken_link, "broken_link");
- BS_End();
- Ztring Time;
- Time+=Ztring::ToZtring(Hours);
- Time+=__T(':');
- Time+=Ztring::ToZtring(Minutes);
- Time+=__T(':');
- Time+=Ztring::ToZtring(Seconds);
- if (FrameRate!=0)
- {
- Time+=__T('.');
- Time+=Ztring::ToZtring(Frames*1000/FrameRate, 0);
- }
- Element_Info1(Time);
- }
- else
- {
- #endif //MEDIAINFO_TRACE
- //Parsing
- size_t Buffer_Pos=Buffer_Offset+(size_t)Element_Offset;
- drop_frame_flag = (Buffer[Buffer_Pos ]&0x80)?true:false;
- Hours =((Buffer[Buffer_Pos ]&0x7C)>> 2);
- Minutes =((Buffer[Buffer_Pos ]&0x03)<< 4)
- | ((Buffer[Buffer_Pos+1] )>> 4);
- Seconds =((Buffer[Buffer_Pos+1]&0x07)<< 3)
- | ((Buffer[Buffer_Pos+2] )>> 5);
- Frames =((Buffer[Buffer_Pos+2]&0x1F)<< 1)
- | ((Buffer[Buffer_Pos+3] )>> 7);
- closed_gop = (Buffer[Buffer_Pos+3]&0x40)?true:false;
- broken_link = (Buffer[Buffer_Pos+3]&0x20)?true:false;
- Element_Offset+=4;
- #if MEDIAINFO_TRACE
- }
- #endif //MEDIAINFO_TRACE
-
- FILLING_BEGIN();
- temporal_reference_Adapt();
-
- //NextCode
- if (!Status[IsAccepted])
- {
- NextCode_Clear();
- NextCode_Add(0x00);
- NextCode_Add(0xB2);
- NextCode_Add(0xB5);
- NextCode_Add(0xB8);
- }
-
- if (TimeCodeIsNotTrustable)
- return;
-
- if (Time_Current_Seconds==0 && Time_Current_Frames==0 && Hours==0 && Minutes==0 && Seconds==0 && Frames==0)
- {
- //Time code is always 0
- TimeCodeIsNotTrustable=true;
- Time_End_Seconds=(size_t)-1;
- TimeCode_FirstFrame.clear();
- return;
- }
-
- //Calculating
- Time_Current_Seconds=60*60*Hours+60*Minutes+Seconds;
- Time_Current_Frames =Frames;
-
- if (!group_start_IsParsed)
- group_start_IsParsed=true;
- if (!group_start_FirstPass)
- {
- group_start_FirstPass=true;
- group_start_drop_frame_flag=drop_frame_flag;
- group_start_closed_gop=closed_gop;
- group_start_broken_link=broken_link;
-
- TimeCode_FirstFrame+=('0'+Hours/10);
- TimeCode_FirstFrame+=('0'+Hours%10);
- TimeCode_FirstFrame+=':';
- TimeCode_FirstFrame+=('0'+Minutes/10);
- TimeCode_FirstFrame+=('0'+Minutes%10);
- TimeCode_FirstFrame+=':';
- TimeCode_FirstFrame+=('0'+Seconds/10);
- TimeCode_FirstFrame+=('0'+Seconds%10);
- TimeCode_FirstFrame+=drop_frame_flag?';':':';
- TimeCode_FirstFrame+=('0'+Frames/10);
- TimeCode_FirstFrame+=('0'+Frames%10);
- }
-
- RefFramesCount=0;
-
- //Autorisation of other streams
- if (Searching_TimeStamp_Start_DoneOneTime)
- Streams[0xB8].Searching_TimeStamp_Start=false; //group_start
- else
- Searching_TimeStamp_Start_DoneOneTime=true;
- Streams[0x00].Searching_TimeStamp_End=true; //picture_start
- FILLING_END();
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Packet "B8"
-void File_Mpegv::temporal_reference_Adapt()
-{
- //Temporal reference
- temporal_reference_Old=(int16u)-1;
- temporal_reference_Max=0;
- TemporalReference_Offset=TemporalReference.size();
- if (TemporalReference_Offset>=0x800)
- {
- for (size_t Pos=0; Pos<0x400; Pos++)
- delete TemporalReference[Pos]; //TemporalReference[Pos]=NULL;
- TemporalReference.erase(TemporalReference.begin(), TemporalReference.begin()+0x400);
- if (0x400<TemporalReference_Offset)
- TemporalReference_Offset-=0x400;
- else
- TemporalReference_Offset=0;
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- if (0x400<GA94_03_TemporalReference_Offset)
- GA94_03_TemporalReference_Offset-=0x400;
- else
- GA94_03_TemporalReference_Offset=0;
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #if defined(MEDIAINFO_SCTE20_YES)
- if (0x400<Scte_TemporalReference_Offset)
- Scte_TemporalReference_Offset-=0x400;
- else
- Scte_TemporalReference_Offset=0;
- #endif //defined(MEDIAINFO_SCTE20_YES)
- }
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_MPEGV_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpegv.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpegv.h
deleted file mode 100644
index e39837daf..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Mpegv.h
+++ /dev/null
@@ -1,362 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG Video files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_MpegvH
-#define MediaInfo_MpegvH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#if defined(MEDIAINFO_ANCILLARY_YES)
- #include <MediaInfo/Multiple/File_Ancillary.h>
-#endif //defined(MEDIAINFO_ANCILLARY_YES)
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Mpegv
-//***************************************************************************
-
-class File_Mpegv : public File__Analyze
-{
-public :
- //In
- int8u MPEG_Version;
- int64u Frame_Count_Valid;
- bool FrameIsAlwaysComplete;
- bool TimeCodeIsNotTrustable;
- #if defined(MEDIAINFO_ANCILLARY_YES)
- File_Ancillary** Ancillary;
- #endif //defined(MEDIAINFO_ANCILLARY_YES)
- #if MEDIAINFO_ADVANCED
- bool InitDataNotRepeated_Optional;
- #endif // MEDIAINFO_ADVANCED
-
- //Constructor/Destructor
- File_Mpegv();
- ~File_Mpegv();
-
-private :
- //Streams management
- void Streams_Accept();
- void Streams_Update();
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin() {return FileHeader_Begin_0x000001();}
-
- //Buffer - Synchro
- bool Synchronize() {return Synchronize_0x000001();}
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parser_QuickSearch();
- bool Header_Parser_Fill_Size();
- void Data_Parse();
-
- //EOF
- void Detect_EOF();
-
- //Elements
- void picture_start();
- void slice_start();
- #if MEDIAINFO_MACROBLOCKS
- void slice_start_macroblock();
- void slice_start_macroblock_motion_vectors(bool s);
- void slice_start_macroblock_motion_vectors_motion_vector(bool r, bool s);
- void slice_start_macroblock_coded_block_pattern();
- void slice_start_macroblock_block(int8u i);
- #endif //MEDIAINFO_MACROBLOCKS
- void user_data_start();
- void user_data_start_3();
- void user_data_start_CC();
- void user_data_start_DTG1();
- void user_data_start_GA94();
- void user_data_start_GA94_03();
- void user_data_start_GA94_06();
- void sequence_header();
- void sequence_error();
- void extension_start();
- void sequence_end();
- void group_start();
-
-
- //Helpers
- void temporal_reference_Adapt();
-
- //Streams
- struct stream
- {
- bool Searching_Payload;
- bool Searching_TimeStamp_Start;
- bool Searching_TimeStamp_End;
-
- stream()
- {
- Searching_Payload=false;
- Searching_TimeStamp_Start=false;
- Searching_TimeStamp_End=false;
- }
- };
- std::vector<stream> Streams;
-
- //Temporal reference
- struct temporalreference
- {
- struct buffer_data
- {
- size_t Size;
- int8u* Data;
-
- buffer_data()
- {
- Size=0;
- Data=NULL;
- }
-
- ~buffer_data()
- {
- delete[] Data; //Data=NULL;
- }
- };
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- buffer_data* GA94_03;
- #endif //MEDIAINFO_DTVCCTRANSPORT_YES
- #if defined(MEDIAINFO_SCTE20_YES)
- std::vector<buffer_data*> Scte;
- std::vector<bool> Scte_Parsed;
- #endif //MEDIAINFO_SCTE20_YES
-
- int8u picture_coding_type;
- int8u picture_structure;
-
- bool IsValid;
- bool HasPictureCoding;
-
- bool progressive_frame;
- bool top_field_first;
- bool repeat_first_field;
-
- temporalreference()
- {
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- GA94_03=NULL;
- #endif //MEDIAINFO_DTVCCTRANSPORT_YES
- picture_coding_type=(int8u)-1;
- picture_structure=(int8u)-1;
- IsValid=false;
- HasPictureCoding=false;
- }
-
- ~temporalreference()
- {
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- delete GA94_03; //GA94_03=NULL;
- #endif //MEDIAINFO_DTVCCTRANSPORT_YES
- #if defined(MEDIAINFO_SCTE20_YES)
- for (size_t Pos=0; Pos<Scte.size(); Pos++)
- delete Scte[Pos]; //Scte[Pos]=NULL;
- #endif //MEDIAINFO_SCTE20_YES
- }
- };
- std::vector<temporalreference*> TemporalReference; //per temporal_reference
- size_t TemporalReference_Offset;
- struct text_position
- {
- File__Analyze** Parser;
- size_t StreamPos;
-
- text_position()
- {
- Parser=NULL;
- StreamPos=(size_t)-1;
- }
-
- text_position(File__Analyze* &Parser_)
- {
- Parser=&Parser_;
- StreamPos=0;
- }
- };
- std::vector<text_position> Text_Positions;
- #if defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- File__Analyze* GA94_03_Parser;
- size_t GA94_03_TemporalReference_Offset;
- bool GA94_03_IsPresent;
- File__Analyze* CC___Parser;
- bool CC___IsPresent;
- #endif //defined(MEDIAINFO_DTVCCTRANSPORT_YES)
- #if defined(MEDIAINFO_SCTE20_YES)
- File__Analyze* Scte_Parser;
- size_t Scte_TemporalReference_Offset;
- bool Scte_IsPresent;
- #endif //defined(MEDIAINFO_SCTE20_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- File__Analyze* DTG1_Parser;
- File__Analyze* GA94_06_Parser;
- #endif //defined(MEDIAINFO_AFDBARDATA_YES)
- #if defined(MEDIAINFO_CDP_YES)
- File__Analyze* Cdp_Parser;
- bool Cdp_IsPresent;
- #endif //defined(MEDIAINFO_GXF_YES) && defined(MEDIAINFO_CDP_YES)
- #if defined(MEDIAINFO_AFDBARDATA_YES)
- File__Analyze* AfdBarData_Parser;
- #endif //defined(MEDIAINFO_GXF_YES) && defined(MEDIAINFO_AFDBARDATA_YES)
-
- //Temp
- Ztring Library;
- Ztring Library_Name;
- Ztring Library_Version;
- Ztring Matrix_intra;
- Ztring Matrix_nonintra;
- string TimeCode_FirstFrame;
- size_t BVOP_Count;
- size_t progressive_frame_Count;
- size_t Interlaced_Top;
- size_t Interlaced_Bottom;
- size_t PictureStructure_Field;
- size_t PictureStructure_Frame;
- size_t Time_Current_Seconds;
- size_t Time_Begin_Seconds;
- size_t Time_End_Seconds;
- int64u SizeToAnalyse_Begin; //Total size of a chunk to analyse, it may be changed by the parser
- int64u SizeToAnalyse_End; //Total size of a chunk to analyse, it may be changed by the parser
- int64u Frame_Count_LastIFrame;
- int32u bit_rate_value;
- float32 FrameRate;
- int16u horizontal_size_value;
- int16u vertical_size_value;
- int16u bit_rate_extension;
- int16u temporal_reference;
- int16u temporal_reference_Old;
- int16u temporal_reference_Max;
- int16u display_horizontal_size;
- int16u display_vertical_size;
- int16u vbv_delay;
- int16u vbv_buffer_size_value;
- int8u Time_Current_Frames;
- int8u Time_Begin_Frames;
- int8u Time_End_Frames;
- int8u picture_coding_type;
- int8u aspect_ratio_information;
- int8u frame_rate_code;
- int8u profile_and_level_indication;
- int8u profile_and_level_indication_profile;
- int8u profile_and_level_indication_level;
- int8u chroma_format;
- int8u horizontal_size_extension;
- int8u vertical_size_extension;
- int8u frame_rate_extension_n;
- int8u frame_rate_extension_d;
- int8u video_format;
- int8u colour_primaries;
- int8u transfer_characteristics;
- int8u matrix_coefficients;
- int8u picture_structure;
- int8u vbv_buffer_size_extension;
- int8u intra_dc_precision;
- bool load_intra_quantiser_matrix;
- bool load_non_intra_quantiser_matrix;
- bool progressive_sequence;
- bool progressive_frame;
- bool top_field_first;
- bool repeat_first_field;
- bool FirstFieldFound;
- bool sequence_header_IsParsed;
- bool group_start_IsParsed;
- bool group_start_FirstPass;
- bool group_start_drop_frame_flag;
- bool group_start_closed_gop;
- bool group_start_broken_link;
- bool Searching_TimeStamp_Start_DoneOneTime;
- bool Parsing_End_ForDTS;
- bool bit_rate_value_IsValid;
- bool profile_and_level_indication_escape;
- bool colour_description;
- bool low_delay;
- int8u RefFramesCount;
- int8u BVOPsSinceLastRefFrames;
- int16u temporal_reference_LastIFrame;
- int64u PTS_LastIFrame;
- int16u PTS_End_temporal_reference;
- int64u tc;
- bool IFrame_IsParsed;
- size_t IFrame_Count;
- std::map<std::string, int64u> picture_coding_types; //per picture_coding_type value ("IPBB..."), updated at each I-frame
- std::string picture_coding_types_Current; //Current picture_coding_type value ("IPBB..."), updated at each frame
-
- #if MEDIAINFO_MACROBLOCKS
- int64u macroblock_x;
- int64u macroblock_x_PerFrame;
- int64u macroblock_y_PerFrame;
- int16u cbp;
- int8u frame_motion_type;
- int8u field_motion_type;
- int8u spatial_temporal_weight_code;
- int8u block_count; //Computed from chroma_format
- int8u macroblock_type; //Temp
- int8u spatial_temporal_weight_code_table_index;
- int8u f_code[2][2];
- bool Macroblocks_Parse;
- bool sequence_scalable_extension_Present;
- bool frame_pred_frame_dct;
- bool concealment_motion_vectors;
- bool intra_vlc_format;
- vlc_fast macroblock_address_increment_Vlc;
- vlc_fast dct_dc_size_luminance;
- vlc_fast dct_dc_size_chrominance;
- vlc_fast dct_coefficients_0;
- vlc_fast dct_coefficients_1;
- vlc_fast macroblock_type_I;
- vlc_fast macroblock_type_P;
- vlc_fast macroblock_type_B;
- vlc_fast motion_code;
- vlc_fast dmvector;
- vlc_fast coded_block_pattern;
- #endif //MEDIAINFO_MACROBLOCKS
-
- #if MEDIAINFO_IBI
- bool Ibi_SliceParsed;
- #endif //MEDIAINFO_IBI
-
- #if MEDIAINFO_ADVANCED
- int64u InitDataNotRepeated;
- int64u Config_InitDataNotRepeated_Occurences;
- bool Config_InitDataNotRepeated_GiveUp;
- int64u Config_VariableGopDetection_Occurences;
- bool Config_VariableGopDetection_GiveUp;
- #endif // MEDIAINFO_ADVANCED
-
- #if MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
- size_t Slices_Count;
- bool Has_sequence_header;
- bool Has_sequence_extension;
- #endif // MEDIAINFO_ADVANCED || MEDIAINFO_EVENTS
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_ProRes.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_ProRes.cpp
deleted file mode 100644
index 89e8611a4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_ProRes.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_PRORES_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_ProRes.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Mpegv_colour_primaries(int8u colour_primaries);
-const char* Mpegv_transfer_characteristics(int8u transfer_characteristics);
-const char* Mpegv_matrix_coefficients(int8u matrix_coefficients);
-
-//---------------------------------------------------------------------------
-const char* ProRes_chrominance_factor(int8u chrominance_factor)
-{
- switch (chrominance_factor)
- {
- case 0x02 : return "4:2:2";
- case 0x03 : return "4:4:4";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* ProRes_frame_type_ScanType(int8u frame_type)
-{
- switch (frame_type)
- {
- case 0x00 : return "Progressive";
- case 0x01 :
- case 0x02 : return "Interlaced";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-const char* ProRes_frame_type_ScanOrder(int8u frame_type)
-{
- switch (frame_type)
- {
- case 0x01 : return "TFF";
- case 0x02 : return "BFF";
- default : return "";
- }
-}
-
-//---------------------------------------------------------------------------
-Ztring ProRes_creatorID(int32u creatorID)
-{
- switch (creatorID)
- {
- case 0x61706C30 : return __T("Apple"); //apl0
- case 0x61727269 : return __T("Arnold & Richter Cine Technik"); //arri
- case 0x616A6130 : return __T("AJA Kona Hardware"); //aja0
- default : return Ztring().From_CC4(creatorID);
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_ProRes::File_ProRes()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("ProRes");
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ProRes::Streams_Fill()
-{
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "ProRes");
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_ProRes::Read_Buffer_Continue()
-{
- //Parsing
- int32u Name, creatorID;
- int16u hdrSize, version, frameWidth, frameHeight;
- int8u chrominance_factor, frame_type, primaries, transf_func, colorMatrix;
- bool IsOk=true, luma, chroma;
- Element_Begin1("Header");
- Skip_B4( "Size");
- Get_C4 (Name, "Name");
- Element_End();
- Element_Begin1("Frame header");
- Get_B2 (hdrSize, "hdrSize");
- Get_B2 (version, "version");
- Get_C4 (creatorID, "creatorID");
- Get_B2 (frameWidth, "frameWidth");
- Get_B2 (frameHeight, "frameHeight");
- BS_Begin();
- Get_S1 (2, chrominance_factor, "chrominance factor"); Param_Info1(ProRes_chrominance_factor(chrominance_factor));
- Skip_S1(2, "reserved");
- Get_S1 (2, frame_type, "frame type"); Param_Info1(ProRes_frame_type_ScanType(frame_type)); Param_Info1(ProRes_frame_type_ScanOrder(frame_type));
- Skip_S1(2, "reserved");
- BS_End();
- Skip_B1( "reserved");
- Get_B1 (primaries, "primaries"); Param_Info1(Mpegv_colour_primaries(primaries));
- Get_B1 (transf_func, "transf_func"); Param_Info1(Mpegv_transfer_characteristics(transf_func));
- Get_B1 (colorMatrix, "colorMatrix"); Param_Info1(Mpegv_matrix_coefficients(colorMatrix));
- BS_Begin();
- Skip_S1(4, "src_pix_fmt");
- Skip_S1(4, "alpha_info");
- BS_End();
- Skip_B1( "reserved");
- BS_Begin();
- Skip_S1(6, "reserved");
- Get_SB (luma, "custom luma quant matrix present");
- Get_SB (chroma, "custom chroma quant matrix present");
- BS_End();
- if (luma)
- Skip_XX(64, "QMatLuma");
- if (chroma)
- Skip_XX(64, "QMatChroma");
- Element_End();
- if (Element_Offset!=8+hdrSize)
- IsOk=false;
- for (int8u PictureNumber=0; PictureNumber<(frame_type?2:1); PictureNumber++)
- {
- Element_Begin1("Picture layout");
- int16u total_slices;
- vector<int16u> slices_size;
- Element_Begin1("Picture header");
- int64u pic_hdr_End, pic_data_End;
- int32u pic_data_size;
- int8u pic_hdr_size;
- Get_B1 (pic_hdr_size, "pic_hdr_size");
- if (pic_hdr_size<64)
- {
- Trusted_IsNot("pic_hdr_size");
- Element_End();
- Element_End();
- return;
- }
- pic_hdr_End=Element_Offset+pic_hdr_size/8-((pic_hdr_size%8)?0:1);
- Get_B4 (pic_data_size, "pic_data_size");
- if (pic_data_size<8)
- {
- Trusted_IsNot("pic_data_size");
- Element_End();
- Element_End();
- return;
- }
- pic_data_End=Element_Offset+pic_data_size-5;
- Get_B2 (total_slices, "total_slices");
- BS_Begin();
- Skip_S1(4, "slice_width_factor");
- Skip_S1(4, "slice_height_factor");
- BS_End();
- if (Element_Offset<pic_hdr_End)
- Skip_XX(pic_hdr_End-Element_Offset, "Unknown");
- Element_End();
- Element_Begin1("Slice index table");
- for (int16u Pos=0; Pos<total_slices; Pos++)
- {
- int16u slice_size;
- Get_B2 (slice_size, "slice_size");
- slices_size.push_back(slice_size);
- }
- Element_End();
- for (int16u Pos=0; Pos<slices_size.size(); Pos++)
- {
- Skip_XX(slices_size[Pos], "slice data");
- }
- if (Element_Offset<pic_data_End)
- Skip_XX(pic_data_End-Element_Offset, "Unknown");
- Element_End();
- }
- bool IsZeroes=true;
- for (size_t Pos=(size_t)Element_Offset; Pos<(size_t)Element_Size; Pos++)
- if (Buffer[Buffer_Offset+Pos])
- {
- IsZeroes=false;
- break;
- }
- Skip_XX(Element_Size-Element_Offset, IsZeroes?"Zeroes":"Unknown");
-
- FILLING_BEGIN();
- if (IsOk && Name==0x69637066 && !Status[IsAccepted]) //icpf
- {
- Accept();
- Fill();
-
- Fill(Stream_Video, 0, Video_Format_Version, __T("Version ")+Ztring::ToZtring(version));
- Fill(Stream_Video, 0, Video_Width, frameWidth);
- Fill(Stream_Video, 0, Video_Height, frameHeight);
- Fill(Stream_Video, 0, Video_Encoded_Library, ProRes_creatorID(creatorID));
- Fill(Stream_Video, 0, Video_ChromaSubsampling, ProRes_chrominance_factor(chrominance_factor));
- Fill(Stream_Video, 0, Video_ScanType, ProRes_frame_type_ScanType(frame_type));
- Fill(Stream_Video, 0, Video_ScanOrder, ProRes_frame_type_ScanOrder(frame_type));
- Fill(Stream_Video, 0, Video_colour_description_present, "Yes");
- Fill(Stream_Video, 0, Video_colour_primaries, Mpegv_colour_primaries(primaries));
- Fill(Stream_Video, 0, Video_transfer_characteristics, Mpegv_transfer_characteristics(transf_func));
- Fill(Stream_Video, 0, Video_matrix_coefficients, Mpegv_matrix_coefficients(colorMatrix));
-
- Finish();
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_PRORES_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_ProRes.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_ProRes.h
deleted file mode 100644
index 4fd79d3c8..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_ProRes.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about ProRes files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_ProResH
-#define MediaInfo_File_ProResH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Lagarith
-//***************************************************************************
-
-class File_ProRes : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_ProRes();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Global
- void Read_Buffer_Continue ();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Theora.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Theora.cpp
deleted file mode 100644
index 35af44602..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Theora.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Note : the buffer must be given in ONE call
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_THEORA_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Theora.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Format
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Theora::Header_Parse()
-{
- //Filling
- Header_Fill_Code(0, "Theora");
- Header_Fill_Size(Element_Size);
-}
-
-//---------------------------------------------------------------------------
-void File_Theora::Data_Parse()
-{
- //Parsing
- if (Status[IsAccepted])
- Setup();
- else
- Identification();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Theora::Identification()
-{
- Element_Name("Identification");
-
- //Parsing
- int32u Version, PICW=0, PICH=0, FRN=0, FRD=0, PARN=0, PARD=0, NOMBR=0;
- Skip_B1 ( "Signature");
- Skip_Local(6, "Signature");
- Get_B3 (Version, "Version");
- if ((Version&0x030200)==0x030200) //Version 3.2.x
- {
- Skip_B2( "FMBW");
- Skip_B2( "FMBH");
- Get_B3 (PICW, "PICW");
- Get_B3 (PICH, "PICH");
- Skip_B1( "PICX");
- Skip_B1( "PICY");
- Get_B4 (FRN, "FRN");
- Get_B4 (FRD, "FRD");
- Get_B3 (PARN, "PARN");
- Get_B3 (PARD, "PARD");
- Skip_B1( "CS"); // //0=4:2:0, 2=4:2:2, 3=4:4:4
- Get_B3 (NOMBR, "NOMBR"); //The nominal bitrate of the stream
- BS_Begin();
- Skip_BS( 6, "QUAL"); //The quality hint.
- Skip_BS( 5, "KFGSHIFT");
- Skip_BS( 2, "PF"); //The Pixel Format
- Skip_BS( 3, "Reserved");
- BS_End();
- }
-
- //Filling
- FILLING_BEGIN();
- Accept("Theora");
-
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, StreamPos_Last, Video_Format, "Theora");
- Fill(Stream_Video, StreamPos_Last, Video_Codec, "Theora");
- if ((Version&0x030200)!=0x030200) //Version 3.2.x
- return;
- if (FRN && FRD)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, ((float)FRN)/FRD, 3);
- float PixelRatio=1;
- if (PARN && PARD)
- PixelRatio=((float)PARN)/(float)PARD;
- Fill(Stream_Video, StreamPos_Last, Video_Width, PICW);
- Fill(Stream_Video, StreamPos_Last, Video_Height, PICH);
- Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, ((float)PICW)/((float)PICH)*PixelRatio, 3, true);
- if (NOMBR)
- Fill(Stream_Video, StreamPos_Last, Video_BitRate_Nominal, NOMBR);
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Theora::Setup()
-{
- Element_Name("Setup");
-
- //Parsing
- Skip_XX(Element_Size, "Unknown");
-
- Finish("Theora");
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_THEORA_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Theora.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Theora.h
deleted file mode 100644
index e813cf85d..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Theora.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about Theora files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_File_TheoraH
-#define MediaInfo_File_TheoraH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Theora
-//***************************************************************************
-
-class File_Theora : public File__Analyze
-{
-private :
- //Buffer - Per element
- void Header_Parse();
- void Data_Parse();
-
- //Elements
- void Identification();
- void Setup();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc1.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc1.cpp
deleted file mode 100644
index 69a97c335..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc1.cpp
+++ /dev/null
@@ -1,1222 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_VC1_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Vc1.h"
-#include "ZenLib/BitStream.h"
-#undef FILLING_BEGIN
-#define FILLING_BEGIN() \
- while (Element_Offset<Element_Size && Buffer[Buffer_Offset+(size_t)Element_Offset]==0x00) \
- Element_Offset++; \
- if (Element_Offset!=Element_Size) \
- Trusted_IsNot("Size error"); \
- else if (Element_IsOK()) \
- {
-#include <cmath>
-#if MEDIAINFO_EVENTS
- #include "MediaInfo/MediaInfo_Config_MediaInfo.h"
- #include "MediaInfo/MediaInfo_Events.h"
- #include "MediaInfo/MediaInfo_Events_Internal.h"
-#endif //MEDIAINFO_EVENTS
-#if MEDIAINFO_DEMUX
- #include <cstring>
- #include "base64.h"
-#endif //MEDIAINFO_DEMUX
-using namespace std;
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const char* Vc1_Profile[]=
-{
- "Simple",
- "Main",
- "Complex",
- "Advanced",
-};
-
-//---------------------------------------------------------------------------
-const char* Vc1_ColorimetryFormat[]=
-{
- "",
- "4:2:0",
- "",
- "",
-};
-
-//---------------------------------------------------------------------------
-const float32 Vc1_PixelAspectRatio[]=
-{
- (float32)1, //Reserved
- (float32)1,
- (float32)12/(float32)11,
- (float32)10/(float32)11,
- (float32)16/(float32)11,
- (float32)40/(float32)33,
- (float32)24/(float32)11,
- (float32)20/(float32)11,
- (float32)32/(float32)11,
- (float32)80/(float32)33,
- (float32)18/(float32)11,
- (float32)15/(float32)11,
- (float32)64/(float32)33,
- (float32)160/(float32)99,
- (float32)1, //Reserved
- (float32)1, //Custom
-};
-
-//---------------------------------------------------------------------------
-float32 Vc1_FrameRate_enr(int8u Code)
-{
- switch (Code)
- {
- case 0x01 : return (float32)24000;
- case 0x02 : return (float32)25000;
- case 0x03 : return (float32)30000;
- case 0x04 : return (float32)50000;
- case 0x05 : return (float32)60000;
- case 0x06 : return (float32)48000;
- case 0x07 : return (float32)72000;
- default : return (float32)0;
- }
-}
-
-//---------------------------------------------------------------------------
-float32 Vc1_FrameRate_dr(int8u Code)
-{
- switch (Code)
- {
- case 0x01 : return (float32)1000;
- case 0x02 : return (float32)1001;
- default : return (float32)0;
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Vc1_Type[]=
-{
- "I",
- "P",
- "B",
- "BI",
- "Skipped",
-};
-
-//---------------------------------------------------------------------------
-const char* Vc1_PictureFormat[]=
-{
- "Progressive frame",
- "Interlaced frame",
- "Two interlaced fields",
- "",
-};
-
-//---------------------------------------------------------------------------
-const int8u Vc1_FieldTypeTable[][2]=
-{
- {0, 0},
- {0, 1},
- {1, 0},
- {1, 1},
- {2, 2},
- {2, 3},
- {3, 2},
- {3, 3},
-};
-
-//---------------------------------------------------------------------------
-const File__Analyze::vlc Vc1_ptype[]=
-{
- // macroblock_address_increment
- { 0 , 1 , 0 , 0 , 1 },
- { 2 , 1 , 0 , 0 , 2 },
- { 6 , 1 , 0 , 0 , 0 },
- { 14 , 1 , 0 , 0 , 3 },
- { 15 , 0 , 0 , 0 , 4 },
- VLC_END
-};
-
-//---------------------------------------------------------------------------
-int32u Vc1_bfraction(int8u Size, int32u Value)
-{
- switch (Size)
- {
- case 3 :
- switch (Value)
- {
- case 0x00 : return 0x00;
- case 0x01 : return 0x01;
- case 0x02 : return 0x02;
- case 0x03 : return 0x03;
- case 0x04 : return 0x04;
- case 0x05 : return 0x05;
- case 0x06 : return 0x06;
- default : return (int32u)-1;
- }
- case 7 :
- switch (Value)
- {
- case 0x70 : return 0x70;
- case 0x71 : return 0x71;
- case 0x72 : return 0x72;
- case 0x73 : return 0x73;
- case 0x74 : return 0x74;
- case 0x75 : return 0x75;
- case 0x76 : return 0x76;
- case 0x77 : return 0x77;
- case 0x78 : return 0x78;
- case 0x79 : return 0x79;
- case 0x7A : return 0x7A;
- case 0x7B : return 0x7B;
- case 0x7C : return 0x7C;
- case 0x7D : return 0x7D;
- case 0x7E : return 0x7E;
- case 0x7F : return 0x7F;
- default : return (int32u)-1;
- }
- default: return (int32u)-1;
- }
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Vc1::File_Vc1()
-:File__Analyze()
-{
- //Config
- #if MEDIAINFO_EVENTS
- ParserIDs[0]=MediaInfo_Parser_Vc1;
- StreamIDs_Width[0]=0;
- #endif //MEDIAINFO_EVENTS
- MustSynchronize=true;
- Buffer_TotalBytes_FirstSynched_Max=64*1024;
- PTS_DTS_Needed=true;
- IsRawStream=true;
- Frame_Count_NotParsedIncluded=0;
-
- //In
- Frame_Count_Valid=30;
- FrameIsAlwaysComplete=false;
- From_WMV3=false;
- Only_0D=false;
-
- //Temp
- EntryPoint_Parsed=false;
- FrameRate=0;
- RefFramesCount=0;
-
- #if MEDIAINFO_DEMUX
- InitData_Buffer=NULL;
- InitData_Buffer_Size=0;
- #endif //MEDIAINFO_DEMUX
-}
-
-//---------------------------------------------------------------------------
-File_Vc1::~File_Vc1()
-{
- #if MEDIAINFO_DEMUX
- delete[] InitData_Buffer;
- #endif //MEDIAINFO_DEMUX
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Vc1::Streams_Accept()
-{
- //Filling
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "VC-1");
- Fill(Stream_Video, 0, Video_Codec, From_WMV3?"WMV3":"VC-1"); //For compatibility with the old reaction
- Fill(Stream_Video, 0, Video_BitDepth, 8);
-}
-
-//---------------------------------------------------------------------------
-void File_Vc1::Streams_Fill()
-{
- //Calculating - PixelAspectRatio
- float32 PixelAspectRatio;
- if (AspectRatio!=0x0F)
- PixelAspectRatio=Vc1_PixelAspectRatio[AspectRatio];
- else if (AspectRatioY)
- PixelAspectRatio=((float)AspectRatioX)/((float)AspectRatioY);
- else
- PixelAspectRatio=1; //Unknown
-
- Ztring Profile;
- if (profile!=(int8u)-1)
- Profile=Vc1_Profile[profile];
- if (profile==3 && level!=(int8u)-1)
- Profile+=__T("@L")+Ztring::ToZtring(level);
- Fill(Stream_Video, 0, Video_Format_Profile, Profile);
- Fill(Stream_Video, 0, Video_Codec_Profile, Profile);
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- Fill(Stream_Video, 0, Video_Colorimetry, Vc1_ColorimetryFormat[colordiff_format]);
- if (coded_width && coded_height)
- {
- Fill(Stream_Video, StreamPos_Last, Video_Width, (coded_width+1)*2);
- Fill(Stream_Video, StreamPos_Last, Video_Height, (coded_height+1)*2);
- }
- if (PixelAspectRatio!=0)
- Fill(Stream_Video, 0, Video_PixelAspectRatio, PixelAspectRatio, 3, true);
- if (FrameRate!=0)
- Fill(Stream_Video, StreamPos_Last, Video_FrameRate, FrameRate);
-
- //Interlacement
- if (!interlace || (PictureFormat_Count[1]==0 && PictureFormat_Count[2]==0)) //No interlaced frame/field
- {
- Fill(Stream_Video, 0, Video_ScanType, "Progressive");
- Fill(Stream_Video, 0, Video_Interlacement, "PPF");
- }
- else if (PictureFormat_Count[0]>0) //Interlaced and non interlaced frames/fields
- {
- Fill(Stream_Video, 0, Video_ScanType, "Mixed");
- Fill(Stream_Video, 0, Video_Interlacement, "Mixed");
- }
- else
- {
- Fill(Stream_Video, 0, Video_ScanType, "Interlaced");
- Fill(Stream_Video, 0, Video_Interlacement, "Interlaced");
- }
- if (Frame_Count>0 && interlace)
- Fill(Stream_Video, 0, Video_ScanOrder, Interlaced_Bottom?"BFF":"TFF");
- std::string TempRef;
- for (std::map<int16u, temporalreference>::iterator Temp=TemporalReference.begin(); Temp!=TemporalReference.end(); ++Temp)
- {
- TempRef+=Temp->second.top_field_first?"T":"B";
- TempRef+=Temp->second.repeat_first_field?"3":"2";
- }
- if (TempRef.find('3')!=std::string::npos) //A pulldown maybe is detected
- {
- if (TempRef.find("T2T3B2B3T2T3B2B3")!=std::string::npos
- || TempRef.find("B2B3T2T3B2B3T2T3")!=std::string::npos)
- {
- Fill(Stream_Video, 0, Video_ScanOrder, "2:3 Pulldown", Unlimited, true, true);
- Fill(Stream_Video, 0, Video_FrameRate, FrameRate*24/30, 3, true); //Real framerate
- Fill(Stream_Video, 0, Video_ScanType, "Progressive", Unlimited, true, true);
- Fill(Stream_Video, 0, Video_Interlacement, "PPF", Unlimited, true, true);
- }
- if (TempRef.find("T2T2T2T2T2T2T2T2T2T2T2T3B2B2B2B2B2B2B2B2B2B2B2B3")!=std::string::npos
- || TempRef.find("B2B2B2B2B2B2B2B2B2B2B2B3T2T2T2T2T2T2T2T2T2T2T2T3")!=std::string::npos)
- {
- Fill(Stream_Video, 0, Video_ScanOrder, "2:2:2:2:2:2:2:2:2:2:2:3 Pulldown", Unlimited, true, true);
- Fill(Stream_Video, 0, Video_FrameRate, FrameRate*24/25, 3, true); //Real framerate
- Fill(Stream_Video, 0, Video_ScanType, "Progressive", Unlimited, true, true);
- Fill(Stream_Video, 0, Video_Interlacement, "PPF", Unlimited, true, true);
- }
- }
-
- //Buffer
- for (size_t Pos=0; Pos<hrd_buffers.size(); Pos++)
- Fill(Stream_Video, 0, Video_BufferSize, hrd_buffers[Pos]);
-}
-
-//---------------------------------------------------------------------------
-void File_Vc1::Streams_Finish()
-{
- if (PTS_End>PTS_Begin)
- Fill(Stream_Video, 0, Video_Duration, float64_int64s(((float64)(PTS_End-PTS_Begin))/1000000));
-
- #if MEDIAINFO_IBI
- int64u Numerator=0, Denominator=0;
- if (framerate_present)
- {
- if (framerate_form)
- {
- Numerator=framerateexp+1;
- Denominator=32;
- }
- else if (Vc1_FrameRate_dr(frameratecode_dr))
- {
- Numerator=(int64u)Vc1_FrameRate_enr(frameratecode_enr);
- Denominator=(int64u)Vc1_FrameRate_dr(frameratecode_dr);
- }
- }
- if (Numerator)
- Ibi_Stream_Finish(Numerator, Denominator);
- #endif //MEDIAINFO_IBI
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Vc1::FileHeader_Begin()
-{
- if (!File__Analyze::FileHeader_Begin_0x000001())
- return false;
-
- if (!MustSynchronize)
- {
- Synched_Init();
- Buffer_TotalBytes_FirstSynched+=0;
- File_Offset_FirstSynched=File_Offset;
- }
-
- //All should be OK
- return true;
-}
-
-//***************************************************************************
-// Buffer - Synchro
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Vc1::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+4>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x01)
- {
- Synched=false;
- return true;
- }
-
- //Quick search
- if (!Header_Parser_QuickSearch())
- return false;
-
- #if MEDIAINFO_IBI
- bool RandomAccess=Buffer[Buffer_Offset+3]==0x0F; //SequenceHeader
- if (RandomAccess)
- Ibi_Add();
- #endif //MEDIAINFO_IBI
-
- //We continue
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Vc1::Synched_Init()
-{
- //Count
- Interlaced_Top=0;
- Interlaced_Bottom=0;
- PictureFormat_Count.resize(4);
- if (Frame_Count_NotParsedIncluded==(int64u)-1)
- Frame_Count_NotParsedIncluded=0; //No Frame_Count_NotParsedIncluded in the container
-
- //Temp
- coded_width=0;
- coded_height=0;
- framerateexp=0;
- frameratecode_enr=0;
- frameratecode_dr=0;
- profile=(int8u)-1;
- level=(int8u)-1;
- colordiff_format=1; //Default is 4:2:0
- AspectRatio=0;
- AspectRatioX=0;
- AspectRatioY=0;
- hrd_num_leaky_buckets=0;
- max_b_frames=7; //Default for advanced profile
- interlace=false;
- tfcntrflag=false;
- framerate_present=false;
- framerate_form=false;
- hrd_param_flag=false;
- finterpflag=false;
- rangered=false;
- psf=false;
- pulldown=false;
- panscan_flag=false;
- #if MEDIAINFO_DEMUX
- Demux_IntermediateItemFound=true;
- #endif //MEDIAINFO_DEMUX
-
- TemporalReference_Offset=0;
-
- if (!IsSub)
- FrameInfo.DTS=0;
-
- //Default stream values
- Streams.resize(0x100);
- Streams[0x0F].Searching_Payload=true;
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Vc1::Demux_UnpacketizeContainer_Test()
-{
- if ((Demux_IntermediateItemFound && Buffer[Buffer_Offset+3]==0x0D) || Buffer[Buffer_Offset+3]==0x0F)
- {
- if (Demux_Offset==0)
- {
- Demux_Offset=Buffer_Offset;
- Demux_IntermediateItemFound=false;
- }
- while (Demux_Offset+4<=Buffer_Size)
- {
- //Synchronizing
- while(Demux_Offset+3<=Buffer_Size && (Buffer[Demux_Offset ]!=0x00
- || Buffer[Demux_Offset+1]!=0x00
- || Buffer[Demux_Offset+2]!=0x01))
- {
- Demux_Offset+=2;
- while(Demux_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Demux_Offset+=2;
- if (Demux_Offset>=Buffer_Size || Buffer[Demux_Offset-1]==0x00)
- Demux_Offset--;
- }
-
- if (Demux_Offset+4<=Buffer_Size)
- {
- if (Demux_IntermediateItemFound)
- {
- bool MustBreak;
- switch (Buffer[Demux_Offset+3])
- {
- case 0x0D :
- case 0x0F :
- MustBreak=true; break;
- default :
- Demux_Offset+=3;
- MustBreak=false;
- }
- if (MustBreak)
- break; //while() loop
- }
- else
- {
- if (Buffer[Demux_Offset+3]==0x0D)
- Demux_IntermediateItemFound=true;
- }
- }
- Demux_Offset++;
- }
-
- if (Demux_Offset+4>Buffer_Size && File_Offset+Buffer_Size!=File_Size)
- return false; //No complete frame
-
- if (!Status[IsAccepted])
- {
- Accept("VC-1");
- if (Config->Demux_EventWasSent)
- return false;
- }
-
- //Demux
- #if MEDIAINFO_DEMUX
- if (InitData_Buffer_Size && Buffer[Buffer_Offset+3]==0x0F) //First SequenceHeader
- {
- //Searching begin of frame (after SequenceHeader/EntryPointHeader)
- size_t Header_End=4;
- for (; Header_End<Demux_Offset; Header_End++)
- if (Buffer[Header_End ]==0x00
- && Buffer[Header_End+1]==0x00
- && Buffer[Header_End+2]==0x01
- && Buffer[Header_End+2]==0x0D)
- break;
-
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- break; //Will be done in the first demux event
- case 1 : //In field
- {
- std::string Data_Raw((const char*)(Buffer+Buffer_Offset), (size_t)(Header_End-Buffer_Offset));
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(Stream_Video, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[Stream_Video][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
-
- delete[] InitData_Buffer; InitData_Buffer=NULL;
- InitData_Buffer_Size=0;
- }
- #endif //MEDIAINFO_DEMUX
-
- Demux_UnpacketizeContainer_Demux(Buffer[Buffer_Offset+3]==0x0F);
- }
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Vc1::Read_Buffer_Unsynched()
-{
- RefFramesCount=0;
- #if MEDIAINFO_DEMUX
- Demux_IntermediateItemFound=true;
- #endif //MEDIAINFO_DEMUX
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Vc1::Header_Parse()
-{
- //Specific
- if (From_WMV3 || Only_0D)
- {
- Header_Fill_Size(Buffer_Size);
- Header_Fill_Code(From_WMV3?0x0F:0x0D, Ztring().From_CC1(From_WMV3?0x0F:0x0D));
- return;
- }
-
- //Parsing
- Skip_B3( "synchro");
- Get_B1 (start_code, "start_code");
- if (!Header_Parser_Fill_Size())
- {
- Element_WaitForMoreData();
- return;
- }
-
- //Filling
- Header_Fill_Code(start_code, Ztring().From_CC1(start_code));
-}
-
-//---------------------------------------------------------------------------
-void File_Vc1::Data_Parse()
-{
- //Parse
- switch (Element_Code)
- {
- case 0x0A: EndOfSequence(); break;
- case 0x0B: Slice(); break;
- case 0x0C: Field(); break;
- case 0x0D: FrameHeader(); break;
- case 0x0E: EntryPointHeader(); break;
- case 0x0F: SequenceHeader(); break;
- case 0x1B: UserDefinedSlice(); break;
- case 0x1C: UserDefinedField(); break;
- case 0x1D: UserDefinedFrameHeader(); break;
- case 0x1E: UserDefinedEntryPointHeader(); break;
- case 0x1F: UserDefinedSequenceHeader(); break;
- default:
- Trusted_IsNot("Unattended element!");
- }
-}
-
-//---------------------------------------------------------------------------
-bool File_Vc1::Header_Parser_Fill_Size()
-{
- //Look for next Sync word
- if (Buffer_Offset_Temp==0) //Buffer_Offset_Temp is not 0 if Header_Parse_Fill_Size() has already parsed first frames
- Buffer_Offset_Temp=Buffer_Offset+4;
- while (Buffer_Offset_Temp+4<=Buffer_Size
- && CC3(Buffer+Buffer_Offset_Temp)!=0x000001)
- {
- Buffer_Offset_Temp+=2;
- while(Buffer_Offset_Temp<Buffer_Size && Buffer[Buffer_Offset_Temp]!=0x00)
- Buffer_Offset_Temp+=2;
- if (Buffer_Offset_Temp>=Buffer_Size || Buffer[Buffer_Offset_Temp-1]==0x00)
- Buffer_Offset_Temp--;
-
- if (start_code==0x0D) //FrameHeader, we need only few bytes
- {
- if (Buffer_Offset_Temp-Buffer_Offset>20)
- {
- //OK, we continue, we have enough for a slice
- Header_Fill_Size(16);
- Buffer_Offset_Temp=0;
- return true;
- }
- }
- }
-
- //Must wait more data?
- if (Buffer_Offset_Temp+4>Buffer_Size)
- {
- if (FrameIsAlwaysComplete || File_Offset+Buffer_Size==File_Size)
- Buffer_Offset_Temp=Buffer_Size; //We are sure that the next bytes are a start
- else
- return false;
- }
-
- //OK, we continue
- Header_Fill_Size(Buffer_Offset_Temp-Buffer_Offset);
- Buffer_Offset_Temp=0;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Vc1::Header_Parser_QuickSearch()
-{
- while ( Buffer_Offset+4<=Buffer_Size
- && Buffer[Buffer_Offset ]==0x00
- && Buffer[Buffer_Offset+1]==0x00
- && Buffer[Buffer_Offset+2]==0x01)
- {
- //Getting start_code
- int8u start_code=CC1(Buffer+Buffer_Offset+3);
-
- //Searching start
- if (Streams[start_code].Searching_Payload)
- return true;
-
- //Synchronizing
- Buffer_Offset+=4;
- Synched=false;
- if (!Synchronize())
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
-
- if (Buffer_Offset+4>Buffer_Size)
- {
- UnSynched_IsNotJunk=true;
- return false;
- }
- }
-
- if (Buffer_Offset+3==Buffer_Size)
- return false; //Sync is OK, but start_code is not available
- Trusted_IsNot("VC-1, Synchronisation lost");
- return Synchronize();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Packet "0A"
-void File_Vc1::EndOfSequence()
-{
- Element_Name("EndOfSequence");
-}
-
-//---------------------------------------------------------------------------
-// Packet "0B"
-void File_Vc1::Slice()
-{
- Element_Name("Slice");
-}
-
-//---------------------------------------------------------------------------
-// Packet "0C"
-void File_Vc1::Field()
-{
- Element_Name("Field");
-}
-
-//---------------------------------------------------------------------------
-// Packet "0D"
-void File_Vc1::FrameHeader()
-{
- //Name
- Element_Name("FrameHeader");
- Element_Info1(Ztring(__T("Frame ")+Ztring::ToZtring(Frame_Count)));
- if (FrameRate)
- {
- Element_Info1C((FrameInfo.PTS!=(int64u)-1), __T("PTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.PTS)/1000000+Frame_Count_InThisBlock*1000/FrameRate)));
- Element_Info1C((FrameInfo.DTS!=(int64u)-1), __T("DTS ")+Ztring().Duration_From_Milliseconds(float64_int64s(((float64)FrameInfo.DTS)/1000000)));
- }
-
- //Counting
- if (File_Offset+Buffer_Offset+Element_Size==File_Size)
- Frame_Count_Valid=Frame_Count; //Finish frames in case of there are less than Frame_Count_Valid frames
- Frame_Count++;
- Frame_Count_InThisBlock++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
-
- //Parsing
- BS_Begin();
- int8u ptype=(int8u)-1;
- if (profile==3) //Advanced
- {
- int8u PictureFormat=0; //Default=Progressive frame
- if (interlace)
- {
- bool fcm_1;
- Get_SB ( fcm_1, "fcm_1");
- if (fcm_1)
- {
- bool fcm_2;
- Get_SB ( fcm_2, "fcm_2");
- PictureFormat=fcm_2?2:1; //Interlaced Field : Interlaced Frame
- }
- }
- Param_Info1(Vc1_PictureFormat[PictureFormat]);
- PictureFormat_Count[PictureFormat]++;
-
- if (PictureFormat==2) //Interlaced Field
- {
- int8u ptype_;
- Get_S1 ( 3, ptype_, "ptype");
- if (ptype_<5)
- {
- Param_Info1(Vc1_Type[Vc1_FieldTypeTable[ptype_][0]]); Element_Info1(Vc1_Type[Vc1_FieldTypeTable[ptype_][0]]); //First field
- Param_Info1(Vc1_Type[Vc1_FieldTypeTable[ptype_][1]]); Element_Info1(Vc1_Type[Vc1_FieldTypeTable[ptype_][1]]); //Second field
- ptype=Vc1_FieldTypeTable[ptype_][0]; //Saving the ptype from the first field
- }
- else
- {
- Trusted_IsNot("ptype is out of range");
- ptype=0; //Error
- }
- }
- else
- {
- size_t ptype_;
- Get_VL (Vc1_ptype, ptype_, "ptype"); if (ptype_<5) {Param_Info1(Vc1_Type[Vc1_ptype[ptype_].mapped_to3]); Element_Info1(Vc1_Type[Vc1_ptype[ptype_].mapped_to3]);}
- ptype=(int8u)Vc1_ptype[ptype_].mapped_to3;
- }
- if (RefFramesCount<2 && (ptype==0 || ptype==1))
- RefFramesCount++;
- if (FrameInfo.DTS!=(int64u)-1)
- {
- if (framerate_present)
- FrameInfo.DTS+=float64_int64s(((float64)1000000000)/FrameRate);
- }
- if (FrameInfo.PTS!=(int64u)-1)
- {
- if (PTS_Begin==(int64u)-1 && ptype==0) //IFrame
- PTS_Begin=FrameInfo.PTS;
- if ((ptype==0 || ptype==1) && Frame_Count_InThisBlock<=1) //IFrame or PFrame
- PTS_End=FrameInfo.PTS;
- if ((ptype==0 || ptype==1) || (Frame_Count_InThisBlock>=2 && RefFramesCount>=2)) //IFrame or PFrame or more than 2 RefFrame for BFrames
- {
- if (framerate_present)
- PTS_End+=float64_int64s(((float64)1000000000)/FrameRate);
- }
- }
-
- if (ptype!=4) //!=Skipping
- {
- if (tfcntrflag)
- {
- Skip_S1( 8, "tfcntr - frame counter");
- }
- }
-
- if (interlace && !psf)
- {
- bool tff=true, rff=false;
- if (pulldown)
- {
- Get_SB (tff, "tff - top field first");
- Get_SB (rff, "rff - repeat first field");
- if (tff)
- Interlaced_Top++;
- else
- Interlaced_Bottom++;
-
- if (TemporalReference.size()<30)
- {
- if (ptype!=2 && ptype!=3 //if not B and BI-frame
- && !TemporalReference_Waiting.empty()) //We must have 2 I or P pictures to be sure not having B picture later
- {
- //We have 2 I or P pictures
- for (size_t Pos=1; Pos<TemporalReference_Waiting.size(); Pos++) //All B frames (not the first frame, which is I or P)
- {
- TemporalReference_Offset++;
- TemporalReference[TemporalReference_Offset]=TemporalReference_Waiting[Pos];
- }
- TemporalReference_Offset++;
- TemporalReference[TemporalReference_Offset]=TemporalReference_Waiting[0];
- TemporalReference_Waiting.clear();
- }
-
- //We must wait for having another I or P picture
- temporalreference Temp;
- Temp.top_field_first=tff;
- Temp.repeat_first_field=rff;
- TemporalReference_Waiting.push_back(Temp);
- }
- }
- }
- else
- {
- int8u rptfrm=0;
- if (pulldown)
- {
- Get_S1 ( 2, rptfrm, "rptfrm - repeate frame");
- }
- }
-
- /*
- if (panscan_flag)
- {
- //TODO
- }
-
- if (ptype!=4) //!=Skipping
- {
- bool rndctrl;
- Get_SB( rndctrl, "rndctrl - rounding control");
- if (rndctrl && (ptype==0 || ptype==3)) //I or BI type
- Trusted_IsNot("Should not be true!");
-
- if (interlace)
- Skip_SB( "uvsamp - uv sampling mode");
-
- if (finterpflag && PictureFormat==0) //Progressive frame
- Skip_SB( "interrpfrm");
-
- if (PictureFormat!=1) //!=Interlaced frame
- {
- if (ptype==2 //Type B
- || (ptype==3 && PictureFormat==2)) //Type BI and Interlaced field
- Skip_VL(Vc1_bfraction, "bfraction");
- }
- }
- */
- }
- BS_End();
- if (Element_Size-Element_Offset)
- Skip_XX(Element_Size-Element_Offset, "Data");
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Test();
- NextCode_Clear();
- NextCode_Add(0x0D);
- NextCode_Add(0x0F);
-
- //Autorisation of other streams
- Streams[0x0D].Searching_Payload=true;
- Streams[0x0F].Searching_Payload=true;
-
- //Filling only if not already done
- if (!Status[IsFilled] && Frame_Count>=Frame_Count_Valid)
- {
- Fill("VC-1");
-
- if (!IsSub && MediaInfoLib::Config.ParseSpeed_Get()<1)
- Finish("VC-1");
- }
-
- #if MEDIAINFO_EVENTS
- {
- EVENT_BEGIN (Video, SliceInfo, 0)
- Event.FieldPosition=Field_Count;
- Event.SlicePosition=0;
- switch (ptype)
- {
- case 0 :
- Event.SliceType=0; break;
- case 1 :
- Event.SliceType=1; break;
- case 2 :
- case 3 :
- Event.SliceType=2; break;
- case 4 :
- Event.SliceType=3; break;
- default:
- Event.SliceType=(int8u)-1;
- }
- Event.Flags=0;
- EVENT_END ()
- }
- #endif //MEDIAINFO_EVENTS
- FILLING_END();
-
- Synched=false; //We do not have the complete FrameHeader
-}
-
-//---------------------------------------------------------------------------
-// Packet "0E"
-void File_Vc1::EntryPointHeader()
-{
- Element_Name("EntryPointHeader");
-
- //Parsing
- bool extended_mv;
- BS_Begin();
- Skip_SB( "broken_link");
- Skip_SB( "closed_entry");
- Get_SB ( panscan_flag, "panscan_flag");
- Skip_SB( "refdist_flag");
- Skip_SB( "loopfilter");
- Skip_SB( "fastuvmc");
- Get_SB ( extended_mv, "extended_mv");
- Skip_S1( 2, "dquant");
- Skip_SB( "vstransform");
- Skip_SB( "overlap");
- Skip_S1( 2, "quantizer");
- if (hrd_param_flag)
- for (int8u Pos=0; Pos<hrd_num_leaky_buckets; Pos++)
- {
- Element_Begin1("leaky_bucket");
- Skip_S1( 8, "hrd_full");
- Element_End0();
- }
- TEST_SB_SKIP( "coded_size_flag");
- Info_S2(12, coded_width, "coded_width"); Param_Info2((coded_width+1)*2, " pixels");
- Info_S2(12, coded_height, "coded_height"); Param_Info2((coded_height+1)*2, " pixels");
- TEST_SB_END();
- if (extended_mv)
- Skip_SB( "extended_dmv");
- TEST_SB_SKIP( "range_mapy_flag");
- Skip_S1( 3, "range_mapy");
- TEST_SB_END();
- TEST_SB_SKIP( "range_mapuv_flag");
- Skip_S1( 3, "range_mapuv");
- TEST_SB_END();
- Mark_1();
- BS_End();
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Test();
- NextCode_Clear();
- NextCode_Add(0x0D);
-
- //Autorisation of other streams
- Streams[0x0D].Searching_Payload=true;
-
- EntryPoint_Parsed=true;
- if (!Status[IsAccepted])
- Accept("VC-1");
-
- #if MEDIAINFO_DEMUX
- if (InitData_Buffer_Size)
- {
- size_t InitData_Buffer_Temp_Size=InitData_Buffer_Size+(size_t)(Header_Size+Element_Size);
- int8u* InitData_Buffer_Temp=new int8u[InitData_Buffer_Temp_Size];
- std::memcpy(InitData_Buffer_Temp, InitData_Buffer, InitData_Buffer_Size);
- std::memcpy(InitData_Buffer_Temp+InitData_Buffer_Size, Buffer+Buffer_Offset-(size_t)Header_Size, (size_t)(Header_Size+Element_Size));
-
- switch (Config->Demux_InitData_Get())
- {
- case 0 : //In demux event
- break; //Will be done in the first demux event
- case 1 : //In field
- {
- std::string Data_Raw((char*)InitData_Buffer_Temp, InitData_Buffer_Temp_Size);
- std::string Data_Base64(Base64::encode(Data_Raw));
- Fill(Stream_Video, StreamPos_Last, "Demux_InitBytes", Data_Base64);
- (*Stream_More)[Stream_Video][StreamPos_Last](Ztring().From_Local("Demux_InitBytes"), Info_Options)=__T("N NT");
- }
- break;
- default : ;
- }
-
- delete[] InitData_Buffer; InitData_Buffer=NULL;
- delete[] InitData_Buffer_Temp; //InitData_Buffer_Temp=NULL;
- InitData_Buffer_Size=0;
- }
- #endif //MEDIAINFO_DEMUX
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "0F"
-void File_Vc1::SequenceHeader()
-{
- Element_Name("SequenceHeader");
-
- //Parsing
- BS_Begin();
- Get_S1 ( 2, profile, "profile"); Param_Info1(Vc1_Profile[profile]);
- if (profile==0 || profile==1) //Simple or Main
- {
- Skip_S1( 2, "res_sm");
- Skip_S1( 3, "frmrtq_postproc");
- Skip_S1( 5, "bitrtq_postproc");
- Skip_SB( "loopfilter");
- Skip_SB( "res_x8");
- Skip_SB( "multires");
- Skip_SB( "res_fasttx");
- Skip_SB( "fastuvmc");
- Skip_SB( "extended_mv");
- Skip_S1( 2, "dquant");
- Skip_SB( "vtransform");
- Skip_SB( "res_transtab");
- Skip_SB( "overlap");
- Skip_SB( "syncmarker");
- Skip_SB( "rangered");
- Skip_S1( 2, "maxbframes");
- Skip_S1( 2, "quantizer");
- Skip_SB( "finterpflag");
- Skip_SB( "res_rtm_flag");
- }
- else if (profile==3) //Advanced
- {
- Get_S1 ( 3, level, "level");
- Get_S1 ( 2, colordiff_format, "colordiff_format"); Param_Info1(Vc1_ColorimetryFormat[colordiff_format]);
- Skip_S1( 3, "frmrtq_postproc");
- Skip_S1( 5, "bitrtq_postproc");
- Skip_SB( "postprocflag");
- Get_S2 (12, coded_width, "max_coded_width"); Param_Info2((coded_width+1)*2, " pixels");
- Get_S2 (12, coded_height, "max_coded_height"); Param_Info2((coded_height+1)*2, " pixels");
- Get_SB ( pulldown, "pulldown");
- Get_SB ( interlace, "interlace");
- Get_SB ( tfcntrflag, "tfcntrflag - frame counter");
- Get_SB ( finterpflag, "finterpflag");
- Skip_SB( "reserved");
- Get_SB ( psf, "psf - progressive segmented frame");
- TEST_SB_SKIP( "display_ext");
- Info_S2(14, display_x, "display_horiz_size"); Param_Info2(display_x+1, " pixels");
- Info_S2(14, display_y, "display_vert_size"); Param_Info2(display_y+1, " pixels");
- TEST_SB_SKIP( "aspectratio_flag");
- Get_S1 ( 4, AspectRatio, "aspect_ratio"); Param_Info1(Vc1_PixelAspectRatio[AspectRatio]);
- if (AspectRatio==0x0F)
- {
- Get_S1 ( 8, AspectRatioX, "aspect_horiz_size");
- Get_S1 ( 8, AspectRatioY, "aspect_vert_size");
- }
- TEST_SB_END();
- TEST_SB_GET(framerate_present, "framerate_flag");
- TESTELSE_SB_GET(framerate_form, "framerateind");
- Get_S2 (16, framerateexp, "framerateexp"); Param_Info3((float32)((framerateexp+1)/32.0), 3, " fps");
- TESTELSE_SB_ELSE( "framerateind");
- Get_S1 ( 8, frameratecode_enr, "frameratenr"); Param_Info1(Vc1_FrameRate_enr(frameratecode_enr));
- Get_S1 ( 4, frameratecode_dr, "frameratedr"); Param_Info1(Vc1_FrameRate_dr(frameratecode_dr));
- TESTELSE_SB_END();
- TEST_SB_END();
- TEST_SB_SKIP( "color_format_flag");
- Skip_S1( 8, "color_prim");
- Skip_S1( 8, "transfer_char");
- Skip_S1( 8, "matrix_coef");
- TEST_SB_END();
- TEST_SB_END();
- TEST_SB_GET (hrd_param_flag, "hrd_param_flag");
- int8u buffer_size_exponent;
- Get_S1 ( 5, hrd_num_leaky_buckets, "hrd_num_leaky_buckets");
- Skip_S1( 4, "bitrate_exponent");
- Get_S1 ( 4, buffer_size_exponent, "buffer_size_exponent");
- hrd_buffers.clear();
- for (int8u Pos=0; Pos<hrd_num_leaky_buckets; Pos++)
- {
- Element_Begin1("leaky_bucket");
- int16u hrd_buffer;
- Skip_S2(16, "hrd_rate");
- Get_S2(16, hrd_buffer, "hrd_buffer");
- int32u hrd_buffer_value=(int32u)((hrd_buffer+1)*pow(2.0, 1+buffer_size_exponent)); Param_Info2(hrd_buffer_value, " bytes");
- Element_End0();
-
- //Filling
- hrd_buffers.push_back(hrd_buffer_value);
- }
- TEST_SB_END();
- }
- else //forbidden
- {
- Element_DoNotTrust("Forbidden value");
- }
- Mark_1();
- BS_End();
-
- FILLING_BEGIN();
- //NextCode
- NextCode_Clear();
- NextCode_Add(0x0D);
- NextCode_Add(0x0E);
-
- //Autorisation of other streams
- Streams[0x0D].Searching_Payload=true;
- Streams[0x0E].Searching_Payload=true;
-
- //Frame rate
- if (framerate_present)
- {
- if (framerate_form)
- FrameRate=((float32)(framerateexp+1))/(float32)32;
- else if (Vc1_FrameRate_dr(frameratecode_dr))
- FrameRate=Vc1_FrameRate_enr(frameratecode_enr)/Vc1_FrameRate_dr(frameratecode_dr);
- }
-
- if (From_WMV3)
- {
- if (!Status[IsAccepted])
- Accept("VC-1");
- Finish("VC-1");
- }
-
- #if MEDIAINFO_DEMUX
- if (InitData_Buffer_Size)
- {
- InitData_Buffer_Size=(size_t)(Header_Size+Element_Size);
- InitData_Buffer=new int8u[InitData_Buffer_Size];
- std::memcpy(InitData_Buffer, Buffer+Buffer_Offset-(size_t)Header_Size, (size_t)(Header_Size+Element_Size));
- }
- #endif //MEDIAINFO_DEMUX
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-// Packet "1B"
-void File_Vc1::UserDefinedSlice()
-{
- Element_Name("UserDefinedSlice");
-}
-
-//---------------------------------------------------------------------------
-// Packet "1C"
-void File_Vc1::UserDefinedField()
-{
- Element_Name("UserDefinedField");
-}
-
-//---------------------------------------------------------------------------
-// Packet "1D"
-void File_Vc1::UserDefinedFrameHeader()
-{
- Element_Name("UserDefinedFrameHeader");
-}
-
-//---------------------------------------------------------------------------
-// Packet "1E"
-void File_Vc1::UserDefinedEntryPointHeader()
-{
- Element_Name("UserDefinedEntryPointHeader");
-}
-
-//---------------------------------------------------------------------------
-// Packet "1F"
-void File_Vc1::UserDefinedSequenceHeader()
-{
- Element_Name("UserDefinedSequenceHeader");
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_VC1_YES
-
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc1.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc1.h
deleted file mode 100644
index 0a7c3e5a4..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc1.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about MPEG Video files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Vc1H
-#define MediaInfo_Vc1H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Vc1
-//***************************************************************************
-
-class File_Vc1 : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- bool FrameIsAlwaysComplete;
- bool From_WMV3;
- bool Only_0D;
-
- //Constructor/Destructor
- File_Vc1();
- ~File_Vc1();
-
-private :
- //Streams management
- void Streams_Accept();
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - File header
- bool FileHeader_Begin();
-
- //Buffer - Synchro
- bool Synchronize() {return Synchronize_0x000001();}
- bool Synched_Test();
- void Synched_Init();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Global
- void Read_Buffer_Unsynched();
-
- //Buffer - Per element
- void Header_Parse();
- bool Header_Parser_QuickSearch();
- bool Header_Parser_Fill_Size();
- void Data_Parse();
-
- //Elements
- void EndOfSequence();
- void Slice();
- void Field();
- void FrameHeader();
- void EntryPointHeader();
- void SequenceHeader();
- void UserDefinedSlice();
- void UserDefinedField();
- void UserDefinedFrameHeader();
- void UserDefinedEntryPointHeader();
- void UserDefinedSequenceHeader();
-
- //Count
- size_t Interlaced_Top;
- size_t Interlaced_Bottom;
- std::vector<size_t> PictureFormat_Count;
-
- //From SequenceHeader
- std::vector<int32u> hrd_buffers;
- int16u coded_width;
- int16u coded_height;
- int16u framerateexp;
- int8u frameratecode_enr;
- int8u frameratecode_dr;
- int8u profile;
- int8u level;
- int8u colordiff_format;
- int8u AspectRatio;
- int8u AspectRatioX;
- int8u AspectRatioY;
- int8u hrd_num_leaky_buckets;
- int8u max_b_frames;
- bool interlace;
- bool tfcntrflag;
- bool framerate_present;
- bool framerate_form;
- bool hrd_param_flag;
- bool finterpflag;
- bool rangered;
- bool psf;
- bool pulldown;
- bool panscan_flag;
-
- //Stream
- struct stream
- {
- bool Searching_Payload;
- bool Searching_TimeStamp_Start;
- bool Searching_TimeStamp_End;
-
- stream()
- {
- Searching_Payload=false;
- Searching_TimeStamp_Start=false;
- Searching_TimeStamp_End=false;
- }
- };
- std::vector<stream> Streams;
-
- //Temporal reference
- struct temporalreference
- {
- bool top_field_first;
- bool repeat_first_field;
- };
- std::map<int16u, temporalreference> TemporalReference; //int32u is the reference
- std::vector<temporalreference> TemporalReference_Waiting; //First must be I and P-frames, other B-frames
- int16u TemporalReference_Offset;
-
- //Temp
- size_t Width;
- size_t Height;
- size_t RatioValue;
- size_t BitRate;
- int8u start_code;
- bool EntryPoint_Parsed;
- float32 FrameRate;
- size_t RefFramesCount;
-
- //Error controls
- std::vector<int8u> Frame_ShouldBe;
-
- #if MEDIAINFO_DEMUX
- int8u* InitData_Buffer;
- size_t InitData_Buffer_Size;
- #endif //MEDIAINFO_DEMUX
-
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc3.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc3.cpp
deleted file mode 100644
index 6be29f1a7..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc3.cpp
+++ /dev/null
@@ -1,551 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_VC3_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Vc3.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const bool Vc3_FromCID_IsSupported (int32u CompressionID)
-{
- switch (CompressionID)
- {
- case 1235 :
- case 1237 :
- case 1238 :
- case 1241 :
- case 1242 :
- case 1243 :
- case 1250 :
- case 1251 :
- case 1252 :
- case 1253 :
- return true;
- default : return false;
- }
-}
-
-//---------------------------------------------------------------------------
-const int32u Vc3_CompressedFrameSize(int32u CompressionID)
-{
- switch (CompressionID)
- {
- case 1235 : return 917504;
- case 1237 : return 606208;
- case 1238 : return 917504;
- case 1241 : return 917504;
- case 1242 : return 606208;
- case 1243 : return 917504;
- case 1244 : return 606208;
- case 1250 : return 458752;
- case 1251 : return 458752;
- case 1252 : return 303104;
- case 1253 : return 188416;
- default : return 0;
- }
-};
-
-//---------------------------------------------------------------------------
-const int8u Vc3_SBD(int32u SBD) //Sample Bit Depth
-{
- switch (SBD)
- {
- case 1 : return 8;
- case 2 : return 10;
- default: return 0;
- }
-};
-
-//---------------------------------------------------------------------------
-const int8u Vc3_SBD_FromCID (int32u CompressionID)
-{
- switch (CompressionID)
- {
- case 1235 :
- case 1241 :
- case 1250 :
- return 10;
- default : return 8;
- }
-}
-
-//---------------------------------------------------------------------------
-const char* Vc3_FFC[4]=
-{
- "",
- "Progressive",
- "Interlaced",
- "Interlaced",
-};
-
-//---------------------------------------------------------------------------
-const char* Vc3_FFC_ScanOrder[4]=
-{
- "",
- "",
- "TFF",
- "BFF",
-};
-
-//---------------------------------------------------------------------------
-const char* Vc3_FFE[2]=
-{
- "Interlaced",
- "Progressive",
-};
-
-//---------------------------------------------------------------------------
-const char* Vc3_SST[2]=
-{
- "Progressive",
- "Interlaced",
-};
-
-//---------------------------------------------------------------------------
-const char* Vc3_SST_FromCID (int32u CompressionID)
-{
- switch (CompressionID)
- {
- case 1241 :
- case 1242 :
- case 1243 :
- return Vc3_SST[1];
- default : return Vc3_SST[0];
- }
-}
-
-//---------------------------------------------------------------------------
-const int16u Vc3_SPL_FromCID (int32u CompressionID)
-{
- switch (CompressionID)
- {
- case 1250 :
- case 1251 :
- case 1252 :
- return 1280;
- default : return 1920;
- }
-}
-
-//---------------------------------------------------------------------------
-const int16u Vc3_ALPF_PerFrame_FromCID (int32u CompressionID)
-{
- switch (CompressionID)
- {
- case 1250 :
- case 1251 :
- case 1252 :
- return 720;
- default : return 1080;
- }
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Vc3::File_Vc3()
-:File__Analyze()
-{
- //Configuration
- MustSynchronize=true;
-
- //In
- Frame_Count_Valid=2;
- FrameRate=0;
-
- //Temp
- Data_ToParse=0;
- FFC_FirstFrame=(int8u)-1;
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Vc3::Streams_Fill()
-{
- //Filling
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "VC-3");
- Fill(Stream_Video, 0, Video_BitRate_Mode, "CBR");
- if (FrameRate)
- Fill(Stream_Video, 0, Video_BitRate, Vc3_CompressedFrameSize(CID)*8*FrameRate, 0);
- if (Vc3_FromCID_IsSupported(CID))
- {
- Fill(Stream_Video, 0, Video_Width, Vc3_SPL_FromCID(CID));
- Fill(Stream_Video, 0, Video_Height, Vc3_ALPF_PerFrame_FromCID(CID));
- Fill(Stream_Video, 0, Video_BitDepth, Vc3_SBD_FromCID(CID));
- Fill(Stream_Video, 0, Video_ScanType, Vc3_SST_FromCID(CID));
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
- Fill(Stream_Video, 0, Video_ChromaSubsampling, "4:2:2");
- }
- else
- {
- Fill(Stream_Video, 0, Video_Width, SPL);
- Fill(Stream_Video, 0, Video_Height, ALPF*(SST?2:1));
- Fill(Stream_Video, 0, Video_BitDepth, Vc3_SBD(SBD));
- Fill(Stream_Video, 0, Video_ScanType, Vc3_SST[SST]);
- }
- if (FFC_FirstFrame!=(int8u)-1)
- Fill(Stream_Video, 0, Video_ScanOrder, Vc3_FFC_ScanOrder[FFC_FirstFrame]);
-}
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Vc3::Synchronize()
-{
- //Synchronizing
- while (Buffer_Offset+5<=Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x02
- || Buffer[Buffer_Offset+3]!=0x80
- || Buffer[Buffer_Offset+4]!=0x01))
- {
- Buffer_Offset+=2;
- while (Buffer_Offset<Buffer_Size && Buffer[Buffer_Offset]!=0x00)
- Buffer_Offset+=2;
- if (Buffer_Offset>=Buffer_Size || Buffer[Buffer_Offset-1]==0x00)
- Buffer_Offset--;
- }
-
- //Parsing last bytes if needed
- if (Buffer_Offset+4==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x02
- || Buffer[Buffer_Offset+3]!=0x80))
- Buffer_Offset++;
- if (Buffer_Offset+3==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x02))
- Buffer_Offset++;
- if (Buffer_Offset+2==Buffer_Size && (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00))
- Buffer_Offset++;
- if (Buffer_Offset+1==Buffer_Size && Buffer[Buffer_Offset ]!=0x00)
- Buffer_Offset++;
-
- if (Buffer_Offset+5>Buffer_Size)
- return false;
-
- //Synched is OK
- Synched=true;
- return true;
-}
-
-//---------------------------------------------------------------------------
-bool File_Vc3::Synched_Test()
-{
- //Must have enough buffer for having header
- if (Buffer_Offset+5>Buffer_Size)
- return false;
-
- //Quick test of synchro
- if (Buffer[Buffer_Offset ]!=0x00
- || Buffer[Buffer_Offset+1]!=0x00
- || Buffer[Buffer_Offset+2]!=0x02
- || Buffer[Buffer_Offset+3]!=0x80
- || Buffer[Buffer_Offset+4]!=0x01)
- {
- Synched=false;
- return true;
- }
-
- //We continue
- return true;
-}
-
-//***************************************************************************
-// Buffer - Demux
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#if MEDIAINFO_DEMUX
-bool File_Vc3::Demux_UnpacketizeContainer_Test()
-{
- if (Buffer_Offset+0x2C>Buffer_Size)
- return false;
-
- int32u CompressionID=BigEndian2int32u(Buffer+Buffer_Offset+0x28);
- int32u Size=Vc3_CompressedFrameSize(CompressionID);
- Demux_Offset=Buffer_Offset+Size;
-
- if (Demux_Offset>Buffer_Size && File_Offset+Buffer_Size!=File_Size)
- return false; //No complete frame
-
- Demux_UnpacketizeContainer_Demux();
-
- return true;
-}
-#endif //MEDIAINFO_DEMUX
-
-//***************************************************************************
-// Buffer - Per element
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Vc3::Header_Begin()
-{
- if (Buffer_Offset+0x2C>Buffer_Size)
- return false;
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-void File_Vc3::Header_Parse()
-{
- int32u CompressionID=BigEndian2int32u(Buffer+Buffer_Offset+0x28);
-
- Header_Fill_Code(0, "Frame");
- Header_Fill_Size(Vc3_CompressedFrameSize(CompressionID));
-}
-
-//---------------------------------------------------------------------------
-void File_Vc3::Data_Parse()
-{
- //Parsing
- if (Status[IsFilled])
- {
- Skip_XX(Element_Size, "Data");
- }
- else
- {
- Element_Info1(Frame_Count+1);
- HeaderPrefix();
- CodingControlA();
- Skip_XX(16, "Reserved");
- ImageGeometry();
- Skip_XX( 5, "Reserved");
- CompressionID();
- CodingControlB();
- Skip_XX( 3, "Reserved");
- TimeCode();
-
- Skip_XX(640-Element_Offset, "ToDo");
- Skip_XX(Element_Size-Element_Offset, "Data");
- }
-
- FILLING_BEGIN();
- Data_ToParse-=Buffer_Size-(size_t)Buffer_Offset;
- Frame_Count++;
- if (Frame_Count_NotParsedIncluded!=(int64u)-1)
- Frame_Count_NotParsedIncluded++;
- if (FrameRate)
- {
- FrameInfo.PTS=FrameInfo.DTS+=float64_int64s(1000000000/FrameRate);
- FrameInfo.DUR=float64_int64s(1000000000/FrameRate);
- }
- else
- {
- FrameInfo.PTS=FrameInfo.DTS=FrameInfo.DUR=(int64u)-1;
- }
- if (!Status[IsFilled] && Frame_Count>=Frame_Count_Valid)
- { Fill("VC-3");
-
- if (!IsSub && Config->ParseSpeed<1)
- Finish("VC-1");
- }
- FILLING_END();
-}
-
-//***************************************************************************
-// Elements
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Vc3::HeaderPrefix()
-{
- //Parsing
- Element_Begin1("Header Prefix");
- int64u Data;
- Get_B5 (Data, "Contents");
- Element_End0();
-
- FILLING_BEGIN();
- if (Data==0x0000028001LL)
- Accept("VC-3");
- else
- Reject("VC-3");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Vc3::CodingControlA()
-{
- //Parsing
- Element_Begin1("Coding Control A");
- BS_Begin();
-
- int8u FFC;
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Get_S1 (2, FFC, "Field/Frame Count"); Param_Info1(Vc3_FFC[FFC]);
-
- Mark_1();
- Mark_0();
- Mark_0();
- Get_SB ( CRCF, "CRC flag");
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
-
- Mark_1();
- Mark_0();
- Mark_1();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
-
- BS_End();
- Element_End0();
-
- FILLING_BEGIN();
- if (FFC_FirstFrame==(int8u)-1)
- FFC_FirstFrame=FFC;
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Vc3::ImageGeometry()
-{
- //Parsing
- Element_Begin1("Image Geometry");
- Get_B2 (ALPF, "Active lines-per-frame");
- Get_B2 (SPL, "Samples-per-line");
- Skip_B1( "Zero");
- Skip_B2( "Number of active lines");
- Skip_B2( "Zero");
-
- BS_Begin();
-
- Get_S1 (3, SBD, "Sample bit depth");
- Mark_1();
- Mark_1();
- Mark_0();
- Mark_0();
- Mark_0();
-
- Mark_1();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_1();
- Get_SB ( SST, "Source scan type"); Param_Info1(Vc3_SST[SST]);
- Mark_0();
- Mark_0();
-
- BS_End();
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Vc3::CompressionID()
-{
- //Parsing
- Element_Begin1("Compression ID");
- int32u Data;
- Get_B4 (Data, "Compression ID");
- Element_End0();
-
- FILLING_BEGIN();
- CID=Data;
- Data_ToParse=Vc3_CompressedFrameSize(Data);
- if (Data_ToParse==0)
- Reject("VC-3");
- FILLING_END();
-}
-
-//---------------------------------------------------------------------------
-void File_Vc3::CodingControlB()
-{
- //Parsing
- Element_Begin1("Coding Control B");
- BS_Begin();
-
- Info_S1(1, FFE, "Field/Frame Count"); Param_Info1(Vc3_FFE[FFE]);
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
-
- BS_End();
- Element_End0();
-}
-
-//---------------------------------------------------------------------------
-void File_Vc3::TimeCode()
-{
- //Parsing
- Element_Begin1("Time Code");
- bool TCP;
-
- BS_Begin();
- Get_SB ( TCP, "TCP: Time Code Present");
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- Mark_0();
- BS_End();
-
- if (TCP)
- {
- Skip_B8( "Time Code");
- }
- else
- Skip_B8( "Junk");
-
- Element_End0();
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //NameSpace
-
-#endif //MEDIAINFO_VC3_*
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc3.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc3.h
deleted file mode 100644
index 336e59279..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vc3.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about VC-3 video streams
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Vc3H
-#define MediaInfo_Vc3H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-#include "MediaInfo/Multiple/File_Mpeg4.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Avs
-//***************************************************************************
-
-class File_Vc3 : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
- float64 FrameRate;
-
- //constructor/Destructor
- File_Vc3();
-
-private :
- //Streams management
- void Streams_Fill();
-
- //Buffer - Synchro
- bool Synchronize();
- bool Synched_Test();
-
- //Buffer - Demux
- #if MEDIAINFO_DEMUX
- bool Demux_UnpacketizeContainer_Test();
- #endif //MEDIAINFO_DEMUX
-
- //Buffer - Per element
- bool Header_Begin ();
- void Header_Parse ();
- void Data_Parse ();
-
- //Elements
- void HeaderPrefix();
- void CodingControlA();
- void ImageGeometry();
- void CompressionID();
- void CodingControlB();
- void TimeCode();
- void UserData();
- void MacroblockScanIndices();
-
- //Temp
- int64u Data_ToParse;
- int32u CID;
- bool CRCF;
- int16u ALPF;
- int16u SPL;
- int8u SBD;
- int8u FFC_FirstFrame;
- bool SST;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vp8.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vp8.cpp
deleted file mode 100644
index 21aa8826a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vp8.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_VP8_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Vp8.h"
-#include "MediaInfo/MediaInfo_Config_MediaInfo.h"
-#include "ZenLib/BitStream.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Vp8::File_Vp8()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("VP8");
- IsRawStream=true;
-
- //In
- Frame_Count_Valid=MediaInfoLib::Config.ParseSpeed_Get()>=0.3?32:4;
-}
-
-//---------------------------------------------------------------------------
-File_Vp8::~File_Vp8()
-{
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Vp8::Streams_Accept()
-{
- Stream_Prepare(Stream_Video);
-}
-
-//---------------------------------------------------------------------------
-void File_Vp8::Streams_Update()
-{
-}
-
-//---------------------------------------------------------------------------
-void File_Vp8::Streams_Fill()
-{
- Fill(Stream_Video, 0, Video_Format, "VP8");
- Fill(Stream_Video, 0, Video_Codec, "VP8");
-}
-
-//---------------------------------------------------------------------------
-void File_Vp8::Streams_Finish()
-{
-}
-
-//***************************************************************************
-// Buffer - Global
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Vp8::Read_Buffer_Continue()
-{
- Accept();
-
- BS_Begin_LE(); //VP8 bitstream is Little Endian
- bool frame_type;
- Get_TB ( frame_type, "frame type");
- Skip_T1( 3, "version number");
- Skip_TB( "show_frame flag");
- Skip_T4(19, "size of the first data partition");
- BS_End();
-
- if (!frame_type) //I-Frame
- {
- Skip_B3( "0x9D012A");
- Skip_L2( "Width");
- Skip_L2( "Height");
- }
- Skip_XX(Element_Size-Element_Offset, "Other data");
-
- Frame_Count++;
- if (Frame_Count>=Frame_Count_Valid)
- Finish();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_VP8_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vp8.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vp8.h
deleted file mode 100644
index 6294a8b3a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Vp8.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about VP8 files
-// http://datatracker.ietf.org/doc/rfc6386/?include_text=1
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Vp8H
-#define MediaInfo_Vp8H
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Vp8
-//***************************************************************************
-
-class File_Vp8 : public File__Analyze
-{
-public :
- //In
- int64u Frame_Count_Valid;
-
- //Constructor/Destructor
- File_Vp8();
- ~File_Vp8();
-
-private :
- //Streams management
- void Streams_Accept();
- void Streams_Update();
- void Streams_Fill();
- void Streams_Finish();
-
- //Buffer - Global
- void Read_Buffer_Continue();
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Y4m.cpp b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Y4m.cpp
deleted file mode 100644
index 727b16058..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Y4m.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-//
-// Source:
-// http://wiki.multimedia.cx/index.php?title=YUV4MPEG2
-//
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Pre-compilation
-#include "MediaInfo/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Setup.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(MEDIAINFO_Y4M_YES)
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/Video/File_Y4m.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-namespace MediaInfoLib
-{
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Infos
-//***************************************************************************
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File_Y4m::File_Y4m()
-:File__Analyze()
-{
- //Configuration
- ParserName=__T("YUV4MPEG2");
- IsRawStream=true;
- Frame_Count_NotParsedIncluded=0;
-
- //Temp
- HeaderEnd=0;
-}
-
-//---------------------------------------------------------------------------
-File_Y4m::~File_Y4m()
-{
-}
-
-//***************************************************************************
-// Streams management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void File_Y4m::Streams_Accept()
-{
- Fill(Stream_General, 0, General_Format, "YUV4MPEG2");
-
- Stream_Prepare(Stream_Video);
- Fill(Stream_Video, 0, Video_Format, "YUV");
- Fill(Stream_Video, 0, Video_ColorSpace, "YUV");
-}
-
-//---------------------------------------------------------------------------
-void File_Y4m::Streams_Fill()
-{
-}
-
-//***************************************************************************
-// Buffer - File header
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File_Y4m::FileHeader_Begin()
-{
- if (Buffer_Size<10)
- return false;
-
- if (!(Buffer[0]==0x59
- && Buffer[1]==0x55
- && Buffer[2]==0x56
- && Buffer[3]==0x34
- && Buffer[4]==0x4D
- && Buffer[5]==0x50
- && Buffer[6]==0x45
- && Buffer[7]==0x47
- && Buffer[8]==0x32
- && Buffer[9]==0x20))
- {
- Reject();
- return false;
- }
-
- for (; HeaderEnd<Buffer_Size; HeaderEnd++)
- {
- if (Buffer[HeaderEnd]==0x0A)
- {
- Accept();
- return true;
- }
- }
-
- return false;
-}
-
-//---------------------------------------------------------------------------
-void File_Y4m::FileHeader_Parse()
-{
- //Parsing
- Ztring Header;
- Get_Local(HeaderEnd, Header, "Data");
-
- ZtringList List; List.Separator_Set(0, " ");
- List.Write(Header);
- int64u Width=0, Height=0, Multiplier=0, Divisor=1;
- float64 FrameRate=0;
- for (size_t Pos=1; Pos<List.size(); Pos++)
- {
- if (!List[Pos].empty())
- {
- switch (List[Pos][0])
- {
- case 'A' : //Pixel aspect ratio
- {
- ZtringList Value; Value.Separator_Set(0, ":");
- Value.Write(List[Pos].substr(1));
- if (Value.size()==2)
- {
- float64 x=Value[0].To_float64();
- float64 y=Value[1].To_float64();
- if (x && y)
- Fill(Stream_Video, 0, Video_PixelAspectRatio, x/y, 3);
- }
- }
- break;
- case 'C' : //Color space
- if (List[Pos]==__T("C420jpeg") || List[Pos]==__T("C420paldv") || List[Pos]==__T("C420"))
- {
- Fill(Stream_Video, 0, Video_ChromaSubsampling, "4:2:0");
- Multiplier=3;
- Divisor=2;
- }
- if (List[Pos]==__T("C422"))
- {
- Fill(Stream_Video, 0, Video_ChromaSubsampling, "4:2:2");
- Multiplier=2;
- }
- if (List[Pos]==__T("C444"))
- {
- Fill(Stream_Video, 0, Video_ChromaSubsampling, "4:4:4");
- Multiplier=3;
- }
- break;
- case 'F' : //Frame rate
- {
- ZtringList Value; Value.Separator_Set(0, ":");
- Value.Write(List[Pos].substr(1));
- if (Value.size()==2)
- {
- float64 N=Value[0].To_float64();
- float64 D=Value[1].To_float64();
- if (N && D)
- {
- FrameRate=N/D;
- Fill(Stream_Video, 0, Video_FrameRate, FrameRate, 3);
- }
- }
- }
- break;
- case 'H' : //Height
- {
- Ztring Value=List[Pos].substr(1);
- Height=Value.To_int64u();
- Fill(Stream_Video, 0, Video_Height, Height); break;
- }
- break;
- case 'I' : //Interlacing
- if (List[Pos].size()==2)
- switch (List[Pos][1])
- {
- case 'p' : Fill(Stream_Video, 0, Video_ScanType, "Progressive"); break;
- case 't' : Fill(Stream_Video, 0, Video_ScanType, "Progressive"); Fill(Stream_Video, 0, Video_ScanOrder, "TFF"); break;
- case 'b' : Fill(Stream_Video, 0, Video_ScanType, "Progressive"); Fill(Stream_Video, 0, Video_ScanOrder, "BFF"); break;
- case 'm' : Fill(Stream_Video, 0, Video_ScanType, "Mixed"); break;
- default : ;
- }
- break;
- case 'W' : //Width
- {
- Ztring Value=List[Pos].substr(1);
- Width=Value.To_int64u();
- Fill(Stream_Video, 0, Video_Width, Width); break;
- }
- break;
- default : ;
- }
- }
- }
-
- //Duration (we expect no meta per frame)
- if (Width && Height && Multiplier)
- {
- int64u Frame_ByteSize=6+Width*Height*Multiplier/Divisor; //5 for "FRAME\0"
- Fill(Stream_Video, 0, Video_FrameCount, File_Size/Frame_ByteSize);
- if (FrameRate)
- Fill(Stream_Video, 0, Video_BitRate, Width*Height*Multiplier/Divisor*8*FrameRate);
- }
-
- Finish();
-}
-
-} //NameSpace
-
-#endif //MEDIAINFO_Y4M_YES
diff --git a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Y4m.h b/src/thirdparty/MediaInfo/MediaInfo/Video/File_Y4m.h
deleted file mode 100644
index 8055c5d8a..000000000
--- a/src/thirdparty/MediaInfo/MediaInfo/Video/File_Y4m.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license that can
- * be found in the License.html file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Information about YUV4MPEG2 files
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef MediaInfo_Y4mH
-#define MediaInfo_Y4mH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "MediaInfo/File__Analyze.h"
-//---------------------------------------------------------------------------
-
-namespace MediaInfoLib
-{
-
-//***************************************************************************
-// Class File_Y4m
-//***************************************************************************
-
-class File_Y4m : public File__Analyze
-{
-public :
- //Constructor/Destructor
- File_Y4m();
- ~File_Y4m();
-
-private :
- //Streams management
- void Streams_Accept();
- void Streams_Fill();
-
- //Buffer - File header
- bool FileHeader_Begin();
- void FileHeader_Parse();
-
- //Temp
- size_t HeaderEnd;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/MediaInfo/MediaInfoLib.vcxproj b/src/thirdparty/MediaInfo/MediaInfoLib.vcxproj
index 4bea802d6..310aacc12 100644
--- a/src/thirdparty/MediaInfo/MediaInfoLib.vcxproj
+++ b/src/thirdparty/MediaInfo/MediaInfoLib.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,480 +26,398 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>.;ThirdParty\base64;ThirdParty\tinyxml2;..\ZenLib;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;CURL_STATICLIB;MEDIAINFO_ADVANCED_NO;MEDIAINFO_ARCHIVE_NO;MEDIAINFO_DEMUX_NO;MEDIAINFO_DVDIF_ANALYZE_NO;MEDIAINFO_EVENTS_NO;MEDIAINFO_LIBCURL_NO;MEDIAINFO_LIBMMS_NO;MEDIAINFO_MD5_NO;MEDIAINFO_MINIMAL_YES;MEDIAINFO_MPEGTS_DUPLICATE_NO;MEDIAINFO_N19_NO;MEDIAINFO_OTHERTEXT_NO;MEDIAINFO_TRACE_NO;MEDIAINFO_READTHREAD_NO;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <PrecompiledHeaderFile>MediaInfo/PreComp.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>.;ThirdParty\base64;ThirdParty\tinyxml2;..\ZenLib;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;CURL_STATICLIB;MEDIAINFO_ADVANCED_NO;MEDIAINFO_ARCHIVE_NO;MEDIAINFO_DEMUX_NO;MEDIAINFO_DVDIF_ANALYZE_NO;MEDIAINFO_EVENTS_NO;MEDIAINFO_LIBCURL_NO;MEDIAINFO_LIBMMS_NO;MEDIAINFO_MD5_NO;MEDIAINFO_MINIMAL_YES;MEDIAINFO_MPEGTS_DUPLICATE_NO;MEDIAINFO_N19_NO;MEDIAINFO_OTHERTEXT_NO;MEDIAINFO_TRACE_NO;MEDIAINFO_READTHREAD_NO;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <PrecompiledHeaderFile>MediaInfo/PreComp.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>.;ThirdParty\base64;ThirdParty\tinyxml2;..\ZenLib;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;CURL_STATICLIB;MEDIAINFO_ADVANCED_NO;MEDIAINFO_ARCHIVE_NO;MEDIAINFO_DEMUX_NO;MEDIAINFO_DVDIF_ANALYZE_NO;MEDIAINFO_EVENTS_NO;MEDIAINFO_LIBCURL_NO;MEDIAINFO_LIBMMS_NO;MEDIAINFO_MD5_NO;MEDIAINFO_MINIMAL_YES;MEDIAINFO_MPEGTS_DUPLICATE_NO;MEDIAINFO_N19_NO;MEDIAINFO_OTHERTEXT_NO;MEDIAINFO_TRACE_NO;MEDIAINFO_READTHREAD_NO;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <PrecompiledHeaderFile>MediaInfo/PreComp.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
- <AdditionalIncludeDirectories>.;ThirdParty\base64;ThirdParty\tinyxml2;..\ZenLib;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;CURL_STATICLIB;MEDIAINFO_ADVANCED_NO;MEDIAINFO_ARCHIVE_NO;MEDIAINFO_DEMUX_NO;MEDIAINFO_DVDIF_ANALYZE_NO;MEDIAINFO_EVENTS_NO;MEDIAINFO_LIBCURL_NO;MEDIAINFO_LIBMMS_NO;MEDIAINFO_MD5_NO;MEDIAINFO_MINIMAL_YES;MEDIAINFO_MPEGTS_DUPLICATE_NO;MEDIAINFO_N19_NO;MEDIAINFO_OTHERTEXT_NO;MEDIAINFO_TRACE_NO;MEDIAINFO_READTHREAD_NO;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
+ <AdditionalIncludeDirectories>library\Source;library\Source\ThirdParty\base64;library\Source\ThirdParty\tinyxml2;..\ZenLib\library\Source;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_LIB;CURL_STATICLIB;MEDIAINFO_ADVANCED_NO;MEDIAINFO_ARCHIVE_NO;MEDIAINFO_DEMUX_NO;MEDIAINFO_DVDIF_ANALYZE_NO;MEDIAINFO_EVENTS_NO;MEDIAINFO_LIBCURL_NO;MEDIAINFO_LIBMMS_NO;MEDIAINFO_MD5_NO;MEDIAINFO_MINIMAL_YES;MEDIAINFO_MPEGTS_DUPLICATE_NO;MEDIAINFO_N19_NO;MEDIAINFO_OTHERTEXT_NO;MEDIAINFO_TRACE_NO;MEDIAINFO_READTHREAD_NO;MEDIAINFO_EXPORT_NO;MEDIAINFO_TEXT_YES;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>MediaInfo/PreComp.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
- <ClInclude Include="MediaInfo\Export\Export_EbuCore.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Aaf.h" />
- <ClInclude Include="MediaInfo\Multiple\File_DashMpd.h" />
- <ClInclude Include="MediaInfo\Multiple\File_DcpAm.h" />
- <ClInclude Include="MediaInfo\Multiple\File_DcpCpl.h" />
- <ClInclude Include="MediaInfo\Multiple\File_DcpPkl.h" />
- <ClInclude Include="MediaInfo\Multiple\File_HdsF4m.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Pmp.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Ptx.h" />
- <ClInclude Include="MediaInfo\Tag\File_Xmp.h" />
- <ClInclude Include="MediaInfo\Text\File_Pdf.h" />
- <ClInclude Include="MediaInfo\Text\File_SubRip.h" />
- <ClInclude Include="MediaInfo\Text\File_TimedText.h" />
- <ClInclude Include="MediaInfo\Text\File_Ttml.h" />
- <ClInclude Include="MediaInfo\Video\File_Ffv1.h" />
- <ClInclude Include="MediaInfo\Video\File_Hevc.h" />
- <ClInclude Include="MediaInfo\Video\File_HuffYuv.h" />
- <ClInclude Include="ThirdParty\base64\base64.h" />
- <ClInclude Include="ThirdParty\tinyxml2\tinyxml2.h" />
- <ClInclude Include="MediaInfo\Archive\File_7z.h" />
- <ClInclude Include="MediaInfo\Archive\File_Ace.h" />
- <ClInclude Include="MediaInfo\Archive\File_Bzip2.h" />
- <ClInclude Include="MediaInfo\Archive\File_Elf.h" />
- <ClInclude Include="MediaInfo\Archive\File_Gzip.h" />
- <ClInclude Include="MediaInfo\Archive\File_Iso9660.h" />
- <ClInclude Include="MediaInfo\Archive\File_Mz.h" />
- <ClInclude Include="MediaInfo\Archive\File_Rar.h" />
- <ClInclude Include="MediaInfo\Archive\File_Tar.h" />
- <ClInclude Include="MediaInfo\Archive\File_Zip.h" />
- <ClInclude Include="MediaInfo\Audio\File_Aac.h" />
- <ClInclude Include="MediaInfo\Audio\File_Aac_GeneralAudio.h" />
- <ClInclude Include="MediaInfo\Audio\File_Aac_GeneralAudio_Sbr.h" />
- <ClInclude Include="MediaInfo\Audio\File_Aac_GeneralAudio_Sbr_Ps.h" />
- <ClInclude Include="MediaInfo\Audio\File_Ac3.h" />
- <ClInclude Include="MediaInfo\Audio\File_Adpcm.h" />
- <ClInclude Include="MediaInfo\Audio\File_Als.h" />
- <ClInclude Include="MediaInfo\Audio\File_Amr.h" />
- <ClInclude Include="MediaInfo\Audio\File_Amv.h" />
- <ClInclude Include="MediaInfo\Audio\File_Ape.h" />
- <ClInclude Include="MediaInfo\Audio\File_Au.h" />
- <ClInclude Include="MediaInfo\Audio\File_Celt.h" />
- <ClInclude Include="MediaInfo\Audio\File_ChannelGrouping.h" />
- <ClInclude Include="MediaInfo\Audio\File_DolbyE.h" />
- <ClInclude Include="MediaInfo\Audio\File_Dts.h" />
- <ClInclude Include="MediaInfo\Audio\File_ExtendedModule.h" />
- <ClInclude Include="MediaInfo\Audio\File_Flac.h" />
- <ClInclude Include="MediaInfo\Audio\File_ImpulseTracker.h" />
- <ClInclude Include="MediaInfo\Audio\File_La.h" />
- <ClInclude Include="MediaInfo\Audio\File_Midi.h" />
- <ClInclude Include="MediaInfo\Audio\File_Module.h" />
- <ClInclude Include="MediaInfo\Audio\File_Mpc.h" />
- <ClInclude Include="MediaInfo\Audio\File_MpcSv8.h" />
- <ClInclude Include="MediaInfo\Audio\File_Mpega.h" />
- <ClInclude Include="MediaInfo\Audio\File_OpenMG.h" />
- <ClInclude Include="MediaInfo\Audio\File_Opus.h" />
- <ClInclude Include="MediaInfo\Audio\File_Pcm.h" />
- <ClInclude Include="MediaInfo\Audio\File_Pcm_M2ts.h" />
- <ClInclude Include="MediaInfo\Audio\File_Pcm_Vob.h" />
- <ClInclude Include="MediaInfo\Audio\File_Ps2Audio.h" />
- <ClInclude Include="MediaInfo\Audio\File_Rkau.h" />
- <ClInclude Include="MediaInfo\Audio\File_ScreamTracker3.h" />
- <ClInclude Include="MediaInfo\Audio\File_SmpteSt0302.h" />
- <ClInclude Include="MediaInfo\Audio\File_SmpteSt0331.h" />
- <ClInclude Include="MediaInfo\Audio\File_SmpteSt0337.h" />
- <ClInclude Include="MediaInfo\Audio\File_Speex.h" />
- <ClInclude Include="MediaInfo\Audio\File_Tak.h" />
- <ClInclude Include="MediaInfo\Audio\File_Tta.h" />
- <ClInclude Include="MediaInfo\Audio\File_TwinVQ.h" />
- <ClInclude Include="MediaInfo\Audio\File_Vorbis.h" />
- <ClInclude Include="MediaInfo\Audio\File_Wvpk.h" />
- <ClInclude Include="MediaInfo\Duplicate\File__Duplicate_MpegTs.h" />
- <ClInclude Include="MediaInfo\Duplicate\File__Duplicate__Base.h" />
- <ClInclude Include="MediaInfo\Duplicate\File__Duplicate__Writer.h" />
- <ClInclude Include="MediaInfo\Export\Export_Mpeg7.h" />
- <ClInclude Include="MediaInfo\Export\Export_PBCore.h" />
- <ClInclude Include="MediaInfo\File_Dummy.h" />
- <ClInclude Include="MediaInfo\File_Other.h" />
- <ClInclude Include="MediaInfo\File_Unknown.h" />
- <ClInclude Include="MediaInfo\File__Analyse_Automatic.h" />
- <ClInclude Include="MediaInfo\File__Analyze.h" />
- <ClInclude Include="MediaInfo\File__Analyze_MinimizeSize.h" />
- <ClInclude Include="MediaInfo\File__Base.h" />
- <ClInclude Include="MediaInfo\File__Duplicate.h" />
- <ClInclude Include="MediaInfo\File__MultipleParsing.h" />
- <ClInclude Include="MediaInfo\Image\File_ArriRaw.h" />
- <ClInclude Include="MediaInfo\Image\File_Bmp.h" />
- <ClInclude Include="MediaInfo\Image\File_Dds.h" />
- <ClInclude Include="MediaInfo\Image\File_Dpx.h" />
- <ClInclude Include="MediaInfo\Image\File_Exr.h" />
- <ClInclude Include="MediaInfo\Image\File_Gif.h" />
- <ClInclude Include="MediaInfo\Image\File_Ico.h" />
- <ClInclude Include="MediaInfo\Image\File_Jpeg.h" />
- <ClInclude Include="MediaInfo\Image\File_Pcx.h" />
- <ClInclude Include="MediaInfo\Image\File_Png.h" />
- <ClInclude Include="MediaInfo\Image\File_Psd.h" />
- <ClInclude Include="MediaInfo\Image\File_Rle.h" />
- <ClInclude Include="MediaInfo\Image\File_Tga.h" />
- <ClInclude Include="MediaInfo\Image\File_Tiff.h" />
- <ClInclude Include="MediaInfo\MediaInfo.h" />
- <ClInclude Include="MediaInfo\MediaInfoList.h" />
- <ClInclude Include="MediaInfo\MediaInfoList_Internal.h" />
- <ClInclude Include="MediaInfo\MediaInfo_Config.h" />
- <ClInclude Include="MediaInfo\MediaInfo_Config_MediaInfo.h" />
- <ClInclude Include="MediaInfo\MediaInfo_Config_PerPackage.h" />
- <ClInclude Include="MediaInfo\MediaInfo_Const.h" />
- <ClInclude Include="MediaInfo\MediaInfo_Events.h" />
- <ClInclude Include="MediaInfo\MediaInfo_Events_Internal.h" />
- <ClInclude Include="MediaInfo\MediaInfo_Internal.h" />
- <ClInclude Include="MediaInfo\MediaInfo_Internal_Const.h" />
- <ClInclude Include="MediaInfo\Multiple\File__ReferenceFilesHelper.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Ancillary.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Bdmv.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Cdxa.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Dpg.h" />
- <ClInclude Include="MediaInfo\Multiple\File_DvDif.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Dvdv.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Dxw.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Flv.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Gxf.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Gxf_TimeCode.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Hls.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Ibi.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Ibi_Creation.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Ism.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Ivf.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Lxf.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Mk.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg4.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg4_Descriptors.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg4_TimeCode.h" />
- <ClInclude Include="MediaInfo\Multiple\File_MpegPs.h" />
- <ClInclude Include="MediaInfo\Multiple\File_MpegTs.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg_Descriptors.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg_Psi.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Mxf.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Nut.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Ogg.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Ogg_SubElement.h" />
- <ClInclude Include="MediaInfo\Multiple\File_P2_Clip.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Riff.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Rm.h" />
- <ClInclude Include="MediaInfo\Multiple\File_SequenceInfo.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Skm.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Swf.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Umf.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Wm.h" />
- <ClInclude Include="MediaInfo\Multiple\File_Xdcam_Clip.h" />
- <ClInclude Include="MediaInfo\PreComp.h" />
- <ClInclude Include="MediaInfo\Reader\Reader_Directory.h" />
- <ClInclude Include="MediaInfo\Reader\Reader_File.h" />
- <ClInclude Include="MediaInfo\Reader\Reader_libcurl.h" />
- <ClInclude Include="MediaInfo\Reader\Reader_libcurl_Include.h" />
- <ClInclude Include="MediaInfo\Reader\Reader_libmms.h" />
- <ClInclude Include="MediaInfo\Reader\Reader__Base.h" />
- <ClInclude Include="MediaInfo\Setup.h" />
- <ClInclude Include="MediaInfo\TimeCode.h" />
- <ClInclude Include="MediaInfo\Tag\File_ApeTag.h" />
- <ClInclude Include="MediaInfo\Tag\File_Id3.h" />
- <ClInclude Include="MediaInfo\Tag\File_Id3v2.h" />
- <ClInclude Include="MediaInfo\Tag\File_Lyrics3.h" />
- <ClInclude Include="MediaInfo\Tag\File_Lyrics3v2.h" />
- <ClInclude Include="MediaInfo\Tag\File_VorbisCom.h" />
- <ClInclude Include="MediaInfo\Tag\File__Tags.h" />
- <ClInclude Include="MediaInfo\Text\File_AribStdB24B37.h" />
- <ClInclude Include="MediaInfo\Text\File_Cdp.h" />
- <ClInclude Include="MediaInfo\Text\File_Cmml.h" />
- <ClInclude Include="MediaInfo\Text\File_DtvccTransport.h" />
- <ClInclude Include="MediaInfo\Text\File_DvbSubtitle.h" />
- <ClInclude Include="MediaInfo\Text\File_Eia608.h" />
- <ClInclude Include="MediaInfo\Text\File_Eia708.h" />
- <ClInclude Include="MediaInfo\Text\File_Kate.h" />
- <ClInclude Include="MediaInfo\Text\File_N19.h" />
- <ClInclude Include="MediaInfo\Text\File_OtherText.h" />
- <ClInclude Include="MediaInfo\Text\File_Pgs.h" />
- <ClInclude Include="MediaInfo\Text\File_Scc.h" />
- <ClInclude Include="MediaInfo\Text\File_Scte20.h" />
- <ClInclude Include="MediaInfo\Text\File_Teletext.h" />
- <ClInclude Include="MediaInfo\Video\File_AfdBarData.h" />
- <ClInclude Include="MediaInfo\Video\File_Aic.h" />
- <ClInclude Include="MediaInfo\Video\File_Avc.h" />
- <ClInclude Include="MediaInfo\Video\File_AvsV.h" />
- <ClInclude Include="MediaInfo\Video\File_Canopus.h" />
- <ClInclude Include="MediaInfo\Video\File_Dirac.h" />
- <ClInclude Include="MediaInfo\Video\File_Flic.h" />
- <ClInclude Include="MediaInfo\Video\File_Fraps.h" />
- <ClInclude Include="MediaInfo\Video\File_H263.h" />
- <ClInclude Include="MediaInfo\Video\File_Lagarith.h" />
- <ClInclude Include="MediaInfo\Video\File_Mpeg4v.h" />
- <ClInclude Include="MediaInfo\Video\File_Mpegv.h" />
- <ClInclude Include="MediaInfo\Video\File_ProRes.h" />
- <ClInclude Include="MediaInfo\Video\File_Theora.h" />
- <ClInclude Include="MediaInfo\Video\File_Vc1.h" />
- <ClInclude Include="MediaInfo\Video\File_Vc3.h" />
- <ClInclude Include="MediaInfo\Video\File_Vp8.h" />
- <ClInclude Include="MediaInfo\Video\File_Y4m.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Aaf.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DashMpd.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DcpAm.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DcpCpl.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DcpPkl.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_HdsF4m.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Pmp.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ptx.h" />
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_PropertyList.h" />
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Xmp.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Pdf.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Sdp.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_SubRip.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_TimedText.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Ttml.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Ffv1.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Hevc.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_HuffYuv.h" />
+ <ClInclude Include="library\Source\ThirdParty\base64\base64.h" />
+ <ClInclude Include="library\Source\ThirdParty\tinyxml2\tinyxml2.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Aac.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio_Sbr.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio_Sbr_Ps.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Ac3.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Adpcm.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Als.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Amr.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Amv.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Ape.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Au.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Caf.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Celt.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_ChannelGrouping.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_DolbyE.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Dts.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_ExtendedModule.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Flac.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_ImpulseTracker.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_La.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Midi.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Module.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Mpc.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_MpcSv8.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Mpega.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_OpenMG.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Opus.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Pcm.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Pcm_M2ts.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Pcm_Vob.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Ps2Audio.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Rkau.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_ScreamTracker3.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_SmpteSt0302.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_SmpteSt0331.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_SmpteSt0337.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Speex.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Tak.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Tta.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_TwinVQ.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Vorbis.h" />
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Wvpk.h" />
+ <ClInclude Include="library\Source\MediaInfo\Duplicate\File__Duplicate_MpegTs.h" />
+ <ClInclude Include="library\Source\MediaInfo\Duplicate\File__Duplicate__Base.h" />
+ <ClInclude Include="library\Source\MediaInfo\Duplicate\File__Duplicate__Writer.h" />
+ <ClInclude Include="library\Source\MediaInfo\File_Other.h" />
+ <ClInclude Include="library\Source\MediaInfo\File_Unknown.h" />
+ <ClInclude Include="library\Source\MediaInfo\File__Analyse_Automatic.h" />
+ <ClInclude Include="library\Source\MediaInfo\File__Analyze.h" />
+ <ClInclude Include="library\Source\MediaInfo\File__Analyze_MinimizeSize.h" />
+ <ClInclude Include="library\Source\MediaInfo\File__Base.h" />
+ <ClInclude Include="library\Source\MediaInfo\File__MultipleParsing.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_ArriRaw.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Bmp.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Bpg.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Dds.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Dpx.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Exr.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Gif.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Ico.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Jpeg.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Pcx.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Png.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Psd.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Rle.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Tga.h" />
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Tiff.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfoList.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfoList_Internal.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Config.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Config_MediaInfo.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Config_PerPackage.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Const.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Events.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Events_Internal.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Internal.h" />
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Internal_Const.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper_Resource.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper_Sequence.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ancillary.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Bdmv.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Cdxa.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Dpg.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DvDif.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Dvdv.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Dxw.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Flv.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Gxf.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Gxf_TimeCode.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Hls.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ism.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ivf.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Lxf.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mk.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg4.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg4_Descriptors.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg4_TimeCode.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_MpegPs.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_MpegTs.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg_Descriptors.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg_Psi.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mxf.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Nut.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ogg.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ogg_SubElement.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_P2_Clip.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Riff.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Rm.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_SequenceInfo.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Skm.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Swf.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Umf.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Vbi.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Wm.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Wtv.h" />
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Xdcam_Clip.h" />
+ <ClInclude Include="library\Source\MediaInfo\PreComp.h" />
+ <ClInclude Include="library\Source\MediaInfo\XmlUtils.h" />
+ <ClInclude Include="library\Source\MediaInfo\Reader\Reader_Directory.h" />
+ <ClInclude Include="library\Source\MediaInfo\Reader\Reader_File.h" />
+ <ClInclude Include="library\Source\MediaInfo\Reader\Reader__Base.h" />
+ <ClInclude Include="library\Source\MediaInfo\Setup.h" />
+ <ClInclude Include="library\Source\MediaInfo\TimeCode.h" />
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_ApeTag.h" />
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Id3.h" />
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Id3v2.h" />
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Lyrics3.h" />
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Lyrics3v2.h" />
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_VorbisCom.h" />
+ <ClInclude Include="library\Source\MediaInfo\Tag\File__Tags.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_AribStdB24B37.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Cdp.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Cmml.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_DtvccTransport.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_DvbSubtitle.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Eia608.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Eia708.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Kate.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Pgs.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Scc.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Scte20.h" />
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Teletext.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_AfdBarData.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Aic.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Avc.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_AvsV.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Canopus.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Dirac.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Flic.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Fraps.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_H263.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Lagarith.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Mpeg4v.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Mpegv.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_ProRes.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Theora.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Vc1.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Vc3.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Vp8.h" />
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Y4m.h" />
</ItemGroup>
<ItemGroup>
- <ClCompile Include="MediaInfo\Archive\File_7z.cpp" />
- <ClCompile Include="MediaInfo\Archive\File_Ace.cpp" />
- <ClCompile Include="MediaInfo\Archive\File_Bzip2.cpp" />
- <ClCompile Include="MediaInfo\Archive\File_Elf.cpp" />
- <ClCompile Include="MediaInfo\Archive\File_Gzip.cpp" />
- <ClCompile Include="MediaInfo\Archive\File_Iso9660.cpp" />
- <ClCompile Include="MediaInfo\Archive\File_Mz.cpp" />
- <ClCompile Include="MediaInfo\Archive\File_Rar.cpp" />
- <ClCompile Include="MediaInfo\Archive\File_Tar.cpp" />
- <ClCompile Include="MediaInfo\Archive\File_Zip.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Aac.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Aac_GeneralAudio.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Aac_GeneralAudio_Sbr.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Aac_GeneralAudio_Sbr_Ps.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Aac_Main.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Aac_Others.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Ac3.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Adpcm.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Als.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Amr.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Amv.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Ape.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Au.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Celt.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_ChannelGrouping.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_DolbyE.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Dts.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_ExtendedModule.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Flac.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_ImpulseTracker.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_La.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Midi.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Module.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Mpc.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_MpcSv8.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Mpega.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_OpenMG.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Opus.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Pcm.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Pcm_M2ts.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Pcm_Vob.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Ps2Audio.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Rkau.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_ScreamTracker3.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_SmpteSt0302.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_SmpteSt0331.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_SmpteSt0337.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Speex.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Tak.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Tta.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_TwinVQ.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Vorbis.cpp" />
- <ClCompile Include="MediaInfo\Audio\File_Wvpk.cpp" />
- <ClCompile Include="MediaInfo\Duplicate\File__Duplicate_MpegTs.cpp" />
- <ClCompile Include="MediaInfo\Duplicate\File__Duplicate__Base.cpp" />
- <ClCompile Include="MediaInfo\Duplicate\File__Duplicate__Writer.cpp" />
- <ClCompile Include="MediaInfo\Export\Export_EbuCore.cpp" />
- <ClCompile Include="MediaInfo\Export\Export_Mpeg7.cpp" />
- <ClCompile Include="MediaInfo\Export\Export_PBCore.cpp" />
- <ClCompile Include="MediaInfo\File_Dummy.cpp" />
- <ClCompile Include="MediaInfo\File_Other.cpp" />
- <ClCompile Include="MediaInfo\File_Unknown.cpp" />
- <ClCompile Include="MediaInfo\File__Analyze.cpp" />
- <ClCompile Include="MediaInfo\File__Analyze_Buffer.cpp" />
- <ClCompile Include="MediaInfo\File__Analyze_Buffer_MinimizeSize.cpp" />
- <ClCompile Include="MediaInfo\File__Analyze_Streams.cpp" />
- <ClCompile Include="MediaInfo\File__Analyze_Streams_Finish.cpp" />
- <ClCompile Include="MediaInfo\File__Base.cpp" />
- <ClCompile Include="MediaInfo\File__Duplicate.cpp" />
- <ClCompile Include="MediaInfo\File__MultipleParsing.cpp" />
- <ClCompile Include="MediaInfo\Image\File_ArriRaw.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Bmp.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Dds.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Dpx.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Exr.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Gif.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Ico.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Jpeg.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Pcx.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Png.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Psd.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Rle.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Tga.cpp" />
- <ClCompile Include="MediaInfo\Image\File_Tiff.cpp" />
- <ClCompile Include="MediaInfo\MediaInfo.cpp" />
- <ClCompile Include="MediaInfo\MediaInfoList.cpp" />
- <ClCompile Include="MediaInfo\MediaInfoList_Internal.cpp" />
- <ClCompile Include="MediaInfo\MediaInfo_Config.cpp" />
- <ClCompile Include="MediaInfo\MediaInfo_Config_Automatic.cpp" />
- <ClCompile Include="MediaInfo\MediaInfo_Config_MediaInfo.cpp" />
- <ClCompile Include="MediaInfo\MediaInfo_Config_PerPackage.cpp" />
- <ClCompile Include="MediaInfo\MediaInfo_File.cpp" />
- <ClCompile Include="MediaInfo\MediaInfo_Inform.cpp" />
- <ClCompile Include="MediaInfo\MediaInfo_Internal.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Aaf.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_DashMpd.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_DcpAm.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_DcpCpl.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_DcpPkl.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_HdsF4m.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Pmp.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Ptx.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File__ReferenceFilesHelper.cpp" />
- <ClCompile Include="MediaInfo\PreComp.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio_Sbr.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio_Sbr_Ps.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_Main.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_Others.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Ac3.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Adpcm.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Als.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Amr.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Amv.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Ape.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Au.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Caf.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Celt.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_ChannelGrouping.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_DolbyE.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Dts.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_ExtendedModule.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Flac.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_ImpulseTracker.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_La.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Midi.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Module.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Mpc.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_MpcSv8.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Mpega.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_OpenMG.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Opus.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Pcm.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Pcm_M2ts.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Pcm_Vob.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Ps2Audio.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Rkau.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_ScreamTracker3.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_SmpteSt0302.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_SmpteSt0331.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_SmpteSt0337.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Speex.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Tak.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Tta.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_TwinVQ.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Vorbis.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Wvpk.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Duplicate\File__Duplicate_MpegTs.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Duplicate\File__Duplicate__Base.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Duplicate\File__Duplicate__Writer.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\File_Other.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\File_Unknown.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\File__Analyze.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\File__Analyze_Buffer_MinimizeSize.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\File__Analyze_Streams.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\File__Analyze_Streams_Finish.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\File__Base.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\File__MultipleParsing.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_ArriRaw.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Bmp.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Bpg.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Dds.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Dpx.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Exr.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Gif.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Ico.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Jpeg.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Pcx.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Png.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Psd.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Rle.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Tga.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Tiff.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfoList.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfoList_Internal.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Config.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Config_Automatic.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Config_MediaInfo.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Config_PerPackage.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_File.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Inform.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Internal.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Aaf.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DashMpd.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DcpAm.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DcpCpl.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DcpPkl.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_HdsF4m.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Pmp.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ptx.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper_Resource.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper_Sequence.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\PreComp.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
- <ClCompile Include="MediaInfo\Tag\File_Xmp.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Pdf.cpp" />
- <ClCompile Include="MediaInfo\Text\File_SubRip.cpp" />
- <ClCompile Include="MediaInfo\Text\File_TimedText.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Ttml.cpp" />
- <ClCompile Include="MediaInfo\TimeCode.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Ancillary.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Bdmv.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Cdxa.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Dpg.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_DvDif.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_DvDif_Analysis.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Dvdv.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Dxw.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Flv.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Gxf.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Gxf_TimeCode.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Hls.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Ibi.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Ibi_Creation.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Ism.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Ivf.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Lxf.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Mk.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg4.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg4_Descriptors.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg4_Elements.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg4_TimeCode.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_MpegPs.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_MpegTs.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_MpegTs_Duplicate.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg_Descriptors.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg_Psi.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Mxf.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Nut.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Ogg.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Ogg_SubElement.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_P2_Clip.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Riff.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Riff_Elements.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Rm.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_SequenceInfo.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Skm.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Swf.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Umf.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Wm.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Wm_Elements.cpp" />
- <ClCompile Include="MediaInfo\Multiple\File_Xdcam_Clip.cpp" />
- <ClCompile Include="MediaInfo\Reader\Reader_Directory.cpp" />
- <ClCompile Include="MediaInfo\Reader\Reader_File.cpp" />
- <ClCompile Include="MediaInfo\Reader\Reader_libcurl.cpp" />
- <ClCompile Include="MediaInfo\Reader\Reader_libmms.cpp" />
- <ClCompile Include="MediaInfo\Tag\File_ApeTag.cpp" />
- <ClCompile Include="MediaInfo\Tag\File_Id3.cpp" />
- <ClCompile Include="MediaInfo\Tag\File_Id3v2.cpp" />
- <ClCompile Include="MediaInfo\Tag\File_Lyrics3.cpp" />
- <ClCompile Include="MediaInfo\Tag\File_Lyrics3v2.cpp" />
- <ClCompile Include="MediaInfo\Tag\File_VorbisCom.cpp" />
- <ClCompile Include="MediaInfo\Tag\File__Tags.cpp" />
- <ClCompile Include="MediaInfo\Text\File_AribStdB24B37.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Cdp.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Cmml.cpp" />
- <ClCompile Include="MediaInfo\Text\File_DtvccTransport.cpp" />
- <ClCompile Include="MediaInfo\Text\File_DvbSubtitle.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Eia608.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Eia708.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Kate.cpp" />
- <ClCompile Include="MediaInfo\Text\File_N19.cpp" />
- <ClCompile Include="MediaInfo\Text\File_OtherText.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Pgs.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Scc.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Scte20.cpp" />
- <ClCompile Include="MediaInfo\Text\File_Teletext.cpp" />
- <ClCompile Include="MediaInfo\Video\File_AfdBarData.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Aic.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Avc.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Avc_Duplicate.cpp" />
- <ClCompile Include="MediaInfo\Video\File_AvsV.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Canopus.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Dirac.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Ffv1.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Flic.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Fraps.cpp" />
- <ClCompile Include="MediaInfo\Video\File_H263.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Hevc.cpp" />
- <ClCompile Include="MediaInfo\Video\File_HuffYuv.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Lagarith.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Mpeg4v.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Mpegv.cpp" />
- <ClCompile Include="MediaInfo\Video\File_ProRes.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Theora.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Vc1.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Vc3.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Vp8.cpp" />
- <ClCompile Include="MediaInfo\Video\File_Y4m.cpp" />
- <ClCompile Include="ThirdParty\tinyxml2\tinyxml2.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_PropertyList.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Xmp.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Pdf.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Sdp.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_SubRip.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_TimedText.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Ttml.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\TimeCode.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\XmlUtils.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ancillary.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Bdmv.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Cdxa.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Dpg.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DvDif.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Dvdv.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Dxw.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Flv.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Gxf.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Gxf_TimeCode.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Hls.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ism.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ivf.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Lxf.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mk.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg4.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg4_Descriptors.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg4_Elements.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg4_TimeCode.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_MpegPs.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_MpegTs.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_MpegTs_Duplicate.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg_Descriptors.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg_Psi.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mxf.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Nut.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ogg.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ogg_SubElement.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_P2_Clip.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Riff.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Riff_Elements.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Rm.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_SequenceInfo.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Skm.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Swf.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Umf.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Vbi.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Wm.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Wm_Elements.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Wtv.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Xdcam_Clip.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Reader\Reader_File.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_ApeTag.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Id3.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Id3v2.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Lyrics3.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Lyrics3v2.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_VorbisCom.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Tag\File__Tags.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_AribStdB24B37.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Cdp.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Cmml.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_DtvccTransport.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_DvbSubtitle.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Eia608.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Eia708.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Kate.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Pgs.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Scc.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Scte20.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Teletext.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_AfdBarData.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Aic.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Avc.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Avc_Duplicate.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_AvsV.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Canopus.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Dirac.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Ffv1.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Flic.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Fraps.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_H263.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Hevc.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_HuffYuv.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Lagarith.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Mpeg4v.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Mpegv.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_ProRes.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Theora.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Vc1.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Vc3.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Vp8.cpp" />
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Y4m.cpp" />
+ <ClCompile Include="library\Source\ThirdParty\tinyxml2\tinyxml2.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
</ItemGroup>
diff --git a/src/thirdparty/MediaInfo/MediaInfoLib.vcxproj.filters b/src/thirdparty/MediaInfo/MediaInfoLib.vcxproj.filters
index 7771d86af..b809770af 100644
--- a/src/thirdparty/MediaInfo/MediaInfoLib.vcxproj.filters
+++ b/src/thirdparty/MediaInfo/MediaInfoLib.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="extra">
<UniqueIdentifier>{45366669-16db-4223-8550-a40e7722a6af}</UniqueIdentifier>
@@ -74,1192 +74,1108 @@
</Filter>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="ThirdParty\base64\base64.h">
+ <ClInclude Include="library\Source\ThirdParty\base64\base64.h">
<Filter>extra</Filter>
</ClInclude>
- <ClInclude Include="ThirdParty\tinyxml2\tinyxml2.h">
+ <ClInclude Include="library\Source\ThirdParty\tinyxml2\tinyxml2.h">
<Filter>extra</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\File__Analyse_Automatic.h">
+ <ClInclude Include="library\Source\MediaInfo\File__Analyse_Automatic.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\File__Analyze.h">
+ <ClInclude Include="library\Source\MediaInfo\File__Analyze.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\File__Analyze_MinimizeSize.h">
+ <ClInclude Include="library\Source\MediaInfo\File__Analyze_MinimizeSize.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\File__Base.h">
+ <ClInclude Include="library\Source\MediaInfo\File__Base.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\File__Duplicate.h">
+ <ClInclude Include="library\Source\MediaInfo\File__MultipleParsing.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\File__MultipleParsing.h">
+ <ClInclude Include="library\Source\MediaInfo\File_Other.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\File_Dummy.h">
+ <ClInclude Include="library\Source\MediaInfo\File_Unknown.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\File_Other.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\File_Unknown.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Config.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfo.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Config_MediaInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfo_Config.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Config_PerPackage.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfo_Config_MediaInfo.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Const.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfo_Config_PerPackage.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Events.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfo_Const.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Events_Internal.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfo_Events.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Internal.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfo_Events_Internal.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfo_Internal_Const.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfo_Internal.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfoList.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfo_Internal_Const.h">
+ <ClInclude Include="library\Source\MediaInfo\MediaInfoList_Internal.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfoList.h">
+ <ClInclude Include="library\Source\MediaInfo\PreComp.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\MediaInfoList_Internal.h">
+ <ClInclude Include="library\Source\MediaInfo\Setup.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\PreComp.h">
+ <ClInclude Include="library\Source\MediaInfo\TimeCode.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Setup.h">
+ <ClInclude Include="library\Source\MediaInfo\XmlUtils.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\TimeCode.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_7z.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_Ace.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_Bzip2.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_Elf.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_Gzip.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_Mz.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_Rar.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_Tar.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_Zip.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Duplicate\File__Duplicate__Base.h">
+ <ClInclude Include="library\Source\MediaInfo\Duplicate\File__Duplicate__Base.h">
<Filter>Header Files\Duplicate</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Duplicate\File__Duplicate__Writer.h">
+ <ClInclude Include="library\Source\MediaInfo\Duplicate\File__Duplicate__Writer.h">
<Filter>Header Files\Duplicate</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Duplicate\File__Duplicate_MpegTs.h">
+ <ClInclude Include="library\Source\MediaInfo\Duplicate\File__Duplicate_MpegTs.h">
<Filter>Header Files\Duplicate</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Export\Export_Mpeg7.h">
- <Filter>Header Files\Export</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Export\Export_PBCore.h">
- <Filter>Header Files\Export</Filter>
+ <ClInclude Include="library\Source\MediaInfo\Image\File_ArriRaw.h">
+ <Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_ArriRaw.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Bmp.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Bmp.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Bpg.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Dds.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Dds.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Dpx.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Dpx.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Exr.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Exr.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Gif.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Gif.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Ico.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Ico.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Jpeg.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Jpeg.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Pcx.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Pcx.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Png.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Png.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Psd.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Psd.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Rle.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Rle.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Tiff.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Tiff.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File__ReferenceFilesHelper.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Ancillary.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper_Resource.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Bdmv.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper_Sequence.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Cdxa.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ancillary.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Dpg.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Bdmv.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_DvDif.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Cdxa.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Dvdv.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Dpg.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Dxw.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DvDif.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Flv.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Dvdv.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Gxf.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Dxw.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Gxf_TimeCode.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Flv.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Hls.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Gxf.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Ivf.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Gxf_TimeCode.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Lxf.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Hls.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Mk.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ivf.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg_Descriptors.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Lxf.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg_Psi.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mk.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg4.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg_Descriptors.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg4_Descriptors.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg_Psi.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Mpeg4_TimeCode.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg4.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_MpegPs.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg4_Descriptors.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_MpegTs.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mpeg4_TimeCode.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Mxf.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_MpegPs.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Nut.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_MpegTs.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Ogg.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Mxf.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Ogg_SubElement.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Nut.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_P2_Clip.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ogg.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Riff.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ogg_SubElement.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Rm.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_P2_Clip.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Skm.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Riff.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Swf.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Rm.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Umf.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Skm.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Wm.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Swf.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Xdcam_Clip.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Umf.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Reader\Reader__Base.h">
- <Filter>Header Files\Reader</Filter>
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Vbi.h">
+ <Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Reader\Reader_Directory.h">
- <Filter>Header Files\Reader</Filter>
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Wm.h">
+ <Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Reader\Reader_File.h">
- <Filter>Header Files\Reader</Filter>
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Wtv.h">
+ <Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Reader\Reader_libcurl.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Xdcam_Clip.h">
+ <Filter>Header Files\Multiple</Filter>
+ </ClInclude>
+ <ClInclude Include="library\Source\MediaInfo\Reader\Reader__Base.h">
<Filter>Header Files\Reader</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Reader\Reader_libcurl_Include.h">
+ <ClInclude Include="library\Source\MediaInfo\Reader\Reader_Directory.h">
<Filter>Header Files\Reader</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Reader\Reader_libmms.h">
+ <ClInclude Include="library\Source\MediaInfo\Reader\Reader_File.h">
<Filter>Header Files\Reader</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Tag\File__Tags.h">
+ <ClInclude Include="library\Source\MediaInfo\Tag\File__Tags.h">
<Filter>Header Files\Tag</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Tag\File_ApeTag.h">
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_ApeTag.h">
<Filter>Header Files\Tag</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Tag\File_Id3.h">
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Id3.h">
<Filter>Header Files\Tag</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Tag\File_Id3v2.h">
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Id3v2.h">
<Filter>Header Files\Tag</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Tag\File_Lyrics3.h">
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Lyrics3.h">
<Filter>Header Files\Tag</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Tag\File_Lyrics3v2.h">
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Lyrics3v2.h">
<Filter>Header Files\Tag</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Tag\File_VorbisCom.h">
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_VorbisCom.h">
<Filter>Header Files\Tag</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_AribStdB24B37.h">
- <Filter>Header Files\Text</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Cdp.h">
- <Filter>Header Files\Text</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Cmml.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_AribStdB24B37.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_DtvccTransport.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Cdp.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_DvbSubtitle.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Cmml.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Eia608.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_DtvccTransport.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Eia708.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_DvbSubtitle.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Kate.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Eia608.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_N19.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Eia708.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_OtherText.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Kate.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Pgs.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Pgs.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Scc.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Scc.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Scte20.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Scte20.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Teletext.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Teletext.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_AfdBarData.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_AfdBarData.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Aic.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Aic.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Avc.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Avc.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_AvsV.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_AvsV.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Canopus.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Canopus.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Dirac.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Dirac.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Flic.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Flic.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Fraps.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Fraps.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_H263.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_H263.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Lagarith.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Lagarith.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Mpeg4v.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Mpeg4v.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Mpegv.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Mpegv.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_ProRes.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_ProRes.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Theora.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Theora.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Vc1.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Vc1.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Vc3.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Vc3.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Vp8.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Vp8.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Y4m.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Y4m.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Aac.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Aac.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Aac_GeneralAudio.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Aac_GeneralAudio_Sbr.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio_Sbr.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Aac_GeneralAudio_Sbr_Ps.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio_Sbr_Ps.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Ac3.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Ac3.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Adpcm.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Adpcm.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Als.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Als.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Amr.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Amr.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Amv.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Amv.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Ape.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Ape.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Au.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Au.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Celt.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Caf.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_DolbyE.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Celt.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Dts.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_DolbyE.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_ExtendedModule.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Dts.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Flac.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_ExtendedModule.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_ImpulseTracker.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Flac.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_La.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_ImpulseTracker.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Midi.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_La.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Module.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Midi.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Mpc.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Module.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_MpcSv8.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Mpc.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Mpega.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_MpcSv8.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_OpenMG.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Mpega.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Opus.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_OpenMG.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Pcm.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Opus.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Pcm_M2ts.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Pcm.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Pcm_Vob.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Pcm_M2ts.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Ps2Audio.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Pcm_Vob.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Rkau.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Ps2Audio.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_ScreamTracker3.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Rkau.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_SmpteSt0331.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_ScreamTracker3.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_SmpteSt0337.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_SmpteSt0331.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Speex.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_SmpteSt0337.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Tak.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Speex.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Tta.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Tak.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_TwinVQ.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Tta.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Vorbis.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_TwinVQ.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_Wvpk.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Vorbis.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Archive\File_Iso9660.h">
- <Filter>Header Files\Archive</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_ChannelGrouping.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_Wvpk.h">
<Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Ibi.h">
- <Filter>Header Files\Multiple</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Ibi_Creation.h">
- <Filter>Header Files\Multiple</Filter>
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_ChannelGrouping.h">
+ <Filter>Header Files\Audio</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Ism.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ism.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Image\File_Tga.h">
+ <ClInclude Include="library\Source\MediaInfo\Image\File_Tga.h">
<Filter>Header Files\Image</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_SequenceInfo.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_SequenceInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Audio\File_SmpteSt0302.h">
+ <ClInclude Include="library\Source\MediaInfo\Audio\File_SmpteSt0302.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Pmp.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Pmp.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_SubRip.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_SubRip.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_TimedText.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_TimedText.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Ttml.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Ttml.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Hevc.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Hevc.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_DashMpd.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DashMpd.h">
<Filter>Source Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_DcpAm.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DcpAm.h">
<Filter>Source Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_DcpCpl.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DcpCpl.h">
<Filter>Source Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_DcpPkl.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_DcpPkl.h">
<Filter>Source Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_HdsF4m.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_HdsF4m.h">
<Filter>Source Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Export\Export_EbuCore.h">
- <Filter>Header Files\Export</Filter>
- </ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Aaf.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Aaf.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Multiple\File_Ptx.h">
+ <ClInclude Include="library\Source\MediaInfo\Multiple\File_Ptx.h">
<Filter>Header Files\Multiple</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Tag\File_Xmp.h">
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_Xmp.h">
<Filter>Header Files\Tag</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Text\File_Pdf.h">
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Pdf.h">
<Filter>Header Files\Text</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_Ffv1.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_Ffv1.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
- <ClInclude Include="MediaInfo\Video\File_HuffYuv.h">
+ <ClInclude Include="library\Source\MediaInfo\Video\File_HuffYuv.h">
<Filter>Header Files\Video</Filter>
</ClInclude>
+ <ClInclude Include="library\Source\MediaInfo\Tag\File_PropertyList.h">
+ <Filter>Header Files\Tag</Filter>
+ </ClInclude>
+ <ClInclude Include="library\Source\MediaInfo\Text\File_Sdp.h">
+ <Filter>Header Files\Text</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
- <ClCompile Include="ThirdParty\tinyxml2\tinyxml2.cpp">
+ <ClCompile Include="library\Source\ThirdParty\tinyxml2\tinyxml2.cpp">
<Filter>extra</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\File__Analyze.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\File__Analyze_Buffer.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\File__Analyze_Buffer_MinimizeSize.cpp">
+ <ClCompile Include="library\Source\MediaInfo\File__Analyze.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\File__Analyze_Streams.cpp">
+ <ClCompile Include="library\Source\MediaInfo\File__Analyze_Buffer_MinimizeSize.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\File__Analyze_Streams_Finish.cpp">
+ <ClCompile Include="library\Source\MediaInfo\File__Analyze_Streams.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\File__Base.cpp">
+ <ClCompile Include="library\Source\MediaInfo\File__Analyze_Streams_Finish.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\File__Duplicate.cpp">
+ <ClCompile Include="library\Source\MediaInfo\File__Base.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\File__MultipleParsing.cpp">
+ <ClCompile Include="library\Source\MediaInfo\File__MultipleParsing.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\File_Dummy.cpp">
+ <ClCompile Include="library\Source\MediaInfo\File_Other.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\File_Other.cpp">
+ <ClCompile Include="library\Source\MediaInfo\File_Unknown.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\File_Unknown.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfo.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Config.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfo_Config.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Config_Automatic.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfo_Config_Automatic.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Config_MediaInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfo_Config_MediaInfo.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Config_PerPackage.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfo_Config_PerPackage.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_File.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfo_File.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Inform.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfo_Inform.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfo_Internal.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfo_Internal.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfoList.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfoList.cpp">
+ <ClCompile Include="library\Source\MediaInfo\MediaInfoList_Internal.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\MediaInfoList_Internal.cpp">
+ <ClCompile Include="library\Source\MediaInfo\PreComp.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\PreComp.cpp">
+ <ClCompile Include="library\Source\MediaInfo\TimeCode.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\TimeCode.cpp">
+ <ClCompile Include="library\Source\MediaInfo\XmlUtils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_7z.cpp">
- <Filter>Source Files\Archive</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_Ace.cpp">
- <Filter>Source Files\Archive</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_Bzip2.cpp">
- <Filter>Source Files\Archive</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_Elf.cpp">
- <Filter>Source Files\Archive</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_Gzip.cpp">
- <Filter>Source Files\Archive</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_Mz.cpp">
- <Filter>Source Files\Archive</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_Rar.cpp">
- <Filter>Source Files\Archive</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_Tar.cpp">
- <Filter>Source Files\Archive</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_Zip.cpp">
- <Filter>Source Files\Archive</Filter>
+ <ClCompile Include="library\Source\MediaInfo\Image\File_ArriRaw.cpp">
+ <Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_ArriRaw.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Bmp.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Bmp.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Bpg.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Dds.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Dds.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Dpx.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Dpx.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Exr.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Exr.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Gif.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Gif.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Ico.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Ico.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Jpeg.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Jpeg.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Pcx.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Pcx.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Png.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Png.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Psd.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Psd.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Rle.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Rle.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Tiff.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Tiff.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File__ReferenceFilesHelper.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Ancillary.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper_Resource.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Bdmv.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File__ReferenceFilesHelper_Sequence.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Cdxa.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ancillary.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Dpg.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Bdmv.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_DvDif.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Cdxa.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_DvDif_Analysis.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Dpg.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Dvdv.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DvDif.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Dxw.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Dvdv.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Flv.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Dxw.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Gxf.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Flv.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Gxf_TimeCode.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Gxf.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Hls.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Gxf_TimeCode.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Ivf.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Hls.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Lxf.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ivf.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Mk.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Lxf.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg_Descriptors.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mk.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg_Psi.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg_Descriptors.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg4.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg_Psi.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg4_Descriptors.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg4.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg4_Elements.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg4_Descriptors.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Mpeg4_TimeCode.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg4_Elements.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_MpegPs.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mpeg4_TimeCode.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_MpegTs.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_MpegPs.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_MpegTs_Duplicate.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_MpegTs.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Mxf.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_MpegTs_Duplicate.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Nut.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Mxf.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Ogg.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Nut.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Ogg_SubElement.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ogg.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_P2_Clip.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ogg_SubElement.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Riff.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_P2_Clip.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Riff_Elements.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Riff.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Rm.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Riff_Elements.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Skm.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Rm.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Swf.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Skm.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Umf.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Swf.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Wm.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Umf.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Wm_Elements.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Vbi.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Xdcam_Clip.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Wm.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Duplicate\File__Duplicate__Base.cpp">
- <Filter>Source Files\Duplicate</Filter>
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Wm_Elements.cpp">
+ <Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Duplicate\File__Duplicate__Writer.cpp">
- <Filter>Source Files\Duplicate</Filter>
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Wtv.cpp">
+ <Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Duplicate\File__Duplicate_MpegTs.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Xdcam_Clip.cpp">
+ <Filter>Source Files\Multiple</Filter>
+ </ClCompile>
+ <ClCompile Include="library\Source\MediaInfo\Duplicate\File__Duplicate__Base.cpp">
<Filter>Source Files\Duplicate</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Export\Export_Mpeg7.cpp">
- <Filter>Source Files\Export</Filter>
+ <ClCompile Include="library\Source\MediaInfo\Duplicate\File__Duplicate__Writer.cpp">
+ <Filter>Source Files\Duplicate</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Export\Export_PBCore.cpp">
- <Filter>Source Files\Export</Filter>
+ <ClCompile Include="library\Source\MediaInfo\Duplicate\File__Duplicate_MpegTs.cpp">
+ <Filter>Source Files\Duplicate</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_AfdBarData.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_AfdBarData.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Aic.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Aic.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Avc.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Avc.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Avc_Duplicate.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Avc_Duplicate.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_AvsV.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_AvsV.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Canopus.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Canopus.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Dirac.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Dirac.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Flic.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Flic.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Fraps.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Fraps.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_H263.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_H263.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Lagarith.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Lagarith.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Mpeg4v.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Mpeg4v.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Mpegv.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Mpegv.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_ProRes.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_ProRes.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Theora.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Theora.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Vc1.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Vc1.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Vc3.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Vc3.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Vp8.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Vp8.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Y4m.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Y4m.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_AribStdB24B37.cpp">
- <Filter>Source Files\Text</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Cdp.cpp">
- <Filter>Source Files\Text</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Cmml.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_AribStdB24B37.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_DtvccTransport.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Cdp.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_DvbSubtitle.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Cmml.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Eia608.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_DtvccTransport.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Eia708.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_DvbSubtitle.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Kate.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Eia608.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_N19.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Eia708.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_OtherText.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Kate.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Pgs.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Pgs.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Scc.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Scc.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Scte20.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Scte20.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Teletext.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Teletext.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Reader\Reader_Directory.cpp">
- <Filter>Source Files\Reader</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Reader\Reader_File.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Reader\Reader_File.cpp">
<Filter>Source Files\Reader</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Reader\Reader_libcurl.cpp">
- <Filter>Source Files\Reader</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Reader\Reader_libmms.cpp">
- <Filter>Source Files\Reader</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Tag\File__Tags.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Tag\File__Tags.cpp">
<Filter>Source Files\Tag</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Tag\File_ApeTag.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_ApeTag.cpp">
<Filter>Source Files\Tag</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Tag\File_Id3.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Id3.cpp">
<Filter>Source Files\Tag</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Tag\File_Id3v2.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Id3v2.cpp">
<Filter>Source Files\Tag</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Tag\File_Lyrics3.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Lyrics3.cpp">
<Filter>Source Files\Tag</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Tag\File_Lyrics3v2.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Lyrics3v2.cpp">
<Filter>Source Files\Tag</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Tag\File_VorbisCom.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_VorbisCom.cpp">
<Filter>Source Files\Tag</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Aac.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Aac_GeneralAudio.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Aac_GeneralAudio_Sbr.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio_Sbr.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Aac_GeneralAudio_Sbr_Ps.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_GeneralAudio_Sbr_Ps.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Aac_Main.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_Main.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Aac_Others.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Aac_Others.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Ac3.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Ac3.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Adpcm.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Adpcm.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Als.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Als.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Amr.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Amr.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Amv.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Amv.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Ape.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Ape.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Au.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Au.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Celt.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Caf.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_DolbyE.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Celt.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Dts.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_DolbyE.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_ExtendedModule.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Dts.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Flac.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_ExtendedModule.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_ImpulseTracker.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Flac.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_La.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_ImpulseTracker.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Midi.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_La.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Module.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Midi.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Mpc.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Module.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_MpcSv8.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Mpc.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Mpega.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_MpcSv8.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_OpenMG.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Mpega.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Opus.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_OpenMG.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Pcm.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Opus.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Pcm_M2ts.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Pcm.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Pcm_Vob.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Pcm_M2ts.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Ps2Audio.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Pcm_Vob.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Rkau.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Ps2Audio.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_ScreamTracker3.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Rkau.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_SmpteSt0331.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_ScreamTracker3.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_SmpteSt0337.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_SmpteSt0331.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Speex.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_SmpteSt0337.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Tak.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Speex.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Tta.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Tak.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_TwinVQ.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Tta.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Vorbis.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_TwinVQ.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_Wvpk.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Vorbis.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Archive\File_Iso9660.cpp">
- <Filter>Source Files\Archive</Filter>
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_Wvpk.cpp">
+ <Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_ChannelGrouping.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_ChannelGrouping.cpp">
<Filter>Source Files\Audio</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Image\File_Tga.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Image\File_Tga.cpp">
<Filter>Source Files\Image</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Ibi.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ism.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Ibi_Creation.cpp">
- <Filter>Source Files\Multiple</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Ism.cpp">
- <Filter>Source Files\Multiple</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_SequenceInfo.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_SequenceInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Audio\File_SmpteSt0302.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Audio\File_SmpteSt0302.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Pmp.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Pmp.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_SubRip.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_SubRip.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_TimedText.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_TimedText.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Ttml.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Ttml.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Hevc.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Hevc.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_DashMpd.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DashMpd.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_DcpAm.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DcpAm.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_DcpCpl.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DcpCpl.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_DcpPkl.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_DcpPkl.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_HdsF4m.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_HdsF4m.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Export\Export_EbuCore.cpp">
- <Filter>Source Files\Export</Filter>
- </ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Aaf.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Aaf.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Multiple\File_Ptx.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Multiple\File_Ptx.cpp">
<Filter>Source Files\Multiple</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Tag\File_Xmp.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_Xmp.cpp">
<Filter>Source Files\Tag</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Text\File_Pdf.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Pdf.cpp">
<Filter>Source Files\Text</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_Ffv1.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_Ffv1.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
- <ClCompile Include="MediaInfo\Video\File_HuffYuv.cpp">
+ <ClCompile Include="library\Source\MediaInfo\Video\File_HuffYuv.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
+ <ClCompile Include="library\Source\MediaInfo\Text\File_Sdp.cpp">
+ <Filter>Source Files\Text</Filter>
+ </ClCompile>
+ <ClCompile Include="library\Source\MediaInfo\Tag\File_PropertyList.cpp">
+ <Filter>Source Files\Tag</Filter>
+ </ClCompile>
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/src/thirdparty/MediaInfo/ThirdParty/base64/base64.h b/src/thirdparty/MediaInfo/ThirdParty/base64/base64.h
deleted file mode 100644
index 40a340c61..000000000
--- a/src/thirdparty/MediaInfo/ThirdParty/base64/base64.h
+++ /dev/null
@@ -1,158 +0,0 @@
-//  //
-// #### ### ## -= Base64 library =-  //
-// # # # # # Base64.h - Base64 encoder/decoder  //
-// #### #### # #  //
-// # # # # ##### Encodes and decodes base64 strings  //
-// # # # # # Ideas taken from work done by Bob Withers  //
-// #### ### # R1 2002-05-07 by Markus Ewald  //
-//  //
-#ifndef B64_BASE64_H
-#define B64_BASE64_H
-
-#include <string>
-
-namespace Base64 {
-
- /// Encode string to base64
- inline std::string encode(const std::string &sString);
- /// Encode base64 into string
- inline std::string decode(const std::string &sString);
-
-}; // namespace Base64
-
-// ####################################################################### //
-// # Base64::encode() # //
-// ####################################################################### //
-/** Encodes the specified string to base64
-
- @param sString String to encode
- @return Base64 encoded string
-*/
-inline std::string Base64::encode(const std::string &sString) {
- static const std::string sBase64Table(
- // 0000000000111111111122222222223333333333444444444455555555556666
- // 0123456789012345678901234567890123456789012345678901234567890123
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
- );
- static const char cFillChar = '=';
- std::string::size_type nLength = sString.length();
- std::string sResult;
-
- // Allocate memory for the converted string
- sResult.reserve(nLength * 8 / 6 + 1);
-
- for(std::string::size_type nPos = 0; nPos < nLength; nPos++) {
- char cCode;
-
- // Encode the first 6 bits
- cCode = (sString[nPos] >> 2) & 0x3f;
- sResult.append(1, sBase64Table[cCode]);
-
- // Encode the remaining 2 bits with the next 4 bits (if present)
- cCode = (sString[nPos] << 4) & 0x3f;
- if(++nPos < nLength)
- cCode |= (sString[nPos] >> 4) & 0x0f;
- sResult.append(1, sBase64Table[cCode]);
-
- if(nPos < nLength) {
- cCode = (sString[nPos] << 2) & 0x3f;
- if(++nPos < nLength)
- cCode |= (sString[nPos] >> 6) & 0x03;
-
- sResult.append(1, sBase64Table[cCode]);
- } else {
- ++nPos;
- sResult.append(1, cFillChar);
- }
-
- if(nPos < nLength) {
- cCode = sString[nPos] & 0x3f;
- sResult.append(1, sBase64Table[cCode]);
- } else {
- sResult.append(1, cFillChar);
- }
- }
-
- return sResult;
-}
-
-// ####################################################################### //
-// # Base64::decode() # //
-// ####################################################################### //
-/** Decodes the specified base64 string
-
- @param sString Base64 string to decode
- @return Decoded string
-*/
-inline std::string Base64::decode(const std::string &sString) {
- static const std::string::size_type np = std::string::npos;
- static const std::string::size_type DecodeTable[] = {
- // 0 1 2 3 4 5 6 7 8 9
- np, np, np, np, np, np, np, np, np, np, // 0 - 9
- np, np, np, np, np, np, np, np, np, np, // 10 - 19
- np, np, np, np, np, np, np, np, np, np, // 20 - 29
- np, np, np, np, np, np, np, np, np, np, // 30 - 39
- np, np, np, 62, np, np, np, 63, 52, 53, // 40 - 49
- 54, 55, 56, 57, 58, 59, 60, 61, np, np, // 50 - 59
- np, np, np, np, np, 0, 1, 2, 3, 4, // 60 - 69
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, // 70 - 79
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, // 80 - 89
- 25, np, np, np, np, np, np, 26, 27, 28, // 90 - 99
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, // 100 - 109
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, // 110 - 119
- 49, 50, 51, np, np, np, np, np, np, np, // 120 - 129
- np, np, np, np, np, np, np, np, np, np, // 130 - 139
- np, np, np, np, np, np, np, np, np, np, // 140 - 149
- np, np, np, np, np, np, np, np, np, np, // 150 - 159
- np, np, np, np, np, np, np, np, np, np, // 160 - 169
- np, np, np, np, np, np, np, np, np, np, // 170 - 179
- np, np, np, np, np, np, np, np, np, np, // 180 - 189
- np, np, np, np, np, np, np, np, np, np, // 190 - 199
- np, np, np, np, np, np, np, np, np, np, // 200 - 209
- np, np, np, np, np, np, np, np, np, np, // 210 - 219
- np, np, np, np, np, np, np, np, np, np, // 220 - 229
- np, np, np, np, np, np, np, np, np, np, // 230 - 239
- np, np, np, np, np, np, np, np, np, np, // 240 - 249
- np, np, np, np, np, np // 250 - 256
- };
- static const char cFillChar = '=';
-
- std::string::size_type nLength = sString.length();
- std::string sResult;
-
- sResult.reserve(nLength);
-
- for(std::string::size_type nPos = 0; nPos < nLength; nPos++) {
- unsigned char c, c1;
-
- c = (char) DecodeTable[(unsigned char)sString[nPos]];
- nPos++;
- c1 = (char) DecodeTable[(unsigned char)sString[nPos]];
- c = (c << 2) | ((c1 >> 4) & 0x3);
- sResult.append(1, c);
-
- if(++nPos < nLength) {
- c = sString[nPos];
- if(cFillChar == c)
- break;
-
- c = (char) DecodeTable[(unsigned char)sString[nPos]];
- c1 = ((c1 << 4) & 0xf0) | ((c >> 2) & 0xf);
- sResult.append(1, c1);
- }
-
- if(++nPos < nLength) {
- c1 = sString[nPos];
- if(cFillChar == c1)
- break;
-
- c1 = (char) DecodeTable[(unsigned char)sString[nPos]];
- c = ((c << 6) & 0xc0) | c1;
- sResult.append(1, c);
- }
- }
-
- return sResult;
-}
-
-#endif // B64_BASE64_H
diff --git a/src/thirdparty/MediaInfo/ThirdParty/md5/md5.c b/src/thirdparty/MediaInfo/ThirdParty/md5/md5.c
deleted file mode 100644
index 44e7e0660..000000000
--- a/src/thirdparty/MediaInfo/ThirdParty/md5/md5.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest. This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-#include <md5.h>
-#include <string.h>
-
-#if defined(__sparc__) || defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
-#define byteReverse(buf, len) /* Nothing */
-#else
-void byteReverse(unsigned char *buf, unsigned longs);
-
-#ifndef ASM_MD5
-/*
- * Note: this code is harmless on little-endian machines.
- */
-void byteReverse(unsigned char *buf, unsigned longs)
-{
- uint32_t t;
- do {
- t = (uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
- ((unsigned) buf[1] << 8 | buf[0]);
- *(uint32_t *) buf = t;
- buf += 4;
- } while (--longs);
-}
-#endif
-#endif
-
-/*
- * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
- * initialization constants.
- */
-void MD5Init(struct MD5Context *ctx)
-{
- ctx->buf[0] = 0x67452301;
- ctx->buf[1] = 0xefcdab89;
- ctx->buf[2] = 0x98badcfe;
- ctx->buf[3] = 0x10325476;
-
- ctx->bits[0] = 0;
- ctx->bits[1] = 0;
-}
-
-/*
- * Update context to reflect the concatenation of another buffer full
- * of bytes.
- */
-void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
-{
- uint32_t t;
-
- /* Update bitcount */
-
- t = ctx->bits[0];
- if ((ctx->bits[0] = t + ((uint32_t) len << 3)) < t)
- ctx->bits[1]++; /* Carry from low to high */
- ctx->bits[1] += len >> 29;
-
- t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
-
- /* Handle any leading odd-sized chunks */
-
- if (t) {
- unsigned char *p = (unsigned char *) ctx->in + t;
-
- t = 64 - t;
- if (len < t) {
- memcpy(p, buf, len);
- return;
- }
- memcpy(p, buf, t);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (uint32_t *) ctx->in);
- buf += t;
- len -= t;
- }
- /* Process data in 64-byte chunks */
-
- while (len >= 64) {
- memcpy(ctx->in, buf, 64);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (uint32_t *) ctx->in);
- buf += 64;
- len -= 64;
- }
-
- /* Handle any remaining bytes of data. */
-
- memcpy(ctx->in, buf, len);
-}
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
-{
- unsigned count;
- unsigned char *p;
-
- /* Compute number of bytes mod 64 */
- count = (ctx->bits[0] >> 3) & 0x3F;
-
- /* Set the first char of padding to 0x80. This is safe since there is
- always at least one byte free */
- p = ctx->in + count;
- *p++ = 0x80;
-
- /* Bytes of padding needed to make 64 bytes */
- count = 64 - 1 - count;
-
- /* Pad out to 56 mod 64 */
- if (count < 8) {
- /* Two lots of padding: Pad the first block to 64 bytes */
- memset(p, 0, count);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (uint32_t *) ctx->in);
-
- /* Now fill the next block with 56 bytes */
- memset(ctx->in, 0, 56);
- } else {
- /* Pad block to 56 bytes */
- memset(p, 0, count - 8);
- }
- byteReverse(ctx->in, 14);
-
- /* Append length in bits and transform */
- ((uint32_t *) ctx->in)[14] = ctx->bits[0];
- ((uint32_t *) ctx->in)[15] = ctx->bits[1];
-
- MD5Transform(ctx->buf, (uint32_t *) ctx->in);
- byteReverse((unsigned char *) ctx->buf, 4);
- memcpy(digest, ctx->buf, 16);
- memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
-}
-
-#ifndef ASM_MD5
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
- ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data. MD5Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-void MD5Transform(uint32_t buf[4], uint32_t const in[16])
-{
- register uint32_t a, b, c, d;
-
- a = buf[0];
- b = buf[1];
- c = buf[2];
- d = buf[3];
-
- MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
- MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
- MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
- MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
- MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
- MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
- MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
- MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
- MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
- MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
- MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
- MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
- MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
- MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
- MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
- MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
- MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
- MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
- MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
- MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
- MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
- MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
- MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
- MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
- MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
- MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
- MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
- MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
- MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
- MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
- MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
- MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
- MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
- MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
- MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
- MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
- MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
- MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
- MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
- MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
- MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
- MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
- MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
- MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
- MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
- MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
- MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
- MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
- MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
- MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
- MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
- MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
- MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
- MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
- MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
- MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
- MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
- MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
- MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
- MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
- MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
- MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
- MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
- MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-
- buf[0] += a;
- buf[1] += b;
- buf[2] += c;
- buf[3] += d;
-}
-
-#endif
diff --git a/src/thirdparty/MediaInfo/ThirdParty/md5/md5.h b/src/thirdparty/MediaInfo/ThirdParty/md5/md5.h
deleted file mode 100644
index 485452540..000000000
--- a/src/thirdparty/MediaInfo/ThirdParty/md5/md5.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef MD5_H
-#define MD5_H
-
-#if defined(_MSC_VER) && _MSC_VER < 1600
- typedef unsigned __int32 uint32_t;
-#else
- #include <stdint.h>
-#endif
-
-struct MD5Context {
- uint32_t buf[4];
- uint32_t bits[2];
- unsigned char in[64];
-};
-
-void MD5Init(struct MD5Context *context);
-void MD5Update(struct MD5Context *context, unsigned char const *buf, unsigned len);
-void MD5Final(unsigned char digest[16], struct MD5Context *context);
-void MD5Transform(uint32_t buf[4], uint32_t const in[16]);
-
-#endif /* !MD5_H */
diff --git a/src/thirdparty/MediaInfo/ThirdParty/tinyxml2/tinyxml2.cpp b/src/thirdparty/MediaInfo/ThirdParty/tinyxml2/tinyxml2.cpp
deleted file mode 100644
index c273ebef6..000000000
--- a/src/thirdparty/MediaInfo/ThirdParty/tinyxml2/tinyxml2.cpp
+++ /dev/null
@@ -1,2212 +0,0 @@
-/*
-Original code by Lee Thomason (www.grinninglizard.com)
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any
-damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any
-purpose, including commercial applications, and to alter it and
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must
-not claim that you wrote the original software. If you use this
-software in a product, an acknowledgment in the product documentation
-would be appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and
-must not be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source
-distribution.
-*/
-
-#include "tinyxml2.h"
-
-#include <new> // yes, this one new style header, is in the Android SDK.
-# ifdef ANDROID_NDK
-# include <stddef.h>
-#else
-# include <cstddef>
-#endif
-
-static const char LINE_FEED = (char)0x0a; // all line endings are normalized to LF
-static const char LF = LINE_FEED;
-static const char CARRIAGE_RETURN = (char)0x0d; // CR gets filtered out
-static const char CR = CARRIAGE_RETURN;
-static const char SINGLE_QUOTE = '\'';
-static const char DOUBLE_QUOTE = '\"';
-
-// Bunch of unicode info at:
-// http://www.unicode.org/faq/utf_bom.html
-// ef bb bf (Microsoft "lead bytes") - designates UTF-8
-
-static const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
-static const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
-static const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;
-
-
-#define DELETE_NODE( node ) { \
- if ( node ) { \
- MemPool* pool = node->_memPool; \
- node->~XMLNode(); \
- pool->Free( node ); \
- } \
- }
-#define DELETE_ATTRIBUTE( attrib ) { \
- if ( attrib ) { \
- MemPool* pool = attrib->_memPool; \
- attrib->~XMLAttribute(); \
- pool->Free( attrib ); \
- } \
- }
-
-namespace tinyxml2
-{
-
-struct Entity {
- const char* pattern;
- int length;
- char value;
-};
-
-static const int NUM_ENTITIES = 5;
-static const Entity entities[NUM_ENTITIES] = {
- { "quot", 4, DOUBLE_QUOTE },
- { "amp", 3, '&' },
- { "apos", 4, SINGLE_QUOTE },
- { "lt", 2, '<' },
- { "gt", 2, '>' }
-};
-
-
-StrPair::~StrPair()
-{
- Reset();
-}
-
-
-void StrPair::Reset()
-{
- if ( _flags & NEEDS_DELETE ) {
- delete [] _start;
- }
- _flags = 0;
- _start = 0;
- _end = 0;
-}
-
-
-void StrPair::SetStr( const char* str, int flags )
-{
- Reset();
- size_t len = strlen( str );
- _start = new char[ len+1 ];
- memcpy( _start, str, len+1 );
- _end = _start + len;
- _flags = flags | NEEDS_DELETE;
-}
-
-
-char* StrPair::ParseText( char* p, const char* endTag, int strFlags )
-{
- TIXMLASSERT( endTag && *endTag );
-
- char* start = p;
- char endChar = *endTag;
- size_t length = strlen( endTag );
-
- // Inner loop of text parsing.
- while ( *p ) {
- if ( *p == endChar && strncmp( p, endTag, length ) == 0 ) {
- Set( start, p, strFlags );
- return p + length;
- }
- ++p;
- }
- return 0;
-}
-
-
-char* StrPair::ParseName( char* p )
-{
- char* start = p;
-
- if ( !start || !(*start) ) {
- return 0;
- }
-
- while( *p && ( p == start ? XMLUtil::IsNameStartChar( *p ) : XMLUtil::IsNameChar( *p ) )) {
- ++p;
- }
-
- if ( p > start ) {
- Set( start, p, 0 );
- return p;
- }
- return 0;
-}
-
-
-void StrPair::CollapseWhitespace()
-{
- // Adjusting _start would cause undefined behavior on delete[]
- TIXMLASSERT( ( _flags & NEEDS_DELETE ) == 0 );
- // Trim leading space.
- _start = XMLUtil::SkipWhiteSpace( _start );
-
- if ( _start && *_start ) {
- char* p = _start; // the read pointer
- char* q = _start; // the write pointer
-
- while( *p ) {
- if ( XMLUtil::IsWhiteSpace( *p )) {
- p = XMLUtil::SkipWhiteSpace( p );
- if ( *p == 0 ) {
- break; // don't write to q; this trims the trailing space.
- }
- *q = ' ';
- ++q;
- }
- *q = *p;
- ++q;
- ++p;
- }
- *q = 0;
- }
-}
-
-
-const char* StrPair::GetStr()
-{
- if ( _flags & NEEDS_FLUSH ) {
- *_end = 0;
- _flags ^= NEEDS_FLUSH;
-
- if ( _flags ) {
- char* p = _start; // the read pointer
- char* q = _start; // the write pointer
-
- while( p < _end ) {
- if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == CR ) {
- // CR-LF pair becomes LF
- // CR alone becomes LF
- // LF-CR becomes LF
- if ( *(p+1) == LF ) {
- p += 2;
- }
- else {
- ++p;
- }
- *q++ = LF;
- }
- else if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == LF ) {
- if ( *(p+1) == CR ) {
- p += 2;
- }
- else {
- ++p;
- }
- *q++ = LF;
- }
- else if ( (_flags & NEEDS_ENTITY_PROCESSING) && *p == '&' ) {
- // Entities handled by tinyXML2:
- // - special entities in the entity table [in/out]
- // - numeric character reference [in]
- // &#20013; or &#x4e2d;
-
- if ( *(p+1) == '#' ) {
- const int buflen = 10;
- char buf[buflen] = { 0 };
- int len = 0;
- p = const_cast<char*>( XMLUtil::GetCharacterRef( p, buf, &len ) );
- TIXMLASSERT( 0 <= len && len <= buflen );
- TIXMLASSERT( q + len <= p );
- memcpy( q, buf, len );
- q += len;
- }
- else {
- int i=0;
- for(; i<NUM_ENTITIES; ++i ) {
- if ( strncmp( p+1, entities[i].pattern, entities[i].length ) == 0
- && *(p+entities[i].length+1) == ';' ) {
- // Found an entity convert;
- *q = entities[i].value;
- ++q;
- p += entities[i].length + 2;
- break;
- }
- }
- if ( i == NUM_ENTITIES ) {
- // fixme: treat as error?
- ++p;
- ++q;
- }
- }
- }
- else {
- *q = *p;
- ++p;
- ++q;
- }
- }
- *q = 0;
- }
- // The loop below has plenty going on, and this
- // is a less useful mode. Break it out.
- if ( _flags & COLLAPSE_WHITESPACE ) {
- CollapseWhitespace();
- }
- _flags = (_flags & NEEDS_DELETE);
- }
- return _start;
-}
-
-
-
-
-// --------- XMLUtil ----------- //
-
-const char* XMLUtil::ReadBOM( const char* p, bool* bom )
-{
- *bom = false;
- const unsigned char* pu = reinterpret_cast<const unsigned char*>(p);
- // Check for BOM:
- if ( *(pu+0) == TIXML_UTF_LEAD_0
- && *(pu+1) == TIXML_UTF_LEAD_1
- && *(pu+2) == TIXML_UTF_LEAD_2 ) {
- *bom = true;
- p += 3;
- }
- return p;
-}
-
-
-void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length )
-{
- const unsigned long BYTE_MASK = 0xBF;
- const unsigned long BYTE_MARK = 0x80;
- const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
-
- if (input < 0x80) {
- *length = 1;
- }
- else if ( input < 0x800 ) {
- *length = 2;
- }
- else if ( input < 0x10000 ) {
- *length = 3;
- }
- else if ( input < 0x200000 ) {
- *length = 4;
- }
- else {
- *length = 0; // This code won't covert this correctly anyway.
- return;
- }
-
- output += *length;
-
- // Scary scary fall throughs.
- switch (*length) {
- case 4:
- --output;
- *output = (char)((input | BYTE_MARK) & BYTE_MASK);
- input >>= 6;
- case 3:
- --output;
- *output = (char)((input | BYTE_MARK) & BYTE_MASK);
- input >>= 6;
- case 2:
- --output;
- *output = (char)((input | BYTE_MARK) & BYTE_MASK);
- input >>= 6;
- case 1:
- --output;
- *output = (char)(input | FIRST_BYTE_MARK[*length]);
- default:
- break;
- }
-}
-
-
-const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length )
-{
- // Presume an entity, and pull it out.
- *length = 0;
-
- if ( *(p+1) == '#' && *(p+2) ) {
- unsigned long ucs = 0;
- ptrdiff_t delta = 0;
- unsigned mult = 1;
-
- if ( *(p+2) == 'x' ) {
- // Hexadecimal.
- if ( !*(p+3) ) {
- return 0;
- }
-
- const char* q = p+3;
- q = strchr( q, ';' );
-
- if ( !q || !*q ) {
- return 0;
- }
-
- delta = q-p;
- --q;
-
- while ( *q != 'x' ) {
- if ( *q >= '0' && *q <= '9' ) {
- ucs += mult * (*q - '0');
- }
- else if ( *q >= 'a' && *q <= 'f' ) {
- ucs += mult * (*q - 'a' + 10);
- }
- else if ( *q >= 'A' && *q <= 'F' ) {
- ucs += mult * (*q - 'A' + 10 );
- }
- else {
- return 0;
- }
- mult *= 16;
- --q;
- }
- }
- else {
- // Decimal.
- if ( !*(p+2) ) {
- return 0;
- }
-
- const char* q = p+2;
- q = strchr( q, ';' );
-
- if ( !q || !*q ) {
- return 0;
- }
-
- delta = q-p;
- --q;
-
- while ( *q != '#' ) {
- if ( *q >= '0' && *q <= '9' ) {
- ucs += mult * (*q - '0');
- }
- else {
- return 0;
- }
- mult *= 10;
- --q;
- }
- }
- // convert the UCS to UTF-8
- ConvertUTF32ToUTF8( ucs, value, length );
- return p + delta + 1;
- }
- return p+1;
-}
-
-
-void XMLUtil::ToStr( int v, char* buffer, int bufferSize )
-{
- TIXML_SNPRINTF( buffer, bufferSize, "%d", v );
-}
-
-
-void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize )
-{
- TIXML_SNPRINTF( buffer, bufferSize, "%u", v );
-}
-
-
-void XMLUtil::ToStr( bool v, char* buffer, int bufferSize )
-{
- TIXML_SNPRINTF( buffer, bufferSize, "%d", v ? 1 : 0 );
-}
-
-/*
- ToStr() of a number is a very tricky topic.
- https://github.com/leethomason/tinyxml2/issues/106
-*/
-void XMLUtil::ToStr( float v, char* buffer, int bufferSize )
-{
- TIXML_SNPRINTF( buffer, bufferSize, "%.8g", v );
-}
-
-
-void XMLUtil::ToStr( double v, char* buffer, int bufferSize )
-{
- TIXML_SNPRINTF( buffer, bufferSize, "%.17g", v );
-}
-
-
-bool XMLUtil::ToInt( const char* str, int* value )
-{
- if ( TIXML_SSCANF( str, "%d", value ) == 1 ) {
- return true;
- }
- return false;
-}
-
-bool XMLUtil::ToUnsigned( const char* str, unsigned *value )
-{
- if ( TIXML_SSCANF( str, "%u", value ) == 1 ) {
- return true;
- }
- return false;
-}
-
-bool XMLUtil::ToBool( const char* str, bool* value )
-{
- int ival = 0;
- if ( ToInt( str, &ival )) {
- *value = (ival==0) ? false : true;
- return true;
- }
- if ( StringEqual( str, "true" ) ) {
- *value = true;
- return true;
- }
- else if ( StringEqual( str, "false" ) ) {
- *value = false;
- return true;
- }
- return false;
-}
-
-
-bool XMLUtil::ToFloat( const char* str, float* value )
-{
- if ( TIXML_SSCANF( str, "%f", value ) == 1 ) {
- return true;
- }
- return false;
-}
-
-bool XMLUtil::ToDouble( const char* str, double* value )
-{
- if ( TIXML_SSCANF( str, "%lf", value ) == 1 ) {
- return true;
- }
- return false;
-}
-
-
-char* XMLDocument::Identify( char* p, XMLNode** node )
-{
- XMLNode* returnNode = 0;
- char* start = p;
- p = XMLUtil::SkipWhiteSpace( p );
- if( !p || !*p ) {
- return p;
- }
-
- // What is this thing?
- // These strings define the matching patters:
- static const char* xmlHeader = { "<?" };
- static const char* commentHeader = { "<!--" };
- static const char* dtdHeader = { "<!" };
- static const char* cdataHeader = { "<![CDATA[" };
- static const char* elementHeader = { "<" }; // and a header for everything else; check last.
-
- static const int xmlHeaderLen = 2;
- static const int commentHeaderLen = 4;
- static const int dtdHeaderLen = 2;
- static const int cdataHeaderLen = 9;
- static const int elementHeaderLen = 1;
-
-#if defined(_MSC_VER)
-#pragma warning ( push )
-#pragma warning ( disable : 4127 )
-#endif
- TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLUnknown ) ); // use same memory pool
- TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLDeclaration ) ); // use same memory pool
-#if defined(_MSC_VER)
-#pragma warning (pop)
-#endif
- if ( XMLUtil::StringEqual( p, xmlHeader, xmlHeaderLen ) ) {
- returnNode = new (_commentPool.Alloc()) XMLDeclaration( this );
- returnNode->_memPool = &_commentPool;
- p += xmlHeaderLen;
- }
- else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) {
- returnNode = new (_commentPool.Alloc()) XMLComment( this );
- returnNode->_memPool = &_commentPool;
- p += commentHeaderLen;
- }
- else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) {
- XMLText* text = new (_textPool.Alloc()) XMLText( this );
- returnNode = text;
- returnNode->_memPool = &_textPool;
- p += cdataHeaderLen;
- text->SetCData( true );
- }
- else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) {
- returnNode = new (_commentPool.Alloc()) XMLUnknown( this );
- returnNode->_memPool = &_commentPool;
- p += dtdHeaderLen;
- }
- else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) {
- returnNode = new (_elementPool.Alloc()) XMLElement( this );
- returnNode->_memPool = &_elementPool;
- p += elementHeaderLen;
- }
- else {
- returnNode = new (_textPool.Alloc()) XMLText( this );
- returnNode->_memPool = &_textPool;
- p = start; // Back it up, all the text counts.
- }
-
- *node = returnNode;
- return p;
-}
-
-
-bool XMLDocument::Accept( XMLVisitor* visitor ) const
-{
- if ( visitor->VisitEnter( *this ) ) {
- for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) {
- if ( !node->Accept( visitor ) ) {
- break;
- }
- }
- }
- return visitor->VisitExit( *this );
-}
-
-
-// --------- XMLNode ----------- //
-
-XMLNode::XMLNode( XMLDocument* doc ) :
- _document( doc ),
- _parent( 0 ),
- _firstChild( 0 ), _lastChild( 0 ),
- _prev( 0 ), _next( 0 ),
- _memPool( 0 )
-{
-}
-
-
-XMLNode::~XMLNode()
-{
- DeleteChildren();
- if ( _parent ) {
- _parent->Unlink( this );
- }
-}
-
-const char* XMLNode::Value() const
-{
- return _value.GetStr();
-}
-
-void XMLNode::SetValue( const char* str, bool staticMem )
-{
- if ( staticMem ) {
- _value.SetInternedStr( str );
- }
- else {
- _value.SetStr( str );
- }
-}
-
-
-void XMLNode::DeleteChildren()
-{
- while( _firstChild ) {
- XMLNode* node = _firstChild;
- Unlink( node );
-
- DELETE_NODE( node );
- }
- _firstChild = _lastChild = 0;
-}
-
-
-void XMLNode::Unlink( XMLNode* child )
-{
- if ( child == _firstChild ) {
- _firstChild = _firstChild->_next;
- }
- if ( child == _lastChild ) {
- _lastChild = _lastChild->_prev;
- }
-
- if ( child->_prev ) {
- child->_prev->_next = child->_next;
- }
- if ( child->_next ) {
- child->_next->_prev = child->_prev;
- }
- child->_parent = 0;
-}
-
-
-void XMLNode::DeleteChild( XMLNode* node )
-{
- TIXMLASSERT( node->_parent == this );
- DELETE_NODE( node );
-}
-
-
-XMLNode* XMLNode::InsertEndChild( XMLNode* addThis )
-{
- if (addThis->_document != _document)
- return 0;
-
- if (addThis->_parent)
- addThis->_parent->Unlink( addThis );
- else
- addThis->_memPool->SetTracked();
-
- if ( _lastChild ) {
- TIXMLASSERT( _firstChild );
- TIXMLASSERT( _lastChild->_next == 0 );
- _lastChild->_next = addThis;
- addThis->_prev = _lastChild;
- _lastChild = addThis;
-
- addThis->_next = 0;
- }
- else {
- TIXMLASSERT( _firstChild == 0 );
- _firstChild = _lastChild = addThis;
-
- addThis->_prev = 0;
- addThis->_next = 0;
- }
- addThis->_parent = this;
- return addThis;
-}
-
-
-XMLNode* XMLNode::InsertFirstChild( XMLNode* addThis )
-{
- if (addThis->_document != _document)
- return 0;
-
- if (addThis->_parent)
- addThis->_parent->Unlink( addThis );
- else
- addThis->_memPool->SetTracked();
-
- if ( _firstChild ) {
- TIXMLASSERT( _lastChild );
- TIXMLASSERT( _firstChild->_prev == 0 );
-
- _firstChild->_prev = addThis;
- addThis->_next = _firstChild;
- _firstChild = addThis;
-
- addThis->_prev = 0;
- }
- else {
- TIXMLASSERT( _lastChild == 0 );
- _firstChild = _lastChild = addThis;
-
- addThis->_prev = 0;
- addThis->_next = 0;
- }
- addThis->_parent = this;
- return addThis;
-}
-
-
-XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addThis )
-{
- if (addThis->_document != _document)
- return 0;
-
- TIXMLASSERT( afterThis->_parent == this );
-
- if ( afterThis->_parent != this ) {
- return 0;
- }
-
- if ( afterThis->_next == 0 ) {
- // The last node or the only node.
- return InsertEndChild( addThis );
- }
- if (addThis->_parent)
- addThis->_parent->Unlink( addThis );
- else
- addThis->_memPool->SetTracked();
- addThis->_prev = afterThis;
- addThis->_next = afterThis->_next;
- afterThis->_next->_prev = addThis;
- afterThis->_next = addThis;
- addThis->_parent = this;
- return addThis;
-}
-
-
-
-
-const XMLElement* XMLNode::FirstChildElement( const char* value ) const
-{
- for( XMLNode* node=_firstChild; node; node=node->_next ) {
- XMLElement* element = node->ToElement();
- if ( element ) {
- if ( !value || XMLUtil::StringEqual( element->Name(), value ) ) {
- return element;
- }
- }
- }
- return 0;
-}
-
-
-const XMLElement* XMLNode::LastChildElement( const char* value ) const
-{
- for( XMLNode* node=_lastChild; node; node=node->_prev ) {
- XMLElement* element = node->ToElement();
- if ( element ) {
- if ( !value || XMLUtil::StringEqual( element->Name(), value ) ) {
- return element;
- }
- }
- }
- return 0;
-}
-
-
-const XMLElement* XMLNode::NextSiblingElement( const char* value ) const
-{
- for( XMLNode* node=this->_next; node; node = node->_next ) {
- const XMLElement* element = node->ToElement();
- if ( element
- && (!value || XMLUtil::StringEqual( value, node->Value() ))) {
- return element;
- }
- }
- return 0;
-}
-
-
-const XMLElement* XMLNode::PreviousSiblingElement( const char* value ) const
-{
- for( XMLNode* node=_prev; node; node = node->_prev ) {
- const XMLElement* element = node->ToElement();
- if ( element
- && (!value || XMLUtil::StringEqual( value, node->Value() ))) {
- return element;
- }
- }
- return 0;
-}
-
-
-char* XMLNode::ParseDeep( char* p, StrPair* parentEnd )
-{
- // This is a recursive method, but thinking about it "at the current level"
- // it is a pretty simple flat list:
- // <foo/>
- // <!-- comment -->
- //
- // With a special case:
- // <foo>
- // </foo>
- // <!-- comment -->
- //
- // Where the closing element (/foo) *must* be the next thing after the opening
- // element, and the names must match. BUT the tricky bit is that the closing
- // element will be read by the child.
- //
- // 'endTag' is the end tag for this node, it is returned by a call to a child.
- // 'parentEnd' is the end tag for the parent, which is filled in and returned.
-
- while( p && *p ) {
- XMLNode* node = 0;
-
- p = _document->Identify( p, &node );
- if ( p == 0 || node == 0 ) {
- break;
- }
-
- StrPair endTag;
- p = node->ParseDeep( p, &endTag );
- if ( !p ) {
- DELETE_NODE( node );
- node = 0;
- if ( !_document->Error() ) {
- _document->SetError( XML_ERROR_PARSING, 0, 0 );
- }
- break;
- }
-
- XMLElement* ele = node->ToElement();
- // We read the end tag. Return it to the parent.
- if ( ele && ele->ClosingType() == XMLElement::CLOSING ) {
- if ( parentEnd ) {
- *parentEnd = static_cast<XMLElement*>(node)->_value;
- }
- node->_memPool->SetTracked(); // created and then immediately deleted.
- DELETE_NODE( node );
- return p;
- }
-
- // Handle an end tag returned to this level.
- // And handle a bunch of annoying errors.
- if ( ele ) {
- if ( endTag.Empty() && ele->ClosingType() == XMLElement::OPEN ) {
- _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, node->Value(), 0 );
- p = 0;
- }
- else if ( !endTag.Empty() && ele->ClosingType() != XMLElement::OPEN ) {
- _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, node->Value(), 0 );
- p = 0;
- }
- else if ( !endTag.Empty() ) {
- if ( !XMLUtil::StringEqual( endTag.GetStr(), node->Value() )) {
- _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, node->Value(), 0 );
- p = 0;
- }
- }
- }
- if ( p == 0 ) {
- DELETE_NODE( node );
- node = 0;
- }
- if ( node ) {
- this->InsertEndChild( node );
- }
- }
- return 0;
-}
-
-// --------- XMLText ---------- //
-char* XMLText::ParseDeep( char* p, StrPair* )
-{
- const char* start = p;
- if ( this->CData() ) {
- p = _value.ParseText( p, "]]>", StrPair::NEEDS_NEWLINE_NORMALIZATION );
- if ( !p ) {
- _document->SetError( XML_ERROR_PARSING_CDATA, start, 0 );
- }
- return p;
- }
- else {
- int flags = _document->ProcessEntities() ? StrPair::TEXT_ELEMENT : StrPair::TEXT_ELEMENT_LEAVE_ENTITIES;
- if ( _document->WhitespaceMode() == COLLAPSE_WHITESPACE ) {
- flags |= StrPair::COLLAPSE_WHITESPACE;
- }
-
- p = _value.ParseText( p, "<", flags );
- if ( !p ) {
- _document->SetError( XML_ERROR_PARSING_TEXT, start, 0 );
- }
- if ( p && *p ) {
- return p-1;
- }
- }
- return 0;
-}
-
-
-XMLNode* XMLText::ShallowClone( XMLDocument* doc ) const
-{
- if ( !doc ) {
- doc = _document;
- }
- XMLText* text = doc->NewText( Value() ); // fixme: this will always allocate memory. Intern?
- text->SetCData( this->CData() );
- return text;
-}
-
-
-bool XMLText::ShallowEqual( const XMLNode* compare ) const
-{
- return ( compare->ToText() && XMLUtil::StringEqual( compare->ToText()->Value(), Value() ));
-}
-
-
-bool XMLText::Accept( XMLVisitor* visitor ) const
-{
- return visitor->Visit( *this );
-}
-
-
-// --------- XMLComment ---------- //
-
-XMLComment::XMLComment( XMLDocument* doc ) : XMLNode( doc )
-{
-}
-
-
-XMLComment::~XMLComment()
-{
-}
-
-
-char* XMLComment::ParseDeep( char* p, StrPair* )
-{
- // Comment parses as text.
- const char* start = p;
- p = _value.ParseText( p, "-->", StrPair::COMMENT );
- if ( p == 0 ) {
- _document->SetError( XML_ERROR_PARSING_COMMENT, start, 0 );
- }
- return p;
-}
-
-
-XMLNode* XMLComment::ShallowClone( XMLDocument* doc ) const
-{
- if ( !doc ) {
- doc = _document;
- }
- XMLComment* comment = doc->NewComment( Value() ); // fixme: this will always allocate memory. Intern?
- return comment;
-}
-
-
-bool XMLComment::ShallowEqual( const XMLNode* compare ) const
-{
- const XMLComment* comment = compare->ToComment();
- return ( comment && XMLUtil::StringEqual( comment->Value(), Value() ));
-}
-
-
-bool XMLComment::Accept( XMLVisitor* visitor ) const
-{
- return visitor->Visit( *this );
-}
-
-
-// --------- XMLDeclaration ---------- //
-
-XMLDeclaration::XMLDeclaration( XMLDocument* doc ) : XMLNode( doc )
-{
-}
-
-
-XMLDeclaration::~XMLDeclaration()
-{
- //printf( "~XMLDeclaration\n" );
-}
-
-
-char* XMLDeclaration::ParseDeep( char* p, StrPair* )
-{
- // Declaration parses as text.
- const char* start = p;
- p = _value.ParseText( p, "?>", StrPair::NEEDS_NEWLINE_NORMALIZATION );
- if ( p == 0 ) {
- _document->SetError( XML_ERROR_PARSING_DECLARATION, start, 0 );
- }
- return p;
-}
-
-
-XMLNode* XMLDeclaration::ShallowClone( XMLDocument* doc ) const
-{
- if ( !doc ) {
- doc = _document;
- }
- XMLDeclaration* dec = doc->NewDeclaration( Value() ); // fixme: this will always allocate memory. Intern?
- return dec;
-}
-
-
-bool XMLDeclaration::ShallowEqual( const XMLNode* compare ) const
-{
- const XMLDeclaration* declaration = compare->ToDeclaration();
- return ( declaration && XMLUtil::StringEqual( declaration->Value(), Value() ));
-}
-
-
-
-bool XMLDeclaration::Accept( XMLVisitor* visitor ) const
-{
- return visitor->Visit( *this );
-}
-
-// --------- XMLUnknown ---------- //
-
-XMLUnknown::XMLUnknown( XMLDocument* doc ) : XMLNode( doc )
-{
-}
-
-
-XMLUnknown::~XMLUnknown()
-{
-}
-
-
-char* XMLUnknown::ParseDeep( char* p, StrPair* )
-{
- // Unknown parses as text.
- const char* start = p;
-
- p = _value.ParseText( p, ">", StrPair::NEEDS_NEWLINE_NORMALIZATION );
- if ( !p ) {
- _document->SetError( XML_ERROR_PARSING_UNKNOWN, start, 0 );
- }
- return p;
-}
-
-
-XMLNode* XMLUnknown::ShallowClone( XMLDocument* doc ) const
-{
- if ( !doc ) {
- doc = _document;
- }
- XMLUnknown* text = doc->NewUnknown( Value() ); // fixme: this will always allocate memory. Intern?
- return text;
-}
-
-
-bool XMLUnknown::ShallowEqual( const XMLNode* compare ) const
-{
- const XMLUnknown* unknown = compare->ToUnknown();
- return ( unknown && XMLUtil::StringEqual( unknown->Value(), Value() ));
-}
-
-
-bool XMLUnknown::Accept( XMLVisitor* visitor ) const
-{
- return visitor->Visit( *this );
-}
-
-// --------- XMLAttribute ---------- //
-
-const char* XMLAttribute::Name() const
-{
- return _name.GetStr();
-}
-
-const char* XMLAttribute::Value() const
-{
- return _value.GetStr();
-}
-
-char* XMLAttribute::ParseDeep( char* p, bool processEntities )
-{
- // Parse using the name rules: bug fix, was using ParseText before
- p = _name.ParseName( p );
- if ( !p || !*p ) {
- return 0;
- }
-
- // Skip white space before =
- p = XMLUtil::SkipWhiteSpace( p );
- if ( !p || *p != '=' ) {
- return 0;
- }
-
- ++p; // move up to opening quote
- p = XMLUtil::SkipWhiteSpace( p );
- if ( *p != '\"' && *p != '\'' ) {
- return 0;
- }
-
- char endTag[2] = { *p, 0 };
- ++p; // move past opening quote
-
- p = _value.ParseText( p, endTag, processEntities ? StrPair::ATTRIBUTE_VALUE : StrPair::ATTRIBUTE_VALUE_LEAVE_ENTITIES );
- return p;
-}
-
-
-void XMLAttribute::SetName( const char* n )
-{
- _name.SetStr( n );
-}
-
-
-XMLError XMLAttribute::QueryIntValue( int* value ) const
-{
- if ( XMLUtil::ToInt( Value(), value )) {
- return XML_NO_ERROR;
- }
- return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-XMLError XMLAttribute::QueryUnsignedValue( unsigned int* value ) const
-{
- if ( XMLUtil::ToUnsigned( Value(), value )) {
- return XML_NO_ERROR;
- }
- return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-XMLError XMLAttribute::QueryBoolValue( bool* value ) const
-{
- if ( XMLUtil::ToBool( Value(), value )) {
- return XML_NO_ERROR;
- }
- return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-XMLError XMLAttribute::QueryFloatValue( float* value ) const
-{
- if ( XMLUtil::ToFloat( Value(), value )) {
- return XML_NO_ERROR;
- }
- return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-XMLError XMLAttribute::QueryDoubleValue( double* value ) const
-{
- if ( XMLUtil::ToDouble( Value(), value )) {
- return XML_NO_ERROR;
- }
- return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-void XMLAttribute::SetAttribute( const char* v )
-{
- _value.SetStr( v );
-}
-
-
-void XMLAttribute::SetAttribute( int v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- _value.SetStr( buf );
-}
-
-
-void XMLAttribute::SetAttribute( unsigned v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- _value.SetStr( buf );
-}
-
-
-void XMLAttribute::SetAttribute( bool v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- _value.SetStr( buf );
-}
-
-void XMLAttribute::SetAttribute( double v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- _value.SetStr( buf );
-}
-
-void XMLAttribute::SetAttribute( float v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- _value.SetStr( buf );
-}
-
-
-// --------- XMLElement ---------- //
-XMLElement::XMLElement( XMLDocument* doc ) : XMLNode( doc ),
- _closingType( 0 ),
- _rootAttribute( 0 )
-{
-}
-
-
-XMLElement::~XMLElement()
-{
- while( _rootAttribute ) {
- XMLAttribute* next = _rootAttribute->_next;
- DELETE_ATTRIBUTE( _rootAttribute );
- _rootAttribute = next;
- }
-}
-
-
-XMLAttribute* XMLElement::FindAttribute( const char* name )
-{
- XMLAttribute* a = 0;
- for( a=_rootAttribute; a; a = a->_next ) {
- if ( XMLUtil::StringEqual( a->Name(), name ) ) {
- return a;
- }
- }
- return 0;
-}
-
-
-const XMLAttribute* XMLElement::FindAttribute( const char* name ) const
-{
- XMLAttribute* a = 0;
- for( a=_rootAttribute; a; a = a->_next ) {
- if ( XMLUtil::StringEqual( a->Name(), name ) ) {
- return a;
- }
- }
- return 0;
-}
-
-
-const char* XMLElement::Attribute( const char* name, const char* value ) const
-{
- const XMLAttribute* a = FindAttribute( name );
- if ( !a ) {
- return 0;
- }
- if ( !value || XMLUtil::StringEqual( a->Value(), value )) {
- return a->Value();
- }
- return 0;
-}
-
-
-const char* XMLElement::GetText() const
-{
- if ( FirstChild() && FirstChild()->ToText() ) {
- return FirstChild()->ToText()->Value();
- }
- return 0;
-}
-
-
-void XMLElement::SetText( const char* inText )
-{
- if ( FirstChild() && FirstChild()->ToText() )
- FirstChild()->SetValue( inText );
- else {
- XMLText* theText = GetDocument()->NewText( inText );
- InsertFirstChild( theText );
- }
-}
-
-
-void XMLElement::SetText( int v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- SetText( buf );
-}
-
-
-void XMLElement::SetText( unsigned v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- SetText( buf );
-}
-
-
-void XMLElement::SetText( bool v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- SetText( buf );
-}
-
-
-void XMLElement::SetText( float v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- SetText( buf );
-}
-
-
-void XMLElement::SetText( double v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- SetText( buf );
-}
-
-
-XMLError XMLElement::QueryIntText( int* ival ) const
-{
- if ( FirstChild() && FirstChild()->ToText() ) {
- const char* t = FirstChild()->ToText()->Value();
- if ( XMLUtil::ToInt( t, ival ) ) {
- return XML_SUCCESS;
- }
- return XML_CAN_NOT_CONVERT_TEXT;
- }
- return XML_NO_TEXT_NODE;
-}
-
-
-XMLError XMLElement::QueryUnsignedText( unsigned* uval ) const
-{
- if ( FirstChild() && FirstChild()->ToText() ) {
- const char* t = FirstChild()->ToText()->Value();
- if ( XMLUtil::ToUnsigned( t, uval ) ) {
- return XML_SUCCESS;
- }
- return XML_CAN_NOT_CONVERT_TEXT;
- }
- return XML_NO_TEXT_NODE;
-}
-
-
-XMLError XMLElement::QueryBoolText( bool* bval ) const
-{
- if ( FirstChild() && FirstChild()->ToText() ) {
- const char* t = FirstChild()->ToText()->Value();
- if ( XMLUtil::ToBool( t, bval ) ) {
- return XML_SUCCESS;
- }
- return XML_CAN_NOT_CONVERT_TEXT;
- }
- return XML_NO_TEXT_NODE;
-}
-
-
-XMLError XMLElement::QueryDoubleText( double* dval ) const
-{
- if ( FirstChild() && FirstChild()->ToText() ) {
- const char* t = FirstChild()->ToText()->Value();
- if ( XMLUtil::ToDouble( t, dval ) ) {
- return XML_SUCCESS;
- }
- return XML_CAN_NOT_CONVERT_TEXT;
- }
- return XML_NO_TEXT_NODE;
-}
-
-
-XMLError XMLElement::QueryFloatText( float* fval ) const
-{
- if ( FirstChild() && FirstChild()->ToText() ) {
- const char* t = FirstChild()->ToText()->Value();
- if ( XMLUtil::ToFloat( t, fval ) ) {
- return XML_SUCCESS;
- }
- return XML_CAN_NOT_CONVERT_TEXT;
- }
- return XML_NO_TEXT_NODE;
-}
-
-
-
-XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name )
-{
- XMLAttribute* last = 0;
- XMLAttribute* attrib = 0;
- for( attrib = _rootAttribute;
- attrib;
- last = attrib, attrib = attrib->_next ) {
- if ( XMLUtil::StringEqual( attrib->Name(), name ) ) {
- break;
- }
- }
- if ( !attrib ) {
- attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();
- attrib->_memPool = &_document->_attributePool;
- if ( last ) {
- last->_next = attrib;
- }
- else {
- _rootAttribute = attrib;
- }
- attrib->SetName( name );
- attrib->_memPool->SetTracked(); // always created and linked.
- }
- return attrib;
-}
-
-
-void XMLElement::DeleteAttribute( const char* name )
-{
- XMLAttribute* prev = 0;
- for( XMLAttribute* a=_rootAttribute; a; a=a->_next ) {
- if ( XMLUtil::StringEqual( name, a->Name() ) ) {
- if ( prev ) {
- prev->_next = a->_next;
- }
- else {
- _rootAttribute = a->_next;
- }
- DELETE_ATTRIBUTE( a );
- break;
- }
- prev = a;
- }
-}
-
-
-char* XMLElement::ParseAttributes( char* p )
-{
- const char* start = p;
- XMLAttribute* prevAttribute = 0;
-
- // Read the attributes.
- while( p ) {
- p = XMLUtil::SkipWhiteSpace( p );
- if ( !p || !(*p) ) {
- _document->SetError( XML_ERROR_PARSING_ELEMENT, start, Name() );
- return 0;
- }
-
- // attribute.
- if (XMLUtil::IsNameStartChar( *p ) ) {
- XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();
- attrib->_memPool = &_document->_attributePool;
- attrib->_memPool->SetTracked();
-
- p = attrib->ParseDeep( p, _document->ProcessEntities() );
- if ( !p || Attribute( attrib->Name() ) ) {
- DELETE_ATTRIBUTE( attrib );
- _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, start, p );
- return 0;
- }
- // There is a minor bug here: if the attribute in the source xml
- // document is duplicated, it will not be detected and the
- // attribute will be doubly added. However, tracking the 'prevAttribute'
- // avoids re-scanning the attribute list. Preferring performance for
- // now, may reconsider in the future.
- if ( prevAttribute ) {
- prevAttribute->_next = attrib;
- }
- else {
- _rootAttribute = attrib;
- }
- prevAttribute = attrib;
- }
- // end of the tag
- else if ( *p == '/' && *(p+1) == '>' ) {
- _closingType = CLOSED;
- return p+2; // done; sealed element.
- }
- // end of the tag
- else if ( *p == '>' ) {
- ++p;
- break;
- }
- else {
- _document->SetError( XML_ERROR_PARSING_ELEMENT, start, p );
- return 0;
- }
- }
- return p;
-}
-
-
-//
-// <ele></ele>
-// <ele>foo<b>bar</b></ele>
-//
-char* XMLElement::ParseDeep( char* p, StrPair* strPair )
-{
- // Read the element name.
- p = XMLUtil::SkipWhiteSpace( p );
- if ( !p ) {
- return 0;
- }
-
- // The closing element is the </element> form. It is
- // parsed just like a regular element then deleted from
- // the DOM.
- if ( *p == '/' ) {
- _closingType = CLOSING;
- ++p;
- }
-
- p = _value.ParseName( p );
- if ( _value.Empty() ) {
- return 0;
- }
-
- p = ParseAttributes( p );
- if ( !p || !*p || _closingType ) {
- return p;
- }
-
- p = XMLNode::ParseDeep( p, strPair );
- return p;
-}
-
-
-
-XMLNode* XMLElement::ShallowClone( XMLDocument* doc ) const
-{
- if ( !doc ) {
- doc = _document;
- }
- XMLElement* element = doc->NewElement( Value() ); // fixme: this will always allocate memory. Intern?
- for( const XMLAttribute* a=FirstAttribute(); a; a=a->Next() ) {
- element->SetAttribute( a->Name(), a->Value() ); // fixme: this will always allocate memory. Intern?
- }
- return element;
-}
-
-
-bool XMLElement::ShallowEqual( const XMLNode* compare ) const
-{
- const XMLElement* other = compare->ToElement();
- if ( other && XMLUtil::StringEqual( other->Value(), Value() )) {
-
- const XMLAttribute* a=FirstAttribute();
- const XMLAttribute* b=other->FirstAttribute();
-
- while ( a && b ) {
- if ( !XMLUtil::StringEqual( a->Value(), b->Value() ) ) {
- return false;
- }
- a = a->Next();
- b = b->Next();
- }
- if ( a || b ) {
- // different count
- return false;
- }
- return true;
- }
- return false;
-}
-
-
-bool XMLElement::Accept( XMLVisitor* visitor ) const
-{
- if ( visitor->VisitEnter( *this, _rootAttribute ) ) {
- for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) {
- if ( !node->Accept( visitor ) ) {
- break;
- }
- }
- }
- return visitor->VisitExit( *this );
-}
-
-
-// --------- XMLDocument ----------- //
-XMLDocument::XMLDocument( bool processEntities, Whitespace whitespace ) :
- XMLNode( 0 ),
- _writeBOM( false ),
- _processEntities( processEntities ),
- _errorID( XML_NO_ERROR ),
- _whitespace( whitespace ),
- _errorStr1( 0 ),
- _errorStr2( 0 ),
- _charBuffer( 0 )
-{
- _document = this; // avoid warning about 'this' in initializer list
-}
-
-
-XMLDocument::~XMLDocument()
-{
- DeleteChildren();
- delete [] _charBuffer;
-
-#if 0
- _textPool.Trace( "text" );
- _elementPool.Trace( "element" );
- _commentPool.Trace( "comment" );
- _attributePool.Trace( "attribute" );
-#endif
-
-#ifdef DEBUG
- if ( Error() == false ) {
- TIXMLASSERT( _elementPool.CurrentAllocs() == _elementPool.Untracked() );
- TIXMLASSERT( _attributePool.CurrentAllocs() == _attributePool.Untracked() );
- TIXMLASSERT( _textPool.CurrentAllocs() == _textPool.Untracked() );
- TIXMLASSERT( _commentPool.CurrentAllocs() == _commentPool.Untracked() );
- }
-#endif
-}
-
-
-void XMLDocument::Clear()
-{
- DeleteChildren();
-
- _errorID = XML_NO_ERROR;
- _errorStr1 = 0;
- _errorStr2 = 0;
-
- delete [] _charBuffer;
- _charBuffer = 0;
-}
-
-
-XMLElement* XMLDocument::NewElement( const char* name )
-{
- XMLElement* ele = new (_elementPool.Alloc()) XMLElement( this );
- ele->_memPool = &_elementPool;
- ele->SetName( name );
- return ele;
-}
-
-
-XMLComment* XMLDocument::NewComment( const char* str )
-{
- XMLComment* comment = new (_commentPool.Alloc()) XMLComment( this );
- comment->_memPool = &_commentPool;
- comment->SetValue( str );
- return comment;
-}
-
-
-XMLText* XMLDocument::NewText( const char* str )
-{
- XMLText* text = new (_textPool.Alloc()) XMLText( this );
- text->_memPool = &_textPool;
- text->SetValue( str );
- return text;
-}
-
-
-XMLDeclaration* XMLDocument::NewDeclaration( const char* str )
-{
- XMLDeclaration* dec = new (_commentPool.Alloc()) XMLDeclaration( this );
- dec->_memPool = &_commentPool;
- dec->SetValue( str ? str : "xml version=\"1.0\" encoding=\"UTF-8\"" );
- return dec;
-}
-
-
-XMLUnknown* XMLDocument::NewUnknown( const char* str )
-{
- XMLUnknown* unk = new (_commentPool.Alloc()) XMLUnknown( this );
- unk->_memPool = &_commentPool;
- unk->SetValue( str );
- return unk;
-}
-
-static FILE* callfopen( const char* filepath, const char* mode )
-{
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
- FILE* fp = 0;
- errno_t err = fopen_s( &fp, filepath, mode );
- if ( err ) {
- return 0;
- }
-#else
- FILE* fp = fopen( filepath, mode );
-#endif
- return fp;
-}
-
-XMLError XMLDocument::LoadFile( const char* filename )
-{
- Clear();
- FILE* fp = callfopen( filename, "rb" );
- if ( !fp ) {
- SetError( XML_ERROR_FILE_NOT_FOUND, filename, 0 );
- return _errorID;
- }
- LoadFile( fp );
- fclose( fp );
- return _errorID;
-}
-
-
-XMLError XMLDocument::LoadFile( FILE* fp )
-{
- Clear();
-
- fseek( fp, 0, SEEK_SET );
- if ( fgetc( fp ) == EOF && ferror( fp ) != 0 ) {
- SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
- return _errorID;
- }
-
- fseek( fp, 0, SEEK_END );
- const long filelength = ftell( fp );
- fseek( fp, 0, SEEK_SET );
- if ( filelength == -1L ) {
- SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
- return _errorID;
- }
-
- const size_t size = filelength;
- if ( size == 0 ) {
- SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
- return _errorID;
- }
-
- _charBuffer = new char[size+1];
- size_t read = fread( _charBuffer, 1, size, fp );
- if ( read != size ) {
- SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
- return _errorID;
- }
-
- _charBuffer[size] = 0;
-
- const char* p = _charBuffer;
- p = XMLUtil::SkipWhiteSpace( p );
- p = XMLUtil::ReadBOM( p, &_writeBOM );
- if ( !p || !*p ) {
- SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
- return _errorID;
- }
-
- ParseDeep( _charBuffer + (p-_charBuffer), 0 );
- return _errorID;
-}
-
-
-XMLError XMLDocument::SaveFile( const char* filename, bool compact )
-{
- FILE* fp = callfopen( filename, "w" );
- if ( !fp ) {
- SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, filename, 0 );
- return _errorID;
- }
- SaveFile(fp, compact);
- fclose( fp );
- return _errorID;
-}
-
-
-XMLError XMLDocument::SaveFile( FILE* fp, bool compact )
-{
- XMLPrinter stream( fp, compact );
- Print( &stream );
- return _errorID;
-}
-
-
-XMLError XMLDocument::Parse( const char* p, size_t len )
-{
- const char* start = p;
- Clear();
-
- if ( len == 0 || !p || !*p ) {
- SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
- return _errorID;
- }
- if ( len == (size_t)(-1) ) {
- len = strlen( p );
- }
- _charBuffer = new char[ len+1 ];
- memcpy( _charBuffer, p, len );
- _charBuffer[len] = 0;
-
- p = XMLUtil::SkipWhiteSpace( p );
- p = XMLUtil::ReadBOM( p, &_writeBOM );
- if ( !p || !*p ) {
- SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
- return _errorID;
- }
-
- ptrdiff_t delta = p - start; // skip initial whitespace, BOM, etc.
- ParseDeep( _charBuffer+delta, 0 );
- return _errorID;
-}
-
-
-void XMLDocument::Print( XMLPrinter* streamer ) const
-{
- XMLPrinter stdStreamer( stdout );
- if ( !streamer ) {
- streamer = &stdStreamer;
- }
- Accept( streamer );
-}
-
-
-void XMLDocument::SetError( XMLError error, const char* str1, const char* str2 )
-{
- _errorID = error;
- _errorStr1 = str1;
- _errorStr2 = str2;
-}
-
-
-void XMLDocument::PrintError() const
-{
- if ( _errorID ) {
- static const int LEN = 20;
- char buf1[LEN] = { 0 };
- char buf2[LEN] = { 0 };
-
- if ( _errorStr1 ) {
- TIXML_SNPRINTF( buf1, LEN, "%s", _errorStr1 );
- }
- if ( _errorStr2 ) {
- TIXML_SNPRINTF( buf2, LEN, "%s", _errorStr2 );
- }
-
- printf( "XMLDocument error id=%d str1=%s str2=%s\n",
- _errorID, buf1, buf2 );
- }
-}
-
-
-XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) :
- _elementJustOpened( false ),
- _firstElement( true ),
- _fp( file ),
- _depth( depth ),
- _textDepth( -1 ),
- _processEntities( true ),
- _compactMode( compact )
-{
- for( int i=0; i<ENTITY_RANGE; ++i ) {
- _entityFlag[i] = false;
- _restrictedEntityFlag[i] = false;
- }
- for( int i=0; i<NUM_ENTITIES; ++i ) {
- TIXMLASSERT( entities[i].value < ENTITY_RANGE );
- if ( entities[i].value < ENTITY_RANGE ) {
- _entityFlag[ (int)entities[i].value ] = true;
- }
- }
- _restrictedEntityFlag[(int)'&'] = true;
- _restrictedEntityFlag[(int)'<'] = true;
- _restrictedEntityFlag[(int)'>'] = true; // not required, but consistency is nice
- _buffer.Push( 0 );
-}
-
-
-void XMLPrinter::Print( const char* format, ... )
-{
- va_list va;
- va_start( va, format );
-
- if ( _fp ) {
- vfprintf( _fp, format, va );
- }
- else {
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
- #if defined(WINCE)
- int len = 512;
- do {
- len = len*2;
- char* str = new char[len]();
- len = _vsnprintf(str, len, format, va);
- delete[] str;
- }while (len < 0);
- #else
- int len = _vscprintf( format, va );
- #endif
-#else
- int len = vsnprintf( 0, 0, format, va );
-#endif
- // Close out and re-start the va-args
- va_end( va );
- va_start( va, format );
- char* p = _buffer.PushArr( len ) - 1; // back up over the null terminator.
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
- #if defined(WINCE)
- _vsnprintf( p, len+1, format, va );
- #else
- vsnprintf_s( p, len+1, _TRUNCATE, format, va );
- #endif
-#else
- vsnprintf( p, len+1, format, va );
-#endif
- }
- va_end( va );
-}
-
-
-void XMLPrinter::PrintSpace( int depth )
-{
- for( int i=0; i<depth; ++i ) {
- Print( " " );
- }
-}
-
-
-void XMLPrinter::PrintString( const char* p, bool restricted )
-{
- // Look for runs of bytes between entities to print.
- const char* q = p;
- const bool* flag = restricted ? _restrictedEntityFlag : _entityFlag;
-
- if ( _processEntities ) {
- while ( *q ) {
- // Remember, char is sometimes signed. (How many times has that bitten me?)
- if ( *q > 0 && *q < ENTITY_RANGE ) {
- // Check for entities. If one is found, flush
- // the stream up until the entity, write the
- // entity, and keep looking.
- if ( flag[(unsigned)(*q)] ) {
- while ( p < q ) {
- Print( "%c", *p );
- ++p;
- }
- for( int i=0; i<NUM_ENTITIES; ++i ) {
- if ( entities[i].value == *q ) {
- Print( "&%s;", entities[i].pattern );
- break;
- }
- }
- ++p;
- }
- }
- ++q;
- }
- }
- // Flush the remaining string. This will be the entire
- // string if an entity wasn't found.
- if ( !_processEntities || (q-p > 0) ) {
- Print( "%s", p );
- }
-}
-
-
-void XMLPrinter::PushHeader( bool writeBOM, bool writeDec )
-{
- if ( writeBOM ) {
- static const unsigned char bom[] = { TIXML_UTF_LEAD_0, TIXML_UTF_LEAD_1, TIXML_UTF_LEAD_2, 0 };
- Print( "%s", bom );
- }
- if ( writeDec ) {
- PushDeclaration( "xml version=\"1.0\"" );
- }
-}
-
-
-void XMLPrinter::OpenElement( const char* name, bool compactMode )
-{
- if ( _elementJustOpened ) {
- SealElement();
- }
- _stack.Push( name );
-
- if ( _textDepth < 0 && !_firstElement && !compactMode ) {
- Print( "\n" );
- }
- if ( !compactMode ) {
- PrintSpace( _depth );
- }
-
- Print( "<%s", name );
- _elementJustOpened = true;
- _firstElement = false;
- ++_depth;
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, const char* value )
-{
- TIXMLASSERT( _elementJustOpened );
- Print( " %s=\"", name );
- PrintString( value, false );
- Print( "\"" );
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, int v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- PushAttribute( name, buf );
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, unsigned v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- PushAttribute( name, buf );
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, bool v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- PushAttribute( name, buf );
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, double v )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( v, buf, BUF_SIZE );
- PushAttribute( name, buf );
-}
-
-
-void XMLPrinter::CloseElement( bool compactMode )
-{
- --_depth;
- const char* name = _stack.Pop();
-
- if ( _elementJustOpened ) {
- Print( "/>" );
- }
- else {
- if ( _textDepth < 0 && !compactMode) {
- Print( "\n" );
- PrintSpace( _depth );
- }
- Print( "</%s>", name );
- }
-
- if ( _textDepth == _depth ) {
- _textDepth = -1;
- }
- if ( _depth == 0 && !compactMode) {
- Print( "\n" );
- }
- _elementJustOpened = false;
-}
-
-
-void XMLPrinter::SealElement()
-{
- _elementJustOpened = false;
- Print( ">" );
-}
-
-
-void XMLPrinter::PushText( const char* text, bool cdata )
-{
- _textDepth = _depth-1;
-
- if ( _elementJustOpened ) {
- SealElement();
- }
- if ( cdata ) {
- Print( "<![CDATA[" );
- Print( "%s", text );
- Print( "]]>" );
- }
- else {
- PrintString( text, true );
- }
-}
-
-void XMLPrinter::PushText( int value )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( value, buf, BUF_SIZE );
- PushText( buf, false );
-}
-
-
-void XMLPrinter::PushText( unsigned value )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( value, buf, BUF_SIZE );
- PushText( buf, false );
-}
-
-
-void XMLPrinter::PushText( bool value )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( value, buf, BUF_SIZE );
- PushText( buf, false );
-}
-
-
-void XMLPrinter::PushText( float value )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( value, buf, BUF_SIZE );
- PushText( buf, false );
-}
-
-
-void XMLPrinter::PushText( double value )
-{
- char buf[BUF_SIZE];
- XMLUtil::ToStr( value, buf, BUF_SIZE );
- PushText( buf, false );
-}
-
-
-void XMLPrinter::PushComment( const char* comment )
-{
- if ( _elementJustOpened ) {
- SealElement();
- }
- if ( _textDepth < 0 && !_firstElement && !_compactMode) {
- Print( "\n" );
- PrintSpace( _depth );
- }
- _firstElement = false;
- Print( "<!--%s-->", comment );
-}
-
-
-void XMLPrinter::PushDeclaration( const char* value )
-{
- if ( _elementJustOpened ) {
- SealElement();
- }
- if ( _textDepth < 0 && !_firstElement && !_compactMode) {
- Print( "\n" );
- PrintSpace( _depth );
- }
- _firstElement = false;
- Print( "<?%s?>", value );
-}
-
-
-void XMLPrinter::PushUnknown( const char* value )
-{
- if ( _elementJustOpened ) {
- SealElement();
- }
- if ( _textDepth < 0 && !_firstElement && !_compactMode) {
- Print( "\n" );
- PrintSpace( _depth );
- }
- _firstElement = false;
- Print( "<!%s>", value );
-}
-
-
-bool XMLPrinter::VisitEnter( const XMLDocument& doc )
-{
- _processEntities = doc.ProcessEntities();
- if ( doc.HasBOM() ) {
- PushHeader( true, false );
- }
- return true;
-}
-
-
-bool XMLPrinter::VisitEnter( const XMLElement& element, const XMLAttribute* attribute )
-{
- const XMLElement* parentElem = element.Parent()->ToElement();
- bool compactMode = parentElem ? CompactMode(*parentElem) : _compactMode;
- OpenElement( element.Name(), compactMode );
- while ( attribute ) {
- PushAttribute( attribute->Name(), attribute->Value() );
- attribute = attribute->Next();
- }
- return true;
-}
-
-
-bool XMLPrinter::VisitExit( const XMLElement& element )
-{
- CloseElement( CompactMode(element) );
- return true;
-}
-
-
-bool XMLPrinter::Visit( const XMLText& text )
-{
- PushText( text.Value(), text.CData() );
- return true;
-}
-
-
-bool XMLPrinter::Visit( const XMLComment& comment )
-{
- PushComment( comment.Value() );
- return true;
-}
-
-bool XMLPrinter::Visit( const XMLDeclaration& declaration )
-{
- PushDeclaration( declaration.Value() );
- return true;
-}
-
-
-bool XMLPrinter::Visit( const XMLUnknown& unknown )
-{
- PushUnknown( unknown.Value() );
- return true;
-}
-
-} // namespace tinyxml2
-
diff --git a/src/thirdparty/MediaInfo/ThirdParty/tinyxml2/tinyxml2.h b/src/thirdparty/MediaInfo/ThirdParty/tinyxml2/tinyxml2.h
deleted file mode 100644
index 61c15f694..000000000
--- a/src/thirdparty/MediaInfo/ThirdParty/tinyxml2/tinyxml2.h
+++ /dev/null
@@ -1,2076 +0,0 @@
-/*
-Original code by Lee Thomason (www.grinninglizard.com)
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any
-damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any
-purpose, including commercial applications, and to alter it and
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must
-not claim that you wrote the original software. If you use this
-software in a product, an acknowledgment in the product documentation
-would be appreciated but is not required.
-
-
-2. Altered source versions must be plainly marked as such, and
-must not be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source
-distribution.
-*/
-
-#ifndef TINYXML2_INCLUDED
-#define TINYXML2_INCLUDED
-
-#if defined(ANDROID_NDK) || defined(__BORLANDC__)
-# include <ctype.h>
-# include <limits.h>
-# include <stdio.h>
-# include <stdlib.h>
-# include <string.h>
-# include <stdarg.h>
-#else
-# include <cctype>
-# include <climits>
-# include <cstdio>
-# include <cstdlib>
-# include <cstring>
-# include <cstdarg>
-#endif
-
-/*
- TODO: intern strings instead of allocation.
-*/
-/*
- gcc:
- g++ -Wall -DDEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe
-
- Formatting, Artistic Style:
- AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h
-*/
-
-#if defined( _DEBUG ) || defined( DEBUG ) || defined (__DEBUG__)
-# ifndef DEBUG
-# define DEBUG
-# endif
-#endif
-
-#ifdef _MSC_VER
-# pragma warning(push)
-# pragma warning(disable: 4251)
-#endif
-
-#ifdef _WIN32
-# ifdef TINYXML2_EXPORT
-# define TINYXML2_LIB __declspec(dllexport)
-# elif defined(TINYXML2_IMPORT)
-# define TINYXML2_LIB __declspec(dllimport)
-# else
-# define TINYXML2_LIB
-# endif
-#else
-# define TINYXML2_LIB
-#endif
-
-
-#if defined(DEBUG)
-# if defined(_MSC_VER)
-# define TIXMLASSERT( x ) if ( !(x)) { __debugbreak(); } //if ( !(x)) WinDebugBreak()
-# elif defined (ANDROID_NDK)
-# include <android/log.h>
-# define TIXMLASSERT( x ) if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); }
-# else
-# include <assert.h>
-# define TIXMLASSERT assert
-# endif
-# else
-# define TIXMLASSERT( x ) {}
-#endif
-
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
-// Microsoft visual studio, version 2005 and higher.
-/*int _snprintf_s(
- char *buffer,
- size_t sizeOfBuffer,
- size_t count,
- const char *format [,
- argument] ...
-);*/
-inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... )
-{
- va_list va;
- va_start( va, format );
- int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va );
- va_end( va );
- return result;
-}
-#define TIXML_SSCANF sscanf_s
-#elif defined WINCE
-#define TIXML_SNPRINTF _snprintf
-#define TIXML_SSCANF sscanf
-#else
-// GCC version 3 and higher
-//#warning( "Using sn* functions." )
-#define TIXML_SNPRINTF snprintf
-#define TIXML_SSCANF sscanf
-#endif
-
-/* Versioning, past 1.0.14:
- http://semver.org/
-*/
-static const int TIXML2_MAJOR_VERSION = 2;
-static const int TIXML2_MINOR_VERSION = 1;
-static const int TIXML2_PATCH_VERSION = 0;
-
-namespace tinyxml2
-{
-class XMLDocument;
-class XMLElement;
-class XMLAttribute;
-class XMLComment;
-class XMLText;
-class XMLDeclaration;
-class XMLUnknown;
-class XMLPrinter;
-
-/*
- A class that wraps strings. Normally stores the start and end
- pointers into the XML file itself, and will apply normalization
- and entity translation if actually read. Can also store (and memory
- manage) a traditional char[]
-*/
-class StrPair
-{
-public:
- enum {
- NEEDS_ENTITY_PROCESSING = 0x01,
- NEEDS_NEWLINE_NORMALIZATION = 0x02,
- COLLAPSE_WHITESPACE = 0x04,
-
- TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
- TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
- ATTRIBUTE_NAME = 0,
- ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
- ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
- COMMENT = NEEDS_NEWLINE_NORMALIZATION
- };
-
- StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {}
- ~StrPair();
-
- void Set( char* start, char* end, int flags ) {
- Reset();
- _start = start;
- _end = end;
- _flags = flags | NEEDS_FLUSH;
- }
-
- const char* GetStr();
-
- bool Empty() const {
- return _start == _end;
- }
-
- void SetInternedStr( const char* str ) {
- Reset();
- _start = const_cast<char*>(str);
- }
-
- void SetStr( const char* str, int flags=0 );
-
- char* ParseText( char* in, const char* endTag, int strFlags );
- char* ParseName( char* in );
-
-private:
- void Reset();
- void CollapseWhitespace();
-
- enum {
- NEEDS_FLUSH = 0x100,
- NEEDS_DELETE = 0x200
- };
-
- // After parsing, if *_end != 0, it can be set to zero.
- int _flags;
- char* _start;
- char* _end;
-};
-
-
-/*
- A dynamic array of Plain Old Data. Doesn't support constructors, etc.
- Has a small initial memory pool, so that low or no usage will not
- cause a call to new/delete
-*/
-template <class T, int INIT>
-class DynArray
-{
-public:
- DynArray< T, INIT >() {
- _mem = _pool;
- _allocated = INIT;
- _size = 0;
- }
-
- ~DynArray() {
- if ( _mem != _pool ) {
- delete [] _mem;
- }
- }
-
- void Clear() {
- _size = 0;
- }
-
- void Push( T t ) {
- EnsureCapacity( _size+1 );
- _mem[_size++] = t;
- }
-
- T* PushArr( int count ) {
- EnsureCapacity( _size+count );
- T* ret = &_mem[_size];
- _size += count;
- return ret;
- }
-
- T Pop() {
- return _mem[--_size];
- }
-
- void PopArr( int count ) {
- TIXMLASSERT( _size >= count );
- _size -= count;
- }
-
- bool Empty() const {
- return _size == 0;
- }
-
- T& operator[](int i) {
- TIXMLASSERT( i>= 0 && i < _size );
- return _mem[i];
- }
-
- const T& operator[](int i) const {
- TIXMLASSERT( i>= 0 && i < _size );
- return _mem[i];
- }
-
- const T& PeekTop() const {
- TIXMLASSERT( _size > 0 );
- return _mem[ _size - 1];
- }
-
- int Size() const {
- return _size;
- }
-
- int Capacity() const {
- return _allocated;
- }
-
- const T* Mem() const {
- return _mem;
- }
-
- T* Mem() {
- return _mem;
- }
-
-private:
- void EnsureCapacity( int cap ) {
- if ( cap > _allocated ) {
- int newAllocated = cap * 2;
- T* newMem = new T[newAllocated];
- memcpy( newMem, _mem, sizeof(T)*_size ); // warning: not using constructors, only works for PODs
- if ( _mem != _pool ) {
- delete [] _mem;
- }
- _mem = newMem;
- _allocated = newAllocated;
- }
- }
-
- T* _mem;
- T _pool[INIT];
- int _allocated; // objects allocated
- int _size; // number objects in use
-};
-
-
-/*
- Parent virtual class of a pool for fast allocation
- and deallocation of objects.
-*/
-class MemPool
-{
-public:
- MemPool() {}
- virtual ~MemPool() {}
-
- virtual int ItemSize() const = 0;
- virtual void* Alloc() = 0;
- virtual void Free( void* ) = 0;
- virtual void SetTracked() = 0;
-};
-
-
-/*
- Template child class to create pools of the correct type.
-*/
-template< int SIZE >
-class MemPoolT : public MemPool
-{
-public:
- MemPoolT() : _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {}
- ~MemPoolT() {
- // Delete the blocks.
- for( int i=0; i<_blockPtrs.Size(); ++i ) {
- delete _blockPtrs[i];
- }
- }
-
- virtual int ItemSize() const {
- return SIZE;
- }
- int CurrentAllocs() const {
- return _currentAllocs;
- }
-
- virtual void* Alloc() {
- if ( !_root ) {
- // Need a new block.
- Block* block = new Block();
- _blockPtrs.Push( block );
-
- for( int i=0; i<COUNT-1; ++i ) {
- block->chunk[i].next = &block->chunk[i+1];
- }
- block->chunk[COUNT-1].next = 0;
- _root = block->chunk;
- }
- void* result = _root;
- _root = _root->next;
-
- ++_currentAllocs;
- if ( _currentAllocs > _maxAllocs ) {
- _maxAllocs = _currentAllocs;
- }
- _nAllocs++;
- _nUntracked++;
- return result;
- }
- virtual void Free( void* mem ) {
- if ( !mem ) {
- return;
- }
- --_currentAllocs;
- Chunk* chunk = static_cast<Chunk*>( mem );
-#ifdef DEBUG
- memset( chunk, 0xfe, sizeof(Chunk) );
-#endif
- chunk->next = _root;
- _root = chunk;
- }
- void Trace( const char* name ) {
- printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
- name, _maxAllocs, _maxAllocs*SIZE/1024, _currentAllocs, SIZE, _nAllocs, _blockPtrs.Size() );
- }
-
- void SetTracked() {
- _nUntracked--;
- }
-
- int Untracked() const {
- return _nUntracked;
- }
-
- // This number is perf sensitive. 4k seems like a good tradeoff on my machine.
- // The test file is large, 170k.
- // Release: VS2010 gcc(no opt)
- // 1k: 4000
- // 2k: 4000
- // 4k: 3900 21000
- // 16k: 5200
- // 32k: 4300
- // 64k: 4000 21000
- enum { COUNT = (4*1024)/SIZE }; // Some compilers do not accept to use COUNT in private part if COUNT is private
-
-private:
- union Chunk {
- Chunk* next;
- char mem[SIZE];
- };
- struct Block {
- Chunk chunk[COUNT];
- };
- DynArray< Block*, 10 > _blockPtrs;
- Chunk* _root;
-
- int _currentAllocs;
- int _nAllocs;
- int _maxAllocs;
- int _nUntracked;
-};
-
-
-
-/**
- Implements the interface to the "Visitor pattern" (see the Accept() method.)
- If you call the Accept() method, it requires being passed a XMLVisitor
- class to handle callbacks. For nodes that contain other nodes (Document, Element)
- you will get called with a VisitEnter/VisitExit pair. Nodes that are always leafs
- are simply called with Visit().
-
- If you return 'true' from a Visit method, recursive parsing will continue. If you return
- false, <b>no children of this node or its siblings</b> will be visited.
-
- All flavors of Visit methods have a default implementation that returns 'true' (continue
- visiting). You need to only override methods that are interesting to you.
-
- Generally Accept() is called on the XMLDocument, although all nodes support visiting.
-
- You should never change the document from a callback.
-
- @sa XMLNode::Accept()
-*/
-class TINYXML2_LIB XMLVisitor
-{
-public:
- virtual ~XMLVisitor() {}
-
- /// Visit a document.
- virtual bool VisitEnter( const XMLDocument& /*doc*/ ) {
- return true;
- }
- /// Visit a document.
- virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
- return true;
- }
-
- /// Visit an element.
- virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) {
- return true;
- }
- /// Visit an element.
- virtual bool VisitExit( const XMLElement& /*element*/ ) {
- return true;
- }
-
- /// Visit a declaration.
- virtual bool Visit( const XMLDeclaration& /*declaration*/ ) {
- return true;
- }
- /// Visit a text node.
- virtual bool Visit( const XMLText& /*text*/ ) {
- return true;
- }
- /// Visit a comment node.
- virtual bool Visit( const XMLComment& /*comment*/ ) {
- return true;
- }
- /// Visit an unknown node.
- virtual bool Visit( const XMLUnknown& /*unknown*/ ) {
- return true;
- }
-};
-
-
-/*
- Utility functionality.
-*/
-class XMLUtil
-{
-public:
- // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't
- // correct, but simple, and usually works.
- static const char* SkipWhiteSpace( const char* p ) {
- while( !IsUTF8Continuation(*p) && isspace( *reinterpret_cast<const unsigned char*>(p) ) ) {
- ++p;
- }
- return p;
- }
- static char* SkipWhiteSpace( char* p ) {
- while( !IsUTF8Continuation(*p) && isspace( *reinterpret_cast<unsigned char*>(p) ) ) {
- ++p;
- }
- return p;
- }
- static bool IsWhiteSpace( char p ) {
- return !IsUTF8Continuation(p) && isspace( static_cast<unsigned char>(p) );
- }
-
- inline static bool IsNameStartChar( unsigned char ch ) {
- return ( ( ch < 128 ) ? isalpha( ch ) : 1 )
- || ch == ':'
- || ch == '_';
- }
-
- inline static bool IsNameChar( unsigned char ch ) {
- return IsNameStartChar( ch )
- || isdigit( ch )
- || ch == '.'
- || ch == '-';
- }
-
- inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) {
- int n = 0;
- if ( p == q ) {
- return true;
- }
- while( *p && *q && *p == *q && n<nChar ) {
- ++p;
- ++q;
- ++n;
- }
- if ( (n == nChar) || ( *p == 0 && *q == 0 ) ) {
- return true;
- }
- return false;
- }
-
- inline static int IsUTF8Continuation( const char p ) {
- return p & 0x80;
- }
-
- static const char* ReadBOM( const char* p, bool* hasBOM );
- // p is the starting location,
- // the UTF-8 value of the entity will be placed in value, and length filled in.
- static const char* GetCharacterRef( const char* p, char* value, int* length );
- static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );
-
- // converts primitive types to strings
- static void ToStr( int v, char* buffer, int bufferSize );
- static void ToStr( unsigned v, char* buffer, int bufferSize );
- static void ToStr( bool v, char* buffer, int bufferSize );
- static void ToStr( float v, char* buffer, int bufferSize );
- static void ToStr( double v, char* buffer, int bufferSize );
-
- // converts strings to primitive types
- static bool ToInt( const char* str, int* value );
- static bool ToUnsigned( const char* str, unsigned* value );
- static bool ToBool( const char* str, bool* value );
- static bool ToFloat( const char* str, float* value );
- static bool ToDouble( const char* str, double* value );
-};
-
-
-/** XMLNode is a base class for every object that is in the
- XML Document Object Model (DOM), except XMLAttributes.
- Nodes have siblings, a parent, and children which can
- be navigated. A node is always in a XMLDocument.
- The type of a XMLNode can be queried, and it can
- be cast to its more defined type.
-
- A XMLDocument allocates memory for all its Nodes.
- When the XMLDocument gets deleted, all its Nodes
- will also be deleted.
-
- @verbatim
- A Document can contain: Element (container or leaf)
- Comment (leaf)
- Unknown (leaf)
- Declaration( leaf )
-
- An Element can contain: Element (container or leaf)
- Text (leaf)
- Attributes (not on tree)
- Comment (leaf)
- Unknown (leaf)
-
- @endverbatim
-*/
-class TINYXML2_LIB XMLNode
-{
- friend class XMLDocument;
- friend class XMLElement;
-public:
-
- /// Get the XMLDocument that owns this XMLNode.
- const XMLDocument* GetDocument() const {
- return _document;
- }
- /// Get the XMLDocument that owns this XMLNode.
- XMLDocument* GetDocument() {
- return _document;
- }
-
- /// Safely cast to an Element, or null.
- virtual XMLElement* ToElement() {
- return 0;
- }
- /// Safely cast to Text, or null.
- virtual XMLText* ToText() {
- return 0;
- }
- /// Safely cast to a Comment, or null.
- virtual XMLComment* ToComment() {
- return 0;
- }
- /// Safely cast to a Document, or null.
- virtual XMLDocument* ToDocument() {
- return 0;
- }
- /// Safely cast to a Declaration, or null.
- virtual XMLDeclaration* ToDeclaration() {
- return 0;
- }
- /// Safely cast to an Unknown, or null.
- virtual XMLUnknown* ToUnknown() {
- return 0;
- }
-
- virtual const XMLElement* ToElement() const {
- return 0;
- }
- virtual const XMLText* ToText() const {
- return 0;
- }
- virtual const XMLComment* ToComment() const {
- return 0;
- }
- virtual const XMLDocument* ToDocument() const {
- return 0;
- }
- virtual const XMLDeclaration* ToDeclaration() const {
- return 0;
- }
- virtual const XMLUnknown* ToUnknown() const {
- return 0;
- }
-
- /** The meaning of 'value' changes for the specific type.
- @verbatim
- Document: empty
- Element: name of the element
- Comment: the comment text
- Unknown: the tag contents
- Text: the text string
- @endverbatim
- */
- const char* Value() const;
-
- /** Set the Value of an XML node.
- @sa Value()
- */
- void SetValue( const char* val, bool staticMem=false );
-
- /// Get the parent of this node on the DOM.
- const XMLNode* Parent() const {
- return _parent;
- }
-
- XMLNode* Parent() {
- return _parent;
- }
-
- /// Returns true if this node has no children.
- bool NoChildren() const {
- return !_firstChild;
- }
-
- /// Get the first child node, or null if none exists.
- const XMLNode* FirstChild() const {
- return _firstChild;
- }
-
- XMLNode* FirstChild() {
- return _firstChild;
- }
-
- /** Get the first child element, or optionally the first child
- element with the specified name.
- */
- const XMLElement* FirstChildElement( const char* value=0 ) const;
-
- XMLElement* FirstChildElement( const char* value=0 ) {
- return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->FirstChildElement( value ));
- }
-
- /// Get the last child node, or null if none exists.
- const XMLNode* LastChild() const {
- return _lastChild;
- }
-
- XMLNode* LastChild() {
- return const_cast<XMLNode*>(const_cast<const XMLNode*>(this)->LastChild() );
- }
-
- /** Get the last child element or optionally the last child
- element with the specified name.
- */
- const XMLElement* LastChildElement( const char* value=0 ) const;
-
- XMLElement* LastChildElement( const char* value=0 ) {
- return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->LastChildElement(value) );
- }
-
- /// Get the previous (left) sibling node of this node.
- const XMLNode* PreviousSibling() const {
- return _prev;
- }
-
- XMLNode* PreviousSibling() {
- return _prev;
- }
-
- /// Get the previous (left) sibling element of this node, with an optionally supplied name.
- const XMLElement* PreviousSiblingElement( const char* value=0 ) const ;
-
- XMLElement* PreviousSiblingElement( const char* value=0 ) {
- return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->PreviousSiblingElement( value ) );
- }
-
- /// Get the next (right) sibling node of this node.
- const XMLNode* NextSibling() const {
- return _next;
- }
-
- XMLNode* NextSibling() {
- return _next;
- }
-
- /// Get the next (right) sibling element of this node, with an optionally supplied name.
- const XMLElement* NextSiblingElement( const char* value=0 ) const;
-
- XMLElement* NextSiblingElement( const char* value=0 ) {
- return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->NextSiblingElement( value ) );
- }
-
- /**
- Add a child node as the last (right) child.
- If the child node is already part of the document,
- it is moved from its old location to the new location.
- Returns the addThis argument or 0 if the node does not
- belong to the same document.
- */
- XMLNode* InsertEndChild( XMLNode* addThis );
-
- XMLNode* LinkEndChild( XMLNode* addThis ) {
- return InsertEndChild( addThis );
- }
- /**
- Add a child node as the first (left) child.
- If the child node is already part of the document,
- it is moved from its old location to the new location.
- Returns the addThis argument or 0 if the node does not
- belong to the same document.
- */
- XMLNode* InsertFirstChild( XMLNode* addThis );
- /**
- Add a node after the specified child node.
- If the child node is already part of the document,
- it is moved from its old location to the new location.
- Returns the addThis argument or 0 if the afterThis node
- is not a child of this node, or if the node does not
- belong to the same document.
- */
- XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis );
-
- /**
- Delete all the children of this node.
- */
- void DeleteChildren();
-
- /**
- Delete a child of this node.
- */
- void DeleteChild( XMLNode* node );
-
- /**
- Make a copy of this node, but not its children.
- You may pass in a Document pointer that will be
- the owner of the new Node. If the 'document' is
- null, then the node returned will be allocated
- from the current Document. (this->GetDocument())
-
- Note: if called on a XMLDocument, this will return null.
- */
- virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0;
-
- /**
- Test if 2 nodes are the same, but don't test children.
- The 2 nodes do not need to be in the same Document.
-
- Note: if called on a XMLDocument, this will return false.
- */
- virtual bool ShallowEqual( const XMLNode* compare ) const = 0;
-
- /** Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the
- XML tree will be conditionally visited and the host will be called back
- via the XMLVisitor interface.
-
- This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse
- the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this
- interface versus any other.)
-
- The interface has been based on ideas from:
-
- - http://www.saxproject.org/
- - http://c2.com/cgi/wiki?HierarchicalVisitorPattern
-
- Which are both good references for "visiting".
-
- An example of using Accept():
- @verbatim
- XMLPrinter printer;
- tinyxmlDoc.Accept( &printer );
- const char* xmlcstr = printer.CStr();
- @endverbatim
- */
- virtual bool Accept( XMLVisitor* visitor ) const = 0;
-
- // internal
- virtual char* ParseDeep( char*, StrPair* );
-
-protected:
- XMLNode( XMLDocument* );
- virtual ~XMLNode();
- XMLNode( const XMLNode& ); // not supported
- XMLNode& operator=( const XMLNode& ); // not supported
-
- XMLDocument* _document;
- XMLNode* _parent;
- mutable StrPair _value;
-
- XMLNode* _firstChild;
- XMLNode* _lastChild;
-
- XMLNode* _prev;
- XMLNode* _next;
-
-private:
- MemPool* _memPool;
- void Unlink( XMLNode* child );
-};
-
-
-/** XML text.
-
- Note that a text node can have child element nodes, for example:
- @verbatim
- <root>This is <b>bold</b></root>
- @endverbatim
-
- A text node can have 2 ways to output the next. "normal" output
- and CDATA. It will default to the mode it was parsed from the XML file and
- you generally want to leave it alone, but you can change the output mode with
- SetCData() and query it with CData().
-*/
-class TINYXML2_LIB XMLText : public XMLNode
-{
- friend class XMLBase;
- friend class XMLDocument;
-public:
- virtual bool Accept( XMLVisitor* visitor ) const;
-
- virtual XMLText* ToText() {
- return this;
- }
- virtual const XMLText* ToText() const {
- return this;
- }
-
- /// Declare whether this should be CDATA or standard text.
- void SetCData( bool isCData ) {
- _isCData = isCData;
- }
- /// Returns true if this is a CDATA text element.
- bool CData() const {
- return _isCData;
- }
-
- char* ParseDeep( char*, StrPair* endTag );
- virtual XMLNode* ShallowClone( XMLDocument* document ) const;
- virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-protected:
- XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {}
- virtual ~XMLText() {}
- XMLText( const XMLText& ); // not supported
- XMLText& operator=( const XMLText& ); // not supported
-
-private:
- bool _isCData;
-};
-
-
-/** An XML Comment. */
-class TINYXML2_LIB XMLComment : public XMLNode
-{
- friend class XMLDocument;
-public:
- virtual XMLComment* ToComment() {
- return this;
- }
- virtual const XMLComment* ToComment() const {
- return this;
- }
-
- virtual bool Accept( XMLVisitor* visitor ) const;
-
- char* ParseDeep( char*, StrPair* endTag );
- virtual XMLNode* ShallowClone( XMLDocument* document ) const;
- virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-protected:
- XMLComment( XMLDocument* doc );
- virtual ~XMLComment();
- XMLComment( const XMLComment& ); // not supported
- XMLComment& operator=( const XMLComment& ); // not supported
-
-private:
-};
-
-
-/** In correct XML the declaration is the first entry in the file.
- @verbatim
- <?xml version="1.0" standalone="yes"?>
- @endverbatim
-
- TinyXML-2 will happily read or write files without a declaration,
- however.
-
- The text of the declaration isn't interpreted. It is parsed
- and written as a string.
-*/
-class TINYXML2_LIB XMLDeclaration : public XMLNode
-{
- friend class XMLDocument;
-public:
- virtual XMLDeclaration* ToDeclaration() {
- return this;
- }
- virtual const XMLDeclaration* ToDeclaration() const {
- return this;
- }
-
- virtual bool Accept( XMLVisitor* visitor ) const;
-
- char* ParseDeep( char*, StrPair* endTag );
- virtual XMLNode* ShallowClone( XMLDocument* document ) const;
- virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-protected:
- XMLDeclaration( XMLDocument* doc );
- virtual ~XMLDeclaration();
- XMLDeclaration( const XMLDeclaration& ); // not supported
- XMLDeclaration& operator=( const XMLDeclaration& ); // not supported
-};
-
-
-/** Any tag that TinyXML-2 doesn't recognize is saved as an
- unknown. It is a tag of text, but should not be modified.
- It will be written back to the XML, unchanged, when the file
- is saved.
-
- DTD tags get thrown into XMLUnknowns.
-*/
-class TINYXML2_LIB XMLUnknown : public XMLNode
-{
- friend class XMLDocument;
-public:
- virtual XMLUnknown* ToUnknown() {
- return this;
- }
- virtual const XMLUnknown* ToUnknown() const {
- return this;
- }
-
- virtual bool Accept( XMLVisitor* visitor ) const;
-
- char* ParseDeep( char*, StrPair* endTag );
- virtual XMLNode* ShallowClone( XMLDocument* document ) const;
- virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-protected:
- XMLUnknown( XMLDocument* doc );
- virtual ~XMLUnknown();
- XMLUnknown( const XMLUnknown& ); // not supported
- XMLUnknown& operator=( const XMLUnknown& ); // not supported
-};
-
-
-enum XMLError {
- XML_NO_ERROR = 0,
- XML_SUCCESS = 0,
-
- XML_NO_ATTRIBUTE,
- XML_WRONG_ATTRIBUTE_TYPE,
-
- XML_ERROR_FILE_NOT_FOUND,
- XML_ERROR_FILE_COULD_NOT_BE_OPENED,
- XML_ERROR_FILE_READ_ERROR,
- XML_ERROR_ELEMENT_MISMATCH,
- XML_ERROR_PARSING_ELEMENT,
- XML_ERROR_PARSING_ATTRIBUTE,
- XML_ERROR_IDENTIFYING_TAG,
- XML_ERROR_PARSING_TEXT,
- XML_ERROR_PARSING_CDATA,
- XML_ERROR_PARSING_COMMENT,
- XML_ERROR_PARSING_DECLARATION,
- XML_ERROR_PARSING_UNKNOWN,
- XML_ERROR_EMPTY_DOCUMENT,
- XML_ERROR_MISMATCHED_ELEMENT,
- XML_ERROR_PARSING,
-
- XML_CAN_NOT_CONVERT_TEXT,
- XML_NO_TEXT_NODE
-};
-
-
-/** An attribute is a name-value pair. Elements have an arbitrary
- number of attributes, each with a unique name.
-
- @note The attributes are not XMLNodes. You may only query the
- Next() attribute in a list.
-*/
-class TINYXML2_LIB XMLAttribute
-{
- friend class XMLElement;
-public:
- /// The name of the attribute.
- const char* Name() const;
-
- /// The value of the attribute.
- const char* Value() const;
-
- /// The next attribute in the list.
- const XMLAttribute* Next() const {
- return _next;
- }
-
- /** IntValue interprets the attribute as an integer, and returns the value.
- If the value isn't an integer, 0 will be returned. There is no error checking;
- use QueryIntValue() if you need error checking.
- */
- int IntValue() const {
- int i=0;
- QueryIntValue( &i );
- return i;
- }
- /// Query as an unsigned integer. See IntValue()
- unsigned UnsignedValue() const {
- unsigned i=0;
- QueryUnsignedValue( &i );
- return i;
- }
- /// Query as a boolean. See IntValue()
- bool BoolValue() const {
- bool b=false;
- QueryBoolValue( &b );
- return b;
- }
- /// Query as a double. See IntValue()
- double DoubleValue() const {
- double d=0;
- QueryDoubleValue( &d );
- return d;
- }
- /// Query as a float. See IntValue()
- float FloatValue() const {
- float f=0;
- QueryFloatValue( &f );
- return f;
- }
-
- /** QueryIntValue interprets the attribute as an integer, and returns the value
- in the provided parameter. The function will return XML_NO_ERROR on success,
- and XML_WRONG_ATTRIBUTE_TYPE if the conversion is not successful.
- */
- XMLError QueryIntValue( int* value ) const;
- /// See QueryIntValue
- XMLError QueryUnsignedValue( unsigned int* value ) const;
- /// See QueryIntValue
- XMLError QueryBoolValue( bool* value ) const;
- /// See QueryIntValue
- XMLError QueryDoubleValue( double* value ) const;
- /// See QueryIntValue
- XMLError QueryFloatValue( float* value ) const;
-
- /// Set the attribute to a string value.
- void SetAttribute( const char* value );
- /// Set the attribute to value.
- void SetAttribute( int value );
- /// Set the attribute to value.
- void SetAttribute( unsigned value );
- /// Set the attribute to value.
- void SetAttribute( bool value );
- /// Set the attribute to value.
- void SetAttribute( double value );
- /// Set the attribute to value.
- void SetAttribute( float value );
-
-private:
- enum { BUF_SIZE = 200 };
-
- XMLAttribute() : _next( 0 ), _memPool( 0 ) {}
- virtual ~XMLAttribute() {}
-
- XMLAttribute( const XMLAttribute& ); // not supported
- void operator=( const XMLAttribute& ); // not supported
- void SetName( const char* name );
-
- char* ParseDeep( char* p, bool processEntities );
-
- mutable StrPair _name;
- mutable StrPair _value;
- XMLAttribute* _next;
- MemPool* _memPool;
-};
-
-
-/** The element is a container class. It has a value, the element name,
- and can contain other elements, text, comments, and unknowns.
- Elements also contain an arbitrary number of attributes.
-*/
-class TINYXML2_LIB XMLElement : public XMLNode
-{
- friend class XMLBase;
- friend class XMLDocument;
-public:
- /// Get the name of an element (which is the Value() of the node.)
- const char* Name() const {
- return Value();
- }
- /// Set the name of the element.
- void SetName( const char* str, bool staticMem=false ) {
- SetValue( str, staticMem );
- }
-
- virtual XMLElement* ToElement() {
- return this;
- }
- virtual const XMLElement* ToElement() const {
- return this;
- }
- virtual bool Accept( XMLVisitor* visitor ) const;
-
- /** Given an attribute name, Attribute() returns the value
- for the attribute of that name, or null if none
- exists. For example:
-
- @verbatim
- const char* value = ele->Attribute( "foo" );
- @endverbatim
-
- The 'value' parameter is normally null. However, if specified,
- the attribute will only be returned if the 'name' and 'value'
- match. This allow you to write code:
-
- @verbatim
- if ( ele->Attribute( "foo", "bar" ) ) callFooIsBar();
- @endverbatim
-
- rather than:
- @verbatim
- if ( ele->Attribute( "foo" ) ) {
- if ( strcmp( ele->Attribute( "foo" ), "bar" ) == 0 ) callFooIsBar();
- }
- @endverbatim
- */
- const char* Attribute( const char* name, const char* value=0 ) const;
-
- /** Given an attribute name, IntAttribute() returns the value
- of the attribute interpreted as an integer. 0 will be
- returned if there is an error. For a method with error
- checking, see QueryIntAttribute()
- */
- int IntAttribute( const char* name ) const {
- int i=0;
- QueryIntAttribute( name, &i );
- return i;
- }
- /// See IntAttribute()
- unsigned UnsignedAttribute( const char* name ) const {
- unsigned i=0;
- QueryUnsignedAttribute( name, &i );
- return i;
- }
- /// See IntAttribute()
- bool BoolAttribute( const char* name ) const {
- bool b=false;
- QueryBoolAttribute( name, &b );
- return b;
- }
- /// See IntAttribute()
- double DoubleAttribute( const char* name ) const {
- double d=0;
- QueryDoubleAttribute( name, &d );
- return d;
- }
- /// See IntAttribute()
- float FloatAttribute( const char* name ) const {
- float f=0;
- QueryFloatAttribute( name, &f );
- return f;
- }
-
- /** Given an attribute name, QueryIntAttribute() returns
- XML_NO_ERROR, XML_WRONG_ATTRIBUTE_TYPE if the conversion
- can't be performed, or XML_NO_ATTRIBUTE if the attribute
- doesn't exist. If successful, the result of the conversion
- will be written to 'value'. If not successful, nothing will
- be written to 'value'. This allows you to provide default
- value:
-
- @verbatim
- int value = 10;
- QueryIntAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10
- @endverbatim
- */
- XMLError QueryIntAttribute( const char* name, int* value ) const {
- const XMLAttribute* a = FindAttribute( name );
- if ( !a ) {
- return XML_NO_ATTRIBUTE;
- }
- return a->QueryIntValue( value );
- }
- /// See QueryIntAttribute()
- XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const {
- const XMLAttribute* a = FindAttribute( name );
- if ( !a ) {
- return XML_NO_ATTRIBUTE;
- }
- return a->QueryUnsignedValue( value );
- }
- /// See QueryIntAttribute()
- XMLError QueryBoolAttribute( const char* name, bool* value ) const {
- const XMLAttribute* a = FindAttribute( name );
- if ( !a ) {
- return XML_NO_ATTRIBUTE;
- }
- return a->QueryBoolValue( value );
- }
- /// See QueryIntAttribute()
- XMLError QueryDoubleAttribute( const char* name, double* value ) const {
- const XMLAttribute* a = FindAttribute( name );
- if ( !a ) {
- return XML_NO_ATTRIBUTE;
- }
- return a->QueryDoubleValue( value );
- }
- /// See QueryIntAttribute()
- XMLError QueryFloatAttribute( const char* name, float* value ) const {
- const XMLAttribute* a = FindAttribute( name );
- if ( !a ) {
- return XML_NO_ATTRIBUTE;
- }
- return a->QueryFloatValue( value );
- }
-
-
- /** Given an attribute name, QueryAttribute() returns
- XML_NO_ERROR, XML_WRONG_ATTRIBUTE_TYPE if the conversion
- can't be performed, or XML_NO_ATTRIBUTE if the attribute
- doesn't exist. It is overloaded for the primitive types,
- and is a generally more convenient replacement of
- QueryIntAttribute() and related functions.
-
- If successful, the result of the conversion
- will be written to 'value'. If not successful, nothing will
- be written to 'value'. This allows you to provide default
- value:
-
- @verbatim
- int value = 10;
- QueryAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10
- @endverbatim
- */
- int QueryAttribute( const char* name, int* value ) const {
- return QueryIntAttribute( name, value );
- }
-
- int QueryAttribute( const char* name, unsigned int* value ) const {
- return QueryUnsignedAttribute( name, value );
- }
-
- int QueryAttribute( const char* name, bool* value ) const {
- return QueryBoolAttribute( name, value );
- }
-
- int QueryAttribute( const char* name, double* value ) const {
- return QueryDoubleAttribute( name, value );
- }
-
- int QueryAttribute( const char* name, float* value ) const {
- return QueryFloatAttribute( name, value );
- }
-
- /// Sets the named attribute to value.
- void SetAttribute( const char* name, const char* value ) {
- XMLAttribute* a = FindOrCreateAttribute( name );
- a->SetAttribute( value );
- }
- /// Sets the named attribute to value.
- void SetAttribute( const char* name, int value ) {
- XMLAttribute* a = FindOrCreateAttribute( name );
- a->SetAttribute( value );
- }
- /// Sets the named attribute to value.
- void SetAttribute( const char* name, unsigned value ) {
- XMLAttribute* a = FindOrCreateAttribute( name );
- a->SetAttribute( value );
- }
- /// Sets the named attribute to value.
- void SetAttribute( const char* name, bool value ) {
- XMLAttribute* a = FindOrCreateAttribute( name );
- a->SetAttribute( value );
- }
- /// Sets the named attribute to value.
- void SetAttribute( const char* name, double value ) {
- XMLAttribute* a = FindOrCreateAttribute( name );
- a->SetAttribute( value );
- }
- /// Sets the named attribute to value.
- void SetAttribute( const char* name, float value ) {
- XMLAttribute* a = FindOrCreateAttribute( name );
- a->SetAttribute( value );
- }
-
- /**
- Delete an attribute.
- */
- void DeleteAttribute( const char* name );
-
- /// Return the first attribute in the list.
- const XMLAttribute* FirstAttribute() const {
- return _rootAttribute;
- }
- /// Query a specific attribute in the list.
- const XMLAttribute* FindAttribute( const char* name ) const;
-
- /** Convenience function for easy access to the text inside an element. Although easy
- and concise, GetText() is limited compared to getting the XMLText child
- and accessing it directly.
-
- If the first child of 'this' is a XMLText, the GetText()
- returns the character string of the Text node, else null is returned.
-
- This is a convenient method for getting the text of simple contained text:
- @verbatim
- <foo>This is text</foo>
- const char* str = fooElement->GetText();
- @endverbatim
-
- 'str' will be a pointer to "This is text".
-
- Note that this function can be misleading. If the element foo was created from
- this XML:
- @verbatim
- <foo><b>This is text</b></foo>
- @endverbatim
-
- then the value of str would be null. The first child node isn't a text node, it is
- another element. From this XML:
- @verbatim
- <foo>This is <b>text</b></foo>
- @endverbatim
- GetText() will return "This is ".
- */
- const char* GetText() const;
-
- /** Convenience function for easy access to the text inside an element. Although easy
- and concise, SetText() is limited compared to creating an XMLText child
- and mutating it directly.
-
- If the first child of 'this' is a XMLText, SetText() sets its value to
- the given string, otherwise it will create a first child that is an XMLText.
-
- This is a convenient method for setting the text of simple contained text:
- @verbatim
- <foo>This is text</foo>
- fooElement->SetText( "Hullaballoo!" );
- <foo>Hullaballoo!</foo>
- @endverbatim
-
- Note that this function can be misleading. If the element foo was created from
- this XML:
- @verbatim
- <foo><b>This is text</b></foo>
- @endverbatim
-
- then it will not change "This is text", but rather prefix it with a text element:
- @verbatim
- <foo>Hullaballoo!<b>This is text</b></foo>
- @endverbatim
-
- For this XML:
- @verbatim
- <foo />
- @endverbatim
- SetText() will generate
- @verbatim
- <foo>Hullaballoo!</foo>
- @endverbatim
- */
- void SetText( const char* inText );
- /// Convenience method for setting text inside and element. See SetText() for important limitations.
- void SetText( int value );
- /// Convenience method for setting text inside and element. See SetText() for important limitations.
- void SetText( unsigned value );
- /// Convenience method for setting text inside and element. See SetText() for important limitations.
- void SetText( bool value );
- /// Convenience method for setting text inside and element. See SetText() for important limitations.
- void SetText( double value );
- /// Convenience method for setting text inside and element. See SetText() for important limitations.
- void SetText( float value );
-
- /**
- Convenience method to query the value of a child text node. This is probably best
- shown by example. Given you have a document is this form:
- @verbatim
- <point>
- <x>1</x>
- <y>1.4</y>
- </point>
- @endverbatim
-
- The QueryIntText() and similar functions provide a safe and easier way to get to the
- "value" of x and y.
-
- @verbatim
- int x = 0;
- float y = 0; // types of x and y are contrived for example
- const XMLElement* xElement = pointElement->FirstChildElement( "x" );
- const XMLElement* yElement = pointElement->FirstChildElement( "y" );
- xElement->QueryIntText( &x );
- yElement->QueryFloatText( &y );
- @endverbatim
-
- @returns XML_SUCCESS (0) on success, XML_CAN_NOT_CONVERT_TEXT if the text cannot be converted
- to the requested type, and XML_NO_TEXT_NODE if there is no child text to query.
-
- */
- XMLError QueryIntText( int* ival ) const;
- /// See QueryIntText()
- XMLError QueryUnsignedText( unsigned* uval ) const;
- /// See QueryIntText()
- XMLError QueryBoolText( bool* bval ) const;
- /// See QueryIntText()
- XMLError QueryDoubleText( double* dval ) const;
- /// See QueryIntText()
- XMLError QueryFloatText( float* fval ) const;
-
- // internal:
- enum {
- OPEN, // <foo>
- CLOSED, // <foo/>
- CLOSING // </foo>
- };
- int ClosingType() const {
- return _closingType;
- }
- char* ParseDeep( char* p, StrPair* endTag );
- virtual XMLNode* ShallowClone( XMLDocument* document ) const;
- virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-private:
- XMLElement( XMLDocument* doc );
- virtual ~XMLElement();
- XMLElement( const XMLElement& ); // not supported
- void operator=( const XMLElement& ); // not supported
-
- XMLAttribute* FindAttribute( const char* name );
- XMLAttribute* FindOrCreateAttribute( const char* name );
- //void LinkAttribute( XMLAttribute* attrib );
- char* ParseAttributes( char* p );
-
- enum { BUF_SIZE = 200 };
- int _closingType;
- // The attribute list is ordered; there is no 'lastAttribute'
- // because the list needs to be scanned for dupes before adding
- // a new attribute.
- XMLAttribute* _rootAttribute;
-};
-
-
-enum Whitespace {
- PRESERVE_WHITESPACE,
- COLLAPSE_WHITESPACE
-};
-
-
-/** A Document binds together all the functionality.
- It can be saved, loaded, and printed to the screen.
- All Nodes are connected and allocated to a Document.
- If the Document is deleted, all its Nodes are also deleted.
-*/
-class TINYXML2_LIB XMLDocument : public XMLNode
-{
- friend class XMLElement;
-public:
- /// constructor
- XMLDocument( bool processEntities = true, Whitespace = PRESERVE_WHITESPACE );
- ~XMLDocument();
-
- virtual XMLDocument* ToDocument() {
- return this;
- }
- virtual const XMLDocument* ToDocument() const {
- return this;
- }
-
- /**
- Parse an XML file from a character string.
- Returns XML_NO_ERROR (0) on success, or
- an errorID.
-
- You may optionally pass in the 'nBytes', which is
- the number of bytes which will be parsed. If not
- specified, TinyXML-2 will assume 'xml' points to a
- null terminated string.
- */
- XMLError Parse( const char* xml, size_t nBytes=(size_t)(-1) );
-
- /**
- Load an XML file from disk.
- Returns XML_NO_ERROR (0) on success, or
- an errorID.
- */
- XMLError LoadFile( const char* filename );
-
- /**
- Load an XML file from disk. You are responsible
- for providing and closing the FILE*.
-
- Returns XML_NO_ERROR (0) on success, or
- an errorID.
- */
- XMLError LoadFile( FILE* );
-
- /**
- Save the XML file to disk.
- Returns XML_NO_ERROR (0) on success, or
- an errorID.
- */
- XMLError SaveFile( const char* filename, bool compact = false );
-
- /**
- Save the XML file to disk. You are responsible
- for providing and closing the FILE*.
-
- Returns XML_NO_ERROR (0) on success, or
- an errorID.
- */
- XMLError SaveFile( FILE* fp, bool compact = false );
-
- bool ProcessEntities() const {
- return _processEntities;
- }
- Whitespace WhitespaceMode() const {
- return _whitespace;
- }
-
- /**
- Returns true if this document has a leading Byte Order Mark of UTF8.
- */
- bool HasBOM() const {
- return _writeBOM;
- }
- /** Sets whether to write the BOM when writing the file.
- */
- void SetBOM( bool useBOM ) {
- _writeBOM = useBOM;
- }
-
- /** Return the root element of DOM. Equivalent to FirstChildElement().
- To get the first node, use FirstChild().
- */
- XMLElement* RootElement() {
- return FirstChildElement();
- }
- const XMLElement* RootElement() const {
- return FirstChildElement();
- }
-
- /** Print the Document. If the Printer is not provided, it will
- print to stdout. If you provide Printer, this can print to a file:
- @verbatim
- XMLPrinter printer( fp );
- doc.Print( &printer );
- @endverbatim
-
- Or you can use a printer to print to memory:
- @verbatim
- XMLPrinter printer;
- doc.Print( &printer );
- // printer.CStr() has a const char* to the XML
- @endverbatim
- */
- void Print( XMLPrinter* streamer=0 ) const;
- virtual bool Accept( XMLVisitor* visitor ) const;
-
- /**
- Create a new Element associated with
- this Document. The memory for the Element
- is managed by the Document.
- */
- XMLElement* NewElement( const char* name );
- /**
- Create a new Comment associated with
- this Document. The memory for the Comment
- is managed by the Document.
- */
- XMLComment* NewComment( const char* comment );
- /**
- Create a new Text associated with
- this Document. The memory for the Text
- is managed by the Document.
- */
- XMLText* NewText( const char* text );
- /**
- Create a new Declaration associated with
- this Document. The memory for the object
- is managed by the Document.
-
- If the 'text' param is null, the standard
- declaration is used.:
- @verbatim
- <?xml version="1.0" encoding="UTF-8"?>
- @endverbatim
- */
- XMLDeclaration* NewDeclaration( const char* text=0 );
- /**
- Create a new Unknown associated with
- this Document. The memory for the object
- is managed by the Document.
- */
- XMLUnknown* NewUnknown( const char* text );
-
- /**
- Delete a node associated with this document.
- It will be unlinked from the DOM.
- */
- void DeleteNode( XMLNode* node ) {
- node->_parent->DeleteChild( node );
- }
-
- void SetError( XMLError error, const char* str1, const char* str2 );
-
- /// Return true if there was an error parsing the document.
- bool Error() const {
- return _errorID != XML_NO_ERROR;
- }
- /// Return the errorID.
- XMLError ErrorID() const {
- return _errorID;
- }
- /// Return a possibly helpful diagnostic location or string.
- const char* GetErrorStr1() const {
- return _errorStr1;
- }
- /// Return a possibly helpful secondary diagnostic location or string.
- const char* GetErrorStr2() const {
- return _errorStr2;
- }
- /// If there is an error, print it to stdout.
- void PrintError() const;
-
- /// Clear the document, resetting it to the initial state.
- void Clear();
-
- // internal
- char* Identify( char* p, XMLNode** node );
-
- virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const {
- return 0;
- }
- virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const {
- return false;
- }
-
-private:
- XMLDocument( const XMLDocument& ); // not supported
- void operator=( const XMLDocument& ); // not supported
-
- bool _writeBOM;
- bool _processEntities;
- XMLError _errorID;
- Whitespace _whitespace;
- const char* _errorStr1;
- const char* _errorStr2;
- char* _charBuffer;
-
- MemPoolT< sizeof(XMLElement) > _elementPool;
- MemPoolT< sizeof(XMLAttribute) > _attributePool;
- MemPoolT< sizeof(XMLText) > _textPool;
- MemPoolT< sizeof(XMLComment) > _commentPool;
-};
-
-
-/**
- A XMLHandle is a class that wraps a node pointer with null checks; this is
- an incredibly useful thing. Note that XMLHandle is not part of the TinyXML-2
- DOM structure. It is a separate utility class.
-
- Take an example:
- @verbatim
- <Document>
- <Element attributeA = "valueA">
- <Child attributeB = "value1" />
- <Child attributeB = "value2" />
- </Element>
- </Document>
- @endverbatim
-
- Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very
- easy to write a *lot* of code that looks like:
-
- @verbatim
- XMLElement* root = document.FirstChildElement( "Document" );
- if ( root )
- {
- XMLElement* element = root->FirstChildElement( "Element" );
- if ( element )
- {
- XMLElement* child = element->FirstChildElement( "Child" );
- if ( child )
- {
- XMLElement* child2 = child->NextSiblingElement( "Child" );
- if ( child2 )
- {
- // Finally do something useful.
- @endverbatim
-
- And that doesn't even cover "else" cases. XMLHandle addresses the verbosity
- of such code. A XMLHandle checks for null pointers so it is perfectly safe
- and correct to use:
-
- @verbatim
- XMLHandle docHandle( &document );
- XMLElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild().NextSibling().ToElement();
- if ( child2 )
- {
- // do something useful
- @endverbatim
-
- Which is MUCH more concise and useful.
-
- It is also safe to copy handles - internally they are nothing more than node pointers.
- @verbatim
- XMLHandle handleCopy = handle;
- @endverbatim
-
- See also XMLConstHandle, which is the same as XMLHandle, but operates on const objects.
-*/
-class TINYXML2_LIB XMLHandle
-{
-public:
- /// Create a handle from any node (at any depth of the tree.) This can be a null pointer.
- XMLHandle( XMLNode* node ) {
- _node = node;
- }
- /// Create a handle from a node.
- XMLHandle( XMLNode& node ) {
- _node = &node;
- }
- /// Copy constructor
- XMLHandle( const XMLHandle& ref ) {
- _node = ref._node;
- }
- /// Assignment
- XMLHandle& operator=( const XMLHandle& ref ) {
- _node = ref._node;
- return *this;
- }
-
- /// Get the first child of this handle.
- XMLHandle FirstChild() {
- return XMLHandle( _node ? _node->FirstChild() : 0 );
- }
- /// Get the first child element of this handle.
- XMLHandle FirstChildElement( const char* value=0 ) {
- return XMLHandle( _node ? _node->FirstChildElement( value ) : 0 );
- }
- /// Get the last child of this handle.
- XMLHandle LastChild() {
- return XMLHandle( _node ? _node->LastChild() : 0 );
- }
- /// Get the last child element of this handle.
- XMLHandle LastChildElement( const char* _value=0 ) {
- return XMLHandle( _node ? _node->LastChildElement( _value ) : 0 );
- }
- /// Get the previous sibling of this handle.
- XMLHandle PreviousSibling() {
- return XMLHandle( _node ? _node->PreviousSibling() : 0 );
- }
- /// Get the previous sibling element of this handle.
- XMLHandle PreviousSiblingElement( const char* _value=0 ) {
- return XMLHandle( _node ? _node->PreviousSiblingElement( _value ) : 0 );
- }
- /// Get the next sibling of this handle.
- XMLHandle NextSibling() {
- return XMLHandle( _node ? _node->NextSibling() : 0 );
- }
- /// Get the next sibling element of this handle.
- XMLHandle NextSiblingElement( const char* _value=0 ) {
- return XMLHandle( _node ? _node->NextSiblingElement( _value ) : 0 );
- }
-
- /// Safe cast to XMLNode. This can return null.
- XMLNode* ToNode() {
- return _node;
- }
- /// Safe cast to XMLElement. This can return null.
- XMLElement* ToElement() {
- return ( ( _node == 0 ) ? 0 : _node->ToElement() );
- }
- /// Safe cast to XMLText. This can return null.
- XMLText* ToText() {
- return ( ( _node == 0 ) ? 0 : _node->ToText() );
- }
- /// Safe cast to XMLUnknown. This can return null.
- XMLUnknown* ToUnknown() {
- return ( ( _node == 0 ) ? 0 : _node->ToUnknown() );
- }
- /// Safe cast to XMLDeclaration. This can return null.
- XMLDeclaration* ToDeclaration() {
- return ( ( _node == 0 ) ? 0 : _node->ToDeclaration() );
- }
-
-private:
- XMLNode* _node;
-};
-
-
-/**
- A variant of the XMLHandle class for working with const XMLNodes and Documents. It is the
- same in all regards, except for the 'const' qualifiers. See XMLHandle for API.
-*/
-class TINYXML2_LIB XMLConstHandle
-{
-public:
- XMLConstHandle( const XMLNode* node ) {
- _node = node;
- }
- XMLConstHandle( const XMLNode& node ) {
- _node = &node;
- }
- XMLConstHandle( const XMLConstHandle& ref ) {
- _node = ref._node;
- }
-
- XMLConstHandle& operator=( const XMLConstHandle& ref ) {
- _node = ref._node;
- return *this;
- }
-
- const XMLConstHandle FirstChild() const {
- return XMLConstHandle( _node ? _node->FirstChild() : 0 );
- }
- const XMLConstHandle FirstChildElement( const char* value=0 ) const {
- return XMLConstHandle( _node ? _node->FirstChildElement( value ) : 0 );
- }
- const XMLConstHandle LastChild() const {
- return XMLConstHandle( _node ? _node->LastChild() : 0 );
- }
- const XMLConstHandle LastChildElement( const char* _value=0 ) const {
- return XMLConstHandle( _node ? _node->LastChildElement( _value ) : 0 );
- }
- const XMLConstHandle PreviousSibling() const {
- return XMLConstHandle( _node ? _node->PreviousSibling() : 0 );
- }
- const XMLConstHandle PreviousSiblingElement( const char* _value=0 ) const {
- return XMLConstHandle( _node ? _node->PreviousSiblingElement( _value ) : 0 );
- }
- const XMLConstHandle NextSibling() const {
- return XMLConstHandle( _node ? _node->NextSibling() : 0 );
- }
- const XMLConstHandle NextSiblingElement( const char* _value=0 ) const {
- return XMLConstHandle( _node ? _node->NextSiblingElement( _value ) : 0 );
- }
-
-
- const XMLNode* ToNode() const {
- return _node;
- }
- const XMLElement* ToElement() const {
- return ( ( _node == 0 ) ? 0 : _node->ToElement() );
- }
- const XMLText* ToText() const {
- return ( ( _node == 0 ) ? 0 : _node->ToText() );
- }
- const XMLUnknown* ToUnknown() const {
- return ( ( _node == 0 ) ? 0 : _node->ToUnknown() );
- }
- const XMLDeclaration* ToDeclaration() const {
- return ( ( _node == 0 ) ? 0 : _node->ToDeclaration() );
- }
-
-private:
- const XMLNode* _node;
-};
-
-
-/**
- Printing functionality. The XMLPrinter gives you more
- options than the XMLDocument::Print() method.
-
- It can:
- -# Print to memory.
- -# Print to a file you provide.
- -# Print XML without a XMLDocument.
-
- Print to Memory
-
- @verbatim
- XMLPrinter printer;
- doc.Print( &printer );
- SomeFunction( printer.CStr() );
- @endverbatim
-
- Print to a File
-
- You provide the file pointer.
- @verbatim
- XMLPrinter printer( fp );
- doc.Print( &printer );
- @endverbatim
-
- Print without a XMLDocument
-
- When loading, an XML parser is very useful. However, sometimes
- when saving, it just gets in the way. The code is often set up
- for streaming, and constructing the DOM is just overhead.
-
- The Printer supports the streaming case. The following code
- prints out a trivially simple XML file without ever creating
- an XML document.
-
- @verbatim
- XMLPrinter printer( fp );
- printer.OpenElement( "foo" );
- printer.PushAttribute( "foo", "bar" );
- printer.CloseElement();
- @endverbatim
-*/
-class TINYXML2_LIB XMLPrinter : public XMLVisitor
-{
-public:
- /** Construct the printer. If the FILE* is specified,
- this will print to the FILE. Else it will print
- to memory, and the result is available in CStr().
- If 'compact' is set to true, then output is created
- with only required whitespace and newlines.
- */
- XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 );
- virtual ~XMLPrinter() {}
-
- /** If streaming, write the BOM and declaration. */
- void PushHeader( bool writeBOM, bool writeDeclaration );
- /** If streaming, start writing an element.
- The element must be closed with CloseElement()
- */
- void OpenElement( const char* name, bool compactMode=false );
- /// If streaming, add an attribute to an open element.
- void PushAttribute( const char* name, const char* value );
- void PushAttribute( const char* name, int value );
- void PushAttribute( const char* name, unsigned value );
- void PushAttribute( const char* name, bool value );
- void PushAttribute( const char* name, double value );
- /// If streaming, close the Element.
- virtual void CloseElement( bool compactMode=false );
-
- /// Add a text node.
- void PushText( const char* text, bool cdata=false );
- /// Add a text node from an integer.
- void PushText( int value );
- /// Add a text node from an unsigned.
- void PushText( unsigned value );
- /// Add a text node from a bool.
- void PushText( bool value );
- /// Add a text node from a float.
- void PushText( float value );
- /// Add a text node from a double.
- void PushText( double value );
-
- /// Add a comment
- void PushComment( const char* comment );
-
- void PushDeclaration( const char* value );
- void PushUnknown( const char* value );
-
- virtual bool VisitEnter( const XMLDocument& /*doc*/ );
- virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
- return true;
- }
-
- virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute );
- virtual bool VisitExit( const XMLElement& element );
-
- virtual bool Visit( const XMLText& text );
- virtual bool Visit( const XMLComment& comment );
- virtual bool Visit( const XMLDeclaration& declaration );
- virtual bool Visit( const XMLUnknown& unknown );
-
- /**
- If in print to memory mode, return a pointer to
- the XML file in memory.
- */
- const char* CStr() const {
- return _buffer.Mem();
- }
- /**
- If in print to memory mode, return the size
- of the XML file in memory. (Note the size returned
- includes the terminating null.)
- */
- int CStrSize() const {
- return _buffer.Size();
- }
- /**
- If in print to memory mode, reset the buffer to the
- beginning.
- */
- void ClearBuffer() {
- _buffer.Clear();
- _buffer.Push(0);
- }
-
-protected:
- virtual bool CompactMode( const XMLElement& ) { return _compactMode; }
-
- /** Prints out the space before an element. You may override to change
- the space and tabs used. A PrintSpace() override should call Print().
- */
- virtual void PrintSpace( int depth );
- void Print( const char* format, ... );
-
- void SealElement();
- bool _elementJustOpened;
- DynArray< const char*, 10 > _stack;
-
-private:
- void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities.
-
- bool _firstElement;
- FILE* _fp;
- int _depth;
- int _textDepth;
- bool _processEntities;
- bool _compactMode;
-
- enum {
- ENTITY_RANGE = 64,
- BUF_SIZE = 200
- };
- bool _entityFlag[ENTITY_RANGE];
- bool _restrictedEntityFlag[ENTITY_RANGE];
-
- DynArray< char, 20 > _buffer;
-};
-
-
-} // tinyxml2
-
-#if defined(_MSC_VER)
-# pragma warning(pop)
-#endif
-
-#endif // TINYXML2_INCLUDED
diff --git a/src/thirdparty/MediaInfo/library b/src/thirdparty/MediaInfo/library
new file mode 160000
+Subproject e91d7cd87f6a06698a0617c2b3c77cecaeb0071
diff --git a/src/thirdparty/RARFileSource/RARFileSource.vcxproj b/src/thirdparty/RARFileSource/RARFileSource.vcxproj
index 271c7d429..66ab95ce5 100644
--- a/src/thirdparty/RARFileSource/RARFileSource.vcxproj
+++ b/src/thirdparty/RARFileSource/RARFileSource.vcxproj
@@ -1,155 +1,94 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{2B7F22D7-1750-47C5-8709-1A3688B62499}</ProjectGuid>
- <RootNamespace>RARFileSource</RootNamespace>
- <Keyword>Win32Proj</Keyword>
- <ProjectName>RARFileSource</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{2B7F22D7-1750-47C5-8709-1A3688B62499}</ProjectGuid>
+ <RootNamespace>RARFileSource</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <ProjectName>RARFileSource</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
+ </ImportGroup>
<PropertyGroup Label="UserMacros">
<NOMINMAX>False</NOMINMAX>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>library;..\BaseClasses;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <ResourceCompile>
- <ResourceOutputFileName>$(OutDir)$(ProjectName).res</ResourceOutputFileName>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>library;..\BaseClasses;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <ResourceCompile>
- <ResourceOutputFileName>$(OutDir)$(ProjectName).res</ResourceOutputFileName>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>library;..\BaseClasses;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <ResourceCompile>
- <ResourceOutputFileName>$(OutDir)$(ProjectName).res</ResourceOutputFileName>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>library;..\BaseClasses;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <ResourceCompile>
- <ResourceOutputFileName>$(OutDir)$(ProjectName).res</ResourceOutputFileName>
- </ResourceCompile>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="library\File.cpp" />
- <ClCompile Include="library\List.cpp">
- <ExcludedFromBuild>true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="library\Mediatype.cpp" />
- <ClCompile Include="library\OutputPin.cpp" />
- <ClCompile Include="library\RAR.cpp" />
- <ClCompile Include="library\RFS.cpp" />
- <ClCompile Include="library\Utils.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="library\Anchor.h" />
- <ClInclude Include="library\File.h" />
- <ClInclude Include="library\List.h" />
- <ClInclude Include="library\Mediatype.h" />
- <ClInclude Include="library\OutputPin.h" />
- <ClInclude Include="library\RAR.h" />
- <ClInclude Include="library\RAR_defines.h" />
- <ClInclude Include="library\resource.h" />
- <ClInclude Include="library\RFS.h" />
- <ClInclude Include="library\Utils.h" />
- </ItemGroup>
- <ItemGroup>
- <None Include="library\RFS.def" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="library\RFS.rc" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\filters\Filters.vcxproj">
- <Project>{273b3149-3192-4b75-a791-470320b90812}</Project>
- </ProjectReference>
- <ProjectReference Include="..\BaseClasses\BaseClasses.vcxproj">
- <Project>{e8a3f6fa-ae1c-4c8e-a0b6-9c8480324eaa}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <AdditionalIncludeDirectories>library;..\BaseClasses;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ </ClCompile>
+ <ResourceCompile>
+ <ResourceOutputFileName>$(OutDir)$(ProjectName).res</ResourceOutputFileName>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="library\File.cpp" />
+ <ClCompile Include="library\List.cpp">
+ <ExcludedFromBuild>true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="library\Mediatype.cpp" />
+ <ClCompile Include="library\OutputPin.cpp" />
+ <ClCompile Include="library\RAR.cpp" />
+ <ClCompile Include="library\RFS.cpp" />
+ <ClCompile Include="library\Utils.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library\Anchor.h" />
+ <ClInclude Include="library\File.h" />
+ <ClInclude Include="library\List.h" />
+ <ClInclude Include="library\Mediatype.h" />
+ <ClInclude Include="library\OutputPin.h" />
+ <ClInclude Include="library\RAR.h" />
+ <ClInclude Include="library\RAR_defines.h" />
+ <ClInclude Include="library\resource.h" />
+ <ClInclude Include="library\RFS.h" />
+ <ClInclude Include="library\Utils.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="library\RFS.def" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="library\RFS.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\filters\Filters.vcxproj">
+ <Project>{273b3149-3192-4b75-a791-470320b90812}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\BaseClasses\BaseClasses.vcxproj">
+ <Project>{e8a3f6fa-ae1c-4c8e-a0b6-9c8480324eaa}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
</Project> \ No newline at end of file
diff --git a/src/thirdparty/RARFileSource/RARFileSource.vcxproj.filters b/src/thirdparty/RARFileSource/RARFileSource.vcxproj.filters
index fe5b16764..9b7a1c61f 100644
--- a/src/thirdparty/RARFileSource/RARFileSource.vcxproj.filters
+++ b/src/thirdparty/RARFileSource/RARFileSource.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
diff --git a/src/thirdparty/ResizableLib/ResizableLayout.h b/src/thirdparty/ResizableLib/ResizableLayout.h
index 9ab22af3a..9067ea0bf 100644
--- a/src/thirdparty/ResizableLib/ResizableLayout.h
+++ b/src/thirdparty/ResizableLib/ResizableLayout.h
@@ -72,9 +72,10 @@ protected:
LayoutInfo(HWND hwnd, SIZE tl_t, SIZE tl_m,
SIZE br_t, SIZE br_m, CString classname)
: hWnd(hwnd), nCallbackID(0),
- sWndClass(classname), bMsgSupport(FALSE),
+ sWndClass(classname),
sizeTypeTL(tl_t), sizeMarginTL(tl_m),
- sizeTypeBR(br_t), sizeMarginBR(br_m)
+ sizeTypeBR(br_t), sizeMarginBR(br_m),
+ bMsgSupport(FALSE)
{
memset(&properties, 0, sizeof properties);
}
diff --git a/src/thirdparty/ResizableLib/ResizableLib.vcxproj b/src/thirdparty/ResizableLib/ResizableLib.vcxproj
index 5cc39fc09..981430f40 100644
--- a/src/thirdparty/ResizableLib/ResizableLib.vcxproj
+++ b/src/thirdparty/ResizableLib/ResizableLib.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <PropertyGroup>
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,47 +34,15 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/src/thirdparty/ResizableLib/ResizableLib.vcxproj.filters b/src/thirdparty/ResizableLib/ResizableLib.vcxproj.filters
index 53f8a1d66..9eeb53358 100644
--- a/src/thirdparty/ResizableLib/ResizableLib.vcxproj.filters
+++ b/src/thirdparty/ResizableLib/ResizableLib.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
diff --git a/src/thirdparty/SoundTouch/SoundTouch.vcxproj b/src/thirdparty/SoundTouch/SoundTouch.vcxproj
new file mode 100644
index 000000000..fb3113387
--- /dev/null
+++ b/src/thirdparty/SoundTouch/SoundTouch.vcxproj
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{4C7A1953-CBC4-42D5-A12F-BB512C64B547}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <AdditionalIncludeDirectories>soundtouch\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="soundtouch\source\SoundTouch\AAFilter.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\BPMDetect.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\cpu_detect_x86.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\FIFOSampleBuffer.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\FIRFilter.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\InterpolateCubic.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\InterpolateLinear.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\InterpolateShannon.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\PeakFinder.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\RateTransposer.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\SoundTouch.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\sse_optimized.cpp" />
+ <ClCompile Include="soundtouch\source\SoundTouch\TDStretch.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="soundtouch\include\BPMDetect.h" />
+ <ClInclude Include="soundtouch\include\FIFOSampleBuffer.h" />
+ <ClInclude Include="soundtouch\include\FIFOSamplePipe.h" />
+ <ClInclude Include="soundtouch\include\SoundTouch.h" />
+ <ClInclude Include="soundtouch\include\STTypes.h" />
+ <ClInclude Include="soundtouch\source\SoundTouch\AAFilter.h" />
+ <ClInclude Include="soundtouch\source\SoundTouch\cpu_detect.h" />
+ <ClInclude Include="soundtouch\source\SoundTouch\FIRFilter.h" />
+ <ClInclude Include="soundtouch\source\SoundTouch\InterpolateCubic.h" />
+ <ClInclude Include="soundtouch\source\SoundTouch\InterpolateLinear.h" />
+ <ClInclude Include="soundtouch\source\SoundTouch\InterpolateShannon.h" />
+ <ClInclude Include="soundtouch\source\SoundTouch\PeakFinder.h" />
+ <ClInclude Include="soundtouch\source\SoundTouch\RateTransposer.h" />
+ <ClInclude Include="soundtouch\source\SoundTouch\TDStretch.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/SoundTouch/include/BPMDetect.h b/src/thirdparty/SoundTouch/include/BPMDetect.h
deleted file mode 100644
index f07cf54d7..000000000
--- a/src/thirdparty/SoundTouch/include/BPMDetect.h
+++ /dev/null
@@ -1,164 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Beats-per-minute (BPM) detection routine.
-///
-/// The beat detection algorithm works as follows:
-/// - Use function 'inputSamples' to input a chunks of samples to the class for
-/// analysis. It's a good idea to enter a large sound file or stream in smallish
-/// chunks of around few kilosamples in order not to extinguish too much RAM memory.
-/// - Input sound data is decimated to approx 500 Hz to reduce calculation burden,
-/// which is basically ok as low (bass) frequencies mostly determine the beat rate.
-/// Simple averaging is used for anti-alias filtering because the resulting signal
-/// quality isn't of that high importance.
-/// - Decimated sound data is enveloped, i.e. the amplitude shape is detected by
-/// taking absolute value that's smoothed by sliding average. Signal levels that
-/// are below a couple of times the general RMS amplitude level are cut away to
-/// leave only notable peaks there.
-/// - Repeating sound patterns (e.g. beats) are detected by calculating short-term
-/// autocorrelation function of the enveloped signal.
-/// - After whole sound data file has been analyzed as above, the bpm level is
-/// detected by function 'getBpm' that finds the highest peak of the autocorrelation
-/// function, calculates it's precise location and converts this reading to bpm's.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2012-08-30 19:53:44 +0000 (Thu, 30 Aug 2012) $
-// File revision : $Revision: 4 $
-//
-// $Id: BPMDetect.h 150 2012-08-30 19:53:44Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef _BPMDetect_H_
-#define _BPMDetect_H_
-
-#include "STTypes.h"
-#include "FIFOSampleBuffer.h"
-
-namespace soundtouch
-{
-
-/// Minimum allowed BPM rate. Used to restrict accepted result above a reasonable limit.
-#define MIN_BPM 29
-
-/// Maximum allowed BPM rate. Used to restrict accepted result below a reasonable limit.
-#define MAX_BPM 200
-
-
-/// Class for calculating BPM rate for audio data.
-class BPMDetect
-{
-protected:
- /// Auto-correlation accumulator bins.
- float *xcorr;
-
- /// Amplitude envelope sliding average approximation level accumulator
- double envelopeAccu;
-
- /// RMS volume sliding average approximation level accumulator
- double RMSVolumeAccu;
-
- /// Sample average counter.
- int decimateCount;
-
- /// Sample average accumulator for FIFO-like decimation.
- soundtouch::LONG_SAMPLETYPE decimateSum;
-
- /// Decimate sound by this coefficient to reach approx. 500 Hz.
- int decimateBy;
-
- /// Auto-correlation window length
- int windowLen;
-
- /// Number of channels (1 = mono, 2 = stereo)
- int channels;
-
- /// sample rate
- int sampleRate;
-
- /// Beginning of auto-correlation window: Autocorrelation isn't being updated for
- /// the first these many correlation bins.
- int windowStart;
-
- /// FIFO-buffer for decimated processing samples.
- soundtouch::FIFOSampleBuffer *buffer;
-
- /// Updates auto-correlation function for given number of decimated samples that
- /// are read from the internal 'buffer' pipe (samples aren't removed from the pipe
- /// though).
- void updateXCorr(int process_samples /// How many samples are processed.
- );
-
- /// Decimates samples to approx. 500 Hz.
- ///
- /// \return Number of output samples.
- int decimate(soundtouch::SAMPLETYPE *dest, ///< Destination buffer
- const soundtouch::SAMPLETYPE *src, ///< Source sample buffer
- int numsamples ///< Number of source samples.
- );
-
- /// Calculates amplitude envelope for the buffer of samples.
- /// Result is output to 'samples'.
- void calcEnvelope(soundtouch::SAMPLETYPE *samples, ///< Pointer to input/output data buffer
- int numsamples ///< Number of samples in buffer
- );
-
- /// remove constant bias from xcorr data
- void removeBias();
-
-public:
- /// Constructor.
- BPMDetect(int numChannels, ///< Number of channels in sample data.
- int sampleRate ///< Sample rate in Hz.
- );
-
- /// Destructor.
- virtual ~BPMDetect();
-
- /// Inputs a block of samples for analyzing: Envelopes the samples and then
- /// updates the autocorrelation estimation. When whole song data has been input
- /// in smaller blocks using this function, read the resulting bpm with 'getBpm'
- /// function.
- ///
- /// Notice that data in 'samples' array can be disrupted in processing.
- void inputSamples(const soundtouch::SAMPLETYPE *samples, ///< Pointer to input/working data buffer
- int numSamples ///< Number of samples in buffer
- );
-
-
- /// Analyzes the results and returns the BPM rate. Use this function to read result
- /// after whole song data has been input to the class by consecutive calls of
- /// 'inputSamples' function.
- ///
- /// \return Beats-per-minute rate, or zero if detection failed.
- float getBpm();
-};
-
-}
-
-#endif // _BPMDetect_H_
diff --git a/src/thirdparty/SoundTouch/include/FIFOSampleBuffer.h b/src/thirdparty/SoundTouch/include/FIFOSampleBuffer.h
deleted file mode 100644
index f04c6747b..000000000
--- a/src/thirdparty/SoundTouch/include/FIFOSampleBuffer.h
+++ /dev/null
@@ -1,184 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// A buffer class for temporarily storaging sound samples, operates as a
-/// first-in-first-out pipe.
-///
-/// Samples are added to the end of the sample buffer with the 'putSamples'
-/// function, and are received from the beginning of the buffer by calling
-/// the 'receiveSamples' function. The class automatically removes the
-/// output samples from the buffer as well as grows the storage size
-/// whenever necessary.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-05 21:40:22 +0000 (Sun, 05 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: FIFOSampleBuffer.h 177 2014-01-05 21:40:22Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef FIFOSampleBuffer_H
-#define FIFOSampleBuffer_H
-
-#include "FIFOSamplePipe.h"
-
-namespace soundtouch
-{
-
-/// Sample buffer working in FIFO (first-in-first-out) principle. The class takes
-/// care of storage size adjustment and data moving during input/output operations.
-///
-/// Notice that in case of stereo audio, one sample is considered to consist of
-/// both channel data.
-class FIFOSampleBuffer : public FIFOSamplePipe
-{
-private:
- /// Sample buffer.
- SAMPLETYPE *buffer;
-
- // Raw unaligned buffer memory. 'buffer' is made aligned by pointing it to first
- // 16-byte aligned location of this buffer
- SAMPLETYPE *bufferUnaligned;
-
- /// Sample buffer size in bytes
- uint sizeInBytes;
-
- /// How many samples are currently in buffer.
- uint samplesInBuffer;
-
- /// Channels, 1=mono, 2=stereo.
- uint channels;
-
- /// Current position pointer to the buffer. This pointer is increased when samples are
- /// removed from the pipe so that it's necessary to actually rewind buffer (move data)
- /// only new data when is put to the pipe.
- uint bufferPos;
-
- /// Rewind the buffer by moving data from position pointed by 'bufferPos' to real
- /// beginning of the buffer.
- void rewind();
-
- /// Ensures that the buffer has capacity for at least this many samples.
- void ensureCapacity(uint capacityRequirement);
-
- /// Returns current capacity.
- uint getCapacity() const;
-
-public:
-
- /// Constructor
- FIFOSampleBuffer(int numChannels = 2 ///< Number of channels, 1=mono, 2=stereo.
- ///< Default is stereo.
- );
-
- /// destructor
- ~FIFOSampleBuffer();
-
- /// Returns a pointer to the beginning of the output samples.
- /// This function is provided for accessing the output samples directly.
- /// Please be careful for not to corrupt the book-keeping!
- ///
- /// When using this function to output samples, also remember to 'remove' the
- /// output samples from the buffer by calling the
- /// 'receiveSamples(numSamples)' function
- virtual SAMPLETYPE *ptrBegin();
-
- /// Returns a pointer to the end of the used part of the sample buffer (i.e.
- /// where the new samples are to be inserted). This function may be used for
- /// inserting new samples into the sample buffer directly. Please be careful
- /// not corrupt the book-keeping!
- ///
- /// When using this function as means for inserting new samples, also remember
- /// to increase the sample count afterwards, by calling the
- /// 'putSamples(numSamples)' function.
- SAMPLETYPE *ptrEnd(
- uint slackCapacity ///< How much free capacity (in samples) there _at least_
- ///< should be so that the caller can succesfully insert the
- ///< desired samples to the buffer. If necessary, the function
- ///< grows the buffer size to comply with this requirement.
- );
-
- /// Adds 'numSamples' pcs of samples from the 'samples' memory position to
- /// the sample buffer.
- virtual void putSamples(const SAMPLETYPE *samples, ///< Pointer to samples.
- uint numSamples ///< Number of samples to insert.
- );
-
- /// Adjusts the book-keeping to increase number of samples in the buffer without
- /// copying any actual samples.
- ///
- /// This function is used to update the number of samples in the sample buffer
- /// when accessing the buffer directly with 'ptrEnd' function. Please be
- /// careful though!
- virtual void putSamples(uint numSamples ///< Number of samples been inserted.
- );
-
- /// Output samples from beginning of the sample buffer. Copies requested samples to
- /// output buffer and removes them from the sample buffer. If there are less than
- /// 'numsample' samples in the buffer, returns all that available.
- ///
- /// \return Number of samples returned.
- virtual uint receiveSamples(SAMPLETYPE *output, ///< Buffer where to copy output samples.
- uint maxSamples ///< How many samples to receive at max.
- );
-
- /// Adjusts book-keeping so that given number of samples are removed from beginning of the
- /// sample buffer without copying them anywhere.
- ///
- /// Used to reduce the number of samples in the buffer when accessing the sample buffer directly
- /// with 'ptrBegin' function.
- virtual uint receiveSamples(uint maxSamples ///< Remove this many samples from the beginning of pipe.
- );
-
- /// Returns number of samples currently available.
- virtual uint numSamples() const;
-
- /// Sets number of channels, 1 = mono, 2 = stereo.
- void setChannels(int numChannels);
-
- /// Get number of channels
- int getChannels()
- {
- return channels;
- }
-
- /// Returns nonzero if there aren't any samples available for outputting.
- virtual int isEmpty() const;
-
- /// Clears all the samples.
- virtual void clear();
-
- /// allow trimming (downwards) amount of samples in pipeline.
- /// Returns adjusted amount of samples
- uint adjustAmountOfSamples(uint numSamples);
-};
-
-}
-
-#endif
diff --git a/src/thirdparty/SoundTouch/include/FIFOSamplePipe.h b/src/thirdparty/SoundTouch/include/FIFOSamplePipe.h
deleted file mode 100644
index ab8a9791a..000000000
--- a/src/thirdparty/SoundTouch/include/FIFOSamplePipe.h
+++ /dev/null
@@ -1,234 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// 'FIFOSamplePipe' : An abstract base class for classes that manipulate sound
-/// samples by operating like a first-in-first-out pipe: New samples are fed
-/// into one end of the pipe with the 'putSamples' function, and the processed
-/// samples are received from the other end with the 'receiveSamples' function.
-///
-/// 'FIFOProcessor' : A base class for classes the do signal processing with
-/// the samples while operating like a first-in-first-out pipe. When samples
-/// are input with the 'putSamples' function, the class processes them
-/// and moves the processed samples to the given 'output' pipe object, which
-/// may be either another processing stage, or a fifo sample buffer object.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2012-06-13 19:29:53 +0000 (Wed, 13 Jun 2012) $
-// File revision : $Revision: 4 $
-//
-// $Id: FIFOSamplePipe.h 143 2012-06-13 19:29:53Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef FIFOSamplePipe_H
-#define FIFOSamplePipe_H
-
-#include <assert.h>
-#include <stdlib.h>
-#include "STTypes.h"
-
-namespace soundtouch
-{
-
-/// Abstract base class for FIFO (first-in-first-out) sample processing classes.
-class FIFOSamplePipe
-{
-public:
- // virtual default destructor
- virtual ~FIFOSamplePipe() {}
-
-
- /// Returns a pointer to the beginning of the output samples.
- /// This function is provided for accessing the output samples directly.
- /// Please be careful for not to corrupt the book-keeping!
- ///
- /// When using this function to output samples, also remember to 'remove' the
- /// output samples from the buffer by calling the
- /// 'receiveSamples(numSamples)' function
- virtual SAMPLETYPE *ptrBegin() = 0;
-
- /// Adds 'numSamples' pcs of samples from the 'samples' memory position to
- /// the sample buffer.
- virtual void putSamples(const SAMPLETYPE *samples, ///< Pointer to samples.
- uint numSamples ///< Number of samples to insert.
- ) = 0;
-
-
- // Moves samples from the 'other' pipe instance to this instance.
- void moveSamples(FIFOSamplePipe &other ///< Other pipe instance where from the receive the data.
- )
- {
- int oNumSamples = other.numSamples();
-
- putSamples(other.ptrBegin(), oNumSamples);
- other.receiveSamples(oNumSamples);
- };
-
- /// Output samples from beginning of the sample buffer. Copies requested samples to
- /// output buffer and removes them from the sample buffer. If there are less than
- /// 'numsample' samples in the buffer, returns all that available.
- ///
- /// \return Number of samples returned.
- virtual uint receiveSamples(SAMPLETYPE *output, ///< Buffer where to copy output samples.
- uint maxSamples ///< How many samples to receive at max.
- ) = 0;
-
- /// Adjusts book-keeping so that given number of samples are removed from beginning of the
- /// sample buffer without copying them anywhere.
- ///
- /// Used to reduce the number of samples in the buffer when accessing the sample buffer directly
- /// with 'ptrBegin' function.
- virtual uint receiveSamples(uint maxSamples ///< Remove this many samples from the beginning of pipe.
- ) = 0;
-
- /// Returns number of samples currently available.
- virtual uint numSamples() const = 0;
-
- // Returns nonzero if there aren't any samples available for outputting.
- virtual int isEmpty() const = 0;
-
- /// Clears all the samples.
- virtual void clear() = 0;
-
- /// allow trimming (downwards) amount of samples in pipeline.
- /// Returns adjusted amount of samples
- virtual uint adjustAmountOfSamples(uint numSamples) = 0;
-
-};
-
-
-
-/// Base-class for sound processing routines working in FIFO principle. With this base
-/// class it's easy to implement sound processing stages that can be chained together,
-/// so that samples that are fed into beginning of the pipe automatically go through
-/// all the processing stages.
-///
-/// When samples are input to this class, they're first processed and then put to
-/// the FIFO pipe that's defined as output of this class. This output pipe can be
-/// either other processing stage or a FIFO sample buffer.
-class FIFOProcessor :public FIFOSamplePipe
-{
-protected:
- /// Internal pipe where processed samples are put.
- FIFOSamplePipe *output;
-
- /// Sets output pipe.
- void setOutPipe(FIFOSamplePipe *pOutput)
- {
- assert(output == NULL);
- assert(pOutput != NULL);
- output = pOutput;
- }
-
-
- /// Constructor. Doesn't define output pipe; it has to be set be
- /// 'setOutPipe' function.
- FIFOProcessor()
- {
- output = NULL;
- }
-
-
- /// Constructor. Configures output pipe.
- FIFOProcessor(FIFOSamplePipe *pOutput ///< Output pipe.
- )
- {
- output = pOutput;
- }
-
-
- /// Destructor.
- virtual ~FIFOProcessor()
- {
- }
-
-
- /// Returns a pointer to the beginning of the output samples.
- /// This function is provided for accessing the output samples directly.
- /// Please be careful for not to corrupt the book-keeping!
- ///
- /// When using this function to output samples, also remember to 'remove' the
- /// output samples from the buffer by calling the
- /// 'receiveSamples(numSamples)' function
- virtual SAMPLETYPE *ptrBegin()
- {
- return output->ptrBegin();
- }
-
-public:
-
- /// Output samples from beginning of the sample buffer. Copies requested samples to
- /// output buffer and removes them from the sample buffer. If there are less than
- /// 'numsample' samples in the buffer, returns all that available.
- ///
- /// \return Number of samples returned.
- virtual uint receiveSamples(SAMPLETYPE *outBuffer, ///< Buffer where to copy output samples.
- uint maxSamples ///< How many samples to receive at max.
- )
- {
- return output->receiveSamples(outBuffer, maxSamples);
- }
-
-
- /// Adjusts book-keeping so that given number of samples are removed from beginning of the
- /// sample buffer without copying them anywhere.
- ///
- /// Used to reduce the number of samples in the buffer when accessing the sample buffer directly
- /// with 'ptrBegin' function.
- virtual uint receiveSamples(uint maxSamples ///< Remove this many samples from the beginning of pipe.
- )
- {
- return output->receiveSamples(maxSamples);
- }
-
-
- /// Returns number of samples currently available.
- virtual uint numSamples() const
- {
- return output->numSamples();
- }
-
-
- /// Returns nonzero if there aren't any samples available for outputting.
- virtual int isEmpty() const
- {
- return output->isEmpty();
- }
-
- /// allow trimming (downwards) amount of samples in pipeline.
- /// Returns adjusted amount of samples
- virtual uint adjustAmountOfSamples(uint numSamples)
- {
- return output->adjustAmountOfSamples(numSamples);
- }
-
-};
-
-}
-
-#endif
diff --git a/src/thirdparty/SoundTouch/include/STTypes.h b/src/thirdparty/SoundTouch/include/STTypes.h
deleted file mode 100644
index 22907e7e5..000000000
--- a/src/thirdparty/SoundTouch/include/STTypes.h
+++ /dev/null
@@ -1,202 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Common type definitions for SoundTouch audio processing library.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-07 18:24:28 +0000 (Tue, 07 Jan 2014) $
-// File revision : $Revision: 3 $
-//
-// $Id: STTypes.h 183 2014-01-07 18:24:28Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef STTypes_H
-#define STTypes_H
-
-typedef unsigned int uint;
-typedef unsigned long ulong;
-
-// Patch for MinGW: on Win64 long is 32-bit
-#ifdef _WIN64
- typedef unsigned long long ulongptr;
-#else
- typedef ulong ulongptr;
-#endif
-
-
-// Helper macro for aligning pointer up to next 16-byte boundary
-#define SOUNDTOUCH_ALIGN_POINTER_16(x) ( ( (ulongptr)(x) + 15 ) & ~(ulongptr)15 )
-
-
-#if (defined(__GNUC__) && !defined(ANDROID))
- // In GCC, include soundtouch_config.h made by config scritps.
- // Skip this in Android compilation that uses GCC but without configure scripts.
- #include "soundtouch_config.h"
-#endif
-
-#ifndef _WINDEF_
- // if these aren't defined already by Windows headers, define now
-
-#if defined(__APPLE__)
- typedef signed char BOOL;
-#else
- typedef int BOOL;
-#endif
-
- #define FALSE 0
- #define TRUE 1
-
-#endif // _WINDEF_
-
-
-namespace soundtouch
-{
- /// Activate these undef's to overrule the possible sampletype
- /// setting inherited from some other header file:
- //#undef SOUNDTOUCH_INTEGER_SAMPLES
- //#undef SOUNDTOUCH_FLOAT_SAMPLES
-
- /// If following flag is defined, always uses multichannel processing
- /// routines also for mono and stero sound. This is for routine testing
- /// purposes; output should be same with either routines, yet disabling
- /// the dedicated mono/stereo processing routines will result in slower
- /// runtime performance so recommendation is to keep this off.
- // #define USE_MULTICH_ALWAYS
-
- #if (defined(__SOFTFP__))
- // For Android compilation: Force use of Integer samples in case that
- // compilation uses soft-floating point emulation - soft-fp is way too slow
- #undef SOUNDTOUCH_FLOAT_SAMPLES
- #define SOUNDTOUCH_INTEGER_SAMPLES 1
- #endif
-
- #if !(SOUNDTOUCH_INTEGER_SAMPLES || SOUNDTOUCH_FLOAT_SAMPLES)
-
- /// Choose either 32bit floating point or 16bit integer sampletype
- /// by choosing one of the following defines, unless this selection
- /// has already been done in some other file.
- ////
- /// Notes:
- /// - In Windows environment, choose the sample format with the
- /// following defines.
- /// - In GNU environment, the floating point samples are used by
- /// default, but integer samples can be chosen by giving the
- /// following switch to the configure script:
- /// ./configure --enable-integer-samples
- /// However, if you still prefer to select the sample format here
- /// also in GNU environment, then please #undef the INTEGER_SAMPLE
- /// and FLOAT_SAMPLE defines first as in comments above.
-
- // MPC-HC patch: define SOUNDTOUCH_INTEGER_SAMPLES
- // the default is SOUNDTOUCH_FLOAT_SAMPLES
- #define SOUNDTOUCH_INTEGER_SAMPLES 1 //< 16bit integer samples
- //#define SOUNDTOUCH_FLOAT_SAMPLES 1 //< 32bit float samples
-
- #endif
-
- #if (_M_IX86 || __i386__ || __x86_64__) /* MPC-HC patch: don't use optimizations for x64 (_M_X64);
- The __m64 data type is not supported on x64 processors */
- /// Define this to allow X86-specific assembler/intrinsic optimizations.
- /// Notice that library contains also usual C++ versions of each of these
- /// these routines, so if you're having difficulties getting the optimized
- /// routines compiled for whatever reason, you may disable these optimizations
- /// to make the library compile.
-
- #define SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS 1
-
- /// In GNU environment, allow the user to override this setting by
- /// giving the following switch to the configure script:
- /// ./configure --disable-x86-optimizations
- /// ./configure --enable-x86-optimizations=no
- #ifdef SOUNDTOUCH_DISABLE_X86_OPTIMIZATIONS
- #undef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
- #endif
- #else
- /// Always disable optimizations when not using a x86 systems.
- #undef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
-
- #endif
-
- // If defined, allows the SIMD-optimized routines to take minor shortcuts
- // for improved performance. Undefine to require faithfully similar SIMD
- // calculations as in normal C implementation.
- #define SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION 1
-
-
- #ifdef SOUNDTOUCH_INTEGER_SAMPLES
- // 16bit integer sample type
- typedef short SAMPLETYPE;
- // data type for sample accumulation: Use 32bit integer to prevent overflows
- typedef long LONG_SAMPLETYPE;
-
- #ifdef SOUNDTOUCH_FLOAT_SAMPLES
- // check that only one sample type is defined
- #error "conflicting sample types defined"
- #endif // SOUNDTOUCH_FLOAT_SAMPLES
-
- #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
- // Allow MMX optimizations
- #define SOUNDTOUCH_ALLOW_MMX 1
- #endif
-
- #else
-
- // floating point samples
- typedef float SAMPLETYPE;
- // data type for sample accumulation: Use double to utilize full precision.
- typedef double LONG_SAMPLETYPE;
-
- #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
- // Allow SSE optimizations
- #define SOUNDTOUCH_ALLOW_SSE 1
- #endif
-
- #endif // SOUNDTOUCH_INTEGER_SAMPLES
-
-};
-
-// define ST_NO_EXCEPTION_HANDLING switch to disable throwing std exceptions:
-// #define ST_NO_EXCEPTION_HANDLING 1
-#ifdef ST_NO_EXCEPTION_HANDLING
- // Exceptions disabled. Throw asserts instead if enabled.
- #include <assert.h>
- #define ST_THROW_RT_ERROR(x) {assert((const char *)x);}
-#else
- // use c++ standard exceptions
- #include <stdexcept>
- #define ST_THROW_RT_ERROR(x) {throw std::runtime_error(x);}
-#endif
-
-// When this #define is active, eliminates a clicking sound when the "rate" or "pitch"
-// parameter setting crosses from value <1 to >=1 or vice versa during processing.
-// Default is off as such crossover is untypical case and involves a slight sound
-// quality compromise.
-//#define SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER 1
-
-#endif
diff --git a/src/thirdparty/SoundTouch/include/SoundTouch.h b/src/thirdparty/SoundTouch/include/SoundTouch.h
deleted file mode 100644
index 6fbdb3b15..000000000
--- a/src/thirdparty/SoundTouch/include/SoundTouch.h
+++ /dev/null
@@ -1,277 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////
-///
-/// SoundTouch - main class for tempo/pitch/rate adjusting routines.
-///
-/// Notes:
-/// - Initialize the SoundTouch object instance by setting up the sound stream
-/// parameters with functions 'setSampleRate' and 'setChannels', then set
-/// desired tempo/pitch/rate settings with the corresponding functions.
-///
-/// - The SoundTouch class behaves like a first-in-first-out pipeline: The
-/// samples that are to be processed are fed into one of the pipe by calling
-/// function 'putSamples', while the ready processed samples can be read
-/// from the other end of the pipeline with function 'receiveSamples'.
-///
-/// - The SoundTouch processing classes require certain sized 'batches' of
-/// samples in order to process the sound. For this reason the classes buffer
-/// incoming samples until there are enough of samples available for
-/// processing, then they carry out the processing step and consequently
-/// make the processed samples available for outputting.
-///
-/// - For the above reason, the processing routines introduce a certain
-/// 'latency' between the input and output, so that the samples input to
-/// SoundTouch may not be immediately available in the output, and neither
-/// the amount of outputtable samples may not immediately be in direct
-/// relationship with the amount of previously input samples.
-///
-/// - The tempo/pitch/rate control parameters can be altered during processing.
-/// Please notice though that they aren't currently protected by semaphores,
-/// so in multi-thread application external semaphore protection may be
-/// required.
-///
-/// - This class utilizes classes 'TDStretch' for tempo change (without modifying
-/// pitch) and 'RateTransposer' for changing the playback rate (that is, both
-/// tempo and pitch in the same ratio) of the sound. The third available control
-/// 'pitch' (change pitch but maintain tempo) is produced by a combination of
-/// combining the two other controls.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-07 19:26:29 +0000 (Tue, 07 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: SoundTouch.h 185 2014-01-07 19:26:29Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef SoundTouch_H
-#define SoundTouch_H
-
-#include "FIFOSamplePipe.h"
-#include "STTypes.h"
-
-namespace soundtouch
-{
-
-/// Soundtouch library version string
-#define SOUNDTOUCH_VERSION "1.8.0"
-
-/// SoundTouch library version id
-#define SOUNDTOUCH_VERSION_ID (10800)
-
-//
-// Available setting IDs for the 'setSetting' & 'get_setting' functions:
-
-/// Enable/disable anti-alias filter in pitch transposer (0 = disable)
-#define SETTING_USE_AA_FILTER 0
-
-/// Pitch transposer anti-alias filter length (8 .. 128 taps, default = 32)
-#define SETTING_AA_FILTER_LENGTH 1
-
-/// Enable/disable quick seeking algorithm in tempo changer routine
-/// (enabling quick seeking lowers CPU utilization but causes a minor sound
-/// quality compromising)
-#define SETTING_USE_QUICKSEEK 2
-
-/// Time-stretch algorithm single processing sequence length in milliseconds. This determines
-/// to how long sequences the original sound is chopped in the time-stretch algorithm.
-/// See "STTypes.h" or README for more information.
-#define SETTING_SEQUENCE_MS 3
-
-/// Time-stretch algorithm seeking window length in milliseconds for algorithm that finds the
-/// best possible overlapping location. This determines from how wide window the algorithm
-/// may look for an optimal joining location when mixing the sound sequences back together.
-/// See "STTypes.h" or README for more information.
-#define SETTING_SEEKWINDOW_MS 4
-
-/// Time-stretch algorithm overlap length in milliseconds. When the chopped sound sequences
-/// are mixed back together, to form a continuous sound stream, this parameter defines over
-/// how long period the two consecutive sequences are let to overlap each other.
-/// See "STTypes.h" or README for more information.
-#define SETTING_OVERLAP_MS 5
-
-
-/// Call "getSetting" with this ID to query nominal average processing sequence
-/// size in samples. This value tells approcimate value how many input samples
-/// SoundTouch needs to gather before it does DSP processing run for the sample batch.
-///
-/// Notices:
-/// - This is read-only parameter, i.e. setSetting ignores this parameter
-/// - Returned value is approximate average value, exact processing batch
-/// size may wary from time to time
-/// - This parameter value is not constant but may change depending on
-/// tempo/pitch/rate/samplerate settings.
-#define SETTING_NOMINAL_INPUT_SEQUENCE 6
-
-
-/// Call "getSetting" with this ID to query nominal average processing output
-/// size in samples. This value tells approcimate value how many output samples
-/// SoundTouch outputs once it does DSP processing run for a batch of input samples.
-///
-/// Notices:
-/// - This is read-only parameter, i.e. setSetting ignores this parameter
-/// - Returned value is approximate average value, exact processing batch
-/// size may wary from time to time
-/// - This parameter value is not constant but may change depending on
-/// tempo/pitch/rate/samplerate settings.
-#define SETTING_NOMINAL_OUTPUT_SEQUENCE 7
-
-class SoundTouch : public FIFOProcessor
-{
-private:
- /// Rate transposer class instance
- class RateTransposer *pRateTransposer;
-
- /// Time-stretch class instance
- class TDStretch *pTDStretch;
-
- /// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters.
- float virtualRate;
-
- /// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters.
- float virtualTempo;
-
- /// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters.
- float virtualPitch;
-
- /// Flag: Has sample rate been set?
- BOOL bSrateSet;
-
- /// Calculates effective rate & tempo valuescfrom 'virtualRate', 'virtualTempo' and
- /// 'virtualPitch' parameters.
- void calcEffectiveRateAndTempo();
-
-protected :
- /// Number of channels
- uint channels;
-
- /// Effective 'rate' value calculated from 'virtualRate', 'virtualTempo' and 'virtualPitch'
- float rate;
-
- /// Effective 'tempo' value calculated from 'virtualRate', 'virtualTempo' and 'virtualPitch'
- float tempo;
-
-public:
- SoundTouch();
- virtual ~SoundTouch();
-
- /// Get SoundTouch library version string
- static const char *getVersionString();
-
- /// Get SoundTouch library version Id
- static uint getVersionId();
-
- /// Sets new rate control value. Normal rate = 1.0, smaller values
- /// represent slower rate, larger faster rates.
- void setRate(float newRate);
-
- /// Sets new tempo control value. Normal tempo = 1.0, smaller values
- /// represent slower tempo, larger faster tempo.
- void setTempo(float newTempo);
-
- /// Sets new rate control value as a difference in percents compared
- /// to the original rate (-50 .. +100 %)
- void setRateChange(float newRate);
-
- /// Sets new tempo control value as a difference in percents compared
- /// to the original tempo (-50 .. +100 %)
- void setTempoChange(float newTempo);
-
- /// Sets new pitch control value. Original pitch = 1.0, smaller values
- /// represent lower pitches, larger values higher pitch.
- void setPitch(float newPitch);
-
- /// Sets pitch change in octaves compared to the original pitch
- /// (-1.00 .. +1.00)
- void setPitchOctaves(float newPitch);
-
- /// Sets pitch change in semi-tones compared to the original pitch
- /// (-12 .. +12)
- void setPitchSemiTones(int newPitch);
- void setPitchSemiTones(float newPitch);
-
- /// Sets the number of channels, 1 = mono, 2 = stereo
- void setChannels(uint numChannels);
-
- /// Sets sample rate.
- void setSampleRate(uint srate);
-
- /// Flushes the last samples from the processing pipeline to the output.
- /// Clears also the internal processing buffers.
- //
- /// Note: This function is meant for extracting the last samples of a sound
- /// stream. This function may introduce additional blank samples in the end
- /// of the sound stream, and thus it's not recommended to call this function
- /// in the middle of a sound stream.
- void flush();
-
- /// Adds 'numSamples' pcs of samples from the 'samples' memory position into
- /// the input of the object. Notice that sample rate _has_to_ be set before
- /// calling this function, otherwise throws a runtime_error exception.
- virtual void putSamples(
- const SAMPLETYPE *samples, ///< Pointer to sample buffer.
- uint numSamples ///< Number of samples in buffer. Notice
- ///< that in case of stereo-sound a single sample
- ///< contains data for both channels.
- );
-
- /// Clears all the samples in the object's output and internal processing
- /// buffers.
- virtual void clear();
-
- /// Changes a setting controlling the processing system behaviour. See the
- /// 'SETTING_...' defines for available setting ID's.
- ///
- /// \return 'TRUE' if the setting was succesfully changed
- BOOL setSetting(int settingId, ///< Setting ID number. see SETTING_... defines.
- int value ///< New setting value.
- );
-
- /// Reads a setting controlling the processing system behaviour. See the
- /// 'SETTING_...' defines for available setting ID's.
- ///
- /// \return the setting value.
- int getSetting(int settingId ///< Setting ID number, see SETTING_... defines.
- ) const;
-
- /// Returns number of samples currently unprocessed.
- virtual uint numUnprocessedSamples() const;
-
-
- /// Other handy functions that are implemented in the ancestor classes (see
- /// classes 'FIFOProcessor' and 'FIFOSamplePipe')
- ///
- /// - receiveSamples() : Use this function to receive 'ready' processed samples from SoundTouch.
- /// - numSamples() : Get number of 'ready' samples that can be received with
- /// function 'receiveSamples()'
- /// - isEmpty() : Returns nonzero if there aren't any 'ready' samples.
- /// - clear() : Clears all samples from ready/processing buffers.
-};
-
-}
-#endif
diff --git a/src/thirdparty/SoundTouch/soundtouch b/src/thirdparty/SoundTouch/soundtouch
new file mode 160000
+Subproject adb60efd61648d9e5068c0ec1fa13c9dbbe728b
diff --git a/src/thirdparty/SoundTouch/source/AAFilter.cpp b/src/thirdparty/SoundTouch/source/AAFilter.cpp
deleted file mode 100644
index d6c0e1ec9..000000000
--- a/src/thirdparty/SoundTouch/source/AAFilter.cpp
+++ /dev/null
@@ -1,236 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// FIR low-pass (anti-alias) filter with filter coefficient design routine and
-/// MMX optimization.
-///
-/// Anti-alias filter is used to prevent folding of high frequencies when
-/// transposing the sample rate with interpolation.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-05 21:40:22 +0000 (Sun, 05 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: AAFilter.cpp 177 2014-01-05 21:40:22Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <memory.h>
-#include <assert.h>
-#include <math.h>
-#include <stdlib.h>
-#include "AAFilter.h"
-#include "FIRFilter.h"
-
-using namespace soundtouch;
-
-#define PI M_PI // MPC-HC custom: define PI to M_PI from math.h
-#define TWOPI (2 * PI)
-
-// define this to save AA filter coefficients to a file
-// #define _DEBUG_SAVE_AAFILTER_COEFFICIENTS 1
-
-#ifdef _DEBUG_SAVE_AAFILTER_COEFFICIENTS
- #include <stdio.h>
-
- static void _DEBUG_SAVE_AAFIR_COEFFS(SAMPLETYPE *coeffs, int len)
- {
- FILE *fptr = fopen("aa_filter_coeffs.txt", "wt");
- if (fptr == NULL) return;
-
- for (int i = 0; i < len; i ++)
- {
- double temp = coeffs[i];
- fprintf(fptr, "%lf\n", temp);
- }
- fclose(fptr);
- }
-
-#else
- #define _DEBUG_SAVE_AAFIR_COEFFS(x, y)
-#endif
-
-
-/*****************************************************************************
- *
- * Implementation of the class 'AAFilter'
- *
- *****************************************************************************/
-
-AAFilter::AAFilter(uint len)
-{
- pFIR = FIRFilter::newInstance();
- cutoffFreq = 0.5;
- setLength(len);
-}
-
-
-
-AAFilter::~AAFilter()
-{
- delete pFIR;
-}
-
-
-
-// Sets new anti-alias filter cut-off edge frequency, scaled to
-// sampling frequency (nyquist frequency = 0.5).
-// The filter will cut frequencies higher than the given frequency.
-void AAFilter::setCutoffFreq(double newCutoffFreq)
-{
- cutoffFreq = newCutoffFreq;
- calculateCoeffs();
-}
-
-
-
-// Sets number of FIR filter taps
-void AAFilter::setLength(uint newLength)
-{
- length = newLength;
- calculateCoeffs();
-}
-
-
-
-// Calculates coefficients for a low-pass FIR filter using Hamming window
-void AAFilter::calculateCoeffs()
-{
- uint i;
- double cntTemp, temp, tempCoeff,h, w;
- double wc;
- double scaleCoeff, sum;
- double *work;
- SAMPLETYPE *coeffs;
-
- assert(length >= 2);
- assert(length % 4 == 0);
- assert(cutoffFreq >= 0);
- assert(cutoffFreq <= 0.5);
-
- work = new double[length];
- coeffs = new SAMPLETYPE[length];
-
- wc = 2.0 * PI * cutoffFreq;
- tempCoeff = TWOPI / (double)length;
-
- sum = 0;
- for (i = 0; i < length; i ++)
- {
- cntTemp = (double)i - (double)(length / 2);
-
- temp = cntTemp * wc;
- if (temp != 0)
- {
- h = sin(temp) / temp; // sinc function
- }
- else
- {
- h = 1.0;
- }
- w = 0.54 + 0.46 * cos(tempCoeff * cntTemp); // hamming window
-
- temp = w * h;
- work[i] = temp;
-
- // calc net sum of coefficients
- sum += temp;
- }
-
- // ensure the sum of coefficients is larger than zero
- assert(sum > 0);
-
- // ensure we've really designed a lowpass filter...
- assert(work[length/2] > 0);
- assert(work[length/2 + 1] > -1e-6);
- assert(work[length/2 - 1] > -1e-6);
-
- // Calculate a scaling coefficient in such a way that the result can be
- // divided by 16384
- scaleCoeff = 16384.0f / sum;
-
- for (i = 0; i < length; i ++)
- {
- temp = work[i] * scaleCoeff;
-//#if SOUNDTOUCH_INTEGER_SAMPLES
- // scale & round to nearest integer
- temp += (temp >= 0) ? 0.5 : -0.5;
- // ensure no overfloods
- assert(temp >= -32768 && temp <= 32767);
-//#endif
- coeffs[i] = (SAMPLETYPE)temp;
- }
-
- // Set coefficients. Use divide factor 14 => divide result by 2^14 = 16384
- pFIR->setCoefficients(coeffs, length, 14);
-
- _DEBUG_SAVE_AAFIR_COEFFS(coeffs, length);
-
- delete[] work;
- delete[] coeffs;
-}
-
-
-// Applies the filter to the given sequence of samples.
-// Note : The amount of outputted samples is by value of 'filter length'
-// smaller than the amount of input samples.
-uint AAFilter::evaluate(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples, uint numChannels) const
-{
- return pFIR->evaluate(dest, src, numSamples, numChannels);
-}
-
-
-/// Applies the filter to the given src & dest pipes, so that processed amount of
-/// samples get removed from src, and produced amount added to dest
-/// Note : The amount of outputted samples is by value of 'filter length'
-/// smaller than the amount of input samples.
-uint AAFilter::evaluate(FIFOSampleBuffer &dest, FIFOSampleBuffer &src) const
-{
- SAMPLETYPE *pdest;
- const SAMPLETYPE *psrc;
- uint numSrcSamples;
- uint result;
- int numChannels = src.getChannels();
-
- assert(numChannels == dest.getChannels());
-
- numSrcSamples = src.numSamples();
- psrc = src.ptrBegin();
- pdest = dest.ptrEnd(numSrcSamples);
- result = pFIR->evaluate(pdest, psrc, numSrcSamples, numChannels);
- src.receiveSamples(result);
- dest.putSamples(result);
-
- return result;
-}
-
-
-uint AAFilter::getLength() const
-{
- return pFIR->getLength();
-}
diff --git a/src/thirdparty/SoundTouch/source/AAFilter.h b/src/thirdparty/SoundTouch/source/AAFilter.h
deleted file mode 100644
index 4016c0f23..000000000
--- a/src/thirdparty/SoundTouch/source/AAFilter.h
+++ /dev/null
@@ -1,100 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Sampled sound tempo changer/time stretch algorithm. Changes the sound tempo
-/// while maintaining the original pitch by using a time domain WSOLA-like method
-/// with several performance-increasing tweaks.
-///
-/// Anti-alias filter is used to prevent folding of high frequencies when
-/// transposing the sample rate with interpolation.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-07 19:41:23 +0000 (Tue, 07 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: AAFilter.h 187 2014-01-07 19:41:23Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef AAFilter_H
-#define AAFilter_H
-
-#include "STTypes.h"
-#include "FIFOSampleBuffer.h"
-
-namespace soundtouch
-{
-
-class AAFilter
-{
-protected:
- class FIRFilter *pFIR;
-
- /// Low-pass filter cut-off frequency, negative = invalid
- double cutoffFreq;
-
- /// num of filter taps
- uint length;
-
- /// Calculate the FIR coefficients realizing the given cutoff-frequency
- void calculateCoeffs();
-public:
- AAFilter(uint length);
-
- ~AAFilter();
-
- /// Sets new anti-alias filter cut-off edge frequency, scaled to sampling
- /// frequency (nyquist frequency = 0.5). The filter will cut off the
- /// frequencies than that.
- void setCutoffFreq(double newCutoffFreq);
-
- /// Sets number of FIR filter taps, i.e. ~filter complexity
- void setLength(uint newLength);
-
- uint getLength() const;
-
- /// Applies the filter to the given sequence of samples.
- /// Note : The amount of outputted samples is by value of 'filter length'
- /// smaller than the amount of input samples.
- uint evaluate(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- uint numSamples,
- uint numChannels) const;
-
- /// Applies the filter to the given src & dest pipes, so that processed amount of
- /// samples get removed from src, and produced amount added to dest
- /// Note : The amount of outputted samples is by value of 'filter length'
- /// smaller than the amount of input samples.
- uint evaluate(FIFOSampleBuffer &dest,
- FIFOSampleBuffer &src) const;
-
-};
-
-}
-
-#endif
diff --git a/src/thirdparty/SoundTouch/source/BPMDetect.cpp b/src/thirdparty/SoundTouch/source/BPMDetect.cpp
deleted file mode 100644
index be2478388..000000000
--- a/src/thirdparty/SoundTouch/source/BPMDetect.cpp
+++ /dev/null
@@ -1,370 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Beats-per-minute (BPM) detection routine.
-///
-/// The beat detection algorithm works as follows:
-/// - Use function 'inputSamples' to input a chunks of samples to the class for
-/// analysis. It's a good idea to enter a large sound file or stream in smallish
-/// chunks of around few kilosamples in order not to extinguish too much RAM memory.
-/// - Inputted sound data is decimated to approx 500 Hz to reduce calculation burden,
-/// which is basically ok as low (bass) frequencies mostly determine the beat rate.
-/// Simple averaging is used for anti-alias filtering because the resulting signal
-/// quality isn't of that high importance.
-/// - Decimated sound data is enveloped, i.e. the amplitude shape is detected by
-/// taking absolute value that's smoothed by sliding average. Signal levels that
-/// are below a couple of times the general RMS amplitude level are cut away to
-/// leave only notable peaks there.
-/// - Repeating sound patterns (e.g. beats) are detected by calculating short-term
-/// autocorrelation function of the enveloped signal.
-/// - After whole sound data file has been analyzed as above, the bpm level is
-/// detected by function 'getBpm' that finds the highest peak of the autocorrelation
-/// function, calculates it's precise location and converts this reading to bpm's.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2012-08-30 19:45:25 +0000 (Thu, 30 Aug 2012) $
-// File revision : $Revision: 4 $
-//
-// $Id: BPMDetect.cpp 149 2012-08-30 19:45:25Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <math.h>
-#include <assert.h>
-#include <string.h>
-#include <stdio.h>
-#include "FIFOSampleBuffer.h"
-#include "PeakFinder.h"
-#include "BPMDetect.h"
-
-using namespace soundtouch;
-
-#define INPUT_BLOCK_SAMPLES 2048
-#define DECIMATED_BLOCK_SAMPLES 256
-
-/// decay constant for calculating RMS volume sliding average approximation
-/// (time constant is about 10 sec)
-const float avgdecay = 0.99986f;
-
-/// Normalization coefficient for calculating RMS sliding average approximation.
-const float avgnorm = (1 - avgdecay);
-
-
-////////////////////////////////////////////////////////////////////////////////
-
-// Enable following define to create bpm analysis file:
-
-// #define _CREATE_BPM_DEBUG_FILE
-
-#ifdef _CREATE_BPM_DEBUG_FILE
-
- #define DEBUGFILE_NAME "c:\\temp\\soundtouch-bpm-debug.txt"
-
- static void _SaveDebugData(const float *data, int minpos, int maxpos, double coeff)
- {
- FILE *fptr = fopen(DEBUGFILE_NAME, "wt");
- int i;
-
- if (fptr)
- {
- printf("\n\nWriting BPM debug data into file " DEBUGFILE_NAME "\n\n");
- for (i = minpos; i < maxpos; i ++)
- {
- fprintf(fptr, "%d\t%.1lf\t%f\n", i, coeff / (double)i, data[i]);
- }
- fclose(fptr);
- }
- }
-#else
- #define _SaveDebugData(a,b,c,d)
-#endif
-
-////////////////////////////////////////////////////////////////////////////////
-
-
-BPMDetect::BPMDetect(int numChannels, int aSampleRate)
-{
- this->sampleRate = aSampleRate;
- this->channels = numChannels;
-
- decimateSum = 0;
- decimateCount = 0;
-
- envelopeAccu = 0;
-
- // Initialize RMS volume accumulator to RMS level of 1500 (out of 32768) that's
- // safe initial RMS signal level value for song data. This value is then adapted
- // to the actual level during processing.
-#ifdef SOUNDTOUCH_INTEGER_SAMPLES
- // integer samples
- RMSVolumeAccu = (1500 * 1500) / avgnorm;
-#else
- // float samples, scaled to range [-1..+1[
- RMSVolumeAccu = (0.045f * 0.045f) / avgnorm;
-#endif
-
- // choose decimation factor so that result is approx. 1000 Hz
- decimateBy = sampleRate / 1000;
- assert(decimateBy > 0);
- assert(INPUT_BLOCK_SAMPLES < decimateBy * DECIMATED_BLOCK_SAMPLES);
-
- // Calculate window length & starting item according to desired min & max bpms
- windowLen = (60 * sampleRate) / (decimateBy * MIN_BPM);
- windowStart = (60 * sampleRate) / (decimateBy * MAX_BPM);
-
- assert(windowLen > windowStart);
-
- // allocate new working objects
- xcorr = new float[windowLen];
- memset(xcorr, 0, windowLen * sizeof(float));
-
- // allocate processing buffer
- buffer = new FIFOSampleBuffer();
- // we do processing in mono mode
- buffer->setChannels(1);
- buffer->clear();
-}
-
-
-
-BPMDetect::~BPMDetect()
-{
- delete[] xcorr;
- delete buffer;
-}
-
-
-
-/// convert to mono, low-pass filter & decimate to about 500 Hz.
-/// return number of outputted samples.
-///
-/// Decimation is used to remove the unnecessary frequencies and thus to reduce
-/// the amount of data needed to be processed as calculating autocorrelation
-/// function is a very-very heavy operation.
-///
-/// Anti-alias filtering is done simply by averaging the samples. This is really a
-/// poor-man's anti-alias filtering, but it's not so critical in this kind of application
-/// (it'd also be difficult to design a high-quality filter with steep cut-off at very
-/// narrow band)
-int BPMDetect::decimate(SAMPLETYPE *dest, const SAMPLETYPE *src, int numsamples)
-{
- int count, outcount;
- LONG_SAMPLETYPE out;
-
- assert(channels > 0);
- assert(decimateBy > 0);
- outcount = 0;
- for (count = 0; count < numsamples; count ++)
- {
- int j;
-
- // convert to mono and accumulate
- for (j = 0; j < channels; j ++)
- {
- decimateSum += src[j];
- }
- src += j;
-
- decimateCount ++;
- if (decimateCount >= decimateBy)
- {
- // Store every Nth sample only
- out = (LONG_SAMPLETYPE)(decimateSum / (decimateBy * channels));
- decimateSum = 0;
- decimateCount = 0;
-#ifdef SOUNDTOUCH_INTEGER_SAMPLES
- // check ranges for sure (shouldn't actually be necessary)
- if (out > 32767)
- {
- out = 32767;
- }
- else if (out < -32768)
- {
- out = -32768;
- }
-#endif // SOUNDTOUCH_INTEGER_SAMPLES
- dest[outcount] = (SAMPLETYPE)out;
- outcount ++;
- }
- }
- return outcount;
-}
-
-
-
-// Calculates autocorrelation function of the sample history buffer
-void BPMDetect::updateXCorr(int process_samples)
-{
- int offs;
- SAMPLETYPE *pBuffer;
-
- assert(buffer->numSamples() >= (uint)(process_samples + windowLen));
-
- pBuffer = buffer->ptrBegin();
- for (offs = windowStart; offs < windowLen; offs ++)
- {
- LONG_SAMPLETYPE sum;
- int i;
-
- sum = 0;
- for (i = 0; i < process_samples; i ++)
- {
- sum += pBuffer[i] * pBuffer[i + offs]; // scaling the sub-result shouldn't be necessary
- }
-// xcorr[offs] *= xcorr_decay; // decay 'xcorr' here with suitable coefficients
- // if it's desired that the system adapts automatically to
- // various bpms, e.g. in processing continouos music stream.
- // The 'xcorr_decay' should be a value that's smaller than but
- // close to one, and should also depend on 'process_samples' value.
-
- xcorr[offs] += (float)sum;
- }
-}
-
-
-// Calculates envelope of the sample data
-void BPMDetect::calcEnvelope(SAMPLETYPE *samples, int numsamples)
-{
- const static double decay = 0.7f; // decay constant for smoothing the envelope
- const static double norm = (1 - decay);
-
- int i;
- LONG_SAMPLETYPE out;
- double val;
-
- for (i = 0; i < numsamples; i ++)
- {
- // calc average RMS volume
- RMSVolumeAccu *= avgdecay;
- val = (float)fabs((float)samples[i]);
- RMSVolumeAccu += val * val;
-
- // cut amplitudes that are below cutoff ~2 times RMS volume
- // (we're interested in peak values, not the silent moments)
- if (val < 0.5 * sqrt(RMSVolumeAccu * avgnorm))
- {
- val = 0;
- }
-
- // smooth amplitude envelope
- envelopeAccu *= decay;
- envelopeAccu += val;
- out = (LONG_SAMPLETYPE)(envelopeAccu * norm);
-
-#ifdef SOUNDTOUCH_INTEGER_SAMPLES
- // cut peaks (shouldn't be necessary though)
- if (out > 32767) out = 32767;
-#endif // SOUNDTOUCH_INTEGER_SAMPLES
- samples[i] = (SAMPLETYPE)out;
- }
-}
-
-
-
-void BPMDetect::inputSamples(const SAMPLETYPE *samples, int numSamples)
-{
- SAMPLETYPE decimated[DECIMATED_BLOCK_SAMPLES];
-
- // iterate so that max INPUT_BLOCK_SAMPLES processed per iteration
- while (numSamples > 0)
- {
- int block;
- int decSamples;
-
- block = (numSamples > INPUT_BLOCK_SAMPLES) ? INPUT_BLOCK_SAMPLES : numSamples;
-
- // decimate. note that converts to mono at the same time
- decSamples = decimate(decimated, samples, block);
- samples += block * channels;
- numSamples -= block;
-
- // envelope new samples and add them to buffer
- calcEnvelope(decimated, decSamples);
- buffer->putSamples(decimated, decSamples);
- }
-
- // when the buffer has enought samples for processing...
- if ((int)buffer->numSamples() > windowLen)
- {
- int processLength;
-
- // how many samples are processed
- processLength = (int)buffer->numSamples() - windowLen;
-
- // ... calculate autocorrelations for oldest samples...
- updateXCorr(processLength);
- // ... and remove them from the buffer
- buffer->receiveSamples(processLength);
- }
-}
-
-
-
-void BPMDetect::removeBias()
-{
- int i;
- float minval = 1e12f; // arbitrary large number
-
- for (i = windowStart; i < windowLen; i ++)
- {
- if (xcorr[i] < minval)
- {
- minval = xcorr[i];
- }
- }
-
- for (i = windowStart; i < windowLen; i ++)
- {
- xcorr[i] -= minval;
- }
-}
-
-
-float BPMDetect::getBpm()
-{
- double peakPos;
- double coeff;
- PeakFinder peakFinder;
-
- coeff = 60.0 * ((double)sampleRate / (double)decimateBy);
-
- // save bpm debug analysis data if debug data enabled
- _SaveDebugData(xcorr, windowStart, windowLen, coeff);
-
- // remove bias from xcorr data
- removeBias();
-
- // find peak position
- peakPos = peakFinder.detectPeak(xcorr, windowStart, windowLen);
-
- assert(decimateBy != 0);
- if (peakPos < 1e-9) return 0.0; // detection failed.
-
- // calculate BPM
- return (float) (coeff / peakPos);
-}
diff --git a/src/thirdparty/SoundTouch/source/FIFOSampleBuffer.cpp b/src/thirdparty/SoundTouch/source/FIFOSampleBuffer.cpp
deleted file mode 100644
index be6060e3c..000000000
--- a/src/thirdparty/SoundTouch/source/FIFOSampleBuffer.cpp
+++ /dev/null
@@ -1,274 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// A buffer class for temporarily storaging sound samples, operates as a
-/// first-in-first-out pipe.
-///
-/// Samples are added to the end of the sample buffer with the 'putSamples'
-/// function, and are received from the beginning of the buffer by calling
-/// the 'receiveSamples' function. The class automatically removes the
-/// outputted samples from the buffer, as well as grows the buffer size
-/// whenever necessary.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2012-11-08 18:53:01 +0000 (Thu, 08 Nov 2012) $
-// File revision : $Revision: 4 $
-//
-// $Id: FIFOSampleBuffer.cpp 160 2012-11-08 18:53:01Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <stdlib.h>
-#include <memory.h>
-#include <string.h>
-#include <assert.h>
-
-#include "FIFOSampleBuffer.h"
-
-using namespace soundtouch;
-
-// Constructor
-FIFOSampleBuffer::FIFOSampleBuffer(int numChannels)
-{
- assert(numChannels > 0);
- sizeInBytes = 0; // reasonable initial value
- buffer = NULL;
- bufferUnaligned = NULL;
- samplesInBuffer = 0;
- bufferPos = 0;
- channels = (uint)numChannels;
- ensureCapacity(32); // allocate initial capacity
-}
-
-
-// destructor
-FIFOSampleBuffer::~FIFOSampleBuffer()
-{
- delete[] bufferUnaligned;
- bufferUnaligned = NULL;
- buffer = NULL;
-}
-
-
-// Sets number of channels, 1 = mono, 2 = stereo
-void FIFOSampleBuffer::setChannels(int numChannels)
-{
- uint usedBytes;
-
- assert(numChannels > 0);
- usedBytes = channels * samplesInBuffer;
- channels = (uint)numChannels;
- samplesInBuffer = usedBytes / channels;
-}
-
-
-// if output location pointer 'bufferPos' isn't zero, 'rewinds' the buffer and
-// zeroes this pointer by copying samples from the 'bufferPos' pointer
-// location on to the beginning of the buffer.
-void FIFOSampleBuffer::rewind()
-{
- if (buffer && bufferPos)
- {
- memmove(buffer, ptrBegin(), sizeof(SAMPLETYPE) * channels * samplesInBuffer);
- bufferPos = 0;
- }
-}
-
-
-// Adds 'numSamples' pcs of samples from the 'samples' memory position to
-// the sample buffer.
-void FIFOSampleBuffer::putSamples(const SAMPLETYPE *samples, uint nSamples)
-{
- memcpy(ptrEnd(nSamples), samples, sizeof(SAMPLETYPE) * nSamples * channels);
- samplesInBuffer += nSamples;
-}
-
-
-// Increases the number of samples in the buffer without copying any actual
-// samples.
-//
-// This function is used to update the number of samples in the sample buffer
-// when accessing the buffer directly with 'ptrEnd' function. Please be
-// careful though!
-void FIFOSampleBuffer::putSamples(uint nSamples)
-{
- uint req;
-
- req = samplesInBuffer + nSamples;
- ensureCapacity(req);
- samplesInBuffer += nSamples;
-}
-
-
-// Returns a pointer to the end of the used part of the sample buffer (i.e.
-// where the new samples are to be inserted). This function may be used for
-// inserting new samples into the sample buffer directly. Please be careful!
-//
-// Parameter 'slackCapacity' tells the function how much free capacity (in
-// terms of samples) there _at least_ should be, in order to the caller to
-// succesfully insert all the required samples to the buffer. When necessary,
-// the function grows the buffer size to comply with this requirement.
-//
-// When using this function as means for inserting new samples, also remember
-// to increase the sample count afterwards, by calling the
-// 'putSamples(numSamples)' function.
-SAMPLETYPE *FIFOSampleBuffer::ptrEnd(uint slackCapacity)
-{
- ensureCapacity(samplesInBuffer + slackCapacity);
- return buffer + samplesInBuffer * channels;
-}
-
-
-// Returns a pointer to the beginning of the currently non-outputted samples.
-// This function is provided for accessing the output samples directly.
-// Please be careful!
-//
-// When using this function to output samples, also remember to 'remove' the
-// outputted samples from the buffer by calling the
-// 'receiveSamples(numSamples)' function
-SAMPLETYPE *FIFOSampleBuffer::ptrBegin()
-{
- assert(buffer);
- return buffer + bufferPos * channels;
-}
-
-
-// Ensures that the buffer has enought capacity, i.e. space for _at least_
-// 'capacityRequirement' number of samples. The buffer is grown in steps of
-// 4 kilobytes to eliminate the need for frequently growing up the buffer,
-// as well as to round the buffer size up to the virtual memory page size.
-void FIFOSampleBuffer::ensureCapacity(uint capacityRequirement)
-{
- SAMPLETYPE *tempUnaligned, *temp;
-
- if (capacityRequirement > getCapacity())
- {
- // enlarge the buffer in 4kbyte steps (round up to next 4k boundary)
- sizeInBytes = (capacityRequirement * channels * sizeof(SAMPLETYPE) + 4095) & (uint)-4096;
- assert(sizeInBytes % 2 == 0);
- tempUnaligned = new SAMPLETYPE[sizeInBytes / sizeof(SAMPLETYPE) + 16 / sizeof(SAMPLETYPE)];
- if (tempUnaligned == NULL)
- {
- ST_THROW_RT_ERROR("Couldn't allocate memory!\n");
- }
- // Align the buffer to begin at 16byte cache line boundary for optimal performance
- temp = (SAMPLETYPE *)SOUNDTOUCH_ALIGN_POINTER_16(tempUnaligned);
- if (samplesInBuffer)
- {
- memcpy(temp, ptrBegin(), samplesInBuffer * channels * sizeof(SAMPLETYPE));
- }
- delete[] bufferUnaligned;
- buffer = temp;
- bufferUnaligned = tempUnaligned;
- bufferPos = 0;
- }
- else
- {
- // simply rewind the buffer (if necessary)
- rewind();
- }
-}
-
-
-// Returns the current buffer capacity in terms of samples
-uint FIFOSampleBuffer::getCapacity() const
-{
- return sizeInBytes / (channels * sizeof(SAMPLETYPE));
-}
-
-
-// Returns the number of samples currently in the buffer
-uint FIFOSampleBuffer::numSamples() const
-{
- return samplesInBuffer;
-}
-
-
-// Output samples from beginning of the sample buffer. Copies demanded number
-// of samples to output and removes them from the sample buffer. If there
-// are less than 'numsample' samples in the buffer, returns all available.
-//
-// Returns number of samples copied.
-uint FIFOSampleBuffer::receiveSamples(SAMPLETYPE *output, uint maxSamples)
-{
- uint num;
-
- num = (maxSamples > samplesInBuffer) ? samplesInBuffer : maxSamples;
-
- memcpy(output, ptrBegin(), channels * sizeof(SAMPLETYPE) * num);
- return receiveSamples(num);
-}
-
-
-// Removes samples from the beginning of the sample buffer without copying them
-// anywhere. Used to reduce the number of samples in the buffer, when accessing
-// the sample buffer with the 'ptrBegin' function.
-uint FIFOSampleBuffer::receiveSamples(uint maxSamples)
-{
- if (maxSamples >= samplesInBuffer)
- {
- uint temp;
-
- temp = samplesInBuffer;
- samplesInBuffer = 0;
- return temp;
- }
-
- samplesInBuffer -= maxSamples;
- bufferPos += maxSamples;
-
- return maxSamples;
-}
-
-
-// Returns nonzero if the sample buffer is empty
-int FIFOSampleBuffer::isEmpty() const
-{
- return (samplesInBuffer == 0) ? 1 : 0;
-}
-
-
-// Clears the sample buffer
-void FIFOSampleBuffer::clear()
-{
- samplesInBuffer = 0;
- bufferPos = 0;
-}
-
-
-/// allow trimming (downwards) amount of samples in pipeline.
-/// Returns adjusted amount of samples
-uint FIFOSampleBuffer::adjustAmountOfSamples(uint numSamples)
-{
- if (numSamples < samplesInBuffer)
- {
- samplesInBuffer = numSamples;
- }
- return samplesInBuffer;
-}
-
diff --git a/src/thirdparty/SoundTouch/source/FIRFilter.cpp b/src/thirdparty/SoundTouch/source/FIRFilter.cpp
deleted file mode 100644
index d57389108..000000000
--- a/src/thirdparty/SoundTouch/source/FIRFilter.cpp
+++ /dev/null
@@ -1,322 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// General FIR digital filter routines with MMX optimization.
-///
-/// Note : MMX optimized functions reside in a separate, platform-specific file,
-/// e.g. 'mmx_win.cpp' or 'mmx_gcc.cpp'
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2013-06-12 15:24:44 +0000 (Wed, 12 Jun 2013) $
-// File revision : $Revision: 4 $
-//
-// $Id: FIRFilter.cpp 171 2013-06-12 15:24:44Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <memory.h>
-#include <assert.h>
-#include <math.h>
-#include <stdlib.h>
-#include "FIRFilter.h"
-#include "cpu_detect.h"
-
-using namespace soundtouch;
-
-/*****************************************************************************
- *
- * Implementation of the class 'FIRFilter'
- *
- *****************************************************************************/
-
-FIRFilter::FIRFilter()
-{
- resultDivFactor = 0;
- resultDivider = 0;
- length = 0;
- lengthDiv8 = 0;
- filterCoeffs = NULL;
-}
-
-
-FIRFilter::~FIRFilter()
-{
- delete[] filterCoeffs;
-}
-
-// Usual C-version of the filter routine for stereo sound
-uint FIRFilter::evaluateFilterStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples) const
-{
- uint i, j, end;
- LONG_SAMPLETYPE suml, sumr;
-#ifdef SOUNDTOUCH_FLOAT_SAMPLES
- // when using floating point samples, use a scaler instead of a divider
- // because division is much slower operation than multiplying.
- double dScaler = 1.0 / (double)resultDivider;
-#endif
-
- assert(length != 0);
- assert(src != NULL);
- assert(dest != NULL);
- assert(filterCoeffs != NULL);
-
- end = 2 * (numSamples - length);
-
- for (j = 0; j < end; j += 2)
- {
- const SAMPLETYPE *ptr;
-
- suml = sumr = 0;
- ptr = src + j;
-
- for (i = 0; i < length; i += 4)
- {
- // loop is unrolled by factor of 4 here for efficiency
- suml += ptr[2 * i + 0] * filterCoeffs[i + 0] +
- ptr[2 * i + 2] * filterCoeffs[i + 1] +
- ptr[2 * i + 4] * filterCoeffs[i + 2] +
- ptr[2 * i + 6] * filterCoeffs[i + 3];
- sumr += ptr[2 * i + 1] * filterCoeffs[i + 0] +
- ptr[2 * i + 3] * filterCoeffs[i + 1] +
- ptr[2 * i + 5] * filterCoeffs[i + 2] +
- ptr[2 * i + 7] * filterCoeffs[i + 3];
- }
-
-#ifdef SOUNDTOUCH_INTEGER_SAMPLES
- suml >>= resultDivFactor;
- sumr >>= resultDivFactor;
- // saturate to 16 bit integer limits
- suml = (suml < -32768) ? -32768 : (suml > 32767) ? 32767 : suml;
- // saturate to 16 bit integer limits
- sumr = (sumr < -32768) ? -32768 : (sumr > 32767) ? 32767 : sumr;
-#else
- suml *= dScaler;
- sumr *= dScaler;
-#endif // SOUNDTOUCH_INTEGER_SAMPLES
- dest[j] = (SAMPLETYPE)suml;
- dest[j + 1] = (SAMPLETYPE)sumr;
- }
- return numSamples - length;
-}
-
-
-
-
-// Usual C-version of the filter routine for mono sound
-uint FIRFilter::evaluateFilterMono(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples) const
-{
- uint i, j, end;
- LONG_SAMPLETYPE sum;
-#ifdef SOUNDTOUCH_FLOAT_SAMPLES
- // when using floating point samples, use a scaler instead of a divider
- // because division is much slower operation than multiplying.
- double dScaler = 1.0 / (double)resultDivider;
-#endif
-
-
- assert(length != 0);
-
- end = numSamples - length;
- for (j = 0; j < end; j ++)
- {
- sum = 0;
- for (i = 0; i < length; i += 4)
- {
- // loop is unrolled by factor of 4 here for efficiency
- sum += src[i + 0] * filterCoeffs[i + 0] +
- src[i + 1] * filterCoeffs[i + 1] +
- src[i + 2] * filterCoeffs[i + 2] +
- src[i + 3] * filterCoeffs[i + 3];
- }
-#ifdef SOUNDTOUCH_INTEGER_SAMPLES
- sum >>= resultDivFactor;
- // saturate to 16 bit integer limits
- sum = (sum < -32768) ? -32768 : (sum > 32767) ? 32767 : sum;
-#else
- sum *= dScaler;
-#endif // SOUNDTOUCH_INTEGER_SAMPLES
- dest[j] = (SAMPLETYPE)sum;
- src ++;
- }
- return end;
-}
-
-
-uint FIRFilter::evaluateFilterMulti(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples, uint numChannels) const
-{
- uint i, j, end, c;
- LONG_SAMPLETYPE *sum=(LONG_SAMPLETYPE*)alloca(numChannels*sizeof(*sum));
-#ifdef SOUNDTOUCH_FLOAT_SAMPLES
- // when using floating point samples, use a scaler instead of a divider
- // because division is much slower operation than multiplying.
- double dScaler = 1.0 / (double)resultDivider;
-#endif
-
- assert(length != 0);
- assert(src != NULL);
- assert(dest != NULL);
- assert(filterCoeffs != NULL);
-
- end = numChannels * (numSamples - length);
-
- for (c = 0; c < numChannels; c ++)
- {
- sum[c] = 0;
- }
-
- for (j = 0; j < end; j += numChannels)
- {
- const SAMPLETYPE *ptr;
-
- ptr = src + j;
-
- for (i = 0; i < length; i ++)
- {
- SAMPLETYPE coef=filterCoeffs[i];
- for (c = 0; c < numChannels; c ++)
- {
- sum[c] += ptr[0] * coef;
- ptr ++;
- }
- }
-
- for (c = 0; c < numChannels; c ++)
- {
-#ifdef SOUNDTOUCH_INTEGER_SAMPLES
- sum[c] >>= resultDivFactor;
-#else
- sum[c] *= dScaler;
-#endif // SOUNDTOUCH_INTEGER_SAMPLES
- *dest = (SAMPLETYPE)sum[c];
- dest++;
- sum[c] = 0;
- }
- }
- return numSamples - length;
-}
-
-
-// Set filter coeffiecients and length.
-//
-// Throws an exception if filter length isn't divisible by 8
-void FIRFilter::setCoefficients(const SAMPLETYPE *coeffs, uint newLength, uint uResultDivFactor)
-{
- assert(newLength > 0);
- if (newLength % 8) ST_THROW_RT_ERROR("FIR filter length not divisible by 8");
-
- lengthDiv8 = newLength / 8;
- length = lengthDiv8 * 8;
- assert(length == newLength);
-
- resultDivFactor = uResultDivFactor;
- resultDivider = (SAMPLETYPE)::pow(2.0, (int)resultDivFactor);
-
- delete[] filterCoeffs;
- filterCoeffs = new SAMPLETYPE[length];
- memcpy(filterCoeffs, coeffs, length * sizeof(SAMPLETYPE));
-}
-
-
-uint FIRFilter::getLength() const
-{
- return length;
-}
-
-
-
-// Applies the filter to the given sequence of samples.
-//
-// Note : The amount of outputted samples is by value of 'filter_length'
-// smaller than the amount of input samples.
-uint FIRFilter::evaluate(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples, uint numChannels) const
-{
- assert(length > 0);
- assert(lengthDiv8 * 8 == length);
-
- if (numSamples < length) return 0;
-
-#ifndef USE_MULTICH_ALWAYS
- if (numChannels == 1)
- {
- return evaluateFilterMono(dest, src, numSamples);
- }
- else if (numChannels == 2)
- {
- return evaluateFilterStereo(dest, src, numSamples);
- }
- else
-#endif // USE_MULTICH_ALWAYS
- {
- assert(numChannels > 0);
- return evaluateFilterMulti(dest, src, numSamples, numChannels);
- }
-}
-
-
-
-// Operator 'new' is overloaded so that it automatically creates a suitable instance
-// depending on if we've a MMX-capable CPU available or not.
-void * FIRFilter::operator new(size_t s)
-{
- // Notice! don't use "new FIRFilter" directly, use "newInstance" to create a new instance instead!
- ST_THROW_RT_ERROR("Error in FIRFilter::new: Don't use 'new FIRFilter', use 'newInstance' member instead!");
- return newInstance();
-}
-
-
-FIRFilter * FIRFilter::newInstance()
-{
- uint uExtensions;
-
- uExtensions = detectCPUextensions();
-
- // Check if MMX/SSE instruction set extensions supported by CPU
-
-#ifdef SOUNDTOUCH_ALLOW_MMX
- // MMX routines available only with integer sample types
- if (uExtensions & SUPPORT_MMX)
- {
- return ::new FIRFilterMMX;
- }
- else
-#endif // SOUNDTOUCH_ALLOW_MMX
-
-#ifdef SOUNDTOUCH_ALLOW_SSE
- if (uExtensions & SUPPORT_SSE)
- {
- // SSE support
- return ::new FIRFilterSSE;
- }
- else
-#endif // SOUNDTOUCH_ALLOW_SSE
-
- {
- // ISA optimizations not supported, use plain C version
- return ::new FIRFilter;
- }
-}
diff --git a/src/thirdparty/SoundTouch/source/FIRFilter.h b/src/thirdparty/SoundTouch/source/FIRFilter.h
deleted file mode 100644
index a498032fe..000000000
--- a/src/thirdparty/SoundTouch/source/FIRFilter.h
+++ /dev/null
@@ -1,146 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// General FIR digital filter routines with MMX optimization.
-///
-/// Note : MMX optimized functions reside in a separate, platform-specific file,
-/// e.g. 'mmx_win.cpp' or 'mmx_gcc.cpp'
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2013-06-12 15:24:44 +0000 (Wed, 12 Jun 2013) $
-// File revision : $Revision: 4 $
-//
-// $Id: FIRFilter.h 171 2013-06-12 15:24:44Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef FIRFilter_H
-#define FIRFilter_H
-
-#include <stddef.h>
-#include "STTypes.h"
-
-namespace soundtouch
-{
-
-class FIRFilter
-{
-protected:
- // Number of FIR filter taps
- uint length;
- // Number of FIR filter taps divided by 8
- uint lengthDiv8;
-
- // Result divider factor in 2^k format
- uint resultDivFactor;
-
- // Result divider value.
- SAMPLETYPE resultDivider;
-
- // Memory for filter coefficients
- SAMPLETYPE *filterCoeffs;
-
- virtual uint evaluateFilterStereo(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- uint numSamples) const;
- virtual uint evaluateFilterMono(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- uint numSamples) const;
- virtual uint evaluateFilterMulti(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples, uint numChannels) const;
-
-public:
- FIRFilter();
- virtual ~FIRFilter();
-
- /// Operator 'new' is overloaded so that it automatically creates a suitable instance
- /// depending on if we've a MMX-capable CPU available or not.
- static void * operator new(size_t s);
-
- static FIRFilter *newInstance();
-
- /// Applies the filter to the given sequence of samples.
- /// Note : The amount of outputted samples is by value of 'filter_length'
- /// smaller than the amount of input samples.
- ///
- /// \return Number of samples copied to 'dest'.
- uint evaluate(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- uint numSamples,
- uint numChannels) const;
-
- uint getLength() const;
-
- virtual void setCoefficients(const SAMPLETYPE *coeffs,
- uint newLength,
- uint uResultDivFactor);
-};
-
-
-// Optional subclasses that implement CPU-specific optimizations:
-
-#ifdef SOUNDTOUCH_ALLOW_MMX
-
-/// Class that implements MMX optimized functions exclusive for 16bit integer samples type.
- class FIRFilterMMX : public FIRFilter
- {
- protected:
- short *filterCoeffsUnalign;
- short *filterCoeffsAlign;
-
- virtual uint evaluateFilterStereo(short *dest, const short *src, uint numSamples) const;
- public:
- FIRFilterMMX();
- ~FIRFilterMMX();
-
- virtual void setCoefficients(const short *coeffs, uint newLength, uint uResultDivFactor);
- };
-
-#endif // SOUNDTOUCH_ALLOW_MMX
-
-
-#ifdef SOUNDTOUCH_ALLOW_SSE
- /// Class that implements SSE optimized functions exclusive for floating point samples type.
- class FIRFilterSSE : public FIRFilter
- {
- protected:
- float *filterCoeffsUnalign;
- float *filterCoeffsAlign;
-
- virtual uint evaluateFilterStereo(float *dest, const float *src, uint numSamples) const;
- public:
- FIRFilterSSE();
- ~FIRFilterSSE();
-
- virtual void setCoefficients(const float *coeffs, uint newLength, uint uResultDivFactor);
- };
-
-#endif // SOUNDTOUCH_ALLOW_SSE
-
-}
-
-#endif // FIRFilter_H
diff --git a/src/thirdparty/SoundTouch/source/InterpolateCubic.cpp b/src/thirdparty/SoundTouch/source/InterpolateCubic.cpp
deleted file mode 100644
index 8aa7374c7..000000000
--- a/src/thirdparty/SoundTouch/source/InterpolateCubic.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Cubic interpolation routine.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// $Id: InterpolateCubic.cpp 179 2014-01-06 18:41:42Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <stddef.h>
-#include <math.h>
-#include "InterpolateCubic.h"
-#include "STTypes.h"
-
-using namespace soundtouch;
-
-// cubic interpolation coefficients
-static const float _coeffs[]=
-{ -0.5f, 1.0f, -0.5f, 0.0f,
- 1.5f, -2.5f, 0.0f, 1.0f,
- -1.5f, 2.0f, 0.5f, 0.0f,
- 0.5f, -0.5f, 0.0f, 0.0f};
-
-
-InterpolateCubic::InterpolateCubic()
-{
- fract = 0;
-}
-
-
-void InterpolateCubic::resetRegisters()
-{
- fract = 0;
-}
-
-
-/// Transpose mono audio. Returns number of produced output samples, and
-/// updates "srcSamples" to amount of consumed source samples
-int InterpolateCubic::transposeMono(SAMPLETYPE *pdest,
- const SAMPLETYPE *psrc,
- int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 4;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- float out;
- const float x3 = 1.0f;
- const float x2 = (float)fract; // x
- const float x1 = x2*x2; // x^2
- const float x0 = x1*x2; // x^3
- float y0, y1, y2, y3;
-
- assert(fract < 1.0);
-
- y0 = _coeffs[0] * x0 + _coeffs[1] * x1 + _coeffs[2] * x2 + _coeffs[3] * x3;
- y1 = _coeffs[4] * x0 + _coeffs[5] * x1 + _coeffs[6] * x2 + _coeffs[7] * x3;
- y2 = _coeffs[8] * x0 + _coeffs[9] * x1 + _coeffs[10] * x2 + _coeffs[11] * x3;
- y3 = _coeffs[12] * x0 + _coeffs[13] * x1 + _coeffs[14] * x2 + _coeffs[15] * x3;
-
- out = y0 * psrc[0] + y1 * psrc[1] + y2 * psrc[2] + y3 * psrc[3];
-
- pdest[i] = (SAMPLETYPE)out;
- i ++;
-
- // update position fraction
- fract += rate;
- // update whole positions
- int whole = (int)fract;
- fract -= whole;
- psrc += whole;
- srcCount += whole;
- }
- srcSamples = srcCount;
- return i;
-}
-
-
-/// Transpose stereo audio. Returns number of produced output samples, and
-/// updates "srcSamples" to amount of consumed source samples
-int InterpolateCubic::transposeStereo(SAMPLETYPE *pdest,
- const SAMPLETYPE *psrc,
- int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 4;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- const float x3 = 1.0f;
- const float x2 = (float)fract; // x
- const float x1 = x2*x2; // x^2
- const float x0 = x1*x2; // x^3
- float y0, y1, y2, y3;
- float out0, out1;
-
- assert(fract < 1.0);
-
- y0 = _coeffs[0] * x0 + _coeffs[1] * x1 + _coeffs[2] * x2 + _coeffs[3] * x3;
- y1 = _coeffs[4] * x0 + _coeffs[5] * x1 + _coeffs[6] * x2 + _coeffs[7] * x3;
- y2 = _coeffs[8] * x0 + _coeffs[9] * x1 + _coeffs[10] * x2 + _coeffs[11] * x3;
- y3 = _coeffs[12] * x0 + _coeffs[13] * x1 + _coeffs[14] * x2 + _coeffs[15] * x3;
-
- out0 = y0 * psrc[0] + y1 * psrc[2] + y2 * psrc[4] + y3 * psrc[6];
- out1 = y0 * psrc[1] + y1 * psrc[3] + y2 * psrc[5] + y3 * psrc[7];
-
- pdest[2*i] = (SAMPLETYPE)out0;
- pdest[2*i+1] = (SAMPLETYPE)out1;
- i ++;
-
- // update position fraction
- fract += rate;
- // update whole positions
- int whole = (int)fract;
- fract -= whole;
- psrc += 2*whole;
- srcCount += whole;
- }
- srcSamples = srcCount;
- return i;
-}
-
-
-/// Transpose multi-channel audio. Returns number of produced output samples, and
-/// updates "srcSamples" to amount of consumed source samples
-int InterpolateCubic::transposeMulti(SAMPLETYPE *pdest,
- const SAMPLETYPE *psrc,
- int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 4;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- const float x3 = 1.0f;
- const float x2 = (float)fract; // x
- const float x1 = x2*x2; // x^2
- const float x0 = x1*x2; // x^3
- float y0, y1, y2, y3;
-
- assert(fract < 1.0);
-
- y0 = _coeffs[0] * x0 + _coeffs[1] * x1 + _coeffs[2] * x2 + _coeffs[3] * x3;
- y1 = _coeffs[4] * x0 + _coeffs[5] * x1 + _coeffs[6] * x2 + _coeffs[7] * x3;
- y2 = _coeffs[8] * x0 + _coeffs[9] * x1 + _coeffs[10] * x2 + _coeffs[11] * x3;
- y3 = _coeffs[12] * x0 + _coeffs[13] * x1 + _coeffs[14] * x2 + _coeffs[15] * x3;
-
- for (int c = 0; c < numChannels; c ++)
- {
- float out;
- out = y0 * psrc[c] + y1 * psrc[c + numChannels] + y2 * psrc[c + 2 * numChannels] + y3 * psrc[c + 3 * numChannels];
- pdest[0] = (SAMPLETYPE)out;
- pdest ++;
- }
- i ++;
-
- // update position fraction
- fract += rate;
- // update whole positions
- int whole = (int)fract;
- fract -= whole;
- psrc += numChannels*whole;
- srcCount += whole;
- }
- srcSamples = srcCount;
- return i;
-}
diff --git a/src/thirdparty/SoundTouch/source/InterpolateCubic.h b/src/thirdparty/SoundTouch/source/InterpolateCubic.h
deleted file mode 100644
index e0e302b23..000000000
--- a/src/thirdparty/SoundTouch/source/InterpolateCubic.h
+++ /dev/null
@@ -1,67 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Cubic interpolation routine.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// $Id: InterpolateCubic.h 179 2014-01-06 18:41:42Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef _InterpolateCubic_H_
-#define _InterpolateCubic_H_
-
-#include "RateTransposer.h"
-#include "STTypes.h"
-
-namespace soundtouch
-{
-
-class InterpolateCubic : public TransposerBase
-{
-protected:
- virtual void resetRegisters();
- virtual int transposeMono(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
- virtual int transposeStereo(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
- virtual int transposeMulti(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
-
- float fract;
-
-public:
- InterpolateCubic();
-};
-
-}
-
-#endif
diff --git a/src/thirdparty/SoundTouch/source/InterpolateLinear.cpp b/src/thirdparty/SoundTouch/source/InterpolateLinear.cpp
deleted file mode 100644
index ae26e69a1..000000000
--- a/src/thirdparty/SoundTouch/source/InterpolateLinear.cpp
+++ /dev/null
@@ -1,299 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Linear interpolation algorithm.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// $Id: InterpolateLinear.cpp 180 2014-01-06 19:16:02Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <assert.h>
-#include <stdlib.h>
-#include "InterpolateLinear.h"
-
-using namespace soundtouch;
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// InterpolateLinearInteger - integer arithmetic implementation
-//
-
-/// fixed-point interpolation routine precision
-#define SCALE 65536
-
-
-// Constructor
-InterpolateLinearInteger::InterpolateLinearInteger() : TransposerBase()
-{
- // Notice: use local function calling syntax for sake of clarity,
- // to indicate the fact that C++ constructor can't call virtual functions.
- resetRegisters();
- setRate(1.0f);
-}
-
-
-void InterpolateLinearInteger::resetRegisters()
-{
- iFract = 0;
-}
-
-
-// Transposes the sample rate of the given samples using linear interpolation.
-// 'Mono' version of the routine. Returns the number of samples returned in
-// the "dest" buffer
-int InterpolateLinearInteger::transposeMono(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 1;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- LONG_SAMPLETYPE temp;
-
- assert(iFract < SCALE);
-
- temp = (SCALE - iFract) * src[0] + iFract * src[1];
- dest[i] = (SAMPLETYPE)(temp / SCALE);
- i++;
-
- iFract += iRate;
-
- int iWhole = iFract / SCALE;
- iFract -= iWhole * SCALE;
- srcCount += iWhole;
- src += iWhole;
- }
- srcSamples = srcCount;
-
- return i;
-}
-
-
-// Transposes the sample rate of the given samples using linear interpolation.
-// 'Stereo' version of the routine. Returns the number of samples returned in
-// the "dest" buffer
-int InterpolateLinearInteger::transposeStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 1;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- LONG_SAMPLETYPE temp0;
- LONG_SAMPLETYPE temp1;
-
- assert(iFract < SCALE);
-
- temp0 = (SCALE - iFract) * src[0] + iFract * src[2];
- temp1 = (SCALE - iFract) * src[1] + iFract * src[3];
- dest[0] = (SAMPLETYPE)(temp0 / SCALE);
- dest[1] = (SAMPLETYPE)(temp1 / SCALE);
- dest += 2;
- i++;
-
- iFract += iRate;
-
- int iWhole = iFract / SCALE;
- iFract -= iWhole * SCALE;
- srcCount += iWhole;
- src += 2*iWhole;
- }
- srcSamples = srcCount;
-
- return i;
-}
-
-
-int InterpolateLinearInteger::transposeMulti(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 1;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- LONG_SAMPLETYPE temp, vol1;
-
- assert(iFract < SCALE);
- vol1 = (SCALE - iFract);
- for (int c = 0; c < numChannels; c ++)
- {
- temp = vol1 * src[c] + iFract * src[c + numChannels];
- dest[0] = (SAMPLETYPE)(temp / SCALE);
- dest ++;
- }
- i++;
-
- iFract += iRate;
-
- int iWhole = iFract / SCALE;
- iFract -= iWhole * SCALE;
- srcCount += iWhole;
- src += iWhole * numChannels;
- }
- srcSamples = srcCount;
-
- return i;
-}
-
-
-// Sets new target iRate. Normal iRate = 1.0, smaller values represent slower
-// iRate, larger faster iRates.
-void InterpolateLinearInteger::setRate(float newRate)
-{
- iRate = (int)(newRate * SCALE + 0.5f);
- TransposerBase::setRate(newRate);
-}
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// InterpolateLinearFloat - floating point arithmetic implementation
-//
-//////////////////////////////////////////////////////////////////////////////
-
-
-// Constructor
-InterpolateLinearFloat::InterpolateLinearFloat() : TransposerBase()
-{
- // Notice: use local function calling syntax for sake of clarity,
- // to indicate the fact that C++ constructor can't call virtual functions.
- resetRegisters();
- setRate(1.0f);
-}
-
-
-void InterpolateLinearFloat::resetRegisters()
-{
- fract = 0;
-}
-
-
-// Transposes the sample rate of the given samples using linear interpolation.
-// 'Mono' version of the routine. Returns the number of samples returned in
-// the "dest" buffer
-int InterpolateLinearFloat::transposeMono(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 1;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- double out;
- assert(fract < 1.0);
-
- out = (1.0 - fract) * src[0] + fract * src[1];
- dest[i] = (SAMPLETYPE)out;
- i ++;
-
- // update position fraction
- fract += rate;
- // update whole positions
- int whole = (int)fract;
- fract -= whole;
- src += whole;
- srcCount += whole;
- }
- srcSamples = srcCount;
- return i;
-}
-
-
-// Transposes the sample rate of the given samples using linear interpolation.
-// 'Mono' version of the routine. Returns the number of samples returned in
-// the "dest" buffer
-int InterpolateLinearFloat::transposeStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 1;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- double out0, out1;
- assert(fract < 1.0);
-
- out0 = (1.0 - fract) * src[0] + fract * src[2];
- out1 = (1.0 - fract) * src[1] + fract * src[3];
- dest[2*i] = (SAMPLETYPE)out0;
- dest[2*i+1] = (SAMPLETYPE)out1;
- i ++;
-
- // update position fraction
- fract += rate;
- // update whole positions
- int whole = (int)fract;
- fract -= whole;
- src += 2*whole;
- srcCount += whole;
- }
- srcSamples = srcCount;
- return i;
-}
-
-
-int InterpolateLinearFloat::transposeMulti(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 1;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- float temp, vol1;
-
- vol1 = (1.0f- fract);
- for (int c = 0; c < numChannels; c ++)
- {
- temp = vol1 * src[c] + fract * src[c + numChannels];
- *dest = (SAMPLETYPE)temp;
- dest ++;
- }
- i++;
-
- fract += rate;
-
- int iWhole = (int)fract;
- fract -= iWhole;
- srcCount += iWhole;
- src += iWhole * numChannels;
- }
- srcSamples = srcCount;
-
- return i;
-}
diff --git a/src/thirdparty/SoundTouch/source/InterpolateLinear.h b/src/thirdparty/SoundTouch/source/InterpolateLinear.h
deleted file mode 100644
index b76299f88..000000000
--- a/src/thirdparty/SoundTouch/source/InterpolateLinear.h
+++ /dev/null
@@ -1,92 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Linear interpolation routine.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// $Id: InterpolateLinear.h 179 2014-01-06 18:41:42Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef _InterpolateLinear_H_
-#define _InterpolateLinear_H_
-
-#include "RateTransposer.h"
-#include "STTypes.h"
-
-namespace soundtouch
-{
-
-/// Linear transposer class that uses integer arithmetics
-class InterpolateLinearInteger : public TransposerBase
-{
-protected:
- int iFract;
- int iRate;
-
- virtual void resetRegisters();
-
- virtual int transposeMono(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
- virtual int transposeStereo(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
- virtual int transposeMulti(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples);
-public:
- InterpolateLinearInteger();
-
- /// Sets new target rate. Normal rate = 1.0, smaller values represent slower
- /// rate, larger faster rates.
- virtual void setRate(float newRate);
-};
-
-
-/// Linear transposer class that uses floating point arithmetics
-class InterpolateLinearFloat : public TransposerBase
-{
-protected:
- float fract;
-
- virtual void resetRegisters();
-
- virtual int transposeMono(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
- virtual int transposeStereo(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
- virtual int transposeMulti(SAMPLETYPE *dest, const SAMPLETYPE *src, int &srcSamples);
-
-public:
- InterpolateLinearFloat();
-};
-
-}
-
-#endif
diff --git a/src/thirdparty/SoundTouch/source/InterpolateShannon.cpp b/src/thirdparty/SoundTouch/source/InterpolateShannon.cpp
deleted file mode 100644
index c6f9abfaf..000000000
--- a/src/thirdparty/SoundTouch/source/InterpolateShannon.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Sample interpolation routine using 8-tap band-limited Shannon interpolation
-/// with kaiser window.
-///
-/// Notice. This algorithm is remarkably much heavier than linear or cubic
-/// interpolation, and not remarkably better than cubic algorithm. Thus mostly
-/// for experimental purposes
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// $Id: InterpolateShannon.cpp 179 2014-01-06 18:41:42Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <math.h>
-#include "InterpolateShannon.h"
-#include "STTypes.h"
-
-using namespace soundtouch;
-
-
-/// Kaiser window with beta = 2.0
-/// Values scaled down by 5% to avoid overflows
-static const double _kaiser8[8] =
-{
- 0.41778693317814,
- 0.64888025049173,
- 0.83508562409944,
- 0.93887857733412,
- 0.93887857733412,
- 0.83508562409944,
- 0.64888025049173,
- 0.41778693317814
-};
-
-
-InterpolateShannon::InterpolateShannon()
-{
- fract = 0;
-}
-
-
-void InterpolateShannon::resetRegisters()
-{
- fract = 0;
-}
-
-
-// #define PI 3.1415926536
-#define PI M_PI // MPC-HC custom: define PI to M_PI from math.h
-#define sinc(x) (sin(PI * (x)) / (PI * (x)))
-
-/// Transpose mono audio. Returns number of produced output samples, and
-/// updates "srcSamples" to amount of consumed source samples
-int InterpolateShannon::transposeMono(SAMPLETYPE *pdest,
- const SAMPLETYPE *psrc,
- int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 8;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- double out;
- assert(fract < 1.0);
-
- out = psrc[0] * sinc(-3.0 - fract) * _kaiser8[0];
- out += psrc[1] * sinc(-2.0 - fract) * _kaiser8[1];
- out += psrc[2] * sinc(-1.0 - fract) * _kaiser8[2];
- if (fract < 1e-6)
- {
- out += psrc[3] * _kaiser8[3]; // sinc(0) = 1
- }
- else
- {
- out += psrc[3] * sinc(- fract) * _kaiser8[3];
- }
- out += psrc[4] * sinc( 1.0 - fract) * _kaiser8[4];
- out += psrc[5] * sinc( 2.0 - fract) * _kaiser8[5];
- out += psrc[6] * sinc( 3.0 - fract) * _kaiser8[6];
- out += psrc[7] * sinc( 4.0 - fract) * _kaiser8[7];
-
- pdest[i] = (SAMPLETYPE)out;
- i ++;
-
- // update position fraction
- fract += rate;
- // update whole positions
- int whole = (int)fract;
- fract -= whole;
- psrc += whole;
- srcCount += whole;
- }
- srcSamples = srcCount;
- return i;
-}
-
-
-/// Transpose stereo audio. Returns number of produced output samples, and
-/// updates "srcSamples" to amount of consumed source samples
-int InterpolateShannon::transposeStereo(SAMPLETYPE *pdest,
- const SAMPLETYPE *psrc,
- int &srcSamples)
-{
- int i;
- int srcSampleEnd = srcSamples - 8;
- int srcCount = 0;
-
- i = 0;
- while (srcCount < srcSampleEnd)
- {
- double out0, out1, w;
- assert(fract < 1.0);
-
- w = sinc(-3.0 - fract) * _kaiser8[0];
- out0 = psrc[0] * w; out1 = psrc[1] * w;
- w = sinc(-2.0 - fract) * _kaiser8[1];
- out0 += psrc[2] * w; out1 += psrc[3] * w;
- w = sinc(-1.0 - fract) * _kaiser8[2];
- out0 += psrc[4] * w; out1 += psrc[5] * w;
- w = _kaiser8[3] * ((fract < 1e-5) ? 1.0 : sinc(- fract)); // sinc(0) = 1
- out0 += psrc[6] * w; out1 += psrc[7] * w;
- w = sinc( 1.0 - fract) * _kaiser8[4];
- out0 += psrc[8] * w; out1 += psrc[9] * w;
- w = sinc( 2.0 - fract) * _kaiser8[5];
- out0 += psrc[10] * w; out1 += psrc[11] * w;
- w = sinc( 3.0 - fract) * _kaiser8[6];
- out0 += psrc[12] * w; out1 += psrc[13] * w;
- w = sinc( 4.0 - fract) * _kaiser8[7];
- out0 += psrc[14] * w; out1 += psrc[15] * w;
-
- pdest[2*i] = (SAMPLETYPE)out0;
- pdest[2*i+1] = (SAMPLETYPE)out1;
- i ++;
-
- // update position fraction
- fract += rate;
- // update whole positions
- int whole = (int)fract;
- fract -= whole;
- psrc += 2*whole;
- srcCount += whole;
- }
- srcSamples = srcCount;
- return i;
-}
-
-
-/// Transpose stereo audio. Returns number of produced output samples, and
-/// updates "srcSamples" to amount of consumed source samples
-int InterpolateShannon::transposeMulti(SAMPLETYPE *pdest,
- const SAMPLETYPE *psrc,
- int &srcSamples)
-{
- // not implemented
- assert(FALSE);
- return 0;
-}
diff --git a/src/thirdparty/SoundTouch/source/InterpolateShannon.h b/src/thirdparty/SoundTouch/source/InterpolateShannon.h
deleted file mode 100644
index 701640f7d..000000000
--- a/src/thirdparty/SoundTouch/source/InterpolateShannon.h
+++ /dev/null
@@ -1,72 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Sample interpolation routine using 8-tap band-limited Shannon interpolation
-/// with kaiser window.
-///
-/// Notice. This algorithm is remarkably much heavier than linear or cubic
-/// interpolation, and not remarkably better than cubic algorithm. Thus mostly
-/// for experimental purposes
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// $Id: InterpolateShannon.h 179 2014-01-06 18:41:42Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef _InterpolateShannon_H_
-#define _InterpolateShannon_H_
-
-#include "RateTransposer.h"
-#include "STTypes.h"
-
-namespace soundtouch
-{
-
-class InterpolateShannon : public TransposerBase
-{
-protected:
- void resetRegisters();
- int transposeMono(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
- int transposeStereo(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
- int transposeMulti(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples);
-
- float fract;
-
-public:
- InterpolateShannon();
-};
-
-}
-
-#endif
diff --git a/src/thirdparty/SoundTouch/source/PeakFinder.cpp b/src/thirdparty/SoundTouch/source/PeakFinder.cpp
deleted file mode 100644
index 0426b4a67..000000000
--- a/src/thirdparty/SoundTouch/source/PeakFinder.cpp
+++ /dev/null
@@ -1,276 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Peak detection routine.
-///
-/// The routine detects highest value on an array of values and calculates the
-/// precise peak location as a mass-center of the 'hump' around the peak value.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2012-12-28 19:52:47 +0000 (Fri, 28 Dec 2012) $
-// File revision : $Revision: 4 $
-//
-// $Id: PeakFinder.cpp 164 2012-12-28 19:52:47Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <math.h>
-#include <assert.h>
-
-#include "PeakFinder.h"
-
-using namespace soundtouch;
-
-#define max(x, y) (((x) > (y)) ? (x) : (y))
-
-
-PeakFinder::PeakFinder()
-{
- minPos = maxPos = 0;
-}
-
-
-// Finds real 'top' of a peak hump from neighnourhood of the given 'peakpos'.
-int PeakFinder::findTop(const float *data, int peakpos) const
-{
- int i;
- int start, end;
- float refvalue;
-
- refvalue = data[peakpos];
-
- // seek within 10 points
- start = peakpos - 10;
- if (start < minPos) start = minPos;
- end = peakpos + 10;
- if (end > maxPos) end = maxPos;
-
- for (i = start; i <= end; i ++)
- {
- if (data[i] > refvalue)
- {
- peakpos = i;
- refvalue = data[i];
- }
- }
-
- // failure if max value is at edges of seek range => it's not peak, it's at slope.
- if ((peakpos == start) || (peakpos == end)) return 0;
-
- return peakpos;
-}
-
-
-// Finds 'ground level' of a peak hump by starting from 'peakpos' and proceeding
-// to direction defined by 'direction' until next 'hump' after minimum value will
-// begin
-int PeakFinder::findGround(const float *data, int peakpos, int direction) const
-{
- int lowpos;
- int pos;
- int climb_count;
- float refvalue;
- float delta;
-
- climb_count = 0;
- refvalue = data[peakpos];
- lowpos = peakpos;
-
- pos = peakpos;
-
- while ((pos > minPos+1) && (pos < maxPos-1))
- {
- int prevpos;
-
- prevpos = pos;
- pos += direction;
-
- // calculate derivate
- delta = data[pos] - data[prevpos];
- if (delta <= 0)
- {
- // going downhill, ok
- if (climb_count)
- {
- climb_count --; // decrease climb count
- }
-
- // check if new minimum found
- if (data[pos] < refvalue)
- {
- // new minimum found
- lowpos = pos;
- refvalue = data[pos];
- }
- }
- else
- {
- // going uphill, increase climbing counter
- climb_count ++;
- if (climb_count > 5) break; // we've been climbing too long => it's next uphill => quit
- }
- }
- return lowpos;
-}
-
-
-// Find offset where the value crosses the given level, when starting from 'peakpos' and
-// proceeds to direction defined in 'direction'
-int PeakFinder::findCrossingLevel(const float *data, float level, int peakpos, int direction) const
-{
- float peaklevel;
- int pos;
-
- peaklevel = data[peakpos];
- assert(peaklevel >= level);
- pos = peakpos;
- while ((pos >= minPos) && (pos < maxPos))
- {
- if (data[pos + direction] < level) return pos; // crossing found
- pos += direction;
- }
- return -1; // not found
-}
-
-
-// Calculates the center of mass location of 'data' array items between 'firstPos' and 'lastPos'
-double PeakFinder::calcMassCenter(const float *data, int firstPos, int lastPos) const
-{
- int i;
- float sum;
- float wsum;
-
- sum = 0;
- wsum = 0;
- for (i = firstPos; i <= lastPos; i ++)
- {
- sum += (float)i * data[i];
- wsum += data[i];
- }
-
- if (wsum < 1e-6) return 0;
- return sum / wsum;
-}
-
-
-
-/// get exact center of peak near given position by calculating local mass of center
-double PeakFinder::getPeakCenter(const float *data, int peakpos) const
-{
- float peakLevel; // peak level
- int crosspos1, crosspos2; // position where the peak 'hump' crosses cutting level
- float cutLevel; // cutting value
- float groundLevel; // ground level of the peak
- int gp1, gp2; // bottom positions of the peak 'hump'
-
- // find ground positions.
- gp1 = findGround(data, peakpos, -1);
- gp2 = findGround(data, peakpos, 1);
-
- groundLevel = 0.5f * (data[gp1] + data[gp2]);
- peakLevel = data[peakpos];
-
- // calculate 70%-level of the peak
- cutLevel = 0.70f * peakLevel + 0.30f * groundLevel;
- // find mid-level crossings
- crosspos1 = findCrossingLevel(data, cutLevel, peakpos, -1);
- crosspos2 = findCrossingLevel(data, cutLevel, peakpos, 1);
-
- if ((crosspos1 < 0) || (crosspos2 < 0)) return 0; // no crossing, no peak..
-
- // calculate mass center of the peak surroundings
- return calcMassCenter(data, crosspos1, crosspos2);
-}
-
-
-
-double PeakFinder::detectPeak(const float *data, int aminPos, int amaxPos)
-{
-
- int i;
- int peakpos; // position of peak level
- double highPeak, peak;
-
- this->minPos = aminPos;
- this->maxPos = amaxPos;
-
- // find absolute peak
- peakpos = minPos;
- peak = data[minPos];
- for (i = minPos + 1; i < maxPos; i ++)
- {
- if (data[i] > peak)
- {
- peak = data[i];
- peakpos = i;
- }
- }
-
- // Calculate exact location of the highest peak mass center
- highPeak = getPeakCenter(data, peakpos);
- peak = highPeak;
-
- // Now check if the highest peak were in fact harmonic of the true base beat peak
- // - sometimes the highest peak can be Nth harmonic of the true base peak yet
- // just a slightly higher than the true base
-
- for (i = 3; i < 10; i ++)
- {
- double peaktmp, harmonic;
- int i1,i2;
-
- harmonic = (double)i * 0.5;
- peakpos = (int)(highPeak / harmonic + 0.5f);
- if (peakpos < minPos) break;
- peakpos = findTop(data, peakpos); // seek true local maximum index
- if (peakpos == 0) continue; // no local max here
-
- // calculate mass-center of possible harmonic peak
- peaktmp = getPeakCenter(data, peakpos);
-
- // accept harmonic peak if
- // (a) it is found
- // (b) is within 4% of the expected harmonic interval
- // (c) has at least half x-corr value of the max. peak
-
- double diff = harmonic * peaktmp / highPeak;
- if ((diff < 0.96) || (diff > 1.04)) continue; // peak too afar from expected
-
- // now compare to highest detected peak
- i1 = (int)(highPeak + 0.5);
- i2 = (int)(peaktmp + 0.5);
- if (data[i2] >= 0.4*data[i1])
- {
- // The harmonic is at least half as high primary peak,
- // thus use the harmonic peak instead
- peak = peaktmp;
- }
- }
-
- return peak;
-}
diff --git a/src/thirdparty/SoundTouch/source/PeakFinder.h b/src/thirdparty/SoundTouch/source/PeakFinder.h
deleted file mode 100644
index e94a554ed..000000000
--- a/src/thirdparty/SoundTouch/source/PeakFinder.h
+++ /dev/null
@@ -1,97 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// The routine detects highest value on an array of values and calculates the
-/// precise peak location as a mass-center of the 'hump' around the peak value.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2011-12-30 20:33:46 +0000 (Fri, 30 Dec 2011) $
-// File revision : $Revision: 4 $
-//
-// $Id: PeakFinder.h 132 2011-12-30 20:33:46Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef _PeakFinder_H_
-#define _PeakFinder_H_
-
-namespace soundtouch
-{
-
-class PeakFinder
-{
-protected:
- /// Min, max allowed peak positions within the data vector
- int minPos, maxPos;
-
- /// Calculates the mass center between given vector items.
- double calcMassCenter(const float *data, ///< Data vector.
- int firstPos, ///< Index of first vector item beloging to the peak.
- int lastPos ///< Index of last vector item beloging to the peak.
- ) const;
-
- /// Finds the data vector index where the monotoniously decreasing signal crosses the
- /// given level.
- int findCrossingLevel(const float *data, ///< Data vector.
- float level, ///< Goal crossing level.
- int peakpos, ///< Peak position index within the data vector.
- int direction /// Direction where to proceed from the peak: 1 = right, -1 = left.
- ) const;
-
- // Finds real 'top' of a peak hump from neighnourhood of the given 'peakpos'.
- int findTop(const float *data, int peakpos) const;
-
-
- /// Finds the 'ground' level, i.e. smallest level between two neighbouring peaks, to right-
- /// or left-hand side of the given peak position.
- int findGround(const float *data, /// Data vector.
- int peakpos, /// Peak position index within the data vector.
- int direction /// Direction where to proceed from the peak: 1 = right, -1 = left.
- ) const;
-
- /// get exact center of peak near given position by calculating local mass of center
- double getPeakCenter(const float *data, int peakpos) const;
-
-public:
- /// Constructor.
- PeakFinder();
-
- /// Detect exact peak position of the data vector by finding the largest peak 'hump'
- /// and calculating the mass-center location of the peak hump.
- ///
- /// \return The location of the largest base harmonic peak hump.
- double detectPeak(const float *data, /// Data vector to be analyzed. The data vector has
- /// to be at least 'maxPos' items long.
- int minPos, ///< Min allowed peak location within the vector data.
- int maxPos ///< Max allowed peak location within the vector data.
- );
-};
-
-}
-
-#endif // _PeakFinder_H_
diff --git a/src/thirdparty/SoundTouch/source/RateTransposer.cpp b/src/thirdparty/SoundTouch/source/RateTransposer.cpp
deleted file mode 100644
index 6b0dd0a5c..000000000
--- a/src/thirdparty/SoundTouch/source/RateTransposer.cpp
+++ /dev/null
@@ -1,302 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Sample rate transposer. Changes sample rate by using linear interpolation
-/// together with anti-alias filtering (first order interpolation with anti-
-/// alias filtering should be quite adequate for this application)
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-06 19:19:38 +0000 (Mon, 06 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: RateTransposer.cpp 181 2014-01-06 19:19:38Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <memory.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "RateTransposer.h"
-#include "InterpolateLinear.h"
-#include "InterpolateCubic.h"
-#include "InterpolateShannon.h"
-#include "AAFilter.h"
-
-using namespace soundtouch;
-
-// Define default interpolation algorithm here
-TransposerBase::ALGORITHM TransposerBase::algorithm = TransposerBase::CUBIC;
-
-
-// Constructor
-RateTransposer::RateTransposer() : FIFOProcessor(&outputBuffer)
-{
- bUseAAFilter = TRUE;
-
- // Instantiates the anti-alias filter
- pAAFilter = new AAFilter(64);
- pTransposer = TransposerBase::newInstance();
-}
-
-
-
-RateTransposer::~RateTransposer()
-{
- delete pAAFilter;
- delete pTransposer;
-}
-
-
-
-/// Enables/disables the anti-alias filter. Zero to disable, nonzero to enable
-void RateTransposer::enableAAFilter(BOOL newMode)
-{
- bUseAAFilter = newMode;
-}
-
-
-/// Returns nonzero if anti-alias filter is enabled.
-BOOL RateTransposer::isAAFilterEnabled() const
-{
- return bUseAAFilter;
-}
-
-
-AAFilter *RateTransposer::getAAFilter()
-{
- return pAAFilter;
-}
-
-
-
-// Sets new target iRate. Normal iRate = 1.0, smaller values represent slower
-// iRate, larger faster iRates.
-void RateTransposer::setRate(float newRate)
-{
- double fCutoff;
-
- pTransposer->setRate(newRate);
-
- // design a new anti-alias filter
- if (newRate > 1.0f)
- {
- fCutoff = 0.5f / newRate;
- }
- else
- {
- fCutoff = 0.5f * newRate;
- }
- pAAFilter->setCutoffFreq(fCutoff);
-}
-
-
-// Adds 'nSamples' pcs of samples from the 'samples' memory position into
-// the input of the object.
-void RateTransposer::putSamples(const SAMPLETYPE *samples, uint nSamples)
-{
- processSamples(samples, nSamples);
-}
-
-
-// Transposes sample rate by applying anti-alias filter to prevent folding.
-// Returns amount of samples returned in the "dest" buffer.
-// The maximum amount of samples that can be returned at a time is set by
-// the 'set_returnBuffer_size' function.
-void RateTransposer::processSamples(const SAMPLETYPE *src, uint nSamples)
-{
- uint count;
-
- if (nSamples == 0) return;
-
- // Store samples to input buffer
- inputBuffer.putSamples(src, nSamples);
-
- // If anti-alias filter is turned off, simply transpose without applying
- // the filter
- if (bUseAAFilter == FALSE)
- {
- count = pTransposer->transpose(outputBuffer, inputBuffer);
- return;
- }
-
- assert(pAAFilter);
-
- // Transpose with anti-alias filter
- if (pTransposer->rate < 1.0f)
- {
- // If the parameter 'Rate' value is smaller than 1, first transpose
- // the samples and then apply the anti-alias filter to remove aliasing.
-
- // Transpose the samples, store the result to end of "midBuffer"
- pTransposer->transpose(midBuffer, inputBuffer);
-
- // Apply the anti-alias filter for transposed samples in midBuffer
- pAAFilter->evaluate(outputBuffer, midBuffer);
- }
- else
- {
- // If the parameter 'Rate' value is larger than 1, first apply the
- // anti-alias filter to remove high frequencies (prevent them from folding
- // over the lover frequencies), then transpose.
-
- // Apply the anti-alias filter for samples in inputBuffer
- pAAFilter->evaluate(midBuffer, inputBuffer);
-
- // Transpose the AA-filtered samples in "midBuffer"
- pTransposer->transpose(outputBuffer, midBuffer);
- }
-}
-
-
-// Sets the number of channels, 1 = mono, 2 = stereo
-void RateTransposer::setChannels(int nChannels)
-{
- assert(nChannels > 0);
-
- if (pTransposer->numChannels == nChannels) return;
- pTransposer->setChannels(nChannels);
-
- inputBuffer.setChannels(nChannels);
- midBuffer.setChannels(nChannels);
- outputBuffer.setChannels(nChannels);
-}
-
-
-// Clears all the samples in the object
-void RateTransposer::clear()
-{
- outputBuffer.clear();
- midBuffer.clear();
- inputBuffer.clear();
-}
-
-
-// Returns nonzero if there aren't any samples available for outputting.
-int RateTransposer::isEmpty() const
-{
- int res;
-
- res = FIFOProcessor::isEmpty();
- if (res == 0) return 0;
- return inputBuffer.isEmpty();
-}
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// TransposerBase - Base class for interpolation
-//
-
-// static function to set interpolation algorithm
-void TransposerBase::setAlgorithm(TransposerBase::ALGORITHM a)
-{
- TransposerBase::algorithm = a;
-}
-
-
-// Transposes the sample rate of the given samples using linear interpolation.
-// Returns the number of samples returned in the "dest" buffer
-int TransposerBase::transpose(FIFOSampleBuffer &dest, FIFOSampleBuffer &src)
-{
- int numSrcSamples = src.numSamples();
- int sizeDemand = (int)((float)numSrcSamples / rate) + 8;
- int numOutput;
- SAMPLETYPE *psrc = src.ptrBegin();
- SAMPLETYPE *pdest = dest.ptrEnd(sizeDemand);
-
-#ifndef USE_MULTICH_ALWAYS
- if (numChannels == 1)
- {
- numOutput = transposeMono(pdest, psrc, numSrcSamples);
- }
- else if (numChannels == 2)
- {
- numOutput = transposeStereo(pdest, psrc, numSrcSamples);
- }
- else
-#endif // USE_MULTICH_ALWAYS
- {
- assert(numChannels > 0);
- numOutput = transposeMulti(pdest, psrc, numSrcSamples);
- }
- dest.putSamples(numOutput);
- src.receiveSamples(numSrcSamples);
- return numOutput;
-}
-
-
-TransposerBase::TransposerBase()
-{
- numChannels = 0;
- rate = 1.0f;
-}
-
-
-TransposerBase::~TransposerBase()
-{
-}
-
-
-void TransposerBase::setChannels(int channels)
-{
- numChannels = channels;
- resetRegisters();
-}
-
-
-void TransposerBase::setRate(float newRate)
-{
- rate = newRate;
-}
-
-
-// static factory function
-TransposerBase *TransposerBase::newInstance()
-{
-#ifdef SOUNDTOUCH_INTEGER_SAMPLES
- // Notice: For integer arithmetics support only linear algorithm (due to simplest calculus)
- return ::new InterpolateLinearInteger;
-#else
- switch (algorithm)
- {
- case LINEAR:
- return new InterpolateLinearFloat;
-
- case CUBIC:
- return new InterpolateCubic;
-
- case SHANNON:
- return new InterpolateShannon;
-
- default:
- assert(false);
- return NULL;
- }
-#endif
-}
diff --git a/src/thirdparty/SoundTouch/source/RateTransposer.h b/src/thirdparty/SoundTouch/source/RateTransposer.h
deleted file mode 100644
index 1be34843d..000000000
--- a/src/thirdparty/SoundTouch/source/RateTransposer.h
+++ /dev/null
@@ -1,179 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Sample rate transposer. Changes sample rate by using linear interpolation
-/// together with anti-alias filtering (first order interpolation with anti-
-/// alias filtering should be quite adequate for this application).
-///
-/// Use either of the derived classes of 'RateTransposerInteger' or
-/// 'RateTransposerFloat' for corresponding integer/floating point tranposing
-/// algorithm implementation.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-06 18:40:23 +0000 (Mon, 06 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: RateTransposer.h 178 2014-01-06 18:40:23Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef RateTransposer_H
-#define RateTransposer_H
-
-#include <stddef.h>
-#include "AAFilter.h"
-#include "FIFOSamplePipe.h"
-#include "FIFOSampleBuffer.h"
-
-#include "STTypes.h"
-
-namespace soundtouch
-{
-
-/// Abstract base class for transposer implementations (linear, advanced vs integer, float etc)
-class TransposerBase
-{
-public:
- enum ALGORITHM {
- LINEAR = 0,
- CUBIC,
- SHANNON
- };
-
-protected:
- virtual void resetRegisters() = 0;
-
- virtual int transposeMono(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples) = 0;
- virtual int transposeStereo(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples) = 0;
- virtual int transposeMulti(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples) = 0;
-
- static ALGORITHM algorithm;
-
-public:
- float rate;
- int numChannels;
-
- TransposerBase();
- virtual ~TransposerBase();
-
- virtual int transpose(FIFOSampleBuffer &dest, FIFOSampleBuffer &src);
- virtual void setRate(float newRate);
- virtual void setChannels(int channels);
-
- // static factory function
- static TransposerBase *newInstance();
-
- // static function to set interpolation algorithm
- static void setAlgorithm(ALGORITHM a);
-};
-
-
-/// A common linear samplerate transposer class.
-///
-class RateTransposer : public FIFOProcessor
-{
-protected:
- /// Anti-alias filter object
- AAFilter *pAAFilter;
- TransposerBase *pTransposer;
-
- /// Buffer for collecting samples to feed the anti-alias filter between
- /// two batches
- FIFOSampleBuffer inputBuffer;
-
- /// Buffer for keeping samples between transposing & anti-alias filter
- FIFOSampleBuffer midBuffer;
-
- /// Output sample buffer
- FIFOSampleBuffer outputBuffer;
-
- BOOL bUseAAFilter;
-
-
- /// Transposes sample rate by applying anti-alias filter to prevent folding.
- /// Returns amount of samples returned in the "dest" buffer.
- /// The maximum amount of samples that can be returned at a time is set by
- /// the 'set_returnBuffer_size' function.
- void processSamples(const SAMPLETYPE *src,
- uint numSamples);
-
-public:
- RateTransposer();
- virtual ~RateTransposer();
-
- /// Operator 'new' is overloaded so that it automatically creates a suitable instance
- /// depending on if we're to use integer or floating point arithmetics.
-// static void *operator new(size_t s);
-
- /// Use this function instead of "new" operator to create a new instance of this class.
- /// This function automatically chooses a correct implementation, depending on if
- /// integer ot floating point arithmetics are to be used.
-// static RateTransposer *newInstance();
-
- /// Returns the output buffer object
- FIFOSamplePipe *getOutput() { return &outputBuffer; };
-
- /// Returns the store buffer object
-// FIFOSamplePipe *getStore() { return &storeBuffer; };
-
- /// Return anti-alias filter object
- AAFilter *getAAFilter();
-
- /// Enables/disables the anti-alias filter. Zero to disable, nonzero to enable
- void enableAAFilter(BOOL newMode);
-
- /// Returns nonzero if anti-alias filter is enabled.
- BOOL isAAFilterEnabled() const;
-
- /// Sets new target rate. Normal rate = 1.0, smaller values represent slower
- /// rate, larger faster rates.
- virtual void setRate(float newRate);
-
- /// Sets the number of channels, 1 = mono, 2 = stereo
- void setChannels(int channels);
-
- /// Adds 'numSamples' pcs of samples from the 'samples' memory position into
- /// the input of the object.
- void putSamples(const SAMPLETYPE *samples, uint numSamples);
-
- /// Clears all the samples in the object
- void clear();
-
- /// Returns nonzero if there aren't any samples available for outputting.
- int isEmpty() const;
-};
-
-}
-
-#endif
diff --git a/src/thirdparty/SoundTouch/source/SoundTouch.cpp b/src/thirdparty/SoundTouch/source/SoundTouch.cpp
deleted file mode 100644
index 33907ce17..000000000
--- a/src/thirdparty/SoundTouch/source/SoundTouch.cpp
+++ /dev/null
@@ -1,502 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////
-///
-/// SoundTouch - main class for tempo/pitch/rate adjusting routines.
-///
-/// Notes:
-/// - Initialize the SoundTouch object instance by setting up the sound stream
-/// parameters with functions 'setSampleRate' and 'setChannels', then set
-/// desired tempo/pitch/rate settings with the corresponding functions.
-///
-/// - The SoundTouch class behaves like a first-in-first-out pipeline: The
-/// samples that are to be processed are fed into one of the pipe by calling
-/// function 'putSamples', while the ready processed samples can be read
-/// from the other end of the pipeline with function 'receiveSamples'.
-///
-/// - The SoundTouch processing classes require certain sized 'batches' of
-/// samples in order to process the sound. For this reason the classes buffer
-/// incoming samples until there are enough of samples available for
-/// processing, then they carry out the processing step and consequently
-/// make the processed samples available for outputting.
-///
-/// - For the above reason, the processing routines introduce a certain
-/// 'latency' between the input and output, so that the samples input to
-/// SoundTouch may not be immediately available in the output, and neither
-/// the amount of outputtable samples may not immediately be in direct
-/// relationship with the amount of previously input samples.
-///
-/// - The tempo/pitch/rate control parameters can be altered during processing.
-/// Please notice though that they aren't currently protected by semaphores,
-/// so in multi-thread application external semaphore protection may be
-/// required.
-///
-/// - This class utilizes classes 'TDStretch' for tempo change (without modifying
-/// pitch) and 'RateTransposer' for changing the playback rate (that is, both
-/// tempo and pitch in the same ratio) of the sound. The third available control
-/// 'pitch' (change pitch but maintain tempo) is produced by a combination of
-/// combining the two other controls.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-05 21:40:22 +0000 (Sun, 05 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: SoundTouch.cpp 177 2014-01-05 21:40:22Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <assert.h>
-#include <stdlib.h>
-#include <memory.h>
-#include <math.h>
-#include <stdio.h>
-
-#include "SoundTouch.h"
-#include "TDStretch.h"
-#include "RateTransposer.h"
-#include "cpu_detect.h"
-
-using namespace soundtouch;
-
-/// test if two floating point numbers are equal
-#define TEST_FLOAT_EQUAL(a, b) (fabs(a - b) < 1e-10)
-
-
-/// Print library version string for autoconf
-extern "C" void soundtouch_ac_test()
-{
- printf("SoundTouch Version: %s\n",SOUNDTOUCH_VERSION);
-}
-
-
-SoundTouch::SoundTouch()
-{
- // Initialize rate transposer and tempo changer instances
-
- pRateTransposer = new RateTransposer();
- pTDStretch = TDStretch::newInstance();
-
- setOutPipe(pTDStretch);
-
- rate = tempo = 0;
-
- virtualPitch =
- virtualRate =
- virtualTempo = 1.0;
-
- calcEffectiveRateAndTempo();
-
- channels = 0;
- bSrateSet = FALSE;
-}
-
-
-
-SoundTouch::~SoundTouch()
-{
- delete pRateTransposer;
- delete pTDStretch;
-}
-
-
-
-/// Get SoundTouch library version string
-const char *SoundTouch::getVersionString()
-{
- static const char *_version = SOUNDTOUCH_VERSION;
-
- return _version;
-}
-
-
-/// Get SoundTouch library version Id
-uint SoundTouch::getVersionId()
-{
- return SOUNDTOUCH_VERSION_ID;
-}
-
-
-// Sets the number of channels, 1 = mono, 2 = stereo
-void SoundTouch::setChannels(uint numChannels)
-{
- /*if (numChannels != 1 && numChannels != 2)
- {
- //ST_THROW_RT_ERROR("Illegal number of channels");
- return;
- }*/
- channels = numChannels;
- pRateTransposer->setChannels((int)numChannels);
- pTDStretch->setChannels((int)numChannels);
-}
-
-
-
-// Sets new rate control value. Normal rate = 1.0, smaller values
-// represent slower rate, larger faster rates.
-void SoundTouch::setRate(float newRate)
-{
- virtualRate = newRate;
- calcEffectiveRateAndTempo();
-}
-
-
-
-// Sets new rate control value as a difference in percents compared
-// to the original rate (-50 .. +100 %)
-void SoundTouch::setRateChange(float newRate)
-{
- virtualRate = 1.0f + 0.01f * newRate;
- calcEffectiveRateAndTempo();
-}
-
-
-
-// Sets new tempo control value. Normal tempo = 1.0, smaller values
-// represent slower tempo, larger faster tempo.
-void SoundTouch::setTempo(float newTempo)
-{
- virtualTempo = newTempo;
- calcEffectiveRateAndTempo();
-}
-
-
-
-// Sets new tempo control value as a difference in percents compared
-// to the original tempo (-50 .. +100 %)
-void SoundTouch::setTempoChange(float newTempo)
-{
- virtualTempo = 1.0f + 0.01f * newTempo;
- calcEffectiveRateAndTempo();
-}
-
-
-
-// Sets new pitch control value. Original pitch = 1.0, smaller values
-// represent lower pitches, larger values higher pitch.
-void SoundTouch::setPitch(float newPitch)
-{
- virtualPitch = newPitch;
- calcEffectiveRateAndTempo();
-}
-
-
-
-// Sets pitch change in octaves compared to the original pitch
-// (-1.00 .. +1.00)
-void SoundTouch::setPitchOctaves(float newPitch)
-{
- virtualPitch = (float)exp(0.69314718056f * newPitch);
- calcEffectiveRateAndTempo();
-}
-
-
-
-// Sets pitch change in semi-tones compared to the original pitch
-// (-12 .. +12)
-void SoundTouch::setPitchSemiTones(int newPitch)
-{
- setPitchOctaves((float)newPitch / 12.0f);
-}
-
-
-
-void SoundTouch::setPitchSemiTones(float newPitch)
-{
- setPitchOctaves(newPitch / 12.0f);
-}
-
-
-// Calculates 'effective' rate and tempo values from the
-// nominal control values.
-void SoundTouch::calcEffectiveRateAndTempo()
-{
- float oldTempo = tempo;
- float oldRate = rate;
-
- tempo = virtualTempo / virtualPitch;
- rate = virtualPitch * virtualRate;
-
- if (!TEST_FLOAT_EQUAL(rate,oldRate)) pRateTransposer->setRate(rate);
- if (!TEST_FLOAT_EQUAL(tempo, oldTempo)) pTDStretch->setTempo(tempo);
-
-#ifndef SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER
- if (rate <= 1.0f)
- {
- if (output != pTDStretch)
- {
- FIFOSamplePipe *tempoOut;
-
- assert(output == pRateTransposer);
- // move samples in the current output buffer to the output of pTDStretch
- tempoOut = pTDStretch->getOutput();
- tempoOut->moveSamples(*output);
- // move samples in pitch transposer's store buffer to tempo changer's input
- // deprecated : pTDStretch->moveSamples(*pRateTransposer->getStore());
-
- output = pTDStretch;
- }
- }
- else
-#endif
- {
- if (output != pRateTransposer)
- {
- FIFOSamplePipe *transOut;
-
- assert(output == pTDStretch);
- // move samples in the current output buffer to the output of pRateTransposer
- transOut = pRateTransposer->getOutput();
- transOut->moveSamples(*output);
- // move samples in tempo changer's input to pitch transposer's input
- pRateTransposer->moveSamples(*pTDStretch->getInput());
-
- output = pRateTransposer;
- }
- }
-}
-
-
-// Sets sample rate.
-void SoundTouch::setSampleRate(uint srate)
-{
- bSrateSet = TRUE;
- // set sample rate, leave other tempo changer parameters as they are.
- pTDStretch->setParameters((int)srate);
-}
-
-
-// Adds 'numSamples' pcs of samples from the 'samples' memory position into
-// the input of the object.
-void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples)
-{
- if (bSrateSet == FALSE)
- {
- ST_THROW_RT_ERROR("SoundTouch : Sample rate not defined");
- }
- else if (channels == 0)
- {
- ST_THROW_RT_ERROR("SoundTouch : Number of channels not defined");
- }
-
- // Transpose the rate of the new samples if necessary
- /* Bypass the nominal setting - can introduce a click in sound when tempo/pitch control crosses the nominal value...
- if (rate == 1.0f)
- {
- // The rate value is same as the original, simply evaluate the tempo changer.
- assert(output == pTDStretch);
- if (pRateTransposer->isEmpty() == 0)
- {
- // yet flush the last samples in the pitch transposer buffer
- // (may happen if 'rate' changes from a non-zero value to zero)
- pTDStretch->moveSamples(*pRateTransposer);
- }
- pTDStretch->putSamples(samples, nSamples);
- }
- */
-#ifndef SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER
- else if (rate <= 1.0f)
- {
- // transpose the rate down, output the transposed sound to tempo changer buffer
- assert(output == pTDStretch);
- pRateTransposer->putSamples(samples, nSamples);
- pTDStretch->moveSamples(*pRateTransposer);
- }
- else
-#endif
- {
- // evaluate the tempo changer, then transpose the rate up,
- assert(output == pRateTransposer);
- pTDStretch->putSamples(samples, nSamples);
- pRateTransposer->moveSamples(*pTDStretch);
- }
-}
-
-
-// Flushes the last samples from the processing pipeline to the output.
-// Clears also the internal processing buffers.
-//
-// Note: This function is meant for extracting the last samples of a sound
-// stream. This function may introduce additional blank samples in the end
-// of the sound stream, and thus it's not recommended to call this function
-// in the middle of a sound stream.
-void SoundTouch::flush()
-{
- int i;
- int nUnprocessed;
- int nOut;
- SAMPLETYPE *buff=(SAMPLETYPE*)alloca(64*channels*sizeof(SAMPLETYPE));
-
- // check how many samples still await processing, and scale
- // that by tempo & rate to get expected output sample count
- nUnprocessed = numUnprocessedSamples();
- nUnprocessed = (int)((double)nUnprocessed / (tempo * rate) + 0.5);
-
- nOut = numSamples(); // ready samples currently in buffer ...
- nOut += nUnprocessed; // ... and how many we expect there to be in the end
-
- memset(buff, 0, 64 * channels * sizeof(SAMPLETYPE));
- // "Push" the last active samples out from the processing pipeline by
- // feeding blank samples into the processing pipeline until new,
- // processed samples appear in the output (not however, more than
- // 8ksamples in any case)
- for (i = 0; i < 128; i ++)
- {
- putSamples(buff, 64);
- if ((int)numSamples() >= nOut)
- {
- // Enough new samples have appeared into the output!
- // As samples come from processing with bigger chunks, now truncate it
- // back to maximum "nOut" samples to improve duration accuracy
- adjustAmountOfSamples(nOut);
-
- // finish
- break;
- }
- }
-
- // Clear working buffers
- pRateTransposer->clear();
- pTDStretch->clearInput();
- // yet leave the 'tempoChanger' output intouched as that's where the
- // flushed samples are!
-}
-
-
-// Changes a setting controlling the processing system behaviour. See the
-// 'SETTING_...' defines for available setting ID's.
-BOOL SoundTouch::setSetting(int settingId, int value)
-{
- int sampleRate, sequenceMs, seekWindowMs, overlapMs;
-
- // read current tdstretch routine parameters
- pTDStretch->getParameters(&sampleRate, &sequenceMs, &seekWindowMs, &overlapMs);
-
- switch (settingId)
- {
- case SETTING_USE_AA_FILTER :
- // enables / disabless anti-alias filter
- pRateTransposer->enableAAFilter((value != 0) ? TRUE : FALSE);
- return TRUE;
-
- case SETTING_AA_FILTER_LENGTH :
- // sets anti-alias filter length
- pRateTransposer->getAAFilter()->setLength(value);
- return TRUE;
-
- case SETTING_USE_QUICKSEEK :
- // enables / disables tempo routine quick seeking algorithm
- pTDStretch->enableQuickSeek((value != 0) ? TRUE : FALSE);
- return TRUE;
-
- case SETTING_SEQUENCE_MS:
- // change time-stretch sequence duration parameter
- pTDStretch->setParameters(sampleRate, value, seekWindowMs, overlapMs);
- return TRUE;
-
- case SETTING_SEEKWINDOW_MS:
- // change time-stretch seek window length parameter
- pTDStretch->setParameters(sampleRate, sequenceMs, value, overlapMs);
- return TRUE;
-
- case SETTING_OVERLAP_MS:
- // change time-stretch overlap length parameter
- pTDStretch->setParameters(sampleRate, sequenceMs, seekWindowMs, value);
- return TRUE;
-
- default :
- return FALSE;
- }
-}
-
-
-// Reads a setting controlling the processing system behaviour. See the
-// 'SETTING_...' defines for available setting ID's.
-//
-// Returns the setting value.
-int SoundTouch::getSetting(int settingId) const
-{
- int temp;
-
- switch (settingId)
- {
- case SETTING_USE_AA_FILTER :
- return (uint)pRateTransposer->isAAFilterEnabled();
-
- case SETTING_AA_FILTER_LENGTH :
- return pRateTransposer->getAAFilter()->getLength();
-
- case SETTING_USE_QUICKSEEK :
- return (uint) pTDStretch->isQuickSeekEnabled();
-
- case SETTING_SEQUENCE_MS:
- pTDStretch->getParameters(NULL, &temp, NULL, NULL);
- return temp;
-
- case SETTING_SEEKWINDOW_MS:
- pTDStretch->getParameters(NULL, NULL, &temp, NULL);
- return temp;
-
- case SETTING_OVERLAP_MS:
- pTDStretch->getParameters(NULL, NULL, NULL, &temp);
- return temp;
-
- case SETTING_NOMINAL_INPUT_SEQUENCE :
- return pTDStretch->getInputSampleReq();
-
- case SETTING_NOMINAL_OUTPUT_SEQUENCE :
- return pTDStretch->getOutputBatchSize();
-
- default :
- return 0;
- }
-}
-
-
-// Clears all the samples in the object's output and internal processing
-// buffers.
-void SoundTouch::clear()
-{
- pRateTransposer->clear();
- pTDStretch->clear();
-}
-
-
-
-/// Returns number of samples currently unprocessed.
-uint SoundTouch::numUnprocessedSamples() const
-{
- FIFOSamplePipe * psp;
- if (pTDStretch)
- {
- psp = pTDStretch->getInput();
- if (psp)
- {
- return psp->numSamples();
- }
- }
- return 0;
-}
diff --git a/src/thirdparty/SoundTouch/source/SoundTouch.vcxproj b/src/thirdparty/SoundTouch/source/SoundTouch.vcxproj
deleted file mode 100644
index 4d49a5fd9..000000000
--- a/src/thirdparty/SoundTouch/source/SoundTouch.vcxproj
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{68A5DD20-7057-448B-8FE0-B6AC8D205509}</ProjectGuid>
- <RootNamespace>SoundTouch</RootNamespace>
- <Keyword>Win32Proj</Keyword>
- <ProjectName>SoundTouch</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClInclude Include="..\include\BPMDetect.h" />
- <ClInclude Include="..\include\FIFOSampleBuffer.h" />
- <ClInclude Include="..\include\FIFOSamplePipe.h" />
- <ClInclude Include="..\include\SoundTouch.h" />
- <ClInclude Include="..\include\STTypes.h" />
- <ClInclude Include="AAFilter.h" />
- <ClInclude Include="cpu_detect.h" />
- <ClInclude Include="FIRFilter.h" />
- <ClInclude Include="InterpolateCubic.h" />
- <ClInclude Include="InterpolateLinear.h" />
- <ClInclude Include="InterpolateShannon.h" />
- <ClInclude Include="PeakFinder.h" />
- <ClInclude Include="RateTransposer.h" />
- <ClInclude Include="TDStretch.h" />
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="AAFilter.cpp" />
- <ClCompile Include="BPMDetect.cpp" />
- <ClCompile Include="cpu_detect_x86.cpp" />
- <ClCompile Include="FIFOSampleBuffer.cpp" />
- <ClCompile Include="FIRFilter.cpp" />
- <ClCompile Include="InterpolateCubic.cpp" />
- <ClCompile Include="InterpolateLinear.cpp" />
- <ClCompile Include="InterpolateShannon.cpp" />
- <ClCompile Include="mmx_optimized.cpp">
- <ExcludedFromBuild Condition="'$(Platform)'=='x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="PeakFinder.cpp" />
- <ClCompile Include="RateTransposer.cpp" />
- <ClCompile Include="SoundTouch.cpp" />
- <ClCompile Include="sse_optimized.cpp">
- <ExcludedFromBuild>true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="TDStretch.cpp" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/src/thirdparty/SoundTouch/source/SoundTouch.vcxproj.filters b/src/thirdparty/SoundTouch/source/SoundTouch.vcxproj.filters
deleted file mode 100644
index 217841b0c..000000000
--- a/src/thirdparty/SoundTouch/source/SoundTouch.vcxproj.filters
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{aa41e207-7b47-4245-a2c6-c1d9d0c87ed8}</UniqueIdentifier>
- <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
- </Filter>
- <Filter Include="Source Files\bpm">
- <UniqueIdentifier>{1e81f342-0386-4ea9-b3d5-cf6ebb95efc3}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{c3316316-e027-4a82-9d8d-fdd5846add8c}</UniqueIdentifier>
- <Extensions>h;hpp;hxx;hm;inl</Extensions>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="AAFilter.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="cpu_detect.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="FIRFilter.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="PeakFinder.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="RateTransposer.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="TDStretch.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\include\BPMDetect.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\include\FIFOSampleBuffer.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\include\FIFOSamplePipe.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\include\SoundTouch.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\include\STTypes.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="InterpolateCubic.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="InterpolateLinear.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="InterpolateShannon.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="BPMDetect.cpp">
- <Filter>Source Files\bpm</Filter>
- </ClCompile>
- <ClCompile Include="PeakFinder.cpp">
- <Filter>Source Files\bpm</Filter>
- </ClCompile>
- <ClCompile Include="AAFilter.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="cpu_detect_x86.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="FIFOSampleBuffer.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="FIRFilter.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="mmx_optimized.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="RateTransposer.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="SoundTouch.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="sse_optimized.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="TDStretch.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="InterpolateCubic.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="InterpolateLinear.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="InterpolateShannon.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/src/thirdparty/SoundTouch/source/TDStretch.cpp b/src/thirdparty/SoundTouch/source/TDStretch.cpp
deleted file mode 100644
index b2eded295..000000000
--- a/src/thirdparty/SoundTouch/source/TDStretch.cpp
+++ /dev/null
@@ -1,947 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Sampled sound tempo changer/time stretch algorithm. Changes the sound tempo
-/// while maintaining the original pitch by using a time domain WSOLA-like
-/// method with several performance-increasing tweaks.
-///
-/// Note : MMX optimized functions reside in a separate, platform-specific
-/// file, e.g. 'mmx_win.cpp' or 'mmx_gcc.cpp'
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-07 18:25:40 +0000 (Tue, 07 Jan 2014) $
-// File revision : $Revision: 1.12 $
-//
-// $Id: TDStretch.cpp 184 2014-01-07 18:25:40Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include <string.h>
-#include <limits.h>
-#include <assert.h>
-#include <math.h>
-#include <float.h>
-
-#include "STTypes.h"
-#include "cpu_detect.h"
-#include "TDStretch.h"
-
-using namespace soundtouch;
-
-#define max(x, y) (((x) > (y)) ? (x) : (y))
-
-
-/*****************************************************************************
- *
- * Constant definitions
- *
- *****************************************************************************/
-
-// Table for the hierarchical mixing position seeking algorithm
-static const short _scanOffsets[5][24]={
- { 124, 186, 248, 310, 372, 434, 496, 558, 620, 682, 744, 806,
- 868, 930, 992, 1054, 1116, 1178, 1240, 1302, 1364, 1426, 1488, 0},
- {-100, -75, -50, -25, 25, 50, 75, 100, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { -20, -15, -10, -5, 5, 10, 15, 20, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { -4, -3, -2, -1, 1, 2, 3, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { 121, 114, 97, 114, 98, 105, 108, 32, 104, 99, 117, 111,
- 116, 100, 110, 117, 111, 115, 0, 0, 0, 0, 0, 0}};
-
-/*****************************************************************************
- *
- * Implementation of the class 'TDStretch'
- *
- *****************************************************************************/
-
-
-TDStretch::TDStretch() : FIFOProcessor(&outputBuffer)
-{
- bQuickSeek = FALSE;
- channels = 2;
-
- pMidBuffer = NULL;
- pMidBufferUnaligned = NULL;
- overlapLength = 0;
-
- bAutoSeqSetting = TRUE;
- bAutoSeekSetting = TRUE;
-
-// outDebt = 0;
- skipFract = 0;
-
- tempo = 1.0f;
- setParameters(44100, DEFAULT_SEQUENCE_MS, DEFAULT_SEEKWINDOW_MS, DEFAULT_OVERLAP_MS);
- setTempo(1.0f);
-
- clear();
-}
-
-
-
-TDStretch::~TDStretch()
-{
- delete[] pMidBufferUnaligned;
-}
-
-
-
-// Sets routine control parameters. These control are certain time constants
-// defining how the sound is stretched to the desired duration.
-//
-// 'sampleRate' = sample rate of the sound
-// 'sequenceMS' = one processing sequence length in milliseconds (default = 82 ms)
-// 'seekwindowMS' = seeking window length for scanning the best overlapping
-// position (default = 28 ms)
-// 'overlapMS' = overlapping length (default = 12 ms)
-
-void TDStretch::setParameters(int aSampleRate, int aSequenceMS,
- int aSeekWindowMS, int aOverlapMS)
-{
- // accept only positive parameter values - if zero or negative, use old values instead
- if (aSampleRate > 0) this->sampleRate = aSampleRate;
- if (aOverlapMS > 0) this->overlapMs = aOverlapMS;
-
- if (aSequenceMS > 0)
- {
- this->sequenceMs = aSequenceMS;
- bAutoSeqSetting = FALSE;
- }
- else if (aSequenceMS == 0)
- {
- // if zero, use automatic setting
- bAutoSeqSetting = TRUE;
- }
-
- if (aSeekWindowMS > 0)
- {
- this->seekWindowMs = aSeekWindowMS;
- bAutoSeekSetting = FALSE;
- }
- else if (aSeekWindowMS == 0)
- {
- // if zero, use automatic setting
- bAutoSeekSetting = TRUE;
- }
-
- calcSeqParameters();
-
- calculateOverlapLength(overlapMs);
-
- // set tempo to recalculate 'sampleReq'
- setTempo(tempo);
-}
-
-
-
-/// Get routine control parameters, see setParameters() function.
-/// Any of the parameters to this function can be NULL, in such case corresponding parameter
-/// value isn't returned.
-void TDStretch::getParameters(int *pSampleRate, int *pSequenceMs, int *pSeekWindowMs, int *pOverlapMs) const
-{
- if (pSampleRate)
- {
- *pSampleRate = sampleRate;
- }
-
- if (pSequenceMs)
- {
- *pSequenceMs = (bAutoSeqSetting) ? (USE_AUTO_SEQUENCE_LEN) : sequenceMs;
- }
-
- if (pSeekWindowMs)
- {
- *pSeekWindowMs = (bAutoSeekSetting) ? (USE_AUTO_SEEKWINDOW_LEN) : seekWindowMs;
- }
-
- if (pOverlapMs)
- {
- *pOverlapMs = overlapMs;
- }
-}
-
-
-// Overlaps samples in 'midBuffer' with the samples in 'pInput'
-void TDStretch::overlapMono(SAMPLETYPE *pOutput, const SAMPLETYPE *pInput) const
-{
- int i;
- SAMPLETYPE m1, m2;
-
- m1 = (SAMPLETYPE)0;
- m2 = (SAMPLETYPE)overlapLength;
-
- for (i = 0; i < overlapLength ; i ++)
- {
- pOutput[i] = (pInput[i] * m1 + pMidBuffer[i] * m2 ) / overlapLength;
- m1 += 1;
- m2 -= 1;
- }
-}
-
-
-
-void TDStretch::clearMidBuffer()
-{
- memset(pMidBuffer, 0, channels * sizeof(SAMPLETYPE) * overlapLength);
-}
-
-
-void TDStretch::clearInput()
-{
- inputBuffer.clear();
- clearMidBuffer();
-}
-
-
-// Clears the sample buffers
-void TDStretch::clear()
-{
- outputBuffer.clear();
- clearInput();
-}
-
-
-
-// Enables/disables the quick position seeking algorithm. Zero to disable, nonzero
-// to enable
-void TDStretch::enableQuickSeek(BOOL enable)
-{
- bQuickSeek = enable;
-}
-
-
-// Returns nonzero if the quick seeking algorithm is enabled.
-BOOL TDStretch::isQuickSeekEnabled() const
-{
- return bQuickSeek;
-}
-
-
-// Seeks for the optimal overlap-mixing position.
-int TDStretch::seekBestOverlapPosition(const SAMPLETYPE *refPos)
-{
- if (bQuickSeek)
- {
- return seekBestOverlapPositionQuick(refPos);
- }
- else
- {
- return seekBestOverlapPositionFull(refPos);
- }
-}
-
-
-// Overlaps samples in 'midBuffer' with the samples in 'pInputBuffer' at position
-// of 'ovlPos'.
-inline void TDStretch::overlap(SAMPLETYPE *pOutput, const SAMPLETYPE *pInput, uint ovlPos) const
-{
-#ifndef USE_MULTICH_ALWAYS
- if (channels == 1)
- {
- // mono sound.
- overlapMono(pOutput, pInput + ovlPos);
- }
- else if (channels == 2)
- {
- // stereo sound
- overlapStereo(pOutput, pInput + 2 * ovlPos);
- }
- else
-#endif // USE_MULTICH_ALWAYS
- {
- assert(channels > 0);
- overlapMulti(pOutput, pInput + channels * ovlPos);
- }
-}
-
-
-
-// Seeks for the optimal overlap-mixing position. The 'stereo' version of the
-// routine
-//
-// The best position is determined as the position where the two overlapped
-// sample sequences are 'most alike', in terms of the highest cross-correlation
-// value over the overlapping period
-int TDStretch::seekBestOverlapPositionFull(const SAMPLETYPE *refPos)
-{
- int bestOffs;
- double bestCorr, corr;
- double norm;
- int i;
-
- bestCorr = FLT_MIN;
- bestOffs = 0;
-
- // Scans for the best correlation value by testing each possible position
- // over the permitted range.
- bestCorr = calcCrossCorr(refPos, pMidBuffer, norm);
- for (i = 1; i < seekLength; i ++)
- {
- // Calculates correlation value for the mixing position corresponding
- // to 'i'. Now call "calcCrossCorrAccumulate" that is otherwise same as
- // "calcCrossCorr", but saves time by reusing & updating previously stored
- // "norm" value
- corr = calcCrossCorrAccumulate(refPos + channels * i, pMidBuffer, norm);
-
- // heuristic rule to slightly favour values close to mid of the range
- double tmp = (double)(2 * i - seekLength) / (double)seekLength;
- corr = ((corr + 0.1) * (1.0 - 0.25 * tmp * tmp));
-
- // Checks for the highest correlation value
- if (corr > bestCorr)
- {
- bestCorr = corr;
- bestOffs = i;
- }
- }
- // clear cross correlation routine state if necessary (is so e.g. in MMX routines).
- clearCrossCorrState();
-
- return bestOffs;
-}
-
-
-// Seeks for the optimal overlap-mixing position. The 'stereo' version of the
-// routine
-//
-// The best position is determined as the position where the two overlapped
-// sample sequences are 'most alike', in terms of the highest cross-correlation
-// value over the overlapping period
-int TDStretch::seekBestOverlapPositionQuick(const SAMPLETYPE *refPos)
-{
- int j;
- int bestOffs;
- double bestCorr, corr;
- int scanCount, corrOffset, tempOffset;
-
- bestCorr = FLT_MIN;
- bestOffs = _scanOffsets[0][0];
- corrOffset = 0;
- tempOffset = 0;
-
- // Scans for the best correlation value using four-pass hierarchical search.
- //
- // The look-up table 'scans' has hierarchical position adjusting steps.
- // In first pass the routine searhes for the highest correlation with
- // relatively coarse steps, then rescans the neighbourhood of the highest
- // correlation with better resolution and so on.
- for (scanCount = 0;scanCount < 4; scanCount ++)
- {
- j = 0;
- while (_scanOffsets[scanCount][j])
- {
- double norm;
- tempOffset = corrOffset + _scanOffsets[scanCount][j];
- if (tempOffset >= seekLength) break;
-
- // Calculates correlation value for the mixing position corresponding
- // to 'tempOffset'
- corr = (double)calcCrossCorr(refPos + channels * tempOffset, pMidBuffer, norm);
- // heuristic rule to slightly favour values close to mid of the range
- double tmp = (double)(2 * tempOffset - seekLength) / seekLength;
- corr = ((corr + 0.1) * (1.0 - 0.25 * tmp * tmp));
-
- // Checks for the highest correlation value
- if (corr > bestCorr)
- {
- bestCorr = corr;
- bestOffs = tempOffset;
- }
- j ++;
- }
- corrOffset = bestOffs;
- }
- // clear cross correlation routine state if necessary (is so e.g. in MMX routines).
- clearCrossCorrState();
-
- return bestOffs;
-}
-
-
-
-/// clear cross correlation routine state if necessary
-void TDStretch::clearCrossCorrState()
-{
- // default implementation is empty.
-}
-
-
-/// Calculates processing sequence length according to tempo setting
-void TDStretch::calcSeqParameters()
-{
- // Adjust tempo param according to tempo, so that variating processing sequence length is used
- // at varius tempo settings, between the given low...top limits
- #define AUTOSEQ_TEMPO_LOW 0.5 // auto setting low tempo range (-50%)
- #define AUTOSEQ_TEMPO_TOP 2.0 // auto setting top tempo range (+100%)
-
- // sequence-ms setting values at above low & top tempo
- #define AUTOSEQ_AT_MIN 125.0
- #define AUTOSEQ_AT_MAX 50.0
- #define AUTOSEQ_K ((AUTOSEQ_AT_MAX - AUTOSEQ_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW))
- #define AUTOSEQ_C (AUTOSEQ_AT_MIN - (AUTOSEQ_K) * (AUTOSEQ_TEMPO_LOW))
-
- // seek-window-ms setting values at above low & top tempo
- #define AUTOSEEK_AT_MIN 25.0
- #define AUTOSEEK_AT_MAX 15.0
- #define AUTOSEEK_K ((AUTOSEEK_AT_MAX - AUTOSEEK_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW))
- #define AUTOSEEK_C (AUTOSEEK_AT_MIN - (AUTOSEEK_K) * (AUTOSEQ_TEMPO_LOW))
-
- #define CHECK_LIMITS(x, mi, ma) (((x) < (mi)) ? (mi) : (((x) > (ma)) ? (ma) : (x)))
-
- double seq, seek;
-
- if (bAutoSeqSetting)
- {
- seq = AUTOSEQ_C + AUTOSEQ_K * tempo;
- seq = CHECK_LIMITS(seq, AUTOSEQ_AT_MAX, AUTOSEQ_AT_MIN);
- sequenceMs = (int)(seq + 0.5);
- }
-
- if (bAutoSeekSetting)
- {
- seek = AUTOSEEK_C + AUTOSEEK_K * tempo;
- seek = CHECK_LIMITS(seek, AUTOSEEK_AT_MAX, AUTOSEEK_AT_MIN);
- seekWindowMs = (int)(seek + 0.5);
- }
-
- // Update seek window lengths
- seekWindowLength = (sampleRate * sequenceMs) / 1000;
- if (seekWindowLength < 2 * overlapLength)
- {
- seekWindowLength = 2 * overlapLength;
- }
- seekLength = (sampleRate * seekWindowMs) / 1000;
-}
-
-
-
-// Sets new target tempo. Normal tempo = 'SCALE', smaller values represent slower
-// tempo, larger faster tempo.
-void TDStretch::setTempo(float newTempo)
-{
- int intskip;
-
- tempo = newTempo;
-
- // Calculate new sequence duration
- calcSeqParameters();
-
- // Calculate ideal skip length (according to tempo value)
- nominalSkip = tempo * (seekWindowLength - overlapLength);
- intskip = (int)(nominalSkip + 0.5f);
-
- // Calculate how many samples are needed in the 'inputBuffer' to
- // process another batch of samples
- //sampleReq = max(intskip + overlapLength, seekWindowLength) + seekLength / 2;
- sampleReq = max(intskip + overlapLength, seekWindowLength) + seekLength;
-}
-
-
-
-// Sets the number of channels, 1 = mono, 2 = stereo
-void TDStretch::setChannels(int numChannels)
-{
- assert(numChannels > 0);
- if (channels == numChannels) return;
-// assert(numChannels == 1 || numChannels == 2);
-
- channels = numChannels;
- inputBuffer.setChannels(channels);
- outputBuffer.setChannels(channels);
-
- // re-init overlap/buffer
- overlapLength=0;
- setParameters(sampleRate);
-}
-
-
-// nominal tempo, no need for processing, just pass the samples through
-// to outputBuffer
-/*
-void TDStretch::processNominalTempo()
-{
- assert(tempo == 1.0f);
-
- if (bMidBufferDirty)
- {
- // If there are samples in pMidBuffer waiting for overlapping,
- // do a single sliding overlapping with them in order to prevent a
- // clicking distortion in the output sound
- if (inputBuffer.numSamples() < overlapLength)
- {
- // wait until we've got overlapLength input samples
- return;
- }
- // Mix the samples in the beginning of 'inputBuffer' with the
- // samples in 'midBuffer' using sliding overlapping
- overlap(outputBuffer.ptrEnd(overlapLength), inputBuffer.ptrBegin(), 0);
- outputBuffer.putSamples(overlapLength);
- inputBuffer.receiveSamples(overlapLength);
- clearMidBuffer();
- // now we've caught the nominal sample flow and may switch to
- // bypass mode
- }
-
- // Simply bypass samples from input to output
- outputBuffer.moveSamples(inputBuffer);
-}
-*/
-
-
-// Processes as many processing frames of the samples 'inputBuffer', store
-// the result into 'outputBuffer'
-void TDStretch::processSamples()
-{
- int ovlSkip, offset;
- int temp;
-
- /* Removed this small optimization - can introduce a click to sound when tempo setting
- crosses the nominal value
- if (tempo == 1.0f)
- {
- // tempo not changed from the original, so bypass the processing
- processNominalTempo();
- return;
- }
- */
-
- // Process samples as long as there are enough samples in 'inputBuffer'
- // to form a processing frame.
- while ((int)inputBuffer.numSamples() >= sampleReq)
- {
- // If tempo differs from the normal ('SCALE'), scan for the best overlapping
- // position
- offset = seekBestOverlapPosition(inputBuffer.ptrBegin());
-
- // Mix the samples in the 'inputBuffer' at position of 'offset' with the
- // samples in 'midBuffer' using sliding overlapping
- // ... first partially overlap with the end of the previous sequence
- // (that's in 'midBuffer')
- overlap(outputBuffer.ptrEnd((uint)overlapLength), inputBuffer.ptrBegin(), (uint)offset);
- outputBuffer.putSamples((uint)overlapLength);
-
- // ... then copy sequence samples from 'inputBuffer' to output:
-
- // length of sequence
- temp = (seekWindowLength - 2 * overlapLength);
-
- // crosscheck that we don't have buffer overflow...
- if ((int)inputBuffer.numSamples() < (offset + temp + overlapLength * 2))
- {
- continue; // just in case, shouldn't really happen
- }
-
- outputBuffer.putSamples(inputBuffer.ptrBegin() + channels * (offset + overlapLength), (uint)temp);
-
- // Copies the end of the current sequence from 'inputBuffer' to
- // 'midBuffer' for being mixed with the beginning of the next
- // processing sequence and so on
- assert((offset + temp + overlapLength * 2) <= (int)inputBuffer.numSamples());
- memcpy(pMidBuffer, inputBuffer.ptrBegin() + channels * (offset + temp + overlapLength),
- channels * sizeof(SAMPLETYPE) * overlapLength);
-
- // Remove the processed samples from the input buffer. Update
- // the difference between integer & nominal skip step to 'skipFract'
- // in order to prevent the error from accumulating over time.
- skipFract += nominalSkip; // real skip size
- ovlSkip = (int)skipFract; // rounded to integer skip
- skipFract -= ovlSkip; // maintain the fraction part, i.e. real vs. integer skip
- inputBuffer.receiveSamples((uint)ovlSkip);
- }
-}
-
-
-// Adds 'numsamples' pcs of samples from the 'samples' memory position into
-// the input of the object.
-void TDStretch::putSamples(const SAMPLETYPE *samples, uint nSamples)
-{
- // Add the samples into the input buffer
- inputBuffer.putSamples(samples, nSamples);
- // Process the samples in input buffer
- processSamples();
-}
-
-
-
-/// Set new overlap length parameter & reallocate RefMidBuffer if necessary.
-void TDStretch::acceptNewOverlapLength(int newOverlapLength)
-{
- int prevOvl;
-
- assert(newOverlapLength >= 0);
- prevOvl = overlapLength;
- overlapLength = newOverlapLength;
-
- if (overlapLength > prevOvl)
- {
- delete[] pMidBufferUnaligned;
-
- pMidBufferUnaligned = new SAMPLETYPE[overlapLength * channels + 16 / sizeof(SAMPLETYPE)];
- // ensure that 'pMidBuffer' is aligned to 16 byte boundary for efficiency
- pMidBuffer = (SAMPLETYPE *)SOUNDTOUCH_ALIGN_POINTER_16(pMidBufferUnaligned);
-
- clearMidBuffer();
- }
-}
-
-
-// Operator 'new' is overloaded so that it automatically creates a suitable instance
-// depending on if we've a MMX/SSE/etc-capable CPU available or not.
-void * TDStretch::operator new(size_t s)
-{
- // Notice! don't use "new TDStretch" directly, use "newInstance" to create a new instance instead!
- ST_THROW_RT_ERROR("Error in TDStretch::new: Don't use 'new TDStretch' directly, use 'newInstance' member instead!");
- return newInstance();
-}
-
-
-TDStretch * TDStretch::newInstance()
-{
- uint uExtensions;
-
- uExtensions = detectCPUextensions();
-
- // Check if MMX/SSE instruction set extensions supported by CPU
-
-#ifdef SOUNDTOUCH_ALLOW_MMX
- // MMX routines available only with integer sample types
- if (uExtensions & SUPPORT_MMX)
- {
- return ::new TDStretchMMX;
- }
- else
-#endif // SOUNDTOUCH_ALLOW_MMX
-
-
-#ifdef SOUNDTOUCH_ALLOW_SSE
- if (uExtensions & SUPPORT_SSE)
- {
- // SSE support
- return ::new TDStretchSSE;
- }
- else
-#endif // SOUNDTOUCH_ALLOW_SSE
-
- {
- // ISA optimizations not supported, use plain C version
- return ::new TDStretch;
- }
-}
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// Integer arithmetics specific algorithm implementations.
-//
-//////////////////////////////////////////////////////////////////////////////
-
-#ifdef SOUNDTOUCH_INTEGER_SAMPLES
-
-// Overlaps samples in 'midBuffer' with the samples in 'input'. The 'Stereo'
-// version of the routine.
-void TDStretch::overlapStereo(short *poutput, const short *input) const
-{
- int i;
- short temp;
- int cnt2;
-
- for (i = 0; i < overlapLength ; i ++)
- {
- temp = (short)(overlapLength - i);
- cnt2 = 2 * i;
- poutput[cnt2] = (input[cnt2] * i + pMidBuffer[cnt2] * temp ) / overlapLength;
- poutput[cnt2 + 1] = (input[cnt2 + 1] * i + pMidBuffer[cnt2 + 1] * temp ) / overlapLength;
- }
-}
-
-
-// Overlaps samples in 'midBuffer' with the samples in 'input'. The 'Multi'
-// version of the routine.
-void TDStretch::overlapMulti(SAMPLETYPE *poutput, const SAMPLETYPE *input) const
-{
- SAMPLETYPE m1=(SAMPLETYPE)0;
- SAMPLETYPE m2;
- int i=0;
-
- for (m2 = (SAMPLETYPE)overlapLength; m2; m2 --)
- {
- for (int c = 0; c < channels; c ++)
- {
- poutput[i] = (input[i] * m1 + pMidBuffer[i] * m2) / overlapLength;
- i++;
- }
-
- m1++;
- }
-}
-
-// Calculates the x having the closest 2^x value for the given value
-static int _getClosest2Power(double value)
-{
- return (int)(log(value) / log(2.0) + 0.5);
-}
-
-
-/// Calculates overlap period length in samples.
-/// Integer version rounds overlap length to closest power of 2
-/// for a divide scaling operation.
-void TDStretch::calculateOverlapLength(int aoverlapMs)
-{
- int newOvl;
-
- assert(aoverlapMs >= 0);
-
- // calculate overlap length so that it's power of 2 - thus it's easy to do
- // integer division by right-shifting. Term "-1" at end is to account for
- // the extra most significatnt bit left unused in result by signed multiplication
- overlapDividerBits = _getClosest2Power((sampleRate * aoverlapMs) / 1000.0) - 1;
- if (overlapDividerBits > 9) overlapDividerBits = 9;
- if (overlapDividerBits < 3) overlapDividerBits = 3;
- newOvl = (int)pow(2.0, (int)overlapDividerBits + 1); // +1 => account for -1 above
-
- acceptNewOverlapLength(newOvl);
-
- // calculate sloping divider so that crosscorrelation operation won't
- // overflow 32-bit register. Max. sum of the crosscorrelation sum without
- // divider would be 2^30*(N^3-N)/3, where N = overlap length
- slopingDivider = (newOvl * newOvl - 1) / 3;
-}
-
-
-double TDStretch::calcCrossCorr(const short *mixingPos, const short *compare, double &norm) const
-{
- long corr;
- long lnorm;
- int i;
-
- corr = lnorm = 0;
- // Same routine for stereo and mono. For stereo, unroll loop for better
- // efficiency and gives slightly better resolution against rounding.
- // For mono it same routine, just unrolls loop by factor of 4
- for (i = 0; i < channels * overlapLength; i += 4)
- {
- corr += (mixingPos[i] * compare[i] +
- mixingPos[i + 1] * compare[i + 1]) >> overlapDividerBits; // notice: do intermediate division here to avoid integer overflow
- corr += (mixingPos[i + 2] * compare[i + 2] +
- mixingPos[i + 3] * compare[i + 3]) >> overlapDividerBits;
- lnorm += (mixingPos[i] * mixingPos[i] +
- mixingPos[i + 1] * mixingPos[i + 1]) >> overlapDividerBits; // notice: do intermediate division here to avoid integer overflow
- lnorm += (mixingPos[i + 2] * mixingPos[i + 2] +
- mixingPos[i + 3] * mixingPos[i + 3]) >> overlapDividerBits;
- }
-
- // Normalize result by dividing by sqrt(norm) - this step is easiest
- // done using floating point operation
- norm = (double)lnorm;
- return (double)corr / sqrt((norm < 1e-9) ? 1.0 : norm);
-}
-
-
-/// Update cross-correlation by accumulating "norm" coefficient by previously calculated value
-double TDStretch::calcCrossCorrAccumulate(const short *mixingPos, const short *compare, double &norm) const
-{
- long corr;
- long lnorm;
- int i;
-
- // cancel first normalizer tap from previous round
- lnorm = 0;
- for (i = 1; i <= channels; i ++)
- {
- lnorm -= (mixingPos[-i] * mixingPos[-i]) >> overlapDividerBits;
- }
-
- corr = 0;
- // Same routine for stereo and mono. For stereo, unroll loop for better
- // efficiency and gives slightly better resolution against rounding.
- // For mono it same routine, just unrolls loop by factor of 4
- for (i = 0; i < channels * overlapLength; i += 4)
- {
- corr += (mixingPos[i] * compare[i] +
- mixingPos[i + 1] * compare[i + 1]) >> overlapDividerBits; // notice: do intermediate division here to avoid integer overflow
- corr += (mixingPos[i + 2] * compare[i + 2] +
- mixingPos[i + 3] * compare[i + 3]) >> overlapDividerBits;
- }
-
- // update normalizer with last samples of this round
- for (int j = 0; j < channels; j ++)
- {
- i --;
- lnorm += (mixingPos[i] * mixingPos[i]) >> overlapDividerBits;
- }
- norm += (double)lnorm;
-
- // Normalize result by dividing by sqrt(norm) - this step is easiest
- // done using floating point operation
- return (double)corr / sqrt((norm < 1e-9) ? 1.0 : norm);
-}
-
-#endif // SOUNDTOUCH_INTEGER_SAMPLES
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// Floating point arithmetics specific algorithm implementations.
-//
-
-#ifdef SOUNDTOUCH_FLOAT_SAMPLES
-
-// Overlaps samples in 'midBuffer' with the samples in 'pInput'
-void TDStretch::overlapStereo(float *pOutput, const float *pInput) const
-{
- int i;
- float fScale;
- float f1;
- float f2;
-
- fScale = 1.0f / (float)overlapLength;
-
- f1 = 0;
- f2 = 1.0f;
-
- for (i = 0; i < 2 * (int)overlapLength ; i += 2)
- {
- pOutput[i + 0] = pInput[i + 0] * f1 + pMidBuffer[i + 0] * f2;
- pOutput[i + 1] = pInput[i + 1] * f1 + pMidBuffer[i + 1] * f2;
-
- f1 += fScale;
- f2 -= fScale;
- }
-}
-
-
-// Overlaps samples in 'midBuffer' with the samples in 'input'.
-void TDStretch::overlapMulti(float *pOutput, const float *pInput) const
-{
- int i;
- float fScale;
- float f1;
- float f2;
-
- fScale = 1.0f / (float)overlapLength;
-
- f1 = 0;
- f2 = 1.0f;
-
- i=0;
- for (int i2 = 0; i2 < overlapLength; i2 ++)
- {
- // note: Could optimize this slightly by taking into account that always channels > 2
- for (int c = 0; c < channels; c ++)
- {
- pOutput[i] = pInput[i] * f1 + pMidBuffer[i] * f2;
- i++;
- }
- f1 += fScale;
- f2 -= fScale;
- }
-}
-
-
-/// Calculates overlapInMsec period length in samples.
-void TDStretch::calculateOverlapLength(int overlapInMsec)
-{
- int newOvl;
-
- assert(overlapInMsec >= 0);
- newOvl = (sampleRate * overlapInMsec) / 1000;
- if (newOvl < 16) newOvl = 16;
-
- // must be divisible by 8
- newOvl -= newOvl % 8;
-
- acceptNewOverlapLength(newOvl);
-}
-
-
-/// Calculate cross-correlation
-double TDStretch::calcCrossCorr(const float *mixingPos, const float *compare, double &norm) const
-{
- double corr;
- int i;
-
- corr = norm = 0;
- // Same routine for stereo and mono. For Stereo, unroll by factor of 2.
- // For mono it's same routine yet unrollsd by factor of 4.
- for (i = 0; i < channels * overlapLength; i += 4)
- {
- corr += mixingPos[i] * compare[i] +
- mixingPos[i + 1] * compare[i + 1];
-
- norm += mixingPos[i] * mixingPos[i] +
- mixingPos[i + 1] * mixingPos[i + 1];
-
- // unroll the loop for better CPU efficiency:
- corr += mixingPos[i + 2] * compare[i + 2] +
- mixingPos[i + 3] * compare[i + 3];
-
- norm += mixingPos[i + 2] * mixingPos[i + 2] +
- mixingPos[i + 3] * mixingPos[i + 3];
- }
-
- return corr / sqrt((norm < 1e-9 ? 1.0 : norm));
-}
-
-
-/// Update cross-correlation by accumulating "norm" coefficient by previously calculated value
-double TDStretch::calcCrossCorrAccumulate(const float *mixingPos, const float *compare, double &norm) const
-{
- double corr;
- int i;
-
- corr = 0;
-
- // cancel first normalizer tap from previous round
- for (i = 1; i <= channels; i ++)
- {
- norm -= mixingPos[-i] * mixingPos[-i];
- }
-
- // Same routine for stereo and mono. For Stereo, unroll by factor of 2.
- // For mono it's same routine yet unrollsd by factor of 4.
- for (i = 0; i < channels * overlapLength; i += 4)
- {
- corr += mixingPos[i] * compare[i] +
- mixingPos[i + 1] * compare[i + 1] +
- mixingPos[i + 2] * compare[i + 2] +
- mixingPos[i + 3] * compare[i + 3];
- }
-
- // update normalizer with last samples of this round
- for (int j = 0; j < channels; j ++)
- {
- i --;
- norm += mixingPos[i] * mixingPos[i];
- }
-
- return corr / sqrt((norm < 1e-9 ? 1.0 : norm));
-}
-
-
-#endif // SOUNDTOUCH_FLOAT_SAMPLES
diff --git a/src/thirdparty/SoundTouch/source/TDStretch.h b/src/thirdparty/SoundTouch/source/TDStretch.h
deleted file mode 100644
index e2659d93a..000000000
--- a/src/thirdparty/SoundTouch/source/TDStretch.h
+++ /dev/null
@@ -1,272 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Sampled sound tempo changer/time stretch algorithm. Changes the sound tempo
-/// while maintaining the original pitch by using a time domain WSOLA-like method
-/// with several performance-increasing tweaks.
-///
-/// Note : MMX/SSE optimized functions reside in separate, platform-specific files
-/// 'mmx_optimized.cpp' and 'sse_optimized.cpp'
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-07 18:25:40 +0000 (Tue, 07 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: TDStretch.h 184 2014-01-07 18:25:40Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef TDStretch_H
-#define TDStretch_H
-
-#include <stddef.h>
-#include "STTypes.h"
-#include "RateTransposer.h"
-#include "FIFOSamplePipe.h"
-
-namespace soundtouch
-{
-
-/// Default values for sound processing parameters:
-/// Notice that the default parameters are tuned for contemporary popular music
-/// processing. For speech processing applications these parameters suit better:
-/// #define DEFAULT_SEQUENCE_MS 40
-/// #define DEFAULT_SEEKWINDOW_MS 15
-/// #define DEFAULT_OVERLAP_MS 8
-///
-
-/// Default length of a single processing sequence, in milliseconds. This determines to how
-/// long sequences the original sound is chopped in the time-stretch algorithm.
-///
-/// The larger this value is, the lesser sequences are used in processing. In principle
-/// a bigger value sounds better when slowing down tempo, but worse when increasing tempo
-/// and vice versa.
-///
-/// Increasing this value reduces computational burden & vice versa.
-//#define DEFAULT_SEQUENCE_MS 40
-#define DEFAULT_SEQUENCE_MS USE_AUTO_SEQUENCE_LEN
-
-/// Giving this value for the sequence length sets automatic parameter value
-/// according to tempo setting (recommended)
-#define USE_AUTO_SEQUENCE_LEN 0
-
-/// Seeking window default length in milliseconds for algorithm that finds the best possible
-/// overlapping location. This determines from how wide window the algorithm may look for an
-/// optimal joining location when mixing the sound sequences back together.
-///
-/// The bigger this window setting is, the higher the possibility to find a better mixing
-/// position will become, but at the same time large values may cause a "drifting" artifact
-/// because consequent sequences will be taken at more uneven intervals.
-///
-/// If there's a disturbing artifact that sounds as if a constant frequency was drifting
-/// around, try reducing this setting.
-///
-/// Increasing this value increases computational burden & vice versa.
-//#define DEFAULT_SEEKWINDOW_MS 15
-#define DEFAULT_SEEKWINDOW_MS USE_AUTO_SEEKWINDOW_LEN
-
-/// Giving this value for the seek window length sets automatic parameter value
-/// according to tempo setting (recommended)
-#define USE_AUTO_SEEKWINDOW_LEN 0
-
-/// Overlap length in milliseconds. When the chopped sound sequences are mixed back together,
-/// to form a continuous sound stream, this parameter defines over how long period the two
-/// consecutive sequences are let to overlap each other.
-///
-/// This shouldn't be that critical parameter. If you reduce the DEFAULT_SEQUENCE_MS setting
-/// by a large amount, you might wish to try a smaller value on this.
-///
-/// Increasing this value increases computational burden & vice versa.
-#define DEFAULT_OVERLAP_MS 8
-
-
-/// Class that does the time-stretch (tempo change) effect for the processed
-/// sound.
-class TDStretch : public FIFOProcessor
-{
-protected:
- int channels;
- int sampleReq;
- float tempo;
-
- SAMPLETYPE *pMidBuffer;
- SAMPLETYPE *pMidBufferUnaligned;
- int overlapLength;
- int seekLength;
- int seekWindowLength;
- int overlapDividerBits;
- int slopingDivider;
- float nominalSkip;
- float skipFract;
- FIFOSampleBuffer outputBuffer;
- FIFOSampleBuffer inputBuffer;
- BOOL bQuickSeek;
-
- int sampleRate;
- int sequenceMs;
- int seekWindowMs;
- int overlapMs;
- BOOL bAutoSeqSetting;
- BOOL bAutoSeekSetting;
-
- void acceptNewOverlapLength(int newOverlapLength);
-
- virtual void clearCrossCorrState();
- void calculateOverlapLength(int overlapMs);
-
- virtual double calcCrossCorr(const SAMPLETYPE *mixingPos, const SAMPLETYPE *compare, double &norm) const;
- virtual double calcCrossCorrAccumulate(const SAMPLETYPE *mixingPos, const SAMPLETYPE *compare, double &norm) const;
-
- virtual int seekBestOverlapPositionFull(const SAMPLETYPE *refPos);
- virtual int seekBestOverlapPositionQuick(const SAMPLETYPE *refPos);
- int seekBestOverlapPosition(const SAMPLETYPE *refPos);
-
- virtual void overlapStereo(SAMPLETYPE *output, const SAMPLETYPE *input) const;
- virtual void overlapMono(SAMPLETYPE *output, const SAMPLETYPE *input) const;
- virtual void overlapMulti(SAMPLETYPE *output, const SAMPLETYPE *input) const;
-
- void clearMidBuffer();
- void overlap(SAMPLETYPE *output, const SAMPLETYPE *input, uint ovlPos) const;
-
- void calcSeqParameters();
-
- /// Changes the tempo of the given sound samples.
- /// Returns amount of samples returned in the "output" buffer.
- /// The maximum amount of samples that can be returned at a time is set by
- /// the 'set_returnBuffer_size' function.
- void processSamples();
-
-public:
- TDStretch();
- virtual ~TDStretch();
-
- /// Operator 'new' is overloaded so that it automatically creates a suitable instance
- /// depending on if we've a MMX/SSE/etc-capable CPU available or not.
- static void *operator new(size_t s);
-
- /// Use this function instead of "new" operator to create a new instance of this class.
- /// This function automatically chooses a correct feature set depending on if the CPU
- /// supports MMX/SSE/etc extensions.
- static TDStretch *newInstance();
-
- /// Returns the output buffer object
- FIFOSamplePipe *getOutput() { return &outputBuffer; };
-
- /// Returns the input buffer object
- FIFOSamplePipe *getInput() { return &inputBuffer; };
-
- /// Sets new target tempo. Normal tempo = 'SCALE', smaller values represent slower
- /// tempo, larger faster tempo.
- void setTempo(float newTempo);
-
- /// Returns nonzero if there aren't any samples available for outputting.
- virtual void clear();
-
- /// Clears the input buffer
- void clearInput();
-
- /// Sets the number of channels, 1 = mono, 2 = stereo
- void setChannels(int numChannels);
-
- /// Enables/disables the quick position seeking algorithm. Zero to disable,
- /// nonzero to enable
- void enableQuickSeek(BOOL enable);
-
- /// Returns nonzero if the quick seeking algorithm is enabled.
- BOOL isQuickSeekEnabled() const;
-
- /// Sets routine control parameters. These control are certain time constants
- /// defining how the sound is stretched to the desired duration.
- //
- /// 'sampleRate' = sample rate of the sound
- /// 'sequenceMS' = one processing sequence length in milliseconds
- /// 'seekwindowMS' = seeking window length for scanning the best overlapping
- /// position
- /// 'overlapMS' = overlapping length
- void setParameters(int sampleRate, ///< Samplerate of sound being processed (Hz)
- int sequenceMS = -1, ///< Single processing sequence length (ms)
- int seekwindowMS = -1, ///< Offset seeking window length (ms)
- int overlapMS = -1 ///< Sequence overlapping length (ms)
- );
-
- /// Get routine control parameters, see setParameters() function.
- /// Any of the parameters to this function can be NULL, in such case corresponding parameter
- /// value isn't returned.
- void getParameters(int *pSampleRate, int *pSequenceMs, int *pSeekWindowMs, int *pOverlapMs) const;
-
- /// Adds 'numsamples' pcs of samples from the 'samples' memory position into
- /// the input of the object.
- virtual void putSamples(
- const SAMPLETYPE *samples, ///< Input sample data
- uint numSamples ///< Number of samples in 'samples' so that one sample
- ///< contains both channels if stereo
- );
-
- /// return nominal input sample requirement for triggering a processing batch
- int getInputSampleReq() const
- {
- return (int)(nominalSkip + 0.5);
- }
-
- /// return nominal output sample amount when running a processing batch
- int getOutputBatchSize() const
- {
- return seekWindowLength - overlapLength;
- }
-};
-
-
-
-// Implementation-specific class declarations:
-
-#ifdef SOUNDTOUCH_ALLOW_MMX
- /// Class that implements MMX optimized routines for 16bit integer samples type.
- class TDStretchMMX : public TDStretch
- {
- protected:
- double calcCrossCorr(const short *mixingPos, const short *compare, double &norm) const;
- double calcCrossCorrAccumulate(const short *mixingPos, const short *compare, double &norm) const;
- virtual void overlapStereo(short *output, const short *input) const;
- virtual void clearCrossCorrState();
- };
-#endif /// SOUNDTOUCH_ALLOW_MMX
-
-
-#ifdef SOUNDTOUCH_ALLOW_SSE
- /// Class that implements SSE optimized routines for floating point samples type.
- class TDStretchSSE : public TDStretch
- {
- protected:
- double calcCrossCorr(const float *mixingPos, const float *compare, double &norm) const;
- double calcCrossCorrAccumulate(const float *mixingPos, const float *compare, double &norm) const;
- };
-
-#endif /// SOUNDTOUCH_ALLOW_SSE
-
-}
-#endif /// TDStretch_H
diff --git a/src/thirdparty/SoundTouch/source/cpu_detect.h b/src/thirdparty/SoundTouch/source/cpu_detect.h
deleted file mode 100644
index dc285e90f..000000000
--- a/src/thirdparty/SoundTouch/source/cpu_detect.h
+++ /dev/null
@@ -1,62 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// A header file for detecting the Intel MMX instructions set extension.
-///
-/// Please see 'mmx_win.cpp', 'mmx_cpp.cpp' and 'mmx_non_x86.cpp' for the
-/// routine implementations for x86 Windows, x86 gnu version and non-x86
-/// platforms, respectively.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2008-02-10 16:26:55 +0000 (Sun, 10 Feb 2008) $
-// File revision : $Revision: 4 $
-//
-// $Id: cpu_detect.h 11 2008-02-10 16:26:55Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef _CPU_DETECT_H_
-#define _CPU_DETECT_H_
-
-#include "STTypes.h"
-
-#define SUPPORT_MMX 0x0001
-#define SUPPORT_3DNOW 0x0002
-#define SUPPORT_ALTIVEC 0x0004
-#define SUPPORT_SSE 0x0008
-#define SUPPORT_SSE2 0x0010
-
-/// Checks which instruction set extensions are supported by the CPU.
-///
-/// \return A bitmask of supported extensions, see SUPPORT_... defines.
-uint detectCPUextensions(void);
-
-/// Disables given set of instruction extensions. See SUPPORT_... defines.
-void disableExtensions(uint wDisableMask);
-
-#endif // _CPU_DETECT_H_
diff --git a/src/thirdparty/SoundTouch/source/cpu_detect_x86.cpp b/src/thirdparty/SoundTouch/source/cpu_detect_x86.cpp
deleted file mode 100644
index 2db790f53..000000000
--- a/src/thirdparty/SoundTouch/source/cpu_detect_x86.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// Generic version of the x86 CPU extension detection routine.
-///
-/// This file is for GNU & other non-Windows compilers, see 'cpu_detect_x86_win.cpp'
-/// for the Microsoft compiler version.
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-07 18:24:28 +0000 (Tue, 07 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: cpu_detect_x86.cpp 183 2014-01-07 18:24:28Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include "cpu_detect.h"
-#include "STTypes.h"
-
-
-#if defined(SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS)
-
- #if defined(__GNUC__) && defined(__i386__)
- // gcc
- #include "cpuid.h"
- #elif defined(_M_IX86)
- // windows non-gcc
- #include <intrin.h>
- #endif
-
- #define bit_MMX (1 << 23)
- #define bit_SSE (1 << 25)
- #define bit_SSE2 (1 << 26)
-#endif
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// processor instructions extension detection routines
-//
-//////////////////////////////////////////////////////////////////////////////
-
-// Flag variable indicating whick ISA extensions are disabled (for debugging)
-static uint _dwDisabledISA = 0x00; // 0xffffffff; //<- use this to disable all extensions
-
-// Disables given set of instruction extensions. See SUPPORT_... defines.
-void disableExtensions(uint dwDisableMask)
-{
- _dwDisabledISA = dwDisableMask;
-}
-
-
-
-/// Checks which instruction set extensions are supported by the CPU.
-uint detectCPUextensions(void)
-{
-/// If building for a 64bit system (no Itanium) and the user wants optimizations.
-/// Return the OR of SUPPORT_{MMX,SSE,SSE2}. 11001 or 0x19.
-/// Keep the _dwDisabledISA test (2 more operations, could be eliminated).
-#if ((defined(__GNUC__) && defined(__x86_64__)) \
- || defined(_M_X64)) \
- && defined(SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS)
- return 0x19 & ~_dwDisabledISA;
-
-/// If building for a 32bit system and the user wants optimizations.
-/// Keep the _dwDisabledISA test (2 more operations, could be eliminated).
-#elif ((defined(__GNUC__) && defined(__i386__)) \
- || defined(_M_IX86)) \
- && defined(SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS)
-
- if (_dwDisabledISA == 0xffffffff) return 0;
-
- uint res = 0;
-
-#if defined(__GNUC__)
- // GCC version of cpuid. Requires GCC 4.3.0 or later for __cpuid intrinsic support.
- uint eax, ebx, ecx, edx; // unsigned int is the standard type. uint is defined by the compiler and not guaranteed to be portable.
-
- // Check if no cpuid support.
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) return 0; // always disable extensions.
-
- if (edx & bit_MMX) res = res | SUPPORT_MMX;
- if (edx & bit_SSE) res = res | SUPPORT_SSE;
- if (edx & bit_SSE2) res = res | SUPPORT_SSE2;
-
-#else
- // Window / VS version of cpuid. Notice that Visual Studio 2005 or later required
- // for __cpuid intrinsic support.
- int reg[4] = {-1};
-
- // Check if no cpuid support.
- __cpuid(reg,0);
- if ((unsigned int)reg[0] == 0) return 0; // always disable extensions.
-
- __cpuid(reg,1);
- if ((unsigned int)reg[3] & bit_MMX) res = res | SUPPORT_MMX;
- if ((unsigned int)reg[3] & bit_SSE) res = res | SUPPORT_SSE;
- if ((unsigned int)reg[3] & bit_SSE2) res = res | SUPPORT_SSE2;
-
-#endif
-
- return res & ~_dwDisabledISA;
-
-#else
-
-/// One of these is true:
-/// 1) We don't want optimizations.
-/// 2) Using an unsupported compiler.
-/// 3) Running on a non-x86 platform.
- return 0;
-
-#endif
-}
diff --git a/src/thirdparty/SoundTouch/source/mmx_optimized.cpp b/src/thirdparty/SoundTouch/source/mmx_optimized.cpp
deleted file mode 100644
index ab8dda821..000000000
--- a/src/thirdparty/SoundTouch/source/mmx_optimized.cpp
+++ /dev/null
@@ -1,384 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// MMX optimized routines. All MMX optimized functions have been gathered into
-/// this single source code file, regardless to their class or original source
-/// code file, in order to ease porting the library to other compiler and
-/// processor platforms.
-///
-/// The MMX-optimizations are programmed using MMX compiler intrinsics that
-/// are supported both by Microsoft Visual C++ and GCC compilers, so this file
-/// should compile with both toolsets.
-///
-/// NOTICE: If using Visual Studio 6.0, you'll need to install the "Visual C++
-/// 6.0 processor pack" update to support compiler intrinsic syntax. The update
-/// is available for download at Microsoft Developers Network, see here:
-/// http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-07 18:25:40 +0000 (Tue, 07 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: mmx_optimized.cpp 184 2014-01-07 18:25:40Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include "STTypes.h"
-
-#ifdef SOUNDTOUCH_ALLOW_MMX
-// MMX routines available only with integer sample type
-
-using namespace soundtouch;
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// implementation of MMX optimized functions of class 'TDStretchMMX'
-//
-//////////////////////////////////////////////////////////////////////////////
-
-#include "TDStretch.h"
-#include <mmintrin.h>
-#include <limits.h>
-#include <math.h>
-
-
-// Calculates cross correlation of two buffers
-double TDStretchMMX::calcCrossCorr(const short *pV1, const short *pV2, double &dnorm) const
-{
- const __m64 *pVec1, *pVec2;
- __m64 shifter;
- __m64 accu, normaccu;
- long corr, norm;
- int i;
-
- pVec1 = (__m64*)pV1;
- pVec2 = (__m64*)pV2;
-
- shifter = _m_from_int(overlapDividerBits);
- normaccu = accu = _mm_setzero_si64();
-
- // Process 4 parallel sets of 2 * stereo samples or 4 * mono samples
- // during each round for improved CPU-level parallellization.
- for (i = 0; i < channels * overlapLength / 16; i ++)
- {
- __m64 temp, temp2;
-
- // dictionary of instructions:
- // _m_pmaddwd : 4*16bit multiply-add, resulting two 32bits = [a0*b0+a1*b1 ; a2*b2+a3*b3]
- // _mm_add_pi32 : 2*32bit add
- // _m_psrad : 32bit right-shift
-
- temp = _mm_add_pi32(_mm_sra_pi32(_mm_madd_pi16(pVec1[0], pVec2[0]), shifter),
- _mm_sra_pi32(_mm_madd_pi16(pVec1[1], pVec2[1]), shifter));
- temp2 = _mm_add_pi32(_mm_sra_pi32(_mm_madd_pi16(pVec1[0], pVec1[0]), shifter),
- _mm_sra_pi32(_mm_madd_pi16(pVec1[1], pVec1[1]), shifter));
- accu = _mm_add_pi32(accu, temp);
- normaccu = _mm_add_pi32(normaccu, temp2);
-
- temp = _mm_add_pi32(_mm_sra_pi32(_mm_madd_pi16(pVec1[2], pVec2[2]), shifter),
- _mm_sra_pi32(_mm_madd_pi16(pVec1[3], pVec2[3]), shifter));
- temp2 = _mm_add_pi32(_mm_sra_pi32(_mm_madd_pi16(pVec1[2], pVec1[2]), shifter),
- _mm_sra_pi32(_mm_madd_pi16(pVec1[3], pVec1[3]), shifter));
- accu = _mm_add_pi32(accu, temp);
- normaccu = _mm_add_pi32(normaccu, temp2);
-
- pVec1 += 4;
- pVec2 += 4;
- }
-
- // copy hi-dword of mm0 to lo-dword of mm1, then sum mmo+mm1
- // and finally store the result into the variable "corr"
-
- accu = _mm_add_pi32(accu, _mm_srli_si64(accu, 32));
- corr = _m_to_int(accu);
-
- normaccu = _mm_add_pi32(normaccu, _mm_srli_si64(normaccu, 32));
- norm = _m_to_int(normaccu);
-
- // Clear MMS state
- _m_empty();
-
- // Normalize result by dividing by sqrt(norm) - this step is easiest
- // done using floating point operation
- dnorm = (double)norm;
-
- return (double)corr / sqrt(dnorm < 1e-9 ? 1.0 : dnorm);
- // Note: Warning about the missing EMMS instruction is harmless
- // as it'll be called elsewhere.
-}
-
-
-/// Update cross-correlation by accumulating "norm" coefficient by previously calculated value
-double TDStretchMMX::calcCrossCorrAccumulate(const short *pV1, const short *pV2, double &dnorm) const
-{
- const __m64 *pVec1, *pVec2;
- __m64 shifter;
- __m64 accu;
- long corr, lnorm;
- int i;
-
- // cancel first normalizer tap from previous round
- lnorm = 0;
- for (i = 1; i <= channels; i ++)
- {
- lnorm -= (pV1[-i] * pV1[-i]) >> overlapDividerBits;
- }
-
- pVec1 = (__m64*)pV1;
- pVec2 = (__m64*)pV2;
-
- shifter = _m_from_int(overlapDividerBits);
- accu = _mm_setzero_si64();
-
- // Process 4 parallel sets of 2 * stereo samples or 4 * mono samples
- // during each round for improved CPU-level parallellization.
- for (i = 0; i < channels * overlapLength / 16; i ++)
- {
- __m64 temp;
-
- // dictionary of instructions:
- // _m_pmaddwd : 4*16bit multiply-add, resulting two 32bits = [a0*b0+a1*b1 ; a2*b2+a3*b3]
- // _mm_add_pi32 : 2*32bit add
- // _m_psrad : 32bit right-shift
-
- temp = _mm_add_pi32(_mm_sra_pi32(_mm_madd_pi16(pVec1[0], pVec2[0]), shifter),
- _mm_sra_pi32(_mm_madd_pi16(pVec1[1], pVec2[1]), shifter));
- accu = _mm_add_pi32(accu, temp);
-
- temp = _mm_add_pi32(_mm_sra_pi32(_mm_madd_pi16(pVec1[2], pVec2[2]), shifter),
- _mm_sra_pi32(_mm_madd_pi16(pVec1[3], pVec2[3]), shifter));
- accu = _mm_add_pi32(accu, temp);
-
- pVec1 += 4;
- pVec2 += 4;
- }
-
- // copy hi-dword of mm0 to lo-dword of mm1, then sum mmo+mm1
- // and finally store the result into the variable "corr"
-
- accu = _mm_add_pi32(accu, _mm_srli_si64(accu, 32));
- corr = _m_to_int(accu);
-
- // Clear MMS state
- _m_empty();
-
- // update normalizer with last samples of this round
- pV1 = (short *)pVec1;
- for (int j = 1; j <= channels; j ++)
- {
- lnorm += (pV1[-j] * pV1[-j]) >> overlapDividerBits;
- }
- dnorm += (double)lnorm;
-
- // Normalize result by dividing by sqrt(norm) - this step is easiest
- // done using floating point operation
- return (double)corr / sqrt((dnorm < 1e-9) ? 1.0 : dnorm);
-}
-
-
-void TDStretchMMX::clearCrossCorrState()
-{
- // Clear MMS state
- _m_empty();
- //_asm EMMS;
-}
-
-
-
-// MMX-optimized version of the function overlapStereo
-void TDStretchMMX::overlapStereo(short *output, const short *input) const
-{
- const __m64 *pVinput, *pVMidBuf;
- __m64 *pVdest;
- __m64 mix1, mix2, adder, shifter;
- int i;
-
- pVinput = (const __m64*)input;
- pVMidBuf = (const __m64*)pMidBuffer;
- pVdest = (__m64*)output;
-
- // mix1 = mixer values for 1st stereo sample
- // mix1 = mixer values for 2nd stereo sample
- // adder = adder for updating mixer values after each round
-
- mix1 = _mm_set_pi16(0, overlapLength, 0, overlapLength);
- adder = _mm_set_pi16(1, -1, 1, -1);
- mix2 = _mm_add_pi16(mix1, adder);
- adder = _mm_add_pi16(adder, adder);
-
- // Overlaplength-division by shifter. "+1" is to account for "-1" deduced in
- // overlapDividerBits calculation earlier.
- shifter = _m_from_int(overlapDividerBits + 1);
-
- for (i = 0; i < overlapLength / 4; i ++)
- {
- __m64 temp1, temp2;
-
- // load & shuffle data so that input & mixbuffer data samples are paired
- temp1 = _mm_unpacklo_pi16(pVMidBuf[0], pVinput[0]); // = i0l m0l i0r m0r
- temp2 = _mm_unpackhi_pi16(pVMidBuf[0], pVinput[0]); // = i1l m1l i1r m1r
-
- // temp = (temp .* mix) >> shifter
- temp1 = _mm_sra_pi32(_mm_madd_pi16(temp1, mix1), shifter);
- temp2 = _mm_sra_pi32(_mm_madd_pi16(temp2, mix2), shifter);
- pVdest[0] = _mm_packs_pi32(temp1, temp2); // pack 2*2*32bit => 4*16bit
-
- // update mix += adder
- mix1 = _mm_add_pi16(mix1, adder);
- mix2 = _mm_add_pi16(mix2, adder);
-
- // --- second round begins here ---
-
- // load & shuffle data so that input & mixbuffer data samples are paired
- temp1 = _mm_unpacklo_pi16(pVMidBuf[1], pVinput[1]); // = i2l m2l i2r m2r
- temp2 = _mm_unpackhi_pi16(pVMidBuf[1], pVinput[1]); // = i3l m3l i3r m3r
-
- // temp = (temp .* mix) >> shifter
- temp1 = _mm_sra_pi32(_mm_madd_pi16(temp1, mix1), shifter);
- temp2 = _mm_sra_pi32(_mm_madd_pi16(temp2, mix2), shifter);
- pVdest[1] = _mm_packs_pi32(temp1, temp2); // pack 2*2*32bit => 4*16bit
-
- // update mix += adder
- mix1 = _mm_add_pi16(mix1, adder);
- mix2 = _mm_add_pi16(mix2, adder);
-
- pVinput += 2;
- pVMidBuf += 2;
- pVdest += 2;
- }
-
- _m_empty(); // clear MMS state
-}
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// implementation of MMX optimized functions of class 'FIRFilter'
-//
-//////////////////////////////////////////////////////////////////////////////
-
-#include "FIRFilter.h"
-
-
-FIRFilterMMX::FIRFilterMMX() : FIRFilter()
-{
- filterCoeffsUnalign = NULL;
-}
-
-
-FIRFilterMMX::~FIRFilterMMX()
-{
- delete[] filterCoeffsUnalign;
-}
-
-
-// (overloaded) Calculates filter coefficients for MMX routine
-void FIRFilterMMX::setCoefficients(const short *coeffs, uint newLength, uint uResultDivFactor)
-{
- uint i;
- FIRFilter::setCoefficients(coeffs, newLength, uResultDivFactor);
-
- // Ensure that filter coeffs array is aligned to 16-byte boundary
- delete[] filterCoeffsUnalign;
- filterCoeffsUnalign = new short[2 * newLength + 8];
- filterCoeffsAlign = (short *)SOUNDTOUCH_ALIGN_POINTER_16(filterCoeffsUnalign);
-
- // rearrange the filter coefficients for mmx routines
- for (i = 0;i < length; i += 4)
- {
- filterCoeffsAlign[2 * i + 0] = coeffs[i + 0];
- filterCoeffsAlign[2 * i + 1] = coeffs[i + 2];
- filterCoeffsAlign[2 * i + 2] = coeffs[i + 0];
- filterCoeffsAlign[2 * i + 3] = coeffs[i + 2];
-
- filterCoeffsAlign[2 * i + 4] = coeffs[i + 1];
- filterCoeffsAlign[2 * i + 5] = coeffs[i + 3];
- filterCoeffsAlign[2 * i + 6] = coeffs[i + 1];
- filterCoeffsAlign[2 * i + 7] = coeffs[i + 3];
- }
-}
-
-
-
-// mmx-optimized version of the filter routine for stereo sound
-uint FIRFilterMMX::evaluateFilterStereo(short *dest, const short *src, uint numSamples) const
-{
- // Create stack copies of the needed member variables for asm routines :
- uint i, j;
- __m64 *pVdest = (__m64*)dest;
-
- if (length < 2) return 0;
-
- for (i = 0; i < (numSamples - length) / 2; i ++)
- {
- __m64 accu1;
- __m64 accu2;
- const __m64 *pVsrc = (const __m64*)src;
- const __m64 *pVfilter = (const __m64*)filterCoeffsAlign;
-
- accu1 = accu2 = _mm_setzero_si64();
- for (j = 0; j < lengthDiv8 * 2; j ++)
- {
- __m64 temp1, temp2;
-
- temp1 = _mm_unpacklo_pi16(pVsrc[0], pVsrc[1]); // = l2 l0 r2 r0
- temp2 = _mm_unpackhi_pi16(pVsrc[0], pVsrc[1]); // = l3 l1 r3 r1
-
- accu1 = _mm_add_pi32(accu1, _mm_madd_pi16(temp1, pVfilter[0])); // += l2*f2+l0*f0 r2*f2+r0*f0
- accu1 = _mm_add_pi32(accu1, _mm_madd_pi16(temp2, pVfilter[1])); // += l3*f3+l1*f1 r3*f3+r1*f1
-
- temp1 = _mm_unpacklo_pi16(pVsrc[1], pVsrc[2]); // = l4 l2 r4 r2
-
- accu2 = _mm_add_pi32(accu2, _mm_madd_pi16(temp2, pVfilter[0])); // += l3*f2+l1*f0 r3*f2+r1*f0
- accu2 = _mm_add_pi32(accu2, _mm_madd_pi16(temp1, pVfilter[1])); // += l4*f3+l2*f1 r4*f3+r2*f1
-
- // accu1 += l2*f2+l0*f0 r2*f2+r0*f0
- // += l3*f3+l1*f1 r3*f3+r1*f1
-
- // accu2 += l3*f2+l1*f0 r3*f2+r1*f0
- // l4*f3+l2*f1 r4*f3+r2*f1
-
- pVfilter += 2;
- pVsrc += 2;
- }
- // accu >>= resultDivFactor
- accu1 = _mm_srai_pi32(accu1, resultDivFactor);
- accu2 = _mm_srai_pi32(accu2, resultDivFactor);
-
- // pack 2*2*32bits => 4*16 bits
- pVdest[0] = _mm_packs_pi32(accu1, accu2);
- src += 4;
- pVdest ++;
- }
-
- _m_empty(); // clear emms state
-
- return (numSamples & 0xfffffffe) - length;
-}
-
-#endif // SOUNDTOUCH_ALLOW_MMX
diff --git a/src/thirdparty/SoundTouch/source/sse_optimized.cpp b/src/thirdparty/SoundTouch/source/sse_optimized.cpp
deleted file mode 100644
index a2124696a..000000000
--- a/src/thirdparty/SoundTouch/source/sse_optimized.cpp
+++ /dev/null
@@ -1,370 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-///
-/// SSE optimized routines for Pentium-III, Athlon-XP and later CPUs. All SSE
-/// optimized functions have been gathered into this single source
-/// code file, regardless to their class or original source code file, in order
-/// to ease porting the library to other compiler and processor platforms.
-///
-/// The SSE-optimizations are programmed using SSE compiler intrinsics that
-/// are supported both by Microsoft Visual C++ and GCC compilers, so this file
-/// should compile with both toolsets.
-///
-/// NOTICE: If using Visual Studio 6.0, you'll need to install the "Visual C++
-/// 6.0 processor pack" update to support SSE instruction set. The update is
-/// available for download at Microsoft Developers Network, see here:
-/// http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx
-///
-/// If the above URL is expired or removed, go to "http://msdn.microsoft.com" and
-/// perform a search with keywords "processor pack".
-///
-/// Author : Copyright (c) Olli Parviainen
-/// Author e-mail : oparviai 'at' iki.fi
-/// SoundTouch WWW: http://www.surina.net/soundtouch
-///
-////////////////////////////////////////////////////////////////////////////////
-//
-// Last changed : $Date: 2014-01-07 18:25:40 +0000 (Tue, 07 Jan 2014) $
-// File revision : $Revision: 4 $
-//
-// $Id: sse_optimized.cpp 184 2014-01-07 18:25:40Z oparviai $
-//
-////////////////////////////////////////////////////////////////////////////////
-//
-// License :
-//
-// SoundTouch audio processing library
-// Copyright (c) Olli Parviainen
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-////////////////////////////////////////////////////////////////////////////////
-
-#include "cpu_detect.h"
-#include "STTypes.h"
-
-using namespace soundtouch;
-
-#ifdef SOUNDTOUCH_ALLOW_SSE
-
-// SSE routines available only with float sample type
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// implementation of SSE optimized functions of class 'TDStretchSSE'
-//
-//////////////////////////////////////////////////////////////////////////////
-
-#include "TDStretch.h"
-#include <xmmintrin.h>
-#include <math.h>
-
-// Calculates cross correlation of two buffers
-double TDStretchSSE::calcCrossCorr(const float *pV1, const float *pV2, double &norm) const
-{
- int i;
- const float *pVec1;
- const __m128 *pVec2;
- __m128 vSum, vNorm;
-
- // Note. It means a major slow-down if the routine needs to tolerate
- // unaligned __m128 memory accesses. It's way faster if we can skip
- // unaligned slots and use _mm_load_ps instruction instead of _mm_loadu_ps.
- // This can mean up to ~ 10-fold difference (incl. part of which is
- // due to skipping every second round for stereo sound though).
- //
- // Compile-time define SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION is provided
- // for choosing if this little cheating is allowed.
-
-#ifdef SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION
- // Little cheating allowed, return valid correlation only for
- // aligned locations, meaning every second round for stereo sound.
-
- #define _MM_LOAD _mm_load_ps
-
- if (((ulongptr)pV1) & 15) return -1e50; // skip unaligned locations
-
-#else
- // No cheating allowed, use unaligned load & take the resulting
- // performance hit.
- #define _MM_LOAD _mm_loadu_ps
-#endif
-
- // ensure overlapLength is divisible by 8
- assert((overlapLength % 8) == 0);
-
- // Calculates the cross-correlation value between 'pV1' and 'pV2' vectors
- // Note: pV2 _must_ be aligned to 16-bit boundary, pV1 need not.
- pVec1 = (const float*)pV1;
- pVec2 = (const __m128*)pV2;
- vSum = vNorm = _mm_setzero_ps();
-
- // Unroll the loop by factor of 4 * 4 operations. Use same routine for
- // stereo & mono, for mono it just means twice the amount of unrolling.
- for (i = 0; i < channels * overlapLength / 16; i ++)
- {
- __m128 vTemp;
- // vSum += pV1[0..3] * pV2[0..3]
- vTemp = _MM_LOAD(pVec1);
- vSum = _mm_add_ps(vSum, _mm_mul_ps(vTemp ,pVec2[0]));
- vNorm = _mm_add_ps(vNorm, _mm_mul_ps(vTemp ,vTemp));
-
- // vSum += pV1[4..7] * pV2[4..7]
- vTemp = _MM_LOAD(pVec1 + 4);
- vSum = _mm_add_ps(vSum, _mm_mul_ps(vTemp, pVec2[1]));
- vNorm = _mm_add_ps(vNorm, _mm_mul_ps(vTemp ,vTemp));
-
- // vSum += pV1[8..11] * pV2[8..11]
- vTemp = _MM_LOAD(pVec1 + 8);
- vSum = _mm_add_ps(vSum, _mm_mul_ps(vTemp, pVec2[2]));
- vNorm = _mm_add_ps(vNorm, _mm_mul_ps(vTemp ,vTemp));
-
- // vSum += pV1[12..15] * pV2[12..15]
- vTemp = _MM_LOAD(pVec1 + 12);
- vSum = _mm_add_ps(vSum, _mm_mul_ps(vTemp, pVec2[3]));
- vNorm = _mm_add_ps(vNorm, _mm_mul_ps(vTemp ,vTemp));
-
- pVec1 += 16;
- pVec2 += 4;
- }
-
- // return value = vSum[0] + vSum[1] + vSum[2] + vSum[3]
- float *pvNorm = (float*)&vNorm;
- norm = (pvNorm[0] + pvNorm[1] + pvNorm[2] + pvNorm[3]);
-
- float *pvSum = (float*)&vSum;
- return (double)(pvSum[0] + pvSum[1] + pvSum[2] + pvSum[3]) / sqrt(norm < 1e-9 ? 1.0 : norm);
-
- /* This is approximately corresponding routine in C-language yet without normalization:
- double corr, norm;
- uint i;
-
- // Calculates the cross-correlation value between 'pV1' and 'pV2' vectors
- corr = norm = 0.0;
- for (i = 0; i < channels * overlapLength / 16; i ++)
- {
- corr += pV1[0] * pV2[0] +
- pV1[1] * pV2[1] +
- pV1[2] * pV2[2] +
- pV1[3] * pV2[3] +
- pV1[4] * pV2[4] +
- pV1[5] * pV2[5] +
- pV1[6] * pV2[6] +
- pV1[7] * pV2[7] +
- pV1[8] * pV2[8] +
- pV1[9] * pV2[9] +
- pV1[10] * pV2[10] +
- pV1[11] * pV2[11] +
- pV1[12] * pV2[12] +
- pV1[13] * pV2[13] +
- pV1[14] * pV2[14] +
- pV1[15] * pV2[15];
-
- for (j = 0; j < 15; j ++) norm += pV1[j] * pV1[j];
-
- pV1 += 16;
- pV2 += 16;
- }
- return corr / sqrt(norm);
- */
-}
-
-
-
-double TDStretchSSE::calcCrossCorrAccumulate(const float *pV1, const float *pV2, double &norm) const
-{
- // call usual calcCrossCorr function because SSE does not show big benefit of
- // accumulating "norm" value, and also the "norm" rolling algorithm would get
- // complicated due to SSE-specific alignment-vs-nonexact correlation rules.
- return calcCrossCorr(pV1, pV2, norm);
-}
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// implementation of SSE optimized functions of class 'FIRFilter'
-//
-//////////////////////////////////////////////////////////////////////////////
-
-#include "FIRFilter.h"
-
-FIRFilterSSE::FIRFilterSSE() : FIRFilter()
-{
- filterCoeffsAlign = NULL;
- filterCoeffsUnalign = NULL;
-}
-
-
-FIRFilterSSE::~FIRFilterSSE()
-{
- delete[] filterCoeffsUnalign;
- filterCoeffsAlign = NULL;
- filterCoeffsUnalign = NULL;
-}
-
-
-// (overloaded) Calculates filter coefficients for SSE routine
-void FIRFilterSSE::setCoefficients(const float *coeffs, uint newLength, uint uResultDivFactor)
-{
- uint i;
- float fDivider;
-
- FIRFilter::setCoefficients(coeffs, newLength, uResultDivFactor);
-
- // Scale the filter coefficients so that it won't be necessary to scale the filtering result
- // also rearrange coefficients suitably for SSE
- // Ensure that filter coeffs array is aligned to 16-byte boundary
- delete[] filterCoeffsUnalign;
- filterCoeffsUnalign = new float[2 * newLength + 4];
- filterCoeffsAlign = (float *)SOUNDTOUCH_ALIGN_POINTER_16(filterCoeffsUnalign);
-
- fDivider = (float)resultDivider;
-
- // rearrange the filter coefficients for mmx routines
- for (i = 0; i < newLength; i ++)
- {
- filterCoeffsAlign[2 * i + 0] =
- filterCoeffsAlign[2 * i + 1] = coeffs[i + 0] / fDivider;
- }
-}
-
-
-
-// SSE-optimized version of the filter routine for stereo sound
-uint FIRFilterSSE::evaluateFilterStereo(float *dest, const float *source, uint numSamples) const
-{
- int count = (int)((numSamples - length) & (uint)-2);
- int j;
-
- assert(count % 2 == 0);
-
- if (count < 2) return 0;
-
- assert(source != NULL);
- assert(dest != NULL);
- assert((length % 8) == 0);
- assert(filterCoeffsAlign != NULL);
- assert(((ulongptr)filterCoeffsAlign) % 16 == 0);
-
- // filter is evaluated for two stereo samples with each iteration, thus use of 'j += 2'
- for (j = 0; j < count; j += 2)
- {
- const float *pSrc;
- const __m128 *pFil;
- __m128 sum1, sum2;
- uint i;
-
- pSrc = (const float*)source; // source audio data
- pFil = (const __m128*)filterCoeffsAlign; // filter coefficients. NOTE: Assumes coefficients
- // are aligned to 16-byte boundary
- sum1 = sum2 = _mm_setzero_ps();
-
- for (i = 0; i < length / 8; i ++)
- {
- // Unroll loop for efficiency & calculate filter for 2*2 stereo samples
- // at each pass
-
- // sum1 is accu for 2*2 filtered stereo sound data at the primary sound data offset
- // sum2 is accu for 2*2 filtered stereo sound data for the next sound sample offset.
-
- sum1 = _mm_add_ps(sum1, _mm_mul_ps(_mm_loadu_ps(pSrc) , pFil[0]));
- sum2 = _mm_add_ps(sum2, _mm_mul_ps(_mm_loadu_ps(pSrc + 2), pFil[0]));
-
- sum1 = _mm_add_ps(sum1, _mm_mul_ps(_mm_loadu_ps(pSrc + 4), pFil[1]));
- sum2 = _mm_add_ps(sum2, _mm_mul_ps(_mm_loadu_ps(pSrc + 6), pFil[1]));
-
- sum1 = _mm_add_ps(sum1, _mm_mul_ps(_mm_loadu_ps(pSrc + 8) , pFil[2]));
- sum2 = _mm_add_ps(sum2, _mm_mul_ps(_mm_loadu_ps(pSrc + 10), pFil[2]));
-
- sum1 = _mm_add_ps(sum1, _mm_mul_ps(_mm_loadu_ps(pSrc + 12), pFil[3]));
- sum2 = _mm_add_ps(sum2, _mm_mul_ps(_mm_loadu_ps(pSrc + 14), pFil[3]));
-
- pSrc += 16;
- pFil += 4;
- }
-
- // Now sum1 and sum2 both have a filtered 2-channel sample each, but we still need
- // to sum the two hi- and lo-floats of these registers together.
-
- // post-shuffle & add the filtered values and store to dest.
- _mm_storeu_ps(dest, _mm_add_ps(
- _mm_shuffle_ps(sum1, sum2, _MM_SHUFFLE(1,0,3,2)), // s2_1 s2_0 s1_3 s1_2
- _mm_shuffle_ps(sum1, sum2, _MM_SHUFFLE(3,2,1,0)) // s2_3 s2_2 s1_1 s1_0
- ));
- source += 4;
- dest += 4;
- }
-
- // Ideas for further improvement:
- // 1. If it could be guaranteed that 'source' were always aligned to 16-byte
- // boundary, a faster aligned '_mm_load_ps' instruction could be used.
- // 2. If it could be guaranteed that 'dest' were always aligned to 16-byte
- // boundary, a faster '_mm_store_ps' instruction could be used.
-
- return (uint)count;
-
- /* original routine in C-language. please notice the C-version has differently
- organized coefficients though.
- double suml1, suml2;
- double sumr1, sumr2;
- uint i, j;
-
- for (j = 0; j < count; j += 2)
- {
- const float *ptr;
- const float *pFil;
-
- suml1 = sumr1 = 0.0;
- suml2 = sumr2 = 0.0;
- ptr = src;
- pFil = filterCoeffs;
- for (i = 0; i < lengthLocal; i ++)
- {
- // unroll loop for efficiency.
-
- suml1 += ptr[0] * pFil[0] +
- ptr[2] * pFil[2] +
- ptr[4] * pFil[4] +
- ptr[6] * pFil[6];
-
- sumr1 += ptr[1] * pFil[1] +
- ptr[3] * pFil[3] +
- ptr[5] * pFil[5] +
- ptr[7] * pFil[7];
-
- suml2 += ptr[8] * pFil[0] +
- ptr[10] * pFil[2] +
- ptr[12] * pFil[4] +
- ptr[14] * pFil[6];
-
- sumr2 += ptr[9] * pFil[1] +
- ptr[11] * pFil[3] +
- ptr[13] * pFil[5] +
- ptr[15] * pFil[7];
-
- ptr += 16;
- pFil += 8;
- }
- dest[0] = (float)suml1;
- dest[1] = (float)sumr1;
- dest[2] = (float)suml2;
- dest[3] = (float)sumr2;
-
- src += 4;
- dest += 4;
- }
- */
-}
-
-#endif // SOUNDTOUCH_ALLOW_SSE
diff --git a/src/thirdparty/TreePropSheet/PropPageFrameDefault.cpp b/src/thirdparty/TreePropSheet/PropPageFrameDefault.cpp
index 0db21dac7..9a0f909d6 100644
--- a/src/thirdparty/TreePropSheet/PropPageFrameDefault.cpp
+++ b/src/thirdparty/TreePropSheet/PropPageFrameDefault.cpp
@@ -105,12 +105,12 @@ static CThemeLib g_ThemeLib;
CThemeLib::CThemeLib()
- : m_hThemeLib(NULL)
- , m_pIsThemeActive(NULL)
+ : m_pIsThemeActive(NULL)
, m_pOpenThemeData(NULL)
, m_pCloseThemeData(NULL)
, m_pGetThemeBackgroundContentRect(NULL)
, m_pDrawThemeBackground(NULL)
+ , m_hThemeLib(NULL)
{
m_hThemeLib = LoadLibrary(_T("uxtheme.dll"));
if (!m_hThemeLib)
diff --git a/src/thirdparty/TreePropSheet/TreePropSheet.cpp b/src/thirdparty/TreePropSheet/TreePropSheet.cpp
index ecfd66d57..9a913d567 100644
--- a/src/thirdparty/TreePropSheet/TreePropSheet.cpp
+++ b/src/thirdparty/TreePropSheet/TreePropSheet.cpp
@@ -52,38 +52,39 @@ const UINT CTreePropSheet::s_unPageTreeId = 0x7EEE;
CTreePropSheet::CTreePropSheet()
: CPropertySheet(),
- m_bPageTreeSelChangedActive(FALSE),
m_bTreeViewMode(TRUE),
+ m_pwndPageTree(NULL),
+ m_pFrame(NULL),
+ m_bPageTreeSelChangedActive(FALSE),
m_bPageCaption(FALSE),
m_bTreeImages(FALSE),
- m_nPageTreeWidth(150),
- m_pwndPageTree(NULL),
- m_pFrame(NULL)
-{}
+ m_nPageTreeWidth(150)
+{
+}
CTreePropSheet::CTreePropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
: CPropertySheet(nIDCaption, pParentWnd, iSelectPage),
- m_bPageTreeSelChangedActive(FALSE),
m_bTreeViewMode(TRUE),
+ m_pwndPageTree(NULL),
+ m_pFrame(NULL),
+ m_bPageTreeSelChangedActive(FALSE),
m_bPageCaption(FALSE),
m_bTreeImages(FALSE),
- m_nPageTreeWidth(150),
- m_pwndPageTree(NULL),
- m_pFrame(NULL)
+ m_nPageTreeWidth(150)
{
}
CTreePropSheet::CTreePropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
: CPropertySheet(pszCaption, pParentWnd, iSelectPage),
- m_bPageTreeSelChangedActive(FALSE),
m_bTreeViewMode(TRUE),
+ m_pwndPageTree(NULL),
+ m_pFrame(NULL),
+ m_bPageTreeSelChangedActive(FALSE),
m_bPageCaption(FALSE),
m_bTreeImages(FALSE),
- m_nPageTreeWidth(150),
- m_pwndPageTree(NULL),
- m_pFrame(NULL)
+ m_nPageTreeWidth(150)
{
}
diff --git a/src/thirdparty/TreePropSheet/TreePropSheet.vcxproj b/src/thirdparty/TreePropSheet/TreePropSheet.vcxproj
index a7ea738f9..1d2ef5681 100644
--- a/src/thirdparty/TreePropSheet/TreePropSheet.vcxproj
+++ b/src/thirdparty/TreePropSheet/TreePropSheet.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,47 +34,15 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/src/thirdparty/TreePropSheet/TreePropSheet.vcxproj.filters b/src/thirdparty/TreePropSheet/TreePropSheet.vcxproj.filters
index baf26b5f9..236ef81d6 100644
--- a/src/thirdparty/TreePropSheet/TreePropSheet.vcxproj.filters
+++ b/src/thirdparty/TreePropSheet/TreePropSheet.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{669fa26f-0c7f-40c4-bc82-db7a76c85378}</UniqueIdentifier>
diff --git a/src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj b/src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj
index 6f40e34a4..c7dd043a1 100644
--- a/src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj
+++ b/src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -25,71 +25,23 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
<Import Project="..\..\..\YASM.props" />
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
+ <Import Project="..\..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>h;..\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;WIN32_LEAN_AND_MEAN;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>h;..\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;WIN32_LEAN_AND_MEAN;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>h;..\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;WIN32_LEAN_AND_MEAN;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>h;..\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;WIN32_LEAN_AND_MEAN;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj.filters b/src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj.filters
index eac3699c3..3b185008f 100644
--- a/src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj.filters
+++ b/src/thirdparty/VirtualDub/Kasumi/Kasumi.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{0ee6e95d-30d8-431b-a0e0-af0605aaaa63}</UniqueIdentifier>
diff --git a/src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp b/src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp
index 51c8afe28..de6ac77b0 100644
--- a/src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp
+++ b/src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp
@@ -66,7 +66,7 @@ namespace {
cliptab16[i+277] = 0x801 * ((unsigned)i>>3) + 0x20 * ((unsigned)i>>2);
}
}
- } colorconv;
+ } static const colorconv;
struct YCbCrFormatInfo {
ptrdiff_t ystep;
diff --git a/src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp b/src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp
index 185b39c8d..c16e7bbc1 100644
--- a/src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp
+++ b/src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp
@@ -22,7 +22,7 @@
#include <vd2/Kasumi/pixmaputils.h>
#include <vd2/system/memory.h>
-extern VDPixmapFormatInfo g_vdPixmapFormats[] = {
+extern VDPixmapFormatInfo const g_vdPixmapFormats[] = {
// name qchnk qw qh qwb qhb qs ab aw ah as ps
/* Null */ { "null", false, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
/* Pal1 */ { "Pal1", true, 8, 1, 3, 0, 1, 0, 0, 0, 0, 2 },
diff --git a/src/thirdparty/VirtualDub/h/vd2/Kasumi/pixmaputils.h b/src/thirdparty/VirtualDub/h/vd2/Kasumi/pixmaputils.h
index bf5fd6203..c572b52ae 100644
--- a/src/thirdparty/VirtualDub/h/vd2/Kasumi/pixmaputils.h
+++ b/src/thirdparty/VirtualDub/h/vd2/Kasumi/pixmaputils.h
@@ -20,7 +20,7 @@ struct VDPixmapFormatInfo {
int subformats; // number of subformats for this format
};
-extern VDPixmapFormatInfo g_vdPixmapFormats[];
+extern const VDPixmapFormatInfo g_vdPixmapFormats[];
inline const VDPixmapFormatInfo& VDPixmapGetInfo(sint32 format) {
VDASSERT((uint32)format < nsVDPixmap::kPixFormat_Max_Standard);
diff --git a/src/thirdparty/VirtualDub/h/vd2/system/VDString.h b/src/thirdparty/VirtualDub/h/vd2/system/VDString.h
index 941ea08a9..88d05706d 100644
--- a/src/thirdparty/VirtualDub/h/vd2/system/VDString.h
+++ b/src/thirdparty/VirtualDub/h/vd2/system/VDString.h
@@ -655,6 +655,8 @@ inline VDStringA operator+(const VDStringA& str, char c) {
return result;
}
+// Start patch MPC-HC
+/*
namespace std {
template<>
struct less<VDStringA> : binary_function<VDStringA, VDStringA, bool> {
@@ -663,6 +665,8 @@ namespace std {
}
};
}
+*/
+// End patch MPC-HC
///////////////////////////////////////////////////////////////////////////
diff --git a/src/thirdparty/VirtualDub/system/system.vcxproj b/src/thirdparty/VirtualDub/system/system.vcxproj
index 381004d93..0ecdcb423 100644
--- a/src/thirdparty/VirtualDub/system/system.vcxproj
+++ b/src/thirdparty/VirtualDub/system/system.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -25,19 +25,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
@@ -45,64 +33,16 @@
<ImportGroup Label="ExtensionSettings">
<Import Project="..\..\..\YASM.props" />
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\common.props" />
+ <Import Project="..\..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\h;h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;NOMINMAX;WIN32_LEAN_AND_MEAN;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>Winmm.lib</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\h;h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;NOMINMAX;WIN32_LEAN_AND_MEAN;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>Winmm.lib</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>..\h;h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;NOMINMAX;WIN32_LEAN_AND_MEAN;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- <Lib>
- <AdditionalDependencies>Winmm.lib</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>..\h;h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;NOMINMAX;WIN32_LEAN_AND_MEAN;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
<Lib>
<AdditionalDependencies>Winmm.lib</AdditionalDependencies>
diff --git a/src/thirdparty/VirtualDub/system/system.vcxproj.filters b/src/thirdparty/VirtualDub/system/system.vcxproj.filters
index b6839cba4..44ed37df0 100644
--- a/src/thirdparty/VirtualDub/system/system.vcxproj.filters
+++ b/src/thirdparty/VirtualDub/system/system.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{5c673951-5083-408a-a3de-a63babf1344b}</UniqueIdentifier>
diff --git a/src/thirdparty/XmlRpc4Win b/src/thirdparty/XmlRpc4Win
new file mode 160000
+Subproject 1d7362ccd55d5910a212d06afe377d82dc664d0
diff --git a/src/thirdparty/ZenLib/ZenLib.vcxproj b/src/thirdparty/ZenLib/ZenLib.vcxproj
index a1fab3469..55e64ebb4 100644
--- a/src/thirdparty/ZenLib/ZenLib.vcxproj
+++ b/src/thirdparty/ZenLib/ZenLib.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,140 +26,86 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>.;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeaderFile>ZenLib/PreComp.h</PrecompiledHeaderFile>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <AdditionalIncludeDirectories>.;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeaderFile>ZenLib/PreComp.h</PrecompiledHeaderFile>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <AdditionalIncludeDirectories>.;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeaderFile>ZenLib/PreComp.h</PrecompiledHeaderFile>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
- <AdditionalIncludeDirectories>.;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>library\Source;..\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>ZenLib/PreComp.h</PrecompiledHeaderFile>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
- <ClCompile Include="ZenLib\Conf.cpp" />
- <ClCompile Include="ZenLib\CriticalSection.cpp" />
- <ClCompile Include="ZenLib\Dir.cpp" />
- <ClCompile Include="ZenLib\File.cpp" />
- <ClCompile Include="ZenLib\FileName.cpp" />
- <ClCompile Include="ZenLib\HTTP_Client.cpp" />
- <ClCompile Include="ZenLib\InfoMap.cpp" />
- <ClCompile Include="ZenLib\int128s.cpp" />
- <ClCompile Include="ZenLib\int128u.cpp" />
- <ClCompile Include="ZenLib\MemoryDebug.cpp" />
- <ClCompile Include="ZenLib\OS_Utils.cpp" />
- <ClCompile Include="ZenLib\PreComp.cpp">
+ <ClCompile Include="library\Source\ZenLib\Conf.cpp" />
+ <ClCompile Include="library\Source\ZenLib\CriticalSection.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Dir.cpp" />
+ <ClCompile Include="library\Source\ZenLib\File.cpp" />
+ <ClCompile Include="library\Source\ZenLib\FileName.cpp" />
+ <ClCompile Include="library\Source\ZenLib\HTTP_Client.cpp" />
+ <ClCompile Include="library\Source\ZenLib\InfoMap.cpp" />
+ <ClCompile Include="library\Source\ZenLib\int128s.cpp" />
+ <ClCompile Include="library\Source\ZenLib\int128u.cpp" />
+ <ClCompile Include="library\Source\ZenLib\MemoryDebug.cpp" />
+ <ClCompile Include="library\Source\ZenLib\OS_Utils.cpp" />
+ <ClCompile Include="library\Source\ZenLib\PreComp.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
- <ClCompile Include="ZenLib\Thread.cpp" />
- <ClCompile Include="ZenLib\Translation.cpp" />
- <ClCompile Include="ZenLib\Utils.cpp" />
- <ClCompile Include="ZenLib\Ztring.cpp" />
- <ClCompile Include="ZenLib\ZtringList.cpp" />
- <ClCompile Include="ZenLib\ZtringListList.cpp" />
- <ClCompile Include="ZenLib\ZtringListListF.cpp" />
- <ClCompile Include="ZenLib\Format\Http\Http_Cookies.cpp" />
- <ClCompile Include="ZenLib\Format\Http\Http_Handler.cpp" />
- <ClCompile Include="ZenLib\Format\Http\Http_Request.cpp" />
- <ClCompile Include="ZenLib\Format\Http\Http_Utils.cpp" />
- <ClCompile Include="ZenLib\Format\Html\Html_Handler.cpp" />
- <ClCompile Include="ZenLib\Format\Html\Html_Request.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Thread.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Translation.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Utils.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Ztring.cpp" />
+ <ClCompile Include="library\Source\ZenLib\ZtringList.cpp" />
+ <ClCompile Include="library\Source\ZenLib\ZtringListList.cpp" />
+ <ClCompile Include="library\Source\ZenLib\ZtringListListF.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Format\Http\Http_Cookies.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Format\Http\Http_Handler.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Format\Http\Http_Request.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Format\Http\Http_Utils.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Format\Html\Html_Handler.cpp" />
+ <ClCompile Include="library\Source\ZenLib\Format\Html\Html_Request.cpp" />
</ItemGroup>
<ItemGroup>
- <ClInclude Include="ZenLib\BitStream.h" />
- <ClInclude Include="ZenLib\BitStream_Fast.h" />
- <ClInclude Include="ZenLib\BitStream_LE.h" />
- <ClInclude Include="ZenLib\Conf.h" />
- <ClInclude Include="ZenLib\CriticalSection.h" />
- <ClInclude Include="ZenLib\Dir.h" />
- <ClInclude Include="ZenLib\File.h" />
- <ClInclude Include="ZenLib\FileName.h" />
- <ClInclude Include="ZenLib\HTTP_Client.h" />
- <ClInclude Include="ZenLib\InfoMap.h" />
- <ClInclude Include="ZenLib\int128s.h" />
- <ClInclude Include="ZenLib\int128u.h" />
- <ClInclude Include="ZenLib\MemoryDebug.h" />
- <ClInclude Include="ZenLib\MemoryUtils.h" />
- <ClInclude Include="ZenLib\OS_Utils.h" />
- <ClInclude Include="ZenLib\PreComp.h" />
- <ClInclude Include="ZenLib\Thread.h" />
- <ClInclude Include="ZenLib\Trace.h" />
- <ClInclude Include="ZenLib\Translation.h" />
- <ClInclude Include="ZenLib\Utils.h" />
- <ClInclude Include="ZenLib\Ztring.h" />
- <ClInclude Include="ZenLib\ZtringList.h" />
- <ClInclude Include="ZenLib\ZtringListList.h" />
- <ClInclude Include="ZenLib\ZtringListListF.h" />
- <ClInclude Include="ZenLib\Format\Html\Html_Handler.h" />
- <ClInclude Include="ZenLib\Format\Html\Html_Request.h" />
- <ClInclude Include="ZenLib\Format\Http\Http_Cookies.h" />
- <ClInclude Include="ZenLib\Format\Http\Http_Handler.h" />
- <ClInclude Include="ZenLib\Format\Http\Http_Request.h" />
- <ClInclude Include="ZenLib\Format\Http\Http_Utils.h" />
+ <ClInclude Include="library\Source\ZenLib\BitStream.h" />
+ <ClInclude Include="library\Source\ZenLib\BitStream_Fast.h" />
+ <ClInclude Include="library\Source\ZenLib\BitStream_LE.h" />
+ <ClInclude Include="library\Source\ZenLib\Conf.h" />
+ <ClInclude Include="library\Source\ZenLib\CriticalSection.h" />
+ <ClInclude Include="library\Source\ZenLib\Dir.h" />
+ <ClInclude Include="library\Source\ZenLib\File.h" />
+ <ClInclude Include="library\Source\ZenLib\FileName.h" />
+ <ClInclude Include="library\Source\ZenLib\HTTP_Client.h" />
+ <ClInclude Include="library\Source\ZenLib\InfoMap.h" />
+ <ClInclude Include="library\Source\ZenLib\int128s.h" />
+ <ClInclude Include="library\Source\ZenLib\int128u.h" />
+ <ClInclude Include="library\Source\ZenLib\MemoryDebug.h" />
+ <ClInclude Include="library\Source\ZenLib\MemoryUtils.h" />
+ <ClInclude Include="library\Source\ZenLib\OS_Utils.h" />
+ <ClInclude Include="library\Source\ZenLib\PreComp.h" />
+ <ClInclude Include="library\Source\ZenLib\Thread.h" />
+ <ClInclude Include="library\Source\ZenLib\Trace.h" />
+ <ClInclude Include="library\Source\ZenLib\Translation.h" />
+ <ClInclude Include="library\Source\ZenLib\Utils.h" />
+ <ClInclude Include="library\Source\ZenLib\Ztring.h" />
+ <ClInclude Include="library\Source\ZenLib\ZtringList.h" />
+ <ClInclude Include="library\Source\ZenLib\ZtringListList.h" />
+ <ClInclude Include="library\Source\ZenLib\ZtringListListF.h" />
+ <ClInclude Include="library\Source\ZenLib\Format\Html\Html_Handler.h" />
+ <ClInclude Include="library\Source\ZenLib\Format\Html\Html_Request.h" />
+ <ClInclude Include="library\Source\ZenLib\Format\Http\Http_Cookies.h" />
+ <ClInclude Include="library\Source\ZenLib\Format\Http\Http_Handler.h" />
+ <ClInclude Include="library\Source\ZenLib\Format\Http\Http_Request.h" />
+ <ClInclude Include="library\Source\ZenLib\Format\Http\Http_Utils.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
diff --git a/src/thirdparty/ZenLib/ZenLib.vcxproj.filters b/src/thirdparty/ZenLib/ZenLib.vcxproj.filters
index 41f0c28c8..895bc70bf 100644
--- a/src/thirdparty/ZenLib/ZenLib.vcxproj.filters
+++ b/src/thirdparty/ZenLib/ZenLib.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
@@ -29,168 +29,171 @@
</Filter>
</ItemGroup>
<ItemGroup>
- <ClCompile Include="ZenLib\Conf.cpp">
+ <ClCompile Include="library\Source\ZenLib\Conf.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\CriticalSection.cpp">
+ <ClCompile Include="library\Source\ZenLib\CriticalSection.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Dir.cpp">
+ <ClCompile Include="library\Source\ZenLib\Dir.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\File.cpp">
+ <ClCompile Include="library\Source\ZenLib\File.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\FileName.cpp">
+ <ClCompile Include="library\Source\ZenLib\FileName.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\HTTP_Client.cpp">
+ <ClCompile Include="library\Source\ZenLib\HTTP_Client.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\InfoMap.cpp">
+ <ClCompile Include="library\Source\ZenLib\InfoMap.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\int128s.cpp">
+ <ClCompile Include="library\Source\ZenLib\int128s.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\int128u.cpp">
+ <ClCompile Include="library\Source\ZenLib\int128u.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\MemoryDebug.cpp">
+ <ClCompile Include="library\Source\ZenLib\MemoryDebug.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\OS_Utils.cpp">
+ <ClCompile Include="library\Source\ZenLib\OS_Utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Thread.cpp">
+ <ClCompile Include="library\Source\ZenLib\Thread.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Translation.cpp">
+ <ClCompile Include="library\Source\ZenLib\Translation.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Utils.cpp">
+ <ClCompile Include="library\Source\ZenLib\Utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Ztring.cpp">
+ <ClCompile Include="library\Source\ZenLib\Ztring.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\ZtringList.cpp">
+ <ClCompile Include="library\Source\ZenLib\ZtringList.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\ZtringListList.cpp">
+ <ClCompile Include="library\Source\ZenLib\ZtringListList.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\ZtringListListF.cpp">
+ <ClCompile Include="library\Source\ZenLib\ZtringListListF.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Format\Http\Http_Cookies.cpp">
+ <ClCompile Include="library\Source\ZenLib\Format\Http\Http_Cookies.cpp">
<Filter>Source Files\Format\Http</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Format\Http\Http_Handler.cpp">
+ <ClCompile Include="library\Source\ZenLib\Format\Http\Http_Handler.cpp">
<Filter>Source Files\Format\Http</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Format\Http\Http_Request.cpp">
+ <ClCompile Include="library\Source\ZenLib\Format\Http\Http_Request.cpp">
<Filter>Source Files\Format\Http</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Format\Http\Http_Utils.cpp">
+ <ClCompile Include="library\Source\ZenLib\Format\Http\Http_Utils.cpp">
<Filter>Source Files\Format\Http</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Format\Html\Html_Handler.cpp">
+ <ClCompile Include="library\Source\ZenLib\Format\Html\Html_Handler.cpp">
<Filter>Source Files\Format\Html</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\Format\Html\Html_Request.cpp">
+ <ClCompile Include="library\Source\ZenLib\Format\Html\Html_Request.cpp">
<Filter>Source Files\Format\Html</Filter>
</ClCompile>
- <ClCompile Include="ZenLib\PreComp.cpp">
+ <ClCompile Include="library\Source\ZenLib\PreComp.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="ZenLib\BitStream.h">
+ <ClInclude Include="library\Source\ZenLib\BitStream.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\BitStream_Fast.h">
+ <ClInclude Include="library\Source\ZenLib\BitStream_Fast.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\BitStream_LE.h">
+ <ClInclude Include="library\Source\ZenLib\BitStream_LE.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Conf.h">
+ <ClInclude Include="library\Source\ZenLib\Conf.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\CriticalSection.h">
+ <ClInclude Include="library\Source\ZenLib\CriticalSection.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Dir.h">
+ <ClInclude Include="library\Source\ZenLib\Dir.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\File.h">
+ <ClInclude Include="library\Source\ZenLib\File.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\FileName.h">
+ <ClInclude Include="library\Source\ZenLib\FileName.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\HTTP_Client.h">
+ <ClInclude Include="library\Source\ZenLib\HTTP_Client.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\InfoMap.h">
+ <ClInclude Include="library\Source\ZenLib\InfoMap.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\int128s.h">
+ <ClInclude Include="library\Source\ZenLib\int128s.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\int128u.h">
+ <ClInclude Include="library\Source\ZenLib\int128u.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\MemoryDebug.h">
+ <ClInclude Include="library\Source\ZenLib\MemoryDebug.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\OS_Utils.h">
+ <ClInclude Include="library\Source\ZenLib\OS_Utils.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Thread.h">
+ <ClInclude Include="library\Source\ZenLib\Thread.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Trace.h">
+ <ClInclude Include="library\Source\ZenLib\Trace.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Translation.h">
+ <ClInclude Include="library\Source\ZenLib\Translation.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Utils.h">
+ <ClInclude Include="library\Source\ZenLib\Utils.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Ztring.h">
+ <ClInclude Include="library\Source\ZenLib\Ztring.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\ZtringList.h">
+ <ClInclude Include="library\Source\ZenLib\ZtringList.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\ZtringListList.h">
+ <ClInclude Include="library\Source\ZenLib\ZtringListList.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\ZtringListListF.h">
+ <ClInclude Include="library\Source\ZenLib\ZtringListListF.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Format\Html\Html_Handler.h">
+ <ClInclude Include="library\Source\ZenLib\Format\Html\Html_Handler.h">
<Filter>Header Files\Format\Html</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Format\Html\Html_Request.h">
+ <ClInclude Include="library\Source\ZenLib\Format\Html\Html_Request.h">
<Filter>Header Files\Format\Html</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Format\Http\Http_Cookies.h">
+ <ClInclude Include="library\Source\ZenLib\Format\Http\Http_Cookies.h">
<Filter>Header Files\Format\Http</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Format\Http\Http_Handler.h">
+ <ClInclude Include="library\Source\ZenLib\Format\Http\Http_Handler.h">
<Filter>Header Files\Format\Http</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Format\Http\Http_Request.h">
+ <ClInclude Include="library\Source\ZenLib\Format\Http\Http_Request.h">
<Filter>Header Files\Format\Http</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\Format\Http\Http_Utils.h">
+ <ClInclude Include="library\Source\ZenLib\Format\Http\Http_Utils.h">
<Filter>Header Files\Format\Http</Filter>
</ClInclude>
- <ClInclude Include="ZenLib\PreComp.h">
+ <ClInclude Include="library\Source\ZenLib\PreComp.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="library\Source\ZenLib\MemoryUtils.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
diff --git a/src/thirdparty/ZenLib/ZenLib/BitStream.h b/src/thirdparty/ZenLib/ZenLib/BitStream.h
deleted file mode 100644
index f00e04a06..000000000
--- a/src/thirdparty/ZenLib/ZenLib/BitStream.h
+++ /dev/null
@@ -1,352 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Read a stream bit per bit
-// Can read up to 32 bits at once
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenBitStreamH
-#define ZenBitStreamH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-#ifndef MIN
- #define MIN(a, b) (((a) < (b)) ? (a) : (b))
-#endif
-
-class BitStream
-{
-public:
- BitStream () {Buffer=NULL;
- Buffer_Size=Buffer_Size_Init=Buffer_Size_BeforeLastCall=0;
- LastByte_Size=0;
- BufferUnderRun=true;
- BookMark=false;}
- BitStream (const int8u* Buffer_, size_t Size_) {Buffer=Buffer_;
- Buffer_Size=Buffer_Size_Init=Buffer_Size_BeforeLastCall=Size_*8; //Size is in bits
- LastByte_Size=0;
- BufferUnderRun=Buffer_Size?false:true;
- BookMark=false;}
- virtual ~BitStream () {};
-
- virtual void Attach(const int8u* Buffer_, size_t Size_)
- {
- if (Buffer_==Buffer)
- return; //Nothing to do
- Buffer=Buffer_;
- Buffer_Size=Buffer_Size_Init=Buffer_Size_BeforeLastCall=Size_*8; //Size is in bits
- LastByte_Size=0;
- BufferUnderRun=Buffer_Size?false:true;
- BookMark=false;
- };
-
- virtual int32u Get (size_t HowMany)
- {
- size_t ToReturn;
- static const int32u Mask[33]={
- 0x00000000,
- 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
- 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
- 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
- 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
- 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
- 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
- 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
- 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
- };
-
- if (HowMany==0 || HowMany>32)
- return 0;
- if ((size_t)HowMany>Buffer_Size+LastByte_Size)
- {
- Buffer_Size=0;
- LastByte_Size=0;
- BufferUnderRun=true;
- return 0;
- }
-
- Buffer_Size_BeforeLastCall=Buffer_Size+LastByte_Size;
-
- if (HowMany<=LastByte_Size)
- {
- LastByte_Size-=HowMany;
- ToReturn=LastByte>>LastByte_Size;
- }
- else
- {
- size_t NewBits=HowMany-LastByte_Size;
- if (NewBits==32)
- ToReturn=0;
- else
- ToReturn=LastByte<<NewBits;
- switch ((NewBits-1)/8)
- {
- case 3 : NewBits-=8;
- ToReturn |= ((size_t)*Buffer) << NewBits;
- Buffer++;
- Buffer_Size-=8;
- case 2 : NewBits-=8;
- ToReturn |= ((size_t)*Buffer) << NewBits;
- Buffer++;
- Buffer_Size-=8;
- case 1 : NewBits-=8;
- ToReturn |= ((size_t)*Buffer) << NewBits;
- Buffer++;
- Buffer_Size-=8;
- case 0 :
- LastByte=*Buffer;
- Buffer++;
- }
- LastByte_Size=MIN(8, Buffer_Size)-NewBits;
- Buffer_Size -=MIN(8, Buffer_Size);
- ToReturn|=(LastByte>>LastByte_Size)&Mask[NewBits];
- }
- return (int32u)(ToReturn&Mask[HowMany]);
- };
-
- bool GetB ()
- {
- return Get(1)?true:false;
- }
-
- int8u Get1 (size_t HowMany)
- {
- return (int8u )Get(HowMany);
- }
-
- int16u Get2 (size_t HowMany)
- {
- return (int16u)Get(HowMany);
- }
-
- int32u Get4 (size_t HowMany)
- {
- return (int32u)Get(HowMany);
- }
-
- int64u Get8 (size_t HowMany)
- {
- if (HowMany>64)
- return 0; //Not supported
- size_t HowMany1, HowMany2;
- int64u Value1, Value2;
- if (HowMany>32)
- HowMany1=HowMany-32;
- else
- HowMany1=0;
- HowMany2=HowMany-HowMany1;
- Value1=Get(HowMany1);
- Value2=Get(HowMany2);
- if (BufferUnderRun)
- return 0;
- return Value1*0x100000000LL+Value2;
- }
-
- virtual void Skip (size_t HowMany)
- {
- if (HowMany==0)
- return;
- if (HowMany>32) //Algorithm is only for <=32 bits
- {
- do
- {
- Skip(32);
- HowMany-=32;
- }
- while(HowMany>32);
- if (HowMany)
- Skip(HowMany);
- return;
- }
- if ((size_t)HowMany>Buffer_Size+LastByte_Size)
- {
- Buffer_Size=0;
- LastByte_Size=0;
- BufferUnderRun=true;
- return;
- }
-
- Buffer_Size_BeforeLastCall=Buffer_Size+LastByte_Size;
-
- if (HowMany<=LastByte_Size)
- LastByte_Size-=HowMany;
- else
- {
- size_t NewBits=HowMany-LastByte_Size;
- switch ((NewBits-1)/8)
- {
- case 3 : NewBits-=8;
- Buffer++;
- Buffer_Size-=8;
- case 2 : NewBits-=8;
- Buffer++;
- Buffer_Size-=8;
- case 1 : NewBits-=8;
- Buffer++;
- Buffer_Size-=8;
- case 0 :
- LastByte=*Buffer;
- Buffer++;
- }
- LastByte_Size=MIN(8, Buffer_Size)-NewBits;
- Buffer_Size -=MIN(8, Buffer_Size);
- }
- };
-
- void SkipB ()
- {
- Skip(1);
- }
-
- void Skip1 (size_t HowMany)
- {
- Skip(HowMany);
- }
-
- void Skip2 (size_t HowMany)
- {
- Skip(HowMany);
- }
-
- void Skip4 (size_t HowMany)
- {
- Skip(HowMany);
- }
-
- void Skip8 (size_t HowMany)
- {
- if (HowMany>64)
- return; //Not supported
- size_t HowMany1, HowMany2;
- if (HowMany>32)
- HowMany1=HowMany-32;
- else
- HowMany1=0;
- HowMany2=HowMany-HowMany1;
- Skip(HowMany1);
- Skip(HowMany2);
- }
-
- int32u Peek(size_t HowMany)
- {
- BookMarkPos(true);
- int32u ToReturn=Get(HowMany);
- BookMarkPos(false);
- return ToReturn;
- }
-
- bool PeekB()
- {
- return Peek(1)?true:false;
- }
-
- int8u Peek1(size_t HowMany)
- {
- return (int8u )Peek(HowMany);
- }
-
- int16u Peek2(size_t HowMany)
- {
- return (int16u)Peek(HowMany);
- }
-
- int32u Peek4(size_t HowMany)
- {
- return (int32u)Peek(HowMany);
- }
-
- int32u Peek3(size_t HowMany)
- {
- return (int32u)Peek(HowMany);
- }
-
- int64u Peek8(size_t HowMany)
- {
- return (int64u)Peek(HowMany);
- }
-
- void BookMarkPos(bool ToSet)
- {
- if (ToSet)
- {
- BookMark=1;
- Buffer_BookMark=Buffer;
- Buffer_Size_BookMark=Buffer_Size;
- LastByte_BookMark=LastByte;
- LastByte_Size_BookMark=LastByte_Size;
- BufferUnderRun_BookMark=BufferUnderRun;
- }
- else
- {
- BookMark=0;
- Buffer=Buffer_BookMark;
- Buffer_Size=Buffer_Size_BookMark;
- LastByte=LastByte_BookMark;
- LastByte_Size=LastByte_Size_BookMark;
- BufferUnderRun=BufferUnderRun_BookMark;
- }
- };
-
- virtual int32u Remain () //How many bits remain?
- {
- return (int32u)(Buffer_Size+LastByte_Size);
- };
-
- virtual void Byte_Align()
- {
- Get(LastByte_Size);
- };
-
- virtual size_t Offset_Get()
- {
- if (BufferUnderRun)
- return 0;
- return (Buffer_Size_Init-Buffer_Size)/8;
- };
-
- virtual size_t BitOffset_Get()
- {
- if (BufferUnderRun)
- return 0;
- return LastByte_Size;
- };
-
- virtual size_t OffsetBeforeLastCall_Get()
- {
- if (BufferUnderRun)
- return 0;
- return (Buffer_Size_Init-Buffer_Size_BeforeLastCall)/8;
- };
-
-private :
- const int8u* Buffer;
- size_t Buffer_Size;
- size_t Buffer_Size_Init;
- size_t Buffer_Size_BeforeLastCall;
- size_t LastByte;
- size_t LastByte_Size;
- bool BufferUnderRun;
-
- bool BookMark;
- const int8u* Buffer_BookMark;
- size_t Buffer_Size_BookMark;
- size_t LastByte_BookMark;
- size_t LastByte_Size_BookMark;
- bool BufferUnderRun_BookMark;
-};
-
-} //namespace ZenLib
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/BitStream_Fast.h b/src/thirdparty/ZenLib/ZenLib/BitStream_Fast.h
deleted file mode 100644
index c0b8fac8a..000000000
--- a/src/thirdparty/ZenLib/ZenLib/BitStream_Fast.h
+++ /dev/null
@@ -1,420 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Read a stream bit per bit
-// Can read up to 32 bits at once
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenBitStream_FastH
-#define ZenBitStream_FastH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-#ifndef MIN
- #define MIN(a, b) (((a) < (b)) ? (a) : (b))
-#endif
-
-class BitStream_Fast
-{
-public:
- BitStream_Fast () {Buffer=NULL;
- Buffer_Size=Buffer_Size_Init=0;
- BufferUnderRun=false;}
- BitStream_Fast (const int8u* Buffer_, size_t Size_) {Buffer=Buffer_;
- Buffer_Size=Buffer_Size_Init=Size_*8; //Size is in bits
- BufferUnderRun=false;}
- ~BitStream_Fast () {}
-
- void Attach(const int8u* Buffer_, size_t Size_)
- {
- Buffer=Buffer_;
- Buffer_Size=Buffer_Size_Init=Size_*8; //Size is in bits
- BufferUnderRun=false;
- }
-
- bool GetB ()
- {
- if (Buffer_Size%8)
- {
- Buffer_Size--;
- return ((LastByte>>(Buffer_Size%8))&0x1)?true:false;
- }
-
- if (!Buffer_Size)
- {
- Buffer_Size=0;
- BufferUnderRun=true;
- return false;
- }
-
- LastByte=*Buffer;
- Buffer++;
- Buffer_Size--;
- return (LastByte&0x80)?true:false;
- }
-
- int8u Get1 (int8u HowMany)
- {
- int8u ToReturn;
- static const int8u Mask[9]=
- {
- 0x00,
- 0x01, 0x03, 0x07, 0x0f,
- 0x1f, 0x3f, 0x7f, 0xff,
- };
-
- if (HowMany<=(Buffer_Size%8))
- {
- Buffer_Size-=HowMany;
- return (LastByte>>(Buffer_Size%8))&Mask[HowMany];
- }
-
- if (HowMany>Buffer_Size)
- {
- Buffer_Size=0;
- BufferUnderRun=true;
- return 0;
- }
-
- int8u NewBits=HowMany-(Buffer_Size%8);
- if (NewBits==8)
- ToReturn=0;
- else
- ToReturn=LastByte<<NewBits;
- LastByte=*Buffer;
- Buffer++;
- Buffer_Size-=HowMany;
- ToReturn|=(LastByte>>(Buffer_Size%8))&Mask[NewBits];
- return ToReturn&Mask[HowMany];
- }
-
- int16u Get2 (int8u HowMany)
- {
- int16u ToReturn;
- static const int16u Mask[17]=
- {
- 0x0000,
- 0x0001, 0x0003, 0x0007, 0x000f,
- 0x001f, 0x003f, 0x007f, 0x00ff,
- 0x01ff, 0x03ff, 0x07ff, 0x0fff,
- 0x1fff, 0x3fff, 0x7fff, 0xffff,
- };
-
- if (HowMany<=(Buffer_Size%8))
- {
- Buffer_Size-=HowMany;
- return (LastByte>>(Buffer_Size%8))&Mask[HowMany];
- }
-
- if (HowMany>Buffer_Size)
- {
- Buffer_Size=0;
- BufferUnderRun=true;
- return 0;
- }
-
- int8u NewBits=HowMany-(Buffer_Size%8);
- if (NewBits==16)
- ToReturn=0;
- else
- ToReturn=LastByte<<NewBits;
- if ((NewBits-1)>>3)
- {
- NewBits-=8;
- ToReturn|=*Buffer<<NewBits;
- Buffer++;
- }
- LastByte=*Buffer;
- Buffer++;
- Buffer_Size-=HowMany;
- ToReturn|=(LastByte>>(Buffer_Size%8))&Mask[NewBits];
- return ToReturn&Mask[HowMany];
- }
-
- int32u Get4 (int8u HowMany)
- {
- int32u ToReturn;
- static const int32u Mask[33]=
- {
- 0x00000000,
- 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
- 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
- 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
- 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
- 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
- 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
- 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
- 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
- };
-
- if (HowMany<=(Buffer_Size%8))
- {
- Buffer_Size-=HowMany;
- return (LastByte>>(Buffer_Size%8))&Mask[HowMany];
- }
-
- if (HowMany>Buffer_Size)
- {
- Buffer_Size=0;
- BufferUnderRun=true;
- return 0;
- }
-
- int8u NewBits=HowMany-(Buffer_Size%8);
- if (NewBits==32)
- ToReturn=0;
- else
- ToReturn=LastByte<<NewBits;
- switch ((NewBits-1)>>3)
- {
- case 3 : NewBits-=8;
- ToReturn|=*Buffer<<NewBits;
- Buffer++;
- case 2 : NewBits-=8;
- ToReturn|=*Buffer<<NewBits;
- Buffer++;
- case 1 : NewBits-=8;
- ToReturn|=*Buffer<<NewBits;
- Buffer++;
- default: ;
- }
- LastByte=*Buffer;
- Buffer++;
- Buffer_Size-=HowMany;
- ToReturn|=(LastByte>>(Buffer_Size%8))&Mask[NewBits];
- return ToReturn&Mask[HowMany];
- }
-
- int64u Get8 (int8u HowMany)
- {
- if (HowMany>64)
- return 0; //Not supported
- int8u HowMany1, HowMany2;
- int64u Value1, Value2;
- if (HowMany>32)
- HowMany1=HowMany-32;
- else
- HowMany1=0;
- HowMany2=HowMany-HowMany1;
- Value1=Get4(HowMany1);
- Value2=Get4(HowMany2);
- if (BufferUnderRun)
- return 0;
- return Value1*0x100000000LL+Value2;
- }
-
- void Skip (size_t HowMany)
- {
- if (HowMany<=(Buffer_Size%8))
- {
- Buffer_Size-=HowMany;
- return;
- }
-
- if (HowMany>Buffer_Size)
- {
- Buffer_Size=0;
- BufferUnderRun=true;
- return;
- }
-
- Buffer+=(HowMany-(Buffer_Size%8)-1)>>3;
- LastByte=*Buffer;
- Buffer++;
- Buffer_Size-=HowMany;
- }
-
- bool PeekB()
- {
- if (Buffer_Size%8)
- return ((LastByte>>((Buffer_Size-1)%8))&0x1)?true:false;
-
- if (!Buffer_Size)
- {
- Buffer_Size=0;
- BufferUnderRun=true;
- return false;
- }
-
- return ((*Buffer)&0x80)?true:false;
- }
-
- int8u Peek1(int8u HowMany)
- {
- int8u ToReturn;
- static const int8u Mask[9]=
- {
- 0x00,
- 0x01, 0x03, 0x07, 0x0f,
- 0x1f, 0x3f, 0x7f, 0xff,
- };
-
- if (HowMany<=(Buffer_Size%8))
- return (LastByte>>((Buffer_Size-HowMany)%8))&Mask[HowMany];
-
- if (HowMany>Buffer_Size)
- {
- Buffer_Size=0;
- BufferUnderRun=true;
- return 0;
- }
-
- int8u NewBits=HowMany-(Buffer_Size%8);
- if (NewBits==8)
- ToReturn=0;
- else
- ToReturn=LastByte<<NewBits;
- ToReturn|=((*Buffer)>>((Buffer_Size-HowMany)%8))&Mask[NewBits];
-
- return ToReturn&Mask[HowMany];
- }
-
- int16u Peek2(int8u HowMany)
- {
- int16u ToReturn;
- static const int16u Mask[17]=
- {
- 0x0000,
- 0x0001, 0x0003, 0x0007, 0x000f,
- 0x001f, 0x003f, 0x007f, 0x00ff,
- 0x01ff, 0x03ff, 0x07ff, 0x0fff,
- 0x1fff, 0x3fff, 0x7fff, 0xffff,
- };
-
- if (HowMany<=(Buffer_Size%8))
- return (LastByte>>((Buffer_Size-HowMany)%8))&Mask[HowMany];
-
- if (HowMany>Buffer_Size)
- {
- Buffer_Size=0;
- BufferUnderRun=true;
- return 0;
- }
-
- const int8u* Buffer_Save=Buffer;
-
- int8u NewBits=HowMany-(Buffer_Size%8);
- if (NewBits==16)
- ToReturn=0;
- else
- ToReturn=LastByte<<NewBits;
- if ((NewBits-1)>>3)
- {
- NewBits-=8;
- ToReturn|=*Buffer<<NewBits;
- Buffer++;
- }
- ToReturn|=((*Buffer)>>((Buffer_Size-HowMany)%8))&Mask[NewBits];
-
- Buffer=Buffer_Save;
-
- return ToReturn&Mask[HowMany];
- }
-
- int32u Peek4(int8u HowMany)
- {
- int32u ToReturn;
- static const int32u Mask[33]=
- {
- 0x00000000,
- 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
- 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
- 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
- 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
- 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
- 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
- 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
- 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
- };
-
- if (HowMany<=(Buffer_Size%8))
- return (LastByte>>((Buffer_Size-HowMany)%8))&Mask[HowMany];
-
- if (HowMany>Buffer_Size)
- {
- Buffer_Size=0;
- BufferUnderRun=true;
- return 0;
- }
-
- const int8u* Buffer_Save=Buffer;
-
- int8u NewBits=HowMany-(Buffer_Size%8);
- if (NewBits==32)
- ToReturn=0;
- else
- ToReturn=LastByte<<NewBits;
- switch ((NewBits-1)>>3)
- {
- case 3 : NewBits-=8;
- ToReturn|=*Buffer<<NewBits;
- Buffer++;
- case 2 : NewBits-=8;
- ToReturn|=*Buffer<<NewBits;
- Buffer++;
- case 1 : NewBits-=8;
- ToReturn|=*Buffer<<NewBits;
- Buffer++;
- default: ;
- }
- ToReturn|=((*Buffer)>>((Buffer_Size-HowMany)%8))&Mask[NewBits];
-
- Buffer=Buffer_Save;
-
- return ToReturn&Mask[HowMany];
- }
-
- int64u Peek8(int8u HowMany)
- {
- return (int64u)Peek4(HowMany); //Not yet implemented
- }
-
- inline size_t Remain () const //How many bits remain?
- {
- return Buffer_Size;
- }
-
- inline void Byte_Align()
- {
- Skip (Buffer_Size%8);
- }
-
- inline size_t Offset_Get() const
- {
- return (Buffer_Size_Init-Buffer_Size)/8;
- }
-
- inline size_t BitOffset_Get() const
- {
- return Buffer_Size%8;
- }
-
- inline size_t OffsetBeforeLastCall_Get() const //No more valid
- {
- return Buffer_Size%8;
- }
-
-private :
- const int8u* Buffer;
- size_t Buffer_Size;
- size_t Buffer_Size_Init;
- int8u LastByte;
-public :
- bool BufferUnderRun;
-};
-
-} //namespace ZenLib
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/BitStream_LE.h b/src/thirdparty/ZenLib/ZenLib/BitStream_LE.h
deleted file mode 100644
index 362427fbb..000000000
--- a/src/thirdparty/ZenLib/ZenLib/BitStream_LE.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Read a stream bit per bit, Little Endian version (rarely used!!!)
-// Can read up to 32 bits at once
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenBitStream_LEH
-#define ZenBitStream_LEH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/BitStream.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-class BitStream_LE : public BitStream
-{
-public:
- BitStream_LE () :BitStream() {};
- BitStream_LE (const int8u* Buffer_, size_t Size_) :BitStream(Buffer_, Size_) {};
-
- void Attach(const int8u* Buffer_, size_t Size_)
- {
- endbyte=0;
- endbit=0;
- buffer=Buffer_;
- ptr=Buffer_;
- storage=(long)Size_;
- };
-
- int32u Get (size_t HowMany)
- {
- ptr_BeforeLastCall=ptr;
-
- long ret;
- static const int32u Mask[33]={
- 0x00000000,
- 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
- 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
- 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
- 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
- 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
- 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
- 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
- 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
- };
- unsigned long m=Mask[HowMany];
-
- HowMany+=endbit;
-
- if(endbyte+4>=storage){
- ret=-1L;
- if(endbyte*8+(long)HowMany>storage*8){
- Attach(NULL, 0);
- goto overflow;
- }
- }
-
- ret=ptr[0]>>endbit;
- if(HowMany>8){
- ret|=ptr[1]<<(8-endbit);
- if(HowMany>16){
- ret|=ptr[2]<<(16-endbit);
- if(HowMany>24){
- ret|=ptr[3]<<(24-endbit);
- if(HowMany>32 && endbit){
- ret|=ptr[4]<<(32-endbit);
- }
- }
- }
- }
- ret&=m;
-
- ptr+=HowMany/8;
- endbyte+=(long)HowMany/8;
- endbit=(long)HowMany&7;
-
- overflow:
-
- return(ret);
- };
-
- void Skip(size_t bits)
- {
- Get(bits);
- }
-
- int32u Remain () //How many bits remain?
- {
- return storage*8-(endbyte*8+endbit);
- };
-
- void Byte_Align()
- {
- };
-
- size_t Offset_Get()
- {
- return ptr-buffer;
- };
-
- size_t BitOffset_Get()
- {
- return endbit;
- };
-
- size_t OffsetBeforeLastCall_Get()
- {
- return ptr_BeforeLastCall-buffer;
- };
-
-private :
- long endbyte;
- int endbit;
-
- const unsigned char *buffer;
- const unsigned char *ptr;
- const unsigned char *ptr_BeforeLastCall;
- long storage;
-};
-
-} //namespace ZenLib
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Conf.cpp b/src/thirdparty/ZenLib/ZenLib/Conf.cpp
deleted file mode 100644
index 25c65e9f6..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Conf.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Platform differences
-//***************************************************************************
-
-//End of line
-#ifdef WINDOWS
- const Char* EOL=__T("\r\n");
- const Char PathSeparator=__T('\\');
-#endif
-#ifdef UNIX
- const Char* EOL=__T("\n");
- const Char PathSeparator=__T('/');
-#endif
-#if defined (MACOS) || defined (MACOSX)
- const Char* EOL=__T("\r");
- const Char PathSeparator=__T('/');
-#endif
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Conf.h b/src/thirdparty/ZenLib/ZenLib/Conf.h
deleted file mode 100644
index 3eee0543d..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Conf.h
+++ /dev/null
@@ -1,346 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef ZenConfH
-#define ZenConfH
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Platforms
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Win32
-#if defined(__NT__) || defined(_WIN32) || defined(WIN32)
- #ifndef WIN32
- #define WIN32
- #endif
- #ifndef _WIN32
- #define _WIN32
- #endif
- #ifndef __WIN32__
- #define __WIN32__ 1
- #endif
-#endif
-
-//---------------------------------------------------------------------------
-//Win64
-#if defined(_WIN64) || defined(WIN64)
- #ifndef WIN64
- #define WIN64
- #endif
- #ifndef _WIN64
- #define _WIN64
- #endif
- #ifndef __WIN64__
- #define __WIN64__ 1
- #endif
-#endif
-
-//---------------------------------------------------------------------------
-//Windows
-#if defined(WIN32) || defined(WIN64)
- #ifndef WINDOWS
- #define WINDOWS
- #endif
- #ifndef _WINDOWS
- #define _WINDOWS
- #endif
- #ifndef __WINDOWS__
- #define __WINDOWS__ 1
- #endif
-#endif
-
-//---------------------------------------------------------------------------
-//Unix (Linux, HP, Sun, BeOS...)
-#if defined(UNIX) || defined(_UNIX) || defined(__UNIX__) \
- || defined(__unix) || defined(__unix__) \
- || defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) \
- || defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) \
- || defined(__EMX__) || defined(__VMS) || defined(__BEOS__)
- #ifndef UNIX
- #define UNIX
- #endif
- #ifndef _UNIX
- #define _UNIX
- #endif
- #ifndef __UNIX__
- #define __UNIX__ 1
- #endif
-#endif
-
-//---------------------------------------------------------------------------
-//MacOS Classic
-#if defined(macintosh)
- #ifndef MACOS
- #define MACOS
- #endif
- #ifndef _MACOS
- #define _MACOS
- #endif
- #ifndef __MACOS__
- #define __MACOS__ 1
- #endif
-#endif
-
-//---------------------------------------------------------------------------
-//MacOS X
-#if defined(__APPLE__) && defined(__MACH__)
- #ifndef MACOSX
- #define MACOSX
- #endif
- #ifndef _MACOSX
- #define _MACOSX
- #endif
- #ifndef __MACOSX__
- #define __MACOSX__ 1
- #endif
-#endif
-
-//Test of targets
-#if defined(WINDOWS) && defined(UNIX) && defined(MACOS) && defined(MACOSX)
- #pragma message Multiple platforms???
-#endif
-
-#if !defined(WIN32) && !defined(UNIX) && !defined(MACOS) && !defined(MACOSX)
- #pragma message No known platforms, assume default
-#endif
-
-//***************************************************************************
-// Internationnal
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Unicode
-#if defined(_UNICODE) || defined(UNICODE) || defined(__UNICODE__)
- #ifndef _UNICODE
- #define _UNICODE
- #endif
- #ifndef UNICODE
- #define UNICODE
- #endif
- #ifndef __UNICODE__
- #define __UNICODE__ 1
- #endif
-#endif
-
-//---------------------------------------------------------------------------
-//wchar_t stuff
-#if defined(MACOS) || defined(MACOSX)
- #include <wchar.h>
-#endif
-
-//***************************************************************************
-// Compiler bugs/unuseful warning
-//***************************************************************************
-
-//MSVC6 : for(int t=0; t<10; ++t) { do something }; for(int t=0; t<10; ++t) { do something }
-#if defined(_MSC_VER) && _MSC_VER <= 1200
- #define for if(true)for
- #pragma warning(disable:4786) // MSVC6 doesn't like typenames longer than 255 chars (which generates an enormous amount of warnings).
-#endif
-
-//MSVC2005 : "deprecated" warning (replacement functions are not in MinGW32 or Borland!)
-#if defined(_MSC_VER) && _MSC_VER >= 1400
- #pragma warning(disable : 4996)
-#endif
-
-//***************************************************************************
-// (Without Namespace)
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-#include <limits.h>
-
-//---------------------------------------------------------------------------
-#if defined(ZENLIB_DEBUG) && (defined(DEBUG) || defined(_DEBUG))
- #include "ZenLib/MemoryDebug.h"
-#endif // defined(ZENLIB_DEBUG) && (defined(DEBUG) || defined(_DEBUG))
-
-//***************************************************************************
-// Compiler helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Macro to cut down on compiler warnings
-#ifndef UNUSED
- #define UNUSED(Identifier)
-#endif
-//---------------------------------------------------------------------------
-//If we need size_t specific integer conversion
-#if !defined(SIZE_T_IS_LONG) && (defined(__LP64__) || defined(MACOSX))
- #define SIZE_T_IS_LONG
-#endif
-
-//---------------------------------------------------------------------------
-//(-1) is known to be the MAX of an unsigned int but GCC complains about it
-#include <new>
-#include <cstring> //size_t
-namespace ZenLib
-{
- const std::size_t Error=((std::size_t)(-1));
- const std::size_t All=((std::size_t)(-1));
- const std::size_t Unlimited=((std::size_t)(-1));
-}
-
-//***************************************************************************
-// (With namespace)
-//***************************************************************************
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// International
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Char types
-#if defined(__UNICODE__)
- #if defined (_MSC_VER) && !defined (_NATIVE_WCHAR_T_DEFINED)
- #pragma message Native wchar_t is not defined, not tested, you should put /Zc:wchar_t in compiler options
- #endif
- typedef wchar_t Char;
- #undef __T
- #define __T(__x) L ## __x
-#else // defined(__UNICODE__)
- typedef char Char;
- #undef __T
- #define __T(__x) __x
-#endif // defined(__UNICODE__)
-#ifdef wchar_t
- typedef wchar_t wchar;
-#endif // wchar_t
-
-//***************************************************************************
-// Platform differences
-//***************************************************************************
-
-//End of line
-extern const Char* EOL;
-extern const Char PathSeparator;
-
-//***************************************************************************
-// Types
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//int
-typedef signed int ints;
-typedef unsigned int intu;
-
-//---------------------------------------------------------------------------
-//8-bit int
-#if UCHAR_MAX==0xff
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 8
- typedef signed char int8s;
- typedef unsigned char int8u;
-#else
- #pragma message This machine has no 8-bit integertype?
-#endif
-
-//---------------------------------------------------------------------------
-//16-bit int
-#if UINT_MAX == 0xffff
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 16
- typedef signed int int16s;
- typedef unsigned int int16u;
-#elif USHRT_MAX == 0xffff
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 16
- typedef signed short int16s;
- typedef unsigned short int16u;
-#else
- #pragma message This machine has no 16-bit integertype?
-#endif
-
-//---------------------------------------------------------------------------
-//32-bit int
-#if UINT_MAX == 0xfffffffful
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 32
- typedef signed int int32s;
- typedef unsigned int int32u;
-#elif ULONG_MAX == 0xfffffffful
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 32
- typedef signed long int32s;
- typedef unsigned long int32u;
-#elif USHRT_MAX == 0xfffffffful
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 32
- typedef signed short int32s;
- typedef unsigned short int32u;
-#else
- #pragma message This machine has no 32-bit integer type?
-#endif
-
-//---------------------------------------------------------------------------
-//64-bit int
-#if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__UNIX__) || defined(__MACOSX__)
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 64
- typedef signed long long int64s;
- typedef unsigned long long int64u;
-#elif defined(__WIN32__)
- #undef MAXTYPE_INT
- #define MAXTYPE_INT 64
- typedef signed __int64 int64s;
- typedef unsigned __int64 int64u;
-#else
- #pragma message This machine has no 64-bit integer type?
-#endif
-
-//---------------------------------------------------------------------------
-//32-bit float
-#if defined(WINDOWS) || defined(UNIX) || defined(MACOSX)
- #undef MAXTYPE_FLOAT
- #define MAXTYPE_FLOAT 32
- typedef float float32;
-#else
- #pragma message This machine has no 32-bit float type?
-#endif
-
-//---------------------------------------------------------------------------
-//64-bit float
-#if defined(WINDOWS) || defined(UNIX) || defined(MACOSX)
- #undef MAXTYPE_FLOAT
- #define MAXTYPE_FLOAT 64
- typedef double float64;
-#else
- #pragma message This machine has no 64-bit float type?
-#endif
-
-//---------------------------------------------------------------------------
-//80-bit float
-#if defined(WINDOWS) || defined(UNIX) || defined(MACOSX)
- #undef MAXTYPE_FLOAT
- #define MAXTYPE_FLOAT 80
- typedef long double float80;
-#else
- #pragma message This machine has no 80-bit float type?
-#endif
-
-//***************************************************************************
-// Nested functions
-//***************************************************************************
-
-//Unices
-#if defined (UNIX)
- #define snwprintf swprintf
-#endif
-
-//Windows - MSVC
-#if defined (_MSC_VER)
- #define snprintf _snprintf
- #define snwprintf _snwprintf
-#endif
-
-} //namespace
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Conf_Internal.h b/src/thirdparty/ZenLib/ZenLib/Conf_Internal.h
deleted file mode 100644
index a6574ff8d..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Conf_Internal.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef ZenConf_InternalH
-#define ZenConf_InternalH
-//---------------------------------------------------------------------------
-
-#include "ZenLib/Conf.h"
-
-//***************************************************************************
-// Choice of method
-//***************************************************************************
-
-#ifndef ZENLIB_USEWX
- #ifndef WINDOWS
- #define ZENLIB_STANDARD //We select the C/C++ standard as much as possible
- #endif
-#endif //ZENLIB_USEWX
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/CriticalSection.cpp b/src/thirdparty/ZenLib/ZenLib/CriticalSection.cpp
deleted file mode 100644
index 9574dce24..000000000
--- a/src/thirdparty/ZenLib/ZenLib/CriticalSection.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/CriticalSection.h"
-//---------------------------------------------------------------------------
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// ZENLIB_USEWX
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-#ifdef ZENLIB_USEWX
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include <wx/thread.h>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-CriticalSection::CriticalSection()
-{
- CritSect=new wxCriticalSection();
-}
-
-//---------------------------------------------------------------------------
-CriticalSection::~CriticalSection()
-{
- delete ((wxCriticalSection*)CritSect); //CritSect=NULL;
-}
-
-//***************************************************************************
-// Enter/Leave
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void CriticalSection::Enter()
-{
- ((wxCriticalSection*)CritSect)->Enter();
-}
-
-//---------------------------------------------------------------------------
-void CriticalSection::Leave()
-{
- ((wxCriticalSection*)CritSect)->Leave();
-}
-
-} //Namespace
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// WINDOWS
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-#else //ZENLIB_USEWX
-#ifdef WINDOWS
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#undef __TEXT
-#include <windows.h>
-//---------------------------------------------------------------------------
-
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-CriticalSection::CriticalSection()
-{
- CritSect=new CRITICAL_SECTION;
- InitializeCriticalSection((CRITICAL_SECTION*)CritSect);
-}
-
-//---------------------------------------------------------------------------
-CriticalSection::~CriticalSection()
-{
- DeleteCriticalSection((CRITICAL_SECTION*)CritSect);
- delete ((CRITICAL_SECTION*)CritSect); //CritSect=NULL;
-}
-
-//***************************************************************************
-// Enter/Leave
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void CriticalSection::Enter()
-{
- EnterCriticalSection((CRITICAL_SECTION*)CritSect);
-}
-
-//---------------------------------------------------------------------------
-void CriticalSection::Leave()
-{
- LeaveCriticalSection((CRITICAL_SECTION*)CritSect);
-}
-
-} //Namespace
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// UNIX
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-#else //WINDOWS
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include <pthread.h>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-CriticalSection::CriticalSection()
-{
- CritSect=new pthread_mutex_t;
- pthread_mutex_init((pthread_mutex_t*)CritSect, NULL);
-}
-
-//---------------------------------------------------------------------------
-CriticalSection::~CriticalSection()
-{
- pthread_mutex_destroy((pthread_mutex_t*)CritSect);
- delete (pthread_mutex_t*)CritSect;
-}
-
-//***************************************************************************
-// Enter/Leave
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void CriticalSection::Enter()
-{
- pthread_mutex_lock((pthread_mutex_t*)CritSect);
-}
-
-//---------------------------------------------------------------------------
-void CriticalSection::Leave()
-{
- pthread_mutex_unlock((pthread_mutex_t*)CritSect);
-}
-
-} //Namespace
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif //WINDOWS
-#endif //ZENLIB_USEWX
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/src/thirdparty/ZenLib/ZenLib/CriticalSection.h b/src/thirdparty/ZenLib/ZenLib/CriticalSection.h
deleted file mode 100644
index d9e044ca9..000000000
--- a/src/thirdparty/ZenLib/ZenLib/CriticalSection.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// CriticalSection functions
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_CriticalSectionH
-#define ZenLib_CriticalSectionH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef CS
- #undef CS //Solaris defines this somewhere
-#endif
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief CriticalSection manipulation
-//***************************************************************************
-
-class CriticalSection
-{
-public :
- //Constructor/Destructor
- CriticalSection ();
- ~CriticalSection ();
-
- //Enter/Leave
- void Enter();
- void Leave();
-
-private :
- void* CritSect;
-};
-
-//***************************************************************************
-/// @brief CriticalSectionLocker helper
-//***************************************************************************
-
-class CriticalSectionLocker
-{
-public:
- CriticalSectionLocker (ZenLib::CriticalSection &CS)
- {
- CritSec=&CS;
- CritSec->Enter();
- }
-
- ~CriticalSectionLocker ()
- {
- CritSec->Leave();
- }
-
-private:
- ZenLib::CriticalSection *CritSec;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Dir.cpp b/src/thirdparty/ZenLib/ZenLib/Dir.cpp
deleted file mode 100644
index 3eac23825..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Dir.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef ZENLIB_USEWX
- #include <wx/file.h>
- #include <wx/filename.h>
- #include <wx/utils.h>
- #include <wx/dir.h>
-#else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- #undef WINDOWS
- #endif
- #ifdef WINDOWS
- #undef __TEXT
- #include <windows.h>
- #else
- #include <sys/stat.h>
- #include <sys/types.h>
- #undef __TEXT //dirent include windows.h on Windows/Borland
- #include <dirent.h>
- #include <glob.h>
- #endif
-#endif //ZENLIB_USEWX
-#include "ZenLib/Dir.h"
-#include "ZenLib/File.h"
-#include "ZenLib/FileName.h"
-#include "ZenLib/OS_Utils.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-
-//***************************************************************************
-// Open/Close
-//***************************************************************************
-
-ZtringList Dir::GetAllFileNames(const Ztring &Dir_Name_, dirlist_t Options)
-{
- ZtringList ToReturn;
- Ztring Dir_Name=Dir_Name_;
-
- #ifdef ZENLIB_USEWX
- int Flags=wxDIR_FILES | wxDIR_DIRS;
-
- //Search for files
- wxArrayString Liste;
- wxFileName FullPath; FullPath=Dir_Name.c_str();
- //-File
- if (FullPath.FileExists())
- {
- FullPath.Normalize();
- Liste.Add(FullPath.GetFullPath());
- }
- //-Directory
- else if (FullPath.DirExists())
- {
- FullPath.Normalize();
- wxDir::GetAllFiles(FullPath.GetFullPath(), &Liste, Ztring(), Flags);
- }
- //-WildCards
- else
- {
- wxString FileName=FullPath.GetFullName();
- FullPath.SetFullName(Ztring()); //Supress filename
- FullPath.Normalize();
- if (FullPath.DirExists())
- wxDir::GetAllFiles(FullPath.GetPath(), &Liste, FileName, Flags);
- }
-
- //Compatible array
- ToReturn.reserve(Liste.GetCount());
- for (size_t Pos=0; Pos<Liste.GetCount(); Pos++)
- ToReturn.push_back(Liste[Pos].c_str());
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- //Is a dir?
- if (Exists(Dir_Name))
- Dir_Name+=__T("\\*");
-
- //Path
- Ztring Path=FileName::Path_Get(Dir_Name);
- if (Path.empty())
- {
- DWORD Path_Size=GetFullPathName(Dir_Name.c_str(), 0, NULL, NULL);
- Char* PathTemp=new Char[Path_Size+1];
- if (GetFullPathName(Dir_Name.c_str(), Path_Size+1, PathTemp, NULL))
- Path=FileName::Path_Get(PathTemp);
- delete [] PathTemp;
- }
-
- #ifdef UNICODE
- WIN32_FIND_DATAW FindFileDataW;
- HANDLE hFind=FindFirstFileW(Dir_Name.c_str(), &FindFileDataW);
- #else
- WIN32_FIND_DATA FindFileData;
- HANDLE hFind=FindFirstFile(Dir_Name.c_str(), &FindFileData);
- #endif //UNICODE
-
- if (hFind==INVALID_HANDLE_VALUE)
- return ZtringList();
-
- BOOL ReturnValue;
- do
- {
- #ifdef UNICODE
- Ztring File_Name(FindFileDataW.cFileName);
- #else
- Ztring File_Name(FindFileData.cFileName);
- #endif //UNICODE
- if (File_Name!=__T(".") && File_Name!=__T("..")) //Avoid . an ..
- {
- Ztring File_Name_Complete=Path+__T("\\")+File_Name;
- if (Exists(File_Name_Complete))
- {
- if (Options&Include_Dirs)
- ToReturn.push_back(File_Name_Complete); //A dir
- if (Options&Parse_SubDirs)
- ToReturn+=GetAllFileNames(File_Name_Complete, Options); //A SubDir
- }
- else if ((Options&Include_Files) && ((Options&Include_Hidden) || (!File_Name.empty() && File_Name[0]!=__T('.'))))
- ToReturn.push_back(File_Name_Complete); //A file
- }
- #ifdef UNICODE
- ReturnValue=FindNextFileW(hFind, &FindFileDataW);
- #else
- ReturnValue=FindNextFile(hFind, &FindFileData);
- #endif //UNICODE
- }
- while (ReturnValue);
-
- FindClose(hFind);
- #else //WINDOWS
- //A file?
- if (File::Exists(Dir_Name))
- {
- ToReturn.push_back(Dir_Name); //TODO
- return ToReturn;
- }
-
- //A dir?
- if (!Dir::Exists(Dir_Name))
- return ToReturn; //Does not exist
-
- //open
- #ifdef UNICODE
- DIR* Dir=opendir(Dir_Name.To_Local().c_str());
- #else
- DIR* Dir=opendir(Dir_Name.c_str());
- #endif //UNICODE
- if (Dir)
- {
- //This is a dir
- //Normalizing dir (the / at the end)
- size_t Dir_Pos=Dir_Name.rfind(FileName_PathSeparator);
- if (Dir_Pos==std::string::npos)
- Dir_Name+=FileName_PathSeparator;
- else if (Dir_Pos+Ztring(FileName_PathSeparator).size()!=Dir_Name.size())
- Dir_Name+=FileName_PathSeparator;
-
- struct dirent *DirEnt;
- while((DirEnt=readdir(Dir))!=NULL)
- {
- //A file
- Ztring File_Name(DirEnt->d_name);
- if (File_Name!=__T(".") && File_Name!=__T("..")) //Avoid . an ..
- {
- Ztring File_Name_Complete=Dir_Name+File_Name;
- if (Exists(File_Name_Complete))
- {
- if (Options&Parse_SubDirs)
- ToReturn+=GetAllFileNames(File_Name_Complete, Options); //A SubDir
- }
- else if ((Options&Include_Hidden) || (!File_Name.empty() && File_Name[0]!=__T('.')))
- ToReturn.push_back(File_Name_Complete); //A file
- }
- }
-
- //Close it
- closedir(Dir);
- }
- else
- {
- glob_t globbuf;
- if (glob(Dir_Name.To_Local().c_str(), GLOB_NOSORT, NULL, &globbuf)==0)
- {
- for (int Pos=0; Pos<globbuf.gl_pathc; Pos++)
- ToReturn.push_back(Ztring().From_Local(globbuf.gl_pathv[Pos]));
- }
- }
- #endif
- #endif //ZENLIB_USEWX
-
- return ToReturn;
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool Dir::Exists(const Ztring &File_Name)
-{
- #ifdef ZENLIB_USEWX
- wxFileName FN(File_Name.c_str());
- return FN.DirExists();
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- #ifdef UNICODE
- DWORD FileAttributes=GetFileAttributesW(File_Name.c_str());
- #else
- DWORD FileAttributes=GetFileAttributes(File_Name.c_str());
- #endif //UNICODE
- return ((FileAttributes!=INVALID_FILE_ATTRIBUTES) && (FileAttributes&FILE_ATTRIBUTE_DIRECTORY));
- #else //WINDOWS
- struct stat buffer;
- int status;
- #ifdef UNICODE
- status=stat(File_Name.To_Local().c_str(), &buffer);
- #else
- status=stat(File_Name.c_str(), &buffer);
- #endif //UNICODE
- return status==0 && S_ISDIR(buffer.st_mode);
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-bool Dir::Create(const Ztring &File_Name)
-{
- #ifdef ZENLIB_USEWX
- return wxFileName::Mkdir(File_Name.c_str());
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- #ifdef UNICODE
- return CreateDirectoryW(File_Name.c_str(), NULL)!=0;
- #else
- return CreateDirectory(File_Name.c_str(), NULL)!=0;
- #endif //UNICODE
- #else //WINDOWS
- return mkdir(File_Name.To_Local().c_str(), 0700)==0;
- #endif //WINDOWS
- #endif //ZENLIB_USEWX
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Dir.h b/src/thirdparty/ZenLib/ZenLib/Dir.h
deleted file mode 100644
index 76f3d89f4..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Dir.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Directories functions
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_DirH
-#define ZenLib_DirH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/ZtringList.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief Directory manipulation
-//***************************************************************************
-
-class Dir
-{
-public :
- //---------------------------------------------------------------------------
- /// @brief Options for Open method
- enum dirlist_t
- {
- Nothing = 0x00, ///<
- Include_Files = 0x01, ///< Include files
- Include_Dirs = 0x02, ///< Include directories
- Include_Hidden = 0x04, ///< Include hidden files
- Parse_SubDirs = 0x10 ///< Parse subdirectories
- };
-
- //Constructor/Destructor
-
- //Open/close
- static ZtringList GetAllFileNames(const Ztring &Dir_Name, dirlist_t Options=(dirlist_t)(Include_Files|Parse_SubDirs));
-
- //Helpers
- static bool Exists(const Ztring &Dir_Name);
- static bool Create(const Ztring &Dir_Name);
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/File.cpp b/src/thirdparty/ZenLib/ZenLib/File.cpp
deleted file mode 100644
index 7aadf2935..000000000
--- a/src/thirdparty/ZenLib/ZenLib/File.cpp
+++ /dev/null
@@ -1,886 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef ZENLIB_USEWX
- #include <wx/file.h>
- #include <wx/filename.h>
- #include <wx/utils.h>
-#else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- #ifdef WINDOWS
- #else
- #include <cstdio>
- #endif
- #include <sys/stat.h>
- #if !defined(WINDOWS)
- #include <unistd.h>
- #endif //!defined(WINDOWS)
- #include <fstream>
- using namespace std;
- #ifndef S_ISDIR
- #define S_ISDIR(mode) (((mode)&S_IFMT) == S_IFDIR)
- #endif
- #ifndef S_ISREG
- #define S_ISREG(mode) (((mode)&S_IFMT) == S_IFREG)
- #endif
- #elif defined WINDOWS
- #undef __TEXT
- #include <windows.h>
- #endif
-#endif //ZENLIB_USEWX
-#include "ZenLib/File.h"
-#include "ZenLib/OS_Utils.h"
-#include <map>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-File::File()
-{
- #ifdef ZENLIB_USEWX
- File_Handle=NULL;
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- File_Handle=NULL;
- #elif defined WINDOWS
- File_Handle=INVALID_HANDLE_VALUE;
- #endif
- #endif //ZENLIB_USEWX
- Position=(int64u)-1;
- Size=(int64u)-1;
-}
-
-File::File(Ztring File_Name, access_t Access)
-{
- #ifdef ZENLIB_USEWX
- File_Handle=NULL;
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- File_Handle=NULL;
- #elif defined WINDOWS
- File_Handle=INVALID_HANDLE_VALUE;
- #endif
- #endif //ZENLIB_USEWX
- Position=(int64u)-1;
- Size=(int64u)-1;
- Open(File_Name, Access);
-}
-
-//---------------------------------------------------------------------------
-File::~File()
-{
- Close();
-}
-
-//***************************************************************************
-// Open/Close
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File::Open (const tstring &File_Name_, access_t Access)
-{
- Close();
-
- File_Name=File_Name_;
-
- #ifdef ZENLIB_USEWX
- File_Handle=(void*)new wxFile();
- if (((wxFile*)File_Handle)->Open(File_Name.c_str(), (wxFile::OpenMode)Access)==0)
- {
- //Sometime the file is locked for few milliseconds, we try again later
- wxMilliSleep(1000);
- if (((wxFile*)File_Handle)->Open(File_Name.c_str(), (wxFile::OpenMode)Access)==0)
- //File is not openable
- return false;
- }
- return true;
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- /*
- int access;
- switch (Access)
- {
- case Access_Read : access=O_BINARY|O_RDONLY ; break;
- case Access_Write : access=O_BINARY|O_WRONLY|O_CREAT|O_TRUNC ; break;
- case Access_Read_Write : access=O_BINARY|O_RDWR |O_CREAT ; break;
- case Access_Write_Append : access=O_BINARY|O_WRONLY|O_CREAT|O_APPEND ; break;
- default : access=0 ; break;
- }
- #ifdef UNICODE
- File_Handle=open(File_Name.To_Local().c_str(), access);
- #else
- File_Handle=open(File_Name.c_str(), access);
- #endif //UNICODE
- return File_Handle!=-1;
- */
- ios_base::openmode mode;
- switch (Access)
- {
- case Access_Read : mode=ios_base::binary|ios_base::in; break;
- case Access_Write : mode=ios_base::binary|ios_base::in|ios_base::out; break;
- case Access_Read_Write : mode=ios_base::binary|ios_base::in|ios_base::out; break;
- case Access_Write_Append : if (!Exists(File_Name))
- mode=ios_base::binary|ios_base::out;
- else
- mode=ios_base::binary|ios_base::out|ios_base::app;
- break;
- default : ;
- }
- #ifdef UNICODE
- File_Handle=new fstream(File_Name.To_Local().c_str(), mode);
- #else
- File_Handle=new fstream(File_Name.c_str(), mode);
- #endif //UNICODE
- if (!((fstream*)File_Handle)->is_open())
- {
- delete (fstream*)File_Handle; File_Handle=NULL;
- return false;
- }
- return true;
- #elif defined WINDOWS
- DWORD dwDesiredAccess, dwShareMode, dwCreationDisposition;
- switch (Access)
- {
- case Access_Read : dwDesiredAccess=FILE_READ_DATA; dwShareMode=FILE_SHARE_READ|FILE_SHARE_WRITE; dwCreationDisposition=OPEN_EXISTING; break;
- case Access_Write : dwDesiredAccess=GENERIC_WRITE; dwShareMode=0; dwCreationDisposition=OPEN_ALWAYS; break;
- case Access_Read_Write : dwDesiredAccess=FILE_READ_DATA|GENERIC_WRITE; dwShareMode=0; dwCreationDisposition=OPEN_ALWAYS; break;
- case Access_Write_Append : dwDesiredAccess=GENERIC_WRITE; dwShareMode=0; dwCreationDisposition=OPEN_ALWAYS; break;
- default : dwDesiredAccess=0; dwShareMode=0; dwCreationDisposition=0; break;
- }
-
- #ifdef UNICODE
- File_Handle=CreateFileW(File_Name.c_str(), dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);
- #else
- File_Handle=CreateFile(File_Name.c_str(), dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);
- #endif //UNICODE
- if (File_Handle==INVALID_HANDLE_VALUE)
- {
- //Sometimes the file is locked for few milliseconds, we try again later
- DWORD dw = GetLastError();
- if (dw!=ERROR_FILE_NOT_FOUND)
- {
- /*
- char lpMsgBuf[1000];
- FormatMessageA(
- FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- dw,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- lpMsgBuf,
- 1000, NULL );
- */
- Sleep(1000);
- #ifdef UNICODE
- File_Handle=CreateFileW(File_Name.c_str(), dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);
- #else
- File_Handle=CreateFile(File_Name.c_str(), dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);
- #endif //UNICODE
- }
- }
- if (File_Handle==INVALID_HANDLE_VALUE)
- //File is not openable
- return false;
-
- //Append
- if (Access==Access_Write_Append)
- GoTo(0, FromEnd);
-
- return true;
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-bool File::Create (const Ztring &File_Name_, bool OverWrite)
-{
- Close();
-
- File_Name=File_Name_;
-
- #ifdef ZENLIB_USEWX
- File_Handle=(void*)new wxFile();
- if (((wxFile*)File_Handle)->Create(File_Name.c_str(), OverWrite)==0)
- {
- //Sometime the file is locked for few milliseconds, we try again later
- wxMilliSleep(3000);
- if (((wxFile*)File_Handle)->Create(File_Name.c_str(), OverWrite)==0)
- //File is not openable
- return false;
- }
- return true;
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- /*
- int access;
- switch (OverWrite)
- {
- case false : access=O_BINARY|O_CREAT|O_WRONLY|O_EXCL ; break;
- default : access=O_BINARY|O_CREAT|O_WRONLY|O_TRUNC; break;
- }
- #ifdef UNICODE
- File_Handle=open(File_Name.To_Local().c_str(), access);
- #else
- File_Handle=open(File_Name.c_str(), access);
- #endif //UNICODE
- return File_Handle!=-1;
- */
- /*ios_base::openmode mode;
-
- switch (OverWrite)
- {
- //case false : mode= ; break;
- default : mode=0 ; break;
- }*/
- ios_base::openmode access;
- switch (OverWrite)
- {
- case false : if (Exists(File_Name))
- return false;
- default : access=ios_base::binary|ios_base::in|ios_base::out|ios_base::trunc; break;
- }
- #ifdef UNICODE
- File_Handle=new fstream(File_Name.To_Local().c_str(), access);
- #else
- File_Handle=new fstream(File_Name.c_str(), access);
- #endif //UNICODE
- return ((fstream*)File_Handle)->is_open();
- #elif defined WINDOWS
- DWORD dwDesiredAccess, dwShareMode, dwCreationDisposition;
- switch (OverWrite)
- {
- case false : dwDesiredAccess=GENERIC_WRITE; dwShareMode=0; dwCreationDisposition=CREATE_NEW; break;
- default : dwDesiredAccess=GENERIC_WRITE; dwShareMode=0; dwCreationDisposition=CREATE_ALWAYS; break;
- }
-
- #ifdef UNICODE
- File_Handle=CreateFileW(File_Name.c_str(), dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);
- #else
- File_Handle=CreateFile(File_Name.c_str(), dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);
- #endif //UNICODE
- if (File_Handle==INVALID_HANDLE_VALUE)
- {
- //Sometime the file is locked for few milliseconds, we try again later
- Sleep(3000);
- #ifdef UNICODE
- File_Handle=CreateFileW(File_Name.c_str(), dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);
- #else
- File_Handle=CreateFile(File_Name.c_str(), dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);
- #endif //UNICODE
- }
- if (File_Handle==INVALID_HANDLE_VALUE)
- //File is not openable
- return false;
- return true;
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-void File::Close ()
-{
- #ifdef ZENLIB_USEWX
- delete (wxFile*)File_Handle; File_Handle=NULL;
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- //close(File_Handle); File_Handle=-1;
- delete (fstream*)File_Handle; File_Handle=NULL;
- #elif defined WINDOWS
- CloseHandle(File_Handle); File_Handle=INVALID_HANDLE_VALUE;
- #endif
- #endif //ZENLIB_USEWX
- Position=(int64u)-1;
- Size=(int64u)-1;
-}
-
-//***************************************************************************
-// Read/Write
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t File::Read (int8u* Buffer, size_t Buffer_Size_Max)
-{
- #ifdef ZENLIB_USEWX
- if (File_Handle==NULL)
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Handle==NULL)
- #elif defined WINDOWS
- if (File_Handle==INVALID_HANDLE_VALUE)
- #endif
- #endif //ZENLIB_USEWX
- return 0;
-
- #ifdef ZENLIB_USEWX
- size_t ByteRead=((wxFile*)File_Handle)->Read(Buffer, Buffer_Size_Max);
- Position+=ByteRead;
- return ByteRead;
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- //return read((int)File_Handle, Buffer, Buffer_Size_Max);
- if (Position==(int64u)-1)
- Position_Get();
- if (Size==(int64u)-1)
- Size_Get();
- if (Position!=(int64u)-1 && Position+Buffer_Size_Max>Size)
- Buffer_Size_Max=(size_t)(Size-Position); //We don't want to enable eofbit (impossible to seek after)
- ((fstream*)File_Handle)->read((char*)Buffer, Buffer_Size_Max);
- size_t ByteRead=((fstream*)File_Handle)->gcount();
- Position+=ByteRead;
- return ByteRead;
- #elif defined WINDOWS
- DWORD Buffer_Size;
- if (ReadFile(File_Handle, Buffer, (DWORD)Buffer_Size_Max, &Buffer_Size, NULL))
- {
- Position+=Buffer_Size;
- return Buffer_Size;
- }
- else
- return 0;
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-size_t File::Write (const int8u* Buffer, size_t Buffer_Size)
-{
- #ifdef ZENLIB_USEWX
- if (File_Handle==NULL)
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Handle==NULL)
- #elif defined WINDOWS
- if (File_Handle==INVALID_HANDLE_VALUE)
- #endif
- #endif //ZENLIB_USEWX
- return 0;
-
- #ifdef ZENLIB_USEWX
- return ((wxFile*)File_Handle)->Write(Buffer, Buffer_Size);
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- //return write(File_Handle, Buffer, Buffer_Size);
- ((fstream*)File_Handle)->write((char*)Buffer, Buffer_Size);
- if (((fstream*)File_Handle)->bad())
- {
- Position=(int64u)-1;
- return 0;
- }
- else
- {
- if (Position!=(int64u)-1)
- Position+=Buffer_Size;
- return Buffer_Size;
- }
- #elif defined WINDOWS
- DWORD Buffer_Size_Written;
- if (WriteFile(File_Handle, Buffer, (DWORD)Buffer_Size, &Buffer_Size_Written, NULL))
- {
- if (Position!=(int64u)-1)
- Position+=Buffer_Size_Written;
- return Buffer_Size_Written;
- }
- else
- {
- Position=(int64u)-1;
- return 0;
- }
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-bool File::Truncate (int64u Offset)
-{
- if (File_Handle==NULL)
- return false;
-
- #ifdef ZENLIB_USEWX
- return false; //Not supported
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- #if defined(WINDOWS)
- return false; //Not supported
- #else //defined(WINDOWS)
- //Need to close the file, use truncate, reopen it
- if (Offset==(int64u)-1)
- Offset=Position_Get();
- Ztring File_Name_Sav=File_Name;
- Close();
- truncate(File_Name_Sav.To_Local().c_str(), Offset);
- if (!Open(File_Name_Sav, Access_Read_Write))
- return false;
- GoTo(0, FromEnd);
- return true;
- #endif //!defined(WINDOWS)
- #elif defined WINDOWS
- if(Offset!=(int64u)-1 && Offset!=Position_Get())
- if (!GoTo(Offset))
- return false;
- SetEndOfFile(File_Handle);
- return true;
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-size_t File::Write (const Ztring &ToWrite)
-{
- std::string AnsiString=ToWrite.To_UTF8();
- return Write((const int8u*)AnsiString.c_str(), AnsiString.size());
-}
-
-//***************************************************************************
-// Moving
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool File::GoTo (int64s Position_ToMove, move_t MoveMethod)
-{
- #ifdef ZENLIB_USEWX
- if (File_Handle==NULL)
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Handle==NULL)
- #elif defined WINDOWS
- if (File_Handle==INVALID_HANDLE_VALUE)
- #endif
- #endif //ZENLIB_USEWX
- return false;
-
- Position=(int64u)-1; //Disabling memory
- #ifdef ZENLIB_USEWX
- return ((wxFile*)File_Handle)->Seek(Position, (wxSeekMode)MoveMethod)!=wxInvalidOffset; //move_t and wxSeekMode are same
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- /*
- int fromwhere;
- switch (MoveMethod)
- {
- case FromBegin : fromwhere=SEEK_SET; break;
- case FromCurrent : fromwhere=SEEK_CUR; break;
- case FromEnd : fromwhere=SEEK_END; break;
- default : fromwhere=SEEK_CUR; break;
- }
- return lseek(File_Handle, Position, fromwhere)!=-1;
- */
- ios_base::seekdir dir;
- switch (MoveMethod)
- {
- case FromBegin : dir=ios_base::beg; break;
- case FromCurrent : dir=ios_base::cur; break;
- case FromEnd : dir=ios_base::end; break;
- default : dir=ios_base::beg;
- }
- ((fstream*)File_Handle)->seekg((streamoff)Position_ToMove, dir);
- return !((fstream*)File_Handle)->fail();
- #elif defined WINDOWS
- LARGE_INTEGER GoTo;
- GoTo.QuadPart=Position_ToMove;
- return SetFilePointerEx(File_Handle, GoTo, NULL, MoveMethod)!=0;
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-int64u File::Position_Get ()
-{
- if (Position!=(int64u)-1)
- return Position;
-
- #ifdef ZENLIB_USEWX
- if (File_Handle==NULL)
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Handle==NULL)
- #elif defined WINDOWS
- if (File_Handle==INVALID_HANDLE_VALUE)
- #endif
- #endif //ZENLIB_USEWX
- return (int64u)-1;
-
- #ifdef ZENLIB_USEWX
- return (int64u)-1;
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- Position=((fstream*)File_Handle)->tellg();
- return Position;
- #elif defined WINDOWS
- LARGE_INTEGER GoTo; GoTo.QuadPart=0;
- GoTo.LowPart=SetFilePointer(File_Handle, GoTo.LowPart, &GoTo.HighPart, FILE_CURRENT);
- Position=GoTo.QuadPart;
- return Position;
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//***************************************************************************
-// Attributes
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-int64u File::Size_Get()
-{
- #ifdef ZENLIB_USEWX
- if (File_Handle==NULL)
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Handle==NULL)
- #elif defined WINDOWS
- if (File_Handle==INVALID_HANDLE_VALUE)
- #endif
- #endif //ZENLIB_USEWX
- return 0;
-
- #ifdef ZENLIB_USEWX
- return ((wxFile*)File_Handle)->Length();
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- /*
- int CurrentPos=lseek(File_Handle, 0, SEEK_CUR);
- int64u File_Size;
- File_Size=lseek(File_Handle, 0, SEEK_END);
- lseek(File_Handle, CurrentPos, SEEK_SET);
- */
- fstream::pos_type CurrentPos=((fstream*)File_Handle)->tellg();
- if (CurrentPos!=(fstream::pos_type)-1)
- {
- ((fstream*)File_Handle)->seekg(0, ios_base::end);
- Size=((fstream*)File_Handle)->tellg();
- ((fstream*)File_Handle)->seekg(CurrentPos);
- }
- else
- Size=(int64u)-1;
- #elif defined WINDOWS
- LARGE_INTEGER x = {0};
- BOOL bRet = ::GetFileSizeEx(File_Handle, &x);
- if (bRet == FALSE)
- return (int64u)-1;
- Size=x.QuadPart;
- #endif
- return Size;
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-Ztring File::Created_Get()
-{
- #ifdef ZENLIB_USEWX
- if (File_Handle==NULL)
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Handle==NULL)
- #elif defined WINDOWS
- if (File_Handle==INVALID_HANDLE_VALUE)
- #endif
- #endif //ZENLIB_USEWX
- return Ztring();
-
- #ifdef ZENLIB_USEWX
- return __T(""); //Not implemented
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- return __T(""); //Not implemented
- #elif defined WINDOWS
- FILETIME TimeFT;
- if (GetFileTime(File_Handle, &TimeFT, NULL, NULL))
- {
- int64u Time64=0x100000000ULL*TimeFT.dwHighDateTime+TimeFT.dwLowDateTime;
- Ztring Time; Time.Date_From_Milliseconds_1601(Time64/10000);
- return Time;
- }
- else
- return __T(""); //There was a problem
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-Ztring File::Created_Local_Get()
-{
- #ifdef ZENLIB_USEWX
- if (File_Handle==NULL)
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Handle==NULL)
- #elif defined WINDOWS
- if (File_Handle==INVALID_HANDLE_VALUE)
- #endif
- #endif //ZENLIB_USEWX
- return Ztring();
-
- #ifdef ZENLIB_USEWX
- return __T(""); //Not implemented
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- return __T(""); //Not implemented
- #elif defined WINDOWS
- FILETIME TimeFT;
- if (GetFileTime(File_Handle, &TimeFT, NULL, NULL))
- {
- int64u Time64=0x100000000ULL*TimeFT.dwHighDateTime+TimeFT.dwLowDateTime;
- TIME_ZONE_INFORMATION Info;
- DWORD Result=GetTimeZoneInformation(&Info);
- if (Result!=TIME_ZONE_ID_INVALID)
- {
- Time64-=((int64s)Info.Bias)*60*1000*1000*10;
- if (Result==TIME_ZONE_ID_DAYLIGHT)
- Time64-=((int64s)Info.DaylightBias)*60*1000*1000*10;
- else
- Time64-=((int64s)Info.StandardBias)*60*1000*1000*10;
- }
- Ztring Time; Time.Date_From_Milliseconds_1601(Time64/10000);
- Time.FindAndReplace(__T("UTC "), __T(""));
- return Time;
- }
- else
- return __T(""); //There was a problem
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-Ztring File::Modified_Get()
-{
- #ifdef ZENLIB_USEWX
- if (File_Handle==NULL)
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Handle==NULL)
- #elif defined WINDOWS
- if (File_Handle==INVALID_HANDLE_VALUE)
- #endif
- #endif //ZENLIB_USEWX
- return Ztring();
-
- #ifdef ZENLIB_USEWX
- return __T(""); //Not implemented
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- struct stat Stat;
- int Result=stat(File_Name.To_Local().c_str(), &Stat);
- if (Result<0)
- return __T(""); //Error
- Ztring Time; Time.Date_From_Seconds_1970((int64s)Stat.st_mtime);
- return Time;
- #elif defined WINDOWS
- FILETIME TimeFT;
- if (GetFileTime(File_Handle, NULL, NULL, &TimeFT))
- {
- int64u Time64=0x100000000ULL*TimeFT.dwHighDateTime+TimeFT.dwLowDateTime;
- Ztring Time; Time.Date_From_Milliseconds_1601(Time64/10000);
- return Time;
- }
- else
- return __T(""); //There was a problem
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-Ztring File::Modified_Local_Get()
-{
- #ifdef ZENLIB_USEWX
- if (File_Handle==NULL)
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Handle==NULL)
- #elif defined WINDOWS
- if (File_Handle==INVALID_HANDLE_VALUE)
- #endif
- #endif //ZENLIB_USEWX
- return Ztring();
-
- #ifdef ZENLIB_USEWX
- return __T(""); //Not implemented
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- struct stat Stat;
- int Result=stat(File_Name.To_Local().c_str(), &Stat);
- if (Result<0)
- return __T(""); //Error
- Ztring Time; Time.Date_From_Seconds_1970_Local(Stat.st_mtime);
- return Time;
- #elif defined WINDOWS
- FILETIME TimeFT;
- if (GetFileTime(File_Handle, NULL, NULL, &TimeFT))
- {
- int64u Time64=0x100000000ULL*TimeFT.dwHighDateTime+TimeFT.dwLowDateTime; //100-ns
- TIME_ZONE_INFORMATION Info;
- DWORD Result=GetTimeZoneInformation(&Info);
- if (Result!=TIME_ZONE_ID_INVALID)
- {
- Time64-=((int64s)Info.Bias)*60*1000*1000*10;
- if (Result==TIME_ZONE_ID_DAYLIGHT)
- Time64-=((int64s)Info.DaylightBias)*60*1000*1000*10;
- else
- Time64-=((int64s)Info.StandardBias)*60*1000*1000*10;
- }
- Ztring Time; Time.Date_From_Milliseconds_1601(Time64/10000);
- Time.FindAndReplace(__T("UTC "), __T(""));
- return Time;
- }
- else
- return __T(""); //There was a problem
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-bool File::Opened_Get()
-{
- #ifdef ZENLIB_USEWX
- return File_Handle!=NULL;
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- //return File_Handle!=-1;
- return File_Handle!=NULL && ((fstream*)File_Handle)->is_open();
- #elif defined WINDOWS
- return File_Handle!=INVALID_HANDLE_VALUE;
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-int64u File::Size_Get(const Ztring &File_Name)
-{
- File F(File_Name);
- return F.Size_Get();
-}
-
-//---------------------------------------------------------------------------
-Ztring File::Created_Get(const Ztring &File_Name)
-{
- File F(File_Name);
- return F.Created_Get();
-}
-
-//---------------------------------------------------------------------------
-Ztring File::Modified_Get(const Ztring &File_Name)
-{
- File F(File_Name);
- return F.Modified_Get();
-}
-
-//---------------------------------------------------------------------------
-bool File::Exists(const Ztring &File_Name)
-{
- #ifdef ZENLIB_USEWX
- wxFileName FN(File_Name.c_str());
- return FN.FileExists();
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- if (File_Name.find(__T('*'))!=std::string::npos || File_Name.find(__T('?'))!=std::string::npos)
- return false;
- struct stat buffer;
- int status;
- #ifdef UNICODE
- status=stat(File_Name.To_Local().c_str(), &buffer);
- #else
- status=stat(File_Name.c_str(), &buffer);
- #endif //UNICODE
- return status==0 && S_ISREG(buffer.st_mode);
- #elif defined WINDOWS
- if (File_Name.find(__T('*'))!=std::string::npos || (File_Name.find(__T("\\\\?\\"))!=0 && File_Name.find(__T('?'))!=std::string::npos) || (File_Name.find(__T("\\\\?\\"))==0 && File_Name.find(__T('?'), 4)!=std::string::npos))
- return false;
- #ifdef UNICODE
- DWORD FileAttributes=GetFileAttributesW(File_Name.c_str());
- #else
- DWORD FileAttributes=GetFileAttributes(File_Name.c_str());
- #endif //UNICODE
- return ((FileAttributes!=INVALID_FILE_ATTRIBUTES) && !(FileAttributes&FILE_ATTRIBUTE_DIRECTORY));
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-bool File::Copy(const Ztring &Source, const Ztring &Destination, bool OverWrite)
-{
- #ifdef ZENLIB_USEWX
- return wxCopyFile(Source.c_str(), Destination.c_str(), OverWrite);
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- return false;
- #elif defined WINDOWS
- #ifdef UNICODE
- return CopyFileW(Source.c_str(), Destination.c_str(), !OverWrite)!=0;
- #else
- return CopyFile(Source.c_str(), Destination.c_str(), !OverWrite)!=0;
- #endif //UNICODE
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-bool File::Move(const Ztring &Source, const Ztring &Destination, bool OverWrite)
-{
- if (OverWrite && Exists(Source))
- Delete(Destination);
- #ifdef ZENLIB_USEWX
- if (OverWrite && Exists(Destination))
- wxRemoveFile(Destination.c_str());
- return wxRenameFile(Source.c_str(), Destination.c_str());
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- return !std::rename(Source.To_Local().c_str(), Destination.To_Local().c_str());
- #elif defined WINDOWS
- #ifdef UNICODE
- return MoveFileW(Source.c_str(), Destination.c_str())!=0;
- #else
- return MoveFile(Source.c_str(), Destination.c_str())!=0;
- #endif //UNICODE
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-bool File::Delete(const Ztring &File_Name)
-{
- #ifdef ZENLIB_USEWX
- return wxRemoveFile(File_Name.c_str());
- #else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- #ifdef UNICODE
- return unlink(File_Name.To_Local().c_str())==0;
- #else
- return unlink(File_Name.c_str())==0;
- #endif //UNICODE
- #elif defined WINDOWS
- #ifdef UNICODE
- return DeleteFileW(File_Name.c_str())!=0;
- #else
- return DeleteFile(File_Name.c_str())!=0;
- #endif //UNICODE
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/File.h b/src/thirdparty/ZenLib/ZenLib/File.h
deleted file mode 100644
index 392e4af0e..000000000
--- a/src/thirdparty/ZenLib/ZenLib/File.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// File functions
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_FileH
-#define ZenLib_FileH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Ztring.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief File manipulation
-//***************************************************************************
-
-class File
-{
-public :
- //---------------------------------------------------------------------------
- /// @brief Options for Open method
- enum access_t
- {
- Access_Read = 0, ///< Read permission
- Access_Write = 1, ///< Write permission
- Access_Read_Write = 2, ///< Read and Write permissions
- Access_Write_Append = 3, ///< Write permission without deleting old file
- Access_Write_Excluding = 4 ///< Write permission preventing reading
- };
-
- //---------------------------------------------------------------------------
- /// @brief Options for Move method
- enum move_t
- {
- FromBegin = 0, ///< Begin of file
- FromCurrent = 1, ///< Current position
- FromEnd = 2 ///< End of file
- };
-
- //Constructor/Destructor
- File ();
- File (ZenLib::Ztring File_Name, access_t Access=Access_Read);
- ~File ();
-
- //Open/close
- bool Open (const tstring &File_Name, access_t Access=Access_Read);
- bool Create(const ZenLib::Ztring &File_Name, bool OverWrite=true);
- void Close ();
-
- //Read/Write
- size_t Read (int8u* Buffer, size_t Buffer_Size);
- size_t Write (const int8u* Buffer, size_t Buffer_Size);
- size_t Write (const Ztring &ToWrite);
- bool Truncate (int64u Offset=(int64u)-1);
-
- //Moving
- bool GoTo (int64s Position, move_t MoveMethod=FromBegin);
- int64u Position_Get ();
-
- //Attributes
- int64u Size_Get();
- Ztring Created_Get();
- Ztring Created_Local_Get();
- Ztring Modified_Get();
- Ztring Modified_Local_Get();
- bool Opened_Get();
-
- //Helpers
- static int64u Size_Get(const Ztring &File_Name);
- static Ztring Created_Get(const Ztring &File_Name);
- static Ztring Modified_Get(const Ztring &File_Name);
- static bool Exists(const Ztring &File_Name);
- static bool Copy(const Ztring &Source, const Ztring &Destination, bool OverWrite=false);
- static bool Move(const Ztring &Source, const Ztring &Destination, bool OverWrite=false);
- static bool Delete(const Ztring &File_Name);
-
- //Temp
- Ztring File_Name;
- int64u Position; //Position is saved, may be not good because position may change
- int64u Size; //Size is saved, may be not good because size may change
- void* File_Handle;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/FileName.cpp b/src/thirdparty/ZenLib/ZenLib/FileName.cpp
deleted file mode 100644
index d26784cac..000000000
--- a/src/thirdparty/ZenLib/ZenLib/FileName.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/FileName.h"
-#ifdef ZENLIB_USEWX
- #include <wx/filename.h>
-#else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- #undef WINDOWS
- #endif
- #ifdef WINDOWS
- #undef __TEXT
- #include <windows.h>
- #endif
-#endif //ZENLIB_USEWX
-//---------------------------------------------------------------------------
-#undef ZENLIB_USEWX
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Read/Write
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring FileName::Path_Get() const
-{
- #ifdef ZENLIB_USEWX
- wxFileName FN(c_str());
- return FN.GetPath().c_str();
- #else //ZENLIB_USEWX
- //Path limit
- size_t Pos_Path=rfind(FileName_PathSeparator);
- if (Pos_Path==Ztring::npos)
- return Ztring(); //Not found
- else
- return Ztring(*this, 0, Pos_Path);
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-Ztring& FileName::Path_Set(const Ztring &Path)
-{
- #ifdef ZENLIB_USEWX
- wxFileName FN(c_str());
- FN.SetPath(Path.c_str());
- assign (FN.GetFullPath().c_str());
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- //Path limit
- size_t Pos_Path=rfind(__T('\\'));
- if (Pos_Path==Ztring::npos)
- {
- insert(0, 1, __T('\\')); //Not found
- Pos_Path=0;
- }
- replace(0, Pos_Path, Path, 0, Ztring::npos);
- #else
- //Not supported
- #endif
- #endif //ZENLIB_USEWX
- return *this;
-}
-
-//---------------------------------------------------------------------------
-Ztring FileName::Name_Get() const
-{
- #ifdef ZENLIB_USEWX
- wxFileName FN(c_str());
- if (FN==FN.GetName()) //Bug of WxWidgets? if C:\\dir\\(no name), name is C:\\dir\\(no name)
- return Ztring();
- return FN.GetName().c_str();
- #else //ZENLIB_USEWX
- size_t Pos_Path=rfind(FileName_PathSeparator); //Path limit
- if (Pos_Path==Ztring::npos)
- Pos_Path=0; //Not found
- else
- Pos_Path+=Ztring(FileName_PathSeparator).size(); //Path separator size
- //Extension limit
- size_t Pos_Ext=rfind(__T('.'));
- if (Pos_Ext==Ztring::npos || Pos_Ext<Pos_Path)
- Pos_Ext=size(); //Not found
- return Ztring(*this, Pos_Path, Pos_Ext-Pos_Path);
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-Ztring& FileName::Name_Set(const Ztring &Name)
-{
- #ifdef ZENLIB_USEWX
- wxFileName FN(c_str());
- if (FN==FN.GetName()) //Bug of WxWidgets? if C:\\dir\\(no name), name is C:\\dir\\(no name)
- FN.SetPath(c_str());
- FN.SetName(Name.c_str());
- assign ((FN.GetFullPath()+FN.GetPathSeparator()/*FileName_PathSeparator*/+FN.GetFullName()).c_str());
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- //Path limit
- size_t Pos_Path=rfind(__T('\\'));
- if (Pos_Path==Ztring::npos)
- Pos_Path=0; //Not found
- //Extension limit
- size_t Pos_Ext=rfind(__T('.'));
- if (Pos_Ext==Ztring::npos || Pos_Ext<Pos_Path)
- Pos_Ext=size(); //Not found
- replace(Pos_Path+1, Pos_Ext-Pos_Path-1, Name, 0, Ztring::npos);
- #else
- //Not supported
- #endif
- #endif //ZENLIB_USEWX
- return *this;
-}
-
-//---------------------------------------------------------------------------
-Ztring FileName::Extension_Get() const
-{
- #ifdef ZENLIB_USEWX
- wxFileName FN(c_str());
- return FN.GetExt().c_str();
- #else //ZENLIB_USEWX
- //Path limit
- size_t Pos_Path=rfind(FileName_PathSeparator);
- if (Pos_Path==Ztring::npos)
- Pos_Path=0; //Not found
- //Extension limit
- size_t Pos_Ext=rfind(__T('.'));
- if (Pos_Ext==Ztring::npos || Pos_Ext<Pos_Path)
- return Ztring(); //Not found
- else
- return Ztring(*this, Pos_Ext+1, size()-Pos_Ext-1);
- #endif //ZENLIB_USEWX
-}
-
-//---------------------------------------------------------------------------
-Ztring& FileName::Extension_Set(const Ztring &Extension)
-{
- #ifdef ZENLIB_USEWX
- wxFileName FN(c_str());
- FN.SetExt(Extension.c_str());
- assign (FN.GetFullPath().c_str());
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- //Path limit
- size_t Pos_Path=rfind(__T('\\'));
- if (Pos_Path==Ztring::npos)
- Pos_Path=0; //Not found
- //Extension limit
- size_t Pos_Ext=rfind(__T('.'));
- if (Pos_Ext==Ztring::npos || Pos_Ext<Pos_Path)
- {
- append(1, __T('.')); //Not found
- Pos_Ext=size()-1;
- }
- replace(Pos_Ext+1, size()-Pos_Ext-1, Extension, 0, Ztring::npos);
- #else
- //Not supported
- #endif
- #endif //ZENLIB_USEWX
- return *this;
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring FileName::TempFileName_Create(const Ztring &Prefix)
-{
- #ifdef ZENLIB_USEWX
- return wxFileName::CreateTempFileName(Prefix.c_str()).c_str();
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- Char Path[MAX_PATH+1];
- if (!GetTempPath(MAX_PATH, Path))
- return Ztring(); //Problem while getting a temp path
-
- Char FileName[MAX_PATH+1];
- if (!GetTempFileName(Path, Prefix.c_str(), 0, FileName))
- return Ztring(); //Problem while getting a file name
-
- return Ztring(FileName);
- #else
- return __T("C:\\xxx.txt");
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//***************************************************************************
-// Platform differences
-//***************************************************************************
-
-//End of line
-#ifdef __WINDOWS__
- const Char* FileName_PathSeparator=__T("\\");
-#endif
-#if defined(UNIX) || defined(MACOS) || defined(MACOSX)
- const Char* FileName_PathSeparator=__T("/");
-#endif
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/FileName.h b/src/thirdparty/ZenLib/ZenLib/FileName.h
deleted file mode 100644
index 4a55626a4..000000000
--- a/src/thirdparty/ZenLib/ZenLib/FileName.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// File name related functions
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_FileNameH
-#define ZenLib_FileNameH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Ztring.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief File name manipulation
-//***************************************************************************
-
-class FileName : public ZenLib::Ztring
-{
-public :
- //Constructor/Destructor
- FileName () : Ztring(){};
- FileName (const tstring& str) : Ztring(str){};
- FileName (const tstring& str, size_type pos, size_type n=npos) : Ztring(str, pos, n){};
- FileName (const Char* s, size_type n) : Ztring(s, n){};
- FileName (const Char* s) : Ztring(s){};
- FileName (size_type n, char c) : Ztring(n, c){};
-
- //Read/Write
- ZenLib::Ztring Path_Get () const;
- ZenLib::Ztring Name_Get () const;
- ZenLib::Ztring Extension_Get () const;
- ZenLib::Ztring& Path_Set (const Ztring &Path);
- ZenLib::Ztring& Name_Set (const Ztring &Name);
- ZenLib::Ztring& Extension_Set (const Ztring &Extension);
-
- //Helpers
- static ZenLib::Ztring Path_Get (const Ztring &File_Name) {return ((FileName&)File_Name).Path_Get();};
- static ZenLib::Ztring Name_Get (const Ztring &File_Name) {return ((FileName&)File_Name).Name_Get();};
- static ZenLib::Ztring Extension_Get (const Ztring &File_Name) {return ((FileName&)File_Name).Extension_Get();};
- static ZenLib::Ztring TempFileName_Create (const Ztring &Prefix);
-};
-
-//Platform differences
-extern const Char* FileName_PathSeparator;
-
-} //NameSpace
-
-//---------------------------------------------------------------------------
-#ifdef __BORLANDC__
- #pragma warn .8027
-#endif
-//---------------------------------------------------------------------------
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Handler.cpp b/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Handler.cpp
deleted file mode 100644
index 4064f4be1..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Handler.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Format/Html/Html_Handler.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Html
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Handler::Handler()
-{
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-void Handler::CleanUp()
-{
-}
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Handler.h b/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Handler.h
deleted file mode 100644
index 0bdbb7ae2..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Handler.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// A HTML Handler
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_Server_Html_HandlerH
-#define ZenLib_Server_Html_HandlerH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <ctime>
-#include <map>
-#include <vector>
-#include "ZenLib/Ztring.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Html
-{
-
-//***************************************************************************
-/// @brief
-//***************************************************************************
-
-struct header
-{
- //In
- Ztring Title;
- Ztring Language;
-
- //Init
- header()
- {
- }
-};
-
-class Handler
-{
-public:
- //Constructor/Destructor
- Handler();
-
- //Maintenance
- void CleanUp();
-
- //The data
- header Header;
-};
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
-
-#define ENDL "\r\n"
-#define HTML_ENDL "<br />\r\n"
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Request.cpp b/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Request.cpp
deleted file mode 100644
index db4d1f24b..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Request.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Format/Html/Html_Request.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Html
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Request::Request()
-{
- //Config
- Html=new ZenLib::Format::Html::Handler;
- IsCopy=false;
-}
-
-//---------------------------------------------------------------------------
-Request::Request(const Request &Req)
-{
- //Config
- Html=Req.Html;
- IsCopy=true;
-}
-
-//---------------------------------------------------------------------------
-Request::~Request()
-{
- //Config
- if (!IsCopy)
- delete Html; //Html=NULL
-}
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Request.h b/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Request.h
deleted file mode 100644
index f94b94888..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Html/Html_Request.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// A HTML Request
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_Server_Html_RequestH
-#define ZenLib_Server_Html_RequestH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Format/Html/Html_Handler.h"
-#include <ctime>
-//---------------------------------------------------------------------------
-
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Html
-{
-
-//***************************************************************************
-/// @brief
-//***************************************************************************
-
-class Request
-{
-public:
- //Constructor/Destructor
- Request();
- Request(const Request &Req);
- ~Request();
-
- //The data
- ZenLib::Format::Html::Handler *Html;
- bool IsCopy;
-};
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Cookies.cpp b/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Cookies.cpp
deleted file mode 100644
index 1345aa0ab..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Cookies.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Format/Http/Http_Cookies.h"
-#include "ZenLib/Format/Http/Http_Utils.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Http
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Cookies::Cookies()
-{
-}
-
-//***************************************************************************
-// Helpers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-size_t Cookies::Set(const std::string &Name, const std::string &Value, std::time_t Expires, const std::string &Path, const std::string &Domain, bool Secure)
-{
- //Name must not be empty
- if (Name.empty())
- return 1;
-
- //Default values handling
- if (Value.empty())
- Expires=time(NULL)-365*24*60*60-1; //minus 1 year
-
- //Default value
- if (Expires==(time_t)-1)
- Expires=time(NULL)+1*365*24*60*60; //+1 year
-
- //Expires can be the count of seconds to handle instead of real time
- if (Expires>=0 && Expires<3*365*24*60*60) //Les than year 1973, this is not a date, this is a time
- Expires+=time(NULL);
-
- //Registering
- Cookie Data;
- Data.Value=Value.empty()?std::string("Deleted"):URL_Encoded_Encode(Value); //If no value, we force a default value for having the cookie understable
- Data.Expires=Expires;
- Data.Path=URL_Encoded_Encode(Path.empty()?string("/"):Path);
- Data.Domain=URL_Encoded_Encode(Domain);
- Data.Secure=Secure;
- (*this)[URL_Encoded_Encode(Name)]=Data;
-
- return 0;
-}
-
-//---------------------------------------------------------------------------
-void Cookies::Create_Lines(std::ostream& Out)
-{
- for (Cookies::iterator Cookie=begin(); Cookie!=end(); ++Cookie)
- {
- Out << "Set-Cookie: " << Cookie->first << "=" << Cookie->second.Value;
- if (Cookie->second.Expires!=(time_t)-1)
- {
- char Temp[200];
- if (strftime(Temp, 200, "%a, %d-%b-%Y %H:%M:%S GMT", gmtime(&Cookie->second.Expires)))
- Out << "; expires=" << Temp;
- }
- if (!Cookie->second.Path.empty())
- {
- Out << "; path=" << Cookie->second.Path;
- }
- Out << "\r\n";
- }
-}
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Cookies.h b/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Cookies.h
deleted file mode 100644
index 5c59ae282..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Cookies.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Cookies handling
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_Format_Http_CookiesH
-#define ZenLib_Format_Http_CookiesH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <string>
-#include <ctime>
-#include <map>
-#include <sstream>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Http
-{
-
-//***************************************************************************
-/// @brief
-//***************************************************************************
-
-struct Cookie
-{
- std::string Value;
- std::time_t Expires;
- std::string Path;
- std::string Domain;
- bool Secure;
-
- Cookie()
- {
- Expires=0;
- Secure=false;
- }
-};
-
-extern std::string EmptyString; //Must not change
-
-class Cookies : public std::map<std::string, Cookie>
-{
-public :
- //Constructor/Destructor
- Cookies();
-
- //Helpers
- size_t Set(const std::string &Name, const std::string &Value=EmptyString, std::time_t Expires=(std::time_t)-1, const std::string &Path=EmptyString, const std::string &Domain=EmptyString, bool Secure=false);
- Cookie &Get(const std::string &Name);
- void Create_Lines(std::ostream& Out);
-};
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Handler.cpp b/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Handler.cpp
deleted file mode 100644
index 8e7963aa4..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Handler.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Format/Http/Http_Handler.h"
-#include "ZenLib/Ztring.h"
-#include <sstream>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Http
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Handler::Handler()
-{
- //In
- Foreign_Port=0;
- Local_Port=0;
- HeadersOnly=false;
-
- //Out
- Response_HTTP_Code=200;
-}
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Handler.h b/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Handler.h
deleted file mode 100644
index 1ea484d27..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Handler.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// A HTTP Request
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_Format_Http_RequestH
-#define ZenLib_Format_Http_RequestH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Format/Http/Http_Cookies.h"
-#include <string>
-#include <ctime>
-#include <map>
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Http
-{
-
-//***************************************************************************
-/// @brief
-//***************************************************************************
-
-class Handler
-{
-public:
- //Constructor/Destructor
- Handler();
-
- //In
- std::string Path; //The path being requested by this request
- std::map<std::string, std::string> Request_Headers; //All the incoming HTTP headers from the client web browser.
- std::map<std::string, std::string> Request_Cookies; //The set of cookies that came from the client along with this request
- std::map<std::string, std::string> Request_Queries; //All the key/value pairs in the query string of this request
- std::string Foreign_IP; //The foreign ip address for this request
- std::string Local_IP; //The foreign port number for this request
- unsigned short Foreign_Port; //The IP of the local interface this request is coming in on
- unsigned short Local_Port; //The local port number this request is coming in on
- bool HeadersOnly; //The request requests only the header
-
- //Out
- size_t Response_HTTP_Code; //HTTP code to be sent
- std::map<std::string, std::string> Response_Headers; //Additional headers you wish to appear in the HTTP response to this request
- Cookies Response_Cookies; //New cookies to pass back to the client along with the result of this request
- std::string Response_Body; //To be displayed as the response to this request
-};
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Request.cpp b/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Request.cpp
deleted file mode 100644
index 4d7994fb2..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Request.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Format/Http/Http_Request.h"
-#include "ZenLib/Format/Http/Http_Utils.h"
-#include "ZenLib/Ztring.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Http
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Request::Request()
-{
- //Config
- Http=new ZenLib::Format::Http::Handler;
- IsCopy=false;
-}
-
-//---------------------------------------------------------------------------
-Request::Request(const Request &Req)
-{
- //Config
- Http=Req.Http;
- IsCopy=true;
-}
-
-//---------------------------------------------------------------------------
-Request::~Request()
-{
- //Config
- if (!IsCopy)
- delete Http; //Http=NULL
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool Request::Http_Begin(std::istream &In, std::ostream &Out)
-{
- //First line, "Method Path Norm"
- //-Method
- string Method;
- In>>Method;
- if (Method.size()==3 && Method[0]=='G' && Method[1]=='E' && Method[2]=='T')
- ;
- else if (Method.size()==4 && Method[0]=='P' && Method[1]=='O' && Method[2]=='S' && Method[3]=='T')
- ;
- else if (Method.size()==4 && Method[0]=='H' && Method[1]=='E' && Method[2]=='A' && Method[3]=='D')
- Http->HeadersOnly=true;
- else
- {
- Out << "HTTP/1.0 501\r\n";
- Out << "\r\n";
- return false; //Unknown request
- }
- //-Path
- In>>Http->Path;
- if (Http->Path.empty() || Http->Path[0]!='/')
- {
- Out << "HTTP/1.0 404\r\n";
- Out << "\r\n";
- return false; //Problem
- }
- if (Http->Path.size()>8096) //Browsers/Servers have a 2K-8K limit, we do same
- {
- Out << "HTTP/1.0 414\r\n";
- Out << "\r\n";
- return false; //Problem
- }
- if (Http->Path.find("%")!=string::npos)
- Http->Path=Format::Http::URL_Encoded_Decode(Http->Path);
- //-Norm
- string Line;
- getline(In, Line); //Drop the first line, no more needed
-
- //Headers
- do
- {
- //Getting the line
- getline(In, Line);
- if (!Line.empty() && Line[Line.size()-1]=='\r')
- Line.resize(Line.size()-1); //Remove the \r
-
- //Processing the line, form is "aaa: bbb"
- if (!Line.empty())
- {
- string::size_type Separator_Pos=Line.find(':');
- string::size_type Content_Begin=Line.find_first_not_of(' ', Separator_Pos+1);
- if (Separator_Pos!=string::npos && Content_Begin!=string::npos)
- {
- string Command=Line.substr(0, Separator_Pos);
- if (Command=="Cookie")
- {
- string Cookie=Line.substr(Separator_Pos+1, string::npos);
- while (!Cookie.empty())
- {
- string::size_type Cookie_Pos=Cookie.rfind(';');
- if (Cookie_Pos==string::npos)
- Cookie_Pos=(string::size_type)-1;
- string Line2=Cookie.substr(Cookie_Pos+1, string::npos);
- TrimLeft(Line2, ' ');
- if (Cookie_Pos!=(string::size_type)-1)
- {
- Cookie.resize(Cookie_Pos);
- TrimLeft(Line2, ' ');
- }
- else
- Cookie.clear();
-
- string::size_type Separator_Pos2=Line2.find('=');
- if (Separator_Pos2!=string::npos)
- Http->Request_Cookies[Line2.substr(0, Separator_Pos2)]=Format::Http::URL_Encoded_Decode(Line2.substr(Separator_Pos2+1, string::npos));
- }
- }
- else
- Http->Request_Headers[Command]=Line.substr(Content_Begin, string::npos);
- }
- }
- }
- while (!Line.empty());
-
- //Info
- if ((Method.size()==3 && Method[0]=='G' && Method[1]=='E' && Method[2]=='T')
- || (Method.size()==4 && Method[0]=='P' && Method[1]=='O' && Method[2]=='S' && Method[3]=='T'))
- {
- do
- {
- string Content;
-
- //Getting the line
- string::size_type Interogation_Pos=Http->Path.find('?');
- if (Interogation_Pos!=string::npos)
- {
- Content=Http->Path.substr(Interogation_Pos+1, string::npos);
- Http->Path.resize(Interogation_Pos);
- }
-
- if (Method.size()==4) //Only for POST
- {
- int64u Content_Lengh=0;
- std::map<std::string, std::string>::iterator Header_Content_Lengh_Element=Http->Request_Headers.find("Content-Length");
- if (Header_Content_Lengh_Element==Http->Request_Headers.end())
- Header_Content_Lengh_Element=Http->Request_Headers.find("Content-length");
- if (Header_Content_Lengh_Element!=Http->Request_Headers.end())
- #ifdef UNICODE
- Content_Lengh=Ztring().From_UTF8(Header_Content_Lengh_Element->second).To_int64u();
- #else
- Content_Lengh=Ztring(Header_Content_Lengh_Element->second).To_int64u();
- #endif
- if (Content_Lengh>1024) //Verifying there is no big element
- {
- Out << "HTTP/1.0 501\r\n";
- Out << "\r\n";
- return false; //Malformed request
- }
-
- size_t Content_Size_Current=Content.size();
- if (Content_Size_Current)
- {
- Content+='&';
- Content_Size_Current++;
- }
- Content.resize(Content_Size_Current+(size_t)Content_Lengh+1);
- In.read(&Content[Content_Size_Current], (streamsize)Content_Lengh);
- Content[Content_Size_Current+(size_t)Content_Lengh]='\0';
- }
-
- //Processing the line, form is "aaa=bbb&..."
- while (!Content.empty())
- {
- string::size_type Content_Pos=Content.rfind('&');
- if (Content_Pos==string::npos)
- Content_Pos=(string::size_type)-1;
- std::string Line2=Content.substr(Content_Pos+1, string::npos);
- if (Content_Pos!=(string::size_type)-1)
- Content.resize(Content_Pos);
- else
- Content.clear();
-
- string::size_type Separator_Pos=Line2.find('=');
- if (Separator_Pos!=string::npos)
- Http->Request_Queries[Line2.substr(0, Separator_Pos)]=Format::Http::URL_Encoded_Decode(Line2.substr(Separator_Pos+1, string::npos));
- }
- }
- while (!Line.empty());
- }
-
- return true;
-}
-
-void Request::Http_End(std::ostream &Out)
-{
- Out << "HTTP/1.0 "<< Http->Response_HTTP_Code << "\r\n";
- for (std::map<std::string, std::string>::iterator Temp=Http->Response_Headers.begin(); Temp!=Http->Response_Headers.end(); ++Temp)
- Out << Temp->first << ": " << Temp->second << "\r\n";
- Http->Response_Cookies.Create_Lines(Out);
- std::map<std::string, std::string>::iterator Content_Type_Element=Http->Response_Headers.find("Content-Type");
- if (Content_Type_Element!=Http->Response_Headers.end())
- Out << "Content-Type: "<< Content_Type_Element->second << "\r\n";
- else if (Http->Response_HTTP_Code==200)
- {
- if (!Http->Response_Body.empty() && Http->Response_Body[0]=='<')
- Out << "Content-Type: "<< "text/html; charset=utf-8" << "\r\n";
- }
- if (!Http->Response_Body.empty())
- Out << "Content-Length: " << Http->Response_Body.size() << "\r\n";
- Out << "\r\n";
- if (!Http->HeadersOnly && !Http->Response_Body.empty())
- Out << Http->Response_Body.c_str();
-}
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Request.h b/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Request.h
deleted file mode 100644
index 73d9933b7..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Request.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// A HTTP Request
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_Server_Http_RequestH
-#define ZenLib_Server_Http_RequestH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Format/Http/Http_Handler.h"
-#include <string>
-#include <ctime>
-#include <map>
-#include <vector>
-//---------------------------------------------------------------------------
-
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Http
-{
-
-//***************************************************************************
-/// @brief
-//***************************************************************************
-
-class Request
-{
-public:
- //Constructor/Destructor
- Request();
- Request(const Request &Req);
- ~Request();
-
- //The data
- ZenLib::Format::Http::Handler *Http;
- bool IsCopy;
-
- //Helpers
- bool Http_Begin(std::istream &In, std::ostream &Out);
- void Http_End (std::ostream &Out);
-};
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Utils.cpp b/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Utils.cpp
deleted file mode 100644
index 773dc1c63..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Utils.cpp
+++ /dev/null
@@ -1,241 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Format/Http/Http_Utils.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Http
-{
-
-//***************************************************************************
-// Global variables
-//***************************************************************************
-
-std::string EmptyString;
-
-//***************************************************************************
-// Character manipulation
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-unsigned char Char2Hex (unsigned char Char)
-{
- if (Char<='9' && Char>='0')
- Char-='0';
- else if (Char<='f' && Char>='a')
- Char-='a'-10;
- else if (Char<='F' && Char>='A')
- Char-='A'-10;
- else
- Char =0;
- return Char;
-}
-
-//---------------------------------------------------------------------------
-wchar_t Char2Hex (wchar_t Char)
-{
- if (Char<='9' && Char>='0')
- Char-='0';
- else if (Char<='f' && Char>='a')
- Char-='a'-10;
- else if (Char<='F' && Char>='A')
- Char-='A'-10;
- else
- Char =0;
- return Char;
-}
-
-//---------------------------------------------------------------------------
-string Hex2Char (unsigned char Char)
-{
- string Result;
- Result+=(char)((Char/16>=10?'a'-10:'0')+Char/16);
- Result+=(char)((Char%16>=10?'a'-10:'0')+Char%16);
- return Result;
-}
-
-//---------------------------------------------------------------------------
-#ifndef WSTRING_MISSING
-wstring Hex2Char (wchar_t Char)
-{
- wstring Result;
- Result+=(Char/16>=10?'a'-10:'0')+Char/16;
- Result+=(Char%16>=10?'a'-10:'0')+Char%16;
- return Result;
-}
-#endif //WSTRING_MISSING
-
-//***************************************************************************
-// URL manipulation
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-std::string URL_Encoded_Encode (const std::string& URL)
-{
- string Result;
- string::size_type Pos;
- for (Pos=0; Pos<URL.size(); Pos++)
- {
- if ((URL[Pos]>='\x00' && URL[Pos]<='\x20')
- || URL[Pos]=='\x7F'
- || URL[Pos]==' '
- || URL[Pos]=='<'
- || URL[Pos]=='>'
- || URL[Pos]=='#'
- || URL[Pos]=='%'
- || URL[Pos]=='\"'
- || URL[Pos]=='{'
- || URL[Pos]=='}'
- || URL[Pos]=='|'
- || URL[Pos]=='\\'
- || URL[Pos]=='^'
- || URL[Pos]=='['
- || URL[Pos]==']'
- || URL[Pos]=='`'
- /*|| URL[Pos]==';'
- || URL[Pos]=='/'
- || URL[Pos]=='?'
- || URL[Pos]==':'
- || URL[Pos]=='@'
- || URL[Pos]=='&'
- || URL[Pos]=='='
- || URL[Pos]=='+'
- || URL[Pos]=='$'
- || URL[Pos]==','*/)
- Result+='%'+Hex2Char((unsigned char)URL[Pos]);
- else
- Result+=URL[Pos];
- }
- return Result;
-}
-
-//---------------------------------------------------------------------------
-#ifndef WSTRING_MISSING
-std::wstring URL_Encoded_Encode (const std::wstring& URL)
-{
- wstring Result;
- wstring::size_type Pos;
- for (Pos=0; Pos<URL.size(); Pos++)
- {
- if (URL[Pos]<=L'\x20'
- || URL[Pos]==L'\x7F'
- || URL[Pos]==L' '
- || URL[Pos]==L'<'
- || URL[Pos]==L'>'
- || URL[Pos]==L'#'
- || URL[Pos]==L'%'
- || URL[Pos]==L'\"'
- || URL[Pos]==L'{'
- || URL[Pos]==L'}'
- || URL[Pos]==L'|'
- || URL[Pos]==L'\\'
- || URL[Pos]==L'^'
- || URL[Pos]==L'['
- || URL[Pos]==L']'
- || URL[Pos]==L'`'
- /*|| URL[Pos]==L';'
- || URL[Pos]==L'/'
- || URL[Pos]==L'?'
- || URL[Pos]==L':'
- || URL[Pos]==L'@'
- || URL[Pos]==L'&'
- || URL[Pos]==L'=L'
- || URL[Pos]==L'+'
- || URL[Pos]==L'$'
- || URL[Pos]==L','*/)
- Result+=L'%'+Hex2Char(URL[Pos]);
- else
- Result+=URL[Pos];
- }
- return Result;
-}
-#endif //WSTRING_MISSING
-
-//---------------------------------------------------------------------------
-std::string URL_Encoded_Decode (const std::string& URL)
-{
- string Result;
- string::size_type Pos;
- for (Pos=0; Pos<URL.size(); Pos++)
- {
- if (URL[Pos]=='%' && Pos+2<URL.size()) //At least 3 chars
- {
- const unsigned char Char1 = Char2Hex((unsigned char)URL[Pos+1]);
- const unsigned char Char2 = Char2Hex((unsigned char)URL[Pos+2]);
- const unsigned char Char = (Char1<<4) | Char2;
- Result+=Char;
- Pos+=2; //3 chars are used
- }
- else if (URL[Pos]=='+')
- Result+=' ';
- else
- Result+=URL[Pos];
- }
- return Result;
-}
-
-//---------------------------------------------------------------------------
-#ifndef WSTRING_MISSING
-std::wstring URL_Encoded_Decode (const std::wstring& URL)
-{
- wstring Result;
- wstring::size_type Pos;
- for (Pos=0; Pos<URL.size(); Pos++)
- {
- if (URL[Pos]==L'%' && Pos+2<URL.size()) //At least 3 chars
- {
- const wchar_t Char1 = Char2Hex(URL[Pos+1]);
- const wchar_t Char2 = Char2Hex(URL[Pos+2]);
- const wchar_t Char = (Char1<<4) | Char2;
- Result+=Char;
- Pos+=2; //3 chars are used
- }
- else if (URL[Pos]==L'+')
- Result+=L' ';
- else
- Result+=URL[Pos];
- }
- return Result;
-}
-#endif //WSTRING_MISSING
-
-//***************************************************************************
-// Cleanup
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void TrimLeft (std::string& String, char ToTrim)
-{
- string::size_type First=0;
- while (String.operator[](First)==ToTrim)
- First++;
- String.assign (String.c_str()+First);
-}
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Utils.h b/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Utils.h
deleted file mode 100644
index be0614eed..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Format/Http/Http_Utils.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// HTTP utils
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_Server_Http_UtilsH
-#define ZenLib_Server_Http_UtilsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <string>
-#include <ctime>
-#include <map>
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-namespace Format
-{
-
-namespace Http
-{
-
-//***************************************************************************
-//
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Character manipulation
-unsigned char Char2Hex (unsigned char Char);
-wchar_t Char2Hex (wchar_t Char);
-std::string Hex2Char (unsigned char Char);
-#ifndef WSTRING_MISSING
-std::wstring Hex2Char (wchar_t Char);
-#endif //WSTRING_MISSING
-
-//---------------------------------------------------------------------------
-// URL manipulation
-std::string URL_Encoded_Encode (const std::string& URL);
-#ifndef WSTRING_MISSING
-std::wstring URL_Encoded_Encode (const std::wstring& URL);
-#endif //WSTRING_MISSING
-std::string URL_Encoded_Decode (const std::string& URL);
-#ifndef WSTRING_MISSING
-std::wstring URL_Encoded_Decode (const std::wstring& URL);
-#endif //WSTRING_MISSING
-
-//---------------------------------------------------------------------------
-// Cleanup
-void TrimLeft (std::string& String, char ToTrim);
-
-} //Namespace
-
-} //Namespace
-
-} //Namespace
-
-#endif //ZENLIB_SERVER_HTTP_UTILS
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client.cpp b/src/thirdparty/ZenLib/ZenLib/HTTP_Client.cpp
deleted file mode 100644
index 2dabfe8a5..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/HTTP_Client.h"
-#ifdef WINDOWS
- #undef __TEXT
- #include <windows.h>
-#endif //WINDOWS
-#include "ZenLib/HTTP_Client/HTTPClient.h"
-using namespace ZenLib;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-HTTP_Client::HTTP_Client ()
-{
- #ifdef WINDOWS
- WSADATA WsaData;
- WSAStartup(MAKEWORD(1, 2), &WsaData);
- #endif
- Handle=0;
-}
-
-//---------------------------------------------------------------------------
-HTTP_Client::~HTTP_Client ()
-{
- #ifdef WINDOWS
- WSACleanup();
- #endif
-}
-
-//***************************************************************************
-// Open/Close
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-int HTTP_Client::Open (Ztring Url)
-{
- if (Handle)
- Close();
-
- //init
- Handle=HTTPClientOpenRequest(0);
-
- //Mehtod
- if (HTTPClientSetVerb(Handle, VerbGet)!=0)
- {
- Close();
- return 0;
- }
-
- //Send request
- if (HTTPClientSendRequest(Handle, (char*)(Url.To_Local().c_str()), NULL, 0, FALSE, 0, 0)!=0)
- {
- Close();
- return 0;
- }
-
- //Receive response
- if (HTTPClientRecvResponse(Handle, 3)!=0)
- {
- Close();
- return 0;
- }
-
- return 1;
-}
-
-//---------------------------------------------------------------------------
-void HTTP_Client::Close ()
-{
- HTTPClientCloseRequest(&Handle);
- Handle=0;
-}
-
-//***************************************************************************
-// Read
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Ztring HTTP_Client::Read ()
-{
- if (Handle==0)
- return Ztring();
-
- char* Buffer=new char[16384];
- int32u Size=0;
-
- int32u ReturnValue=HTTPClientReadData(Handle, Buffer, 16384, 0, &Size);
- if (ReturnValue!=0 && ReturnValue!=1000) //End of stream
- {
- Close();
- delete[] Buffer;
- return Ztring();
- }
-
- Ztring ToReturn; ToReturn.From_Local(Buffer, Size);
- delete[] Buffer;
- return ToReturn;
-}
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client.h b/src/thirdparty/ZenLib/ZenLib/HTTP_Client.h
deleted file mode 100644
index 7a5dc033b..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Basic HTTP client
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_HTTPClientH
-#define ZenLib_HTTPClientH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Ztring.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief Basic HTTP client
-//***************************************************************************
-
-class HTTP_Client
-{
-public :
- //Constructor/Destructor
- HTTP_Client ();
- ~HTTP_Client ();
-
- //Open/Close
- int Open (Ztring URL);
- void Close ();
-
- //Read
- Ztring Read();
-
-private :
- int32u Handle;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClient.c b/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClient.c
deleted file mode 100644
index f82bda6ba..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClient.c
+++ /dev/null
@@ -1,3646 +0,0 @@
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Module Name:
-// HTTPClient.c
-//
-// Abstract: Partially Implements the client side of the HTTP 1.1 Protocol as
-// Defined in RFC 2616,2617
-// Platform: Any that supports standard C calls and Berkeley sockets
-//
-// Author: Eitan Michaelson
-// Version: 1.0
-// Date 7/1/2006
-// Opens: HTTP Proxy authentication support (not fully tested).
-// HTTP Keep Alive not impliamented
-// HTTPS not implemented
-// The HTTP counters are not 100% correct (will be fixed)
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include "HTTPClient.h"
-#include "HTTPClientAuth.h" // Crypto support (Digest, MD5)
-#include "HTTPClientString.h" // String utilities
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientSetLocalConnection
-// Purpose : TBD
-// Gets :
-// Returns :
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientSetLocalConnection (HTTP_SESSION_HANDLE pSession, UINT32 nPort)
-{
-
- return 0;
-}
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientOpenRequest
-// Purpose : Allocate memory for a new HTTP Session
-// Gets : FLAGS
-// Returns : HTTP Session handle
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-HTTP_SESSION_HANDLE HTTPClientOpenRequest (HTTP_CLIENT_SESSION_FLAGS Flags)
-{
-
- P_HTTP_SESSION pHTTPSession = NULL; // Handle to the session pointer
- UINT32 nAllocationSize; // Size of the dynamically allocated buffer
-
- // Attempt to allocate the buffer
- pHTTPSession = (P_HTTP_SESSION)malloc(ALIGN(sizeof(HTTP_SESSION)));
-
- // Did we succeed?
- if(!pHTTPSession)
- {
- // Null pointer is returned upon error
- return 0;
- }
- // Reset the allocated space to zeros
- memset(pHTTPSession,0x00,sizeof(HTTP_SESSION));
-
- // Allocate space for the incoming and outgoing headers
- // Check if the headers buffer is resizable
- if(HTTP_CLIENT_MEMORY_RESIZABLE)
- {
- // Memory is resizable, so use the init defined size or the maximum buffer size (which ever is smaller)
- nAllocationSize = MIN(HTTP_CLIENT_MAX_SEND_RECV_HEADERS,HTTP_CLIENT_INIT_SEND_RECV_HEADERS);
-
- }
- else
- {
- // Memory is not resizable so simply use the maximum defined size
- nAllocationSize = HTTP_CLIENT_MAX_SEND_RECV_HEADERS;
- }
- // Allocate the headers buffer
- pHTTPSession->HttpHeaders.HeadersBuffer.pParam = (CHAR*)malloc(ALIGN(nAllocationSize));
- // Check the returned pointer
- if(!pHTTPSession->HttpHeaders.HeadersBuffer.pParam)
- {
- // malloc() error, free the containing structure and exit.
- free(pHTTPSession);
- return 0;
-
- }
-
- // Reset the headers allocated memory
- memset(pHTTPSession->HttpHeaders.HeadersBuffer.pParam ,0x00,nAllocationSize);
- // Set the buffer length
- pHTTPSession->HttpHeaders.HeadersBuffer.nLength = nAllocationSize;
-
- // Set default values in the session structure
- HTTPClientSetVerb((UINT32)pHTTPSession,(HTTP_VERB)HTTP_CLIENT_DEFAULT_VERB); // Default HTTP verb
- pHTTPSession->HttpUrl.nPort = HTTP_CLIENT_DEFAULT_PORT; // Default TCP port
- pHTTPSession->HttpConnection.HttpSocket = HTTP_INVALID_SOCKET; // Invalidate the socket
- // Set the outgoing headers pointers
- pHTTPSession->HttpHeaders.HeadersOut.pParam = pHTTPSession->HttpHeaders.HeadersBuffer.pParam;
- // Set our state
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_INIT;
-
- // Save the flags
- pHTTPSession->HttpFlags = Flags;
-
- // Reset the status
- pHTTPSession->HttpHeadersInfo.nHTTPStatus = 0;
- // Return an allocated session pointer (cast to UINT32 first)
- return (HTTP_SESSION_HANDLE)pHTTPSession;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientReset
-// Purpose : Reset the HTTP session and make it ready for another call
-// Gets : FLAGS
-// Returns : HTTP Session handle
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientReset (HTTP_SESSION_HANDLE pSession)
-{
-
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- return HTTPIntrnSessionReset(pHTTPSession,TRUE);
-
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Function : HTTPClientCloseRequest
-// Purpose : Closes any active connection and free any used memory
-// Gets : a Session handle
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientCloseRequest (HTTP_SESSION_HANDLE *pSession)
-{
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)*(pSession);
- if(!pHTTPSession)
- {
- // User passed a bad pointer
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- // Check for a valid pointer to the HTTP headers
- if(pHTTPSession->HttpHeaders.HeadersBuffer.pParam)
- {
- // Release the used memory
- free(pHTTPSession->HttpHeaders.HeadersBuffer.pParam);
- }
- // Close any active socket connection
- HTTPIntrnConnectionClose(pHTTPSession);
- // free the session structure
- free(pHTTPSession);
-
- pHTTPSession = 0; // NULL the pointer
- *(pSession) = 0;
-
- return HTTP_CLIENT_SUCCESS;
-}
-
-#ifdef _HTTP_DEBUGGING_
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientSetDebugHook
-// Purpose : Sets the HTTP debug function pointer
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientSetDebugHook (HTTP_SESSION_HANDLE pSession,
- E_HTTPDebug *pDebug) // [IN] Function pointer to the the caller debugging function)
-{
-
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- pHTTPSession->pDebug = pDebug;
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPClientSetDebugHook",NULL,0,"Debugging hook set, return code is %d",HTTP_CLIENT_SUCCESS);
- }
-#endif
-
-
- return HTTP_CLIENT_SUCCESS;
-}
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientSetVerb
-// Purpose : Sets the HTTP verb for the outgoing request
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientSetVerb (HTTP_SESSION_HANDLE pSession,
- HTTP_VERB HttpVerb) // [IN] Http verb (GET POST HEAD act')
-{
-
- P_HTTP_SESSION pHTTPSession = NULL;
-
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPClientSetVerb",NULL,0,"Selected Verb is %d",(INT32)HttpVerb);
- }
-#endif
-
- // Cache the verb (as integer) for later use
- pHTTPSession->HttpHeaders.HttpVerb = HttpVerb;
-
- // Convert the Verb parameter into its equivalent string representation
- switch (HttpVerb)
- {
- case VerbGet:
- strcpy(pHTTPSession->HttpHeaders.Verb,"GET");
- break;
- case VerbHead:
- if(!HTTP_CLIENT_ALLOW_HEAD_VERB)
- {
- return HTTP_CLIENT_ERROR_BAD_VERB;
- }
- strcpy(pHTTPSession->HttpHeaders.Verb,"HEAD");
- break;
- case VerbPost:
- strcpy(pHTTPSession->HttpHeaders.Verb,"POST");
- break;
- default:
- // Unknown verb
- return HTTP_CLIENT_ERROR_BAD_VERB;
- };
-
- return HTTP_CLIENT_SUCCESS;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientSetVerb
-// Purpose : Sets the HTTP authentication schema
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientSetAuth (HTTP_SESSION_HANDLE pSession,
- HTTP_AUTH_SCHEMA AuthSchema, // The type of the authentication to perform
- void *pReserved)
-{
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPClientSetAuth",NULL,0,"Selected authentication is %d",(INT32)AuthSchema);
- }
-#endif
-
- switch(AuthSchema)
- {
- case(AuthSchemaBasic):
- strcpy(pHTTPSession->HttpCredentials.AuthSchemaName,"basic");
- break;
- case(AuthSchemaDigest):
- strcpy(pHTTPSession->HttpCredentials.AuthSchemaName,"digest");
- break;
- case(AuthSchemaKerberos):
- strcpy(pHTTPSession->HttpCredentials.AuthSchemaName,"negotiate");
- break;
- };
-
- if(AuthSchema >= AuthNotSupported)
- {
- return HTTP_CLIENT_ERROR_BAD_AUTH;
- }
-
- pHTTPSession->HttpCredentials.CredAuthSchema = AuthSchema;
- return HTTP_CLIENT_SUCCESS;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientSetProxy
-// Purpose : Sets all the proxy related parameters
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientSetProxy (HTTP_SESSION_HANDLE pSession,
- CHAR *pProxyHost, // [IN] Null terminated string containing the host name
- UINT16 nPort, // [IN] The proxy port number
- CHAR *pUserName, // [IN] User name for proxy authentication (can be null)
- CHAR *pPassword) // [IN] User password for proxy authentication (can be null)
-{
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPClientSetProxy",NULL,0,"Proxy host %s,Port %d, Username %s,Password %s",pProxyHost,nPort,pUserName,pPassword);
- }
-#endif
-
-
- // Cache the user supplied information in the internal session structure
- strncpy(pHTTPSession->HttpProxy.ProxyHost,pProxyHost,HTTP_CLIENT_MAX_PROXY_HOST_LENGTH);
- if(pUserName)
- {
- // Proxy user name (for Proxy server authentication)
- strncpy(pHTTPSession->HttpProxy.ProxtUser,pUserName,HTTP_CLIENT_MAX_USERNAME_LENGTH);
- }
- if(pPassword)
- {
- // Proxy password (for proxy server authentication)
- strncpy(pHTTPSession->HttpProxy.ProxyPassword,pPassword,HTTP_CLIENT_MAX_PASSWORD_LENGTH);
- }
- // Proxy TCP port
- pHTTPSession->HttpProxy.nProxyPort = nPort;
- // Set the Proxy flag in the connection structure
- pHTTPSession->HttpFlags = pHTTPSession->HttpFlags | HTTP_CLIENT_FLAG_USINGPROXY;
- // Set the proxy auyjentication schema
- if(pPassword && pUserName)
- {
- pHTTPSession->HttpProxy.ProxyAuthSchema = HTTP_CLIENT_DEFAULT_PROXY_AUTH;
- }
- return HTTP_CLIENT_SUCCESS;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientSetCredentials
-// Purpose : Sets credentials for the target host
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientSetCredentials (HTTP_SESSION_HANDLE pSession,
- CHAR *pUserName, // [IN] Null terminated string containing the sessions user name
- CHAR *pPassword) // [IN] Null terminated string containing the sessions password
-{
- UINT32 nLength;
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- // Get the length of the user name string and see if it's not too long
- nLength = strlen(pUserName);
- if(nLength > HTTP_CLIENT_MAX_USERNAME_LENGTH)
- {
- return HTTP_CLIENT_ERROR_LONG_INPUT;
- }
-
- // Get the length of the password string and see if it's not too long
- nLength = strlen(pPassword);
- if(nLength > HTTP_CLIENT_MAX_PASSWORD_LENGTH)
- {
- return HTTP_CLIENT_ERROR_LONG_INPUT;
- }
-
- // Copy them into our internal buffer
- strcpy(pHTTPSession->HttpCredentials.CredUser ,pUserName);
- strcpy(pHTTPSession->HttpCredentials.CredPassword ,pPassword);
-
- // Set the authentication Boolean flag
- pHTTPSession->HttpHeadersInfo.HaveCredentials = TRUE;
-
- return HTTP_CLIENT_SUCCESS;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientAddRequestHeaders
-// Purpose : Add headers to the outgoing request
-// Gets :
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientAddRequestHeaders (HTTP_SESSION_HANDLE pSession,
- CHAR *pHeaderName, // [IN] The Headers name
- CHAR *pHeaderData, // [IN] The headers data
- BOOL nInsert) // [IN] Reserved could be any
-{
-
- UINT32 nRetCode;
- UINT32 nHeaderLength,nDataLength;
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPClientAddRequestHeaders",NULL,0,"Adding Header %s: %s",pHeaderName,pHeaderData);
- }
-#endif
-
- // Get the elements length
- nHeaderLength = strlen(pHeaderName);
- nDataLength = strlen(pHeaderData);
-
- // Call the internal function to add the headers to our session buffer
- nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,pHeaderName,nHeaderLength,pHeaderData,nDataLength);
-
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientSendRequest
-// Purpose : This function builds the request headers, performs a DNS resolution ,
-// opens the connection (if it was not opened yet by a previous request or if it has closed)
-// and sends the request headers.
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientSendRequest (HTTP_SESSION_HANDLE pSession,
- CHAR *pUrl, // [IN] The requested URL
- VOID *pData, // [IN] Data to post to the server
- UINT32 nDataLength, // [IN] Length of posted data
- BOOL TotalLength, // [IN]
- UINT32 nTimeout, // [IN] Operation timeout
- UINT32 nClientPort) // [IN] Client side port 0 for none
-{
-
- UINT32 nRetCode; // Function call return code
- UINT32 nBytes; // Bytes counter (socket operations)
- UINT32 nUrlLength; // Length of the given Url
- P_HTTP_SESSION pHTTPSession = NULL; // Session pointer
- CHAR ContentLength[32];
- //CHAR *pPtr; // Content length (string conversion) //Jerome/cppcheck: Variable 'pPtr' is assigned a value that is never used.
- do
- {
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPClientSendRequest",NULL,0,"Url: %s",pUrl);
- }
-#endif
-
- // Set the operation timeout counters
- pHTTPSession->HttpCounters.nActionStartTime = HTTPIntrnSessionGetUpTime();
- // 0 makes us use the default defined value
- pHTTPSession->HttpCounters.nActionTimeout = HTTP_TIMEOUT(nTimeout);
- // Store the cliebt port for later usage
- pHTTPSession->HttpConnection.HttpClientPort = nClientPort;
-
- // Parse the URL
- nUrlLength = strlen(pUrl);
- nRetCode = HTTPIntrnSetURL(pHTTPSession,pUrl,nUrlLength);
- if(nRetCode != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- // Create the default headers
- // Add the "Host" header. we should handle a special case of port incorporated within the host name.
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_URLANDPORT) != HTTP_CLIENT_FLAG_URLANDPORT)
- {
- // The case where we don't have the port
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,
- "Host",4,
- pHTTPSession->HttpUrl.UrlHost.pParam,
- pHTTPSession->HttpUrl.UrlHost.nLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
- else
- {
- // We have the port so use a deferent element
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,"Host",4,pHTTPSession->HttpUrl.UrlHost.pParam,
- (pHTTPSession->HttpUrl.UrlPort.pParam - pHTTPSession->HttpUrl.UrlHost.pParam) -1 )) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
- // We are in a post request without knowing the total length in advance so return error or use chunking
- if(pHTTPSession->HttpHeaders.HttpVerb == VerbPost && TotalLength == FALSE)
- {
- // If the user specified the chunked flag
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SEND_CHUNKED) == HTTP_CLIENT_FLAG_SEND_CHUNKED)
- {
- // Add the Transfer-Encoding: header
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,"Transfer-Encoding",17,"chunked",7))!= HTTP_CLIENT_SUCCESS)
- {
- break;;
- }
- }
- else
- {
- // Not a supported operation - unknown length
- nRetCode = HTTP_CLIENT_ERROR_HEADER_NO_LENGTH;
- break;
- }
- }
-
- // Add the "User-Agent" header
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,"User-Agent",10,HTTP_CLIENT_DEFAULT_AGENT,strlen(HTTP_CLIENT_DEFAULT_AGENT)))!= HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Add the "Keep-Alive" header (if requested by the caller)
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_KEEP_ALIVE) == HTTP_CLIENT_FLAG_KEEP_ALIVE)
- {
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_USINGPROXY) != HTTP_CLIENT_FLAG_USINGPROXY)
- {
- // No proxy keep alive:
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,"Connection",10,"Keep-Alive",10))!= HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
- else // proxy keep alive
- {
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,"Proxy-Connection",15,"Keep-Alive",10))!= HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
- }
-
- // If we know the total length in advance (only when posting)
- if(pHTTPSession->HttpHeaders.HttpVerb == VerbPost && TotalLength == TRUE)
- {
- // set the total content length header
- pHTTPSession->HttpHeadersInfo.nHTTPPostContentLength = nDataLength; // Store for later usage
- memset(ContentLength,0,32);
- //pPtr = IToA(ContentLength,nDataLength); // Convert the buffer length to a string value //Jerome/cppcheck: Variable 'pPtr' is assigned a value that is never used.
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,"Content-Length",14,ContentLength,strlen(ContentLength)))!= HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
-
- // Add the "Cache control" header (if requested by the caller)
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_NO_CACHE) == HTTP_CLIENT_FLAG_NO_CACHE)
- {
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,"Cache-Control",13,"no-cache",8))!= HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
-
-
- // Now we can connect to the remote server and send the leading request followed by the HTTP headers
- // Check for timeout
- if(HTTPIntrnSessionEvalTimeout(pHTTPSession) == TRUE)
- {
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_TIME_OUT;
- break;
- }
- // Handle connection close message (reconnect)
- if(pHTTPSession->HttpHeadersInfo.Connection == FALSE)
- {
- // Gracefully close the connection and set the socket as invalid
- if(pHTTPSession->HttpConnection.HttpSocket != HTTP_INVALID_SOCKET)
- {
- HTTPIntrnConnectionClose(pHTTPSession);
- }
- // Connect to the remote server (or proxy)
- nRetCode = HTTPIntrnConnectionOpen(pHTTPSession);
- if(nRetCode != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
-
- // Send the request along with the rest of the headers
- if(pHTTPSession->HttpCredentials.CredAuthSchema != AuthSchemaNone ||
- pHTTPSession->HttpProxy.ProxyAuthSchema != AuthSchemaNone) // If we have to authenticate we should use the HEAD verb
- {
- if(HTTP_CLIENT_ALLOW_HEAD_VERB) // HEAD should not be ussed if not defined
- {
- if((nRetCode = HTTPIntrnHeadersSend(pHTTPSession,VerbHead)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the state flag
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_HEAD_SENT;
- }
- else
- {
- // Simply use the verb that was set by the caller without changing to HEAD
- if((nRetCode = HTTPIntrnHeadersSend(pHTTPSession,pHTTPSession->HttpHeaders.HttpVerb)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // This the case where the caller know the total length to receive in advance
- // and he wishes to send the data right away
- if(pHTTPSession->HttpHeaders.HttpVerb == VerbPost && TotalLength == TRUE)
- {
-
- // Send the data
- nBytes = nDataLength;
- if((nRetCode = HTTPIntrnSend(pHTTPSession,pData,&nBytes)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the session state
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_POST_SENT;
- }
-
- }
-
- // Retrive and analyze the Headers
- if((nRetCode = HTTPIntrnHeadersReceive(pHTTPSession,nTimeout)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- if(pHTTPSession->HttpHeadersInfo.nHTTPStatus != 401 && pHTTPSession->HttpHeadersInfo.nHTTPStatus != 407)
- {
-
- nRetCode = HTTP_CLIENT_ERROR_AUTH_MISMATCH;
- break;
- }
- // Authenticate
- if((nRetCode = HTTPIntrnAuthenticate(pHTTPSession)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- }
- else
- {
- // No authentication use the verb that was requested by the caller
- if((nRetCode = HTTPIntrnHeadersSend(pHTTPSession,pHTTPSession->HttpHeaders.HttpVerb)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
- // This the case where the caller know the total length to receive in advance
- // and he wishes to send the data right away
- if(pHTTPSession->HttpHeaders.HttpVerb == VerbPost && TotalLength == TRUE)
- {
-
- // Send the data
- nBytes = nDataLength;
- if((nRetCode = HTTPIntrnSend(pHTTPSession,pData,&nBytes)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the session state
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_POST_SENT;
- }
-
- }while(0);
-
-
-
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientRecvResponse
-// Purpose : Receives the response header on the connection and parses it.
-// Performs any required authentication.
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientRecvResponse (HTTP_SESSION_HANDLE pSession,
- UINT32 nTimeout) // [IN] Timeout for the operation
-{
-
- UINT32 nRetCode; // Function return code
- P_HTTP_SESSION pHTTPSession = NULL; // Session pointer
-
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- do
- {
- if((nRetCode = HTTPIntrnHeadersReceive(pHTTPSession, nTimeout)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- } while(0);
-
- return nRetCode;
-
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientWriteData
-// Purpose : Write data to the remote server
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientWriteData (HTTP_SESSION_HANDLE pSession,
- VOID *pBuffer,
- UINT32 nBufferLength,
- UINT32 nTimeout)
-{
-
- UINT32 nRetCode = HTTP_CLIENT_SUCCESS;
- UINT32 nBytes;
- CHAR Chunk[HTTP_CLIENT_MAX_CHUNK_HEADER];
- //CHAR *pChunkHeaderPtr; //Jerome/cppcheck: Variable 'pChunkHeaderPtr' is assigned a value that is never used.
-
- P_HTTP_SESSION pHTTPSession = NULL;
-
-
- // Cast the handle to our internal structure and check the pointer validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- do
- {
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
- // Set the operation timeout counters
- pHTTPSession->HttpCounters.nActionStartTime = HTTPIntrnSessionGetUpTime();
- pHTTPSession->HttpCounters.nActionTimeout = HTTP_TIMEOUT(nTimeout);
-
- // Did the caller specified chunked sending?
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SEND_CHUNKED) == HTTP_CLIENT_FLAG_SEND_CHUNKED)
- {
- // Prep the chunk Header and send it
- memset(Chunk,0x00,HTTP_CLIENT_MAX_CHUNK_HEADER);
- HTTPStrLToH(Chunk,nBufferLength); //pChunkHeaderPtr = //Jerome/cppcheck: Variable 'pChunkHeaderPtr' is assigned a value that is never used.
- strcat(Chunk,HTTP_CLIENT_CRLF);
-
- // Send the leading CrLf (only after the first chunk)
- if(pHTTPSession->HttpCounters.nSentChunks >= 1)
- {
- nBytes = 2;;
- nRetCode = HTTPIntrnSend(pHTTPSession,HTTP_CLIENT_CRLF,&nBytes);
- if(nRetCode != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
-
- // Send the chunk header
- nBytes = strlen(Chunk);
- nRetCode = HTTPIntrnSend(pHTTPSession,Chunk,&nBytes);
- if(nRetCode != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
-
- // Send the data
- nBytes = nBufferLength;
- nRetCode = HTTPIntrnSend(pHTTPSession,pBuffer,&nBytes);
- if(nRetCode != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- // If we are using chunks then..
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SEND_CHUNKED) == HTTP_CLIENT_FLAG_SEND_CHUNKED)
- {
- // Set the chunks count
- pHTTPSession->HttpCounters.nSentChunks++;
-
- // If it was the last chunk (0) we should re-get the headers from the server reply
- if(nBufferLength == 0)
- {
- // Send the trailing CrLf
- nBytes = 2;;
- nRetCode = HTTPIntrnSend(pHTTPSession,HTTP_CLIENT_CRLF,&nBytes);
- if(nRetCode != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Get the remote headers (since the last chunk was transmitted we can expect the server to start the reply)
- if((nRetCode = HTTPIntrnHeadersReceive(pHTTPSession,nTimeout)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
- }
-
- } while(0);
-
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientReadData
-// Purpose : Read data from the server. Parse out the chunks data.
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
- UINT32 HTTPClientReadData (HTTP_SESSION_HANDLE pSession,
- VOID *pBuffer, // [IN OUT] a pointer to a buffer that will be filled with the servers response
- UINT32 nBytesToRead, // [IN] The size of the buffer (numbers of bytes to read)
- UINT32 nTimeout, // [IN] operation timeout in seconds
- UINT32 *nBytesRecived) // [OUT] Count of the bytes that ware received in this operation
- {
-
- UINT32 nBytes = 0;
- UINT32 nRetCode = 0 ;
- INT32 nProjectedBytes = 0; // Should support negative numbers
- CHAR *pNullPtr;
- BOOL EndOfStream = FALSE;
-
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- // If the last verb that was used was HEAD there is no point to get this data (chanses are that we will endup with timeout)
- if(pHTTPSession->HttpHeaders.HttpVerb == VerbHead)
- {
- return HTTP_CLIENT_EOS;
-
- }
-
- // Set the operation timeout counters
- pHTTPSession->HttpCounters.nActionStartTime = HTTPIntrnSessionGetUpTime();
- pHTTPSession->HttpCounters.nActionTimeout = HTTP_TIMEOUT(nTimeout);
-
-
- nBytes = nBytesToRead - 1; // We will spare 1 byte for the trailing null termination
- *((CHAR*)pBuffer) = 0; // Null terminate the user supplied buffer
- *(nBytesRecived) = 0; // Set the return bytes count to 0
-
- // We can read the data only if we got valid headers (and not authentication requests for example)
- if((pHTTPSession->HttpState & HTTP_CLIENT_STATE_HEADERS_PARSED) != HTTP_CLIENT_STATE_HEADERS_PARSED)
- {
- return HTTP_CLIENT_ERROR_BAD_STATE;
- }
-
- // Is it a chunked mode transfer?
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_CHUNKED) == HTTP_CLIENT_FLAG_CHUNKED)
- {
-
- // How many bytes left until the next chunk?
- if(pHTTPSession->HttpCounters.nBytesToNextChunk == 0)
- {
- // Read the chunk header and get its length
- if(HTTPIntrnGetRemoteChunkLength(pHTTPSession) != HTTP_CLIENT_SUCCESS)
- {
- // Could not parse the chunk parameter
- return HTTP_CLIENT_ERROR_CHUNK;
- }
-
- // 0 Bytes chunk, we should return end of stream
- if(pHTTPSession->HttpCounters.nRecivedChunkLength == 0)
- {
- return HTTP_CLIENT_EOS;
- }
- }
- // If we are about to read pass the next chunk, reduce the read bytes so we will read
- // non HTML data
- nProjectedBytes = pHTTPSession->HttpCounters.nBytesToNextChunk - nBytes;
- if ( nProjectedBytes <= 0)
- {
- // Set the correct bytes count we should read
- nBytes = pHTTPSession->HttpCounters.nBytesToNextChunk;
- }
- }
-
- // Do we have the content length?
- if(pHTTPSession->HttpHeadersInfo.nHTTPContentLength > 0)
- {
- // Length of the projected buffer
- nProjectedBytes = pHTTPSession->HttpCounters.nRecivedBodyLength + nBytes;
- // If we are going to read more then the known content length then..
- if(nProjectedBytes >= (INT32)pHTTPSession->HttpHeadersInfo.nHTTPContentLength)
- {
- // Reduce the received bytes count to the correct size
- nBytes = pHTTPSession->HttpHeadersInfo.nHTTPContentLength - pHTTPSession->HttpCounters.nRecivedBodyLength;
-
- }
- }
- // Receive the data from the socket
- nRetCode = HTTPIntrnRecv(pHTTPSession,(CHAR*)pBuffer,&nBytes,FALSE);
- // Set the return bytes count
- *(nBytesRecived) = nBytes; // + 1; Fixed 11/9/2005
-
- // Pointer to the end of the buffer
- pNullPtr = (CHAR*)pBuffer + nBytes ;
- // And null terminate
- *pNullPtr = 0;
-
- // Socket read went OK
- if(nRetCode == HTTP_CLIENT_SUCCESS)
- {
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPClientReadData",NULL,0,"Reading %d bytes",nBytes);
- }
-#endif
- // Set the HTTP counters
- pHTTPSession->HttpCounters.nRecivedBodyLength += nBytes;
- // If we know the total content length and..
- if(pHTTPSession->HttpHeadersInfo.nHTTPContentLength > 0)
- {
- // If total received body is equal or greater then the known content length then..
- if( pHTTPSession->HttpCounters.nRecivedBodyLength >= pHTTPSession->HttpHeadersInfo.nHTTPContentLength)
- {
- // Raise a flag to signal end of stream
- EndOfStream = TRUE;
- }
- }
- // Is it a chunked mode transfer?
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_CHUNKED) == HTTP_CLIENT_FLAG_CHUNKED)
- {
- // We are a little closer to the next chunk now
- pHTTPSession->HttpCounters.nBytesToNextChunk -= nBytes;
- }
- // Is it End of stream?
- if(EndOfStream == TRUE)
- {
- // So exit
- return HTTP_CLIENT_EOS;
- }
- }
-
- return nRetCode ;
-}
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientGetInfo
-// Purpose : Fill the users structure with the session information
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientGetInfo (HTTP_SESSION_HANDLE pSession, HTTP_CLIENT *HTTPClient)
-{
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
- // Reset the users info structure
- memset(HTTPClient,0x00,sizeof(HTTP_CLIENT));
-
- HTTPClient->HTTPStatusCode = pHTTPSession->HttpHeadersInfo.nHTTPStatus;
- HTTPClient->RequestBodyLengthSent = pHTTPSession->HttpCounters.nSentBodyBytes;
- HTTPClient->ResponseBodyLengthReceived = pHTTPSession->HttpCounters.nRecivedBodyLength;
- HTTPClient->TotalResponseBodyLength = pHTTPSession->HttpHeadersInfo.nHTTPContentLength;
- HTTPClient->HttpState = pHTTPSession->HttpState;
-
- return HTTP_CLIENT_SUCCESS;
-
-
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientFindFirstHeader
-// Purpose : Initiate the headr searching functions
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientFindFirstHeader (HTTP_SESSION_HANDLE pSession, CHAR *pSearchClue,CHAR *pHeaderBuffer, UINT32 *nLength)
-{
-
- P_HTTP_SESSION pHTTPSession = NULL;
- UINT32 nClueLength;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- nClueLength = strlen(pSearchClue); // See if we are not to long
- if(nClueLength >= HTTP_CLIENT_MAX_HEADER_SEARCH_CLUE)
- {
- return HTTP_CLIENT_ERROR_HEADER_BIG_CLUE;
- }
- else
- {
- strcpy(pHTTPSession->HttpHeaders.SearchClue,pSearchClue);
- pHTTPSession->HttpHeaders.HeaderSearch.nLength = 0;
- pHTTPSession->HttpHeaders.HeaderSearch.pParam = NULL;
- }
-
- return HTTP_CLIENT_SUCCESS;
-
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientFindCloseHeader
-// Purpose : Terminate a headers search session
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPClientFindCloseHeader (HTTP_SESSION_HANDLE pSession)
-{
-
- P_HTTP_SESSION pHTTPSession = NULL;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- pHTTPSession->HttpHeaders.SearchClue[0] = 0;
- pHTTPSession->HttpHeaders.HeaderSearch.nLength = 0;
- pHTTPSession->HttpHeaders.HeaderSearch.pParam = NULL;
-
- return HTTP_CLIENT_SUCCESS;
-
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPClientGetNextHeader
-// Purpose : Terminate a headers search session
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-UINT32 HTTPClientGetNextHeader (HTTP_SESSION_HANDLE pSession, CHAR *pHeaderBuffer, UINT32 *nLength)
-{
-
- P_HTTP_SESSION pHTTPSession = NULL;
- UINT32 nOffset = 0;
- UINT32 nRetCode;
- HTTP_PARAM HttpHeader;
- CHAR *pPtr;
-
- // Cast the handle to our internal structure and check the pointers validity
- pHTTPSession = (P_HTTP_SESSION)pSession;
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
- if(pHTTPSession->HttpHeaders.HeaderSearch.nLength > 0) // We must adjust the search offset since it is not the fierst iteration
- {
- nOffset = pHTTPSession->HttpHeaders.HeaderSearch.pParam - pHTTPSession->HttpHeaders.HeadersIn.pParam;
- }
- // Search for the next header
- nRetCode = HTTPIntrnHeadersFind(pHTTPSession,pHTTPSession->HttpHeaders.SearchClue,&HttpHeader,TRUE,nOffset);
-
- if(nRetCode == HTTP_CLIENT_SUCCESS)
- {
- if(HttpHeader.nLength > *(nLength)) // Check for sufficiant length
- {
- *(nLength) = HttpHeader.nLength;
- pHeaderBuffer[0] = 0; // Reset the users buffer
- return HTTP_CLIENT_ERROR_NO_MEMORY;
- }
-
- pPtr = HttpHeader.pParam;
- nOffset = 0;
- if(*pPtr == 0x0d)
- {
- nOffset++;
- pPtr++;
- }
- if(*pPtr == 0x0a)
- {
- nOffset++;
- pPtr++;
- }
-
- strncpy(pHeaderBuffer,pPtr,HttpHeader.nLength - nOffset);
- pHeaderBuffer[HttpHeader.nLength - nOffset] = 0;
- *(nLength) = HttpHeader.nLength - nOffset;
- pHTTPSession->HttpHeaders.HeaderSearch.pParam = HttpHeader.pParam + HttpHeader.nLength;
- pHTTPSession->HttpHeaders.HeaderSearch.nLength++;
-
- return HTTP_CLIENT_SUCCESS;
-
- }
-
- return nRetCode;
-
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnSetURL
-// Purpose : Parse the user's URL
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnSetURL (P_HTTP_SESSION pHTTPSession,
- CHAR *pUrl, // [IN] a null terminated string containing the Url we should retrieve
- UINT32 nUrlLength) // [IN] The length the Url string
-{
-
- UINT32 nUrlOffset; // Offset in bytes within the Url string
- HTTP_URL *pUrlPtr; // a Pointer to the Url structure (within the global session structure)
- CHAR *pPtr; // a Pointer for the Url port (Used in the parsing process)
- CHAR UrlPort[16]; // a temporary byte array for the Url port conversion operation (string to number)
-
- // Check for the session pointer validity
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
-
- // Get the length of the Url
- nUrlLength = strlen(pUrl);
-
- // Check if it is not longer than the permitted length
- if((nUrlLength + 1) > HTTP_CLIENT_MAX_URL_LENGTH)
- {
- return HTTP_CLIENT_ERROR_LONG_INPUT;
- }
-
- // Point the local pointer on the global structure
- pUrlPtr = &pHTTPSession->HttpUrl;
-
- // Copy to the internal buffer
- memcpy(pHTTPSession->HttpUrl.Url,pUrl,nUrlLength);
- nUrlOffset = 0;
-
- // Get the Url base ("http" or "https")
- if(HTTPStrSearch(pUrlPtr->Url,":",nUrlOffset,nUrlLength,&pUrlPtr->UrlBsee) == FALSE)
- {
- return HTTP_CLIENT_ERROR_BAD_URL;
- }
- // Increase the offset parameter
- nUrlOffset += pUrlPtr->UrlBsee.nLength;
- // If we can parse the string "HTTPS" we can assume a secured session
- if(HTTPStrInsensitiveCompare(pUrlPtr->UrlBsee.pParam,"https",pUrlPtr->UrlBsee.nLength) == TRUE)
- {
- // Set the secured flags on the session
- pHTTPSession->HttpFlags = pHTTPSession->HttpFlags | HTTP_CLIENT_FLAG_URLHTTPS;
- pHTTPSession->HttpFlags = pHTTPSession->HttpFlags | HTTP_CLIENT_FLAG_SECURE;
- // ToDo: Init TLS (GetProtocol)
-#ifdef _HTTP_BUILD_AMT
- // OS_GET_CLIENT_SUBSET_PROTOCOL(TRUE,&pHTTPSession->pSecProtocol);
-#endif
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnSetURL",NULL,0,"SSL Protected Url %s",pUrl);
- }
-#endif
- }
- else // it should be "http"
- {
- if(HTTPStrInsensitiveCompare(pUrlPtr->UrlBsee.pParam,"http",pUrlPtr->UrlBsee.nLength) == FALSE)
- {
- return HTTP_CLIENT_ERROR_BAD_URL; // cOULD NOT DETECT http or https prefix
-
- }
- }
- // Look for standard Url elements
- if(HTTPStrSearch(pUrlPtr->Url,"://",nUrlOffset,3,0) == FALSE)
- {
- return HTTP_CLIENT_ERROR_BAD_URL; // Could not detect "://"
- }
- // Increase the offset parameter
- nUrlOffset += 3;
-
- // Get the host name
- if(HTTPStrSearch(pUrlPtr->Url,"/",nUrlOffset,(nUrlLength - nUrlOffset),&pUrlPtr->UrlHost) == FALSE)
- {
- pUrlPtr->Url[nUrlLength] = '/';
- nUrlLength++;
- if(HTTPStrSearch(pUrlPtr->Url,"/",nUrlOffset,(nUrlLength - nUrlOffset),&pUrlPtr->UrlHost) == FALSE)
- {
- return HTTP_CLIENT_ERROR_BAD_URL;
- }
- }
-
- nUrlOffset += pUrlPtr->UrlHost.nLength;
-
- // Do we have the port within the hostname?
- if(HTTPStrSearch(pUrlPtr->Url,":",
- (nUrlOffset - pUrlPtr->UrlHost.nLength),
- pUrlPtr->UrlHost.nLength,
- &pUrlPtr->UrlPort) == TRUE)
- {
- if((pUrlPtr->UrlHost.nLength - pUrlPtr->UrlPort.nLength) < 10)
- {
- // To-Do: check the actual port length before the memcpy
- pUrlPtr->UrlPort.pParam += pUrlPtr->UrlPort.nLength + 1;
- memcpy(UrlPort,pUrlPtr->UrlPort.pParam,15);
- pUrlPtr->UrlPort.nLength = 0;
- pPtr = UrlPort;
- while(*pPtr && pPtr++)
- {
-
- pUrlPtr->UrlPort.nLength++;
- if(*pPtr == '/')
- {
- *pPtr = 0;
- pUrlPtr->nPort = (UINT16)atol(UrlPort);
- pHTTPSession->HttpFlags = pHTTPSession->HttpFlags | HTTP_CLIENT_FLAG_URLANDPORT;
- break;
- }
- }
- }
- else
- {
- // Port too big
- return HTTP_CLIENT_ERROR_BAD_URL;
- }
- }
-
- // Get the request body
- pUrlPtr->UrlRequest.pParam = pUrlPtr->Url + nUrlOffset;
- pUrlPtr->UrlRequest.nLength = nUrlLength - nUrlOffset;
-
- // If we got SSL url with no port we should set the default ssl port
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_URLHTTPS) == HTTP_CLIENT_FLAG_URLHTTPS)
- {
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_URLANDPORT) != HTTP_CLIENT_FLAG_URLANDPORT)
- {
- pHTTPSession->HttpUrl.nPort = HTTP_CLIENT_DEFAULT_SSL_PORT;
-
- }
-
- }
-
- // Set the state flag
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_URL_PARSED;
-
- return HTTP_CLIENT_SUCCESS;
-
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnResizeBuffer
-// Purpose : Resize the HTTP headers buffer and reset the pointers
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnResizeBuffer (P_HTTP_SESSION pHTTPSession,
- UINT32 nNewBufferSize) // [IN] The new (and larger) buffer size
-{
-
- CHAR *pPtr = NULL;
- UINT32 nCurrentBufferSize;
-
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
- // If the new buffer size is less or equal to the current buffer size then..
- if(pHTTPSession->HttpHeaders.HeadersBuffer.nLength >= nNewBufferSize)
- {
-
- // Return an error (bad buffer)
- return HTTP_CLIENT_ERROR_BUFFER_RSIZE;
- }
-
- // If the new buffer size is bigger then the defined maximum buffer size then..
- if(nNewBufferSize > HTTP_CLIENT_MAX_SEND_RECV_HEADERS)
- {
- // Return an error (bad buffer)
- return HTTP_CLIENT_ERROR_BUFFER_RSIZE;
- }
- // Current buffer size is the sum of the incoming and outgoing headers strings lengths
- nCurrentBufferSize = pHTTPSession->HttpHeaders.HeadersOut.nLength + pHTTPSession->HttpHeaders.HeadersIn.nLength;
- // Allocate a new buffer with the requested buffer size
- pPtr = (CHAR*)malloc(ALIGN(nNewBufferSize));
- if(!pPtr)
- {
- // malloc() error
- return HTTP_CLIENT_ERROR_NO_MEMORY;
- }
-
- // Copy the memory only if there is data to copy
- if(nCurrentBufferSize > 0)
- {
- memcpy(pPtr,pHTTPSession->HttpHeaders.HeadersBuffer.pParam,nCurrentBufferSize);
- // Reset the rest of the buffer
- memset(pPtr + nCurrentBufferSize, 0x00,(nNewBufferSize - nCurrentBufferSize));
- }
- else
- {
- // Reset the entire buffer (no previous buffer was copied)
- memset(pPtr,0x00,nNewBufferSize);
- }
-
- free(pHTTPSession->HttpHeaders.HeadersBuffer.pParam);
-
- pHTTPSession->HttpHeaders.HeadersBuffer.pParam = pPtr;
- pHTTPSession->HttpHeaders.HeadersBuffer.nLength = nNewBufferSize;
-
- // Refresh the pointers
- pHTTPSession->HttpHeaders.HeadersOut.pParam = pHTTPSession->HttpHeaders.HeadersBuffer.pParam;
- if(pHTTPSession->HttpHeaders.HeadersIn.pParam)
- {
- pHTTPSession->HttpHeaders.HeadersIn.pParam =pHTTPSession->HttpHeaders.HeadersBuffer.pParam + pHTTPSession->HttpHeaders.HeadersOut.nLength;
- }
- return HTTP_CLIENT_SUCCESS;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnRemoveHeader
-// Purpose : Removes an HTTP headers by its name
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnHeadersRemove (P_HTTP_SESSION pHTTPSession,
- CHAR *pHeaderName) // [IN] The header's name
-
-{
-
- HTTP_PARAM HttpParam;
- UINT32 nRetCode = HTTP_CLIENT_SUCCESS;
- UINT32 nBytes;
-
- if(!pHTTPSession) // Pointer validation check
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- // First see if we have that header in our outgoing headers buffer
- do
- {
-
- if((nRetCode = HTTPIntrnHeadersFind(pHTTPSession,pHeaderName,&HttpParam,FALSE,0)) != HTTP_CLIENT_SUCCESS)
- {
- // Could not find this header
- break;
- }
- // Calculate the new headers length
- nBytes = (HttpParam.pParam - pHTTPSession->HttpHeaders.HeadersOut.pParam);
- nBytes -= HttpParam.nLength;
-
-
- // Copy the memory
- memcpy(HttpParam.pParam, HttpParam.pParam + HttpParam.nLength,nBytes);
-
- // Set the new length
- pHTTPSession->HttpHeaders.HeadersOut.nLength -= HttpParam.nLength;
-
- // Reset the buffer from it's modified end to it's previous end
- memset(pHTTPSession->HttpHeaders.HeadersOut.pParam + pHTTPSession->HttpHeaders.HeadersOut.nLength,0x00,HttpParam.nLength);
-
- } while(0);
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnHeadersRemove",NULL,0,"Removing Header %",pHeaderName);
- }
-#endif
-
-
- return nRetCode;
-
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnHeadersAdd
-// Purpose : Add HTTP headers to the outgoing headers buffers
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnHeadersAdd (P_HTTP_SESSION pHTTPSession,
- CHAR *pHeaderName, // [IN] The header's name
- UINT32 nNameLength, // [IN] Name length
- CHAR *pHeaderData, // [IN] The Header's data
- UINT32 nDataLength) // [IN] Data length
-{
- CHAR *pPtr;
- UINT32 nProjectedHeaderLength;
- UINT32 nProjectedBufferLength;
- INT32 nCurrentfreeSpace;
- INT32 nProjectedfreeSpace;
- UINT32 nRetCode;
-
- if(!pHTTPSession) // pointer validation check
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- nProjectedHeaderLength = nNameLength + nDataLength + 4;
- nProjectedBufferLength = nProjectedHeaderLength + pHTTPSession->HttpHeaders.HeadersOut.nLength + pHTTPSession->HttpHeaders.HeadersIn.nLength;
- nCurrentfreeSpace = pHTTPSession->HttpHeaders.HeadersBuffer.nLength - (pHTTPSession->HttpHeaders.HeadersOut.nLength + pHTTPSession->HttpHeaders.HeadersIn.nLength);
- nProjectedfreeSpace = nCurrentfreeSpace - nProjectedHeaderLength;
-
- // Check total size limit
- if(nProjectedBufferLength > HTTP_CLIENT_MAX_SEND_RECV_HEADERS)
- {
- return HTTP_CLIENT_ERROR_NO_MEMORY;
- }
-
- if((INT32)nProjectedfreeSpace < 0)
- {
- if(HTTP_CLIENT_MEMORY_RESIZABLE == FALSE)
- {
- // Need more space but we can't grow beyond the current size
- return HTTP_CLIENT_ERROR_NO_MEMORY;
- }
- else
- {
- // We can resizes so..
- nRetCode = HTTPIntrnResizeBuffer(pHTTPSession,nProjectedBufferLength + HTTP_CLIENT_MEMORY_RESIZE_FACTOR);
- if(nRetCode != HTTP_CLIENT_SUCCESS)
- {
- return nRetCode;
- }
- }
- }
-
- // Move the incoming headers data within the buffer so we will have space for the added headers
- if(pHTTPSession->HttpHeaders.HeadersIn.pParam)
- {
- // Move the data and reset the data in the offset.
- memcpy(pHTTPSession->HttpHeaders.HeadersIn.pParam + nProjectedHeaderLength ,
- pHTTPSession->HttpHeaders.HeadersIn.pParam,
- pHTTPSession->HttpHeaders.HeadersIn.nLength);
- // Reset the space created
- memset(pHTTPSession->HttpHeaders.HeadersOut.pParam + pHTTPSession->HttpHeaders.HeadersOut.nLength,
- 0x00,
- nProjectedHeaderLength);
-
- }
-
- pPtr = pHTTPSession->HttpHeaders.HeadersOut.pParam + pHTTPSession->HttpHeaders.HeadersOut.nLength;
- // Create the new header
- memcpy(pPtr,pHeaderName,nNameLength);
- pPtr += nNameLength;
- memcpy(pPtr,": ",2);
- pPtr += 2;
- memcpy(pPtr,pHeaderData,nDataLength);
- pPtr += nDataLength;
- memcpy(pPtr,HTTP_CLIENT_CRLF,2);
- //pPtr += 2; //Jerome/cppcheck: Variable 'pPtr' is assigned a value that is never used.
-
- // Set the new length
- pHTTPSession->HttpHeaders.HeadersOut.nLength += nProjectedHeaderLength;
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnHeadersAdd",NULL,0,"Adding Header %s: %s",pHeaderName,pHeaderData);
- }
-#endif
-
- return HTTP_CLIENT_SUCCESS;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnConnectionClose
-// Purpose : Closes an active socket connection and invalidate the socket handle
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPIntrnConnectionClose (P_HTTP_SESSION pHTTPSession)
-{
-
- INT32 nRetCode = HTTP_CLIENT_SUCCESS;
-
- do
- {
- if(!pHTTPSession) // Validate the session pointer
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
- // If we have a valid socket then..
- if(pHTTPSession->HttpConnection.HttpSocket != HTTP_INVALID_SOCKET)// INVALID_SOCKET
- {
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SECURE) == HTTP_CLIENT_FLAG_SECURE)
- {
- // TLS Close
- nRetCode = HTTPWrapperSSLClose(pHTTPSession->HttpConnection.HttpSocket);
- }
-
- // Gracefully close it
- shutdown(pHTTPSession->HttpConnection.HttpSocket,0x01);
- closesocket(pHTTPSession->HttpConnection.HttpSocket);
- // And invalidate the socket
- pHTTPSession->HttpConnection.HttpSocket = HTTP_INVALID_SOCKET;
-
- break;;
- }
- else
- {
- // Not a valid socket error
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_INVALID;
- break;
- }
-
- } while(0);
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnConnectionClose",NULL,0,"");
- }
-#endif
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnConnectionOpen
-// Purpose : Opens a socket connection to the remote host or proxy server
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnConnectionOpen (P_HTTP_SESSION pHTTPSession)
-{
- INT32 nRetCode = HTTP_CLIENT_SUCCESS; // a function return code value
- UINT32 nNullOffset; // a helper value to null terminate a given string
- int nNonBlocking = 1; // non blocking mode parameter
- CHAR Backup; // a container for a char value (helps in temporary null termination)
- // HTTP_HOSTNET *HostEntry; // Socket host entry pointer
- UINT32 Address = 0;
- HTTP_SOCKADDR_IN ServerAddress; // Socket address structure
- HTTP_SOCKADDR_IN LoaclAddress; // Socket address structure (for client binding)
- do
- {
-
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
- // Use an existing connection if valid
- if(pHTTPSession->HttpConnection.HttpSocket != HTTP_INVALID_SOCKET)
- {
- // Set the state flag
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_HOST_CONNECTED;
- return HTTP_CLIENT_SUCCESS;
- }
- // Zero the socket events
- FD_ZERO(&pHTTPSession->HttpConnection.FDRead);
- FD_ZERO(&pHTTPSession->HttpConnection.FDWrite);
- FD_ZERO(&pHTTPSession->HttpConnection.FDError);
-
- if(pHTTPSession->HttpConnection.HttpSocket == HTTP_INVALID_SOCKET)
- {
-
- // Create a TCP/IP stream socket
- pHTTPSession->HttpConnection.HttpSocket = socket(AF_INET, // Address family
- SOCK_STREAM, // Socket type
- IPPROTO_TCP); // Protocol
- }
-
- // Exit if we don't have a valid socket
- if(pHTTPSession->HttpConnection.HttpSocket == HTTP_INVALID_SOCKET)
- {
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_INVALID;
- break;
- }
- // Set non blocking socket
- nRetCode = ioctlsocket(pHTTPSession->HttpConnection.HttpSocket, FIONBIO, &nNonBlocking);
- if(nRetCode != 0)
- {
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_CANT_SET;
- break;
- }
- // Resolve the target host name
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_USINGPROXY) != HTTP_CLIENT_FLAG_USINGPROXY)
- {
- // No proxy, directly resolving the host name
- // Prep the parameter
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_URLANDPORT) == HTTP_CLIENT_FLAG_URLANDPORT)
- {
- nNullOffset = pHTTPSession->HttpUrl.UrlHost.nLength - pHTTPSession->HttpUrl.UrlPort.nLength - 1;
- }
- else
- {
- nNullOffset = pHTTPSession->HttpUrl.UrlHost.nLength;
- }
-
- Backup = HTTPStrExtract(pHTTPSession->HttpUrl.UrlHost.pParam,nNullOffset,0);
- // Resolve the host name
- nRetCode = HostByName(pHTTPSession->HttpUrl.UrlHost.pParam,&Address);
-
- // Restore from backup (fix the buffer)
- HTTPStrExtract(pHTTPSession->HttpUrl.UrlHost.pParam,nNullOffset,Backup);
-
- }
-
- else
- {
- // Using a Proxy server so resolve the proxy host name
- nRetCode = HostByName(pHTTPSession->HttpProxy.ProxyHost,&Address);
- }
-
- // See if we have a valid response from the net resolve operation
- /*
- if(nRetCode)
- {
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_RESOLVE;
- break;
- }
- */
- // Reset the address structures
- memset(&ServerAddress, 0, sizeof(HTTP_SOCKADDR_IN));
- memset(&LoaclAddress, 0, sizeof(HTTP_SOCKADDR_IN));
-
- // Fill in the address structure
- ServerAddress.sin_family = AF_INET;
-#ifdef _HTTP_BUILD_AMT
- ServerAddress.sin_len = sizeof(HTTP_SOCKADDR_IN);
- ServerAddress.sin_addr.s_addr = htonl(Address); // Server's address
-#endif
-#ifdef _HTTP_BUILD_WIN32
- ServerAddress.sin_addr.s_addr = Address; // Server's address
-#endif
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_USINGPROXY) != HTTP_CLIENT_FLAG_USINGPROXY)
- {
- // Use the remote web server port
- ServerAddress.sin_port = htons(pHTTPSession->HttpUrl.nPort); // Host Port number
- }
- else
- {
- // Use the proxy port
- ServerAddress.sin_port = htons(pHTTPSession->HttpProxy.nProxyPort); // Proxy Port number
- }
-
- // Client-side Binding
- if(pHTTPSession->HttpConnection.HttpClientPort != 0)
- {
- LoaclAddress.sin_family = AF_INET;
-#ifdef _HTTP_BUILD_AMT
- LoaclAddress.sin_len = sizeof(HTTP_SOCKADDR_IN);
-#endif
- LoaclAddress.sin_port = htons((unsigned short)pHTTPSession->HttpConnection.HttpClientPort);
-
- nRetCode = bind(pHTTPSession->HttpConnection.HttpSocket,
- (HTTP_SOCKADDR*)&LoaclAddress,
- sizeof(HTTP_SOCKADDR_IN));
-
- if(nRetCode != 0)
- {
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_BIND;
- }
- }
-
- // Connect using TLS or otherwise clear connection
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SECURE) == HTTP_CLIENT_FLAG_SECURE)
- { // Is it a TLS connection?
- nRetCode = HTTPWrapperSSLConnect(pHTTPSession->HttpConnection.HttpSocket, // Socket
- (HTTP_SOCKADDR*)&ServerAddress, // Server address
- sizeof(HTTP_SOCKADDR), // Length of server address structure
- "desktop"); // Hostname (ToDo: Fix this)
- }
- else // Non TLS so..
- {
- nRetCode = connect(pHTTPSession->HttpConnection.HttpSocket, // Socket
- (HTTP_SOCKADDR*)&ServerAddress, // Server address
- sizeof(HTTP_SOCKADDR)); // Length of server address structure
- }
-
- // The socket was set to be asyn so we should check the error being returned from connect()
- nRetCode = SocketGetErr(pHTTPSession->HttpConnection.HttpSocket);
- if(nRetCode == 0 || nRetCode == HTTP_EWOULDBLOCK || nRetCode == HTTP_EINPROGRESS)
- {
- // Set TLS Nego flag to flase
- pHTTPSession->HttpConnection.TlsNego = FALSE;
- // Set the Write fd_sets for a socket connection event
- FD_SET(pHTTPSession->HttpConnection.HttpSocket, &pHTTPSession->HttpConnection.FDWrite);
- // Set the state flag
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_HOST_CONNECTED;
- // We have connected so set the return value to success
- nRetCode = HTTP_CLIENT_SUCCESS;
- break;
- }
- else
- {
- // Socket connection problem
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_CONNECT;
- break;
- }
- }while(0);
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnConnectionOpen",NULL,0,"");
- }
-#endif
-
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnSend
-// Purpose : Send data to the remote server (Asynchronous sockets)
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnSend (P_HTTP_SESSION pHTTPSession,
- CHAR *pData, // [IN] a pointer to the data to be sent
- UINT32 *nLength) // [IN OUT] Length of data to send and the transmitted bytes count
-{
-
- INT32 nSocketEvents; // Socket events center
- INT32 nRetCode = HTTP_CLIENT_SUCCESS; // a function return code value
- HTTP_TIMEVAL Timeval = { 1 , 0 }; // Timeout value for the socket() method
- HTTP_CONNECTION *pConnection = NULL; // Pointer for the connection structure
-
-
- do
- {
- // Validate the session pointer
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
- // Have a pointer on the internal connection structure for simplifying code reading
- pConnection = &pHTTPSession->HttpConnection;
-
- while(1)
- {
-
- // Check for timeout
- if(HTTPIntrnSessionEvalTimeout(pHTTPSession) == TRUE)
- {
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_TIME_OUT;
- break;
- }
-
- // Reset socket events , only Error, since we don't want to get
- // a repeated Write events (socket is connected)
-
- FD_SET(pConnection->HttpSocket, &pConnection->FDError);
-
- // See if we got any events on the socket
- nSocketEvents = select((pConnection->HttpSocket + 1), 0,
- &pConnection->FDWrite,
- &pConnection->FDError,
- &Timeval);
-
- if(nSocketEvents < 0) // No events on the socket
- {
- *(nLength) = 0;
- break; // To-Do: This might be an error
- }
-
- if(nSocketEvents == 0) // No new events so
- {
- continue; // restart this loop
- }
-
- // Socket is writable (we are connected) so send the data
- if(FD_ISSET(pConnection->HttpSocket ,&pConnection->FDWrite))
- {
-
- // Send the data
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SECURE) == HTTP_CLIENT_FLAG_SECURE)
- {
- // TLS Protected connection
- if(pConnection->TlsNego == FALSE)
- {
- nRetCode = HTTPWrapperSSLNegotiate(pConnection->HttpSocket,0,0,"desktop");
- if(nRetCode != 0)
- {
- // TLS Error
- nRetCode = HTTP_CLIENT_ERROR_TLS_NEGO;
- break;
- }
- pConnection->TlsNego = TRUE;
- }
- nRetCode = HTTPWrapperSSLSend(pConnection->HttpSocket,pData,*(nLength),0);
- }
- else
- {
- nRetCode = send(pConnection->HttpSocket,pData,*(nLength),0);
- }
- if(nRetCode == SOCKET_ERROR)
- {
- //nRetCode = SocketGetErr(pHTTPSession->HttpConnection.HttpSocket); //Jerome: is reassigned in the next line
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_SEND;
- break;
- }
- // The data was sent to the remote server
- *(nLength) = nRetCode;
- nRetCode = HTTP_CLIENT_SUCCESS;
- break;
- }
-
- // We had a socket related error
- if(FD_ISSET(pConnection->HttpSocket ,&pConnection->FDError))
- {
- FD_CLR((UINT32)pConnection->HttpSocket,&pConnection->FDError);
- *(nLength) = 0;
- // To-Do: Handle this case
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_SEND;
- break;
- }
- }
- } while(0);
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnSend",pData,*(nLength),"");
- }
-#endif
-
-
- return nRetCode;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnRecv
-// Purpose : Receive data from the connected socket using asynchronous sockets
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnRecv (P_HTTP_SESSION pHTTPSession,
- CHAR *pData, // [IN] a pointer for a buffer that receives the data
- UINT32 *nLength, // [IN OUT] Length of the buffer and the count of the received bytes
- BOOL PeekOnly) // [IN] State if we should only peek the socket (default is no)
-{
- INT32 nSocketEvents;
- INT32 nRetCode = HTTP_CLIENT_SUCCESS;
- HTTP_TIMEVAL Timeval = { 0, 50000 };
- HTTP_CONNECTION *pConnection = NULL;
-
- do
- {
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
- // Set a pointer on the session internal connection structure (simplify code reading)
- pConnection = &pHTTPSession->HttpConnection;
- while(1)
- {
- // Check for timeout
- if(HTTPIntrnSessionEvalTimeout(pHTTPSession) == TRUE)
- {
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_TIME_OUT;
- break;
- }
-
-
- // Reset socket events
- FD_SET(pConnection->HttpSocket, &pConnection->FDRead);
- FD_SET(pConnection->HttpSocket, &pConnection->FDError);
-
- // See if we got any events on the socket
- nSocketEvents = select(pConnection->HttpSocket + 1, &pConnection->FDRead,
- 0,
- &pConnection->FDError,
- &Timeval);
-
- if(nSocketEvents < 0) // Error or no new socket events
- {
- *(nLength) = 0;
- break;
- }
- if(nSocketEvents == 0)
- {
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
- // This is a simple bypass for the TSL session (for some reason the socket read event is not set so
- // The pending bytes on the socket are being checked manualy.
- // TLS hack:
-
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SECURE) == HTTP_CLIENT_FLAG_SECURE)
- {
- nRetCode = HTTPWrapperSSLRecvPending(pConnection->HttpSocket);
- if(nRetCode > 0)
- {
- // Recive without being notified by the socket event
- if((nRetCode = HTTPWrapperSSLRecv(pConnection->HttpSocket,pData,*(nLength),0)) == SOCKET_ERROR)
- {
- // Socket error
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_RECV;
- break;
- }
- *(nLength) = nRetCode;
- // Break on no data or server connection reset
- if ( nRetCode == 0 || nRetCode == HTTP_ECONNRESET)
- {
- // Connection closed, simply break - this is not an error
- nRetCode = HTTP_CLIENT_EOS; // Signal end of stream
- break;
- }
- // We have successfully got the data from the server
- nRetCode = HTTP_CLIENT_SUCCESS;
- break;
- }
- }
- // End Of the TLS bypass section
- //
- /////////////////////////////////////////////////////////////////////////////////////////////////
-
- continue; // select() timed out - restart this loop
- }
- if(FD_ISSET(pConnection->HttpSocket ,&pConnection->FDRead)) // Are there any read events on the socket ?
- {
- // Clear the event
- FD_CLR((UINT32)pConnection->HttpSocket,&pConnection->FDRead);
-
- // Socket is readable so so read the data
- if(PeekOnly == FALSE)
- {
- // Get the data (secuure)
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SECURE) == HTTP_CLIENT_FLAG_SECURE)
- {
- if((nRetCode = HTTPWrapperSSLRecv(pConnection->HttpSocket,pData,*(nLength),0)) == SOCKET_ERROR)
- {
- // Socket error
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_RECV;
- break;
- }
- }
- else // Get the data (non secuure)
- {
- if((nRetCode = recv(pConnection->HttpSocket,pData,*(nLength),0)) == SOCKET_ERROR)
- {
- // Socket error
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_RECV;
- break;
- }
- }
-
- }
- else
- {
- // Only peek te socket
- if((nRetCode = recv(pConnection->HttpSocket,pData,*(nLength),MSG_PEEK)) == SOCKET_ERROR)
- {
- // Socket error
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_RECV;
- break;
- }
-
- }
- *(nLength) = nRetCode;
- // Break on no data or server connection reset
- // MSDN: If the connection has been gracefully closed, the return value is zero.
- if ( nRetCode == 0 || nRetCode == HTTP_ECONNRESET)
- {
- // Connection closed, simply break - this is not an error
- nRetCode = HTTP_CLIENT_EOS; // Signal end of stream
- break;
- }
- // We have successfully got the data from the server
- nRetCode = HTTP_CLIENT_SUCCESS;
- break;
- }
-
- // We had a socket related error
- if(FD_ISSET(pConnection->HttpSocket ,&pConnection->FDError))
- {
- FD_CLR((UINT32)pConnection->HttpSocket,&pConnection->FDError);
- *(nLength) = 0;
-
- // To-Do: Handle this case
- nRetCode = HTTP_CLIENT_ERROR_SOCKET_RECV;
- break;
-
- }
- }
- }while(0);
-
- return nRetCode;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnGetRemoteChunkLength
-// Purpose : Receive (byte by byte) the chunk parameter (while in chunk mode receive) and
-// Convert the HEX string into an integer
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnGetRemoteChunkLength (P_HTTP_SESSION pHTTPSession)
-{
-
- UINT32 nBytesRead = 1;
- UINT32 nRetCode = HTTP_CLIENT_SUCCESS;
- UINT32 nBytesCount = 0;
- CHAR ChunkHeader[HTTP_CLIENT_MAX_CHUNK_HEADER];
- CHAR *pPtr;
-
- do
- {
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
- // Read byte by byte until we get a CrLf
- pPtr = ChunkHeader; // Get a pointer to the received buffer
- *pPtr = 0; // Terminate with null
-
- while(nBytesRead > 0)
- {
- // Receive a single byte
- nRetCode = HTTPIntrnRecv(pHTTPSession,pPtr,&nBytesRead,FALSE);
- // Did we succeed?
- if(nRetCode == HTTP_CLIENT_SUCCESS && nBytesRead > 0)
- {
- // Increment the bytes count
- nBytesCount += nBytesRead;
- if(nBytesRead > HTTP_CLIENT_MAX_CHUNK_HEADER)
- {
- // Error chunk buffer is full
- nRetCode = HTTP_CLIENT_ERROR_CHUNK_TOO_BIG;
- break;
- }
- // Don't Process if the fist 2 bytes are CrLf.
- if(! ((nBytesCount == 1 && *pPtr == 0x0d) || (nBytesCount == 2 && *pPtr == 0x0a)))
- {
- // Advance the pointer by the received data length
- pPtr += nBytesRead;
- // Look for CrLf in the last 2 bytes
- if(memcmp(pPtr - 2,HTTP_CLIENT_CRLF,2) == 0)
- {
- // Chunk Header was received
- *pPtr = 0; // null terminate the chunk parameter
- pHTTPSession->HttpCounters.nRecivedChunkLength = HTTPStrHToL(ChunkHeader); // Convert to a number
- // Set the HTTP counters
- pHTTPSession->HttpCounters.nBytesToNextChunk = pHTTPSession->HttpCounters.nRecivedChunkLength;
- break;
- }
- }
- }
- else // Socket Error
- {
- nRetCode = 0;
- break;
- }
- }
- } while(0);
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnGetRemoteChunkLength",NULL,0,"Next chunk is %d bytes",pHTTPSession->HttpCounters.nRecivedChunkLength);
- }
-#endif
-
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnGetRemoteHeaders
-// Purpose : Perform a socket receive (byte by byte) until all the HTTP headers are received
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnGetRemoteHeaders (P_HTTP_SESSION pHTTPSession)
-{
-
- UINT32 nBytesRead = 1;
- UINT32 nRetCode = HTTP_CLIENT_SUCCESS;
- UINT32 nProjectedHeaderLength;
- UINT32 nProjectedBufferLength;
- INT32 nCurrentfreeSpace;
- INT32 nProjectedfreeSpace;
- CHAR *pPtr;
-
- do
- {
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
- // Read byte by byte until we get CrLf followed by CrLf
- // Set the incoming headers pointer
-
- if(!pHTTPSession->HttpHeaders.HeadersIn.pParam)
- {
- /// The incoming headers starts where the outgoing headers ends
- pHTTPSession->HttpHeaders.HeadersIn.pParam = pHTTPSession->HttpHeaders.HeadersOut.pParam + pHTTPSession->HttpHeaders.HeadersOut.nLength;
- }
-
- // Receive until we get all the headers or any other error event
- while(nBytesRead > 0)
- {
-
- // Size of the projected buffer we are going to receive
- nProjectedHeaderLength = nBytesRead;
- // Size of the projected total incoming buffer
- nProjectedBufferLength = nProjectedHeaderLength + pHTTPSession->HttpHeaders.HeadersOut.nLength + pHTTPSession->HttpHeaders.HeadersIn.nLength;
- // Current free space on the incoming headers buffer
- nCurrentfreeSpace = pHTTPSession->HttpHeaders.HeadersBuffer.nLength - (pHTTPSession->HttpHeaders.HeadersOut.nLength + pHTTPSession->HttpHeaders.HeadersIn.nLength);
- // Projected free space after the completion of the receive
- nProjectedfreeSpace = nCurrentfreeSpace - nProjectedHeaderLength;
-
- // Check total size limit
- if(nProjectedBufferLength > HTTP_CLIENT_MAX_SEND_RECV_HEADERS)
- {
- return HTTP_CLIENT_ERROR_NO_MEMORY;
- }
-
- if((INT32)nProjectedfreeSpace < 0)
- {
- if(HTTP_CLIENT_MEMORY_RESIZABLE == FALSE)
- {
- // Need more space but we can't grow beyond the current size
- nRetCode = HTTP_CLIENT_ERROR_NO_MEMORY;
- break;
- }
- else
- {
- // We can resizes so..
- nRetCode = HTTPIntrnResizeBuffer(pHTTPSession,nProjectedBufferLength + HTTP_CLIENT_MEMORY_RESIZE_FACTOR);
- if(nRetCode != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
- }
- // Jump to the beginning of the incoming headers (just after the end of the outgoing headers)
- pPtr = pHTTPSession->HttpHeaders.HeadersIn.pParam + pHTTPSession->HttpHeaders.HeadersIn.nLength;
- // Read a single byte
- nRetCode = HTTPIntrnRecv(pHTTPSession,pPtr,&nBytesRead,FALSE);
-
- // ToDo: Break if not getting HTTP on the first 4 bytes
-
- if(nRetCode == HTTP_CLIENT_SUCCESS && nBytesRead > 0)
- {
- // Advance the pointer by 1 byte
- pPtr += nBytesRead;
- // Increase the total receive length
- pHTTPSession->HttpHeaders.HeadersIn.nLength++;
-
- // Set the HTTP counters
- pHTTPSession->HttpCounters.nRecivedHeaderLength++;
-
- if(memcmp(pPtr - 4,HTTP_CLIENT_CRLFX2,4) == 0)
- {
- // Headers were received
- break;
- }
- }
- else
- {
- nRetCode = HTTP_CLIENT_ERROR_HEADER_RECV; // This was marked out for some reason
- break;
- }
- }
- }while(0);
-
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnGetRemoteHeaders",NULL,0,"Got %d bytes",pHTTPSession->HttpHeaders.HeadersIn.nLength);
- }
-#endif
-
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnHeadersFind
-// Purpose : Look for a header (insensitive search) by its name
-// Gets : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnHeadersFind (P_HTTP_SESSION pHTTPSession,CHAR *pHeaderName,
- HTTP_PARAM *pParam, // [OUT] HTTP parameter structure that holds the search results
- BOOL IncommingHeaders, // [IN] Indicate if we are to search in the incoming or outgoing headers
- UINT32 nOffset) // [IN] Optionaly privide an offset to start looking from
-{
- CHAR *pHeaderEnd;
- CHAR Header[HTTP_CLIENT_MAX_HEADER_SEARCH_CLUE]; // To-Do: Use pointers insted of fixed length
- UINT32 nLength;
- UINT32 nRetCode = HTTP_CLIENT_ERROR_HEADER_NOT_FOUND;
-
- do
- {
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
- // Reset the input parameter structure
- pParam->pParam = NULL;
- pParam->nLength = 0;
- // Get the requested header length
- nLength = strlen(pHeaderName);
- if(nLength > (HTTP_CLIENT_MAX_HEADER_SEARCH_CLUE - 3))
- {
- // Error : header search clue too big
- nRetCode = HTTP_CLIENT_ERROR_HEADER_BIG_CLUE;
- break;
- }
- // Build the searched header name , add a leading CrLf before the header name and trailing ":"
- memset(Header,0x00,HTTP_CLIENT_MAX_HEADER_SEARCH_CLUE);
- strcpy(Header,HTTP_CLIENT_CRLF);
- strcat(Header,pHeaderName);
- strcat(Header,":");
- // Case insensitive search for the header name (search the incoming headers)
- if(IncommingHeaders == TRUE)
- {
- pParam->pParam = HTTPStrCaseStr(pHTTPSession->HttpHeaders.HeadersIn.pParam + nOffset,
- pHTTPSession->HttpHeaders.HeadersIn.nLength,
- Header);
- }
- else
- {
- // Optionally search the outgoing headers
- pParam->pParam = HTTPStrCaseStr(pHTTPSession->HttpHeaders.HeadersOut.pParam + nOffset,
- pHTTPSession->HttpHeaders.HeadersOut.nLength,
- Header);
- }
-
- if(pParam->pParam) // Did we find it?
- {
- // Search for the token end (trailing CrLf)
- pHeaderEnd = strstr(pParam->pParam + 2,HTTP_CLIENT_CRLF);
- if(pHeaderEnd)
- {
- // Get the length (up to the CrLf)
- pParam->nLength = pHeaderEnd - pParam->pParam;
- nRetCode = HTTP_CLIENT_SUCCESS;
- break;
-
- }
- }
- }while(0);
-
- // Could not find the header
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnAuthenticate
-// Purpose :
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnAuthenticate(P_HTTP_SESSION pHTTPSession)
-{
- UINT32 nRetCode = HTTP_CLIENT_SUCCESS; // Function call return code
- UINT32 nBytes = 32;
- UINT32 nTotalBytes = 0;
- CHAR ErrorPage[32];
- BOOL NewConnection = FALSE;
-
-
- do
- {
- // Validate the session pointer
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
- // Handle connection close message (reconnect)
- if(pHTTPSession->HttpHeadersInfo.Connection == FALSE)
- {
- // Gracefully close the connection and set the socket as invalid
- if(pHTTPSession->HttpConnection.HttpSocket != HTTP_INVALID_SOCKET)
- {
- HTTPIntrnConnectionClose(pHTTPSession);
- }
- // Connect to the remote server (or proxy)
- nRetCode = HTTPIntrnConnectionOpen(pHTTPSession);
- if(nRetCode != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- NewConnection = TRUE;
- }
-
- // Analyze the security headers and optionally build the authentication reply header
- if((nRetCode = HTTPIntrnParseAuthHeader(pHTTPSession))!= HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // We have to recive any HTML data here inorder to "Clear" the socket buffer for later usage
- // Note: We should skip this when the HEAD verb was used
- while(NewConnection == FALSE && pHTTPSession->HttpHeaders.HttpLastVerb != VerbHead && pHTTPSession->HttpHeadersInfo.nHTTPContentLength > 0 && nBytes > 0)
- {
- ErrorPage[0] = 0;
- if((nRetCode = HTTPIntrnRecv(pHTTPSession,ErrorPage,&nBytes,FALSE)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- nTotalBytes += nBytes;
- if(nTotalBytes >= pHTTPSession->HttpHeadersInfo.nHTTPContentLength)
- {
- break;
- }
- }
-
- // Re-Send the headers after having analyzed the authorizaton headers
- if((nRetCode = HTTPIntrnHeadersSend(pHTTPSession,pHTTPSession->HttpHeaders.HttpVerb)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- }while(0);
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnAuthenticate",NULL,0,"");
- }
-#endif
-
- return nRetCode;
-
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnHeadersParse
-// Purpose : Parse the HTTP incoming headers.
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnHeadersParse (P_HTTP_SESSION pHTTPSession)
-{
-
- CHAR *pPtr; // a pointer that points on the incoming headers
- UINT32 nTokenLength = 0; // Length of the parsed token
- UINT32 nRetCode = HTTP_CLIENT_SUCCESS; // a function return code value
- UINT32 nOffset = 0; // Bytes offset (strings comperision)
- CHAR HTTPToken[HTTP_CLIENT_MAX_TOKEN_LENGTH]; // Buffer for the parsed HTTP token
- HTTP_PARAM HTTPParam; // A generic pointer\length parameter for parsing
- BOOL AuthHeaders = FALSE; // While we are searching the authentication methods
-
- do
- {
- // Validate the session pointer
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnHeadersParse",pHTTPSession->HttpHeaders.HeadersIn.pParam,pHTTPSession->HttpHeaders.HeadersIn.nLength,"[Incomming Headers]");
- }
-#endif
-
-
- // Set a pointer on the incoming headers
- pPtr = pHTTPSession->HttpHeaders.HeadersIn.pParam;
-
- // Detect the leading HTTP string
- if(HTTPStrInsensitiveCompare(pPtr,"http",4) != TRUE)
- {
- nRetCode = HTTP_CLIENT_ERROR_BAD_HEADER;
- break;
- }
-
- // Get the HTTP Version
- while ((*pPtr) && (*pPtr != 0x20))
- {
- nTokenLength++;
- pPtr++; // Move to the first space
- }
- strncpy(pHTTPSession->HttpHeadersInfo.HTTPVersion,
- pPtr - nTokenLength,
- MIN(15,nTokenLength));
- pPtr++;
-
- // Get the HTTP status code
- memset(HTTPToken,0x00,HTTP_CLIENT_MAX_TOKEN_LENGTH);
- nTokenLength = 0;
- while ((*pPtr) && (*pPtr != 0x20))
- {
- nTokenLength++;
- pPtr++; // Move to the next space
- }
- strncpy(HTTPToken,(pPtr - nTokenLength),MIN(HTTP_CLIENT_MAX_TOKEN_LENGTH,nTokenLength));
-
- pHTTPSession->HttpHeadersInfo.nHTTPStatus = atol(HTTPToken);
-
- // Search for content length
- pHTTPSession->HttpHeadersInfo.nHTTPContentLength = 0; // Default no unknown length
- // Look for the token
- if(HTTPIntrnHeadersFind(pHTTPSession,"content-length",&HTTPParam,TRUE,0) == HTTP_CLIENT_SUCCESS)
- {
-
- memset(HTTPToken,0x00,HTTP_CLIENT_MAX_TOKEN_LENGTH); // Reset the token buffer
- nTokenLength = HTTP_CLIENT_MAX_TOKEN_LENGTH; // Set the buffer length
- // Attempt to extract the token
- if(HTTPStrGetToken(HTTPParam.pParam,HTTPParam.nLength,HTTPToken,&nTokenLength))
- {
- // Convert the content-length into an integer.
- pHTTPSession->HttpHeadersInfo.nHTTPContentLength = atol(HTTPToken);
- }
- }
-
- // Search for connection status
- pHTTPSession->HttpHeadersInfo.Connection = TRUE; // Default status where no server connection header was detected
- // Look for token (can be standard connection or a proxy connection)
- if( (HTTPIntrnHeadersFind(pHTTPSession,"connection",&HTTPParam,TRUE,0) == HTTP_CLIENT_SUCCESS) ||
- (HTTPIntrnHeadersFind(pHTTPSession,"proxy-connection",&HTTPParam,TRUE,0) == HTTP_CLIENT_SUCCESS))
- {
-
- memset(HTTPToken,0x00,HTTP_CLIENT_MAX_TOKEN_LENGTH);
- nTokenLength = HTTP_CLIENT_MAX_TOKEN_LENGTH;
- // Attempt to extract the token
- if(HTTPStrGetToken(HTTPParam.pParam,HTTPParam.nLength,HTTPToken,&nTokenLength))
- {
- // Is this a keep alive session?
- pHTTPSession->HttpHeadersInfo.Connection = HTTPStrInsensitiveCompare(HTTPToken,"keep-alive",0);
- // Is it a closed session
- if(HTTPStrInsensitiveCompare(HTTPToken,"close",0) == TRUE)
- {
- pHTTPSession->HttpHeadersInfo.Connection = FALSE;
- }
- }
- }
-
- // Search for chunking mode transfer
- pHTTPSession->HttpFlags = pHTTPSession->HttpFlags &~ HTTP_CLIENT_FLAG_CHUNKED; // Remove the flag
- if(HTTPIntrnHeadersFind(pHTTPSession,"transfer-encoding",&HTTPParam,TRUE,0) == HTTP_CLIENT_SUCCESS)
- {
-
- memset(HTTPToken,0x00,HTTP_CLIENT_MAX_TOKEN_LENGTH);
- nTokenLength = HTTP_CLIENT_MAX_TOKEN_LENGTH;
- if(HTTPStrGetToken(HTTPParam.pParam,HTTPParam.nLength,HTTPToken,&nTokenLength))
- {
- // If the chunks token was find then set the session flag accordingly
- if(HTTPStrInsensitiveCompare(HTTPToken,"chunked",0) == TRUE)
- {
- pHTTPSession->HttpFlags = pHTTPSession->HttpFlags | HTTP_CLIENT_FLAG_CHUNKED;
- }
- }
- }
- // Look for the authentication header
- while(AuthHeaders == FALSE) // address multiple authentication methods presented by the server
- {
- if(pHTTPSession->HttpHeadersInfo.nHTTPStatus == HTTP_STATUS_UNAUTHORIZED)
- {
- // Double check for the "www-authenticate" header token
- if(HTTPIntrnHeadersFind(pHTTPSession,"www-authenticate",&pHTTPSession->HttpAuthHeader.AuthHeader,TRUE,nOffset) != HTTP_CLIENT_SUCCESS)
- {
- if(nOffset > 0) // an authentication header was found but not the right one so adjust the error
- {
- nRetCode = HTTP_CLIENT_ERROR_AUTH_MISMATCH;
- }
- else
- {
- nRetCode = HTTP_CLIENT_ERROR_BAD_HEADER;
- }
-
- break;
- }
-
- // Make sure that we get an authentication header that maches the caller requested schema
- pPtr = HTTPStrCaseStr(pHTTPSession->HttpAuthHeader.AuthHeader.pParam,
- pHTTPSession->HttpAuthHeader.AuthHeader.nLength,
- pHTTPSession->HttpCredentials.AuthSchemaName);
- if(pPtr)
- {
- AuthHeaders = TRUE;
- }
- else
- {
- // Simply pass the point where the last "www" was found
- nOffset = (pHTTPSession->HttpAuthHeader.AuthHeader.pParam - pHTTPSession->HttpHeaders.HeadersIn.pParam) + 3;
- }
- }
- else
- {
- AuthHeaders = TRUE;
- }
- }
-
- // Is this a proxy authentication header?
- if(pHTTPSession->HttpHeadersInfo.nHTTPStatus == HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED)
- {
- // Double check for the "Proxy-Authentication" header token
- if (HTTPIntrnHeadersFind(pHTTPSession,"proxy-authenticate",&pHTTPSession->HttpAuthHeader.AuthHeader,TRUE,0) != HTTP_CLIENT_SUCCESS)
- {
- nRetCode = HTTP_CLIENT_ERROR_BAD_HEADER;
- break;
- }
- }
-
- // Do we have a redirection response?
- if( (pHTTPSession->HttpHeadersInfo.nHTTPStatus == HTTP_STATUS_OBJECT_MOVED) ||
- (pHTTPSession->HttpHeadersInfo.nHTTPStatus == HTTP_STATUS_OBJECT_MOVED_PERMANENTLY))
- {
- // Check for the "Location" header token
- if (HTTPIntrnHeadersFind(pHTTPSession,"location",&pHTTPSession->HttpHeadersInfo.HttpRedirectURL,TRUE,0) != HTTP_CLIENT_SUCCESS)
- {
- // Protocol violation, we got a redirect code without the host name to redirect to
- nRetCode = HTTP_CLIENT_ERROR_BAD_HEADER;
- break;
- }
- // Fix the pointers location (address the "Location: " prefix)
- pHTTPSession->HttpHeadersInfo.HttpRedirectURL.pParam += 12;
- pHTTPSession->HttpHeadersInfo.HttpRedirectURL.nLength -= 12;
-
- }
-
- }while(0);
-
-
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnParseAuthHeader
-// Purpose : Parse the HTTP headers for the required authentication method
-// Gets :
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnParseAuthHeader(P_HTTP_SESSION pHTTPSession)
-{
-
- CHAR *pPtrStart, *pPtrEnd;
-
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- if(pHTTPSession->HttpProxy.ProxyAuthSchema != AuthSchemaNone)
- {
- // for proxy authentication simply assume basic and exit
- return HTTP_CLIENT_SUCCESS;
- }
- // Advance the pointer in the string and break on the first space
- pPtrEnd = pHTTPSession->HttpAuthHeader.AuthHeader.pParam + pHTTPSession->HttpAuthHeader.AuthHeader.nLength;
- pPtrStart = pHTTPSession->HttpAuthHeader.AuthHeader.pParam;
- // Jump to the first space
- while ((pPtrEnd - pPtrStart) > 0 && *pPtrStart != 0x20) pPtrStart++;
-
- do
- {
- if(HTTPStrCaseStr(pPtrStart,8,"basic"))
- {
- pHTTPSession->HttpAuthHeader.HTTP_AUTH_SCHEMA = AuthSchemaBasic;
- break;
- }
-
- if(HTTPStrCaseStr(pPtrStart,8,"digest"))
- {
- pHTTPSession->HttpAuthHeader.HTTP_AUTH_SCHEMA = AuthSchemaDigest;
- break;
- }
- if(HTTPStrCaseStr(pPtrStart,8,"negotiate")) // Note that this could be NLM negotiation as well (which is not supported)
- {
- pHTTPSession->HttpAuthHeader.HTTP_AUTH_SCHEMA = AuthSchemaKerberos;
- break;
- }
- // To-Do: Add any other supported authentication method
- }
- while(0);
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnParseAuthHeader",pHTTPSession->HttpAuthHeader.AuthHeader.pParam,
- pHTTPSession->HttpAuthHeader.AuthHeader.nLength,"[Incomming Auth Headers: %d]",pHTTPSession->HttpAuthHeader.HTTP_AUTH_SCHEMA);
- }
-#endif
-
- // If we could not detect the authentication schema return an error
- if(pHTTPSession->HttpAuthHeader.HTTP_AUTH_SCHEMA == AuthSchemaNone)
- {
- return HTTP_CLIENT_ERROR_BAD_AUTH;
- }
-
- //Make sure we are going to authenticate with the method specified by the caller
- if(pHTTPSession->HttpAuthHeader.HTTP_AUTH_SCHEMA != (UINT32)pHTTPSession->HttpCredentials.CredAuthSchema)
- {
- return HTTP_CLIENT_ERROR_AUTH_MISMATCH;
- }
-
-
- return HTTP_CLIENT_SUCCESS;
-
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnHeadersSend
-// Purpose : Build and send the HTTP request. this includes the HTTP headers
-// and any required authentication data
-// Gets :
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnHeadersSend(P_HTTP_SESSION pHTTPSession,
- HTTP_VERB HttpVerb) // [IN] Argument that can bypass the requested verb
- // Can be used for evaluating a HEAD request
-{
-
- UINT32 nBytes;
- UINT32 nRetCode = HTTP_CLIENT_SUCCESS;
- CHAR RequestCmd[16];
- CHAR ContentLength[32];
- BOOL RestoreHeadersFlag = FALSE;
- HTTP_VERB HttpCachedVerb;
- //CHAR *pPtr; // Content length conversion //Jerome/cppcheck: Variable 'pPtr' is assigned a value that is never used.
-
- if(!pHTTPSession)
- {
- // Bad session pointer error
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnHeadersSend",NULL,
- 0,"Using Verb: %d",(INT32)HttpVerb);
- }
-#endif
- // Cache the original VERB
- HttpCachedVerb = pHTTPSession->HttpHeaders.HttpVerb;
-
- do
- {
-
- // Set the verb (temporarily)
- if(pHTTPSession->HttpHeaders.HttpVerb != HttpVerb)
- {
- if((nRetCode = HTTPClientSetVerb((HTTP_SESSION_HANDLE)pHTTPSession,HttpVerb)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
-
- // Remeber this state for later usage
- pHTTPSession->HttpHeaders.HttpLastVerb = pHTTPSession->HttpHeaders.HttpVerb;
-
- // If this is a head request we should temporary remove the chunking header and the content length header
- if(pHTTPSession->HttpHeaders.HttpVerb == VerbHead)
- {
-
- // If send in chunks flag was set
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SEND_CHUNKED) == HTTP_CLIENT_FLAG_SEND_CHUNKED)
- {
- // Chunking
- if((nRetCode = HTTPIntrnHeadersRemove(pHTTPSession,"Transfer-Encoding")) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
- // Content-Length
- if(pHTTPSession->HttpHeadersInfo.nHTTPPostContentLength > 0) // Attempt to remove only if it was previusly set
- {
- if((nRetCode = HTTPIntrnHeadersRemove(pHTTPSession,"Content-Length")) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
-
- RestoreHeadersFlag = TRUE; // So it would be restored later
- }
- // Request Verb
- nBytes = strlen(pHTTPSession->HttpHeaders.Verb) + 1;
- memset(RequestCmd,0x00,16);
- strcpy(RequestCmd,pHTTPSession->HttpHeaders.Verb);
- strcat(RequestCmd," ");
- if((nRetCode = HTTPIntrnSend(pHTTPSession,RequestCmd,&nBytes)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nBytes;
-
-
- // Request URI
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_USINGPROXY) != HTTP_CLIENT_FLAG_USINGPROXY)
- {
- nBytes = pHTTPSession->HttpUrl.UrlRequest.nLength;
- if((nRetCode = HTTPIntrnSend(pHTTPSession,pHTTPSession->HttpUrl.UrlRequest.pParam,&nBytes)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nBytes;
- }
- else
- {
- nBytes = strlen(pHTTPSession->HttpUrl.Url);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,pHTTPSession->HttpUrl.Url,&nBytes)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nBytes;
- }
- // Request HTTP Version
- //memset(RequestCmd+1,0x00,15); //Jerome: memory is overwritten in the next line
- strcpy(RequestCmd," ");
- strcat(RequestCmd,HTTP_CLIENT_DEFAULT_VER);
- strcat(RequestCmd,HTTP_CLIENT_CRLF);
- nBytes = strlen(RequestCmd);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,RequestCmd,&nBytes)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nBytes;
-
- // Request headers
- nBytes = pHTTPSession->HttpHeaders.HeadersOut.nLength;
- if((nRetCode = HTTPIntrnSend(pHTTPSession,pHTTPSession->HttpHeaders.HeadersOut.pParam,&nBytes)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nBytes;
-
- // Optionally add authentication headers and send them (for host or proxy authentication)
- if(pHTTPSession->HttpHeadersInfo.nHTTPStatus == HTTP_STATUS_UNAUTHORIZED || pHTTPSession->HttpHeadersInfo.nHTTPStatus == HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED )
- {
-
- if((nRetCode = HTTPIntrnAuthHandler(pHTTPSession)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
-
- // Request terminating CrLf
- nBytes = strlen(HTTP_CLIENT_CRLF);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,HTTP_CLIENT_CRLF,&nBytes)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nBytes;
-
- // Restore the verb
- if(pHTTPSession->HttpHeaders.HttpVerb != HttpCachedVerb)
- {
- if((nRetCode = HTTPClientSetVerb((HTTP_SESSION_HANDLE)pHTTPSession,HttpCachedVerb)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
-
- if(RestoreHeadersFlag == TRUE)
- {
- // Restore chunking header (since it was temporarily removed for the head request
- // Add the Transfer-Encoding: header
- if((pHTTPSession->HttpFlags & HTTP_CLIENT_FLAG_SEND_CHUNKED) == HTTP_CLIENT_FLAG_SEND_CHUNKED)
- {
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,"Transfer-Encoding",17,"chunked",7))!= HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- }
- // Restore the content length
- if(pHTTPSession->HttpHeadersInfo.nHTTPPostContentLength > 0) // Attempt to remove only if it was previusly set
- {
- IToA(ContentLength,pHTTPSession->HttpHeadersInfo.nHTTPPostContentLength); // Convert the buffer length to a string value //pPtr = //Jerome/cppcheck: Variable 'pPtr' is assigned a value that is never used.
- if((nRetCode = HTTPIntrnHeadersAdd(pHTTPSession,"Content-Length",14,ContentLength,strlen(ContentLength)))!= HTTP_CLIENT_SUCCESS)
- {
- return nRetCode;
- }
- }
- }
- // Set the session stage
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_REQUEST_SENT;
-
- } while(0);
-
-
- return nRetCode; // end of HTTPIntrnSendHeaders()
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnAuthHandler
-// Purpose : Differentiate between the authenticate method that we have to implement and perform
-// the required operation.
-// Gets :
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnAuthHandler (P_HTTP_SESSION pHTTPSession)
-{
-
- UINT32 nRetCode = HTTP_CLIENT_SUCCESS;
-
- if(!pHTTPSession)
- {
- // Bad session pointer error
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- if(pHTTPSession->HttpProxy.ProxyAuthSchema != AuthSchemaNone)
- {
- // For proxy authentication simply assume basic and exit
- // Basic authentication
- nRetCode = HTTPIntrnAuthSendBasic(pHTTPSession);
- return nRetCode;
- }
-
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnAuthHandler",NULL,
- 0,"");
- }
-#endif
-
- // Use the correct authentication method as requested by the server
- switch(pHTTPSession->HttpAuthHeader.HTTP_AUTH_SCHEMA)
- {
-
- case AuthSchemaBasic:
- {
- // Basic authentication
- nRetCode = HTTPIntrnAuthSendBasic(pHTTPSession);
- break;
-
- }
- case AuthSchemaDigest:
- {
- // Digest authentication
- nRetCode = HTTPIntrnAuthSendDigest(pHTTPSession);
- break;
-
- }
- case AuthSchemaKerberos:
- {
- // ToDo: impliament the Kerberos nego authentication here
- nRetCode = HTTP_CLIENT_ERROR_NOT_IMPLEMENTED;
- break;
-
- }
- default:
- {
- // Not supported method
- return HTTP_CLIENT_ERROR_BAD_AUTH; // Not implemented error
- }
-
- };
-
- // This session requested an authentication so..
- pHTTPSession->HttpCredentials.Authentication = TRUE;
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnAuthSendBasic
-// Purpose : Handle basic authentication for direst host connection and proxy authentication
-// Gets :
-// Returns :
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-
-static UINT32 HTTPIntrnAuthSendBasic (P_HTTP_SESSION pHTTPSession)
-{
-
- UINT32 nSegmentLength;
- UINT32 nRetCode;
- CHAR Cred[HTTP_CLIENT_MAX_64_ENCODED_CRED /2]; // Credentials (Clear)
- CHAR Cred64[HTTP_CLIENT_MAX_64_ENCODED_CRED]; // Credentials (64 bit encoded)
- UINT32 nSrcLength, nDestLength;
- CHAR* pPtr;
- CHAR* INITIAL_HDR = "Authorization: Basic ";
- CHAR* INITIAL_PROXY_HDR = "Proxy-Authorization: Basic ";
-
-
- do
- {
- if(!pHTTPSession)
- {
- nRetCode = HTTP_CLIENT_ERROR_INVALID_HANDLE;
- break;
- }
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnAuthSendBasic",NULL,
- 0,"");
- }
-#endif
-
- memset(Cred,0x00,HTTP_CLIENT_MAX_64_ENCODED_CRED /2);
- memset(Cred64,0x00,HTTP_CLIENT_MAX_64_ENCODED_CRED);
-
-
- switch (pHTTPSession->HttpHeadersInfo.nHTTPStatus)
- {
- case( HTTP_STATUS_UNAUTHORIZED): // For host authentication
- {
-
- // Copy the clear text credentials to a format of user:password
- strcpy(Cred,pHTTPSession->HttpCredentials.CredUser);
- strcat(Cred,":");
- strcat(Cred,pHTTPSession->HttpCredentials.CredPassword);
- nSrcLength = strlen(Cred);
- nDestLength = HTTP_CLIENT_MAX_64_ENCODED_CRED;
- nSegmentLength = strlen(INITIAL_HDR);
- // Build and send the data first the hard-coded static portion
- if((nRetCode = HTTPIntrnSend(pHTTPSession,INITIAL_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- // Convert to base 64
- HTTPBase64Encoder((unsigned char *)Cred64,(CONST unsigned char *)Cred,nSrcLength);
- nDestLength = strlen(Cred64);
-
- };
- break;
- case (HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED): // For Proxy authentication
- {
- // Copy the clear text credentials to a format of user:password
- strcpy(Cred,pHTTPSession->HttpProxy.ProxtUser);
- strcat(Cred,":");
- strcat(Cred,pHTTPSession->HttpProxy.ProxyPassword);
- nSrcLength = strlen(Cred);
- //nDestLength = HTTP_CLIENT_MAX_64_ENCODED_CRED; //Jerome: is reassigned few lines later
-
- // Convert to base 64
- HTTPBase64Encoder((unsigned char *)Cred64,(unsigned char *)Cred,nSrcLength);
- nDestLength = strlen(Cred64);
- nSegmentLength = strlen(INITIAL_PROXY_HDR);
- // Build and send the data first the hard-coded static portion
- if((nRetCode = HTTPIntrnSend(pHTTPSession,INITIAL_PROXY_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- };
- break;
- default:
- {
- return HTTP_CLIENT_ERROR_BAD_AUTH; // Wrong status for this function
- };
- };
-
- // Send the base 64 encoded data
- pPtr = Cred64;
- if((nRetCode = HTTPIntrnSend(pHTTPSession,pPtr, &nDestLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nDestLength;
-
- // Terminating CRLF
- nSegmentLength = strlen(HTTP_CLIENT_CRLF);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,HTTP_CLIENT_CRLF, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
-
- } while (0);
-
- return nRetCode;
-
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnAuthSendDigest
-// Purpose : Handle digest authentication for direct host connection and proxy authentication
-// Gets :
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnAuthSendDigest (P_HTTP_SESSION pHTTPSession)
-{
- CHAR Cnonce[33];
- UINT32 nSegmentLength;
- UINT32 nRetCode;
- UINT32 nAlgType = 0; // a flag for the algorithem type (default to MD5)
- HTTP_PARAM HttpParamOpq,HttpParamRealm,HttpParamNonce,HttpParamQop,HttpParamAlg; // Pointers and lengths of the dynamic sections
- // of the Digest response.
-
-
- // Fragments of the Digest client response (The hard coded text portion of the response)
- CHAR* INITIAL_HDR = "Authorization: Digest username=\"";
- CHAR* INITIAL_PROXY_HDR = "Proxy-Authorization: Digest username=\"";
- CHAR* REALEM_HDR = "\", realm=\"";
- CHAR* QOP_HDR = "\", qop=\"";
- CHAR* ALGO_HDR = "\", algorithm=\"";
- CHAR* URI_HDR = "\", uri=\"";
- CHAR* NONCE_HDR = "\", nonce=\"";
- CHAR* NC_HDR = "\", nc=00000001, cnonce=\""; // To-Do: This should be tested!!
- CHAR* RSP_HDR = "\", response=\"";
- CHAR* OPQ_HDR = "\", opaque=\"";
- // Digest Calculation related
- HASHHEX HA1;
- HASHHEX HA2 = "";
- HASHHEX Response;
-
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnAuthSendDigest",NULL,
- 0,"");
- }
-#endif
-
- // Generate random Cnonce number
- HTTPDigestGenerateCNonce(Cnonce);
-
- switch (pHTTPSession->HttpHeadersInfo.nHTTPStatus)
- {
- case( HTTP_STATUS_UNAUTHORIZED): // For host authentication
- {
- // "Authorization: Digest username="
- nSegmentLength = strlen(INITIAL_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,INITIAL_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- return nRetCode;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
- };
- break;
- case (HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED): // For Proxy authentication
- {
- // "Proxy-Authorization: Digest username="
- nSegmentLength = strlen(INITIAL_PROXY_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,INITIAL_PROXY_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- return nRetCode;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
- };
- break;
- default:
- {
- return HTTP_CLIENT_ERROR_BAD_AUTH; // Wrong status for this function
- };
- };
-
- do
- {
-
- // "Authorization: Digest username="username
- nSegmentLength = strlen(pHTTPSession->HttpCredentials.CredUser);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,pHTTPSession->HttpCredentials.CredUser, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- // "Authorization: Digest username="username", realm="
- nSegmentLength = strlen(REALEM_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,REALEM_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- // "Authorization: Digest username="username", realm="realm
- if((nRetCode = HTTPStrGetDigestToken(pHTTPSession->HttpAuthHeader.AuthHeader,"realm", &HttpParamRealm)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- if((nRetCode = HTTPIntrnSend(pHTTPSession,HttpParamRealm.pParam, &HttpParamRealm.nLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += HttpParamRealm.nLength;
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- nSegmentLength = strlen(QOP_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,QOP_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- if((nRetCode = HTTPStrGetDigestToken(pHTTPSession->HttpAuthHeader.AuthHeader,"qop", &HttpParamQop)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- if((nRetCode = HTTPIntrnSend(pHTTPSession,HttpParamQop.pParam, &HttpParamQop.nLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += HttpParamQop.nLength;
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- // algorithm="MD5",
-
- nSegmentLength = strlen(ALGO_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,ALGO_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- if((nRetCode = HTTPStrGetDigestToken(pHTTPSession->HttpAuthHeader.AuthHeader,"algorithm", &HttpParamAlg)) != HTTP_CLIENT_SUCCESS)
- {
-
- // The server did not state its required algorithm so use the default
- HttpParamAlg.pParam = HTTP_CLIENT_DEFAULT_DIGEST_AUTH;
- HttpParamAlg.nLength = strlen(HTTP_CLIENT_DEFAULT_DIGEST_AUTH);
- }
- // Get the algorithem type
- if(HTTPStrInsensitiveCompare(HttpParamAlg.pParam ,"md5",3 ) == TRUE)
- {
- if(HTTPStrInsensitiveCompare(HttpParamAlg.pParam ,"md5-sess", HttpParamAlg.nLength) == TRUE)
- {
- nAlgType = 1;
- }
-
- }
- else
- {
- // Error algorithem not supported
- nRetCode = HTTP_CLIENT_ERROR_NO_DIGEST_ALG;
- break;
- }
-
- // Send the algorithem
- if((nRetCode = HTTPIntrnSend(pHTTPSession,HttpParamAlg.pParam, &HttpParamAlg.nLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += HttpParamAlg.nLength;
-
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- // algorithm="MD5", uri="
- nSegmentLength = strlen(URI_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,URI_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- // algorithm="MD5", uri="/....Service
- nSegmentLength = strlen(pHTTPSession->HttpUrl.UrlRequest.pParam);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,pHTTPSession->HttpUrl.UrlRequest.pParam, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- // algorithm="MD5", uri="/....Service", nonce="
- nSegmentLength = strlen(NONCE_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,NONCE_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- // algorithm="MD5", uri="/....Service", nonce="7a5c...
- if((nRetCode = HTTPStrGetDigestToken(pHTTPSession->HttpAuthHeader.AuthHeader,"nonce", &HttpParamNonce)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- if((nRetCode = HTTPIntrnSend(pHTTPSession,HttpParamNonce.pParam, &HttpParamNonce.nLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += HttpParamNonce.nLength;
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- // algorithm="MD5", uri="/....Service", nonce="7a5c...", nc=00000001, cnonce="
- nSegmentLength = strlen(NC_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,NC_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- // algorithm="MD5", uri="/....Service", nonce="7a5c...", nc=00000001, cnonce="ab341...
- nSegmentLength = strlen(Cnonce);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,Cnonce, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- // Send the opaque data if we got it from the server
- if((nRetCode = HTTPStrGetDigestToken(pHTTPSession->HttpAuthHeader.AuthHeader,"opaque", &HttpParamOpq)) == HTTP_CLIENT_SUCCESS)
- {
-
- nSegmentLength = strlen(OPQ_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,OPQ_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
- if((nRetCode = HTTPIntrnSend(pHTTPSession,HttpParamOpq.pParam, &HttpParamOpq.nLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += HttpParamOpq.nLength;
-
- }
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- // algorithm="MD5", uri="/....Service", nonce="7a5c...", nc=00000001, cnonce="ab341...", response="
- nSegmentLength = strlen(RSP_HDR);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,RSP_HDR, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- // Calculate response
- HTTPDigestCalcHA1(nAlgType, pHTTPSession->HttpCredentials.CredUser,
- HttpParamRealm.pParam,HttpParamRealm.nLength ,
- pHTTPSession->HttpCredentials.CredPassword ,
- HttpParamNonce.pParam, HttpParamNonce.nLength,
- Cnonce, HA1);
-
- HTTPDigestCalcResponse(HA1,
- HttpParamNonce.pParam, HttpParamNonce.nLength,
- "00000001", Cnonce,
- HttpParamQop.pParam,HttpParamQop.nLength, pHTTPSession->HttpHeaders.Verb,
- pHTTPSession->HttpUrl.UrlRequest.pParam,pHTTPSession->HttpUrl.UrlRequest.nLength,
- HA2, Response);
-
- // "Authorization: Digest username="username", realm="myRealm", qop="auth",
- // algorithm="MD5", uri="/....Service", nonce="7a5c...", nc=00000001, cnonce="ab341...", response="8bbf2...
- nSegmentLength = strlen(Response);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,Response, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
-
- // Terminate 0x24 (")
- nSegmentLength = 1;
- if((nRetCode = HTTPIntrnSend(pHTTPSession,"\"", &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- // Terminating CRLF
- nSegmentLength = strlen(HTTP_CLIENT_CRLF);
- if((nRetCode = HTTPIntrnSend(pHTTPSession,HTTP_CLIENT_CRLF, &nSegmentLength)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
- // Set the counters
- pHTTPSession->HttpCounters.nSentHeaderBytes += nSegmentLength;
-
- } while(0);
-
- return nRetCode; // End of digest respobse sending
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnSessionReset
-// Purpose : Reset the session data for the next operation
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnSessionReset (P_HTTP_SESSION pHTTPSession, BOOL EntireSession)
-{
- UINT32 nActionTimeout; // For restoring a parameter after this reset
- UINT32 nAllocationSize;
-
- // Validate the pointer
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- pHTTPSession->pDebug("HTTPIntrnSessionReset",NULL,
- 0,"");
- }
-#endif
-
-
- memset(pHTTPSession->HttpHeaders.HeadersIn.pParam,0x00,pHTTPSession->HttpHeaders.HeadersIn.nLength);
- pHTTPSession->HttpHeaders.HeadersIn.nLength = 0;
-
-
- // Reset the HTTP counters
- nActionTimeout = pHTTPSession->HttpCounters.nActionTimeout;
- memset(&pHTTPSession->HttpCounters,0x00,sizeof(HTTP_COUNTERS));
- pHTTPSession->HttpCounters.nActionStartTime = HTTPIntrnSessionGetUpTime();
- // Restore the parameter
- pHTTPSession->HttpCounters.nActionTimeout = nActionTimeout;
- // Reset the authentication flag
- pHTTPSession->HttpCredentials.Authentication = FALSE;
-
-
- if(EntireSession == TRUE) // Partial reset, clear only the incoming headers
- {
- memset(&pHTTPSession->HttpUrl,0,sizeof(HTTP_URL));
- nAllocationSize = pHTTPSession->HttpHeaders.HeadersBuffer.nLength;
- // Reset the headers allocated memory
- memset(pHTTPSession->HttpHeaders.HeadersBuffer.pParam ,0x00,nAllocationSize);
-
- // Set default values in the session structure
- HTTPClientSetVerb((UINT32)pHTTPSession,(HTTP_VERB)HTTP_CLIENT_DEFAULT_VERB); // Default HTTP verb
- pHTTPSession->HttpUrl.nPort = HTTP_CLIENT_DEFAULT_PORT; // Default TCP port
- // Set the outgoing headers pointers
- memset(&pHTTPSession->HttpHeaders.HeadersIn,0,sizeof(HTTP_PARAM));
- memset(&pHTTPSession->HttpHeaders.HeadersOut,0,sizeof(HTTP_PARAM));
-
- pHTTPSession->HttpHeaders.HeadersOut.pParam = pHTTPSession->HttpHeaders.HeadersBuffer.pParam;
- // Set our state
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_INIT;
-
- memset(&pHTTPSession->HttpHeadersInfo,0,sizeof(HTTP_HEADERS_INFO));
- if(pHTTPSession->HttpConnection.HttpSocket != HTTP_INVALID_SOCKET)
- {
- pHTTPSession->HttpHeadersInfo.Connection = TRUE;
- }
- memset(&pHTTPSession->HttpAuthHeader,0,sizeof(HTTP_AUTH_HEADER));
- memset(&pHTTPSession->HttpProxy,0,sizeof(HTTP_PROXY));
-
- }
-
- return HTTP_CLIENT_SUCCESS;
-
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnHeadersReceive
-// Purpose : Receives the response header on the connection and parses it.
-// Performs any required authentication.
-// Returns : HTTP Status
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnHeadersReceive (P_HTTP_SESSION pHTTPSession,
- UINT32 nTimeout) // [IN] Timeout for the operation
-
-{
-
- UINT32 nRetCode; // Function call return code
- UINT32 nCount = 0;
- if(!pHTTPSession)
- {
- // Bad session pointer error
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- do
- {
-
-
- // Set the operation time out if was set by the caller
- if(nTimeout > 0)
- {
- // 0 makes us use the default defined value
- pHTTPSession->HttpCounters.nActionTimeout = HTTP_TIMEOUT(nTimeout);
-
- }
-
- // Reset the incoming headers
- if((nRetCode = HTTPIntrnSessionReset(pHTTPSession,FALSE)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- // Get the server response
- if((nRetCode = HTTPIntrnGetRemoteHeaders(pHTTPSession)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- // Set the session state
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_HEADERS_RECIVED;
-
- // Parse the response headers
- if((nRetCode = HTTPIntrnHeadersParse(pHTTPSession)) != HTTP_CLIENT_SUCCESS)
- {
- break;
- }
-
- // Set the session state
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_HEADERS_PARSED;
-
- // Set the session stage upon seccess
- if(pHTTPSession->HttpHeadersInfo.nHTTPStatus == HTTP_STATUS_OK)
- {
- pHTTPSession->HttpState = pHTTPSession->HttpState | HTTP_CLIENT_STATE_HEADERS_OK;
- }
- // Handle 100 continue message
- if(pHTTPSession->HttpHeadersInfo.nHTTPStatus != HTTP_STATUS_CONTINUE)
- {
- nCount++;
- }
-
-#ifdef _HTTP_DEBUGGING_
- if(pHTTPSession->pDebug)
- {
- if(pHTTPSession->HttpHeadersInfo.nHTTPStatus == HTTP_STATUS_CONTINUE)
- {
- pHTTPSession->pDebug("HTTPIntrnHeadersReceive",NULL,0,"100 Continue Header");
- }
- }
-#endif
-
- }while(nCount < 1);
-
- return nRetCode;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnGetTicks
-// Purpose : Like GetTickCount() (implemented with time.h)
-// Gets : void
-// Returns : System ticks
-// Last updated : 01/09/200515/05/2005
-// Author Name : Eitan Michaelson
-// Notes : Assuming 1000 ticks per sec, should be implemented by the OS
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static UINT32 HTTPIntrnSessionGetUpTime(VOID)
-{
-
- return GetUpTime();
-
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPIntrnSessionEvalTimeout
-// Purpose : Check if we have to break the operation and return a time out error
-// Gets : a pointer to the session structure
-// Returns : BOOL, True if we have to break
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-static BOOL HTTPIntrnSessionEvalTimeout(P_HTTP_SESSION pHTTPSession)
-{
-
- UINT32 nElapsedTime; // Integer for calculating the elapsed time
-
- // Validate the session pointer
- if(!pHTTPSession)
- {
- return HTTP_CLIENT_ERROR_INVALID_HANDLE;
- }
-
- // Calculate the elapsed time since the last call
- nElapsedTime = HTTPIntrnSessionGetUpTime() - pHTTPSession->HttpCounters.nActionStartTime;
- // If the elapsed time is greater then the time out value we should return true
- if(nElapsedTime >= pHTTPSession->HttpCounters.nActionTimeout)
- {
- return TRUE;
- }
-
- return FALSE;
-}
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClient.h b/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClient.h
deleted file mode 100644
index 9bee3ce7e..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClient.h
+++ /dev/null
@@ -1,306 +0,0 @@
-
-#ifndef _HTTP_CLIENT
-#define _HTTP_CLIENT
-
-#include "HTTPClientWrapper.h"
-#include "HTTPClientCommon.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Section : HTTP API global definitions
- // Last updated : 01/09/2005
- //
- ///////////////////////////////////////////////////////////////////////////////
-#ifdef _HTTP_BUILD_AMT
-#define CMSI_HTTPCLIENT_PROTOCOL_GUID {0x471b2c0e, 0x6137, 0x4d55, 0x92, 0x36, 0xdd, 0x0f, 0xdb, 0xc2, 0x52, 0xfb}
-#endif
-
- // Debug hook
- // #define _HTTP_DEBUGGING_ // Simply dumps more debugging data to the console
-
- // API Version
-#define HTTP_CLIENT_VERSION_MINOR 0
-#define HTTP_CLIENT_VERSION_MAJOR 1
-
- // Global default sizes
-#define HTTP_CLIENT_MAX_SEND_RECV_HEADERS 1024 // Maximum Send and receive buffers size
-#define HTTP_CLIENT_INIT_SEND_RECV_HEADERS 2048 // If we can resize the buffers this would be the initial size
-
-#define HTTP_CLIENT_MAX_USERNAME_LENGTH 16 // Maximum length the user name (host and proxy authentication)
-#define HTTP_CLIENT_MAX_PASSWORD_LENGTH 16 // Maximum length for the password
- // Maximum length for the base 64 encoded credentials (twice the size of the user name and password max parameters)
-#define HTTP_CLIENT_MAX_64_ENCODED_CRED ((HTTP_CLIENT_MAX_USERNAME_LENGTH + HTTP_CLIENT_MAX_PASSWORD_LENGTH) * 2) + 4
-#define HTTP_CLIENT_MAX_CHUNK_HEADER 64 // Maximum length for the received chunk header (hex - string) size
-#define HTTP_CLIENT_MAX_PROXY_HOST_LENGTH 64 // Maximum length for the proxy host name
-#define HTTP_CLIENT_MAX_TOKEN_LENGTH 512 // Maximum length for an HTTP token data (authentication header elements)
-#define HTTP_CLIENT_MAX_TOKEN_NAME_LENGTH 32 // Maximum length for an HTTP authorization token name ("qop")
-#define HTTP_CLIENT_MAX_HEADER_SEARCH_CLUE 1024 // Maximum length for a search clue string (Headers searching)
-#define HTTP_CLIENT_ALLOW_HEAD_VERB 0 // Can we use the HTTP HEAD verb in our outgoing requests?
-
-#define HTTP_CLIENT_MEMORY_RESIZABLE FALSE // Permission to dynamically resize the headers buffer
-#define HTTP_CLIENT_MEMORY_RESIZE_FACTOR 16 // Factor for memory resizing operation
-
-#define HTTP_CLIENT_DEFAULT_PORT 80 // Default HTTP port
-#define HTTP_CLIENT_DEFAULT_SSL_PORT 443 // Default HTTPS port
-#define HTTP_CLIENT_DEFAULT_VERB 0 // GET
-#define HTTP_CLIENT_DEFAULT_VER "HTTP/1.1" // We will send this in the outgoing header
-#define HTTP_CLIENT_DEFAULT_PROXY_VER "HTTP/1.0" // We will send this in the outgoing header (proxy)
-#define HTTP_CLIENT_DEFAULT_AGENT "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"
-#define HTTP_CLIENT_DEFAULT_TIMEOUT 30 // Default timeout in seconds
-#define HTTP_CLIENT_DEFAULT_KEEP_ALIVE 30 // Default Keep-alive value in seconds
-#define HTTP_CLIENT_DEFAULT_DIGEST_AUTH "MD5" // This is for bypassing a known bug in AMT05..
-#define HTTP_CLIENT_DEFAULT_PROXY_AUTH 1 // Basic
-
-#define HTTP_CLIENT_CRLF "\r\n" // End of line macro
-#define HTTP_CLIENT_CRLFX2 "\r\n\r\n" // Double End of line macro
-
- // HTTP Session internal API flags
- // Note: Not intended to be set the by the API user
-#define HTTP_CLIENT_FLAG_SECURE 0x00000010 // The session is secured using TLS
-#define HTTP_CLIENT_FLAG_URLANDPORT 0x00000020 // Url has a port within
-#define HTTP_CLIENT_FLAG_URLHTTPS 0x00000040 // Url has a https prefix
-#define HTTP_CLIENT_FLAG_USINGPROXY 0x00000080 // Operation will be performed using a proxy server
-#define HTTP_CLIENT_FLAG_CHUNKED 0x00000100 // The incoming data is chunked
-
- // HTTP Status codes
-#define HTTP_STATUS_OK 200 // The request has succeeded
-#define HTTP_STATUS_UNAUTHORIZED 401 // The request requires user authentic
-#define HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED 407 // The client must first authenticate itself with the proxy
-
- // Redirection (Note: there are more 30x codes, those are the most popular)
-#define HTTP_STATUS_OBJECT_MOVED 302 // Page redirection notification
-#define HTTP_STATUS_OBJECT_MOVED_PERMANENTLY 301 // Page redirection notification
-#define HTTP_STATUS_CONTINUE 100 // Page continue message
-
-
- // MIN AMX macro
-#define MIN(a,b) (((a) < (b)) ? (a) : (b))
-#define MAX(a,b) (((a) > (b)) ? (a) : (b))
- // HTTP timeout macro for selecting the default value if the caller passed 0 (no timeout) to the function
-#define HTTP_TIMEOUT(nTimeout) (((nTimeout) > (0)) ? (nTimeout) : (HTTP_CLIENT_DEFAULT_TIMEOUT))
-
- // 32 bit alignment macro
-#define ALIGN(size) ((size & 0xfffffffc) + ((size & 3) ? 4 : 0))
-
-
-#ifdef _HTTP_DEBUGGING_
- typedef VOID _stdcall E_HTTPDebug(const char *,const char*,UINT32,char *,...); // HTTPDebug hook function
-#endif
-
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Section : HTTP API internals structures
- // Last updated : 01/09/2005
- //
- ///////////////////////////////////////////////////////////////////////////////
-
- // Generic parameter structure contains a pointer to the buffer and its length
-
- typedef struct _HTTP_PARAM
- {
-
- CHAR *pParam;
- UINT32 nLength;
-
- } HTTP_PARAM;
-
- // HTTP socket events
- typedef struct _HTTP_CONNECTION
- {
-
- fd_set FDRead; // socket read event
- fd_set FDWrite; // socket write event
- fd_set FDError; // socket error event
- INT32 HttpSocket; // The underling socket
- UINT32 HttpStartTime; // Time stamp for the session
- UINT32 HttpClientPort; // For client side binding
- BOOL TlsNego; // TLS negotiation flag
-
- } HTTP_CONNECTION;
-
- // Request URL
- typedef struct _HTTP_URL
- {
-
- HTTP_PARAM UrlBsee; // a pointer and length to the "http" section of the URL
- HTTP_PARAM UrlHost; // a pointer and length to the host section of the URL
- HTTP_PARAM UrlPort; // a pointer and length to the PORT (if was specified section)
- HTTP_PARAM UrlRequest; // a pointer and length of the request section of the URL
- UINT16 nPort; // the PORT that we should use (could be default or the one found within the URL)
- CHAR Url[HTTP_CLIENT_MAX_URL_LENGTH]; // a buffer for the URL
-
- }HTTP_URL;
- // HTTP headers (incoming and outgoing)
- typedef struct _HTTP_HEADERS
- {
-
- HTTP_PARAM HeadersBuffer; // a pointer and length of the complete Headers (in\out) buffer
- HTTP_PARAM HeadersOut; // a pointer and length of the outgoing HTTP headers
- HTTP_PARAM HeadersIn; // a pointer and length of the incoming headers
- HTTP_PARAM HeaderSearch; // Index and pointer for the header search functions
- HTTP_VERB HttpVerb; // the HTTP verb that was used in the session
- HTTP_VERB HttpLastVerb; // the HTTP verb that was last transmited to the server
- CHAR SearchClue[HTTP_CLIENT_MAX_HEADER_SEARCH_CLUE];
- CHAR Verb[16]; // the actual string buffer of the HTTP verb
-
-
- }HTTP_HEADERS;
-
- // HTTP headers (parsed headers information)
- typedef struct _HTTP_HEADERS_INFO
- {
- HTTP_PARAM HttpRedirectURL; // Stores the redirection URL if we got a 301 or 303 return code
- UINT32 nHTTPStatus; // the HTTP status code (200 401 407 act')
- UINT32 nHTTPContentLength; // the Content length if specified of the returned data
- UINT32 nHTTPPostContentLength;// the Content-Length of the POSTed data (if known)
- BOOL Connection; // True = Keep alive or undefined, False = Closed
- BOOL ValidHeaders; // a flag that indicates if the incoming header ware parsed OK and found to be valid
- BOOL HaveCredentials; // a flag that indicates if we have credentials for the session
- CHAR HTTPVersion[16]; // HTTP version string buffer (for example: "HTTP 1.1")
-
- }HTTP_HEADERS_INFO;
-
- // Authentication parameters that ware extracted from the incoming headers
- typedef struct _HTTP_AUTH_HEADER
- {
-
- HTTP_PARAM AuthHeader; // the pointer and length of the authentication header
- UINT32 HTTP_AUTH_SCHEMA; // Its schema (could be any of the supported)
-
- }HTTP_AUTH_HEADER;
- // Proxy related data
- typedef struct _HTTP_PROXY
- {
- CHAR ProxyHost[HTTP_CLIENT_MAX_PROXY_HOST_LENGTH];
- CHAR ProxtUser[HTTP_CLIENT_MAX_USERNAME_LENGTH];
- CHAR ProxyPassword[HTTP_CLIENT_MAX_PASSWORD_LENGTH];
- UINT16 nProxyPort;
- CHAR AuthSchemaName[16]; // The authentication schema name (for string comperission)
- HTTP_AUTH_SCHEMA ProxyAuthSchema;
-
- }HTTP_PROXY;
-
- // HTTP User credentials
- typedef struct _HTTP_CREDENTIALS
- {
-
- CHAR CredUser[HTTP_CLIENT_MAX_USERNAME_LENGTH];
- CHAR CredPassword[HTTP_CLIENT_MAX_PASSWORD_LENGTH];
- CHAR AuthSchemaName[16]; // The authentication schema name (for string comperission)
- HTTP_AUTH_SCHEMA CredAuthSchema; // The schema that calle has selected for the session
- BOOL Authentication; // a flag that indicates that this session has requested a user authentication
-
- }HTTP_CREDENTIALS;
- // HTTP Counters
- typedef struct _HTTP_COUNTERS
- {
-
- UINT32 nRecivedHeaderLength; // Bytes count of the incoming header
- UINT32 nRecivedBodyLength; // Bytes count of the incoming body length
- UINT32 nRecivedChunkLength; // The next chunk length in bytes
- UINT32 nBytesToNextChunk; // How many bytes we have to read until we can expect the next chunk
- UINT32 nActionStartTime; // Operation start time
- UINT32 nActionTimeout; // Timeout for the session
- UINT32 nSentChunks; // Count of sent chunks
- UINT32 nSentBodyBytes; // Count of body bytes that ware sent
- UINT32 nSentHeaderBytes; // Count of header bytes thhat ware sent
-
- }HTTP_COUNTERS;
-
- // HTTP Client Session data
- typedef struct _HTTP_REQUEST
- {
-
- HTTP_URL HttpUrl;
- HTTP_HEADERS HttpHeaders;
- HTTP_HEADERS_INFO HttpHeadersInfo;
- HTTP_AUTH_HEADER HttpAuthHeader;
- HTTP_PROXY HttpProxy;
- HTTP_CREDENTIALS HttpCredentials;
- HTTP_CONNECTION HttpConnection;
- HTTP_COUNTERS HttpCounters;
- UINT32 HttpState;
- UINT32 HttpFlags;
-#ifdef _HTTP_DEBUGGING_
- E_HTTPDebug *pDebug;
-#endif
- } HTTP_SESSION, *P_HTTP_SESSION;
-
-
- // HTTP Type Definitions
- typedef UINT32 HTTP_SESSION_HANDLE;
- typedef UINT32 HTTP_CLIENT_SESSION_FLAGS;
-
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Section : HTTP API public interface
- // Last updated : 01/09/2005
- //
- ///////////////////////////////////////////////////////////////////////////////
-
-
- HTTP_SESSION_HANDLE HTTPClientOpenRequest (HTTP_CLIENT_SESSION_FLAGS Flags);
- UINT32 HTTPClientCloseRequest (HTTP_SESSION_HANDLE *pSession);
- UINT32 HTTPClientSetLocalConnection (HTTP_SESSION_HANDLE pSession, UINT32 nPort);
- UINT32 HTTPClientSetAuth (HTTP_SESSION_HANDLE pSession, HTTP_AUTH_SCHEMA AuthSchema, void *pReserved);
- UINT32 HTTPClientSetCredentials (HTTP_SESSION_HANDLE pSession, CHAR *pUserName, CHAR *pPassword);
- UINT32 HTTPClientSetProxy (HTTP_SESSION_HANDLE pSession, CHAR *pProxyName, UINT16 nPort, CHAR *pUserName, CHAR *pPassword);
- UINT32 HTTPClientSetVerb (HTTP_SESSION_HANDLE pSession, HTTP_VERB HttpVerb);
- UINT32 HTTPClientAddRequestHeaders (HTTP_SESSION_HANDLE pSession, CHAR *pHeaderName, CHAR *pHeaderData, BOOL nInsert);
- UINT32 HTTPClientSendRequest (HTTP_SESSION_HANDLE pSession, CHAR *pUrl, VOID *pData, UINT32 nDataLength, BOOL TotalLength, UINT32 nTimeout,UINT32 nClientPort);
- UINT32 HTTPClientWriteData (HTTP_SESSION_HANDLE pSession, VOID *pBuffer, UINT32 nBufferLength, UINT32 nTimeout);
- UINT32 HTTPClientRecvResponse (HTTP_SESSION_HANDLE pSession, UINT32 nTimeout);
- UINT32 HTTPClientReadData (HTTP_SESSION_HANDLE pSession, VOID *pBuffer, UINT32 nBytesToRead, UINT32 nTimeout, UINT32 *nBytesRecived);
- UINT32 HTTPClientGetInfo (HTTP_SESSION_HANDLE pSession, HTTP_CLIENT *HTTPClient);
-
- UINT32 HTTPClientFindFirstHeader (HTTP_SESSION_HANDLE pSession, CHAR *pSearchClue,CHAR *pHeaderBuffer, UINT32 *nLength);
- UINT32 HTTPClientGetNextHeader (HTTP_SESSION_HANDLE pSession, CHAR *pHeaderBuffer, UINT32 *nLength);
- UINT32 HTTPClientFindCloseHeader (HTTP_SESSION_HANDLE pSession);
-
-
-#ifdef _HTTP_DEBUGGING_
- UINT32 HTTPClientSetDebugHook (HTTP_SESSION_HANDLE pSession,E_HTTPDebug *pDebug);
-#endif
-
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Section : HTTP API private function
- // Last updated : 01/09/2005
- //
- ///////////////////////////////////////////////////////////////////////////////
-
- UINT32 HTTPIntrnResizeBuffer (P_HTTP_SESSION pHTTPSession, UINT32 nNewSize);
- UINT32 HTTPIntrnSetURL (P_HTTP_SESSION pHTTPSession, CHAR *pUrl,UINT32 nUrlLength);
- UINT32 HTTPIntrnConnectionClose (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnConnectionOpen (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnGetRemoteHeaders (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnGetRemoteChunkLength (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnSend (P_HTTP_SESSION pHTTPSession, CHAR *pData,UINT32 *nLength);
- UINT32 HTTPIntrnRecv (P_HTTP_SESSION pHTTPSession, CHAR *pData,UINT32 *nLength,BOOL PeekOnly);
- UINT32 HTTPIntrnParseAuthHeader (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnAuthHandler (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnAuthSendDigest (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnAuthSendBasic (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnAuthenticate (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnHeadersAdd (P_HTTP_SESSION pHTTPSession, CHAR *pHeaderName, UINT32 nNameLength, CHAR *pHeaderData, UINT32 nDataLength);
- UINT32 HTTPIntrnHeadersRemove (P_HTTP_SESSION pHTTPSession, CHAR *pHeaderName);
- UINT32 HTTPIntrnHeadersReceive (P_HTTP_SESSION pHTTPSession, UINT32 nTimeout);
- UINT32 HTTPIntrnHeadersSend (P_HTTP_SESSION pHTTPSession, HTTP_VERB HttpVerb);
- UINT32 HTTPIntrnHeadersParse (P_HTTP_SESSION pHTTPSession);
- UINT32 HTTPIntrnHeadersFind (P_HTTP_SESSION pHTTPSession, CHAR *pHeaderName, HTTP_PARAM *pParam,BOOL IncommingHeaders,UINT32 nOffset);
- UINT32 HTTPIntrnSessionReset (P_HTTP_SESSION pHTTPSession, BOOL EntireSession);
- UINT32 HTTPIntrnSessionGetUpTime (VOID);
- BOOL HTTPIntrnSessionEvalTimeout (P_HTTP_SESSION pHTTPSession);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //_HTTP_CLIENT
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientAuth.c b/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientAuth.c
deleted file mode 100644
index 64531a0a9..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientAuth.c
+++ /dev/null
@@ -1,664 +0,0 @@
-
-///////////////////////////////////////////////////////////////////////////////
-// Module Name:
-// HTTPClientAuth.c
-//
-// Abstract: Handle Digest, MD5 and 64 Bit Encoding
-//
-// Platform: Any that supports standard C calls
-///////////////////////////////////////////////////////////////////////////////
-
-#include "HTTPClientAuth.h"
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPBase64Encoder
-// Purpose : Converts a given string into a base64 encoded buffer.
-// Last updated : 01/09/200515/05/2005
-// Author Name : Eitan Michaelson
-// Notes :
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-void HTTPBase64Encoder(unsigned char *out, const unsigned char *in, int inlen)
-// [OUT] out A pointer to a char to hold the converted string
-// [IN] in String to convert
-// [IN] inlen Length of the string to be converted
-
-{
- for (; inlen >= 3; inlen -= 3)
- {
- *out++ = base64digits[in[0] >> 2];
- *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)];
- *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
- *out++ = base64digits[in[2] & 0x3f];
- in += 3;
- }
-
- if (inlen > 0)
- {
- unsigned char fragment;
-
- *out++ = base64digits[in[0] >> 2];
- fragment = (in[0] << 4) & 0x30;
-
- if (inlen > 1)
- fragment |= in[1] >> 4;
-
- *out++ = base64digits[fragment];
- *out++ = (inlen < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c];
- *out++ = '=';
- }
-
- *out = '\0';
-}
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPBase64Decoder
-// Purpose : Converts a given base64 string into a bytes buffer.
-// Last updated : 01/09/200515/05/2005
-// Author Name : Eitan Michaelson
-// Notes :
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPBase64Decoder(char *out, const char *in)
-{ // [OUT] out Where to save the converted string
- // [IN] in String to convert
-
- int len = 0;
- register unsigned char digit1, digit2, digit3, digit4;
-
- if (in[0] == '+' && in[1] == ' ')
- in += 2;
- if (*in == '\r')
- return(0);
-
- do {
-
- digit1 = in[0];
- if (DECODE64(digit1) == BAD)
- return(-1);
- digit2 = in[1];
- if (DECODE64(digit2) == BAD)
- return(-1);
- digit3 = in[2];
- if (digit3 != '=' && DECODE64(digit3) == BAD)
- return(-1);
- digit4 = in[3];
- if (digit4 != '=' && DECODE64(digit4) == BAD)
- return(-1);
- in += 4;
- *out++ = (DECODE64(digit1) << 2) | (DECODE64(digit2) >> 4);
- ++len;
- if (digit3 != '=')
- {
- *out++ = ((DECODE64(digit2) << 4) & 0xf0) | (DECODE64(digit3) >> 2);
- ++len;
- if (digit4 != '=')
- {
- *out++ = ((DECODE64(digit3) << 6) & 0xc0) | DECODE64(digit4);
- ++len;
- }
- }
- } while (*in && *in != '\r' && digit4 != '=');
-
- return (len);
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Purpose : The following code implements the calculations of H(A1), H(A2),
-// request-digest and response-digest
-// Last updated : 01/09/200515/05/2005
-// Author Name : Public Domain\RFC2617
-// Notes : Digest Access Authentication
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : GenerateCNonce
-// Purpose : Generates a 32 byte random hexadecimal string such as "4f6ba982..."
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes :
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-void HTTPDigestGenerateCNonce(char *outbuff)
-{
- int i,num;
- InitRandomeNumber();
- for(i = 0; i < 32; i++) {
- num = GetRandomeNumber();
- switch(num) {
- case 0: case 1: case 2: case 3: case 4: case 5:
- case 6: case 7: case 8: case 9:
- outbuff[i] = '0' + num;
- break;
- case 10: case 11: case 12: case 13: case 14: case 15:
- outbuff[i] = 'a' + (num-10);
- break;
- default:
- outbuff[i] = 'f';
- }
- }
- outbuff[32] = 0;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : DigestCvtHex
-// Purpose : CConvert to HEX
-// Last updated : 15/05/2005
-// Author Name : Public Domain\RFC2617
-// Notes :
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-void HTTPDigestCvtHex(IN HASH Bin,OUT HASHHEX Hex)
-{
- unsigned short i;
- unsigned char j;
-
- for (i = 0; i < HASHLEN; i++) {
- j = (Bin[i] >> 4) & 0xf;
- if (j <= 9)
- Hex[i*2] = (j + '0');
- else
- Hex[i*2] = (j + 'a' - 10);
- j = Bin[i] & 0xf;
- if (j <= 9)
- Hex[i*2+1] = (j + '0');
- else
- Hex[i*2+1] = (j + 'a' - 10);
- };
- Hex[HASHHEXLEN] = '\0';
-};
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : DigestCalcHA1
-// Purpose : Calculate H(A1) as per spec
-// Last updated : 15/05/2005
-// Author Name : Public Domain\RFC2617
-// Notes :
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-void HTTPDigestCalcHA1(
- IN int nAlg, /* 0 = MD5, 1 = MD5-Sess */
- IN char * pszUserName,
- IN char * pszRealm,
- IN int nRealmLength,
- IN char * pszPassword,
- IN char * pszNonce,
- IN int nNonceLength,
- IN char * pszCNonce,
- OUT HASHHEX SessionKey
- )
-{
- MD5_CTX Md5Ctx;
- HASH HA1;
- HASHHEX HASess;
- HASH HAll;
-
- HTTPMD5Init(&Md5Ctx);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszUserName, strlen(pszUserName)); //Daniel casting
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszRealm, nRealmLength); //Daniel
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszPassword, strlen(pszPassword)); //Daniel
- HTTPMD5Final((unsigned char *)HA1, &Md5Ctx);
-
- if (nAlg == 1) /* MD5-Sess */
- {
- HTTPDigestCvtHex(HA1, HASess);
- HTTPMD5Init(&Md5Ctx);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)HASess, HASHHEXLEN);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszNonce, nNonceLength);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszCNonce, strlen(pszCNonce));
- HTTPMD5Final((unsigned char *)HAll, &Md5Ctx);
- HTTPDigestCvtHex(HAll, SessionKey);
- return;
-
- }
-
- HTTPDigestCvtHex(HA1, SessionKey);
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : DigestCalcResponse
-// Purpose : Calculate request-digest/response-digest as per HTTP Digest spec
-// Last updated : 15/05/2005
-// Author Name : Public Domain\RFC2617
-// Notes :
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-void HTTPDigestCalcResponse(
- IN HASHHEX HA1, // H(A1)
- IN char * pszNonce, // nonce from server
- IN int nNonceLength, // Length of nonce
- IN char * pszNonceCount, // 8 hex digits
- IN char * pszCNonce, // client nonce */
- IN char * pszQop, // qop-value: "", "auth", "auth-int"
- IN int nQopLength, // qop param length
- IN char * pszMethod, // method from the request
- IN char * pszDigestUri, // requested URL
- IN int nDigestUriLebgth, // Uri Length
- IN HASHHEX HEntity, // H(entity body) if qop="auth-int"
- OUT HASHHEX Response // request-digest or response-digest
- )
-{
- MD5_CTX Md5Ctx;
- HASH HA2;
- HASH RespHash;
- HASHHEX HA2Hex;
-
- // Calculate H(A2)
- HTTPMD5Init(&Md5Ctx);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszMethod, strlen(pszMethod));
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszDigestUri, nDigestUriLebgth);
- if (stricmp(pszQop, "auth-int") == 0)
- {
-
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)HEntity, HASHHEXLEN);
- };
- HTTPMD5Final((unsigned char *)HA2, &Md5Ctx);
- HTTPDigestCvtHex(HA2, HA2Hex);
-
- // Calculate response
- HTTPMD5Init(&Md5Ctx);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)HA1, HASHHEXLEN);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszNonce, nNonceLength);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- if (*pszQop)
- {
-
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszNonceCount, strlen(pszNonceCount));
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszCNonce, strlen(pszCNonce));
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)pszQop, nQopLength);
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)":", 1);
- };
- HTTPMD5Update(&Md5Ctx, (const unsigned char *)HA2Hex, HASHHEXLEN);
- HTTPMD5Final((unsigned char *)RespHash, &Md5Ctx);
- HTTPDigestCvtHex(RespHash, Response);
-};
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Purpose : This code implements the MD5 message-digest algorithm.
-// The algorithm is due to Ron Rivest. This code was
-// written by Colin Plumb in 1993, no copyright is claimed.
-// This code is in the public domain; do with it what you wish.
-// Equivalent code is available from RSA Data Security, Inc.
-// This code has been tested against that, and is equivalent,
-// except that you don't need to include two pages of legalese
-// with every copy.
-// Usage : To compute the message digest of a chunk of bytes, declare an
-// MD5Context structure, pass it to MD5Init, call MD5Update as
-// needed on buffers full of bytes, and then call MD5Final, which
-// will fill a supplied 16-byte array with the digest.
-// Last updated : 15/05/2005
-// Author Name : Public Domain
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef HIGHFIRST
-#define HTTPMD5ByteReverse(buf, len) /* Nothing */
-#else
-void HTTPMD5ByteReverse(unsigned char *buf, unsigned longs);
-#ifndef ASM_MD5
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : ByteReverse
-// Purpose : Little\Big Endian support
-// Gets :
-// Returns :
-// Last updated : 15/05/2005
-// Author Name : Public Domain
-// Notes : this code is harmless on little-endian machines.
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-void HTTPMD5ByteReverse(unsigned char *buf, unsigned longs)
-{
- uint32 t;
- do {
- t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
- ((unsigned) buf[1] << 8 | buf[0]);
- *(uint32 *) buf = t;
- buf += 4;
- } while (--longs);
-}
-#endif
-#endif
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : MD5Init
-// Purpose : Initialize the MD5Context structure
-// Gets : MD5Context structure
-// Returns :
-// Last updated : 15/05/2005
-// Author Name : Public Domain
-// Notes : Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
-// initialization constants.
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-void HTTPMD5Init(struct MD5Context *ctx)
-{
- ctx->buf[0] = 0x67452301;
- ctx->buf[1] = 0xefcdab89;
- ctx->buf[2] = 0x98badcfe;
- ctx->buf[3] = 0x10325476;
-
- ctx->bits[0] = 0;
- ctx->bits[1] = 0;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : MD5Update
-// Purpose : Update the MD5Context structure with the target byte array
-// Gets : MD5Context structure, buffer and length
-// Returns :
-// Last updated : 15/05/2005
-// Author Name : Public Domain
-// Notes : Update context to reflect the concatenation of another buffer full of bytes.
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-void HTTPMD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
-{
- uint32 t;
-
- // Update bitcount
-
- t = ctx->bits[0];
- if ((ctx->bits[0] = t + ((uint32) len << 3)) < t)
- ctx->bits[1]++; // Carry from low to high
- ctx->bits[1] += len >> 29;
-
- t = (t >> 3) & 0x3f; // Bytes already in shsInfo->data
-
- // Handle any leading odd-sized chunks
-
- if (t) {
- unsigned char *p = (unsigned char *) ctx->in + t;
-
- t = 64 - t;
- if (len < t) {
- memcpy(p, buf, len);
- return;
- }
- memcpy(p, buf, t);
- HTTPMD5ByteReverse(ctx->in, 16);
- HTTPMD5Transform(ctx->buf, (uint32 *) ctx->in);
- buf += t;
- len -= t;
- }
- // Process data in 64-byte chunks
-
- while (len >= 64) {
- memcpy(ctx->in, buf, 64);
- HTTPMD5ByteReverse(ctx->in, 16);
- HTTPMD5Transform(ctx->buf, (uint32 *) ctx->in);
- buf += 64;
- len -= 64;
- }
-
- // Handle any remaining bytes of data.
-
- memcpy(ctx->in, buf, len);
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : MD5Final
-// Purpose : Finalize.
-// Gets : Output digest structure, MD5Context structure
-// Returns :
-// Last updated : 15/05/2005
-// Author Name : Public Domain
-// Notes : Final wrapup - pad to 64-byte boundary with the bit pattern
-// 1 0* (64-bit count of bits processed, MSB-first).
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
-
-
-void HTTPMD5Final(unsigned char digest[16], struct MD5Context *ctx)
-{
- unsigned count;
- unsigned char *p;
-
- // Compute number of bytes mod 64
- count = (ctx->bits[0] >> 3) & 0x3F;
-
- // Set the first char of padding to 0x80. This is safe since there is
- // always at least one byte free
- p = ctx->in + count;
- *p++ = 0x80;
-
- // Bytes of padding needed to make 64 bytes
- count = 64 - 1 - count;
-
- // Pad out to 56 mod 64 */
- if (count < 8) {
- // Two lots of padding: Pad the first block to 64 bytes
- memset(p, 0, count);
- HTTPMD5ByteReverse(ctx->in, 16);
- HTTPMD5Transform(ctx->buf, (uint32 *) ctx->in);
-
- // Now fill the next block with 56 bytes
- memset(ctx->in, 0, 56);
- } else {
- // Pad block to 56 bytes
- memset(p, 0, count - 8);
- }
- HTTPMD5ByteReverse(ctx->in, 14);
-
- // Append length in bits and transform
- ((uint32 *) ctx->in)[14] = ctx->bits[0];
- ((uint32 *) ctx->in)[15] = ctx->bits[1];
-
- HTTPMD5Transform(ctx->buf, (uint32 *) ctx->in);
- HTTPMD5ByteReverse((unsigned char *) ctx->buf, 4);
- memcpy(digest, ctx->buf, 16);
- memset(ctx, 0, sizeof(*ctx)); // In case it's sensitive
-}
-
-#ifndef ASM_MD5
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function :
-// Purpose : The four core functions - F1 is optimized somewhat
-// Last updated : 15/05/2005
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-// This is the central step in the MD5 algorithm.
-#ifdef __PUREC__
-#define MD5STEP(f, w, x, y, z, data, s) \
- ( w += f /*(x, y, z)*/ + data, w = w<<s | w>>(32-s), w += x )
-#else
-#define MD5STEP(f, w, x, y, z, data, s) \
- ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
-#endif
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Function : MD5Transform
-// Purpose : The core of the MD5 algorithm, this alters an existing MD5 hash to
-// reflect the addition of 16 longwords of new data. MD5Update blocks
-// the data and converts bytes into longwords for this routine.
-// Last updated : 15/05/2005
-// Author Name : Public Domain
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-void HTTPMD5Transform(uint32 buf[4], uint32 const in[16])
-{
- register uint32 a, b, c, d;
-
- a = buf[0];
- b = buf[1];
- c = buf[2];
- d = buf[3];
-
-#ifdef __PUREC__ // PureC Weirdness... (GG)
- MD5STEP(F1(b,c,d), a, b, c, d, in[0] + 0xd76aa478L, 7);
- MD5STEP(F1(a,b,c), d, a, b, c, in[1] + 0xe8c7b756L, 12);
- MD5STEP(F1(d,a,b), c, d, a, b, in[2] + 0x242070dbL, 17);
- MD5STEP(F1(c,d,a), b, c, d, a, in[3] + 0xc1bdceeeL, 22);
- MD5STEP(F1(b,c,d), a, b, c, d, in[4] + 0xf57c0fafL, 7);
- MD5STEP(F1(a,b,c), d, a, b, c, in[5] + 0x4787c62aL, 12);
- MD5STEP(F1(d,a,b), c, d, a, b, in[6] + 0xa8304613L, 17);
- MD5STEP(F1(c,d,a), b, c, d, a, in[7] + 0xfd469501L, 22);
- MD5STEP(F1(b,c,d), a, b, c, d, in[8] + 0x698098d8L, 7);
- MD5STEP(F1(a,b,c), d, a, b, c, in[9] + 0x8b44f7afL, 12);
- MD5STEP(F1(d,a,b), c, d, a, b, in[10] + 0xffff5bb1L, 17);
- MD5STEP(F1(c,d,a), b, c, d, a, in[11] + 0x895cd7beL, 22);
- MD5STEP(F1(b,c,d), a, b, c, d, in[12] + 0x6b901122L, 7);
- MD5STEP(F1(a,b,c), d, a, b, c, in[13] + 0xfd987193L, 12);
- MD5STEP(F1(d,a,b), c, d, a, b, in[14] + 0xa679438eL, 17);
- MD5STEP(F1(c,d,a), b, c, d, a, in[15] + 0x49b40821L, 22);
-
- MD5STEP(F2(b,c,d), a, b, c, d, in[1] + 0xf61e2562L, 5);
- MD5STEP(F2(a,b,c), d, a, b, c, in[6] + 0xc040b340L, 9);
- MD5STEP(F2(d,a,b), c, d, a, b, in[11] + 0x265e5a51L, 14);
- MD5STEP(F2(c,d,a), b, c, d, a, in[0] + 0xe9b6c7aaL, 20);
- MD5STEP(F2(b,c,d), a, b, c, d, in[5] + 0xd62f105dL, 5);
- MD5STEP(F2(a,b,c), d, a, b, c, in[10] + 0x02441453L, 9);
- MD5STEP(F2(d,a,b), c, d, a, b, in[15] + 0xd8a1e681L, 14);
- MD5STEP(F2(c,d,a), b, c, d, a, in[4] + 0xe7d3fbc8L, 20);
- MD5STEP(F2(b,c,d), a, b, c, d, in[9] + 0x21e1cde6L, 5);
- MD5STEP(F2(a,b,c), d, a, b, c, in[14] + 0xc33707d6L, 9);
- MD5STEP(F2(d,a,b), c, d, a, b, in[3] + 0xf4d50d87L, 14);
- MD5STEP(F2(c,d,a), b, c, d, a, in[8] + 0x455a14edL, 20);
- MD5STEP(F2(b,c,d), a, b, c, d, in[13] + 0xa9e3e905L, 5);
- MD5STEP(F2(a,b,c), d, a, b, c, in[2] + 0xfcefa3f8L, 9);
- MD5STEP(F2(d,a,b), c, d, a, b, in[7] + 0x676f02d9L, 14);
- MD5STEP(F2(c,d,a), b, c, d, a, in[12] + 0x8d2a4c8aL, 20);
-
- MD5STEP(F3(b,c,d), a, b, c, d, in[5] + 0xfffa3942L, 4);
- MD5STEP(F3(a,b,c), d, a, b, c, in[8] + 0x8771f681L, 11);
- MD5STEP(F3(d,a,b), c, d, a, b, in[11] + 0x6d9d6122L, 16);
- MD5STEP(F3(c,d,a), b, c, d, a, in[14] + 0xfde5380cL, 23);
- MD5STEP(F3(b,c,d), a, b, c, d, in[1] + 0xa4beea44L, 4);
- MD5STEP(F3(a,b,c), d, a, b, c, in[4] + 0x4bdecfa9L, 11);
- MD5STEP(F3(d,a,b), c, d, a, b, in[7] + 0xf6bb4b60L, 16);
- MD5STEP(F3(c,d,a), b, c, d, a, in[10] + 0xbebfbc70L, 23);
- MD5STEP(F3(b,c,d), a, b, c, d, in[13] + 0x289b7ec6L, 4);
- MD5STEP(F3(a,b,c), d, a, b, c, in[0] + 0xeaa127faL, 11);
- MD5STEP(F3(d,a,b), c, d, a, b, in[3] + 0xd4ef3085L, 16);
- MD5STEP(F3(c,d,a), b, c, d, a, in[6] + 0x04881d05L, 23);
- MD5STEP(F3(b,c,d), a, b, c, d, in[9] + 0xd9d4d039L, 4);
- MD5STEP(F3(a,b,c), d, a, b, c, in[12] + 0xe6db99e5L, 11);
- MD5STEP(F3(d,a,b), c, d, a, b, in[15] + 0x1fa27cf8L, 16);
- MD5STEP(F3(c,d,a), b, c, d, a, in[2] + 0xc4ac5665L, 23);
-
- MD5STEP(F4(b,c,d), a, b, c, d, in[0] + 0xf4292244L, 6);
- MD5STEP(F4(a,b,c), d, a, b, c, in[7] + 0x432aff97L, 10);
- MD5STEP(F4(d,a,b), c, d, a, b, in[14] + 0xab9423a7L, 15);
- MD5STEP(F4(c,d,a), b, c, d, a, in[5] + 0xfc93a039L, 21);
- MD5STEP(F4(b,c,d), a, b, c, d, in[12] + 0x655b59c3L, 6);
- MD5STEP(F4(a,b,c), d, a, b, c, in[3] + 0x8f0ccc92L, 10);
- MD5STEP(F4(d,a,b), c, d, a, b, in[10] + 0xffeff47dL, 15);
- MD5STEP(F4(c,d,a), b, c, d, a, in[1] + 0x85845dd1L, 21);
- MD5STEP(F4(b,c,d), a, b, c, d, in[8] + 0x6fa87e4fL, 6);
- MD5STEP(F4(a,b,c), d, a, b, c, in[15] + 0xfe2ce6e0L, 10);
- MD5STEP(F4(d,a,b), c, d, a, b, in[6] + 0xa3014314L, 15);
- MD5STEP(F4(c,d,a), b, c, d, a, in[13] + 0x4e0811a1L, 21);
- MD5STEP(F4(b,c,d), a, b, c, d, in[4] + 0xf7537e82L, 6);
- MD5STEP(F4(a,b,c), d, a, b, c, in[11] + 0xbd3af235L, 10);
- MD5STEP(F4(d,a,b), c, d, a, b, in[2] + 0x2ad7d2bbL, 15);
- MD5STEP(F4(c,d,a), b, c, d, a, in[9] + 0xeb86d391L, 21);
-#else
- MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
- MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
- MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
- MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
- MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
- MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
- MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
- MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
- MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
- MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
- MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
- MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
- MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
- MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
- MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
- MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
- MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
- MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
- MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
- MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
- MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
- MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
- MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
- MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
- MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
- MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
- MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
- MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
- MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
- MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
- MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
- MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
- MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
- MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
- MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
- MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
- MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
- MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
- MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
- MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
- MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
- MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
- MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
- MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
- MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
- MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
- MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
- MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
- MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
- MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
- MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
- MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
- MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
- MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
- MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
- MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
- MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
- MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
- MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
- MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
- MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
- MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
- MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
- MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-#endif
-
- buf[0] += a;
- buf[1] += b;
- buf[2] += c;
- buf[3] += d;
-}
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientAuth.h b/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientAuth.h
deleted file mode 100644
index daa23af92..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientAuth.h
+++ /dev/null
@@ -1,89 +0,0 @@
-
-#ifndef HTTP_CLIENT_AUTH_H
-#define HTTP_CLIENT_AUTH_H
-
-#include "HTTPClientWrapper.h" // Cross platform support
-
-
-#define HASHLEN 16
-#define HASHHEXLEN 32
-#define IN
-#define OUT
-
-typedef char HASH[HASHLEN];
-typedef char HASHHEX[HASHHEXLEN+1];
-typedef unsigned long uint32;
-
-// Base 64 Related
-#define DECODE64(c) (isascii(c) ? base64val[c] : BAD)
-#define BAD -1
-
-static const char base64digits[] =
-"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-static const char base64val[] = {
-BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
-BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
-BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD, 62, BAD,BAD,BAD, 63,
-52, 53, 54, 55, 56, 57, 58, 59, 60, 61,BAD,BAD, BAD,BAD,BAD,BAD,
-BAD, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
-15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,BAD, BAD,BAD,BAD,BAD,
-BAD, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,BAD, BAD,BAD,BAD,BAD
-};
-
-void HTTPBase64Encoder(unsigned char *out, const unsigned char *in, int inlen);
-int HTTPBase64Decoder(char *out, const char *in);
-
-
-// Digest Related
-// Generates a 32 byte random hexadecimal string such as "4f6ba982..."
-void HTTPDigestGenerateCNonce(char *outbuff);
-
-// Calculate H(A1) as per HTTP Digest spec
-void HTTPDigestCalcHA1(
- IN int nAlg, /* 0 = MD5, 1 = MD5-Sess */
- IN char * pszUserName,
- IN char * pszRealm,
- IN int nRealmLength,
- IN char * pszPassword,
- IN char * pszNonce,
- IN int nNonceLength,
- IN char * pszCNonce,
- OUT HASHHEX SessionKey
- );
-
-// Calculate request-digest/response-digest as per HTTP Digest spec
-void HTTPDigestCalcResponse(
- IN HASHHEX HA1, // H(A1)
- IN char * pszNonce, // nonce from server
- IN int nNonceLength, // Length of nonce
- IN char * pszNonceCount, // 8 hex digits
- IN char * pszCNonce, // client nonce
- IN char * pszQop, // qop-value: "", "auth", "auth-int"
- IN int nQopLength, // qop param length
- IN char * pszMethod, // method from the request
- IN char * pszDigestUri, // requested URL
- IN int nDigestUriLebgth, // Uri Length
- IN HASHHEX HEntity, // H(entity body) if qop="auth-int"
- OUT HASHHEX Response // request-digest or response-digest
- );
-
-// MD5 structures and functions
-struct MD5Context
-{
- uint32 buf[4];
- uint32 bits[2];
- unsigned char in[64];
-};
-
-void HTTPMD5Init (struct MD5Context *context);
-void HTTPMD5Update (struct MD5Context *context, unsigned char const *buf,unsigned len);
-void HTTPMD5Final (unsigned char digest[16], struct MD5Context *context);
-void HTTPMD5Transform (uint32 buf[4], uint32 const in[16]);
-
-
-// This is needed to make RSAREF happy on some MS-DOS compilers.
-typedef struct MD5Context MD5_CTX;
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientCommon.h b/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientCommon.h
deleted file mode 100644
index 9c6c36b24..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientCommon.h
+++ /dev/null
@@ -1,120 +0,0 @@
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Module Name:
-// CmsiHTTPClientCommon.h
-//
-// Abstract: Coomon structs and types for the HTTP protocol API
-// Author: Eitan Michaelso
-// Version: 1.0
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _HTTPCLIENT_PROTOCOL_H_
-#define _HTTPCLIENT_PROTOCOL_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- // Global default sizes
-#define HTTP_CLIENT_MAX_URL_LENGTH 512 // Maximum length for an HTTP Url parameter
-
- // HTTP Session flags (Public flags)
-#define HTTP_CLIENT_FLAG_KEEP_ALIVE 0x00000001 // Set the keep alive header
-#define HTTP_CLIENT_FLAG_SEND_CHUNKED 0x00000002 // The outgoing should chunked
-#define HTTP_CLIENT_FLAG_NO_CACHE 0x00000004 // Set the no cache header
-#define HTTP_CLIENT_FLAG_ASYNC 0x00000008 // Currently not implemented
-
- // HTTP status internal flags
-#define HTTP_CLIENT_STATE_PRE_INIT 0x00000000 // Starting stage
-#define HTTP_CLIENT_STATE_INIT 0x00000001 // API was initialized (memory was allocated)
-#define HTTP_CLIENT_STATE_URL_PARSED 0x00000002 // Url was parsed
-#define HTTP_CLIENT_STATE_HOST_CONNECTED 0x00000004 // HEAD verb was sent
-#define HTTP_CLIENT_STATE_HEAD_SENT 0x00000008 // Post verb was sent
-#define HTTP_CLIENT_STATE_POST_SENT 0x00000010 // HTTP requet was sent
-#define HTTP_CLIENT_STATE_REQUEST_SENT 0x00000020 // HTTP request was sent
-#define HTTP_CLIENT_STATE_HEADERS_RECIVED 0x00000040 // Headers ware recived from the server
-#define HTTP_CLIENT_STATE_HEADERS_PARSED 0x00000080 // HTTP headers ware parsed
-#define HTTP_CLIENT_STATE_HEADERS_OK 0x00000100 // Headers status was OK
-
- // HTTP Return codes
-#define HTTP_CLIENT_SUCCESS 0 // HTTP Success status
-
-#define HTTP_CLIENT_UNKNOWN_ERROR 1 // Unknown error
-#define HTTP_CLIENT_ERROR_INVALID_HANDLE 2 // an Invalid handle or possible bad pointer was passed to a function
-#define HTTP_CLIENT_ERROR_NO_MEMORY 3 // Buffer too small or a failure while in memory allocation
-#define HTTP_CLIENT_ERROR_SOCKET_INVALID 4 // an attempt to use an invalid socket handle was made
-#define HTTP_CLIENT_ERROR_SOCKET_CANT_SET 5 // Can't send socket parameters
-#define HTTP_CLIENT_ERROR_SOCKET_RESOLVE 6 // Error while resolving host name
-#define HTTP_CLIENT_ERROR_SOCKET_CONNECT 7 // Error while connecting to the remote server
-#define HTTP_CLIENT_ERROR_SOCKET_TIME_OUT 8 // socket time out error
-#define HTTP_CLIENT_ERROR_SOCKET_RECV 9 // Error while receiving data
-#define HTTP_CLIENT_ERROR_SOCKET_SEND 10 // Error while sending data
-#define HTTP_CLIENT_ERROR_HEADER_RECV 11 // Error while receiving the remote HTTP headers
-#define HTTP_CLIENT_ERROR_HEADER_NOT_FOUND 12 // Could not find element within header
-#define HTTP_CLIENT_ERROR_HEADER_BIG_CLUE 13 // The headers search clue was too large for the internal API buffer
-#define HTTP_CLIENT_ERROR_HEADER_NO_LENGTH 14 // No content length was specified for the outgoing data. the caller should specify chunking mode in the session creation
-#define HTTP_CLIENT_ERROR_CHUNK_TOO_BIG 15 // The HTTP chunk token that was received from the server was too big and possibly wrong
-#define HTTP_CLIENT_ERROR_AUTH_HOST 16 // Could not authenticate with the remote host
-#define HTTP_CLIENT_ERROR_AUTH_PROXY 17 // Could not authenticate with the remote proxy
-#define HTTP_CLIENT_ERROR_BAD_VERB 18 // Bad or not supported HTTP verb was passed to a function
-#define HTTP_CLIENT_ERROR_LONG_INPUT 19 // a function received a parameter that was too large
-#define HTTP_CLIENT_ERROR_BAD_STATE 20 // The session state prevents the current function from proceeding
-#define HTTP_CLIENT_ERROR_CHUNK 21 // Could not parse the chunk length while in chunked transfer
-#define HTTP_CLIENT_ERROR_BAD_URL 22 // Could not parse curtail elements from the URL (such as the host name, HTTP prefix act')
-#define HTTP_CLIENT_ERROR_BAD_HEADER 23 // Could not detect key elements in the received headers
-#define HTTP_CLIENT_ERROR_BUFFER_RSIZE 24 // Error while attempting to resize a buffer
-#define HTTP_CLIENT_ERROR_BAD_AUTH 25 // Authentication schema is not supported
-#define HTTP_CLIENT_ERROR_AUTH_MISMATCH 26 // The selected authentication schema does not match the server response
-#define HTTP_CLIENT_ERROR_NO_DIGEST_TOKEN 27 // an element was missing while parsing the digest authentication challenge
-#define HTTP_CLIENT_ERROR_NO_DIGEST_ALG 28 // Digest algorithem could be MD5 or MD5-sess other types are not supported
-#define HTTP_CLIENT_ERROR_SOCKET_BIND 29 // Binding error
-#define HTTP_CLIENT_ERROR_TLS_NEGO 30 // Tls negotiation error
-#define HTTP_CLIENT_ERROR_NOT_IMPLEMENTED 64 // Feature is not (yet) implemented
-#define HTTP_CLIENT_EOS 1000 // HTTP end of stream message
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Section : HTTP API structures
- // Last updated : 01/09/2005
- //
- ///////////////////////////////////////////////////////////////////////////////
-
- // HTTP Supported authentication methods
- typedef enum _HTTP_AUTH_SCHEMA
- {
- AuthSchemaNone = 0,
- AuthSchemaBasic,
- AuthSchemaDigest,
- AuthSchemaKerberos,
- AuthNotSupported
-
- } HTTP_AUTH_SCHEMA;
-
- // HTTP supported verbs
- typedef enum _HTTP_VERB
- {
- VerbGet = 0,
- VerbHead,
- VerbPost,
- VerbNotSupported
- // Note: others verb such as connect and put are currently not supported
-
- } HTTP_VERB;
-
- // Data structure that the caller can request at any time that will include some information regarding the session
- typedef struct _HTTP_CLIENT
- {
- UINT32 HTTPStatusCode; // HTTP Status code (200 OK)
- UINT32 RequestBodyLengthSent; // Total bytes sent (body only)
- UINT32 ResponseBodyLengthReceived; // Total bytes received (body only)
- UINT32 TotalResponseBodyLength; // as extracted from the content-length" header
- UINT32 HttpState;
- } HTTP_CLIENT;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _HTTPCLIENT_PROTOCOL_H_
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientString.c b/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientString.c
deleted file mode 100644
index 4d408cdb6..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientString.c
+++ /dev/null
@@ -1,422 +0,0 @@
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Module Name:
-// HTTPClientString.c
-//
-// Abstract: Helper function (string parsing related) for HTTPClient.c module
-//
-// Platform: Any that supports standard C calls
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include "HTTPClient.h"
-#include "HTTPClientWrapper.h" // Cross platform support
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPStrInsensitiveCompare
-// Purpose : Same as strcmp() only case insensitive
-// Returns : BOOL - TRUE if destination string is identical to the source
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-BOOL HTTPStrInsensitiveCompare(CHAR *pSrc, // [IN] a pointer to the source string
- CHAR* pDest, // [IN] a pointer to the string we should search for
- UINT32 nLength) // [IN] The bytes range we should search in
-{
-
- // Lower case comparison
- UINT32 nPosition;
- UINT32 nDestLength;
- CHAR *pSrcIn, *pDestIn;
- CHAR a,b;
- pSrcIn = pSrc;
- pDestIn = pDest;
-
- nPosition = 0;
- nDestLength = strlen(pDest);
-
- if(nLength == 0)
- {
- nLength = strlen(pSrc);
- }
- if(nDestLength != nLength)
- {
- return FALSE;
- }
-
- while(pSrcIn || pDestIn)
- {
-
- if(nLength > 0 && nPosition == nLength)
- {
- return TRUE;
- }
-
- a = *pSrcIn;
- b = *pDestIn;
-
-
- if(*pSrcIn >= 64 && *pSrcIn <= 90)
- {
- // Upper case to lower case
- a = *pSrcIn + 32;
- }
-
- if(*pDestIn >= 64 && *pDestIn <= 90)
- {
- // Upper case to lower case
- b = *pDestIn + 32;
- }
-
- if(a != b)
- {
- return FALSE;
- }
-
- pSrcIn++;
- pDestIn++;
- nPosition++;
- }
- return TRUE;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPStrExtract
-// Purpose : Extract a string by placing null in the offset parameter
-// Returns : a pointer to the new string
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-CHAR HTTPStrExtract(CHAR *pParam, // [IN] a pointer to the input parameter
- UINT32 nOffset, // [IN] the offset position (where we should null terminate the string)
- CHAR Restore) // [IN] if this is not 0 we should restore it (instead of the null)
- // and reverse the effect.
-{
- CHAR Replaced;
-
- if(!pParam)
- {
- return 0;
- }
- // We should restore
- if(Restore != 0)
- {
- pParam[nOffset] = Restore;
- return Restore;
- }
- else
- {
- Replaced = pParam[nOffset];
- pParam[nOffset] = 0;
- return Replaced;
-
- }
-
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPStrSearch
-// Purpose : Search a string within another and return its pointer and a length
-// Returns : BOOL - TRUE on success
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-BOOL HTTPStrSearch(CHAR *pSrc, // [IN] The source string
- CHAR *pSearched, // [IN] Parameter to search for
- UINT32 nOffset, // [IN] Offset from the source string start position
- UINT32 nScope, // [IN] Length in bytes we should search in
- HTTP_PARAM *HttpParam) // [IN OUT] The Pointer\Length value that will be returned on success
-{
-
- CHAR *pSrcStart;
- CHAR *pDstStart;
- CHAR nOrigCharacter;
- UINT32 nPosition = 0;
-
- do
- {
- pSrcStart = pSrc + nOffset;
- nOrigCharacter = pSrcStart[nScope];
-
- // Temporarily null terminate
- pSrcStart[nScope] = 0;
-
- pDstStart = strstr(pSrcStart,pSearched);
- if(!pDstStart)
- {
- break;
- }
-
- nPosition = pDstStart - pSrcStart + 1;
-
- } while(0);
-
- // Remove the null termination
- pSrcStart[nScope] = nOrigCharacter;
-
- if(!nPosition)
- {
- return FALSE;
- }
-
- if(HttpParam)
- {
-
- HttpParam->nLength = nPosition -1;
- HttpParam->pParam = pSrcStart;
- }
-
- return TRUE;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPStrCaseStr
-// Purpose : Same as strstr() only case insensitive
-// Returns : a pointer to the position of the searched string (or 0 on error)
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-CHAR *HTTPStrCaseStr(const char *pSrc,UINT32 nSrcLength,const char *pFind)
-{
- const char *ptr = pSrc;
- const char *ptr2;
- UINT32 iLength = 0;
-
- while(1)
- {
- if(iLength >= nSrcLength)
- {
- break;
- }
- ptr = strchr(pSrc,toupper(*pFind));
- ptr2 = strchr(pSrc,tolower(*pFind));
- if (!ptr)
- {
- ptr = ptr2;
- }
- if (!ptr)
- {
- break;
- }
- if (ptr2 && (ptr2 < ptr)) {
- ptr = ptr2;
- }
- if (!strnicmp(ptr,pFind,strlen(pFind)))
- {
- return (char *) ptr;
- }
- pSrc = ptr+1;
- iLength++;
- }
- return 0;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPStrCaseStr
-// Purpose :
-// Gets :
-// Returns :
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-
-CHAR* HTTPStrGetToken (CHAR *pSrc, UINT32 nSrcLength, CHAR *pDest, UINT32 *nDestLength)
-{
-
- // Get text between the ":" and \r\n or end of string.
- CHAR *pStart; // = pSrc; //Jerome: is reassigned few lines later
- CHAR *pEnd;
- UINT32 nTokenLength = 0;
- UINT32 nPosition = 0;
-
- pStart = strchr(pSrc,':') + 1;
- if(pStart)
- {
- pEnd = pStart ;
- // First pass, count required space
- while ((*pEnd) && (*pEnd != '\r') && (*pEnd != '\n'))
- {
- if(*pEnd != 0x20)
- {
- nTokenLength++;
- }
-
- if(nSrcLength && nPosition > nSrcLength)
- {
- break;
- }
- pEnd++;
- nPosition++;
- }
-
- if(nTokenLength > *(nDestLength))
- {
- *(nDestLength) = nTokenLength;
- pDest = NULL;
- return pDest;
- }
-
- // Second pass copy into the destination buffer
- pEnd = pStart;
- *(nDestLength) = nTokenLength;
- nTokenLength = 0;
- // First pass, count required space
- while ((*pEnd) && (*pEnd != '\r') && (*pEnd != '\n'))
- {
- if(*pEnd != 0x20)
- {
- pDest[nTokenLength++] = *pEnd;
- }
- pEnd++;
- }
-
- pDest[nTokenLength] = 0;
-
- }
-
-
- return pDest;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function : HTTPStrGetDigestToken
-// Purpose :
-// Gets :
-// Returns :
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-UINT32 HTTPStrGetDigestToken (HTTP_PARAM pParamSrc, CHAR *pSearched, HTTP_PARAM *pParamDest)
-{
-
- CHAR Token[HTTP_CLIENT_MAX_TOKEN_NAME_LENGTH];
- CHAR *pPtrStart, *pPtrEnd, *pPtrEndSrc;
- BOOL Brackets = FALSE;
-
- // Build the searched token
- memset(Token,0x00,HTTP_CLIENT_MAX_TOKEN_NAME_LENGTH);
- strcpy(Token,pSearched);
- strcat(Token,"=");
-
- // Reset destination values
- pParamDest->nLength = 0;
- pParamDest->pParam = 0;
-
- pPtrEndSrc = pParamSrc.pParam + pParamSrc.nLength;
-
- pPtrStart = HTTPStrCaseStr(pParamSrc.pParam,pParamSrc.nLength,Token);
- if(pPtrStart)
- {
- // Found the token so jump to the end of it
- pPtrStart += strlen(Token);
- // jump passed any spaces that may be
- while ((*pPtrStart) && (*pPtrStart == 0x20) && (pPtrStart != pPtrEndSrc)) pPtrStart++;
- // Any Brackets around the string?
- if(*pPtrStart == 0x22) Brackets = TRUE;
-
-
- switch (Brackets)
- {
-
- case TRUE:
- // Find the next brackets
- pPtrStart++;
- pPtrEnd = pPtrStart;
- while ((*pPtrEnd) && (*pPtrEnd != 0x22) && (*pPtrEnd != 0x0d) && (*pPtrEnd != 0x0a) && (pPtrStart != pPtrEndSrc)) pPtrEnd++;
- break;
-
- case FALSE:
- // Find the next space or comma (0x2c)
- pPtrEnd = pPtrStart;
- while ((*pPtrEnd) && (*pPtrEnd != 0x20) && (*pPtrEnd != 0x2c) && (*pPtrEnd != 0x0d) && (*pPtrEnd != 0x0a) && (pPtrStart != pPtrEndSrc)) pPtrEnd++;
- break;
-
- };
-
- pParamDest->nLength = (pPtrEnd - pPtrStart);
- pParamDest->pParam = pPtrStart;
-
- return HTTP_CLIENT_SUCCESS;
- }
- return HTTP_CLIENT_ERROR_NO_DIGEST_TOKEN;
-
-
-}
-
-/////////////////////////////////////////////////////////////////////////////////
-// Function : HTTPStrHToL
-// Purpose : Convert a hex string "0x00" to long 0
-// Gets : a pointer to the Hex string
-// Last updated : 15/05/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-
-UINT32 HTTPStrHToL (CHAR * s)
-{
- UINT32 i , nn, digit;
- UINT32 n ;
-
- n = i = nn = 0;
- do
- {
- if ( isalnum(s[i]) ) {
- s[i] = toupper(s[i]) ;
- if (s[i] == 'X') nn=n=0; else {
- digit = (isalpha(s[i]) ? (s[i] - 'A' + 10) : s[i] - '0') ;
- if ( digit > 15 ) digit = 15;
- n = n * 16 + digit;
- if (n |= 0) nn++;
- if (nn == 8) break;}
- }
- i++;
- }
- while ( s[i] |= 0 );
- return n ;
-}
-
-/////////////////////////////////////////////////////////////////////////////////
-// Function : HTTPStrLToH
-// Purpose : Convert a long to hex string 0 to "00"
-// Gets :
-// Last updated : 15/05/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-CHAR* HTTPStrLToH (CHAR * dest,UINT32 nSrc)
-{
-
- char *hex = "0123456789abcdef";
- INT i;
-
- if (nSrc == 0) {
- dest[0] = '0';
- dest[1] = 0;
- }
- else
- {
- for(i = 28; ((nSrc >> i) && 0xf) == 0; i -= 4);
- for(; i >= 0; i -= 4) {
- *dest++ = hex[(nSrc >> i) & 0xf];
- }
- *dest = 0;
- }
-
- return dest;
-}
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientString.h b/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientString.h
deleted file mode 100644
index 23dd45a45..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientString.h
+++ /dev/null
@@ -1,23 +0,0 @@
-
-#ifndef _HTTP_CLIENT_STRING
-#define _HTTP_CLIENT_STRING
-
-#include "HTTPClientWrapper.h" // Cross platform support
-#include "HTTPClient.h"
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Section : HTTP Api global definitions
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-BOOL HTTPStrInsensitiveCompare (CHAR *pSrc, CHAR* pDest, UINT32 nLength);
-BOOL HTTPStrSearch (CHAR *pSrc, CHAR *pSearched, UINT32 nOffset, UINT32 nScope,HTTP_PARAM *HttpParam);
-CHAR HTTPStrExtract (CHAR *pParam,UINT32 nOffset,CHAR Restore);
-CHAR* HTTPStrCaseStr (CHAR *pSrc, UINT32 nSrcLength, CHAR *pFind);
-CHAR* HTTPStrGetToken (CHAR *pSrc, UINT32 nSrcLength, CHAR *pDest, UINT32 *nDestLength);
-UINT32 HTTPStrGetDigestToken (HTTP_PARAM pParamSrc, CHAR *pSearched, HTTP_PARAM *pParamDest);
-UINT32 HTTPStrHToL (CHAR * s);
-CHAR* HTTPStrLToH (CHAR * dest,UINT32 nSrc);
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientWrapper.c b/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientWrapper.c
deleted file mode 100644
index fe539ab65..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientWrapper.c
+++ /dev/null
@@ -1,348 +0,0 @@
-
-#include "HTTPClientWrapper.h"
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : Stdc: HTTPWrapperIsAscii
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : Same as stdc: isascii
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperIsAscii(int c)
-{
- return (!(c & ~0177));
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : Stdc: HTTPWrapperToUpper
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : Convert character to uppercase.
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperToUpper(int c)
-{
- // -32
- if(HTTPWrapperIsAscii(c) > 0)
- {
- if(c >= 97 && c <= 122)
- {
- return (c - 32);
- }
- }
-
- return c;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : Stdc: HTTPWrapperToLower
-// Last updated : 13/06/2006
-// Author Name : Eitan Michaelson
-// Notes : Convert character to lowercase.
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperToLower(int c)
-{
- // +32
- if(HTTPWrapperIsAscii(c) > 0)
- {
- if(c >= 65 && c <= 90)
- {
- return (c + 32);
- }
- }
-
- return c;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : Stdc: isalpha
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : returns nonzero if c is a particular representation of an alphabetic character
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperIsAlpha(int c)
-{
-
- if(HTTPWrapperIsAscii(c) > 0)
- {
- if( (c >= 97 && c <= 122) || (c >= 65 && c <= 90))
- {
- return c;
- }
- }
- return 0;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : Stdc: isalnum
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : returns nonzero if c is a particular representation of an alphanumeric character
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperIsAlNum(int c)
-{
- if(HTTPWrapperIsAscii(c) > 0)
- {
-
- if(HTTPWrapperIsAlpha(c) > 0)
- {
- return c;
- }
-
- if( c >= 48 && c <= 57)
- {
- return c;
- }
-
- }
- return 0;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : HTTPWrapper_itoa
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : same as stdc itoa() // hmm.. allmost the same
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-char* HTTPWrapperItoa(char *s,int a)
-{
-
- unsigned int b;
- if(a > 2147483647)
- {
- return 0; // overflow
- }
-
- if (a < 0) b = -a, *s++ = '-';
- else b = a;
- for(;a;a=a/10) s++;
- for(*s='\0';b;b=b/10) *--s=b%10+'0';
- return s;
-
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : HTTPWrapper_ShutDown
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : Handles parameter changes in the socket shutdown() function in AMT
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-int HTTPWrapperShutDown (int s,int how)
-{
- return shutdown(s,how);
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : HTTPWrapper_GetSocketError
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : WSAGetLastError Wrapper (Win32 Specific)
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperGetSocketError (int s)
-{
-
- return WSAGetLastError();
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : HTTPWrapper_GetHostByName
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : gethostbyname for Win32 (supports the AMT edition of the function)
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-unsigned long HTTPWrapperGetHostByName(char *name,unsigned long *address)
-{
- HTTP_HOSTNET *HostEntry;
- int iPos = 0, iLen = 0,iNumPos = 0,iDots =0;
- long iIPElement;
- char c = 0;
- char Num[4];
- int iHostType = 0; // 0 : numeric IP
-
- // Check if the name is an IP or host
- iLen = strlen(name);
- for(iPos = 0; iPos <= iLen;iPos++)
- {
- c = name[iPos];
- if((c >= 48 && c <= 57) || (c == '.') )
- {
- // c is numeric or dot
- if(c != '.')
- {
- // c is numeric
- if(iNumPos > 3)
- {
- iHostType++;
- break;
- }
- Num[iNumPos] = c;
- Num[iNumPos + 1] = 0;
- iNumPos ++;
- }
- else
- {
- iNumPos = 0;
- iDots++;
- iIPElement = atol(Num);
- if(iIPElement > 256 || iDots > 3)
- {
- return 0; // error invalid IP
- }
- }
- }
- else
- {
- break; // this is an alpha numeric address type
- }
- }
-
- if(c == 0 && iHostType == 0 && iDots == 3)
- {
- iIPElement = atol(Num);
- if(iIPElement > 256)
- {
- return 0; // error invalid IP
- }
- }
- else
- {
- iHostType++;
- }
-
- if(iHostType > 0)
- {
-
- HostEntry = gethostbyname(name);
- if(HostEntry)
- {
- *(address) = *((u_long*)HostEntry->h_addr_list[0]);
-
- //*(address) = (unsigned long)HostEntry->h_addr_list[0];
- return 1; // Error
- }
- else
- {
- return 0; // OK
- }
- }
-
- else // numeric address - no need for DNS resolve
- {
- *(address) = inet_addr(name);
- return 1;
-
- }
- return 0;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : HTTPWrapper_GetRandomeNumber
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : GetRandom number for Win32 & AMT
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-void HTTPWrapperInitRandomeNumber()
-{
- srand((unsigned int)time(NULL));
-}
-
-int HTTPWrapperGetRandomeNumber()
-{
- int num;
- num = (int)(((double) rand()/ ((double)RAND_MAX+1)) * 16);
- return num;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : HTTPWrapper_GetRTC
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : Get uptime under Win32 & AMT
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-long HTTPWrapperGetUpTime()
-{
-
- long lTime = 0;
-
- lTime = (GetTickCount() / CLOCKS_PER_SEC);
- return lTime;
-
-}
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Section : TSL Wrapper
-// Last updated : 15/05/2005
-// Author Name : Eitan Michaelson
-// Notes : HTTPWrapper_Sec_Connect
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperSSLConnect(int s,const struct sockaddr *name,int namelen,char *hostname)
-{
- return -1;
-}
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperSSLNegotiate(int s,const struct sockaddr *name,int namelen,char *hostname)
-{
- return -1;
-}
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperSSLSend(int s,char *buf, int len,int flags)
-{
- return -1;
-}
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int HTTPWrapperSSLRecv(int s,char *buf, int len,int flags)
-{
- return -1;
-}
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-int HTTPWrapperSSLRecvPending(int s)
-{
- return -1;
-}
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-int HTTPWrapperSSLClose(int s)
-{
- return -1;
-
-}
diff --git a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientWrapper.h b/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientWrapper.h
deleted file mode 100644
index 8cda0cf4c..000000000
--- a/src/thirdparty/ZenLib/ZenLib/HTTP_Client/HTTPClientWrapper.h
+++ /dev/null
@@ -1,111 +0,0 @@
-
-#ifndef HTTP_CLIENT_WRAPPER
-#define HTTP_CLIENT_WRAPPER
-
-// Compilation mode
-#define _HTTP_BUILD_WIN32 // Set Windows Build flag
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Section : Microsoft Windows Support
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifdef _HTTP_BUILD_WIN32
-
-#if defined(_MSC_VER)
- #pragma warning (disable: 4996) // 'function': was declared deprecated (VS 2005)
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <memory.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <time.h>
-#if defined(_WIN32) || defined(WIN32)
- #include <winsock.h>
-#endif
-
-// Generic types
-typedef unsigned int UINT32;
-typedef int INT32;
-
-// Sockets (Winsock wrapper)
-#define HTTP_ECONNRESET (WSAECONNRESET)
-#define HTTP_EINPROGRESS (WSAEINPROGRESS)
-#define HTTP_EWOULDBLOCK (WSAEWOULDBLOCK)
-#endif
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Section : Functions that are not supported by the AMT stdc framework
-// So they had to be specificaly added.
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- // STDC Wrapper implimentation
- int HTTPWrapperIsAscii (int c);
- int HTTPWrapperToUpper (int c);
- int HTTPWrapperToLower (int c);
- int HTTPWrapperIsAlpha (int c);
- int HTTPWrapperIsAlNum (int c);
- char* HTTPWrapperItoa (char *buff,int i);
- void HTTPWrapperInitRandomeNumber ();
- long HTTPWrapperGetUpTime ();
- int HTTPWrapperGetRandomeNumber ();
- int HTTPWrapperGetSocketError (int s);
- unsigned long HTTPWrapperGetHostByName (char *name,unsigned long *address);
- int HTTPWrapperShutDown (int s,int in);
- // SSL Wrapper prototypes
- int HTTPWrapperSSLConnect (int s,const struct sockaddr *name,int namelen,char *hostname);
- int HTTPWrapperSSLNegotiate (int s,const struct sockaddr *name,int namelen,char *hostname);
- int HTTPWrapperSSLSend (int s,char *buf, int len,int flags);
- int HTTPWrapperSSLRecv (int s,char *buf, int len,int flags);
- int HTTPWrapperSSLClose (int s);
- int HTTPWrapperSSLRecvPending (int s);
- // Global wrapper Functions
-#define IToA HTTPWrapperItoa
-#define GetUpTime HTTPWrapperGetUpTime
-#define SocketGetErr HTTPWrapperGetSocketError
-#define HostByName HTTPWrapperGetHostByName
-#define InitRandomeNumber HTTPWrapperInitRandomeNumber
-#define GetRandomeNumber HTTPWrapperGetRandomeNumber
-
-#ifdef __cplusplus
-}
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Section : Global type definitions
-// Last updated : 01/09/2005
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define VOID void
-#ifndef NULL
-#define NULL 0
-#endif
-#define TRUE 1
-#define FALSE 0
-typedef char CHAR;
-typedef unsigned short UINT16;
-typedef int BOOL;
-typedef unsigned long ULONG;
-
-// Global socket structures and definitions
-#define HTTP_INVALID_SOCKET (-1)
-typedef struct sockaddr_in HTTP_SOCKADDR_IN;
-typedef struct timeval HTTP_TIMEVAL;
-typedef struct hostent HTTP_HOSTNET;
-typedef struct sockaddr HTTP_SOCKADDR;
-typedef struct in_addr HTTP_INADDR;
-
-
-#endif // HTTP_CLIENT_WRAPPER
diff --git a/src/thirdparty/ZenLib/ZenLib/InfoMap.cpp b/src/thirdparty/ZenLib/ZenLib/InfoMap.cpp
deleted file mode 100644
index 063ce53b9..000000000
--- a/src/thirdparty/ZenLib/ZenLib/InfoMap.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef ZENLIB_USEWX
- #include <wx/strconv.h>
-#endif //ZENLIB_USEWX
-#include <algorithm>
-#include "ZenLib/InfoMap.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//---------------------------------------------------------------------------
-const Ztring InfoMap_EmptyZtring_Const; //Use it when we can't return a reference to a true Ztring, const version
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constructors/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Constructors
-InfoMap::InfoMap()
-: std::multimap<ZenLib::Ztring, ZenLib::ZtringList> ()
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
-}
-
-InfoMap::InfoMap(const Ztring &Source)
-: std::multimap<ZenLib::Ztring, ZenLib::ZtringList> ()
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Write(Source);
-}
-
-InfoMap::InfoMap(const Char *Source)
-: std::multimap<ZenLib::Ztring, ZenLib::ZtringList> ()
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Write(Source);
-}
-
-#ifdef _UNICODE
-InfoMap::InfoMap (const char* S)
-: std::multimap<ZenLib::Ztring, ZenLib::ZtringList> ()
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Write(Ztring(S));
-}
-#endif
-
-//***************************************************************************
-// In/Out
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-const Ztring &InfoMap::Get (const Ztring &Value, size_t Pos) const
-{
- InfoMap::const_iterator List=find(Value);
- if (List==end())
- return InfoMap_EmptyZtring_Const; //Not found
- if (Pos<List->second.size())
- return List->second[Pos];
- else
- return InfoMap_EmptyZtring_Const; //Not found
-}
-
-//---------------------------------------------------------------------------
-const Ztring &InfoMap::Get (const Ztring &Value, size_t Pos, const Ztring &WithValue, size_t WithValue_Pos) const
-{
- InfoMap::const_iterator List=find(Value);
- if (List==end())
- return InfoMap_EmptyZtring_Const; //Not found
- if (Pos<List->second.size())
- {
- if (List->second[WithValue_Pos]==WithValue)
- return List->second[Pos];
- else
- {
- ++List; //The second one, this is a stupid hack for a 2 value, should be changed later...
- if (Pos<List->second.size())
- {
- if (List->second[WithValue_Pos]==WithValue)
- return List->second[Pos];
- else
- return InfoMap_EmptyZtring_Const; //Not found
- }
- else
- return InfoMap_EmptyZtring_Const; //Not found
- }
- }
- else
- return InfoMap_EmptyZtring_Const; //Not found
-}
-
-//---------------------------------------------------------------------------
-// Set
-void InfoMap::Write(const Ztring &NewInfoMap)
-{
- clear();
-
- if (NewInfoMap.empty())
- return;
-
- size_t Pos1=0, Pos2_EOL=0, Pos2_Separator=0;
-
- while (Pos2_EOL!=(size_t)-1)
- {
- Pos2_EOL=NewInfoMap.find(__T('\n'), Pos1);
- Pos2_Separator=NewInfoMap.find(__T(';'), Pos1);
- if (Pos2_Separator<Pos2_EOL)
- {
- ZtringList List; List.Write(NewInfoMap.substr(Pos1, Pos2_EOL-Pos1));
- insert (pair<Ztring, ZtringList>(NewInfoMap.substr(Pos1, Pos2_Separator-Pos1), List));
- }
- Pos1=Pos2_EOL+1;
- }
-}
-
-//***************************************************************************
-// Configuration
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Separator
-void InfoMap::Separator_Set (size_type Level, const Ztring &NewSeparator)
-{
- if (Level>1)
- return;
-
- Separator[Level]=NewSeparator;
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/InfoMap.h b/src/thirdparty/ZenLib/ZenLib/InfoMap.h
deleted file mode 100644
index 0711de285..000000000
--- a/src/thirdparty/ZenLib/ZenLib/InfoMap.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_InfoMapH
-#define ZenLib_InfoMapH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/ZtringList.h"
-#include <map>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief Helper for InfoMap
-//***************************************************************************
-
-class InfoMap : public std::multimap<Ztring, ZtringList>
-{
-public :
- //Constructors/Destructor
- InfoMap ();
- InfoMap (const Ztring &Source);
- InfoMap (const Char *Source);
- #ifdef _UNICODE
- InfoMap (const char *Source); //convert a UTF-8 string into Unicode
- #endif
-
- //In/Out
- const Ztring &Get (const Ztring &Value, size_t Pos) const;
- const Ztring &Get (const Ztring &Value, size_t Pos, const Ztring &WithValue, size_t WithValue_Pos) const;
- void Write (const Ztring &NewLanguage);
-
- //Configuration
- /// @brief Set the Separator character
- void Separator_Set (size_type Level, const Ztring &NewSeparator);
- /// @brief Set the Quote character
- /// During Read() or Write() method, if Separator is in the sequence, we must quote it
- void Quote_Set (const Ztring &NewQuote);
- /// @brief Set the Maximum number of element to read
- /// During Read() or Write() method, if there is more elements, merge them with the last element
- void Max_Set (size_type Level, size_type Max);
-
-protected :
- Ztring Separator[2];
- Ztring Quote;
- size_type Max[2];
-};
-
-} //namespace
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/MemoryDebug.cpp b/src/thirdparty/ZenLib/ZenLib/MemoryDebug.cpp
deleted file mode 100644
index cc281f89f..000000000
--- a/src/thirdparty/ZenLib/ZenLib/MemoryDebug.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(ZENLIB_DEBUG)
-//---------------------------------------------------------------------------
-#include <iomanip>
-#include <sstream>
-#include "ZenLib/MemoryDebug.h"
-#include "ZenLib/Ztring.h"
-#ifdef WINDOWS
- #include <io.h>
-#else
- #include <cstdio>
-#endif
-#include <fcntl.h>
-#include <sys/stat.h>
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Constructors/destructor
-//***************************************************************************
-
-MemoryDebug::MemoryDebug()
-{
-}
-
-MemoryDebug::~MemoryDebug()
-{
- if (!m_Blocks.empty())
- ReportLeaks();
-}
-
-//***************************************************************************
-// Instance
-//***************************************************************************
-
-MemoryDebug& MemoryDebug::Instance()
-{
- static MemoryDebug Inst;
- return Inst;
-}
-
-//***************************************************************************
-// Reports
-//***************************************************************************
-
-void MemoryDebug::ReportLeaks()
-{
- Ztring m_File;
- //std::ofstream m_File ("Debug_MemoryLeak.txt"); // Fichier de sortie
-
- // Dtail des fuites
- std::size_t TotalSize = 0;
- for (TBlockMap::iterator i = m_Blocks.begin(); i != m_Blocks.end(); ++i)
- {
- // Ajout de la taille du bloc au cumul
- TotalSize += i->second.Size;
-
- // Inscription dans le fichier des informations sur le bloc courant
- /*
- m_File << "-> 0x" << std::hex << i->first << std::dec
- << " | " << std::setw(7) << std::setfill(' ') << static_cast<int>(i->second.Size) << " bytes"
- << " | " << i->second.File.c_str() << " (" << i->second.Line << ")" << std::endl;
- */
- m_File.append(__T("-> 0x"));
- m_File.append(Ztring::ToZtring((size_t)i->first, 16));
- m_File.append(__T(" | "));
- Ztring Temp;
- Temp.From_Number(static_cast<int>(i->second.Size));
- while(Temp.size()<7)
- Temp=__T(" ")+Temp;
- m_File.append(Temp);
- m_File.append(__T(" bytes"));
- m_File.append(__T(" | "));
- m_File.append(Ztring().From_Local(i->second.File.c_str()));
- m_File.append(__T(" ("));
- m_File.append(Ztring::ToZtring(i->second.Line));
- m_File.append(__T(")"));
- m_File.append(EOL);
- }
-
- // Affichage du cumul des fuites
- /*
- m_File << std::endl << std::endl << "-- "
- << static_cast<int>(m_Blocks.size()) << " non-released blocs, "
- << static_cast<int>(TotalSize) << " bytes --"
- << std::endl;
- */
- m_File.append(EOL);
- m_File.append(EOL);
- m_File.append(__T("-- "));
- m_File.append(Ztring::ToZtring(static_cast<int>(m_Blocks.size())));
- m_File.append(__T(" non-released blocs, "));
- m_File.append(Ztring::ToZtring(static_cast<int>(TotalSize)));
- m_File.append(__T(" bytes --"));
- m_File.append(EOL);
-
- std::string ToWrite=m_File.To_Local().c_str();
- int m_File_sav=open("Debug_MemoryLeak.txt", O_BINARY|O_RDWR |O_CREAT); // Fichier de sortie
- write(m_File_sav, (int8u*)ToWrite.c_str(), ToWrite.size());
- close(m_File_sav);
-}
-
-//***************************************************************************
-// Memory management
-//***************************************************************************
-
-void* MemoryDebug::Allocate(std::size_t Size, const char* File, int Line, bool Array)
-{
- // Allocation de la mmoire
- void* Ptr = malloc(Size);
-
- // Ajout du bloc la liste des blocs allous
- TBlock NewBlock;
- NewBlock.Size = Size;
- NewBlock.File = File;
- NewBlock.Line = Line;
- NewBlock.Array = Array;
- m_Blocks[Ptr] = NewBlock;
- return Ptr;
-}
-
-void MemoryDebug::Free(void* Ptr, bool Array)
-{
- // Recherche de l'adresse dans les blocs allous
- TBlockMap::iterator It = m_Blocks.find(Ptr);
-
- // Si le bloc n'a pas t allou, on gnre une erreur
- if (It == m_Blocks.end())
- {
- // En fait a arrive souvent, du fait que le delete surcharge est pris en compte meme la ou on n'inclue pas DebugNew.h,
- // mais pas la macro pour le new
- // Dans ce cas on dtruit le bloc et on quitte immdiatement
- free(Ptr);
- return;
- }
-
- // Si le type d'allocation ne correspond pas, on gnre une erreur
- if (It->second.Array != Array)
- {
- //throw CBadDelete(Ptr, It->second.File.c_str(), It->second.Line, !Array);
- }
-
- // Finalement, si tout va bien, on supprime le bloc et on loggiz tout a
- m_Blocks.erase(It);
- m_DeleteStack.pop();
-
- // Libration de la mmoire
- free(Ptr);
-}
-
-void MemoryDebug::NextDelete(const char* File, int Line)
-{
- TBlock Delete;
- Delete.File = File;
- Delete.Line = Line;
-
- m_DeleteStack.push(Delete);
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //NameSpace
-
-#endif // defined(ZENLIB_DEBUG)
diff --git a/src/thirdparty/ZenLib/ZenLib/MemoryDebug.h b/src/thirdparty/ZenLib/ZenLib/MemoryDebug.h
deleted file mode 100644
index 6111dcd05..000000000
--- a/src/thirdparty/ZenLib/ZenLib/MemoryDebug.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// MemoryDebug
-//
-// Provide "new" and "delete" overloadings to be able to detect memory leaks
-// Based on http://loulou.developpez.com/tutoriels/moteur3d/partie1/ 2.2.1
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenMemoryDebugH
-#define ZenMemoryDebugH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(ZENLIB_DEBUG)
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf.h"
-#include <fstream>
-#include <map>
-#include <stack>
-#include <string>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Class
-//***************************************************************************
-
-class MemoryDebug
-{
-public :
- ~MemoryDebug();
- static MemoryDebug& Instance();
-
- void* Allocate(std::size_t Size, const char* File, int Line, bool Array);
- void Free(void* Ptr, bool Array);
- void NextDelete(const char*, int Line); //Sauvegarde les infos sur la dsallocation courante
-
- void ReportLeaks();
-
-private :
- MemoryDebug();
- struct TBlock
- {
- std::size_t Size; // Taille alloue
- std::string File; // Fichier contenant l'allocation
- int Line; // Ligne de l'allocation
- bool Array; // Est-ce un objet ou un tableau ?
- };
- typedef std::map<void*, TBlock> TBlockMap;
-
- TBlockMap m_Blocks; // Blocs de mmoire allous
- std::stack<TBlock> m_DeleteStack; // Pile dont le sommet contient la ligne et le fichier de la prochaine dsallocation
-};
-
-} //NameSpace
-
-//***************************************************************************
-// operator overloadings
-//***************************************************************************
-
-inline void* operator new(std::size_t Size, const char* File, int Line)
-{
- return ZenLib::MemoryDebug::Instance().Allocate(Size, File, Line, false);
-}
-inline void* operator new[](std::size_t Size, const char* File, int Line)
-{
- return ZenLib::MemoryDebug::Instance().Allocate(Size, File, Line, true);
-}
-
-inline void operator delete(void* Ptr)
-{
- ZenLib::MemoryDebug::Instance().Free(Ptr, false);
-}
-
-inline void operator delete[](void* Ptr)
-{
- ZenLib::MemoryDebug::Instance().Free(Ptr, true);
-}
-
-#if !defined(__BORLANDC__) // Borland does not support overloaded delete
-inline void operator delete(void* Ptr, const char* File, int Line)
-{
- ZenLib::MemoryDebug::Instance().NextDelete(File, Line);
- ZenLib::MemoryDebug::Instance().Free(Ptr, false);
-}
-
-inline void operator delete[](void* Ptr, const char* File, int Line)
-{
- ZenLib::MemoryDebug::Instance().NextDelete(File, Line);
- ZenLib::MemoryDebug::Instance().Free(Ptr, true);
-}
-#endif
-
-#if !defined(__MINGW32__) //TODO: Does not work on MinGW, don't know why
-#ifndef new
- #define new new(__FILE__, __LINE__)
-#endif
-#ifndef delete
- #define delete ZenLib::MemoryDebug::Instance().NextDelete(__FILE__, __LINE__), delete
-#endif
-#endif // __MINGW32__
-
-#endif // defined(ZENLIB_DEBUG)
-
-#endif // ZenMemoryDebugH
diff --git a/src/thirdparty/ZenLib/ZenLib/MemoryUtils.h b/src/thirdparty/ZenLib/ZenLib/MemoryUtils.h
deleted file mode 100644
index 63bf199e9..000000000
--- a/src/thirdparty/ZenLib/ZenLib/MemoryUtils.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_MemoryUtilsH
-#define ZenLib_MemoryUtilsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf.h"
-#include "ZenLib/Conf.h"
-//---------------------------------------------------------------------------
-
-#include <cstring>
-#ifdef ZENLIB_MEMUTILS_SSE2
- #include <emmintrin.h>
-#endif //ZENLIB_MEMUTILS_SSE2
-
-namespace ZenLib
-{
-
-#ifndef ZENLIB_MEMUTILS_SSE2
- //-----------------------------------------------------------------------
- // Memory alloc/free
- #define malloc_Aligned128 (size) \
- malloc (size)
- #define free_Aligned128 (ptr) \
- free (ptr)
-
- //-----------------------------------------------------------------------
- // Arbitrary size - To Unaligned
- #define memcpy_Unaligned_Unaligned memcpy
- #define memcpy_Aligned128_Unaligned memcpy
-
- //-----------------------------------------------------------------------
- // Arbitrary size - To Aligned 128 bits (16 bytes)
- #define memcpy_Unaligned_Aligned128 memcpy
- #define memcpy_Aligned128_Aligned128 memcpy
-
- //-----------------------------------------------------------------------
- // 128 bits - To Unaligned
- #define memcpy_Unaligned_Unaligned_Once128 memcpy
-
- //-----------------------------------------------------------------------
- // 128 bits - To Aligned 128 bits (16 bytes)
- #define memcpy_Aligned128_Aligned128_Once128 memcpy
-
- //-----------------------------------------------------------------------
- // 1024 bits - To Unaligned
- #define memcpy_Unaligned_Unaligned_Once1024 memcpy
-
- //-----------------------------------------------------------------------
- // 1024 bits - To Aligned 128 bits (16 bytes)
- #define memcpy_Aligned128_Aligned128_Once1024 memcpy
-
- //-----------------------------------------------------------------------
- // 128-bit multiple - To Aligned 128 bits (16 bytes)
- #define memcpy_Unaligned_Aligned128_Size128 memcpy
- #define memcpy_Aligned128_Aligned128_Size128 memcpy
-
-#else // ZENLIB_MEMUTILS_SSE2
-
- //-----------------------------------------------------------------------
- // Memory alloc/free
-
- inline void* malloc_Aligned128 (size_t size)
- {
- return _aligned_malloc (size, 16); //aligned_alloc in C11
- }
-
- inline void free_Aligned128 ( void *ptr )
- {
- _aligned_free (ptr); //free in C11
- }
-
- //-----------------------------------------------------------------------
- // Arbitrary size - To Unaligned
-
- inline void memcpy_Unaligned_Unaligned (void* destination, const void* source, size_t num)
- {
- size_t extra=num&0xF;
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(const __m128i*)source;
-
- num>>=4;
- while (num--)
- _mm_storeu_si128 (destination16++, _mm_loadu_si128(source16++));
-
- char* destination1=(char*)destination16;
- char* source1=(char*)source16;
- while (extra--)
- *destination1++=*source1++;
- }
-
- inline void memcpy_Aligned128_Unaligned (void* destination, const void* source, size_t num)
- {
- size_t extra=num&0xF;
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(const __m128i*)source;
-
- num>>=4;
- while (num--)
- _mm_storeu_si128 (destination16++, _mm_load_si128(source16++));
-
- char* destination1=(char*)destination16;
- char* source1=(char*)source16;
- while (extra--)
- *destination1++=*source1++;
- }
-
- //-----------------------------------------------------------------------
- // Arbitrary size - To Aligned 128 bits (16 bytes)
-
- inline void memcpy_Unaligned_Aligned128 (void* destination, const void* source, size_t num)
- {
- size_t extra=num&0xF;
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(const __m128i*)source;
-
- num>>=4;
- while (num--)
- _mm_stream_si128 (destination16++, _mm_loadu_si128(source16++));
-
- char* destination1=(char*)destination16;
- char* source1=(char*)source16;
- while (extra--)
- *destination1++=*source1++;
- }
-
- //-----------------------------------------------------------------------
- // 128 bits - To Unaligned
-
- inline void memcpy_Unaligned_Unaligned_Once128 (void* destination, const void* source)
- {
- _mm_storeu_si128 ((__m128i*)destination, _mm_loadu_si128((const __m128i*)source));
- }
-
- //-----------------------------------------------------------------------
- // 128 bits - To Aligned 128 bits (16 bytes)
-
- inline void memcpy_Aligned128_Aligned128 (void* destination, const void* source, size_t num)
- {
- size_t extra=num&0xF;
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(const __m128i*)source;
-
- num>>=4;
- while (num--)
- _mm_stream_si128 (destination16++, _mm_load_si128(source16++));
-
- char* destination1=(char*)destination16;
- char* source1=(char*)source16;
- while (extra--)
- *destination1++=*source1++;
- }
-
- inline void memcpy_Aligned128_Aligned128_Size128 (void* destination, const void* source, size_t num)
- {
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(__m128i*)source;
-
- num>>=4;
- while (num--)
- _mm_stream_si128 (destination16++, _mm_load_si128(source16++));
- }
-
- //-----------------------------------------------------------------------
- // 1024 bits - To Unaligned
-
- inline void memcpy_Unaligned_Unaligned_Once1024 (void* destination, const void* source, size_t)
- {
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(__m128i*)source;
-
- size_t num=8;
- while (num--)
- _mm_storeu_si128 (destination16++, _mm_loadu_si128(source16++));
- }
-
- //-----------------------------------------------------------------------
- // 1024 bits - To Aligned 128 bits (16 bytes)
-
- inline void memcpy_Aligned128_Aligned128_Once128 (void* destination, const void* source)
- {
- _mm_stream_si128 ((__m128i*)destination, _mm_load_si128((const __m128i*)source));
- }
-
- //-----------------------------------------------------------------------
- // 128-bit multiple - To Unaligned (16 bytes)
-
- inline void memcpy_Unaligned_Unaligned_Size128 (void* destination, const void* source, size_t num)
- {
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(const __m128i*)source;
-
- num>>=4;
- while (num--)
- _mm_storeu_si128 (destination16++, _mm_loadu_si128(source16++));
- }
-
- inline void memcpy_Aligned128_Unaligned_Size128 (void* destination, const void* source, size_t num)
- {
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(__m128i*)source;
-
- num>>=4;
- while (num--)
- _mm_storeu_si128 (destination16++, _mm_load_si128(source16++));
- }
-
- //-----------------------------------------------------------------------
- // 128-bit multiple - To Aligned 128 bits (16 bytes)
-
- inline void memcpy_Unaligned_Aligned128_Size128 (void* destination, const void* source, size_t num)
- {
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(__m128i*)source;
-
- num>>=4;
- while (num--)
- _mm_stream_si128 (destination16++, _mm_loadu_si128(source16++));
- }
-
-
- /* Slower
- inline void memcpy_Aligned128_Aligned128_Once1024 (void* destination, const void* source)
- {
- __m128i* destination16=(__m128i*)destination;
- const __m128i* source16=(__m128i*)source;
-
- size_t num=8;
- while (num--)
- _mm_stream_si128 (destination16++, _mm_load_si128(source16++));
- }
- */
-
- /*
- inline void memcpy_Aligned256_Aligned256 (void* destination, const void* source, size_t num) //with AVX, actually slower
- {
- size_t extra=num&0x1F;
- __m256i* destination16=(__m256i*)destination;
- const __m256i* source16=(const __m256i*)source;
-
- num>>=5;
- while (num--)
- _mm256_storeu_si256 (destination16++, _mm256_loadu_si256(source16++));
-
- char* destination1=(char*)destination16;
- char* source1=(char*)source16;
- while (extra--)
- *destination1++=*source1++;
- }
- */
-
-#endif // ZENLIB_MEMUTILS_SSE2
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/OS_Utils.cpp b/src/thirdparty/ZenLib/ZenLib/OS_Utils.cpp
deleted file mode 100644
index 705987345..000000000
--- a/src/thirdparty/ZenLib/ZenLib/OS_Utils.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef ZENLIB_USEWX
-#else //ZENLIB_USEWX
- #ifdef WINDOWS
- #undef __TEXT
- #include <windows.h>
- #include <shlobj.h>
- #endif
-#endif //ZENLIB_USEWX
-#include "ZenLib/OS_Utils.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// OS info
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool IsWin9X ()
-{
- return false; //Hardcoded value because we don't support Win9x anymore
-}
-
-//***************************************************************************
-// Shell
-//***************************************************************************
-
-void Shell_Execute(const Ztring &ToExecute)
-{
- #ifdef ZENLIB_USEWX
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- ShellExecute(NULL, __T("open"), ToExecute.c_str(), NULL, NULL, 0);
- #else
- //Not supported
- #endif
- #endif //ZENLIB_USEWX
-}
-
-//***************************************************************************
-// Directories
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Select directory code
-// Extracted from TBffolder by Torsten Johann (t-johann@gmx.de)
-
-Ztring Directory_Select_Caption;
-
-#ifdef WINDOWS
- #ifdef UNICODE
- char InitDirA[MAX_PATH];
- wchar_t InitDir [MAX_PATH];
-
- int __stdcall ShowOpenFolder_CallbackProc (HWND hwnd, UINT uMsg, LPARAM, LPARAM)
- {
- if (uMsg==BFFM_INITIALIZED)
- {
- SetWindowText(hwnd, Directory_Select_Caption.c_str()); // Caption
- SendMessage (hwnd, BFFM_ENABLEOK, 0, TRUE);
- SendMessage (hwnd, BFFM_SETSELECTION, true, (LPARAM)&InitDir);
- }
- return 0;
- }
-
- Ztring OpenFolder_Show(void* Handle, const Ztring &Title, const Ztring &Caption)
- {
- //Caption
- Directory_Select_Caption=Caption;
-
- //Values
- LPMALLOC Malloc;
- LPSHELLFOLDER ShellFolder;
- BROWSEINFO BrowseInfo;
- LPITEMIDLIST ItemIdList;
-
- //Initializing the SHBrowseForFolder function
- if (SHGetMalloc(&Malloc)!=NOERROR)
- return Ztring();
- if (SHGetDesktopFolder(&ShellFolder)!=NOERROR)
- return Ztring();
- ZeroMemory(&BrowseInfo, sizeof(BROWSEINFOW));
- BrowseInfo.ulFlags+=BIF_RETURNONLYFSDIRS;
- BrowseInfo.hwndOwner=(HWND)Handle;
- BrowseInfo.pszDisplayName=InitDir;
- BrowseInfo.lpszTitle=Title.c_str();
- BrowseInfo.lpfn=ShowOpenFolder_CallbackProc;
-
- //Displaying
- ItemIdList=SHBrowseForFolder(&BrowseInfo);
-
- //Releasing
- ShellFolder->Release();
- if (ItemIdList!=NULL)
- {
- SHGetPathFromIDList(ItemIdList, InitDir);
- Malloc->Free(ItemIdList);
- Malloc->Release();
-
- //The value
- return InitDir;
- }
- else
- return Ztring();
- }
-
- #else
- char InitDirA[MAX_PATH];
-
- int __stdcall ShowOpenFolder_CallbackProc (HWND hwnd, UINT uMsg, LPARAM, LPARAM)
- {
- if (uMsg==BFFM_INITIALIZED)
- {
- SetWindowText (hwnd, Directory_Select_Caption.c_str()); // Caption
- SendMessage (hwnd, BFFM_ENABLEOK, 0, TRUE);
- SendMessage (hwnd, BFFM_SETSELECTION, true, (LPARAM)&InitDirA);
- }
- return 0;
- }
-
- Ztring OpenFolder_Show(void* Handle, const Ztring &Title, const Ztring &Caption)
- {
- //Caption
- Directory_Select_Caption=Caption;
-
- //Values
- LPMALLOC Malloc;
- LPSHELLFOLDER ShellFolder;
- BROWSEINFO BrowseInfo;
- LPITEMIDLIST ItemIdList;
-
- //Initializing the SHBrowseForFolder function
- if (SHGetMalloc(&Malloc)!=NOERROR)
- return Ztring();
- if (SHGetDesktopFolder(&ShellFolder)!=NOERROR)
- return Ztring();
- ZeroMemory(&BrowseInfo, sizeof(BROWSEINFO));
- BrowseInfo.ulFlags+=BIF_RETURNONLYFSDIRS;
- BrowseInfo.hwndOwner=(HWND)Handle;
- BrowseInfo.pszDisplayName=InitDirA;
- BrowseInfo.lpszTitle=Title.c_str();
- BrowseInfo.lpfn=ShowOpenFolder_CallbackProc;
-
- //Displaying
- ItemIdList=SHBrowseForFolder(&BrowseInfo);
-
- //Releasing
- ShellFolder->Release();
- if (ItemIdList!=NULL)
- {
- SHGetPathFromIDList(ItemIdList, InitDirA);
- Malloc->Free(ItemIdList);
- Malloc->Release();
-
- //The value
- return InitDirA;
- }
- else
- return Ztring();
- }
- #endif //UNICODE
-#endif //WINDOWS
-
-} //namespace ZenLib
diff --git a/src/thirdparty/ZenLib/ZenLib/OS_Utils.h b/src/thirdparty/ZenLib/ZenLib/OS_Utils.h
deleted file mode 100644
index 3c2614401..000000000
--- a/src/thirdparty/ZenLib/ZenLib/OS_Utils.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef ZenOS_UtilsH
-#define ZenOS_UtilsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Ztring.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// OS Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool IsWin9X ();
-// Execute
-//***************************************************************************
-
-void Shell_Execute(const Ztring &ToExecute);
-
-//***************************************************************************
-// Directorues
-//***************************************************************************
-
-Ztring OpenFolder_Show(void* Handle, const Ztring &Title, const Ztring &Caption);
-
-} //namespace ZenLib
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/PreComp.cpp b/src/thirdparty/ZenLib/ZenLib/PreComp.cpp
deleted file mode 100644
index 55e856734..000000000
--- a/src/thirdparty/ZenLib/ZenLib/PreComp.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-//---------------------------------------------------------------------------
diff --git a/src/thirdparty/ZenLib/ZenLib/PreComp.h b/src/thirdparty/ZenLib/ZenLib/PreComp.h
deleted file mode 100644
index 7941c0454..000000000
--- a/src/thirdparty/ZenLib/ZenLib/PreComp.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Helpers for compilers (precompilation)
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_PreCompH
-#define ZenLib_PreCompH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(_MSC_VER) || defined(__BORLANDC__)
- #include <cstring>
- #include <cstdio>
- #include <cstdlib>
- #include <ctime>
- #include <algorithm>
- #include <map>
- #include <sstream>
- #include <iomanip>
- #include <cmath>
- #include "ZenLib/Conf.h"
- #include "ZenLib/Conf_Internal.h"
-#endif //defined(_MSC_VER) || defined(__BORLANDC__)
-//---------------------------------------------------------------------------
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Thread.cpp b/src/thirdparty/ZenLib/ZenLib/Thread.cpp
deleted file mode 100644
index 302d672a3..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Thread.cpp
+++ /dev/null
@@ -1,637 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Thread.h"
-#include <ZenLib/Ztring.h>
-#include <ZenLib/CriticalSection.h>
-//---------------------------------------------------------------------------
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// ZENLIB_USEWX
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-#ifdef ZENLIB_USEWX
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include <wx/thread.h>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-class ThreadEntry : public wxThread
-{
-public :
- ThreadEntry(Thread* Th_) : wxThread(wxTHREAD_JOINABLE)
- {Th=Th_;};
- void* Entry() {Th->Entry(); return NULL;}
-private :
- Thread* Th;
-};
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Thread::Thread()
-{
- ThreadPointer=(void*)new ThreadEntry(this);
- ((ThreadEntry*)ThreadPointer)->Create();
-}
-
-//---------------------------------------------------------------------------
-Thread::~Thread()
-{
- delete (ThreadEntry*)ThreadPointer;
-}
-
-//***************************************************************************
-// Main Entry
-//***************************************************************************
-
-void Thread::Entry()
-{
-}
-
-//***************************************************************************
-// Control
-//***************************************************************************
-
-void Thread::Run()
-{
- ((ThreadEntry*)ThreadPointer)->Resume();
-}
-
-void Thread::Pause()
-{
- ((ThreadEntry*)ThreadPointer)->Pause();
-}
-
-void Thread::Stop()
-{
- ((ThreadEntry*)ThreadPointer)->Delete();
-}
-
-bool Thread::IsRunning()
-{
- return ((ThreadEntry*)ThreadPointer)->IsRunning();
-}
-
-//***************************************************************************
-// Communicating
-//***************************************************************************
-
-void Thread::Sleep(size_t Millisecond)
-{
- ((ThreadEntry*)ThreadPointer)->Sleep((unsigned long)Millisecond);
-}
-
-void Thread::Yield()
-{
- ((ThreadEntry*)ThreadPointer)->Yield();
-}
-
-} //Namespace
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// WINDOWS
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-#else //ZENLIB_USEWX
-#ifdef WINDOWS
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#undef __TEXT
-#include <windows.h>
-#undef Yield
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//Config
-
-#ifndef _MT
- #define _MT //Must have this symbol defined to get _beginthread/_endthread declarations
-#endif
-
-#ifdef __BORLANDC__
- #if !defined(__MT__)
- #define __MT__ //-tWM in the IDE is not always set
- #endif
-
- #if !defined(__MFC_COMPAT__)
- #define __MFC_COMPAT__ // Needed to know about _beginthreadex etc..
- #endif
-#endif //__BORLANDC__
-
-
-#if defined(_MSC_VER) || \
- (defined(__GNUG__) && defined(__MSVCRT__)) || \
- defined(__WATCOMC__) || \
- defined(__MWERKS__)
- //(defined(__BORLANDC__) && (__BORLANDC__ >= 0x500))
-
- #ifndef __WXWINCE__
- #define USING_BEGINTHREAD //Using _beginthreadex() instead of CreateThread() if possible (better, because of Win32 API has problems with memory leaks in C library)
- #endif
-#endif
-
-#ifdef USING_BEGINTHREAD
- #include <process.h>
- typedef unsigned THREAD_RETVAL; //The return type of the thread function entry point
- #define THREAD_CALLCONV __stdcall //The calling convention of the thread function entry point
-#else
- // the settings for CreateThread()
- typedef DWORD THREAD_RETVAL;
- #define THREAD_CALLCONV WINAPI
-#endif
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//---------------------------------------------------------------------------
-THREAD_RETVAL THREAD_CALLCONV Thread_Start(void *param)
-{
- ((Thread*)param)->Entry();
-
- ((Thread*)param)->Internal_Exit();
-
- return 1;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Thread::Thread()
-{
- C.Enter();
-
- State=State_New;
- ThreadPointer=NULL;
-
- C.Leave();
-}
-
-//---------------------------------------------------------------------------
-Thread::~Thread()
-{
- C.Enter();
-
- if (ThreadPointer!=NULL)
- CloseHandle((HANDLE)ThreadPointer); //ThreadPointer=NULL
-
- C.Leave();
-}
-
-//***************************************************************************
-// Control
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Thread::returnvalue Thread::Run()
-{
- C.Enter();
-
- //Coherency
- if (State!=State_New || ThreadPointer!=NULL)
- {
- C.Leave();
- return Incoherent;
- }
-
- //Creating
- #ifdef USING_BEGINTHREAD
- #ifdef __WATCOMC__
- const unsigned stksize=10240; //Watcom is reported to not like 0 stack size (which means "use default")
- #else
- const unsigned stksize=0; //Default
- #endif //__WATCOMC__
-
- ThreadPointer=(void*)_beginthreadex (NULL, stksize, Thread_Start, this, CREATE_SUSPENDED, NULL);
- #else
- ThreadPointer=(void*)CreateThread (NULL, 0, Thread_Start, this, CREATE_SUSPENDED, NULL);
- #endif //USING_BEGINTHREAD
- if (ThreadPointer==NULL)
- {
- C.Leave();
- return Resource;
- }
-
- //Running
- ResumeThread((HANDLE)ThreadPointer);
-
- //Configuring
- State=State_Running;
-
- C.Leave();
- return Ok;
-}
-
-//---------------------------------------------------------------------------
-Thread::returnvalue Thread::RunAgain()
-{
- //Coherency
- C.Enter();
-
- //Coherency
- if (State!=State_New
- && State!=State_Terminated)
- {
- C.Leave();
- return Incoherent;
- }
-
- //Configuring
- if (State==State_Terminated)
- State=State_New;
-
- C.Leave();
-
- return Run();
-}
-
-//---------------------------------------------------------------------------
-Thread::returnvalue Thread::Pause()
-{
- C.Enter();
-
- //Pausing
- SuspendThread((HANDLE)ThreadPointer);
-
- //Configuring
- State=State_Paused;
-
- C.Leave();
- return Ok;
-}
-
-//---------------------------------------------------------------------------
-Thread::returnvalue Thread::RequestTerminate()
-{
- C.Enter();
-
- //Coherency
- if (State!=State_Running)
- {
- C.Leave();
- return IsNotRunning;
- }
-
- //Configuring
- State=State_Terminating;
-
- C.Leave();
- return Ok;
-}
-
-//---------------------------------------------------------------------------
-Thread::returnvalue Thread::ForceTerminate()
-{
- C.Enter();
-
- //Terminating (not clean)
- TerminateThread((HANDLE)ThreadPointer, 1); ThreadPointer=NULL;
-
- //Configuring
- State=State_Terminated;
-
- C.Leave();
- return Ok;
-}
-
-//***************************************************************************
-// Status
-//***************************************************************************
-
-bool Thread::IsRunning()
-{
- C.Enter();
- bool ToReturn=State==State_Running || State==State_Terminating;
- C.Leave();
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-bool Thread::IsTerminating()
-{
- C.Enter();
- bool ToReturn=State==State_Terminating;
- C.Leave();
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-bool Thread::IsExited()
-{
- C.Enter();
- bool ToReturn=State==State_New || State==State_Terminated;
- C.Leave();
- return ToReturn;
-}
-
-//***************************************************************************
-// Main Entry
-//***************************************************************************
-
-void Thread::Entry()
-{
-}
-
-//***************************************************************************
-// Communicating
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-void Thread::Sleep(size_t Millisecond)
-{
- ::Sleep((DWORD)Millisecond);
-}
-
-//---------------------------------------------------------------------------
-void Thread::Yield()
-{
- ::Sleep(0);
-}
-
-//***************************************************************************
-// Internal
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Thread::returnvalue Thread::Internal_Exit()
-{
- C.Enter();
-
- //Coherency
- if (State!=State_Running
- && State!=State_Terminating)
- {
- C.Leave();
- return IsNotRunning;
- }
-
- //Closing old handle
- CloseHandle((HANDLE)ThreadPointer); ThreadPointer=NULL;
-
- //Configuring
- State=State_Terminated;
-
- C.Leave();
- return Ok;
-}
-
-} //Namespace
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// UNIX
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-#else //WINDOWS
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-//Source: http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <pthread.h>
-#include <unistd.h>
-#ifdef _POSIX_PRIORITY_SCHEDULING
- #include <sched.h>
-#endif //_POSIX_PRIORITY_SCHEDULING
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//---------------------------------------------------------------------------
-void *Thread_Start(void *param)
-{
- ((Thread*)param)->Entry();
- ((Thread*)param)->Internal_Exit();
-
- return NULL;
-}
-
-//***************************************************************************
-// Constructor/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-Thread::Thread()
-{
- C.Enter();
-
- State=State_New;
- ThreadPointer=NULL;
-
- C.Leave();
-
-}
-
-//---------------------------------------------------------------------------
-Thread::~Thread()
-{
-}
-
-//***************************************************************************
-// Main Entry
-//***************************************************************************
-
-void Thread::Entry()
-{
-}
-
-//***************************************************************************
-// Control
-//***************************************************************************
-
-Thread::returnvalue Thread::Run()
-{
- C.Enter();
-
- //Coherency
- if (State!=State_New || ThreadPointer!=NULL)
- {
- C.Leave();
- return Incoherent;
- }
-
- //Creating
- pthread_attr_t Attr;
- pthread_attr_init(&Attr);
- pthread_attr_setdetachstate(&Attr, PTHREAD_CREATE_DETACHED);
-
- //Running
- pthread_create((pthread_t*)&ThreadPointer, &Attr, Thread_Start, (void*)this);
-
- //Configuring
- State=State_Running;
-
- C.Leave();
- return Ok;
-}
-
-Thread::returnvalue Thread::RunAgain()
-{
- //Coherency
- C.Enter();
-
- //Coherency
- if (State!=State_New
- && State!=State_Terminated)
- {
- C.Leave();
- return Incoherent;
- }
-
- //Configuring
- if (State==State_Terminated)
- State=State_New;
-
- C.Leave();
-
- return Run();
-}
-
-Thread::returnvalue Thread::Pause()
-{
- //pthread_cond_wait
- return Ok;
-}
-
-Thread::returnvalue Thread::RequestTerminate()
-{
- C.Enter();
-
- if (State!=State_Running)
- {
- C.Leave();
- return IsNotRunning;
- }
-
- State=State_Terminating;
-
- C.Leave();
- return Ok;
-}
-
-Thread::returnvalue Thread::ForceTerminate()
-{
- //Terminating (not clean)
-
- //Configuring
- State=State_Terminated;
-
- return Ok;
-}
-
-//***************************************************************************
-// Status
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-bool Thread::IsRunning()
-{
- C.Enter();
- bool ToReturn=State==State_Running;
- C.Leave();
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-bool Thread::IsTerminating()
-{
- C.Enter();
- bool ToReturn=State==State_Terminating;
- C.Leave();
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-bool Thread::IsExited()
-{
- C.Enter();
- bool ToReturn=State==State_New || State==State_Terminating;
- C.Leave();
- return ToReturn;
-}
-
-//***************************************************************************
-// Communicating
-//***************************************************************************
-
-void Thread::Sleep(size_t)
-{
-}
-
-void Thread::Yield()
-{
- #ifdef _POSIX_PRIORITY_SCHEDULING
- sched_yield();
- #endif //_POSIX_PRIORITY_SCHEDULING
-}
-
-//***************************************************************************
-// Internal
-//***************************************************************************
-
-Thread::returnvalue Thread::Internal_Exit()
-{
- C.Enter();
-
- //Coherency
- if (State!=State_Running
- && State!=State_Terminating)
- {
- C.Leave();
- return IsNotRunning;
- }
-
- //Closing old handle
- ; ThreadPointer=NULL;
-
- //Configuring
- State=State_Terminated;
-
- C.Leave();
- return Ok;
-}
-
-} //Namespace
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-#endif //WINDOWS
-#endif //ZENLIB_USEWX
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/src/thirdparty/ZenLib/ZenLib/Thread.h b/src/thirdparty/ZenLib/ZenLib/Thread.h
deleted file mode 100644
index 1c994a724..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Thread.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Thread functions
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_ThreadH
-#define ZenLib_ThreadH
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf.h"
-#include "ZenLib/CriticalSection.h"
-#ifdef _WINDOWS
- #undef Yield
-#endif
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief Thread manipulation
-//***************************************************************************
-
-class Thread
-{
-public :
- //Constructor/Destructor
- Thread ();
- virtual ~Thread ();
-
- //Control
- enum returnvalue
- {
- Ok,
- IsNotRunning,
- Incoherent,
- Resource,
- };
- returnvalue Run();
- returnvalue RunAgain();
- returnvalue Pause();
- returnvalue RequestTerminate();
- returnvalue ForceTerminate();
-
- //Status
- bool IsRunning();
- bool IsTerminating();
- bool IsExited();
-
- //Configuration
- void Priority_Set(int8s Priority); //-100 to +100
-
- //Main Entry
- virtual void Entry();
-
- //Internal
- returnvalue Internal_Exit(); //Do not use it
-
-protected :
-
- //Communicating
- void Sleep(std::size_t Millisecond);
- void Yield();
-
-private :
- //Internal
- void* ThreadPointer;
-
- //The possible states of the thread ("-->" shows all possible transitions from this state)
- enum state
- {
- State_New, // didn't start execution yet (--> Running)
- State_Running, // thread is running (--> Paused, Terminating)
- State_Paused, // thread is temporarily suspended (--> Running)
- State_Terminating, // thread should terminate a.s.a.p. (--> Terminated)
- State_Terminated, // thread is terminated
- };
- state State;
- CriticalSection C;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Trace.h b/src/thirdparty/ZenLib/ZenLib/Trace.h
deleted file mode 100644
index 3b57b3c96..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Trace.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Trace
-//
-// Provide a direct to file trace
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenTraceH
-#define ZenTraceH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <fstream>
-#include "ZenLib/Ztring.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-
-static std::FILE* Trace_F;
-static ZenLib::Ztring Trace;
-static ZenLib::Ztring Trace2;
-
-#ifdef TRACE
- #undef TRACE
-#endif //TRACE
-
-#if 1
-#define TRACE(_TOAPPEND)
-#else
-#define TRACE(_TOAPPEND) \
-Trace.clear(); \
-Trace2.clear(); \
-_TOAPPEND; \
-if (!Trace2.empty()) \
-{ \
- Trace+=__T(" - "); \
- Trace+=Trace2; \
-} \
-Trace+=__T("\r\n"); \
-Trace_F=std::fopen("Trace.txt", "a+t"); \
-if(Trace_F) \
-{ \
- std::fwrite(Trace.To_Local().c_str(), Trace.size(), 1, Trace_F); \
- std::fclose(Trace_F); \
-}
-#endif
-
-//***************************************************************************
-
-
-} //NameSpace
-
-#endif // ZenTraceH
diff --git a/src/thirdparty/ZenLib/ZenLib/Translation.cpp b/src/thirdparty/ZenLib/ZenLib/Translation.cpp
deleted file mode 100644
index a58a012ab..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Translation.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef ZENLIB_USEWX
- #include <wx/strconv.h>
-#endif //ZENLIB_USEWX
-#include <algorithm>
-#include "ZenLib/Translation.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Constructors/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Constructors
-Translation::Translation()
-: std::map<ZenLib::Ztring, ZenLib::Ztring> ()
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
-}
-
-Translation::Translation(const Ztring &Source)
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Write(Source);
-}
-
-Translation::Translation(const Char *Source)
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Write(Source);
-}
-
-#ifdef _UNICODE
-Translation::Translation (const char* S)
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Write(Ztring(S));
-}
-#endif
-
-//***************************************************************************
-// In/Out
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Get
-Ztring Translation::Get () const
-{
- Ztring ToReturn;
- const_iterator Temp=begin();
- while (Temp!=end())
- {
- ToReturn+=Temp->first;
- ToReturn+=Separator[1];
- ToReturn+=Temp->second;
- ToReturn+=Separator[0];
- ++Temp;
- }
- return ToReturn;
-}
-
-const Ztring &Translation::Get (const Ztring &Value)
-{
- iterator Pos=find(Value);
- if (Pos==end())
- operator[](Value)=Value;
- return operator[](Value);
-}
-
-Ztring Translation::Get (const Ztring &Value, const Ztring &Default)
-{
- iterator Pos=find(Value);
- if (Pos==end())
- operator[](Value)=Default;
- return operator[](Value);
-}
-
-//---------------------------------------------------------------------------
-// Set
-void Translation::Write(const Ztring &NewLanguage)
-{
- clear();
-
- if (NewLanguage.empty())
- return;
-
- size_t Pos1=0, Pos2_EOL=0, Pos2_Separator=0;
-
- while (Pos2_EOL!=(size_t)-1)
- {
- Pos2_EOL=NewLanguage.find(__T('\n'), Pos1);
- Pos2_Separator=NewLanguage.find(__T(';'), Pos1);
- if (Pos2_Separator<Pos2_EOL)
- {
- operator[](NewLanguage.substr(Pos1, Pos2_Separator-Pos1))=NewLanguage.substr(Pos2_Separator+1, Pos2_EOL-Pos2_Separator-1);
- }
- Pos1=Pos2_EOL+1;
- }
-}
-
-//---------------------------------------------------------------------------
-// Set
-void Translation::Write(const Ztring &Value, const Ztring &NewLanguage)
-{
- operator[](Value)=NewLanguage;
-}
-
-//***************************************************************************
-// Configuration
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Separator
-void Translation::Separator_Set (size_type Level, const Ztring &NewSeparator)
-{
- if (Level>1)
- return;
-
- Separator[Level]=NewSeparator;
-}
-
-//***************************************************************************
-// C++
-//***************************************************************************
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Translation.h b/src/thirdparty/ZenLib/ZenLib/Translation.h
deleted file mode 100644
index cedc455fd..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Translation.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_TranslationH
-#define ZenLib_TranslationH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Ztring.h"
-#include <map>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief Helper for translation
-//***************************************************************************
-
-class Translation : public std::map<Ztring, Ztring>
-{
-public :
- //Constructors/Destructor
- Translation ();
- Translation (const Ztring &Source);
- Translation (const Char *Source);
- #ifdef _UNICODE
- Translation (const char *Source); //convert a UTF-8 string into Unicode
- #endif
-
- //In/Out
- Ztring Get () const;
- const Ztring &Get (const Ztring &Value);
- Ztring Get (const Ztring &Count, const Ztring &Value);
- void Write (const Ztring &NewLanguage); //All language in one
- void Write (const Ztring &Value, const Ztring &NewLanguage); //Per item
-
- //Configuration
- /// @brief Set the Separator character
- void Separator_Set (size_type Level, const Ztring &NewSeparator);
- /// @brief Set the Quote character
- /// During Read() or Write() method, if Separator is in the sequence, we must quote it
- void Quote_Set (const Ztring &NewQuote);
- /// @brief Set the Maximum number of element to read
- /// During Read() or Write() method, if there is more elements, merge them with the last element
- void Max_Set (size_type Level, size_type Max);
-
-protected :
- Ztring Separator[2];
- Ztring Quote;
- size_type Max[2];
-};
-
-} //namespace
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Utils.cpp b/src/thirdparty/ZenLib/ZenLib/Utils.cpp
deleted file mode 100644
index bc65f7027..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Utils.cpp
+++ /dev/null
@@ -1,1024 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Utils.h"
-#include <cmath>
-#include <complex>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Transformations - Little Endian to something
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Little Endian - 8 bits
-int8s LittleEndian2int8s (const char* Liste)
-{
- return (int8s)Liste[0];
-}
-
-int8u LittleEndian2int8u (const char* Liste)
-{
- return (int8u)Liste[0];
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 16 bits
-int16s LittleEndian2int16s (const char* Liste)
-{
- int16s Retour= (int8s)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-int16u LittleEndian2int16u (const char* Liste)
-{
- int16u Retour= (int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 24 bits
-int32s LittleEndian2int24s (const char* Liste)
-{
- int32s Retour= (int8s)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-int32u LittleEndian2int24u (const char* Liste)
-{
- int32u Retour= (int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 32 bits
-int32s LittleEndian2int32s (const char* Liste)
-{
- int32s Retour= (int8s)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-int32u LittleEndian2int32u (const char* Liste)
-{
- int32u Retour= (int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 40 bits
-int64s LittleEndian2int40s (const char* Liste)
-{
- int64s Retour= (int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-int64u LittleEndian2int40u (const char* Liste)
-{
- int64u Retour= (int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 48 bits
-int64s LittleEndian2int48s (const char* Liste)
-{
- int64s Retour= (int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-int64u LittleEndian2int48u (const char* Liste)
-{
- int64u Retour= (int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 56 bits
-int64s LittleEndian2int56s (const char* Liste)
-{
- int64s Retour= (int8u)Liste[6];
- Retour=(Retour<<8)|(int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-int64u LittleEndian2int56u (const char* Liste)
-{
- int64u Retour= (int8u)Liste[6];
- Retour=(Retour<<8)|(int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 64 bits
-int64s LittleEndian2int64s (const char* Liste)
-{
- int64s Retour= (int8s)Liste[7];
- Retour=(Retour<<8)|(int8u)Liste[6];
- Retour=(Retour<<8)|(int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-int64u LittleEndian2int64u (const char* Liste)
-{
- int64u Retour= (int8u)Liste[7];
- Retour=(Retour<<8)|(int8u)Liste[6];
- Retour=(Retour<<8)|(int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[0];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 128 bits
-int128u LittleEndian2int128u(const char* Liste)
-{
- int128u Retour;
- Retour.lo=LittleEndian2int64u(Liste);
- Retour.hi=LittleEndian2int64u(Liste+8);
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - float 16 bits
-float32 LittleEndian2float16(const char* Liste)
-{
- //sign 1 bit
- //exponent 5 bit
- //significand 10 bit
-
- //Retrieving data
- int32u Integer=LittleEndian2int32u(Liste);
-
- //Retrieving elements
- bool Sign =(Integer&0x8000)?true:false;
- int32u Exponent=(Integer>>10)&0xFF;
- int32u Mantissa= Integer&0x03FF;
-
- //Some computing
- if (Exponent==0 || Exponent==0xFF)
- return 0; //These are denormalised numbers, NANs, and other horrible things
- Exponent-=0x7F; //Bias
- float64 Answer=(((float64)Mantissa)/8388608+1.0)*std::pow((float64)2, (int)Exponent); //(1+Mantissa) * 2^Exponent
- if (Sign)
- Answer=-Answer;
-
- return (float32)Answer;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - float 32 bits
-float32 LittleEndian2float32(const char* Liste)
-{
- //sign 1 bit
- //exponent 8 bit
- //significand 23 bit
-
- //Retrieving data
- int32u Integer=LittleEndian2int32u(Liste);
-
- //Retrieving elements
- bool Sign =(Integer&0x80000000)?true:false;
- int32u Exponent=(Integer>>23)&0xFF;
- int32u Mantissa= Integer&0x007FFFFF;
-
- //Some computing
- if (Exponent==0 || Exponent==0xFF)
- return 0; //These are denormalised numbers, NANs, and other horrible things
- Exponent-=0x7F; //Bias
- float64 Answer=(((float64)Mantissa)/8388608+1.0)*std::pow((float64)2, (int)Exponent); //(1+Mantissa) * 2^Exponent
- if (Sign)
- Answer=-Answer;
-
- return (float32)Answer;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - float 64 bits
-float64 LittleEndian2float64(const char* Liste)
-{
- //sign 1 bit
- //exponent 11 bit
- //significand 52 bit
-
- //Retrieving data
- int64u Integer=LittleEndian2int64u(Liste);
-
- //Retrieving elements
- bool Sign =(Integer&0x8000000000000000LL)?true:false;
- int64u Exponent=(Integer>>52)&0x7FF;
- int64u Mantissa= Integer&0xFFFFFFFFFFFFFLL;
-
- //Some computing
- if (Exponent==0 || Exponent==0x7FF)
- return 0; //These are denormalised numbers, NANs, and other horrible things
- Exponent-=0x3FF; //Bias
- float64 Answer=(((float64)Mantissa)/4503599627370496.0+1.0)*std::pow((float64)2, (int)Exponent); //(1+Mantissa) * 2^Exponent
- if (Sign)
- Answer=-Answer;
-
- return (float64)Answer;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - float 80 bits
-float80 LittleEndian2float80(const char* Liste)
-{
- //sign 1 bit
- //exponent 15 bit
- //integer? 1 bit
- //significand 63 bit
-
- //Retrieving data
- int16u Integer1=LittleEndian2int16u(Liste);
- int64u Integer2=LittleEndian2int64u(Liste+2);
-
- //Retrieving elements
- bool Sign =(Integer1&0x8000)?true:false;
- int16u Exponent= Integer1&0x7FFF;
- int64u Mantissa= Integer2&0x7FFFFFFFFFFFFFFFLL; //Only 63 bits, 1 most significant bit is explicit
- //Some computing
- if (Exponent==0 || Exponent==0x7FFF)
- return 0; //These are denormalised numbers, NANs, and other horrible things
- Exponent-=0x3FFF; //Bias
- float80 Answer=(((float80)Mantissa)/9223372036854775808.0+1.0)*std::pow((float)2, (int)Exponent); //(1+Mantissa) * 2^Exponent
- if (Sign)
- Answer=-Answer;
-
- return (float80)Answer;
-}
-
-//***************************************************************************
-// Transformations - Something to Little Endian
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Little Endian - 8 bits
-void int8s2LittleEndian (char* List, int8s Value)
-{
- List[0]=(char)Value;
-}
-
-void int8u2LittleEndian (char* List, int8u Value)
-{
- List[0]=(char)Value;
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 16 bits
-void int16s2LittleEndian (char* List, int16s Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
-}
-
-void int16u2LittleEndian (char* List, int16u Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 24 bits
-void int24s2LittleEndian (char* List, int32s Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
-}
-
-void int24u2LittleEndian (char* List, int32u Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 32 bits
-void int32s2LittleEndian (char* List, int32s Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
-}
-
-void int32u2LittleEndian (char* List, int32u Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 40 bits
-void int40s2LittleEndian (char* List, int64s Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>32);
-}
-
-void int40u2LittleEndian (char* List, int64u Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>32);
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 48 bits
-void int48s2LittleEndian (char* List, int64s Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>32);
- List[5]=(char)(Value>>40);
-}
-
-void int48u2LittleEndian (char* List, int64u Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>32);
- List[5]=(char)(Value>>40);
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 56 bits
-void int56s2LittleEndian (char* List, int64s Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>32);
- List[5]=(char)(Value>>40);
- List[6]=(char)(Value>>48);
-}
-
-void int56u2LittleEndian (char* List, int64u Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>32);
- List[5]=(char)(Value>>40);
- List[6]=(char)(Value>>48);
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 64 bits
-void int64s2LittleEndian (char* List, int64s Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>32);
- List[5]=(char)(Value>>40);
- List[6]=(char)(Value>>48);
- List[7]=(char)(Value>>56);
-}
-
-void int64u2LittleEndian (char* List, int64u Value)
-{
- List[0]=(char) Value;
- List[1]=(char)(Value>> 8);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>32);
- List[5]=(char)(Value>>40);
- List[6]=(char)(Value>>48);
- List[7]=(char)(Value>>56);
-}
-
-//---------------------------------------------------------------------------
-// Little Endian - 128 bits
-void int128u2LittleEndian(char* List, int128u Value)
-{
- int64u2LittleEndian(List+8, Value.lo);
- int64u2LittleEndian(List , Value.hi);
-}
-
-//***************************************************************************
-// Transformations - Big Endian to something
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Big Endian - 8 bits
-int8s BigEndian2int8s (const char* Liste)
-{
- return (int8s)Liste[0];
-}
-
-int8u BigEndian2int8u (const char* Liste)
-{
- return (int8u)Liste[0];
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 16 bits
-int16s BigEndian2int16s (const char* Liste)
-{
- int16s Retour= (int8s)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- return Retour;
-}
-
-int16u BigEndian2int16u (const char* Liste)
-{
- int16u Retour= (int8u)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 24 bits
-int32s BigEndian2int24s (const char* Liste)
-{
- int32s Retour= (int8s)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- return Retour;
-}
-
-int32u BigEndian2int24u (const char* Liste)
-{
- int32u Retour= (int8u)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 32 bits
-int32s BigEndian2int32s (const char* Liste)
-{
- int32s Retour= (int8s)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- return Retour;
-}
-
-int32u BigEndian2int32u (const char* Liste)
-{
- int32u Retour= (int8u)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 40 bits
-int64s BigEndian2int40s (const char* Liste)
-{
- int64s Retour= (int8s)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[4];
- return Retour;
-}
-
-int64u BigEndian2int40u (const char* Liste)
-{
- int64u Retour= (int8u)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[4];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 48 bits
-int64s BigEndian2int48s (const char* Liste)
-{
- int64s Retour= (int8s)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[5];
- return Retour;
-}
-
-int64u BigEndian2int48u (const char* Liste)
-{
- int64u Retour= (int8u)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[5];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 56 bits
-int64s BigEndian2int56s (const char* Liste)
-{
- int64s Retour= (int8s)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[6];
- return Retour;
-}
-
-int64u BigEndian2int56u (const char* Liste)
-{
- int64u Retour= (int8u)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[6];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 64 bits
-int64s BigEndian2int64s (const char* Liste)
-{
- int64s Retour=(int8s)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[6];
- Retour=(Retour<<8)|(int8u)Liste[7];
- return Retour;
-}
-
-int64u BigEndian2int64u (const char* Liste)
-{
- int64u Retour=(int8u)Liste[0];
- Retour=(Retour<<8)|(int8u)Liste[1];
- Retour=(Retour<<8)|(int8u)Liste[2];
- Retour=(Retour<<8)|(int8u)Liste[3];
- Retour=(Retour<<8)|(int8u)Liste[4];
- Retour=(Retour<<8)|(int8u)Liste[5];
- Retour=(Retour<<8)|(int8u)Liste[6];
- Retour=(Retour<<8)|(int8u)Liste[7];
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 128 bits
-int128u BigEndian2int128u(const char* Liste)
-{
- int128u Retour;
- Retour.hi=BigEndian2int64u(Liste);
- Retour.lo=BigEndian2int64u(Liste+8);
- return Retour;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - float 16 bits
-float32 BigEndian2float16(const char* Liste)
-{
- //sign 1 bit
- //exponent 5 bit
- //significand 10 bit
-
- //Retrieving data
- int32u Integer=BigEndian2int32u(Liste);
-
- //Retrieving elements
- bool Sign =(Integer&0x8000)?true:false;
- int32u Exponent=(Integer>>10)&0xFF;
- int32u Mantissa= Integer&0x03FF;
-
- //Some computing
- if (Exponent==0 || Exponent==0xFF)
- return 0; //These are denormalised numbers, NANs, and other horrible things
- Exponent-=0x7F; //Bias
- float64 Answer=(((float64)Mantissa)/8388608+1.0)*std::pow((float64)2, (int)Exponent); //(1+Mantissa) * 2^Exponent
- if (Sign)
- Answer=-Answer;
-
- return (float32)Answer;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - float 32 bits
-float32 BigEndian2float32(const char* Liste)
-{
- //sign 1 bit
- //exponent 8 bit
- //significand 23 bit
-
- //Retrieving data
- int32u Integer=BigEndian2int32u(Liste);
-
- //Retrieving elements
- bool Sign =(Integer&0x80000000)?true:false;
- int32u Exponent=(Integer>>23)&0xFF;
- int32u Mantissa= Integer&0x007FFFFF;
-
- //Some computing
- if (Exponent==0 || Exponent==0xFF)
- return 0; //These are denormalised numbers, NANs, and other horrible things
- Exponent-=0x7F; //Bias
- float64 Answer=(((float64)Mantissa)/8388608+1.0)*std::pow((float64)2, (int)Exponent); //(1+Mantissa) * 2^Exponent
- if (Sign)
- Answer=-Answer;
-
- return (float32)Answer;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - float 64 bits
-float64 BigEndian2float64(const char* Liste)
-{
- //sign 1 bit
- //exponent 11 bit
- //significand 52 bit
-
- //Retrieving data
- int64u Integer=BigEndian2int64u(Liste);
-
- //Retrieving elements
- bool Sign =(Integer&0x8000000000000000LL)?true:false;
- int64u Exponent=(Integer>>52)&0x7FF;
- int64u Mantissa= Integer&0xFFFFFFFFFFFFFLL;
-
- //Some computing
- if (Exponent==0 || Exponent==0x7FF)
- return 0; //These are denormalised numbers, NANs, and other horrible things
- Exponent-=0x3FF; //Bias
- float64 Answer=(((float64)Mantissa)/4503599627370496.0+1.0)*std::pow((float64)2, (int)Exponent); //(1+Mantissa) * 2^Exponent
- if (Sign)
- Answer=-Answer;
-
- return (float64)Answer;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - float 80 bits
-float80 BigEndian2float80(const char* Liste)
-{
- //sign 1 bit
- //exponent 15 bit
- //integer? 1 bit
- //significand 63 bit
-
- //Retrieving data
- int16u Integer1=BigEndian2int16u(Liste);
- int64u Integer2=BigEndian2int64u(Liste+2);
-
- //Retrieving elements
- bool Sign =(Integer1&0x8000)?true:false;
- int16u Exponent= Integer1&0x7FFF;
- int64u Mantissa= Integer2&0x7FFFFFFFFFFFFFFFLL; //Only 63 bits, 1 most significant bit is explicit
- //Some computing
- if (Exponent==0 || Exponent==0x7FFF)
- return 0; //These are denormalised numbers, NANs, and other horrible things
- Exponent-=0x3FFF; //Bias
- float80 Answer=(((float80)Mantissa)/9223372036854775808.0+1.0)*std::pow((float)2, (int)Exponent); //(1+Mantissa) * 2^Exponent
- if (Sign)
- Answer=-Answer;
-
- return (float80)Answer;
-}
-
-//***************************************************************************
-// Transformations - Something to Big Endian
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Big Endian - 8 bits
-void int8s2BigEndian (char* List, int8s Value)
-{
- List[0]=(char)Value;
-}
-
-void int8u2BigEndian (char* List, int8u Value)
-{
- List[0]=(char)Value;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 16 bits
-void int16s2BigEndian (char* List, int16s Value)
-{
- List[0]=(char)(Value>> 8);
- List[1]=(char) Value;
-}
-
-void int16u2BigEndian (char* List, int16u Value)
-{
- List[0]=(char)(Value>> 8);
- List[1]=(char) Value;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 24 bits
-void int24s2BigEndian (char* List, int32s Value)
-{
- List[0]=(char)(Value>>16);
- List[1]=(char)(Value>> 8);
- List[2]=(char) Value;
-}
-
-void int24u2BigEndian (char* List, int32u Value)
-{
- List[0]=(char)(Value>>16);
- List[1]=(char)(Value>> 8);
- List[2]=(char) Value;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 32 bits
-void int32s2BigEndian (char* List, int32s Value)
-{
- List[0]=(char)(Value>>24);
- List[1]=(char)(Value>>16);
- List[2]=(char)(Value>> 8);
- List[3]=(char) Value;
-}
-
-void int32u2BigEndian (char* List, int32u Value)
-{
- List[0]=(char)(Value>>24);
- List[1]=(char)(Value>>16);
- List[2]=(char)(Value>> 8);
- List[3]=(char) Value;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 40 bits
-void int40s2BigEndian (char* List, int64s Value)
-{
- List[0]=(char)(Value>>32);
- List[1]=(char)(Value>>24);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>> 8);
- List[4]=(char) Value;
-}
-
-void int40u2BigEndian (char* List, int64u Value)
-{
- List[0]=(char)(Value>>32);
- List[1]=(char)(Value>>24);
- List[2]=(char)(Value>>16);
- List[3]=(char)(Value>> 8);
- List[4]=(char) Value;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 48 bits
-void int48s2BigEndian (char* List, int64s Value)
-{
- List[0]=(char)(Value>>40);
- List[1]=(char)(Value>>32);
- List[2]=(char)(Value>>24);
- List[3]=(char)(Value>>16);
- List[4]=(char)(Value>> 8);
- List[5]=(char) Value;
-}
-
-void int48u2BigEndian (char* List, int64u Value)
-{
- List[0]=(char)(Value>>40);
- List[1]=(char)(Value>>32);
- List[2]=(char)(Value>>24);
- List[3]=(char)(Value>>16);
- List[4]=(char)(Value>> 8);
- List[5]=(char) Value;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 56 bits
-void int56s2BigEndian (char* List, int64s Value)
-{
- List[0]=(char)(Value>>48);
- List[1]=(char)(Value>>40);
- List[2]=(char)(Value>>32);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>16);
- List[5]=(char)(Value>> 8);
- List[6]=(char) Value;
-}
-
-void int56u2BigEndian (char* List, int64u Value)
-{
- List[0]=(char)(Value>>48);
- List[1]=(char)(Value>>40);
- List[2]=(char)(Value>>32);
- List[3]=(char)(Value>>24);
- List[4]=(char)(Value>>16);
- List[5]=(char)(Value>> 8);
- List[6]=(char) Value;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 64 bits
-void int64s2BigEndian (char* List, int64s Value)
-{
- List[0]=(char)(Value>>56);
- List[1]=(char)(Value>>48);
- List[2]=(char)(Value>>40);
- List[3]=(char)(Value>>32);
- List[4]=(char)(Value>>24);
- List[5]=(char)(Value>>16);
- List[6]=(char)(Value>> 8);
- List[7]=(char) Value;
-}
-
-void int64u2BigEndian (char* List, int64u Value)
-{
- List[0]=(char)(Value>>56);
- List[1]=(char)(Value>>48);
- List[2]=(char)(Value>>40);
- List[3]=(char)(Value>>32);
- List[4]=(char)(Value>>24);
- List[5]=(char)(Value>>16);
- List[6]=(char)(Value>> 8);
- List[7]=(char) Value;
-}
-
-//---------------------------------------------------------------------------
-// Big Endian - 128 bits
-void int128u2BigEndian(char* List, int128u Value)
-{
- int64u2BigEndian(List, Value.hi);
- int64u2BigEndian(List+8, Value.lo);
-}
-
-//***************************************************************************
-// Int to Int
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// int32 - int64
-int64s int32s_int64s (int32s High, int32u Low)
-{
- return ((((int64s)High)<<32) | Low);
-}
-
-int64u int32u_int64u (int32u High, int32u Low)
-{
- return ((((int64s)High)<<32) | Low);
-}
-
-void int32s_int64s (int64s &BigInt, int32s High, int32u Low)
-{
- BigInt= ((((int64s)High)<<32) | Low);
-}
-void int32u_int64u (int64s &BigInt, int32u High, int32u Low)
-{
- BigInt= ((((int64s)High)<<32) | Low);
-}
-
-void int64s_int32s (int64s BigInt, int32s &High, int32u &Low)
-{
- High = (int32s) ((BigInt & 0xFFFFFFFF00000000LL)>>32);
- Low = (int32u) ( BigInt & 0x00000000FFFFFFFF);
-}
-
-void int64u_int32u (int64u BigInt, int32u &High, int32u &Low)
-{
- High = (int32u) ((BigInt & 0xFFFFFFFF00000000LL)>>32);
- Low = (int32u) ( BigInt & 0x00000000FFFFFFFF);
-}
-
-//---------------------------------------------------------------------------
-// Floats and ints
-int32s float32_int32s (float32 F, bool Rounded)
-{
- //Not rounded
- if (!Rounded)
- return (int32s)F;
- //Rounded
- int I1=(int)F;
- if (F-I1>=0.5)
- return I1+1;
- else
- return I1;
-}
-
-int64s float32_int64s (float32 F, bool Rounded)
-{
- //Not rounded
- if (!Rounded)
- return (int64s)F;
- //Rounded
- int I1=(int)F;
- if (F-I1>=0.5)
- return I1+1;
- else
- return I1;
-}
-
-int32s float64_int32s (float64 F, bool Rounded)
-{
- //Not rounded
- if (!Rounded)
- return (int32s)F;
- //Rounded
- int32s I1=(int32s)F;
- if (F-I1>=0.5)
- return I1+1;
- else
- return I1;
-}
-
-int64s float64_int64s (float64 F, bool Rounded)
-{
- //Not rounded
- if (!Rounded)
- return (int64s)F;
- //Rounded
- int64s I1=(int64s)F;
- if (F-I1>=0.5)
- return I1+1;
- else
- return I1;
-}
-
-} //namespace ZenLib
diff --git a/src/thirdparty/ZenLib/ZenLib/Utils.h b/src/thirdparty/ZenLib/ZenLib/Utils.h
deleted file mode 100644
index 8845d78dc..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Utils.h
+++ /dev/null
@@ -1,305 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// Integer and float manipulation
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenUtilsH
-#define ZenUtilsH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/int128u.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-// Integer transformations
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Little Endians
-int8s LittleEndian2int8s (const char* List);
-int8u LittleEndian2int8u (const char* List);
-int16s LittleEndian2int16s (const char* List);
-int16u LittleEndian2int16u (const char* List);
-int32s LittleEndian2int24s (const char* List);
-int32u LittleEndian2int24u (const char* List);
-int32s LittleEndian2int32s (const char* List);
-int32u LittleEndian2int32u (const char* List);
-#if (MAXTYPE_INT >= 64)
-int64s LittleEndian2int40s (const char* List);
-int64u LittleEndian2int40u (const char* List);
-int64s LittleEndian2int48s (const char* List);
-int64u LittleEndian2int48u (const char* List);
-int64s LittleEndian2int56s (const char* List);
-int64u LittleEndian2int56u (const char* List);
-int64s LittleEndian2int64s (const char* List);
-int64u LittleEndian2int64u (const char* List);
-int128u LittleEndian2int128u (const char* List);
-#endif
-float32 LittleEndian2float16 (const char* List);
-float32 LittleEndian2float32 (const char* List);
-float64 LittleEndian2float64 (const char* List);
-float80 LittleEndian2float80 (const char* List);
-
-void int8s2LittleEndian (char* List, int8s Value);
-void int8u2LittleEndian (char* List, int8u Value);
-void int16s2LittleEndian (char* List, int16s Value);
-void int16u2LittleEndian (char* List, int16u Value);
-void int24s2LittleEndian (char* List, int32s Value);
-void int24u2LittleEndian (char* List, int32u Value);
-void int32s2LittleEndian (char* List, int32s Value);
-void int32u2LittleEndian (char* List, int32u Value);
-#if (MAXTYPE_INT >= 64)
-void int40s2LittleEndian (char* List, int64s Value);
-void int40u2LittleEndian (char* List, int64u Value);
-void int48s2LittleEndian (char* List, int64s Value);
-void int48u2LittleEndian (char* List, int64u Value);
-void int56s2LittleEndian (char* List, int64s Value);
-void int56u2LittleEndian (char* List, int64u Value);
-void int64s2LittleEndian (char* List, int64s Value);
-void int64u2LittleEndian (char* List, int64u Value);
-void int128u2LittleEndian (char* List, int128u Value);
-#endif
-void float162LittleEndian (char* List, float32 Value);
-void float322LittleEndian (char* List, float32 Value);
-void float642LittleEndian (char* List, float64 Value);
-void float802LittleEndian (char* List, float80 Value);
-
-#ifndef __BORLANDC__
-inline int8s LittleEndian2int8s (const int8u* List) {return LittleEndian2int8s ((const char*)List);}
-inline int8u LittleEndian2int8u (const int8u* List) {return LittleEndian2int8u ((const char*)List);}
-inline int16s LittleEndian2int16s (const int8u* List) {return LittleEndian2int16s ((const char*)List);}
-inline int16u LittleEndian2int16u (const int8u* List) {return LittleEndian2int16u ((const char*)List);}
-inline int32s LittleEndian2int24s (const int8u* List) {return LittleEndian2int24s ((const char*)List);}
-inline int32u LittleEndian2int24u (const int8u* List) {return LittleEndian2int24u ((const char*)List);}
-inline int32s LittleEndian2int32s (const int8u* List) {return LittleEndian2int32s ((const char*)List);}
-inline int32u LittleEndian2int32u (const int8u* List) {return LittleEndian2int32u ((const char*)List);}
-#if (MAXTYPE_INT >= 64)
-inline int64s LittleEndian2int40s (const int8u* List) {return LittleEndian2int40s ((const char*)List);}
-inline int64u LittleEndian2int40u (const int8u* List) {return LittleEndian2int40u ((const char*)List);}
-inline int64s LittleEndian2int48s (const int8u* List) {return LittleEndian2int48s ((const char*)List);}
-inline int64u LittleEndian2int48u (const int8u* List) {return LittleEndian2int48u ((const char*)List);}
-inline int64s LittleEndian2int56s (const int8u* List) {return LittleEndian2int56s ((const char*)List);}
-inline int64u LittleEndian2int56u (const int8u* List) {return LittleEndian2int56u ((const char*)List);}
-inline int64s LittleEndian2int64s (const int8u* List) {return LittleEndian2int64s ((const char*)List);}
-inline int64u LittleEndian2int64u (const int8u* List) {return LittleEndian2int64u ((const char*)List);}
-inline int128u LittleEndian2int128u (const int8u* List) {return LittleEndian2int64u ((const char*)List);}
-#endif
-inline float32 LittleEndian2float16 (const int8u* List) {return LittleEndian2float16 ((const char*)List);}
-inline float32 LittleEndian2float32 (const int8u* List) {return LittleEndian2float32 ((const char*)List);}
-inline float64 LittleEndian2float64 (const int8u* List) {return LittleEndian2float64 ((const char*)List);}
-inline float80 LittleEndian2float80 (const int8u* List) {return LittleEndian2float80 ((const char*)List);}
-
-inline void int8s2LittleEndian (int8u* List, int8s Value) {return int8s2LittleEndian ((char*)List, Value);}
-inline void int8u2LittleEndian (int8u* List, int8u Value) {return int8u2LittleEndian ((char*)List, Value);}
-inline void int16s2LittleEndian (int8u* List, int16s Value) {return int16s2LittleEndian ((char*)List, Value);}
-inline void int16u2LittleEndian (int8u* List, int16u Value) {return int16u2LittleEndian ((char*)List, Value);}
-inline void int24s2LittleEndian (int8u* List, int32s Value) {return int24s2LittleEndian ((char*)List, Value);}
-inline void int24u2LittleEndian (int8u* List, int32u Value) {return int24u2LittleEndian ((char*)List, Value);}
-inline void int32s2LittleEndian (int8u* List, int32s Value) {return int32s2LittleEndian ((char*)List, Value);}
-inline void int32u2LittleEndian (int8u* List, int32u Value) {return int32u2LittleEndian ((char*)List, Value);}
-#if (MAXTYPE_INT >= 64)
-inline void int40s2LittleEndian (int8u* List, int64s Value) {return int40s2LittleEndian ((char*)List, Value);}
-inline void int40u2LittleEndian (int8u* List, int64u Value) {return int40u2LittleEndian ((char*)List, Value);}
-inline void int48s2LittleEndian (int8u* List, int64s Value) {return int48s2LittleEndian ((char*)List, Value);}
-inline void int48u2LittleEndian (int8u* List, int64u Value) {return int48u2LittleEndian ((char*)List, Value);}
-inline void int56s2LittleEndian (int8u* List, int64s Value) {return int56s2LittleEndian ((char*)List, Value);}
-inline void int56u2LittleEndian (int8u* List, int64u Value) {return int56u2LittleEndian ((char*)List, Value);}
-inline void int64s2LittleEndian (int8u* List, int64s Value) {return int64s2LittleEndian ((char*)List, Value);}
-inline void int64u2LittleEndian (int8u* List, int64u Value) {return int64u2LittleEndian ((char*)List, Value);}
-inline void int128u2LittleEndian (int8u* List, int128u Value) {return int128u2LittleEndian ((char*)List, Value);}
-#endif
-inline void float162LittleEndian (int8u* List, float32 Value) {return float162LittleEndian ((char*)List, Value);}
-inline void float322LittleEndian (int8u* List, float32 Value) {return float322LittleEndian ((char*)List, Value);}
-inline void float642LittleEndian (int8u* List, float64 Value) {return float642LittleEndian ((char*)List, Value);}
-inline void float802LittleEndian (int8u* List, float80 Value) {return float802LittleEndian ((char*)List, Value);}
-#endif //__BORLANDC__
-
-//---------------------------------------------------------------------------
-//Big Endians
-int8s BigEndian2int8s (const char* List);
-int8u BigEndian2int8u (const char* List);
-int16s BigEndian2int16s (const char* List);
-int16u BigEndian2int16u (const char* List);
-int32s BigEndian2int24s (const char* List);
-int32u BigEndian2int24u (const char* List);
-int32s BigEndian2int32s (const char* List);
-int32u BigEndian2int32u (const char* List);
-#if (MAXTYPE_INT >= 64)
-int64s BigEndian2int40s (const char* List);
-int64u BigEndian2int40u (const char* List);
-int64s BigEndian2int48s (const char* List);
-int64u BigEndian2int48u (const char* List);
-int64s BigEndian2int56s (const char* List);
-int64u BigEndian2int56u (const char* List);
-int64s BigEndian2int64s (const char* List);
-int64u BigEndian2int64u (const char* List);
-int128u BigEndian2int128u (const char* List);
-#endif
-float32 BigEndian2float16 (const char* List);
-float32 BigEndian2float32 (const char* List);
-float64 BigEndian2float64 (const char* List);
-float80 BigEndian2float80 (const char* List);
-
-void int8s2BigEndian (char* List, int8s Value);
-void int8u2BigEndian (char* List, int8u Value);
-void int16s2BigEndian (char* List, int16s Value);
-void int16u2BigEndian (char* List, int16u Value);
-void int24s2BigEndian (char* List, int32s Value);
-void int24u2BigEndian (char* List, int32u Value);
-void int32s2BigEndian (char* List, int32s Value);
-void int32u2BigEndian (char* List, int32u Value);
-#if (MAXTYPE_INT >= 64)
-void int40s2BigEndian (char* List, int64s Value);
-void int40u2BigEndian (char* List, int64u Value);
-void int48s2BigEndian (char* List, int64s Value);
-void int48u2BigEndian (char* List, int64u Value);
-void int56s2BigEndian (char* List, int64s Value);
-void int56u2BigEndian (char* List, int64u Value);
-void int64s2BigEndian (char* List, int64s Value);
-void int64u2BigEndian (char* List, int64u Value);
-void int128u2BigEndian (char* List, int128u Value);
-#endif
-void float162BigEndian (char* List, float32 Value);
-void float322BigEndian (char* List, float32 Value);
-void float642BigEndian (char* List, float64 Value);
-void float802BigEndian (char* List, float80 Value);
-
-#ifndef __BORLANDC__
-inline int8s BigEndian2int8s (const int8u* List) {return BigEndian2int8s ((const char*)List);}
-inline int8u BigEndian2int8u (const int8u* List) {return BigEndian2int8u ((const char*)List);}
-inline int16s BigEndian2int16s (const int8u* List) {return BigEndian2int16s ((const char*)List);}
-inline int16u BigEndian2int16u (const int8u* List) {return BigEndian2int16u ((const char*)List);}
-inline int32s BigEndian2int32s (const int8u* List) {return BigEndian2int32s ((const char*)List);}
-inline int32u BigEndian2int24u (const int8u* List) {return BigEndian2int24u ((const char*)List);}
-inline int32s BigEndian2int24s (const int8u* List) {return BigEndian2int24s ((const char*)List);}
-inline int32u BigEndian2int32u (const int8u* List) {return BigEndian2int32u ((const char*)List);}
-#if (MAXTYPE_INT >= 64)
-inline int64s BigEndian2int40s (const int8u* List) {return BigEndian2int40s ((const char*)List);}
-inline int64u BigEndian2int40u (const int8u* List) {return BigEndian2int40u ((const char*)List);}
-inline int64s BigEndian2int48s (const int8u* List) {return BigEndian2int48s ((const char*)List);}
-inline int64u BigEndian2int48u (const int8u* List) {return BigEndian2int48u ((const char*)List);}
-inline int64s BigEndian2int56s (const int8u* List) {return BigEndian2int56s ((const char*)List);}
-inline int64u BigEndian2int56u (const int8u* List) {return BigEndian2int56u ((const char*)List);}
-inline int64s BigEndian2int64s (const int8u* List) {return BigEndian2int64s ((const char*)List);}
-inline int64u BigEndian2int64u (const int8u* List) {return BigEndian2int64u ((const char*)List);}
-inline int128u BigEndian2int128u (const int8u* List) {return BigEndian2int128u ((const char*)List);}
-#endif
-inline float32 BigEndian2float16 (const int8u* List) {return BigEndian2float16 ((const char*)List);}
-inline float32 BigEndian2float32 (const int8u* List) {return BigEndian2float32 ((const char*)List);}
-inline float64 BigEndian2float64 (const int8u* List) {return BigEndian2float64 ((const char*)List);}
-inline float80 BigEndian2float80 (const int8u* List) {return BigEndian2float80 ((const char*)List);}
-
-inline void int8s2BigEndian (int8u* List, int8s Value) {return int8s2BigEndian ((char*)List, Value);}
-inline void int8u2BigEndian (int8u* List, int8u Value) {return int8u2BigEndian ((char*)List, Value);}
-inline void int16s2BigEndian (int8u* List, int16s Value) {return int16s2BigEndian ((char*)List, Value);}
-inline void int16u2BigEndian (int8u* List, int16u Value) {return int16u2BigEndian ((char*)List, Value);}
-inline void int24s2BigEndian (int8u* List, int32s Value) {return int24s2BigEndian ((char*)List, Value);}
-inline void int24u2BigEndian (int8u* List, int32u Value) {return int24u2BigEndian ((char*)List, Value);}
-inline void int32s2BigEndian (int8u* List, int32s Value) {return int32s2BigEndian ((char*)List, Value);}
-inline void int32u2BigEndian (int8u* List, int32u Value) {return int32u2BigEndian ((char*)List, Value);}
-#if (MAXTYPE_INT >= 64)
-inline void int40s2BigEndian (int8u* List, int64s Value) {return int40s2BigEndian ((char*)List, Value);}
-inline void int40u2BigEndian (int8u* List, int64u Value) {return int40u2BigEndian ((char*)List, Value);}
-inline void int48s2BigEndian (int8u* List, int64s Value) {return int48s2BigEndian ((char*)List, Value);}
-inline void int48u2BigEndian (int8u* List, int64u Value) {return int48u2BigEndian ((char*)List, Value);}
-inline void int56s2BigEndian (int8u* List, int64s Value) {return int56s2BigEndian ((char*)List, Value);}
-inline void int56u2BigEndian (int8u* List, int64u Value) {return int56u2BigEndian ((char*)List, Value);}
-inline void int64s2BigEndian (int8u* List, int64s Value) {return int64s2BigEndian ((char*)List, Value);}
-inline void int64u2BigEndian (int8u* List, int64u Value) {return int64u2BigEndian ((char*)List, Value);}
-inline void int128u2BigEndian (int8u* List, int128u Value) {return int128u2BigEndian ((char*)List, Value);}
-#endif
-inline void float162BigEndian (int8u* List, float32 Value) {return float162BigEndian ((char*)List, Value);}
-inline void float322BigEndian (int8u* List, float32 Value) {return float322BigEndian ((char*)List, Value);}
-inline void float642BigEndian (int8u* List, float64 Value) {return float642BigEndian ((char*)List, Value);}
-inline void float802BigEndian (int8u* List, float80 Value) {return float802BigEndian ((char*)List, Value);}
-#endif //__BORLANDC__
-
-//---------------------------------------------------------------------------
-// int32 - int64
-int64s int32s_int64s ( int32s High, int32u Low);
-int64u int32u_int64u ( int32u High, int32u Low);
-void int32s_int64s (int64s &BigInt, int32s High, int32u Low);
-void int32u_int64u (int64s &BigInt, int32u High, int32u Low);
-void int64s_int32s (int64s BigInt, int32s &High, int32u &Low);
-void int64u_int32u (int64u BigInt, int32u &High, int32u &Low);
-
-//---------------------------------------------------------------------------
-// Floats and ints
-int32s float32_int32s (float32 F, bool Rounded=true);
-int64s float32_int64s (float32 F, bool Rounded=true);
-int32s float64_int32s (float64 F, bool Rounded=true);
-int64s float64_int64s (float64 F, bool Rounded=true);
-
-// These functions are used because MSVC6 isn't able to convert an unsigned int64 to a floating-point value, and I couldn't think of a cleaner way to handle it.
-#if defined(_MSC_VER) && _MSC_VER<=1200
- inline float32 int64u_float32 (int64u v) {return static_cast<float32>(static_cast<int64s>(v>>1))*2.0f + static_cast<float32>(static_cast<int64s>(v & 1));}
- inline float64 int64u_float64 (int64u v) {return static_cast<float64>(static_cast<int64s>(v>>1))*2.0f + static_cast<float32>(static_cast<int64s>(v & 1));}
-#else
- inline float32 int64u_float32 (int64u v) {return (float32)v;}
- inline float64 int64u_float64 (int64u v) {return (float64)v;}
-#endif // defined(_MSC_VER) && _MSC_VER<=1200
-
-//---------------------------------------------------------------------------
-// CC (often used in all containers to identify a stream
-inline int64u CC8(const char* C) {return BigEndian2int64u(C);}
-inline int64u CC7(const char* C) {return BigEndian2int56u(C);}
-inline int64u CC6(const char* C) {return BigEndian2int48u(C);}
-inline int64u CC5(const char* C) {return BigEndian2int40u(C);}
-inline int32u CC4(const char* C) {return BigEndian2int32u(C);}
-inline int32u CC3(const char* C) {return BigEndian2int24u(C);}
-inline int16u CC2(const char* C) {return BigEndian2int16u(C);}
-inline int8u CC1(const char* C) {return BigEndian2int8u (C);}
-#ifndef __BORLANDC__
-inline int64u CC8(const int8u* C) {return BigEndian2int64u(C);}
-inline int64u CC7(const int8u* C) {return BigEndian2int56u(C);}
-inline int64u CC6(const int8u* C) {return BigEndian2int48u(C);}
-inline int64u CC5(const int8u* C) {return BigEndian2int40u(C);}
-inline int32u CC4(const int8u* C) {return BigEndian2int32u(C);}
-inline int32u CC3(const int8u* C) {return BigEndian2int24u(C);}
-inline int16u CC2(const int8u* C) {return BigEndian2int16u(C);}
-inline int8u CC1(const int8u* C) {return BigEndian2int8u (C);}
-#endif // __BORLANDC__
-
-//---------------------------------------------------------------------------
-// turn a numeric literal into a hex constant
-// (avoids problems with leading zeroes)
-// 8-bit constants max value 0x11111111, always fits in unsigned long
-#define HEX__(n) 0x##n##LU
-
-// 8-bit conversion function
-#define B8__(x) ((x&0x0000000FLU)?0x01:0) \
- +((x&0x000000F0LU)?0x02:0) \
- +((x&0x00000F00LU)?0x04:0) \
- +((x&0x0000F000LU)?0x08:0) \
- +((x&0x000F0000LU)?0x10:0) \
- +((x&0x00F00000LU)?0x20:0) \
- +((x&0x0F000000LU)?0x40:0) \
- +((x&0xF0000000LU)?0x80:0)
-
-// for upto 8-bit binary constants
-#define B8(d) ((int8u)B8__(HEX__(d)))
-
-// for upto 16-bit binary constants, MSB first
-#define B16(dmsb, dlsb) (((int16u)B8(dmsb)<<8) \
- + ((int16u)B8(dlsb)<<0))
-
-// for upto 32-bit binary constants, MSB first
-#define B32(dmsb, db2, db3, dlsb) (((int32u)B8(dmsb)<<24) \
- + ((int32u)B8( db2)<<16) \
- + ((int32u)B8( db3)<< 8) \
- + ((int32u)B8(dlsb)<< 0))
-
-} //namespace ZenLib
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/Ztring.cpp b/src/thirdparty/ZenLib/ZenLib/Ztring.cpp
deleted file mode 100644
index 5f1f529f5..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Ztring.cpp
+++ /dev/null
@@ -1,2411 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// More methods for std::(w)string
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#ifdef ZENLIB_USEWX
- #include <wx/strconv.h>
- #include <wx/datetime.h>
-#else //ZENLIB_USEWX
- #ifdef ZENLIB_STANDARD
- #undef WINDOWS
- #endif
- #ifdef WINDOWS
- #undef __TEXT
- #include <windows.h>
- #include <tchar.h>
- #endif
-#endif //ZENLIB_USEWX
-#ifdef __MINGW32__
- #include <windows.h>
-#endif //__MINGW32__
-#include <algorithm>
-#include <iomanip>
-#include <cmath>
-#include <ctime>
-#include "ZenLib/OS_Utils.h"
-#include "ZenLib/File.h"
-using namespace std;
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-int16u Ztring_ISO_8859_2[96]=
-{
- 0x00A0,
- 0x0104,
- 0x02D8,
- 0x0141,
- 0x00A4,
- 0x013D,
- 0x015A,
- 0x00A7,
- 0x00A8,
- 0x0160,
- 0x015E,
- 0x0164,
- 0x0179,
- 0x00AD,
- 0x017D,
- 0x017B,
- 0x00B0,
- 0x0105,
- 0x02DB,
- 0x0142,
- 0x00B4,
- 0x013E,
- 0x015B,
- 0x02C7,
- 0x00B8,
- 0x0161,
- 0x015F,
- 0x0165,
- 0x017A,
- 0x02DD,
- 0x017E,
- 0x017C,
- 0x0154,
- 0x00C1,
- 0x00C2,
- 0x0102,
- 0x00C4,
- 0x0139,
- 0x0106,
- 0x00C7,
- 0x010C,
- 0x00C9,
- 0x0118,
- 0x00CB,
- 0x011A,
- 0x00CD,
- 0x00CE,
- 0x010E,
- 0x0110,
- 0x0143,
- 0x0147,
- 0x00D3,
- 0x00D4,
- 0x0150,
- 0x00D6,
- 0x00D7,
- 0x0158,
- 0x016E,
- 0x00DA,
- 0x0170,
- 0x00DC,
- 0x00DD,
- 0x0162,
- 0x00DF,
- 0x0155,
- 0x00E1,
- 0x00E2,
- 0x0103,
- 0x00E4,
- 0x013A,
- 0x0107,
- 0x00E7,
- 0x010D,
- 0x00E9,
- 0x0119,
- 0x00EB,
- 0x011B,
- 0x00ED,
- 0x00EE,
- 0x010F,
- 0x0111,
- 0x0144,
- 0x0148,
- 0x00F3,
- 0x00F4,
- 0x0151,
- 0x00F6,
- 0x00F7,
- 0x0159,
- 0x016F,
- 0x00FA,
- 0x0171,
- 0x00FC,
- 0x00FD,
- 0x0163,
- 0x02D9,
-};
-
-//---------------------------------------------------------------------------
-Ztring EmptyZtring;
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#if defined(STREAM_MISSING)
- #if defined (_UNICODE)
- #define _tnprintf snwprintf
- #else
- #define _tnprintf snprintf
- #endif
-#else
- typedef basic_stringstream<Char> tStringStream;
- typedef basic_istringstream<Char> tiStringStream;
- typedef basic_ostringstream<Char> toStringStream;
-#endif
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Operators
-//***************************************************************************
-
-Char &Ztring::operator() (size_type Pos)
-{
- if (Pos>size())
- resize(Pos);
- return operator[] (Pos);
-}
-
-//***************************************************************************
-// Assign
-//***************************************************************************
-
-bool Ztring::Assign_FromFile (const Ztring &FileName)
-{
- File F;
- if (!F.Open(FileName))
- return false;
- int64u F_Size=F.Size_Get();
- if (F_Size>((size_t)-1)-1)
- return false;
-
- //Creating buffer
- int8u* Buffer=new int8u[(size_t)F_Size+1];
- size_t Buffer_Offset=0;
-
- //Reading the file
- while(Buffer_Offset<F_Size)
- {
- size_t BytesRead=F.Read(Buffer+Buffer_Offset, (size_t)F_Size-Buffer_Offset);
- if (BytesRead==0)
- break; //Read is finished
- Buffer_Offset+=BytesRead;
- }
- if (Buffer_Offset<F_Size)
- {
- delete[] Buffer;
- return false;
- }
- Buffer[Buffer_Offset]='\0';
-
- //Filling
- assign((const Char*)Buffer);
- delete[] Buffer;
-
- return true;
-}
-
-//***************************************************************************
-// Conversions
-//***************************************************************************
-
-Ztring& Ztring::From_Unicode (const wchar_t S)
-{
- #ifdef _UNICODE
- append(1, S);
- #else
- From_Unicode(&S, 1);
- #endif
- return *this;
-}
-
-Ztring& Ztring::From_Unicode (const wchar_t* S)
-{
- if (S==NULL)
- return *this;
-
- #ifdef _UNICODE
- assign(S);
- #else
- #ifdef ZENLIB_USEWX
- size_type OK=wxConvCurrent->WC2MB(NULL, S, 0);
- if (OK!=0 && OK!=Error)
- assign(wxConvCurrent->cWC2MB(S));
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- int Size=WideCharToMultiByte(CP_UTF8, 0, S, -1, NULL, 0, NULL, NULL);
- if (Size!=0)
- {
- char* AnsiString=new char[Size+1];
- WideCharToMultiByte(CP_UTF8, 0, S, -1, AnsiString, Size, NULL, NULL);
- AnsiString[Size]='\0';
- assign (AnsiString);
- delete[] AnsiString;
- }
- else
- clear();
- #else //WINDOWS
- size_t Size=wcstombs(NULL, S, 0);
- if (Size!=0 && Size!=(size_t)-1)
- {
- char* AnsiString=new char[Size+1];
- Size=wcstombs(AnsiString, S, wcslen(S));
- AnsiString[Size]='\0';
- assign (AnsiString);
- delete[] AnsiString;
- }
- else
- clear();
- #endif
- #endif //ZENLIB_USEWX
- #endif
- return *this;
-}
-
-Ztring& Ztring::From_Unicode (const wchar_t *S, size_type Start, size_type Length)
-{
- if (S==NULL)
- return *this;
-
- if (Length==Error)
- Length=wcslen(S+Start);
- wchar_t* Temp=new wchar_t[Length+1];
- wcsncpy (Temp, S+Start, Length);
- Temp[Length]=__T('\0');
-
- From_Unicode(Temp);
- delete[] Temp; //Temp=NULL;
- return *this;
-}
-
-Ztring& Ztring::From_UTF8 (const char* S)
-{
- if (S==NULL)
- return *this;
-
- #ifdef ZENLIB_USEWX
- size_type OK=wxConvUTF8.MB2WC(NULL, S, 0);
- if (OK!=0 && OK!=Error)
- #ifdef _UNICODE
- assign(wxConvUTF8.cMB2WC(S).data());
- #else
- assign(wxConvCurrent->cWC2MB(wxConvUTF8.cMB2WC(S)));
- #endif
- #else //ZENLIB_USEWX
- #ifdef _UNICODE
- // Don't use MultiByteToWideChar(), some characters are not well decoded
- clear();
- const int8u* Z=(const int8u*)S;
- while (*Z) //0 is end
- {
- //1 byte
- if (*Z<0x80)
- {
- operator += ((wchar_t)(*Z));
- Z++;
- }
- //2 bytes
- else if ((*Z&0xE0)==0xC0)
- {
- if ((*(Z+1)&0xC0)==0x80)
- {
- operator += ((((wchar_t)(*Z&0x1F))<<6)|(*(Z+1)&0x3F));
- Z+=2;
- }
- else
- {
- clear();
- return *this; //Bad character
- }
- }
- //3 bytes
- else if ((*Z&0xF0)==0xE0)
- {
- if ((*(Z+1)&0xC0)==0x80 && (*(Z+2)&0xC0)==0x80)
- {
- operator += ((((wchar_t)(*Z&0x0F))<<12)|((*(Z+1)&0x3F)<<6)|(*(Z+2)&0x3F));
- Z+=3;
- }
- else
- {
- clear();
- return *this; //Bad character
- }
- }
- //4 bytes
- else if ((*Z&0xF8)==0xF0)
- {
- if ((*(Z+1)&0xC0)==0x80 && (*(Z+2)&0xC0)==0x80 && (*(Z+3)&0xC0)==0x80)
- {
- operator += ((((wchar_t)(*Z&0x0F))<<18)|((*(Z+1)&0x3F)<<12)||((*(Z+2)&0x3F)<<6)|(*(Z+3)&0x3F));
- Z+=4;
- }
- else
- {
- clear();
- return *this; //Bad character
- }
- }
- else
- {
- clear();
- return *this; //Bad character
- }
- }
- #else
- assign(S); //Not implemented
- #endif
- #endif //ZENLIB_USEWX
- return *this;
-}
-
-Ztring& Ztring::From_UTF8 (const char* S, size_type Start, size_type Length)
-{
- if (S==NULL)
- return *this;
-
- if (Length==Error)
- Length=strlen(S+Start);
- char* Temp=new char[Length+1];
- strncpy (Temp, S+Start, Length);
- Temp[Length]='\0';
-
- From_UTF8(Temp);
- delete[] Temp; //Temp=NULL;
- return *this;
-}
-
-Ztring& Ztring::From_UTF16 (const char* S)
-{
- if (S==NULL)
- return *this;
-
- if ((unsigned char)S[0]==(unsigned char)0xFF && (unsigned char)S[1]==(unsigned char)0xFE)
- return From_UTF16LE(S+2);
- else if ((unsigned char)S[0]==(unsigned char)0xFE && (unsigned char)S[1]==(unsigned char)0xFF)
- return From_UTF16BE(S+2);
- else if ((unsigned char)S[0]==(unsigned char)0x00 && (unsigned char)S[1]==(unsigned char)0x00)
- {
- clear(); //No begin!
- return *this;
- }
- else
- return From_UTF16LE(S); //Not sure, default
-}
-
-Ztring& Ztring::From_UTF16 (const char* S, size_type Start, size_type Length)
-{
- if (S==NULL)
- return *this;
-
- if (Length<2)
- return *this;
-
- if ((unsigned char)S[0]==(unsigned char)0xFF && (unsigned char)S[1]==(unsigned char)0xFE)
- return From_UTF16LE(S+2, Start, Length-2);
- else if ((unsigned char)S[0]==(unsigned char)0xFE && (unsigned char)S[1]==(unsigned char)0xFF)
- return From_UTF16BE(S+2, Start, Length-2);
- else if ((unsigned char)S[0]==(unsigned char)0x00 && (unsigned char)S[1]==(unsigned char)0x00)
- {
- clear(); //No begin!
- return *this;
- }
- else
- return From_UTF16LE(S, Start, Length); //Not sure, default
-}
-
-Ztring& Ztring::From_UTF16BE (const char* S)
-{
- if (S==NULL)
- return *this;
-
- #ifdef ZENLIB_USEWX
- //clear(); return *this;
- wxMBConvUTF16BE wxConvUTF16BE;
- size_type OK=wxConvUTF16BE.MB2WC(NULL, S, 0);
- if (OK!=0 && OK!=Error)
- #ifdef _UNICODE
- assign(wxConvUTF16BE.cMB2WC(S).data());
- #else
- assign(wxConvCurrent->cWC2MB(wxConvUTF16BE.cMB2WC(S)));
- #endif
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- clear();
- const wchar_t* SW=(const wchar_t*)S;
- size_t Pos=0;
- while (SW[Pos]!=__T('\0'))
- {
- Char Temp=(Char)(((SW[Pos]&0xFF00)>>8)+((SW[Pos]&0x00FF)<<8));
- append(1, Temp);
- Pos++;
- }
- #else //WINDOWS
- clear();
- while (S[0]!=0 || S[1]!=0)
- {
- append(1, (Char)BigEndian2int16u(S));
- S+=2;
- }
- #endif
- #endif //ZENLIB_USEWX
- return *this;
-}
-
-Ztring& Ztring::From_UTF16BE (const char* S, size_type Start, size_type Length)
-{
- if (S==NULL)
- return *this;
-
- if (Length==Error)
- {
- Length=0;
- while(S[Length]!=0x0000)
- Length++;
- }
- else
- Length&=(size_t)-2; //odd number
-
- char* Temp=new char[Length+2];
- memcpy (Temp, S+Start, Length);
- Temp[Length+0]=0x00;
- Temp[Length+1]=0x00;
- reserve(Length);
- From_UTF16BE(Temp);
- delete[] Temp; //Temp=NULL;
- return *this;
-}
-
-Ztring& Ztring::From_UTF16LE (const char* S)
-{
- if (S==NULL)
- return *this;
-
- #ifdef ZENLIB_USEWX
- //clear(); return *this;
- wxMBConvUTF16LE wxConvUTF16LE;
- size_type OK=wxConvUTF16LE.MB2WC(NULL, S, 0);
- if (OK!=0 && OK!=Error)
- #ifdef _UNICODE
- assign(wxConvUTF16LE.cMB2WC(S).data());
- #else
- assign(wxConvCurrent->cWC2MB(wxConvUTF16LE.cMB2WC(S)));
- #endif
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- #ifdef UNICODE
- const wchar_t* SW=(const wchar_t*)S;
- assign(SW);
- #else
- clear(); //Not implemented
- #endif
- #else //WINDOWS
- clear();
- while (S[0]!=0 || S[1]!=0)
- {
- append(1, (Char)LittleEndian2int16u(S));
- S+=2;
- }
- #endif
- #endif //ZENLIB_USEWX
- return *this;
-}
-
-Ztring& Ztring::From_UTF16LE (const char* S, size_type Start, size_type Length)
-{
- if (S==NULL)
- return *this;
-
- if (Length==Error)
- {
- Length=0;
- while(S[Length]!=0x0000)
- Length+=2;
- }
- else
- Length&=(size_t)-2; //odd number
-
- char* Temp=new char[Length+2];
- memcpy (Temp, S+Start, Length);
- Temp[Length+0]=0x00;
- Temp[Length+1]=0x00;
- From_UTF16LE(Temp);
- delete[] Temp; //Temp=NULL;
- return *this;
-}
-
-Ztring& Ztring::From_Local (const char* S)
-{
- if (S==NULL)
- return *this;
-
- #ifdef _UNICODE
- #ifdef ZENLIB_USEWX
- size_type OK=wxConvCurrent->MB2WC(NULL, S, 0);
- if (OK!=0 && OK!=Error)
- assign(wxConvCurrent->cMB2WC(S).data());
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- int Size=MultiByteToWideChar(CP_ACP, 0, S, -1, NULL, 0);
- if (Size!=0)
- {
- wchar_t* WideString=new wchar_t[Size+1];
- MultiByteToWideChar(CP_ACP, 0, S, -1, WideString, Size);
- WideString[Size]=L'\0';
- assign (WideString);
- delete[] WideString; //WideString=NULL;
- }
- else
- clear();
- #else //WINDOWS
- size_t Size=mbstowcs(NULL, S, 0);
- if (Size!=0 && Size!=(size_t)-1)
- {
- wchar_t* WideString=new wchar_t[Size+1];
- Size=mbstowcs(WideString, S, Size);
- WideString[Size]=L'\0';
- assign (WideString);
- delete[] WideString; //WideString=NULL;
- }
- else
- clear();
- #endif
- #endif //ZENLIB_USEWX
- #else
- assign(S);
- #endif
- return *this;
-}
-
-Ztring& Ztring::From_Local (const char* S, size_type Start, size_type Length)
-{
- if (S==NULL)
- return *this;
-
- if (Length==Error)
- Length=strlen(S+Start);
- #ifdef _UNICODE
- char* Temp=new char[Length+1];
- strncpy (Temp, S+Start, Length);
- Temp[Length]='\0';
- From_Local(Temp);
- delete[] Temp; //Temp=NULL;
- #else
- assign(S+Start, Length);
- if (find(__T('\0'))!=std::string::npos)
- resize(find(__T('\0')));
- #endif
- return *this;
-}
-
-Ztring& Ztring::From_ISO_8859_1(const char* S)
-{
- size_t Length = strlen(S);
- wchar_t* Temp = new wchar_t[Length +1];
-
- for (size_t Pos=0; Pos<Length+1; Pos++)
- Temp[Pos]=(wchar_t)((int8u)S[Pos]);
-
- From_Unicode(Temp);
- delete[] Temp;
- return *this;
-}
-
-Ztring& Ztring::From_ISO_8859_1(const char* S, size_type Start, size_type Length)
-{
- if (S==NULL)
- return *this;
-
- if (Length==Error)
- Length=strlen(S+Start);
- #ifdef _UNICODE
- char* Temp = new char[Length+1];
- strncpy(Temp, S +Start, Length);
- Temp[Length] = '\0';
- From_ISO_8859_1(Temp);
- delete[] Temp;
- #else
- assign(S +Start, Length);
- if (find(__T('\0')) != std::string::npos)
- resize(find(__T('\0')));
- #endif
- return *this;
-}
-
-Ztring& Ztring::From_ISO_8859_2(const char* S)
-{
- size_t Length = strlen(S);
- wchar_t* Temp = new wchar_t[Length +1];
-
- for (size_t Pos=0; Pos<Length+1; Pos++)
- {
- if ((int8u)S[Pos]>=0xA0)
- Temp[Pos]=(wchar_t)Ztring_ISO_8859_2[((int8u)S[Pos])-0xA0];
- else
- Temp[Pos]=(wchar_t)((int8u)S[Pos]);
- }
-
- From_Unicode(Temp);
- delete[] Temp;
- return *this;
-}
-
-Ztring& Ztring::From_ISO_8859_2(const char* S, size_type Start, size_type Length)
-{
- if (S==NULL)
- return *this;
-
- if (Length==Error)
- Length=strlen(S+Start);
- #ifdef _UNICODE
- char* Temp = new char[Length+1];
- strncpy(Temp, S +Start, Length);
- Temp[Length] = '\0';
- From_ISO_8859_2(Temp);
- delete[] Temp;
- #else
- assign(S +Start, Length);
- if (find(__T('\0')) != std::string::npos)
- resize(find(__T('\0')));
- #endif
- return *this;
-}
-
-Ztring& Ztring::From_GUID (const int128u S)
-{
- Ztring S1;
- S1.From_CC1((int8u) ((S.hi&0x000000FF00000000LL)>>32)); append(S1);
- S1.From_CC1((int8u) ((S.hi&0x0000FF0000000000LL)>>40)); append(S1);
- S1.From_CC1((int8u) ((S.hi&0x00FF000000000000LL)>>48)); append(S1);
- S1.From_CC1((int8u) ((S.hi&0xFF00000000000000LL)>>56)); append(S1); append(__T("-"));
- S1.From_CC1((int8u) ((S.hi&0x0000000000FF0000LL)>>16)); append(S1);
- S1.From_CC1((int8u) ((S.hi&0x00000000FF000000LL)>>24)); append(S1); append(__T("-"));
- S1.From_CC1((int8u) ( S.hi&0x00000000000000FFLL )); append(S1);
- S1.From_CC1((int8u) ((S.hi&0x000000000000FF00LL)>> 8)); append(S1); append(__T("-"));
- S1.From_CC2((int16u)((S.lo&0xFFFF000000000000LL)>>48)); append(S1); append(__T("-"));
- S1.From_CC2((int16u)((S.lo&0x0000FFFF00000000LL)>>32)); append(S1);
- S1.From_CC2((int16u)((S.lo&0x00000000FFFF0000LL)>>16)); append(S1);
- S1.From_CC2((int16u)( S.lo&0x000000000000FFFFLL )); append(S1);
-
- return *this;
-}
-
-Ztring& Ztring::From_UUID (const int128u S)
-{
- Ztring S1;
- S1.From_CC2((int16u)((S.hi&0xFFFF000000000000LL)>>48)); assign(S1);
- S1.From_CC2((int16u)((S.hi&0x0000FFFF00000000LL)>>32)); append(S1); append(__T("-"));
- S1.From_CC2((int16u)((S.hi&0x00000000FFFF0000LL)>>16)); append(S1); append(__T("-"));
- S1.From_CC2((int16u)( S.hi&0x000000000000FFFFLL )); append(S1); append(__T("-"));
- S1.From_CC2((int16u)((S.lo&0xFFFF000000000000LL)>>48)); append(S1); append(__T("-"));
- S1.From_CC2((int16u)((S.lo&0x0000FFFF00000000LL)>>32)); append(S1);
- S1.From_CC2((int16u)((S.lo&0x00000000FFFF0000LL)>>16)); append(S1);
- S1.From_CC2((int16u)( S.lo&0x000000000000FFFFLL )); append(S1);
-
- return *this;
-}
-
-Ztring& Ztring::From_CC4 (const int32u S)
-{
- std::string S1;
- S1.append(1, (char)((S&0xFF000000)>>24));
- S1.append(1, (char)((S&0x00FF0000)>>16));
- S1.append(1, (char)((S&0x0000FF00)>> 8));
- S1.append(1, (char)((S&0x000000FF) ));
- From_Local(S1.c_str());
-
- // Validity Test
- if ( size()==4
- || (size()==3 && (S&0x000000FF)==0x00000000 && at(0)>=0x20 && at(1)>=0x20 && at(2)>=0x20)
- || (size()==2 && (S&0x0000FFFF)==0x00000000 && at(0)>=0x20 && at(1)>=0x20)
- || (size()==1 && (S&0x00FFFFFF)==0x00000000 && at(0)>=0x20))
- return *this;
-
- // Not valid, using 0x as fallback
- clear();
- append(__T("0x"));
- append(Ztring().From_CC1((int8u)((S&0xFF000000)>>24)));
- append(Ztring().From_CC1((int8u)((S&0x00FF0000)>>16)));
- append(Ztring().From_CC1((int8u)((S&0x0000FF00)>> 8)));
- append(Ztring().From_CC1((int8u)((S&0x000000FF) )));
-
- return *this;
-}
-
-Ztring& Ztring::From_CC3 (const int32u S)
-{
- std::string S1;
- S1.append(1, (char)((S&0x00FF0000)>>16));
- S1.append(1, (char)((S&0x0000FF00)>> 8));
- S1.append(1, (char)((S&0x000000FF)>> 0));
- From_Local(S1.c_str());
-
- //Test
- if (empty())
- assign(__T("(empty)"));
-
- return *this;
-}
-
-Ztring& Ztring::From_CC2 (const int16u S)
-{
- clear();
- Ztring Pos1; Pos1.From_Number(S, 16);
- resize(4-Pos1.size(), __T('0'));
- append(Pos1);
- MakeUpperCase();
-
- return *this;
-}
-
-Ztring& Ztring::From_CC1 (const int8u S)
-{
- clear();
- Ztring Pos1; Pos1.From_Number(S, 16);
- resize(2-Pos1.size(), __T('0'));
- append(Pos1);
- MakeUpperCase();
-
- return *this;
-}
-
-Ztring& Ztring::From_Number (const int8s I, int8u Radix)
-{
- #if defined(STREAM_MISSING)
- if (Radix==0)
- {
- clear();
- return *this;
- }
- Char* C1=new Char[33];
- #ifdef __MINGW32__
- _itot (I, C1, Radix);
- #else
- _tnprintf(C1, 32, Radix==10?__T("%d"):(Radix==16?__T("%x"):(Radix==8?__T("%o"):__T(""))), I);
- #endif
- assign (C1);
- delete[] C1; //C1=NULL;
- #else
- toStringStream Stream;
- #ifdef UNICODE
- Stream << setbase(Radix) << I;
- #else //UNICODE
- Stream << setbase(Radix) << (size_t)I; //On linux (at least), (un)signed char is detected as a char
- #endif //UNICODE
- assign(Stream.str());
- #endif
- MakeUpperCase();
- return *this;
-}
-
-Ztring& Ztring::From_Number (const int8u I, int8u Radix)
-{
- #if defined(STREAM_MISSING)
- if (Radix==0)
- {
- clear();
- return *this;
- }
- Char* C1=new Char[33];
- #ifdef __MINGW32__
- _ultot (I, C1, Radix);
- #else
- _tnprintf(C1, 32, Radix==10?__T("%d"):(Radix==16?__T("%x"):(Radix==8?__T("%o"):__T(""))), I);
- #endif
- assign (C1);
- delete[] C1; //C1=NULL;
- #else
- if (Radix==2)
- {
- clear();
- for (int8u Pos=0; Pos<8; Pos++)
- {
- if (I<(((int8u)1)<<Pos))
- break;
- insert(0, 1, (I&(((int8u)1)<<Pos))?__T('1'):__T('0'));
- }
- }
- else
- {
- toStringStream Stream;
- #ifdef UNICODE
- Stream << setbase(Radix) << I;
- #else //UNICODE
- Stream << setbase(Radix) << (size_t)I; //On linux (at least), (un)signed char is detected as a char
- #endif //UNICODE
- assign(Stream.str());
- }
- #endif
- MakeUpperCase();
- return *this;
-}
-
-Ztring& Ztring::From_Number (const int16s I, int8u Radix)
-{
- #if defined(STREAM_MISSING)
- if (Radix==0)
- {
- clear();
- return *this;
- }
- Char* C1=new Char[33];
- #ifdef __MINGW32__
- _itot (I, C1, Radix);
- #else
- _tnprintf(C1, 32, Radix==10?__T("%d"):(Radix==16?__T("%x"):(Radix==8?__T("%o"):__T(""))), I);
- #endif
- assign (C1);
- delete[] C1; //C1=NULL;
- #else
- toStringStream Stream;
- Stream << setbase(Radix) << I;
- assign(Stream.str());
- #endif
- MakeUpperCase();
- return *this;
-}
-
-Ztring& Ztring::From_Number (const int16u I, int8u Radix)
-{
- #if defined(STREAM_MISSING)
- if (Radix==0)
- {
- clear();
- return *this;
- }
- Char* C1=new Char[33];
- #ifdef __MINGW32__
- _ultot (I, C1, Radix);
- #else
- _tnprintf(C1, 32, Radix==10?__T("%u"):(Radix==16?__T("%x"):(Radix==8?__T("%o"):__T(""))), I);
- #endif
- assign (C1);
- delete[] C1; //C1=NULL;
- #else
- if (Radix==2)
- {
- clear();
- for (int8u Pos=0; Pos<16; Pos++)
- {
- if (I<(((int16u)1)<<Pos))
- break;
- insert(0, 1, (I&(((int16u)1)<<Pos))?__T('1'):__T('0'));
- }
- }
- else
- {
- toStringStream Stream;
- Stream << setbase(Radix) << I;
- assign(Stream.str());
- }
- #endif
- MakeUpperCase();
- return *this;
-}
-
-Ztring& Ztring::From_Number (const int32s I, int8u Radix)
-{
- #if defined(STREAM_MISSING)
- if (Radix==0)
- {
- clear();
- return *this;
- }
- Char* C1=new Char[33];
- #ifdef __MINGW32__
- _itot (I, C1, Radix);
- #else
- _tnprintf(C1, 32, Radix==10?__T("%ld"):(Radix==16?__T("%lx"):(Radix==8?__T("%lo"):__T(""))), I);
- #endif
- assign (C1);
- delete[] C1; //C1=NULL;
- #else
- toStringStream Stream;
- Stream << setbase(Radix) << I;
- assign(Stream.str());
- #endif
- MakeUpperCase();
- return *this;
-}
-
-Ztring& Ztring::From_Number (const int32u I, int8u Radix)
-{
- #if defined(STREAM_MISSING)
- if (Radix==0)
- {
- clear();
- return *this;
- }
- Char* C1=new Char[33];
- #ifdef __MINGW32__
- _ultot (I, C1, Radix);
- #else
- _tnprintf(C1, 32, Radix==10?__T("%lu"):(Radix==16?__T("%lx"):(Radix==8?__T("%lo"):__T(""))), I);
- #endif
- assign (C1);
- delete[] C1; //C1=NULL;
- #else
- if (Radix==2)
- {
- clear();
- for (int8u Pos=0; Pos<32; Pos++)
- {
- if (I<(((int32u)1)<<Pos))
- break;
- insert(0, 1, (I&(((int32u)1)<<Pos))?__T('1'):__T('0'));
- }
- }
- else
- {
- toStringStream Stream;
- Stream << setbase(Radix) << I;
- assign(Stream.str());
- }
- #endif
- MakeUpperCase();
- return *this;
-}
-
-Ztring& Ztring::From_Number (const int64s I, int8u Radix)
-{
- #if defined(STREAM_MISSING)
- if (Radix==0)
- {
- clear();
- return *this;
- }
- Char* C1=new Char[65];
- #ifdef __MINGW32__
- _i64tot (I, C1, Radix);
- #else
- _tnprintf(C1, 64, Radix==10?__T("%lld"):(Radix==16?__T("%llx"):(Radix==8?__T("%llo"):__T(""))), I);
- #endif
- assign (C1);
- delete[] C1; //C1=NULL;
- #else
- toStringStream Stream;
- Stream << setbase(Radix) << I;
- assign(Stream.str());
- #endif
- MakeUpperCase();
- return *this;
-}
-
-Ztring& Ztring::From_Number (const int64u I, int8u Radix)
-{
- #if defined(STREAM_MISSING)
- if (Radix==0)
- {
- clear();
- return *this;
- }
- Char* C1=new Char[65]; C1[0] = 0;
- #ifdef __MINGW32__
- _ui64tot (I, C1, Radix);
- #else
- _tnprintf(C1, 64, Radix==10?__T("%llu"):(Radix==16?__T("%llx"):(Radix==8?__T("%llo"):__T(""))), I);
- #endif
- assign (C1);
- delete[] C1; //C1=NULL;
- #else
- if (Radix==2)
- {
- clear();
- for (int8u Pos=0; Pos<32; Pos++)
- {
- if (I<(((int64u)1)<<Pos))
- break;
- insert(0, 1, (I&(((int64u)1)<<Pos))?__T('1'):__T('0'));
- }
- }
- else
- {
- toStringStream Stream;
- Stream << setbase(Radix) << I;
- assign(Stream.str());
- }
- #endif
- MakeUpperCase();
- return *this;
-}
-
-Ztring& Ztring::From_Number (const int128u I, int8u Radix)
-{
- From_Local(I.toString(Radix));
-
- return *this;
-}
-
-Ztring& Ztring::From_Number (const float32 F, int8u Precision, ztring_t Options)
-{
- #if defined(STREAM_MISSING)
- Char C1[100];
- _tnprintf (C1, 99, (Ztring(__T("%."))+Ztring::ToZtring(Precision)+__T("f")).c_str(), F);
- assign(C1);
- #else
- toStringStream Stream;
- Stream << setprecision(Precision) << fixed << F;
- assign(Stream.str());
- #if defined(__BORLANDC__)
- FindAndReplace(__T(","), __T(".")); //Borland C++ Builder 2010+Windows Seven put a comma for istringstream, but does not support comma for ostringstream
- #endif
- #endif
-
- if ((Options & Ztring_NoZero && size()>0) && find(__T('.'))!=string::npos)
- {
- while (size()>0 && ((*this)[size()-1]==__T('0')))
- resize(size()-1);
- if (size()>0 && (*this)[size()-1]==__T('.'))
- resize(size()-1);
- }
-
- return *this;
-}
-
-Ztring& Ztring::From_Number (const float64 F, int8u Precision, ztring_t Options)
-{
- #if defined(STREAM_MISSING)
- Char C1[100];
- _tnprintf (C1, 99, (Ztring(__T("%."))+Ztring::ToZtring(Precision)+__T("f")).c_str(), F);
- assign(C1);
- #else
- toStringStream Stream;
- Stream << setprecision(Precision) << fixed << F;
- assign(Stream.str());
- #if defined(__BORLANDC__)
- FindAndReplace(__T(","), __T(".")); //Borland C++ Builder 2010+Windows Seven put a comma for istringstream, but does not support comma for ostringstream
- #endif
- #endif
-
- if ((Options & Ztring_NoZero && size()>0) && find(__T('.'))!=string::npos)
- {
- while (size()>0 && ((*this)[size()-1]==__T('0')))
- resize(size()-1);
- if (size()>0 && (*this)[size()-1]==__T('.'))
- resize(size()-1);
- }
-
- return *this;
-}
-
-Ztring& Ztring::From_Number (const float80 F, int8u Precision, ztring_t Options)
-{
- #if defined(STREAM_MISSING)
- Char C1[100];
- _tnprintf (C1, 99, (Ztring(__T("%."))+Ztring::ToZtring(Precision)+__T("f")).c_str(), F);
- assign(C1);
- #else
- toStringStream Stream;
- Stream << setprecision(Precision) << fixed << F;
- assign(Stream.str());
- #if defined(__BORLANDC__)
- FindAndReplace(__T(","), __T(".")); //Borland C++ Builder 2010+Windows Seven put a comma for istringstream, but does not support comma for ostringstream
- #endif
- #endif
-
- if ((Options & Ztring_NoZero && size()>0) && find(__T('.'))!=string::npos)
- {
- while (size()>0 && ((*this)[size()-1]==__T('0')))
- resize(size()-1);
- if (size()>0 && (*this)[size()-1]==__T('.'))
- resize(size()-1);
- }
-
- return *this;
-}
-
-#ifdef SIZE_T_IS_LONG
-Ztring& Ztring::From_Number (const size_t I, int8u Radix)
-{
- #if defined(STREAM_MISSING)
- Char C1[100];
- _tnprintf(C1, 64, Radix==10?__T("%zu"):(Radix==16?__T("%zx"):(Radix==8?__T("%zo"):__T(""))), I);
- assign(C1);
- #else
- toStringStream Stream;
- Stream << setbase(Radix) << I;
- assign(Stream.str());
- #if defined(__BORLANDC__)
- FindAndReplace(__T(","), __T(".")); //Borland C++ Builder 2010+Windows Seven put a comma for istringstream, but does not support comma for ostringstream
- #endif
- #endif
- MakeUpperCase();
- return *this;
-}
-#endif //SIZE_T_IS_LONG
-
-Ztring& Ztring::From_BCD (const int8u I)
-{
- #if defined(STREAM_MISSING)
- clear();
- append(1, __T('0')+I/0x10);
- append(1, __T('0')+I%0x10);
- #else
- toStringStream Stream;
- Stream << I/0x10;
- Stream << I%0x10;
- assign(Stream.str());
- #endif
- return *this;
-}
-
-//---------------------------------------------------------------------------
-Ztring& Ztring::Duration_From_Milliseconds (const int64s Value_)
-{
- int64s Value=Value_;
- bool Negative=false;
- if (Value<0)
- {
- Value=-Value;
- Negative=true;
- }
-
- int64u HH=(int8u)(Value/1000/60/60);
- int64u MM=Value/1000/60 -((HH*60));
- int64u Stream=Value/1000 -((HH*60+MM)*60);
- int64u MS=Value -((HH*60+MM)*60+Stream)*1000;
- Ztring DateT;
- Ztring Date;
- DateT.From_Number(HH); if (DateT.size()<2){DateT=Ztring(__T("0"))+DateT;}
- Date+=DateT;
- Date+=__T(":");
- DateT.From_Number(MM); if (DateT.size()<2){DateT=Ztring(__T("0"))+DateT;}
- Date+=DateT;
- Date+=__T(":");
- DateT.From_Number(Stream); if (DateT.size()<2){DateT=Ztring(__T("0"))+DateT;}
- Date+=DateT;
- Date+=__T(".");
- DateT.From_Number(MS); if (DateT.size()<2){DateT=Ztring(__T("00"))+DateT;} else if (DateT.size()<3){DateT=Ztring(__T("0"))+DateT;}
- Date+=DateT;
- if (Negative)
- {
- assign(__T("-"));
- append(Date);
- }
- else
- assign (Date.c_str());
- return *this;
-}
-
-//---------------------------------------------------------------------------
-Ztring& Ztring::Duration_From_Milliseconds (const int64u Value)
-{
- int64u HH=(int8u)(Value/1000/60/60);
- int64u MM=Value/1000/60 -((HH*60));
- int64u Stream=Value/1000 -((HH*60+MM)*60);
- int64u MS=Value -((HH*60+MM)*60+Stream)*1000;
- Ztring DateT;
- Ztring Date;
- DateT.From_Number(HH); if (DateT.size()<2){DateT=Ztring(__T("0"))+DateT;}
- Date+=DateT;
- Date+=__T(":");
- DateT.From_Number(MM); if (DateT.size()<2){DateT=Ztring(__T("0"))+DateT;}
- Date+=DateT;
- Date+=__T(":");
- DateT.From_Number(Stream); if (DateT.size()<2){DateT=Ztring(__T("0"))+DateT;}
- Date+=DateT;
- Date+=__T(".");
- DateT.From_Number(MS); if (DateT.size()<2){DateT=Ztring(__T("00"))+DateT;} else if (DateT.size()<3){DateT=Ztring(__T("0"))+DateT;}
- Date+=DateT;
- assign (Date.c_str());
- return *this;
-}
-
-Ztring& Ztring::Date_From_Milliseconds_1601 (const int64u Value)
-{
- if (Value>=11644473600000LL) //Values <1970 are not supported
- {
- Date_From_Seconds_1970((int32u)((Value-11644473600000LL)/1000));
- append(__T("."));
- Ztring Milliseconds; Milliseconds.From_Number(Value%1000);
- while (Milliseconds.size()<3)
- Milliseconds+=__T('0');
- append(Milliseconds);
- }
- else
- clear(); //Not supported
-
- return *this;
-}
-
-Ztring& Ztring::Date_From_Seconds_1601 (const int64u Value)
-{
- return Date_From_Seconds_1970(((int64s)Value)-11644473600LL);
-}
-
-Ztring& Ztring::Date_From_Seconds_1900 (const int32u Value)
-{
- if (Value>2208988800)
- return Date_From_Seconds_1970(((int64s)Value)-2208988800);
- else
- return Date_From_Seconds_1970(((int64s)Value)+0x100000000LL-2208988800); //Value is considering to loop e.g. NTP value
-}
-
-Ztring& Ztring::Date_From_Seconds_1900 (const int64s Value)
-{
- return Date_From_Seconds_1970(Value-2208988800);
-}
-
-Ztring& Ztring::Date_From_Seconds_1904 (const int32u Value)
-{
- return Date_From_Seconds_1970(((int64s)Value)-2082844800);
-}
-
-Ztring& Ztring::Date_From_Seconds_1904 (const int64u Value)
-{
- return Date_From_Seconds_1970(((int64s)Value)-2082844800);
-}
-
-Ztring& Ztring::Date_From_Seconds_1904 (const int64s Value)
-{
- return Date_From_Seconds_1970(Value-2082844800);
-}
-
-Ztring& Ztring::Date_From_Seconds_1970 (const int32u Value)
-{
- return Date_From_Seconds_1970((int64s)Value);
-}
-
-Ztring& Ztring::Date_From_Seconds_1970 (const int32s Value)
-{
- return Date_From_Seconds_1970((int64s)Value);
-}
-
-Ztring& Ztring::Date_From_Seconds_1970 (const int64s Value)
-{
- time_t Time=(time_t)Value;
- struct tm *Gmt=gmtime(&Time);
- if (!Gmt)
- {
- clear();
- return *this;
- }
- Ztring DateT;
- Ztring Date=__T("UTC ");
- Date+=Ztring::ToZtring((Gmt->tm_year+1900));
- Date+=__T("-");
- DateT.From_Number(Gmt->tm_mon+1); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_mon+1);}
- Date+=DateT;
- Date+=__T("-");
- DateT.From_Number(Gmt->tm_mday); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_mday);}
- Date+=DateT;
- Date+=__T(" ");
- DateT.From_Number(Gmt->tm_hour); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_hour);}
- Date+=DateT;
- Date+=__T(":");
- DateT=Ztring::ToZtring(Gmt->tm_min); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_min);}
- Date+=DateT;
- Date+=__T(":");
- DateT.From_Number(Gmt->tm_sec); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_sec);}
- Date+=DateT;
- assign (Date.c_str());
- return *this;
-}
-
-Ztring& Ztring::Date_From_Seconds_1970_Local (const int32u Value)
-{
- time_t Time=(time_t)Value;
- struct tm *Gmt=localtime(&Time);
- Ztring DateT;
- Ztring Date;
- Date+=Ztring::ToZtring((Gmt->tm_year+1900));
- Date+=__T("-");
- DateT.From_Number(Gmt->tm_mon+1); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_mon+1);}
- Date+=DateT;
- Date+=__T("-");
- DateT.From_Number(Gmt->tm_mday); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_mday);}
- Date+=DateT;
- Date+=__T(" ");
- DateT.From_Number(Gmt->tm_hour); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_hour);}
- Date+=DateT;
- Date+=__T(":");
- DateT=Ztring::ToZtring(Gmt->tm_min); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_min);}
- Date+=DateT;
- Date+=__T(":");
- DateT.From_Number(Gmt->tm_sec); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Gmt->tm_sec);}
- Date+=DateT;
- assign (Date.c_str());
- return *this;
-}
-
-Ztring& Ztring::Date_From_String (const char* Value, size_t Value_Size)
-{
- //Only the year
- if (Value_Size<10)
- {
- From_Local(Value, 0, Value_Size);
- return *this;
- }
-
- #ifdef ZENLIB_USEWX
- Ztring ToReturn=__T("UTC ");
- wxDateTime Date;
- Ztring DateS;
- DateS.From_Local(Value, Value_Size).c_str();
- if (!DateS.empty() && DateS[DateS.size()-1]==__T('\n'))
- DateS.resize(DateS.size()-1);
-
- //Some strange formating : exactly 24 bytes (or 25 with 0x0A at the end) and Year is at the end
- if (DateS.size()==24 && DateS[23]>=__T('0') && DateS[23]<=__T('9') && DateS[21]>=__T('0') && DateS[21]<=__T('9') && DateS[19]==__T(' '))
- Date.ParseFormat(DateS.c_str(), __T("%a %b %d %H:%M:%S %Y"));
- //ISO date
- else if (DateS.size()==10 && (DateS[4]<__T('0') || DateS[4]>__T('9')) && (DateS[7]<__T('0') || DateS[7]>__T('9')))
- {
- DateS[4]=__T('-');
- DateS[7]=__T('-');
- ToReturn+=DateS;
- }
- //Default
- else
- Date.ParseDateTime(DateS.c_str());
-
- if (ToReturn.size()<5)
- {
- ToReturn+=Date.FormatISODate();
- ToReturn+=__T(" ");
- ToReturn+=Date.FormatISOTime();
- }
- else
- ToReturn+=DateS;
-
- assign (ToReturn.c_str());
- #else //ZENLIB_USEWX
- Ztring DateS; DateS.From_Local(Value, 0, Value_Size);
- //Unix style formating : exactly 24 bytes (or 25 with 0x0A at the end) and Year is at the end
- if ((DateS.size()==24 || (DateS.size()==25 && DateS[24]==__T('\n'))) && DateS[23]>=__T('0') && DateS[23]<=__T('9') && DateS[21]>=__T('0') && DateS[21]<=__T('9') && DateS[19]==__T(' '))
- {
- clear();
- append(1, DateS[20]);
- append(1, DateS[21]);
- append(1, DateS[22]);
- append(1, DateS[23]);
- append(1, __T('-'));
- if (DateS[4]==__T('J') && DateS[5]==__T('a') && DateS[6]==__T('n') && DateS[7]==__T(' '))
- {
- append(1, __T('0'));
- append(1, __T('1'));
- }
- else if (DateS[4]==__T('F') && DateS[5]==__T('e') && DateS[6]==__T('b') && DateS[7]==__T(' '))
- {
- append(1, __T('0'));
- append(1, __T('2'));
- }
- else if (DateS[4]==__T('M') && DateS[5]==__T('a') && DateS[6]==__T('r') && DateS[7]==__T(' '))
- {
- append(1, __T('0'));
- append(1, __T('3'));
- }
- else if (DateS[4]==__T('A') && DateS[5]==__T('p') && DateS[6]==__T('r') && DateS[7]==__T(' '))
- {
- append(1, __T('0'));
- append(1, __T('4'));
- }
- else if (DateS[4]==__T('M') && DateS[5]==__T('a') && DateS[6]==__T('y') && DateS[7]==__T(' '))
- {
- append(1, __T('0'));
- append(1, __T('5'));
- }
- else if (DateS[4]==__T('J') && DateS[5]==__T('u') && DateS[6]==__T('n') && DateS[7]==__T(' '))
- {
- append(1, __T('0'));
- append(1, __T('6'));
- }
- else if (DateS[4]==__T('J') && DateS[5]==__T('u') && DateS[6]==__T('l') && DateS[7]==__T(' '))
- {
- append(1, __T('0'));
- append(1, __T('7'));
- }
- else if (DateS[4]==__T('A') && DateS[5]==__T('u') && DateS[6]==__T('g') && DateS[7]==__T(' '))
- {
- append(1, __T('0'));
- append(1, __T('8'));
- }
- else if (DateS[4]==__T('S') && DateS[5]==__T('e') && DateS[6]==__T('p') && DateS[7]==__T(' '))
- {
- append(1, __T('0'));
- append(1, __T('9'));
- }
- else if (DateS[4]==__T('O') && DateS[5]==__T('c') && DateS[6]==__T('t') && DateS[7]==__T(' '))
- {
- append(1, __T('1'));
- append(1, __T('0'));
- }
- else if (DateS[4]==__T('N') && DateS[5]==__T('o') && DateS[6]==__T('v') && DateS[7]==__T(' '))
- {
- append(1, __T('1'));
- append(1, __T('1'));
- }
- else if (DateS[4]==__T('D') && DateS[5]==__T('e') && DateS[6]==__T('c') && DateS[7]==__T(' '))
- {
- append(1, __T('1'));
- append(1, __T('2'));
- }
- else
- {
- assign(DateS);
- return *this;
- }
- append(1, __T('-'));
- append(1, DateS[8]);
- append(1, DateS[9]);
- append(1, __T(' '));
- append(1, DateS[11]);
- append(1, DateS[12]);
- append(1, __T(':'));
- append(1, DateS[14]);
- append(1, DateS[15]);
- append(1, __T(':'));
- append(1, DateS[17]);
- append(1, DateS[18]);
- }
- else if (DateS.size()==20 && DateS[4]==__T('-') && DateS[7]==__T('-') && DateS[10]==__T('T') && DateS[13]==__T(':') && DateS[16]==__T(':') && DateS[19]==__T('Z'))
- {
- DateS.resize(19);
- DateS[10]=__T(' ');
- assign(__T("UTC "));
- append(DateS);
- }
- else if (DateS.size()==23 && DateS[4]==__T('-') && DateS[7]==__T('-') && DateS[10]==__T(' ') && DateS[14]==__T(' ') && DateS[17]==__T(':') && DateS[20]==__T(':'))
- {
- DateS.erase(10, 4);
- //assign(__T("UTC ")); //Is not UTC
- append(DateS);
- }
- else
- From_Local(Value, 0, Value_Size); //Not implemented
- #endif //ZENLIB_USEWX
- return *this;
-}
-
-Ztring& Ztring::Date_From_Numbers (const int8u Year, const int8u Month, const int8u Day, const int8u Hour, const int8u Minute, const int8u Second)
-{
- Ztring DateT;
- Ztring Date=__T("UTC ");
- DateT.From_Number(Year); if (DateT.size()<2){DateT=Ztring(__T("200"))+Ztring::ToZtring(Year);}; if (DateT.size()<3){DateT=Ztring(__T("20"))+Ztring::ToZtring(Year);}
- Date+=DateT;
- Date+=__T("-");
- DateT.From_Number(Month); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Month);}
- Date+=DateT;
- Date+=__T("-");
- DateT.From_Number(Day); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Day);}
- Date+=DateT;
- Date+=__T(" ");
- DateT.From_Number(Hour); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Hour);}
- Date+=DateT;
- Date+=__T(":");
- DateT=Ztring::ToZtring(Minute); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Minute);}
- Date+=DateT;
- Date+=__T(":");
- DateT.From_Number(Second); if (DateT.size()<2){DateT=Ztring(__T("0"))+Ztring::ToZtring(Second);}
- Date+=DateT;
- assign (Date.c_str());
- return *this;
-}
-
-#ifndef WSTRING_MISSING
-//---------------------------------------------------------------------------
-std::wstring Ztring::To_Unicode () const
-{
- #ifdef _UNICODE
- return c_str();
- #else //_UNICODE
- #ifdef ZENLIB_USEWX
- return wxConvCurrent->cMB2WC(c_str()).data();
- #else //ZENLIB_USEWX
- return std::wstring(); //Not implemented
- #endif //ZENLIB_USEWX
- #endif //_UNICODE
-}
-#endif //WSTRING_MISSING
-
-std::string Ztring::To_UTF8 () const
-{
- #ifdef _UNICODE
- //Correction thanks to Andrew Jang
- // Don't use WideCharToMultiByte(), some characters are not well converted
- std::string ToReturn;
- ToReturn.reserve(size()); // more efficient
-
- const wchar_t* Z=c_str();
-
- while (*Z)
- {
- int32u wc; // must be unsigned.
-
- #if defined(_MSC_VER)
- #pragma warning(push)
- #pragma warning(disable:4127)
- #endif //defined(_MSC_VER)
- if (sizeof(wchar_t) == 2)
- #if defined(_MSC_VER)
- #pragma warning(pop)
- #endif //defined(_MSC_VER)
- wc = (int16u) *Z; // avoid a cast problem if wchar_t is signed.
- else
- wc = *Z;
-
- int count;
-
- // refer to http://en.wikipedia.org/wiki/UTF-8#Description
-
- if (wc < 0x80)
- count = 1;
- else if (wc < 0x800)
- count = 2;
- else if (wc < 0x10000)
- count = 3;
- else if (wc < 0x200000)
- count = 4;
- else if (wc < 0x4000000)
- count = 5;
- else if (wc <= 0x7fffffff)
- count = 6;
- else
- break; // bad character
-
- int64u utfbuf = 0; // 8 bytes
- char* utf8chars = (char*) &utfbuf;
-
- switch (count)
- {
- case 6:
- utf8chars[5] = 0x80 | (wc & 0x3f);
- wc = (wc >> 6) | 0x4000000;
- case 5:
- utf8chars[4] = 0x80 | (wc & 0x3f);
- wc = (wc >> 6) | 0x200000;
- case 4:
- utf8chars[3] = 0x80 | (wc & 0x3f);
- wc = (wc >> 6) | 0x10000;
- case 3:
- utf8chars[2] = 0x80 | (wc & 0x3f);
- wc = (wc >> 6) | 0x800;
- case 2:
- utf8chars[1] = 0x80 | (wc & 0x3f);
- wc = (wc >> 6) | 0xc0;
- case 1:
- utf8chars[0] = (char) wc;
- }
-
- ToReturn += utf8chars;
-
- ++Z;
- }
-
- return ToReturn;
- #else
- #ifdef ZENLIB_USEWX
- return wxConvUTF8.cWC2MB(wxConvCurrent->cMB2WC(c_str())).data();
- #else //ZENLIB_USEWX
- return c_str(); //Not implemented
- #endif //ZENLIB_USEWX
- #endif
-}
-
-std::string Ztring::To_Local () const
-{
- #ifdef _UNICODE
- #ifdef ZENLIB_USEWX
- wxCharBuffer C=wxConvCurrent->cWC2MB(c_str());
- if (C.data())
- return C.data();
- else
- return std::string();
- #else //ZENLIB_USEWX
- #ifdef WINDOWS
- int Size=WideCharToMultiByte(CP_ACP, 0, c_str(), -1, NULL, 0, NULL, NULL);
- if (Size!=0)
- {
- char* AnsiString=new char[Size+1];
- WideCharToMultiByte(CP_ACP, 0, c_str(), -1, AnsiString, Size, NULL, NULL);
- AnsiString[Size]='\0';
- std::string ToReturn(AnsiString);
- delete[] AnsiString; //AnsiString=NULL;
- return ToReturn;
- }
- else
- return std::string();
- #else //WINDOWS
- if (empty())
- return std::string();
-
- size_t Size=wcstombs(NULL, c_str(), 0);
- if (Size!=0 && Size!=(size_t)-1)
- {
- char* AnsiString=new char[Size+1];
- Size=wcstombs(AnsiString, c_str(), Size);
- if (Size!=0 && Size!=(size_t)-1)
- {
- AnsiString[Size]='\0';
- std::string ToReturn(AnsiString);
- delete[] AnsiString; //AnsiString=NULL;
- return ToReturn;
- }
-
- //Failed
- delete[] AnsiString; //AnsiString=NULL;
- }
-
- //Trying with bad chars
- char* Result=new char[MB_CUR_MAX];
- std::string AnsiString;
- for (size_t Pos=0; Pos<size(); Pos++)
- {
- int Result_Size=wctomb(Result, operator[](Pos));
- if (Result_Size>=0)
- AnsiString.append(Result, Result_Size);
- else
- AnsiString+='?';
- }
- delete[] Result; //Result=NULL;
- return AnsiString;
- #endif
- #endif //ZENLIB_USEWX
- #else
- return c_str();
- #endif
-}
-
-//---------------------------------------------------------------------------
-int128u Ztring::To_UUID () const
-{
- if (size()!=36)
- return 0;
-
- Ztring Temp=*this;
-
- for (size_t Pos=0; Pos<36; Pos++)
- {
- if ((Temp[Pos]< __T('0') || Temp[Pos]> __T('9'))
- && (Temp[Pos]< __T('A') || Temp[Pos]> __T('F'))
- && (Temp[Pos]< __T('a') || Temp[Pos]> __T('f')))
- return 0;
- if (Temp[Pos]>=__T('A') && Temp[Pos]<=__T('F'))
- {
- Temp[Pos]-=__T('A');
- Temp[Pos]+=__T('9')+1;
- }
- if (Temp[Pos]>=__T('a') && Temp[Pos]<=__T('f'))
- {
- Temp[Pos]-=__T('a');
- Temp[Pos]+=__T('9')+1;
- }
-
- switch(Pos)
- {
- case 7 :
- case 12 :
- case 17 :
- case 22 :
- if (at(Pos+1)!=__T('-'))
- return 0;
- Pos++; //Skipping dash in the test
- }
- }
-
- int128u I;
- I.hi=((int64u)((int8u)(Temp[ 0]-'0'))<<60)
- | ((int64u)((int8u)(Temp[ 1]-'0'))<<56)
- | ((int64u)((int8u)(Temp[ 2]-'0'))<<52)
- | ((int64u)((int8u)(Temp[ 3]-'0'))<<48)
- | ((int64u)((int8u)(Temp[ 4]-'0'))<<44)
- | ((int64u)((int8u)(Temp[ 5]-'0'))<<40)
- | ((int64u)((int8u)(Temp[ 6]-'0'))<<36)
- | ((int64u)((int8u)(Temp[ 7]-'0'))<<32)
- | ((int64u)((int8u)(Temp[ 9]-'0'))<<28)
- | ((int64u)((int8u)(Temp[10]-'0'))<<24)
- | ((int64u)((int8u)(Temp[11]-'0'))<<20)
- | ((int64u)((int8u)(Temp[12]-'0'))<<16)
- | ((int64u)((int8u)(Temp[14]-'0'))<<12)
- | ((int64u)((int8u)(Temp[15]-'0'))<< 8)
- | ((int64u)((int8u)(Temp[16]-'0'))<< 4)
- | ((int64u)((int8u)(Temp[17]-'0')) );
- I.lo=((int64u)((int8u)(Temp[19]-'0'))<<60)
- | ((int64u)((int8u)(Temp[20]-'0'))<<56)
- | ((int64u)((int8u)(Temp[21]-'0'))<<52)
- | ((int64u)((int8u)(Temp[22]-'0'))<<48)
- | ((int64u)((int8u)(Temp[24]-'0'))<<44)
- | ((int64u)((int8u)(Temp[25]-'0'))<<40)
- | ((int64u)((int8u)(Temp[26]-'0'))<<36)
- | ((int64u)((int8u)(Temp[27]-'0'))<<32)
- | ((int64u)((int8u)(Temp[28]-'0'))<<28)
- | ((int64u)((int8u)(Temp[29]-'0'))<<24)
- | ((int64u)((int8u)(Temp[30]-'0'))<<20)
- | ((int64u)((int8u)(Temp[31]-'0'))<<16)
- | ((int64u)((int8u)(Temp[32]-'0'))<<12)
- | ((int64u)((int8u)(Temp[33]-'0'))<< 8)
- | ((int64u)((int8u)(Temp[34]-'0'))<< 4)
- | ((int64u)((int8u)(Temp[35]-'0')) );
-
- return I;
-}
-
-//---------------------------------------------------------------------------
-int32u Ztring::To_CC4 () const
-{
- int32u I;
- I =((int32u)((int8u)at(0))<<24)
- | ((int32u)((int8u)at(1))<<16)
- | ((int32u)((int8u)at(2))<< 8)
- | ((int32u)((int8u)at(3)) );
-
- return I;
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToInt
-int8s Ztring::To_int8s (int8u Radix, ztring_t Options) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- int I;
- #if defined(STREAM_MISSING)
- #ifdef __MINGW32__
- I=_ttoi(c_str());
- #elif defined(UNICODE)
- std::string S=To_UTF8();
- I=atoi(S.c_str());
- #else //UNICODE
- I=atoi(c_str());
- #endif //UNICODE
- #else
- tStringStream Stream(*this);
- Stream >> setbase(Radix) >> I;
- if (Stream.fail())
- return 0;
- #endif
-
- //Rounded
- if (Options==Ztring_Rounded && find(__T("."))!=Error)
- {
- float80 F=To_float80();
- F-=I;
- if (F>=0.5)
- return (int8s)I+1;
- }
-
- return (int8s)I;
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToInt
-int8u Ztring::To_int8u (int8u Radix, ztring_t Options) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- unsigned int I;
- #if defined(STREAM_MISSING)
- #ifdef __MINGW32__
- I=_ttoi64(c_str()); //TODO : I>0x7FFFFFFF - Replaced by i64 version to support, but not good
- #elif defined(UNICODE)
- std::string S=To_UTF8();
- I=atoi(S.c_str());
- #else //defined(UNICODE)
- I=atoi(c_str());
- #endif //defined(UNICODE)
- #else
- tStringStream Stream(*this);
- Stream >> setbase(Radix) >> I;
- if (Stream.fail())
- return 0;
- #endif
-
- //Rounded
- if (Options==Ztring_Rounded && find(__T("."))!=std::string::npos)
- {
- float32 F=To_float32();
- F-=I;
- if (F>=0.5)
- return (int8u)I+1;
- }
-
- return (int8u)I;
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToInt
-int16s Ztring::To_int16s (int8u Radix, ztring_t Options) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- int I;
- #if defined(STREAM_MISSING)
- #ifdef __MINGW32__
- I=_ttoi(c_str());
- #elif defined(UNICODE)
- std::string S=To_UTF8();
- I=atoi(S.c_str());
- #else //defined(UNICODE)
- I=atoi(c_str());
- #endif //defined(UNICODE)
- #else
- tStringStream Stream(*this);
- Stream >> setbase(Radix) >> I;
- if (Stream.fail())
- return 0;
- #endif
-
- //Rounded
- if (Options==Ztring_Rounded && find(__T("."))!=Error)
- {
- float80 F=To_float80();
- F-=I;
- if (F>=0.5)
- return (int16s)I+1;
- }
-
- return (int16s)I;
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToInt
-int16u Ztring::To_int16u (int8u Radix, ztring_t Options) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- unsigned int I;
- #if defined(STREAM_MISSING)
- #ifdef __MINGW32__
- I=_ttoi64(c_str()); //TODO : I>0x7FFFFFFF - Replaced by i64 version to support, but not good
- #elif defined(UNICODE)
- std::string S=To_UTF8();
- I=atoi(S.c_str());
- #else //defined(UNICODE)
- I=atoi(c_str());
- #endif //defined(UNICODE)
- #else
- tStringStream Stream(*this);
- Stream >> setbase(Radix) >> I;
- if (Stream.fail())
- return 0;
- #endif
-
- //Rounded
- if (Options==Ztring_Rounded && find(__T("."))!=std::string::npos)
- {
- float32 F=To_float32();
- F-=I;
- if (F>=0.5)
- return (int16u)I+1;
- }
-
- return (int16u)I;
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToInt
-int32s Ztring::To_int32s (int8u Radix, ztring_t Options) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- int32s I;
- #if defined(STREAM_MISSING)
- #ifdef __MINGW32__
- I=_ttoi(c_str());
- #elif defined(UNICODE)
- std::string S=To_UTF8();
- I=atol(S.c_str());
- #else //defined(UNICODE)
- I=atol(c_str());
- #endif //defined(UNICODE)
- #else
- tStringStream Stream(*this);
- Stream >> setbase(Radix) >> I;
- if (Stream.fail())
- return 0;
- #endif
-
- //Rounded
- if (Options==Ztring_Rounded && find(__T("."))!=Error)
- {
- float80 F=To_float80();
- F-=I;
- if (F>=0.5)
- return I+1;
- }
-
- return I;
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToInt
-int32u Ztring::To_int32u (int8u Radix, ztring_t Options) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- int32u I;
- #if defined(STREAM_MISSING)
- #ifdef __MINGW32__
- I=_ttoi64(c_str()); //TODO : I>0x7FFFFFFF - Replaced by i64 version to support, but not good
- #elif defined(UNICODE)
- std::string S=To_UTF8();
- I=atol(S.c_str());
- #else //defined(UNICODE)
- I=atol(c_str());
- #endif //defined(UNICODE)
- #else
- tStringStream Stream(*this);
- Stream >> setbase(Radix) >> I;
- if (Stream.fail())
- return 0;
- #endif
-
- //Rounded
- if (Options==Ztring_Rounded && find(__T("."))!=std::string::npos)
- {
- float32 F=To_float32();
- F-=I;
- if (F>=0.5)
- return I+1;
- }
-
- return I;
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToInt
-int64s Ztring::To_int64s (int8u Radix, ztring_t Options) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- int64s I;
- #if defined(STREAM_MISSING)
- #ifdef __MINGW32__
- I=_ttoi64(c_str());
- #elif defined(UNICODE)
- std::string S=To_UTF8();
- I=atoll(S.c_str());
- #else //defined(UNICODE)
- I=atoll(c_str());
- #endif //defined(UNICODE)
- #else
- tStringStream Stream(*this);
- Stream >> setbase(Radix) >> I;
- if (Stream.fail())
- return 0;
- #endif
-
- //Rounded
- if (Options==Ztring_Rounded && find(__T("."))!=std::string::npos)
- {
- float32 F=To_float32();
- F-=I;
- if (F>0.5)
- return I+1;
- }
-
- return I;
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToInt
-int64u Ztring::To_int64u (int8u Radix, ztring_t Options) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- int64u I;
- #if defined(STREAM_MISSING)
- #ifdef __MINGW32__
- I=_ttoi64(c_str()); //TODO : I>0x7FFFFFFFFFFFFFFF
- #elif defined(UNICODE)
- std::string S=To_UTF8();
- I=atoll(S.c_str());
- #else //defined(UNICODE)
- I=atoll(c_str());
- #endif //defined(UNICODE)
- #else
- tStringStream Stream(*this);
- Stream >> setbase(Radix) >> I;
- if (Stream.fail())
- return 0;
- #endif
-
- //Rounded
- if (Options==Ztring_Rounded && find(__T("."))!=std::string::npos)
- {
- float32 F=To_float32();
- F-=I;
- if (F>=0.5)
- return I+1;
- }
-
- return I;
-}
-
-//---------------------------------------------------------------------------
-int128u Ztring::To_int128u (int8u, ztring_t) const
-{
- if (size()!=32)
- return 0;
-
- Ztring Temp=*this;
-
- for (size_t Pos=0; Pos<32; Pos++)
- {
- if ((Temp[Pos]< __T('0') || Temp[Pos]> __T('9'))
- && (Temp[Pos]< __T('A') || Temp[Pos]> __T('F'))
- && (Temp[Pos]< __T('a') || Temp[Pos]> __T('f')))
- return 0;
- if (Temp[Pos]>=__T('A') && Temp[Pos]<=__T('F'))
- {
- Temp[Pos]-=__T('A');
- Temp[Pos]+=__T('9')+1;
- }
- if (Temp[Pos]>=__T('a') && Temp[Pos]<=__T('f'))
- {
- Temp[Pos]-=__T('a');
- Temp[Pos]+=__T('9')+1;
- }
- }
-
- int128u I;
- I.hi=((int64u)((int8u)(Temp[ 0]-'0'))<<60)
- | ((int64u)((int8u)(Temp[ 1]-'0'))<<56)
- | ((int64u)((int8u)(Temp[ 2]-'0'))<<52)
- | ((int64u)((int8u)(Temp[ 3]-'0'))<<48)
- | ((int64u)((int8u)(Temp[ 4]-'0'))<<44)
- | ((int64u)((int8u)(Temp[ 5]-'0'))<<40)
- | ((int64u)((int8u)(Temp[ 6]-'0'))<<36)
- | ((int64u)((int8u)(Temp[ 7]-'0'))<<32)
- | ((int64u)((int8u)(Temp[ 8]-'0'))<<28)
- | ((int64u)((int8u)(Temp[ 9]-'0'))<<24)
- | ((int64u)((int8u)(Temp[10]-'0'))<<20)
- | ((int64u)((int8u)(Temp[11]-'0'))<<16)
- | ((int64u)((int8u)(Temp[12]-'0'))<<12)
- | ((int64u)((int8u)(Temp[13]-'0'))<< 8)
- | ((int64u)((int8u)(Temp[14]-'0'))<< 4)
- | ((int64u)((int8u)(Temp[15]-'0')) );
- I.lo=((int64u)((int8u)(Temp[16]-'0'))<<60)
- | ((int64u)((int8u)(Temp[17]-'0'))<<56)
- | ((int64u)((int8u)(Temp[18]-'0'))<<52)
- | ((int64u)((int8u)(Temp[19]-'0'))<<48)
- | ((int64u)((int8u)(Temp[20]-'0'))<<44)
- | ((int64u)((int8u)(Temp[21]-'0'))<<40)
- | ((int64u)((int8u)(Temp[22]-'0'))<<36)
- | ((int64u)((int8u)(Temp[23]-'0'))<<32)
- | ((int64u)((int8u)(Temp[24]-'0'))<<28)
- | ((int64u)((int8u)(Temp[25]-'0'))<<24)
- | ((int64u)((int8u)(Temp[26]-'0'))<<20)
- | ((int64u)((int8u)(Temp[27]-'0'))<<16)
- | ((int64u)((int8u)(Temp[28]-'0'))<<12)
- | ((int64u)((int8u)(Temp[29]-'0'))<< 8)
- | ((int64u)((int8u)(Temp[30]-'0'))<< 4)
- | ((int64u)((int8u)(Temp[31]-'0')) );
-
- return I;
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToFloat
-float32 Ztring::To_float32(ztring_t) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- #if defined(STREAM_MISSING)
- #ifdef UNICODE
- return (wcstod(c_str(),NULL));
- #else
- return (strtod(c_str(),NULL));
- #endif
- #else
- float32 F;
- tStringStream Stream(*this);
- Stream >> F;
- if (Stream.fail())
- return 0;
-
- return F;
- #endif
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToFloat
-float64 Ztring::To_float64(ztring_t) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- #if defined(STREAM_MISSING)
- #ifdef UNICODE
- return (wcstod(c_str(),NULL)); //TODO verify no wcstold
- #else
- return (strtod(c_str(),NULL)); //TODO verify no strtold
- #endif
- #else
- float64 F;
- tStringStream Stream(*this);
- Stream >> F;
- if (Stream.fail())
- return 0;
-
- return F;
- #endif
-}
-
-//---------------------------------------------------------------------------
-//Operateur ToFloat
-float80 Ztring::To_float80(ztring_t) const
-{
- //Integrity
- if (empty())
- return 0;
-
- //Conversion
- #if defined(STREAM_MISSING)
- #ifdef UNICODE
- return (wcstod(c_str(),NULL)); //TODO verify no wcstold
- #else
- return (strtod(c_str(),NULL)); //TODO verify no strtold
- #endif
- #else
- float80 F;
- tStringStream Stream(*this);
- Stream >> F;
- if (Stream.fail())
- return 0;
-
- return F;
- #endif
-}
-
-//***************************************************************************
-// Edition
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Retourne une partie de la chaine
-Ztring Ztring::SubString (const tstring &Begin, const tstring &End, size_type Pos, ztring_t Options) const
-{
- //Recherche Debut
- size_type I_Debut=find(Begin, Pos);
- if (I_Debut==Error)
- return Ztring();
- I_Debut+=Begin.size();
-
- //gestion fin NULL
- if (End.empty())
- return substr(I_Debut);
-
- //Recherche Fin
- size_type I_Fin=find(End, I_Debut);
- if (I_Fin==Error)
- {
- if (Options & Ztring_AddLastItem)
- return substr(I_Debut);
- else
- return Ztring();
- }
-
- return substr(I_Debut, I_Fin-I_Debut);
-}
-
-//---------------------------------------------------------------------------
-//FindAndReplace
-Ztring::size_type Ztring::FindAndReplace (const ZenLib::tstring &ToFind, const ZenLib::tstring &ReplaceBy, size_type Pos, ZenLib::ztring_t Options)
-{
- if (ToFind.empty())
- return 0;
-
- size_type Count=0;
- size_type Middle=Pos;
- while (!(Count==1 && !(Options&Ztring_Recursive)) && (Middle=find(ToFind, Middle))!=npos)
- {
- replace(Middle, ToFind.length(), ReplaceBy);
- Middle += ReplaceBy.length();
- Count++;
- }
-
- return Count;
-}
-
-//---------------------------------------------------------------------------
-//test if it is a number
-bool Ztring::IsNumber() const
-{
- if (empty())
- return false;
-
- bool OK=true;
- size_t Size=size();
- for (size_t Pos=0; Pos<Size; Pos++)
- if (operator[](Pos)<__T('0') || operator[](Pos)>__T('9'))
- {
- OK=false;
- break;
- }
- return OK;
-}
-
-//---------------------------------------------------------------------------
-//Mise en minuscules
-Ztring &Ztring::MakeLowerCase()
-{
- transform(begin(), end(), begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix
- return *this;
-}
-
-//---------------------------------------------------------------------------
-// Mise en majuscules
-Ztring &Ztring::MakeUpperCase()
-{
- transform(begin(), end(), begin(), (int(*)(int))toupper); //(int(*)(int)) is a patch for unix
- return *this;
-}
-
-//---------------------------------------------------------------------------
-// Remove leading whitespaces from a string
-Ztring &Ztring::TrimLeft(Char ToTrim)
-{
- size_type First=0;
- while (First<size() && operator[](First)==ToTrim)
- First++;
- assign (c_str()+First);
- return *this;
-}
-
-//---------------------------------------------------------------------------
-// Remove trailing whitespaces from a string
-Ztring &Ztring::TrimRight(Char ToTrim)
-{
- if (size()==0)
- return *this;
-
- size_type Last=size()-1;
- while (Last!=(size_type)-1 && operator[](Last)==ToTrim)
- Last--;
- assign (c_str(), Last+1);
- return *this;
-}
-
-//---------------------------------------------------------------------------
-// Remove leading and trailing whitespaces from a string
-Ztring &Ztring::Trim(Char ToTrim)
-{
- TrimLeft(ToTrim);
- TrimRight(ToTrim);
- return *this;
-}
-
-//---------------------------------------------------------------------------
-// Quotes a string
-Ztring &Ztring::Quote(Char ToTrim)
-{
- assign(tstring(1, ToTrim)+c_str()+ToTrim);
- return *this;
-}
-
-//***************************************************************************
-// Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Count
-Ztring::size_type Ztring::Count (const Ztring &ToCount, ztring_t) const
-{
- size_type Count=0;
- for (size_type Pos=0; Pos<=size(); Pos++)
- if (find(ToCount, Pos)!=npos)
- {
- Count++;
- Pos+=ToCount.size()-1; //-1 because the loop will add 1
- }
- return Count;
-}
-
-//---------------------------------------------------------------------------
-//Compare
-bool Ztring::Compare (const Ztring &ToCompare, const Ztring &Comparator, ztring_t Options) const
-{
- //Integers management
- if (IsNumber() && ToCompare.IsNumber())
- {
- int64s Left=To_int64s();
- int64s Right=ToCompare.To_int64s();
- if (Comparator==__T("==")) return (Left==Right);
- if (Comparator==__T("<")) return (Left< Right);
- if (Comparator==__T("<=")) return (Left<=Right);
- if (Comparator==__T(">=")) return (Left>=Right);
- if (Comparator==__T(">")) return (Left> Right);
- if (Comparator==__T("!=")) return (Left!=Right);
- if (Comparator==__T("<>")) return (Left!=Right);
- return false;
- }
-
- //Case sensitive option
- if (!(Options & Ztring_CaseSensitive))
- {
- //Need to copy strings and make it lowercase
- Ztring Left (c_str());
- Ztring Right (ToCompare.c_str());
- Left.MakeLowerCase();
- Right.MakeLowerCase();
-
- //string comparasion
- if (Comparator==__T("==")) return (Left==Right);
- if (Comparator==__T("IN")) {if (Left.find(Right)!=string::npos) return true; else return false;}
- if (Comparator==__T("<")) return (Left< Right);
- if (Comparator==__T("<=")) return (Left<=Right);
- if (Comparator==__T(">=")) return (Left>=Right);
- if (Comparator==__T(">")) return (Left> Right);
- if (Comparator==__T("!=")) return (Left!=Right);
- if (Comparator==__T("<>")) return (Left!=Right);
- return false;
- }
- else
- {
- //string comparasion
- if (Comparator==__T("==")) return (*this==ToCompare);
- if (Comparator==__T("IN")) {if (this->find(ToCompare)!=string::npos) return true; else return false;}
- if (Comparator==__T("<")) return (*this< ToCompare);
- if (Comparator==__T("<=")) return (*this<=ToCompare);
- if (Comparator==__T(">=")) return (*this>=ToCompare);
- if (Comparator==__T(">")) return (*this> ToCompare);
- if (Comparator==__T("!=")) return (*this!=ToCompare);
- if (Comparator==__T("<>")) return (*this!=ToCompare);
- return false;
- }
-}
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/Ztring.h b/src/thirdparty/ZenLib/ZenLib/Ztring.h
deleted file mode 100644
index ea16d9af1..000000000
--- a/src/thirdparty/ZenLib/ZenLib/Ztring.h
+++ /dev/null
@@ -1,369 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// More methods for std::(w)string
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_ZtringH
-#define ZenLib_ZtringH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Utils.h"
-#include <string>
-#include <sstream>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//---------------------------------------------------------------------------
-typedef std::basic_string<Char, std::char_traits<Char>, std::allocator<Char> > tstring;
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-/// @brief Options for Ztring methods
-enum ztring_t
-{
- Ztring_Nothing,
- Ztring_Rounded = 1, ///< if >.5, upper, else lower
- Ztring_CaseSensitive = 2, ///< Case sensitive ("A" and "a" are different)
- Ztring_AddLastItem = 4, ///< if Begin is found and End is not found, return between Begin and end of string
- Ztring_Recursive = 8, ///< Do all strings
- Ztring_NoZero = 16 ///> Doesn't keep Zero in the float number
-};
-
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-/// @brief String manipulation (based on std::(w)string)
-//***************************************************************************
-
-class Ztring : public tstring //for details about undocumented methods see http://www.sgi.com/tech/stl/basic_string.html
-{
-public :
- //Constructor/destructor
- Ztring () : tstring(){};
- Ztring (const tstring& str) : tstring(str){};
- Ztring (const tstring& str, size_type pos, size_type n=npos) : tstring(str, pos, n){};
- Ztring (const Char* s, size_type n) : tstring(s, n){};
- Ztring (const Char* s) : tstring(s){};
- Ztring (size_type n, Char c) : tstring(n, c){};
- #ifdef UNICODE
- Ztring (const char* S) : tstring(){From_UTF8(S);};
- Ztring (const char* S, size_type n) : tstring(){From_UTF8(S, 0, n);};
- #endif //UNICODE
-
- //Operators
- ///Same as [], but resize the string if Pos doesn't exist yet
- Char &operator () (size_type Pos);
-
- //Assign
- bool Assign_FromFile (const Ztring &FileName);
-
- //Conversions - From
- #ifndef WSTRING_MISSING
- /// @brief convert an Unicode encoded string into Ztring
- Ztring& From_Unicode (const std::wstring &S) {return From_Unicode(S.c_str());};
- #endif //WSTRING_MISSING
- /// @brief convert an Unicode encoded wchar_t into Ztring
- Ztring& From_Unicode (const wchar_t S);
- /// @brief convert an Unicode encoded string into Ztring
- Ztring& From_Unicode (const wchar_t *S);
- /// @brief convert an Unicode encoded string into Ztring
- Ztring& From_Unicode (const wchar_t *S, size_type Start, size_type Length);
- /// @brief convert an Unicode encoded string into Ztring
- Ztring& From_Unicode (const wchar_t *S, size_type Length) {return From_Unicode(S, 0, Length);};
- /// @brief convert an UTF-8 encoded string into Ztring
- Ztring& From_UTF8 (const std::string &S) {return From_UTF8(S.c_str());};
- /// @brief convert an UTF-8 encoded string into Ztring
- Ztring& From_UTF8 (const char *S);
- /// @brief convert an UTF-8 encoded string into Ztring
- Ztring& From_UTF8 (const char *S, size_type Start, size_type Length);
- /// @brief convert an UTF-8 encoded string into Ztring
- Ztring& From_UTF8 (const char *S, size_type Length) {return From_UTF8(S, 0, Length);};
- /// @brief convert an UTF-16 encoded string into Ztring
- Ztring& From_UTF16 (const char *S);
- /// @brief convert an UTF-16 encoded string into Ztring
- Ztring& From_UTF16 (const char *S, size_type Start, size_type Length);
- /// @brief convert an UTF-16 encoded string into Ztring
- Ztring& From_UTF16 (const char *S, size_type Length) {return From_UTF16(S, 0, Length);};
- /// @brief convert an UTF-16BE encoded string into Ztring
- Ztring& From_UTF16BE (const char *S);
- /// @brief convert an UTF-16BE encoded string into Ztring
- Ztring& From_UTF16BE (const char *S, size_type Start, size_type Length);
- /// @brief convert an UTF-16BE encoded string into Ztring
- Ztring& From_UTF16BE (const char *S, size_type Length) {return From_UTF16BE(S, 0, Length);};
- /// @brief convert an UTF-16LE encoded string into Ztring
- Ztring& From_UTF16LE (const char *S);
- /// @brief convert an UTF-16LE encoded string into Ztring
- Ztring& From_UTF16LE (const char *S, size_type Start, size_type Length);
- /// @brief convert an UTF-16LE encoded string into Ztring
- Ztring& From_UTF16LE (const char *S, size_type Length) {return From_UTF16LE(S, 0, Length);};
- /// @brief convert an Locael encoded string into Ztring
- Ztring& From_Local (const std::string &S) {return From_Local(S.c_str());};
- /// @brief convert an Local encoded string into Ztring
- Ztring& From_Local (const char *S);
- /// @brief convert an Local encoded string into Ztring
- Ztring& From_Local (const char *S, size_type Start, size_type Length);
- /// @brief convert an Local encoded string into Ztring
- Ztring& From_Local (const char *S, size_type Length) {return From_Local(S, 0, Length);};
-
- /// @brief convert an ISO-8859-1 encoded string into Ztring
- Ztring& From_ISO_8859_1 (const char *S);
- /// @brief convert an ISO-8859-1 encoded string into Ztring
- Ztring& From_ISO_8859_1 (const char *S, size_type Start, size_type Length);
- /// @brief convert an ISO-8859-1 encoded string into Ztring
- Ztring& From_ISO_8859_1 (const char *S, size_type Length) {return From_ISO_8859_1(S, 0, Length);};
-
- /// @brief convert an ISO-8859-2 encoded string into Ztring
- Ztring& From_ISO_8859_2 (const char *S);
- /// @brief convert an ISO-8859-1 encoded string into Ztring
- Ztring& From_ISO_8859_2 (const char *S, size_type Start, size_type Length);
- /// @brief convert an ISO-8859-1 encoded string into Ztring
- Ztring& From_ISO_8859_2 (const char *S, size_type Length) {return From_ISO_8859_2(S, 0, Length);};
-
- /// @brief convert an 16 byte GUID into Ztring
- Ztring& From_GUID (const int128u S);
- /// @brief convert an 16 byte UUID into Ztring
- Ztring& From_UUID (const int128u S);
- /// @brief convert an 4 Character Code into Ztring
- Ztring& From_CC4 (const char *S) {return From_Local(S, 0, 4);};
- /// @brief convert an 4 Character Code into Ztring
- Ztring& From_CC4 (const int8u *S) {return From_Local((const char*)S, 0, 4);};
- /// @brief convert an 4 Character Code into Ztring
- Ztring& From_CC4 (const int32u S);
- /// @brief convert an 2 Character Code into Ztring
- Ztring& From_CC3 (const char *S) {return From_Local(S, 0, 3);};
- /// @brief convert an 4 Character Code into Ztring
- Ztring& From_CC3 (const int8u *S) {return From_Local((const char*)S, 0, 3);};
- /// @brief convert an 4 Character Code into Ztring
- Ztring& From_CC3 (const int32u S);
- /// @brief convert an 2 Character Code into Ztring
- Ztring& From_CC2 (const char *S) {return From_CC2(ZenLib::CC2(S));};
- /// @brief convert an 2 Character Code into Ztring
- Ztring& From_CC2 (const int8u *S) {return From_CC2(ZenLib::CC2(S));};
- /// @brief convert an 2 Character Code into Ztring
- Ztring& From_CC2 (const int16u S);
- /// @brief convert an 1 Character Code into Ztring
- Ztring& From_CC1 (const char *S) {return From_CC1(ZenLib::CC1(S));};
- /// @brief convert an 1 Character Code into Ztring
- Ztring& From_CC1 (const int8u *S) {return From_CC1(ZenLib::CC1(S));};
- /// @brief convert an 1 Character Code into Ztring
- Ztring& From_CC1 (const int8u S);
- /// @brief convert number into Ztring
- Ztring& From_Number (const int8s, int8u Radix=10);
- /// @brief convert number into Ztring
- Ztring& From_Number (const int8u, int8u Radix=10);
- /// @brief convert number into Ztring
- Ztring& From_Number (const int16s, int8u Radix=10);
- /// @brief convert number into Ztring
- Ztring& From_Number (const int16u, int8u Radix=10);
- /// @brief convert number into Ztring
- Ztring& From_Number (const int32s, int8u Radix=10);
- /// @brief convert number into Ztring
- Ztring& From_Number (const int32u, int8u Radix=10);
- /// @brief convert number into Ztring
- Ztring& From_Number (const int64s, int8u Radix=10);
- /// @brief convert number into Ztring
- Ztring& From_Number (const int64u, int8u Radix=10);
- /// @brief convert number into Ztring
- Ztring& From_Number (const int128u, int8u Radix=10);
- /// @brief convert number into Ztring
- Ztring& From_Number (const float32, int8u AfterComma=3, ztring_t Options=Ztring_Nothing);
- /// @brief convert number into Ztring
- Ztring& From_Number (const float64, int8u AfterComma=3, ztring_t Options=Ztring_Nothing);
- /// @brief convert number into Ztring
- Ztring& From_Number (const float80, int8u AfterComma=3, ztring_t Options=Ztring_Nothing);
- #ifdef SIZE_T_IS_LONG
- /// @brief convert number into Ztring
- Ztring& From_Number (const size_t, int8u Radix=10);
- #endif //SIZE_T_IS_LONG
- /// @brief convert number (BCD coded) into Ztring
- Ztring& From_BCD (const int8u);
- /// @brief convert count of milliseconds into a readable and sortable string
- Ztring& Duration_From_Milliseconds (const int64s Milliseconds);
- /// @deprecated replaced by the int64s version
- Ztring& Duration_From_Milliseconds (const int64u Milliseconds);
- /// @brief convert count of seconds since 1601 into a readable and sortable string
- Ztring& Date_From_Milliseconds_1601 (const int64u Milliseconds);
- /// @brief convert count of seconds since 1601 into a readable and sortable string
- Ztring& Date_From_Seconds_1601 (const int64u Seconds);
- /// @brief convert count of seconds since 1900 into a readable and sortable string
- Ztring& Date_From_Seconds_1900 (const int32u Seconds);
- /// @brief convert count of seconds since 1900 into a readable and sortable string
- Ztring& Date_From_Seconds_1900 (const int64s Seconds);
- /// @brief convert count of seconds since 1904 into a readable and sortable string
- Ztring& Date_From_Seconds_1904 (const int32u Seconds);
- /// @brief convert count of seconds since 1904 into a readable and sortable string
- Ztring& Date_From_Seconds_1904 (const int64u Seconds);
- /// @brief convert count of seconds since 1904 into a readable and sortable string
- Ztring& Date_From_Seconds_1904 (const int64s Seconds);
- /// @brief convert count of seconds since 1970 into a readable and sortable string
- Ztring& Date_From_Seconds_1970 (const int32u Seconds);
- /// @brief convert count of seconds since 1970 into a readable and sortable string
- Ztring& Date_From_Seconds_1970 (const int32s Seconds);
- /// @brief convert count of seconds since 1970 into a readable and sortable string
- Ztring& Date_From_Seconds_1970 (const int64s Seconds);
- /// @brief convert count of seconds since 1970 into a readable and sortable string (in local time)
- Ztring& Date_From_Seconds_1970_Local (const int32u Seconds);
- /// @brief convert a free formated string into a readable and sortable string
- Ztring& Date_From_String (const char* Date, size_type Value_Size=Error);
- /// @brief convert numbers into a readable and sortable string
- Ztring& Date_From_Numbers (const int8u Year, const int8u Month, const int8u Day, const int8u Hour, const int8u Minute, const int8u Second);
-
- //Conversions - To
- #ifndef WSTRING_MISSING
- /// @brief Convert into Unicode chars
- /// @return the string corresponding \n
- std::wstring To_Unicode () const;
- #endif //WSTRING_MISSING
- /// @brief Convert into char* (UTF-8 encoded)
- /// @return the string corresponding \n
- std::string To_UTF8 () const;
- /// @brief Convert into char* (Local encoded)
- /// @return the string corresponding \n
- std::string To_Local () const;
- /// @brief Convert into 16 byte UUID number
- /// @return the value corresponding \n
- /// 0 if there is a problem
- int128u To_UUID () const;
- /// @brief Convert into a 4 Character Code
- /// @return the value corresponding \n
- /// 0 if there is a problem
- int32u To_CC4 () const;
- /// @brief Convert into Int (8 bits)
- /// @return the value corresponding \n
- /// 0 if there is a problem
- int8s To_int8s (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
- /// @brief Convert into unsigned Int (8 bits)
- /// @return the value corresponding
- /// 0 if there is a problem
- int8u To_int8u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
- /// @brief Convert into Int (16 bits)
- /// @return the value corresponding \n
- /// 0 if there is a problem
- int16s To_int16s (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
- /// @brief Convert into unsigned Int (16 bits)
- /// @return the value corresponding
- /// 0 if there is a problem
- int16u To_int16u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
- /// @brief Convert into Int (32 bits)
- /// @return the value corresponding \n
- /// 0 if there is a problem
- int32s To_int32s (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
- /// @brief Convert into unsigned Int (32 bits)
- /// @return the value corresponding
- /// 0 if there is a problem
- int32u To_int32u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
- /// @brief Convert into Int (64 bits)
- /// @return the value corresponding \n
- /// 0 if there is a problem
- int64s To_int64s (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
- /// @brief Convert into unsigned Int (64 bits)
- /// @return the value corresponding \n
- /// 0 if there is a problem
- int64u To_int64u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
- /// @brief Convert into unsigned Int (64 bits)
- /// @warning only hexadecimal and no rounding are currenlty supported \n
- /// @return the value corresponding \n
- /// 0 if there is a problem
- int128u To_int128u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
- /// @brief Convert into float
- /// @return the value corresponding \n
- /// 0 if there is a problem
- float32 To_float32 (ztring_t Options=Ztring_Nothing) const;
- float64 To_float64 (ztring_t Options=Ztring_Nothing) const;
- float80 To_float80 (ztring_t Options=Ztring_Nothing) const;
-
- //Static versions
- static Ztring ToZtring_From_Local(const std::string &S) {return Ztring().From_Local(S);};
- static Ztring ToZtring_From_Local(const char *S) {return Ztring().From_Local(S);};
- static Ztring ToZtring_From_Local(const char *S, size_type Start, size_type Length) {return Ztring().From_Local(S, Start, Length);};
- static Ztring ToZtring_From_Local(const char *S, size_type Length) {return Ztring().From_Local(S, Length);};
- static Ztring ToZtring_From_CC4 (const char *S) {return Ztring().From_CC4(S);};
- static Ztring ToZtring_From_CC4 (const int8u *S) {return Ztring().From_CC4(S);};
- static Ztring ToZtring_From_CC4 (const int32u S) {return Ztring().From_CC4(S);};
- static Ztring ToZtring_From_CC3 (const char *S) {return Ztring().From_CC3(S);};
- static Ztring ToZtring_From_CC3 (const int8u *S) {return Ztring().From_CC3(S);};
- static Ztring ToZtring_From_CC3 (const int32u S) {return Ztring().From_CC3(S);};
- static Ztring ToZtring_From_CC2 (const char *S) {return Ztring().From_CC2(S);};
- static Ztring ToZtring_From_CC2 (const int8u *S) {return Ztring().From_CC2(S);};
- static Ztring ToZtring_From_CC2 (const int16u S) {return Ztring().From_CC2(S);};
- static Ztring ToZtring_From_CC1 (const char *S) {return Ztring().From_CC1(S);};
- static Ztring ToZtring_From_CC1 (const int8u *S) {return Ztring().From_CC1(S);};
- static Ztring ToZtring_From_CC1 (const int8u S) {return Ztring().From_CC1(S);};
- static Ztring ToZtring (const int8s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- static Ztring ToZtring (const int8u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- static Ztring ToZtring (const int16s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- static Ztring ToZtring (const int16u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- static Ztring ToZtring (const int32s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- static Ztring ToZtring (const int32u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- static Ztring ToZtring (const int64s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- static Ztring ToZtring (const int64u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- static Ztring ToZtring (const int128u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- static Ztring ToZtring (const float32 F, int8u AfterComma=3) {return Ztring().From_Number(F, AfterComma);};
- static Ztring ToZtring (const float64 F, int8u AfterComma=3) {return Ztring().From_Number(F, AfterComma);};
- static Ztring ToZtring (const float80 F, int8u AfterComma=3) {return Ztring().From_Number(F, AfterComma);};
- #ifdef SIZE_T_IS_LONG
- static Ztring ToZtring (const size_t I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
- #endif //SIZE_T_IS_LONG
-
- //Edition
- /// @brief test if it is a number
- bool IsNumber() const;
- /// @brief convert into lowercase
- Ztring &MakeLowerCase();
- /// @brief convert into uppercase
- Ztring &MakeUpperCase();
- /// @brief Remove leading whitespaces from a string
- Ztring &TrimLeft(Char ToTrim=__T(' '));
- /// @brief Remove trailing whitespaces from a string
- Ztring &TrimRight(Char ToTrim=__T(' '));
- /// @brief Remove leading and trailing whitespaces from a string
- Ztring &Trim(Char ToTrim=__T(' '));
- /// @brief Quotes a string
- Ztring &Quote(Char ToTrim=__T('\"'));
- /// @brief return a string between two strings
- /// @param Begin First string
- /// @param End Second string
- /// @param Pos Position to begin to scan string
- /// @param Options Options for searching \n
- /// Available : Ztring_CaseSensitive
- /// @return The substring \n
- /// "" if not found
- Ztring SubString (const tstring &Begin, const tstring &End, size_type Pos=0, ztring_t Options=Ztring_Nothing) const;
- /// @brief replace a string by another one
- /// @param ToFind string to find
- /// @param ToReplace string wich replace the string found
- /// @param Pos Position to begin to scan string
- /// @param Options Options for searching \n
- /// Available : Ztring_CaseSensitive, Ztring_Recursive
- /// @return The count of replacements
- size_type FindAndReplace (const tstring &ToFind, const tstring &ReplaceBy, size_type Pos=0, ztring_t Options=Ztring_Nothing); //Remplace une chaine par une autre
- /// @brief Count the number of occurencies of a string in the string
- /// @param ToCount string to count
- /// @param Options Options for count \n
- /// Available : Ztring_CaseSensitive
- /// @return the count
-
- //Information
- size_type Count (const Ztring &ToCount, ztring_t Options=Ztring_Nothing) const;
- /// @brief compare with another string
- /// @param ToCompare string to compare with
- /// @param Options Options for comaparing \n
- /// Available : Ztring_CaseSensitive
- /// @return The result of comparasion
- bool Compare (const Ztring &ToCompare, const Ztring &Comparator=__T("=="), ztring_t Options=Ztring_Nothing) const;
-};
-
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/ZtringList.cpp b/src/thirdparty/ZenLib/ZenLib/ZtringList.cpp
deleted file mode 100644
index 841fa8a55..000000000
--- a/src/thirdparty/ZenLib/ZenLib/ZtringList.cpp
+++ /dev/null
@@ -1,357 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <algorithm>
-#include <functional>
-#include "ZenLib/ZtringList.h"
-using namespace std;
-#if defined(_MSC_VER) && _MSC_VER <= 1200
- using std::vector; //Visual C++ 6 patch
-#endif
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//---------------------------------------------------------------------------
-extern Ztring EmptyZtring;
-//---------------------------------------------------------------------------
-
-
-//***************************************************************************
-// Constructors/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Constructors
-ZtringList::ZtringList ()
-: std::vector<ZenLib::Ztring, std::allocator<ZenLib::Ztring> > ()
-{
- Separator[0]=__T(";");
- Quote=__T("\"");
- Max[0]=Error;
-}
-
-ZtringList::ZtringList(const ZtringList &Source)
-: std::vector<ZenLib::Ztring, std::allocator<ZenLib::Ztring> > ()
-{
- Separator[0]=Source.Separator[0];
- Quote=Source.Quote;
-
- reserve(Source.size());
- for (intu Pos=0; Pos<Source.size(); Pos++)
- push_back(Source[Pos]);
-}
-
-ZtringList::ZtringList (const Ztring &Source)
-{
- Separator[0]=__T(";");
- Quote=__T("\"");
- Max[0]=Error;
- Write(Source.c_str());
-}
-
-ZtringList::ZtringList (const Char *Source)
-{
- Separator[0]=__T(";");
- Quote=__T("\"");
- Max[0]=Error;
- Write(Source);
-}
-
-#ifdef _UNICODE
-ZtringList::ZtringList (const char* S)
-{
- Write(Ztring(S));
-}
-#endif
-
-//***************************************************************************
-// Operator
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Operator ==
-bool ZtringList::operator== (const ZtringList &Source) const
-{
- return (Read()==Source.Read());
-}
-
-//---------------------------------------------------------------------------
-// Operator !=
-bool ZtringList::operator!= (const ZtringList &Source) const
-{
- return (!(Read()==Source.Read()));
-}
-
-//---------------------------------------------------------------------------
-// Operator +=
-ZtringList &ZtringList::operator+= (const ZtringList &Source)
-{
- reserve(size()+Source.size());
- for (size_type Pos=0; Pos<Source.size(); Pos++)
- push_back(Source[Pos]);
-
- return *this;
-}
-
-//---------------------------------------------------------------------------
-// Operator =
-ZtringList &ZtringList::operator= (const ZtringList &Source)
-{
- clear();
- Ztring C=Separator[0];
- Ztring Q=Quote;
-
- Separator[0]=Source.Separator[0];
- Quote=Source.Quote;
- reserve(Source.size());
- for (size_type Pos=0; Pos<Source.size(); Pos++)
- push_back(Source[Pos]);
-
- Separator[0]=C;
- Quote=Q;
-
- return *this;
-}
-
-//---------------------------------------------------------------------------
-// Operator ()
-Ztring &ZtringList::operator() (size_type Pos)
-{
- if (Pos>=size())
- Write(Ztring(), Pos);
-
- return operator[](Pos);
-}
-
-//***************************************************************************
-// In/Out
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Read
-Ztring ZtringList::Read () const
-{
- //Integrity
- if (size()==0)
- return Ztring();
-
- Ztring Retour;
- Ztring ToFind=Separator[0]+Quote[0]+__T("\r\n");
- for (size_type Pos=0; Pos<size(); Pos++)
- {
- if (operator[](Pos).find_first_of(ToFind)==std::string::npos)
- Retour+=operator[](Pos)+Separator[0];
- else if (operator[](Pos).find(Separator[0])==std::string::npos
- && operator[](Pos).find(Quote)==std::string::npos
- && operator[](Pos).find('\r')==std::string::npos
- && operator[](Pos).find('\n')==std::string::npos)
- Retour+=operator[](Pos)+Separator[0];
- else
- {
- if (operator[](Pos).find(Quote)==std::string::npos)
- Retour+=Quote+operator[](Pos)+Quote+Separator[0];
- else
- {
- Ztring Value=operator[](Pos);
- Value.FindAndReplace(Quote, Quote+Quote, 0, Ztring_Recursive);
- Retour+=Quote+Value+Quote+Separator[0];
- }
- }
- }
-
- //delete all useless separators at the end
- //while (Retour.find(Separator[0].c_str(), Retour.size()-Separator[0].size())!=std::string::npos)
- if (Retour.find(Separator[0].c_str(), Retour.size()-Separator[0].size())!=std::string::npos)
- Retour.resize(Retour.size()-Separator[0].size());
-
- return Retour;
-}
-
-const Ztring &ZtringList::Read (size_type Pos) const
-{
- //Integrity
- if (Pos>=size())
- return EmptyZtring;
-
- return operator[](Pos);
-}
-
-//---------------------------------------------------------------------------
-// Write
-void ZtringList::Write(const Ztring &ToWrite)
-{
- clear();
-
- if (ToWrite.empty())
- return;
-
- size_type PosC=0;
- bool Fini=false;
- Ztring C1;
-
- Ztring DelimiterL;
- Ztring DelimiterR;
- do
- {
- //Searching quotes
- if (ToWrite[PosC]==Quote[0])
- {
- size_t Pos_End=PosC+1;
- while (Pos_End<ToWrite.size())
- {
- if (ToWrite[Pos_End]==Quote[0] && Pos_End+1<ToWrite.size() && ToWrite[Pos_End+1]==Quote[0])
- Pos_End+=2; //Double quote, skipping
- else
- {
- if (ToWrite[Pos_End]==Quote[0])
- break;
- Pos_End++;
- }
- }
- C1=ToWrite.substr(PosC+Quote.size(), Pos_End-PosC);
- PosC+=C1.size()+Quote.size();
- if (C1.size()>0 && C1[C1.size()-1]==Quote[0])
- {
- C1.resize(C1.size()-1);
- PosC+=Quote.size();
- }
- }
- else //Normal
- {
- C1=ToWrite.SubString(tstring(), Separator[0], PosC, Ztring_AddLastItem);
- PosC+=C1.size()+Separator[0].size();
- }
- C1.FindAndReplace(Quote+Quote, Quote, 0, Ztring_Recursive);
- if (size()<Max[0])
- push_back(C1);
- if (PosC>=ToWrite.size())
- Fini=true;
- }
- while (!Fini);
-
- return;
-}
-
-void ZtringList::Write(const Ztring &ToWrite, size_type Pos)
-{
- if (Pos==Error)
- return;
- if (Pos>=size())
- {
- //Resource reservation
- size_t ToReserve=1;
- while (ToReserve<Pos)
- ToReserve*=2;
- reserve(ToReserve);
-
- while (Pos>size())
- push_back(Ztring());
- push_back(ToWrite);
- }
- else
- operator[](Pos)=ToWrite;
-
- return;
-}
-
-//***************************************************************************
-// Edition
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Swap
-void ZtringList::Swap (size_type Pos0_A, size_type Pos0_B)
-{
- //Integrity
- size_type Pos_Max;
- if (Pos0_A<Pos0_B)
- Pos_Max=Pos0_B;
- else
- Pos_Max=Pos0_A;
- if (Pos_Max>=size())
- Write(Ztring(), Pos_Max);
-
- operator [] (Pos0_A).swap(operator [] (Pos0_B));
-}
-
-//---------------------------------------------------------------------------
-// Sort
-void ZtringList::Sort(ztring_t)
-{
- std::stable_sort(begin(), end());
- return;
-}
-
-//***************************************************************************
-// Information
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Find
-Ztring::size_type ZtringList::Find (const Ztring &ToFind, size_type Pos, const Ztring &Comparator, ztring_t Options) const
-{
- while (Pos<size() && !(operator[](Pos).Compare(ToFind, Comparator, Options)))
- Pos++;
- if (Pos>=size())
- return Error;
- return Pos;
-}
-
-//---------------------------------------------------------------------------
-// Return the length of the longest string in the list.
-Ztring::size_type ZtringList::MaxStringLength_Get ()
-{
- size_type Max = 0;
- for (ZtringList::const_iterator it=begin(); it!=end(); ++it)
- if (it->size()>Max)
- Max=it->size();
- return Max;
-}
-
-//***************************************************************************
-// Configuration
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Separator
-void ZtringList::Separator_Set (size_type Level, const Ztring &NewSeparator)
-{
- if (Level>0)
- return;
- Separator[Level]=NewSeparator;
-}
-
-//---------------------------------------------------------------------------
-// Quote
-void ZtringList::Quote_Set (const Ztring &NewQuote)
-{
- Quote=NewQuote;
-}
-
-//---------------------------------------------------------------------------
-// Separator
-void ZtringList::Max_Set (size_type Level, size_type Max_New)
-{
- if (Level>0 || Max_New==0)
- return;
- Max[Level]=Max_New;
-}
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/ZtringList.h b/src/thirdparty/ZenLib/ZenLib/ZtringList.h
deleted file mode 100644
index f57eee429..000000000
--- a/src/thirdparty/ZenLib/ZenLib/ZtringList.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// More methods for std::vector<std::(w)string>
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_ZtringListH
-#define ZenLib_ZtringListH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Ztring.h"
-#include <vector>
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief Vector of strings manipulation (based on std::vector<std::(w)string>)
-//***************************************************************************
-
-class ZtringList : public std::vector<Ztring>
-{
-public :
- //Constructors/destructor
- ZtringList ();
- ZtringList (const ZtringList &Source);
- ZtringList (const Ztring &Source);
- ZtringList (const Char *Source);
- #ifdef _UNICODE
- ZtringList (const char *Source); //convert a UTF-8 string into Unicode
- #endif
-
- //Operators
- bool operator == (const ZtringList &Source) const;
- bool operator != (const ZtringList &Source) const;
- ZtringList &operator += (const ZtringList &Source);
- ZtringList &operator = (const ZtringList &Source);
-
- Ztring &operator () (size_type Pos); ///< Same as [], but write a empty string if Pos doesn't exist yet
-
- //In/out
- Ztring Read () const; /// Read all
- const Ztring &Read (size_type Pos) const; /// Read a string
- void Write (const Ztring &ToWrite); /// Write all
- void Write (const Ztring &ToWrite, size_type Pos); /// Write a string
- /// @brief Insert a string at position Pos0
- void Insert (const Ztring &ToInsert, size_type Pos0) {insert(begin()+Pos0, ToInsert);};
- /// @brief Delete a string at position Pos0
- void Delete (size_type Pos0) {erase(begin()+Pos0);};
-
- //Edition
- /// @brief Swap 2 positions
- void Swap (size_type Pos0_A, size_type Pos0_B);
- /// @brief Sort
- void Sort (ztring_t Options=Ztring_Nothing);
-
- //Information
- /// @brief Find the position of the string in the vector
- size_type Find (const Ztring &ToFind, size_type PosBegin=0, const Ztring &Comparator=__T("=="), ztring_t Options=Ztring_Nothing) const;
- /// @brief Return the length of the longest string in the list.
- size_type MaxStringLength_Get ();
-
- //Configuration
- /// @brief Set the Separator character
- void Separator_Set (size_type Level, const Ztring &NewSeparator);
- /// @brief Set the Quote character
- /// During Read() or Write() method, if Separator is in the sequence, we must quote it
- void Quote_Set (const Ztring &NewQuote);
- /// @brief Set the Maximum number of element to read
- /// During Read() or Write() method, if there is more elements, merge them with the last element
- void Max_Set (size_type Level, size_type Max_New);
-
-protected :
- Ztring Separator[1];
- Ztring Quote;
- size_type Max[1];
-};
-
-} //namespace
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/ZtringListList.cpp b/src/thirdparty/ZenLib/ZenLib/ZtringListList.cpp
deleted file mode 100644
index 49518fa70..000000000
--- a/src/thirdparty/ZenLib/ZenLib/ZtringListList.cpp
+++ /dev/null
@@ -1,582 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include <algorithm>
-#include "ZenLib/ZtringListList.h"
-using namespace std;
-#if defined(_MSC_VER) && _MSC_VER <= 1200
- using std::vector; //Visual C++ 6 patch
-#endif
-//---------------------------------------------------------------------------
-
-
-namespace ZenLib
-{
-
-//---------------------------------------------------------------------------
-extern Ztring EmptyZtring;
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constructors/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Constructors
-ZtringListList::ZtringListList()
-: std::vector<ZenLib::ZtringList, std::allocator<ZenLib::ZtringList> > ()
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Quote=__T("\"");
- Max[0]=Error;
- Max[1]=Error;
-}
-
-ZtringListList::ZtringListList(const ZtringListList &Source)
-: std::vector<ZenLib::ZtringList, std::allocator<ZenLib::ZtringList> > ()
-{
- Separator[0]=Source.Separator[0];
- Separator[1]=Source.Separator[1];
- Quote=Source.Quote;
- Max[0]=Source.Max[0];
- Max[1]=Source.Max[1];
- reserve(Source.size());
- for (intu Pos=0; Pos<Source.size(); Pos++)
- push_back(Source[Pos]);
-}
-
-ZtringListList::ZtringListList(const Ztring &Source)
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Quote=__T("\"");
- Max[0]=Error;
- Max[1]=Error;
- Write(Source.c_str());
-}
-
-ZtringListList::ZtringListList(const Char *Source)
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Quote=__T("\"");
- Max[0]=Error;
- Max[1]=Error;
- Write(Source);
-}
-
-#ifdef _UNICODE
-ZtringListList::ZtringListList (const char* S)
-{
- Separator[0]=EOL;
- Separator[1]=__T(";");
- Quote=__T("\"");
- Max[0]=Error;
- Max[1]=Error;
- Write(Ztring(S));
-}
-#endif
-
-//***************************************************************************
-// Operators
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-//Operator ==
-bool ZtringListList::operator== (const ZtringListList &Source) const
-{
- return (Read()==Source.Read());
-}
-
-//---------------------------------------------------------------------------
-//Operator !=
-bool ZtringListList::operator!= (const ZtringListList &Source) const
-{
- return (!(Read()==Source.Read()));
-}
-
-//---------------------------------------------------------------------------
-// Operator +=
-ZtringListList &ZtringListList::operator+= (const ZtringListList &Source)
-{
- reserve(size()+Source.size());
- for (size_type Pos=0; Pos<Source.size(); Pos++)
- {
- push_back(Source[Pos]);
- operator[](size()-1).Separator_Set(0, Separator[1]);
- operator[](size()-1).Quote_Set(Quote);
- operator[](size()-1).Max_Set(0, Max[1]);
- }
-
- return *this;
-}
-
-//---------------------------------------------------------------------------
-// Operator =
-ZtringListList &ZtringListList::operator= (const ZtringListList &Source)
-{
- clear();
-
- reserve(Source.size());
- for (size_type Pos=0; Pos<Source.size(); Pos++)
- {
- push_back(Source[Pos]);
- operator[](size()-1).Separator_Set(0, Separator[1]);
- operator[](size()-1).Quote_Set(Quote);
- operator[](size()-1).Max_Set(0, Max[1]);
- }
-
- return *this;
-}
-
-//---------------------------------------------------------------------------
-// Operatorr ()
-ZtringList &ZtringListList::operator() (size_type Pos0)
-{
- //Integrity
- if (Pos0>=size())
- Write(Ztring(), Pos0);
-
- return operator[](Pos0);
-}
-
-Ztring &ZtringListList::operator() (size_type Pos0, size_type Pos1)
-{
- //Integrity
- if (Pos0>=size())
- Write(Ztring(), Pos0);
-
- return operator[](Pos0).operator()(Pos1);
-}
-
-Ztring &ZtringListList::operator() (const Ztring &Pos0, size_type Pos0_1, size_type Pos1)
-{
- size_type Pos=0;
- size_t Size=size();
- for (; Pos<Size; Pos++)
- if (operator[](Pos).size()>Pos0_1)
- if (operator[](Pos)[Pos0_1]==Pos0)
- break;
-
- if (Pos>=Size)
- {
- Write(Pos0, Size, Pos0_1);
- Pos=size()-1;
- }
-
- return operator[](Pos).operator()(Pos1);
-}
-
-//***************************************************************************
-// In/Out
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Read
-Ztring ZtringListList::Read () const
-{
- //Integrity
- if (size()==0)
- return Ztring();
-
- Ztring ToReturn;
- size_type Size=size()-1;
- for (size_type Pos0=0; Pos0<Size; Pos0++)
- ToReturn+=Read(Pos0)+Separator[0];
- ToReturn+=Read(Size);
-
- //Delete all useless separators at the end
- //if(ToReturn.size()>0 && Separator[0].size() && ToReturn(ToReturn.size()-1)==Separator[0][Separator[0].size()-1]) //Optimize speed
- // while (ToReturn.find(Separator[0].c_str(), ToReturn.size()-Separator[0].size())!=std::string::npos)
- // ToReturn.resize(ToReturn.size()-Separator[0].size());
-
- return ToReturn;
-}
-
-Ztring ZtringListList::Read (size_type Pos0) const
-{
- //Integrity
- if (Pos0>=size())
- return Ztring();
-
- return operator[](Pos0).Read();
-}
-
-const Ztring &ZtringListList::Read (size_type Pos0, size_type Pos1) const
-{
- //Integrity
- if (Pos0>=size())
- return EmptyZtring;
-
- return operator[](Pos0).Read(Pos1);
-}
-
-const Ztring &ZtringListList::Read (const Ztring &Pos0, size_type Pos1) const
-{
- size_type Pos=Find(Pos0);
- if (Pos==Error)
- return EmptyZtring;
-
- return operator[](Pos).Read(Pos1);
-}
-
-const Ztring &ZtringListList::Read (const Ztring &Pos0, size_type Pos0_1, size_type Pos1) const
-{
- size_type Pos=Find(Pos0, Pos0_1);
- if (Pos==Error)
- return EmptyZtring;
-
- return operator[](Pos).Read(Pos1);
-}
-
-const Ztring &ZtringListList::Read (const Ztring &Pos0, const Ztring &Default, size_type Pos1) const
-{
- size_type Pos=Find(Pos0);
- if (Pos==Error)
- return Default;
-
- return operator[](Pos).Read(Pos1);
-}
-
-const Ztring &ZtringListList::Read (const Ztring &Pos0, const Ztring &Default, size_type Pos0_1, size_type Pos1) const //Lecture d'un champs en position 0 avec une option par defaut
-{
- size_type Pos=Find(Pos0, Pos0_1);
- if (Pos==Error)
- return Default;
-
- return operator[](Pos).Read(Pos1);
-}
-
-Ztring ZtringListList::Read1 (size_type Pos1) const
-{
- Ztring ToReturn;
- size_type Size=size()-1;
- for (size_type Pos=0; Pos<Size; Pos++)
- ToReturn+=operator[](Pos).Read(Pos1)+Separator[0];
- ToReturn+=operator[](Size).Read(Pos1);
-
- //Delete all useless separators at the end
- if(ToReturn(ToReturn.size()-1)==Separator[0][Separator[0].size()-1]) //Optimize speed
- while (ToReturn.find(Separator[0].c_str(), ToReturn.size()-Separator[0].size())!=std::string::npos)
- ToReturn.resize(ToReturn.size()-Separator[0].size());
-
- return ToReturn;
-}
-
-//---------------------------------------------------------------------------
-// Write
-void ZtringListList::Write(const Ztring &ToWrite)
-{
- clear();
-
- if (ToWrite.empty())
- return;
-
- size_type PosC=0;
- bool Fini=false;
- Ztring C1;
- ZtringList ZL1;
- ZL1.Separator_Set(0, Separator[1]);
- ZL1.Quote_Set(Quote);
- ZL1.Max_Set(0, Max[1]);
-
- //Detecting carriage return format
- Ztring WriteSeparator;
- if (Separator[0]==EOL)
- {
- size_t CarriageReturn_Pos=ToWrite.find_first_of(__T("\r\n"));
- if (CarriageReturn_Pos!=string::npos)
- {
- if (ToWrite[CarriageReturn_Pos]==__T('\r'))
- {
- if (CarriageReturn_Pos+1<ToWrite.size() && ToWrite[CarriageReturn_Pos+1]==__T('\n'))
- WriteSeparator=__T("\r\n");
- else
- WriteSeparator=__T("\r");
- }
- else
- WriteSeparator=__T("\n");
- }
- else
- WriteSeparator=Separator[0];
- }
- else
- WriteSeparator=Separator[0];
-
- do
- {
- //Searching end of line, but it must not be in quotes
- bool InQuotes=false;
- Ztring CharsToFind=WriteSeparator+Quote;
- size_t Pos_End=PosC;
- while (Pos_End<ToWrite.size())
- {
- Pos_End=ToWrite.find(WriteSeparator, Pos_End);
- if (Pos_End!=string::npos)
- {
- if (Pos_End+Quote.size()<ToWrite.size() && ToWrite[Pos_End]==Quote[0] && ToWrite[Pos_End+1]!=Quote[0])
- {
- InQuotes=!InQuotes; //This is not double quotes, so this is a normal quote
- /*if (!InQuotes)
- {
- C1=ToWrite.substr(PosC, Pos_End-PosC);
- break;
- }*/
- }
-
- if (!InQuotes && Pos_End+WriteSeparator.size()<=ToWrite.size() && ToWrite[Pos_End]==WriteSeparator[0])
- {
- C1=ToWrite.substr(PosC, Pos_End-PosC);
- break;
- }
-
- if (InQuotes && Pos_End+Quote.size()*2<ToWrite.size() && ToWrite[Pos_End]==Quote[0] && ToWrite[Pos_End+1]==Quote[0])
- Pos_End+=2;
- else
- Pos_End++;
- }
- }
- if (Pos_End>=ToWrite.size())
- C1=ToWrite.substr(PosC, string::npos);
-
- ZL1.Write(C1);
- push_back(ZL1);
- PosC+=C1.size()+WriteSeparator.size();
- if (PosC>=ToWrite.size())
- Fini=true;
- }
- while (!Fini);
-}
-
-void ZtringListList::Write(const ZtringList &ToWrite, size_type Pos)
-{
- //Integrity
- if (Pos==Error)
- return;
-
- //Writing
- if (Pos>=size())
- {
- //Reservation de ressources
- if (!capacity())
- reserve(1);
- while (Pos>=capacity())
- reserve(capacity()*2);
-
- while (Pos>size())
- push_back (Ztring());
- push_back(ToWrite);
- }
- else
- operator[](Pos)=ToWrite;
-}
-
-void ZtringListList::Write(const Ztring &ToWrite, size_type Pos0, size_type Pos1)
-{
- if (Pos0>=size())
- Write(Ztring(), Pos0);
-
- operator[](Pos0).Write(ToWrite, Pos1);
-}
-
-void ZtringListList::push_back (const ZtringList &ToAdd)
-{
- vector<ZtringList>::push_back(ToAdd); //Visual C++ 6 patch, should be std::vector
- operator[](size()-1).Separator_Set(0, Separator[1]);
- operator[](size()-1).Quote_Set(Quote);
- operator[](size()-1).Max_Set(0, Max[1]);
-}
-
-void ZtringListList::push_back (const Ztring &ToAdd)
-{
- ZtringList ZL1;
- ZL1.Separator_Set(0, Separator[1]);
- ZL1.Quote_Set(Quote);
- ZL1.Max_Set(0, Max[1]);
- ZL1.Write(ToAdd);
- push_back(ZL1);
-}
-
-//---------------------------------------------------------------------------
-// Insert
-void ZtringListList::Insert1 (const Ztring &ToInsert, size_type Pos1)
-{
- for (size_type Pos0=0; Pos0<size(); Pos0++)
- operator[](Pos0).Insert(ToInsert, Pos1);
-}
-
-//---------------------------------------------------------------------------
-// Delete
-void ZtringListList::Delete (const Ztring &ToFind, size_type Pos1, const Ztring &Comparator, ztring_t Options)
-{
- size_type Pos0=0;
- while ((Pos0=Find(ToFind, Pos1, Pos0, Comparator, Options))!=Error)
- operator [] (Pos0).Delete(Pos1);
-}
-
-void ZtringListList::Delete1 (size_type Pos1)
-{
- for (size_type Pos0=0; Pos0<size(); Pos0++)
- operator [] (Pos0).Delete(Pos1);
-}
-
-//***************************************************************************
-// Edition
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Swap
-void ZtringListList::Swap (size_type Pos0_A, size_type Pos0_B)
-{
- //Integrity
- size_type Pos_Max;
- if (Pos0_A<Pos0_B)
- Pos_Max=Pos0_B;
- else
- Pos_Max=Pos0_A;
- if (Pos_Max>=size())
- Write(Ztring(), Pos_Max);
-
- operator [] (Pos0_A).swap(operator [] (Pos0_B));
-}
-
-void ZtringListList::Swap1 (size_type Pos1_A, size_type Pos1_B)
-{
- for (size_type Pos0=0; Pos0<size(); Pos0++)
- operator () (Pos0, Pos1_A).swap(operator () (Pos0, Pos1_B));
-}
-
-//---------------------------------------------------------------------------
-// Sort
-void ZtringListList::Sort(size_type, ztring_t)
-{
- std::stable_sort(begin(), end());
- return;
-}
-
-//---------------------------------------------------------------------------
-// Find
-Ztring::size_type ZtringListList::Find (const Ztring &ToFind, size_type Pos1, size_type Pos0) const
-{
- size_t Size=size();
- for (; Pos0<Size; Pos0++)
- if (operator[](Pos0).size()>Pos1)
- if (operator[](Pos0)[Pos1]==ToFind)
- break;
-
- if (Pos0>=Size)
- return Error;
- return Pos0;
-}
-
-Ztring::size_type ZtringListList::Find_Filled (size_type Pos1, size_type Pos0) const
-{
- size_t Size=size();
- for (; Pos0<Size; Pos0++)
- if (operator[](Pos0).size()>Pos1)
- if (!operator[](Pos0)[Pos1].empty())
- break;
-
- if (Pos0>=Size)
- return Error;
- return Pos0;
-}
-
-Ztring::size_type ZtringListList::Find (const Ztring &ToFind, size_type Pos1, size_type Pos0, const Ztring &Comparator, ztring_t Options) const
-{
- while ( Pos0<size()
- && ( Pos1>=at(Pos0).size()
- || !at(Pos0).at(Pos1).Compare(ToFind, Comparator, Options)))
- Pos0++;
- if (Pos0>=size())
- return Error;
- return Pos0;
-}
-
-Ztring ZtringListList::FindValue (const Ztring &ToFind, size_type Pos1Value, size_type Pos1, size_type Pos0Begin, const Ztring &Comparator, ztring_t) const
-{
- size_type Pos0=Find(ToFind, Pos1, Pos0Begin, Comparator);
- if (Pos0==Error)
- return Ztring();
-
- return Read(Pos0, Pos1Value);
-}
-
-ZtringListList ZtringListList::SubSheet (const Ztring &ToFind, size_type Pos1, size_type Pos0, const Ztring &Comparator, ztring_t) const
-{
- ZtringListList ToReturn;
- ToReturn.Separator[0]=Separator[0];
- ToReturn.Separator[1]=Separator[1];
- ToReturn.Quote=Quote;
-
- Pos0--;
- do
- {
- Pos0=Find(ToFind, Pos1, Pos0+1, Comparator);
- ToReturn.push_back(Read(Pos0));
- }
- while (Pos0!=Error);
-
- return ToReturn;
-}
-
-//***************************************************************************
-// Configuration
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Separator
-void ZtringListList::Separator_Set (size_type Level, const Ztring &NewSeparator)
-{
- if (Level>1)
- return;
-
- Separator[Level]=NewSeparator;
- if (Level==1)
- for (size_type Pos0=0; Pos0<size(); Pos0++)
- operator () (Pos0).Separator_Set(0, Separator[1]);
-}
-
-//---------------------------------------------------------------------------
-// Quote
-void ZtringListList::Quote_Set (const Ztring &NewQuote)
-{
- Quote=NewQuote;
- for (size_type Pos0=0; Pos0<size(); Pos0++)
- operator () (Pos0).Quote_Set(Quote);
-}
-
-//---------------------------------------------------------------------------
-// Max
-void ZtringListList::Max_Set (size_type Level, size_type NewMax)
-{
- if (Level>1 || NewMax==0)
- return;
-
- Max[Level]=NewMax;
- if (Level==1)
- for (size_type Pos0=0; Pos0<size(); Pos0++)
- operator () (Pos0).Max_Set(0, Max[1]);
-}
-
-//***************************************************************************
-//
-//***************************************************************************
-
-} //namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/ZtringListList.h b/src/thirdparty/ZenLib/ZenLib/ZtringListList.h
deleted file mode 100644
index f7102458d..000000000
--- a/src/thirdparty/ZenLib/ZenLib/ZtringListList.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// More methods for std::vector<std::vector<std::(w)string>>
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZenLib_ZtringListListH
-#define ZenLib_ZtringListListH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/ZtringList.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief Vector of vectors of strings manipulation (based on std::vector<std::vector<std::(w)string>>)
-//***************************************************************************
-
-class ZtringListList : public std::vector<ZtringList>
-{
-public :
- //Constructors/Destructor
- ZtringListList ();
- ZtringListList (const ZtringListList &Source);
- ZtringListList (const Ztring &Source);
- ZtringListList (const Char *Source);
- #ifdef _UNICODE
- ZtringListList (const char *Source); //convert a UTF-8 string into Unicode
- #endif
-
- //Operateurs
- bool operator == (const ZtringListList &Source) const;
- bool operator != (const ZtringListList &Source) const;
- ZtringListList &operator += (const ZtringListList &Source);
- ZtringListList &operator = (const ZtringListList &Source);
-
- ZtringList &operator () (size_type Pos0); ///< Same as [], but write a empty string if Pos doesn't exist yet
- Ztring &operator () (size_type Pos0, size_type Pos1);
- /// @brief Return [Pos][Pos1], Pos=First occurency of Pos0 in [xxx][0]
- Ztring &operator () (const Ztring &Pos0, size_type Pos1=1) {return operator() (Pos0, 0 , Pos1);};
- /// @brief Return [Pos][Pos1], Pos=First occurency of Pos0 in [xxx][Pos0_1]
- Ztring &operator () (const Ztring &Pos0, size_type Pos0_1, size_type Pos1);
-
- //In/Out
- /// @brief Read all
- Ztring Read () const;
- /// @brief Read a vector of string
- Ztring Read (size_type Pos0) const;
- /// @brief Read a string
- const Ztring &Read (size_type Pos0, size_type Pos1) const;
- /// @brief Return [Pos][Pos1], Pos=First occurency of Pos0 in [xxx][0]
- const Ztring &Read (const Ztring &Pos0, size_type Pos1=1) const;
- /// @brief Return [Pos][Pos1], Pos=First occurency of Pos0 in [xxx][Pos0_1]
- const Ztring &Read (const Ztring &Pos0, size_type Pos0_1, size_type Pos1) const;
- /// @brief Return [Pos][Pos1], Pos=First occurency of Pos0 in [xxx][0], with default value
- const Ztring &Read (const Ztring &Pos0, const Ztring &Default, size_type Pos1=1) const;
- /// @brief Return [Pos][Pos1], Pos=First occurency of Pos0 in [xxx][Pos0_1], with default value
- const Ztring &Read (const Ztring &Pos0, const Ztring &Default, size_type Pos0_1, size_type Pos1) const;
- /// @brief Read all strings at position Pos1
- Ztring Read1 (size_type Pos1) const;
-
- /// @brief Write all
- void Write (const Ztring &ToWrite);
- /// @brief Write a vector of string
- void Write (const ZtringList &ToWrite, size_type Pos0);
- /// @brief Write a vector of string
- void Write (const Ztring &ToWrite, size_type Pos0, size_type Pos1);
- /// @brief Add a vector of string
- void push_back (const ZtringList &ToAdd);
- /// @brief Add a vector of string (with separator is ZtringListList Separator)
- void push_back (const Ztring &ToAdd);
- /// @brief Add a vector of string (Char version)
- void push_back (const Char* ToAdd) {push_back(Ztring(ToAdd));};
- /// @brief Insert a vector of string at position Pos0
- void Insert (const ZtringList &ToInsert, size_type Pos0) {insert(begin()+Pos0, ToInsert);};
- /// @brief Insert a string at all positions Pos1
- void Insert1 (const Ztring &ToInsert, size_type Pos1);
- /// @brief Delete a vector of string at position Pos0
- void Delete (size_type Pos0) {erase(begin()+Pos0);};
- /// @brief Delete all vectors of string, with [xxx][Pos1] == ToFind
- void Delete (const Ztring &ToFind, size_type Pos1=0, const Ztring &Comparator=__T("=="), ztring_t Options=Ztring_Nothing);
- /// @brief Delete a string at all positions Pos1
- void Delete1 (size_type Pos1);
-
- //Edition
- /// @brief Swap 2 positions
- void Swap (size_type Pos0_A, size_type Pos0_B);
- /// @brief Swap 2 columns for each line
- void Swap1 (size_type Pos1_A, size_type Pos1_B);
- /// @brief Sort
- void Sort (size_type Pos1, ztring_t Options=Ztring_Nothing);
-
- //Information
- /// @brief Find the first position of the string in the vector of vector, in a specific column
- size_type Find (const Ztring &ToFind, size_type Pos1=0, size_type Pos0Begin=0) const;
- /// @brief Find the first position of the string in the vector of vector, in a specific column, which is not empty
- size_type Find_Filled (size_type Pos1=0, size_type Pos0Begin=0) const;
- /// @brief Find the first position of the string in the vector of vector, in a specific column
- size_type Find (const Ztring &ToFind, size_type Pos1, size_type Pos0Begin, const Ztring &Comparator, ztring_t Options=Ztring_Nothing) const;
- /// @brief Return [xxx][Pos1Value] when founded the first position of the string in the vector of vector, in a specific column
- Ztring FindValue (const Ztring &ToFind, size_type Pos1Value=1, size_type Pos1=0, size_type Pos0Begin=0, const Ztring &Comparator=__T("=="), ztring_t Options=Ztring_Nothing) const;
- /// @brief Return a subsheet, with all lines with position of the string in the vector of vector, in a specific column
- ZtringListList SubSheet (const Ztring &ToFind, size_type Pos1=0, size_type Pos0Begin=0, const Ztring &Comparator=__T("=="), ztring_t Options=Ztring_Nothing) const;
-
- //Configuration
- /// @brief Set the Separator character
- void Separator_Set (size_type Level, const Ztring &NewSeparator);
- /// @brief Set the Quote character
- /// During Read() or Write() method, if Separator is in the sequence, we must quote it
- void Quote_Set (const Ztring &NewQuote);
- /// @brief Set the Maximum number of element to read
- /// During Read() or Write() method, if there is more elements, merge them with the last element
- void Max_Set (size_type Level, size_type Max);
-
-protected :
- Ztring Separator[2];
- Ztring Quote;
- size_type Max[2];
-};
-
-} //namespace
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/ZtringListListF.cpp b/src/thirdparty/ZenLib/ZenLib/ZtringListListF.cpp
deleted file mode 100644
index a89693d44..000000000
--- a/src/thirdparty/ZenLib/ZenLib/ZtringListListF.cpp
+++ /dev/null
@@ -1,370 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// ZtringListList with file load/save
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/ZtringListListF.h"
-#include "ZenLib/File.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//---------------------------------------------------------------------------
-#define READ_SIZE 512*1024
-//---------------------------------------------------------------------------
-
-//***************************************************************************
-// Constructors/Destructor
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Constructors
-void ZtringListListF::ZtringListListF_Common ()
-{
- Backup_Nb_Max=0;
- Backup_Nb=0;
- Sauvegarde=true;
- #ifdef _UNICODE
- Local=false;
- #else
- Local=true;
- #endif
-}
-
-ZtringListListF::ZtringListListF ()
-:ZtringListList ()
-{
- ZtringListListF_Common();
-}
-
-ZtringListListF::ZtringListListF (const ZtringListList &Source)
-:ZtringListList (Source)
-{
- ZtringListListF_Common();
-}
-
-ZtringListListF::ZtringListListF (const Ztring &Source)
-:ZtringListList (Source)
-{
- ZtringListListF_Common();
-}
-
-ZtringListListF::ZtringListListF (const Char *Source)
-:ZtringListList (Source)
-{
- ZtringListListF_Common();
-}
-
-#ifdef _UNICODE
-ZtringListListF::ZtringListListF (const char* Source)
-:ZtringListList (Source)
-{
- ZtringListListF_Common();
-}
-#endif
-
-//***************************************************************************
-// File management
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Load
-bool ZtringListListF::Load (const Ztring &NewFileName)
-{
- clear();
- if (!NewFileName.empty())
- Name=NewFileName;
-
- size_t I1=Error;
-
- if (Name.find(__T(".csv"))!=Error)
- I1=CSV_Charger();
- if (Name.find(__T(".cfg"))!=Error)
- I1=CFG_Charger();
- if (I1!=Error)
- {
- Backup_Nb=0; //mettre ici le code pour trouver le nb de backup
- return true;
- }
- else
- return false;
-}
-
-//---------------------------------------------------------------------------
-// Load CSV
-bool ZtringListListF::CSV_Charger ()
-{
- //Read file
- File F;
- if (!F.Open(Name))
- return false;
-
- int8u* Buffer=new int8u[(size_t)F.Size_Get()+1];
- size_t BytesCount=F.Read(Buffer, (size_t)F.Size_Get());
- F.Close();
- if (BytesCount==Error)
- {
- delete[] Buffer; //Buffer=NULL;
- return false;
- }
- Buffer[(int32u)BytesCount]=(int8u)'\0';
-
- //Convert file in UTF-8 or Local
- Ztring File;
- if (!Local)
- {
- //UTF-8
- File.From_UTF8((char*)Buffer, 0, BytesCount);
- #ifdef _DEBUG
- if (File.size()==0)
- File.From_Local((char*)Buffer, 0, BytesCount);
- #endif //_DEBUG
- }
- if (File.size()==0)
- //Local of UTF-8 failed
- File.From_Local((char*)Buffer, 0, BytesCount);
-
- //Separators
- if (Separator[0]==__T("(Default)"))
- Separator[0]=EOL;
- Ztring SeparatorT=Separator[1];
- Separator[1]=__T(";");
-
- //Writing
- Write(File);
-
- //Separators
- Separator[1]=SeparatorT;
-
- delete[] Buffer; //Buffer=NULL;
- return true;
-}
-
-//---------------------------------------------------------------------------
-// Chargement CFG
-bool ZtringListListF::CFG_Charger ()
-{
- //Read file
- File F(Name);
- int8u* Buffer=new int8u[(size_t)F.Size_Get()+1];
- size_t BytesCount=F.Read(Buffer, (size_t)F.Size_Get());
- F.Close();
- if (BytesCount==Error)
- {
- delete[] Buffer; //Buffer=NULL;
- return false;
- }
- Buffer[(int32u)BytesCount]=(int8u)'\0';
-
- //Convert File --> ZtringList
- ZtringList List;
- List.Separator_Set(0, EOL);
- Ztring Z1;
- Z1.From_UTF8((char*)Buffer, 0, BytesCount);
- List.Write(Z1);
-
- Ztring SeparatorT=Separator[1];
- Separator[1]=__T(";");
-
- Ztring Propriete, Valeur, Commentaire;
-
- for (size_t Pos=0; Pos<List.size(); Pos++)
- {
- Ztring &Lu=List(Pos);
- if (Lu.find(__T("="))>0)
- {
- //Obtention du Name
- Propriete=Lu.SubString(Ztring(), __T("="));
- NettoyerEspaces(Propriete);
- //Obtention de la valeur
- Valeur=Lu.SubString(__T("="), __T(";"), 0, Ztring_AddLastItem);
- NettoyerEspaces(Valeur);
- }
- //Obtention du commentaire
- Commentaire=Lu.SubString(__T(";"), Ztring(), 0, Ztring_AddLastItem);
- NettoyerEspaces(Commentaire);
- //Ecriture
- push_back((Propriete+__T(";")+Valeur+__T(";")+Commentaire).c_str()); //Visual C++ 6 is old...
- }
- Separator[1]=SeparatorT;
-
- delete[] Buffer; //Buffer=NULL;
- return true;
-}
-
-//---------------------------------------------------------------------------
-// Sauvegarde globale
-bool ZtringListListF::Save (const Ztring &FileName)
-{
- //Gestion de l'annulation de la sauvegarde
- if (!Sauvegarde)
- return true;
-
- if (FileName!=Ztring())
- Name=FileName;
-
- //Gestion des backups
- Backup_Nb=0;
- int8u I2;
- Separator[0]=EOL;
- if (Backup_Nb_Max>0)
- {
- //TODO : not tested
- for (int8u I1=Backup_Nb_Max-1; I1>0; I1--)
- {
- Ztring Z1=Name+__T(".sav"); Z1+=Ztring::ToZtring(I1);
- Ztring Z2=Name+__T(".sav"); Z2+=Ztring::ToZtring(I1+1);
- File::Delete(Z2.c_str());
- I2=File::Move(Z1.c_str(), Z2.c_str());
- if (I2 && !Backup_Nb)
- Backup_Nb=I2;
- }
- Ztring Z1=Name+__T(".sav0");
- File::Delete(Z1.c_str());
- File::Move(Name.c_str(), Z1.c_str());
- Backup_Nb++;
- }
-
- I2=0;
- if (Name.find(__T(".csv"))!=Error)
- I2=CSV_Sauvegarder();
- if (Name.find(__T(".cfg"))!=Error)
- I2=CFG_Sauvegarder();
-
- if (I2>0)
- {
- return true;
- }
- else
- return false;
-}
-
-//---------------------------------------------------------------------------
-// Sauvegarde CSV
-bool ZtringListListF::CSV_Sauvegarder ()
-{
- //Sauvegarde
- File F;
- if (!F.Create(Name, true))
- return Error;
-
- if (Separator[0]==__T("(Default)"))
- Separator[0]=EOL;
-
- F.Write(Read());
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-// Sauvegarde CFG
-bool ZtringListListF::CFG_Sauvegarder ()
-{
- File F;
- if (!F.Create(Name, true))
- return Error;
-
- Ztring ToWrite;
- Ztring Propriete, Valeur, Commentaire;
-
- ;
- for (size_t Pos=0; Pos<size(); Pos++)
- {
- Propriete=Read(Pos, 0);
- Valeur=Read(Pos, 1);
- Commentaire=Read(Pos, 2);
- if (Propriete!=Ztring())
- {
- ToWrite+=Propriete+__T(" = ");
- if (Valeur!=Ztring())
- ToWrite+=Valeur+__T(" ");
- }
- if (Commentaire!=Ztring())
- ToWrite+=__T("; ")+Commentaire;
- ToWrite+=EOL;
- }
- F.Write(ToWrite);
-
- return true;
-}
-
-//---------------------------------------------------------------------------
-// Annulation
-bool ZtringListListF::Cancel ()
-{
- Ztring Z1=Name+__T(".sav0"); //Visual C++ 6 patch
- File::Delete(Name.c_str());
- File::Move(Z1.c_str(), Name.c_str());
- for (int8u I1=1; I1<=Backup_Nb; I1++)
- {
- Ztring Z2=Name+__T(".sav"); Z2+=Ztring::ToZtring(I1); //Visual C++ 6 patch
- Ztring Z3=Name+__T(".sav"); Z3+=Ztring::ToZtring(I1-1); //Visual C++ 6 patch
- File::Delete(Z3.c_str());
- File::Move(Z2.c_str(), Z3.c_str());
- }
- Write(Ztring());
- return CSV_Charger();
-}
-
-//***************************************************************************
-// Divers
-//***************************************************************************
-
-//---------------------------------------------------------------------------
-// Nettoyage
-bool ZtringListListF::NettoyerEspaces (Ztring &ANettoyer)
-{
- size_t Debut=0;
- while (Debut<ANettoyer.size() && ANettoyer[Debut]==__T(' '))
- Debut++;
- size_t Fin=ANettoyer.size()-1;
- while (Fin!=(size_t)-2 && ANettoyer[Fin]==__T(' '))
- Fin--;
- if (Fin>=Debut)
- ANettoyer=ANettoyer.substr(Debut, Fin-Debut+1);
- else
- ANettoyer=Ztring();
- return true;
-}
-
-//---------------------------------------------------------------------------
-// Backup
-void ZtringListListF::Backup_Set (bool NewSave)
-{
- Sauvegarde=NewSave;
- Save();
-}
-
-void ZtringListListF::Backup_Count_Set (int8u NewCount)
-{
- Backup_Nb_Max=NewCount;
-}
-
-//---------------------------------------------------------------------------
-// Local
-void ZtringListListF::Local_Set (bool NewLocal)
-{
- Local=NewLocal;
-}
-
-} //Namespace
diff --git a/src/thirdparty/ZenLib/ZenLib/ZtringListListF.h b/src/thirdparty/ZenLib/ZenLib/ZtringListListF.h
deleted file mode 100644
index 0410fd260..000000000
--- a/src/thirdparty/ZenLib/ZenLib/ZtringListListF.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// ZtringListList with file load/save
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#ifndef ZtringListListFH
-#define ZtringListListFH
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/ZtringListList.h"
-//---------------------------------------------------------------------------
-
-namespace ZenLib
-{
-
-//***************************************************************************
-/// @brief ZtringListList with file management
-//***************************************************************************
-
-class ZtringListListF : public ZtringListList
-{
-public :
- //Constructors/Destructor
- ZtringListListF ();
- ZtringListListF (const ZtringListList &Source);
- ZtringListListF (const Ztring &Source);
- ZtringListListF (const Char *Source);
- #ifdef _UNICODE
- ZtringListListF (const char *Source); //convert a UTF-8 string into Unicode
- #endif
-
- //File management
- bool Load (const Ztring &FileName=Ztring());
- bool Save (const Ztring &FileName=Ztring());
- bool Cancel ();
-
- //Configuration
- // @brief enable or disable backup creation
- void Backup_Set (bool Save);
- // @brief Set the count of versions to save
- void Backup_Count_Set (int8u Count);
- // @brief Set if the content of file is a localized (=not UTF8) file
- void Local_Set (bool Local);
-
-protected :
- Ztring Name; //Nom du fichier
- bool Sauvegarde; //Indicateur si on a le droit de sauvegarder (par defaut)
- int8u Backup_Nb_Max; //Nombre maxi de sauvegardes
- int8u Backup_Nb; //Nombre actuel de backups pour cette session
- bool Local; //if true, this is a local charset, else this is a UTF8 charset
-
- //File management
- bool CSV_Charger ();
- bool CFG_Charger ();
- bool CSV_Sauvegarder ();
- bool CFG_Sauvegarder ();
- bool File_Load ();
-
- //Divers
- bool NettoyerEspaces (Ztring &ANettoyer); //Enlever les espaces avant et apres
-
-private:
- void ZtringListListF_Common();
-};
-
-} //Namespace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/int128s.cpp b/src/thirdparty/ZenLib/ZenLib/int128s.cpp
deleted file mode 100644
index 5d597e1e6..000000000
--- a/src/thirdparty/ZenLib/ZenLib/int128s.cpp
+++ /dev/null
@@ -1,408 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// based on http://Tringi.Mx-3.cz
-// Only adapted for ZenLib:
-// - uint128.hpp --> int128u.h
-// - Namespace
-// - int128u alias
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-#include "int128s.h"
-
-/*
- Name: int128.cpp
- Copyright: Copyright (C) 2005, Jan Ringos
- Author: Jan Ringos, http://Tringi.Mx-3.cz
-
- Version: 1.1
-*/
-
-#include <memory>
-#include <cmath>
-#include <cstring>
-#if defined (__BORLANDC__) || defined (__SUNPRO_CC)
- #define fmodf fmod
-#endif
-#if defined (__NO_LONG_DOUBLE_MATH) || \
- defined (__MONTAVISTA__) || defined (__ARMEL__) || \
- defined (__FreeBSD__) || defined (__OpenBSD__) || \
- defined (__NetBSD__) || defined (__DragonFly__) || \
- defined (__sparc__) || defined (__sparc64__) || \
- defined (__CYGWIN__) || \
- defined (__SUNPRO_CC)
- #define fmodl fmod
-#endif
-using namespace std;
-
-namespace ZenLib
-{
-
-// IMPLEMENTATION
-
-const char * int128::toString (unsigned int radix) const throw () {
- if (!*this) return "0";
- if (radix < 2 || radix > 37) return "(invalid radix)";
-
- static char sz [256];
- memset (sz, 0, 256);
-
- int128 r;
- int128 ii = (*this < 0) ? -*this : *this;
- int i = 255;
-
- while (!!ii && i) {
- ii = ii.div (radix, r);
- sz [--i] = (char) (r.toInt () + ((r.toInt () > 9) ? 'A' - 10 : '0'));
- };
-
- if (*this < 0)
- sz [--i] = '-';
-
- return &sz [i];
-};
-
-int128::int128 (const char * sz) throw ()
- : lo (0u), hi (0) {
-
- if (!sz) return;
- if (!sz [0]) return;
-
- unsigned int radix = 10;
- unsigned int i = 0;
- bool minus = false;
-
- if (sz [i] == '-') {
- ++i;
- minus = true;
- };
-
- if (sz [i] == '0') {
- radix = 8;
- ++i;
- if (sz [i] == 'x') {
- radix = 16;
- ++i;
- };
- };
-
- for (; i < strlen (sz); ++i) {
- unsigned int n = 0;
- if (sz [i] >= '0' && sz [i] <= (('0' + (int) radix) < '9'?('0' + (int) radix):'9')) //if (sz [i] >= '0' && sz [i] <= (('0' + (int) radix) <? '9'))
- n = sz [i] - '0';
- else if (sz [i] >= 'a' && sz [i] <= 'a' + (int) radix - 10)
- n = sz [i] - 'a' + 10;
- else if (sz [i] >= 'A' && sz [i] <= 'A' + (int) radix - 10)
- n = sz [i] - 'A' + 10;
- else
- break;
-
- (*this) *= radix;
- (*this) += n;
- };
-
- if (minus)
- *this = 0 - *this;
-
- return;
-};
-
-int128::int128 (const float a) throw ()
- #if defined (__mips__) || defined (__mipsel__)
- : lo ((int64u) fmodf ((const double)a, 18446744073709551616.0)),
- #else
- : lo ((int64u) fmodf (a, 18446744073709551616.0f)),
- #endif
- hi ((int64s) (a / 18446744073709551616.0f)) {};
-
-int128::int128 (const double & a) throw ()
- : lo ((int64u) fmod (a, 18446744073709551616.0)),
- hi ((int64s) (a / 18446744073709551616.0)) {};
-
-int128::int128 (const long double & a) throw ()
- #if defined (__mips__) || defined (__mipsel__)
- : lo ((int64u) fmod ((const double)a, 18446744073709551616.0)),
- #else
- : lo ((int64u) fmodl (a, 18446744073709551616.0l)),
- #endif
- hi ((int64s) (a / 18446744073709551616.0l)) {};
-
-float int128::toFloat () const throw () {
- return (float) this->hi * 18446744073709551616.0f
- + (float) this->lo;
-};
-
-double int128::toDouble () const throw () {
- return (double) this->hi * 18446744073709551616.0
- + (double) this->lo;
-};
-
-long double int128::toLongDouble () const throw () {
- return (long double) this->hi * 18446744073709551616.0l
- + (long double) this->lo;
-};
-
-int128 int128::operator - () const throw () {
- if (!this->hi && !this->lo)
- // number is 0, just return 0
- return *this;
- else
- // non 0 number
- return int128 (0-this->lo, ~this->hi);
-};
-
-int128 int128::operator ~ () const throw () {
- return int128 (~this->lo, ~this->hi);
-};
-
-int128 & int128::operator ++ () {
- ++this->lo;
- if (!this->lo)
- ++this->hi;
-
- return *this;
-};
-
-int128 & int128::operator -- () {
- if (!this->lo)
- --this->hi;
- --this->lo;
-
- return *this;
-};
-
-int128 int128::operator ++ (int) {
- int128 b = *this;
- ++ *this;
-
- return b;
-};
-
-int128 int128::operator -- (int) {
- int128 b = *this;
- -- *this;
-
- return b;
-};
-
-int128 & int128::operator += (const int128 & b) throw () {
- int64u old_lo = this->lo;
-
- this->lo += b.lo;
- this->hi += b.hi + (this->lo < old_lo);
-
- return *this;
-};
-
-int128 & int128::operator *= (const int128 & b) throw () {
- if (!b)
- return *this = 0u;
- if (b == 1u)
- return *this;
-
- int128 a = *this;
- int128 t = b;
-
- this->lo = 0ull;
- this->hi = 0ll;
-
- for (unsigned int i = 0; i < 128; ++i) {
- if (t.lo & 1)
- *this += a << i;
-
- t >>= 1;
- };
-
- return *this;
-};
-
-
-int128 int128::div (const int128 & divisor, int128 & remainder) const throw () {
- if (!divisor)
- return 1u / (unsigned int) divisor.lo;
- // or RaiseException (EXCEPTION_INT_DIVIDE_BY_ZERO,
- // EXCEPTION_NONCONTINUABLE, 0, NULL);
-
- int128 ds = (divisor < 0) ? -divisor : divisor;
- int128 dd = (*this < 0) ? -*this : *this;
-
- // only remainder
- if (ds > dd) {
- remainder = *this;
- return 0ull;
- };
-
- int128 r = 0ull;
- int128 q = 0ull;
-// while (dd >= ds) { dd -= ds; q += 1; }; // extreme slow version
-
- unsigned int b = 127;
- while (r < ds) {
- r <<= 1;
- if (dd.bit (b--))
- r.lo |= 1;
- };
- ++b;
-
- for (;;)
- if (r < ds) {
- if (!(b--)) break;
-
- r <<= 1;
- if (dd.bit (b))
- r.lo |= 1;
-
- } else {
- r -= ds;
- q.bit (b, true);
- };
-
- // correct
- if ((divisor < 0) ^ (*this < 0)) q =- q;
- if (*this < 0) r =- r;
-
- remainder = r;
- return q;
-};
-
-bool int128::bit (unsigned int n) const throw () {
- n &= 0x7F;
-
- if (n < 64)
- return (this->lo & (1ull << n))?true:false;
- else
- return (this->hi & (1ull << (n - 64)))?true:false;
-};
-
-void int128::bit (unsigned int n, bool val) throw () {
- n &= 0x7F;
-
- if (val) {
- if (n < 64) this->lo |= (1ull << n);
- else this->hi |= (1ull << (n - 64));
- } else {
- if (n < 64) this->lo &= ~(1ull << n);
- else this->hi &= ~(1ull << (n - 64));
- };
-};
-
-
-int128 & int128::operator >>= (unsigned int n) throw () {
- n &= 0x7F;
-
- if (n > 63) {
- n -= 64;
- this->lo = this->hi;
-
- if (this->hi < 0) this->hi = -1ll;
- else this->hi = 0ll;
- };
-
- if (n) {
- // shift low qword
- this->lo >>= n;
-
- // get lower N bits of high qword
- int64u mask = 0ull;
- for (unsigned int i = 0; i < n; ++i) mask |= (1ull << i);
-
- // and add them to low qword
- this->lo |= (this->hi & mask) << (64 - n);
-
- // and finally shift also high qword
- this->hi >>= n;
- };
-
- return *this;
-};
-
-int128 & int128::operator <<= (unsigned int n) throw () {
- n &= 0x7F;
-
- if (n > 63) {
- n -= 64;
- this->hi = this->lo;
- this->lo = 0ull;
- };
-
- if (n) {
- // shift high qword
- this->hi <<= n;
-
- // get higher N bits of low qword
- int64u mask = 0ull;
- for (unsigned int i = 0; i < n; ++i) mask |= (1ull << (63 - i));
-
- // and add them to high qword
- this->hi |= (this->lo & mask) >> (64 - n);
-
- // and finally shift also low qword
- this->lo <<= n;
- };
-
- return *this;
-};
-
-bool int128::operator ! () const throw () {
- return !(this->hi || this->lo);
-};
-
-int128 & int128::operator |= (const int128 & b) throw () {
- this->hi |= b.hi;
- this->lo |= b.lo;
-
- return *this;
-};
-
-int128 & int128::operator &= (const int128 & b) throw () {
- this->hi &= b.hi;
- this->lo &= b.lo;
-
- return *this;
-};
-
-int128 & int128::operator ^= (const int128 & b) throw () {
- this->hi ^= b.hi;
- this->lo ^= b.lo;
-
- return *this;
-};
-
-bool operator < (const int128 & a, const int128 & b) throw () {
- if (a.hi == b.hi) {
- if (a.hi < 0)
- return (int64s) a.lo < (int64s) b.lo;
- else
- return a.lo < b.lo;
- } else
- return a.hi < b.hi;
-};
-
-bool operator == (const int128 & a, const int128 & b) throw () {
- return a.hi == b.hi && a.lo == b.lo;
-};
-bool operator && (const int128 & a, const int128 & b) throw () {
- return (a.hi || a.lo) && (b.hi || b.lo);
-};
-bool operator || (const int128 & a, const int128 & b) throw () {
- return (a.hi || a.lo) || (b.hi || b.lo);
-};
-
-} //NameSpace
diff --git a/src/thirdparty/ZenLib/ZenLib/int128s.h b/src/thirdparty/ZenLib/ZenLib/int128s.h
deleted file mode 100644
index e387c87b5..000000000
--- a/src/thirdparty/ZenLib/ZenLib/int128s.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// based on http://Tringi.Mx-3.cz
-// Only adapted for ZenLib:
-// - .hpp --> .h
-// - Namespace
-// - int128s alias
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-#ifndef INT128_HPP
-#define INT128_HPP
-
-/*
- Name: int128.hpp
- Copyright: Copyright (C) 2005, Jan Ringos
- Author: Jan Ringos, http://Tringi.Mx-3.cz
-
- Version: 1.1
-*/
-
-#include <exception>
-#include <cstdlib>
-#include <cstdio>
-#include <new>
-#include "ZenLib/Conf.h"
-
-namespace ZenLib
-{
-
-// CLASS
-
-class int128 {
- private:
- // Binary correct representation of signed 128bit integer
- int64u lo;
- int64s hi;
-
- protected:
- // Some global operator functions must be friends
- friend bool operator < (const int128 &, const int128 &) throw ();
- friend bool operator == (const int128 &, const int128 &) throw ();
- friend bool operator || (const int128 &, const int128 &) throw ();
- friend bool operator && (const int128 &, const int128 &) throw ();
-
- public:
- // Constructors
- inline int128 () throw () : lo(0), hi(0) {};
- inline int128 (const int128 & a) throw () : lo (a.lo), hi (a.hi) {};
-
- inline int128 (const unsigned int & a) throw () : lo (a), hi (0ll) {};
- inline int128 (const signed int & a) throw () : lo (a), hi (0ll) {
- if (a < 0) this->hi = -1ll;
- };
-
- inline int128 (const int64u & a) throw () : lo (a), hi (0ll) {};
- inline int128 (const int64s & a) throw () : lo (a), hi (0ll) {
- if (a < 0) this->hi = -1ll;
- };
-
- int128 (const float a) throw ();
- int128 (const double & a) throw ();
- int128 (const long double & a) throw ();
-
- int128 (const char * sz) throw ();
-
- // TODO: Consider creation of operator= to eliminate
- // the need of intermediate objects during assignments.
-
- private:
- // Special internal constructors
- int128 (const int64u & a, const int64s & b) throw ()
- : lo (a), hi (b) {};
-
- public:
- // Operators
- bool operator ! () const throw ();
-
- int128 operator - () const throw ();
- int128 operator ~ () const throw ();
-
- int128 & operator ++ ();
- int128 & operator -- ();
- int128 operator ++ (int);
- int128 operator -- (int);
-
- int128 & operator += (const int128 & b) throw ();
- int128 & operator *= (const int128 & b) throw ();
-
- int128 & operator >>= (unsigned int n) throw ();
- int128 & operator <<= (unsigned int n) throw ();
-
- int128 & operator |= (const int128 & b) throw ();
- int128 & operator &= (const int128 & b) throw ();
- int128 & operator ^= (const int128 & b) throw ();
-
- // Inline simple operators
- inline const int128 & operator + () const throw () { return *this; };
-
- // Rest of inline operators
- inline int128 & operator -= (const int128 & b) throw () {
- return *this += (-b);
- };
- inline int128 & operator /= (const int128 & b) throw () {
- int128 dummy;
- *this = this->div (b, dummy);
- return *this;
- };
- inline int128 & operator %= (const int128 & b) throw () {
- this->div (b, *this);
- return *this;
- };
-
- // Common methods
- int toInt () const throw () { return (int) this->lo; };
- int64s toInt64 () const throw () { return (int64s) this->lo; };
-
- const char * toString (unsigned int radix = 10) const throw ();
- float toFloat () const throw ();
- double toDouble () const throw ();
- long double toLongDouble () const throw ();
-
- // Arithmetic methods
- int128 div (const int128 &, int128 &) const throw ();
-
- // Bit operations
- bool bit (unsigned int n) const throw ();
- void bit (unsigned int n, bool val) throw ();
-}
-#ifdef __GNUC__
- __attribute__ ((__aligned__ (16), __packed__))
-#endif
-;
-
-
-// GLOBAL OPERATORS
-
-bool operator < (const int128 & a, const int128 & b) throw ();
-bool operator == (const int128 & a, const int128 & b) throw ();
-bool operator || (const int128 & a, const int128 & b) throw ();
-bool operator && (const int128 & a, const int128 & b) throw ();
-
-// GLOBAL OPERATOR INLINES
-
-inline int128 operator + (const int128 & a, const int128 & b) throw () {
- return int128 (a) += b; };
-inline int128 operator - (const int128 & a, const int128 & b) throw () {
- return int128 (a) -= b; };
-inline int128 operator * (const int128 & a, const int128 & b) throw () {
- return int128 (a) *= b; };
-inline int128 operator / (const int128 & a, const int128 & b) throw () {
- return int128 (a) /= b; };
-inline int128 operator % (const int128 & a, const int128 & b) throw () {
- return int128 (a) %= b; };
-
-inline int128 operator >> (const int128 & a, unsigned int n) throw () {
- return int128 (a) >>= n; };
-inline int128 operator << (const int128 & a, unsigned int n) throw () {
- return int128 (a) <<= n; };
-
-inline int128 operator & (const int128 & a, const int128 & b) throw () {
- return int128 (a) &= b; };
-inline int128 operator | (const int128 & a, const int128 & b) throw () {
- return int128 (a) |= b; };
-inline int128 operator ^ (const int128 & a, const int128 & b) throw () {
- return int128 (a) ^= b; };
-
-inline bool operator > (const int128 & a, const int128 & b) throw () {
- return b < a; };
-inline bool operator <= (const int128 & a, const int128 & b) throw () {
- return !(b < a); };
-inline bool operator >= (const int128 & a, const int128 & b) throw () {
- return !(a < b); };
-inline bool operator != (const int128 & a, const int128 & b) throw () {
- return !(a == b); };
-
-
-// MISC
-
-//typedef int128 __int128;
-
-typedef int128 int128s;
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/ZenLib/ZenLib/int128u.cpp b/src/thirdparty/ZenLib/ZenLib/int128u.cpp
deleted file mode 100644
index e0603a30f..000000000
--- a/src/thirdparty/ZenLib/ZenLib/int128u.cpp
+++ /dev/null
@@ -1,390 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// based on http://Tringi.Mx-3.cz
-// Only adapted for ZenLib:
-// - uint128.hpp --> int128u.h
-// - Namespace
-// - int128u alias
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//---------------------------------------------------------------------------
-#include "ZenLib/PreComp.h"
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-#include "ZenLib/Conf_Internal.h"
-//---------------------------------------------------------------------------
-
-#include "int128u.h"
-
-/*
- Name: uint128.cpp
- Copyright: Copyright (C) 2005, Jan Ringos
- Author: Jan Ringos, http://Tringi.Mx-3.cz
-
- Version: 1.1
-*/
-
-#include <memory>
-#include <cmath>
-#include <cstring>
-#if defined (__BORLANDC__) || defined (__SUNPRO_CC)
- #define fmodf fmod
-#endif
-#if defined (__NO_LONG_DOUBLE_MATH) || \
- defined (__MONTAVISTA__) || defined (__ARMEL__) || \
- defined (__FreeBSD__) || defined (__OpenBSD__) || \
- defined (__NetBSD__) || defined (__DragonFly__) || \
- defined (__sparc__) || defined (__sparc64__) || \
- defined (__CYGWIN__) || \
- defined (__SUNPRO_CC)
- #define fmodl fmod
-#endif
-using namespace std;
-
-namespace ZenLib
-{
-
-// IMPLEMENTATION
-
-const char * uint128::toString (unsigned int radix) const throw () {
- if (!*this) return "0";
- if (radix < 2 || radix > 37) return "(invalid radix)";
-
- static char sz [256];
- memset (sz, 0, 256);
-
- uint128 r;
- uint128 ii = *this;
- int i = 255;
-
- while (!!ii && i) {
- ii = ii.div (radix, r);
- sz [--i] = (char) (r.toUint () + ((r.toUint () > 9) ? 'A' - 10 : '0'));
- };
-
- return &sz [i];
-};
-
-uint128::uint128 (const char * sz) throw ()
- : lo (0u), hi (0u) {
-
- if (!sz) return;
- if (!sz [0]) return;
-
- unsigned int radix = 10;
- unsigned int i = 0;
- bool minus = false;
-
- if (sz [i] == '-') {
- ++i;
- minus = true;
- };
-
- if (sz [i] == '0') {
- radix = 8;
- ++i;
- if (sz [i] == 'x') {
- radix = 16;
- ++i;
- };
- };
-
- for (; i < strlen (sz); ++i) {
- unsigned int n = 0;
- if (sz [i] >= '0' && sz [i] <= (('0' + (int) radix) < '9'?('0' + (int) radix):'9')) //if (sz [i] >= '0' && sz [i] <= (('0' + (int) radix) <? '9'))
- n = sz [i] - '0';
- else if (sz [i] >= 'a' && sz [i] <= 'a' + (int) radix - 10)
- n = sz [i] - 'a' + 10;
- else if (sz [i] >= 'A' && sz [i] <= 'A' + (int) radix - 10)
- n = sz [i] - 'A' + 10;
- else
- break;
-
- (*this) *= radix;
- (*this) += n;
- };
-
- if (minus)
- *this = 0u - *this;
-
- return;
-};
-
-uint128::uint128 (const float a) throw ()
- #if defined (__mips__) || defined (__mipsel__)
- : lo ((int64u) fmod ((const double)a, 18446744073709551616.0)),
- #else
- : lo ((int64u) fmodf (a, 18446744073709551616.0f)),
- #endif
- hi ((int64u) (a / 18446744073709551616.0f)) {};
-
-uint128::uint128 (const double & a) throw ()
- : lo ((int64u) fmod (a, 18446744073709551616.0)),
- hi ((int64u) (a / 18446744073709551616.0)) {};
-
-uint128::uint128 (const long double & a) throw ()
- #if defined (__mips__) || defined (__mipsel__)
- : lo ((int64u) fmod ((const double)a, 18446744073709551616.0)),
- #else
- : lo ((int64u) fmodl (a, 18446744073709551616.0l)),
- #endif
- hi ((int64u) (a / 18446744073709551616.0l)) {};
-
-float uint128::toFloat () const throw () {
- return (float) this->hi * 18446744073709551616.0f
- + (float) this->lo;
-};
-
-double uint128::toDouble () const throw () {
- return (double) this->hi * 18446744073709551616.0
- + (double) this->lo;
-};
-
-long double uint128::toLongDouble () const throw () {
- return (long double) this->hi * 18446744073709551616.0l
- + (long double) this->lo;
-};
-
-uint128 uint128::operator - () const throw () {
- if (!this->hi && !this->lo)
- // number is 0, just return 0
- return *this;
- else
- // non 0 number
- return uint128 (0-this->lo, ~this->hi);
-};
-
-uint128 uint128::operator ~ () const throw () {
- return uint128 (~this->lo, ~this->hi);
-};
-
-uint128 & uint128::operator ++ () {
- ++this->lo;
- if (!this->lo)
- ++this->hi;
-
- return *this;
-};
-
-uint128 & uint128::operator -- () {
- if (!this->lo)
- --this->hi;
- --this->lo;
-
- return *this;
-};
-
-uint128 uint128::operator ++ (int) {
- uint128 b = *this;
- ++ *this;
-
- return b;
-};
-
-uint128 uint128::operator -- (int) {
- uint128 b = *this;
- -- *this;
-
- return b;
-};
-
-uint128 & uint128::operator += (const uint128 & b) throw () {
- int64u old_lo = this->lo;
-
- this->lo += b.lo;
- this->hi += b.hi + (this->lo < old_lo);
-
- return *this;
-};
-
-uint128 & uint128::operator *= (const uint128 & b) throw () {
- if (!b)
- return *this = 0u;
- if (b == 1u)
- return *this;
-
- uint128 a = *this;
- uint128 t = b;
-
- this->lo = 0ull;
- this->hi = 0ull;
-
- for (unsigned int i = 0; i < 128; ++i) {
- if (t.lo & 1)
- *this += a << i;
-
- t >>= 1;
- };
-
- return *this;
-};
-
-
-uint128 uint128::div (const uint128 & ds, uint128 & remainder) const throw () {
- if (!ds)
- return 1u / (unsigned int) ds.lo;
-
- uint128 dd = *this;
-
- // only remainder
- if (ds > dd) {
- remainder = *this;
- return 0ull;
- };
-
- uint128 r = 0ull;
- uint128 q = 0ull;
-// while (dd >= ds) { dd -= ds; q += 1; }; // extreme slow version
-
- unsigned int b = 127;
- while (r < ds) {
- r <<= 1;
- if (dd.bit (b--))
- r.lo |= 1;
- };
- ++b;
-
- for (;;)
- if (r < ds) {
- if (!(b--)) break;
-
- r <<= 1;
- if (dd.bit (b))
- r.lo |= 1;
-
- } else {
- r -= ds;
- q.bit (b, true);
- };
-
- remainder = r;
- return q;
-};
-
-bool uint128::bit (unsigned int n) const throw () {
- n &= 0x7F;
-
- if (n < 64)
- return (this->lo & (1ull << n))?true:false;
- else
- return (this->hi & (1ull << (n - 64)))?true:false;
-};
-
-void uint128::bit (unsigned int n, bool val) throw () {
- n &= 0x7F;
-
- if (val) {
- if (n < 64) this->lo |= (1ull << n);
- else this->hi |= (1ull << (n - 64));
- } else {
- if (n < 64) this->lo &= ~(1ull << n);
- else this->hi &= ~(1ull << (n - 64));
- };
-};
-
-
-uint128 & uint128::operator >>= (unsigned int n) throw () {
- n &= 0x7F;
-
- if (n > 63) {
- n -= 64;
- this->lo = this->hi;
- this->hi = 0ull;
- };
-
- if (n) {
- // shift low qword
- this->lo >>= n;
-
- // get lower N bits of high qword
- int64u mask = 0ull;
- for (unsigned int i = 0; i < n; ++i) mask |= (1ull << i);
-
- // and add them to low qword
- this->lo |= (this->hi & mask) << (64 - n);
-
- // and finally shift also high qword
- this->hi >>= n;
- };
-
- return *this;
-};
-
-uint128 & uint128::operator <<= (unsigned int n) throw () {
- n &= 0x7F;
-
- if (n > 63) {
- n -= 64;
- this->hi = this->lo;
- this->lo = 0ull;
- };
-
- if (n) {
- // shift high qword
- this->hi <<= n;
-
- // get higher N bits of low qword
- int64u mask = 0ull;
- for (unsigned int i = 0; i < n; ++i) mask |= (1ull << (63 - i));
-
- // and add them to high qword
- this->hi |= (this->lo & mask) >> (64 - n);
-
- // and finally shift also low qword
- this->lo <<= n;
- };
-
- return *this;
-};
-
-bool uint128::operator ! () const throw () {
- return !(this->hi || this->lo);
-};
-
-uint128 & uint128::operator |= (const uint128 & b) throw () {
- this->hi |= b.hi;
- this->lo |= b.lo;
-
- return *this;
-};
-
-uint128 & uint128::operator &= (const uint128 & b) throw () {
- this->hi &= b.hi;
- this->lo &= b.lo;
-
- return *this;
-};
-
-uint128 & uint128::operator ^= (const uint128 & b) throw () {
- this->hi ^= b.hi;
- this->lo ^= b.lo;
-
- return *this;
-};
-
-bool operator < (const uint128 & a, const uint128 & b) throw () {
- return (a.hi == b.hi) ? (a.lo < b.lo) : (a.hi < b.hi);
-};
-
-bool operator == (const uint128 & a, const uint128 & b) throw () {
- return a.hi == b.hi && a.lo == b.lo;
-};
-bool operator && (const uint128 & a, const uint128 & b) throw () {
- return (a.hi || a.lo) && (b.hi || b.lo);
-};
-bool operator || (const uint128 & a, const uint128 & b) throw () {
- return (a.hi || a.lo) || (b.hi || b.lo);
-};
-
-} //NameSpace
diff --git a/src/thirdparty/ZenLib/ZenLib/int128u.h b/src/thirdparty/ZenLib/ZenLib/int128u.h
deleted file mode 100644
index e2a422df7..000000000
--- a/src/thirdparty/ZenLib/ZenLib/int128u.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
- *
- * Use of this source code is governed by a zlib-style license that can
- * be found in the License.txt file in the root of the source tree.
- */
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-//
-// based on http://Tringi.Mx-3.cz
-// Only adapted for ZenLib:
-// - .hpp --> .h
-// - Namespace
-// - int128u alias
-//
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-#ifndef UINT128_HPP
-#define UINT128_HPP
-
-/*
- Name: uint128.hpp
- Copyright: Copyright (C) 2005, Jan Ringos
- Author: Jan Ringos, http://Tringi.Mx-3.cz
-
- Version: 1.1
-*/
-
-
-#include <exception>
-#include <cstdlib>
-#include <cstdio>
-#include "ZenLib/Conf.h"
-
-// CLASS
-
-namespace ZenLib
-{
-
-class uint128 {
- public://private:
- // Binary correct representation of signed 128bit integer
- int64u lo;
- int64u hi;
-
- protected:
- // Some global operator functions must be friends
- friend bool operator < (const uint128 &, const uint128 &) throw ();
- friend bool operator == (const uint128 &, const uint128 &) throw ();
- friend bool operator || (const uint128 &, const uint128 &) throw ();
- friend bool operator && (const uint128 &, const uint128 &) throw ();
-
- public:
- // Constructors
- inline uint128 () throw () : lo(0), hi(0) {};
- inline uint128 (const uint128 & a) throw () : lo (a.lo), hi (a.hi) {};
-
- inline uint128 (const int & a) throw () : lo (a), hi (0ull) {};
- inline uint128 (const unsigned int & a) throw () : lo (a), hi (0ull) {};
- inline uint128 (const int64u & a) throw () : lo (a), hi (0ull) {};
-
- uint128 (const float a) throw ();
- uint128 (const double & a) throw ();
- uint128 (const long double & a) throw ();
-
- uint128 (const char * sz) throw ();
-
- // TODO: Consider creation of operator= to eliminate
- // the need of intermediate objects during assignments.
-
- private:
- // Special internal constructors
- uint128 (const int64u & a, const int64u & b) throw ()
- : lo (a), hi (b) {};
-
- public:
- // Operators
- bool operator ! () const throw ();
-
- uint128 operator - () const throw ();
- uint128 operator ~ () const throw ();
-
- uint128 & operator ++ ();
- uint128 & operator -- ();
- uint128 operator ++ (int);
- uint128 operator -- (int);
-
- uint128 & operator += (const uint128 & b) throw ();
- uint128 & operator *= (const uint128 & b) throw ();
-
- uint128 & operator >>= (unsigned int n) throw ();
- uint128 & operator <<= (unsigned int n) throw ();
-
- uint128 & operator |= (const uint128 & b) throw ();
- uint128 & operator &= (const uint128 & b) throw ();
- uint128 & operator ^= (const uint128 & b) throw ();
-
- // Inline simple operators
- inline const uint128 & operator + () const throw () { return *this; };
-
- // Rest of inline operators
- inline uint128 & operator -= (const uint128 & b) throw () {
- return *this += (-b);
- };
- inline uint128 & operator /= (const uint128 & b) throw () {
- uint128 dummy;
- *this = this->div (b, dummy);
- return *this;
- };
- inline uint128 & operator %= (const uint128 & b) throw () {
- this->div (b, *this);
- return *this;
- };
-
- // Common methods
- unsigned int toUint () const throw () {
- return (unsigned int) this->lo; };
- int64u toUint64 () const throw () {
- return (int64u) this->lo; };
- const char * toString (unsigned int radix = 10) const throw ();
- float toFloat () const throw ();
- double toDouble () const throw ();
- long double toLongDouble () const throw ();
-
- // Arithmetic methods
- uint128 div (const uint128 &, uint128 &) const throw ();
-
- // Bit operations
- bool bit (unsigned int n) const throw ();
- void bit (unsigned int n, bool val) throw ();
-}
-#ifdef __GNUC__
- __attribute__ ((__aligned__ (16), __packed__))
-#endif
-;
-
-
-// GLOBAL OPERATORS
-
-bool operator < (const uint128 & a, const uint128 & b) throw ();
-bool operator == (const uint128 & a, const uint128 & b) throw ();
-bool operator || (const uint128 & a, const uint128 & b) throw ();
-bool operator && (const uint128 & a, const uint128 & b) throw ();
-
-// GLOBAL OPERATOR INLINES
-
-inline uint128 operator + (const uint128 & a, const uint128 & b) throw () {
- return uint128 (a) += b; };
-inline uint128 operator - (const uint128 & a, const uint128 & b) throw () {
- return uint128 (a) -= b; };
-inline uint128 operator * (const uint128 & a, const uint128 & b) throw () {
- return uint128 (a) *= b; };
-inline uint128 operator / (const uint128 & a, const uint128 & b) throw () {
- return uint128 (a) /= b; };
-inline uint128 operator % (const uint128 & a, const uint128 & b) throw () {
- return uint128 (a) %= b; };
-
-inline uint128 operator >> (const uint128 & a, unsigned int n) throw () {
- return uint128 (a) >>= n; };
-inline uint128 operator << (const uint128 & a, unsigned int n) throw () {
- return uint128 (a) <<= n; };
-
-inline uint128 operator & (const uint128 & a, const uint128 & b) throw () {
- return uint128 (a) &= b; };
-inline uint128 operator | (const uint128 & a, const uint128 & b) throw () {
- return uint128 (a) |= b; };
-inline uint128 operator ^ (const uint128 & a, const uint128 & b) throw () {
- return uint128 (a) ^= b; };
-
-inline bool operator > (const uint128 & a, const uint128 & b) throw () {
- return b < a; };
-inline bool operator <= (const uint128 & a, const uint128 & b) throw () {
- return !(b < a); };
-inline bool operator >= (const uint128 & a, const uint128 & b) throw () {
- return !(a < b); };
-inline bool operator != (const uint128 & a, const uint128 & b) throw () {
- return !(a == b); };
-
-
-// MISC
-
-typedef uint128 __uint128;
-
-typedef uint128 int128u;
-} //NameSpace
-
-#endif
diff --git a/src/thirdparty/ZenLib/library b/src/thirdparty/ZenLib/library
new file mode 160000
+Subproject d5c99b62a5b9c868129b85907fa8b8143a07b59
diff --git a/src/thirdparty/bs2b/bs2b.vcxproj b/src/thirdparty/bs2b/bs2b.vcxproj
new file mode 100644
index 000000000..e110c0747
--- /dev/null
+++ b/src/thirdparty/bs2b/bs2b.vcxproj
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{0FD9BF8F-2397-4E23-B41E-E4624F35D646}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="libbs2b\src\bs2b.c" />
+ <ClCompile Include="libbs2b\src\bs2bclass.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="libbs2b\src\bs2b.h" />
+ <ClInclude Include="libbs2b\src\bs2bclass.h" />
+ <ClInclude Include="libbs2b\src\bs2btypes.h" />
+ <ClInclude Include="libbs2b\src\bs2bversion.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/bs2b/libbs2b b/src/thirdparty/bs2b/libbs2b
new file mode 160000
+Subproject 5ca2d59888df047f1e4b028e3a2fd5be8b5a727
diff --git a/src/thirdparty/lcms2/lcms2.vcxproj b/src/thirdparty/lcms2/lcms2.vcxproj
index 038f49dc3..a9324e799 100644
--- a/src/thirdparty/lcms2/lcms2.vcxproj
+++ b/src/thirdparty/lcms2/lcms2.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,76 +26,24 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>library\include;library\src</AdditionalIncludeDirectories>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <PrecompiledHeaderFile>lcms2_internal.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>library\include;library\src</AdditionalIncludeDirectories>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <PrecompiledHeaderFile>lcms2_internal.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalIncludeDirectories>library\include;library\src</AdditionalIncludeDirectories>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <PrecompiledHeaderFile>lcms2_internal.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>library\include;library\src</AdditionalIncludeDirectories>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
<PrecompiledHeaderFile>lcms2_internal.h</PrecompiledHeaderFile>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
@@ -104,6 +52,7 @@
<ClInclude Include="library\src\lcms2_internal.h" />
</ItemGroup>
<ItemGroup>
+ <ClCompile Include="library\src\cmsalpha.c" />
<ClCompile Include="library\src\cmscam02.c" />
<ClCompile Include="library\src\cmscgats.c" />
<ClCompile Include="library\src\cmscnvrt.c" />
diff --git a/src/thirdparty/lcms2/lcms2.vcxproj.filters b/src/thirdparty/lcms2/lcms2.vcxproj.filters
index 0819123c8..781d672b6 100644
--- a/src/thirdparty/lcms2/lcms2.vcxproj.filters
+++ b/src/thirdparty/lcms2/lcms2.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
@@ -22,6 +22,9 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
+ <ClCompile Include="library\src\cmsalpha.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="library\src\cmscam02.c">
<Filter>Source Files</Filter>
</ClCompile>
diff --git a/src/thirdparty/lcms2/library b/src/thirdparty/lcms2/library
-Subproject 9c075b3e916e4478a98bebd92bcd219c51ef57f
+Subproject d41071eb8cfea7aa10a9262c12bd95d5d9d81c8
diff --git a/src/thirdparty/mhook/disasm-lib/cpu.c b/src/thirdparty/mhook/disasm-lib/cpu.c
deleted file mode 100644
index 2a12692ac..000000000
--- a/src/thirdparty/mhook/disasm-lib/cpu.c
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (C) 2003, Matt Conover (mconover@gmail.com)
-#include "cpu.h"
-#include <assert.h>
-
-// NOTE: this assumes default scenarios (i.e., we assume CS/DS/ES/SS and flat
-// and all have a base of 0 and limit of 0xffffffff, we don't try to verify
-// that in the GDT)
-//
-// TODO: use inline assembly to get selector for segment
-// Segment = x86 segment register (SEG_ES = 0, SEG_CS = 1, ...)
-BYTE *GetAbsoluteAddressFromSegment(BYTE Segment, DWORD Offset)
-{
- switch (Segment)
- {
- // Windows uses a flat address space (except FS for x86 and GS for x64)
- case 0: // SEG_ES
- case 1: // SEG_CS
- case 2: // SEG_SS
- case 3: // SEG_DS
- return (BYTE *)(DWORD_PTR)Offset;
- case 4: // SEG_FS
- case 5: // SEG_GS
- return (BYTE *)(DWORD_PTR)Offset;
- // Note: we're really supposed to do this, but get_teb is not implemented
- // in this bastardized version of the disassembler.
- // return (BYTE *)get_teb() + Offset;
- default:
- assert(0);
- return (BYTE *)(DWORD_PTR)Offset;
- }
-}
-
-// This is an GDT/LDT selector (pGDT+Selector)
-BYTE *GetAbsoluteAddressFromSelector(WORD Selector, DWORD Offset)
-{
- DESCRIPTOR_ENTRY Entry;
- GATE_ENTRY *Gate;
- ULONG_PTR Base;
-
- assert(Selector < 0x10000);
- if (!GetThreadSelectorEntry(GetCurrentThread(), Selector, (LDT_ENTRY *)&Entry)) return NULL;
- if (!Entry.Present) return NULL;
- if (Entry.System)
- {
- Base = 0;
-#ifdef _WIN64
- Base |= (ULONG_PTR)Entry.HighOffset64 << 32;
-#endif
- Base |= Entry.BaseHi << 24;
- Base |= Entry.BaseMid << 16;
- Base |= Entry.BaseLow;
- }
- else
- {
- switch (Entry.Type)
- {
- case 1: // 16-bit TSS (available)
- case 2: // LDT
- case 3: // 16-bit TSS (busy)
- case 9: // 32-bit TSS (available)
- case 11: // 32-bit TSS (busy)
- Base = 0;
-#ifdef _WIN64
- Base |= (ULONG_PTR)Entry.HighOffset64 << 32;
-#endif
- Base |= Entry.BaseHi << 24;
- Base |= Entry.BaseMid << 16;
- Base |= Entry.BaseLow;
- break;
-
- case 4: // 16-bit call gate
- case 5: // task gate
- case 6: // 16-bit interrupt gate
- case 7: // 16-bit task gate
- case 12: // 32-bit call gate
- case 14: // 32-bit interrupt gate
- case 15: // 32-bit trap gate
- Gate = (GATE_ENTRY *)&Entry;
-#ifdef _WIN64
- Base = ((ULONG_PTR)Gate->HighOffset64 << 32) | (Gate->HighOffset << 16) | Gate->LowOffset;
-#else
- Base = (Gate->HighOffset << 16) | Gate->LowOffset;
-#endif
- assert(!Offset); Offset = 0;
- break;
- default:
- assert(0);
- return NULL;
- }
- }
- return (BYTE *)Base + Offset;
-}
-
diff --git a/src/thirdparty/mhook/disasm-lib/cpu.h b/src/thirdparty/mhook/disasm-lib/cpu.h
deleted file mode 100644
index cec695f4d..000000000
--- a/src/thirdparty/mhook/disasm-lib/cpu.h
+++ /dev/null
@@ -1,277 +0,0 @@
-// Copyright (C) 2003, Matt Conover (mconover@gmail.com)
-#ifndef CPU_H
-#define CPU_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-#pragma pack(push,1)
-
-#include <windows.h>
-#include "misc.h"
-
-////////////////////////////////////////////////////////
-// System descriptors
-////////////////////////////////////////////////////////
-
-#define GDT_NULL 0
-#define GDT_R0_CODE 0x08
-#define GDT_R0_DATA 0x10
-#define GDT_R3_CODE 0x18
-#define GDT_R3_DATA 0x20
-#define GDT_TSS 0x28
-#define GDT_PCR 0x30
-#define GDT_R3_TEB 0x38
-#define GDT_VDM 0x40
-#define GDT_LDT 0x48
-#define GDT_DOUBLEFAULT_TSS 0x50
-#define GDT_NMI_TSS 0x58
-
-// 16-bit GDT entries:
-// TODO: #define GDT_ABIOS_UNKNOWN 0x60 (22F30-32F2F)
-#define GDT_ABIOS_VIDEO 0x68
-#define GDT_ABIOS_GDT 0x70 // descriptor describing ABIOS GDT itself
-#define GDT_ABIOS_NTOS 0x78 // first 64K of NTOSKRNL
-#define GDT_ABIOS_CDA 0xE8 // common data area
-#define GDT_ABIOS_CODE 0xF0 // KiI386AbiosCall
-#define GDT_ABIOS_STACK 0xF8
-
-#define SELECTOR_RPL_MASK 0x03 // bits 0-1
-#define SELECTOR_LDT 0x04 // bit 2
-
-// for data selectors
-#define DATA_ACCESS_MASK (1<<0)
-#define DATA_WRITE_ENABLE_MASK (1<<1)
-#define DATA_EXPAND_DOWN_MASK (1<<2)
-
-// for code selectors
-#define CODE_ACCESS_MASK (1<<0)
-#define CODE_READ_MASK (1<<1)
-#define CODE_CONFORMING_MASK (1<<2)
-#define CODE_FLAG (1<<3)
-
-#define TASK_GATE 5
-#define INTERRUPT_GATE 6
-#define TRAP_GATE 7
-
-typedef struct _IDT_ENTRY
-{
- USHORT LowOffset;
- USHORT Selector;
- UCHAR Ignored : 5;
- UCHAR Zero : 3;
- UCHAR Type : 3;
- UCHAR Is32Bit : 1;
- UCHAR Ignored2 : 1;
- UCHAR DPL : 2;
- UCHAR Present : 1;
- USHORT HighOffset;
-#ifdef _WIN64
- ULONG HighOffset64;
- ULONG Reserved;
-#endif
-} IDT_ENTRY, TRAP_GATE_ENTRY;
-
-typedef struct _CALL_GATE_ENTRY
-{
- USHORT LowOffset;
- USHORT Selector;
- UCHAR ParameterCount: 4;
- UCHAR Ignored : 3;
- UCHAR Type : 5;
- UCHAR DPL : 2;
- UCHAR Present : 1;
- USHORT HighOffset;
-#ifdef _WIN64
- ULONG HighOffset64;
- ULONG Reserved;
-#endif
-} CALL_GATE_ENTRY;
-
-typedef struct _TASK_GATE_ENTRY
-{
- USHORT Ignored;
- USHORT Selector;
- UCHAR Ignored2 : 5;
- UCHAR Zero : 3;
- UCHAR Type : 5;
- UCHAR DPL : 2;
- UCHAR Present : 1;
- USHORT Ignored3;
-} TASK_GATE_ENTRY;
-
-typedef struct _DESCRIPTOR_ENTRY
-{
- USHORT LimitLow;
- USHORT BaseLow;
- UCHAR BaseMid;
- UCHAR Type : 4; // 10EWA (code), E=ExpandDown, W=Writable, A=Accessed
- // 11CRA (data), C=Conforming, R=Readable, A=Accessed
- UCHAR System : 1; // if 1 then it is a gate or LDT
- UCHAR DPL : 2; // descriptor privilege level;
- // for data selectors, MAX(CPL, RPL) must be <= DPL to access (or else GP# fault)
- // for non-conforming code selectors (without callgate), MAX(CPL, RPL) must be <= DPL to access (or else GP# fault)
- // for conforming code selectors, MAX(CPL, RPL) must be >= DPL (i.e., CPL 0-2 cannot access if DPL is 3)
- // for non-conforming code selectors (with call gate), DPL indicates lowest privilege allowed to access gate
- UCHAR Present : 1;
- UCHAR LimitHigh : 4;
- UCHAR Available: 1; // aka AVL
- UCHAR Reserved : 1;
- UCHAR Is32Bit : 1; // aka B flag
- UCHAR Granularity : 1; // aka G flag
- UCHAR BaseHi : 8;
-#ifdef _WIN64
- ULONG HighOffset64;
- ULONG Reserved2;
-#endif
-} DESCRIPTOR_ENTRY;
-
-typedef struct _GATE_ENTRY
-{
- USHORT LowOffset;
- UCHAR Skip;
- UCHAR Type : 5;
- UCHAR DPL : 2;
- UCHAR Present : 1;
- USHORT HighOffset;
-#ifdef _WIN64
- ULONG HighOffset64;
- ULONG Reserved;
-#endif
-} GATE_ENTRY;
-
-// TODO: update for X64
-typedef struct _PTE_ENTRY
-{
- ULONG Present : 1;
- ULONG Write : 1;
- ULONG Owner : 1; // E.g., user mode or supervisor mode
- ULONG WriteThrough : 1;
- ULONG CacheDisable : 1;
- ULONG Accessed : 1;
- ULONG Dirty : 1;
- ULONG PAT : 1;
- ULONG Global : 1;
- ULONG CopyOnWrite : 1;
- ULONG Prototype : 1;
- ULONG Transition : 1;
- ULONG Address : 20;
-} PTE_ENTRY;
-
-// TODO: update for X64
-typedef struct _PDE_ENTRY
-{
- ULONG Present : 1;
- ULONG Write : 1;
- ULONG Owner : 1;
- ULONG WriteThrough : 1;
- ULONG CacheDisable : 1;
- ULONG Accessed : 1;
- ULONG Reserved1 : 1;
- ULONG PageSize : 1;
- ULONG Global : 1;
- ULONG Reserved : 3;
- ULONG Address : 20;
-} PDE_ENTRY;
-
-// TODO: update for X64
-typedef struct _IO_ACCESS_MAP
-{
- UCHAR DirectionMap[32];
- UCHAR IoMap[8196];
-} IO_ACCESS_MAP;
-
-#define MIN_TSS_SIZE FIELD_OFFSET(TSS_ENTRY, IoMaps)
-// TODO: update for X64
-typedef struct _TSS_ENTRY
-{
- USHORT Backlink;
- USHORT Reserved0;
- ULONG Esp0;
- USHORT Ss0;
- USHORT Reserved1;
- ULONG NotUsed1[4];
- ULONG CR3;
- ULONG Eip;
- ULONG NotUsed2[9];
- USHORT Es;
- USHORT Reserved2;
- USHORT Cs;
- USHORT Reserved3;
- USHORT Ss;
- USHORT Reserved4;
- USHORT Ds;
- USHORT Reserved5;
- USHORT Fs;
- USHORT Reserved6;
- USHORT Gs;
- USHORT Reserved7;
- USHORT LDT;
- USHORT Reserved8;
- USHORT Flags;
- USHORT IoMapBase;
- IO_ACCESS_MAP IoMaps[1];
- UCHAR IntDirectionMap[32];
-} TSS_ENTRY;
-
-// TODO: update for X64
-typedef struct _TSS16_ENTRY
-{
- USHORT Backlink;
- USHORT Sp0;
- USHORT Ss0;
- USHORT Sp1;
- USHORT Ss1;
- USHORT Sp2;
- USHORT Ss3;
- USHORT Ip;
- USHORT Flags;
- USHORT Ax;
- USHORT Cx;
- USHORT Dx;
- USHORT Bx;
- USHORT Sp;
- USHORT Bp;
- USHORT Si;
- USHORT Di;
- USHORT Es;
- USHORT Cs;
- USHORT Ss;
- USHORT Ds;
- USHORT LDT;
-} TSS16_ENTRY;
-
-// TODO: update for X64
-typedef struct _GDT_ENTRY
-{
- USHORT LimitLow;
- USHORT BaseLow;
- union {
- struct {
- UCHAR BaseMid;
- UCHAR Flags1;
- UCHAR Flags2;
- UCHAR BaseHi;
- } Bytes;
- struct {
- ULONG BaseMid : 8;
- ULONG Type : 5;
- ULONG Dpl : 2;
- ULONG Pres : 1;
- ULONG LimitHi : 4;
- ULONG Sys : 1;
- ULONG Reserved_0 : 1;
- ULONG Default_Big : 1;
- ULONG Granularity : 1;
- ULONG BaseHi : 8;
- } Bits;
- } HighWord;
-} GDT_ENTRY;
-
-BYTE *GetAbsoluteAddressFromSegment(BYTE Segment, DWORD Offset);
-BYTE *GetAbsoluteAddressFromSelector(WORD Selector, DWORD Offset);
-
-#pragma pack(pop)
-#ifdef __cplusplus
-}
-#endif
-#endif // CPU_H \ No newline at end of file
diff --git a/src/thirdparty/mhook/disasm-lib/disasm.c b/src/thirdparty/mhook/disasm-lib/disasm.c
deleted file mode 100644
index 7e72baaac..000000000
--- a/src/thirdparty/mhook/disasm-lib/disasm.c
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (C) 2004, Matt Conover (mconover@gmail.com)
-#undef NDEBUG
-#include <assert.h>
-#include <windows.h>
-#include "disasm.h"
-
-#ifdef NO_SANITY_CHECKS
-#define NDEBUG
-#undef assert
-#define assert(x)
-#endif
-
-//////////////////////////////////////////////////////////////////////
-// Global variables
-//////////////////////////////////////////////////////////////////////
-
-ARCHITECTURE_FORMAT SupportedArchitectures[] =
-{
- { ARCH_X86, &X86 },
- { ARCH_X86_16, &X86 },
- { ARCH_X64, &X86 },
- { ARCH_UNKNOWN, NULL }
-};
-
-typedef struct _DISASM_ARG_INFO
-{
- INSTRUCTION *MatchedInstruction;
- BOOL MatchPrefix;
- U8 *Opcode;
- U32 OpcodeLength;
- INSTRUCTION_TYPE InstructionType;
- U32 Count;
-} DISASM_ARG_INFO;
-
-//////////////////////////////////////////////////////////////////////
-// Function prototypes
-//////////////////////////////////////////////////////////////////////
-
-BOOL InitInstruction(INSTRUCTION *Instruction, DISASSEMBLER *Disassembler);
-struct _ARCHITECTURE_FORMAT *GetArchitectureFormat(ARCHITECTURE_TYPE Type);
-
-//////////////////////////////////////////////////////////////////////
-// Disassembler setup
-//////////////////////////////////////////////////////////////////////
-
-BOOL InitDisassembler(DISASSEMBLER *Disassembler, ARCHITECTURE_TYPE Architecture)
-{
- ARCHITECTURE_FORMAT *ArchFormat;
-
- memset(Disassembler, 0, sizeof(DISASSEMBLER));
- Disassembler->Initialized = DISASSEMBLER_INITIALIZED;
-
- ArchFormat = GetArchitectureFormat(Architecture);
- if (!ArchFormat) { assert(0); return FALSE; }
- Disassembler->ArchType = ArchFormat->Type;
- Disassembler->Functions = ArchFormat->Functions;
- return TRUE;
-}
-
-void CloseDisassembler(DISASSEMBLER *Disassembler)
-{
- memset(Disassembler, 0, sizeof(DISASSEMBLER));
-}
-
-//////////////////////////////////////////////////////////////////////
-// Instruction setup
-//////////////////////////////////////////////////////////////////////
-
-BOOL InitInstruction(INSTRUCTION *Instruction, DISASSEMBLER *Disassembler)
-{
- memset(Instruction, 0, sizeof(INSTRUCTION));
- Instruction->Initialized = INSTRUCTION_INITIALIZED;
- Instruction->Disassembler = Disassembler;
- memset(Instruction->String, ' ', MAX_OPCODE_DESCRIPTION-1);
- Instruction->String[MAX_OPCODE_DESCRIPTION-1] = '\0';
- return TRUE;
-}
-
-// If Decode = FALSE, only the following fields are valid:
-// Instruction->Length, Instruction->Address, Instruction->Prefixes, Instruction->PrefixCount,
-// Instruction->OpcodeBytes, Instruction->Instruction->OpcodeLength, Instruction->Groups,
-// Instruction->Type, Instruction->OperandCount
-//
-// If Disassemble = TRUE, then Instruction->String is valid (also requires Decode = TRUE)
-//
-// WARNING: This will overwrite the previously obtained instruction
-INSTRUCTION *GetInstruction(DISASSEMBLER *Disassembler, U64 VirtualAddress, U8 *Address, U32 Flags)
-{
- if (Disassembler->Initialized != DISASSEMBLER_INITIALIZED) { assert(0); return NULL; }
- assert(Address);
- InitInstruction(&Disassembler->Instruction, Disassembler);
- Disassembler->Instruction.Address = Address;
- Disassembler->Instruction.VirtualAddressDelta = VirtualAddress - (U64)Address;
- if (!Disassembler->Functions->GetInstruction(&Disassembler->Instruction, Address, Flags))
- {
- assert(Disassembler->Instruction.Address == Address);
- assert(Disassembler->Instruction.Length < MAX_INSTRUCTION_LENGTH);
-
- // Save the address that failed, in case the lower-level disassembler didn't
- Disassembler->Instruction.Address = Address;
- Disassembler->Instruction.ErrorOccurred = TRUE;
- return NULL;
- }
- return &Disassembler->Instruction;
-}
-
-///////////////////////////////////////////////////////////////////////////
-// Miscellaneous
-///////////////////////////////////////////////////////////////////////////
-
-static ARCHITECTURE_FORMAT *GetArchitectureFormat(ARCHITECTURE_TYPE Type)
-{
- ARCHITECTURE_FORMAT *Format;
- for (Format = SupportedArchitectures; Format->Type != ARCH_UNKNOWN; Format++)
- {
- if (Format->Type == Type) return Format;
- }
-
- assert(0);
- return NULL;
-}
-
diff --git a/src/thirdparty/mhook/disasm-lib/disasm.h b/src/thirdparty/mhook/disasm-lib/disasm.h
deleted file mode 100644
index 6e35ab72c..000000000
--- a/src/thirdparty/mhook/disasm-lib/disasm.h
+++ /dev/null
@@ -1,578 +0,0 @@
-// Copyright (C) 2004, Matt Conover (mconover@gmail.com)
-//
-// WARNING:
-// I wouldn't recommend changing any flags like OP_*, ITYPE_*, or *_MASK
-// aside from those marked as UNUSED. This is because the flags parts of
-// the flags are architecture independent and other are left to specific
-// architectures to define, so unless you understand the relationships
-// between them, I would leave them as is.
-
-#ifndef DISASM_H
-#define DISASM_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include <windows.h>
-#include <stdio.h>
-#include "misc.h"
-
-typedef signed char S8;
-typedef unsigned char U8;
-typedef signed short S16;
-typedef unsigned short U16;
-typedef signed long S32;
-typedef unsigned long U32;
-typedef LONG64 S64;
-typedef ULONG64 U64;
-
-#ifdef SPEEDY
-// On Visual Studio 6, making the internal functions inline makes compiling take forever
-#define INTERNAL static _inline
-#define INLINE _inline
-#else
-#define INTERNAL static
-#define INLINE
-#endif
-
-#define VALID_INSTRUCTION(i) ((i) && !((i)->ErrorOccurred))
-#define NEXT_INSTRUCTION(i) ((i)->Address + (i)->Length)
-#define DISASM_ARCH_TYPE(dis) ((dis)->ArchType)
-#define INS_ARCH_TYPE(ins) DISASM_ARCH_TYPE((ins)->Disassembler)
-
-// NOTE: these should be as big set to the maximum of the supported architectures
-#define MAX_PREFIX_LENGTH 15
-#define MAX_OPERAND_COUNT 3
-#define MAX_INSTRUCTION_LENGTH 25
-#define MAX_OPCODE_LENGTH 3
-#define MAX_OPCODE_DESCRIPTION 256
-
-/////////////////////////////////////////////////////////////////////
-// Code branch
-/////////////////////////////////////////////////////////////////////
-
-#define MAX_CODE_REFERENCE_COUNT 3
-
-typedef struct _CODE_BRANCH
-{
- U64 Addresses[MAX_CODE_REFERENCE_COUNT]; // NULL if multiple to addresses
- U32 Count;
- U8 IsLoop : 1;
- U8 IsCall : 1; // branch if false
- U8 IsIndirect : 1; // call/jmp [Address]
- U8 AddressOffset: 5;
- struct _INSTRUCTION_OPERAND *Operand; // the operand containg the address
-} CODE_BRANCH;
-
-/////////////////////////////////////////////////////////////////////
-// Data references
-/////////////////////////////////////////////////////////////////////
-
-#define MAX_DATA_REFERENCE_COUNT 3
-
-typedef struct _DATA_REFERENCE
-{
- U64 Addresses[MAX_DATA_REFERENCE_COUNT]; // NULL if multiple to addresses
- U32 Count;
- ULONG_PTR DataSize;
- struct _INSTRUCTION_OPERAND *Operand; // the operand containg the address
-} DATA_REFERENCE;
-
-////////////////////////////////////////////////////////////////////
-// Instruction
-/////////////////////////////////////////////////////////////////////
-
-//
-// Instruction types (bits 0-7)
-// Instruction groups (bits 8-26)
-//
-#define ITYPE_EXEC_OFFSET (1<<8)
-#define ITYPE_ARITH_OFFSET (1<<9)
-#define ITYPE_LOGIC_OFFSET (1<<10)
-#define ITYPE_STACK_OFFSET (1<<11)
-#define ITYPE_TESTCOND_OFFSET (1<<12)
-#define ITYPE_LOAD_OFFSET (1<<13)
-#define ITYPE_ARRAY_OFFSET (1<<14)
-#define ITYPE_BIT_OFFSET (1<<15)
-#define ITYPE_FLAG_OFFSET (1<<16)
-#define ITYPE_FPU_OFFSET (1<<17)
-#define ITYPE_TRAPS_OFFSET (1<<18)
-#define ITYPE_SYSTEM_OFFSET (1<<19)
-#define ITYPE_OTHER_OFFSET (1<<20)
-#define ITYPE_UNUSED1_OFFSET (1<<21)
-#define ITYPE_UNUSED2_OFFSET (1<<22)
-#define ITYPE_UNUSED3_OFFSET (1<<23)
-#define ITYPE_UNUSED4_OFFSET (1<<24)
-#define ITYPE_UNUSED5_OFFSET (1<<25)
-#define ITYPE_UNUSED6_OFFSET (1<<26)
-#define ITYPE_EXT_UNUSED1 (1<<27)
-#define ITYPE_EXT_UNUSED2 (1<<28)
-#define ITYPE_EXT_UNUSED3 (1<<29)
-#define ITYPE_EXT_UNUSED4 (1<<30)
-#define ITYPE_EXT_UNUSED5 (1<<31)
-
-//
-// X86-specific flags (bits 27-31)
-//
-
-#define ITYPE_EXT_64 ITYPE_EXT_UNUSED1 // Use index 1 if in 64-bit mode and 0 otherwise
-#define ITYPE_EXT_MODRM ITYPE_EXT_UNUSED2 // ModRM byte may extend the opcode
-#define ITYPE_EXT_SUFFIX ITYPE_EXT_UNUSED3 // byte after ModRM/SIB/displacement is the third opcode
-#define ITYPE_EXT_PREFIX ITYPE_EXT_UNUSED4 // prefix
-#define ITYPE_EXT_FPU ITYPE_EXT_UNUSED5 // FPU instructions require special handling
-
-#define ITYPE_3DNOW_OFFSET ITYPE_UNUSED1_OFFSET
-#define ITYPE_MMX_OFFSET ITYPE_UNUSED2_OFFSET
-#define ITYPE_SSE_OFFSET ITYPE_UNUSED3_OFFSET
-#define ITYPE_SSE2_OFFSET ITYPE_UNUSED4_OFFSET
-#define ITYPE_SSE3_OFFSET ITYPE_UNUSED5_OFFSET
-
-//
-// Instruction types
-//
-
-#define ITYPE_TYPE_MASK 0x7FFFFFFF
-#define ITYPE_GROUP_MASK 0x7FFFFF00
-
-typedef enum _INSTRUCTION_TYPE
-{
- // ITYPE_EXEC group
- ITYPE_EXEC = ITYPE_EXEC_OFFSET,
- ITYPE_BRANCH,
- ITYPE_BRANCHCC, // conditional (not necessarily just flags)
- ITYPE_CALL,
- ITYPE_CALLCC, // conditional (not necessarily just flags)
- ITYPE_RET,
- ITYPE_LOOPCC,
-
- // ITYPE_ARITH group
- ITYPE_ARITH = ITYPE_ARITH_OFFSET,
- ITYPE_XCHGADD,
- ITYPE_ADD,
- ITYPE_SUB,
- ITYPE_MUL,
- ITYPE_DIV,
- ITYPE_INC,
- ITYPE_DEC,
- ITYPE_SHL,
- ITYPE_SHR,
- ITYPE_ROL,
- ITYPE_ROR,
-
- // ITYPE_LOGIC group
- ITYPE_LOGIC=ITYPE_LOGIC_OFFSET,
- ITYPE_AND,
- ITYPE_OR,
- ITYPE_XOR,
- ITYPE_NOT,
- ITYPE_NEG,
-
- // ITYPE_STACK group
- ITYPE_STACK=ITYPE_STACK_OFFSET,
- ITYPE_PUSH,
- ITYPE_POP,
- ITYPE_PUSHA,
- ITYPE_POPA,
- ITYPE_PUSHF,
- ITYPE_POPF,
- ITYPE_ENTER,
- ITYPE_LEAVE,
-
- // ITYPE_TESTCOND group
- ITYPE_TESTCOND=ITYPE_TESTCOND_OFFSET,
- ITYPE_TEST,
- ITYPE_CMP,
-
- // ITYPE_LOAD group
- ITYPE_LOAD=ITYPE_LOAD_OFFSET,
- ITYPE_MOV,
- ITYPE_MOVCC, // conditional
- ITYPE_LEA,
- ITYPE_XCHG,
- ITYPE_XCHGCC, // conditional
-
- // ITYPE_ARRAY group
- ITYPE_ARRAY=ITYPE_ARRAY_OFFSET,
- ITYPE_STRCMP,
- ITYPE_STRLOAD,
- ITYPE_STRMOV,
- ITYPE_STRSTOR,
- ITYPE_XLAT,
-
- // ITYPE_BIT group
- ITYPE_BIT=ITYPE_BIT_OFFSET,
- ITYPE_BITTEST,
- ITYPE_BITSET,
- ITYPE_BITCLR,
-
- // ITYPE_FLAG group
- // PF = parify flag
- // ZF = zero flag
- // OF = overflow flag
- // DF = direction flag
- // SF = sign flag
- ITYPE_FLAG=ITYPE_FLAG_OFFSET,
- // clear
- ITYPE_CLEARCF,
- ITYPE_CLEARZF,
- ITYPE_CLEAROF,
- ITYPE_CLEARDF,
- ITYPE_CLEARSF,
- ITYPE_CLEARPF,
- // set
- ITYPE_SETCF,
- ITYPE_SETZF,
- ITYPE_SETOF,
- ITYPE_SETDF,
- ITYPE_SETSF,
- ITYPE_SETPF,
- // toggle
- ITYPE_TOGCF,
- ITYPE_TOGZF,
- ITYPE_TOGOF,
- ITYPE_TOGDF,
- ITYPE_TOGSF,
- ITYPE_TOGPF,
-
- // ITYPE_FPU group
- ITYPE_FPU=ITYPE_FPU_OFFSET,
- ITYPE_FADD,
- ITYPE_FSUB,
- ITYPE_FMUL,
- ITYPE_FDIV,
- ITYPE_FCOMP,
- ITYPE_FEXCH,
- ITYPE_FLOAD,
- ITYPE_FLOADENV,
- ITYPE_FSTORE,
- ITYPE_FSTOREENV,
- ITYPE_FSAVE,
- ITYPE_FRESTORE,
- ITYPE_FMOVCC,
-
- ITYPE_UNUSED1=ITYPE_UNUSED1_OFFSET,
- ITYPE_UNUSED2=ITYPE_UNUSED2_OFFSET,
- ITYPE_UNUSED3=ITYPE_UNUSED3_OFFSET,
-
- // ITYPE_MMX group
- ITYPE_MMX=ITYPE_MMX_OFFSET,
- ITYPE_MMX_MOV,
- ITYPE_MMX_ADD,
- ITYPE_MMX_SUB,
- ITYPE_MMX_MUL,
- ITYPE_MMX_DIV,
- ITYPE_MMX_AND,
- ITYPE_MMX_OR,
- ITYPE_MMX_XOR,
- ITYPE_MMX_CMP,
-
- // ITYPE_SSE group
- ITYPE_SSE=ITYPE_SSE_OFFSET,
- ITYPE_SSE_MOV,
- ITYPE_SSE_ADD,
- ITYPE_SSE_SUB,
- ITYPE_SSE_MUL,
- ITYPE_SSE_DIV,
- ITYPE_SSE_AND,
- ITYPE_SSE_OR,
- ITYPE_SSE_XOR,
- ITYPE_SSE_CMP,
-
- // ITYPE_SSE2 group
- ITYPE_SSE2=ITYPE_SSE2_OFFSET,
- ITYPE_SSE2_MOV,
- ITYPE_SSE2_ADD,
- ITYPE_SSE2_SUB,
- ITYPE_SSE2_MUL,
- ITYPE_SSE2_DIV,
- ITYPE_SSE2_AND,
- ITYPE_SSE2_OR,
- ITYPE_SSE2_XOR,
- ITYPE_SSE2_CMP,
-
- // ITYPE_SSE3 group
- ITYPE_SSE3=ITYPE_SSE3_OFFSET,
- ITYPE_SSE3_MOV,
- ITYPE_SSE3_ADD,
- ITYPE_SSE3_SUB,
- ITYPE_SSE3_MUL,
- ITYPE_SSE3_DIV,
- ITYPE_SSE3_AND,
- ITYPE_SSE3_OR,
- ITYPE_SSE3_XOR,
- ITYPE_SSE3_CMP,
-
- // ITYPE_3DNOW group
- ITYPE_3DNOW=ITYPE_3DNOW_OFFSET,
- ITYPE_3DNOW_ADD,
- ITYPE_3DNOW_SUB,
- ITYPE_3DNOW_MUL,
- ITYPE_3DNOW_DIV,
- ITYPE_3DNOW_CMP,
- ITYPE_3DNOW_XCHG,
-
- // ITYPE_TRAP
- ITYPE_TRAPS=ITYPE_TRAPS_OFFSET,
- ITYPE_TRAP, // generate trap
- ITYPE_TRAPCC, // conditional trap gen
- ITYPE_TRAPRET, // return from trap
- ITYPE_BOUNDS, // gen bounds trap
- ITYPE_DEBUG, // gen breakpoint trap
- ITYPE_TRACE, // gen single step trap
- ITYPE_INVALID, // gen invalid instruction
- ITYPE_OFLOW, // gen overflow trap
-
- // ITYPE_SYSTEM group
- ITYPE_SYSTEM=ITYPE_SYSTEM_OFFSET,
- ITYPE_HALT, // halt machine
- ITYPE_IN, // input form port
- ITYPE_OUT, // output to port
- ITYPE_CPUID, // identify cpu
- ITYPE_SETIF, // allow interrupts
- ITYPE_CLEARIF, // block interrupts
- ITYPE_SYSCALL,
- ITYPE_SYSCALLRET,
-
- // ITYPE_OTHER group
- ITYPE_OTHER = ITYPE_OTHER_OFFSET,
- ITYPE_NOP,
- ITYPE_BCDCONV, // convert to/from BCD
- ITYPE_SZCONV // convert size of operand
-} INSTRUCTION_TYPE;
-
-//
-// Operand flags
-//
-
-// Type = bits 0-6 (these are mutually exclusive -- bits 0-6 will always be a power of 2))
-#define OPTYPE_NONE 0x00
-#define OPTYPE_IMM 0x01 // immediate value
-#define OPTYPE_OFFSET 0x02 // relative offset
-#define OPTYPE_FLOAT 0x03 // floating point
-#define OPTYPE_BCD 0x04
-#define OPTYPE_STRING 0x05
-#define OPTYPE_SPECIAL 0x06
-#define OPTYPE_MASK 0x7F
-
-// Flags = bits 7-23 (these can be combinations)
-// These are used in the X86 opcode table
-#define OP_REG (1<<7) // 0x80
-#define OP_SIGNED (1<<8)
-#define OP_SYS (1<<9) // parameter is an index into some system structure
-#define OP_CONDR (1<<10)
-#define OP_CONDW (1<<11)
-#define OP_UNUSED (1<<12)
-#define OP_SRC (1<<13) // operand is source operand
-#define OP_DST (1<<14) // operand is destination operand
-#define OP_EXEC (1<<15) // operand is executed
-
-#define OP_CONDE OP_CONDR
-#define OP_COND_EXEC (OP_CONDE|OP_EXEC) // executed only if the pre-conditions are met
-#define OP_COND_SRC (OP_CONDR|OP_SRC) // set only if pre-conditions are met
-#define OP_COND_DST (OP_CONDW|OP_DST) // set only if pre-conditions are met
-#define OP_COND (OP_CONDR|OP_CONDW)
-
-// Bits 16-31 are available for use outside of the opcode table, but they can only
-// be used in INSTRUCTION_OPERAND.Flags, they may conflit with the architecture specific
-// operands. For example, bits 16-31 are used in X86 for AMODE_* and OPTYPE_*
-#define OP_ADDRESS (1<<16)
-#define OP_LOCAL (1<<17)
-#define OP_PARAM (1<<18)
-#define OP_GLOBAL (1<<19)
-#define OP_FAR (1<<20)
-#define OP_IPREL (1<<21)
-
-//
-// X86-specific flags (bits 27-31)
-//
-#define OP_MSR (OP_SYS|OP_UNUSED)
-
-//
-// Other architecture flags
-//
-#define OP_DELAY OP_UNUSED // delayed instruction (e.g., delayed branch that executes after the next instruction)
-
-/////////////////////////////////////////////////////////////////////
-// Architectures
-/////////////////////////////////////////////////////////////////////
-
-typedef enum _ARCHITECTURE_TYPE
-{
- ARCH_UNKNOWN=0,
-
- // x86-based
- ARCH_X86, // 32-bit x86
- ARCH_X86_16, // 16-bit x86
- ARCH_X64, // AMD64 and Intel EMD64
-
- // everything else
- ARCH_ALPHA,
- ARCH_ARM,
- ARCH_DOTNET,
- ARCH_EFI,
- ARCH_IA64,
- ARCH_M68K,
- ARCH_MIPS,
- ARCH_PPC,
- ARCH_SH3,
- ARCH_SH4,
- ARCH_SPARC,
- ARCH_THUMB
-
-} ARCHITECTURE_TYPE;
-
-typedef BOOL (*INIT_INSTRUCTION)(struct _INSTRUCTION *Instruction);
-typedef void (*DUMP_INSTRUCTION)(struct _INSTRUCTION *Instruction, BOOL ShowBytes, BOOL Verbose);
-typedef BOOL (*GET_INSTRUCTION)(struct _INSTRUCTION *Instruction, U8 *Address, U32 Flags);
-typedef U8 *(*FIND_FUNCTION_BY_PROLOGUE)(struct _INSTRUCTION *Instruction, U8 *StartAddress, U8 *EndAddress, U32 Flags);
-
-typedef struct _ARCHITECTURE_FORMAT_FUNCTIONS
-{
- INIT_INSTRUCTION InitInstruction;
- DUMP_INSTRUCTION DumpInstruction;
- GET_INSTRUCTION GetInstruction;
- FIND_FUNCTION_BY_PROLOGUE FindFunctionByPrologue;
-} ARCHITECTURE_FORMAT_FUNCTIONS;
-
-typedef struct _ARCHITECTURE_FORMAT
-{
- ARCHITECTURE_TYPE Type;
- ARCHITECTURE_FORMAT_FUNCTIONS *Functions;
-} ARCHITECTURE_FORMAT;
-
-#define DISASSEMBLER_INITIALIZED 0x1234566F
-#define INSTRUCTION_INITIALIZED 0x1234567F
-
-#include "disasm_x86.h"
-
-typedef struct DECLSPEC_ALIGN(16) _S128
-{
- U64 Low;
- S64 High;
-} S128;
-typedef struct DECLSPEC_ALIGN(16) _U128
-{
- U64 Low;
- U64 High;
-} U128;
-
-typedef struct _INSTRUCTION_OPERAND
-{
- U32 Flags;
- U8 Type : 6;
- U8 Unused : 2;
- U16 Length;
-
-
- // If non-NULL, this indicates the target address of the instruction (e.g., a branch or
- // a displacement with no base register). However, this address is only reliable if the
- // image is mapped correctly (e.g., the executable is mapped as an image and fixups have
- // been applied if it is not at its preferred image base).
- //
- // If disassembling a 16-bit DOS application, TargetAddress is in the context of
- // X86Instruction->Segment. For example, if TargetAddress is the address of a code branch,
- // it is in the CS segment (unless X86Instruction->HasSegmentOverridePrefix is set). If
- // TargetAddress is a data pointer, it is in the DS segment (unless
- // X86Instruction->HasSegmentOverridePrefix is set)
- U64 TargetAddress;
- U32 Register;
-
- union
- {
- // All 8/16/32-bit operands are extended to 64-bits automatically
- // If you want to downcast, check whether Flags & OP_SIGNED is set
- // Like this:
- // U32 GetOperand32(OPERAND *Operand)
- // {
- // if (Operand->Flags & OP_SIGNED) return (S32)Operand->Value_S64;
- // else return (U32)Operand->Value_U64;
- //}
- U64 Value_U64;
- S64 Value_S64;
- U128 Value_U128;
- U128 Float128;
- U8 Float80[80];
- U8 BCD[10];
- };
-} INSTRUCTION_OPERAND;
-
-typedef struct _INSTRUCTION
-{
- U32 Initialized;
- struct _DISASSEMBLER *Disassembler;
-
- char String[MAX_OPCODE_DESCRIPTION];
- U8 StringIndex;
- U64 VirtualAddressDelta;
-
- U32 Groups; // ITYPE_EXEC, ITYPE_ARITH, etc. -- NOTE groups can be OR'd together
- INSTRUCTION_TYPE Type; // ITYPE_ADD, ITYPE_RET, etc. -- NOTE there is only one possible type
-
- U8 *Address;
- U8 *OpcodeAddress;
- U32 Length;
-
- U8 Prefixes[MAX_PREFIX_LENGTH];
- U32 PrefixCount;
-
- U8 LastOpcode; // last byte of opcode
- U8 OpcodeBytes[MAX_OPCODE_LENGTH];
- U32 OpcodeLength; // excludes any operands and prefixes
-
- INSTRUCTION_OPERAND Operands[MAX_OPERAND_COUNT];
- U32 OperandCount;
-
- X86_INSTRUCTION X86;
-
- DATA_REFERENCE DataSrc;
- DATA_REFERENCE DataDst;
- CODE_BRANCH CodeBranch;
-
- // Direction depends on which direction the stack grows
- // For example, on x86 a push results in StackChange < 0 since the stack grows down
- // This is only relevant if (Group & ITYPE_STACK) is true
- //
- // If Groups & ITYPE_STACK is set but StackChange = 0, it means that the change
- // couldn't be determined (non-constant)
- LONG StackChange;
-
- // Used to assist in debugging
- // If set, the current instruction is doing something that requires special handling
- // For example, popf can cause tracing to be disabled
-
- U8 StringAligned : 1; // internal only
- U8 NeedsEmulation : 1; // instruction does something that re
- U8 Repeat : 1; // instruction repeats until some condition is met (e.g., REP prefix on X86)
- U8 ErrorOccurred : 1; // set if instruction is invalid
- U8 AnomalyOccurred : 1; // set if instruction is anomalous
- U8 LastInstruction : 1; // tells the iterator callback it is the last instruction
- U8 CodeBlockFirst: 1;
- U8 CodeBlockLast : 1;
-} INSTRUCTION;
-
-typedef struct _DISASSEMBLER
-{
- U32 Initialized;
- ARCHITECTURE_TYPE ArchType;
- ARCHITECTURE_FORMAT_FUNCTIONS *Functions;
- INSTRUCTION Instruction;
- U32 Stage1Count; // GetInstruction called
- U32 Stage2Count; // Opcode fully decoded
- U32 Stage3CountNoDecode; // made it through all checks when DISASM_DECODE is not set
- U32 Stage3CountWithDecode; // made it through all checks when DISASM_DECODE is set
-} DISASSEMBLER;
-
-#define DISASM_DISASSEMBLE (1<<1)
-#define DISASM_DECODE (1<<2)
-#define DISASM_SUPPRESSERRORS (1<<3)
-#define DISASM_SHOWFLAGS (1<<4)
-#define DISASM_ALIGNOUTPUT (1<<5)
-#define DISASM_DISASSEMBLE_MASK (DISASM_ALIGNOUTPUT|DISASM_SHOWBYTES|DISASM_DISASSEMBLE)
-
-BOOL InitDisassembler(DISASSEMBLER *Disassembler, ARCHITECTURE_TYPE Architecture);
-void CloseDisassembler(DISASSEMBLER *Disassembler);
-INSTRUCTION *GetInstruction(DISASSEMBLER *Disassembler, U64 VirtualAddress, U8 *Address, U32 Flags);
-
-#ifdef __cplusplus
-}
-#endif
-#endif // DISASM_H
diff --git a/src/thirdparty/mhook/disasm-lib/disasm_x86.c b/src/thirdparty/mhook/disasm-lib/disasm_x86.c
deleted file mode 100644
index 26a5d7643..000000000
--- a/src/thirdparty/mhook/disasm-lib/disasm_x86.c
+++ /dev/null
@@ -1,4662 +0,0 @@
-// Copyright (C) 2004, Matt Conover (mconover@gmail.com)
-#undef NDEBUG
-#include <assert.h>
-#include "disasm.h"
-#include "cpu.h"
-
-// Since addresses are internally represented as 64-bit, we need to specially handle
-// cases where IP + Displacement wraps around for 16-bit/32-bit operand size
-// Otherwise, ignorethe possibility of wraparounds
-#define SUPPORT_WRAPAROUND
-
-#ifdef NO_SANITY_CHECKS
-#undef NDEBUG
-#undef DEBUG_DISASM
-#undef assert
-#define assert(x)
-#endif
-
-#ifdef DEBUG_DISASM
-#define DISASM_OUTPUT(x) printf x
-#else
-#define DISASM_OUTPUT(x)
-#endif
-
-#include "disasm_x86_tables.h"
-
-#ifdef _WIN64
-#pragma warning(disable:4311 4312)
-#endif
-
-////////////////////////////////////////////////////////////////////////
-// Internal macros
-////////////////////////////////////////////////////////////////////////
-
-#define VIRTUAL_ADDRESS ((U64)Instruction->Address + Instruction->VirtualAddressDelta)
-
-#define AMD64_DIFF (AMD64_8BIT_OFFSET-X86_8BIT_OFFSET)
-#define IS_AMD64() (INS_ARCH_TYPE(Instruction) == ARCH_X64)
-#define IS_X86_32() (INS_ARCH_TYPE(Instruction) == ARCH_X86)
-#define IS_X86_16() (INS_ARCH_TYPE(Instruction) == ARCH_X86_16)
-
-#define X86_BOUND 0x62
-#define X86_PUSH_REG 0x50
-#define X86_PUSH_CS 0x0e
-#define X86_PUSH_DS 0x1e
-#define X86_PUSH_SS 0x16
-#define X86_PUSH_ES 0x06
-#define X86_PUSH_FS 0xa0
-#define X86_PUSH_GS 0xa8
-#define X86_PUSH_U8 0x6a
-#define X86_PUSH_U32 0x68
-#define X86_POP_DS 0x1f
-#define X86_POP_ES 0x07
-#define X86_POP_SS 0x17
-#define X86_POP_FS 0xa1
-#define X86_POP_GS 0xa9
-#define X86_POP_REG 0x58
-
-#define OPCSTR Instruction->String+Instruction->StringIndex
-#define APPEND Instruction->StringIndex += (U8)_snprintf
-#define APPENDPAD(x) \
-{ \
- if (Instruction->StringAligned) \
- { \
- if (Instruction->StringIndex > x) assert(0); \
- while (x != Instruction->StringIndex) APPENDB(' '); \
- } \
- else if (Instruction->StringIndex) \
- { \
- APPENDB(' '); \
- } \
-}
-
-#define APPENDB(a) Instruction->String[Instruction->StringIndex++] = a
-#define APPENDS(a) APPEND(OPCSTR, SIZE_LEFT, a);
-
-#define SIZE_LEFT (MAX_OPCODE_DESCRIPTION-1 > Instruction->StringIndex ? MAX_OPCODE_DESCRIPTION-Instruction->StringIndex : 0)
-
-// If an address size prefix is used for an instruction that doesn't make sense, restore it
-// to the default
-
-#define SANITY_CHECK_OPERAND_SIZE() \
-{ \
- if (!Instruction->AnomalyOccurred && X86Instruction->HasOperandSizePrefix) \
- { \
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Unexpected operand size prefix\n", VIRTUAL_ADDRESS); \
- Instruction->AnomalyOccurred = TRUE; \
- X86Instruction->HasOperandSizePrefix = FALSE; \
- switch (X86Instruction->OperandSize) \
- { \
- case 4: X86Instruction->OperandSize = 2; break; \
- case 2: X86Instruction->OperandSize = 4; break; \
- default: assert(0); \
- } \
- } \
-}
-
-#define SANITY_CHECK_ADDRESS_SIZE() \
-{ \
- if (!Instruction->AnomalyOccurred && X86Instruction->HasAddressSizePrefix) \
- { \
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Unexpected address size prefix\n", VIRTUAL_ADDRESS); \
- Instruction->AnomalyOccurred = TRUE; \
- } \
- X86Instruction->HasAddressSizePrefix = FALSE; \
- switch (INS_ARCH_TYPE(Instruction)) \
- { \
- case ARCH_X64: X86Instruction->AddressSize = 8; break; \
- case ARCH_X86: X86Instruction->AddressSize = 4; break; \
- case ARCH_X86_16: X86Instruction->AddressSize = 2; break; \
- } \
-}
-
-#define SANITY_CHECK_SEGMENT_OVERRIDE() \
- if (!Instruction->AnomalyOccurred && X86Instruction->HasSegmentOverridePrefix) \
- { \
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Unexpected segment override\n", VIRTUAL_ADDRESS); \
- Instruction->AnomalyOccurred = TRUE; \
- }
-
-#define INSTR_INC(size) \
-{ \
- Instruction->Length += size; \
- Address += size; \
-}
-
-#define X86_SET_TARGET() \
-{ \
- if (X86Instruction->HasSelector) \
- { \
- if (!Instruction->AnomalyOccurred) \
- { \
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: unexpected segment 0x%02X\n", VIRTUAL_ADDRESS, X86Instruction->Selector); \
- Instruction->AnomalyOccurred = TRUE; \
- } \
- } \
- else \
- { \
- switch (X86Instruction->Segment) \
- { \
- case SEG_CS: \
- case SEG_DS: \
- case SEG_SS: \
- case SEG_ES: \
- assert(!X86Instruction->HasSelector); \
- Operand->TargetAddress = (U64)X86Instruction->Displacement; \
- /* assert(!GetAbsoluteAddressFromSegment((BYTE)X86Instruction->Segment, (DWORD)X86Instruction->Displacement) || GetAbsoluteAddressFromSegment(X86Instruction->Segment, (DWORD)X86Instruction->Displacement) == Operand->TargetAddress); */ \
- break; \
- case SEG_FS: \
- case SEG_GS: \
- assert(!X86Instruction->HasSelector); \
- Operand->TargetAddress = (U64)GetAbsoluteAddressFromSegment((BYTE)X86Instruction->Segment, (DWORD)X86Instruction->Displacement); \
- break; \
- default: \
- assert(0); /* shouldn't be possible */ \
- break; \
- } \
- } \
-}
-
-#define X86_SET_SEG(reg) \
-{ \
- if (!X86Instruction->HasSegmentOverridePrefix && (reg == REG_EBP || reg == REG_ESP)) \
- { \
- assert(!X86Instruction->HasSelector); \
- X86Instruction->Segment = SEG_SS; \
- } \
-}
-
-#define X86_SET_ADDR() \
-{ \
- if (Operand->Flags & OP_DST) \
- { \
- assert(!X86Instruction->HasDstAddressing); \
- X86Instruction->HasDstAddressing = TRUE; \
- X86Instruction->DstOpIndex[X86Instruction->DstOpCount] = (U8)OperandIndex; \
- X86Instruction->DstOpCount++; \
- X86Instruction->DstAddressIndex = (U8)OperandIndex; \
- } \
- if (Operand->Flags & OP_SRC) \
- { \
- if (Instruction->Type != ITYPE_STRCMP) assert(!X86Instruction->HasSrcAddressing); \
- X86Instruction->HasSrcAddressing = TRUE; \
- X86Instruction->SrcOpIndex[X86Instruction->SrcOpCount] = (U8)OperandIndex; \
- X86Instruction->SrcOpCount++; \
- X86Instruction->SrcAddressIndex = (U8)OperandIndex; \
- } \
-}
-
-#define X86_SET_REG(reg) \
-{ \
- if (Operand->Flags & OP_DST) \
- { \
- X86Instruction->DstOpIndex[X86Instruction->DstOpCount] = (U8)OperandIndex; \
- X86Instruction->DstOpCount++; \
- assert(OperandIndex < 2); \
- if (Operand->Length > 1 && reg == REG_ESP) Instruction->Groups |= ITYPE_STACK; \
- } \
- if (Operand->Flags & OP_SRC) \
- { \
- X86Instruction->SrcOpIndex[X86Instruction->SrcOpCount] = (U8)OperandIndex; \
- X86Instruction->SrcOpCount++; \
- } \
-}
-
-#define CHECK_AMD64_REG() { if (IS_AMD64()) Operand->Register += AMD64_DIFF; }
-
-////////////////////////////////////////////////////////////////////////
-// Internal structures/variables
-////////////////////////////////////////////////////////////////////////
-
-ARCHITECTURE_FORMAT_FUNCTIONS X86 =
-{
- X86_InitInstruction,
- NULL,
- X86_GetInstruction,
- X86_FindFunctionByPrologue
-};
-
-char *X86_Registers[0xE0] =
-{
- // Segments
- "es", // 0x00
- "cs", // 0x01
- "ss", // 0x02
- "ds", // 0x03
- "fs", // 0x04
- "gs", // 0x05
- "flags", // 0x06
- "eflags", // 0x07
- "rflags", // 0x08
- "ip+ilen", // 0x09
- "eip+ilen", // 0x0A
- "rip+ilen", // 0x0B
- NULL, // 0x0C
- NULL, // 0x0D
- NULL, // 0x0E
- NULL, // 0x0F
-
- // Test
- "tr0", // 0x10
- "tr1", // 0x11
- "tr2", // 0x12
- "tr3", // 0x13
- "tr4", // 0x14
- "tr5", // 0x15
- "tr6", // 0x16
- "tr7", // 0x17
- "tr8", // 0x18
- "tr9", // 0x19
- "tr10", // 0x1A
- "tr11", // 0x1B
- "tr12", // 0x1C
- "tr13", // 0x1D
- "tr14", // 0x1E
- "tr15", // 0x1F
-
- // Control
- "cr0", // 0x20
- "cr1", // 0x21
- "cr2", // 0x22
- "cr3", // 0x23
- "cr4", // 0x24
- "cr5", // 0x25
- "cr6", // 0x26
- "cr7", // 0x27
- "cr8", // 0x18
- "cr9", // 0x19
- "cr10", // 0x1A
- "cr11", // 0x1B
- "cr12", // 0x1C
- "cr13", // 0x1D
- "cr14", // 0x1E
- "cr15", // 0x1F
-
- // Debug
- "dr0", // 0x30
- "dr1", // 0x31
- "dr2", // 0x32
- "dr3", // 0x33
- "dr4", // 0x34
- "dr5", // 0x35
- "dr6", // 0x36
- "dr7", // 0x37
- "dr8", // 0x38
- "dr9", // 0x39
- "dr10", // 0x3A
- "dr11", // 0x3B
- "dr12", // 0x3C
- "dr13", // 0x3D
- "dr14", // 0x3E
- "dr15", // 0x3F
-
- // FPU
- "st(0)", // 0x40
- "st(1)", // 0x41
- "st(2)", // 0x42
- "st(3)", // 0x43
- "st(4)", // 0x44
- "st(5)", // 0x45
- "st(6)", // 0x46
- "st(7)", // 0x47
- NULL, // 0x48
- NULL, // 0x49
- NULL, // 0x4A
- NULL, // 0x4B
- NULL, // 0x4C
- NULL, // 0x4D
- NULL, // 0x4E
- NULL, // 0x4F
-
- // MMX
- "mm0", // 0x50
- "mm1", //
- "mm2",
- "mm3",
- "mm4",
- "mm5",
- "mm6",
- "mm7",
- NULL, // 0x58
- NULL, // 0x59
- NULL, // 0x5A
- NULL, // 0x5B
- NULL, // 0x5C
- NULL, // 0x5D
- NULL, // 0x5E
- NULL, // 0x5F
-
- // XMM
- "xmm0", // 0x60
- "xmm1", // 0x61
- "xmm2", // 0x62
- "xmm3", // 0x63
- "xmm4", // 0x64
- "xmm5", // 0x65
- "xmm6", // 0x66
- "xmm7", // 0x67
- "xmm8", // 0x68
- "xmm9", // 0x69
- "xmm10", // 0x6a
- "xmm11", // 0x6b
- "xmm12", // 0x6c
- "xmm13", // 0x6d
- "xmm14", // 0x6e
- "xmm15", // 0x6f
-
- // 8-bit
- "al", // 0x70
- "cl", // 0x71
- "dl", // 0x72
- "bl", // 0x73
- "ah", // 0x74
- "ch", // 0x75
- "dh", // 0x76
- "bh", // 0x77
- NULL, // 0x78
- NULL, // 0x79
- NULL, // 0x7A
- NULL, // 0x7B
- NULL, // 0x7C
- NULL, // 0x7D
- NULL, // 0x7E
- NULL, // 0x7F
-
- // 16-bit
- "ax", // 0x80
- "cx", // 0x81
- "dx", // 0x82
- "bx", // 0x83
- "sp", // 0x84
- "bp", // 0x85
- "si", // 0x86
- "di", // 0x87
- NULL, // 0x88
- NULL, // 0x89
- NULL, // 0x8A
- NULL, // 0x8B
- NULL, // 0x8C
- NULL, // 0x8D
- NULL, // 0x8E
- NULL, // 0x8F
-
- // 32-bit
- "eax", // 0x90
- "ecx", // 0x91
- "edx", // 0x92
- "ebx", // 0x93
- "esp", // 0x94
- "ebp", // 0x95
- "esi", // 0x96
- "edi", // 0x97
- NULL, // 0x98
- NULL, // 0x99
- NULL, // 0x9A
- NULL, // 0x9B
- NULL, // 0x9C
- NULL, // 0x9D
- NULL, // 0x9E
- NULL, // 0x9F
-
- // X86-64 8-bit register
- "al", // 0xA0
- "cl", // 0xA1
- "dl", // 0xA2
- "bl", // 0xA3
- "spl", // 0xA4
- "bpl", // 0xA5
- "sil", // 0xA6
- "dil", // 0xA7
- "r8b", // 0xA8
- "r9b", // 0xA9
- "r10b", // 0xAA
- "r11b", // 0xAB
- "r12b", // 0xAC
- "r13b", // 0xAD
- "r14b", // 0xAE
- "r15b", // 0xAF
-
- // X86-64 16-bit register
- "ax", // 0xB0
- "cx", // 0xB1
- "dx", // 0xB2
- "bx", // 0xB3
- "sp", // 0xB4
- "bp", // 0xB5
- "si", // 0xB6
- "di", // 0xB7
- "r8w", // 0xB8
- "r9w", // 0xB9
- "r10w", // 0xBA
- "r11w", // 0xBB
- "r12w", // 0xBC
- "r13w", // 0xBD
- "r14w", // 0xBE
- "r15w", // 0xBF
-
- // X86-64 32-bit register
- "eax", // 0xC0
- "ecx", // 0xC1
- "edx", // 0xC2
- "ebx", // 0xC3
- "esp", // 0xC4
- "ebp", // 0xC5
- "esi", // 0xC6
- "edi", // 0xC7
- "r8d", // 0xC8
- "r9d", // 0xC9
- "r10d", // 0xCA
- "r11d", // 0xCB
- "r12d", // 0xCC
- "r13d", // 0xCD
- "r14d", // 0xCE
- "r15d", // 0xCF
-
- // X86-64 64-bit register
- "rax", // 0xD0
- "rcx", // 0xD1
- "rdx", // 0xD2
- "rbx", // 0xD3
- "rsp", // 0xD4
- "rbp", // 0xD5
- "rsi", // 0xD6
- "rdi", // 0xD7
- "r8", // 0xD8
- "r9", // 0xD9
- "r10", // 0xDA
- "r11", // 0xDB
- "r12", // 0xDC
- "r13", // 0xDD
- "r14", // 0xDE
- "r15" // 0xDF
-};
-
-void OutputBounds(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputGeneral(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputDescriptor(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputSegOffset(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputPackedReal(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputPackedBCD(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputScalarReal(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputScalarGeneral(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputFPUEnvironment(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputFPUState(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-void OutputCPUState(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-
-typedef void (*OUTPUT_OPTYPE)(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex);
-#define OPTYPE_SHIFT 24
-#define MAX_OPTYPE_INDEX 26
-OUTPUT_OPTYPE OptypeHandlers[] =
-{
- NULL,
- OutputBounds, // 01 OPTYPE_a
- OutputGeneral, // 02 OPTYPE_b
- OutputGeneral, // 03 OPTYPE_d
- OutputSegOffset, // 04 OPTYPE_p
- OutputGeneral, // 05 OPTYPE_q
- OutputDescriptor, // 06 OPTYPE_dt
- OutputGeneral, // 07 OPTYPE_v
- OutputGeneral, // 08 OPTYPE_w
- OutputPackedReal, // 09 OPTYPE_ps
- OutputPackedReal, // 0A OPTYPE_pd
- OutputPackedBCD, // 0B OPTYPE_pb
- OutputScalarReal, // 0C OPTYPE_ss
- OutputScalarReal, // 0D OPTYPE_sd
- OutputScalarReal, // 0E OPTYPE_se
- OutputFPUEnvironment, // 0F OPTYPE_fev
- OutputFPUState, // 10 OPTYPE_fst1
- OutputFPUState, // 11 OPTYPE_fst2
- OutputGeneral, // 12 OPTYPE_z
- OutputGeneral, // 13 OPTYPE_o
- OutputGeneral, // 14 OPTYPE_dq
- OutputGeneral, // 15 OPTYPE_mw
- OutputScalarGeneral, // 16 OPTYPE_sso
- OutputScalarGeneral, // 17 OPTYPE_sdo
- OutputCPUState, // 18 OPTYPE_cpu
- OutputGeneral, // 19 OPTYPE_lea
-};
-
-#define OPTYPE_a 0x01000000
-#define OPTYPE_b 0x02000000
-#define OPTYPE_d 0x03000000
-#define OPTYPE_p 0x04000000
-#define OPTYPE_q 0x05000000
-#define OPTYPE_dt 0x06000000
-#define OPTYPE_v 0x07000000
-#define OPTYPE_w 0x08000000
-#define OPTYPE_ps 0x09000000 // packed 128-bit single real
-#define OPTYPE_pd 0x0A000000 // packed 128-bit double real
-#define OPTYPE_pb 0x0B000000 // packed BCD (10 bytes, 18-bit precision)
-#define OPTYPE_ss 0x0C000000 // scalar single real
-#define OPTYPE_sd 0x0D000000 // scalar double real
-#define OPTYPE_se 0x0E000000 // scalar extended real
-#define OPTYPE_fev 0x0F000000 // FPU environment (28 bytes if 32-bit modes, 14 bytes in 16-bit mode)
-#define OPTYPE_fst1 0x10000000 // FPU state (108 bytes in 32-bit modes, 94 bytes in 16-bit real mode)
-#define OPTYPE_fst2 0x11000000 // FPU/MMX/XMM/MXCSR state (512 bytes)
-#define OPTYPE_z 0x12000000
-#define OPTYPE_o 0x13000000
-#define OPTYPE_dq 0x14000000 // OPTYPE_d or OPTYPE_o
-#define OPTYPE_mw 0x15000000 // word if memory, register size otherwise
-#define OPTYPE_sso 0x16000000 // OPTYPE_ss or OPTYPE_o
-#define OPTYPE_sdo 0x17000000 // OPTYPE_ss or OPTYPE_o
-#define OPTYPE_cpu 0x18000000 // pointer to CPU state structure
-#define OPTYPE_lea 0x19000000 // size set by other operand
-
-////////////////////////////////////////////////////////////////////////
-// Internal functions
-////////////////////////////////////////////////////////////////////////
-
-#ifdef TEST_DISASM // TODO: remove
-U32 X86_GetLength(INSTRUCTION *Instruction, U8 *Address);
-#endif
-
-INTERNAL BOOL IsValidLockPrefix(X86_INSTRUCTION *Instruction, U8 Opcode, U32 OpcodeLength, U8 Group, U8 OpcodeExtension);
-INTERNAL U8 *SetOperands(INSTRUCTION *Instruction, U8 *Address, U32 Flags);
-INTERNAL U8 *SetModRM32(INSTRUCTION *Instruction, U8 *Address, INSTRUCTION_OPERAND *Operand, U32 OperandIndex, BOOL SuppressErrors);
-INTERNAL U8 *SetModRM16(INSTRUCTION *Instruction, U8 *Address, INSTRUCTION_OPERAND *Operand, U32 OperandIndex, BOOL SuppressErrors);
-INTERNAL U8 *SetSIB(INSTRUCTION *Instruction, U8 *Address, INSTRUCTION_OPERAND *Operand, U32 OperandIndex, BOOL SuppressErrors);
-INTERNAL U64 ApplyDisplacement(U64 Address, INSTRUCTION *Instruction);
-
-//////////////////////////////////////////////////////////
-// Instruction setup
-//////////////////////////////////////////////////////////
-
-#define APPLY_OFFSET(addr) \
-{ \
- switch (X86Instruction->OperandSize) \
- { \
- case 8: addr = ((U64)(addr + Instruction->VirtualAddressDelta)); break; \
- case 4: addr = (U64)((U32)(addr + Instruction->VirtualAddressDelta)); break; \
- case 2: addr = (U64)((U8)(addr + Instruction->VirtualAddressDelta)); break; \
- default: assert(0); break; \
- } \
-}
-
-BOOL X86_InitInstruction(INSTRUCTION *Instruction)
-{
- X86_INSTRUCTION *X86Instruction;
-#ifdef NO_SANITY_CHECKS
- assert(0); // be sure assertions are disabled
-#endif
- X86Instruction = &Instruction->X86;
- memset(X86Instruction, 0, sizeof(X86_INSTRUCTION));
-
- switch (INS_ARCH_TYPE(Instruction))
- {
- case ARCH_X64:
- X86Instruction->AddressSize = 8;
- X86Instruction->OperandSize = 4;
- break;
- case ARCH_X86:
- X86Instruction->AddressSize = 4;
- X86Instruction->OperandSize = 4;
- break;
- case ARCH_X86_16:
- X86Instruction->AddressSize = 2;
- X86Instruction->OperandSize = 2;
- break;
- default:
- assert(0);
- return FALSE;
- }
- X86Instruction->Instruction = Instruction;
- X86Instruction->Segment = SEG_DS;
- return TRUE;
-}
-
-////////////////////////////////////////////////////////////
-// Formatting
-// You can change these to whatever you prefer
-////////////////////////////////////////////////////////////
-
-#define X86_WRITE_OPFLAGS() \
- if (Flags & DISASM_SHOWFLAGS) \
- { \
- APPENDB('{'); \
- assert(Operand->Flags & (OP_EXEC|OP_SRC|OP_DST)); \
- if (Operand->Flags & OP_IPREL) APPENDB('r'); \
- if (Operand->Flags & OP_FAR) APPENDB('f'); \
- if (Operand->Flags & OP_CONDR) APPENDB('c'); \
- if (Operand->Flags & OP_EXEC) APPENDB('X'); \
- else if (Operand->Flags & OP_SRC) APPENDB('R'); \
- if (Operand->Flags & OP_CONDW) APPENDB('c'); \
- if (Operand->Flags & OP_DST) APPENDB('W'); \
- if (Operand->Flags & OP_SYS) APPENDB('S'); \
- if (Operand->Flags & OP_ADDRESS) APPENDB('A'); \
- if (Operand->Flags & OP_PARAM) APPENDB('P'); \
- if (Operand->Flags & OP_LOCAL) APPENDB('L'); \
- if (Operand->Flags & OP_GLOBAL) APPENDB('G'); \
- APPENDB('}'); \
- }
-
-#define X86_WRITE_IMMEDIATE() \
-{ \
- switch (Operand->Length) \
- { \
- case 8: \
- APPEND(OPCSTR, SIZE_LEFT, "0x%02I64X=", Operand->Value_U64); \
- if (Operand->Value_S64 >= 0 || !(Operand->Flags & OP_SIGNED)) APPEND(OPCSTR, SIZE_LEFT, "%I64u", Operand->Value_U64); \
- /*else APPEND(OPCSTR, SIZE_LEFT, "-0x%02I64X=%I64d", -Operand->Value_S64, Operand->Value_S64);*/ \
- else APPEND(OPCSTR, SIZE_LEFT, "%I64d", Operand->Value_S64); \
- break; \
- case 4: \
- APPEND(OPCSTR, SIZE_LEFT, "0x%02lX=", (U32)Operand->Value_U64); \
- if (Operand->Value_S64 >= 0 || !(Operand->Flags & OP_SIGNED)) APPEND(OPCSTR, SIZE_LEFT, "%lu", (U32)Operand->Value_U64); \
- /*else APPEND(OPCSTR, SIZE_LEFT, "-0x%02lX=%ld", (U32)-Operand->Value_S64, (S32)Operand->Value_S64);*/ \
- else APPEND(OPCSTR, SIZE_LEFT, "%ld", (S32)Operand->Value_S64); \
- break; \
- case 2: \
- APPEND(OPCSTR, SIZE_LEFT, "0x%02X=", (U16)Operand->Value_U64); \
- if (Operand->Value_S64 >= 0 || !(Operand->Flags & OP_SIGNED)) APPEND(OPCSTR, SIZE_LEFT, "%u", (U16)Operand->Value_U64); \
- /*else APPEND(OPCSTR, SIZE_LEFT, "-0x%02X=%d", (U16)-Operand->Value_S64, (S16)Operand->Value_S64);*/ \
- else APPEND(OPCSTR, SIZE_LEFT, "%d", (S16)Operand->Value_S64); \
- break; \
- case 1: \
- APPEND(OPCSTR, SIZE_LEFT, "0x%02X=", (U8)Operand->Value_U64); \
- if (Operand->Value_S64 >= 0 || !(Operand->Flags & OP_SIGNED)) APPEND(OPCSTR, SIZE_LEFT, "%u", (U8)Operand->Value_U64); \
- /*else APPEND(OPCSTR, SIZE_LEFT, "-0x%02X=%d", (U8)-Operand->Value_S64, (S8)Operand->Value_S64);*/ \
- else APPEND(OPCSTR, SIZE_LEFT, "%d", (S8)Operand->Value_S64); \
- break; \
- default: assert(0); break; \
- } \
-}
-
-#define X86_WRITE_ABSOLUTE_DISPLACEMENT() \
-{ \
- switch (X86Instruction->AddressSize) \
- { \
- case 8: \
- APPEND(OPCSTR, SIZE_LEFT, "0x%04I64X", X86Instruction->Displacement); \
- break; \
- case 4: \
- APPEND(OPCSTR, SIZE_LEFT, "0x%04lX", (U32)X86Instruction->Displacement); \
- break; \
- case 2: \
- APPEND(OPCSTR, SIZE_LEFT, "0x%04X", (U16)X86Instruction->Displacement); \
- break; \
- default: assert(0); break; \
- } \
-}
-
-#define X86_WRITE_RELATIVE_DISPLACEMENT64() \
- if (X86Instruction->Displacement >= 0) APPEND(OPCSTR, SIZE_LEFT, "+0x%02I64X", X86Instruction->Displacement); \
- else APPEND(OPCSTR, SIZE_LEFT, "-0x%02I64X", -X86Instruction->Displacement);
-
-#define X86_WRITE_RELATIVE_DISPLACEMENT32() \
- if (X86Instruction->Displacement >= 0) APPEND(OPCSTR, SIZE_LEFT, "+0x%02lX", (U32)X86Instruction->Displacement); \
- else APPEND(OPCSTR, SIZE_LEFT, "-0x%02lX", (U32)-X86Instruction->Displacement);
-
-#define X86_WRITE_RELATIVE_DISPLACEMENT16() \
- if (X86Instruction->Displacement >= 0) APPEND(OPCSTR, SIZE_LEFT, "+0x%02X", (U16)X86Instruction->Displacement); \
- else APPEND(OPCSTR, SIZE_LEFT, "-0x%02X", (U16)-X86Instruction->Displacement);
-
-#define X86_WRITE_RELATIVE_DISPLACEMENT() \
-{ \
- switch (X86Instruction->AddressSize) \
- { \
- case 8: \
- X86_WRITE_RELATIVE_DISPLACEMENT64() \
- break; \
- case 4: \
- X86_WRITE_RELATIVE_DISPLACEMENT32() \
- break; \
- case 2: \
- X86_WRITE_RELATIVE_DISPLACEMENT16() \
- break; \
- default: assert(0); break; \
- } \
-}
-
-#define X86_WRITE_IP_OFFSET(op) \
-{ \
- switch (X86Instruction->OperandSize) \
- { \
- case 8: \
- APPENDS("[rip+ilen"); \
- assert((op)->TargetAddress); \
- X86_WRITE_RELATIVE_DISPLACEMENT64() \
- APPEND(OPCSTR, SIZE_LEFT, "]=0x%04I64X", (op)->TargetAddress+Instruction->VirtualAddressDelta); \
- break; \
- case 4: \
- APPENDS("[eip+ilen"); \
- assert((op)->TargetAddress); \
- X86_WRITE_RELATIVE_DISPLACEMENT32() \
- APPEND(OPCSTR, SIZE_LEFT, "]=0x%04lX", (U32)((op)->TargetAddress+Instruction->VirtualAddressDelta)); \
- break; \
- case 2: \
- APPENDS("[ip+ilen"); \
- X86_WRITE_RELATIVE_DISPLACEMENT16() \
- APPEND(OPCSTR, SIZE_LEFT, "]=0x%04X", (U16)((op)->TargetAddress+Instruction->VirtualAddressDelta)); \
- break; \
- default: assert(0); break; \
- } \
-}
-
-#define X86_WRITE_OFFSET(op) \
-{ \
- assert((op)->Length <= 8); \
- if (X86Instruction->HasSelector) \
- { \
- assert((op)->Flags & OP_FAR); \
- APPEND(OPCSTR, SIZE_LEFT, "%s 0x%02X:[", DataSizes[((op)->Length >> 1)], X86Instruction->Selector); \
- } \
- else \
- { \
- assert(!((op)->Flags & OP_FAR)); \
- assert(X86Instruction->Segment < SEG_MAX) ; \
- APPEND(OPCSTR, SIZE_LEFT, "%s %s:[", DataSizes[((op)->Length >> 1)], Segments[X86Instruction->Segment]); \
- } \
- X86_WRITE_ABSOLUTE_DISPLACEMENT() \
- APPENDB(']'); \
-}
-
-void OutputAddress(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- BOOL ShowDisplacement = FALSE;
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
-
- assert(!X86Instruction->HasSelector);
- assert(X86Instruction->SrcAddressIndex == OperandIndex || X86Instruction->DstAddressIndex == OperandIndex);
- if (Operand->Length > 16 || (Operand->Length > 1 && (Operand->Length & 1))) APPEND(OPCSTR, SIZE_LEFT, "%d_byte ptr ", Operand->Length);
- else APPEND(OPCSTR, SIZE_LEFT, "%s ", DataSizes[Operand->Length >> 1]);
-
- //
- // This attempts to display the address intelligently
- // If it has a positive 32-bit displacement, it is shown as seg:Displacement[base+index*scale]
- // If it is a negative displacement or 8-bit, it is shown as seg:[base+index*scale+displacement]
- //
- APPEND(OPCSTR, SIZE_LEFT, "%s:", Segments[X86Instruction->Segment]);
- if (X86Instruction->HasBaseRegister)
- {
- if (X86Instruction->Displacement)
- {
- if (X86Instruction->HasFullDisplacement) X86_WRITE_ABSOLUTE_DISPLACEMENT()
- else ShowDisplacement = TRUE;
- }
- APPEND(OPCSTR, SIZE_LEFT, "[%s", X86_Registers[X86Instruction->BaseRegister]);
- if (X86Instruction->HasIndexRegister)
- {
- APPEND(OPCSTR, SIZE_LEFT, "+%s", X86_Registers[X86Instruction->IndexRegister]);
- if (X86Instruction->Scale > 1) APPEND(OPCSTR, SIZE_LEFT, "*%d", X86Instruction->Scale);
- }
- if (ShowDisplacement) X86_WRITE_RELATIVE_DISPLACEMENT()
- APPENDB(']');
- if (X86Instruction->Relative)
- {
- U64 Address = Operand->TargetAddress;
- assert(Address);
- APPLY_OFFSET(Address)
- APPEND(OPCSTR, SIZE_LEFT, "=[0x%04I64X]", Address);
- }
- }
- else if (X86Instruction->HasIndexRegister)
- {
- if (X86Instruction->Displacement)
- {
- if (X86Instruction->HasFullDisplacement) X86_WRITE_ABSOLUTE_DISPLACEMENT()
- else ShowDisplacement = TRUE;
- }
- APPEND(OPCSTR, SIZE_LEFT, "[%s", X86_Registers[X86Instruction->IndexRegister]);
- if (X86Instruction->Scale > 1) APPEND(OPCSTR, SIZE_LEFT, "*%d", X86Instruction->Scale);
- if (ShowDisplacement) X86_WRITE_RELATIVE_DISPLACEMENT()
- APPENDB(']');
- }
- else // just a displacement
- {
- APPENDB('[');
- X86_WRITE_ABSOLUTE_DISPLACEMENT()
- APPENDB(']');
- }
-}
-
-void OutputBounds(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- assert(X86Instruction->HasSrcAddressing);
- assert(!(Operand->Length & 1));
- Operand->Length >>= 1;
- APPENDB('(');
- OutputAddress(Instruction, Operand, OperandIndex);
- APPENDS(", ");
- X86Instruction->Displacement += Operand->Length;
- OutputAddress(Instruction, Operand, OperandIndex);
- X86Instruction->Displacement -= Operand->Length;
- APPENDB(')');
- Operand->Length <<= 1;
-}
-
-void OutputGeneral(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- if ((X86Instruction->HasDstAddressing && X86Instruction->DstAddressIndex == OperandIndex) ||
- (X86Instruction->HasSrcAddressing && X86Instruction->SrcAddressIndex == OperandIndex))
- {
- OutputAddress(Instruction, Operand, OperandIndex);
- }
- else
- {
- APPENDS(X86_Registers[Operand->Register]);
- }
-}
-
-void OutputDescriptor(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- assert(X86Instruction->HasSrcAddressing || X86Instruction->HasDstAddressing);
- OutputAddress(Instruction, Operand, OperandIndex);
-}
-
-void OutputPackedReal(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- if ((X86Instruction->HasDstAddressing && X86Instruction->DstAddressIndex == OperandIndex) ||
- (X86Instruction->HasSrcAddressing && X86Instruction->SrcAddressIndex == OperandIndex))
- {
- OutputAddress(Instruction, Operand, OperandIndex);
- }
- else
- {
- APPENDS(X86_Registers[Operand->Register]);
- }
-}
-
-void OutputPackedBCD(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- if ((X86Instruction->HasDstAddressing && X86Instruction->DstAddressIndex == OperandIndex) ||
- (X86Instruction->HasSrcAddressing && X86Instruction->SrcAddressIndex == OperandIndex))
- {
- OutputAddress(Instruction, Operand, OperandIndex);
- }
- else
- {
- APPENDS(X86_Registers[Operand->Register]);
- }
-}
-
-void OutputScalarReal(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- if ((X86Instruction->HasDstAddressing && X86Instruction->DstAddressIndex == OperandIndex) ||
- (X86Instruction->HasSrcAddressing && X86Instruction->SrcAddressIndex == OperandIndex))
- {
- OutputAddress(Instruction, Operand, OperandIndex);
- }
- else
- {
- APPENDS(X86_Registers[Operand->Register]);
- }
-}
-
-void OutputScalarGeneral(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- if (Operand->Type == OPTYPE_FLOAT)
- {
- OutputScalarReal(Instruction, Operand, OperandIndex);
- }
- else
- {
- OutputGeneral(Instruction, Operand, OperandIndex);
- }
-}
-
-void OutputFPUEnvironment(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- assert(X86Instruction->HasSrcAddressing || X86Instruction->HasDstAddressing);
- OutputAddress(Instruction, Operand, OperandIndex);
-}
-
-void OutputFPUState(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- assert(X86Instruction->HasSrcAddressing || X86Instruction->HasDstAddressing);
- OutputAddress(Instruction, Operand, OperandIndex);
-}
-
-void OutputCPUState(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- assert(X86Instruction->HasSrcAddressing);
- OutputAddress(Instruction, Operand, OperandIndex);
-}
-
-void OutputSegOffset(INSTRUCTION *Instruction, INSTRUCTION_OPERAND *Operand, U32 OperandIndex)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- assert(X86Instruction->HasSrcAddressing);
- OutputAddress(Instruction, Operand, OperandIndex);
-}
-
-////////////////////////////////////////////////////////////
-// Prologue support
-////////////////////////////////////////////////////////////
-
-typedef struct _PROLOGUE
-{
- char *Data;
- U32 Length;
-} PROLOGUE;
-
-PROLOGUE StandardPrologues[] =
-{
- { "\x55\x8b\xec", 3 },
- { "\x55\x89\xe5", 3 },
- { "\x83\xec", 2 },
- { "\x81\xec", 2 },
- // TODO: add AMD64 prologues
- // TODO: add VS2003/VS2003 prologues
- // TODO: add any unique prologues from other compilers
- { NULL, 0 }
-};
-
-// Find the first function between StartAddress and EndAddress
-//
-// This will match a standard prologue and then analyze the following instructions to verify
-// it is a valid function
-U8 *X86_FindFunctionByPrologue(INSTRUCTION *Instruction, U8 *StartAddress, U8 *EndAddress, U32 Flags)
-{
- assert(0); // TODO
- return NULL;
-}
-
-//////////////////////////////////////////////////////////
-// Instruction decoder
-//////////////////////////////////////////////////////////
-
-BOOL X86_GetInstruction(INSTRUCTION *Instruction, U8 *Address, U32 Flags)
-{
- BOOL SpecialExtension = FALSE;
- U8 Opcode = 0, OpcodeExtension = 0, Group = 0, SSE_Prefix = 0, Suffix;
- U32 i = 0, Result = 0, tmpScale;
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- X86_OPCODE *X86Opcode;
-#ifdef TEST_DISASM
- U32 InstructionLength = 0;
-#endif
- INSTRUCTION_OPERAND *Operand, *Operand1 = NULL;
- DISASSEMBLER *Disassembler = Instruction->Disassembler;
- BOOL Decode = Flags & DISASM_DECODE;
- BOOL Disassemble = Flags & DISASM_DISASSEMBLE;
- BOOL SuppressErrors = Flags & DISASM_SUPPRESSERRORS;
-
- if (Disassemble && !Decode)
- {
- assert(0);
- Decode = TRUE;
- }
-
- if (!Address || !X86_InitInstruction(Instruction))
- {
- assert(0);
- goto abort;
- }
-
- assert(Instruction->Address == Address);
- assert(!Instruction->StringIndex && !Instruction->Length);
-
- Disassembler->Stage1Count++;
- if (Flags & DISASM_ALIGNOUTPUT) Instruction->StringAligned = TRUE;
-
- //
- // Get prefixes or three byte opcode
- //
- while (TRUE)
- {
- Opcode = *Address;
- INSTR_INC(1); // increment Instruction->Length and address
- X86Opcode = &X86_Opcodes_1[Opcode];
-
- // Handle a misplaced REX prefix -- AMD64 manual says it is just ignored
- if (IS_AMD64() && (Opcode >= REX_PREFIX_START && Opcode <= REX_PREFIX_END) && X86_PREFIX((&X86_Opcodes_1[*Address])))
- {
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: REX prefix before legacy prefix 0x%02X\n", VIRTUAL_ADDRESS, Opcode);
- Instruction->AnomalyOccurred = TRUE;
- }
- continue;
- }
-
- if (X86_PREFIX(X86Opcode))
- {
- if (!Instruction->AnomalyOccurred)
- {
- for (i = 0; i < Instruction->PrefixCount; i++)
- {
- if (Instruction->Prefixes[i] == Opcode)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Duplicate prefix 0x%02X\n", VIRTUAL_ADDRESS, Opcode);
- Instruction->AnomalyOccurred = TRUE;
- break;
- }
- }
- }
-
- switch (Opcode)
- {
- case PREFIX_REPNE: // may be three byte opcode
- SSE_Prefix = Opcode;
- if (!Instruction->AnomalyOccurred && X86Instruction->HasRepeatWhileEqualPrefix)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Conflicting prefix\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- Instruction->Repeat = TRUE;
- X86Instruction->HasRepeatWhileEqualPrefix = FALSE;
- X86Instruction->HasRepeatWhileNotEqualPrefix = TRUE;
- break;
- case PREFIX_REP: // may be three byte opcode
- SSE_Prefix = Opcode;
- if (!Instruction->AnomalyOccurred && X86Instruction->HasRepeatWhileNotEqualPrefix)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Conflicting prefix\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
-
- Instruction->Repeat = TRUE;
- X86Instruction->HasRepeatWhileNotEqualPrefix = FALSE;
- X86Instruction->HasRepeatWhileEqualPrefix = TRUE;
- break;
-
- case PREFIX_OPERAND_SIZE: // may be three byte opcode
- SSE_Prefix = Opcode;
- if (!Instruction->AnomalyOccurred && X86Instruction->HasOperandSizePrefix)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Conflicting prefix\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
-
- if (X86Instruction->HasOperandSizePrefix) break;
- else X86Instruction->HasOperandSizePrefix = TRUE;
- switch (X86Instruction->OperandSize)
- {
- case 4: X86Instruction->OperandSize = 2; break;
- case 2: X86Instruction->OperandSize = 4; break;
- default: assert(0); goto abort;
- }
- break;
-
- case PREFIX_ADDRESS_SIZE:
- if (!Instruction->AnomalyOccurred && X86Instruction->HasAddressSizePrefix)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Conflicting prefix\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
-
- if (X86Instruction->HasAddressSizePrefix) break;
- else X86Instruction->HasAddressSizePrefix = TRUE;
- switch (X86Instruction->AddressSize)
- {
- case 8:
- X86Instruction->AddressSize = 4;
- break;
- case 4:
- assert(!IS_AMD64()); // this should not be possible
- X86Instruction->AddressSize = 2;
- break;
- case 2:
- X86Instruction->AddressSize = 4;
- break;
- default:
- assert(0); goto abort;
- }
- break;
-
- case PREFIX_SEGMENT_OVERRIDE_ES:
- SANITY_CHECK_SEGMENT_OVERRIDE();
- if (!IS_AMD64())
- {
- X86Instruction->HasSegmentOverridePrefix = TRUE;
- X86Instruction->Segment = SEG_ES;
- }
- else if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Meaningless segment override\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- break;
- case PREFIX_SEGMENT_OVERRIDE_CS:
- SANITY_CHECK_SEGMENT_OVERRIDE();
- if (!IS_AMD64())
- {
- X86Instruction->HasSegmentOverridePrefix = TRUE;
- X86Instruction->Segment = SEG_CS;
- }
- else if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Meaningless segment override\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- break;
- case PREFIX_SEGMENT_OVERRIDE_SS:
- SANITY_CHECK_SEGMENT_OVERRIDE();
- if (!IS_AMD64())
- {
- X86Instruction->HasSegmentOverridePrefix = TRUE;
- X86Instruction->Segment = SEG_SS;
- }
- else if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Meaningless segment override\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- break;
- case PREFIX_SEGMENT_OVERRIDE_DS:
- SANITY_CHECK_SEGMENT_OVERRIDE();
- if (!IS_AMD64())
- {
- X86Instruction->HasSegmentOverridePrefix = TRUE;
- X86Instruction->Segment = SEG_DS;
- }
- else if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Meaningless segment override\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- break;
- case PREFIX_SEGMENT_OVERRIDE_FS:
- SANITY_CHECK_SEGMENT_OVERRIDE();
- X86Instruction->HasSegmentOverridePrefix = TRUE;
- X86Instruction->Segment = SEG_FS;
- break;
- case PREFIX_SEGMENT_OVERRIDE_GS:
- SANITY_CHECK_SEGMENT_OVERRIDE();
- X86Instruction->HasSegmentOverridePrefix = TRUE;
- X86Instruction->Segment = SEG_GS;
- break;
-
- case PREFIX_LOCK:
- if (!Instruction->AnomalyOccurred && X86Instruction->HasLockPrefix)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Conflicting prefix\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- X86Instruction->HasLockPrefix = TRUE;
- break;
-
- default:
- assert(0);
- goto abort;
- }
-
- if (Instruction->PrefixCount >= X86_MAX_INSTRUCTION_LEN)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Reached maximum prefix count %d\n", VIRTUAL_ADDRESS, X86_MAX_PREFIX_LENGTH);
- goto abort;
- }
- else if (Instruction->PrefixCount == X86_MAX_PREFIX_LENGTH)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Reached maximum prefix count %d\n", VIRTUAL_ADDRESS, X86_MAX_PREFIX_LENGTH);
- Instruction->AnomalyOccurred = TRUE;
- }
-
- assert(Instruction->AnomalyOccurred || Instruction->PrefixCount < X86_MAX_PREFIX_LENGTH);
- Instruction->Prefixes[Instruction->PrefixCount] = Opcode;
- Instruction->PrefixCount++;
- //DISASM_OUTPUT(("[0x%08I64X] Prefix 0x%02X (prefix count %d)\n", VIRTUAL_ADDRESS, Opcode, Instruction->PrefixCount));
- }
- else
- {
- break;
- }
- }
-
- // Check for REX opcode
- // This is checked here instead of the prefix loop above because it must be the
- // last prefix
- if (IS_AMD64() && (Opcode >= REX_PREFIX_START && Opcode <= REX_PREFIX_END))
- {
- if (Instruction->PrefixCount >= X86_MAX_INSTRUCTION_LEN)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Reached maximum prefix count %d\n", VIRTUAL_ADDRESS, X86_MAX_PREFIX_LENGTH);
- goto abort;
- }
- else if (!Instruction->AnomalyOccurred && Instruction->PrefixCount == AMD64_MAX_PREFIX_LENGTH)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Reached maximum prefix count %d\n", VIRTUAL_ADDRESS, X86_MAX_PREFIX_LENGTH);
- Instruction->AnomalyOccurred = TRUE;
- }
-
- assert(Instruction->AnomalyOccurred || Instruction->PrefixCount < AMD64_MAX_PREFIX_LENGTH);
-
- Instruction->Prefixes[Instruction->PrefixCount] = Opcode;
- Instruction->PrefixCount++;
- X86Instruction->rex_b = Opcode;
- SET_REX(X86Instruction->rex, X86Instruction->rex_b);
- DISASM_OUTPUT(("[0x%08I64X] REX prefix 0x%02X (prefix count %d, w=%d, r=%d, x=%d, b=%d)\n", VIRTUAL_ADDRESS, Opcode, Instruction->PrefixCount, X86Instruction->rex.w, X86Instruction->rex.r, X86Instruction->rex.x, X86Instruction->rex.b));
-
- assert(X86Instruction->AddressSize >= 4);
- if (X86Instruction->rex.w)
- {
- X86Instruction->OperandSize = 8;
- X86Instruction->HasOperandSizePrefix = FALSE;
- }
- else if (X86Instruction->HasOperandSizePrefix)
- {
- assert(X86Instruction->OperandSize == 2);
- }
- else if (X86Instruction->rex_b == REX_PREFIX_START)
- {
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: meaningless REX prefix used\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- X86Instruction->rex_b = 0;
- }
-
- Opcode = *Address;
- INSTR_INC(1); // increment Instruction->Length and address
-
- X86Opcode = &X86_Opcodes_1[Opcode];
- assert(!X86_PREFIX(X86Opcode));
- }
- //DISASM_OUTPUT(("[0x%08I64X] OperandSize = %d, AddressSize = %d\n", VIRTUAL_ADDRESS, X86Instruction->OperandSize, X86Instruction->AddressSize));
- Instruction->LastOpcode = Opcode;
- Instruction->OpcodeAddress = Address-1;
-
- if (X86_INVALID(X86Opcode))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Invalid opcode 0x%02X\n", VIRTUAL_ADDRESS, Opcode);
- goto abort;
- }
-
- if (Opcode == X86_TWO_BYTE_OPCODE)
- {
- //
- // Handle case that it is a group (with opcode extension), floating point, or two byte opcode
- //
- assert(!Instruction->OpcodeLength);
- Instruction->LastOpcode = Opcode = *Address;
- INSTR_INC(1); // increment Instruction->Length and address
- assert(X86Opcode->Table == X86_Opcodes_2);
- X86Opcode = &X86_Opcodes_2[Opcode];
-
- //
- // Check for errors
- //
- if (X86_INVALID(X86Opcode))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Invalid two byte opcode 0x%02X 0x%02X\n", VIRTUAL_ADDRESS, X86_TWO_BYTE_OPCODE, Opcode);
- goto abort;
- }
-
- if (X86Instruction->AddressSize == 8)
- {
- if (X86_Invalid_Addr64_2[Opcode])
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Opcode 0x%02X 0x%02X (\"%s\") illegal in 64-bit mode\n", VIRTUAL_ADDRESS, X86_TWO_BYTE_OPCODE, Opcode, X86Opcode->Mnemonic);
- goto abort;
- }
-#if 0
- if (X86Instruction->rex_b &&
- (GET_REX_B(X86Instruction->rex_b) && !GET_REX_B(X86_REX_2[Opcode]) ||
- GET_REX_X(X86Instruction->rex_b) && !GET_REX_X(X86_REX_2[Opcode]) ||
- GET_REX_R(X86Instruction->rex_b) && !GET_REX_R(X86_REX_2[Opcode]) ||
- GET_REX_W(X86Instruction->rex_b) && !GET_REX_W(X86_REX_2[Opcode])))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Illegal REX prefix 0x%02X for opcode 0x%02X 0x%02X\n", VIRTUAL_ADDRESS, X86Instruction->rex_b, X86_TWO_BYTE_OPCODE, Opcode);
- assert(0);
- goto abort;
- }
-#endif
- }
-
- if (X86Instruction->OperandSize == 2 && X86_Invalid_Op16_2[Opcode])
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Opcode 0x%02X 0x%02X (\"%s\") illegal with 16-bit operand size\n", VIRTUAL_ADDRESS, X86_TWO_BYTE_OPCODE, Opcode, X86Opcode->Mnemonic);
- goto abort;
- }
-
- X86Instruction->HasModRM = X86_ModRM_2[Opcode];
- if (X86Instruction->HasModRM) X86Instruction->modrm_b = *Address;
- Instruction->OpcodeBytes[0] = X86_TWO_BYTE_OPCODE;
- Instruction->OpcodeBytes[1] = Opcode;
- Instruction->OpcodeLength = 2;
-
- if (X86_SPECIAL_EXTENSION(X86Opcode))
- {
- DISASM_OUTPUT(("[0x%08I64X] Special opcode extension 0x%02X 0x%02X\n", VIRTUAL_ADDRESS, X86_TWO_BYTE_OPCODE, Opcode));
- SpecialExtension = TRUE;
- goto HasSpecialExtension;
- }
- else if (SSE_Prefix && !X86_INVALID(&X86_SSE[Opcode])) // SSEx instruction
- {
- Instruction->OpcodeLength = 3;
- Instruction->OpcodeBytes[2] = SSE_Prefix;
- assert(Instruction->OpcodeBytes[1] == Opcode);
-
- // Since the prefix was really an opcode extension, remove it from
- // the prefix list
- for (i = 0; i < Instruction->PrefixCount; i++)
- {
- if (Instruction->Prefixes[i]) break;
- }
- assert(i != Instruction->PrefixCount);
- Instruction->PrefixCount--;
- Instruction->Prefixes[i] = 0;
-
- // Slide any prefixes following the removed prefix down by 1
- memmove(&Instruction->Prefixes[i], &Instruction->Prefixes[i+1], Instruction->PrefixCount-i);
- Instruction->Prefixes[Instruction->PrefixCount] = 0;
- Instruction->Repeat = FALSE;
- X86Instruction->HasRepeatWhileEqualPrefix = FALSE;
- X86Instruction->HasRepeatWhileNotEqualPrefix = FALSE;
- X86Instruction->HasOperandSizePrefix = FALSE;
- if (SSE_Prefix == PREFIX_OPERAND_SIZE)
- {
- if (IS_AMD64() && X86Instruction->rex.w) X86Instruction->OperandSize = 8;
- else X86Instruction->OperandSize = 4;
- }
-
- if (IS_X86_16())
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: SSE invalid in 16-bit mode\n", VIRTUAL_ADDRESS);
- goto abort;
- }
-
- assert(X86Instruction->HasModRM);
- switch (SSE_Prefix)
- {
- case PREFIX_OPERAND_SIZE: X86Opcode = &X86_SSE[0x000+Opcode]; break;
- case PREFIX_REPNE: X86Opcode = &X86_SSE[0x100+Opcode]; break;
- case PREFIX_REP: X86Opcode = &X86_SSE[0x200+Opcode]; break;
- }
-
- if (X86_INVALID(X86Opcode))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Illegal SSE instruction opcode 0x%02X 0x%02X + prefix 0x%02X\n", VIRTUAL_ADDRESS, Instruction->OpcodeBytes[0], Instruction->OpcodeBytes[1], Instruction->OpcodeBytes[2]);
- goto abort;
- }
- else if (X86_EXTENDED_OPCODE(X86Opcode))
- {
- // SSE in group (13, 14, or 15)
- OpcodeExtension = GET_MODRM_EXT(X86Instruction->modrm_b);
- Group = X86_Groups_2[Opcode];
- X86Instruction->Group = (U8)Group;
- assert(Group >= 13 && Group <= 15 && X86Opcode->Table);
- switch (SSE_Prefix)
- {
- case PREFIX_OPERAND_SIZE: X86Opcode = &X86Opcode->Table[0x00+OpcodeExtension]; break;
- case PREFIX_REPNE: X86Opcode = &X86Opcode->Table[0x08+OpcodeExtension]; break;
- case PREFIX_REP: X86Opcode = &X86Opcode->Table[0x10+OpcodeExtension]; break;
- }
-
- if (X86_INVALID(X86Opcode))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Illegal SSE instruction opcode 0x%02X 0x%02X + prefix 0x%02X + extension %d\n", VIRTUAL_ADDRESS, Instruction->OpcodeBytes[0], Instruction->OpcodeBytes[1], Instruction->OpcodeBytes[2], OpcodeExtension);
- goto abort;
- }
- }
-
- Instruction->Repeat = FALSE;
- X86Instruction->HasRepeatWhileEqualPrefix = FALSE;
- X86Instruction->HasRepeatWhileNotEqualPrefix = FALSE;
- X86Instruction->HasOperandSizePrefix = FALSE;
- switch (X86_GET_CATEGORY(X86Opcode))
- {
- case ITYPE_SSE: case ITYPE_SSE2: case ITYPE_SSE3: break;
- default: assert(0); goto abort;
- }
- }
- else if (X86_EXTENDED_OPCODE(X86Opcode)) // 2 byte group
- {
- assert(!X86Opcode->MnemonicFlags);
- OpcodeExtension = GET_MODRM_EXT(X86Instruction->modrm_b);
-
- assert(X86Opcode->Table);
- X86Opcode = &X86Opcode->Table[OpcodeExtension];
- if (X86_INVALID(X86Opcode))
- {
- Instruction->Length++;
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Invalid group opcode 0x%02X 0x%02X extension 0x%02X\n", VIRTUAL_ADDRESS, X86_TWO_BYTE_OPCODE, Opcode, OpcodeExtension);
- goto abort;
- }
-
- assert(!X86_SPECIAL_EXTENSION(X86Opcode));
- Group = X86_Groups_2[Opcode];
- X86Instruction->Group = (U8)Group;
- assert(Group > 0 && Group <= 19);
- assert(X86Opcode->Mnemonic);
- DISASM_OUTPUT(("[0x%08I64X] Group %d (bytes 0x%02X 0x%02X) extension 0x%02X (\"%s\")\n", VIRTUAL_ADDRESS, Group, X86_TWO_BYTE_OPCODE, Opcode, OpcodeExtension, X86Opcode->Mnemonic));
- }
- else
- {
- assert(X86Opcode->Mnemonic);
- DISASM_OUTPUT(("[0x%08I64X] Two byte opcode 0x%02X 0x%02X (\"%s\")\n", VIRTUAL_ADDRESS, X86_TWO_BYTE_OPCODE, Opcode, X86Opcode->Mnemonic));
- X86Instruction->HasModRM = X86_ModRM_2[Opcode];
- if (X86Instruction->HasModRM) X86Instruction->modrm_b = *Address;
- }
- }
- else // 1-byte opcode
- {
- if (X86Instruction->AddressSize == 8)
- {
- if (X86_Invalid_Addr64_1[Opcode])
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Opcode 0x%02X (\"%s\") illegal in 64-bit mode\n", VIRTUAL_ADDRESS, Opcode, X86Opcode->Mnemonic);
- goto abort;
- }
-
-#if 0
- if (X86Instruction->rex_b &&
- (GET_REX_B(X86Instruction->rex_b) && !GET_REX_B(X86_REX_1[Opcode]) ||
- GET_REX_X(X86Instruction->rex_b) && !GET_REX_X(X86_REX_1[Opcode]) ||
- GET_REX_R(X86Instruction->rex_b) && !GET_REX_R(X86_REX_1[Opcode]) ||
- GET_REX_W(X86Instruction->rex_b) && !GET_REX_W(X86_REX_1[Opcode])))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Illegal REX prefix 0x%02X for opcode 0x%02X\n", VIRTUAL_ADDRESS, X86Instruction->rex_b, Opcode);
- assert(0);
- goto abort;
- }
-#endif
- }
-
- if (X86Instruction->OperandSize == 2 && X86_Invalid_Op16_1[Opcode])
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Opcode 0x%02X (\"%s\") illegal with 16-bit operand size\n", VIRTUAL_ADDRESS, Opcode, X86Opcode->Mnemonic);
- goto abort;
- }
-
- Instruction->OpcodeBytes[0] = Opcode;
- Instruction->OpcodeLength = 1;
- X86Instruction->HasModRM = X86_ModRM_1[Opcode];
- if (X86Instruction->HasModRM) X86Instruction->modrm_b = *Address;
-
- if (X86_EXTENDED_OPCODE(X86Opcode)) // a group
- {
- assert(X86Instruction->HasModRM);
- OpcodeExtension = GET_MODRM_EXT(*Address); // leave Address pointing at ModRM byte
-
- if (X86_SPECIAL_EXTENSION(X86Opcode))
- {
- DISASM_OUTPUT(("[0x%08I64X] Special opcode extension 0x%02X 0x%02X\n", VIRTUAL_ADDRESS, X86_TWO_BYTE_OPCODE, Opcode));
- SpecialExtension = TRUE;
- goto HasSpecialExtension;
- }
-
- assert(X86Opcode->Table);
- X86Opcode = &X86Opcode->Table[OpcodeExtension];
- if (X86_INVALID(X86Opcode))
- {
- Instruction->Length++;
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Invalid group opcode 0x%02X extension 0x%02X\n", VIRTUAL_ADDRESS, Opcode, OpcodeExtension);
- goto abort;
- }
-
- Group = X86_Groups_1[Opcode];
- X86Instruction->Group = (U8)Group;
- DISASM_OUTPUT(("[0x%08I64X] Group %d (byte 0x%02X) extension 0x%02X (\"%s\")\n", VIRTUAL_ADDRESS, Group, Opcode, OpcodeExtension, X86Opcode->Mnemonic));
- assert(Group > 0 && Group <= 17);
- assert(X86Opcode->Mnemonic);
- }
- else
- {
- if (X86_SPECIAL_EXTENSION(X86Opcode))
- {
- DISASM_OUTPUT(("[0x%08I64X] Special opcode extension 0x%02X\n", VIRTUAL_ADDRESS, Opcode));
- SpecialExtension = TRUE;
- goto HasSpecialExtension;
- }
-
- DISASM_OUTPUT(("[0x%08I64X] One byte opcode 0x%02X (\"%s\")\n", VIRTUAL_ADDRESS, Opcode, X86Opcode->Mnemonic));
- }
- }
-
-HasSpecialExtension:
- if (SpecialExtension)
- {
- if (X86Opcode->MnemonicFlags & ITYPE_EXT_MODRM)
- {
- assert(X86Opcode->Table);
- assert(Instruction->OpcodeLength == 2);
- assert(X86Instruction->HasModRM);
- X86Opcode = &X86Opcode->Table[*Address];
- if (X86_INVALID(X86Opcode))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Illegal opcode 0x%02X 0x%02X + modrm 0x%02X\n", VIRTUAL_ADDRESS, Instruction->OpcodeBytes[0], Instruction->OpcodeBytes[1], *Address);
- goto abort;
- }
- else if (X86_EXTENDED_OPCODE(X86Opcode))
- {
- assert(!X86Opcode->MnemonicFlags);
- OpcodeExtension = GET_MODRM_EXT(X86Instruction->modrm_b);
-
- assert(X86Opcode->Table);
- X86Opcode = &X86Opcode->Table[OpcodeExtension];
- if (X86_INVALID(X86Opcode))
- {
- Instruction->Length++;
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Invalid group opcode 0x%02X 0x%02X extension 0x%02X\n", VIRTUAL_ADDRESS, X86_TWO_BYTE_OPCODE, Opcode, OpcodeExtension);
- goto abort;
- }
-
- assert(!X86_SPECIAL_EXTENSION(X86Opcode));
- Group = X86_Groups_2[Opcode];
- X86Instruction->Group = (U8)Group;
- assert(Group > 0 && Group <= 19);
- assert(X86Opcode->Mnemonic);
- DISASM_OUTPUT(("[0x%08I64X] Group %d (bytes 0x%02X 0x%02X) extension 0x%02X (\"%s\")\n", VIRTUAL_ADDRESS, Group, X86_TWO_BYTE_OPCODE, Opcode, OpcodeExtension, X86Opcode->Mnemonic));
- }
- else if (!X86_OPERAND_COUNT(X86Opcode))
- {
- INSTR_INC(1); // increment Instruction->Length and address
- }
- }
- else if (X86Opcode->MnemonicFlags & ITYPE_EXT_FPU)
- {
- assert(X86Opcode->Table);
- if (X86Instruction->modrm_b < 0xC0)
- {
- // It is an opcode extension, use the X86Opcode->Table
- OpcodeExtension = GET_MODRM_EXT(X86Instruction->modrm_b);
- X86Opcode = &X86Opcode->Table[OpcodeExtension];
- }
- else
- {
- // The whole ModRM byte is used, these start at index 0x08 in X86Opcode->Table
- OpcodeExtension = (X86Instruction->modrm_b & 0x3F);
- X86Opcode = &X86Opcode->Table[0x08 + OpcodeExtension];
- }
-
- if (X86_INVALID(X86Opcode))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Invalid FPU opcode 0x%02X + modrm extension 0x%02X (index 0x%02X)\n", VIRTUAL_ADDRESS, Opcode, X86Instruction->modrm_b, 0x08 + OpcodeExtension);
- goto abort;
- }
-
- DISASM_OUTPUT(("[0x%08I64X] FPU instruction is (\"%s\"): 0x%02X + modrm 0x%02X (index 0x%02X)\n", VIRTUAL_ADDRESS, X86Opcode->Mnemonic, Opcode, X86Instruction->modrm_b, 0x08 + OpcodeExtension));
- if (!X86_OPERAND_COUNT(X86Opcode)) INSTR_INC(1); // increment Instruction->Length and address
- }
- else if (X86Opcode->MnemonicFlags & ITYPE_EXT_SUFFIX)
- {
- if (X86Instruction->HasOperandSizePrefix)
- {
- if (!Instruction->AnomalyOccurred && X86Opcode->Table == X86_3DNOW_0F)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: operand size prefix used with 3DNOW instruction\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- X86Instruction->HasOperandSizePrefix = FALSE;
- X86Instruction->OperandSize = 4;
- }
- Instruction->OperandCount = X86_OPERAND_COUNT(X86Opcode);
- assert(Instruction->OpcodeLength == 2 && X86Instruction->HasModRM && Instruction->OperandCount == 2);
- memcpy(&X86Instruction->Opcode, X86Opcode, sizeof(X86_OPCODE));
- Instruction->Operands[0].Flags = X86Opcode->OperandFlags[0] & X86_OPFLAGS_MASK;
- Instruction->Operands[1].Flags = X86Opcode->OperandFlags[1] & X86_OPFLAGS_MASK;
- Instruction->Operands[2].Flags = X86Opcode->OperandFlags[2] & X86_OPFLAGS_MASK;
- assert(Address == Instruction->Address + Instruction->Length);
- if (!SetOperands(Instruction, Address, Flags & DISASM_SUPPRESSERRORS)) goto abort;
- Suffix = Instruction->Address[Instruction->Length++];
- Instruction->OpcodeBytes[2] = Suffix;
- Instruction->OpcodeLength = 3;
- X86Opcode = &X86Opcode->Table[Suffix];
-
- if (X86_INVALID(X86Opcode))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Illegal opcode 0x%02X 0x%02X + suffix 0x%02X\n", VIRTUAL_ADDRESS, Instruction->OpcodeBytes[0], Instruction->OpcodeBytes[1], Suffix);
- goto abort;
- }
- assert(Instruction->Length >= 4 + Instruction->PrefixCount);
- }
- else if (X86Opcode->MnemonicFlags & ITYPE_EXT_64)
- {
- assert(X86Opcode->Table);
- if (IS_AMD64()) X86Opcode = &X86Opcode->Table[1];
- else X86Opcode = &X86Opcode->Table[0];
- assert(!X86_INVALID(X86Opcode));
- }
- }
-
- // Detect incompatibilities
- if (IS_X86_16() && X86Opcode->CPU > CPU_I386)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Instruction \"%s\" (opcode 0x%02X) can't be used in 16-bit X86\n", VIRTUAL_ADDRESS, X86Opcode->Mnemonic, Instruction->LastOpcode);
- goto abort;
- }
- if (!IS_AMD64() && X86Opcode->CPU >= CPU_AMD64)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Instruction \"%s\" (opcode 0x%02X) can only be used in X86-64\n", VIRTUAL_ADDRESS, X86Opcode->Mnemonic, Instruction->LastOpcode);
- goto abort;
- }
-
- // Copy the opcode into the local structure and set the fields
- assert(Instruction->OpcodeLength && !X86_INVALID(X86Opcode));
- memcpy(&X86Instruction->Opcode, X86Opcode, sizeof(X86_OPCODE));
- Instruction->Groups |= X86_GET_CATEGORY(X86Opcode);
- assert(Instruction->Groups);
- Instruction->Type |= X86_GET_TYPE(X86Opcode);
- assert((U32)Instruction->Type >= Instruction->Groups);
- Instruction->OperandCount = X86_OPERAND_COUNT(X86Opcode);
-
- //
- // Sanity check prefixes now that opcode is known and prefixes are resolved
- //
-
- // Instructions that implicitly reference the CS/DS can't have segment override prefixes
- switch (Instruction->Type)
- {
- case ITYPE_PUSHF: case ITYPE_POPF:
- case ITYPE_ENTER: case ITYPE_LEAVE:
- SANITY_CHECK_SEGMENT_OVERRIDE();
- X86Instruction->HasSegmentOverridePrefix = FALSE;
- X86Instruction->Segment = SEG_SS;
- break;
- case ITYPE_RET: case ITYPE_DEBUG:
- case ITYPE_OFLOW: case ITYPE_TRAP:
- case ITYPE_TRAPRET:
- SANITY_CHECK_SEGMENT_OVERRIDE();
- X86Instruction->HasSegmentOverridePrefix = FALSE;
- X86Instruction->Segment = SEG_CS;
- break;
- }
-
- // Check illegal prefixes used with FPU/MMX/SSEx
- if (Instruction->Groups & (ITYPE_FPU|ITYPE_MMX|ITYPE_SSE|ITYPE_SSE2|ITYPE_SSE3))
- {
- // Check for prefixes that produce unpredictable results
- for (i = 0; i < Instruction->PrefixCount; i++)
- {
- switch (Instruction->Prefixes[i])
- {
- case PREFIX_OPERAND_SIZE:
- switch (Instruction->Type)
- {
- case ITYPE_FSTOREENV: case ITYPE_FLOADENV: case ITYPE_FSAVE: case ITYPE_FRESTORE: continue;
- default: break;
- }
-
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: operand size prefix used with FPU/MMX/SSEx\n", VIRTUAL_ADDRESS);
- goto abort;
- }
- X86Instruction->HasOperandSizePrefix = FALSE;
- if (X86Instruction->OperandSize == 2) X86Instruction->OperandSize = 2;
- break;
-
- case PREFIX_REPNE:
- case PREFIX_REP:
- if (Instruction->Groups & ITYPE_FPU) { assert(Instruction->Repeat); continue; }
- // The Intel manual says this results in unpredictable behavior -- it's not even
- // clear which SSE prefix is used as the third opcode byte in this case
- // (e.g., is it the first or last SSE prefix?)
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: rep/repne used with MMX/SSEx\n", VIRTUAL_ADDRESS);
- goto abort;
-
- default:
- break;
- }
- }
- }
-
- // Check for conflicts involving operand size
- if (IS_AMD64())
- {
- // Check for use of rex.w=1 with an operand size prefix
- if (X86Instruction->rex.w)
- {
- assert(X86Instruction->OperandSize == 8);
- for (i = 0; i < Instruction->PrefixCount; i++)
- {
- if (Instruction->Prefixes[i] == PREFIX_OPERAND_SIZE)
- {
- X86Instruction->HasOperandSizePrefix = FALSE;
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: use of operand size prefix meaningless when REX.w=1\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- }
- }
- }
-
- // Set default operand size to 64 instead of 32 for some instructions
- switch (Instruction->Type)
- {
- case ITYPE_PUSH: case ITYPE_POP:
- case ITYPE_PUSHF: case ITYPE_POPF:
- case ITYPE_ENTER: case ITYPE_LEAVE:
- case ITYPE_CALL: case ITYPE_BRANCH:
- case ITYPE_LOOPCC: case ITYPE_RET:
- X86Instruction->HasDefault64Operand = TRUE;
- break;
-
- case ITYPE_SYSTEM:
- if (Instruction->OpcodeLength != 2) break;
-
- // lgdt/lidt/lldt/ltr
- if ((Instruction->LastOpcode == 0x00 || Instruction->LastOpcode == 0x01) &&
- (OpcodeExtension == 0x02 || OpcodeExtension == 0x03))
- {
- X86Instruction->HasDefault64Operand = TRUE;
- }
- break;
-
- default:
- break;
- }
-
- if (X86Instruction->HasDefault64Operand)
- {
- if (X86Instruction->rex.w)
- {
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: use of REX.w is meaningless (default operand size is 64)\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- X86Instruction->rex_b &= ~8;
- X86Instruction->rex.w = 0;
- }
-
- if (X86Instruction->HasOperandSizePrefix)
- {
- assert(X86Instruction->OperandSize == 2);
- X86Instruction->HasDefault64Operand = FALSE;
- }
- else
- {
- assert(X86Instruction->OperandSize >= 4);
- X86Instruction->OperandSize = 8;
- }
- }
- }
-
- // Make sure rep/repe/repne is set correctly based on instruction
- if (Instruction->Repeat)
- {
- switch (Instruction->Type)
- {
- case ITYPE_IN:
- case ITYPE_OUT:
- case ITYPE_STRMOV:
- case ITYPE_STRSTOR:
- case ITYPE_STRLOAD:
- if (X86Instruction->HasRepeatWhileNotEqualPrefix)
- {
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: REPNE should only be used with cmps/scas\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- // Treat it as just a "rep"
- X86Instruction->HasRepeatWhileNotEqualPrefix = FALSE;
- X86Instruction->HasRepeatWhileEqualPrefix = TRUE;
- }
- break;
- case ITYPE_STRCMP:
- break;
- default:
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Repeat prefix used with non-string instruction\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- Instruction->Repeat = FALSE;
- X86Instruction->HasRepeatWhileEqualPrefix = FALSE;
- X86Instruction->HasRepeatWhileNotEqualPrefix = FALSE;
- break;
- }
- }
-
- if (Disassemble)
- {
- assert(!Instruction->StringIndex);
- if (X86Instruction->HasRepeatWhileEqualPrefix)
- {
- if (Instruction->Type == ITYPE_STRCMP) { APPENDS("repe "); }
- else { APPENDS("rep "); }
- }
- if (X86Instruction->HasRepeatWhileNotEqualPrefix) APPENDS("repne ");
- if (X86Instruction->HasLockPrefix) APPENDS("lock ");
- if (X86Instruction->HasBranchTakenPrefix) APPENDS("hinttake ");
- if (X86Instruction->HasBranchNotTakenPrefix) APPENDS("hintskip ");
- APPENDPAD(12);
- APPEND(OPCSTR, SIZE_LEFT, "%s", X86Opcode->Mnemonic);
- APPENDPAD(24);
- }
-
- if (Instruction->OperandCount)
- {
- Instruction->Operands[0].Flags = X86Opcode->OperandFlags[0] & X86_OPFLAGS_MASK;
- Instruction->Operands[1].Flags = X86Opcode->OperandFlags[1] & X86_OPFLAGS_MASK;
- Instruction->Operands[2].Flags = X86Opcode->OperandFlags[2] & X86_OPFLAGS_MASK;
- Address = SetOperands(Instruction, Address, Flags);
- if (!Address) goto abort;
- assert(!(Instruction->Operands[0].Flags & 0x7F));
- assert(!(Instruction->Operands[1].Flags & 0x7F));
- assert(!(Instruction->Operands[2].Flags & 0x7F));
- }
-
- Disassembler->Stage2Count++;
-
-#ifdef TEST_DISASM
- //////////////////////////////////////////////////////////////////////
- // Test against other disassemblers
- //////////////////////////////////////////////////////////////////////
-
- if (IS_X86_32())
- {
- InstructionLength = X86_GetLength(Instruction, Instruction->Address);
- if (InstructionLength && Instruction->Length != InstructionLength)
- {
- printf("[0x%08I64X] WARNING: instruction lengths differ (%d vs %d)\n", VIRTUAL_ADDRESS, Instruction->Length, InstructionLength);
- DumpInstruction(Instruction, TRUE, TRUE);
- assert(0);
- }
- }
- else if (IS_AMD64())
- {
- // TODO: need other amd64 (x86-64) disassembler to test against
- }
- else if (IS_X86_16())
- {
- // TODO: need other x86 16-bit disassembler to test against
- }
-#endif
-
- //////////////////////////////////////////////////////////////////////
- // Post-operand sanity checks
- //////////////////////////////////////////////////////////////////////
-
- if (!X86Instruction->HasDstAddressing && !X86Instruction->HasSrcAddressing)
- {
- if (X86Instruction->HasAddressSizePrefix)
- {
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: address size prefix used with no addressing\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- X86Instruction->HasAddressSizePrefix = FALSE;
- }
-
- if (X86Instruction->HasSegmentOverridePrefix)
- {
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: segment override used with no addressing\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- X86Instruction->HasSegmentOverridePrefix = FALSE;
- }
- }
-
- // Detect use of unusual segments
- if (!Instruction->AnomalyOccurred && !IS_X86_16())
- {
- switch (X86Instruction->Segment)
- {
- case SEG_CS: case SEG_DS: case SEG_SS:
- break;
- case SEG_ES:
- switch (Instruction->Type)
- {
- case ITYPE_IN: case ITYPE_STRMOV: case ITYPE_STRCMP: case ITYPE_STRSTOR:
- break;
- default:
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: use of unexpected segment ES\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- break;
- }
- break;
- case SEG_FS:
- if (IS_X86_32() && !(Instruction->Groups & ITYPE_EXEC)) break;
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: use of unexpected segment FS\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- break;
- case SEG_GS:
- if (IS_AMD64() && !(Instruction->Groups & ITYPE_EXEC)) break;
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: use of unexpected segment GS\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- break;
- default:
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: unexpected segment 0x%02X\n", VIRTUAL_ADDRESS, X86Instruction->Selector);
- Instruction->AnomalyOccurred = TRUE;
- break;
- }
- }
-
- if ((X86Opcode->OperandFlags[0] & OP_COND_EXEC) == OP_COND_EXEC)
- {
- assert(Instruction->Type == ITYPE_BRANCHCC || Instruction->Type == ITYPE_LOOPCC);
- for (i = 0; i < Instruction->PrefixCount; i++)
- {
- switch (Instruction->Prefixes[i])
- {
- case PREFIX_BRANCH_NOT_TAKEN:
- if (!Instruction->AnomalyOccurred && X86Instruction->Segment != SEG_CS)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Segment override used with conditional branch\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- X86Instruction->HasSegmentOverridePrefix = FALSE;
- X86Instruction->Segment = SEG_CS;
- X86Instruction->HasBranchNotTakenPrefix = TRUE;
- break;
- case PREFIX_BRANCH_TAKEN:
- if (!Instruction->AnomalyOccurred && X86Instruction->Segment != SEG_DS)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Segment override used with conditional branch\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- X86Instruction->HasSegmentOverridePrefix = FALSE;
- X86Instruction->Segment = SEG_CS;
- X86Instruction->HasBranchTakenPrefix = TRUE;
- break;
- }
- }
- }
-
- //
- // If lock prefix is enabled, verify it is valid
- //
- if (X86Instruction->HasLockPrefix &&
- !IsValidLockPrefix(X86Instruction, Opcode, Instruction->OpcodeLength, Group, OpcodeExtension))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: Illegal use of lock prefix for instruction \"%s\"\n", VIRTUAL_ADDRESS, X86Opcode->Mnemonic);
- goto abort;
- }
-
- //////////////////////////////////////////////////////////////////////
- // Generate disassembly output
- //////////////////////////////////////////////////////////////////////
-
- if (Disassemble)
- {
- if ((Flags & DISASM_SHOWFLAGS) &&
- (X86Instruction->Opcode.Preconditions || X86Instruction->Opcode.FlagsChanged || X86Instruction->Opcode.ResultsIfTrue))
- {
- APPENDPAD(124);
- if (X86Instruction->Opcode.Preconditions)
- {
- Result = X86Instruction->Opcode.Preconditions;
- APPENDS("COND:{ ");
- if (Result & COND_L) APPENDS("L ");
- if (Result & COND_NL) APPENDS("NL ");
- if (Result & COND_LE) APPENDS("LE ");
- if (Result & COND_NLE) APPENDS("NLE ");
- if (Result & COND_G) APPENDS("G ");
- if (Result & COND_NG) APPENDS("NG ");
- if (Result & COND_GE) APPENDS("GE ");
- if (Result & COND_NGE) APPENDS("NGE ");
- if (Result & COND_A) APPENDS("A ");
- if (Result & COND_NA) APPENDS("NA ");
- if (Result & COND_AE) APPENDS("AE ");
- if (Result & COND_NAE) APPENDS("NAE ");
- if (Result & COND_B) APPENDS("B ");
- if (Result & COND_NB) APPENDS("NB ");
- if (Result & COND_BE) APPENDS("BE ");
- if (Result & COND_NBE) APPENDS("NBE ");
- if (Result & COND_E) APPENDS("E ");
- if (Result & COND_NE) APPENDS("NE ");
- if (Result & COND_C) APPENDS("C ");
- if (Result & COND_NC) APPENDS("NC ");
- if (Result & COND_Z) APPENDS("Z ");
- if (Result & COND_NZ) APPENDS("NZ ");
- if (Result & COND_P) APPENDS("P ");
- if (Result & COND_NP) APPENDS("NP ");
- if (Result & COND_PE) APPENDS("PE ");
- if (Result & COND_PO) APPENDS("PO ");
- if (Result & COND_O) APPENDS("O ");
- if (Result & COND_NO) APPENDS("NO ");
- if (Result & COND_U) APPENDS("U ");
- if (Result & COND_NU) APPENDS("NU ");
- if (Result & COND_S) APPENDS("S ");
- if (Result & COND_NS) APPENDS("NS ");
- if (Result & COND_D) APPENDS("D ");
- APPENDB('}');
- }
-
- if (X86Instruction->Opcode.FlagsChanged)
- {
- Result = X86Instruction->Opcode.FlagsChanged;
-
- if (Result & FLAG_SET_MASK)
- {
- APPENDS("SET:{ ");
- if (Result & FLAG_CF_SET) APPENDS("C ");
- if (Result & FLAG_DF_SET) APPENDS("D ");
- if (Result & FLAG_IF_SET) APPENDS("I ");
- APPENDB('}');
- }
-
- if (Result & FLAG_CLR_MASK)
- {
- APPENDS("CLR:{ ");
- if (Result & FLAG_SF_CLR) APPENDS("S ");
- if (Result & FLAG_ZF_CLR) APPENDS("Z ");
- if (Result & FLAG_AF_CLR) APPENDS("A ");
- if (Result & FLAG_CF_CLR) APPENDS("C ");
- if (Result & FLAG_DF_CLR) APPENDS("D ");
- if (Result & FLAG_IF_CLR) APPENDS("I ");
- if (Result & FLAG_OF_CLR) APPENDS("O ");
- if ((Result & FPU_ALL_CLR) == FPU_ALL_CLR)
- {
- APPENDS("FPU_ALL ");
- }
- else
- {
- if (Result & FPU_C0_CLR) APPENDS("FPU_C0 ");
- if (Result & FPU_C1_CLR) APPENDS("FPU_C1 ");
- if (Result & FPU_C2_CLR) APPENDS("FPU_C2 ");
- if (Result & FPU_C3_CLR) APPENDS("FPU_C3 ");
- }
- APPENDB('}');
- }
-
- if ((Result & FLAG_MOD_MASK) == FLAG_MOD_MASK)
- {
- APPENDS("MOD:{ ");
- if ((Result & FLAG_ALL_MOD) == FLAG_ALL_MOD)
- {
- APPENDS("FLAGS_ALL ");
- }
- else if ((Result & FLAG_COMMON_MOD) == FLAG_COMMON_MOD)
- {
- APPENDS("FLAGS_COMMON ");
- }
- else
- {
- if (Result & FLAG_OF_MOD) APPENDS("O ");
- if (Result & FLAG_SF_MOD) APPENDS("S ");
- if (Result & FLAG_ZF_MOD) APPENDS("Z ");
- if (Result & FLAG_AF_MOD) APPENDS("A ");
- if (Result & FLAG_PF_MOD) APPENDS("P ");
- if (Result & FLAG_CF_MOD) APPENDS("C ");
- if (Result & FLAG_DF_MOD) APPENDS("D ");
- if (Result & FLAG_IF_MOD) APPENDS("I ");
- }
- if ((Result & FPU_ALL_MOD) == FPU_ALL_MOD)
- {
- APPENDS("FPU_ALL ");
- }
- else
- {
- if (Result & FPU_C0_MOD) APPENDS("FPU_C0 ");
- if (Result & FPU_C1_MOD) APPENDS("FPU_C1 ");
- if (Result & FPU_C2_MOD) APPENDS("FPU_C2 ");
- if (Result & FPU_C3_MOD) APPENDS("FPU_C3 ");
- }
- APPENDB('}');
- }
-
- if (Result & FLAG_TOG_MASK)
- {
- APPENDS("TOG:{ ");
- if (Result & FLAG_CF_TOG) APPENDS("C ");
- APPENDB('}');
- }
- }
- }
-
- APPENDS("\n");
- }
- else
- {
- Instruction->String[0] = '\0';
- }
-
- if (!Instruction->Length || Instruction->Length > X86_MAX_INSTRUCTION_LEN)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: maximum instruction length reached (\"%s\")\n", VIRTUAL_ADDRESS, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
-
- if (!Decode)
- {
- Disassembler->Stage3CountNoDecode++;
- return TRUE; // all work is done
- }
-
- //////////////////////////////////////////////////////////////////////
- // Detect particularly interesting intructions
- //////////////////////////////////////////////////////////////////////
-
- Operand1 = &Instruction->Operands[0];
- if (Instruction->Groups & ITYPE_EXEC)
- {
- // If it is a negative offset with a 1-byte or 2-byte offset, assume it is a loop
- if (Operand1->Type == OPTYPE_OFFSET &&
- Operand1->Length <= 2 && X86Instruction->Displacement < 0)
- {
- Instruction->CodeBranch.IsLoop = TRUE;
- Instruction->CodeBranch.Operand = Operand1;
- }
-
- if (!Instruction->AnomalyOccurred &&
- Operand1->TargetAddress >= (U64)Instruction->Address &&
- Operand1->TargetAddress < (U64)Instruction->Address + Instruction->Length)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: branch into the middle of an instruction\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
-
- switch (Instruction->Type)
- {
- case ITYPE_BRANCH:
- Operand1->Flags |= OP_ADDRESS;
- assert(Instruction->OperandCount == 1);
- if (!(Operand1->Flags & (OP_GLOBAL|OP_FAR)))
- {
- assert(!X86Instruction->HasSelector);
- X86Instruction->Segment = SEG_CS;
- }
-
- if (Operand1->TargetAddress)
- {
- assert(!Instruction->CodeBranch.AddressOffset);
- Instruction->CodeBranch.Count = 1;
- Instruction->CodeBranch.Addresses[0] = Operand1->TargetAddress;
- Instruction->CodeBranch.Operand = Operand1;
- }
- // If there is both a base and index register, the Result will probably be too wrong
- // to even guess
- else if (X86Instruction->HasFullDisplacement &&
- ((X86Instruction->HasBaseRegister && !X86Instruction->HasIndexRegister) ||
- (!X86Instruction->HasBaseRegister && X86Instruction->HasIndexRegister)))
- {
- assert(Operand1->Length <= 0xFF);
- if (!X86Instruction->Scale)
- {
- if (Operand1->Length) X86Instruction->Scale = (U8)Operand1->Length;
- else X86Instruction->Scale = X86Instruction->OperandSize;
- }
- assert(Operand1->Length <= 0xFF);
- tmpScale = MAX(X86Instruction->Scale, Operand1->Length);
-
- assert(tmpScale <= 16);
- Instruction->CodeBranch.AddressOffset = (U8)tmpScale;
- for (i = 0; i < MAX_CODE_REFERENCE_COUNT; i++) Instruction->CodeBranch.Addresses[i] = (U64)X86Instruction->Displacement + (i * tmpScale);
- Instruction->CodeBranch.Count = i;
- Instruction->CodeBranch.IsIndirect = TRUE;
- Instruction->CodeBranch.Operand = Operand1;
- }
- break;
-
- case ITYPE_CALL:
- Instruction->Groups |= ITYPE_STACK;
- Instruction->CodeBranch.IsCall = TRUE;
- Operand1->Flags |= OP_ADDRESS;
- assert(Instruction->OperandCount == 1);
- if (!(Operand1->Flags & (OP_GLOBAL|OP_FAR)))
- {
- assert(!X86Instruction->HasSelector);
- X86Instruction->Segment = SEG_CS;
- }
-
- if (Operand1->TargetAddress)
- {
- assert(!Instruction->CodeBranch.AddressOffset);
- Instruction->CodeBranch.Count = 1;
- Instruction->CodeBranch.Addresses[0] = Operand1->TargetAddress;
- Instruction->CodeBranch.Operand = Operand1;
- }
- // If there is both a base and index register, the Result will probably be too wrong
- // to even guess
- else if (X86Instruction->HasFullDisplacement &&
- ((X86Instruction->HasBaseRegister && !X86Instruction->HasIndexRegister) ||
- (!X86Instruction->HasBaseRegister && X86Instruction->HasIndexRegister)))
- {
- //DISASM_OUTPUT(("[0x%08I64X] Scale %d, displacement 0x%08I64x\n", VIRTUAL_ADDRESS, X86Instruction->Scale, X86Instruction->Displacement));
- if (!X86Instruction->Scale)
- {
- assert(Operand1->Length <= 0xFF);
- if (Operand1->Length) X86Instruction->Scale = (U8)Operand1->Length;
- else X86Instruction->Scale = X86Instruction->OperandSize;
- }
- tmpScale = MAX(X86Instruction->Scale, Operand1->Length);
-
- assert(tmpScale <= 16);
- Instruction->CodeBranch.AddressOffset = (U8)tmpScale;
- assert(X86Instruction->Scale > 1);
- for (i = 0; i < MAX_CODE_REFERENCE_COUNT; i++) Instruction->CodeBranch.Addresses[i] = (U64)X86Instruction->Displacement + (i * tmpScale);
- Instruction->CodeBranch.Count = i;
- Instruction->CodeBranch.IsIndirect = TRUE;
- Instruction->CodeBranch.Operand = Operand1;
- }
- break;
-
- case ITYPE_BRANCHCC:
- assert(Instruction->OperandCount == 1);
- assert(Operand1->Flags & OP_ADDRESS);
- assert(Operand1->Type == OPTYPE_OFFSET);
- if (!(Operand1->Flags & (OP_GLOBAL|OP_FAR)))
- {
- assert(!X86Instruction->HasSelector);
- X86Instruction->Segment = SEG_CS;
- }
-
- if (Operand1->TargetAddress)
- {
- assert(!Instruction->CodeBranch.AddressOffset);
- Instruction->CodeBranch.Count = 2;
- Instruction->CodeBranch.Addresses[0] = Operand1->TargetAddress;
- Instruction->CodeBranch.Addresses[1] = (U64)Instruction->Address + Instruction->Length;
- Instruction->CodeBranch.Operand = Operand1;
- }
- break;
-
- case ITYPE_LOOPCC:
- Instruction->CodeBranch.IsLoop = TRUE;
- assert(Instruction->OperandCount == 1);
- assert(Operand1->Flags & OP_ADDRESS);
- assert(Operand1->Type == OPTYPE_OFFSET);
- assert(!(Operand1->Flags & (OP_GLOBAL|OP_FAR)));
- if (Operand1->TargetAddress)
- {
- assert(!Instruction->CodeBranch.AddressOffset);
- Instruction->CodeBranch.Count = 2;
- Instruction->CodeBranch.Addresses[0] = Operand1->TargetAddress;
- Instruction->CodeBranch.Addresses[1] = (U64)Instruction->Address + Instruction->Length;
- Instruction->CodeBranch.Operand = Operand1;
- }
- break;
-
- case ITYPE_RET:
- Instruction->Groups |= ITYPE_STACK;
- break;
-
- default:
- break; // do nothing
- }
- }
- else // possible data instruction
- {
- for (i = 0, Operand = Instruction->Operands; i < Instruction->OperandCount; i++, Operand++)
- {
- if (Operand->TargetAddress)
- {
- if (Operand->Flags & OP_DST)
- {
- assert(!Instruction->DataDst.Count);
- Instruction->DataDst.Count = 1;
- Instruction->DataDst.Addresses[0] = Operand->TargetAddress;
- Instruction->DataDst.DataSize = Operand->Length;
- Instruction->DataDst.Operand = Operand;
- DISASM_OUTPUT(("[0x%08I64X] Write of size %d to 0x%04I64X\n", VIRTUAL_ADDRESS, Operand->Length, Operand->TargetAddress));
- }
- if (Operand->Flags & OP_SRC)
- {
- assert(!Instruction->DataSrc.Count);
- Instruction->DataSrc.Count = 1;
- Instruction->DataSrc.Addresses[0] = Operand->TargetAddress;
- Instruction->DataSrc.DataSize = Operand->Length;
- Instruction->DataSrc.Operand = Operand;
- DISASM_OUTPUT(("[0x%08I64X] Read of size %d to 0x%04I64X\n", VIRTUAL_ADDRESS, Operand->Length, Operand->TargetAddress));
- }
- }
-
- // If there is both a base and index register, the Result will probably be too wrong
- // to even guess
- else if (Operand->Flags & OP_GLOBAL &&
- ((X86Instruction->HasBaseRegister && !X86Instruction->HasIndexRegister) ||
- (!X86Instruction->HasBaseRegister && X86Instruction->HasIndexRegister)))
- {
- DISASM_OUTPUT(("[0x%08I64X] Data reference (scale %d, size %d, displacement 0x%08I64x)\n", VIRTUAL_ADDRESS, X86Instruction->Scale, Operand->Length, X86Instruction->Displacement));
- if (!X86Instruction->Scale)
- {
- assert(Operand->Length <= 0xFF);
- if (Operand->Length) X86Instruction->Scale = (U8)Operand->Length;
- else X86Instruction->Scale = X86Instruction->OperandSize;
- }
- tmpScale = MAX(X86Instruction->Scale, Operand->Length);
-
- assert(X86Instruction->HasFullDisplacement);
- if (Operand->Flags & OP_DST)
- {
- assert(!Instruction->DataDst.Count);
- assert(tmpScale <= 16);
- Instruction->CodeBranch.AddressOffset = (U8)tmpScale;
- for (i = 0; i < MAX_DATA_REFERENCE_COUNT; i++) Instruction->DataDst.Addresses[i] = (U64)X86Instruction->Displacement + (i * tmpScale);
- Instruction->DataDst.Count = i;
- Instruction->DataDst.DataSize = Operand->Length;
- Instruction->DataDst.Operand = Operand;
- }
- if (Operand->Flags & OP_SRC)
- {
- assert(!Instruction->DataSrc.Count);
- assert(tmpScale <= 16);
- Instruction->CodeBranch.AddressOffset = (U8)tmpScale;
- for (i = 0; i < MAX_DATA_REFERENCE_COUNT; i++) Instruction->DataSrc.Addresses[i] = (U64)X86Instruction->Displacement + (i * tmpScale);
- Instruction->DataSrc.Count = i;
- Instruction->DataSrc.DataSize = Operand->Length;
- Instruction->DataSrc.Operand = Operand;
- }
- }
- }
- }
-
- if (Instruction->Groups & ITYPE_STACK)
- {
- switch (Instruction->Type)
- {
- case ITYPE_PUSH:
- assert(Instruction->OperandCount == 1 && Operand1->Length);
- Instruction->StackChange = -Operand1->Length;
- SANITY_CHECK_ADDRESS_SIZE();
- break;
-
- case ITYPE_POP:
- assert(Instruction->OperandCount == 1 && Operand1->Length);
- Instruction->StackChange = Operand1->Length;
- SANITY_CHECK_ADDRESS_SIZE();
- break;
-
- case ITYPE_PUSHA:
- Instruction->StackChange = -(X86Instruction->OperandSize * 8); // xAX, xCX, xDX, xBX, xBP, xSP, xSI, xDI
- SANITY_CHECK_ADDRESS_SIZE();
- break;
-
- case ITYPE_POPA:
- Instruction->StackChange = X86Instruction->OperandSize * 8; // xDI, xSI, xSP, xBP, xBX, xDX, xCX, xAX
- SANITY_CHECK_ADDRESS_SIZE();
- break;
-
- case ITYPE_PUSHF:
- Instruction->StackChange = -Operand1->Length;
- Instruction->NeedsEmulation = TRUE;
- SANITY_CHECK_ADDRESS_SIZE();
- break;
-
- case ITYPE_POPF:
- Instruction->StackChange = Operand1->Length;
- Instruction->NeedsEmulation = TRUE;
- SANITY_CHECK_ADDRESS_SIZE();
- break;
-
- case ITYPE_ENTER:
- if (!Instruction->AnomalyOccurred)
- {
- if (Instruction->Operands[1].Value_U64 & 3)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: ENTER has invalid operand 2\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- if (Instruction->Operands[2].Value_U64 & ~0x1F)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: ENTER has invalid operand 3\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- }
- SANITY_CHECK_ADDRESS_SIZE();
- Instruction->Operands[2].Value_U64 &= 0x1F;
-
- // frame pointer + stack space
- i = Operand1->Length + (U32)Instruction->Operands[1].Value_U64;
- Instruction->StackChange = -((LONG)i);
- i = (U32)Instruction->Operands[2].Value_U64 * Operand1->Length;
- Instruction->StackChange -= i;
- break;
-
- case ITYPE_LEAVE:
- // This will do "mov esp, ebp; pop ebp" so the StackChange size is dynamic
- SANITY_CHECK_ADDRESS_SIZE();
- break;
-
- case ITYPE_CALL:
- Instruction->StackChange = -X86Instruction->OperandSize;
- SANITY_CHECK_ADDRESS_SIZE();
- break;
-
- case ITYPE_RET:
- Instruction->StackChange = X86Instruction->OperandSize;
-
- switch (Opcode)
- {
- case 0xC3: // ret with no args
- break;
-
- case 0xC2: // ret with 1 arg
- if (!Instruction->AnomalyOccurred && (Operand1->Value_U64 & 3))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: ret has invalid operand 1\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- Instruction->StackChange += (LONG)Operand1->Value_U64;
- break;
-
- case 0xCB: // far ret with no args
- Instruction->StackChange *= 2; // account for segment
- Instruction->StackChange += (LONG)Operand1->Value_U64;
- break;
-
- case 0xCA: // far ret with 1 arg
- if (!Instruction->AnomalyOccurred && (Operand1->Value_U64 & 3))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: retf has invalid operand 1\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- Instruction->StackChange *= 2; // account for segment
- Instruction->StackChange += (LONG)Operand1->Value_U64;
- break;
- }
- SANITY_CHECK_ADDRESS_SIZE();
- break;
-
- case ITYPE_ADD:
- case ITYPE_XCHGADD:
- if (Instruction->Operands[1].Value_S64) Instruction->StackChange = (LONG)(Instruction->Operands[1].Value_S64);
- break;
- case ITYPE_SUB:
- if (Instruction->Operands[1].Value_S64) Instruction->StackChange = (LONG)(-Instruction->Operands[1].Value_S64);
- break;
- case ITYPE_MOV:
- case ITYPE_AND:
- break;
-
- default:
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Instruction \"%s\" is modifying the stack\n", VIRTUAL_ADDRESS, X86Opcode->Mnemonic);
- Instruction->AnomalyOccurred = TRUE;
- }
- break;
- }
-
- if (!Instruction->AnomalyOccurred &&
- ((X86Instruction->OperandSize != 2 && (Instruction->StackChange & 3)) || (Instruction->StackChange & 1)))
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: \"%s\" has invalid stack change 0x%02X\n", VIRTUAL_ADDRESS, X86Opcode->Mnemonic, Instruction->StackChange);
- Instruction->AnomalyOccurred = TRUE;
- }
- }
-
- if (Instruction->Groups & ITYPE_TRAPS)
- {
- switch (Instruction->Type)
- {
- case ITYPE_TRAP:
- case ITYPE_TRAPCC:
- case ITYPE_TRAPRET:
- case ITYPE_BOUNDS:
- case ITYPE_DEBUG:
- case ITYPE_TRACE:
- case ITYPE_INVALID:
- case ITYPE_OFLOW:
- Instruction->NeedsEmulation = TRUE;
- break;
- default:
- assert(0);
- break;
- }
- }
-
- if (Instruction->Groups & ITYPE_SYSTEM)
- {
- switch (Instruction->Type)
- {
- case ITYPE_CPUID:
- case ITYPE_SYSCALL:
- case ITYPE_SYSCALLRET:
- // This doesn't require privileges
- break;
-
- case ITYPE_HALT:
- case ITYPE_IN:
- case ITYPE_OUT:
- default:
- Instruction->NeedsEmulation = TRUE;
- break;
- }
- }
-
- Disassembler->Stage3CountWithDecode++;
- return TRUE;
-
-abort:
- if (!SuppressErrors)
- {
-#ifdef TEST_DISASM
- printf("Dump of 0x%04I64X:\n", VIRTUAL_ADDRESS);
- __try { DumpAsBytes(stdout, Instruction->Address, (ULONG_PTR)VIRTUAL_ADDRESS, 16, TRUE); }
- __except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {}
-#endif
- fflush(stdout);
- }
- return FALSE;
-}
-
-// Address = address to first byte after the opcode (e.g., first byte of ModR/M byte or
-// immediate value
-//
-// Returns the address immediately following the operand (e.g., the next operand or the
-// start of the next instruction
-INTERNAL U8 *SetOperands(INSTRUCTION *Instruction, U8 *Address, U32 Flags)
-{
- INSTRUCTION_OPERAND *Operand;
- U32 Index, OperandIndex;
- S64 Displacement = 0;
- U8 Register;
- U32 OperandFlags, OperandType, AddressMode, Segment;
- U8 Opcode;
- MODRM modrm;
- REX rex;
- REX_MODRM rex_modrm;
- X86_OPCODE *X86Opcode;
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
- BOOL Decode = Flags & DISASM_DECODE;
- BOOL Disassemble = Flags & DISASM_DISASSEMBLE;
- BOOL SuppressErrors = Flags & DISASM_SUPPRESSERRORS;
-
- Opcode = Instruction->LastOpcode;
- X86Opcode = &X86Instruction->Opcode;
-
- // Setup Mod R/M byte
- if (X86Instruction->HasModRM)
- {
- SET_MODRM(X86Instruction->modrm, X86Instruction->modrm_b);
- modrm = X86Instruction->modrm;
- rex = X86Instruction->rex;
- SET_REX_MODRM(X86Instruction->rex_modrm, rex, modrm);
- rex_modrm = X86Instruction->rex_modrm;
- //DISASM_OUTPUT(("[0x%08I64X] ModRM = 0x%02X (mod=%d, reg=%d, rm=%d)\n", VIRTUAL_ADDRESS, X86Instruction->modrm_b, modrm.mod, rex_modrm.reg, rex_modrm.rm));
- INSTR_INC(1); // increment Instruction->Length and address
- }
- else
- {
- // initialize them to 0
- modrm = X86Instruction->modrm;
- rex = X86Instruction->rex;
- rex_modrm = X86Instruction->rex_modrm;
- }
-
- for (OperandIndex = 0; OperandIndex < Instruction->OperandCount; OperandIndex++)
- {
- Operand = &Instruction->Operands[OperandIndex];
- assert(!(Operand->Flags & 0x7F));
-
- OperandFlags = X86Opcode->OperandFlags[OperandIndex] & X86_OPFLAGS_MASK;
- OperandType = X86Opcode->OperandFlags[OperandIndex] & X86_OPTYPE_MASK;
- AddressMode = X86Opcode->OperandFlags[OperandIndex] & X86_AMODE_MASK;
- if (Decode && OperandIndex != 0) APPENDS(", ");
-
- switch (OperandType)
- {
- ////////////////////////////////////////////////////////////
- // Special operand types with no associated addressing mode
- ////////////////////////////////////////////////////////////
-
- case OPTYPE_0:
- if (!Decode) continue;
- Operand->Value_U64 = 0;
- Operand->Type = OPTYPE_IMM;
- //DISASM_OUTPUT(("[SetOperand] const 0\n"));
- if (Disassemble)
- {
- APPENDS("<0>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_1:
- if (!Decode) continue;
- Operand->Value_U64 = 1;
- Operand->Type = OPTYPE_IMM;
- //DISASM_OUTPUT(("[SetOperand] const 1\n"));
- if (Disassemble)
- {
- APPENDS("<1>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_FF:
- if (!Decode) continue;
- Operand->Value_U64 = 0xFF;
- Operand->Type = OPTYPE_IMM;
- //DISASM_OUTPUT(("[SetOperand] const 0xff\n"));
- if (Disassemble)
- {
- APPENDS("<0xFF>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_TSC:
- if (!Decode) continue;
- Operand->Length = 8;
- Operand->Type = OPTYPE_SPECIAL;
- //DISASM_OUTPUT(("[SetOperand] TSC\n"));
- if (Disassemble)
- {
- APPENDS("<TSC_MSR>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_CS_MSR:
- if (!Decode) continue;
- Operand->Length = 8;
- Operand->Type = OPTYPE_SPECIAL;
- //DISASM_OUTPUT(("[SetOperand] CS MSR\n"));
- if (Disassemble)
- {
- APPENDS("<CS_MSR>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_EIP_MSR:
- if (!Decode) continue;
- Operand->Length = 8;
- Operand->Type = OPTYPE_SPECIAL;
- //DISASM_OUTPUT(("[SetOperand] EIP MSR\n"));
- if (Disassemble)
- {
- APPENDS("<EIP_MSR>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_ESP_MSR:
- if (!Decode) continue;
- Operand->Length = 8;
- Operand->Type = OPTYPE_SPECIAL;
- //DISASM_OUTPUT(("[SetOperand] ESP MSR\n"));
- if (Disassemble)
- {
- APPENDS("<ESP_MSR>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_KERNELBASE_MSR:
- if (!Decode) continue;
- Operand->Length = 8;
- Operand->Type = OPTYPE_SPECIAL;
- //DISASM_OUTPUT(("[SetOperand] KernelBase MSR\n"));
- if (Disassemble)
- {
- APPENDS("<KRNLBASE_MSR>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_STAR_MSR:
- if (!Decode) continue;
- Operand->Length = 8;
- Operand->Type = OPTYPE_SPECIAL;
- //DISASM_OUTPUT(("[SetOperand] KernelBase MSR\n"));
- if (Disassemble)
- {
- APPENDS("<STAR_MSR>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_CSTAR_MSR:
- assert(!IS_AMD64());
- if (!Decode) continue;
- Operand->Length = 8;
- Operand->Type = OPTYPE_SPECIAL;
- //DISASM_OUTPUT(("[SetOperand] CSTAR MSR\n"));
- if (Disassemble)
- {
- APPENDS("<CSTAR_MSR>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_LSTAR_MSR:
- assert(IS_AMD64());
- if (!Decode) continue;
- Operand->Length = 8;
- Operand->Type = OPTYPE_SPECIAL;
- //DISASM_OUTPUT(("[SetOperand] LSTAR MSR\n"));
- if (Disassemble)
- {
- APPENDS("<LSTAR_MSR>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_FMASK_MSR:
- if (!Decode) continue;
- Operand->Length = 8;
- Operand->Type = OPTYPE_SPECIAL;
- //DISASM_OUTPUT(("[SetOperand] FMASK MSR\n"));
- if (Disassemble)
- {
- APPENDS("<FMASK_MSR>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OP_REG:
- if (!Decode) continue;
- // The reg field is included in the opcode
- Operand->Length = X86Instruction->OperandSize;
- Register = X86_GET_REG64(Opcode);
- switch (X86Instruction->OperandSize)
- {
- case 8:
- Operand->Register = AMD64_64BIT_OFFSET + Register;
- break;
- case 4:
- Operand->Register = X86_32BIT_OFFSET + Register;
- CHECK_AMD64_REG();
- break;
- case 2:
- Operand->Register = X86_16BIT_OFFSET + Register;
- CHECK_AMD64_REG();
- break;
- case 1:
- Operand->Register = X86_8BIT_OFFSET + Register;
- if (X86Instruction->rex_b) CHECK_AMD64_REG();
- break;
- default:
- assert(0);
- return NULL;
- }
- X86_SET_REG(Register);
-
- //DISASM_OUTPUT(("[SetOperand] OP_REG %s\n", X86_Registers[Operand->Register]));
- if (Disassemble)
- {
- APPENDB('<'); APPENDS(X86_Registers[Operand->Register]); APPENDB('>');
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_REG8:
- if (!Decode) continue;
- // The reg field is included in the opcode
- Operand->Length = 1;
- Register = X86_GET_REG64(Opcode);
- Operand->Register = X86_8BIT_OFFSET + Register;
- CHECK_AMD64_REG();
- X86_SET_REG(Register);
-
- //DISASM_OUTPUT(("[SetOperand] OP_REG %s\n", X86_Registers[Operand->Register]));
- if (Disassemble)
- {
- APPENDB('<'); APPENDS(X86_Registers[Operand->Register]); APPENDB('>');
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_REG_AL:
- if (!Decode) continue;
- Operand->Length = 1;
- Operand->Register = X86_REG_AL;
- X86_SET_REG(0);
- //DISASM_OUTPUT(("[SetOperand] reg AL\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_REG_CL:
- if (!Decode) continue;
- Operand->Length = 1;
- Operand->Register = X86_REG_CL;
- X86_SET_REG(0);
- //DISASM_OUTPUT(("[SetOperand] reg CL\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_REG_AH:
- if (!Decode) continue;
- Operand->Length = 1;
- Operand->Register = X86_REG_AH;
- X86_SET_REG(0);
- //DISASM_OUTPUT(("[SetOperand] reg AH\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_REG_AX:
- if (!Decode) continue;
- Operand->Length = 2;
- Operand->Register = X86_REG_AX;
- X86_SET_REG(0);
- //DISASM_OUTPUT(("[SetOperand] reg AX\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_REG_DX:
- if (!Decode) continue;
- Operand->Length = 2;
- Operand->Register = X86_REG_DX;
- X86_SET_REG(0);
- //DISASM_OUTPUT(("[SetOperand] reg DX\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_REG_ECX:
- if (!Decode) continue;
- Operand->Length = 4;
- Operand->Register = X86_REG_ECX;
- X86_SET_REG(0);
- //DISASM_OUTPUT(("[SetOperand] reg ECX\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_REG_xBP:
- if (!Decode) continue;
- Operand->Length = X86Instruction->OperandSize;
- switch (X86Instruction->OperandSize)
- {
- case 8: Operand->Register = AMD64_REG_RBP; break;
- case 4: Operand->Register = X86_REG_EBP; break;
- case 2: Operand->Register = X86_REG_BP; break;
- default: assert(0); return NULL;
- }
- X86_SET_REG(0);
- //DISASM_OUTPUT(("[SetOperand] xAX_BIG (size = %d)\n", Operand->Length));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_REG_xAX_BIG:
- if (!Decode) continue;
- Operand->Length = X86Instruction->OperandSize;
- switch (X86Instruction->OperandSize)
- {
- case 8: Operand->Register = AMD64_REG_RAX; break;
- case 4: Operand->Register = X86_REG_EAX; break;
- case 2: Operand->Register = X86_REG_AX; break;
- default: assert(0); return NULL;
- }
- X86_SET_REG(0);
- //DISASM_OUTPUT(("[SetOperand] xAX_BIG (size = %d)\n", Operand->Length));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_REG_xAX_SMALL:
- if (!Decode) continue;
- Operand->Length = X86Instruction->OperandSize >> 1;
- switch (X86Instruction->OperandSize)
- {
- case 8: Operand->Register = X86_REG_EAX; break;
- case 4: Operand->Register = X86_REG_AX; break;
- case 2: Operand->Register = X86_REG_AL; break;
- default: assert(0); return NULL;
- }
- X86_SET_REG(0);
- //DISASM_OUTPUT(("[SetOperand] xAX_SMALL (size = %d)\n", Operand->Length));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_xCX_HI_xBX_LO:
- if (!Decode) continue;
- Operand->Length = X86Instruction->OperandSize << 1;
- if (Disassemble)
- {
- switch (X86Instruction->OperandSize)
- {
- case 8: APPENDS("<RCX:RBX>"); break;
- case 4: APPENDS("<ECX:EBX>"); break;
- case 2: APPENDS("<CX:BX>"); break;
- default: assert(0); return NULL;
- }
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] xCX_BIG:xBX_BIG (size = %d)\n", Operand->Length));
- continue;
- case OPTYPE_xDX_HI_xAX_LO:
- if (!Decode) continue;
- Operand->Length = X86Instruction->OperandSize << 1;
- if (Disassemble)
- {
- switch (X86Instruction->OperandSize)
- {
- case 8: APPENDS("<RDX:RAX>"); break;
- case 4: APPENDS("<EDX:EAX>"); break;
- case 2: APPENDS("<DX:AX>"); break;
- default: assert(0); return NULL;
- }
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] xDX_BIG:xAX_BIG (size = %d)\n", Operand->Length));
- continue;
-
- case OPTYPE_EDX_HI_EAX_LO:
- if (!Decode) continue;
- Operand->Length = 8;
- //DISASM_OUTPUT(("[SetOperand] EDX:EAX\n"));
- if (Disassemble)
- {
- APPENDS("<EDX:EAX>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_EDX_ECX_EBX_EAX:
- Operand->Length = 32;
- //DISASM_OUTPUT(("[SetOperand] EDX:ECX:EBX:EAX\n"));
- if (Disassemble)
- {
- APPENDS("<EDX:ECX:EBX:EAX>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_FLAGS:
- if (!Decode) continue;
- Operand->Length = 2;
- Operand->Flags |= OP_REG;
- Operand->Register = X86_REG_FLAGS;
- //DISASM_OUTPUT(("[SetOperand] reg FLAGS\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_xFLAGS:
- if (!Decode) continue;
- Operand->Length = X86Instruction->OperandSize;
- Operand->Flags |= OP_REG;
- switch (X86Instruction->OperandSize)
- {
- case 8: Operand->Register = AMD64_REG_RFLAGS; break;
- case 4: Operand->Register = X86_REG_EFLAGS; break;
- case 2: Operand->Register = X86_REG_FLAGS; break;
- default: assert(0); return NULL;
- }
- //DISASM_OUTPUT(("[SetOperand] reg xFLAGS (size = %d)\n", Operand->Length));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_CS:
- if (!Decode) continue;
- if (Instruction->Type != ITYPE_PUSH && Instruction->Type != ITYPE_POP) Operand->Length = 2;
- else Operand->Length = X86Instruction->OperandSize;
- Operand->Register = X86_SEG_CS;
- Operand->Flags |= OP_REG;
- //DISASM_OUTPUT(("[SetOperand] seg CS\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_DS:
- if (!Decode) continue;
- if (Instruction->Type != ITYPE_PUSH && Instruction->Type != ITYPE_POP) Operand->Length = 2;
- else Operand->Length = X86Instruction->OperandSize;
- Operand->Register = X86_SEG_DS;
- Operand->Flags |= OP_REG;
- //DISASM_OUTPUT(("[SetOperand] seg DS\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_ES:
- if (!Decode) continue;
- if (Instruction->Type != ITYPE_PUSH && Instruction->Type != ITYPE_POP) Operand->Length = 2;
- else Operand->Length = X86Instruction->OperandSize;
- Operand->Register = X86_SEG_ES;
- Operand->Flags |= OP_REG;
- //DISASM_OUTPUT(("[SetOperand] seg ES\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_FS:
- if (!Decode) continue;
- if (Instruction->Type != ITYPE_PUSH && Instruction->Type != ITYPE_POP) Operand->Length = 2;
- else Operand->Length = X86Instruction->OperandSize;
- Operand->Register = X86_SEG_FS;
- Operand->Flags |= OP_REG;
- //DISASM_OUTPUT(("[SetOperand] seg FS\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_GS:
- if (!Decode) continue;
- if (Instruction->Type != ITYPE_PUSH && Instruction->Type != ITYPE_POP) Operand->Length = 2;
- else Operand->Length = X86Instruction->OperandSize;
- Operand->Register = X86_SEG_GS;
- Operand->Flags |= OP_REG;
- //DISASM_OUTPUT(("[SetOperand] seg GS\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_SS:
- if (!Decode) continue;
- if (Instruction->Type != ITYPE_PUSH && Instruction->Type != ITYPE_POP) Operand->Length = 2;
- else Operand->Length = X86Instruction->OperandSize;
- Operand->Register = X86_SEG_SS;
- Operand->Flags |= OP_REG;
- //DISASM_OUTPUT(("[SetOperand] seg SS\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_CR0:
- if (!Decode) continue;
- Operand->Length = X86Instruction->OperandSize;
- Operand->Register = X86_REG_CR0;
- Operand->Flags |= OP_REG;
- //DISASM_OUTPUT(("[SetOperand] reg CR0\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_STx:
- if (!Decode) continue;
- Operand->Length = 10;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Flags |= OP_REG;
- Register = X86_GET_REG(X86Instruction->modrm_b);
- Operand->Register = X86_FPU_OFFSET + Register;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_STx: reg st(%d)\n", Register));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_ST0:
- if (!Decode) continue;
- Operand->Length = 10;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Flags |= OP_REG;
- Operand->Register = X86_REG_ST0;
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_ST1:
- if (!Decode) continue;
- Operand->Length = 10;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Flags |= OP_REG;
- Operand->Register = X86_REG_ST1;
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "<%s>", X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_FPU_STATUS:
- if (!Decode) continue;
- Operand->Length = 2;
- if (Disassemble)
- {
- APPENDS("<FPUSTAT>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_FPU_CONTROL:
- if (!Decode) continue;
- Operand->Length = 2;
- if (Disassemble)
- {
- APPENDS("<FPUCTRL>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_FPU_TAG:
- if (!Decode) continue;
- Operand->Length = 2;
- if (Disassemble)
- {
- APPENDS("<FPUTAG>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case OPTYPE_FLDZ:
- if (!Decode) continue;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Length = 10;
- if (Disassemble)
- {
- APPENDS("<0.0>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_FLD1:
- if (!Decode) continue;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Length = 10;
- if (Disassemble)
- {
- APPENDS("<1.0>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_FLDPI:
- if (!Decode) continue;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Length = 10;
- if (Disassemble)
- {
- APPENDS("<pi>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_FLDL2T:
- if (!Decode) continue;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Length = 10;
- if (Disassemble)
- {
- APPENDS("<log_2 10>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_FLDL2E:
- if (!Decode) continue;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Length = 10;
- if (Disassemble)
- {
- APPENDS("<log_2 e>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_FLDLG2:
- if (!Decode) continue;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Length = 10;
- if (Disassemble)
- {
- APPENDS("<log_10 2>");
- X86_WRITE_OPFLAGS();
- }
- continue;
- case OPTYPE_FLDLN2:
- if (!Decode) continue;
- Operand->Type = OPTYPE_FLOAT;
- Operand->Length = 10;
- if (Disassemble)
- {
- APPENDS("<ln 2>");
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- ////////////////////////////////////////////////////////////
- // Fixed sizes regardless of operand size
- ////////////////////////////////////////////////////////////
-
- case OPTYPE_b: // byte regardless of operand size
- Operand->Length = 1;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_b (size 1, signed %d)\n", ((OperandFlags & OP_SIGNED) != 0)));
- break;
-
- case OPTYPE_w: // word regardless of operand size
- Operand->Length = 2;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_w (size 2)\n"));
- break;
-
- case OPTYPE_d: // dword regardless of operand size
- Operand->Length = 4;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_d (size 4)\n"));
- break;
-
- case OPTYPE_q: // qword regardless of operand size
- Operand->Length = 8;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_q (size 8)\n"));
- break;
-
- case OPTYPE_o: // oword regardless of operand size
- Operand->Length = 16;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_o (size 16)\n"));
- break;
-
- case OPTYPE_dt: // 6-byte or 10-byte pseudo descriptor (sgdt, lgdt, sidt, lidt)
- if (IS_AMD64()) Operand->Length = 10;
- else Operand->Length = 6;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_dt (%d bytes)\n", Operand->Length));
- break;
-
- case OPTYPE_cpu:
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Undocumented loadall instruction?\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- Operand->Length = 204;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_cpu (size 204)\n"));
- break;
-
- ////////////////////////////////////////////////////////////
- // Sizes depending on the operand size
- ////////////////////////////////////////////////////////////
-
- case OPTYPE_z: // word if operand size is 16 bits and dword otherwise
- switch (X86Instruction->OperandSize)
- {
- case 8: case 4: Operand->Length = 4; break;
- case 2: Operand->Length = 2; break;
- default: assert(0); return NULL;
- }
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_z (length %d)\n", Operand->Length));
- break;
-
- case OPTYPE_v: // word, dword, or qword
- Operand->Length = X86Instruction->OperandSize;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_v (size %d, signed = %d)\n", Operand->Length, ((OperandFlags & OP_SIGNED) != 0)));
- break;
-
- case OPTYPE_a: // two word or dword operands in memory (used only by bound)
- assert(Instruction->OpcodeBytes[0] == X86_BOUND);
- switch (X86Instruction->OperandSize)
- {
- case 8: case 4: Operand->Length = 8; break;
- case 2: Operand->Length = 4; break;
- default: assert(0); return NULL;
- }
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_a (size %d)\n", Operand->Length));
- break;
-
- case OPTYPE_p: // 32-bit or 48-bit pointer depending on operand size
- if (!Instruction->AnomalyOccurred && X86Instruction->HasSegmentOverridePrefix)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Segment override used when segment is explicit\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- switch (X86Instruction->OperandSize)
- {
- case 8: case 4: Operand->Length = 6; break;
- case 2: Operand->Length = 4; break;
- default: assert(0); return NULL;
- }
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_p (length %d)\n", Operand->Length));
- break;
-
- case OPTYPE_dq: // dword or qword
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_dq (size 4 or 8)\n"));
- switch (X86Instruction->OperandSize)
- {
- case 8: Operand->Length = 8; break;
- case 4: case 2: Operand->Length = 4; break;
- default: assert(0); return NULL;
- }
- break;
-
- case OPTYPE_mw: // a word if the destination operand is memory
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_mw (size 0)\n"));
- assert(X86Instruction->HasModRM);
- if (modrm.mod == 3) Operand->Length = X86Instruction->OperandSize; // using register
- else Operand->Length = 2; // using memory
- break;
-
- case OPTYPE_lea:
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_lea (size 0)\n"));
- assert(OperandIndex == 1);
- Operand->Length = Instruction->Operands[0].Length;
- break;
-
- ////////////////////////////////////////////////////////////
- // FPU types
- ////////////////////////////////////////////////////////////
-
- case OPTYPE_ps: // packed single real
- Operand->Length = 4;
- Operand->Type = OPTYPE_FLOAT;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_ps (packed single real)\n"));
- break;
- case OPTYPE_pd: // packed double real
- Operand->Length = 8;
- Operand->Type = OPTYPE_FLOAT;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_pd (packed double real)\n"));
- break;
- case OPTYPE_pb: // packed BCD
- Operand->Length = 10;
- Operand->Type = OPTYPE_BCD;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_pb (packed BCD)\n"));
- break;
- case OPTYPE_ss: // scalar single real
- Operand->Length = 4;
- Operand->Type = OPTYPE_FLOAT;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_ss (single real)\n"));
- break;
- case OPTYPE_sd: // scalar double real
- Operand->Length = 8;
- Operand->Type = OPTYPE_FLOAT;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_sd (double real)\n"));
- break;
- case OPTYPE_se: // extended real
- Operand->Length = 10;
- Operand->Type = OPTYPE_FLOAT;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_se (extended real)\n"));
- break;
-
- case OPTYPE_fev: // FPU environment (28 bytes in 32-bit modes, 14 bytes in 16-bit real mode)
- switch (X86Instruction->OperandSize)
- {
- case 8: case 4: Operand->Length = 28; break;
- case 2: Operand->Length = 14; break;
- default: assert(0); return NULL;
- }
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_fev (FPU environment, length %d)\n", Operand->Length));
- break;
-
- case OPTYPE_fst1: // FPU state (108 bytes in 32-bit modes, 94 bytes in 16-bit real mode)
- switch (X86Instruction->OperandSize)
- {
- case 8: case 4: Operand->Length = 108; break;
- case 2: Operand->Length = 94; break;
- default: assert(0); return NULL;
- }
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_fst1 (FPU state, length %d)\n", Operand->Length));
- break;
-
- case OPTYPE_fst2: // 512 bytes for FPU state (FPU + MMX + XXM + MXCSR)
- Operand->Length = 512;
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_fst2 (FPU + MMX + XXM + MXCSR state, length 512)\n"));
- break;
-
- case OPTYPE_sso:
- if (modrm.mod == 3) // from register
- {
- Operand->Length = 16;
- }
- else // from memory
- {
- Operand->Length = 4;
- Operand->Type = OPTYPE_FLOAT;
- }
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_sso (single real or oword)\n"));
- break;
-
- case OPTYPE_sdo:
- if (modrm.mod == 3) // from register
- {
- Operand->Length = 16;
- }
- else // from memory
- {
- Operand->Length = 8;
- Operand->Type = OPTYPE_FLOAT;
- }
- //DISASM_OUTPUT(("[SetOperand] OPTYPE_sso (double real or oword)\n"));
- break;
-
- default:
- assert(0);
- return NULL;
- }
-
- switch (AddressMode)
- {
- ////////////////////////////////////////////////////////////
- // Special types
- ////////////////////////////////////////////////////////////
-
- case AMODE_xlat: // DS:[EBX+AL]
- if (!Decode) continue;
- assert(Operand->Length == 1);
- Operand->Flags |= OP_ADDRESS | OP_REG;
- Operand->Type = OPTYPE_STRING;
-
- switch (X86Instruction->AddressSize)
- {
- case 8: Operand->Register = AMD64_REG_RBX; break;
- case 4: Operand->Register = X86_REG_EBX; break;
- case 2: Operand->Register = X86_REG_BX; break;
- default: assert(0); return NULL;
- }
- X86_SET_ADDR();
- X86Instruction->Scale = 1;
- X86Instruction->BaseRegister = Operand->Register;
- X86Instruction->HasBaseRegister = TRUE;
- X86Instruction->IndexRegister = X86_REG_AL;
- X86Instruction->HasIndexRegister = TRUE;
-
- //DISASM_OUTPUT(("[SetOperand] AMODE_xlat (DS:[EBX+AL])\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "%s:[%s]",
- Segments[X86Instruction->Segment], X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- ////////////////////////////////////////////////////////////
- // Without mod R/M byte
- ////////////////////////////////////////////////////////////
-
- case AMODE_I: // immediate value
- if (Decode)
- {
- Operand->Type = OPTYPE_IMM;
- switch (Operand->Length)
- {
- case 8:
- if (OperandFlags & OP_SIGNED) Operand->Value_S64 = (S64)*((S64 *)Address);
- else Operand->Value_U64 = (U64)*((U64 *)Address);
- break;
- case 4:
- if (!(OperandFlags & OP_SIGNED) && OperandIndex == 1 &&
- (Instruction->Operands[0].Flags & (OP_REG|OP_ADDRESS)) &&
- Instruction->Operands[0].Length == 8)
- {
- // For some opcodes the second operand is a sign-extended imm32 value
- assert(X86Instruction->OperandSize == 8);
- switch (Instruction->Type)
- {
- case ITYPE_AND:
- case ITYPE_ADD:
- case ITYPE_XCHGADD:
- case ITYPE_CMP:
- case ITYPE_MOV:
- case ITYPE_SUB:
- case ITYPE_TEST:
- case ITYPE_OR:
- case ITYPE_XOR:
- assert(OperandIndex == 1);
- Operand->Value_S64 = (S64)*((S32 *)Address);
- break;
- default:
- assert(0);
- if (OperandFlags & OP_SIGNED) Operand->Value_S64 = (S64)*((S32 *)Address);
- else Operand->Value_U64 = (U64)*((U32 *)Address);
- break;
- }
- }
- else
- {
- if (OperandFlags & OP_SIGNED) Operand->Value_S64 = (S64)*((S32 *)Address);
- else Operand->Value_U64 = (U64)*((U32 *)Address);
- }
- break;
- case 2:
- if (OperandFlags & OP_SIGNED) Operand->Value_S64 = (S64)*((S16 *)Address);
- else Operand->Value_U64 = (U64)*((U16 *)Address);
- break;
- case 1:
- if (OperandFlags & OP_SIGNED) Operand->Value_S64 = (S64)*((S8 *)Address);
- else Operand->Value_U64 = (U64)*((U8 *)Address);
- break;
- default:
- assert(0);
- return NULL;
- }
- }
- INSTR_INC(Operand->Length); // increment Instruction->Length and address
- assert(X86Instruction->OperandSize >= Operand->Length);
- if (Instruction->Type == ITYPE_PUSH) Operand->Length = X86Instruction->OperandSize;
-
- //DISASM_OUTPUT(("[SetOperand] AMODE_I (immediate data)\n"));
- if (Disassemble)
- {
- X86_WRITE_IMMEDIATE();
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case AMODE_J: // IP-relative jump offset
- SANITY_CHECK_ADDRESS_SIZE();
- if (Decode)
- {
- Operand->Flags |= OP_IPREL | OP_SIGNED | OP_REG | OP_ADDRESS;
- Operand->Type = OPTYPE_OFFSET;
- switch (X86Instruction->OperandSize)
- {
- case 8: Operand->Register = AMD64_REG_RIP; break;
- case 4: Operand->Register = X86_REG_EIP; break;
- case 2: Operand->Register = X86_REG_IP; break;
- default: assert(0); return NULL;
- }
- switch (Operand->Length)
- {
- case 8: X86Instruction->Displacement = *((S64 *)Address); break;
- case 4: X86Instruction->Displacement = (S64)*((S32 *)Address); break;
- case 2: X86Instruction->Displacement = (S64)*((S16 *)Address); break;
- case 1: X86Instruction->Displacement = (S64)*((S8 *)Address); break;
- default: assert(0); return NULL;
- }
-
- Operand->Value_S64 = X86Instruction->Displacement;
- X86Instruction->Relative = TRUE;
-
- if ((Operand->Flags & OP_COND) && !X86Instruction->Displacement)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: Both conditions of branch go to same address\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- }
-
- INSTR_INC(Operand->Length); // increment Instruction->Length and address
- if (!Decode) continue;
-
- assert((Operand->Flags & OP_EXEC) && (Instruction->Groups & ITYPE_EXEC));
- Operand->TargetAddress = ApplyDisplacement((U64)Address, Instruction);
- X86Instruction->Relative = TRUE;
- X86_SET_ADDR();
- SANITY_CHECK_SEGMENT_OVERRIDE();
- X86Instruction->HasSegmentOverridePrefix = FALSE;
- X86Instruction->Segment = SEG_CS;
- X86Instruction->BaseRegister = Operand->Register;
- X86Instruction->HasBaseRegister = TRUE;
- assert(Instruction->OperandCount == 1);
- //DISASM_OUTPUT(("[SetOperand] AMODE_J (branch with relative offset)\n"));
- if (Disassemble)
- {
- X86_WRITE_IP_OFFSET(Operand);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case AMODE_O: // word/dword offset
- Operand->Type = OPTYPE_OFFSET;
- Operand->Flags |= OP_ADDRESS;
- SANITY_CHECK_OPERAND_SIZE();
- switch (X86Instruction->AddressSize)
- {
- case 8:
- if (Operand->Flags & OP_SIGNED) X86Instruction->Displacement = *((S64 *)Address);
- else X86Instruction->Displacement = (S64)*((U64 *)Address);
- break;
- case 4:
- if (Operand->Flags & OP_SIGNED) X86Instruction->Displacement = (S64)*((S32 *)Address);
- else X86Instruction->Displacement = (S64)*((U32 *)Address);
- break;
- case 2:
- if (Operand->Flags & OP_SIGNED) X86Instruction->Displacement = (S64)*((S16 *)Address);
- else X86Instruction->Displacement = (S64)*((U16 *)Address);
- break;
- default:
- assert(0);
- return FALSE;
- }
-
- INSTR_INC(X86Instruction->AddressSize); // increment Instruction->Length and address
- if (!Decode) continue;
-
- X86Instruction->HasFullDisplacement = TRUE;
- X86_SET_ADDR();
- X86_SET_TARGET();
- assert(X86Instruction->Segment == SEG_DS || X86Instruction->HasSegmentOverridePrefix);
- //DISASM_OUTPUT(("[SetOperand] AMODE_O (offset)\n"));
- if (Disassemble)
- {
- X86_WRITE_OFFSET(Operand);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case AMODE_A: // absolute address
- Operand->Flags |= OP_ADDRESS | OP_FAR;
- SANITY_CHECK_ADDRESS_SIZE();
- SANITY_CHECK_SEGMENT_OVERRIDE();
- X86Instruction->HasSelector = TRUE;
- X86Instruction->HasSegmentOverridePrefix = FALSE;
- switch (Operand->Length)
- {
- case 6:
- X86Instruction->Segment = *((U16 *)Address); INSTR_INC(2);
- X86Instruction->Displacement = (S64)*((S32 *)Address); INSTR_INC(4);
- break;
- case 4:
- X86Instruction->Segment = *((U16 *)Address); INSTR_INC(2);
- X86Instruction->Displacement = (S64)*((S16 *)Address); INSTR_INC(2);
- break;
- default:
- assert(0);
- return FALSE;
- }
- if (!Decode) continue;
- X86Instruction->HasFullDisplacement = TRUE;
- X86_SET_ADDR();
- X86_SET_TARGET();
- //DISASM_OUTPUT(("[SetOperand] AMODE_A (absolute address)\n"));
- if (Disassemble)
- {
- X86_WRITE_OFFSET(Operand);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case AMODE_X: // DS:[ESI]
- if (!Decode) continue;
- Operand->Flags |= OP_ADDRESS | OP_REG;
- Operand->Type = OPTYPE_STRING;
- switch (X86Instruction->AddressSize)
- {
- case 8: Operand->Register = AMD64_REG_RSI; break;
- case 4: Operand->Register = X86_REG_ESI; break;
- case 2: Operand->Register = X86_REG_SI; break;
- default: assert(0); return NULL;
- }
-
- X86Instruction->BaseRegister = Operand->Register;
- X86Instruction->HasBaseRegister = TRUE;
- X86_SET_ADDR();
- if (!X86Instruction->HasSegmentOverridePrefix) X86Instruction->Segment = SEG_DS;
-
- //DISASM_OUTPUT(("[SetOperand] AMODE_X (addressing via DS:[ESI])\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "%s:[%s]",
- Segments[X86Instruction->Segment], X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- case AMODE_Y: // ES:[EDI]
- if (!Decode) continue;
- Operand->Flags |= OP_ADDRESS | OP_REG;
- Operand->Type = OPTYPE_STRING;
- switch (X86Instruction->AddressSize)
- {
- case 8: Operand->Register = AMD64_REG_RDI; break;
- case 4: Operand->Register = X86_REG_EDI; break;
- case 2: Operand->Register = X86_REG_DI; break;
- default: assert(0); return NULL;
- }
-
- X86Instruction->BaseRegister = Operand->Register;
- X86Instruction->HasBaseRegister = TRUE;
- X86_SET_ADDR();
- if (X86Instruction->HasSegmentOverridePrefix)
- {
- if (!Instruction->AnomalyOccurred)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ANOMALY: segment override used with AMODE_Y\n", VIRTUAL_ADDRESS);
- Instruction->AnomalyOccurred = TRUE;
- }
- Segment = X86Instruction->DstSegment = SEG_ES;
- X86Instruction->HasDstSegment = TRUE;
- }
- else
- {
- Segment = X86Instruction->Segment = SEG_ES;
- }
-
- //DISASM_OUTPUT(("[SetOperand] AMODE_Y (addressing via ES:[EDI])\n"));
- if (Disassemble)
- {
- APPEND(OPCSTR, SIZE_LEFT, "%s:[%s]",
- Segments[Segment], X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- continue;
-
- ////////////////////////////////////////////////////////////
- // Mod R/M byte with only registers
- // Handle that case here since it is straightforward
- ////////////////////////////////////////////////////////////
-
- case AMODE_PR: // modrm.rm = mmx register and modrm.mod = 11
- assert(X86Instruction->HasModRM);
- if (modrm.mod != 3)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: mod != 3 for AMODE_PR (\"%s\")\n", VIRTUAL_ADDRESS, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- else if (rex_modrm.rm > 7)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: invalid mmx register %d for AMODE_PR (\"%s\")\n", VIRTUAL_ADDRESS, rex_modrm.rm, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- else if (X86Instruction->OperandSize == 2)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: AMODE_PR illegal in 16-bit mode (\"%s\")\n", VIRTUAL_ADDRESS, rex_modrm.rm, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- if (!Decode) continue;
-
- Operand->Flags |= OP_REG;
- Operand->Register = X86_MMX_OFFSET + rex_modrm.rm;
- X86_SET_REG(0);
-
- if (Disassemble)
- {
- assert(X86_Registers[Operand->Register]);
- APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_PR (MMX register)\n"));
- continue;
-
- case AMODE_VR: // modrm.rm = xmm register and modrm.mod = 11
- assert(X86Instruction->HasModRM);
- if (modrm.mod != 3)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: mod != 3 for AMODE_VR (\"%s\")\n", VIRTUAL_ADDRESS, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- else if (X86Instruction->OperandSize == 2)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: AMODE_VR illegal in 16-bit mode (\"%s\")\n", VIRTUAL_ADDRESS, rex_modrm.rm, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- if (!Decode) continue;
-
- Operand->Flags |= OP_REG;
- Operand->Register = X86_XMM_OFFSET + rex_modrm.rm;
- X86_SET_REG(0);
-
- if (Disassemble)
- {
- APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_VR (XMM register)\n"));
- continue;
-
- case AMODE_P: // modrm.reg = mmx register
- assert(X86Instruction->HasModRM);
- if (rex_modrm.reg > 7)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: invalid mmx register %d for AMODE_P (\"%s\")\n", VIRTUAL_ADDRESS, rex_modrm.reg, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- else if (X86Instruction->OperandSize == 2)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: AMODE_P illegal in 16-bit mode (\"%s\")\n", VIRTUAL_ADDRESS, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- if (!Decode) continue;
-
- Operand->Flags |= OP_REG;
- Operand->Register = X86_MMX_OFFSET + rex_modrm.reg;
- X86_SET_REG(0);
-
- if (Disassemble)
- {
- APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_P (MMX register)\n"));
- continue;
-
- case AMODE_V: // modrm.reg = xmm register
- assert(X86Instruction->HasModRM);
- if (X86Instruction->OperandSize == 2)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: AMODE_P illegal in 16-bit mode (\"%s\")\n", VIRTUAL_ADDRESS, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- if (!Decode) continue;
-
- Operand->Flags |= OP_REG;
- Operand->Register = X86_XMM_OFFSET + rex_modrm.reg; break;
- X86_SET_REG(0);
-
- if (Disassemble)
- {
- APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_V (XMM register)\n"));
- continue;
-
- case AMODE_R: // modrm.rm is general register and modrm.mod = 11
- assert(X86Instruction->HasModRM);
- if (modrm.mod != 3)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: mod != 3 for AMODE_R (\"%s\")\n", VIRTUAL_ADDRESS, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- if (!Decode) continue;
- Operand->Flags |= OP_REG;
- switch (Operand->Length)
- {
- case 8: Operand->Register = AMD64_64BIT_OFFSET + rex_modrm.rm; break;
- case 4: Operand->Register = X86_32BIT_OFFSET, rex_modrm.rm; CHECK_AMD64_REG(); break;
- case 2: Operand->Register = X86_16BIT_OFFSET, rex_modrm.rm; CHECK_AMD64_REG(); break;
- case 1: Operand->Register = X86_8BIT_OFFSET, rex_modrm.rm; if (X86Instruction->rex_b) CHECK_AMD64_REG(); break;
- default: assert(0); return NULL;
- }
- X86_SET_REG(rex_modrm.rm);
- if (Disassemble)
- {
- APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_R (general register)\n"));
- continue;
-
- case AMODE_G: // modrm.reg = general register
- assert(X86Instruction->HasModRM);
- if (!Decode) continue;
- Operand->Flags |= OP_REG;
- switch (Operand->Length)
- {
- case 8: Operand->Register = AMD64_64BIT_OFFSET + rex_modrm.reg; break;
- case 4: Operand->Register = X86_32BIT_OFFSET + rex_modrm.reg; CHECK_AMD64_REG(); break;
- case 2: Operand->Register = X86_16BIT_OFFSET + rex_modrm.reg; CHECK_AMD64_REG(); break;
- case 1: Operand->Register = X86_8BIT_OFFSET + rex_modrm.reg; if (X86Instruction->rex_b) CHECK_AMD64_REG(); break;
- default: assert(0); return NULL;
- }
- X86_SET_REG(rex_modrm.reg);
- if (Disassemble)
- {
- APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_G (general register)\n"));
- continue;
-
- case AMODE_S: // modrm.reg = segment register
- assert(X86Instruction->HasModRM);
- if (!Decode) continue;
- Operand->Flags |= OP_REG;
- switch (X86Instruction->OperandSize)
- {
- case 8:
- case 4:
- case 2:
- if (rex_modrm.reg <= 5) Operand->Register = X86_SEGMENT_OFFSET + rex_modrm.reg;
- break;
- default:
- assert(0);
- return NULL;
- }
-
- X86_SET_REG(0);
- if (Disassemble)
- {
- if (rex_modrm.reg > 5) APPEND(OPCSTR, SIZE_LEFT, "seg_%02X", rex_modrm.reg);
- else APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_S (segment register)\n"));
- continue;
-
- case AMODE_T: // modrm.reg = test register
- assert(X86Instruction->HasModRM);
- if (!Decode) continue;
- Instruction->Groups |= ITYPE_SYSTEM;
- Instruction->NeedsEmulation = TRUE;
- Operand->Flags |= OP_REG;
- switch (X86Instruction->OperandSize)
- {
- case 8:
- case 4:
- case 2:
- Operand->Register = X86_TEST_OFFSET + rex_modrm.reg;
- break;
- default:
- assert(0);
- return NULL;
- }
-
- X86_SET_REG(0);
- if (Disassemble)
- {
- APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_T (test register)\n"));
- continue;
-
- case AMODE_C: // modrm.reg = control register
- assert(X86Instruction->HasModRM);
- assert(Instruction->Type == ITYPE_MOV);
- if (!Decode) continue;
- Instruction->Groups |= ITYPE_SYSTEM;
- Instruction->NeedsEmulation = TRUE;
- Operand->Flags |= OP_REG;
- if (IS_AMD64()) X86Instruction->OperandSize = 8;
- switch (X86Instruction->OperandSize)
- {
- case 8:
- case 4:
- case 2:
- Operand->Register = X86_CONTROL_OFFSET + rex_modrm.reg;
- break;
- default:
- assert(0);
- return NULL;
- }
-
- X86_SET_REG(0);
- if (Disassemble)
- {
- APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_C (control register)\n"));
- continue;
-
- case AMODE_D: // modrm.reg = debug register
- assert(X86Instruction->HasModRM);
- assert(Instruction->Type == ITYPE_MOV);
- if (!Decode) continue;
- Instruction->NeedsEmulation = TRUE;
- Operand->Flags |= OP_REG;
- Instruction->Groups |= ITYPE_SYSTEM;
- Instruction->NeedsEmulation = TRUE;
- if (IS_AMD64()) X86Instruction->OperandSize = 8;
- switch (X86Instruction->OperandSize)
- {
- case 8:
- case 4:
- case 2:
- Operand->Register = X86_DEBUG_OFFSET + rex_modrm.reg;
- break;
- default:
- assert(0);
- return NULL;
- }
-
- X86_SET_REG(0);
- if (Disassemble)
- {
- APPENDS(X86_Registers[Operand->Register]);
- X86_WRITE_OPFLAGS();
- }
- //DISASM_OUTPUT(("[SetOperand] AMODE_D (debug register)\n"));
- continue;
-
- ////////////////////////////////////////////////////////////
- // Mod R/M byte with memory or register
- ////////////////////////////////////////////////////////////
-
- case AMODE_M: // memory only
- assert(X86Instruction->HasModRM);
- if (modrm.mod == 3)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: mod = 3 for AMODE_M (\"%s\")\n", VIRTUAL_ADDRESS, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- assert(X86Instruction->Segment == SEG_DS || X86Instruction->HasSegmentOverridePrefix);
- //DISASM_OUTPUT(("[SetOperand] AMODE_M (memory only)\n"));
- Address = SetModRM32(Instruction, Address, Operand, OperandIndex, SuppressErrors);
- if (!Address) return NULL;
- break;
-
- case AMODE_E: // general register or memory
- assert(X86Instruction->HasModRM);
- if (OperandType == OPTYPE_p && modrm.mod == 3)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: mod = 3 for AMODE_E with OPTYPE_p (\"%s\")\n", VIRTUAL_ADDRESS, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
-
- //DISASM_OUTPUT(("[SetOperand] AMODE_E (general register or memory)\n"));
- Address = SetModRM32(Instruction, Address, Operand, OperandIndex, SuppressErrors);
- if (!Address) return NULL;
- if (Decode && (Instruction->Type == ITYPE_PUSH || Instruction->Type == ITYPE_POP))
- {
- assert(X86Instruction->OperandSize >= Operand->Length);
- Operand->Length = X86Instruction->OperandSize;
- }
- break;
-
- case AMODE_Q: // mmx register or memory address
- assert(X86Instruction->HasModRM);
- //DISASM_OUTPUT(("[SetOperand] AMODE_Q (MMX register or memory address)\n"));
- if (modrm.mod == 3) // it is a register
- {
- if (rex_modrm.rm > 7)
- {
- if (!SuppressErrors) printf("[0x%08I64X] ERROR: invalid mmx register %d for AMODE_P (\"%s\")\n", VIRTUAL_ADDRESS, rex_modrm.rm, X86Instruction->Opcode.Mnemonic);
- goto abort;
- }
- Operand->Register = X86_MMX_OFFSET + rex_modrm.rm;
- Operand->Flags |= OP_REG;
- X86_SET_REG(0);
- }
- else
- {
- Address = SetModRM32(Instruction, Address, Operand, OperandIndex, SuppressErrors);
- if (!Address) return NULL;
- }
- break;
-
- case AMODE_W: // xmm register or memory address
- assert(X86Instruction->HasModRM);
- //DISASM_OUTPUT(("[SetOperand] AMODE_W (XMM register or memory address)\n"));
- if (modrm.mod == 3) // it is a register
- {
- Operand->Register = X86_XMM_OFFSET + rex_modrm.rm;
- Operand->Flags |= OP_REG;
- X86_SET_REG(0);
- }
- else
- {
- Address = SetModRM32(Instruction, Address, Operand, OperandIndex, SuppressErrors);
- if (!Address) return NULL;
- }
- break;
-
- default:
- assert(0);
- return NULL;
- }
-
- if (!Decode) continue;
-
- // If this is reached then SetModRM32 was called
- if ((Operand->Flags & OP_ADDRESS))
- {
- assert(Operand->Length);
- switch (Operand->Register)
- {
- case X86_REG_BP:
- case X86_REG_EBP:
- case AMD64_REG_RBP:
- if (X86Instruction->Displacement > 0) Operand->Flags |= OP_PARAM;
- else Operand->Flags |= OP_LOCAL;
- break;
- default:
- break;
- }
- }
-
- if (Disassemble)
- {
- Index = OperandType >> OPTYPE_SHIFT;
- assert(Index > 0 && Index < MAX_OPTYPE_INDEX && OptypeHandlers[Index]);
- OptypeHandlers[Index](Instruction, Operand, OperandIndex);
- X86_WRITE_OPFLAGS();
- }
- }
-
- return Address;
-
-abort:
- if (!SuppressErrors)
- {
-#ifdef TEST_DISASM
- printf("Dump of 0x%04I64X:\n", VIRTUAL_ADDRESS);
- __try { DumpAsBytes(stdout, Instruction->Address, (ULONG_PTR)VIRTUAL_ADDRESS, 16, TRUE); }
- __except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {}
-#endif
- fflush(stdout);
- }
- return NULL;
-}
-
-// NOTE: Address points one byte after ModRM
-INTERNAL U8 *SetModRM16(INSTRUCTION *Instruction, U8 *Address, INSTRUCTION_OPERAND *Operand, U32 OperandIndex, BOOL SuppressErrors)
-{
- MODRM modrm;
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
-
- DISASM_OUTPUT(("[SetModRM16] Current instruction length = %d\n", Instruction->Length));
- modrm = X86Instruction->modrm;
- assert(!X86Instruction->rex_b);
-
- //
- // Both operands are registers
- // Condition: mod = 3
- //
- if (modrm.mod == 3)
- {
- //DISASM_OUTPUT(("[SetModRM16] Both regs (rm_reg %d)\n", modrm.rm));
- switch (Operand->Length)
- {
- case 4: Operand->Register = X86_32BIT_OFFSET + modrm.rm; break;
- case 2: Operand->Register = X86_16BIT_OFFSET + modrm.rm; break;
- case 1: Operand->Register = X86_8BIT_OFFSET + modrm.rm; break;
- default: assert(0); return NULL;
- }
- Operand->Flags |= OP_REG;
- }
-
- //
- // Address is an absolute address (technically a 16-bit offset from DS:0)
- // Condition: mod = 0 and rm = 6
- //
- else if (modrm.mod == 0 && modrm.rm == 6)
- {
- //DISASM_OUTPUT(("[SetModRM16] Absolute addressing (displacement 0x%04X)\n", *(S16 *)Address));
- X86Instruction->Displacement = (S64)(*((S16 *)Address));
- if (IS_VALID_ADDRESS(X86Instruction->Displacement))
- {
- X86Instruction->HasFullDisplacement = TRUE;
- X86_SET_TARGET();
- Operand->Flags |= OP_GLOBAL;
- }
- X86_SET_ADDR();
- Operand->Flags |= OP_ADDRESS;
- INSTR_INC(2);
- }
-
- // Conditions:
- // (1) mod = 0 and rm != 6
- // (2) mod = 1-2 and rm = 0-7
- else
- {
- switch (modrm.mod)
- {
- case 0: // no displacement
- //DISASM_OUTPUT(("[SetModRM16] Indirect addressing (no displacement)\n"));
- break;
- case 1: // 8-bit signed displacement
- //DISASM_OUTPUT(("[SetModRM16] Indirect addressing (displacement = 0x%02X, reg_rm = %d)\n", *(S8 *)Address, modrm.rm));
- X86Instruction->Displacement = (S64)(*((S8 *)Address));
- INSTR_INC(1); // increment Instruction->Length and address
- break;
- case 2: // 16-bit displacement
- //DISASM_OUTPUT(("[SetModRM16] Indirect addressing (displacement = 0x%04X, reg_rm = %d)\n", *(S16 *)Address, modrm.rm));
- X86Instruction->Displacement = (S64)(*((S16 *)Address));
- if (IS_VALID_ADDRESS(X86Instruction->Displacement))
- {
- Operand->Flags |= OP_GLOBAL;
- X86Instruction->HasFullDisplacement = TRUE;
- }
- INSTR_INC(2);
- break;
- }
-
- switch (modrm.rm)
- {
- case 0:
- //DISASM_OUTPUT(("[SetModRM16] Addressing mode [BX+SI]\n"));
- X86Instruction->BaseRegister = X86_REG_BX;
- X86Instruction->IndexRegister = X86_REG_SI;
- X86Instruction->HasIndexRegister = TRUE;
- break;
- case 1:
- //DISASM_OUTPUT(("[SetModRM16] Addressing mode [BX+DI]\n"));
- X86Instruction->BaseRegister = X86_REG_BX;
- X86Instruction->IndexRegister = X86_REG_DI;
- X86Instruction->HasIndexRegister = TRUE;
- break;
- case 2:
- //DISASM_OUTPUT(("[SetModRM16] Addressing mode [BP+SI]\n"));
- X86Instruction->BaseRegister = X86_REG_BP;
- X86Instruction->IndexRegister = X86_REG_SI;
- X86Instruction->HasIndexRegister = TRUE;
- X86_SET_SEG(REG_BP);
- break;
- case 3:
- //DISASM_OUTPUT(("[SetModRM16] Addressing mode [BP+DI]\n"));
- X86Instruction->BaseRegister = X86_REG_BP;
- X86Instruction->IndexRegister = X86_REG_DI;
- X86Instruction->HasIndexRegister = TRUE;
- X86_SET_SEG(REG_BP);
- break;
- case 4:
- //DISASM_OUTPUT(("[SetModRM16] Addressing mode [SI]\n"));
- X86Instruction->BaseRegister = X86_REG_SI;
- break;
- case 5:
- //DISASM_OUTPUT(("[SetModRM16] Addressing mode [DI]\n"));
- X86Instruction->BaseRegister = X86_REG_DI;
- break;
- case 6:
- //DISASM_OUTPUT(("[SetModRM16] Addressing mode [BP]\n"));
- X86Instruction->BaseRegister = X86_REG_BP;
- break;
- case 7:
- //DISASM_OUTPUT(("[SetModRM16] Addressing mode [BX]\n"));
- X86Instruction->BaseRegister = X86_REG_BX;
- break;
- }
-
- X86Instruction->HasBaseRegister = TRUE;
- Operand->Flags |= OP_ADDRESS | OP_REG;
- X86_SET_ADDR();
- }
-
- return Address;
-}
-
-// NOTE: Address points one byte after ModRM
-INTERNAL U8 *SetModRM32(INSTRUCTION *Instruction, U8 *Address, INSTRUCTION_OPERAND *Operand, U32 OperandIndex, BOOL SuppressErrors)
-{
- MODRM modrm;
- REX_MODRM rex_modrm;
- U32 i, ImmediateSize = 0;
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
-
- if (X86Instruction->AddressSize == 2)
- {
- return SetModRM16(Instruction, Address, Operand, OperandIndex, SuppressErrors);
- }
-
- //DISASM_OUTPUT(("[SetModRM32] Length %d, modrm = 0x%02X\n", Instruction->Length, X86Instruction->modrm_b));
- modrm = X86Instruction->modrm;
- rex_modrm = X86Instruction->rex_modrm;
-
- //
- // Both operands are registers
- // Condition: mod = 3
- //
- if (modrm.mod == 3)
- {
- switch (Operand->Length)
- {
- case 8: Operand->Register = AMD64_64BIT_OFFSET + rex_modrm.rm; break;
- case 4: Operand->Register = X86_32BIT_OFFSET + rex_modrm.rm; CHECK_AMD64_REG(); break;
- case 2: Operand->Register = X86_16BIT_OFFSET + rex_modrm.rm; CHECK_AMD64_REG(); break;
- case 1: Operand->Register = X86_8BIT_OFFSET + rex_modrm.rm; if (X86Instruction->rex_b) CHECK_AMD64_REG(); break;
- default: assert(0); return NULL;
- }
- X86_SET_REG(rex_modrm.rm);
- Operand->Flags |= OP_REG;
- }
-
- //
- // Address is an absolute address (technically a 32-bit offset from DS:0)
- // mod = 0 and rm = 5
- //
- else if (modrm.mod == 0 && modrm.rm == 5)
- {
- //DISASM_OUTPUT(("[SetModRM32] Absolute addressing (displacement 0x%08lX)\n", *(S32 *)Address));
- Operand->Flags |= OP_ADDRESS;
- X86Instruction->Displacement = (S64)*((S32 *)Address);
- INSTR_INC(4); // increment Instruction->Length and address
-
- if (IS_AMD64())
- {
- // RIP-relative addressing always replaced Disp32, even when using a 32-bit address space
- // (via address size override prefix)
- switch (X86Instruction->OperandSize)
- {
- case 8: Operand->Register = AMD64_REG_RIP; break;
- case 4: Operand->Register = X86_REG_EIP; break;
- case 2: Operand->Register = X86_REG_IP; break;
- default: assert(0); return NULL;
- }
- X86Instruction->BaseRegister = Operand->Register;
- X86Instruction->HasBaseRegister = TRUE;
- X86Instruction->Relative = TRUE;
- Operand->Flags |= OP_IPREL | OP_SIGNED | OP_REG;
- SANITY_CHECK_SEGMENT_OVERRIDE();
- if (!X86Instruction->HasSegmentOverridePrefix) X86Instruction->Segment = SEG_CS;
- X86Instruction->HasFullDisplacement = TRUE;
-
- // Since there may be an immediate value to follow, it is necessary
- // to determine the length in order get the proper offset
- //
- // Maybe there is a better way to do this, since this is wasteful
- // (the size of the immediate value will have to be decoded again later
- // in SetOperands)
-
- for (ImmediateSize = 0, i = OperandIndex+1; i < Instruction->OperandCount; i++)
- {
- if ((X86Instruction->Opcode.OperandFlags[i] & X86_AMODE_MASK) != AMODE_I) continue;
- else assert(!ImmediateSize);
- switch (X86Instruction->Opcode.OperandFlags[i] & X86_OPTYPE_MASK)
- {
- case OPTYPE_v:
- ImmediateSize = X86Instruction->OperandSize;
- break;
- case OPTYPE_z:
- switch (X86Instruction->OperandSize)
- {
- case 8: case 4: ImmediateSize = 4; break;
- case 2: ImmediateSize = 2; break;
- default: assert(0); return NULL;
- }
- break;
- case OPTYPE_b:
- ImmediateSize = 1;
- break;
- case OPTYPE_w:
- ImmediateSize = 2;
- break;
- case OPTYPE_1:
- break;
- default:
- assert(0);
- break;
- }
- }
-
- Operand->TargetAddress = ApplyDisplacement((U64)Address + ImmediateSize, Instruction);
- }
- else if (IS_VALID_ADDRESS(X86Instruction->Displacement))
- {
- X86_SET_TARGET();
- Operand->Flags |= OP_GLOBAL;
- X86Instruction->HasFullDisplacement = TRUE;
- }
-
- X86_SET_ADDR();
- }
-
- //
- // Addressing mode indicated by SIB byte
- // Condition: mod = 0-2 and rm = 4
- //
- else if (modrm.rm == 4)
- {
- // The X86_SET_*() is called from within SetSIB()
- Address = SetSIB(Instruction, Address, Operand, OperandIndex, SuppressErrors);
- if (!Address)
- {
- assert(0);
- return NULL;
- }
-
- if (X86Instruction->sib.base != 5) // if base == 5, the displacement is handled in SetSIB
- {
- switch (modrm.mod)
- {
- case 1: // 8-bit displacement
- //DISASM_OUTPUT(("[SetModRM32] After SIB: displacement 0x%02X\n", *((S8 *)Address)));
- X86Instruction->Displacement = (S64)(*((S8 *)Address));
- INSTR_INC(1); // increment Instruction->Length and address
- break;
- case 2: // 32-bit displacement
- //DISASM_OUTPUT(("[SetModRM32] After SIB: displacement 0x%08lX\n", *((S32 *)Address)));
- X86Instruction->Displacement = (S64)*((S32 *)Address);
- if (IS_VALID_ADDRESS(X86Instruction->Displacement))
- {
- Operand->Flags |= OP_GLOBAL;
- X86Instruction->HasFullDisplacement = TRUE;
- }
- INSTR_INC(4); // increment Instruction->Length and address
- break;
- }
- }
- }
-
- // Indirect addressing
- // Conditions:
- // (1) mod = 0 and (rm = 0-3 or 6-7)
- // (2) mod = 1-2 and rm != 4
- else
- {
- switch (X86Instruction->AddressSize)
- {
- case 8: Operand->Register = AMD64_64BIT_OFFSET + rex_modrm.rm; break;
- case 4: Operand->Register = X86_32BIT_OFFSET + rex_modrm.rm; CHECK_AMD64_REG(); break;
- default: assert(0); return NULL;
- }
- X86Instruction->BaseRegister = Operand->Register;
- X86Instruction->HasBaseRegister = TRUE;
- Operand->Flags |= OP_ADDRESS | OP_REG;
- X86_SET_SEG(rex_modrm.rm);
- X86_SET_ADDR();
-
- switch (modrm.mod)
- {
- case 0: // no displacement
- //DISASM_OUTPUT(("[SetModRM32] Indirect addressing (no displacement, reg_rm = %d)\n", rex_modrm.rm));
- break;
- case 1: // 8-bit signed displacement
- //DISASM_OUTPUT(("[SetModRM32] Indirect addressing (displacement = 0x%02X, reg_rm = %d)\n", *(S8 *)Address, rex_modrm.rm));
- X86Instruction->Displacement = (S64)(*((S8 *)Address));
- INSTR_INC(1); // increment Instruction->Length and address
- break;
- case 2: // 32-bit displacement
- //DISASM_OUTPUT(("[SetModRM32] Indirect addressing (displacement = 0x%08lX, reg_rm = %d)\n", *(S32 *)Address, rex_modrm.rm));
- X86Instruction->Displacement = (S64)*((S32 *)Address);
- if (IS_VALID_ADDRESS(X86Instruction->Displacement))
- {
- Operand->Flags |= OP_GLOBAL;
- X86Instruction->HasFullDisplacement = TRUE;
- }
- INSTR_INC(4); // increment Instruction->Length and address
- break;
- }
- }
-
- return Address;
-}
-
-// NOTE: Address points at SIB
-INTERNAL U8 *SetSIB(INSTRUCTION *Instruction, U8 *Address, INSTRUCTION_OPERAND *Operand, U32 OperandIndex, BOOL SuppressErrors)
-{
- REX rex;
- SIB sib;
- REX_SIB rex_sib;
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
-
- X86Instruction->sib_b = *Address;
- SET_SIB(X86Instruction->sib, *Address);
- sib = X86Instruction->sib;
- rex = X86Instruction->rex;
- SET_REX_SIB(X86Instruction->rex_sib, rex, sib);
- rex_sib = X86Instruction->rex_sib;
-
- //if (!X86Instruction->rex_b) DISASM_OUTPUT(("[0x%08I64X] SIB = 0x%02X (scale=%d, index=%d, base=%d)\n", VIRTUAL_ADDRESS, *Address, sib.scale, sib.index, sib.base)); \
- //else DISASM_OUTPUT(("[0x%08I64X] SIB = 0x%02X (scale=%d, index=%d, base=%d)\n", VIRTUAL_ADDRESS, *Address, sib.scale, rex_sib.index, rex_sib.base)); \
- //DISASM_OUTPUT(("[SetSIB] Current instruction length = %d\n", Instruction->Length));
-
- Operand->Flags |= OP_ADDRESS;
- X86_SET_ADDR();
- INSTR_INC(1); // increment Instruction->Length and address
-
- if (sib.base == 5)
- {
- switch (X86Instruction->modrm.mod)
- {
- case 0:
- X86Instruction->Displacement = (S64)*((S32 *)Address);
- if (IS_VALID_ADDRESS(X86Instruction->Displacement))
- {
- X86Instruction->HasFullDisplacement = TRUE;
- X86_SET_TARGET();
- Operand->Flags |= OP_GLOBAL;
- }
- INSTR_INC(4);
- break;
- case 1:
- X86Instruction->Displacement = (S64)(*((S8 *)Address));
- if (rex_sib.base == 5)
- {
- switch (X86Instruction->AddressSize)
- {
- case 8: Operand->Register = AMD64_REG_RBP; break;
- case 4: Operand->Register = X86_REG_EBP; break;
- default: assert(0); return NULL;
- }
- X86_SET_SEG(REG_EBP);
- }
- else
- {
- Operand->Register = AMD64_REG_R13;
- }
-
- X86Instruction->BaseRegister = Operand->Register;
- X86Instruction->HasBaseRegister = TRUE;
- Operand->Flags |= OP_REG;
- INSTR_INC(1);
- break;
- case 2:
- X86Instruction->Displacement = (S64)*((S32 *)Address);
- if (rex_sib.base == 5)
- {
- switch (X86Instruction->AddressSize)
- {
- case 8: Operand->Register = AMD64_REG_RBP; break;
- case 4: Operand->Register = X86_REG_EBP; break;
- default: assert(0); return NULL;
- }
- X86_SET_SEG(REG_EBP);
- }
- else
- {
- Operand->Register = AMD64_REG_R13;
- }
-
- if (IS_VALID_ADDRESS(X86Instruction->Displacement))
- {
- Operand->Flags |= OP_GLOBAL;
- X86Instruction->HasFullDisplacement = TRUE;
- }
- X86Instruction->BaseRegister = Operand->Register;
- X86Instruction->HasBaseRegister = TRUE;
- Operand->Flags |= OP_REG;
- INSTR_INC(4);
- break;
- }
- }
- else
- {
- switch (X86Instruction->AddressSize)
- {
- case 8: Operand->Register = AMD64_64BIT_OFFSET + rex_sib.base; break;
- case 4: Operand->Register = X86_32BIT_OFFSET + rex_sib.base; CHECK_AMD64_REG(); break;
- default: assert(0); return NULL;
- }
- X86Instruction->BaseRegister = Operand->Register;
- X86Instruction->HasBaseRegister = TRUE;
- X86_SET_SEG(rex_sib.base);
- Operand->Flags |= OP_REG;
- }
-
- if (rex_sib.index != 4)
- {
- switch (X86Instruction->AddressSize)
- {
- case 8:
- X86Instruction->IndexRegister = AMD64_64BIT_OFFSET + rex_sib.index;
- break;
- case 4:
- X86Instruction->IndexRegister = X86_32BIT_OFFSET + rex_sib.index;
- break;
- default:
- fflush(stdout);
- assert(0);
- return NULL;
- }
-
- Operand->TargetAddress = 0;
- X86Instruction->HasIndexRegister = TRUE;
- //DISASM_OUTPUT(("[SetSIB] Index register = %s\n", X86_Registers[X86_32BIT_OFFSET + rex_sib.index]));
-
- switch (sib.scale)
- {
- case 0: X86Instruction->Scale = 1; break;
- case 1: X86Instruction->Scale = 2; break;
- case 2: X86Instruction->Scale = 4; break;
- case 3: X86Instruction->Scale = 8; break;
- }
- //DISASM_OUTPUT(("[SetSIB] Scale = %d\n", X86Instruction->Scale));
- }
-
- return Address;
-}
-
-INTERNAL U64 ApplyDisplacement(U64 Address, INSTRUCTION *Instruction)
-{
- X86_INSTRUCTION *X86Instruction = &Instruction->X86;
-
-#ifdef SUPPORT_WRAPAROUND
- U64 VirtualAddress = Address + Instruction->VirtualAddressDelta;
- switch (X86Instruction->OperandSize)
- {
- case 8:
- {
- U64 PreAddr = VirtualAddress;
- U64 PostAddr = PreAddr + X86Instruction->Displacement;
- return Address + (PostAddr - PreAddr);
- }
- case 4:
- {
- // We have to do this carefully...
- // If EIP = FFFFF000 and Displacement=2000 then the final IP should be 1000
- // due to wraparound
- U32 PreAddr = (U32)VirtualAddress;
- U32 PostAddr = PreAddr + (S32)X86Instruction->Displacement;
- return Address + (PostAddr - PreAddr);
- }
- case 2:
- {
- // We have to do this carefully...
- // If IP = F000 and Displacement=2000 then the final IP should be 1000
- // due to wraparound
- U16 PreAddr = (U16)VirtualAddress;
- U16 PostAddr = PreAddr + (S16)X86Instruction->Displacement;
- return Address + (PostAddr - PreAddr);
- }
- default:
- assert(0);
- return 0;
- }
-#else
- return (Address + X86Instruction->Displacement);
-#endif
-}
-
-
-
-INTERNAL BOOL IsValidLockPrefix(X86_INSTRUCTION *X86Instruction, U8 Opcode, U32 OpcodeLength, U8 Group, U8 OpcodeExtension)
-{
- switch (OpcodeLength)
- {
- case 1:
- switch (X86_LockPrefix_1[Opcode])
- {
- case 0: // instruction can't be locked
- return FALSE;
- case 1: // instruction can be locked
- break;
- case GR:
- assert(Group);
- if (!X86_LockPrefix_Groups[Group-1][OpcodeExtension]) return FALSE;
- break;
- default:
- assert(0);
- return FALSE;
- }
- break;
-
- case 2:
- case 3:
- switch (X86_LockPrefix_2[Opcode])
- {
- case 0: // lock prefix is not acceptable
- return FALSE;
- case 1: // lock prefix allowed
- break;
- case GR:
- assert(Group);
- if (!X86_LockPrefix_Groups[Group-1][OpcodeExtension]) return FALSE;
- break;
- default:
- assert(0);
- return FALSE;
- }
- break;
-
- default:
- assert(0);
- return FALSE;
- }
-
- if (!X86Instruction->HasModRM || X86Instruction->modrm.mod == 3 || !X86Instruction->HasDstAddressing)
- {
- DISASM_OUTPUT(("[0x%08I64X] ERROR: Instruction \"%s\" with LOCK prefix has invalid ModRM addressing\n", VIRTUAL_ADDRESS, X86Instruction->Opcode.Mnemonic, X86Instruction->Instruction->Address));
- return FALSE;
- }
-
- return TRUE;
-}
diff --git a/src/thirdparty/mhook/disasm-lib/disasm_x86.h b/src/thirdparty/mhook/disasm-lib/disasm_x86.h
deleted file mode 100644
index e64a11f28..000000000
--- a/src/thirdparty/mhook/disasm-lib/disasm_x86.h
+++ /dev/null
@@ -1,837 +0,0 @@
-// Copyright (C) 2004, Matt Conover (mconover@gmail.com)
-#ifndef X86_DISASM_H
-#define X86_DISASM_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// NOTE: the processor may actually accept less than this amount (officially 15)
-// #define AMD64_MAX_INSTRUCTION_LEN 15 // theoretical max 25=5+2+1+1+8+8
-#define AMD64_MAX_PREFIX_LENGTH 5 // 4 legacy + 1 rex
-#define AMD64_MAX_ADDRESS_LENGTH 18 // modrm + sib + 8 byte displacement + 8 byte immediate value
-
-// NOTE: the processor may actually accept less than this amount (officially 15)
-#define X86_MAX_INSTRUCTION_LEN 15 // theoretical 16=4+2+1+1+4+4
-#define X86_MAX_PREFIX_LENGTH 4
-#define X86_MAX_OPCODE_LENGTH 3 // third byte is either a suffix or prefix
-#define X86_MAX_ADDRESS_LENGTH 10 // modrm + sib + 4 byte displacement + 4 byte immediate value
-#define X86_MAX_OPERANDS 3
-
-#define X86_PREFIX(a) ((a)->MnemonicFlags == ITYPE_EXT_PREFIX)
-#define X86_SPECIAL_EXTENSION(a) ((a)->MnemonicFlags & (ITYPE_EXT_MODRM|ITYPE_EXT_FPU|ITYPE_EXT_SUFFIX|ITYPE_EXT_64))
-#define X86_EXTENDED_OPCODE(a) ((a)->Table)
-#define X86_INVALID(a) (!(a)->MnemonicFlags && !(a)->Table)
-#define X86_OPERAND_COUNT(a) ((a)->OperandFlags[0] ? ((a)->OperandFlags[1] ? ((a)->OperandFlags[2] ? 3 : 2) : 1) : 0)
-#define X86_GET_CATEGORY(p) ((p)->MnemonicFlags & ITYPE_GROUP_MASK)
-#define X86_GET_TYPE(p) ((p)->MnemonicFlags & ITYPE_TYPE_MASK)
-
-// Various instructions being specially decoded
-#define X86_TWO_BYTE_OPCODE 0x0f
-#define PREFIX_SEGMENT_OVERRIDE_ES 0x26
-#define PREFIX_SEGMENT_OVERRIDE_CS 0x2e
-#define PREFIX_BRANCH_NOT_TAKEN 0x2e // used only with conditional jumps
-#define PREFIX_SEGMENT_OVERRIDE_SS 0x36
-#define PREFIX_SEGMENT_OVERRIDE_DS 0x3e
-#define PREFIX_BRANCH_TAKEN 0x3e // used only with conditional jumps
-#define PREFIX_SEGMENT_OVERRIDE_FS 0x64
-#define PREFIX_SEGMENT_OVERRIDE_GS 0x65
-#define PREFIX_OPERAND_SIZE 0x66
-#define PREFIX_ADDRESS_SIZE 0x67
-#define PREFIX_LOCK 0xf0
-#define PREFIX_REPNE 0xf2
-#define PREFIX_REP 0xf3
-
-//////////////////////////////////////////////////////////////////
-// Implicit operand handling
-//////////////////////////////////////////////////////////////////
-
-#define X86_AMODE_MASK 0x00FF0000 // bits 16-23 (AMODE_*)
-#define X86_OPFLAGS_MASK 0x0000FF80 // bits 7-15 (OPTYPE_*)
-#define X86_OPTYPE_MASK 0xFF0000FF // bits 0-7 (OPTYPE_* below + OP_REG) and 24-31 (OPTYPE_* above)
-
-#define OPTYPE_0 0x01
-#define OPTYPE_1 0x02
-#define OPTYPE_FF 0x03
-//...
-#define OPTYPE_CS 0x10
-#define OPTYPE_DS 0x11
-#define OPTYPE_ES 0x12
-#define OPTYPE_FS 0x13
-#define OPTYPE_GS 0x14
-#define OPTYPE_SS 0x15
-#define OPTYPE_CR0 0x16
-#define OPTYPE_TSC 0x17 // time stamp counter
-//...
-#define OPTYPE_FLAGS 0x20
-#define OPTYPE_xFLAGS 0x21 // RFLAGS/EFLAGS (depending on operand size)
-#define OPTYPE_xCX_HI_xBX_LO 0x22 // represented by 2 registers CX:BX or ECX:EBX (depending on operand size)
-#define OPTYPE_xDX_HI_xAX_LO 0x23 // DX:AX or EDX:EAX (depending on operand size)
-#define OPTYPE_EDX_HI_EAX_LO 0x24 // DX:AX or EDX:EAX (depending on operand size)
-#define OPTYPE_EDX_ECX_EBX_EAX 0x25 // all registers are set
-//...
-#define OPTYPE_STx 0x30
-#define OPTYPE_ST0 0x31
-#define OPTYPE_ST1 0x32
-#define OPTYPE_FPU_STATUS 0x33
-#define OPTYPE_FPU_CONTROL 0x34
-#define OPTYPE_FPU_TAG 0x35
-#define OPTYPE_FLDZ 0x36 // 0
-#define OPTYPE_FLD1 0x37 // 1
-#define OPTYPE_FLDPI 0x38 // pi
-#define OPTYPE_FLDL2T 0x39 // lg 10
-#define OPTYPE_FLDL2E 0x3A // lg e
-#define OPTYPE_FLDLG2 0x3B // log_10 2
-#define OPTYPE_FLDLN2 0x3C // log_e 2
-//...
-#define OPTYPE_CS_MSR 0x40
-#define OPTYPE_EIP_MSR 0x41
-#define OPTYPE_ESP_MSR 0x42
-#define OPTYPE_KERNELBASE_MSR 0x43
-#define OPTYPE_FMASK_MSR 0x44
-#define OPTYPE_STAR_MSR 0x45
-#define OPTYPE_CSTAR_MSR 0x46 // 32-bit mode
-#define OPTYPE_LSTAR_MSR 0x47 // 64-bit mode
-
-
-// NOTE: OPTYPES >= 0x80 reserved for registers (OP_REG+XX)
-#define OPTYPE_REG_AL OP_REG+0x01
-#define OPTYPE_REG_CL OP_REG+0x02
-#define OPTYPE_REG_AH OP_REG+0x03
-#define OPTYPE_REG_AX OP_REG+0x04
-#define OPTYPE_REG_DX OP_REG+0x05
-#define OPTYPE_REG_ECX OP_REG+0x06
-#define OPTYPE_REG8 OP_REG+0x07
-
-// If address size is 2, use BP
-// If address size is 4, use EBP
-// If address size is 8, use RBP
-#define OPTYPE_REG_xBP OP_REG+0x08
-
-// If address size is 2, use BP
-// If address size is 4, use EBP
-// If address size is 8, use RBP
-#define OPTYPE_REG_xSP OP_REG+0x09
-
-// If operand size is 2, take 8-bit register
-// If operand size is 4, take 16-bit register
-// If operand size is 8, take 32-bit register
-#define OPTYPE_REG_xAX_SMALL OP_REG+0x0a
-
-// If operand size is 2, take 16-bit register
-// If operand size is 4, take 32-bit register
-// If operand size is 8, take 64-bit register
-#define OPTYPE_REG_xAX_BIG OP_REG+0x0b
-
-typedef enum _CPU_TYPE
-{
- CPU_UNKNOWN=0,
-
- ///////////////////////////////////////
- // 1st generation
- ///////////////////////////////////////
- // 1978
- //CPU_8086 = 1MB address limit, 16-bit registers
- // 1982
- //CPU_i186
-
- ///////////////////////////////////////
- // 2nd generation
- ///////////////////////////////////////
- // 1982
- //CPU_I286 // 16MB limit, 16-bit registers, added protected mode
- CPU_I287, // CPU_I286 + math coprocessor
-
- ///////////////////////////////////////
- // 3rd generation
- ///////////////////////////////////////
- // 1985
- CPU_I386, // 32-bit registers, 4GB memory limit
- // 1988
- CPU_I387, // CPU_I386 + math coprocessor
-
- ///////////////////////////////////////
- // 4th generation (1989)
- ///////////////////////////////////////
- CPU_I486,
-
- ///////////////////////////////////////
- // 5th generation
- ///////////////////////////////////////
- // 1993
- CPU_PENTIUM, // superscalar architecture
- // 1997
- //CPU_PENTIUM_MMX
-
- ///////////////////////////////////////
- // 6th generation (1995)
- ///////////////////////////////////////
- CPU_PENTIUM_PRO, // P6 architecture, no MMX, out-of-order execution, speculative execution
- //CPU_CYRIX_6X86,
- //CPU_AMD_K5 // RISC processor
- // 1997
- CPU_PENTIUM2, // Pentium Pro architecture + MMX
- //CPU_AMD_K6,
- //CPU_CYRIX_6X86MX, // Cyrix 6x86 + MMX
- // 1998
- CPU_AMD_K6_2, // added 3DNow! (MMX)
- // 1999
- // CPU_AMD_K6_3 // added SSE
-
- ///////////////////////////////////////
- // 7th generation
- ///////////////////////////////////////
- // 1999
- CPU_PENTIUM3, // introduced SSE
- // CPU_AMD_K7 // aka Athlon
- // 2000
- CPU_PENTIUM4, // introduced SSE2 and hyperthreading
-
- // 2004? 2005?
- CPU_PRESCOTT, // introduced SSE3
-
- ///////////////////////////////////////
- // 8th generation (X86-64)
- // IA32 instruction set with 64-bit extensions, >4GB RAM
- ///////////////////////////////////////
-
- // 2003
- CPU_AMD64, // includes Athlon 64 and Opteron aka X86-64
-
- // 2004?
- //CPU_EMD64 // Intel's version of AMD64
- CPU_IA64 // aka Itanium: new instruction set -- adds JMPE to IA32 mode to return to IA64 native code
-
-} CPU_TYPE;
-
-//////////////////////////////////////////////////////////////////
-// Conditions (these can be OR'd)
-//////////////////////////////////////////////////////////////////
-
-// Used for Flags.Preconditions
-#define COND_O (1<<0) // overflow (signed)
-#define COND_C (1<<1) // below (unsigned)
-#define COND_Z (1<<2) // equal (unsigned)
-#define COND_S (1<<3) // sign set (signed)
-#define COND_P (1<<4) // parity even
-#define COND_BE (1<<5) // CF or ZF is set (unsigned)
-#define COND_L (1<<6) // (SF && !OF) || (OF && !SF)
-#define COND_LE (1<<7) // ZF || (SF && !OF) || (OF && !SF) (signed)
-#define COND_NO (1<<8) // !O
-#define COND_NC (1<<9) // !C (not below, above or equal to)
-#define COND_NZ (1<<10) // !Z (not equal)
-#define COND_NS (1<<11) // !S
-#define COND_NP (1<<12) // !P (parity odd)
-#define COND_NL (1<<13) // (!SF && !OF) || (SF && OF)
-#define COND_G (1<<14) // !ZF && ((!SF && !OF) || (SF && OF))
-#define COND_D (1<<15) // DF
-#define COND_REG_xCX_BIG_Z (1<<16) // CX/ECX/RCX (depending on address size) == 0
-#define COND_REG_xCX_BIG_NZ (1<<17) // CX/ECX/RCX (depending on address size) != 0
-#define COND_OP1_EQ_OP2 (1<<18)
-#define COND_OP1_EQ_OP3 (1<<19)
-#define COND_B COND_C
-#define COND_NAE COND_C
-#define COND_E COND_Z
-#define COND_NA COND_BE
-#define COND_PE COND_P
-#define COND_U COND_P
-#define COND_NGE COND_L
-#define COND_NG COND_LE
-#define COND_PO COND_NP
-#define COND_NU COND_NP
-#define COND_NE COND_NZ
-#define COND_NB COND_NC
-#define COND_AE COND_NC
-#define COND_NE COND_NZ
-#define COND_A (COND_NC|COND_NZ)
-#define COND_NBE COND_A
-#define COND_GE COND_NL
-#define COND_NLE COND_G
-
-// Used for Opcode.FlagsChanged
-#define FLAG_CF_SET (1<<0)
-#define FLAG_DF_SET (1<<1)
-#define FLAG_IF_SET (1<<2)
-#define FLAG_SET_MASK (FLAG_CF_SET|FLAG_DF_SET|FLAG_IF_SET)
-
-#define FLAG_SF_CLR (1<<3)
-#define FLAG_ZF_CLR (1<<4)
-#define FLAG_AF_CLR (1<<5)
-#define FLAG_CF_CLR (1<<6)
-#define FLAG_DF_CLR (1<<7)
-#define FLAG_IF_CLR (1<<8)
-#define FLAG_OF_CLR (1<<9)
-#define FPU_C0_CLR (1<<19)
-#define FPU_C1_CLR (1<<20)
-#define FPU_C2_CLR (1<<21)
-#define FPU_C3_CLR (1<<22)
-#define FPU_ALL_CLR (FPU_C0_CLR|FPU_C1_CLR|FPU_C2_CLR|FPU_C3_CLR)
-#define FLAG_CLR_MASK (FLAG_SF_CLR|FLAG_ZF_CLR|FLAG_AF_CLR|FLAG_CF_CLR|FLAG_DF_CLR|FLAG_IF_CLR|FLAG_OF_CLR|FPU_ALL_CLR)
-
-#define FLAG_OF_MOD (1<<10)
-#define FLAG_SF_MOD (1<<11)
-#define FLAG_ZF_MOD (1<<12)
-#define FLAG_AF_MOD (1<<13)
-#define FLAG_PF_MOD (1<<14)
-#define FLAG_CF_MOD (1<<15)
-#define FLAG_DF_MOD (1<<16)
-#define FLAG_IF_MOD (1<<17)
-#define FLAG_ALL_MOD (FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD|FLAG_CF_MOD|FLAG_DF_MOD|FLAG_IF_MOD)
-#define FLAG_COMMON_MOD (FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD|FLAG_CF_MOD)
-#define FPU_C0_MOD (1<<23)
-#define FPU_C1_MOD (1<<24)
-#define FPU_C2_MOD (1<<25)
-#define FPU_C3_MOD (1<<26)
-#define FPU_ALL_MOD (FPU_C0_MOD|FPU_C1_MOD|FPU_C2_MOD|FPU_C3_MOD)
-#define FLAG_MOD_MASK (FLAG_ALL_MOD|FPU_ALL_MOD)
-
-#define FLAG_CF_TOG (1<<18)
-#define FLAG_TOG_MASK FLAG_CF_TOG
-
-// Used for Opcode.ResultsIfTrue and Opcode.ResultsIfFalse
-#define OP1_DST (1<<0)
-#define OP2_DST (1<<1)
-#define OP3_DST (1<<2)
-#define OP1_SRC (1<<3)
-#define OP2_SRC (1<<4)
-#define OP3_SRC (1<<5)
-#define FPU_STACK_INC (1<<6)
-#define FPU_STACK_INC2 (1<<7)
-#define FPU_STACK_DEC (1<<8)
-#define SERIALIZE_WRITE (1<<9)
-#define SERIALIZE_READ (1<<10)
-#define xCX_DEC (1<<11)
-#define xCX_REP_DEC (1<<12)
-#define xDI_DEC (1<<13)
-#define xDI_INC (1<<14)
-#define xSI_DEC (1<<15)
-#define xSI_INC (1<<16)
-#define xDI_DECx (1<<17)
-#define xDI_INCx (1<<18)
-#define xSI_DECx (1<<19)
-#define xSI_INCx (1<<20)
-#define FPU_STACK_PUSH FPU_STACK_DEC
-#define FPU_STACK_POP FPU_STACK_INC
-#define FPU_STACK_POP2 FPU_STACK_INC2
-#define SERIALIZE_ALL (SERIALIZE_WRITE|SERIALIZE_READ)
-
-#define X86_SEGMENT_OFFSET 0x00
-#define X86_TEST_OFFSET 0x10
-#define X86_CONTROL_OFFSET 0x20
-#define X86_DEBUG_OFFSET 0x30
-#define X86_FPU_OFFSET 0x40
-#define X86_MMX_OFFSET 0x50
-#define X86_XMM_OFFSET 0x60
-#define X86_8BIT_OFFSET 0x70
-#define X86_16BIT_OFFSET 0x80
-#define X86_32BIT_OFFSET 0x90
-#define AMD64_8BIT_OFFSET 0xA0
-#define AMD64_16BIT_OFFSET 0xB0
-#define AMD64_32BIT_OFFSET 0xC0
-#define AMD64_64BIT_OFFSET 0xD0
-
-typedef enum _X86_REGISTER
-{
- // Segments
- X86_SEG_ES = X86_SEGMENT_OFFSET,
- X86_SEG_CS,
- X86_SEG_SS,
- X86_SEG_DS,
- X86_SEG_FS,
- X86_SEG_GS,
-
- // Miscellaneous
- X86_REG_FLAGS,
- X86_REG_EFLAGS,
- AMD64_REG_RFLAGS,
- X86_REG_IP,
- X86_REG_EIP,
- AMD64_REG_RIP,
-
- // Test registers
- X86_REG_TR0 = X86_TEST_OFFSET,
- X86_REG_TR1,
- X86_REG_TR2,
- X86_REG_TR3,
- X86_REG_TR4,
- X86_REG_TR5,
- X86_REG_TR6,
- X86_REG_TR7,
- X86_REG_TR8,
- X86_REG_TR9,
- X86_REG_TR10,
- X86_REG_TR11,
- X86_REG_TR12,
- X86_REG_TR13,
- X86_REG_TR14,
- X86_REG_TR15,
-
- // Control registers
- X86_REG_CR0=X86_CONTROL_OFFSET,
- X86_REG_CR1,
- X86_REG_CR2,
- X86_REG_CR3,
- X86_REG_CR4,
- X86_REG_CR5,
- X86_REG_CR6,
- X86_REG_CR7,
- X86_REG_CR8,
- X86_REG_CR9,
- X86_REG_CR10,
- X86_REG_CR11,
- X86_REG_CR12,
- X86_REG_CR13,
- X86_REG_CR14,
- X86_REG_CR15,
-
- // Debug registers
- X86_REG_DR0=X86_DEBUG_OFFSET,
- X86_REG_DR1,
- X86_REG_DR2,
- X86_REG_DR3,
- X86_REG_DR4,
- X86_REG_DR5,
- X86_REG_DR6,
- X86_REG_DR7,
- X86_REG_DR8,
- X86_REG_DR9,
- X86_REG_DR10,
- X86_REG_DR11,
- X86_REG_DR12,
- X86_REG_DR13,
- X86_REG_DR14,
- X86_REG_DR15,
-
- // FPU registers
- X86_REG_ST0=X86_FPU_OFFSET,
- X86_REG_ST1,
- X86_REG_ST2,
- X86_REG_ST3,
- X86_REG_ST4,
- X86_REG_ST5,
- X86_REG_ST6,
- X86_REG_ST7,
-
- // MMX registers
- X86_REG_MM0=X86_MMX_OFFSET,
- X86_REG_MM1,
- X86_REG_MM2,
- X86_REG_MM3,
- X86_REG_MM4,
- X86_REG_MM5,
- X86_REG_MM6,
- X86_REG_MM7,
-
- // XMM registers
- X86_REG_XMM0=X86_XMM_OFFSET,
- X86_REG_XMM1,
- X86_REG_XMM2,
- X86_REG_XMM3,
- X86_REG_XMM4,
- X86_REG_XMM5,
- X86_REG_XMM6,
- X86_REG_XMM7,
-
- // 8-bit registers
- X86_REG_AL=X86_8BIT_OFFSET,
- X86_REG_CL,
- X86_REG_DL,
- X86_REG_BL,
- X86_REG_AH,
- X86_REG_CH,
- X86_REG_DH,
- X86_REG_BH,
-
- // 16-bit registers
- X86_REG_AX=X86_16BIT_OFFSET,
- X86_REG_CX,
- X86_REG_DX,
- X86_REG_BX,
- X86_REG_SP,
- X86_REG_BP,
- X86_REG_SI,
- X86_REG_DI,
-
- // 32-bit registers
- X86_REG_EAX=X86_32BIT_OFFSET,
- X86_REG_ECX,
- X86_REG_EDX,
- X86_REG_EBX,
- X86_REG_ESP,
- X86_REG_EBP,
- X86_REG_ESI,
- X86_REG_EDI,
-
- // AMD64 8-bit registers
- AMD64_REG_AL=AMD64_8BIT_OFFSET,
- AMD64_REG_CL,
- AMD64_REG_DL,
- AMD64_REG_BL,
- AMD64_REG_SPL,
- AMD64_REG_BPL,
- AMD64_REG_SIL,
- AMD64_REG_DIL,
- AMD64_REG_R8B,
- AMD64_REG_R9B,
- AMD64_REG_R10B,
- AMD64_REG_R11B,
- AMD64_REG_R12B,
- AMD64_REG_R13B,
- AMD64_REG_R14B,
- AMD64_REG_R15B,
-
- // AMD64 16-bit registers
- AMD64_REG_AX=AMD64_16BIT_OFFSET,
- AMD64_REG_CX,
- AMD64_REG_DX,
- AMD64_REG_BX,
- AMD64_REG_SP,
- AMD64_REG_BP,
- AMD64_REG_SI,
- AMD64_REG_DI,
- AMD64_REG_R8W,
- AMD64_REG_R9W,
- AMD64_REG_R10W,
- AMD64_REG_R11W,
- AMD64_REG_R12W,
- AMD64_REG_R13W,
- AMD64_REG_R14W,
- AMD64_REG_R15W,
-
- // AMD64 32-bit registers
- AMD64_REG_EAX=AMD64_32BIT_OFFSET,
- AMD64_REG_ECX,
- AMD64_REG_EDX,
- AMD64_REG_EBX,
- AMD64_REG_ESP,
- AMD64_REG_EBP,
- AMD64_REG_ESI,
- AMD64_REG_EDI,
- AMD64_REG_R8D,
- AMD64_REG_R9D,
- AMD64_REG_R10D,
- AMD64_REG_R11D,
- AMD64_REG_R12D,
- AMD64_REG_R13D,
- AMD64_REG_R14D,
- AMD64_REG_R15D,
-
- // AMD64 64-bit registers
- AMD64_REG_RAX=AMD64_64BIT_OFFSET,
- AMD64_REG_RCX,
- AMD64_REG_RDX,
- AMD64_REG_RBX,
- AMD64_REG_RSP,
- AMD64_REG_RBP,
- AMD64_REG_RSI,
- AMD64_REG_RDI,
- AMD64_REG_R8,
- AMD64_REG_R9,
- AMD64_REG_R10,
- AMD64_REG_R11,
- AMD64_REG_R12,
- AMD64_REG_R13,
- AMD64_REG_R14,
- AMD64_REG_R15
-} X86_REGISTER;
-
-typedef enum _X86_TEST_REGISTER
-{
- REG_TR0=0,
- REG_TR1,
- REG_TR2,
- REG_TR3,
- REG_TR4,
- REG_TR5,
- REG_TR6,
- REG_TR7,
- REG_TR8,
- REG_TR9,
- REG_TR10,
- REG_TR11,
- REG_TR12,
- REG_TR13,
- REG_TR14,
- REG_TR15
-} X86_TEST_REGISTER;
-
-typedef enum _X86_CONTROL_REGISTER
-{
- REG_CR0,
- REG_CR1,
- REG_CR2,
- REG_CR3,
- REG_CR4,
- REG_CR5,
- REG_CR6,
- REG_CR7,
- REG_CR8,
- REG_CR9,
- REG_CR10,
- REG_CR11,
- REG_CR12,
- REG_CR13,
- REG_CR14,
- REG_CR15
-} X86_CONTROL_REGISTER;
-
-typedef enum _X86_DEBUG_REGISTER
-{
- REG_DR0,
- REG_DR1,
- REG_DR2,
- REG_DR3,
- REG_DR4,
- REG_DR5,
- REG_DR6,
- REG_DR7,
- REG_DR8,
- REG_DR9,
- REG_DR10,
- REG_DR11,
- REG_DR12,
- REG_DR13,
- REG_DR14,
- REG_DR15
-} X86_DEBUG_REGISTER;
-
-typedef enum _X86_MMX_REGISTER
-{
- REG_MM0=0,
- REG_MM1=1,
- REG_MM2=2,
- REG_MM3=3,
- REG_MM4=4,
- REG_MM5=5,
- REG_MM6=6,
- REG_MM7=7
-} X86_MMX_REGISTER;
-
-typedef enum _X86_SSE_REGISTER
-{
- REG_XMM0=0,
- REG_XMM1=1,
- REG_XMM2=2,
- REG_XMM3=3,
- REG_XMM4=4,
- REG_XMM5=5,
- REG_XMM6=6,
- REG_XMM7=7
-} X86_SSE_REGISTER;
-
-typedef enum _X86_FPU_REGISTER
-{
- REG_ST0=0,
- REG_ST1=1,
- REG_ST2=2,
- REG_ST3=3,
- REG_ST4=4,
- REG_ST5=5,
- REG_ST6=6,
- REG_ST7=7
-} X86_FPU_REGISTER;
-
-typedef enum _X86_8BIT_REGISTER
-{
- REG_AL = 0,
- REG_CL = 1,
- REG_DL = 2,
- REG_BL = 3,
- REG_AH = 4,
- REG_CH = 5,
- REG_DH = 6,
- REG_BH = 7
-} X86_8BIT_REGISTER;
-
-typedef enum _X86_16BIT_REGISTER
-{
- REG_AX = 0,
- REG_CX = 1,
- REG_DX = 2,
- REG_BX = 3,
- REG_SP = 4,
- REG_BP = 5,
- REG_SI = 6,
- REG_DI = 7
-} X86_16BIT_REGISTER;
-
-typedef enum _X86_32BIT_REGISTER
-{
- REG_EAX = 0,
- REG_ECX = 1,
- REG_EDX = 2,
- REG_EBX = 3,
- REG_ESP = 4,
- REG_EBP = 5,
- REG_ESI = 6,
- REG_EDI = 7
-} X86_32BIT_REGISTER;
-
-typedef enum _X86_SEGMENT
-{
- SEG_ES = 0,
- SEG_CS = 1,
- SEG_SS = 2,
- SEG_DS = 3,
- SEG_FS = 4,
- SEG_GS = 5,
- SEG_MAX = 6
-} X86_SEGMENT;
-
-extern char *X86_Registers[];
-
-#pragma pack(push,1)
-typedef struct _MODRM
-{
- U8 mod : 2;
- U8 reg : 3;
- U8 rm : 3;
-} MODRM;
-typedef struct _SIB
-{
- U8 scale : 2;
- U8 index : 3;
- U8 base : 3;
-} SIB;
-typedef struct _REX
-{
- U8 unused : 4; // bits 4,5,6,7
- U8 w : 1; // bit 3
- U8 r : 1; // bit 2
- U8 x : 1; // bit 1
- U8 b : 1; // bit 0
-} REX;
-typedef struct _REX_MODRM
-{
- U8 reg : 4;
- U8 rm : 4;
-} REX_MODRM;
-typedef struct _REX_SIB
-{
- U8 index : 4;
- U8 base : 4;
-} REX_SIB;
-#pragma pack(pop)
-
-//
-// Properties:
-// If an operand is OP_COND_EXEC, it means that it is executed only if the pre-conditions are met.
-//
-// If if an instruction has one or more OP_COND_DST operands, then the actions are determined by
-// whether the Opcode.Preconditions are met or not. If all the COND_* flags in Opcode.Preconditions
-// are true, then the results are determined by ResultsIfTrue. If the preconditions are not met, then
-// the results are determined by ResultsIfFalse.
-//
-// If Preconditions == NOCOND, then results in ResultsIfTrue are unconditional and ResultsIfFalse
-// is ignored
-//
-typedef struct _X86_OPCODE
-{
- struct _X86_OPCODE *Table;
- CPU_TYPE CPU; // minimum CPU (starting with i386)
- U32 MnemonicFlags;
- char Mnemonic[X86_MAX_INSTRUCTION_LEN+1];
- U32 OperandFlags[X86_MAX_OPERANDS];
- U32 Preconditions;
- U32 FlagsChanged; // changes in flags
- U32 ResultsIfTrue; // results if Preconditions are met
- U32 ResultsIfFalse; // results if Preconditions are not met
-} X86_OPCODE;
-
-typedef struct _X86_INSTRUCTION
-{
- struct _INSTRUCTION *Instruction; // the generic instruction format representing this instruction
-
- X86_OPCODE Opcode;
-
- U8 sib_b;
- U8 modrm_b;
- MODRM modrm;
- SIB sib;
- U8 rex_b;
- REX rex;
- REX_MODRM rex_modrm;
- REX_SIB rex_sib;
-
- X86_SEGMENT DstSegment;
- union
- {
- X86_SEGMENT Segment;
- DWORD Selector;
- };
-
- // NOTE: these are for internal use, use Instruction->Operands[]
- //
- // If DstRegAddressing or SrcRegAddressing = TRUE then BaseRegister is the base register
- // It is the operand represented by SIBOperand
- //
- // The operand indices of the destination operands is in DstOpIndex[0 to DstOpCount-1]
- // The operand indices of the source operands is in SrcOpIndex[0 to SrcOpCount-1]
- //
- // These are used both for instructions like xadd/xchg (where both operands are source/destination)
- // and to represent implicit registers (e.g., cmpxchg)
-
- U8 SrcOpIndex[3];
- U8 DstOpIndex[3];
-
- // Addressing mode:
- // If DstRegAddressing = TRUE, then these apply to DstReg
- // If SrcRegAddressing = TRUE, then this applies to SrcReg[AddressIndex]
- // If both are false, then SrcReg and DstReg are not addresses
- X86_REGISTER BaseRegister;
- X86_REGISTER IndexRegister;
-
- U8 Scale;
- U8 HasDefault64Operand : 1;
- U8 HasOperandSizePrefix : 1;
- U8 HasAddressSizePrefix : 1;
- U8 HasSegmentOverridePrefix : 1;
- U8 HasLockPrefix : 1;
- U8 HasRepeatWhileEqualPrefix : 1;
- U8 HasRepeatWhileNotEqualPrefix : 1;
- U8 HasBranchTakenPrefix : 1;
- U8 HasBranchNotTakenPrefix : 1;
- U8 HasDstAddressing : 1;
- U8 HasSrcAddressing : 1;
- U8 HasModRM : 1;
- U8 HasBaseRegister : 1;
- U8 HasIndexRegister : 1;
- U8 HasFullDisplacement : 1;
- U8 HasDstSegment : 1; // used for ins/cmps/scas/movs/etc which have 2 segments
- U8 DstAddressIndex : 2; // DstOpIndex[DstAddressIndex]
- U8 SrcAddressIndex : 2; // SrcOpIndex[SrcAddressIndex]
- U8 DstOpCount : 2;
- U8 SrcOpCount : 2;
- U8 OperandSize : 4;
- U8 AddressSize : 4;
- U8 Relative : 1;
- U8 HasSelector : 1; // segment is actually a selector
- U8 Group : 5;
-
- S64 Displacement;
-
-} X86_INSTRUCTION;
-
-////////////////////////////////////////////////////////////////////////////////////
-// Exported functions
-////////////////////////////////////////////////////////////////////////////////////
-
-extern ARCHITECTURE_FORMAT_FUNCTIONS X86;
-
-// Instruction setup
-BOOL X86_InitInstruction(struct _INSTRUCTION *Instruction);
-void X86_CloseInstruction(struct _INSTRUCTION *Instruction);
-
-// Instruction translator
-BOOL X86_TranslateInstruction(struct _INSTRUCTION *Instruction, BOOL Verbose);
-
-// Instruction decoder
-BOOL X86_GetInstruction(struct _INSTRUCTION *Instruction, U8 *Address, DWORD Flags);
-
-// Function finding
-U8 *X86_FindFunctionByPrologue(struct _INSTRUCTION *Instruction, U8 *StartAddress, U8 *EndAddress, DWORD Flags);
-
-#ifdef __cplusplus
-}
-#endif
-#endif // X86_DISASM_H
-
diff --git a/src/thirdparty/mhook/disasm-lib/disasm_x86_tables.h b/src/thirdparty/mhook/disasm-lib/disasm_x86_tables.h
deleted file mode 100644
index 9ddb3f4f7..000000000
--- a/src/thirdparty/mhook/disasm-lib/disasm_x86_tables.h
+++ /dev/null
@@ -1,3654 +0,0 @@
-// Copyright (C) 2004, Matt Conover (mconover@gmail.com)
-//
-// The opcode tables in this file are based off the Intel Instruction Set Reference
-// and an assortment of disassemblers, primarily libdisasm (by mammon)
-
-#ifndef DISASM_X86_TABLES
-#define DISASM_X86_TABLES
-
-#define X86_GET_REG(val) ((val) & 7)
-#define X86_GET_REG64(val) ((GET_REX_B(X86Instruction->rex_b) << 3) | ((val) & 7))
-
-#define GET_MODRM_MOD(a) (((a) >> 6) & 3) // bits 6, 7
-#define GET_MODRM_REG(a) (((a) >> 3) & 7) // bits 3, 4, 5
-#define GET_MODRM_EXT(a) (((a) >> 3) & 7) // bits 3, 4, 5
-#define GET_MODRM_RM(a) ((a) & 7) // bits 0, 1, 2
-
-#define GET_SIB_SCALE(a) (((a) >> 6) & 3) // bits 6, 7
-#define GET_SIB_INDEX(a) (((a) >> 3) & 7) // bits 3, 4, 5
-#define GET_SIB_BASE(a) ((a) & 7) // bits 0, 1, 2
-
-#define REX_PREFIX_START 0x40
-#define REX_PREFIX_END 0x4F
-#define GET_REX_W(r) (((r) & 8) >> 3) // bit 3
-#define GET_REX_R(r) (((r) & 4) >> 2) // bit 2
-#define GET_REX_X(r) (((r) & 2) >> 1) // bit 1
-#define GET_REX_B(r) ((r) & 1) // bit 0
-#define REX_MASK(n) ((n >> 16) & 0x0F) // bits 0-3
-
-// Groupings to make the opcode table more readible
-#define NOARGS { 0, 0, 0 }
-#define NOCOND 0
-#define NOGROUP NULL
-#define NOACTION 0
-#define NOCHANGE 0
-#define IGNORED 0
-#define NOINSTR NOGROUP, CPU_UNKNOWN, 0, "", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED
-#define GROUP CPU_UNKNOWN, 0, "", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED
-#define PREFIX NOGROUP, CPU_UNKNOWN, ITYPE_EXT_PREFIX, "", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED
-#define EXT_FPU CPU_UNKNOWN, ITYPE_EXT_FPU, "", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED
-#define EXT_64 CPU_UNKNOWN, ITYPE_EXT_64, "", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED
-#define EXT_SUFFIX(a, b, c) CPU_UNKNOWN, ITYPE_EXT_SUFFIX, "", { a, b, c }, NOCOND, NOCHANGE, NOACTION, IGNORED
-#define EXT_MODRM CPU_UNKNOWN, ITYPE_EXT_MODRM, "", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED
-
-#define SET_MODRM(modrm, src) \
-{ \
- (modrm).mod = GET_MODRM_MOD(src); \
- (modrm).reg = GET_MODRM_REG(src); \
- (modrm).rm = GET_MODRM_RM(src); \
-}
-
-#define SET_REX_MODRM(rex_modrm, rex, modrm) \
-{ \
- (rex_modrm).rm = ((rex).b << 3) | (modrm).rm; \
- (rex_modrm).reg = ((rex).r << 3) | (modrm).reg; \
-}
-
-#define SET_SIB(sib, src) \
-{ \
- (sib).scale = GET_SIB_SCALE(src); \
- (sib).index = GET_SIB_INDEX(src); \
- (sib).base = GET_SIB_BASE(src); \
-}
-
-#define SET_REX_SIB(rex_sib, rex, sib) \
-{ \
- (rex_sib).index = ((rex).x << 3) | (sib).index; \
- (rex_sib).base = ((rex).b << 3) | (sib).base; \
-}
-
-#define SET_REX(rex, src) \
-{ \
- (rex).w = GET_REX_W(src); \
- (rex).r = GET_REX_R(src); \
- (rex).x = GET_REX_X(src); \
- (rex).b = GET_REX_B(src); \
-}
-
-// Addressing modes
-#define AMODE_A 0x00010000
-#define AMODE_C 0x00020000
-#define AMODE_D 0x00030000
-#define AMODE_E 0x00040000
-#define AMODE_G 0x00050000
-#define AMODE_I 0x00060000
-#define AMODE_J 0x00070000
-#define AMODE_M 0x00080000
-#define AMODE_O 0x00090000
-#define AMODE_P 0x000A0000
-#define AMODE_Q 0x000B0000
-#define AMODE_R 0x000C0000
-#define AMODE_S 0x000D0000
-#define AMODE_T 0x000E0000
-#define AMODE_V 0x000F0000
-#define AMODE_W 0x00100000
-#define AMODE_X 0x00110000
-#define AMODE_Y 0x00120000
-#define AMODE_PR 0x00130000
-#define AMODE_VR 0x00140000
-#define AMODE_xlat 0x00150000
-
-// Operand types
-#define OPTYPE_a 0x01000000
-#define OPTYPE_b 0x02000000
-#define OPTYPE_d 0x03000000
-#define OPTYPE_p 0x04000000
-#define OPTYPE_q 0x05000000
-#define OPTYPE_dt 0x06000000
-#define OPTYPE_v 0x07000000
-#define OPTYPE_w 0x08000000
-#define OPTYPE_ps 0x09000000 // packed 128-bit single real
-#define OPTYPE_pd 0x0A000000 // packed 128-bit double real
-#define OPTYPE_pb 0x0B000000 // packed BCD (10 bytes, 18-bit precision)
-#define OPTYPE_ss 0x0C000000 // scalar single real
-#define OPTYPE_sd 0x0D000000 // scalar double real
-#define OPTYPE_se 0x0E000000 // scalar extended real
-#define OPTYPE_fev 0x0F000000 // FPU environment (28 bytes if 32-bit modes, 14 bytes in 16-bit mode)
-#define OPTYPE_fst1 0x10000000 // FPU state (108 bytes in 32-bit modes, 94 bytes in 16-bit real mode)
-#define OPTYPE_fst2 0x11000000 // FPU/MMX/XMM/MXCSR state (512 bytes)
-#define OPTYPE_z 0x12000000
-#define OPTYPE_o 0x13000000
-#define OPTYPE_dq 0x14000000 // OPTYPE_d or OPTYPE_o
-#define OPTYPE_mw 0x15000000 // word if memory, register size otherwise
-#define OPTYPE_sso 0x16000000 // OPTYPE_ss or OPTYPE_o
-#define OPTYPE_sdo 0x17000000 // OPTYPE_ss or OPTYPE_o
-#define OPTYPE_cpu 0x18000000 // pointer to CPU state structure
-#define OPTYPE_lea 0x19000000 // size set by other operand
-// NOTE: if you change this, you must also update OptypeHandlers[] in disasm_x86.c
-// Be sure to preserve the ordering
-
-//////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// Registers
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-static char *Addressing16[8] = {"bx+si","bx+di","bp+si","bp+di","si","di","bp","bx"};
-static char *MMX_Registers[8] = {"mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7"};
-static char *SSE_Registers[8] = {"xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"};
-static char *DR_Registers[8] = {"dr0", "dr1", "dr2", "dr3", "dr4", "dr5", "dr6", "dr7"};
-static char *CR_Registers[8] = {"cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7"};
-static char *TR_Registers[8] = {"tr0", "tr1", "tr2", "tr3", "tr4", "tr5", "tr6", "tr7"};
-static char *FPU_Registers[8] = {"st(0)", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)"};
-static char *Segments[8] = {"es", "cs", "ss", "ds", "fs", "gs", "ERROR", "ERROR"};
-static char *Registers8[8] = {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh" };
-static char *Registers16[8] = {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di" };
-static char *Registers32[8] = {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi" };
-static char *REX_Registers8[16] = {"al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil", "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b" };
-static char *REX_Registers16[16] = {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w" };
-static char *REX_Registers32[16] = {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d" };
-static char *REX_Registers64[16] = {"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" };
-static char *DataSizes[8+1] = {"byte ptr", "word ptr", "dword ptr", "6_byte ptr", "qword ptr", "10_byte ptr", "INVALID PTR", "INVALID PTR", "oword ptr"};
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// FPU constants
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-BYTE float_0[10] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-BYTE float_1[10] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F };
-BYTE float_l2t[10] = { 0xFE, 0x8A, 0x1B, 0xCD, 0x4B, 0x78, 0x9A, 0xD4, 0x00, 0x40 };
-BYTE float_l2e[10] = { 0xBC, 0xF0, 0x17, 0x5C, 0x29, 0x3B, 0xAA, 0xB8, 0xFF, 0x3F };
-BYTE float_pi[10] = { 0x35, 0xC2, 0x68, 0x21, 0xA2, 0xDA, 0x0F, 0xC9, 0x00, 0x40 };
-BYTE float_lg2[10] = { 0x99, 0xF7, 0xCF, 0xFB, 0x84, 0x9A, 0x20, 0x9A, 0xFD, 0x3F };
-BYTE float_ln2[10] = { 0xAC, 0x79, 0xCF, 0xD1, 0xF7, 0x17, 0x72, 0xB1, 0xFE, 0x3F };
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// Tables
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-extern X86_OPCODE X86_Opcodes_2[0x100];
-extern X86_OPCODE X86_Group_1_80[8], X86_Group_1_81[8], X86_Group_1_82[8], X86_Group_1_83[8], X86_Group_2_C0[8], X86_Group_2_C1[8], X86_Group_2_D0[8], X86_Group_2_D1[8], X86_Group_2_D2[8], X86_Group_2_D3[8], X86_Group_3_F6[8], X86_Group_3_F7[8], X86_Group_4[8], X86_Group_5[8], X86_Group_6[8], X86_Group_7[8], X86_Group_8[8], X86_Group_9[8], X86_Group_10[8], X86_Group_11[8], X86_Group_12_C6[8], X86_Group_12_C7[8], X86_Group_13[8], X86_Group_14[8], X86_Group_15[8], X86_Group_16[8], X86_Group_17[8], X86_Group_P[8];
-extern X86_OPCODE X86_SSE[0x300], X86_SSE2_Group_13[24], X86_SSE2_Group_14[24], X86_SSE2_Group_15[24];
-extern X86_OPCODE X86_ESC_0[0x48], X86_ESC_1[0x48], X86_ESC_2[0x48], X86_ESC_3[0x48], X86_ESC_3[0x48], X86_ESC_4[0x48], X86_ESC_5[0x48], X86_ESC_6[0x48], X86_ESC_7[0x48];
-extern X86_OPCODE X86_3DNOW_0F[0x100];
-extern X86_OPCODE X86_0F01_ModRM[0x100];
-extern X86_OPCODE X86_Opcode_63[2], X86_Opcode_0F05[2];
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// Opcode tables
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-X86_OPCODE X86_Opcodes_1[0x100] = // 1 byte opcodes
-{
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { AMODE_E | OPTYPE_b | OP_DST, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { AMODE_G | OPTYPE_b | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { OPTYPE_REG_AL | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OPTYPE_ES | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OPTYPE_ES | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x07 */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { AMODE_E | OPTYPE_b | OP_DST, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x08 */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x09 */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { AMODE_G | OPTYPE_b | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x0A */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x0B */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { OPTYPE_REG_AL | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x0C */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x0D */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OPTYPE_CS | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x0E */
- { X86_Opcodes_2, GROUP }, /* 0x0F */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { AMODE_E | OPTYPE_b | OP_DST, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x10 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x11 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { AMODE_G | OPTYPE_b | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x12 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x13 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { OPTYPE_REG_AL | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x14 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x15 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OPTYPE_SS | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x16 */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OPTYPE_SS | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x17 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { AMODE_E | OPTYPE_b | OP_DST, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x18 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x19 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { AMODE_G | OPTYPE_b | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x1A */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x1B */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { OPTYPE_REG_AL | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x1C */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x1D */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OPTYPE_DS | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x1E */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OPTYPE_DS | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x1F */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { AMODE_E | OPTYPE_b | OP_DST, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x20 */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x21 */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { AMODE_G | OPTYPE_b | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x22 */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x23 */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { OPTYPE_REG_AL | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x24 */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x25 */
- { PREFIX }, /* 0x26 */
- { NOGROUP, CPU_I386, ITYPE_BCDCONV, "daa", { OPTYPE_REG_AL | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_AF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x27 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { AMODE_E | OPTYPE_b | OP_DST, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x28 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x29 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { AMODE_G | OPTYPE_b | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x2A */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x2B */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { OPTYPE_REG_AL | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x2C */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x2D */
- { PREFIX }, /* 0x2E */
- { NOGROUP, CPU_I386, ITYPE_BCDCONV, "das", { OPTYPE_REG_AL | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_AF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x2F */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { AMODE_E | OPTYPE_b | OP_DST, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x30 */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x31 */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { AMODE_G | OPTYPE_b | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x32 */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x33 */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { OPTYPE_REG_AL | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x34 */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x35 */
- { PREFIX }, /* 0x36 */
- { NOGROUP, CPU_I386, ITYPE_BCDCONV, "aaa", { OPTYPE_REG_AL | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_AF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x37 */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { AMODE_E | OPTYPE_b | OP_SRC, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x38 */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { AMODE_E | OPTYPE_v | OP_SRC, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x39 */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { AMODE_G | OPTYPE_b | OP_SRC, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x3A */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { AMODE_G | OPTYPE_v | OP_SRC, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x3B */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { OPTYPE_REG_AL | OP_SIGNED | OP_SRC, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x3C */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { OPTYPE_REG_xAX_BIG | OP_SIGNED | OP_SRC, AMODE_I | OPTYPE_z | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x3D */
- { PREFIX }, /* 0x3E */
- { NOGROUP, CPU_I386, ITYPE_BCDCONV, "aas", { OPTYPE_REG_AL | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_AF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x3F */
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x40 */
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x41 */
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x42 */
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x43 */
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x44 */
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x45 */
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x46 */
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x47 */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x48 */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x49 */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x4A */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x4B */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x4C */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x4D */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x4E */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x4F */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OP_REG | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x50 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OP_REG | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x51 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OP_REG | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x52 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OP_REG | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x53 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OP_REG | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x54 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OP_REG | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x55 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OP_REG | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x56 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OP_REG | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x57 */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OP_REG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x58 */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OP_REG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x59 */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OP_REG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5A */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OP_REG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5B */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OP_REG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5C */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OP_REG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5D */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OP_REG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5E */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OP_REG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5F */
- { NOGROUP, CPU_I386, ITYPE_PUSHA, "pushad", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x60 */
- { NOGROUP, CPU_I386, ITYPE_POPA, "popad", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x61 */
- { NOGROUP, CPU_I386, ITYPE_BOUNDS, "bound", { AMODE_G | OPTYPE_v | OP_SRC, AMODE_M | OPTYPE_a | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x62 */
- { X86_Opcode_63, EXT_64 }, /* 0x63 */
- { PREFIX }, /* 0x64 */
- { PREFIX }, /* 0x65 */
- { PREFIX }, /* 0x66 */
- { PREFIX }, /* 0x67 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { AMODE_I | OPTYPE_z | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x68 */
- { NOGROUP, CPU_I386, ITYPE_MUL, "imul", { AMODE_G | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_v | OP_SIGNED | OP_SRC, AMODE_I | OPTYPE_z | OP_SIGNED | OP_SRC }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x69 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x6A */
- { NOGROUP, CPU_I386, ITYPE_MUL, "imul", { AMODE_G | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_v | OP_SIGNED | OP_SRC, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x6B */
- { NOGROUP, CPU_I386, ITYPE_IN, "insb", { AMODE_Y | OPTYPE_b | OP_DST, OPTYPE_REG_DX | OP_SYS | OP_SRC, 0 }, COND_D, NOCHANGE, xDI_DEC | xCX_REP_DEC, xDI_INC | xCX_REP_DEC }, /* 0x6C */
- { NOGROUP, CPU_I386, ITYPE_IN, "insd", { AMODE_Y | OPTYPE_z | OP_DST, OPTYPE_REG_DX | OP_SYS | OP_SRC, 0 }, COND_D, NOCHANGE, xDI_DECx | xCX_REP_DEC, xDI_INCx | xCX_REP_DEC }, /* 0x6D */
- { NOGROUP, CPU_I386, ITYPE_OUT, "outsb", { OPTYPE_REG_DX | OP_SYS | OP_DST, AMODE_X | OPTYPE_b | OP_SRC, 0 }, COND_D, NOCHANGE, xSI_DEC | xCX_REP_DEC, xSI_INC | xCX_REP_DEC }, /* 0x6E */
- { NOGROUP, CPU_I386, ITYPE_OUT, "outsd", { OPTYPE_REG_DX | OP_SYS | OP_DST, AMODE_X | OPTYPE_z | OP_SRC, 0 }, COND_D, NOCHANGE, xSI_DECx | xCX_REP_DEC, xSI_INCx | xCX_REP_DEC}, /* 0x6F */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jo", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_O, NOCHANGE, OP1_DST, NOACTION }, /* 0x70 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jno", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_NO, NOCHANGE, OP1_DST, NOACTION }, /* 0x71 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jb", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_C, NOCHANGE, OP1_DST, NOACTION }, /* 0x72 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jnb", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_NC, NOCHANGE, OP1_DST, NOACTION }, /* 0x73 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jz", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_Z, NOCHANGE, OP1_DST, NOACTION }, /* 0x74 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jnz", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_NZ, NOCHANGE, OP1_DST, NOACTION }, /* 0x75 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jbe", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_BE, NOCHANGE, OP1_DST, NOACTION }, /* 0x76 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "ja", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_A, NOCHANGE, OP1_DST, NOACTION }, /* 0x77 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "js", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_S, NOCHANGE, OP1_DST, NOACTION }, /* 0x78 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jns", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_NS, NOCHANGE, OP1_DST, NOACTION }, /* 0x79 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jpe", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_PE, NOCHANGE, OP1_DST, NOACTION }, /* 0x7A */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jpo", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_PO, NOCHANGE, OP1_DST, NOACTION }, /* 0x7B */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jl", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_L, NOCHANGE, OP1_DST, NOACTION }, /* 0x7C */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jge", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_GE, NOCHANGE, OP1_DST, NOACTION }, /* 0x7D */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jle", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_LE, NOCHANGE, OP1_DST, NOACTION }, /* 0x7E */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jg", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_G, NOCHANGE, OP1_DST, NOACTION }, /* 0x7F */
- { X86_Group_1_80, GROUP }, /* 0x80 Eb Ib */
- { X86_Group_1_81, GROUP }, /* 0x81 Ev Iz */
- { X86_Group_1_82, GROUP }, /* 0x82 Eb Ib */
- { X86_Group_1_83, GROUP }, /* 0x83 Ev Ib */
- { NOGROUP, CPU_I386, ITYPE_TEST, "test", { AMODE_E | OPTYPE_b | OP_SRC, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x84 */
- { NOGROUP, CPU_I386, ITYPE_TEST, "test", { AMODE_E | OPTYPE_v | OP_SRC, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x85 */
- { NOGROUP, CPU_I386, ITYPE_XCHG, "xchg", { AMODE_E | OPTYPE_b | OP_SRC | OP_DST, AMODE_G | OPTYPE_b | OP_SRC | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x86 */
- { NOGROUP, CPU_I386, ITYPE_XCHG, "xchg", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, AMODE_G | OPTYPE_v | OP_SRC | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x87 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_E | OPTYPE_b | OP_DST, AMODE_G | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x88 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x89 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_G | OPTYPE_b | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x8A */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x8B */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_E | OPTYPE_mw | OP_DST, AMODE_S | OPTYPE_w | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x8C */
- { NOGROUP, CPU_I386, ITYPE_LEA, "lea", { AMODE_G | OPTYPE_v | OP_DST, AMODE_M | OPTYPE_lea | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x8D */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_S | OPTYPE_w | OP_DST, AMODE_E | OPTYPE_w | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x8E */
- { X86_Group_10, GROUP }, /* 0x8F */
- { NOGROUP, CPU_I386, ITYPE_NOP, "nop", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x90 */
- { NOGROUP, CPU_I386, ITYPE_XCHG, "xchg", { OPTYPE_REG_xAX_BIG | OP_SRC | OP_DST, OP_REG | OP_SRC | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x91 */
- { NOGROUP, CPU_I386, ITYPE_XCHG, "xchg", { OPTYPE_REG_xAX_BIG | OP_SRC | OP_DST, OP_REG | OP_SRC | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x92 */
- { NOGROUP, CPU_I386, ITYPE_XCHG, "xchg", { OPTYPE_REG_xAX_BIG | OP_SRC | OP_DST, OP_REG | OP_SRC | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x93 */
- { NOGROUP, CPU_I386, ITYPE_XCHG, "xchg", { OPTYPE_REG_xAX_BIG | OP_SRC | OP_DST, OP_REG | OP_SRC | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x94 */
- { NOGROUP, CPU_I386, ITYPE_XCHG, "xchg", { OPTYPE_REG_xAX_BIG | OP_SRC | OP_DST, OP_REG | OP_SRC | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x95 */
- { NOGROUP, CPU_I386, ITYPE_XCHG, "xchg", { OPTYPE_REG_xAX_BIG | OP_SRC | OP_DST, OP_REG | OP_SRC | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x96 */
- { NOGROUP, CPU_I386, ITYPE_XCHG, "xchg", { OPTYPE_REG_xAX_BIG | OP_SRC | OP_DST, OP_REG | OP_SRC | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x97 */
- { NOGROUP, CPU_I386, ITYPE_SZCONV, "cwde", { OPTYPE_REG_xAX_BIG | OP_SIGNED | OP_DST, OPTYPE_REG_xAX_SMALL | OP_SIGNED | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x98 */
- { NOGROUP, CPU_I386, ITYPE_SZCONV, "cdq", { OPTYPE_xDX_HI_xAX_LO | OP_SIGNED | OP_DST, OPTYPE_REG_xAX_BIG | OP_SIGNED | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x99 */
- { NOGROUP, CPU_I386, ITYPE_CALL, "call", { AMODE_A | OPTYPE_p | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x9A */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "wait", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x9B */
- { NOGROUP, CPU_I386, ITYPE_PUSHF, "pushf", { OPTYPE_xFLAGS | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x9C */
- { NOGROUP, CPU_I386, ITYPE_POPF, "popf", { OPTYPE_xFLAGS | OP_DST, 0, 0 }, NOCOND, FLAG_ALL_MOD, NOACTION, IGNORED }, /* 0x9D */
- { NOGROUP, CPU_I386, ITYPE_MOV, "sahf", { OPTYPE_FLAGS | OP_DST, OPTYPE_REG_AH | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_AF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x9E */
- { NOGROUP, CPU_I386, ITYPE_MOV, "lahf", { OPTYPE_REG_AH | OP_DST, OPTYPE_FLAGS | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x9F */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG_AL | OP_DST, AMODE_O | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xA0 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_O | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xA1 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_O | OPTYPE_b | OP_DST, OPTYPE_REG_AL | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xA2 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_O | OPTYPE_v | OP_DST, OPTYPE_REG_xAX_BIG | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xA3 */
- { NOGROUP, CPU_I386, ITYPE_STRMOV, "movsb", { AMODE_Y | OPTYPE_b | OP_DST, AMODE_X | OPTYPE_b | OP_SRC, 0 }, COND_D, NOCHANGE, xDI_DEC | xSI_DEC | xCX_REP_DEC, xDI_INC | xSI_INC | xCX_REP_DEC}, /* 0xA4 */
- { NOGROUP, CPU_I386, ITYPE_STRMOV, "movsd", { AMODE_Y | OPTYPE_z | OP_DST, AMODE_X | OPTYPE_z | OP_SRC, 0 }, COND_D, NOCHANGE, xDI_DECx | xSI_DECx| xCX_REP_DEC, xDI_INCx | xSI_INCx | xCX_REP_DEC }, /* 0xA5 */
- { NOGROUP, CPU_I386, ITYPE_STRCMP, "cmpsb", { AMODE_X | OPTYPE_b | OP_SRC, AMODE_Y | OPTYPE_b | OP_SRC, 0 }, COND_D, FLAG_COMMON_MOD, xDI_DEC | xSI_DEC | xCX_REP_DEC, xDI_INC | xSI_INC | xCX_REP_DEC }, /* 0xA6 */
- { NOGROUP, CPU_I386, ITYPE_STRCMP, "cmpsd", { AMODE_X | OPTYPE_z | OP_SRC, AMODE_Y | OPTYPE_z | OP_SRC, 0 }, COND_D, FLAG_COMMON_MOD, xDI_DECx | xSI_DECx | xCX_REP_DEC, xDI_INCx | xSI_INCx | xCX_REP_DEC}, /* 0xA7 */
- { NOGROUP, CPU_I386, ITYPE_TEST, "test", { OPTYPE_REG_AL | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0xA8 */
- { NOGROUP, CPU_I386, ITYPE_TEST, "test", { OPTYPE_REG_xAX_BIG | OP_SRC, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0xA9 */
- { NOGROUP, CPU_I386, ITYPE_STRSTOR, "stosb", { AMODE_Y | OPTYPE_b | OP_DST, OPTYPE_REG_AL | OP_SRC, 0 }, COND_D, NOCHANGE, xDI_DEC | xSI_DEC | xCX_REP_DEC, xDI_INC | xSI_INC | xCX_REP_DEC }, /* 0xAA */
- { NOGROUP, CPU_I386, ITYPE_STRSTOR, "stosd", { AMODE_Y | OPTYPE_z | OP_DST, OPTYPE_REG_xAX_BIG | OP_SRC, 0 }, COND_D, NOCHANGE, xDI_DECx | xSI_DECx | xCX_REP_DEC, xDI_INCx | xSI_INCx | xCX_REP_DEC }, /* 0xAB */
- { NOGROUP, CPU_I386, ITYPE_STRLOAD, "lodsb", { OPTYPE_REG_AL | OP_DST, AMODE_X | OPTYPE_b | OP_SRC, 0 }, COND_D, NOCHANGE, xSI_DEC | xCX_REP_DEC, xSI_INC | xCX_REP_DEC }, /* 0xAC */
- { NOGROUP, CPU_I386, ITYPE_STRLOAD, "lodsd", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_X | OPTYPE_z | OP_SRC, 0 }, COND_D, NOCHANGE, xSI_DECx | xCX_REP_DEC, xSI_INCx | xCX_REP_DEC }, /* 0xAD */
- { NOGROUP, CPU_I386, ITYPE_STRCMP, "scasb", { OPTYPE_REG_AL | OP_SRC, AMODE_Y | OPTYPE_b | OP_SRC, 0 }, COND_D, FLAG_COMMON_MOD, xDI_DEC | xCX_REP_DEC, xDI_INC | xCX_REP_DEC }, /* 0xAE */
- { NOGROUP, CPU_I386, ITYPE_STRCMP, "scasd", { OPTYPE_REG_xAX_BIG | OP_SRC, AMODE_Y | OPTYPE_z | OP_SRC, 0 }, COND_D, FLAG_COMMON_MOD, xDI_DECx, xDI_INCx }, /* 0xAF */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG8 | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB0 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG8 | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB1 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG8 | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB2 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG8 | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB3 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG8 | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB4 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG8 | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB5 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG8 | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB6 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OPTYPE_REG8 | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB7 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OP_REG | OP_DST, AMODE_I | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB8 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OP_REG | OP_DST, AMODE_I | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB9 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OP_REG | OP_DST, AMODE_I | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xBA */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OP_REG | OP_DST, AMODE_I | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xBB */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OP_REG | OP_DST, AMODE_I | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xBC */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OP_REG | OP_DST, AMODE_I | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xBD */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OP_REG | OP_DST, AMODE_I | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xBE */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { OP_REG | OP_DST, AMODE_I | OPTYPE_v | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xBF */
- { X86_Group_2_C0, GROUP }, /* 0xC0 Eb Ib */
- { X86_Group_2_C1, GROUP }, /* 0xC1 Ev Ib */
- { NOGROUP, CPU_I386, ITYPE_RET, "ret", { AMODE_I | OPTYPE_w | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC2 */
- { NOGROUP, CPU_I386, ITYPE_RET, "ret", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC3 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "les", { AMODE_G | OPTYPE_z | OP_DST, AMODE_M | OPTYPE_p | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC4 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "lds", { AMODE_G | OPTYPE_z | OP_DST, AMODE_M | OPTYPE_p | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC5 */
- { X86_Group_12_C6, GROUP }, /* 0xC6 Eb Ib */
- { X86_Group_12_C7, GROUP }, /* 0xC7 Ev Iz */
- { NOGROUP, CPU_I386, ITYPE_ENTER, "enter", { OPTYPE_REG_xBP | OP_SRC | OP_DST, AMODE_I | OPTYPE_w | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC8 */
- { NOGROUP, CPU_I386, ITYPE_LEAVE, "leave", { OPTYPE_REG_xBP | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC9 */
- { NOGROUP, CPU_I386, ITYPE_RET, "retf", { AMODE_I | OPTYPE_w | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCA */
- { NOGROUP, CPU_I386, ITYPE_RET, "retf", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCB */
- { NOGROUP, CPU_I386, ITYPE_DEBUG, "int3", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCC */
- { NOGROUP, CPU_I386, ITYPE_TRAP, "int", { AMODE_I | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCD */
- { NOGROUP, CPU_I386, ITYPE_OFLOW, "into", NOARGS, NOCOND, NOCHANGE, NOACTION, NOACTION }, /* 0xCE */
- { NOGROUP, CPU_I386, ITYPE_TRAPRET, "iret", NOARGS, NOCOND, FLAG_ALL_MOD, NOACTION, IGNORED }, /* 0xCF */
- { X86_Group_2_D0, GROUP }, /* 0xD0 Eb, 1 */
- { X86_Group_2_D1, GROUP }, /* 0xD1 Ev, 1 */
- { X86_Group_2_D2, GROUP }, /* 0xD2 Eb, CL */
- { X86_Group_2_D3, GROUP }, /* 0xD3 Ev, CL */
- { NOGROUP, CPU_I386, ITYPE_BCDCONV, "aam", { OPTYPE_REG_AX | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD, NOACTION, IGNORED }, /* 0xD4 */
- { NOGROUP, CPU_I386, ITYPE_BCDCONV, "aad", { OPTYPE_REG_AX | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD, NOACTION, IGNORED }, /* 0xD5 */
- { NOGROUP, CPU_I386, ITYPE_ARITH, "salc", { OPTYPE_REG_AL | OP_DST, OPTYPE_FF | OP_SRC, OPTYPE_0 | OP_SRC }, COND_C, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0xD6 */
- { NOGROUP, CPU_I386, ITYPE_XLAT, "xlat", { OPTYPE_REG_AL | OP_DST, AMODE_xlat | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xD7 */
- { X86_ESC_0, EXT_FPU }, /* 0xD8 */
- { X86_ESC_1, EXT_FPU }, /* 0xD9 */
- { X86_ESC_2, EXT_FPU }, /* 0xDA */
- { X86_ESC_3, EXT_FPU }, /* 0xDB */
- { X86_ESC_4, EXT_FPU }, /* 0xDC */
- { X86_ESC_5, EXT_FPU }, /* 0xDD */
- { X86_ESC_6, EXT_FPU }, /* 0xDE */
- { X86_ESC_7, EXT_FPU }, /* 0xDF */
- { NOGROUP, CPU_I386, ITYPE_LOOPCC, "loopnz", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_REG_xCX_BIG_NZ | COND_NZ, NOCHANGE, OP1_DST | xCX_DEC, NOACTION }, /* 0xE0 */
- { NOGROUP, CPU_I386, ITYPE_LOOPCC, "loopz", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_REG_xCX_BIG_NZ | COND_Z, NOCHANGE, OP1_DST | xCX_DEC, NOACTION }, /* 0xE1 */
- { NOGROUP, CPU_I386, ITYPE_LOOPCC, "loop", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_REG_xCX_BIG_NZ, NOCHANGE, OP1_DST | xCX_DEC, NOACTION }, /* 0xE2 */
- { NOGROUP, CPU_I386, ITYPE_LOOPCC, "jecxz", { AMODE_J | OPTYPE_b | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_REG_xCX_BIG_Z, NOCHANGE, OP1_DST, NOACTION }, /* 0xE3 */
- { NOGROUP, CPU_I386, ITYPE_IN, "in", { OPTYPE_REG_AL | OP_DST, AMODE_I | OPTYPE_b | OP_SYS | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, NOACTION }, /* 0xE4 */
- { NOGROUP, CPU_I386, ITYPE_IN, "in", { OPTYPE_REG_xAX_BIG | OP_DST, AMODE_I | OPTYPE_b | OP_SYS | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, NOACTION }, /* 0xE5 */
- { NOGROUP, CPU_I386, ITYPE_OUT, "out", { AMODE_I | OPTYPE_b | OP_SYS | OP_DST, OPTYPE_REG_AL | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, NOACTION }, /* 0xE6 */
- { NOGROUP, CPU_I386, ITYPE_OUT, "out", { AMODE_I | OPTYPE_b | OP_SYS | OP_DST, OPTYPE_REG_xAX_BIG | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, NOACTION }, /* 0xE7 */
- { NOGROUP, CPU_I386, ITYPE_CALL, "call", { AMODE_J | OPTYPE_z | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE8 */
- { NOGROUP, CPU_I386, ITYPE_BRANCH, "jmp", { AMODE_J | OPTYPE_z | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE9 */
- { NOGROUP, CPU_I386, ITYPE_BRANCH, "jmp", { AMODE_A | OPTYPE_p | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEA */
- { NOGROUP, CPU_I386, ITYPE_BRANCH, "jmp", { AMODE_J | OPTYPE_b | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEB */
- { NOGROUP, CPU_I386, ITYPE_IN, "in", { OPTYPE_REG_AL | OP_DST, OPTYPE_REG_DX | OP_SYS | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEC */
- { NOGROUP, CPU_I386, ITYPE_IN, "in", { OPTYPE_REG_xAX_BIG | OP_DST, OPTYPE_REG_DX | OP_SYS | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xED */
- { NOGROUP, CPU_I386, ITYPE_OUT, "out", { OPTYPE_REG_DX | OP_SYS | OP_DST, OPTYPE_REG_AL | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEE */
- { NOGROUP, CPU_I386, ITYPE_OUT, "out", { OPTYPE_REG_DX | OP_SYS | OP_DST, OPTYPE_REG_xAX_BIG | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEF */
- { PREFIX }, /* 0xF0 */
- { NOGROUP, CPU_I386, ITYPE_DEBUG, "int1", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, // aka icebp /* 0xF1 */
- { PREFIX }, /* 0xF2 */
- { PREFIX }, /* 0xF3 */
- { NOGROUP, CPU_I386, ITYPE_HALT, "hlt", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF4 */
- { NOGROUP, CPU_I386, ITYPE_TOGCF, "cmc", { OPTYPE_FLAGS | OP_DST, 0, 0 }, NOCOND, FLAG_CF_TOG, IGNORED }, /* 0xF5 */
- { X86_Group_3_F6, GROUP }, /* 0xF6 Eb */
- { X86_Group_3_F7, GROUP }, /* 0xF7 Ev */
- { NOGROUP, CPU_I386, ITYPE_CLEARCF, "clc", { OPTYPE_FLAGS | OP_DST, 0, 0 }, NOCOND, FLAG_CF_CLR, NOACTION, IGNORED }, /* 0xF8 */
- { NOGROUP, CPU_I386, ITYPE_SETCF, "stc", { OPTYPE_FLAGS | OP_DST, 0, 0 }, NOCOND, FLAG_CF_SET, NOACTION, IGNORED }, /* 0xF9 */
- { NOGROUP, CPU_I386, ITYPE_CLEARIF, "cli", { OPTYPE_FLAGS | OP_DST, 0, 0 }, NOCOND, FLAG_IF_CLR, NOACTION, IGNORED }, /* 0xFA */
- { NOGROUP, CPU_I386, ITYPE_SETIF, "sti", { OPTYPE_FLAGS | OP_DST, 0, 0 }, NOCOND, FLAG_IF_SET, NOACTION, IGNORED }, /* 0xFB */
- { NOGROUP, CPU_I386, ITYPE_CLEARDF, "cld", { OPTYPE_FLAGS | OP_DST, 0, 0 }, NOCOND, FLAG_DF_CLR, NOACTION, IGNORED }, /* 0xFC */
- { NOGROUP, CPU_I386, ITYPE_SETDF, "std", { OPTYPE_FLAGS | OP_DST, 0, 0 }, NOCOND, FLAG_DF_SET, NOACTION, IGNORED }, /* 0xFD */
- { X86_Group_4, GROUP }, /* 0xFE */
- { X86_Group_5, GROUP }, /* 0xFF */
-};
-
-X86_OPCODE X86_Opcodes_2[0x100] = // 2 byte opcodes
-{
- { X86_Group_6, GROUP }, /* 0x00 */
- { X86_0F01_ModRM, EXT_MODRM }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "lar", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_w | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "lsl", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_w | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { X86_Opcode_0F05, EXT_64 }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "clts", { OPTYPE_CR0 | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_SYSCALLRET, "sysret", { OPTYPE_STAR_MSR | OP_MSR | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x07 */
- // 0F 07 could also be this undocumented instruction on older CPUs:
- // { NOGROUP, CPU_I386, ITYPE_SYSTEM, "loadall", { AMODE_Y | OPTYPE_cpu | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x07 */
- { NOGROUP, CPU_I486, ITYPE_SYSTEM, "invd", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x08 */
- { NOGROUP, CPU_I486, ITYPE_SYSTEM, "wbinvd", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x09 */
- { NOINSTR }, /* 0x0A */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_INVALID, "undef" /* aka UD2 */, NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x0B */
- { NOINSTR }, /* 0x0C */
- { X86_Group_P, GROUP }, /* 0x0D */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "femms", { OPTYPE_FPU_TAG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x0E */
- { X86_3DNOW_0F, EXT_SUFFIX(AMODE_P | OPTYPE_q, AMODE_Q | OPTYPE_q, 0) }, /* 0x0F */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movups", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x10 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movups", { AMODE_W | OPTYPE_ps | OP_DST, AMODE_V | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x11 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movlps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x12 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movlps", { AMODE_M | OPTYPE_q | OP_DST, AMODE_V | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x13 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "unpcklps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x14 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "unpckhps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x15 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movhps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x16 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movhps", { AMODE_M | OPTYPE_q | OP_DST, AMODE_V | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x17 */
- { X86_Group_17, GROUP }, /* 0x18 */
- { NOINSTR }, /* 0x19 */
- { NOINSTR }, /* 0x1A */
- { NOINSTR }, /* 0x1B */
- { NOINSTR }, /* 0x1C */
- { NOINSTR }, /* 0x1D */
- { NOINSTR }, /* 0x1E */
- { NOINSTR }, /* 0x1F */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_R | OPTYPE_dq | OP_DST, AMODE_C | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x20 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_R | OPTYPE_dq | OP_DST, AMODE_D | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x21 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_C | OPTYPE_dq | OP_DST, AMODE_R | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x22 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_D | OPTYPE_dq | OP_DST, AMODE_R | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x23 */
- { NOINSTR }, /* 0x24 */
- //{ NOGROUP, CPU_I486, ITYPE_MOV, "mov", { AMODE_R | OPTYPE_d | OP_DST, AMODE_T | OPTYPE_d | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x24 */
- { NOINSTR }, /* 0x25 */
- { NOINSTR }, /* 0x26 */
- //{ NOGROUP, CPU_I486, ITYPE_MOV, "mov", { AMODE_T | OPTYPE_d | OP_DST, AMODE_R | OPTYPE_d | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x26 */
- { NOINSTR }, /* 0x27 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movaps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x28 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movaps", { AMODE_W | OPTYPE_ps | OP_DST, AMODE_V | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x29 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "cvtpi2ps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x2A */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movntps", { AMODE_M | OPTYPE_o | OP_DST, AMODE_V | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x2B */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "cvttps2pi", { AMODE_P | OPTYPE_q | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x2C */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "cvtps2pi", { AMODE_P | OPTYPE_q | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x2D */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_CMP, "ucomiss", { AMODE_V | OPTYPE_ss | OP_SRC, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_CF_MOD | FLAG_PF_MOD | FLAG_OF_CLR | FLAG_SF_CLR | FLAG_AF_CLR, NOACTION, IGNORED }, /* 0x2E */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_CMP, "comiss", { AMODE_V | OPTYPE_ps | OP_SRC, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_CF_MOD | FLAG_PF_MOD | FLAG_OF_CLR | FLAG_SF_CLR | FLAG_AF_CLR, NOACTION, IGNORED }, /* 0x2F */
- { NOGROUP, CPU_PENTIUM, ITYPE_SYSTEM, "wrmsr", { OPTYPE_REG_ECX | OP_MSR | OP_DST, OPTYPE_EDX_HI_EAX_LO | OP_SRC, 0 } , NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x30 */
- { NOGROUP, CPU_PENTIUM, ITYPE_SYSTEM, "rdtsc", { OPTYPE_EDX_HI_EAX_LO | OP_DST, OPTYPE_TSC | OP_MSR | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x31 */
- { NOGROUP, CPU_PENTIUM, ITYPE_SYSTEM, "rdmsr", { OPTYPE_EDX_HI_EAX_LO | OP_DST, OPTYPE_REG_ECX | OP_MSR | OP_SRC, 0 } , NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x32 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_OTHER, "rdpmc", { OPTYPE_EDX_HI_EAX_LO | OP_DST, OPTYPE_REG_ECX | OP_SYS | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x33 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSCALL, "sysenter", { OPTYPE_CS_MSR | OP_MSR | OP_SRC, OPTYPE_EIP_MSR | OP_MSR | OP_SRC, OPTYPE_ESP_MSR | OP_MSR | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x34 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSCALLRET, "sysexit", { OPTYPE_CS_MSR | OP_MSR | OP_SRC, OPTYPE_EIP_MSR | OP_MSR | OP_SRC, OPTYPE_ESP_MSR | OP_MSR | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x35 */
- { NOINSTR }, /* 0x36 */
- { NOINSTR }, /* 0x37 */
- { NOINSTR }, /* 0x38 */
- { NOINSTR }, /* 0x39 */
- { NOINSTR }, /* 0x3A */
- { NOINSTR }, /* 0x3B */
- { NOINSTR }, /* 0x3C */
- { NOINSTR }, /* 0x3D */
- { NOINSTR }, /* 0x3E */
- { NOINSTR }, /* 0x3F */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovo", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_O, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x40 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovno", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_NO, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x41 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovc", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_C, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x42 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovnc", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_NC, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x43 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovz", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_Z, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x44 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovnz", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_NZ, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x45 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovbe", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_BE, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x46 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmova", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_A, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x47 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovs", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_S, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x48 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovns", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_NS, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x49 */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovpe", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_PE, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x4A */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovpo", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_PO, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x4B */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovl", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_L, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x4C */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovge", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_GE, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x4D */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovle", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_LE, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x4E */
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_MOVCC, "cmovg", { AMODE_G | OPTYPE_v | OP_COND_DST, AMODE_E | OPTYPE_v | OP_COND_SRC, 0 }, COND_G, NOCHANGE, OP1_DST | OP2_SRC, NOACTION }, /* 0x4F */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "movmskps", { AMODE_G | OPTYPE_d | OP_DST, AMODE_VR | OPTYPE_ps| OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x50 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "sqrtps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x51 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "rsqrtps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x52 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "rcpps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x53 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_AND, "andps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x54 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_AND, "andnps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x55 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_OR, "orps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x56 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_XOR, "xorps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x57 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_ADD, "addps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x58 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MUL, "mulps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x59 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtps2pd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5A */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtdq2ps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5B */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_SUB, "subps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5C */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "minps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5D */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_DIV, "divps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5E */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "maxps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x5F */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "punpcklbw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_d | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x60 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "punpcklwd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_d | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x61 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "punpckldq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_d | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x62 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "packsswb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x63 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_CMP, "pcmpgtb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x64 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_CMP, "pcmpgtw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x65 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_CMP, "pcmpgtd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x66 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "packuswb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x67 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "punpckhbw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_d | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x68 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "punpckhwd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_d | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x69 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "punpckhdq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_d | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x6A */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "packssdw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x6B */
- { NOINSTR }, /* 0x6C */
- { NOINSTR }, /* 0x6D */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_MOV, "movd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_E | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x6E */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_MOV, "movq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x6F */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "pshufw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x70 */
- { X86_Group_13, GROUP }, /* 0x71 */
- { X86_Group_14, GROUP }, /* 0x72 */
- { X86_Group_15, GROUP }, /* 0x73 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_CMP, "pcmpeqb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x74 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_CMP, "pcmpeqw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x75 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_CMP, "pcmpeqd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x76 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "emms", { OPTYPE_FPU_TAG | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x77 */
- { NOINSTR }, /* 0x78 */
- { NOINSTR }, /* 0x79 */
- { NOINSTR }, /* 0x7A */
- { NOINSTR }, /* 0x7B */
- { NOINSTR }, /* 0x7C */
- { NOINSTR }, /* 0x7D */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_MOV, "movd", { AMODE_E | OPTYPE_dq | OP_DST, AMODE_P | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x7E */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_MOV, "movq", { AMODE_Q | OPTYPE_q | OP_DST, AMODE_P | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x7F */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jo", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_O, NOCHANGE, OP1_DST, NOACTION }, /* 0x80 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jno", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_NO, NOCHANGE, OP1_DST, NOACTION }, /* 0x81 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jb", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_C, NOCHANGE, OP1_DST, NOACTION }, /* 0x82 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jnb", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_NC, NOCHANGE, OP1_DST, NOACTION }, /* 0x83 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jz", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_Z, NOCHANGE, OP1_DST, NOACTION }, /* 0x84 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jnz", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_NZ, NOCHANGE, OP1_DST, NOACTION }, /* 0x85 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jbe", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_BE, NOCHANGE, OP1_DST, NOACTION }, /* 0x86 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "ja", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_A, NOCHANGE, OP1_DST, NOACTION }, /* 0x87 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "js", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_S, NOCHANGE, OP1_DST, NOACTION }, /* 0x88 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jns", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_NS, NOCHANGE, OP1_DST, NOACTION }, /* 0x89 */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jpe", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_PE, NOCHANGE, OP1_DST, NOACTION }, /* 0x8A */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jpo", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_PO, NOCHANGE, OP1_DST, NOACTION }, /* 0x8B */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jl", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_L, NOCHANGE, OP1_DST, NOACTION }, /* 0x8C */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jge", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_GE, NOCHANGE, OP1_DST, NOACTION }, /* 0x8D */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jle", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_LE, NOCHANGE, OP1_DST, NOACTION }, /* 0x8E */
- { NOGROUP, CPU_I386, ITYPE_BRANCHCC, "jg", { AMODE_J | OPTYPE_z | OP_SRC | OP_COND_EXEC, 0, 0 }, COND_G, NOCHANGE, OP1_DST, NOACTION }, /* 0x8F */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "seto", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_O, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x90 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setno", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_NO, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x91 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setb", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_C, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x92 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setnb", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_NC, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x93 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "sete", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_Z, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x94 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setne", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_NZ, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x95 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setbe", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_BE, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x96 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "seta", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_A, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x97 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "sets", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_S, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x98 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setns", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_NS, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x99 */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setpe", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_PE, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x9A */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setpo", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_PO, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x9B */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setl", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_L, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x9C */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setge", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_GE, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x9D */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setle", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_LE, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x9E */
- { NOGROUP, CPU_I386, ITYPE_MOVCC, "setg", { AMODE_E | OPTYPE_b | OP_COND_DST, OPTYPE_1 | OP_COND_SRC, OPTYPE_0 | OP_COND_SRC }, COND_G, NOCHANGE, OP1_DST | OP2_SRC, OP1_DST | OP3_SRC }, /* 0x9F */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OPTYPE_FS | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xA0 */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OPTYPE_FS | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xA1 */
- { NOGROUP, CPU_PENTIUM, ITYPE_CPUID, "cpuid", { OPTYPE_EDX_ECX_EBX_EAX | OP_DST, OPTYPE_REG_xAX_BIG | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xA2 */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "bt", { AMODE_E | OPTYPE_v | OP_SRC, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0xA3 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "shld", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0xA4 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "shld", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, OPTYPE_REG_CL | OP_SRC }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0xA5 */
- { NOINSTR }, /* 0xA6 */
- { NOINSTR }, /* 0xA7 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { OPTYPE_GS | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xA8 */
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { OPTYPE_GS | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xA9 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "rsm", NOARGS, NOCOND, FLAG_ALL_MOD, NOACTION, IGNORED }, /* 0xAA */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "bts", { AMODE_E | OPTYPE_v | OP_SRC, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0xAB */
- { NOGROUP, CPU_I386, ITYPE_SHR, "shrd", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0xAC */
- { NOGROUP, CPU_I386, ITYPE_SHR, "shrd", { AMODE_E | OPTYPE_v | OP_DST, AMODE_G | OPTYPE_v | OP_SRC, OPTYPE_REG_CL | OP_SRC }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0xAD */
- { X86_Group_16, GROUP }, /* 0xAE */
- { NOGROUP, CPU_I386, ITYPE_MUL, "imul", { AMODE_G | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_v | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0xAF */
- { NOGROUP, CPU_I486, ITYPE_XCHGCC, "cmpxchg", { AMODE_E | OPTYPE_b | OP_SRC | OP_COND_DST, OPTYPE_REG_AL | OP_SRC | OP_COND_DST, AMODE_G | OPTYPE_b | OP_COND_SRC }, COND_OP1_EQ_OP2, FLAG_COMMON_MOD, OP1_DST | OP3_SRC, OP2_DST | OP1_SRC }, /* 0xB0 */
- { NOGROUP, CPU_I486, ITYPE_XCHGCC, "cmpxchg", { AMODE_E | OPTYPE_v | OP_SRC | OP_COND_DST, OPTYPE_REG_xAX_BIG | OP_SRC | OP_COND_DST, AMODE_G | OPTYPE_v | OP_COND_SRC }, COND_OP1_EQ_OP2, FLAG_COMMON_MOD, OP1_DST | OP3_SRC, OP2_DST | OP1_SRC }, /* 0xB1 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "lss", { AMODE_G | OPTYPE_z | OP_DST, AMODE_M | OPTYPE_p | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB2 */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "btr", { AMODE_E | OPTYPE_v | OP_SRC, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0xB3 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "lfs", { AMODE_G | OPTYPE_z | OP_DST, AMODE_M | OPTYPE_p | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB4 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "lgs", { AMODE_G | OPTYPE_z | OP_DST, AMODE_M | OPTYPE_p | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB5 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "movzx", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB6 */
- { NOGROUP, CPU_I386, ITYPE_MOV, "movzx", { AMODE_G | OPTYPE_v | OP_DST, AMODE_E | OPTYPE_w | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xB7 */
- { NOINSTR }, /* 0xB8 */
- { X86_Group_11, GROUP }, /* 0xB9 */
- { X86_Group_8, GROUP }, /* 0xBA */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "btc", { AMODE_E | OPTYPE_v | OP_SRC, AMODE_G | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0xBB */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "bsf", { AMODE_G | OPTYPE_v | OP_SRC, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD, NOACTION, IGNORED }, /* 0xBC */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "bsr", { AMODE_G | OPTYPE_v | OP_SRC, AMODE_E | OPTYPE_v | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD, NOACTION, IGNORED }, /* 0xBD */
- { NOGROUP, CPU_I386, ITYPE_MOV, "movsx", { AMODE_G | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xBE */
- { NOGROUP, CPU_I386, ITYPE_MOV, "movsx", { AMODE_G | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_w | OP_SIGNED | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xBF */
- { NOGROUP, CPU_I486, ITYPE_XCHGADD, "xadd", { AMODE_E | OPTYPE_b | OP_SRC | OP_DST, AMODE_G | OPTYPE_b | OP_SRC | OP_DST, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0xC0 */
- { NOGROUP, CPU_I486, ITYPE_XCHGADD, "xadd", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, AMODE_G | OPTYPE_v | OP_SRC | OP_DST, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0xC1 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_CMP, "cmpps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0xC2 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movnti", { AMODE_M | OPTYPE_dq | OP_DST, AMODE_G | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC3 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "pinsrw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_E | OPTYPE_w | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC4 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "pextrw", { AMODE_G | OPTYPE_d | OP_DST, AMODE_PR | OPTYPE_q | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC5 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "shufps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC6 */
- { X86_Group_9, GROUP }, /* 0xC7 */
- { NOGROUP, CPU_I486, ITYPE_XCHG, "bswap", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC8 */
- { NOGROUP, CPU_I486, ITYPE_XCHG, "bswap", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC9 */
- { NOGROUP, CPU_I486, ITYPE_XCHG, "bswap", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCA */
- { NOGROUP, CPU_I486, ITYPE_XCHG, "bswap", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCB */
- { NOGROUP, CPU_I486, ITYPE_XCHG, "bswap", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCC */
- { NOGROUP, CPU_I486, ITYPE_XCHG, "bswap", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCD */
- { NOGROUP, CPU_I486, ITYPE_XCHG, "bswap", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCE */
- { NOGROUP, CPU_I486, ITYPE_XCHG, "bswap", { OP_REG | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xCF */
- { NOINSTR }, /* 0xD0 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psrlw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xD1 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psrld", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xD2 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psrlq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xD3 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_ADD, "paddq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xD4 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_MUL, "pmullw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xD5 */
- { NOINSTR }, /* 0xD6 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "pmovmskb", { AMODE_G | OPTYPE_d | OP_DST, AMODE_PR | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xD7 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_SUB, "psubusb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xD8 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_SUB, "psubusw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xD9 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "pminub", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xDA */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_AND, "pand", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xDB */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_ADD, "paddusb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xDC */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_ADD, "paddusw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xDD */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "pmaxub", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xDE */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_AND, "pandn", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xDF */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "pavgb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE0 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psraw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE1 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psrad", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE2 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "pavgw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE3 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MUL, "pmulhuw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE4 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_MUL, "pmulhw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE5 */
- { NOINSTR }, /* 0xE6 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MOV, "movntq", { AMODE_M | OPTYPE_q | OP_DST, AMODE_P | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE7 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_SUB, "psubsb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE8 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_SUB, "psubsw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xE9 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "pminsw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEA */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_OR, "por", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEB */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_ADD, "paddsb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEC */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_ADD, "paddsw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xED */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "pmaxsw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEE */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_XOR, "pxor", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xEF */
- { NOINSTR }, /* 0xF0 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psllw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF1 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "pslld", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF2 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psllq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF3 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_MUL, "pmuludq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF4 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_ADD, "pmaddwd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF5 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "psadbw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF6 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "maskmovq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_PR | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF7 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_SUB, "psubb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF8 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_SUB, "psubw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xF9 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_SUB, "psubd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xFA */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_SUB, "psubq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xFB */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_ADD, "paddb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xFC */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_ADD, "paddw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xFD */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX_ADD, "paddd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xFE */
- { NOINSTR } /* 0xFF */,
-};
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// Groups
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-X86_OPCODE X86_Group_1_80[8] = // 80
-{
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { AMODE_E | OPTYPE_b | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_1_81[8] = // 81
-{
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { AMODE_E | OPTYPE_v | OP_SRC, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_1_82[8] = // 82
-{
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_SRC, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_1_83[8] = // 83
-{
- { NOGROUP, CPU_I386, ITYPE_ADD, "add", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_OR, "or", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ADD, "adc", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sbb", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_AND, "and", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SUB, "sub", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_XOR, "xor", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_CMP, "cmp", { AMODE_E | OPTYPE_v | OP_SIGNED | OP_SRC, AMODE_I | OPTYPE_b | OP_SIGNED | OP_SRC, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_2_C0[8] = // C0
-{
- { NOGROUP, CPU_I386, ITYPE_ROL, "rol", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "ror", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ROL, "rcl", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "rcr", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "shl", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "shr", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "sal", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "sar", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_2_C1[8] = // C1
-{
- { NOGROUP, CPU_I386, ITYPE_ROL, "rol", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "ror", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ROL, "rcl", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "rcr", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "shl", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "shr", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "sal", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "sar", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_2_D0[8] = // D0
-{
- { NOGROUP, CPU_I386, ITYPE_ROL, "rol", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "ror", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ROL, "rcl", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "rcr", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "shl", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "shr", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "sal", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "sar", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_2_D1[8] = // D1
-{
- { NOGROUP, CPU_I386, ITYPE_ROL, "rol", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "ror", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ROL, "rcl", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "rcr", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "shl", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "shr", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "sal", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "sar", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_1 | OP_SRC, 0 }, NOCOND, FLAG_OF_MOD | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_2_D2[8] = // D2
-{
- { NOGROUP, CPU_I386, ITYPE_ROL, "rol", { AMODE_E | OPTYPE_b | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "ror", { AMODE_E | OPTYPE_b | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ROL, "rcl", { AMODE_E | OPTYPE_b | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "rcr", { AMODE_E | OPTYPE_b | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "shl", { AMODE_E | OPTYPE_b | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "shr", { AMODE_E | OPTYPE_b | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "sal", { AMODE_E | OPTYPE_b | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "sar", { AMODE_E | OPTYPE_b | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_2_D3[8] = // D3
-{
- { NOGROUP, CPU_I386, ITYPE_ROL, "rol", { AMODE_E | OPTYPE_v | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "ror", { AMODE_E | OPTYPE_v | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_ROL, "rcl", { AMODE_E | OPTYPE_v | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_ROR, "rcr", { AMODE_E | OPTYPE_v | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "shl", { AMODE_E | OPTYPE_v | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "shr", { AMODE_E | OPTYPE_v | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_SHL, "sal", { AMODE_E | OPTYPE_v | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_SHR, "sar", { AMODE_E | OPTYPE_v | OP_DST, OPTYPE_REG_CL | OP_SRC, 0 }, NOCOND, FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_3_F6[8] = // F6
-{
- { NOGROUP, CPU_I386, ITYPE_TEST, "test", { AMODE_E | OPTYPE_b | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_TEST, "test", { AMODE_E | OPTYPE_b | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_NOT, "not", { AMODE_E | OPTYPE_b | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_NEG, "neg", { AMODE_E | OPTYPE_b | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_MUL, "mul", { OPTYPE_REG_AX | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, OPTYPE_REG_AL | OP_SRC }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_MUL, "imul", { OPTYPE_REG_AX | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_b | OP_SIGNED | OP_SRC, OPTYPE_REG_AL | OP_SIGNED | OP_SRC }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_DIV, "div", { OPTYPE_REG_AX | OP_DST, AMODE_E | OPTYPE_b | OP_SRC, OPTYPE_REG_AX | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_DIV, "idiv", { OPTYPE_REG_AX | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_b | OP_SIGNED | OP_SRC, OPTYPE_REG_AX | OP_SIGNED | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED } /* 0x07 */,
-};
-
-X86_OPCODE X86_Group_3_F7[8] = // F7
-{
- { NOGROUP, CPU_I386, ITYPE_TEST, "test", { AMODE_E | OPTYPE_v | OP_SRC, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_TEST, "test", { AMODE_E | OPTYPE_v | OP_SRC, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, FLAG_OF_CLR | FLAG_SF_MOD | FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_CLR, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_NOT, "not", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_NEG, "neg", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_MUL, "mul", { OPTYPE_xDX_HI_xAX_LO | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, OPTYPE_REG_xAX_BIG | OP_SRC }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_MUL, "imul", { OPTYPE_xDX_HI_xAX_LO | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_v | OP_SIGNED | OP_SRC, OPTYPE_REG_xAX_BIG | OP_SRC }, NOCOND, FLAG_OF_MOD | FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_DIV, "div", { OPTYPE_xDX_HI_xAX_LO | OP_DST, AMODE_E | OPTYPE_v | OP_SRC, OPTYPE_REG_xAX_BIG | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_DIV, "idiv", { OPTYPE_xDX_HI_xAX_LO | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_v | OP_SIGNED | OP_SRC, OPTYPE_REG_xAX_BIG | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_4[8] = // FE
-{
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { AMODE_E | OPTYPE_b | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { AMODE_E | OPTYPE_b | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x01 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR } /* 0x07 */
-};
-
-X86_OPCODE X86_Group_5[8] = // FF
-{
- { NOGROUP, CPU_I386, ITYPE_INC, "inc", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_DEC, "dec", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, 0, 0 }, NOCOND, FLAG_OF_MOD|FLAG_SF_MOD|FLAG_ZF_MOD|FLAG_AF_MOD|FLAG_PF_MOD, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_CALL, "call", { AMODE_E | OPTYPE_v | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_CALL, "call", { AMODE_E | OPTYPE_p | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_BRANCH, "jmp", { AMODE_E | OPTYPE_v | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_BRANCH, "jmp", { AMODE_E | OPTYPE_p | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_PUSH, "push", { AMODE_E | OPTYPE_v | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_6[8] = // 0F 00
-{
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "sldt", { AMODE_E | OPTYPE_mw | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "str", { AMODE_E | OPTYPE_mw | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "lldt", { AMODE_E | OPTYPE_w | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "ltr", { AMODE_E | OPTYPE_w | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "verr", { AMODE_E | OPTYPE_w | OP_SRC, 0, 0 }, NOCOND, FLAG_ZF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "verw", { AMODE_E | OPTYPE_w | OP_SRC, 0, 0 }, NOCOND, FLAG_ZF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_IA64, ITYPE_BRANCH, "jmpe", { AMODE_E | OPTYPE_v | OP_SRC | OP_EXEC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOINSTR } /* 0x07 */
-};
-
-X86_OPCODE X86_Group_7[8] = // 0F 01
-{
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "sgdt", { AMODE_M | OPTYPE_dt | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "sidt", { AMODE_M | OPTYPE_dt | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "lgdt", { AMODE_M | OPTYPE_dt | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "lidt", { AMODE_M | OPTYPE_dt | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "smsw", { AMODE_E | OPTYPE_mw | OP_DST, OPTYPE_CR0 | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "lmsw", { OPTYPE_CR0 | OP_DST, AMODE_E | OPTYPE_w | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I486, ITYPE_SYSTEM, "invlpg", { AMODE_M | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_8[8] = // 0F BA
-{
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "bt", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "bts", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "btr", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_BITTEST, "btc", { AMODE_E | OPTYPE_v | OP_SRC | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, FLAG_CF_MOD, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_9[8] = // 0F C7
-{
- { NOINSTR }, /* 0x00 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_XCHGCC, "cmpxchg8b", { AMODE_M | OPTYPE_q | OP_SRC | OP_COND_DST, OPTYPE_xDX_HI_xAX_LO | OP_SRC | OP_COND_DST, OPTYPE_xCX_HI_xBX_LO | OP_COND_SRC }, COND_OP1_EQ_OP2, FLAG_ZF_MOD, OP1_DST | OP3_SRC, OP2_DST | OP1_SRC }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_10[8] = // 8F (NOTE: AMD64 labels this Group 1A)
-{
- { NOGROUP, CPU_I386, ITYPE_POP, "pop", { AMODE_E | OPTYPE_v | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_11[8] = // 0F B9 (NOTE: AMD64 labels this Group 10)
-{
- { NOGROUP, CPU_I386, ITYPE_INVALID, "undef", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_I386, ITYPE_INVALID, "undef", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_I386, ITYPE_INVALID, "undef", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_I386, ITYPE_INVALID, "undef", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_I386, ITYPE_INVALID, "undef", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_I386, ITYPE_INVALID, "undef", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_I386, ITYPE_INVALID, "undef", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_I386, ITYPE_INVALID, "undef", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED } /* 0x07 */
-};
-
-X86_OPCODE X86_Group_12_C6[8] = // C6 (NOTE: AMD64 labels this Group 11)
-{
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_E | OPTYPE_b | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0xC6 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_12_C7[8] = // C7 (NOTE: AMD64 labels this Group 11)
-{
- { NOGROUP, CPU_I386, ITYPE_MOV, "mov", { AMODE_E | OPTYPE_v | OP_DST, AMODE_I | OPTYPE_z | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-// NOTE: the X86_SSE2_* is only followed if it is a 3-byte opcode (e.g., prefix is 66, F2, or F3)
-X86_OPCODE X86_Group_13[8] = // 0F 71 (NOTE: AMD64 labels this Group 12)
-{
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psrlw", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psraw", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psllw", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_14[8] = // 0F 72 (NOTE: AMD64 labels this Group 13)
-{
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psrld", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psrad", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "pslld", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_15[8] = // 0F 73 (NOTE: AMD64 labels this Group 14)
-{
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psrlq", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psrldq", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "psllq", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_MMX, "pslldq", { AMODE_PR | OPTYPE_q | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED } /* 0x07 */
-};
-
-X86_OPCODE X86_Group_16[8] = // 0F AE (NOTE: AMD64 labels this Group 15)
-{
- { NOGROUP, CPU_PENTIUM2, ITYPE_FPU, "fxsave", { AMODE_M | OPTYPE_fst2 | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_FPU, "fxrstor", { AMODE_M | OPTYPE_fst2 | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "ldmxcsr", { AMODE_M | OPTYPE_d | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "stmxcsr", { AMODE_M | OPTYPE_d | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "lfence", NOARGS, NOCOND, NOCHANGE, SERIALIZE_READ, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "mfence", NOARGS, NOCOND, NOCHANGE, SERIALIZE_ALL, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "sfence", NOARGS, NOCOND, NOCHANGE, SERIALIZE_WRITE, IGNORED } /* 0x07 */
-};
-
-X86_OPCODE X86_Group_17[8] = // 0F 18 (NOTE: AMD64 labels this Group 16)
-{
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "prefetchnta", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x00 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "prefetcht0", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "prefetcht1", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "prefetcht2", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x03 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "hintnop", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x04 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "hintnop", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x05 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "hintnop", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_PENTIUM2, ITYPE_SYSTEM, "hintnop", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x07 */
-};
-
-X86_OPCODE X86_Group_P[8] = // 0F 0D
-{
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "prefetch", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x01 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "prefetchw", { AMODE_E | OPTYPE_b | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// FPU (ESC) opcodes
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-
-X86_OPCODE X86_ESC_0[0x48] = // D8
-{
- //
- // ModRM < C0
- // Index 0x00-0x07 = opcode extension
- //
-
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_ss | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x00
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_ss | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x01
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { AMODE_M | OPTYPE_ss | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // 0x02
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { AMODE_M | OPTYPE_ss | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // 0x03
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_ss | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x04
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_ss | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x05
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_ss | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x06
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_ss | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x07
-
- //
- // ModRM >= C0: ST(0) <- ST(0) + ST(i)
- // Index 0x08-0x47 = ModRM 0xC0-0xFF
- //
-
- // C0-C7
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x7
- // C8-CF
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
- // D0-D7
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x7
- // D8-DF
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xF
- // E0-E7
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x7
- // E8-EF
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xF
- // F0-F7
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x7
- // F8-FF
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED } // xF
-};
-
-
-X86_OPCODE X86_ESC_1[0x48] = // D9
-{
- //
- // ModRM < C0
- // Index 0x00-0x07 = opcode extension
- //
-
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { AMODE_M | OPTYPE_ss | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // 0x00
- { NOINSTR }, // 0x01
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { AMODE_M | OPTYPE_ss | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x02
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { AMODE_M | OPTYPE_ss | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // 0x03
- { NOGROUP, CPU_I287, ITYPE_FLOADENV, "fldenv", { AMODE_M | OPTYPE_fev | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // 0x04
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fldcw", { OPTYPE_FPU_CONTROL | OP_DST, AMODE_M | OPTYPE_w | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // 0x05
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstenv", { AMODE_M | OPTYPE_fev | OP_DST, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // 0x06
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fnstcw", { AMODE_M | OPTYPE_w | OP_DST, OPTYPE_FPU_CONTROL | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // 0x07
-
- //
- // ModRM >= C0
- // Index 0x08-0x47 = ModRM 0xC0-0xFF
- //
-
- // C0-C7
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { OPTYPE_STx | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { OPTYPE_STx | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { OPTYPE_STx | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { OPTYPE_STx | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { OPTYPE_STx | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { OPTYPE_STx | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { OPTYPE_STx | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { OPTYPE_STx | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x7
- // C8-CF
- { NOGROUP, CPU_I287, ITYPE_FEXCH, "fxch", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC | OP_DST, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FEXCH, "fxch", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC | OP_DST, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FEXCH, "fxch", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC | OP_DST, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FEXCH, "fxch", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC | OP_DST, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FEXCH, "fxch", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC | OP_DST, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FEXCH, "fxch", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC | OP_DST, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FEXCH, "fxch", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC | OP_DST, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FEXCH, "fxch", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_STx | OP_SRC | OP_DST, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xF
- // D0-D7
- { NOGROUP, CPU_I287, ITYPE_FPU, "fnop", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // D8-DF
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
- // E0-E7
- { NOGROUP, CPU_I287, ITYPE_FPU, "fchs", { OPTYPE_ST0 | OP_SRC | OP_DST, 0, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FPU, "fabs", { OPTYPE_ST0 | OP_SRC | OP_DST, 0, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOGROUP, CPU_I287, ITYPE_FPU, "ftst", { OPTYPE_ST0 | OP_SRC, OPTYPE_FLDZ | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FPU, "fxam", { OPTYPE_ST0 | OP_SRC, 0, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // E8-EF
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld1", { OPTYPE_FLD1 | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fldl2t", { OPTYPE_FLDL2T | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fldl2e", { OPTYPE_FLDL2E | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fldpi", { OPTYPE_FLDPI | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fldlg2", { OPTYPE_FLDLG2| OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fldln2", { OPTYPE_FLDLN2 | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fldz", { OPTYPE_FLDZ | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // xE
- { NOINSTR }, // xF
- // F0-F7
- { NOGROUP, CPU_I287, ITYPE_FPU, "f2xm1", { OPTYPE_ST0 | OP_SRC | OP_DST, 0, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FPU, "fyl2x", { OPTYPE_ST1 | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FPU, "fptan", { OPTYPE_ST0 | OP_SRC | OP_DST, 0, 0 }, NOCOND, FPU_C1_MOD|FPU_C2_MOD, FPU_STACK_PUSH, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FPU, "fpatan", { OPTYPE_ST1 | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC , 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FPU, "fxtract", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_ST1 | OP_DST, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x4
- { NOGROUP, CPU_I387, ITYPE_FPU, "fprem1", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_ST1 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FPU, "fdecstp", NOARGS, NOCOND, FPU_C1_MOD, FPU_STACK_DEC, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FPU, "fincstp", NOARGS, NOCOND, FPU_C1_MOD, FPU_STACK_INC, IGNORED }, // x7
- // F8-FF
- { NOGROUP, CPU_I287, ITYPE_FPU, "fprem", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_ST1 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FPU, "fyl2xp1", { OPTYPE_ST1 | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FPU, "fsqrt", { OPTYPE_ST0 | OP_SRC | OP_DST, 0, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FPU, "fsincos", { OPTYPE_ST0 | OP_SRC | OP_DST, 0, 0 }, NOCOND, FPU_C1_MOD|FPU_C2_MOD, FPU_STACK_PUSH, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FPU, "frndint", { OPTYPE_ST0 | OP_SRC | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FPU, "fscale", { OPTYPE_ST0 | OP_SRC | OP_DST, OPTYPE_ST1 | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FPU, "fsin", { OPTYPE_ST0 | OP_SRC | OP_DST, 0, 0 }, NOCOND, FPU_C1_MOD|FPU_C2_MOD, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FPU, "fcos", { OPTYPE_ST0 | OP_SRC | OP_DST, 0, 0 }, NOCOND, FPU_C1_MOD|FPU_C2_MOD, NOACTION, IGNORED } // xF
-};
-
-
-X86_OPCODE X86_ESC_2[0x48] = // DA
-{
- //
- // ModRM < C0
- // Index 0x00-0x07 = opcode extension
- //
-
- { NOGROUP, CPU_I287, ITYPE_FADD, "fiadd", { OPTYPE_ST0 | OP_SIGNED | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fimul", { OPTYPE_ST0 | OP_SIGNED | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "ficom", { AMODE_M | OPTYPE_sd | OP_SIGNED | OP_SRC, OPTYPE_ST0 | OP_SRC | OP_DST, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "ficomp", { AMODE_M | OPTYPE_sd | OP_SIGNED | OP_SRC, OPTYPE_ST0 | OP_SRC | OP_DST, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fisub", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fisubr", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fidiv", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fidivr", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x7
-
- //
- // ModRM >= C0
- // Index 0x08-0x47 = ModRM 0xC0-0xFF
- //
-
- // C0-C7
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_B, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x0
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_B, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x1
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_B, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x2
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_B, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x3
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_B, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x4
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_B, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x5
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_B, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x6
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_B, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x7
- // C8-CF
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmove", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_E, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x8
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmove", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_E, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x9
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmove", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_E, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xA
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmove", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_E, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xB
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmove", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_E, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xC
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmove", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_E, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xD
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmove", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_E, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xE
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmove", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_E, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xF
- // D0-D7
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_BE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x0
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_BE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x1
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_BE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x2
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_BE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x3
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_BE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x4
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_BE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x5
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_BE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x6
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_BE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x7
- // D8-DF
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_U, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x8
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_U, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x9
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_U, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xA
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_U, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xB
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_U, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xC
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_U, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xD
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_U, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xE
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FMOVCC, "fcmovu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_COND_SRC, 0 }, COND_U, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xF
- // E0-E7
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // E8-EF
- { NOINSTR }, // x8
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucompp", { OPTYPE_ST1 | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP2, IGNORED }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
- // F0-F7
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // F8-FF
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR } // xF
-};
-
-
-
-X86_OPCODE X86_ESC_3[0x48] = // DB
-{
- //
- // ModRM < C0
- // Index 0x00-0x07 = opcode extension
- //
-
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fild", { AMODE_M | OPTYPE_d | OP_SIGNED | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // 0x00
- { NOGROUP, CPU_PENTIUM4, ITYPE_FSTORE, "fisttp", { AMODE_M | OPTYPE_d | OP_SIGNED | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // 0x01
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fist", { AMODE_M | OPTYPE_d | OP_SIGNED | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x02
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fistp", { AMODE_M | OPTYPE_d | OP_SIGNED | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // 0x03
- { NOINSTR }, // 0x04
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { AMODE_M | OPTYPE_se | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // 0x05
- { NOINSTR }, // 0x06
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { AMODE_M | OPTYPE_se | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // 0x07
-
- //
- // ModRM >= C0
- // Index 0x08-0x47 = ModRM 0xC0-0xFF
- //
-
- // C0-C7
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NB, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x0
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NB, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x1
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NB, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x2
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NB, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x3
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NB, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x4
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NB, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x5
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NB, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x6
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnb", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NB, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x7
- // C8-CF
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovne", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x8
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovne", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x9
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovne", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xA
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovne", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xB
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovne", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xC
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovne", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xD
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovne", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xE
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovne", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xF
- // D0-D7
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NBE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x0
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NBE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x1
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NBE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x2
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NBE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x3
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NBE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x4
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NBE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x5
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NBE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x6
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnbe", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NBE, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x7
- // D8-DF
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NU, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x8
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NU, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // x9
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NU, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xA
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NU, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xB
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NU, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xC
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NU, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xD
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NU, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xE
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FPU, "fcmovnu", { OPTYPE_ST0 | OP_COND_DST, OPTYPE_STx | OP_SRC, 0 }, COND_NU, FPU_C1_MOD, OP1_DST | OP2_SRC, NOACTION }, // xF
- // E0-E7
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOGROUP, CPU_I287, ITYPE_FPU, "fnclex", { OPTYPE_FPU_STATUS | OP_DST, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FPU, "finit", { OPTYPE_FPU_STATUS | OP_DST, 0, 0 }, NOCOND, FPU_ALL_CLR, NOACTION, IGNORED }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // E8-EF
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // xF
- // F0-F7
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomi", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, NOACTION, IGNORED }, // x7
- // F8-FF
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR } // xF
-};
-
-X86_OPCODE X86_ESC_4[0x48] = // DC
-{
- //
- // ModRM < C0
- // Index 0x00-0x07 = opcode extension
- //
-
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x00
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x01
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcom", { AMODE_M | OPTYPE_sd | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // 0x02
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcomp", { AMODE_M | OPTYPE_sd | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // 0x03
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x04
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x05
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x06
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_sd | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x07
-
- //
- // ModRM >= C0
- // Index 0x08-0x47 = ModRM 0xC0-0xFF
- //
-
- // C0-C7
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FADD, "fadd", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x7
- // C8-CF
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmul", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xF
- // D0-D7
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // D8-DF
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
- // E0-E7
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x7
- // E8-EF
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsub", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xF
- // F0-F7
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivr", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x7
- // F8-FF
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdiv", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED } // xF
-};
-
-
-X86_OPCODE X86_ESC_5[0x48] = // DD
-{
- //
- // ModRM < C0
- // Index 0x00-0x07 = opcode extension
- //
- //
-
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fld", { AMODE_M | OPTYPE_sd | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_FSTORE, "fisttp", { AMODE_M | OPTYPE_d | OP_SIGNED | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { AMODE_M | OPTYPE_sd | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { AMODE_M | OPTYPE_sd | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FRESTORE, "frstor", { AMODE_M | OPTYPE_fst1 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x4
- { NOINSTR }, // x5
- { NOGROUP, CPU_I287, ITYPE_FSAVE, "fsave", { AMODE_M | OPTYPE_fst1 | OP_DST, 0 }, NOCOND, FPU_ALL_CLR, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fnstsw", { AMODE_M | OPTYPE_w | OP_DST, OPTYPE_FPU_STATUS | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x7
-
- //
- // ModRM >= C0
- // Index 0x08-0x47 = ModRM 0xC0-0xFF
- //
-
- // C0-C7
- { NOGROUP, CPU_I287, ITYPE_FPU, "ffree", { OPTYPE_FPU_TAG | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FPU, "ffree", { OPTYPE_FPU_TAG | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FPU, "ffree", { OPTYPE_FPU_TAG | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FPU, "ffree", { OPTYPE_FPU_TAG | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FPU, "ffree", { OPTYPE_FPU_TAG | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FPU, "ffree", { OPTYPE_FPU_TAG | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FPU, "ffree", { OPTYPE_FPU_TAG | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FPU, "ffree", { OPTYPE_FPU_TAG | OP_DST, OPTYPE_STx | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x7
- // C8-CF
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
- // D0-D7
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fst", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // x7
- // D8-DF
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fstp", { OPTYPE_STx | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xF
- // E0-E7
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucom", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // x7
- // E8-EF
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x8
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x9
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fucomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xB
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xC
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xD
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xE
- { NOGROUP, CPU_I387, ITYPE_FCOMP, "fucomp", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xF
- // F0-F7
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // F8-FF
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR } // xF
-};
-
-
-X86_OPCODE X86_ESC_6[0x48] = // DE
-{
- //
- // ModRM < C0
- // Index 0x00-0x07 = opcode extension
- //
-
- { NOGROUP, CPU_I287, ITYPE_FADD, "fiadd", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_w | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x00
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fimul", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_w | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x01
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "ficom", { AMODE_M | OPTYPE_w | OP_SIGNED | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, NOACTION, IGNORED }, // 0x02
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "ficomp", { AMODE_M | OPTYPE_w | OP_SIGNED | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // 0x03
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fisub", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_w | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x04
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fisubr", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_w | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x05
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fidiv", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_w | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x06
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fidivr", { OPTYPE_ST0 | OP_SRC | OP_DST, AMODE_M | OPTYPE_w | OP_SIGNED | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x07
- //
- // ModRM >= C0
- // Index 0x08-0x47 = ModRM 0xC0-0xFF
- //
-
- // C0-C7
- { NOGROUP, CPU_I287, ITYPE_FADD, "faddp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FADD, "faddp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FADD, "faddp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FADD, "faddp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FADD, "faddp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FADD, "faddp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FADD, "faddp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FADD, "faddp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x7
- // C8-CF
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmulp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmulp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmulp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmulp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmulp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmulp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmulp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FMUL, "fmulp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xF
- // D0-D7
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // D8-DF
- { NOINSTR }, // x8
- { NOGROUP, CPU_I287, ITYPE_FCOMP, "fcompp", { OPTYPE_ST1 | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_ALL_MOD, FPU_STACK_POP2, IGNORED }, // x9
- { NOINSTR }, // 0xA
- { NOINSTR }, // 0xB
- { NOINSTR }, // 0xC
- { NOINSTR }, // 0xD
- { NOINSTR }, // 0xE
- { NOINSTR }, // 0xF
- // E0-E7
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x7
- // E8-EF
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FSUB, "fsubp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xF
- // F0-F7
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x0
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x1
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x2
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x3
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x4
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x5
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x6
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivrp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x7
- // F8-FF
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x8
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // x9
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xA
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xB
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xC
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xD
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // xE
- { NOGROUP, CPU_I287, ITYPE_FDIV, "fdivp", { OPTYPE_STx | OP_SRC | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED } // xF
-};
-
-
-X86_OPCODE X86_ESC_7[0x48] = // DF
-{
- //
- // ModRM < C0
- // Index 0x00-0x07 = opcode extension
- //
-
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fild", { AMODE_M | OPTYPE_w | OP_SIGNED | OP_SRC, 0, 0}, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // 0x00
- { NOGROUP, CPU_PENTIUM4, ITYPE_FSTORE, "fisttp", { AMODE_M | OPTYPE_w | OP_SIGNED | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // 0x01
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fist", { AMODE_M | OPTYPE_w | OP_SIGNED | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, NOACTION, IGNORED }, // 0x02
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fistp", { AMODE_M | OPTYPE_w | OP_SIGNED | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // 0x03
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fbld", { AMODE_M | OPTYPE_pb | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // 0x04
- { NOGROUP, CPU_I287, ITYPE_FLOAD, "fild", { AMODE_M | OPTYPE_q | OP_SIGNED | OP_SRC, 0, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_PUSH, IGNORED }, // 0x05
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fbstp", { AMODE_M | OPTYPE_pb | OP_DST, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // 0x06
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fistp", { AMODE_M | OPTYPE_q | OP_SIGNED | OP_DST, OPTYPE_ST0 | OP_SRC, 0}, NOCOND, FPU_C1_MOD, FPU_STACK_POP, IGNORED }, // 0x07
-
- //
- // ModRM >= C0
- // Index 0x08-0x47 = ModRM 0xC0-0xFF
- //
- // C0-C7
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // C8-CF
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
- // D0-D7
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // D8-DF
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
- // E0-E7
- { NOGROUP, CPU_I287, ITYPE_FSTORE, "fnstsw", { OPTYPE_REG_AX | OP_DST, OPTYPE_FPU_STATUS | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- // E8-EF
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xA
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xB
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fucomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // xF
- // F0-F7
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x2
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x3
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x6
- { NOGROUP, CPU_PENTIUM_PRO, ITYPE_FCOMP, "fcomip", { OPTYPE_STx | OP_SRC, OPTYPE_ST0 | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_PF_MOD | FLAG_CF_MOD | FPU_ALL_MOD, FPU_STACK_POP, IGNORED }, // x7
- // F8-FF
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR } // xF
-};
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// SSE opcodes
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-X86_OPCODE X86_SSE[0x300] =
-{
- // prefix 0x66 (operand size)
- /* 0x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 1x */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movupd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movupd", { AMODE_W | OPTYPE_pd | OP_DST, AMODE_V | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movlpd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_M | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movlpd", { AMODE_M | OPTYPE_q | OP_DST, AMODE_V | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "unpcklpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "unpckhpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movhpd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_M | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "mpvhpd", { AMODE_M | OPTYPE_q | OP_DST, AMODE_V | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 2x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movapd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movapd", { AMODE_W | OPTYPE_o | OP_DST, AMODE_V | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtpi2pd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movntpd", { AMODE_M | OPTYPE_o | OP_DST, AMODE_V | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvttpd2pi", { AMODE_P | OPTYPE_q | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtpd2pi", { AMODE_P | OPTYPE_q | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_CMP, "ucomisd", { AMODE_V | OPTYPE_sd | OP_SRC, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_CF_MOD | FLAG_PF_MOD | FLAG_OF_CLR | FLAG_SF_CLR | FLAG_AF_CLR, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_CMP, "comisd", { AMODE_V | OPTYPE_pd | OP_SRC, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD | FLAG_CF_MOD | FLAG_PF_MOD | FLAG_OF_CLR | FLAG_SF_CLR | FLAG_AF_CLR, NOACTION, IGNORED }, // xF
-
- /* 3x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 4x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 5x */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "movmskpd", { AMODE_G | OPTYPE_d | OP_DST, AMODE_VR | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "sqrtpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_AND, "andpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_AND, "andnpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_OR, "orpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_XOR, "xorpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x7
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "addpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MUL, "mulpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtpd2ps", { AMODE_V | OPTYPE_ps | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtps2dq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "subpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "minpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_DIV, "divpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "maxpd", { AMODE_V | OPTYPE_pd | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* 6x */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "punpcklbw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "punpcklwd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "punpckldq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "packsswb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pcmpgtb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pcmpgtw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pcmpgtd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "packuswb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x7
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "punpckhbw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "punpckhwd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "punpckhdq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "packssdw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "punpcklqdq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "punpckhqdq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_E | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movdqa", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* 7x */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pshufd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { X86_SSE2_Group_13, GROUP }, // x1
- { X86_SSE2_Group_14, GROUP }, // x2
- { X86_SSE2_Group_15, GROUP }, // x3
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_CMP, "pcmpeqb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_CMP, "pcmpeqw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_CMP, "pcmpeqd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE3_ADD, "haddpd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE3_SUB, "hsubpd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movd", { AMODE_E | OPTYPE_dq | OP_DST, AMODE_V | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movdqa", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* 8x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 9x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Ax */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Bx */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Cx */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_CMP, "cmppd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, // x2
- { NOINSTR }, // x3
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pinsrw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_E | OPTYPE_w | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pextrw", { AMODE_G | OPTYPE_d | OP_DST, AMODE_VR| OPTYPE_o | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "shufpd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Dx */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE3, "addsubpd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psrlw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psrld", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psrlq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "paddq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MUL, "pmullw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movq", { AMODE_W | OPTYPE_q | OP_DST, AMODE_V | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pmovmskb", { AMODE_G | OPTYPE_d | OP_DST, AMODE_VR| OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x7
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "psubusb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "psubusw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pminub", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_AND, "pand", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "paddusb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "paddusw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pmaxub", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_AND, "pandn", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* Ex */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pavgb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psraw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psrad", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pavgw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MUL, "pmulhuw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MUL, "pmulhw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvttpd2dq", { AMODE_V | OPTYPE_q | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movntdq", { AMODE_M | OPTYPE_o | OP_DST, AMODE_V | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x7
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "psubsb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "psubsw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pminsw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_OR, "por", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "paddsb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "paddsw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pmaxuw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_XOR, "pxor", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* Fx */
- { NOINSTR }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psllw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pslld", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psllq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x3
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MUL, "pmuludq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x4
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "pmaddwd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psadbw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "maskmovdqu", { AMODE_V | OPTYPE_o | OP_DST, AMODE_VR| OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x7
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "psubb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "psubw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "psubd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "psubq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "paddb", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "paddw", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "paddd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOINSTR }, // xF
-
- // prefix 0xf2 (repne)
- /* 0x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 1x */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movsd", { AMODE_V | OPTYPE_sdo | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movsd", { AMODE_W | OPTYPE_sd | OP_DST, AMODE_V | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE3_MOV, "movddup", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 2x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtsi2sd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_E | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOINSTR }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvttsd2si", { AMODE_G | OPTYPE_dq | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtsd2si", { AMODE_G | OPTYPE_dq | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 3x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 4x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 5x */
- { NOINSTR }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "sqrtsd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "addsd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MUL, "mulsd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtsd2ss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOINSTR }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "subsd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "minsd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_DIV, "divsd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "maxsd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* 6x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movdqa", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* 7x */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pshuflw", { AMODE_V | OPTYPE_q | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE3_ADD, "haddps", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE3_SUB, "hsubps", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 8x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 9x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Ax */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Bx */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Cx */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_CMP, "cmpsd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_W | OPTYPE_sd | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Dx */
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE3, "addsubps", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movdq2q", { AMODE_P | OPTYPE_q | OP_DST, AMODE_VR | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Ex */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtpd2dq", { AMODE_V | OPTYPE_q | OP_DST, AMODE_W | OPTYPE_pd | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Fx */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE3, "lddqu", { AMODE_V | OPTYPE_o | OP_DST, AMODE_M | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- // prefix 0xf3 (rep)
- /* 0x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 1x */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movss", { AMODE_V | OPTYPE_sso | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movss", { AMODE_W | OPTYPE_ss | OP_DST, AMODE_V | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE3_MOV, "movsldup", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE3_MOV, "movshdup", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 2x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "cvtsi2ss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_E | OPTYPE_dq | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOINSTR }, // xB
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "cvttss2si", { AMODE_G | OPTYPE_dq | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE, "cvtss2si", { AMODE_G | OPTYPE_dq | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 3x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 4x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 5x */
- { NOINSTR }, // x0
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "sqrtss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x1
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "rsqrtss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x2
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "rcpss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_ADD, "addss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MUL, "mulss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x9
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtss2sd", { AMODE_V | OPTYPE_sd | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xA
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvttps2dq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_ps | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xB
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_SUB, "subss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xC
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "minss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_DIV, "divss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "maxss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* 6x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movdqu", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* 7x */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pshufhw", { AMODE_V | OPTYPE_q | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movq", { AMODE_V | OPTYPE_q | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xE
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movdqu", { AMODE_W | OPTYPE_o | OP_DST, AMODE_V | OPTYPE_o | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // xF
-
- /* 8x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* 9x */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Ax */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Bx */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Cx */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOGROUP, CPU_PENTIUM3, ITYPE_SSE_CMP, "cmpss", { AMODE_V | OPTYPE_ss | OP_DST, AMODE_W | OPTYPE_ss | OP_SRC, AMODE_I | OPTYPE_b | OP_SRC }, NOCOND, FLAG_COMMON_MOD, NOACTION, IGNORED }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Dx */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2_MOV, "movq2dq", { AMODE_V | OPTYPE_o | OP_DST, AMODE_PR | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Ex */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "cvtdq2pd", { AMODE_V | OPTYPE_o | OP_DST, AMODE_W | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR }, // xF
-
- /* Fx */
- { NOINSTR }, // x0
- { NOINSTR }, // x1
- { NOINSTR }, // x2
- { NOINSTR }, // x3
- { NOINSTR }, // x4
- { NOINSTR }, // x5
- { NOINSTR }, // x6
- { NOINSTR }, // x7
- { NOINSTR }, // x8
- { NOINSTR }, // x9
- { NOINSTR }, // xA
- { NOINSTR }, // xB
- { NOINSTR }, // xC
- { NOINSTR }, // xD
- { NOINSTR }, // xE
- { NOINSTR } // xF
-};
-
-X86_OPCODE X86_SSE2_Group_13[24] = // 66/F2/F3 0F 71
-{
- // prefix 0x66 (operand size)
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psrlw", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psraw", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psllw", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-
- // prefix 0xf2 (repne)
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-
- // prefix 0xf3 (rep)
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-X86_OPCODE X86_SSE2_Group_14[24] = // 66/F2/F3 0F 72
-{
- // prefix 0x66 (operand size)
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psrld", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psrad", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pslld", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-
- // prefix 0xf2 (repne)
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-
- // prefix 0xf3 (rep)
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-X86_OPCODE X86_SSE2_Group_15[24] =
-{
- // prefix 0x66 (operand size)
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psrlq", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x02 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psrldq", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "psllq", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x06 */
- { NOGROUP, CPU_PENTIUM4, ITYPE_SSE2, "pslldq", { AMODE_VR | OPTYPE_o | OP_DST, AMODE_I | OPTYPE_b | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0x07 */
-
- // prefix 0xf2 (repne)
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-
- // prefix 0xf3 (rep)
- { NOINSTR }, /* 0x00 */
- { NOINSTR }, /* 0x01 */
- { NOINSTR }, /* 0x02 */
- { NOINSTR }, /* 0x03 */
- { NOINSTR }, /* 0x04 */
- { NOINSTR }, /* 0x05 */
- { NOINSTR }, /* 0x06 */
- { NOINSTR }, /* 0x07 */
-};
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// 3DNow opcodes
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-X86_OPCODE X86_3DNOW_0F[0x100] =
-{
- { NOINSTR }, /* 00 */
- { NOINSTR }, /* 01 */
- { NOINSTR }, /* 02 */
- { NOINSTR }, /* 03 */
- { NOINSTR }, /* 04 */
- { NOINSTR }, /* 05 */
- { NOINSTR }, /* 06 */
- { NOINSTR }, /* 07 */
- { NOINSTR }, /* 08 */
- { NOINSTR }, /* 09 */
- { NOINSTR }, /* 0A */
- { NOINSTR }, /* 0B */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pi2fw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0C */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pi2fd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 0D */
- { NOINSTR }, /* 0E */
- { NOINSTR }, /* 0F */
- { NOINSTR }, /* 10 */
- { NOINSTR }, /* 11 */
- { NOINSTR }, /* 12 */
- { NOINSTR }, /* 13 */
- { NOINSTR }, /* 14 */
- { NOINSTR }, /* 15 */
- { NOINSTR }, /* 16 */
- { NOINSTR }, /* 17 */
- { NOINSTR }, /* 18 */
- { NOINSTR }, /* 19 */
- { NOINSTR }, /* 1A */
- { NOINSTR }, /* 1B */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pf2iw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 1C */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pf2id", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 1D */
- { NOINSTR }, /* 1E */
- { NOINSTR }, /* 1F */
- { NOINSTR }, /* 20 */
- { NOINSTR }, /* 21 */
- { NOINSTR }, /* 22 */
- { NOINSTR }, /* 23 */
- { NOINSTR }, /* 24 */
- { NOINSTR }, /* 25 */
- { NOINSTR }, /* 26 */
- { NOINSTR }, /* 27 */
- { NOINSTR }, /* 28 */
- { NOINSTR }, /* 29 */
- { NOINSTR }, /* 2A */
- { NOINSTR }, /* 2B */
- { NOINSTR }, /* 2C */
- { NOINSTR }, /* 2D */
- { NOINSTR }, /* 2E */
- { NOINSTR }, /* 2F */
- { NOINSTR }, /* 30 */
- { NOINSTR }, /* 31 */
- { NOINSTR }, /* 32 */
- { NOINSTR }, /* 33 */
- { NOINSTR }, /* 34 */
- { NOINSTR }, /* 35 */
- { NOINSTR }, /* 36 */
- { NOINSTR }, /* 37 */
- { NOINSTR }, /* 38 */
- { NOINSTR }, /* 39 */
- { NOINSTR }, /* 3A */
- { NOINSTR }, /* 3B */
- { NOINSTR }, /* 3C */
- { NOINSTR }, /* 3D */
- { NOINSTR }, /* 3E */
- { NOINSTR }, /* 3F */
- { NOINSTR }, /* 40 */
- { NOINSTR }, /* 41 */
- { NOINSTR }, /* 42 */
- { NOINSTR }, /* 43 */
- { NOINSTR }, /* 44 */
- { NOINSTR }, /* 45 */
- { NOINSTR }, /* 46 */
- { NOINSTR }, /* 47 */
- { NOINSTR }, /* 48 */
- { NOINSTR }, /* 49 */
- { NOINSTR }, /* 4A */
- { NOINSTR }, /* 4B */
- { NOINSTR }, /* 4C */
- { NOINSTR }, /* 4D */
- { NOINSTR }, /* 4E */
- { NOINSTR }, /* 4F */
- { NOINSTR }, /* 50 */
- { NOINSTR }, /* 51 */
- { NOINSTR }, /* 52 */
- { NOINSTR }, /* 53 */
- { NOINSTR }, /* 54 */
- { NOINSTR }, /* 55 */
- { NOINSTR }, /* 56 */
- { NOINSTR }, /* 57 */
- { NOINSTR }, /* 58 */
- { NOINSTR }, /* 59 */
- { NOINSTR }, /* 5A */
- { NOINSTR }, /* 5B */
- { NOINSTR }, /* 5C */
- { NOINSTR }, /* 5D */
- { NOINSTR }, /* 5E */
- { NOINSTR }, /* 5F */
- { NOINSTR }, /* 60 */
- { NOINSTR }, /* 61 */
- { NOINSTR }, /* 62 */
- { NOINSTR }, /* 63 */
- { NOINSTR }, /* 64 */
- { NOINSTR }, /* 65 */
- { NOINSTR }, /* 66 */
- { NOINSTR }, /* 67 */
- { NOINSTR }, /* 68 */
- { NOINSTR }, /* 69 */
- { NOINSTR }, /* 6A */
- { NOINSTR }, /* 6B */
- { NOINSTR }, /* 6C */
- { NOINSTR }, /* 6D */
- { NOINSTR }, /* 6E */
- { NOINSTR }, /* 6F */
- { NOINSTR }, /* 70 */
- { NOINSTR }, /* 71 */
- { NOINSTR }, /* 72 */
- { NOINSTR }, /* 73 */
- { NOINSTR }, /* 74 */
- { NOINSTR }, /* 75 */
- { NOINSTR }, /* 76 */
- { NOINSTR }, /* 77 */
- { NOINSTR }, /* 78 */
- { NOINSTR }, /* 79 */
- { NOINSTR }, /* 7A */
- { NOINSTR }, /* 7B */
- { NOINSTR }, /* 7C */
- { NOINSTR }, /* 7D */
- { NOINSTR }, /* 7E */
- { NOINSTR }, /* 7F */
- { NOINSTR }, /* 80 */
- { NOINSTR }, /* 81 */
- { NOINSTR }, /* 82 */
- { NOINSTR }, /* 83 */
- { NOINSTR }, /* 84 */
- { NOINSTR }, /* 85 */
- { NOINSTR }, /* 86 */
- { NOINSTR }, /* 87 */
- { NOINSTR }, /* 88 */
- { NOINSTR }, /* 89 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfnacc", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 8A */
- { NOINSTR }, /* 8B */
- { NOINSTR }, /* 8C */
- { NOINSTR }, /* 8D */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfpnacc", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 8E */
- { NOINSTR }, /* 8F */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW_CMP, "pfcmpge", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 90 */
- { NOINSTR }, /* 91 */
- { NOINSTR }, /* 92 */
- { NOINSTR }, /* 93 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfmin", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 94 */
- { NOINSTR }, /* 95 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfrcp", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 96 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfrsqrt", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 97 */
- { NOINSTR }, /* 98 */
- { NOINSTR }, /* 99 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW_SUB, "pfsub", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 9A */
- { NOINSTR }, /* 9B */
- { NOINSTR }, /* 9C */
- { NOINSTR }, /* 9D */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW_ADD, "pfadd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* 9E */
- { NOINSTR }, /* 9F */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW_CMP, "pfcmpgt", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* A0 */
- { NOINSTR }, /* A1 */
- { NOINSTR }, /* A2 */
- { NOINSTR }, /* A3 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfmax", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* A4 */
- { NOINSTR }, /* A5 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfrcpit1", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* A6 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfrsqit1", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* A7 */
- { NOINSTR }, /* A8 */
- { NOINSTR }, /* A9 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW_SUB, "pfsubr", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* AA */
- { NOINSTR }, /* AB */
- { NOINSTR }, /* AC */
- { NOINSTR }, /* AD */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfacc", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* AE */
- { NOINSTR }, /* AF */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW_CMP, "pfcmpeq", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* B0 */
- { NOINSTR }, /* B1 */
- { NOINSTR }, /* B2 */
- { NOINSTR }, /* B3 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW_MUL, "pfmul", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* B4 */
- { NOINSTR }, /* B5 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pfrcpit2", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* B6 */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW_MUL, "pmulhrw", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* B7 */
- { NOINSTR }, /* B8 */
- { NOINSTR }, /* B9 */
- { NOINSTR }, /* BA */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW_XCHG, "pswapd", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* BB */
- { NOINSTR }, /* BC */
- { NOINSTR }, /* BD */
- { NOINSTR }, /* BE */
- { NOGROUP, CPU_AMD_K6_2, ITYPE_3DNOW, "pavgb", { AMODE_P | OPTYPE_q | OP_DST, AMODE_Q | OPTYPE_q | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, /* BF */
- { NOINSTR }, /* C0 */
- { NOINSTR }, /* C1 */
- { NOINSTR }, /* C2 */
- { NOINSTR }, /* C3 */
- { NOINSTR }, /* C4 */
- { NOINSTR }, /* C5 */
- { NOINSTR }, /* C6 */
- { NOINSTR }, /* C7 */
- { NOINSTR }, /* C8 */
- { NOINSTR }, /* C9 */
- { NOINSTR }, /* CA */
- { NOINSTR }, /* CB */
- { NOINSTR }, /* CC */
- { NOINSTR }, /* CD */
- { NOINSTR }, /* CE */
- { NOINSTR }, /* CF */
- { NOINSTR }, /* D0 */
- { NOINSTR }, /* D1 */
- { NOINSTR }, /* D2 */
- { NOINSTR }, /* D3 */
- { NOINSTR }, /* D4 */
- { NOINSTR }, /* D5 */
- { NOINSTR }, /* D6 */
- { NOINSTR }, /* D7 */
- { NOINSTR }, /* D8 */
- { NOINSTR }, /* D9 */
- { NOINSTR }, /* DA */
- { NOINSTR }, /* DB */
- { NOINSTR }, /* DC */
- { NOINSTR }, /* DD */
- { NOINSTR }, /* DE */
- { NOINSTR }, /* DF */
- { NOINSTR }, /* E0 */
- { NOINSTR }, /* E1 */
- { NOINSTR }, /* E2 */
- { NOINSTR }, /* E3 */
- { NOINSTR }, /* E4 */
- { NOINSTR }, /* E5 */
- { NOINSTR }, /* E6 */
- { NOINSTR }, /* E7 */
- { NOINSTR }, /* E8 */
- { NOINSTR }, /* E9 */
- { NOINSTR }, /* EA */
- { NOINSTR }, /* EB */
- { NOINSTR }, /* EC */
- { NOINSTR }, /* ED */
- { NOINSTR }, /* EE */
- { NOINSTR }, /* EF */
- { NOINSTR }, /* F0 */
- { NOINSTR }, /* F1 */
- { NOINSTR }, /* F2 */
- { NOINSTR }, /* F3 */
- { NOINSTR }, /* F4 */
- { NOINSTR }, /* F5 */
- { NOINSTR }, /* F6 */
- { NOINSTR }, /* F7 */
- { NOINSTR }, /* F8 */
- { NOINSTR }, /* F9 */
- { NOINSTR }, /* FA */
- { NOINSTR }, /* FB */
- { NOINSTR }, /* FC */
- { NOINSTR }, /* FD */
- { NOINSTR }, /* FE */
- { NOINSTR } /* FF */
-};
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// 64-bit replacement opcodes
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-X86_OPCODE X86_Opcode_63[2] =
-{
- { NOGROUP, CPU_I386, ITYPE_SYSTEM, "arpl", { AMODE_E | OPTYPE_w | OP_SRC, AMODE_G | OPTYPE_w | OP_SRC, 0 }, NOCOND, FLAG_ZF_MOD, NOACTION, IGNORED }, // !ARCH_AMD64
- { NOGROUP, CPU_AMD64, ITYPE_MOV, "movsxd", { AMODE_G | OPTYPE_v | OP_SIGNED | OP_DST, AMODE_E | OPTYPE_d | OP_SIGNED | OP_SRC, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED } // ARCH_AMD64
-};
-
-X86_OPCODE X86_Opcode_0F05[2] =
-{
- { NOGROUP, CPU_AMD_K6_2, ITYPE_SYSCALL, "syscall", { OPTYPE_STAR_MSR | OP_MSR | OP_SRC, OPTYPE_CSTAR_MSR | OP_MSR | OP_SRC, OPTYPE_FMASK_MSR | OP_MSR | OP_SRC }, NOCOND, FLAG_ZF_MOD, NOACTION, IGNORED }, // !ARCH_AMD64
- { NOGROUP, CPU_AMD64, ITYPE_SYSCALL, "syscall", { OPTYPE_STAR_MSR | OP_MSR | OP_SRC, OPTYPE_LSTAR_MSR | OP_MSR | OP_SRC, OPTYPE_FMASK_MSR | OP_MSR | OP_SRC }, NOCOND, NOCHANGE, NOACTION, IGNORED } // ARCH_AMD64
-};
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// Other 3 byte opcodes
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-// Three byte opcodes where the third opcode byte is ModRM
-X86_OPCODE X86_0F01_ModRM[0x100] =
-{
- /* 0x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* 1x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* 2x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* 3x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* 4x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* 5x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* 6x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* 7x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* 8x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* 9x */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* Ax */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* Bx */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* Cx */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { NOGROUP, CPU_PRESCOTT, ITYPE_SYSTEM, "monitor", NOARGS, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { NOGROUP, CPU_PRESCOTT, ITYPE_SYSTEM, "mwait", NOARGS, NOCOND, NOCHANGE, SERIALIZE_ALL, IGNORED }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* Dx */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* Ex */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { X86_Group_7, GROUP }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP }, // xF
-
- /* Fx */
- { X86_Group_7, GROUP }, // x0
- { X86_Group_7, GROUP }, // x1
- { X86_Group_7, GROUP }, // x2
- { X86_Group_7, GROUP }, // x3
- { X86_Group_7, GROUP }, // x4
- { X86_Group_7, GROUP }, // x5
- { X86_Group_7, GROUP }, // x6
- { X86_Group_7, GROUP }, // x7
- { NOGROUP, CPU_AMD64, ITYPE_SYSTEM, "swapgs", { OPTYPE_KERNELBASE_MSR | OP_MSR | OP_SRC, 0, 0 }, NOCOND, NOCHANGE, NOACTION, IGNORED }, // x8
- { X86_Group_7, GROUP }, // x9
- { X86_Group_7, GROUP }, // xA
- { X86_Group_7, GROUP }, // xB
- { X86_Group_7, GROUP }, // xC
- { X86_Group_7, GROUP }, // xD
- { X86_Group_7, GROUP }, // xE
- { X86_Group_7, GROUP } // xF
-};
-
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-// Sanity checking tables
-/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////
-
-#define S2 1 // SSE2
-#define S3 2 // SSE3
-BYTE X86_ModRM_1[0x100] =
-{
- // x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
- /* 0x */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- /* 1x */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- /* 2x */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- /* 3x */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 5x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 6x */ 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
- /* 7x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 8x */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Bx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Cx */ 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Dx */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- /* Ex */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Fx */ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1
-};
-BYTE X86_ModRM_2[0x100] =
-{
- // x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
- /* 0x */ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
- /* 1x */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- /* 2x */ 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- /* 3x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 4x */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- /* 5x */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- /* 6x */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- /* 7x */ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
- /* 8x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 9x */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- /* Ax */ 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1,
- /* Bx */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,
- /* Cx */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Dx */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- /* Ex */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- /* Fx */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0
-};
-
-BYTE X86_SSE_2[0x100] =
-{
- /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
- /* 0x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 1x */ 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 2x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0,
- /* 3x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 5x */ 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- /* 6x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
- /* 7x */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
- /* 8x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Bx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Cx */ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Dx */ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Ex */ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Fx */ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-// Indicates if a LOCK prefix is allowed
-// The following are allowed:
-// add, adc, and, btc, btr, bts, cmpxchg, cmpxchg8, dec, inc,
-// neg, not, or, sbb, sub, xor, xadd, xchg
-#define GR 2
-BYTE X86_LockPrefix_1[0x100] =
-{
- // x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
- /* 0x */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- /* 1x */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- /* 2x */ 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- /* 3x */ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 5x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 6x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 7x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 8x */ GR, GR, GR, GR, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Bx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Cx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Dx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Ex */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Fx */ 0, 0, 0, 0, 0, 0, GR, GR, 0, 0, 0, 0, 0, 0, GR, GR
-};
-
-BYTE X86_LockPrefix_2[0x100] =
-{
- // x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
- /* 0x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 1x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 2x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 3x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 5x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 6x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 7x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 8x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- /* Bx */ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, GR, 1, 0, 0, 0, 0,
- /* Cx */ 1, 1, 0, 0, 0, 0, 0, GR, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Dx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Ex */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* Fx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-BYTE X86_LockPrefix_Groups[17][8] =
-{
-// x0 x1 x2 x3 x4 x5 x6 x7
- { 1, 1, 1, 1, 1, 1, 1, 0 }, // group 1
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 2
- { 0, 0, 1, 1, 0, 0, 0, 0 }, // group 3
- { 1, 1, 0, 0, 0, 0, 0, 0 }, // group 4
- { 1, 1, 0, 0, 0, 0, 0, 0 }, // group 5
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 6
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 7
- { 0, 0, 0, 0, 1, 1, 1, 1 }, // group 8
- { 0, 1, 0, 0, 0, 0, 0, 0 }, // group 9
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 10
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 11
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 12
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 13
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 14
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 15
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 16
- { 0, 0, 0, 0, 0, 0, 0, 0 }, // group 17
-};
-
-#define X86_MAX_GROUP 19
-BYTE X86_Groups_1[0x100] = // one-byte opcodes
-{
- /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
- /* 0x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */
- /* 1x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */
- /* 2x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
- /* 3x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */
- /* 5x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */
- /* 6x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */
- /* 7x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */
- /* 8x */ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, /* 8x */
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 9x */
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ax */
- /* Bx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */
- /* Cx */ 2, 2, 0, 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, /* Cx */
- /* Dx */ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Dx */
- /* Ex */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ex */
- /* Fx */ 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 4, 5 /* Fx */
-};
-
-// 19 = Group P
-// 20 = 3DNow
-BYTE X86_Groups_2[0x100] = // two-byte opcodes
-{
- /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
- /* 0x */ 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, /* 0x */
- /* 1x */ 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, /* 1x */
- /* 2x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
- /* 3x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */
- /* 5x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */
- /* 6x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */
- /* 7x */ 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */
- /* 8x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 8x */
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 9x */
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, /* Ax */
- /* Bx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 8, 0, 0, 0, 0, 0, /* Bx */
- /* Cx */ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, /* Cx */
- /* Dx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Dx */
- /* Ex */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ex */
- /* Fx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* Fx */
-};
-
-// Indicate which 1-byte opcodes are invalid with a 16-bit operand size
-BYTE X86_Invalid_Op16_1[0x100] =
-{
- /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
- /* 0x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */
- /* 1x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */
- /* 2x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
- /* 3x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */
- /* 5x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */
- /* 6x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */
- /* 7x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */
- /* 8x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 8x */
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 9x */
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ax */
- /* Bx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */
- /* Cx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Cx */
- /* Dx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Dx */
- /* Ex */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ex */
- /* Fx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* Fx */
-};
-
-// Indicate which 2-byte opcodes are invalid with a 16-bit operand size
-BYTE X86_Invalid_Op16_2[0x100] =
-{
- /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
- /* 0x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */
- /* 1x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */
- /* 2x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
- /* 3x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */
- /* 5x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */
- /* 6x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */
- /* 7x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */
- /* 8x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 8x */
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 9x */
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ax */
- /* Bx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */
- /* Cx */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, /* Cx */
- /* Dx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Dx */
- /* Ex */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ex */
- /* Fx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* Fx */
-};
-
-// Indicate which 1-byte opcodes are invalid with a 64-bit address size
-BYTE X86_Invalid_Addr64_1[0x100] =
-{
- /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
- /* 0x */ 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, /* 0x */
- /* 1x */ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 1x */
- /* 2x */ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, /* 2x */
- /* 3x */ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, /* 3x */
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */
- /* 5x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */
- /* 6x */ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */
- /* 7x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */
- /* 8x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 8x */
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* 9x */
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ax */
- /* Bx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */
- /* Cx */ 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* Cx */
- /* Dx */ 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Dx */
- /* Ex */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* Ex */
- /* Fx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* Fx */
-};
-
-// Indicate which 2-byte opcodes are invalid with a 64-bit address size
-BYTE X86_Invalid_Addr64_2[0x100] =
-{
- /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
- /* 0x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */
- /* 1x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */
- /* 2x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
- /* 3x */ 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */
- /* 4x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */
- /* 5x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */
- /* 6x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */
- /* 7x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */
- /* 8x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 8x */
- /* 9x */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 9x */
- /* Ax */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ax */
- /* Bx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */
- /* Cx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Cx */
- /* Dx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Dx */
- /* Ex */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Ex */
- /* Fx */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* Fx */
-};
-
-#endif // DISASM_X86_TABLES \ No newline at end of file
diff --git a/src/thirdparty/mhook/disasm-lib/misc.c b/src/thirdparty/mhook/disasm-lib/misc.c
deleted file mode 100644
index c5b0ac61a..000000000
--- a/src/thirdparty/mhook/disasm-lib/misc.c
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright (C) 2002, Matt Conover (mconover@gmail.com)
-#include "misc.h"
-
-BOOL IsHexChar(BYTE ch)
-{
- switch (ch)
- {
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- case '8': case '9':
- case 'A': case 'a': case 'B': case 'b':
- case 'C': case 'c': case 'D': case 'd':
- case 'E': case 'e': case 'F': case 'f':
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-// NOTE: caller must free the buffer returned
-BYTE *HexToBinary(char *Input, DWORD InputLength, DWORD *OutputLength)
-{
- DWORD i, j, ByteCount = 0;
- char temp_byte[3];
- BYTE *p, *ByteString = NULL;
-
- if (!InputLength || !OutputLength) return NULL;
- else *OutputLength = 0;
-
- while (*Input && isspace(*Input)) { Input++; InputLength--; }
- if (!*Input) return NULL;
- if (Input[0] == '\"') { Input++; InputLength--; }
- p = (BYTE *)strchr(Input, '\"');
- if (p) InputLength--;
-
- if (InputLength > 2 && Input[2] == ' ') // assume spaces
- {
- for (i = 0; i < InputLength; i += 3)
- {
- while (i < InputLength && isspace(Input[i])) i++; // skip over extra space, \r, and \n
- if (i >= InputLength) break;
-
- if (!IsHexChar(Input[i]))
- {
- //fprintf(stderr, "ERROR: invalid hex character at offset %lu (0x%04x)\n", i, i);
- goto abort;
- }
-
- if (i+1 >= InputLength || !Input[i+1])
- {
- //fprintf(stderr, "ERROR: hex string terminates unexpectedly at offset %lu (0x%04x)\n", i+1, i+1);
- goto abort;
- }
-
- if (i+2 < InputLength && Input[i+2] && !isspace(Input[i+2]))
- {
- //fprintf(stderr, "ERROR: Hex string is malformed at offset %lu (0x%04x)\n", i, i);
- //fprintf(stderr, "Found '%c' (0x%02x) instead of space\n", Input[i+2], Input[i+2]);
- goto abort;
- }
-
- ByteCount++;
- }
-
- if (!ByteCount)
- {
- //fprintf(stderr, "Error: no input (byte count = 0)\n");
- goto abort;
- }
-
- ByteString = malloc(ByteCount+1);
- if (!ByteString)
- {
- //fprintf(stderr, "ERROR: failed to allocate %lu bytes\n", ByteCount);
- goto abort;
- }
-
- memset(ByteString, 0, ByteCount+1);
- for (i = 0, j = 0; j < ByteCount; i += 3, j++)
- {
- while (isspace(Input[i])) i++; // skip over extra space, \r, and \n
- temp_byte[0] = Input[i];
- temp_byte[1] = Input[i+1];
- temp_byte[2] = 0;
- ByteString[j] = (BYTE)strtoul(temp_byte, NULL, 16);
- }
- }
- else if (InputLength > 2 && Input[0] == '\\')
- {
- for (i = 0; i < InputLength; i += 2)
- {
- if (Input[i] != '\\' || (Input[i+1] != 'x' && Input[i+1] != '0'))
- {
- //fprintf(stderr, "ERROR: invalid hex character at offset %lu (0x%04x)\n", i, i);
- goto abort;
- }
- i += 2;
-
- if (!IsHexChar(Input[i]))
- {
- //fprintf(stderr, "ERROR: invalid hex character at offset %lu (0x%04x)\n", i, i);
- goto abort;
- }
- if (i+1 >= InputLength || !Input[i+1])
- {
- //fprintf(stderr, "ERROR: hex string terminates unexpectedly at offset %lu (0x%04x)\n", i+1, i+1);
- goto abort;
- }
-
- ByteCount++;
- }
-
- if (!ByteCount)
- {
- //fprintf(stderr, "Error: no input (byte count = 0)\n");
- goto abort;
- }
-
- ByteString = malloc(ByteCount+1);
- if (!ByteString)
- {
- //fprintf(stderr, "ERROR: failed to allocate %lu bytes\n", ByteCount);
- goto abort;
- }
-
- memset(ByteString, 0, ByteCount+1);
- for (i = j = 0; j < ByteCount; i += 2, j++)
- {
- i += 2;
- temp_byte[0] = Input[i];
- temp_byte[1] = Input[i+1];
- temp_byte[2] = 0;
- ByteString[j] = (BYTE)strtoul(temp_byte, NULL, 16);
- }
- }
- else // assume it is a hex string with no spaces with 2 bytes per character
- {
- for (i = 0; i < InputLength; i += 2)
- {
- if (!IsHexChar(Input[i]))
- {
- //fprintf(stderr, "ERROR: invalid hex character at offset %lu (0x%04x)\n", i, i);
- goto abort;
- }
- if (i+1 >= InputLength || !Input[i+1])
- {
- //fprintf(stderr, "ERROR: hex string terminates unexpectedly at offset %lu (0x%04x)\n", i+1, i+1);
- goto abort;
- }
-
- ByteCount++;
- }
-
- if (!ByteCount)
- {
- //fprintf(stderr, "Error: no input (byte count = 0)\n");
- goto abort;
- }
-
- ByteString = malloc(ByteCount+1);
- if (!ByteString)
- {
- //fprintf(stderr, "ERROR: failed to allocate %lu bytes\n", ByteCount);
- goto abort;
- }
-
- memset(ByteString, 0, ByteCount+1);
- for (i = 0, j = 0; j < ByteCount; i += 2, j++)
- {
- temp_byte[0] = Input[i];
- temp_byte[1] = Input[i+1];
- temp_byte[2] = 0;
- ByteString[j] = (BYTE)strtoul(temp_byte, NULL, 16);
- }
- }
-
- *OutputLength = ByteCount;
- return ByteString;
-
-abort:
- if (OutputLength) *OutputLength = 0;
- if (ByteString) free(ByteString);
- return NULL;
-}
-
diff --git a/src/thirdparty/mhook/disasm-lib/misc.h b/src/thirdparty/mhook/disasm-lib/misc.h
deleted file mode 100644
index b3f585b75..000000000
--- a/src/thirdparty/mhook/disasm-lib/misc.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2002, Matt Conover (mconover@gmail.com)
-#ifndef MISC_H
-#define MISC_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <windows.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-
-// NOTE: start is inclusive, end is exclusive (as in start <= x < end)
-#define IS_IN_RANGE(x, s, e) \
-( \
- ((ULONG_PTR)(x) == (ULONG_PTR)(s) && (ULONG_PTR)(x) == (ULONG_PTR)(e)) || \
- ((ULONG_PTR)(x) >= (ULONG_PTR)(s) && (ULONG_PTR)(x) < (ULONG_PTR)(e)) \
-)
-
-#if _MSC_VER >= 1400
-#pragma warning(disable:4996)
-#endif
-
-#if defined(_WIN64)
- #define VALID_ADDRESS_MAX 0x7FFEFFFFFFFFFFFF // Win64 specific
- typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
-#else
- #define VALID_ADDRESS_MAX 0x7FFEFFFF // Win32 specific
- typedef unsigned long ULONG_PTR, *PULONG_PTR;
-#endif
-
-#ifndef DECLSPEC_ALIGN
- #if (_MSC_VER >= 1300) && !defined(MIDL_PASS)
- #define DECLSPEC_ALIGN(x) __declspec(align(x))
- #else
- #define DECLSPEC_ALIGN(x)
- #endif
-#endif
-
-#define VALID_ADDRESS_MIN 0x10000 // Win32 specific
-#define IS_VALID_ADDRESS(a) IS_IN_RANGE(a, VALID_ADDRESS_MIN, VALID_ADDRESS_MAX+1)
-
-BOOL IsHexChar(BYTE ch);
-BYTE *HexToBinary(char *Input, DWORD InputLength, DWORD *OutputLength);
-
-#ifdef __cplusplus
-}
-#endif
-#endif // MISC_H
diff --git a/src/thirdparty/mhook/mhook-lib/mhook.cpp b/src/thirdparty/mhook/mhook-lib/mhook.cpp
deleted file mode 100644
index 2057b1896..000000000
--- a/src/thirdparty/mhook/mhook-lib/mhook.cpp
+++ /dev/null
@@ -1,813 +0,0 @@
-//Copyright (c) 2007-2008, Marton Anka
-//
-//Permission is hereby granted, free of charge, to any person obtaining a
-//copy of this software and associated documentation files (the "Software"),
-//to deal in the Software without restriction, including without limitation
-//the rights to use, copy, modify, merge, publish, distribute, sublicense,
-//and/or sell copies of the Software, and to permit persons to whom the
-//Software is furnished to do so, subject to the following conditions:
-//
-//The above copyright notice and this permission notice shall be included
-//in all copies or substantial portions of the Software.
-//
-//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-//OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-//THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-//FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-//IN THE SOFTWARE.
-
-#include <windows.h>
-#include <tlhelp32.h>
-#include <stdio.h>
-#include "mhook.h"
-#include "../disasm-lib/disasm.h"
-
-//=========================================================================
-#ifndef cntof
-#define cntof(a) (sizeof(a)/sizeof(a[0]))
-#endif
-
-//=========================================================================
-#ifndef GOOD_HANDLE
-#define GOOD_HANDLE(a) ((a!=INVALID_HANDLE_VALUE)&&(a!=NULL))
-#endif
-
-//=========================================================================
-#ifndef gle
-#define gle GetLastError
-#endif
-
-//=========================================================================
-#ifndef ODPRINTF
-
-#ifdef _DEBUG
-#define ODPRINTF(a) odprintf a
-#else
-#define ODPRINTF(a)
-#endif
-
-inline void __cdecl odprintf(PCSTR format, ...) {
- va_list args;
- va_start(args, format);
- int len = _vscprintf(format, args);
- if (len > 0) {
- len += (1 + 2);
- PSTR buf = (PSTR) malloc(len);
- if (buf) {
- len = vsprintf_s(buf, len, format, args);
- if (len > 0) {
- while (len && isspace(buf[len-1])) len--;
- buf[len++] = '\r';
- buf[len++] = '\n';
- buf[len] = 0;
- OutputDebugStringA(buf);
- }
- free(buf);
- }
- va_end(args);
- }
-}
-
-inline void __cdecl odprintf(PCWSTR format, ...) {
- va_list args;
- va_start(args, format);
- int len = _vscwprintf(format, args);
- if (len > 0) {
- len += (1 + 2);
- PWSTR buf = (PWSTR) malloc(sizeof(WCHAR)*len);
- if (buf) {
- len = vswprintf_s(buf, len, format, args);
- if (len > 0) {
- while (len && iswspace(buf[len-1])) len--;
- buf[len++] = L'\r';
- buf[len++] = L'\n';
- buf[len] = 0;
- OutputDebugStringW(buf);
- }
- free(buf);
- }
- va_end(args);
- }
-}
-
-#endif //#ifndef ODPRINTF
-
-//=========================================================================
-#define MHOOKS_MAX_CODE_BYTES 32
-#define MHOOKS_MAX_RIPS 4
-
-//=========================================================================
-// The trampoline structure - stores every bit of info about a hook
-struct MHOOKS_TRAMPOLINE {
- PBYTE pSystemFunction; // the original system function
- DWORD cbOverwrittenCode; // number of bytes overwritten by the jump
- PBYTE pHookFunction; // the hook function that we provide
- BYTE codeJumpToHookFunction[MHOOKS_MAX_CODE_BYTES]; // placeholder for code that jumps to the hook function
- BYTE codeTrampoline[MHOOKS_MAX_CODE_BYTES]; // placeholder for code that holds the first few
- // bytes from the system function and a jump to the remainder
- // in the original location
- BYTE codeUntouched[MHOOKS_MAX_CODE_BYTES]; // placeholder for unmodified original code
- // (we patch IP-relative addressing)
-};
-
-
-//=========================================================================
-// The patch data structures - store info about rip-relative instructions
-// during hook placement
-struct MHOOKS_RIPINFO
-{
- DWORD dwOffset;
- S64 nDisplacement;
-};
-
-struct MHOOKS_PATCHDATA
-{
- S64 nLimitUp;
- S64 nLimitDown;
- DWORD nRipCnt;
- MHOOKS_RIPINFO rips[MHOOKS_MAX_RIPS];
-};
-
-//=========================================================================
-// Global vars
-static BOOL g_bVarsInitialized = FALSE;
-static CRITICAL_SECTION g_cs;
-static MHOOKS_TRAMPOLINE* g_pHooks[MHOOKS_MAX_SUPPORTED_HOOKS];
-static DWORD g_nHooksInUse = 0;
-static HANDLE* g_hThreadHandles = NULL;
-static DWORD g_nThreadHandles = 0;
-#define MHOOK_JMPSIZE 5
-
-//=========================================================================
-// Toolhelp defintions so the functions can be dynamically bound to
-typedef HANDLE (WINAPI * _CreateToolhelp32Snapshot)(
- DWORD dwFlags,
- DWORD th32ProcessID
- );
-
-typedef BOOL (WINAPI * _Thread32First)(
- HANDLE hSnapshot,
- LPTHREADENTRY32 lpte
- );
-
-typedef BOOL (WINAPI * _Thread32Next)(
- HANDLE hSnapshot,
- LPTHREADENTRY32 lpte
- );
-
-//=========================================================================
-// Bring in the toolhelp functions from kernel32
-_CreateToolhelp32Snapshot fnCreateToolhelp32Snapshot = (_CreateToolhelp32Snapshot) GetProcAddress(GetModuleHandle(L"kernel32"), "CreateToolhelp32Snapshot");
-_Thread32First fnThread32First = (_Thread32First) GetProcAddress(GetModuleHandle(L"kernel32"), "Thread32First");
-_Thread32Next fnThread32Next = (_Thread32Next) GetProcAddress(GetModuleHandle(L"kernel32"), "Thread32Next");
-
-//=========================================================================
-static VOID EnterCritSec() {
- if (!g_bVarsInitialized) {
- InitializeCriticalSection(&g_cs);
- ZeroMemory(g_pHooks, sizeof(g_pHooks));
- g_bVarsInitialized = TRUE;
- }
- EnterCriticalSection(&g_cs);
-}
-
-//=========================================================================
-static VOID LeaveCritSec() {
- LeaveCriticalSection(&g_cs);
-}
-
-//=========================================================================
-// Internal function:
-//
-// Skip over jumps that lead to the real function. Gets around import
-// jump tables, etc.
-//=========================================================================
-static PBYTE SkipJumps(PBYTE pbCode) {
-#ifdef _M_IX86_X64
- if (pbCode[0] == 0xff && pbCode[1] == 0x25) {
-#ifdef _M_IX86
- // on x86 we have an absolute pointer...
- PBYTE pbTarget = *(PBYTE *)&pbCode[2];
- // ... that shows us an absolute pointer.
- return SkipJumps(*(PBYTE *)pbTarget);
-#elif defined _M_X64
- // on x64 we have a 32-bit offset...
- INT32 lOffset = *(INT32 *)&pbCode[2];
- // ... that shows us an absolute pointer
- return SkipJumps(*(PBYTE*)(pbCode + 6 + lOffset));
- } else if (pbCode[0] == 0x48 && pbCode[1] == 0xff && pbCode[2] == 0x25) {
- // or we can have the same with a REX prefix
- INT32 lOffset = *(INT32 *)&pbCode[3];
- // ... that shows us an absolute pointer
- return SkipJumps(*(PBYTE*)(pbCode + 7 + lOffset));
-#endif
- } else if (pbCode[0] == 0xe9) {
- // here the behavior is identical, we have...
- // ...a 32-bit offset to the destination.
- return SkipJumps(pbCode + 5 + *(INT32 *)&pbCode[1]);
- } else if (pbCode[0] == 0xeb) {
- // and finally an 8-bit offset to the destination
- return SkipJumps(pbCode + 2 + *(CHAR *)&pbCode[1]);
- }
-#else
-#error unsupported platform
-#endif
- return pbCode;
-}
-
-//=========================================================================
-// Internal function:
-//
-// Writes code at pbCode that jumps to pbJumpTo. Will attempt to do this
-// in as few bytes as possible. Important on x64 where the long jump
-// (0xff 0x25 ....) can take up 14 bytes.
-//=========================================================================
-static PBYTE EmitJump(PBYTE pbCode, PBYTE pbJumpTo) {
-#ifdef _M_IX86_X64
- PBYTE pbJumpFrom = pbCode + 5;
- SIZE_T cbDiff = pbJumpFrom > pbJumpTo ? pbJumpFrom - pbJumpTo : pbJumpTo - pbJumpFrom;
- ODPRINTF((L"mhooks: EmitJump: Jumping from %p to %p, diff is %p", pbJumpFrom, pbJumpTo, cbDiff));
- if (cbDiff <= 0x7fff0000) {
- pbCode[0] = 0xe9;
- pbCode += 1;
- *((PDWORD)pbCode) = (DWORD)(DWORD_PTR)(pbJumpTo - pbJumpFrom);
- pbCode += sizeof(DWORD);
- } else {
- pbCode[0] = 0xff;
- pbCode[1] = 0x25;
- pbCode += 2;
-#ifdef _M_IX86
- // on x86 we write an absolute address (just behind the instruction)
- *((PDWORD)pbCode) = (DWORD)(DWORD_PTR)(pbCode + sizeof(DWORD));
-#elif defined _M_X64
- // on x64 we write the relative address of the same location
- *((PDWORD)pbCode) = (DWORD)0;
-#endif
- pbCode += sizeof(DWORD);
- *((PDWORD_PTR)pbCode) = (DWORD_PTR)(pbJumpTo);
- pbCode += sizeof(DWORD_PTR);
- }
-#else
-#error unsupported platform
-#endif
- return pbCode;
-}
-
-//=========================================================================
-// Internal function:
-//
-// Will try to allocate the trampoline structure within 2 gigabytes of
-// the target function.
-//=========================================================================
-static MHOOKS_TRAMPOLINE* TrampolineAlloc(PBYTE pSystemFunction, S64 nLimitUp, S64 nLimitDown) {
-
- MHOOKS_TRAMPOLINE* pTrampoline = NULL;
-
- // do we have room to store this guy?
- if (g_nHooksInUse < MHOOKS_MAX_SUPPORTED_HOOKS) {
-
- // determine lower and upper bounds for the allocation locations.
- // in the basic scenario this is +/- 2GB but IP-relative instructions
- // found in the original code may require a smaller window.
- PBYTE pLower = pSystemFunction + nLimitUp;
- pLower = pLower < (PBYTE)(DWORD_PTR)0x0000000080000000 ?
- (PBYTE)(0x1) : (PBYTE)(pLower - (PBYTE)0x7fff0000);
- PBYTE pUpper = pSystemFunction + nLimitDown;
- pUpper = pUpper < (PBYTE)(DWORD_PTR)0xffffffff80000000 ?
- (PBYTE)(pUpper + (DWORD_PTR)0x7ff80000) : (PBYTE)(DWORD_PTR)0xfffffffffff80000;
- ODPRINTF((L"mhooks: TrampolineAlloc: Allocating for %p between %p and %p", pSystemFunction, pLower, pUpper));
-
- SYSTEM_INFO sSysInfo = {0};
- ::GetSystemInfo(&sSysInfo);
-
- // go through the available memory blocks and try to allocate a chunk for us
- for (PBYTE pbAlloc = pLower; pbAlloc < pUpper;) {
- // determine current state
- MEMORY_BASIC_INFORMATION mbi;
- ODPRINTF((L"mhooks: TrampolineAlloc: Looking at address %p", pbAlloc));
- if (!VirtualQuery(pbAlloc, &mbi, sizeof(mbi)))
- break;
- // free & large enough?
- if (mbi.State == MEM_FREE && mbi.RegionSize >= sizeof(MHOOKS_TRAMPOLINE) && mbi.RegionSize >= sSysInfo.dwAllocationGranularity) {
- // yes, align the pointer to the 64K boundary first
- pbAlloc = (PBYTE)(ULONG_PTR((ULONG_PTR(pbAlloc) + (sSysInfo.dwAllocationGranularity-1)) / sSysInfo.dwAllocationGranularity) * sSysInfo.dwAllocationGranularity);
- // and then try to allocate it
- pTrampoline = (MHOOKS_TRAMPOLINE*)VirtualAlloc(pbAlloc, sizeof(MHOOKS_TRAMPOLINE), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READ);
- if (pTrampoline) {
- ODPRINTF((L"mhooks: TrampolineAlloc: Allocated block at %p as the trampoline", pTrampoline));
- break;
- }
- }
- // continue the search
- pbAlloc = (PBYTE)mbi.BaseAddress + mbi.RegionSize;
- }
-
- // found and allocated a trampoline?
- if (pTrampoline) {
- // put it into our list so we know we'll have to free it
- for (DWORD i=0; i<MHOOKS_MAX_SUPPORTED_HOOKS; i++) {
- if (g_pHooks[i] == NULL) {
- g_pHooks[i] = pTrampoline;
- g_nHooksInUse++;
- break;
- }
- }
- }
- }
-
- return pTrampoline;
-}
-
-//=========================================================================
-// Internal function:
-//
-// Return the internal trampoline structure that belongs to a hooked function.
-//=========================================================================
-static MHOOKS_TRAMPOLINE* TrampolineGet(PBYTE pHookedFunction) {
- for (DWORD i=0; i<MHOOKS_MAX_SUPPORTED_HOOKS; i++) {
- if (g_pHooks[i]) {
- if (g_pHooks[i]->codeTrampoline == pHookedFunction)
- return g_pHooks[i];
- }
- }
- return NULL;
-}
-
-//=========================================================================
-// Internal function:
-//
-// Free a trampoline structure.
-//=========================================================================
-static VOID TrampolineFree(MHOOKS_TRAMPOLINE* pTrampoline, BOOL bNeverUsed) {
- for (DWORD i=0; i<MHOOKS_MAX_SUPPORTED_HOOKS; i++) {
- if (g_pHooks[i] == pTrampoline) {
- g_pHooks[i] = NULL;
- // It might be OK to call VirtualFree, but quite possibly it isn't:
- // If a thread has some of our trampoline code on its stack
- // and we yank the region from underneath it then it will
- // surely crash upon returning. So instead of freeing the
- // memory we just let it leak. Ugly, but safe.
- if (bNeverUsed)
- VirtualFree(pTrampoline, 0, MEM_RELEASE);
- g_nHooksInUse--;
- break;
- }
- }
-}
-
-//=========================================================================
-// Internal function:
-//
-// Suspend a given thread and try to make sure that its instruction
-// pointer is not in the given range.
-//=========================================================================
-static HANDLE SuspendOneThread(DWORD dwThreadId, PBYTE pbCode, DWORD cbBytes) {
- // open the thread
- HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, dwThreadId);
- if (GOOD_HANDLE(hThread)) {
- // attempt suspension
- DWORD dwSuspendCount = SuspendThread(hThread);
- if (dwSuspendCount != -1) {
- // see where the IP is
- CONTEXT ctx;
- ctx.ContextFlags = CONTEXT_CONTROL;
- int nTries = 0;
- while (GetThreadContext(hThread, &ctx)) {
-#ifdef _M_IX86
- PBYTE pIp = (PBYTE)(DWORD_PTR)ctx.Eip;
-#elif defined _M_X64
- PBYTE pIp = (PBYTE)(DWORD_PTR)ctx.Rip;
-#endif
- if (pIp >= pbCode && pIp < (pbCode + cbBytes)) {
- if (nTries < 3) {
- // oops - we should try to get the instruction pointer out of here.
- ODPRINTF((L"mhooks: SuspendOneThread: suspended thread %d - IP is at %p - IS COLLIDING WITH CODE", dwThreadId, pIp));
- ResumeThread(hThread);
- Sleep(100);
- SuspendThread(hThread);
- nTries++;
- } else {
- // we gave it all we could. (this will probably never
- // happen - unless the thread has already been suspended
- // to begin with)
- ODPRINTF((L"mhooks: SuspendOneThread: suspended thread %d - IP is at %p - IS COLLIDING WITH CODE - CAN'T FIX", dwThreadId, pIp));
- ResumeThread(hThread);
- CloseHandle(hThread);
- hThread = NULL;
- break;
- }
- } else {
- // success, the IP is not conflicting
- ODPRINTF((L"mhooks: SuspendOneThread: Successfully suspended thread %d - IP is at %p", dwThreadId, pIp));
- break;
- }
- }
- } else {
- // couldn't suspend
- CloseHandle(hThread);
- hThread = NULL;
- }
- }
- return hThread;
-}
-
-//=========================================================================
-// Internal function:
-//
-// Resumes all previously suspended threads in the current process.
-//=========================================================================
-static VOID ResumeOtherThreads() {
- // make sure things go as fast as possible
- INT nOriginalPriority = GetThreadPriority(GetCurrentThread());
- SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
- // go through our list
- for (DWORD i=0; i<g_nThreadHandles; i++) {
- // and resume & close thread handles
- ResumeThread(g_hThreadHandles[i]);
- CloseHandle(g_hThreadHandles[i]);
- }
- // clean up
- free(g_hThreadHandles);
- g_hThreadHandles = NULL;
- g_nThreadHandles = 0;
- SetThreadPriority(GetCurrentThread(), nOriginalPriority);
-}
-
-//=========================================================================
-// Internal function:
-//
-// Suspend all threads in this process while trying to make sure that their
-// instruction pointer is not in the given range.
-//=========================================================================
-static BOOL SuspendOtherThreads(PBYTE pbCode, DWORD cbBytes) {
- BOOL bRet = FALSE;
- // make sure we're the most important thread in the process
- INT nOriginalPriority = GetThreadPriority(GetCurrentThread());
- SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
- // get a view of the threads in the system
- HANDLE hSnap = fnCreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, GetCurrentProcessId());
- if (GOOD_HANDLE(hSnap)) {
- THREADENTRY32 te;
- te.dwSize = sizeof(te);
- // count threads in this process (except for ourselves)
- DWORD nThreadsInProcess = 0;
- if (fnThread32First(hSnap, &te)) {
- do {
- if (te.th32OwnerProcessID == GetCurrentProcessId()) {
- if (te.th32ThreadID != GetCurrentThreadId()) {
- nThreadsInProcess++;
- }
- }
- te.dwSize = sizeof(te);
- } while(fnThread32Next(hSnap, &te));
- }
- ODPRINTF((L"mhooks: SuspendOtherThreads: counted %d other threads", nThreadsInProcess));
- if (nThreadsInProcess) {
- // alloc buffer for the handles we really suspended
- g_hThreadHandles = (HANDLE*)malloc(nThreadsInProcess*sizeof(HANDLE));
- if (g_hThreadHandles) {
- ZeroMemory(g_hThreadHandles, nThreadsInProcess*sizeof(HANDLE));
- DWORD nCurrentThread = 0;
- BOOL bFailed = FALSE;
- te.dwSize = sizeof(te);
- // go through every thread
- if (fnThread32First(hSnap, &te)) {
- do {
- if (te.th32OwnerProcessID == GetCurrentProcessId()) {
- if (te.th32ThreadID != GetCurrentThreadId()) {
- // attempt to suspend it
- g_hThreadHandles[nCurrentThread] = SuspendOneThread(te.th32ThreadID, pbCode, cbBytes);
- if (GOOD_HANDLE(g_hThreadHandles[nCurrentThread])) {
- ODPRINTF((L"mhooks: SuspendOtherThreads: successfully suspended %d", te.th32ThreadID));
- nCurrentThread++;
- } else {
- ODPRINTF((L"mhooks: SuspendOtherThreads: error while suspending thread %d: %d", te.th32ThreadID, gle()));
- // TODO: this might not be the wisest choice
- // but we can choose to ignore failures on
- // thread suspension. It's pretty unlikely that
- // we'll fail - and even if we do, the chances
- // of a thread's IP being in the wrong place
- // is pretty small.
- // bFailed = TRUE;
- }
- }
- }
- te.dwSize = sizeof(te);
- } while(fnThread32Next(hSnap, &te) && !bFailed);
- }
- g_nThreadHandles = nCurrentThread;
- bRet = !bFailed;
- }
- }
- CloseHandle(hSnap);
- //TODO: we might want to have another pass to make sure all threads
- // in the current process (including those that might have been
- // created since we took the original snapshot) have been
- // suspended.
- } else {
- ODPRINTF((L"mhooks: SuspendOtherThreads: can't CreateToolhelp32Snapshot: %d", gle()));
- }
- SetThreadPriority(GetCurrentThread(), nOriginalPriority);
- if (!bRet) {
- ODPRINTF((L"mhooks: SuspendOtherThreads: Had a problem (or not running multithreaded), resuming all threads."));
- ResumeOtherThreads();
- }
- return bRet;
-}
-
-//=========================================================================
-// if IP-relative addressing has been detected, fix up the code so the
-// offset points to the original location
-static void FixupIPRelativeAddressing(PBYTE pbNew, PBYTE pbOriginal, MHOOKS_PATCHDATA* pdata)
-{
-#if defined _M_X64
- S64 diff = pbNew - pbOriginal;
- for (DWORD i = 0; i < pdata->nRipCnt; i++) {
- DWORD dwNewDisplacement = (DWORD)(pdata->rips[i].nDisplacement - diff);
- ODPRINTF((L"mhooks: fixing up RIP instruction operand for code at 0x%p: "
- L"old displacement: 0x%8.8x, new displacement: 0x%8.8x",
- pbNew + pdata->rips[i].dwOffset,
- (DWORD)pdata->rips[i].nDisplacement,
- dwNewDisplacement));
- *(PDWORD)(pbNew + pdata->rips[i].dwOffset) = dwNewDisplacement;
- }
-#endif
-}
-
-//=========================================================================
-// Examine the machine code at the target function's entry point, and
-// skip bytes in a way that we'll always end on an instruction boundary.
-// We also detect branches and subroutine calls (as well as returns)
-// at which point disassembly must stop.
-// Finally, detect and collect information on IP-relative instructions
-// that we can patch.
-static DWORD DisassembleAndSkip(PVOID pFunction, DWORD dwMinLen, MHOOKS_PATCHDATA* pdata) {
- DWORD dwRet = 0;
- pdata->nLimitDown = 0;
- pdata->nLimitUp = 0;
- pdata->nRipCnt = 0;
-#ifdef _M_IX86
- ARCHITECTURE_TYPE arch = ARCH_X86;
-#elif defined _M_X64
- ARCHITECTURE_TYPE arch = ARCH_X64;
-#else
- #error unsupported platform
-#endif
- DISASSEMBLER dis;
- if (InitDisassembler(&dis, arch)) {
- INSTRUCTION* pins = NULL;
- U8* pLoc = (U8*)pFunction;
- DWORD dwFlags = DISASM_DECODE | DISASM_DISASSEMBLE | DISASM_ALIGNOUTPUT;
-
- ODPRINTF((L"mhooks: DisassembleAndSkip: Disassembling %p", pLoc));
- while ( (dwRet < dwMinLen) && (pins = GetInstruction(&dis, (ULONG_PTR)pLoc, pLoc, dwFlags)) ) {
- ODPRINTF(("mhooks: DisassembleAndSkip: %p: %s", pLoc, pins->String));
- if (pins->Type == ITYPE_RET ) break;
- if (pins->Type == ITYPE_BRANCH ) break;
- if (pins->Type == ITYPE_BRANCHCC) break;
- if (pins->Type == ITYPE_CALL ) break;
- if (pins->Type == ITYPE_CALLCC ) break;
-
- #if defined _M_X64
- BOOL bProcessRip = FALSE;
- // mov or lea to register from rip+imm32
- if ((pins->Type == ITYPE_MOV || pins->Type == ITYPE_LEA) && (pins->X86.Relative) &&
- (pins->X86.OperandSize == 8) && (pins->OperandCount == 2) &&
- (pins->Operands[1].Flags & OP_IPREL) && (pins->Operands[1].Register == AMD64_REG_RIP))
- {
- // rip-addressing "mov reg, [rip+imm32]"
- ODPRINTF((L"mhooks: DisassembleAndSkip: found OP_IPREL on operand %d with displacement 0x%x (in memory: 0x%x)", 1, pins->X86.Displacement, *(PDWORD)(pLoc+3)));
- bProcessRip = TRUE;
- }
- // mov or lea to rip+imm32 from register
- else if ((pins->Type == ITYPE_MOV || pins->Type == ITYPE_LEA) && (pins->X86.Relative) &&
- (pins->X86.OperandSize == 8) && (pins->OperandCount == 2) &&
- (pins->Operands[0].Flags & OP_IPREL) && (pins->Operands[0].Register == AMD64_REG_RIP))
- {
- // rip-addressing "mov [rip+imm32], reg"
- ODPRINTF((L"mhooks: DisassembleAndSkip: found OP_IPREL on operand %d with displacement 0x%x (in memory: 0x%x)", 0, pins->X86.Displacement, *(PDWORD)(pLoc+3)));
- bProcessRip = TRUE;
- }
- else if ( (pins->OperandCount >= 1) && (pins->Operands[0].Flags & OP_IPREL) )
- {
- // unsupported rip-addressing
- ODPRINTF((L"mhooks: DisassembleAndSkip: found unsupported OP_IPREL on operand %d", 0));
- // dump instruction bytes to the debug output
- for (DWORD i=0; i<pins->Length; i++) {
- ODPRINTF((L"mhooks: DisassembleAndSkip: instr byte %2.2d: 0x%2.2x", i, pLoc[i]));
- }
- break;
- }
- else if ( (pins->OperandCount >= 2) && (pins->Operands[1].Flags & OP_IPREL) )
- {
- // unsupported rip-addressing
- ODPRINTF((L"mhooks: DisassembleAndSkip: found unsupported OP_IPREL on operand %d", 1));
- // dump instruction bytes to the debug output
- for (DWORD i=0; i<pins->Length; i++) {
- ODPRINTF((L"mhooks: DisassembleAndSkip: instr byte %2.2d: 0x%2.2x", i, pLoc[i]));
- }
- break;
- }
- else if ( (pins->OperandCount >= 3) && (pins->Operands[2].Flags & OP_IPREL) )
- {
- // unsupported rip-addressing
- ODPRINTF((L"mhooks: DisassembleAndSkip: found unsupported OP_IPREL on operand %d", 2));
- // dump instruction bytes to the debug output
- for (DWORD i=0; i<pins->Length; i++) {
- ODPRINTF((L"mhooks: DisassembleAndSkip: instr byte %2.2d: 0x%2.2x", i, pLoc[i]));
- }
- break;
- }
- // follow through with RIP-processing if needed
- if (bProcessRip) {
- // calculate displacement relative to function start
- S64 nAdjustedDisplacement = pins->X86.Displacement + (pLoc - (U8*)pFunction);
- // store displacement values furthest from zero (both positive and negative)
- if (nAdjustedDisplacement < pdata->nLimitDown)
- pdata->nLimitDown = nAdjustedDisplacement;
- if (nAdjustedDisplacement > pdata->nLimitUp)
- pdata->nLimitUp = nAdjustedDisplacement;
- // store patch info
- if (pdata->nRipCnt < MHOOKS_MAX_RIPS) {
- pdata->rips[pdata->nRipCnt].dwOffset = dwRet + 3;
- pdata->rips[pdata->nRipCnt].nDisplacement = pins->X86.Displacement;
- pdata->nRipCnt++;
- } else {
- // no room for patch info, stop disassembly
- break;
- }
- }
- #endif
-
- dwRet += pins->Length;
- pLoc += pins->Length;
- }
-
- CloseDisassembler(&dis);
- }
-
- return dwRet;
-}
-
-//=========================================================================
-BOOL Mhook_SetHook(PVOID *ppSystemFunction, PVOID pHookFunction) {
- MHOOKS_TRAMPOLINE* pTrampoline = NULL;
- PVOID pSystemFunction = *ppSystemFunction;
- // ensure thread-safety
- EnterCritSec();
- ODPRINTF((L"mhooks: Mhook_SetHook: Started on the job: %p / %p", pSystemFunction, pHookFunction));
- // find the real functions (jump over jump tables, if any)
- pSystemFunction = SkipJumps((PBYTE)pSystemFunction);
- pHookFunction = SkipJumps((PBYTE)pHookFunction);
- ODPRINTF((L"mhooks: Mhook_SetHook: Started on the job: %p / %p", pSystemFunction, pHookFunction));
- // figure out the length of the overwrite zone
- MHOOKS_PATCHDATA patchdata = {0};
- DWORD dwInstructionLength = DisassembleAndSkip(pSystemFunction, MHOOK_JMPSIZE, &patchdata);
- if (dwInstructionLength >= MHOOK_JMPSIZE) {
- ODPRINTF((L"mhooks: Mhook_SetHook: disassembly signals %d bytes", dwInstructionLength));
- // suspend every other thread in this process, and make sure their IP
- // is not in the code we're about to overwrite.
- // MPC-HC SPEED HACK: when we hook there's only one thread present
- // SuspendOtherThreads((PBYTE)pSystemFunction, dwInstructionLength);
- // allocate a trampoline structure (TODO: it is pretty wasteful to get
- // VirtualAlloc to grab chunks of memory smaller than 100 bytes)
- pTrampoline = TrampolineAlloc((PBYTE)pSystemFunction, patchdata.nLimitUp, patchdata.nLimitDown);
- if (pTrampoline) {
- ODPRINTF((L"mhooks: Mhook_SetHook: allocated structure at %p", pTrampoline));
- // open ourselves so we can VirtualProtectEx
- HANDLE hProc = GetCurrentProcess();
- DWORD dwOldProtectSystemFunction = 0;
- DWORD dwOldProtectTrampolineFunction = 0;
- // set the system function to PAGE_EXECUTE_READWRITE
- if (VirtualProtectEx(hProc, pSystemFunction, dwInstructionLength, PAGE_EXECUTE_READWRITE, &dwOldProtectSystemFunction)) {
- ODPRINTF((L"mhooks: Mhook_SetHook: readwrite set on system function"));
- // mark our trampoline buffer to PAGE_EXECUTE_READWRITE
- if (VirtualProtectEx(hProc, pTrampoline, sizeof(MHOOKS_TRAMPOLINE), PAGE_EXECUTE_READWRITE, &dwOldProtectTrampolineFunction)) {
- ODPRINTF((L"mhooks: Mhook_SetHook: readwrite set on trampoline structure"));
-
- // create our trampoline function
- PBYTE pbCode = pTrampoline->codeTrampoline;
- // save original code..
- for (DWORD i = 0; i<dwInstructionLength; i++) {
- pTrampoline->codeUntouched[i] = pbCode[i] = ((PBYTE)pSystemFunction)[i];
- }
- pbCode += dwInstructionLength;
- // plus a jump to the continuation in the original location
- pbCode = EmitJump(pbCode, ((PBYTE)pSystemFunction) + dwInstructionLength);
- ODPRINTF((L"mhooks: Mhook_SetHook: updated the trampoline"));
-
- // fix up any IP-relative addressing in the code
- FixupIPRelativeAddressing(pTrampoline->codeTrampoline, (PBYTE)pSystemFunction, &patchdata);
-
- DWORD_PTR dwDistance = (PBYTE)pHookFunction < (PBYTE)pSystemFunction ?
- (PBYTE)pSystemFunction - (PBYTE)pHookFunction : (PBYTE)pHookFunction - (PBYTE)pSystemFunction;
- if (dwDistance > 0x7fff0000) {
- // create a stub that jumps to the replacement function.
- // we need this because jumping from the API to the hook directly
- // will be a long jump, which is 14 bytes on x64, and we want to
- // avoid that - the API may or may not have room for such stuff.
- // (remember, we only have 5 bytes guaranteed in the API.)
- // on the other hand we do have room, and the trampoline will always be
- // within +/- 2GB of the API, so we do the long jump in there.
- // the API will jump to the "reverse trampoline" which
- // will jump to the user's hook code.
- pbCode = pTrampoline->codeJumpToHookFunction;
- pbCode = EmitJump(pbCode, (PBYTE)pHookFunction);
- ODPRINTF((L"mhooks: Mhook_SetHook: created reverse trampoline"));
- FlushInstructionCache(hProc, pTrampoline->codeJumpToHookFunction,
- pbCode - pTrampoline->codeJumpToHookFunction);
-
- // update the API itself
- pbCode = (PBYTE)pSystemFunction;
- pbCode = EmitJump(pbCode, pTrampoline->codeJumpToHookFunction);
- } else {
- // the jump will be at most 5 bytes so we can do it directly
- // update the API itself
- pbCode = (PBYTE)pSystemFunction;
- pbCode = EmitJump(pbCode, (PBYTE)pHookFunction);
- }
-
- // update data members
- pTrampoline->cbOverwrittenCode = dwInstructionLength;
- pTrampoline->pSystemFunction = (PBYTE)pSystemFunction;
- pTrampoline->pHookFunction = (PBYTE)pHookFunction;
-
- // flush instruction cache and restore original protection
- FlushInstructionCache(hProc, pTrampoline->codeTrampoline, dwInstructionLength);
- // MPC-HC HACK: otherwise we go into infinite recursion when hooking NtQueryInformationProcess() with EMET active and the hook calls the original function
- *ppSystemFunction = pTrampoline->codeTrampoline;
- VirtualProtectEx(hProc, pTrampoline, sizeof(MHOOKS_TRAMPOLINE), dwOldProtectTrampolineFunction, &dwOldProtectTrampolineFunction);
- } else {
- ODPRINTF((L"mhooks: Mhook_SetHook: failed VirtualProtectEx 2: %d", gle()));
- }
- // flush instruction cache and restore original protection
- FlushInstructionCache(hProc, pSystemFunction, dwInstructionLength);
- VirtualProtectEx(hProc, pSystemFunction, dwInstructionLength, dwOldProtectSystemFunction, &dwOldProtectSystemFunction);
- } else {
- ODPRINTF((L"mhooks: Mhook_SetHook: failed VirtualProtectEx 1: %d", gle()));
- }
- if (pTrampoline->pSystemFunction) {
- // this is what the application will use as the entry point
- // to the "original" unhooked function.
- *ppSystemFunction = pTrampoline->codeTrampoline;
- ODPRINTF((L"mhooks: Mhook_SetHook: Hooked the function!"));
- } else {
- // if we failed discard the trampoline (forcing VirtualFree)
- TrampolineFree(pTrampoline, TRUE);
- pTrampoline = NULL;
- }
- }
- // resume everybody else
- // MPC-HC SPEED HACK: when we hook there's only one thread present
- // ResumeOtherThreads();
- } else {
- ODPRINTF((L"mhooks: disassembly signals %d bytes (unacceptable)", dwInstructionLength));
- }
- LeaveCritSec();
- return (pTrampoline != NULL);
-}
-
-//=========================================================================
-BOOL Mhook_Unhook(PVOID *ppHookedFunction) {
- ODPRINTF((L"mhooks: Mhook_Unhook: %p", *ppHookedFunction));
- BOOL bRet = FALSE;
- EnterCritSec();
- // get the trampoline structure that corresponds to our function
- MHOOKS_TRAMPOLINE* pTrampoline = TrampolineGet((PBYTE)*ppHookedFunction);
- if (pTrampoline) {
- // make sure nobody's executing code where we're about to overwrite a few bytes
- SuspendOtherThreads(pTrampoline->pSystemFunction, pTrampoline->cbOverwrittenCode);
- ODPRINTF((L"mhooks: Mhook_Unhook: found struct at %p", pTrampoline));
- // open ourselves so we can VirtualProtectEx
- HANDLE hProc = GetCurrentProcess();
- DWORD dwOldProtectSystemFunction = 0;
- // make memory writable
- if (VirtualProtectEx(hProc, pTrampoline->pSystemFunction, pTrampoline->cbOverwrittenCode, PAGE_EXECUTE_READWRITE, &dwOldProtectSystemFunction)) {
- ODPRINTF((L"mhooks: Mhook_Unhook: readwrite set on system function"));
- PBYTE pbCode = (PBYTE)pTrampoline->pSystemFunction;
- for (DWORD i = 0; i<pTrampoline->cbOverwrittenCode; i++) {
- pbCode[i] = pTrampoline->codeUntouched[i];
- }
- // flush instruction cache and make memory unwritable
- FlushInstructionCache(hProc, pTrampoline->pSystemFunction, pTrampoline->cbOverwrittenCode);
- VirtualProtectEx(hProc, pTrampoline->pSystemFunction, pTrampoline->cbOverwrittenCode, dwOldProtectSystemFunction, &dwOldProtectSystemFunction);
- // return the original function pointer
- *ppHookedFunction = pTrampoline->pSystemFunction;
- bRet = TRUE;
- ODPRINTF((L"mhooks: Mhook_Unhook: sysfunc: %p", *ppHookedFunction));
- // free the trampoline while not really discarding it from memory
- TrampolineFree(pTrampoline, FALSE);
- ODPRINTF((L"mhooks: Mhook_Unhook: unhook successful"));
- } else {
- ODPRINTF((L"mhooks: Mhook_Unhook: failed VirtualProtectEx 1: %d", gle()));
- }
- // make the other guys runnable
- ResumeOtherThreads();
- }
- LeaveCritSec();
- return bRet;
-}
-
-//=========================================================================
diff --git a/src/thirdparty/mhook/mhook-lib/mhook.h b/src/thirdparty/mhook/mhook-lib/mhook.h
deleted file mode 100644
index 1c6c64a14..000000000
--- a/src/thirdparty/mhook/mhook-lib/mhook.h
+++ /dev/null
@@ -1,31 +0,0 @@
-//Copyright (c) 2007-2008, Marton Anka
-//
-//Permission is hereby granted, free of charge, to any person obtaining a
-//copy of this software and associated documentation files (the "Software"),
-//to deal in the Software without restriction, including without limitation
-//the rights to use, copy, modify, merge, publish, distribute, sublicense,
-//and/or sell copies of the Software, and to permit persons to whom the
-//Software is furnished to do so, subject to the following conditions:
-//
-//The above copyright notice and this permission notice shall be included
-//in all copies or substantial portions of the Software.
-//
-//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-//OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-//THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-//FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-//IN THE SOFTWARE.
-
-#ifdef _M_IX86
-#define _M_IX86_X64
-#elif defined _M_X64
-#define _M_IX86_X64
-#endif
-
-BOOL Mhook_SetHook(PVOID *ppSystemFunction, PVOID pHookFunction);
-BOOL Mhook_Unhook(PVOID *ppHookedFunction);
-
-#define MHOOKS_MAX_SUPPORTED_HOOKS 64
-
diff --git a/src/thirdparty/mhook/mhook.vcxproj b/src/thirdparty/mhook/mhook.vcxproj
deleted file mode 100644
index b95c41602..000000000
--- a/src/thirdparty/mhook/mhook.vcxproj
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{F841363C-A630-4716-8941-CDDC1F32CFC3}</ProjectGuid>
- <RootNamespace>mhook</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup />
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClInclude Include="disasm-lib\cpu.h" />
- <ClInclude Include="disasm-lib\disasm.h" />
- <ClInclude Include="disasm-lib\disasm_x86.h" />
- <ClInclude Include="disasm-lib\disasm_x86_tables.h" />
- <ClInclude Include="disasm-lib\misc.h" />
- <ClInclude Include="mhook-lib\mhook.h" />
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="disasm-lib\cpu.c" />
- <ClCompile Include="disasm-lib\disasm.c" />
- <ClCompile Include="disasm-lib\disasm_x86.c" />
- <ClCompile Include="disasm-lib\misc.c" />
- <ClCompile Include="mhook-lib\mhook.cpp" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/src/thirdparty/mhook/mhook.vcxproj.filters b/src/thirdparty/mhook/mhook.vcxproj.filters
deleted file mode 100644
index 78c944675..000000000
--- a/src/thirdparty/mhook/mhook.vcxproj.filters
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="disasm-lib\cpu.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="disasm-lib\disasm.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="disasm-lib\disasm_x86.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="disasm-lib\disasm_x86_tables.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="disasm-lib\misc.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="mhook-lib\mhook.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="mhook-lib\mhook.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="disasm-lib\cpu.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="disasm-lib\disasm.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="disasm-lib\disasm_x86.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="disasm-lib\misc.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/src/thirdparty/minhook/minhook b/src/thirdparty/minhook/minhook
new file mode 160000
+Subproject 9fbd087432700d73fc571118d6a9697a36443d8
diff --git a/src/thirdparty/minhook/minhook.vcxproj b/src/thirdparty/minhook/minhook.vcxproj
new file mode 100644
index 000000000..11ba7e38d
--- /dev/null
+++ b/src/thirdparty/minhook/minhook.vcxproj
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{303B855A-137D-45E9-AF6D-B7241C6E66D6}</ProjectGuid>
+ <RootNamespace>minhook</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="minhook\src\buffer.c" />
+ <ClCompile Include="minhook\src\HDE\hde32.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="minhook\src\HDE\hde64.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="minhook\src\hook.c" />
+ <ClCompile Include="minhook\src\trampoline.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="minhook\include\MinHook.h" />
+ <ClInclude Include="minhook\src\buffer.h" />
+ <ClInclude Include="minhook\src\HDE\hde32.h" />
+ <ClInclude Include="minhook\src\HDE\hde64.h" />
+ <ClInclude Include="minhook\src\HDE\pstdint.h" />
+ <ClInclude Include="minhook\src\HDE\table32.h" />
+ <ClInclude Include="minhook\src\HDE\table64.h" />
+ <ClInclude Include="minhook\src\trampoline.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/minhook/minhook.vcxproj.filters b/src/thirdparty/minhook/minhook.vcxproj.filters
new file mode 100644
index 000000000..0ddcffb9b
--- /dev/null
+++ b/src/thirdparty/minhook/minhook.vcxproj.filters
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="minhook\src\buffer.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="minhook\src\hook.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="minhook\src\trampoline.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="minhook\src\HDE\hde32.c">
+ <Filter>HDE</Filter>
+ </ClCompile>
+ <ClCompile Include="minhook\src\HDE\hde64.c">
+ <Filter>HDE</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="minhook\src\trampoline.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="minhook\src\buffer.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="minhook\include\MinHook.h" />
+ <ClInclude Include="minhook\src\HDE\hde32.h">
+ <Filter>HDE</Filter>
+ </ClInclude>
+ <ClInclude Include="minhook\src\HDE\hde64.h">
+ <Filter>HDE</Filter>
+ </ClInclude>
+ <ClInclude Include="minhook\src\HDE\pstdint.h">
+ <Filter>HDE</Filter>
+ </ClInclude>
+ <ClInclude Include="minhook\src\HDE\table32.h">
+ <Filter>HDE</Filter>
+ </ClInclude>
+ <ClInclude Include="minhook\src\HDE\table64.h">
+ <Filter>HDE</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="HDE">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/nanosvg b/src/thirdparty/nanosvg
new file mode 160000
+Subproject dc12d90586a8ab99da0c575aafff999666aa5d5
diff --git a/src/thirdparty/rapidjson b/src/thirdparty/rapidjson
new file mode 160000
+Subproject 3d5848a7cd3367c5cb451c6493165b774594830
diff --git a/src/thirdparty/sanear/sanear b/src/thirdparty/sanear/sanear
new file mode 160000
+Subproject 27f58cdf431a4dbd905c4cb22391a2f800ce8a4
diff --git a/src/thirdparty/sanear/sanear-platform.props b/src/thirdparty/sanear/sanear-platform.props
new file mode 100644
index 000000000..5f87a8a5d
--- /dev/null
+++ b/src/thirdparty/sanear/sanear-platform.props
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(SolutionDir)src\platform.props" />
+</Project>
diff --git a/src/thirdparty/sanear/sanear.props b/src/thirdparty/sanear/sanear.props
new file mode 100644
index 000000000..b9e6ec90b
--- /dev/null
+++ b/src/thirdparty/sanear/sanear.props
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(SolutionDir)src\common.props" />
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(SolutionDir)src\thirdparty\BaseClasses;$(SolutionDir)src\thirdparty\soxr\libsoxr\src;$(SolutionDir)src\thirdparty\bs2b\libbs2b\src;$(SolutionDir)src\thirdparty\SoundTouch\soundtouch\include;$(SolutionDir)src\thirdparty\zita-resampler\zita-resampler\libs;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ </ItemDefinitionGroup>
+</Project>
diff --git a/src/thirdparty/sizecbar/scbarg.cpp b/src/thirdparty/sizecbar/scbarg.cpp
index 3cec57a02..4e2677378 100644
--- a/src/thirdparty/sizecbar/scbarg.cpp
+++ b/src/thirdparty/sizecbar/scbarg.cpp
@@ -78,6 +78,12 @@ void CSizingControlBarG::NcCalcClient(LPRECT pRc, UINT nDockBarID)
return;
CRect rc(pRc); // the client rect as calculated by the base class
+ //mpc-hc custom code start
+ // Work in screen coordinates before converting back to
+ // client coordinates to account for possible RTL layout
+ GetParent()->ClientToScreen(rcBar);
+ GetParent()->ClientToScreen(rc);
+ //mpc-hc custom code end
BOOL bHorz = (nDockBarID == AFX_IDW_DOCKBAR_TOP) ||
(nDockBarID == AFX_IDW_DOCKBAR_BOTTOM);
@@ -96,6 +102,12 @@ void CSizingControlBarG::NcCalcClient(LPRECT pRc, UINT nDockBarID)
m_biHide.Move(ptOrgBtn - rcBar.TopLeft());
+ //mpc-hc custom code start
+ // Work in screen coordinates before converting back to
+ // client coordinates to account for possible RTL layout
+ GetParent()->ScreenToClient(&rc);
+ //mpc-hc custom code end
+
*pRc = rc;
}
@@ -144,6 +156,12 @@ LRESULT CSizingControlBarG::OnNcHitTest(CPoint point)
if (nRet != HTCLIENT)
return nRet;
+ //mpc-hc custom code start
+ // Convert to client coordinates to account for possible RTL layout
+ ScreenToClient(&rcBar);
+ ScreenToClient(&point);
+ //mpc-hc custom code end
+
CRect rc = m_biHide.GetRect();
rc.OffsetRect(rcBar.TopLeft());
if (rc.PtInRect(point))
@@ -214,7 +232,11 @@ void CSCBButton::Paint(CDC* pDC)
font.CreatePointFont(pointsize, _T("Marlett"));
CFont* oldfont = pDC->SelectObject(&font);
- pDC->TextOut(ptOrg.x + 2, ptOrg.y + 2, CString(_T("r"))); // x-like
+ //mpc-hc custom code start
+ // TextOut is affected by the layout so we need to account for that
+ DWORD dwLayout = pDC->GetLayout();
+ pDC->TextOut(ptOrg.x + (dwLayout == LAYOUT_LTR ? 2 : -1), ptOrg.y + 2, CString(_T("r"))); // x-like
+ //mpc-hc custom code end
pDC->SelectObject(oldfont);
pDC->SetBkMode(nPrevBkMode);
diff --git a/src/thirdparty/sizecbar/sizecbar.cpp b/src/thirdparty/sizecbar/sizecbar.cpp
index e6d794b20..e6904e290 100644
--- a/src/thirdparty/sizecbar/sizecbar.cpp
+++ b/src/thirdparty/sizecbar/sizecbar.cpp
@@ -411,7 +411,12 @@ void CSizingControlBar::OnMouseMove(UINT nFlags, CPoint point)
CPoint ptScreen = point;
ClientToScreen(&ptScreen);
- OnTrackUpdateSize(ptScreen);
+ //mpc-hc custom code start
+ // Switch to parent window client coordinates to account for possible RTL layout
+ CPoint ptParentClient = ptScreen;
+ GetParentFrame()->ScreenToClient(&ptParentClient);
+ OnTrackUpdateSize(ptParentClient);
+ //mpc-hc custom code end
}
baseCSizingControlBar::OnMouseMove(nFlags, point);
@@ -474,6 +479,11 @@ void CSizingControlBar::OnNcCalcSize(BOOL bCalcValidRects,
void CSizingControlBar::NcCalcClient(LPRECT pRc, UINT nDockBarID)
{
CRect rc(pRc);
+ //mpc-hc custom code start
+ // Work in screen coordinates before converting back to
+ // client coordinates to account for possible RTL layout
+ GetParent()->ClientToScreen(&rc);
+ //mpc-hc custom code end
rc.DeflateRect(3, 5, 3, 3);
if (nDockBarID != AFX_IDW_DOCKBAR_FLOAT)
@@ -503,6 +513,12 @@ void CSizingControlBar::NcCalcClient(LPRECT pRc, UINT nDockBarID)
(m_dwSCBStyle & SCBS_EDGERIGHT) ? m_cxEdge : 0,
(m_dwSCBStyle & SCBS_EDGEBOTTOM) ? m_cxEdge : 0);
+ //mpc-hc custom code start
+ // Work in screen coordinates before converting back to
+ // client coordinates to account for possible RTL layout
+ GetParent()->ScreenToClient(&rc);
+ //mpc-hc custom code end
+
*pRc = rc;
}
@@ -513,8 +529,14 @@ void CSizingControlBar::OnNcPaint()
CRect rcClient, rcBar;
GetClientRect(rcClient);
- ClientToScreen(rcClient);
+ //mpc-hc custom code start
+ //ClientToScreen(rcClient);
+ //mpc-hc custom code end
GetWindowRect(rcBar);
+ //mpc-hc custom code start
+ // Convert to client coordinates to account for possible RTL layout
+ ScreenToClient(rcBar);
+ //mpc-hc custom code end
rcClient.OffsetRect(-rcBar.TopLeft());
rcBar.OffsetRect(-rcBar.TopLeft());
@@ -574,6 +596,12 @@ LRESULT CSizingControlBar::OnNcHitTest(CPoint point)
CRect rcBar, rcEdge;
GetWindowRect(rcBar);
+ //mpc-hc custom code start
+ // Convert to client coordinates to account for possible RTL layout
+ ScreenToClient(&rcBar);
+ ScreenToClient(&point);
+ //mpc-hc custom code end
+
if (!IsFloating())
for (int i = 0; i < 4; i++)
if (GetEdgeRect(rcBar, GetEdgeHTCode(i), rcEdge))
@@ -619,6 +647,11 @@ void CSizingControlBar::OnClose()
void CSizingControlBar::StartTracking(UINT nHitTest, CPoint point)
{
+ //mpc-hc custom code start
+ // Convert to client coordinates to account for possible RTL layout
+ GetParentFrame()->ScreenToClient(&point);
+ //mpc-hc custom code end
+
SetCapture();
// make sure no updates are pending
@@ -635,6 +668,10 @@ void CSizingControlBar::StartTracking(UINT nHitTest, CPoint point)
CRect rcBar, rcEdge;
GetWindowRect(rcBar);
+ //mpc-hc custom code start
+ // Convert to client coordinates to account for possible RTL layout
+ GetParent()->ScreenToClient(&rcBar);
+ //mpc-hc custom code end
GetEdgeRect(rcBar, m_htEdge, rcEdge);
m_nTrackEdgeOfs = m_nTrackPosOld -
(bHorzTracking ? rcEdge.CenterPoint().x : rcEdge.CenterPoint().y);
diff --git a/src/thirdparty/sizecbar/sizecbar.vcxproj b/src/thirdparty/sizecbar/sizecbar.vcxproj
index 69e4f2b30..ead70eb5d 100644
--- a/src/thirdparty/sizecbar/sizecbar.vcxproj
+++ b/src/thirdparty/sizecbar/sizecbar.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,22 +26,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>Static</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup>
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
@@ -49,49 +34,17 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros">
<NOMINMAX>False</NOMINMAX>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/src/thirdparty/sizecbar/sizecbar.vcxproj.filters b/src/thirdparty/sizecbar/sizecbar.vcxproj.filters
index e7a19866f..23fc896d1 100644
--- a/src/thirdparty/sizecbar/sizecbar.vcxproj.filters
+++ b/src/thirdparty/sizecbar/sizecbar.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{8d9a4844-0f68-4c0d-a6f5-a20f411affaa}</UniqueIdentifier>
diff --git a/src/thirdparty/soxr/libsoxr b/src/thirdparty/soxr/libsoxr
new file mode 160000
+Subproject e064aba6ac16fb8f1fa64bc692e54230cec1b3a
diff --git a/src/thirdparty/soxr/soxr-config.h b/src/thirdparty/soxr/soxr-config.h
new file mode 100644
index 000000000..55dedf78b
--- /dev/null
+++ b/src/thirdparty/soxr/soxr-config.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#define HAVE_SINGLE_PRECISION 1
+#define HAVE_DOUBLE_PRECISION 1
+#define HAVE_SIMD 1
+#define HAVE_FENV_H 1
+#define HAVE_LRINT 1
+
+#define HAVE_AVFFT 0
+#define WORDS_BIGENDIAN 0
+
+#include <inttypes.h>
+#include <stdbool.h>
diff --git a/src/thirdparty/soxr/soxr.vcxproj b/src/thirdparty/soxr/soxr.vcxproj
new file mode 100644
index 000000000..43ce57e58
--- /dev/null
+++ b/src/thirdparty/soxr/soxr.vcxproj
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{7CBDE5A1-9CBB-4139-93F5-09D8DBA4427F}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_USE_MATH_DEFINES;_CRT_SECURE_NO_WARNINGS;SOXR_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="libsoxr\src\data-io.c" />
+ <ClCompile Include="libsoxr\src\dbesi0.c" />
+ <ClCompile Include="libsoxr\src\fft4g32.c" />
+ <ClCompile Include="libsoxr\src\fft4g64.c" />
+ <ClCompile Include="libsoxr\src\filter.c" />
+ <ClCompile Include="libsoxr\src\lsr.c" />
+ <ClCompile Include="libsoxr\src\pffft32s.c" />
+ <ClCompile Include="libsoxr\src\rate32.c" />
+ <ClCompile Include="libsoxr\src\rate32s.c" />
+ <ClCompile Include="libsoxr\src\rate64.c" />
+ <ClCompile Include="libsoxr\src\simd.c" />
+ <ClCompile Include="libsoxr\src\soxr.c" />
+ <ClCompile Include="libsoxr\src\vr32.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="libsoxr\src\soxr.h" />
+ <ClInclude Include="soxr-config.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/soxr/soxr.vcxproj.filters b/src/thirdparty/soxr/soxr.vcxproj.filters
new file mode 100644
index 000000000..b6f1808ab
--- /dev/null
+++ b/src/thirdparty/soxr/soxr.vcxproj.filters
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="libsoxr">
+ <UniqueIdentifier>{e76300b5-2f4a-48a9-b672-aeefb9e98c4d}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="libsoxr\src\data-io.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\dbesi0.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\fft4g32.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\fft4g64.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\filter.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\lsr.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\pffft32s.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\rate32.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\rate32s.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\rate64.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\simd.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\soxr.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ <ClCompile Include="libsoxr\src\vr32.c">
+ <Filter>libsoxr</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="soxr-config.h" />
+ <ClInclude Include="libsoxr\src\soxr.h" />
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/tinyxml2/library b/src/thirdparty/tinyxml2/library
new file mode 160000
+Subproject 74d44acb176f8510abf28ee0a70961eb2663198
diff --git a/src/thirdparty/tinyxml2/tinyxml2.vcxproj b/src/thirdparty/tinyxml2/tinyxml2.vcxproj
new file mode 100644
index 000000000..c70eb2919
--- /dev/null
+++ b/src/thirdparty/tinyxml2/tinyxml2.vcxproj
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="library\tinyxml2.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library\tinyxml2.h" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{E02F0C35-FB01-4059-90F9-9AC19DC22FBA}</ProjectGuid>
+ <ProjectName>tinyxml2</ProjectName>
+ <RootNamespace>tinyxml2</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/tinyxml2/tinyxml2.vcxproj.filters b/src/thirdparty/tinyxml2/tinyxml2.vcxproj.filters
new file mode 100644
index 000000000..7076206b8
--- /dev/null
+++ b/src/thirdparty/tinyxml2/tinyxml2.vcxproj.filters
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{33d302a3-81d8-403b-8e2e-527be82b731a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{cb52b8e3-8cfc-4b2e-95e8-f270eaa2c682}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library\tinyxml2.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="library\tinyxml2.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/unrar/arccmt.cpp b/src/thirdparty/unrar/arccmt.cpp
index 8789f6015..47b352b22 100644
--- a/src/thirdparty/unrar/arccmt.cpp
+++ b/src/thirdparty/unrar/arccmt.cpp
@@ -45,7 +45,7 @@ bool Archive::GetComment(Array<wchar> *CmtData)
if (Format==RARFMT14 && MainHead.PackComment || Format!=RARFMT14 && CommHead.Method!=0x30)
{
if (Format!=RARFMT14 && (CommHead.UnpVer < 15 || CommHead.UnpVer > VER_UNPACK || CommHead.Method > 0x35))
- return(false);
+ return false;
ComprDataIO DataIO;
DataIO.SetTestMode(true);
uint UnpCmtLength;
@@ -84,11 +84,13 @@ bool Archive::GetComment(Array<wchar> *CmtData)
size_t UnpDataSize;
DataIO.GetUnpackedData(&UnpData,&UnpDataSize);
#ifdef _WIN_ALL
+ // If we ever decide to extend it to Android, we'll need to alloc
+ // 4x memory for OEM to UTF-8 output here.
OemToCharBuffA((char *)UnpData,(char *)UnpData,(DWORD)UnpDataSize);
#endif
CmtData->Alloc(UnpDataSize+1);
memset(CmtData->Addr(0),0,CmtData->Size()*sizeof(wchar));
- CharToWide((char *)UnpData,CmtData->Addr(0),UnpDataSize);
+ CharToWide((char *)UnpData,CmtData->Addr(0),CmtData->Size());
CmtData->Alloc(wcslen(CmtData->Addr(0)));
}
}
@@ -105,6 +107,8 @@ bool Archive::GetComment(Array<wchar> *CmtData)
CmtData->Alloc(CmtLength+1);
CmtRaw.Push(0);
#ifdef _WIN_ALL
+ // If we ever decide to extend it to Android, we'll need to alloc
+ // 4x memory for OEM to UTF-8 output here.
OemToCharA((char *)&CmtRaw[0],(char *)&CmtRaw[0]);
#endif
CharToWide((char *)&CmtRaw[0],CmtData->Addr(0),CmtLength);
@@ -143,11 +147,10 @@ bool Archive::ReadCommentData(Array<wchar> *CmtData)
void Archive::ViewComment()
{
-#ifndef GUI
if (Cmd->DisableComment)
return;
Array<wchar> CmtBuf;
- if (GetComment(&CmtBuf))
+ if (GetComment(&CmtBuf)) // In GUI too, so "Test" command detects broken comments.
{
size_t CmtSize=CmtBuf.Size();
wchar *ChPtr=wcschr(&CmtBuf[0],0x1A);
@@ -156,7 +159,6 @@ void Archive::ViewComment()
mprintf(L"\n");
OutComment(&CmtBuf[0],CmtSize);
}
-#endif
}
diff --git a/src/thirdparty/unrar/archive.cpp b/src/thirdparty/unrar/archive.cpp
index 9e9e72424..e66bddb9c 100644
--- a/src/thirdparty/unrar/archive.cpp
+++ b/src/thirdparty/unrar/archive.cpp
@@ -1,8 +1,6 @@
#include "rar.hpp"
-#ifndef SHELL_EXT
#include "arccmt.cpp"
-#endif
Archive::Archive(RAROptions *InitCmd)
@@ -60,7 +58,6 @@ Archive::~Archive()
}
-#ifndef SHELL_EXT
void Archive::CheckArc(bool EnableBroken)
{
if (!IsArchive(EnableBroken))
@@ -72,10 +69,9 @@ void Archive::CheckArc(bool EnableBroken)
ErrHandler.Exit(RARX_FATAL);
}
}
-#endif
-#if !defined(SHELL_EXT) && !defined(SFX_MODULE)
+#if !defined(SFX_MODULE)
void Archive::CheckOpen(const wchar *Name)
{
TOpen(Name);
@@ -109,9 +105,9 @@ RARFORMAT Archive::IsSignature(const byte *D,size_t Size)
#endif
if (Size>=7 && D[1]==0x61 && D[2]==0x72 && D[3]==0x21 && D[4]==0x1a && D[5]==0x07)
{
- // We check for non-zero last signature byte, so we can return
- // a sensible warning in case we'll want to change the archive
- // format sometimes in the future.
+ // We check the last signature byte, so we can return a sensible
+ // warning in case we'll want to change the archive format
+ // sometimes in the future.
if (D[6]==0)
Type=RARFMT15;
else
@@ -234,22 +230,33 @@ bool Archive::IsArchive(bool EnableBroken)
{
SaveFilePos SavePos(*this);
int64 SaveCurBlockPos=CurBlockPos,SaveNextBlockPos=NextBlockPos;
+ HEADER_TYPE SaveCurHeaderType=CurHeaderType;
while (ReadHeader()!=0)
{
HEADER_TYPE HeaderType=GetHeaderType();
if (HeaderType==HEAD_SERVICE)
+ {
+ // If we have a split service headers, it surely indicates non-first
+ // volume. But not split service header does not guarantee the first
+ // volume, because we can have split file after non-split archive
+ // comment. So we do not quit from loop here.
FirstVolume=Volume && !SubHead.SplitBefore;
+ }
else
if (HeaderType==HEAD_FILE)
{
FirstVolume=Volume && !FileHead.SplitBefore;
break;
}
+ else
+ if (HeaderType==HEAD_ENDARC) // Might happen if archive contains only a split service header.
+ break;
SeekToNext();
}
CurBlockPos=SaveCurBlockPos;
NextBlockPos=SaveNextBlockPos;
+ CurHeaderType=SaveCurHeaderType;
}
if (!Volume || FirstVolume)
wcscpy(FirstVolumeName,FileName);
diff --git a/src/thirdparty/unrar/archive.hpp b/src/thirdparty/unrar/archive.hpp
index 1d8444bfb..6e85b9fff 100644
--- a/src/thirdparty/unrar/archive.hpp
+++ b/src/thirdparty/unrar/archive.hpp
@@ -38,12 +38,10 @@ class Archive:public File
void UnkEncVerMsg();
bool ReadCommentData(Array<wchar> *CmtData);
-#if !defined(SHELL_EXT) && !defined(RAR_NOCRYPT)
+#if !defined(RAR_NOCRYPT)
CryptData HeadersCrypt;
#endif
-#ifndef SHELL_EXT
ComprDataIO SubDataIO;
-#endif
bool DummyCmd;
RAROptions *Cmd;
@@ -61,7 +59,7 @@ class Archive:public File
public:
Archive(RAROptions *InitCmd=NULL);
~Archive();
- RARFORMAT IsSignature(const byte *D,size_t Size);
+ static RARFORMAT IsSignature(const byte *D,size_t Size);
bool IsArchive(bool EnableBroken);
size_t SearchBlock(HEADER_TYPE HeaderType);
size_t SearchSubBlock(const wchar *Type);
@@ -85,9 +83,12 @@ class Archive:public File
void AddSubData(byte *SrcData,uint64 DataSize,File *SrcFile,
const wchar *Name,uint Flags);
bool ReadSubData(Array<byte> *UnpData,File *DestFile);
- HEADER_TYPE GetHeaderType() {return(CurHeaderType);};
- RAROptions* GetRAROptions() {return(Cmd);}
+ HEADER_TYPE GetHeaderType() {return CurHeaderType;};
+ RAROptions* GetRAROptions() {return Cmd;}
void SetSilentOpen(bool Mode) {SilentOpen=Mode;}
+#if 0
+ void GetRecoveryInfo(bool Required,int64 *Size,int *Percent);
+#endif
#ifdef USE_QOPEN
bool Open(const wchar *Name,uint Mode=FMF_READ);
int Read(void *Data,size_t Size);
@@ -130,7 +131,7 @@ class Archive:public File
bool BrokenHeader;
bool FailedHeaderDecryption;
-#if !defined(SHELL_EXT) && !defined(RAR_NOCRYPT)
+#if !defined(RAR_NOCRYPT)
byte ArcSalt[SIZE_SALT50];
#endif
diff --git a/src/thirdparty/unrar/arcread.cpp b/src/thirdparty/unrar/arcread.cpp
index 5b70988ea..08f3628cd 100644
--- a/src/thirdparty/unrar/arcread.cpp
+++ b/src/thirdparty/unrar/arcread.cpp
@@ -44,18 +44,20 @@ size_t Archive::SearchBlock(HEADER_TYPE HeaderType)
if ((++Count & 127)==0)
Wait();
if (GetHeaderType()==HeaderType)
- return(Size);
+ return Size;
SeekToNext();
}
- return(0);
+ return 0;
}
size_t Archive::SearchSubBlock(const wchar *Type)
{
- size_t Size;
+ size_t Size,Count=0;
while ((Size=ReadHeader())!=0 && GetHeaderType()!=HEAD_ENDARC)
{
+ if ((++Count & 127)==0)
+ Wait();
if (GetHeaderType()==HEAD_SERVICE && SubHead.CmpName(Type))
return Size;
SeekToNext();
@@ -128,7 +130,7 @@ size_t Archive::ReadHeader15()
if (Read(Salt,SIZE_SALT30)!=SIZE_SALT30)
{
UnexpEndArcMsg();
- return(0);
+ return 0;
}
HeadersCrypt.SetCryptKeys(false,CRYPT_RAR30,&Cmd->Password,Salt,NULL,0,NULL,NULL);
Raw.SetCrypt(&HeadersCrypt);
@@ -155,7 +157,7 @@ size_t Archive::ReadHeader15()
if (ShortBlock.HeadSize<SIZEOF_SHORTBLOCKHEAD)
{
BrokenHeaderMsg();
- return(0);
+ return 0;
}
// For simpler further processing we map header types common
@@ -318,9 +320,8 @@ size_t Archive::ReadHeader15()
else
*hd->FileName=0;
- char AnsiName[NM];
- IntToExt(FileName,AnsiName,ASIZE(AnsiName));
- GetWideName(AnsiName,hd->FileName,hd->FileName,ASIZE(hd->FileName));
+ if (*hd->FileName==0)
+ ArcCharToWide(FileName,hd->FileName,ASIZE(hd->FileName),ACTW_OEM);
#ifndef SFX_MODULE
ConvertNameCase(hd->FileName);
@@ -391,6 +392,8 @@ size_t Archive::ReadHeader15()
byte CurByte=Raw.Get1();
rlt.Reminder|=(((uint)CurByte)<<((J+3-count)*8));
}
+ // Convert from 100ns RAR precision to REMINDER_PRECISION.
+ rlt.Reminder*=RarTime::REMINDER_PRECISION/10000000;
CurTime->SetLocal(&rlt);
}
}
@@ -561,8 +564,8 @@ size_t Archive::ReadHeader50()
if (Decrypt)
{
-#if defined(SHELL_EXT) || defined(RAR_NOCRYPT)
- return(0);
+#if defined(RAR_NOCRYPT)
+ return 0;
#else
RequestArcPassword();
@@ -570,7 +573,7 @@ size_t Archive::ReadHeader50()
if (Read(HeadersInitV,SIZE_INITV)!=SIZE_INITV)
{
UnexpEndArcMsg();
- return(0);
+ return 0;
}
byte PswCheck[SIZE_PSWCHECK];
@@ -771,7 +774,7 @@ size_t Archive::ReadHeader50()
hd->MaxSize=Max(hd->PackSize,hd->UnpSize);
hd->FileAttr=(uint)Raw.GetV();
if ((hd->FileFlags & FHFL_UTIME)!=0)
- hd->mtime=(time_t)Raw.Get4();
+ hd->mtime.SetUnix((time_t)Raw.Get4());
hd->FileHash.Type=HASH_NONE;
if ((hd->FileFlags & FHFL_CRC32)!=0)
@@ -784,7 +787,12 @@ size_t Archive::ReadHeader50()
uint CompInfo=(uint)Raw.GetV();
hd->Method=(CompInfo>>7) & 7;
- hd->UnpVer=CompInfo & 0x3f;
+
+ // "+ 50" to not mix with old RAR format algorithms. For example,
+ // we may need to use the compression algorithm 15 in the future,
+ // but it was already used in RAR 1.5 and Unpack needs to distinguish
+ // them.
+ hd->UnpVer=(CompInfo & 0x3f) + 50;
hd->HostOS=(byte)Raw.GetV();
size_t NameSize=(size_t)Raw.GetV();
@@ -811,7 +819,7 @@ size_t Archive::ReadHeader50()
Raw.GetB((byte *)FileName,ReadNameSize);
FileName[ReadNameSize]=0;
- UtfToWide(FileName,hd->FileName,ASIZE(hd->FileName)-1);
+ UtfToWide(FileName,hd->FileName,ASIZE(hd->FileName));
// Should do it before converting names, because extra fields can
// affect name processing, like in case of NTFS streams.
@@ -829,6 +837,20 @@ size_t Archive::ReadHeader50()
if (!FileBlock && hd->CmpName(SUBHEAD_TYPE_CMT))
MainComment=true;
+#if 0
+ // For RAR5 format we read the user specified recovery percent here.
+ // It would be useful to do it for shell extension too, so we display
+ // the correct recovery record size in archive properties. But then
+ // we would need to include the entire recovery record processing
+ // code to shell extension, which is not done now.
+ if (!FileBlock && hd->CmpName(SUBHEAD_TYPE_RR) && hd->SubData.Size()>0)
+ {
+ RecoveryPercent=hd->SubData[0];
+ RSBlockHeader Header;
+ GetRRInfo(this,&Header);
+ RecoverySize=Header.RecSectionSize*Header.RecCount;
+ }
+#endif
if (BadCRC) // Add the file name to broken header message displayed above.
uiMsg(UIERROR_FHEADERBROKEN,Archive::FileName,hd->FileName);
@@ -855,7 +877,7 @@ size_t Archive::ReadHeader50()
}
-#if !defined(SHELL_EXT) && !defined(RAR_NOCRYPT)
+#if !defined(RAR_NOCRYPT)
void Archive::RequestArcPassword()
{
if (!Cmd->Password.IsSet())
@@ -886,13 +908,15 @@ void Archive::RequestArcPassword()
ErrHandler.Exit(RARX_USERBREAK);
}
#else
- if (!uiGetPassword(UIPASSWORD_ARCHIVE,FileName,&Cmd->Password))
+ if (!uiGetPassword(UIPASSWORD_ARCHIVE,FileName,&Cmd->Password) ||
+ !Cmd->Password.IsSet())
{
Close();
uiMsg(UIERROR_INCERRCOUNT);
ErrHandler.Exit(RARX_USERBREAK);
}
#endif
+ Cmd->ManualPassword=true;
}
}
#endif
@@ -913,7 +937,7 @@ void Archive::ProcessExtra50(RawRead *Raw,size_t ExtraSize,BaseBlock *bb)
size_t NextPos=size_t(Raw->GetPos()+FieldSize);
uint64 FieldType=Raw->GetV();
- FieldSize=Raw->DataLeft(); // Field size without size and type fields.
+ FieldSize=int64(NextPos-Raw->GetPos()); // Field size without size and type fields.
if (bb->HeaderType==HEAD_MAIN)
{
@@ -980,6 +1004,11 @@ void Archive::ProcessExtra50(RawRead *Raw,size_t ExtraSize,BaseBlock *bb)
sha256_done(&ctx, Digest);
hd->UsePswCheck=memcmp(csum,Digest,SIZE_PSWCHECK_CSUM)==0;
+
+ // RAR 5.21 and earlier set PswCheck field in service records to 0
+ // even if UsePswCheck was present.
+ if (bb->HeaderType==HEAD_SERVICE && memcmp(hd->PswCheck,"\0\0\0\0\0\0\0\0",SIZE_PSWCHECK)==0)
+ hd->UsePswCheck=0;
}
hd->SaltSet=true;
hd->CryptMethod=CRYPT_RAR50;
@@ -999,25 +1028,35 @@ void Archive::ProcessExtra50(RawRead *Raw,size_t ExtraSize,BaseBlock *bb)
}
break;
case FHEXTRA_HTIME:
- if (FieldSize>=9)
+ if (FieldSize>=5)
{
byte Flags=(byte)Raw->GetV();
bool UnixTime=(Flags & FHEXTRA_HTIME_UNIXTIME)!=0;
if ((Flags & FHEXTRA_HTIME_MTIME)!=0)
if (UnixTime)
- hd->mtime=(time_t)Raw->Get4();
+ hd->mtime.SetUnix(Raw->Get4());
else
- hd->mtime.SetRaw(Raw->Get8());
+ hd->mtime.SetWin(Raw->Get8());
if ((Flags & FHEXTRA_HTIME_CTIME)!=0)
if (UnixTime)
- hd->ctime=(time_t)Raw->Get4();
+ hd->ctime.SetUnix(Raw->Get4());
else
- hd->ctime.SetRaw(Raw->Get8());
+ hd->ctime.SetWin(Raw->Get8());
if ((Flags & FHEXTRA_HTIME_ATIME)!=0)
if (UnixTime)
- hd->atime=(time_t)Raw->Get4();
+ hd->atime.SetUnix((time_t)Raw->Get4());
else
- hd->atime.SetRaw(Raw->Get8());
+ hd->atime.SetWin(Raw->Get8());
+ if (UnixTime && (Flags & FHEXTRA_HTIME_UNIX_NS)!=0) // Add nanoseconds.
+ {
+ uint ns;
+ if ((Flags & FHEXTRA_HTIME_MTIME)!=0 && (ns=(Raw->Get4() & 0x3fffffff))<1000000000)
+ hd->mtime.Adjust(ns);
+ if ((Flags & FHEXTRA_HTIME_CTIME)!=0 && (ns=(Raw->Get4() & 0x3fffffff))<1000000000)
+ hd->ctime.Adjust(ns);
+ if ((Flags & FHEXTRA_HTIME_ATIME)!=0 && (ns=(Raw->Get4() & 0x3fffffff))<1000000000)
+ hd->atime.Adjust(ns);
+ }
}
break;
case FHEXTRA_VERSION:
@@ -1093,6 +1132,19 @@ void Archive::ProcessExtra50(RawRead *Raw,size_t ExtraSize,BaseBlock *bb)
break;
case FHEXTRA_SUBDATA:
{
+ // RAR 5.21 and earlier set FHEXTRA_SUBDATA size to 1 less than
+ // required. It did not hurt extraction, because UnRAR 5.21
+ // and earlier ignored this field and set FieldSize as data left
+ // in entire extra area. But now we set the correct field size
+ // and set FieldSize based on actual extra record size,
+ // so we need to adjust it for those older archives here.
+ // FHEXTRA_SUBDATA in those archives always belongs to HEAD_SERVICE
+ // and always is last in extra area. So since its size is by 1
+ // less than needed, we always have 1 byte left in extra area,
+ // which fact we use here to detect such archives.
+ if (bb->HeaderType==HEAD_SERVICE && Raw->Size()-NextPos==1)
+ FieldSize++;
+
hd->SubData.Alloc((size_t)FieldSize);
Raw->GetB(hd->SubData.Addr(0),(size_t)FieldSize);
}
@@ -1167,7 +1219,7 @@ size_t Archive::ReadHeader14()
NextBlockPos=CurBlockPos+FileHead.HeadSize+FileHead.PackSize;
CurHeaderType=HEAD_FILE;
}
- return(NextBlockPos>CurBlockPos ? Raw.Size():0);
+ return NextBlockPos>CurBlockPos ? Raw.Size() : 0;
}
#endif
@@ -1264,6 +1316,11 @@ void Archive::ConvertFileHeader(FileHeader *hd)
else
hd->FileAttr=0x20;
+#ifdef _WIN_ALL
+ if (hd->HSType==HSYS_UNIX) // Convert Unix, OS X and Android decomposed chracters to Windows precomposed.
+ ConvertToPrecomposed(hd->FileName,ASIZE(hd->FileName));
+#endif
+
for (wchar *s=hd->FileName;*s!=0;s++)
{
#ifdef _UNIX
@@ -1312,7 +1369,6 @@ int64 Archive::GetStartPos()
}
-#ifndef SHELL_EXT
bool Archive::ReadSubData(Array<byte> *UnpData,File *DestFile)
{
if (BrokenHeader)
@@ -1342,14 +1398,19 @@ bool Archive::ReadSubData(Array<byte> *UnpData,File *DestFile)
uiMsg(UIERROR_SUBHEADERUNKNOWN,FileName);
return false;
}
- UnpData->Alloc((size_t)SubHead.UnpSize);
- SubDataIO.SetUnpackToMemory(&(*UnpData)[0],(uint)SubHead.UnpSize);
+ if (UnpData==NULL)
+ SubDataIO.SetTestMode(true);
+ else
+ {
+ UnpData->Alloc((size_t)SubHead.UnpSize);
+ SubDataIO.SetUnpackToMemory(&(*UnpData)[0],(uint)SubHead.UnpSize);
+ }
}
if (SubHead.Encrypted)
if (Cmd->Password.IsSet())
SubDataIO.SetEncryption(false,SubHead.CryptMethod,&Cmd->Password,
SubHead.SaltSet ? SubHead.Salt:NULL,SubHead.InitV,
- SubHead.Lg2Count,SubHead.PswCheck,SubHead.HashKey);
+ SubHead.Lg2Count,SubHead.HashKey,SubHead.PswCheck);
else
return false;
SubDataIO.UnpHash.Init(SubHead.FileHash.Type,1);
@@ -1374,4 +1435,3 @@ bool Archive::ReadSubData(Array<byte> *UnpData,File *DestFile)
}
return true;
}
-#endif
diff --git a/src/thirdparty/unrar/array.hpp b/src/thirdparty/unrar/array.hpp
index 63d89c31e..20d258d5b 100644
--- a/src/thirdparty/unrar/array.hpp
+++ b/src/thirdparty/unrar/array.hpp
@@ -10,6 +10,7 @@ template <class T> class Array
size_t BufSize;
size_t AllocSize;
size_t MaxSize;
+ bool Secure; // Clean memory if true.
public:
Array();
Array(size_t Size);
@@ -28,14 +29,19 @@ template <class T> class Array
void Append(T *Item,size_t Count);
T* Addr(size_t Item) {return Buffer+Item;}
void SetMaxSize(size_t Size) {MaxSize=Size;}
+ T* Begin() {return Buffer;}
+ T* End() {return Buffer==NULL ? NULL:Buffer+BufSize;}
+ void SetSecure() {Secure=true;}
};
+
template <class T> void Array<T>::CleanData()
{
Buffer=NULL;
BufSize=0;
AllocSize=0;
MaxSize=0;
+ Secure=false;
}
@@ -65,7 +71,11 @@ template <class T> Array<T>::Array(const Array &Src)
template <class T> Array<T>::~Array()
{
if (Buffer!=NULL)
+ {
+ if (Secure)
+ cleandata(Buffer,AllocSize*sizeof(T));
free(Buffer);
+ }
}
@@ -101,9 +111,25 @@ template <class T> void Array<T>::Add(size_t Items)
size_t Suggested=AllocSize+AllocSize/4+32;
size_t NewSize=Max(BufSize,Suggested);
- T *NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T));
- if (NewBuffer==NULL)
- ErrHandler.MemoryError();
+ T *NewBuffer;
+ if (Secure)
+ {
+ NewBuffer=(T *)malloc(NewSize*sizeof(T));
+ if (NewBuffer==NULL)
+ ErrHandler.MemoryError();
+ if (Buffer!=NULL)
+ {
+ memcpy(NewBuffer,Buffer,AllocSize*sizeof(T));
+ cleandata(Buffer,AllocSize*sizeof(T));
+ free(Buffer);
+ }
+ }
+ else
+ {
+ NewBuffer=(T *)realloc(Buffer,NewSize*sizeof(T));
+ if (NewBuffer==NULL)
+ ErrHandler.MemoryError();
+ }
Buffer=NewBuffer;
AllocSize=NewSize;
}
diff --git a/src/thirdparty/unrar/blake2s.cpp b/src/thirdparty/unrar/blake2s.cpp
index d481bc63a..317603dac 100644
--- a/src/thirdparty/unrar/blake2s.cpp
+++ b/src/thirdparty/unrar/blake2s.cpp
@@ -72,12 +72,6 @@ void blake2s_init_param( blake2s_state *S, uint32 node_offset, uint32 node_depth
}
-static _forceinline uint32 rotr32( const uint32 w, const unsigned c )
-{
- return ( w >> c ) | ( w << ( 32 - c ) );
-}
-
-
#define G(r,i,m,a,b,c,d) \
a = a + b + m[blake2s_sigma[r][2*i+0]]; \
d = rotr32(d ^ a, 16); \
@@ -162,7 +156,7 @@ void blake2s_update( blake2s_state *S, const byte *in, size_t inlen )
memcpy( S->buf + left, in, (size_t)inlen );
S->buflen += (size_t)inlen; // Be lazy, do not compress
in += inlen;
- inlen -= inlen;
+ inlen = 0;
}
}
}
diff --git a/src/thirdparty/unrar/blake2s_sse.cpp b/src/thirdparty/unrar/blake2s_sse.cpp
index af34b01dc..1a02f2106 100644
--- a/src/thirdparty/unrar/blake2s_sse.cpp
+++ b/src/thirdparty/unrar/blake2s_sse.cpp
@@ -83,6 +83,8 @@ static void blake2s_init_sse()
// Original BLAKE2 SSE4.1 message loading code was a little slower in x86 mode
// and about the same in x64 mode in our test. Perhaps depends on compiler.
+// We also tried _mm_i32gather_epi32 and _mm256_i32gather_epi32 AVX2 gather
+// instructions here, but they did not show any speed gain on i7-6700K.
#define SSE_ROUND(m,row,r) \
{ \
__m128i buf; \
diff --git a/src/thirdparty/unrar/cmddata.cpp b/src/thirdparty/unrar/cmddata.cpp
index f2374f146..758cd1714 100644
--- a/src/thirdparty/unrar/cmddata.cpp
+++ b/src/thirdparty/unrar/cmddata.cpp
@@ -13,7 +13,6 @@ void CommandData::Init()
*Command=0;
*ArcName=0;
FileLists=false;
- NoMoreSwitches=false;
ListMode=RCLM_AUTO;
@@ -44,13 +43,16 @@ static const wchar *AllocCmdParam(const wchar *CmdLine,wchar **Par)
}
-#if !defined(SFX_MODULE) && !defined(_ANDROID)
+#if !defined(SFX_MODULE)
void CommandData::ParseCommandLine(bool Preprocess,int argc, char *argv[])
{
+ *Command=0;
+ NoMoreSwitches=false;
#ifdef CUSTOM_CMDLINE_PARSER
// In Windows we may prefer to implement our own command line parser
// to avoid replacing \" by " in standard parser. Such replacing corrupts
// destination paths like "dest path\" in extraction commands.
+ // Also our own parser is Unicode compatible.
const wchar *CmdLine=GetCommandLine();
wchar *Par;
@@ -58,15 +60,12 @@ void CommandData::ParseCommandLine(bool Preprocess,int argc, char *argv[])
{
if ((CmdLine=AllocCmdParam(CmdLine,&Par))==NULL)
break;
- bool Code=true;
if (!FirstParam) // First parameter is the executable name.
if (Preprocess)
- Code=PreprocessSwitch(Par);
+ PreprocessArg(Par);
else
ParseArg(Par);
free(Par);
- if (Preprocess && !Code)
- break;
}
#else
Array<wchar> Arg;
@@ -75,10 +74,7 @@ void CommandData::ParseCommandLine(bool Preprocess,int argc, char *argv[])
Arg.Alloc(strlen(argv[I])+1);
CharToWide(argv[I],&Arg[0],Arg.Size());
if (Preprocess)
- {
- if (!PreprocessSwitch(&Arg[0]))
- break;
- }
+ PreprocessArg(&Arg[0]);
else
ParseArg(&Arg[0]);
}
@@ -89,11 +85,11 @@ void CommandData::ParseCommandLine(bool Preprocess,int argc, char *argv[])
#endif
-#if !defined(SFX_MODULE) && !defined(_ANDROID)
+#if !defined(SFX_MODULE)
void CommandData::ParseArg(wchar *Arg)
{
if (IsSwitch(*Arg) && !NoMoreSwitches)
- if (Arg[1]=='-')
+ if (Arg[1]=='-' && Arg[2]==0)
NoMoreSwitches=true;
else
ProcessSwitch(Arg+1);
@@ -103,14 +99,12 @@ void CommandData::ParseArg(wchar *Arg)
wcsncpy(Command,Arg,ASIZE(Command));
-#ifndef GUI
*Command=toupperw(*Command);
// 'I' and 'S' commands can contain case sensitive strings after
// the first character, so we must not modify their case.
// 'S' can contain SFX name, which case is important in Unix.
if (*Command!='I' && *Command!='S')
wcsupper(Command);
-#endif
}
else
if (*ArcName==0)
@@ -141,7 +135,7 @@ void CommandData::ParseArg(wchar *Arg)
RAR_CHARSET Charset=FilelistCharset;
-#if defined(_WIN_ALL) && !defined(GUI)
+#if defined(_WIN_ALL)
// for compatibility reasons we use OEM encoding
// in Win32 console version by default
@@ -181,7 +175,7 @@ void CommandData::ParseDone()
}
-#if !defined(SFX_MODULE) && !defined(_ANDROID)
+#if !defined(SFX_MODULE)
void CommandData::ParseEnvVar()
{
char *EnvStr=getenv("RAR");
@@ -196,45 +190,41 @@ void CommandData::ParseEnvVar()
-#if !defined(SFX_MODULE) && !defined(_ANDROID)
+#if !defined(SFX_MODULE)
// Preprocess those parameters, which must be processed before the rest of
// command line. Return 'false' to stop further processing.
-bool CommandData::PreprocessSwitch(const wchar *Switch)
+void CommandData::PreprocessArg(const wchar *Arg)
{
- if (IsSwitch(Switch[0]))
+ if (IsSwitch(Arg[0]) && !NoMoreSwitches)
{
- Switch++;
- char SwitchA[1024];
- WideToChar(Switch,SwitchA,ASIZE(SwitchA));
- if (wcsicomp(Switch,L"-")==0) // Switch "--".
- return false;
- if (wcsicomp(Switch,L"cfg-")==0)
+ Arg++;
+ if (Arg[0]=='-' && Arg[1]==0) // Switch "--".
+ NoMoreSwitches=true;
+ if (wcsicomp(Arg,L"cfg-")==0)
ConfigDisabled=true;
-#ifndef GUI
- if (wcsnicomp(Switch,L"ilog",4)==0)
+ if (wcsnicomp(Arg,L"ilog",4)==0)
{
// Ensure that correct log file name is already set
// if we need to report an error when processing the command line.
- ProcessSwitch(Switch);
+ ProcessSwitch(Arg);
InitLogOptions(LogName,ErrlogCharset);
}
-#endif
- if (wcsnicomp(Switch,L"sc",2)==0)
+ if (wcsnicomp(Arg,L"sc",2)==0)
{
// Process -sc before reading any file lists.
- ProcessSwitch(Switch);
-#ifndef GUI
+ ProcessSwitch(Arg);
if (*LogName!=0)
InitLogOptions(LogName,ErrlogCharset);
-#endif
}
}
- return true;
+ else
+ if (*Command==0)
+ wcsncpy(Command,Arg,ASIZE(Command)); // Need for rar.ini.
}
#endif
-#if !defined(GUI) && !defined(SFX_MODULE) && !defined(_ANDROID)
+#if !defined(SFX_MODULE)
void CommandData::ReadConfig()
{
StringList List;
@@ -247,13 +237,29 @@ void CommandData::ReadConfig()
Str++;
if (wcsnicomp(Str,L"switches=",9)==0)
ProcessSwitchesString(Str+9);
+ if (*Command!=0)
+ {
+ wchar Cmd[16];
+ wcsncpyz(Cmd,Command,ASIZE(Cmd));
+ wchar C0=toupperw(Cmd[0]);
+ wchar C1=toupperw(Cmd[1]);
+ if (C0=='I' || C0=='L' || C0=='M' || C0=='S' || C0=='V')
+ Cmd[1]=0;
+ if (C0=='R' && (C1=='R' || C1=='V'))
+ Cmd[2]=0;
+ wchar SwName[16+ASIZE(Cmd)];
+ swprintf(SwName,ASIZE(SwName),L"switches_%s=",Cmd);
+ size_t Length=wcslen(SwName);
+ if (wcsnicomp(Str,SwName,Length)==0)
+ ProcessSwitchesString(Str+Length);
+ }
}
}
}
#endif
-#if !defined(SFX_MODULE) && !defined(_ANDROID)
+#if !defined(SFX_MODULE)
void CommandData::ProcessSwitchesString(const wchar *Str)
{
wchar *Par;
@@ -267,7 +273,7 @@ void CommandData::ProcessSwitchesString(const wchar *Str)
#endif
-#if !defined(SFX_MODULE) && !defined(_ANDROID)
+#if !defined(SFX_MODULE)
void CommandData::ProcessSwitch(const wchar *Switch)
{
@@ -455,6 +461,11 @@ void CommandData::ProcessSwitch(const wchar *Switch)
Shutdown=true;
break;
}
+ if (wcsicomp(Switch+1,L"VER")==0)
+ {
+ PrintVersion=true;
+ break;
+ }
break;
case 'K':
switch(toupperw(Switch[1]))
@@ -566,7 +577,7 @@ void CommandData::ProcessSwitch(const wchar *Switch)
{
RAR_CHARSET Charset=FilelistCharset;
-#if defined(_WIN_ALL) && !defined(GUI)
+#if defined(_WIN_ALL)
// for compatibility reasons we use OEM encoding
// in Win32 console version by default
@@ -605,6 +616,14 @@ void CommandData::ProcessSwitch(const wchar *Switch)
#ifdef SAVE_LINKS
case 'L':
SaveSymLinks=true;
+ if (toupperw(Switch[2])=='A')
+ AbsoluteLinks=true;
+ break;
+#endif
+#ifdef _WIN_ALL
+ case 'N':
+ if (toupperw(Switch[2])=='I')
+ AllowIncompatNames=true;
break;
#endif
case 'R':
@@ -735,6 +754,9 @@ void CommandData::ProcessSwitch(const wchar *Switch)
case 'U':
rch=RCH_UNICODE;
break;
+ case 'F':
+ rch=RCH_UTF8;
+ break;
default :
BadSwitch(Switch);
AlreadyBad=true;
@@ -742,7 +764,7 @@ void CommandData::ProcessSwitch(const wchar *Switch)
};
if (!AlreadyBad)
if (Switch[3]==0)
- CommentCharset=FilelistCharset=ErrlogCharset=rch;
+ CommentCharset=FilelistCharset=ErrlogCharset=RedirectCharset=rch;
else
for (uint I=3;Switch[I]!=0 && !AlreadyBad;I++)
switch(toupperw(Switch[I]))
@@ -753,6 +775,9 @@ void CommandData::ProcessSwitch(const wchar *Switch)
case 'L':
FilelistCharset=rch;
break;
+ case 'R':
+ RedirectCharset=rch;
+ break;
default:
BadSwitch(Switch);
AlreadyBad=true;
@@ -790,6 +815,8 @@ void CommandData::ProcessSwitch(const wchar *Switch)
bool CommonMode=Switch[2]>='0' && Switch[2]<='4';
if (CommonMode)
Mode=(EXTTIME_MODE)(Switch[2]-'0');
+ if (Mode==EXTTIME_HIGH1 || Mode==EXTTIME_HIGH2) // '2' and '3' not supported anymore.
+ Mode=EXTTIME_HIGH3;
if (Switch[2]=='-')
Mode=EXTTIME_NONE;
if (CommonMode || Switch[2]=='-' || Switch[2]=='+' || Switch[2]==0)
@@ -798,6 +825,8 @@ void CommandData::ProcessSwitch(const wchar *Switch)
{
if (Switch[3]>='0' && Switch[3]<='4')
Mode=(EXTTIME_MODE)(Switch[3]-'0');
+ if (Mode==EXTTIME_HIGH1 || Mode==EXTTIME_HIGH2) // '2' and '3' not supported anymore.
+ Mode=EXTTIME_HIGH3;
if (Switch[3]=='-')
Mode=EXTTIME_NONE;
switch(toupperw(Switch[2]))
@@ -860,19 +889,15 @@ void CommandData::ProcessSwitch(const wchar *Switch)
case 'Z':
if (Switch[1]==0)
{
-#ifndef GUI // stdin is not supported by WinRAR.
// If comment file is not specified, we read data from stdin.
wcscpy(CommentFile,L"stdin");
-#endif
}
else
wcsncpyz(CommentFile,Switch+1,ASIZE(CommentFile));
break;
-#ifndef GUI
case '?' :
OutHelp(RARX_SUCCESS);
break;
-#endif
default :
BadSwitch(Switch);
break;
@@ -881,7 +906,7 @@ void CommandData::ProcessSwitch(const wchar *Switch)
#endif
-#if !defined(SFX_MODULE) && !defined(_ANDROID)
+#if !defined(SFX_MODULE)
void CommandData::BadSwitch(const wchar *Switch)
{
mprintf(St(MUnknownOption),Switch);
@@ -890,7 +915,6 @@ void CommandData::BadSwitch(const wchar *Switch)
#endif
-#ifndef GUI
void CommandData::OutTitle()
{
if (BareOutput || DisableCopyright)
@@ -903,20 +927,30 @@ void CommandData::OutTitle()
if (TitleShown)
return;
TitleShown=true;
- wchar Version[50];
- int Beta=RARVER_BETA;
- if (Beta!=0)
+
+ wchar Version[80];
+ if (RARVER_BETA!=0)
swprintf(Version,ASIZE(Version),L"%d.%02d %ls %d",RARVER_MAJOR,RARVER_MINOR,St(MBeta),RARVER_BETA);
else
swprintf(Version,ASIZE(Version),L"%d.%02d",RARVER_MAJOR,RARVER_MINOR);
-#ifdef UNRAR
- mprintf(St(MUCopyright),Version,RARVER_YEAR);
-#else
+#if defined(_WIN_32) || defined(_WIN_64)
+ wcsncatz(Version,L" ",ASIZE(Version));
#endif
+#ifdef _WIN_32
+ wcsncatz(Version,St(Mx86),ASIZE(Version));
#endif
+#ifdef _WIN_64
+ wcsncatz(Version,St(Mx64),ASIZE(Version));
+#endif
+ if (PrintVersion)
+ {
+ mprintf(L"%s",Version);
+ exit(0);
+ }
+ mprintf(St(MUCopyright),Version,RARVER_YEAR);
#endif
-}
#endif
+}
inline bool CmpMSGID(MSGID i1,MSGID i2)
@@ -933,13 +967,13 @@ inline bool CmpMSGID(MSGID i1,MSGID i2)
void CommandData::OutHelp(RAR_EXIT ExitCode)
{
-#if !defined(GUI) && !defined(SILENT)
+#if !defined(SILENT)
OutTitle();
static MSGID Help[]={
#ifdef SFX_MODULE
// Console SFX switches definition.
MCHelpCmd,MSHelpCmdE,MSHelpCmdT,MSHelpCmdV
-#elif defined(UNRAR)
+#else
// UnRAR switches definition.
MUNRARTitle1,MRARTitle2,MCHelpCmd,MCHelpCmdE,MCHelpCmdL,
MCHelpCmdP,MCHelpCmdT,MCHelpCmdV,MCHelpCmdX,MCHelpSw,MCHelpSwm,
@@ -947,12 +981,11 @@ void CommandData::OutHelp(RAR_EXIT ExitCode)
MCHelpSwCm,MCHelpSwCFGm,MCHelpSwCL,MCHelpSwCU,
MCHelpSwDH,MCHelpSwEP,MCHelpSwEP3,MCHelpSwF,MCHelpSwIDP,MCHelpSwIERR,
MCHelpSwINUL,MCHelpSwIOFF,MCHelpSwKB,MCHelpSwN,MCHelpSwNa,MCHelpSwNal,
- MCHelpSwO,MCHelpSwOC,MCHelpSwOR,MCHelpSwOW,MCHelpSwP,
+ MCHelpSwO,MCHelpSwOC,MCHelpSwOL,MCHelpSwOR,MCHelpSwOW,MCHelpSwP,
MCHelpSwPm,MCHelpSwR,MCHelpSwRI,MCHelpSwSC,MCHelpSwSL,MCHelpSwSM,
MCHelpSwTA,MCHelpSwTB,MCHelpSwTN,MCHelpSwTO,MCHelpSwTS,MCHelpSwU,
MCHelpSwVUnr,MCHelpSwVER,MCHelpSwVP,MCHelpSwX,MCHelpSwXa,MCHelpSwXal,
MCHelpSwY
-#else
#endif
};
@@ -964,7 +997,7 @@ void CommandData::OutHelp(RAR_EXIT ExitCode)
#ifndef _WIN_ALL
static MSGID Win32Only[]={
MCHelpSwIEML,MCHelpSwVD,MCHelpSwAO,MCHelpSwOS,MCHelpSwIOFF,
- MCHelpSwEP2,MCHelpSwOC,MCHelpSwDR,MCHelpSwRI
+ MCHelpSwEP2,MCHelpSwOC,MCHelpSwONI,MCHelpSwDR,MCHelpSwRI
};
bool Found=false;
for (int J=0;J<sizeof(Win32Only)/sizeof(Win32Only[0]);J++)
@@ -1006,24 +1039,24 @@ void CommandData::OutHelp(RAR_EXIT ExitCode)
// the include list created with -n switch.
bool CommandData::ExclCheck(const wchar *CheckName,bool Dir,bool CheckFullPath,bool CheckInclList)
{
- if (ExclCheckArgs(&ExclArgs,Dir,CheckName,CheckFullPath,MATCH_WILDSUBPATH))
+ if (CheckArgs(&ExclArgs,Dir,CheckName,CheckFullPath,MATCH_WILDSUBPATH))
return true;
if (!CheckInclList || InclArgs.ItemsCount()==0)
return false;
- if (ExclCheckArgs(&InclArgs,Dir,CheckName,false,MATCH_WILDSUBPATH))
+ if (CheckArgs(&InclArgs,Dir,CheckName,CheckFullPath,MATCH_WILDSUBPATH))
return false;
return true;
}
-bool CommandData::ExclCheckArgs(StringList *Args,bool Dir,const wchar *CheckName,bool CheckFullPath,int MatchMode)
+bool CommandData::CheckArgs(StringList *Args,bool Dir,const wchar *CheckName,bool CheckFullPath,int MatchMode)
{
wchar *Name=ConvertPath(CheckName,NULL);
wchar FullName[NM];
- wchar CurMask[NM+1]; // We reserve the space to append "*" to mask.
+ wchar CurMask[NM];
*FullName=0;
Args->Rewind();
- while (Args->GetString(CurMask,ASIZE(CurMask)-1))
+ while (Args->GetString(CurMask,ASIZE(CurMask)))
{
wchar *LastMaskChar=PointToLastChar(CurMask);
bool DirMask=IsPathDiv(*LastMaskChar); // Mask for directories only.
@@ -1040,23 +1073,24 @@ bool CommandData::ExclCheckArgs(StringList *Args,bool Dir,const wchar *CheckName
}
else
{
+ // REMOVED, we want -npath\* to match empty folders too.
// If mask has wildcards in name part and does not have the trailing
// '\' character, we cannot use it for directories.
- if (IsWildcard(PointToName(CurMask)))
- continue;
+ // if (IsWildcard(PointToName(CurMask)))
+ // continue;
}
}
else
{
// If we process a file inside of directory excluded by "dirmask\".
// we want to exclude such file too. So we convert "dirmask\" to
- // "dirmask\*". It is important for operations other than archiving.
- // When archiving, directory matched by "dirmask\" is excluded
- // from further scanning.
+ // "dirmask\*". It is important for operations other than archiving
+ // with -x. When archiving with -x, directory matched by "dirmask\"
+ // is excluded from further scanning.
if (DirMask)
- wcscat(CurMask,L"*");
+ wcsncatz(CurMask,L"*",ASIZE(CurMask));
}
#ifndef SFX_MODULE
@@ -1077,7 +1111,12 @@ bool CommandData::ExclCheckArgs(StringList *Args,bool Dir,const wchar *CheckName
#endif
{
wchar NewName[NM+2],*CurName=Name;
- if (CurMask[0]=='*' && IsPathDiv(CurMask[1]))
+
+ // Important to convert before "*\" check below, so masks like
+ // d:*\something are processed properly.
+ wchar *CmpMask=ConvertPath(CurMask,NULL);
+
+ if (CmpMask[0]=='*' && IsPathDiv(CmpMask[1]))
{
// We want "*\name" to match 'name' not only in subdirectories,
// but also in the current directory. We convert the name
@@ -1089,7 +1128,7 @@ bool CommandData::ExclCheckArgs(StringList *Args,bool Dir,const wchar *CheckName
CurName=NewName;
}
- if (CmpName(ConvertPath(CurMask,NULL),CurName,MatchMode))
+ if (CmpName(CmpMask,CurName,MatchMode))
return true;
}
}
@@ -1146,8 +1185,11 @@ bool CommandData::SizeCheck(int64 Size)
-int CommandData::IsProcessFile(FileHeader &FileHead,bool *ExactMatch,int MatchType)
+int CommandData::IsProcessFile(FileHeader &FileHead,bool *ExactMatch,int MatchType,
+ wchar *MatchedArg,uint MatchedArgSize)
{
+ if (MatchedArg!=NULL && MatchedArgSize>0)
+ *MatchedArg=0;
if (wcslen(FileHead.FileName)>=NM)
return 0;
bool Dir=FileHead.Dir;
@@ -1168,13 +1210,14 @@ int CommandData::IsProcessFile(FileHeader &FileHead,bool *ExactMatch,int MatchTy
{
if (ExactMatch!=NULL)
*ExactMatch=wcsicompc(ArgName,FileHead.FileName)==0;
+ if (MatchedArg!=NULL)
+ wcsncpyz(MatchedArg,ArgName,MatchedArgSize);
return StringCount;
}
return 0;
}
-#ifndef GUI
void CommandData::ProcessCommand()
{
#ifndef SFX_MODULE
@@ -1183,13 +1226,24 @@ void CommandData::ProcessCommand()
if (Command[0]!=0 && Command[1]!=0 && wcschr(SingleCharCommands,Command[0])!=NULL || *ArcName==0)
OutHelp(*Command==0 ? RARX_SUCCESS:RARX_USERERROR); // Return 'success' for 'rar' without parameters.
+ const wchar *ArcExt=GetExt(ArcName);
#ifdef _UNIX
- if (GetExt(ArcName)==NULL && (!FileExist(ArcName) || IsDir(GetFileAttr(ArcName))))
+ if (ArcExt==NULL && (!FileExist(ArcName) || IsDir(GetFileAttr(ArcName))))
wcsncatz(ArcName,L".rar",ASIZE(ArcName));
#else
- if (GetExt(ArcName)==NULL)
+ if (ArcExt==NULL)
wcsncatz(ArcName,L".rar",ASIZE(ArcName));
#endif
+ // Treat arcname.part1 as arcname.part1.rar.
+ if (ArcExt!=NULL && wcsnicomp(ArcExt,L".part",5)==0 && IsDigit(ArcExt[5]) &&
+ !FileExist(ArcName))
+ {
+ wchar Name[NM];
+ wcsncpyz(Name,ArcName,ASIZE(Name));
+ wcsncatz(Name,L".rar",ASIZE(Name));
+ if (FileExist(Name))
+ wcsncpyz(ArcName,Name,ASIZE(ArcName));
+ }
if (wcschr(L"AFUMD",*Command)==NULL)
{
@@ -1231,7 +1285,6 @@ void CommandData::ProcessCommand()
if (!BareOutput)
mprintf(L"\n");
}
-#endif
void CommandData::AddArcName(const wchar *Name)
@@ -1249,9 +1302,9 @@ bool CommandData::GetArcName(wchar *Name,int MaxSize)
bool CommandData::IsSwitch(int Ch)
{
#if defined(_WIN_ALL) || defined(_EMX)
- return(Ch=='-' || Ch=='/');
+ return Ch=='-' || Ch=='/';
#else
- return(Ch=='-');
+ return Ch=='-';
#endif
}
@@ -1260,7 +1313,7 @@ bool CommandData::IsSwitch(int Ch)
uint CommandData::GetExclAttr(const wchar *Str)
{
if (IsDigit(*Str))
- return(wcstol(Str,NULL,0));
+ return wcstol(Str,NULL,0);
uint Attr=0;
while (*Str!=0)
diff --git a/src/thirdparty/unrar/cmddata.hpp b/src/thirdparty/unrar/cmddata.hpp
index b2f3b1ae1..e12d4fbc8 100644
--- a/src/thirdparty/unrar/cmddata.hpp
+++ b/src/thirdparty/unrar/cmddata.hpp
@@ -2,7 +2,7 @@
#define _RAR_CMDDATA_
-#define DefaultStoreList L"7z;ace;arj;bz2;cab;gz;jpeg;jpg;lha;lzh;mp3;rar;taz;tgz;xz;z;zip"
+#define DefaultStoreList L"7z;ace;arj;bz2;cab;gz;jpeg;jpg;lha;lz;lzh;mp3;rar;taz;tgz;xz;z;zip;zipx"
enum RAR_CMD_LIST_MODE {RCLM_AUTO,RCLM_REJECT_LISTS,RCLM_ACCEPT_LISTS};
@@ -12,7 +12,6 @@ class CommandData:public RAROptions
void ProcessSwitchesString(const wchar *Str);
void ProcessSwitch(const wchar *Switch);
void BadSwitch(const wchar *Switch);
- bool ExclCheckArgs(StringList *Args,bool Dir,const wchar *CheckName,bool CheckFullPath,int MatchMode);
uint GetExclAttr(const wchar *Str);
bool FileLists;
@@ -28,16 +27,18 @@ class CommandData:public RAROptions
void ParseDone();
void ParseEnvVar();
void ReadConfig();
- bool PreprocessSwitch(const wchar *Switch);
+ void PreprocessArg(const wchar *Arg);
void OutTitle();
void OutHelp(RAR_EXIT ExitCode);
bool IsSwitch(int Ch);
bool ExclCheck(const wchar *CheckName,bool Dir,bool CheckFullPath,bool CheckInclList);
+ static bool CheckArgs(StringList *Args,bool Dir,const wchar *CheckName,bool CheckFullPath,int MatchMode);
bool ExclDirByAttr(uint FileAttr);
bool TimeCheck(RarTime &ft);
bool SizeCheck(int64 Size);
bool AnyFiltersActive();
- int IsProcessFile(FileHeader &FileHead,bool *ExactMatch=NULL,int MatchType=MATCH_WILDSUBPATH);
+ int IsProcessFile(FileHeader &FileHead,bool *ExactMatch=NULL,int MatchType=MATCH_WILDSUBPATH,
+ wchar *MatchedArg=NULL,uint MatchedArgSize=0);
void ProcessCommand();
void AddArcName(const wchar *Name);
bool GetArcName(wchar *Name,int MaxSize);
diff --git a/src/thirdparty/unrar/consio.cpp b/src/thirdparty/unrar/consio.cpp
index 55cb5ce50..2f71a9915 100644
--- a/src/thirdparty/unrar/consio.cpp
+++ b/src/thirdparty/unrar/consio.cpp
@@ -2,12 +2,11 @@
#include "log.cpp"
static MESSAGE_TYPE MsgStream=MSG_STDOUT;
+static RAR_CHARSET RedirectCharset=RCH_DEFAULT;
+
const int MaxMsgSize=2*NM+2048;
-#ifdef _WIN_ALL
static bool StdoutRedirected=false,StderrRedirected=false,StdinRedirected=false;
-#endif
-
#ifdef _WIN_ALL
static bool IsRedirected(DWORD nStdHandle)
@@ -42,13 +41,18 @@ void InitConsole()
if (!StderrRedirected)
_setmode(_fileno(stderr), _O_U16TEXT);
#endif
+#elif defined(_UNIX)
+ StdoutRedirected=!isatty(fileno(stdout));
+ StderrRedirected=!isatty(fileno(stderr));
+ StdinRedirected=!isatty(fileno(stdin));
#endif
}
-void InitConsoleOptions(MESSAGE_TYPE MsgStream)
+void InitConsoleOptions(MESSAGE_TYPE MsgStream,RAR_CHARSET RedirectCharset)
{
::MsgStream=MsgStream;
+ ::RedirectCharset=RedirectCharset;
}
@@ -63,17 +67,26 @@ static void cvt_wprintf(FILE *dest,const wchar *fmt,va_list arglist)
safebuf wchar Msg[MaxMsgSize];
if (dest==stdout && StdoutRedirected || dest==stderr && StderrRedirected)
{
- // Avoid Unicode for redirect in Windows, it does not work with pipes.
- vswprintf(Msg,ASIZE(Msg),fmtw,arglist);
- safebuf char MsgA[MaxMsgSize];
- WideToChar(Msg,MsgA,ASIZE(MsgA));
- CharToOemA(MsgA,MsgA); // Console tools like 'more' expect OEM encoding.
-
- // We already converted \n to \r\n above, so we use WriteFile instead
- // of C library to avoid unnecessary additional conversion.
HANDLE hOut=GetStdHandle(dest==stdout ? STD_OUTPUT_HANDLE:STD_ERROR_HANDLE);
+ vswprintf(Msg,ASIZE(Msg),fmtw,arglist);
DWORD Written;
- WriteFile(hOut,MsgA,(DWORD)strlen(MsgA),&Written,NULL);
+ if (RedirectCharset==RCH_UNICODE)
+ WriteFile(hOut,Msg,(DWORD)wcslen(Msg)*sizeof(*Msg),&Written,NULL);
+ else
+ {
+ // Avoid Unicode for redirect in Windows, it does not work with pipes.
+ safebuf char MsgA[MaxMsgSize];
+ if (RedirectCharset==RCH_UTF8)
+ WideToUtf(Msg,MsgA,ASIZE(MsgA));
+ else
+ WideToChar(Msg,MsgA,ASIZE(MsgA));
+ if (RedirectCharset==RCH_DEFAULT || RedirectCharset==RCH_OEM)
+ CharToOemA(MsgA,MsgA); // Console tools like 'more' expect OEM encoding.
+
+ // We already converted \n to \r\n above, so we use WriteFile instead
+ // of C library to avoid unnecessary additional conversion.
+ WriteFile(hOut,MsgA,(DWORD)strlen(MsgA),&Written,NULL);
+ }
return;
}
// MSVC2008 vfwprintf writes every character to console separately
@@ -127,32 +140,37 @@ static void GetPasswordText(wchar *Str,uint MaxLength)
{
if (MaxLength==0)
return;
+ if (StdinRedirected)
+ getwstr(Str,MaxLength); // Read from pipe or redirected file.
+ else
+ {
#ifdef _WIN_ALL
- HANDLE hConIn=GetStdHandle(STD_INPUT_HANDLE);
- HANDLE hConOut=GetStdHandle(STD_OUTPUT_HANDLE);
- DWORD ConInMode,ConOutMode;
- DWORD Read=0;
- GetConsoleMode(hConIn,&ConInMode);
- GetConsoleMode(hConOut,&ConOutMode);
- SetConsoleMode(hConIn,ENABLE_LINE_INPUT);
- SetConsoleMode(hConOut,ENABLE_PROCESSED_OUTPUT|ENABLE_WRAP_AT_EOL_OUTPUT);
-
- ReadConsole(hConIn,Str,MaxLength-1,&Read,NULL);
- Str[Read]=0;
- SetConsoleMode(hConIn,ConInMode);
- SetConsoleMode(hConOut,ConOutMode);
+ HANDLE hConIn=GetStdHandle(STD_INPUT_HANDLE);
+ HANDLE hConOut=GetStdHandle(STD_OUTPUT_HANDLE);
+ DWORD ConInMode,ConOutMode;
+ DWORD Read=0;
+ GetConsoleMode(hConIn,&ConInMode);
+ GetConsoleMode(hConOut,&ConOutMode);
+ SetConsoleMode(hConIn,ENABLE_LINE_INPUT);
+ SetConsoleMode(hConOut,ENABLE_PROCESSED_OUTPUT|ENABLE_WRAP_AT_EOL_OUTPUT);
+
+ ReadConsole(hConIn,Str,MaxLength-1,&Read,NULL);
+ Str[Read]=0;
+ SetConsoleMode(hConIn,ConInMode);
+ SetConsoleMode(hConOut,ConOutMode);
#else
- char StrA[MAXPASSWORD];
+ char StrA[MAXPASSWORD];
#if defined(_EMX) || defined (__VMS)
- fgets(StrA,ASIZE(StrA)-1,stdin);
+ fgets(StrA,ASIZE(StrA)-1,stdin);
#elif defined(__sun)
- strncpyz(StrA,getpassphrase(""),ASIZE(StrA));
+ strncpyz(StrA,getpassphrase(""),ASIZE(StrA));
#else
- strncpyz(StrA,getpass(""),ASIZE(StrA));
+ strncpyz(StrA,getpass(""),ASIZE(StrA));
#endif
- CharToWide(StrA,Str,MaxLength);
- cleandata(StrA,sizeof(StrA));
+ CharToWide(StrA,Str,MaxLength);
+ cleandata(StrA,sizeof(StrA));
#endif
+ }
Str[MaxLength-1]=0;
RemoveLF(Str);
}
@@ -162,20 +180,22 @@ static void GetPasswordText(wchar *Str,uint MaxLength)
#ifndef SILENT
bool GetConsolePassword(UIPASSWORD_TYPE Type,const wchar *FileName,SecPassword *Password)
{
- uiAlarm(UIALARM_QUESTION);
+ if (!StdinRedirected)
+ uiAlarm(UIALARM_QUESTION);
while (true)
{
- if (Type==UIPASSWORD_GLOBAL)
- eprintf(L"\n%s: ",St(MAskPsw));
- else
- eprintf(St(MAskPswFor),FileName);
+ if (!StdinRedirected)
+ if (Type==UIPASSWORD_GLOBAL)
+ eprintf(L"\n%s: ",St(MAskPsw));
+ else
+ eprintf(St(MAskPswFor),FileName);
wchar PlainPsw[MAXPASSWORD];
GetPasswordText(PlainPsw,ASIZE(PlainPsw));
if (*PlainPsw==0 && Type==UIPASSWORD_GLOBAL)
return false;
- if (Type==UIPASSWORD_GLOBAL)
+ if (!StdinRedirected && Type==UIPASSWORD_GLOBAL)
{
eprintf(St(MReAskPsw));
wchar CmpStr[MAXPASSWORD];
@@ -222,8 +242,9 @@ bool getwstr(wchar *str,size_t n)
// calling Ask(), so let's better exit.
ErrHandler.Exit(RARX_USERBREAK);
}
- StrA[ReadSize-1]=0;
+ StrA[ReadSize]=0;
CharToWide(&StrA[0],str,n);
+ cleandata(&StrA[0],StrA.Size()); // We can use this function to enter passwords.
}
else
{
diff --git a/src/thirdparty/unrar/consio.hpp b/src/thirdparty/unrar/consio.hpp
index 5c9e67da1..4a0ed128e 100644
--- a/src/thirdparty/unrar/consio.hpp
+++ b/src/thirdparty/unrar/consio.hpp
@@ -2,7 +2,7 @@
#define _RAR_CONSIO_
void InitConsole();
-void InitConsoleOptions(MESSAGE_TYPE MsgStream);
+void InitConsoleOptions(MESSAGE_TYPE MsgStream,RAR_CHARSET RedirectCharset);
void OutComment(const wchar *Comment,size_t Size);
#ifndef SILENT
diff --git a/src/thirdparty/unrar/crc.cpp b/src/thirdparty/unrar/crc.cpp
index d593281e7..d77fa030c 100644
--- a/src/thirdparty/unrar/crc.cpp
+++ b/src/thirdparty/unrar/crc.cpp
@@ -37,15 +37,15 @@ static void InitTables()
{
InitCRC32(crc_tables[0]);
- for (uint I=0;I<256;I++) // Build additional lookup tables.
+ for (uint I=0;I<256;I++) // Build additional lookup tables.
{
- uint C=crc_tables[0][I];
- for (uint J=1;J<8;J++)
+ uint C=crc_tables[0][I];
+ for (uint J=1;J<8;J++)
{
- C=crc_tables[0][(byte)C]^(C>>8);
- crc_tables[J][I]=C;
- }
- }
+ C=crc_tables[0][(byte)C]^(C>>8);
+ crc_tables[J][I]=C;
+ }
+ }
}
@@ -62,13 +62,13 @@ uint CRC32(uint StartCRC,const void *Addr,size_t Size)
for (;Size>=8;Size-=8,Data+=8)
{
#ifdef BIG_ENDIAN
- StartCRC ^= Data[0]|(Data[1] << 8)|(Data[2] << 16)|(Data[3] << 24);
+ StartCRC ^= Data[0]|(Data[1] << 8)|(Data[2] << 16)|(Data[3] << 24);
uint NextData = Data[4]|(Data[5] << 8)|(Data[6] << 16)|(Data[7] << 24);
#else
- StartCRC ^= *(uint32 *) Data;
+ StartCRC ^= *(uint32 *) Data;
uint NextData = *(uint32 *) (Data +4);
#endif
- StartCRC = crc_tables[7][(byte) StartCRC ] ^
+ StartCRC = crc_tables[7][(byte) StartCRC ] ^
crc_tables[6][(byte)(StartCRC >> 8) ] ^
crc_tables[5][(byte)(StartCRC >> 16)] ^
crc_tables[4][(byte)(StartCRC >> 24)] ^
@@ -76,7 +76,7 @@ uint CRC32(uint StartCRC,const void *Addr,size_t Size)
crc_tables[2][(byte)(NextData >>8 ) ] ^
crc_tables[1][(byte)(NextData >> 16)] ^
crc_tables[0][(byte)(NextData >> 24)];
- }
+ }
for (;Size>0;Size--,Data++) // Process left data.
StartCRC=crc_tables[0][(byte)(StartCRC^Data[0])]^(StartCRC>>8);
diff --git a/src/thirdparty/unrar/crypt.cpp b/src/thirdparty/unrar/crypt.cpp
index ef2e68a11..fc2126d46 100644
--- a/src/thirdparty/unrar/crypt.cpp
+++ b/src/thirdparty/unrar/crypt.cpp
@@ -11,15 +11,18 @@
CryptData::CryptData()
{
Method=CRYPT_NONE;
- memset(KDFCache,0,sizeof(KDFCache));
- KDFCachePos=0;
+ memset(KDF3Cache,0,sizeof(KDF3Cache));
+ memset(KDF5Cache,0,sizeof(KDF5Cache));
+ KDF3CachePos=0;
+ KDF5CachePos=0;
memset(CRCTab,0,sizeof(CRCTab));
}
CryptData::~CryptData()
{
- cleandata(KDFCache,sizeof(KDFCache));
+ cleandata(KDF3Cache,sizeof(KDF3Cache));
+ cleandata(KDF5Cache,sizeof(KDF5Cache));
}
@@ -89,6 +92,21 @@ bool CryptData::SetCryptKeys(bool Encrypt,CRYPT_METHOD Method,
}
+// Use the current system time to additionally randomize data.
+static void TimeRandomize(byte *RndBuf,size_t BufSize)
+{
+ static uint Count=0;
+ RarTime CurTime;
+ CurTime.SetCurrentTime();
+ uint64 Random=CurTime.GetWin()+clock();
+ for (size_t I=0;I<BufSize;I++)
+ {
+ byte RndByte = byte (Random >> ( (I & 7) * 8 ));
+ RndBuf[I]=byte( (RndByte ^ I) + Count++);
+ }
+}
+
+
// Fill buffer with random data.
@@ -97,10 +115,10 @@ void GetRnd(byte *RndBuf,size_t BufSize)
bool Success=false;
#if defined(_WIN_ALL)
HCRYPTPROV hProvider = 0;
- if (CryptAcquireContext(&hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+ if (CryptAcquireContext(&hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
{
- Success=CryptGenRandom(hProvider, (DWORD)BufSize, RndBuf) == TRUE;
- CryptReleaseContext(hProvider, 0);
+ Success=CryptGenRandom(hProvider, (DWORD)BufSize, RndBuf) == TRUE;
+ CryptReleaseContext(hProvider, 0);
}
#elif defined(_UNIX)
FILE *rndf = fopen("/dev/urandom", "r");
@@ -112,15 +130,5 @@ void GetRnd(byte *RndBuf,size_t BufSize)
#endif
// We use this code only as the last resort if code above failed.
if (!Success)
- {
- static uint Count=0;
- RarTime CurTime;
- CurTime.SetCurrentTime();
- uint64 Random=CurTime.GetRaw()+clock();
- for (size_t I=0;I<BufSize;I++)
- {
- byte RndByte = byte (Random >> ( (I & 7) * 8 ));
- RndBuf[I]=byte( (RndByte ^ I) + Count++);
- }
- }
+ TimeRandomize(RndBuf,BufSize);
}
diff --git a/src/thirdparty/unrar/crypt.hpp b/src/thirdparty/unrar/crypt.hpp
index 1dc244600..f6382ef50 100644
--- a/src/thirdparty/unrar/crypt.hpp
+++ b/src/thirdparty/unrar/crypt.hpp
@@ -20,18 +20,28 @@ enum CRYPT_METHOD {
#define CRYPT_VERSION 0 // Supported encryption version.
-struct KDFCacheItem
-{
- SecPassword Pwd;
- byte Salt[SIZE_SALT50];
- uint Lg2Count; // Log2 of PBKDF2 repetition count.
- byte Key[32];
- byte PswCheckValue[SHA256_DIGEST_SIZE];
- byte HashKeyValue[SHA256_DIGEST_SIZE];
-};
-
class CryptData
{
+ struct KDF5CacheItem
+ {
+ SecPassword Pwd;
+ byte Salt[SIZE_SALT50];
+ byte Key[32];
+ uint Lg2Count; // Log2 of PBKDF2 repetition count.
+ byte PswCheckValue[SHA256_DIGEST_SIZE];
+ byte HashKeyValue[SHA256_DIGEST_SIZE];
+ };
+
+ struct KDF3CacheItem
+ {
+ SecPassword Pwd;
+ byte Salt[SIZE_SALT30];
+ byte Key[16];
+ byte Init[16];
+ bool SaltPresent;
+ };
+
+
private:
void SetKey13(const char *Password);
void Decrypt13(byte *Data,size_t Count);
@@ -46,10 +56,13 @@ class CryptData
void DecryptBlock20(byte *Buf);
void SetKey30(bool Encrypt,SecPassword *Password,const wchar *PwdW,const byte *Salt);
-
void SetKey50(bool Encrypt,SecPassword *Password,const wchar *PwdW,const byte *Salt,const byte *InitV,uint Lg2Cnt,byte *HashKey,byte *PswCheck);
- KDFCacheItem KDFCache[4];
- uint KDFCachePos;
+
+ KDF3CacheItem KDF3Cache[4];
+ uint KDF3CachePos;
+
+ KDF5CacheItem KDF5Cache[4];
+ uint KDF5CachePos;
CRYPT_METHOD Method;
diff --git a/src/thirdparty/unrar/crypt1.cpp b/src/thirdparty/unrar/crypt1.cpp
index f840f4775..142639373 100644
--- a/src/thirdparty/unrar/crypt1.cpp
+++ b/src/thirdparty/unrar/crypt1.cpp
@@ -1,8 +1,5 @@
extern uint CRCTab[256];
-#define rol(x,n,xsize) (((x)<<(n)) | ((x)>>(xsize-(n))))
-#define ror(x,n,xsize) (((x)>>(n)) | ((x)<<(xsize-(n))))
-
void CryptData::SetKey13(const char *Password)
{
Key13[0]=Key13[1]=Key13[2]=0;
@@ -12,7 +9,7 @@ void CryptData::SetKey13(const char *Password)
Key13[0]+=P;
Key13[1]^=P;
Key13[2]+=P;
- Key13[2]=(byte)rol(Key13[2],1,8);
+ Key13[2]=(byte)rotls(Key13[2],1,8);
}
}
@@ -73,8 +70,8 @@ void CryptData::Crypt15(byte *Data,size_t Count)
Key15[1]^=CRCTab[(Key15[0] & 0x1fe)>>1];
Key15[2]-=CRCTab[(Key15[0] & 0x1fe)>>1]>>16;
Key15[0]^=Key15[2];
- Key15[3]=ror(Key15[3]&0xffff,1,16)^Key15[1];
- Key15[3]=ror(Key15[3]&0xffff,1,16);
+ Key15[3]=rotrs(Key15[3]&0xffff,1,16)^Key15[1];
+ Key15[3]=rotrs(Key15[3]&0xffff,1,16);
Key15[0]^=Key15[3];
*Data^=(byte)(Key15[0]>>8);
Data++;
diff --git a/src/thirdparty/unrar/crypt2.cpp b/src/thirdparty/unrar/crypt2.cpp
index 01d72f862..5fa4a97d4 100644
--- a/src/thirdparty/unrar/crypt2.cpp
+++ b/src/thirdparty/unrar/crypt2.cpp
@@ -40,7 +40,7 @@ void CryptData::SetKey20(const char *Password)
Key20[3]=0xA4E7F123L;
memcpy(SubstTable20,InitSubstTable20,sizeof(SubstTable20));
- for (int J=0;J<256;J++)
+ for (uint J=0;J<256;J++)
for (size_t I=0;I<PswLength;I+=2)
{
uint N1=(byte)CRCTab [ (byte(Password[I]) - J) &0xff];
@@ -62,56 +62,25 @@ void CryptData::SetKey20(const char *Password)
void CryptData::EncryptBlock20(byte *Buf)
{
uint A,B,C,D,T,TA,TB;
-#if defined(BIG_ENDIAN) || !defined(PRESENT_INT32) || !defined(ALLOW_MISALIGNED)
- A=((uint)Buf[0]|((uint)Buf[1]<<8)|((uint)Buf[2]<<16)|((uint)Buf[3]<<24))^Key20[0];
- B=((uint)Buf[4]|((uint)Buf[5]<<8)|((uint)Buf[6]<<16)|((uint)Buf[7]<<24))^Key20[1];
- C=((uint)Buf[8]|((uint)Buf[9]<<8)|((uint)Buf[10]<<16)|((uint)Buf[11]<<24))^Key20[2];
- D=((uint)Buf[12]|((uint)Buf[13]<<8)|((uint)Buf[14]<<16)|((uint)Buf[15]<<24))^Key20[3];
-#else
- uint32 *BufPtr=(uint32 *)Buf;
- A=BufPtr[0]^Key20[0];
- B=BufPtr[1]^Key20[1];
- C=BufPtr[2]^Key20[2];
- D=BufPtr[3]^Key20[3];
-#endif
+ A=RawGet4(Buf+0)^Key20[0];
+ B=RawGet4(Buf+4)^Key20[1];
+ C=RawGet4(Buf+8)^Key20[2];
+ D=RawGet4(Buf+12)^Key20[3];
for(int I=0;I<NROUNDS;I++)
{
- T=((C+rol(D,11,32))^Key20[I&3]);
+ T=((C+rotls(D,11,32))^Key20[I&3]);
TA=A^substLong(T);
- T=((D^rol(C,17,32))+Key20[I&3]);
+ T=((D^rotls(C,17,32))+Key20[I&3]);
TB=B^substLong(T);
A=C;
B=D;
C=TA;
D=TB;
}
-#if defined(BIG_ENDIAN) || !defined(PRESENT_INT32) || !defined(ALLOW_MISALIGNED)
- C^=Key20[0];
- Buf[0]=(byte)C;
- Buf[1]=(byte)(C>>8);
- Buf[2]=(byte)(C>>16);
- Buf[3]=(byte)(C>>24);
- D^=Key20[1];
- Buf[4]=(byte)D;
- Buf[5]=(byte)(D>>8);
- Buf[6]=(byte)(D>>16);
- Buf[7]=(byte)(D>>24);
- A^=Key20[2];
- Buf[8]=(byte)A;
- Buf[9]=(byte)(A>>8);
- Buf[10]=(byte)(A>>16);
- Buf[11]=(byte)(A>>24);
- B^=Key20[3];
- Buf[12]=(byte)B;
- Buf[13]=(byte)(B>>8);
- Buf[14]=(byte)(B>>16);
- Buf[15]=(byte)(B>>24);
-#else
- BufPtr[0]=C^Key20[0];
- BufPtr[1]=D^Key20[1];
- BufPtr[2]=A^Key20[2];
- BufPtr[3]=B^Key20[3];
-#endif
+ RawPut4(C^Key20[0],Buf+0);
+ RawPut4(D^Key20[1],Buf+4);
+ RawPut4(A^Key20[2],Buf+8);
+ RawPut4(B^Key20[3],Buf+12);
UpdKeys20(Buf);
}
@@ -120,57 +89,26 @@ void CryptData::DecryptBlock20(byte *Buf)
{
byte InBuf[16];
uint A,B,C,D,T,TA,TB;
-#if defined(BIG_ENDIAN) || !defined(PRESENT_INT32) || !defined(ALLOW_MISALIGNED)
- A=((uint)Buf[0]|((uint)Buf[1]<<8)|((uint)Buf[2]<<16)|((uint)Buf[3]<<24))^Key20[0];
- B=((uint)Buf[4]|((uint)Buf[5]<<8)|((uint)Buf[6]<<16)|((uint)Buf[7]<<24))^Key20[1];
- C=((uint)Buf[8]|((uint)Buf[9]<<8)|((uint)Buf[10]<<16)|((uint)Buf[11]<<24))^Key20[2];
- D=((uint)Buf[12]|((uint)Buf[13]<<8)|((uint)Buf[14]<<16)|((uint)Buf[15]<<24))^Key20[3];
-#else
- uint32 *BufPtr=(uint32 *)Buf;
- A=BufPtr[0]^Key20[0];
- B=BufPtr[1]^Key20[1];
- C=BufPtr[2]^Key20[2];
- D=BufPtr[3]^Key20[3];
-#endif
+ A=RawGet4(Buf+0)^Key20[0];
+ B=RawGet4(Buf+4)^Key20[1];
+ C=RawGet4(Buf+8)^Key20[2];
+ D=RawGet4(Buf+12)^Key20[3];
memcpy(InBuf,Buf,sizeof(InBuf));
for(int I=NROUNDS-1;I>=0;I--)
{
- T=((C+rol(D,11,32))^Key20[I&3]);
+ T=((C+rotls(D,11,32))^Key20[I&3]);
TA=A^substLong(T);
- T=((D^rol(C,17,32))+Key20[I&3]);
+ T=((D^rotls(C,17,32))+Key20[I&3]);
TB=B^substLong(T);
A=C;
B=D;
C=TA;
D=TB;
}
-#if defined(BIG_ENDIAN) || !defined(PRESENT_INT32) || !defined(ALLOW_MISALIGNED)
- C^=Key20[0];
- Buf[0]=(byte)C;
- Buf[1]=(byte)(C>>8);
- Buf[2]=(byte)(C>>16);
- Buf[3]=(byte)(C>>24);
- D^=Key20[1];
- Buf[4]=(byte)D;
- Buf[5]=(byte)(D>>8);
- Buf[6]=(byte)(D>>16);
- Buf[7]=(byte)(D>>24);
- A^=Key20[2];
- Buf[8]=(byte)A;
- Buf[9]=(byte)(A>>8);
- Buf[10]=(byte)(A>>16);
- Buf[11]=(byte)(A>>24);
- B^=Key20[3];
- Buf[12]=(byte)B;
- Buf[13]=(byte)(B>>8);
- Buf[14]=(byte)(B>>16);
- Buf[15]=(byte)(B>>24);
-#else
- BufPtr[0]=C^Key20[0];
- BufPtr[1]=D^Key20[1];
- BufPtr[2]=A^Key20[2];
- BufPtr[3]=B^Key20[3];
-#endif
+ RawPut4(C^Key20[0],Buf+0);
+ RawPut4(D^Key20[1],Buf+4);
+ RawPut4(A^Key20[2],Buf+8);
+ RawPut4(B^Key20[3],Buf+12);
UpdKeys20(InBuf);
}
diff --git a/src/thirdparty/unrar/crypt3.cpp b/src/thirdparty/unrar/crypt3.cpp
index ffaced56d..48406487e 100644
--- a/src/thirdparty/unrar/crypt3.cpp
+++ b/src/thirdparty/unrar/crypt3.cpp
@@ -1,38 +1,16 @@
-struct CryptKeyCacheItem
-{
- CryptKeyCacheItem()
- {
- Password.Set(L"");
- }
-
- ~CryptKeyCacheItem()
- {
- cleandata(AESKey,sizeof(AESKey));
- cleandata(AESInit,sizeof(AESInit));
- cleandata(&Password,sizeof(Password));
- }
-
- byte AESKey[16],AESInit[16];
- SecPassword Password;
- bool SaltPresent;
- byte Salt[SIZE_SALT30];
-};
-
-static CryptKeyCacheItem Cache[4];
-static int CachePos=0;
-
void CryptData::SetKey30(bool Encrypt,SecPassword *Password,const wchar *PwdW,const byte *Salt)
{
byte AESKey[16],AESInit[16];
bool Cached=false;
- for (uint I=0;I<ASIZE(Cache);I++)
- if (Cache[I].Password==*Password &&
- (Salt==NULL && !Cache[I].SaltPresent || Salt!=NULL &&
- Cache[I].SaltPresent && memcmp(Cache[I].Salt,Salt,SIZE_SALT30)==0))
+ for (uint I=0;I<ASIZE(KDF3Cache);I++)
+ if (KDF3Cache[I].Pwd==*Password &&
+ (Salt==NULL && !KDF3Cache[I].SaltPresent || Salt!=NULL &&
+ KDF3Cache[I].SaltPresent && memcmp(KDF3Cache[I].Salt,Salt,SIZE_SALT30)==0))
{
- memcpy(AESKey,Cache[I].AESKey,sizeof(AESKey));
- memcpy(AESInit,Cache[I].AESInit,sizeof(AESInit));
+ memcpy(AESKey,KDF3Cache[I].Key,sizeof(AESKey));
+ SecHideData(AESKey,sizeof(AESKey),false,false);
+ memcpy(AESInit,KDF3Cache[I].Init,sizeof(AESInit));
Cached=true;
break;
}
@@ -53,32 +31,33 @@ void CryptData::SetKey30(bool Encrypt,SecPassword *Password,const wchar *PwdW,co
const int HashRounds=0x40000;
for (int I=0;I<HashRounds;I++)
{
- sha1_process( &c, RawPsw, RawLength, false);
+ sha1_process_rar29( &c, RawPsw, RawLength );
byte PswNum[3];
PswNum[0]=(byte)I;
PswNum[1]=(byte)(I>>8);
PswNum[2]=(byte)(I>>16);
- sha1_process( &c, PswNum, 3, false);
+ sha1_process(&c, PswNum, 3);
if (I%(HashRounds/16)==0)
{
sha1_context tempc=c;
uint32 digest[5];
- sha1_done( &tempc, digest, false);
+ sha1_done( &tempc, digest );
AESInit[I/(HashRounds/16)]=(byte)digest[4];
}
}
uint32 digest[5];
- sha1_done( &c, digest, false);
+ sha1_done( &c, digest );
for (int I=0;I<4;I++)
for (int J=0;J<4;J++)
AESKey[I*4+J]=(byte)(digest[I]>>(J*8));
- Cache[CachePos].Password=*Password;
- if ((Cache[CachePos].SaltPresent=(Salt!=NULL))==true)
- memcpy(Cache[CachePos].Salt,Salt,SIZE_SALT30);
- memcpy(Cache[CachePos].AESKey,AESKey,sizeof(AESKey));
- memcpy(Cache[CachePos].AESInit,AESInit,sizeof(AESInit));
- CachePos=(CachePos+1)%ASIZE(Cache);
+ KDF3Cache[KDF3CachePos].Pwd=*Password;
+ if ((KDF3Cache[KDF3CachePos].SaltPresent=(Salt!=NULL))==true)
+ memcpy(KDF3Cache[KDF3CachePos].Salt,Salt,SIZE_SALT30);
+ memcpy(KDF3Cache[KDF3CachePos].Key,AESKey,sizeof(AESKey));
+ SecHideData(KDF3Cache[KDF3CachePos].Key,sizeof(KDF3Cache[KDF3CachePos].Key),true,false);
+ memcpy(KDF3Cache[KDF3CachePos].Init,AESInit,sizeof(AESInit));
+ KDF3CachePos=(KDF3CachePos+1)%ASIZE(KDF3Cache);
cleandata(RawPsw,sizeof(RawPsw));
}
diff --git a/src/thirdparty/unrar/crypt5.cpp b/src/thirdparty/unrar/crypt5.cpp
index fab3cc975..7562469f3 100644
--- a/src/thirdparty/unrar/crypt5.cpp
+++ b/src/thirdparty/unrar/crypt5.cpp
@@ -1,5 +1,7 @@
-void hmac_sha256(const byte *Key,size_t KeyLength,const byte *Data,
- size_t DataLength,byte *ResDigest)
+static void hmac_sha256(const byte *Key,size_t KeyLength,const byte *Data,
+ size_t DataLength,byte *ResDigest,
+ sha256_context *ICtxOpt,bool *SetIOpt,
+ sha256_context *RCtxOpt,bool *SetROpt)
{
const size_t Sha256BlockSize=64; // As defined in RFC 4868.
@@ -16,28 +18,61 @@ void hmac_sha256(const byte *Key,size_t KeyLength,const byte *Data,
}
byte KeyBuf[Sha256BlockSize]; // Store the padded key here.
- for (size_t I = 0; I < KeyLength; I++) // Use 0x36 padding for inner digest.
- KeyBuf[I] = Key[I] ^ 0x36;
- for (size_t I = KeyLength; I < Sha256BlockSize; I++)
- KeyBuf[I] = 0x36;
-
sha256_context ICtx;
- sha256_init(&ICtx);
- sha256_process(&ICtx, KeyBuf, Sha256BlockSize); // Hash padded key.
+
+ if (ICtxOpt!=NULL && *SetIOpt)
+ ICtx=*ICtxOpt; // Use already calculated first block context.
+ else
+ {
+ // This calculation is the same for all iterations with same password.
+ // So for PBKDF2 we can calculate it only for first block and then reuse
+ // to improve performance.
+
+ for (size_t I = 0; I < KeyLength; I++) // Use 0x36 padding for inner digest.
+ KeyBuf[I] = Key[I] ^ 0x36;
+ for (size_t I = KeyLength; I < Sha256BlockSize; I++)
+ KeyBuf[I] = 0x36;
+
+ sha256_init(&ICtx);
+ sha256_process(&ICtx, KeyBuf, Sha256BlockSize); // Hash padded key.
+ }
+
+ if (ICtxOpt!=NULL && !*SetIOpt) // Store constant context for further reuse.
+ {
+ *ICtxOpt=ICtx;
+ *SetIOpt=true;
+ }
+
sha256_process(&ICtx, Data, DataLength); // Hash data.
byte IDig[SHA256_DIGEST_SIZE]; // Internal digest for padded key and data.
sha256_done(&ICtx, IDig);
sha256_context RCtx;
- sha256_init(&RCtx);
- for (size_t I = 0; I < KeyLength; I++) // Use 0x5c for outer key padding.
- KeyBuf[I] = Key[I] ^ 0x5c;
- for (size_t I = KeyLength; I < Sha256BlockSize; I++)
- KeyBuf[I] = 0x5c;
+ if (RCtxOpt!=NULL && *SetROpt)
+ RCtx=*RCtxOpt; // Use already calculated first block context.
+ else
+ {
+ // This calculation is the same for all iterations with same password.
+ // So for PBKDF2 we can calculate it only for first block and then reuse
+ // to improve performance.
+
+ for (size_t I = 0; I < KeyLength; I++) // Use 0x5c for outer key padding.
+ KeyBuf[I] = Key[I] ^ 0x5c;
+ for (size_t I = KeyLength; I < Sha256BlockSize; I++)
+ KeyBuf[I] = 0x5c;
+
+ sha256_init(&RCtx);
+ sha256_process(&RCtx, KeyBuf, Sha256BlockSize); // Hash padded key.
+ }
+
+ if (RCtxOpt!=NULL && !*SetROpt) // Store constant context for further reuse.
+ {
+ *RCtxOpt=RCtx;
+ *SetROpt=true;
+ }
- sha256_process(&RCtx, KeyBuf, Sha256BlockSize); // Hash padded key.
sha256_process(&RCtx, IDig, SHA256_DIGEST_SIZE); // Hash internal digest.
sha256_done(&RCtx, ResDigest);
@@ -53,39 +88,43 @@ void pbkdf2(const byte *Pwd, size_t PwdLength,
{
const size_t MaxSalt=64;
byte SaltData[MaxSalt+4];
- memcpy(SaltData, Salt, Min(SaltLength,MaxSalt));
+ memcpy(SaltData, Salt, Min(SaltLength,MaxSalt));
- SaltData[SaltLength + 0] = 0; // Salt concatenated to 1.
- SaltData[SaltLength + 1] = 0;
- SaltData[SaltLength + 2] = 0;
- SaltData[SaltLength + 3] = 1;
+ SaltData[SaltLength + 0] = 0; // Salt concatenated to 1.
+ SaltData[SaltLength + 1] = 0;
+ SaltData[SaltLength + 2] = 0;
+ SaltData[SaltLength + 3] = 1;
// First iteration: HMAC of password, salt and block index (1).
byte U1[SHA256_DIGEST_SIZE];
- hmac_sha256(Pwd, PwdLength, SaltData, SaltLength + 4, U1);
+ hmac_sha256(Pwd, PwdLength, SaltData, SaltLength + 4, U1, NULL, NULL, NULL, NULL);
byte Fn[SHA256_DIGEST_SIZE]; // Current function value.
- memcpy(Fn, U1, sizeof(Fn)); // Function at first iteration.
+ memcpy(Fn, U1, sizeof(Fn)); // Function at first iteration.
uint CurCount[] = { Count-1, 16, 16 };
byte *CurValue[] = { Key , V1, V2 };
+ sha256_context ICtxOpt,RCtxOpt;
+ bool SetIOpt=false,SetROpt=false;
+
byte U2[SHA256_DIGEST_SIZE];
for (uint I = 0; I < 3; I++) // For output key and 2 supplementary values.
{
- for (uint J = 0; J < CurCount[I]; J++)
+ for (uint J = 0; J < CurCount[I]; J++)
{
- hmac_sha256(Pwd, PwdLength, U1, sizeof(U1), U2); // U2 = PRF (P, U1).
- memcpy(U1, U2, sizeof(U1));
- for (uint K = 0; K < sizeof(Fn); K++) // Function ^= U.
- Fn[K] ^= U1[K];
- }
- memcpy(CurValue[I], Fn, SHA256_DIGEST_SIZE);
+ // U2 = PRF (P, U1).
+ hmac_sha256(Pwd, PwdLength, U1, sizeof(U1), U2, &ICtxOpt, &SetIOpt, &RCtxOpt, &SetROpt);
+ memcpy(U1, U2, sizeof(U1));
+ for (uint K = 0; K < sizeof(Fn); K++) // Function ^= U.
+ Fn[K] ^= U1[K];
+ }
+ memcpy(CurValue[I], Fn, SHA256_DIGEST_SIZE);
}
- cleandata(SaltData, sizeof(SaltData));
+ cleandata(SaltData, sizeof(SaltData));
cleandata(Fn, sizeof(Fn));
- cleandata(U1, sizeof(U1));
- cleandata(U2, sizeof(U2));
+ cleandata(U1, sizeof(U1));
+ cleandata(U2, sizeof(U2));
}
@@ -98,15 +137,14 @@ void CryptData::SetKey50(bool Encrypt,SecPassword *Password,const wchar *PwdW,
byte Key[32],PswCheckValue[SHA256_DIGEST_SIZE],HashKeyValue[SHA256_DIGEST_SIZE];
bool Found=false;
- for (uint I=0;I<ASIZE(KDFCache);I++)
+ for (uint I=0;I<ASIZE(KDF5Cache);I++)
{
- KDFCacheItem *Item=KDFCache+I;
+ KDF5CacheItem *Item=KDF5Cache+I;
if (Item->Lg2Count==Lg2Cnt && Item->Pwd==*Password &&
memcmp(Item->Salt,Salt,SIZE_SALT50)==0)
{
- SecHideData(Item->Key,sizeof(Item->Key),false);
memcpy(Key,Item->Key,sizeof(Key));
- SecHideData(Item->Key,sizeof(Item->Key),true);
+ SecHideData(Key,sizeof(Key),false,false);
memcpy(PswCheckValue,Item->PswCheckValue,sizeof(PswCheckValue));
memcpy(HashKeyValue,Item->HashKeyValue,sizeof(HashKeyValue));
@@ -123,14 +161,14 @@ void CryptData::SetKey50(bool Encrypt,SecPassword *Password,const wchar *PwdW,
pbkdf2((byte *)PwdUtf,strlen(PwdUtf),Salt,SIZE_SALT50,Key,HashKeyValue,PswCheckValue,(1<<Lg2Cnt));
cleandata(PwdUtf,sizeof(PwdUtf));
- KDFCacheItem *Item=KDFCache+(KDFCachePos++ % ASIZE(KDFCache));
+ KDF5CacheItem *Item=KDF5Cache+(KDF5CachePos++ % ASIZE(KDF5Cache));
Item->Lg2Count=Lg2Cnt;
Item->Pwd=*Password;
memcpy(Item->Salt,Salt,SIZE_SALT50);
- memcpy(Item->Key,Key,sizeof(Key));
+ memcpy(Item->Key,Key,sizeof(Item->Key));
memcpy(Item->PswCheckValue,PswCheckValue,sizeof(PswCheckValue));
memcpy(Item->HashKeyValue,HashKeyValue,sizeof(HashKeyValue));
- SecHideData(Item->Key,sizeof(Key),true);
+ SecHideData(Item->Key,sizeof(Item->Key),true,false);
}
if (HashKey!=NULL)
memcpy(HashKey,HashKeyValue,SHA256_DIGEST_SIZE);
@@ -158,7 +196,7 @@ void ConvertHashToMAC(HashValue *Value,byte *Key)
byte RawCRC[4];
RawPut4(Value->CRC32,RawCRC);
byte Digest[SHA256_DIGEST_SIZE];
- hmac_sha256(Key,SHA256_DIGEST_SIZE,RawCRC,sizeof(RawCRC),Digest);
+ hmac_sha256(Key,SHA256_DIGEST_SIZE,RawCRC,sizeof(RawCRC),Digest,NULL,NULL,NULL,NULL);
Value->CRC32=0;
for (uint I=0;I<ASIZE(Digest);I++)
Value->CRC32^=Digest[I] << ((I & 3) * 8);
@@ -166,7 +204,7 @@ void ConvertHashToMAC(HashValue *Value,byte *Key)
if (Value->Type==HASH_BLAKE2)
{
byte Digest[BLAKE2_DIGEST_SIZE];
- hmac_sha256(Key,BLAKE2_DIGEST_SIZE,Value->Digest,sizeof(Value->Digest),Digest);
+ hmac_sha256(Key,BLAKE2_DIGEST_SIZE,Value->Digest,sizeof(Value->Digest),Digest,NULL,NULL,NULL,NULL);
memcpy(Value->Digest,Digest,sizeof(Value->Digest));
}
}
diff --git a/src/thirdparty/unrar/dll.cpp b/src/thirdparty/unrar/dll.cpp
index 5617f45b2..d12c0b177 100644
--- a/src/thirdparty/unrar/dll.cpp
+++ b/src/thirdparty/unrar/dll.cpp
@@ -74,7 +74,7 @@ HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *r)
delete Data;
return NULL;
}
- if (!Data->Arc.IsArchive(false))
+ if (!Data->Arc.IsArchive(true))
{
if (Data->Cmd.DllError!=0)
r->OpenResult=Data->Cmd.DllError;
@@ -250,6 +250,17 @@ int PASCAL RARReadHeaderEx(HANDLE hArcData,struct RARHeaderDataEx *D)
D->UnpVer=Data->Arc.FileHead.UnpVer;
D->FileCRC=hd->FileHash.CRC32;
D->FileTime=hd->mtime.GetDos();
+
+ uint64 MRaw=hd->mtime.GetWin();
+ D->MtimeLow=(uint)MRaw;
+ D->MtimeHigh=(uint)(MRaw>>32);
+ uint64 CRaw=hd->ctime.GetWin();
+ D->CtimeLow=(uint)CRaw;
+ D->CtimeHigh=(uint)(CRaw>>32);
+ uint64 ARaw=hd->atime.GetWin();
+ D->AtimeLow=(uint)ARaw;
+ D->AtimeHigh=(uint)(ARaw>>32);
+
D->Method=hd->Method+0x30;
D->FileAttr=hd->FileAttr;
D->CmtSize=0;
@@ -271,7 +282,16 @@ int PASCAL RARReadHeaderEx(HANDLE hArcData,struct RARHeaderDataEx *D)
D->HashType=RAR_HASH_NONE;
break;
}
-
+
+ D->RedirType=hd->RedirType;
+ // RedirNameSize sanity check is useful in case some developer
+ // did not initialize Reserved area with 0 as required in docs.
+ // We have taken 'Redir*' fields from Reserved area. We may remove
+ // this RedirNameSize check sometimes later.
+ if (hd->RedirType!=FSREDIR_NONE && D->RedirName!=NULL &&
+ D->RedirNameSize>0 && D->RedirNameSize<100000)
+ wcsncpyz(D->RedirName,hd->RedirName,D->RedirNameSize);
+ D->DirTarget=hd->DirTarget;
}
catch (RAR_EXIT ErrCode)
{
diff --git a/src/thirdparty/unrar/dll.hpp b/src/thirdparty/unrar/dll.hpp
index 9fd560939..7f8290660 100644
--- a/src/thirdparty/unrar/dll.hpp
+++ b/src/thirdparty/unrar/dll.hpp
@@ -31,7 +31,7 @@
#define RAR_VOL_ASK 0
#define RAR_VOL_NOTIFY 1
-#define RAR_DLL_VERSION 6
+#define RAR_DLL_VERSION 8
#define RAR_HASH_NONE 0
#define RAR_HASH_CRC32 1
@@ -98,7 +98,17 @@ struct RARHeaderDataEx
unsigned int DictSize;
unsigned int HashType;
char Hash[32];
- unsigned int Reserved[1014];
+ unsigned int RedirType;
+ wchar_t *RedirName;
+ unsigned int RedirNameSize;
+ unsigned int DirTarget;
+ unsigned int MtimeLow;
+ unsigned int MtimeHigh;
+ unsigned int CtimeLow;
+ unsigned int CtimeHigh;
+ unsigned int AtimeLow;
+ unsigned int AtimeHigh;
+ unsigned int Reserved[988];
};
@@ -115,6 +125,16 @@ struct RAROpenArchiveData
typedef int (CALLBACK *UNRARCALLBACK)(UINT msg,LPARAM UserData,LPARAM P1,LPARAM P2);
+#define ROADF_VOLUME 0x0001
+#define ROADF_COMMENT 0x0002
+#define ROADF_LOCK 0x0004
+#define ROADF_SOLID 0x0008
+#define ROADF_NEWNUMBERING 0x0010
+#define ROADF_SIGNED 0x0020
+#define ROADF_RECOVERY 0x0040
+#define ROADF_ENCHEADERS 0x0080
+#define ROADF_FIRSTVOLUME 0x0100
+
struct RAROpenArchiveDataEx
{
char *ArcName;
diff --git a/src/thirdparty/unrar/dll.rc b/src/thirdparty/unrar/dll.rc
index aedb0fc5e..dd689562c 100644
--- a/src/thirdparty/unrar/dll.rc
+++ b/src/thirdparty/unrar/dll.rc
@@ -2,8 +2,8 @@
#include <commctrl.h>
VS_VERSION_INFO VERSIONINFO
-FILEVERSION 5, 11, 1, 1315
-PRODUCTVERSION 5, 11, 1, 1315
+FILEVERSION 5, 50, 5, 2378
+PRODUCTVERSION 5, 50, 5, 2378
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
{
@@ -14,15 +14,15 @@ FILETYPE VFT_APP
VALUE "CompanyName", "Alexander Roshal\0"
VALUE "ProductName", "RAR decompression library\0"
VALUE "FileDescription", "RAR decompression library\0"
- VALUE "FileVersion", "5.11.1\0"
- VALUE "ProductVersion", "5.11.1\0"
- VALUE "LegalCopyright", "Copyright Alexander Roshal 1993-2014\0"
+ VALUE "FileVersion", "5.50.5\0"
+ VALUE "ProductVersion", "5.50.5\0"
+ VALUE "LegalCopyright", "Copyright Alexander Roshal 1993-2017\0"
VALUE "OriginalFilename", "Unrar.dll\0"
}
}
BLOCK "VarFileInfo"
{
- VALUE "Translation", 0, 0
+ VALUE "Translation", 0x0409, 0x04E4
}
}
diff --git a/src/thirdparty/unrar/errhnd.cpp b/src/thirdparty/unrar/errhnd.cpp
index 6486e400d..4ed1f0bc8 100644
--- a/src/thirdparty/unrar/errhnd.cpp
+++ b/src/thirdparty/unrar/errhnd.cpp
@@ -12,9 +12,9 @@ void ErrorHandler::Clean()
ErrCount=0;
EnableBreak=true;
Silent=false;
- DoShutdown=false;
UserBreak=false;
MainExit=false;
+ DisableShutdown=false;
}
@@ -64,7 +64,10 @@ bool ErrorHandler::AskRepeatRead(const wchar *FileName)
if (!Silent)
{
SysErrMsg();
- return uiAskRepeatRead(FileName);
+ bool Repeat=uiAskRepeatRead(FileName);
+ if (!Repeat) // Disable shutdown if user pressed Cancel in error dialog.
+ DisableShutdown=true;
+ return Repeat;
}
#endif
return false;
@@ -99,8 +102,13 @@ bool ErrorHandler::AskRepeatWrite(const wchar *FileName,bool DiskFull)
#ifndef SILENT
if (!Silent)
{
+ // We do not display "repeat write" prompt in Android, so we do not
+ // need the matching system error message.
SysErrMsg();
- return uiAskRepeatWrite(FileName,DiskFull);
+ bool Repeat=uiAskRepeatWrite(FileName,DiskFull);
+ if (!Repeat) // Disable shutdown if user pressed Cancel in error dialog.
+ DisableShutdown=true;
+ return Repeat;
}
#endif
return false;
@@ -125,16 +133,7 @@ void ErrorHandler::GeneralErrMsg(const wchar *fmt,...)
va_list arglist;
va_start(arglist,fmt);
wchar Msg[1024];
-#ifdef _ANDROID
- // vswprintf does not work in Android NDK. Conversion below should be ok
- // as long as we do not pass Unicode strings in arguments.
- char fmtA[NM],MsgA[ASIZE(Msg)];
- WideToChar(fmt,fmtA,ASIZE(fmtA));
- vsnprintf(MsgA,ASIZE(MsgA),fmtA,arglist);
- CharToWide(MsgA,Msg,ASIZE(Msg));
-#else
vswprintf(Msg,ASIZE(Msg),fmt,arglist);
-#endif
uiMsg(UIERROR_GENERALERRMSG,Msg);
SysErrMsg();
va_end(arglist);
@@ -221,9 +220,7 @@ void ErrorHandler::UnknownMethodMsg(const wchar *ArcName,const wchar *FileName)
void ErrorHandler::Exit(RAR_EXIT ExitCode)
{
-#ifndef GUI
uiAlarm(UIALARM_ERROR);
-#endif
Throw(ExitCode);
}
@@ -253,7 +250,6 @@ void ErrorHandler::SetErrorCode(RAR_EXIT Code)
}
-#ifndef GUI
#ifdef _WIN_ALL
BOOL __stdcall ProcessSignal(DWORD SigType)
#else
@@ -298,20 +294,17 @@ void _stdfunction ProcessSignal(int SigType)
return TRUE;
#endif
}
-#endif
void ErrorHandler::SetSignalHandlers(bool Enable)
{
EnableBreak=Enable;
-#ifndef GUI
#ifdef _WIN_ALL
SetConsoleCtrlHandler(Enable ? ProcessSignal:NULL,TRUE);
#else
signal(SIGINT,Enable ? ProcessSignal:SIG_IGN);
signal(SIGTERM,Enable ? ProcessSignal:SIG_IGN);
#endif
-#endif
}
@@ -319,7 +312,7 @@ void ErrorHandler::Throw(RAR_EXIT Code)
{
if (Code==RARX_USERBREAK && !EnableBreak)
return;
-#if !defined(GUI) && !defined(SILENT)
+#if !defined(SILENT)
// Do not write "aborted" when just displaying online help.
if (Code!=RARX_SUCCESS && Code!=RARX_USERERROR)
mprintf(L"\n%s\n",St(MProgAborted));
@@ -364,12 +357,6 @@ void ErrorHandler::SysErrMsg()
#if defined(_UNIX) || defined(_EMX)
if (errno!=0)
{
-#ifdef _ANDROID
- // Android NDK sets errno to confusing "not a typewriter" ENOTTY code
- // after write error reported by write().
- if (errno == ENOTTY)
- return;
-#endif
char *err=strerror(errno);
if (err!=NULL)
{
diff --git a/src/thirdparty/unrar/errhnd.hpp b/src/thirdparty/unrar/errhnd.hpp
index 1f5878d39..26df96d5b 100644
--- a/src/thirdparty/unrar/errhnd.hpp
+++ b/src/thirdparty/unrar/errhnd.hpp
@@ -25,7 +25,7 @@ class ErrorHandler
uint ErrCount;
bool EnableBreak;
bool Silent;
- bool DoShutdown;
+ bool DisableShutdown; // Shutdown is not suitable after last error.
public:
ErrorHandler();
void Clean();
@@ -57,11 +57,12 @@ class ErrorHandler
void SetSignalHandlers(bool Enable);
void Throw(RAR_EXIT Code);
void SetSilent(bool Mode) {Silent=Mode;};
- void SetShutdown(bool Mode) {DoShutdown=Mode;};
void SysErrMsg();
int GetSystemErrorCode();
void SetSystemErrorCode(int Code);
- bool UserBreak;
+ bool IsShutdownEnabled() {return !DisableShutdown;}
+
+ bool UserBreak; // Ctrl+Break is pressed.
bool MainExit; // main() is completed.
};
diff --git a/src/thirdparty/unrar/extinfo.cpp b/src/thirdparty/unrar/extinfo.cpp
index 141967f2a..fd6bd1340 100644
--- a/src/thirdparty/unrar/extinfo.cpp
+++ b/src/thirdparty/unrar/extinfo.cpp
@@ -17,9 +17,12 @@
+// RAR2 service header extra records.
#ifndef SFX_MODULE
void SetExtraInfo20(CommandData *Cmd,Archive &Arc,wchar *Name)
{
+ if (Cmd->Test)
+ return;
switch(Arc.SubBlockHead.SubType)
{
#ifdef _UNIX
@@ -42,22 +45,93 @@ void SetExtraInfo20(CommandData *Cmd,Archive &Arc,wchar *Name)
#endif
+// RAR3 and RAR5 service header extra records.
void SetExtraInfo(CommandData *Cmd,Archive &Arc,wchar *Name)
{
#ifdef _UNIX
- if (Cmd->ProcessOwners && Arc.Format==RARFMT15 &&
+ if (!Cmd->Test && Cmd->ProcessOwners && Arc.Format==RARFMT15 &&
Arc.SubHead.CmpName(SUBHEAD_TYPE_UOWNER))
ExtractUnixOwner30(Arc,Name);
#endif
#ifdef _WIN_ALL
- if (Cmd->ProcessOwners && Arc.SubHead.CmpName(SUBHEAD_TYPE_ACL))
+ if (!Cmd->Test && Cmd->ProcessOwners && Arc.SubHead.CmpName(SUBHEAD_TYPE_ACL))
ExtractACL(Arc,Name);
if (Arc.SubHead.CmpName(SUBHEAD_TYPE_STREAM))
- ExtractStreams(Arc,Name);
+ ExtractStreams(Arc,Name,Cmd->Test);
#endif
}
+// Extra data stored directly in file header.
+void SetFileHeaderExtra(CommandData *Cmd,Archive &Arc,wchar *Name)
+{
+#ifdef _UNIX
+ if (Cmd->ProcessOwners && Arc.Format==RARFMT50 && Arc.FileHead.UnixOwnerSet)
+ SetUnixOwner(Arc,Name);
+#endif
+}
+
+
+
+
+// Calculate a number of path components except \. and \..
+static int CalcAllowedDepth(const wchar *Name)
+{
+ int AllowedDepth=0;
+ while (*Name!=0)
+ {
+ if (IsPathDiv(Name[0]) && Name[1]!=0 && !IsPathDiv(Name[1]))
+ {
+ bool Dot=Name[1]=='.' && (IsPathDiv(Name[2]) || Name[2]==0);
+ bool Dot2=Name[1]=='.' && Name[2]=='.' && (IsPathDiv(Name[3]) || Name[3]==0);
+ if (!Dot && !Dot2)
+ AllowedDepth++;
+ }
+ Name++;
+ }
+ return AllowedDepth;
+}
+
+
+bool IsRelativeSymlinkSafe(CommandData *Cmd,const wchar *SrcName,const wchar *PrepSrcName,const wchar *TargetName)
+{
+ // Catch root dir based /path/file paths also as stuff like \\?\.
+ // Do not check PrepSrcName here, it can be root based if destination path
+ // is a root based.
+ if (IsFullRootPath(SrcName) || IsFullRootPath(TargetName))
+ return false;
+
+ // We could check just prepared src name, but for extra safety
+ // we check both original (as from archive header) and prepared
+ // (after applying the destination path and -ep switches) names.
+
+ int AllowedDepth=CalcAllowedDepth(SrcName); // Original name depth.
+
+ // Remove the destination path from prepared name if any. We should not
+ // count the destination path depth, because the link target must point
+ // inside of this path, not outside of it.
+ size_t ExtrPathLength=wcslen(Cmd->ExtrPath);
+ if (ExtrPathLength>0 && wcsncmp(PrepSrcName,Cmd->ExtrPath,ExtrPathLength)==0)
+ {
+ PrepSrcName+=ExtrPathLength;
+ while (IsPathDiv(*PrepSrcName))
+ PrepSrcName++;
+ }
+ int PrepAllowedDepth=CalcAllowedDepth(PrepSrcName);
+
+ // Number of ".." in link target.
+ int UpLevels=0;
+ for (int Pos=0;*TargetName!=0;Pos++)
+ {
+ bool Dot2=TargetName[0]=='.' && TargetName[1]=='.' &&
+ (IsPathDiv(TargetName[2]) || TargetName[2]==0) &&
+ (Pos==0 || IsPathDiv(*(TargetName-1)));
+ if (Dot2)
+ UpLevels++;
+ TargetName++;
+ }
+ return AllowedDepth>=UpLevels && PrepAllowedDepth>=UpLevels;
+}
bool ExtractSymlink(CommandData *Cmd,ComprDataIO &DataIO,Archive &Arc,const wchar *LinkName)
@@ -65,9 +139,9 @@ bool ExtractSymlink(CommandData *Cmd,ComprDataIO &DataIO,Archive &Arc,const wcha
#if defined(SAVE_LINKS) && defined(_UNIX)
// For RAR 3.x archives we process links even in test mode to skip link data.
if (Arc.Format==RARFMT15)
- return ExtractUnixLink30(DataIO,Arc,LinkName);
+ return ExtractUnixLink30(Cmd,DataIO,Arc,LinkName);
if (Arc.Format==RARFMT50)
- return ExtractUnixLink50(LinkName,&Arc.FileHead);
+ return ExtractUnixLink50(Cmd,LinkName,&Arc.FileHead);
#elif defined _WIN_ALL
// RAR 5.0 archives store link information in file header, so there is
// no need to additionally test it if we do not create a file.
diff --git a/src/thirdparty/unrar/extinfo.hpp b/src/thirdparty/unrar/extinfo.hpp
index 224564da8..2b0005daa 100644
--- a/src/thirdparty/unrar/extinfo.hpp
+++ b/src/thirdparty/unrar/extinfo.hpp
@@ -1,6 +1,7 @@
#ifndef _RAR_EXTINFO_
#define _RAR_EXTINFO_
+bool IsRelativeSymlinkSafe(CommandData *Cmd,const wchar *SrcName,const wchar *PrepSrcName,const wchar *TargetName);
bool ExtractSymlink(CommandData *Cmd,ComprDataIO &DataIO,Archive &Arc,const wchar *LinkName);
#ifdef _UNIX
void SetUnixOwner(Archive &Arc,const wchar *FileName);
@@ -16,5 +17,7 @@ bool SetPrivilege(LPCTSTR PrivName);
void SetExtraInfo20(CommandData *Cmd,Archive &Arc,wchar *Name);
void SetExtraInfo(CommandData *Cmd,Archive &Arc,wchar *Name);
+void SetFileHeaderExtra(CommandData *Cmd,Archive &Arc,wchar *Name);
+
#endif
diff --git a/src/thirdparty/unrar/extract.cpp b/src/thirdparty/unrar/extract.cpp
index 770cae4d7..f9461136b 100644
--- a/src/thirdparty/unrar/extract.cpp
+++ b/src/thirdparty/unrar/extract.cpp
@@ -1,1074 +1,1167 @@
-#include "rar.hpp"
-
-CmdExtract::CmdExtract(CommandData *Cmd)
-{
- CmdExtract::Cmd=Cmd;
-
- *ArcName=0;
-
- *DestFileName=0;
-
- TotalFileCount=0;
- Password.Set(L"");
- Unp=new Unpack(&DataIO);
-#ifdef RAR_SMP
- Unp->SetThreads(Cmd->Threads);
-#endif
-}
-
-
-CmdExtract::~CmdExtract()
-{
- delete Unp;
-}
-
-
-void CmdExtract::DoExtract()
-{
- PasswordCancelled=false;
- DataIO.SetCurrentCommand(Cmd->Command[0]);
-
- FindData FD;
- while (Cmd->GetArcName(ArcName,ASIZE(ArcName)))
- if (FindFile::FastFind(ArcName,&FD))
- DataIO.TotalArcSize+=FD.Size;
-
- Cmd->ArcNames.Rewind();
- while (Cmd->GetArcName(ArcName,ASIZE(ArcName)))
- {
- while (true)
- {
- SecPassword PrevCmdPassword;
- PrevCmdPassword=Cmd->Password;
-
- EXTRACT_ARC_CODE Code=ExtractArchive();
-
- // Restore Cmd->Password, which could be changed in IsArchive() call
- // for next header encrypted archive.
- Cmd->Password=PrevCmdPassword;
-
- if (Code!=EXTRACT_ARC_REPEAT)
- break;
- }
- if (FindFile::FastFind(ArcName,&FD))
- DataIO.ProcessedArcSize+=FD.Size;
- }
-
- if (TotalFileCount==0 && Cmd->Command[0]!='I' &&
- ErrHandler.GetErrorCode()!=RARX_BADPWD) // Not in case of wrong archive password.
- {
- if (!PasswordCancelled)
- uiMsg(UIERROR_NOFILESTOEXTRACT,ArcName);
- ErrHandler.SetErrorCode(RARX_NOFILES);
- }
-#ifndef GUI
- else
- if (!Cmd->DisableDone)
- if (Cmd->Command[0]=='I')
- mprintf(St(MDone));
- else
- if (ErrHandler.GetErrorCount()==0)
- mprintf(St(MExtrAllOk));
- else
- mprintf(St(MExtrTotalErr),ErrHandler.GetErrorCount());
-#endif
-}
-
-
-void CmdExtract::ExtractArchiveInit(Archive &Arc)
-{
- DataIO.UnpArcSize=Arc.FileLength();
-
- FileCount=0;
- MatchedArgs=0;
-#ifndef SFX_MODULE
- FirstFile=true;
-#endif
-
- PasswordAll=(Cmd->Password.IsSet());
- if (PasswordAll)
- Password=Cmd->Password;
-
- DataIO.UnpVolume=false;
-
- PrevExtracted=false;
- AllMatchesExact=true;
- ReconstructDone=false;
- AnySolidDataUnpackedWell=false;
-
- StartTime.SetCurrentTime();
-}
-
-
-EXTRACT_ARC_CODE CmdExtract::ExtractArchive()
-{
- Archive Arc(Cmd);
- if (!Arc.WOpen(ArcName))
- return EXTRACT_ARC_NEXT;
-
- if (!Arc.IsArchive(true))
- {
-#ifndef GUI
- mprintf(St(MNotRAR),ArcName);
-#endif
- if (CmpExt(ArcName,L"rar"))
- ErrHandler.SetErrorCode(RARX_WARNING);
- return EXTRACT_ARC_NEXT;
- }
-
- if (Arc.FailedHeaderDecryption) // Bad archive password.
- return EXTRACT_ARC_NEXT;
-
-#ifndef SFX_MODULE
- if (Arc.Volume && !Arc.FirstVolume)
- {
- wchar FirstVolName[NM];
- VolNameToFirstName(ArcName,FirstVolName,ASIZE(FirstVolName),Arc.NewNumbering);
-
- // If several volume names from same volume set are specified
- // and current volume is not first in set and first volume is present
- // and specified too, let's skip the current volume.
- if (wcsicomp(ArcName,FirstVolName)!=0 && FileExist(FirstVolName) &&
- Cmd->ArcNames.Search(FirstVolName,false))
- return EXTRACT_ARC_NEXT;
- }
-#endif
-
- int64 VolumeSetSize=0; // Total size of volumes after the current volume.
-
- if (Arc.Volume)
- {
- // Calculate the total size of all accessible volumes.
- // This size is necessary to display the correct total progress indicator.
-
- wchar NextName[NM];
- wcscpy(NextName,Arc.FileName);
-
- while (true)
- {
- // First volume is already added to DataIO.TotalArcSize
- // in initial TotalArcSize calculation in DoExtract.
- // So we skip it and start from second volume.
- NextVolumeName(NextName,ASIZE(NextName),!Arc.NewNumbering);
- FindData FD;
- if (FindFile::FastFind(NextName,&FD))
- VolumeSetSize+=FD.Size;
- else
- break;
- }
- DataIO.TotalArcSize+=VolumeSetSize;
- }
-
- ExtractArchiveInit(Arc);
-
- if (*Cmd->Command=='T' || *Cmd->Command=='I')
- Cmd->Test=true;
-
-
- if (*Cmd->Command=='I')
- {
-#ifndef GUI
- Cmd->DisablePercentage=true;
-#endif
- }
- else
- uiStartArchiveExtract(!Cmd->Test,ArcName);
-
- Arc.ViewComment();
-
-
- while (1)
- {
- size_t Size=Arc.ReadHeader();
-
-
- bool Repeat=false;
- if (!ExtractCurrentFile(Arc,Size,Repeat))
- if (Repeat)
- {
- // If we started extraction from not first volume and need to
- // restart it from first, we must correct DataIO.TotalArcSize
- // for correct total progress display. We subtract the size
- // of current volume and all volumes after it and add the size
- // of new (first) volume.
- FindData OldArc,NewArc;
- if (FindFile::FastFind(Arc.FileName,&OldArc) &&
- FindFile::FastFind(ArcName,&NewArc))
- DataIO.TotalArcSize-=VolumeSetSize+OldArc.Size-NewArc.Size;
- return EXTRACT_ARC_REPEAT;
- }
- else
- break;
- }
-
-
- return EXTRACT_ARC_NEXT;
-}
-
-
-bool CmdExtract::ExtractCurrentFile(Archive &Arc,size_t HeaderSize,bool &Repeat)
-{
- wchar Command=Cmd->Command[0];
- if (HeaderSize==0)
- if (DataIO.UnpVolume)
- {
-#ifdef NOVOLUME
- return false;
-#else
- if (!MergeArchive(Arc,&DataIO,false,Command))
- {
- ErrHandler.SetErrorCode(RARX_WARNING);
- return false;
- }
-#endif
- }
- else
- return false;
- HEADER_TYPE HeaderType=Arc.GetHeaderType();
- if (HeaderType!=HEAD_FILE)
- {
-#ifndef SFX_MODULE
- if (HeaderType==HEAD3_OLDSERVICE && PrevExtracted)
- SetExtraInfo20(Cmd,Arc,DestFileName);
-#endif
- if (HeaderType==HEAD_SERVICE && PrevExtracted)
- SetExtraInfo(Cmd,Arc,DestFileName);
- if (HeaderType==HEAD_ENDARC)
- if (Arc.EndArcHead.NextVolume)
- {
-#ifndef NOVOLUME
- if (!MergeArchive(Arc,&DataIO,false,Command))
- {
- ErrHandler.SetErrorCode(RARX_WARNING);
- return false;
- }
-#endif
- Arc.Seek(Arc.CurBlockPos,SEEK_SET);
- return true;
- }
- else
- return false;
- Arc.SeekToNext();
- return true;
- }
- PrevExtracted=false;
-
- if (!Cmd->Recurse && MatchedArgs>=Cmd->FileArgs.ItemsCount() && AllMatchesExact)
- return false;
-
- int MatchType=MATCH_WILDSUBPATH;
-
- bool EqualNames=false;
- int MatchNumber=Cmd->IsProcessFile(Arc.FileHead,&EqualNames,MatchType);
- bool ExactMatch=MatchNumber!=0;
-#ifndef SFX_MODULE
- if (Cmd->ExclPath==EXCL_BASEPATH)
- {
- *Cmd->ArcPath=0;
- if (ExactMatch)
- {
- Cmd->FileArgs.Rewind();
- if (Cmd->FileArgs.GetString(Cmd->ArcPath,ASIZE(Cmd->ArcPath),MatchNumber-1))
- *PointToName(Cmd->ArcPath)=0;
- }
- }
-#endif
- if (ExactMatch && !EqualNames)
- AllMatchesExact=false;
-
- Arc.ConvertAttributes();
-
-#if !defined(SFX_MODULE) && !defined(RARDLL)
- if (Arc.FileHead.SplitBefore && FirstFile)
- {
- wchar CurVolName[NM];
- wcsncpyz(CurVolName,ArcName,ASIZE(CurVolName));
- VolNameToFirstName(ArcName,ArcName,ASIZE(ArcName),Arc.NewNumbering);
-
- if (wcsicomp(ArcName,CurVolName)!=0 && FileExist(ArcName))
- {
- // If first volume name does not match the current name and if such
- // volume name really exists, let's unpack from this first volume.
- Repeat=true;
- return false;
- }
-#ifndef RARDLL
- if (!ReconstructDone)
- {
- ReconstructDone=true;
- if (RecVolumesRestore(Cmd,Arc.FileName,true))
- {
- Repeat=true;
- return false;
- }
- }
-#endif
- wcsncpyz(ArcName,CurVolName,ASIZE(ArcName));
- }
-#endif
-
- wchar ArcFileName[NM];
- ConvertPath(Arc.FileHead.FileName,ArcFileName);
-
- if (Arc.FileHead.Version)
- {
- if (Cmd->VersionControl!=1 && !EqualNames)
- {
- if (Cmd->VersionControl==0)
- ExactMatch=false;
- int Version=ParseVersionFileName(ArcFileName,false);
- if (Cmd->VersionControl-1==Version)
- ParseVersionFileName(ArcFileName,true);
- else
- ExactMatch=false;
- }
- }
- else
- if (!Arc.IsArcDir() && Cmd->VersionControl>1)
- ExactMatch=false;
-
- DataIO.UnpVolume=Arc.FileHead.SplitAfter;
- DataIO.NextVolumeMissing=false;
-
- Arc.Seek(Arc.NextBlockPos-Arc.FileHead.PackSize,SEEK_SET);
-
- bool ExtrFile=false;
- bool SkipSolid=false;
-
-#ifndef SFX_MODULE
- if (FirstFile && (ExactMatch || Arc.Solid) && Arc.FileHead.SplitBefore)
- {
- if (ExactMatch)
- {
- uiMsg(UIERROR_NEEDPREVVOL,Arc.FileName,ArcFileName);
-#ifdef RARDLL
- Cmd->DllError=ERAR_BAD_DATA;
-#endif
- ErrHandler.SetErrorCode(RARX_OPEN);
- }
- ExactMatch=false;
- }
-
- FirstFile=false;
-#endif
-
- if (ExactMatch || (SkipSolid=Arc.Solid)!=0)
- {
- // First common call of uiStartFileExtract. It is done before overwrite
- // prompts, so if SkipSolid state is changed below, we'll need to make
- // additional uiStartFileExtract calls with updated parameters.
- if (!uiStartFileExtract(ArcFileName,!Cmd->Test,Cmd->Test && Command!='I',SkipSolid))
- return false;
-
- ExtrPrepareName(Arc,ArcFileName,DestFileName,ASIZE(DestFileName));
-
- // DestFileName can be set empty in case of excessive -ap switch.
- ExtrFile=!SkipSolid && *DestFileName!=0 && !Arc.FileHead.SplitBefore;
-
- if ((Cmd->FreshFiles || Cmd->UpdateFiles) && (Command=='E' || Command=='X'))
- {
- FindData FD;
- if (FindFile::FastFind(DestFileName,&FD))
- {
- if (FD.mtime >= Arc.FileHead.mtime)
- {
- // If directory already exists and its modification time is newer
- // than start of extraction, it is likely it was created
- // when creating a path to one of already extracted items.
- // In such case we'll better update its time even if archived
- // directory is older.
-
- if (!FD.IsDir || FD.mtime<StartTime)
- ExtrFile=false;
- }
- }
- else
- if (Cmd->FreshFiles)
- ExtrFile=false;
- }
-
- if (Arc.FileHead.Encrypted)
- {
-#ifdef RARDLL
- if (!ExtrDllGetPassword())
- return false;
-#else
- if (!ExtrGetPassword(Arc,ArcFileName))
- {
- PasswordCancelled=true;
- return false;
- }
-#endif
- // Skip only the current encrypted file if empty password is entered.
- if (!Password.IsSet())
- {
- ErrHandler.SetErrorCode(RARX_WARNING);
-#ifdef RARDLL
- Cmd->DllError=ERAR_MISSING_PASSWORD;
-#endif
- ExtrFile=false;
- }
- }
-
-#ifdef RARDLL
- if (*Cmd->DllDestName!=0)
- {
- wcsncpyz(DestFileName,Cmd->DllDestName,ASIZE(DestFileName));
-
-// Do we need this code?
-// if (Cmd->DllOpMode!=RAR_EXTRACT)
-// ExtrFile=false;
- }
-#endif
-
- if (!CheckUnpVer(Arc,ArcFileName))
- {
- ExtrFile=false;
- ErrHandler.SetErrorCode(RARX_FATAL);
-#ifdef RARDLL
- Cmd->DllError=ERAR_UNKNOWN_FORMAT;
-#endif
- }
-
-
- File CurFile;
-
- bool LinkEntry=Arc.FileHead.RedirType!=FSREDIR_NONE;
- if (LinkEntry && Arc.FileHead.RedirType!=FSREDIR_FILECOPY)
- {
- if (ExtrFile && Command!='P' && !Cmd->Test)
- {
- // Overwrite prompt for symbolic and hard links.
- bool UserReject=false;
- if (FileExist(DestFileName) && !UserReject)
- FileCreate(Cmd,NULL,DestFileName,ASIZE(DestFileName),&UserReject,Arc.FileHead.UnpSize,&Arc.FileHead.mtime);
- if (UserReject)
- ExtrFile=false;
- }
- }
- else
- if (Arc.IsArcDir())
- {
- if (!ExtrFile || Command=='P' || Command=='I' || Command=='E' || Cmd->ExclPath==EXCL_SKIPWHOLEPATH)
- return true;
- TotalFileCount++;
- ExtrCreateDir(Arc,ArcFileName);
- return true;
- }
- else
- if (ExtrFile) // Create files and file copies (FSREDIR_FILECOPY).
- ExtrFile=ExtrCreateFile(Arc,CurFile);
-
- if (!ExtrFile && Arc.Solid)
- {
- SkipSolid=true;
- ExtrFile=true;
-
- // We changed SkipSolid, so we need to call uiStartFileExtract
- // with "Skip" parameter to change the operation status
- // from "extracting" to "skipping". For example, it can be necessary
- // if user answered "No" to overwrite prompt when unpacking
- // a solid archive.
- if (!uiStartFileExtract(ArcFileName,false,false,true))
- return false;
- }
- if (ExtrFile)
- {
- bool TestMode=Cmd->Test || SkipSolid; // Unpack to memory, not to disk.
-
- if (!SkipSolid)
- {
- if (!TestMode && Command!='P' && CurFile.IsDevice())
- {
- uiMsg(UIERROR_INVALIDNAME,Arc.FileName,DestFileName);
- ErrHandler.WriteError(Arc.FileName,DestFileName);
- }
- TotalFileCount++;
- }
- FileCount++;
-#ifndef GUI
- if (Command!='I')
- if (SkipSolid)
- mprintf(St(MExtrSkipFile),ArcFileName);
- else
- switch(Cmd->Test ? 'T':Command) // "Test" can be also enabled by -t switch.
- {
- case 'T':
- mprintf(St(MExtrTestFile),ArcFileName);
- break;
-#ifndef SFX_MODULE
- case 'P':
- mprintf(St(MExtrPrinting),ArcFileName);
- break;
-#endif
- case 'X':
- case 'E':
- mprintf(St(MExtrFile),DestFileName);
- break;
- }
- if (!Cmd->DisablePercentage)
- mprintf(L" ");
-#endif
-
- SecPassword FilePassword=Password;
-#if defined(_WIN_ALL) && !defined(SFX_MODULE)
- ConvertDosPassword(Arc,FilePassword);
-#endif
-
- byte PswCheck[SIZE_PSWCHECK];
- DataIO.SetEncryption(false,Arc.FileHead.CryptMethod,&FilePassword,
- Arc.FileHead.SaltSet ? Arc.FileHead.Salt:NULL,
- Arc.FileHead.InitV,Arc.FileHead.Lg2Count,
- PswCheck,Arc.FileHead.HashKey);
- bool WrongPassword=false;
-
- // If header is damaged, we cannot rely on password check value,
- // because it can be damaged too.
- if (Arc.FileHead.Encrypted && Arc.FileHead.UsePswCheck &&
- memcmp(Arc.FileHead.PswCheck,PswCheck,SIZE_PSWCHECK)!=0 &&
- !Arc.BrokenHeader)
- {
- uiMsg(UIERROR_BADPSW,Arc.FileName);
- ErrHandler.SetErrorCode(RARX_BADPWD);
- WrongPassword=true;
- }
- DataIO.CurUnpRead=0;
- DataIO.CurUnpWrite=0;
- DataIO.UnpHash.Init(Arc.FileHead.FileHash.Type,Cmd->Threads);
- DataIO.PackedDataHash.Init(Arc.FileHead.FileHash.Type,Cmd->Threads);
- DataIO.SetPackedSizeToRead(Arc.FileHead.PackSize);
- DataIO.SetFiles(&Arc,&CurFile);
- DataIO.SetTestMode(TestMode);
- DataIO.SetSkipUnpCRC(SkipSolid);
- if (!TestMode && !WrongPassword && !Arc.BrokenHeader &&
- (Arc.FileHead.PackSize<<11)>Arc.FileHead.UnpSize &&
- (Arc.FileHead.UnpSize<100000000 || Arc.FileLength()>Arc.FileHead.PackSize))
- CurFile.Prealloc(Arc.FileHead.UnpSize);
-
- CurFile.SetAllowDelete(!Cmd->KeepBroken);
-
- bool FileCreateMode=!TestMode && !SkipSolid && Command!='P';
- bool ShowChecksum=true; // Display checksum verification result.
-
- bool LinkSuccess=true; // Assume success for test mode.
- if (LinkEntry)
- {
- FILE_SYSTEM_REDIRECT Type=Arc.FileHead.RedirType;
-
- if (Type==FSREDIR_HARDLINK || Type==FSREDIR_FILECOPY)
- {
- wchar NameExisting[NM];
- ExtrPrepareName(Arc,Arc.FileHead.RedirName,NameExisting,ASIZE(NameExisting));
- if (FileCreateMode && *NameExisting!=0) // *NameExisting can be 0 in case of excessive -ap switch.
- if (Type==FSREDIR_HARDLINK)
- LinkSuccess=ExtractHardlink(DestFileName,NameExisting,ASIZE(NameExisting));
- else
- LinkSuccess=ExtractFileCopy(CurFile,Arc.FileName,DestFileName,NameExisting,ASIZE(NameExisting));
- }
- else
- if (Type==FSREDIR_UNIXSYMLINK || Type==FSREDIR_WINSYMLINK || Type==FSREDIR_JUNCTION)
- {
- if (FileCreateMode)
- LinkSuccess=ExtractSymlink(Cmd,DataIO,Arc,DestFileName);
- }
- else
- {
- uiMsg(UIERROR_UNKNOWNEXTRA, Arc.FileName, DestFileName);
- LinkSuccess=false;
- }
-
- if (!LinkSuccess || Arc.Format==RARFMT15 && !FileCreateMode)
- {
- // RAR 5.x links have a valid data checksum even in case of
- // failure, because they do not store any data.
- // We do not want to display "OK" in this case.
- // For 4.x symlinks we verify the checksum only when extracting,
- // but not when testing an archive.
- ShowChecksum=false;
- }
- PrevExtracted=FileCreateMode && LinkSuccess;
- }
- else
- if (!Arc.FileHead.SplitBefore && !WrongPassword)
- if (Arc.FileHead.Method==0)
- UnstoreFile(DataIO,Arc.FileHead.UnpSize);
- else
- {
-#ifdef _ANDROID
- // malloc and new do not report memory allocation errors
- // in Android, so if free memory is set, check it here
- // trying to prevent crash.
- if (Cmd->FreeMem!=0 && Cmd->FreeMem < Arc.FileHead.WinSize)
- throw std::bad_alloc();
-#endif
- Unp->Init(Arc.FileHead.WinSize,Arc.FileHead.Solid);
- Unp->SetDestSize(Arc.FileHead.UnpSize);
-#ifndef SFX_MODULE
- if (Arc.Format!=RARFMT50 && Arc.FileHead.UnpVer<=15)
- Unp->DoUnpack(15,FileCount>1 && Arc.Solid);
- else
-#endif
- Unp->DoUnpack(Arc.FileHead.UnpVer,Arc.FileHead.Solid);
- }
-
- Arc.SeekToNext();
-
- // We check for "split after" flag to detect partially extracted files
- // from incomplete volume sets. For them file header contains packed
- // data hash, which must not be compared against unpacked data hash
- // to prevent accidental match. Moreover, for -m0 volumes packed data
- // hash would match truncated unpacked data hash and lead to fake "OK"
- // in incomplete volume set.
- bool ValidCRC=!Arc.FileHead.SplitAfter && DataIO.UnpHash.Cmp(&Arc.FileHead.FileHash,Arc.FileHead.UseHashKey ? Arc.FileHead.HashKey:NULL);
-
- // We set AnySolidDataUnpackedWell to true if we found at least one
- // valid non-zero solid file in preceding solid stream. If it is true
- // and if current encrypted file is broken, we do not need to hint
- // about a wrong password and can report CRC error only.
- if (!Arc.FileHead.Solid)
- AnySolidDataUnpackedWell=false; // Reset the flag, because non-solid file is found.
- else
- if (Arc.FileHead.Method!=0 && Arc.FileHead.UnpSize>0 && ValidCRC)
- AnySolidDataUnpackedWell=true;
-
- bool BrokenFile=false;
-
- // Checksum is not calculated in skip solid mode for performance reason.
- if (!SkipSolid && ShowChecksum)
- {
- if (!WrongPassword && ValidCRC)
- {
-#ifndef GUI
- if (Command!='P' && Command!='I')
- mprintf(L"%s%s ",Cmd->DisablePercentage ? L" ":L"\b\b\b\b\b ",
- Arc.FileHead.FileHash.Type==HASH_NONE ? L" ?":St(MOk));
-#endif
- }
- else
- {
- if (!WrongPassword)
- if (Arc.FileHead.Encrypted && (!Arc.FileHead.UsePswCheck ||
- Arc.BrokenHeader) && !AnySolidDataUnpackedWell)
- uiMsg(UIERROR_CHECKSUMENC,Arc.FileName,ArcFileName);
- else
- uiMsg(UIERROR_CHECKSUM,Arc.FileName,ArcFileName);
- BrokenFile=true;
- ErrHandler.SetErrorCode(RARX_CRC);
-#ifdef RARDLL
- // If we already have ERAR_EOPEN as result of missing volume,
- // we should not replace it with less precise ERAR_BAD_DATA.
- if (Cmd->DllError!=ERAR_EOPEN)
- Cmd->DllError=WrongPassword ? ERAR_BAD_PASSWORD : ERAR_BAD_DATA;
-#endif
- }
- }
-#ifndef GUI
- else
- mprintf(L"\b\b\b\b\b ");
-#endif
-
- if (!TestMode && !WrongPassword && (Command=='X' || Command=='E') &&
- (!LinkEntry || Arc.FileHead.RedirType==FSREDIR_FILECOPY && LinkSuccess) &&
- (!BrokenFile || Cmd->KeepBroken))
- {
- // We could preallocate more space that really written to broken file.
- if (BrokenFile)
- CurFile.Truncate();
-
-#if defined(_WIN_ALL) || defined(_EMX)
- if (Cmd->ClearArc)
- Arc.FileHead.FileAttr&=~FILE_ATTRIBUTE_ARCHIVE;
-#endif
-
-
- CurFile.SetOpenFileTime(
- Cmd->xmtime==EXTTIME_NONE ? NULL:&Arc.FileHead.mtime,
- Cmd->xctime==EXTTIME_NONE ? NULL:&Arc.FileHead.ctime,
- Cmd->xatime==EXTTIME_NONE ? NULL:&Arc.FileHead.atime);
- CurFile.Close();
-#if defined(_WIN_ALL) && !defined(SFX_MODULE)
- if (Cmd->SetCompressedAttr &&
- (Arc.FileHead.FileAttr & FILE_ATTRIBUTE_COMPRESSED)!=0)
- SetFileCompression(CurFile.FileName,true);
-#endif
-#ifdef _UNIX
- if (Cmd->ProcessOwners && Arc.Format==RARFMT50 && Arc.FileHead.UnixOwnerSet)
- SetUnixOwner(Arc,CurFile.FileName);
-#endif
-
- CurFile.SetCloseFileTime(
- Cmd->xmtime==EXTTIME_NONE ? NULL:&Arc.FileHead.mtime,
- Cmd->xatime==EXTTIME_NONE ? NULL:&Arc.FileHead.atime);
- if (!Cmd->IgnoreGeneralAttr && !SetFileAttr(CurFile.FileName,Arc.FileHead.FileAttr))
- uiMsg(UIERROR_FILEATTR,Arc.FileName,CurFile.FileName);
-
- PrevExtracted=true;
- }
- }
- }
- if (ExactMatch)
- MatchedArgs++;
- if (DataIO.NextVolumeMissing)
- return false;
- if (!ExtrFile)
- if (!Arc.Solid)
- Arc.SeekToNext();
- else
- if (!SkipSolid)
- return false;
- return true;
-}
-
-
-void CmdExtract::UnstoreFile(ComprDataIO &DataIO,int64 DestUnpSize)
-{
- // 512 KB and larger buffer reported to reduce performance on old XP
- // computers with WDC WD2000JD HDD. According to test made by user
- // 256 KB buffer is optimal.
- Array<byte> Buffer(0x40000);
- while (1)
- {
- uint Code=DataIO.UnpRead(&Buffer[0],Buffer.Size());
- if (Code==0 || (int)Code==-1)
- break;
- Code=Code<DestUnpSize ? Code:(uint)DestUnpSize;
- DataIO.UnpWrite(&Buffer[0],Code);
- if (DestUnpSize>=0)
- DestUnpSize-=Code;
- }
-}
-
-
-bool CmdExtract::ExtractFileCopy(File &New,wchar *ArcName,wchar *NameNew,wchar *NameExisting,size_t NameExistingSize)
-{
- SlashToNative(NameExisting,NameExisting,NameExistingSize); // Not needed for RAR 5.1+ archives.
-
- File Existing;
- if (!Existing.WOpen(NameExisting))
- {
- uiMsg(UIERROR_FILECOPY,ArcName,NameExisting,NameNew);
- uiMsg(UIERROR_FILECOPYHINT,ArcName);
-#ifdef RARDLL
- Cmd->DllError=ERAR_EREFERENCE;
-#endif
- return false;
- }
-
- Array<char> Buffer(0x100000);
- int64 CopySize=0;
-
- while (true)
- {
- Wait();
- int ReadSize=Existing.Read(&Buffer[0],Buffer.Size());
- if (ReadSize==0)
- break;
- New.Write(&Buffer[0],ReadSize);
- CopySize+=ReadSize;
- }
-
- return true;
-}
-
-
-void CmdExtract::ExtrPrepareName(Archive &Arc,const wchar *ArcFileName,wchar *DestName,size_t DestSize)
-{
- wcsncpyz(DestName,Cmd->ExtrPath,DestSize);
-
- // We need IsPathDiv check here to correctly handle Unix forward slash
- // in the end of destination path in Windows: rar x arc dest/
- if (*Cmd->ExtrPath!=0 && !IsPathDiv(*PointToLastChar(Cmd->ExtrPath)))
- {
- // Destination path can be without trailing slash if it come from GUI shell.
- AddEndSlash(DestName,DestSize);
- }
-
-#ifndef SFX_MODULE
- if (Cmd->AppendArcNameToPath)
- {
- wcsncatz(DestName,PointToName(Arc.FirstVolumeName),DestSize);
- SetExt(DestName,NULL,DestSize);
- AddEndSlash(DestName,DestSize);
- }
-#endif
-
-#ifndef SFX_MODULE
- size_t ArcPathLength=wcslen(Cmd->ArcPath);
- if (ArcPathLength>0)
- {
- size_t NameLength=wcslen(ArcFileName);
- ArcFileName+=Min(ArcPathLength,NameLength);
- while (*ArcFileName==CPATHDIVIDER)
- ArcFileName++;
- if (*ArcFileName==0) // Excessive -ap switch.
- {
- *DestName=0;
- return;
- }
- }
-#endif
-
- wchar Command=Cmd->Command[0];
- // Use -ep3 only in systems, where disk letters are exist, not in Unix.
- bool AbsPaths=Cmd->ExclPath==EXCL_ABSPATH && Command=='X' && IsDriveDiv(':');
-
- // We do not use any user specified destination paths when extracting
- // absolute paths in -ep3 mode.
- if (AbsPaths)
- *DestName=0;
-
- if (Command=='E' || Cmd->ExclPath==EXCL_SKIPWHOLEPATH)
- wcsncatz(DestName,PointToName(ArcFileName),DestSize);
- else
- wcsncatz(DestName,ArcFileName,DestSize);
-
- wchar DiskLetter=toupperw(DestName[0]);
-
- if (AbsPaths)
- {
- if (DestName[1]=='_' && IsPathDiv(DestName[2]) &&
- DiskLetter>='A' && DiskLetter<='Z')
- DestName[1]=':';
- else
- if (DestName[0]=='_' && DestName[1]=='_')
- {
- // Convert __server\share to \\server\share.
- DestName[0]=CPATHDIVIDER;
- DestName[1]=CPATHDIVIDER;
- }
- }
-}
-
-
-#ifdef RARDLL
-bool CmdExtract::ExtrDllGetPassword()
-{
- if (!Cmd->Password.IsSet())
- {
- if (Cmd->Callback!=NULL)
- {
- wchar PasswordW[MAXPASSWORD];
- *PasswordW=0;
- if (Cmd->Callback(UCM_NEEDPASSWORDW,Cmd->UserData,(LPARAM)PasswordW,ASIZE(PasswordW))==-1)
- *PasswordW=0;
- if (*PasswordW==0)
- {
- char PasswordA[MAXPASSWORD];
- *PasswordA=0;
- if (Cmd->Callback(UCM_NEEDPASSWORD,Cmd->UserData,(LPARAM)PasswordA,ASIZE(PasswordA))==-1)
- *PasswordA=0;
- GetWideName(PasswordA,NULL,PasswordW,ASIZE(PasswordW));
- cleandata(PasswordA,sizeof(PasswordA));
- }
- Cmd->Password.Set(PasswordW);
- cleandata(PasswordW,sizeof(PasswordW));
- }
- if (!Cmd->Password.IsSet())
- return false;
- }
- Password=Cmd->Password;
- return true;
-}
-#endif
-
-
-#ifndef RARDLL
-bool CmdExtract::ExtrGetPassword(Archive &Arc,const wchar *ArcFileName)
-{
- if (!Password.IsSet())
- {
- if (!uiGetPassword(UIPASSWORD_FILE,ArcFileName,&Password))
- {
- uiMsg(UIERROR_INCERRCOUNT);
-
- return false;
- }
- }
-#if !defined(GUI) && !defined(SILENT)
- else
- if (!PasswordAll && !Arc.FileHead.Solid)
- {
- eprintf(St(MUseCurPsw),ArcFileName);
- switch(Cmd->AllYes ? 1 : Ask(St(MYesNoAll)))
- {
- case -1:
- ErrHandler.Exit(RARX_USERBREAK);
- case 2:
- if (!uiGetPassword(UIPASSWORD_FILE,ArcFileName,&Password))
- return false;
- break;
- case 3:
- PasswordAll=true;
- break;
- }
- }
-#endif
- return true;
-}
-#endif
-
-
-#if defined(_WIN_ALL) && !defined(SFX_MODULE)
-void CmdExtract::ConvertDosPassword(Archive &Arc,SecPassword &DestPwd)
-{
- if (Arc.Format==RARFMT15 && Arc.FileHead.HostOS==HOST_MSDOS)
- {
- // We need the password in OEM encoding if file was encrypted by
- // native RAR/DOS (not extender based). Let's make the conversion.
- wchar PlainPsw[MAXPASSWORD];
- Password.Get(PlainPsw,ASIZE(PlainPsw));
- char PswA[MAXPASSWORD];
- CharToOemBuffW(PlainPsw,PswA,ASIZE(PswA));
- PswA[ASIZE(PswA)-1]=0;
- CharToWide(PswA,PlainPsw,ASIZE(PlainPsw));
- DestPwd.Set(PlainPsw);
- cleandata(PlainPsw,sizeof(PlainPsw));
- cleandata(PswA,sizeof(PswA));
- }
-}
-#endif
-
-
-void CmdExtract::ExtrCreateDir(Archive &Arc,const wchar *ArcFileName)
-{
- if (Cmd->Test)
- {
-#ifndef GUI
- mprintf(St(MExtrTestFile),ArcFileName);
- mprintf(L" %s",St(MOk));
-#endif
- return;
- }
-
- MKDIR_CODE MDCode=MakeDir(DestFileName,!Cmd->IgnoreGeneralAttr,Arc.FileHead.FileAttr);
- bool DirExist=false;
- if (MDCode!=MKDIR_SUCCESS)
- {
- DirExist=FileExist(DestFileName);
- if (DirExist && !IsDir(GetFileAttr(DestFileName)))
- {
- // File with name same as this directory exists. Propose user
- // to overwrite it.
- bool UserReject;
- FileCreate(Cmd,NULL,DestFileName,ASIZE(DestFileName),&UserReject,Arc.FileHead.UnpSize,&Arc.FileHead.mtime);
- DirExist=false;
- }
- if (!DirExist)
- {
- CreatePath(DestFileName,true);
- MDCode=MakeDir(DestFileName,!Cmd->IgnoreGeneralAttr,Arc.FileHead.FileAttr);
- }
- }
- if (MDCode==MKDIR_SUCCESS)
- {
-#ifndef GUI
- mprintf(St(MCreatDir),DestFileName);
- mprintf(L" %s",St(MOk));
-#endif
- PrevExtracted=true;
- }
- else
- if (DirExist)
- {
- if (!Cmd->IgnoreGeneralAttr)
- SetFileAttr(DestFileName,Arc.FileHead.FileAttr);
- PrevExtracted=true;
- }
- else
- {
- uiMsg(UIERROR_DIRCREATE,Arc.FileName,DestFileName);
- ErrHandler.SysErrMsg();
-#ifdef RARDLL
- Cmd->DllError=ERAR_ECREATE;
-#endif
- ErrHandler.SetErrorCode(RARX_CREATE);
- }
- if (PrevExtracted)
- {
-#if defined(_WIN_ALL) && !defined(SFX_MODULE)
- if (Cmd->SetCompressedAttr &&
- (Arc.FileHead.FileAttr & FILE_ATTRIBUTE_COMPRESSED)!=0 && WinNT())
- SetFileCompression(DestFileName,true);
-#endif
- SetDirTime(DestFileName,
- Cmd->xmtime==EXTTIME_NONE ? NULL:&Arc.FileHead.mtime,
- Cmd->xctime==EXTTIME_NONE ? NULL:&Arc.FileHead.ctime,
- Cmd->xatime==EXTTIME_NONE ? NULL:&Arc.FileHead.atime);
- }
-}
-
-
-bool CmdExtract::ExtrCreateFile(Archive &Arc,File &CurFile)
-{
- bool Success=true;
- wchar Command=Cmd->Command[0];
-#if !defined(GUI) && !defined(SFX_MODULE)
- if (Command=='P')
- CurFile.SetHandleType(FILE_HANDLESTD);
-#endif
- if ((Command=='E' || Command=='X') && !Cmd->Test)
- {
- bool UserReject;
- // Specify "write only" mode to avoid OpenIndiana NAS problems
- // with SetFileTime and read+write files.
- if (!FileCreate(Cmd,&CurFile,DestFileName,ASIZE(DestFileName),&UserReject,Arc.FileHead.UnpSize,&Arc.FileHead.mtime,true))
- {
- Success=false;
- if (!UserReject)
- {
- ErrHandler.CreateErrorMsg(Arc.FileName,DestFileName);
-#ifdef RARDLL
- Cmd->DllError=ERAR_ECREATE;
-#endif
- if (!IsNameUsable(DestFileName))
- {
- uiMsg(UIMSG_CORRECTINGNAME,Arc.FileName);
-
- wchar OrigName[ASIZE(DestFileName)];
- wcsncpyz(OrigName,DestFileName,ASIZE(OrigName));
-
- MakeNameUsable(DestFileName,true);
-
- CreatePath(DestFileName,true);
- if (FileCreate(Cmd,&CurFile,DestFileName,ASIZE(DestFileName),&UserReject,Arc.FileHead.UnpSize,&Arc.FileHead.mtime,true))
- {
-#ifndef SFX_MODULE
- uiMsg(UIERROR_RENAMING,Arc.FileName,OrigName,DestFileName);
-#endif
- Success=true;
- }
- else
- ErrHandler.CreateErrorMsg(Arc.FileName,DestFileName);
- }
- }
- }
- }
- return Success;
-}
-
-
-bool CmdExtract::CheckUnpVer(Archive &Arc,const wchar *ArcFileName)
-{
- bool WrongVer;
- if (Arc.Format==RARFMT50) // Both SFX and RAR can unpack RAR 5.0 archives.
- WrongVer=Arc.FileHead.UnpVer>VER_UNPACK5;
- else
- {
-#ifdef SFX_MODULE // SFX can unpack only RAR 2.9 archives.
- WrongVer=Arc.FileHead.UnpVer!=VER_UNPACK;
-#else // All formats since 1.3 for RAR.
- WrongVer=Arc.FileHead.UnpVer<13 || Arc.FileHead.UnpVer>VER_UNPACK;
-#endif
- }
-
- // We can unpack stored files regardless of compression version field.
- if (Arc.FileHead.Method==0)
- WrongVer=false;
-
- if (WrongVer)
- {
- ErrHandler.UnknownMethodMsg(Arc.FileName,ArcFileName);
- uiMsg(UIERROR_NEWERRAR,Arc.FileName);
- }
- return !WrongVer;
-}
+#include "rar.hpp"
+
+CmdExtract::CmdExtract(CommandData *Cmd)
+{
+ CmdExtract::Cmd=Cmd;
+
+ *ArcName=0;
+
+ *DestFileName=0;
+
+ TotalFileCount=0;
+ Unp=new Unpack(&DataIO);
+#ifdef RAR_SMP
+ Unp->SetThreads(Cmd->Threads);
+#endif
+}
+
+
+CmdExtract::~CmdExtract()
+{
+ delete Unp;
+}
+
+
+void CmdExtract::DoExtract()
+{
+#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SILENT)
+ Fat32=NotFat32=false;
+#endif
+ PasswordCancelled=false;
+ DataIO.SetCurrentCommand(Cmd->Command[0]);
+
+ FindData FD;
+ while (Cmd->GetArcName(ArcName,ASIZE(ArcName)))
+ if (FindFile::FastFind(ArcName,&FD))
+ DataIO.TotalArcSize+=FD.Size;
+
+ Cmd->ArcNames.Rewind();
+ while (Cmd->GetArcName(ArcName,ASIZE(ArcName)))
+ {
+ if (Cmd->ManualPassword)
+ Cmd->Password.Clean(); // Clean user entered password before processing next archive.
+ while (true)
+ {
+ EXTRACT_ARC_CODE Code=ExtractArchive();
+ if (Code!=EXTRACT_ARC_REPEAT)
+ break;
+ }
+ if (FindFile::FastFind(ArcName,&FD))
+ DataIO.ProcessedArcSize+=FD.Size;
+ }
+
+ // Clean user entered password. Not really required, just for extra safety.
+ if (Cmd->ManualPassword)
+ Cmd->Password.Clean();
+
+ if (TotalFileCount==0 && Cmd->Command[0]!='I' &&
+ ErrHandler.GetErrorCode()!=RARX_BADPWD) // Not in case of wrong archive password.
+ {
+ if (!PasswordCancelled)
+ uiMsg(UIERROR_NOFILESTOEXTRACT,ArcName);
+ ErrHandler.SetErrorCode(RARX_NOFILES);
+ }
+ else
+ if (!Cmd->DisableDone)
+ if (Cmd->Command[0]=='I')
+ mprintf(St(MDone));
+ else
+ if (ErrHandler.GetErrorCount()==0)
+ mprintf(St(MExtrAllOk));
+ else
+ mprintf(St(MExtrTotalErr),ErrHandler.GetErrorCount());
+}
+
+
+void CmdExtract::ExtractArchiveInit(Archive &Arc)
+{
+ DataIO.UnpArcSize=Arc.FileLength();
+
+ FileCount=0;
+ MatchedArgs=0;
+#ifndef SFX_MODULE
+ FirstFile=true;
+#endif
+
+ PasswordAll=(Cmd->Password.IsSet());
+
+ DataIO.UnpVolume=false;
+
+ PrevProcessed=false;
+ AllMatchesExact=true;
+ ReconstructDone=false;
+ AnySolidDataUnpackedWell=false;
+
+ StartTime.SetCurrentTime();
+}
+
+
+EXTRACT_ARC_CODE CmdExtract::ExtractArchive()
+{
+ Archive Arc(Cmd);
+ if (!Arc.WOpen(ArcName))
+ return EXTRACT_ARC_NEXT;
+
+ if (!Arc.IsArchive(true))
+ {
+#if !defined(SFX_MODULE) && !defined(RARDLL)
+ if (CmpExt(ArcName,L"rev"))
+ {
+ wchar FirstVolName[NM];
+ VolNameToFirstName(ArcName,FirstVolName,ASIZE(FirstVolName),true);
+
+ // If several volume names from same volume set are specified
+ // and current volume is not first in set and first volume is present
+ // and specified too, let's skip the current volume.
+ if (wcsicomp(ArcName,FirstVolName)!=0 && FileExist(FirstVolName) &&
+ Cmd->ArcNames.Search(FirstVolName,false))
+ return EXTRACT_ARC_NEXT;
+ RecVolumesTest(Cmd,NULL,ArcName);
+ TotalFileCount++; // Suppress "No files to extract" message.
+ return EXTRACT_ARC_NEXT;
+ }
+#endif
+
+ mprintf(St(MNotRAR),ArcName);
+
+#ifndef SFX_MODULE
+ if (CmpExt(ArcName,L"rar"))
+#endif
+ ErrHandler.SetErrorCode(RARX_WARNING);
+ return EXTRACT_ARC_NEXT;
+ }
+
+ if (Arc.FailedHeaderDecryption) // Bad archive password.
+ return EXTRACT_ARC_NEXT;
+
+#ifndef SFX_MODULE
+ if (Arc.Volume && !Arc.FirstVolume)
+ {
+ wchar FirstVolName[NM];
+ VolNameToFirstName(ArcName,FirstVolName,ASIZE(FirstVolName),Arc.NewNumbering);
+
+ // If several volume names from same volume set are specified
+ // and current volume is not first in set and first volume is present
+ // and specified too, let's skip the current volume.
+ if (wcsicomp(ArcName,FirstVolName)!=0 && FileExist(FirstVolName) &&
+ Cmd->ArcNames.Search(FirstVolName,false))
+ return EXTRACT_ARC_NEXT;
+ }
+#endif
+
+ int64 VolumeSetSize=0; // Total size of volumes after the current volume.
+
+ if (Arc.Volume)
+ {
+ // Calculate the total size of all accessible volumes.
+ // This size is necessary to display the correct total progress indicator.
+
+ wchar NextName[NM];
+ wcscpy(NextName,Arc.FileName);
+
+ while (true)
+ {
+ // First volume is already added to DataIO.TotalArcSize
+ // in initial TotalArcSize calculation in DoExtract.
+ // So we skip it and start from second volume.
+ NextVolumeName(NextName,ASIZE(NextName),!Arc.NewNumbering);
+ FindData FD;
+ if (FindFile::FastFind(NextName,&FD))
+ VolumeSetSize+=FD.Size;
+ else
+ break;
+ }
+ DataIO.TotalArcSize+=VolumeSetSize;
+ }
+
+ ExtractArchiveInit(Arc);
+
+ if (*Cmd->Command=='T' || *Cmd->Command=='I')
+ Cmd->Test=true;
+
+
+ if (*Cmd->Command=='I')
+ {
+ Cmd->DisablePercentage=true;
+ }
+ else
+ uiStartArchiveExtract(!Cmd->Test,ArcName);
+
+ Arc.ViewComment();
+
+
+ while (1)
+ {
+ size_t Size=Arc.ReadHeader();
+
+
+ bool Repeat=false;
+ if (!ExtractCurrentFile(Arc,Size,Repeat))
+ if (Repeat)
+ {
+ // If we started extraction from not first volume and need to
+ // restart it from first, we must correct DataIO.TotalArcSize
+ // for correct total progress display. We subtract the size
+ // of current volume and all volumes after it and add the size
+ // of new (first) volume.
+ FindData OldArc,NewArc;
+ if (FindFile::FastFind(Arc.FileName,&OldArc) &&
+ FindFile::FastFind(ArcName,&NewArc))
+ DataIO.TotalArcSize-=VolumeSetSize+OldArc.Size-NewArc.Size;
+ return EXTRACT_ARC_REPEAT;
+ }
+ else
+ break;
+ }
+
+
+#if !defined(SFX_MODULE) && !defined(RARDLL)
+ if (Cmd->Test && Arc.Volume)
+ RecVolumesTest(Cmd,&Arc,ArcName);
+#endif
+
+ return EXTRACT_ARC_NEXT;
+}
+
+
+bool CmdExtract::ExtractCurrentFile(Archive &Arc,size_t HeaderSize,bool &Repeat)
+{
+ // We can get negative sizes in corrupt archive and it is unacceptable
+ // for size comparisons in CmdExtract::UnstoreFile and ComprDataIO::UnpRead,
+ // where we cast sizes to size_t and can exceed another read or available
+ // size. We could fix it when reading an archive. But we prefer to do it
+ // here, because this function is called directly in unrar.dll, so we fix
+ // bad parameters passed to dll. Also we want to see real negative sizes
+ // in the listing of corrupt archive.
+ if (Arc.FileHead.PackSize<0)
+ Arc.FileHead.PackSize=0;
+ if (Arc.FileHead.UnpSize<0)
+ Arc.FileHead.UnpSize=0;
+
+ wchar Command=Cmd->Command[0];
+ if (HeaderSize==0)
+ if (DataIO.UnpVolume)
+ {
+#ifdef NOVOLUME
+ return false;
+#else
+ // Supposing we unpack an old RAR volume without end of archive record
+ // and last file is not split between volumes.
+ if (!MergeArchive(Arc,&DataIO,false,Command))
+ {
+ ErrHandler.SetErrorCode(RARX_WARNING);
+ return false;
+ }
+#endif
+ }
+ else
+ return false;
+ HEADER_TYPE HeaderType=Arc.GetHeaderType();
+ if (HeaderType!=HEAD_FILE)
+ {
+#ifndef SFX_MODULE
+ if (HeaderType==HEAD3_OLDSERVICE && PrevProcessed)
+ SetExtraInfo20(Cmd,Arc,DestFileName);
+#endif
+ if (HeaderType==HEAD_SERVICE && PrevProcessed)
+ SetExtraInfo(Cmd,Arc,DestFileName);
+ if (HeaderType==HEAD_ENDARC)
+ if (Arc.EndArcHead.NextVolume)
+ {
+#ifndef NOVOLUME
+ if (!MergeArchive(Arc,&DataIO,false,Command))
+ {
+ ErrHandler.SetErrorCode(RARX_WARNING);
+ return false;
+ }
+#endif
+ Arc.Seek(Arc.CurBlockPos,SEEK_SET);
+ return true;
+ }
+ else
+ return false;
+ Arc.SeekToNext();
+ return true;
+ }
+ PrevProcessed=false;
+
+ if (!Cmd->Recurse && MatchedArgs>=Cmd->FileArgs.ItemsCount() && AllMatchesExact)
+ return false;
+
+ int MatchType=MATCH_WILDSUBPATH;
+
+ bool EqualNames=false;
+ wchar MatchedArg[NM];
+ int MatchNumber=Cmd->IsProcessFile(Arc.FileHead,&EqualNames,MatchType,MatchedArg,ASIZE(MatchedArg));
+ bool MatchFound=MatchNumber!=0;
+#ifndef SFX_MODULE
+ if (Cmd->ExclPath==EXCL_BASEPATH)
+ {
+ wcsncpyz(Cmd->ArcPath,MatchedArg,ASIZE(Cmd->ArcPath));
+ *PointToName(Cmd->ArcPath)=0;
+ if (IsWildcard(Cmd->ArcPath)) // Cannot correctly process path*\* masks here.
+ *Cmd->ArcPath=0;
+ }
+#endif
+ if (MatchFound && !EqualNames)
+ AllMatchesExact=false;
+
+ Arc.ConvertAttributes();
+
+#if !defined(SFX_MODULE) && !defined(RARDLL)
+ if (Arc.FileHead.SplitBefore && FirstFile)
+ {
+ wchar CurVolName[NM];
+ wcsncpyz(CurVolName,ArcName,ASIZE(CurVolName));
+ VolNameToFirstName(ArcName,ArcName,ASIZE(ArcName),Arc.NewNumbering);
+
+ if (wcsicomp(ArcName,CurVolName)!=0 && FileExist(ArcName))
+ {
+ // If first volume name does not match the current name and if such
+ // volume name really exists, let's unpack from this first volume.
+ Repeat=true;
+ return false;
+ }
+#ifndef RARDLL
+ if (!ReconstructDone)
+ {
+ ReconstructDone=true;
+ if (RecVolumesRestore(Cmd,Arc.FileName,true))
+ {
+ Repeat=true;
+ return false;
+ }
+ }
+#endif
+ wcsncpyz(ArcName,CurVolName,ASIZE(ArcName));
+ }
+#endif
+
+ wchar ArcFileName[NM];
+ ConvertPath(Arc.FileHead.FileName,ArcFileName);
+
+ if (Arc.FileHead.Version)
+ {
+ if (Cmd->VersionControl!=1 && !EqualNames)
+ {
+ if (Cmd->VersionControl==0)
+ MatchFound=false;
+ int Version=ParseVersionFileName(ArcFileName,false);
+ if (Cmd->VersionControl-1==Version)
+ ParseVersionFileName(ArcFileName,true);
+ else
+ MatchFound=false;
+ }
+ }
+ else
+ if (!Arc.IsArcDir() && Cmd->VersionControl>1)
+ MatchFound=false;
+
+ DataIO.UnpVolume=Arc.FileHead.SplitAfter;
+ DataIO.NextVolumeMissing=false;
+
+ Arc.Seek(Arc.NextBlockPos-Arc.FileHead.PackSize,SEEK_SET);
+
+ bool ExtrFile=false;
+ bool SkipSolid=false;
+
+#ifndef SFX_MODULE
+ if (FirstFile && (MatchFound || Arc.Solid) && Arc.FileHead.SplitBefore)
+ {
+ if (MatchFound)
+ {
+ uiMsg(UIERROR_NEEDPREVVOL,Arc.FileName,ArcFileName);
+#ifdef RARDLL
+ Cmd->DllError=ERAR_BAD_DATA;
+#endif
+ ErrHandler.SetErrorCode(RARX_OPEN);
+ }
+ MatchFound=false;
+ }
+
+ FirstFile=false;
+#endif
+
+ if (MatchFound || (SkipSolid=Arc.Solid)!=0)
+ {
+ // First common call of uiStartFileExtract. It is done before overwrite
+ // prompts, so if SkipSolid state is changed below, we'll need to make
+ // additional uiStartFileExtract calls with updated parameters.
+ if (!uiStartFileExtract(ArcFileName,!Cmd->Test,Cmd->Test && Command!='I',SkipSolid))
+ return false;
+
+ ExtrPrepareName(Arc,ArcFileName,DestFileName,ASIZE(DestFileName));
+
+ // DestFileName can be set empty in case of excessive -ap switch.
+ ExtrFile=!SkipSolid && *DestFileName!=0 && !Arc.FileHead.SplitBefore;
+
+ if ((Cmd->FreshFiles || Cmd->UpdateFiles) && (Command=='E' || Command=='X'))
+ {
+ FindData FD;
+ if (FindFile::FastFind(DestFileName,&FD))
+ {
+ if (FD.mtime >= Arc.FileHead.mtime)
+ {
+ // If directory already exists and its modification time is newer
+ // than start of extraction, it is likely it was created
+ // when creating a path to one of already extracted items.
+ // In such case we'll better update its time even if archived
+ // directory is older.
+
+ if (!FD.IsDir || FD.mtime<StartTime)
+ ExtrFile=false;
+ }
+ }
+ else
+ if (Cmd->FreshFiles)
+ ExtrFile=false;
+ }
+
+ if (!CheckUnpVer(Arc,ArcFileName))
+ {
+ ErrHandler.SetErrorCode(RARX_FATAL);
+#ifdef RARDLL
+ Cmd->DllError=ERAR_UNKNOWN_FORMAT;
+#endif
+ Arc.SeekToNext();
+ return !Arc.Solid; // Can try extracting next file only in non-solid archive.
+ }
+
+ while (true) // Repeat password prompt in case of wrong password here.
+ {
+ if (Arc.FileHead.Encrypted)
+ {
+ // Stop archive extracting if user cancelled a password prompt.
+#ifdef RARDLL
+ if (!ExtrDllGetPassword())
+ {
+ Cmd->DllError=ERAR_MISSING_PASSWORD;
+ return false;
+ }
+#else
+ if (!ExtrGetPassword(Arc,ArcFileName))
+ {
+ PasswordCancelled=true;
+ return false;
+ }
+#endif
+ // Skip only the current encrypted file if empty password is entered.
+ // Actually our "cancel" code above intercepts empty passwords too now,
+ // so we keep the code below just in case we'll decide process empty
+ // and cancelled passwords differently sometimes.
+ if (!Cmd->Password.IsSet())
+ {
+ ErrHandler.SetErrorCode(RARX_WARNING);
+#ifdef RARDLL
+ Cmd->DllError=ERAR_MISSING_PASSWORD;
+#endif
+ ExtrFile=false;
+ }
+ }
+
+
+ // Set a password before creating the file, so we can skip creating
+ // in case of wrong password.
+ SecPassword FilePassword=Cmd->Password;
+#if defined(_WIN_ALL) && !defined(SFX_MODULE)
+ ConvertDosPassword(Arc,FilePassword);
+#endif
+
+ byte PswCheck[SIZE_PSWCHECK];
+ DataIO.SetEncryption(false,Arc.FileHead.CryptMethod,&FilePassword,
+ Arc.FileHead.SaltSet ? Arc.FileHead.Salt:NULL,
+ Arc.FileHead.InitV,Arc.FileHead.Lg2Count,
+ Arc.FileHead.HashKey,PswCheck);
+
+ // If header is damaged, we cannot rely on password check value,
+ // because it can be damaged too.
+ if (Arc.FileHead.Encrypted && Arc.FileHead.UsePswCheck &&
+ memcmp(Arc.FileHead.PswCheck,PswCheck,SIZE_PSWCHECK)!=0 &&
+ !Arc.BrokenHeader)
+ {
+ uiMsg(UIWAIT_BADPSW,ArcFileName);
+
+ if (!PasswordAll) // If entered manually and not through -p<pwd>.
+ {
+ Cmd->Password.Clean();
+ continue; // Request a password again.
+ }
+#ifdef RARDLL
+ // If we already have ERAR_EOPEN as result of missing volume,
+ // we should not replace it with less precise ERAR_BAD_PASSWORD.
+ if (Cmd->DllError!=ERAR_EOPEN)
+ Cmd->DllError=ERAR_BAD_PASSWORD;
+#endif
+ ErrHandler.SetErrorCode(RARX_BADPWD);
+ ExtrFile=false;
+ }
+ break;
+ }
+
+#ifdef RARDLL
+ if (*Cmd->DllDestName!=0)
+ wcsncpyz(DestFileName,Cmd->DllDestName,ASIZE(DestFileName));
+#endif
+
+ File CurFile;
+
+ bool LinkEntry=Arc.FileHead.RedirType!=FSREDIR_NONE;
+ if (LinkEntry && Arc.FileHead.RedirType!=FSREDIR_FILECOPY)
+ {
+ if (ExtrFile && Command!='P' && !Cmd->Test)
+ {
+ // Overwrite prompt for symbolic and hard links.
+ bool UserReject=false;
+ if (FileExist(DestFileName) && !UserReject)
+ FileCreate(Cmd,NULL,DestFileName,ASIZE(DestFileName),&UserReject,Arc.FileHead.UnpSize,&Arc.FileHead.mtime);
+ if (UserReject)
+ ExtrFile=false;
+ }
+ }
+ else
+ if (Arc.IsArcDir())
+ {
+ if (!ExtrFile || Command=='P' || Command=='I' || Command=='E' || Cmd->ExclPath==EXCL_SKIPWHOLEPATH)
+ return true;
+ TotalFileCount++;
+ ExtrCreateDir(Arc,ArcFileName);
+ // It is important to not increment MatchedArgs here, so we extract
+ // dir with its entire contents and not dir record only even if
+ // dir record precedes files.
+ return true;
+ }
+ else
+ if (ExtrFile) // Create files and file copies (FSREDIR_FILECOPY).
+ ExtrFile=ExtrCreateFile(Arc,CurFile);
+
+ if (!ExtrFile && Arc.Solid)
+ {
+ SkipSolid=true;
+ ExtrFile=true;
+
+ // We changed SkipSolid, so we need to call uiStartFileExtract
+ // with "Skip" parameter to change the operation status
+ // from "extracting" to "skipping". For example, it can be necessary
+ // if user answered "No" to overwrite prompt when unpacking
+ // a solid archive.
+ if (!uiStartFileExtract(ArcFileName,false,false,true))
+ return false;
+ }
+ if (ExtrFile)
+ {
+ // Set it in test mode, so we also test subheaders such as NTFS streams
+ // after tested file.
+ if (Cmd->Test)
+ PrevProcessed=true;
+
+ bool TestMode=Cmd->Test || SkipSolid; // Unpack to memory, not to disk.
+
+ if (!SkipSolid)
+ {
+ if (!TestMode && Command!='P' && CurFile.IsDevice())
+ {
+ uiMsg(UIERROR_INVALIDNAME,Arc.FileName,DestFileName);
+ ErrHandler.WriteError(Arc.FileName,DestFileName);
+ }
+ TotalFileCount++;
+ }
+ FileCount++;
+ if (Command!='I')
+ if (SkipSolid)
+ mprintf(St(MExtrSkipFile),ArcFileName);
+ else
+ switch(Cmd->Test ? 'T':Command) // "Test" can be also enabled by -t switch.
+ {
+ case 'T':
+ mprintf(St(MExtrTestFile),ArcFileName);
+ break;
+#ifndef SFX_MODULE
+ case 'P':
+ mprintf(St(MExtrPrinting),ArcFileName);
+ break;
+#endif
+ case 'X':
+ case 'E':
+ mprintf(St(MExtrFile),DestFileName);
+ break;
+ }
+ if (!Cmd->DisablePercentage)
+ mprintf(L" ");
+
+ DataIO.CurUnpRead=0;
+ DataIO.CurUnpWrite=0;
+ DataIO.UnpHash.Init(Arc.FileHead.FileHash.Type,Cmd->Threads);
+ DataIO.PackedDataHash.Init(Arc.FileHead.FileHash.Type,Cmd->Threads);
+ DataIO.SetPackedSizeToRead(Arc.FileHead.PackSize);
+ DataIO.SetFiles(&Arc,&CurFile);
+ DataIO.SetTestMode(TestMode);
+ DataIO.SetSkipUnpCRC(SkipSolid);
+
+#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SILENT)
+ if (!TestMode && !Arc.BrokenHeader &&
+ Arc.FileHead.UnpSize>0xffffffff && (Fat32 || !NotFat32))
+ {
+ if (!Fat32) // Not detected yet.
+ NotFat32=!(Fat32=IsFAT(Cmd->ExtrPath));
+ if (Fat32)
+ uiMsg(UIMSG_FAT32SIZE); // Inform user about FAT32 size limit.
+ }
+#endif
+
+ if (!TestMode && !Arc.BrokenHeader &&
+ (Arc.FileHead.PackSize<<11)>Arc.FileHead.UnpSize &&
+ (Arc.FileHead.UnpSize<100000000 || Arc.FileLength()>Arc.FileHead.PackSize))
+ CurFile.Prealloc(Arc.FileHead.UnpSize);
+
+ CurFile.SetAllowDelete(!Cmd->KeepBroken);
+
+ bool FileCreateMode=!TestMode && !SkipSolid && Command!='P';
+ bool ShowChecksum=true; // Display checksum verification result.
+
+ bool LinkSuccess=true; // Assume success for test mode.
+ if (LinkEntry)
+ {
+ FILE_SYSTEM_REDIRECT Type=Arc.FileHead.RedirType;
+
+ if (Type==FSREDIR_HARDLINK || Type==FSREDIR_FILECOPY)
+ {
+ wchar NameExisting[NM];
+ ExtrPrepareName(Arc,Arc.FileHead.RedirName,NameExisting,ASIZE(NameExisting));
+ if (FileCreateMode && *NameExisting!=0) // *NameExisting can be 0 in case of excessive -ap switch.
+ if (Type==FSREDIR_HARDLINK)
+ LinkSuccess=ExtractHardlink(DestFileName,NameExisting,ASIZE(NameExisting));
+ else
+ LinkSuccess=ExtractFileCopy(CurFile,Arc.FileName,DestFileName,NameExisting,ASIZE(NameExisting));
+ }
+ else
+ if (Type==FSREDIR_UNIXSYMLINK || Type==FSREDIR_WINSYMLINK || Type==FSREDIR_JUNCTION)
+ {
+ if (FileCreateMode)
+ LinkSuccess=ExtractSymlink(Cmd,DataIO,Arc,DestFileName);
+ }
+ else
+ {
+ uiMsg(UIERROR_UNKNOWNEXTRA, Arc.FileName, DestFileName);
+ LinkSuccess=false;
+ }
+
+ if (!LinkSuccess || Arc.Format==RARFMT15 && !FileCreateMode)
+ {
+ // RAR 5.x links have a valid data checksum even in case of
+ // failure, because they do not store any data.
+ // We do not want to display "OK" in this case.
+ // For 4.x symlinks we verify the checksum only when extracting,
+ // but not when testing an archive.
+ ShowChecksum=false;
+ }
+ PrevProcessed=FileCreateMode && LinkSuccess;
+ }
+ else
+ if (!Arc.FileHead.SplitBefore)
+ if (Arc.FileHead.Method==0)
+ UnstoreFile(DataIO,Arc.FileHead.UnpSize);
+ else
+ {
+ Unp->Init(Arc.FileHead.WinSize,Arc.FileHead.Solid);
+ Unp->SetDestSize(Arc.FileHead.UnpSize);
+#ifndef SFX_MODULE
+ if (Arc.Format!=RARFMT50 && Arc.FileHead.UnpVer<=15)
+ Unp->DoUnpack(15,FileCount>1 && Arc.Solid);
+ else
+#endif
+ Unp->DoUnpack(Arc.FileHead.UnpVer,Arc.FileHead.Solid);
+ }
+
+ Arc.SeekToNext();
+
+ // We check for "split after" flag to detect partially extracted files
+ // from incomplete volume sets. For them file header contains packed
+ // data hash, which must not be compared against unpacked data hash
+ // to prevent accidental match. Moreover, for -m0 volumes packed data
+ // hash would match truncated unpacked data hash and lead to fake "OK"
+ // in incomplete volume set.
+ bool ValidCRC=!Arc.FileHead.SplitAfter && DataIO.UnpHash.Cmp(&Arc.FileHead.FileHash,Arc.FileHead.UseHashKey ? Arc.FileHead.HashKey:NULL);
+
+ // We set AnySolidDataUnpackedWell to true if we found at least one
+ // valid non-zero solid file in preceding solid stream. If it is true
+ // and if current encrypted file is broken, we do not need to hint
+ // about a wrong password and can report CRC error only.
+ if (!Arc.FileHead.Solid)
+ AnySolidDataUnpackedWell=false; // Reset the flag, because non-solid file is found.
+ else
+ if (Arc.FileHead.Method!=0 && Arc.FileHead.UnpSize>0 && ValidCRC)
+ AnySolidDataUnpackedWell=true;
+
+ bool BrokenFile=false;
+
+ // Checksum is not calculated in skip solid mode for performance reason.
+ if (!SkipSolid && ShowChecksum)
+ {
+ if (ValidCRC)
+ {
+ if (Command!='P' && Command!='I')
+ mprintf(L"%s%s ",Cmd->DisablePercentage ? L" ":L"\b\b\b\b\b ",
+ Arc.FileHead.FileHash.Type==HASH_NONE ? L" ?":St(MOk));
+ }
+ else
+ {
+ if (Arc.FileHead.Encrypted && (!Arc.FileHead.UsePswCheck ||
+ Arc.BrokenHeader) && !AnySolidDataUnpackedWell)
+ uiMsg(UIERROR_CHECKSUMENC,Arc.FileName,ArcFileName);
+ else
+ uiMsg(UIERROR_CHECKSUM,Arc.FileName,ArcFileName);
+ BrokenFile=true;
+ ErrHandler.SetErrorCode(RARX_CRC);
+#ifdef RARDLL
+ // If we already have ERAR_EOPEN as result of missing volume
+ // or ERAR_BAD_PASSWORD for RAR5 wrong password,
+ // we should not replace it with less precise ERAR_BAD_DATA.
+ if (Cmd->DllError!=ERAR_EOPEN && Cmd->DllError!=ERAR_BAD_PASSWORD)
+ Cmd->DllError=ERAR_BAD_DATA;
+#endif
+ }
+ }
+ else
+ mprintf(L"\b\b\b\b\b ");
+
+ if (!TestMode && (Command=='X' || Command=='E') &&
+ (!LinkEntry || Arc.FileHead.RedirType==FSREDIR_FILECOPY && LinkSuccess) &&
+ (!BrokenFile || Cmd->KeepBroken))
+ {
+ // We could preallocate more space that really written to broken file.
+ if (BrokenFile)
+ CurFile.Truncate();
+
+#if defined(_WIN_ALL) || defined(_EMX)
+ if (Cmd->ClearArc)
+ Arc.FileHead.FileAttr&=~FILE_ATTRIBUTE_ARCHIVE;
+#endif
+
+
+ CurFile.SetOpenFileTime(
+ Cmd->xmtime==EXTTIME_NONE ? NULL:&Arc.FileHead.mtime,
+ Cmd->xctime==EXTTIME_NONE ? NULL:&Arc.FileHead.ctime,
+ Cmd->xatime==EXTTIME_NONE ? NULL:&Arc.FileHead.atime);
+ CurFile.Close();
+#if defined(_WIN_ALL) && !defined(SFX_MODULE)
+ if (Cmd->SetCompressedAttr &&
+ (Arc.FileHead.FileAttr & FILE_ATTRIBUTE_COMPRESSED)!=0)
+ SetFileCompression(CurFile.FileName,true);
+#endif
+ SetFileHeaderExtra(Cmd,Arc,CurFile.FileName);
+
+ CurFile.SetCloseFileTime(
+ Cmd->xmtime==EXTTIME_NONE ? NULL:&Arc.FileHead.mtime,
+ Cmd->xatime==EXTTIME_NONE ? NULL:&Arc.FileHead.atime);
+ if (!Cmd->IgnoreGeneralAttr && !SetFileAttr(CurFile.FileName,Arc.FileHead.FileAttr))
+ uiMsg(UIERROR_FILEATTR,Arc.FileName,CurFile.FileName);
+
+ PrevProcessed=true;
+ }
+ }
+ }
+ // It is important to increment it for files, but not dirs. So we extract
+ // dir with its entire contents, not just dir record only even if dir
+ // record precedes files.
+ if (MatchFound)
+ MatchedArgs++;
+ if (DataIO.NextVolumeMissing)
+ return false;
+ if (!ExtrFile)
+ if (!Arc.Solid)
+ Arc.SeekToNext();
+ else
+ if (!SkipSolid)
+ return false;
+ return true;
+}
+
+
+void CmdExtract::UnstoreFile(ComprDataIO &DataIO,int64 DestUnpSize)
+{
+ // 512 KB and larger buffer reported to reduce performance on old XP
+ // computers with WDC WD2000JD HDD. According to test made by user
+ // 256 KB buffer is optimal.
+ Array<byte> Buffer(0x40000);
+ while (1)
+ {
+ uint Code=DataIO.UnpRead(&Buffer[0],Buffer.Size());
+ if (Code==0 || (int)Code==-1)
+ break;
+ Code=Code<DestUnpSize ? Code:(uint)DestUnpSize;
+ DataIO.UnpWrite(&Buffer[0],Code);
+ if (DestUnpSize>=0)
+ DestUnpSize-=Code;
+ }
+}
+
+
+bool CmdExtract::ExtractFileCopy(File &New,wchar *ArcName,wchar *NameNew,wchar *NameExisting,size_t NameExistingSize)
+{
+ SlashToNative(NameExisting,NameExisting,NameExistingSize); // Not needed for RAR 5.1+ archives.
+
+ File Existing;
+ if (!Existing.WOpen(NameExisting))
+ {
+ uiMsg(UIERROR_FILECOPY,ArcName,NameExisting,NameNew);
+ uiMsg(UIERROR_FILECOPYHINT,ArcName);
+#ifdef RARDLL
+ Cmd->DllError=ERAR_EREFERENCE;
+#endif
+ return false;
+ }
+
+ Array<char> Buffer(0x100000);
+ int64 CopySize=0;
+
+ while (true)
+ {
+ Wait();
+ int ReadSize=Existing.Read(&Buffer[0],Buffer.Size());
+ if (ReadSize==0)
+ break;
+ New.Write(&Buffer[0],ReadSize);
+ CopySize+=ReadSize;
+ }
+
+ return true;
+}
+
+
+void CmdExtract::ExtrPrepareName(Archive &Arc,const wchar *ArcFileName,wchar *DestName,size_t DestSize)
+{
+ wcsncpyz(DestName,Cmd->ExtrPath,DestSize);
+
+ if (*Cmd->ExtrPath!=0)
+ {
+ wchar LastChar=*PointToLastChar(Cmd->ExtrPath);
+ // We need IsPathDiv check here to correctly handle Unix forward slash
+ // in the end of destination path in Windows: rar x arc dest/
+ // IsDriveDiv is needed for current drive dir: rar x arc d:
+ if (!IsPathDiv(LastChar) && !IsDriveDiv(LastChar))
+ {
+ // Destination path can be without trailing slash if it come from GUI shell.
+ AddEndSlash(DestName,DestSize);
+ }
+ }
+
+#ifndef SFX_MODULE
+ if (Cmd->AppendArcNameToPath)
+ {
+ wcsncatz(DestName,PointToName(Arc.FirstVolumeName),DestSize);
+ SetExt(DestName,NULL,DestSize);
+ AddEndSlash(DestName,DestSize);
+ }
+#endif
+
+#ifndef SFX_MODULE
+ size_t ArcPathLength=wcslen(Cmd->ArcPath);
+ if (ArcPathLength>0)
+ {
+ size_t NameLength=wcslen(ArcFileName);
+
+ // Earlier we compared lengths only here, but then noticed a cosmetic bug
+ // in WinRAR. When extracting a file reference from subfolder with
+ // "Extract relative paths", so WinRAR sets ArcPath, if reference target
+ // is missing, error message removed ArcPath both from reference and target
+ // names. If target was stored in another folder, its name looked wrong.
+ if (NameLength>=ArcPathLength &&
+ wcsnicompc(Cmd->ArcPath,ArcFileName,ArcPathLength)==0 &&
+ (IsPathDiv(Cmd->ArcPath[ArcPathLength-1]) ||
+ IsPathDiv(ArcFileName[ArcPathLength]) || ArcFileName[ArcPathLength]==0))
+ {
+ ArcFileName+=Min(ArcPathLength,NameLength);
+ while (IsPathDiv(*ArcFileName))
+ ArcFileName++;
+ if (*ArcFileName==0) // Excessive -ap switch.
+ {
+ *DestName=0;
+ return;
+ }
+ }
+ }
+#endif
+
+ wchar Command=Cmd->Command[0];
+ // Use -ep3 only in systems, where disk letters are exist, not in Unix.
+ bool AbsPaths=Cmd->ExclPath==EXCL_ABSPATH && Command=='X' && IsDriveDiv(':');
+
+ // We do not use any user specified destination paths when extracting
+ // absolute paths in -ep3 mode.
+ if (AbsPaths)
+ *DestName=0;
+
+ if (Command=='E' || Cmd->ExclPath==EXCL_SKIPWHOLEPATH)
+ wcsncatz(DestName,PointToName(ArcFileName),DestSize);
+ else
+ wcsncatz(DestName,ArcFileName,DestSize);
+
+#ifdef _WIN_ALL
+ // Must do after Cmd->ArcPath processing above, so file name and arc path
+ // trailing spaces are in sync.
+ if (!Cmd->AllowIncompatNames)
+ MakeNameCompatible(DestName);
+#endif
+
+ wchar DiskLetter=toupperw(DestName[0]);
+
+ if (AbsPaths)
+ {
+ if (DestName[1]=='_' && IsPathDiv(DestName[2]) &&
+ DiskLetter>='A' && DiskLetter<='Z')
+ DestName[1]=':';
+ else
+ if (DestName[0]=='_' && DestName[1]=='_')
+ {
+ // Convert __server\share to \\server\share.
+ DestName[0]=CPATHDIVIDER;
+ DestName[1]=CPATHDIVIDER;
+ }
+ }
+}
+
+
+#ifdef RARDLL
+bool CmdExtract::ExtrDllGetPassword()
+{
+ if (!Cmd->Password.IsSet())
+ {
+ if (Cmd->Callback!=NULL)
+ {
+ wchar PasswordW[MAXPASSWORD];
+ *PasswordW=0;
+ if (Cmd->Callback(UCM_NEEDPASSWORDW,Cmd->UserData,(LPARAM)PasswordW,ASIZE(PasswordW))==-1)
+ *PasswordW=0;
+ if (*PasswordW==0)
+ {
+ char PasswordA[MAXPASSWORD];
+ *PasswordA=0;
+ if (Cmd->Callback(UCM_NEEDPASSWORD,Cmd->UserData,(LPARAM)PasswordA,ASIZE(PasswordA))==-1)
+ *PasswordA=0;
+ GetWideName(PasswordA,NULL,PasswordW,ASIZE(PasswordW));
+ cleandata(PasswordA,sizeof(PasswordA));
+ }
+ Cmd->Password.Set(PasswordW);
+ cleandata(PasswordW,sizeof(PasswordW));
+ Cmd->ManualPassword=true;
+ }
+ if (!Cmd->Password.IsSet())
+ return false;
+ }
+ return true;
+}
+#endif
+
+
+#ifndef RARDLL
+bool CmdExtract::ExtrGetPassword(Archive &Arc,const wchar *ArcFileName)
+{
+ if (!Cmd->Password.IsSet())
+ {
+ if (!uiGetPassword(UIPASSWORD_FILE,ArcFileName,&Cmd->Password) || !Cmd->Password.IsSet())
+ {
+ // Suppress "test is ok" message in GUI if user entered
+ // an empty password or cancelled a password prompt.
+ uiMsg(UIERROR_INCERRCOUNT);
+
+ return false;
+ }
+ Cmd->ManualPassword=true;
+ }
+#if !defined(SILENT)
+ else
+ if (!PasswordAll && !Arc.FileHead.Solid)
+ {
+ eprintf(St(MUseCurPsw),ArcFileName);
+ switch(Cmd->AllYes ? 1 : Ask(St(MYesNoAll)))
+ {
+ case -1:
+ ErrHandler.Exit(RARX_USERBREAK);
+ case 2:
+ if (!uiGetPassword(UIPASSWORD_FILE,ArcFileName,&Cmd->Password))
+ return false;
+ break;
+ case 3:
+ PasswordAll=true;
+ break;
+ }
+ }
+#endif
+ return true;
+}
+#endif
+
+
+#if defined(_WIN_ALL) && !defined(SFX_MODULE)
+void CmdExtract::ConvertDosPassword(Archive &Arc,SecPassword &DestPwd)
+{
+ if (Arc.Format==RARFMT15 && Arc.FileHead.HostOS==HOST_MSDOS)
+ {
+ // We need the password in OEM encoding if file was encrypted by
+ // native RAR/DOS (not extender based). Let's make the conversion.
+ wchar PlainPsw[MAXPASSWORD];
+ Cmd->Password.Get(PlainPsw,ASIZE(PlainPsw));
+ char PswA[MAXPASSWORD];
+ CharToOemBuffW(PlainPsw,PswA,ASIZE(PswA));
+ PswA[ASIZE(PswA)-1]=0;
+ CharToWide(PswA,PlainPsw,ASIZE(PlainPsw));
+ DestPwd.Set(PlainPsw);
+ cleandata(PlainPsw,sizeof(PlainPsw));
+ cleandata(PswA,sizeof(PswA));
+ }
+}
+#endif
+
+
+void CmdExtract::ExtrCreateDir(Archive &Arc,const wchar *ArcFileName)
+{
+ if (Cmd->Test)
+ {
+ mprintf(St(MExtrTestFile),ArcFileName);
+ mprintf(L" %s",St(MOk));
+ return;
+ }
+
+ MKDIR_CODE MDCode=MakeDir(DestFileName,!Cmd->IgnoreGeneralAttr,Arc.FileHead.FileAttr);
+ bool DirExist=false;
+ if (MDCode!=MKDIR_SUCCESS)
+ {
+ DirExist=FileExist(DestFileName);
+ if (DirExist && !IsDir(GetFileAttr(DestFileName)))
+ {
+ // File with name same as this directory exists. Propose user
+ // to overwrite it.
+ bool UserReject;
+ FileCreate(Cmd,NULL,DestFileName,ASIZE(DestFileName),&UserReject,Arc.FileHead.UnpSize,&Arc.FileHead.mtime);
+ DirExist=false;
+ }
+ if (!DirExist)
+ {
+ CreatePath(DestFileName,true);
+ MDCode=MakeDir(DestFileName,!Cmd->IgnoreGeneralAttr,Arc.FileHead.FileAttr);
+ if (MDCode!=MKDIR_SUCCESS)
+ {
+ wchar OrigName[ASIZE(DestFileName)];
+ wcsncpyz(OrigName,DestFileName,ASIZE(OrigName));
+ MakeNameUsable(DestFileName,true);
+ CreatePath(DestFileName,true);
+ MDCode=MakeDir(DestFileName,!Cmd->IgnoreGeneralAttr,Arc.FileHead.FileAttr);
+#ifndef SFX_MODULE
+ if (MDCode==MKDIR_SUCCESS)
+ uiMsg(UIERROR_RENAMING,Arc.FileName,OrigName,DestFileName);
+#endif
+ }
+ }
+ }
+ if (MDCode==MKDIR_SUCCESS)
+ {
+ mprintf(St(MCreatDir),DestFileName);
+ mprintf(L" %s",St(MOk));
+ PrevProcessed=true;
+ }
+ else
+ if (DirExist)
+ {
+ if (!Cmd->IgnoreGeneralAttr)
+ SetFileAttr(DestFileName,Arc.FileHead.FileAttr);
+ PrevProcessed=true;
+ }
+ else
+ {
+ uiMsg(UIERROR_DIRCREATE,Arc.FileName,DestFileName);
+ ErrHandler.SysErrMsg();
+#ifdef RARDLL
+ Cmd->DllError=ERAR_ECREATE;
+#endif
+ ErrHandler.SetErrorCode(RARX_CREATE);
+ }
+ if (PrevProcessed)
+ {
+#if defined(_WIN_ALL) && !defined(SFX_MODULE)
+ if (Cmd->SetCompressedAttr &&
+ (Arc.FileHead.FileAttr & FILE_ATTRIBUTE_COMPRESSED)!=0 && WinNT())
+ SetFileCompression(DestFileName,true);
+#endif
+ SetFileHeaderExtra(Cmd,Arc,DestFileName);
+ SetDirTime(DestFileName,
+ Cmd->xmtime==EXTTIME_NONE ? NULL:&Arc.FileHead.mtime,
+ Cmd->xctime==EXTTIME_NONE ? NULL:&Arc.FileHead.ctime,
+ Cmd->xatime==EXTTIME_NONE ? NULL:&Arc.FileHead.atime);
+ }
+}
+
+
+bool CmdExtract::ExtrCreateFile(Archive &Arc,File &CurFile)
+{
+ bool Success=true;
+ wchar Command=Cmd->Command[0];
+#if !defined(SFX_MODULE)
+ if (Command=='P')
+ CurFile.SetHandleType(FILE_HANDLESTD);
+#endif
+ if ((Command=='E' || Command=='X') && !Cmd->Test)
+ {
+ bool UserReject;
+ // Specify "write only" mode to avoid OpenIndiana NAS problems
+ // with SetFileTime and read+write files.
+ if (!FileCreate(Cmd,&CurFile,DestFileName,ASIZE(DestFileName),&UserReject,Arc.FileHead.UnpSize,&Arc.FileHead.mtime,true))
+ {
+ Success=false;
+ if (!UserReject)
+ {
+ ErrHandler.CreateErrorMsg(Arc.FileName,DestFileName);
+#ifdef RARDLL
+ Cmd->DllError=ERAR_ECREATE;
+#endif
+ if (!IsNameUsable(DestFileName))
+ {
+ uiMsg(UIMSG_CORRECTINGNAME,Arc.FileName);
+
+ wchar OrigName[ASIZE(DestFileName)];
+ wcsncpyz(OrigName,DestFileName,ASIZE(OrigName));
+
+ MakeNameUsable(DestFileName,true);
+
+ CreatePath(DestFileName,true);
+ if (FileCreate(Cmd,&CurFile,DestFileName,ASIZE(DestFileName),&UserReject,Arc.FileHead.UnpSize,&Arc.FileHead.mtime,true))
+ {
+#ifndef SFX_MODULE
+ uiMsg(UIERROR_RENAMING,Arc.FileName,OrigName,DestFileName);
+#endif
+ Success=true;
+ }
+ else
+ ErrHandler.CreateErrorMsg(Arc.FileName,DestFileName);
+ }
+ }
+ }
+ }
+ return Success;
+}
+
+
+bool CmdExtract::CheckUnpVer(Archive &Arc,const wchar *ArcFileName)
+{
+ bool WrongVer;
+ if (Arc.Format==RARFMT50) // Both SFX and RAR can unpack RAR 5.0 archives.
+ WrongVer=Arc.FileHead.UnpVer>VER_UNPACK5;
+ else
+ {
+#ifdef SFX_MODULE // SFX can unpack only RAR 2.9 archives.
+ WrongVer=Arc.FileHead.UnpVer!=VER_UNPACK;
+#else // All formats since 1.3 for RAR.
+ WrongVer=Arc.FileHead.UnpVer<13 || Arc.FileHead.UnpVer>VER_UNPACK;
+#endif
+ }
+
+ // We can unpack stored files regardless of compression version field.
+ if (Arc.FileHead.Method==0)
+ WrongVer=false;
+
+ if (WrongVer)
+ {
+ ErrHandler.UnknownMethodMsg(Arc.FileName,ArcFileName);
+ uiMsg(UIERROR_NEWERRAR,Arc.FileName);
+ }
+ return !WrongVer;
+}
diff --git a/src/thirdparty/unrar/extract.hpp b/src/thirdparty/unrar/extract.hpp
index 1539ed61a..85a21f532 100644
--- a/src/thirdparty/unrar/extract.hpp
+++ b/src/thirdparty/unrar/extract.hpp
@@ -43,11 +43,13 @@ class CmdExtract
wchar ArcName[NM];
- SecPassword Password;
bool PasswordAll;
- bool PrevExtracted;
+ bool PrevProcessed; // If previous file was successfully extracted or tested.
wchar DestFileName[NM];
bool PasswordCancelled;
+#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SILENT)
+ bool Fat32,NotFat32;
+#endif
public:
CmdExtract(CommandData *Cmd);
~CmdExtract();
diff --git a/src/thirdparty/unrar/filcreat.cpp b/src/thirdparty/unrar/filcreat.cpp
index 8b20b3fa9..a64a7d4d7 100644
--- a/src/thirdparty/unrar/filcreat.cpp
+++ b/src/thirdparty/unrar/filcreat.cpp
@@ -13,7 +13,7 @@ bool FileCreate(RAROptions *Cmd,File *NewFile,wchar *Name,size_t MaxNameSize,
#endif
while (FileExist(Name))
{
-#ifdef _WIN_ALL
+#if defined(_WIN_ALL)
if (!ShortNameChanged)
{
// Avoid the infinite loop if UpdateExistingShortName returns
@@ -42,10 +42,13 @@ bool FileCreate(RAROptions *Cmd,File *NewFile,wchar *Name,size_t MaxNameSize,
if (Choice==UIASKREP_R_CANCEL)
ErrHandler.Exit(RARX_USERBREAK);
}
+
+ // Try to truncate the existing file first instead of delete,
+ // so we preserve existing file permissions such as NTFS permissions.
uint FileMode=WriteOnly ? FMF_WRITE|FMF_SHAREREAD:FMF_UPDATE|FMF_SHAREREAD;
if (NewFile!=NULL && NewFile->Create(Name,FileMode))
return true;
- PrepareToDelete(Name);
+
CreatePath(Name,true);
return NewFile!=NULL ? NewFile->Create(Name,FileMode):DelFile(Name);
}
@@ -55,25 +58,12 @@ bool GetAutoRenamedName(wchar *Name,size_t MaxNameSize)
{
wchar NewName[NM];
size_t NameLength=wcslen(Name);
-#ifdef _ANDROID
- if (NameLength>ASIZE(NewName)-10)
- return false;
-#endif
wchar *Ext=GetExt(Name);
if (Ext==NULL)
Ext=Name+NameLength;
for (uint FileVer=1;;FileVer++)
{
-#ifdef _ANDROID // No swprintf in Android NDK r9.
- uint NamePrefixLength=Ext-Name;
- wcsncpy(NewName,Name,NamePrefixLength);
- wcscpy(NewName+NamePrefixLength,L"(");
- itoa(FileVer,NewName+NamePrefixLength+1);
- wcscat(NewName,L")");
- wcscat(NewName,Ext);
-#else
swprintf(NewName,ASIZE(NewName),L"%.*ls(%u)%ls",uint(Ext-Name),Name,FileVer,Ext);
-#endif
if (!FileExist(NewName))
{
wcsncpyz(Name,NewName,MaxNameSize);
@@ -86,7 +76,7 @@ bool GetAutoRenamedName(wchar *Name,size_t MaxNameSize)
}
-#ifdef _WIN_ALL
+#if defined(_WIN_ALL)
// If we find a file, which short name is equal to 'Name', we try to change
// its short name, while preserving the long name. It helps when unpacking
// an archived file, which long name is equal to short name of already
diff --git a/src/thirdparty/unrar/filcreat.hpp b/src/thirdparty/unrar/filcreat.hpp
index e8368cd44..44f801d4e 100644
--- a/src/thirdparty/unrar/filcreat.hpp
+++ b/src/thirdparty/unrar/filcreat.hpp
@@ -7,7 +7,7 @@ bool FileCreate(RAROptions *Cmd,File *NewFile,wchar *Name,size_t MaxNameSize,
bool GetAutoRenamedName(wchar *Name,size_t MaxNameSize);
-#ifdef _WIN_ALL
+#if defined(_WIN_ALL)
bool UpdateExistingShortName(const wchar *Name);
#endif
diff --git a/src/thirdparty/unrar/file.cpp b/src/thirdparty/unrar/file.cpp
index 51100acd6..ed3eaee2f 100644
--- a/src/thirdparty/unrar/file.cpp
+++ b/src/thirdparty/unrar/file.cpp
@@ -2,7 +2,7 @@
File::File()
{
- hFile=BAD_HANDLE;
+ hFile=FILE_BAD_HANDLE;
*FileName=0;
NewFile=false;
LastWrite=false;
@@ -22,7 +22,7 @@ File::File()
File::~File()
{
- if (hFile!=BAD_HANDLE && !SkipClose)
+ if (hFile!=FILE_BAD_HANDLE && !SkipClose)
if (NewFile)
Delete();
else
@@ -52,14 +52,14 @@ bool File::Open(const wchar *Name,uint Mode)
uint Access=WriteMode ? GENERIC_WRITE:GENERIC_READ;
if (UpdateMode)
Access|=GENERIC_WRITE;
- uint ShareMode=FILE_SHARE_READ;
+ uint ShareMode=(Mode & FMF_OPENEXCLUSIVE) ? 0 : FILE_SHARE_READ;
if (OpenShared)
ShareMode|=FILE_SHARE_WRITE;
uint Flags=NoSequentialRead ? 0:FILE_FLAG_SEQUENTIAL_SCAN;
hNewFile=CreateFile(Name,Access,ShareMode,NULL,OPEN_EXISTING,Flags,NULL);
DWORD LastError;
- if (hNewFile==BAD_HANDLE)
+ if (hNewFile==FILE_BAD_HANDLE)
{
LastError=GetLastError();
@@ -84,9 +84,9 @@ bool File::Open(const wchar *Name,uint Mode)
LastError=ERROR_FILE_NOT_FOUND;
}
}
-
- if (hNewFile==BAD_HANDLE && LastError==ERROR_FILE_NOT_FOUND)
+ if (hNewFile==FILE_BAD_HANDLE && LastError==ERROR_FILE_NOT_FOUND)
ErrorType=FILE_NOTFOUND;
+
#else
int flags=UpdateMode ? O_RDWR:(WriteMode ? O_WRONLY:O_RDONLY);
#ifdef O_BINARY
@@ -112,7 +112,7 @@ bool File::Open(const wchar *Name,uint Mode)
}
#endif
if (handle==-1)
- hNewFile=BAD_HANDLE;
+ hNewFile=FILE_BAD_HANDLE;
else
{
#ifdef FILE_USE_OPEN
@@ -121,13 +121,13 @@ bool File::Open(const wchar *Name,uint Mode)
hNewFile=fdopen(handle,UpdateMode ? UPDATEBINARY:READBINARY);
#endif
}
- if (hNewFile==BAD_HANDLE && errno==ENOENT)
+ if (hNewFile==FILE_BAD_HANDLE && errno==ENOENT)
ErrorType=FILE_NOTFOUND;
#endif
NewFile=false;
HandleType=FILE_HANDLENORMAL;
SkipClose=false;
- bool Success=hNewFile!=BAD_HANDLE;
+ bool Success=hNewFile!=FILE_BAD_HANDLE;
if (Success)
{
hFile=hNewFile;
@@ -137,7 +137,7 @@ bool File::Open(const wchar *Name,uint Mode)
}
-#if !defined(SHELL_EXT) && !defined(SFX_MODULE)
+#if !defined(SFX_MODULE)
void File::TOpen(const wchar *Name)
{
if (!WOpen(Name))
@@ -167,9 +167,18 @@ bool File::Create(const wchar *Name,uint Mode)
CreateMode=Mode;
uint Access=WriteMode ? GENERIC_WRITE:GENERIC_READ|GENERIC_WRITE;
DWORD ShareMode=ShareRead ? FILE_SHARE_READ:0;
- hFile=CreateFile(Name,Access,ShareMode,NULL,CREATE_ALWAYS,0,NULL);
- if (hFile==BAD_HANDLE)
+ // Windows automatically removes dots and spaces in the end of file name,
+ // So we detect such names and process them with \\?\ prefix.
+ wchar *LastChar=PointToLastChar(Name);
+ bool Special=*LastChar=='.' || *LastChar==' ';
+
+ if (Special)
+ hFile=FILE_BAD_HANDLE;
+ else
+ hFile=CreateFile(Name,Access,ShareMode,NULL,CREATE_ALWAYS,0,NULL);
+
+ if (hFile==FILE_BAD_HANDLE)
{
wchar LongName[NM];
if (GetWinLongPath(Name,LongName,ASIZE(LongName)))
@@ -180,7 +189,7 @@ bool File::Create(const wchar *Name,uint Mode)
char NameA[NM];
WideToChar(Name,NameA,ASIZE(NameA));
#ifdef FILE_USE_OPEN
- hFile=open(NameA,(O_CREAT|O_TRUNC) | (WriteMode ? O_WRONLY : O_RDWR));
+ hFile=open(NameA,(O_CREAT|O_TRUNC) | (WriteMode ? O_WRONLY : O_RDWR),0666);
#else
hFile=fopen(NameA,WriteMode ? WRITEBINARY:CREATEBINARY);
#endif
@@ -189,11 +198,11 @@ bool File::Create(const wchar *Name,uint Mode)
HandleType=FILE_HANDLENORMAL;
SkipClose=false;
wcsncpyz(FileName,Name,ASIZE(FileName));
- return hFile!=BAD_HANDLE;
+ return hFile!=FILE_BAD_HANDLE;
}
-#if !defined(SHELL_EXT) && !defined(SFX_MODULE)
+#if !defined(SFX_MODULE)
void File::TCreate(const wchar *Name,uint Mode)
{
if (!WCreate(Name,Mode))
@@ -215,7 +224,7 @@ bool File::Close()
{
bool Success=true;
- if (hFile!=BAD_HANDLE)
+ if (hFile!=FILE_BAD_HANDLE)
{
if (!SkipClose)
{
@@ -232,7 +241,7 @@ bool File::Close()
#endif
#endif
}
- hFile=BAD_HANDLE;
+ hFile=FILE_BAD_HANDLE;
}
HandleType=FILE_HANDLENORMAL;
if (!Success && AllowExceptions)
@@ -245,7 +254,7 @@ bool File::Delete()
{
if (HandleType!=FILE_HANDLENORMAL)
return false;
- if (hFile!=BAD_HANDLE)
+ if (hFile!=FILE_BAD_HANDLE)
Close();
if (!AllowDelete)
return false;
@@ -268,17 +277,17 @@ bool File::Rename(const wchar *NewName)
}
-void File::Write(const void *Data,size_t Size)
+bool File::Write(const void *Data,size_t Size)
{
if (Size==0)
- return;
+ return true;
if (HandleType==FILE_HANDLESTD)
{
#ifdef _WIN_ALL
hFile=GetStdHandle(STD_OUTPUT_HANDLE);
#else
// Cannot use the standard stdout here, because it already has wide orientation.
- if (hFile==BAD_HANDLE)
+ if (hFile==FILE_BAD_HANDLE)
{
#ifdef FILE_USE_OPEN
hFile=dup(STDOUT_FILENO); // Open new stdout stream.
@@ -288,9 +297,10 @@ void File::Write(const void *Data,size_t Size)
}
#endif
}
+ bool Success;
while (1)
{
- bool Success=false;
+ Success=false;
#ifdef _WIN_ALL
DWORD Written=0;
if (HandleType!=FILE_HANDLENORMAL)
@@ -339,6 +349,7 @@ void File::Write(const void *Data,size_t Size)
break;
}
LastWrite=true;
+ return Success; // It can return false only if AllowExceptions is disabled.
}
@@ -390,8 +401,8 @@ int File::DirectRead(void *Data,size_t Size)
if (HandleType==FILE_HANDLESTD)
{
#ifdef _WIN_ALL
- if (Size>MaxDeviceRead)
- Size=MaxDeviceRead;
+// if (Size>MaxDeviceRead)
+// Size=MaxDeviceRead;
hFile=GetStdHandle(STD_INPUT_HANDLE);
#else
#ifdef FILE_USE_OPEN
@@ -402,6 +413,8 @@ int File::DirectRead(void *Data,size_t Size)
#endif
}
#ifdef _WIN_ALL
+ // For pipes like 'type file.txt | rar -si arcname' ReadFile may return
+ // data in small ~4KB blocks. It may slightly reduce the compression ratio.
DWORD Read;
if (!ReadFile(hFile,Data,(DWORD)Size,&Read,NULL))
{
@@ -454,7 +467,7 @@ void File::Seek(int64 Offset,int Method)
bool File::RawSeek(int64 Offset,int Method)
{
- if (hFile==BAD_HANDLE)
+ if (hFile==FILE_BAD_HANDLE)
return true;
if (Offset<0 && Method!=SEEK_SET)
{
@@ -469,7 +482,7 @@ bool File::RawSeek(int64 Offset,int Method)
#else
LastWrite=false;
#ifdef FILE_USE_OPEN
- if (lseek64(hFile,Offset,Method)==-1)
+ if (lseek(hFile,(off_t)Offset,Method)==-1)
return false;
#elif defined(_LARGEFILE_SOURCE) && !defined(_OSF_SOURCE) && !defined(__VMS)
if (fseeko(hFile,Offset,Method)!=0)
@@ -485,7 +498,7 @@ bool File::RawSeek(int64 Offset,int Method)
int64 File::Tell()
{
- if (hFile==BAD_HANDLE)
+ if (hFile==FILE_BAD_HANDLE)
if (AllowExceptions)
ErrHandler.SeekError(FileName);
else
@@ -501,7 +514,7 @@ int64 File::Tell()
return INT32TO64(HighDist,LowDist);
#else
#ifdef FILE_USE_OPEN
- return lseek64(hFile,0,SEEK_CUR);
+ return lseek(hFile,0,SEEK_CUR);
#elif defined(_LARGEFILE_SOURCE) && !defined(_OSF_SOURCE)
return ftello(hFile);
#else
@@ -524,7 +537,7 @@ void File::Prealloc(int64 Size)
#if defined(_UNIX) && defined(USE_FALLOCATE)
// fallocate is rather new call. Only latest kernels support it.
// So we are not using it by default yet.
- int fd = GetFD(hFile);
+ int fd = GetFD();
if (fd >= 0)
fallocate(fd, 0, 0, Size);
#endif
@@ -550,7 +563,20 @@ bool File::Truncate()
#ifdef _WIN_ALL
return SetEndOfFile(hFile)==TRUE;
#else
- return false;
+ return ftruncate(GetFD(),(off_t)Tell())==0;
+#endif
+}
+
+
+void File::Flush()
+{
+#ifdef _WIN_ALL
+ FlushFileBuffers(hFile);
+#else
+#ifndef FILE_USE_OPEN
+ fflush(hFile);
+#endif
+ fsync(GetFD());
#endif
}
@@ -569,11 +595,11 @@ void File::SetOpenFileTime(RarTime *ftm,RarTime *ftc,RarTime *fta)
bool sa=fta!=NULL && fta->IsSet();
FILETIME fm,fc,fa;
if (sm)
- ftm->GetWin32(&fm);
+ ftm->GetWinFT(&fm);
if (sc)
- ftc->GetWin32(&fc);
+ ftc->GetWinFT(&fc);
if (sa)
- fta->GetWin32(&fa);
+ fta->GetWinFT(&fa);
SetFileTime(hFile,sc ? &fc:NULL,sa ? &fa:NULL,sm ? &fm:NULL);
#endif
}
@@ -581,6 +607,12 @@ void File::SetOpenFileTime(RarTime *ftm,RarTime *ftc,RarTime *fta)
void File::SetCloseFileTime(RarTime *ftm,RarTime *fta)
{
+// Android APP_PLATFORM := android-14 does not support futimens and futimes.
+// Newer platforms support futimens, but fail on Android 4.2.
+// We have to use utime for Android.
+// Also we noticed futimens fail to set timestamps on NTFS partition
+// mounted to virtual Linux x86 machine, but utimensat worked correctly.
+// So we set timestamps for already closed files in Unix.
#ifdef _UNIX
SetCloseFileTimeByName(FileName,ftm,fta);
#endif
@@ -594,18 +626,28 @@ void File::SetCloseFileTimeByName(const wchar *Name,RarTime *ftm,RarTime *fta)
bool seta=fta!=NULL && fta->IsSet();
if (setm || seta)
{
+ char NameA[NM];
+ WideToChar(Name,NameA,ASIZE(NameA));
+
+#ifdef UNIX_TIME_NS
+ timespec times[2];
+ times[0].tv_sec=seta ? fta->GetUnix() : 0;
+ times[0].tv_nsec=seta ? long(fta->GetUnixNS()%1000000000) : UTIME_NOW;
+ times[1].tv_sec=setm ? ftm->GetUnix() : 0;
+ times[1].tv_nsec=setm ? long(ftm->GetUnixNS()%1000000000) : UTIME_NOW;
+ utimensat(AT_FDCWD,NameA,times,0);
+#else
utimbuf ut;
if (setm)
ut.modtime=ftm->GetUnix();
else
- ut.modtime=fta->GetUnix();
+ ut.modtime=fta->GetUnix(); // Need to set something, cannot left it 0.
if (seta)
ut.actime=fta->GetUnix();
else
- ut.actime=ut.modtime;
- char NameA[NM];
- WideToChar(Name,NameA,ASIZE(NameA));
+ ut.actime=ut.modtime; // Need to set something, cannot left it 0.
utime(NameA,&ut);
+#endif
}
#endif
}
@@ -616,12 +658,12 @@ void File::GetOpenFileTime(RarTime *ft)
#ifdef _WIN_ALL
FILETIME FileTime;
GetFileTime(hFile,NULL,NULL,&FileTime);
- *ft=FileTime;
+ ft->SetWinFT(&FileTime);
#endif
#if defined(_UNIX) || defined(_EMX)
struct stat st;
fstat(GetFD(),&st);
- *ft=st.st_mtime;
+ ft->SetUnix(st.st_mtime);
#endif
}
@@ -636,7 +678,7 @@ int64 File::FileLength()
bool File::IsDevice()
{
- if (hFile==BAD_HANDLE)
+ if (hFile==FILE_BAD_HANDLE)
return false;
#ifdef _WIN_ALL
uint Type=GetFileType(hFile);
@@ -650,7 +692,7 @@ bool File::IsDevice()
#ifndef SFX_MODULE
int64 File::Copy(File &Dest,int64 Length)
{
- Array<char> Buffer(0x10000);
+ Array<char> Buffer(0x40000);
int64 CopySize=0;
bool CopyAll=(Length==INT64NDF);
@@ -667,7 +709,7 @@ int64 File::Copy(File &Dest,int64 Length)
// For FAT32 USB flash drives in Windows if first write is 4 KB or more,
// write caching is disabled and "write through" is enabled, resulting
// in bad performance, especially for many small files. It happens when
- // we create SFX archive on USB drive, because SFX module is writetn first.
+ // we create SFX archive on USB drive, because SFX module is written first.
// So we split the first write to small 1 KB followed by rest of data.
if (CopySize==0 && WriteSize>=4096)
{
diff --git a/src/thirdparty/unrar/file.hpp b/src/thirdparty/unrar/file.hpp
index 7829aaeb0..9d8193edc 100644
--- a/src/thirdparty/unrar/file.hpp
+++ b/src/thirdparty/unrar/file.hpp
@@ -1,19 +1,17 @@
#ifndef _RAR_FILE_
#define _RAR_FILE_
-#ifdef _ANDROID // Need lseek64 to handle >2 GB files in Android.
#define FILE_USE_OPEN
-#endif
#ifdef _WIN_ALL
typedef HANDLE FileHandle;
- #define BAD_HANDLE INVALID_HANDLE_VALUE
+ #define FILE_BAD_HANDLE INVALID_HANDLE_VALUE
#elif defined(FILE_USE_OPEN)
typedef off_t FileHandle;
- #define BAD_HANDLE -1
+ #define FILE_BAD_HANDLE -1
#else
typedef FILE* FileHandle;
- #define BAD_HANDLE NULL
+ #define FILE_BAD_HANDLE NULL
#endif
class RAROptions;
@@ -35,8 +33,11 @@ enum FILE_MODE_FLAGS {
// Open files which are already opened for write by other programs.
FMF_OPENSHARED=4,
+ // Open files only if no other program is opened it even in shared mode.
+ FMF_OPENEXCLUSIVE=8,
+
// Provide read access to created file for other programs.
- FMF_SHAREREAD=8,
+ FMF_SHAREREAD=16,
// Mode flags are not defined yet.
FMF_UNDEFINED=256
@@ -77,7 +78,7 @@ class File
bool Close();
bool Delete();
bool Rename(const wchar *NewName);
- void Write(const void *Data,size_t Size);
+ bool Write(const void *Data,size_t Size);
virtual int Read(void *Data,size_t Size);
int DirectRead(void *Data,size_t Size);
virtual void Seek(int64 Offset,int Method);
@@ -87,11 +88,12 @@ class File
byte GetByte();
void PutByte(byte Byte);
bool Truncate();
+ void Flush();
void SetOpenFileTime(RarTime *ftm,RarTime *ftc=NULL,RarTime *fta=NULL);
void SetCloseFileTime(RarTime *ftm,RarTime *fta=NULL);
static void SetCloseFileTimeByName(const wchar *Name,RarTime *ftm,RarTime *fta);
void GetOpenFileTime(RarTime *ft);
- bool IsOpened() {return hFile!=BAD_HANDLE;};
+ bool IsOpened() {return hFile!=FILE_BAD_HANDLE;};
int64 FileLength();
void SetHandleType(FILE_HANDLETYPE Type) {HandleType=Type;}
FILE_HANDLETYPE GetHandleType() {return HandleType;}
diff --git a/src/thirdparty/unrar/filefn.cpp b/src/thirdparty/unrar/filefn.cpp
index 679060578..4eb7b9b2f 100644
--- a/src/thirdparty/unrar/filefn.cpp
+++ b/src/thirdparty/unrar/filefn.cpp
@@ -3,7 +3,11 @@
MKDIR_CODE MakeDir(const wchar *Name,bool SetAttr,uint Attr)
{
#ifdef _WIN_ALL
- BOOL RetCode=CreateDirectory(Name,NULL);
+ // Windows automatically removes dots and spaces in the end of directory
+ // name. So we detect such names and process them with \\?\ prefix.
+ wchar *LastChar=PointToLastChar(Name);
+ bool Special=*LastChar=='.' || *LastChar==' ';
+ BOOL RetCode=Special ? FALSE : CreateDirectory(Name,NULL);
if (RetCode==0 && !FileExist(Name))
{
wchar LongName[NM];
@@ -54,8 +58,9 @@ bool CreatePath(const wchar *Path,bool SkipLastName)
break;
// Process all kinds of path separators, so user can enter Unix style
- // path in Windows or Windows in Unix.
- if (IsPathDiv(*s))
+ // path in Windows or Windows in Unix. s>Path check avoids attempting
+ // creating an empty directory for paths starting from path separator.
+ if (IsPathDiv(*s) && s>Path)
{
#ifdef _WIN_ALL
// We must not attempt to create "D:" directory, because first
@@ -68,13 +73,11 @@ bool CreatePath(const wchar *Path,bool SkipLastName)
DirName[s-Path]=0;
Success=MakeDir(DirName,true,DirAttr)==MKDIR_SUCCESS;
-#ifndef GUI
if (Success)
{
mprintf(St(MCreatDir),DirName);
mprintf(L" %s",St(MOk));
}
-#endif
}
}
if (!SkipLastName && !IsPathDiv(*PointToLastChar(Path)))
@@ -85,7 +88,7 @@ bool CreatePath(const wchar *Path,bool SkipLastName)
void SetDirTime(const wchar *Name,RarTime *ftm,RarTime *ftc,RarTime *fta)
{
-#ifdef _WIN_ALL
+#if defined(_WIN_ALL)
bool sm=ftm!=NULL && ftm->IsSet();
bool sc=ftc!=NULL && ftc->IsSet();
bool sa=fta!=NULL && fta->IsSet();
@@ -109,11 +112,11 @@ void SetDirTime(const wchar *Name,RarTime *ftm,RarTime *ftc,RarTime *fta)
return;
FILETIME fm,fc,fa;
if (sm)
- ftm->GetWin32(&fm);
+ ftm->GetWinFT(&fm);
if (sc)
- ftc->GetWin32(&fc);
+ ftc->GetWinFT(&fc);
if (sa)
- fta->GetWin32(&fa);
+ fta->GetWinFT(&fa);
SetFileTime(hFile,sc ? &fc:NULL,sa ? &fa:NULL,sm ? &fm:NULL);
CloseHandle(hFile);
if (ResetAttr)
@@ -127,7 +130,7 @@ void SetDirTime(const wchar *Name,RarTime *ftm,RarTime *ftc,RarTime *fta)
bool IsRemovable(const wchar *Name)
{
-#ifdef _WIN_ALL
+#if defined(_WIN_ALL)
wchar Root[NM];
GetPathRoot(Name,Root,ASIZE(Root));
int Type=GetDriveType(*Root!=0 ? Root:NULL);
@@ -169,6 +172,19 @@ int64 GetFreeDisk(const wchar *Name)
#endif
+#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SILENT)
+// Return 'true' for FAT and FAT32, so we can adjust the maximum supported
+// file size to 4 GB for these file systems.
+bool IsFAT(const wchar *Name)
+{
+ wchar Root[NM];
+ GetPathRoot(Name,Root,ASIZE(Root));
+ wchar FileSystem[MAX_PATH+1];
+ if (GetVolumeInformation(Root,NULL,0,NULL,NULL,NULL,FileSystem,ASIZE(FileSystem)))
+ return wcscmp(FileSystem,L"FAT")==0 || wcscmp(FileSystem,L"FAT32")==0;
+ return false;
+}
+#endif
bool FileExist(const wchar *Name)
@@ -304,19 +320,52 @@ bool SetFileAttr(const wchar *Name,uint Attr)
}
+#if 0
+wchar *MkTemp(wchar *Name,size_t MaxSize)
+{
+ size_t Length=wcslen(Name);
+
+ RarTime CurTime;
+ CurTime.SetCurrentTime();
+
+ // We cannot use CurTime.GetWin() as is, because its lowest bits can
+ // have low informational value, like being a zero or few fixed numbers.
+ uint Random=(uint)(CurTime.GetWin()/100000);
+ // Using PID we guarantee that different RAR copies use different temp names
+ // even if started in exactly the same time.
+ uint PID=0;
+#ifdef _WIN_ALL
+ PID=(uint)GetCurrentProcessId();
+#elif defined(_UNIX)
+ PID=(uint)getpid();
+#endif
-#if !defined(SFX_MODULE) && !defined(SHELL_EXT) && !defined(SETUP)
+ for (uint Attempt=0;;Attempt++)
+ {
+ uint Ext=Random%50000+Attempt;
+ wchar RndText[50];
+ swprintf(RndText,ASIZE(RndText),L"%u.%03u",PID,Ext);
+ if (Length+wcslen(RndText)>=MaxSize || Attempt==1000)
+ return NULL;
+ wcscpy(Name+Length,RndText);
+ if (!FileExist(Name))
+ break;
+ }
+ return Name;
+}
+#endif
+
+
+#if !defined(SFX_MODULE)
void CalcFileSum(File *SrcFile,uint *CRC32,byte *Blake2,uint Threads,int64 Size,uint Flags)
{
SaveFilePos SavePos(*SrcFile);
#ifndef SILENT
- int64 FileLength=SrcFile->FileLength();
+ int64 FileLength=Size==INT64NDF ? SrcFile->FileLength() : Size;
#endif
-#ifndef GUI
- if ((Flags & (CALCFSUM_SHOWTEXT|CALCFSUM_SHOWALL))!=0)
-#endif
+ if ((Flags & (CALCFSUM_SHOWTEXT|CALCFSUM_SHOWPERCENT))!=0)
uiMsg(UIEVENT_FILESUMSTART);
if ((Flags & CALCFSUM_CURPOS)==0)
@@ -331,6 +380,7 @@ void CalcFileSum(File *SrcFile,uint *CRC32,byte *Blake2,uint Threads,int64 Size,
HashBlake2.Init(HASH_BLAKE2,Threads);
int64 BlockCount=0;
+ int64 TotalRead=0;
while (true)
{
size_t SizeToRead;
@@ -341,14 +391,18 @@ void CalcFileSum(File *SrcFile,uint *CRC32,byte *Blake2,uint Threads,int64 Size,
int ReadSize=SrcFile->Read(&Data[0],SizeToRead);
if (ReadSize==0)
break;
+ TotalRead+=ReadSize;
if ((++BlockCount & 0xf)==0)
{
#ifndef SILENT
-#ifndef GUI
- if ((Flags & CALCFSUM_SHOWALL)!=0)
-#endif
- uiMsg(UIEVENT_FILESUMPROGRESS,ToPercent(BlockCount*int64(BufSize),FileLength));
+ if ((Flags & CALCFSUM_SHOWPROGRESS)!=0)
+ uiExtractProgress(TotalRead,FileLength,TotalRead,FileLength);
+ else
+ {
+ if ((Flags & CALCFSUM_SHOWPERCENT)!=0)
+ uiMsg(UIEVENT_FILESUMPROGRESS,ToPercent(TotalRead,FileLength));
+ }
#endif
Wait();
}
@@ -361,9 +415,7 @@ void CalcFileSum(File *SrcFile,uint *CRC32,byte *Blake2,uint Threads,int64 Size,
if (Size!=INT64NDF)
Size-=ReadSize;
}
-#ifndef GUI
- if ((Flags & CALCFSUM_SHOWALL)!=0)
-#endif
+ if ((Flags & CALCFSUM_SHOWPERCENT)!=0)
uiMsg(UIEVENT_FILESUMEND);
if (CRC32!=NULL)
@@ -394,7 +446,8 @@ bool RenameFile(const wchar *SrcName,const wchar *DestName)
char SrcNameA[NM],DestNameA[NM];
WideToChar(SrcName,SrcNameA,ASIZE(SrcNameA));
WideToChar(DestName,DestNameA,ASIZE(DestNameA));
- return rename(SrcNameA,DestNameA)==0;
+ bool Success=rename(SrcNameA,DestNameA)==0;
+ return Success;
#endif
}
@@ -413,7 +466,8 @@ bool DelFile(const wchar *Name)
#else
char NameA[NM];
WideToChar(Name,NameA,ASIZE(NameA));
- return remove(NameA)==0;
+ bool Success=remove(NameA)==0;
+ return Success;
#endif
}
diff --git a/src/thirdparty/unrar/filefn.hpp b/src/thirdparty/unrar/filefn.hpp
index d89329471..1bda9b58e 100644
--- a/src/thirdparty/unrar/filefn.hpp
+++ b/src/thirdparty/unrar/filefn.hpp
@@ -12,6 +12,9 @@ bool IsRemovable(const wchar *Name);
int64 GetFreeDisk(const wchar *Name);
#endif
+#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SILENT)
+bool IsFAT(const wchar *Root);
+#endif
bool FileExist(const wchar *Name);
bool WildFileExist(const wchar *Name);
@@ -24,8 +27,11 @@ bool IsDeleteAllowed(uint FileAttr);
void PrepareToDelete(const wchar *Name);
uint GetFileAttr(const wchar *Name);
bool SetFileAttr(const wchar *Name,uint Attr);
+#if 0
+wchar* MkTemp(wchar *Name,size_t MaxSize);
+#endif
-enum CALCFSUM_FLAGS {CALCFSUM_SHOWTEXT=1,CALCFSUM_SHOWALL=2,CALCFSUM_CURPOS=4};
+enum CALCFSUM_FLAGS {CALCFSUM_SHOWTEXT=1,CALCFSUM_SHOWPERCENT=2,CALCFSUM_SHOWPROGRESS=4,CALCFSUM_CURPOS=8};
void CalcFileSum(File *SrcFile,uint *CRC32,byte *Blake2,uint Threads,int64 Size=INT64NDF,uint Flags=0);
diff --git a/src/thirdparty/unrar/filestr.cpp b/src/thirdparty/unrar/filestr.cpp
index b719206c7..4a53132f0 100644
--- a/src/thirdparty/unrar/filestr.cpp
+++ b/src/thirdparty/unrar/filestr.cpp
@@ -1,7 +1,5 @@
#include "rar.hpp"
-static bool IsUnicode(byte *Data,int Size);
-
bool ReadTextFile(
const wchar *Name,
StringList *List,
@@ -36,155 +34,129 @@ bool ReadTextFile(
else
SrcFile.SetHandleType(FILE_HANDLESTD);
- unsigned int DataSize=0,ReadSize;
- const int ReadBlock=1024;
- Array<char> Data(ReadBlock+5);
+ uint DataSize=0,ReadSize;
+ const int ReadBlock=4096;
+
+ Array<byte> Data(ReadBlock);
while ((ReadSize=SrcFile.Read(&Data[DataSize],ReadBlock))!=0)
{
DataSize+=ReadSize;
- Data.Add(ReadSize);
+ Data.Add(ReadSize); // Always have ReadBlock available for next data.
}
+ // Set to really read size, so we can zero terminate it correctly.
+ Data.Alloc(DataSize);
- memset(&Data[DataSize],0,5);
+ int LowEndian=DataSize>=2 && Data[0]==255 && Data[1]==254 ? 1:0;
+ int BigEndian=DataSize>=2 && Data[0]==254 && Data[1]==255 ? 1:0;
+ bool Utf8=DataSize>=3 && Data[0]==0xef && Data[1]==0xbb && Data[2]==0xbf;
- Array<wchar> WideStr;
-
- if (SrcCharset==RCH_UNICODE ||
- SrcCharset==RCH_DEFAULT && IsUnicode((byte *)&Data[0],DataSize))
+ if (SrcCharset==RCH_DEFAULT)
{
- // Unicode in native system format, can be more than 2 bytes per character.
- Array<wchar> DataW(Data.Size()/2+1);
- for (size_t I=2;I<Data.Size()-1;I+=2)
- {
- // Need to convert Data to (byte) first to prevent the sign extension
- // to higher bytes.
- DataW[(I-2)/2]=(wchar)((byte)Data[I])+(wchar)((byte)Data[I+1])*256;
- }
-
- wchar *CurStr=&DataW[0];
-
- while (*CurStr!=0)
- {
- wchar *NextStr=CurStr,*CmtPtr=NULL;
- while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0)
- {
- if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/')
+ if (LowEndian || BigEndian)
+ for (size_t I=2;I<DataSize;I++)
+ if (Data[I]<32 && Data[I]!='\r' && Data[I]!='\n')
{
- *NextStr=0;
- CmtPtr=NextStr;
- }
- NextStr++;
- }
- *NextStr=0;
- for (wchar *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--)
- {
- if (*SpacePtr!=' ' && *SpacePtr!='\t')
+ SrcCharset=RCH_UNICODE; // High byte in UTF-16 char is found.
break;
- *SpacePtr=0;
- }
- if (*CurStr!=0)
- {
- size_t Length=wcslen(CurStr);
-
- if (Unquote && *CurStr=='\"' && CurStr[Length-1]=='\"')
- {
- CurStr[Length-1]=0;
- CurStr++;
}
+ if (Utf8)
+ {
+ Data.Push(0); // Need a zero terminated string for UtfToWide.
+ if (IsTextUtf8((const char *)(Data+3)))
+ SrcCharset=RCH_UTF8;
+ }
+ }
- bool Expanded=false;
-#ifdef _WIN_ALL
- if (ExpandEnvStr && *CurStr=='%')
- {
- // Expanding environment variables in Windows version.
-
- wchar ExpName[NM];
- *ExpName=0;
- DWORD Result=ExpandEnvironmentStrings(CurStr,ExpName,ASIZE(ExpName));
- Expanded=Result!=0 && Result<ASIZE(ExpName);
- if (Expanded)
- List->AddString(ExpName);
- }
+ Array<wchar> DataW;
+
+ if (SrcCharset==RCH_DEFAULT || SrcCharset==RCH_OEM || SrcCharset==RCH_ANSI)
+ {
+ Data.Push(0); // Zero terminate.
+#if defined(_WIN_ALL)
+ if (SrcCharset==RCH_OEM)
+ OemToCharA((char *)&Data[0],(char *)&Data[0]);
#endif
- if (!Expanded)
- List->AddString(CurStr);
- }
- CurStr=NextStr+1;
- while (*CurStr=='\r' || *CurStr=='\n')
- CurStr++;
+ DataW.Alloc(Data.Size());
+ CharToWide((char *)&Data[0],&DataW[0],DataW.Size());
+ }
+
+ if (SrcCharset==RCH_UNICODE)
+ {
+ size_t Start=2; // Skip byte order mark.
+ if (!LowEndian && !BigEndian) // No byte order mask.
+ {
+ Start=0;
+ LowEndian=1;
}
+
+ DataW.Alloc(Data.Size()/2+1);
+ size_t End=Data.Size() & ~1; // We need even bytes number for UTF-16.
+ for (size_t I=Start;I<End;I+=2)
+ DataW[(I-Start)/2]=Data[I+BigEndian]+Data[I+LowEndian]*256;
+ DataW[(End-Start)/2]=0;
}
- else
+
+ if (SrcCharset==RCH_UTF8)
{
- char *CurStr=&Data[0];
- while (*CurStr!=0)
+ Data.Push(0); // Zero terminate data.
+ DataW.Alloc(Data.Size());
+ UtfToWide((const char *)(Data+(Utf8 ? 3:0)),&DataW[0],DataW.Size());
+ }
+
+ wchar *CurStr=&DataW[0];
+
+ while (*CurStr!=0)
+ {
+ wchar *NextStr=CurStr,*CmtPtr=NULL;
+ while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0)
{
- char *NextStr=CurStr,*CmtPtr=NULL;
- while (*NextStr!='\r' && *NextStr!='\n' && *NextStr!=0)
+ if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/')
{
- if (SkipComments && NextStr[0]=='/' && NextStr[1]=='/')
- {
- *NextStr=0;
- CmtPtr=NextStr;
- }
- NextStr++;
+ *NextStr=0;
+ CmtPtr=NextStr;
}
- *NextStr=0;
- for (char *SpacePtr=(CmtPtr ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--)
+ NextStr++;
+ }
+ bool Done=*NextStr==0;
+
+ *NextStr=0;
+ for (wchar *SpacePtr=(CmtPtr!=NULL ? CmtPtr:NextStr)-1;SpacePtr>=CurStr;SpacePtr--)
+ {
+ if (*SpacePtr!=' ' && *SpacePtr!='\t')
+ break;
+ *SpacePtr=0;
+ }
+
+ if (Unquote && *CurStr=='\"')
+ {
+ size_t Length=wcslen(CurStr);
+ if (CurStr[Length-1]=='\"')
{
- if (*SpacePtr!=' ' && *SpacePtr!='\t')
- break;
- *SpacePtr=0;
+ CurStr[Length-1]=0;
+ CurStr++;
}
- if (*CurStr)
- {
- if (Unquote && *CurStr=='\"')
- {
- size_t Length=strlen(CurStr);
- if (CurStr[Length-1]=='\"')
- {
- CurStr[Length-1]=0;
- CurStr++;
- }
- }
-#if defined(_WIN_ALL)
- if (SrcCharset==RCH_OEM)
- OemToCharA(CurStr,CurStr);
-#endif
-
- bool Expanded=false;
+ }
- WideStr.Alloc(strlen(CurStr)+1);
- CharToWide(CurStr,&WideStr[0],WideStr.Size());
-#ifdef _WIN_ALL
- if (ExpandEnvStr && *CurStr=='%')
- {
- // Expanding environment variables in Windows version.
- wchar ExpName[NM];
- DWORD Result=ExpandEnvironmentStringsW(&WideStr[0],ExpName,ASIZE(ExpName));
- Expanded=Result!=0 && Result<ASIZE(ExpName);
- if (Expanded)
- List->AddString(ExpName);
- }
-#endif
- if (!Expanded)
- List->AddString(&WideStr[0]);
- }
- CurStr=NextStr+1;
- while (*CurStr=='\r' || *CurStr=='\n')
- CurStr++;
+ bool Expanded=false;
+#if defined(_WIN_ALL)
+ if (ExpandEnvStr && *CurStr=='%') // Expand environment variables in Windows.
+ {
+ wchar ExpName[NM];
+ *ExpName=0;
+ DWORD Result=ExpandEnvironmentStrings(CurStr,ExpName,ASIZE(ExpName));
+ Expanded=Result!=0 && Result<ASIZE(ExpName);
+ if (Expanded && *ExpName!=0)
+ List->AddString(ExpName);
}
+#endif
+ if (!Expanded && *CurStr!=0)
+ List->AddString(CurStr);
+
+ if (Done)
+ break;
+ CurStr=NextStr+1;
+ while (*CurStr=='\r' || *CurStr=='\n')
+ CurStr++;
}
return true;
}
-
-
-bool IsUnicode(byte *Data,int Size)
-{
- if (Size<4 || Data[0]!=0xff || Data[1]!=0xfe)
- return false;
- for (int I=2;I<Size;I++)
- if (Data[I]<32 && Data[I]!='\r' && Data[I]!='\n')
- return true;
- return false;
-}
diff --git a/src/thirdparty/unrar/find.cpp b/src/thirdparty/unrar/find.cpp
index 2e6c43481..812af6b3c 100644
--- a/src/thirdparty/unrar/find.cpp
+++ b/src/thirdparty/unrar/find.cpp
@@ -142,9 +142,17 @@ bool FindFile::FastFind(const wchar *FindMask,FindData *fd,bool GetSymLink)
}
fd->FileAttr=st.st_mode;
fd->Size=st.st_size;
- fd->mtime=st.st_mtime;
- fd->atime=st.st_atime;
- fd->ctime=st.st_ctime;
+
+#ifdef UNIX_TIME_NS
+ fd->mtime.SetUnixNS(st.st_mtim.tv_sec*(uint64)1000000000+st.st_mtim.tv_nsec);
+ fd->atime.SetUnixNS(st.st_atim.tv_sec*(uint64)1000000000+st.st_atim.tv_nsec);
+ fd->ctime.SetUnixNS(st.st_ctim.tv_sec*(uint64)1000000000+st.st_ctim.tv_nsec);
+#else
+ fd->mtime.SetUnix(st.st_mtime);
+ fd->atime.SetUnix(st.st_atime);
+ fd->ctime.SetUnix(st.st_ctime);
+#endif
+
wcsncpyz(fd->Name,FindMask,ASIZE(fd->Name));
#endif
fd->Flags=0;
@@ -171,9 +179,14 @@ HANDLE FindFile::Win32Find(HANDLE hFind,const wchar *Mask,FindData *fd)
if (hFind==INVALID_HANDLE_VALUE)
{
int SysErr=GetLastError();
- fd->Error=(SysErr!=ERROR_FILE_NOT_FOUND &&
- SysErr!=ERROR_PATH_NOT_FOUND &&
- SysErr!=ERROR_NO_MORE_FILES);
+ // We must not issue an error for "file not found" and "path not found",
+ // because it is normal to not find anything for wildcard mask when
+ // archiving. Also searching for non-existent file is normal in some
+ // other modules, like WinRAR scanning for winrar_theme_description.txt
+ // to check if any themes are available.
+ fd->Error=SysErr!=ERROR_FILE_NOT_FOUND &&
+ SysErr!=ERROR_PATH_NOT_FOUND &&
+ SysErr!=ERROR_NO_MORE_FILES;
}
}
else
@@ -192,9 +205,9 @@ HANDLE FindFile::Win32Find(HANDLE hFind,const wchar *Mask,FindData *fd)
fd->ftCreationTime=FindData.ftCreationTime;
fd->ftLastAccessTime=FindData.ftLastAccessTime;
fd->ftLastWriteTime=FindData.ftLastWriteTime;
- fd->mtime=FindData.ftLastWriteTime;
- fd->ctime=FindData.ftCreationTime;
- fd->atime=FindData.ftLastAccessTime;
+ fd->mtime.SetWinFT(&FindData.ftLastWriteTime);
+ fd->ctime.SetWinFT(&FindData.ftCreationTime);
+ fd->atime.SetWinFT(&FindData.ftLastAccessTime);
}
diff --git a/src/thirdparty/unrar/getbits.cpp b/src/thirdparty/unrar/getbits.cpp
index e57b3e32f..e4db2695f 100644
--- a/src/thirdparty/unrar/getbits.cpp
+++ b/src/thirdparty/unrar/getbits.cpp
@@ -38,7 +38,7 @@ void BitInput::faddbits(uint Bits)
uint BitInput::fgetbits()
{
// Function wrapped version of inline getbits to save code size.
- return(getbits());
+ return getbits();
}
diff --git a/src/thirdparty/unrar/getbits.hpp b/src/thirdparty/unrar/getbits.hpp
index 6a5430b0b..2e151da9a 100644
--- a/src/thirdparty/unrar/getbits.hpp
+++ b/src/thirdparty/unrar/getbits.hpp
@@ -37,7 +37,7 @@ class BitInput
BitField|=(uint)InBuf[InAddr+1] << 8;
BitField|=(uint)InBuf[InAddr+2];
BitField >>= (8-InBit);
- return(BitField & 0xffff);
+ return BitField & 0xffff;
}
// Return 32 bits from current position in the buffer.
@@ -50,7 +50,7 @@ class BitInput
BitField|=(uint)InBuf[InAddr+3];
BitField <<= InBit;
BitField|=(uint)InBuf[InAddr+4] >> (8-InBit);
- return(BitField & 0xffffffff);
+ return BitField & 0xffffffff;
}
void faddbits(uint Bits);
@@ -60,7 +60,7 @@ class BitInput
// if buffer will be overflown.
bool Overflow(uint IncPtr)
{
- return(InAddr+IncPtr>=MAX_SIZE);
+ return InAddr+IncPtr>=MAX_SIZE;
}
void SetExternalBuffer(byte *Buf);
diff --git a/src/thirdparty/unrar/hash.cpp b/src/thirdparty/unrar/hash.cpp
index 578e32fa0..42791f4f4 100644
--- a/src/thirdparty/unrar/hash.cpp
+++ b/src/thirdparty/unrar/hash.cpp
@@ -41,6 +41,7 @@ bool HashValue::operator == (const HashValue &cmp)
DataHash::DataHash()
{
+ blake2ctx=NULL;
HashType=HASH_NONE;
#ifdef RAR_SMP
ThPool=NULL;
@@ -54,20 +55,26 @@ DataHash::~DataHash()
#ifdef RAR_SMP
DestroyThreadPool(ThPool);
#endif
- cleandata(&blake2ctx, sizeof(blake2ctx));
cleandata(&CurCRC32, sizeof(CurCRC32));
+ if (blake2ctx!=NULL)
+ {
+ cleandata(blake2ctx, sizeof(blake2sp_state));
+ delete blake2ctx;
+ }
}
void DataHash::Init(HASH_TYPE Type,uint MaxThreads)
{
+ if (blake2ctx==NULL)
+ blake2ctx=new blake2sp_state;
HashType=Type;
if (Type==HASH_RAR14)
CurCRC32=0;
if (Type==HASH_CRC32)
CurCRC32=0xffffffff; // Initial CRC32 value.
if (Type==HASH_BLAKE2)
- blake2sp_init( &blake2ctx );
+ blake2sp_init(blake2ctx);
#ifdef RAR_SMP
DataHash::MaxThreads=Min(MaxThreads,MaxHashThreads);
#endif
@@ -88,10 +95,10 @@ void DataHash::Update(const void *Data,size_t DataSize)
#ifdef RAR_SMP
if (MaxThreads>1 && ThPool==NULL)
ThPool=CreateThreadPool();
- blake2ctx.ThPool=ThPool;
- blake2ctx.MaxThreads=MaxThreads;
+ blake2ctx->ThPool=ThPool;
+ blake2ctx->MaxThreads=MaxThreads;
#endif
- blake2sp_update( &blake2ctx, (byte *)Data, DataSize);
+ blake2sp_update( blake2ctx, (byte *)Data, DataSize);
}
}
@@ -106,8 +113,8 @@ void DataHash::Result(HashValue *Result)
if (HashType==HASH_BLAKE2)
{
// Preserve the original context, so we can continue hashing if necessary.
- blake2sp_state res=blake2ctx;
- blake2sp_final( &res, Result->Digest );
+ blake2sp_state res=*blake2ctx;
+ blake2sp_final(&res,Result->Digest);
}
}
diff --git a/src/thirdparty/unrar/hash.hpp b/src/thirdparty/unrar/hash.hpp
index dae31d1b2..b7d879f66 100644
--- a/src/thirdparty/unrar/hash.hpp
+++ b/src/thirdparty/unrar/hash.hpp
@@ -29,7 +29,7 @@ class DataHash
private:
HASH_TYPE HashType;
uint CurCRC32;
- blake2sp_state blake2ctx;
+ blake2sp_state *blake2ctx;
#ifdef RAR_SMP
ThreadPool *ThPool;
diff --git a/src/thirdparty/unrar/headers.cpp b/src/thirdparty/unrar/headers.cpp
index 5c8d486e2..b042dc393 100644
--- a/src/thirdparty/unrar/headers.cpp
+++ b/src/thirdparty/unrar/headers.cpp
@@ -4,9 +4,7 @@ void FileHeader::Reset(size_t SubDataSize)
{
SubData.Alloc(SubDataSize);
BaseBlock::Reset();
-#ifndef SHELL_EXT
FileHash.Init(HASH_NONE);
-#endif
mtime.Reset();
atime.Reset();
ctime.Reset();
@@ -34,6 +32,7 @@ void FileHeader::Reset(size_t SubDataSize)
LargeFile=false;
RedirType=FSREDIR_NONE;
+ DirTarget=false;
UnixOwnerSet=false;
}
diff --git a/src/thirdparty/unrar/headers.hpp b/src/thirdparty/unrar/headers.hpp
index 7f15a67b6..948647899 100644
--- a/src/thirdparty/unrar/headers.hpp
+++ b/src/thirdparty/unrar/headers.hpp
@@ -20,9 +20,9 @@
#define SIZEOF_STREAMHEAD 26
#define VER_PACK 29
-#define VER_PACK5 0
+#define VER_PACK5 50 // It is stored as 0, but we subtract 50 when saving an archive.
#define VER_UNPACK 29
-#define VER_UNPACK5 0
+#define VER_UNPACK5 50 // It is stored as 0, but we add 50 when reading an archive.
#define MHD_VOLUME 0x0001U
diff --git a/src/thirdparty/unrar/headers5.hpp b/src/thirdparty/unrar/headers5.hpp
index 4f403c216..9ea8d979a 100644
--- a/src/thirdparty/unrar/headers5.hpp
+++ b/src/thirdparty/unrar/headers5.hpp
@@ -82,6 +82,7 @@
#define FHEXTRA_HTIME_MTIME 0x02 // mtime is present.
#define FHEXTRA_HTIME_CTIME 0x04 // ctime is present.
#define FHEXTRA_HTIME_ATIME 0x08 // atime is present.
+#define FHEXTRA_HTIME_UNIX_NS 0x10 // Unix format with nanosecond precision.
// Flags for FHEXTRA_CRYPT.
#define FHEXTRA_CRYPT_PSWCHECK 0x01 // Store password check data.
diff --git a/src/thirdparty/unrar/isnt.cpp b/src/thirdparty/unrar/isnt.cpp
index 53c722ab4..6fadec049 100644
--- a/src/thirdparty/unrar/isnt.cpp
+++ b/src/thirdparty/unrar/isnt.cpp
@@ -19,6 +19,6 @@ DWORD WinNT()
Result=dwMajorVersion*0x100+dwMinorVersion;
- return(Result);
+ return Result;
}
#endif
diff --git a/src/thirdparty/unrar/isnt.hpp b/src/thirdparty/unrar/isnt.hpp
index 520ac8ad7..85790da46 100644
--- a/src/thirdparty/unrar/isnt.hpp
+++ b/src/thirdparty/unrar/isnt.hpp
@@ -3,9 +3,11 @@
enum WINNT_VERSION {
WNT_NONE=0,WNT_NT351=0x0333,WNT_NT4=0x0400,WNT_W2000=0x0500,
- WNT_WXP=0x0501,WNT_W2003=0x0502,WNT_VISTA=0x0600,WNT_W7=0x0601
+ WNT_WXP=0x0501,WNT_W2003=0x0502,WNT_VISTA=0x0600,WNT_W7=0x0601,
+ WNT_W8=0x0602,WNT_W81=0x0603,WNT_W10=0x0a00
};
DWORD WinNT();
+
#endif
diff --git a/src/thirdparty/unrar/list.cpp b/src/thirdparty/unrar/list.cpp
index 7f1e3cd95..561122b45 100644
--- a/src/thirdparty/unrar/list.cpp
+++ b/src/thirdparty/unrar/list.cpp
@@ -18,6 +18,9 @@ void ListArchive(CommandData *Cmd)
wchar ArcName[NM];
while (Cmd->GetArcName(ArcName,ASIZE(ArcName)))
{
+ if (Cmd->ManualPassword)
+ Cmd->Password.Clean(); // Clean user entered password before processing next archive.
+
Archive Arc(Cmd);
#ifdef _WIN_ALL
Arc.RemoveSequentialFlag();
@@ -74,7 +77,7 @@ void ListArchive(CommandData *Cmd)
#ifndef SFX_MODULE
// Only RAR 1.5 archives store the volume number in end record.
if (Arc.EndArcHead.StoreVolNumber && Arc.Format==RARFMT15)
- swprintf(VolNumText,ASIZE(VolNumText),L"%.10ls %d",St(MListVolume),Arc.VolNumber+1);
+ swprintf(VolNumText,ASIZE(VolNumText),L"%.10ls %u",St(MListVolume),Arc.VolNumber+1);
#endif
if (Technical && ShowService)
{
@@ -114,22 +117,22 @@ void ListArchive(CommandData *Cmd)
if (TitleShown)
{
wchar UnpSizeText[20];
- itoa(TotalUnpSize,UnpSizeText);
+ itoa(TotalUnpSize,UnpSizeText,ASIZE(UnpSizeText));
wchar PackSizeText[20];
- itoa(TotalPackSize,PackSizeText);
+ itoa(TotalPackSize,PackSizeText,ASIZE(PackSizeText));
if (Verbose)
{
- mprintf(L"\n----------- --------- -------- ----- -------- ----- -------- ----");
- mprintf(L"\n%21ls %9ls %3d%% %-25ls %u",UnpSizeText,
+ mprintf(L"\n----------- --------- -------- ----- ---------- ----- -------- ----");
+ mprintf(L"\n%21ls %9ls %3d%% %-27ls %u",UnpSizeText,
PackSizeText,ToPercentUnlim(TotalPackSize,TotalUnpSize),
VolNumText,FileCount);
}
else
{
- mprintf(L"\n----------- --------- -------- ----- ----");
- mprintf(L"\n%21ls %-14ls %u",UnpSizeText,VolNumText,FileCount);
+ mprintf(L"\n----------- --------- ---------- ----- ----");
+ mprintf(L"\n%21ls %-16ls %u",UnpSizeText,VolNumText,FileCount);
}
SumFileCount+=FileCount;
@@ -146,9 +149,7 @@ void ListArchive(CommandData *Cmd)
if (Cmd->VolSize!=0 && (Arc.FileHead.SplitAfter ||
Arc.GetHeaderType()==HEAD_ENDARC && Arc.EndArcHead.NextVolume) &&
MergeArchive(Arc,NULL,false,Cmd->Command[0]))
- {
Arc.Seek(0,SEEK_SET);
- }
else
#endif
break;
@@ -162,17 +163,21 @@ void ListArchive(CommandData *Cmd)
}
}
+ // Clean user entered password. Not really required, just for extra safety.
+ if (Cmd->ManualPassword)
+ Cmd->Password.Clean();
+
if (ArcCount>1 && !Bare && !Technical)
{
wchar UnpSizeText[20],PackSizeText[20];
- itoa(SumUnpSize,UnpSizeText);
- itoa(SumPackSize,PackSizeText);
+ itoa(SumUnpSize,UnpSizeText,ASIZE(UnpSizeText));
+ itoa(SumPackSize,PackSizeText,ASIZE(PackSizeText));
if (Verbose)
- mprintf(L"%21ls %9ls %3d%% %26ls %u",UnpSizeText,PackSizeText,
+ mprintf(L"%21ls %9ls %3d%% %28ls %u",UnpSizeText,PackSizeText,
ToPercentUnlim(SumPackSize,SumUnpSize),L"",SumFileCount);
else
- mprintf(L"%21ls %16s %lu",UnpSizeText,L"",SumFileCount);
+ mprintf(L"%21ls %18s %lu",UnpSizeText,L"",SumFileCount);
}
}
@@ -198,22 +203,22 @@ void ListFileHeader(Archive &Arc,FileHeader &hd,bool &TitleShown,bool Verbose,bo
if (Verbose)
{
mprintf(L"\n%ls",St(MListTitleV));
- mprintf(L"\n----------- --------- -------- ----- -------- ----- -------- ----");
+ mprintf(L"\n----------- --------- -------- ----- ---------- ----- -------- ----");
}
else
{
mprintf(L"\n%ls",St(MListTitleL));
- mprintf(L"\n----------- --------- -------- ----- ----");
+ mprintf(L"\n----------- --------- ---------- ----- ----");
}
TitleShown=true;
}
- wchar UnpSizeText[20],PackSizeText[20];
+ wchar UnpSizeText[30],PackSizeText[30];
if (hd.UnpSize==INT64NDF)
wcscpy(UnpSizeText,L"?");
else
- itoa(hd.UnpSize,UnpSizeText);
- itoa(hd.PackSize,PackSizeText);
+ itoa(hd.UnpSize,UnpSizeText,ASIZE(UnpSizeText));
+ itoa(hd.PackSize,PackSizeText,ASIZE(PackSizeText));
wchar AttrStr[30];
if (hd.HeaderType==HEAD_SERVICE)
@@ -235,7 +240,7 @@ void ListFileHeader(Archive &Arc,FileHeader &hd,bool &TitleShown,bool Verbose,bo
swprintf(RatioStr,ASIZE(RatioStr),L"%d%%",ToPercentUnlim(hd.PackSize,hd.UnpSize));
wchar DateStr[50];
- hd.mtime.GetText(DateStr,ASIZE(DateStr),Technical,Technical);
+ hd.mtime.GetText(DateStr,ASIZE(DateStr),Technical);
if (Technical)
{
@@ -302,12 +307,12 @@ void ListFileHeader(Archive &Arc,FileHeader &hd,bool &TitleShown,bool Verbose,bo
mprintf(L"\n%12ls: %ls",St(MListMtime),DateStr);
if (hd.ctime.IsSet())
{
- hd.ctime.GetText(DateStr,ASIZE(DateStr),true,true);
+ hd.ctime.GetText(DateStr,ASIZE(DateStr),true);
mprintf(L"\n%12ls: %ls",St(MListCtime),DateStr);
}
if (hd.atime.IsSet())
{
- hd.atime.GetText(DateStr,ASIZE(DateStr),true,true);
+ hd.atime.GetText(DateStr,ASIZE(DateStr),true);
mprintf(L"\n%12ls: %ls",St(MListAtime),DateStr);
}
mprintf(L"\n%12ls: %ls",St(MListAttr),AttrStr);
@@ -398,7 +403,7 @@ void ListFileHeader(Archive &Arc,FileHeader &hd,bool &TitleShown,bool Verbose,bo
else
mprintf(L"???????? ");
}
- mprintf(L"%-12ls",Name);
+ mprintf(L"%ls",Name);
}
/*
@@ -428,13 +433,13 @@ void ListFileAttr(uint A,HOST_SYSTEM_TYPE HostType,wchar *AttrStr,size_t AttrSiz
{
case HSYS_WINDOWS:
swprintf(AttrStr,AttrSize,L"%c%c%c%c%c%c%c",
- (A & 0x2000) ? 'I' : '.', // Not content indexed.
- (A & 0x0800) ? 'C' : '.', // Compressed.
- (A & 0x0020) ? 'A' : '.', // Archive.
- (A & 0x0010) ? 'D' : '.', // Directory.
- (A & 0x0004) ? 'S' : '.', // System.
- (A & 0x0002) ? 'H' : '.', // Hidden.
- (A & 0x0001) ? 'R' : '.'); // Read-only.
+ (A & 0x2000)!=0 ? 'I' : '.', // Not content indexed.
+ (A & 0x0800)!=0 ? 'C' : '.', // Compressed.
+ (A & 0x0020)!=0 ? 'A' : '.', // Archive.
+ (A & 0x0010)!=0 ? 'D' : '.', // Directory.
+ (A & 0x0004)!=0 ? 'S' : '.', // System.
+ (A & 0x0002)!=0 ? 'H' : '.', // Hidden.
+ (A & 0x0001)!=0 ? 'R' : '.'); // Read-only.
break;
case HSYS_UNIX:
switch (A & 0xF000)
@@ -452,13 +457,13 @@ void ListFileAttr(uint A,HOST_SYSTEM_TYPE HostType,wchar *AttrStr,size_t AttrSiz
swprintf(AttrStr+1,AttrSize-1,L"%c%c%c%c%c%c%c%c%c",
(A & 0x0100) ? 'r' : '-',
(A & 0x0080) ? 'w' : '-',
- (A & 0x0040) ? ((A & 0x0800) ? 's':'x'):((A & 0x0800) ? 'S':'-'),
+ (A & 0x0040) ? ((A & 0x0800)!=0 ? 's':'x'):((A & 0x0800)!=0 ? 'S':'-'),
(A & 0x0020) ? 'r' : '-',
(A & 0x0010) ? 'w' : '-',
- (A & 0x0008) ? ((A & 0x0400) ? 's':'x'):((A & 0x0400) ? 'S':'-'),
+ (A & 0x0008) ? ((A & 0x0400)!=0 ? 's':'x'):((A & 0x0400)!=0 ? 'S':'-'),
(A & 0x0004) ? 'r' : '-',
(A & 0x0002) ? 'w' : '-',
- (A & 0x0001) ? 'x' : '-');
+ (A & 0x0001) ? ((A & 0x200)!=0 ? 't' : 'x') : '-');
break;
case HSYS_UNKNOWN:
wcscpy(AttrStr,L"?");
diff --git a/src/thirdparty/unrar/loclang.hpp b/src/thirdparty/unrar/loclang.hpp
index d07df1cef..427128b49 100644
--- a/src/thirdparty/unrar/loclang.hpp
+++ b/src/thirdparty/unrar/loclang.hpp
@@ -6,9 +6,12 @@
#define MRetryAbort L"_Retry_Abort"
#define MCopyright L"\nRAR %s Copyright (c) 1993-%d Alexander Roshal %d %s %d"
#define MRegTo L"\nRegistered to %s\n"
-#define MShare L"\nTrial version Type RAR -? for help\n"
+#define MShare L"\nTrial version Type 'rar -?' for help\n"
+#define MRegKeyWarning L"\nAvailable license key is valid only for %s\n"
#define MUCopyright L"\nUNRAR %s freeware Copyright (c) 1993-%d Alexander Roshal\n"
#define MBeta L"beta"
+#define Mx86 L"x86"
+#define Mx64 L"x64"
#define MMonthJan L"Jan"
#define MMonthFeb L"Feb"
#define MMonthMar L"Mar"
@@ -83,6 +86,7 @@
#define MCHelpSwINUL L"\n inul Disable all messages"
#define MCHelpSwIOFF L"\n ioff Turn PC off after completing an operation"
#define MCHelpSwISND L"\n isnd Enable sound"
+#define MCHelpSwIVER L"\n iver Display the version number"
#define MCHelpSwK L"\n k Lock archive"
#define MCHelpSwKB L"\n kb Keep broken extracted files"
#define MCHelpSwLog L"\n log[f][=name] Write names to log file"
@@ -99,7 +103,8 @@
#define MCHelpSwOC L"\n oc Set NTFS Compressed attribute"
#define MCHelpSwOH L"\n oh Save hard links as the link instead of the file"
#define MCHelpSwOI L"\n oi[0-4][:min] Save identical files as references"
-#define MCHelpSwOL L"\n ol Save symbolic links as the link instead of the file"
+#define MCHelpSwOL L"\n ol[a] Process symbolic links as the link [absolute paths]"
+#define MCHelpSwONI L"\n oni Allow potentially incompatible names"
#define MCHelpSwOR L"\n or Rename files automatically"
#define MCHelpSwOS L"\n os Save NTFS streams"
#define MCHelpSwOW L"\n ow Save or restore file owner and group"
@@ -126,7 +131,7 @@
#define MCHelpSwTO L"\n to<time> Process files older than <time>"
#define MCHelpSwTA L"\n ta<date> Process files modified after <date> in YYYYMMDDHHMMSS format"
#define MCHelpSwTB L"\n tb<date> Process files modified before <date> in YYYYMMDDHHMMSS format"
-#define MCHelpSwTS L"\n ts<m,c,a>[N] Save or restore file time (modification, creation, access)"
+#define MCHelpSwTS L"\n ts[m|c|a] Save or restore file time (modification, creation, access)"
#define MCHelpSwU L"\n u Update files"
#define MCHelpSwV L"\n v Create volumes with size autodetection or list all volumes"
#define MCHelpSwVUnr L"\n v List all volumes"
@@ -216,7 +221,7 @@
#define MExtrNoFiles L"\nNo files to extract"
#define MExtrAllOk L"\nAll OK"
#define MExtrTotalErr L"\nTotal errors: %ld"
-#define MFileExists L"\n\n%s already exists. Overwrite it ?"
+#define MAskReplace L"\n\nWould you like to replace the existing file %s\n%6s bytes, modified on %s\nwith a new one\n%6s bytes, modified on %s\n"
#define MAskOverwrite L"\nOverwrite %s ?"
#define MAskNewName L"\nEnter new name: "
#define MHeaderBroken L"\nCorrupt header is found"
@@ -237,7 +242,7 @@
#define MDeleting L"\nDeleting %s"
#define MEraseArc L"\nErasing empty archive %s"
#define MNoDelFiles L"\nNo files to delete"
-#define MLogTitle L"\n\n-------- %2d %s %d, archive %s\n"
+#define MLogTitle L"-------- %2d %s %d, archive %s"
#define MPathTooLong L"\nERROR: Path too long\n"
#define MListArchive L"Archive"
#define MListDetails L"Details"
@@ -248,8 +253,8 @@
#define MListLock L"lock"
#define MListEnc L"encrypted"
#define MListEncHead L"encrypted headers"
-#define MListTitleL L" Attributes Size Date Time Name"
-#define MListTitleV L" Attributes Size Packed Ratio Date Time Checksum Name"
+#define MListTitleL L" Attributes Size Date Time Name"
+#define MListTitleV L" Attributes Size Packed Ratio Date Time Checksum Name"
#define MListName L"Name"
#define MListType L"Type"
#define MListFile L"File"
@@ -258,7 +263,7 @@
#define MListWSymlink L"Windows symbolic link"
#define MListJunction L"NTFS junction point"
#define MListHardlink L"Hard link"
-#define MListCopy L"File copy"
+#define MListCopy L"File reference"
#define MListStream L"NTFS alternate data stream"
#define MListTarget L"Target"
#define MListSize L"Size"
@@ -273,9 +278,7 @@
#define MListHostOS L"Host OS"
#define MListFileVer L"File version"
#define MListService L"Service"
-#define MListEAHead L"\n OS/2 extended attributes"
#define MListUOHead L"\n Unix Owner/Group data: %-14s %-14s"
-#define MListBeEAHead L"\n BeOS extended attributes"
#define MListNTACLHead L"\n NTFS security data"
#define MListStrmHead L"\n NTFS stream: %s"
#define MListUnkHead L"\n Unknown subheader type: 0x%04x"
@@ -318,14 +321,7 @@
#define MStreamBroken L"\nERROR: %s stream data are corrupt\n"
#define MStreamUnknown L"\nWARNING: Unknown format of %s stream data\n"
#define MInvalidName L"\nERROR: Invalid file name %s"
-#define MEABroken L"\nERROR: %s extended attributes are corrupt\n"
-#define MEAUnknHeader L"\nWARNING: %s - unknown format of extended attributes\n"
-#define MCannotSetEA L"\nWARNING: cannot set extended attributes to %s\n"
-#define MCannotGetEA L"\nERROR: Cannot get extended attributes of %s\n"
-#define MShowEA L" (+EA)"
-#define MSkipEA L"\n...skipping extended attributes"
#define MProcessArc L"\n\nProcessing archive %s"
-#define MSyncScanError L"\nFile search errors, cannot synchronize archive"
#define MCorrectingName L"\nWARNING: Attempting to correct the invalid file name"
#define MUnpCannotMerge L"\nWARNING: You need to start extraction from a previous volume to unpack %s"
#define MUnknownOption L"\nERROR: Unknown option: %s"
@@ -344,9 +340,10 @@
#define MCreating L"\nCreating %s"
#define MRenaming L"\nRenaming %s to %s"
#define MNTFSRequired L"\nWrite error: only NTFS file system supports files larger than 4 GB"
+#define MFAT32Size L"\nWARNING: FAT32 file system does not support 4 GB or larger files"
#define MErrChangeAttr L"\nWARNING: Cannot change attributes of %s"
#define MWrongSFXVer L"\nERROR: default SFX module does not support RAR %d.%d archives"
-#define MCannotEncName L"\nCannot encrypt archive already contained encrypted files"
+#define MCannotEncName L"\nCannot encrypt archive already containing encrypted files"
#define MCannotEmail L"\nCannot email the file %s"
#define MCopyrightS L"\nRAR SFX archive"
#define MSHelpCmd L"\n\n<Commands>"
@@ -373,8 +370,9 @@
#define MSearchDupFiles L"\nSearching for identical files"
#define MNumFound L"%d found."
#define MUnknownExtra L"\nUnknown extra field in %s."
+#define MCorruptExtra L"\nCorrupt %s extra field in %s."
#define MCopyError L"\nCannot copy %s to %s."
-#define MCopyErrorHint L"\nYou need to unpack the entire archive to create file copy entries."
+#define MCopyErrorHint L"\nYou need to unpack the entire archive to create file reference entries."
#define MCopyingData L"\nCopying data"
#define MErrCreateLnkS L"\nCannot create symbolic link %s"
#define MErrCreateLnkH L"\nCannot create hard link %s"
diff --git a/src/thirdparty/unrar/match.cpp b/src/thirdparty/unrar/match.cpp
index 3486b0e2d..4369a578c 100644
--- a/src/thirdparty/unrar/match.cpp
+++ b/src/thirdparty/unrar/match.cpp
@@ -128,18 +128,18 @@ bool match(const wchar *pattern,const wchar *string,bool ForceCase)
int mwcsicompc(const wchar *Str1,const wchar *Str2,bool ForceCase)
{
if (ForceCase)
- return(wcscmp(Str1,Str2));
- return(wcsicompc(Str1,Str2));
+ return wcscmp(Str1,Str2);
+ return wcsicompc(Str1,Str2);
}
int mwcsnicompc(const wchar *Str1,const wchar *Str2,size_t N,bool ForceCase)
{
if (ForceCase)
- return(wcsncmp(Str1,Str2,N));
+ return wcsncmp(Str1,Str2,N);
#if defined(_UNIX)
- return(wcsncmp(Str1,Str2,N));
+ return wcsncmp(Str1,Str2,N);
#else
- return(wcsnicomp(Str1,Str2,N));
+ return wcsnicomp(Str1,Str2,N);
#endif
}
diff --git a/src/thirdparty/unrar/options.hpp b/src/thirdparty/unrar/options.hpp
index 7b61ba2fb..f4198c38a 100644
--- a/src/thirdparty/unrar/options.hpp
+++ b/src/thirdparty/unrar/options.hpp
@@ -52,7 +52,7 @@ enum OVERWRITE_MODE
enum QOPEN_MODE { QOPEN_NONE, QOPEN_AUTO, QOPEN_ALWAYS };
-enum RAR_CHARSET { RCH_DEFAULT=0,RCH_ANSI,RCH_OEM,RCH_UNICODE };
+enum RAR_CHARSET { RCH_DEFAULT=0,RCH_ANSI,RCH_OEM,RCH_UNICODE,RCH_UTF8 };
#define MAX_FILTER_TYPES 16
enum FilterState {FILTER_DEFAULT=0,FILTER_AUTO,FILTER_FORCE,FILTER_DISABLE};
@@ -95,10 +95,14 @@ class RAROptions
RAR_CHARSET CommentCharset;
RAR_CHARSET FilelistCharset;
RAR_CHARSET ErrlogCharset;
+ RAR_CHARSET RedirectCharset;
wchar ArcPath[NM];
SecPassword Password;
bool EncryptHeaders;
+
+ bool ManualPassword; // Password entered manually during operation, might need to clean for next archive.
+
wchar LogName[NM];
MESSAGE_TYPE MsgStream;
bool Sound;
@@ -110,6 +114,7 @@ class RAROptions
bool DisablePercentage;
bool DisableCopyright;
bool DisableDone;
+ bool PrintVersion;
int Solid;
int SolidCount;
bool ClearArc;
@@ -129,12 +134,17 @@ class RAROptions
bool ProcessOwners;
bool SaveSymLinks;
bool SaveHardLinks;
+ bool AbsoluteLinks;
int Priority;
int SleepTime;
bool KeepBroken;
bool OpenShared;
bool DeleteFiles;
+#ifdef _WIN_ALL
+ bool AllowIncompatNames; // Allow names with trailing dots and spaces.
+#endif
+
#ifndef SFX_MODULE
bool GenerateArcName;
@@ -165,9 +175,6 @@ class RAROptions
uint Threads; // We use it to init hash even if RAR_SMP is not defined.
-#ifdef _ANDROID
- int64 FreeMem;
-#endif
diff --git a/src/thirdparty/unrar/os.hpp b/src/thirdparty/unrar/os.hpp
index 84f8fc92a..a45149040 100644
--- a/src/thirdparty/unrar/os.hpp
+++ b/src/thirdparty/unrar/os.hpp
@@ -29,7 +29,7 @@
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
-#if !defined(ZIPSFX) && !defined(SHELL_EXT) && !defined(SETUP)
+#if !defined(ZIPSFX)
#define RAR_SMP
#endif
@@ -38,6 +38,7 @@
#include <windows.h>
#include <prsht.h>
#include <shlwapi.h>
+#pragma comment(lib, "Shlwapi.lib")
#include <shellapi.h>
#include <shlobj.h>
#include <winioctl.h>
@@ -79,6 +80,7 @@
#include <time.h>
#include <signal.h>
+
#define SAVE_LINKS
#define ENABLE_ACCESS
@@ -111,7 +113,7 @@
#define _forceinline inline
#endif
-#endif
+#endif // defined(_WIN_ALL) || defined(_EMX)
#ifdef _UNIX
@@ -128,14 +130,7 @@
#include <sys/sysctl.h>
#endif
#ifndef SFX_MODULE
- #ifdef _ANDROID
- #include <sys/vfs.h>
- #define statvfs statfs
- #else
#include <sys/statvfs.h>
- #endif
-#endif
-#if defined(__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) || defined(__APPLE__)
#endif
#include <pwd.h>
#include <grp.h>
@@ -154,11 +149,12 @@
#include <utime.h>
#include <locale.h>
+
#ifdef S_IFLNK
#define SAVE_LINKS
#endif
-#if defined(__linux) && !defined (_ANDROID) || defined(__FreeBSD__)
+#if defined(__linux) || defined(__FreeBSD__)
#include <sys/time.h>
#define USE_LUTIMES
#endif
@@ -200,9 +196,18 @@
#endif
#endif
+#if _POSIX_C_SOURCE >= 200809L
+ #define UNIX_TIME_NS // Nanosecond time precision in Unix.
#endif
+#endif // _UNIX
+
+#if 0
+ #define MSGID_INT
+ typedef int MSGID;
+#else
typedef const wchar* MSGID;
+#endif
#ifndef SSE_ALIGNMENT // No SSE use and no special data alignment is required.
#define SSE_ALIGNMENT 1
@@ -221,9 +226,9 @@
#if !defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
#if defined(__i386) || defined(i386) || defined(__i386__) || defined(__x86_64)
#define LITTLE_ENDIAN
- #elif defined(BYTE_ORDER) && BYTE_ORDER == LITTLE_ENDIAN
+ #elif defined(BYTE_ORDER) && BYTE_ORDER == LITTLE_ENDIAN || defined(__LITTLE_ENDIAN__)
#define LITTLE_ENDIAN
- #elif defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN
+ #elif defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN || defined(__BIG_ENDIAN__)
#define BIG_ENDIAN
#else
#error "Neither LITTLE_ENDIAN nor BIG_ENDIAN are defined. Define one of them."
diff --git a/src/thirdparty/unrar/pathfn.cpp b/src/thirdparty/unrar/pathfn.cpp
index 016a0e824..4a1f79bc7 100644
--- a/src/thirdparty/unrar/pathfn.cpp
+++ b/src/thirdparty/unrar/pathfn.cpp
@@ -29,7 +29,7 @@ wchar* ConvertPath(const wchar *SrcPath,wchar *DestPath)
while (*DestPtr!=0)
{
const wchar *s=DestPtr;
- if (s[0] && IsDriveDiv(s[1]))
+ if (s[0]!=0 && IsDriveDiv(s[1]))
s+=2;
if (s[0]=='\\' && s[1]=='\\')
{
@@ -144,9 +144,16 @@ bool IsDriveDiv(int Ch)
}
+bool IsDriveLetter(const wchar *Path)
+{
+ wchar Letter=etoupperw(Path[0]);
+ return Letter>='A' && Letter<='Z' && IsDriveDiv(Path[1]);
+}
+
+
int GetPathDisk(const wchar *Path)
{
- if (IsDiskLetter(Path))
+ if (IsDriveLetter(Path))
return etoupperw(*Path)-'A';
else
return -1;
@@ -196,7 +203,7 @@ void RemoveNameFromPath(wchar *Path)
#if defined(_WIN_ALL) && !defined(SFX_MODULE)
-static void GetAppDataPath(wchar *Path,size_t MaxSize,bool Create)
+bool GetAppDataPath(wchar *Path,size_t MaxSize,bool Create)
{
LPMALLOC g_pMalloc;
SHGetMalloc(&g_pMalloc);
@@ -212,12 +219,8 @@ static void GetAppDataPath(wchar *Path,size_t MaxSize,bool Create)
if (!Success && Create)
Success=MakeDir(Path,false,0)==MKDIR_SUCCESS;
}
- if (!Success)
- {
- GetModuleFileName(NULL,Path,(DWORD)MaxSize);
- RemoveNameFromPath(Path);
- }
g_pMalloc->Free(ppidl);
+ return Success;
}
#endif
@@ -237,7 +240,11 @@ void GetRarDataPath(wchar *Path,size_t MaxSize,bool Create)
}
if (*Path==0 || !FileExist(Path))
- GetAppDataPath(Path,MaxSize,Create);
+ if (!GetAppDataPath(Path,MaxSize,Create))
+ {
+ GetModuleFileName(NULL,Path,(DWORD)MaxSize);
+ RemoveNameFromPath(Path);
+ }
}
#endif
@@ -436,10 +443,13 @@ void MakeNameUsable(wchar *Name,bool Extended)
#ifndef _UNIX
if (s-Name>1 && *s==':')
*s='_';
+#if 0 // We already can create such files.
// Remove ' ' and '.' before path separator, but allow .\ and ..\.
- if ((*s==' ' || *s=='.' && s>Name && !IsPathDiv(s[-1]) && s[-1]!='.') && IsPathDiv(s[1]))
+ if (IsPathDiv(s[1]) && (*s==' ' || *s=='.' && s>Name &&
+ !IsPathDiv(s[-1]) && (s[-1]!='.' || s>Name+1 && !IsPathDiv(s[-2]))))
*s='_';
#endif
+#endif
}
}
@@ -531,24 +541,23 @@ bool IsFullPath(const wchar *Path)
return true;
*/
#if defined(_WIN_ALL) || defined(_EMX)
- return Path[0]=='\\' && Path[1]=='\\' || IsDiskLetter(Path) && IsPathDiv(Path[2]);
+ return Path[0]=='\\' && Path[1]=='\\' || IsDriveLetter(Path) && IsPathDiv(Path[2]);
#else
return IsPathDiv(Path[0]);
#endif
}
-bool IsDiskLetter(const wchar *Path)
+bool IsFullRootPath(const wchar *Path)
{
- wchar Letter=etoupperw(Path[0]);
- return Letter>='A' && Letter<='Z' && IsDriveDiv(Path[1]);
+ return IsFullPath(Path) || IsPathDiv(Path[0]);
}
void GetPathRoot(const wchar *Path,wchar *Root,size_t MaxSize)
{
*Root=0;
- if (IsDiskLetter(Path))
+ if (IsDriveLetter(Path))
swprintf(Root,MaxSize,L"%c:\\",*Path);
else
if (Path[0]=='\\' && Path[1]=='\\')
@@ -585,7 +594,7 @@ int ParseVersionFileName(wchar *Name,bool Truncate)
}
-#if !defined(SFX_MODULE) && !defined(SETUP)
+#if !defined(SFX_MODULE)
// Get the name of first volume. Return the leftmost digit of volume number.
wchar* VolNameToFirstName(const wchar *VolName,wchar *FirstName,size_t MaxSize,bool NewNumbering)
{
@@ -724,16 +733,16 @@ static void GenArcName(wchar *ArcName,const wchar *GenerateMask,uint ArcNumber,b
char Field[10][6];
- sprintf(Field[0],"%04d",rlt.Year);
- sprintf(Field[1],"%02d",rlt.Month);
- sprintf(Field[2],"%02d",rlt.Day);
- sprintf(Field[3],"%02d",rlt.Hour);
- sprintf(Field[4],"%02d",rlt.Minute);
- sprintf(Field[5],"%02d",rlt.Second);
- sprintf(Field[6],"%02d",CurWeek);
- sprintf(Field[7],"%d",WeekDay+1);
- sprintf(Field[8],"%03d",rlt.yDay+1);
- sprintf(Field[9],"%05d",ArcNumber);
+ sprintf(Field[0],"%04u",rlt.Year);
+ sprintf(Field[1],"%02u",rlt.Month);
+ sprintf(Field[2],"%02u",rlt.Day);
+ sprintf(Field[3],"%02u",rlt.Hour);
+ sprintf(Field[4],"%02u",rlt.Minute);
+ sprintf(Field[5],"%02u",rlt.Second);
+ sprintf(Field[6],"%02u",(uint)CurWeek);
+ sprintf(Field[7],"%u",(uint)WeekDay+1);
+ sprintf(Field[8],"%03u",rlt.yDay+1);
+ sprintf(Field[9],"%05u",ArcNumber);
const wchar *MaskChars=L"YMDHISWAEN";
@@ -864,7 +873,7 @@ wchar* GetWideName(const char *Name,const wchar *NameW,wchar *DestW,size_t DestS
if (DestSize>0)
DestW[DestSize-1]=0;
- return(DestW);
+ return DestW;
}
@@ -878,11 +887,11 @@ bool GetWinLongPath(const wchar *Src,wchar *Dest,size_t MaxSize)
return false;
const wchar *Prefix=L"\\\\?\\";
const size_t PrefixLength=4;
- bool FullPath=IsDiskLetter(Src) && IsPathDiv(Src[2]);
+ bool FullPath=IsDriveLetter(Src) && IsPathDiv(Src[2]);
size_t SrcLength=wcslen(Src);
if (IsFullPath(Src)) // Paths in d:\path\name format.
{
- if (IsDiskLetter(Src))
+ if (IsDriveLetter(Src))
{
if (MaxSize<=PrefixLength+SrcLength)
return false;
@@ -936,4 +945,39 @@ bool GetWinLongPath(const wchar *Src,wchar *Dest,size_t MaxSize)
}
return false;
}
+
+
+// Convert Unix, OS X and Android decomposed chracters to Windows precomposed.
+void ConvertToPrecomposed(wchar *Name,size_t NameSize)
+{
+ wchar FileName[NM];
+ if (WinNT()>=WNT_VISTA && // MAP_PRECOMPOSED is not supported in XP.
+ FoldString(MAP_PRECOMPOSED,Name,-1,FileName,ASIZE(FileName))!=0)
+ {
+ FileName[ASIZE(FileName)-1]=0;
+ wcsncpyz(Name,FileName,NameSize);
+ }
+}
+
+
+// Remove trailing spaces and dots in file name and in dir names in path.
+void MakeNameCompatible(wchar *Name)
+{
+ int Src=0,Dest=0;
+ while (true)
+ {
+ if (IsPathDiv(Name[Src]) || Name[Src]==0)
+ for (int I=Dest-1;I>0 && (Name[I]==' ' || Name[I]=='.');I--)
+ {
+ if (IsPathDiv(Name[I-1])) // Permit path1/./path2 paths.
+ break;
+ Dest--;
+ }
+ Name[Dest]=Name[Src];
+ if (Name[Src]==0)
+ break;
+ Src++;
+ Dest++;
+ }
+}
#endif
diff --git a/src/thirdparty/unrar/pathfn.hpp b/src/thirdparty/unrar/pathfn.hpp
index b34727355..f08269464 100644
--- a/src/thirdparty/unrar/pathfn.hpp
+++ b/src/thirdparty/unrar/pathfn.hpp
@@ -12,14 +12,20 @@ bool CmpExt(const wchar *Name,const wchar *Ext);
bool IsWildcard(const wchar *Str);
bool IsPathDiv(int Ch);
bool IsDriveDiv(int Ch);
+bool IsDriveLetter(const wchar *Path);
int GetPathDisk(const wchar *Path);
void AddEndSlash(wchar *Path,size_t MaxLength);
void MakeName(const wchar *Path,const wchar *Name,wchar *Pathname,size_t MaxSize);
void GetFilePath(const wchar *FullName,wchar *Path,size_t MaxLength);
void RemoveNameFromPath(wchar *Path);
+#if defined(_WIN_ALL) && !defined(SFX_MODULE)
+bool GetAppDataPath(wchar *Path,size_t MaxSize,bool Create);
void GetRarDataPath(wchar *Path,size_t MaxSize,bool Create);
+#endif
+#ifndef SFX_MODULE
bool EnumConfigPaths(uint Number,wchar *Path,size_t MaxSize,bool Create);
void GetConfigName(const wchar *Name,wchar *FullName,size_t MaxSize,bool CheckExist,bool Create);
+#endif
wchar* GetVolNumPart(const wchar *ArcName);
void NextVolumeName(wchar *ArcName,uint MaxLength,bool OldNumbering);
bool IsNameUsable(const wchar *Name);
@@ -51,7 +57,7 @@ inline void SlashToNative(const wchar *SrcName,wchar *DestName,size_t MaxLength)
void ConvertNameToFull(const wchar *Src,wchar *Dest,size_t MaxSize);
bool IsFullPath(const wchar *Path);
-bool IsDiskLetter(const wchar *Path);
+bool IsFullRootPath(const wchar *Path);
void GetPathRoot(const wchar *Path,wchar *Root,size_t MaxSize);
int ParseVersionFileName(wchar *Name,bool Truncate);
wchar* VolNameToFirstName(const wchar *VolName,wchar *FirstName,size_t MaxSize,bool NewNumbering);
@@ -63,6 +69,8 @@ void GenerateArchiveName(wchar *ArcName,size_t MaxSize,const wchar *GenerateMask
#ifdef _WIN_ALL
bool GetWinLongPath(const wchar *Src,wchar *Dest,size_t MaxSize);
+void ConvertToPrecomposed(wchar *Name,size_t NameSize);
+void MakeNameCompatible(wchar *Name);
#endif
#endif
diff --git a/src/thirdparty/unrar/rar.cpp b/src/thirdparty/unrar/rar.cpp
index 6c8f07240..69175b76e 100644
--- a/src/thirdparty/unrar/rar.cpp
+++ b/src/thirdparty/unrar/rar.cpp
@@ -1,6 +1,6 @@
#include "rar.hpp"
-#if !defined(GUI) && !defined(RARDLL)
+#if !defined(RARDLL)
int main(int argc, char *argv[])
{
@@ -26,7 +26,7 @@ int main(int argc, char *argv[])
#endif
-#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
+#if defined(_WIN_ALL) && !defined(SFX_MODULE)
// Must be initialized, normal initialization can be skipped in case of
// exception.
bool ShutdownOnClose=false;
@@ -55,6 +55,7 @@ int main(int argc, char *argv[])
}
Cmd->AddArcName(ModuleName);
Cmd->ParseDone();
+ Cmd->AbsoluteLinks=true; // If users runs SFX, he trusts an archive source.
#else // !SFX_MODULE
Cmd->ParseCommandLine(true,argc,argv);
if (!Cmd->ConfigDisabled)
@@ -65,15 +66,14 @@ int main(int argc, char *argv[])
Cmd->ParseCommandLine(false,argc,argv);
#endif
-#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
+#if defined(_WIN_ALL) && !defined(SFX_MODULE)
ShutdownOnClose=Cmd->Shutdown;
#endif
uiInit(Cmd->Sound);
- InitConsoleOptions(Cmd->MsgStream);
+ InitConsoleOptions(Cmd->MsgStream,Cmd->RedirectCharset);
InitLogOptions(Cmd->LogName,Cmd->ErrlogCharset);
ErrHandler.SetSilent(Cmd->AllYes || Cmd->MsgStream==MSG_NULL);
- ErrHandler.SetShutdown(Cmd->Shutdown);
Cmd->OutTitle();
Cmd->ProcessCommand();
@@ -93,8 +93,8 @@ int main(int argc, char *argv[])
ErrHandler.SetErrorCode(RARX_FATAL);
}
-#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
- if (ShutdownOnClose)
+#if defined(_WIN_ALL) && !defined(SFX_MODULE)
+ if (ShutdownOnClose && ErrHandler.IsShutdownEnabled())
Shutdown();
#endif
ErrHandler.MainExit=true;
diff --git a/src/thirdparty/unrar/rar.hpp b/src/thirdparty/unrar/rar.hpp
index 4f8cfd9e3..b4adb73d5 100644
--- a/src/thirdparty/unrar/rar.hpp
+++ b/src/thirdparty/unrar/rar.hpp
@@ -14,9 +14,9 @@
#include "rarlang.hpp"
#include "unicode.hpp"
#include "errhnd.hpp"
+#include "secpassword.hpp"
#include "array.hpp"
#include "timefn.hpp"
-#include "secpassword.hpp"
#include "sha1.hpp"
#include "sha256.hpp"
#include "blake2s.hpp"
@@ -46,14 +46,13 @@
#include "match.hpp"
#include "cmddata.hpp"
#include "filcreat.hpp"
-#ifndef GUI
#include "consio.hpp"
-#endif
#include "system.hpp"
#ifdef _WIN_ALL
#include "isnt.hpp"
#endif
#include "log.hpp"
+#include "rawint.hpp"
#include "rawread.hpp"
#include "encname.hpp"
#include "resource.hpp"
@@ -84,11 +83,12 @@
#include "global.hpp"
+#if 0
+#include "benchmark.hpp"
+#endif
+
-#ifdef _ANDROID
-#include "GUI/rarjni.hpp"
-#endif
#endif
diff --git a/src/thirdparty/unrar/rardefs.hpp b/src/thirdparty/unrar/rardefs.hpp
index 93276233b..90d41204c 100644
--- a/src/thirdparty/unrar/rardefs.hpp
+++ b/src/thirdparty/unrar/rardefs.hpp
@@ -13,7 +13,9 @@
// for CryptProtectMemory in SecPassword.
#define MAXPASSWORD 128
-#define MAXSFXSIZE 0x100000
+#define MAXSFXSIZE 0x200000
+
+#define MAXCMTSIZE 0x40000
#define DefSFXName L"default.sfx"
#define DefSortListName L"rarfiles.lst"
@@ -23,10 +25,6 @@
#define USE_QOPEN
#endif
-// Suppress GCC warn_unused_result warning in -O2 mode
-// for those function calls where we do not need it.
-#define ignore_result(x) if (x)
-
// Produce the value, which is equal or larger than 'v' and aligned to 'a'.
#define ALIGN_VALUE(v,a) (size_t(v) + ( (~size_t(v) + 1) & (a - 1) ) )
diff --git a/src/thirdparty/unrar/raros.hpp b/src/thirdparty/unrar/raros.hpp
index de3bbeb76..4f4f2ae79 100644
--- a/src/thirdparty/unrar/raros.hpp
+++ b/src/thirdparty/unrar/raros.hpp
@@ -19,7 +19,7 @@
#endif
#endif
-#ifdef ANDROID
+#if defined(ANDROID) || defined(__ANDROID__)
#define _UNIX
#define _ANDROID
#endif
diff --git a/src/thirdparty/unrar/rartypes.hpp b/src/thirdparty/unrar/rartypes.hpp
index 547f2eb11..aac9bd57c 100644
--- a/src/thirdparty/unrar/rartypes.hpp
+++ b/src/thirdparty/unrar/rartypes.hpp
@@ -1,34 +1,20 @@
#ifndef _RAR_TYPES_
#define _RAR_TYPES_
-typedef unsigned char byte; // unsigned 8 bits
-typedef unsigned short ushort; // preferably 16 bits, but can be more
-typedef unsigned int uint; // 32 bits or more
+#include <stdint.h>
-#define PRESENT_INT32 // undefine if signed 32 bits is not available
-
-typedef unsigned int uint32; // 32 bits exactly
-typedef signed int int32; // signed 32 bits exactly
-
-// If compiler does not support 64 bit variables, we can define
-// uint64 and int64 as 32 bit, but it will limit the maximum processed
-// file size to 2 GB.
-#if defined(__BORLANDC__) || defined(_MSC_VER)
-typedef unsigned __int64 uint64; // unsigned 64 bits
-typedef signed __int64 int64; // signed 64 bits
-#else
-typedef unsigned long long uint64; // unsigned 64 bits
-typedef signed long long int64; // signed 64 bits
-#endif
-
-typedef wchar_t wchar;
+typedef uint8_t byte; // Unsigned 8 bits.
+typedef uint16_t ushort; // Preferably 16 bits, but can be more.
+typedef unsigned int uint; // 32 bits or more.
+typedef uint32_t uint32; // 32 bits exactly.
+typedef int32_t int32; // Signed 32 bits exactly.
+typedef uint64_t uint64; // 64 bits exactly.
+typedef int64_t int64; // Signed 64 bits exactly.
+typedef wchar_t wchar; // Unicode character
// Get lowest 16 bits.
#define GET_SHORT16(x) (sizeof(ushort)==2 ? (ushort)(x):((x)&0xffff))
-// Get lowest 32 bits.
-#define GET_UINT32(x) (sizeof(uint32)==4 ? (uint32)(x):((x)&0xffffffff))
-
// Make 64 bit integer from two 32 bit.
#define INT32TO64(high,low) ((((uint64)(high))<<32)+((uint64)low))
diff --git a/src/thirdparty/unrar/rarvm.cpp b/src/thirdparty/unrar/rarvm.cpp
index 0dd38928a..2975e2358 100644
--- a/src/thirdparty/unrar/rarvm.cpp
+++ b/src/thirdparty/unrar/rarvm.cpp
@@ -1,9 +1,6 @@
#include "rar.hpp"
-#include "rarvmtbl.cpp"
-
RarVM::RarVM()
-:BitInput(true)
{
Mem=NULL;
}
@@ -21,718 +18,54 @@ void RarVM::Init()
Mem=new byte[VM_MEMSIZE+4];
}
-/*********************************************************************
- IS_VM_MEM macro checks if address belongs to VM memory pool (Mem).
- Only Mem data are always low endian regardless of machine architecture,
- so we need to convert them to native format when reading or writing.
- VM registers have endianness of host machine.
-**********************************************************************/
-#define IS_VM_MEM(a) (((byte*)a)>=Mem && ((byte*)a)<Mem+VM_MEMSIZE)
-
-inline uint RarVM::GetValue(bool ByteMode,uint *Addr)
-{
- if (ByteMode)
- {
-#ifdef BIG_ENDIAN
- if (IS_VM_MEM(Addr))
- return(*(byte *)Addr);
- else
- return(*Addr & 0xff);
-#else
- return(*(byte *)Addr);
-#endif
- }
- else
- {
-#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
- if (IS_VM_MEM(Addr))
- {
- byte *B=(byte *)Addr;
- return GET_UINT32((uint)B[0]|((uint)B[1]<<8)|((uint)B[2]<<16)|((uint)B[3]<<24));
- }
- else
- return GET_UINT32(*Addr);
-#else
- return GET_UINT32(*Addr);
-#endif
- }
-}
-
-#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
- #define GET_VALUE(ByteMode,Addr) GetValue(ByteMode,(uint *)Addr)
-#else
- #define GET_VALUE(ByteMode,Addr) ((ByteMode) ? (*(byte *)(Addr)):GET_UINT32(*(uint *)(Addr)))
-#endif
-
-
-inline void RarVM::SetValue(bool ByteMode,uint *Addr,uint Value)
-{
- if (ByteMode)
- {
-#ifdef BIG_ENDIAN
- if (IS_VM_MEM(Addr))
- *(byte *)Addr=Value;
- else
- *Addr=(*Addr & ~0xff)|(Value & 0xff);
-#else
- *(byte *)Addr=Value;
-#endif
- }
- else
- {
-#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED) || !defined(PRESENT_INT32)
- if (IS_VM_MEM(Addr))
- {
- ((byte *)Addr)[0]=(byte)Value;
- ((byte *)Addr)[1]=(byte)(Value>>8);
- ((byte *)Addr)[2]=(byte)(Value>>16);
- ((byte *)Addr)[3]=(byte)(Value>>24);
- }
- else
- *(uint *)Addr=Value;
-#else
- *(uint32 *)Addr=Value;
-#endif
- }
-}
-
-#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED) || !defined(PRESENT_INT32)
- #define SET_VALUE(ByteMode,Addr,Value) SetValue(ByteMode,(uint *)Addr,Value)
-#else
- #define SET_VALUE(ByteMode,Addr,Value) ((ByteMode) ? (*(byte *)(Addr)=((byte)(Value))):(*(uint32 *)(Addr)=((uint32)(Value))))
-#endif
-
-
-void RarVM::SetLowEndianValue(uint *Addr,uint Value)
-{
-#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED) || !defined(PRESENT_INT32)
- ((byte *)Addr)[0]=(byte)Value;
- ((byte *)Addr)[1]=(byte)(Value>>8);
- ((byte *)Addr)[2]=(byte)(Value>>16);
- ((byte *)Addr)[3]=(byte)(Value>>24);
-#else
- *(uint32 *)Addr=Value;
-#endif
-}
-
-
-inline uint* RarVM::GetOperand(VM_PreparedOperand *CmdOp)
-{
- if (CmdOp->Type==VM_OPREGMEM)
- return((uint *)&Mem[(*CmdOp->Addr+CmdOp->Base)&VM_MEMMASK]);
- else
- return(CmdOp->Addr);
-}
-
void RarVM::Execute(VM_PreparedProgram *Prg)
{
memcpy(R,Prg->InitR,sizeof(Prg->InitR));
- size_t GlobalSize=Min(Prg->GlobalData.Size(),VM_GLOBALMEMSIZE);
- if (GlobalSize)
- memcpy(Mem+VM_GLOBALMEMADDR,&Prg->GlobalData[0],GlobalSize);
- size_t StaticSize=Min(Prg->StaticData.Size(),VM_GLOBALMEMSIZE-GlobalSize);
- if (StaticSize)
- memcpy(Mem+VM_GLOBALMEMADDR+GlobalSize,&Prg->StaticData[0],StaticSize);
-
- R[7]=VM_MEMSIZE;
- Flags=0;
-
- VM_PreparedCommand *PreparedCode=Prg->AltCmd ? Prg->AltCmd:&Prg->Cmd[0];
- if (Prg->CmdCount>0 && !ExecuteCode(PreparedCode,Prg->CmdCount))
+ if (Prg->Type!=VMSF_NONE)
{
- // Invalid VM program. Let's replace it with 'return' command.
- PreparedCode[0].OpCode=VM_RET;
- }
- uint NewBlockPos=GET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x20])&VM_MEMMASK;
- uint NewBlockSize=GET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x1c])&VM_MEMMASK;
- if (NewBlockPos+NewBlockSize>=VM_MEMSIZE)
- NewBlockPos=NewBlockSize=0;
- Prg->FilteredData=Mem+NewBlockPos;
- Prg->FilteredDataSize=NewBlockSize;
-
- Prg->GlobalData.Reset();
-
- uint DataSize=Min(GET_VALUE(false,(uint*)&Mem[VM_GLOBALMEMADDR+0x30]),VM_GLOBALMEMSIZE-VM_FIXEDGLOBALSIZE);
- if (DataSize!=0)
- {
- Prg->GlobalData.Add(DataSize+VM_FIXEDGLOBALSIZE);
- memcpy(&Prg->GlobalData[0],&Mem[VM_GLOBALMEMADDR],DataSize+VM_FIXEDGLOBALSIZE);
- }
-}
-
-
-/*
-Note:
- Due to performance considerations RAR VM may set VM_FS, VM_FC, VM_FZ
- incorrectly for byte operands. These flags are always valid only
- for 32-bit operands. Check implementation of concrete VM command
- to see if it sets flags right.
-*/
-
-#define SET_IP(IP) \
- if ((IP)>=CodeSize) \
- return(true); \
- if (--MaxOpCount<=0) \
- return(false); \
- Cmd=PreparedCode+(IP);
-
-bool RarVM::ExecuteCode(VM_PreparedCommand *PreparedCode,uint CodeSize)
-{
- int MaxOpCount=25000000;
- VM_PreparedCommand *Cmd=PreparedCode;
- while (1)
- {
-#ifndef NORARVM
- // Get addresses to quickly access operands.
- uint *Op1=GetOperand(&Cmd->Op1);
- uint *Op2=GetOperand(&Cmd->Op2);
-#endif
- switch(Cmd->OpCode)
- {
-#ifndef NORARVM
- case VM_MOV:
- SET_VALUE(Cmd->ByteMode,Op1,GET_VALUE(Cmd->ByteMode,Op2));
- break;
-#ifdef VM_OPTIMIZE
- case VM_MOVB:
- SET_VALUE(true,Op1,GET_VALUE(true,Op2));
- break;
- case VM_MOVD:
- SET_VALUE(false,Op1,GET_VALUE(false,Op2));
- break;
-#endif
- case VM_CMP:
- {
- uint Value1=GET_VALUE(Cmd->ByteMode,Op1);
- uint Result=GET_UINT32(Value1-GET_VALUE(Cmd->ByteMode,Op2));
- Flags=Result==0 ? VM_FZ:(Result>Value1)|(Result&VM_FS);
- }
- break;
-#ifdef VM_OPTIMIZE
- case VM_CMPB:
- {
- uint Value1=GET_VALUE(true,Op1);
- uint Result=GET_UINT32(Value1-GET_VALUE(true,Op2));
- Flags=Result==0 ? VM_FZ:(Result>Value1)|(Result&VM_FS);
- }
- break;
- case VM_CMPD:
- {
- uint Value1=GET_VALUE(false,Op1);
- uint Result=GET_UINT32(Value1-GET_VALUE(false,Op2));
- Flags=Result==0 ? VM_FZ:(Result>Value1)|(Result&VM_FS);
- }
- break;
-#endif
- case VM_ADD:
- {
- uint Value1=GET_VALUE(Cmd->ByteMode,Op1);
- uint Result=GET_UINT32(Value1+GET_VALUE(Cmd->ByteMode,Op2));
- if (Cmd->ByteMode)
- {
- Result&=0xff;
- Flags=(Result<Value1)|(Result==0 ? VM_FZ:((Result&0x80) ? VM_FS:0));
- }
- else
- Flags=(Result<Value1)|(Result==0 ? VM_FZ:(Result&VM_FS));
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
-#ifdef VM_OPTIMIZE
- case VM_ADDB:
- SET_VALUE(true,Op1,GET_VALUE(true,Op1)+GET_VALUE(true,Op2));
- break;
- case VM_ADDD:
- SET_VALUE(false,Op1,GET_VALUE(false,Op1)+GET_VALUE(false,Op2));
- break;
-#endif
- case VM_SUB:
- {
- uint Value1=GET_VALUE(Cmd->ByteMode,Op1);
- uint Result=GET_UINT32(Value1-GET_VALUE(Cmd->ByteMode,Op2));
- Flags=Result==0 ? VM_FZ:(Result>Value1)|(Result&VM_FS);
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
-#ifdef VM_OPTIMIZE
- case VM_SUBB:
- SET_VALUE(true,Op1,GET_VALUE(true,Op1)-GET_VALUE(true,Op2));
- break;
- case VM_SUBD:
- SET_VALUE(false,Op1,GET_VALUE(false,Op1)-GET_VALUE(false,Op2));
- break;
-#endif
- case VM_JZ:
- if ((Flags & VM_FZ)!=0)
- {
- SET_IP(GET_VALUE(false,Op1));
- continue;
- }
- break;
- case VM_JNZ:
- if ((Flags & VM_FZ)==0)
- {
- SET_IP(GET_VALUE(false,Op1));
- continue;
- }
- break;
- case VM_INC:
- {
- uint Result=GET_UINT32(GET_VALUE(Cmd->ByteMode,Op1)+1);
- if (Cmd->ByteMode)
- Result&=0xff;
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- Flags=Result==0 ? VM_FZ:Result&VM_FS;
- }
- break;
-#ifdef VM_OPTIMIZE
- case VM_INCB:
- SET_VALUE(true,Op1,GET_VALUE(true,Op1)+1);
- break;
- case VM_INCD:
- SET_VALUE(false,Op1,GET_VALUE(false,Op1)+1);
- break;
-#endif
- case VM_DEC:
- {
- uint Result=GET_UINT32(GET_VALUE(Cmd->ByteMode,Op1)-1);
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- Flags=Result==0 ? VM_FZ:Result&VM_FS;
- }
- break;
-#ifdef VM_OPTIMIZE
- case VM_DECB:
- SET_VALUE(true,Op1,GET_VALUE(true,Op1)-1);
- break;
- case VM_DECD:
- SET_VALUE(false,Op1,GET_VALUE(false,Op1)-1);
- break;
-#endif
- case VM_JMP:
- SET_IP(GET_VALUE(false,Op1));
- continue;
- case VM_XOR:
- {
- uint Result=GET_UINT32(GET_VALUE(Cmd->ByteMode,Op1)^GET_VALUE(Cmd->ByteMode,Op2));
- Flags=Result==0 ? VM_FZ:Result&VM_FS;
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
- case VM_AND:
- {
- uint Result=GET_UINT32(GET_VALUE(Cmd->ByteMode,Op1)&GET_VALUE(Cmd->ByteMode,Op2));
- Flags=Result==0 ? VM_FZ:Result&VM_FS;
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
- case VM_OR:
- {
- uint Result=GET_UINT32(GET_VALUE(Cmd->ByteMode,Op1)|GET_VALUE(Cmd->ByteMode,Op2));
- Flags=Result==0 ? VM_FZ:Result&VM_FS;
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
- case VM_TEST:
- {
- uint Result=GET_UINT32(GET_VALUE(Cmd->ByteMode,Op1)&GET_VALUE(Cmd->ByteMode,Op2));
- Flags=Result==0 ? VM_FZ:Result&VM_FS;
- }
- break;
- case VM_JS:
- if ((Flags & VM_FS)!=0)
- {
- SET_IP(GET_VALUE(false,Op1));
- continue;
- }
- break;
- case VM_JNS:
- if ((Flags & VM_FS)==0)
- {
- SET_IP(GET_VALUE(false,Op1));
- continue;
- }
- break;
- case VM_JB:
- if ((Flags & VM_FC)!=0)
- {
- SET_IP(GET_VALUE(false,Op1));
- continue;
- }
- break;
- case VM_JBE:
- if ((Flags & (VM_FC|VM_FZ))!=0)
- {
- SET_IP(GET_VALUE(false,Op1));
- continue;
- }
- break;
- case VM_JA:
- if ((Flags & (VM_FC|VM_FZ))==0)
- {
- SET_IP(GET_VALUE(false,Op1));
- continue;
- }
- break;
- case VM_JAE:
- if ((Flags & VM_FC)==0)
- {
- SET_IP(GET_VALUE(false,Op1));
- continue;
- }
- break;
- case VM_PUSH:
- R[7]-=4;
- SET_VALUE(false,(uint *)&Mem[R[7]&VM_MEMMASK],GET_VALUE(false,Op1));
- break;
- case VM_POP:
- SET_VALUE(false,Op1,GET_VALUE(false,(uint *)&Mem[R[7] & VM_MEMMASK]));
- R[7]+=4;
- break;
- case VM_CALL:
- R[7]-=4;
- SET_VALUE(false,(uint *)&Mem[R[7]&VM_MEMMASK],Cmd-PreparedCode+1);
- SET_IP(GET_VALUE(false,Op1));
- continue;
- case VM_NOT:
- SET_VALUE(Cmd->ByteMode,Op1,~GET_VALUE(Cmd->ByteMode,Op1));
- break;
- case VM_SHL:
- {
- uint Value1=GET_VALUE(Cmd->ByteMode,Op1);
- uint Value2=GET_VALUE(Cmd->ByteMode,Op2);
- uint Result=GET_UINT32(Value1<<Value2);
- Flags=(Result==0 ? VM_FZ:(Result&VM_FS))|((Value1<<(Value2-1))&0x80000000 ? VM_FC:0);
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
- case VM_SHR:
- {
- uint Value1=GET_VALUE(Cmd->ByteMode,Op1);
- uint Value2=GET_VALUE(Cmd->ByteMode,Op2);
- uint Result=GET_UINT32(Value1>>Value2);
- Flags=(Result==0 ? VM_FZ:(Result&VM_FS))|((Value1>>(Value2-1))&VM_FC);
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
- case VM_SAR:
- {
- uint Value1=GET_VALUE(Cmd->ByteMode,Op1);
- uint Value2=GET_VALUE(Cmd->ByteMode,Op2);
- uint Result=GET_UINT32(((int)Value1)>>Value2);
- Flags=(Result==0 ? VM_FZ:(Result&VM_FS))|((Value1>>(Value2-1))&VM_FC);
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
- case VM_NEG:
- {
- // We use "0-value" expression to suppress "unary minus to unsigned"
- // compiler warning.
- uint Result=GET_UINT32(0-GET_VALUE(Cmd->ByteMode,Op1));
- Flags=Result==0 ? VM_FZ:VM_FC|(Result&VM_FS);
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
-#ifdef VM_OPTIMIZE
- case VM_NEGB:
- SET_VALUE(true,Op1,0-GET_VALUE(true,Op1));
- break;
- case VM_NEGD:
- SET_VALUE(false,Op1,0-GET_VALUE(false,Op1));
- break;
-#endif
- case VM_PUSHA:
- {
- const int RegCount=sizeof(R)/sizeof(R[0]);
- for (int I=0,SP=R[7]-4;I<RegCount;I++,SP-=4)
- SET_VALUE(false,(uint *)&Mem[SP & VM_MEMMASK],R[I]);
- R[7]-=RegCount*4;
- }
- break;
- case VM_POPA:
- {
- const int RegCount=sizeof(R)/sizeof(R[0]);
- for (uint I=0,SP=R[7];I<RegCount;I++,SP+=4)
- R[7-I]=GET_VALUE(false,(uint *)&Mem[SP & VM_MEMMASK]);
- }
- break;
- case VM_PUSHF:
- R[7]-=4;
- SET_VALUE(false,(uint *)&Mem[R[7]&VM_MEMMASK],Flags);
- break;
- case VM_POPF:
- Flags=GET_VALUE(false,(uint *)&Mem[R[7] & VM_MEMMASK]);
- R[7]+=4;
- break;
- case VM_MOVZX:
- SET_VALUE(false,Op1,GET_VALUE(true,Op2));
- break;
- case VM_MOVSX:
- SET_VALUE(false,Op1,(signed char)GET_VALUE(true,Op2));
- break;
- case VM_XCHG:
- {
- uint Value1=GET_VALUE(Cmd->ByteMode,Op1);
- SET_VALUE(Cmd->ByteMode,Op1,GET_VALUE(Cmd->ByteMode,Op2));
- SET_VALUE(Cmd->ByteMode,Op2,Value1);
- }
- break;
- case VM_MUL:
- {
- uint Result=GET_VALUE(Cmd->ByteMode,Op1)*GET_VALUE(Cmd->ByteMode,Op2);
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
- case VM_DIV:
- {
- uint Divider=GET_VALUE(Cmd->ByteMode,Op2);
- if (Divider!=0)
- {
- uint Result=GET_VALUE(Cmd->ByteMode,Op1)/Divider;
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- }
- break;
- case VM_ADC:
- {
- uint Value1=GET_VALUE(Cmd->ByteMode,Op1);
- uint FC=(Flags&VM_FC);
- uint Result=GET_UINT32(Value1+GET_VALUE(Cmd->ByteMode,Op2)+FC);
- if (Cmd->ByteMode)
- Result&=0xff;
- Flags=(Result<Value1 || Result==Value1 && FC)|(Result==0 ? VM_FZ:(Result&VM_FS));
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
- case VM_SBB:
- {
- uint Value1=GET_VALUE(Cmd->ByteMode,Op1);
- uint FC=(Flags&VM_FC);
- uint Result=GET_UINT32(Value1-GET_VALUE(Cmd->ByteMode,Op2)-FC);
- if (Cmd->ByteMode)
- Result&=0xff;
- Flags=(Result>Value1 || Result==Value1 && FC)|(Result==0 ? VM_FZ:(Result&VM_FS));
- SET_VALUE(Cmd->ByteMode,Op1,Result);
- }
- break;
-#endif // for #ifndef NORARVM
- case VM_RET:
- if (R[7]>=VM_MEMSIZE)
- return(true);
- SET_IP(GET_VALUE(false,(uint *)&Mem[R[7] & VM_MEMMASK]));
- R[7]+=4;
- continue;
-#ifdef VM_STANDARDFILTERS
- case VM_STANDARD:
- ExecuteStandardFilter((VM_StandardFilters)Cmd->Op1.Data);
- return true;
-#endif
- case VM_PRINT:
- break;
- }
- Cmd++;
- --MaxOpCount;
+ bool Success=ExecuteStandardFilter(Prg->Type);
+ uint BlockSize=Prg->InitR[4] & VM_MEMMASK;
+ Prg->FilteredDataSize=BlockSize;
+ if (Prg->Type==VMSF_DELTA || Prg->Type==VMSF_RGB || Prg->Type==VMSF_AUDIO)
+ Prg->FilteredData=2*BlockSize>VM_MEMSIZE || !Success ? Mem:Mem+BlockSize;
+ else
+ Prg->FilteredData=Mem;
}
}
-
-
void RarVM::Prepare(byte *Code,uint CodeSize,VM_PreparedProgram *Prg)
{
- InitBitInput();
- memcpy(InBuf,Code,Min(CodeSize,BitInput::MAX_SIZE));
-
// Calculate the single byte XOR checksum to check validity of VM code.
byte XorSum=0;
for (uint I=1;I<CodeSize;I++)
XorSum^=Code[I];
- faddbits(8);
-
- Prg->CmdCount=0;
- if (XorSum==Code[0]) // VM code is valid if equal.
- {
-#ifdef VM_STANDARDFILTERS
- VM_StandardFilters FilterType=IsStandardFilter(Code,CodeSize);
- if (FilterType!=VMSF_NONE)
- {
- // VM code is found among standard filters.
- Prg->Cmd.Add(1);
- VM_PreparedCommand *CurCmd=&Prg->Cmd[Prg->CmdCount++];
- CurCmd->OpCode=VM_STANDARD;
- CurCmd->Op1.Data=FilterType;
- CurCmd->Op1.Addr=&CurCmd->Op1.Data;
- CurCmd->Op2.Addr=&CurCmd->Op2.Data;
- CurCmd->Op1.Type=CurCmd->Op2.Type=VM_OPNONE;
- CodeSize=0;
- return;
- }
-#endif
-#ifndef NORARVM
- uint DataFlag=fgetbits();
- faddbits(1);
-
- // Read static data contained in DB operators. This data cannot be
- // changed, it is a part of VM code, not a filter parameter.
-
- if (DataFlag&0x8000)
- {
- uint DataSize=ReadData(*this)+1;
- for (uint I=0;(uint)InAddr<CodeSize && I<DataSize;I++)
- {
- Prg->StaticData.Add(1);
- Prg->StaticData[I]=fgetbits()>>8;
- faddbits(8);
- }
- }
-
- while ((uint)InAddr<CodeSize)
- {
- Prg->Cmd.Add(1);
- VM_PreparedCommand *CurCmd=&Prg->Cmd[Prg->CmdCount];
- uint Data=fgetbits();
- if ((Data&0x8000)==0)
- {
- CurCmd->OpCode=(VM_Commands)(Data>>12);
- faddbits(4);
- }
- else
- {
- CurCmd->OpCode=(VM_Commands)((Data>>10)-24);
- faddbits(6);
- }
- if (VM_CmdFlags[CurCmd->OpCode] & VMCF_BYTEMODE)
- {
- CurCmd->ByteMode=(fgetbits()>>15)!=0;
- faddbits(1);
- }
- else
- CurCmd->ByteMode=0;
- CurCmd->Op1.Type=CurCmd->Op2.Type=VM_OPNONE;
- int OpNum=(VM_CmdFlags[CurCmd->OpCode] & VMCF_OPMASK);
- CurCmd->Op1.Addr=CurCmd->Op2.Addr=NULL;
- if (OpNum>0)
- {
- DecodeArg(CurCmd->Op1,CurCmd->ByteMode); // reading the first operand
- if (OpNum==2)
- DecodeArg(CurCmd->Op2,CurCmd->ByteMode); // reading the second operand
- else
- {
- if (CurCmd->Op1.Type==VM_OPINT && (VM_CmdFlags[CurCmd->OpCode]&(VMCF_JUMP|VMCF_PROC)))
- {
- // Calculating jump distance.
- int Distance=CurCmd->Op1.Data;
- if (Distance>=256)
- Distance-=256;
- else
- {
- if (Distance>=136)
- Distance-=264;
- else
- if (Distance>=16)
- Distance-=8;
- else
- if (Distance>=8)
- Distance-=16;
- Distance+=Prg->CmdCount;
- }
- CurCmd->Op1.Data=Distance;
- }
- }
- }
- Prg->CmdCount++;
- }
-#endif
- }
-
- // Adding RET command at the end of program.
- Prg->Cmd.Add(1);
- VM_PreparedCommand *CurCmd=&Prg->Cmd[Prg->CmdCount++];
- CurCmd->OpCode=VM_RET;
- CurCmd->Op1.Addr=&CurCmd->Op1.Data;
- CurCmd->Op2.Addr=&CurCmd->Op2.Data;
- CurCmd->Op1.Type=CurCmd->Op2.Type=VM_OPNONE;
+ if (XorSum!=Code[0])
+ return;
- // If operand 'Addr' field has not been set by DecodeArg calls above,
- // let's set it to point to operand 'Data' field. It is necessary for
- // VM_OPINT type operands (usual integers) or maybe if something was
- // not set properly for other operands. 'Addr' field is required
- // for quicker addressing of operand data.
- for (int I=0;I<Prg->CmdCount;I++)
- {
- VM_PreparedCommand *Cmd=&Prg->Cmd[I];
- if (Cmd->Op1.Addr==NULL)
- Cmd->Op1.Addr=&Cmd->Op1.Data;
- if (Cmd->Op2.Addr==NULL)
- Cmd->Op2.Addr=&Cmd->Op2.Data;
- }
-
-#ifdef VM_OPTIMIZE
- if (CodeSize!=0)
- Optimize(Prg);
-#endif
-}
-
-
-#ifndef NORARVM
-void RarVM::DecodeArg(VM_PreparedOperand &Op,bool ByteMode)
-{
- uint Data=fgetbits();
- if (Data & 0x8000)
+ struct StandardFilters
{
- Op.Type=VM_OPREG; // Operand is register (R[0]..R[7])
- Op.Data=(Data>>12)&7; // Register number
- Op.Addr=&R[Op.Data]; // Register address
- faddbits(4); // 1 flag bit and 3 register number bits
- }
- else
- if ((Data & 0xc000)==0)
- {
- Op.Type=VM_OPINT; // Operand is integer
- if (ByteMode)
- {
- Op.Data=(Data>>6) & 0xff; // Byte integer.
- faddbits(10);
- }
- else
- {
- faddbits(2);
- Op.Data=ReadData(*this); // 32 bit integer.
- }
- }
- else
+ uint Length;
+ uint CRC;
+ VM_StandardFilters Type;
+ } static StdList[]={
+ 53, 0xad576887, VMSF_E8,
+ 57, 0x3cd7e57e, VMSF_E8E9,
+ 120, 0x3769893f, VMSF_ITANIUM,
+ 29, 0x0e06077d, VMSF_DELTA,
+ 149, 0x1c2c5dc8, VMSF_RGB,
+ 216, 0xbc85e701, VMSF_AUDIO
+ };
+ uint CodeCRC=CRC32(0xffffffff,Code,CodeSize)^0xffffffff;
+ for (uint I=0;I<ASIZE(StdList);I++)
+ if (StdList[I].CRC==CodeCRC && StdList[I].Length==CodeSize)
{
- // Operand is data addressed by register data, base address or both.
- Op.Type=VM_OPREGMEM;
- if ((Data & 0x2000)==0)
- {
- // Base address is zero, just use the address from register.
- Op.Data=(Data>>10)&7;
- Op.Addr=&R[Op.Data];
- Op.Base=0;
- faddbits(6);
- }
- else
- {
- if ((Data & 0x1000)==0)
- {
- // Use both register and base address.
- Op.Data=(Data>>9)&7;
- Op.Addr=&R[Op.Data];
- faddbits(7);
- }
- else
- {
- // Use base address only. Access memory by fixed address.
- Op.Data=0;
- faddbits(4);
- }
- Op.Base=ReadData(*this); // Read base address.
- }
+ Prg->Type=StdList[I].Type;
+ break;
}
}
-#endif
uint RarVM::ReadData(BitInput &Inp)
@@ -742,7 +75,7 @@ uint RarVM::ReadData(BitInput &Inp)
{
case 0:
Inp.faddbits(6);
- return((Data>>10)&0xf);
+ return (Data>>10)&0xf;
case 0x4000:
if ((Data&0x3c00)==0)
{
@@ -754,19 +87,19 @@ uint RarVM::ReadData(BitInput &Inp)
Data=(Data>>6)&0xff;
Inp.faddbits(10);
}
- return(Data);
+ return Data;
case 0x8000:
Inp.faddbits(2);
Data=Inp.fgetbits();
Inp.faddbits(16);
- return(Data);
+ return Data;
default:
Inp.faddbits(2);
Data=(Inp.fgetbits()<<16);
Inp.faddbits(16);
Data|=Inp.fgetbits();
Inp.faddbits(16);
- return(Data);
+ return Data;
}
}
@@ -778,100 +111,7 @@ void RarVM::SetMemory(size_t Pos,byte *Data,size_t DataSize)
}
-#ifdef VM_OPTIMIZE
-void RarVM::Optimize(VM_PreparedProgram *Prg)
-{
- VM_PreparedCommand *Code=&Prg->Cmd[0];
- uint CodeSize=Prg->CmdCount;
-
- for (uint I=0;I<CodeSize;I++)
- {
- VM_PreparedCommand *Cmd=Code+I;
-
- // Replace universal opcodes with faster byte or word only processing
- // opcodes.
- switch(Cmd->OpCode)
- {
- case VM_MOV:
- Cmd->OpCode=Cmd->ByteMode ? VM_MOVB:VM_MOVD;
- continue;
- case VM_CMP:
- Cmd->OpCode=Cmd->ByteMode ? VM_CMPB:VM_CMPD;
- continue;
- }
- if ((VM_CmdFlags[Cmd->OpCode] & VMCF_CHFLAGS)==0)
- continue;
-
- // If we do not have jump commands between the current operation
- // and next command which will modify processor flags, we can replace
- // the current command with faster version which does not need to
- // modify flags.
- bool FlagsRequired=false;
- for (uint J=I+1;J<CodeSize;J++)
- {
- int Flags=VM_CmdFlags[Code[J].OpCode];
- if (Flags & (VMCF_JUMP|VMCF_PROC|VMCF_USEFLAGS))
- {
- FlagsRequired=true;
- break;
- }
- if (Flags & VMCF_CHFLAGS)
- break;
- }
-
- // Below we'll replace universal opcodes with faster byte or word only
- // processing opcodes, which also do not modify processor flags to
- // provide better performance.
- if (FlagsRequired)
- continue;
- switch(Cmd->OpCode)
- {
- case VM_ADD:
- Cmd->OpCode=Cmd->ByteMode ? VM_ADDB:VM_ADDD;
- continue;
- case VM_SUB:
- Cmd->OpCode=Cmd->ByteMode ? VM_SUBB:VM_SUBD;
- continue;
- case VM_INC:
- Cmd->OpCode=Cmd->ByteMode ? VM_INCB:VM_INCD;
- continue;
- case VM_DEC:
- Cmd->OpCode=Cmd->ByteMode ? VM_DECB:VM_DECD;
- continue;
- case VM_NEG:
- Cmd->OpCode=Cmd->ByteMode ? VM_NEGB:VM_NEGD;
- continue;
- }
- }
-}
-#endif
-
-
-#ifdef VM_STANDARDFILTERS
-VM_StandardFilters RarVM::IsStandardFilter(byte *Code,uint CodeSize)
-{
- struct StandardFilterSignature
- {
- int Length;
- uint CRC;
- VM_StandardFilters Type;
- } static StdList[]={
- 53, 0xad576887, VMSF_E8,
- 57, 0x3cd7e57e, VMSF_E8E9,
- 120, 0x3769893f, VMSF_ITANIUM,
- 29, 0x0e06077d, VMSF_DELTA,
- 149, 0x1c2c5dc8, VMSF_RGB,
- 216, 0xbc85e701, VMSF_AUDIO
- };
- uint CodeCRC=CRC32(0xffffffff,Code,CodeSize)^0xffffffff;
- for (uint I=0;I<ASIZE(StdList);I++)
- if (StdList[I].CRC==CodeCRC && StdList[I].Length==CodeSize)
- return(StdList[I].Type);
- return(VMSF_NONE);
-}
-
-
-void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
+bool RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
{
switch(FilterType)
{
@@ -879,43 +119,32 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
case VMSF_E8E9:
{
byte *Data=Mem;
- int DataSize=R[4];
- uint FileOffset=R[6];
+ uint DataSize=R[4],FileOffset=R[6];
- if ((uint)DataSize>=VM_GLOBALMEMADDR || DataSize<4)
- break;
+ if (DataSize>VM_MEMSIZE || DataSize<4)
+ return false;
- const int FileSize=0x1000000;
+ const uint FileSize=0x1000000;
byte CmpByte2=FilterType==VMSF_E8E9 ? 0xe9:0xe8;
- for (int CurPos=0;CurPos<DataSize-4;)
+ for (uint CurPos=0;CurPos<DataSize-4;)
{
byte CurByte=*(Data++);
CurPos++;
if (CurByte==0xe8 || CurByte==CmpByte2)
{
-#ifdef PRESENT_INT32
- int32 Offset=CurPos+FileOffset;
- int32 Addr=GET_VALUE(false,Data);
- if (Addr<0)
+ uint Offset=CurPos+FileOffset;
+ uint Addr=RawGet4(Data);
+
+ // We check 0x80000000 bit instead of '< 0' comparison
+ // not assuming int32 presence or uint size and endianness.
+ if ((Addr & 0x80000000)!=0) // Addr<0
{
- if (Addr+Offset>=0)
- SET_VALUE(false,Data,Addr+FileSize);
+ if (((Addr+Offset) & 0x80000000)==0) // Addr+Offset>=0
+ RawPut4(Addr+FileSize,Data);
}
else
- if (Addr<FileSize)
- SET_VALUE(false,Data,Addr-Offset);
-#else
- long Offset=CurPos+FileOffset;
- long Addr=GET_VALUE(false,Data);
- if ((Addr & 0x80000000)!=0)
- {
- if (((Addr+Offset) & 0x80000000)==0)
- SET_VALUE(false,Data,Addr+FileSize);
- }
- else
- if (((Addr-FileSize) & 0x80000000)!=0)
- SET_VALUE(false,Data,Addr-Offset);
-#endif
+ if (((Addr-FileSize) & 0x80000000)!=0) // Addr<FileSize
+ RawPut4(Addr-Offset,Data);
Data+=4;
CurPos+=4;
}
@@ -925,13 +154,12 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
case VMSF_ITANIUM:
{
byte *Data=Mem;
- int DataSize=R[4];
- uint FileOffset=R[6];
+ uint DataSize=R[4],FileOffset=R[6];
- if ((uint)DataSize>=VM_GLOBALMEMADDR || DataSize<21)
- break;
+ if (DataSize>VM_MEMSIZE || DataSize<21)
+ return false;
- int CurPos=0;
+ uint CurPos=0;
FileOffset>>=4;
@@ -943,14 +171,14 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
static byte Masks[16]={4,4,6,6,0,0,7,7,4,4,0,0,4,4,0,0};
byte CmdMask=Masks[Byte];
if (CmdMask!=0)
- for (int I=0;I<=2;I++)
+ for (uint I=0;I<=2;I++)
if (CmdMask & (1<<I))
{
- int StartPos=I*41+5;
- int OpType=FilterItanium_GetBits(Data,StartPos+37,4);
+ uint StartPos=I*41+5;
+ uint OpType=FilterItanium_GetBits(Data,StartPos+37,4);
if (OpType==5)
{
- int Offset=FilterItanium_GetBits(Data,StartPos+13,20);
+ uint Offset=FilterItanium_GetBits(Data,StartPos+13,20);
FilterItanium_SetBits(Data,(Offset-FileOffset)&0xfffff,StartPos+13,20);
}
}
@@ -963,40 +191,37 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
break;
case VMSF_DELTA:
{
- int DataSize=R[4],Channels=R[0],SrcPos=0,Border=DataSize*2;
- SET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x20],DataSize);
- if ((uint)DataSize>=VM_GLOBALMEMADDR/2)
- break;
+ uint DataSize=R[4],Channels=R[0],SrcPos=0,Border=DataSize*2;
+ if (DataSize>VM_MEMSIZE/2 || Channels>MAX3_UNPACK_CHANNELS || Channels==0)
+ return false;
// Bytes from same channels are grouped to continual data blocks,
// so we need to place them back to their interleaving positions.
- for (int CurChannel=0;CurChannel<Channels;CurChannel++)
+ for (uint CurChannel=0;CurChannel<Channels;CurChannel++)
{
byte PrevByte=0;
- for (int DestPos=DataSize+CurChannel;DestPos<Border;DestPos+=Channels)
+ for (uint DestPos=DataSize+CurChannel;DestPos<Border;DestPos+=Channels)
Mem[DestPos]=(PrevByte-=Mem[SrcPos++]);
}
}
break;
case VMSF_RGB:
{
- int DataSize=R[4],Width=R[0]-3,PosR=R[1];
+ uint DataSize=R[4],Width=R[0]-3,PosR=R[1];
+ if (DataSize>VM_MEMSIZE/2 || DataSize<3 || Width>DataSize || PosR>2)
+ return false;
byte *SrcData=Mem,*DestData=SrcData+DataSize;
- const int Channels=3;
- SET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x20],DataSize);
- if ((uint)DataSize>=VM_GLOBALMEMADDR/2 || Width<0 || PosR<0)
- break;
- for (int CurChannel=0;CurChannel<Channels;CurChannel++)
+ const uint Channels=3;
+ for (uint CurChannel=0;CurChannel<Channels;CurChannel++)
{
uint PrevByte=0;
- for (int I=CurChannel;I<DataSize;I+=Channels)
+ for (uint I=CurChannel;I<DataSize;I+=Channels)
{
uint Predicted;
- int UpperPos=I-Width;
- if (UpperPos>=3)
+ if (I>=Width+3)
{
- byte *UpperData=DestData+UpperPos;
+ byte *UpperData=DestData+I-Width;
uint UpperByte=*UpperData;
uint UpperLeftByte=*(UpperData-3);
Predicted=PrevByte+UpperByte-UpperLeftByte;
@@ -1016,7 +241,7 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
DestData[I]=PrevByte=(byte)(Predicted-*(SrcData++));
}
}
- for (int I=PosR,Border=DataSize-2;I<Border;I+=3)
+ for (uint I=PosR,Border=DataSize-2;I<Border;I+=3)
{
byte G=DestData[I+1];
DestData[I]+=G;
@@ -1026,19 +251,19 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
break;
case VMSF_AUDIO:
{
- int DataSize=R[4],Channels=R[0];
+ uint DataSize=R[4],Channels=R[0];
byte *SrcData=Mem,*DestData=SrcData+DataSize;
- SET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x20],DataSize);
- if ((uint)DataSize>=VM_GLOBALMEMADDR/2)
- break;
- for (int CurChannel=0;CurChannel<Channels;CurChannel++)
+ // In fact, audio channels never exceed 4.
+ if (DataSize>VM_MEMSIZE/2 || Channels>128 || Channels==0)
+ return false;
+ for (uint CurChannel=0;CurChannel<Channels;CurChannel++)
{
uint PrevByte=0,PrevDelta=0,Dif[7];
int D1=0,D2=0,D3;
int K1=0,K2=0,K3=0;
memset(Dif,0,sizeof(Dif));
- for (int I=CurChannel,ByteCount=0;I<DataSize;I+=Channels,ByteCount++)
+ for (uint I=CurChannel,ByteCount=0;I<DataSize;I+=Channels,ByteCount++)
{
D3=D2;
D2=PrevDelta-D1;
@@ -1068,7 +293,7 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
{
uint MinDif=Dif[0],NumMinDif=0;
Dif[0]=0;
- for (int J=1;J<sizeof(Dif)/sizeof(Dif[0]);J++)
+ for (uint J=1;J<ASIZE(Dif);J++)
{
if (Dif[J]<MinDif)
{
@@ -1092,26 +317,27 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
}
break;
}
+ return true;
}
-uint RarVM::FilterItanium_GetBits(byte *Data,int BitPos,int BitCount)
+uint RarVM::FilterItanium_GetBits(byte *Data,uint BitPos,uint BitCount)
{
- int InAddr=BitPos/8;
- int InBit=BitPos&7;
+ uint InAddr=BitPos/8;
+ uint InBit=BitPos&7;
uint BitField=(uint)Data[InAddr++];
BitField|=(uint)Data[InAddr++] << 8;
BitField|=(uint)Data[InAddr++] << 16;
BitField|=(uint)Data[InAddr] << 24;
BitField >>= InBit;
- return(BitField & (0xffffffff>>(32-BitCount)));
+ return BitField & (0xffffffff>>(32-BitCount));
}
-void RarVM::FilterItanium_SetBits(byte *Data,uint BitField,int BitPos,int BitCount)
+void RarVM::FilterItanium_SetBits(byte *Data,uint BitField,uint BitPos,uint BitCount)
{
- int InAddr=BitPos/8;
- int InBit=BitPos&7;
+ uint InAddr=BitPos/8;
+ uint InBit=BitPos&7;
uint AndMask=0xffffffff>>(32-BitCount);
AndMask=~(AndMask<<InBit);
@@ -1125,4 +351,3 @@ void RarVM::FilterItanium_SetBits(byte *Data,uint BitField,int BitPos,int BitCou
BitField>>=8;
}
}
-#endif
diff --git a/src/thirdparty/unrar/rarvm.hpp b/src/thirdparty/unrar/rarvm.hpp
index 785d5dfc3..e65c4b1a8 100644
--- a/src/thirdparty/unrar/rarvm.hpp
+++ b/src/thirdparty/unrar/rarvm.hpp
@@ -1,107 +1,42 @@
#ifndef _RAR_VM_
#define _RAR_VM_
-#define VM_STANDARDFILTERS
-#define NORARVM
-
#define VM_MEMSIZE 0x40000
#define VM_MEMMASK (VM_MEMSIZE-1)
-#define VM_GLOBALMEMADDR 0x3C000
-#define VM_GLOBALMEMSIZE 0x2000
-#define VM_FIXEDGLOBALSIZE 64
-
-enum VM_Commands
-{
- VM_MOV, VM_CMP, VM_ADD, VM_SUB, VM_JZ, VM_JNZ, VM_INC, VM_DEC,
- VM_JMP, VM_XOR, VM_AND, VM_OR, VM_TEST, VM_JS, VM_JNS, VM_JB,
- VM_JBE, VM_JA, VM_JAE, VM_PUSH, VM_POP, VM_CALL, VM_RET, VM_NOT,
- VM_SHL, VM_SHR, VM_SAR, VM_NEG, VM_PUSHA,VM_POPA, VM_PUSHF,VM_POPF,
- VM_MOVZX,VM_MOVSX,VM_XCHG, VM_MUL, VM_DIV, VM_ADC, VM_SBB, VM_PRINT,
-
-#ifdef VM_OPTIMIZE
- VM_MOVB, VM_MOVD, VM_CMPB, VM_CMPD,
-
- VM_ADDB, VM_ADDD, VM_SUBB, VM_SUBD, VM_INCB, VM_INCD, VM_DECB, VM_DECD,
- VM_NEGB, VM_NEGD,
-#endif
-
- VM_STANDARD
-};
enum VM_StandardFilters {
VMSF_NONE, VMSF_E8, VMSF_E8E9, VMSF_ITANIUM, VMSF_RGB, VMSF_AUDIO,
VMSF_DELTA
};
-enum VM_Flags {VM_FC=1,VM_FZ=2,VM_FS=0x80000000};
-
-enum VM_OpType {VM_OPREG,VM_OPINT,VM_OPREGMEM,VM_OPNONE};
-
-struct VM_PreparedOperand
-{
- VM_OpType Type;
- uint Data;
- uint Base;
- uint *Addr;
-};
-
-struct VM_PreparedCommand
-{
- VM_Commands OpCode;
- bool ByteMode;
- VM_PreparedOperand Op1,Op2;
-};
-
-
struct VM_PreparedProgram
{
VM_PreparedProgram()
{
- AltCmd=NULL;
FilteredDataSize=0;
- CmdCount=0;
+ Type=VMSF_NONE;
}
-
- Array<VM_PreparedCommand> Cmd;
- VM_PreparedCommand *AltCmd;
- int CmdCount;
-
- Array<byte> GlobalData;
- Array<byte> StaticData; // static data contained in DB operators
+ VM_StandardFilters Type;
uint InitR[7];
-
byte *FilteredData;
uint FilteredDataSize;
};
-class RarVM:private BitInput
+class RarVM
{
private:
- inline uint GetValue(bool ByteMode,uint *Addr);
- inline void SetValue(bool ByteMode,uint *Addr,uint Value);
- inline uint* GetOperand(VM_PreparedOperand *CmdOp);
- void DecodeArg(VM_PreparedOperand &Op,bool ByteMode);
-#ifdef VM_OPTIMIZE
- void Optimize(VM_PreparedProgram *Prg);
-#endif
- bool ExecuteCode(VM_PreparedCommand *PreparedCode,uint CodeSize);
-#ifdef VM_STANDARDFILTERS
- VM_StandardFilters IsStandardFilter(byte *Code,uint CodeSize);
- void ExecuteStandardFilter(VM_StandardFilters FilterType);
- uint FilterItanium_GetBits(byte *Data,int BitPos,int BitCount);
- void FilterItanium_SetBits(byte *Data,uint BitField,int BitPos,int BitCount);
-#endif
+ bool ExecuteStandardFilter(VM_StandardFilters FilterType);
+ uint FilterItanium_GetBits(byte *Data,uint BitPos,uint BitCount);
+ void FilterItanium_SetBits(byte *Data,uint BitField,uint BitPos,uint BitCount);
byte *Mem;
uint R[8];
- uint Flags;
public:
RarVM();
~RarVM();
void Init();
void Prepare(byte *Code,uint CodeSize,VM_PreparedProgram *Prg);
void Execute(VM_PreparedProgram *Prg);
- void SetLowEndianValue(uint *Addr,uint Value);
void SetMemory(size_t Pos,byte *Data,size_t DataSize);
static uint ReadData(BitInput &Inp);
};
diff --git a/src/thirdparty/unrar/rarvmtbl.cpp b/src/thirdparty/unrar/rarvmtbl.cpp
deleted file mode 100644
index b5e6c7201..000000000
--- a/src/thirdparty/unrar/rarvmtbl.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#define VMCF_OP0 0
-#define VMCF_OP1 1
-#define VMCF_OP2 2
-#define VMCF_OPMASK 3
-#define VMCF_BYTEMODE 4
-#define VMCF_JUMP 8
-#define VMCF_PROC 16
-#define VMCF_USEFLAGS 32
-#define VMCF_CHFLAGS 64
-
-static byte VM_CmdFlags[]=
-{
- /* VM_MOV */ VMCF_OP2 | VMCF_BYTEMODE ,
- /* VM_CMP */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_ADD */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_SUB */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_JZ */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS ,
- /* VM_JNZ */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS ,
- /* VM_INC */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_DEC */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_JMP */ VMCF_OP1 | VMCF_JUMP ,
- /* VM_XOR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_AND */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_OR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_TEST */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_JS */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS ,
- /* VM_JNS */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS ,
- /* VM_JB */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS ,
- /* VM_JBE */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS ,
- /* VM_JA */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS ,
- /* VM_JAE */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS ,
- /* VM_PUSH */ VMCF_OP1 ,
- /* VM_POP */ VMCF_OP1 ,
- /* VM_CALL */ VMCF_OP1 | VMCF_PROC ,
- /* VM_RET */ VMCF_OP0 | VMCF_PROC ,
- /* VM_NOT */ VMCF_OP1 | VMCF_BYTEMODE ,
- /* VM_SHL */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_SHR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_SAR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_NEG */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS ,
- /* VM_PUSHA */ VMCF_OP0 ,
- /* VM_POPA */ VMCF_OP0 ,
- /* VM_PUSHF */ VMCF_OP0 | VMCF_USEFLAGS ,
- /* VM_POPF */ VMCF_OP0 | VMCF_CHFLAGS ,
- /* VM_MOVZX */ VMCF_OP2 ,
- /* VM_MOVSX */ VMCF_OP2 ,
- /* VM_XCHG */ VMCF_OP2 | VMCF_BYTEMODE ,
- /* VM_MUL */ VMCF_OP2 | VMCF_BYTEMODE ,
- /* VM_DIV */ VMCF_OP2 | VMCF_BYTEMODE ,
- /* VM_ADC */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_USEFLAGS | VMCF_CHFLAGS ,
- /* VM_SBB */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_USEFLAGS | VMCF_CHFLAGS ,
- /* VM_PRINT */ VMCF_OP0
-};
diff --git a/src/thirdparty/unrar/rawint.hpp b/src/thirdparty/unrar/rawint.hpp
new file mode 100644
index 000000000..303798886
--- /dev/null
+++ b/src/thirdparty/unrar/rawint.hpp
@@ -0,0 +1,122 @@
+#ifndef _RAR_RAWINT_
+#define _RAR_RAWINT_
+
+#define rotls(x,n,xsize) (((x)<<(n)) | ((x)>>(xsize-(n))))
+#define rotrs(x,n,xsize) (((x)>>(n)) | ((x)<<(xsize-(n))))
+#define rotl32(x,n) rotls(x,n,32)
+#define rotr32(x,n) rotrs(x,n,32)
+
+inline uint RawGet2(const void *Data)
+{
+ byte *D=(byte *)Data;
+ return D[0]+(D[1]<<8);
+}
+
+
+inline uint32 RawGet4(const void *Data)
+{
+#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
+ byte *D=(byte *)Data;
+ return D[0]+(D[1]<<8)+(D[2]<<16)+(D[3]<<24);
+#else
+ return *(uint32 *)Data;
+#endif
+}
+
+
+inline uint64 RawGet8(const void *Data)
+{
+#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
+ byte *D=(byte *)Data;
+ return INT32TO64(RawGet4(D+4),RawGet4(D));
+#else
+ return *(uint64 *)Data;
+#endif
+}
+
+
+inline void RawPut2(uint Field,void *Data)
+{
+ byte *D=(byte *)Data;
+ D[0]=(byte)(Field);
+ D[1]=(byte)(Field>>8);
+}
+
+
+inline void RawPut4(uint32 Field,void *Data)
+{
+#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
+ byte *D=(byte *)Data;
+ D[0]=(byte)(Field);
+ D[1]=(byte)(Field>>8);
+ D[2]=(byte)(Field>>16);
+ D[3]=(byte)(Field>>24);
+#else
+ *(uint32 *)Data=Field;
+#endif
+}
+
+
+inline void RawPut8(uint64 Field,void *Data)
+{
+#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
+ byte *D=(byte *)Data;
+ D[0]=(byte)(Field);
+ D[1]=(byte)(Field>>8);
+ D[2]=(byte)(Field>>16);
+ D[3]=(byte)(Field>>24);
+ D[4]=(byte)(Field>>32);
+ D[5]=(byte)(Field>>40);
+ D[6]=(byte)(Field>>48);
+ D[7]=(byte)(Field>>56);
+#else
+ *(uint64 *)Data=Field;
+#endif
+}
+
+
+#if defined(LITTLE_ENDIAN) && defined(ALLOW_MISALIGNED)
+#define USE_MEM_BYTESWAP
+#endif
+
+// Load 4 big endian bytes from memory and return uint32.
+inline uint32 RawGetBE4(const byte *m)
+{
+#if defined(USE_MEM_BYTESWAP) && defined(_MSC_VER)
+ return _byteswap_ulong(*(uint32 *)m);
+#elif defined(USE_MEM_BYTESWAP) && (__GNUC__ > 3) && (__GNUC_MINOR__ > 2)
+ return __builtin_bswap32(*(uint32 *)m);
+#else
+ return uint32(m[0]<<24) | uint32(m[1]<<16) | uint32(m[2]<<8) | m[3];
+#endif
+}
+
+
+// Save integer to memory as big endian.
+inline void RawPutBE4(uint32 i,byte *mem)
+{
+#if defined(USE_MEM_BYTESWAP) && defined(_MSC_VER)
+ *(uint32*)mem = _byteswap_ulong(i);
+#elif defined(USE_MEM_BYTESWAP) && (__GNUC__ > 3) && (__GNUC_MINOR__ > 2)
+ *(uint32*)mem = __builtin_bswap32(i);
+#else
+ mem[0]=byte(i>>24);
+ mem[1]=byte(i>>16);
+ mem[2]=byte(i>>8);
+ mem[3]=byte(i);
+#endif
+}
+
+
+inline uint32 ByteSwap32(uint32 i)
+{
+#ifdef _MSC_VER
+ return _byteswap_ulong(i);
+#elif (__GNUC__ > 3) && (__GNUC_MINOR__ > 2)
+ return __builtin_bswap32(i);
+#else
+ return (rotl32(i,24)&0xFF00FF00)|(rotl32(i,8)&0x00FF00FF);
+#endif
+}
+
+#endif
diff --git a/src/thirdparty/unrar/rawread.cpp b/src/thirdparty/unrar/rawread.cpp
index 9ae34972b..a6e5fdefb 100644
--- a/src/thirdparty/unrar/rawread.cpp
+++ b/src/thirdparty/unrar/rawread.cpp
@@ -19,16 +19,14 @@ void RawRead::Reset()
Data.SoftReset();
ReadPos=0;
DataSize=0;
-#ifndef SHELL_EXT
Crypt=NULL;
-#endif
}
size_t RawRead::Read(size_t Size)
{
size_t ReadSize=0;
-#if !defined(SHELL_EXT) && !defined(RAR_NOCRYPT)
+#if !defined(RAR_NOCRYPT)
if (Crypt!=NULL)
{
// Full size of buffer with already read data including data read
diff --git a/src/thirdparty/unrar/rawread.hpp b/src/thirdparty/unrar/rawread.hpp
index 646faf79d..b31989872 100644
--- a/src/thirdparty/unrar/rawread.hpp
+++ b/src/thirdparty/unrar/rawread.hpp
@@ -8,9 +8,7 @@ class RawRead
File *SrcFile;
size_t DataSize;
size_t ReadPos;
-#ifndef SHELL_EXT
CryptData *Crypt;
-#endif
public:
RawRead();
RawRead(File *SrcFile);
@@ -35,71 +33,9 @@ class RawRead
void SetPos(size_t Pos) {ReadPos=Pos;}
void Skip(size_t Size) {ReadPos+=Size;}
void Rewind() {SetPos(0);}
-#ifndef SHELL_EXT
void SetCrypt(CryptData *Crypt) {RawRead::Crypt=Crypt;}
-#endif
};
uint64 RawGetV(const byte *Data,uint &ReadPos,uint DataSize,bool &Overflow);
-inline uint RawGet2(const void *Data)
-{
- byte *D=(byte *)Data;
- return D[0]+(D[1]<<8);
-}
-
-inline uint RawGet4(const void *Data)
-{
- byte *D=(byte *)Data;
-#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED) || !defined(PRESENT_INT32)
- return D[0]+(D[1]<<8)+(D[2]<<16)+(D[3]<<24);
-#else
- return GET_UINT32(*(uint32 *)D);
-#endif
-}
-
-inline uint64 RawGet8(const void *Data)
-{
- byte *D=(byte *)Data;
- return INT32TO64(RawGet4(D+4),RawGet4(D));
-}
-
-
-// We need these "put" functions also in UnRAR code. This is why they are
-// in rawread.hpp file even though they are "write" functions.
-inline void RawPut2(uint Field,void *Data)
-{
- byte *D=(byte *)Data;
- D[0]=(byte)(Field);
- D[1]=(byte)(Field>>8);
-}
-
-
-inline void RawPut4(uint Field,void *Data)
-{
- byte *D=(byte *)Data;
-#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED) || !defined(PRESENT_INT32)
- D[0]=(byte)(Field);
- D[1]=(byte)(Field>>8);
- D[2]=(byte)(Field>>16);
- D[3]=(byte)(Field>>24);
-#else
- *(uint32 *)D=Field;
-#endif
-}
-
-
-inline void RawPut8(uint64 Field,void *Data)
-{
- byte *D=(byte *)Data;
- D[0]=(byte)(Field);
- D[1]=(byte)(Field>>8);
- D[2]=(byte)(Field>>16);
- D[3]=(byte)(Field>>24);
- D[4]=(byte)(Field>>32);
- D[5]=(byte)(Field>>40);
- D[6]=(byte)(Field>>48);
- D[7]=(byte)(Field>>56);
-}
-
#endif
diff --git a/src/thirdparty/unrar/rdwrfn.cpp b/src/thirdparty/unrar/rdwrfn.cpp
index 50c715d3c..5d2598e40 100644
--- a/src/thirdparty/unrar/rdwrfn.cpp
+++ b/src/thirdparty/unrar/rdwrfn.cpp
@@ -2,6 +2,10 @@
ComprDataIO::ComprDataIO()
{
+#ifndef RAR_NOCRYPT
+ Crypt=new CryptData;
+ Decrypt=new CryptData;
+#endif
Init();
}
@@ -33,6 +37,13 @@ void ComprDataIO::Init()
}
+ComprDataIO::~ComprDataIO()
+{
+#ifndef RAR_NOCRYPT
+ delete Crypt;
+ delete Decrypt;
+#endif
+}
@@ -127,7 +138,7 @@ int ComprDataIO::UnpRead(byte *Addr,size_t Count)
ReadSize=TotalRead;
#ifndef RAR_NOCRYPT
if (Decryption)
- Decrypt.DecryptBlock(Addr,ReadSize);
+ Decrypt->DecryptBlock(Addr,ReadSize);
#endif
}
Wait();
@@ -269,13 +280,13 @@ void ComprDataIO::GetUnpackedData(byte **Data,size_t *Size)
void ComprDataIO::SetEncryption(bool Encrypt,CRYPT_METHOD Method,
SecPassword *Password,const byte *Salt,const byte *InitV,
- uint Lg2Cnt,byte *PswCheck,byte *HashKey)
+ uint Lg2Cnt,byte *HashKey,byte *PswCheck)
{
#ifndef RAR_NOCRYPT
if (Encrypt)
- Encryption=Crypt.SetCryptKeys(true,Method,Password,Salt,InitV,Lg2Cnt,HashKey,PswCheck);
+ Encryption=Crypt->SetCryptKeys(true,Method,Password,Salt,InitV,Lg2Cnt,HashKey,PswCheck);
else
- Decryption=Decrypt.SetCryptKeys(false,Method,Password,Salt,InitV,Lg2Cnt,HashKey,PswCheck);
+ Decryption=Decrypt->SetCryptKeys(false,Method,Password,Salt,InitV,Lg2Cnt,HashKey,PswCheck);
#endif
}
@@ -284,7 +295,7 @@ void ComprDataIO::SetEncryption(bool Encrypt,CRYPT_METHOD Method,
void ComprDataIO::SetAV15Encryption()
{
Decryption=true;
- Decrypt.SetAV15Encryption();
+ Decrypt->SetAV15Encryption();
}
#endif
@@ -293,7 +304,7 @@ void ComprDataIO::SetAV15Encryption()
void ComprDataIO::SetCmt13Encryption()
{
Decryption=true;
- Decrypt.SetCmt13Encryption();
+ Decrypt->SetCmt13Encryption();
}
#endif
diff --git a/src/thirdparty/unrar/rdwrfn.hpp b/src/thirdparty/unrar/rdwrfn.hpp
index c61128d77..b59d56247 100644
--- a/src/thirdparty/unrar/rdwrfn.hpp
+++ b/src/thirdparty/unrar/rdwrfn.hpp
@@ -4,6 +4,10 @@
class CmdAdd;
class Unpack;
+#if 0
+// We use external i/o calls for Benchmark command.
+#define COMPRDATAIO_EXTIO
+#endif
class ComprDataIO
{
@@ -38,8 +42,8 @@ class ComprDataIO
int64 *SubHeadPos;
#ifndef RAR_NOCRYPT
- CryptData Crypt;
- CryptData Decrypt;
+ CryptData *Crypt;
+ CryptData *Decrypt;
#endif
@@ -49,6 +53,7 @@ class ComprDataIO
public:
ComprDataIO();
+ ~ComprDataIO();
void Init();
int UnpRead(byte *Addr,size_t Count);
void UnpWrite(byte *Addr,size_t Count);
@@ -61,7 +66,7 @@ class ComprDataIO
void SetCommand(CmdAdd *Cmd) {Command=Cmd;}
void SetSubHeader(FileHeader *hd,int64 *Pos) {SubHead=hd;SubHeadPos=Pos;}
void SetEncryption(bool Encrypt,CRYPT_METHOD Method,SecPassword *Password,
- const byte *Salt,const byte *InitV,uint Lg2Cnt,byte *PswCheck,byte *HashKey);
+ const byte *Salt,const byte *InitV,uint Lg2Cnt,byte *HashKey,byte *PswCheck);
void SetAV15Encryption();
void SetCmt13Encryption();
void SetUnpackToMemory(byte *Addr,uint Size);
diff --git a/src/thirdparty/unrar/recvol.cpp b/src/thirdparty/unrar/recvol.cpp
index beb2ce57f..166eef4f7 100644
--- a/src/thirdparty/unrar/recvol.cpp
+++ b/src/thirdparty/unrar/recvol.cpp
@@ -31,12 +31,81 @@ bool RecVolumesRestore(RAROptions *Cmd,const wchar *Name,bool Silent)
// handling exceptions. So it can close and delete files on Cancel.
if (Fmt==RARFMT15)
{
- RecVolumes3 RecVol;
+ RecVolumes3 RecVol(false);
return RecVol.Restore(Cmd,Name,Silent);
}
else
{
- RecVolumes5 RecVol;
+ RecVolumes5 RecVol(false);
return RecVol.Restore(Cmd,Name,Silent);
}
}
+
+
+void RecVolumesTest(RAROptions *Cmd,Archive *Arc,const wchar *Name)
+{
+ wchar RevName[NM];
+ *RevName=0;
+ if (Arc!=NULL)
+ {
+ // We received .rar or .exe volume as a parameter, trying to find
+ // the matching .rev file number 1.
+ bool NewNumbering=Arc->NewNumbering;
+
+ wchar ArcName[NM];
+ wcsncpyz(ArcName,Name,ASIZE(ArcName));
+
+ wchar *VolNumStart=VolNameToFirstName(ArcName,ArcName,ASIZE(ArcName),NewNumbering);
+ wchar RecVolMask[NM];
+ wcsncpyz(RecVolMask,ArcName,ASIZE(RecVolMask));
+ size_t BaseNamePartLength=VolNumStart-ArcName;
+ wcsncpyz(RecVolMask+BaseNamePartLength,L"*.rev",ASIZE(RecVolMask)-BaseNamePartLength);
+
+ FindFile Find;
+ Find.SetMask(RecVolMask);
+ FindData RecData;
+
+ while (Find.Next(&RecData))
+ {
+ wchar *Num=GetVolNumPart(RecData.Name);
+ if (*Num!='1') // Name must have "0...01" numeric part.
+ continue;
+ bool FirstVol=true;
+ while (--Num>=RecData.Name && IsDigit(*Num))
+ if (*Num!='0')
+ {
+ FirstVol=false;
+ break;
+ }
+ if (FirstVol)
+ {
+ wcsncpyz(RevName,RecData.Name,ASIZE(RevName));
+ Name=RevName;
+ break;
+ }
+ }
+ if (*RevName==0) // First .rev file not found.
+ return;
+ }
+
+ File RevFile;
+ if (!RevFile.Open(Name))
+ {
+ ErrHandler.OpenErrorMsg(Name); // It also sets RARX_OPEN.
+ return;
+ }
+ mprintf(L"\n");
+ byte Sign[REV5_SIGN_SIZE];
+ bool Rev5=RevFile.Read(Sign,REV5_SIGN_SIZE)==REV5_SIGN_SIZE && memcmp(Sign,REV5_SIGN,REV5_SIGN_SIZE)==0;
+ RevFile.Close();
+ if (Rev5)
+ {
+ RecVolumes5 RecVol(true);
+ RecVol.Test(Cmd,Name);
+ }
+ else
+ {
+ RecVolumes3 RecVol(true);
+ RecVol.Test(Cmd,Name);
+ }
+}
diff --git a/src/thirdparty/unrar/recvol.hpp b/src/thirdparty/unrar/recvol.hpp
index 5956d7bbb..7f2f1adb9 100644
--- a/src/thirdparty/unrar/recvol.hpp
+++ b/src/thirdparty/unrar/recvol.hpp
@@ -14,10 +14,11 @@ class RecVolumes3
ThreadPool *RSThreadPool;
#endif
public:
- RecVolumes3();
+ RecVolumes3(bool TestOnly);
~RecVolumes3();
void Make(RAROptions *Cmd,wchar *ArcName);
bool Restore(RAROptions *Cmd,const wchar *Name,bool Silent);
+ void Test(RAROptions *Cmd,const wchar *Name);
};
@@ -74,11 +75,13 @@ class RecVolumes5
public: // 'public' only because called from thread functions.
void ProcessAreaRS(RecRSThreadData *td);
public:
- RecVolumes5();
+ RecVolumes5(bool TestOnly);
~RecVolumes5();
bool Restore(RAROptions *Cmd,const wchar *Name,bool Silent);
+ void Test(RAROptions *Cmd,const wchar *Name);
};
bool RecVolumesRestore(RAROptions *Cmd,const wchar *Name,bool Silent);
+void RecVolumesTest(RAROptions *Cmd,Archive *Arc,const wchar *Name);
#endif
diff --git a/src/thirdparty/unrar/recvol3.cpp b/src/thirdparty/unrar/recvol3.cpp
index 3c77eba37..0d18f079b 100644
--- a/src/thirdparty/unrar/recvol3.cpp
+++ b/src/thirdparty/unrar/recvol3.cpp
@@ -1,5 +1,3 @@
-#include "rar.hpp"
-
// Buffer size for all volumes involved.
static const size_t TotalBufferSize=0x4000000;
@@ -38,13 +36,23 @@ THREAD_PROC(RSDecodeThread)
}
#endif
-RecVolumes3::RecVolumes3()
+RecVolumes3::RecVolumes3(bool TestOnly)
{
- Buf.Alloc(TotalBufferSize);
memset(SrcFile,0,sizeof(SrcFile));
+ if (TestOnly)
+ {
#ifdef RAR_SMP
- RSThreadPool=CreateThreadPool();
+ RSThreadPool=NULL;
#endif
+ }
+ else
+ {
+ Buf.Alloc(TotalBufferSize);
+ memset(SrcFile,0,sizeof(SrcFile));
+#ifdef RAR_SMP
+ RSThreadPool=CreateThreadPool();
+#endif
+ }
}
@@ -74,26 +82,34 @@ void RSEncode::EncodeBuf()
}
+// Check for names like arc5_3_1.rev created by RAR 3.0.
+static bool IsNewStyleRev(const wchar *Name)
+{
+ wchar *Ext=GetExt(Name);
+ if (Ext==NULL)
+ return true;
+ int DigitGroup=0;
+ for (Ext--;Ext>Name;Ext--)
+ if (!IsDigit(*Ext))
+ if (*Ext=='_' && IsDigit(*(Ext-1)))
+ DigitGroup++;
+ else
+ break;
+ return DigitGroup<2;
+}
+
+
bool RecVolumes3::Restore(RAROptions *Cmd,const wchar *Name,bool Silent)
{
wchar ArcName[NM];
wcsncpyz(ArcName,Name,ASIZE(ArcName));
wchar *Ext=GetExt(ArcName);
- bool NewStyle=false;
+ bool NewStyle=false; // New style .rev volumes are supported since RAR 3.10.
bool RevName=Ext!=NULL && wcsicomp(Ext,L".rev")==0;
if (RevName)
{
- for (int DigitGroup=0;Ext>ArcName && DigitGroup<3;Ext--)
- if (!IsDigit(*Ext))
- if (IsDigit(*(Ext-1)) && (*Ext=='_' || DigitGroup<2))
- DigitGroup++;
- else
- if (DigitGroup<2)
- {
- NewStyle=true;
- break;
- }
- while (IsDigit(*Ext) && Ext>ArcName+1)
+ NewStyle=IsNewStyleRev(ArcName);
+ while (Ext>ArcName+1 && (IsDigit(*(Ext-1)) || *(Ext-1)=='_'))
Ext--;
wcscpy(Ext,L"*.*");
@@ -340,10 +356,8 @@ bool RecVolumes3::Restore(RAROptions *Cmd,const wchar *Name,bool Silent)
Erasures[EraSize++]=I;
int64 ProcessedSize=0;
-#ifndef GUI
int LastPercent=-1;
mprintf(L" ");
-#endif
// Size of per file buffer.
size_t RecBufferSize=TotalBufferSize/TotalFiles;
@@ -458,7 +472,7 @@ bool RecVolumes3::Restore(RAROptions *Cmd,const wchar *Name,bool Silent)
}
}
}
-#if !defined(GUI) && !defined(SILENT)
+#if !defined(SILENT)
if (!Cmd->DisablePercentage)
mprintf(L"\b\b\b\b100%%");
if (!Silent && !Cmd->DisableDone)
@@ -480,3 +494,50 @@ void RSEncode::DecodeBuf()
Buf[Erasures[I]*RecBufferSize+BufPos]=Data[Erasures[I]];
}
}
+
+
+void RecVolumes3::Test(RAROptions *Cmd,const wchar *Name)
+{
+ if (!IsNewStyleRev(Name)) // RAR 3.0 name#_#_#.rev do not include CRC32.
+ {
+ ErrHandler.UnknownMethodMsg(Name,Name);
+ return;
+ }
+
+ wchar VolName[NM];
+ wcsncpyz(VolName,Name,ASIZE(VolName));
+
+ while (FileExist(VolName))
+ {
+ File CurFile;
+ if (!CurFile.Open(VolName))
+ {
+ ErrHandler.OpenErrorMsg(VolName); // It also sets RARX_OPEN.
+ continue;
+ }
+ if (!uiStartFileExtract(VolName,false,true,false))
+ return;
+ mprintf(St(MExtrTestFile),VolName);
+ mprintf(L" ");
+ CurFile.Seek(0,SEEK_END);
+ int64 Length=CurFile.Tell();
+ CurFile.Seek(Length-4,SEEK_SET);
+ uint FileCRC=0;
+ for (int I=0;I<4;I++)
+ FileCRC|=CurFile.GetByte()<<(I*8);
+
+ uint CalcCRC;
+ CalcFileSum(&CurFile,&CalcCRC,NULL,1,Length-4,Cmd->DisablePercentage ? 0 : CALCFSUM_SHOWPROGRESS);
+ if (FileCRC==CalcCRC)
+ {
+ mprintf(L"%s%s ",L"\b\b\b\b\b ",St(MOk));
+ }
+ else
+ {
+ uiMsg(UIERROR_CHECKSUM,VolName,VolName);
+ ErrHandler.SetErrorCode(RARX_CRC);
+ }
+
+ NextVolumeName(VolName,ASIZE(VolName),false);
+ }
+}
diff --git a/src/thirdparty/unrar/recvol5.cpp b/src/thirdparty/unrar/recvol5.cpp
index 4cb0fc72d..8272b070a 100644
--- a/src/thirdparty/unrar/recvol5.cpp
+++ b/src/thirdparty/unrar/recvol5.cpp
@@ -1,9 +1,8 @@
-#include "rar.hpp"
-
static const uint MaxVolumes=65535;
-RecVolumes5::RecVolumes5()
+RecVolumes5::RecVolumes5(bool TestOnly)
{
+ RealBuf=NULL;
RealReadBuffer=NULL;
DataCount=0;
@@ -16,13 +15,21 @@ RecVolumes5::RecVolumes5()
ThreadData[I].RecRSPtr=this;
ThreadData[I].RS=NULL;
}
+
+ if (TestOnly)
+ {
#ifdef RAR_SMP
- RecThreadPool=CreateThreadPool();
+ RecThreadPool=NULL;
#endif
-
- RealBuf=NULL; // Might be needed in case of exception.
- RealBuf=new byte[TotalBufferSize+SSE_ALIGNMENT];
- Buf=(byte *)ALIGN_VALUE(RealBuf,SSE_ALIGNMENT);
+ }
+ else
+ {
+#ifdef RAR_SMP
+ RecThreadPool=CreateThreadPool();
+#endif
+ RealBuf=new byte[TotalBufferSize+SSE_ALIGNMENT];
+ Buf=(byte *)ALIGN_VALUE(RealBuf,SSE_ALIGNMENT);
+ }
}
@@ -129,7 +136,7 @@ void RecVolumes5::ProcessAreaRS(RecRSThreadData *td)
bool RecVolumes5::Restore(RAROptions *Cmd,const wchar *Name,bool Silent)
{
wchar ArcName[NM];
- wcscpy(ArcName,Name);
+ wcsncpyz(ArcName,Name,ASIZE(ArcName));
wchar *Num=GetVolNumPart(ArcName);
while (Num>ArcName && IsDigit(*(Num-1)))
@@ -288,7 +295,7 @@ bool RecVolumes5::Restore(RAROptions *Cmd,const wchar *Name,bool Silent)
Item->f=NULL;
}
- if (Item->New=(Item->f==NULL))
+ if ((Item->New=(Item->f==NULL))) // Additional parentheses to avoid GCC warning.
{
wcsncpyz(Item->Name,FirstVolName,ASIZE(Item->Name));
uiMsg(UIMSG_CREATING,Item->Name);
@@ -310,10 +317,8 @@ bool RecVolumes5::Restore(RAROptions *Cmd,const wchar *Name,bool Silent)
int64 ProcessedSize=0;
-#ifndef GUI
int LastPercent=-1;
mprintf(L" ");
-#endif
// Even though we already preliminary calculated missing volume number,
// let's do it again now, when we have the final and exact information.
@@ -339,7 +344,11 @@ bool RecVolumes5::Restore(RAROptions *Cmd,const wchar *Name,bool Silent)
RSCoder16 RS;
if (!RS.Init(DataCount,RecCount,ValidFlags))
+ {
+ delete[] ValidFlags;
+ delete[] Data;
return false; // Should not happen, we check parameter validity above.
+ }
RealReadBuffer=new byte[RecBufferSize+SSE_ALIGNMENT];
byte *ReadBuf=(byte *)ALIGN_VALUE(RealReadBuffer,SSE_ALIGNMENT);
@@ -401,7 +410,7 @@ bool RecVolumes5::Restore(RAROptions *Cmd,const wchar *Name,bool Silent)
delete[] ValidFlags;
delete[] Data;
-#if !defined(GUI) && !defined(SILENT)
+#if !defined(SILENT)
if (!Cmd->DisablePercentage)
mprintf(L"\b\b\b\b100%%");
if (!Silent && !Cmd->DisableDone)
@@ -462,3 +471,47 @@ uint RecVolumes5::ReadHeader(File *RecFile,bool FirstRev)
return RecNum;
}
+
+
+void RecVolumes5::Test(RAROptions *Cmd,const wchar *Name)
+{
+ wchar VolName[NM];
+ wcsncpyz(VolName,Name,ASIZE(VolName));
+
+ uint FoundRecVolumes=0;
+ while (FileExist(VolName))
+ {
+ File CurFile;
+ if (!CurFile.Open(VolName))
+ {
+ ErrHandler.OpenErrorMsg(VolName); // It also sets RARX_OPEN.
+ continue;
+ }
+ if (!uiStartFileExtract(VolName,false,true,false))
+ return;
+ mprintf(St(MExtrTestFile),VolName);
+ mprintf(L" ");
+ bool Valid=false;
+ uint RecNum=ReadHeader(&CurFile,FoundRecVolumes==0);
+ if (RecNum!=0)
+ {
+ FoundRecVolumes++;
+
+ uint RevCRC;
+ CalcFileSum(&CurFile,&RevCRC,NULL,1,INT64NDF,CALCFSUM_CURPOS|(Cmd->DisablePercentage ? 0 : CALCFSUM_SHOWPROGRESS));
+ Valid=RevCRC==RecItems[RecNum].CRC;
+ }
+
+ if (Valid)
+ {
+ mprintf(L"%s%s ",L"\b\b\b\b\b ",St(MOk));
+ }
+ else
+ {
+ uiMsg(UIERROR_CHECKSUM,VolName,VolName);
+ ErrHandler.SetErrorCode(RARX_CRC);
+ }
+
+ NextVolumeName(VolName,ASIZE(VolName),false);
+ }
+}
diff --git a/src/thirdparty/unrar/rijndael.cpp b/src/thirdparty/unrar/rijndael.cpp
index fa4f58849..a091423fe 100644
--- a/src/thirdparty/unrar/rijndael.cpp
+++ b/src/thirdparty/unrar/rijndael.cpp
@@ -19,7 +19,7 @@ static byte U1[256][4],U2[256][4],U3[256][4],U4[256][4];
inline void Xor128(void *dest,const void *arg1,const void *arg2)
{
-#if defined(PRESENT_INT32) && defined(ALLOW_MISALIGNED)
+#ifdef ALLOW_MISALIGNED
((uint32*)dest)[0]=((uint32*)arg1)[0]^((uint32*)arg2)[0];
((uint32*)dest)[1]=((uint32*)arg1)[1]^((uint32*)arg2)[1];
((uint32*)dest)[2]=((uint32*)arg1)[2]^((uint32*)arg2)[2];
@@ -34,7 +34,7 @@ inline void Xor128(void *dest,const void *arg1,const void *arg2)
inline void Xor128(byte *dest,const byte *arg1,const byte *arg2,
const byte *arg3,const byte *arg4)
{
-#if defined(PRESENT_INT32) && defined(ALLOW_MISALIGNED)
+#ifdef ALLOW_MISALIGNED
(*(uint32*)dest)=(*(uint32*)arg1)^(*(uint32*)arg2)^(*(uint32*)arg3)^(*(uint32*)arg4);
#else
for (int I=0;I<4;I++)
@@ -45,7 +45,7 @@ inline void Xor128(byte *dest,const byte *arg1,const byte *arg2,
inline void Copy128(byte *dest,const byte *src)
{
-#if defined(PRESENT_INT32) && defined(ALLOW_MISALIGNED)
+#ifdef ALLOW_MISALIGNED
((uint32*)dest)[0]=((uint32*)src)[0];
((uint32*)dest)[1]=((uint32*)src)[1];
((uint32*)dest)[2]=((uint32*)src)[2];
@@ -113,6 +113,103 @@ void Rijndael::Init(bool Encrypt,const byte *key,uint keyLen,const byte * initVe
keyEncToDec();
}
+void Rijndael::blockEncrypt(const byte *input,size_t inputLen,byte *outBuffer)
+{
+ if (inputLen <= 0)
+ return;
+
+ size_t numBlocks = inputLen/16;
+#ifdef USE_SSE
+ if (AES_NI)
+ {
+ blockEncryptSSE(input,numBlocks,outBuffer);
+ return;
+ }
+#endif
+
+ byte *prevBlock = m_initVector;
+ for(size_t i = numBlocks;i > 0;i--)
+ {
+ byte block[16];
+ if (CBCMode)
+ Xor128(block,prevBlock,input);
+ else
+ Copy128(block,input);
+
+ byte temp[4][4];
+
+ Xor128(temp,block,m_expandedKey[0]);
+ Xor128(outBuffer, T1[temp[0][0]],T2[temp[1][1]],T3[temp[2][2]],T4[temp[3][3]]);
+ Xor128(outBuffer+4, T1[temp[1][0]],T2[temp[2][1]],T3[temp[3][2]],T4[temp[0][3]]);
+ Xor128(outBuffer+8, T1[temp[2][0]],T2[temp[3][1]],T3[temp[0][2]],T4[temp[1][3]]);
+ Xor128(outBuffer+12,T1[temp[3][0]],T2[temp[0][1]],T3[temp[1][2]],T4[temp[2][3]]);
+
+ for(int r = 1; r < m_uRounds-1; r++)
+ {
+ Xor128(temp,outBuffer,m_expandedKey[r]);
+ Xor128(outBuffer, T1[temp[0][0]],T2[temp[1][1]],T3[temp[2][2]],T4[temp[3][3]]);
+ Xor128(outBuffer+4, T1[temp[1][0]],T2[temp[2][1]],T3[temp[3][2]],T4[temp[0][3]]);
+ Xor128(outBuffer+8, T1[temp[2][0]],T2[temp[3][1]],T3[temp[0][2]],T4[temp[1][3]]);
+ Xor128(outBuffer+12,T1[temp[3][0]],T2[temp[0][1]],T3[temp[1][2]],T4[temp[2][3]]);
+ }
+ Xor128(temp,outBuffer,m_expandedKey[m_uRounds-1]);
+ outBuffer[ 0] = T1[temp[0][0]][1];
+ outBuffer[ 1] = T1[temp[1][1]][1];
+ outBuffer[ 2] = T1[temp[2][2]][1];
+ outBuffer[ 3] = T1[temp[3][3]][1];
+ outBuffer[ 4] = T1[temp[1][0]][1];
+ outBuffer[ 5] = T1[temp[2][1]][1];
+ outBuffer[ 6] = T1[temp[3][2]][1];
+ outBuffer[ 7] = T1[temp[0][3]][1];
+ outBuffer[ 8] = T1[temp[2][0]][1];
+ outBuffer[ 9] = T1[temp[3][1]][1];
+ outBuffer[10] = T1[temp[0][2]][1];
+ outBuffer[11] = T1[temp[1][3]][1];
+ outBuffer[12] = T1[temp[3][0]][1];
+ outBuffer[13] = T1[temp[0][1]][1];
+ outBuffer[14] = T1[temp[1][2]][1];
+ outBuffer[15] = T1[temp[2][3]][1];
+ Xor128(outBuffer,outBuffer,m_expandedKey[m_uRounds]);
+ prevBlock=outBuffer;
+
+ outBuffer += 16;
+ input += 16;
+ }
+ Copy128(m_initVector,prevBlock);
+}
+
+
+#ifdef USE_SSE
+void Rijndael::blockEncryptSSE(const byte *input,size_t numBlocks,byte *outBuffer)
+{
+ __m128i v = _mm_loadu_si128((__m128i*)m_initVector);
+ __m128i *src=(__m128i*)input;
+ __m128i *dest=(__m128i*)outBuffer;
+ __m128i *rkey=(__m128i*)m_expandedKey;
+ while (numBlocks > 0)
+ {
+ __m128i d = _mm_loadu_si128(src++);
+ if (CBCMode)
+ v = _mm_xor_si128(v, d);
+ else
+ v = d;
+ __m128i r0 = _mm_loadu_si128(rkey);
+ v = _mm_xor_si128(v, r0);
+
+ for (int i=1; i<m_uRounds; i++)
+ {
+ __m128i ri = _mm_loadu_si128(rkey + i);
+ v = _mm_aesenc_si128(v, ri);
+ }
+
+ __m128i rl = _mm_loadu_si128(rkey + m_uRounds);
+ v = _mm_aesenclast_si128(v, rl);
+ _mm_storeu_si128(dest++,v);
+ numBlocks--;
+ }
+ _mm_storeu_si128((__m128i*)m_initVector,v);
+}
+#endif
void Rijndael::blockDecrypt(const byte *input, size_t inputLen, byte *outBuffer)
diff --git a/src/thirdparty/unrar/rs16.cpp b/src/thirdparty/unrar/rs16.cpp
index 082ab83f4..f23cff857 100644
--- a/src/thirdparty/unrar/rs16.cpp
+++ b/src/thirdparty/unrar/rs16.cpp
@@ -215,6 +215,7 @@ void RSCoder16::InvertDecoderMatrix()
}
+#if 0
// Multiply matrix to data vector. When encoding, it contains data in Data
// and stores error correction codes in Out. When decoding it contains
// broken data followed by ECC in Data and stores recovered data to Out.
@@ -252,6 +253,7 @@ void RSCoder16::Process(const uint *Data, uint *Out)
Out[I] = R;
}
}
+#endif
// We update ECC in blocks by applying every data block to all ECC blocks.
@@ -311,6 +313,7 @@ void RSCoder16::UpdateECC(uint DataNum, uint ECCNum, const byte *Data, byte *ECC
#ifdef USE_SSE
// Data and ECC addresses must be properly aligned for SSE.
+// AVX2 did not provide a noticeable speed gain on i7-6700K here.
bool RSCoder16::SSE_UpdateECC(uint DataNum, uint ECCNum, const byte *Data, byte *ECC, size_t BlockSize)
{
// Check data alignment and SSSE3 support.
diff --git a/src/thirdparty/unrar/rs16.hpp b/src/thirdparty/unrar/rs16.hpp
index ba518ac1d..b67a7ca86 100644
--- a/src/thirdparty/unrar/rs16.hpp
+++ b/src/thirdparty/unrar/rs16.hpp
@@ -35,7 +35,9 @@ class RSCoder16
~RSCoder16();
bool Init(uint DataCount, uint RecCount, bool *ValidityFlags);
+#if 0 // We use only UpdateECC now.
void Process(const uint *Data, uint *Out);
+#endif
void UpdateECC(uint DataNum, uint ECCNum, const byte *Data, byte *ECC, size_t BlockSize);
};
diff --git a/src/thirdparty/unrar/scantree.cpp b/src/thirdparty/unrar/scantree.cpp
index 40e4e47c9..841a1e924 100644
--- a/src/thirdparty/unrar/scantree.cpp
+++ b/src/thirdparty/unrar/scantree.cpp
@@ -8,6 +8,7 @@ ScanTree::ScanTree(StringList *FileMasks,RECURSE_MODE Recurse,bool GetLinks,SCAN
ScanTree::GetDirs=GetDirs;
ScanEntireDisk=false;
+ FolderWildcards=false;
SetAllMaskDepth=0;
*CurMask=0;
@@ -16,6 +17,8 @@ ScanTree::ScanTree(StringList *FileMasks,RECURSE_MODE Recurse,bool GetLinks,SCAN
Errors=0;
*ErrArcName=0;
Cmd=NULL;
+ ErrDirList=NULL;
+ ErrDirSpecPathLength=NULL;
}
@@ -27,11 +30,14 @@ ScanTree::~ScanTree()
}
-SCAN_CODE ScanTree::GetNext(FindData *FindData)
+SCAN_CODE ScanTree::GetNext(FindData *FD)
{
if (Depth<0)
return SCAN_DONE;
+#ifndef SILENT
+ uint LoopCount=0;
+#endif
SCAN_CODE FindCode;
while (1)
@@ -39,8 +45,15 @@ SCAN_CODE ScanTree::GetNext(FindData *FindData)
if (*CurMask==0 && !GetNextMask())
return SCAN_DONE;
+#ifndef SILENT
+ // Let's return some ticks to system or WinRAR can become irresponsible
+ // while scanning files in command like "winrar a -r arc c:\file.ext".
+ // Also we reset system sleep timer here.
+ if ((++LoopCount & 0x3ff)==0)
+ Wait();
+#endif
- FindCode=FindProc(FindData);
+ FindCode=FindProc(FD);
if (FindCode==SCAN_ERROR)
{
Errors++;
@@ -48,21 +61,151 @@ SCAN_CODE ScanTree::GetNext(FindData *FindData)
}
if (FindCode==SCAN_NEXT)
continue;
- if (FindCode==SCAN_SUCCESS && FindData->IsDir && GetDirs==SCAN_SKIPDIRS)
+ if (FindCode==SCAN_SUCCESS && FD->IsDir && GetDirs==SCAN_SKIPDIRS)
continue;
if (FindCode==SCAN_DONE && GetNextMask())
continue;
+ if (FilterList.ItemsCount()>0 && FindCode==SCAN_SUCCESS)
+ if (!CommandData::CheckArgs(&FilterList,FD->IsDir,FD->Name,false,MATCH_WILDSUBPATH))
+ continue;
break;
}
- return(FindCode);
+ return FindCode;
}
-bool ScanTree::GetNextMask()
+// For masks like dir1\dir2*\*.ext in non-recursive mode.
+bool ScanTree::ExpandFolderMask()
{
+ bool WildcardFound=false;
+ uint SlashPos=0;
+ for (int I=0;CurMask[I]!=0;I++)
+ {
+ if (CurMask[I]=='?' || CurMask[I]=='*')
+ WildcardFound=true;
+ if (WildcardFound && IsPathDiv(CurMask[I]))
+ {
+ // First path separator position after folder wildcard mask.
+ // In case of dir1\dir2*\dir3\name.ext mask it may point not to file
+ // name, so we cannot use PointToName() here.
+ SlashPos=I;
+ break;
+ }
+ }
+
+ wchar Mask[NM];
+ wcsncpyz(Mask,CurMask,ASIZE(Mask));
+ Mask[SlashPos]=0;
+
+ // Prepare the list of all folders matching the wildcard mask.
+ ExpandedFolderList.Reset();
+ FindFile Find;
+ Find.SetMask(Mask);
+ FindData FD;
+ while (Find.Next(&FD))
+ if (FD.IsDir)
+ {
+ wcsncatz(FD.Name,CurMask+SlashPos,ASIZE(FD.Name));
+
+ // Treat dir*\* or dir*\*.* as dir, so empty 'dir' is also matched
+ // by such mask. Skipping empty dir with dir*\*.* confused some users.
+ wchar *LastMask=PointToName(FD.Name);
+ if (wcscmp(LastMask,L"*")==0 || wcscmp(LastMask,L"*.*")==0)
+ RemoveNameFromPath(FD.Name);
+
+ ExpandedFolderList.AddString(FD.Name);
+ }
+ if (ExpandedFolderList.ItemsCount()==0)
+ return false;
+ // Return the first matching folder name now.
+ ExpandedFolderList.GetString(CurMask,ASIZE(CurMask));
+ return true;
+}
+
+
+// For masks like dir1\dir2*\file.ext this function sets 'dir1' recursive mask
+// and '*\dir2*\file.ext' filter. Masks without folder wildcards are
+// returned as is.
+bool ScanTree::GetFilteredMask()
+{
+ // If we have some matching folders left for non-recursive folder wildcard
+ // mask, we return it here.
+ if (ExpandedFolderList.ItemsCount()>0 && ExpandedFolderList.GetString(CurMask,ASIZE(CurMask)))
+ return true;
+
+ FolderWildcards=false;
+ FilterList.Reset();
if (!FileMasks->GetString(CurMask,ASIZE(CurMask)))
return false;
- CurMask[ASIZE(CurMask)-1]=0;
+
+ // Check if folder wildcards present.
+ bool WildcardFound=false;
+ uint FolderWildcardCount=0;
+ uint SlashPos=0;
+ for (int I=0;CurMask[I]!=0;I++)
+ {
+ if (CurMask[I]=='?' || CurMask[I]=='*')
+ WildcardFound=true;
+ if (IsPathDiv(CurMask[I]) || IsDriveDiv(CurMask[I]))
+ {
+ if (WildcardFound)
+ {
+ // Calculate a number of folder wildcards in current mask.
+ FolderWildcardCount++;
+ WildcardFound=false;
+ }
+ if (FolderWildcardCount==0)
+ SlashPos=I; // Slash position before first folder wildcard mask.
+ }
+ }
+ if (FolderWildcardCount==0)
+ return true;
+ FolderWildcards=true; // Global folder wildcards flag.
+
+ // If we have only one folder wildcard component and -r is missing or -r-
+ // is specified, prepare matching folders in non-recursive mode.
+ // We assume -r for masks like dir1*\dir2*\file*, because it is complicated
+ // to fast find them using OS file find API call.
+ if ((Recurse==RECURSE_NONE || Recurse==RECURSE_DISABLE) && FolderWildcardCount==1)
+ return ExpandFolderMask();
+
+ wchar Filter[NM];
+ // Convert path\dir*\ to *\dir filter to search for 'dir' in all 'path' subfolders.
+ wcscpy(Filter,L"*");
+ AddEndSlash(Filter,ASIZE(Filter));
+ // SlashPos might point or not point to path separator for masks like 'dir*', '\dir*' or 'd:dir*'
+ wchar *WildName=IsPathDiv(CurMask[SlashPos]) || IsDriveDiv(CurMask[SlashPos]) ? CurMask+SlashPos+1 : CurMask+SlashPos;
+ wcsncatz(Filter,WildName,ASIZE(Filter));
+
+ // Treat dir*\* or dir*\*.* as dir\, so empty 'dir' is also matched
+ // by such mask. Skipping empty dir with dir*\*.* confused some users.
+ wchar *LastMask=PointToName(Filter);
+ if (wcscmp(LastMask,L"*")==0 || wcscmp(LastMask,L"*.*")==0)
+ *LastMask=0;
+
+ FilterList.AddString(Filter);
+
+ bool RelativeDrive=IsDriveDiv(CurMask[SlashPos]);
+ if (RelativeDrive)
+ SlashPos++; // Use "d:" instead of "d" for d:* mask.
+
+ CurMask[SlashPos]=0;
+
+ if (!RelativeDrive) // Keep d: mask as is, not convert to d:\*
+ {
+ // We need to append "\*" both for -ep1 to work correctly and to
+ // convert d:\* masks previously truncated to d: back to original form.
+ AddEndSlash(CurMask,ASIZE(CurMask));
+ wcsncatz(CurMask,MASKALL,ASIZE(CurMask));
+ }
+ return true;
+}
+
+
+bool ScanTree::GetNextMask()
+{
+ if (!GetFilteredMask())
+ return false;
#ifdef _WIN_ALL
UnixSlashToDos(CurMask,CurMask,ASIZE(CurMask));
#endif
@@ -70,7 +213,7 @@ bool ScanTree::GetNextMask()
// We wish to scan entire disk if mask like c:\ is specified
// regardless of recursion mode. Use c:\*.* mask when need to scan only
// the root directory.
- ScanEntireDisk=IsDiskLetter(CurMask) && IsPathDiv(CurMask[2]) && CurMask[3]==0;
+ ScanEntireDisk=IsDriveLetter(CurMask) && IsPathDiv(CurMask[2]) && CurMask[3]==0;
wchar *Name=PointToName(CurMask);
if (*Name==0)
@@ -111,8 +254,10 @@ SCAN_CODE ScanTree::FindProc(FindData *FD)
// SearchAll means that we'll use "*" mask for search, so we'll find
// subdirectories and will be able to recurse into them.
// We do not use "*" for directories at any level or for files
- // at top level in recursion mode.
+ // at top level in recursion mode. We always comrpess the entire directory
+ // if folder wildcard is specified.
bool SearchAll=!IsDir && (Depth>0 || Recurse==RECURSE_ALWAYS ||
+ FolderWildcards && Recurse!=RECURSE_DISABLE ||
Wildcards && Recurse==RECURSE_WILDCARDS ||
ScanEntireDisk && Recurse!=RECURSE_DISABLE);
if (Depth==0)
@@ -150,7 +295,11 @@ SCAN_CODE ScanTree::FindProc(FindData *FD)
if (Cmd!=NULL && Cmd->ExclCheck(CurMask,false,true,true))
RetCode=SCAN_NEXT;
else
+ {
ErrHandler.OpenErrorMsg(ErrArcName,CurMask);
+ // User asked to return RARX_NOFILES and not RARX_OPEN here.
+ ErrHandler.SetErrorCode(RARX_NOFILES);
+ }
}
// If we searched only for one file or directory in "fast find"
@@ -324,6 +473,10 @@ void ScanTree::ScanError(bool &Error)
if (Error)
{
+ if (ErrDirList!=NULL)
+ ErrDirList->AddString(CurMask);
+ if (ErrDirSpecPathLength!=NULL)
+ ErrDirSpecPathLength->Push((uint)SpecPathLength);
wchar FullName[NM];
// This conversion works for wildcard masks too.
ConvertNameToFull(CurMask,FullName,ASIZE(FullName));
diff --git a/src/thirdparty/unrar/scantree.hpp b/src/thirdparty/unrar/scantree.hpp
index 7ed9a3833..40a6d8497 100644
--- a/src/thirdparty/unrar/scantree.hpp
+++ b/src/thirdparty/unrar/scantree.hpp
@@ -18,6 +18,8 @@ class CommandData;
class ScanTree
{
private:
+ bool ExpandFolderMask();
+ bool GetFilteredMask();
bool GetNextMask();
SCAN_CODE FindProc(FindData *FD);
void ScanError(bool &Error);
@@ -33,11 +35,25 @@ class ScanTree
SCAN_DIRS GetDirs;
int Errors;
- // set when processing paths like c:\ (root directory without wildcards)
+ // Set when processing paths like c:\ (root directory without wildcards).
bool ScanEntireDisk;
wchar CurMask[NM];
wchar OrigCurMask[NM];
+
+ // Store all folder masks generated from folder wildcard mask in non-recursive mode.
+ StringList ExpandedFolderList;
+
+ // Store a filter string for folder wildcard in recursive mode.
+ StringList FilterList;
+
+ // Save the list of unreadable dirs here.
+ StringList *ErrDirList;
+ Array<uint> *ErrDirSpecPathLength;
+
+ // Set if processing a folder wildcard mask.
+ bool FolderWildcards;
+
bool SearchAllInRoot;
size_t SpecPathLength;
@@ -52,6 +68,11 @@ class ScanTree
int GetErrors() {return Errors;};
void SetErrArcName(const wchar *Name) {wcsncpyz(ErrArcName,Name,ASIZE(ErrArcName));}
void SetCommandData(CommandData *Cmd) {ScanTree::Cmd=Cmd;}
+ void SetErrDirList(StringList *List,Array<uint> *Lengths)
+ {
+ ErrDirList=List;
+ ErrDirSpecPathLength=Lengths;
+ }
};
#endif
diff --git a/src/thirdparty/unrar/secpassword.cpp b/src/thirdparty/unrar/secpassword.cpp
index ba7152595..4865b3fd0 100644
--- a/src/thirdparty/unrar/secpassword.cpp
+++ b/src/thirdparty/unrar/secpassword.cpp
@@ -1,12 +1,13 @@
#include "rar.hpp"
-#ifdef _WIN_ALL
+#if defined(_WIN_ALL)
typedef BOOL (WINAPI *CRYPTPROTECTMEMORY)(LPVOID pData,DWORD cbData,DWORD dwFlags);
typedef BOOL (WINAPI *CRYPTUNPROTECTMEMORY)(LPVOID pData,DWORD cbData,DWORD dwFlags);
#ifndef CRYPTPROTECTMEMORY_BLOCK_SIZE
#define CRYPTPROTECTMEMORY_BLOCK_SIZE 16
#define CRYPTPROTECTMEMORY_SAME_PROCESS 0x00
+#define CRYPTPROTECTMEMORY_CROSS_PROCESS 0x01
#endif
class CryptLoader
@@ -34,9 +35,10 @@ class CryptLoader
{
if (!LoadCalled)
{
- hCrypt = LoadLibraryW(L"Crypt32.dll");
+ hCrypt = LoadSysLibrary(L"Crypt32.dll");
if (hCrypt != NULL)
{
+ // Available since Vista.
pCryptProtectMemory = (CRYPTPROTECTMEMORY)GetProcAddress(hCrypt, "CryptProtectMemory");
pCryptUnprotectMemory = (CRYPTUNPROTECTMEMORY)GetProcAddress(hCrypt, "CryptUnprotectMemory");
}
@@ -48,12 +50,13 @@ class CryptLoader
CRYPTUNPROTECTMEMORY pCryptUnprotectMemory;
};
-// We want to call FreeLibrary when RAR is exiting.
+// We need to call FreeLibrary when RAR is exiting.
CryptLoader GlobalCryptLoader;
#endif
SecPassword::SecPassword()
{
+ CrossProcess=false;
Set(L"");
}
@@ -76,6 +79,8 @@ void SecPassword::Clean()
// So we use our own function for this purpose.
void cleandata(void *data,size_t size)
{
+ if (data==NULL || size==0)
+ return;
#if defined(_WIN_ALL) && defined(_MSC_VER)
SecureZeroMemory(data,size);
#else
@@ -99,7 +104,7 @@ void SecPassword::Process(const wchar *Src,size_t SrcSize,wchar *Dst,size_t DstS
// Source string can be shorter than destination as in case when we process
// -p<pwd> parameter, so we need to take into account both sizes.
memcpy(Dst,Src,Min(SrcSize,DstSize)*sizeof(*Dst));
- SecHideData(Dst,DstSize*sizeof(*Dst),Encode);
+ SecHideData(Dst,DstSize*sizeof(*Dst),Encode,CrossProcess);
}
@@ -115,6 +120,8 @@ void SecPassword::Get(wchar *Psw,size_t MaxSize)
}
+
+
void SecPassword::Set(const wchar *Psw)
{
if (*Psw==0)
@@ -156,18 +163,21 @@ bool SecPassword::operator == (SecPassword &psw)
}
-void SecHideData(void *Data,size_t DataSize,bool Encode)
+void SecHideData(void *Data,size_t DataSize,bool Encode,bool CrossProcess)
{
-#ifdef _WIN_ALL
+ // CryptProtectMemory is not available in UWP and CryptProtectData
+ // increases data size not allowing in place conversion.
+#if defined(_WIN_ALL)
// Try to utilize the secure Crypt[Un]ProtectMemory if possible.
if (GlobalCryptLoader.pCryptProtectMemory==NULL)
GlobalCryptLoader.Load();
size_t Aligned=DataSize-DataSize%CRYPTPROTECTMEMORY_BLOCK_SIZE;
+ DWORD Flags=CrossProcess ? CRYPTPROTECTMEMORY_CROSS_PROCESS : CRYPTPROTECTMEMORY_SAME_PROCESS;
if (Encode)
{
if (GlobalCryptLoader.pCryptProtectMemory!=NULL)
{
- if (!GlobalCryptLoader.pCryptProtectMemory(Data,DWORD(Aligned),CRYPTPROTECTMEMORY_SAME_PROCESS))
+ if (!GlobalCryptLoader.pCryptProtectMemory(Data,DWORD(Aligned),Flags))
{
ErrHandler.GeneralErrMsg(L"CryptProtectMemory failed");
ErrHandler.SysErrMsg();
@@ -180,7 +190,7 @@ void SecHideData(void *Data,size_t DataSize,bool Encode)
{
if (GlobalCryptLoader.pCryptUnprotectMemory!=NULL)
{
- if (!GlobalCryptLoader.pCryptUnprotectMemory(Data,DWORD(Aligned),CRYPTPROTECTMEMORY_SAME_PROCESS))
+ if (!GlobalCryptLoader.pCryptUnprotectMemory(Data,DWORD(Aligned),Flags))
{
ErrHandler.GeneralErrMsg(L"CryptUnprotectMemory failed");
ErrHandler.SysErrMsg();
diff --git a/src/thirdparty/unrar/secpassword.hpp b/src/thirdparty/unrar/secpassword.hpp
index 7e166a23b..375d3887a 100644
--- a/src/thirdparty/unrar/secpassword.hpp
+++ b/src/thirdparty/unrar/secpassword.hpp
@@ -22,10 +22,14 @@ class SecPassword
bool IsSet() {return PasswordSet;}
size_t Length();
bool operator == (SecPassword &psw);
+
+ // Set to true if we need to pass a password to another process.
+ // We use it when transferring parameters to UAC elevated WinRAR.
+ bool CrossProcess;
};
void cleandata(void *data,size_t size);
-void SecHideData(void *Data,size_t DataSize,bool Encode);
+void SecHideData(void *Data,size_t DataSize,bool Encode,bool CrossProcess);
#endif
diff --git a/src/thirdparty/unrar/sha1.cpp b/src/thirdparty/unrar/sha1.cpp
index 647a827ae..562aadd05 100644
--- a/src/thirdparty/unrar/sha1.cpp
+++ b/src/thirdparty/unrar/sha1.cpp
@@ -4,246 +4,201 @@
SHA-1 in C
By Steve Reid <steve@edmweb.com>
100% Public Domain
-
-Test Vectors (from FIPS PUB 180-1)
-"abc"
- A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
-"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
- 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
-A million repetitions of "a"
- 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
*/
-#if !defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
- #if defined(_M_IX86) || defined(_M_I86) || defined(__alpha)
- #define LITTLE_ENDIAN
- #else
- #error "LITTLE_ENDIAN or BIG_ENDIAN must be defined"
- #endif
+#ifndef SFX_MODULE
+#define SHA1_UNROLL
#endif
-/* #define SHA1HANDSOFF * Copies data before messing with it. */
-
-#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
-
/* blk0() and blk() perform the initial expand. */
/* I got the idea of expanding during the round function from SSLeay */
#ifdef LITTLE_ENDIAN
-#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
- |(rol(block->l[i],8)&0x00FF00FF))
+#define blk0(i) (block->l[i] = ByteSwap32(block->l[i]))
#else
#define blk0(i) block->l[i]
#endif
-#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
+#define blk(i) (block->l[i&15] = rotl32(block->l[(i+13)&15]^block->l[(i+8)&15] \
^block->l[(i+2)&15]^block->l[i&15],1))
/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
-#define R0(v,w,x,y,z,i) {z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);}
-#define R1(v,w,x,y,z,i) {z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);}
-#define R2(v,w,x,y,z,i) {z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);}
-#define R3(v,w,x,y,z,i) {z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);}
-#define R4(v,w,x,y,z,i) {z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);}
-
-#ifdef _MSC_VER
-#pragma optimize( "", off )
-// We need to disable the optimization to really wipe these variables.
-#endif
-static void wipevars(uint32 &a,uint32 &b,uint32 &c,uint32 &d,uint32 &e)
-{
- // Wipe used variables for safety reason.
- a=b=c=d=e=0;
-}
-#ifdef _MSC_VER
-#pragma optimize( "", on )
-#endif
+#define R0(v,w,x,y,z,i) {z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rotl32(v,5);w=rotl32(w,30);}
+#define R1(v,w,x,y,z,i) {z+=((w&(x^y))^y)+blk(i)+0x5A827999+rotl32(v,5);w=rotl32(w,30);}
+#define R2(v,w,x,y,z,i) {z+=(w^x^y)+blk(i)+0x6ED9EBA1+rotl32(v,5);w=rotl32(w,30);}
+#define R3(v,w,x,y,z,i) {z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rotl32(v,5);w=rotl32(w,30);}
+#define R4(v,w,x,y,z,i) {z+=(w^x^y)+blk(i)+0xCA62C1D6+rotl32(v,5);w=rotl32(w,30);}
/* Hash a single 512-bit block. This is the core of the algorithm. */
-
-void SHA1Transform(uint32 state[5], unsigned char workspace[64], const byte buffer[64], bool handsoff)
+void SHA1Transform(uint32 state[5], uint32 workspace[16], const byte buffer[64], bool inplace)
{
-#ifndef SFX_MODULE
uint32 a, b, c, d, e;
-#endif
- typedef union {
+
+ union CHAR64LONG16
+ {
unsigned char c[64];
uint32 l[16];
-} CHAR64LONG16;
-CHAR64LONG16* block;
- if (handsoff)
- {
- block = (CHAR64LONG16*)workspace;
- memcpy(block, buffer, 64);
- }
- else
- block = (CHAR64LONG16*)buffer;
-#ifdef SFX_MODULE
- static int pos[80][5];
- static bool pinit=false;
- if (!pinit)
- {
- for (int I=0,P=0;I<80;I++,P=(P ? P-1:4))
- {
- pos[I][0]=P;
- pos[I][1]=(P+1)%5;
- pos[I][2]=(P+2)%5;
- pos[I][3]=(P+3)%5;
- pos[I][4]=(P+4)%5;
- }
- pinit=true;
- }
- uint32 s[5];
- for (int I=0;I<sizeof(s)/sizeof(s[0]);I++)
- s[I]=state[I];
-
- for (int I=0;I<16;I++)
- R0(s[pos[I][0]],s[pos[I][1]],s[pos[I][2]],s[pos[I][3]],s[pos[I][4]],I);
- for (int I=16;I<20;I++)
- R1(s[pos[I][0]],s[pos[I][1]],s[pos[I][2]],s[pos[I][3]],s[pos[I][4]],I);
- for (int I=20;I<40;I++)
- R2(s[pos[I][0]],s[pos[I][1]],s[pos[I][2]],s[pos[I][3]],s[pos[I][4]],I);
- for (int I=40;I<60;I++)
- R3(s[pos[I][0]],s[pos[I][1]],s[pos[I][2]],s[pos[I][3]],s[pos[I][4]],I);
- for (int I=60;I<80;I++)
- R4(s[pos[I][0]],s[pos[I][1]],s[pos[I][2]],s[pos[I][3]],s[pos[I][4]],I);
-
- for (int I=0;I<sizeof(s)/sizeof(s[0]);I++)
- state[I]+=s[I];
+ } *block;
+
+ if (inplace)
+ block = (CHAR64LONG16*)buffer;
+ else
+ {
+ block = (CHAR64LONG16*)workspace;
+ memcpy(block, buffer, 64);
+ }
+
+ /* Copy context->state[] to working vars */
+ a = state[0];
+ b = state[1];
+ c = state[2];
+ d = state[3];
+ e = state[4];
+
+#ifdef SHA1_UNROLL
+ /* 4 rounds of 20 operations each. Loop unrolled. */
+ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
+ R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
+ R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
+ R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
+ R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
+ R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
+ R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
+ R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
+ R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
+ R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
+ R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
+ R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
+ R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
+ R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
+ R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
+ R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
+ R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
+ R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
+ R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
+ R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
#else
- /* Copy context->state[] to working vars */
- a = state[0];
- b = state[1];
- c = state[2];
- d = state[3];
- e = state[4];
- /* 4 rounds of 20 operations each. Loop unrolled. */
- R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
- R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
- R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
- R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
- R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
- R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
- R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
- R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
- R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
- R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
- R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
- R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
- R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
- R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
- R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
- R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
- R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
- R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
- R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
- R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
- /* Add the working vars back into context.state[] */
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
- state[4] += e;
-
- /* Wipe variables */
-// Such wipe method does not work in optimizing compilers.
-// a = b = c = d = e = 0;
-// memset(&a,0,sizeof(a));
-
- wipevars(a,b,c,d,e);
+ for (uint I=0;;I+=5)
+ {
+ R0(a,b,c,d,e, I+0); if (I==15) break;
+ R0(e,a,b,c,d, I+1); R0(d,e,a,b,c, I+2);
+ R0(c,d,e,a,b, I+3); R0(b,c,d,e,a, I+4);
+ }
+ R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
+ for (uint I=20;I<=35;I+=5)
+ {
+ R2(a,b,c,d,e,I+0); R2(e,a,b,c,d,I+1); R2(d,e,a,b,c,I+2);
+ R2(c,d,e,a,b,I+3); R2(b,c,d,e,a,I+4);
+ }
+ for (uint I=40;I<=55;I+=5)
+ {
+ R3(a,b,c,d,e,I+0); R3(e,a,b,c,d,I+1); R3(d,e,a,b,c,I+2);
+ R3(c,d,e,a,b,I+3); R3(b,c,d,e,a,I+4);
+ }
+ for (uint I=60;I<=75;I+=5)
+ {
+ R4(a,b,c,d,e,I+0); R4(e,a,b,c,d,I+1); R4(d,e,a,b,c,I+2);
+ R4(c,d,e,a,b,I+3); R4(b,c,d,e,a,I+4);
+ }
#endif
+ /* Add the working vars back into context.state[] */
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+ state[4] += e;
}
/* Initialize new context */
-
void sha1_init(sha1_context* context)
{
- /* SHA1 initialization constants */
- context->state[0] = 0x67452301;
- context->state[1] = 0xEFCDAB89;
- context->state[2] = 0x98BADCFE;
- context->state[3] = 0x10325476;
- context->state[4] = 0xC3D2E1F0;
- context->count[0] = context->count[1] = 0;
+ context->count = 0;
+ /* SHA1 initialization constants */
+ context->state[0] = 0x67452301;
+ context->state[1] = 0xEFCDAB89;
+ context->state[2] = 0x98BADCFE;
+ context->state[3] = 0x10325476;
+ context->state[4] = 0xC3D2E1F0;
}
/* Run your data through this. */
-void sha1_process( sha1_context * context, const unsigned char * data, size_t len,
- bool handsoff )
+void sha1_process( sha1_context * context, const unsigned char * data, size_t len)
{
-unsigned int i, j;
-uint blen = ((uint)len)<<3;
-
- j = (context->count[0] >> 3) & 63;
- if ((context->count[0] += blen) < blen ) context->count[1]++;
- context->count[1] += (uint32)(len >> 29);
- if ((j + len) > 63) {
- memcpy(&context->buffer[j], data, (i = 64-j));
- SHA1Transform(context->state, context->workspace, context->buffer, handsoff);
- for ( ; i + 63 < len; i += 64) {
-#ifdef ALLOW_MISALIGNED
- SHA1Transform(context->state, context->workspace, &data[i], handsoff);
-#else
- uint buffer[16];
- memcpy(buffer,data+i,sizeof(buffer));
- SHA1Transform(context->state, context->workspace, (byte*)buffer, handsoff);
- if (!handsoff)
- memcpy((byte *)(data+i),buffer,sizeof(buffer));
-#endif
-#ifdef BIG_ENDIAN
- if (!handsoff)
- {
- unsigned char *d=(unsigned char *)(data+i);
- for (int k=0;k<64;k+=4)
- {
- byte b0=d[k],b1=d[k+1];
- d[k]=d[k+3];
- d[k+1]=d[k+2];
- d[k+2]=b1;
- d[k+3]=b0;
- }
- }
-#endif
- }
- j = 0;
+ size_t i, j = (size_t)(context->count & 63);
+ context->count += len;
+
+ if ((j + len) > 63)
+ {
+ memcpy(context->buffer+j, data, (i = 64-j));
+ uint32 workspace[16];
+ SHA1Transform(context->state, workspace, context->buffer, true);
+ for ( ; i + 63 < len; i += 64)
+ SHA1Transform(context->state, workspace, data+i, false);
+ j = 0;
+ }
+ else
+ i = 0;
+ if (len > i)
+ memcpy(context->buffer+j, data+i, len - i);
+}
+
+
+void sha1_process_rar29(sha1_context *context, const unsigned char *data, size_t len)
+{
+ size_t i, j = (size_t)(context->count & 63);
+ context->count += len;
+
+ if ((j + len) > 63)
+ {
+ memcpy(context->buffer+j, data, (i = 64-j));
+ uint32 workspace[16];
+ SHA1Transform(context->state, workspace, context->buffer, true);
+ for ( ; i + 63 < len; i += 64)
+ {
+ SHA1Transform(context->state, workspace, data+i, false);
+ for (uint k = 0; k < 16; k++)
+ RawPut4(workspace[k],(void*)(data+i+k*4));
}
- else i = 0;
- if (len > i)
- memcpy(&context->buffer[j], &data[i], len - i);
+ j = 0;
+ }
+ else
+ i = 0;
+ if (len > i)
+ memcpy(context->buffer+j, data+i, len - i);
}
/* Add padding and return the message digest. */
-
-void sha1_done( sha1_context* context, uint32 digest[5], bool handsoff)
+void sha1_done( sha1_context* context, uint32 digest[5])
{
-uint i, j;
-unsigned char finalcount[8];
-
- for (i = 0; i < 8; i++) {
- finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)]
- >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */
- }
- unsigned char ch=(unsigned char)'\200';
- sha1_process(context, &ch, 1, handsoff);
- while ((context->count[0] & 504) != 448) {
- ch=0;
- sha1_process(context, &ch, 1, handsoff);
- }
- sha1_process(context, finalcount, 8, handsoff); /* Should cause a SHA1Transform() */
- for (i = 0; i < 5; i++) {
- digest[i] = context->state[i] & 0xffffffff;
+ uint32 workspace[16];
+ uint64 BitLength = context->count * 8;
+ uint BufPos = (uint)context->count & 0x3f;
+ context->buffer[BufPos++] = 0x80; // Padding the message with "1" bit.
+
+ if (BufPos!=56) // We need 56 bytes block followed by 8 byte length.
+ {
+ if (BufPos>56)
+ {
+ while (BufPos<64)
+ context->buffer[BufPos++] = 0;
+ BufPos=0;
}
- /* Wipe variables */
- cleandata(&i,sizeof(i));
- cleandata(&j,sizeof(j));
- cleandata(context->buffer, 64);
- cleandata(context->state, 20);
- cleandata(context->count, 8);
- cleandata(&finalcount, 8);
- if (handsoff)
- memset(context->workspace,0,sizeof(context->workspace)); // Wipe the temporary buffer.
-// SHA1Transform(context->state, context->workspace, context->buffer, true); /* make SHA1Transform overwrite it's own static vars */
+ if (BufPos==0)
+ SHA1Transform(context->state, workspace, context->buffer, true);
+ memset(context->buffer+BufPos,0,56-BufPos);
+ }
+
+ RawPutBE4((uint32)(BitLength>>32), context->buffer + 56);
+ RawPutBE4((uint32)(BitLength), context->buffer + 60);
+
+ SHA1Transform(context->state, workspace, context->buffer, true);
+
+ for (uint i = 0; i < 5; i++)
+ digest[i] = context->state[i];
+
+ /* Wipe variables */
+ sha1_init(context);
}
diff --git a/src/thirdparty/unrar/sha1.hpp b/src/thirdparty/unrar/sha1.hpp
index 8407a2ddb..7c0b7fb71 100644
--- a/src/thirdparty/unrar/sha1.hpp
+++ b/src/thirdparty/unrar/sha1.hpp
@@ -1,19 +1,15 @@
#ifndef _RAR_SHA1_
#define _RAR_SHA1_
-#define HW 5
-
typedef struct {
uint32 state[5];
- uint32 count[2];
+ uint64 count;
unsigned char buffer[64];
-
- unsigned char workspace[64]; // Temporary buffer.
} sha1_context;
void sha1_init( sha1_context * c );
-void sha1_process( sha1_context * c, const byte *data, size_t len,
- bool handsoff);
-void sha1_done( sha1_context * c, uint32[HW], bool handsoff);
+void sha1_process(sha1_context * c, const byte *data, size_t len);
+void sha1_process_rar29(sha1_context *context, const unsigned char *data, size_t len);
+void sha1_done( sha1_context * c, uint32 digest[5] );
#endif
diff --git a/src/thirdparty/unrar/sha256.cpp b/src/thirdparty/unrar/sha256.cpp
index 180b3c476..f90d2c095 100644
--- a/src/thirdparty/unrar/sha256.cpp
+++ b/src/thirdparty/unrar/sha256.cpp
@@ -21,19 +21,16 @@ static const uint32 K[64] =
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
};
-#define ROTL(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
-#define ROTR(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
-
// SHA-256 functions. We could optimize Ch and Maj a little,
// but with no visible speed benefit.
#define Ch(x, y, z) ((x & y) ^ (~x & z))
#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
// Sigma functions.
-#define Sg0(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x, 22))
-#define Sg1(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x, 25))
-#define sg0(x) (ROTR(x, 7) ^ ROTR(x,18) ^ (x >> 3))
-#define sg1(x) (ROTR(x,17) ^ ROTR(x,19) ^ (x >> 10))
+#define Sg0(x) (rotr32(x, 2) ^ rotr32(x,13) ^ rotr32(x, 22))
+#define Sg1(x) (rotr32(x, 6) ^ rotr32(x,11) ^ rotr32(x, 25))
+#define sg0(x) (rotr32(x, 7) ^ rotr32(x,18) ^ (x >> 3))
+#define sg1(x) (rotr32(x,17) ^ rotr32(x,19) ^ (x >> 10))
void sha256_init(sha256_context *ctx)
{
@@ -49,40 +46,14 @@ void sha256_init(sha256_context *ctx)
}
-inline uint32 b2i(const byte *b) // Big endian bytes to integer.
-{
-#if defined(_MSC_VER)/* && defined(LITTLE_ENDIAN)*/
- return _byteswap_ulong(*(uint32 *)b);
-#elif (__GNUC__ > 3) && (__GNUC_MINOR__ > 2)
- return __builtin_bswap32(*(uint32 *)b);
-#else
- return uint32(b[0]<<24) | uint32(b[1]<<16) | uint32(b[2]<<8) | b[3];
-#endif
-}
-
-
static void sha256_transform(sha256_context *ctx)
{
uint32 W[64]; // Words of message schedule.
uint32 v[8]; // FIPS a, b, c, d, e, f, g, h working variables.
- if (ctx == NULL) // Clean variables and return.
- {
- cleandata(v,sizeof(v));
- cleandata(W,sizeof(W));
- return;
- }
-
- // Prepare message schedule. Loop unrolling provides some small gain here.
- W[0] = b2i(ctx->Data + 0 * 4 ); W[1] = b2i(ctx->Data + 1 * 4 );
- W[2] = b2i(ctx->Data + 2 * 4 ); W[3] = b2i(ctx->Data + 3 * 4 );
- W[4] = b2i(ctx->Data + 4 * 4 ); W[5] = b2i(ctx->Data + 5 * 4 );
- W[6] = b2i(ctx->Data + 6 * 4 ); W[7] = b2i(ctx->Data + 7 * 4 );
- W[8] = b2i(ctx->Data + 8 * 4 ); W[9] = b2i(ctx->Data + 9 * 4 );
- W[10] = b2i(ctx->Data + 10 * 4 ); W[11] = b2i(ctx->Data + 11 * 4 );
- W[12] = b2i(ctx->Data + 12 * 4 ); W[13] = b2i(ctx->Data + 13 * 4 );
- W[14] = b2i(ctx->Data + 14 * 4 ); W[15] = b2i(ctx->Data + 15 * 4 );
-
+ // Prepare message schedule.
+ for (uint I = 0; I < 16; I++)
+ W[I] = RawGetBE4(ctx->Buffer + I * 4);
for (uint I = 16; I < 64; I++)
W[I] = sg1(W[I-2]) + W[I-7] + sg0(W[I-15]) + W[I-16];
@@ -90,7 +61,6 @@ static void sha256_transform(sha256_context *ctx)
v[0]=H[0]; v[1]=H[1]; v[2]=H[2]; v[3]=H[3];
v[4]=H[4]; v[5]=H[5]; v[6]=H[6]; v[7]=H[7];
- // MSVC -O2 partially unrolls this loop automatically.
for (uint I = 0; I < 64; I++)
{
uint T1 = v[7] + Sg1(v[4]) + Ch(v[4], v[5], v[6]) + K[I] + W[I];
@@ -127,13 +97,8 @@ void sha256_process(sha256_context *ctx, const void *Data, size_t Size)
size_t BufSpace=sizeof(ctx->Buffer)-BufPos;
size_t CopySize=Size>BufSpace ? BufSpace:Size;
- if (CopySize == 64)
- ctx->Data=Src; // Point to source data instead of copying it to buffer.
- else
- {
- ctx->Data=ctx->Buffer;
- memcpy(ctx->Buffer+BufPos,Src,CopySize);
- }
+ memcpy(ctx->Buffer+BufPos,Src,CopySize);
+
Src+=CopySize;
BufPos+=CopySize;
Size-=CopySize;
@@ -143,35 +108,41 @@ void sha256_process(sha256_context *ctx, const void *Data, size_t Size)
sha256_transform(ctx);
}
}
- sha256_transform(NULL);
}
void sha256_done(sha256_context *ctx, byte *Digest)
{
- ctx->Data = ctx->Buffer;
uint64 BitLength = ctx->Count * 8;
uint BufPos = (uint)ctx->Count & 0x3f;
ctx->Buffer[BufPos++] = 0x80; // Padding the message with "1" bit.
- while (BufPos != 56) // We need 56 bytes block followed by 8 byte length.
+
+ if (BufPos!=56) // We need 56 bytes block followed by 8 byte length.
{
- BufPos &= 0x3f;
- if (BufPos == 0)
+ if (BufPos>56)
+ {
+ while (BufPos<64)
+ ctx->Buffer[BufPos++] = 0;
+ BufPos=0;
+ }
+ if (BufPos==0)
sha256_transform(ctx);
- ctx->Buffer[BufPos++] = 0;
+ memset(ctx->Buffer+BufPos,0,56-BufPos);
}
- for (uint i = 0; i < 8; i++) // Store bit length of entire message.
- {
- ctx->Buffer[BufPos++] = (byte)(BitLength >> 56);
- BitLength <<= 8;
- }
+ RawPutBE4((uint32)(BitLength>>32), ctx->Buffer + 56);
+ RawPutBE4((uint32)(BitLength), ctx->Buffer + 60);
+
sha256_transform(ctx);
- for (uint i = 0; i < 32; i++)
- Digest[i] = byte(ctx->H[i / 4] >> ((3 - i % 4) * 8));
+ RawPutBE4(ctx->H[0], Digest + 0);
+ RawPutBE4(ctx->H[1], Digest + 4);
+ RawPutBE4(ctx->H[2], Digest + 8);
+ RawPutBE4(ctx->H[3], Digest + 12);
+ RawPutBE4(ctx->H[4], Digest + 16);
+ RawPutBE4(ctx->H[5], Digest + 20);
+ RawPutBE4(ctx->H[6], Digest + 24);
+ RawPutBE4(ctx->H[7], Digest + 28);
sha256_init(ctx);
- sha256_transform(NULL);
- cleandata(ctx->Buffer, sizeof(ctx->Buffer));
}
diff --git a/src/thirdparty/unrar/sha256.hpp b/src/thirdparty/unrar/sha256.hpp
index fd3bddd83..b6837e760 100644
--- a/src/thirdparty/unrar/sha256.hpp
+++ b/src/thirdparty/unrar/sha256.hpp
@@ -1,17 +1,12 @@
#ifndef _RAR_SHA256_
#define _RAR_SHA256_
-#ifndef PRESENT_INT32
-#error 32-bit integer type is required for SHA-256.
-#endif
-
#define SHA256_DIGEST_SIZE 32
typedef struct
{
uint32 H[8];
uint64 Count;
- const byte *Data;
byte Buffer[64];
} sha256_context;
diff --git a/src/thirdparty/unrar/smallfn.cpp b/src/thirdparty/unrar/smallfn.cpp
index 5b5e6f66b..81259d02f 100644
--- a/src/thirdparty/unrar/smallfn.cpp
+++ b/src/thirdparty/unrar/smallfn.cpp
@@ -3,8 +3,8 @@
int ToPercent(int64 N1,int64 N2)
{
if (N2<N1)
- return(100);
- return(ToPercentUnlim(N1,N2));
+ return 100;
+ return ToPercentUnlim(N1,N2);
}
@@ -12,6 +12,8 @@ int ToPercent(int64 N1,int64 N2)
int ToPercentUnlim(int64 N1,int64 N2)
{
if (N2==0)
- return(0);
- return((int)(N1*100/N2));
+ return 0;
+ return (int)(N1*100/N2);
}
+
+
diff --git a/src/thirdparty/unrar/strfn.cpp b/src/thirdparty/unrar/strfn.cpp
index c2888a09c..283c67b48 100644
--- a/src/thirdparty/unrar/strfn.cpp
+++ b/src/thirdparty/unrar/strfn.cpp
@@ -15,12 +15,12 @@ const wchar *NullToEmpty(const wchar *Str)
void IntToExt(const char *Src,char *Dest,size_t DestSize)
{
#ifdef _WIN_ALL
+ // OemToCharBuff does not stop at 0, so let's check source length.
+ size_t SrcLength=strlen(Src)+1;
+ if (DestSize>SrcLength)
+ DestSize=SrcLength;
OemToCharBuffA(Src,Dest,(DWORD)DestSize);
Dest[DestSize-1]=0;
-#elif defined(_ANDROID)
- wchar DestW[NM];
- UnkToWide(Src,DestW,ASIZE(DestW));
- WideToChar(DestW,Dest,DestSize);
#else
if (Dest!=Src)
strncpyz(Dest,Src,DestSize);
@@ -28,6 +28,36 @@ void IntToExt(const char *Src,char *Dest,size_t DestSize)
}
+// Convert archived names to Unicode. Allow user to select a code page in GUI.
+void ArcCharToWide(const char *Src,wchar *Dest,size_t DestSize,ACTW_ENCODING Encoding)
+{
+#if defined(_WIN_ALL) // Console Windows RAR.
+ if (Encoding==ACTW_UTF8)
+ UtfToWide(Src,Dest,DestSize);
+ else
+ {
+ char NameA[NM];
+ if (Encoding==ACTW_OEM)
+ {
+ IntToExt(Src,NameA,ASIZE(NameA));
+ Src=NameA;
+ }
+ CharToWide(Src,Dest,DestSize);
+ }
+#else // RAR for Unix.
+ if (Encoding==ACTW_UTF8)
+ UtfToWide(Src,Dest,DestSize);
+ else
+ CharToWide(Src,Dest,DestSize);
+#endif
+ // Ensure that we return a zero terminate string for security reason.
+ // While [Jni]CharToWide might already do it, be protected in case of future
+ // changes in these functions.
+ if (DestSize>0)
+ Dest[DestSize-1]=0;
+}
+
+
int stricomp(const char *s1,const char *s2)
{
#ifdef _WIN_ALL
@@ -83,28 +113,28 @@ wchar* RemoveLF(wchar *Str)
{
for (int I=(int)wcslen(Str)-1;I>=0 && (Str[I]=='\r' || Str[I]=='\n');I--)
Str[I]=0;
- return(Str);
+ return Str;
}
unsigned char loctolower(unsigned char ch)
{
-#ifdef _WIN_ALL
+#if defined(_WIN_ALL)
// Convert to LPARAM first to avoid a warning in 64 bit mode.
- return((int)(LPARAM)CharLowerA((LPSTR)ch));
+ return (int)(LPARAM)CharLowerA((LPSTR)ch);
#else
- return(tolower(ch));
+ return tolower(ch);
#endif
}
unsigned char loctoupper(unsigned char ch)
{
-#ifdef _WIN_ALL
+#if defined(_WIN_ALL)
// Convert to LPARAM first to avoid a warning in 64 bit mode.
- return((int)(LPARAM)CharUpperA((LPSTR)ch));
+ return (int)(LPARAM)CharUpperA((LPSTR)ch);
#else
- return(toupper(ch));
+ return toupper(ch);
#endif
}
@@ -116,8 +146,8 @@ unsigned char loctoupper(unsigned char ch)
unsigned char etoupper(unsigned char ch)
{
if (ch=='i')
- return('I');
- return(toupper(ch));
+ return 'I';
+ return toupper(ch);
}
@@ -125,8 +155,8 @@ unsigned char etoupper(unsigned char ch)
wchar etoupperw(wchar ch)
{
if (ch=='i')
- return('I');
- return(toupperw(ch));
+ return 'I';
+ return toupperw(ch);
}
@@ -136,7 +166,7 @@ wchar etoupperw(wchar ch)
// values, resulting in undefined behavior in standard isdigit.
bool IsDigit(int ch)
{
- return(ch>='0' && ch<='9');
+ return ch>='0' && ch<='9';
}
@@ -146,7 +176,7 @@ bool IsDigit(int ch)
// values, resulting in undefined behavior in standard isspace.
bool IsSpace(int ch)
{
- return(ch==' ' || ch=='\t');
+ return ch==' ' || ch=='\t';
}
@@ -156,7 +186,7 @@ bool IsSpace(int ch)
// values, resulting in undefined behavior in standard function.
bool IsAlpha(int ch)
{
- return(ch>='A' && ch<='Z' || ch>='a' && ch<='z');
+ return ch>='A' && ch<='Z' || ch>='a' && ch<='z';
}
@@ -225,17 +255,27 @@ bool LowAscii(const wchar *Str)
}
-int wcsicompc(const wchar *Str1,const wchar *Str2)
+int wcsicompc(const wchar *s1,const wchar *s2) // For path comparison.
{
#if defined(_UNIX)
- return wcscmp(Str1,Str2);
+ return wcscmp(s1,s2);
#else
- return wcsicomp(Str1,Str2);
+ return wcsicomp(s1,s2);
#endif
}
-// safe strncpy: copies maxlen-1 max and always returns zero terminated dest
+int wcsnicompc(const wchar *s1,const wchar *s2,size_t n)
+{
+#if defined(_UNIX)
+ return wcsncmp(s1,s2,n);
+#else
+ return wcsnicomp(s1,s2,n);
+#endif
+}
+
+
+// Safe strncpy: copies maxlen-1 max and always returns zero terminated dest.
char* strncpyz(char *dest, const char *src, size_t maxlen)
{
if (maxlen>0)
@@ -265,8 +305,9 @@ wchar* wcsncpyz(wchar *dest, const wchar *src, size_t maxlen)
char* strncatz(char* dest, const char* src, size_t maxlen)
{
size_t Length = strlen(dest);
- if (Length + 1 < maxlen)
- strncat(dest, src, maxlen - Length - 1);
+ int avail=int(maxlen - Length - 1);
+ if (avail > 0)
+ strncat(dest, src, avail);
return dest;
}
@@ -277,40 +318,59 @@ char* strncatz(char* dest, const char* src, size_t maxlen)
wchar* wcsncatz(wchar* dest, const wchar* src, size_t maxlen)
{
size_t Length = wcslen(dest);
- if (Length + 1 < maxlen)
- wcsncat(dest, src, maxlen - Length - 1);
+ int avail=int(maxlen - Length - 1);
+ if (avail > 0)
+ wcsncat(dest, src, avail);
return dest;
}
-void itoa(int64 n,char *Str)
+void itoa(int64 n,char *Str,size_t MaxSize)
{
char NumStr[50];
size_t Pos=0;
+ int Neg=n < 0 ? 1 : 0;
+ if (Neg)
+ n=-n;
+
do
{
+ if (Pos+1>=MaxSize-Neg)
+ break;
NumStr[Pos++]=char(n%10)+'0';
n=n/10;
} while (n!=0);
+ if (Neg)
+ NumStr[Pos++]='-';
+
for (size_t I=0;I<Pos;I++)
Str[I]=NumStr[Pos-I-1];
Str[Pos]=0;
}
-void itoa(int64 n,wchar *Str)
+void itoa(int64 n,wchar *Str,size_t MaxSize)
{
wchar NumStr[50];
size_t Pos=0;
+ int Neg=n < 0 ? 1 : 0;
+ if (Neg)
+ n=-n;
+
do
{
+ if (Pos+1>=MaxSize-Neg)
+ break;
NumStr[Pos++]=wchar(n%10)+'0';
n=n/10;
} while (n!=0);
+ if (Neg)
+ NumStr[Pos++]='-';
+
for (size_t I=0;I<Pos;I++)
Str[I]=NumStr[Pos-I-1];
Str[Pos]=0;
diff --git a/src/thirdparty/unrar/strfn.hpp b/src/thirdparty/unrar/strfn.hpp
index eae67747c..7faac42fa 100644
--- a/src/thirdparty/unrar/strfn.hpp
+++ b/src/thirdparty/unrar/strfn.hpp
@@ -4,6 +4,10 @@
const char* NullToEmpty(const char *Str);
const wchar* NullToEmpty(const wchar *Str);
void IntToExt(const char *Src,char *Dest,size_t DestSize);
+
+enum ACTW_ENCODING { ACTW_DEFAULT, ACTW_OEM, ACTW_UTF8};
+void ArcCharToWide(const char *Src,wchar *Dest,size_t DestSize,ACTW_ENCODING Encoding);
+
int stricomp(const char *s1,const char *s2);
int strnicomp(const char *s1,const char *s2,size_t n);
wchar* RemoveEOL(wchar *Str);
@@ -32,10 +36,11 @@ uint GetDigits(uint Number);
bool LowAscii(const char *Str);
bool LowAscii(const wchar *Str);
-int wcsicompc(const wchar *Str1,const wchar *Str2);
+int wcsicompc(const wchar *s1,const wchar *s2);
+int wcsnicompc(const wchar *s1,const wchar *s2,size_t n);
-void itoa(int64 n,char *Str);
-void itoa(int64 n,wchar *Str);
+void itoa(int64 n,char *Str,size_t MaxSize);
+void itoa(int64 n,wchar *Str,size_t MaxSize);
const wchar* GetWide(const char *Src);
const wchar* GetCmdParam(const wchar *CmdLine,wchar *Param,size_t MaxSize);
#ifndef SILENT
diff --git a/src/thirdparty/unrar/suballoc.cpp b/src/thirdparty/unrar/suballoc.cpp
index 4bc07bf9d..d1fb690d0 100644
--- a/src/thirdparty/unrar/suballoc.cpp
+++ b/src/thirdparty/unrar/suballoc.cpp
@@ -66,8 +66,6 @@ inline void SubAllocator::SplitBlock(void* pv,int OldIndx,int NewIndx)
}
-
-
void SubAllocator::StopSubAllocator()
{
if ( SubAllocatorSize )
diff --git a/src/thirdparty/unrar/suballoc.hpp b/src/thirdparty/unrar/suballoc.hpp
index 0280289cf..5989e82e8 100644
--- a/src/thirdparty/unrar/suballoc.hpp
+++ b/src/thirdparty/unrar/suballoc.hpp
@@ -57,7 +57,6 @@ class SubAllocator
inline void* RemoveNode(int indx);
inline uint U2B(int NU);
inline void SplitBlock(void* pv,int OldIndx,int NewIndx);
- uint GetUsedMemory();
inline void GlueFreeBlocks();
void* AllocUnitsRare(int indx);
inline RARPPM_MEM_BLK* MBPtr(RARPPM_MEM_BLK *BasePtr,int Items);
diff --git a/src/thirdparty/unrar/system.cpp b/src/thirdparty/unrar/system.cpp
index dc858744a..1d1207f70 100644
--- a/src/thirdparty/unrar/system.cpp
+++ b/src/thirdparty/unrar/system.cpp
@@ -8,7 +8,7 @@ void InitSystemOptions(int SleepTime)
}
-#if !defined(SFX_MODULE) && !defined(SETUP)
+#if !defined(SFX_MODULE)
void SetPriority(int Priority)
{
#ifdef _WIN_ALL
@@ -21,6 +21,10 @@ void SetPriority(int Priority)
{
PriorityClass=IDLE_PRIORITY_CLASS;
PriorityLevel=THREAD_PRIORITY_IDLE;
+
+// Background mode for Vista, can be slow for many small files.
+// if (WinNT()>=WNT_VISTA)
+// SetPriorityClass(GetCurrentProcess(),PROCESS_MODE_BACKGROUND_BEGIN);
}
else
if (Priority<7)
@@ -58,31 +62,46 @@ void SetPriority(int Priority)
ThreadPool::SetPriority(PriorityLevel);
#endif
-// Background mode for Vista, too slow for real life use.
-// if (WinNT()>=WNT_VISTA && Priority==1)
-// SetPriorityClass(GetCurrentProcess(),PROCESS_MODE_BACKGROUND_BEGIN);
-
#endif
}
#endif
-#ifndef SETUP
+// Monotonic clock. Like clock(), returns time passed in CLOCKS_PER_SEC items.
+// In Android 5+ and Unix usual clock() returns time spent by all threads
+// together, so we cannot use it to measure time intervals anymore.
+clock_t MonoClock()
+{
+ return clock();
+}
+
+
+
void Wait()
{
if (ErrHandler.UserBreak)
ErrHandler.Exit(RARX_USERBREAK);
#if defined(_WIN_ALL) && !defined(SFX_MODULE)
if (SleepTime!=0)
- Sleep(SleepTime);
+ {
+ static clock_t LastTime=MonoClock();
+ if (MonoClock()-LastTime>10*CLOCKS_PER_SEC/1000)
+ {
+ Sleep(SleepTime);
+ LastTime=MonoClock();
+ }
+ }
#endif
-}
+#if defined(_WIN_ALL)
+ // Reset system sleep timer to prevent system going sleep.
+ SetThreadExecutionState(ES_SYSTEM_REQUIRED);
#endif
+}
-#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT) && !defined(SETUP)
+#if defined(_WIN_ALL) && !defined(SFX_MODULE)
void Shutdown()
{
HANDLE hToken;
@@ -101,12 +120,47 @@ void Shutdown()
+
+#if defined(_WIN_ALL)
+// Load library from Windows System32 folder. Use this function to prevent
+// loading a malicious code from current folder or same folder as exe.
+HMODULE WINAPI LoadSysLibrary(const wchar *Name)
+{
+ wchar SysDir[NM];
+ if (GetSystemDirectory(SysDir,ASIZE(SysDir))==0)
+ return NULL;
+ MakeName(SysDir,Name,SysDir,ASIZE(SysDir));
+ return LoadLibrary(SysDir);
+}
+
+
+bool IsUserAdmin()
+{
+ SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
+ PSID AdministratorsGroup;
+ BOOL b = AllocateAndInitializeSid(&NtAuthority,2,SECURITY_BUILTIN_DOMAIN_RID,
+ DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup);
+ if (b)
+ {
+ if (!CheckTokenMembership( NULL, AdministratorsGroup, &b))
+ b = FALSE;
+ FreeSid(AdministratorsGroup);
+ }
+ return b!=FALSE;
+}
+
+#endif
+
+
#ifdef USE_SSE
SSE_VERSION _SSE_Version=GetSSEVersion();
SSE_VERSION GetSSEVersion()
{
int CPUInfo[4];
+ __cpuid(CPUInfo, 7);
+ if ((CPUInfo[1] & 0x20)!=0)
+ return SSE_AVX2;
__cpuid(CPUInfo, 1);
if ((CPUInfo[2] & 0x80000)!=0)
return SSE_SSE41;
diff --git a/src/thirdparty/unrar/system.hpp b/src/thirdparty/unrar/system.hpp
index 88445be79..0c2d57180 100644
--- a/src/thirdparty/unrar/system.hpp
+++ b/src/thirdparty/unrar/system.hpp
@@ -19,14 +19,19 @@
void InitSystemOptions(int SleepTime);
void SetPriority(int Priority);
+clock_t MonoClock();
void Wait();
bool EmailFile(const wchar *FileName,const wchar *MailToW);
void Shutdown();
+#ifdef _WIN_ALL
+HMODULE WINAPI LoadSysLibrary(const wchar *Name);
+bool IsUserAdmin();
+#endif
#ifdef USE_SSE
-enum SSE_VERSION {SSE_NONE,SSE_SSE,SSE_SSE2,SSE_SSSE3,SSE_SSE41};
+enum SSE_VERSION {SSE_NONE,SSE_SSE,SSE_SSE2,SSE_SSSE3,SSE_SSE41,SSE_AVX2};
SSE_VERSION GetSSEVersion();
extern SSE_VERSION _SSE_Version;
#endif
diff --git a/src/thirdparty/unrar/threadmisc.cpp b/src/thirdparty/unrar/threadmisc.cpp
index d56867be4..4ad5af2e5 100644
--- a/src/thirdparty/unrar/threadmisc.cpp
+++ b/src/thirdparty/unrar/threadmisc.cpp
@@ -58,6 +58,18 @@ ThreadPool* CreateThreadPool()
if (GlobalPoolUseCount++ == 0)
GlobalPool=new ThreadPool(MaxPoolThreads);
+ // We use a simple thread pool, which does not allow to add tasks from
+ // different functions and threads in the same time. It is ok for RAR,
+ // but UnRAR.dll can be used in multithreaded environment. So if one of
+ // threads requests a copy of global pool and another copy is already
+ // in use, we create and return a new pool instead of existing global.
+ if (GlobalPoolUseCount > 1)
+ {
+ ThreadPool *Pool = new ThreadPool(MaxPoolThreads);
+ CriticalSectionEnd(&PoolCreateSync.CritSection);
+ return Pool;
+ }
+
CriticalSectionEnd(&PoolCreateSync.CritSection);
return GlobalPool;
}
@@ -65,12 +77,20 @@ ThreadPool* CreateThreadPool()
void DestroyThreadPool(ThreadPool *Pool)
{
- CriticalSectionStart(&PoolCreateSync.CritSection);
+ if (Pool!=NULL)
+ {
+ CriticalSectionStart(&PoolCreateSync.CritSection);
- if (Pool!=NULL && Pool==GlobalPool && GlobalPoolUseCount > 0 && --GlobalPoolUseCount == 0)
- delete GlobalPool;
+ if (Pool==GlobalPool && GlobalPoolUseCount > 0 && --GlobalPoolUseCount == 0)
+ delete GlobalPool;
- CriticalSectionEnd(&PoolCreateSync.CritSection);
+ // To correctly work in multithreaded environment UnRAR.dll creates
+ // new pools if global pool is already in use. We delete such pools here.
+ if (Pool!=GlobalPool)
+ delete Pool;
+
+ CriticalSectionEnd(&PoolCreateSync.CritSection);
+ }
}
diff --git a/src/thirdparty/unrar/threadpool.hpp b/src/thirdparty/unrar/threadpool.hpp
index cdfc665e5..dc45ca0ab 100644
--- a/src/thirdparty/unrar/threadpool.hpp
+++ b/src/thirdparty/unrar/threadpool.hpp
@@ -4,11 +4,7 @@
#ifndef RAR_SMP
const uint MaxPoolThreads=1; // For single threaded version.
#else
-#if defined(_ANDROID)
-const uint MaxPoolThreads=16;
-#else
const uint MaxPoolThreads=32;
-#endif
#ifdef _UNIX
diff --git a/src/thirdparty/unrar/timefn.cpp b/src/thirdparty/unrar/timefn.cpp
index 3fa535f4c..81dfaa243 100644
--- a/src/thirdparty/unrar/timefn.cpp
+++ b/src/thirdparty/unrar/timefn.cpp
@@ -1,45 +1,10 @@
#include "rar.hpp"
-#ifdef _WIN_ALL
-RarTime& RarTime::operator =(FILETIME &ft)
-{
- _ULARGE_INTEGER ul = {ft.dwLowDateTime, ft.dwHighDateTime};
- itime=ul.QuadPart;
- return *this;
-}
-
-
-void RarTime::GetWin32(FILETIME *ft)
-{
- _ULARGE_INTEGER ul;
- ul.QuadPart=itime;
- ft->dwLowDateTime=ul.LowPart;
- ft->dwHighDateTime=ul.HighPart;
-}
-#endif
-
-
-RarTime& RarTime::operator =(time_t ut)
-{
- uint64 ushift=INT32TO64(0x19DB1DE,0xD53E8000); // 116444736000000000.
- itime=uint64(ut)*10000000+ushift;
- return *this;
-}
-
-
-time_t RarTime::GetUnix()
-{
- uint64 ushift=INT32TO64(0x19DB1DE,0xD53E8000); // 116444736000000000.
- time_t ut=(itime-ushift)/10000000;
- return ut;
-}
-
-
void RarTime::GetLocal(RarLocalTime *lt)
{
#ifdef _WIN_ALL
FILETIME ft;
- GetWin32(&ft);
+ GetWinFT(&ft);
FILETIME lft;
if (WinNT() < WNT_VISTA)
@@ -84,15 +49,6 @@ void RarTime::GetLocal(RarLocalTime *lt)
if (lt->Month>2 && IsLeapYear(lt->Year))
lt->yDay++;
-
- st.wMilliseconds=0;
- FILETIME zft;
- SystemTimeToFileTime(&st,&zft);
-
- // Calculate the time reminder, which is the part of time smaller
- // than 1 second, represented in 100-nanosecond intervals.
- lt->Reminder=INT32TO64(lft.dwHighDateTime,lft.dwLowDateTime)-
- INT32TO64(zft.dwHighDateTime,zft.dwLowDateTime);
#else
time_t ut=GetUnix();
struct tm *t;
@@ -104,10 +60,10 @@ void RarTime::GetLocal(RarLocalTime *lt)
lt->Hour=t->tm_hour;
lt->Minute=t->tm_min;
lt->Second=t->tm_sec;
- lt->Reminder=itime % 10000000;
lt->wDay=t->tm_wday;
lt->yDay=t->tm_yday;
#endif
+ lt->Reminder=(itime % TICKS_PER_SECOND);
}
@@ -122,13 +78,10 @@ void RarTime::SetLocal(RarLocalTime *lt)
st.wMinute=lt->Minute;
st.wSecond=lt->Second;
st.wMilliseconds=0;
+ st.wDayOfWeek=0;
FILETIME lft;
if (SystemTimeToFileTime(&st,&lft))
{
- lft.dwLowDateTime+=lt->Reminder;
- if (lft.dwLowDateTime<lt->Reminder)
- lft.dwHighDateTime++;
-
FILETIME ft;
if (WinNT() < WNT_VISTA)
@@ -140,7 +93,7 @@ void RarTime::SetLocal(RarLocalTime *lt)
{
// Reverse procedure which we do in GetLocal.
SYSTEMTIME st1,st2;
- FileTimeToSystemTime(&lft,&st2);
+ FileTimeToSystemTime(&lft,&st2); // st2 might be unequal to st, because we added lt->Reminder to lft.
TzSpecificLocalTimeToSystemTime(NULL,&st2,&st1);
SystemTimeToFileTime(&st1,&ft);
@@ -154,7 +107,7 @@ void RarTime::SetLocal(RarLocalTime *lt)
ft.dwHighDateTime=(DWORD)(Corrected>>32);
}
- *this=ft;
+ SetWinFT(&ft);
}
else
Reset();
@@ -168,26 +121,80 @@ void RarTime::SetLocal(RarLocalTime *lt)
t.tm_mon=lt->Month-1;
t.tm_year=lt->Year-1900;
t.tm_isdst=-1;
- *this=mktime(&t);
+ SetUnix(mktime(&t));
+#endif
itime+=lt->Reminder;
+}
+
+
+
+
+#ifdef _WIN_ALL
+void RarTime::GetWinFT(FILETIME *ft)
+{
+ _ULARGE_INTEGER ul;
+ ul.QuadPart=GetWin();
+ ft->dwLowDateTime=ul.LowPart;
+ ft->dwHighDateTime=ul.HighPart;
+}
+
+
+void RarTime::SetWinFT(FILETIME *ft)
+{
+ _ULARGE_INTEGER ul = {ft->dwLowDateTime, ft->dwHighDateTime};
+ SetWin(ul.QuadPart);
+}
#endif
+
+
+// Get 64-bit representation of Windows FILETIME (100ns since 01.01.1601).
+uint64 RarTime::GetWin()
+{
+ return itime/(TICKS_PER_SECOND/10000000);
}
-// Return the stored time as 64-bit number of 100-nanosecond intervals since
-// 01.01.1601. Actually we do not care since which date this time starts from
-// as long as this date is the same for GetRaw and SetRaw. We use the value
-// returned by GetRaw() for time comparisons, for relative operations
-// like SetRaw(GetRaw()-C) and for compact time storage when necessary.
-uint64 RarTime::GetRaw()
+// Set 64-bit representation of Windows FILETIME (100ns since 01.01.1601).
+void RarTime::SetWin(uint64 WinTime)
{
- return itime;
+ itime=WinTime*(TICKS_PER_SECOND/10000000);
}
-void RarTime::SetRaw(uint64 RawTime)
+time_t RarTime::GetUnix()
{
- itime=RawTime;
+ return time_t(GetUnixNS()/1000000000);
+}
+
+
+void RarTime::SetUnix(time_t ut)
+{
+ if (sizeof(ut)>4)
+ SetUnixNS(uint64(ut)*1000000000);
+ else
+ {
+ // Convert 32-bit and possibly signed time_t to uint32 first,
+ // uint64 cast is not enough. Otherwise sign can expand to 64 bits.
+ SetUnixNS(uint64(uint32(ut))*1000000000);
+ }
+}
+
+
+// Get the high precision Unix time in nanoseconds since 01-01-1970.
+uint64 RarTime::GetUnixNS()
+{
+ // 11644473600000000000 - number of ns between 01-01-1601 and 01-01-1970.
+ uint64 ushift=INT32TO64(0xA1997B0B,0x4C6A0000);
+ return itime*(1000000000/TICKS_PER_SECOND)-ushift;
+}
+
+
+// Set the high precision Unix time in nanoseconds since 01-01-1970.
+void RarTime::SetUnixNS(uint64 ns)
+{
+ // 11644473600000000000 - number of ns between 01-01-1601 and 01-01-1970.
+ uint64 ushift=INT32TO64(0xA1997B0B,0x4C6A0000);
+ itime=(ns+ushift)/(1000000000/TICKS_PER_SECOND);
}
@@ -215,28 +222,23 @@ void RarTime::SetDos(uint DosTime)
}
-#if !defined(GUI) || !defined(SFX_MODULE)
-void RarTime::GetText(wchar *DateStr,size_t MaxSize,bool FullYear,bool FullMS)
+void RarTime::GetText(wchar *DateStr,size_t MaxSize,bool FullMS)
{
if (IsSet())
{
RarLocalTime lt;
GetLocal(&lt);
if (FullMS)
- swprintf(DateStr,MaxSize,L"%u-%02u-%02u %02u:%02u,%03u",lt.Year,lt.Month,lt.Day,lt.Hour,lt.Minute,lt.Reminder/10000);
+ swprintf(DateStr,MaxSize,L"%u-%02u-%02u %02u:%02u:%02u,%09u",lt.Year,lt.Month,lt.Day,lt.Hour,lt.Minute,lt.Second,lt.Reminder*(1000000000/TICKS_PER_SECOND));
else
- if (FullYear)
- swprintf(DateStr,MaxSize,L"%02u-%02u-%u %02u:%02u",lt.Day,lt.Month,lt.Year,lt.Hour,lt.Minute);
- else
- swprintf(DateStr,MaxSize,L"%02u-%02u-%02u %02u:%02u",lt.Day,lt.Month,lt.Year%100,lt.Hour,lt.Minute);
+ swprintf(DateStr,MaxSize,L"%u-%02u-%02u %02u:%02u",lt.Year,lt.Month,lt.Day,lt.Hour,lt.Minute);
}
else
{
// We use escape before '?' to avoid weird C trigraph characters.
- wcscpy(DateStr,FullYear ? L"\?\?-\?\?-\?\?\?\? \?\?:\?\?":L"\?\?-\?\?-\?\? \?\?:\?\?");
+ wcscpy(DateStr,L"\?\?\?\?-\?\?-\?\? \?\?:\?\?");
}
}
-#endif
#ifndef SFX_MODULE
@@ -295,7 +297,7 @@ void RarTime::SetAgeText(const wchar *TimeText)
}
}
SetCurrentTime();
- SetRaw(itime-uint64(Seconds)*10000000);
+ itime-=uint64(Seconds)*TICKS_PER_SECOND;
}
#endif
@@ -307,15 +309,23 @@ void RarTime::SetCurrentTime()
SYSTEMTIME st;
GetSystemTime(&st);
SystemTimeToFileTime(&st,&ft);
- *this=ft;
+ SetWinFT(&ft);
#else
time_t st;
time(&st);
- *this=st;
+ SetUnix(st);
#endif
}
+// Add the specified signed number of nanoseconds.
+void RarTime::Adjust(int64 ns)
+{
+ ns/=1000000000/TICKS_PER_SECOND; // Convert ns to internal ticks.
+ itime+=(uint64)ns;
+}
+
+
#ifndef SFX_MODULE
const wchar *GetMonthName(int Month)
{
diff --git a/src/thirdparty/unrar/timefn.hpp b/src/thirdparty/unrar/timefn.hpp
index f8c914b87..527136164 100644
--- a/src/thirdparty/unrar/timefn.hpp
+++ b/src/thirdparty/unrar/timefn.hpp
@@ -9,7 +9,7 @@ struct RarLocalTime
uint Hour;
uint Minute;
uint Second;
- uint Reminder; // Part of time smaller than 1 second, represented in 100-nanosecond intervals.
+ uint Reminder; // Part of time smaller than 1 second, represented in 1/REMINDER_PRECISION intervals.
uint wDay;
uint yDay;
};
@@ -18,36 +18,45 @@ struct RarLocalTime
class RarTime
{
private:
- // Internal FILETIME like time representation in 100 nanoseconds
- // since 01.01.1601.
+ static const uint TICKS_PER_SECOND = 1000000000; // Internal precision.
+
+ // Internal time representation in 1/TICKS_PER_SECOND since 01.01.1601.
+ // We use nanoseconds here to handle the high precision Unix time.
uint64 itime;
public:
+ // RarLocalTime::Reminder precision. Must be equal to TICKS_PER_SECOND.
+ // Unlike TICKS_PER_SECOND, it is a public field.
+ static const uint REMINDER_PRECISION = TICKS_PER_SECOND;
+ public:
RarTime() {Reset();}
-#ifdef _WIN_ALL
- RarTime(FILETIME &ft) {*this=ft;}
- RarTime& operator =(FILETIME &ft);
- void GetWin32(FILETIME *ft);
-#endif
- RarTime(time_t ut) {*this=ut;}
- RarTime& operator =(time_t ut);
- time_t GetUnix();
bool operator == (RarTime &rt) {return itime==rt.itime;}
+ bool operator != (RarTime &rt) {return itime!=rt.itime;}
bool operator < (RarTime &rt) {return itime<rt.itime;}
bool operator <= (RarTime &rt) {return itime<rt.itime || itime==rt.itime;}
bool operator > (RarTime &rt) {return itime>rt.itime;}
bool operator >= (RarTime &rt) {return itime>rt.itime || itime==rt.itime;}
+
void GetLocal(RarLocalTime *lt);
void SetLocal(RarLocalTime *lt);
- uint64 GetRaw();
- void SetRaw(uint64 RawTime);
+#ifdef _WIN_ALL
+ void GetWinFT(FILETIME *ft);
+ void SetWinFT(FILETIME *ft);
+#endif
+ uint64 GetWin();
+ void SetWin(uint64 WinTime);
+ time_t GetUnix();
+ void SetUnix(time_t ut);
+ uint64 GetUnixNS();
+ void SetUnixNS(uint64 ns);
uint GetDos();
void SetDos(uint DosTime);
- void GetText(wchar *DateStr,size_t MaxSize,bool FullYear,bool FullMS);
+ void GetText(wchar *DateStr,size_t MaxSize,bool FullMS);
void SetIsoText(const wchar *TimeText);
void SetAgeText(const wchar *TimeText);
void SetCurrentTime();
void Reset() {itime=0;}
bool IsSet() {return itime!=0;}
+ void Adjust(int64 ns);
};
const wchar *GetMonthName(int Month);
diff --git a/src/thirdparty/unrar/ui.cpp b/src/thirdparty/unrar/ui.cpp
index d0b34aa80..9713a8876 100644
--- a/src/thirdparty/unrar/ui.cpp
+++ b/src/thirdparty/unrar/ui.cpp
@@ -8,8 +8,7 @@
-#ifndef GUI
+
#include "uiconsole.cpp"
-#endif
#endif
diff --git a/src/thirdparty/unrar/ui.hpp b/src/thirdparty/unrar/ui.hpp
index 9803b78ab..396484d8f 100644
--- a/src/thirdparty/unrar/ui.hpp
+++ b/src/thirdparty/unrar/ui.hpp
@@ -18,8 +18,8 @@ enum UIMESSAGE_CODE {
UIERROR_MHEADERBROKEN, UIERROR_FHEADERBROKEN, UIERROR_SUBHEADERBROKEN,
UIERROR_SUBHEADERUNKNOWN, UIERROR_SUBHEADERDATABROKEN, UIERROR_RRDAMAGED,
UIERROR_UNKNOWNMETHOD, UIERROR_UNKNOWNENCMETHOD, UIERROR_RENAMING,
- UIERROR_NEWERRAR, UIERROR_NOTSFX, UIERROR_OLDTOSFX, UIERROR_WRONGSFXVER,
- UIERROR_ALREADYENC, UIERROR_SYNCSCAN, UIERROR_DICTOUTMEM,
+ UIERROR_NEWERRAR, UIERROR_NOTSFX, UIERROR_OLDTOSFX,
+ UIERROR_WRONGSFXVER, UIERROR_ALREADYENC, UIERROR_DICTOUTMEM,
UIERROR_USESMALLERDICT, UIERROR_MODIFYUNKNOWN, UIERROR_MODIFYOLD,
UIERROR_MODIFYLOCKED, UIERROR_MODIFYVOLUME, UIERROR_NOTVOLUME,
UIERROR_NOTFIRSTVOLUME, UIERROR_RECVOLLIMIT, UIERROR_RECVOLDIFFSETS,
@@ -30,9 +30,9 @@ enum UIMESSAGE_CODE {
UIERROR_RARZIPONLY, UIERROR_REPAIROLDFORMAT, UIERROR_NOFILESREPAIRED,
UIERROR_NOFILESTOADD, UIERROR_NOFILESTODELETE, UIERROR_NOFILESTOEXTRACT,
UIERROR_MISSINGVOL, UIERROR_NEEDPREVVOL, UIERROR_UNKNOWNEXTRA,
- UIERROR_NTFSREQUIRED, UIERROR_ZIPVOLSFX, UIERROR_FILERO,
- UIERROR_TOOLARGESFX, UIERROR_EMAIL, UIERROR_ACLGET, UIERROR_ACLBROKEN,
- UIERROR_ACLUNKNOWN, UIERROR_ACLSET, UIERROR_STREAMBROKEN,
+ UIERROR_CORRUPTEXTRA, UIERROR_NTFSREQUIRED, UIERROR_ZIPVOLSFX,
+ UIERROR_FILERO, UIERROR_TOOLARGESFX, UIERROR_EMAIL, UIERROR_ACLGET,
+ UIERROR_ACLBROKEN, UIERROR_ACLUNKNOWN, UIERROR_ACLSET, UIERROR_STREAMBROKEN,
UIERROR_STREAMUNKNOWN, UIERROR_INCOMPATSWITCH, UIERROR_PATHTOOLONG,
UIERROR_DIRSCAN, UIERROR_UOWNERGET, UIERROR_UOWNERBROKEN,
UIERROR_UOWNERGETOWNERID, UIERROR_UOWNERGETGROUPID, UIERROR_UOWNERSET,
@@ -45,19 +45,19 @@ enum UIMESSAGE_CODE {
UIMSG_SECTORRECOVERED, UIMSG_SECTORNOTRECOVERED, UIMSG_FOUND,
UIMSG_CORRECTINGNAME, UIMSG_BADARCHIVE, UIMSG_CREATING, UIMSG_RENAMING,
UIMSG_RECVOLCALCCHECKSUM, UIMSG_RECVOLFOUND, UIMSG_RECVOLMISSING,
- UIMSG_MISSINGVOL, UIMSG_RECONSTRUCTING, UIMSG_CHECKSUM,
+ UIMSG_MISSINGVOL, UIMSG_RECONSTRUCTING, UIMSG_CHECKSUM, UIMSG_FAT32SIZE,
UIWAIT_FIRST,
- UIWAIT_DISKFULLNEXT, UIWAIT_FCREATEERROR,
+ UIWAIT_DISKFULLNEXT, UIWAIT_FCREATEERROR, UIWAIT_BADPSW,
UIEVENT_FIRST,
- UIEVENT_SEARCHDUPFILES, UIEVENT_CLEARATTRSTART, UIEVENT_CLEARATTRFILE,
+ UIEVENT_SEARCHDUPFILESSTART, UIEVENT_SEARCHDUPFILESEND,
+ UIEVENT_CLEARATTRSTART, UIEVENT_CLEARATTRFILE,
UIEVENT_DELADDEDSTART, UIEVENT_DELADDEDFILE, UIEVENT_FILESFOUND,
UIEVENT_ERASEDISK, UIEVENT_FILESUMSTART, UIEVENT_FILESUMPROGRESS,
UIEVENT_FILESUMEND, UIEVENT_PROTECTSTART, UIEVENT_PROTECTEND,
- UIEVENT_TESTADDEDSTART, UIEVENT_TESTADDEDEND, UIEVENT_RRTESTING,
- UIEVENT_NEWARCHIVE, UIEVENT_NEWREVFILE
-
+ UIEVENT_TESTADDEDSTART, UIEVENT_TESTADDEDEND, UIEVENT_RRTESTINGSTART,
+ UIEVENT_RRTESTINGEND, UIEVENT_NEWARCHIVE, UIEVENT_NEWREVFILE
};
// Flags for uiAskReplace function.
diff --git a/src/thirdparty/unrar/uicommon.cpp b/src/thirdparty/unrar/uicommon.cpp
index 7238c1936..5be551a42 100644
--- a/src/thirdparty/unrar/uicommon.cpp
+++ b/src/thirdparty/unrar/uicommon.cpp
@@ -22,11 +22,18 @@ UIASKREP_RESULT uiAskReplaceEx(RAROptions *Cmd,wchar *Name,size_t MaxNameSize,in
// This check must be after OVERWRITE_AUTORENAME processing or -y switch
// would override -or.
if (Cmd->AllYes || Cmd->Overwrite==OVERWRITE_ALL)
+ {
+ PrepareToDelete(Name);
return UIASKREP_R_REPLACE;
+ }
wchar NewName[NM];
wcsncpyz(NewName,Name,ASIZE(NewName));
UIASKREP_RESULT Choice=uiAskReplace(NewName,ASIZE(NewName),FileSize,FileTime,Flags);
+
+ if (Choice==UIASKREP_R_REPLACE || Choice==UIASKREP_R_REPLACEALL)
+ PrepareToDelete(Name);
+
if (Choice==UIASKREP_R_REPLACEALL)
{
Cmd->Overwrite=OVERWRITE_ALL;
diff --git a/src/thirdparty/unrar/uiconsole.cpp b/src/thirdparty/unrar/uiconsole.cpp
index 5ddaf09f4..281eade02 100644
--- a/src/thirdparty/unrar/uiconsole.cpp
+++ b/src/thirdparty/unrar/uiconsole.cpp
@@ -1,8 +1,27 @@
// Purely user interface function. Gets and returns user input.
UIASKREP_RESULT uiAskReplace(wchar *Name,size_t MaxNameSize,int64 FileSize,RarTime *FileTime,uint Flags)
{
+ wchar SizeText1[20],DateStr1[50],SizeText2[20],DateStr2[50];
+
+ FindData ExistingFD;
+ memset(&ExistingFD,0,sizeof(ExistingFD)); // In case find fails.
+ FindFile::FastFind(Name,&ExistingFD);
+ itoa(ExistingFD.Size,SizeText1,ASIZE(SizeText1));
+ ExistingFD.mtime.GetText(DateStr1,ASIZE(DateStr1),false);
+
+ if (FileSize==INT64NDF || FileTime==NULL)
+ {
+ eprintf(L"\n");
+ eprintf(St(MAskOverwrite),Name);
+ }
+ else
+ {
+ itoa(FileSize,SizeText2,ASIZE(SizeText2));
+ FileTime->GetText(DateStr2,ASIZE(DateStr2),false);
+ eprintf(St(MAskReplace),Name,SizeText1,DateStr1,SizeText2,DateStr2);
+ }
+
bool AllowRename=(Flags & UIASKREP_F_NORENAME)==0;
- eprintf(St(MFileExists),Name);
int Choice=0;
do
{
@@ -77,6 +96,7 @@ void uiMsgStore::Msg()
Log(Str[0],St(MDataBadCRC),Str[1],Str[0]);
break;
case UIERROR_BADPSW:
+ case UIWAIT_BADPSW:
Log(Str[0],St(MWrongPassword));
break;
case UIERROR_MEMORY:
@@ -116,6 +136,7 @@ void uiMsgStore::Msg()
break;
case UIERROR_FILECOPYHINT:
Log(Str[0],St(MCopyErrorHint));
+ mprintf(L" "); // For progress percent.
break;
case UIERROR_DIRCREATE:
Log(Str[0],St(MExtrErrMkDir),Str[1]);
@@ -209,6 +230,9 @@ void uiMsgStore::Msg()
case UIERROR_UNKNOWNEXTRA:
Log(Str[0],St(MUnknownExtra),Str[1]);
break;
+ case UIERROR_CORRUPTEXTRA:
+ Log(Str[0],St(MCorruptExtra),Str[1],Str[2]);
+ break;
#endif
#if !defined(SFX_MODULE) && defined(_WIN_ALL)
case UIERROR_NTFSREQUIRED:
@@ -299,11 +323,14 @@ void uiMsgStore::Msg()
case UIMSG_CHECKSUM:
mprintf(St(MCRCFailed),Str[0]);
break;
+ case UIMSG_FAT32SIZE:
+ mprintf(St(MFAT32Size));
+ mprintf(L" "); // For progress percent.
+ break;
-
- case UIEVENT_RRTESTING:
+ case UIEVENT_RRTESTINGSTART:
mprintf(L"%s ",St(MTestingRR));
break;
}
@@ -320,14 +347,15 @@ void uiAlarm(UIALARM_TYPE Type)
{
if (uiSoundEnabled)
{
- static clock_t LastTime=clock();
- if ((clock()-LastTime)/CLOCKS_PER_SEC>5)
+ static clock_t LastTime=-10; // Negative to always beep first time.
+ if ((MonoClock()-LastTime)/CLOCKS_PER_SEC>5)
{
#ifdef _WIN_ALL
MessageBeep(-1);
#else
putwchar('\007');
#endif
+ LastTime=MonoClock();
}
}
}
diff --git a/src/thirdparty/unrar/ulinks.cpp b/src/thirdparty/unrar/ulinks.cpp
index b51ff6282..99c3493fa 100644
--- a/src/thirdparty/unrar/ulinks.cpp
+++ b/src/thirdparty/unrar/ulinks.cpp
@@ -18,19 +18,34 @@ static bool UnixSymlink(const char *Target,const wchar *LinkName,RarTime *ftm,Ra
return false;
}
#ifdef USE_LUTIMES
+#ifdef UNIX_TIME_NS
+ timespec times[2];
+ times[0].tv_sec=fta->GetUnix();
+ times[0].tv_nsec=fta->IsSet() ? long(fta->GetUnixNS()%1000000000) : UTIME_NOW;
+ times[1].tv_sec=ftm->GetUnix();
+ times[1].tv_nsec=ftm->IsSet() ? long(ftm->GetUnixNS()%1000000000) : UTIME_NOW;
+ utimensat(AT_FDCWD,LinkNameA,times,AT_SYMLINK_NOFOLLOW);
+#else
struct timeval tv[2];
tv[0].tv_sec=fta->GetUnix();
- tv[0].tv_usec=long(fta->GetRaw()%10000000/10);
+ tv[0].tv_usec=long(fta->GetUnixNS()%1000000000/1000);
tv[1].tv_sec=ftm->GetUnix();
- tv[1].tv_usec=long(ftm->GetRaw()%10000000/10);
+ tv[1].tv_usec=long(ftm->GetUnixNS()%1000000000/1000);
lutimes(LinkNameA,tv);
#endif
+#endif
return true;
}
-bool ExtractUnixLink30(ComprDataIO &DataIO,Archive &Arc,const wchar *LinkName)
+static bool IsFullPath(const char *PathA) // Unix ASCII version.
+{
+ return *PathA==CPATHDIVIDER;
+}
+
+
+bool ExtractUnixLink30(CommandData *Cmd,ComprDataIO &DataIO,Archive &Arc,const wchar *LinkName)
{
char Target[NM];
if (IsLink(Arc.FileHead.FileAttr))
@@ -48,13 +63,22 @@ bool ExtractUnixLink30(ComprDataIO &DataIO,Archive &Arc,const wchar *LinkName)
if (!DataIO.UnpHash.Cmp(&Arc.FileHead.FileHash,Arc.FileHead.UseHashKey ? Arc.FileHead.HashKey:NULL))
return true;
+ wchar TargetW[NM];
+ CharToWide(Target,TargetW,ASIZE(TargetW));
+ // Check for *TargetW==0 to catch CharToWide failure.
+ // Use Arc.FileHead.FileName instead of LinkName, since LinkName
+ // can include the destination path as a prefix, which can
+ // confuse IsRelativeSymlinkSafe algorithm.
+ if (!Cmd->AbsoluteLinks && (*TargetW==0 || IsFullPath(TargetW) ||
+ !IsRelativeSymlinkSafe(Cmd,Arc.FileHead.FileName,LinkName,TargetW)))
+ return false;
return UnixSymlink(Target,LinkName,&Arc.FileHead.mtime,&Arc.FileHead.atime);
}
return false;
}
-bool ExtractUnixLink50(const wchar *Name,FileHeader *hd)
+bool ExtractUnixLink50(CommandData *Cmd,const wchar *Name,FileHeader *hd)
{
char Target[NM];
WideToChar(hd->RedirName,Target,ASIZE(Target));
@@ -68,5 +92,11 @@ bool ExtractUnixLink50(const wchar *Name,FileHeader *hd)
return false;
DosSlashToUnix(Target,Target,ASIZE(Target));
}
+ // Use hd->FileName instead of LinkName, since LinkName can include
+ // the destination path as a prefix, which can confuse
+ // IsRelativeSymlinkSafe algorithm.
+ if (!Cmd->AbsoluteLinks && (IsFullPath(Target) ||
+ !IsRelativeSymlinkSafe(Cmd,hd->FileName,Name,hd->RedirName)))
+ return false;
return UnixSymlink(Target,Name,&hd->mtime,&hd->atime);
}
diff --git a/src/thirdparty/unrar/ulinks.hpp b/src/thirdparty/unrar/ulinks.hpp
deleted file mode 100644
index fdd831f25..000000000
--- a/src/thirdparty/unrar/ulinks.hpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _RAR_ULINKS_
-#define _RAR_ULINKS_
-
-void SaveLinkData(ComprDataIO &DataIO,Archive &TempArc,FileHeader &hd,
- const char *Name);
-bool ExtractLink(ComprDataIO &DataIO,Archive &Arc,const char *LinkName,
- uint &LinkCRC,bool Create);
-
-#endif
diff --git a/src/thirdparty/unrar/unicode.cpp b/src/thirdparty/unrar/unicode.cpp
index cff2358d0..e462906b6 100644
--- a/src/thirdparty/unrar/unicode.cpp
+++ b/src/thirdparty/unrar/unicode.cpp
@@ -27,7 +27,7 @@ bool WideToChar(const wchar *Src,char *Dest,size_t DestSize)
RetCode=false;
// wcstombs is broken in Android NDK r9.
-#elif defined(_APPLE) || defined(_ANDROID)
+#elif defined(_APPLE)
WideToUtf(Src,Dest,DestSize);
#elif defined(MBFUNCTIONS)
@@ -74,7 +74,7 @@ bool CharToWide(const char *Src,wchar *Dest,size_t DestSize)
RetCode=false;
// mbstowcs is broken in Android NDK r9.
-#elif defined(_APPLE) || defined(_ANDROID)
+#elif defined(_APPLE)
UtfToWide(Src,Dest,DestSize);
#elif defined(MBFUNCTIONS)
@@ -110,7 +110,7 @@ bool CharToWide(const char *Src,wchar *Dest,size_t DestSize)
}
-#if defined(_UNIX) && defined(MBFUNCTIONS) && !defined(_ANDROID)
+#if defined(_UNIX) && defined(MBFUNCTIONS)
// Convert and restore mapped inconvertible Unicode characters.
// We use it for extended ASCII names in Unix.
bool WideToCharMap(const wchar *Src,char *Dest,size_t DestSize,bool &Success)
@@ -155,7 +155,7 @@ bool WideToCharMap(const wchar *Src,char *Dest,size_t DestSize,bool &Success)
#endif
-#if defined(_UNIX) && defined(MBFUNCTIONS) && !defined(_ANDROID)
+#if defined(_UNIX) && defined(MBFUNCTIONS)
// Convert and map inconvertible Unicode characters.
// We use it for extended ASCII names in Unix.
void CharToWideMap(const char *Src,wchar *Dest,size_t DestSize,bool &Success)
@@ -359,7 +359,7 @@ bool UtfToWide(const char *Src,wchar *Dest,size_t DestSize)
continue;
}
if (Dest!=NULL)
- if (sizeof(*Dest)==2) // Use the surrogate pair for 2 byte Unicode.
+ if (sizeof(*Dest)==2) // Use the surrogate pair.
{
*(Dest++)=((d-0x10000)>>10)+0xd800;
*(Dest++)=(d&0x3ff)+0xdc00;
@@ -377,6 +377,13 @@ bool UtfToWide(const char *Src,wchar *Dest,size_t DestSize)
}
+// Source data can be both with and without UTF-8 BOM.
+bool IsTextUtf8(const char *Src)
+{
+ return UtfToWide(Src,NULL,0);
+}
+
+
int wcsicomp(const wchar *s1,const wchar *s2)
{
#ifdef _WIN_ALL
@@ -433,7 +440,7 @@ const wchar_t* wcscasestr(const wchar_t *str, const wchar_t *search)
{
if (search[j]==0)
return str+i;
- if (towlower(str[i+j])!=towlower(search[j]))
+ if (tolowerw(str[i+j])!=tolowerw(search[j]))
break;
}
return NULL;
@@ -472,31 +479,50 @@ wchar* wcsupper(wchar *s)
int toupperw(int ch)
{
+#if defined(_WIN_ALL)
+ // CharUpper is more reliable than towupper in Windows, which seems to be
+ // C locale dependent even in Unicode version. For example, towupper failed
+ // to convert lowercase Russian characters.
+ return (int)(INT_PTR)CharUpper((wchar *)(INT_PTR)ch);
+#else
return towupper(ch);
+#endif
}
int tolowerw(int ch)
{
+#if defined(_WIN_ALL)
+ // CharLower is more reliable than towlower in Windows.
+ // See comment for towupper above.
+ return (int)(INT_PTR)CharLower((wchar *)(INT_PTR)ch);
+#else
return towlower(ch);
+#endif
}
-uint atoiw(const wchar *s)
+int atoiw(const wchar *s)
{
- return (uint)atoilw(s);
+ return (int)atoilw(s);
}
-uint64 atoilw(const wchar *s)
+int64 atoilw(const wchar *s)
{
- uint64 n=0;
+ int sign=1;
+ if (*s=='-')
+ {
+ s++;
+ sign=-1;
+ }
+ int64 n=0;
while (*s>='0' && *s<='9')
{
n=n*10+(*s-'0');
s++;
}
- return n;
+ return sign*n;
}
diff --git a/src/thirdparty/unrar/unicode.hpp b/src/thirdparty/unrar/unicode.hpp
index 29eeb0edd..ad39086fb 100644
--- a/src/thirdparty/unrar/unicode.hpp
+++ b/src/thirdparty/unrar/unicode.hpp
@@ -1,7 +1,7 @@
#ifndef _RAR_UNICODE_
#define _RAR_UNICODE_
-#ifdef _WIN_ALL
+#if defined( _WIN_ALL)
#define DBCS_SUPPORTED
#endif
@@ -12,6 +12,7 @@ wchar* RawToWide(const byte *Src,wchar *Dest,size_t DestSize);
void WideToUtf(const wchar *Src,char *Dest,size_t DestSize);
size_t WideToUtfSize(const wchar *Src);
bool UtfToWide(const char *Src,wchar *Dest,size_t DestSize);
+bool IsTextUtf8(const char *Src);
int wcsicomp(const wchar *s1,const wchar *s2);
int wcsnicomp(const wchar *s1,const wchar *s2,size_t n);
@@ -22,8 +23,8 @@ wchar* wcsupper(wchar *s);
#endif
int toupperw(int ch);
int tolowerw(int ch);
-uint atoiw(const wchar *s);
-uint64 atoilw(const wchar *s);
+int atoiw(const wchar *s);
+int64 atoilw(const wchar *s);
#ifdef DBCS_SUPPORTED
class SupportDBCS
diff --git a/src/thirdparty/unrar/unpack.cpp b/src/thirdparty/unrar/unpack.cpp
index a7f19805c..6ee158bd0 100644
--- a/src/thirdparty/unrar/unpack.cpp
+++ b/src/thirdparty/unrar/unpack.cpp
@@ -47,7 +47,7 @@ Unpack::Unpack(ComprDataIO *DataIO)
Unpack::~Unpack()
{
- InitFilters30();
+ InitFilters30(false);
if (Window!=NULL)
free(Window);
@@ -114,7 +114,7 @@ void Unpack::Init(size_t WinSize,bool Solid)
if (!Fragmented)
{
// Clean the window to generate the same output when unpacking corrupt
- // RAR files, which may access to unused areas of sliding dictionary.
+ // RAR files, which may access unused areas of sliding dictionary.
memset(NewWindow,0,WinSize);
// If Window is not NULL, it means that window size has grown.
@@ -122,7 +122,7 @@ void Unpack::Init(size_t WinSize,bool Solid)
// RAR archiving code does not allow it in solid streams now,
// but let's implement it anyway just in case we'll change it sometimes.
if (Grow)
- for (size_t I=1;I<MaxWinSize;I++)
+ for (size_t I=1;I<=MaxWinSize;I++)
NewWindow[(UnpPtr-I)&(WinSize-1)]=Window[(UnpPtr-I)&(MaxWinSize-1)];
if (Window!=NULL)
@@ -137,21 +137,27 @@ void Unpack::Init(size_t WinSize,bool Solid)
void Unpack::DoUnpack(int Method,bool Solid)
{
+ // Methods <50 will crash in Fragmented mode when accessing NULL Window.
+ // They cannot be called in such mode now, but we check it below anyway
+ // just for extra safety.
switch(Method)
{
#ifndef SFX_MODULE
case 15: // rar 1.5 compression
- Unpack15(Solid);
+ if (!Fragmented)
+ Unpack15(Solid);
break;
case 20: // rar 2.x compression
case 26: // files larger than 2GB
- Unpack20(Solid);
+ if (!Fragmented)
+ Unpack20(Solid);
break;
#endif
case 29: // rar 3.x compression
- Unpack29(Solid);
+ if (!Fragmented)
+ Unpack29(Solid);
break;
- case 0: // RAR 5.0 compression algorithm 0.
+ case 50: // RAR 5.0 compression algorithm.
#ifdef RAR_SMP
if (MaxUserThreads>1)
{
@@ -184,9 +190,11 @@ void Unpack::UnpInitData(bool Solid)
memset(&BlockTables,0,sizeof(BlockTables));
UnpPtr=WrPtr=0;
WriteBorder=Min(MaxWinSize,UNPACK_MAX_WRITE)&MaxWinMask;
-
- InitFilters();
}
+ // Filters never share several solid files, so we can safely reset them
+ // even in solid archive.
+ InitFilters();
+
Inp.InitBitInput();
WrittenFileSize=0;
ReadTop=0;
@@ -251,7 +259,7 @@ void Unpack::MakeDecodeTables(byte *LengthTable,DecodeTable *Dec,uint Size)
// Prepare the copy of DecodePos. We'll modify this copy below,
// so we cannot use the original DecodePos.
- uint CopyDecodePos[16];
+ uint CopyDecodePos[ASIZE(Dec->DecodePos)];
memcpy(CopyDecodePos,Dec->DecodePos,sizeof(CopyDecodePos));
// For every bit length in the bit length table and so for every item
@@ -311,7 +319,7 @@ void Unpack::MakeDecodeTables(byte *LengthTable,DecodeTable *Dec,uint Size)
// Find the upper limit for current bit field and adjust the bit length
// accordingly if necessary.
- while (BitField>=Dec->DecodeLen[CurBitLength] && CurBitLength<ASIZE(Dec->DecodeLen))
+ while (CurBitLength<ASIZE(Dec->DecodeLen) && BitField>=Dec->DecodeLen[CurBitLength])
CurBitLength++;
// Translation of right aligned bit string to bit length.
@@ -329,14 +337,17 @@ void Unpack::MakeDecodeTables(byte *LengthTable,DecodeTable *Dec,uint Size)
// Now we can calculate the position in the code list. It is the sum
// of first position for current bit length and right aligned distance
// between our bit field and start code for current bit length.
- uint Pos=Dec->DecodePos[CurBitLength]+Dist;
-
- if (Pos<Size) // Safety check for damaged archives.
+ uint Pos;
+ if (CurBitLength<ASIZE(Dec->DecodePos) &&
+ (Pos=Dec->DecodePos[CurBitLength]+Dist)<Size)
{
// Define the code to alphabet number translation.
Dec->QuickNum[Code]=Dec->DecodeNum[Pos];
}
else
+ {
+ // Can be here for length table filled with zeroes only (empty).
Dec->QuickNum[Code]=0;
+ }
}
}
diff --git a/src/thirdparty/unrar/unpack.hpp b/src/thirdparty/unrar/unpack.hpp
index 2c0ed48dd..ab15554ea 100644
--- a/src/thirdparty/unrar/unpack.hpp
+++ b/src/thirdparty/unrar/unpack.hpp
@@ -4,14 +4,28 @@
// Maximum allowed number of compressed bits processed in quick mode.
#define MAX_QUICK_DECODE_BITS 10
-// Maximum number of filters per entire data block.
+// Maximum number of filters per entire data block. Must be at least
+// twice more than MAX_PACK_FILTERS to store filters from two data blocks.
#define MAX_UNPACK_FILTERS 8192
// Maximum number of filters per entire data block for RAR3 unpack.
-#define MAX3_FILTERS 1024
+// Must be at least twice more than v3_MAX_PACK_FILTERS to store filters
+// from two data blocks.
+#define MAX3_UNPACK_FILTERS 8192
-// Write data in 4 MB or smaller blocks.
-#define UNPACK_MAX_WRITE 0x400000
+// Limit maximum number of channels in RAR3 delta filter to some reasonable
+// value to prevent too slow processing of corrupt archives with invalid
+// channels number. Must be equal or larger than v3_MAX_FILTER_CHANNELS.
+// No need to provide it for RAR5, which uses only 5 bits to store channels.
+#define MAX3_UNPACK_CHANNELS 1024
+
+// Maximum size of single filter block. We restrict it to limit memory
+// allocation. Must be equal or larger than MAX_ANALYZE_SIZE.
+#define MAX_FILTER_BLOCK_SIZE 0x400000
+
+// Write data in 4 MB or smaller blocks. Must not exceed PACK_MAX_WRITE,
+// so we keep number of buffered filter in unpacker reasonable.
+#define UNPACK_MAX_WRITE 0x400000
// Decode compressed bit fields to alphabet numbers.
struct DecodeTable:PackDef
@@ -143,10 +157,9 @@ struct UnpackFilter30
{
unsigned int BlockStart;
unsigned int BlockLength;
- unsigned int ExecCount;
bool NextWindow;
- // position of parent filter in Filters array used as prototype for filter
+ // Position of parent filter in Filters array used as prototype for filter
// in PrgStack array. Not defined for filters in Filters array.
unsigned int ParentFilter;
@@ -309,7 +322,7 @@ class Unpack:PackDef
void UnpInitData30(bool Solid);
void Unpack29(bool Solid);
- void InitFilters30();
+ void InitFilters30(bool Solid);
bool ReadEndOfBlock();
bool ReadVMCode();
bool ReadVMCodePPM();
diff --git a/src/thirdparty/unrar/unpack15.cpp b/src/thirdparty/unrar/unpack15.cpp
index 131d2665c..0bcb31454 100644
--- a/src/thirdparty/unrar/unpack15.cpp
+++ b/src/thirdparty/unrar/unpack15.cpp
@@ -401,6 +401,14 @@ void Unpack::GetFlagsBuf()
unsigned int Flags,NewFlagsPlace;
unsigned int FlagsPlace=DecodeNum(Inp.fgetbits(),STARTHF2,DecHf2,PosHf2);
+ // Our Huffman table stores 257 items and needs all them in other parts
+ // of code such as when StMode is on, so the first item is control item.
+ // While normally we do not use the last item to code the flags byte here,
+ // we need to check for value 256 when unpacking in case we unpack
+ // a corrupt archive.
+ if (FlagsPlace>=sizeof(ChSetC)/sizeof(ChSetC[0]))
+ return;
+
while (1)
{
Flags=ChSetC[FlagsPlace];
diff --git a/src/thirdparty/unrar/unpack30.cpp b/src/thirdparty/unrar/unpack30.cpp
index 980df0244..d558806a3 100644
--- a/src/thirdparty/unrar/unpack30.cpp
+++ b/src/thirdparty/unrar/unpack30.cpp
@@ -310,11 +310,11 @@ bool Unpack::ReadVMCode()
// Try to read the new buffer if only one byte is left.
// But if we read all bytes except the last, one byte is enough.
if (Inp.InAddr>=ReadTop-1 && !UnpReadBuf30() && I<Length-1)
- return(false);
+ return false;
VMCode[I]=Inp.getbits()>>8;
Inp.addbits(8);
}
- return(AddVMCode(FirstByte,&VMCode[0],Length));
+ return AddVMCode(FirstByte,&VMCode[0],Length);
}
@@ -322,7 +322,7 @@ bool Unpack::ReadVMCodePPM()
{
unsigned int FirstByte=SafePPMDecodeChar();
if ((int)FirstByte==-1)
- return(false);
+ return false;
int Length=(FirstByte & 7)+1;
if (Length==7)
{
@@ -336,10 +336,10 @@ bool Unpack::ReadVMCodePPM()
{
int B1=SafePPMDecodeChar();
if (B1==-1)
- return(false);
+ return false;
int B2=SafePPMDecodeChar();
if (B2==-1)
- return(false);
+ return false;
Length=B1*256+B2;
}
Array<byte> VMCode(Length);
@@ -350,7 +350,7 @@ bool Unpack::ReadVMCodePPM()
return(false);
VMCode[I]=Ch;
}
- return(AddVMCode(FirstByte,&VMCode[0],Length));
+ return AddVMCode(FirstByte,&VMCode[0],Length);
}
@@ -361,11 +361,11 @@ bool Unpack::AddVMCode(uint FirstByte,byte *Code,int CodeSize)
VM.Init();
uint FiltPos;
- if (FirstByte & 0x80)
+ if ((FirstByte & 0x80)!=0)
{
FiltPos=RarVM::ReadData(VMCodeInp);
if (FiltPos==0)
- InitFilters30();
+ InitFilters30(false);
else
FiltPos--;
}
@@ -373,7 +373,7 @@ bool Unpack::AddVMCode(uint FirstByte,byte *Code,int CodeSize)
FiltPos=LastFilter; // Use the same filter as last time.
if (FiltPos>Filters30.Size() || FiltPos>OldFilterLengths.Size())
- return(false);
+ return false;
LastFilter=FiltPos;
bool NewFilter=(FiltPos==Filters30.Size());
@@ -382,7 +382,7 @@ bool Unpack::AddVMCode(uint FirstByte,byte *Code,int CodeSize)
UnpackFilter30 *Filter;
if (NewFilter) // New filter code, never used before since VM reset.
{
- if (FiltPos>MAX3_FILTERS)
+ if (FiltPos>MAX3_UNPACK_FILTERS)
{
// Too many different filters, corrupt archive.
delete StackFilter;
@@ -393,18 +393,16 @@ bool Unpack::AddVMCode(uint FirstByte,byte *Code,int CodeSize)
Filters30[Filters30.Size()-1]=Filter=new UnpackFilter30;
StackFilter->ParentFilter=(uint)(Filters30.Size()-1);
- // Reserve one item, where we store the data block length of our new
- // filter entry. We'll set it to real block length below, after reading
- // it. But we need to initialize it now, because when processing corrupt
+ // Reserve one item to store the data block length of our new filter
+ // entry. We'll set it to real block length below, after reading it.
+ // But we need to initialize it now, because when processing corrupt
// data, we can access this item even before we set it to real value.
OldFilterLengths.Push(0);
- Filter->ExecCount=0;
}
else // Filter was used in the past.
{
Filter=Filters30[FiltPos];
StackFilter->ParentFilter=FiltPos;
- Filter->ExecCount++;
}
int EmptyCount=0;
@@ -418,18 +416,22 @@ bool Unpack::AddVMCode(uint FirstByte,byte *Code,int CodeSize)
}
if (EmptyCount==0)
{
+ if (PrgStack.Size()>MAX3_UNPACK_FILTERS)
+ {
+ delete StackFilter;
+ return false;
+ }
PrgStack.Add(1);
EmptyCount=1;
}
int StackPos=(int)(PrgStack.Size()-EmptyCount);
PrgStack[StackPos]=StackFilter;
- StackFilter->ExecCount=Filter->ExecCount;
uint BlockStart=RarVM::ReadData(VMCodeInp);
- if (FirstByte & 0x40)
+ if ((FirstByte & 0x40)!=0)
BlockStart+=258;
StackFilter->BlockStart=(uint)((BlockStart+UnpPtr)&MaxWinMask);
- if (FirstByte & 0x20)
+ if ((FirstByte & 0x20)!=0)
{
StackFilter->BlockLength=RarVM::ReadData(VMCodeInp);
@@ -439,9 +441,9 @@ bool Unpack::AddVMCode(uint FirstByte,byte *Code,int CodeSize)
else
{
// Set the data block size to same value as the previous block size
- // for same filter. It is possible on corrupt data to access here a new
- // and not filled yet item of OldFilterLengths array. This is why above
- // we set new OldFilterLengths items to zero.
+ // for same filter. It is possible for corrupt data to access a new
+ // and not filled yet item of OldFilterLengths array here. This is why
+ // we set new OldFilterLengths items to zero above.
StackFilter->BlockLength=FiltPos<OldFilterLengths.Size() ? OldFilterLengths[FiltPos]:0;
}
@@ -450,13 +452,11 @@ bool Unpack::AddVMCode(uint FirstByte,byte *Code,int CodeSize)
// DebugLog("\nNextWindow: UnpPtr=%08x WrPtr=%08x BlockStart=%08x",UnpPtr,WrPtr,BlockStart);
memset(StackFilter->Prg.InitR,0,sizeof(StackFilter->Prg.InitR));
- StackFilter->Prg.InitR[3]=VM_GLOBALMEMADDR;
StackFilter->Prg.InitR[4]=StackFilter->BlockLength;
- StackFilter->Prg.InitR[5]=StackFilter->ExecCount;
- if (FirstByte & 0x10) // set registers to optional parameters if any
+ if ((FirstByte & 0x10)!=0) // Set registers to optional parameters if any.
{
- unsigned int InitMask=VMCodeInp.fgetbits()>>9;
+ uint InitMask=VMCodeInp.fgetbits()>>9;
VMCodeInp.faddbits(7);
for (int I=0;I<7;I++)
if (InitMask & (1<<I))
@@ -467,61 +467,20 @@ bool Unpack::AddVMCode(uint FirstByte,byte *Code,int CodeSize)
{
uint VMCodeSize=RarVM::ReadData(VMCodeInp);
if (VMCodeSize>=0x10000 || VMCodeSize==0)
- return(false);
+ return false;
Array<byte> VMCode(VMCodeSize);
for (uint I=0;I<VMCodeSize;I++)
{
if (VMCodeInp.Overflow(3))
- return(false);
+ return false;
VMCode[I]=VMCodeInp.fgetbits()>>8;
VMCodeInp.faddbits(8);
}
VM.Prepare(&VMCode[0],VMCodeSize,&Filter->Prg);
}
- StackFilter->Prg.AltCmd=&Filter->Prg.Cmd[0];
- StackFilter->Prg.CmdCount=Filter->Prg.CmdCount;
+ StackFilter->Prg.Type=Filter->Prg.Type;
- size_t StaticDataSize=Filter->Prg.StaticData.Size();
- if (StaticDataSize>0 && StaticDataSize<VM_GLOBALMEMSIZE)
- {
- // read statically defined data contained in DB commands
- StackFilter->Prg.StaticData.Add(StaticDataSize);
- memcpy(&StackFilter->Prg.StaticData[0],&Filter->Prg.StaticData[0],StaticDataSize);
- }
-
- if (StackFilter->Prg.GlobalData.Size()<VM_FIXEDGLOBALSIZE)
- {
- StackFilter->Prg.GlobalData.Reset();
- StackFilter->Prg.GlobalData.Add(VM_FIXEDGLOBALSIZE);
- }
- byte *GlobalData=&StackFilter->Prg.GlobalData[0];
- for (int I=0;I<7;I++)
- VM.SetLowEndianValue((uint *)&GlobalData[I*4],StackFilter->Prg.InitR[I]);
- VM.SetLowEndianValue((uint *)&GlobalData[0x1c],StackFilter->BlockLength);
- VM.SetLowEndianValue((uint *)&GlobalData[0x20],0);
- VM.SetLowEndianValue((uint *)&GlobalData[0x2c],StackFilter->ExecCount);
- memset(&GlobalData[0x30],0,16);
-
- if (FirstByte & 8) // Put the data block passed as parameter if any.
- {
- if (VMCodeInp.Overflow(3))
- return(false);
- uint DataSize=RarVM::ReadData(VMCodeInp);
- if (DataSize>VM_GLOBALMEMSIZE-VM_FIXEDGLOBALSIZE)
- return(false);
- size_t CurSize=StackFilter->Prg.GlobalData.Size();
- if (CurSize<DataSize+VM_FIXEDGLOBALSIZE)
- StackFilter->Prg.GlobalData.Add(DataSize+VM_FIXEDGLOBALSIZE-CurSize);
- byte *GlobalData=&StackFilter->Prg.GlobalData[VM_FIXEDGLOBALSIZE];
- for (uint I=0;I<DataSize;I++)
- {
- if (VMCodeInp.Overflow(3))
- return(false);
- GlobalData[I]=VMCodeInp.fgetbits()>>8;
- VMCodeInp.faddbits(8);
- }
- }
- return(true);
+ return true;
}
@@ -529,7 +488,7 @@ bool Unpack::UnpReadBuf30()
{
int DataSize=ReadTop-Inp.InAddr; // Data left to process.
if (DataSize<0)
- return(false);
+ return false;
if (Inp.InAddr>BitInput::MAX_SIZE/2)
{
// If we already processed more than half of buffer, let's move
@@ -549,7 +508,7 @@ bool Unpack::UnpReadBuf30()
if (ReadCode>0)
ReadTop+=ReadCode;
ReadBorder=ReadTop-30;
- return(ReadCode!=-1);
+ return ReadCode!=-1;
}
@@ -598,25 +557,8 @@ void Unpack::UnpWriteBuf30()
VM_PreparedProgram *ParentPrg=&Filters30[flt->ParentFilter]->Prg;
VM_PreparedProgram *Prg=&flt->Prg;
- if (ParentPrg->GlobalData.Size()>VM_FIXEDGLOBALSIZE)
- {
- // Copy global data from previous script execution if any.
- Prg->GlobalData.Alloc(ParentPrg->GlobalData.Size());
- memcpy(&Prg->GlobalData[VM_FIXEDGLOBALSIZE],&ParentPrg->GlobalData[VM_FIXEDGLOBALSIZE],ParentPrg->GlobalData.Size()-VM_FIXEDGLOBALSIZE);
- }
-
ExecuteCode(Prg);
- if (Prg->GlobalData.Size()>VM_FIXEDGLOBALSIZE)
- {
- // Save global data for next script execution.
- if (ParentPrg->GlobalData.Size()<Prg->GlobalData.Size())
- ParentPrg->GlobalData.Alloc(Prg->GlobalData.Size());
- memcpy(&ParentPrg->GlobalData[VM_FIXEDGLOBALSIZE],&Prg->GlobalData[VM_FIXEDGLOBALSIZE],Prg->GlobalData.Size()-VM_FIXEDGLOBALSIZE);
- }
- else
- ParentPrg->GlobalData.Reset();
-
byte *FilteredData=Prg->FilteredData;
unsigned int FilteredDataSize=Prg->FilteredDataSize;
@@ -625,6 +567,7 @@ void Unpack::UnpWriteBuf30()
while (I+1<PrgStack.Size())
{
UnpackFilter30 *NextFilter=PrgStack[I+1];
+ // It is required to check NextWindow here.
if (NextFilter==NULL || NextFilter->BlockStart!=BlockStart ||
NextFilter->BlockLength!=FilteredDataSize || NextFilter->NextWindow)
break;
@@ -636,25 +579,8 @@ void Unpack::UnpWriteBuf30()
VM_PreparedProgram *ParentPrg=&Filters30[NextFilter->ParentFilter]->Prg;
VM_PreparedProgram *NextPrg=&NextFilter->Prg;
- if (ParentPrg->GlobalData.Size()>VM_FIXEDGLOBALSIZE)
- {
- // Copy global data from previous script execution if any.
- NextPrg->GlobalData.Alloc(ParentPrg->GlobalData.Size());
- memcpy(&NextPrg->GlobalData[VM_FIXEDGLOBALSIZE],&ParentPrg->GlobalData[VM_FIXEDGLOBALSIZE],ParentPrg->GlobalData.Size()-VM_FIXEDGLOBALSIZE);
- }
-
ExecuteCode(NextPrg);
- if (NextPrg->GlobalData.Size()>VM_FIXEDGLOBALSIZE)
- {
- // Save global data for next script execution.
- if (ParentPrg->GlobalData.Size()<NextPrg->GlobalData.Size())
- ParentPrg->GlobalData.Alloc(NextPrg->GlobalData.Size());
- memcpy(&ParentPrg->GlobalData[VM_FIXEDGLOBALSIZE],&NextPrg->GlobalData[VM_FIXEDGLOBALSIZE],NextPrg->GlobalData.Size()-VM_FIXEDGLOBALSIZE);
- }
- else
- ParentPrg->GlobalData.Reset();
-
FilteredData=NextPrg->FilteredData;
FilteredDataSize=NextPrg->FilteredDataSize;
I++;
@@ -690,13 +616,8 @@ void Unpack::UnpWriteBuf30()
void Unpack::ExecuteCode(VM_PreparedProgram *Prg)
{
- if (Prg->GlobalData.Size()>0)
- {
- Prg->InitR[6]=(uint)WrittenFileSize;
- VM.SetLowEndianValue((uint *)&Prg->GlobalData[0x24],(uint)WrittenFileSize);
- VM.SetLowEndianValue((uint *)&Prg->GlobalData[0x28],(uint)(WrittenFileSize>>32));
- VM.Execute(Prg);
- }
+ Prg->InitR[6]=(uint)WrittenFileSize;
+ VM.Execute(Prg);
}
@@ -816,21 +737,23 @@ void Unpack::UnpInitData30(bool Solid)
memset(UnpOldTable,0,sizeof(UnpOldTable));
PPMEscChar=2;
UnpBlockType=BLOCK_LZ;
-
- InitFilters30();
}
+ InitFilters30(Solid);
}
-void Unpack::InitFilters30()
+void Unpack::InitFilters30(bool Solid)
{
- OldFilterLengths.Reset();
- LastFilter=0;
+ if (!Solid)
+ {
+ OldFilterLengths.SoftReset();
+ LastFilter=0;
- for (size_t I=0;I<Filters30.Size();I++)
- delete Filters30[I];
- Filters30.Reset();
+ for (size_t I=0;I<Filters30.Size();I++)
+ delete Filters30[I];
+ Filters30.SoftReset();
+ }
for (size_t I=0;I<PrgStack.Size();I++)
delete PrgStack[I];
- PrgStack.Reset();
+ PrgStack.SoftReset();
}
diff --git a/src/thirdparty/unrar/unpack50.cpp b/src/thirdparty/unrar/unpack50.cpp
index d1188ee85..aaa8c2b98 100644
--- a/src/thirdparty/unrar/unpack50.cpp
+++ b/src/thirdparty/unrar/unpack50.cpp
@@ -173,6 +173,8 @@ bool Unpack::ReadFilter(BitInput &Inp,UnpackFilter &Filter)
Filter.BlockStart=ReadFilterData(Inp);
Filter.BlockLength=ReadFilterData(Inp);
+ if (Filter.BlockLength>MAX_FILTER_BLOCK_SIZE)
+ Filter.BlockLength=0;
Filter.Type=Inp.fgetbits()>>13;
Inp.faddbits(3);
@@ -189,11 +191,15 @@ bool Unpack::ReadFilter(BitInput &Inp,UnpackFilter &Filter)
bool Unpack::AddFilter(UnpackFilter &Filter)
{
- if (Filters.Size()>=MAX_UNPACK_FILTERS-1)
+ if (Filters.Size()>=MAX_UNPACK_FILTERS)
+ {
UnpWriteBuf(); // Write data, apply and flush filters.
+ if (Filters.Size()>=MAX_UNPACK_FILTERS)
+ InitFilters(); // Still too many filters, prevent excessive memory use.
+ }
// If distance to filter start is that large that due to circular dictionary
- // mode it points to old not written yet data, then we set 'NextWindow'
+ // mode now it points to old not written yet data, then we set 'NextWindow'
// flag and process this filter only after processing that older data.
Filter.NextWindow=WrPtr!=UnpPtr && ((WrPtr-UnpPtr)&MaxWinMask)<=Filter.BlockStart;
@@ -250,7 +256,7 @@ void Unpack::UnpWriteBuf()
for (size_t I=0;I<Filters.Size();I++)
{
// Here we apply filters to data which we need to write.
- // We always copy data to virtual machine memory before processing.
+ // We always copy data to another memory block before processing.
// We cannot process them just in place in Window buffer, because
// these data can be used for future string matches, so we must
// preserve them in original form.
@@ -261,7 +267,7 @@ void Unpack::UnpWriteBuf()
if (flt->NextWindow)
{
// Here we skip filters which have block start in current data range
- // due to address warp around in circular dictionary, but actually
+ // due to address wrap around in circular dictionary, but actually
// belong to next dictionary block. If such filter start position
// is included to current write range, then we reset 'NextWindow' flag.
// In fact we can reset it even without such check, because current
@@ -288,7 +294,7 @@ void Unpack::UnpWriteBuf()
}
if (BlockLength<=WriteSizeLeft)
{
- if (BlockLength>0)
+ if (BlockLength>0) // We set it to 0 also for invalid filters.
{
uint BlockEnd=(BlockStart+BlockLength)&MaxWinMask;
@@ -372,7 +378,8 @@ void Unpack::UnpWriteBuf()
}
// We prefer to write data in blocks not exceeding UNPACK_MAX_WRITE
- // instead of potentially huge MaxWinSize blocks.
+ // instead of potentially huge MaxWinSize blocks. It also allows us
+ // to keep the size of Filters array reasonable.
WriteBorder=(UnpPtr+Min(MaxWinSize,UNPACK_MAX_WRITE))&MaxWinMask;
// Choose the nearest among WriteBorder and WrPtr actual written border.
@@ -393,9 +400,11 @@ byte* Unpack::ApplyFilter(byte *Data,uint DataSize,UnpackFilter *Flt)
{
uint FileOffset=(uint)WrittenFileSize;
- const int FileSize=0x1000000;
+ const uint FileSize=0x1000000;
byte CmpByte2=Flt->Type==FILTER_E8E9 ? 0xe9:0xe8;
- for (uint CurPos=0;(int)CurPos<(int)DataSize-4;)
+ // DataSize is unsigned, so we use "CurPos+4" and not "DataSize-4"
+ // to avoid overflow for DataSize<4.
+ for (uint CurPos=0;CurPos+4<DataSize;)
{
byte CurByte=*(Data++);
CurPos++;
@@ -424,7 +433,9 @@ byte* Unpack::ApplyFilter(byte *Data,uint DataSize,UnpackFilter *Flt)
case FILTER_ARM:
{
uint FileOffset=(uint)WrittenFileSize;
- for (uint CurPos=0;(int)CurPos<(int)DataSize-3;CurPos+=4)
+ // DataSize is unsigned, so we use "CurPos+3" and not "DataSize-3"
+ // to avoid overflow for DataSize<3.
+ for (uint CurPos=0;CurPos+3<DataSize;CurPos+=4)
{
byte *D=Data+CurPos;
if (D[3]==0xeb) // BL command with '1110' (Always) condition.
@@ -440,6 +451,8 @@ byte* Unpack::ApplyFilter(byte *Data,uint DataSize,UnpackFilter *Flt)
return SrcData;
case FILTER_DELTA:
{
+ // Unlike RAR3, we do not need to reject excessive channel
+ // values here, since RAR5 uses only 5 bits to store channel.
uint Channels=Flt->Channels,SrcPos=0;
FilterDstMemory.Alloc(DataSize);
@@ -570,7 +583,7 @@ bool Unpack::ReadTables(BitInput &Inp,UnpackBlockHeader &Header,UnpackBlockTable
else
{
ZeroCount+=2;
- while (ZeroCount-- > 0 && I<sizeof(BitLength)/sizeof(BitLength[0]))
+ while (ZeroCount-- > 0 && I<ASIZE(BitLength))
BitLength[I++]=0;
I--;
}
@@ -587,7 +600,7 @@ bool Unpack::ReadTables(BitInput &Inp,UnpackBlockHeader &Header,UnpackBlockTable
{
if (!Inp.ExternalBuffer && Inp.InAddr>ReadTop-5)
if (!UnpReadBuf())
- return(false);
+ return false;
int Number=DecodeNumber(Inp,&Tables.BD);
if (Number<16)
{
@@ -633,16 +646,16 @@ bool Unpack::ReadTables(BitInput &Inp,UnpackBlockHeader &Header,UnpackBlockTable
}
}
if (!Inp.ExternalBuffer && Inp.InAddr>ReadTop)
- return(false);
+ return false;
MakeDecodeTables(&Table[0],&Tables.LD,NC);
MakeDecodeTables(&Table[NC],&Tables.DD,DC);
MakeDecodeTables(&Table[NC+DC],&Tables.LDD,LDC);
MakeDecodeTables(&Table[NC+DC+LDC],&Tables.RD,RC);
- return(true);
+ return true;
}
void Unpack::InitFilters()
{
- Filters.Reset();
+ Filters.SoftReset();
}
diff --git a/src/thirdparty/unrar/unpack50mt.cpp b/src/thirdparty/unrar/unpack50mt.cpp
index 6015379cc..6f786adc9 100644
--- a/src/thirdparty/unrar/unpack50mt.cpp
+++ b/src/thirdparty/unrar/unpack50mt.cpp
@@ -43,6 +43,7 @@ void Unpack::InitMT()
{
// Typical number of items in RAR blocks does not exceed 0x4000.
CurData->DecodedAllocated=0x4100;
+ // It will be freed in the object destructor, not in this file.
CurData->Decoded=(UnpackDecodedItem *)malloc(CurData->DecodedAllocated*sizeof(UnpackDecodedItem));
if (CurData->Decoded==NULL)
ErrHandler.MemoryError();
@@ -80,6 +81,10 @@ void Unpack::Unpack5MT(bool Solid)
bool Done=false;
while (!Done)
{
+ // Data amount, which is guaranteed to fit block header and tables,
+ // so we can safely read them without additional checks.
+ const int TooSmallToProcess=1024;
+
int ReadSize=UnpIO->UnpRead(ReadBufMT+DataSize,(UNP_READ_SIZE_MT-DataSize)&~0xf);
if (ReadSize<0)
break;
@@ -87,13 +92,13 @@ void Unpack::Unpack5MT(bool Solid)
if (DataSize==0)
break;
- bool BufferProcessed=false;
+ // First read chunk can be small if we are near the end of volume
+ // and we want it to fit block header and tables.
+ if (ReadSize>0 && DataSize<TooSmallToProcess)
+ continue;
+
while (BlockStart<DataSize && !Done)
{
- // Data amount, which is guaranteed to fit block header and tables,
- // so we can safely read them without additional checks.
- const int TooSmallToProcess=1024;
-
uint BlockNumber=0,BlockNumberMT=0;
while (BlockNumber<MaxUserThreads*UNP_BLOCKS_PER_THREAD)
{
@@ -270,6 +275,7 @@ void Unpack::Unpack5MT(bool Solid)
}
}
}
+ UnpPtr&=MaxWinMask; // ProcessDecoded and maybe others can leave UnpPtr > MaxWinMask here.
UnpWriteBuf();
BlockHeader=UnpThreadData[LastBlockNum].BlockHeader;
@@ -323,9 +329,10 @@ void Unpack::UnpackDecode(UnpackThreadData &D)
if (D.DecodedSize>D.DecodedAllocated-8) // Filter can use several slots.
{
D.DecodedAllocated=D.DecodedAllocated*2;
- D.Decoded=(UnpackDecodedItem *)realloc(D.Decoded,D.DecodedAllocated*sizeof(UnpackDecodedItem));
- if (D.Decoded==NULL)
- ErrHandler.MemoryError();
+ void *Decoded=realloc(D.Decoded,D.DecodedAllocated*sizeof(UnpackDecodedItem));
+ if (Decoded==NULL)
+ ErrHandler.MemoryError(); // D.Decoded will be freed in the destructor.
+ D.Decoded=(UnpackDecodedItem *)Decoded;
}
UnpackDecodedItem *CurItem=D.Decoded+D.DecodedSize++;
@@ -451,7 +458,7 @@ bool Unpack::ProcessDecoded(UnpackThreadData &D)
if (Item->Type==UNPDT_LITERAL)
{
-#if defined(LITTLE_ENDIAN) && defined(PRESENT_INT32) && defined(ALLOW_MISALIGNED)
+#if defined(LITTLE_ENDIAN) && defined(ALLOW_MISALIGNED)
if (Item->Length==3 && UnpPtr<MaxWinSize-4)
{
*(uint32 *)(Window+UnpPtr)=*(uint32 *)Item->Literal;
diff --git a/src/thirdparty/unrar/unpackinline.cpp b/src/thirdparty/unrar/unpackinline.cpp
index 70b533dbb..1dc6980c5 100644
--- a/src/thirdparty/unrar/unpackinline.cpp
+++ b/src/thirdparty/unrar/unpackinline.cpp
@@ -44,6 +44,11 @@ _forceinline void Unpack::CopyString(uint Length,uint Distance)
else
while (Length>=8)
{
+ // In theory we still could overlap here.
+ // Supposing Distance == MaxWinSize - 1 we have memcpy(Src, Src + 1, 8).
+ // But for real RAR archives Distance <= MaxWinSize - MAX_LZ_MATCH
+ // always, so overlap here is impossible.
+
// This memcpy expanded inline by MSVC. We could also use uint64
// assignment, which seems to provide about the same speed.
memcpy(Dest,Src,8);
diff --git a/src/thirdparty/unrar/unrar.vcxproj b/src/thirdparty/unrar/unrar.vcxproj
index 3a0aafb89..f894079ac 100644
--- a/src/thirdparty/unrar/unrar.vcxproj
+++ b/src/thirdparty/unrar/unrar.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -25,74 +25,23 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PrecompiledHeaderFile>rar.hpp</PrecompiledHeaderFile>
- <PreprocessorDefinitions>_LIB;RARDLL;SILENT;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PrecompiledHeaderFile>rar.hpp</PrecompiledHeaderFile>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <PreprocessorDefinitions>_LIB;RARDLL;SILENT;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PrecompiledHeaderFile>rar.hpp</PrecompiledHeaderFile>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <PreprocessorDefinitions>_LIB;RARDLL;SILENT;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeaderFile>rar.hpp</PrecompiledHeaderFile>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
<PreprocessorDefinitions>_LIB;RARDLL;SILENT;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
@@ -120,6 +69,7 @@
<ClCompile Include="hash.cpp" />
<ClCompile Include="headers.cpp" />
<ClCompile Include="isnt.cpp" />
+ <ClCompile Include="list.cpp" />
<ClCompile Include="match.cpp" />
<ClCompile Include="options.cpp" />
<ClCompile Include="pathfn.cpp" />
@@ -132,6 +82,7 @@
<ClCompile Include="rawread.cpp" />
<ClCompile Include="rdwrfn.cpp" />
<ClCompile Include="recvol.cpp" />
+ <ClCompile Include="resource.cpp" />
<ClCompile Include="rijndael.cpp" />
<ClCompile Include="rs.cpp" />
<ClCompile Include="rs16.cpp" />
@@ -191,6 +142,7 @@
<ClInclude Include="raros.hpp" />
<ClInclude Include="rartypes.hpp" />
<ClInclude Include="rarvm.hpp" />
+ <ClInclude Include="rawint.hpp" />
<ClInclude Include="rawread.hpp" />
<ClInclude Include="rdwrfn.hpp" />
<ClInclude Include="recvol.hpp" />
@@ -211,7 +163,6 @@
<ClInclude Include="threadpool.hpp" />
<ClInclude Include="timefn.hpp" />
<ClInclude Include="ui.hpp" />
- <ClInclude Include="ulinks.hpp" />
<ClInclude Include="unicode.hpp" />
<ClInclude Include="unpack.hpp" />
<ClInclude Include="version.hpp" />
diff --git a/src/thirdparty/unrar/unrar.vcxproj.filters b/src/thirdparty/unrar/unrar.vcxproj.filters
index fa5898820..5a8f8aa24 100644
--- a/src/thirdparty/unrar/unrar.vcxproj.filters
+++ b/src/thirdparty/unrar/unrar.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
@@ -77,6 +77,9 @@
<ClCompile Include="isnt.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="list.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="match.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -107,6 +110,9 @@
<ClCompile Include="recvol.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="resource.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="rijndael.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -280,6 +286,9 @@
<ClInclude Include="rarvm.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="rawint.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
<ClInclude Include="rawread.hpp">
<Filter>Header Files</Filter>
</ClInclude>
@@ -337,9 +346,6 @@
<ClInclude Include="timefn.hpp">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="ulinks.hpp">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="unicode.hpp">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/thirdparty/unrar/version.hpp b/src/thirdparty/unrar/version.hpp
index ef0b664db..0730921bc 100644
--- a/src/thirdparty/unrar/version.hpp
+++ b/src/thirdparty/unrar/version.hpp
@@ -1,6 +1,6 @@
#define RARVER_MAJOR 5
-#define RARVER_MINOR 11
-#define RARVER_BETA 1
-#define RARVER_DAY 6
-#define RARVER_MONTH 8
-#define RARVER_YEAR 2014
+#define RARVER_MINOR 50
+#define RARVER_BETA 5
+#define RARVER_DAY 2
+#define RARVER_MONTH 7
+#define RARVER_YEAR 2017
diff --git a/src/thirdparty/unrar/volume.cpp b/src/thirdparty/unrar/volume.cpp
index 8e317ba3f..5d9c4c50a 100644
--- a/src/thirdparty/unrar/volume.cpp
+++ b/src/thirdparty/unrar/volume.cpp
@@ -42,7 +42,7 @@ bool MergeArchive(Archive &Arc,ComprDataIO *DataIO,bool ShowFileName,wchar Comma
#endif
bool FailedOpen=false,OldSchemeTested=false;
-#if !defined(GUI) && !defined(SILENT)
+#if !defined(SILENT)
// In -vp mode we force the pause before next volume even if it is present
// and even if we are on the hard disk. It is important when user does not
// want to process partially downloaded volumes preliminary.
@@ -93,13 +93,11 @@ bool MergeArchive(Archive &Arc,ComprDataIO *DataIO,bool ShowFileName,wchar Comma
}
#endif
-#ifndef GUI
if (!Cmd->VolumePause && !IsRemovable(NextName))
{
FailedOpen=true;
break;
}
-#endif
#ifndef SILENT
if (Cmd->AllYes || !uiAskNextVolume(NextName,ASIZE(NextName)))
#endif
@@ -138,14 +136,12 @@ bool MergeArchive(Archive &Arc,ComprDataIO *DataIO,bool ShowFileName,wchar Comma
Arc.ConvertAttributes();
Arc.Seek(Arc.NextBlockPos-Arc.FileHead.PackSize,SEEK_SET);
}
-#ifndef GUI
if (ShowFileName)
{
mprintf(St(MExtrPoints),Arc.FileHead.FileName);
if (!Cmd->DisablePercentage)
mprintf(L" ");
}
-#endif
if (DataIO!=NULL)
{
if (HeaderType==HEAD_ENDARC)
@@ -247,7 +243,8 @@ bool DllVolChange(RAROptions *Cmd,wchar *NextName,size_t NameSize)
// We quit only on 'abort' condition, but not on 'name not changed'.
// It is legitimate for program to return the same name when waiting
// for currently non-existent volume.
- if (DllVolAborted)
+ // Also we quit to prevent an infinite loop if no callback is defined.
+ if (DllVolAborted || Cmd->Callback==NULL && Cmd->ChangeVolProc==NULL)
{
Cmd->DllError=ERAR_EOPEN;
return false;
diff --git a/src/thirdparty/unrar/win32acl.cpp b/src/thirdparty/unrar/win32acl.cpp
index 315d4db57..44d0bfa45 100644
--- a/src/thirdparty/unrar/win32acl.cpp
+++ b/src/thirdparty/unrar/win32acl.cpp
@@ -49,7 +49,7 @@ void ExtractACL20(Archive &Arc,const wchar *FileName)
si|=SACL_SECURITY_INFORMATION;
SECURITY_DESCRIPTOR *sd=(SECURITY_DESCRIPTOR *)&UnpData[0];
- int SetCode=SetFileSecurityW(FileName,si,sd);
+ int SetCode=SetFileSecurity(FileName,si,sd);
if (!SetCode)
{
diff --git a/src/thirdparty/unrar/win32lnk.cpp b/src/thirdparty/unrar/win32lnk.cpp
index f911be98e..a68ed75a2 100644
--- a/src/thirdparty/unrar/win32lnk.cpp
+++ b/src/thirdparty/unrar/win32lnk.cpp
@@ -40,23 +40,6 @@ bool CreateReparsePoint(CommandData *Cmd,const wchar *Name,FileHeader *hd)
PrivSet=true;
}
- CreatePath(Name,true);
-
- // 'DirTarget' check is important for Unix symlinks to directories.
- // Unix symlinks do not have their own 'directory' attribute.
- if (hd->Dir || hd->DirTarget)
- {
- if (!CreateDirectory(Name,NULL))
- return false;
- }
- else
- {
- HANDLE hFile=CreateFile(Name,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
- if (hFile == INVALID_HANDLE_VALUE)
- return false;
- CloseHandle(hFile);
- }
-
const DWORD BufSize=sizeof(REPARSE_DATA_BUFFER)+2*NM+1024;
Array<byte> Buf(BufSize);
REPARSE_DATA_BUFFER *rdb=(REPARSE_DATA_BUFFER *)&Buf[0];
@@ -79,6 +62,32 @@ bool CreateReparsePoint(CommandData *Cmd,const wchar *Name,FileHeader *hd)
size_t PrintLength=wcslen(PrintName);
bool AbsPath=WinPrefix;
+ // IsFullPath is not really needed here, AbsPath check is enough.
+ // We added it just for extra safety, in case some Windows version would
+ // allow to create absolute targets with SYMLINK_FLAG_RELATIVE.
+ // Use hd->FileName instead of Name, since Name can include the destination
+ // path as a prefix, which can confuse IsRelativeSymlinkSafe algorithm.
+ if (!Cmd->AbsoluteLinks && (AbsPath || IsFullPath(hd->RedirName) ||
+ !IsRelativeSymlinkSafe(Cmd,hd->FileName,Name,hd->RedirName)))
+ return false;
+
+ CreatePath(Name,true);
+
+ // 'DirTarget' check is important for Unix symlinks to directories.
+ // Unix symlinks do not have their own 'directory' attribute.
+ if (hd->Dir || hd->DirTarget)
+ {
+ if (!CreateDirectory(Name,NULL))
+ return false;
+ }
+ else
+ {
+ HANDLE hFile=CreateFile(Name,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
+ if (hFile == INVALID_HANDLE_VALUE)
+ return false;
+ CloseHandle(hFile);
+ }
+
if (hd->RedirType==FSREDIR_JUNCTION)
{
@@ -138,7 +147,10 @@ bool CreateReparsePoint(CommandData *Cmd,const wchar *Name,FileHeader *hd)
{
CloseHandle(hFile);
uiMsg(UIERROR_SLINKCREATE,UINULL,Name);
- if (GetLastError()==ERROR_PRIVILEGE_NOT_HELD)
+
+ DWORD LastError=GetLastError();
+ if ((LastError==ERROR_ACCESS_DENIED || LastError==ERROR_PRIVILEGE_NOT_HELD) &&
+ !IsUserAdmin())
uiMsg(UIERROR_NEEDADMIN);
ErrHandler.SysErrMsg();
ErrHandler.SetErrorCode(RARX_CREATE);
diff --git a/src/thirdparty/unrar/win32stm.cpp b/src/thirdparty/unrar/win32stm.cpp
index edcd7b5fa..9e24c13ec 100644
--- a/src/thirdparty/unrar/win32stm.cpp
+++ b/src/thirdparty/unrar/win32stm.cpp
@@ -78,7 +78,7 @@ void ExtractStreams20(Archive &Arc,const wchar *FileName)
#ifdef _WIN_ALL
-void ExtractStreams(Archive &Arc,const wchar *FileName)
+void ExtractStreams(Archive &Arc,const wchar *FileName,bool TestMode)
{
wchar FullName[NM+2];
if (FileName[0]!=0 && FileName[1]==0)
@@ -89,9 +89,6 @@ void ExtractStreams(Archive &Arc,const wchar *FileName)
else
wcsncpyz(FullName,FileName,ASIZE(FullName));
- byte *Data=&Arc.SubHead.SubData[0];
- size_t DataSize=Arc.SubHead.SubData.Size();
-
wchar StreamName[NM];
GetStreamNameNTFS(Arc,StreamName,ASIZE(StreamName));
if (*StreamName!=':')
@@ -101,6 +98,12 @@ void ExtractStreams(Archive &Arc,const wchar *FileName)
return;
}
+ if (TestMode)
+ {
+ Arc.ReadSubData(NULL,NULL);
+ return;
+ }
+
wcsncatz(FullName,StreamName,ASIZE(FullName));
FindData fd;
diff --git a/src/thirdparty/versions.txt b/src/thirdparty/versions.txt
index d626b01f2..e6bf80c65 100644
--- a/src/thirdparty/versions.txt
+++ b/src/thirdparty/versions.txt
@@ -1,19 +1,27 @@
Project Version
----------------------------------------
-CSizingControlBar 2.45
-LAV Filters 0.63-5-7ffa765 (custom build based on 0.63.0)
-Little CMS 2.6 (git 9c075b3)
+bs2b 3.1.0 (modified)
+CSizingControlBar 2.45 (modified)
+LAV Filters 0.70.1 (custom build based on stable v0.70.1)
+Little CMS 2.8 (d41071e)
Logitech SDK 3.01 (driver 8.00.100)
-MediaInfoLib 0.7.70
-Mhook 2.3 (modified)
+MediaInfoLib 0.7.97
+MinHook 1.3.3
MultiMon 28 Aug '03 (modified)
+NanoSVG git dc12d90
QuickTime SDK 7.3
+RapidJSON 1.0.2
RARFileSource 0.9.3 (modified)
RealMedia SDK -
ResizableLib 1.3
-SoundTouch 1.8.0
+sanear 0.2
+SoundTouch 1.9.0
+soxr 0.1.2
+tinyxml2 4.0.1
TreePropSheet 7 Mar '03 (modified)
-UnRAR 5.1.7
+UnRAR 5.5.6
VirtualDub 1.10.4
-ZenLib 0.4.29 r481
-zlib 1.2.8
+XmlRpcC4Win 1.0.13 (modified)
+ZenLib 0.4.35
+zita-resampler 1.3.0
+zlib 1.2.11
diff --git a/src/thirdparty/zita-resampler/zita-resampler.vcxproj b/src/thirdparty/zita-resampler/zita-resampler.vcxproj
new file mode 100644
index 000000000..706e846db
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler.vcxproj
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F3D02050-F39A-4103-8343-09285359A495}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <Import Project="..\..\platform.props" />
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <AdditionalIncludeDirectories>zita-resampler\libs;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="zita-resampler\libs\zita-resampler\resampler-table.h" />
+ <ClInclude Include="zita-resampler\libs\zita-resampler\resampler.h" />
+ <ClInclude Include="zita-resampler\libs\zita-resampler\vresampler.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="zita-resampler\libs\resampler-table.cc" />
+ <ClCompile Include="zita-resampler\libs\resampler.cc" />
+ <ClCompile Include="zita-resampler\libs\vresampler.cc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/thirdparty/zita-resampler/zita-resampler/AUTHORS b/src/thirdparty/zita-resampler/zita-resampler/AUTHORS
new file mode 100644
index 000000000..7ae619025
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/AUTHORS
@@ -0,0 +1 @@
+Fons Adriaensen <fons@linuxaudio.org>
diff --git a/src/thirdparty/zita-resampler/zita-resampler/COPYING b/src/thirdparty/zita-resampler/zita-resampler/COPYING
new file mode 100644
index 000000000..94a9ed024
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/COPYING
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/src/thirdparty/zita-resampler/zita-resampler/INSTALL b/src/thirdparty/zita-resampler/zita-resampler/INSTALL
new file mode 100644
index 000000000..b71e6fab2
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/INSTALL
@@ -0,0 +1,31 @@
+Dependencies
+------------
+
+The zita-resampler library does not depend on any
+non-standard libraries.
+
+The 'zresample' and 'zretune' application depend on libsndfile
+and the corresponding headers.
+
+Installing the library
+----------------------
+
+To make and install the library, cd to the libs directory,
+make, sudo make install. This will install the lib and
+header file in /usr/lib and /usr/include. To install in
+any other directory, modify the definition of 'PREFIX' in
+the Makefile.
+After the install you can do a 'make clean' to return the
+libs directory to its original state.
+
+
+Installing the application(s)
+----------------------------
+
+To make and install the application(s), you first need to
+make and install the library. Then cd to the apps directory,
+make, sudo make install. This will install the apps in
+/usr/local/bin. To install in other any directory, modify
+the definition of 'PREFIX' in the Makefile.
+After the install you can do a 'make clean' to return the
+apps directory to its original state.
diff --git a/src/thirdparty/zita-resampler/zita-resampler/README b/src/thirdparty/zita-resampler/zita-resampler/README
new file mode 100644
index 000000000..1ebd8a6ba
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/README
@@ -0,0 +1,45 @@
+Zita-resampler is a C++ library for sample rate conversion of
+audio signals. Full documentation is available in HTML format,
+see the 'docs' directory.
+
+
+Release 1.3.0 (26/10/2012)
+---------------------------
+
+* Bugfix for 64-bit systems.
+
+
+Release 1.2.0 (25/09/2012)
+---------------------------
+
+* Added the zretune application and its manpage.
+
+
+Release 1.1.0 (26/01/2012)
+---------------------------
+
+* VResampler class added - provides arbitrary and variable
+ resampling ratio, see docs.
+
+* This release is NOT binary compatible with previous ones
+ (0.x.x) and requires recompilation of applications using it.
+
+* This release is API compatible with the previous one. But if
+ you are using the now deprecated filtlen() function please
+ replace this by inpsize() which provides the same information.
+
+* The inpdist() function has been added, see docs.
+
+* The ratio_a() and ratio_b() calls have been removed, if this
+ is a problem (I'd be surprised) they can be added again.
+
+* The include files are now in $PREFIX/include/zita-resampler/.
+ Please DO remove any old ones manually after installing this
+ version. Compiling using the old includes and linking with
+ the new library will create havoc.
+
+* #defines and static functions are added for compile time and
+ run time version checking, see resampler-table.h.
+
+--
+FA
diff --git a/src/thirdparty/zita-resampler/zita-resampler/apps/Makefile b/src/thirdparty/zita-resampler/zita-resampler/apps/Makefile
new file mode 100644
index 000000000..a0f56ae32
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/apps/Makefile
@@ -0,0 +1,73 @@
+# ----------------------------------------------------------------------------
+#
+# Copyright (C) 2006-2011 Fons Adriaensen <fons@linuxaudio.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http:#www.gnu.org/licenses/>.
+#
+# ----------------------------------------------------------------------------
+
+
+PREFIX = /usr/local
+SUFFIX := $(shell uname -m | sed -e 's/^unknown/$//' -e 's/^i.86/$//' -e 's/^x86_64/$/64/')
+LIBDIR = lib$(SUFFIX)
+DISTDIR = zresample-$(VERSION)
+VERSION = 0.4.0
+MANDIR = /usr/share/man/man1
+LDFLAGS += -L$(PREFIX)/$(LIBDIR)
+CPPFLAGS += -MMD -MP -DVERSION=\"$(VERSION)\"
+CXXFLAGS += -O3 -ffast-math -Wall
+CXXFLAGS += -march=native
+
+
+all: zresample zretune zresample.1.gz zretune.1.gz
+
+
+ZRESAMPLE_O = zresample.o audiofile.o dither.o
+zresample: LDLIBS += -lzita-resampler -lsndfile -lrt
+zresample: $(ZRESAMPLE_O)
+ g++ $(LDFLAGS) -o $@ $(ZRESAMPLE_O) $(LDLIBS)
+$(ZRESAMPLE_O):
+-include $(ZRESAMPLE_O:%.o=%.d)
+
+
+ZRETUNE_O = zretune.o audiofile.o dither.o
+zretune: LDLIBS += -lzita-resampler -lsndfile -lrt
+zretune: $(ZRETUNE_O)
+ g++ $(LDFLAGS) -o $@ $(ZRETUNE_O) $(LDLIBS)
+$(ZRETUNE_O):
+-include $(ZRETUNE_O:%.o=%.d)
+
+
+zresample.1.gz: zresample.1
+ gzip -c zresample.1 > zresample.1.gz
+
+zretune.1.gz: zretune.1
+ gzip -c zretune.1 > zretune.1.gz
+
+
+install: all
+ install -Dm 755 zresample $(DESTDIR)$(PREFIX)/bin/zresample
+ install -Dm 755 zretune $(DESTDIR)$(PREFIX)/bin/zretune
+ install -Dm 644 zresample.1.gz $(DESTDIR)$(MANDIR)/zresample.1.gz
+ install -Dm 644 zretune.1.gz $(DESTDIR)$(MANDIR)/zretune.1.gz
+
+uninstall:
+ /bin/rm -f $(DESTDIR)$(PREFIX)/bin/zresample
+ /bin/rm -f $(DESTDIR)$(PREFIX)/bin/zretune
+ /bin/rm -f $(MANDIR)/zresample.1.gz
+ /bin/rm -f $(MANDIR)/zretune.1.gz
+
+clean:
+ /bin/rm -f *~ *.o *.a *.d *.so *.gz zresample zretune
+
diff --git a/src/thirdparty/zita-resampler/zita-resampler/apps/audiofile.cc b/src/thirdparty/zita-resampler/zita-resampler/apps/audiofile.cc
new file mode 100644
index 000000000..f6c3c7db1
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/apps/audiofile.cc
@@ -0,0 +1,270 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2011 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#include <stdlib.h>
+#include <string.h>
+#include "audiofile.h"
+
+
+Audiofile::Audiofile (void)
+{
+ reset ();
+}
+
+
+Audiofile::~Audiofile (void)
+{
+ close ();
+}
+
+
+void Audiofile::reset (void)
+{
+ _sndfile = 0;
+ _mode = MODE_NONE;
+ _type = TYPE_OTHER;
+ _form = FORM_OTHER;
+ _rate = 0;
+ _chan = 0;
+ _size = 0;
+ _dith_type = 0;
+ _dith_proc = 0;
+ _dith_buff = 0;
+}
+
+
+int Audiofile::open_read (const char *name)
+{
+ SF_INFO I;
+
+ if (_mode) return ERR_MODE;
+ reset ();
+
+ if ((_sndfile = sf_open (name, SFM_READ, &I)) == 0) return ERR_OPEN;
+
+ _mode = MODE_READ;
+
+ switch (I.format & SF_FORMAT_TYPEMASK)
+ {
+ case SF_FORMAT_CAF:
+ _type = TYPE_CAF;
+ break;
+ case SF_FORMAT_WAV:
+ _type = TYPE_WAV;
+ break;
+ case SF_FORMAT_WAVEX:
+ if (sf_command (_sndfile, SFC_WAVEX_GET_AMBISONIC, 0, 0) == SF_AMBISONIC_B_FORMAT)
+ _type = TYPE_AMB;
+ else
+ _type = TYPE_WAV;
+ }
+
+ switch (I.format & SF_FORMAT_SUBMASK)
+ {
+ case SF_FORMAT_PCM_16:
+ _form = FORM_16BIT;
+ break;
+ case SF_FORMAT_PCM_24:
+ _form = FORM_24BIT;
+ break;
+ case SF_FORMAT_PCM_32:
+ _form = FORM_32BIT;
+ break;
+ case SF_FORMAT_FLOAT:
+ _form = FORM_FLOAT;
+ break;
+ }
+
+ _rate = I.samplerate;
+ _chan = I.channels;
+ _size = I.frames;
+
+ return 0;
+}
+
+
+int Audiofile::open_write (const char *name, int type, int form, int rate, int chan)
+{
+ SF_INFO I;
+
+ if (_mode) return ERR_MODE;
+ if (!rate || !chan) return ERR_OPEN;
+ reset ();
+
+ switch (type)
+ {
+ case TYPE_CAF:
+ I.format = SF_FORMAT_CAF;
+ break;
+ case TYPE_WAV:
+ case TYPE_AMB:
+ I.format = (chan > 2) ? SF_FORMAT_WAVEX : SF_FORMAT_WAV;
+ break;
+ default:
+ return ERR_TYPE;
+ }
+
+ switch (form)
+ {
+ case FORM_16BIT:
+ I.format |= SF_FORMAT_PCM_16;
+ break;
+ case FORM_24BIT:
+ I.format |= SF_FORMAT_PCM_24;
+ break;
+ case FORM_32BIT:
+ I.format |= SF_FORMAT_PCM_32;
+ break;
+ case FORM_FLOAT:
+ I.format |= SF_FORMAT_FLOAT;
+ break;
+ default:
+ return ERR_FORM;
+ }
+
+ I.samplerate = rate;
+ I.channels = chan;
+ I.sections = 1;
+
+ if ((_sndfile = sf_open (name, SFM_WRITE, &I)) == 0) return ERR_OPEN;
+
+ if (type == TYPE_AMB)
+ {
+ sf_command (_sndfile, SFC_WAVEX_SET_AMBISONIC, 0, SF_AMBISONIC_B_FORMAT);
+ }
+
+ _mode = MODE_WRITE;
+ _type = type;
+ _form = form;
+ _rate = rate;
+ _chan = chan;
+
+ return 0;
+}
+
+
+int Audiofile::set_dither (int type)
+{
+ if (_mode != MODE_WRITE) return ERR_MODE;
+ if (_form != FORM_16BIT) return ERR_FORM;
+ if (type != DITHER_NONE)
+ {
+ if (_dith_type == DITHER_NONE)
+ {
+ _dith_proc = new Dither [_chan];
+ _dith_buff = new int16_t [_chan * BUFFSIZE];
+ }
+ }
+ _dith_type = type;
+ return 0;
+}
+
+
+int Audiofile::close (void)
+{
+ if (_sndfile) sf_close (_sndfile);
+ delete[] _dith_proc;
+ delete[] _dith_buff;
+ reset ();
+ return 0;
+}
+
+
+int Audiofile::seek (uint32_t posit)
+{
+ if (!_sndfile) return ERR_MODE;
+ if (sf_seek (_sndfile, posit, SEEK_SET) != posit) return ERR_SEEK;
+ return 0;
+}
+
+
+int Audiofile::read (float *data, uint32_t frames)
+{
+ if (_mode != MODE_READ) return ERR_MODE;
+ return sf_readf_float (_sndfile, data, frames);
+}
+
+
+int Audiofile::write (float *data, uint32_t frames)
+{
+ int i;
+ uint32_t k, n, r;
+ float *p, v;
+ int16_t *q;
+ Dither *D;
+
+ if (_mode != MODE_WRITE) return ERR_MODE;
+ if (_dith_type == DITHER_NONE)
+ {
+ if (_form != FORM_FLOAT)
+ {
+ for (i = 0; i < _chan; i++)
+ {
+ p = data + i;
+ for (k = 0; k < frames; k++)
+ {
+ v = *p;
+ if (v > 1.0f) v = 1.0f;
+ else if (v < -1.0f) v = -1.0f;
+ *p = v;
+ p += _chan;
+ }
+ }
+ }
+ return sf_writef_float (_sndfile, data, frames);
+ }
+ else
+ {
+ n = 0;
+ while (frames)
+ {
+ k = (frames > BUFFSIZE) ? BUFFSIZE : frames;
+ p = data;
+ q = _dith_buff;
+ D = _dith_proc;
+ for (i = 0; i < _chan; i++)
+ {
+ switch (_dith_type)
+ {
+ case DITHER_RECT:
+ D->proc_rectangular (p, q, _chan, k);
+ break;
+ case DITHER_TRIA:
+ D->proc_triangular (p, q, _chan, k);
+ break;
+ case DITHER_LIPS:
+ D->proc_lipschitz (p, q, _chan, k);
+ break;
+ }
+ p++;
+ q++;
+ D++;
+ }
+ r = sf_writef_short (_sndfile, _dith_buff, k);
+ n += r;
+ if (r != k) return n;
+ data += k * _chan;
+ frames -= k;
+ }
+ }
+ return 0;
+}
+
+
diff --git a/src/thirdparty/zita-resampler/zita-resampler/apps/audiofile.h b/src/thirdparty/zita-resampler/zita-resampler/apps/audiofile.h
new file mode 100644
index 000000000..2a9be2b41
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/apps/audiofile.h
@@ -0,0 +1,119 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2011 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#ifndef __AUDIOFILE_H
+#define __AUDIOFILE_H
+
+
+#include <stdio.h>
+#include <stdint.h>
+#include <sndfile.h>
+#include "dither.h"
+
+
+class Audiofile
+{
+public:
+
+ enum
+ {
+ MODE_NONE,
+ MODE_READ,
+ MODE_WRITE
+ };
+
+ enum
+ {
+ TYPE_OTHER,
+ TYPE_CAF,
+ TYPE_WAV,
+ TYPE_AMB
+ };
+
+ enum
+ {
+ FORM_OTHER,
+ FORM_16BIT,
+ FORM_24BIT,
+ FORM_32BIT,
+ FORM_FLOAT,
+ };
+
+ enum
+ {
+ DITHER_NONE,
+ DITHER_RECT,
+ DITHER_TRIA,
+ DITHER_LIPS,
+ };
+
+ enum
+ {
+ ERR_NONE = 0,
+ ERR_MODE = -1,
+ ERR_TYPE = -2,
+ ERR_FORM = -3,
+ ERR_OPEN = -4,
+ ERR_SEEK = -5,
+ ERR_DATA = -6,
+ ERR_READ = -7,
+ ERR_WRITE = -8
+ };
+
+ Audiofile (void);
+ ~Audiofile (void);
+
+ int mode (void) const { return _mode; }
+ int type (void) const { return _type; }
+ int form (void) const { return _form; }
+ int rate (void) const { return _rate; }
+ int chan (void) const { return _chan; }
+ uint32_t size (void) const { return _size; }
+
+ int open_read (const char *name);
+ int open_write (const char *name, int type, int form, int rate, int chan);
+ int set_dither (int type);
+ int close (void);
+
+ int seek (uint32_t posit);
+ int read (float *data, uint32_t frames);
+ int write (float *data, uint32_t frames);
+
+private:
+
+ enum { BUFFSIZE = 1024 };
+
+ void reset (void);
+
+ SNDFILE *_sndfile;
+ int _mode;
+ int _type;
+ int _form;
+ int _rate;
+ int _chan;
+ uint32_t _size;
+ int _dith_type;
+ Dither *_dith_proc;
+ int16_t *_dith_buff;
+};
+
+
+#endif
+
diff --git a/src/thirdparty/zita-resampler/zita-resampler/apps/dither.cc b/src/thirdparty/zita-resampler/zita-resampler/apps/dither.cc
new file mode 100644
index 000000000..08497fefb
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/apps/dither.cc
@@ -0,0 +1,126 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2011 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#include <string.h>
+#include <math.h>
+#include "dither.h"
+
+
+float Dither::_div = 0;
+
+#define SCALE 32768.0f
+#define LIMIT 32767
+
+
+
+Dither::Dither (void)
+{
+ reset ();
+ _div = ldexpf (1.0f, 32);
+}
+
+
+void Dither::reset (void)
+{
+ memset (_err, 0, (SIZE + 4) * sizeof(float));
+ _ind = SIZE - 1;
+ _ran = 1234567;
+}
+
+
+void Dither::proc_rectangular (const float *srce, int16_t *dest, int step, int nsam)
+{
+ float v, r;
+ int32_t k;
+
+ while (nsam--)
+ {
+ r = genrand () - 0.5f;
+ v = *srce * SCALE + r;
+ k = lrintf (v);
+ if (k < -LIMIT) k = -LIMIT;
+ else if (k > LIMIT) k = LIMIT;
+ *dest = k;
+ srce += step;
+ dest += step;
+ }
+}
+
+
+void Dither::proc_triangular (const float *srce, int16_t *dest, int step, int nsam)
+{
+ float v, r0, r1;
+ int32_t k;
+
+ r1 = *_err;
+ while (nsam--)
+ {
+ r0 = genrand ();
+ v = *srce * SCALE + r0 - r1;
+ r1 = r0;
+ k = lrintf (v);
+ if (k < -LIMIT) k = -LIMIT;
+ else if (k > LIMIT) k = LIMIT;
+ *dest = k;
+ srce += step;
+ dest += step;
+ }
+ *_err = r1;
+}
+
+
+void Dither::proc_lipschitz (const float *srce, int16_t *dest, int step, int nsam)
+{
+ float e, u, v, *p;
+ int i;
+ int32_t k;
+
+ i = _ind;
+ while (nsam--)
+ {
+ p = _err + i;
+ u = *srce * SCALE
+ - 2.033f * p [0]
+ + 2.165f * p [1]
+ - 1.959f * p [2]
+ + 1.590f * p [3]
+ - 0.615f * p [4];
+ v = u + genrand () - genrand ();
+ k = lrintf (v);
+ e = k - u;
+ if (k < -LIMIT) k = -LIMIT;
+ else if (k > LIMIT) k = LIMIT;
+ *dest = k;
+ if (--i < 0)
+ {
+ _err [SIZE + 0] = _err [0];
+ _err [SIZE + 1] = _err [1];
+ _err [SIZE + 2] = _err [2];
+ _err [SIZE + 3] = _err [3];
+ i += SIZE;
+ }
+ _err [i] = e;
+ srce += step;
+ dest += step;
+ }
+ _ind = i;
+}
+
+
diff --git a/src/thirdparty/zita-resampler/zita-resampler/apps/dither.h b/src/thirdparty/zita-resampler/zita-resampler/apps/dither.h
new file mode 100644
index 000000000..87c2d0529
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/apps/dither.h
@@ -0,0 +1,58 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2011 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#ifndef __DITHER_H
+#define __DITHER_H
+
+
+#include <stdint.h>
+
+
+class Dither
+{
+public:
+
+ Dither (void);
+ void reset (void);
+ void proc_rectangular (const float *srce, int16_t *dest, int step, int nsam);
+ void proc_triangular (const float *srce, int16_t *dest, int step, int nsam);
+ void proc_lipschitz (const float *srce, int16_t *dest, int step, int nsam);
+
+private:
+
+ enum { SIZE = 64 };
+
+ float genrand (void)
+ {
+ _ran *= 1103515245;
+ _ran += 12345;
+ return _ran / _div;
+ }
+
+ float _err [SIZE + 4];
+ int _ind;
+ uint32_t _ran;
+
+ static float _div;
+};
+
+
+#endif
+
diff --git a/src/thirdparty/zita-resampler/zita-resampler/apps/zresample.1 b/src/thirdparty/zita-resampler/zita-resampler/apps/zresample.1
new file mode 100644
index 000000000..3911511a9
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/apps/zresample.1
@@ -0,0 +1,80 @@
+.TH zresample 1 "May 2010" "version 0.0.1" "USER COMMANDS"
+.SH NAME
+zresample \- resample and change sample format of audio files
+.SH SYNOPSIS
+.B zresample
+[options] input-file output-file
+.SH DESCRIPTION
+.B zresample
+copies an audio file, changing the sample rate and/or the
+sample format. For 16-bit output it can also dither the
+audio signal. Input can be any audio file readable by the
+libsndfile library. The output file type is either WAV or CAF.
+.SH OPTIONS
+.TP
+.B --help
+Display a short help text.
+.TP
+.B --rate sample-rate
+Set the output sample rate.
+.B Zresample
+uses the zita-resampler library which means that not all
+combinations of input/output sample rate will be accepted.
+The resample ratio must be a reducable to a fraction
+.B a/b
+with both
+.B a
+and
+.B b
+less than or equal to 1000.
+.SS Output file type
+.TP
+.B --wav
+Produce a WAV file, or for more than 2 channels, a WAVEX file.
+This is the default.
+.TP
+.B --amb
+Produce a WAVEX file with the Ambisonic GUID. Such files should
+have the
+.B .amb
+filename extension.
+.TP
+.B --caf
+Produce a Core Audio file.
+.SS Output sample format
+.TP
+.B --16bit
+Output sample format is signed 16-bit. This option also
+enables the use of dithering, described below.
+.TP
+.B --24bit
+Output sample format is 24-bit. This is the default.
+.TP
+.B --float
+Output sample format is 32-bit floating point.
+.SS Dithering
+.TP
+.B --rec
+Add white dithering noise with a rectangular distribution. This
+is the best option if the output data is going to processed again,
+but in that case it would be advisable to use 24-bit or float.
+.TP
+.B --tri
+Add filtered noise with a triangular distribution. Compared to the
+rectangular dither this reduces the noise density in the lower
+frequency range.
+.TP
+.B --lips
+This uses the optimal error feedback filter described by
+Stanley Lipschitz. This is recommended is the output is the
+final distribution format, e.g. for a CD.
+.SS Timing
+.TP
+.B --pad
+Insert zero valued input samples at the start and end so that the output
+includes the full symmetric filter response even for the first and last
+samples.
+.SH EXIT STATUS
+Zero in case there are no errors, non-zero otherwise.
+.SH AUTHOR
+Fons Adriaensen (fons (at) linuxaudio.org)
diff --git a/src/thirdparty/zita-resampler/zita-resampler/apps/zresample.cc b/src/thirdparty/zita-resampler/zita-resampler/apps/zresample.cc
new file mode 100644
index 000000000..4cc8d8ec7
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/apps/zresample.cc
@@ -0,0 +1,272 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2011 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <stdio.h>
+#include <math.h>
+#include <zita-resampler/resampler.h>
+#include "audiofile.h"
+
+
+enum { HELP, CAF, WAV, AMB, BIT16, BIT24, FLOAT, RATE, REC, TRI, LIPS, PAD };
+enum { BUFFSIZE = 0x4000, FILTSIZE = 96 };
+
+
+static unsigned int type = Audiofile::TYPE_WAV;
+static unsigned int form = Audiofile::FORM_24BIT;
+static unsigned int rout = 0;
+static unsigned int dith = Audiofile::DITHER_NONE;
+static bool zpad = false;
+
+
+static void help (void)
+{
+ fprintf (stderr, "\nzresample %s\n", VERSION);
+ fprintf (stderr, "(C) 2007-2012 Fons Adriaensen <fons@linuxaudio.org>\n");
+ fprintf (stderr, "Usage: zresample <options> <input file> <output file>.\n");
+ fprintf (stderr, "Options:\n");
+ fprintf (stderr, " Display this text: --help\n");
+ fprintf (stderr, " Output file type: --caf, --wav, --amb\n");
+ fprintf (stderr, " Output sample rate: --rate <sample rate>\n");
+ fprintf (stderr, " Output sample format: --16bit, --24bit, --float\n");
+ fprintf (stderr, " Dither type (16 bit): --rec, --tri, --lips\n");
+ fprintf (stderr, " Add zero padding : --pad\n");
+ fprintf (stderr, "The default output file format is wav, 24-bit, no dithering.\n");
+ fprintf (stderr, "Integer output formats are clipped, float output is not.\n\n");
+ exit (1);
+}
+
+
+static struct option options [] =
+{
+ { "help", 0, 0, HELP },
+ { "caf", 0, 0, CAF },
+ { "wav", 0, 0, WAV },
+ { "amb", 0, 0, AMB },
+ { "16bit", 0, 0, BIT16 },
+ { "24bit", 0, 0, BIT24 },
+ { "float", 0, 0, FLOAT },
+ { "rate", 1, 0, RATE },
+ { "rec", 0, 0, REC },
+ { "tri", 0, 0, TRI },
+ { "lips", 0, 0, LIPS },
+ { "pad", 0, 0, PAD },
+ { 0, 0, 0, 0 }
+};
+
+
+static void procoptions (int ac, char *av [])
+{
+ int k;
+
+ while ((k = getopt_long (ac, av, "", options, 0)) != -1)
+ {
+ switch (k)
+ {
+ case '?':
+ case HELP:
+ help ();
+ break;
+ case CAF:
+ type = Audiofile::TYPE_CAF;
+ break;
+ case WAV:
+ type = Audiofile::TYPE_WAV;
+ break;
+ case AMB:
+ type = Audiofile::TYPE_AMB;
+ break;
+ case BIT16:
+ form = Audiofile::FORM_16BIT;
+ break;
+ case BIT24:
+ form = Audiofile::FORM_24BIT;
+ break;
+ case FLOAT:
+ form = Audiofile::FORM_FLOAT;
+ break;
+ case RATE:
+ if (sscanf (optarg, "%d", &rout) != 1)
+ {
+ fprintf (stderr, "Illegal value for --rate option: '%s'.\n", optarg);
+ exit (1);
+ }
+ break;
+ case REC:
+ dith = Audiofile::DITHER_RECT;
+ break;
+ case TRI:
+ dith = Audiofile::DITHER_TRIA;
+ break;
+ case LIPS:
+ dith = Audiofile::DITHER_LIPS;
+ break;
+ case PAD:
+ zpad = true;
+ break;
+ }
+ }
+}
+
+
+int main (int ac, char *av [])
+{
+ Audiofile Ainp;
+ Audiofile Aout;
+ Resampler R;
+ unsigned int k, chan, rinp, z1, z2;
+ float *inpb, *outb;
+ bool done;
+
+ procoptions (ac, av);
+ if (ac - optind < 2)
+ {
+ fprintf (stderr, "Missing arguments, try --help.\n");
+ return 1;
+ }
+ if (ac - optind > 2 )
+ {
+ fprintf (stderr, "Too many arguments, try --help.\n");
+ return 1;
+ }
+
+ if (Ainp.open_read (av [optind]))
+ {
+ fprintf (stderr, "Can't open input file '%s'.\n", av [optind]);
+ return 1;
+ }
+
+ chan = Ainp.chan ();
+ rinp = Ainp.rate ();
+ if (rout == 0) rout = rinp;
+
+ if (rout != rinp)
+ {
+ if ((rinp < 8000) || (rinp > 192000))
+ {
+ fprintf (stderr, "Input sample %d rate is out of range.\n", rinp);
+ Ainp.close ();
+ return 1;
+ }
+ if ((rout < 8000) || (rout > 192000))
+ {
+ fprintf (stderr, "Output sample rate %d is out of range.\n", rout);
+ Ainp.close ();
+ return 1;
+ }
+ if (R.setup (rinp, rout, chan, FILTSIZE))
+ {
+ fprintf (stderr, "Sample rate ratio %d/%d is not supported.\n", rout, rinp);
+ Ainp.close ();
+ return 1;
+ }
+ }
+
+ optind++;
+ if (Aout.open_write (av [optind], type, form, rout, chan))
+ {
+ fprintf (stderr, "Can't open output file '%s'.\n", av [optind]);
+ Ainp.close ();
+ return 1;
+ }
+ if (dith != Audiofile::DITHER_NONE)
+ {
+ Aout.set_dither (dith);
+ }
+
+ if (zpad)
+ {
+ z1 = R.inpsize () - 1;
+ z2 = R.inpsize () - 1;
+ }
+ else
+ {
+ z1 = R.inpsize () / 2 - 1;
+ z2 = R.inpsize () / 2;
+ }
+
+ inpb = new float [chan * BUFFSIZE];
+ if (rout != rinp)
+ {
+ outb = new float [chan * BUFFSIZE];
+ // Insert zero samples at start.
+ R.inp_count = z1;
+ R.inp_data = 0;
+ R.out_count = BUFFSIZE;
+ R.out_data = outb;
+ done = false;
+ while (true)
+ {
+ R.process ();
+ if (R.inp_count == 0)
+ {
+ // Input buffer empty, read more samples, insert
+ // zeros at the end, or terminate.
+ if (done)
+ {
+ // We already inserted final zero samples.
+ // Write out any remaining output samples and terminate.
+ Aout.write (outb, BUFFSIZE - R.out_count);
+ break;
+ }
+ k = Ainp.read (inpb, BUFFSIZE);
+ if (k)
+ {
+ // Process next 'k' input samples.
+ R.inp_count = k;
+ R.inp_data = inpb;
+ }
+ else
+ {
+ // At end of input, insert zero samples.
+ R.inp_count = z2;
+ R.inp_data = 0;
+ done = true;
+ }
+ }
+ if (R.out_count == 0)
+ {
+ // Output buffer full, write to file.
+ Aout.write (outb, BUFFSIZE);
+ R.out_count = BUFFSIZE;
+ R.out_data = outb;
+ }
+ }
+ delete[] outb;
+ }
+ else
+ {
+ // No resampling, just copy.
+ while (1)
+ {
+ k = Ainp.read (inpb, BUFFSIZE);
+ if (k) Aout.write (inpb, k);
+ else break;
+ }
+ }
+
+ Ainp.close ();
+ Aout.close ();
+ delete[] inpb;
+
+ return 0;
+}
diff --git a/src/thirdparty/zita-resampler/zita-resampler/apps/zretune.1 b/src/thirdparty/zita-resampler/zita-resampler/apps/zretune.1
new file mode 100644
index 000000000..b14d5c963
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/apps/zretune.1
@@ -0,0 +1,73 @@
+.TH zretune 1 "Sect 2012" "version 0.0.1" "USER COMMANDS"
+.SH NAME
+zretune \- resample an audio file in order to change its pitch
+.SH SYNOPSIS
+.B zretune
+[options] input-file output-file
+.SH DESCRIPTION
+.B zretune
+resamples an audio file by a the inverse of a ratio expressed in cents,
+without changing the nominal sample rate. The result is to change the
+musical pitch and lenght of the file. Input can be any audio file
+readable by the libsndfile library. The output file type is either
+WAV or CAF.
+.SH OPTIONS
+.TP
+.B --help
+Display a short help text.
+.TP
+.B --cent pitch change in cents
+The number of cents by which the pitch is changed. The accepted
+range is +/- 1200 cents, the useful range in practice will be
+something like +/- 100 cents.
+.SS Output file type
+.TP
+.B --wav
+Produce a WAV file, or for more than 2 channels, a WAVEX file.
+This is the default.
+.TP
+.B --amb
+Produce a WAVEX file with the Ambisonic GUID. Such files should
+have the
+.B .amb
+filename extension.
+.TP
+.B --caf
+Produce a Core Audio file.
+.SS Output sample format
+.TP
+.B --16bit
+Output sample format is signed 16-bit. This option also
+enables the use of dithering, described below.
+.TP
+.B --24bit
+Output sample format is 24-bit. This is the default.
+.TP
+.B --float
+Output sample format is 32-bit floating point.
+.SS Dithering
+.TP
+.B --rec
+Add white dithering noise with a rectangular distribution. This
+is the best option if the output data is going to processed again,
+but in that case it would be advisable to use 24-bit or float.
+.TP
+.B --tri
+Add filtered noise with a triangular distribution. Compared to the
+rectangular dither this reduces the noise density in the lower
+frequency range.
+.TP
+.B --lips
+This uses the optimal error feedback filter described by
+Stanley Lipschitz. This is recommended is the output is the
+final distribution format, e.g. for a CD.
+.SS Timing
+.TP
+.B --pad
+Insert zero valued input samples at the start and end so that the output
+includes the full symmetric filter response even for the first and last
+samples.
+.SH EXIT STATUS
+Zero in case there are no errors, non-zero otherwise.
+.SH AUTHOR
+Fons Adriaensen (fons (at) linuxaudio.org)
diff --git a/src/thirdparty/zita-resampler/zita-resampler/apps/zretune.cc b/src/thirdparty/zita-resampler/zita-resampler/apps/zretune.cc
new file mode 100644
index 000000000..48168023b
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/apps/zretune.cc
@@ -0,0 +1,257 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2011 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <stdio.h>
+#include <math.h>
+#include <zita-resampler/vresampler.h>
+#include "audiofile.h"
+
+
+enum { HELP, CAF, WAV, AMB, BIT16, BIT24, FLOAT, CENT, REC, TRI, LIPS, PAD };
+enum { BUFFSIZE = 0x4000, FILTSIZE = 96 };
+
+
+static unsigned int type = Audiofile::TYPE_WAV;
+static unsigned int form = Audiofile::FORM_24BIT;
+static double cent = 0;
+static unsigned int dith = Audiofile::DITHER_NONE;
+static bool zpad = false;
+
+
+static void help (void)
+{
+ fprintf (stderr, "\nzretune %s\n", VERSION);
+ fprintf (stderr, "(C) 2007-2012 Fons Adriaensen <fons@linuxaudio.org>\n");
+ fprintf (stderr, "Usage: zretune <options> <input file> <output file>.\n");
+ fprintf (stderr, "Options:\n");
+ fprintf (stderr, " Display this text: --help\n");
+ fprintf (stderr, " Output file type: --caf, --wav, --amb\n");
+ fprintf (stderr, " Resampling ratio: --cent <pitch change>\n");
+ fprintf (stderr, " Output sample format: --16bit, --24bit, --float\n");
+ fprintf (stderr, " Dither type (16 bit): --rec, --tri, --lips\n");
+ fprintf (stderr, " Add zero padding : --pad\n");
+ fprintf (stderr, "The default output file format is wav, 24-bit, no dithering.\n");
+ fprintf (stderr, "Integer output formats are clipped, float output is not.\n\n");
+ exit (1);
+}
+
+
+static struct option options [] =
+{
+ { "help", 0, 0, HELP },
+ { "caf", 0, 0, CAF },
+ { "wav", 0, 0, WAV },
+ { "amb", 0, 0, AMB },
+ { "16bit", 0, 0, BIT16 },
+ { "24bit", 0, 0, BIT24 },
+ { "float", 0, 0, FLOAT },
+ { "cent", 1, 0, CENT },
+ { "rec", 0, 0, REC },
+ { "tri", 0, 0, TRI },
+ { "lips", 0, 0, LIPS },
+ { "pad", 0, 0, PAD },
+ { 0, 0, 0, 0 }
+};
+
+
+static void procoptions (int ac, char *av [])
+{
+ int k;
+
+ while ((k = getopt_long (ac, av, "", options, 0)) != -1)
+ {
+ switch (k)
+ {
+ case '?':
+ case HELP:
+ help ();
+ break;
+ case CAF:
+ type = Audiofile::TYPE_CAF;
+ break;
+ case WAV:
+ type = Audiofile::TYPE_WAV;
+ break;
+ case AMB:
+ type = Audiofile::TYPE_AMB;
+ break;
+ case BIT16:
+ form = Audiofile::FORM_16BIT;
+ break;
+ case BIT24:
+ form = Audiofile::FORM_24BIT;
+ break;
+ case FLOAT:
+ form = Audiofile::FORM_FLOAT;
+ break;
+ case CENT:
+ if (sscanf (optarg, "%lf", &cent) != 1)
+ {
+ fprintf (stderr, "Illegal value for --rate option: '%s'.\n", optarg);
+ exit (1);
+ }
+ break;
+ case REC:
+ dith = Audiofile::DITHER_RECT;
+ break;
+ case TRI:
+ dith = Audiofile::DITHER_TRIA;
+ break;
+ case LIPS:
+ dith = Audiofile::DITHER_LIPS;
+ break;
+ case PAD:
+ zpad = true;
+ break;
+ }
+ }
+}
+
+
+int main (int ac, char *av [])
+{
+ Audiofile Ainp;
+ Audiofile Aout;
+ VResampler R;
+ unsigned int k, chan, z1, z2;
+ float *inpb, *outb;
+ bool done;
+ double ratio;
+
+ procoptions (ac, av);
+ if (ac - optind < 2)
+ {
+ fprintf (stderr, "Missing arguments, try --help.\n");
+ return 1;
+ }
+ if (ac - optind > 2 )
+ {
+ fprintf (stderr, "Too many arguments, try --help.\n");
+ return 1;
+ }
+
+ if (Ainp.open_read (av [optind]))
+ {
+ fprintf (stderr, "Can't open input file '%s'.\n", av [optind]);
+ return 1;
+ }
+
+ if ((cent < -1200) || (cent > 1200))
+ {
+ fprintf (stderr, "Pitch change %3.1lf is out of range.\n", cent);
+ Ainp.close ();
+ return 1;
+ }
+ ratio = pow (2.0, -cent / 1200.0);
+ R.setup (ratio, Ainp.chan (), FILTSIZE);
+
+ optind++;
+ if (Aout.open_write (av [optind], type, form, Ainp.rate(), Ainp.chan ()))
+ {
+ fprintf (stderr, "Can't open output file '%s'.\n", av [optind]);
+ Ainp.close ();
+ return 1;
+ }
+ if (dith != Audiofile::DITHER_NONE)
+ {
+ Aout.set_dither (dith);
+ }
+
+ if (zpad)
+ {
+ z1 = R.inpsize () - 1;
+ z2 = R.inpsize () - 1;
+ }
+ else
+ {
+ z1 = R.inpsize () / 2 - 1;
+ z2 = R.inpsize () / 2;
+ }
+
+ chan = Ainp.chan ();
+ inpb = new float [chan * BUFFSIZE];
+ if (cent != 0.0)
+ {
+ outb = new float [chan * BUFFSIZE];
+ // Insert zero samples at start.
+ R.inp_count = z1;
+ R.inp_data = 0;
+ R.out_count = BUFFSIZE;
+ R.out_data = outb;
+ done = false;
+ while (true)
+ {
+ R.process ();
+ if (R.inp_count == 0)
+ {
+ // Input buffer empty, read more samples, insert
+ // zeros at the end, or terminate.
+ if (done)
+ {
+ // We already inserted final zero samples.
+ // Write out any remaining output samples and terminate.
+ Aout.write (outb, BUFFSIZE - R.out_count);
+ break;
+ }
+ k = Ainp.read (inpb, BUFFSIZE);
+ if (k)
+ {
+ // Process next 'k' input samples.
+ R.inp_count = k;
+ R.inp_data = inpb;
+ }
+ else
+ {
+ // At end of input, insert zero samples.
+ R.inp_count = z2;
+ R.inp_data = 0;
+ done = true;
+ }
+ }
+ if (R.out_count == 0)
+ {
+ // Output buffer full, write to file.
+ Aout.write (outb, BUFFSIZE);
+ R.out_count = BUFFSIZE;
+ R.out_data = outb;
+ }
+ }
+ delete[] outb;
+ }
+ else
+ {
+ // No resampling, just copy.
+ while (1)
+ {
+ k = Ainp.read (inpb, BUFFSIZE);
+ if (k) Aout.write (inpb, k);
+ else break;
+ }
+ }
+
+ Ainp.close ();
+ Aout.close ();
+ delete[] inpb;
+
+ return 0;
+}
diff --git a/src/thirdparty/zita-resampler/zita-resampler/docs/filt1.png b/src/thirdparty/zita-resampler/zita-resampler/docs/filt1.png
new file mode 100644
index 000000000..0fdd30c8e
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/docs/filt1.png
Binary files differ
diff --git a/src/thirdparty/zita-resampler/zita-resampler/docs/filt2.png b/src/thirdparty/zita-resampler/zita-resampler/docs/filt2.png
new file mode 100644
index 000000000..4a5bf5b60
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/docs/filt2.png
Binary files differ
diff --git a/src/thirdparty/zita-resampler/zita-resampler/docs/inpdist.png b/src/thirdparty/zita-resampler/zita-resampler/docs/inpdist.png
new file mode 100644
index 000000000..5a8901851
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/docs/inpdist.png
Binary files differ
diff --git a/src/thirdparty/zita-resampler/zita-resampler/docs/resampler.html b/src/thirdparty/zita-resampler/zita-resampler/docs/resampler.html
new file mode 100644
index 000000000..eb608e0de
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/docs/resampler.html
@@ -0,0 +1,574 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <title>Zita-resampler.</title>
+ <meta name="Author" content="Fons Adriaensen (fons@linuxaudio.org)">
+ <meta name="Description" content="The zita-resampler library.">
+ <meta name="Keywords" content="resampling sound audio dsp linux">
+ <link rel=StyleSheet href="zitadocs.css" type="text/css" media="all">
+</head>
+
+<body>
+
+
+<h1>Libzita-resampler</h1>
+<ul>
+<li><a href = "#introduction">Introduction</a>
+<li><a href = "#algorithm">The algorithm</a>
+<li><a href = "#description">API description</a>
+<li><a href = "#reference">API reference</a>
+</ul>
+
+<br>
+<a name = "introduction"></a>
+<h2>Introduction</h2>
+<p>
+Libzita-resampler is a C++ library for resampling audio signals. It is designed
+to be used within a real-time processing context, to be fast, and to provide
+high-quality sample rate conversion.
+</p>
+<p>
+The library operates on signals represented in single-precision floating point
+format. For multichannel operation both the input and output signals are
+assumed to be stored as interleaved samples.
+</p>
+<p>
+The API allows a trade-off between quality and CPU load. For the latter
+a range of approximately 1:6 is available. Even at the highest quality
+setting libzita-resampler will be faster than most similar libraries
+providing the same quality, e.g. libsamplerate.
+</p>
+<p>
+In many real-time resampling applications (e.g. an audio player), processing
+is driven by the ouput sample rate: each processing period requires a fixed
+number of output samples, and the input side has to adapt, providing whatever
+number of samples required. The inverse situation (less common, but possible)
+would be e.g. a recording application that writes an audio file at a rate that
+is different from the hardware sample rate. In that case the number of input
+samples is fixed for each processing period. The API provided by libzita-resampler
+is fully symmetric in this respect - it handles both situations in the exactly the
+same way, using the same application code.
+</p>
+<p>
+Libzita-resampler provides two classes:
+</p>
+<p>
+The <b>Resampler</b> class performs resampling at a fixed ratio <b>F_out / F_in</b>
+which is required to be <b>&ge; 1/16</b> and be reducible to the form <b> b / a</b>
+with <b>a, b</b> integer and <b>b &le; 1000</b>. This includes all the 'standard'
+ratios, e.g. 96000 / 44100 = 320 / 147. These restrictions allow for a more efficient
+implementation.
+</p>
+<p>
+The <b>VResampler</b> class provides an arbitrary ratio <b>r</b> in the range
+<b>1/16 &le; r &le; 64</b> and which can variable within a range of <b>0.95 to
+16.0</b> w.r.t. the originally configured one. The lower limit here is necessary
+because this class still uses a fixed multiphase filter, with only the phase step
+being variable. This class was developed for converting between two nominally fixed
+sample rates with a ratio which is not known exactly and may even drift slowly, e.g.
+when combining sound cards wich do not have a common word clock. This resampler is
+somewhat less efficient than the fixed ratio one since it has to interpolate filter
+coefficients, but the difference is marginal when used on multichannel signals.
+</p>
+<p>
+Both classes provide essentially the same API, with only small differences
+where necessary.
+
+<br>
+<a name = "algorithm"></a>
+<h2>The algorithm</h2>
+<p>
+Libzita-resampler implements <b>constant bandwidth resampling</b>. In contrast
+to e.g. cubic interpolation it does not consider the actual shape of the
+waveform represented by the input samples, but rather operates in the spectral
+domain.
+</p>
+<p>
+Let
+<ul>
+<li><b>F_in, F_out</b>&nbsp &nbsp be the input and output sample rates,</li>
+<li><b>F_min</b>&nbsp &nbsp the lower of the two,</li>
+<li><b>F_lcm</b>&nbsp &nbsp their lowest common multiple,</li>
+<li><b>b = F_lcm / F_in</b>,</li>
+<li><b>a = F_lcm / F_out</b></li>.
+</ul>
+<p>
+Then the calculation performed by zita-resampler is equivalent to:
+</p>
+<ul>
+<li>upsampling to a rate of <b>F_lcm</b> by inserting <b>b - 1</b>
+zero-valued samples after each input sample,</li>
+<li>low-pass filtering of the upsampled signal to remove everything
+above <b>F_min / 2</b>,</li>
+<li>retaining only the first of each series of <b>a</b> filtered
+samples.</li>
+</ul>
+<p>
+This is of course not how things are implemented in the resampler code.
+Only those samples that are actually output are computed, and the inserted
+zeros are never used. In practice this means there is a set of <b>b</b>
+different FIR filters that each output one sample in turn, in round-robin
+fashion. All these filters have the same frequency response, but different
+delays that correspond to the relative position in time of the input and
+output samples.
+</p>
+<p>
+A real-world filter can't be perfect, it is always a compromise between
+complexity (CPU load) and performance. In the context of resampling this
+compromise manifests itself as deviations from the ideally flat frequency
+response, and as aliasing - the same phenomenon that occurs with AD and
+DA conversion. For aliasing, two cases need to be considered:
+</p>
+<p>
+<b>Upsampling.</b> In this case <b>F_min = F_in</b>, and input signals
+below but near to <b>F_in / 2</b> will also appear in the output
+just above this frequency. This is similar to DA conversion.
+</p>
+<p>
+<b>Downsampling.</b> In this case <b>F_min = F_out</b>, and input signals
+above but near to <b>F_out / 2</b> will also appear in the output
+just below this frequency. This is similar to AD conversion.
+</p>
+<p>
+In the design of zita-resampler it was assumed that in most cases
+conversion will be between the 'standard' audio sample rates (44.1,
+48, 88.2, 96, 192 kHz), and that consequently frequency response
+errors and aliasing will occur only above the upper limit of the
+audible frequency range. Given this assumption, some pragmatic
+trade-offs can be made.
+</p>
+<p>
+The filter used by libzita-resampler is dimensioned to reach an
+attenuation of 60dB at the Nyquist frequency. The initialisation
+function takes a parameter named <b>hlen</b> that is in fact half
+the length of the symmetrical FIR filter expressend in samples at
+the rate <b>F_min</b>. The valid range for <b>hlen</b> is 16 to 96.
+The figure below shows the filter responses for <b>hlen</b> = 32,
+48, and 96. The <b>x</b> axis is <b>F / F_min</b>, the <b>y</b> axis
+is in dB. The lower part of the traces is the mirrored continuation
+of the response above the Nyquist frequency, i.e. the aliasing.
+Note that 20 kHz corresponds to x = 0.416 for a sample rate of 48 kHz,
+and to x = 0.454 for a sample rate of 44.1 kHz.
+</p>
+<p>
+<img src="filt1.png">
+</p>
+<p>
+<br>
+The same traces with a reduced vertical range, showing the passband
+response.
+</p>
+<p>
+<img src="filt2.png">
+</p>
+<p>
+From these figures it should be clear that <b>hlen = 32</b> should
+provide very high quality for <b>F_min</b> equal to 48 kHz or higher,
+while <b>hlen = 48</b> should be sufficient for an <b>F_min</b> of
+44.1 kHz. The validity of these assumptions was confirmed by a series
+of listening tests. If fact the conclusion of these test was that even
+at 44.1 kHz the subjects (all audio specialists or musicians) could not
+detect any significant difference between <b>hlen</b> values of 32 and 96.
+</p>
+
+<br>
+<a name = "description"></a>
+<h2>API description</h2>
+<p>
+The constructors of both classes do not initialise the object for a particular
+resampling rate, quality or number of channels - this is done by a separate
+function member which can be used as many times as necessary. This means you
+can allocate <b>(V)Resampler</b> objects before the actual resampling parameters
+are known.
+</p>
+<p>
+The <b>setup ()</b> member initialises a resampler for a combination of input
+sample rate, output sample rate, number of channels, and filter length. This
+function allocates and computes the filter coefficient tables and is definitely
+not RT-safe. The actual tables will be shared with other resampler instances if
+possible - the library maintains a reference-counted collection of them. After
+the initialisation by <b>setup ()</b>, the <b>process ()</b> member can be called
+repeatedly to actually resample audio signals. This function is RT-safe and
+can be used within e.g. a JACK callback. The <b>clear ()</b> member restores
+the object to the initial state it has after construction, and is also called
+from the destructor. You can safely call <b>setup ()</b> again without first
+calling <b>clear ()</b> - doing this avoids recomputation of the filter
+coefficients in some cases.
+</p>
+<p>
+Both classes have four public data members which are used as input and output
+parameters of <b>process ()</b>, in the same way as you would use a C struct
+to pass parameters. These are:
+</p>
+<pre>
+ unsigned int inp_count; // number of frames in the input buffer
+ unsigned int out_count; // number of frames in the output buffer
+ float *inp_data; // pointer to first input frame
+ float *out_data; // pointer to first output frame
+</pre>
+<p>
+As <b>process ()</b> does its work, it increments the pointers and decrements the
+counts. The call returns when either of the counts is zero, i.e. when the input
+buffer is empty or the output buffer is full. You should then take appropriate
+action and if necessary call <b>process ()</b> again.
+</p>
+<p>
+When <b>process ()</b> returns, the four parameter values exactly reflect
+those parts of both buffers <b>that have not yet been used</b>.
+One of them will be fully used, with the corresponding count being zero.
+The remaining part of the other, pointed to by the returned pointer, can
+always be replaced before the next call to <b>process ()</b>, but this is
+entirely optional.
+</p>
+<p>
+When for example <b>inp_count</b> is zero, you have to fill the input buffer
+again, or provide a new one, and re-initialise the input count and pointer.
+If at that time <b>out_count</b> is not zero, you can either leave the output
+parameters as they are for the next call to <b>process ()</b>, or you could
+empty the part of the output buffer that has been filled and re-use it from
+the start, or provide a completely different one.
+</p>
+<p>
+The same applies to the input buffer when it is not empty on return of
+<b>process ()</b>: it can be left alone or be replaced. A number of input
+samples is stored internally between <b>process ()</b> calls as part of the
+resampler state, but this never includes samples that have not yet been used.
+So you can 'revise' the input data, starting from the frame pointed to by the
+returned <b>inp_data</b>, up to the last moment.
+</p>
+<p>
+All this means that both classes will interface easily with fixed input and
+output buffers, with dynamically generated input signals, and also with
+lock-free circular buffers.
+</p>
+<p>
+Either of the two pointers can be NULL. When <b>inp_data</b> is zero, the effect
+is to insert zero-valued input samples, as if you had supplied a zero-filled
+buffer of length <b>inp_count</b>. When <b>out_data</b> is zero, input samples
+will be consumed, the internal state of the resampler will advance normally
+and <b>out_count</b> will decrement, but no output samples are written (in
+fact they are not even computed).
+</p>
+<a name = "padding"></a>
+<p>
+Note that libzita-resampler does <b>not</b> automatically insert zero-valued
+input samples at the start and end of the resampling process. The API makes it
+easy to add such padding, and doing this is left entirely up to the user.
+</p>
+<p>
+The <b>inpsize ()</b> member returns the lenght of the FIR filter expressed in
+input samples. At least this number of samples is required to produce an output
+sample. If <b>k</b> is the value returned by this function, then
+</p>
+<ul>
+<li>inserting <b>k / 2 - 1</b> zero-valued samples at the start will align the
+first input and output samples,</li>
+<li>inserting <b>k - 1</b> zero valued samples will ensure that the output
+includes the full filter response for the first input sample.</li>
+</ul>
+<p>
+Similar considerations apply at the end of the input data:
+</p>
+<ul>
+<li>inserting <b>k / 2</b> zero-valued samples at the end will ensure
+that the last output sample produced will correspond to a position as close
+as possible but not past the last real input sample,</li>
+<li>inserting <b>k - 1</b> zero valued samples will ensure that the output
+includes the full filter response for the last real input sample.</li>
+</ul>
+<p>
+<a name = "inpdist"></a>
+The <b>inpdist ()</b> member returns the distance or delay expressed in sample
+periods at the input rate, between the first output sample that will be ouput
+by the next call to <b>process ()</b> and the first input sample that will be
+read (i.e. that is not yet part of the internal state).
+<br><br>
+In the picture below, the red dots represent input samples and the blue ones
+are the output. Solid dots are samples already used or output. After a call
+to process () the resampler object remains in a state ready to produce the next
+output sample, except that it may have to input one or more new samples first.
+The filter is aligned with the next output sample. In this case one more input
+sample is required to compute it, and the input distance is 2.7.
+</p>
+<p>
+<img src="inpdist.png">
+</p>
+<p>
+After a resampler is prefilled with <b>inpsize () / 2 - 1</b> samples as described
+above, <b>inpdist ()</b> will be zero - the first output sample corresponds exactly
+to the first input. Note that without prefilling the distance is negative, which
+means that the first output sample corresponds to some point past the start of the
+input data.
+</p>
+<p>
+The 'resample' application supplied with the library sources provides
+an example of how to use the <b>Resampler</b> class. For an example
+using <b>VResampler</b> you can have a look at zita_a2j and zita_ja2.
+</p>
+
+<br>
+<a name = "reference"></a>
+<h2>API reference</h2>
+<p>
+Public function members of the <b>Resampler</b> and <b>VResampler</b> classes.
+Functions listed without a class prefix are available for both classes.
+</p>
+<ul>
+<li><a href = "#resampler">Resampler ()</a>
+<li><a href = "#resampler">~Resampler ()</a>
+<li><a href = "#vresampler">VResampler ()</a>
+<li><a href = "#vresampler">~VResampler ()</a>
+<li><a href = "#res_setup">Reampler::setup ()</a>
+<li><a href = "#vres_setup">VResampler::setup ()</a>
+<li><a href = "#clear">clear ()</a>
+<li><a href = "#reset">reset ()</a>
+<li><a href = "#process">process ()</a>
+<li><a href = "#nchan">nchan ()</a>
+<li><a href = "#inpsize">inpsize ()</a>
+<li><a href = "#inpdist">inpdist ()</a>
+<li><a href = "#vres_set_rratio">VResampler::set_rratio ()</a>
+<li><a href = "#vres_set_rrfilt">VResampler::set_rrfilt ()</a>
+</ul>
+<p>
+Public data members of the <b>Resampler</b> and <b>VResampler</b> classes.
+</p>
+<ul>
+<li><a href = "#inp_count">inp_count</a>
+<li><a href = "#out_count">out_count</a>
+<li><a href = "#inp_data">inp_data</a>
+<li><a href = "#out_data">out_data</a>
+</ul>
+
+<a name="resampler"></a>
+<br><p class="apihdr">Resampler (void);<br>~Resampler (void);</p>
+<p>
+<b>Description:</b> Constructor and destructor. The constructor just creates an object that takes
+almost no memory but needs to be configured by <a href="#setup"><b>setup ()</b></a> before it
+can be used. The destructor calls <a href="#clear"><b>clear ()</b></a>.
+<br><br>
+<b>RT-safe:</b> No
+</p>
+
+<a name="vresampler"></a>
+<br><p class="apihdr">VResampler (void);<br>~VResampler (void);</p>
+<p>
+<b>Description:</b> Constructor and destructor. The constructor just creates an object that takes
+almost no memory but needs to be configured by <a href="#setup"><b>setup ()</b></a> before it
+can be used. The destructor calls <a href="#clear"><b>clear ()</b></a>.
+<br><br>
+<b>RT-safe:</b> No
+</p>
+
+<a name="res_setup"></a>
+<br><p class="apihdr">int &nbsp Resampler::setup (unsigned int &nbsp fs_inp, unsigned int fs_out, unsigned int nchan, unsigned int hlen);</p>
+<p>
+<b>Description:</b> Configures the object for a combination of input / output sample rates, number
+of channels, and filter lenght.<br>If the parameters are OK, creates the filter coefficient tables
+or re-uses existing ones, allocates some internal resources, and returns via <a href="#reset">
+<b>reset ()</b></a>.
+<br><br>
+<b>Parameters:</b>
+</p>
+<p class="indent">
+<b>fs_inp, fs_out:</b> The input and output sample rates. The ratio <b>fs_out
+/ fs_inp</b> must be <b> &ge; 1/16</b> and reducible to the form <b>b / a</b>
+with <b>a, b</b> integer and <b>b &le; 1000</b>.
+<br><br>
+<b>nchan:</b> Number of channels, must not be zero.
+<br><br>
+<b>hlen:</b> Half the lenght of the filter expressed in samples at the lower of
+input and output rates. This parameter determines the 'quality' as explained
+<a href="#algorithm">here</a>. For any fixed combination of the other parameters,
+cpu load will be roughly proportional to <b>hlen</b>. The valid range is
+<b>16 &le; hlen &le; 96</b>.
+</p>
+<p>
+<b>Returns:</b> Zero on success, non-zero otherwise.
+<br><br>
+<b>Remark:</b> It is perfectly safe to call this function again without
+having called <a href="#clear"><b>clear ()</b></a> first. If only the number
+of channels is changed, doing this will avoid recalculation of the filter tables
+even if they are not shared.
+<br><br>
+<b>RT-safe:</b> No
+</p>
+
+<a name="vres_setup"></a>
+<br><p class="apihdr">int &nbsp VResampler::setup (double ratio, unsigned int nchan, unsigned int hlen);</p>
+<p>
+<b>Description:</b> Configures the object for a combination of resampling ratio, number of channels,
+and filter lenght.<br>If the parameters are OK, creates the filter coefficient tables or re-uses
+existing ones, allocates some internal resources, and returns via <a href="#reset">
+<b>reset ()</b></a>.
+<br><br>
+<b>Parameters:</b>
+</p>
+<p class="indent">
+<b>ratio:</b> The resampling ratio wich must be between <b>1/16</b> and <b>64</b>.
+<br><br>
+<b>nchan:</b> Number of channels, must not be zero.
+<br><br>
+<b>hlen:</b> Half the lenght of the filter expressed in samples at the lower of
+the input and output rates. This parameter determines the 'quality' as explained
+<a href="#algorithm">here</a>. For any fixed combination of the other parameters,
+cpu load will be roughly proportional to <b>hlen</b>. The valid range is
+<b>16 &le; hlen &le; 96</b>.
+</p>
+<p>
+<b>Returns:</b> Zero on success, non-zero otherwise.
+<br><br>
+<b>Remark:</b> It is perfectly safe to call this function again without
+having called <a href="#clear"><b>clear ()</b></a> first. If only the number
+of channels is changed, doing this will avoid recalculation of the filter tables
+even if they are not shared.
+<br><br>
+<b>RT-safe:</b> No
+</p>
+
+<a name="clear"></a>
+<br><p class="apihdr">void &nbsp clear (void);</p>
+<p>
+<b>Description:</b> Deallocates resources (if not shared) and returns the object to
+the unconfigured state as after construction. Also called by the destructor.
+<br><br>
+<b>RT-safe:</b> No
+</p>
+
+<a name="reset"></a>
+<br><p class="apihdr">int &nbsp reset (void);</p>
+<p>
+<b>Description:</b> Resets the internal state of the resampler. Any stored
+input samples are cleared, the filter phase and the four <a href="#inp_count">
+public data members</a> are set to zero. This should be called before starting
+resampling a new stream with the same configuration as the previous one.
+<br><br>
+<b>Returns:</b> Zero if the resampler is configured , non-zero otherwise.
+<br><br>
+<b>RT-safe:</b> Yes.
+</p>
+
+<a name="process"></a>
+<br><p class="apihdr">int &nbsp process (void);</p>
+<p>
+<b>Description:</b> Resamles the input signal until either the input buffer
+is empty or the output buffer is full. Information on the input and output
+buffers is passed to this function using the four <a href="#inp_count"> public
+data members</a> described below. The same four values are updated on return.
+<br><br>
+<b>Returns:</b> Zero if the resampler is configured, non-zero otherwise.
+<br><br>
+<b>RT-safe:</b> Yes.
+</p>
+
+<a name="nchan"></a>
+<br><p class="apihdr">int &nbsp nchan (void);</p>
+<p>
+<b>Description:</b> Accessor.
+<br><br>
+<b>Returns:</b> The number of channels the resampler is configured for,
+or zero if it is unconfigured. Input and output buffers are assumed to contain
+this number of channels in interleaved format.
+<br><br>
+<b>RT-safe:</b> Yes
+</p>
+
+<a name="inpsize"></a>
+<br><p class="apihdr">int &nbsp inpisze (void);</p>
+<p>
+<b>Description:</b> Accessor.
+<br><br>
+<b>Returns:</b> If the resampler is configured, the lenght of the
+finite impulse filter expressed in samples at the input sample rate,
+or zero otherwise. This value may be used to determine the number of
+silence samples to insert at the start and end when resampling e.g.
+an impulse response. See <a href="#padding">here</a> for more about this.
+This function was called 'filtlen ()' in previous releases.
+<br><br>
+<b>RT-safe:</b> Yes
+</p>
+
+<a name="inpdist"></a>
+<br><p class="apihdr">double &nbsp inpdist (void);</p>
+<p>
+<b>Description:</b> Accessor.
+<br><br>
+<b>Returns:</b> If the resampler is configured, the distance between
+the next output sample and the next input sample, expressed in sample
+periods at the input rate, zero otherwise. See <a href="#inpdist">
+here</a> for more about this.
+<br><br>
+<b>RT-safe:</b> Yes
+</p>
+
+<a name="vres_set_rratio"></a>
+<br><p class="apihdr">void &nbsp VResampler::set_rratio (double ratio);</p>
+<p>
+<b>Description:</b> Sets the resampling ratio relative to the one configured
+by <a href="#vres_setup"> setup ()</a>. The valid range is <b>0.95 &le;
+ratio &le; 16</b>.
+<br><br>
+<b>Parameters:</b>
+</p>
+<p class="indent">
+<b>ratio:</b> The relative resampling ratio.
+</p>
+<p>
+<b>RT-safe:</b> Yes
+</p>
+
+<a name="vres_set_rrfilt"></a>
+<br><p class="apihdr">void &nbsp VResampler::set_rrfilt (double time);</p>
+<p>
+<b>Description:</b> Sets the time constant of the first order filter applied
+on values set by <a href="#vres_set_rratio"> set_rratio ()</a>. The time is
+expressed as sample periods at the output rate. The default is zero, which
+means changes are applied instantly.
+<br><br>
+<b>Parameters:</b>
+</p>
+<p class="indent">
+<b>time:</b> The filter time constant.
+</p>
+<p>
+<b>RT-safe:</b> Yes
+</p>
+
+<a name="inp_count"></a>
+<br><p class="apihdr">unsigned int &nbsp inp_count;</p>
+<p>
+<b>Description:</b> Data member, input / output parameter of the <a href="#process">
+process ()</a> function. This value is always equal to the number of frames in the
+input buffer that have not yet been read by the process () function. It should be set
+to the number of available frames before calling process ().
+</p>
+
+<a name="out_count"></a>
+<br><p class="apihdr">unsigned int &nbsp out_count;</p>
+<p>
+<b>Description:</b> Data member, input / output parameter of the <a href="#process">
+process ()</a> function. This value is always equal to the number of frames in the
+output buffer that have not yet been written by the process () function. It should be
+set to the size of the output buffer before calling process ().
+</p>
+
+<a name="inp_data"></a>
+<br><p class="apihdr">float &nbsp *inp_data;</p>
+<p>
+<b>Description:</b> Data member, input / output parameter of the <a href="#process">
+process ()</a> function. If not zero (NULL), this points to the next frame in the
+input buffer that will be read by process (). If set to zero (NULL), the resampler
+will proceed normally but use zero-valued samples as input (still counted by
+<b>inp_count</b>).
+</p>
+
+<a name="out_data"></a>
+<br><p class="apihdr">float &nbsp *out_data;</p>
+<p>
+<b>Description:</b> Data member, input / output parameter of the <a href="#process">
+process ()</a> function. If not zero (NULL), this points to the next frame in the
+output buffer that will be written by process (). If set to zero (NULL), the resampler
+will proceed normally but the output is discarded (but still counted by <b>out_count</b>).
+</p>
+
+</body>
+</html>
diff --git a/src/thirdparty/zita-resampler/zita-resampler/docs/src-1kHz.png b/src/thirdparty/zita-resampler/zita-resampler/docs/src-1kHz.png
new file mode 100644
index 000000000..18b450aac
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/docs/src-1kHz.png
Binary files differ
diff --git a/src/thirdparty/zita-resampler/zita-resampler/docs/zita-1kHz.png b/src/thirdparty/zita-resampler/zita-resampler/docs/zita-1kHz.png
new file mode 100644
index 000000000..4028fa4d6
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/docs/zita-1kHz.png
Binary files differ
diff --git a/src/thirdparty/zita-resampler/zita-resampler/docs/zitadocs.css b/src/thirdparty/zita-resampler/zita-resampler/docs/zitadocs.css
new file mode 100644
index 000000000..8afb88dbe
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/docs/zitadocs.css
@@ -0,0 +1,18 @@
+body { background: white; color: black; font-family: arial, helvetica, sans-serif; }
+center { font-family: arial, helvetica, sans-serif; }
+p { font-family: arial, helvetica, sans-serif; text-align: left; margin-left: 3%; margin-right: 3%; }
+td { font-family: arial, helvetica, sans-serif; background: white; color: black; }
+ul { font-family: arial, helvetica, sans-serif; text-align: left; margin-left: 3%; margin-right: 6%; }
+ol { font-family: arial, helvetica, sans-serif; text-align: left; margin-left: 3%; margin-right: 6%; }
+dl { font-family: arial, helvetica, sans-serif; text-align: left; margin-left: 3%; margin-right: 3%; }
+h1 { font-size: xx-large; background: #8080FF; color: white; text-align: left; padding-left: 20; }
+h2 { font-size: x-large; background: #8080FF; color: white; text-align: left; padding-left: 20; }
+h3 { font-size: large; background: #8080FF; color: white; text-align: left; padding-left: 20; }
+pre { font-family: courier, monospace; font-size: medium; }
+a:link { color: #008000; }
+a:visited { color: #008000; }
+a:active { color: #FF00FF; }
+a:hover { background-color: #80FF80; color: black; }
+.apihdr { background: #E0E0FF; color: black; text-align: left; padding: 5; }
+.indent { font-family: arial, helvetica, sans-serif; text-align: left; margin-left: 50; margin-right: 50; }
+
diff --git a/src/thirdparty/zita-resampler/zita-resampler/libs/Makefile b/src/thirdparty/zita-resampler/zita-resampler/libs/Makefile
new file mode 100644
index 000000000..6877e528d
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/libs/Makefile
@@ -0,0 +1,68 @@
+# ----------------------------------------------------------------------------
+#
+# Copyright (C) 2006-2012 Fons Adriaensen <fons@linuxaudio.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# ----------------------------------------------------------------------------
+
+
+# Modify as required.
+#
+PREFIX = /usr/local
+SUFFIX := $(shell uname -m | sed -e 's/^unknown/$//' -e 's/^i.86/$//' -e 's/^x86_64/$/64/')
+LIBDIR = lib$(SUFFIX)
+
+MAJVERS = 1
+MINVERS = 3.0
+VERSION = $(MAJVERS).$(MINVERS)
+DISTDIR = zita-resampler-$(VERSION)
+
+
+CPPFLAGS += -I. -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS
+CXXFLAGS += -Wall -fPIC -O2 -ffast-math
+CXXFLAGS += -march=native
+LDFLAGS +=
+LDLIBS +=
+
+
+ZITA-RESAMPLER_SO = libzita-resampler.so
+ZITA-RESAMPLER_MAJ = $(ZITA-RESAMPLER_SO).$(MAJVERS)
+ZITA-RESAMPLER_MIN = $(ZITA-RESAMPLER_MAJ).$(MINVERS)
+ZITA-RESAMPLER_DEP =
+ZITA-RESAMPLER_O = resampler.o vresampler.o resampler-table.o
+ZITA-RESAMPLER_H = zita-resampler/resampler.h zita-resampler/resampler-table.h zita-resampler/vresampler.h
+
+
+$(ZITA-RESAMPLER_MIN): $(ZITA-RESAMPLER_O)
+ g++ -shared $(LDFLAGS) -Wl,-soname,$(ZITA-RESAMPLER_MAJ) -o $(ZITA-RESAMPLER_MIN) $(ZITA-RESAMPLER_O) $(ZITA-RESAMPLER_DEP)
+
+$(ZITA-RESAMPLER_O): $(ZITA-RESAMPLER_H)
+
+
+install: $(ZITA-RESAMPLER_MIN)
+ install -d $(DESTDIR)$(PREFIX)/include/zita-resampler
+ install -d $(DESTDIR)$(PREFIX)/$(LIBDIR)
+ install -m 644 $(ZITA-RESAMPLER_H) $(DESTDIR)$(PREFIX)/include/zita-resampler
+ install -m 644 $(ZITA-RESAMPLER_MIN) $(DESTDIR)$(PREFIX)/$(LIBDIR)
+ ln -sf $(ZITA-RESAMPLER_MIN) $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(ZITA-RESAMPLER_SO)
+ ldconfig
+
+uninstall:
+ /bin/rm -rf $(DESTDIR)$(PREFIX)/include/zita-resampler
+ /bin/rm -rf $(DESTDIR)$(PREFIX)/$(LIBDIR)/libzita-resampler*
+
+clean:
+ /bin/rm -rf *~ *.o *.a *.d *.so.* zita-resampler/*~
+
diff --git a/src/thirdparty/zita-resampler/zita-resampler/libs/resampler-table.cc b/src/thirdparty/zita-resampler/zita-resampler/libs/resampler-table.cc
new file mode 100644
index 000000000..daaf9f39a
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/libs/resampler-table.cc
@@ -0,0 +1,161 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2012 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <zita-resampler/resampler-table.h>
+
+
+int zita_resampler_major_version (void)
+{
+ return ZITA_RESAMPLER_MAJOR_VERSION;
+}
+
+
+int zita_resampler_minor_version (void)
+{
+ return ZITA_RESAMPLER_MINOR_VERSION;
+}
+
+
+static double sinc (double x)
+{
+ x = fabs (x);
+ if (x < 1e-6) return 1.0;
+ x *= M_PI;
+ return sin (x) / x;
+}
+
+
+static double wind (double x)
+{
+ x = fabs (x);
+ if (x >= 1.0) return 0.0f;
+ x *= M_PI;
+ return 0.384 + 0.500 * cos (x) + 0.116 * cos (2 * x);
+}
+
+
+
+Resampler_table *Resampler_table::_list = 0;
+Resampler_mutex Resampler_table::_mutex;
+
+
+Resampler_table::Resampler_table (double fr, unsigned int hl, unsigned int np) :
+ _next (0),
+ _refc (0),
+ _fr (fr),
+ _hl (hl),
+ _np (np)
+{
+ unsigned int i, j;
+ double t;
+ float *p;
+
+ _ctab = new float [hl * (np + 1)];
+ p = _ctab;
+ for (j = 0; j <= np; j++)
+ {
+ t = (double) j / (double) np;
+ for (i = 0; i < hl; i++)
+ {
+ p [hl - i - 1] = (float)(fr * sinc (t * fr) * wind (t / hl));
+ t += 1;
+ }
+ p += hl;
+ }
+}
+
+
+Resampler_table::~Resampler_table (void)
+{
+ delete[] _ctab;
+}
+
+
+Resampler_table *Resampler_table::create (double fr, unsigned int hl, unsigned int np)
+{
+ Resampler_table *P;
+
+ _mutex.lock ();
+ P = _list;
+ while (P)
+ {
+ if ((fr >= P->_fr * 0.999) && (fr <= P->_fr * 1.001) && (hl == P->_hl) && (np == P->_np))
+ {
+ P->_refc++;
+ _mutex.unlock ();
+ return P;
+ }
+ P = P->_next;
+ }
+ P = new Resampler_table (fr, hl, np);
+ P->_refc = 1;
+ P->_next = _list;
+ _list = P;
+ _mutex.unlock ();
+ return P;
+}
+
+
+void Resampler_table::destroy (Resampler_table *T)
+{
+ Resampler_table *P, *Q;
+
+ _mutex.lock ();
+ if (T)
+ {
+ T->_refc--;
+ if (T->_refc == 0)
+ {
+ P = _list;
+ Q = 0;
+ while (P)
+ {
+ if (P == T)
+ {
+ if (Q) Q->_next = T->_next;
+ else _list = T->_next;
+ break;
+ }
+ Q = P;
+ P = P->_next;
+ }
+ delete T;
+ }
+ }
+ _mutex.unlock ();
+}
+
+
+void Resampler_table::print_list (void)
+{
+ Resampler_table *P;
+
+ printf ("Resampler table\n----\n");
+ for (P = _list; P; P = P->_next)
+ {
+ printf ("refc = %3d fr = %10.6lf hl = %4d np = %4d\n", P->_refc, P->_fr, P->_hl, P->_np);
+ }
+ printf ("----\n\n");
+}
+
diff --git a/src/thirdparty/zita-resampler/zita-resampler/libs/resampler.cc b/src/thirdparty/zita-resampler/zita-resampler/libs/resampler.cc
new file mode 100644
index 000000000..097acfd1b
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/libs/resampler.cc
@@ -0,0 +1,263 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2012 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <zita-resampler/resampler.h>
+
+
+static unsigned int gcd (unsigned int a, unsigned int b)
+{
+ if (a == 0) return b;
+ if (b == 0) return a;
+ while (1)
+ {
+ if (a > b)
+ {
+ a = a % b;
+ if (a == 0) return b;
+ if (a == 1) return 1;
+ }
+ else
+ {
+ b = b % a;
+ if (b == 0) return a;
+ if (b == 1) return 1;
+ }
+ }
+ return 1;
+}
+
+
+Resampler::Resampler (void) :
+ _table (0),
+ _nchan (0),
+ _buff (0)
+{
+ reset ();
+}
+
+
+Resampler::~Resampler (void)
+{
+ clear ();
+}
+
+
+int Resampler::setup (unsigned int fs_inp,
+ unsigned int fs_out,
+ unsigned int nchan,
+ unsigned int hlen)
+{
+ if ((hlen < 8) || (hlen > 96)) return 1;
+ return setup (fs_inp, fs_out, nchan, hlen, 1.0 - 2.6 / hlen);
+}
+
+
+int Resampler::setup (unsigned int fs_inp,
+ unsigned int fs_out,
+ unsigned int nchan,
+ unsigned int hlen,
+ double frel)
+{
+ unsigned int g, h, k, n, s;
+ double r;
+ float *B = 0;
+ Resampler_table *T = 0;
+
+ k = s = 0;
+ if (fs_inp && fs_out && nchan)
+ {
+ r = (double) fs_out / (double) fs_inp;
+ g = gcd (fs_out, fs_inp);
+ n = fs_out / g;
+ s = fs_inp / g;
+ if ((16 * r >= 1) && (n <= 1000))
+ {
+ h = hlen;
+ k = 250;
+ if (r < 1)
+ {
+ frel *= r;
+ h = (unsigned int)(ceil (h / r));
+ k = (unsigned int)(ceil (k / r));
+ }
+ T = Resampler_table::create (frel, h, n);
+ B = new float [nchan * (2 * h - 1 + k)];
+ }
+ }
+ clear ();
+ if (T)
+ {
+ _table = T;
+ _buff = B;
+ _nchan = nchan;
+ _inmax = k;
+ _pstep = s;
+ return reset ();
+ }
+ else return 1;
+}
+
+
+void Resampler::clear (void)
+{
+ Resampler_table::destroy (_table);
+ delete[] _buff;
+ _buff = 0;
+ _table = 0;
+ _nchan = 0;
+ _inmax = 0;
+ _pstep = 0;
+ reset ();
+}
+
+
+double Resampler::inpdist (void) const
+{
+ if (!_table) return 0;
+ return (int)(_table->_hl + 1 - _nread) - (double)_phase / _table->_np;
+}
+
+
+int Resampler::inpsize (void) const
+{
+ if (!_table) return 0;
+ return 2 * _table->_hl;
+}
+
+
+int Resampler::reset (void)
+{
+ if (!_table) return 1;
+
+ inp_count = 0;
+ out_count = 0;
+ inp_data = 0;
+ out_data = 0;
+ _index = 0;
+ _nread = 0;
+ _nzero = 0;
+ _phase = 0;
+ if (_table)
+ {
+ _nread = 2 * _table->_hl;
+ return 0;
+ }
+ return 1;
+}
+
+
+int Resampler::process (void)
+{
+ unsigned int hl, ph, np, dp, in, nr, nz, i, n, c;
+ float *p1, *p2;
+
+ if (!_table) return 1;
+
+ hl = _table->_hl;
+ np = _table->_np;
+ dp = _pstep;
+ in = _index;
+ nr = _nread;
+ ph = _phase;
+ nz = _nzero;
+ n = (2 * hl - nr) * _nchan;
+ p1 = _buff + in * _nchan;
+ p2 = p1 + n;
+
+ while (out_count)
+ {
+ if (nr)
+ {
+ if (inp_count == 0) break;
+ if (inp_data)
+ {
+ for (c = 0; c < _nchan; c++) p2 [c] = inp_data [c];
+ inp_data += _nchan;
+ nz = 0;
+ }
+ else
+ {
+ for (c = 0; c < _nchan; c++) p2 [c] = 0;
+ if (nz < 2 * hl) nz++;
+ }
+ nr--;
+ p2 += _nchan;
+ inp_count--;
+ }
+ else
+ {
+ if (out_data)
+ {
+ if (nz < 2 * hl)
+ {
+ float *c1 = _table->_ctab + hl * ph;
+ float *c2 = _table->_ctab + hl * (np - ph);
+ for (c = 0; c < _nchan; c++)
+ {
+ float *q1 = p1 + c;
+ float *q2 = p2 + c;
+ float s = 1e-20f;
+ for (i = 0; i < hl; i++)
+ {
+ q2 -= _nchan;
+ s += *q1 * c1 [i] + *q2 * c2 [i];
+ q1 += _nchan;
+ }
+ *out_data++ = s - 1e-20f;
+ }
+ }
+ else
+ {
+ for (c = 0; c < _nchan; c++) *out_data++ = 0;
+ }
+ }
+ out_count--;
+
+ ph += dp;
+ if (ph >= np)
+ {
+ nr = ph / np;
+ ph -= nr * np;
+ in += nr;
+ p1 += nr * _nchan;;
+ if (in >= _inmax)
+ {
+ n = (2 * hl - nr) * _nchan;
+ memcpy (_buff, p1, n * sizeof (float));
+ in = 0;
+ p1 = _buff;
+ p2 = p1 + n;
+ }
+ }
+ }
+ }
+ _index = in;
+ _nread = nr;
+ _phase = ph;
+ _nzero = nz;
+
+ return 0;
+}
+
+
diff --git a/src/thirdparty/zita-resampler/zita-resampler/libs/vresampler.cc b/src/thirdparty/zita-resampler/zita-resampler/libs/vresampler.cc
new file mode 100644
index 000000000..451740d22
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/libs/vresampler.cc
@@ -0,0 +1,269 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2012 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <zita-resampler/vresampler.h>
+
+
+VResampler::VResampler (void) :
+ _table (0),
+ _nchan (0),
+ _buff (0),
+ _c1 (0),
+ _c2 (0)
+{
+ reset ();
+}
+
+
+VResampler::~VResampler (void)
+{
+ clear ();
+}
+
+
+int VResampler::setup (double ratio,
+ unsigned int nchan,
+ unsigned int hlen)
+{
+ if ((hlen < 8) || (hlen > 96) || (16 * ratio < 1) || (ratio > 64)) return 1;
+ return setup (ratio, nchan, hlen, 1.0 - 2.6 / hlen);
+}
+
+
+int VResampler::setup (double ratio,
+ unsigned int nchan,
+ unsigned int hlen,
+ double frel)
+{
+ unsigned int h, k, n;
+ double s;
+ Resampler_table *T = 0;
+
+ if (! nchan) return 1;
+ n = NPHASE;
+ s = n / ratio;
+ h = hlen;
+ k = 250;
+ if (ratio < 1)
+ {
+ frel *= ratio;
+ h = (unsigned int)(ceil (h / ratio));
+ k = (unsigned int)(ceil (k / ratio));
+ }
+ T = Resampler_table::create (frel, h, n);
+ clear ();
+ if (T)
+ {
+ _table = T;
+ _buff = new float [nchan * (2 * h - 1 + k)];
+ _c1 = new float [2 * h];
+ _c2 = new float [2 * h];
+ _nchan = nchan;
+ _inmax = k;
+ _ratio = ratio;
+ _pstep = s;
+ _qstep = s;
+ _wstep = 1;
+ return reset ();
+ }
+ else return 1;
+}
+
+
+void VResampler::clear (void)
+{
+ Resampler_table::destroy (_table);
+ delete[] _buff;
+ delete[] _c1;
+ delete[] _c2;
+ _buff = 0;
+ _c1 = 0;
+ _c2 = 0;
+ _table = 0;
+ _nchan = 0;
+ _inmax = 0;
+ _pstep = 0;
+ _qstep = 0;
+ _wstep = 1;
+ reset ();
+}
+
+
+void VResampler::set_rrfilt (double t)
+{
+ if (!_table) return;
+ _wstep = (t < 1) ? 1 : 1 - exp (-1 / t);
+}
+
+
+void VResampler::set_rratio (double r)
+{
+ if (!_table) return;
+ if (r > 16.0) r = 16.0;
+ if (r < 0.95) r = 0.95;
+ _qstep = _table->_np / (_ratio * r);
+}
+
+
+double VResampler::inpdist (void) const
+{
+ if (!_table) return 0;
+ return (int)(_table->_hl + 1 - _nread) - _phase / _table->_np;
+}
+
+
+int VResampler::inpsize (void) const
+{
+ if (!_table) return 0;
+ return 2 * _table->_hl;
+}
+
+
+int VResampler::reset (void)
+{
+ if (!_table) return 1;
+
+ inp_count = 0;
+ out_count = 0;
+ inp_data = 0;
+ out_data = 0;
+ _index = 0;
+ _phase = 0;
+ _nread = 0;
+ _nzero = 0;
+ if (_table)
+ {
+ _nread = 2 * _table->_hl;
+ return 0;
+ }
+ return 1;
+}
+
+
+int VResampler::process (void)
+{
+ unsigned int k, np, in, nr, n, c;
+ int i, hl, nz;
+ double ph, dp, dd;
+ float a, b, *p1, *p2, *q1, *q2;
+
+ if (!_table) return 1;
+
+ hl = _table->_hl;
+ np = _table->_np;
+ in = _index;
+ nr = _nread;
+ nz = _nzero;
+ ph = _phase;
+ dp = _pstep;
+ n = (2 * hl - nr) * _nchan;
+ p1 = _buff + in * _nchan;
+ p2 = p1 + n;
+
+ while (out_count)
+ {
+ if (nr)
+ {
+ if (inp_count == 0) break;
+ if (inp_data)
+ {
+ for (c = 0; c < _nchan; c++) p2 [c] = inp_data [c];
+ inp_data += _nchan;
+ nz = 0;
+ }
+ else
+ {
+ for (c = 0; c < _nchan; c++) p2 [c] = 0;
+ if (nz < 2 * hl) nz++;
+ }
+ nr--;
+ p2 += _nchan;
+ inp_count--;
+ }
+ else
+ {
+ if (out_data)
+ {
+ if (nz < 2 * hl)
+ {
+ k = (unsigned int) ph;
+ b = (float)(ph - k);
+ a = 1.0f - b;
+ q1 = _table->_ctab + hl * k;
+ q2 = _table->_ctab + hl * (np - k);
+ for (i = 0; i < hl; i++)
+ {
+ _c1 [i] = a * q1 [i] + b * q1 [i + hl];
+ _c2 [i] = a * q2 [i] + b * q2 [i - hl];
+ }
+ for (c = 0; c < _nchan; c++)
+ {
+ q1 = p1 + c;
+ q2 = p2 + c;
+ a = 1e-25f;
+ for (i = 0; i < hl; i++)
+ {
+ q2 -= _nchan;
+ a += *q1 * _c1 [i] + *q2 * _c2 [i];
+ q1 += _nchan;
+ }
+ *out_data++ = a - 1e-25f;
+ }
+ }
+ else
+ {
+ for (c = 0; c < _nchan; c++) *out_data++ = 0;
+ }
+ }
+ out_count--;
+
+ dd = _qstep - dp;
+ if (fabs (dd) < 1e-30) dp = _qstep;
+ else dp += _wstep * dd;
+ ph += dp;
+ if (ph >= np)
+ {
+ nr = (unsigned int) floor( ph / np);
+ ph -= nr * np;;
+ in += nr;
+ p1 += nr * _nchan;;
+ if (in >= _inmax)
+ {
+ n = (2 * hl - nr) * _nchan;
+ memcpy (_buff, p1, n * sizeof (float));
+ in = 0;
+ p1 = _buff;
+ p2 = p1 + n;
+ }
+ }
+ }
+ }
+ _index = in;
+ _nread = nr;
+ _phase = ph;
+ _pstep = dp;
+ _nzero = nz;
+
+ return 0;
+}
diff --git a/src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/resampler-table.h b/src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/resampler-table.h
new file mode 100644
index 000000000..96bd756ff
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/resampler-table.h
@@ -0,0 +1,86 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2012 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#ifndef __RESAMPLER_TABLE_H
+#define __RESAMPLER_TABLE_H
+
+
+//#include <pthread.h>
+#include <mutex>
+
+
+#define ZITA_RESAMPLER_MAJOR_VERSION 1
+#define ZITA_RESAMPLER_MINOR_VERSION 3
+
+
+extern int zita_resampler_major_version (void);
+extern int zita_resampler_minor_version (void);
+
+
+class Resampler_mutex
+{
+private:
+
+ friend class Resampler_table;
+
+ //Resampler_mutex (void) { pthread_mutex_init (&_mutex, 0); }
+ //~Resampler_mutex (void) { pthread_mutex_destroy (&_mutex); }
+ //void lock (void) { pthread_mutex_lock (&_mutex); }
+ //void unlock (void) { pthread_mutex_unlock (&_mutex); }
+ Resampler_mutex (void) { }
+ ~Resampler_mutex (void) { }
+ void lock (void) { _mutex.lock(); }
+ void unlock (void) { _mutex.unlock(); }
+
+ //pthread_mutex_t _mutex;
+ std::mutex _mutex;
+};
+
+
+class Resampler_table
+{
+public:
+
+ static void print_list (void);
+
+private:
+
+ Resampler_table (double fr, unsigned int hl, unsigned int np);
+ ~Resampler_table (void);
+
+ friend class Resampler;
+ friend class VResampler;
+
+ Resampler_table *_next;
+ unsigned int _refc;
+ float *_ctab;
+ double _fr;
+ unsigned int _hl;
+ unsigned int _np;
+
+ static Resampler_table *create (double fr, unsigned int hl, unsigned int np);
+ static void destroy (Resampler_table *T);
+
+ static Resampler_table *_list;
+ static Resampler_mutex _mutex;
+};
+
+
+#endif
diff --git a/src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/resampler.h b/src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/resampler.h
new file mode 100644
index 000000000..5dbff4f4a
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/resampler.h
@@ -0,0 +1,76 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2012 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#ifndef __RESAMPLER_H
+#define __RESAMPLER_H
+
+
+#include <zita-resampler/resampler-table.h>
+
+
+class Resampler
+{
+public:
+
+ Resampler (void);
+ ~Resampler (void);
+
+ int setup (unsigned int fs_inp,
+ unsigned int fs_out,
+ unsigned int nchan,
+ unsigned int hlen);
+
+ int setup (unsigned int fs_inp,
+ unsigned int fs_out,
+ unsigned int nchan,
+ unsigned int hlen,
+ double frel);
+
+ void clear (void);
+ int reset (void);
+ int nchan (void) const { return _nchan; }
+ int filtlen (void) const { return inpsize (); } // Deprecated
+ int inpsize (void) const;
+ double inpdist (void) const;
+ int process (void);
+
+ unsigned int inp_count;
+ unsigned int out_count;
+ float *inp_data;
+ float *out_data;
+ void *inp_list;
+ void *out_list;
+
+private:
+
+ Resampler_table *_table;
+ unsigned int _nchan;
+ unsigned int _inmax;
+ unsigned int _index;
+ unsigned int _nread;
+ unsigned int _nzero;
+ unsigned int _phase;
+ unsigned int _pstep;
+ float *_buff;
+ void *_dummy [8];
+};
+
+
+#endif
diff --git a/src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/vresampler.h b/src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/vresampler.h
new file mode 100644
index 000000000..22dbe72a0
--- /dev/null
+++ b/src/thirdparty/zita-resampler/zita-resampler/libs/zita-resampler/vresampler.h
@@ -0,0 +1,83 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2006-2012 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#ifndef __VRESAMPLER_H
+#define __VRESAMPLER_H
+
+
+#include <zita-resampler/resampler-table.h>
+
+
+class VResampler
+{
+public:
+
+ VResampler (void);
+ ~VResampler (void);
+
+ int setup (double ratio,
+ unsigned int nchan,
+ unsigned int hlen);
+
+ int setup (double ratio,
+ unsigned int nchan,
+ unsigned int hlen,
+ double frel);
+
+ void clear (void);
+ int reset (void);
+ int nchan (void) const { return _nchan; }
+ int inpsize (void) const;
+ double inpdist (void) const;
+ int process (void);
+
+ void set_rrfilt (double t);
+ void set_rratio (double r);
+
+ unsigned int inp_count;
+ unsigned int out_count;
+ float *inp_data;
+ float *out_data;
+ void *inp_list;
+ void *out_list;
+
+private:
+
+ enum { NPHASE = 256 };
+
+ Resampler_table *_table;
+ unsigned int _nchan;
+ unsigned int _inmax;
+ unsigned int _index;
+ unsigned int _nread;
+ unsigned int _nzero;
+ double _ratio;
+ double _phase;
+ double _pstep;
+ double _qstep;
+ double _wstep;
+ float *_buff;
+ float *_c1;
+ float *_c2;
+ void *_dummy [8];
+};
+
+
+#endif
diff --git a/src/thirdparty/zlib/ChangeLog b/src/thirdparty/zlib/ChangeLog
index f22aabaef..30199a65a 100644
--- a/src/thirdparty/zlib/ChangeLog
+++ b/src/thirdparty/zlib/ChangeLog
@@ -1,10 +1,53 @@
ChangeLog file for zlib
+Changes in 1.2.11 (15 Jan 2017)
+- Fix deflate stored bug when pulling last block from window
+- Permit immediate deflateParams changes before any deflate input
+
+Changes in 1.2.10 (2 Jan 2017)
+- Avoid warnings on snprintf() return value
+- Fix bug in deflate_stored() for zero-length input
+- Fix bug in gzwrite.c that produced corrupt gzip files
+- Remove files to be installed before copying them in Makefile.in
+- Add warnings when compiling with assembler code
+
+Changes in 1.2.9 (31 Dec 2016)
+- Fix contrib/minizip to permit unzipping with desktop API [Zouzou]
+- Improve contrib/blast to return unused bytes
+- Assure that gzoffset() is correct when appending
+- Improve compress() and uncompress() to support large lengths
+- Fix bug in test/example.c where error code not saved
+- Remedy Coverity warning [Randers-Pehrson]
+- Improve speed of gzprintf() in transparent mode
+- Fix inflateInit2() bug when windowBits is 16 or 32
+- Change DEBUG macro to ZLIB_DEBUG
+- Avoid uninitialized access by gzclose_w()
+- Allow building zlib outside of the source directory
+- Fix bug that accepted invalid zlib header when windowBits is zero
+- Fix gzseek() problem on MinGW due to buggy _lseeki64 there
+- Loop on write() calls in gzwrite.c in case of non-blocking I/O
+- Add --warn (-w) option to ./configure for more compiler warnings
+- Reject a window size of 256 bytes if not using the zlib wrapper
+- Fix bug when level 0 used with Z_HUFFMAN or Z_RLE
+- Add --debug (-d) option to ./configure to define ZLIB_DEBUG
+- Fix bugs in creating a very large gzip header
+- Add uncompress2() function, which returns the input size used
+- Assure that deflateParams() will not switch functions mid-block
+- Dramatically speed up deflation for level 0 (storing)
+- Add gzfread(), duplicating the interface of fread()
+- Add gzfwrite(), duplicating the interface of fwrite()
+- Add deflateGetDictionary() function
+- Use snprintf() for later versions of Microsoft C
+- Fix *Init macros to use z_ prefix when requested
+- Replace as400 with os400 for OS/400 support [Monnerat]
+- Add crc32_z() and adler32_z() functions with size_t lengths
+- Update Visual Studio project files [AraHaan]
+
Changes in 1.2.8 (28 Apr 2013)
- Update contrib/minizip/iowin32.c for Windows RT [Vollant]
- Do not force Z_CONST for C++
-- Clean up contrib/vstudio [Ro]
+- Clean up contrib/vstudio [Roß]
- Correct spelling error in zlib.h
- Fix mixed line endings in contrib/vstudio
@@ -34,7 +77,7 @@ Changes in 1.2.7.1 (24 Mar 2013)
- Clean up the usage of z_const and respect const usage within zlib
- Clean up examples/gzlog.[ch] comparisons of different types
- Avoid shift equal to bits in type (caused endless loop)
-- Fix unintialized value bug in gzputc() introduced by const patches
+- Fix uninitialized value bug in gzputc() introduced by const patches
- Fix memory allocation error in examples/zran.c [Nor]
- Fix bug where gzopen(), gzclose() would write an empty file
- Fix bug in gzclose() when gzwrite() runs out of memory
@@ -194,7 +237,7 @@ Changes in 1.2.5.2 (17 Dec 2011)
- Add a transparent write mode to gzopen() when 'T' is in the mode
- Update python link in zlib man page
- Get inffixed.h and MAKEFIXED result to match
-- Add a ./config --solo option to make zlib subset with no libary use
+- Add a ./config --solo option to make zlib subset with no library use
- Add undocumented inflateResetKeep() function for CAB file decoding
- Add --cover option to ./configure for gcc coverage testing
- Add #define ZLIB_CONST option to use const in the z_stream interface
@@ -564,7 +607,7 @@ Changes in 1.2.3.1 (16 August 2006)
- Update make_vms.com [Zinser]
- Use -fPIC for shared build in configure [Teredesai, Nicholson]
- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen]
-- Use fdopen() (not _fdopen()) for Interix in zutil.h [Bck]
+- Use fdopen() (not _fdopen()) for Interix in zutil.h [Bäck]
- Add some FAQ entries about the contrib directory
- Update the MVS question in the FAQ
- Avoid extraneous reads after EOF in gzio.c [Brown]
@@ -1178,7 +1221,7 @@ Changes in 1.0.6 (19 Jan 1998)
386 asm code replacing longest_match().
contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
A C++ I/O streams interface to the zlib gz* functions
- contrib/iostream2/ by Tyge Lvset <Tyge.Lovset@cmr.no>
+ contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
Another C++ I/O streams interface
contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
A very simple tar.gz file extractor using zlib
@@ -1267,7 +1310,7 @@ Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
- fix array overlay in deflate.c which sometimes caused bad compressed data
- fix inflate bug with empty stored block
- fix MSDOS medium model which was broken in 0.99
-- fix deflateParams() which could generated bad compressed data.
+- fix deflateParams() which could generate bad compressed data.
- Bytef is define'd instead of typedef'ed (work around Borland bug)
- added an INDEX file
- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
diff --git a/src/thirdparty/zlib/README b/src/thirdparty/zlib/README
index 5ca9d127e..51106de47 100644
--- a/src/thirdparty/zlib/README
+++ b/src/thirdparty/zlib/README
@@ -1,6 +1,6 @@
ZLIB DATA COMPRESSION LIBRARY
-zlib 1.2.8 is a general purpose data compression library. All the code is
+zlib 1.2.11 is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by RFCs
(Request for Comments) 1950 to 1952 in the files
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
@@ -31,7 +31,7 @@ Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
issue of Dr. Dobb's Journal; a copy of the article is available at
http://marknelson.us/1997/01/01/zlib-engine/ .
-The changes made in version 1.2.8 are documented in the file ChangeLog.
+The changes made in version 1.2.11 are documented in the file ChangeLog.
Unsupported third party contributions are provided in directory contrib/ .
@@ -84,7 +84,7 @@ Acknowledgments:
Copyright notice:
- (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ (C) 1995-2017 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
diff --git a/src/thirdparty/zlib/adler32.c b/src/thirdparty/zlib/adler32.c
index a868f073d..d0be4380a 100644
--- a/src/thirdparty/zlib/adler32.c
+++ b/src/thirdparty/zlib/adler32.c
@@ -1,5 +1,5 @@
/* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2011 Mark Adler
+ * Copyright (C) 1995-2011, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -7,11 +7,9 @@
#include "zutil.h"
-#define local static
-
local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
-#define BASE 65521 /* largest prime smaller than 65536 */
+#define BASE 65521U /* largest prime smaller than 65536 */
#define NMAX 5552
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
@@ -62,10 +60,10 @@ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
#endif
/* ========================================================================= */
-uLong ZEXPORT adler32(adler, buf, len)
+uLong ZEXPORT adler32_z(adler, buf, len)
uLong adler;
const Bytef *buf;
- uInt len;
+ z_size_t len;
{
unsigned long sum2;
unsigned n;
@@ -133,6 +131,15 @@ uLong ZEXPORT adler32(adler, buf, len)
}
/* ========================================================================= */
+uLong ZEXPORT adler32(adler, buf, len)
+ uLong adler;
+ const Bytef *buf;
+ uInt len;
+{
+ return adler32_z(adler, buf, len);
+}
+
+/* ========================================================================= */
local uLong adler32_combine_(adler1, adler2, len2)
uLong adler1;
uLong adler2;
@@ -156,7 +163,7 @@ local uLong adler32_combine_(adler1, adler2, len2)
sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
if (sum1 >= BASE) sum1 -= BASE;
if (sum1 >= BASE) sum1 -= BASE;
- if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
+ if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1);
if (sum2 >= BASE) sum2 -= BASE;
return sum1 | (sum2 << 16);
}
diff --git a/src/thirdparty/zlib/compress.c b/src/thirdparty/zlib/compress.c
index 6e9762676..e2db404ab 100644
--- a/src/thirdparty/zlib/compress.c
+++ b/src/thirdparty/zlib/compress.c
@@ -1,5 +1,5 @@
/* compress.c -- compress a memory buffer
- * Copyright (C) 1995-2005 Jean-loup Gailly.
+ * Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -28,16 +28,11 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
{
z_stream stream;
int err;
+ const uInt max = (uInt)-1;
+ uLong left;
- stream.next_in = (z_const Bytef *)source;
- stream.avail_in = (uInt)sourceLen;
-#ifdef MAXSEG_64K
- /* Check for source > 64K on 16-bit machine: */
- if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-#endif
- stream.next_out = dest;
- stream.avail_out = (uInt)*destLen;
- if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+ left = *destLen;
+ *destLen = 0;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
@@ -46,15 +41,26 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
err = deflateInit(&stream, level);
if (err != Z_OK) return err;
- err = deflate(&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- deflateEnd(&stream);
- return err == Z_OK ? Z_BUF_ERROR : err;
- }
- *destLen = stream.total_out;
+ stream.next_out = dest;
+ stream.avail_out = 0;
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = 0;
+
+ do {
+ if (stream.avail_out == 0) {
+ stream.avail_out = left > (uLong)max ? max : (uInt)left;
+ left -= stream.avail_out;
+ }
+ if (stream.avail_in == 0) {
+ stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen;
+ sourceLen -= stream.avail_in;
+ }
+ err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH);
+ } while (err == Z_OK);
- err = deflateEnd(&stream);
- return err;
+ *destLen = stream.total_out;
+ deflateEnd(&stream);
+ return err == Z_STREAM_END ? Z_OK : err;
}
/* ===========================================================================
diff --git a/src/thirdparty/zlib/crc32.c b/src/thirdparty/zlib/crc32.c
index 979a7190a..9580440c0 100644
--- a/src/thirdparty/zlib/crc32.c
+++ b/src/thirdparty/zlib/crc32.c
@@ -1,5 +1,5 @@
/* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
+ * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*
* Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
@@ -30,17 +30,15 @@
#include "zutil.h" /* for STDC and FAR definitions */
-#define local static
-
/* Definitions for doing the crc four data bytes at a time. */
#if !defined(NOBYFOUR) && defined(Z_U4)
# define BYFOUR
#endif
#ifdef BYFOUR
local unsigned long crc32_little OF((unsigned long,
- const unsigned char FAR *, unsigned));
+ const unsigned char FAR *, z_size_t));
local unsigned long crc32_big OF((unsigned long,
- const unsigned char FAR *, unsigned));
+ const unsigned char FAR *, z_size_t));
# define TBLS 8
#else
# define TBLS 1
@@ -201,10 +199,10 @@ const z_crc_t FAR * ZEXPORT get_crc_table()
#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
/* ========================================================================= */
-unsigned long ZEXPORT crc32(crc, buf, len)
+unsigned long ZEXPORT crc32_z(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
- uInt len;
+ z_size_t len;
{
if (buf == Z_NULL) return 0UL;
@@ -235,8 +233,29 @@ unsigned long ZEXPORT crc32(crc, buf, len)
return crc ^ 0xffffffffUL;
}
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ uInt len;
+{
+ return crc32_z(crc, buf, len);
+}
+
#ifdef BYFOUR
+/*
+ This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit
+ integer pointer type. This violates the strict aliasing rule, where a
+ compiler can assume, for optimization purposes, that two pointers to
+ fundamentally different types won't ever point to the same memory. This can
+ manifest as a problem only if one of the pointers is written to. This code
+ only reads from those pointers. So long as this code remains isolated in
+ this compilation unit, there won't be a problem. For this reason, this code
+ should not be copied and pasted into a compilation unit in which other code
+ writes to the buffer that is passed to these routines.
+ */
+
/* ========================================================================= */
#define DOLIT4 c ^= *buf4++; \
c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
@@ -247,7 +266,7 @@ unsigned long ZEXPORT crc32(crc, buf, len)
local unsigned long crc32_little(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
- unsigned len;
+ z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR *buf4;
@@ -278,7 +297,7 @@ local unsigned long crc32_little(crc, buf, len)
}
/* ========================================================================= */
-#define DOBIG4 c ^= *++buf4; \
+#define DOBIG4 c ^= *buf4++; \
c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
@@ -287,7 +306,7 @@ local unsigned long crc32_little(crc, buf, len)
local unsigned long crc32_big(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
- unsigned len;
+ z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR *buf4;
@@ -300,7 +319,6 @@ local unsigned long crc32_big(crc, buf, len)
}
buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
- buf4--;
while (len >= 32) {
DOBIG32;
len -= 32;
@@ -309,7 +327,6 @@ local unsigned long crc32_big(crc, buf, len)
DOBIG4;
len -= 4;
}
- buf4++;
buf = (const unsigned char FAR *)buf4;
if (len) do {
diff --git a/src/thirdparty/zlib/deflate.c b/src/thirdparty/zlib/deflate.c
index 696957705..1ec761448 100644
--- a/src/thirdparty/zlib/deflate.c
+++ b/src/thirdparty/zlib/deflate.c
@@ -1,5 +1,5 @@
/* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -52,7 +52,7 @@
#include "deflate.h"
const char deflate_copyright[] =
- " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and Mark Adler ";
+ " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -73,6 +73,8 @@ typedef enum {
typedef block_state (*compress_func) OF((deflate_state *s, int flush));
/* Compression function. Returns the block state after the call. */
+local int deflateStateCheck OF((z_streamp strm));
+local void slide_hash OF((deflate_state *s));
local void fill_window OF((deflate_state *s));
local block_state deflate_stored OF((deflate_state *s, int flush));
local block_state deflate_fast OF((deflate_state *s, int flush));
@@ -84,15 +86,16 @@ local block_state deflate_huff OF((deflate_state *s, int flush));
local void lm_init OF((deflate_state *s));
local void putShortMSB OF((deflate_state *s, uInt b));
local void flush_pending OF((z_streamp strm));
-local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
+local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
#ifdef ASMV
+# pragma message("Assembler code may have bugs -- use at your own risk")
void match_init OF((void)); /* asm code initialization */
uInt longest_match OF((deflate_state *s, IPos cur_match));
#else
local uInt longest_match OF((deflate_state *s, IPos cur_match));
#endif
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
local void check_match OF((deflate_state *s, IPos start, IPos match,
int length));
#endif
@@ -148,21 +151,14 @@ local const config configuration_table[10] = {
* meaning.
*/
-#define EQUAL 0
-/* result of memcmp for equal strings */
-
-#ifndef NO_DUMMY_DECL
-struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
-#endif
-
/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
-#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0))
/* ===========================================================================
* Update a hash value with the given input byte
- * IN assertion: all calls to to UPDATE_HASH are made with consecutive
- * input characters, so that a running hash key can be computed from the
- * previous key instead of complete recalculation each time.
+ * IN assertion: all calls to UPDATE_HASH are made with consecutive input
+ * characters, so that a running hash key can be computed from the previous
+ * key instead of complete recalculation each time.
*/
#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
@@ -173,9 +169,9 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
* the previous length of the hash chain.
* If this file is compiled with -DFASTEST, the compression level is forced
* to 1, and no hash chains are maintained.
- * IN assertion: all calls to to INSERT_STRING are made with consecutive
- * input characters and the first MIN_MATCH bytes of str are valid
- * (except for the last MIN_MATCH-1 bytes of the input file).
+ * IN assertion: all calls to INSERT_STRING are made with consecutive input
+ * characters and the first MIN_MATCH bytes of str are valid (except for
+ * the last MIN_MATCH-1 bytes of the input file).
*/
#ifdef FASTEST
#define INSERT_STRING(s, str, match_head) \
@@ -197,6 +193,37 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
s->head[s->hash_size-1] = NIL; \
zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+/* ===========================================================================
+ * Slide the hash table when sliding the window down (could be avoided with 32
+ * bit values at the expense of memory usage). We slide even when level == 0 to
+ * keep the hash table consistent if we switch back to level > 0 later.
+ */
+local void slide_hash(s)
+ deflate_state *s;
+{
+ unsigned n, m;
+ Posf *p;
+ uInt wsize = s->w_size;
+
+ n = s->hash_size;
+ p = &s->head[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m - wsize : NIL);
+ } while (--n);
+ n = wsize;
+#ifndef FASTEST
+ p = &s->prev[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m - wsize : NIL);
+ /* If n is not on any hash chain, prev[n] is garbage but
+ * its value will never be used.
+ */
+ } while (--n);
+#endif
+}
+
/* ========================================================================= */
int ZEXPORT deflateInit_(strm, level, version, stream_size)
z_streamp strm;
@@ -270,7 +297,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
#endif
if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
- strategy < 0 || strategy > Z_FIXED) {
+ strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) {
return Z_STREAM_ERROR;
}
if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
@@ -278,14 +305,15 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
if (s == Z_NULL) return Z_MEM_ERROR;
strm->state = (struct internal_state FAR *)s;
s->strm = strm;
+ s->status = INIT_STATE; /* to pass state test in deflateReset() */
s->wrap = wrap;
s->gzhead = Z_NULL;
- s->w_bits = windowBits;
+ s->w_bits = (uInt)windowBits;
s->w_size = 1 << s->w_bits;
s->w_mask = s->w_size - 1;
- s->hash_bits = memLevel + 7;
+ s->hash_bits = (uInt)memLevel + 7;
s->hash_size = 1 << s->hash_bits;
s->hash_mask = s->hash_size - 1;
s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
@@ -319,6 +347,31 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
return deflateReset(strm);
}
+/* =========================================================================
+ * Check for a valid deflate stream state. Return 0 if ok, 1 if not.
+ */
+local int deflateStateCheck (strm)
+ z_streamp strm;
+{
+ deflate_state *s;
+ if (strm == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
+ return 1;
+ s = strm->state;
+ if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE &&
+#ifdef GZIP
+ s->status != GZIP_STATE &&
+#endif
+ s->status != EXTRA_STATE &&
+ s->status != NAME_STATE &&
+ s->status != COMMENT_STATE &&
+ s->status != HCRC_STATE &&
+ s->status != BUSY_STATE &&
+ s->status != FINISH_STATE))
+ return 1;
+ return 0;
+}
+
/* ========================================================================= */
int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
z_streamp strm;
@@ -331,7 +384,7 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
unsigned avail;
z_const unsigned char *next;
- if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+ if (deflateStateCheck(strm) || dictionary == Z_NULL)
return Z_STREAM_ERROR;
s = strm->state;
wrap = s->wrap;
@@ -389,13 +442,34 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
}
/* ========================================================================= */
+int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength)
+ z_streamp strm;
+ Bytef *dictionary;
+ uInt *dictLength;
+{
+ deflate_state *s;
+ uInt len;
+
+ if (deflateStateCheck(strm))
+ return Z_STREAM_ERROR;
+ s = strm->state;
+ len = s->strstart + s->lookahead;
+ if (len > s->w_size)
+ len = s->w_size;
+ if (dictionary != Z_NULL && len)
+ zmemcpy(dictionary, s->window + s->strstart + s->lookahead - len, len);
+ if (dictLength != Z_NULL)
+ *dictLength = len;
+ return Z_OK;
+}
+
+/* ========================================================================= */
int ZEXPORT deflateResetKeep (strm)
z_streamp strm;
{
deflate_state *s;
- if (strm == Z_NULL || strm->state == Z_NULL ||
- strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+ if (deflateStateCheck(strm)) {
return Z_STREAM_ERROR;
}
@@ -410,7 +484,11 @@ int ZEXPORT deflateResetKeep (strm)
if (s->wrap < 0) {
s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
}
- s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+ s->status =
+#ifdef GZIP
+ s->wrap == 2 ? GZIP_STATE :
+#endif
+ s->wrap ? INIT_STATE : BUSY_STATE;
strm->adler =
#ifdef GZIP
s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
@@ -440,8 +518,8 @@ int ZEXPORT deflateSetHeader (strm, head)
z_streamp strm;
gz_headerp head;
{
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
- if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm) || strm->state->wrap != 2)
+ return Z_STREAM_ERROR;
strm->state->gzhead = head;
return Z_OK;
}
@@ -452,7 +530,7 @@ int ZEXPORT deflatePending (strm, pending, bits)
int *bits;
z_streamp strm;
{
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
if (pending != Z_NULL)
*pending = strm->state->pending;
if (bits != Z_NULL)
@@ -469,7 +547,7 @@ int ZEXPORT deflatePrime (strm, bits, value)
deflate_state *s;
int put;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
return Z_BUF_ERROR;
@@ -494,9 +572,8 @@ int ZEXPORT deflateParams(strm, level, strategy)
{
deflate_state *s;
compress_func func;
- int err = Z_OK;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
#ifdef FASTEST
@@ -510,13 +587,22 @@ int ZEXPORT deflateParams(strm, level, strategy)
func = configuration_table[s->level].func;
if ((strategy != s->strategy || func != configuration_table[level].func) &&
- strm->total_in != 0) {
+ s->high_water) {
/* Flush the last buffer: */
- err = deflate(strm, Z_BLOCK);
- if (err == Z_BUF_ERROR && s->pending == 0)
- err = Z_OK;
+ int err = deflate(strm, Z_BLOCK);
+ if (err == Z_STREAM_ERROR)
+ return err;
+ if (strm->avail_out == 0)
+ return Z_BUF_ERROR;
}
if (s->level != level) {
+ if (s->level == 0 && s->matches != 0) {
+ if (s->matches == 1)
+ slide_hash(s);
+ else
+ CLEAR_HASH(s);
+ s->matches = 0;
+ }
s->level = level;
s->max_lazy_match = configuration_table[level].max_lazy;
s->good_match = configuration_table[level].good_length;
@@ -524,7 +610,7 @@ int ZEXPORT deflateParams(strm, level, strategy)
s->max_chain_length = configuration_table[level].max_chain;
}
s->strategy = strategy;
- return err;
+ return Z_OK;
}
/* ========================================================================= */
@@ -537,12 +623,12 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
{
deflate_state *s;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
- s->good_match = good_length;
- s->max_lazy_match = max_lazy;
+ s->good_match = (uInt)good_length;
+ s->max_lazy_match = (uInt)max_lazy;
s->nice_match = nice_length;
- s->max_chain_length = max_chain;
+ s->max_chain_length = (uInt)max_chain;
return Z_OK;
}
@@ -569,14 +655,13 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
{
deflate_state *s;
uLong complen, wraplen;
- Bytef *str;
/* conservative upper bound for compressed data */
complen = sourceLen +
((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
/* if can't get parameters, return conservative bound plus zlib wrapper */
- if (strm == Z_NULL || strm->state == Z_NULL)
+ if (deflateStateCheck(strm))
return complen + 6;
/* compute wrapper length */
@@ -588,9 +673,11 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
case 1: /* zlib wrapper */
wraplen = 6 + (s->strstart ? 4 : 0);
break;
+#ifdef GZIP
case 2: /* gzip wrapper */
wraplen = 18;
if (s->gzhead != Z_NULL) { /* user-supplied gzip header */
+ Bytef *str;
if (s->gzhead->extra != Z_NULL)
wraplen += 2 + s->gzhead->extra_len;
str = s->gzhead->name;
@@ -607,6 +694,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
wraplen += 2;
}
break;
+#endif
default: /* for compiler happiness */
wraplen = 6;
}
@@ -634,10 +722,10 @@ local void putShortMSB (s, b)
}
/* =========================================================================
- * Flush as much pending output as possible. All deflate() output goes
- * through this function so some applications may wish to modify it
- * to avoid allocating a large strm->next_out buffer and copying into it.
- * (See also read_buf()).
+ * Flush as much pending output as possible. All deflate() output, except for
+ * some deflate_stored() output, goes through this function so some
+ * applications may wish to modify it to avoid allocating a large
+ * strm->next_out buffer and copying into it. (See also read_buf()).
*/
local void flush_pending(strm)
z_streamp strm;
@@ -654,13 +742,23 @@ local void flush_pending(strm)
strm->next_out += len;
s->pending_out += len;
strm->total_out += len;
- strm->avail_out -= len;
- s->pending -= len;
+ strm->avail_out -= len;
+ s->pending -= len;
if (s->pending == 0) {
s->pending_out = s->pending_buf;
}
}
+/* ===========================================================================
+ * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1].
+ */
+#define HCRC_UPDATE(beg) \
+ do { \
+ if (s->gzhead->hcrc && s->pending > (beg)) \
+ strm->adler = crc32(strm->adler, s->pending_buf + (beg), \
+ s->pending - (beg)); \
+ } while (0)
+
/* ========================================================================= */
int ZEXPORT deflate (strm, flush)
z_streamp strm;
@@ -669,230 +767,229 @@ int ZEXPORT deflate (strm, flush)
int old_flush; /* value of flush param for previous deflate call */
deflate_state *s;
- if (strm == Z_NULL || strm->state == Z_NULL ||
- flush > Z_BLOCK || flush < 0) {
+ if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) {
return Z_STREAM_ERROR;
}
s = strm->state;
if (strm->next_out == Z_NULL ||
- (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+ (strm->avail_in != 0 && strm->next_in == Z_NULL) ||
(s->status == FINISH_STATE && flush != Z_FINISH)) {
ERR_RETURN(strm, Z_STREAM_ERROR);
}
if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
- s->strm = strm; /* just in case */
old_flush = s->last_flush;
s->last_flush = flush;
+ /* Flush as much pending output as possible */
+ if (s->pending != 0) {
+ flush_pending(strm);
+ if (strm->avail_out == 0) {
+ /* Since avail_out is 0, deflate will be called again with
+ * more output space, but possibly with both pending and
+ * avail_in equal to zero. There won't be anything to do,
+ * but this is not an error situation so make sure we
+ * return OK instead of BUF_ERROR at next call of deflate:
+ */
+ s->last_flush = -1;
+ return Z_OK;
+ }
+
+ /* Make sure there is something to do and avoid duplicate consecutive
+ * flushes. For repeated and useless calls with Z_FINISH, we keep
+ * returning Z_STREAM_END instead of Z_BUF_ERROR.
+ */
+ } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
+ flush != Z_FINISH) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
+ /* User must not provide more input after the first FINISH: */
+ if (s->status == FINISH_STATE && strm->avail_in != 0) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
/* Write the header */
if (s->status == INIT_STATE) {
-#ifdef GZIP
- if (s->wrap == 2) {
- strm->adler = crc32(0L, Z_NULL, 0);
- put_byte(s, 31);
- put_byte(s, 139);
- put_byte(s, 8);
- if (s->gzhead == Z_NULL) {
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, s->level == 9 ? 2 :
- (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
- 4 : 0));
- put_byte(s, OS_CODE);
- s->status = BUSY_STATE;
- }
- else {
- put_byte(s, (s->gzhead->text ? 1 : 0) +
- (s->gzhead->hcrc ? 2 : 0) +
- (s->gzhead->extra == Z_NULL ? 0 : 4) +
- (s->gzhead->name == Z_NULL ? 0 : 8) +
- (s->gzhead->comment == Z_NULL ? 0 : 16)
- );
- put_byte(s, (Byte)(s->gzhead->time & 0xff));
- put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
- put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
- put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
- put_byte(s, s->level == 9 ? 2 :
- (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
- 4 : 0));
- put_byte(s, s->gzhead->os & 0xff);
- if (s->gzhead->extra != Z_NULL) {
- put_byte(s, s->gzhead->extra_len & 0xff);
- put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
- }
- if (s->gzhead->hcrc)
- strm->adler = crc32(strm->adler, s->pending_buf,
- s->pending);
- s->gzindex = 0;
- s->status = EXTRA_STATE;
- }
- }
+ /* zlib header */
+ uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+ uInt level_flags;
+
+ if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+ level_flags = 0;
+ else if (s->level < 6)
+ level_flags = 1;
+ else if (s->level == 6)
+ level_flags = 2;
else
-#endif
- {
- uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
- uInt level_flags;
-
- if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
- level_flags = 0;
- else if (s->level < 6)
- level_flags = 1;
- else if (s->level == 6)
- level_flags = 2;
- else
- level_flags = 3;
- header |= (level_flags << 6);
- if (s->strstart != 0) header |= PRESET_DICT;
- header += 31 - (header % 31);
+ level_flags = 3;
+ header |= (level_flags << 6);
+ if (s->strstart != 0) header |= PRESET_DICT;
+ header += 31 - (header % 31);
+
+ putShortMSB(s, header);
+ /* Save the adler32 of the preset dictionary: */
+ if (s->strstart != 0) {
+ putShortMSB(s, (uInt)(strm->adler >> 16));
+ putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ }
+ strm->adler = adler32(0L, Z_NULL, 0);
+ s->status = BUSY_STATE;
+
+ /* Compression must start with an empty pending buffer */
+ flush_pending(strm);
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
+ }
+ }
+#ifdef GZIP
+ if (s->status == GZIP_STATE) {
+ /* gzip header */
+ strm->adler = crc32(0L, Z_NULL, 0);
+ put_byte(s, 31);
+ put_byte(s, 139);
+ put_byte(s, 8);
+ if (s->gzhead == Z_NULL) {
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, OS_CODE);
s->status = BUSY_STATE;
- putShortMSB(s, header);
- /* Save the adler32 of the preset dictionary: */
- if (s->strstart != 0) {
- putShortMSB(s, (uInt)(strm->adler >> 16));
- putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ /* Compression must start with an empty pending buffer */
+ flush_pending(strm);
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
+ }
+ }
+ else {
+ put_byte(s, (s->gzhead->text ? 1 : 0) +
+ (s->gzhead->hcrc ? 2 : 0) +
+ (s->gzhead->extra == Z_NULL ? 0 : 4) +
+ (s->gzhead->name == Z_NULL ? 0 : 8) +
+ (s->gzhead->comment == Z_NULL ? 0 : 16)
+ );
+ put_byte(s, (Byte)(s->gzhead->time & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, s->gzhead->os & 0xff);
+ if (s->gzhead->extra != Z_NULL) {
+ put_byte(s, s->gzhead->extra_len & 0xff);
+ put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
}
- strm->adler = adler32(0L, Z_NULL, 0);
+ if (s->gzhead->hcrc)
+ strm->adler = crc32(strm->adler, s->pending_buf,
+ s->pending);
+ s->gzindex = 0;
+ s->status = EXTRA_STATE;
}
}
-#ifdef GZIP
if (s->status == EXTRA_STATE) {
if (s->gzhead->extra != Z_NULL) {
- uInt beg = s->pending; /* start of bytes to update crc */
-
- while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
- if (s->pending == s->pending_buf_size) {
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- flush_pending(strm);
- beg = s->pending;
- if (s->pending == s->pending_buf_size)
- break;
+ ulg beg = s->pending; /* start of bytes to update crc */
+ uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex;
+ while (s->pending + left > s->pending_buf_size) {
+ uInt copy = s->pending_buf_size - s->pending;
+ zmemcpy(s->pending_buf + s->pending,
+ s->gzhead->extra + s->gzindex, copy);
+ s->pending = s->pending_buf_size;
+ HCRC_UPDATE(beg);
+ s->gzindex += copy;
+ flush_pending(strm);
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
}
- put_byte(s, s->gzhead->extra[s->gzindex]);
- s->gzindex++;
- }
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- if (s->gzindex == s->gzhead->extra_len) {
- s->gzindex = 0;
- s->status = NAME_STATE;
+ beg = 0;
+ left -= copy;
}
+ zmemcpy(s->pending_buf + s->pending,
+ s->gzhead->extra + s->gzindex, left);
+ s->pending += left;
+ HCRC_UPDATE(beg);
+ s->gzindex = 0;
}
- else
- s->status = NAME_STATE;
+ s->status = NAME_STATE;
}
if (s->status == NAME_STATE) {
if (s->gzhead->name != Z_NULL) {
- uInt beg = s->pending; /* start of bytes to update crc */
+ ulg beg = s->pending; /* start of bytes to update crc */
int val;
-
do {
if (s->pending == s->pending_buf_size) {
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
+ HCRC_UPDATE(beg);
flush_pending(strm);
- beg = s->pending;
- if (s->pending == s->pending_buf_size) {
- val = 1;
- break;
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
}
+ beg = 0;
}
val = s->gzhead->name[s->gzindex++];
put_byte(s, val);
} while (val != 0);
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- if (val == 0) {
- s->gzindex = 0;
- s->status = COMMENT_STATE;
- }
+ HCRC_UPDATE(beg);
+ s->gzindex = 0;
}
- else
- s->status = COMMENT_STATE;
+ s->status = COMMENT_STATE;
}
if (s->status == COMMENT_STATE) {
if (s->gzhead->comment != Z_NULL) {
- uInt beg = s->pending; /* start of bytes to update crc */
+ ulg beg = s->pending; /* start of bytes to update crc */
int val;
-
do {
if (s->pending == s->pending_buf_size) {
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
+ HCRC_UPDATE(beg);
flush_pending(strm);
- beg = s->pending;
- if (s->pending == s->pending_buf_size) {
- val = 1;
- break;
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
}
+ beg = 0;
}
val = s->gzhead->comment[s->gzindex++];
put_byte(s, val);
} while (val != 0);
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- if (val == 0)
- s->status = HCRC_STATE;
+ HCRC_UPDATE(beg);
}
- else
- s->status = HCRC_STATE;
+ s->status = HCRC_STATE;
}
if (s->status == HCRC_STATE) {
if (s->gzhead->hcrc) {
- if (s->pending + 2 > s->pending_buf_size)
+ if (s->pending + 2 > s->pending_buf_size) {
flush_pending(strm);
- if (s->pending + 2 <= s->pending_buf_size) {
- put_byte(s, (Byte)(strm->adler & 0xff));
- put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
- strm->adler = crc32(0L, Z_NULL, 0);
- s->status = BUSY_STATE;
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
+ }
}
+ put_byte(s, (Byte)(strm->adler & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+ strm->adler = crc32(0L, Z_NULL, 0);
}
- else
- s->status = BUSY_STATE;
- }
-#endif
+ s->status = BUSY_STATE;
- /* Flush as much pending output as possible */
- if (s->pending != 0) {
+ /* Compression must start with an empty pending buffer */
flush_pending(strm);
- if (strm->avail_out == 0) {
- /* Since avail_out is 0, deflate will be called again with
- * more output space, but possibly with both pending and
- * avail_in equal to zero. There won't be anything to do,
- * but this is not an error situation so make sure we
- * return OK instead of BUF_ERROR at next call of deflate:
- */
+ if (s->pending != 0) {
s->last_flush = -1;
return Z_OK;
}
-
- /* Make sure there is something to do and avoid duplicate consecutive
- * flushes. For repeated and useless calls with Z_FINISH, we keep
- * returning Z_STREAM_END instead of Z_BUF_ERROR.
- */
- } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
- flush != Z_FINISH) {
- ERR_RETURN(strm, Z_BUF_ERROR);
- }
-
- /* User must not provide more input after the first FINISH: */
- if (s->status == FINISH_STATE && strm->avail_in != 0) {
- ERR_RETURN(strm, Z_BUF_ERROR);
}
+#endif
/* Start a new block or continue the current one.
*/
@@ -900,9 +997,10 @@ int ZEXPORT deflate (strm, flush)
(flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
block_state bstate;
- bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
- (s->strategy == Z_RLE ? deflate_rle(s, flush) :
- (*(configuration_table[s->level].func))(s, flush));
+ bstate = s->level == 0 ? deflate_stored(s, flush) :
+ s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+ s->strategy == Z_RLE ? deflate_rle(s, flush) :
+ (*(configuration_table[s->level].func))(s, flush);
if (bstate == finish_started || bstate == finish_done) {
s->status = FINISH_STATE;
@@ -944,7 +1042,6 @@ int ZEXPORT deflate (strm, flush)
}
}
}
- Assert(strm->avail_out > 0, "bug2");
if (flush != Z_FINISH) return Z_OK;
if (s->wrap <= 0) return Z_STREAM_END;
@@ -981,18 +1078,9 @@ int ZEXPORT deflateEnd (strm)
{
int status;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
status = strm->state->status;
- if (status != INIT_STATE &&
- status != EXTRA_STATE &&
- status != NAME_STATE &&
- status != COMMENT_STATE &&
- status != HCRC_STATE &&
- status != BUSY_STATE &&
- status != FINISH_STATE) {
- return Z_STREAM_ERROR;
- }
/* Deallocate in reverse order of allocations: */
TRY_FREE(strm, strm->state->pending_buf);
@@ -1023,7 +1111,7 @@ int ZEXPORT deflateCopy (dest, source)
ushf *overlay;
- if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+ if (deflateStateCheck(source) || dest == Z_NULL) {
return Z_STREAM_ERROR;
}
@@ -1073,7 +1161,7 @@ int ZEXPORT deflateCopy (dest, source)
* allocating a large strm->next_in buffer and copying from it.
* (See also flush_pending()).
*/
-local int read_buf(strm, buf, size)
+local unsigned read_buf(strm, buf, size)
z_streamp strm;
Bytef *buf;
unsigned size;
@@ -1097,7 +1185,7 @@ local int read_buf(strm, buf, size)
strm->next_in += len;
strm->total_in += len;
- return (int)len;
+ return len;
}
/* ===========================================================================
@@ -1151,9 +1239,9 @@ local uInt longest_match(s, cur_match)
{
unsigned chain_length = s->max_chain_length;/* max hash chain length */
register Bytef *scan = s->window + s->strstart; /* current string */
- register Bytef *match; /* matched string */
+ register Bytef *match; /* matched string */
register int len; /* length of current match */
- int best_len = s->prev_length; /* best match length so far */
+ int best_len = (int)s->prev_length; /* best match length so far */
int nice_match = s->nice_match; /* stop if match long enough */
IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
s->strstart - (IPos)MAX_DIST(s) : NIL;
@@ -1188,7 +1276,7 @@ local uInt longest_match(s, cur_match)
/* Do not look for matches beyond the end of the input. This is necessary
* to make deflate deterministic.
*/
- if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+ if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead;
Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
@@ -1349,7 +1437,11 @@ local uInt longest_match(s, cur_match)
#endif /* FASTEST */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
/* ===========================================================================
* Check that the match at match_start is indeed a match.
*/
@@ -1375,7 +1467,7 @@ local void check_match(s, start, match, length)
}
#else
# define check_match(s, start, match, length)
-#endif /* DEBUG */
+#endif /* ZLIB_DEBUG */
/* ===========================================================================
* Fill the window when the lookahead becomes insufficient.
@@ -1390,8 +1482,7 @@ local void check_match(s, start, match, length)
local void fill_window(s)
deflate_state *s;
{
- register unsigned n, m;
- register Posf *p;
+ unsigned n;
unsigned more; /* Amount of free space at the end of the window. */
uInt wsize = s->w_size;
@@ -1418,35 +1509,11 @@ local void fill_window(s)
*/
if (s->strstart >= wsize+MAX_DIST(s)) {
- zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+ zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more);
s->match_start -= wsize;
s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
s->block_start -= (long) wsize;
-
- /* Slide the hash table (could be avoided with 32 bit values
- at the expense of memory usage). We slide even when level == 0
- to keep the hash table consistent if we switch back to level > 0
- later. (Using level 0 permanently is not an optimal usage of
- zlib, so we don't care about this pathological case.)
- */
- n = s->hash_size;
- p = &s->head[n];
- do {
- m = *--p;
- *p = (Pos)(m >= wsize ? m-wsize : NIL);
- } while (--n);
-
- n = wsize;
-#ifndef FASTEST
- p = &s->prev[n];
- do {
- m = *--p;
- *p = (Pos)(m >= wsize ? m-wsize : NIL);
- /* If n is not on any hash chain, prev[n] is garbage but
- * its value will never be used.
- */
- } while (--n);
-#endif
+ slide_hash(s);
more += wsize;
}
if (s->strm->avail_in == 0) break;
@@ -1552,70 +1619,199 @@ local void fill_window(s)
if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
}
+/* Maximum stored block length in deflate format (not including header). */
+#define MAX_STORED 65535
+
+/* Minimum of a and b. */
+#define MIN(a, b) ((a) > (b) ? (b) : (a))
+
/* ===========================================================================
* Copy without compression as much as possible from the input stream, return
* the current block state.
- * This function does not insert new strings in the dictionary since
- * uncompressible data is probably not useful. This function is used
- * only for the level=0 compression option.
- * NOTE: this function should be optimized to avoid extra copying from
- * window to pending_buf.
+ *
+ * In case deflateParams() is used to later switch to a non-zero compression
+ * level, s->matches (otherwise unused when storing) keeps track of the number
+ * of hash table slides to perform. If s->matches is 1, then one hash table
+ * slide will be done when switching. If s->matches is 2, the maximum value
+ * allowed here, then the hash table will be cleared, since two or more slides
+ * is the same as a clear.
+ *
+ * deflate_stored() is written to minimize the number of times an input byte is
+ * copied. It is most efficient with large input and output buffers, which
+ * maximizes the opportunites to have a single copy from next_in to next_out.
*/
local block_state deflate_stored(s, flush)
deflate_state *s;
int flush;
{
- /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
- * to pending_buf_size, and each stored block has a 5 byte header:
+ /* Smallest worthy block size when not flushing or finishing. By default
+ * this is 32K. This can be as small as 507 bytes for memLevel == 1. For
+ * large input and output buffers, the stored block size will be larger.
*/
- ulg max_block_size = 0xffff;
- ulg max_start;
-
- if (max_block_size > s->pending_buf_size - 5) {
- max_block_size = s->pending_buf_size - 5;
- }
+ unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size);
- /* Copy as much as possible from input to output: */
- for (;;) {
- /* Fill the window as much as possible: */
- if (s->lookahead <= 1) {
-
- Assert(s->strstart < s->w_size+MAX_DIST(s) ||
- s->block_start >= (long)s->w_size, "slide too late");
+ /* Copy as many min_block or larger stored blocks directly to next_out as
+ * possible. If flushing, copy the remaining available input to next_out as
+ * stored blocks, if there is enough space.
+ */
+ unsigned len, left, have, last = 0;
+ unsigned used = s->strm->avail_in;
+ do {
+ /* Set len to the maximum size block that we can copy directly with the
+ * available input data and output space. Set left to how much of that
+ * would be copied from what's left in the window.
+ */
+ len = MAX_STORED; /* maximum deflate stored block length */
+ have = (s->bi_valid + 42) >> 3; /* number of header bytes */
+ if (s->strm->avail_out < have) /* need room for header */
+ break;
+ /* maximum stored block length that will fit in avail_out: */
+ have = s->strm->avail_out - have;
+ left = s->strstart - s->block_start; /* bytes left in window */
+ if (len > (ulg)left + s->strm->avail_in)
+ len = left + s->strm->avail_in; /* limit len to the input */
+ if (len > have)
+ len = have; /* limit len to the output */
+
+ /* If the stored block would be less than min_block in length, or if
+ * unable to copy all of the available input when flushing, then try
+ * copying to the window and the pending buffer instead. Also don't
+ * write an empty block when flushing -- deflate() does that.
+ */
+ if (len < min_block && ((len == 0 && flush != Z_FINISH) ||
+ flush == Z_NO_FLUSH ||
+ len != left + s->strm->avail_in))
+ break;
- fill_window(s);
- if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+ /* Make a dummy stored block in pending to get the header bytes,
+ * including any pending bits. This also updates the debugging counts.
+ */
+ last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0;
+ _tr_stored_block(s, (char *)0, 0L, last);
+
+ /* Replace the lengths in the dummy stored block with len. */
+ s->pending_buf[s->pending - 4] = len;
+ s->pending_buf[s->pending - 3] = len >> 8;
+ s->pending_buf[s->pending - 2] = ~len;
+ s->pending_buf[s->pending - 1] = ~len >> 8;
+
+ /* Write the stored block header bytes. */
+ flush_pending(s->strm);
+
+#ifdef ZLIB_DEBUG
+ /* Update debugging counts for the data about to be copied. */
+ s->compressed_len += len << 3;
+ s->bits_sent += len << 3;
+#endif
- if (s->lookahead == 0) break; /* flush the current block */
+ /* Copy uncompressed bytes from the window to next_out. */
+ if (left) {
+ if (left > len)
+ left = len;
+ zmemcpy(s->strm->next_out, s->window + s->block_start, left);
+ s->strm->next_out += left;
+ s->strm->avail_out -= left;
+ s->strm->total_out += left;
+ s->block_start += left;
+ len -= left;
}
- Assert(s->block_start >= 0L, "block gone");
-
- s->strstart += s->lookahead;
- s->lookahead = 0;
-
- /* Emit a stored block if pending_buf will be full: */
- max_start = s->block_start + max_block_size;
- if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
- /* strstart == 0 is possible when wraparound on 16-bit machine */
- s->lookahead = (uInt)(s->strstart - max_start);
- s->strstart = (uInt)max_start;
- FLUSH_BLOCK(s, 0);
+
+ /* Copy uncompressed bytes directly from next_in to next_out, updating
+ * the check value.
+ */
+ if (len) {
+ read_buf(s->strm, s->strm->next_out, len);
+ s->strm->next_out += len;
+ s->strm->avail_out -= len;
+ s->strm->total_out += len;
}
- /* Flush if we may have to slide, otherwise block_start may become
- * negative and the data will be gone:
+ } while (last == 0);
+
+ /* Update the sliding window with the last s->w_size bytes of the copied
+ * data, or append all of the copied data to the existing window if less
+ * than s->w_size bytes were copied. Also update the number of bytes to
+ * insert in the hash tables, in the event that deflateParams() switches to
+ * a non-zero compression level.
+ */
+ used -= s->strm->avail_in; /* number of input bytes directly copied */
+ if (used) {
+ /* If any input was used, then no unused input remains in the window,
+ * therefore s->block_start == s->strstart.
*/
- if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
- FLUSH_BLOCK(s, 0);
+ if (used >= s->w_size) { /* supplant the previous history */
+ s->matches = 2; /* clear hash */
+ zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
+ s->strstart = s->w_size;
}
+ else {
+ if (s->window_size - s->strstart <= used) {
+ /* Slide the window down. */
+ s->strstart -= s->w_size;
+ zmemcpy(s->window, s->window + s->w_size, s->strstart);
+ if (s->matches < 2)
+ s->matches++; /* add a pending slide_hash() */
+ }
+ zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
+ s->strstart += used;
+ }
+ s->block_start = s->strstart;
+ s->insert += MIN(used, s->w_size - s->insert);
}
- s->insert = 0;
- if (flush == Z_FINISH) {
- FLUSH_BLOCK(s, 1);
+ if (s->high_water < s->strstart)
+ s->high_water = s->strstart;
+
+ /* If the last block was written to next_out, then done. */
+ if (last)
return finish_done;
+
+ /* If flushing and all input has been consumed, then done. */
+ if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
+ s->strm->avail_in == 0 && (long)s->strstart == s->block_start)
+ return block_done;
+
+ /* Fill the window with any remaining input. */
+ have = s->window_size - s->strstart - 1;
+ if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
+ /* Slide the window down. */
+ s->block_start -= s->w_size;
+ s->strstart -= s->w_size;
+ zmemcpy(s->window, s->window + s->w_size, s->strstart);
+ if (s->matches < 2)
+ s->matches++; /* add a pending slide_hash() */
+ have += s->w_size; /* more space now */
}
- if ((long)s->strstart > s->block_start)
- FLUSH_BLOCK(s, 0);
- return block_done;
+ if (have > s->strm->avail_in)
+ have = s->strm->avail_in;
+ if (have) {
+ read_buf(s->strm, s->window + s->strstart, have);
+ s->strstart += have;
+ }
+ if (s->high_water < s->strstart)
+ s->high_water = s->strstart;
+
+ /* There was not enough avail_out to write a complete worthy or flushed
+ * stored block to next_out. Write a stored block to pending instead, if we
+ * have enough input for a worthy block, or if flushing and there is enough
+ * room for the remaining input as a stored block in the pending buffer.
+ */
+ have = (s->bi_valid + 42) >> 3; /* number of header bytes */
+ /* maximum stored block length that will fit in pending: */
+ have = MIN(s->pending_buf_size - have, MAX_STORED);
+ min_block = MIN(have, s->w_size);
+ left = s->strstart - s->block_start;
+ if (left >= min_block ||
+ ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH &&
+ s->strm->avail_in == 0 && left <= have)) {
+ len = MIN(left, have);
+ last = flush == Z_FINISH && s->strm->avail_in == 0 &&
+ len == left ? 1 : 0;
+ _tr_stored_block(s, (charf *)s->window + s->block_start, len, last);
+ s->block_start += len;
+ flush_pending(s->strm);
+ }
+
+ /* We've done all we can with the available input and output. */
+ return last ? finish_started : need_more;
}
/* ===========================================================================
@@ -1892,7 +2088,7 @@ local block_state deflate_rle(s, flush)
prev == *++scan && prev == *++scan &&
prev == *++scan && prev == *++scan &&
scan < strend);
- s->match_length = MAX_MATCH - (int)(strend - scan);
+ s->match_length = MAX_MATCH - (uInt)(strend - scan);
if (s->match_length > s->lookahead)
s->match_length = s->lookahead;
}
diff --git a/src/thirdparty/zlib/deflate.h b/src/thirdparty/zlib/deflate.h
index ce0299edd..23ecdd312 100644
--- a/src/thirdparty/zlib/deflate.h
+++ b/src/thirdparty/zlib/deflate.h
@@ -1,5 +1,5 @@
/* deflate.h -- internal compression state
- * Copyright (C) 1995-2012 Jean-loup Gailly
+ * Copyright (C) 1995-2016 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -51,13 +51,16 @@
#define Buf_size 16
/* size of bit buffer in bi_buf */
-#define INIT_STATE 42
-#define EXTRA_STATE 69
-#define NAME_STATE 73
-#define COMMENT_STATE 91
-#define HCRC_STATE 103
-#define BUSY_STATE 113
-#define FINISH_STATE 666
+#define INIT_STATE 42 /* zlib header -> BUSY_STATE */
+#ifdef GZIP
+# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */
+#endif
+#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */
+#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */
+#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */
+#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */
+#define BUSY_STATE 113 /* deflate -> FINISH_STATE */
+#define FINISH_STATE 666 /* stream complete */
/* Stream status */
@@ -83,7 +86,7 @@ typedef struct static_tree_desc_s static_tree_desc;
typedef struct tree_desc_s {
ct_data *dyn_tree; /* the dynamic tree */
int max_code; /* largest code with non zero frequency */
- static_tree_desc *stat_desc; /* the corresponding static tree */
+ const static_tree_desc *stat_desc; /* the corresponding static tree */
} FAR tree_desc;
typedef ush Pos;
@@ -100,10 +103,10 @@ typedef struct internal_state {
Bytef *pending_buf; /* output still pending */
ulg pending_buf_size; /* size of pending_buf */
Bytef *pending_out; /* next pending byte to output to the stream */
- uInt pending; /* nb of bytes in the pending buffer */
+ ulg pending; /* nb of bytes in the pending buffer */
int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
gz_headerp gzhead; /* gzip header information to write */
- uInt gzindex; /* where in extra, name, or comment */
+ ulg gzindex; /* where in extra, name, or comment */
Byte method; /* can only be DEFLATED */
int last_flush; /* value of flush param for previous deflate call */
@@ -249,7 +252,7 @@ typedef struct internal_state {
uInt matches; /* number of string matches in current block */
uInt insert; /* bytes at end of window left to insert */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
ulg compressed_len; /* total bit length of compressed file mod 2^32 */
ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
#endif
@@ -275,7 +278,7 @@ typedef struct internal_state {
/* Output a byte on the stream.
* IN assertion: there is enough room in pending_buf.
*/
-#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);}
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
@@ -309,7 +312,7 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
* used.
*/
-#ifndef DEBUG
+#ifndef ZLIB_DEBUG
/* Inline versions of _tr_tally for speed: */
#if defined(GEN_TREES_H) || !defined(STDC)
@@ -328,8 +331,8 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
flush = (s->last_lit == s->lit_bufsize-1); \
}
# define _tr_tally_dist(s, distance, length, flush) \
- { uch len = (length); \
- ush dist = (distance); \
+ { uch len = (uch)(length); \
+ ush dist = (ush)(distance); \
s->d_buf[s->last_lit] = dist; \
s->l_buf[s->last_lit++] = len; \
dist--; \
diff --git a/src/thirdparty/zlib/gzguts.h b/src/thirdparty/zlib/gzguts.h
index d87659d03..990a4d251 100644
--- a/src/thirdparty/zlib/gzguts.h
+++ b/src/thirdparty/zlib/gzguts.h
@@ -1,5 +1,5 @@
/* gzguts.h -- zlib internal header definitions for gz* operations
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -25,6 +25,10 @@
# include <stdlib.h>
# include <limits.h>
#endif
+
+#ifndef _POSIX_SOURCE
+# define _POSIX_SOURCE
+#endif
#include <fcntl.h>
#ifdef _WIN32
@@ -35,6 +39,10 @@
# include <io.h>
#endif
+#if defined(_WIN32) || defined(__CYGWIN__)
+# define WIDECHAR
+#endif
+
#ifdef WINAPI_FAMILY
# define open _open
# define read _read
@@ -95,18 +103,19 @@
# endif
#endif
-/* unlike snprintf (which is required in C99, yet still not supported by
- Microsoft more than a decade later!), _snprintf does not guarantee null
- termination of the result -- however this is only used in gzlib.c where
+/* unlike snprintf (which is required in C99), _snprintf does not guarantee
+ null termination of the result -- however this is only used in gzlib.c where
the result is assured to fit in the space provided */
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && _MSC_VER < 1900
# define snprintf _snprintf
#endif
#ifndef local
# define local static
#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
+/* since "static" is used to mean two completely different things in C, we
+ define "local" for the non-static meaning of "static", for readability
+ (compile with -Dlocal if your debugger can't find static symbols) */
/* gz* functions always use library allocation functions */
#ifndef STDC
@@ -170,7 +179,7 @@ typedef struct {
char *path; /* path or fd for error messages */
unsigned size; /* buffer size, zero if not allocated yet */
unsigned want; /* requested buffer size, default is GZBUFSIZE */
- unsigned char *in; /* input buffer */
+ unsigned char *in; /* input buffer (double-sized when writing) */
unsigned char *out; /* output buffer (double-sized when reading) */
int direct; /* 0 if processing gzip, 1 if transparent */
/* just for reading */
diff --git a/src/thirdparty/zlib/gzlib.c b/src/thirdparty/zlib/gzlib.c
index fae202ef8..4105e6aff 100644
--- a/src/thirdparty/zlib/gzlib.c
+++ b/src/thirdparty/zlib/gzlib.c
@@ -1,11 +1,11 @@
/* gzlib.c -- zlib functions common to reading and writing gzip files
- * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
-#if defined(_WIN32) && !defined(__BORLANDC__)
+#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
# define LSEEK _lseeki64
#else
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
@@ -94,7 +94,7 @@ local gzFile gz_open(path, fd, mode)
const char *mode;
{
gz_statep state;
- size_t len;
+ z_size_t len;
int oflag;
#ifdef O_CLOEXEC
int cloexec = 0;
@@ -188,10 +188,10 @@ local gzFile gz_open(path, fd, mode)
}
/* save the path name for error messages */
-#ifdef _WIN32
+#ifdef WIDECHAR
if (fd == -2) {
len = wcstombs(NULL, path, 0);
- if (len == (size_t)-1)
+ if (len == (z_size_t)-1)
len = 0;
}
else
@@ -202,7 +202,7 @@ local gzFile gz_open(path, fd, mode)
free(state);
return NULL;
}
-#ifdef _WIN32
+#ifdef WIDECHAR
if (fd == -2)
if (len)
wcstombs(state->path, path, len + 1);
@@ -211,7 +211,7 @@ local gzFile gz_open(path, fd, mode)
else
#endif
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(state->path, len + 1, "%s", (const char *)path);
+ (void)snprintf(state->path, len + 1, "%s", (const char *)path);
#else
strcpy(state->path, path);
#endif
@@ -239,7 +239,7 @@ local gzFile gz_open(path, fd, mode)
/* open the file with the appropriate flags (or just use fd) */
state->fd = fd > -1 ? fd : (
-#ifdef _WIN32
+#ifdef WIDECHAR
fd == -2 ? _wopen(path, oflag, 0666) :
#endif
open((const char *)path, oflag, 0666));
@@ -248,8 +248,10 @@ local gzFile gz_open(path, fd, mode)
free(state);
return NULL;
}
- if (state->mode == GZ_APPEND)
+ if (state->mode == GZ_APPEND) {
+ LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */
state->mode = GZ_WRITE; /* simplify later checks */
+ }
/* save the current position for rewinding (only if reading) */
if (state->mode == GZ_READ) {
@@ -291,7 +293,7 @@ gzFile ZEXPORT gzdopen(fd, mode)
if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
return NULL;
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
+ (void)snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd);
#else
sprintf(path, "<fd:%d>", fd); /* for debugging */
#endif
@@ -301,7 +303,7 @@ gzFile ZEXPORT gzdopen(fd, mode)
}
/* -- see zlib.h -- */
-#ifdef _WIN32
+#ifdef WIDECHAR
gzFile ZEXPORT gzopen_w(path, mode)
const wchar_t *path;
const char *mode;
@@ -329,6 +331,8 @@ int ZEXPORT gzbuffer(file, size)
return -1;
/* check and set requested size */
+ if ((size << 1) < size)
+ return -1; /* need to be able to double it */
if (size < 2)
size = 2; /* need two bytes to check magic header */
state->want = size;
@@ -604,14 +608,13 @@ void ZLIB_INTERNAL gz_error(state, err, msg)
return;
}
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
- "%s%s%s", state->path, ": ", msg);
+ (void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
+ "%s%s%s", state->path, ": ", msg);
#else
strcpy(state->msg, state->path);
strcat(state->msg, ": ");
strcat(state->msg, msg);
#endif
- return;
}
#ifndef INT_MAX
diff --git a/src/thirdparty/zlib/gzread.c b/src/thirdparty/zlib/gzread.c
index bf4538eb2..956b91ea7 100644
--- a/src/thirdparty/zlib/gzread.c
+++ b/src/thirdparty/zlib/gzread.c
@@ -1,5 +1,5 @@
/* gzread.c -- zlib functions for reading gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -12,6 +12,7 @@ local int gz_look OF((gz_statep));
local int gz_decomp OF((gz_statep));
local int gz_fetch OF((gz_statep));
local int gz_skip OF((gz_statep, z_off64_t));
+local z_size_t gz_read OF((gz_statep, voidp, z_size_t));
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
state->fd, and update state->eof, state->err, and state->msg as appropriate.
@@ -24,13 +25,17 @@ local int gz_load(state, buf, len, have)
unsigned *have;
{
int ret;
+ unsigned get, max = ((unsigned)-1 >> 2) + 1;
*have = 0;
do {
- ret = read(state->fd, buf + *have, len - *have);
+ get = len - *have;
+ if (get > max)
+ get = max;
+ ret = read(state->fd, buf + *have, get);
if (ret <= 0)
break;
- *have += ret;
+ *have += (unsigned)ret;
} while (*have < len);
if (ret < 0) {
gz_error(state, Z_ERRNO, zstrerror());
@@ -94,10 +99,8 @@ local int gz_look(state)
state->in = (unsigned char *)malloc(state->want);
state->out = (unsigned char *)malloc(state->want << 1);
if (state->in == NULL || state->out == NULL) {
- if (state->out != NULL)
- free(state->out);
- if (state->in != NULL)
- free(state->in);
+ free(state->out);
+ free(state->in);
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
@@ -284,33 +287,17 @@ local int gz_skip(state, len)
return 0;
}
-/* -- see zlib.h -- */
-int ZEXPORT gzread(file, buf, len)
- gzFile file;
+/* Read len bytes into buf from file, or less than len up to the end of the
+ input. Return the number of bytes read. If zero is returned, either the
+ end of file was reached, or there was an error. state->err must be
+ consulted in that case to determine which. */
+local z_size_t gz_read(state, buf, len)
+ gz_statep state;
voidp buf;
- unsigned len;
+ z_size_t len;
{
- unsigned got, n;
- gz_statep state;
- z_streamp strm;
-
- /* get internal structure */
- if (file == NULL)
- return -1;
- state = (gz_statep)file;
- strm = &(state->strm);
-
- /* check that we're reading and that there's no (serious) error */
- if (state->mode != GZ_READ ||
- (state->err != Z_OK && state->err != Z_BUF_ERROR))
- return -1;
-
- /* since an int is returned, make sure len fits in one, otherwise return
- with an error (this avoids the flaw in the interface) */
- if ((int)len < 0) {
- gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
- return -1;
- }
+ z_size_t got;
+ unsigned n;
/* if len is zero, avoid unnecessary operations */
if (len == 0)
@@ -320,32 +307,38 @@ int ZEXPORT gzread(file, buf, len)
if (state->seek) {
state->seek = 0;
if (gz_skip(state, state->skip) == -1)
- return -1;
+ return 0;
}
/* get len bytes to buf, or less than len if at the end */
got = 0;
do {
+ /* set n to the maximum amount of len that fits in an unsigned int */
+ n = -1;
+ if (n > len)
+ n = len;
+
/* first just try copying data from the output buffer */
if (state->x.have) {
- n = state->x.have > len ? len : state->x.have;
+ if (state->x.have < n)
+ n = state->x.have;
memcpy(buf, state->x.next, n);
state->x.next += n;
state->x.have -= n;
}
/* output buffer empty -- return if we're at the end of the input */
- else if (state->eof && strm->avail_in == 0) {
+ else if (state->eof && state->strm.avail_in == 0) {
state->past = 1; /* tried to read past end */
break;
}
/* need output data -- for small len or new stream load up our output
buffer */
- else if (state->how == LOOK || len < (state->size << 1)) {
+ else if (state->how == LOOK || n < (state->size << 1)) {
/* get more output, looking for header if required */
if (gz_fetch(state) == -1)
- return -1;
+ return 0;
continue; /* no progress yet -- go back to copy above */
/* the copy above assures that we will leave with space in the
output buffer, allowing at least one gzungetc() to succeed */
@@ -353,16 +346,16 @@ int ZEXPORT gzread(file, buf, len)
/* large len -- read directly into user buffer */
else if (state->how == COPY) { /* read directly */
- if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
- return -1;
+ if (gz_load(state, (unsigned char *)buf, n, &n) == -1)
+ return 0;
}
/* large len -- decompress directly into user buffer */
else { /* state->how == GZIP */
- strm->avail_out = len;
- strm->next_out = (unsigned char *)buf;
+ state->strm.avail_out = n;
+ state->strm.next_out = (unsigned char *)buf;
if (gz_decomp(state) == -1)
- return -1;
+ return 0;
n = state->x.have;
state->x.have = 0;
}
@@ -374,8 +367,75 @@ int ZEXPORT gzread(file, buf, len)
state->x.pos += n;
} while (len);
- /* return number of bytes read into user buffer (will fit in int) */
- return (int)got;
+ /* return number of bytes read into user buffer */
+ return got;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzread(file, buf, len)
+ gzFile file;
+ voidp buf;
+ unsigned len;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids a flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_STREAM_ERROR, "request does not fit in an int");
+ return -1;
+ }
+
+ /* read len or fewer bytes to buf */
+ len = gz_read(state, buf, len);
+
+ /* check for an error */
+ if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
+ return -1;
+
+ /* return the number of bytes read (this is assured to fit in an int) */
+ return (int)len;
+}
+
+/* -- see zlib.h -- */
+z_size_t ZEXPORT gzfread(buf, size, nitems, file)
+ voidp buf;
+ z_size_t size;
+ z_size_t nitems;
+ gzFile file;
+{
+ z_size_t len;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return 0;
+
+ /* compute bytes to read -- error on overflow */
+ len = nitems * size;
+ if (size && len / size != nitems) {
+ gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
+ return 0;
+ }
+
+ /* read len or fewer bytes to buf, return the number of full items read */
+ return len ? gz_read(state, buf, len) / size : 0;
}
/* -- see zlib.h -- */
@@ -408,8 +468,8 @@ int ZEXPORT gzgetc(file)
return *(state->x.next)++;
}
- /* nothing there -- try gzread() */
- ret = gzread(file, buf, 1);
+ /* nothing there -- try gz_read() */
+ ret = gz_read(state, buf, 1);
return ret < 1 ? -1 : buf[0];
}
@@ -451,7 +511,7 @@ int ZEXPORT gzungetc(c, file)
if (state->x.have == 0) {
state->x.have = 1;
state->x.next = state->out + (state->size << 1) - 1;
- state->x.next[0] = c;
+ state->x.next[0] = (unsigned char)c;
state->x.pos--;
state->past = 0;
return c;
@@ -473,7 +533,7 @@ int ZEXPORT gzungetc(c, file)
}
state->x.have++;
state->x.next--;
- state->x.next[0] = c;
+ state->x.next[0] = (unsigned char)c;
state->x.pos--;
state->past = 0;
return c;
diff --git a/src/thirdparty/zlib/gzwrite.c b/src/thirdparty/zlib/gzwrite.c
index aa767fbf6..c7b5651d7 100644
--- a/src/thirdparty/zlib/gzwrite.c
+++ b/src/thirdparty/zlib/gzwrite.c
@@ -1,5 +1,5 @@
/* gzwrite.c -- zlib functions for writing gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,17 +9,19 @@
local int gz_init OF((gz_statep));
local int gz_comp OF((gz_statep, int));
local int gz_zero OF((gz_statep, z_off64_t));
+local z_size_t gz_write OF((gz_statep, voidpc, z_size_t));
/* Initialize state for writing a gzip file. Mark initialization by setting
- state->size to non-zero. Return -1 on failure or 0 on success. */
+ state->size to non-zero. Return -1 on a memory allocation failure, or 0 on
+ success. */
local int gz_init(state)
gz_statep state;
{
int ret;
z_streamp strm = &(state->strm);
- /* allocate input buffer */
- state->in = (unsigned char *)malloc(state->want);
+ /* allocate input buffer (double size for gzprintf) */
+ state->in = (unsigned char *)malloc(state->want << 1);
if (state->in == NULL) {
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
@@ -47,6 +49,7 @@ local int gz_init(state)
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
+ strm->next_in = NULL;
}
/* mark state as initialized */
@@ -62,17 +65,17 @@ local int gz_init(state)
}
/* Compress whatever is at avail_in and next_in and write to the output file.
- Return -1 if there is an error writing to the output file, otherwise 0.
- flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH,
- then the deflate() state is reset to start a new gzip stream. If gz->direct
- is true, then simply write to the output file without compressing, and
- ignore flush. */
+ Return -1 if there is an error writing to the output file or if gz_init()
+ fails to allocate memory, otherwise 0. flush is assumed to be a valid
+ deflate() flush value. If flush is Z_FINISH, then the deflate() state is
+ reset to start a new gzip stream. If gz->direct is true, then simply write
+ to the output file without compressing, and ignore flush. */
local int gz_comp(state, flush)
gz_statep state;
int flush;
{
- int ret, got;
- unsigned have;
+ int ret, writ;
+ unsigned have, put, max = ((unsigned)-1 >> 2) + 1;
z_streamp strm = &(state->strm);
/* allocate memory if this is the first time through */
@@ -81,12 +84,16 @@ local int gz_comp(state, flush)
/* write directly if requested */
if (state->direct) {
- got = write(state->fd, strm->next_in, strm->avail_in);
- if (got < 0 || (unsigned)got != strm->avail_in) {
- gz_error(state, Z_ERRNO, zstrerror());
- return -1;
+ while (strm->avail_in) {
+ put = strm->avail_in > max ? max : strm->avail_in;
+ writ = write(state->fd, strm->next_in, put);
+ if (writ < 0) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ strm->avail_in -= (unsigned)writ;
+ strm->next_in += writ;
}
- strm->avail_in = 0;
return 0;
}
@@ -97,17 +104,21 @@ local int gz_comp(state, flush)
doing Z_FINISH then don't write until we get to Z_STREAM_END */
if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
(flush != Z_FINISH || ret == Z_STREAM_END))) {
- have = (unsigned)(strm->next_out - state->x.next);
- if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
- (unsigned)got != have)) {
- gz_error(state, Z_ERRNO, zstrerror());
- return -1;
+ while (strm->next_out > state->x.next) {
+ put = strm->next_out - state->x.next > (int)max ? max :
+ (unsigned)(strm->next_out - state->x.next);
+ writ = write(state->fd, state->x.next, put);
+ if (writ < 0) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ state->x.next += writ;
}
if (strm->avail_out == 0) {
strm->avail_out = state->size;
strm->next_out = state->out;
+ state->x.next = state->out;
}
- state->x.next = strm->next_out;
}
/* compress */
@@ -129,7 +140,8 @@ local int gz_comp(state, flush)
return 0;
}
-/* Compress len zeros to output. Return -1 on error, 0 on success. */
+/* Compress len zeros to output. Return -1 on a write error or memory
+ allocation failure by gz_comp(), or 0 on success. */
local int gz_zero(state, len)
gz_statep state;
z_off64_t len;
@@ -161,32 +173,14 @@ local int gz_zero(state, len)
return 0;
}
-/* -- see zlib.h -- */
-int ZEXPORT gzwrite(file, buf, len)
- gzFile file;
+/* Write len bytes from buf to file. Return the number of bytes written. If
+ the returned value is less than len, then there was an error. */
+local z_size_t gz_write(state, buf, len)
+ gz_statep state;
voidpc buf;
- unsigned len;
+ z_size_t len;
{
- unsigned put = len;
- gz_statep state;
- z_streamp strm;
-
- /* get internal structure */
- if (file == NULL)
- return 0;
- state = (gz_statep)file;
- strm = &(state->strm);
-
- /* check that we're writing and that there's no error */
- if (state->mode != GZ_WRITE || state->err != Z_OK)
- return 0;
-
- /* since an int is returned, make sure len fits in one, otherwise return
- with an error (this avoids the flaw in the interface) */
- if ((int)len < 0) {
- gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
- return 0;
- }
+ z_size_t put = len;
/* if len is zero, avoid unnecessary operations */
if (len == 0)
@@ -209,14 +203,15 @@ int ZEXPORT gzwrite(file, buf, len)
do {
unsigned have, copy;
- if (strm->avail_in == 0)
- strm->next_in = state->in;
- have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+ if (state->strm.avail_in == 0)
+ state->strm.next_in = state->in;
+ have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
+ state->in);
copy = state->size - have;
if (copy > len)
copy = len;
memcpy(state->in + have, buf, copy);
- strm->avail_in += copy;
+ state->strm.avail_in += copy;
state->x.pos += copy;
buf = (const char *)buf + copy;
len -= copy;
@@ -226,19 +221,83 @@ int ZEXPORT gzwrite(file, buf, len)
}
else {
/* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
/* directly compress user buffer to file */
- strm->avail_in = len;
- strm->next_in = (z_const Bytef *)buf;
- state->x.pos += len;
- if (gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
+ state->strm.next_in = (z_const Bytef *)buf;
+ do {
+ unsigned n = (unsigned)-1;
+ if (n > len)
+ n = len;
+ state->strm.avail_in = n;
+ state->x.pos += n;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ len -= n;
+ } while (len);
+ }
+
+ /* input was all buffered or compressed */
+ return put;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzwrite(file, buf, len)
+ gzFile file;
+ voidpc buf;
+ unsigned len;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids a flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return 0;
+ }
+
+ /* write len bytes from buf (the return value will fit in an int) */
+ return (int)gz_write(state, buf, len);
+}
+
+/* -- see zlib.h -- */
+z_size_t ZEXPORT gzfwrite(buf, size, nitems, file)
+ voidpc buf;
+ z_size_t size;
+ z_size_t nitems;
+ gzFile file;
+{
+ z_size_t len;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* compute bytes to read -- error on overflow */
+ len = nitems * size;
+ if (size && len / size != nitems) {
+ gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
+ return 0;
}
- /* input was all buffered or compressed (put will fit in int) */
- return (int)put;
+ /* write len bytes to buf, return the number of full items written */
+ return len ? gz_write(state, buf, len) / size : 0;
}
/* -- see zlib.h -- */
@@ -275,7 +334,7 @@ int ZEXPORT gzputc(file, c)
strm->next_in = state->in;
have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
if (have < state->size) {
- state->in[have] = c;
+ state->in[have] = (unsigned char)c;
strm->avail_in++;
state->x.pos++;
return c & 0xff;
@@ -283,8 +342,8 @@ int ZEXPORT gzputc(file, c)
}
/* no room in buffer or not initialized, use gz_write() */
- buf[0] = c;
- if (gzwrite(file, buf, 1) != 1)
+ buf[0] = (unsigned char)c;
+ if (gz_write(state, buf, 1) != 1)
return -1;
return c & 0xff;
}
@@ -295,11 +354,21 @@ int ZEXPORT gzputs(file, str)
const char *str;
{
int ret;
- unsigned len;
+ z_size_t len;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return -1;
/* write string */
- len = (unsigned)strlen(str);
- ret = gzwrite(file, str, len);
+ len = strlen(str);
+ ret = gz_write(state, str, len);
return ret == 0 && len != 0 ? -1 : ret;
}
@@ -309,63 +378,73 @@ int ZEXPORT gzputs(file, str)
/* -- see zlib.h -- */
int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
{
- int size, len;
+ int len;
+ unsigned left;
+ char *next;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
- return -1;
+ return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
- return 0;
+ return Z_STREAM_ERROR;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
- return 0;
+ return state->err;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return 0;
+ return state->err;
}
- /* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
-
- /* do the printf() into the input buffer, put length in len */
- size = (int)(state->size);
- state->in[size - 1] = 0;
+ /* do the printf() into the input buffer, put length in len -- the input
+ buffer is double-sized just for this function, so there is guaranteed to
+ be state->size bytes available after the current contents */
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in);
+ next[state->size - 1] = 0;
#ifdef NO_vsnprintf
# ifdef HAS_vsprintf_void
- (void)vsprintf((char *)(state->in), format, va);
- for (len = 0; len < size; len++)
- if (state->in[len] == 0) break;
+ (void)vsprintf(next, format, va);
+ for (len = 0; len < state->size; len++)
+ if (next[len] == 0) break;
# else
- len = vsprintf((char *)(state->in), format, va);
+ len = vsprintf(next, format, va);
# endif
#else
# ifdef HAS_vsnprintf_void
- (void)vsnprintf((char *)(state->in), size, format, va);
- len = strlen((char *)(state->in));
+ (void)vsnprintf(next, state->size, format, va);
+ len = strlen(next);
# else
- len = vsnprintf((char *)(state->in), size, format, va);
+ len = vsnprintf(next, state->size, format, va);
# endif
#endif
/* check that printf() results fit in buffer */
- if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0)
return 0;
- /* update buffer and position, defer compression until needed */
- strm->avail_in = (unsigned)len;
- strm->next_in = state->in;
+ /* update buffer and position, compress first half if past that */
+ strm->avail_in += (unsigned)len;
state->x.pos += len;
+ if (strm->avail_in >= state->size) {
+ left = strm->avail_in - state->size;
+ strm->avail_in = state->size;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return state->err;
+ memcpy(state->in, state->in + state->size, left);
+ strm->next_in = state->in;
+ strm->avail_in = left;
+ }
return len;
}
@@ -390,73 +469,82 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
{
- int size, len;
+ unsigned len, left;
+ char *next;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
- return -1;
+ return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that can really pass pointer in ints */
if (sizeof(int) != sizeof(void *))
- return 0;
+ return Z_STREAM_ERROR;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
- return 0;
+ return Z_STREAM_ERROR;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
- return 0;
+ return state->error;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return 0;
+ return state->error;
}
- /* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
-
- /* do the printf() into the input buffer, put length in len */
- size = (int)(state->size);
- state->in[size - 1] = 0;
+ /* do the printf() into the input buffer, put length in len -- the input
+ buffer is double-sized just for this function, so there is guaranteed to
+ be state->size bytes available after the current contents */
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ next = (char *)(strm->next_in + strm->avail_in);
+ next[state->size - 1] = 0;
#ifdef NO_snprintf
# ifdef HAS_sprintf_void
- sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
- a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
+ a13, a14, a15, a16, a17, a18, a19, a20);
for (len = 0; len < size; len++)
- if (state->in[len] == 0) break;
+ if (next[len] == 0)
+ break;
# else
- len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
- a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
+ a12, a13, a14, a15, a16, a17, a18, a19, a20);
# endif
#else
# ifdef HAS_snprintf_void
- snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
- a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
- len = strlen((char *)(state->in));
+ snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9,
+ a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = strlen(next);
# else
- len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
- a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
- a19, a20);
+ len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
# endif
#endif
/* check that printf() results fit in buffer */
- if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ if (len == 0 || len >= state->size || next[state->size - 1] != 0)
return 0;
- /* update buffer and position, defer compression until needed */
- strm->avail_in = (unsigned)len;
- strm->next_in = state->in;
+ /* update buffer and position, compress first half if past that */
+ strm->avail_in += len;
state->x.pos += len;
- return len;
+ if (strm->avail_in >= state->size) {
+ left = strm->avail_in - state->size;
+ strm->avail_in = state->size;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return state->err;
+ memcpy(state->in, state->in + state->size, left);
+ strm->next_in = state->in;
+ strm->avail_in = left;
+ }
+ return (int)len;
}
#endif
@@ -470,7 +558,7 @@ int ZEXPORT gzflush(file, flush)
/* get internal structure */
if (file == NULL)
- return -1;
+ return Z_STREAM_ERROR;
state = (gz_statep)file;
/* check that we're writing and that there's no error */
@@ -485,11 +573,11 @@ int ZEXPORT gzflush(file, flush)
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return -1;
+ return state->err;
}
/* compress remaining data with requested flush */
- gz_comp(state, flush);
+ (void)gz_comp(state, flush);
return state->err;
}
@@ -520,13 +608,13 @@ int ZEXPORT gzsetparams(file, level, strategy)
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return -1;
+ return state->err;
}
/* change compression parameters for subsequent input */
if (state->size) {
/* flush previous input with previous parameters before changing */
- if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
+ if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1)
return state->err;
deflateParams(strm, level, strategy);
}
diff --git a/src/thirdparty/zlib/infback.c b/src/thirdparty/zlib/infback.c
index f3833c2e4..59679ecbf 100644
--- a/src/thirdparty/zlib/infback.c
+++ b/src/thirdparty/zlib/infback.c
@@ -1,5 +1,5 @@
/* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2011 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -61,7 +61,7 @@ int stream_size;
Tracev((stderr, "inflate: allocated\n"));
strm->state = (struct internal_state FAR *)state;
state->dmax = 32768U;
- state->wbits = windowBits;
+ state->wbits = (uInt)windowBits;
state->wsize = 1U << windowBits;
state->window = window;
state->wnext = 0;
diff --git a/src/thirdparty/zlib/inffast.c b/src/thirdparty/zlib/inffast.c
index bda59ceb6..0dbd1dbc0 100644
--- a/src/thirdparty/zlib/inffast.c
+++ b/src/thirdparty/zlib/inffast.c
@@ -1,5 +1,5 @@
/* inffast.c -- fast decoding
- * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
+ * Copyright (C) 1995-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -8,26 +8,9 @@
#include "inflate.h"
#include "inffast.h"
-#ifndef ASMINF
-
-/* Allow machine dependent optimization for post-increment or pre-increment.
- Based on testing to date,
- Pre-increment preferred for:
- - PowerPC G3 (Adler)
- - MIPS R5000 (Randers-Pehrson)
- Post-increment preferred for:
- - none
- No measurable difference:
- - Pentium III (Anderson)
- - M68060 (Nikl)
- */
-#ifdef POSTINC
-# define OFF 0
-# define PUP(a) *(a)++
+#ifdef ASMINF
+# pragma message("Assembler code may have bugs -- use at your own risk")
#else
-# define OFF 1
-# define PUP(a) *++(a)
-#endif
/*
Decode literal, length, and distance codes and write out the resulting
@@ -96,9 +79,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
/* copy state to local variables */
state = (struct inflate_state FAR *)strm->state;
- in = strm->next_in - OFF;
+ in = strm->next_in;
last = in + (strm->avail_in - 5);
- out = strm->next_out - OFF;
+ out = strm->next_out;
beg = out - (start - strm->avail_out);
end = out + (strm->avail_out - 257);
#ifdef INFLATE_STRICT
@@ -119,9 +102,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
input data or output space */
do {
if (bits < 15) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
here = lcode[hold & lmask];
@@ -134,14 +117,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
"inflate: literal '%c'\n" :
"inflate: literal 0x%02x\n", here.val));
- PUP(out) = (unsigned char)(here.val);
+ *out++ = (unsigned char)(here.val);
}
else if (op & 16) { /* length base */
len = (unsigned)(here.val);
op &= 15; /* number of extra bits */
if (op) {
if (bits < op) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
len += (unsigned)hold & ((1U << op) - 1);
@@ -150,9 +133,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
}
Tracevv((stderr, "inflate: length %u\n", len));
if (bits < 15) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
here = dcode[hold & dmask];
@@ -165,10 +148,10 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
dist = (unsigned)(here.val);
op &= 15; /* number of extra bits */
if (bits < op) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
if (bits < op) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
}
@@ -196,30 +179,30 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
if (len <= op - whave) {
do {
- PUP(out) = 0;
+ *out++ = 0;
} while (--len);
continue;
}
len -= op - whave;
do {
- PUP(out) = 0;
+ *out++ = 0;
} while (--op > whave);
if (op == 0) {
from = out - dist;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--len);
continue;
}
#endif
}
- from = window - OFF;
+ from = window;
if (wnext == 0) { /* very common case */
from += wsize - op;
if (op < len) { /* some from window */
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
from = out - dist; /* rest from output */
}
@@ -230,14 +213,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
if (op < len) { /* some from end of window */
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
- from = window - OFF;
+ from = window;
if (wnext < len) { /* some from start of window */
op = wnext;
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
from = out - dist; /* rest from output */
}
@@ -248,35 +231,35 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
if (op < len) { /* some from window */
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
from = out - dist; /* rest from output */
}
}
while (len > 2) {
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
+ *out++ = *from++;
+ *out++ = *from++;
+ *out++ = *from++;
len -= 3;
}
if (len) {
- PUP(out) = PUP(from);
+ *out++ = *from++;
if (len > 1)
- PUP(out) = PUP(from);
+ *out++ = *from++;
}
}
else {
from = out - dist; /* copy direct from output */
do { /* minimum length is three */
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
+ *out++ = *from++;
+ *out++ = *from++;
+ *out++ = *from++;
len -= 3;
} while (len > 2);
if (len) {
- PUP(out) = PUP(from);
+ *out++ = *from++;
if (len > 1)
- PUP(out) = PUP(from);
+ *out++ = *from++;
}
}
}
@@ -313,8 +296,8 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
hold &= (1U << bits) - 1;
/* update state and return */
- strm->next_in = in + OFF;
- strm->next_out = out + OFF;
+ strm->next_in = in;
+ strm->next_out = out;
strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));
diff --git a/src/thirdparty/zlib/inflate.c b/src/thirdparty/zlib/inflate.c
index 870f89bb4..ac333e8c2 100644
--- a/src/thirdparty/zlib/inflate.c
+++ b/src/thirdparty/zlib/inflate.c
@@ -1,5 +1,5 @@
/* inflate.c -- zlib decompression
- * Copyright (C) 1995-2012 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -92,6 +92,7 @@
#endif
/* function prototypes */
+local int inflateStateCheck OF((z_streamp strm));
local void fixedtables OF((struct inflate_state FAR *state));
local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
unsigned copy));
@@ -101,12 +102,26 @@ local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
unsigned len));
+local int inflateStateCheck(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (strm == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
+ return 1;
+ state = (struct inflate_state FAR *)strm->state;
+ if (state == Z_NULL || state->strm != strm ||
+ state->mode < HEAD || state->mode > SYNC)
+ return 1;
+ return 0;
+}
+
int ZEXPORT inflateResetKeep(strm)
z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
strm->total_in = strm->total_out = state->total = 0;
strm->msg = Z_NULL;
@@ -131,7 +146,7 @@ z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
state->wsize = 0;
state->whave = 0;
@@ -147,7 +162,7 @@ int windowBits;
struct inflate_state FAR *state;
/* get the state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
/* extract wrap request from windowBits parameter */
@@ -156,7 +171,7 @@ int windowBits;
windowBits = -windowBits;
}
else {
- wrap = (windowBits >> 4) + 1;
+ wrap = (windowBits >> 4) + 5;
#ifdef GUNZIP
if (windowBits < 48)
windowBits &= 15;
@@ -210,7 +225,9 @@ int stream_size;
if (state == Z_NULL) return Z_MEM_ERROR;
Tracev((stderr, "inflate: allocated\n"));
strm->state = (struct internal_state FAR *)state;
+ state->strm = strm;
state->window = Z_NULL;
+ state->mode = HEAD; /* to pass state test in inflateReset2() */
ret = inflateReset2(strm, windowBits);
if (ret != Z_OK) {
ZFREE(strm, state);
@@ -234,17 +251,17 @@ int value;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (bits < 0) {
state->hold = 0;
state->bits = 0;
return Z_OK;
}
- if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+ if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR;
value &= (1L << bits) - 1;
- state->hold += value << state->bits;
- state->bits += bits;
+ state->hold += (unsigned)value << state->bits;
+ state->bits += (uInt)bits;
return Z_OK;
}
@@ -625,7 +642,7 @@ int flush;
static const unsigned short order[19] = /* permutation of code lengths */
{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
- if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+ if (inflateStateCheck(strm) || strm->next_out == Z_NULL ||
(strm->next_in == Z_NULL && strm->avail_in != 0))
return Z_STREAM_ERROR;
@@ -645,6 +662,8 @@ int flush;
NEEDBITS(16);
#ifdef GUNZIP
if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
+ if (state->wbits == 0)
+ state->wbits = 15;
state->check = crc32(0L, Z_NULL, 0);
CRC2(state->check, hold);
INITBITS();
@@ -672,7 +691,7 @@ int flush;
len = BITS(4) + 8;
if (state->wbits == 0)
state->wbits = len;
- else if (len > state->wbits) {
+ if (len > 15 || len > state->wbits) {
strm->msg = (char *)"invalid window size";
state->mode = BAD;
break;
@@ -699,14 +718,16 @@ int flush;
}
if (state->head != Z_NULL)
state->head->text = (int)((hold >> 8) & 1);
- if (state->flags & 0x0200) CRC2(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC2(state->check, hold);
INITBITS();
state->mode = TIME;
case TIME:
NEEDBITS(32);
if (state->head != Z_NULL)
state->head->time = hold;
- if (state->flags & 0x0200) CRC4(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC4(state->check, hold);
INITBITS();
state->mode = OS;
case OS:
@@ -715,7 +736,8 @@ int flush;
state->head->xflags = (int)(hold & 0xff);
state->head->os = (int)(hold >> 8);
}
- if (state->flags & 0x0200) CRC2(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC2(state->check, hold);
INITBITS();
state->mode = EXLEN;
case EXLEN:
@@ -724,7 +746,8 @@ int flush;
state->length = (unsigned)(hold);
if (state->head != Z_NULL)
state->head->extra_len = (unsigned)hold;
- if (state->flags & 0x0200) CRC2(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC2(state->check, hold);
INITBITS();
}
else if (state->head != Z_NULL)
@@ -742,7 +765,7 @@ int flush;
len + copy > state->head->extra_max ?
state->head->extra_max - len : copy);
}
- if (state->flags & 0x0200)
+ if ((state->flags & 0x0200) && (state->wrap & 4))
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
@@ -761,9 +784,9 @@ int flush;
if (state->head != Z_NULL &&
state->head->name != Z_NULL &&
state->length < state->head->name_max)
- state->head->name[state->length++] = len;
+ state->head->name[state->length++] = (Bytef)len;
} while (len && copy < have);
- if (state->flags & 0x0200)
+ if ((state->flags & 0x0200) && (state->wrap & 4))
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
@@ -782,9 +805,9 @@ int flush;
if (state->head != Z_NULL &&
state->head->comment != Z_NULL &&
state->length < state->head->comm_max)
- state->head->comment[state->length++] = len;
+ state->head->comment[state->length++] = (Bytef)len;
} while (len && copy < have);
- if (state->flags & 0x0200)
+ if ((state->flags & 0x0200) && (state->wrap & 4))
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
@@ -796,7 +819,7 @@ int flush;
case HCRC:
if (state->flags & 0x0200) {
NEEDBITS(16);
- if (hold != (state->check & 0xffff)) {
+ if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
strm->msg = (char *)"header crc mismatch";
state->mode = BAD;
break;
@@ -1177,11 +1200,11 @@ int flush;
out -= left;
strm->total_out += out;
state->total += out;
- if (out)
+ if ((state->wrap & 4) && out)
strm->adler = state->check =
UPDATE(state->check, put - out, out);
out = left;
- if ((
+ if ((state->wrap & 4) && (
#ifdef GUNZIP
state->flags ? hold :
#endif
@@ -1240,10 +1263,10 @@ int flush;
strm->total_in += in;
strm->total_out += out;
state->total += out;
- if (state->wrap && out)
+ if ((state->wrap & 4) && out)
strm->adler = state->check =
UPDATE(state->check, strm->next_out - out, out);
- strm->data_type = state->bits + (state->last ? 64 : 0) +
+ strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
(state->mode == TYPE ? 128 : 0) +
(state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
@@ -1255,7 +1278,7 @@ int ZEXPORT inflateEnd(strm)
z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+ if (inflateStateCheck(strm))
return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (state->window != Z_NULL) ZFREE(strm, state->window);
@@ -1273,7 +1296,7 @@ uInt *dictLength;
struct inflate_state FAR *state;
/* check state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
/* copy dictionary */
@@ -1298,7 +1321,7 @@ uInt dictLength;
int ret;
/* check state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (state->wrap != 0 && state->mode != DICT)
return Z_STREAM_ERROR;
@@ -1330,7 +1353,7 @@ gz_headerp head;
struct inflate_state FAR *state;
/* check state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
@@ -1383,7 +1406,7 @@ z_streamp strm;
struct inflate_state FAR *state;
/* check parameters */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
@@ -1430,7 +1453,7 @@ z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
return state->mode == STORED && state->bits == 0;
}
@@ -1445,8 +1468,7 @@ z_streamp source;
unsigned wsize;
/* check input */
- if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
- source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+ if (inflateStateCheck(source) || dest == Z_NULL)
return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)source->state;
@@ -1467,6 +1489,7 @@ z_streamp source;
/* copy state */
zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+ copy->strm = dest;
if (state->lencode >= state->codes &&
state->lencode <= state->codes + ENOUGH - 1) {
copy->lencode = copy->codes + (state->lencode - state->codes);
@@ -1488,25 +1511,51 @@ int subvert;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
- state->sane = !subvert;
#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ state->sane = !subvert;
return Z_OK;
#else
+ (void)subvert;
state->sane = 1;
return Z_DATA_ERROR;
#endif
}
+int ZEXPORT inflateValidate(strm, check)
+z_streamp strm;
+int check;
+{
+ struct inflate_state FAR *state;
+
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (check)
+ state->wrap |= 4;
+ else
+ state->wrap &= ~4;
+ return Z_OK;
+}
+
long ZEXPORT inflateMark(strm)
z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+ if (inflateStateCheck(strm))
+ return -(1L << 16);
state = (struct inflate_state FAR *)strm->state;
- return ((long)(state->back) << 16) +
+ return (long)(((unsigned long)((long)state->back)) << 16) +
(state->mode == COPY ? state->length :
(state->mode == MATCH ? state->was - state->length : 0));
}
+
+unsigned long ZEXPORT inflateCodesUsed(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (inflateStateCheck(strm)) return (unsigned long)-1;
+ state = (struct inflate_state FAR *)strm->state;
+ return (unsigned long)(state->next - state->codes);
+}
diff --git a/src/thirdparty/zlib/inflate.h b/src/thirdparty/zlib/inflate.h
index 95f4986d4..a46cce6b6 100644
--- a/src/thirdparty/zlib/inflate.h
+++ b/src/thirdparty/zlib/inflate.h
@@ -1,5 +1,5 @@
/* inflate.h -- internal inflate state definition
- * Copyright (C) 1995-2009 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -18,7 +18,7 @@
/* Possible inflate modes between inflate() calls */
typedef enum {
- HEAD, /* i: waiting for magic header */
+ HEAD = 16180, /* i: waiting for magic header */
FLAGS, /* i: waiting for method and flags (gzip) */
TIME, /* i: waiting for modification time (gzip) */
OS, /* i: waiting for extra flags and operating system (gzip) */
@@ -77,11 +77,14 @@ typedef enum {
CHECK -> LENGTH -> DONE
*/
-/* state maintained between inflate() calls. Approximately 10K bytes. */
+/* State maintained between inflate() calls -- approximately 7K bytes, not
+ including the allocated sliding window, which is up to 32K bytes. */
struct inflate_state {
+ z_streamp strm; /* pointer back to this zlib stream */
inflate_mode mode; /* current inflate mode */
int last; /* true if processing last block */
- int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
+ bit 2 true to validate check value */
int havedict; /* true if dictionary provided */
int flags; /* gzip header method and flags (0 if zlib) */
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
diff --git a/src/thirdparty/zlib/inftrees.c b/src/thirdparty/zlib/inftrees.c
index 44d89cf24..2ea08fc13 100644
--- a/src/thirdparty/zlib/inftrees.c
+++ b/src/thirdparty/zlib/inftrees.c
@@ -1,5 +1,5 @@
/* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2013 Mark Adler
+ * Copyright (C) 1995-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,7 +9,7 @@
#define MAXBITS 15
const char inflate_copyright[] =
- " inflate 1.2.8 Copyright 1995-2013 Mark Adler ";
+ " inflate 1.2.11 Copyright 1995-2017 Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -54,7 +54,7 @@ unsigned short FAR *work;
code FAR *next; /* next available space in table */
const unsigned short FAR *base; /* base value table to use */
const unsigned short FAR *extra; /* extra bits table to use */
- int end; /* use base and extra for symbol > end */
+ unsigned match; /* use base and extra for symbol >= match */
unsigned short count[MAXBITS+1]; /* number of codes of each length */
unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
static const unsigned short lbase[31] = { /* Length codes 257..285 base */
@@ -62,7 +62,7 @@ unsigned short FAR *work;
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
- 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
@@ -181,19 +181,17 @@ unsigned short FAR *work;
switch (type) {
case CODES:
base = extra = work; /* dummy value--not used */
- end = 19;
+ match = 20;
break;
case LENS:
base = lbase;
- base -= 257;
extra = lext;
- extra -= 257;
- end = 256;
+ match = 257;
break;
- default: /* DISTS */
+ default: /* DISTS */
base = dbase;
extra = dext;
- end = -1;
+ match = 0;
}
/* initialize state for loop */
@@ -216,13 +214,13 @@ unsigned short FAR *work;
for (;;) {
/* create table entry */
here.bits = (unsigned char)(len - drop);
- if ((int)(work[sym]) < end) {
+ if (work[sym] + 1U < match) {
here.op = (unsigned char)0;
here.val = work[sym];
}
- else if ((int)(work[sym]) > end) {
- here.op = (unsigned char)(extra[work[sym]]);
- here.val = base[work[sym]];
+ else if (work[sym] >= match) {
+ here.op = (unsigned char)(extra[work[sym] - match]);
+ here.val = base[work[sym] - match];
}
else {
here.op = (unsigned char)(32 + 64); /* end of block */
diff --git a/src/thirdparty/zlib/minizip/crypt.h b/src/thirdparty/zlib/minizip/crypt.h
new file mode 100644
index 000000000..1e9e8200b
--- /dev/null
+++ b/src/thirdparty/zlib/minizip/crypt.h
@@ -0,0 +1,131 @@
+/* crypt.h -- base code for crypt/uncrypt ZIPfile
+
+
+ Version 1.01e, February 12th, 2005
+
+ Copyright (C) 1998-2005 Gilles Vollant
+
+ This code is a modified version of crypting code in Infozip distribution
+
+ The encryption/decryption parts of this source code (as opposed to the
+ non-echoing password parts) were originally written in Europe. The
+ whole source package can be freely distributed, including from the USA.
+ (Prior to January 2000, re-export from the US was a violation of US law.)
+
+ This encryption code is a direct transcription of the algorithm from
+ Roger Schlafly, described by Phil Katz in the file appnote.txt. This
+ file (appnote.txt) is distributed with the PKZIP program (even in the
+ version without encryption capabilities).
+
+ If you don't need crypting in your application, just define symbols
+ NOCRYPT and NOUNCRYPT.
+
+ This code support the "Traditional PKWARE Encryption".
+
+ The new AES encryption added on Zip format by Winzip (see the page
+ http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
+ Encryption is not supported.
+*/
+
+#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))
+
+/***********************************************************************
+ * Return the next byte in the pseudo-random sequence
+ */
+static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab)
+{
+ unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
+ * unpredictable manner on 16-bit systems; not a problem
+ * with any known compiler so far, though */
+
+ temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
+ return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
+}
+
+/***********************************************************************
+ * Update the encryption keys with the next byte of plain text
+ */
+static int update_keys(unsigned long* pkeys,const z_crc_t* pcrc_32_tab,int c)
+{
+ (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
+ (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
+ (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
+ {
+ register int keyshift = (int)((*(pkeys+1)) >> 24);
+ (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
+ }
+ return c;
+}
+
+
+/***********************************************************************
+ * Initialize the encryption keys and the random header according to
+ * the given password.
+ */
+static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcrc_32_tab)
+{
+ *(pkeys+0) = 305419896L;
+ *(pkeys+1) = 591751049L;
+ *(pkeys+2) = 878082192L;
+ while (*passwd != '\0') {
+ update_keys(pkeys,pcrc_32_tab,(int)*passwd);
+ passwd++;
+ }
+}
+
+#define zdecode(pkeys,pcrc_32_tab,c) \
+ (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
+
+#define zencode(pkeys,pcrc_32_tab,c,t) \
+ (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
+
+#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
+
+#define RAND_HEAD_LEN 12
+ /* "last resort" source for second part of crypt seed pattern */
+# ifndef ZCR_SEED2
+# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
+# endif
+
+static int crypthead(const char* passwd, /* password string */
+ unsigned char* buf, /* where to write header */
+ int bufSize,
+ unsigned long* pkeys,
+ const z_crc_t* pcrc_32_tab,
+ unsigned long crcForCrypting)
+{
+ int n; /* index in random header */
+ int t; /* temporary */
+ int c; /* random byte */
+ unsigned char header[RAND_HEAD_LEN-2]; /* random header */
+ static unsigned calls = 0; /* ensure different random header each time */
+
+ if (bufSize<RAND_HEAD_LEN)
+ return 0;
+
+ /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
+ * output of rand() to get less predictability, since rand() is
+ * often poorly implemented.
+ */
+ if (++calls == 1)
+ {
+ srand((unsigned)(time(NULL) ^ ZCR_SEED2));
+ }
+ init_keys(passwd, pkeys, pcrc_32_tab);
+ for (n = 0; n < RAND_HEAD_LEN-2; n++)
+ {
+ c = (rand() >> 7) & 0xff;
+ header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
+ }
+ /* Encrypt random header (last two bytes is high word of crc) */
+ init_keys(passwd, pkeys, pcrc_32_tab);
+ for (n = 0; n < RAND_HEAD_LEN-2; n++)
+ {
+ buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);
+ }
+ buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);
+ buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);
+ return n;
+}
+
+#endif
diff --git a/src/thirdparty/zlib/minizip/ioapi.c b/src/thirdparty/zlib/minizip/ioapi.c
new file mode 100644
index 000000000..7f5c191b2
--- /dev/null
+++ b/src/thirdparty/zlib/minizip/ioapi.c
@@ -0,0 +1,247 @@
+/* ioapi.h -- IO base function header for compress/uncompress .zip
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+*/
+
+#if defined(_WIN32) && (!(defined(_CRT_SECURE_NO_WARNINGS)))
+ #define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#if defined(__APPLE__) || defined(IOAPI_NO_64)
+// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
+#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
+#define FTELLO_FUNC(stream) ftello(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)
+#else
+#define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
+#define FTELLO_FUNC(stream) ftello64(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)
+#endif
+
+
+#include "ioapi.h"
+
+voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)
+{
+ if (pfilefunc->zfile_func64.zopen64_file != NULL)
+ return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
+ else
+ {
+ return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);
+ }
+}
+
+long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)
+{
+ if (pfilefunc->zfile_func64.zseek64_file != NULL)
+ return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
+ else
+ {
+ uLong offsetTruncated = (uLong)offset;
+ if (offsetTruncated != offset)
+ return -1;
+ else
+ return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);
+ }
+}
+
+ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)
+{
+ if (pfilefunc->zfile_func64.zseek64_file != NULL)
+ return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
+ else
+ {
+ uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
+ if ((tell_uLong) == MAXU32)
+ return (ZPOS64_T)-1;
+ else
+ return tell_uLong;
+ }
+}
+
+void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)
+{
+ p_filefunc64_32->zfile_func64.zopen64_file = NULL;
+ p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
+ p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
+ p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
+ p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
+ p_filefunc64_32->zfile_func64.ztell64_file = NULL;
+ p_filefunc64_32->zfile_func64.zseek64_file = NULL;
+ p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;
+ p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
+ p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;
+ p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;
+ p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;
+}
+
+
+
+static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));
+static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
+static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));
+static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
+static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
+
+static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
+{
+ FILE* file = NULL;
+ const char* mode_fopen = NULL;
+ if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+ mode_fopen = "rb";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+ mode_fopen = "r+b";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+ mode_fopen = "wb";
+
+ if ((filename!=NULL) && (mode_fopen != NULL))
+ file = fopen(filename, mode_fopen);
+ return file;
+}
+
+static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
+{
+ FILE* file = NULL;
+ const char* mode_fopen = NULL;
+ if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+ mode_fopen = "rb";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+ mode_fopen = "r+b";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+ mode_fopen = "wb";
+
+ if ((filename!=NULL) && (mode_fopen != NULL))
+ file = FOPEN_FUNC((const char*)filename, mode_fopen);
+ return file;
+}
+
+
+static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
+{
+ uLong ret;
+ ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
+ return ret;
+}
+
+static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
+{
+ uLong ret;
+ ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
+ return ret;
+}
+
+static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
+{
+ long ret;
+ ret = ftell((FILE *)stream);
+ return ret;
+}
+
+
+static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
+{
+ ZPOS64_T ret;
+ ret = FTELLO_FUNC((FILE *)stream);
+ return ret;
+}
+
+static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin)
+{
+ int fseek_origin=0;
+ long ret;
+ switch (origin)
+ {
+ case ZLIB_FILEFUNC_SEEK_CUR :
+ fseek_origin = SEEK_CUR;
+ break;
+ case ZLIB_FILEFUNC_SEEK_END :
+ fseek_origin = SEEK_END;
+ break;
+ case ZLIB_FILEFUNC_SEEK_SET :
+ fseek_origin = SEEK_SET;
+ break;
+ default: return -1;
+ }
+ ret = 0;
+ if (fseek((FILE *)stream, offset, fseek_origin) != 0)
+ ret = -1;
+ return ret;
+}
+
+static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
+{
+ int fseek_origin=0;
+ long ret;
+ switch (origin)
+ {
+ case ZLIB_FILEFUNC_SEEK_CUR :
+ fseek_origin = SEEK_CUR;
+ break;
+ case ZLIB_FILEFUNC_SEEK_END :
+ fseek_origin = SEEK_END;
+ break;
+ case ZLIB_FILEFUNC_SEEK_SET :
+ fseek_origin = SEEK_SET;
+ break;
+ default: return -1;
+ }
+ ret = 0;
+
+ if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
+ ret = -1;
+
+ return ret;
+}
+
+
+static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
+{
+ int ret;
+ ret = fclose((FILE *)stream);
+ return ret;
+}
+
+static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
+{
+ int ret;
+ ret = ferror((FILE *)stream);
+ return ret;
+}
+
+void fill_fopen_filefunc (pzlib_filefunc_def)
+ zlib_filefunc_def* pzlib_filefunc_def;
+{
+ pzlib_filefunc_def->zopen_file = fopen_file_func;
+ pzlib_filefunc_def->zread_file = fread_file_func;
+ pzlib_filefunc_def->zwrite_file = fwrite_file_func;
+ pzlib_filefunc_def->ztell_file = ftell_file_func;
+ pzlib_filefunc_def->zseek_file = fseek_file_func;
+ pzlib_filefunc_def->zclose_file = fclose_file_func;
+ pzlib_filefunc_def->zerror_file = ferror_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
+
+void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen64_file = fopen64_file_func;
+ pzlib_filefunc_def->zread_file = fread_file_func;
+ pzlib_filefunc_def->zwrite_file = fwrite_file_func;
+ pzlib_filefunc_def->ztell64_file = ftell64_file_func;
+ pzlib_filefunc_def->zseek64_file = fseek64_file_func;
+ pzlib_filefunc_def->zclose_file = fclose_file_func;
+ pzlib_filefunc_def->zerror_file = ferror_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
diff --git a/src/thirdparty/zlib/minizip/ioapi.h b/src/thirdparty/zlib/minizip/ioapi.h
new file mode 100644
index 000000000..fc2447d29
--- /dev/null
+++ b/src/thirdparty/zlib/minizip/ioapi.h
@@ -0,0 +1,208 @@
+/* ioapi.h -- IO base function header for compress/uncompress .zip
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+ Changes
+
+ Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this)
+ Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux.
+ More if/def section may be needed to support other platforms
+ Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows.
+ (but you should use iowin32.c for windows instead)
+
+*/
+
+#ifndef _ZLIBIOAPI64_H
+#define _ZLIBIOAPI64_H
+
+#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__))
+
+ // Linux needs this to support file operation on files larger then 4+GB
+ // But might need better if/def to select just the platforms that needs them.
+
+ #ifndef __USE_FILE_OFFSET64
+ #define __USE_FILE_OFFSET64
+ #endif
+ #ifndef __USE_LARGEFILE64
+ #define __USE_LARGEFILE64
+ #endif
+ #ifndef _LARGEFILE64_SOURCE
+ #define _LARGEFILE64_SOURCE
+ #endif
+ #ifndef _FILE_OFFSET_BIT
+ #define _FILE_OFFSET_BIT 64
+ #endif
+
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "../zlib.h"
+
+#if defined(USE_FILE32API)
+#define fopen64 fopen
+#define ftello64 ftell
+#define fseeko64 fseek
+#else
+#ifdef __FreeBSD__
+#define fopen64 fopen
+#define ftello64 ftello
+#define fseeko64 fseeko
+#endif
+#ifdef _MSC_VER
+ #define fopen64 fopen
+ #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC)))
+ #define ftello64 _ftelli64
+ #define fseeko64 _fseeki64
+ #else // old MSC
+ #define ftello64 ftell
+ #define fseeko64 fseek
+ #endif
+#endif
+#endif
+
+/*
+#ifndef ZPOS64_T
+ #ifdef _WIN32
+ #define ZPOS64_T fpos_t
+ #else
+ #include <stdint.h>
+ #define ZPOS64_T uint64_t
+ #endif
+#endif
+*/
+
+#ifdef HAVE_MINIZIP64_CONF_H
+#include "mz64conf.h"
+#endif
+
+/* a type choosen by DEFINE */
+#ifdef HAVE_64BIT_INT_CUSTOM
+typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T;
+#else
+#ifdef HAS_STDINT_H
+#include "stdint.h"
+typedef uint64_t ZPOS64_T;
+#else
+
+/* Maximum unsigned 32-bit value used as placeholder for zip64 */
+#define MAXU32 0xffffffff
+
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+typedef unsigned __int64 ZPOS64_T;
+#else
+typedef unsigned long long int ZPOS64_T;
+#endif
+#endif
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define ZLIB_FILEFUNC_SEEK_CUR (1)
+#define ZLIB_FILEFUNC_SEEK_END (2)
+#define ZLIB_FILEFUNC_SEEK_SET (0)
+
+#define ZLIB_FILEFUNC_MODE_READ (1)
+#define ZLIB_FILEFUNC_MODE_WRITE (2)
+#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
+
+#define ZLIB_FILEFUNC_MODE_EXISTING (4)
+#define ZLIB_FILEFUNC_MODE_CREATE (8)
+
+
+#ifndef ZCALLBACK
+ #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
+ #define ZCALLBACK CALLBACK
+ #else
+ #define ZCALLBACK
+ #endif
+#endif
+
+
+
+
+typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode));
+typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
+typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
+
+typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
+typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
+
+
+/* here is the "old" 32 bits structure structure */
+typedef struct zlib_filefunc_def_s
+{
+ open_file_func zopen_file;
+ read_file_func zread_file;
+ write_file_func zwrite_file;
+ tell_file_func ztell_file;
+ seek_file_func zseek_file;
+ close_file_func zclose_file;
+ testerror_file_func zerror_file;
+ voidpf opaque;
+} zlib_filefunc_def;
+
+typedef ZPOS64_T (ZCALLBACK *tell64_file_func) OF((voidpf opaque, voidpf stream));
+typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+typedef voidpf (ZCALLBACK *open64_file_func) OF((voidpf opaque, const void* filename, int mode));
+
+typedef struct zlib_filefunc64_def_s
+{
+ open64_file_func zopen64_file;
+ read_file_func zread_file;
+ write_file_func zwrite_file;
+ tell64_file_func ztell64_file;
+ seek64_file_func zseek64_file;
+ close_file_func zclose_file;
+ testerror_file_func zerror_file;
+ voidpf opaque;
+} zlib_filefunc64_def;
+
+void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
+
+/* now internal definition, only for zip.c and unzip.h */
+typedef struct zlib_filefunc64_32_def_s
+{
+ zlib_filefunc64_def zfile_func64;
+ open_file_func zopen32_file;
+ tell_file_func ztell32_file;
+ seek_file_func zseek32_file;
+} zlib_filefunc64_32_def;
+
+
+#define ZREAD64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zread_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size))
+#define ZWRITE64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zwrite_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size))
+//#define ZTELL64(filefunc,filestream) ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream))
+//#define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))
+#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream))
+#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream))
+
+voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode));
+long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));
+ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream));
+
+void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);
+
+#define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode)))
+#define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream)))
+#define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode)))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/thirdparty/zlib/minizip/iowin32.c b/src/thirdparty/zlib/minizip/iowin32.c
new file mode 100644
index 000000000..274f39eb1
--- /dev/null
+++ b/src/thirdparty/zlib/minizip/iowin32.c
@@ -0,0 +1,462 @@
+/* iowin32.c -- IO base function header for compress/uncompress .zip
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+*/
+
+#include <stdlib.h>
+
+#include "zlib.h"
+#include "ioapi.h"
+#include "iowin32.h"
+
+#ifndef INVALID_HANDLE_VALUE
+#define INVALID_HANDLE_VALUE (0xFFFFFFFF)
+#endif
+
+#ifndef INVALID_SET_FILE_POINTER
+#define INVALID_SET_FILE_POINTER ((DWORD)-1)
+#endif
+
+
+// see Include/shared/winapifamily.h in the Windows Kit
+#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API)))
+#if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP)
+#define IOWIN32_USING_WINRT_API 1
+#endif
+#endif
+
+voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode));
+uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream));
+long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));
+int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));
+
+typedef struct
+{
+ HANDLE hf;
+ int error;
+} WIN32FILE_IOWIN;
+
+
+static void win32_translate_open_mode(int mode,
+ DWORD* lpdwDesiredAccess,
+ DWORD* lpdwCreationDisposition,
+ DWORD* lpdwShareMode,
+ DWORD* lpdwFlagsAndAttributes)
+{
+ *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;
+
+ if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+ {
+ *lpdwDesiredAccess = GENERIC_READ;
+ *lpdwCreationDisposition = OPEN_EXISTING;
+ *lpdwShareMode = FILE_SHARE_READ;
+ }
+ else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+ {
+ *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+ *lpdwCreationDisposition = OPEN_EXISTING;
+ }
+ else if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+ {
+ *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+ *lpdwCreationDisposition = CREATE_ALWAYS;
+ }
+}
+
+static voidpf win32_build_iowin(HANDLE hFile)
+{
+ voidpf ret=NULL;
+
+ if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
+ {
+ WIN32FILE_IOWIN w32fiow;
+ w32fiow.hf = hFile;
+ w32fiow.error = 0;
+ ret = malloc(sizeof(WIN32FILE_IOWIN));
+
+ if (ret==NULL)
+ CloseHandle(hFile);
+ else
+ *((WIN32FILE_IOWIN*)ret) = w32fiow;
+ }
+ return ret;
+}
+
+voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode)
+{
+ const char* mode_fopen = NULL;
+ DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+ HANDLE hFile = NULL;
+
+ win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+#ifdef IOWIN32_USING_WINRT_API
+#ifdef UNICODE
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ {
+ WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+ MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+ hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+ }
+#endif
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
+
+ return win32_build_iowin(hFile);
+}
+
+
+voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode)
+{
+ const char* mode_fopen = NULL;
+ DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+ HANDLE hFile = NULL;
+
+ win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+#ifdef IOWIN32_USING_WINRT_API
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ {
+ WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+ MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+ hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+ }
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
+
+ return win32_build_iowin(hFile);
+}
+
+
+voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode)
+{
+ const char* mode_fopen = NULL;
+ DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+ HANDLE hFile = NULL;
+
+ win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+#ifdef IOWIN32_USING_WINRT_API
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile2((LPCWSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition,NULL);
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
+
+ return win32_build_iowin(hFile);
+}
+
+
+voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode)
+{
+ const char* mode_fopen = NULL;
+ DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+ HANDLE hFile = NULL;
+
+ win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+#ifdef IOWIN32_USING_WINRT_API
+#ifdef UNICODE
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ {
+ WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+ MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+ hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+ }
+#endif
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
+
+ return win32_build_iowin(hFile);
+}
+
+
+uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size)
+{
+ uLong ret=0;
+ HANDLE hFile = NULL;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+
+ if (hFile != NULL)
+ {
+ if (!ReadFile(hFile, buf, size, &ret, NULL))
+ {
+ DWORD dwErr = GetLastError();
+ if (dwErr == ERROR_HANDLE_EOF)
+ dwErr = 0;
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ }
+ }
+
+ return ret;
+}
+
+
+uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size)
+{
+ uLong ret=0;
+ HANDLE hFile = NULL;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+
+ if (hFile != NULL)
+ {
+ if (!WriteFile(hFile, buf, size, &ret, NULL))
+ {
+ DWORD dwErr = GetLastError();
+ if (dwErr == ERROR_HANDLE_EOF)
+ dwErr = 0;
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ }
+ }
+
+ return ret;
+}
+
+static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *newPos, DWORD dwMoveMethod)
+{
+#ifdef IOWIN32_USING_WINRT_API
+ return SetFilePointerEx(hFile, pos, newPos, dwMoveMethod);
+#else
+ LONG lHigh = pos.HighPart;
+ DWORD dwNewPos = SetFilePointer(hFile, pos.LowPart, &lHigh, dwMoveMethod);
+ BOOL fOk = TRUE;
+ if (dwNewPos == 0xFFFFFFFF)
+ if (GetLastError() != NO_ERROR)
+ fOk = FALSE;
+ if ((newPos != NULL) && (fOk))
+ {
+ newPos->LowPart = dwNewPos;
+ newPos->HighPart = lHigh;
+ }
+ return fOk;
+#endif
+}
+
+long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
+{
+ long ret=-1;
+ HANDLE hFile = NULL;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+ if (hFile != NULL)
+ {
+ LARGE_INTEGER pos;
+ pos.QuadPart = 0;
+
+ if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
+ {
+ DWORD dwErr = GetLastError();
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ ret = -1;
+ }
+ else
+ ret=(long)pos.LowPart;
+ }
+ return ret;
+}
+
+ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
+{
+ ZPOS64_T ret= (ZPOS64_T)-1;
+ HANDLE hFile = NULL;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+
+ if (hFile)
+ {
+ LARGE_INTEGER pos;
+ pos.QuadPart = 0;
+
+ if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
+ {
+ DWORD dwErr = GetLastError();
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ ret = (ZPOS64_T)-1;
+ }
+ else
+ ret=pos.QuadPart;
+ }
+ return ret;
+}
+
+
+long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin)
+{
+ DWORD dwMoveMethod=0xFFFFFFFF;
+ HANDLE hFile = NULL;
+
+ long ret=-1;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+ switch (origin)
+ {
+ case ZLIB_FILEFUNC_SEEK_CUR :
+ dwMoveMethod = FILE_CURRENT;
+ break;
+ case ZLIB_FILEFUNC_SEEK_END :
+ dwMoveMethod = FILE_END;
+ break;
+ case ZLIB_FILEFUNC_SEEK_SET :
+ dwMoveMethod = FILE_BEGIN;
+ break;
+ default: return -1;
+ }
+
+ if (hFile != NULL)
+ {
+ LARGE_INTEGER pos;
+ pos.QuadPart = offset;
+ if (!MySetFilePointerEx(hFile, pos, NULL, dwMoveMethod))
+ {
+ DWORD dwErr = GetLastError();
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ ret = -1;
+ }
+ else
+ ret=0;
+ }
+ return ret;
+}
+
+long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin)
+{
+ DWORD dwMoveMethod=0xFFFFFFFF;
+ HANDLE hFile = NULL;
+ long ret=-1;
+
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+
+ switch (origin)
+ {
+ case ZLIB_FILEFUNC_SEEK_CUR :
+ dwMoveMethod = FILE_CURRENT;
+ break;
+ case ZLIB_FILEFUNC_SEEK_END :
+ dwMoveMethod = FILE_END;
+ break;
+ case ZLIB_FILEFUNC_SEEK_SET :
+ dwMoveMethod = FILE_BEGIN;
+ break;
+ default: return -1;
+ }
+
+ if (hFile)
+ {
+ LARGE_INTEGER pos;
+ pos.QuadPart = offset;
+ if (!MySetFilePointerEx(hFile, pos, NULL, dwMoveMethod))
+ {
+ DWORD dwErr = GetLastError();
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ ret = -1;
+ }
+ else
+ ret=0;
+ }
+ return ret;
+}
+
+int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)
+{
+ int ret=-1;
+
+ if (stream!=NULL)
+ {
+ HANDLE hFile;
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+ if (hFile != NULL)
+ {
+ CloseHandle(hFile);
+ ret=0;
+ }
+ free(stream);
+ }
+ return ret;
+}
+
+int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)
+{
+ int ret=-1;
+ if (stream!=NULL)
+ {
+ ret = ((WIN32FILE_IOWIN*)stream) -> error;
+ }
+ return ret;
+}
+
+void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen_file = win32_open_file_func;
+ pzlib_filefunc_def->zread_file = win32_read_file_func;
+ pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+ pzlib_filefunc_def->ztell_file = win32_tell_file_func;
+ pzlib_filefunc_def->zseek_file = win32_seek_file_func;
+ pzlib_filefunc_def->zclose_file = win32_close_file_func;
+ pzlib_filefunc_def->zerror_file = win32_error_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
+
+void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen64_file = win32_open64_file_func;
+ pzlib_filefunc_def->zread_file = win32_read_file_func;
+ pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+ pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
+ pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
+ pzlib_filefunc_def->zclose_file = win32_close_file_func;
+ pzlib_filefunc_def->zerror_file = win32_error_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
+
+
+void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;
+ pzlib_filefunc_def->zread_file = win32_read_file_func;
+ pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+ pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
+ pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
+ pzlib_filefunc_def->zclose_file = win32_close_file_func;
+ pzlib_filefunc_def->zerror_file = win32_error_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
+
+
+void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;
+ pzlib_filefunc_def->zread_file = win32_read_file_func;
+ pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+ pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
+ pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
+ pzlib_filefunc_def->zclose_file = win32_close_file_func;
+ pzlib_filefunc_def->zerror_file = win32_error_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
diff --git a/src/thirdparty/zlib/minizip/iowin32.h b/src/thirdparty/zlib/minizip/iowin32.h
new file mode 100644
index 000000000..0ca0969a7
--- /dev/null
+++ b/src/thirdparty/zlib/minizip/iowin32.h
@@ -0,0 +1,28 @@
+/* iowin32.h -- IO base function header for compress/uncompress .zip
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+*/
+
+#include <windows.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
+void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def));
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/thirdparty/zlib/minizip/unzip.c b/src/thirdparty/zlib/minizip/unzip.c
new file mode 100644
index 000000000..4119bcf30
--- /dev/null
+++ b/src/thirdparty/zlib/minizip/unzip.c
@@ -0,0 +1,2125 @@
+/* unzip.c -- IO for uncompress .zip files using zlib
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications of Unzip for Zip64
+ Copyright (C) 2007-2008 Even Rouault
+
+ Modifications for Zip64 support on both zip and unzip
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+
+ ------------------------------------------------------------------------------------
+ Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of
+ compatibility with older software. The following is from the original crypt.c.
+ Code woven in by Terry Thorsen 1/2003.
+
+ Copyright (c) 1990-2000 Info-ZIP. All rights reserved.
+
+ See the accompanying file LICENSE, version 2000-Apr-09 or later
+ (the contents of which are also included in zip.h) for terms of use.
+ If, for some reason, all these files are missing, the Info-ZIP license
+ also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
+
+ crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h]
+
+ The encryption/decryption parts of this source code (as opposed to the
+ non-echoing password parts) were originally written in Europe. The
+ whole source package can be freely distributed, including from the USA.
+ (Prior to January 2000, re-export from the US was a violation of US law.)
+
+ This encryption code is a direct transcription of the algorithm from
+ Roger Schlafly, described by Phil Katz in the file appnote.txt. This
+ file (appnote.txt) is distributed with the PKZIP program (even in the
+ version without encryption capabilities).
+
+ ------------------------------------------------------------------------------------
+
+ Changes in unzip.c
+
+ 2007-2008 - Even Rouault - Addition of cpl_unzGetCurrentFileZStreamPos
+ 2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz*
+ 2007-2008 - Even Rouault - Remove old C style function prototypes
+ 2007-2008 - Even Rouault - Add unzip support for ZIP64
+
+ Copyright (C) 2007-2008 Even Rouault
+
+
+ Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again).
+ Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G
+ should only read the compressed/uncompressed size from the Zip64 format if
+ the size from normal header was 0xFFFFFFFF
+ Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant
+ Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required)
+ Patch created by Daniel Borca
+
+ Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
+
+ Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef NOUNCRYPT
+ #define NOUNCRYPT
+#endif
+
+#include "../zlib.h"
+#include "unzip.h"
+
+#ifdef STDC
+# include <stddef.h>
+# include <string.h>
+# include <stdlib.h>
+#endif
+#ifdef NO_ERRNO_H
+ extern int errno;
+#else
+# include <errno.h>
+#endif
+
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+
+#ifndef CASESENSITIVITYDEFAULT_NO
+# if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)
+# define CASESENSITIVITYDEFAULT_NO
+# endif
+#endif
+
+
+#ifndef UNZ_BUFSIZE
+#define UNZ_BUFSIZE (16384)
+#endif
+
+#ifndef UNZ_MAXFILENAMEINZIP
+#define UNZ_MAXFILENAMEINZIP (256)
+#endif
+
+#ifndef ALLOC
+# define ALLOC(size) (malloc(size))
+#endif
+#ifndef TRYFREE
+# define TRYFREE(p) {if (p) free(p);}
+#endif
+
+#define SIZECENTRALDIRITEM (0x2e)
+#define SIZEZIPLOCALHEADER (0x1e)
+
+
+const char unz_copyright[] =
+ " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
+
+/* unz_file_info_interntal contain internal info about a file in zipfile*/
+typedef struct unz_file_info64_internal_s
+{
+ ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */
+} unz_file_info64_internal;
+
+
+/* file_in_zip_read_info_s contain internal information about a file in zipfile,
+ when reading and decompress it */
+typedef struct
+{
+ char *read_buffer; /* internal buffer for compressed data */
+ z_stream stream; /* zLib stream structure for inflate */
+
+#ifdef HAVE_BZIP2
+ bz_stream bstream; /* bzLib stream structure for bziped */
+#endif
+
+ ZPOS64_T pos_in_zipfile; /* position in byte on the zipfile, for fseek*/
+ uLong stream_initialised; /* flag set if stream structure is initialised*/
+
+ ZPOS64_T offset_local_extrafield;/* offset of the local extra field */
+ uInt size_local_extrafield;/* size of the local extra field */
+ ZPOS64_T pos_local_extrafield; /* position in the local extra field in read*/
+ ZPOS64_T total_out_64;
+
+ uLong crc32; /* crc32 of all data uncompressed */
+ uLong crc32_wait; /* crc32 we must obtain after decompress all */
+ ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */
+ ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/
+ zlib_filefunc64_32_def z_filefunc;
+ voidpf filestream; /* io structore of the zipfile */
+ uLong compression_method; /* compression method (0==store) */
+ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+ int raw;
+} file_in_zip64_read_info_s;
+
+
+/* unz64_s contain internal information about the zipfile
+*/
+typedef struct
+{
+ zlib_filefunc64_32_def z_filefunc;
+ int is64bitOpenFunction;
+ voidpf filestream; /* io structore of the zipfile */
+ unz_global_info64 gi; /* public global information */
+ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+ ZPOS64_T num_file; /* number of the current file in the zipfile*/
+ ZPOS64_T pos_in_central_dir; /* pos of the current file in the central dir*/
+ ZPOS64_T current_file_ok; /* flag about the usability of the current file*/
+ ZPOS64_T central_pos; /* position of the beginning of the central dir*/
+
+ ZPOS64_T size_central_dir; /* size of the central directory */
+ ZPOS64_T offset_central_dir; /* offset of start of central directory with
+ respect to the starting disk number */
+
+ unz_file_info64 cur_file_info; /* public info about the current file in zip*/
+ unz_file_info64_internal cur_file_info_internal; /* private info about it*/
+ file_in_zip64_read_info_s* pfile_in_zip_read; /* structure about the current
+ file if we are decompressing it */
+ int encrypted;
+
+ int isZip64;
+
+# ifndef NOUNCRYPT
+ unsigned long keys[3]; /* keys defining the pseudo-random sequence */
+ const z_crc_t* pcrc_32_tab;
+# endif
+} unz64_s;
+
+
+#ifndef NOUNCRYPT
+#include "crypt.h"
+#endif
+
+/* ===========================================================================
+ Read a byte from a gz_stream; update next_in and avail_in. Return EOF
+ for end of file.
+ IN assertion: the stream s has been successfully opened for reading.
+*/
+
+
+local int unz64local_getByte OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ int *pi));
+
+local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)
+{
+ unsigned char c;
+ int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
+ if (err==1)
+ {
+ *pi = (int)c;
+ return UNZ_OK;
+ }
+ else
+ {
+ if (ZERROR64(*pzlib_filefunc_def,filestream))
+ return UNZ_ERRNO;
+ else
+ return UNZ_EOF;
+ }
+}
+
+
+/* ===========================================================================
+ Reads a long in LSB order from the given gz_stream. Sets
+*/
+local int unz64local_getShort OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX));
+
+local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((uLong)i)<<8;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int unz64local_getLong OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX));
+
+local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((uLong)i)<<8;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((uLong)i)<<16;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<24;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int unz64local_getLong64 OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ ZPOS64_T *pX));
+
+
+local int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ ZPOS64_T *pX)
+{
+ ZPOS64_T x ;
+ int i = 0;
+ int err;
+
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (ZPOS64_T)i;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<8;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<16;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<24;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<32;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<40;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<48;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<56;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+/* My own strcmpi / strcasecmp */
+local int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2)
+{
+ for (;;)
+ {
+ char c1=*(fileName1++);
+ char c2=*(fileName2++);
+ if ((c1>='a') && (c1<='z'))
+ c1 -= 0x20;
+ if ((c2>='a') && (c2<='z'))
+ c2 -= 0x20;
+ if (c1=='\0')
+ return ((c2=='\0') ? 0 : -1);
+ if (c2=='\0')
+ return 1;
+ if (c1<c2)
+ return -1;
+ if (c1>c2)
+ return 1;
+ }
+}
+
+
+#ifdef CASESENSITIVITYDEFAULT_NO
+#define CASESENSITIVITYDEFAULTVALUE 2
+#else
+#define CASESENSITIVITYDEFAULTVALUE 1
+#endif
+
+#ifndef STRCMPCASENOSENTIVEFUNCTION
+#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
+#endif
+
+/*
+ Compare two filename (fileName1,fileName2).
+ If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+ If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+ or strcasecmp)
+ If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
+ (like 1 on Unix, 2 on Windows)
+
+*/
+extern int ZEXPORT unzStringFileNameCompare (const char* fileName1,
+ const char* fileName2,
+ int iCaseSensitivity)
+
+{
+ if (iCaseSensitivity==0)
+ iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
+
+ if (iCaseSensitivity==1)
+ return strcmp(fileName1,fileName2);
+
+ return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
+}
+
+#ifndef BUFREADCOMMENT
+#define BUFREADCOMMENT (0x400)
+#endif
+
+/*
+ Locate the Central directory of a zipfile (at the end, just before
+ the global comment)
+*/
+local ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
+{
+ unsigned char* buf;
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+ ZPOS64_T uPosFound=0;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+ return 0;
+
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ if (uMaxBack>uSizeFile)
+ uMaxBack = uSizeFile;
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+ return 0;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos ;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ uBackRead = uMaxBack;
+ else
+ uBackRead+=BUFREADCOMMENT;
+ uReadPos = uSizeFile-uBackRead ;
+
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+ (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ break;
+
+ if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+ break;
+
+ for (i=(int)uReadSize-3; (i--)>0;)
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+ ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+ {
+ uPosFound = uReadPos+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(buf);
+ return uPosFound;
+}
+
+
+/*
+ Locate the Central directory 64 of a zipfile (at the end, just before
+ the global comment)
+*/
+local ZPOS64_T unz64local_SearchCentralDir64 OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream));
+
+local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream)
+{
+ unsigned char* buf;
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+ ZPOS64_T uPosFound=0;
+ uLong uL;
+ ZPOS64_T relativeOffset;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+ return 0;
+
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ if (uMaxBack>uSizeFile)
+ uMaxBack = uSizeFile;
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+ return 0;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ uBackRead = uMaxBack;
+ else
+ uBackRead+=BUFREADCOMMENT;
+ uReadPos = uSizeFile-uBackRead ;
+
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+ (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ break;
+
+ if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+ break;
+
+ for (i=(int)uReadSize-3; (i--)>0;)
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+ ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
+ {
+ uPosFound = uReadPos+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(buf);
+ if (uPosFound == 0)
+ return 0;
+
+ /* Zip64 end of central directory locator */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return 0;
+
+ /* the signature, already checked */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+
+ /* number of the disk with the start of the zip64 end of central directory */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+ if (uL != 0)
+ return 0;
+
+ /* relative offset of the zip64 end of central directory record */
+ if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)
+ return 0;
+
+ /* total number of disks */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+ if (uL != 1)
+ return 0;
+
+ /* Goto end of central directory record */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return 0;
+
+ /* the signature */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+
+ if (uL != 0x06064b50)
+ return 0;
+
+ return relativeOffset;
+}
+
+/*
+ Open a Zip file. path contain the full pathname (by example,
+ on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer
+ "zlib/zlib114.zip".
+ If the zipfile cannot be opened (file doesn't exist or in not valid), the
+ return value is NULL.
+ Else, the return value is a unzFile Handle, usable with other function
+ of this unzip package.
+*/
+local unzFile unzOpenInternal (const void *path,
+ zlib_filefunc64_32_def* pzlib_filefunc64_32_def,
+ int is64bitOpenFunction)
+{
+ unz64_s us;
+ unz64_s *s;
+ ZPOS64_T central_pos;
+ uLong uL;
+
+ uLong number_disk; /* number of the current dist, used for
+ spaning ZIP, unsupported, always 0*/
+ uLong number_disk_with_CD; /* number the the disk with central dir, used
+ for spaning ZIP, unsupported, always 0*/
+ ZPOS64_T number_entry_CD; /* total number of entries in
+ the central dir
+ (same than number_entry on nospan) */
+
+ int err=UNZ_OK;
+
+ if (unz_copyright[0]!=' ')
+ return NULL;
+
+ us.z_filefunc.zseek32_file = NULL;
+ us.z_filefunc.ztell32_file = NULL;
+ if (pzlib_filefunc64_32_def==NULL)
+ fill_fopen64_filefunc(&us.z_filefunc.zfile_func64);
+ else
+ us.z_filefunc = *pzlib_filefunc64_32_def;
+ us.is64bitOpenFunction = is64bitOpenFunction;
+
+
+
+ us.filestream = ZOPEN64(us.z_filefunc,
+ path,
+ ZLIB_FILEFUNC_MODE_READ |
+ ZLIB_FILEFUNC_MODE_EXISTING);
+ if (us.filestream==NULL)
+ return NULL;
+
+ central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);
+ if (central_pos)
+ {
+ uLong uS;
+ ZPOS64_T uL64;
+
+ us.isZip64 = 1;
+
+ if (ZSEEK64(us.z_filefunc, us.filestream,
+ central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=UNZ_ERRNO;
+
+ /* the signature, already checked */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* size of zip64 end of central directory record */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* version made by */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* version needed to extract */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of this disk */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of the disk with the start of the central directory */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* total number of entries in the central directory on this disk */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* total number of entries in the central directory */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if ((number_entry_CD!=us.gi.number_entry) ||
+ (number_disk_with_CD!=0) ||
+ (number_disk!=0))
+ err=UNZ_BADZIPFILE;
+
+ /* size of the central directory */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* offset of start of central directory with respect to the
+ starting disk number */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ us.gi.size_comment = 0;
+ }
+ else
+ {
+ central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);
+ if (central_pos==0)
+ err=UNZ_ERRNO;
+
+ us.isZip64 = 0;
+
+ if (ZSEEK64(us.z_filefunc, us.filestream,
+ central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=UNZ_ERRNO;
+
+ /* the signature, already checked */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of this disk */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of the disk with the start of the central directory */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* total number of entries in the central dir on this disk */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ us.gi.number_entry = uL;
+
+ /* total number of entries in the central dir */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ number_entry_CD = uL;
+
+ if ((number_entry_CD!=us.gi.number_entry) ||
+ (number_disk_with_CD!=0) ||
+ (number_disk!=0))
+ err=UNZ_BADZIPFILE;
+
+ /* size of the central directory */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ us.size_central_dir = uL;
+
+ /* offset of start of central directory with respect to the
+ starting disk number */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ us.offset_central_dir = uL;
+
+ /* zipfile comment length */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ if ((central_pos<us.offset_central_dir+us.size_central_dir) &&
+ (err==UNZ_OK))
+ err=UNZ_BADZIPFILE;
+
+ if (err!=UNZ_OK)
+ {
+ ZCLOSE64(us.z_filefunc, us.filestream);
+ return NULL;
+ }
+
+ us.byte_before_the_zipfile = central_pos -
+ (us.offset_central_dir+us.size_central_dir);
+ us.central_pos = central_pos;
+ us.pfile_in_zip_read = NULL;
+ us.encrypted = 0;
+
+
+ s=(unz64_s*)ALLOC(sizeof(unz64_s));
+ if( s != NULL)
+ {
+ *s=us;
+ unzGoToFirstFile((unzFile)s);
+ }
+ return (unzFile)s;
+}
+
+
+extern unzFile ZEXPORT unzOpen2 (const char *path,
+ zlib_filefunc_def* pzlib_filefunc32_def)
+{
+ if (pzlib_filefunc32_def != NULL)
+ {
+ zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+ fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);
+ return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 0);
+ }
+ else
+ return unzOpenInternal(path, NULL, 0);
+}
+
+extern unzFile ZEXPORT unzOpen2_64 (const void *path,
+ zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ if (pzlib_filefunc_def != NULL)
+ {
+ zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+ zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;
+ zlib_filefunc64_32_def_fill.ztell32_file = NULL;
+ zlib_filefunc64_32_def_fill.zseek32_file = NULL;
+ return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1);
+ }
+ else
+ return unzOpenInternal(path, NULL, 1);
+}
+
+extern unzFile ZEXPORT unzOpen (const char *path)
+{
+ return unzOpenInternal(path, NULL, 0);
+}
+
+extern unzFile ZEXPORT unzOpen64 (const void *path)
+{
+ return unzOpenInternal(path, NULL, 1);
+}
+
+/*
+ Close a ZipFile opened with unzOpen.
+ If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
+ these files MUST be closed with unzCloseCurrentFile before call unzClose.
+ return UNZ_OK if there is no problem. */
+extern int ZEXPORT unzClose (unzFile file)
+{
+ unz64_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+
+ if (s->pfile_in_zip_read!=NULL)
+ unzCloseCurrentFile(file);
+
+ ZCLOSE64(s->z_filefunc, s->filestream);
+ TRYFREE(s);
+ return UNZ_OK;
+}
+
+
+/*
+ Write info about the ZipFile in the *pglobal_info structure.
+ No preparation of the structure is needed
+ return UNZ_OK if there is no problem. */
+extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info)
+{
+ unz64_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ *pglobal_info=s->gi;
+ return UNZ_OK;
+}
+
+extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info32)
+{
+ unz64_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ /* to do : check if number_entry is not truncated */
+ pglobal_info32->number_entry = (uLong)s->gi.number_entry;
+ pglobal_info32->size_comment = s->gi.size_comment;
+ return UNZ_OK;
+}
+/*
+ Translate date/time from Dos format to tm_unz (readable more easilty)
+*/
+local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
+{
+ ZPOS64_T uDate;
+ uDate = (ZPOS64_T)(ulDosDate>>16);
+ ptm->tm_mday = (uInt)(uDate&0x1f) ;
+ ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
+ ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
+
+ ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
+ ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
+ ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
+}
+
+/*
+ Get Info about the current file in the zipfile, with internal only info
+*/
+local int unz64local_GetCurrentFileInfoInternal OF((unzFile file,
+ unz_file_info64 *pfile_info,
+ unz_file_info64_internal
+ *pfile_info_internal,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize));
+
+local int unz64local_GetCurrentFileInfoInternal (unzFile file,
+ unz_file_info64 *pfile_info,
+ unz_file_info64_internal
+ *pfile_info_internal,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize)
+{
+ unz64_s* s;
+ unz_file_info64 file_info;
+ unz_file_info64_internal file_info_internal;
+ int err=UNZ_OK;
+ uLong uMagic;
+ long lSeek=0;
+ uLong uL;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (ZSEEK64(s->z_filefunc, s->filestream,
+ s->pos_in_central_dir+s->byte_before_the_zipfile,
+ ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=UNZ_ERRNO;
+
+
+ /* we check the magic */
+ if (err==UNZ_OK)
+ {
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if (uMagic!=0x02014b50)
+ err=UNZ_BADZIPFILE;
+ }
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+ err=UNZ_ERRNO;
+ file_info.compressed_size = uL;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+ err=UNZ_ERRNO;
+ file_info.uncompressed_size = uL;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ // relative offset of local header
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+ err=UNZ_ERRNO;
+ file_info_internal.offset_curfile = uL;
+
+ lSeek+=file_info.size_filename;
+ if ((err==UNZ_OK) && (szFileName!=NULL))
+ {
+ uLong uSizeRead ;
+ if (file_info.size_filename<fileNameBufferSize)
+ {
+ *(szFileName+file_info.size_filename)='\0';
+ uSizeRead = file_info.size_filename;
+ }
+ else
+ uSizeRead = fileNameBufferSize;
+
+ if ((file_info.size_filename>0) && (fileNameBufferSize>0))
+ if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)
+ err=UNZ_ERRNO;
+ lSeek -= uSizeRead;
+ }
+
+ // Read extrafield
+ if ((err==UNZ_OK) && (extraField!=NULL))
+ {
+ ZPOS64_T uSizeRead ;
+ if (file_info.size_file_extra<extraFieldBufferSize)
+ uSizeRead = file_info.size_file_extra;
+ else
+ uSizeRead = extraFieldBufferSize;
+
+ if (lSeek!=0)
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ lSeek=0;
+ else
+ err=UNZ_ERRNO;
+ }
+
+ if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
+ if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead)
+ err=UNZ_ERRNO;
+
+ lSeek += file_info.size_file_extra - (uLong)uSizeRead;
+ }
+ else
+ lSeek += file_info.size_file_extra;
+
+
+ if ((err==UNZ_OK) && (file_info.size_file_extra != 0))
+ {
+ uLong acc = 0;
+
+ // since lSeek now points to after the extra field we need to move back
+ lSeek -= file_info.size_file_extra;
+
+ if (lSeek!=0)
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ lSeek=0;
+ else
+ err=UNZ_ERRNO;
+ }
+
+ while(acc < file_info.size_file_extra)
+ {
+ uLong headerId;
+ uLong dataSize;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* ZIP64 extra fields */
+ if (headerId == 0x0001)
+ {
+ uLong uL;
+
+ if(file_info.uncompressed_size == MAXU32)
+ {
+ if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ if(file_info.compressed_size == MAXU32)
+ {
+ if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ if(file_info_internal.offset_curfile == MAXU32)
+ {
+ /* Relative Header offset */
+ if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ if(file_info.disk_num_start == MAXU32)
+ {
+ /* Disk Start Number */
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ }
+ else
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0)
+ err=UNZ_ERRNO;
+ }
+
+ acc += 2 + 2 + dataSize;
+ }
+ }
+
+ if ((err==UNZ_OK) && (szComment!=NULL))
+ {
+ uLong uSizeRead ;
+ if (file_info.size_file_comment<commentBufferSize)
+ {
+ *(szComment+file_info.size_file_comment)='\0';
+ uSizeRead = file_info.size_file_comment;
+ }
+ else
+ uSizeRead = commentBufferSize;
+
+ if (lSeek!=0)
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ lSeek=0;
+ else
+ err=UNZ_ERRNO;
+ }
+
+ if ((file_info.size_file_comment>0) && (commentBufferSize>0))
+ if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
+ err=UNZ_ERRNO;
+ lSeek+=file_info.size_file_comment - uSizeRead;
+ }
+ else
+ lSeek+=file_info.size_file_comment;
+
+
+ if ((err==UNZ_OK) && (pfile_info!=NULL))
+ *pfile_info=file_info;
+
+ if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
+ *pfile_info_internal=file_info_internal;
+
+ return err;
+}
+
+
+
+/*
+ Write info about the ZipFile in the *pglobal_info structure.
+ No preparation of the structure is needed
+ return UNZ_OK if there is no problem.
+*/
+extern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file,
+ unz_file_info64 * pfile_info,
+ char * szFileName, uLong fileNameBufferSize,
+ void *extraField, uLong extraFieldBufferSize,
+ char* szComment, uLong commentBufferSize)
+{
+ return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL,
+ szFileName,fileNameBufferSize,
+ extraField,extraFieldBufferSize,
+ szComment,commentBufferSize);
+}
+
+extern int ZEXPORT unzGetCurrentFileInfo (unzFile file,
+ unz_file_info * pfile_info,
+ char * szFileName, uLong fileNameBufferSize,
+ void *extraField, uLong extraFieldBufferSize,
+ char* szComment, uLong commentBufferSize)
+{
+ int err;
+ unz_file_info64 file_info64;
+ err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL,
+ szFileName,fileNameBufferSize,
+ extraField,extraFieldBufferSize,
+ szComment,commentBufferSize);
+ if ((err==UNZ_OK) && (pfile_info != NULL))
+ {
+ pfile_info->version = file_info64.version;
+ pfile_info->version_needed = file_info64.version_needed;
+ pfile_info->flag = file_info64.flag;
+ pfile_info->compression_method = file_info64.compression_method;
+ pfile_info->dosDate = file_info64.dosDate;
+ pfile_info->crc = file_info64.crc;
+
+ pfile_info->size_filename = file_info64.size_filename;
+ pfile_info->size_file_extra = file_info64.size_file_extra;
+ pfile_info->size_file_comment = file_info64.size_file_comment;
+
+ pfile_info->disk_num_start = file_info64.disk_num_start;
+ pfile_info->internal_fa = file_info64.internal_fa;
+ pfile_info->external_fa = file_info64.external_fa;
+
+ pfile_info->tmu_date = file_info64.tmu_date,
+
+
+ pfile_info->compressed_size = (uLong)file_info64.compressed_size;
+ pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size;
+
+ }
+ return err;
+}
+/*
+ Set the current file of the zipfile to the first file.
+ return UNZ_OK if there is no problem
+*/
+extern int ZEXPORT unzGoToFirstFile (unzFile file)
+{
+ int err=UNZ_OK;
+ unz64_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ s->pos_in_central_dir=s->offset_central_dir;
+ s->num_file=0;
+ err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+/*
+ Set the current file of the zipfile to the next file.
+ return UNZ_OK if there is no problem
+ return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+*/
+extern int ZEXPORT unzGoToNextFile (unzFile file)
+{
+ unz64_s* s;
+ int err;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_END_OF_LIST_OF_FILE;
+ if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */
+ if (s->num_file+1==s->gi.number_entry)
+ return UNZ_END_OF_LIST_OF_FILE;
+
+ s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
+ s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
+ s->num_file++;
+ err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+
+/*
+ Try locate the file szFileName in the zipfile.
+ For the iCaseSensitivity signification, see unzStringFileNameCompare
+
+ return value :
+ UNZ_OK if the file is found. It becomes the current file.
+ UNZ_END_OF_LIST_OF_FILE if the file is not found
+*/
+extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity)
+{
+ unz64_s* s;
+ int err;
+
+ /* We remember the 'current' position in the file so that we can jump
+ * back there if we fail.
+ */
+ unz_file_info64 cur_file_infoSaved;
+ unz_file_info64_internal cur_file_info_internalSaved;
+ ZPOS64_T num_fileSaved;
+ ZPOS64_T pos_in_central_dirSaved;
+
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+
+ if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
+ return UNZ_PARAMERROR;
+
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_END_OF_LIST_OF_FILE;
+
+ /* Save the current state */
+ num_fileSaved = s->num_file;
+ pos_in_central_dirSaved = s->pos_in_central_dir;
+ cur_file_infoSaved = s->cur_file_info;
+ cur_file_info_internalSaved = s->cur_file_info_internal;
+
+ err = unzGoToFirstFile(file);
+
+ while (err == UNZ_OK)
+ {
+ char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
+ err = unzGetCurrentFileInfo64(file,NULL,
+ szCurrentFileName,sizeof(szCurrentFileName)-1,
+ NULL,0,NULL,0);
+ if (err == UNZ_OK)
+ {
+ if (unzStringFileNameCompare(szCurrentFileName,
+ szFileName,iCaseSensitivity)==0)
+ return UNZ_OK;
+ err = unzGoToNextFile(file);
+ }
+ }
+
+ /* We failed, so restore the state of the 'current file' to where we
+ * were.
+ */
+ s->num_file = num_fileSaved ;
+ s->pos_in_central_dir = pos_in_central_dirSaved ;
+ s->cur_file_info = cur_file_infoSaved;
+ s->cur_file_info_internal = cur_file_info_internalSaved;
+ return err;
+}
+
+
+/*
+///////////////////////////////////////////
+// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)
+// I need random access
+//
+// Further optimization could be realized by adding an ability
+// to cache the directory in memory. The goal being a single
+// comprehensive file read to put the file I need in a memory.
+*/
+
+/*
+typedef struct unz_file_pos_s
+{
+ ZPOS64_T pos_in_zip_directory; // offset in file
+ ZPOS64_T num_of_file; // # of file
+} unz_file_pos;
+*/
+
+extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos)
+{
+ unz64_s* s;
+
+ if (file==NULL || file_pos==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_END_OF_LIST_OF_FILE;
+
+ file_pos->pos_in_zip_directory = s->pos_in_central_dir;
+ file_pos->num_of_file = s->num_file;
+
+ return UNZ_OK;
+}
+
+extern int ZEXPORT unzGetFilePos(
+ unzFile file,
+ unz_file_pos* file_pos)
+{
+ unz64_file_pos file_pos64;
+ int err = unzGetFilePos64(file,&file_pos64);
+ if (err==UNZ_OK)
+ {
+ file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory;
+ file_pos->num_of_file = (uLong)file_pos64.num_of_file;
+ }
+ return err;
+}
+
+extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos)
+{
+ unz64_s* s;
+ int err;
+
+ if (file==NULL || file_pos==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+
+ /* jump to the right spot */
+ s->pos_in_central_dir = file_pos->pos_in_zip_directory;
+ s->num_file = file_pos->num_of_file;
+
+ /* set the current file */
+ err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ /* return results */
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+extern int ZEXPORT unzGoToFilePos(
+ unzFile file,
+ unz_file_pos* file_pos)
+{
+ unz64_file_pos file_pos64;
+ if (file_pos == NULL)
+ return UNZ_PARAMERROR;
+
+ file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory;
+ file_pos64.num_of_file = file_pos->num_of_file;
+ return unzGoToFilePos64(file,&file_pos64);
+}
+
+/*
+// Unzip Helper Functions - should be here?
+///////////////////////////////////////////
+*/
+
+/*
+ Read the local header of the current zipfile
+ Check the coherency of the local header and info in the end of central
+ directory about this file
+ store in *piSizeVar the size of extra info in local header
+ (filename and size of extra field data)
+*/
+local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVar,
+ ZPOS64_T * poffset_local_extrafield,
+ uInt * psize_local_extrafield)
+{
+ uLong uMagic,uData,uFlags;
+ uLong size_filename;
+ uLong size_extra_field;
+ int err=UNZ_OK;
+
+ *piSizeVar = 0;
+ *poffset_local_extrafield = 0;
+ *psize_local_extrafield = 0;
+
+ if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
+ s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+
+
+ if (err==UNZ_OK)
+ {
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if (uMagic!=0x04034b50)
+ err=UNZ_BADZIPFILE;
+ }
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+ err=UNZ_ERRNO;
+/*
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
+ err=UNZ_BADZIPFILE;
+*/
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
+ err=UNZ_BADZIPFILE;
+
+ if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
+/* #ifdef HAVE_BZIP2 */
+ (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
+/* #endif */
+ (s->cur_file_info.compression_method!=Z_DEFLATED))
+ err=UNZ_BADZIPFILE;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */
+ err=UNZ_ERRNO;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0))
+ err=UNZ_BADZIPFILE;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */
+ err=UNZ_ERRNO;
+ else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0))
+ err=UNZ_BADZIPFILE;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */
+ err=UNZ_ERRNO;
+ else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0))
+ err=UNZ_BADZIPFILE;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
+ err=UNZ_BADZIPFILE;
+
+ *piSizeVar += (uInt)size_filename;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)
+ err=UNZ_ERRNO;
+ *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
+ SIZEZIPLOCALHEADER + size_filename;
+ *psize_local_extrafield = (uInt)size_extra_field;
+
+ *piSizeVar += (uInt)size_extra_field;
+
+ return err;
+}
+
+/*
+ Open for reading data the current file in the zipfile.
+ If there is no error and the file is opened, the return value is UNZ_OK.
+*/
+extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,
+ int* level, int raw, const char* password)
+{
+ int err=UNZ_OK;
+ uInt iSizeVar;
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ ZPOS64_T offset_local_extrafield; /* offset of the local extra field */
+ uInt size_local_extrafield; /* size of the local extra field */
+# ifndef NOUNCRYPT
+ char source[12];
+# else
+ if (password != NULL)
+ return UNZ_PARAMERROR;
+# endif
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_PARAMERROR;
+
+ if (s->pfile_in_zip_read != NULL)
+ unzCloseCurrentFile(file);
+
+ if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
+ return UNZ_BADZIPFILE;
+
+ pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s));
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_INTERNALERROR;
+
+ pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
+ pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
+ pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
+ pfile_in_zip_read_info->pos_local_extrafield=0;
+ pfile_in_zip_read_info->raw=raw;
+
+ if (pfile_in_zip_read_info->read_buffer==NULL)
+ {
+ TRYFREE(pfile_in_zip_read_info);
+ return UNZ_INTERNALERROR;
+ }
+
+ pfile_in_zip_read_info->stream_initialised=0;
+
+ if (method!=NULL)
+ *method = (int)s->cur_file_info.compression_method;
+
+ if (level!=NULL)
+ {
+ *level = 6;
+ switch (s->cur_file_info.flag & 0x06)
+ {
+ case 6 : *level = 1; break;
+ case 4 : *level = 2; break;
+ case 2 : *level = 9; break;
+ }
+ }
+
+ if ((s->cur_file_info.compression_method!=0) &&
+/* #ifdef HAVE_BZIP2 */
+ (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
+/* #endif */
+ (s->cur_file_info.compression_method!=Z_DEFLATED))
+
+ err=UNZ_BADZIPFILE;
+
+ pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
+ pfile_in_zip_read_info->crc32=0;
+ pfile_in_zip_read_info->total_out_64=0;
+ pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method;
+ pfile_in_zip_read_info->filestream=s->filestream;
+ pfile_in_zip_read_info->z_filefunc=s->z_filefunc;
+ pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
+
+ pfile_in_zip_read_info->stream.total_out = 0;
+
+ if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw))
+ {
+#ifdef HAVE_BZIP2
+ pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0;
+ pfile_in_zip_read_info->bstream.bzfree = (free_func)0;
+ pfile_in_zip_read_info->bstream.opaque = (voidpf)0;
+ pfile_in_zip_read_info->bstream.state = (voidpf)0;
+
+ pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
+ pfile_in_zip_read_info->stream.zfree = (free_func)0;
+ pfile_in_zip_read_info->stream.opaque = (voidpf)0;
+ pfile_in_zip_read_info->stream.next_in = (voidpf)0;
+ pfile_in_zip_read_info->stream.avail_in = 0;
+
+ err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);
+ if (err == Z_OK)
+ pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;
+ else
+ {
+ TRYFREE(pfile_in_zip_read_info);
+ return err;
+ }
+#else
+ pfile_in_zip_read_info->raw=1;
+#endif
+ }
+ else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw))
+ {
+ pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
+ pfile_in_zip_read_info->stream.zfree = (free_func)0;
+ pfile_in_zip_read_info->stream.opaque = (voidpf)0;
+ pfile_in_zip_read_info->stream.next_in = 0;
+ pfile_in_zip_read_info->stream.avail_in = 0;
+
+ err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
+ if (err == Z_OK)
+ pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;
+ else
+ {
+ TRYFREE(pfile_in_zip_read_info);
+ return err;
+ }
+ /* windowBits is passed < 0 to tell that there is no zlib header.
+ * Note that in this case inflate *requires* an extra "dummy" byte
+ * after the compressed stream in order to complete decompression and
+ * return Z_STREAM_END.
+ * In unzip, i don't wait absolutely Z_STREAM_END because I known the
+ * size of both compressed and uncompressed data
+ */
+ }
+ pfile_in_zip_read_info->rest_read_compressed =
+ s->cur_file_info.compressed_size ;
+ pfile_in_zip_read_info->rest_read_uncompressed =
+ s->cur_file_info.uncompressed_size ;
+
+
+ pfile_in_zip_read_info->pos_in_zipfile =
+ s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
+ iSizeVar;
+
+ pfile_in_zip_read_info->stream.avail_in = (uInt)0;
+
+ s->pfile_in_zip_read = pfile_in_zip_read_info;
+ s->encrypted = 0;
+
+# ifndef NOUNCRYPT
+ if (password != NULL)
+ {
+ int i;
+ s->pcrc_32_tab = get_crc_table();
+ init_keys(password,s->keys,s->pcrc_32_tab);
+ if (ZSEEK64(s->z_filefunc, s->filestream,
+ s->pfile_in_zip_read->pos_in_zipfile +
+ s->pfile_in_zip_read->byte_before_the_zipfile,
+ SEEK_SET)!=0)
+ return UNZ_INTERNALERROR;
+ if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12)
+ return UNZ_INTERNALERROR;
+
+ for (i = 0; i<12; i++)
+ zdecode(s->keys,s->pcrc_32_tab,source[i]);
+
+ s->pfile_in_zip_read->pos_in_zipfile+=12;
+ s->encrypted=1;
+ }
+# endif
+
+
+ return UNZ_OK;
+}
+
+extern int ZEXPORT unzOpenCurrentFile (unzFile file)
+{
+ return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
+}
+
+extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char* password)
+{
+ return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
+}
+
+extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw)
+{
+ return unzOpenCurrentFile3(file, method, level, raw, NULL);
+}
+
+/** Addition for GDAL : START */
+
+extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file)
+{
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ s=(unz64_s*)file;
+ if (file==NULL)
+ return 0; //UNZ_PARAMERROR;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+ if (pfile_in_zip_read_info==NULL)
+ return 0; //UNZ_PARAMERROR;
+ return pfile_in_zip_read_info->pos_in_zipfile +
+ pfile_in_zip_read_info->byte_before_the_zipfile;
+}
+
+/** Addition for GDAL : END */
+
+/*
+ Read bytes from the current file.
+ buf contain buffer where data must be copied
+ len the size of buf.
+
+ return the number of byte copied if somes bytes are copied
+ return 0 if the end of file was reached
+ return <0 with error code if there is an error
+ (UNZ_ERRNO for IO error, or zLib error for uncompress error)
+*/
+extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
+{
+ int err=UNZ_OK;
+ uInt iRead = 0;
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+
+ if (pfile_in_zip_read_info->read_buffer == NULL)
+ return UNZ_END_OF_LIST_OF_FILE;
+ if (len==0)
+ return 0;
+
+ pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;
+
+ pfile_in_zip_read_info->stream.avail_out = (uInt)len;
+
+ if ((len>pfile_in_zip_read_info->rest_read_uncompressed) &&
+ (!(pfile_in_zip_read_info->raw)))
+ pfile_in_zip_read_info->stream.avail_out =
+ (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
+
+ if ((len>pfile_in_zip_read_info->rest_read_compressed+
+ pfile_in_zip_read_info->stream.avail_in) &&
+ (pfile_in_zip_read_info->raw))
+ pfile_in_zip_read_info->stream.avail_out =
+ (uInt)pfile_in_zip_read_info->rest_read_compressed+
+ pfile_in_zip_read_info->stream.avail_in;
+
+ while (pfile_in_zip_read_info->stream.avail_out>0)
+ {
+ if ((pfile_in_zip_read_info->stream.avail_in==0) &&
+ (pfile_in_zip_read_info->rest_read_compressed>0))
+ {
+ uInt uReadThis = UNZ_BUFSIZE;
+ if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
+ uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
+ if (uReadThis == 0)
+ return UNZ_EOF;
+ if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ pfile_in_zip_read_info->pos_in_zipfile +
+ pfile_in_zip_read_info->byte_before_the_zipfile,
+ ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+ if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ pfile_in_zip_read_info->read_buffer,
+ uReadThis)!=uReadThis)
+ return UNZ_ERRNO;
+
+
+# ifndef NOUNCRYPT
+ if(s->encrypted)
+ {
+ uInt i;
+ for(i=0;i<uReadThis;i++)
+ pfile_in_zip_read_info->read_buffer[i] =
+ zdecode(s->keys,s->pcrc_32_tab,
+ pfile_in_zip_read_info->read_buffer[i]);
+ }
+# endif
+
+
+ pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
+
+ pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
+
+ pfile_in_zip_read_info->stream.next_in =
+ (Bytef*)pfile_in_zip_read_info->read_buffer;
+ pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
+ }
+
+ if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))
+ {
+ uInt uDoCopy,i ;
+
+ if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
+ (pfile_in_zip_read_info->rest_read_compressed == 0))
+ return (iRead==0) ? UNZ_EOF : iRead;
+
+ if (pfile_in_zip_read_info->stream.avail_out <
+ pfile_in_zip_read_info->stream.avail_in)
+ uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
+ else
+ uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
+
+ for (i=0;i<uDoCopy;i++)
+ *(pfile_in_zip_read_info->stream.next_out+i) =
+ *(pfile_in_zip_read_info->stream.next_in+i);
+
+ pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy;
+
+ pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
+ pfile_in_zip_read_info->stream.next_out,
+ uDoCopy);
+ pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
+ pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
+ pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
+ pfile_in_zip_read_info->stream.next_out += uDoCopy;
+ pfile_in_zip_read_info->stream.next_in += uDoCopy;
+ pfile_in_zip_read_info->stream.total_out += uDoCopy;
+ iRead += uDoCopy;
+ }
+ else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED)
+ {
+#ifdef HAVE_BZIP2
+ uLong uTotalOutBefore,uTotalOutAfter;
+ const Bytef *bufBefore;
+ uLong uOutThis;
+
+ pfile_in_zip_read_info->bstream.next_in = (char*)pfile_in_zip_read_info->stream.next_in;
+ pfile_in_zip_read_info->bstream.avail_in = pfile_in_zip_read_info->stream.avail_in;
+ pfile_in_zip_read_info->bstream.total_in_lo32 = pfile_in_zip_read_info->stream.total_in;
+ pfile_in_zip_read_info->bstream.total_in_hi32 = 0;
+ pfile_in_zip_read_info->bstream.next_out = (char*)pfile_in_zip_read_info->stream.next_out;
+ pfile_in_zip_read_info->bstream.avail_out = pfile_in_zip_read_info->stream.avail_out;
+ pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out;
+ pfile_in_zip_read_info->bstream.total_out_hi32 = 0;
+
+ uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32;
+ bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out;
+
+ err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);
+
+ uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32;
+ uOutThis = uTotalOutAfter-uTotalOutBefore;
+
+ pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
+
+ pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis));
+ pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis;
+ iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+
+ pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->bstream.next_in;
+ pfile_in_zip_read_info->stream.avail_in = pfile_in_zip_read_info->bstream.avail_in;
+ pfile_in_zip_read_info->stream.total_in = pfile_in_zip_read_info->bstream.total_in_lo32;
+ pfile_in_zip_read_info->stream.next_out = (Bytef*)pfile_in_zip_read_info->bstream.next_out;
+ pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out;
+ pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32;
+
+ if (err==BZ_STREAM_END)
+ return (iRead==0) ? UNZ_EOF : iRead;
+ if (err!=BZ_OK)
+ break;
+#endif
+ } // end Z_BZIP2ED
+ else
+ {
+ ZPOS64_T uTotalOutBefore,uTotalOutAfter;
+ const Bytef *bufBefore;
+ ZPOS64_T uOutThis;
+ int flush=Z_SYNC_FLUSH;
+
+ uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
+ bufBefore = pfile_in_zip_read_info->stream.next_out;
+
+ /*
+ if ((pfile_in_zip_read_info->rest_read_uncompressed ==
+ pfile_in_zip_read_info->stream.avail_out) &&
+ (pfile_in_zip_read_info->rest_read_compressed == 0))
+ flush = Z_FINISH;
+ */
+ err=inflate(&pfile_in_zip_read_info->stream,flush);
+
+ if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))
+ err = Z_DATA_ERROR;
+
+ uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
+ uOutThis = uTotalOutAfter-uTotalOutBefore;
+
+ pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
+
+ pfile_in_zip_read_info->crc32 =
+ crc32(pfile_in_zip_read_info->crc32,bufBefore,
+ (uInt)(uOutThis));
+
+ pfile_in_zip_read_info->rest_read_uncompressed -=
+ uOutThis;
+
+ iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+
+ if (err==Z_STREAM_END)
+ return (iRead==0) ? UNZ_EOF : iRead;
+ if (err!=Z_OK)
+ break;
+ }
+ }
+
+ if (err==Z_OK)
+ return iRead;
+ return err;
+}
+
+
+/*
+ Give the current position in uncompressed data
+*/
+extern z_off_t ZEXPORT unztell (unzFile file)
+{
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+ return (z_off_t)pfile_in_zip_read_info->stream.total_out;
+}
+
+extern ZPOS64_T ZEXPORT unztell64 (unzFile file)
+{
+
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return (ZPOS64_T)-1;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return (ZPOS64_T)-1;
+
+ return pfile_in_zip_read_info->total_out_64;
+}
+
+
+/*
+ return 1 if the end of file was reached, 0 elsewhere
+*/
+extern int ZEXPORT unzeof (unzFile file)
+{
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+ if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
+ return 1;
+ else
+ return 0;
+}
+
+
+
+/*
+Read extra field from the current file (opened by unzOpenCurrentFile)
+This is the local-header version of the extra field (sometimes, there is
+more info in the local-header version than in the central-header)
+
+ if buf==NULL, it return the size of the local extra field that can be read
+
+ if buf!=NULL, len is the size of the buffer, the extra header is copied in
+ buf.
+ the return value is the number of bytes copied in buf, or (if <0)
+ the error code
+*/
+extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len)
+{
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ uInt read_now;
+ ZPOS64_T size_to_read;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+ size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
+ pfile_in_zip_read_info->pos_local_extrafield);
+
+ if (buf==NULL)
+ return (int)size_to_read;
+
+ if (len>size_to_read)
+ read_now = (uInt)size_to_read;
+ else
+ read_now = (uInt)len ;
+
+ if (read_now==0)
+ return 0;
+
+ if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ pfile_in_zip_read_info->offset_local_extrafield +
+ pfile_in_zip_read_info->pos_local_extrafield,
+ ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+
+ if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ buf,read_now)!=read_now)
+ return UNZ_ERRNO;
+
+ return (int)read_now;
+}
+
+/*
+ Close the file in zip opened with unzOpenCurrentFile
+ Return UNZ_CRCERROR if all the file was read but the CRC is not good
+*/
+extern int ZEXPORT unzCloseCurrentFile (unzFile file)
+{
+ int err=UNZ_OK;
+
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+
+ if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&
+ (!pfile_in_zip_read_info->raw))
+ {
+ if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
+ err=UNZ_CRCERROR;
+ }
+
+
+ TRYFREE(pfile_in_zip_read_info->read_buffer);
+ pfile_in_zip_read_info->read_buffer = NULL;
+ if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)
+ inflateEnd(&pfile_in_zip_read_info->stream);
+#ifdef HAVE_BZIP2
+ else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED)
+ BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream);
+#endif
+
+
+ pfile_in_zip_read_info->stream_initialised = 0;
+ TRYFREE(pfile_in_zip_read_info);
+
+ s->pfile_in_zip_read=NULL;
+
+ return err;
+}
+
+
+/*
+ Get the global comment string of the ZipFile, in the szComment buffer.
+ uSizeBuf is the size of the szComment buffer.
+ return the number of byte copied or an error code <0
+*/
+extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf)
+{
+ unz64_s* s;
+ uLong uReadThis ;
+ if (file==NULL)
+ return (int)UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+
+ uReadThis = uSizeBuf;
+ if (uReadThis>s->gi.size_comment)
+ uReadThis = s->gi.size_comment;
+
+ if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+
+ if (uReadThis>0)
+ {
+ *szComment='\0';
+ if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
+ return UNZ_ERRNO;
+ }
+
+ if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
+ *(szComment+s->gi.size_comment)='\0';
+ return (int)uReadThis;
+}
+
+/* Additions by RX '2004 */
+extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)
+{
+ unz64_s* s;
+
+ if (file==NULL)
+ return 0; //UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return 0;
+ if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff)
+ if (s->num_file==s->gi.number_entry)
+ return 0;
+ return s->pos_in_central_dir;
+}
+
+extern uLong ZEXPORT unzGetOffset (unzFile file)
+{
+ ZPOS64_T offset64;
+
+ if (file==NULL)
+ return 0; //UNZ_PARAMERROR;
+ offset64 = unzGetOffset64(file);
+ return (uLong)offset64;
+}
+
+extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)
+{
+ unz64_s* s;
+ int err;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+
+ s->pos_in_central_dir = pos;
+ s->num_file = s->gi.number_entry; /* hack */
+ err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+extern int ZEXPORT unzSetOffset (unzFile file, uLong pos)
+{
+ return unzSetOffset64(file,pos);
+}
diff --git a/src/thirdparty/zlib/minizip/unzip.h b/src/thirdparty/zlib/minizip/unzip.h
new file mode 100644
index 000000000..ecb9a58f2
--- /dev/null
+++ b/src/thirdparty/zlib/minizip/unzip.h
@@ -0,0 +1,437 @@
+/* unzip.h -- IO for uncompress .zip files using zlib
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications of Unzip for Zip64
+ Copyright (C) 2007-2008 Even Rouault
+
+ Modifications for Zip64 support on both zip and unzip
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+ ---------------------------------------------------------------------------------
+
+ Condition of use and distribution are the same than zlib :
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ ---------------------------------------------------------------------------------
+
+ Changes
+
+ See header of unzip64.c
+
+*/
+
+#ifndef _unz64_H
+#define _unz64_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _ZLIB_H
+#include "../zlib.h"
+#endif
+
+#ifndef _ZLIBIOAPI_H
+#include "ioapi.h"
+#endif
+
+#ifdef HAVE_BZIP2
+#include "bzlib.h"
+#endif
+
+#define Z_BZIP2ED 12
+
+#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
+/* like the STRICT of WIN32, we define a pointer that cannot be converted
+ from (void*) without cast */
+typedef struct TagunzFile__ { int unused; } unzFile__;
+typedef unzFile__ *unzFile;
+#else
+typedef voidp unzFile;
+#endif
+
+
+#define UNZ_OK (0)
+#define UNZ_END_OF_LIST_OF_FILE (-100)
+#define UNZ_ERRNO (Z_ERRNO)
+#define UNZ_EOF (0)
+#define UNZ_PARAMERROR (-102)
+#define UNZ_BADZIPFILE (-103)
+#define UNZ_INTERNALERROR (-104)
+#define UNZ_CRCERROR (-105)
+
+/* tm_unz contain date/time info */
+typedef struct tm_unz_s
+{
+ uInt tm_sec; /* seconds after the minute - [0,59] */
+ uInt tm_min; /* minutes after the hour - [0,59] */
+ uInt tm_hour; /* hours since midnight - [0,23] */
+ uInt tm_mday; /* day of the month - [1,31] */
+ uInt tm_mon; /* months since January - [0,11] */
+ uInt tm_year; /* years - [1980..2044] */
+} tm_unz;
+
+/* unz_global_info structure contain global data about the ZIPfile
+ These data comes from the end of central dir */
+typedef struct unz_global_info64_s
+{
+ ZPOS64_T number_entry; /* total number of entries in
+ the central dir on this disk */
+ uLong size_comment; /* size of the global comment of the zipfile */
+} unz_global_info64;
+
+typedef struct unz_global_info_s
+{
+ uLong number_entry; /* total number of entries in
+ the central dir on this disk */
+ uLong size_comment; /* size of the global comment of the zipfile */
+} unz_global_info;
+
+/* unz_file_info contain information about a file in the zipfile */
+typedef struct unz_file_info64_s
+{
+ uLong version; /* version made by 2 bytes */
+ uLong version_needed; /* version needed to extract 2 bytes */
+ uLong flag; /* general purpose bit flag 2 bytes */
+ uLong compression_method; /* compression method 2 bytes */
+ uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
+ uLong crc; /* crc-32 4 bytes */
+ ZPOS64_T compressed_size; /* compressed size 8 bytes */
+ ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */
+ uLong size_filename; /* filename length 2 bytes */
+ uLong size_file_extra; /* extra field length 2 bytes */
+ uLong size_file_comment; /* file comment length 2 bytes */
+
+ uLong disk_num_start; /* disk number start 2 bytes */
+ uLong internal_fa; /* internal file attributes 2 bytes */
+ uLong external_fa; /* external file attributes 4 bytes */
+
+ tm_unz tmu_date;
+} unz_file_info64;
+
+typedef struct unz_file_info_s
+{
+ uLong version; /* version made by 2 bytes */
+ uLong version_needed; /* version needed to extract 2 bytes */
+ uLong flag; /* general purpose bit flag 2 bytes */
+ uLong compression_method; /* compression method 2 bytes */
+ uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
+ uLong crc; /* crc-32 4 bytes */
+ uLong compressed_size; /* compressed size 4 bytes */
+ uLong uncompressed_size; /* uncompressed size 4 bytes */
+ uLong size_filename; /* filename length 2 bytes */
+ uLong size_file_extra; /* extra field length 2 bytes */
+ uLong size_file_comment; /* file comment length 2 bytes */
+
+ uLong disk_num_start; /* disk number start 2 bytes */
+ uLong internal_fa; /* internal file attributes 2 bytes */
+ uLong external_fa; /* external file attributes 4 bytes */
+
+ tm_unz tmu_date;
+} unz_file_info;
+
+extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
+ const char* fileName2,
+ int iCaseSensitivity));
+/*
+ Compare two filename (fileName1,fileName2).
+ If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+ If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+ or strcasecmp)
+ If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
+ (like 1 on Unix, 2 on Windows)
+*/
+
+
+extern unzFile ZEXPORT unzOpen OF((const char *path));
+extern unzFile ZEXPORT unzOpen64 OF((const void *path));
+/*
+ Open a Zip file. path contain the full pathname (by example,
+ on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
+ "zlib/zlib113.zip".
+ If the zipfile cannot be opened (file don't exist or in not valid), the
+ return value is NULL.
+ Else, the return value is a unzFile Handle, usable with other function
+ of this unzip package.
+ the "64" function take a const void* pointer, because the path is just the
+ value passed to the open64_file_func callback.
+ Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path
+ is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*
+ does not describe the reality
+*/
+
+
+extern unzFile ZEXPORT unzOpen2 OF((const char *path,
+ zlib_filefunc_def* pzlib_filefunc_def));
+/*
+ Open a Zip file, like unzOpen, but provide a set of file low level API
+ for read/write the zip file (see ioapi.h)
+*/
+
+extern unzFile ZEXPORT unzOpen2_64 OF((const void *path,
+ zlib_filefunc64_def* pzlib_filefunc_def));
+/*
+ Open a Zip file, like unz64Open, but provide a set of file low level API
+ for read/write the zip file (see ioapi.h)
+*/
+
+extern int ZEXPORT unzClose OF((unzFile file));
+/*
+ Close a ZipFile opened with unzOpen.
+ If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
+ these files MUST be closed with unzCloseCurrentFile before call unzClose.
+ return UNZ_OK if there is no problem. */
+
+extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
+ unz_global_info *pglobal_info));
+
+extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,
+ unz_global_info64 *pglobal_info));
+/*
+ Write info about the ZipFile in the *pglobal_info structure.
+ No preparation of the structure is needed
+ return UNZ_OK if there is no problem. */
+
+
+extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
+ char *szComment,
+ uLong uSizeBuf));
+/*
+ Get the global comment string of the ZipFile, in the szComment buffer.
+ uSizeBuf is the size of the szComment buffer.
+ return the number of byte copied or an error code <0
+*/
+
+
+/***************************************************************************/
+/* Unzip package allow you browse the directory of the zipfile */
+
+extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
+/*
+ Set the current file of the zipfile to the first file.
+ return UNZ_OK if there is no problem
+*/
+
+extern int ZEXPORT unzGoToNextFile OF((unzFile file));
+/*
+ Set the current file of the zipfile to the next file.
+ return UNZ_OK if there is no problem
+ return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+*/
+
+extern int ZEXPORT unzLocateFile OF((unzFile file,
+ const char *szFileName,
+ int iCaseSensitivity));
+/*
+ Try locate the file szFileName in the zipfile.
+ For the iCaseSensitivity signification, see unzStringFileNameCompare
+
+ return value :
+ UNZ_OK if the file is found. It becomes the current file.
+ UNZ_END_OF_LIST_OF_FILE if the file is not found
+*/
+
+
+/* ****************************************** */
+/* Ryan supplied functions */
+/* unz_file_info contain information about a file in the zipfile */
+typedef struct unz_file_pos_s
+{
+ uLong pos_in_zip_directory; /* offset in zip file directory */
+ uLong num_of_file; /* # of file */
+} unz_file_pos;
+
+extern int ZEXPORT unzGetFilePos(
+ unzFile file,
+ unz_file_pos* file_pos);
+
+extern int ZEXPORT unzGoToFilePos(
+ unzFile file,
+ unz_file_pos* file_pos);
+
+typedef struct unz64_file_pos_s
+{
+ ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */
+ ZPOS64_T num_of_file; /* # of file */
+} unz64_file_pos;
+
+extern int ZEXPORT unzGetFilePos64(
+ unzFile file,
+ unz64_file_pos* file_pos);
+
+extern int ZEXPORT unzGoToFilePos64(
+ unzFile file,
+ const unz64_file_pos* file_pos);
+
+/* ****************************************** */
+
+extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,
+ unz_file_info64 *pfile_info,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize));
+
+extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
+ unz_file_info *pfile_info,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize));
+/*
+ Get Info about the current file
+ if pfile_info!=NULL, the *pfile_info structure will contain somes info about
+ the current file
+ if szFileName!=NULL, the filemane string will be copied in szFileName
+ (fileNameBufferSize is the size of the buffer)
+ if extraField!=NULL, the extra field information will be copied in extraField
+ (extraFieldBufferSize is the size of the buffer).
+ This is the Central-header version of the extra field
+ if szComment!=NULL, the comment string of the file will be copied in szComment
+ (commentBufferSize is the size of the buffer)
+*/
+
+
+/** Addition for GDAL : START */
+
+extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));
+
+/** Addition for GDAL : END */
+
+
+/***************************************************************************/
+/* for reading the content of the current zipfile, you can open it, read data
+ from it, and close it (you can close it before reading all the file)
+ */
+
+extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
+/*
+ Open for reading data the current file in the zipfile.
+ If there is no error, the return value is UNZ_OK.
+*/
+
+extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
+ const char* password));
+/*
+ Open for reading data the current file in the zipfile.
+ password is a crypting password
+ If there is no error, the return value is UNZ_OK.
+*/
+
+extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
+ int* method,
+ int* level,
+ int raw));
+/*
+ Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+ if raw==1
+ *method will receive method of compression, *level will receive level of
+ compression
+ note : you can set level parameter as NULL (if you did not want known level,
+ but you CANNOT set method parameter as NULL
+*/
+
+extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
+ int* method,
+ int* level,
+ int raw,
+ const char* password));
+/*
+ Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+ if raw==1
+ *method will receive method of compression, *level will receive level of
+ compression
+ note : you can set level parameter as NULL (if you did not want known level,
+ but you CANNOT set method parameter as NULL
+*/
+
+
+extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
+/*
+ Close the file in zip opened with unzOpenCurrentFile
+ Return UNZ_CRCERROR if all the file was read but the CRC is not good
+*/
+
+extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
+ voidp buf,
+ unsigned len));
+/*
+ Read bytes from the current file (opened by unzOpenCurrentFile)
+ buf contain buffer where data must be copied
+ len the size of buf.
+
+ return the number of byte copied if somes bytes are copied
+ return 0 if the end of file was reached
+ return <0 with error code if there is an error
+ (UNZ_ERRNO for IO error, or zLib error for uncompress error)
+*/
+
+extern z_off_t ZEXPORT unztell OF((unzFile file));
+
+extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));
+/*
+ Give the current position in uncompressed data
+*/
+
+extern int ZEXPORT unzeof OF((unzFile file));
+/*
+ return 1 if the end of file was reached, 0 elsewhere
+*/
+
+extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
+ voidp buf,
+ unsigned len));
+/*
+ Read extra field from the current file (opened by unzOpenCurrentFile)
+ This is the local-header version of the extra field (sometimes, there is
+ more info in the local-header version than in the central-header)
+
+ if buf==NULL, it return the size of the local extra field
+
+ if buf!=NULL, len is the size of the buffer, the extra header is copied in
+ buf.
+ the return value is the number of bytes copied in buf, or (if <0)
+ the error code
+*/
+
+/***************************************************************************/
+
+/* Get the current file offset */
+extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file);
+extern uLong ZEXPORT unzGetOffset (unzFile file);
+
+/* Set the current file offset */
+extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos);
+extern int ZEXPORT unzSetOffset (unzFile file, uLong pos);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _unz64_H */
diff --git a/src/thirdparty/zlib/minizip/zip.c b/src/thirdparty/zlib/minizip/zip.c
new file mode 100644
index 000000000..44e88a9cb
--- /dev/null
+++ b/src/thirdparty/zlib/minizip/zip.c
@@ -0,0 +1,2007 @@
+/* zip.c -- IO on .zip files using zlib
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+ Changes
+ Oct-2009 - Mathias Svensson - Remove old C style function prototypes
+ Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives
+ Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions.
+ Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data
+ It is used when recreting zip archive with RAW when deleting items from a zip.
+ ZIP64 data is automatically added to items that needs it, and existing ZIP64 data need to be removed.
+ Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required)
+ Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "zlib.h"
+#include "zip.h"
+
+#ifdef STDC
+# include <stddef.h>
+# include <string.h>
+# include <stdlib.h>
+#endif
+#ifdef NO_ERRNO_H
+ extern int errno;
+#else
+# include <errno.h>
+#endif
+
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+#ifndef VERSIONMADEBY
+# define VERSIONMADEBY (0x0) /* platform depedent */
+#endif
+
+#ifndef Z_BUFSIZE
+#define Z_BUFSIZE (64*1024) //(16384)
+#endif
+
+#ifndef Z_MAXFILENAMEINZIP
+#define Z_MAXFILENAMEINZIP (256)
+#endif
+
+#ifndef ALLOC
+# define ALLOC(size) (malloc(size))
+#endif
+#ifndef TRYFREE
+# define TRYFREE(p) {if (p) free(p);}
+#endif
+
+/*
+#define SIZECENTRALDIRITEM (0x2e)
+#define SIZEZIPLOCALHEADER (0x1e)
+*/
+
+/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
+
+
+// NOT sure that this work on ALL platform
+#define MAKEULONG64(a, b) ((ZPOS64_T)(((unsigned long)(a)) | ((ZPOS64_T)((unsigned long)(b))) << 32))
+
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+
+#ifndef DEF_MEM_LEVEL
+#if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+#else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+#endif
+#endif
+const char zip_copyright[] =" zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
+
+
+#define SIZEDATA_INDATABLOCK (4096-(4*4))
+
+#define LOCALHEADERMAGIC (0x04034b50)
+#define CENTRALHEADERMAGIC (0x02014b50)
+#define ENDHEADERMAGIC (0x06054b50)
+#define ZIP64ENDHEADERMAGIC (0x6064b50)
+#define ZIP64ENDLOCHEADERMAGIC (0x7064b50)
+
+#define FLAG_LOCALHEADER_OFFSET (0x06)
+#define CRC_LOCALHEADER_OFFSET (0x0e)
+
+#define SIZECENTRALHEADER (0x2e) /* 46 */
+
+typedef struct linkedlist_datablock_internal_s
+{
+ struct linkedlist_datablock_internal_s* next_datablock;
+ uLong avail_in_this_block;
+ uLong filled_in_this_block;
+ uLong unused; /* for future use and alignment */
+ unsigned char data[SIZEDATA_INDATABLOCK];
+} linkedlist_datablock_internal;
+
+typedef struct linkedlist_data_s
+{
+ linkedlist_datablock_internal* first_block;
+ linkedlist_datablock_internal* last_block;
+} linkedlist_data;
+
+
+typedef struct
+{
+ z_stream stream; /* zLib stream structure for inflate */
+#ifdef HAVE_BZIP2
+ bz_stream bstream; /* bzLib stream structure for bziped */
+#endif
+
+ int stream_initialised; /* 1 is stream is initialised */
+ uInt pos_in_buffered_data; /* last written byte in buffered_data */
+
+ ZPOS64_T pos_local_header; /* offset of the local header of the file
+ currenty writing */
+ char* central_header; /* central header data for the current file */
+ uLong size_centralExtra;
+ uLong size_centralheader; /* size of the central header for cur file */
+ uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */
+ uLong flag; /* flag of the file currently writing */
+
+ int method; /* compression method of file currenty wr.*/
+ int raw; /* 1 for directly writing raw data */
+ Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/
+ uLong dosDate;
+ uLong crc32;
+ int encrypt;
+ int zip64; /* Add ZIP64 extened information in the extra field */
+ ZPOS64_T pos_zip64extrainfo;
+ ZPOS64_T totalCompressedData;
+ ZPOS64_T totalUncompressedData;
+#ifndef NOCRYPT
+ unsigned long keys[3]; /* keys defining the pseudo-random sequence */
+ const z_crc_t* pcrc_32_tab;
+ int crypt_header_size;
+#endif
+} curfile64_info;
+
+typedef struct
+{
+ zlib_filefunc64_32_def z_filefunc;
+ voidpf filestream; /* io structore of the zipfile */
+ linkedlist_data central_dir;/* datablock with central dir in construction*/
+ int in_opened_file_inzip; /* 1 if a file in the zip is currently writ.*/
+ curfile64_info ci; /* info on the file curretly writing */
+
+ ZPOS64_T begin_pos; /* position of the beginning of the zipfile */
+ ZPOS64_T add_position_when_writing_offset;
+ ZPOS64_T number_entry;
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+ char *globalcomment;
+#endif
+
+} zip64_internal;
+
+
+#ifndef NOCRYPT
+#define INCLUDECRYPTINGCODE_IFCRYPTALLOWED
+#include "crypt.h"
+#endif
+
+local linkedlist_datablock_internal* allocate_new_datablock()
+{
+ linkedlist_datablock_internal* ldi;
+ ldi = (linkedlist_datablock_internal*)
+ ALLOC(sizeof(linkedlist_datablock_internal));
+ if (ldi!=NULL)
+ {
+ ldi->next_datablock = NULL ;
+ ldi->filled_in_this_block = 0 ;
+ ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ;
+ }
+ return ldi;
+}
+
+local void free_datablock(linkedlist_datablock_internal* ldi)
+{
+ while (ldi!=NULL)
+ {
+ linkedlist_datablock_internal* ldinext = ldi->next_datablock;
+ TRYFREE(ldi);
+ ldi = ldinext;
+ }
+}
+
+local void init_linkedlist(linkedlist_data* ll)
+{
+ ll->first_block = ll->last_block = NULL;
+}
+
+local void free_linkedlist(linkedlist_data* ll)
+{
+ free_datablock(ll->first_block);
+ ll->first_block = ll->last_block = NULL;
+}
+
+
+local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)
+{
+ linkedlist_datablock_internal* ldi;
+ const unsigned char* from_copy;
+
+ if (ll==NULL)
+ return ZIP_INTERNALERROR;
+
+ if (ll->last_block == NULL)
+ {
+ ll->first_block = ll->last_block = allocate_new_datablock();
+ if (ll->first_block == NULL)
+ return ZIP_INTERNALERROR;
+ }
+
+ ldi = ll->last_block;
+ from_copy = (unsigned char*)buf;
+
+ while (len>0)
+ {
+ uInt copy_this;
+ uInt i;
+ unsigned char* to_copy;
+
+ if (ldi->avail_in_this_block==0)
+ {
+ ldi->next_datablock = allocate_new_datablock();
+ if (ldi->next_datablock == NULL)
+ return ZIP_INTERNALERROR;
+ ldi = ldi->next_datablock ;
+ ll->last_block = ldi;
+ }
+
+ if (ldi->avail_in_this_block < len)
+ copy_this = (uInt)ldi->avail_in_this_block;
+ else
+ copy_this = (uInt)len;
+
+ to_copy = &(ldi->data[ldi->filled_in_this_block]);
+
+ for (i=0;i<copy_this;i++)
+ *(to_copy+i)=*(from_copy+i);
+
+ ldi->filled_in_this_block += copy_this;
+ ldi->avail_in_this_block -= copy_this;
+ from_copy += copy_this ;
+ len -= copy_this;
+ }
+ return ZIP_OK;
+}
+
+
+
+/****************************************************************************/
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+/* ===========================================================================
+ Inputs a long in LSB order to the given file
+ nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T)
+*/
+
+local int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte));
+local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)
+{
+ unsigned char buf[8];
+ int n;
+ for (n = 0; n < nbByte; n++)
+ {
+ buf[n] = (unsigned char)(x & 0xff);
+ x >>= 8;
+ }
+ if (x != 0)
+ { /* data overflow - hack for ZIP64 (X Roche) */
+ for (n = 0; n < nbByte; n++)
+ {
+ buf[n] = 0xff;
+ }
+ }
+
+ if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
+ return ZIP_ERRNO;
+ else
+ return ZIP_OK;
+}
+
+local void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte));
+local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte)
+{
+ unsigned char* buf=(unsigned char*)dest;
+ int n;
+ for (n = 0; n < nbByte; n++) {
+ buf[n] = (unsigned char)(x & 0xff);
+ x >>= 8;
+ }
+
+ if (x != 0)
+ { /* data overflow - hack for ZIP64 */
+ for (n = 0; n < nbByte; n++)
+ {
+ buf[n] = 0xff;
+ }
+ }
+}
+
+/****************************************************************************/
+
+
+local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm)
+{
+ uLong year = (uLong)ptm->tm_year;
+ if (year>=1980)
+ year-=1980;
+ else if (year>=80)
+ year-=80;
+ return
+ (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
+ ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
+}
+
+
+/****************************************************************************/
+
+local int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi));
+
+local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,voidpf filestream,int* pi)
+{
+ unsigned char c;
+ int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
+ if (err==1)
+ {
+ *pi = (int)c;
+ return ZIP_OK;
+ }
+ else
+ {
+ if (ZERROR64(*pzlib_filefunc_def,filestream))
+ return ZIP_ERRNO;
+ else
+ return ZIP_EOF;
+ }
+}
+
+
+/* ===========================================================================
+ Reads a long in LSB order from the given gz_stream. Sets
+*/
+local int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
+
+local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<8;
+
+ if (err==ZIP_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
+
+local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<8;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<16;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<24;
+
+ if (err==ZIP_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX));
+
+
+local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)
+{
+ ZPOS64_T x;
+ int i = 0;
+ int err;
+
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (ZPOS64_T)i;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<8;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<16;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<24;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<32;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<40;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<48;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<56;
+
+ if (err==ZIP_OK)
+ *pX = x;
+ else
+ *pX = 0;
+
+ return err;
+}
+
+#ifndef BUFREADCOMMENT
+#define BUFREADCOMMENT (0x400)
+#endif
+/*
+ Locate the Central directory of a zipfile (at the end, just before
+ the global comment)
+*/
+local ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+
+local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
+{
+ unsigned char* buf;
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+ ZPOS64_T uPosFound=0;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+ return 0;
+
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ if (uMaxBack>uSizeFile)
+ uMaxBack = uSizeFile;
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+ return 0;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos ;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ uBackRead = uMaxBack;
+ else
+ uBackRead+=BUFREADCOMMENT;
+ uReadPos = uSizeFile-uBackRead ;
+
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+ (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ break;
+
+ if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+ break;
+
+ for (i=(int)uReadSize-3; (i--)>0;)
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+ ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+ {
+ uPosFound = uReadPos+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(buf);
+ return uPosFound;
+}
+
+/*
+Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before
+the global comment)
+*/
+local ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+
+local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
+{
+ unsigned char* buf;
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+ ZPOS64_T uPosFound=0;
+ uLong uL;
+ ZPOS64_T relativeOffset;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+ return 0;
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ if (uMaxBack>uSizeFile)
+ uMaxBack = uSizeFile;
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+ return 0;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ uBackRead = uMaxBack;
+ else
+ uBackRead+=BUFREADCOMMENT;
+ uReadPos = uSizeFile-uBackRead ;
+
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+ (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ break;
+
+ if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+ break;
+
+ for (i=(int)uReadSize-3; (i--)>0;)
+ {
+ // Signature "0x07064b50" Zip64 end of central directory locater
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
+ {
+ uPosFound = uReadPos+i;
+ break;
+ }
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+
+ TRYFREE(buf);
+ if (uPosFound == 0)
+ return 0;
+
+ /* Zip64 end of central directory locator */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return 0;
+
+ /* the signature, already checked */
+ if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+ return 0;
+
+ /* number of the disk with the start of the zip64 end of central directory */
+ if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+ return 0;
+ if (uL != 0)
+ return 0;
+
+ /* relative offset of the zip64 end of central directory record */
+ if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK)
+ return 0;
+
+ /* total number of disks */
+ if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+ return 0;
+ if (uL != 1)
+ return 0;
+
+ /* Goto Zip64 end of central directory record */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return 0;
+
+ /* the signature */
+ if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+ return 0;
+
+ if (uL != 0x06064b50) // signature of 'Zip64 end of central directory'
+ return 0;
+
+ return relativeOffset;
+}
+
+int LoadCentralDirectoryRecord(zip64_internal* pziinit)
+{
+ int err=ZIP_OK;
+ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+
+ ZPOS64_T size_central_dir; /* size of the central directory */
+ ZPOS64_T offset_central_dir; /* offset of start of central directory */
+ ZPOS64_T central_pos;
+ uLong uL;
+
+ uLong number_disk; /* number of the current dist, used for
+ spaning ZIP, unsupported, always 0*/
+ uLong number_disk_with_CD; /* number the the disk with central dir, used
+ for spaning ZIP, unsupported, always 0*/
+ ZPOS64_T number_entry;
+ ZPOS64_T number_entry_CD; /* total number of entries in
+ the central dir
+ (same than number_entry on nospan) */
+ uLong VersionMadeBy;
+ uLong VersionNeeded;
+ uLong size_comment;
+
+ int hasZIP64Record = 0;
+
+ // check first if we find a ZIP64 record
+ central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream);
+ if(central_pos > 0)
+ {
+ hasZIP64Record = 1;
+ }
+ else if(central_pos == 0)
+ {
+ central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream);
+ }
+
+/* disable to allow appending to empty ZIP archive
+ if (central_pos==0)
+ err=ZIP_ERRNO;
+*/
+
+ if(hasZIP64Record)
+ {
+ ZPOS64_T sizeEndOfCentralDirectory;
+ if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0)
+ err=ZIP_ERRNO;
+
+ /* the signature, already checked */
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* size of zip64 end of central directory record */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* version made by */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* version needed to extract */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* number of this disk */
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* number of the disk with the start of the central directory */
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* total number of entries in the central directory on this disk */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* total number of entries in the central directory */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+ err=ZIP_BADZIPFILE;
+
+ /* size of the central directory */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* offset of start of central directory with respect to the
+ starting disk number */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ // TODO..
+ // read the comment from the standard central header.
+ size_comment = 0;
+ }
+ else
+ {
+ // Read End of central Directory info
+ if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=ZIP_ERRNO;
+
+ /* the signature, already checked */
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* number of this disk */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* number of the disk with the start of the central directory */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* total number of entries in the central dir on this disk */
+ number_entry = 0;
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ else
+ number_entry = uL;
+
+ /* total number of entries in the central dir */
+ number_entry_CD = 0;
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ else
+ number_entry_CD = uL;
+
+ if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+ err=ZIP_BADZIPFILE;
+
+ /* size of the central directory */
+ size_central_dir = 0;
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ else
+ size_central_dir = uL;
+
+ /* offset of start of central directory with respect to the starting disk number */
+ offset_central_dir = 0;
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ else
+ offset_central_dir = uL;
+
+
+ /* zipfile global comment length */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ }
+
+ if ((central_pos<offset_central_dir+size_central_dir) &&
+ (err==ZIP_OK))
+ err=ZIP_BADZIPFILE;
+
+ if (err!=ZIP_OK)
+ {
+ ZCLOSE64(pziinit->z_filefunc, pziinit->filestream);
+ return ZIP_ERRNO;
+ }
+
+ if (size_comment>0)
+ {
+ pziinit->globalcomment = (char*)ALLOC(size_comment+1);
+ if (pziinit->globalcomment)
+ {
+ size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment);
+ pziinit->globalcomment[size_comment]=0;
+ }
+ }
+
+ byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir);
+ pziinit->add_position_when_writing_offset = byte_before_the_zipfile;
+
+ {
+ ZPOS64_T size_central_dir_to_read = size_central_dir;
+ size_t buf_size = SIZEDATA_INDATABLOCK;
+ void* buf_read = (void*)ALLOC(buf_size);
+ if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0)
+ err=ZIP_ERRNO;
+
+ while ((size_central_dir_to_read>0) && (err==ZIP_OK))
+ {
+ ZPOS64_T read_this = SIZEDATA_INDATABLOCK;
+ if (read_this > size_central_dir_to_read)
+ read_this = size_central_dir_to_read;
+
+ if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this)
+ err=ZIP_ERRNO;
+
+ if (err==ZIP_OK)
+ err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this);
+
+ size_central_dir_to_read-=read_this;
+ }
+ TRYFREE(buf_read);
+ }
+ pziinit->begin_pos = byte_before_the_zipfile;
+ pziinit->number_entry = number_entry_CD;
+
+ if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0)
+ err=ZIP_ERRNO;
+
+ return err;
+}
+
+
+#endif /* !NO_ADDFILEINEXISTINGZIP*/
+
+
+/************************************************************/
+extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def)
+{
+ zip64_internal ziinit;
+ zip64_internal* zi;
+ int err=ZIP_OK;
+
+ ziinit.z_filefunc.zseek32_file = NULL;
+ ziinit.z_filefunc.ztell32_file = NULL;
+ if (pzlib_filefunc64_32_def==NULL)
+ fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64);
+ else
+ ziinit.z_filefunc = *pzlib_filefunc64_32_def;
+
+ ziinit.filestream = ZOPEN64(ziinit.z_filefunc,
+ pathname,
+ (append == APPEND_STATUS_CREATE) ?
+ (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :
+ (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));
+
+ if (ziinit.filestream == NULL)
+ return NULL;
+
+ if (append == APPEND_STATUS_CREATEAFTER)
+ ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END);
+
+ ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream);
+ ziinit.in_opened_file_inzip = 0;
+ ziinit.ci.stream_initialised = 0;
+ ziinit.number_entry = 0;
+ ziinit.add_position_when_writing_offset = 0;
+ init_linkedlist(&(ziinit.central_dir));
+
+
+
+ zi = (zip64_internal*)ALLOC(sizeof(zip64_internal));
+ if (zi==NULL)
+ {
+ ZCLOSE64(ziinit.z_filefunc,ziinit.filestream);
+ return NULL;
+ }
+
+ /* now we add file in a zipfile */
+# ifndef NO_ADDFILEINEXISTINGZIP
+ ziinit.globalcomment = NULL;
+ if (append == APPEND_STATUS_ADDINZIP)
+ {
+ // Read and Cache Central Directory Records
+ err = LoadCentralDirectoryRecord(&ziinit);
+ }
+
+ if (globalcomment)
+ {
+ *globalcomment = ziinit.globalcomment;
+ }
+# endif /* !NO_ADDFILEINEXISTINGZIP*/
+
+ if (err != ZIP_OK)
+ {
+# ifndef NO_ADDFILEINEXISTINGZIP
+ TRYFREE(ziinit.globalcomment);
+# endif /* !NO_ADDFILEINEXISTINGZIP*/
+ TRYFREE(zi);
+ return NULL;
+ }
+ else
+ {
+ *zi = ziinit;
+ return (zipFile)zi;
+ }
+}
+
+extern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def)
+{
+ if (pzlib_filefunc32_def != NULL)
+ {
+ zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+ fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);
+ return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
+ }
+ else
+ return zipOpen3(pathname, append, globalcomment, NULL);
+}
+
+extern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ if (pzlib_filefunc_def != NULL)
+ {
+ zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+ zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;
+ zlib_filefunc64_32_def_fill.ztell32_file = NULL;
+ zlib_filefunc64_32_def_fill.zseek32_file = NULL;
+ return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
+ }
+ else
+ return zipOpen3(pathname, append, globalcomment, NULL);
+}
+
+
+
+extern zipFile ZEXPORT zipOpen (const char* pathname, int append)
+{
+ return zipOpen3((const void*)pathname,append,NULL,NULL);
+}
+
+extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)
+{
+ return zipOpen3(pathname,append,NULL,NULL);
+}
+
+int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
+{
+ /* write the local header */
+ int err;
+ uInt size_filename = (uInt)strlen(filename);
+ uInt size_extrafield = size_extrafield_local;
+
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4);
+
+ if (err==ZIP_OK)
+ {
+ if(zi->ci.zip64)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */
+ }
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);
+
+ // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */
+ if (err==ZIP_OK)
+ {
+ if(zi->ci.zip64)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */
+ }
+ if (err==ZIP_OK)
+ {
+ if(zi->ci.zip64)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */
+ }
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);
+
+ if(zi->ci.zip64)
+ {
+ size_extrafield += 20;
+ }
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2);
+
+ if ((err==ZIP_OK) && (size_filename > 0))
+ {
+ if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)
+ err = ZIP_ERRNO;
+ }
+
+ if ((err==ZIP_OK) && (size_extrafield_local > 0))
+ {
+ if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local)
+ err = ZIP_ERRNO;
+ }
+
+
+ if ((err==ZIP_OK) && (zi->ci.zip64))
+ {
+ // write the Zip64 extended info
+ short HeaderID = 1;
+ short DataSize = 16;
+ ZPOS64_T CompressedSize = 0;
+ ZPOS64_T UncompressedSize = 0;
+
+ // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
+ zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
+
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
+ }
+
+ return err;
+}
+
+/*
+ NOTE.
+ When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped
+ before calling this function it can be done with zipRemoveExtraInfoBlock
+
+ It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize
+ unnecessary allocations.
+ */
+extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw,
+ int windowBits,int memLevel, int strategy,
+ const char* password, uLong crcForCrypting,
+ uLong versionMadeBy, uLong flagBase, int zip64)
+{
+ zip64_internal* zi;
+ uInt size_filename;
+ uInt size_comment;
+ uInt i;
+ int err = ZIP_OK;
+
+# ifdef NOCRYPT
+ (crcForCrypting);
+ if (password != NULL)
+ return ZIP_PARAMERROR;
+# endif
+
+ if (file == NULL)
+ return ZIP_PARAMERROR;
+
+#ifdef HAVE_BZIP2
+ if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED))
+ return ZIP_PARAMERROR;
+#else
+ if ((method!=0) && (method!=Z_DEFLATED))
+ return ZIP_PARAMERROR;
+#endif
+
+ zi = (zip64_internal*)file;
+
+ if (zi->in_opened_file_inzip == 1)
+ {
+ err = zipCloseFileInZip (file);
+ if (err != ZIP_OK)
+ return err;
+ }
+
+ if (filename==NULL)
+ filename="-";
+
+ if (comment==NULL)
+ size_comment = 0;
+ else
+ size_comment = (uInt)strlen(comment);
+
+ size_filename = (uInt)strlen(filename);
+
+ if (zipfi == NULL)
+ zi->ci.dosDate = 0;
+ else
+ {
+ if (zipfi->dosDate != 0)
+ zi->ci.dosDate = zipfi->dosDate;
+ else
+ zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date);
+ }
+
+ zi->ci.flag = flagBase;
+ if ((level==8) || (level==9))
+ zi->ci.flag |= 2;
+ if (level==2)
+ zi->ci.flag |= 4;
+ if (level==1)
+ zi->ci.flag |= 6;
+ if (password != NULL)
+ zi->ci.flag |= 1;
+
+ zi->ci.crc32 = 0;
+ zi->ci.method = method;
+ zi->ci.encrypt = 0;
+ zi->ci.stream_initialised = 0;
+ zi->ci.pos_in_buffered_data = 0;
+ zi->ci.raw = raw;
+ zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment;
+ zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data
+
+ zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree);
+
+ zi->ci.size_centralExtra = size_extrafield_global;
+ zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);
+ /* version info */
+ zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4);
+ zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/
+ zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/
+ zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/
+ zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
+
+ if (zipfi==NULL)
+ zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);
+
+ if (zipfi==NULL)
+ zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
+
+ if(zi->ci.pos_local_header >= 0xffffffff)
+ zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writing_offset,4);
+
+ for (i=0;i<size_filename;i++)
+ *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
+
+ for (i=0;i<size_extrafield_global;i++)
+ *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =
+ *(((const char*)extrafield_global)+i);
+
+ for (i=0;i<size_comment;i++)
+ *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+
+ size_extrafield_global+i) = *(comment+i);
+ if (zi->ci.central_header == NULL)
+ return ZIP_INTERNALERROR;
+
+ zi->ci.zip64 = zip64;
+ zi->ci.totalCompressedData = 0;
+ zi->ci.totalUncompressedData = 0;
+ zi->ci.pos_zip64extrainfo = 0;
+
+ err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local);
+
+#ifdef HAVE_BZIP2
+ zi->ci.bstream.avail_in = (uInt)0;
+ zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+ zi->ci.bstream.total_in_hi32 = 0;
+ zi->ci.bstream.total_in_lo32 = 0;
+ zi->ci.bstream.total_out_hi32 = 0;
+ zi->ci.bstream.total_out_lo32 = 0;
+#endif
+
+ zi->ci.stream.avail_in = (uInt)0;
+ zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.stream.next_out = zi->ci.buffered_data;
+ zi->ci.stream.total_in = 0;
+ zi->ci.stream.total_out = 0;
+ zi->ci.stream.data_type = Z_BINARY;
+
+#ifdef HAVE_BZIP2
+ if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+#else
+ if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+#endif
+ {
+ if(zi->ci.method == Z_DEFLATED)
+ {
+ zi->ci.stream.zalloc = (alloc_func)0;
+ zi->ci.stream.zfree = (free_func)0;
+ zi->ci.stream.opaque = (voidpf)0;
+
+ if (windowBits>0)
+ windowBits = -windowBits;
+
+ err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
+
+ if (err==Z_OK)
+ zi->ci.stream_initialised = Z_DEFLATED;
+ }
+ else if(zi->ci.method == Z_BZIP2ED)
+ {
+#ifdef HAVE_BZIP2
+ // Init BZip stuff here
+ zi->ci.bstream.bzalloc = 0;
+ zi->ci.bstream.bzfree = 0;
+ zi->ci.bstream.opaque = (voidpf)0;
+
+ err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35);
+ if(err == BZ_OK)
+ zi->ci.stream_initialised = Z_BZIP2ED;
+#endif
+ }
+
+ }
+
+# ifndef NOCRYPT
+ zi->ci.crypt_header_size = 0;
+ if ((err==Z_OK) && (password != NULL))
+ {
+ unsigned char bufHead[RAND_HEAD_LEN];
+ unsigned int sizeHead;
+ zi->ci.encrypt = 1;
+ zi->ci.pcrc_32_tab = get_crc_table();
+ /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/
+
+ sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);
+ zi->ci.crypt_header_size = sizeHead;
+
+ if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)
+ err = ZIP_ERRNO;
+ }
+# endif
+
+ if (err==Z_OK)
+ zi->in_opened_file_inzip = 1;
+ return err;
+}
+
+extern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw,
+ int windowBits,int memLevel, int strategy,
+ const char* password, uLong crcForCrypting,
+ uLong versionMadeBy, uLong flagBase)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ windowBits, memLevel, strategy,
+ password, crcForCrypting, versionMadeBy, flagBase, 0);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw,
+ int windowBits,int memLevel, int strategy,
+ const char* password, uLong crcForCrypting)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ windowBits, memLevel, strategy,
+ password, crcForCrypting, VERSIONMADEBY, 0, 0);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw,
+ int windowBits,int memLevel, int strategy,
+ const char* password, uLong crcForCrypting, int zip64)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ windowBits, memLevel, strategy,
+ password, crcForCrypting, VERSIONMADEBY, 0, zip64);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+ NULL, 0, VERSIONMADEBY, 0, 0);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw, int zip64)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+ NULL, 0, VERSIONMADEBY, 0, zip64);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void*extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int zip64)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, 0,
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+ NULL, 0, VERSIONMADEBY, 0, zip64);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void*extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, 0,
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+ NULL, 0, VERSIONMADEBY, 0, 0);
+}
+
+local int zip64FlushWriteBuffer(zip64_internal* zi)
+{
+ int err=ZIP_OK;
+
+ if (zi->ci.encrypt != 0)
+ {
+#ifndef NOCRYPT
+ uInt i;
+ int t;
+ for (i=0;i<zi->ci.pos_in_buffered_data;i++)
+ zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t);
+#endif
+ }
+
+ if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data)
+ err = ZIP_ERRNO;
+
+ zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data;
+
+#ifdef HAVE_BZIP2
+ if(zi->ci.method == Z_BZIP2ED)
+ {
+ zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32;
+ zi->ci.bstream.total_in_lo32 = 0;
+ zi->ci.bstream.total_in_hi32 = 0;
+ }
+ else
+#endif
+ {
+ zi->ci.totalUncompressedData += zi->ci.stream.total_in;
+ zi->ci.stream.total_in = 0;
+ }
+
+
+ zi->ci.pos_in_buffered_data = 0;
+
+ return err;
+}
+
+extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len)
+{
+ zip64_internal* zi;
+ int err=ZIP_OK;
+
+ if (file == NULL)
+ return ZIP_PARAMERROR;
+ zi = (zip64_internal*)file;
+
+ if (zi->in_opened_file_inzip == 0)
+ return ZIP_PARAMERROR;
+
+ zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len);
+
+#ifdef HAVE_BZIP2
+ if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw))
+ {
+ zi->ci.bstream.next_in = (void*)buf;
+ zi->ci.bstream.avail_in = len;
+ err = BZ_RUN_OK;
+
+ while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0))
+ {
+ if (zi->ci.bstream.avail_out == 0)
+ {
+ if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+ }
+
+
+ if(err != BZ_RUN_OK)
+ break;
+
+ if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+ {
+ uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32;
+// uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32;
+ err=BZ2_bzCompress(&zi->ci.bstream, BZ_RUN);
+
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ;
+ }
+ }
+
+ if(err == BZ_RUN_OK)
+ err = ZIP_OK;
+ }
+ else
+#endif
+ {
+ zi->ci.stream.next_in = (Bytef*)buf;
+ zi->ci.stream.avail_in = len;
+
+ while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
+ {
+ if (zi->ci.stream.avail_out == 0)
+ {
+ if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.stream.next_out = zi->ci.buffered_data;
+ }
+
+
+ if(err != ZIP_OK)
+ break;
+
+ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+ {
+ uLong uTotalOutBefore = zi->ci.stream.total_out;
+ err=deflate(&zi->ci.stream, Z_NO_FLUSH);
+ if(uTotalOutBefore > zi->ci.stream.total_out)
+ {
+ int bBreak = 0;
+ bBreak++;
+ }
+
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
+ }
+ else
+ {
+ uInt copy_this,i;
+ if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)
+ copy_this = zi->ci.stream.avail_in;
+ else
+ copy_this = zi->ci.stream.avail_out;
+
+ for (i = 0; i < copy_this; i++)
+ *(((char*)zi->ci.stream.next_out)+i) =
+ *(((const char*)zi->ci.stream.next_in)+i);
+ {
+ zi->ci.stream.avail_in -= copy_this;
+ zi->ci.stream.avail_out-= copy_this;
+ zi->ci.stream.next_in+= copy_this;
+ zi->ci.stream.next_out+= copy_this;
+ zi->ci.stream.total_in+= copy_this;
+ zi->ci.stream.total_out+= copy_this;
+ zi->ci.pos_in_buffered_data += copy_this;
+ }
+ }
+ }// while(...)
+ }
+
+ return err;
+}
+
+extern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompressed_size, uLong crc32)
+{
+ return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32);
+}
+
+extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32)
+{
+ zip64_internal* zi;
+ ZPOS64_T compressed_size;
+ uLong invalidValue = 0xffffffff;
+ short datasize = 0;
+ int err=ZIP_OK;
+
+ if (file == NULL)
+ return ZIP_PARAMERROR;
+ zi = (zip64_internal*)file;
+
+ if (zi->in_opened_file_inzip == 0)
+ return ZIP_PARAMERROR;
+ zi->ci.stream.avail_in = 0;
+
+ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+ {
+ while (err==ZIP_OK)
+ {
+ uLong uTotalOutBefore;
+ if (zi->ci.stream.avail_out == 0)
+ {
+ if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.stream.next_out = zi->ci.buffered_data;
+ }
+ uTotalOutBefore = zi->ci.stream.total_out;
+ err=deflate(&zi->ci.stream, Z_FINISH);
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
+ }
+ }
+ else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+ {
+#ifdef HAVE_BZIP2
+ err = BZ_FINISH_OK;
+ while (err==BZ_FINISH_OK)
+ {
+ uLong uTotalOutBefore;
+ if (zi->ci.bstream.avail_out == 0)
+ {
+ if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+ }
+ uTotalOutBefore = zi->ci.bstream.total_out_lo32;
+ err=BZ2_bzCompress(&zi->ci.bstream, BZ_FINISH);
+ if(err == BZ_STREAM_END)
+ err = Z_STREAM_END;
+
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore);
+ }
+
+ if(err == BZ_FINISH_OK)
+ err = ZIP_OK;
+#endif
+ }
+
+ if (err==Z_STREAM_END)
+ err=ZIP_OK; /* this is normal */
+
+ if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))
+ {
+ if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ }
+
+ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+ {
+ int tmp_err = deflateEnd(&zi->ci.stream);
+ if (err == ZIP_OK)
+ err = tmp_err;
+ zi->ci.stream_initialised = 0;
+ }
+#ifdef HAVE_BZIP2
+ else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+ {
+ int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream);
+ if (err==ZIP_OK)
+ err = tmperr;
+ zi->ci.stream_initialised = 0;
+ }
+#endif
+
+ if (!zi->ci.raw)
+ {
+ crc32 = (uLong)zi->ci.crc32;
+ uncompressed_size = zi->ci.totalUncompressedData;
+ }
+ compressed_size = zi->ci.totalCompressedData;
+
+# ifndef NOCRYPT
+ compressed_size += zi->ci.crypt_header_size;
+# endif
+
+ // update Current Item crc and sizes,
+ if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff)
+ {
+ /*version Made by*/
+ zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2);
+ /*version needed*/
+ zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2);
+
+ }
+
+ zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/
+
+
+ if(compressed_size >= 0xffffffff)
+ zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/
+
+ /// set internal file attributes field
+ if (zi->ci.stream.data_type == Z_ASCII)
+ zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);
+
+ if(uncompressed_size >= 0xffffffff)
+ zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/
+
+ // Add ZIP64 extra info field for uncompressed size
+ if(uncompressed_size >= 0xffffffff)
+ datasize += 8;
+
+ // Add ZIP64 extra info field for compressed size
+ if(compressed_size >= 0xffffffff)
+ datasize += 8;
+
+ // Add ZIP64 extra info field for relative offset to local file header of current file
+ if(zi->ci.pos_local_header >= 0xffffffff)
+ datasize += 8;
+
+ if(datasize > 0)
+ {
+ char* p = NULL;
+
+ if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree)
+ {
+ // we can not write more data to the buffer that we have room for.
+ return ZIP_BADZIPFILE;
+ }
+
+ p = zi->ci.central_header + zi->ci.size_centralheader;
+
+ // Add Extra Information Header for 'ZIP64 information'
+ zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID
+ p += 2;
+ zip64local_putValue_inmemory(p, datasize, 2); // DataSize
+ p += 2;
+
+ if(uncompressed_size >= 0xffffffff)
+ {
+ zip64local_putValue_inmemory(p, uncompressed_size, 8);
+ p += 8;
+ }
+
+ if(compressed_size >= 0xffffffff)
+ {
+ zip64local_putValue_inmemory(p, compressed_size, 8);
+ p += 8;
+ }
+
+ if(zi->ci.pos_local_header >= 0xffffffff)
+ {
+ zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8);
+ p += 8;
+ }
+
+ // Update how much extra free space we got in the memory buffer
+ // and increase the centralheader size so the new ZIP64 fields are included
+ // ( 4 below is the size of HeaderID and DataSize field )
+ zi->ci.size_centralExtraFree -= datasize + 4;
+ zi->ci.size_centralheader += datasize + 4;
+
+ // Update the extra info size field
+ zi->ci.size_centralExtra += datasize + 4;
+ zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2);
+ }
+
+ if (err==ZIP_OK)
+ err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader);
+
+ free(zi->ci.central_header);
+
+ if (err==ZIP_OK)
+ {
+ // Update the LocalFileHeader with the new values.
+
+ ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err = ZIP_ERRNO;
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
+
+ if(uncompressed_size >= 0xffffffff || compressed_size >= 0xffffffff )
+ {
+ if(zi->ci.pos_zip64extrainfo > 0)
+ {
+ // Update the size in the ZIP64 extended field.
+ if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err = ZIP_ERRNO;
+
+ if (err==ZIP_OK) /* compressed size, unknown */
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8);
+
+ if (err==ZIP_OK) /* uncompressed size, unknown */
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);
+ }
+ else
+ err = ZIP_BADZIPFILE; // Caller passed zip64 = 0, so no room for zip64 info -> fatal
+ }
+ else
+ {
+ if (err==ZIP_OK) /* compressed size, unknown */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
+
+ if (err==ZIP_OK) /* uncompressed size, unknown */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
+ }
+
+ if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err = ZIP_ERRNO;
+ }
+
+ zi->number_entry ++;
+ zi->in_opened_file_inzip = 0;
+
+ return err;
+}
+
+extern int ZEXPORT zipCloseFileInZip (zipFile file)
+{
+ return zipCloseFileInZipRaw (file,0,0);
+}
+
+int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
+{
+ int err = ZIP_OK;
+ ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset;
+
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
+
+ /*num disks*/
+ if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+ /*relative offset*/
+ if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8);
+
+ /*total disks*/ /* Do not support spawning of disk so always say 1 here*/
+ if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
+
+ return err;
+}
+
+int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
+{
+ int err = ZIP_OK;
+
+ uLong Zip64DataSize = 44;
+
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4);
+
+ if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ?
+
+ if (err==ZIP_OK) /* version made by */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+
+ if (err==ZIP_OK) /* version needed */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+
+ if (err==ZIP_OK) /* number of this disk */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+ if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+ if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+
+ if (err==ZIP_OK) /* total number of entries in the central dir */
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+
+ if (err==ZIP_OK) /* size of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8);
+
+ if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
+ {
+ ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
+ }
+ return err;
+}
+int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
+{
+ int err = ZIP_OK;
+
+ /*signature*/
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
+
+ if (err==ZIP_OK) /* number of this disk */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+
+ if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+
+ if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
+ {
+ {
+ if(zi->number_entry >= 0xFFFF)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+ }
+ }
+
+ if (err==ZIP_OK) /* total number of entries in the central dir */
+ {
+ if(zi->number_entry >= 0xFFFF)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+ }
+
+ if (err==ZIP_OK) /* size of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);
+
+ if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
+ {
+ ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
+ if(pos >= 0xffffffff)
+ {
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);
+ }
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writing_offset),4);
+ }
+
+ return err;
+}
+
+int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
+{
+ int err = ZIP_OK;
+ uInt size_global_comment = 0;
+
+ if(global_comment != NULL)
+ size_global_comment = (uInt)strlen(global_comment);
+
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);
+
+ if (err == ZIP_OK && size_global_comment > 0)
+ {
+ if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment)
+ err = ZIP_ERRNO;
+ }
+ return err;
+}
+
+extern int ZEXPORT zipClose (zipFile file, const char* global_comment)
+{
+ zip64_internal* zi;
+ int err = 0;
+ uLong size_centraldir = 0;
+ ZPOS64_T centraldir_pos_inzip;
+ ZPOS64_T pos;
+
+ if (file == NULL)
+ return ZIP_PARAMERROR;
+
+ zi = (zip64_internal*)file;
+
+ if (zi->in_opened_file_inzip == 1)
+ {
+ err = zipCloseFileInZip (file);
+ }
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+ if (global_comment==NULL)
+ global_comment = zi->globalcomment;
+#endif
+
+ centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ if (err==ZIP_OK)
+ {
+ linkedlist_datablock_internal* ldi = zi->central_dir.first_block;
+ while (ldi!=NULL)
+ {
+ if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))
+ {
+ if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block)
+ err = ZIP_ERRNO;
+ }
+
+ size_centraldir += ldi->filled_in_this_block;
+ ldi = ldi->next_datablock;
+ }
+ }
+ free_linkedlist(&(zi->central_dir));
+
+ pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
+ if(pos >= 0xffffffff || zi->number_entry > 0xFFFF)
+ {
+ ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
+ Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+
+ Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos);
+ }
+
+ if (err==ZIP_OK)
+ err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+
+ if(err == ZIP_OK)
+ err = Write_GlobalComment(zi, global_comment);
+
+ if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0)
+ if (err == ZIP_OK)
+ err = ZIP_ERRNO;
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+ TRYFREE(zi->globalcomment);
+#endif
+ TRYFREE(zi);
+
+ return err;
+}
+
+extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader)
+{
+ char* p = pData;
+ int size = 0;
+ char* pNewHeader;
+ char* pTmp;
+ short header;
+ short dataSize;
+
+ int retVal = ZIP_OK;
+
+ if(pData == NULL || *dataLen < 4)
+ return ZIP_PARAMERROR;
+
+ pNewHeader = (char*)ALLOC(*dataLen);
+ pTmp = pNewHeader;
+
+ while(p < (pData + *dataLen))
+ {
+ header = *(short*)p;
+ dataSize = *(((short*)p)+1);
+
+ if( header == sHeader ) // Header found.
+ {
+ p += dataSize + 4; // skip it. do not copy to temp buffer
+ }
+ else
+ {
+ // Extra Info block should not be removed, So copy it to the temp buffer.
+ memcpy(pTmp, p, dataSize + 4);
+ p += dataSize + 4;
+ size += dataSize + 4;
+ }
+
+ }
+
+ if(size < *dataLen)
+ {
+ // clean old extra info block.
+ memset(pData,0, *dataLen);
+
+ // copy the new extra info block over the old
+ if(size > 0)
+ memcpy(pData, pNewHeader, size);
+
+ // set the new extra info size
+ *dataLen = size;
+
+ retVal = ZIP_OK;
+ }
+ else
+ retVal = ZIP_ERRNO;
+
+ TRYFREE(pNewHeader);
+
+ return retVal;
+}
diff --git a/src/thirdparty/zlib/minizip/zip.h b/src/thirdparty/zlib/minizip/zip.h
new file mode 100644
index 000000000..8aaebb623
--- /dev/null
+++ b/src/thirdparty/zlib/minizip/zip.h
@@ -0,0 +1,362 @@
+/* zip.h -- IO on .zip files using zlib
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+ ---------------------------------------------------------------------------
+
+ Condition of use and distribution are the same than zlib :
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ ---------------------------------------------------------------------------
+
+ Changes
+
+ See header of zip.h
+
+*/
+
+#ifndef _zip12_H
+#define _zip12_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//#define HAVE_BZIP2
+
+#ifndef _ZLIB_H
+#include "zlib.h"
+#endif
+
+#ifndef _ZLIBIOAPI_H
+#include "ioapi.h"
+#endif
+
+#ifdef HAVE_BZIP2
+#include "bzlib.h"
+#endif
+
+#define Z_BZIP2ED 12
+
+#if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
+/* like the STRICT of WIN32, we define a pointer that cannot be converted
+ from (void*) without cast */
+typedef struct TagzipFile__ { int unused; } zipFile__;
+typedef zipFile__ *zipFile;
+#else
+typedef voidp zipFile;
+#endif
+
+#define ZIP_OK (0)
+#define ZIP_EOF (0)
+#define ZIP_ERRNO (Z_ERRNO)
+#define ZIP_PARAMERROR (-102)
+#define ZIP_BADZIPFILE (-103)
+#define ZIP_INTERNALERROR (-104)
+
+#ifndef DEF_MEM_LEVEL
+# if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+# else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+# endif
+#endif
+/* default memLevel */
+
+/* tm_zip contain date/time info */
+typedef struct tm_zip_s
+{
+ uInt tm_sec; /* seconds after the minute - [0,59] */
+ uInt tm_min; /* minutes after the hour - [0,59] */
+ uInt tm_hour; /* hours since midnight - [0,23] */
+ uInt tm_mday; /* day of the month - [1,31] */
+ uInt tm_mon; /* months since January - [0,11] */
+ uInt tm_year; /* years - [1980..2044] */
+} tm_zip;
+
+typedef struct
+{
+ tm_zip tmz_date; /* date in understandable format */
+ uLong dosDate; /* if dos_date == 0, tmu_date is used */
+/* uLong flag; */ /* general purpose bit flag 2 bytes */
+
+ uLong internal_fa; /* internal file attributes 2 bytes */
+ uLong external_fa; /* external file attributes 4 bytes */
+} zip_fileinfo;
+
+typedef const char* zipcharpc;
+
+
+#define APPEND_STATUS_CREATE (0)
+#define APPEND_STATUS_CREATEAFTER (1)
+#define APPEND_STATUS_ADDINZIP (2)
+
+extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
+extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
+/*
+ Create a zipfile.
+ pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
+ an Unix computer "zlib/zlib113.zip".
+ if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
+ will be created at the end of the file.
+ (useful if the file contain a self extractor code)
+ if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
+ add files in existing zip (be sure you don't add file that doesn't exist)
+ If the zipfile cannot be opened, the return value is NULL.
+ Else, the return value is a zipFile Handle, usable with other function
+ of this zip package.
+*/
+
+/* Note : there is no delete function into a zipfile.
+ If you want delete file into a zipfile, you must open a zipfile, and create another
+ Of couse, you can use RAW reading and writing to copy the file you did not want delte
+*/
+
+extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
+ int append,
+ zipcharpc* globalcomment,
+ zlib_filefunc_def* pzlib_filefunc_def));
+
+extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
+ int append,
+ zipcharpc* globalcomment,
+ zlib_filefunc64_def* pzlib_filefunc_def));
+
+extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level));
+
+extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int zip64));
+
+/*
+ Open a file in the ZIP for writing.
+ filename : the filename in zip (if NULL, '-' without quote will be used
+ *zipfi contain supplemental information
+ if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
+ contains the extrafield data the the local header
+ if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
+ contains the extrafield data the the local header
+ if comment != NULL, comment contain the comment string
+ method contain the compression method (0 for store, Z_DEFLATED for deflate)
+ level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
+ zip64 is set to 1 if a zip64 extended information block should be added to the local file header.
+ this MUST be '1' if the uncompressed size is >= 0xffffffff.
+
+*/
+
+
+extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw));
+
+
+extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int zip64));
+/*
+ Same than zipOpenNewFileInZip, except if raw=1, we write raw file
+ */
+
+extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int windowBits,
+ int memLevel,
+ int strategy,
+ const char* password,
+ uLong crcForCrypting));
+
+extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int windowBits,
+ int memLevel,
+ int strategy,
+ const char* password,
+ uLong crcForCrypting,
+ int zip64
+ ));
+
+/*
+ Same than zipOpenNewFileInZip2, except
+ windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
+ password : crypting password (NULL for no crypting)
+ crcForCrypting : crc of file to compress (needed for crypting)
+ */
+
+extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int windowBits,
+ int memLevel,
+ int strategy,
+ const char* password,
+ uLong crcForCrypting,
+ uLong versionMadeBy,
+ uLong flagBase
+ ));
+
+
+extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int windowBits,
+ int memLevel,
+ int strategy,
+ const char* password,
+ uLong crcForCrypting,
+ uLong versionMadeBy,
+ uLong flagBase,
+ int zip64
+ ));
+/*
+ Same than zipOpenNewFileInZip4, except
+ versionMadeBy : value for Version made by field
+ flag : value for flag field (compression level info will be added)
+ */
+
+
+extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
+ const void* buf,
+ unsigned len));
+/*
+ Write data in the zipfile
+*/
+
+extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
+/*
+ Close the current file in the zipfile
+*/
+
+extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
+ uLong uncompressed_size,
+ uLong crc32));
+
+extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
+ ZPOS64_T uncompressed_size,
+ uLong crc32));
+
+/*
+ Close the current file in the zipfile, for file opened with
+ parameter raw=1 in zipOpenNewFileInZip2
+ uncompressed_size and crc32 are value for the uncompressed size
+*/
+
+extern int ZEXPORT zipClose OF((zipFile file,
+ const char* global_comment));
+/*
+ Close the zipfile
+*/
+
+
+extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
+/*
+ zipRemoveExtraInfoBlock - Added by Mathias Svensson
+
+ Remove extra information block from a extra information data for the local file header or central directory header
+
+ It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.
+
+ 0x0001 is the signature header for the ZIP64 extra information blocks
+
+ usage.
+ Remove ZIP64 Extra information from a central director extra field data
+ zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);
+
+ Remove ZIP64 Extra information from a Local File Header extra field data
+ zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);
+*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _zip64_H */
diff --git a/src/thirdparty/zlib/trees.c b/src/thirdparty/zlib/trees.c
index 1fd7759ef..50cf4b457 100644
--- a/src/thirdparty/zlib/trees.c
+++ b/src/thirdparty/zlib/trees.c
@@ -1,5 +1,5 @@
/* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2012 Jean-loup Gailly
+ * Copyright (C) 1995-2017 Jean-loup Gailly
* detect_data_type() function provided freely by Cosmin Truta, 2006
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -36,7 +36,7 @@
#include "deflate.h"
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
# include <ctype.h>
#endif
@@ -122,13 +122,13 @@ struct static_tree_desc_s {
int max_length; /* max bit length for the codes */
};
-local static_tree_desc static_l_desc =
+local const static_tree_desc static_l_desc =
{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
-local static_tree_desc static_d_desc =
+local const static_tree_desc static_d_desc =
{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
-local static_tree_desc static_bl_desc =
+local const static_tree_desc static_bl_desc =
{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
/* ===========================================================================
@@ -152,18 +152,16 @@ local int detect_data_type OF((deflate_state *s));
local unsigned bi_reverse OF((unsigned value, int length));
local void bi_windup OF((deflate_state *s));
local void bi_flush OF((deflate_state *s));
-local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
- int header));
#ifdef GEN_TREES_H
local void gen_trees_header OF((void));
#endif
-#ifndef DEBUG
+#ifndef ZLIB_DEBUG
# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
/* Send a code of the given tree. c and tree must not have side effects */
-#else /* DEBUG */
+#else /* !ZLIB_DEBUG */
# define send_code(s, c, tree) \
{ if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
send_bits(s, tree[c].Code, tree[c].Len); }
@@ -182,7 +180,7 @@ local void gen_trees_header OF((void));
* Send a value on a given number of bits.
* IN assertion: length <= 16 and value fits in length bits.
*/
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
local void send_bits OF((deflate_state *s, int value, int length));
local void send_bits(s, value, length)
@@ -208,12 +206,12 @@ local void send_bits(s, value, length)
s->bi_valid += length;
}
}
-#else /* !DEBUG */
+#else /* !ZLIB_DEBUG */
#define send_bits(s, value, length) \
{ int len = length;\
if (s->bi_valid > (int)Buf_size - len) {\
- int val = value;\
+ int val = (int)value;\
s->bi_buf |= (ush)val << s->bi_valid;\
put_short(s, s->bi_buf);\
s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
@@ -223,7 +221,7 @@ local void send_bits(s, value, length)
s->bi_valid += len;\
}\
}
-#endif /* DEBUG */
+#endif /* ZLIB_DEBUG */
/* the arguments must not have side effects */
@@ -317,7 +315,7 @@ local void tr_static_init()
* Genererate the file trees.h describing the static trees.
*/
#ifdef GEN_TREES_H
-# ifndef DEBUG
+# ifndef ZLIB_DEBUG
# include <stdio.h>
# endif
@@ -394,7 +392,7 @@ void ZLIB_INTERNAL _tr_init(s)
s->bi_buf = 0;
s->bi_valid = 0;
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len = 0L;
s->bits_sent = 0L;
#endif
@@ -522,12 +520,12 @@ local void gen_bitlen(s, desc)
xbits = 0;
if (n >= base) xbits = extra[n-base];
f = tree[n].Freq;
- s->opt_len += (ulg)f * (bits + xbits);
- if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+ s->opt_len += (ulg)f * (unsigned)(bits + xbits);
+ if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits);
}
if (overflow == 0) return;
- Trace((stderr,"\nbit length overflow\n"));
+ Tracev((stderr,"\nbit length overflow\n"));
/* This happens for example on obj2 and pic of the Calgary corpus */
/* Find the first bit length which could increase: */
@@ -554,9 +552,8 @@ local void gen_bitlen(s, desc)
m = s->heap[--h];
if (m > max_code) continue;
if ((unsigned) tree[m].Len != (unsigned) bits) {
- Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
- s->opt_len += ((long)bits - (long)tree[m].Len)
- *(long)tree[m].Freq;
+ Tracev((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+ s->opt_len += ((ulg)bits - tree[m].Len) * tree[m].Freq;
tree[m].Len = (ush)bits;
}
n--;
@@ -578,7 +575,7 @@ local void gen_codes (tree, max_code, bl_count)
ushf *bl_count; /* number of codes at each bit length */
{
ush next_code[MAX_BITS+1]; /* next code value for each bit length */
- ush code = 0; /* running code value */
+ unsigned code = 0; /* running code value */
int bits; /* bit index */
int n; /* code index */
@@ -586,7 +583,8 @@ local void gen_codes (tree, max_code, bl_count)
* without bit reversal.
*/
for (bits = 1; bits <= MAX_BITS; bits++) {
- next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+ code = (code + bl_count[bits-1]) << 1;
+ next_code[bits] = (ush)code;
}
/* Check that the bit counts in bl_count are consistent. The last code
* must be all ones.
@@ -599,7 +597,7 @@ local void gen_codes (tree, max_code, bl_count)
int len = tree[n].Len;
if (len == 0) continue;
/* Now reverse the bits */
- tree[n].Code = bi_reverse(next_code[len]++, len);
+ tree[n].Code = (ush)bi_reverse(next_code[len]++, len);
Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
@@ -821,7 +819,7 @@ local int build_bl_tree(s)
if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
}
/* Update opt_len to include the bit length tree and counts */
- s->opt_len += 3*(max_blindex+1) + 5+5+4;
+ s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4;
Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
s->opt_len, s->static_len));
@@ -869,11 +867,17 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
int last; /* one if this is the last block for a file */
{
send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
-#ifdef DEBUG
+ bi_windup(s); /* align on byte boundary */
+ put_short(s, (ush)stored_len);
+ put_short(s, (ush)~stored_len);
+ zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
+ s->pending += stored_len;
+#ifdef ZLIB_DEBUG
s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
s->compressed_len += (stored_len + 4) << 3;
+ s->bits_sent += 2*16;
+ s->bits_sent += stored_len<<3;
#endif
- copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
}
/* ===========================================================================
@@ -894,7 +898,7 @@ void ZLIB_INTERNAL _tr_align(s)
{
send_bits(s, STATIC_TREES<<1, 3);
send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
#endif
bi_flush(s);
@@ -902,7 +906,7 @@ void ZLIB_INTERNAL _tr_align(s)
/* ===========================================================================
* Determine the best encoding for the current block: dynamic trees, static
- * trees or store, and output the encoded block to the zip file.
+ * trees or store, and write out the encoded block.
*/
void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
deflate_state *s;
@@ -974,7 +978,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
send_bits(s, (STATIC_TREES<<1)+last, 3);
compress_block(s, (const ct_data *)static_ltree,
(const ct_data *)static_dtree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 3 + s->static_len;
#endif
} else {
@@ -983,7 +987,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
max_blindex+1);
compress_block(s, (const ct_data *)s->dyn_ltree,
(const ct_data *)s->dyn_dtree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 3 + s->opt_len;
#endif
}
@@ -995,7 +999,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
if (last) {
bi_windup(s);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 7; /* align on byte boundary */
#endif
}
@@ -1090,7 +1094,7 @@ local void compress_block(s, ltree, dtree)
send_code(s, code, dtree); /* send the distance code */
extra = extra_dbits[code];
if (extra != 0) {
- dist -= base_dist[code];
+ dist -= (unsigned)base_dist[code];
send_bits(s, dist, extra); /* send the extra distance bits */
}
} /* literal or match pair ? */
@@ -1193,34 +1197,7 @@ local void bi_windup(s)
}
s->bi_buf = 0;
s->bi_valid = 0;
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->bits_sent = (s->bits_sent+7) & ~7;
#endif
}
-
-/* ===========================================================================
- * Copy a stored block, storing first the length and its
- * one's complement if requested.
- */
-local void copy_block(s, buf, len, header)
- deflate_state *s;
- charf *buf; /* the input data */
- unsigned len; /* its length */
- int header; /* true if block header must be written */
-{
- bi_windup(s); /* align on byte boundary */
-
- if (header) {
- put_short(s, (ush)len);
- put_short(s, (ush)~len);
-#ifdef DEBUG
- s->bits_sent += 2*16;
-#endif
- }
-#ifdef DEBUG
- s->bits_sent += (ulg)len<<3;
-#endif
- while (len--) {
- put_byte(s, *buf++);
- }
-}
diff --git a/src/thirdparty/zlib/uncompr.c b/src/thirdparty/zlib/uncompr.c
index 242e9493d..f03a1a865 100644
--- a/src/thirdparty/zlib/uncompr.c
+++ b/src/thirdparty/zlib/uncompr.c
@@ -1,5 +1,5 @@
/* uncompr.c -- decompress a memory buffer
- * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,51 +9,85 @@
#include "zlib.h"
/* ===========================================================================
- Decompresses the source buffer into the destination buffer. sourceLen is
- the byte length of the source buffer. Upon entry, destLen is the total
- size of the destination buffer, which must be large enough to hold the
- entire uncompressed data. (The size of the uncompressed data must have
- been saved previously by the compressor and transmitted to the decompressor
- by some mechanism outside the scope of this compression library.)
- Upon exit, destLen is the actual size of the compressed buffer.
-
- uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if there was not enough room in the output
- buffer, or Z_DATA_ERROR if the input data was corrupted.
+ Decompresses the source buffer into the destination buffer. *sourceLen is
+ the byte length of the source buffer. Upon entry, *destLen is the total size
+ of the destination buffer, which must be large enough to hold the entire
+ uncompressed data. (The size of the uncompressed data must have been saved
+ previously by the compressor and transmitted to the decompressor by some
+ mechanism outside the scope of this compression library.) Upon exit,
+ *destLen is the size of the decompressed data and *sourceLen is the number
+ of source bytes consumed. Upon return, source + *sourceLen points to the
+ first unused input byte.
+
+ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_BUF_ERROR if there was not enough room in the output buffer, or
+ Z_DATA_ERROR if the input data was corrupted, including if the input data is
+ an incomplete zlib stream.
*/
-int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+int ZEXPORT uncompress2 (dest, destLen, source, sourceLen)
Bytef *dest;
uLongf *destLen;
const Bytef *source;
- uLong sourceLen;
+ uLong *sourceLen;
{
z_stream stream;
int err;
+ const uInt max = (uInt)-1;
+ uLong len, left;
+ Byte buf[1]; /* for detection of incomplete stream when *destLen == 0 */
- stream.next_in = (z_const Bytef *)source;
- stream.avail_in = (uInt)sourceLen;
- /* Check for source > 64K on 16-bit machine: */
- if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
- stream.next_out = dest;
- stream.avail_out = (uInt)*destLen;
- if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+ len = *sourceLen;
+ if (*destLen) {
+ left = *destLen;
+ *destLen = 0;
+ }
+ else {
+ left = 1;
+ dest = buf;
+ }
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = 0;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
+ stream.opaque = (voidpf)0;
err = inflateInit(&stream);
if (err != Z_OK) return err;
- err = inflate(&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- inflateEnd(&stream);
- if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
- return Z_DATA_ERROR;
- return err;
- }
- *destLen = stream.total_out;
+ stream.next_out = dest;
+ stream.avail_out = 0;
- err = inflateEnd(&stream);
- return err;
+ do {
+ if (stream.avail_out == 0) {
+ stream.avail_out = left > (uLong)max ? max : (uInt)left;
+ left -= stream.avail_out;
+ }
+ if (stream.avail_in == 0) {
+ stream.avail_in = len > (uLong)max ? max : (uInt)len;
+ len -= stream.avail_in;
+ }
+ err = inflate(&stream, Z_NO_FLUSH);
+ } while (err == Z_OK);
+
+ *sourceLen -= len + stream.avail_in;
+ if (dest != buf)
+ *destLen = stream.total_out;
+ else if (stream.total_out && err == Z_BUF_ERROR)
+ left = 1;
+
+ inflateEnd(&stream);
+ return err == Z_STREAM_END ? Z_OK :
+ err == Z_NEED_DICT ? Z_DATA_ERROR :
+ err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR :
+ err;
+}
+
+int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+{
+ return uncompress2(dest, destLen, source, &sourceLen);
}
diff --git a/src/thirdparty/zlib/zconf.h b/src/thirdparty/zlib/zconf.h
index 9987a7755..5e1d68a00 100644
--- a/src/thirdparty/zlib/zconf.h
+++ b/src/thirdparty/zlib/zconf.h
@@ -1,5 +1,5 @@
/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -17,7 +17,7 @@
#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
# define Z_PREFIX_SET
-/* all linked symbols */
+/* all linked symbols and init macros */
# define _dist_code z__dist_code
# define _length_code z__length_code
# define _tr_align z__tr_align
@@ -29,6 +29,7 @@
# define adler32 z_adler32
# define adler32_combine z_adler32_combine
# define adler32_combine64 z_adler32_combine64
+# define adler32_z z_adler32_z
# ifndef Z_SOLO
# define compress z_compress
# define compress2 z_compress2
@@ -37,10 +38,14 @@
# define crc32 z_crc32
# define crc32_combine z_crc32_combine
# define crc32_combine64 z_crc32_combine64
+# define crc32_z z_crc32_z
# define deflate z_deflate
# define deflateBound z_deflateBound
# define deflateCopy z_deflateCopy
# define deflateEnd z_deflateEnd
+# define deflateGetDictionary z_deflateGetDictionary
+# define deflateInit z_deflateInit
+# define deflateInit2 z_deflateInit2
# define deflateInit2_ z_deflateInit2_
# define deflateInit_ z_deflateInit_
# define deflateParams z_deflateParams
@@ -67,6 +72,8 @@
# define gzeof z_gzeof
# define gzerror z_gzerror
# define gzflush z_gzflush
+# define gzfread z_gzfread
+# define gzfwrite z_gzfwrite
# define gzgetc z_gzgetc
# define gzgetc_ z_gzgetc_
# define gzgets z_gzgets
@@ -78,7 +85,6 @@
# define gzopen_w z_gzopen_w
# endif
# define gzprintf z_gzprintf
-# define gzvprintf z_gzvprintf
# define gzputc z_gzputc
# define gzputs z_gzputs
# define gzread z_gzread
@@ -89,32 +95,39 @@
# define gztell z_gztell
# define gztell64 z_gztell64
# define gzungetc z_gzungetc
+# define gzvprintf z_gzvprintf
# define gzwrite z_gzwrite
# endif
# define inflate z_inflate
# define inflateBack z_inflateBack
# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit z_inflateBackInit
# define inflateBackInit_ z_inflateBackInit_
+# define inflateCodesUsed z_inflateCodesUsed
# define inflateCopy z_inflateCopy
# define inflateEnd z_inflateEnd
+# define inflateGetDictionary z_inflateGetDictionary
# define inflateGetHeader z_inflateGetHeader
+# define inflateInit z_inflateInit
+# define inflateInit2 z_inflateInit2
# define inflateInit2_ z_inflateInit2_
# define inflateInit_ z_inflateInit_
# define inflateMark z_inflateMark
# define inflatePrime z_inflatePrime
# define inflateReset z_inflateReset
# define inflateReset2 z_inflateReset2
+# define inflateResetKeep z_inflateResetKeep
# define inflateSetDictionary z_inflateSetDictionary
-# define inflateGetDictionary z_inflateGetDictionary
# define inflateSync z_inflateSync
# define inflateSyncPoint z_inflateSyncPoint
# define inflateUndermine z_inflateUndermine
-# define inflateResetKeep z_inflateResetKeep
+# define inflateValidate z_inflateValidate
# define inflate_copyright z_inflate_copyright
# define inflate_fast z_inflate_fast
# define inflate_table z_inflate_table
# ifndef Z_SOLO
# define uncompress z_uncompress
+# define uncompress2 z_uncompress2
# endif
# define zError z_zError
# ifndef Z_SOLO
@@ -224,9 +237,19 @@
# define z_const
#endif
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-# define NO_DUMMY_DECL
+#ifdef Z_SOLO
+ typedef unsigned long z_size_t;
+#else
+# define z_longlong long long
+# if defined(NO_SIZE_T)
+ typedef unsigned NO_SIZE_T z_size_t;
+# elif defined(STDC)
+# include <stddef.h>
+ typedef size_t z_size_t;
+# else
+ typedef unsigned long z_size_t;
+# endif
+# undef z_longlong
#endif
/* Maximum value for memLevel in deflateInit2 */
@@ -256,7 +279,7 @@
Of course this will generally degrade compression (there's no free lunch).
The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
for small objects.
*/
diff --git a/src/thirdparty/zlib/zlib.h b/src/thirdparty/zlib/zlib.h
index 3e0c7672a..f09cdaf1e 100644
--- a/src/thirdparty/zlib/zlib.h
+++ b/src/thirdparty/zlib/zlib.h
@@ -1,7 +1,7 @@
/* zlib.h -- interface of the 'zlib' general purpose compression library
- version 1.2.8, April 28th, 2013
+ version 1.2.11, January 15th, 2017
- Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -37,11 +37,11 @@
extern "C" {
#endif
-#define ZLIB_VERSION "1.2.8"
-#define ZLIB_VERNUM 0x1280
+#define ZLIB_VERSION "1.2.11"
+#define ZLIB_VERNUM 0x12b0
#define ZLIB_VER_MAJOR 1
#define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 8
+#define ZLIB_VER_REVISION 11
#define ZLIB_VER_SUBREVISION 0
/*
@@ -65,7 +65,8 @@ extern "C" {
with "gz". The gzip format is different from the zlib format. gzip is a
gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
- This library can optionally read and write gzip streams in memory as well.
+ This library can optionally read and write gzip and raw deflate streams in
+ memory as well.
The zlib format was designed to be compact and fast for use in memory
and on communications channels. The gzip format was designed for single-
@@ -74,7 +75,7 @@ extern "C" {
The library does not install any signal handler. The decoder checks
the consistency of the compressed data, so the library should never crash
- even in case of corrupted input.
+ even in the case of corrupted input.
*/
typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
@@ -87,7 +88,7 @@ typedef struct z_stream_s {
uInt avail_in; /* number of bytes available at next_in */
uLong total_in; /* total number of input bytes read so far */
- Bytef *next_out; /* next output byte should be put there */
+ Bytef *next_out; /* next output byte will go here */
uInt avail_out; /* remaining free space at next_out */
uLong total_out; /* total number of bytes output so far */
@@ -98,8 +99,9 @@ typedef struct z_stream_s {
free_func zfree; /* used to free the internal state */
voidpf opaque; /* private data object passed to zalloc and zfree */
- int data_type; /* best guess about the data type: binary or text */
- uLong adler; /* adler32 value of the uncompressed data */
+ int data_type; /* best guess about the data type: binary or text
+ for deflate, or the decoding state for inflate */
+ uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */
uLong reserved; /* reserved for future use */
} z_stream;
@@ -142,7 +144,9 @@ typedef gz_header FAR *gz_headerp;
zalloc must return Z_NULL if there is not enough memory for the object.
If zlib is used in a multi-threaded application, zalloc and zfree must be
- thread safe.
+ thread safe. In that case, zlib is thread-safe. When zalloc and zfree are
+ Z_NULL on entry to the initialization function, they are set to internal
+ routines that use the standard library functions malloc() and free().
On 16-bit systems, the functions zalloc and zfree must be able to allocate
exactly 65536 bytes, but will not be required to allocate more than this if
@@ -155,7 +159,7 @@ typedef gz_header FAR *gz_headerp;
The fields total_in and total_out can be used for statistics or progress
reports. After compression, total_in holds the total size of the
- uncompressed data and may be saved for use in the decompressor (particularly
+ uncompressed data and may be saved for use by the decompressor (particularly
if the decompressor wants to decompress everything in a single step).
*/
@@ -200,7 +204,7 @@ typedef gz_header FAR *gz_headerp;
#define Z_TEXT 1
#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */
#define Z_UNKNOWN 2
-/* Possible values of the data_type field (though see inflate()) */
+/* Possible values of the data_type field for deflate() */
#define Z_DEFLATED 8
/* The deflate compression method (the only one supported in this version) */
@@ -258,11 +262,11 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
enough room in the output buffer), next_in and avail_in are updated and
processing will resume at this point for the next call of deflate().
- - Provide more output starting at next_out and update next_out and avail_out
+ - Generate more output starting at next_out and update next_out and avail_out
accordingly. This action is forced if the parameter flush is non zero.
Forcing flush frequently degrades the compression ratio, so this parameter
- should be set only when necessary (in interactive applications). Some
- output may be provided even if flush is not set.
+ should be set only when necessary. Some output may be provided even if
+ flush is zero.
Before the call of deflate(), the application should ensure that at least
one of the actions is possible, by providing more input and/or consuming more
@@ -271,7 +275,9 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
output when it wants, for example when the output buffer is full (avail_out
== 0), or after each call of deflate(). If deflate returns Z_OK and with
zero avail_out, it must be called again after making room in the output
- buffer because there might be more output pending.
+ buffer because there might be more output pending. See deflatePending(),
+ which can be used if desired to determine whether or not there is more ouput
+ in that case.
Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
decide how much data to accumulate before producing output, in order to
@@ -292,8 +298,8 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
This completes the current deflate block and follows it with an empty fixed
codes block that is 10 bits long. This assures that enough bytes are output
- in order for the decompressor to finish the block before the empty fixed code
- block.
+ in order for the decompressor to finish the block before the empty fixed
+ codes block.
If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
@@ -319,34 +325,38 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
If the parameter flush is set to Z_FINISH, pending input is processed,
pending output is flushed and deflate returns with Z_STREAM_END if there was
- enough output space; if deflate returns with Z_OK, this function must be
- called again with Z_FINISH and more output space (updated avail_out) but no
- more input data, until it returns with Z_STREAM_END or an error. After
- deflate has returned Z_STREAM_END, the only possible operations on the stream
- are deflateReset or deflateEnd.
-
- Z_FINISH can be used immediately after deflateInit if all the compression
- is to be done in a single step. In this case, avail_out must be at least the
- value returned by deflateBound (see below). Then deflate is guaranteed to
- return Z_STREAM_END. If not enough output space is provided, deflate will
- not return Z_STREAM_END, and it must be called again as described above.
-
- deflate() sets strm->adler to the adler32 checksum of all input read
- so far (that is, total_in bytes).
+ enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this
+ function must be called again with Z_FINISH and more output space (updated
+ avail_out) but no more input data, until it returns with Z_STREAM_END or an
+ error. After deflate has returned Z_STREAM_END, the only possible operations
+ on the stream are deflateReset or deflateEnd.
+
+ Z_FINISH can be used in the first deflate call after deflateInit if all the
+ compression is to be done in a single step. In order to complete in one
+ call, avail_out must be at least the value returned by deflateBound (see
+ below). Then deflate is guaranteed to return Z_STREAM_END. If not enough
+ output space is provided, deflate will not return Z_STREAM_END, and it must
+ be called again as described above.
+
+ deflate() sets strm->adler to the Adler-32 checksum of all input read
+ so far (that is, total_in bytes). If a gzip stream is being generated, then
+ strm->adler will be the CRC-32 checksum of the input read so far. (See
+ deflateInit2 below.)
deflate() may update strm->data_type if it can make a good guess about
- the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered
- binary. This field is only for information purposes and does not affect the
- compression algorithm in any manner.
+ the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is
+ considered binary. This field is only for information purposes and does not
+ affect the compression algorithm in any manner.
deflate() returns Z_OK if some progress has been made (more input
processed or more output produced), Z_STREAM_END if all input has been
consumed and all output has been produced (only when flush is set to
Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
- if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
- (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not
- fatal, and deflate() can be called again with more input and more output
- space to continue compressing.
+ if next_in or next_out was Z_NULL or the state was inadvertently written over
+ by the application), or Z_BUF_ERROR if no progress is possible (for example
+ avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and
+ deflate() can be called again with more input and more output space to
+ continue compressing.
*/
@@ -369,23 +379,21 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
Initializes the internal stream state for decompression. The fields
next_in, avail_in, zalloc, zfree and opaque must be initialized before by
- the caller. If next_in is not Z_NULL and avail_in is large enough (the
- exact value depends on the compression method), inflateInit determines the
- compression method from the zlib header and allocates all data structures
- accordingly; otherwise the allocation will be deferred to the first call of
- inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
- use default allocation functions.
+ the caller. In the current version of inflate, the provided input is not
+ read or consumed. The allocation of a sliding window will be deferred to
+ the first call of inflate (if the decompression does not complete on the
+ first call). If zalloc and zfree are set to Z_NULL, inflateInit updates
+ them to use default allocation functions.
inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
version assumed by the caller, or Z_STREAM_ERROR if the parameters are
invalid, such as a null pointer to the structure. msg is set to null if
- there is no error message. inflateInit does not perform any decompression
- apart from possibly reading the zlib header if present: actual decompression
- will be done by inflate(). (So next_in and avail_in may be modified, but
- next_out and avail_out are unused and unchanged.) The current implementation
- of inflateInit() does not process any header information -- that is deferred
- until inflate() is called.
+ there is no error message. inflateInit does not perform any decompression.
+ Actual decompression will be done by inflate(). So next_in, and avail_in,
+ next_out, and avail_out are unused and unchanged. The current
+ implementation of inflateInit() does not process any header information --
+ that is deferred until inflate() is called.
*/
@@ -401,17 +409,20 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
- Decompress more input starting at next_in and update next_in and avail_in
accordingly. If not all input can be processed (because there is not
- enough room in the output buffer), next_in is updated and processing will
- resume at this point for the next call of inflate().
+ enough room in the output buffer), then next_in and avail_in are updated
+ accordingly, and processing will resume at this point for the next call of
+ inflate().
- - Provide more output starting at next_out and update next_out and avail_out
+ - Generate more output starting at next_out and update next_out and avail_out
accordingly. inflate() provides as much output as possible, until there is
no more input data or no more space in the output buffer (see below about
the flush parameter).
Before the call of inflate(), the application should ensure that at least
one of the actions is possible, by providing more input and/or consuming more
- output, and updating the next_* and avail_* values accordingly. The
+ output, and updating the next_* and avail_* values accordingly. If the
+ caller of inflate() does not provide both available input and available
+ output space, it is possible that there will be no progress made. The
application can consume the uncompressed output when it wants, for example
when the output buffer is full (avail_out == 0), or after each call of
inflate(). If inflate returns Z_OK and with zero avail_out, it must be
@@ -428,7 +439,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
gets to the end of that block, or when it runs out of data.
The Z_BLOCK option assists in appending to or combining deflate streams.
- Also to assist in this, on return inflate() will set strm->data_type to the
+ To assist in this, on return inflate() always sets strm->data_type to the
number of unused bits in the last byte taken from strm->next_in, plus 64 if
inflate() is currently decoding the last block in the deflate stream, plus
128 if inflate() returned immediately after decoding an end-of-block code or
@@ -454,7 +465,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
this case all pending input is processed and all pending output is flushed;
avail_out must be large enough to hold all of the uncompressed data for the
operation to complete. (The size of the uncompressed data may have been
- saved by the compressor for this purpose.) The use of Z_FINISH is not
+ saved by the compressor for this purpose.) The use of Z_FINISH is not
required to perform an inflation in one step. However it may be used to
inform inflate that a faster approach can be used for the single inflate()
call. Z_FINISH also informs inflate to not maintain a sliding window if the
@@ -476,32 +487,33 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
strm->adler to the Adler-32 checksum of all output produced so far (that is,
total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
- below. At the end of the stream, inflate() checks that its computed adler32
+ below. At the end of the stream, inflate() checks that its computed Adler-32
checksum is equal to that saved by the compressor and returns Z_STREAM_END
only if the checksum is correct.
inflate() can decompress and check either zlib-wrapped or gzip-wrapped
deflate data. The header type is detected automatically, if requested when
initializing with inflateInit2(). Any information contained in the gzip
- header is not retained, so applications that need that information should
- instead use raw inflate, see inflateInit2() below, or inflateBack() and
- perform their own processing of the gzip header and trailer. When processing
+ header is not retained unless inflateGetHeader() is used. When processing
gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
- producted so far. The CRC-32 is checked against the gzip trailer.
+ produced so far. The CRC-32 is checked against the gzip trailer, as is the
+ uncompressed length, modulo 2^32.
inflate() returns Z_OK if some progress has been made (more input processed
or more output produced), Z_STREAM_END if the end of the compressed data has
been reached and all uncompressed output has been produced, Z_NEED_DICT if a
preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
corrupted (input stream not conforming to the zlib format or incorrect check
- value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
- next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
- Z_BUF_ERROR if no progress is possible or if there was not enough room in the
- output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
+ value, in which case strm->msg points to a string with a more specific
+ error), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+ next_in or next_out was Z_NULL, or the state was inadvertently written over
+ by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR
+ if no progress was possible or if there was not enough room in the output
+ buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
inflate() can be called again with more input and more output space to
continue decompressing. If Z_DATA_ERROR is returned, the application may
then call inflateSync() to look for a good compression block if a partial
- recovery of the data is desired.
+ recovery of the data is to be attempted.
*/
@@ -511,9 +523,8 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
This function discards any unprocessed input and does not flush any pending
output.
- inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
- was inconsistent. In the error case, msg may be set but then points to a
- static string (which must not be deallocated).
+ inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state
+ was inconsistent.
*/
@@ -544,16 +555,29 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
compression at the expense of memory usage. The default value is 15 if
deflateInit is used instead.
+ For the current implementation of deflate(), a windowBits value of 8 (a
+ window size of 256 bytes) is not supported. As a result, a request for 8
+ will result in 9 (a 512-byte window). In that case, providing 8 to
+ inflateInit2() will result in an error when the zlib header with 9 is
+ checked against the initialization of inflate(). The remedy is to not use 8
+ with deflateInit2() with this initialization, or at least in that case use 9
+ with inflateInit2().
+
windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
determines the window size. deflate() will then generate raw deflate data
- with no zlib header or trailer, and will not compute an adler32 check value.
+ with no zlib header or trailer, and will not compute a check value.
windowBits can also be greater than 15 for optional gzip encoding. Add
16 to windowBits to write a simple gzip header and trailer around the
compressed data instead of a zlib wrapper. The gzip header will have no
file name, no extra data, no comment, no modification time (set to zero), no
- header crc, and the operating system will be set to 255 (unknown). If a
- gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+ header crc, and the operating system will be set to the appropriate value,
+ if the operating system was determined at compile time. If a gzip stream is
+ being written, strm->adler is a CRC-32 instead of an Adler-32.
+
+ For raw deflate or gzip encoding, a request for a 256-byte window is
+ rejected as invalid, since only the zlib header provides a means of
+ transmitting the window size to the decompressor.
The memLevel parameter specifies how much memory should be allocated
for the internal compression state. memLevel=1 uses minimum memory but is
@@ -614,12 +638,12 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
addition, the current implementation of deflate will use at most the window
size minus 262 bytes of the provided dictionary.
- Upon return of this function, strm->adler is set to the adler32 value
+ Upon return of this function, strm->adler is set to the Adler-32 value
of the dictionary; the decompressor may later use this value to determine
- which dictionary has been used by the compressor. (The adler32 value
+ which dictionary has been used by the compressor. (The Adler-32 value
applies to the whole dictionary even if only a subset of the dictionary is
actually used by the compressor.) If a raw deflate was requested, then the
- adler32 value is not computed and strm->adler is not set.
+ Adler-32 value is not computed and strm->adler is not set.
deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
@@ -628,6 +652,28 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
not perform any compression: this will be done by deflate().
*/
+ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm,
+ Bytef *dictionary,
+ uInt *dictLength));
+/*
+ Returns the sliding dictionary being maintained by deflate. dictLength is
+ set to the number of bytes in the dictionary, and that many bytes are copied
+ to dictionary. dictionary must have enough space, where 32768 bytes is
+ always enough. If deflateGetDictionary() is called with dictionary equal to
+ Z_NULL, then only the dictionary length is returned, and nothing is copied.
+ Similary, if dictLength is Z_NULL, then it is not set.
+
+ deflateGetDictionary() may return a length less than the window size, even
+ when more than the window size in input has been provided. It may return up
+ to 258 bytes less in that case, due to how zlib's implementation of deflate
+ manages the sliding window and lookahead for matches, where matches can be
+ up to 258 bytes long. If the application needs the last window-size bytes of
+ input, then that would need to be saved by the application outside of zlib.
+
+ deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+ stream state is inconsistent.
+*/
+
ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
z_streamp source));
/*
@@ -648,10 +694,10 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
/*
- This function is equivalent to deflateEnd followed by deflateInit,
- but does not free and reallocate all the internal compression state. The
- stream will keep the same compression level and any other attributes that
- may have been set by deflateInit2.
+ This function is equivalent to deflateEnd followed by deflateInit, but
+ does not free and reallocate the internal compression state. The stream
+ will leave the compression level and any other attributes that may have been
+ set unchanged.
deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
stream state was inconsistent (such as zalloc or state being Z_NULL).
@@ -662,20 +708,36 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
int strategy));
/*
Dynamically update the compression level and compression strategy. The
- interpretation of level and strategy is as in deflateInit2. This can be
+ interpretation of level and strategy is as in deflateInit2(). This can be
used to switch between compression and straight copy of the input data, or
to switch to a different kind of input data requiring a different strategy.
- If the compression level is changed, the input available so far is
- compressed with the old level (and may be flushed); the new level will take
- effect only at the next call of deflate().
-
- Before the call of deflateParams, the stream state must be set as for
- a call of deflate(), since the currently available input may have to be
- compressed and flushed. In particular, strm->avail_out must be non-zero.
-
- deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
- stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
- strm->avail_out was zero.
+ If the compression approach (which is a function of the level) or the
+ strategy is changed, and if any input has been consumed in a previous
+ deflate() call, then the input available so far is compressed with the old
+ level and strategy using deflate(strm, Z_BLOCK). There are three approaches
+ for the compression levels 0, 1..3, and 4..9 respectively. The new level
+ and strategy will take effect at the next call of deflate().
+
+ If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
+ not have enough output space to complete, then the parameter change will not
+ take effect. In this case, deflateParams() can be called again with the
+ same parameters and more output space to try again.
+
+ In order to assure a change in the parameters on the first try, the
+ deflate stream should be flushed using deflate() with Z_BLOCK or other flush
+ request until strm.avail_out is not zero, before calling deflateParams().
+ Then no more input data should be provided before the deflateParams() call.
+ If this is done, the old level and strategy will be applied to the data
+ compressed before deflateParams(), and the new level and strategy will be
+ applied to the the data compressed after deflateParams().
+
+ deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream
+ state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if
+ there was not enough output space to complete the compression of the
+ available input data before a change in the strategy or approach. Note that
+ in the case of a Z_BUF_ERROR, the parameters are not changed. A return
+ value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be
+ retried with more output space.
*/
ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
@@ -793,7 +855,7 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
is for use with other formats that use the deflate compressed data format
such as zip. Those formats provide their own check values. If a custom
format is developed using the raw deflate format for compressed data, it is
- recommended that a check value such as an adler32 or a crc32 be applied to
+ recommended that a check value such as an Adler-32 or a CRC-32 be applied to
the uncompressed data as is done in the zlib, gzip, and zip formats. For
most applications, the zlib format should be used as is. Note that comments
above on the use in deflateInit2() applies to the magnitude of windowBits.
@@ -802,7 +864,10 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
32 to windowBits to enable zlib and gzip decoding with automatic header
detection, or add 16 to decode only the gzip format (the zlib format will
return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
- crc32 instead of an adler32.
+ CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see
+ below), inflate() will not automatically decode concatenated gzip streams.
+ inflate() will return Z_STREAM_END at the end of the gzip stream. The state
+ would need to be reset to continue decoding a subsequent gzip stream.
inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
@@ -823,7 +888,7 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
Initializes the decompression dictionary from the given uncompressed byte
sequence. This function must be called immediately after a call of inflate,
if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
- can be determined from the adler32 value returned by that call of inflate.
+ can be determined from the Adler-32 value returned by that call of inflate.
The compressor and decompressor must use exactly the same dictionary (see
deflateSetDictionary). For raw inflate, this function can be called at any
time to set the dictionary. If the provided dictionary is smaller than the
@@ -834,7 +899,7 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
- expected one (incorrect adler32 value). inflateSetDictionary does not
+ expected one (incorrect Adler-32 value). inflateSetDictionary does not
perform any decompression: this will be done by subsequent calls of
inflate().
*/
@@ -892,7 +957,7 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
/*
This function is equivalent to inflateEnd followed by inflateInit,
- but does not free and reallocate all the internal decompression state. The
+ but does not free and reallocate the internal decompression state. The
stream will keep attributes that may have been set by inflateInit2.
inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
@@ -904,7 +969,9 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
/*
This function is the same as inflateReset, but it also permits changing
the wrap and window size requests. The windowBits parameter is interpreted
- the same as it is for inflateInit2.
+ the same as it is for inflateInit2. If the window size is changed, then the
+ memory allocated for the window is freed, and the window will be reallocated
+ by inflate() if needed.
inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
stream state was inconsistent (such as zalloc or state being Z_NULL), or if
@@ -956,7 +1023,7 @@ ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
location in the input stream can be determined from avail_in and data_type
as noted in the description for the Z_BLOCK flush parameter for inflate.
- inflateMark returns the value noted above or -1 << 16 if the provided
+ inflateMark returns the value noted above, or -65536 if the provided
source stream state was inconsistent.
*/
@@ -1048,9 +1115,9 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
This routine would normally be used in a utility that reads zip or gzip
files and writes out uncompressed files. The utility would decode the
header and process the trailer on its own, hence this routine expects only
- the raw deflate stream to decompress. This is different from the normal
- behavior of inflate(), which expects either a zlib or gzip header and
- trailer around the deflate stream.
+ the raw deflate stream to decompress. This is different from the default
+ behavior of inflate(), which expects a zlib header and trailer around the
+ deflate stream.
inflateBack() uses two subroutines supplied by the caller that are then
called by inflateBack() for input and output. inflateBack() calls those
@@ -1059,12 +1126,12 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
parameters and return types are defined above in the in_func and out_func
typedefs. inflateBack() will call in(in_desc, &buf) which should return the
number of bytes of provided input, and a pointer to that input in buf. If
- there is no input available, in() must return zero--buf is ignored in that
- case--and inflateBack() will return a buffer error. inflateBack() will call
- out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out()
- should return zero on success, or non-zero on failure. If out() returns
- non-zero, inflateBack() will return with an error. Neither in() nor out()
- are permitted to change the contents of the window provided to
+ there is no input available, in() must return zero -- buf is ignored in that
+ case -- and inflateBack() will return a buffer error. inflateBack() will
+ call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].
+ out() should return zero on success, or non-zero on failure. If out()
+ returns non-zero, inflateBack() will return with an error. Neither in() nor
+ out() are permitted to change the contents of the window provided to
inflateBackInit(), which is also the buffer that out() uses to write from.
The length written by out() will be at most the window size. Any non-zero
amount of input may be provided by in().
@@ -1092,7 +1159,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
using strm->next_in which will be Z_NULL only if in() returned an error. If
strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
non-zero. (in() will always be called before out(), so strm->next_in is
- assured to be defined if out() returns non-zero.) Note that inflateBack()
+ assured to be defined if out() returns non-zero.) Note that inflateBack()
cannot return Z_OK.
*/
@@ -1114,7 +1181,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
7.6: size of z_off_t
Compiler, assembler, and debug options:
- 8: DEBUG
+ 8: ZLIB_DEBUG
9: ASMV or ASMINF -- use ASM code
10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
11: 0 (reserved)
@@ -1164,7 +1231,8 @@ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
the byte length of the source buffer. Upon entry, destLen is the total size
of the destination buffer, which must be at least the value returned by
compressBound(sourceLen). Upon exit, destLen is the actual size of the
- compressed buffer.
+ compressed data. compress() is equivalent to compress2() with a level
+ parameter of Z_DEFAULT_COMPRESSION.
compress returns Z_OK if success, Z_MEM_ERROR if there was not
enough memory, Z_BUF_ERROR if there was not enough room in the output
@@ -1180,7 +1248,7 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
length of the source buffer. Upon entry, destLen is the total size of the
destination buffer, which must be at least the value returned by
compressBound(sourceLen). Upon exit, destLen is the actual size of the
- compressed buffer.
+ compressed data.
compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_BUF_ERROR if there was not enough room in the output buffer,
@@ -1203,7 +1271,7 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
uncompressed data. (The size of the uncompressed data must have been saved
previously by the compressor and transmitted to the decompressor by some
mechanism outside the scope of this compression library.) Upon exit, destLen
- is the actual size of the uncompressed buffer.
+ is the actual size of the uncompressed data.
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
enough memory, Z_BUF_ERROR if there was not enough room in the output
@@ -1212,6 +1280,14 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
buffer with the uncompressed data up to that point.
*/
+ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong *sourceLen));
+/*
+ Same as uncompress, except that sourceLen is a pointer, where the
+ length of the source is *sourceLen. On return, *sourceLen is the number of
+ source bytes consumed.
+*/
+
/* gzip file access functions */
/*
@@ -1290,10 +1366,9 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
default buffer size is 8192 bytes. This function must be called after
gzopen() or gzdopen(), and before any other calls that read or write the
file. The buffer memory allocation is always deferred to the first read or
- write. Two buffers are allocated, either both of the specified size when
- writing, or one of the specified size and the other twice that size when
- reading. A larger buffer size of, for example, 64K or 128K bytes will
- noticeably increase the speed of decompression (reading).
+ write. Three times that size in buffer space is allocated. A larger buffer
+ size of, for example, 64K or 128K bytes will noticeably increase the speed
+ of decompression (reading).
The new buffer size also affects the maximum length for gzprintf().
@@ -1304,10 +1379,12 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
/*
Dynamically update the compression level or strategy. See the description
- of deflateInit2 for the meaning of these parameters.
+ of deflateInit2 for the meaning of these parameters. Previously provided
+ data is flushed before the parameter change.
- gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
- opened for writing.
+ gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
+ opened for writing, Z_ERRNO if there is an error writing the flushed data,
+ or Z_MEM_ERROR if there is a memory allocation error.
*/
ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
@@ -1335,7 +1412,35 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
case.
gzread returns the number of uncompressed bytes actually read, less than
- len for end of file, or -1 for error.
+ len for end of file, or -1 for error. If len is too large to fit in an int,
+ then nothing is read, -1 is returned, and the error state is set to
+ Z_STREAM_ERROR.
+*/
+
+ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
+ gzFile file));
+/*
+ Read up to nitems items of size size from file to buf, otherwise operating
+ as gzread() does. This duplicates the interface of stdio's fread(), with
+ size_t request and return types. If the library defines size_t, then
+ z_size_t is identical to size_t. If not, then z_size_t is an unsigned
+ integer type that can contain a pointer.
+
+ gzfread() returns the number of full items read of size size, or zero if
+ the end of the file was reached and a full item could not be read, or if
+ there was an error. gzerror() must be consulted if zero is returned in
+ order to determine if there was an error. If the multiplication of size and
+ nitems overflows, i.e. the product does not fit in a z_size_t, then nothing
+ is read, zero is returned, and the error state is set to Z_STREAM_ERROR.
+
+ In the event that the end of file is reached and only a partial item is
+ available at the end, i.e. the remaining uncompressed data length is not a
+ multiple of size, then the final partial item is nevetheless read into buf
+ and the end-of-file flag is set. The length of the partial item read is not
+ provided, but could be inferred from the result of gztell(). This behavior
+ is the same as the behavior of fread() implementations in common libraries,
+ but it prevents the direct use of gzfread() to read a concurrently written
+ file, reseting and retrying on end-of-file, when size is not 1.
*/
ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
@@ -1346,19 +1451,33 @@ ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
error.
*/
+ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
+ z_size_t nitems, gzFile file));
+/*
+ gzfwrite() writes nitems items of size size from buf to file, duplicating
+ the interface of stdio's fwrite(), with size_t request and return types. If
+ the library defines size_t, then z_size_t is identical to size_t. If not,
+ then z_size_t is an unsigned integer type that can contain a pointer.
+
+ gzfwrite() returns the number of full items written of size size, or zero
+ if there was an error. If the multiplication of size and nitems overflows,
+ i.e. the product does not fit in a z_size_t, then nothing is written, zero
+ is returned, and the error state is set to Z_STREAM_ERROR.
+*/
+
ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
/*
Converts, formats, and writes the arguments to the compressed file under
control of the format string, as in fprintf. gzprintf returns the number of
- uncompressed bytes actually written, or 0 in case of error. The number of
- uncompressed bytes written is limited to 8191, or one less than the buffer
- size given to gzbuffer(). The caller should assure that this limit is not
- exceeded. If it is exceeded, then gzprintf() will return an error (0) with
- nothing written. In this case, there may also be a buffer overflow with
- unpredictable consequences, which is possible only if zlib was compiled with
- the insecure functions sprintf() or vsprintf() because the secure snprintf()
- or vsnprintf() functions were not available. This can be determined using
- zlibCompileFlags().
+ uncompressed bytes actually written, or a negative zlib error code in case
+ of error. The number of uncompressed bytes written is limited to 8191, or
+ one less than the buffer size given to gzbuffer(). The caller should assure
+ that this limit is not exceeded. If it is exceeded, then gzprintf() will
+ return an error (0) with nothing written. In this case, there may also be a
+ buffer overflow with unpredictable consequences, which is possible only if
+ zlib was compiled with the insecure functions sprintf() or vsprintf()
+ because the secure snprintf() or vsnprintf() functions were not available.
+ This can be determined using zlibCompileFlags().
*/
ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
@@ -1418,7 +1537,7 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
If the flush parameter is Z_FINISH, the remaining data is written and the
gzip stream is completed in the output. If gzwrite() is called again, a new
gzip stream will be started in the output. gzread() is able to read such
- concatented gzip streams.
+ concatenated gzip streams.
gzflush should be called only when strictly necessary because it will
degrade compression if called too often.
@@ -1572,7 +1691,7 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
return the updated checksum. If buf is Z_NULL, this function returns the
required initial value for the checksum.
- An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+ An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
much faster.
Usage example:
@@ -1585,6 +1704,12 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
if (adler != original_adler) error();
*/
+ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf,
+ z_size_t len));
+/*
+ Same as adler32(), but with a size_t length.
+*/
+
/*
ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
z_off_t len2));
@@ -1614,6 +1739,12 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
if (crc != original_crc) error();
*/
+ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf,
+ z_size_t len));
+/*
+ Same as crc32(), but with a size_t length.
+*/
+
/*
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
@@ -1644,19 +1775,35 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
unsigned char FAR *window,
const char *version,
int stream_size));
-#define deflateInit(strm, level) \
- deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit(strm) \
- inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
-#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
- deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
- (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit2(strm, windowBits) \
- inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
- (int)sizeof(z_stream))
-#define inflateBackInit(strm, windowBits, window) \
- inflateBackInit_((strm), (windowBits), (window), \
- ZLIB_VERSION, (int)sizeof(z_stream))
+#ifdef Z_PREFIX_SET
+# define z_deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+# define z_inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+#else
+# define deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+# define inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+# define inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+# define inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+#endif
#ifndef Z_SOLO
@@ -1676,10 +1823,10 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
#ifdef Z_PREFIX_SET
# undef z_gzgetc
# define z_gzgetc(g) \
- ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
#else
# define gzgetc(g) \
- ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
#endif
/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
@@ -1737,19 +1884,16 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
#endif /* !Z_SOLO */
-/* hack for buggy compilers */
-#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
- struct internal_state {int dummy;};
-#endif
-
/* undocumented functions */
ZEXTERN const char * ZEXPORT zError OF((int));
ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void));
ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int));
+ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp));
ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
-#if defined(_WIN32) && !defined(Z_SOLO)
+#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO)
ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
const char *mode));
#endif
diff --git a/src/thirdparty/zlib/zlib.vcxproj b/src/thirdparty/zlib/zlib.vcxproj
index af8fafc19..e7bcd95dd 100644
--- a/src/thirdparty/zlib/zlib.vcxproj
+++ b/src/thirdparty/zlib/zlib.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -26,74 +26,23 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\..\platform.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="..\..\common.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\common.props" />
+ <Import Project="..\..\common-3rd-party.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
- </ClCompile>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
- <WarningLevel>TurnOffAllWarnings</WarningLevel>
- <EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
@@ -109,6 +58,8 @@
<ClCompile Include="inffast.c" />
<ClCompile Include="inflate.c" />
<ClCompile Include="inftrees.c" />
+ <ClCompile Include="minizip\ioapi.c" />
+ <ClCompile Include="minizip\unzip.c" />
<ClCompile Include="trees.c" />
<ClCompile Include="uncompr.c" />
<ClCompile Include="zutil.c" />
diff --git a/src/thirdparty/zlib/zlib.vcxproj.filters b/src/thirdparty/zlib/zlib.vcxproj.filters
index 6d06bea02..6030351d8 100644
--- a/src/thirdparty/zlib/zlib.vcxproj.filters
+++ b/src/thirdparty/zlib/zlib.vcxproj.filters
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{65ae02f7-7823-4d41-b101-45ef452df4b8}</UniqueIdentifier>
@@ -56,6 +56,12 @@
<ClCompile Include="zutil.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="minizip\unzip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="minizip\ioapi.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="crc32.h">
diff --git a/src/thirdparty/zlib/zutil.c b/src/thirdparty/zlib/zutil.c
index 23d2ebef0..a76c6b0c7 100644
--- a/src/thirdparty/zlib/zutil.c
+++ b/src/thirdparty/zlib/zutil.c
@@ -1,5 +1,5 @@
/* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
+ * Copyright (C) 1995-2017 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -10,21 +10,18 @@
# include "gzguts.h"
#endif
-#ifndef NO_DUMMY_DECL
-struct internal_state {int dummy;}; /* for buggy compilers */
-#endif
-
z_const char * const z_errmsg[10] = {
-"need dictionary", /* Z_NEED_DICT 2 */
-"stream end", /* Z_STREAM_END 1 */
-"", /* Z_OK 0 */
-"file error", /* Z_ERRNO (-1) */
-"stream error", /* Z_STREAM_ERROR (-2) */
-"data error", /* Z_DATA_ERROR (-3) */
-"insufficient memory", /* Z_MEM_ERROR (-4) */
-"buffer error", /* Z_BUF_ERROR (-5) */
-"incompatible version",/* Z_VERSION_ERROR (-6) */
-""};
+ (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */
+ (z_const char *)"stream end", /* Z_STREAM_END 1 */
+ (z_const char *)"", /* Z_OK 0 */
+ (z_const char *)"file error", /* Z_ERRNO (-1) */
+ (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */
+ (z_const char *)"data error", /* Z_DATA_ERROR (-3) */
+ (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */
+ (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */
+ (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */
+ (z_const char *)""
+};
const char * ZEXPORT zlibVersion()
@@ -61,7 +58,7 @@ uLong ZEXPORT zlibCompileFlags()
case 8: flags += 2 << 6; break;
default: flags += 3 << 6;
}
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
flags += 1 << 8;
#endif
#if defined(ASMV) || defined(ASMINF)
@@ -115,8 +112,8 @@ uLong ZEXPORT zlibCompileFlags()
return flags;
}
-#ifdef DEBUG
-
+#ifdef ZLIB_DEBUG
+#include <stdlib.h>
# ifndef verbose
# define verbose 0
# endif
@@ -219,9 +216,11 @@ local ptr_table table[MAX_PTR];
voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
{
- voidpf buf = opaque; /* just to make some compilers happy */
+ voidpf buf;
ulg bsize = (ulg)items*size;
+ (void)opaque;
+
/* If we allocate less than 65520 bytes, we assume that farmalloc
* will return a usable pointer which doesn't have to be normalized.
*/
@@ -244,6 +243,9 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
{
int n;
+
+ (void)opaque;
+
if (*(ush*)&ptr != 0) { /* object < 64K */
farfree(ptr);
return;
@@ -259,7 +261,6 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
next_ptr--;
return;
}
- ptr = opaque; /* just to make some compilers happy */
Assert(0, "zcfree: ptr not found");
}
@@ -278,13 +279,13 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
{
- if (opaque) opaque = 0; /* to make compiler happy */
+ (void)opaque;
return _halloc((long)items, size);
}
void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
{
- if (opaque) opaque = 0; /* to make compiler happy */
+ (void)opaque;
_hfree(ptr);
}
@@ -306,7 +307,7 @@ voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
unsigned items;
unsigned size;
{
- if (opaque) items += size - size; /* make compiler happy */
+ (void)opaque;
return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
(voidpf)calloc(items, size);
}
@@ -315,8 +316,8 @@ void ZLIB_INTERNAL zcfree (opaque, ptr)
voidpf opaque;
voidpf ptr;
{
+ (void)opaque;
free(ptr);
- if (opaque) return; /* make compiler happy */
}
#endif /* MY_ZCALLOC */
diff --git a/src/thirdparty/zlib/zutil.h b/src/thirdparty/zlib/zutil.h
index 24ab06b1c..b079ea6a8 100644
--- a/src/thirdparty/zlib/zutil.h
+++ b/src/thirdparty/zlib/zutil.h
@@ -1,5 +1,5 @@
/* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -36,7 +36,9 @@
#ifndef local
# define local static
#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
+/* since "static" is used to mean two completely different things in C, we
+ define "local" for the non-static meaning of "static", for readability
+ (compile with -Dlocal if your debugger can't find static symbols) */
typedef unsigned char uch;
typedef uch FAR uchf;
@@ -98,28 +100,38 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
#endif
#ifdef AMIGA
-# define OS_CODE 0x01
+# define OS_CODE 1
#endif
#if defined(VAXC) || defined(VMS)
-# define OS_CODE 0x02
+# define OS_CODE 2
# define F_OPEN(name, mode) \
fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
#endif
+#ifdef __370__
+# if __TARGET_LIB__ < 0x20000000
+# define OS_CODE 4
+# elif __TARGET_LIB__ < 0x40000000
+# define OS_CODE 11
+# else
+# define OS_CODE 8
+# endif
+#endif
+
#if defined(ATARI) || defined(atarist)
-# define OS_CODE 0x05
+# define OS_CODE 5
#endif
#ifdef OS2
-# define OS_CODE 0x06
+# define OS_CODE 6
# if defined(M_I86) && !defined(Z_SOLO)
# include <malloc.h>
# endif
#endif
#if defined(MACOS) || defined(TARGET_OS_MAC)
-# define OS_CODE 0x07
+# define OS_CODE 7
# ifndef Z_SOLO
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
# include <unix.h> /* for fdopen */
@@ -131,18 +143,24 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
# endif
#endif
-#ifdef TOPS20
-# define OS_CODE 0x0a
+#ifdef __acorn
+# define OS_CODE 13
#endif
-#ifdef WIN32
-# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */
-# define OS_CODE 0x0b
-# endif
+#if defined(WIN32) && !defined(__CYGWIN__)
+# define OS_CODE 10
+#endif
+
+#ifdef _BEOS_
+# define OS_CODE 16
+#endif
+
+#ifdef __TOS_OS400__
+# define OS_CODE 18
#endif
-#ifdef __50SERIES /* Prime/PRIMOS */
-# define OS_CODE 0x0f
+#ifdef __APPLE__
+# define OS_CODE 19
#endif
#if defined(_BEOS_) || defined(RISCOS)
@@ -177,7 +195,7 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
/* common defaults */
#ifndef OS_CODE
-# define OS_CODE 0x03 /* assume Unix */
+# define OS_CODE 3 /* assume Unix */
#endif
#ifndef F_OPEN
@@ -216,7 +234,7 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
#endif
/* Diagnostic functions */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
# include <stdio.h>
extern int ZLIB_INTERNAL z_verbose;
extern void ZLIB_INTERNAL z_error OF((char *m));
diff --git a/update_version.bat b/update_version.bat
index a837a95f3..c4ed1d415 100755
--- a/update_version.bat
+++ b/update_version.bat
@@ -1,5 +1,5 @@
@ECHO OFF
-REM (C) 2010-2013 see Authors.txt
+REM (C) 2010-2013, 2015 see Authors.txt
REM
REM This file is part of MPC-HC.
REM
@@ -18,21 +18,22 @@ REM along with this program. If not, see <http://www.gnu.org/licenses/>.
SETLOCAL
+SET "FILE_DIR=%~dp0"
+PUSHD "%FILE_DIR%"
-PUSHD %~dp0
+SET "COMMON=%FILE_DIR%\common.bat"
-IF EXIST "build.user.bat" (
- CALL "build.user.bat"
-) ELSE (
- IF DEFINED GIT (SET MPCHC_GIT=%GIT%)
- IF DEFINED MSYS (SET MPCHC_MSYS=%MSYS%) ELSE (GOTO MissingVar)
-)
+IF EXIST "build.user.bat" CALL "build.user.bat"
-SET PATH=%MPCHC_MSYS%\bin;%MPCHC_GIT%\cmd;%PATH%
-FOR %%G IN (bash.exe) DO (SET FOUND=%%~$PATH:G)
-IF NOT DEFINED FOUND GOTO MissingVar
+IF NOT DEFINED MPCHC_GIT IF DEFINED GIT (SET MPCHC_GIT=%GIT%)
+SET "PATH=%MPCHC_GIT%\cmd;%PATH%"
-bash.exe ./version.sh
+CALL "%COMMON%" :SubSetPath
+IF %ERRORLEVEL% NEQ 0 GOTO MissingVar
+CALL "%COMMON%" :SubDoesExist bash.exe
+IF %ERRORLEVEL% NEQ 0 GOTO MissingVar
+
+bash.exe ./version.sh %*
:END
diff --git a/version.sh b/version.sh
index 09a8eb291..76fc731c2 100755
--- a/version.sh
+++ b/version.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# (C) 2012-2013 see Authors.txt
+# (C) 2012-2013, 2015 see Authors.txt
#
# This file is part of MPC-HC.
#
@@ -17,21 +17,23 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
versionfile_fixed="./include/version.h"
-versionfile="./include/version_rev.h"
+versionfile="./build/version_rev.h"
manifestfile="./src/mpc-hc/res/mpc-hc.exe.manifest"
+[[ "$1" == "--quiet" ]] && quiet="yes" || quiet=""
+
# Read major, minor and patch version numbers from static version.h file
while read -r _ var value; do
if [[ $var == MPC_VERSION_MAJOR ]]; then
- ver_fixed_major=$value
+ ver_fixed_major=$(echo $value|tr -d '\r')
elif [[ $var == MPC_VERSION_MINOR ]]; then
- ver_fixed_minor=$value
+ ver_fixed_minor=$(echo $value|tr -d '\r')
elif [[ $var == MPC_VERSION_PATCH ]]; then
- ver_fixed_patch=$value
+ ver_fixed_patch=$(echo $value|tr -d '\r')
fi
done < "$versionfile_fixed"
ver_fixed="${ver_fixed_major}.${ver_fixed_minor}.${ver_fixed_patch}"
-echo "Version: $ver_fixed"
+[[ -z "$quiet" ]] && echo "Version: $ver_fixed"
# If we are not inside a git repo use hardcoded values
if ! git rev-parse --git-dir > /dev/null 2>&1; then
@@ -41,48 +43,63 @@ if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo "Warning: Git not available or not a git repo. Using dummy values for hash and version number."
else
# Get information about the current version
- describe=$(git describe --long)
- echo "Describe: $describe"
+ describe=$(git describe --long --dirty)
+ [[ -z "$quiet" ]] && echo "Describe: $describe"
# Get the abbreviated hash of the current changeset
hash=${describe##*-g}
# Get the number changesets since the last tag
ver=${describe#*-}
- ver=${ver%-*}
+ ver=${ver%-g*}
ver_additional=" ($hash)"
# Get the current branch name
branch=$(git symbolic-ref -q HEAD) && branch=${branch##refs/heads/} || branch="no branch"
- echo "On branch: $branch"
- echo "Hash: $hash"
- if ! git diff-index --quiet HEAD; then
- echo "Revision: $ver (Local modifications found)"
- else
+ if [[ -z "$quiet" ]]; then
+ echo "On branch: $branch"
+ echo "Hash: $hash"
echo "Revision: $ver"
fi
- # If we are on another branch that isn't master, we want extra info like on
- # which commit from master it is based on. This assumes we
+ # If we are on another branch that isn't develop or master, we want extra info like on
+ # which commit from develop it is based on. This assumes we
# won't ever branch from a changeset from before the move to git
- if [[ "$branch" != "master" ]]; then
+ if [ "$branch" != "develop" ] && [ "$branch" != "master" ]; then
version_info="#define MPCHC_BRANCH _T(\"$branch\")"$'\n'
ver_additional+=" ($branch)"
- if git show-ref --verify --quiet refs/heads/master; then
- # Get where the branch is based on master
- base=$(git merge-base master HEAD)
+ if git show-ref --verify --quiet refs/heads/develop; then
+ # Get where the branch is based on develop
+ base=$(git merge-base develop HEAD)
base=${base:0:7}
- ver_additional+=" (master@${base})"
- echo "Mergebase: master@${base}"
+ ver_additional+=" (develop@${base})"
+ [[ -z "$quiet" ]] && echo "Mergebase: develop@${base}"
fi
fi
fi
+gcc_exe=('gcc' 'x86_64-w64-mingw32-gcc')
+gcc_version_str=()
+
+for gcc in "${gcc_exe[@]}"; do
+ gcc_machine=$($gcc -dumpmachine)
+ if [ "$gcc_machine" != "" ];then
+ if [[ $gcc_machine == *"w64-mingw32" ]]; then
+ mingw_name="MinGW-w64"
+ elif [[ $gcc_machine == *"-mingw32" ]]; then
+ mingw_name="MinGW"
+ fi
+ gcc_version_str+=("$mingw_name GCC $($gcc -dumpversion)")
+ fi
+done
+
version_info+="#define MPCHC_HASH _T(\"$hash\")"$'\n'
version_info+="#define MPC_VERSION_REV $ver"$'\n'
-version_info+="#define MPC_VERSION_ADDITIONAL _T(\"${ver_additional}\")"
+version_info+="#define MPC_VERSION_ADDITIONAL _T(\"${ver_additional}\")"$'\n'
+version_info+="#define GCC32_VERSION _T(\"${gcc_version_str[0]}\")"$'\n'
+version_info+="#define GCC64_VERSION _T(\"${gcc_version_str[1]}\")"
# Update version_rev.h if it does not exist, or if version information was changed.